diff --git a/.github/labeler.yml b/.github/labeler.yml index baa8f5ff05f..9a52f1477ef 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -20,7 +20,7 @@ JS: Kotlin: - java/kotlin-extractor/**/* - - java/ql/test/kotlin/**/* + - java/ql/test-kotlin*/**/* Python: - python/**/* diff --git a/.gitignore b/.gitignore index c81e23fc7f8..3d2e92e3ca9 100644 --- a/.gitignore +++ b/.gitignore @@ -39,6 +39,9 @@ # local bazel options /local.bazelrc +# generated cmake directory +/.bazel-cmake + # CLion project files /.clwb diff --git a/config/identical-files.json b/config/identical-files.json index a24b5a3a618..017fdd11481 100644 --- a/config/identical-files.json +++ b/config/identical-files.json @@ -88,123 +88,46 @@ "IR Instruction": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll", "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll", - "csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll" ], "IR IRBlock": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRBlock.qll", "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRBlock.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRBlock.qll", - "csharp/ql/src/experimental/ir/implementation/raw/IRBlock.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRBlock.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRBlock.qll" ], "IR IRVariable": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRVariable.qll", "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRVariable.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRVariable.qll", - "csharp/ql/src/experimental/ir/implementation/raw/IRVariable.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRVariable.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRVariable.qll" ], "IR IRFunction": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRFunction.qll", "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRFunction.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRFunction.qll", - "csharp/ql/src/experimental/ir/implementation/raw/IRFunction.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRFunction.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRFunction.qll" ], "IR Operand": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Operand.qll", "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Operand.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Operand.qll", - "csharp/ql/src/experimental/ir/implementation/raw/Operand.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Operand.qll" - ], - "IR IRType": [ - "cpp/ql/lib/semmle/code/cpp/ir/implementation/IRType.qll", - "csharp/ql/src/experimental/ir/implementation/IRType.qll" - ], - "IR IRConfiguration": [ - "cpp/ql/lib/semmle/code/cpp/ir/implementation/IRConfiguration.qll", - "csharp/ql/src/experimental/ir/implementation/IRConfiguration.qll" - ], - "IR UseSoundEscapeAnalysis": [ - "cpp/ql/lib/semmle/code/cpp/ir/implementation/UseSoundEscapeAnalysis.qll", - "csharp/ql/src/experimental/ir/implementation/UseSoundEscapeAnalysis.qll" - ], - "IR IRFunctionBase": [ - "cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/IRFunctionBase.qll", - "csharp/ql/src/experimental/ir/implementation/internal/IRFunctionBase.qll" - ], - "IR Operand Tag": [ - "cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/OperandTag.qll", - "csharp/ql/src/experimental/ir/implementation/internal/OperandTag.qll" - ], - "IR TInstruction": [ - "cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TInstruction.qll", - "csharp/ql/src/experimental/ir/implementation/internal/TInstruction.qll" - ], - "IR TIRVariable": [ - "cpp/ql/lib/semmle/code/cpp/ir/implementation/internal/TIRVariable.qll", - "csharp/ql/src/experimental/ir/implementation/internal/TIRVariable.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Operand.qll" ], "IR IR": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IR.qll", "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IR.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IR.qll", - "csharp/ql/src/experimental/ir/implementation/raw/IR.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IR.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IR.qll" ], "IR IRConsistency": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRConsistency.qll", "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRConsistency.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRConsistency.qll", - "csharp/ql/src/experimental/ir/implementation/raw/IRConsistency.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRConsistency.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRConsistency.qll" ], "IR PrintIR": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/PrintIR.qll", "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/PrintIR.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/PrintIR.qll", - "csharp/ql/src/experimental/ir/implementation/raw/PrintIR.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/PrintIR.qll" - ], - "IR IntegerConstant": [ - "cpp/ql/lib/semmle/code/cpp/ir/internal/IntegerConstant.qll", - "csharp/ql/src/experimental/ir/internal/IntegerConstant.qll" - ], - "IR IntegerInteval": [ - "cpp/ql/lib/semmle/code/cpp/ir/internal/IntegerInterval.qll", - "csharp/ql/src/experimental/ir/internal/IntegerInterval.qll" - ], - "IR IntegerPartial": [ - "cpp/ql/lib/semmle/code/cpp/ir/internal/IntegerPartial.qll", - "csharp/ql/src/experimental/ir/internal/IntegerPartial.qll" - ], - "IR Overlap": [ - "cpp/ql/lib/semmle/code/cpp/ir/internal/Overlap.qll", - "csharp/ql/src/experimental/ir/internal/Overlap.qll" - ], - "IR EdgeKind": [ - "cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll", - "csharp/ql/src/experimental/ir/implementation/EdgeKind.qll" - ], - "IR MemoryAccessKind": [ - "cpp/ql/lib/semmle/code/cpp/ir/implementation/MemoryAccessKind.qll", - "csharp/ql/src/experimental/ir/implementation/MemoryAccessKind.qll" - ], - "IR TempVariableTag": [ - "cpp/ql/lib/semmle/code/cpp/ir/implementation/TempVariableTag.qll", - "csharp/ql/src/experimental/ir/implementation/TempVariableTag.qll" - ], - "IR Opcode": [ - "cpp/ql/lib/semmle/code/cpp/ir/implementation/Opcode.qll", - "csharp/ql/src/experimental/ir/implementation/Opcode.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/PrintIR.qll" ], "IR SSAConsistency": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConsistency.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConsistency.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConsistency.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConsistency.qll" ], "C++ IR InstructionImports": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/InstructionImports.qll", @@ -252,8 +175,7 @@ ], "SSA AliasAnalysis": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/AliasAnalysis.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysis.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasAnalysis.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysis.qll" ], "SSA PrintAliasAnalysis": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/PrintAliasAnalysis.qll", @@ -268,44 +190,28 @@ "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingImports.qll", "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingImports.qll" ], - "IR SSA SimpleSSA": [ - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SimpleSSA.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SimpleSSA.qll" - ], - "IR AliasConfiguration (unaliased_ssa)": [ - "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/AliasConfiguration.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasConfiguration.qll" - ], "IR SSA SSAConstruction": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstruction.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstruction.qll" ], "IR SSA PrintSSA": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/PrintSSA.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/PrintSSA.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/PrintSSA.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/PrintSSA.qll" ], "IR ValueNumberInternal": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll", "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingInternal.qll", - "csharp/ql/src/experimental/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingInternal.qll" ], "C++ IR ValueNumber": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/ValueNumbering.qll", "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll", - "csharp/ql/src/experimental/ir/implementation/raw/gvn/ValueNumbering.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll" ], "C++ IR PrintValueNumbering": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/PrintValueNumbering.qll", "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/PrintValueNumbering.qll", - "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/PrintValueNumbering.qll", - "csharp/ql/src/experimental/ir/implementation/raw/gvn/PrintValueNumbering.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/PrintValueNumbering.qll" + "cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/PrintValueNumbering.qll" ], "C++ IR ConstantAnalysis": [ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/constant/ConstantAnalysis.qll", @@ -333,38 +239,6 @@ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/reachability/PrintDominance.qll", "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/reachability/PrintDominance.qll" ], - "C# IR InstructionImports": [ - "csharp/ql/src/experimental/ir/implementation/raw/internal/InstructionImports.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/InstructionImports.qll" - ], - "C# IR IRImports": [ - "csharp/ql/src/experimental/ir/implementation/raw/internal/IRImports.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRImports.qll" - ], - "C# IR IRBlockImports": [ - "csharp/ql/src/experimental/ir/implementation/raw/internal/IRBlockImports.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRBlockImports.qll" - ], - "C# IR IRFunctionImports": [ - "csharp/ql/src/experimental/ir/implementation/raw/internal/IRFunctionImports.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRFunctionImports.qll" - ], - "C# IR IRVariableImports": [ - "csharp/ql/src/experimental/ir/implementation/raw/internal/IRVariableImports.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRVariableImports.qll" - ], - "C# IR OperandImports": [ - "csharp/ql/src/experimental/ir/implementation/raw/internal/OperandImports.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/OperandImports.qll" - ], - "C# IR PrintIRImports": [ - "csharp/ql/src/experimental/ir/implementation/raw/internal/PrintIRImports.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/PrintIRImports.qll" - ], - "C# IR ValueNumberingImports": [ - "csharp/ql/src/experimental/ir/implementation/raw/gvn/internal/ValueNumberingImports.qll", - "csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingImports.qll" - ], "C# ControlFlowReachability": [ "csharp/ql/lib/semmle/code/csharp/dataflow/internal/ControlFlowReachability.qll", "csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/ControlFlowReachability.qll" @@ -381,7 +255,6 @@ "cpp/ql/lib/semmle/code/cpp/XML.qll", "csharp/ql/lib/semmle/code/csharp/XML.qll", "java/ql/lib/semmle/code/xml/XML.qll", - "javascript/ql/lib/semmle/javascript/XML.qll", "python/ql/lib/semmle/python/xml/XML.qll" ], "DuplicationProblems.inc.qhelp": [ diff --git a/cpp/autobuilder/Semmle.Autobuild.Cpp/Program.cs b/cpp/autobuilder/Semmle.Autobuild.Cpp/Program.cs index a7556197bcd..5fca6f556fb 100644 --- a/cpp/autobuilder/Semmle.Autobuild.Cpp/Program.cs +++ b/cpp/autobuilder/Semmle.Autobuild.Cpp/Program.cs @@ -1,5 +1,7 @@ using System; + using Semmle.Autobuild.Shared; +using Semmle.Util; namespace Semmle.Autobuild.Cpp { diff --git a/cpp/downgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/exprs.ql b/cpp/downgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/exprs.ql new file mode 100644 index 00000000000..366c074e5da --- /dev/null +++ b/cpp/downgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/exprs.ql @@ -0,0 +1,13 @@ +class Expr extends @expr { + string toString() { none() } +} + +class Location extends @location_expr { + string toString() { none() } +} + +from Expr expr, int kind, int kind_new, Location loc +where + exprs(expr, kind, loc) and + if kind = 363 then kind_new = 1 else kind_new = kind +select expr, kind_new, loc diff --git a/cpp/downgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/old.dbscheme b/cpp/downgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/old.dbscheme new file mode 100644 index 00000000000..aa7ff0ab32c --- /dev/null +++ b/cpp/downgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/old.dbscheme @@ -0,0 +1,2250 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + 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 + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#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 + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_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( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int 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 +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: 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 +); + +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 +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* 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; diff --git a/cpp/downgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/semmlecode.cpp.dbscheme b/cpp/downgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..298438feb14 --- /dev/null +++ b/cpp/downgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/semmlecode.cpp.dbscheme @@ -0,0 +1,2244 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + 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 + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#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 + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_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( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int 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 +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: 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 +); + +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 +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* 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; diff --git a/cpp/downgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/upgrade.properties b/cpp/downgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/upgrade.properties new file mode 100644 index 00000000000..b2f465d1ba5 --- /dev/null +++ b/cpp/downgrades/aa7ff0ab32cd4674f6ab731d32fea64116997b05/upgrade.properties @@ -0,0 +1,4 @@ +description: Introduce re-use expressions +compatibility: partial +expr_reuse.rel: delete +exprs.rel: run exprs.qlo diff --git a/cpp/ql/lib/change-notes/2024-03-15-switches-in-guard-conditions.md b/cpp/ql/lib/change-notes/2024-03-15-switches-in-guard-conditions.md new file mode 100644 index 00000000000..cf0b920e29d --- /dev/null +++ b/cpp/ql/lib/change-notes/2024-03-15-switches-in-guard-conditions.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* Added a predicate `GuardCondition.valueControls` to query whether a basic block is guarded by a particular `case` of a `switch` statement. \ No newline at end of file diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index 0adba6c1e71..e7762fc9fa8 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -20,6 +20,44 @@ private predicate isUnreachedBlock(IRBlock block) { block.getFirstInstruction() instanceof UnreachedInstruction } +private newtype TAbstractValue = + TBooleanValue(boolean b) { b = true or b = false } or + TMatchValue(CaseEdge c) + +/** + * An abstract value. This is either a boolean value, or a `switch` case. + */ +abstract class AbstractValue extends TAbstractValue { + /** Gets an abstract value that represents the dual of this value, if any. */ + abstract AbstractValue getDualValue(); + + /** Gets a textual representation of this abstract value. */ + abstract string toString(); +} + +/** A Boolean value. */ +class BooleanValue extends AbstractValue, TBooleanValue { + /** Gets the underlying Boolean value. */ + boolean getValue() { this = TBooleanValue(result) } + + override BooleanValue getDualValue() { result.getValue() = this.getValue().booleanNot() } + + override string toString() { result = this.getValue().toString() } +} + +/** A value that represents a match against a specific `switch` case. */ +class MatchValue extends AbstractValue, TMatchValue { + /** Gets the case. */ + CaseEdge getCase() { this = TMatchValue(result) } + + override MatchValue getDualValue() { + // A `MatchValue` has no dual. + none() + } + + override string toString() { result = this.getCase().toString() } +} + /** * A Boolean condition in the AST that guards one or more basic blocks. This includes * operands of logical operators but not switch statements. @@ -34,6 +72,15 @@ class GuardCondition extends Expr { this.(BinaryLogicalOperation).getAnOperand() instanceof GuardCondition } + /** + * Holds if this condition controls `controlled`, meaning that `controlled` is only + * entered if the value of this condition is `v`. + * + * For details on what "controls" mean, see the QLDoc for `controls`. + */ + cached + predicate valueControls(BasicBlock controlled, AbstractValue v) { none() } + /** * Holds if this condition controls `controlled`, meaning that `controlled` is only * entered if the value of this condition is `testIsTrue`. @@ -61,7 +108,9 @@ class GuardCondition extends Expr { * true (for `&&`) or false (for `||`) branch. */ cached - predicate controls(BasicBlock controlled, boolean testIsTrue) { none() } + final predicate controls(BasicBlock controlled, boolean testIsTrue) { + this.valueControls(controlled, any(BooleanValue bv | bv.getValue() = testIsTrue)) + } /** Holds if (determined by this guard) `left < right + k` evaluates to `isLessThan` if this expression evaluates to `testIsTrue`. */ cached @@ -98,13 +147,13 @@ private class GuardConditionFromBinaryLogicalOperator extends GuardCondition { this.(BinaryLogicalOperation).getAnOperand() instanceof GuardCondition } - override predicate controls(BasicBlock controlled, boolean testIsTrue) { + override predicate valueControls(BasicBlock controlled, AbstractValue v) { exists(BinaryLogicalOperation binop, GuardCondition lhs, GuardCondition rhs | this = binop and lhs = binop.getLeftOperand() and rhs = binop.getRightOperand() and - lhs.controls(controlled, testIsTrue) and - rhs.controls(controlled, testIsTrue) + lhs.valueControls(controlled, v) and + rhs.valueControls(controlled, v) ) } @@ -146,10 +195,10 @@ private class GuardConditionFromIR extends GuardCondition { GuardConditionFromIR() { this = ir.getUnconvertedResultExpression() } - override predicate controls(BasicBlock controlled, boolean testIsTrue) { + override predicate valueControls(BasicBlock controlled, AbstractValue v) { // This condition must determine the flow of control; that is, this // node must be a top-level condition. - this.controlsBlock(controlled, testIsTrue) + this.controlsBlock(controlled, v) } /** Holds if (determined by this guard) `left < right + k` evaluates to `isLessThan` if this expression evaluates to `testIsTrue`. */ @@ -198,13 +247,13 @@ private class GuardConditionFromIR extends GuardCondition { /** * Holds if this condition controls `block`, meaning that `block` is only - * entered if the value of this condition is `testIsTrue`. This helper + * entered if the value of this condition is `v`. This helper * predicate does not necessarily hold for binary logical operations like * `&&` and `||`. See the detailed explanation on predicate `controls`. */ - private predicate controlsBlock(BasicBlock controlled, boolean testIsTrue) { + private predicate controlsBlock(BasicBlock controlled, AbstractValue v) { exists(IRBlock irb | - ir.controls(irb, testIsTrue) and + ir.valueControls(irb, v) and nonExcludedIRAndBasicBlock(irb, controlled) and not isUnreachedBlock(irb) ) @@ -249,10 +298,28 @@ private predicate nonExcludedIRAndBasicBlock(IRBlock irb, BasicBlock controlled) */ cached class IRGuardCondition extends Instruction { - ConditionalBranchInstruction branch; + Instruction branch; cached - IRGuardCondition() { branch = get_branch_for_condition(this) } + IRGuardCondition() { branch = getBranchForCondition(this) } + + /** + * Holds if this condition controls `controlled`, meaning that `controlled` is only + * entered if the value of this condition is `v`. + * + * For details on what "controls" mean, see the QLDoc for `controls`. + */ + cached + predicate valueControls(IRBlock controlled, AbstractValue v) { + // This condition must determine the flow of control; that is, this + // node must be a top-level condition. + this.controlsBlock(controlled, v) + or + exists(IRGuardCondition ne | + this = ne.(LogicalNotInstruction).getUnary() and + ne.valueControls(controlled, v.getDualValue()) + ) + } /** * Holds if this condition controls `controlled`, meaning that `controlled` is only @@ -282,13 +349,25 @@ class IRGuardCondition extends Instruction { */ cached predicate controls(IRBlock controlled, boolean testIsTrue) { - // This condition must determine the flow of control; that is, this - // node must be a top-level condition. - this.controlsBlock(controlled, testIsTrue) + this.valueControls(controlled, any(BooleanValue bv | bv.getValue() = testIsTrue)) + } + + /** + * Holds if the control-flow edge `(pred, succ)` may be taken only if + * the value of this condition is `v`. + */ + cached + predicate valueControlsEdge(IRBlock pred, IRBlock succ, AbstractValue v) { + pred.getASuccessor() = succ and + this.valueControls(pred, v) or - exists(IRGuardCondition ne | - this = ne.(LogicalNotInstruction).getUnary() and - ne.controls(controlled, testIsTrue.booleanNot()) + succ = this.getBranchSuccessor(v) and + ( + branch.(ConditionalBranchInstruction).getCondition() = this and + branch.getBlock() = pred + or + branch.(SwitchInstruction).getExpression() = this and + branch.getBlock() = pred ) } @@ -297,17 +376,12 @@ class IRGuardCondition extends Instruction { * the value of this condition is `testIsTrue`. */ cached - predicate controlsEdge(IRBlock pred, IRBlock succ, boolean testIsTrue) { - pred.getASuccessor() = succ and - this.controls(pred, testIsTrue) - or - succ = this.getBranchSuccessor(testIsTrue) and - branch.getCondition() = this and - branch.getBlock() = pred + final predicate controlsEdge(IRBlock pred, IRBlock succ, boolean testIsTrue) { + this.valueControlsEdge(pred, succ, any(BooleanValue bv | bv.getValue() = testIsTrue)) } /** - * Gets the block to which `branch` jumps directly when this condition is `testIsTrue`. + * Gets the block to which `branch` jumps directly when the value of this condition is `v`. * * This predicate is intended to help with situations in which an inference can only be made * based on an edge between a block with multiple successors and a block with multiple @@ -321,14 +395,20 @@ class IRGuardCondition extends Instruction { * return x; * ``` */ - private IRBlock getBranchSuccessor(boolean testIsTrue) { - branch.getCondition() = this and - ( - testIsTrue = true and - result.getFirstInstruction() = branch.getTrueSuccessor() + private IRBlock getBranchSuccessor(AbstractValue v) { + branch.(ConditionalBranchInstruction).getCondition() = this and + exists(BooleanValue bv | bv = v | + bv.getValue() = true and + result.getFirstInstruction() = branch.(ConditionalBranchInstruction).getTrueSuccessor() or - testIsTrue = false and - result.getFirstInstruction() = branch.getFalseSuccessor() + bv.getValue() = false and + result.getFirstInstruction() = branch.(ConditionalBranchInstruction).getFalseSuccessor() + ) + or + exists(SwitchInstruction switch, CaseEdge kind | switch = branch | + switch.getExpression() = this and + result.getFirstInstruction() = switch.getSuccessor(kind) and + kind = v.(MatchValue).getCase() ) } @@ -396,11 +476,11 @@ class IRGuardCondition extends Instruction { /** * Holds if this condition controls `block`, meaning that `block` is only - * entered if the value of this condition is `testIsTrue`. This helper + * entered if the value of this condition is `v`. This helper * predicate does not necessarily hold for binary logical operations like * `&&` and `||`. See the detailed explanation on predicate `controls`. */ - private predicate controlsBlock(IRBlock controlled, boolean testIsTrue) { + private predicate controlsBlock(IRBlock controlled, AbstractValue v) { not isUnreachedBlock(controlled) and // // For this block to control the block `controlled` with `testIsTrue` the @@ -441,7 +521,7 @@ class IRGuardCondition extends Instruction { // that `this` strictly dominates `controlled` so that isn't necessary to check // directly. exists(IRBlock succ | - succ = this.getBranchSuccessor(testIsTrue) and + succ = this.getBranchSuccessor(v) and this.hasDominatingEdgeTo(succ) and succ.dominates(controlled) ) @@ -476,12 +556,14 @@ class IRGuardCondition extends Instruction { private IRBlock getBranchBlock() { result = branch.getBlock() } } -private ConditionalBranchInstruction get_branch_for_condition(Instruction guard) { - result.getCondition() = guard +private Instruction getBranchForCondition(Instruction guard) { + result.(ConditionalBranchInstruction).getCondition() = guard or exists(LogicalNotInstruction cond | - result = get_branch_for_condition(cond) and cond.getUnary() = guard + result = getBranchForCondition(cond) and cond.getUnary() = guard ) + or + result.(SwitchInstruction).getExpression() = guard } /** diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/DataFlow.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/DataFlow.qll index 43bf134ea79..505b2e190e5 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/DataFlow.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/DataFlow.qll @@ -28,6 +28,6 @@ import cpp deprecated module DataFlow { private import semmle.code.cpp.dataflow.internal.DataFlowImplSpecific private import codeql.dataflow.DataFlow - import DataFlowMake + import DataFlowMake import semmle.code.cpp.dataflow.internal.DataFlowImpl1 } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/TaintTracking.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/TaintTracking.qll index 8a8db1bdcce..1f93e2a74df 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/TaintTracking.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/TaintTracking.qll @@ -29,6 +29,6 @@ deprecated module TaintTracking { private import semmle.code.cpp.dataflow.internal.DataFlowImplSpecific private import semmle.code.cpp.dataflow.internal.TaintTrackingImplSpecific private import codeql.dataflow.TaintTracking - import TaintFlowMake + import TaintFlowMake import semmle.code.cpp.dataflow.internal.tainttracking1.TaintTrackingImpl } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll index 115e145bec0..2038b14880a 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll @@ -2,6 +2,7 @@ * DEPRECATED: Use `semmle.code.cpp.dataflow.new.DataFlow` instead. */ +private import semmle.code.cpp.Location private import DataFlowImplSpecific private import codeql.dataflow.internal.DataFlowImpl -import MakeImpl +import MakeImpl diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl1.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl1.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl1.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl1.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll index 5d61aac1561..b6e72884fa8 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll @@ -2,6 +2,7 @@ * DEPRECATED: Use `semmle.code.cpp.dataflow.new.DataFlow` instead. */ +private import semmle.code.cpp.Location private import DataFlowImplSpecific private import codeql.dataflow.internal.DataFlowImplCommon -import MakeImplCommon +import MakeImplCommon diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplConsistency.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplConsistency.qll index 8abc7a8760a..558bb80f368 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplConsistency.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplConsistency.qll @@ -10,7 +10,7 @@ private import DataFlowImplSpecific private import TaintTrackingImplSpecific private import codeql.dataflow.internal.DataFlowImplConsistency -private module Input implements InputSig { +private module Input implements InputSig { predicate argHasPostUpdateExclude(Private::ArgumentNode n) { // Is the null pointer (or something that's not really a pointer) exists(n.asExpr().getValue()) @@ -26,4 +26,4 @@ private module Input implements InputSig { } } -module Consistency = MakeConsistency; +module Consistency = MakeConsistency; diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplSpecific.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplSpecific.qll index e8686419aac..f2e9ffc6988 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplSpecific.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplSpecific.qll @@ -4,6 +4,7 @@ * Provides C++-specific definitions for use in the data flow library. */ +private import semmle.code.cpp.Location private import codeql.dataflow.DataFlow module Private { @@ -15,7 +16,7 @@ module Public { import DataFlowUtil } -module CppOldDataFlow implements InputSig { +module CppOldDataFlow implements InputSig { import Private import Public diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowUtil.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowUtil.qll index 83efaf1511f..0b932e7f05f 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowUtil.qll @@ -105,7 +105,7 @@ class Node extends TNode { * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - predicate hasLocationInfo( + deprecated predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/TaintTrackingImplSpecific.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/TaintTrackingImplSpecific.qll index e1549ea57a3..694d344c2f9 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/TaintTrackingImplSpecific.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/TaintTrackingImplSpecific.qll @@ -4,9 +4,10 @@ * Provides C++-specific definitions for use in the taint tracking library. */ +private import semmle.code.cpp.Location private import codeql.dataflow.TaintTracking private import DataFlowImplSpecific -module CppOldTaintTracking implements InputSig { +module CppOldTaintTracking implements InputSig { import TaintTrackingUtil } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/new/DataFlow.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/new/DataFlow.qll index ea4218da734..bcbebd0de1e 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/new/DataFlow.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/new/DataFlow.qll @@ -28,6 +28,6 @@ import cpp module DataFlow { private import semmle.code.cpp.ir.dataflow.internal.DataFlowImplSpecific private import codeql.dataflow.DataFlow - import DataFlowMake + import DataFlowMake import semmle.code.cpp.ir.dataflow.internal.DataFlowImpl1 } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/new/TaintTracking.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/new/TaintTracking.qll index 87e037aad9b..d28a389203f 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/new/TaintTracking.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/new/TaintTracking.qll @@ -27,6 +27,7 @@ module TaintTracking { private import semmle.code.cpp.ir.dataflow.internal.DataFlowImplSpecific private import semmle.code.cpp.ir.dataflow.internal.TaintTrackingImplSpecific private import codeql.dataflow.TaintTracking - import TaintFlowMake + private import semmle.code.cpp.Location + import TaintFlowMake import semmle.code.cpp.ir.dataflow.internal.tainttracking1.TaintTrackingImpl } diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll index b87805d1967..42e441668f2 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll @@ -1322,3 +1322,23 @@ class CoYieldExpr extends UnaryOperation, @co_yield { override int getPrecedence() { result = 2 } } + +/** + * An expression representing the re-use of another expression. + * + * In some specific cases an expression may be referred to outside its + * original context. A re-use expression wraps any such reference. A + * re-use expression can for example occur as the qualifier of an implicit + * destructor called on a temporary object, where the original use of the + * expression is in the definition of the temporary. + */ +class ReuseExpr extends Expr, @reuseexpr { + override string getAPrimaryQlClass() { result = "ReuseExpr" } + + override string toString() { result = "reuse of " + this.getReusedExpr().toString() } + + /** + * Gets the expression that is being re-used. + */ + Expr getReusedExpr() { expr_reuse(underlyingElement(this), unresolveElement(result)) } +} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DataFlow.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DataFlow.qll index a2dd75d635c..671d82c74ef 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DataFlow.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/DataFlow.qll @@ -24,6 +24,6 @@ import cpp module DataFlow { private import semmle.code.cpp.ir.dataflow.internal.DataFlowImplSpecific private import codeql.dataflow.DataFlow - import DataFlowMake + import DataFlowMake import semmle.code.cpp.ir.dataflow.internal.DataFlowImpl1 } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/TaintTracking.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/TaintTracking.qll index 6f2bfcdd6aa..9ca1315ec3e 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/TaintTracking.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/TaintTracking.qll @@ -23,6 +23,6 @@ module TaintTracking { private import semmle.code.cpp.ir.dataflow.internal.DataFlowImplSpecific private import semmle.code.cpp.ir.dataflow.internal.TaintTrackingImplSpecific private import codeql.dataflow.TaintTracking - import TaintFlowMake + import TaintFlowMake import semmle.code.cpp.ir.dataflow.internal.tainttracking1.TaintTrackingImpl } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll index f3e52187647..edac7f5f62a 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll @@ -1,3 +1,4 @@ +private import semmle.code.cpp.Location private import DataFlowImplSpecific private import codeql.dataflow.internal.DataFlowImpl -import MakeImpl +import MakeImpl diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl1.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl1.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl1.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl1.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll index 266693f45f6..e620cc5de78 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll @@ -1,3 +1,4 @@ +private import semmle.code.cpp.Location private import DataFlowImplSpecific private import codeql.dataflow.internal.DataFlowImplCommon -import MakeImplCommon +import MakeImplCommon diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplConsistency.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplConsistency.qll index c32f63a619d..6b0de326d11 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplConsistency.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplConsistency.qll @@ -8,7 +8,7 @@ private import DataFlowImplSpecific private import TaintTrackingImplSpecific private import codeql.dataflow.internal.DataFlowImplConsistency -private module Input implements InputSig { +private module Input implements InputSig { predicate argHasPostUpdateExclude(Private::ArgumentNode n) { // The rules for whether an IR argument gets a post-update node are too // complex to model here. @@ -16,4 +16,4 @@ private module Input implements InputSig { } } -module Consistency = MakeConsistency; +module Consistency = MakeConsistency; diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplSpecific.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplSpecific.qll index a8b9f99f354..aeb136c761e 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplSpecific.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplSpecific.qll @@ -3,6 +3,7 @@ */ private import codeql.dataflow.DataFlow +private import semmle.code.cpp.Location module Private { import DataFlowPrivate @@ -13,7 +14,7 @@ module Public { import DataFlowUtil } -module CppDataFlow implements InputSig { +module CppDataFlow implements InputSig { import Private import Public diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll index 2a7dfbb8208..81fc3115f55 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll @@ -34,7 +34,7 @@ private import Node0ToString cached private newtype TIRDataFlowNode = TNode0(Node0Impl node) { DataFlowImplCommon::forceCachingInSameStage() } or - TVariableNode(Variable var, int indirectionIndex) { + TGlobalLikeVariableNode(GlobalLikeVariable var, int indirectionIndex) { indirectionIndex = [getMinIndirectionsForType(var.getUnspecifiedType()) .. Ssa::getMaxIndirectionsForType(var.getUnspecifiedType())] } or @@ -396,7 +396,7 @@ class Node extends TIRDataFlowNode { * modeling flow in and out of global variables. */ Variable asVariable() { - this = TVariableNode(result, getMinIndirectionsForType(result.getUnspecifiedType())) + this = TGlobalLikeVariableNode(result, getMinIndirectionsForType(result.getUnspecifiedType())) } /** @@ -406,7 +406,7 @@ class Node extends TIRDataFlowNode { */ Variable asIndirectVariable(int indirectionIndex) { indirectionIndex > getMinIndirectionsForType(result.getUnspecifiedType()) and - this = TVariableNode(result, indirectionIndex) + this = TGlobalLikeVariableNode(result, indirectionIndex) } /** Gets an indirection of this node's underlying variable, if any. */ @@ -448,7 +448,7 @@ class Node extends TIRDataFlowNode { * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - predicate hasLocationInfo( + deprecated predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) @@ -1331,6 +1331,7 @@ private import GetConvertedResultExpression /** Holds if `node` is an `OperandNode` that should map `node.asExpr()` to `e`. */ predicate exprNodeShouldBeOperand(OperandNode node, Expr e, int n) { + not exprNodeShouldBeIndirectOperand(_, e, n) and exists(Instruction def | unique( | | getAUse(def)) = node.getOperand() and e = getConvertedResultExpression(def, n) @@ -1347,6 +1348,22 @@ private predicate indirectExprNodeShouldBeIndirectOperand( ) } +/** Holds if `node` should be an `IndirectOperand` that maps `node.asExpr()` to `e`. */ +private predicate exprNodeShouldBeIndirectOperand(IndirectOperand node, Expr e, int n) { + exists(ArgumentOperand operand | + // When an argument (qualifier or positional) is a prvalue and the + // parameter (qualifier or positional) is a (const) reference, IR + // construction introduces a temporary `IRVariable`. The `VariableAddress` + // instruction has the argument as its `getConvertedResultExpression` + // result. However, the instruction actually represents the _address_ of + // the argument. So to fix this mismatch, we have the indirection of the + // `VariableAddressInstruction` map to the expression. + node.hasOperandAndIndirectionIndex(operand, 1) and + e = getConvertedResultExpression(operand.getDef(), n) and + operand.getDef().(VariableAddressInstruction).getIRVariable() instanceof IRTempVariable + ) +} + private predicate exprNodeShouldBeIndirectOutNode(IndirectArgumentOutNode node, Expr e, int n) { exists(CallInstruction call | call.getStaticCallTarget() instanceof Constructor and @@ -1359,6 +1376,7 @@ private predicate exprNodeShouldBeIndirectOutNode(IndirectArgumentOutNode node, predicate exprNodeShouldBeInstruction(Node node, Expr e, int n) { not exprNodeShouldBeOperand(_, e, n) and not exprNodeShouldBeIndirectOutNode(_, e, n) and + not exprNodeShouldBeIndirectOperand(_, e, n) and e = getConvertedResultExpression(node.asInstruction(), n) } @@ -1391,7 +1409,8 @@ abstract private class ExprNodeBase extends Node { private predicate exprNodeShouldBe(Expr e, int n) { exprNodeShouldBeInstruction(_, e, n) or exprNodeShouldBeOperand(_, e, n) or - exprNodeShouldBeIndirectOutNode(_, e, n) + exprNodeShouldBeIndirectOutNode(_, e, n) or + exprNodeShouldBeIndirectOperand(_, e, n) } private class InstructionExprNode extends ExprNodeBase, InstructionNode { @@ -1533,6 +1552,12 @@ private class IndirectArgumentOutExprNode extends ExprNodeBase, IndirectArgument final override Expr getConvertedExpr(int n) { exprNodeShouldBeIndirectOutNode(this, result, n) } } +private class IndirectOperandExprNode extends ExprNodeBase instanceof IndirectOperand { + IndirectOperandExprNode() { exprNodeShouldBeIndirectOperand(this, _, _) } + + final override Expr getConvertedExpr(int n) { exprNodeShouldBeIndirectOperand(this, result, n) } +} + /** * An expression, viewed as a node in a data flow graph. */ @@ -1751,15 +1776,18 @@ class DefinitionByReferenceNode extends IndirectArgumentOutNode { } /** - * A `Node` corresponding to a variable in the program, as opposed to the - * value of that variable at some particular point. This can be used for - * modeling flow in and out of global variables. + * A `Node` corresponding to a global (or `static` local) variable in the + * program, as opposed to the value of that variable at some particular point. + * This is used to model flow through global variables (and `static` local + * variables). + * + * There is no `VariableNode` for non-`static` local variables. */ -class VariableNode extends Node, TVariableNode { +class VariableNode extends Node, TGlobalLikeVariableNode { Variable v; int indirectionIndex; - VariableNode() { this = TVariableNode(v, indirectionIndex) } + VariableNode() { this = TGlobalLikeVariableNode(v, indirectionIndex) } /** Gets the variable corresponding to this node. */ Variable getVariable() { result = v } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll index 69ace9f890e..c036343544c 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll @@ -10,13 +10,12 @@ private import semmle.code.cpp.models.interfaces.FunctionInputsAndOutputs as FIO private import semmle.code.cpp.ir.internal.IRCppLanguage private import semmle.code.cpp.ir.dataflow.internal.ModelUtil private import DataFlowPrivate -private import ssa0.SsaInternals as SsaInternals0 import SsaInternalsCommon private module SourceVariables { cached private newtype TSourceVariable = - TMkSourceVariable(SsaInternals0::SourceVariable base, int ind) { + TMkSourceVariable(BaseSourceVariable base, int ind) { ind = [0 .. countIndirectionsForCppType(base.getLanguageType()) + 1] } @@ -30,7 +29,7 @@ private module SourceVariables { } class SourceVariable extends TSourceVariable { - SsaInternals0::SourceVariable base; + BaseSourceVariable base; int ind; SourceVariable() { this = TMkSourceVariable(base, ind) } @@ -42,7 +41,7 @@ private module SourceVariables { * Gets the base source variable (i.e., the variable without any * indirections) of this source variable. */ - SsaInternals0::SourceVariable getBaseVariable() { result = base } + BaseSourceVariable getBaseVariable() { result = base } /** Gets a textual representation of this element. */ string toString() { result = repeatStars(this.getIndirection()) + base.toString() } @@ -104,17 +103,9 @@ predicate hasRawIndirectInstruction(Instruction instr, int indirectionIndex) { cached private newtype TDefOrUseImpl = + TDefAddressImpl(BaseIRVariable v) or TDefImpl(BaseSourceVariableInstruction base, Operand address, int indirectionIndex) { - isDef(_, _, address, base, _, indirectionIndex) and - ( - // We only include the definition if the SSA pruning stage - // concluded that the definition is live after the write. - any(SsaInternals0::Def def).getAddressOperand() = address - or - // Since the pruning stage doesn't know about global variables we can't use the above check to - // rule out dead assignments to globals. - base.(VariableAddressInstruction).getAstVariable() instanceof GlobalLikeVariable - ) + isDef(_, _, address, base, _, indirectionIndex) } or TUseImpl(BaseSourceVariableInstruction base, Operand operand, int indirectionIndex) { isUse(_, operand, base, _, indirectionIndex) and @@ -133,8 +124,7 @@ private newtype TDefOrUseImpl = TIteratorDef( Operand iteratorDerefAddress, BaseSourceVariableInstruction container, int indirectionIndex ) { - isIteratorDef(container, iteratorDerefAddress, _, _, indirectionIndex) and - any(SsaInternals0::Def def | def.isIteratorDef()).getAddressOperand() = iteratorDerefAddress + isIteratorDef(container, iteratorDerefAddress, _, _, indirectionIndex) } or TIteratorUse( Operand iteratorAddress, BaseSourceVariableInstruction container, int indirectionIndex @@ -267,24 +257,64 @@ private predicate sourceVariableHasBaseAndIndex(SourceVariable v, BaseSourceVari } abstract class DefImpl extends DefOrUseImpl { - Operand address; int ind; bindingset[ind] DefImpl() { any() } - abstract int getIndirection(); - - abstract Node0Impl getValue(); - - abstract predicate isCertain(); - - Operand getAddressOperand() { result = address } - override int getIndirectionIndex() { result = ind } override string toString() { result = "Def of " + this.getSourceVariable() } + abstract int getIndirection(); + + abstract predicate isCertain(); + + abstract Node0Impl getValue(); +} + +/** An initial definition of an `IRVariable`'s address. */ +private class DefAddressImpl extends DefImpl, TDefAddressImpl { + BaseIRVariable v; + + DefAddressImpl() { + this = TDefAddressImpl(v) and + ind = 0 + } + + final override int getIndirection() { result = 0 } + + final override predicate isCertain() { any() } + + final override Node0Impl getValue() { none() } + + final override predicate hasIndexInBlock(IRBlock block, int index) { + block = v.getIRVariable().getEnclosingIRFunction().getEntryBlock() and + index = 0 + } + + override Cpp::Location getLocation() { result = v.getIRVariable().getLocation() } + + final override SourceVariable getSourceVariable() { + result.getBaseVariable() = v and + result.getIndirection() = 0 + } + + final override BaseSourceVariableInstruction getBase() { none() } +} + +/** + * An SSA definition that has an associated `Operand` representing the address + * that is being written to. + */ +abstract private class OperandBasedDef extends DefImpl { + Operand address; + + bindingset[ind] + OperandBasedDef() { any() } + + Operand getAddressOperand() { result = address } + override Cpp::Location getLocation() { result = this.getAddressOperand().getUse().getLocation() } final override predicate hasIndexInBlock(IRBlock block, int index) { @@ -292,7 +322,7 @@ abstract class DefImpl extends DefOrUseImpl { } } -private class DirectDef extends DefImpl, TDefImpl { +private class DirectDef extends OperandBasedDef, TDefImpl { BaseSourceVariableInstruction base; DirectDef() { this = TDefImpl(base, address, ind) } @@ -306,7 +336,7 @@ private class DirectDef extends DefImpl, TDefImpl { override predicate isCertain() { isDef(true, _, address, base, _, ind) } } -private class IteratorDef extends DefImpl, TIteratorDef { +private class IteratorDef extends OperandBasedDef, TIteratorDef { BaseSourceVariableInstruction container; IteratorDef() { this = TIteratorDef(address, container, ind) } @@ -984,17 +1014,6 @@ predicate fromPhiNode(SsaPhiNode nodeFrom, Node nodeTo) { ) } -/** - * Holds if there is a write at index `i` in basic block `bb` to variable `v` that's - * subsequently read (as determined by the SSA pruning stage). - */ -private predicate variableWriteCand(IRBlock bb, int i, SourceVariable v) { - exists(SsaInternals0::Def def, SsaInternals0::SourceVariable v0 | - def.asDefOrUse().hasIndexInBlock(bb, i, v0) and - v0 = v.getBaseVariable() - ) -} - private predicate sourceVariableIsGlobal( SourceVariable sv, GlobalLikeVariable global, IRFunction func, int indirectionIndex ) { @@ -1018,16 +1037,14 @@ private module SsaInput implements SsaImplCommon::InputSig { predicate variableWrite(IRBlock bb, int i, SourceVariable v, boolean certain) { DataFlowImplCommon::forceCachingInSameStage() and ( - variableWriteCand(bb, i, v) or - sourceVariableIsGlobal(v, _, _, _) - ) and - exists(DefImpl def | def.hasIndexInBlock(bb, i, v) | - if def.isCertain() then certain = true else certain = false - ) - or - exists(GlobalDefImpl global | - global.hasIndexInBlock(bb, i, v) and - certain = true + exists(DefImpl def | def.hasIndexInBlock(bb, i, v) | + if def.isCertain() then certain = true else certain = false + ) + or + exists(GlobalDefImpl global | + global.hasIndexInBlock(bb, i, v) and + certain = true + ) ) } @@ -1202,7 +1219,7 @@ class UseOrPhi extends SsaDefOrUse { class Def extends DefOrUse { override DefImpl defOrUse; - Operand getAddressOperand() { result = defOrUse.getAddressOperand() } + Operand getAddressOperand() { result = defOrUse.(OperandBasedDef).getAddressOperand() } Instruction getAddress() { result = this.getAddressOperand().getDef() } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingImplSpecific.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingImplSpecific.qll index f62468087b9..3364eff6e35 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingImplSpecific.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingImplSpecific.qll @@ -4,7 +4,8 @@ private import codeql.dataflow.TaintTracking private import DataFlowImplSpecific +private import semmle.code.cpp.Location -module CppTaintTracking implements InputSig { +module CppTaintTracking implements InputSig { import TaintTrackingUtil } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ssa0/SsaInternals.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ssa0/SsaInternals.qll deleted file mode 100644 index ce53005470d..00000000000 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ssa0/SsaInternals.qll +++ /dev/null @@ -1,347 +0,0 @@ -/** - * This module defines an initial SSA pruning stage that doesn't take - * indirections into account. - */ - -private import codeql.ssa.Ssa as SsaImplCommon -private import semmle.code.cpp.ir.IR -private import semmle.code.cpp.ir.dataflow.internal.DataFlowImplCommon as DataFlowImplCommon -private import semmle.code.cpp.models.interfaces.Allocation as Alloc -private import semmle.code.cpp.models.interfaces.DataFlow as DataFlow -private import semmle.code.cpp.ir.implementation.raw.internal.SideEffects as SideEffects -private import semmle.code.cpp.ir.internal.IRCppLanguage -private import semmle.code.cpp.ir.dataflow.internal.DataFlowPrivate -private import semmle.code.cpp.ir.dataflow.internal.DataFlowUtil -private import semmle.code.cpp.ir.dataflow.internal.SsaInternalsCommon - -private module SourceVariables { - class SourceVariable extends BaseSourceVariable { - /** - * Gets the base source variable of this `SourceVariable`. - */ - BaseSourceVariable getBaseVariable() { result = this } - } -} - -import SourceVariables - -private newtype TDefOrUseImpl = - TDefImpl(Operand address) { isDef(_, _, address, _, _, _) } or - TUseImpl(Operand operand) { - isUse(_, operand, _, _, _) and - not isDef(true, _, operand, _, _, _) - } or - TIteratorDef(BaseSourceVariableInstruction container, Operand iteratorAddress) { - isIteratorDef(container, iteratorAddress, _, _, _) - } or - TIteratorUse(BaseSourceVariableInstruction container, Operand iteratorAddress) { - isIteratorUse(container, iteratorAddress, _, _) - } or - TFinalParameterUse(Parameter p) { - any(Indirection indirection).getType() = p.getUnspecifiedType() - } - -abstract private class DefOrUseImpl extends TDefOrUseImpl { - /** Gets a textual representation of this element. */ - abstract string toString(); - - /** Gets the block of this definition or use. */ - final IRBlock getBlock() { this.hasIndexInBlock(result, _) } - - /** Holds if this definition or use has index `index` in block `block`. */ - abstract predicate hasIndexInBlock(IRBlock block, int index); - - final predicate hasIndexInBlock(IRBlock block, int index, SourceVariable sv) { - this.hasIndexInBlock(block, index) and - sv = this.getSourceVariable() - } - - /** Gets the location of this element. */ - abstract Cpp::Location getLocation(); - - abstract BaseSourceVariableInstruction getBase(); - - final BaseSourceVariable getBaseSourceVariable() { - result = this.getBase().getBaseSourceVariable() - } - - /** Gets the variable that is defined or used. */ - final SourceVariable getSourceVariable() { - result.getBaseVariable() = this.getBaseSourceVariable() - } - - abstract predicate isCertain(); -} - -abstract class DefImpl extends DefOrUseImpl { - Operand address; - - Operand getAddressOperand() { result = address } - - abstract Node0Impl getValue(); - - override string toString() { result = address.toString() } - - override Cpp::Location getLocation() { result = this.getAddressOperand().getLocation() } - - final override predicate hasIndexInBlock(IRBlock block, int index) { - this.getAddressOperand().getUse() = block.getInstruction(index) - } -} - -private class DirectDef extends DefImpl, TDefImpl { - DirectDef() { this = TDefImpl(address) } - - override BaseSourceVariableInstruction getBase() { isDef(_, _, address, result, _, _) } - - override Node0Impl getValue() { isDef(_, result, address, _, _, _) } - - override predicate isCertain() { isDef(true, _, address, _, _, _) } -} - -private class IteratorDef extends DefImpl, TIteratorDef { - BaseSourceVariableInstruction container; - - IteratorDef() { this = TIteratorDef(container, address) } - - override BaseSourceVariableInstruction getBase() { result = container } - - override Node0Impl getValue() { isIteratorDef(_, address, result, _, _) } - - override predicate isCertain() { none() } -} - -abstract class UseImpl extends DefOrUseImpl { } - -abstract private class OperandBasedUse extends UseImpl { - Operand operand; - - override string toString() { result = operand.toString() } - - final override predicate hasIndexInBlock(IRBlock block, int index) { - // Ideally, this would just be implemented as: - // ``` - // operand.getUse() = block.getInstruction(index) - // ``` - // but because the IR generated for a snippet such as - // ``` - // int x = *p++; - // ``` - // looks like - // ``` - // r1(glval) = VariableAddress[x] : - // r2(glval) = VariableAddress[p] : - // r3(int *) = Load[p] : &:r2, m1 - // r4(int) = Constant[1] : - // r5(int *) = PointerAdd[4] : r3, r4 - // m3(int *) = Store[p] : &:r2, r5 - // r6(int *) = CopyValue : r3 - // r7(int) = Load[?] : &:r6, ~m2 - // m2(int) = Store[x] : &:r1, r7 - // ``` - // we need to ensure that the `r3` operand of the `CopyValue` instruction isn't seen as a fresh use - // of `p` that happens after the increment. So if the base instruction of this use comes from a - // post-fix crement operation we set the index of the SSA use that wraps the `r3` operand at the - // `CopyValue` instruction to be the same index as the `r3` operand at the `PointerAdd` instruction. - // This ensures that the SSA library doesn't create flow from the `PointerAdd` to `r6`. - exists(BaseSourceVariableInstruction base | base = this.getBase() | - if base.getAst() = any(Cpp::PostfixCrementOperation c).getOperand() - then - exists(Operand op | - op = - min(Operand cand, int i | - isUse(_, cand, base, _, _) and - block.getInstruction(i) = cand.getUse() - | - cand order by i - ) and - block.getInstruction(index) = op.getUse() - ) - else operand.getUse() = block.getInstruction(index) - ) - } - - final override Cpp::Location getLocation() { result = operand.getLocation() } -} - -private class DirectUse extends OperandBasedUse, TUseImpl { - DirectUse() { this = TUseImpl(operand) } - - override BaseSourceVariableInstruction getBase() { isUse(_, operand, result, _, _) } - - override predicate isCertain() { isUse(true, operand, _, _, _) } -} - -private class IteratorUse extends OperandBasedUse, TIteratorUse { - BaseSourceVariableInstruction container; - - IteratorUse() { this = TIteratorUse(container, operand) } - - override BaseSourceVariableInstruction getBase() { result = container } - - override predicate isCertain() { none() } -} - -private class FinalParameterUse extends UseImpl, TFinalParameterUse { - Parameter p; - - FinalParameterUse() { this = TFinalParameterUse(p) } - - override string toString() { result = p.toString() } - - final override predicate hasIndexInBlock(IRBlock block, int index) { - // Ideally, this should always be a `ReturnInstruction`, but if - // someone forgets to write a `return` statement in a function - // with a non-void return type we generate an `UnreachedInstruction`. - // In this case we still want to generate flow out of such functions - // if they write to a parameter. So we pick the index of the - // `UnreachedInstruction` as the index of this use. - // Note that a function may have both a `ReturnInstruction` and an - // `UnreachedInstruction`. If that's the case this predicate will - // return multiple results. I don't think this is detrimental to - // performance, however. - exists(Instruction return | - return instanceof ReturnInstruction or - return instanceof UnreachedInstruction - | - block.getInstruction(index) = return and - return.getEnclosingFunction() = p.getFunction() - ) - } - - final override Cpp::Location getLocation() { - // Parameters can have multiple locations. When there's a unique location we use - // that one, but if multiple locations exist we default to an unknown location. - result = unique( | | p.getLocation()) - or - not exists(unique( | | p.getLocation())) and - result instanceof UnknownDefaultLocation - } - - override BaseSourceVariableInstruction getBase() { - exists(InitializeParameterInstruction init | - init.getParameter() = p and - // This is always a `VariableAddressInstruction` - result = init.getAnOperand().getDef() - ) - } - - override predicate isCertain() { any() } -} - -private module SsaInput implements SsaImplCommon::InputSig { - import InputSigCommon - import SourceVariables - - /** - * Holds if the `i`'th write in block `bb` writes to the variable `v`. - * `certain` is `true` if the write is guaranteed to overwrite the entire variable. - */ - predicate variableWrite(IRBlock bb, int i, SourceVariable v, boolean certain) { - DataFlowImplCommon::forceCachingInSameStage() and - exists(DefImpl def | def.hasIndexInBlock(bb, i, v) | - if def.isCertain() then certain = true else certain = false - ) - } - - /** - * Holds if the `i`'th read in block `bb` reads to the variable `v`. - * `certain` is `true` if the read is guaranteed. - */ - predicate variableRead(IRBlock bb, int i, SourceVariable v, boolean certain) { - exists(UseImpl use | use.hasIndexInBlock(bb, i, v) | - if use.isCertain() then certain = true else certain = false - ) - } -} - -private newtype TSsaDefOrUse = - TDefOrUse(DefOrUseImpl defOrUse) { - defOrUse instanceof UseImpl - or - // If `defOrUse` is a definition we only include it if the - // SSA library concludes that it's live after the write. - exists(DefinitionExt def, SourceVariable sv, IRBlock bb, int i | - def.definesAt(sv, bb, i, _) and - defOrUse.(DefImpl).hasIndexInBlock(bb, i, sv) - ) - } or - TPhi(PhiNode phi) - -abstract private class SsaDefOrUse extends TSsaDefOrUse { - string toString() { result = "SsaDefOrUse" } - - DefOrUseImpl asDefOrUse() { none() } - - PhiNode asPhi() { none() } - - abstract Location getLocation(); -} - -class DefOrUse extends TDefOrUse, SsaDefOrUse { - DefOrUseImpl defOrUse; - - DefOrUse() { this = TDefOrUse(defOrUse) } - - final override DefOrUseImpl asDefOrUse() { result = defOrUse } - - final override Location getLocation() { result = defOrUse.getLocation() } - - final SourceVariable getSourceVariable() { result = defOrUse.getSourceVariable() } -} - -class Phi extends TPhi, SsaDefOrUse { - PhiNode phi; - - Phi() { this = TPhi(phi) } - - final override PhiNode asPhi() { result = phi } - - final override Location getLocation() { result = phi.getBasicBlock().getLocation() } -} - -class UseOrPhi extends SsaDefOrUse { - UseOrPhi() { - this.asDefOrUse() instanceof UseImpl - or - this instanceof Phi - } - - final override Location getLocation() { - result = this.asDefOrUse().getLocation() or result = this.(Phi).getLocation() - } - - override string toString() { - result = this.asDefOrUse().toString() - or - this instanceof Phi and - result = "Phi" - } -} - -class Def extends DefOrUse { - override DefImpl defOrUse; - - Operand getAddressOperand() { result = defOrUse.getAddressOperand() } - - Instruction getAddress() { result = this.getAddressOperand().getDef() } - - Node0Impl getValue() { result = defOrUse.getValue() } - - override string toString() { result = this.asDefOrUse().toString() } - - BaseSourceVariableInstruction getBase() { result = defOrUse.getBase() } - - predicate isIteratorDef() { defOrUse instanceof IteratorDef } -} - -private module SsaImpl = SsaImplCommon::Make; - -class PhiNode extends SsaImpl::DefinitionExt { - PhiNode() { - this instanceof SsaImpl::PhiNode or - this instanceof SsaImpl::PhiReadNode - } -} - -class DefinitionExt = SsaImpl::DefinitionExt; diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll index 8d2242df4ab..81c704edb8b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll @@ -96,6 +96,14 @@ private predicate ignoreExprAndDescendants(Expr expr) { exists(BuiltInVarArgsStart vaStartExpr | vaStartExpr.getLastNamedParameter().getFullyConverted() = expr ) + or + // suppress destructors of temporary variables until proper support is added for them. + exists(Expr parent | parent.getAnImplicitDestructorCall() = expr) + or + exists(Stmt parent | + parent.getAnImplicitDestructorCall() = expr and + expr.(DestructorCall).getQualifier() instanceof ReuseExpr + ) } /** @@ -744,9 +752,13 @@ newtype TTranslatedElement = // The declaration/initialization part of a `ConditionDeclExpr` TTranslatedConditionDecl(ConditionDeclExpr expr) { not ignoreExpr(expr) } or // The side effects of a `Call` - TTranslatedCallSideEffects(CallOrAllocationExpr expr) { not ignoreSideEffects(expr) } or + TTranslatedCallSideEffects(CallOrAllocationExpr expr) { + not ignoreExpr(expr) and + not ignoreSideEffects(expr) + } or // The non-argument-specific side effect of a `Call` TTranslatedCallSideEffect(Expr expr, SideEffectOpcode opcode) { + not ignoreExpr(expr) and not ignoreSideEffects(expr) and opcode = getCallSideEffectOpcode(expr) } or @@ -764,6 +776,7 @@ newtype TTranslatedElement = // Constructor calls lack a qualifier (`this`) expression, so we need to handle the side effects // on `*this` without an `Expr`. TTranslatedStructorQualifierSideEffect(Call call, SideEffectOpcode opcode) { + not ignoreExpr(call) and not ignoreSideEffects(call) and call instanceof ConstructorCall and opcode = getASideEffectOpcode(call, -1) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll index 5ddd0bfab05..51111c24572 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll @@ -97,19 +97,6 @@ abstract class TranslatedExpr extends TranslatedElement { ) } - final override predicate hasAnImplicitDestructorCall() { - exists(expr.getAnImplicitDestructorCall()) - } - - final override int getFirstDestructorCallIndex() { - not this.handlesDestructorsExplicitly() and - ( - result = max(int childId | exists(this.getChildInternal(childId))) + 1 - or - not exists(this.getChildInternal(_)) and result = 0 - ) - } - final override Locatable getAst() { result = expr } final override Declaration getFunction() { result = getEnclosingDeclaration(expr) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll index d8ec66a2ee7..247b15ed4c4 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll @@ -248,9 +248,19 @@ abstract class TranslatedStmt extends TranslatedElement, TTranslatedStmt { final override TranslatedElement getChild(int id) { result = this.getChildInternal(id) or - exists(int destructorIndex | + exists(int destructorIndex, int tempDestructorCount | result.(TranslatedExpr).getExpr() = stmt.getImplicitDestructorCall(destructorIndex) and - id = this.getFirstDestructorCallIndex() + destructorIndex + id = this.getFirstDestructorCallIndex() + destructorIndex - tempDestructorCount and + // suppress destructors of temporary variables until proper support is added for them. + tempDestructorCount = + count(DestructorCall call, int tempIndex | + stmt.getImplicitDestructorCall(tempIndex) = call and + tempIndex < destructorIndex and + call.getQualifier() instanceof ReuseExpr + | + call + ) and + not stmt.getImplicitDestructorCall(destructorIndex).getQualifier() instanceof ReuseExpr ) } @@ -261,7 +271,11 @@ abstract class TranslatedStmt extends TranslatedElement, TTranslatedStmt { } final override predicate hasAnImplicitDestructorCall() { - exists(stmt.getAnImplicitDestructorCall()) + exists(stmt.getAnImplicitDestructorCall()) and + // suppress destructors of temporary variables until proper support is added for them. + exists(Expr expr | stmt.getAnImplicitDestructorCall().getQualifier() = expr | + not expr instanceof ReuseExpr + ) } final override string toString() { result = stmt.toString() } diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Allocation.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Allocation.qll index 305a0c25732..4b61a193652 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Allocation.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Allocation.qll @@ -36,7 +36,9 @@ private class MallocAllocationFunction extends AllocationFunction { "CRYPTO_malloc", // CRYPTO_malloc(size_t num, const char *file, int line) "CRYPTO_zalloc", // CRYPTO_zalloc(size_t num, const char *file, int line) "CRYPTO_secure_malloc", // CRYPTO_secure_malloc(size_t num, const char *file, int line) - "CRYPTO_secure_zalloc" // CRYPTO_secure_zalloc(size_t num, const char *file, int line) + "CRYPTO_secure_zalloc", // CRYPTO_secure_zalloc(size_t num, const char *file, int line) + "g_malloc", // g_malloc (n_bytes); + "g_try_malloc" // g_try_malloc(n_bytes); ]) and sizeArg = 0 or @@ -139,7 +141,9 @@ private class ReallocAllocationFunction extends AllocationFunction, TaintFunctio // --- Windows COM allocation "CoTaskMemRealloc", // CoTaskMemRealloc(ptr, size) // --- OpenSSL memory allocation - "CRYPTO_realloc" // CRYPTO_realloc(void *addr, size_t num, const char *file, int line) + "CRYPTO_realloc", // CRYPTO_realloc(void *addr, size_t num, const char *file, int line) + "g_realloc", // g_realloc(mem, n_bytes); + "g_try_realloc" // g_try_realloc(mem, n_bytes); ]) and sizeArg = 1 and reallocArg = 0 diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Deallocation.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Deallocation.qll index 1162c09b0b6..e50530142aa 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Deallocation.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Deallocation.qll @@ -20,8 +20,10 @@ private class StandardDeallocationFunction extends DeallocationFunction { freedArg = 0 or this.hasGlobalName([ - // --- OpenSSL memory allocation - "CRYPTO_free", "CRYPTO_secure_free" + // --- OpenSSL memory deallocation + "CRYPTO_free", "CRYPTO_secure_free", + // --- glib memory deallocation + "g_free" ]) and freedArg = 0 or diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Iterator.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Iterator.qll index cafd9aeeef0..47e4d5f4f0c 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Iterator.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Iterator.qll @@ -9,6 +9,8 @@ import cpp import semmle.code.cpp.models.interfaces.Taint import semmle.code.cpp.models.interfaces.DataFlow import semmle.code.cpp.models.interfaces.Iterator +import semmle.code.cpp.models.interfaces.Alias +import semmle.code.cpp.models.interfaces.SideEffect /** * An instantiation of the `std::iterator_traits` template. @@ -438,7 +440,7 @@ private class IteratorAssignmentMemberOperatorModel extends IteratorAssignmentMe * A `begin` or `end` member function, or a related member function, that * returns an iterator. */ -private class BeginOrEndFunction extends MemberFunction, TaintFunction, GetIteratorFunction { +class BeginOrEndFunction extends MemberFunction { BeginOrEndFunction() { this.hasName([ "begin", "cbegin", "rbegin", "crbegin", "end", "cend", "rend", "crend", "before_begin", @@ -446,7 +448,11 @@ private class BeginOrEndFunction extends MemberFunction, TaintFunction, GetItera ]) and this.getType().getUnspecifiedType() instanceof Iterator } +} +private class BeginOrEndFunctionModels extends BeginOrEndFunction, TaintFunction, + GetIteratorFunction, AliasFunction, SideEffectFunction +{ override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) { input.isQualifierObject() and output.isReturnValue() @@ -456,6 +462,22 @@ private class BeginOrEndFunction extends MemberFunction, TaintFunction, GetItera input.isQualifierObject() and output.isReturnValue() } + + override predicate parameterNeverEscapes(int index) { index = -1 } + + override predicate parameterEscapesOnlyViaReturn(int index) { none() } + + override predicate hasOnlySpecificReadSideEffects() { any() } + + override predicate hasOnlySpecificWriteSideEffects() { any() } + + override predicate hasSpecificWriteSideEffect(ParameterIndex i, boolean buffer, boolean mustWrite) { + none() + } + + override predicate hasSpecificReadSideEffect(ParameterIndex i, boolean buffer) { + i = -1 and buffer = false + } } /** diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/StdContainer.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/StdContainer.qll index 877dc5d3ac4..6fb17d80c5d 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/StdContainer.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/StdContainer.qll @@ -253,13 +253,15 @@ private class StdSequenceContainerAssign extends TaintFunction { /** * The standard container functions `at` and `operator[]`. */ -private class StdSequenceContainerAt extends TaintFunction { +class StdSequenceContainerAt extends MemberFunction { StdSequenceContainerAt() { this.getClassAndName(["at", "operator[]"]) instanceof Array or this.getClassAndName(["at", "operator[]"]) instanceof Deque or this.getClassAndName(["at", "operator[]"]) instanceof Vector } +} +private class StdSequenceContainerAtModel extends StdSequenceContainerAt, TaintFunction { override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) { // flow from qualifier to referenced return value input.isQualifierObject() and diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/StdMap.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/StdMap.qll index b6d869d7bea..ce3c596f308 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/StdMap.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/StdMap.qll @@ -129,9 +129,11 @@ private class StdMapMerge extends TaintFunction { /** * The standard map functions `at` and `operator[]`. */ -private class StdMapAt extends TaintFunction { +class StdMapAt extends MemberFunction { StdMapAt() { this.getClassAndName(["at", "operator[]"]) instanceof MapOrUnorderedMap } +} +private class StdMapAtModels extends StdMapAt, TaintFunction { override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) { // flow from qualifier to referenced return value input.isQualifierObject() and diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index 298438feb14..aa7ff0ab32c 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -1513,6 +1513,11 @@ exprs( int location: @location_expr ref ); +expr_reuse( + int reuse: @expr ref, + int original: @expr ref +) + /* case @value.category of 1 = prval @@ -1741,6 +1746,7 @@ case @expr.kind of | 360 = @isunsigned | 361 = @isvoid | 362 = @isvolatile +| 363 = @reuseexpr ; @var_args_expr = @vastartexpr diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index 0ac63edd1ab..8d4a841aaf8 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -2,7 +2,7 @@ @compilation - 9695 + 9657 @externalDataElement @@ -18,71 +18,71 @@ @location_default - 29753112 + 29786456 @location_stmt - 3814280 - - - @diagnostic - 5192 - - - @file - 122996 - - - @folder - 15374 + 3820105 @location_expr - 13168606 + 13188716 + + + @diagnostic + 5013 + + + @file + 123134 + + + @folder + 16324 @macro_expansion - 33099938 + 32971750 @other_macro_reference - 857250 + 858211 @function - 4640799 + 4646000 @fun_decl - 5004199 + 5009807 @var_decl - 8413633 + 8423062 @type_decl - 3238449 + 3242079 @namespace_decl - 311526 + 311530 @using - 368990 + 369403 @static_assert - 134653 + 134655 @parameter - 6568681 + 6576042 @membervariable - 1053150 + 1054758 @globalvariable @@ -90,259 +90,259 @@ @localvariable - 577491 + 576906 @enumconstant - 241316 + 241684 @errortype - 465 + 466 @unknowntype - 465 + 466 @void - 465 + 466 @boolean - 465 + 466 @char - 465 + 466 @unsigned_char - 465 + 466 @signed_char - 465 + 466 @short - 465 + 466 @unsigned_short - 465 + 466 @signed_short - 465 + 466 @int - 465 + 466 @unsigned_int - 465 + 466 @signed_int - 465 + 466 @long - 465 + 466 @unsigned_long - 465 + 466 @signed_long - 465 + 466 @long_long - 465 + 466 @unsigned_long_long - 465 + 466 @signed_long_long - 465 + 466 @float - 465 + 466 @double - 465 + 466 @long_double - 465 + 466 @complex_float - 465 + 466 @complex_double - 465 + 466 @complex_long_double - 465 + 466 @imaginary_float - 465 + 466 @imaginary_double - 465 + 466 @imaginary_long_double - 465 + 466 @wchar_t - 465 + 466 @decltype_nullptr - 465 + 466 @int128 - 465 + 466 @unsigned_int128 - 465 + 466 @signed_int128 - 465 + 466 @float128 - 465 + 466 @complex_float128 - 465 + 466 @decimal32 - 465 + 466 @decimal64 - 465 + 466 @decimal128 - 465 + 466 @char16_t - 465 + 466 @char32_t - 465 + 466 @std_float32 - 465 + 466 @float32x - 465 + 466 @std_float64 - 465 + 466 @float64x - 465 + 466 @std_float128 - 465 + 466 @char8_t - 465 + 466 @float16 - 465 + 466 @complex_float16 - 465 + 466 @fp16 - 465 + 466 @std_bfloat16 - 465 + 466 @std_float16 - 465 + 466 @complex_std_float32 - 465 + 466 @complex_float32x - 465 + 466 @complex_std_float64 - 465 + 466 @complex_float64x - 465 + 466 @complex_std_float128 - 465 + 466 @pointer - 566996 + 567632 @type_with_specifiers - 1010530 + 1010263 @array - 109951 + 110074 @routineptr - 633361 + 624659 @reference - 1727994 + 1721148 @gnu_vector - 696 + 693 @routinereference @@ -350,7 +350,7 @@ @rvalue_reference - 627137 + 620692 @block @@ -358,43 +358,43 @@ @decltype - 27022 + 27052 @usertype - 5224568 + 5229957 @mangledname - 6441025 + 6448244 @type_mention - 4023226 + 4029370 @routinetype - 545338 + 538161 @ptrtomember - 37737 + 37779 @specifier - 24692 + 24720 @gnuattribute - 684868 + 685636 @stdattribute - 491954 + 487895 @declspec - 243213 + 243123 @msattribute @@ -402,15 +402,15 @@ @alignas - 9783 + 9794 @attribute_arg_token - 39135 + 39179 @attribute_arg_constant_expr - 369922 + 370336 @attribute_arg_empty @@ -422,7 +422,7 @@ @attribute_arg_type - 465 + 466 @attribute_arg_expr @@ -430,35 +430,35 @@ @derivation - 395209 + 391086 @frienddecl - 713754 + 706182 @comment - 8751514 + 8686670 @namespace - 12113 + 12126 @specialnamequalifyingelement - 465 + 466 @namequalifier - 1570954 + 1516804 @value - 10760930 + 10777325 @initialiser - 1710236 + 1710241 @address_of @@ -466,15 +466,15 @@ @indirect - 292216 + 292663 @array_to_pointer - 1428793 + 1430922 @parexpr - 3582350 + 3587688 @arithnegexpr @@ -482,115 +482,115 @@ @unaryplusexpr - 2912 + 2916 @complementexpr - 27796 + 27839 @notexpr - 276021 + 276441 @postincrexpr - 61954 + 62049 @postdecrexpr - 41975 + 42038 @preincrexpr - 70470 + 70577 @predecrexpr - 26169 + 26209 @conditionalexpr - 656298 + 657276 @addexpr - 397812 + 398417 @subexpr - 340271 + 340778 @mulexpr - 305908 + 306374 @divexpr - 132972 + 133174 @remexpr - 15790 + 15622 @paddexpr - 86535 + 86667 @psubexpr - 49827 + 49903 @pdiffexpr - 35355 + 35197 @lshiftexpr - 565475 + 566336 @rshiftexpr - 140634 + 140848 @andexpr - 488341 + 489084 @orexpr - 145252 + 145473 @xorexpr - 54095 + 54178 @eqexpr - 469960 + 470677 @neexpr - 301236 + 301684 @gtexpr - 103895 + 104011 @ltexpr - 101565 + 101679 @geexpr - 59162 + 59252 @leexpr - 212214 + 212539 @assignexpr - 935582 + 937011 @assignaddexpr @@ -598,23 +598,23 @@ @assignsubexpr - 11183 + 11200 @assignmulexpr - 8246 + 8214 @assigndivexpr - 4986 + 4994 @assignremexpr - 417 + 414 @assignlshiftexpr - 2712 + 2716 @assignrshiftexpr @@ -622,43 +622,43 @@ @assignandexpr - 4819 + 4826 @assignorexpr - 23678 + 23654 @assignxorexpr - 21812 + 21845 @assignpaddexpr - 13608 + 13629 @assignpsubexpr - 1151 + 1152 @andlogicalexpr - 249586 + 249967 @orlogicalexpr - 864846 + 866161 @commaexpr - 123692 + 122776 @subscriptexpr - 365254 + 364887 @callexpr - 301901 + 316232 @vastartexpr @@ -666,51 +666,51 @@ @vaargexpr - 950 + 952 @vaendexpr - 2795 + 2798 @vacopyexpr - 140 + 139 @varaccess - 6020283 + 6029477 @runtime_sizeof - 295403 + 295853 @runtime_alignof - 49726 + 49198 @expr_stmt - 94249 + 94392 @routineexpr - 2925479 + 3151079 @type_operand - 1127108 + 1128821 @offsetofexpr - 19963 + 19994 @typescompexpr - 562954 + 563810 @literal - 4406828 + 4406917 @aggregateliteral @@ -718,31 +718,31 @@ @c_style_cast - 4210119 + 4210103 @temp_init - 825128 + 796653 @errorexpr - 46737 + 46241 @reference_to - 1587202 + 1570260 @ref_indirect - 1932263 + 1906893 @vacuous_destructor_call - 8123 + 8037 @assume - 3230 + 3231 @conjugation @@ -794,35 +794,35 @@ @thisaccess - 1117234 + 1117586 @new_expr - 47510 + 47006 @delete_expr - 11710 + 11621 @throw_expr - 21143 + 21061 @condition_decl - 42306 + 40853 @braced_init_list - 1105 + 1067 @type_id - 36362 + 35977 @sizeof_pack - 5590 + 5597 @hasassignexpr @@ -878,19 +878,19 @@ @isconvtoexpr - 208 + 207 @isemptyexpr - 1477 + 1461 @isenumexpr - 521 + 517 @ispodexpr - 617 + 615 @ispolyexpr @@ -906,7 +906,7 @@ @hastrivialdestructor - 465 + 466 @uuidof @@ -914,7 +914,7 @@ @delete_array_expr - 1370 + 1365 @new_array_expr @@ -926,55 +926,55 @@ @ctordirectinit - 112605 + 111410 @ctorvirtualinit - 6347 + 6322 @ctorfieldinit - 200453 + 198326 @ctordelegatinginit - 3340 + 3305 @dtordirectdestruct - 41638 + 41231 @dtorvirtualdestruct - 4114 + 4070 @dtorfielddestruct - 41567 + 41126 @static_cast - 215292 + 214451 @reinterpret_cast - 30975 + 30745 @const_cast - 35251 + 34990 @dynamic_cast - 1011 + 1007 @lambdaexpr - 21431 + 21455 @param_ref - 244956 + 236428 @noopexpr @@ -982,7 +982,7 @@ @istriviallyconstructibleexpr - 1355 + 1345 @isdestructibleexpr @@ -994,7 +994,7 @@ @istriviallydestructibleexpr - 834 + 828 @istriviallyassignableexpr @@ -1002,11 +1002,11 @@ @isnothrowassignableexpr - 4171 + 4140 @istrivialexpr - 931 + 932 @isstandardlayoutexpr @@ -1014,7 +1014,7 @@ @istriviallycopyableexpr - 3727 + 3731 @isliteraltypeexpr @@ -1034,11 +1034,11 @@ @isconstructibleexpr - 465 + 466 @isnothrowconstructibleexpr - 14392 + 14285 @hasfinalizerexpr @@ -1074,11 +1074,11 @@ @isfinalexpr - 1688 + 1670 @noexceptexpr - 25664 + 24725 @builtinshufflevector @@ -1086,11 +1086,11 @@ @builtinchooseexpr - 9051 + 9065 @builtinaddressof - 13258 + 13117 @vec_fill @@ -1134,7 +1134,7 @@ @builtinshuffle - 1909 + 1902 @blockassignexpr @@ -1248,77 +1248,81 @@ @isvolatile 2 + + @reuseexpr + 331632 + @lambdacapture - 27953 + 27985 @stmt_expr - 1483845 + 1486111 @stmt_if - 724849 + 725956 @stmt_while - 29345 + 29152 @stmt_goto - 110529 + 110697 @stmt_label - 53064 + 53145 @stmt_return - 1283546 + 1284984 @stmt_block - 1422383 + 1423977 @stmt_end_test_while - 148655 + 148882 @stmt_for - 61466 + 61560 @stmt_switch_case - 209046 + 201865 @stmt_switch - 20756 + 20788 @stmt_asm - 109821 + 109989 @stmt_decl - 591603 + 589211 @stmt_empty - 192088 + 191899 @stmt_continue - 22529 + 22563 @stmt_break - 103194 + 103183 @stmt_try_block - 46788 + 45181 @stmt_microsoft_try @@ -1334,19 +1338,19 @@ @stmt_assigned_goto - 9062 + 9076 @stmt_range_based_for - 8386 + 8395 @stmt_handler - 65128 + 62891 @stmt_constexpr_if - 52355 + 52071 @stmt_co_return @@ -1354,55 +1358,55 @@ @ppd_if - 665766 + 666512 @ppd_ifdef - 262765 + 263060 @ppd_ifndef - 266027 + 266325 @ppd_elif - 25158 + 25186 @ppd_else - 208721 + 208955 @ppd_endif - 1194559 + 1195898 @ppd_plain_include - 310753 + 311101 @ppd_define - 2426503 + 2408524 @ppd_undef - 258106 + 258396 @ppd_include_next - 1863 + 1865 @ppd_line - 27580 + 27551 @ppd_error - 104 + 103 @ppd_pragma - 314133 + 311805 @ppd_objc_import @@ -1414,7 +1418,7 @@ @link_target - 848 + 819 @xmldtd @@ -1444,11 +1448,11 @@ compilations - 9695 + 9657 id - 9695 + 9657 cwd @@ -1466,7 +1470,7 @@ 1 2 - 9695 + 9657 @@ -1492,19 +1496,19 @@ compilation_args - 651597 + 652589 id - 5506 + 5514 num - 708 + 709 arg - 34410 + 34463 @@ -1523,12 +1527,12 @@ 71 102 - 274 + 275 126 127 - 3862 + 3868 127 @@ -1538,7 +1542,7 @@ 131 132 - 813 + 815 134 @@ -1564,12 +1568,12 @@ 57 106 - 290 + 291 106 107 - 3825 + 3831 107 @@ -1579,7 +1583,7 @@ 109 110 - 813 + 815 111 @@ -1625,12 +1629,12 @@ 970 989 - 36 + 37 999 1000 - 73 + 74 1001 @@ -1742,12 +1746,12 @@ 1 2 - 32350 + 32399 2 1043 - 2060 + 2063 @@ -1763,12 +1767,12 @@ 1 2 - 33206 + 33256 2 56 - 1204 + 1206 @@ -1778,19 +1782,19 @@ compilation_compiling_files - 11529 + 11546 id - 1994 + 1997 num - 3311 + 3316 file - 10013 + 10028 @@ -1804,7 +1808,7 @@ 1 2 - 997 + 998 2 @@ -1855,7 +1859,7 @@ 1 2 - 997 + 998 2 @@ -1906,12 +1910,12 @@ 1 2 - 1755 + 1757 2 3 - 718 + 719 3 @@ -1942,12 +1946,12 @@ 1 2 - 1755 + 1757 2 3 - 718 + 719 3 @@ -1978,12 +1982,12 @@ 1 2 - 9015 + 9029 2 4 - 837 + 839 4 @@ -2004,12 +2008,12 @@ 1 2 - 9175 + 9189 2 4 - 797 + 799 4 @@ -2024,15 +2028,15 @@ compilation_time - 46116 + 46187 id - 1994 + 1997 num - 3311 + 3316 kind @@ -2040,7 +2044,7 @@ seconds - 9933 + 9828 @@ -2054,7 +2058,7 @@ 1 2 - 997 + 998 2 @@ -2105,7 +2109,7 @@ 4 5 - 1994 + 1997 @@ -2121,51 +2125,46 @@ 3 4 - 359 + 719 4 5 - 638 + 279 - 6 + 5 8 159 - 8 + 9 10 - 79 + 159 10 - 11 - 119 - - - 11 - 13 + 12 159 - 14 - 17 + 12 + 16 119 - 17 - 19 - 119 - - - 20 - 41 + 16 + 18 159 - 52 - 102 + 19 + 43 + 159 + + + 57 + 92 79 @@ -2182,12 +2181,12 @@ 1 2 - 1755 + 1757 2 3 - 718 + 719 3 @@ -2218,7 +2217,7 @@ 4 5 - 3311 + 3316 @@ -2234,12 +2233,12 @@ 3 4 - 837 + 1478 4 5 - 917 + 279 5 @@ -2249,33 +2248,28 @@ 6 7 - 199 + 439 7 8 - 319 + 119 8 9 - 79 + 199 9 - 11 + 23 279 - 11 - 29 + 24 + 90 279 - - 32 - 93 - 159 - @@ -2335,8 +2329,8 @@ 39 - 156 - 157 + 146 + 147 39 @@ -2353,27 +2347,27 @@ 1 2 - 4946 + 4834 2 3 - 2473 + 2557 3 4 - 1436 + 1238 4 5 - 757 + 719 5 46 - 319 + 479 @@ -2389,32 +2383,32 @@ 1 2 - 4667 + 4474 2 3 - 1914 + 2197 3 4 - 1476 + 1318 4 5 - 997 + 679 5 - 10 - 757 + 7 + 799 - 43 - 75 - 119 + 7 + 76 + 359 @@ -2430,12 +2424,12 @@ 1 2 - 7938 + 8110 2 3 - 1994 + 1718 @@ -2445,15 +2439,15 @@ diagnostic_for - 5665 + 5471 diagnostic - 5192 + 5013 compilation - 848 + 819 file_number @@ -2461,7 +2455,7 @@ file_number_diagnostic_number - 414 + 400 @@ -2475,12 +2469,12 @@ 1 2 - 5034 + 4861 2 7 - 157 + 152 @@ -2496,7 +2490,7 @@ 1 2 - 5192 + 5013 @@ -2512,7 +2506,7 @@ 1 2 - 5192 + 5013 @@ -2528,27 +2522,27 @@ 5 6 - 631 + 610 7 8 - 78 + 76 9 12 - 59 + 57 13 16 - 39 + 38 21 22 - 39 + 38 @@ -2564,7 +2558,7 @@ 1 2 - 848 + 819 @@ -2580,27 +2574,27 @@ 5 6 - 631 + 610 7 8 - 78 + 76 9 12 - 59 + 57 13 16 - 39 + 38 21 22 - 39 + 38 @@ -2664,37 +2658,37 @@ 2 3 - 118 + 114 3 4 - 39 + 38 4 5 - 39 + 38 5 6 - 39 + 38 7 8 - 39 + 38 11 12 - 39 + 38 37 38 - 78 + 76 43 @@ -2715,37 +2709,37 @@ 2 3 - 118 + 114 3 4 - 39 + 38 4 5 - 39 + 38 5 6 - 39 + 38 7 8 - 39 + 38 11 12 - 39 + 38 43 44 - 98 + 95 @@ -2761,7 +2755,7 @@ 1 2 - 414 + 400 @@ -2771,19 +2765,19 @@ compilation_finished - 9695 + 9657 id - 9695 + 9657 cpu_seconds - 7190 + 7330 elapsed_seconds - 146 + 145 @@ -2797,7 +2791,7 @@ 1 2 - 9695 + 9657 @@ -2813,7 +2807,7 @@ 1 2 - 9695 + 9657 @@ -2829,17 +2823,17 @@ 1 2 - 5864 + 6054 2 3 - 831 + 850 3 - 17 - 494 + 20 + 425 @@ -2855,12 +2849,12 @@ 1 2 - 6561 + 6692 2 3 - 629 + 637 @@ -2876,26 +2870,21 @@ 1 2 - 22 + 11 2 3 - 11 + 33 - 3 - 4 + 7 + 8 22 - 6 - 7 - 11 - - - 10 - 11 + 11 + 12 11 @@ -2904,28 +2893,28 @@ 11 - 46 - 47 + 52 + 53 11 - 159 - 160 + 161 + 162 11 - 165 - 166 + 163 + 164 11 - 204 - 205 + 184 + 185 11 - 251 - 252 + 259 + 260 11 @@ -2942,26 +2931,21 @@ 1 2 - 22 + 11 2 3 - 11 + 33 - 3 - 4 + 7 + 8 22 - 6 - 7 - 11 - - - 10 - 11 + 11 + 12 11 @@ -2970,13 +2954,13 @@ 11 - 44 - 45 + 52 + 53 11 - 116 - 117 + 115 + 116 11 @@ -2985,13 +2969,13 @@ 11 - 148 - 149 + 140 + 141 11 - 231 - 232 + 242 + 243 11 @@ -3218,11 +3202,11 @@ sourceLocationPrefix - 465 + 466 prefix - 465 + 466 @@ -4716,15 +4700,15 @@ extractor_version - 465 + 466 codeql_version - 465 + 466 frontend_version - 465 + 466 @@ -4738,7 +4722,7 @@ 1 2 - 465 + 466 @@ -4754,7 +4738,7 @@ 1 2 - 465 + 466 @@ -4764,31 +4748,31 @@ locations_default - 29753112 + 29786456 id - 29753112 + 29786456 container - 122996 + 123134 startLine - 2090945 + 2093288 startColumn - 36805 + 36847 endLine - 2095138 + 2097486 endColumn - 47987 + 48041 @@ -4802,7 +4786,7 @@ 1 2 - 29753112 + 29786456 @@ -4818,7 +4802,7 @@ 1 2 - 29753112 + 29786456 @@ -4834,7 +4818,7 @@ 1 2 - 29753112 + 29786456 @@ -4850,7 +4834,7 @@ 1 2 - 29753112 + 29786456 @@ -4866,7 +4850,7 @@ 1 2 - 29753112 + 29786456 @@ -4882,67 +4866,67 @@ 1 11 - 9783 + 9794 11 18 - 10249 + 10261 18 30 - 9317 + 9328 30 42 - 9783 + 9794 43 61 - 9783 + 9794 61 79 - 9317 + 9328 80 106 - 9783 + 9794 109 149 - 9317 + 9328 149 199 - 9317 + 9328 206 292 - 9317 + 9328 305 469 - 9317 + 9328 482 850 - 9317 + 9328 939 2380 - 8386 + 8395 @@ -4958,72 +4942,72 @@ 1 8 - 9317 + 9328 8 13 - 9317 + 9328 13 20 - 9783 + 9794 20 32 - 9317 + 9328 32 43 - 9783 + 9794 44 61 - 9317 + 9328 62 72 - 9317 + 9328 73 93 - 9317 + 9328 97 128 - 9317 + 9328 128 180 - 9317 + 9328 180 267 - 9317 + 9328 277 414 - 9317 + 9328 439 1465 - 9317 + 9328 1557 1569 - 931 + 932 @@ -5039,67 +5023,67 @@ 1 4 - 8852 + 8861 4 5 - 7920 + 7929 5 6 - 7454 + 7462 6 8 - 11181 + 11194 8 10 - 9317 + 9328 10 15 - 10715 + 10727 15 23 - 9783 + 9794 23 28 - 11181 + 11194 28 34 - 9783 + 9794 34 44 - 9317 + 9328 44 55 - 9317 + 9328 55 66 - 9783 + 9794 66 77 - 8386 + 8395 @@ -5115,72 +5099,72 @@ 1 8 - 9317 + 9328 8 13 - 9317 + 9328 13 20 - 9783 + 9794 20 32 - 9317 + 9328 32 43 - 9783 + 9794 43 60 - 9317 + 9328 61 71 - 9317 + 9328 72 93 - 9317 + 9328 94 127 - 9317 + 9328 128 179 - 9317 + 9328 180 268 - 9317 + 9328 278 413 - 9317 + 9328 437 1465 - 9317 + 9328 1554 1566 - 931 + 932 @@ -5196,67 +5180,67 @@ 1 9 - 9783 + 9794 9 13 - 9317 + 9328 13 18 - 9317 + 9328 18 26 - 10249 + 10261 27 33 - 9317 + 9328 33 39 - 9317 + 9328 39 47 - 10249 + 10261 47 54 - 9317 + 9328 54 60 - 10249 + 10261 60 66 - 9317 + 9328 66 74 - 9783 + 9794 74 78 - 9783 + 9794 78 90 - 6988 + 6996 @@ -5272,52 +5256,52 @@ 1 2 - 580507 + 581158 2 3 - 314480 + 314832 3 4 - 194744 + 194963 4 6 - 162132 + 162313 6 10 - 183097 + 183302 10 16 - 161666 + 161847 16 25 - 168188 + 168377 25 45 - 157007 + 157183 45 160 - 157473 + 157649 160 265 - 11647 + 11660 @@ -5333,42 +5317,42 @@ 1 2 - 869363 + 870338 2 3 - 273015 + 273321 3 5 - 193347 + 193563 5 8 - 173313 + 173507 8 13 - 187756 + 187966 13 20 - 160734 + 160914 20 51 - 159336 + 159515 51 265 - 74077 + 74160 @@ -5384,47 +5368,47 @@ 1 2 - 610790 + 611475 2 3 - 312616 + 312967 3 4 - 198006 + 198228 4 6 - 182631 + 182836 6 9 - 172847 + 173041 9 13 - 163063 + 163246 13 19 - 173779 + 173974 19 29 - 164927 + 165112 29 52 - 112281 + 112407 @@ -5440,22 +5424,22 @@ 1 2 - 1528607 + 1530321 2 3 - 348025 + 348415 3 5 - 161666 + 161847 5 16 - 52646 + 52705 @@ -5471,47 +5455,47 @@ 1 2 - 585166 + 585822 2 3 - 315878 + 316232 3 4 - 197540 + 197761 4 6 - 168188 + 168377 6 10 - 191483 + 191698 10 15 - 165393 + 165578 15 22 - 167722 + 167910 22 34 - 163995 + 164179 34 66 - 135576 + 135727 @@ -5527,72 +5511,72 @@ 1 31 - 2795 + 2798 42 85 - 2795 + 2798 86 128 - 2795 + 2798 129 229 - 2795 + 2798 247 286 - 2795 + 2798 291 360 - 2795 + 2798 373 457 - 2795 + 2798 475 565 - 2795 + 2798 566 620 - 2795 + 2798 623 689 - 2795 + 2798 696 807 - 2795 + 2798 820 1563 - 2795 + 2798 1638 5632 - 2795 + 2798 15295 15296 - 465 + 466 @@ -5608,67 +5592,67 @@ 1 18 - 2795 + 2798 23 35 - 3261 + 3264 38 43 - 2795 + 2798 44 61 - 2795 + 2798 65 73 - 2795 + 2798 73 84 - 3261 + 3264 84 96 - 2795 + 2798 96 101 - 3261 + 3264 101 105 - 3261 + 3264 107 112 - 2795 + 2798 112 126 - 2795 + 2798 137 170 - 2795 + 2798 195 265 - 1397 + 1399 @@ -5684,72 +5668,72 @@ 1 19 - 2795 + 2798 30 72 - 2795 + 2798 83 122 - 2795 + 2798 122 205 - 2795 + 2798 214 261 - 2795 + 2798 265 322 - 2795 + 2798 322 379 - 2795 + 2798 404 430 - 2795 + 2798 453 474 - 2795 + 2798 478 505 - 2795 + 2798 511 583 - 2795 + 2798 585 836 - 2795 + 2798 1104 2196 - 2795 + 2798 2387 2388 - 465 + 466 @@ -5765,72 +5749,72 @@ 1 19 - 2795 + 2798 30 72 - 2795 + 2798 83 122 - 2795 + 2798 122 205 - 2795 + 2798 214 261 - 2795 + 2798 265 322 - 2795 + 2798 322 380 - 2795 + 2798 404 430 - 2795 + 2798 453 474 - 2795 + 2798 477 504 - 2795 + 2798 514 582 - 2795 + 2798 585 835 - 2795 + 2798 1109 2203 - 2795 + 2798 2382 2383 - 465 + 466 @@ -5846,67 +5830,67 @@ 1 7 - 2795 + 2798 7 11 - 3261 + 3264 11 16 - 3261 + 3264 16 22 - 2795 + 2798 22 24 - 3261 + 3264 24 28 - 2795 + 2798 29 34 - 3261 + 3264 34 41 - 3261 + 3264 41 46 - 2795 + 2798 47 49 - 1863 + 1865 49 54 - 2795 + 2798 54 74 - 2795 + 2798 75 86 - 1863 + 1865 @@ -5922,52 +5906,52 @@ 1 2 - 590757 + 591419 2 3 - 306560 + 306903 3 4 - 198006 + 198228 4 6 - 159336 + 159515 6 10 - 182631 + 182836 10 16 - 160268 + 160448 16 25 - 170518 + 170709 25 45 - 157939 + 158116 45 160 - 157939 + 158116 160 265 - 11181 + 11194 @@ -5983,47 +5967,47 @@ 1 2 - 884738 + 885729 2 3 - 259504 + 259795 3 4 - 124860 + 125000 4 6 - 140700 + 140858 6 10 - 184495 + 184701 10 15 - 168188 + 168377 15 26 - 163063 + 163246 26 120 - 157939 + 158116 121 265 - 11647 + 11660 @@ -6039,22 +6023,22 @@ 1 2 - 1526278 + 1527988 2 3 - 341036 + 341418 3 5 - 170518 + 170709 5 10 - 57305 + 57369 @@ -6070,47 +6054,47 @@ 1 2 - 621972 + 622669 2 3 - 302833 + 303172 3 4 - 201267 + 201493 4 6 - 183563 + 183769 6 9 - 169586 + 169776 9 13 - 166325 + 166511 13 19 - 174711 + 174907 19 29 - 160734 + 160914 29 52 - 114144 + 114272 @@ -6126,52 +6110,52 @@ 1 2 - 597279 + 597949 2 3 - 306560 + 306903 3 4 - 196142 + 196362 4 6 - 169120 + 169310 6 9 - 154677 + 154851 9 14 - 168188 + 168377 14 21 - 178438 + 178638 21 32 - 163063 + 163246 32 60 - 157939 + 158116 60 65 - 3727 + 3731 @@ -6187,67 +6171,67 @@ 1 2 - 5124 + 5130 2 8 - 3727 + 3731 9 186 - 3727 + 3731 193 288 - 3727 + 3731 294 495 - 3727 + 3731 503 555 - 3727 + 3731 561 634 - 3727 + 3731 640 758 - 3727 + 3731 758 869 - 3727 + 3731 876 1074 - 3727 + 3731 1075 1281 - 3727 + 3731 1289 1590 - 3727 + 3731 1685 2418 - 1863 + 1865 @@ -6263,67 +6247,67 @@ 1 2 - 5590 + 5597 2 5 - 3727 + 3731 5 65 - 3727 + 3731 70 100 - 3727 + 3731 100 111 - 3727 + 3731 112 122 - 3727 + 3731 122 134 - 3727 + 3731 139 152 - 3727 + 3731 152 160 - 3727 + 3731 160 171 - 3727 + 3731 171 175 - 3727 + 3731 176 192 - 3727 + 3731 207 265 - 1397 + 1399 @@ -6339,67 +6323,67 @@ 1 2 - 5590 + 5597 2 8 - 3727 + 3731 9 105 - 3727 + 3731 155 241 - 3727 + 3731 253 336 - 3727 + 3731 340 426 - 3727 + 3731 434 488 - 3727 + 3731 489 572 - 3727 + 3731 573 623 - 3727 + 3731 628 696 - 4193 + 4197 701 819 - 3727 + 3731 837 1095 - 3727 + 3731 1172 1174 - 931 + 932 @@ -6415,67 +6399,67 @@ 1 2 - 6056 + 6063 2 4 - 3727 + 3731 4 8 - 4193 + 4197 8 15 - 3727 + 3731 15 23 - 3727 + 3731 23 29 - 3727 + 3731 29 35 - 4193 + 4197 35 39 - 3261 + 3264 39 42 - 3261 + 3264 42 44 - 3261 + 3264 44 46 - 3727 + 3731 46 49 - 3727 + 3731 49 53 - 1397 + 1399 @@ -6491,67 +6475,67 @@ 1 2 - 5590 + 5597 2 8 - 3727 + 3731 9 156 - 3727 + 3731 159 240 - 3727 + 3731 251 335 - 3727 + 3731 342 430 - 3727 + 3731 432 490 - 3727 + 3731 490 573 - 3727 + 3731 574 622 - 3727 + 3731 628 698 - 3727 + 3731 700 812 - 3727 + 3731 812 987 - 3727 + 3731 1096 1180 - 1397 + 1399 @@ -6561,31 +6545,31 @@ locations_stmt - 3814280 + 3820105 id - 3814280 + 3820105 container - 3083 + 3088 startLine - 199878 + 200183 startColumn - 1870 + 1873 endLine - 194143 + 194439 endColumn - 2364 + 2367 @@ -6599,7 +6583,7 @@ 1 2 - 3814280 + 3820105 @@ -6615,7 +6599,7 @@ 1 2 - 3814280 + 3820105 @@ -6631,7 +6615,7 @@ 1 2 - 3814280 + 3820105 @@ -6647,7 +6631,7 @@ 1 2 - 3814280 + 3820105 @@ -6663,7 +6647,7 @@ 1 2 - 3814280 + 3820105 @@ -6679,62 +6663,62 @@ 1 13 - 246 + 247 16 48 - 246 + 247 61 175 - 246 + 247 176 417 - 246 + 247 436 608 - 246 + 247 621 797 - 246 + 247 848 1139 - 246 + 247 1158 1417 - 246 + 247 1453 1715 - 246 + 247 1771 2252 - 246 + 247 2282 2669 - 246 + 247 2736 3751 - 246 + 247 3768 @@ -6755,17 +6739,17 @@ 1 13 - 246 + 247 16 47 - 246 + 247 48 161 - 246 + 247 169 @@ -6775,42 +6759,42 @@ 393 586 - 246 + 247 602 783 - 246 + 247 845 1120 - 246 + 247 1131 1390 - 246 + 247 1394 1692 - 246 + 247 1726 2208 - 246 + 247 2225 2680 - 246 + 247 2777 3643 - 246 + 247 3885 @@ -6846,7 +6830,7 @@ 9 11 - 246 + 247 11 @@ -6861,7 +6845,7 @@ 14 16 - 246 + 247 16 @@ -6881,22 +6865,22 @@ 21 23 - 246 + 247 23 29 - 246 + 247 29 43 - 246 + 247 48 60 - 143 + 144 @@ -6912,62 +6896,62 @@ 1 11 - 246 + 247 12 34 - 246 + 247 43 132 - 246 + 247 134 282 - 246 + 247 294 452 - 246 + 247 459 601 - 246 + 247 609 831 - 246 + 247 838 1062 - 246 + 247 1071 1265 - 246 + 247 1323 1679 - 246 + 247 1688 2006 - 246 + 247 2044 2758 - 246 + 247 2776 @@ -6988,22 +6972,22 @@ 1 8 - 246 + 247 8 21 - 246 + 247 22 45 - 246 + 247 45 56 - 246 + 247 56 @@ -7013,12 +6997,12 @@ 63 67 - 246 + 247 67 69 - 246 + 247 69 @@ -7028,22 +7012,22 @@ 71 72 - 246 + 247 72 74 - 246 + 247 74 76 - 246 + 247 76 80 - 246 + 247 81 @@ -7064,67 +7048,67 @@ 1 2 - 21544 + 21576 2 3 - 15294 + 15317 3 4 - 12478 + 12497 4 6 - 14451 + 14473 6 8 - 12519 + 12538 8 11 - 16713 + 16738 11 16 - 17268 + 17294 16 22 - 15356 + 15379 22 29 - 16980 + 17006 29 37 - 17370 + 17397 37 45 - 15089 + 15112 45 56 - 16178 + 16203 56 73 - 8634 + 8647 @@ -7140,67 +7124,67 @@ 1 2 - 22304 + 22338 2 3 - 15726 + 15750 3 4 - 12683 + 12703 4 6 - 14390 + 14412 6 8 - 12724 + 12744 8 11 - 17576 + 17603 11 16 - 16363 + 16388 16 22 - 16219 + 16244 22 29 - 16959 + 16985 29 36 - 15993 + 16017 36 44 - 16322 + 16347 44 54 - 15644 + 15667 54 69 - 6968 + 6979 @@ -7216,57 +7200,57 @@ 1 2 - 26827 + 26868 2 3 - 20845 + 20876 3 4 - 16815 + 16841 4 5 - 16075 + 16100 5 6 - 17432 + 17459 6 7 - 19858 + 19888 7 8 - 22756 + 22791 8 9 - 20392 + 20423 9 10 - 15006 + 15029 10 12 - 16651 + 16676 12 18 - 7215 + 7226 @@ -7282,67 +7266,67 @@ 1 2 - 34597 + 34650 2 3 - 25799 + 25838 3 4 - 18439 + 18468 4 5 - 16219 + 16244 5 6 - 12786 + 12806 6 7 - 12026 + 12044 7 8 - 10175 + 10191 8 9 - 10977 + 10994 9 10 - 10730 + 10747 10 11 - 10525 + 10541 11 12 - 10175 + 10191 12 14 - 15787 + 15812 14 24 - 11635 + 11653 @@ -7358,67 +7342,67 @@ 1 2 - 22140 + 22174 2 3 - 16199 + 16223 3 4 - 12951 + 12970 4 6 - 16075 + 16100 6 8 - 14698 + 14720 8 10 - 13197 + 13217 10 14 - 18295 + 18323 14 18 - 17021 + 17047 18 22 - 17576 + 17603 22 26 - 18501 + 18529 26 30 - 16384 + 16409 30 36 - 15232 + 15256 36 42 - 1603 + 1605 @@ -7439,7 +7423,7 @@ 2 3 - 143 + 144 3 @@ -7449,7 +7433,7 @@ 7 12 - 143 + 144 12 @@ -7459,37 +7443,37 @@ 21 53 - 143 + 144 54 74 - 143 + 144 78 92 - 143 + 144 92 134 - 143 + 144 134 228 - 143 + 144 228 2062 - 143 + 144 3245 40863 - 143 + 144 53257 @@ -7510,7 +7494,7 @@ 1 2 - 287 + 288 2 @@ -7530,42 +7514,42 @@ 8 13 - 143 + 144 13 18 - 143 + 144 18 22 - 143 + 144 22 24 - 143 + 144 24 29 - 143 + 144 33 42 - 143 + 144 47 109 - 143 + 144 116 150 - 143 + 144 @@ -7586,7 +7570,7 @@ 2 3 - 143 + 144 3 @@ -7596,7 +7580,7 @@ 7 12 - 143 + 144 12 @@ -7606,37 +7590,37 @@ 21 53 - 143 + 144 54 74 - 143 + 144 77 88 - 143 + 144 90 131 - 143 + 144 134 224 - 143 + 144 226 1699 - 143 + 144 2430 7900 - 143 + 144 8302 @@ -7662,7 +7646,7 @@ 2 3 - 143 + 144 3 @@ -7672,7 +7656,7 @@ 7 12 - 143 + 144 12 @@ -7682,37 +7666,37 @@ 21 53 - 143 + 144 54 74 - 143 + 144 77 88 - 143 + 144 90 130 - 143 + 144 134 221 - 143 + 144 226 1414 - 143 + 144 2290 7741 - 143 + 144 8096 @@ -7733,12 +7717,12 @@ 1 2 - 287 + 288 2 3 - 143 + 144 3 @@ -7758,7 +7742,7 @@ 8 11 - 143 + 144 11 @@ -7768,27 +7752,27 @@ 15 19 - 143 + 144 19 26 - 143 + 144 28 35 - 143 + 144 41 69 - 143 + 144 70 104 - 143 + 144 @@ -7804,67 +7788,67 @@ 1 2 - 17412 + 17438 2 3 - 14410 + 14432 3 4 - 11491 + 11509 4 6 - 15602 + 15626 6 8 - 12498 + 12517 8 11 - 15459 + 15482 11 15 - 14636 + 14659 15 21 - 16096 + 16120 21 27 - 15417 + 15441 27 34 - 14945 + 14967 34 42 - 15746 + 15770 42 52 - 16014 + 16038 52 130 - 14410 + 14432 @@ -7880,62 +7864,62 @@ 1 2 - 24956 + 24994 2 3 - 16137 + 16162 3 4 - 12766 + 12785 4 6 - 15664 + 15688 6 8 - 15006 + 15029 8 11 - 15890 + 15915 11 16 - 17453 + 17479 16 20 - 14595 + 14617 20 26 - 17165 + 17191 26 32 - 16260 + 16285 32 39 - 14862 + 14885 39 59 - 13382 + 13403 @@ -7951,62 +7935,62 @@ 1 2 - 32480 + 32530 2 3 - 23764 + 23800 3 4 - 18460 + 18488 4 5 - 15150 + 15173 5 6 - 13876 + 13897 6 7 - 11676 + 11694 7 8 - 11738 + 11756 8 9 - 10915 + 10932 9 10 - 10175 + 10191 10 12 - 17967 + 17994 12 15 - 17720 + 17747 15 100 - 10216 + 10232 @@ -8022,57 +8006,57 @@ 1 2 - 24956 + 24994 2 3 - 20392 + 20423 3 4 - 16836 + 16862 4 5 - 17802 + 17829 5 6 - 18583 + 18612 6 7 - 20433 + 20465 7 8 - 22427 + 22462 8 9 - 18748 + 18776 9 10 - 12930 + 12950 10 12 - 15027 + 15050 12 18 - 6002 + 6011 @@ -8088,67 +8072,67 @@ 1 2 - 24709 + 24747 2 3 - 16630 + 16656 3 4 - 12539 + 12559 4 6 - 17823 + 17850 6 8 - 15335 + 15359 8 10 - 12827 + 12847 10 13 - 14410 + 14432 13 16 - 15027 + 15050 16 19 - 14657 + 14679 19 22 - 14040 + 14062 22 26 - 17124 + 17150 26 31 - 15335 + 15359 31 39 - 3679 + 3685 @@ -8543,31 +8527,31 @@ locations_expr - 13168606 + 13188716 id - 13168606 + 13188716 container - 4645 + 4653 startLine - 191943 + 192236 startColumn - 2466 + 2470 endLine - 191922 + 192215 endColumn - 2795 + 2800 @@ -8581,7 +8565,7 @@ 1 2 - 13168606 + 13188716 @@ -8597,7 +8581,7 @@ 1 2 - 13168606 + 13188716 @@ -8613,7 +8597,7 @@ 1 2 - 13168606 + 13188716 @@ -8629,7 +8613,7 @@ 1 2 - 13168606 + 13188716 @@ -8645,7 +8629,7 @@ 1 2 - 13168606 + 13188716 @@ -8666,7 +8650,7 @@ 2 6 - 328 + 329 6 @@ -8681,47 +8665,47 @@ 27 96 - 349 + 350 100 514 - 349 + 350 525 1401 - 349 + 350 1526 2343 - 349 + 350 2404 3615 - 349 + 350 3668 5162 - 349 + 350 5341 7345 - 349 + 350 7399 9307 - 349 + 350 9382 16759 - 349 + 350 18811 @@ -8742,7 +8726,7 @@ 1 2 - 493 + 494 2 @@ -8757,47 +8741,47 @@ 10 20 - 349 + 350 20 51 - 349 + 350 65 151 - 349 + 350 161 360 - 349 + 350 361 577 - 349 + 350 590 923 - 349 + 350 928 1265 - 349 + 350 1268 1742 - 349 + 350 1781 2320 - 349 + 350 2491 @@ -8818,32 +8802,32 @@ 1 2 - 493 + 494 2 4 - 349 + 350 4 7 - 390 + 391 7 16 - 349 + 350 16 37 - 349 + 350 37 59 - 390 + 391 59 @@ -8904,7 +8888,7 @@ 1 2 - 493 + 494 2 @@ -8919,47 +8903,47 @@ 10 20 - 349 + 350 20 51 - 349 + 350 65 151 - 349 + 350 162 360 - 349 + 350 361 578 - 349 + 350 591 926 - 349 + 350 930 1266 - 349 + 350 1272 1742 - 349 + 350 1785 2324 - 349 + 350 2500 @@ -8985,7 +8969,7 @@ 2 4 - 328 + 329 4 @@ -8995,22 +8979,22 @@ 7 15 - 349 + 350 15 36 - 349 + 350 36 61 - 349 + 350 61 70 - 349 + 350 70 @@ -9020,7 +9004,7 @@ 73 75 - 328 + 329 75 @@ -9035,12 +9019,12 @@ 77 79 - 349 + 350 79 84 - 349 + 350 84 @@ -9061,67 +9045,67 @@ 1 5 - 16116 + 16141 5 9 - 16486 + 16512 9 15 - 16034 + 16059 15 23 - 15109 + 15132 23 32 - 15150 + 15173 32 44 - 15006 + 15029 44 60 - 14760 + 14782 60 80 - 14821 + 14844 80 103 - 14636 + 14659 103 130 - 14780 + 14803 130 159 - 14534 + 14556 159 194 - 14616 + 14638 194 302 - 9888 + 9903 @@ -9137,62 +9121,62 @@ 1 2 - 23517 + 23553 2 3 - 15623 + 15647 3 4 - 11347 + 11364 4 6 - 16363 + 16388 6 8 - 13629 + 13650 8 11 - 16445 + 16470 11 16 - 17350 + 17376 16 21 - 16445 + 16470 21 28 - 16651 + 16676 28 35 - 15808 + 15832 35 43 - 15849 + 15873 43 60 - 12909 + 12929 @@ -9208,62 +9192,62 @@ 1 4 - 15973 + 15997 4 7 - 17535 + 17562 7 11 - 16692 + 16718 11 16 - 17412 + 17438 16 21 - 17514 + 17541 21 26 - 15068 + 15091 26 31 - 16178 + 16203 31 36 - 17720 + 17747 36 40 - 15705 + 15729 40 44 - 16301 + 16326 44 49 - 16898 + 16923 49 63 - 8942 + 8956 @@ -9279,27 +9263,27 @@ 1 2 - 101964 + 102119 2 3 - 44629 + 44698 3 4 - 27649 + 27691 4 6 - 14575 + 14597 6 23 - 3124 + 3129 @@ -9315,62 +9299,62 @@ 1 4 - 16959 + 16985 4 7 - 16651 + 16676 7 11 - 16425 + 16450 11 16 - 16219 + 16244 16 21 - 16445 + 16470 21 27 - 16774 + 16800 27 33 - 16445 + 16470 33 38 - 14472 + 14494 38 43 - 15541 + 15565 43 47 - 14698 + 14720 47 52 - 16774 + 16800 52 65 - 14451 + 14473 65 @@ -9467,7 +9451,7 @@ 1 2 - 328 + 329 2 @@ -9477,7 +9461,7 @@ 3 4 - 143 + 144 4 @@ -9517,7 +9501,7 @@ 142 144 - 143 + 144 144 @@ -9700,7 +9684,7 @@ 1 2 - 328 + 329 2 @@ -9776,67 +9760,67 @@ 1 5 - 16137 + 16162 5 9 - 16486 + 16512 9 15 - 15808 + 15832 15 23 - 15089 + 15112 23 32 - 15644 + 15667 32 44 - 14739 + 14762 44 60 - 14492 + 14515 60 80 - 15253 + 15276 80 103 - 14534 + 14556 103 130 - 14760 + 14782 130 160 - 14883 + 14906 160 195 - 14554 + 14576 195 299 - 9538 + 9553 @@ -9852,67 +9836,67 @@ 1 2 - 23517 + 23553 2 3 - 15561 + 15585 3 4 - 11347 + 11364 4 6 - 16055 + 16079 6 8 - 13485 + 13506 8 11 - 16507 + 16532 11 15 - 14431 + 14453 15 20 - 16774 + 16800 20 26 - 14986 + 15009 26 33 - 16055 + 16079 33 40 - 14636 + 14659 40 49 - 14595 + 14617 49 60 - 3967 + 3973 @@ -9928,27 +9912,27 @@ 1 2 - 95488 + 95634 2 3 - 50015 + 50092 3 4 - 29376 + 29421 4 6 - 15602 + 15626 6 11 - 1439 + 1441 @@ -9964,62 +9948,62 @@ 1 4 - 15829 + 15853 4 7 - 17453 + 17479 7 11 - 16486 + 16512 11 16 - 17350 + 17376 16 21 - 17309 + 17335 21 26 - 15150 + 15173 26 31 - 16301 + 16326 31 36 - 17679 + 17706 36 40 - 15294 + 15317 40 44 - 16445 + 16470 44 49 - 16980 + 17006 49 63 - 9641 + 9656 @@ -10035,62 +10019,62 @@ 1 4 - 17185 + 17212 4 7 - 16795 + 16820 7 11 - 16425 + 16450 11 16 - 16877 + 16903 16 21 - 16014 + 16038 21 26 - 14513 + 14535 26 32 - 16158 + 16182 32 38 - 17494 + 17520 38 43 - 16137 + 16162 43 47 - 14472 + 14494 47 52 - 16569 + 16594 52 69 - 13280 + 13300 @@ -10121,7 +10105,7 @@ 10 16 - 246 + 247 16 @@ -10182,7 +10166,7 @@ 1 2 - 328 + 329 2 @@ -10222,12 +10206,12 @@ 137 142 - 246 + 247 142 147 - 143 + 144 147 @@ -10237,7 +10221,7 @@ 148 151 - 246 + 247 151 @@ -10268,7 +10252,7 @@ 4 8 - 246 + 247 8 @@ -10344,17 +10328,17 @@ 4 9 - 246 + 247 9 14 - 246 + 247 14 22 - 246 + 247 23 @@ -10415,7 +10399,7 @@ 4 8 - 246 + 247 8 @@ -10475,23 +10459,23 @@ numlines - 1380918 + 1382466 element_id - 1373930 + 1375469 num_lines - 101565 + 101679 num_code - 84793 + 84888 num_comment - 59634 + 59701 @@ -10505,12 +10489,12 @@ 1 2 - 1366941 + 1368473 2 3 - 6988 + 6996 @@ -10526,12 +10510,12 @@ 1 2 - 1367873 + 1369406 2 3 - 6056 + 6063 @@ -10547,7 +10531,7 @@ 1 2 - 1373930 + 1375469 @@ -10563,27 +10547,27 @@ 1 2 - 68020 + 68097 2 3 - 12113 + 12126 3 4 - 7454 + 7462 4 21 - 7920 + 7929 29 921 - 6056 + 6063 @@ -10599,27 +10583,27 @@ 1 2 - 70350 + 70429 2 3 - 12113 + 12126 3 4 - 8386 + 8395 4 6 - 9317 + 9328 6 7 - 1397 + 1399 @@ -10635,22 +10619,22 @@ 1 2 - 69418 + 69496 2 3 - 14908 + 14925 3 4 - 10715 + 10727 4 7 - 6522 + 6529 @@ -10666,27 +10650,27 @@ 1 2 - 52646 + 52705 2 3 - 14442 + 14458 3 5 - 6522 + 6529 5 42 - 6522 + 6529 44 922 - 4658 + 4664 @@ -10702,27 +10686,27 @@ 1 2 - 52646 + 52705 2 3 - 16772 + 16791 3 5 - 6056 + 6063 5 8 - 6522 + 6529 8 12 - 2795 + 2798 @@ -10738,27 +10722,27 @@ 1 2 - 53112 + 53171 2 3 - 15840 + 15858 3 5 - 7454 + 7462 5 7 - 5124 + 5130 7 10 - 3261 + 3264 @@ -10774,32 +10758,32 @@ 1 2 - 34476 + 34515 2 3 - 9317 + 9328 3 4 - 4193 + 4197 4 6 - 4658 + 4664 6 11 - 5124 + 5130 17 2596 - 1863 + 1865 @@ -10815,32 +10799,32 @@ 1 2 - 34476 + 34515 2 3 - 9317 + 9328 3 4 - 4193 + 4197 4 6 - 4658 + 4664 6 8 - 4658 + 4664 10 38 - 2329 + 2332 @@ -10856,32 +10840,32 @@ 1 2 - 34476 + 34515 2 3 - 9317 + 9328 3 4 - 4193 + 4197 4 6 - 4658 + 4664 6 10 - 4658 + 4664 10 37 - 2329 + 2332 @@ -10891,11 +10875,11 @@ diagnostics - 5192 + 5013 id - 5192 + 5013 severity @@ -10903,19 +10887,19 @@ error_tag - 39 + 38 error_message - 414 + 400 full_error_message - 4362 + 4213 location - 177 + 171 @@ -10929,7 +10913,7 @@ 1 2 - 5192 + 5013 @@ -10945,7 +10929,7 @@ 1 2 - 5192 + 5013 @@ -10961,7 +10945,7 @@ 1 2 - 5192 + 5013 @@ -10977,7 +10961,7 @@ 1 2 - 5192 + 5013 @@ -10993,7 +10977,7 @@ 1 2 - 5192 + 5013 @@ -11110,7 +11094,7 @@ 1 2 - 39 + 38 @@ -11189,17 +11173,17 @@ 1 2 - 118 + 114 2 3 - 157 + 152 3 4 - 78 + 76 43 @@ -11209,7 +11193,7 @@ 93 94 - 39 + 38 @@ -11225,7 +11209,7 @@ 1 2 - 414 + 400 @@ -11241,7 +11225,7 @@ 1 2 - 414 + 400 @@ -11257,22 +11241,22 @@ 1 2 - 138 + 133 2 3 - 157 + 152 3 4 - 78 + 76 93 94 - 39 + 38 @@ -11288,22 +11272,22 @@ 1 2 - 177 + 171 2 3 - 118 + 114 3 4 - 78 + 76 4 5 - 39 + 38 @@ -11319,7 +11303,7 @@ 1 2 - 4343 + 4194 43 @@ -11340,7 +11324,7 @@ 1 2 - 4362 + 4213 @@ -11356,7 +11340,7 @@ 1 2 - 4362 + 4213 @@ -11372,7 +11356,7 @@ 1 2 - 4362 + 4213 @@ -11388,7 +11372,7 @@ 1 2 - 4362 + 4213 @@ -11404,17 +11388,17 @@ 6 7 - 39 + 38 22 23 - 39 + 38 41 42 - 78 + 76 43 @@ -11435,7 +11419,7 @@ 1 2 - 177 + 171 @@ -11451,7 +11435,7 @@ 1 2 - 177 + 171 @@ -11472,17 +11456,17 @@ 3 4 - 39 + 38 5 6 - 39 + 38 6 7 - 78 + 76 @@ -11503,17 +11487,17 @@ 6 7 - 39 + 38 22 23 - 39 + 38 41 42 - 78 + 76 @@ -11523,15 +11507,15 @@ files - 122996 + 123134 id - 122996 + 123134 name - 122996 + 123134 @@ -11545,7 +11529,7 @@ 1 2 - 122996 + 123134 @@ -11561,7 +11545,7 @@ 1 2 - 122996 + 123134 @@ -11571,15 +11555,15 @@ folders - 15374 + 16324 id - 15374 + 16324 name - 15374 + 16324 @@ -11593,7 +11577,7 @@ 1 2 - 15374 + 16324 @@ -11609,7 +11593,7 @@ 1 2 - 15374 + 16324 @@ -11619,15 +11603,15 @@ containerparent - 137439 + 138526 parent - 15374 + 16324 child - 137439 + 138526 @@ -11641,32 +11625,32 @@ 1 2 - 6522 + 7462 2 3 - 3261 + 3264 3 - 5 - 1397 + 4 + 1399 - 5 + 4 12 - 1397 + 1399 23 28 - 1397 + 1399 40 67 - 1397 + 1399 @@ -11682,7 +11666,7 @@ 1 2 - 137439 + 138526 @@ -11692,11 +11676,11 @@ fileannotations - 5104924 + 5084962 id - 4875 + 4856 kind @@ -11704,11 +11688,11 @@ name - 54511 + 54298 value - 45826 + 45647 @@ -11722,12 +11706,12 @@ 1 2 - 168 + 167 2 3 - 4707 + 4688 @@ -11743,42 +11727,42 @@ 1 102 - 381 + 380 102 225 - 370 + 369 227 299 - 370 + 369 301 452 - 393 + 391 452 555 - 370 + 369 559 626 - 370 + 369 626 716 - 370 + 369 729 904 - 370 + 369 904 @@ -11788,12 +11772,12 @@ 936 937 - 1415 + 1410 1083 2036 - 370 + 369 2293 @@ -11814,52 +11798,52 @@ 1 114 - 381 + 380 114 275 - 370 + 369 275 363 - 370 + 369 393 638 - 370 + 369 643 744 - 370 + 369 751 955 - 370 + 369 955 1087 - 370 + 369 1088 1501 - 247 + 246 1501 1502 - 1415 + 1410 1504 1874 - 370 + 369 1972 @@ -11943,62 +11927,62 @@ 1 2 - 8819 + 8784 2 3 - 6190 + 6166 3 5 - 4156 + 4140 5 9 - 4246 + 4230 9 14 - 3965 + 3950 14 18 - 4156 + 4140 18 20 - 4696 + 4677 20 34 - 4201 + 4185 34 128 - 4482 + 4465 128 229 - 4100 + 4084 229 387 - 4224 + 4207 387 434 - 1269 + 1264 @@ -12014,7 +11998,7 @@ 1 2 - 54511 + 54298 @@ -12030,62 +12014,62 @@ 1 2 - 8830 + 8796 2 3 - 8021 + 7990 3 4 - 2550 + 2540 4 6 - 4493 + 4476 6 9 - 4111 + 4095 9 14 - 4190 + 4174 14 17 - 4111 + 4095 17 22 - 4572 + 4554 22 41 - 4190 + 4174 41 82 - 4145 + 4129 82 157 - 4089 + 4073 158 1895 - 1202 + 1197 @@ -12101,67 +12085,67 @@ 1 2 - 7122 + 7095 2 5 - 2224 + 2215 5 8 - 3314 + 3301 8 15 - 3516 + 3502 15 17 - 2527 + 2517 17 19 - 4123 + 4107 19 34 - 3314 + 3301 34 189 - 3606 + 3592 189 201 - 3595 + 3581 201 266 - 3538 + 3525 266 321 - 3662 + 3648 322 399 - 3932 + 3916 399 435 - 1348 + 1342 @@ -12177,7 +12161,7 @@ 1 2 - 45815 + 45636 2 @@ -12198,67 +12182,67 @@ 1 2 - 7145 + 7117 2 5 - 2572 + 2562 5 8 - 3494 + 3480 8 15 - 3538 + 3525 15 17 - 2819 + 2808 17 19 - 3572 + 3558 19 29 - 3494 + 3480 29 39 - 3651 + 3637 39 48 - 3595 + 3581 48 74 - 3550 + 3536 74 102 - 3437 + 3424 102 119 - 3583 + 3569 119 146 - 1370 + 1365 @@ -12268,15 +12252,15 @@ inmacroexpansion - 109622207 + 109785545 id - 18001590 + 18028412 inv - 2696311 + 2700329 @@ -12290,37 +12274,37 @@ 1 3 - 1579695 + 1582049 3 5 - 1076257 + 1077861 5 6 - 1183189 + 1184952 6 7 - 4813034 + 4820205 7 8 - 6376831 + 6386332 8 9 - 2601529 + 2605405 9 21 - 371052 + 371604 @@ -12336,57 +12320,57 @@ 1 2 - 377884 + 378447 2 3 - 543330 + 544135 3 4 - 351012 + 351535 4 7 - 200372 + 200670 7 8 - 206856 + 207164 8 9 - 241543 + 241902 9 10 - 2207 + 2210 10 11 - 325021 + 325505 11 337 - 224525 + 224864 339 423 - 206058 + 206365 423 7616 - 17499 + 17525 @@ -12396,15 +12380,15 @@ affectedbymacroexpansion - 35638060 + 35691161 id - 5149370 + 5157043 inv - 2780793 + 2784936 @@ -12418,37 +12402,37 @@ 1 2 - 2811908 + 2816098 2 3 - 559328 + 560161 3 4 - 264527 + 264922 4 5 - 564985 + 565827 5 12 - 391343 + 391926 12 50 - 406819 + 407425 50 9900 - 150457 + 150681 @@ -12464,67 +12448,67 @@ 1 4 - 228789 + 229130 4 7 - 231457 + 231802 7 9 - 220163 + 220491 9 12 - 250729 + 251102 12 13 - 333500 + 333997 13 14 - 165351 + 165598 14 15 - 298417 + 298861 15 16 - 121669 + 121850 16 17 - 276213 + 276624 17 18 - 146730 + 146949 18 20 - 251774 + 252149 20 25 - 208680 + 208991 25 109 - 47316 + 47386 @@ -12534,19 +12518,19 @@ macroinvocations - 33332083 + 33202987 id - 33332083 + 33202987 macro_id - 79104 + 78795 location - 756755 + 753796 kind @@ -12564,7 +12548,7 @@ 1 2 - 33332083 + 33202987 @@ -12580,7 +12564,7 @@ 1 2 - 33332083 + 33202987 @@ -12596,7 +12580,7 @@ 1 2 - 33332083 + 33202987 @@ -12612,57 +12596,57 @@ 1 2 - 16178 + 16114 2 3 - 16492 + 16428 3 4 - 3100 + 3088 4 5 - 5246 + 5226 5 8 - 5662 + 5640 8 13 - 6078 + 6054 13 26 - 6156 + 6121 26 61 - 6033 + 6009 61 - 200 - 5954 + 199 + 5919 - 200 + 199 1697 - 5965 + 5964 1716 168807 - 2235 + 2226 @@ -12678,37 +12662,37 @@ 1 2 - 42265 + 42100 2 3 - 10347 + 10306 3 4 - 5134 + 5114 4 6 - 6808 + 6781 6 13 - 6448 + 6423 13 66 - 5976 + 5953 66 3614 - 2123 + 2115 @@ -12724,12 +12708,12 @@ 1 2 - 73397 + 73110 2 3 - 5707 + 5684 @@ -12745,42 +12729,37 @@ 1 2 - 279881 + 278787 2 3 - 168814 + 168154 3 4 - 70419 + 70144 4 5 - 60005 + 59770 5 - 8 - 53679 + 9 + 69786 - 8 - 17 - 62544 + 9 + 21 + 58595 - 17 - 525 - 56769 - - - 534 + 21 244764 - 4639 + 48557 @@ -12796,12 +12775,12 @@ 1 2 - 710804 + 708025 2 350 - 45950 + 45770 @@ -12817,7 +12796,7 @@ 1 2 - 756755 + 753796 @@ -12836,8 +12815,8 @@ 11 - 2946191 - 2946192 + 2946302 + 2946303 11 @@ -12890,15 +12869,15 @@ macroparent - 29807887 + 29691721 id - 29807887 + 29691721 parent_id - 23175993 + 23085760 @@ -12912,7 +12891,7 @@ 1 2 - 29807887 + 29691721 @@ -12928,17 +12907,17 @@ 1 2 - 17907074 + 17837443 2 3 - 4438249 + 4420895 3 88 - 830669 + 827421 @@ -12948,15 +12927,15 @@ macrolocationbind - 4037867 + 4044034 id - 2826997 + 2831314 location - 2018105 + 2021186 @@ -12970,22 +12949,22 @@ 1 2 - 2226651 + 2230051 2 3 - 340625 + 341145 3 7 - 230187 + 230539 7 57 - 29533 + 29578 @@ -13001,22 +12980,22 @@ 1 2 - 1608661 + 1611118 2 3 - 177421 + 177692 3 8 - 156639 + 156878 8 723 - 75382 + 75497 @@ -13026,19 +13005,19 @@ macro_argument_unexpanded - 84144991 + 83818746 invocation - 26089756 + 25989002 argument_index - 741 + 738 text - 316788 + 315549 @@ -13052,22 +13031,22 @@ 1 2 - 7397659 + 7368800 2 3 - 10622885 + 10582220 3 4 - 6109677 + 6086111 4 67 - 1959533 + 1951870 @@ -13083,22 +13062,22 @@ 1 2 - 7467484 + 7438351 2 3 - 10768736 + 10727500 3 4 - 5944143 + 5921224 4 67 - 1909392 + 1901925 @@ -13114,16 +13093,16 @@ 41230 41231 - 651 + 649 41432 174417 - 56 + 55 - 718232 - 2322223 + 718261 + 2322336 33 @@ -13140,12 +13119,12 @@ 2 3 - 651 + 649 13 995 - 56 + 55 6559 @@ -13166,57 +13145,57 @@ 1 2 - 34906 + 34770 2 3 - 60971 + 60732 3 4 - 17661 + 17592 4 5 - 44849 + 44674 5 7 - 23885 + 23713 7 12 - 18402 + 18364 12 16 - 21503 + 21430 16 23 - 24851 + 24765 23 42 - 24199 + 24116 42 129 - 23963 + 23870 129 522417 - 21593 + 21520 @@ -13232,17 +13211,17 @@ 1 2 - 229100 + 228204 2 3 - 77452 + 77150 3 9 - 10234 + 10194 @@ -13252,19 +13231,19 @@ macro_argument_expanded - 84144991 + 83818746 invocation - 26089756 + 25989002 argument_index - 741 + 738 text - 191980 + 191229 @@ -13278,22 +13257,22 @@ 1 2 - 7397659 + 7368800 2 3 - 10622885 + 10582220 3 4 - 6109677 + 6086111 4 67 - 1959533 + 1951870 @@ -13309,22 +13288,22 @@ 1 2 - 10638704 + 10597171 2 3 - 9157482 + 9122547 3 4 - 5183073 + 5163131 4 9 - 1110494 + 1106152 @@ -13340,16 +13319,16 @@ 41230 41231 - 651 + 649 41432 174417 - 56 + 55 - 718232 - 2322223 + 718261 + 2322336 33 @@ -13366,12 +13345,12 @@ 1 2 - 640 + 637 2 76 - 56 + 55 870 @@ -13392,62 +13371,62 @@ 1 2 - 20694 + 20613 2 3 - 37131 + 36985 3 4 - 9021 + 8986 4 5 - 16301 + 16237 5 6 - 2471 + 2394 6 7 - 22750 + 22650 7 9 - 14695 + 14671 9 14 - 11976 + 11940 14 19 - 14504 + 14425 19 - 49 - 15739 + 48 + 14346 - 49 - 169 - 14414 + 48 + 151 + 14357 - 169 + 152 1060462 - 12279 + 13619 @@ -13463,17 +13442,17 @@ 1 2 - 97158 + 96778 2 3 - 80486 + 80171 3 66 - 14335 + 14279 @@ -13483,19 +13462,19 @@ functions - 4640799 + 4646000 id - 4640799 + 4646000 name - 1915302 + 1916982 kind - 3261 + 3264 @@ -13509,7 +13488,7 @@ 1 2 - 4640799 + 4646000 @@ -13525,7 +13504,7 @@ 1 2 - 4640799 + 4646000 @@ -13541,22 +13520,22 @@ 1 2 - 1502983 + 1504201 2 3 - 151882 + 152052 3 5 - 150018 + 150186 5 1676 - 110417 + 110541 @@ -13572,12 +13551,12 @@ 1 2 - 1914836 + 1916516 2 3 - 465 + 466 @@ -13593,37 +13572,37 @@ 4 5 - 465 + 466 64 65 - 465 + 466 173 174 - 465 + 466 195 196 - 465 + 466 1354 1355 - 465 + 466 2382 2383 - 465 + 466 5789 5790 - 465 + 466 @@ -13639,37 +13618,37 @@ 2 3 - 465 + 466 33 34 - 465 + 466 - 39 - 40 - 465 + 38 + 39 + 466 94 95 - 465 + 466 195 196 - 465 + 466 245 246 - 465 + 466 3504 3505 - 465 + 466 @@ -13679,15 +13658,15 @@ function_entry_point - 1155424 + 1156719 id - 1145640 + 1146924 entry_point - 1155424 + 1156719 @@ -13701,12 +13680,12 @@ 1 2 - 1135856 + 1137129 2 3 - 9783 + 9794 @@ -13722,7 +13701,7 @@ 1 2 - 1155424 + 1156719 @@ -13732,15 +13711,15 @@ function_return_type - 4645924 + 4651131 id - 4640799 + 4646000 return_type - 986303 + 987409 @@ -13754,12 +13733,12 @@ 1 2 - 4635674 + 4640870 2 3 - 5124 + 5130 @@ -13775,22 +13754,22 @@ 1 2 - 509691 + 510262 2 3 - 375512 + 375933 3 10 - 75009 + 75093 10 2516 - 26090 + 26119 @@ -13808,7 +13787,7 @@ traits - 2 + 1 handle @@ -13876,9 +13855,9 @@ 12 - 1 - 2 - 2 + 2 + 3 + 1 @@ -13892,9 +13871,9 @@ 12 - 1 - 2 - 2 + 2 + 3 + 1 @@ -13908,9 +13887,9 @@ 12 - 1 - 2 - 2 + 2 + 3 + 1 @@ -14112,59 +14091,59 @@ purefunctions - 100915 + 100917 id - 100915 + 100917 function_deleted - 137439 + 137593 id - 137439 + 137593 function_defaulted - 73611 + 73694 id - 73611 + 73694 function_prototyped - 4549018 + 4554116 id - 4549018 + 4554116 member_function_this_type - 551738 + 546094 id - 551738 + 546094 this_type - 189340 + 187436 @@ -14178,7 +14157,7 @@ 1 2 - 551738 + 546094 @@ -14194,32 +14173,32 @@ 1 2 - 68329 + 67674 2 3 - 45365 + 44849 3 4 - 30454 + 30201 4 5 - 15508 + 15344 5 7 - 15543 + 15379 7 66 - 14137 + 13987 @@ -14229,27 +14208,27 @@ fun_decls - 5009324 + 5014938 id - 5004199 + 5009807 function - 4497303 + 4502343 type_id - 984906 + 986009 name - 1817930 + 1819500 location - 3414558 + 3418385 @@ -14263,7 +14242,7 @@ 1 2 - 5004199 + 5009807 @@ -14279,12 +14258,12 @@ 1 2 - 4999074 + 5004676 2 3 - 5124 + 5130 @@ -14300,7 +14279,7 @@ 1 2 - 5004199 + 5009807 @@ -14316,7 +14295,7 @@ 1 2 - 5004199 + 5009807 @@ -14332,17 +14311,17 @@ 1 2 - 4069144 + 4073704 2 3 - 355479 + 355877 3 7 - 72679 + 72761 @@ -14358,12 +14337,12 @@ 1 2 - 4457702 + 4462697 2 3 - 39601 + 39645 @@ -14379,7 +14358,7 @@ 1 2 - 4497303 + 4502343 @@ -14395,17 +14374,17 @@ 1 2 - 4125517 + 4130141 2 4 - 370853 + 371269 5 6 - 931 + 932 @@ -14421,22 +14400,22 @@ 1 2 - 435147 + 435635 2 3 - 437943 + 438433 3 8 - 75009 + 75093 8 2761 - 36805 + 36847 @@ -14452,22 +14431,22 @@ 1 2 - 519009 + 519590 2 3 - 367126 + 367538 3 11 - 75475 + 75559 11 2477 - 23294 + 23320 @@ -14483,17 +14462,17 @@ 1 2 - 857716 + 858677 2 5 - 89452 + 89552 5 823 - 37737 + 37779 @@ -14509,22 +14488,22 @@ 1 2 - 753821 + 754666 2 3 - 131382 + 131530 3 10 - 74543 + 74627 10 2030 - 25158 + 25186 @@ -14540,27 +14519,27 @@ 1 2 - 1233695 + 1234611 2 3 - 266493 + 266791 3 4 - 80600 + 80690 4 6 - 136507 + 136660 6 1710 - 100633 + 100746 @@ -14576,22 +14555,22 @@ 1 2 - 1412599 + 1413716 2 3 - 150950 + 151119 3 5 - 143962 + 144123 5 1660 - 110417 + 110541 @@ -14607,17 +14586,17 @@ 1 2 - 1600356 + 1601216 2 4 - 134178 + 134795 4 930 - 83395 + 83489 @@ -14633,27 +14612,27 @@ 1 2 - 1254660 + 1255600 2 3 - 293515 + 293377 3 4 - 79202 + 79757 4 8 - 137439 + 137593 8 653 - 53112 + 53171 @@ -14669,17 +14648,17 @@ 1 2 - 2958911 + 2962227 2 4 - 295844 + 296176 4 55 - 159802 + 159981 @@ -14695,17 +14674,17 @@ 1 2 - 3026000 + 3029392 2 6 - 262299 + 262593 6 55 - 126258 + 126399 @@ -14721,12 +14700,12 @@ 1 2 - 3204905 + 3208496 2 25 - 209653 + 209888 @@ -14742,12 +14721,12 @@ 1 2 - 3242642 + 3246276 2 13 - 171915 + 172108 @@ -14757,22 +14736,22 @@ fun_def - 1933006 + 1935172 id - 1933006 + 1935172 fun_specialized - 26090 + 26119 id - 26090 + 26119 @@ -14790,15 +14769,15 @@ fun_decl_specifiers - 2900674 + 2903925 id - 1686081 + 1687970 name - 2795 + 2798 @@ -14812,17 +14791,17 @@ 1 2 - 490123 + 490672 2 3 - 1177321 + 1178641 3 4 - 18635 + 18656 @@ -14838,32 +14817,32 @@ 50 51 - 465 + 466 203 204 - 465 + 466 209 210 - 465 + 466 639 640 - 465 + 466 2561 2562 - 465 + 466 2564 2565 - 465 + 466 @@ -14994,26 +14973,26 @@ fun_decl_empty_throws - 1931608 + 1933773 fun_decl - 1931608 + 1933773 fun_decl_noexcept - 61011 + 60559 fun_decl - 61011 + 60559 constant - 60907 + 60456 @@ -15027,7 +15006,7 @@ 1 2 - 61011 + 60559 @@ -15043,12 +15022,12 @@ 1 2 - 60803 + 60352 2 3 - 104 + 103 @@ -15058,22 +15037,22 @@ fun_decl_empty_noexcept - 868897 + 869871 fun_decl - 868897 + 869871 fun_decl_typedef_type - 2870 + 2867 fun_decl - 2870 + 2867 typedeftype_id @@ -15091,7 +15070,7 @@ 1 2 - 2870 + 2867 @@ -15167,19 +15146,19 @@ param_decl_bind - 7371421 + 7379682 id - 7371421 + 7379682 index - 7920 + 7929 fun_decl - 4218231 + 4222958 @@ -15193,7 +15172,7 @@ 1 2 - 7371421 + 7379682 @@ -15209,7 +15188,7 @@ 1 2 - 7371421 + 7379682 @@ -15225,72 +15204,72 @@ 2 3 - 931 + 932 5 6 - 465 + 466 7 8 - 465 + 466 10 11 - 931 + 932 11 12 - 465 + 466 12 13 - 931 + 932 13 14 - 465 + 466 25 26 - 465 + 466 78 79 - 465 + 466 245 246 - 465 + 466 636 637 - 465 + 466 1713 1714 - 465 + 466 3987 3988 - 465 + 466 9054 9055 - 465 + 466 @@ -15306,72 +15285,72 @@ 2 3 - 931 + 932 5 6 - 465 + 466 7 8 - 465 + 466 10 11 - 931 + 932 11 12 - 465 + 466 12 13 - 931 + 932 13 14 - 465 + 466 25 26 - 465 + 466 78 79 - 465 + 466 245 246 - 465 + 466 636 637 - 465 + 466 1713 1714 - 465 + 466 3987 3988 - 465 + 466 9054 9055 - 465 + 466 @@ -15387,22 +15366,22 @@ 1 2 - 2360699 + 2363345 2 3 - 1059449 + 1060637 3 4 - 501771 + 502333 4 18 - 296310 + 296642 @@ -15418,22 +15397,22 @@ 1 2 - 2360699 + 2363345 2 3 - 1059449 + 1060637 3 4 - 501771 + 502333 4 18 - 296310 + 296642 @@ -15443,27 +15422,27 @@ var_decls - 8484449 + 8493958 id - 8413633 + 8423062 variable - 7403568 + 7411865 type_id - 2381665 + 2384334 name - 666232 + 666979 location - 5300975 + 5306916 @@ -15477,7 +15456,7 @@ 1 2 - 8413633 + 8423062 @@ -15493,12 +15472,12 @@ 1 2 - 8345612 + 8354965 2 3 - 68020 + 68097 @@ -15514,7 +15493,7 @@ 1 2 - 8413633 + 8423062 @@ -15530,12 +15509,12 @@ 1 2 - 8410838 + 8420264 2 3 - 2795 + 2798 @@ -15551,17 +15530,17 @@ 1 2 - 6553306 + 6560651 2 3 - 696981 + 697762 3 7 - 153280 + 153451 @@ -15577,12 +15556,12 @@ 1 2 - 7232584 + 7240690 2 4 - 170984 + 171175 @@ -15598,12 +15577,12 @@ 1 2 - 7288492 + 7296660 2 3 - 115076 + 115205 @@ -15619,12 +15598,12 @@ 1 2 - 6859401 + 6867088 2 4 - 544167 + 544777 @@ -15640,27 +15619,27 @@ 1 2 - 1467575 + 1469220 2 3 - 508759 + 509329 3 4 - 97838 + 97948 4 7 - 186824 + 187034 7 762 - 120667 + 120802 @@ -15676,22 +15655,22 @@ 1 2 - 1600822 + 1602616 2 3 - 484066 + 484609 3 7 - 186358 + 186567 7 724 - 110417 + 110541 @@ -15707,17 +15686,17 @@ 1 2 - 1875235 + 1877336 2 3 - 384365 + 384795 3 128 - 122065 + 122201 @@ -15733,22 +15712,22 @@ 1 2 - 1703319 + 1705228 2 3 - 401137 + 401586 3 8 - 188222 + 188433 8 592 - 88986 + 89086 @@ -15764,37 +15743,37 @@ 1 2 - 340570 + 340952 2 3 - 86656 + 86753 3 4 - 48453 + 48507 4 6 - 51714 + 51772 6 12 - 52180 + 52238 12 33 - 50316 + 50373 34 3223 - 36339 + 36380 @@ -15810,37 +15789,37 @@ 1 2 - 368058 + 368471 2 3 - 77804 + 77891 3 4 - 45192 + 45242 4 6 - 49385 + 49440 6 14 - 53112 + 53171 14 56 - 50782 + 50839 56 3140 - 21897 + 21921 @@ -15856,27 +15835,27 @@ 1 2 - 456113 + 456624 2 3 - 93645 + 93750 3 5 - 46589 + 46641 5 19 - 50782 + 50839 19 1927 - 19101 + 19123 @@ -15892,32 +15871,32 @@ 1 2 - 378308 + 378732 2 3 - 90384 + 90485 3 5 - 59634 + 59701 5 9 - 51248 + 51306 9 21 - 50316 + 50373 21 1010 - 36339 + 36380 @@ -15933,17 +15912,17 @@ 1 2 - 4487053 + 4492082 2 3 - 530656 + 531251 3 1735 - 283265 + 283582 @@ -15959,17 +15938,17 @@ 1 2 - 4875611 + 4881075 2 17 - 414648 + 415112 17 1731 - 10715 + 10727 @@ -15985,12 +15964,12 @@ 1 2 - 4951553 + 4957102 2 1513 - 349422 + 349814 @@ -16006,12 +15985,12 @@ 1 2 - 5291657 + 5297588 2 6 - 9317 + 9328 @@ -16021,26 +16000,26 @@ var_def - 4020225 + 4024730 id - 4020225 + 4024730 var_decl_specifiers - 310287 + 310635 id - 310287 + 310635 name - 1397 + 1399 @@ -16054,7 +16033,7 @@ 1 2 - 310287 + 310635 @@ -16070,17 +16049,17 @@ 15 16 - 465 + 466 66 67 - 465 + 466 585 586 - 465 + 466 @@ -16101,19 +16080,19 @@ type_decls - 3238449 + 3242079 id - 3238449 + 3242079 type_id - 3188133 + 3191705 location - 3159713 + 3163254 @@ -16127,7 +16106,7 @@ 1 2 - 3238449 + 3242079 @@ -16143,7 +16122,7 @@ 1 2 - 3238449 + 3242079 @@ -16159,12 +16138,12 @@ 1 2 - 3146668 + 3150194 2 5 - 41464 + 41511 @@ -16180,12 +16159,12 @@ 1 2 - 3146668 + 3150194 2 5 - 41464 + 41511 @@ -16201,12 +16180,12 @@ 1 2 - 3119646 + 3123142 2 20 - 40067 + 40112 @@ -16222,12 +16201,12 @@ 1 2 - 3119646 + 3123142 2 20 - 40067 + 40112 @@ -16237,33 +16216,33 @@ type_def - 2621602 + 2624540 id - 2621602 + 2624540 type_decl_top - 742173 + 743005 type_decl - 742173 + 743005 namespace_decls - 311526 + 311530 id - 311526 + 311530 namespace_id @@ -16271,11 +16250,11 @@ location - 311526 + 311530 bodylocation - 311526 + 311530 @@ -16289,7 +16268,7 @@ 1 2 - 311526 + 311530 @@ -16305,7 +16284,7 @@ 1 2 - 311526 + 311530 @@ -16321,7 +16300,7 @@ 1 2 - 311526 + 311530 @@ -16535,7 +16514,7 @@ 1 2 - 311526 + 311530 @@ -16551,7 +16530,7 @@ 1 2 - 311526 + 311530 @@ -16567,7 +16546,7 @@ 1 2 - 311526 + 311530 @@ -16583,7 +16562,7 @@ 1 2 - 311526 + 311530 @@ -16599,7 +16578,7 @@ 1 2 - 311526 + 311530 @@ -16615,7 +16594,7 @@ 1 2 - 311526 + 311530 @@ -16625,19 +16604,19 @@ usings - 368990 + 369403 id - 368990 + 369403 element_id - 314946 + 315299 location - 247391 + 247668 @@ -16651,7 +16630,7 @@ 1 2 - 368990 + 369403 @@ -16667,7 +16646,7 @@ 1 2 - 368990 + 369403 @@ -16683,17 +16662,17 @@ 1 2 - 262765 + 263060 2 3 - 50782 + 50839 3 5 - 1397 + 1399 @@ -16709,17 +16688,17 @@ 1 2 - 262765 + 263060 2 3 - 50782 + 50839 3 5 - 1397 + 1399 @@ -16735,22 +16714,22 @@ 1 2 - 202199 + 202425 2 4 - 10715 + 10727 4 5 - 31215 + 31250 5 11 - 3261 + 3264 @@ -16766,22 +16745,22 @@ 1 2 - 202199 + 202425 2 4 - 10715 + 10727 4 5 - 31215 + 31250 5 11 - 3261 + 3264 @@ -16791,15 +16770,15 @@ using_container - 464571 + 462754 parent - 10998 + 10955 child - 294577 + 293425 @@ -16813,42 +16792,42 @@ 1 2 - 3280 + 3267 2 4 - 932 + 928 4 6 - 415 + 414 6 7 - 2482 + 2473 7 17 - 898 + 895 19 143 - 763 + 760 178 179 - 1292 + 1286 179 183 - 853 + 850 201 @@ -16869,22 +16848,22 @@ 1 2 - 217270 + 216420 2 3 - 51477 + 51276 3 11 - 23705 + 23612 13 41 - 2123 + 2115 @@ -16894,15 +16873,15 @@ static_asserts - 134653 + 134655 id - 134653 + 134655 condition - 134653 + 134655 message @@ -16928,7 +16907,7 @@ 1 2 - 134653 + 134655 @@ -16944,7 +16923,7 @@ 1 2 - 134653 + 134655 @@ -16960,7 +16939,7 @@ 1 2 - 134653 + 134655 @@ -16976,7 +16955,7 @@ 1 2 - 134653 + 134655 @@ -16992,7 +16971,7 @@ 1 2 - 134653 + 134655 @@ -17008,7 +16987,7 @@ 1 2 - 134653 + 134655 @@ -17024,7 +17003,7 @@ 1 2 - 134653 + 134655 @@ -17040,7 +17019,7 @@ 1 2 - 134653 + 134655 @@ -17502,23 +17481,23 @@ params - 6732211 + 6739755 id - 6568681 + 6576042 function - 3875331 + 3879674 index - 7920 + 7929 type_id - 2186454 + 2188904 @@ -17532,7 +17511,7 @@ 1 2 - 6568681 + 6576042 @@ -17548,7 +17527,7 @@ 1 2 - 6568681 + 6576042 @@ -17564,12 +17543,12 @@ 1 2 - 6445218 + 6452441 2 4 - 123462 + 123601 @@ -17585,22 +17564,22 @@ 1 2 - 2254475 + 2257002 2 3 - 950895 + 951961 3 4 - 429091 + 429571 4 18 - 240868 + 241138 @@ -17616,22 +17595,22 @@ 1 2 - 2254475 + 2257002 2 3 - 950895 + 951961 3 4 - 429091 + 429571 4 18 - 240868 + 241138 @@ -17647,22 +17626,22 @@ 1 2 - 2552183 + 2555043 2 3 - 825103 + 826028 3 4 - 345695 + 346082 4 12 - 152348 + 152519 @@ -17678,72 +17657,72 @@ 2 3 - 931 + 932 4 5 - 465 + 466 6 7 - 465 + 466 8 9 - 931 + 932 9 10 - 465 + 466 10 11 - 931 + 932 11 12 - 465 + 466 19 20 - 465 + 466 64 65 - 465 + 466 194 195 - 465 + 466 517 518 - 465 + 466 1438 1439 - 465 + 466 3479 3480 - 465 + 466 8318 8319 - 465 + 466 @@ -17759,72 +17738,72 @@ 2 3 - 931 + 932 4 5 - 465 + 466 6 7 - 465 + 466 8 9 - 931 + 932 9 10 - 465 + 466 10 11 - 931 + 932 11 12 - 465 + 466 19 20 - 465 + 466 64 65 - 465 + 466 194 195 - 465 + 466 517 518 - 465 + 466 1438 1439 - 465 + 466 3479 3480 - 465 + 466 8318 8319 - 465 + 466 @@ -17840,67 +17819,67 @@ 1 2 - 931 + 932 3 4 - 465 + 466 4 5 - 465 + 466 5 6 - 465 + 466 6 7 - 1397 + 1399 7 8 - 931 + 932 11 12 - 465 + 466 42 43 - 465 + 466 106 107 - 465 + 466 228 229 - 465 + 466 582 583 - 465 + 466 1271 1272 - 465 + 466 3609 3610 - 465 + 466 @@ -17916,22 +17895,22 @@ 1 2 - 1486677 + 1488343 2 3 - 439806 + 440299 3 8 - 170052 + 170242 8 518 - 89918 + 90018 @@ -17947,22 +17926,22 @@ 1 2 - 1706114 + 1708026 2 3 - 247857 + 248134 3 9 - 168188 + 168377 9 502 - 64293 + 64365 @@ -17978,17 +17957,17 @@ 1 2 - 1759692 + 1761664 2 3 - 348025 + 348415 3 13 - 78736 + 78824 @@ -17998,15 +17977,15 @@ overrides - 125996 + 125866 new - 123017 + 122890 old - 9763 + 9753 @@ -18020,12 +17999,12 @@ 1 2 - 120046 + 119922 2 4 - 2970 + 2967 @@ -18041,17 +18020,17 @@ 1 2 - 4297 + 4293 2 3 - 2102 + 2100 3 4 - 926 + 925 4 @@ -18061,17 +18040,17 @@ 5 7 - 851 + 850 7 23 - 763 + 762 25 1464 - 363 + 362 @@ -18081,19 +18060,19 @@ membervariables - 1054945 + 1056556 id - 1053150 + 1054758 type_id - 327246 + 327746 name - 450956 + 451645 @@ -18107,12 +18086,12 @@ 1 2 - 1051434 + 1053040 2 4 - 1715 + 1718 @@ -18128,7 +18107,7 @@ 1 2 - 1053150 + 1054758 @@ -18144,22 +18123,22 @@ 1 2 - 242672 + 243043 2 3 - 51821 + 51900 3 10 - 25491 + 25530 10 4152 - 7260 + 7271 @@ -18175,22 +18154,22 @@ 1 2 - 254879 + 255269 2 3 - 46396 + 46467 3 40 - 24574 + 24611 41 2031 - 1396 + 1398 @@ -18206,22 +18185,22 @@ 1 2 - 294893 + 295343 2 3 - 86409 + 86541 3 5 - 41130 + 41193 5 646 - 28523 + 28567 @@ -18237,17 +18216,17 @@ 1 2 - 367300 + 367860 2 3 - 51662 + 51741 3 650 - 31994 + 32043 @@ -18428,19 +18407,19 @@ localvariables - 577491 + 576906 id - 577491 + 576906 type_id - 37631 + 37597 name - 90743 + 90649 @@ -18454,7 +18433,7 @@ 1 2 - 577491 + 576906 @@ -18470,7 +18449,7 @@ 1 2 - 577491 + 576906 @@ -18486,32 +18465,32 @@ 1 2 - 21054 + 21032 2 3 - 5378 + 5368 3 4 - 2461 + 2467 4 7 - 3383 + 3380 7 18 - 2858 + 2851 18 - 15847 - 2495 + 15849 + 2496 @@ -18527,27 +18506,27 @@ 1 2 - 26803 + 26772 2 3 - 4573 + 4572 3 5 - 2920 + 2921 5 31 - 2824 + 2821 31 3455 - 509 + 508 @@ -18563,27 +18542,27 @@ 1 2 - 57154 + 57095 2 3 - 14315 + 14301 3 5 - 8328 + 8319 5 15 - 6997 + 6990 15 - 5176 - 3947 + 5178 + 3943 @@ -18599,17 +18578,17 @@ 1 2 - 76656 + 76577 2 3 - 7427 + 7419 3 1486 - 6659 + 6652 @@ -18619,15 +18598,15 @@ autoderivation - 148931 + 148035 var - 148931 + 148035 derivation_type - 521 + 517 @@ -18641,7 +18620,7 @@ 1 2 - 148931 + 148035 @@ -18657,27 +18636,27 @@ 33 34 - 104 + 103 - 90 - 91 - 104 + 91 + 92 + 103 - 353 - 354 - 104 + 354 + 355 + 103 392 393 - 104 + 103 560 561 - 104 + 103 @@ -18687,15 +18666,15 @@ orphaned_variables - 37769 + 37368 var - 37769 + 37368 function - 33197 + 32845 @@ -18709,7 +18688,7 @@ 1 2 - 37769 + 37368 @@ -18725,12 +18704,12 @@ 1 2 - 31123 + 30792 2 47 - 2074 + 2052 @@ -18740,19 +18719,19 @@ enumconstants - 241316 + 241684 id - 241316 + 241684 parent - 28484 + 28527 index - 10212 + 10228 type_id @@ -18760,11 +18739,11 @@ name - 241036 + 241405 location - 221249 + 221587 @@ -18778,7 +18757,7 @@ 1 2 - 241316 + 241684 @@ -18794,7 +18773,7 @@ 1 2 - 241316 + 241684 @@ -18810,7 +18789,7 @@ 1 2 - 241316 + 241684 @@ -18826,7 +18805,7 @@ 1 2 - 241316 + 241684 @@ -18842,7 +18821,7 @@ 1 2 - 241316 + 241684 @@ -18858,52 +18837,52 @@ 1 2 - 997 + 998 2 3 - 4029 + 4035 3 4 - 5784 + 5793 4 5 - 3909 + 3915 5 6 - 3071 + 3076 6 7 - 1835 + 1837 7 8 - 1476 + 1478 8 11 - 2593 + 2597 11 17 - 2353 + 2357 17 84 - 2154 + 2157 94 @@ -18924,52 +18903,52 @@ 1 2 - 997 + 998 2 3 - 4029 + 4035 3 4 - 5784 + 5793 4 5 - 3909 + 3915 5 6 - 3071 + 3076 6 7 - 1835 + 1837 7 8 - 1476 + 1478 8 11 - 2593 + 2597 11 17 - 2353 + 2357 17 84 - 2154 + 2157 94 @@ -18990,7 +18969,7 @@ 1 2 - 28484 + 28527 @@ -19006,52 +18985,52 @@ 1 2 - 997 + 998 2 3 - 4029 + 4035 3 4 - 5784 + 5793 4 5 - 3909 + 3915 5 6 - 3071 + 3076 6 7 - 1835 + 1837 7 8 - 1476 + 1478 8 11 - 2593 + 2597 11 17 - 2353 + 2357 17 84 - 2154 + 2157 94 @@ -19072,52 +19051,52 @@ 1 2 - 1436 + 1438 2 3 - 4188 + 4195 3 4 - 5824 + 5833 4 5 - 3869 + 3875 5 6 - 3071 + 3076 6 7 - 1795 + 1797 7 8 - 1396 + 1398 8 11 - 2513 + 2517 11 17 - 2234 + 2237 17 257 - 2154 + 2157 @@ -19133,47 +19112,47 @@ 1 2 - 2034 + 2037 2 3 - 1635 + 1638 3 4 - 1755 + 1757 4 5 - 877 + 878 5 9 - 797 + 799 9 12 - 837 + 839 12 20 - 877 + 878 20 69 - 797 + 799 77 715 - 598 + 599 @@ -19189,47 +19168,47 @@ 1 2 - 2034 + 2037 2 3 - 1635 + 1638 3 4 - 1755 + 1757 4 5 - 877 + 878 5 9 - 797 + 799 9 12 - 837 + 839 12 20 - 877 + 878 20 69 - 797 + 799 77 715 - 598 + 599 @@ -19245,7 +19224,7 @@ 1 2 - 10212 + 10228 @@ -19261,47 +19240,47 @@ 1 2 - 2034 + 2037 2 3 - 1635 + 1638 3 4 - 1755 + 1757 4 5 - 877 + 878 5 9 - 797 + 799 9 12 - 837 + 839 12 20 - 877 + 878 20 69 - 797 + 799 77 712 - 598 + 599 @@ -19317,47 +19296,47 @@ 1 2 - 2034 + 2037 2 3 - 1635 + 1638 3 4 - 1755 + 1757 4 5 - 877 + 878 5 9 - 797 + 799 9 12 - 837 + 839 12 20 - 877 + 878 20 69 - 797 + 799 77 715 - 598 + 599 @@ -19453,7 +19432,7 @@ 1 2 - 240757 + 241125 2 @@ -19474,7 +19453,7 @@ 1 2 - 240757 + 241125 2 @@ -19495,7 +19474,7 @@ 1 2 - 241036 + 241405 @@ -19511,7 +19490,7 @@ 1 2 - 241036 + 241405 @@ -19527,7 +19506,7 @@ 1 2 - 240757 + 241125 2 @@ -19548,12 +19527,12 @@ 1 2 - 220491 + 220828 2 205 - 757 + 759 @@ -19569,7 +19548,7 @@ 1 2 - 221249 + 221587 @@ -19585,12 +19564,12 @@ 1 2 - 220491 + 220828 2 205 - 757 + 759 @@ -19606,7 +19585,7 @@ 1 2 - 221249 + 221587 @@ -19622,12 +19601,12 @@ 1 2 - 220491 + 220828 2 205 - 757 + 759 @@ -19637,31 +19616,31 @@ builtintypes - 26090 + 26119 id - 26090 + 26119 name - 26090 + 26119 kind - 26090 + 26119 size - 3261 + 3264 sign - 1397 + 1399 alignment - 2329 + 2332 @@ -19675,7 +19654,7 @@ 1 2 - 26090 + 26119 @@ -19691,7 +19670,7 @@ 1 2 - 26090 + 26119 @@ -19707,7 +19686,7 @@ 1 2 - 26090 + 26119 @@ -19723,7 +19702,7 @@ 1 2 - 26090 + 26119 @@ -19739,7 +19718,7 @@ 1 2 - 26090 + 26119 @@ -19755,7 +19734,7 @@ 1 2 - 26090 + 26119 @@ -19771,7 +19750,7 @@ 1 2 - 26090 + 26119 @@ -19787,7 +19766,7 @@ 1 2 - 26090 + 26119 @@ -19803,7 +19782,7 @@ 1 2 - 26090 + 26119 @@ -19819,7 +19798,7 @@ 1 2 - 26090 + 26119 @@ -19835,7 +19814,7 @@ 1 2 - 26090 + 26119 @@ -19851,7 +19830,7 @@ 1 2 - 26090 + 26119 @@ -19867,7 +19846,7 @@ 1 2 - 26090 + 26119 @@ -19883,7 +19862,7 @@ 1 2 - 26090 + 26119 @@ -19899,7 +19878,7 @@ 1 2 - 26090 + 26119 @@ -19915,37 +19894,37 @@ 1 2 - 465 + 466 4 5 - 465 + 466 7 8 - 465 + 466 8 9 - 465 + 466 10 11 - 465 + 466 12 13 - 465 + 466 14 15 - 465 + 466 @@ -19961,37 +19940,37 @@ 1 2 - 465 + 466 4 5 - 465 + 466 7 8 - 465 + 466 8 9 - 465 + 466 10 11 - 465 + 466 12 13 - 465 + 466 14 15 - 465 + 466 @@ -20007,37 +19986,37 @@ 1 2 - 465 + 466 4 5 - 465 + 466 7 8 - 465 + 466 8 9 - 465 + 466 10 11 - 465 + 466 12 13 - 465 + 466 14 15 - 465 + 466 @@ -20053,12 +20032,12 @@ 1 2 - 931 + 932 3 4 - 2329 + 2332 @@ -20074,12 +20053,12 @@ 1 2 - 1863 + 1865 2 3 - 1397 + 1399 @@ -20095,17 +20074,17 @@ 6 7 - 465 + 466 12 13 - 465 + 466 38 39 - 465 + 466 @@ -20121,17 +20100,17 @@ 6 7 - 465 + 466 12 13 - 465 + 466 38 39 - 465 + 466 @@ -20147,17 +20126,17 @@ 6 7 - 465 + 466 12 13 - 465 + 466 38 39 - 465 + 466 @@ -20173,12 +20152,12 @@ 5 6 - 931 + 932 7 8 - 465 + 466 @@ -20194,7 +20173,7 @@ 5 6 - 1397 + 1399 @@ -20210,27 +20189,27 @@ 8 9 - 465 + 466 9 10 - 465 + 466 11 12 - 465 + 466 13 14 - 465 + 466 15 16 - 465 + 466 @@ -20246,27 +20225,27 @@ 8 9 - 465 + 466 9 10 - 465 + 466 11 12 - 465 + 466 13 14 - 465 + 466 15 16 - 465 + 466 @@ -20282,27 +20261,27 @@ 8 9 - 465 + 466 9 10 - 465 + 466 11 12 - 465 + 466 13 14 - 465 + 466 15 16 - 465 + 466 @@ -20318,7 +20297,7 @@ 2 3 - 2329 + 2332 @@ -20334,7 +20313,7 @@ 3 4 - 2329 + 2332 @@ -20344,23 +20323,23 @@ derivedtypes - 4332841 + 4330701 id - 4332841 + 4330701 name - 2158500 + 2160919 kind - 2795 + 2798 type_id - 2673316 + 2670715 @@ -20374,7 +20353,7 @@ 1 2 - 4332841 + 4330701 @@ -20390,7 +20369,7 @@ 1 2 - 4332841 + 4330701 @@ -20406,7 +20385,7 @@ 1 2 - 4332841 + 4330701 @@ -20422,17 +20401,17 @@ 1 2 - 1897132 + 1899258 2 5 - 164461 + 164645 5 - 1165 - 96906 + 1153 + 97015 @@ -20448,12 +20427,12 @@ 1 2 - 2157568 + 2159986 2 3 - 931 + 932 @@ -20469,17 +20448,17 @@ 1 2 - 1897132 + 1899258 2 5 - 164461 + 164645 5 - 1147 - 96906 + 1135 + 97015 @@ -20495,32 +20474,32 @@ 236 237 - 465 + 466 1077 1078 - 465 + 466 - 1146 - 1147 - 465 + 1134 + 1135 + 466 1217 1218 - 465 + 466 - 2169 - 2170 - 465 + 2166 + 2167 + 466 3455 3456 - 465 + 466 @@ -20536,32 +20515,32 @@ 1 2 - 465 + 466 201 202 - 465 + 466 606 607 - 465 + 466 760 761 - 465 + 466 1128 1129 - 465 + 466 1939 1940 - 465 + 466 @@ -20577,32 +20556,32 @@ 84 85 - 465 + 466 1077 1078 - 465 + 466 - 1146 - 1147 - 465 + 1134 + 1135 + 466 1217 1218 - 465 + 466 - 2124 - 2125 - 465 + 2121 + 2122 + 466 3455 3456 - 465 + 466 @@ -20618,22 +20597,22 @@ 1 2 - 1653468 + 1651123 2 3 - 560939 + 560169 3 4 - 353615 + 354012 4 72 - 105292 + 105410 @@ -20649,22 +20628,22 @@ 1 2 - 1664649 + 1662317 2 3 - 553485 + 552706 3 4 - 350820 + 351213 4 72 - 104360 + 104477 @@ -20680,22 +20659,22 @@ 1 2 - 1657661 + 1655321 2 3 - 564667 + 563900 3 4 - 352684 + 353079 4 6 - 98304 + 98414 @@ -20705,19 +20684,19 @@ pointerishsize - 3212359 + 3210362 id - 3212359 + 3210362 size - 465 + 466 alignment - 465 + 466 @@ -20731,7 +20710,7 @@ 1 2 - 3212359 + 3210362 @@ -20747,7 +20726,7 @@ 1 2 - 3212359 + 3210362 @@ -20761,9 +20740,9 @@ 12 - 6895 - 6896 - 465 + 6883 + 6884 + 466 @@ -20779,7 +20758,7 @@ 1 2 - 465 + 466 @@ -20793,9 +20772,9 @@ 12 - 6895 - 6896 - 465 + 6883 + 6884 + 466 @@ -20811,7 +20790,7 @@ 1 2 - 465 + 466 @@ -20821,23 +20800,23 @@ arraysizes - 88054 + 88153 id - 88054 + 88153 num_elements - 31680 + 31716 bytesize - 33078 + 33115 alignment - 1863 + 1865 @@ -20851,7 +20830,7 @@ 1 2 - 88054 + 88153 @@ -20867,7 +20846,7 @@ 1 2 - 88054 + 88153 @@ -20883,7 +20862,7 @@ 1 2 - 88054 + 88153 @@ -20899,27 +20878,27 @@ 1 2 - 1863 + 1865 2 3 - 23760 + 23787 3 5 - 2795 + 2798 5 13 - 2795 + 2798 13 14 - 465 + 466 @@ -20935,17 +20914,17 @@ 1 2 - 26556 + 26585 2 3 - 2329 + 2332 3 7 - 2795 + 2798 @@ -20961,17 +20940,17 @@ 1 2 - 26556 + 26585 2 3 - 2795 + 2798 3 5 - 2329 + 2332 @@ -20987,27 +20966,27 @@ 1 2 - 1863 + 1865 2 3 - 23760 + 23787 3 4 - 3261 + 3264 4 6 - 2329 + 2332 7 16 - 1863 + 1865 @@ -21023,17 +21002,17 @@ 1 2 - 27487 + 27518 2 3 - 3727 + 3731 3 5 - 1863 + 1865 @@ -21049,17 +21028,17 @@ 1 2 - 27487 + 27518 2 3 - 4658 + 4664 4 5 - 931 + 932 @@ -21075,22 +21054,22 @@ 5 6 - 465 + 466 16 17 - 465 + 466 31 32 - 465 + 466 137 138 - 465 + 466 @@ -21106,17 +21085,17 @@ 4 5 - 465 + 466 7 8 - 931 + 932 68 69 - 465 + 466 @@ -21132,22 +21111,22 @@ 4 5 - 465 + 466 7 8 - 465 + 466 8 9 - 465 + 466 68 69 - 465 + 466 @@ -21157,15 +21136,15 @@ typedefbase - 1679336 + 1672769 id - 1679336 + 1672769 type_id - 790504 + 787413 @@ -21179,7 +21158,7 @@ 1 2 - 1679336 + 1672769 @@ -21195,22 +21174,22 @@ 1 2 - 615196 + 612790 2 3 - 82913 + 82588 3 6 - 61746 + 61505 6 5437 - 30648 + 30528 @@ -21220,19 +21199,19 @@ decltypes - 172128 + 166216 id - 17293 + 16699 expr - 172128 + 166216 base_type - 10324 + 9970 parentheses_would_change_meaning @@ -21250,37 +21229,37 @@ 1 2 - 5271 + 5090 2 3 - 6416 + 6195 3 5 - 1145 + 1105 5 12 - 1342 + 1296 12 18 - 1401 + 1353 18 46 - 1302 + 1258 51 740 - 414 + 400 @@ -21296,7 +21275,7 @@ 1 2 - 17293 + 16699 @@ -21312,7 +21291,7 @@ 1 2 - 17293 + 16699 @@ -21328,7 +21307,7 @@ 1 2 - 172128 + 166216 @@ -21344,7 +21323,7 @@ 1 2 - 172128 + 166216 @@ -21360,7 +21339,7 @@ 1 2 - 172128 + 166216 @@ -21376,17 +21355,17 @@ 1 2 - 7501 + 7244 2 3 - 2349 + 2268 4 149 - 473 + 457 @@ -21402,37 +21381,37 @@ 1 2 - 750 + 724 2 3 - 6356 + 6138 3 4 - 355 + 343 4 5 - 1006 + 972 5 7 - 789 + 762 7 32 - 829 + 800 32 3888 - 236 + 228 @@ -21448,7 +21427,7 @@ 1 2 - 10324 + 9970 @@ -21506,19 +21485,19 @@ usertypes - 5224568 + 5229957 id - 5224568 + 5229957 name - 1349703 + 1351216 kind - 5124 + 5130 @@ -21532,7 +21511,7 @@ 1 2 - 5224568 + 5229957 @@ -21548,7 +21527,7 @@ 1 2 - 5224568 + 5229957 @@ -21564,27 +21543,27 @@ 1 2 - 981644 + 982745 2 3 - 153280 + 153451 3 7 - 104360 + 104477 7 61 - 101565 + 101679 65 874 - 8852 + 8861 @@ -21600,17 +21579,17 @@ 1 2 - 1209468 + 1210823 2 3 - 124860 + 125000 3 7 - 15374 + 15391 @@ -21626,57 +21605,57 @@ 6 7 - 465 + 466 10 11 - 465 + 466 26 27 - 465 + 466 124 125 - 465 + 466 135 136 - 465 + 466 663 664 - 465 + 466 853 854 - 465 + 466 - 959 - 960 - 465 + 958 + 959 + 466 1752 1753 - 465 + 466 1842 1843 - 465 + 466 4844 4845 - 465 + 466 @@ -21692,57 +21671,57 @@ 5 6 - 465 + 466 6 7 - 465 + 466 14 15 - 465 + 466 30 31 - 465 + 466 43 44 - 465 + 466 125 126 - 465 + 466 267 268 - 465 + 466 371 372 - 465 + 466 438 439 - 465 + 466 739 740 - 465 + 466 1200 1201 - 465 + 466 @@ -21752,19 +21731,19 @@ usertypesize - 1704251 + 1705694 id - 1704251 + 1705694 size - 13511 + 13526 alignment - 2329 + 2332 @@ -21778,7 +21757,7 @@ 1 2 - 1704251 + 1705694 @@ -21794,7 +21773,7 @@ 1 2 - 1704251 + 1705694 @@ -21810,47 +21789,47 @@ 1 2 - 3261 + 3264 2 3 - 4193 + 4197 3 4 - 465 + 466 4 5 - 931 + 932 6 8 - 931 + 932 9 15 - 931 + 932 37 84 - 931 + 932 92 163 - 931 + 932 740 - 2473 - 931 + 2472 + 932 @@ -21866,17 +21845,17 @@ 1 2 - 10249 + 10261 2 3 - 2795 + 2798 3 4 - 465 + 466 @@ -21892,27 +21871,27 @@ 2 3 - 465 + 466 6 7 - 465 + 466 184 185 - 465 + 466 254 255 - 465 + 466 - 3212 - 3213 - 465 + 3211 + 3212 + 466 @@ -21928,27 +21907,27 @@ 1 2 - 465 + 466 2 3 - 465 + 466 3 4 - 465 + 466 9 10 - 465 + 466 22 23 - 465 + 466 @@ -21958,22 +21937,22 @@ usertype_final - 9490 + 9420 id - 9490 + 9420 usertype_uuid - 36638 + 36639 id - 36638 + 36639 uuid @@ -21991,7 +21970,7 @@ 1 2 - 36638 + 36639 @@ -22007,7 +21986,7 @@ 1 2 - 35889 + 35890 2 @@ -22022,19 +22001,19 @@ mangled_name - 9467492 + 9477636 id - 9467492 + 9477636 mangled_name - 6441025 + 6448244 is_complete - 465 + 466 @@ -22048,7 +22027,7 @@ 1 2 - 9467492 + 9477636 @@ -22064,7 +22043,7 @@ 1 2 - 9467492 + 9477636 @@ -22080,12 +22059,12 @@ 1 2 - 6160555 + 6167459 2 874 - 280469 + 280784 @@ -22101,7 +22080,7 @@ 1 2 - 6441025 + 6448244 @@ -22115,9 +22094,9 @@ 12 - 20321 - 20322 - 465 + 20320 + 20321 + 466 @@ -22133,7 +22112,7 @@ 13825 13826 - 465 + 466 @@ -22143,59 +22122,59 @@ is_pod_class - 532834 + 530716 id - 532834 + 530716 is_standard_layout_class - 1252796 + 1253734 id - 1252796 + 1253734 is_complete - 1643684 + 1645060 id - 1643684 + 1645060 is_class_template - 397410 + 397855 id - 397410 + 397855 class_instantiation - 1087869 + 1088622 to - 1087869 + 1088622 from - 168188 + 168377 @@ -22209,7 +22188,7 @@ 1 2 - 1087869 + 1088622 @@ -22225,47 +22204,47 @@ 1 2 - 59634 + 59701 2 3 - 29351 + 29384 3 4 - 15840 + 15858 4 5 - 13045 + 13059 5 6 - 9783 + 9794 6 10 - 12579 + 12593 10 16 - 13045 + 13059 16 70 - 13511 + 13526 70 84 - 1397 + 1399 @@ -22275,19 +22254,19 @@ class_template_argument - 2870306 + 2859038 type_id - 1310002 + 1304835 index - 1258 + 1253 arg_type - 836511 + 833229 @@ -22301,27 +22280,27 @@ 1 2 - 538743 + 536592 2 3 - 397645 + 396090 3 4 - 230325 + 229424 4 7 - 119796 + 119328 7 113 - 23492 + 23400 @@ -22337,22 +22316,22 @@ 1 2 - 565268 + 563013 2 3 - 408835 + 407236 3 4 - 243705 + 242752 4 113 - 92192 + 91832 @@ -22373,31 +22352,31 @@ 2 3 - 797 + 794 3 26 - 101 + 100 29 64 - 101 + 100 69 411 - 101 + 100 592 8901 - 101 + 100 13095 - 114270 + 114267 44 @@ -22419,31 +22398,31 @@ 2 3 - 797 + 794 3 14 - 112 + 111 14 26 - 101 + 100 28 145 - 101 + 100 195 3469 - 101 + 100 10524 - 39739 + 39738 33 @@ -22460,27 +22439,27 @@ 1 2 - 520779 + 518731 2 3 - 173600 + 172921 3 4 - 51084 + 50884 4 10 - 63768 + 63519 10 10265 - 27278 + 27171 @@ -22496,17 +22475,17 @@ 1 2 - 737319 + 734424 2 3 - 80946 + 80630 3 22 - 18245 + 18174 @@ -22516,19 +22495,19 @@ class_template_argument_value - 494316 + 494870 type_id - 304230 + 304571 index - 1863 + 1865 arg_value - 494316 + 494870 @@ -22542,17 +22521,17 @@ 1 2 - 249254 + 249534 2 3 - 53112 + 53171 3 4 - 1863 + 1865 @@ -22568,22 +22547,22 @@ 1 2 - 189154 + 189366 2 3 - 81066 + 81156 3 4 - 12113 + 12126 4 9 - 21897 + 21921 @@ -22599,22 +22578,22 @@ 18 19 - 465 + 466 92 93 - 465 + 466 293 294 - 465 + 466 372 373 - 465 + 466 @@ -22630,22 +22609,22 @@ 19 20 - 465 + 466 124 125 - 465 + 466 409 410 - 465 + 466 509 510 - 465 + 466 @@ -22661,7 +22640,7 @@ 1 2 - 494316 + 494870 @@ -22677,7 +22656,7 @@ 1 2 - 494316 + 494870 @@ -22687,15 +22666,15 @@ is_proxy_class_for - 62896 + 62966 id - 62896 + 62966 templ_param_id - 62896 + 62966 @@ -22709,7 +22688,7 @@ 1 2 - 62896 + 62966 @@ -22725,7 +22704,7 @@ 1 2 - 62896 + 62966 @@ -22735,19 +22714,19 @@ type_mentions - 4023226 + 4029370 id - 4023226 + 4029370 type_id - 197911 + 198214 location - 3989755 + 3995848 kind @@ -22765,7 +22744,7 @@ 1 2 - 4023226 + 4029370 @@ -22781,7 +22760,7 @@ 1 2 - 4023226 + 4029370 @@ -22797,7 +22776,7 @@ 1 2 - 4023226 + 4029370 @@ -22813,42 +22792,42 @@ 1 2 - 97459 + 97608 2 3 - 21702 + 21735 3 4 - 8218 + 8230 4 5 - 10771 + 10787 5 7 - 14361 + 14383 7 12 - 15837 + 15861 12 27 - 15159 + 15182 27 8555 - 14401 + 14423 @@ -22864,42 +22843,42 @@ 1 2 - 97459 + 97608 2 3 - 21702 + 21735 3 4 - 8218 + 8230 4 5 - 10771 + 10787 5 7 - 14361 + 14383 7 12 - 15837 + 15861 12 27 - 15159 + 15182 27 8555 - 14401 + 14423 @@ -22915,7 +22894,7 @@ 1 2 - 197911 + 198214 @@ -22931,12 +22910,12 @@ 1 2 - 3956284 + 3962326 2 3 - 33470 + 33521 @@ -22952,12 +22931,12 @@ 1 2 - 3956284 + 3962326 2 3 - 33470 + 33521 @@ -22973,7 +22952,7 @@ 1 2 - 3989755 + 3995848 @@ -23031,26 +23010,26 @@ is_function_template - 1400020 + 1401589 id - 1400020 + 1401589 function_instantiation - 904114 + 894870 to - 904114 + 894870 from - 145768 + 144256 @@ -23064,7 +23043,7 @@ 1 2 - 904114 + 894870 @@ -23080,27 +23059,27 @@ 1 2 - 101070 + 100033 2 3 - 14383 + 14230 3 6 - 11992 + 11864 6 21 - 12027 + 11899 22 - 869 - 6294 + 870 + 6228 @@ -23110,19 +23089,19 @@ function_template_argument - 2335210 + 2310645 function_id - 1333998 + 1319951 index - 562 + 556 arg_type - 304055 + 300865 @@ -23136,22 +23115,22 @@ 1 2 - 680767 + 673580 2 3 - 394154 + 390007 3 4 - 188531 + 186566 4 15 - 70545 + 69797 @@ -23167,22 +23146,22 @@ 1 2 - 698351 + 690977 2 3 - 404036 + 399784 3 4 - 168415 + 166664 4 9 - 63195 + 62525 @@ -23198,57 +23177,57 @@ 1 2 - 211 + 208 7 8 - 35 + 34 35 36 - 35 + 34 108 109 - 35 + 34 164 165 - 35 + 34 294 295 - 35 + 34 849 850 - 35 + 34 - 3293 - 3294 - 35 + 3294 + 3295 + 34 - 8740 - 8741 - 35 + 8741 + 8742 + 34 - 17935 - 17936 - 35 + 17936 + 17937 + 34 - 34972 - 34973 - 35 + 34975 + 34976 + 34 @@ -23264,57 +23243,57 @@ 1 2 - 211 + 208 3 4 - 35 + 34 11 12 - 35 + 34 22 23 - 35 + 34 30 31 - 35 + 34 61 62 - 35 + 34 134 135 - 35 + 34 453 454 - 35 + 34 1126 1127 - 35 + 34 2397 2398 - 35 + 34 - 5837 - 5838 - 35 + 5838 + 5839 + 34 @@ -23330,32 +23309,32 @@ 1 2 - 186245 + 184304 2 3 - 44521 + 44049 3 5 - 23421 + 23172 5 16 - 23456 + 23207 16 107 - 22964 + 22720 108 957 - 3446 + 3409 @@ -23371,17 +23350,17 @@ 1 2 - 273987 + 271116 2 4 - 25953 + 25678 4 17 - 4114 + 4070 @@ -23391,19 +23370,19 @@ function_template_argument_value - 362328 + 358553 function_id - 194509 + 192516 index - 562 + 556 arg_value - 359690 + 355944 @@ -23417,12 +23396,12 @@ 1 2 - 185155 + 183260 2 8 - 9354 + 9255 @@ -23438,17 +23417,17 @@ 1 2 - 177735 + 175919 2 31 - 15262 + 15100 32 97 - 1512 + 1496 @@ -23464,52 +23443,52 @@ 1 2 - 211 + 208 2 3 - 70 + 69 11 12 - 35 + 34 26 27 - 35 + 34 94 95 - 35 + 34 314 315 - 35 + 34 844 845 - 35 + 34 - 992 - 993 - 35 + 994 + 995 + 34 1187 1188 - 35 + 34 2397 2398 - 35 + 34 @@ -23525,52 +23504,52 @@ 1 2 - 211 + 208 2 3 - 70 + 69 60 61 - 35 + 34 80 81 - 35 + 34 141 142 - 35 + 34 533 534 - 35 + 34 - 1610 - 1611 - 35 + 1612 + 1613 + 34 1821 1822 - 35 + 34 2202 2203 - 35 + 34 3771 3772 - 35 + 34 @@ -23586,12 +23565,12 @@ 1 2 - 357052 + 353334 2 3 - 2637 + 2609 @@ -23607,7 +23586,7 @@ 1 2 - 359690 + 355944 @@ -23617,26 +23596,26 @@ is_variable_template - 47349 + 46998 id - 47349 + 46998 variable_instantiation - 172502 + 171327 to - 172502 + 171327 from - 25864 + 25673 @@ -23650,7 +23629,7 @@ 1 2 - 172502 + 171327 @@ -23666,42 +23645,42 @@ 1 2 - 13871 + 13768 2 3 - 2607 + 2588 3 4 - 1251 + 1242 4 6 - 1877 + 1863 6 8 - 1355 + 1345 8 12 - 2190 + 2173 12 38 - 1981 + 1966 46 - 277 - 730 + 278 + 724 @@ -23711,19 +23690,19 @@ variable_template_argument - 310587 + 308493 variable_id - 163324 + 162217 index - 1772 + 1759 arg_type - 171146 + 170085 @@ -23737,22 +23716,22 @@ 1 2 - 83643 + 83023 2 3 - 50791 + 50518 3 4 - 18772 + 18633 4 17 - 10116 + 10041 @@ -23768,22 +23747,22 @@ 1 2 - 88336 + 87682 2 3 - 52042 + 51760 3 4 - 13662 + 13561 4 17 - 9282 + 9213 @@ -23799,47 +23778,47 @@ 9 10 - 104 + 103 19 20 - 625 + 621 26 27 - 417 + 414 47 48 - 104 + 103 93 94 - 104 + 103 185 186 - 104 + 103 - 547 - 548 - 104 + 548 + 549 + 103 - 626 - 627 - 104 + 627 + 628 + 103 1253 1254 - 104 + 103 @@ -23855,52 +23834,52 @@ 1 2 - 104 + 103 10 11 - 417 + 414 11 12 - 208 + 207 12 13 - 417 + 414 29 30 - 104 + 103 48 49 - 104 + 103 130 131 - 104 + 103 - 375 - 376 - 104 + 376 + 377 + 103 - 402 - 403 - 104 + 403 + 404 + 103 743 744 - 104 + 103 @@ -23916,22 +23895,22 @@ 1 2 - 137668 + 136855 2 3 - 19502 + 19358 3 24 - 12932 + 12836 24 110 - 1042 + 1035 @@ -23947,17 +23926,17 @@ 1 2 - 154146 + 153211 2 3 - 14914 + 14803 3 6 - 2085 + 2070 @@ -23967,19 +23946,19 @@ variable_template_argument_value - 11889 + 11801 variable_id - 7822 + 7764 index - 417 + 414 arg_value - 11889 + 11801 @@ -23993,12 +23972,12 @@ 1 2 - 7404 + 7350 2 3 - 417 + 414 @@ -24014,17 +23993,17 @@ 1 2 - 4380 + 4347 2 3 - 3128 + 3105 4 5 - 312 + 310 @@ -24040,22 +24019,22 @@ 4 5 - 104 + 103 19 20 - 104 + 103 26 27 - 104 + 103 30 31 - 104 + 103 @@ -24071,22 +24050,22 @@ 7 8 - 104 + 103 28 29 - 104 + 103 38 39 - 104 + 103 41 42 - 104 + 103 @@ -24102,7 +24081,7 @@ 1 2 - 11889 + 11801 @@ -24118,7 +24097,7 @@ 1 2 - 11889 + 11801 @@ -24128,15 +24107,15 @@ routinetypes - 545338 + 538161 id - 545338 + 538161 return_type - 284819 + 280406 @@ -24150,7 +24129,7 @@ 1 2 - 545338 + 538161 @@ -24166,17 +24145,17 @@ 1 2 - 248175 + 244220 2 3 - 21276 + 20946 3 - 3594 - 15368 + 3595 + 15239 @@ -24186,19 +24165,19 @@ routinetypeargs - 982110 + 982278 routine - 423034 + 423042 index - 7920 + 7929 type_id - 226425 + 226679 @@ -24212,27 +24191,27 @@ 1 2 - 152348 + 152519 2 3 - 134178 + 133862 3 4 - 63361 + 63432 4 5 - 45657 + 45709 5 18 - 27487 + 27518 @@ -24248,27 +24227,27 @@ 1 2 - 182165 + 182369 2 3 - 133712 + 133395 3 4 - 58703 + 58768 4 5 - 33544 + 33582 5 11 - 14908 + 14925 @@ -24284,67 +24263,67 @@ 2 3 - 931 + 932 4 5 - 465 + 466 6 7 - 465 + 466 8 9 - 931 + 932 9 10 - 465 + 466 10 11 - 1397 + 1399 13 14 - 465 + 466 28 29 - 465 + 466 59 60 - 465 + 466 157 158 - 465 + 466 293 294 - 465 + 466 - 581 - 582 - 465 + 580 + 581 + 466 - 908 - 909 - 465 + 907 + 908 + 466 @@ -24360,57 +24339,57 @@ 1 2 - 931 + 932 3 4 - 931 + 932 4 5 - 1397 + 1399 5 6 - 931 + 932 6 7 - 931 + 932 10 11 - 465 + 466 14 15 - 465 + 466 47 48 - 465 + 466 90 91 - 465 + 466 176 177 - 465 + 466 347 348 - 465 + 466 @@ -24426,27 +24405,27 @@ 1 2 - 146291 + 146455 2 3 - 30749 + 30783 3 5 - 16772 + 16791 5 12 - 18169 + 18190 12 - 111 - 14442 + 110 + 14458 @@ -24462,22 +24441,22 @@ 1 2 - 172381 + 172575 2 3 - 30749 + 30783 3 6 - 18635 + 18656 6 14 - 4658 + 4664 @@ -24487,19 +24466,19 @@ ptrtomembers - 37737 + 37779 id - 37737 + 37779 type_id - 37737 + 37779 class_id - 15374 + 15391 @@ -24513,7 +24492,7 @@ 1 2 - 37737 + 37779 @@ -24529,7 +24508,7 @@ 1 2 - 37737 + 37779 @@ -24545,7 +24524,7 @@ 1 2 - 37737 + 37779 @@ -24561,7 +24540,7 @@ 1 2 - 37737 + 37779 @@ -24577,17 +24556,17 @@ 1 2 - 13511 + 13526 8 9 - 1397 + 1399 28 29 - 465 + 466 @@ -24603,17 +24582,17 @@ 1 2 - 13511 + 13526 8 9 - 1397 + 1399 28 29 - 465 + 466 @@ -24623,15 +24602,15 @@ specifiers - 24692 + 24720 id - 24692 + 24720 str - 24692 + 24720 @@ -24645,7 +24624,7 @@ 1 2 - 24692 + 24720 @@ -24661,7 +24640,7 @@ 1 2 - 24692 + 24720 @@ -24671,15 +24650,15 @@ typespecifiers - 1291000 + 1291048 type_id - 1272830 + 1272857 spec_id - 3727 + 3731 @@ -24693,12 +24672,12 @@ 1 2 - 1254660 + 1254667 2 3 - 18169 + 18190 @@ -24714,42 +24693,42 @@ 8 9 - 465 + 466 36 37 - 465 + 466 51 52 - 465 + 466 86 87 - 465 + 466 105 106 - 465 + 466 219 220 - 465 + 466 221 222 - 465 + 466 - 2045 - 2046 - 465 + 2042 + 2043 + 466 @@ -24759,15 +24738,15 @@ funspecifiers - 12739754 + 12607036 func_id - 3895228 + 3854601 spec_id - 703 + 695 @@ -24781,27 +24760,27 @@ 1 2 - 314078 + 310746 2 3 - 545865 + 540214 3 4 - 1145748 + 1133732 4 5 - 1641079 + 1624017 5 8 - 248456 + 245890 @@ -24817,97 +24796,97 @@ 13 14 - 70 + 69 98 99 - 35 + 34 202 203 - 35 + 34 296 297 - 35 + 34 304 305 - 35 + 34 572 573 - 35 + 34 709 710 - 35 + 34 1599 1600 - 35 + 34 1646 1647 - 35 + 34 3782 3783 - 35 + 34 3923 3924 - 35 + 34 5095 5096 - 35 + 34 - 6822 - 6823 - 35 + 6823 + 6824 + 34 - 9687 - 9688 - 35 + 9692 + 9693 + 34 - 12226 - 12227 - 35 + 12228 + 12229 + 34 - 50649 - 50650 - 35 + 50664 + 50665 + 34 - 77765 - 77766 - 35 + 77775 + 77776 + 34 - 89259 - 89260 - 35 + 89276 + 89277 + 34 - 97602 - 97603 - 35 + 97622 + 97623 + 34 @@ -24917,15 +24896,15 @@ varspecifiers - 2241430 + 2243942 var_id - 1222513 + 1223883 spec_id - 3727 + 3731 @@ -24939,22 +24918,22 @@ 1 2 - 728662 + 729479 2 3 - 202199 + 202425 3 4 - 58237 + 58302 4 5 - 233414 + 233675 @@ -24970,42 +24949,42 @@ 112 113 - 465 + 466 315 316 - 465 + 466 416 417 - 465 + 466 514 515 - 465 + 466 646 647 - 465 + 466 686 687 - 465 + 466 700 701 - 465 + 466 1422 1423 - 465 + 466 @@ -25015,27 +24994,27 @@ attributes - 735689 + 729824 id - 735689 + 729824 kind - 312 + 310 name - 1668 + 1656 name_space - 208 + 207 location - 483193 + 479613 @@ -25049,7 +25028,7 @@ 1 2 - 735689 + 729824 @@ -25065,7 +25044,7 @@ 1 2 - 735689 + 729824 @@ -25081,7 +25060,7 @@ 1 2 - 735689 + 729824 @@ -25097,7 +25076,7 @@ 1 2 - 735689 + 729824 @@ -25113,17 +25092,17 @@ 5 6 - 104 + 103 2332 2333 - 104 + 103 - 4717 - 4718 - 104 + 4713 + 4714 + 103 @@ -25139,17 +25118,17 @@ 1 2 - 104 + 103 6 7 - 104 + 103 11 12 - 104 + 103 @@ -25165,12 +25144,12 @@ 1 2 - 208 + 207 2 3 - 104 + 103 @@ -25186,17 +25165,17 @@ 2 3 - 104 + 103 2057 2058 - 104 + 103 2574 2575 - 104 + 103 @@ -25212,72 +25191,72 @@ 1 2 - 208 + 310 2 3 - 104 + 103 4 5 - 104 + 103 5 6 - 208 + 103 11 12 - 104 + 103 14 15 - 104 + 103 16 17 - 104 + 103 18 19 - 104 + 103 24 25 - 104 + 103 86 87 - 104 + 103 115 116 - 104 + 103 1048 1049 - 104 + 103 1760 1761 - 104 + 103 3944 3945 - 104 + 103 @@ -25293,12 +25272,12 @@ 1 2 - 1460 + 1449 2 3 - 208 + 207 @@ -25314,7 +25293,7 @@ 1 2 - 1668 + 1656 @@ -25330,67 +25309,67 @@ 1 2 - 312 + 310 2 3 - 208 + 207 4 5 - 104 + 103 6 7 - 104 + 103 8 9 - 104 + 103 9 10 - 104 + 103 14 15 - 104 + 103 18 19 - 104 + 103 59 60 - 104 + 103 72 73 - 104 + 103 333 334 - 104 + 103 1756 1757 - 104 + 103 2388 2389 - 104 + 103 @@ -25404,14 +25383,14 @@ 12 - 23 - 24 - 104 + 19 + 20 + 103 7031 7032 - 104 + 103 @@ -25427,12 +25406,12 @@ 1 2 - 104 + 103 3 4 - 104 + 103 @@ -25448,12 +25427,12 @@ 2 3 - 104 + 103 14 15 - 104 + 103 @@ -25469,12 +25448,12 @@ 9 10 - 104 + 103 4624 4625 - 104 + 103 @@ -25490,17 +25469,17 @@ 1 2 - 425623 + 422573 2 3 - 36607 + 36335 3 201 - 20963 + 20704 @@ -25516,7 +25495,7 @@ 1 2 - 483193 + 479613 @@ -25532,12 +25511,12 @@ 1 2 - 478917 + 475369 2 3 - 4276 + 4244 @@ -25553,7 +25532,7 @@ 1 2 - 483193 + 479613 @@ -25563,27 +25542,27 @@ attribute_args - 409523 + 409982 id - 409523 + 409982 kind - 1397 + 1399 attribute - 297708 + 298041 index - 1397 + 1399 location - 327059 + 327426 @@ -25597,7 +25576,7 @@ 1 2 - 409523 + 409982 @@ -25613,7 +25592,7 @@ 1 2 - 409523 + 409982 @@ -25629,7 +25608,7 @@ 1 2 - 409523 + 409982 @@ -25645,7 +25624,7 @@ 1 2 - 409523 + 409982 @@ -25661,17 +25640,17 @@ 1 2 - 465 + 466 84 85 - 465 + 466 794 795 - 465 + 466 @@ -25687,17 +25666,17 @@ 1 2 - 465 + 466 84 85 - 465 + 466 606 607 - 465 + 466 @@ -25713,12 +25692,12 @@ 1 2 - 931 + 932 3 4 - 465 + 466 @@ -25734,17 +25713,17 @@ 1 2 - 465 + 466 54 55 - 465 + 466 674 675 - 465 + 466 @@ -25760,17 +25739,17 @@ 1 2 - 215710 + 215952 2 3 - 52180 + 52238 3 4 - 29817 + 29850 @@ -25786,12 +25765,12 @@ 1 2 - 273481 + 273788 2 3 - 24226 + 24253 @@ -25807,17 +25786,17 @@ 1 2 - 215710 + 215952 2 3 - 52180 + 52238 3 4 - 29817 + 29850 @@ -25833,17 +25812,17 @@ 1 2 - 215710 + 215952 2 3 - 52180 + 52238 3 4 - 29817 + 29850 @@ -25859,17 +25838,17 @@ 64 65 - 465 + 466 176 177 - 465 + 466 639 640 - 465 + 466 @@ -25885,12 +25864,12 @@ 1 2 - 931 + 932 3 4 - 465 + 466 @@ -25906,17 +25885,17 @@ 64 65 - 465 + 466 176 177 - 465 + 466 639 640 - 465 + 466 @@ -25932,17 +25911,17 @@ 34 35 - 465 + 466 140 141 - 465 + 466 528 529 - 465 + 466 @@ -25958,22 +25937,22 @@ 1 2 - 278606 + 278918 2 3 - 23294 + 23320 3 9 - 24692 + 24720 17 18 - 465 + 466 @@ -25989,12 +25968,12 @@ 1 2 - 314480 + 314832 2 3 - 12579 + 12593 @@ -26010,22 +25989,22 @@ 1 2 - 278606 + 278918 2 3 - 23294 + 23320 3 9 - 24692 + 24720 17 18 - 465 + 466 @@ -26041,7 +26020,7 @@ 1 2 - 327059 + 327426 @@ -26051,15 +26030,15 @@ attribute_arg_value - 39135 + 39179 arg - 39135 + 39179 value - 15840 + 15858 @@ -26073,7 +26052,7 @@ 1 2 - 39135 + 39179 @@ -26089,12 +26068,12 @@ 1 2 - 14442 + 14458 2 34 - 1397 + 1399 @@ -26104,15 +26083,15 @@ attribute_arg_type - 465 + 466 arg - 465 + 466 type_id - 465 + 466 @@ -26126,7 +26105,7 @@ 1 2 - 465 + 466 @@ -26142,7 +26121,7 @@ 1 2 - 465 + 466 @@ -26152,15 +26131,15 @@ attribute_arg_constant - 369922 + 370336 arg - 369922 + 370336 constant - 369922 + 370336 @@ -26174,7 +26153,7 @@ 1 2 - 369922 + 370336 @@ -26190,7 +26169,7 @@ 1 2 - 369922 + 370336 @@ -26301,15 +26280,15 @@ typeattributes - 84999 + 84369 type_id - 62159 + 61698 spec_id - 84999 + 84369 @@ -26323,17 +26302,17 @@ 1 2 - 56214 + 55797 2 4 - 4276 + 4244 12 13 - 1668 + 1656 @@ -26349,7 +26328,7 @@ 1 2 - 84999 + 84369 @@ -26359,15 +26338,15 @@ funcattributes - 650858 + 651587 func_id - 442602 + 443098 spec_id - 650858 + 651587 @@ -26381,22 +26360,22 @@ 1 2 - 334048 + 334422 2 3 - 65225 + 65298 3 6 - 34942 + 34981 6 9 - 8386 + 8395 @@ -26412,7 +26391,7 @@ 1 2 - 650858 + 651587 @@ -26480,15 +26459,15 @@ stmtattributes - 977 + 973 stmt_id - 977 + 973 spec_id - 977 + 973 @@ -26502,7 +26481,7 @@ 1 2 - 977 + 973 @@ -26518,7 +26497,7 @@ 1 2 - 977 + 973 @@ -26528,15 +26507,15 @@ unspecifiedtype - 10144906 + 10144615 type_id - 10144906 + 10144615 unspecified_type_id - 6818402 + 6817181 @@ -26550,7 +26529,7 @@ 1 2 - 10144906 + 10144615 @@ -26566,17 +26545,17 @@ 1 2 - 4585358 + 4584433 2 3 - 1995902 + 1995340 3 145 - 237141 + 237407 @@ -26586,19 +26565,19 @@ member - 4997440 + 4945084 parent - 646092 + 639377 index - 8791 + 8698 child - 4952285 + 4900409 @@ -26612,42 +26591,42 @@ 1 3 - 19271 + 19067 3 4 - 348050 + 344496 4 5 - 38226 + 37786 5 7 - 53032 + 52504 7 10 - 52750 + 52191 10 15 - 50148 + 49581 15 24 - 49445 + 48955 24 251 - 35167 + 34794 @@ -26663,42 +26642,42 @@ 1 3 - 19271 + 19067 3 4 - 347979 + 344427 4 5 - 38261 + 37821 5 7 - 53137 + 52608 7 10 - 53102 + 52539 10 15 - 49761 + 49198 15 24 - 49515 + 49024 24 255 - 35061 + 34689 @@ -26714,62 +26693,62 @@ 1 2 - 1406 + 1391 2 3 - 808 + 800 3 4 - 949 + 939 5 22 - 668 + 661 22 42 - 668 + 661 42 56 - 668 + 661 56 100 - 668 + 661 104 164 - 668 + 661 181 299 - 668 + 661 300 727 - 668 + 661 845 4002 - 668 + 661 4606 - 18041 - 281 + 18045 + 278 @@ -26785,62 +26764,62 @@ 1 2 - 808 + 800 2 3 - 879 + 869 3 4 - 1160 + 1148 4 15 - 668 + 661 16 35 - 738 + 730 36 55 - 668 + 661 57 93 - 738 + 730 97 135 - 668 + 661 140 256 - 668 + 661 268 612 - 668 + 661 619 2611 - 668 + 661 2770 - 18053 - 457 + 18057 + 452 @@ -26856,7 +26835,7 @@ 1 2 - 4952285 + 4900409 @@ -26872,12 +26851,12 @@ 1 2 - 4908502 + 4857090 2 8 - 43783 + 43318 @@ -26887,15 +26866,15 @@ enclosingfunction - 118347 + 117884 child - 118347 + 117884 parent - 67599 + 67335 @@ -26909,7 +26888,7 @@ 1 2 - 118347 + 117884 @@ -26925,22 +26904,22 @@ 1 2 - 35726 + 35587 2 3 - 20975 + 20893 3 4 - 5931 + 5908 4 45 - 4965 + 4946 @@ -26950,27 +26929,27 @@ derivations - 395209 + 391086 derivation - 395209 + 391086 sub - 374742 + 370836 index - 211 + 208 super - 204673 + 202501 location - 38086 + 37682 @@ -26984,7 +26963,7 @@ 1 2 - 395209 + 391086 @@ -27000,7 +26979,7 @@ 1 2 - 395209 + 391086 @@ -27016,7 +26995,7 @@ 1 2 - 395209 + 391086 @@ -27032,7 +27011,7 @@ 1 2 - 395209 + 391086 @@ -27048,12 +27027,12 @@ 1 2 - 359620 + 355874 2 7 - 15121 + 14961 @@ -27069,12 +27048,12 @@ 1 2 - 359620 + 355874 2 7 - 15121 + 14961 @@ -27090,12 +27069,12 @@ 1 2 - 359620 + 355874 2 7 - 15121 + 14961 @@ -27111,12 +27090,12 @@ 1 2 - 359620 + 355874 2 7 - 15121 + 14961 @@ -27132,22 +27111,22 @@ 25 26 - 105 + 104 77 78 - 35 + 34 430 431 - 35 + 34 - 10656 - 10657 - 35 + 10658 + 10659 + 34 @@ -27163,22 +27142,22 @@ 25 26 - 105 + 104 77 78 - 35 + 34 430 431 - 35 + 34 - 10656 - 10657 - 35 + 10658 + 10659 + 34 @@ -27194,27 +27173,27 @@ 23 24 - 35 + 34 25 26 - 70 + 69 35 36 - 35 + 34 261 262 - 35 + 34 5465 5466 - 35 + 34 @@ -27230,22 +27209,22 @@ 1 2 - 105 + 104 9 10 - 35 + 34 66 67 - 35 + 34 1005 1006 - 35 + 34 @@ -27261,12 +27240,12 @@ 1 2 - 197217 + 195125 2 - 1518 - 7455 + 1519 + 7376 @@ -27282,12 +27261,12 @@ 1 2 - 197217 + 195125 2 - 1518 - 7455 + 1519 + 7376 @@ -27303,12 +27282,12 @@ 1 2 - 204216 + 202049 2 4 - 457 + 452 @@ -27324,12 +27303,12 @@ 1 2 - 200980 + 198848 2 108 - 3692 + 3653 @@ -27345,27 +27324,27 @@ 1 2 - 28309 + 28009 2 5 - 3235 + 3201 5 15 - 2918 + 2887 15 134 - 2883 + 2853 136 476 - 738 + 730 @@ -27381,27 +27360,27 @@ 1 2 - 28309 + 28009 2 5 - 3235 + 3201 5 15 - 2918 + 2887 15 134 - 2883 + 2853 136 476 - 738 + 730 @@ -27417,7 +27396,7 @@ 1 2 - 38086 + 37682 @@ -27433,22 +27412,22 @@ 1 2 - 30700 + 30375 2 5 - 3376 + 3340 5 45 - 2883 + 2853 54 415 - 1125 + 1113 @@ -27458,15 +27437,15 @@ derspecifiers - 397108 + 392965 der_id - 394822 + 390703 spec_id - 140 + 139 @@ -27480,12 +27459,12 @@ 1 2 - 392536 + 388441 2 3 - 2285 + 2261 @@ -27501,22 +27480,22 @@ 65 66 - 35 + 34 93 94 - 35 + 34 1127 1128 - 35 + 34 - 10007 - 10008 - 35 + 10009 + 10010 + 34 @@ -27526,15 +27505,15 @@ direct_base_offsets - 365985 + 362172 der_id - 365985 + 362172 offset - 351 + 347 @@ -27548,7 +27527,7 @@ 1 2 - 365985 + 362172 @@ -27564,32 +27543,32 @@ 1 2 - 35 + 34 2 3 - 105 + 104 3 4 - 70 + 69 4 5 - 70 + 69 85 86 - 35 + 34 - 10301 - 10302 - 35 + 10303 + 10304 + 34 @@ -27599,19 +27578,19 @@ virtual_base_offsets - 6471 + 6445 sub - 3572 + 3558 super - 494 + 492 offset - 247 + 246 @@ -27625,17 +27604,17 @@ 1 2 - 2808 + 2797 2 4 - 314 + 313 4 7 - 258 + 257 7 @@ -27656,17 +27635,17 @@ 1 2 - 3010 + 2999 2 4 - 303 + 302 4 8 - 258 + 257 @@ -27692,7 +27671,7 @@ 3 4 - 56 + 55 4 @@ -27743,7 +27722,7 @@ 1 2 - 280 + 279 2 @@ -27890,23 +27869,23 @@ frienddecls - 713754 + 706182 id - 713754 + 706182 type_id - 42306 + 41857 decl_id - 70053 + 69309 location - 6330 + 6262 @@ -27920,7 +27899,7 @@ 1 2 - 713754 + 706182 @@ -27936,7 +27915,7 @@ 1 2 - 713754 + 706182 @@ -27952,7 +27931,7 @@ 1 2 - 713754 + 706182 @@ -27968,47 +27947,47 @@ 1 2 - 6189 + 6123 2 3 - 13187 + 13047 3 6 - 2954 + 2922 6 10 - 3200 + 3166 10 17 - 3270 + 3235 17 24 - 3340 + 3305 25 36 - 3305 + 3270 37 55 - 3235 + 3201 55 103 - 3622 + 3583 @@ -28024,47 +28003,47 @@ 1 2 - 6189 + 6123 2 3 - 13187 + 13047 3 6 - 2954 + 2922 6 10 - 3200 + 3166 10 17 - 3270 + 3235 17 24 - 3340 + 3305 25 36 - 3305 + 3270 37 55 - 3235 + 3201 55 103 - 3622 + 3583 @@ -28080,12 +28059,12 @@ 1 2 - 40864 + 40430 2 13 - 1441 + 1426 @@ -28101,37 +28080,37 @@ 1 2 - 40407 + 39978 2 3 - 5872 + 5810 3 8 - 6013 + 5949 8 15 - 5415 + 5358 15 32 - 5275 + 5219 32 71 - 5275 + 5219 72 160 - 1793 + 1774 @@ -28147,37 +28126,37 @@ 1 2 - 40407 + 39978 2 3 - 5872 + 5810 3 8 - 6013 + 5949 8 15 - 5415 + 5358 15 32 - 5275 + 5219 32 71 - 5275 + 5219 72 160 - 1793 + 1774 @@ -28193,12 +28172,12 @@ 1 2 - 69384 + 68648 2 5 - 668 + 661 @@ -28214,12 +28193,12 @@ 1 2 - 5943 + 5880 2 20106 - 386 + 382 @@ -28235,12 +28214,12 @@ 1 2 - 6189 + 6123 2 1105 - 140 + 139 @@ -28256,12 +28235,12 @@ 1 2 - 5978 + 5915 2 1837 - 351 + 347 @@ -28271,19 +28250,19 @@ comments - 8751514 + 8686670 id - 8751514 + 8686670 contents - 3332400 + 3307709 location - 8751514 + 8686670 @@ -28297,7 +28276,7 @@ 1 2 - 8751514 + 8686670 @@ -28313,7 +28292,7 @@ 1 2 - 8751514 + 8686670 @@ -28329,17 +28308,17 @@ 1 2 - 3048408 + 3025820 2 7 - 250514 + 248657 7 32784 - 33478 + 33230 @@ -28355,17 +28334,17 @@ 1 2 - 3048408 + 3025820 2 7 - 250514 + 248657 7 32784 - 33478 + 33230 @@ -28381,7 +28360,7 @@ 1 2 - 8751514 + 8686670 @@ -28397,7 +28376,7 @@ 1 2 - 8751514 + 8686670 @@ -28407,15 +28386,15 @@ commentbinding - 3084703 + 3088160 id - 2440368 + 2443103 element - 3008296 + 3011668 @@ -28429,12 +28408,12 @@ 1 2 - 2363495 + 2366144 2 97 - 76873 + 76959 @@ -28450,12 +28429,12 @@ 1 2 - 2931889 + 2935175 2 3 - 76407 + 76492 @@ -28465,15 +28444,15 @@ exprconv - 7022968 + 7033432 converted - 7022968 + 7033432 conversion - 7022968 + 7033432 @@ -28487,7 +28466,7 @@ 1 2 - 7022968 + 7033432 @@ -28503,7 +28482,7 @@ 1 2 - 7022968 + 7033432 @@ -28513,30 +28492,30 @@ compgenerated - 9150058 + 9265823 id - 9150058 + 9265823 synthetic_destructor_call - 143878 + 471159 element - 111422 + 286813 i - 335 + 381 destructor_call - 143878 + 471159 @@ -28550,17 +28529,27 @@ 1 2 - 91779 + 190103 2 3 - 12950 + 50404 3 - 18 - 6692 + 4 + 21503 + + + 4 + 7 + 23238 + + + 7 + 20 + 1563 @@ -28576,17 +28565,27 @@ 1 2 - 91779 + 189912 2 3 - 12950 + 50537 3 - 18 - 6692 + 4 + 21503 + + + 4 + 7 + 23295 + + + 7 + 20 + 1563 @@ -28599,15 +28598,10 @@ 12 - - 1 - 2 - 19 - 2 3 - 59 + 19 3 @@ -28617,21 +28611,46 @@ 4 5 - 59 + 19 + + + 5 + 6 + 19 6 7 19 + + 7 + 8 + 19 + + + 10 + 11 + 19 + 11 12 19 - 20 - 21 + 16 + 17 + 19 + + + 18 + 19 + 19 + + + 26 + 27 19 @@ -28640,28 +28659,43 @@ 19 - 65 - 66 + 37 + 38 19 - 152 - 153 + 82 + 83 19 - 339 - 340 + 193 + 194 19 - 995 - 996 + 422 + 423 19 - 5644 - 5645 + 1301 + 1302 + 19 + + + 2429 + 2430 + 19 + + + 5068 + 5069 + 19 + + + 15013 + 15014 19 @@ -28675,15 +28709,10 @@ 12 - - 1 - 2 - 19 - 2 3 - 59 + 19 3 @@ -28693,21 +28722,46 @@ 4 5 - 59 + 19 + + + 5 + 6 + 19 6 7 19 + + 7 + 8 + 19 + + + 10 + 11 + 19 + 11 12 19 - 20 - 21 + 16 + 17 + 19 + + + 18 + 19 + 19 + + + 26 + 27 19 @@ -28716,28 +28770,43 @@ 19 - 65 - 66 + 37 + 38 19 - 152 - 153 + 82 + 83 19 - 339 - 340 + 193 + 194 19 - 995 - 996 + 422 + 423 19 - 5644 - 5645 + 1301 + 1302 + 19 + + + 2429 + 2430 + 19 + + + 5071 + 5072 + 19 + + + 15038 + 15039 19 @@ -28754,7 +28823,7 @@ 1 2 - 143878 + 471159 @@ -28770,7 +28839,7 @@ 1 2 - 143878 + 471159 @@ -28780,15 +28849,15 @@ namespaces - 12113 + 12126 id - 12113 + 12126 name - 9783 + 9794 @@ -28802,7 +28871,7 @@ 1 2 - 12113 + 12126 @@ -28818,17 +28887,17 @@ 1 2 - 8386 + 8395 2 3 - 465 + 466 3 4 - 931 + 932 @@ -28838,26 +28907,26 @@ namespace_inline - 1397 + 1399 id - 1397 + 1399 namespacembrs - 2383528 + 2385733 parentid - 10249 + 10261 memberid - 2383528 + 2385733 @@ -28871,52 +28940,52 @@ 1 2 - 1863 + 1865 2 4 - 931 + 932 4 5 - 931 + 932 5 7 - 931 + 932 7 8 - 931 + 932 8 12 - 931 + 932 17 30 - 931 + 932 43 47 - 931 + 932 52 143 - 931 + 932 258 - 4469 - 931 + 4468 + 932 @@ -28932,7 +29001,7 @@ 1 2 - 2383528 + 2385733 @@ -28942,19 +29011,19 @@ exprparents - 14185678 + 14207341 expr_id - 14185678 + 14207341 child_index - 14636 + 14659 parent_id - 9439823 + 9454239 @@ -28968,7 +29037,7 @@ 1 2 - 14185678 + 14207341 @@ -28984,7 +29053,7 @@ 1 2 - 14185678 + 14207341 @@ -29000,12 +29069,12 @@ 1 2 - 2816 + 2820 2 3 - 1110 + 1111 3 @@ -29015,22 +29084,22 @@ 4 5 - 6557 + 6567 5 8 - 1212 + 1214 8 11 - 1192 + 1194 11 53 - 1110 + 1111 56 @@ -29051,12 +29120,12 @@ 1 2 - 2816 + 2820 2 3 - 1110 + 1111 3 @@ -29066,22 +29135,22 @@ 4 5 - 6557 + 6567 5 8 - 1212 + 1214 8 11 - 1192 + 1194 11 53 - 1110 + 1111 56 @@ -29102,17 +29171,17 @@ 1 2 - 5401426 + 5409675 2 3 - 3701154 + 3706806 3 712 - 337242 + 337757 @@ -29128,17 +29197,17 @@ 1 2 - 5401426 + 5409675 2 3 - 3701154 + 3706806 3 712 - 337242 + 337757 @@ -29148,22 +29217,22 @@ expr_isload - 5203642 + 5170780 expr_id - 5203642 + 5170780 conversionkinds - 4221347 + 4221331 expr_id - 4221347 + 4221331 kind @@ -29181,7 +29250,7 @@ 1 2 - 4221347 + 4221331 @@ -29205,8 +29274,8 @@ 1 - 13929 - 13930 + 13928 + 13929 1 @@ -29220,8 +29289,8 @@ 1 - 4131269 - 4131270 + 4131254 + 4131255 1 @@ -29232,15 +29301,15 @@ iscall - 2958862 + 3183297 caller - 2958862 + 3183297 kind - 59 + 57 @@ -29254,7 +29323,7 @@ 1 2 - 2958862 + 3183297 @@ -29278,8 +29347,8 @@ 19 - 146089 - 146090 + 163193 + 163194 19 @@ -29290,15 +29359,15 @@ numtemplatearguments - 397495 + 393347 expr_id - 397495 + 393347 num - 316 + 313 @@ -29312,7 +29381,7 @@ 1 2 - 397495 + 393347 @@ -29328,37 +29397,37 @@ 1 2 - 105 + 104 4 5 - 35 + 34 20 21 - 35 + 34 101 102 - 35 + 34 229 230 - 35 + 34 248 249 - 35 + 34 - 10698 - 10699 - 35 + 10700 + 10701 + 34 @@ -29368,15 +29437,15 @@ specialnamequalifyingelements - 465 + 466 id - 465 + 466 name - 465 + 466 @@ -29390,7 +29459,7 @@ 1 2 - 465 + 466 @@ -29406,7 +29475,7 @@ 1 2 - 465 + 466 @@ -29416,23 +29485,23 @@ namequalifiers - 1570954 + 1516804 id - 1570954 + 1516804 qualifiableelement - 1570954 + 1516804 qualifyingelement - 101314 + 97777 location - 316244 + 305343 @@ -29446,7 +29515,7 @@ 1 2 - 1570954 + 1516804 @@ -29462,7 +29531,7 @@ 1 2 - 1570954 + 1516804 @@ -29478,7 +29547,7 @@ 1 2 - 1570954 + 1516804 @@ -29494,7 +29563,7 @@ 1 2 - 1570954 + 1516804 @@ -29510,7 +29579,7 @@ 1 2 - 1570954 + 1516804 @@ -29526,7 +29595,7 @@ 1 2 - 1570954 + 1516804 @@ -29542,27 +29611,27 @@ 1 2 - 60745 + 58601 2 3 - 23255 + 22457 3 5 - 9239 + 8921 5 92 - 7640 + 7377 96 - 21576 - 434 + 21572 + 419 @@ -29578,27 +29647,27 @@ 1 2 - 60745 + 58601 2 3 - 23255 + 22457 3 5 - 9239 + 8921 5 92 - 7640 + 7377 96 - 21576 - 434 + 21572 + 419 @@ -29614,22 +29683,22 @@ 1 2 - 66371 + 64035 2 3 - 21439 + 20703 3 5 - 8686 + 8388 5 7095 - 4817 + 4651 @@ -29645,32 +29714,32 @@ 1 2 - 104631 + 101018 2 3 - 29415 + 28385 3 4 - 46373 + 44780 4 6 - 14826 + 14316 6 7 - 98788 + 95394 7 790 - 22209 + 21446 @@ -29686,32 +29755,32 @@ 1 2 - 104631 + 101018 2 3 - 29415 + 28385 3 4 - 46373 + 44780 4 6 - 14826 + 14316 6 7 - 98788 + 95394 7 790 - 22209 + 21446 @@ -29727,22 +29796,22 @@ 1 2 - 142575 + 137659 2 3 - 57804 + 55799 3 4 - 106309 + 102658 4 143 - 9555 + 9226 @@ -29752,15 +29821,15 @@ varbind - 6020283 + 6029477 expr - 6020283 + 6029477 var - 767403 + 768575 @@ -29774,7 +29843,7 @@ 1 2 - 6020283 + 6029477 @@ -29790,52 +29859,52 @@ 1 2 - 126036 + 126229 2 3 - 137672 + 137882 3 4 - 106137 + 106299 4 5 - 85086 + 85216 5 6 - 61199 + 61292 6 7 - 48042 + 48115 7 9 - 59533 + 59624 9 13 - 59184 + 59274 13 28 - 58793 + 58883 28 5137 - 25717 + 25756 @@ -29845,15 +29914,15 @@ funbind - 2962929 + 3187262 expr - 2959178 + 3183583 fun - 532278 + 512661 @@ -29867,12 +29936,12 @@ 1 2 - 2955427 + 3179903 2 3 - 3750 + 3679 @@ -29888,32 +29957,32 @@ 1 2 - 328780 + 316152 2 3 - 81948 + 78084 3 4 - 31784 + 31455 4 7 - 47913 + 46210 7 - 158 - 39937 + 133 + 38451 - 159 - 4943 - 1914 + 133 + 4992 + 2306 @@ -29923,19 +29992,19 @@ expr_allocator - 46455 + 45963 expr - 46455 + 45963 func - 105 + 104 form - 35 + 34 @@ -29949,7 +30018,7 @@ 1 2 - 46455 + 45963 @@ -29965,7 +30034,7 @@ 1 2 - 46455 + 45963 @@ -29981,17 +30050,17 @@ 1 2 - 35 + 34 585 586 - 35 + 34 735 736 - 35 + 34 @@ -30007,7 +30076,7 @@ 1 2 - 105 + 104 @@ -30023,7 +30092,7 @@ 1321 1322 - 35 + 34 @@ -30039,7 +30108,7 @@ 3 4 - 35 + 34 @@ -30049,19 +30118,19 @@ expr_deallocator - 55212 + 54626 expr - 55212 + 54626 func - 105 + 104 form - 70 + 69 @@ -30075,7 +30144,7 @@ 1 2 - 55212 + 54626 @@ -30091,7 +30160,7 @@ 1 2 - 55212 + 54626 @@ -30107,17 +30176,17 @@ 1 2 - 35 + 34 722 723 - 35 + 34 847 848 - 35 + 34 @@ -30133,7 +30202,7 @@ 1 2 - 105 + 104 @@ -30149,12 +30218,12 @@ 722 723 - 35 + 34 848 849 - 35 + 34 @@ -30170,12 +30239,12 @@ 1 2 - 35 + 34 2 3 - 35 + 34 @@ -30185,26 +30254,26 @@ expr_cond_two_operand - 480 + 481 cond - 480 + 481 expr_cond_guard - 656298 + 657276 cond - 656298 + 657276 guard - 656298 + 657276 @@ -30218,7 +30287,7 @@ 1 2 - 656298 + 657276 @@ -30234,7 +30303,7 @@ 1 2 - 656298 + 657276 @@ -30244,15 +30313,15 @@ expr_cond_true - 656295 + 657273 cond - 656295 + 657273 true - 656295 + 657273 @@ -30266,7 +30335,7 @@ 1 2 - 656295 + 657273 @@ -30282,7 +30351,7 @@ 1 2 - 656295 + 657273 @@ -30292,15 +30361,15 @@ expr_cond_false - 656298 + 657276 cond - 656298 + 657276 false - 656298 + 657276 @@ -30314,7 +30383,7 @@ 1 2 - 656298 + 657276 @@ -30330,7 +30399,7 @@ 1 2 - 656298 + 657276 @@ -30340,15 +30409,15 @@ values - 10760930 + 10777325 id - 10760930 + 10777325 str - 87934 + 88068 @@ -30362,7 +30431,7 @@ 1 2 - 10760930 + 10777325 @@ -30378,27 +30447,27 @@ 1 2 - 59458 + 59548 2 3 - 12391 + 12410 3 6 - 6906 + 6916 6 56 - 6621 + 6631 57 - 452015 - 2557 + 452017 + 2561 @@ -30471,15 +30540,15 @@ valuebind - 11194506 + 11211571 val - 10760930 + 10777325 expr - 11194506 + 11211571 @@ -30493,12 +30562,12 @@ 1 2 - 10349865 + 10365623 2 7 - 411064 + 411701 @@ -30514,7 +30583,7 @@ 1 2 - 11194506 + 11211571 @@ -30524,15 +30593,15 @@ fieldoffsets - 1053150 + 1054758 id - 1053150 + 1054758 byteoffset - 22659 + 22694 bitoffset @@ -30550,7 +30619,7 @@ 1 2 - 1053150 + 1054758 @@ -30566,7 +30635,7 @@ 1 2 - 1053150 + 1054758 @@ -30582,37 +30651,37 @@ 1 2 - 13005 + 13025 2 3 - 1715 + 1718 3 5 - 1795 + 1797 5 12 - 1914 + 1917 12 35 - 1715 + 1718 35 205 - 1715 + 1718 244 5638 - 797 + 799 @@ -30628,12 +30697,12 @@ 1 2 - 21981 + 22014 2 9 - 678 + 679 @@ -30725,19 +30794,19 @@ bitfield - 20858 + 20704 id - 20858 + 20704 bits - 2607 + 2588 declared_bits - 2607 + 2588 @@ -30751,7 +30820,7 @@ 1 2 - 20858 + 20704 @@ -30767,7 +30836,7 @@ 1 2 - 20858 + 20704 @@ -30783,42 +30852,42 @@ 1 2 - 730 + 724 2 3 - 625 + 621 3 4 - 208 + 207 4 5 - 208 + 207 5 6 - 208 + 207 6 8 - 208 + 207 8 11 - 208 + 207 12 115 - 208 + 207 @@ -30834,7 +30903,7 @@ 1 2 - 2607 + 2588 @@ -30850,42 +30919,42 @@ 1 2 - 730 + 724 2 3 - 625 + 621 3 4 - 208 + 207 4 5 - 208 + 207 5 6 - 208 + 207 6 8 - 208 + 207 8 11 - 208 + 207 12 115 - 208 + 207 @@ -30901,7 +30970,7 @@ 1 2 - 2607 + 2588 @@ -30911,23 +30980,23 @@ initialisers - 1710236 + 1710241 init - 1710236 + 1710241 var - 719575 + 719566 expr - 1710236 + 1710241 location - 394516 + 394521 @@ -30941,7 +31010,7 @@ 1 2 - 1710236 + 1710241 @@ -30957,7 +31026,7 @@ 1 2 - 1710236 + 1710241 @@ -30973,7 +31042,7 @@ 1 2 - 1710236 + 1710241 @@ -30989,7 +31058,7 @@ 1 2 - 633831 + 633820 2 @@ -30999,7 +31068,7 @@ 16 25 - 57021 + 57022 @@ -31015,7 +31084,7 @@ 1 2 - 633831 + 633820 2 @@ -31025,7 +31094,7 @@ 16 25 - 57021 + 57022 @@ -31041,7 +31110,7 @@ 1 2 - 719569 + 719560 2 @@ -31062,7 +31131,7 @@ 1 2 - 1710236 + 1710241 @@ -31078,7 +31147,7 @@ 1 2 - 1710236 + 1710241 @@ -31094,7 +31163,7 @@ 1 2 - 1710236 + 1710241 @@ -31110,7 +31179,7 @@ 1 2 - 321600 + 321604 2 @@ -31120,7 +31189,7 @@ 3 15 - 30976 + 30977 15 @@ -31141,17 +31210,17 @@ 1 2 - 344483 + 344488 2 4 - 36086 + 36106 4 12073 - 13945 + 13927 @@ -31167,7 +31236,7 @@ 1 2 - 321600 + 321604 2 @@ -31177,7 +31246,7 @@ 3 15 - 30976 + 30977 15 @@ -31192,26 +31261,26 @@ braced_initialisers - 41639 + 41701 init - 41639 + 41701 expr_ancestor - 148162 + 475296 exp - 148162 + 475296 ancestor - 92668 + 269541 @@ -31225,7 +31294,7 @@ 1 2 - 148162 + 475296 @@ -31241,22 +31310,27 @@ 1 2 - 65069 + 165739 2 3 - 18359 + 54712 3 + 4 + 22152 + + + 4 6 - 7422 + 22132 6 26 - 1816 + 4804 @@ -31266,19 +31340,19 @@ exprs - 18360534 + 18388573 id - 18360534 + 18388573 kind - 1163 + 1165 location - 8475665 + 8488587 @@ -31292,7 +31366,7 @@ 1 2 - 18360534 + 18388573 @@ -31308,7 +31382,7 @@ 1 2 - 18360534 + 18388573 @@ -31383,7 +31457,7 @@ 63119 - 136808 + 136815 88 @@ -31486,22 +31560,22 @@ 1 2 - 7134774 + 7145568 2 3 - 661975 + 663069 3 18 - 637171 + 638140 18 71656 - 41744 + 41808 @@ -31517,17 +31591,65 @@ 1 2 - 7240687 + 7251643 2 3 - 617251 + 618277 3 32 - 617727 + 618666 + + + + + + + + + expr_reuse + 331632 + + + reuse + 331632 + + + original + 331632 + + + + + reuse + original + + + 12 + + + 1 + 2 + 331632 + + + + + + + original + reuse + + + 12 + + + 1 + 2 + 331632 @@ -31537,15 +31659,15 @@ expr_types - 18487847 + 18461112 id - 18356624 + 18330447 typeid - 1243492 + 1237209 value_category @@ -31563,12 +31685,12 @@ 1 2 - 18225401 + 18199782 2 3 - 131222 + 130664 @@ -31584,7 +31706,7 @@ 1 2 - 18356624 + 18330447 @@ -31600,42 +31722,42 @@ 1 2 - 450100 + 448184 2 3 - 258108 + 256965 3 4 - 103214 + 102788 4 5 - 84643 + 84133 5 8 - 111056 + 110196 8 14 - 99102 + 98435 14 42 - 94046 + 93511 42 - 125383 - 43220 + 125366 + 42995 @@ -31651,17 +31773,17 @@ 1 2 - 1074947 + 1069468 2 3 - 158085 + 157321 3 4 - 10459 + 10418 @@ -31675,18 +31797,18 @@ 12 - 14895 - 14896 + 14892 + 14893 11 - 372954 - 372955 + 372687 + 372688 11 - 1246055 - 1246056 + 1250400 + 1250401 11 @@ -31706,13 +31828,13 @@ 11 - 30879 - 30880 + 30862 + 30863 11 - 93014 - 93015 + 92891 + 92892 11 @@ -31723,15 +31845,15 @@ new_allocated_type - 47510 + 47006 expr - 47510 + 47006 type_id - 28098 + 27800 @@ -31745,7 +31867,7 @@ 1 2 - 47510 + 47006 @@ -31761,17 +31883,17 @@ 1 2 - 11745 + 11621 2 3 - 14875 + 14717 3 19 - 1477 + 1461 @@ -32866,15 +32988,15 @@ condition_decl_bind - 42306 + 40853 expr - 42306 + 40853 decl - 42306 + 40853 @@ -32888,7 +33010,7 @@ 1 2 - 42306 + 40853 @@ -32904,7 +33026,7 @@ 1 2 - 42306 + 40853 @@ -32914,15 +33036,15 @@ typeid_bind - 36362 + 35977 expr - 36362 + 35977 type_id - 16352 + 16179 @@ -32936,7 +33058,7 @@ 1 2 - 36362 + 35977 @@ -32952,12 +33074,12 @@ 1 2 - 15930 + 15761 3 328 - 422 + 417 @@ -32975,7 +33097,7 @@ type_id - 20096 + 20097 @@ -33005,7 +33127,7 @@ 1 2 - 19931 + 19932 2 @@ -33020,15 +33142,15 @@ sizeof_bind - 198892 + 199195 expr - 198892 + 199195 type_id - 8169 + 8181 @@ -33042,7 +33164,7 @@ 1 2 - 198892 + 199195 @@ -33058,22 +33180,22 @@ 1 2 - 2689 + 2693 2 3 - 2330 + 2333 3 4 - 776 + 777 4 5 - 739 + 740 5 @@ -33083,12 +33205,12 @@ 6 9 - 713 + 714 9 133 - 649 + 650 164 @@ -33151,19 +33273,19 @@ lambdas - 21431 + 21455 expr - 21431 + 21455 default_capture - 465 + 466 has_explicit_return_type - 465 + 466 @@ -33177,7 +33299,7 @@ 1 2 - 21431 + 21455 @@ -33193,7 +33315,7 @@ 1 2 - 21431 + 21455 @@ -33209,7 +33331,7 @@ 46 47 - 465 + 466 @@ -33225,7 +33347,7 @@ 1 2 - 465 + 466 @@ -33241,7 +33363,7 @@ 46 47 - 465 + 466 @@ -33257,7 +33379,7 @@ 1 2 - 465 + 466 @@ -33267,35 +33389,35 @@ lambda_capture - 27953 + 27985 id - 27953 + 27985 lambda - 20499 + 20522 index - 931 + 932 field - 27953 + 27985 captured_by_reference - 465 + 466 is_implicit - 465 + 466 location - 2795 + 2798 @@ -33309,7 +33431,7 @@ 1 2 - 27953 + 27985 @@ -33325,7 +33447,7 @@ 1 2 - 27953 + 27985 @@ -33341,7 +33463,7 @@ 1 2 - 27953 + 27985 @@ -33357,7 +33479,7 @@ 1 2 - 27953 + 27985 @@ -33373,7 +33495,7 @@ 1 2 - 27953 + 27985 @@ -33389,7 +33511,7 @@ 1 2 - 27953 + 27985 @@ -33405,12 +33527,12 @@ 1 2 - 13045 + 13059 2 3 - 7454 + 7462 @@ -33426,12 +33548,12 @@ 1 2 - 13045 + 13059 2 3 - 7454 + 7462 @@ -33447,12 +33569,12 @@ 1 2 - 13045 + 13059 2 3 - 7454 + 7462 @@ -33468,7 +33590,7 @@ 1 2 - 20499 + 20522 @@ -33484,7 +33606,7 @@ 1 2 - 20499 + 20522 @@ -33500,12 +33622,12 @@ 1 2 - 13045 + 13059 2 3 - 7454 + 7462 @@ -33521,12 +33643,12 @@ 16 17 - 465 + 466 44 45 - 465 + 466 @@ -33542,12 +33664,12 @@ 16 17 - 465 + 466 44 45 - 465 + 466 @@ -33563,12 +33685,12 @@ 16 17 - 465 + 466 44 45 - 465 + 466 @@ -33584,7 +33706,7 @@ 1 2 - 931 + 932 @@ -33600,7 +33722,7 @@ 1 2 - 931 + 932 @@ -33616,12 +33738,12 @@ 2 3 - 465 + 466 4 5 - 465 + 466 @@ -33637,7 +33759,7 @@ 1 2 - 27953 + 27985 @@ -33653,7 +33775,7 @@ 1 2 - 27953 + 27985 @@ -33669,7 +33791,7 @@ 1 2 - 27953 + 27985 @@ -33685,7 +33807,7 @@ 1 2 - 27953 + 27985 @@ -33701,7 +33823,7 @@ 1 2 - 27953 + 27985 @@ -33717,7 +33839,7 @@ 1 2 - 27953 + 27985 @@ -33733,7 +33855,7 @@ 60 61 - 465 + 466 @@ -33749,7 +33871,7 @@ 44 45 - 465 + 466 @@ -33765,7 +33887,7 @@ 2 3 - 465 + 466 @@ -33781,7 +33903,7 @@ 60 61 - 465 + 466 @@ -33797,7 +33919,7 @@ 1 2 - 465 + 466 @@ -33813,7 +33935,7 @@ 6 7 - 465 + 466 @@ -33829,7 +33951,7 @@ 60 61 - 465 + 466 @@ -33845,7 +33967,7 @@ 44 45 - 465 + 466 @@ -33861,7 +33983,7 @@ 2 3 - 465 + 466 @@ -33877,7 +33999,7 @@ 60 61 - 465 + 466 @@ -33893,7 +34015,7 @@ 1 2 - 465 + 466 @@ -33909,7 +34031,7 @@ 6 7 - 465 + 466 @@ -33925,12 +34047,12 @@ 8 9 - 1863 + 1865 14 15 - 931 + 932 @@ -33946,12 +34068,12 @@ 8 9 - 1863 + 1865 14 15 - 931 + 932 @@ -33967,7 +34089,7 @@ 1 2 - 2795 + 2798 @@ -33983,12 +34105,12 @@ 8 9 - 1863 + 1865 14 15 - 931 + 932 @@ -34004,7 +34126,7 @@ 1 2 - 2795 + 2798 @@ -34020,7 +34142,7 @@ 1 2 - 2795 + 2798 @@ -34146,19 +34268,19 @@ stmts - 4648694 + 4619943 id - 4648694 + 4619943 kind - 1981 + 1966 location - 2286749 + 2269598 @@ -34172,7 +34294,7 @@ 1 2 - 4648694 + 4619943 @@ -34188,7 +34310,7 @@ 1 2 - 4648694 + 4619943 @@ -34204,97 +34326,97 @@ 1 2 - 104 + 103 18 19 - 104 + 103 22 23 - 104 + 103 46 47 - 104 + 103 75 76 - 104 + 103 83 84 - 104 + 103 102 103 - 104 + 103 154 155 - 104 + 103 242 243 - 104 + 103 284 285 - 104 + 103 383 384 - 104 + 103 418 419 - 104 + 103 - 502 - 503 - 104 + 503 + 504 + 103 - 1325 - 1326 - 104 + 1326 + 1327 + 103 - 2630 - 2631 - 104 + 2635 + 2636 + 103 - 4613 - 4614 - 104 + 4621 + 4622 + 103 - 8794 - 8795 - 104 + 8803 + 8804 + 103 - 11560 - 11561 - 104 + 11577 + 11578 + 103 - 13321 - 13322 - 104 + 13335 + 13336 + 103 @@ -34310,97 +34432,97 @@ 1 2 - 104 + 103 8 9 - 104 + 103 18 19 - 104 + 103 45 46 - 104 + 103 50 51 - 104 + 103 56 57 - 104 + 103 74 75 - 104 + 103 89 90 - 104 + 103 101 102 - 104 + 103 128 129 - 104 + 103 209 210 - 104 + 103 252 253 - 104 + 103 368 369 - 104 + 103 642 643 - 104 + 103 1743 1744 - 104 + 103 2190 2191 - 104 + 103 - 4229 - 4230 - 104 + 4228 + 4229 + 103 6071 6072 - 104 + 103 - 6568 - 6569 - 104 + 6567 + 6568 + 103 @@ -34416,22 +34538,22 @@ 1 2 - 1893352 + 1879323 2 4 - 175318 + 174019 4 12 - 175631 + 174122 12 687 - 42447 + 42133 @@ -34447,12 +34569,12 @@ 1 2 - 2229596 + 2212869 2 8 - 57153 + 56729 @@ -34558,15 +34680,15 @@ if_initialization - 312 + 310 if_stmt - 312 + 310 init_id - 312 + 310 @@ -34580,7 +34702,7 @@ 1 2 - 312 + 310 @@ -34596,7 +34718,7 @@ 1 2 - 312 + 310 @@ -34606,15 +34728,15 @@ if_then - 724849 + 725956 if_stmt - 724849 + 725956 then_id - 724849 + 725956 @@ -34628,7 +34750,7 @@ 1 2 - 724849 + 725956 @@ -34644,7 +34766,7 @@ 1 2 - 724849 + 725956 @@ -34654,15 +34776,15 @@ if_else - 184398 + 184680 if_stmt - 184398 + 184680 else_id - 184398 + 184680 @@ -34676,7 +34798,7 @@ 1 2 - 184398 + 184680 @@ -34692,7 +34814,7 @@ 1 2 - 184398 + 184680 @@ -34750,15 +34872,15 @@ constexpr_if_then - 52355 + 52071 constexpr_if_stmt - 52355 + 52071 then_id - 52355 + 52071 @@ -34772,7 +34894,7 @@ 1 2 - 52355 + 52071 @@ -34788,7 +34910,7 @@ 1 2 - 52355 + 52071 @@ -34798,15 +34920,15 @@ constexpr_if_else - 30766 + 30538 constexpr_if_stmt - 30766 + 30538 else_id - 30766 + 30538 @@ -34820,7 +34942,7 @@ 1 2 - 30766 + 30538 @@ -34836,7 +34958,7 @@ 1 2 - 30766 + 30538 @@ -34846,15 +34968,15 @@ while_body - 29345 + 29152 while_stmt - 29345 + 29152 body_id - 29345 + 29152 @@ -34868,7 +34990,7 @@ 1 2 - 29345 + 29152 @@ -34884,7 +35006,7 @@ 1 2 - 29345 + 29152 @@ -34894,15 +35016,15 @@ do_body - 148655 + 148882 do_stmt - 148655 + 148882 body_id - 148655 + 148882 @@ -34916,7 +35038,7 @@ 1 2 - 148655 + 148882 @@ -34932,7 +35054,7 @@ 1 2 - 148655 + 148882 @@ -34942,15 +35064,15 @@ switch_initialization - 4 + 5 switch_stmt - 4 + 5 init_id - 4 + 5 @@ -34964,7 +35086,7 @@ 1 2 - 4 + 5 @@ -34980,7 +35102,7 @@ 1 2 - 4 + 5 @@ -34990,19 +35112,19 @@ switch_case - 209046 + 201865 switch_stmt - 11193 + 10809 index - 4856 + 4689 case_id - 209046 + 201865 @@ -35016,57 +35138,57 @@ 2 3 - 59 + 57 3 4 - 2487 + 2402 4 5 - 1816 + 1753 5 6 - 1085 + 1048 6 8 - 1026 + 991 8 9 - 552 + 533 9 10 - 1066 + 1029 10 12 - 1026 + 991 12 25 - 868 + 838 30 152 - 848 + 819 181 247 - 355 + 343 @@ -35082,57 +35204,57 @@ 2 3 - 59 + 57 3 4 - 2487 + 2402 4 5 - 1816 + 1753 5 6 - 1085 + 1048 6 8 - 1026 + 991 8 9 - 552 + 533 9 10 - 1066 + 1029 10 12 - 1026 + 991 12 25 - 868 + 838 30 152 - 848 + 819 181 247 - 355 + 343 @@ -35148,32 +35270,32 @@ 14 15 - 1283 + 1239 18 19 - 592 + 571 32 33 - 2092 + 2020 33 62 - 414 + 400 66 292 - 375 + 362 346 568 - 98 + 95 @@ -35189,32 +35311,32 @@ 14 15 - 1283 + 1239 18 19 - 592 + 571 32 33 - 2092 + 2020 33 62 - 414 + 400 66 292 - 375 + 362 346 568 - 98 + 95 @@ -35230,7 +35352,7 @@ 1 2 - 209046 + 201865 @@ -35246,7 +35368,7 @@ 1 2 - 209046 + 201865 @@ -35256,15 +35378,15 @@ switch_body - 20756 + 20788 switch_stmt - 20756 + 20788 body_id - 20756 + 20788 @@ -35278,7 +35400,7 @@ 1 2 - 20756 + 20788 @@ -35294,7 +35416,7 @@ 1 2 - 20756 + 20788 @@ -35304,15 +35426,15 @@ for_initialization - 53325 + 53407 for_stmt - 53325 + 53407 init_id - 53325 + 53407 @@ -35326,7 +35448,7 @@ 1 2 - 53325 + 53407 @@ -35342,7 +35464,7 @@ 1 2 - 53325 + 53407 @@ -35352,15 +35474,15 @@ for_condition - 55586 + 55671 for_stmt - 55586 + 55671 condition_id - 55586 + 55671 @@ -35374,7 +35496,7 @@ 1 2 - 55586 + 55671 @@ -35390,7 +35512,7 @@ 1 2 - 55586 + 55671 @@ -35400,15 +35522,15 @@ for_update - 53428 + 53509 for_stmt - 53428 + 53509 update_id - 53428 + 53509 @@ -35422,7 +35544,7 @@ 1 2 - 53428 + 53509 @@ -35438,7 +35560,7 @@ 1 2 - 53428 + 53509 @@ -35448,15 +35570,15 @@ for_body - 61466 + 61560 for_stmt - 61466 + 61560 body_id - 61466 + 61560 @@ -35470,7 +35592,7 @@ 1 2 - 61466 + 61560 @@ -35486,7 +35608,7 @@ 1 2 - 61466 + 61560 @@ -35496,11 +35618,11 @@ stmtparents - 4054126 + 4054468 id - 4054126 + 4054468 index @@ -35508,7 +35630,7 @@ parent - 1721123 + 1721248 @@ -35522,7 +35644,7 @@ 1 2 - 4054126 + 4054468 @@ -35538,7 +35660,7 @@ 1 2 - 4054126 + 4054468 @@ -35598,7 +35720,7 @@ 77 - 195121 + 195132 704 @@ -35659,7 +35781,7 @@ 77 - 195121 + 195132 704 @@ -35676,27 +35798,27 @@ 1 2 - 989099 + 989113 2 3 - 372496 + 372551 3 4 - 105695 + 105697 4 6 - 111192 + 111251 6 17 - 130356 + 130351 17 @@ -35717,27 +35839,27 @@ 1 2 - 989099 + 989113 2 3 - 372496 + 372551 3 4 - 105695 + 105697 4 6 - 111192 + 111251 6 17 - 130356 + 130351 17 @@ -35752,22 +35874,22 @@ ishandler - 65128 + 62891 block - 65128 + 62891 stmt_decl_bind - 581396 + 580807 stmt - 541537 + 540988 num @@ -35775,7 +35897,7 @@ decl - 581292 + 580703 @@ -35789,12 +35911,12 @@ 1 2 - 520808 + 520281 2 19 - 20728 + 20707 @@ -35810,12 +35932,12 @@ 1 2 - 520808 + 520281 2 19 - 20728 + 20707 @@ -35904,8 +36026,8 @@ 4 - 129788 - 129789 + 129790 + 129791 4 @@ -35995,8 +36117,8 @@ 4 - 129763 - 129764 + 129765 + 129766 4 @@ -36013,7 +36135,7 @@ 1 2 - 581255 + 580665 2 @@ -36034,7 +36156,7 @@ 1 2 - 581292 + 580703 @@ -36044,11 +36166,11 @@ stmt_decl_entry_bind - 524221 + 523682 stmt - 484662 + 484163 num @@ -36056,7 +36178,7 @@ decl_entry - 524163 + 523624 @@ -36070,12 +36192,12 @@ 1 2 - 464196 + 463719 2 19 - 20465 + 20444 @@ -36091,12 +36213,12 @@ 1 2 - 464196 + 463719 2 19 - 20465 + 20444 @@ -36294,7 +36416,7 @@ 1 2 - 524142 + 523603 3 @@ -36315,7 +36437,7 @@ 1 2 - 524163 + 523624 @@ -36325,15 +36447,15 @@ blockscope - 1413997 + 1415581 block - 1413997 + 1415581 enclosing - 1298920 + 1300376 @@ -36347,7 +36469,7 @@ 1 2 - 1413997 + 1415581 @@ -36363,12 +36485,12 @@ 1 2 - 1233695 + 1235077 2 13 - 65225 + 65298 @@ -36378,19 +36500,19 @@ jumpinfo - 254083 + 254471 id - 254083 + 254471 str - 21159 + 21192 target - 53064 + 53145 @@ -36404,7 +36526,7 @@ 1 2 - 254083 + 254471 @@ -36420,7 +36542,7 @@ 1 2 - 254083 + 254471 @@ -36436,37 +36558,37 @@ 2 3 - 9879 + 9894 3 4 - 4247 + 4254 4 5 - 1566 + 1568 5 6 - 1340 + 1342 6 10 - 1700 + 1702 10 22 - 1621 + 1623 22 13723 - 804 + 805 @@ -36482,17 +36604,17 @@ 1 2 - 16723 + 16748 2 3 - 2632 + 2636 3 10 - 1688 + 1690 10 @@ -36518,27 +36640,27 @@ 2 3 - 26437 + 26478 3 4 - 12901 + 12921 4 5 - 5344 + 5352 5 8 - 4692 + 4699 8 2124 - 3662 + 3668 @@ -36554,7 +36676,7 @@ 1 2 - 53064 + 53145 @@ -36564,19 +36686,19 @@ preprocdirects - 4421959 + 4389195 id - 4421959 + 4389195 kind - 1147 + 1138 location - 4419352 + 4386607 @@ -36590,7 +36712,7 @@ 1 2 - 4421959 + 4389195 @@ -36606,7 +36728,7 @@ 1 2 - 4421959 + 4389195 @@ -36622,57 +36744,57 @@ 1 2 - 104 + 103 122 123 - 104 + 103 694 695 - 104 + 103 799 800 - 104 + 103 932 933 - 104 + 103 1689 1690 - 104 + 103 1792 1793 - 104 + 103 3012 3013 - 104 + 103 3802 3803 - 104 + 103 6290 6291 - 104 + 103 23266 23267 - 104 + 103 @@ -36688,57 +36810,57 @@ 1 2 - 104 + 103 122 123 - 104 + 103 694 695 - 104 + 103 799 800 - 104 + 103 932 933 - 104 + 103 1689 1690 - 104 + 103 1792 1793 - 104 + 103 3012 3013 - 104 + 103 3802 3803 - 104 + 103 6290 6291 - 104 + 103 23241 23242 - 104 + 103 @@ -36754,12 +36876,12 @@ 1 2 - 4419247 + 4386503 26 27 - 104 + 103 @@ -36775,7 +36897,7 @@ 1 2 - 4419352 + 4386607 @@ -36785,15 +36907,15 @@ preprocpair - 1428440 + 1430040 begin - 1194559 + 1195898 elseelifend - 1428440 + 1430040 @@ -36807,17 +36929,17 @@ 1 2 - 976520 + 977614 2 3 - 207790 + 208022 3 11 - 10249 + 10261 @@ -36833,7 +36955,7 @@ 1 2 - 1428440 + 1430040 @@ -36843,41 +36965,41 @@ preproctrue - 765468 + 766326 branch - 765468 + 766326 preprocfalse - 330786 + 331157 branch - 330786 + 331157 preproctext - 3565497 + 3539079 id - 3565497 + 3539079 head - 2583987 + 2564841 body - 1510176 + 1498986 @@ -36891,7 +37013,7 @@ 1 2 - 3565497 + 3539079 @@ -36907,7 +37029,7 @@ 1 2 - 3565497 + 3539079 @@ -36923,12 +37045,12 @@ 1 2 - 2437036 + 2418979 2 740 - 146950 + 145861 @@ -36944,12 +37066,12 @@ 1 2 - 2521827 + 2503142 2 5 - 62159 + 61698 @@ -36965,17 +37087,17 @@ 1 2 - 1367085 + 1356955 2 6 - 113263 + 112424 6 11630 - 29828 + 29607 @@ -36991,17 +37113,17 @@ 1 2 - 1370109 + 1359957 2 7 - 113576 + 112734 7 2980 - 26490 + 26294 @@ -37011,15 +37133,15 @@ includes - 312616 + 312967 id - 312616 + 312967 included - 116940 + 117071 @@ -37033,7 +37155,7 @@ 1 2 - 312616 + 312967 @@ -37049,32 +37171,32 @@ 1 2 - 61032 + 61100 2 3 - 21897 + 21921 3 4 - 12579 + 12593 4 6 - 10249 + 10261 6 14 - 8852 + 8861 14 47 - 2329 + 2332 @@ -37084,15 +37206,15 @@ link_targets - 848 + 819 id - 848 + 819 binary - 848 + 819 @@ -37106,7 +37228,7 @@ 1 2 - 848 + 819 @@ -37122,7 +37244,7 @@ 1 2 - 848 + 819 @@ -37132,15 +37254,15 @@ link_parent - 39286447 + 38877182 element - 4979610 + 4927618 link_target - 351 + 347 @@ -37154,17 +37276,17 @@ 1 2 - 671377 + 664255 2 9 - 26129 + 25852 9 10 - 4282103 + 4237510 @@ -37180,52 +37302,52 @@ 3 4 - 35 + 34 - 121946 - 121947 - 35 + 121970 + 121971 + 34 - 122058 - 122059 - 35 + 122082 + 122083 + 34 - 122157 - 122158 - 35 + 122181 + 122182 + 34 - 122188 - 122189 - 35 + 122212 + 122213 + 34 - 122200 - 122201 - 35 + 122224 + 122225 + 34 - 122217 - 122218 - 35 + 122241 + 122242 + 34 - 124217 - 124218 - 35 + 124241 + 124242 + 34 - 128871 - 128872 - 35 + 128895 + 128896 + 34 - 131275 - 131276 - 35 + 131299 + 131300 + 34 diff --git a/cpp/ql/lib/upgrades/298438feb146335af824002589cd6d4e96e5dbf9/old.dbscheme b/cpp/ql/lib/upgrades/298438feb146335af824002589cd6d4e96e5dbf9/old.dbscheme new file mode 100644 index 00000000000..298438feb14 --- /dev/null +++ b/cpp/ql/lib/upgrades/298438feb146335af824002589cd6d4e96e5dbf9/old.dbscheme @@ -0,0 +1,2244 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + 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 + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#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 + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_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( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int 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 +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: 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 +); + +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 +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* 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; diff --git a/cpp/ql/lib/upgrades/298438feb146335af824002589cd6d4e96e5dbf9/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/298438feb146335af824002589cd6d4e96e5dbf9/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..aa7ff0ab32c --- /dev/null +++ b/cpp/ql/lib/upgrades/298438feb146335af824002589cd6d4e96e5dbf9/semmlecode.cpp.dbscheme @@ -0,0 +1,2250 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + 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 + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#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 + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_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( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int 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 +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: 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 +); + +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 +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* 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; diff --git a/cpp/ql/lib/upgrades/298438feb146335af824002589cd6d4e96e5dbf9/upgrade.properties b/cpp/ql/lib/upgrades/298438feb146335af824002589cd6d4e96e5dbf9/upgrade.properties new file mode 100644 index 00000000000..f300f2c1771 --- /dev/null +++ b/cpp/ql/lib/upgrades/298438feb146335af824002589cd6d4e96e5dbf9/upgrade.properties @@ -0,0 +1,2 @@ +description: Introduce re-use expressions +compatibility: backwards diff --git a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql index 2a50e7ae358..62c3c98e197 100644 --- a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql +++ b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql @@ -8,7 +8,7 @@ * type `const char*` it is still considered non-constant if the value is not coming from a string * literal. For example, for a parameter with type `const char*` of an exported function that is * used as a format string, there is no way to ensure the originating value was a string literal. - * @kind problem + * @kind path-problem * @problem.severity recommendation * @security-severity 9.3 * @precision high @@ -26,6 +26,7 @@ import semmle.code.cpp.ir.dataflow.internal.ModelUtil import semmle.code.cpp.models.interfaces.DataFlow import semmle.code.cpp.models.interfaces.Taint import semmle.code.cpp.ir.IR +import NonConstFlow::PathGraph class UncalledFunction extends Function { UncalledFunction() { @@ -36,6 +37,37 @@ class UncalledFunction extends Function { } } +/** The `unsigned short` type. */ +class UnsignedShort extends ShortType { + UnsignedShort() { this.isUnsigned() } +} + +/** + * Holds if `t` cannot refer to a string. That is, it's a built-in + * or arithmetic type that is not a "`char` like" type. + */ +predicate cannotContainString(Type t) { + exists(Type unspecified | + unspecified = t.getUnspecifiedType() and + not unspecified instanceof UnknownType and + not unspecified instanceof CharType and + not unspecified instanceof WideCharType and + not unspecified instanceof Char8Type and + not unspecified instanceof Char16Type and + not unspecified instanceof Char32Type and + // C often defines `wchar_t` as `unsigned short` + not unspecified instanceof UnsignedShort + | + unspecified instanceof ArithmeticType or + unspecified instanceof BuiltInType + ) +} + +predicate dataFlowOrTaintFlowFunction(Function func, FunctionOutput output) { + func.(DataFlowFunction).hasDataFlow(_, output) or + func.(TaintFunction).hasTaintFlow(_, output) +} + /** * Holds if `node` is a non-constant source of data flow for non-const format string detection. * This is defined as either: @@ -68,7 +100,12 @@ predicate isNonConst(DataFlow::Node node) { // Parameters of uncalled functions that aren't const exists(UncalledFunction f, Parameter p | f.getAParameter() = p and - p = node.asParameter() + // We pick the indirection of the parameter since this query is focused + // on strings. + p = node.asParameter(1) and + // Ignore main's argv parameter as it is already considered a `FlowSource` + // not ignoring it will result in path redundancies + (f.getName() = "main" implies p != f.getParameter(1)) ) or // Consider as an input any out arg of a function or a function's return where the function is not: @@ -78,30 +115,27 @@ predicate isNonConst(DataFlow::Node node) { // are considered as possible non-const sources // The function's output must also not be const to be considered a non-const source exists(Function func, CallInstruction call | - // NOTE: could use `Call` getAnArgument() instead of `CallInstruction` but requires two - // variables representing the same call in ordoer to use `callOutput` below. - exists(Expr arg | - call.getPositionalArgumentOperand(_).getDef().getUnconvertedResultExpression() = arg and - arg = node.asDefiningArgument() - ) - or - call.getUnconvertedResultExpression() = node.asIndirectExpr() + not func.hasDefinition() and + func = call.getStaticCallTarget() | - func = call.getStaticCallTarget() and + // Case 1: It's a known dataflow or taintflow function with flow to the return value + call.getUnconvertedResultExpression() = node.asIndirectExpr() and not exists(FunctionOutput output | - // NOTE: we must include dataflow and taintflow. e.g., including only dataflow we will find sprintf - // variant function's output are now possible non-const sources - pragma[only_bind_out](func).(DataFlowFunction).hasDataFlow(_, output) or - pragma[only_bind_out](func).(TaintFunction).hasTaintFlow(_, output) - | + dataFlowOrTaintFlowFunction(func, output) and + output.isReturnValueDeref(_) and node = callOutput(call, output) ) - ) and - not exists(Call c | - c.getTarget().hasDefinition() and - if node instanceof DataFlow::DefinitionByReferenceNode - then c.getAnArgument() = node.asDefiningArgument() - else c = [node.asExpr(), node.asIndirectExpr()] + or + // Case 2: It's a known dataflow or taintflow function with flow to an output parameter + exists(int i | + call.getPositionalArgumentOperand(i).getDef().getUnconvertedResultExpression() = + node.asDefiningArgument() and + not exists(FunctionOutput output | + dataFlowOrTaintFlowFunction(func, output) and + output.isParameterDeref(i, _) and + node = callOutput(call, output) + ) + ) ) } @@ -110,28 +144,41 @@ predicate isNonConst(DataFlow::Node node) { * `FormattingFunctionCall`. */ predicate isSinkImpl(DataFlow::Node sink, Expr formatString) { - [sink.asExpr(), sink.asIndirectExpr()] = formatString and + sink.asIndirectExpr() = formatString and exists(FormattingFunctionCall fc | formatString = fc.getArgument(fc.getFormatParameterIndex())) } module NonConstFlowConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { isNonConst(source) } + predicate isSource(DataFlow::Node source) { + exists(Type t | + isNonConst(source) and + t = source.getType() and + not cannotContainString(t) + ) + } predicate isSink(DataFlow::Node sink) { isSinkImpl(sink, _) } predicate isBarrier(DataFlow::Node node) { // Ignore tracing non-const through array indices - exists(ArrayExpr a | a.getArrayOffset() = node.asExpr()) + exists(ArrayExpr a | a.getArrayOffset() = node.asIndirectExpr()) + or + exists(Type t | + t = node.getType() and + cannotContainString(t) + ) } } module NonConstFlow = TaintTracking::Global; -from FormattingFunctionCall call, Expr formatString, DataFlow::Node sink +from + FormattingFunctionCall call, Expr formatString, NonConstFlow::PathNode sink, + NonConstFlow::PathNode source where + isSinkImpl(sink.getNode(), formatString) and call.getArgument(call.getFormatParameterIndex()) = formatString and - NonConstFlow::flowTo(sink) and - isSinkImpl(sink, formatString) -select formatString, - "The format string argument to " + call.getTarget().getName() + - " should be constant to prevent security issues and other potential errors." + NonConstFlow::flowPath(source, sink) +select sink.getNode(), source, sink, + "The format string argument to $@ has a source which cannot be " + + "verified to originate from a string literal.", call, call.getTarget().getName() diff --git a/cpp/ql/src/Likely Bugs/Memory Management/UninitializedLocal.ql b/cpp/ql/src/Likely Bugs/Memory Management/UninitializedLocal.ql index f8bac113eb9..35bee25c9f5 100644 --- a/cpp/ql/src/Likely Bugs/Memory Management/UninitializedLocal.ql +++ b/cpp/ql/src/Likely Bugs/Memory Management/UninitializedLocal.ql @@ -2,7 +2,7 @@ * @name Potentially uninitialized local variable * @description Reading from a local variable that has not been assigned to * will typically yield garbage. - * @kind problem + * @kind path-problem * @id cpp/uninitialized-local * @problem.severity warning * @security-severity 7.8 @@ -15,6 +15,7 @@ import cpp import semmle.code.cpp.ir.IR import semmle.code.cpp.ir.dataflow.MustFlow +import PathGraph /** * Auxiliary predicate: Types that don't require initialization @@ -89,4 +90,4 @@ where conf.hasFlowPath(source, sink) and isSinkImpl(sink.getInstruction(), va) and v = va.getTarget() -select va, "The variable $@ may not be initialized at this access.", v, v.getName() +select va, source, sink, "The variable $@ may not be initialized at this access.", v, v.getName() diff --git a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.qhelp b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.qhelp new file mode 100644 index 00000000000..205a1ae7ff8 --- /dev/null +++ b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.qhelp @@ -0,0 +1,50 @@ + + + + +

+Certain casts in C and C++ place no restrictions on the target type. For +example, C style casts such as (MyClass*)p allows the programmer +to cast any pointer p to an expression of type MyClass*. +If the runtime type of p turns out to be a type that's incompatible +with MyClass, this results in undefined behavior. +

+
+ + +

+If possible, use dynamic_cast to safely cast between polymorphic types. +If dynamic_cast is not an option, use static_cast to restrict +the kinds of conversions that the compiler is allowed to perform. If C++ style casts is +not an option, carefully check that all casts are safe. +

+
+ + +

+Consider the following class hierachy where we define a base class Shape and two +derived classes Circle and Square that are mutually incompatible: +

+ + +

+The following code demonstrates a type confusion vulnerability where the programmer +assumes that the runtime type of p is always a Square. +However, if p is a Circle, the cast will result in undefined behavior. +

+ + +

+The following code fixes the vulnerability by using dynamic_cast to +safely cast between polymorphic types. If the cast fails, dynamic_cast +returns a null pointer, which can be checked for and handled appropriately. +

+ +
+ + +
  • +Microsoft Learn: Type conversions and type safety. +
  • +
    +
    diff --git a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql new file mode 100644 index 00000000000..18a331f9c32 --- /dev/null +++ b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql @@ -0,0 +1,263 @@ +/** + * @name Type confusion + * @description Casting a value to an incompatible type can lead to undefined behavior. + * @kind path-problem + * @problem.severity warning + * @security-severity 9.3 + * @precision medium + * @id cpp/type-confusion + * @tags security + * external/cwe/cwe-843 + */ + +import cpp +import semmle.code.cpp.dataflow.new.DataFlow +import Flow::PathGraph + +/** + * Holds if `f` is a field located at byte offset `offset` in `c`. + * + * Note that predicate is recursive, so that given the following: + * ```cpp + * struct S1 { + * int a; + * void* b; + * }; + * + * struct S2 { + * S1 s1; + * char c; + * }; + * ``` + * both `hasAFieldWithOffset(S2, s1, 0)` and `hasAFieldWithOffset(S2, a, 0)` + * holds. + */ +predicate hasAFieldWithOffset(Class c, Field f, int offset) { + // Base case: `f` is a field in `c`. + f = c.getAField() and + offset = f.getByteOffset() and + not f.getUnspecifiedType().(Class).hasDefinition() + or + // Otherwise, we find the struct that is a field of `c` which then has + // the field `f` as a member. + exists(Field g | + g = c.getAField() and + // Find the field with the largest offset that's less than or equal to + // offset. That's the struct we need to search recursively. + g = + max(Field cand, int candOffset | + cand = c.getAField() and + candOffset = cand.getByteOffset() and + offset >= candOffset + | + cand order by candOffset + ) and + hasAFieldWithOffset(g.getUnspecifiedType(), f, offset - g.getByteOffset()) + ) +} + +/** Holds if `f` is the last field of its declaring class. */ +predicate lastField(Field f) { + exists(Class c | c = f.getDeclaringType() | + f = + max(Field cand, int byteOffset | + cand.getDeclaringType() = c and byteOffset = f.getByteOffset() + | + cand order by byteOffset + ) + ) +} + +/** + * Holds if there exists a field in `c2` at offset `offset` that's compatible + * with `f1`. + */ +bindingset[f1, offset, c2] +pragma[inline_late] +predicate hasCompatibleFieldAtOffset(Field f1, int offset, Class c2) { + exists(Field f2 | hasAFieldWithOffset(c2, f2, offset) | + // Let's not deal with bit-fields for now. + f2 instanceof BitField + or + f1.getUnspecifiedType().getSize() = f2.getUnspecifiedType().getSize() + or + lastField(f1) and + f1.getUnspecifiedType().getSize() <= f2.getUnspecifiedType().getSize() + ) +} + +/** + * Holds if `c1` is a prefix of `c2`. + */ +bindingset[c1, c2] +pragma[inline_late] +predicate prefix(Class c1, Class c2) { + not c1.isPolymorphic() and + not c2.isPolymorphic() and + if c1 instanceof Union + then + // If it's a union we just verify that one of it's variants is compatible with the other class + exists(Field f1, int offset | + // Let's not deal with bit-fields for now. + not f1 instanceof BitField and + hasAFieldWithOffset(c1, f1, offset) + | + hasCompatibleFieldAtOffset(f1, offset, c2) + ) + else + forall(Field f1, int offset | + // Let's not deal with bit-fields for now. + not f1 instanceof BitField and + hasAFieldWithOffset(c1, f1, offset) + | + hasCompatibleFieldAtOffset(f1, offset, c2) + ) +} + +/** + * An unsafe cast is any explicit cast that is not + * a `dynamic_cast`. + */ +class UnsafeCast extends Cast { + private Class toType; + + UnsafeCast() { + ( + this instanceof CStyleCast + or + this instanceof StaticCast + or + this instanceof ReinterpretCast + ) and + toType = this.getExplicitlyConverted().getUnspecifiedType().stripType() and + not this.isImplicit() and + exists(TypeDeclarationEntry tde | + tde = toType.getDefinition() and + not tde.isFromUninstantiatedTemplate(_) + ) + } + + Class getConvertedType() { result = toType } + + /** + * Holds if the result of this cast can safely be interpreted as a value of + * type `t`. + * + * The compatibility rules are as follows: + * + * 1. the result of `(T)x` is compatible with the type `T` for any `T` + * 2. the result of `(T)x` is compatible with the type `U` for any `U` such + * that `U` is a subtype of `T`, or `T` is a subtype of `U`. + * 3. the result of `(T)x` is compatible with the type `U` if the list + * of fields of `T` is a prefix of the list of fields of `U`. + * For example, if `U` is `struct { unsigned char x; int y; };` + * and `T` is `struct { unsigned char uc; };`. + * 4. the result of `(T)x` is compatible with the type `U` if the list + * of fields of `U` is a prefix of the list of fields of `T`. + * + * Condition 4 is a bit controversial, since it assumes that the additional + * fields in `T` won't be accessed. This may result in some FNs. + */ + bindingset[this, t] + pragma[inline_late] + predicate compatibleWith(Type t) { + // Conition 1 + t.stripType() = this.getConvertedType() + or + // Condition 3 + prefix(this.getConvertedType(), t.stripType()) + or + // Condition 4 + prefix(t.stripType(), this.getConvertedType()) + or + // Condition 2 (a) + t.stripType().(Class).getABaseClass+() = this.getConvertedType() + or + // Condition 2 (b) + t.stripType() = this.getConvertedType().getABaseClass+() + } +} + +/** + * Holds if `source` is an allocation that allocates a value of type `type`. + */ +predicate isSourceImpl(DataFlow::Node source, Class type) { + exists(AllocationExpr alloc | + alloc = source.asExpr() and + type = alloc.getAllocatedElementType().stripType() and + not exists( + alloc + .(NewOrNewArrayExpr) + .getAllocator() + .(OperatorNewAllocationFunction) + .getPlacementArgument() + ) + ) and + exists(TypeDeclarationEntry tde | + tde = type.getDefinition() and + not tde.isFromUninstantiatedTemplate(_) + ) +} + +/** A configuration describing flow from an allocation to a potentially unsafe cast. */ +module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { isSourceImpl(source, _) } + + predicate isBarrier(DataFlow::Node node) { + // We disable flow through global variables to reduce FPs from infeasible paths + node instanceof DataFlow::VariableNode + or + exists(Class c | c = node.getType().stripType() | + not c.hasDefinition() + or + exists(TypeDeclarationEntry tde | + tde = c.getDefinition() and + tde.isFromUninstantiatedTemplate(_) + ) + ) + } + + predicate isSink(DataFlow::Node sink) { sink.asExpr() = any(UnsafeCast cast).getUnconverted() } + + int fieldFlowBranchLimit() { result = 0 } +} + +module Flow = DataFlow::Global; + +predicate relevantType(DataFlow::Node sink, Class allocatedType) { + exists(DataFlow::Node source | + Flow::flow(source, sink) and + isSourceImpl(source, allocatedType) + ) +} + +predicate isSinkImpl( + DataFlow::Node sink, Class allocatedType, Type convertedType, boolean compatible +) { + exists(UnsafeCast cast | + relevantType(sink, allocatedType) and + sink.asExpr() = cast.getUnconverted() and + convertedType = cast.getConvertedType() + | + if cast.compatibleWith(allocatedType) then compatible = true else compatible = false + ) +} + +from + Flow::PathNode source, Flow::PathNode sink, Type badSourceType, Type sinkType, + DataFlow::Node sinkNode +where + Flow::flowPath(source, sink) and + sinkNode = sink.getNode() and + isSourceImpl(source.getNode(), badSourceType) and + isSinkImpl(sinkNode, badSourceType, sinkType, false) and + // If there is any flow that would result in a valid cast then we don't + // report an alert here. This reduces the number of FPs from infeasible paths + // significantly. + not exists(DataFlow::Node goodSource, Type goodSourceType | + isSourceImpl(goodSource, goodSourceType) and + isSinkImpl(sinkNode, goodSourceType, sinkType, true) and + Flow::flow(goodSource, sinkNode) + ) +select sinkNode, source, sink, "Conversion from $@ to $@ is invalid.", badSourceType, + badSourceType.toString(), sinkType, sinkType.toString() diff --git a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusionBad.cpp b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusionBad.cpp new file mode 100644 index 00000000000..1ef9bfd3e31 --- /dev/null +++ b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusionBad.cpp @@ -0,0 +1,7 @@ +void allocate_and_draw_bad() { + Shape* shape = new Circle; + // ... + // BAD: Assumes that shape is always a Square + Square* square = static_cast(shape); + int length = square->getLength(); +} \ No newline at end of file diff --git a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusionCommon.cpp b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusionCommon.cpp new file mode 100644 index 00000000000..7bdee019588 --- /dev/null +++ b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusionCommon.cpp @@ -0,0 +1,25 @@ +struct Shape { + virtual ~Shape(); + + virtual void draw() = 0; +}; + +struct Circle : public Shape { + Circle(); + + void draw() override { + /* ... */ + } + + int getRadius(); +}; + +struct Square : public Shape { + Square(); + + void draw() override { + /* ... */ + } + + int getLength(); +}; diff --git a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusionGood.cpp b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusionGood.cpp new file mode 100644 index 00000000000..f56a00a5e10 --- /dev/null +++ b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusionGood.cpp @@ -0,0 +1,11 @@ +void allocate_and_draw_good() { + Shape* shape = new Circle; + // ... + // GOOD: Dynamically checks if shape is a Square + Square* square = dynamic_cast(shape); + if(square) { + int length = square->getLength(); + } else { + // handle error + } +} \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md b/cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md new file mode 100644 index 00000000000..2e5933a61e8 --- /dev/null +++ b/cpp/ql/src/change-notes/2024-02-29-non-constant-format-path-query.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The "non-constant format string" query (`cpp/non-constant-format`) has been converted to a `path-problem` query. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-03-05-type-confusion-query.md b/cpp/ql/src/change-notes/2024-03-05-type-confusion-query.md new file mode 100644 index 00000000000..f96a4684b76 --- /dev/null +++ b/cpp/ql/src/change-notes/2024-03-05-type-confusion-query.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* Added a new query, `cpp/type-confusion`, to detect casts to invalid types. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2024-03-13-glib-alloc-and-dealloc.md b/cpp/ql/src/change-notes/2024-03-13-glib-alloc-and-dealloc.md new file mode 100644 index 00000000000..bc9082285d4 --- /dev/null +++ b/cpp/ql/src/change-notes/2024-03-13-glib-alloc-and-dealloc.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added models for `GLib` allocation and deallocation functions. diff --git a/cpp/ql/src/change-notes/2024-03-18-uninitialized-local-path-problem.md b/cpp/ql/src/change-notes/2024-03-18-uninitialized-local-path-problem.md new file mode 100644 index 00000000000..14a8c2e7ce7 --- /dev/null +++ b/cpp/ql/src/change-notes/2024-03-18-uninitialized-local-path-problem.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) has been converted to a `path-problem` query. \ No newline at end of file diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.qhelp b/cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.qhelp new file mode 100644 index 00000000000..19975b17493 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.qhelp @@ -0,0 +1,53 @@ + + + +

    +Using an iterator owned by a container after the lifetime of the container has expired can lead to undefined behavior. +This is because the iterator may be invalidated when the container is destroyed, and dereferencing an invalidated iterator is undefined behavior. +These problems can be hard to spot due to C++'s complex rules for temporary object lifetimes and their extensions. +

    + +
    + + +

    +Never create an iterator to a temporary container when the iterator is expected to be used after the container's lifetime has expired. +

    + +
    + +

    + +

    + +

    +The rules for lifetime extension ensures that the code in lifetime_of_temp_extended is well-defined. This is because the +lifetime of the temporary container returned by get_vector is extended to the end of the loop. However, prior to C++23, +the lifetime extension rules do not ensure that the container returned by get_vector is extended in lifetime_of_temp_not_extended. +This is because the temporary container is not bound to a rvalue reference. +

    + + +
    + + +
  • CERT C Coding Standard: +MEM30-C. Do not access freed memory.
  • +
  • +OWASP: +Using freed memory. +
  • +
  • +Lifetime safety: Preventing common dangling +
  • +
  • +Containers library +
  • +
  • +Range-based for loop (since C++11) +
  • + +
    +
    diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.ql b/cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.ql new file mode 100644 index 00000000000..15f34aa8d15 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.ql @@ -0,0 +1,103 @@ +/** + * @name Iterator to expired container + * @description Using an iterator owned by a container whose lifetime has expired may lead to unexpected behavior. + * @kind problem + * @precision high + * @id cpp/iterator-to-expired-container + * @problem.severity warning + * @tags reliability + * security + * external/cwe/cwe-416 + * external/cwe/cwe-664 + */ + +// IMPORTANT: This query does not currently find anything since it relies on extractor and analysis improvements that hasn't yet been released +import cpp +import semmle.code.cpp.ir.IR +import semmle.code.cpp.dataflow.new.DataFlow +import semmle.code.cpp.models.implementations.StdContainer +import semmle.code.cpp.models.implementations.StdMap +import semmle.code.cpp.models.implementations.Iterator + +/** + * A configuration to track flow from a temporary variable to the qualifier of + * a destructor call + */ +module TempToDestructorConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source.asInstruction().(VariableAddressInstruction).getIRVariable() instanceof IRTempVariable + } + + predicate isSink(DataFlow::Node sink) { + sink.asOperand().(ThisArgumentOperand).getCall().getStaticCallTarget() instanceof Destructor + } +} + +module TempToDestructorFlow = DataFlow::Global; + +/** + * Gets a `DataFlow::Node` that represents a temporary that will be destroyed + * by a call to a destructor, or a `DataFlow::Node` that will transitively be + * destroyed by a call to a destructor. + * + * For the latter case, consider something like: + * ``` + * std::vector> get_2d_vector(); + * auto& v = get_2d_vector()[0]; + * ``` + * Given the above, this predicate returns the node corresponding + * to `get_2d_vector()[0]` since the temporary `get_2d_vector()` gets + * destroyed by a call to `std::vector>::~vector`, + * and thus the result of `get_2d_vector()[0]` is also an invalid reference. + */ +DataFlow::Node getADestroyedNode() { + exists(TempToDestructorFlow::PathNode destroyedTemp | destroyedTemp.isSource() | + result = destroyedTemp.getNode() + or + exists(CallInstruction call | + result.asInstruction() = call and + DataFlow::localFlow(destroyedTemp.getNode(), + DataFlow::operandNode(call.getThisArgumentOperand())) + | + call.getStaticCallTarget() instanceof StdSequenceContainerAt or + call.getStaticCallTarget() instanceof StdMapAt + ) + ) +} + +predicate isSinkImpl(DataFlow::Node sink, FunctionCall fc) { + exists(CallInstruction call | + call = sink.asOperand().(ThisArgumentOperand).getCall() and + fc = call.getUnconvertedResultExpression() and + call.getStaticCallTarget() instanceof BeginOrEndFunction + ) +} + +/** + * Flow from any destroyed object to the qualifier of a `begin` or `end` call + */ +module DestroyedToBeginConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source = getADestroyedNode() } + + predicate isSink(DataFlow::Node sink) { isSinkImpl(sink, _) } + + DataFlow::FlowFeature getAFeature() { + // By blocking argument-to-parameter flow we ensure that we don't enter a + // function body where the temporary outlives anything inside the function. + // This prevents false positives in cases like: + // ```cpp + // void foo(const std::vector& v) { + // for(auto x : v) { ... } // this is fine since v outlives the loop + // } + // ... + // foo(create_temporary()) + // ``` + result instanceof DataFlow::FeatureHasSinkCallContext + } +} + +module DestroyedToBeginFlow = DataFlow::Global; + +from DataFlow::Node source, DataFlow::Node sink, FunctionCall beginOrEnd +where DestroyedToBeginFlow::flow(source, sink) and isSinkImpl(sink, beginOrEnd) +select source, "This object is destroyed before $@ is called.", beginOrEnd, beginOrEnd.toString() diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainerExtendedLifetime.cpp b/cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainerExtendedLifetime.cpp new file mode 100644 index 00000000000..70232447f05 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-416/IteratorToExpiredContainerExtendedLifetime.cpp @@ -0,0 +1,20 @@ +#include + +std::vector get_vector(); + +void use(int); + +void lifetime_of_temp_extended() { + for(auto x : get_vector()) { + use(x); // GOOD: The lifetime of the vector returned by `get_vector()` is extended until the end of the loop. + } +} + +// Writes the the values of `v` to an external log and returns it unchanged. +const std::vector& log_and_return_argument(const std::vector& v); + +void lifetime_of_temp_not_extended() { + for(auto x : log_and_return_argument(get_vector())) { + use(x); // BAD: The lifetime of the vector returned by `get_vector()` is not extended, and the behavior is undefined. + } +} diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-416/IteratorToExpiredContainer.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-416/IteratorToExpiredContainer.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-416/IteratorToExpiredContainer.qlref b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-416/IteratorToExpiredContainer.qlref new file mode 100644 index 00000000000..5f86bb26ff0 --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-416/IteratorToExpiredContainer.qlref @@ -0,0 +1 @@ +experimental/Security/CWE/CWE-416/IteratorToExpiredContainer.ql diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-416/test.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-416/test.cpp new file mode 100644 index 00000000000..4e5fcbd2149 --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-416/test.cpp @@ -0,0 +1,768 @@ + +typedef unsigned long size_t; + +template +struct remove_const { typedef T type; }; + +template +struct remove_const { typedef T type; }; + +// `remove_const_t` removes any `const` specifier from `T` +template +using remove_const_t = typename remove_const::type; + +template +struct remove_reference { typedef T type; }; + +template +struct remove_reference { typedef T type; }; + +template +struct remove_reference { typedef T type; }; + +// `remove_reference_t` removes any `&` from `T` +template +using remove_reference_t = typename remove_reference::type; + +template +struct decay_impl { + typedef T type; +}; + +template +struct decay_impl { + typedef T* type; +}; + +template +using decay_t = typename decay_impl>::type; + + +namespace std +{ + template constexpr T&& forward(remove_reference_t& t) noexcept; + template constexpr T&& forward(remove_reference_t&& t) noexcept; +} + +// --- iterator --- + +namespace std { + struct ptrdiff_t; + + template struct iterator_traits; + + template + struct iterator { + typedef Category iterator_category; + + iterator(); + iterator(iterator > const &other); // non-const -> const conversion constructor + + iterator &operator++(); + iterator operator++(int); + iterator &operator--(); + iterator operator--(int); + bool operator==(iterator other) const; + bool operator!=(iterator other) const; + reference_type operator*() const; + pointer_type operator->() const; + iterator operator+(int); + iterator operator-(int); + iterator &operator+=(int); + iterator &operator-=(int); + int operator-(iterator); + reference_type operator[](int); + }; + + struct input_iterator_tag {}; + struct forward_iterator_tag : public input_iterator_tag {}; + struct bidirectional_iterator_tag : public forward_iterator_tag {}; + struct random_access_iterator_tag : public bidirectional_iterator_tag {}; + + struct output_iterator_tag {}; + + template + class back_insert_iterator { + protected: + Container* container = nullptr; + public: + using iterator_category = output_iterator_tag; + using value_type = void; + using difference_type = ptrdiff_t; + using pointer = void; + using reference = void; + using container_type = Container; + constexpr back_insert_iterator() noexcept = default; + constexpr explicit back_insert_iterator(Container& x); + back_insert_iterator& operator=(const typename Container::value_type& value); + back_insert_iterator& operator=(typename Container::value_type&& value); + back_insert_iterator& operator*(); + back_insert_iterator& operator++(); + back_insert_iterator operator++(int); + }; + + template + constexpr back_insert_iterator back_inserter(Container& x) { + return back_insert_iterator(x); + } + + template + class front_insert_iterator { + protected: + Container* container = nullptr; + public: + using iterator_category = output_iterator_tag; + using value_type = void; + using difference_type = ptrdiff_t; + using pointer = void; + using reference = void; + using container_type = Container; + constexpr front_insert_iterator() noexcept = default; + constexpr explicit front_insert_iterator(Container& x); + constexpr front_insert_iterator& operator=(const typename Container::value_type& value); + constexpr front_insert_iterator& operator=(typename Container::value_type&& value); + constexpr front_insert_iterator& operator*(); + constexpr front_insert_iterator& operator++(); + constexpr front_insert_iterator operator++(int); + }; + template + constexpr front_insert_iterator front_inserter(Container& x) { + return front_insert_iterator(x); + } +} + +// --- string --- + +namespace std +{ + template struct char_traits; + + typedef size_t streamsize; + + template class allocator { + public: + allocator() throw(); + typedef size_t size_type; + }; + + template, class Allocator = allocator > + class basic_string { + public: + using value_type = charT; + using reference = value_type&; + using const_reference = const value_type&; + typedef typename Allocator::size_type size_type; + static const size_type npos = -1; + + explicit basic_string(const Allocator& a = Allocator()); + basic_string(const charT* s, const Allocator& a = Allocator()); + template basic_string(InputIterator begin, InputIterator end, const Allocator& a = Allocator()); + + const charT* c_str() const; + charT* data() noexcept; + size_t length() const; + + typedef std::iterator iterator; + typedef std::iterator const_iterator; + + iterator begin(); + iterator end(); + const_iterator begin() const; + const_iterator end() const; + const_iterator cbegin() const; + const_iterator cend() const; + + void push_back(charT c); + + const charT& front() const; + charT& front(); + const charT& back() const; + charT& back(); + + const_reference operator[](size_type pos) const; + reference operator[](size_type pos); + const_reference at(size_type n) const; + reference at(size_type n); + template basic_string& operator+=(const T& t); + basic_string& operator+=(const charT* s); + basic_string& append(const basic_string& str); + basic_string& append(const charT* s); + basic_string& append(size_type n, charT c); + template basic_string& append(InputIterator first, InputIterator last); + basic_string& assign(const basic_string& str); + basic_string& assign(size_type n, charT c); + template basic_string& assign(InputIterator first, InputIterator last); + basic_string& insert(size_type pos, const basic_string& str); + basic_string& insert(size_type pos, size_type n, charT c); + basic_string& insert(size_type pos, const charT* s); + iterator insert(const_iterator p, size_type n, charT c); + template iterator insert(const_iterator p, InputIterator first, InputIterator last); + basic_string& replace(size_type pos1, size_type n1, const basic_string& str); + basic_string& replace(size_type pos1, size_type n1, size_type n2, charT c); + size_type copy(charT* s, size_type n, size_type pos = 0) const; + void clear() noexcept; + basic_string substr(size_type pos = 0, size_type n = npos) const; + void swap(basic_string& s) noexcept/*(allocator_traits::propagate_on_container_swap::value || allocator_traits::is_always_equal::value)*/; + }; + + template basic_string operator+(const basic_string& lhs, const basic_string& rhs); + template basic_string operator+(const basic_string& lhs, const charT* rhs); + + typedef basic_string string; +} + +// --- istring / ostream / stringstream --- + +namespace std +{ + template > + class basic_istream /*: virtual public basic_ios - not needed for this test */ { + public: + using char_type = charT; + using int_type = int; //typename traits::int_type; + + basic_istream& operator>>(int& n); + + int_type get(); + basic_istream& get(char_type& c); + basic_istream& get(char_type* s, streamsize n); + int_type peek(); + basic_istream& read (char_type* s, streamsize n); + streamsize readsome(char_type* s, streamsize n); + basic_istream& putback(char_type c); + basic_istream& unget(); + + basic_istream& getline(char_type* s, streamsize n); + basic_istream& getline(char_type* s, streamsize n, char_type delim); + }; + + template basic_istream& operator>>(basic_istream&, charT*); + template basic_istream& operator>>(basic_istream& is, basic_string& str); + + template basic_istream& getline(basic_istream& is, basic_string& str, charT delim); + template basic_istream& getline(basic_istream& is, basic_string& str); + + template > + class basic_ostream /*: virtual public basic_ios - not needed for this test */ { + public: + typedef charT char_type; + + basic_ostream& operator<<(int n); + + basic_ostream& put(char_type c); + basic_ostream& write(const char_type* s, streamsize n); + basic_ostream& flush(); + }; + + template basic_ostream& operator<<(basic_ostream&, const charT*); + template basic_ostream& operator<<(basic_ostream& os, const basic_string& str); + + template> + class basic_iostream : public basic_istream, public basic_ostream { + public: + }; + + template, class Allocator = allocator> + class basic_stringstream : public basic_iostream { + public: + explicit basic_stringstream(/*ios_base::openmode which = ios_base::out|ios_base::in - not needed for this test*/); + explicit basic_stringstream( const basic_string& str/*, ios_base::openmode which = ios_base::out | ios_base::in*/); + basic_stringstream(const basic_stringstream& rhs) = delete; + basic_stringstream(basic_stringstream&& rhs); + basic_stringstream& operator=(const basic_stringstream& rhs) = delete; + basic_stringstream& operator=(basic_stringstream&& rhs); + + void swap(basic_stringstream& rhs); + + basic_string str() const; + void str(const basic_string& str); + }; + + typedef basic_istream istream; + typedef basic_ostream ostream; + extern istream cin; + extern ostream cout; + + using stringstream = basic_stringstream; +} + +// --- vector --- + +namespace std { + template> + class vector { + public: + using value_type = T; + using reference = value_type&; + using const_reference = const value_type&; + using size_type = unsigned int; + using iterator = std::iterator; + using const_iterator = std::iterator; + + vector() noexcept(noexcept(Allocator())); + vector(const std::vector&); + explicit vector(const Allocator&) noexcept; + explicit vector(size_type n, const Allocator& = Allocator()); + vector(size_type n, const T& value, const Allocator& = Allocator()); + template vector(InputIterator first, InputIterator last, const Allocator& = Allocator()); + // use of `iterator_category` makes sure InputIterator is (probably) an iterator, and not an `int` or + // similar that should match a different overload (SFINAE). + ~vector(); + + vector& operator=(const vector& x); + vector& operator=(vector&& x) noexcept/*(allocator_traits::propagate_on_container_move_assignment::value || allocator_traits::is_always_equal::value)*/; + template void assign(InputIterator first, InputIterator last); + // use of `iterator_category` makes sure InputIterator is (probably) an iterator, and not an `int` or + // similar that should match a different overload (SFINAE). + void assign(size_type n, const T& u); + + iterator begin() noexcept; + const_iterator begin() const noexcept; + iterator end() noexcept; + const_iterator end() const noexcept; + + size_type size() const noexcept; + + reference operator[](size_type n); + const_reference operator[](size_type n) const; + const_reference at(size_type n) const; + reference at(size_type n); + reference front(); + const_reference front() const; + reference back(); + const_reference back() const; + + T* data() noexcept; + const T* data() const noexcept; + + void push_back(const T& x); + void push_back(T&& x); + + iterator insert(const_iterator position, const T& x); + iterator insert(const_iterator position, T&& x); + iterator insert(const_iterator position, size_type n, const T& x); + template iterator insert(const_iterator position, InputIterator first, InputIterator last); + + template iterator emplace (const_iterator position, Args&&... args); + template void emplace_back (Args&&... args); + + void swap(vector&) noexcept/*(allocator_traits::propagate_on_container_swap::value || allocator_traits::is_always_equal::value)*/; + + void clear() noexcept; + }; +} + +// --- make_shared / make_unique --- + +namespace std { + template + class shared_ptr { + public: + shared_ptr() noexcept; + explicit shared_ptr(T*); + shared_ptr(const shared_ptr&) noexcept; + template shared_ptr(const shared_ptr&) noexcept; + template shared_ptr(shared_ptr&&) noexcept; + + shared_ptr& operator=(const shared_ptr&) noexcept; + shared_ptr& operator=(shared_ptr&&) noexcept; + + T& operator*() const noexcept; + T* operator->() const noexcept; + + T* get() const noexcept; + }; + + template + class unique_ptr { + public: + constexpr unique_ptr() noexcept; + explicit unique_ptr(T*) noexcept; + unique_ptr(unique_ptr&&) noexcept; + + unique_ptr& operator=(unique_ptr&&) noexcept; + + T& operator*() const; + T* operator->() const noexcept; + + T* get() const noexcept; + }; + + template unique_ptr make_unique(Args&&...); + + template shared_ptr make_shared(Args&&...); +} + +// --- pair --- + +namespace std { + template + struct pair { + typedef T1 first_type; + typedef T2 second_type; + + T1 first; + T2 second; + pair(); + pair(const T1& x, const T2& y); + template pair(const pair &p); + + void swap(pair& p) /*noexcept(...)*/; + }; + + template constexpr pair, decay_t> make_pair(T1&& x, T2&& y) { + return pair, decay_t>(std::forward(x), std::forward(y)); + } +} + +// --- map --- + +namespace std { + template struct less; + + template, class Allocator = allocator>> + class map { + public: + using key_type = Key; + using mapped_type = T; + using value_type = pair; + using iterator = std::iterator; + using const_iterator = std::iterator; + + map(); + map(const map& x); + map(map&& x); + ~map(); + + map& operator=(const map& x); + map& operator=(map&& x) /*noexcept(allocator_traits::is_always_equal::value && is_nothrow_move_assignable_v)*/; + + iterator begin() noexcept; + const_iterator begin() const noexcept; + iterator end() noexcept; + const_iterator end() const noexcept; + + T& operator[](const key_type& x); + T& operator[](key_type&& x); + T& at(const key_type& x); + const T& at(const key_type& x) const; + + template pair emplace(Args&&... args); + template iterator emplace_hint(const_iterator position, Args&&... args); + + pair insert(const value_type& x); + pair insert(value_type&& x); + iterator insert(const_iterator position, const value_type& x); + iterator insert(const_iterator position, value_type&& x); + + template pair try_emplace(const key_type& k, Args&&... args); + template pair try_emplace(key_type&& k, Args&&... args); + template iterator try_emplace(const_iterator hint, const key_type& k, Args&&... args); + template iterator try_emplace(const_iterator hint, key_type&& k, Args&&... args); + template pair insert_or_assign(const key_type& k, M&& obj); + template pair insert_or_assign(key_type&& k, M&& obj); + template iterator insert_or_assign(const_iterator hint, const key_type& k, M&& obj); + template iterator insert_or_assign(const_iterator hint, key_type&& k, M&& obj); + + iterator erase(iterator position); + iterator erase(const_iterator position); + iterator erase(const_iterator first, const_iterator last); + void swap(map&) /*noexcept(/*==allocator_traits::is_always_equal::value && is_nothrow_swappable_v)*/; + void clear() noexcept; + + template void merge(map& source); + template void merge(map&& source); + + iterator find(const key_type& x); + const_iterator find(const key_type& x) const; + + iterator lower_bound(const key_type& x); + const_iterator lower_bound(const key_type& x) const; + iterator upper_bound(const key_type& x); + const_iterator upper_bound(const key_type& x) const; + + pair equal_range(const key_type& x); + pair equal_range(const key_type& x) const; + }; + + template struct hash; + template struct equal_to; + + template, class Pred = equal_to, class Allocator = allocator>> + class unordered_map { + public: + using key_type = Key; + using mapped_type = T; + using value_type = pair; + using iterator = std::iterator; + using const_iterator = std::iterator; + + unordered_map(); + unordered_map(const unordered_map&); + unordered_map(unordered_map&&); + ~unordered_map(); + + unordered_map& operator=(const unordered_map&); + unordered_map& operator=(unordered_map&&) /*noexcept(allocator_traits::is_always_equal::value && is_nothrow_move_assignable_v && is_nothrow_move_assignable_v)*/; + + iterator begin() noexcept; + const_iterator begin() const noexcept; + iterator end() noexcept; + const_iterator end() const noexcept; + + mapped_type& operator[](const key_type& k); + mapped_type& operator[](key_type&& k); + mapped_type& at(const key_type& k); + const mapped_type& at(const key_type& k) const; + + template pair emplace(Args&&... args); + template iterator emplace_hint(const_iterator position, Args&&... args); + + pair insert(const value_type& obj); + pair insert(value_type&& obj); + iterator insert(const_iterator hint, const value_type& obj); + iterator insert(const_iterator hint, value_type&& obj); + + template pair try_emplace(const key_type& k, Args&&... args); + template pair try_emplace(key_type&& k, Args&&... args); + template iterator try_emplace(const_iterator hint, const key_type& k, Args&&... args); + template iterator try_emplace(const_iterator hint, key_type&& k, Args&&... args); + template pair insert_or_assign(const key_type& k, M&& obj); + template pair insert_or_assign(key_type&& k, M&& obj); + template iterator insert_or_assign(const_iterator hint, const key_type& k, M&& obj); + template iterator insert_or_assign(const_iterator hint, key_type&& k, M&& obj); + + iterator erase(iterator position); + iterator erase(const_iterator position); + iterator erase(const_iterator first, const_iterator last); + void swap(unordered_map&) /*noexcept(allocator_traits::is_always_equal::value && is_nothrow_swappable_v && is_nothrow_swappable_v)*/; + void clear() noexcept; + + template void merge(unordered_map& source); + template void merge(unordered_map&& source); + + iterator find(const key_type& k); + const_iterator find(const key_type& k) const; + + pair equal_range(const key_type& k); + pair equal_range(const key_type& k) const; + }; +}; + +// --- set --- + +namespace std { + template, class Allocator = allocator> + class set { + public: + using key_type = Key; + using value_type = Key; + using size_type = size_t; + using allocator_type = Allocator; + using iterator = std::iterator; + using const_iterator = std::iterator; + + set(); + set(const set& x); + set(set&& x); + template set(InputIterator first, InputIterator last/*, const Compare& comp = Compare(), const Allocator& = Allocator()*/); + ~set(); + + set& operator=(const set& x); + set& operator=(set&& x) noexcept/*(allocator_traits::is_always_equal::value && is_nothrow_move_assignable_v)*/; + + iterator begin() noexcept; + const_iterator begin() const noexcept; + iterator end() noexcept; + const_iterator end() const noexcept; + + template pair emplace(Args&&... args); + template iterator emplace_hint(const_iterator position, Args&&... args); + pair insert(const value_type& x); + pair insert(value_type&& x); + iterator insert(const_iterator position, const value_type& x); + iterator insert(const_iterator position, value_type&& x); + template void insert(InputIterator first, InputIterator last); + + iterator erase(iterator position); + iterator erase(const_iterator position); + iterator erase(const_iterator first, const_iterator last); + void swap(set&) noexcept/*(allocator_traits::is_always_equal::value && is_nothrow_swappable_v)*/; + void clear() noexcept; + + template void merge(set& source); + template void merge(set&& source); + + iterator find(const key_type& x); + const_iterator find(const key_type& x) const; + + iterator lower_bound(const key_type& x); + const_iterator lower_bound(const key_type& x) const; + iterator upper_bound(const key_type& x); + const_iterator upper_bound(const key_type& x) const; + pair equal_range(const key_type& x); + pair equal_range(const key_type& x) const; + }; + + template, class Pred = equal_to, class Allocator = allocator> + class unordered_set { + public: + using key_type = Key; + using value_type = Key; + using hasher = Hash; + using key_equal = Pred; + using allocator_type = Allocator; + using size_type = size_t; + using iterator = std::iterator; + using const_iterator = std::iterator; + + unordered_set(); + unordered_set(const unordered_set&); + unordered_set(unordered_set&&); + template unordered_set(InputIterator f, InputIterator l, size_type n = 0/*, const hasher& hf = hasher(), const key_equal& eql = key_equal(), const allocator_type& a = allocator_type()*/); + ~unordered_set(); + + unordered_set& operator=(const unordered_set&); + unordered_set& operator=(unordered_set&&) noexcept/*(allocator_traits::is_always_equal::value && is_nothrow_move_assignable_v && is_nothrow_move_assignable_v)*/; + + iterator begin() noexcept; + const_iterator begin() const noexcept; + iterator end() noexcept; + const_iterator end() const noexcept; + + template pair emplace(Args&&... args); + template iterator emplace_hint(const_iterator position, Args&&... args); + pair insert(const value_type& obj); + pair insert(value_type&& obj); + iterator insert(const_iterator hint, const value_type& obj); + iterator insert(const_iterator hint, value_type&& obj); + template void insert(InputIterator first, InputIterator last); + + iterator erase(iterator position); + iterator erase(const_iterator position); + iterator erase(const_iterator first, const_iterator last); + void swap(unordered_set&) noexcept/*(allocator_traits::is_always_equal::value && is_nothrow_swappable_v && is_nothrow_swappable_v)*/; + void clear() noexcept; + + template void merge(unordered_set& source); + template void merge(unordered_set&& source); + + iterator find(const key_type& k); + const_iterator find(const key_type& k) const; + pair equal_range(const key_type& k); + pair equal_range(const key_type& k) const; + }; +} + +std::vector> returnValue(); +std::vector>& returnRef(); + +std::vector> external_by_value(std::vector>); + +std::vector> external_by_const_ref(const std::vector>&); + +// *: Will be detected once extract destruction of unnamed temporaries and generate IR for them + +const std::vector>& return_self_by_ref(const std::vector>& v) { + return v; +} + +std::vector> return_self_by_value(const std::vector>& v) { + return v; +} + +void test() { + for (auto x : returnValue()) {} // GOOD + for (auto x : returnValue()[0]) {} // BAD [NOT DETECTED] (see *) + for (auto x : external_by_value(returnValue())) {} // GOOD + for (auto x : external_by_const_ref(returnValue())) {} // GOOD + for (auto x : returnValue().at(0)) {} // BAD [NOT DETECTED] (see *) + + for (auto x : returnRef()) {} // GOOD + for (auto x : returnRef()[0]) {} // GOOD + for (auto x : returnRef().at(0)) {} // GOOD + + for(auto it = returnValue().begin(); it != returnValue().end(); ++it) {} // BAD + + { + auto v = returnValue(); + for(auto it = v.begin(); it != v.end(); ++it) {} // GOOD + } + + { + auto&& v = returnValue(); + for(auto it = v.begin(); it != v.end(); ++it) {} // GOOD + } + + { + auto&& v = returnValue()[0]; + for(auto it = v.begin(); it != v.end(); ++it) {} // BAD [NOT DETECTED] (see *) + } + + { + auto&& v = returnRef(); + for(auto it = v.begin(); it != v.end(); ++it) {} // GOOD + } + + { + auto&& v = returnRef()[0]; + for(auto it = v.begin(); it != v.end(); ++it) {} // GOOD + } + + for (auto x : return_self_by_ref(returnValue())) {} // BAD [NOT DETECTED] (see *) + + for (auto x : return_self_by_value(returnValue())) {} // GOOD +} + +template +void iterate(const std::vector& v) { + for (auto x : v) {} +} + +std::vector& ref_to_first_in_returnValue_1() { + return returnValue()[0]; // BAD [NOT DETECTED] (see *) +} + +std::vector& ref_to_first_in_returnValue_2() { + return returnValue()[0]; // BAD [NOT DETECTED] +} + +std::vector& ref_to_first_in_returnValue_3() { + return returnValue()[0]; // BAD [NOT DETECTED] (see *) +} + +std::vector first_in_returnValue_1() { + return returnValue()[0]; // GOOD +} + +std::vector first_in_returnValue_2() { + return returnValue()[0]; // GOOD +} + +void test2() { + iterate(returnValue()); // GOOD + iterate(returnValue()[0]); // GOOD + + for (auto x : ref_to_first_in_returnValue_1()) {} + + { + auto value = ref_to_first_in_returnValue_2(); + for (auto x : value) {} + } + + { + auto& ref = ref_to_first_in_returnValue_3(); + for (auto x : ref) {} + } + + for (auto x : first_in_returnValue_1()) {} + + { + auto value = first_in_returnValue_2(); + for (auto x : value) {} + } +} diff --git a/cpp/ql/test/library-tests/controlflow/guards/Guards.expected b/cpp/ql/test/library-tests/controlflow/guards/Guards.expected index 4193bd49fef..6eebc960ce3 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/Guards.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/Guards.expected @@ -29,3 +29,6 @@ | test.cpp:18:8:18:10 | call to get | | test.cpp:31:7:31:13 | ... == ... | | test.cpp:42:13:42:20 | call to getABool | +| test.cpp:61:10:61:10 | i | +| test.cpp:74:10:74:10 | i | +| test.cpp:84:10:84:10 | i | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected index 1e0aed878bf..fbfaff9acf6 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected @@ -86,3 +86,7 @@ | test.cpp:31:7:31:13 | ... == ... | true | 31 | 32 | | test.cpp:42:13:42:20 | call to getABool | false | 53 | 53 | | test.cpp:42:13:42:20 | call to getABool | true | 43 | 45 | +| test.cpp:61:10:61:10 | i | Case[0] | 62 | 64 | +| test.cpp:61:10:61:10 | i | Case[1] | 65 | 66 | +| test.cpp:74:10:74:10 | i | Case[0..10] | 75 | 77 | +| test.cpp:74:10:74:10 | i | Case[11..20] | 78 | 79 | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.ql b/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.ql index 5101f64a2c5..93ce054cd82 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.ql +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.ql @@ -7,10 +7,10 @@ import cpp import semmle.code.cpp.controlflow.Guards -from GuardCondition guard, boolean sense, int start, int end +from GuardCondition guard, AbstractValue value, int start, int end where exists(BasicBlock block | - guard.controls(block, sense) and + guard.valueControls(block, value) and block.hasLocationInfo(_, start, _, end, _) ) -select guard, sense, start, end +select guard, value, start, end diff --git a/cpp/ql/test/library-tests/controlflow/guards/test.cpp b/cpp/ql/test/library-tests/controlflow/guards/test.cpp index 46d894813f9..3a60f5f026e 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/test.cpp +++ b/cpp/ql/test/library-tests/controlflow/guards/test.cpp @@ -52,3 +52,37 @@ bool testWithCatch0(int v) return false; } + +void use1(int); +void use2(int); +void use3(int); + +void test_switches_simple(int i) { + switch(i) { + case 0: + use1(i); + break; + case 1: + use2(i); + /* NOTE: fallthrough */ + case 2: + use3(i); + } +} + +void test_switches_range(int i) { + switch(i) { + case 0 ... 10: + use1(i); + break; + case 11 ... 20: + use2(i); + } +} + +void test_switches_default(int i) { + switch(i) { + default: + use1(i); + } +} \ No newline at end of file diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected index 8b2b371a4e2..fa6958d92ea 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected @@ -166,6 +166,8 @@ postWithInFlow | test.cpp:932:5:932:19 | * ... [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:932:6:932:19 | global_pointer [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:1045:9:1045:11 | ref arg buf | PostUpdateNode should not be the target of local flow. | +| test.cpp:1051:5:1051:11 | content [post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1052:9:1052:9 | a [inner post update] | PostUpdateNode should not be the target of local flow. | viableImplInCallContextTooLarge uniqueParameterNodeAtPosition uniqueParameterNodePosition diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.expected new file mode 100644 index 00000000000..0e33430cde7 --- /dev/null +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.expected @@ -0,0 +1,197 @@ +| example.c:15:37:15:37 | **b | example.c:15:37:15:37 | **b | +| example.c:15:37:15:37 | **b | example.c:15:37:15:37 | **b | +| example.c:15:37:15:37 | **b | example.c:15:37:15:37 | *b | +| example.c:15:37:15:37 | **b | example.c:19:6:19:6 | *b | +| example.c:15:37:15:37 | *b | example.c:15:37:15:37 | **b | +| example.c:15:37:15:37 | *b | example.c:15:37:15:37 | *b | +| example.c:15:37:15:37 | *b | example.c:15:37:15:37 | *b | +| example.c:15:37:15:37 | *b | example.c:15:37:15:37 | b | +| example.c:15:37:15:37 | *b | example.c:19:6:19:6 | b | +| example.c:15:37:15:37 | b | example.c:15:37:15:37 | *b | +| example.c:15:37:15:37 | b | example.c:15:37:15:37 | b | +| example.c:15:37:15:37 | b | example.c:15:37:15:37 | b | +| example.c:15:37:15:37 | b | example.c:19:6:19:6 | b | +| example.c:15:44:15:46 | pos | example.c:24:24:24:26 | pos | +| example.c:17:11:17:16 | *definition of coords | example.c:17:11:17:16 | *definition of coords | +| example.c:17:11:17:16 | *definition of coords | example.c:17:11:17:16 | *definition of coords | +| example.c:17:11:17:16 | *definition of coords | example.c:17:11:17:16 | *definition of coords | +| example.c:17:11:17:16 | *definition of coords | example.c:17:11:17:16 | *definition of coords | +| example.c:17:11:17:16 | *definition of coords | example.c:24:13:24:18 | *coords | +| example.c:17:11:17:16 | *definition of coords [post update] | example.c:17:11:17:16 | *definition of coords | +| example.c:17:11:17:16 | *definition of coords [post update] | example.c:24:13:24:18 | *coords | +| example.c:17:11:17:16 | definition of coords | example.c:17:11:17:16 | *definition of coords | +| example.c:17:11:17:16 | definition of coords | example.c:17:11:17:16 | definition of coords | +| example.c:17:11:17:16 | definition of coords | example.c:17:11:17:16 | definition of coords | +| example.c:17:11:17:16 | definition of coords | example.c:17:11:17:16 | definition of coords | +| example.c:17:11:17:16 | definition of coords | example.c:17:11:17:16 | definition of coords | +| example.c:17:11:17:16 | definition of coords | example.c:24:13:24:18 | coords | +| example.c:17:11:17:16 | definition of coords [post update] | example.c:17:11:17:16 | definition of coords | +| example.c:17:11:17:16 | definition of coords [post update] | example.c:24:13:24:18 | coords | +| example.c:17:19:17:22 | {...} | example.c:17:19:17:22 | {...} | +| example.c:17:21:17:21 | 0 | example.c:17:21:17:21 | 0 | +| example.c:19:6:19:6 | *b | example.c:15:37:15:37 | *b | +| example.c:19:6:19:6 | *b [post update] | example.c:15:37:15:37 | *b | +| example.c:19:6:19:6 | *b [post update] | example.c:19:6:19:6 | *b | +| example.c:19:6:19:6 | b [post update] | example.c:19:6:19:6 | b | +| example.c:24:2:24:7 | *coords | example.c:26:18:26:24 | *& ... | +| example.c:24:2:24:7 | *coords [post update] | example.c:26:18:26:24 | *& ... | +| example.c:24:2:24:7 | coords | example.c:26:18:26:24 | & ... | +| example.c:24:2:24:7 | coords [post update] | example.c:26:18:26:24 | & ... | +| example.c:24:13:24:18 | *coords | example.c:24:2:24:7 | *coords | +| example.c:24:13:24:18 | *coords [post update] | example.c:24:2:24:7 | *coords | +| example.c:24:13:24:18 | coords | example.c:24:2:24:7 | coords | +| example.c:24:13:24:18 | coords [post update] | example.c:24:2:24:7 | coords | +| example.c:24:13:24:30 | ... = ... | example.c:24:2:24:30 | ... = ... | +| example.c:24:20:24:20 | *y | example.c:24:20:24:20 | *y | +| example.c:24:20:24:20 | y | example.c:24:20:24:20 | y | +| example.c:24:20:24:20 | y | example.c:24:20:24:20 | y | +| example.c:24:24:24:26 | pos | example.c:28:14:28:25 | & ... | +| example.c:24:24:24:26 | pos | example.c:28:14:28:25 | *& ... | +| example.c:24:24:24:30 | ... + ... | example.c:24:13:24:30 | ... = ... | +| example.c:26:13:26:16 | call to getX | example.c:26:2:26:25 | ... = ... | +| example.c:26:18:26:24 | & ... | example.c:26:2:26:7 | coords | +| example.c:26:18:26:24 | *& ... | example.c:26:2:26:7 | *coords | +| example.c:26:18:26:24 | getX output argument | example.c:26:2:26:7 | *coords | +| example.c:26:18:26:24 | pointer to getX output argument | example.c:26:2:26:7 | coords | +| example.c:26:19:26:24 | *coords | example.c:26:18:26:24 | *& ... | +| example.c:26:19:26:24 | coords | example.c:26:18:26:24 | & ... | +| example.c:28:22:28:25 | & ... | example.c:28:14:28:25 | & ... | +| example.c:28:22:28:25 | *& ... | example.c:28:14:28:25 | *& ... | +| example.c:28:23:28:25 | *pos | example.c:28:22:28:25 | *& ... | +| example.c:28:23:28:25 | pos | example.c:28:22:28:25 | & ... | +| test.cpp:6:12:6:17 | call to source | test.cpp:6:12:6:17 | call to source | +| test.cpp:6:12:6:17 | call to source | test.cpp:7:8:7:9 | t1 | +| test.cpp:7:8:7:9 | t1 | test.cpp:8:8:8:9 | t1 | +| test.cpp:7:8:7:9 | t1 | test.cpp:8:8:8:9 | t1 | +| test.cpp:8:3:8:9 | ... = ... | test.cpp:10:8:10:9 | t2 | +| test.cpp:8:8:8:9 | t1 | test.cpp:8:3:8:9 | ... = ... | +| test.cpp:8:8:8:9 | t1 | test.cpp:9:8:9:9 | t1 | +| test.cpp:8:8:8:9 | t1 | test.cpp:9:8:9:9 | t1 | +| test.cpp:9:8:9:9 | t1 | test.cpp:11:7:11:8 | t1 | +| test.cpp:9:8:9:9 | t1 | test.cpp:11:7:11:8 | t1 | +| test.cpp:10:8:10:9 | t2 | test.cpp:13:10:13:11 | t2 | +| test.cpp:10:8:10:9 | t2 | test.cpp:15:3:15:6 | Phi | +| test.cpp:10:8:10:9 | t2 | test.cpp:15:3:15:6 | Phi | +| test.cpp:11:7:11:8 | t1 | test.cpp:21:8:21:9 | t1 | +| test.cpp:12:5:12:10 | ... = ... | test.cpp:13:10:13:11 | t2 | +| test.cpp:12:10:12:10 | 0 | test.cpp:12:5:12:10 | ... = ... | +| test.cpp:13:10:13:11 | t2 | test.cpp:15:3:15:6 | Phi | +| test.cpp:13:10:13:11 | t2 | test.cpp:15:3:15:6 | Phi | +| test.cpp:15:3:15:6 | Phi | test.cpp:15:8:15:9 | t2 | +| test.cpp:15:3:15:6 | Phi | test.cpp:15:8:15:9 | t2 | +| test.cpp:15:8:15:9 | t2 | test.cpp:23:19:23:19 | Phi | +| test.cpp:15:8:15:9 | t2 | test.cpp:23:19:23:19 | Phi | +| test.cpp:17:3:17:8 | ... = ... | test.cpp:21:8:21:9 | t1 | +| test.cpp:17:8:17:8 | 0 | test.cpp:17:3:17:8 | ... = ... | +| test.cpp:21:8:21:9 | t1 | test.cpp:23:19:23:19 | Phi | +| test.cpp:21:8:21:9 | t1 | test.cpp:23:19:23:19 | Phi | +| test.cpp:23:15:23:16 | 0 | test.cpp:23:15:23:16 | 0 | +| test.cpp:23:15:23:16 | 0 | test.cpp:23:19:23:19 | Phi | +| test.cpp:23:19:23:19 | Phi | test.cpp:23:19:23:19 | i | +| test.cpp:23:19:23:19 | Phi | test.cpp:23:19:23:19 | i | +| test.cpp:23:19:23:19 | Phi | test.cpp:23:23:23:24 | t1 | +| test.cpp:23:19:23:19 | Phi | test.cpp:23:23:23:24 | t1 | +| test.cpp:23:19:23:19 | Phi | test.cpp:24:10:24:11 | t2 | +| test.cpp:23:19:23:19 | Phi | test.cpp:24:10:24:11 | t2 | +| test.cpp:23:19:23:19 | i | test.cpp:23:27:23:27 | i | +| test.cpp:23:19:23:19 | i | test.cpp:23:27:23:27 | i | +| test.cpp:23:23:23:24 | t1 | test.cpp:23:19:23:19 | Phi | +| test.cpp:23:23:23:24 | t1 | test.cpp:26:8:26:9 | t1 | +| test.cpp:23:23:23:24 | t1 | test.cpp:26:8:26:9 | t1 | +| test.cpp:23:27:23:27 | *i | test.cpp:23:27:23:27 | *i | +| test.cpp:23:27:23:27 | *i | test.cpp:23:27:23:27 | i | +| test.cpp:23:27:23:27 | i | test.cpp:23:19:23:19 | Phi | +| test.cpp:23:27:23:27 | i | test.cpp:23:27:23:27 | i | +| test.cpp:23:27:23:27 | i | test.cpp:23:27:23:27 | i | +| test.cpp:23:27:23:29 | ... ++ | test.cpp:23:19:23:19 | Phi | +| test.cpp:23:27:23:29 | ... ++ | test.cpp:23:27:23:29 | ... ++ | +| test.cpp:24:5:24:11 | ... = ... | test.cpp:23:19:23:19 | Phi | +| test.cpp:24:10:24:11 | t2 | test.cpp:23:19:23:19 | Phi | +| test.cpp:24:10:24:11 | t2 | test.cpp:23:19:23:19 | Phi | +| test.cpp:24:10:24:11 | t2 | test.cpp:24:5:24:11 | ... = ... | +| test.cpp:382:48:382:54 | source1 | test.cpp:384:16:384:23 | *& ... | +| test.cpp:383:12:383:13 | 0 | test.cpp:383:12:383:13 | 0 | +| test.cpp:383:12:383:13 | 0 | test.cpp:384:10:384:13 | *& ... | +| test.cpp:384:10:384:13 | & ... | test.cpp:384:3:384:8 | call to memcpy | +| test.cpp:384:10:384:13 | & ... | test.cpp:384:10:384:13 | & ... | +| test.cpp:384:10:384:13 | & ... | test.cpp:385:8:385:10 | tmp | +| test.cpp:384:10:384:13 | *& ... | test.cpp:384:10:384:13 | *& ... | +| test.cpp:384:10:384:13 | memcpy output argument | test.cpp:385:8:385:10 | tmp | +| test.cpp:384:10:384:13 | pointer to memcpy output argument | test.cpp:385:8:385:10 | tmp | +| test.cpp:384:11:384:13 | *tmp | test.cpp:384:10:384:13 | *& ... | +| test.cpp:384:11:384:13 | tmp | test.cpp:384:10:384:13 | & ... | +| test.cpp:384:16:384:23 | & ... | test.cpp:384:16:384:23 | & ... | +| test.cpp:384:16:384:23 | *& ... | test.cpp:384:3:384:8 | **call to memcpy | +| test.cpp:384:16:384:23 | *& ... | test.cpp:384:3:384:8 | *call to memcpy | +| test.cpp:384:16:384:23 | *& ... | test.cpp:384:10:384:13 | memcpy output argument | +| test.cpp:384:16:384:23 | *& ... | test.cpp:384:16:384:23 | *& ... | +| test.cpp:384:16:384:23 | **(const void *)... | test.cpp:384:3:384:8 | **call to memcpy | +| test.cpp:384:16:384:23 | **(const void *)... | test.cpp:384:10:384:13 | memcpy output argument | +| test.cpp:384:17:384:23 | *source1 | test.cpp:384:16:384:23 | *& ... | +| test.cpp:384:17:384:23 | source1 | test.cpp:384:16:384:23 | & ... | +| test.cpp:388:53:388:59 | source1 | test.cpp:391:16:391:23 | *& ... | +| test.cpp:388:66:388:66 | b | test.cpp:393:7:393:7 | b | +| test.cpp:389:12:389:13 | 0 | test.cpp:389:12:389:13 | 0 | +| test.cpp:389:12:389:13 | 0 | test.cpp:390:18:390:21 | *& ... | +| test.cpp:390:18:390:21 | & ... | test.cpp:390:18:390:21 | & ... | +| test.cpp:390:18:390:21 | & ... | test.cpp:391:10:391:13 | & ... | +| test.cpp:390:18:390:21 | *& ... | test.cpp:390:18:390:21 | *& ... | +| test.cpp:390:18:390:21 | *& ... | test.cpp:391:10:391:13 | *& ... | +| test.cpp:390:19:390:21 | *tmp | test.cpp:390:18:390:21 | *& ... | +| test.cpp:390:19:390:21 | tmp | test.cpp:390:18:390:21 | & ... | +| test.cpp:391:10:391:13 | & ... | test.cpp:391:3:391:8 | call to memcpy | +| test.cpp:391:10:391:13 | & ... | test.cpp:391:10:391:13 | & ... | +| test.cpp:391:10:391:13 | & ... | test.cpp:392:8:392:10 | tmp | +| test.cpp:391:10:391:13 | *& ... | test.cpp:391:10:391:13 | *& ... | +| test.cpp:391:10:391:13 | memcpy output argument | test.cpp:392:8:392:10 | tmp | +| test.cpp:391:10:391:13 | pointer to memcpy output argument | test.cpp:392:8:392:10 | tmp | +| test.cpp:391:11:391:13 | *tmp | test.cpp:391:10:391:13 | *& ... | +| test.cpp:391:11:391:13 | tmp | test.cpp:391:10:391:13 | & ... | +| test.cpp:391:16:391:23 | & ... | test.cpp:391:16:391:23 | & ... | +| test.cpp:391:16:391:23 | *& ... | test.cpp:391:3:391:8 | **call to memcpy | +| test.cpp:391:16:391:23 | *& ... | test.cpp:391:3:391:8 | *call to memcpy | +| test.cpp:391:16:391:23 | *& ... | test.cpp:391:10:391:13 | memcpy output argument | +| test.cpp:391:16:391:23 | *& ... | test.cpp:391:16:391:23 | *& ... | +| test.cpp:391:16:391:23 | **(const void *)... | test.cpp:391:3:391:8 | **call to memcpy | +| test.cpp:391:16:391:23 | **(const void *)... | test.cpp:391:10:391:13 | memcpy output argument | +| test.cpp:391:17:391:23 | *source1 | test.cpp:391:16:391:23 | *& ... | +| test.cpp:391:17:391:23 | source1 | test.cpp:391:16:391:23 | & ... | +| test.cpp:392:8:392:10 | tmp | test.cpp:394:10:394:12 | tmp | +| test.cpp:392:8:392:10 | tmp | test.cpp:394:10:394:12 | tmp | +| test.cpp:487:67:487:67 | **s | test.cpp:487:67:487:67 | **s | +| test.cpp:487:67:487:67 | **s | test.cpp:487:67:487:67 | **s | +| test.cpp:487:67:487:67 | **s | test.cpp:487:67:487:67 | *s | +| test.cpp:487:67:487:67 | **s | test.cpp:488:21:488:21 | *s | +| test.cpp:487:67:487:67 | *s | test.cpp:487:67:487:67 | **s | +| test.cpp:487:67:487:67 | *s | test.cpp:487:67:487:67 | *s | +| test.cpp:487:67:487:67 | *s | test.cpp:487:67:487:67 | *s | +| test.cpp:487:67:487:67 | *s | test.cpp:487:67:487:67 | s | +| test.cpp:487:67:487:67 | *s | test.cpp:488:21:488:21 | s | +| test.cpp:487:67:487:67 | s | test.cpp:487:67:487:67 | *s | +| test.cpp:487:67:487:67 | s | test.cpp:487:67:487:67 | s | +| test.cpp:487:67:487:67 | s | test.cpp:487:67:487:67 | s | +| test.cpp:487:67:487:67 | s | test.cpp:488:21:488:21 | s | +| test.cpp:488:21:488:21 | *s | test.cpp:489:20:489:20 | *s | +| test.cpp:488:21:488:21 | *s [post update] | test.cpp:489:20:489:20 | *s | +| test.cpp:488:21:488:21 | s | test.cpp:489:20:489:20 | s | +| test.cpp:488:21:488:21 | s | test.cpp:489:20:489:20 | s | +| test.cpp:488:21:488:21 | s [post update] | test.cpp:489:20:489:20 | s | +| test.cpp:488:24:488:30 | *content | test.cpp:488:21:488:30 | *content | +| test.cpp:488:24:488:30 | content | test.cpp:488:21:488:30 | content | +| test.cpp:489:20:489:20 | *s | test.cpp:487:67:487:67 | *s | +| test.cpp:489:20:489:20 | *s [post update] | test.cpp:487:67:487:67 | *s | +| test.cpp:489:20:489:20 | *s [post update] | test.cpp:489:20:489:20 | *s | +| test.cpp:489:20:489:20 | s [post update] | test.cpp:489:20:489:20 | s | +| test.cpp:489:23:489:29 | *content | test.cpp:489:23:489:29 | *content | +| test.cpp:489:23:489:29 | *content | test.cpp:490:8:490:17 | * ... | +| test.cpp:489:23:489:29 | content | test.cpp:489:23:489:29 | content | +| test.cpp:489:23:489:29 | content | test.cpp:490:9:490:17 | p_content | +| test.cpp:1050:12:1050:12 | definition of a | test.cpp:1051:3:1051:3 | *a | +| test.cpp:1051:3:1051:3 | *a | test.cpp:1052:8:1052:9 | *& ... | +| test.cpp:1051:3:1051:3 | *a [post update] | test.cpp:1052:8:1052:9 | *& ... | +| test.cpp:1051:3:1051:3 | a | test.cpp:1052:8:1052:9 | & ... | +| test.cpp:1051:3:1051:3 | a [post update] | test.cpp:1052:8:1052:9 | & ... | +| test.cpp:1051:15:1051:21 | 0 | test.cpp:1051:3:1051:21 | ... = ... | +| test.cpp:1051:15:1051:21 | *0 | test.cpp:1051:3:1051:21 | *... = ... | +| test.cpp:1052:9:1052:9 | *a | test.cpp:1052:8:1052:9 | *& ... | +| test.cpp:1052:9:1052:9 | a | test.cpp:1052:8:1052:9 | & ... | diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.ql b/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.ql new file mode 100644 index 00000000000..7a908a6e3f2 --- /dev/null +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.ql @@ -0,0 +1,8 @@ +import cpp +import semmle.code.cpp.dataflow.new.DataFlow + +from DataFlow::Node nodeFrom, DataFlow::Node nodeTo +where + DataFlow::localFlowStep(nodeFrom, nodeTo) and + nodeFrom.getFunction().getName().matches("%\\_with\\_local\\_flow") +select nodeFrom, nodeTo diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow.expected index 525e6b22da5..2f4c618a130 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow.expected @@ -81,3 +81,10 @@ WARNING: Module DataFlow has been deprecated and may be removed in future (local | test.cpp:488:21:488:21 | s [post update] | test.cpp:489:20:489:20 | s | | test.cpp:488:24:488:30 | ref arg content | test.cpp:489:23:489:29 | content | | test.cpp:489:23:489:29 | content | test.cpp:490:9:490:17 | p_content | +| test.cpp:1050:12:1050:12 | a | test.cpp:1051:3:1051:3 | a | +| test.cpp:1050:12:1050:12 | a | test.cpp:1052:9:1052:9 | a | +| test.cpp:1051:3:1051:3 | a [post update] | test.cpp:1052:9:1052:9 | a | +| test.cpp:1051:3:1051:21 | ... = ... | test.cpp:1051:5:1051:11 | content [post update] | +| test.cpp:1051:15:1051:21 | 0 | test.cpp:1051:3:1051:21 | ... = ... | +| test.cpp:1052:8:1052:9 | ref arg & ... | test.cpp:1052:9:1052:9 | a [inner post update] | +| test.cpp:1052:9:1052:9 | a | test.cpp:1052:8:1052:9 | & ... | diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected index c9f90a60b6e..e03ee68b8a3 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected @@ -123,6 +123,7 @@ astFlow | test.cpp:842:11:842:16 | call to source | test.cpp:844:8:844:8 | y | | test.cpp:846:13:846:27 | call to indirect_source | test.cpp:848:23:848:25 | rpx | | test.cpp:860:54:860:59 | call to source | test.cpp:861:10:861:37 | static_local_pointer_dynamic | +| test.cpp:1050:12:1050:12 | a | test.cpp:1052:8:1052:9 | & ... | | true_upon_entry.cpp:17:11:17:16 | call to source | true_upon_entry.cpp:21:8:21:8 | x | | true_upon_entry.cpp:27:9:27:14 | call to source | true_upon_entry.cpp:29:8:29:8 | x | | true_upon_entry.cpp:33:11:33:16 | call to source | true_upon_entry.cpp:39:8:39:8 | x | diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp index b36c289aaf1..b2bff6327c5 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp @@ -1044,4 +1044,10 @@ void* memset(void*, int, size_t); void memset_test(char* buf) { // $ ast-def=buf ir-def=*buf memset(buf, source(), 10); sink(*buf); // $ ir MISSING: ast +} + +void flow_out_of_address_with_local_flow() { + MyStruct a; + a.content = nullptr; + sink(&a); // $ SPURIOUS: ast } \ No newline at end of file diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/uninitialized.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/uninitialized.expected index 39fb882940d..fc230b0ed20 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/uninitialized.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/uninitialized.expected @@ -54,3 +54,5 @@ | test.cpp:796:12:796:12 | a | test.cpp:797:20:797:20 | a | | test.cpp:796:12:796:12 | a | test.cpp:797:31:797:31 | a | | test.cpp:796:12:796:12 | a | test.cpp:798:17:798:17 | a | +| test.cpp:1050:12:1050:12 | a | test.cpp:1051:3:1051:3 | a | +| test.cpp:1050:12:1050:12 | a | test.cpp:1052:9:1052:9 | a | diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 24501a4bcae..87179ad8bf8 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -1728,6 +1728,386 @@ complex.c: # 144| Type = [LongDoubleType] long double # 144| ValueCategory = prvalue # 145| getStmt(72): [ReturnStmt] return ... +destructors_for_temps.cpp: +# 1| [CopyAssignmentOperator] ClassWithDestructor2& ClassWithDestructor2::operator=(ClassWithDestructor2 const&) +# 1| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithDestructor2 & +# 1| [CopyConstructor] void ClassWithDestructor2::ClassWithDestructor2(ClassWithDestructor2 const&) +# 1| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithDestructor2 & +# 3| [Constructor] void ClassWithDestructor2::ClassWithDestructor2() +# 3| : +# 4| [Destructor] void ClassWithDestructor2::~ClassWithDestructor2() +# 4| : +# 6| [MemberFunction] char ClassWithDestructor2::get_x() +# 6| : +# 9| [CopyAssignmentOperator] ClassWithConstructor& ClassWithConstructor::operator=(ClassWithConstructor const&) +# 9| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithConstructor & +# 9| [MoveAssignmentOperator] ClassWithConstructor& ClassWithConstructor::operator=(ClassWithConstructor&&) +# 9| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] ClassWithConstructor && +# 9| [CopyConstructor] void ClassWithConstructor::ClassWithConstructor(ClassWithConstructor const&) +# 9| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithConstructor & +# 9| [MoveConstructor] void ClassWithConstructor::ClassWithConstructor(ClassWithConstructor&&) +# 9| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] ClassWithConstructor && +# 9| : +# 9| getEntryPoint(): [BlockStmt] { ... } +# 9| getStmt(0): [ReturnStmt] return ... +# 11| [Constructor] void ClassWithConstructor::ClassWithConstructor(char, char) +# 11| : +# 11| getParameter(0): [Parameter] x +# 11| Type = [PlainCharType] char +# 11| getParameter(1): [Parameter] y +# 11| Type = [PlainCharType] char +# 14| [TopLevelFunction] char temp_test() +# 14| : +# 14| getEntryPoint(): [BlockStmt] { ... } +# 15| getStmt(0): [DeclStmt] declaration +# 15| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 15| Type = [PlainCharType] char +# 15| getVariable().getInitializer(): [Initializer] initializer for x +# 15| getExpr(): [FunctionCall] call to get_x +# 15| Type = [PlainCharType] char +# 15| ValueCategory = prvalue +# 15| getQualifier(): [ConstructorCall] call to ClassWithDestructor2 +# 15| Type = [VoidType] void +# 15| ValueCategory = prvalue +# 15| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 15| Type = [Class] ClassWithDestructor2 +# 15| ValueCategory = prvalue(load) +# 16| getStmt(1): [DeclStmt] declaration +# 16| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 16| Type = [Class] ClassWithConstructor +# 16| getVariable().getInitializer(): [Initializer] initializer for y +# 16| getExpr(): [ConstructorCall] call to ClassWithConstructor +# 16| Type = [VoidType] void +# 16| ValueCategory = prvalue +# 16| getArgument(0): [CharLiteral] 97 +# 16| Type = [PlainCharType] char +# 16| Value = [CharLiteral] 97 +# 16| ValueCategory = prvalue +# 16| getArgument(1): [FunctionCall] call to get_x +# 16| Type = [PlainCharType] char +# 16| ValueCategory = prvalue +# 16| getQualifier(): [ConstructorCall] call to ClassWithDestructor2 +# 16| Type = [VoidType] void +# 16| ValueCategory = prvalue +# 16| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 16| Type = [Class] ClassWithDestructor2 +# 16| ValueCategory = prvalue(load) +# 17| getStmt(2): [ReturnStmt] return ... +# 17| getExpr(): [FunctionCall] call to get_x +# 17| Type = [PlainCharType] char +# 17| ValueCategory = prvalue +# 17| getQualifier(): [ConstructorCall] call to ClassWithDestructor2 +# 17| Type = [VoidType] void +# 17| ValueCategory = prvalue +# 17| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 17| Type = [Class] ClassWithDestructor2 +# 17| ValueCategory = prvalue(load) +# 21| [TopLevelFunction] char temp_test2() +# 21| : +# 21| getEntryPoint(): [BlockStmt] { ... } +# 22| getStmt(0): [ExprStmt] ExprStmt +# 22| getExpr(): [NewExpr] new +# 22| Type = [PointerType] ClassWithDestructor2 * +# 22| ValueCategory = prvalue +# 22| getInitializer(): [ConstructorCall] call to ClassWithDestructor2 +# 22| Type = [VoidType] void +# 22| ValueCategory = prvalue +# 23| getStmt(1): [ReturnStmt] return ... +# 23| getExpr(): [AddExpr] ... + ... +# 23| Type = [IntType] int +# 23| ValueCategory = prvalue +# 23| getLeftOperand(): [FunctionCall] call to get_x +# 23| Type = [PlainCharType] char +# 23| ValueCategory = prvalue +# 23| getQualifier(): [ConstructorCall] call to ClassWithDestructor2 +# 23| Type = [VoidType] void +# 23| ValueCategory = prvalue +# 23| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 23| Type = [Class] ClassWithDestructor2 +# 23| ValueCategory = prvalue(load) +# 23| getRightOperand(): [FunctionCall] call to get_x +# 23| Type = [PlainCharType] char +# 23| ValueCategory = prvalue +# 23| getQualifier(): [ConstructorCall] call to ClassWithDestructor2 +# 23| Type = [VoidType] void +# 23| ValueCategory = prvalue +# 23| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 23| Type = [Class] ClassWithDestructor2 +# 23| ValueCategory = prvalue(load) +# 23| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... +# 23| Conversion = [IntegralConversion] integral conversion +# 23| Type = [IntType] int +# 23| ValueCategory = prvalue +# 23| getRightOperand().getFullyConverted(): [CStyleCast] (int)... +# 23| Conversion = [IntegralConversion] integral conversion +# 23| Type = [IntType] int +# 23| ValueCategory = prvalue +# 23| getExpr().getFullyConverted(): [CStyleCast] (char)... +# 23| Conversion = [IntegralConversion] integral conversion +# 23| Type = [PlainCharType] char +# 23| ValueCategory = prvalue +# 27| [FunctionTemplateInstantiation,TopLevelFunction] ClassWithDestructor2 returnValue() +# 27| : +# 27| [TemplateFunction,TopLevelFunction] T returnValue() +# 27| : +# 29| [TopLevelFunction] void temp_test3() +# 29| : +# 29| getEntryPoint(): [BlockStmt] { ... } +# 30| getStmt(0): [DeclStmt] declaration +# 30| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rs +# 30| Type = [LValueReferenceType] const ClassWithDestructor2 & +# 30| getVariable().getInitializer(): [Initializer] initializer for rs +# 30| getExpr(): [FunctionCall] call to returnValue +# 30| Type = [Class] ClassWithDestructor2 +# 30| ValueCategory = prvalue +# 30| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 30| Type = [LValueReferenceType] const ClassWithDestructor2 & +# 30| ValueCategory = prvalue +# 30| getExpr(): [CStyleCast] (const ClassWithDestructor2)... +# 30| Conversion = [GlvalueConversion] glvalue conversion +# 30| Type = [SpecifiedType] const ClassWithDestructor2 +# 30| ValueCategory = lvalue +# 30| getExpr(): [TemporaryObjectExpr] temporary object +# 30| Type = [Class] ClassWithDestructor2 +# 30| ValueCategory = lvalue +# 31| getStmt(1): [ReturnStmt] return ... +# 31| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 31| Type = [VoidType] void +# 31| ValueCategory = prvalue +# 31| getQualifier(): [ReuseExpr] reuse of temporary object +# 31| Type = [Class] ClassWithDestructor2 +# 31| ValueCategory = xvalue +# 33| [TopLevelFunction] void temp_test4() +# 33| : +# 33| getEntryPoint(): [BlockStmt] { ... } +# 34| getStmt(0): [DeclStmt] declaration +# 34| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 34| Type = [Class] ClassWithDestructor2 +# 34| getVariable().getInitializer(): [Initializer] initializer for c +# 34| getExpr(): [ConstructorCall] call to ClassWithDestructor2 +# 34| Type = [VoidType] void +# 34| ValueCategory = prvalue +# 35| getStmt(1): [DeclStmt] declaration +# 35| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rs2 +# 35| Type = [LValueReferenceType] const ClassWithDestructor2 & +# 35| getVariable().getInitializer(): [Initializer] initializer for rs2 +# 35| getExpr(): [FunctionCall] call to returnValue +# 35| Type = [Class] ClassWithDestructor2 +# 35| ValueCategory = prvalue +# 35| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 35| Type = [LValueReferenceType] const ClassWithDestructor2 & +# 35| ValueCategory = prvalue +# 35| getExpr(): [CStyleCast] (const ClassWithDestructor2)... +# 35| Conversion = [GlvalueConversion] glvalue conversion +# 35| Type = [SpecifiedType] const ClassWithDestructor2 +# 35| ValueCategory = lvalue +# 35| getExpr(): [TemporaryObjectExpr] temporary object +# 35| Type = [Class] ClassWithDestructor2 +# 35| ValueCategory = lvalue +# 36| getStmt(2): [ReturnStmt] return ... +# 36| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 36| Type = [VoidType] void +# 36| ValueCategory = prvalue +# 36| getQualifier(): [ReuseExpr] reuse of temporary object +# 36| Type = [Class] ClassWithDestructor2 +# 36| ValueCategory = xvalue +# 36| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor2 +# 36| Type = [VoidType] void +# 36| ValueCategory = prvalue +# 36| getQualifier(): [VariableAccess] c +# 36| Type = [Class] ClassWithDestructor2 +# 36| ValueCategory = lvalue +# 38| [TopLevelFunction] void temp_test5(bool) +# 38| : +# 38| getParameter(0): [Parameter] b +# 38| Type = [BoolType] bool +# 38| getEntryPoint(): [BlockStmt] { ... } +# 39| getStmt(0): [ExprStmt] ExprStmt +# 39| getExpr(): [ConditionalExpr] ... ? ... : ... +# 39| Type = [Class] ClassWithDestructor2 +# 39| ValueCategory = prvalue +# 39| getCondition(): [VariableAccess] b +# 39| Type = [BoolType] bool +# 39| ValueCategory = prvalue(load) +# 39| getThen(): [ConstructorCall] call to ClassWithDestructor2 +# 39| Type = [VoidType] void +# 39| ValueCategory = prvalue +# 39| getElse(): [ConstructorCall] call to ClassWithDestructor2 +# 39| Type = [VoidType] void +# 39| ValueCategory = prvalue +# 39| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 39| Type = [Class] ClassWithDestructor2 +# 39| ValueCategory = prvalue(load) +# 39| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 39| Type = [Class] ClassWithDestructor2 +# 39| ValueCategory = prvalue(load) +# 39| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 39| Type = [Class] ClassWithDestructor2 +# 39| ValueCategory = prvalue +# 40| getStmt(1): [ReturnStmt] return ... +# 42| [TopLevelFunction] void temp_test6(bool) +# 42| : +# 42| getParameter(0): [Parameter] b +# 42| Type = [BoolType] bool +# 42| getEntryPoint(): [BlockStmt] { ... } +# 43| getStmt(0): [DeclStmt] declaration +# 43| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 43| Type = [Class] ClassWithDestructor2 +# 43| getVariable().getInitializer(): [Initializer] initializer for c +# 43| getExpr(): [ConstructorCall] call to ClassWithDestructor2 +# 43| Type = [VoidType] void +# 43| ValueCategory = prvalue +# 44| getStmt(1): [IfStmt] if (...) ... +# 44| getCondition(): [VariableAccess] b +# 44| Type = [BoolType] bool +# 44| ValueCategory = prvalue(load) +# 44| getThen(): [BlockStmt] { ... } +# 45| getStmt(0): [ExprStmt] ExprStmt +# 45| getExpr(): [ThrowExpr] throw ... +# 45| Type = [Class] ClassWithConstructor +# 45| ValueCategory = prvalue +# 45| getExpr(): [ConstructorCall] call to ClassWithConstructor +# 45| Type = [VoidType] void +# 45| ValueCategory = prvalue +# 45| getArgument(0): [CharLiteral] 120 +# 45| Type = [PlainCharType] char +# 45| Value = [CharLiteral] 120 +# 45| ValueCategory = prvalue +# 45| getArgument(1): [FunctionCall] call to get_x +# 45| Type = [PlainCharType] char +# 45| ValueCategory = prvalue +# 45| getQualifier(): [ConstructorCall] call to ClassWithDestructor2 +# 45| Type = [VoidType] void +# 45| ValueCategory = prvalue +# 45| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 45| Type = [Class] ClassWithDestructor2 +# 45| ValueCategory = prvalue(load) +# 47| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 47| Type = [VoidType] void +# 47| ValueCategory = prvalue +# 47| getQualifier(): [VariableAccess] c +# 47| Type = [Class] ClassWithDestructor2 +# 47| ValueCategory = lvalue +# 47| getStmt(2): [ReturnStmt] return ... +# 47| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 47| Type = [VoidType] void +# 47| ValueCategory = prvalue +# 47| getQualifier(): [VariableAccess] c +# 47| Type = [Class] ClassWithDestructor2 +# 47| ValueCategory = lvalue +# 49| [TopLevelFunction] void temp_test7(bool) +# 49| : +# 49| getParameter(0): [Parameter] b +# 49| Type = [BoolType] bool +# 49| getEntryPoint(): [BlockStmt] { ... } +# 50| getStmt(0): [DeclStmt] declaration +# 50| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 50| Type = [Class] ClassWithDestructor2 +# 50| getVariable().getInitializer(): [Initializer] initializer for c +# 50| getExpr(): [ConstructorCall] call to ClassWithDestructor2 +# 50| Type = [VoidType] void +# 50| ValueCategory = prvalue +# 51| getStmt(1): [ExprStmt] ExprStmt +# 51| getExpr(): [ConditionalExpr] ... ? ... : ... +# 51| Type = [Class] ClassWithDestructor2 +# 51| ValueCategory = prvalue(load) +# 51| getCondition(): [VariableAccess] b +# 51| Type = [BoolType] bool +# 51| ValueCategory = prvalue(load) +# 51| getThen(): [ThrowExpr] throw ... +# 51| Type = [Class] ClassWithConstructor +# 51| ValueCategory = prvalue +# 51| getExpr(): [ConstructorCall] call to ClassWithConstructor +# 51| Type = [VoidType] void +# 51| ValueCategory = prvalue +# 51| getArgument(0): [CharLiteral] 120 +# 51| Type = [PlainCharType] char +# 51| Value = [CharLiteral] 120 +# 51| ValueCategory = prvalue +# 51| getArgument(1): [FunctionCall] call to get_x +# 51| Type = [PlainCharType] char +# 51| ValueCategory = prvalue +# 51| getQualifier(): [ConstructorCall] call to ClassWithDestructor2 +# 51| Type = [VoidType] void +# 51| ValueCategory = prvalue +# 51| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 51| Type = [Class] ClassWithDestructor2 +# 51| ValueCategory = prvalue(load) +# 52| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 52| Type = [VoidType] void +# 52| ValueCategory = prvalue +# 52| getQualifier(): [VariableAccess] c +# 52| Type = [Class] ClassWithDestructor2 +# 52| ValueCategory = lvalue +# 51| getElse(): [ConstructorCall] call to ClassWithDestructor2 +# 51| Type = [VoidType] void +# 51| ValueCategory = prvalue +# 51| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 51| Type = [Class] ClassWithDestructor2 +# 51| ValueCategory = prvalue(load) +# 51| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 51| Type = [Class] ClassWithDestructor2 +# 51| ValueCategory = prvalue +# 52| getStmt(2): [ReturnStmt] return ... +# 52| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor2 +# 52| Type = [VoidType] void +# 52| ValueCategory = prvalue +# 52| getQualifier(): [VariableAccess] c +# 52| Type = [Class] ClassWithDestructor2 +# 52| ValueCategory = lvalue +# 54| [TopLevelFunction] void temp_test8(bool) +# 54| : +# 54| getParameter(0): [Parameter] b +# 54| Type = [BoolType] bool +# 54| getEntryPoint(): [BlockStmt] { ... } +# 55| getStmt(0): [ExprStmt] ExprStmt +# 55| getExpr(): [ConditionalExpr] ... ? ... : ... +# 55| Type = [Class] ClassWithDestructor2 +# 55| ValueCategory = prvalue(load) +# 55| getCondition(): [VariableAccess] b +# 55| Type = [BoolType] bool +# 55| ValueCategory = prvalue(load) +# 55| getThen(): [ThrowExpr] throw ... +# 55| Type = [Class] ClassWithConstructor +# 55| ValueCategory = prvalue +# 55| getExpr(): [ConstructorCall] call to ClassWithConstructor +# 55| Type = [VoidType] void +# 55| ValueCategory = prvalue +# 55| getArgument(0): [CharLiteral] 120 +# 55| Type = [PlainCharType] char +# 55| Value = [CharLiteral] 120 +# 55| ValueCategory = prvalue +# 55| getArgument(1): [FunctionCall] call to get_x +# 55| Type = [PlainCharType] char +# 55| ValueCategory = prvalue +# 55| getQualifier(): [ConstructorCall] call to ClassWithDestructor2 +# 55| Type = [VoidType] void +# 55| ValueCategory = prvalue +# 55| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 55| Type = [Class] ClassWithDestructor2 +# 55| ValueCategory = prvalue(load) +# 55| getElse(): [ConstructorCall] call to ClassWithDestructor2 +# 55| Type = [VoidType] void +# 55| ValueCategory = prvalue +# 55| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 55| Type = [Class] ClassWithDestructor2 +# 55| ValueCategory = prvalue(load) +# 55| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 55| Type = [Class] ClassWithDestructor2 +# 55| ValueCategory = prvalue +# 56| getStmt(1): [ReturnStmt] return ... ir.c: # 5| [TopLevelFunction] int getX(MyCoords*) # 5| : @@ -9382,2301 +9762,2431 @@ ir.cpp: # 1054| getRightOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 1054| Type = [IntType] int # 1054| ValueCategory = prvalue(load) -# 1059| [CopyAssignmentOperator] vector& vector::operator=(vector const&) -# 1059| : +# 1078| [CopyAssignmentOperator] std::iterator& std::iterator::operator=(std::iterator const&) +# 1078| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const iterator & +# 1078| [CopyAssignmentOperator] std::iterator& std::iterator::operator=(std::iterator const&) +# 1078| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const iterator & +# 1078| [CopyAssignmentOperator] std::iterator& std::iterator::operator=(std::iterator const&) +# 1078| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const iterator & +# 1081| [Constructor] void std::iterator::iterator() +# 1081| : +# 1082| [Constructor] void std::iterator::iterator(std::iterator const&) +# 1082| : +# 1082| getParameter(0): [Parameter] other +# 1082| Type = [LValueReferenceType] const iterator & +# 1082| [CopyConstructor] void std::iterator::iterator(std::iterator const&) +# 1082| : +# 1082| getParameter(0): [Parameter] other +# 1082| Type = [LValueReferenceType] const iterator & +# 1082| [CopyConstructor] void std::iterator::iterator(std::iterator const&) +# 1082| : +# 1082| getParameter(0): [Parameter] other +# 1082| Type = [LValueReferenceType] const iterator & +# 1082| [CopyConstructor] void std::iterator::iterator(std::iterator const&) +# 1082| : +# 1082| getParameter(0): [Parameter] other +# 1082| Type = [LValueReferenceType] const iterator & +# 1084| [MemberFunction] std::iterator& std::iterator::operator++() +# 1084| : +# 1084| [MemberFunction] std::iterator& std::iterator::operator++() +# 1084| : +# 1084| [MemberFunction] std::iterator& std::iterator::operator++() +# 1084| : +# 1084| [MemberFunction] std::iterator& std::iterator::operator++() +# 1084| : +# 1085| [MemberFunction] std::iterator std::iterator::operator++(int) +# 1085| : +# 1085| getParameter(0): [Parameter] (unnamed parameter 0) +# 1085| Type = [IntType] int +# 1086| [MemberFunction] std::iterator& std::iterator::operator--() +# 1086| : +# 1087| [MemberFunction] std::iterator std::iterator::operator--(int) +# 1087| : +# 1087| getParameter(0): [Parameter] (unnamed parameter 0) +# 1087| Type = [IntType] int +# 1088| [ConstMemberFunction] bool std::iterator::operator==(std::iterator) const +# 1088| : +# 1088| getParameter(0): [Parameter] other +# 1088| Type = [TemplateClass] iterator +# 1089| [ConstMemberFunction] bool std::iterator::operator!=(std::iterator) const +# 1089| : +# 1089| getParameter(0): [Parameter] other +# 1089| Type = [TemplateClass] iterator +# 1089| [ConstMemberFunction] bool std::iterator::operator!=(std::iterator) const +# 1089| : +# 1089| getParameter(0): [Parameter] other +# 1089| Type = [ClassTemplateInstantiation,Struct] iterator +# 1089| [ConstMemberFunction] bool std::iterator::operator!=(std::iterator) const +# 1089| : +# 1089| getParameter(0): [Parameter] other +# 1089| Type = [ClassTemplateInstantiation,Struct] iterator +# 1089| [ConstMemberFunction] bool std::iterator::operator!=(std::iterator) const +# 1089| : +# 1089| getParameter(0): [Parameter] other +# 1089| Type = [ClassTemplateInstantiation,Struct] iterator +# 1090| [ConstMemberFunction] ClassWithDestructor& std::iterator::operator*() const +# 1090| : +# 1090| [ConstMemberFunction] String& std::iterator::operator*() const +# 1090| : +# 1090| [ConstMemberFunction] int& std::iterator::operator*() const +# 1090| : +# 1090| [ConstMemberFunction] reference_type std::iterator::operator*() const +# 1090| : +# 1091| [ConstMemberFunction] pointer_type std::iterator::operator->() const +# 1091| : +# 1092| [MemberFunction] std::iterator std::iterator::operator+(int) +# 1092| : +# 1092| getParameter(0): [Parameter] (unnamed parameter 0) +# 1092| Type = [IntType] int +# 1093| [MemberFunction] std::iterator std::iterator::operator-(int) +# 1093| : +# 1093| getParameter(0): [Parameter] (unnamed parameter 0) +# 1093| Type = [IntType] int +# 1094| [MemberFunction] std::iterator& std::iterator::operator+=(int) +# 1094| : +# 1094| getParameter(0): [Parameter] (unnamed parameter 0) +# 1094| Type = [IntType] int +# 1095| [MemberFunction] std::iterator& std::iterator::operator-=(int) +# 1095| : +# 1095| getParameter(0): [Parameter] (unnamed parameter 0) +# 1095| Type = [IntType] int +# 1096| [MemberFunction] int std::iterator::operator-(std::iterator) +# 1096| : +# 1096| getParameter(0): [Parameter] (unnamed parameter 0) +# 1096| Type = [TemplateClass] iterator +# 1097| [MemberFunction] reference_type std::iterator::operator[](int) +# 1097| : +# 1097| getParameter(0): [Parameter] (unnamed parameter 0) +# 1097| Type = [IntType] int +# 1100| [CopyAssignmentOperator] std::input_iterator_tag& std::input_iterator_tag::operator=(std::input_iterator_tag const&) +# 1100| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const input_iterator_tag & +# 1100| [MoveAssignmentOperator] std::input_iterator_tag& std::input_iterator_tag::operator=(std::input_iterator_tag&&) +# 1100| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] input_iterator_tag && +# 1101| [CopyAssignmentOperator] std::forward_iterator_tag& std::forward_iterator_tag::operator=(std::forward_iterator_tag const&) +# 1101| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const forward_iterator_tag & +# 1101| [MoveAssignmentOperator] std::forward_iterator_tag& std::forward_iterator_tag::operator=(std::forward_iterator_tag&&) +# 1101| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] forward_iterator_tag && +# 1101| [Constructor] void std::forward_iterator_tag::forward_iterator_tag() +# 1101| : +# 1102| [CopyAssignmentOperator] std::bidirectional_iterator_tag& std::bidirectional_iterator_tag::operator=(std::bidirectional_iterator_tag const&) +# 1102| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const bidirectional_iterator_tag & +# 1102| [MoveAssignmentOperator] std::bidirectional_iterator_tag& std::bidirectional_iterator_tag::operator=(std::bidirectional_iterator_tag&&) +# 1102| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] bidirectional_iterator_tag && +# 1102| [Constructor] void std::bidirectional_iterator_tag::bidirectional_iterator_tag() +# 1102| : +# 1103| [CopyAssignmentOperator] std::random_access_iterator_tag& std::random_access_iterator_tag::operator=(std::random_access_iterator_tag const&) +# 1103| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const random_access_iterator_tag & +# 1103| [MoveAssignmentOperator] std::random_access_iterator_tag& std::random_access_iterator_tag::operator=(std::random_access_iterator_tag&&) +# 1103| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] random_access_iterator_tag && +# 1103| [Constructor] void std::random_access_iterator_tag::random_access_iterator_tag() +# 1103| : +# 1105| [CopyAssignmentOperator] std::output_iterator_tag& std::output_iterator_tag::operator=(std::output_iterator_tag const&) +# 1105| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const output_iterator_tag & +# 1105| [MoveAssignmentOperator] std::output_iterator_tag& std::output_iterator_tag::operator=(std::output_iterator_tag&&) +# 1105| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] output_iterator_tag && +# 1108| [CopyAssignmentOperator] std::vector& std::vector::operator=(std::vector const&) +# 1108| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const vector & -# 1059| [CopyAssignmentOperator] vector& vector::operator=(vector const&) -# 1059| : +# 1108| [CopyAssignmentOperator] std::vector& std::vector::operator=(std::vector const&) +# 1108| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const vector & -# 1059| [CopyAssignmentOperator] vector& vector::operator=(vector const&) -# 1059| : +# 1108| [CopyAssignmentOperator] std::vector& std::vector::operator=(std::vector const&) +# 1108| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const vector & -# 1059| [CopyConstructor] void vector::vector(vector const&) -# 1059| : +# 1108| [CopyConstructor] void std::vector::vector(std::vector const&) +# 1108| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const vector & -# 1059| [CopyConstructor] void vector::vector(vector const&) -# 1059| : +# 1108| [CopyConstructor] void std::vector::vector(std::vector const&) +# 1108| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const vector & -# 1059| [CopyConstructor] void vector::vector(vector const&) -# 1059| : +# 1108| [CopyConstructor] void std::vector::vector(std::vector const&) +# 1108| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const vector & -# 1060| [CopyAssignmentOperator] vector::iterator& vector::iterator::operator=(vector::iterator const public&) -# 1060| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const iterator & -# 1060| [MoveAssignmentOperator] vector::iterator& vector::iterator::operator=(vector::iterator&&) -# 1060| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] iterator && -# 1060| [CopyAssignmentOperator] vector::iterator& vector::iterator::operator=(vector::iterator const public&) -# 1060| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const iterator & -# 1060| [MoveAssignmentOperator] vector::iterator& vector::iterator::operator=(vector::iterator&&) -# 1060| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] iterator && -# 1060| [CopyAssignmentOperator] vector::iterator& vector::iterator::operator=(vector::iterator const public&) -# 1060| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const iterator & -# 1060| [MoveAssignmentOperator] vector::iterator& vector::iterator::operator=(vector::iterator&&) -# 1060| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] iterator && -# 1062| [MemberFunction] vector::iterator& vector::iterator::operator++() -# 1062| : -# 1062| [MemberFunction] vector::iterator& vector::iterator::operator++() -# 1062| : -# 1062| [MemberFunction] vector::iterator& vector::iterator::operator++() -# 1062| : -# 1062| [MemberFunction] vector::iterator& vector::iterator::operator++() -# 1062| : -# 1063| [ConstMemberFunction] ClassWithDestructor& vector::iterator::operator*() const -# 1063| : -# 1063| [ConstMemberFunction] String& vector::iterator::operator*() const -# 1063| : -# 1063| [ConstMemberFunction] T& vector::iterator::operator*() const -# 1063| : -# 1063| [ConstMemberFunction] int& vector::iterator::operator*() const -# 1063| : -# 1065| [ConstMemberFunction] bool vector::iterator::operator!=(vector::iterator) const -# 1065| : -# 1065| getParameter(0): [Parameter] right -# 1065| Type = [NestedStruct] iterator -# 1065| [ConstMemberFunction] bool vector::iterator::operator!=(vector::iterator) const -# 1065| : -# 1065| getParameter(0): [Parameter] right -# 1065| Type = [NestedStruct] iterator -# 1065| [ConstMemberFunction] bool vector::iterator::operator!=(vector::iterator) const -# 1065| : -# 1065| getParameter(0): [Parameter] right -# 1065| Type = [NestedClass,TemplateClass] iterator -# 1065| [ConstMemberFunction] bool vector::iterator::operator!=(vector::iterator) const -# 1065| : -# 1065| getParameter(0): [Parameter] right -# 1065| Type = [NestedStruct] iterator -# 1068| [Constructor] void vector::vector(ClassWithDestructor) -# 1068| : -# 1068| getParameter(0): [Parameter] (unnamed parameter 0) -# 1068| Type = [Class] ClassWithDestructor -# 1068| [Constructor] void vector::vector(String) -# 1068| : -# 1068| getParameter(0): [Parameter] (unnamed parameter 0) -# 1068| Type = [Struct] String -# 1068| [Constructor] void vector::vector(T) -# 1068| : -# 1068| getParameter(0): [Parameter] (unnamed parameter 0) -# 1068| Type = [TemplateParameter] T -# 1068| [Constructor] void vector::vector(int) -# 1068| : -# 1068| getParameter(0): [Parameter] (unnamed parameter 0) -# 1068| Type = [IntType] int -# 1069| [Destructor] void vector::~vector() -# 1069| : -# 1069| [Destructor] void vector::~vector() -# 1069| : -# 1069| [Destructor] void vector::~vector() -# 1069| : -# 1070| [ConstMemberFunction] vector::iterator vector::begin() const -# 1070| : -# 1070| [ConstMemberFunction] vector::iterator vector::begin() const -# 1070| : -# 1070| [ConstMemberFunction] vector::iterator vector::begin() const -# 1070| : -# 1070| [ConstMemberFunction] vector::iterator vector::begin() const -# 1070| : -# 1071| [ConstMemberFunction] vector::iterator vector::end() const -# 1071| : -# 1071| [ConstMemberFunction] vector::iterator vector::end() const -# 1071| : -# 1071| [ConstMemberFunction] vector::iterator vector::end() const -# 1071| : -# 1071| [ConstMemberFunction] vector::iterator vector::end() const -# 1071| : -# 1075| [Operator,TemplateFunction,TopLevelFunction] bool operator==(iterator, iterator) -# 1075| : -# 1075| getParameter(0): [Parameter] left -# 1075| Type = [TemplateParameter] iterator -# 1075| getParameter(1): [Parameter] right -# 1075| Type = [TemplateParameter] iterator -# 1077| [Operator,TemplateFunction,TopLevelFunction] bool operator!=(iterator, iterator) -# 1077| : -# 1077| getParameter(0): [Parameter] left -# 1077| Type = [TemplateParameter] iterator -# 1077| getParameter(1): [Parameter] right -# 1077| Type = [TemplateParameter] iterator -# 1079| [TopLevelFunction] void RangeBasedFor(vector const&) -# 1079| : -# 1079| getParameter(0): [Parameter] v -# 1079| Type = [LValueReferenceType] const vector & -# 1079| getEntryPoint(): [BlockStmt] { ... } -# 1080| getStmt(0): [RangeBasedForStmt] for(...:...) ... -# 1080| getChild(1): [DeclStmt] declaration -# 1080| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) -# 1080| Type = [LValueReferenceType] const vector & -#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 1080| getExpr(): [VariableAccess] v -# 1080| Type = [LValueReferenceType] const vector & -# 1080| ValueCategory = prvalue(load) -# 1080| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1080| Type = [LValueReferenceType] const vector & -# 1080| ValueCategory = prvalue -# 1080| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1080| Type = [SpecifiedType] const vector -# 1080| ValueCategory = lvalue -# 1080| getBeginEndDeclaration(): [DeclStmt] declaration -# 1080| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) -# 1080| Type = [NestedStruct] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) -# 1080| getExpr(): [FunctionCall] call to begin -# 1080| Type = [NestedStruct] iterator -# 1080| ValueCategory = prvalue -# 1080| getQualifier(): [VariableAccess] (__range) -# 1080| Type = [LValueReferenceType] const vector & -# 1080| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -# 1080| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) -# 1080| Type = [NestedStruct] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) -# 1080| getExpr(): [FunctionCall] call to end -# 1080| Type = [NestedStruct] iterator -# 1080| ValueCategory = prvalue -# 1080| getQualifier(): [VariableAccess] (__range) -# 1080| Type = [LValueReferenceType] const vector & -# 1080| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -# 1080| getCondition(): [FunctionCall] call to operator!= -# 1080| Type = [BoolType] bool -# 1080| ValueCategory = prvalue -# 1080| getQualifier(): [VariableAccess] (__begin) -# 1080| Type = [NestedStruct] iterator -# 1080| ValueCategory = lvalue -# 1080| getArgument(0): [VariableAccess] (__end) -# 1080| Type = [NestedStruct] iterator -# 1080| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -# 1080| getUpdate(): [FunctionCall] call to operator++ -# 1080| Type = [LValueReferenceType] iterator & -# 1080| ValueCategory = prvalue -# 1080| getQualifier(): [VariableAccess] (__begin) -# 1080| Type = [NestedStruct] iterator -# 1080| ValueCategory = lvalue -# 1080| getChild(5): [DeclStmt] declaration -# 1080| getDeclarationEntry(0): [VariableDeclarationEntry] definition of e -# 1080| Type = [IntType] int -# 1080| getVariable().getInitializer(): [Initializer] initializer for e -# 1080| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* -# 1080| Type = [LValueReferenceType] int & -# 1080| ValueCategory = prvalue -# 1080| getQualifier(): [VariableAccess] (__begin) -# 1080| Type = [NestedStruct] iterator -# 1080| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -# 1080| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1080| Type = [IntType] int -# 1080| ValueCategory = prvalue(load) -# 1080| getStmt(): [BlockStmt] { ... } -# 1081| getStmt(0): [IfStmt] if (...) ... -# 1081| getCondition(): [GTExpr] ... > ... -# 1081| Type = [BoolType] bool -# 1081| ValueCategory = prvalue -# 1081| getGreaterOperand(): [VariableAccess] e -# 1081| Type = [IntType] int -# 1081| ValueCategory = prvalue(load) -# 1081| getLesserOperand(): [Literal] 0 -# 1081| Type = [IntType] int -# 1081| Value = [Literal] 0 -# 1081| ValueCategory = prvalue -# 1081| getThen(): [BlockStmt] { ... } -# 1082| getStmt(0): [ContinueStmt] continue; -# 1080| getStmt(1): [LabelStmt] label ...: -# 1080| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1080| Type = [NestedStruct] iterator -# 1080| ValueCategory = lvalue -# 1086| getStmt(1): [RangeBasedForStmt] for(...:...) ... -# 1086| getChild(1): [DeclStmt] declaration -# 1086| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) -# 1086| Type = [LValueReferenceType] const vector & -#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 1086| getExpr(): [VariableAccess] v -# 1086| Type = [LValueReferenceType] const vector & -# 1086| ValueCategory = prvalue(load) -# 1086| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1086| Type = [LValueReferenceType] const vector & -# 1086| ValueCategory = prvalue -# 1086| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1086| Type = [SpecifiedType] const vector -# 1086| ValueCategory = lvalue -# 1086| getBeginEndDeclaration(): [DeclStmt] declaration -# 1086| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) -# 1086| Type = [NestedStruct] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) -# 1086| getExpr(): [FunctionCall] call to begin -# 1086| Type = [NestedStruct] iterator -# 1086| ValueCategory = prvalue -# 1086| getQualifier(): [VariableAccess] (__range) -# 1086| Type = [LValueReferenceType] const vector & -# 1086| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -# 1086| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) -# 1086| Type = [NestedStruct] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) -# 1086| getExpr(): [FunctionCall] call to end -# 1086| Type = [NestedStruct] iterator -# 1086| ValueCategory = prvalue -# 1086| getQualifier(): [VariableAccess] (__range) -# 1086| Type = [LValueReferenceType] const vector & -# 1086| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -# 1086| getCondition(): [FunctionCall] call to operator!= -# 1086| Type = [BoolType] bool -# 1086| ValueCategory = prvalue -# 1086| getQualifier(): [VariableAccess] (__begin) -# 1086| Type = [NestedStruct] iterator -# 1086| ValueCategory = lvalue -# 1086| getArgument(0): [VariableAccess] (__end) -# 1086| Type = [NestedStruct] iterator -# 1086| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -# 1086| getUpdate(): [FunctionCall] call to operator++ -# 1086| Type = [LValueReferenceType] iterator & -# 1086| ValueCategory = prvalue -# 1086| getQualifier(): [VariableAccess] (__begin) -# 1086| Type = [NestedStruct] iterator -# 1086| ValueCategory = lvalue -# 1086| getChild(5): [DeclStmt] declaration -# 1086| getDeclarationEntry(0): [VariableDeclarationEntry] definition of e -# 1086| Type = [LValueReferenceType] const int & -# 1086| getVariable().getInitializer(): [Initializer] initializer for e -# 1086| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* -# 1086| Type = [LValueReferenceType] int & -# 1086| ValueCategory = prvalue -# 1086| getQualifier(): [VariableAccess] (__begin) -# 1086| Type = [NestedStruct] iterator -# 1086| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -# 1086| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1086| Type = [LValueReferenceType] const int & -# 1086| ValueCategory = prvalue -# 1086| getExpr(): [CStyleCast] (const int)... -# 1086| Conversion = [GlvalueConversion] glvalue conversion -# 1086| Type = [SpecifiedType] const int -# 1086| ValueCategory = lvalue -# 1086| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1086| Type = [IntType] int -# 1086| ValueCategory = lvalue -# 1086| getStmt(): [BlockStmt] { ... } -# 1087| getStmt(0): [IfStmt] if (...) ... -# 1087| getCondition(): [LTExpr] ... < ... -# 1087| Type = [BoolType] bool -# 1087| ValueCategory = prvalue -# 1087| getLesserOperand(): [VariableAccess] e -# 1087| Type = [LValueReferenceType] const int & -# 1087| ValueCategory = prvalue(load) -# 1087| getGreaterOperand(): [Literal] 5 -# 1087| Type = [IntType] int -# 1087| Value = [Literal] 5 -# 1087| ValueCategory = prvalue -# 1087| getLesserOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1087| Type = [IntType] int -# 1087| ValueCategory = prvalue(load) -# 1087| getThen(): [BlockStmt] { ... } -# 1088| getStmt(0): [BreakStmt] break; -# 1086| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1086| Type = [NestedStruct] iterator -# 1086| ValueCategory = lvalue -# 1090| getStmt(2): [LabelStmt] label ...: -# 1091| getStmt(3): [ReturnStmt] return ... -# 1110| [TopLevelFunction] int AsmStmt(int) +# 1109| [Constructor] void std::vector::vector(ClassWithDestructor) +# 1109| : +# 1109| getParameter(0): [Parameter] (unnamed parameter 0) +# 1109| Type = [Class] ClassWithDestructor +# 1109| [Constructor] void std::vector::vector(String) +# 1109| : +# 1109| getParameter(0): [Parameter] (unnamed parameter 0) +# 1109| Type = [Struct] String +# 1109| [Constructor] void std::vector::vector(T) +# 1109| : +# 1109| getParameter(0): [Parameter] (unnamed parameter 0) +# 1109| Type = [TemplateParameter] T +# 1109| [Constructor] void std::vector::vector(int) +# 1109| : +# 1109| getParameter(0): [Parameter] (unnamed parameter 0) +# 1109| Type = [IntType] int +# 1110| [Destructor] void std::vector::~vector() # 1110| : -# 1110| getParameter(0): [Parameter] x -# 1110| Type = [IntType] int -# 1110| getEntryPoint(): [BlockStmt] { ... } -# 1111| getStmt(0): [AsmStmt] asm statement -# 1112| getStmt(1): [ReturnStmt] return ... -# 1112| getExpr(): [VariableAccess] x -# 1112| Type = [IntType] int -# 1112| ValueCategory = prvalue(load) -# 1115| [TopLevelFunction] void AsmStmtWithOutputs(unsigned int&, unsigned int, unsigned int&, unsigned int) +# 1110| [Destructor] void std::vector::~vector() +# 1110| : +# 1110| [Destructor] void std::vector::~vector() +# 1110| : +# 1115| [ConstMemberFunction] std::vector::iterator std::vector::begin() const # 1115| : -# 1115| getParameter(0): [Parameter] a -# 1115| Type = [LValueReferenceType] unsigned int & -# 1115| getParameter(1): [Parameter] b -# 1115| Type = [IntType] unsigned int -# 1115| getParameter(2): [Parameter] c -# 1115| Type = [LValueReferenceType] unsigned int & -# 1115| getParameter(3): [Parameter] d -# 1115| Type = [IntType] unsigned int -# 1116| getEntryPoint(): [BlockStmt] { ... } -# 1117| getStmt(0): [AsmStmt] asm statement -# 1120| getChild(0): [VariableAccess] a -# 1120| Type = [LValueReferenceType] unsigned int & -# 1120| ValueCategory = prvalue(load) -# 1120| getChild(1): [VariableAccess] b -# 1120| Type = [IntType] unsigned int -# 1120| ValueCategory = lvalue -# 1120| getChild(2): [VariableAccess] c -# 1120| Type = [LValueReferenceType] unsigned int & -# 1120| ValueCategory = prvalue(load) -# 1120| getChild(3): [VariableAccess] d -# 1120| Type = [IntType] unsigned int -# 1120| ValueCategory = prvalue(load) -# 1120| getChild(0).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1120| Type = [IntType] unsigned int -# 1120| ValueCategory = lvalue -# 1120| getChild(2).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1120| Type = [IntType] unsigned int -# 1120| ValueCategory = prvalue(load) -# 1122| getStmt(1): [ReturnStmt] return ... -# 1124| [TopLevelFunction] void ExternDeclarations() -# 1124| : -# 1125| getEntryPoint(): [BlockStmt] { ... } -# 1126| getStmt(0): [DeclStmt] declaration -# 1126| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of g -# 1126| Type = [IntType] int -# 1127| getStmt(1): [DeclStmt] declaration -# 1127| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1127| Type = [IntType] int -# 1128| getStmt(2): [DeclStmt] declaration -# 1128| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1128| Type = [IntType] int -# 1128| getDeclarationEntry(1): [FunctionDeclarationEntry] declaration of f -# 1128| Type = [IntType] int -# 1129| getStmt(3): [DeclStmt] declaration -# 1129| getDeclarationEntry(0): [FunctionDeclarationEntry] declaration of z -# 1129| Type = [IntType] int -# 1129| getDeclarationEntry(1): [FunctionDeclarationEntry] declaration of w -# 1129| Type = [IntType] int -# 1129| getDeclarationEntry(2): [VariableDeclarationEntry] definition of h -# 1129| Type = [IntType] int -# 1130| getStmt(4): [DeclStmt] declaration -# 1130| getDeclarationEntry(0): [TypeDeclarationEntry] declaration of d -# 1130| Type = [CTypedefType,LocalTypedefType] d -# 1131| getStmt(5): [ReturnStmt] return ... -# 1128| [TopLevelFunction] int f(float) -# 1128| : -# 1128| getParameter(0): [Parameter] (unnamed parameter 0) -# 1128| Type = [FloatType] float -# 1129| [TopLevelFunction] int z(float) -# 1129| : -# 1129| getParameter(0): [Parameter] (unnamed parameter 0) -# 1129| Type = [FloatType] float -# 1129| [TopLevelFunction] int w(float) -# 1129| : -# 1129| getParameter(0): [Parameter] (unnamed parameter 0) -# 1129| Type = [FloatType] float -# 1139| [TopLevelFunction] void ExternDeclarationsInMacro() -# 1139| : -# 1140| getEntryPoint(): [BlockStmt] { ... } -# 1141| getStmt(0): [DeclStmt] declaration -# 1141| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of g -# 1141| Type = [IntType] int -# 1141| getStmt(1): [ForStmt] for(...;...;...) ... -# 1141| getInitialization(): [DeclStmt] declaration -# 1141| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i -# 1141| Type = [IntType] int -# 1141| getVariable().getInitializer(): [Initializer] initializer for i -# 1141| getExpr(): [Literal] 0 -# 1141| Type = [IntType] int -# 1141| Value = [Literal] 0 -# 1141| ValueCategory = prvalue -# 1141| getCondition(): [LTExpr] ... < ... -# 1141| Type = [BoolType] bool -# 1141| ValueCategory = prvalue -# 1141| getLesserOperand(): [VariableAccess] i -# 1141| Type = [IntType] int -# 1141| ValueCategory = prvalue(load) -# 1141| getGreaterOperand(): [Literal] 10 -# 1141| Type = [IntType] int -# 1141| Value = [Literal] 10 -# 1141| ValueCategory = prvalue -# 1141| getUpdate(): [PrefixIncrExpr] ++ ... -# 1141| Type = [IntType] int -# 1141| ValueCategory = lvalue -# 1141| getOperand(): [VariableAccess] i -# 1141| Type = [IntType] int -# 1141| ValueCategory = lvalue -# 1141| getStmt(): [BlockStmt] { ... } -# 1141| getStmt(0): [DeclStmt] declaration -# 1141| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of g -# 1141| Type = [IntType] int -# 1141| getStmt(2): [EmptyStmt] ; -# 1142| getStmt(3): [ReturnStmt] return ... -# 1144| [TopLevelFunction] void TryCatchNoCatchAny(bool) -# 1144| : -# 1144| getParameter(0): [Parameter] b -# 1144| Type = [BoolType] bool -# 1144| getEntryPoint(): [BlockStmt] { ... } -# 1145| getStmt(0): [TryStmt] try { ... } -# 1145| getStmt(): [BlockStmt] { ... } -# 1146| getStmt(0): [DeclStmt] declaration -# 1146| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1146| Type = [IntType] int -# 1146| getVariable().getInitializer(): [Initializer] initializer for x -# 1146| getExpr(): [Literal] 5 -# 1146| Type = [IntType] int -# 1146| Value = [Literal] 5 -# 1146| ValueCategory = prvalue -# 1147| getStmt(1): [IfStmt] if (...) ... -# 1147| getCondition(): [VariableAccess] b -# 1147| Type = [BoolType] bool -# 1147| ValueCategory = prvalue(load) -# 1147| getThen(): [BlockStmt] { ... } -# 1148| getStmt(0): [ExprStmt] ExprStmt -# 1148| getExpr(): [ThrowExpr] throw ... -# 1148| Type = [PointerType] const char * -# 1148| ValueCategory = prvalue -# 1148| getExpr(): string literal -# 1148| Type = [ArrayType] const char[15] -# 1148| Value = [StringLiteral] "string literal" -# 1148| ValueCategory = lvalue -# 1148| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1148| Type = [PointerType] const char * -# 1148| ValueCategory = prvalue -# 1150| getElse(): [IfStmt] if (...) ... -# 1150| getCondition(): [LTExpr] ... < ... -# 1150| Type = [BoolType] bool -# 1150| ValueCategory = prvalue -# 1150| getLesserOperand(): [VariableAccess] x -# 1150| Type = [IntType] int -# 1150| ValueCategory = prvalue(load) -# 1150| getGreaterOperand(): [Literal] 2 -# 1150| Type = [IntType] int -# 1150| Value = [Literal] 2 -# 1150| ValueCategory = prvalue -# 1150| getThen(): [BlockStmt] { ... } -# 1151| getStmt(0): [ExprStmt] ExprStmt -# 1151| getExpr(): [AssignExpr] ... = ... -# 1151| Type = [IntType] int -# 1151| ValueCategory = lvalue -# 1151| getLValue(): [VariableAccess] x -# 1151| Type = [IntType] int -# 1151| ValueCategory = lvalue -# 1151| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1151| Type = [IntType] int -# 1151| ValueCategory = prvalue -# 1151| getCondition(): [VariableAccess] b -# 1151| Type = [BoolType] bool -# 1151| ValueCategory = prvalue(load) -# 1151| getThen(): [Literal] 7 -# 1151| Type = [IntType] int -# 1151| Value = [Literal] 7 -# 1151| ValueCategory = prvalue -# 1151| getElse(): [ThrowExpr] throw ... -# 1151| Type = [Struct] String -# 1151| ValueCategory = prvalue -# 1151| getExpr(): [ConstructorCall] call to String -# 1151| Type = [VoidType] void -# 1151| ValueCategory = prvalue -# 1151| getArgument(0): String object -# 1151| Type = [ArrayType] const char[14] -# 1151| Value = [StringLiteral] "String object" -# 1151| ValueCategory = lvalue -# 1151| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1151| Type = [PointerType] const char * -# 1151| ValueCategory = prvalue -# 1153| getStmt(2): [ExprStmt] ExprStmt -# 1153| getExpr(): [AssignExpr] ... = ... -# 1153| Type = [IntType] int -# 1153| ValueCategory = lvalue -# 1153| getLValue(): [VariableAccess] x -# 1153| Type = [IntType] int -# 1153| ValueCategory = lvalue -# 1153| getRValue(): [Literal] 7 -# 1153| Type = [IntType] int -# 1153| Value = [Literal] 7 -# 1153| ValueCategory = prvalue -# 1155| getChild(1): [Handler] -# 1155| getBlock(): [CatchBlock] { ... } -# 1156| getStmt(0): [ExprStmt] ExprStmt -# 1156| getExpr(): [ThrowExpr] throw ... -# 1156| Type = [Struct] String -# 1156| ValueCategory = prvalue -# 1156| getExpr(): [ConstructorCall] call to String -# 1156| Type = [VoidType] void -# 1156| ValueCategory = prvalue -# 1156| getArgument(0): [VariableAccess] s -# 1156| Type = [PointerType] const char * -# 1156| ValueCategory = prvalue(load) -# 1158| getChild(2): [Handler] -# 1158| getBlock(): [CatchBlock] { ... } -# 1160| getStmt(1): [ReturnStmt] return ... -# 1164| [TopLevelFunction] void VectorTypes(int) -# 1164| : -# 1164| getParameter(0): [Parameter] i -# 1164| Type = [IntType] int -# 1164| getEntryPoint(): [BlockStmt] { ... } -# 1165| getStmt(0): [DeclStmt] declaration -# 1165| getDeclarationEntry(0): [VariableDeclarationEntry] definition of vi4 -# 1165| Type = [SpecifiedType] __attribute((vector_size(16UL))) int -# 1165| getVariable().getInitializer(): [Initializer] initializer for vi4 -# 1165| getExpr(): [VectorAggregateLiteral] {...} -# 1165| Type = [GNUVectorType] __attribute((vector_size(16UL))) int -# 1165| ValueCategory = prvalue -# 1165| getAnElementExpr(0): [Literal] 0 -# 1165| Type = [IntType] int -# 1165| Value = [Literal] 0 -# 1165| ValueCategory = prvalue -# 1165| getAnElementExpr(1): [Literal] 1 -# 1165| Type = [IntType] int -# 1165| Value = [Literal] 1 -# 1165| ValueCategory = prvalue -# 1165| getAnElementExpr(2): [Literal] 2 -# 1165| Type = [IntType] int -# 1165| Value = [Literal] 2 -# 1165| ValueCategory = prvalue -# 1165| getAnElementExpr(3): [Literal] 3 -# 1165| Type = [IntType] int -# 1165| Value = [Literal] 3 -# 1165| ValueCategory = prvalue -# 1166| getStmt(1): [DeclStmt] declaration -# 1166| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1166| Type = [IntType] int -# 1166| getVariable().getInitializer(): [Initializer] initializer for x -# 1166| getExpr(): [ArrayExpr] access to array -# 1166| Type = [IntType] int -# 1166| ValueCategory = prvalue(load) -# 1166| getArrayBase(): [VariableAccess] vi4 -# 1166| Type = [SpecifiedType] __attribute((vector_size(16UL))) int -# 1166| ValueCategory = lvalue -# 1166| getArrayOffset(): [VariableAccess] i -# 1166| Type = [IntType] int -# 1166| ValueCategory = prvalue(load) -# 1167| getStmt(2): [ExprStmt] ExprStmt -# 1167| getExpr(): [AssignExpr] ... = ... -# 1167| Type = [IntType] int +# 1115| [ConstMemberFunction] std::vector::iterator std::vector::begin() const +# 1115| : +# 1115| [ConstMemberFunction] std::vector::iterator std::vector::begin() const +# 1115| : +# 1115| [ConstMemberFunction] std::vector::iterator std::vector::begin() const +# 1115| : +# 1116| [ConstMemberFunction] std::vector::iterator std::vector::end() const +# 1116| : +# 1116| [ConstMemberFunction] std::vector::iterator std::vector::end() const +# 1116| : +# 1116| [ConstMemberFunction] std::vector::iterator std::vector::end() const +# 1116| : +# 1116| [ConstMemberFunction] std::vector::iterator std::vector::end() const +# 1116| : +# 1120| [Operator,TemplateFunction,TopLevelFunction] bool std::operator==(iterator, iterator) +# 1120| : +# 1120| getParameter(0): [Parameter] left +# 1120| Type = [TemplateParameter] iterator +# 1120| getParameter(1): [Parameter] right +# 1120| Type = [TemplateParameter] iterator +# 1122| [Operator,TemplateFunction,TopLevelFunction] bool std::operator!=(iterator, iterator) +# 1122| : +# 1122| getParameter(0): [Parameter] left +# 1122| Type = [TemplateParameter] iterator +# 1122| getParameter(1): [Parameter] right +# 1122| Type = [TemplateParameter] iterator +# 1126| [TopLevelFunction] void RangeBasedFor(std::vector const&) +# 1126| : +# 1126| getParameter(0): [Parameter] v +# 1126| Type = [LValueReferenceType] const vector & +# 1126| getEntryPoint(): [BlockStmt] { ... } +# 1127| getStmt(0): [RangeBasedForStmt] for(...:...) ... +# 1127| getChild(1): [DeclStmt] declaration +# 1127| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 1127| Type = [LValueReferenceType] const vector & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 1127| getExpr(): [VariableAccess] v +# 1127| Type = [LValueReferenceType] const vector & +# 1127| ValueCategory = prvalue(load) +# 1127| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1127| Type = [LValueReferenceType] const vector & +# 1127| ValueCategory = prvalue +# 1127| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1127| Type = [SpecifiedType] const vector +# 1127| ValueCategory = lvalue +# 1127| getBeginEndDeclaration(): [DeclStmt] declaration +# 1127| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 1127| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 1127| getExpr(): [FunctionCall] call to begin +# 1127| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 1127| ValueCategory = prvalue +# 1127| getQualifier(): [VariableAccess] (__range) +# 1127| Type = [LValueReferenceType] const vector & +# 1127| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +# 1127| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 1127| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 1127| getExpr(): [FunctionCall] call to end +# 1127| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 1127| ValueCategory = prvalue +# 1127| getQualifier(): [VariableAccess] (__range) +# 1127| Type = [LValueReferenceType] const vector & +# 1127| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +# 1127| getCondition(): [FunctionCall] call to operator!= +# 1127| Type = [BoolType] bool +# 1127| ValueCategory = prvalue +# 1127| getQualifier(): [VariableAccess] (__begin) +# 1127| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 1127| ValueCategory = lvalue +# 1127| getArgument(0): [ConstructorCall] call to iterator +# 1127| Type = [VoidType] void +# 1127| ValueCategory = prvalue +# 1127| getArgument(0): [VariableAccess] (__end) +# 1127| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 1127| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +#-----| Type = [LValueReferenceType] const iterator & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator +#-----| ValueCategory = lvalue +# 1127| getUpdate(): [FunctionCall] call to operator++ +# 1127| Type = [LValueReferenceType] iterator & +# 1127| ValueCategory = prvalue +# 1127| getQualifier(): [VariableAccess] (__begin) +# 1127| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 1127| ValueCategory = lvalue +# 1127| getChild(5): [DeclStmt] declaration +# 1127| getDeclarationEntry(0): [VariableDeclarationEntry] definition of e +# 1127| Type = [IntType] int +# 1127| getVariable().getInitializer(): [Initializer] initializer for e +# 1127| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 1127| Type = [LValueReferenceType] int & +# 1127| ValueCategory = prvalue +# 1127| getQualifier(): [VariableAccess] (__begin) +# 1127| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 1127| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 1127| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1127| Type = [IntType] int +# 1127| ValueCategory = prvalue(load) +# 1127| getStmt(): [BlockStmt] { ... } +# 1128| getStmt(0): [IfStmt] if (...) ... +# 1128| getCondition(): [GTExpr] ... > ... +# 1128| Type = [BoolType] bool +# 1128| ValueCategory = prvalue +# 1128| getGreaterOperand(): [VariableAccess] e +# 1128| Type = [IntType] int +# 1128| ValueCategory = prvalue(load) +# 1128| getLesserOperand(): [Literal] 0 +# 1128| Type = [IntType] int +# 1128| Value = [Literal] 0 +# 1128| ValueCategory = prvalue +# 1128| getThen(): [BlockStmt] { ... } +# 1129| getStmt(0): [ContinueStmt] continue; +# 1127| getStmt(1): [LabelStmt] label ...: +# 1127| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1127| Type = [ClassTemplateInstantiation,Struct] iterator +# 1127| ValueCategory = lvalue +# 1133| getStmt(1): [RangeBasedForStmt] for(...:...) ... +# 1133| getChild(1): [DeclStmt] declaration +# 1133| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 1133| Type = [LValueReferenceType] const vector & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 1133| getExpr(): [VariableAccess] v +# 1133| Type = [LValueReferenceType] const vector & +# 1133| ValueCategory = prvalue(load) +# 1133| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1133| Type = [LValueReferenceType] const vector & +# 1133| ValueCategory = prvalue +# 1133| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1133| Type = [SpecifiedType] const vector +# 1133| ValueCategory = lvalue +# 1133| getBeginEndDeclaration(): [DeclStmt] declaration +# 1133| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 1133| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 1133| getExpr(): [FunctionCall] call to begin +# 1133| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 1133| ValueCategory = prvalue +# 1133| getQualifier(): [VariableAccess] (__range) +# 1133| Type = [LValueReferenceType] const vector & +# 1133| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +# 1133| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 1133| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 1133| getExpr(): [FunctionCall] call to end +# 1133| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 1133| ValueCategory = prvalue +# 1133| getQualifier(): [VariableAccess] (__range) +# 1133| Type = [LValueReferenceType] const vector & +# 1133| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +# 1133| getCondition(): [FunctionCall] call to operator!= +# 1133| Type = [BoolType] bool +# 1133| ValueCategory = prvalue +# 1133| getQualifier(): [VariableAccess] (__begin) +# 1133| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 1133| ValueCategory = lvalue +# 1133| getArgument(0): [ConstructorCall] call to iterator +# 1133| Type = [VoidType] void +# 1133| ValueCategory = prvalue +# 1133| getArgument(0): [VariableAccess] (__end) +# 1133| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 1133| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +#-----| Type = [LValueReferenceType] const iterator & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator +#-----| ValueCategory = lvalue +# 1133| getUpdate(): [FunctionCall] call to operator++ +# 1133| Type = [LValueReferenceType] iterator & +# 1133| ValueCategory = prvalue +# 1133| getQualifier(): [VariableAccess] (__begin) +# 1133| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 1133| ValueCategory = lvalue +# 1133| getChild(5): [DeclStmt] declaration +# 1133| getDeclarationEntry(0): [VariableDeclarationEntry] definition of e +# 1133| Type = [LValueReferenceType] const int & +# 1133| getVariable().getInitializer(): [Initializer] initializer for e +# 1133| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 1133| Type = [LValueReferenceType] int & +# 1133| ValueCategory = prvalue +# 1133| getQualifier(): [VariableAccess] (__begin) +# 1133| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 1133| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 1133| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1133| Type = [LValueReferenceType] const int & +# 1133| ValueCategory = prvalue +# 1133| getExpr(): [CStyleCast] (const int)... +# 1133| Conversion = [GlvalueConversion] glvalue conversion +# 1133| Type = [SpecifiedType] const int +# 1133| ValueCategory = lvalue +# 1133| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1133| Type = [IntType] int +# 1133| ValueCategory = lvalue +# 1133| getStmt(): [BlockStmt] { ... } +# 1134| getStmt(0): [IfStmt] if (...) ... +# 1134| getCondition(): [LTExpr] ... < ... +# 1134| Type = [BoolType] bool +# 1134| ValueCategory = prvalue +# 1134| getLesserOperand(): [VariableAccess] e +# 1134| Type = [LValueReferenceType] const int & +# 1134| ValueCategory = prvalue(load) +# 1134| getGreaterOperand(): [Literal] 5 +# 1134| Type = [IntType] int +# 1134| Value = [Literal] 5 +# 1134| ValueCategory = prvalue +# 1134| getLesserOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1134| Type = [IntType] int +# 1134| ValueCategory = prvalue(load) +# 1134| getThen(): [BlockStmt] { ... } +# 1135| getStmt(0): [BreakStmt] break; +# 1133| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1133| Type = [ClassTemplateInstantiation,Struct] iterator +# 1133| ValueCategory = lvalue +# 1137| getStmt(2): [LabelStmt] label ...: +# 1138| getStmt(3): [ReturnStmt] return ... +# 1157| [TopLevelFunction] int AsmStmt(int) +# 1157| : +# 1157| getParameter(0): [Parameter] x +# 1157| Type = [IntType] int +# 1157| getEntryPoint(): [BlockStmt] { ... } +# 1158| getStmt(0): [AsmStmt] asm statement +# 1159| getStmt(1): [ReturnStmt] return ... +# 1159| getExpr(): [VariableAccess] x +# 1159| Type = [IntType] int +# 1159| ValueCategory = prvalue(load) +# 1162| [TopLevelFunction] void AsmStmtWithOutputs(unsigned int&, unsigned int, unsigned int&, unsigned int) +# 1162| : +# 1162| getParameter(0): [Parameter] a +# 1162| Type = [LValueReferenceType] unsigned int & +# 1162| getParameter(1): [Parameter] b +# 1162| Type = [IntType] unsigned int +# 1162| getParameter(2): [Parameter] c +# 1162| Type = [LValueReferenceType] unsigned int & +# 1162| getParameter(3): [Parameter] d +# 1162| Type = [IntType] unsigned int +# 1163| getEntryPoint(): [BlockStmt] { ... } +# 1164| getStmt(0): [AsmStmt] asm statement +# 1167| getChild(0): [VariableAccess] a +# 1167| Type = [LValueReferenceType] unsigned int & +# 1167| ValueCategory = prvalue(load) +# 1167| getChild(1): [VariableAccess] b +# 1167| Type = [IntType] unsigned int # 1167| ValueCategory = lvalue -# 1167| getLValue(): [ArrayExpr] access to array -# 1167| Type = [IntType] int -# 1167| ValueCategory = lvalue -# 1167| getArrayBase(): [VariableAccess] vi4 -# 1167| Type = [SpecifiedType] __attribute((vector_size(16UL))) int -# 1167| ValueCategory = lvalue -# 1167| getArrayOffset(): [VariableAccess] i -# 1167| Type = [IntType] int -# 1167| ValueCategory = prvalue(load) -# 1167| getRValue(): [VariableAccess] x -# 1167| Type = [IntType] int -# 1167| ValueCategory = prvalue(load) -# 1168| getStmt(3): [DeclStmt] declaration -# 1168| getDeclarationEntry(0): [VariableDeclarationEntry] definition of vi4_shuffle -# 1168| Type = [SpecifiedType] __attribute((vector_size(16UL))) int -# 1168| getVariable().getInitializer(): [Initializer] initializer for vi4_shuffle -# 1168| getExpr(): [BuiltInOperationBuiltInShuffleVector] __builtin_shufflevector -# 1168| Type = [GNUVectorType] __attribute((vector_size(16))) int -# 1168| ValueCategory = prvalue -# 1168| getChild(0): [VariableAccess] vi4 -# 1168| Type = [SpecifiedType] __attribute((vector_size(16UL))) int -# 1168| ValueCategory = prvalue(load) -# 1168| getChild(1): [VariableAccess] vi4 -# 1168| Type = [SpecifiedType] __attribute((vector_size(16UL))) int -# 1168| ValueCategory = prvalue(load) -# 1168| getChild(2): [AddExpr] ... + ... -# 1168| Type = [IntType] int -# 1168| Value = [AddExpr] 3 -# 1168| ValueCategory = prvalue -# 1168| getLeftOperand(): [Literal] 3 -# 1168| Type = [IntType] int -# 1168| Value = [Literal] 3 -# 1168| ValueCategory = prvalue -# 1168| getRightOperand(): [Literal] 0 -# 1168| Type = [IntType] int -# 1168| Value = [Literal] 0 -# 1168| ValueCategory = prvalue -# 1168| getChild(3): [Literal] 2 -# 1168| Type = [IntType] int -# 1168| Value = [Literal] 2 -# 1168| ValueCategory = prvalue -# 1168| getChild(4): [Literal] 1 -# 1168| Type = [IntType] int -# 1168| Value = [Literal] 1 -# 1168| ValueCategory = prvalue -# 1168| getChild(5): [Literal] 0 -# 1168| Type = [IntType] int -# 1168| Value = [Literal] 0 -# 1168| ValueCategory = prvalue -# 1169| getStmt(4): [ExprStmt] ExprStmt -# 1169| getExpr(): [AssignExpr] ... = ... -# 1169| Type = [SpecifiedType] __attribute((vector_size(16UL))) int -# 1169| ValueCategory = lvalue -# 1169| getLValue(): [VariableAccess] vi4 -# 1169| Type = [SpecifiedType] __attribute((vector_size(16UL))) int -# 1169| ValueCategory = lvalue -# 1169| getRValue(): [AddExpr] ... + ... -# 1169| Type = [GNUVectorType] __attribute((vector_size(16UL))) int -# 1169| ValueCategory = prvalue -# 1169| getLeftOperand(): [VariableAccess] vi4 -# 1169| Type = [SpecifiedType] __attribute((vector_size(16UL))) int -# 1169| ValueCategory = prvalue(load) -# 1169| getRightOperand(): [VariableAccess] vi4_shuffle -# 1169| Type = [SpecifiedType] __attribute((vector_size(16UL))) int -# 1169| ValueCategory = prvalue(load) -# 1170| getStmt(5): [ReturnStmt] return ... -# 1172| [TopLevelFunction] void* memcpy(void*, void*, int) -# 1172| : -# 1172| getParameter(0): [Parameter] dst -# 1172| Type = [VoidPointerType] void * -# 1172| getParameter(1): [Parameter] src -# 1172| Type = [VoidPointerType] void * -# 1172| getParameter(2): [Parameter] size -# 1172| Type = [IntType] int -# 1174| [TopLevelFunction] int ModeledCallTarget(int) -# 1174| : -# 1174| getParameter(0): [Parameter] x -# 1174| Type = [IntType] int -# 1174| getEntryPoint(): [BlockStmt] { ... } -# 1175| getStmt(0): [DeclStmt] declaration +# 1167| getChild(2): [VariableAccess] c +# 1167| Type = [LValueReferenceType] unsigned int & +# 1167| ValueCategory = prvalue(load) +# 1167| getChild(3): [VariableAccess] d +# 1167| Type = [IntType] unsigned int +# 1167| ValueCategory = prvalue(load) +# 1167| getChild(0).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1167| Type = [IntType] unsigned int +# 1167| ValueCategory = lvalue +# 1167| getChild(2).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1167| Type = [IntType] unsigned int +# 1167| ValueCategory = prvalue(load) +# 1169| getStmt(1): [ReturnStmt] return ... +# 1171| [TopLevelFunction] void ExternDeclarations() +# 1171| : +# 1172| getEntryPoint(): [BlockStmt] { ... } +# 1173| getStmt(0): [DeclStmt] declaration +# 1173| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of g +# 1173| Type = [IntType] int +# 1174| getStmt(1): [DeclStmt] declaration +# 1174| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1174| Type = [IntType] int +# 1175| getStmt(2): [DeclStmt] declaration # 1175| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y # 1175| Type = [IntType] int -# 1176| getStmt(1): [ExprStmt] ExprStmt -# 1176| getExpr(): [FunctionCall] call to memcpy -# 1176| Type = [VoidPointerType] void * -# 1176| ValueCategory = prvalue -# 1176| getArgument(0): [AddressOfExpr] & ... -# 1176| Type = [IntPointerType] int * -# 1176| ValueCategory = prvalue -# 1176| getOperand(): [VariableAccess] y -# 1176| Type = [IntType] int -# 1176| ValueCategory = lvalue -# 1176| getArgument(1): [AddressOfExpr] & ... -# 1176| Type = [IntPointerType] int * -# 1176| ValueCategory = prvalue -# 1176| getOperand(): [VariableAccess] x -# 1176| Type = [IntType] int -# 1176| ValueCategory = lvalue -# 1176| getArgument(2): [SizeofTypeOperator] sizeof(int) -# 1176| Type = [LongType] unsigned long -# 1176| Value = [SizeofTypeOperator] 4 -# 1176| ValueCategory = prvalue -# 1176| getArgument(0).getFullyConverted(): [CStyleCast] (void *)... -# 1176| Conversion = [PointerConversion] pointer conversion -# 1176| Type = [VoidPointerType] void * -# 1176| ValueCategory = prvalue -# 1176| getArgument(1).getFullyConverted(): [CStyleCast] (void *)... -# 1176| Conversion = [PointerConversion] pointer conversion -# 1176| Type = [VoidPointerType] void * -# 1176| ValueCategory = prvalue -# 1176| getArgument(2).getFullyConverted(): [CStyleCast] (int)... -# 1176| Conversion = [IntegralConversion] integral conversion -# 1176| Type = [IntType] int -# 1176| Value = [CStyleCast] 4 -# 1176| ValueCategory = prvalue -# 1177| getStmt(2): [ReturnStmt] return ... -# 1177| getExpr(): [VariableAccess] y -# 1177| Type = [IntType] int -# 1177| ValueCategory = prvalue(load) -# 1180| [TopLevelFunction] String ReturnObjectImpl() -# 1180| : -# 1180| getEntryPoint(): [BlockStmt] { ... } -# 1181| getStmt(0): [ReturnStmt] return ... -# 1181| getExpr(): [ConstructorCall] call to String -# 1181| Type = [VoidType] void -# 1181| ValueCategory = prvalue -# 1181| getArgument(0): foo -# 1181| Type = [ArrayType] const char[4] -# 1181| Value = [StringLiteral] "foo" -# 1181| ValueCategory = lvalue -# 1181| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1181| Type = [PointerType] const char * -# 1181| ValueCategory = prvalue -# 1184| [TopLevelFunction] void switch1Case(int) -# 1184| : -# 1184| getParameter(0): [Parameter] x -# 1184| Type = [IntType] int -# 1184| getEntryPoint(): [BlockStmt] { ... } -# 1185| getStmt(0): [DeclStmt] declaration -# 1185| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1185| Type = [IntType] int -# 1185| getVariable().getInitializer(): [Initializer] initializer for y -# 1185| getExpr(): [Literal] 0 -# 1185| Type = [IntType] int -# 1185| Value = [Literal] 0 -# 1185| ValueCategory = prvalue -# 1186| getStmt(1): [SwitchStmt] switch (...) ... -# 1186| getExpr(): [VariableAccess] x -# 1186| Type = [IntType] int -# 1186| ValueCategory = prvalue(load) -# 1186| getStmt(): [BlockStmt] { ... } -# 1187| getStmt(0): [SwitchCase] case ...: -# 1187| getExpr(): [Literal] 1 -# 1187| Type = [IntType] int -# 1187| Value = [Literal] 1 -# 1187| ValueCategory = prvalue -# 1188| getStmt(1): [ExprStmt] ExprStmt -# 1188| getExpr(): [AssignExpr] ... = ... -# 1188| Type = [IntType] int -# 1188| ValueCategory = lvalue -# 1188| getLValue(): [VariableAccess] y +# 1175| getDeclarationEntry(1): [FunctionDeclarationEntry] declaration of f +# 1175| Type = [IntType] int +# 1176| getStmt(3): [DeclStmt] declaration +# 1176| getDeclarationEntry(0): [FunctionDeclarationEntry] declaration of z +# 1176| Type = [IntType] int +# 1176| getDeclarationEntry(1): [FunctionDeclarationEntry] declaration of w +# 1176| Type = [IntType] int +# 1176| getDeclarationEntry(2): [VariableDeclarationEntry] definition of h +# 1176| Type = [IntType] int +# 1177| getStmt(4): [DeclStmt] declaration +# 1177| getDeclarationEntry(0): [TypeDeclarationEntry] declaration of d +# 1177| Type = [CTypedefType,LocalTypedefType] d +# 1178| getStmt(5): [ReturnStmt] return ... +# 1175| [TopLevelFunction] int f(float) +# 1175| : +# 1175| getParameter(0): [Parameter] (unnamed parameter 0) +# 1175| Type = [FloatType] float +# 1176| [TopLevelFunction] int z(float) +# 1176| : +# 1176| getParameter(0): [Parameter] (unnamed parameter 0) +# 1176| Type = [FloatType] float +# 1176| [TopLevelFunction] int w(float) +# 1176| : +# 1176| getParameter(0): [Parameter] (unnamed parameter 0) +# 1176| Type = [FloatType] float +# 1186| [TopLevelFunction] void ExternDeclarationsInMacro() +# 1186| : +# 1187| getEntryPoint(): [BlockStmt] { ... } +# 1188| getStmt(0): [DeclStmt] declaration +# 1188| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of g +# 1188| Type = [IntType] int +# 1188| getStmt(1): [ForStmt] for(...;...;...) ... +# 1188| getInitialization(): [DeclStmt] declaration +# 1188| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1188| Type = [IntType] int +# 1188| getVariable().getInitializer(): [Initializer] initializer for i +# 1188| getExpr(): [Literal] 0 # 1188| Type = [IntType] int -# 1188| ValueCategory = lvalue -# 1188| getRValue(): [Literal] 2 -# 1188| Type = [IntType] int -# 1188| Value = [Literal] 2 +# 1188| Value = [Literal] 0 # 1188| ValueCategory = prvalue -# 1190| getStmt(2): [DeclStmt] declaration -# 1190| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z -# 1190| Type = [IntType] int -# 1190| getVariable().getInitializer(): [Initializer] initializer for z -# 1190| getExpr(): [VariableAccess] y -# 1190| Type = [IntType] int -# 1190| ValueCategory = prvalue(load) -# 1191| getStmt(3): [ReturnStmt] return ... -# 1193| [TopLevelFunction] void switch2Case_fallthrough(int) -# 1193| : -# 1193| getParameter(0): [Parameter] x -# 1193| Type = [IntType] int -# 1193| getEntryPoint(): [BlockStmt] { ... } -# 1194| getStmt(0): [DeclStmt] declaration -# 1194| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1194| Type = [IntType] int -# 1194| getVariable().getInitializer(): [Initializer] initializer for y -# 1194| getExpr(): [Literal] 0 -# 1194| Type = [IntType] int -# 1194| Value = [Literal] 0 -# 1194| ValueCategory = prvalue -# 1195| getStmt(1): [SwitchStmt] switch (...) ... -# 1195| getExpr(): [VariableAccess] x -# 1195| Type = [IntType] int -# 1195| ValueCategory = prvalue(load) -# 1195| getStmt(): [BlockStmt] { ... } -# 1196| getStmt(0): [SwitchCase] case ...: -# 1196| getExpr(): [Literal] 1 -# 1196| Type = [IntType] int -# 1196| Value = [Literal] 1 -# 1196| ValueCategory = prvalue -# 1197| getStmt(1): [ExprStmt] ExprStmt -# 1197| getExpr(): [AssignExpr] ... = ... -# 1197| Type = [IntType] int -# 1197| ValueCategory = lvalue -# 1197| getLValue(): [VariableAccess] y -# 1197| Type = [IntType] int -# 1197| ValueCategory = lvalue -# 1197| getRValue(): [Literal] 2 -# 1197| Type = [IntType] int -# 1197| Value = [Literal] 2 +# 1188| getCondition(): [LTExpr] ... < ... +# 1188| Type = [BoolType] bool +# 1188| ValueCategory = prvalue +# 1188| getLesserOperand(): [VariableAccess] i +# 1188| Type = [IntType] int +# 1188| ValueCategory = prvalue(load) +# 1188| getGreaterOperand(): [Literal] 10 +# 1188| Type = [IntType] int +# 1188| Value = [Literal] 10 +# 1188| ValueCategory = prvalue +# 1188| getUpdate(): [PrefixIncrExpr] ++ ... +# 1188| Type = [IntType] int +# 1188| ValueCategory = lvalue +# 1188| getOperand(): [VariableAccess] i +# 1188| Type = [IntType] int +# 1188| ValueCategory = lvalue +# 1188| getStmt(): [BlockStmt] { ... } +# 1188| getStmt(0): [DeclStmt] declaration +# 1188| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of g +# 1188| Type = [IntType] int +# 1188| getStmt(2): [EmptyStmt] ; +# 1189| getStmt(3): [ReturnStmt] return ... +# 1191| [TopLevelFunction] void TryCatchNoCatchAny(bool) +# 1191| : +# 1191| getParameter(0): [Parameter] b +# 1191| Type = [BoolType] bool +# 1191| getEntryPoint(): [BlockStmt] { ... } +# 1192| getStmt(0): [TryStmt] try { ... } +# 1192| getStmt(): [BlockStmt] { ... } +# 1193| getStmt(0): [DeclStmt] declaration +# 1193| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1193| Type = [IntType] int +# 1193| getVariable().getInitializer(): [Initializer] initializer for x +# 1193| getExpr(): [Literal] 5 +# 1193| Type = [IntType] int +# 1193| Value = [Literal] 5 +# 1193| ValueCategory = prvalue +# 1194| getStmt(1): [IfStmt] if (...) ... +# 1194| getCondition(): [VariableAccess] b +# 1194| Type = [BoolType] bool +# 1194| ValueCategory = prvalue(load) +# 1194| getThen(): [BlockStmt] { ... } +# 1195| getStmt(0): [ExprStmt] ExprStmt +# 1195| getExpr(): [ThrowExpr] throw ... +# 1195| Type = [PointerType] const char * +# 1195| ValueCategory = prvalue +# 1195| getExpr(): string literal +# 1195| Type = [ArrayType] const char[15] +# 1195| Value = [StringLiteral] "string literal" +# 1195| ValueCategory = lvalue +# 1195| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1195| Type = [PointerType] const char * +# 1195| ValueCategory = prvalue +# 1197| getElse(): [IfStmt] if (...) ... +# 1197| getCondition(): [LTExpr] ... < ... +# 1197| Type = [BoolType] bool # 1197| ValueCategory = prvalue -# 1198| getStmt(2): [SwitchCase] case ...: -# 1198| getExpr(): [Literal] 2 -# 1198| Type = [IntType] int -# 1198| Value = [Literal] 2 -# 1198| ValueCategory = prvalue -# 1199| getStmt(3): [ExprStmt] ExprStmt -# 1199| getExpr(): [AssignExpr] ... = ... -# 1199| Type = [IntType] int -# 1199| ValueCategory = lvalue -# 1199| getLValue(): [VariableAccess] y -# 1199| Type = [IntType] int -# 1199| ValueCategory = lvalue -# 1199| getRValue(): [Literal] 3 -# 1199| Type = [IntType] int -# 1199| Value = [Literal] 3 -# 1199| ValueCategory = prvalue -# 1201| getStmt(2): [DeclStmt] declaration -# 1201| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z -# 1201| Type = [IntType] int -# 1201| getVariable().getInitializer(): [Initializer] initializer for z -# 1201| getExpr(): [VariableAccess] y -# 1201| Type = [IntType] int -# 1201| ValueCategory = prvalue(load) -# 1202| getStmt(3): [ReturnStmt] return ... -# 1204| [TopLevelFunction] void switch2Case(int) -# 1204| : -# 1204| getParameter(0): [Parameter] x -# 1204| Type = [IntType] int -# 1204| getEntryPoint(): [BlockStmt] { ... } -# 1205| getStmt(0): [DeclStmt] declaration -# 1205| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1205| Type = [IntType] int -# 1205| getVariable().getInitializer(): [Initializer] initializer for y -# 1205| getExpr(): [Literal] 0 -# 1205| Type = [IntType] int -# 1205| Value = [Literal] 0 -# 1205| ValueCategory = prvalue -# 1206| getStmt(1): [SwitchStmt] switch (...) ... -# 1206| getExpr(): [VariableAccess] x -# 1206| Type = [IntType] int -# 1206| ValueCategory = prvalue(load) -# 1206| getStmt(): [BlockStmt] { ... } -# 1207| getStmt(0): [SwitchCase] case ...: -# 1207| getExpr(): [Literal] 1 -# 1207| Type = [IntType] int -# 1207| Value = [Literal] 1 -# 1207| ValueCategory = prvalue -# 1208| getStmt(1): [ExprStmt] ExprStmt -# 1208| getExpr(): [AssignExpr] ... = ... -# 1208| Type = [IntType] int -# 1208| ValueCategory = lvalue -# 1208| getLValue(): [VariableAccess] y -# 1208| Type = [IntType] int -# 1208| ValueCategory = lvalue -# 1208| getRValue(): [Literal] 2 -# 1208| Type = [IntType] int -# 1208| Value = [Literal] 2 -# 1208| ValueCategory = prvalue -# 1209| getStmt(2): [BreakStmt] break; -# 1210| getStmt(3): [SwitchCase] case ...: -# 1210| getExpr(): [Literal] 2 -# 1210| Type = [IntType] int -# 1210| Value = [Literal] 2 -# 1210| ValueCategory = prvalue -# 1211| getStmt(4): [ExprStmt] ExprStmt -# 1211| getExpr(): [AssignExpr] ... = ... -# 1211| Type = [IntType] int -# 1211| ValueCategory = lvalue -# 1211| getLValue(): [VariableAccess] y -# 1211| Type = [IntType] int -# 1211| ValueCategory = lvalue -# 1211| getRValue(): [Literal] 3 -# 1211| Type = [IntType] int -# 1211| Value = [Literal] 3 -# 1211| ValueCategory = prvalue -# 1212| getStmt(2): [LabelStmt] label ...: -# 1213| getStmt(3): [DeclStmt] declaration -# 1213| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1197| getLesserOperand(): [VariableAccess] x +# 1197| Type = [IntType] int +# 1197| ValueCategory = prvalue(load) +# 1197| getGreaterOperand(): [Literal] 2 +# 1197| Type = [IntType] int +# 1197| Value = [Literal] 2 +# 1197| ValueCategory = prvalue +# 1197| getThen(): [BlockStmt] { ... } +# 1198| getStmt(0): [ExprStmt] ExprStmt +# 1198| getExpr(): [AssignExpr] ... = ... +# 1198| Type = [IntType] int +# 1198| ValueCategory = lvalue +# 1198| getLValue(): [VariableAccess] x +# 1198| Type = [IntType] int +# 1198| ValueCategory = lvalue +# 1198| getRValue(): [ConditionalExpr] ... ? ... : ... +# 1198| Type = [IntType] int +# 1198| ValueCategory = prvalue +# 1198| getCondition(): [VariableAccess] b +# 1198| Type = [BoolType] bool +# 1198| ValueCategory = prvalue(load) +# 1198| getThen(): [Literal] 7 +# 1198| Type = [IntType] int +# 1198| Value = [Literal] 7 +# 1198| ValueCategory = prvalue +# 1198| getElse(): [ThrowExpr] throw ... +# 1198| Type = [Struct] String +# 1198| ValueCategory = prvalue +# 1198| getExpr(): [ConstructorCall] call to String +# 1198| Type = [VoidType] void +# 1198| ValueCategory = prvalue +# 1198| getArgument(0): String object +# 1198| Type = [ArrayType] const char[14] +# 1198| Value = [StringLiteral] "String object" +# 1198| ValueCategory = lvalue +# 1198| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1198| Type = [PointerType] const char * +# 1198| ValueCategory = prvalue +# 1200| getStmt(2): [ExprStmt] ExprStmt +# 1200| getExpr(): [AssignExpr] ... = ... +# 1200| Type = [IntType] int +# 1200| ValueCategory = lvalue +# 1200| getLValue(): [VariableAccess] x +# 1200| Type = [IntType] int +# 1200| ValueCategory = lvalue +# 1200| getRValue(): [Literal] 7 +# 1200| Type = [IntType] int +# 1200| Value = [Literal] 7 +# 1200| ValueCategory = prvalue +# 1202| getChild(1): [Handler] +# 1202| getBlock(): [CatchBlock] { ... } +# 1203| getStmt(0): [ExprStmt] ExprStmt +# 1203| getExpr(): [ThrowExpr] throw ... +# 1203| Type = [Struct] String +# 1203| ValueCategory = prvalue +# 1203| getExpr(): [ConstructorCall] call to String +# 1203| Type = [VoidType] void +# 1203| ValueCategory = prvalue +# 1203| getArgument(0): [VariableAccess] s +# 1203| Type = [PointerType] const char * +# 1203| ValueCategory = prvalue(load) +# 1205| getChild(2): [Handler] +# 1205| getBlock(): [CatchBlock] { ... } +# 1207| getStmt(1): [ReturnStmt] return ... +# 1211| [TopLevelFunction] void VectorTypes(int) +# 1211| : +# 1211| getParameter(0): [Parameter] i +# 1211| Type = [IntType] int +# 1211| getEntryPoint(): [BlockStmt] { ... } +# 1212| getStmt(0): [DeclStmt] declaration +# 1212| getDeclarationEntry(0): [VariableDeclarationEntry] definition of vi4 +# 1212| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1212| getVariable().getInitializer(): [Initializer] initializer for vi4 +# 1212| getExpr(): [VectorAggregateLiteral] {...} +# 1212| Type = [GNUVectorType] __attribute((vector_size(16UL))) int +# 1212| ValueCategory = prvalue +# 1212| getAnElementExpr(0): [Literal] 0 +# 1212| Type = [IntType] int +# 1212| Value = [Literal] 0 +# 1212| ValueCategory = prvalue +# 1212| getAnElementExpr(1): [Literal] 1 +# 1212| Type = [IntType] int +# 1212| Value = [Literal] 1 +# 1212| ValueCategory = prvalue +# 1212| getAnElementExpr(2): [Literal] 2 +# 1212| Type = [IntType] int +# 1212| Value = [Literal] 2 +# 1212| ValueCategory = prvalue +# 1212| getAnElementExpr(3): [Literal] 3 +# 1212| Type = [IntType] int +# 1212| Value = [Literal] 3 +# 1212| ValueCategory = prvalue +# 1213| getStmt(1): [DeclStmt] declaration +# 1213| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x # 1213| Type = [IntType] int -# 1213| getVariable().getInitializer(): [Initializer] initializer for z -# 1213| getExpr(): [VariableAccess] y +# 1213| getVariable().getInitializer(): [Initializer] initializer for x +# 1213| getExpr(): [ArrayExpr] access to array # 1213| Type = [IntType] int # 1213| ValueCategory = prvalue(load) -# 1214| getStmt(4): [ReturnStmt] return ... -# 1216| [TopLevelFunction] void switch2Case_default(int) -# 1216| : -# 1216| getParameter(0): [Parameter] x -# 1216| Type = [IntType] int -# 1216| getEntryPoint(): [BlockStmt] { ... } -# 1217| getStmt(0): [DeclStmt] declaration -# 1217| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1217| Type = [IntType] int -# 1217| getVariable().getInitializer(): [Initializer] initializer for y -# 1217| getExpr(): [Literal] 0 -# 1217| Type = [IntType] int -# 1217| Value = [Literal] 0 -# 1217| ValueCategory = prvalue -# 1218| getStmt(1): [SwitchStmt] switch (...) ... -# 1218| getExpr(): [VariableAccess] x -# 1218| Type = [IntType] int -# 1218| ValueCategory = prvalue(load) -# 1218| getStmt(): [BlockStmt] { ... } -# 1219| getStmt(0): [SwitchCase] case ...: -# 1219| getExpr(): [Literal] 1 -# 1219| Type = [IntType] int -# 1219| Value = [Literal] 1 -# 1219| ValueCategory = prvalue -# 1220| getStmt(1): [ExprStmt] ExprStmt -# 1220| getExpr(): [AssignExpr] ... = ... -# 1220| Type = [IntType] int -# 1220| ValueCategory = lvalue -# 1220| getLValue(): [VariableAccess] y -# 1220| Type = [IntType] int -# 1220| ValueCategory = lvalue -# 1220| getRValue(): [Literal] 2 -# 1220| Type = [IntType] int -# 1220| Value = [Literal] 2 -# 1220| ValueCategory = prvalue -# 1221| getStmt(2): [BreakStmt] break; -# 1223| getStmt(3): [SwitchCase] case ...: -# 1223| getExpr(): [Literal] 2 +# 1213| getArrayBase(): [VariableAccess] vi4 +# 1213| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1213| ValueCategory = lvalue +# 1213| getArrayOffset(): [VariableAccess] i +# 1213| Type = [IntType] int +# 1213| ValueCategory = prvalue(load) +# 1214| getStmt(2): [ExprStmt] ExprStmt +# 1214| getExpr(): [AssignExpr] ... = ... +# 1214| Type = [IntType] int +# 1214| ValueCategory = lvalue +# 1214| getLValue(): [ArrayExpr] access to array +# 1214| Type = [IntType] int +# 1214| ValueCategory = lvalue +# 1214| getArrayBase(): [VariableAccess] vi4 +# 1214| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1214| ValueCategory = lvalue +# 1214| getArrayOffset(): [VariableAccess] i +# 1214| Type = [IntType] int +# 1214| ValueCategory = prvalue(load) +# 1214| getRValue(): [VariableAccess] x +# 1214| Type = [IntType] int +# 1214| ValueCategory = prvalue(load) +# 1215| getStmt(3): [DeclStmt] declaration +# 1215| getDeclarationEntry(0): [VariableDeclarationEntry] definition of vi4_shuffle +# 1215| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1215| getVariable().getInitializer(): [Initializer] initializer for vi4_shuffle +# 1215| getExpr(): [BuiltInOperationBuiltInShuffleVector] __builtin_shufflevector +# 1215| Type = [GNUVectorType] __attribute((vector_size(16))) int +# 1215| ValueCategory = prvalue +# 1215| getChild(0): [VariableAccess] vi4 +# 1215| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1215| ValueCategory = prvalue(load) +# 1215| getChild(1): [VariableAccess] vi4 +# 1215| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1215| ValueCategory = prvalue(load) +# 1215| getChild(2): [AddExpr] ... + ... +# 1215| Type = [IntType] int +# 1215| Value = [AddExpr] 3 +# 1215| ValueCategory = prvalue +# 1215| getLeftOperand(): [Literal] 3 +# 1215| Type = [IntType] int +# 1215| Value = [Literal] 3 +# 1215| ValueCategory = prvalue +# 1215| getRightOperand(): [Literal] 0 +# 1215| Type = [IntType] int +# 1215| Value = [Literal] 0 +# 1215| ValueCategory = prvalue +# 1215| getChild(3): [Literal] 2 +# 1215| Type = [IntType] int +# 1215| Value = [Literal] 2 +# 1215| ValueCategory = prvalue +# 1215| getChild(4): [Literal] 1 +# 1215| Type = [IntType] int +# 1215| Value = [Literal] 1 +# 1215| ValueCategory = prvalue +# 1215| getChild(5): [Literal] 0 +# 1215| Type = [IntType] int +# 1215| Value = [Literal] 0 +# 1215| ValueCategory = prvalue +# 1216| getStmt(4): [ExprStmt] ExprStmt +# 1216| getExpr(): [AssignExpr] ... = ... +# 1216| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1216| ValueCategory = lvalue +# 1216| getLValue(): [VariableAccess] vi4 +# 1216| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1216| ValueCategory = lvalue +# 1216| getRValue(): [AddExpr] ... + ... +# 1216| Type = [GNUVectorType] __attribute((vector_size(16UL))) int +# 1216| ValueCategory = prvalue +# 1216| getLeftOperand(): [VariableAccess] vi4 +# 1216| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1216| ValueCategory = prvalue(load) +# 1216| getRightOperand(): [VariableAccess] vi4_shuffle +# 1216| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1216| ValueCategory = prvalue(load) +# 1217| getStmt(5): [ReturnStmt] return ... +# 1219| [TopLevelFunction] void* memcpy(void*, void*, int) +# 1219| : +# 1219| getParameter(0): [Parameter] dst +# 1219| Type = [VoidPointerType] void * +# 1219| getParameter(1): [Parameter] src +# 1219| Type = [VoidPointerType] void * +# 1219| getParameter(2): [Parameter] size +# 1219| Type = [IntType] int +# 1221| [TopLevelFunction] int ModeledCallTarget(int) +# 1221| : +# 1221| getParameter(0): [Parameter] x +# 1221| Type = [IntType] int +# 1221| getEntryPoint(): [BlockStmt] { ... } +# 1222| getStmt(0): [DeclStmt] declaration +# 1222| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1222| Type = [IntType] int +# 1223| getStmt(1): [ExprStmt] ExprStmt +# 1223| getExpr(): [FunctionCall] call to memcpy +# 1223| Type = [VoidPointerType] void * +# 1223| ValueCategory = prvalue +# 1223| getArgument(0): [AddressOfExpr] & ... +# 1223| Type = [IntPointerType] int * +# 1223| ValueCategory = prvalue +# 1223| getOperand(): [VariableAccess] y # 1223| Type = [IntType] int -# 1223| Value = [Literal] 2 -# 1223| ValueCategory = prvalue -# 1224| getStmt(4): [ExprStmt] ExprStmt -# 1224| getExpr(): [AssignExpr] ... = ... -# 1224| Type = [IntType] int -# 1224| ValueCategory = lvalue -# 1224| getLValue(): [VariableAccess] y -# 1224| Type = [IntType] int -# 1224| ValueCategory = lvalue -# 1224| getRValue(): [Literal] 3 -# 1224| Type = [IntType] int -# 1224| Value = [Literal] 3 -# 1224| ValueCategory = prvalue -# 1225| getStmt(5): [BreakStmt] break; -# 1227| getStmt(6): [SwitchCase] default: -# 1228| getStmt(7): [ExprStmt] ExprStmt -# 1228| getExpr(): [AssignExpr] ... = ... -# 1228| Type = [IntType] int -# 1228| ValueCategory = lvalue -# 1228| getLValue(): [VariableAccess] y -# 1228| Type = [IntType] int -# 1228| ValueCategory = lvalue -# 1228| getRValue(): [Literal] 4 -# 1228| Type = [IntType] int -# 1228| Value = [Literal] 4 -# 1228| ValueCategory = prvalue -# 1229| getStmt(2): [LabelStmt] label ...: -# 1230| getStmt(3): [DeclStmt] declaration -# 1230| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z -# 1230| Type = [IntType] int -# 1230| getVariable().getInitializer(): [Initializer] initializer for z -# 1230| getExpr(): [VariableAccess] y -# 1230| Type = [IntType] int -# 1230| ValueCategory = prvalue(load) -# 1231| getStmt(4): [ReturnStmt] return ... -# 1233| [TopLevelFunction] int staticLocalInit(int) -# 1233| : -# 1233| getParameter(0): [Parameter] x -# 1233| Type = [IntType] int -# 1233| getEntryPoint(): [BlockStmt] { ... } -# 1234| getStmt(0): [DeclStmt] declaration -# 1234| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a -# 1234| Type = [IntType] int -# 1234| getVariable().getInitializer(): [Initializer] initializer for a -# 1234| getExpr(): [Literal] 0 +# 1223| ValueCategory = lvalue +# 1223| getArgument(1): [AddressOfExpr] & ... +# 1223| Type = [IntPointerType] int * +# 1223| ValueCategory = prvalue +# 1223| getOperand(): [VariableAccess] x +# 1223| Type = [IntType] int +# 1223| ValueCategory = lvalue +# 1223| getArgument(2): [SizeofTypeOperator] sizeof(int) +# 1223| Type = [LongType] unsigned long +# 1223| Value = [SizeofTypeOperator] 4 +# 1223| ValueCategory = prvalue +# 1223| getArgument(0).getFullyConverted(): [CStyleCast] (void *)... +# 1223| Conversion = [PointerConversion] pointer conversion +# 1223| Type = [VoidPointerType] void * +# 1223| ValueCategory = prvalue +# 1223| getArgument(1).getFullyConverted(): [CStyleCast] (void *)... +# 1223| Conversion = [PointerConversion] pointer conversion +# 1223| Type = [VoidPointerType] void * +# 1223| ValueCategory = prvalue +# 1223| getArgument(2).getFullyConverted(): [CStyleCast] (int)... +# 1223| Conversion = [IntegralConversion] integral conversion +# 1223| Type = [IntType] int +# 1223| Value = [CStyleCast] 4 +# 1223| ValueCategory = prvalue +# 1224| getStmt(2): [ReturnStmt] return ... +# 1224| getExpr(): [VariableAccess] y +# 1224| Type = [IntType] int +# 1224| ValueCategory = prvalue(load) +# 1227| [TopLevelFunction] String ReturnObjectImpl() +# 1227| : +# 1227| getEntryPoint(): [BlockStmt] { ... } +# 1228| getStmt(0): [ReturnStmt] return ... +# 1228| getExpr(): [ConstructorCall] call to String +# 1228| Type = [VoidType] void +# 1228| ValueCategory = prvalue +# 1228| getArgument(0): foo +# 1228| Type = [ArrayType] const char[4] +# 1228| Value = [StringLiteral] "foo" +# 1228| ValueCategory = lvalue +# 1228| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1228| Type = [PointerType] const char * +# 1228| ValueCategory = prvalue +# 1231| [TopLevelFunction] void switch1Case(int) +# 1231| : +# 1231| getParameter(0): [Parameter] x +# 1231| Type = [IntType] int +# 1231| getEntryPoint(): [BlockStmt] { ... } +# 1232| getStmt(0): [DeclStmt] declaration +# 1232| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1232| Type = [IntType] int +# 1232| getVariable().getInitializer(): [Initializer] initializer for y +# 1232| getExpr(): [Literal] 0 +# 1232| Type = [IntType] int +# 1232| Value = [Literal] 0 +# 1232| ValueCategory = prvalue +# 1233| getStmt(1): [SwitchStmt] switch (...) ... +# 1233| getExpr(): [VariableAccess] x +# 1233| Type = [IntType] int +# 1233| ValueCategory = prvalue(load) +# 1233| getStmt(): [BlockStmt] { ... } +# 1234| getStmt(0): [SwitchCase] case ...: +# 1234| getExpr(): [Literal] 1 # 1234| Type = [IntType] int -# 1234| Value = [Literal] 0 +# 1234| Value = [Literal] 1 # 1234| ValueCategory = prvalue -# 1235| getStmt(1): [DeclStmt] declaration -# 1235| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 1235| Type = [IntType] int -# 1235| getVariable().getInitializer(): [Initializer] initializer for b -# 1235| getExpr(): [SizeofExprOperator] sizeof() -# 1235| Type = [LongType] unsigned long -# 1235| Value = [SizeofExprOperator] 4 -# 1235| ValueCategory = prvalue -# 1235| getExprOperand(): [VariableAccess] x -# 1235| Type = [IntType] int -# 1235| ValueCategory = lvalue -# 1235| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 1235| Type = [IntType] int -# 1235| ValueCategory = lvalue -# 1235| getExpr().getFullyConverted(): [CStyleCast] (int)... -# 1235| Conversion = [IntegralConversion] integral conversion +# 1235| getStmt(1): [ExprStmt] ExprStmt +# 1235| getExpr(): [AssignExpr] ... = ... # 1235| Type = [IntType] int -# 1235| Value = [CStyleCast] 4 -# 1235| ValueCategory = prvalue -# 1236| getStmt(2): [DeclStmt] declaration -# 1236| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 1236| Type = [IntType] int -# 1236| getVariable().getInitializer(): [Initializer] initializer for c -# 1236| getExpr(): [VariableAccess] x -# 1236| Type = [IntType] int -# 1236| ValueCategory = prvalue(load) -# 1237| getStmt(3): [DeclStmt] declaration -# 1237| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d +# 1235| ValueCategory = lvalue +# 1235| getLValue(): [VariableAccess] y +# 1235| Type = [IntType] int +# 1235| ValueCategory = lvalue +# 1235| getRValue(): [Literal] 2 +# 1235| Type = [IntType] int +# 1235| Value = [Literal] 2 +# 1235| ValueCategory = prvalue +# 1237| getStmt(2): [DeclStmt] declaration +# 1237| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z # 1237| Type = [IntType] int -# 1239| getStmt(4): [ReturnStmt] return ... -# 1239| getExpr(): [AddExpr] ... + ... -# 1239| Type = [IntType] int -# 1239| ValueCategory = prvalue -# 1239| getLeftOperand(): [AddExpr] ... + ... -# 1239| Type = [IntType] int -# 1239| ValueCategory = prvalue -# 1239| getLeftOperand(): [AddExpr] ... + ... -# 1239| Type = [IntType] int -# 1239| ValueCategory = prvalue -# 1239| getLeftOperand(): [VariableAccess] a -# 1239| Type = [IntType] int -# 1239| ValueCategory = prvalue(load) -# 1239| getRightOperand(): [VariableAccess] b -# 1239| Type = [IntType] int -# 1239| ValueCategory = prvalue(load) -# 1239| getRightOperand(): [VariableAccess] c -# 1239| Type = [IntType] int -# 1239| ValueCategory = prvalue(load) -# 1239| getRightOperand(): [VariableAccess] d -# 1239| Type = [IntType] int -# 1239| ValueCategory = prvalue(load) -# 1242| [TopLevelFunction] void staticLocalWithConstructor(char const*) -# 1242| : -# 1242| getParameter(0): [Parameter] dynamic -# 1242| Type = [PointerType] const char * -# 1242| getEntryPoint(): [BlockStmt] { ... } -# 1243| getStmt(0): [DeclStmt] declaration -# 1243| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a -# 1243| Type = [Struct] String +# 1237| getVariable().getInitializer(): [Initializer] initializer for z +# 1237| getExpr(): [VariableAccess] y +# 1237| Type = [IntType] int +# 1237| ValueCategory = prvalue(load) +# 1238| getStmt(3): [ReturnStmt] return ... +# 1240| [TopLevelFunction] void switch2Case_fallthrough(int) +# 1240| : +# 1240| getParameter(0): [Parameter] x +# 1240| Type = [IntType] int +# 1240| getEntryPoint(): [BlockStmt] { ... } +# 1241| getStmt(0): [DeclStmt] declaration +# 1241| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1241| Type = [IntType] int +# 1241| getVariable().getInitializer(): [Initializer] initializer for y +# 1241| getExpr(): [Literal] 0 +# 1241| Type = [IntType] int +# 1241| Value = [Literal] 0 +# 1241| ValueCategory = prvalue +# 1242| getStmt(1): [SwitchStmt] switch (...) ... +# 1242| getExpr(): [VariableAccess] x +# 1242| Type = [IntType] int +# 1242| ValueCategory = prvalue(load) +# 1242| getStmt(): [BlockStmt] { ... } +# 1243| getStmt(0): [SwitchCase] case ...: +# 1243| getExpr(): [Literal] 1 +# 1243| Type = [IntType] int +# 1243| Value = [Literal] 1 +# 1243| ValueCategory = prvalue +# 1244| getStmt(1): [ExprStmt] ExprStmt +# 1244| getExpr(): [AssignExpr] ... = ... +# 1244| Type = [IntType] int +# 1244| ValueCategory = lvalue +# 1244| getLValue(): [VariableAccess] y +# 1244| Type = [IntType] int +# 1244| ValueCategory = lvalue +# 1244| getRValue(): [Literal] 2 +# 1244| Type = [IntType] int +# 1244| Value = [Literal] 2 +# 1244| ValueCategory = prvalue +# 1245| getStmt(2): [SwitchCase] case ...: +# 1245| getExpr(): [Literal] 2 +# 1245| Type = [IntType] int +# 1245| Value = [Literal] 2 +# 1245| ValueCategory = prvalue +# 1246| getStmt(3): [ExprStmt] ExprStmt +# 1246| getExpr(): [AssignExpr] ... = ... +# 1246| Type = [IntType] int +# 1246| ValueCategory = lvalue +# 1246| getLValue(): [VariableAccess] y +# 1246| Type = [IntType] int +# 1246| ValueCategory = lvalue +# 1246| getRValue(): [Literal] 3 +# 1246| Type = [IntType] int +# 1246| Value = [Literal] 3 +# 1246| ValueCategory = prvalue +# 1248| getStmt(2): [DeclStmt] declaration +# 1248| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1248| Type = [IntType] int +# 1248| getVariable().getInitializer(): [Initializer] initializer for z +# 1248| getExpr(): [VariableAccess] y +# 1248| Type = [IntType] int +# 1248| ValueCategory = prvalue(load) +# 1249| getStmt(3): [ReturnStmt] return ... +# 1251| [TopLevelFunction] void switch2Case(int) +# 1251| : +# 1251| getParameter(0): [Parameter] x +# 1251| Type = [IntType] int +# 1251| getEntryPoint(): [BlockStmt] { ... } +# 1252| getStmt(0): [DeclStmt] declaration +# 1252| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1252| Type = [IntType] int +# 1252| getVariable().getInitializer(): [Initializer] initializer for y +# 1252| getExpr(): [Literal] 0 +# 1252| Type = [IntType] int +# 1252| Value = [Literal] 0 +# 1252| ValueCategory = prvalue +# 1253| getStmt(1): [SwitchStmt] switch (...) ... +# 1253| getExpr(): [VariableAccess] x +# 1253| Type = [IntType] int +# 1253| ValueCategory = prvalue(load) +# 1253| getStmt(): [BlockStmt] { ... } +# 1254| getStmt(0): [SwitchCase] case ...: +# 1254| getExpr(): [Literal] 1 +# 1254| Type = [IntType] int +# 1254| Value = [Literal] 1 +# 1254| ValueCategory = prvalue +# 1255| getStmt(1): [ExprStmt] ExprStmt +# 1255| getExpr(): [AssignExpr] ... = ... +# 1255| Type = [IntType] int +# 1255| ValueCategory = lvalue +# 1255| getLValue(): [VariableAccess] y +# 1255| Type = [IntType] int +# 1255| ValueCategory = lvalue +# 1255| getRValue(): [Literal] 2 +# 1255| Type = [IntType] int +# 1255| Value = [Literal] 2 +# 1255| ValueCategory = prvalue +# 1256| getStmt(2): [BreakStmt] break; +# 1257| getStmt(3): [SwitchCase] case ...: +# 1257| getExpr(): [Literal] 2 +# 1257| Type = [IntType] int +# 1257| Value = [Literal] 2 +# 1257| ValueCategory = prvalue +# 1258| getStmt(4): [ExprStmt] ExprStmt +# 1258| getExpr(): [AssignExpr] ... = ... +# 1258| Type = [IntType] int +# 1258| ValueCategory = lvalue +# 1258| getLValue(): [VariableAccess] y +# 1258| Type = [IntType] int +# 1258| ValueCategory = lvalue +# 1258| getRValue(): [Literal] 3 +# 1258| Type = [IntType] int +# 1258| Value = [Literal] 3 +# 1258| ValueCategory = prvalue +# 1259| getStmt(2): [LabelStmt] label ...: +# 1260| getStmt(3): [DeclStmt] declaration +# 1260| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1260| Type = [IntType] int +# 1260| getVariable().getInitializer(): [Initializer] initializer for z +# 1260| getExpr(): [VariableAccess] y +# 1260| Type = [IntType] int +# 1260| ValueCategory = prvalue(load) +# 1261| getStmt(4): [ReturnStmt] return ... +# 1263| [TopLevelFunction] void switch2Case_default(int) +# 1263| : +# 1263| getParameter(0): [Parameter] x +# 1263| Type = [IntType] int +# 1263| getEntryPoint(): [BlockStmt] { ... } +# 1264| getStmt(0): [DeclStmt] declaration +# 1264| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1264| Type = [IntType] int +# 1264| getVariable().getInitializer(): [Initializer] initializer for y +# 1264| getExpr(): [Literal] 0 +# 1264| Type = [IntType] int +# 1264| Value = [Literal] 0 +# 1264| ValueCategory = prvalue +# 1265| getStmt(1): [SwitchStmt] switch (...) ... +# 1265| getExpr(): [VariableAccess] x +# 1265| Type = [IntType] int +# 1265| ValueCategory = prvalue(load) +# 1265| getStmt(): [BlockStmt] { ... } +# 1266| getStmt(0): [SwitchCase] case ...: +# 1266| getExpr(): [Literal] 1 +# 1266| Type = [IntType] int +# 1266| Value = [Literal] 1 +# 1266| ValueCategory = prvalue +# 1267| getStmt(1): [ExprStmt] ExprStmt +# 1267| getExpr(): [AssignExpr] ... = ... +# 1267| Type = [IntType] int +# 1267| ValueCategory = lvalue +# 1267| getLValue(): [VariableAccess] y +# 1267| Type = [IntType] int +# 1267| ValueCategory = lvalue +# 1267| getRValue(): [Literal] 2 +# 1267| Type = [IntType] int +# 1267| Value = [Literal] 2 +# 1267| ValueCategory = prvalue +# 1268| getStmt(2): [BreakStmt] break; +# 1270| getStmt(3): [SwitchCase] case ...: +# 1270| getExpr(): [Literal] 2 +# 1270| Type = [IntType] int +# 1270| Value = [Literal] 2 +# 1270| ValueCategory = prvalue +# 1271| getStmt(4): [ExprStmt] ExprStmt +# 1271| getExpr(): [AssignExpr] ... = ... +# 1271| Type = [IntType] int +# 1271| ValueCategory = lvalue +# 1271| getLValue(): [VariableAccess] y +# 1271| Type = [IntType] int +# 1271| ValueCategory = lvalue +# 1271| getRValue(): [Literal] 3 +# 1271| Type = [IntType] int +# 1271| Value = [Literal] 3 +# 1271| ValueCategory = prvalue +# 1272| getStmt(5): [BreakStmt] break; +# 1274| getStmt(6): [SwitchCase] default: +# 1275| getStmt(7): [ExprStmt] ExprStmt +# 1275| getExpr(): [AssignExpr] ... = ... +# 1275| Type = [IntType] int +# 1275| ValueCategory = lvalue +# 1275| getLValue(): [VariableAccess] y +# 1275| Type = [IntType] int +# 1275| ValueCategory = lvalue +# 1275| getRValue(): [Literal] 4 +# 1275| Type = [IntType] int +# 1275| Value = [Literal] 4 +# 1275| ValueCategory = prvalue +# 1276| getStmt(2): [LabelStmt] label ...: +# 1277| getStmt(3): [DeclStmt] declaration +# 1277| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1277| Type = [IntType] int +# 1277| getVariable().getInitializer(): [Initializer] initializer for z +# 1277| getExpr(): [VariableAccess] y +# 1277| Type = [IntType] int +# 1277| ValueCategory = prvalue(load) +# 1278| getStmt(4): [ReturnStmt] return ... +# 1280| [TopLevelFunction] int staticLocalInit(int) +# 1280| : +# 1280| getParameter(0): [Parameter] x +# 1280| Type = [IntType] int +# 1280| getEntryPoint(): [BlockStmt] { ... } +# 1281| getStmt(0): [DeclStmt] declaration +# 1281| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a +# 1281| Type = [IntType] int +# 1281| getVariable().getInitializer(): [Initializer] initializer for a +# 1281| getExpr(): [Literal] 0 +# 1281| Type = [IntType] int +# 1281| Value = [Literal] 0 +# 1281| ValueCategory = prvalue +# 1282| getStmt(1): [DeclStmt] declaration +# 1282| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 1282| Type = [IntType] int +# 1282| getVariable().getInitializer(): [Initializer] initializer for b +# 1282| getExpr(): [SizeofExprOperator] sizeof() +# 1282| Type = [LongType] unsigned long +# 1282| Value = [SizeofExprOperator] 4 +# 1282| ValueCategory = prvalue +# 1282| getExprOperand(): [VariableAccess] x +# 1282| Type = [IntType] int +# 1282| ValueCategory = lvalue +# 1282| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 1282| Type = [IntType] int +# 1282| ValueCategory = lvalue +# 1282| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 1282| Conversion = [IntegralConversion] integral conversion +# 1282| Type = [IntType] int +# 1282| Value = [CStyleCast] 4 +# 1282| ValueCategory = prvalue +# 1283| getStmt(2): [DeclStmt] declaration +# 1283| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 1283| Type = [IntType] int +# 1283| getVariable().getInitializer(): [Initializer] initializer for c +# 1283| getExpr(): [VariableAccess] x +# 1283| Type = [IntType] int +# 1283| ValueCategory = prvalue(load) +# 1284| getStmt(3): [DeclStmt] declaration +# 1284| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d +# 1284| Type = [IntType] int +# 1286| getStmt(4): [ReturnStmt] return ... +# 1286| getExpr(): [AddExpr] ... + ... +# 1286| Type = [IntType] int +# 1286| ValueCategory = prvalue +# 1286| getLeftOperand(): [AddExpr] ... + ... +# 1286| Type = [IntType] int +# 1286| ValueCategory = prvalue +# 1286| getLeftOperand(): [AddExpr] ... + ... +# 1286| Type = [IntType] int +# 1286| ValueCategory = prvalue +# 1286| getLeftOperand(): [VariableAccess] a +# 1286| Type = [IntType] int +# 1286| ValueCategory = prvalue(load) +# 1286| getRightOperand(): [VariableAccess] b +# 1286| Type = [IntType] int +# 1286| ValueCategory = prvalue(load) +# 1286| getRightOperand(): [VariableAccess] c +# 1286| Type = [IntType] int +# 1286| ValueCategory = prvalue(load) +# 1286| getRightOperand(): [VariableAccess] d +# 1286| Type = [IntType] int +# 1286| ValueCategory = prvalue(load) +# 1289| [TopLevelFunction] void staticLocalWithConstructor(char const*) +# 1289| : +# 1289| getParameter(0): [Parameter] dynamic +# 1289| Type = [PointerType] const char * +# 1289| getEntryPoint(): [BlockStmt] { ... } +# 1290| getStmt(0): [DeclStmt] declaration +# 1290| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a +# 1290| Type = [Struct] String #-----| getVariable().getInitializer(): [Initializer] initializer for a #-----| getExpr(): [ConstructorCall] call to String #-----| Type = [VoidType] void #-----| ValueCategory = prvalue -# 1244| getStmt(1): [DeclStmt] declaration -# 1244| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 1244| Type = [Struct] String -# 1244| getVariable().getInitializer(): [Initializer] initializer for b -# 1244| getExpr(): [ConstructorCall] call to String -# 1244| Type = [VoidType] void -# 1244| ValueCategory = prvalue -# 1244| getArgument(0): static -# 1244| Type = [ArrayType] const char[7] -# 1244| Value = [StringLiteral] "static" -# 1244| ValueCategory = lvalue -# 1244| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1244| Type = [PointerType] const char * -# 1244| ValueCategory = prvalue -# 1245| getStmt(2): [DeclStmt] declaration -# 1245| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 1245| Type = [Struct] String -# 1245| getVariable().getInitializer(): [Initializer] initializer for c -# 1245| getExpr(): [ConstructorCall] call to String -# 1245| Type = [VoidType] void -# 1245| ValueCategory = prvalue -# 1245| getArgument(0): [VariableAccess] dynamic -# 1245| Type = [PointerType] const char * -# 1245| ValueCategory = prvalue(load) -# 1246| getStmt(3): [ReturnStmt] return ... -# 1250| [TopLevelFunction] char* strcpy(char*, char const*) -# 1250| : -# 1250| getParameter(0): [Parameter] destination -# 1250| Type = [CharPointerType] char * -# 1250| getParameter(1): [Parameter] source -# 1250| Type = [PointerType] const char * -# 1251| [TopLevelFunction] char* strcat(char*, char const*) -# 1251| : -# 1251| getParameter(0): [Parameter] destination -# 1251| Type = [CharPointerType] char * -# 1251| getParameter(1): [Parameter] source -# 1251| Type = [PointerType] const char * -# 1253| [TopLevelFunction] void test_strings(char*, char*) -# 1253| : -# 1253| getParameter(0): [Parameter] s1 -# 1253| Type = [CharPointerType] char * -# 1253| getParameter(1): [Parameter] s2 -# 1253| Type = [CharPointerType] char * -# 1253| getEntryPoint(): [BlockStmt] { ... } -# 1254| getStmt(0): [DeclStmt] declaration -# 1254| getDeclarationEntry(0): [VariableDeclarationEntry] definition of buffer -# 1254| Type = [ArrayType] char[1024] -# 1254| getVariable().getInitializer(): [Initializer] initializer for buffer -# 1254| getExpr(): [ArrayAggregateLiteral] {...} -# 1254| Type = [ArrayType] char[1024] -# 1254| ValueCategory = prvalue -# 1254| getAnElementExpr(0): [Literal] 0 -# 1254| Type = [IntType] int -# 1254| Value = [Literal] 0 -# 1254| ValueCategory = prvalue -# 1254| getAnElementExpr(0).getFullyConverted(): [CStyleCast] (char)... -# 1254| Conversion = [IntegralConversion] integral conversion -# 1254| Type = [PlainCharType] char -# 1254| Value = [CStyleCast] 0 -# 1254| ValueCategory = prvalue -# 1256| getStmt(1): [ExprStmt] ExprStmt -# 1256| getExpr(): [FunctionCall] call to strcpy -# 1256| Type = [CharPointerType] char * -# 1256| ValueCategory = prvalue -# 1256| getArgument(0): [VariableAccess] buffer -# 1256| Type = [ArrayType] char[1024] -# 1256| ValueCategory = lvalue -# 1256| getArgument(1): [VariableAccess] s1 -# 1256| Type = [CharPointerType] char * -# 1256| ValueCategory = prvalue(load) -# 1256| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1256| Type = [CharPointerType] char * -# 1256| ValueCategory = prvalue -# 1256| getArgument(1).getFullyConverted(): [CStyleCast] (const char *)... -# 1256| Conversion = [PointerConversion] pointer conversion -# 1256| Type = [PointerType] const char * -# 1256| ValueCategory = prvalue -# 1257| getStmt(2): [ExprStmt] ExprStmt -# 1257| getExpr(): [FunctionCall] call to strcat -# 1257| Type = [CharPointerType] char * -# 1257| ValueCategory = prvalue -# 1257| getArgument(0): [VariableAccess] buffer -# 1257| Type = [ArrayType] char[1024] -# 1257| ValueCategory = lvalue -# 1257| getArgument(1): [VariableAccess] s2 -# 1257| Type = [CharPointerType] char * -# 1257| ValueCategory = prvalue(load) -# 1257| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1257| Type = [CharPointerType] char * -# 1257| ValueCategory = prvalue -# 1257| getArgument(1).getFullyConverted(): [CStyleCast] (const char *)... -# 1257| Conversion = [PointerConversion] pointer conversion -# 1257| Type = [PointerType] const char * -# 1257| ValueCategory = prvalue -# 1258| getStmt(3): [ReturnStmt] return ... -# 1260| [CopyAssignmentOperator] A& A::operator=(A const&) -# 1260| : +# 1291| getStmt(1): [DeclStmt] declaration +# 1291| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 1291| Type = [Struct] String +# 1291| getVariable().getInitializer(): [Initializer] initializer for b +# 1291| getExpr(): [ConstructorCall] call to String +# 1291| Type = [VoidType] void +# 1291| ValueCategory = prvalue +# 1291| getArgument(0): static +# 1291| Type = [ArrayType] const char[7] +# 1291| Value = [StringLiteral] "static" +# 1291| ValueCategory = lvalue +# 1291| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1291| Type = [PointerType] const char * +# 1291| ValueCategory = prvalue +# 1292| getStmt(2): [DeclStmt] declaration +# 1292| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 1292| Type = [Struct] String +# 1292| getVariable().getInitializer(): [Initializer] initializer for c +# 1292| getExpr(): [ConstructorCall] call to String +# 1292| Type = [VoidType] void +# 1292| ValueCategory = prvalue +# 1292| getArgument(0): [VariableAccess] dynamic +# 1292| Type = [PointerType] const char * +# 1292| ValueCategory = prvalue(load) +# 1293| getStmt(3): [ReturnStmt] return ... +# 1297| [TopLevelFunction] char* strcpy(char*, char const*) +# 1297| : +# 1297| getParameter(0): [Parameter] destination +# 1297| Type = [CharPointerType] char * +# 1297| getParameter(1): [Parameter] source +# 1297| Type = [PointerType] const char * +# 1298| [TopLevelFunction] char* strcat(char*, char const*) +# 1298| : +# 1298| getParameter(0): [Parameter] destination +# 1298| Type = [CharPointerType] char * +# 1298| getParameter(1): [Parameter] source +# 1298| Type = [PointerType] const char * +# 1300| [TopLevelFunction] void test_strings(char*, char*) +# 1300| : +# 1300| getParameter(0): [Parameter] s1 +# 1300| Type = [CharPointerType] char * +# 1300| getParameter(1): [Parameter] s2 +# 1300| Type = [CharPointerType] char * +# 1300| getEntryPoint(): [BlockStmt] { ... } +# 1301| getStmt(0): [DeclStmt] declaration +# 1301| getDeclarationEntry(0): [VariableDeclarationEntry] definition of buffer +# 1301| Type = [ArrayType] char[1024] +# 1301| getVariable().getInitializer(): [Initializer] initializer for buffer +# 1301| getExpr(): [ArrayAggregateLiteral] {...} +# 1301| Type = [ArrayType] char[1024] +# 1301| ValueCategory = prvalue +# 1301| getAnElementExpr(0): [Literal] 0 +# 1301| Type = [IntType] int +# 1301| Value = [Literal] 0 +# 1301| ValueCategory = prvalue +# 1301| getAnElementExpr(0).getFullyConverted(): [CStyleCast] (char)... +# 1301| Conversion = [IntegralConversion] integral conversion +# 1301| Type = [PlainCharType] char +# 1301| Value = [CStyleCast] 0 +# 1301| ValueCategory = prvalue +# 1303| getStmt(1): [ExprStmt] ExprStmt +# 1303| getExpr(): [FunctionCall] call to strcpy +# 1303| Type = [CharPointerType] char * +# 1303| ValueCategory = prvalue +# 1303| getArgument(0): [VariableAccess] buffer +# 1303| Type = [ArrayType] char[1024] +# 1303| ValueCategory = lvalue +# 1303| getArgument(1): [VariableAccess] s1 +# 1303| Type = [CharPointerType] char * +# 1303| ValueCategory = prvalue(load) +# 1303| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1303| Type = [CharPointerType] char * +# 1303| ValueCategory = prvalue +# 1303| getArgument(1).getFullyConverted(): [CStyleCast] (const char *)... +# 1303| Conversion = [PointerConversion] pointer conversion +# 1303| Type = [PointerType] const char * +# 1303| ValueCategory = prvalue +# 1304| getStmt(2): [ExprStmt] ExprStmt +# 1304| getExpr(): [FunctionCall] call to strcat +# 1304| Type = [CharPointerType] char * +# 1304| ValueCategory = prvalue +# 1304| getArgument(0): [VariableAccess] buffer +# 1304| Type = [ArrayType] char[1024] +# 1304| ValueCategory = lvalue +# 1304| getArgument(1): [VariableAccess] s2 +# 1304| Type = [CharPointerType] char * +# 1304| ValueCategory = prvalue(load) +# 1304| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1304| Type = [CharPointerType] char * +# 1304| ValueCategory = prvalue +# 1304| getArgument(1).getFullyConverted(): [CStyleCast] (const char *)... +# 1304| Conversion = [PointerConversion] pointer conversion +# 1304| Type = [PointerType] const char * +# 1304| ValueCategory = prvalue +# 1305| getStmt(3): [ReturnStmt] return ... +# 1307| [CopyAssignmentOperator] A& A::operator=(A const&) +# 1307| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const A & -# 1260| [MoveAssignmentOperator] A& A::operator=(A&&) -# 1260| : +# 1307| [MoveAssignmentOperator] A& A::operator=(A&&) +# 1307| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] A && -# 1263| [MemberFunction] void A::static_member(A*, int) -# 1263| : -# 1263| getParameter(0): [Parameter] a -# 1263| Type = [PointerType] A * -# 1263| getParameter(1): [Parameter] x -# 1263| Type = [IntType] int -# 1263| getEntryPoint(): [BlockStmt] { ... } -# 1264| getStmt(0): [ExprStmt] ExprStmt -# 1264| getExpr(): [AssignExpr] ... = ... -# 1264| Type = [IntType] int -# 1264| ValueCategory = lvalue -# 1264| getLValue(): [PointerFieldAccess] member -# 1264| Type = [IntType] int -# 1264| ValueCategory = lvalue -# 1264| getQualifier(): [VariableAccess] a -# 1264| Type = [PointerType] A * -# 1264| ValueCategory = prvalue(load) -# 1264| getRValue(): [VariableAccess] x -# 1264| Type = [IntType] int -# 1264| ValueCategory = prvalue(load) -# 1265| getStmt(1): [ReturnStmt] return ... -# 1267| [MemberFunction] void A::static_member_without_def() -# 1267| : -# 1270| [TopLevelFunction] A* getAnInstanceOfA() -# 1270| : -# 1272| [TopLevelFunction] void test_static_member_functions(int, A*) -# 1272| : -# 1272| getParameter(0): [Parameter] int_arg -# 1272| Type = [IntType] int -# 1272| getParameter(1): [Parameter] a_arg -# 1272| Type = [PointerType] A * -# 1272| getEntryPoint(): [BlockStmt] { ... } -# 1273| getStmt(0): [DeclStmt] declaration -# 1273| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 1273| Type = [Class] C -# 1273| getVariable().getInitializer(): [Initializer] initializer for c -# 1273| getExpr(): [ConstructorCall] call to C -# 1273| Type = [VoidType] void -# 1273| ValueCategory = prvalue -# 1274| getStmt(1): [ExprStmt] ExprStmt -# 1274| getExpr(): [FunctionCall] call to StaticMemberFunction -# 1274| Type = [IntType] int -# 1274| ValueCategory = prvalue -# 1274| getQualifier(): [VariableAccess] c -# 1274| Type = [Class] C -# 1274| ValueCategory = lvalue -# 1274| getArgument(0): [Literal] 10 -# 1274| Type = [IntType] int -# 1274| Value = [Literal] 10 -# 1274| ValueCategory = prvalue -# 1275| getStmt(2): [ExprStmt] ExprStmt -# 1275| getExpr(): [FunctionCall] call to StaticMemberFunction -# 1275| Type = [IntType] int -# 1275| ValueCategory = prvalue -# 1275| getArgument(0): [Literal] 10 -# 1275| Type = [IntType] int -# 1275| Value = [Literal] 10 -# 1275| ValueCategory = prvalue -# 1277| getStmt(3): [DeclStmt] declaration -# 1277| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a -# 1277| Type = [Struct] A -# 1278| getStmt(4): [ExprStmt] ExprStmt -# 1278| getExpr(): [FunctionCall] call to static_member -# 1278| Type = [VoidType] void -# 1278| ValueCategory = prvalue -# 1278| getQualifier(): [VariableAccess] a -# 1278| Type = [Struct] A -# 1278| ValueCategory = lvalue -# 1278| getArgument(0): [AddressOfExpr] & ... -# 1278| Type = [PointerType] A * -# 1278| ValueCategory = prvalue -# 1278| getOperand(): [VariableAccess] a -# 1278| Type = [Struct] A -# 1278| ValueCategory = lvalue -# 1278| getArgument(1): [VariableAccess] int_arg -# 1278| Type = [IntType] int -# 1278| ValueCategory = prvalue(load) -# 1279| getStmt(5): [ExprStmt] ExprStmt -# 1279| getExpr(): [FunctionCall] call to static_member -# 1279| Type = [VoidType] void -# 1279| ValueCategory = prvalue -# 1279| getArgument(0): [AddressOfExpr] & ... -# 1279| Type = [PointerType] A * -# 1279| ValueCategory = prvalue -# 1279| getOperand(): [VariableAccess] a -# 1279| Type = [Struct] A -# 1279| ValueCategory = lvalue -# 1279| getArgument(1): [VariableAccess] int_arg -# 1279| Type = [IntType] int -# 1279| ValueCategory = prvalue(load) -# 1281| getStmt(6): [ExprStmt] ExprStmt -# 1281| getExpr(): [FunctionCall] call to static_member -# 1281| Type = [VoidType] void -# 1281| ValueCategory = prvalue -# 1281| getQualifier(): [AddressOfExpr] & ... -# 1281| Type = [PointerType] A * -# 1281| ValueCategory = prvalue -# 1281| getOperand(): [VariableAccess] a -# 1281| Type = [Struct] A -# 1281| ValueCategory = lvalue -# 1281| getArgument(0): [VariableAccess] a_arg -# 1281| Type = [PointerType] A * -# 1281| ValueCategory = prvalue(load) -# 1281| getArgument(1): [AddExpr] ... + ... -# 1281| Type = [IntType] int -# 1281| ValueCategory = prvalue -# 1281| getLeftOperand(): [VariableAccess] int_arg -# 1281| Type = [IntType] int -# 1281| ValueCategory = prvalue(load) -# 1281| getRightOperand(): [Literal] 2 -# 1281| Type = [IntType] int -# 1281| Value = [Literal] 2 -# 1281| ValueCategory = prvalue -# 1281| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) -# 1281| Type = [PointerType] A * -# 1281| ValueCategory = prvalue -# 1282| getStmt(7): [ExprStmt] ExprStmt -# 1282| getExpr(): [FunctionCall] call to static_member -# 1282| Type = [VoidType] void -# 1282| ValueCategory = prvalue -# 1282| getQualifier(): [PointerDereferenceExpr] * ... -# 1282| Type = [Struct] A -# 1282| ValueCategory = lvalue -# 1282| getOperand(): [VariableAccess] a_arg -# 1282| Type = [PointerType] A * -# 1282| ValueCategory = prvalue(load) -# 1282| getArgument(0): [AddressOfExpr] & ... -# 1282| Type = [PointerType] A * -# 1282| ValueCategory = prvalue -# 1282| getOperand(): [VariableAccess] a -# 1282| Type = [Struct] A -# 1282| ValueCategory = lvalue -# 1282| getArgument(1): [Literal] 99 -# 1282| Type = [IntType] int -# 1282| Value = [Literal] 99 -# 1282| ValueCategory = prvalue -# 1282| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) -# 1282| Type = [Struct] A -# 1282| ValueCategory = lvalue -# 1283| getStmt(8): [ExprStmt] ExprStmt -# 1283| getExpr(): [FunctionCall] call to static_member -# 1283| Type = [VoidType] void -# 1283| ValueCategory = prvalue -# 1283| getQualifier(): [VariableAccess] a_arg -# 1283| Type = [PointerType] A * -# 1283| ValueCategory = prvalue(load) -# 1283| getArgument(0): [VariableAccess] a_arg -# 1283| Type = [PointerType] A * -# 1283| ValueCategory = prvalue(load) -# 1283| getArgument(1): [UnaryMinusExpr] - ... -# 1283| Type = [IntType] int -# 1283| Value = [UnaryMinusExpr] -1 -# 1283| ValueCategory = prvalue -# 1283| getOperand(): [Literal] 1 -# 1283| Type = [IntType] int -# 1283| Value = [Literal] 1 -# 1283| ValueCategory = prvalue -# 1285| getStmt(9): [ExprStmt] ExprStmt -# 1285| getExpr(): [FunctionCall] call to static_member_without_def -# 1285| Type = [VoidType] void -# 1285| ValueCategory = prvalue -# 1285| getQualifier(): [VariableAccess] a -# 1285| Type = [Struct] A -# 1285| ValueCategory = lvalue -# 1286| getStmt(10): [ExprStmt] ExprStmt -# 1286| getExpr(): [FunctionCall] call to static_member_without_def -# 1286| Type = [VoidType] void -# 1286| ValueCategory = prvalue -# 1288| getStmt(11): [ExprStmt] ExprStmt -# 1288| getExpr(): [FunctionCall] call to static_member_without_def -# 1288| Type = [VoidType] void -# 1288| ValueCategory = prvalue -# 1288| getQualifier(): [FunctionCall] call to getAnInstanceOfA -# 1288| Type = [PointerType] A * -# 1288| ValueCategory = prvalue -# 1289| getStmt(12): [ReturnStmt] return ... -# 1289| getImplicitDestructorCall(0): [DestructorCall] call to ~C -# 1289| Type = [VoidType] void -# 1289| ValueCategory = prvalue -# 1289| getQualifier(): [VariableAccess] c -# 1289| Type = [Class] C -# 1289| ValueCategory = lvalue -# 1291| [TopLevelFunction] int missingReturnValue(bool, int) -# 1291| : -# 1291| getParameter(0): [Parameter] b -# 1291| Type = [BoolType] bool -# 1291| getParameter(1): [Parameter] x -# 1291| Type = [IntType] int -# 1291| getEntryPoint(): [BlockStmt] { ... } -# 1292| getStmt(0): [IfStmt] if (...) ... -# 1292| getCondition(): [VariableAccess] b -# 1292| Type = [BoolType] bool -# 1292| ValueCategory = prvalue(load) -# 1292| getThen(): [BlockStmt] { ... } -# 1293| getStmt(0): [ReturnStmt] return ... -# 1293| getExpr(): [VariableAccess] x -# 1293| Type = [IntType] int -# 1293| ValueCategory = prvalue(load) -# 1295| getStmt(1): [ReturnStmt] return ... -# 1297| [TopLevelFunction] void returnVoid(int, int) -# 1297| : -# 1297| getParameter(0): [Parameter] x -# 1297| Type = [IntType] int -# 1297| getParameter(1): [Parameter] y -# 1297| Type = [IntType] int -# 1297| getEntryPoint(): [BlockStmt] { ... } -# 1298| getStmt(0): [ReturnStmt] return ... -# 1298| getExpr(): [FunctionCall] call to IntegerOps -# 1298| Type = [VoidType] void -# 1298| ValueCategory = prvalue -# 1298| getArgument(0): [VariableAccess] x -# 1298| Type = [IntType] int -# 1298| ValueCategory = prvalue(load) -# 1298| getArgument(1): [VariableAccess] y -# 1298| Type = [IntType] int -# 1298| ValueCategory = prvalue(load) -# 1301| [TopLevelFunction] void gccBinaryConditional(bool, int, long) -# 1301| : -# 1301| getParameter(0): [Parameter] b -# 1301| Type = [BoolType] bool -# 1301| getParameter(1): [Parameter] x -# 1301| Type = [IntType] int -# 1301| getParameter(2): [Parameter] y -# 1301| Type = [LongType] long -# 1301| getEntryPoint(): [BlockStmt] { ... } -# 1302| getStmt(0): [DeclStmt] declaration -# 1302| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z -# 1302| Type = [IntType] int -# 1302| getVariable().getInitializer(): [Initializer] initializer for z -# 1302| getExpr(): [VariableAccess] x -# 1302| Type = [IntType] int -# 1302| ValueCategory = prvalue(load) -# 1303| getStmt(1): [ExprStmt] ExprStmt -# 1303| getExpr(): [AssignExpr] ... = ... -# 1303| Type = [IntType] int -# 1303| ValueCategory = lvalue -# 1303| getLValue(): [VariableAccess] z -# 1303| Type = [IntType] int -# 1303| ValueCategory = lvalue -# 1303| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1303| Type = [IntType] int -# 1303| ValueCategory = prvalue(load) -# 1303| getCondition(): [VariableAccess] b -# 1303| Type = [BoolType] bool -# 1303| ValueCategory = prvalue(load) -# 1303| getElse(): [VariableAccess] x -# 1303| Type = [IntType] int -# 1303| ValueCategory = prvalue(load) -# 1304| getStmt(2): [ExprStmt] ExprStmt -# 1304| getExpr(): [AssignExpr] ... = ... -# 1304| Type = [IntType] int -# 1304| ValueCategory = lvalue -# 1304| getLValue(): [VariableAccess] z -# 1304| Type = [IntType] int -# 1304| ValueCategory = lvalue -# 1304| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1304| Type = [LongType] long -# 1304| ValueCategory = prvalue(load) -# 1304| getCondition(): [VariableAccess] b -# 1304| Type = [BoolType] bool -# 1304| ValueCategory = prvalue(load) -# 1304| getElse(): [VariableAccess] y -# 1304| Type = [LongType] long -# 1304| ValueCategory = prvalue(load) -# 1304| getRValue().getFullyConverted(): [CStyleCast] (int)... -# 1304| Conversion = [IntegralConversion] integral conversion -# 1304| Type = [IntType] int -# 1304| ValueCategory = prvalue -# 1305| getStmt(3): [ExprStmt] ExprStmt -# 1305| getExpr(): [AssignExpr] ... = ... -# 1305| Type = [IntType] int -# 1305| ValueCategory = lvalue -# 1305| getLValue(): [VariableAccess] z -# 1305| Type = [IntType] int -# 1305| ValueCategory = lvalue -# 1305| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1305| Type = [IntType] int -# 1305| ValueCategory = prvalue(load) -# 1305| getCondition(): [VariableAccess] x -# 1305| Type = [IntType] int -# 1305| ValueCategory = prvalue(load) -# 1305| getElse(): [VariableAccess] x -# 1305| Type = [IntType] int -# 1305| ValueCategory = prvalue(load) -# 1305| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1305| Conversion = [BoolConversion] conversion to bool -# 1305| Type = [BoolType] bool -# 1305| ValueCategory = prvalue -# 1306| getStmt(4): [ExprStmt] ExprStmt -# 1306| getExpr(): [AssignExpr] ... = ... -# 1306| Type = [IntType] int -# 1306| ValueCategory = lvalue -# 1306| getLValue(): [VariableAccess] z -# 1306| Type = [IntType] int -# 1306| ValueCategory = lvalue -# 1306| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1306| Type = [LongType] long -# 1306| ValueCategory = prvalue(load) -# 1306| getCondition(): [VariableAccess] x -# 1306| Type = [IntType] int -# 1306| ValueCategory = prvalue(load) -# 1306| getElse(): [VariableAccess] y -# 1306| Type = [LongType] long -# 1306| ValueCategory = prvalue(load) -# 1306| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1306| Conversion = [BoolConversion] conversion to bool -# 1306| Type = [BoolType] bool -# 1306| ValueCategory = prvalue -# 1306| getRValue().getFullyConverted(): [CStyleCast] (int)... -# 1306| Conversion = [IntegralConversion] integral conversion -# 1306| Type = [IntType] int -# 1306| ValueCategory = prvalue -# 1307| getStmt(5): [ExprStmt] ExprStmt -# 1307| getExpr(): [AssignExpr] ... = ... -# 1307| Type = [IntType] int -# 1307| ValueCategory = lvalue -# 1307| getLValue(): [VariableAccess] z -# 1307| Type = [IntType] int -# 1307| ValueCategory = lvalue -# 1307| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1307| Type = [LongType] long -# 1307| ValueCategory = prvalue(load) -# 1307| getCondition(): [VariableAccess] y -# 1307| Type = [LongType] long -# 1307| ValueCategory = prvalue(load) -# 1307| getElse(): [VariableAccess] x -# 1307| Type = [IntType] int -# 1307| ValueCategory = prvalue(load) -# 1307| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1307| Conversion = [BoolConversion] conversion to bool -# 1307| Type = [BoolType] bool -# 1307| ValueCategory = prvalue -# 1307| getElse().getFullyConverted(): [CStyleCast] (long)... -# 1307| Conversion = [IntegralConversion] integral conversion -# 1307| Type = [LongType] long -# 1307| ValueCategory = prvalue -# 1307| getRValue().getFullyConverted(): [CStyleCast] (int)... -# 1307| Conversion = [IntegralConversion] integral conversion -# 1307| Type = [IntType] int -# 1307| ValueCategory = prvalue -# 1308| getStmt(6): [ExprStmt] ExprStmt -# 1308| getExpr(): [AssignExpr] ... = ... -# 1308| Type = [IntType] int -# 1308| ValueCategory = lvalue -# 1308| getLValue(): [VariableAccess] z -# 1308| Type = [IntType] int -# 1308| ValueCategory = lvalue -# 1308| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1308| Type = [LongType] long -# 1308| ValueCategory = prvalue(load) -# 1308| getCondition(): [VariableAccess] y -# 1308| Type = [LongType] long -# 1308| ValueCategory = prvalue(load) -# 1308| getElse(): [VariableAccess] y -# 1308| Type = [LongType] long -# 1308| ValueCategory = prvalue(load) -# 1308| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1308| Conversion = [BoolConversion] conversion to bool -# 1308| Type = [BoolType] bool -# 1308| ValueCategory = prvalue -# 1308| getRValue().getFullyConverted(): [CStyleCast] (int)... -# 1308| Conversion = [IntegralConversion] integral conversion -# 1308| Type = [IntType] int -# 1308| ValueCategory = prvalue -# 1310| getStmt(7): [ExprStmt] ExprStmt -# 1310| getExpr(): [AssignExpr] ... = ... -# 1310| Type = [IntType] int -# 1310| ValueCategory = lvalue -# 1310| getLValue(): [VariableAccess] z -# 1310| Type = [IntType] int -# 1310| ValueCategory = lvalue -# 1310| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1310| Type = [IntType] int -# 1310| ValueCategory = prvalue(load) -# 1310| getCondition(): [LogicalOrExpr] ... || ... -# 1310| Type = [BoolType] bool -# 1310| ValueCategory = prvalue -# 1310| getLeftOperand(): [LogicalAndExpr] ... && ... -# 1310| Type = [BoolType] bool -# 1310| ValueCategory = prvalue -# 1310| getLeftOperand(): [VariableAccess] x -# 1310| Type = [IntType] int -# 1310| ValueCategory = prvalue(load) -# 1310| getRightOperand(): [VariableAccess] b -# 1310| Type = [BoolType] bool -# 1310| ValueCategory = prvalue(load) -# 1310| getLeftOperand().getFullyConverted(): [CStyleCast] (bool)... -# 1310| Conversion = [BoolConversion] conversion to bool -# 1310| Type = [BoolType] bool -# 1310| ValueCategory = prvalue -# 1310| getRightOperand(): [VariableAccess] y -# 1310| Type = [LongType] long -# 1310| ValueCategory = prvalue(load) -# 1310| getRightOperand().getFullyConverted(): [CStyleCast] (bool)... -# 1310| Conversion = [BoolConversion] conversion to bool -# 1310| Type = [BoolType] bool -# 1310| ValueCategory = prvalue -# 1310| getElse(): [VariableAccess] x -# 1310| Type = [IntType] int -# 1310| ValueCategory = prvalue(load) -# 1310| getCondition().getFullyConverted(): [ParenthesisExpr] (...) -# 1310| Type = [BoolType] bool -# 1310| ValueCategory = prvalue -# 1311| getStmt(8): [ReturnStmt] return ... -# 1313| [TopLevelFunction] bool predicateA() -# 1313| : -# 1314| [TopLevelFunction] bool predicateB() +# 1310| [MemberFunction] void A::static_member(A*, int) +# 1310| : +# 1310| getParameter(0): [Parameter] a +# 1310| Type = [PointerType] A * +# 1310| getParameter(1): [Parameter] x +# 1310| Type = [IntType] int +# 1310| getEntryPoint(): [BlockStmt] { ... } +# 1311| getStmt(0): [ExprStmt] ExprStmt +# 1311| getExpr(): [AssignExpr] ... = ... +# 1311| Type = [IntType] int +# 1311| ValueCategory = lvalue +# 1311| getLValue(): [PointerFieldAccess] member +# 1311| Type = [IntType] int +# 1311| ValueCategory = lvalue +# 1311| getQualifier(): [VariableAccess] a +# 1311| Type = [PointerType] A * +# 1311| ValueCategory = prvalue(load) +# 1311| getRValue(): [VariableAccess] x +# 1311| Type = [IntType] int +# 1311| ValueCategory = prvalue(load) +# 1312| getStmt(1): [ReturnStmt] return ... +# 1314| [MemberFunction] void A::static_member_without_def() # 1314| : -# 1316| [TopLevelFunction] int shortCircuitConditional(int, int) -# 1316| : -# 1316| getParameter(0): [Parameter] x -# 1316| Type = [IntType] int -# 1316| getParameter(1): [Parameter] y -# 1316| Type = [IntType] int -# 1316| getEntryPoint(): [BlockStmt] { ... } -# 1317| getStmt(0): [ReturnStmt] return ... -# 1317| getExpr(): [ConditionalExpr] ... ? ... : ... -# 1317| Type = [IntType] int -# 1317| ValueCategory = prvalue(load) -# 1317| getCondition(): [LogicalAndExpr] ... && ... -# 1317| Type = [BoolType] bool -# 1317| ValueCategory = prvalue -# 1317| getLeftOperand(): [FunctionCall] call to predicateA -# 1317| Type = [BoolType] bool -# 1317| ValueCategory = prvalue -# 1317| getRightOperand(): [FunctionCall] call to predicateB -# 1317| Type = [BoolType] bool -# 1317| ValueCategory = prvalue -# 1317| getThen(): [VariableAccess] x -# 1317| Type = [IntType] int -# 1317| ValueCategory = prvalue(load) -# 1317| getElse(): [VariableAccess] y -# 1317| Type = [IntType] int -# 1317| ValueCategory = prvalue(load) -# 1320| [Operator,TopLevelFunction] void* operator new(size_t, void*) -# 1320| : -# 1320| getParameter(0): [Parameter] (unnamed parameter 0) -# 1320| Type = [CTypedefType,Size_t] size_t -# 1320| getParameter(1): [Parameter] (unnamed parameter 1) -# 1320| Type = [VoidPointerType] void * -# 1322| [TopLevelFunction] void f(int*) -# 1322| : -# 1322| getParameter(0): [Parameter] p -# 1322| Type = [IntPointerType] int * -# 1323| getEntryPoint(): [BlockStmt] { ... } -# 1324| getStmt(0): [ExprStmt] ExprStmt -# 1324| getExpr(): [NewExpr] new -# 1324| Type = [IntPointerType] int * -# 1324| ValueCategory = prvalue -# 1324| getAllocatorCall(): [FunctionCall] call to operator new -# 1324| Type = [VoidPointerType] void * -# 1324| ValueCategory = prvalue -# 1324| getArgument(0): [ErrorExpr] -# 1324| Type = [LongType] unsigned long -# 1324| ValueCategory = prvalue -# 1324| getArgument(1): [VariableAccess] p -# 1324| Type = [IntPointerType] int * -# 1324| ValueCategory = prvalue(load) -# 1324| getArgument(1).getFullyConverted(): [CStyleCast] (void *)... -# 1324| Conversion = [PointerConversion] pointer conversion -# 1324| Type = [VoidPointerType] void * -# 1324| ValueCategory = prvalue -# 1325| getStmt(1): [ReturnStmt] return ... -# 1328| [FunctionTemplateInstantiation,TopLevelFunction] Point defaultConstruct() -# 1328| : -# 1328| getEntryPoint(): [BlockStmt] { ... } -# 1329| getStmt(0): [ReturnStmt] return ... -# 1329| getExpr(): [Literal] 0 -# 1329| Type = [Struct] Point -# 1329| Value = [Literal] 0 -# 1329| ValueCategory = prvalue -# 1328| [FunctionTemplateInstantiation,TopLevelFunction] String defaultConstruct() -# 1328| : -# 1328| getEntryPoint(): [BlockStmt] { ... } -# 1329| getStmt(0): [ReturnStmt] return ... -# 1329| getExpr(): [ConstructorCall] call to String +# 1317| [TopLevelFunction] A* getAnInstanceOfA() +# 1317| : +# 1319| [TopLevelFunction] void test_static_member_functions(int, A*) +# 1319| : +# 1319| getParameter(0): [Parameter] int_arg +# 1319| Type = [IntType] int +# 1319| getParameter(1): [Parameter] a_arg +# 1319| Type = [PointerType] A * +# 1319| getEntryPoint(): [BlockStmt] { ... } +# 1320| getStmt(0): [DeclStmt] declaration +# 1320| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 1320| Type = [Class] C +# 1320| getVariable().getInitializer(): [Initializer] initializer for c +# 1320| getExpr(): [ConstructorCall] call to C +# 1320| Type = [VoidType] void +# 1320| ValueCategory = prvalue +# 1321| getStmt(1): [ExprStmt] ExprStmt +# 1321| getExpr(): [FunctionCall] call to StaticMemberFunction +# 1321| Type = [IntType] int +# 1321| ValueCategory = prvalue +# 1321| getQualifier(): [VariableAccess] c +# 1321| Type = [Class] C +# 1321| ValueCategory = lvalue +# 1321| getArgument(0): [Literal] 10 +# 1321| Type = [IntType] int +# 1321| Value = [Literal] 10 +# 1321| ValueCategory = prvalue +# 1322| getStmt(2): [ExprStmt] ExprStmt +# 1322| getExpr(): [FunctionCall] call to StaticMemberFunction +# 1322| Type = [IntType] int +# 1322| ValueCategory = prvalue +# 1322| getArgument(0): [Literal] 10 +# 1322| Type = [IntType] int +# 1322| Value = [Literal] 10 +# 1322| ValueCategory = prvalue +# 1324| getStmt(3): [DeclStmt] declaration +# 1324| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a +# 1324| Type = [Struct] A +# 1325| getStmt(4): [ExprStmt] ExprStmt +# 1325| getExpr(): [FunctionCall] call to static_member +# 1325| Type = [VoidType] void +# 1325| ValueCategory = prvalue +# 1325| getQualifier(): [VariableAccess] a +# 1325| Type = [Struct] A +# 1325| ValueCategory = lvalue +# 1325| getArgument(0): [AddressOfExpr] & ... +# 1325| Type = [PointerType] A * +# 1325| ValueCategory = prvalue +# 1325| getOperand(): [VariableAccess] a +# 1325| Type = [Struct] A +# 1325| ValueCategory = lvalue +# 1325| getArgument(1): [VariableAccess] int_arg +# 1325| Type = [IntType] int +# 1325| ValueCategory = prvalue(load) +# 1326| getStmt(5): [ExprStmt] ExprStmt +# 1326| getExpr(): [FunctionCall] call to static_member +# 1326| Type = [VoidType] void +# 1326| ValueCategory = prvalue +# 1326| getArgument(0): [AddressOfExpr] & ... +# 1326| Type = [PointerType] A * +# 1326| ValueCategory = prvalue +# 1326| getOperand(): [VariableAccess] a +# 1326| Type = [Struct] A +# 1326| ValueCategory = lvalue +# 1326| getArgument(1): [VariableAccess] int_arg +# 1326| Type = [IntType] int +# 1326| ValueCategory = prvalue(load) +# 1328| getStmt(6): [ExprStmt] ExprStmt +# 1328| getExpr(): [FunctionCall] call to static_member +# 1328| Type = [VoidType] void +# 1328| ValueCategory = prvalue +# 1328| getQualifier(): [AddressOfExpr] & ... +# 1328| Type = [PointerType] A * +# 1328| ValueCategory = prvalue +# 1328| getOperand(): [VariableAccess] a +# 1328| Type = [Struct] A +# 1328| ValueCategory = lvalue +# 1328| getArgument(0): [VariableAccess] a_arg +# 1328| Type = [PointerType] A * +# 1328| ValueCategory = prvalue(load) +# 1328| getArgument(1): [AddExpr] ... + ... +# 1328| Type = [IntType] int +# 1328| ValueCategory = prvalue +# 1328| getLeftOperand(): [VariableAccess] int_arg +# 1328| Type = [IntType] int +# 1328| ValueCategory = prvalue(load) +# 1328| getRightOperand(): [Literal] 2 +# 1328| Type = [IntType] int +# 1328| Value = [Literal] 2 +# 1328| ValueCategory = prvalue +# 1328| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) +# 1328| Type = [PointerType] A * +# 1328| ValueCategory = prvalue +# 1329| getStmt(7): [ExprStmt] ExprStmt +# 1329| getExpr(): [FunctionCall] call to static_member # 1329| Type = [VoidType] void # 1329| ValueCategory = prvalue -# 1328| [TemplateFunction,TopLevelFunction] T defaultConstruct() -# 1328| : -# 1328| getEntryPoint(): [BlockStmt] { ... } -# 1329| getStmt(0): [ReturnStmt] return ... -# 1329| getExpr(): [Literal] 0 -# 1329| Type = [TemplateParameter] T -# 1329| Value = [Literal] 0 -# 1329| ValueCategory = prvalue -# 1329| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1329| Type = [TemplateParameter] T -# 1329| ValueCategory = prvalue(load) -# 1328| [FunctionTemplateInstantiation,TopLevelFunction] copy_constructor defaultConstruct() -# 1328| : -# 1328| getEntryPoint(): [BlockStmt] { ... } -# 1329| getStmt(0): [ReturnStmt] return ... -# 1329| getExpr(): [ConstructorCall] call to copy_constructor -# 1329| Type = [VoidType] void -# 1329| ValueCategory = prvalue -# 1328| [FunctionTemplateInstantiation,TopLevelFunction] destructor_only defaultConstruct() -# 1328| : -# 1328| getEntryPoint(): [BlockStmt] { ... } -# 1329| getStmt(0): [ReturnStmt] return ... -# 1329| getExpr(): [Literal] 0 -# 1329| Type = [Class] destructor_only -# 1329| Value = [Literal] 0 -# 1329| ValueCategory = prvalue -# 1332| [CopyAssignmentOperator] constructor_only& constructor_only::operator=(constructor_only const&) -# 1332| : +# 1329| getQualifier(): [PointerDereferenceExpr] * ... +# 1329| Type = [Struct] A +# 1329| ValueCategory = lvalue +# 1329| getOperand(): [VariableAccess] a_arg +# 1329| Type = [PointerType] A * +# 1329| ValueCategory = prvalue(load) +# 1329| getArgument(0): [AddressOfExpr] & ... +# 1329| Type = [PointerType] A * +# 1329| ValueCategory = prvalue +# 1329| getOperand(): [VariableAccess] a +# 1329| Type = [Struct] A +# 1329| ValueCategory = lvalue +# 1329| getArgument(1): [Literal] 99 +# 1329| Type = [IntType] int +# 1329| Value = [Literal] 99 +# 1329| ValueCategory = prvalue +# 1329| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) +# 1329| Type = [Struct] A +# 1329| ValueCategory = lvalue +# 1330| getStmt(8): [ExprStmt] ExprStmt +# 1330| getExpr(): [FunctionCall] call to static_member +# 1330| Type = [VoidType] void +# 1330| ValueCategory = prvalue +# 1330| getQualifier(): [VariableAccess] a_arg +# 1330| Type = [PointerType] A * +# 1330| ValueCategory = prvalue(load) +# 1330| getArgument(0): [VariableAccess] a_arg +# 1330| Type = [PointerType] A * +# 1330| ValueCategory = prvalue(load) +# 1330| getArgument(1): [UnaryMinusExpr] - ... +# 1330| Type = [IntType] int +# 1330| Value = [UnaryMinusExpr] -1 +# 1330| ValueCategory = prvalue +# 1330| getOperand(): [Literal] 1 +# 1330| Type = [IntType] int +# 1330| Value = [Literal] 1 +# 1330| ValueCategory = prvalue +# 1332| getStmt(9): [ExprStmt] ExprStmt +# 1332| getExpr(): [FunctionCall] call to static_member_without_def +# 1332| Type = [VoidType] void +# 1332| ValueCategory = prvalue +# 1332| getQualifier(): [VariableAccess] a +# 1332| Type = [Struct] A +# 1332| ValueCategory = lvalue +# 1333| getStmt(10): [ExprStmt] ExprStmt +# 1333| getExpr(): [FunctionCall] call to static_member_without_def +# 1333| Type = [VoidType] void +# 1333| ValueCategory = prvalue +# 1335| getStmt(11): [ExprStmt] ExprStmt +# 1335| getExpr(): [FunctionCall] call to static_member_without_def +# 1335| Type = [VoidType] void +# 1335| ValueCategory = prvalue +# 1335| getQualifier(): [FunctionCall] call to getAnInstanceOfA +# 1335| Type = [PointerType] A * +# 1335| ValueCategory = prvalue +# 1336| getStmt(12): [ReturnStmt] return ... +# 1336| getImplicitDestructorCall(0): [DestructorCall] call to ~C +# 1336| Type = [VoidType] void +# 1336| ValueCategory = prvalue +# 1336| getQualifier(): [VariableAccess] c +# 1336| Type = [Class] C +# 1336| ValueCategory = lvalue +# 1338| [TopLevelFunction] int missingReturnValue(bool, int) +# 1338| : +# 1338| getParameter(0): [Parameter] b +# 1338| Type = [BoolType] bool +# 1338| getParameter(1): [Parameter] x +# 1338| Type = [IntType] int +# 1338| getEntryPoint(): [BlockStmt] { ... } +# 1339| getStmt(0): [IfStmt] if (...) ... +# 1339| getCondition(): [VariableAccess] b +# 1339| Type = [BoolType] bool +# 1339| ValueCategory = prvalue(load) +# 1339| getThen(): [BlockStmt] { ... } +# 1340| getStmt(0): [ReturnStmt] return ... +# 1340| getExpr(): [VariableAccess] x +# 1340| Type = [IntType] int +# 1340| ValueCategory = prvalue(load) +# 1342| getStmt(1): [ReturnStmt] return ... +# 1344| [TopLevelFunction] void returnVoid(int, int) +# 1344| : +# 1344| getParameter(0): [Parameter] x +# 1344| Type = [IntType] int +# 1344| getParameter(1): [Parameter] y +# 1344| Type = [IntType] int +# 1344| getEntryPoint(): [BlockStmt] { ... } +# 1345| getStmt(0): [ReturnStmt] return ... +# 1345| getExpr(): [FunctionCall] call to IntegerOps +# 1345| Type = [VoidType] void +# 1345| ValueCategory = prvalue +# 1345| getArgument(0): [VariableAccess] x +# 1345| Type = [IntType] int +# 1345| ValueCategory = prvalue(load) +# 1345| getArgument(1): [VariableAccess] y +# 1345| Type = [IntType] int +# 1345| ValueCategory = prvalue(load) +# 1348| [TopLevelFunction] void gccBinaryConditional(bool, int, long) +# 1348| : +# 1348| getParameter(0): [Parameter] b +# 1348| Type = [BoolType] bool +# 1348| getParameter(1): [Parameter] x +# 1348| Type = [IntType] int +# 1348| getParameter(2): [Parameter] y +# 1348| Type = [LongType] long +# 1348| getEntryPoint(): [BlockStmt] { ... } +# 1349| getStmt(0): [DeclStmt] declaration +# 1349| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1349| Type = [IntType] int +# 1349| getVariable().getInitializer(): [Initializer] initializer for z +# 1349| getExpr(): [VariableAccess] x +# 1349| Type = [IntType] int +# 1349| ValueCategory = prvalue(load) +# 1350| getStmt(1): [ExprStmt] ExprStmt +# 1350| getExpr(): [AssignExpr] ... = ... +# 1350| Type = [IntType] int +# 1350| ValueCategory = lvalue +# 1350| getLValue(): [VariableAccess] z +# 1350| Type = [IntType] int +# 1350| ValueCategory = lvalue +# 1350| getRValue(): [ConditionalExpr] ... ? ... : ... +# 1350| Type = [IntType] int +# 1350| ValueCategory = prvalue(load) +# 1350| getCondition(): [VariableAccess] b +# 1350| Type = [BoolType] bool +# 1350| ValueCategory = prvalue(load) +# 1350| getElse(): [VariableAccess] x +# 1350| Type = [IntType] int +# 1350| ValueCategory = prvalue(load) +# 1351| getStmt(2): [ExprStmt] ExprStmt +# 1351| getExpr(): [AssignExpr] ... = ... +# 1351| Type = [IntType] int +# 1351| ValueCategory = lvalue +# 1351| getLValue(): [VariableAccess] z +# 1351| Type = [IntType] int +# 1351| ValueCategory = lvalue +# 1351| getRValue(): [ConditionalExpr] ... ? ... : ... +# 1351| Type = [LongType] long +# 1351| ValueCategory = prvalue(load) +# 1351| getCondition(): [VariableAccess] b +# 1351| Type = [BoolType] bool +# 1351| ValueCategory = prvalue(load) +# 1351| getElse(): [VariableAccess] y +# 1351| Type = [LongType] long +# 1351| ValueCategory = prvalue(load) +# 1351| getRValue().getFullyConverted(): [CStyleCast] (int)... +# 1351| Conversion = [IntegralConversion] integral conversion +# 1351| Type = [IntType] int +# 1351| ValueCategory = prvalue +# 1352| getStmt(3): [ExprStmt] ExprStmt +# 1352| getExpr(): [AssignExpr] ... = ... +# 1352| Type = [IntType] int +# 1352| ValueCategory = lvalue +# 1352| getLValue(): [VariableAccess] z +# 1352| Type = [IntType] int +# 1352| ValueCategory = lvalue +# 1352| getRValue(): [ConditionalExpr] ... ? ... : ... +# 1352| Type = [IntType] int +# 1352| ValueCategory = prvalue(load) +# 1352| getCondition(): [VariableAccess] x +# 1352| Type = [IntType] int +# 1352| ValueCategory = prvalue(load) +# 1352| getElse(): [VariableAccess] x +# 1352| Type = [IntType] int +# 1352| ValueCategory = prvalue(load) +# 1352| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 1352| Conversion = [BoolConversion] conversion to bool +# 1352| Type = [BoolType] bool +# 1352| ValueCategory = prvalue +# 1353| getStmt(4): [ExprStmt] ExprStmt +# 1353| getExpr(): [AssignExpr] ... = ... +# 1353| Type = [IntType] int +# 1353| ValueCategory = lvalue +# 1353| getLValue(): [VariableAccess] z +# 1353| Type = [IntType] int +# 1353| ValueCategory = lvalue +# 1353| getRValue(): [ConditionalExpr] ... ? ... : ... +# 1353| Type = [LongType] long +# 1353| ValueCategory = prvalue(load) +# 1353| getCondition(): [VariableAccess] x +# 1353| Type = [IntType] int +# 1353| ValueCategory = prvalue(load) +# 1353| getElse(): [VariableAccess] y +# 1353| Type = [LongType] long +# 1353| ValueCategory = prvalue(load) +# 1353| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 1353| Conversion = [BoolConversion] conversion to bool +# 1353| Type = [BoolType] bool +# 1353| ValueCategory = prvalue +# 1353| getRValue().getFullyConverted(): [CStyleCast] (int)... +# 1353| Conversion = [IntegralConversion] integral conversion +# 1353| Type = [IntType] int +# 1353| ValueCategory = prvalue +# 1354| getStmt(5): [ExprStmt] ExprStmt +# 1354| getExpr(): [AssignExpr] ... = ... +# 1354| Type = [IntType] int +# 1354| ValueCategory = lvalue +# 1354| getLValue(): [VariableAccess] z +# 1354| Type = [IntType] int +# 1354| ValueCategory = lvalue +# 1354| getRValue(): [ConditionalExpr] ... ? ... : ... +# 1354| Type = [LongType] long +# 1354| ValueCategory = prvalue(load) +# 1354| getCondition(): [VariableAccess] y +# 1354| Type = [LongType] long +# 1354| ValueCategory = prvalue(load) +# 1354| getElse(): [VariableAccess] x +# 1354| Type = [IntType] int +# 1354| ValueCategory = prvalue(load) +# 1354| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 1354| Conversion = [BoolConversion] conversion to bool +# 1354| Type = [BoolType] bool +# 1354| ValueCategory = prvalue +# 1354| getElse().getFullyConverted(): [CStyleCast] (long)... +# 1354| Conversion = [IntegralConversion] integral conversion +# 1354| Type = [LongType] long +# 1354| ValueCategory = prvalue +# 1354| getRValue().getFullyConverted(): [CStyleCast] (int)... +# 1354| Conversion = [IntegralConversion] integral conversion +# 1354| Type = [IntType] int +# 1354| ValueCategory = prvalue +# 1355| getStmt(6): [ExprStmt] ExprStmt +# 1355| getExpr(): [AssignExpr] ... = ... +# 1355| Type = [IntType] int +# 1355| ValueCategory = lvalue +# 1355| getLValue(): [VariableAccess] z +# 1355| Type = [IntType] int +# 1355| ValueCategory = lvalue +# 1355| getRValue(): [ConditionalExpr] ... ? ... : ... +# 1355| Type = [LongType] long +# 1355| ValueCategory = prvalue(load) +# 1355| getCondition(): [VariableAccess] y +# 1355| Type = [LongType] long +# 1355| ValueCategory = prvalue(load) +# 1355| getElse(): [VariableAccess] y +# 1355| Type = [LongType] long +# 1355| ValueCategory = prvalue(load) +# 1355| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 1355| Conversion = [BoolConversion] conversion to bool +# 1355| Type = [BoolType] bool +# 1355| ValueCategory = prvalue +# 1355| getRValue().getFullyConverted(): [CStyleCast] (int)... +# 1355| Conversion = [IntegralConversion] integral conversion +# 1355| Type = [IntType] int +# 1355| ValueCategory = prvalue +# 1357| getStmt(7): [ExprStmt] ExprStmt +# 1357| getExpr(): [AssignExpr] ... = ... +# 1357| Type = [IntType] int +# 1357| ValueCategory = lvalue +# 1357| getLValue(): [VariableAccess] z +# 1357| Type = [IntType] int +# 1357| ValueCategory = lvalue +# 1357| getRValue(): [ConditionalExpr] ... ? ... : ... +# 1357| Type = [IntType] int +# 1357| ValueCategory = prvalue(load) +# 1357| getCondition(): [LogicalOrExpr] ... || ... +# 1357| Type = [BoolType] bool +# 1357| ValueCategory = prvalue +# 1357| getLeftOperand(): [LogicalAndExpr] ... && ... +# 1357| Type = [BoolType] bool +# 1357| ValueCategory = prvalue +# 1357| getLeftOperand(): [VariableAccess] x +# 1357| Type = [IntType] int +# 1357| ValueCategory = prvalue(load) +# 1357| getRightOperand(): [VariableAccess] b +# 1357| Type = [BoolType] bool +# 1357| ValueCategory = prvalue(load) +# 1357| getLeftOperand().getFullyConverted(): [CStyleCast] (bool)... +# 1357| Conversion = [BoolConversion] conversion to bool +# 1357| Type = [BoolType] bool +# 1357| ValueCategory = prvalue +# 1357| getRightOperand(): [VariableAccess] y +# 1357| Type = [LongType] long +# 1357| ValueCategory = prvalue(load) +# 1357| getRightOperand().getFullyConverted(): [CStyleCast] (bool)... +# 1357| Conversion = [BoolConversion] conversion to bool +# 1357| Type = [BoolType] bool +# 1357| ValueCategory = prvalue +# 1357| getElse(): [VariableAccess] x +# 1357| Type = [IntType] int +# 1357| ValueCategory = prvalue(load) +# 1357| getCondition().getFullyConverted(): [ParenthesisExpr] (...) +# 1357| Type = [BoolType] bool +# 1357| ValueCategory = prvalue +# 1358| getStmt(8): [ReturnStmt] return ... +# 1360| [TopLevelFunction] bool predicateA() +# 1360| : +# 1361| [TopLevelFunction] bool predicateB() +# 1361| : +# 1363| [TopLevelFunction] int shortCircuitConditional(int, int) +# 1363| : +# 1363| getParameter(0): [Parameter] x +# 1363| Type = [IntType] int +# 1363| getParameter(1): [Parameter] y +# 1363| Type = [IntType] int +# 1363| getEntryPoint(): [BlockStmt] { ... } +# 1364| getStmt(0): [ReturnStmt] return ... +# 1364| getExpr(): [ConditionalExpr] ... ? ... : ... +# 1364| Type = [IntType] int +# 1364| ValueCategory = prvalue(load) +# 1364| getCondition(): [LogicalAndExpr] ... && ... +# 1364| Type = [BoolType] bool +# 1364| ValueCategory = prvalue +# 1364| getLeftOperand(): [FunctionCall] call to predicateA +# 1364| Type = [BoolType] bool +# 1364| ValueCategory = prvalue +# 1364| getRightOperand(): [FunctionCall] call to predicateB +# 1364| Type = [BoolType] bool +# 1364| ValueCategory = prvalue +# 1364| getThen(): [VariableAccess] x +# 1364| Type = [IntType] int +# 1364| ValueCategory = prvalue(load) +# 1364| getElse(): [VariableAccess] y +# 1364| Type = [IntType] int +# 1364| ValueCategory = prvalue(load) +# 1367| [Operator,TopLevelFunction] void* operator new(size_t, void*) +# 1367| : +# 1367| getParameter(0): [Parameter] (unnamed parameter 0) +# 1367| Type = [CTypedefType,Size_t] size_t +# 1367| getParameter(1): [Parameter] (unnamed parameter 1) +# 1367| Type = [VoidPointerType] void * +# 1369| [TopLevelFunction] void f(int*) +# 1369| : +# 1369| getParameter(0): [Parameter] p +# 1369| Type = [IntPointerType] int * +# 1370| getEntryPoint(): [BlockStmt] { ... } +# 1371| getStmt(0): [ExprStmt] ExprStmt +# 1371| getExpr(): [NewExpr] new +# 1371| Type = [IntPointerType] int * +# 1371| ValueCategory = prvalue +# 1371| getAllocatorCall(): [FunctionCall] call to operator new +# 1371| Type = [VoidPointerType] void * +# 1371| ValueCategory = prvalue +# 1371| getArgument(0): [ErrorExpr] +# 1371| Type = [LongType] unsigned long +# 1371| ValueCategory = prvalue +# 1371| getArgument(1): [VariableAccess] p +# 1371| Type = [IntPointerType] int * +# 1371| ValueCategory = prvalue(load) +# 1371| getArgument(1).getFullyConverted(): [CStyleCast] (void *)... +# 1371| Conversion = [PointerConversion] pointer conversion +# 1371| Type = [VoidPointerType] void * +# 1371| ValueCategory = prvalue +# 1372| getStmt(1): [ReturnStmt] return ... +# 1375| [FunctionTemplateInstantiation,TopLevelFunction] Point defaultConstruct() +# 1375| : +# 1375| getEntryPoint(): [BlockStmt] { ... } +# 1376| getStmt(0): [ReturnStmt] return ... +# 1376| getExpr(): [Literal] 0 +# 1376| Type = [Struct] Point +# 1376| Value = [Literal] 0 +# 1376| ValueCategory = prvalue +# 1375| [FunctionTemplateInstantiation,TopLevelFunction] String defaultConstruct() +# 1375| : +# 1375| getEntryPoint(): [BlockStmt] { ... } +# 1376| getStmt(0): [ReturnStmt] return ... +# 1376| getExpr(): [ConstructorCall] call to String +# 1376| Type = [VoidType] void +# 1376| ValueCategory = prvalue +# 1375| [TemplateFunction,TopLevelFunction] T defaultConstruct() +# 1375| : +# 1375| getEntryPoint(): [BlockStmt] { ... } +# 1376| getStmt(0): [ReturnStmt] return ... +# 1376| getExpr(): [Literal] 0 +# 1376| Type = [TemplateParameter] T +# 1376| Value = [Literal] 0 +# 1376| ValueCategory = prvalue +# 1376| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1376| Type = [TemplateParameter] T +# 1376| ValueCategory = prvalue(load) +# 1375| [FunctionTemplateInstantiation,TopLevelFunction] copy_constructor defaultConstruct() +# 1375| : +# 1375| getEntryPoint(): [BlockStmt] { ... } +# 1376| getStmt(0): [ReturnStmt] return ... +# 1376| getExpr(): [ConstructorCall] call to copy_constructor +# 1376| Type = [VoidType] void +# 1376| ValueCategory = prvalue +# 1375| [FunctionTemplateInstantiation,TopLevelFunction] destructor_only defaultConstruct() +# 1375| : +# 1375| getEntryPoint(): [BlockStmt] { ... } +# 1376| getStmt(0): [ReturnStmt] return ... +# 1376| getExpr(): [Literal] 0 +# 1376| Type = [Class] destructor_only +# 1376| Value = [Literal] 0 +# 1376| ValueCategory = prvalue +# 1379| [CopyAssignmentOperator] constructor_only& constructor_only::operator=(constructor_only const&) +# 1379| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const constructor_only & -# 1332| [MoveAssignmentOperator] constructor_only& constructor_only::operator=(constructor_only&&) -# 1332| : +# 1379| [MoveAssignmentOperator] constructor_only& constructor_only::operator=(constructor_only&&) +# 1379| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] constructor_only && -# 1332| [CopyConstructor] void constructor_only::constructor_only(constructor_only const&) -# 1332| : +# 1379| [CopyConstructor] void constructor_only::constructor_only(constructor_only const&) +# 1379| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const constructor_only & -# 1332| [MoveConstructor] void constructor_only::constructor_only(constructor_only&&) -# 1332| : +# 1379| [MoveConstructor] void constructor_only::constructor_only(constructor_only&&) +# 1379| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] constructor_only && -# 1337| [Constructor] void constructor_only::constructor_only(int) -# 1337| : -# 1337| getParameter(0): [Parameter] x -# 1337| Type = [IntType] int -# 1340| [CopyAssignmentOperator] copy_constructor& copy_constructor::operator=(copy_constructor const&) -# 1340| : +# 1384| [Constructor] void constructor_only::constructor_only(int) +# 1384| : +# 1384| getParameter(0): [Parameter] x +# 1384| Type = [IntType] int +# 1387| [CopyAssignmentOperator] copy_constructor& copy_constructor::operator=(copy_constructor const&) +# 1387| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const copy_constructor & -# 1345| [Constructor] void copy_constructor::copy_constructor() -# 1345| : -# 1346| [CopyConstructor] void copy_constructor::copy_constructor(copy_constructor const&) -# 1346| : -# 1346| getParameter(0): [Parameter] (unnamed parameter 0) -# 1346| Type = [LValueReferenceType] const copy_constructor & -# 1348| [MemberFunction] void copy_constructor::method() -# 1348| : -# 1351| [CopyAssignmentOperator] destructor_only& destructor_only::operator=(destructor_only const&) -# 1351| : +# 1392| [Constructor] void copy_constructor::copy_constructor() +# 1392| : +# 1393| [CopyConstructor] void copy_constructor::copy_constructor(copy_constructor const&) +# 1393| : +# 1393| getParameter(0): [Parameter] (unnamed parameter 0) +# 1393| Type = [LValueReferenceType] const copy_constructor & +# 1395| [MemberFunction] void copy_constructor::method() +# 1395| : +# 1398| [CopyAssignmentOperator] destructor_only& destructor_only::operator=(destructor_only const&) +# 1398| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const destructor_only & -# 1351| [Constructor] void destructor_only::destructor_only() -# 1351| : -# 1353| [Destructor] void destructor_only::~destructor_only() -# 1353| : -# 1355| [MemberFunction] void destructor_only::method() -# 1355| : -# 1359| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(Point const&) -# 1359| : -# 1359| getParameter(0): [Parameter] v -# 1359| Type = [LValueReferenceType] const Point & -# 1359| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(String const&) -# 1359| : -# 1359| getParameter(0): [Parameter] v -# 1359| Type = [LValueReferenceType] const String & -# 1359| [TemplateFunction,TopLevelFunction] void acceptRef(T const&) -# 1359| : -# 1359| getParameter(0): [Parameter] v -# 1359| Type = [LValueReferenceType] const T & -# 1359| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(copy_constructor const&) -# 1359| : -# 1359| getParameter(0): [Parameter] v -# 1359| Type = [LValueReferenceType] const copy_constructor & -# 1359| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(destructor_only const&) -# 1359| : -# 1359| getParameter(0): [Parameter] v -# 1359| Type = [LValueReferenceType] const destructor_only & -# 1362| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(Point) -# 1362| : -# 1362| getParameter(0): [Parameter] v -# 1362| Type = [Struct] Point -# 1362| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(String) -# 1362| : -# 1362| getParameter(0): [Parameter] v -# 1362| Type = [Struct] String -# 1362| [TemplateFunction,TopLevelFunction] void acceptValue(T) -# 1362| : -# 1362| getParameter(0): [Parameter] v -# 1362| Type = [TemplateParameter] T -# 1362| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(copy_constructor) -# 1362| : -# 1362| getParameter(0): [Parameter] v -# 1362| Type = [Class] copy_constructor -# 1362| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(destructor_only) -# 1362| : -# 1362| getParameter(0): [Parameter] v -# 1362| Type = [Class] destructor_only -# 1365| [FunctionTemplateInstantiation,TopLevelFunction] POD_Derived returnValue() -# 1365| : -# 1365| [FunctionTemplateInstantiation,TopLevelFunction] POD_Middle returnValue() -# 1365| : -# 1365| [FunctionTemplateInstantiation,TopLevelFunction] Point returnValue() -# 1365| : -# 1365| [FunctionTemplateInstantiation,TopLevelFunction] String returnValue() -# 1365| : -# 1365| [TemplateFunction,TopLevelFunction] T returnValue() -# 1365| : -# 1365| [FunctionTemplateInstantiation,TopLevelFunction] UnusualFields returnValue() -# 1365| : -# 1365| [FunctionTemplateInstantiation,TopLevelFunction] copy_constructor returnValue() -# 1365| : -# 1365| [FunctionTemplateInstantiation,TopLevelFunction] destructor_only returnValue() -# 1365| : -# 1367| [TopLevelFunction] void temporary_string() -# 1367| : -# 1367| getEntryPoint(): [BlockStmt] { ... } -# 1368| getStmt(0): [DeclStmt] declaration -# 1368| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 1368| Type = [Struct] String -# 1368| getVariable().getInitializer(): [Initializer] initializer for s -# 1368| getExpr(): [FunctionCall] call to returnValue -# 1368| Type = [Struct] String -# 1368| ValueCategory = prvalue -# 1369| getStmt(1): [DeclStmt] declaration -# 1369| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rs -# 1369| Type = [LValueReferenceType] const String & -# 1369| getVariable().getInitializer(): [Initializer] initializer for rs -# 1369| getExpr(): [FunctionCall] call to returnValue -# 1369| Type = [Struct] String -# 1369| ValueCategory = prvalue -# 1369| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1369| Type = [LValueReferenceType] const String & -# 1369| ValueCategory = prvalue -# 1369| getExpr(): [CStyleCast] (const String)... -# 1369| Conversion = [GlvalueConversion] glvalue conversion -# 1369| Type = [SpecifiedType] const String -# 1369| ValueCategory = lvalue -# 1369| getExpr(): [TemporaryObjectExpr] temporary object -# 1369| Type = [Struct] String -# 1369| ValueCategory = lvalue -# 1371| getStmt(2): [ExprStmt] ExprStmt -# 1371| getExpr(): [FunctionCall] call to acceptRef -# 1371| Type = [VoidType] void -# 1371| ValueCategory = prvalue -# 1371| getArgument(0): [VariableAccess] s -# 1371| Type = [Struct] String -# 1371| ValueCategory = lvalue -# 1371| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1371| Type = [LValueReferenceType] const String & -# 1371| ValueCategory = prvalue -# 1371| getExpr(): [CStyleCast] (const String)... -# 1371| Conversion = [GlvalueConversion] glvalue conversion -# 1371| Type = [SpecifiedType] const String -# 1371| ValueCategory = lvalue -# 1372| getStmt(3): [ExprStmt] ExprStmt -# 1372| getExpr(): [FunctionCall] call to acceptRef -# 1372| Type = [VoidType] void -# 1372| ValueCategory = prvalue -# 1372| getArgument(0): [ConstructorCall] call to String -# 1372| Type = [VoidType] void -# 1372| ValueCategory = prvalue -# 1372| getArgument(0): foo -# 1372| Type = [ArrayType] const char[4] -# 1372| Value = [StringLiteral] "foo" -# 1372| ValueCategory = lvalue -# 1372| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1372| Type = [PointerType] const char * -# 1372| ValueCategory = prvalue -# 1372| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1372| Type = [LValueReferenceType] const String & -# 1372| ValueCategory = prvalue -# 1372| getExpr(): [TemporaryObjectExpr] temporary object -# 1372| Type = [SpecifiedType] const String -# 1372| ValueCategory = lvalue -# 1373| getStmt(4): [ExprStmt] ExprStmt -# 1373| getExpr(): [FunctionCall] call to acceptValue -# 1373| Type = [VoidType] void -# 1373| ValueCategory = prvalue -# 1373| getArgument(0): [ConstructorCall] call to String -# 1373| Type = [VoidType] void -# 1373| ValueCategory = prvalue -# 1373| getArgument(0): [VariableAccess] s -# 1373| Type = [Struct] String -# 1373| ValueCategory = lvalue -# 1373| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1373| Type = [LValueReferenceType] const String & -# 1373| ValueCategory = prvalue -# 1373| getExpr(): [CStyleCast] (const String)... -# 1373| Conversion = [GlvalueConversion] glvalue conversion -# 1373| Type = [SpecifiedType] const String -# 1373| ValueCategory = lvalue -# 1373| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1373| Type = [Struct] String -# 1373| ValueCategory = lvalue -# 1374| getStmt(5): [ExprStmt] ExprStmt -# 1374| getExpr(): [FunctionCall] call to acceptValue -# 1374| Type = [VoidType] void -# 1374| ValueCategory = prvalue -# 1374| getArgument(0): [ConstructorCall] call to String -# 1374| Type = [VoidType] void -# 1374| ValueCategory = prvalue -# 1374| getArgument(0): foo -# 1374| Type = [ArrayType] const char[4] -# 1374| Value = [StringLiteral] "foo" -# 1374| ValueCategory = lvalue -# 1374| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1374| Type = [PointerType] const char * -# 1374| ValueCategory = prvalue -# 1374| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1374| Type = [Struct] String -# 1374| ValueCategory = lvalue -# 1375| getStmt(6): [ExprStmt] ExprStmt -# 1375| getExpr(): [FunctionCall] call to c_str -# 1375| Type = [PointerType] const char * -# 1375| ValueCategory = prvalue -# 1375| getQualifier(): [ConstructorCall] call to String -# 1375| Type = [VoidType] void -# 1375| ValueCategory = prvalue -# 1375| getQualifier().getFullyConverted(): [CStyleCast] (const String)... -# 1375| Conversion = [PrvalueAdjustmentConversion] prvalue adjustment conversion -# 1375| Type = [SpecifiedType] const String -# 1375| ValueCategory = prvalue -# 1375| getExpr(): [TemporaryObjectExpr] temporary object -# 1375| Type = [Struct] String -# 1375| ValueCategory = prvalue(load) -# 1376| getStmt(7): [ExprStmt] ExprStmt -# 1376| getExpr(): [FunctionCall] call to c_str -# 1376| Type = [PointerType] const char * -# 1376| ValueCategory = prvalue -# 1376| getQualifier(): [FunctionCall] call to returnValue -# 1376| Type = [Struct] String -# 1376| ValueCategory = prvalue -# 1376| getQualifier().getFullyConverted(): [CStyleCast] (const String)... -# 1376| Conversion = [PrvalueAdjustmentConversion] prvalue adjustment conversion -# 1376| Type = [SpecifiedType] const String -# 1376| ValueCategory = prvalue -# 1376| getExpr(): [TemporaryObjectExpr] temporary object -# 1376| Type = [Struct] String -# 1376| ValueCategory = prvalue(load) -# 1378| getStmt(8): [ExprStmt] ExprStmt -# 1378| getExpr(): [FunctionCall] call to defaultConstruct -# 1378| Type = [Struct] String -# 1378| ValueCategory = prvalue -# 1378| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1378| Type = [Struct] String -# 1378| ValueCategory = prvalue -# 1379| getStmt(9): [ReturnStmt] return ... -# 1379| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1379| Type = [VoidType] void -# 1379| ValueCategory = prvalue -# 1379| getQualifier(): [VariableAccess] s -# 1379| Type = [Struct] String -# 1379| ValueCategory = lvalue -# 1381| [TopLevelFunction] void temporary_destructor_only() -# 1381| : -# 1381| getEntryPoint(): [BlockStmt] { ... } -# 1382| getStmt(0): [DeclStmt] declaration -# 1382| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 1382| Type = [Class] destructor_only -# 1382| getVariable().getInitializer(): [Initializer] initializer for d -# 1382| getExpr(): [FunctionCall] call to returnValue -# 1382| Type = [Class] destructor_only -# 1382| ValueCategory = prvalue -# 1383| getStmt(1): [DeclStmt] declaration -# 1383| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd -# 1383| Type = [LValueReferenceType] const destructor_only & -# 1383| getVariable().getInitializer(): [Initializer] initializer for rd -# 1383| getExpr(): [FunctionCall] call to returnValue -# 1383| Type = [Class] destructor_only -# 1383| ValueCategory = prvalue -# 1383| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1383| Type = [LValueReferenceType] const destructor_only & -# 1383| ValueCategory = prvalue -# 1383| getExpr(): [CStyleCast] (const destructor_only)... -# 1383| Conversion = [GlvalueConversion] glvalue conversion -# 1383| Type = [SpecifiedType] const destructor_only -# 1383| ValueCategory = lvalue -# 1383| getExpr(): [TemporaryObjectExpr] temporary object -# 1383| Type = [Class] destructor_only -# 1383| ValueCategory = lvalue -# 1384| getStmt(2): [DeclStmt] declaration -# 1384| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d2 -# 1384| Type = [Class] destructor_only -# 1385| getStmt(3): [ExprStmt] ExprStmt -# 1385| getExpr(): [FunctionCall] call to acceptRef -# 1385| Type = [VoidType] void -# 1385| ValueCategory = prvalue -# 1385| getArgument(0): [VariableAccess] d -# 1385| Type = [Class] destructor_only -# 1385| ValueCategory = lvalue -# 1385| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1385| Type = [LValueReferenceType] const destructor_only & -# 1385| ValueCategory = prvalue -# 1385| getExpr(): [CStyleCast] (const destructor_only)... -# 1385| Conversion = [GlvalueConversion] glvalue conversion -# 1385| Type = [SpecifiedType] const destructor_only -# 1385| ValueCategory = lvalue -# 1386| getStmt(4): [ExprStmt] ExprStmt -# 1386| getExpr(): [FunctionCall] call to acceptValue -# 1386| Type = [VoidType] void -# 1386| ValueCategory = prvalue -# 1386| getArgument(0): [VariableAccess] d -# 1386| Type = [Class] destructor_only -# 1386| ValueCategory = prvalue(load) -# 1386| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1386| Type = [Class] destructor_only -# 1386| ValueCategory = lvalue -# 1387| getStmt(5): [ExprStmt] ExprStmt -# 1387| getExpr(): [FunctionCall] call to method -# 1387| Type = [VoidType] void -# 1387| ValueCategory = prvalue -# 1387| getQualifier(): [Literal] 0 -# 1387| Type = [Class] destructor_only -# 1387| Value = [Literal] 0 -# 1387| ValueCategory = prvalue -# 1387| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1387| Type = [Class] destructor_only -# 1387| ValueCategory = prvalue(load) -# 1388| getStmt(6): [ExprStmt] ExprStmt -# 1388| getExpr(): [FunctionCall] call to method -# 1388| Type = [VoidType] void -# 1388| ValueCategory = prvalue -# 1388| getQualifier(): [FunctionCall] call to returnValue -# 1388| Type = [Class] destructor_only -# 1388| ValueCategory = prvalue -# 1388| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1388| Type = [Class] destructor_only -# 1388| ValueCategory = prvalue(load) -# 1390| getStmt(7): [ExprStmt] ExprStmt -# 1390| getExpr(): [FunctionCall] call to defaultConstruct -# 1390| Type = [Class] destructor_only -# 1390| ValueCategory = prvalue -# 1390| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1390| Type = [Class] destructor_only -# 1390| ValueCategory = prvalue -# 1391| getStmt(8): [ReturnStmt] return ... -# 1391| getImplicitDestructorCall(0): [DestructorCall] call to ~destructor_only -# 1391| Type = [VoidType] void -# 1391| ValueCategory = prvalue -# 1391| getQualifier(): [VariableAccess] d2 -# 1391| Type = [Class] destructor_only -# 1391| ValueCategory = lvalue -# 1391| getImplicitDestructorCall(1): [DestructorCall] call to ~destructor_only -# 1391| Type = [VoidType] void -# 1391| ValueCategory = prvalue -# 1391| getQualifier(): [VariableAccess] d -# 1391| Type = [Class] destructor_only -# 1391| ValueCategory = lvalue -# 1393| [TopLevelFunction] void temporary_copy_constructor() -# 1393| : -# 1393| getEntryPoint(): [BlockStmt] { ... } -# 1394| getStmt(0): [DeclStmt] declaration -# 1394| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 1394| Type = [Class] copy_constructor -# 1394| getVariable().getInitializer(): [Initializer] initializer for d -# 1394| getExpr(): [FunctionCall] call to returnValue -# 1394| Type = [Class] copy_constructor -# 1394| ValueCategory = prvalue -# 1395| getStmt(1): [DeclStmt] declaration -# 1395| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd -# 1395| Type = [LValueReferenceType] const copy_constructor & -# 1395| getVariable().getInitializer(): [Initializer] initializer for rd -# 1395| getExpr(): [FunctionCall] call to returnValue -# 1395| Type = [Class] copy_constructor -# 1395| ValueCategory = prvalue -# 1395| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1395| Type = [LValueReferenceType] const copy_constructor & -# 1395| ValueCategory = prvalue -# 1395| getExpr(): [CStyleCast] (const copy_constructor)... -# 1395| Conversion = [GlvalueConversion] glvalue conversion -# 1395| Type = [SpecifiedType] const copy_constructor -# 1395| ValueCategory = lvalue -# 1395| getExpr(): [TemporaryObjectExpr] temporary object -# 1395| Type = [Class] copy_constructor -# 1395| ValueCategory = lvalue -# 1396| getStmt(2): [DeclStmt] declaration -# 1396| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d2 -# 1396| Type = [Class] copy_constructor -# 1396| getVariable().getInitializer(): [Initializer] initializer for d2 -# 1396| getExpr(): [ConstructorCall] call to copy_constructor -# 1396| Type = [VoidType] void -# 1396| ValueCategory = prvalue -# 1397| getStmt(3): [ExprStmt] ExprStmt -# 1397| getExpr(): [FunctionCall] call to acceptRef -# 1397| Type = [VoidType] void -# 1397| ValueCategory = prvalue -# 1397| getArgument(0): [VariableAccess] d -# 1397| Type = [Class] copy_constructor -# 1397| ValueCategory = lvalue -# 1397| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1397| Type = [LValueReferenceType] const copy_constructor & -# 1397| ValueCategory = prvalue -# 1397| getExpr(): [CStyleCast] (const copy_constructor)... -# 1397| Conversion = [GlvalueConversion] glvalue conversion -# 1397| Type = [SpecifiedType] const copy_constructor -# 1397| ValueCategory = lvalue -# 1398| getStmt(4): [ExprStmt] ExprStmt -# 1398| getExpr(): [FunctionCall] call to acceptValue -# 1398| Type = [VoidType] void -# 1398| ValueCategory = prvalue -# 1398| getArgument(0): [ConstructorCall] call to copy_constructor -# 1398| Type = [VoidType] void -# 1398| ValueCategory = prvalue -# 1398| getArgument(0): [VariableAccess] d -# 1398| Type = [Class] copy_constructor -# 1398| ValueCategory = lvalue -# 1398| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1398| Type = [LValueReferenceType] const copy_constructor & -# 1398| ValueCategory = prvalue -# 1398| getExpr(): [CStyleCast] (const copy_constructor)... -# 1398| Conversion = [GlvalueConversion] glvalue conversion -# 1398| Type = [SpecifiedType] const copy_constructor -# 1398| ValueCategory = lvalue -# 1398| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1398| Type = [Class] copy_constructor -# 1398| ValueCategory = lvalue -# 1399| getStmt(5): [ExprStmt] ExprStmt -# 1399| getExpr(): [FunctionCall] call to method -# 1399| Type = [VoidType] void -# 1399| ValueCategory = prvalue -# 1399| getQualifier(): [ConstructorCall] call to copy_constructor -# 1399| Type = [VoidType] void -# 1399| ValueCategory = prvalue -# 1399| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1399| Type = [Class] copy_constructor -# 1399| ValueCategory = prvalue(load) -# 1400| getStmt(6): [ExprStmt] ExprStmt -# 1400| getExpr(): [FunctionCall] call to method -# 1400| Type = [VoidType] void -# 1400| ValueCategory = prvalue -# 1400| getQualifier(): [FunctionCall] call to returnValue -# 1400| Type = [Class] copy_constructor -# 1400| ValueCategory = prvalue -# 1400| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1400| Type = [Class] copy_constructor -# 1400| ValueCategory = prvalue(load) -# 1401| getStmt(7): [ExprStmt] ExprStmt -# 1401| getExpr(): [FunctionCall] call to defaultConstruct -# 1401| Type = [Class] copy_constructor -# 1401| ValueCategory = prvalue -# 1401| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1401| Type = [Class] copy_constructor -# 1401| ValueCategory = prvalue -# 1403| getStmt(8): [DeclStmt] declaration -# 1403| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1403| Type = [IntType] int -# 1403| getVariable().getInitializer(): [Initializer] initializer for y -# 1403| getExpr(): [ValueFieldAccess] y -# 1403| Type = [IntType] int -# 1403| ValueCategory = prvalue -# 1403| getQualifier(): [FunctionCall] call to returnValue -# 1403| Type = [Class] copy_constructor -# 1403| ValueCategory = prvalue -# 1403| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1403| Type = [Class] copy_constructor -# 1403| ValueCategory = prvalue(load) -# 1404| getStmt(9): [ReturnStmt] return ... -# 1406| [TopLevelFunction] void temporary_point() +# 1398| [Constructor] void destructor_only::destructor_only() +# 1398| : +# 1400| [Destructor] void destructor_only::~destructor_only() +# 1400| : +# 1402| [MemberFunction] void destructor_only::method() +# 1402| : +# 1406| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(Point const&) # 1406| : -# 1406| getEntryPoint(): [BlockStmt] { ... } -# 1407| getStmt(0): [DeclStmt] declaration -# 1407| getDeclarationEntry(0): [VariableDeclarationEntry] definition of p -# 1407| Type = [Struct] Point -# 1407| getVariable().getInitializer(): [Initializer] initializer for p -# 1407| getExpr(): [FunctionCall] call to returnValue -# 1407| Type = [Struct] Point -# 1407| ValueCategory = prvalue -# 1408| getStmt(1): [DeclStmt] declaration -# 1408| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rp -# 1408| Type = [LValueReferenceType] const Point & -# 1408| getVariable().getInitializer(): [Initializer] initializer for rp -# 1408| getExpr(): [FunctionCall] call to returnValue -# 1408| Type = [Struct] Point -# 1408| ValueCategory = prvalue -# 1408| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1408| Type = [LValueReferenceType] const Point & -# 1408| ValueCategory = prvalue -# 1408| getExpr(): [CStyleCast] (const Point)... -# 1408| Conversion = [GlvalueConversion] glvalue conversion -# 1408| Type = [SpecifiedType] const Point -# 1408| ValueCategory = lvalue -# 1408| getExpr(): [TemporaryObjectExpr] temporary object -# 1408| Type = [Struct] Point -# 1408| ValueCategory = lvalue -# 1410| getStmt(2): [ExprStmt] ExprStmt -# 1410| getExpr(): [FunctionCall] call to acceptRef -# 1410| Type = [VoidType] void -# 1410| ValueCategory = prvalue -# 1410| getArgument(0): [VariableAccess] p -# 1410| Type = [Struct] Point -# 1410| ValueCategory = lvalue -# 1410| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1410| Type = [LValueReferenceType] const Point & -# 1410| ValueCategory = prvalue -# 1410| getExpr(): [CStyleCast] (const Point)... -# 1410| Conversion = [GlvalueConversion] glvalue conversion -# 1410| Type = [SpecifiedType] const Point -# 1410| ValueCategory = lvalue -# 1411| getStmt(3): [ExprStmt] ExprStmt -# 1411| getExpr(): [FunctionCall] call to acceptValue -# 1411| Type = [VoidType] void -# 1411| ValueCategory = prvalue -# 1411| getArgument(0): [VariableAccess] p -# 1411| Type = [Struct] Point -# 1411| ValueCategory = prvalue(load) -# 1412| getStmt(4): [ExprStmt] ExprStmt -# 1412| getExpr(): [ValueFieldAccess] x -# 1412| Type = [IntType] int -# 1412| Value = [ValueFieldAccess] 0 -# 1412| ValueCategory = prvalue -# 1412| getQualifier(): [Literal] 0 -# 1412| Type = [Struct] Point -# 1412| Value = [Literal] 0 -# 1412| ValueCategory = prvalue -# 1412| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1412| Type = [Struct] Point -# 1412| ValueCategory = prvalue(load) -# 1413| getStmt(5): [DeclStmt] declaration -# 1413| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1413| Type = [IntType] int -# 1413| getVariable().getInitializer(): [Initializer] initializer for y -# 1413| getExpr(): [ValueFieldAccess] y -# 1413| Type = [IntType] int -# 1413| ValueCategory = prvalue -# 1413| getQualifier(): [FunctionCall] call to returnValue -# 1413| Type = [Struct] Point -# 1413| ValueCategory = prvalue -# 1415| getStmt(6): [ExprStmt] ExprStmt -# 1415| getExpr(): [FunctionCall] call to defaultConstruct -# 1415| Type = [Struct] Point -# 1415| ValueCategory = prvalue -# 1416| getStmt(7): [ReturnStmt] return ... -# 1418| [CopyAssignmentOperator] UnusualFields& UnusualFields::operator=(UnusualFields const&) -# 1418| : +# 1406| getParameter(0): [Parameter] v +# 1406| Type = [LValueReferenceType] const Point & +# 1406| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(String const&) +# 1406| : +# 1406| getParameter(0): [Parameter] v +# 1406| Type = [LValueReferenceType] const String & +# 1406| [TemplateFunction,TopLevelFunction] void acceptRef(T const&) +# 1406| : +# 1406| getParameter(0): [Parameter] v +# 1406| Type = [LValueReferenceType] const T & +# 1406| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(copy_constructor const&) +# 1406| : +# 1406| getParameter(0): [Parameter] v +# 1406| Type = [LValueReferenceType] const copy_constructor & +# 1406| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(destructor_only const&) +# 1406| : +# 1406| getParameter(0): [Parameter] v +# 1406| Type = [LValueReferenceType] const destructor_only & +# 1409| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(Point) +# 1409| : +# 1409| getParameter(0): [Parameter] v +# 1409| Type = [Struct] Point +# 1409| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(String) +# 1409| : +# 1409| getParameter(0): [Parameter] v +# 1409| Type = [Struct] String +# 1409| [TemplateFunction,TopLevelFunction] void acceptValue(T) +# 1409| : +# 1409| getParameter(0): [Parameter] v +# 1409| Type = [TemplateParameter] T +# 1409| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(copy_constructor) +# 1409| : +# 1409| getParameter(0): [Parameter] v +# 1409| Type = [Class] copy_constructor +# 1409| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(destructor_only) +# 1409| : +# 1409| getParameter(0): [Parameter] v +# 1409| Type = [Class] destructor_only +# 1412| [FunctionTemplateInstantiation,TopLevelFunction] POD_Derived returnValue() +# 1412| : +# 1412| [FunctionTemplateInstantiation,TopLevelFunction] POD_Middle returnValue() +# 1412| : +# 1412| [FunctionTemplateInstantiation,TopLevelFunction] Point returnValue() +# 1412| : +# 1412| [FunctionTemplateInstantiation,TopLevelFunction] String returnValue() +# 1412| : +# 1412| [TemplateFunction,TopLevelFunction] T returnValue() +# 1412| : +# 1412| [FunctionTemplateInstantiation,TopLevelFunction] UnusualFields returnValue() +# 1412| : +# 1412| [FunctionTemplateInstantiation,TopLevelFunction] copy_constructor returnValue() +# 1412| : +# 1412| [FunctionTemplateInstantiation,TopLevelFunction] destructor_only returnValue() +# 1412| : +# 1414| [TopLevelFunction] void temporary_string() +# 1414| : +# 1414| getEntryPoint(): [BlockStmt] { ... } +# 1415| getStmt(0): [DeclStmt] declaration +# 1415| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 1415| Type = [Struct] String +# 1415| getVariable().getInitializer(): [Initializer] initializer for s +# 1415| getExpr(): [FunctionCall] call to returnValue +# 1415| Type = [Struct] String +# 1415| ValueCategory = prvalue +# 1416| getStmt(1): [DeclStmt] declaration +# 1416| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rs +# 1416| Type = [LValueReferenceType] const String & +# 1416| getVariable().getInitializer(): [Initializer] initializer for rs +# 1416| getExpr(): [FunctionCall] call to returnValue +# 1416| Type = [Struct] String +# 1416| ValueCategory = prvalue +# 1416| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1416| Type = [LValueReferenceType] const String & +# 1416| ValueCategory = prvalue +# 1416| getExpr(): [CStyleCast] (const String)... +# 1416| Conversion = [GlvalueConversion] glvalue conversion +# 1416| Type = [SpecifiedType] const String +# 1416| ValueCategory = lvalue +# 1416| getExpr(): [TemporaryObjectExpr] temporary object +# 1416| Type = [Struct] String +# 1416| ValueCategory = lvalue +# 1418| getStmt(2): [ExprStmt] ExprStmt +# 1418| getExpr(): [FunctionCall] call to acceptRef +# 1418| Type = [VoidType] void +# 1418| ValueCategory = prvalue +# 1418| getArgument(0): [VariableAccess] s +# 1418| Type = [Struct] String +# 1418| ValueCategory = lvalue +# 1418| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1418| Type = [LValueReferenceType] const String & +# 1418| ValueCategory = prvalue +# 1418| getExpr(): [CStyleCast] (const String)... +# 1418| Conversion = [GlvalueConversion] glvalue conversion +# 1418| Type = [SpecifiedType] const String +# 1418| ValueCategory = lvalue +# 1419| getStmt(3): [ExprStmt] ExprStmt +# 1419| getExpr(): [FunctionCall] call to acceptRef +# 1419| Type = [VoidType] void +# 1419| ValueCategory = prvalue +# 1419| getArgument(0): [ConstructorCall] call to String +# 1419| Type = [VoidType] void +# 1419| ValueCategory = prvalue +# 1419| getArgument(0): foo +# 1419| Type = [ArrayType] const char[4] +# 1419| Value = [StringLiteral] "foo" +# 1419| ValueCategory = lvalue +# 1419| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1419| Type = [PointerType] const char * +# 1419| ValueCategory = prvalue +# 1419| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1419| Type = [LValueReferenceType] const String & +# 1419| ValueCategory = prvalue +# 1419| getExpr(): [TemporaryObjectExpr] temporary object +# 1419| Type = [SpecifiedType] const String +# 1419| ValueCategory = lvalue +# 1420| getStmt(4): [ExprStmt] ExprStmt +# 1420| getExpr(): [FunctionCall] call to acceptValue +# 1420| Type = [VoidType] void +# 1420| ValueCategory = prvalue +# 1420| getArgument(0): [ConstructorCall] call to String +# 1420| Type = [VoidType] void +# 1420| ValueCategory = prvalue +# 1420| getArgument(0): [VariableAccess] s +# 1420| Type = [Struct] String +# 1420| ValueCategory = lvalue +# 1420| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1420| Type = [LValueReferenceType] const String & +# 1420| ValueCategory = prvalue +# 1420| getExpr(): [CStyleCast] (const String)... +# 1420| Conversion = [GlvalueConversion] glvalue conversion +# 1420| Type = [SpecifiedType] const String +# 1420| ValueCategory = lvalue +# 1420| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1420| Type = [Struct] String +# 1420| ValueCategory = lvalue +# 1421| getStmt(5): [ExprStmt] ExprStmt +# 1421| getExpr(): [FunctionCall] call to acceptValue +# 1421| Type = [VoidType] void +# 1421| ValueCategory = prvalue +# 1421| getArgument(0): [ConstructorCall] call to String +# 1421| Type = [VoidType] void +# 1421| ValueCategory = prvalue +# 1421| getArgument(0): foo +# 1421| Type = [ArrayType] const char[4] +# 1421| Value = [StringLiteral] "foo" +# 1421| ValueCategory = lvalue +# 1421| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1421| Type = [PointerType] const char * +# 1421| ValueCategory = prvalue +# 1421| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1421| Type = [Struct] String +# 1421| ValueCategory = lvalue +# 1422| getStmt(6): [ExprStmt] ExprStmt +# 1422| getExpr(): [FunctionCall] call to c_str +# 1422| Type = [PointerType] const char * +# 1422| ValueCategory = prvalue +# 1422| getQualifier(): [ConstructorCall] call to String +# 1422| Type = [VoidType] void +# 1422| ValueCategory = prvalue +# 1422| getQualifier().getFullyConverted(): [CStyleCast] (const String)... +# 1422| Conversion = [PrvalueAdjustmentConversion] prvalue adjustment conversion +# 1422| Type = [SpecifiedType] const String +# 1422| ValueCategory = prvalue +# 1422| getExpr(): [TemporaryObjectExpr] temporary object +# 1422| Type = [Struct] String +# 1422| ValueCategory = prvalue(load) +# 1423| getStmt(7): [ExprStmt] ExprStmt +# 1423| getExpr(): [FunctionCall] call to c_str +# 1423| Type = [PointerType] const char * +# 1423| ValueCategory = prvalue +# 1423| getQualifier(): [FunctionCall] call to returnValue +# 1423| Type = [Struct] String +# 1423| ValueCategory = prvalue +# 1423| getQualifier().getFullyConverted(): [CStyleCast] (const String)... +# 1423| Conversion = [PrvalueAdjustmentConversion] prvalue adjustment conversion +# 1423| Type = [SpecifiedType] const String +# 1423| ValueCategory = prvalue +# 1423| getExpr(): [TemporaryObjectExpr] temporary object +# 1423| Type = [Struct] String +# 1423| ValueCategory = prvalue(load) +# 1425| getStmt(8): [ExprStmt] ExprStmt +# 1425| getExpr(): [FunctionCall] call to defaultConstruct +# 1425| Type = [Struct] String +# 1425| ValueCategory = prvalue +# 1425| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1425| Type = [Struct] String +# 1425| ValueCategory = prvalue +# 1426| getStmt(9): [ReturnStmt] return ... +# 1426| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1426| Type = [VoidType] void +# 1426| ValueCategory = prvalue +# 1426| getQualifier(): [ReuseExpr] reuse of temporary object +# 1426| Type = [Struct] String +# 1426| ValueCategory = xvalue +# 1426| getImplicitDestructorCall(1): [DestructorCall] call to ~String +# 1426| Type = [VoidType] void +# 1426| ValueCategory = prvalue +# 1426| getQualifier(): [VariableAccess] s +# 1426| Type = [Struct] String +# 1426| ValueCategory = lvalue +# 1428| [TopLevelFunction] void temporary_destructor_only() +# 1428| : +# 1428| getEntryPoint(): [BlockStmt] { ... } +# 1429| getStmt(0): [DeclStmt] declaration +# 1429| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d +# 1429| Type = [Class] destructor_only +# 1429| getVariable().getInitializer(): [Initializer] initializer for d +# 1429| getExpr(): [FunctionCall] call to returnValue +# 1429| Type = [Class] destructor_only +# 1429| ValueCategory = prvalue +# 1430| getStmt(1): [DeclStmt] declaration +# 1430| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd +# 1430| Type = [LValueReferenceType] const destructor_only & +# 1430| getVariable().getInitializer(): [Initializer] initializer for rd +# 1430| getExpr(): [FunctionCall] call to returnValue +# 1430| Type = [Class] destructor_only +# 1430| ValueCategory = prvalue +# 1430| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1430| Type = [LValueReferenceType] const destructor_only & +# 1430| ValueCategory = prvalue +# 1430| getExpr(): [CStyleCast] (const destructor_only)... +# 1430| Conversion = [GlvalueConversion] glvalue conversion +# 1430| Type = [SpecifiedType] const destructor_only +# 1430| ValueCategory = lvalue +# 1430| getExpr(): [TemporaryObjectExpr] temporary object +# 1430| Type = [Class] destructor_only +# 1430| ValueCategory = lvalue +# 1431| getStmt(2): [DeclStmt] declaration +# 1431| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d2 +# 1431| Type = [Class] destructor_only +# 1432| getStmt(3): [ExprStmt] ExprStmt +# 1432| getExpr(): [FunctionCall] call to acceptRef +# 1432| Type = [VoidType] void +# 1432| ValueCategory = prvalue +# 1432| getArgument(0): [VariableAccess] d +# 1432| Type = [Class] destructor_only +# 1432| ValueCategory = lvalue +# 1432| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1432| Type = [LValueReferenceType] const destructor_only & +# 1432| ValueCategory = prvalue +# 1432| getExpr(): [CStyleCast] (const destructor_only)... +# 1432| Conversion = [GlvalueConversion] glvalue conversion +# 1432| Type = [SpecifiedType] const destructor_only +# 1432| ValueCategory = lvalue +# 1433| getStmt(4): [ExprStmt] ExprStmt +# 1433| getExpr(): [FunctionCall] call to acceptValue +# 1433| Type = [VoidType] void +# 1433| ValueCategory = prvalue +# 1433| getArgument(0): [VariableAccess] d +# 1433| Type = [Class] destructor_only +# 1433| ValueCategory = prvalue(load) +# 1433| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1433| Type = [Class] destructor_only +# 1433| ValueCategory = lvalue +# 1434| getStmt(5): [ExprStmt] ExprStmt +# 1434| getExpr(): [FunctionCall] call to method +# 1434| Type = [VoidType] void +# 1434| ValueCategory = prvalue +# 1434| getQualifier(): [Literal] 0 +# 1434| Type = [Class] destructor_only +# 1434| Value = [Literal] 0 +# 1434| ValueCategory = prvalue +# 1434| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1434| Type = [Class] destructor_only +# 1434| ValueCategory = prvalue(load) +# 1435| getStmt(6): [ExprStmt] ExprStmt +# 1435| getExpr(): [FunctionCall] call to method +# 1435| Type = [VoidType] void +# 1435| ValueCategory = prvalue +# 1435| getQualifier(): [FunctionCall] call to returnValue +# 1435| Type = [Class] destructor_only +# 1435| ValueCategory = prvalue +# 1435| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1435| Type = [Class] destructor_only +# 1435| ValueCategory = prvalue(load) +# 1437| getStmt(7): [ExprStmt] ExprStmt +# 1437| getExpr(): [FunctionCall] call to defaultConstruct +# 1437| Type = [Class] destructor_only +# 1437| ValueCategory = prvalue +# 1437| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1437| Type = [Class] destructor_only +# 1437| ValueCategory = prvalue +# 1438| getStmt(8): [ReturnStmt] return ... +# 1438| getImplicitDestructorCall(0): [DestructorCall] call to ~destructor_only +# 1438| Type = [VoidType] void +# 1438| ValueCategory = prvalue +# 1438| getQualifier(): [VariableAccess] d2 +# 1438| Type = [Class] destructor_only +# 1438| ValueCategory = lvalue +# 1438| getImplicitDestructorCall(1): [DestructorCall] call to ~destructor_only +# 1438| Type = [VoidType] void +# 1438| ValueCategory = prvalue +# 1438| getQualifier(): [ReuseExpr] reuse of temporary object +# 1438| Type = [Class] destructor_only +# 1438| ValueCategory = xvalue +# 1438| getImplicitDestructorCall(2): [DestructorCall] call to ~destructor_only +# 1438| Type = [VoidType] void +# 1438| ValueCategory = prvalue +# 1438| getQualifier(): [VariableAccess] d +# 1438| Type = [Class] destructor_only +# 1438| ValueCategory = lvalue +# 1440| [TopLevelFunction] void temporary_copy_constructor() +# 1440| : +# 1440| getEntryPoint(): [BlockStmt] { ... } +# 1441| getStmt(0): [DeclStmt] declaration +# 1441| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d +# 1441| Type = [Class] copy_constructor +# 1441| getVariable().getInitializer(): [Initializer] initializer for d +# 1441| getExpr(): [FunctionCall] call to returnValue +# 1441| Type = [Class] copy_constructor +# 1441| ValueCategory = prvalue +# 1442| getStmt(1): [DeclStmt] declaration +# 1442| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd +# 1442| Type = [LValueReferenceType] const copy_constructor & +# 1442| getVariable().getInitializer(): [Initializer] initializer for rd +# 1442| getExpr(): [FunctionCall] call to returnValue +# 1442| Type = [Class] copy_constructor +# 1442| ValueCategory = prvalue +# 1442| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1442| Type = [LValueReferenceType] const copy_constructor & +# 1442| ValueCategory = prvalue +# 1442| getExpr(): [CStyleCast] (const copy_constructor)... +# 1442| Conversion = [GlvalueConversion] glvalue conversion +# 1442| Type = [SpecifiedType] const copy_constructor +# 1442| ValueCategory = lvalue +# 1442| getExpr(): [TemporaryObjectExpr] temporary object +# 1442| Type = [Class] copy_constructor +# 1442| ValueCategory = lvalue +# 1443| getStmt(2): [DeclStmt] declaration +# 1443| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d2 +# 1443| Type = [Class] copy_constructor +# 1443| getVariable().getInitializer(): [Initializer] initializer for d2 +# 1443| getExpr(): [ConstructorCall] call to copy_constructor +# 1443| Type = [VoidType] void +# 1443| ValueCategory = prvalue +# 1444| getStmt(3): [ExprStmt] ExprStmt +# 1444| getExpr(): [FunctionCall] call to acceptRef +# 1444| Type = [VoidType] void +# 1444| ValueCategory = prvalue +# 1444| getArgument(0): [VariableAccess] d +# 1444| Type = [Class] copy_constructor +# 1444| ValueCategory = lvalue +# 1444| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1444| Type = [LValueReferenceType] const copy_constructor & +# 1444| ValueCategory = prvalue +# 1444| getExpr(): [CStyleCast] (const copy_constructor)... +# 1444| Conversion = [GlvalueConversion] glvalue conversion +# 1444| Type = [SpecifiedType] const copy_constructor +# 1444| ValueCategory = lvalue +# 1445| getStmt(4): [ExprStmt] ExprStmt +# 1445| getExpr(): [FunctionCall] call to acceptValue +# 1445| Type = [VoidType] void +# 1445| ValueCategory = prvalue +# 1445| getArgument(0): [ConstructorCall] call to copy_constructor +# 1445| Type = [VoidType] void +# 1445| ValueCategory = prvalue +# 1445| getArgument(0): [VariableAccess] d +# 1445| Type = [Class] copy_constructor +# 1445| ValueCategory = lvalue +# 1445| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1445| Type = [LValueReferenceType] const copy_constructor & +# 1445| ValueCategory = prvalue +# 1445| getExpr(): [CStyleCast] (const copy_constructor)... +# 1445| Conversion = [GlvalueConversion] glvalue conversion +# 1445| Type = [SpecifiedType] const copy_constructor +# 1445| ValueCategory = lvalue +# 1445| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1445| Type = [Class] copy_constructor +# 1445| ValueCategory = lvalue +# 1446| getStmt(5): [ExprStmt] ExprStmt +# 1446| getExpr(): [FunctionCall] call to method +# 1446| Type = [VoidType] void +# 1446| ValueCategory = prvalue +# 1446| getQualifier(): [ConstructorCall] call to copy_constructor +# 1446| Type = [VoidType] void +# 1446| ValueCategory = prvalue +# 1446| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1446| Type = [Class] copy_constructor +# 1446| ValueCategory = prvalue(load) +# 1447| getStmt(6): [ExprStmt] ExprStmt +# 1447| getExpr(): [FunctionCall] call to method +# 1447| Type = [VoidType] void +# 1447| ValueCategory = prvalue +# 1447| getQualifier(): [FunctionCall] call to returnValue +# 1447| Type = [Class] copy_constructor +# 1447| ValueCategory = prvalue +# 1447| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1447| Type = [Class] copy_constructor +# 1447| ValueCategory = prvalue(load) +# 1448| getStmt(7): [ExprStmt] ExprStmt +# 1448| getExpr(): [FunctionCall] call to defaultConstruct +# 1448| Type = [Class] copy_constructor +# 1448| ValueCategory = prvalue +# 1448| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1448| Type = [Class] copy_constructor +# 1448| ValueCategory = prvalue +# 1450| getStmt(8): [DeclStmt] declaration +# 1450| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1450| Type = [IntType] int +# 1450| getVariable().getInitializer(): [Initializer] initializer for y +# 1450| getExpr(): [ValueFieldAccess] y +# 1450| Type = [IntType] int +# 1450| ValueCategory = prvalue +# 1450| getQualifier(): [FunctionCall] call to returnValue +# 1450| Type = [Class] copy_constructor +# 1450| ValueCategory = prvalue +# 1450| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1450| Type = [Class] copy_constructor +# 1450| ValueCategory = prvalue(load) +# 1451| getStmt(9): [ReturnStmt] return ... +# 1453| [TopLevelFunction] void temporary_point() +# 1453| : +# 1453| getEntryPoint(): [BlockStmt] { ... } +# 1454| getStmt(0): [DeclStmt] declaration +# 1454| getDeclarationEntry(0): [VariableDeclarationEntry] definition of p +# 1454| Type = [Struct] Point +# 1454| getVariable().getInitializer(): [Initializer] initializer for p +# 1454| getExpr(): [FunctionCall] call to returnValue +# 1454| Type = [Struct] Point +# 1454| ValueCategory = prvalue +# 1455| getStmt(1): [DeclStmt] declaration +# 1455| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rp +# 1455| Type = [LValueReferenceType] const Point & +# 1455| getVariable().getInitializer(): [Initializer] initializer for rp +# 1455| getExpr(): [FunctionCall] call to returnValue +# 1455| Type = [Struct] Point +# 1455| ValueCategory = prvalue +# 1455| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1455| Type = [LValueReferenceType] const Point & +# 1455| ValueCategory = prvalue +# 1455| getExpr(): [CStyleCast] (const Point)... +# 1455| Conversion = [GlvalueConversion] glvalue conversion +# 1455| Type = [SpecifiedType] const Point +# 1455| ValueCategory = lvalue +# 1455| getExpr(): [TemporaryObjectExpr] temporary object +# 1455| Type = [Struct] Point +# 1455| ValueCategory = lvalue +# 1457| getStmt(2): [ExprStmt] ExprStmt +# 1457| getExpr(): [FunctionCall] call to acceptRef +# 1457| Type = [VoidType] void +# 1457| ValueCategory = prvalue +# 1457| getArgument(0): [VariableAccess] p +# 1457| Type = [Struct] Point +# 1457| ValueCategory = lvalue +# 1457| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1457| Type = [LValueReferenceType] const Point & +# 1457| ValueCategory = prvalue +# 1457| getExpr(): [CStyleCast] (const Point)... +# 1457| Conversion = [GlvalueConversion] glvalue conversion +# 1457| Type = [SpecifiedType] const Point +# 1457| ValueCategory = lvalue +# 1458| getStmt(3): [ExprStmt] ExprStmt +# 1458| getExpr(): [FunctionCall] call to acceptValue +# 1458| Type = [VoidType] void +# 1458| ValueCategory = prvalue +# 1458| getArgument(0): [VariableAccess] p +# 1458| Type = [Struct] Point +# 1458| ValueCategory = prvalue(load) +# 1459| getStmt(4): [ExprStmt] ExprStmt +# 1459| getExpr(): [ValueFieldAccess] x +# 1459| Type = [IntType] int +# 1459| Value = [ValueFieldAccess] 0 +# 1459| ValueCategory = prvalue +# 1459| getQualifier(): [Literal] 0 +# 1459| Type = [Struct] Point +# 1459| Value = [Literal] 0 +# 1459| ValueCategory = prvalue +# 1459| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1459| Type = [Struct] Point +# 1459| ValueCategory = prvalue(load) +# 1460| getStmt(5): [DeclStmt] declaration +# 1460| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1460| Type = [IntType] int +# 1460| getVariable().getInitializer(): [Initializer] initializer for y +# 1460| getExpr(): [ValueFieldAccess] y +# 1460| Type = [IntType] int +# 1460| ValueCategory = prvalue +# 1460| getQualifier(): [FunctionCall] call to returnValue +# 1460| Type = [Struct] Point +# 1460| ValueCategory = prvalue +# 1462| getStmt(6): [ExprStmt] ExprStmt +# 1462| getExpr(): [FunctionCall] call to defaultConstruct +# 1462| Type = [Struct] Point +# 1462| ValueCategory = prvalue +# 1463| getStmt(7): [ReturnStmt] return ... +# 1465| [CopyAssignmentOperator] UnusualFields& UnusualFields::operator=(UnusualFields const&) +# 1465| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const UnusualFields & -# 1418| [Constructor] void UnusualFields::UnusualFields() -# 1418| : -# 1418| [CopyConstructor] void UnusualFields::UnusualFields(UnusualFields const&) -# 1418| : +# 1465| [Constructor] void UnusualFields::UnusualFields() +# 1465| : +# 1465| [CopyConstructor] void UnusualFields::UnusualFields(UnusualFields const&) +# 1465| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const UnusualFields & -# 1418| [MoveConstructor] void UnusualFields::UnusualFields(UnusualFields&&) -# 1418| : +# 1465| [MoveConstructor] void UnusualFields::UnusualFields(UnusualFields&&) +# 1465| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] UnusualFields && -# 1423| [TopLevelFunction] void temporary_unusual_fields() -# 1423| : -# 1423| getEntryPoint(): [BlockStmt] { ... } -# 1424| getStmt(0): [DeclStmt] declaration -# 1424| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rx -# 1424| Type = [LValueReferenceType] const int & -# 1424| getVariable().getInitializer(): [Initializer] initializer for rx -# 1424| getExpr(): [ValueFieldAccess] r -# 1424| Type = [LValueReferenceType] int & -# 1424| ValueCategory = prvalue -# 1424| getQualifier(): [FunctionCall] call to returnValue -# 1424| Type = [Struct] UnusualFields -# 1424| ValueCategory = prvalue -# 1424| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1424| Type = [LValueReferenceType] const int & -# 1424| ValueCategory = prvalue -# 1424| getExpr(): [CStyleCast] (const int)... -# 1424| Conversion = [GlvalueConversion] glvalue conversion -# 1424| Type = [SpecifiedType] const int -# 1424| ValueCategory = lvalue -# 1424| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1424| Type = [IntType] int -# 1424| ValueCategory = lvalue -# 1425| getStmt(1): [DeclStmt] declaration -# 1425| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1425| Type = [IntType] int -# 1425| getVariable().getInitializer(): [Initializer] initializer for x -# 1425| getExpr(): [ValueFieldAccess] r -# 1425| Type = [LValueReferenceType] int & -# 1425| ValueCategory = prvalue -# 1425| getQualifier(): [FunctionCall] call to returnValue -# 1425| Type = [Struct] UnusualFields -# 1425| ValueCategory = prvalue -# 1425| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1425| Type = [IntType] int -# 1425| ValueCategory = prvalue(load) -# 1427| getStmt(2): [DeclStmt] declaration -# 1427| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rf -# 1427| Type = [LValueReferenceType] const float & -# 1427| getVariable().getInitializer(): [Initializer] initializer for rf -# 1427| getExpr(): [ArrayExpr] access to array -# 1427| Type = [FloatType] float -# 1427| ValueCategory = lvalue -# 1427| getArrayBase(): [ValueFieldAccess] a -# 1427| Type = [ArrayType] float[10] -# 1427| ValueCategory = prvalue -# 1427| getQualifier(): [FunctionCall] call to returnValue -# 1427| Type = [Struct] UnusualFields -# 1427| ValueCategory = prvalue -# 1427| getArrayOffset(): [Literal] 3 -# 1427| Type = [IntType] int -# 1427| Value = [Literal] 3 -# 1427| ValueCategory = prvalue -# 1427| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1427| Type = [PointerType] float * -# 1427| ValueCategory = prvalue -# 1427| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1427| Type = [LValueReferenceType] const float & -# 1427| ValueCategory = prvalue -# 1427| getExpr(): [CStyleCast] (const float)... -# 1427| Conversion = [GlvalueConversion] glvalue conversion -# 1427| Type = [SpecifiedType] const float -# 1427| ValueCategory = lvalue -# 1428| getStmt(3): [DeclStmt] declaration -# 1428| getDeclarationEntry(0): [VariableDeclarationEntry] definition of f -# 1428| Type = [FloatType] float -# 1428| getVariable().getInitializer(): [Initializer] initializer for f -# 1428| getExpr(): [ArrayExpr] access to array -# 1428| Type = [FloatType] float -# 1428| ValueCategory = prvalue(load) -# 1428| getArrayBase(): [ValueFieldAccess] a -# 1428| Type = [ArrayType] float[10] -# 1428| ValueCategory = prvalue -# 1428| getQualifier(): [FunctionCall] call to returnValue -# 1428| Type = [Struct] UnusualFields -# 1428| ValueCategory = prvalue -# 1428| getArrayOffset(): [Literal] 5 -# 1428| Type = [IntType] int -# 1428| Value = [Literal] 5 -# 1428| ValueCategory = prvalue -# 1428| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1428| Type = [PointerType] float * -# 1428| ValueCategory = prvalue -# 1429| getStmt(4): [ReturnStmt] return ... -# 1431| [CopyAssignmentOperator] POD_Base& POD_Base::operator=(POD_Base const&) -# 1431| : +# 1470| [TopLevelFunction] void temporary_unusual_fields() +# 1470| : +# 1470| getEntryPoint(): [BlockStmt] { ... } +# 1471| getStmt(0): [DeclStmt] declaration +# 1471| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rx +# 1471| Type = [LValueReferenceType] const int & +# 1471| getVariable().getInitializer(): [Initializer] initializer for rx +# 1471| getExpr(): [ValueFieldAccess] r +# 1471| Type = [LValueReferenceType] int & +# 1471| ValueCategory = prvalue +# 1471| getQualifier(): [FunctionCall] call to returnValue +# 1471| Type = [Struct] UnusualFields +# 1471| ValueCategory = prvalue +# 1471| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1471| Type = [LValueReferenceType] const int & +# 1471| ValueCategory = prvalue +# 1471| getExpr(): [CStyleCast] (const int)... +# 1471| Conversion = [GlvalueConversion] glvalue conversion +# 1471| Type = [SpecifiedType] const int +# 1471| ValueCategory = lvalue +# 1471| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1471| Type = [IntType] int +# 1471| ValueCategory = lvalue +# 1472| getStmt(1): [DeclStmt] declaration +# 1472| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1472| Type = [IntType] int +# 1472| getVariable().getInitializer(): [Initializer] initializer for x +# 1472| getExpr(): [ValueFieldAccess] r +# 1472| Type = [LValueReferenceType] int & +# 1472| ValueCategory = prvalue +# 1472| getQualifier(): [FunctionCall] call to returnValue +# 1472| Type = [Struct] UnusualFields +# 1472| ValueCategory = prvalue +# 1472| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1472| Type = [IntType] int +# 1472| ValueCategory = prvalue(load) +# 1474| getStmt(2): [DeclStmt] declaration +# 1474| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rf +# 1474| Type = [LValueReferenceType] const float & +# 1474| getVariable().getInitializer(): [Initializer] initializer for rf +# 1474| getExpr(): [ArrayExpr] access to array +# 1474| Type = [FloatType] float +# 1474| ValueCategory = lvalue +# 1474| getArrayBase(): [ValueFieldAccess] a +# 1474| Type = [ArrayType] float[10] +# 1474| ValueCategory = prvalue +# 1474| getQualifier(): [FunctionCall] call to returnValue +# 1474| Type = [Struct] UnusualFields +# 1474| ValueCategory = prvalue +# 1474| getArrayOffset(): [Literal] 3 +# 1474| Type = [IntType] int +# 1474| Value = [Literal] 3 +# 1474| ValueCategory = prvalue +# 1474| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1474| Type = [PointerType] float * +# 1474| ValueCategory = prvalue +# 1474| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1474| Type = [LValueReferenceType] const float & +# 1474| ValueCategory = prvalue +# 1474| getExpr(): [CStyleCast] (const float)... +# 1474| Conversion = [GlvalueConversion] glvalue conversion +# 1474| Type = [SpecifiedType] const float +# 1474| ValueCategory = lvalue +# 1475| getStmt(3): [DeclStmt] declaration +# 1475| getDeclarationEntry(0): [VariableDeclarationEntry] definition of f +# 1475| Type = [FloatType] float +# 1475| getVariable().getInitializer(): [Initializer] initializer for f +# 1475| getExpr(): [ArrayExpr] access to array +# 1475| Type = [FloatType] float +# 1475| ValueCategory = prvalue(load) +# 1475| getArrayBase(): [ValueFieldAccess] a +# 1475| Type = [ArrayType] float[10] +# 1475| ValueCategory = prvalue +# 1475| getQualifier(): [FunctionCall] call to returnValue +# 1475| Type = [Struct] UnusualFields +# 1475| ValueCategory = prvalue +# 1475| getArrayOffset(): [Literal] 5 +# 1475| Type = [IntType] int +# 1475| Value = [Literal] 5 +# 1475| ValueCategory = prvalue +# 1475| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1475| Type = [PointerType] float * +# 1475| ValueCategory = prvalue +# 1476| getStmt(4): [ReturnStmt] return ... +# 1478| [CopyAssignmentOperator] POD_Base& POD_Base::operator=(POD_Base const&) +# 1478| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const POD_Base & -# 1431| [MoveAssignmentOperator] POD_Base& POD_Base::operator=(POD_Base&&) -# 1431| : +# 1478| [MoveAssignmentOperator] POD_Base& POD_Base::operator=(POD_Base&&) +# 1478| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] POD_Base && -# 1434| [ConstMemberFunction] float POD_Base::f() const -# 1434| : -# 1437| [CopyAssignmentOperator] POD_Middle& POD_Middle::operator=(POD_Middle const&) -# 1437| : +# 1481| [ConstMemberFunction] float POD_Base::f() const +# 1481| : +# 1484| [CopyAssignmentOperator] POD_Middle& POD_Middle::operator=(POD_Middle const&) +# 1484| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const POD_Middle & -# 1437| [MoveAssignmentOperator] POD_Middle& POD_Middle::operator=(POD_Middle&&) -# 1437| : +# 1484| [MoveAssignmentOperator] POD_Middle& POD_Middle::operator=(POD_Middle&&) +# 1484| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] POD_Middle && -# 1437| [Constructor] void POD_Middle::POD_Middle() -# 1437| : -# 1441| [CopyAssignmentOperator] POD_Derived& POD_Derived::operator=(POD_Derived const&) -# 1441| : +# 1484| [Constructor] void POD_Middle::POD_Middle() +# 1484| : +# 1488| [CopyAssignmentOperator] POD_Derived& POD_Derived::operator=(POD_Derived const&) +# 1488| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const POD_Derived & -# 1441| [MoveAssignmentOperator] POD_Derived& POD_Derived::operator=(POD_Derived&&) -# 1441| : +# 1488| [MoveAssignmentOperator] POD_Derived& POD_Derived::operator=(POD_Derived&&) +# 1488| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] POD_Derived && -# 1441| [Constructor] void POD_Derived::POD_Derived() -# 1441| : -# 1445| [TopLevelFunction] void temporary_hierarchy() -# 1445| : -# 1445| getEntryPoint(): [BlockStmt] { ... } -# 1446| getStmt(0): [DeclStmt] declaration -# 1446| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 1446| Type = [Struct] POD_Base -# 1446| getVariable().getInitializer(): [Initializer] initializer for b -# 1446| getExpr(): [FunctionCall] call to returnValue -# 1446| Type = [Struct] POD_Middle -# 1446| ValueCategory = prvalue +# 1488| [Constructor] void POD_Derived::POD_Derived() +# 1488| : +# 1492| [TopLevelFunction] void temporary_hierarchy() +# 1492| : +# 1492| getEntryPoint(): [BlockStmt] { ... } +# 1493| getStmt(0): [DeclStmt] declaration +# 1493| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 1493| Type = [Struct] POD_Base +# 1493| getVariable().getInitializer(): [Initializer] initializer for b +# 1493| getExpr(): [FunctionCall] call to returnValue +# 1493| Type = [Struct] POD_Middle +# 1493| ValueCategory = prvalue #-----| getExpr().getFullyConverted(): [CStyleCast] (POD_Base)... #-----| Conversion = [BaseClassConversion] base class conversion #-----| Type = [Struct] POD_Base @@ -11684,40 +12194,40 @@ ir.cpp: #-----| getExpr(): [TemporaryObjectExpr] temporary object #-----| Type = [Struct] POD_Middle #-----| ValueCategory = xvalue -# 1447| getStmt(1): [ExprStmt] ExprStmt -# 1447| getExpr(): [AssignExpr] ... = ... -# 1447| Type = [Struct] POD_Base -# 1447| ValueCategory = lvalue -# 1447| getLValue(): [VariableAccess] b -# 1447| Type = [Struct] POD_Base -# 1447| ValueCategory = lvalue -# 1447| getRValue(): [FunctionCall] call to returnValue -# 1447| Type = [Struct] POD_Derived -# 1447| ValueCategory = prvalue -# 1447| getRValue().getFullyConverted(): [CStyleCast] (POD_Base)... -# 1447| Conversion = [BaseClassConversion] base class conversion -# 1447| Type = [Struct] POD_Base -# 1447| ValueCategory = prvalue(load) -# 1447| getExpr(): [CStyleCast] (POD_Middle)... -# 1447| Conversion = [BaseClassConversion] base class conversion -# 1447| Type = [Struct] POD_Middle -# 1447| ValueCategory = lvalue -# 1447| getExpr(): [TemporaryObjectExpr] temporary object -# 1447| Type = [Struct] POD_Derived -# 1447| ValueCategory = lvalue -# 1447| getExpr(): [ParenthesisExpr] (...) -# 1447| Type = [Struct] POD_Derived -# 1447| ValueCategory = prvalue -# 1448| getStmt(2): [DeclStmt] declaration -# 1448| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1448| Type = [IntType] int -# 1448| getVariable().getInitializer(): [Initializer] initializer for x -# 1448| getExpr(): [ValueFieldAccess] x -# 1448| Type = [IntType] int -# 1448| ValueCategory = prvalue(load) -# 1448| getQualifier(): [FunctionCall] call to returnValue -# 1448| Type = [Struct] POD_Derived -# 1448| ValueCategory = prvalue +# 1494| getStmt(1): [ExprStmt] ExprStmt +# 1494| getExpr(): [AssignExpr] ... = ... +# 1494| Type = [Struct] POD_Base +# 1494| ValueCategory = lvalue +# 1494| getLValue(): [VariableAccess] b +# 1494| Type = [Struct] POD_Base +# 1494| ValueCategory = lvalue +# 1494| getRValue(): [FunctionCall] call to returnValue +# 1494| Type = [Struct] POD_Derived +# 1494| ValueCategory = prvalue +# 1494| getRValue().getFullyConverted(): [CStyleCast] (POD_Base)... +# 1494| Conversion = [BaseClassConversion] base class conversion +# 1494| Type = [Struct] POD_Base +# 1494| ValueCategory = prvalue(load) +# 1494| getExpr(): [CStyleCast] (POD_Middle)... +# 1494| Conversion = [BaseClassConversion] base class conversion +# 1494| Type = [Struct] POD_Middle +# 1494| ValueCategory = lvalue +# 1494| getExpr(): [TemporaryObjectExpr] temporary object +# 1494| Type = [Struct] POD_Derived +# 1494| ValueCategory = lvalue +# 1494| getExpr(): [ParenthesisExpr] (...) +# 1494| Type = [Struct] POD_Derived +# 1494| ValueCategory = prvalue +# 1495| getStmt(2): [DeclStmt] declaration +# 1495| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1495| Type = [IntType] int +# 1495| getVariable().getInitializer(): [Initializer] initializer for x +# 1495| getExpr(): [ValueFieldAccess] x +# 1495| Type = [IntType] int +# 1495| ValueCategory = prvalue(load) +# 1495| getQualifier(): [FunctionCall] call to returnValue +# 1495| Type = [Struct] POD_Derived +# 1495| ValueCategory = prvalue #-----| getQualifier().getFullyConverted(): [CStyleCast] (POD_Base)... #-----| Conversion = [BaseClassConversion] base class conversion #-----| Type = [Struct] POD_Base @@ -11729,16 +12239,16 @@ ir.cpp: #-----| getExpr(): [TemporaryObjectExpr] temporary object #-----| Type = [Struct] POD_Derived #-----| ValueCategory = xvalue -# 1449| getStmt(3): [DeclStmt] declaration -# 1449| getDeclarationEntry(0): [VariableDeclarationEntry] definition of f -# 1449| Type = [FloatType] float -# 1449| getVariable().getInitializer(): [Initializer] initializer for f -# 1449| getExpr(): [FunctionCall] call to f -# 1449| Type = [FloatType] float -# 1449| ValueCategory = prvalue -# 1449| getQualifier(): [FunctionCall] call to returnValue -# 1449| Type = [Struct] POD_Derived -# 1449| ValueCategory = prvalue +# 1496| getStmt(3): [DeclStmt] declaration +# 1496| getDeclarationEntry(0): [VariableDeclarationEntry] definition of f +# 1496| Type = [FloatType] float +# 1496| getVariable().getInitializer(): [Initializer] initializer for f +# 1496| getExpr(): [FunctionCall] call to f +# 1496| Type = [FloatType] float +# 1496| ValueCategory = prvalue +# 1496| getQualifier(): [FunctionCall] call to returnValue +# 1496| Type = [Struct] POD_Derived +# 1496| ValueCategory = prvalue #-----| getQualifier().getFullyConverted(): [CStyleCast] (const POD_Base)... #-----| Conversion = [GlvalueConversion] glvalue conversion #-----| Type = [SpecifiedType] const POD_Base @@ -11754,99 +12264,99 @@ ir.cpp: #-----| getExpr(): [TemporaryObjectExpr] temporary object #-----| Type = [Struct] POD_Derived #-----| ValueCategory = xvalue -# 1449| getExpr(): [ParenthesisExpr] (...) -# 1449| Type = [Struct] POD_Derived -# 1449| ValueCategory = prvalue -# 1450| getStmt(4): [ReturnStmt] return ... -# 1452| [CopyAssignmentOperator] Inheritance_Test_B& Inheritance_Test_B::operator=(Inheritance_Test_B const&) -# 1452| : +# 1496| getExpr(): [ParenthesisExpr] (...) +# 1496| Type = [Struct] POD_Derived +# 1496| ValueCategory = prvalue +# 1497| getStmt(4): [ReturnStmt] return ... +# 1499| [CopyAssignmentOperator] Inheritance_Test_B& Inheritance_Test_B::operator=(Inheritance_Test_B const&) +# 1499| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Inheritance_Test_B & -# 1452| [Constructor] void Inheritance_Test_B::Inheritance_Test_B() -# 1452| : -# 1453| [Destructor] void Inheritance_Test_B::~Inheritance_Test_B() -# 1453| : -# 1453| getEntryPoint(): [BlockStmt] { ... } -# 1453| getStmt(0): [ReturnStmt] return ... -# 1453| : -# 1456| [CopyAssignmentOperator] Inheritance_Test_A& Inheritance_Test_A::operator=(Inheritance_Test_A const&) -# 1456| : +# 1499| [Constructor] void Inheritance_Test_B::Inheritance_Test_B() +# 1499| : +# 1500| [Destructor] void Inheritance_Test_B::~Inheritance_Test_B() +# 1500| : +# 1500| getEntryPoint(): [BlockStmt] { ... } +# 1500| getStmt(0): [ReturnStmt] return ... +# 1500| : +# 1503| [CopyAssignmentOperator] Inheritance_Test_A& Inheritance_Test_A::operator=(Inheritance_Test_A const&) +# 1503| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Inheritance_Test_A & -# 1456| [MoveAssignmentOperator] Inheritance_Test_A& Inheritance_Test_A::operator=(Inheritance_Test_A&&) -# 1456| : +# 1503| [MoveAssignmentOperator] Inheritance_Test_A& Inheritance_Test_A::operator=(Inheritance_Test_A&&) +# 1503| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] Inheritance_Test_A && -# 1456| [CopyConstructor] void Inheritance_Test_A::Inheritance_Test_A(Inheritance_Test_A const&) -# 1456| : +# 1503| [CopyConstructor] void Inheritance_Test_A::Inheritance_Test_A(Inheritance_Test_A const&) +# 1503| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Inheritance_Test_A & -# 1456| [MoveConstructor] void Inheritance_Test_A::Inheritance_Test_A(Inheritance_Test_A&&) -# 1456| : +# 1503| [MoveConstructor] void Inheritance_Test_A::Inheritance_Test_A(Inheritance_Test_A&&) +# 1503| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] Inheritance_Test_A && -# 1456| [Destructor] void Inheritance_Test_A::~Inheritance_Test_A() -# 1456| : -# 1459| [Constructor] void Inheritance_Test_A::Inheritance_Test_A() -# 1459| : -# 1459| : -# 1459| getInitializer(0): (no string representation) -# 1459| Type = [Struct] Inheritance_Test_B -# 1459| ValueCategory = prvalue -# 1459| getInitializer(1): [ConstructorFieldInit] constructor init of field x -# 1459| Type = [IntType] int -# 1459| ValueCategory = prvalue -# 1459| getExpr(): [Literal] 42 -# 1459| Type = [IntType] int -# 1459| Value = [Literal] 42 -# 1459| ValueCategory = prvalue -# 1459| getEntryPoint(): [BlockStmt] { ... } -# 1460| getStmt(0): [ExprStmt] ExprStmt -# 1460| getExpr(): [AssignExpr] ... = ... -# 1460| Type = [IntType] int -# 1460| ValueCategory = lvalue -# 1460| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] y -# 1460| Type = [IntType] int -# 1460| ValueCategory = lvalue -# 1460| getQualifier(): [ThisExpr] this -# 1460| Type = [PointerType] Inheritance_Test_A * -# 1460| ValueCategory = prvalue(load) -# 1460| getRValue(): [Literal] 3 -# 1460| Type = [IntType] int -# 1460| Value = [Literal] 3 -# 1460| ValueCategory = prvalue -# 1461| getStmt(1): [ReturnStmt] return ... -# 1464| [TopLevelFunction] void array_structured_binding() -# 1464| : -# 1464| getEntryPoint(): [BlockStmt] { ... } -# 1465| getStmt(0): [DeclStmt] declaration -# 1465| getDeclarationEntry(0): [VariableDeclarationEntry] definition of xs -# 1465| Type = [ArrayType] int[2] -# 1465| getVariable().getInitializer(): [Initializer] initializer for xs -# 1465| getExpr(): [ArrayAggregateLiteral] {...} -# 1465| Type = [ArrayType] int[2] -# 1465| ValueCategory = prvalue -# 1465| getAnElementExpr(0): [Literal] 1 -# 1465| Type = [IntType] int -# 1465| Value = [Literal] 1 -# 1465| ValueCategory = prvalue -# 1465| getAnElementExpr(1): [Literal] 2 -# 1465| Type = [IntType] int -# 1465| Value = [Literal] 2 -# 1465| ValueCategory = prvalue -# 1467| getStmt(1): [BlockStmt] { ... } -# 1468| getStmt(0): [DeclStmt] declaration -# 1468| getDeclarationEntry(0): [VariableDeclarationEntry] definition of (unnamed local variable) -# 1468| Type = [LValueReferenceType] int(&)[2] -# 1468| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) -# 1468| getExpr(): [VariableAccess] xs -# 1468| Type = [ArrayType] int[2] -# 1468| ValueCategory = lvalue -# 1468| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1468| Type = [LValueReferenceType] int(&)[2] -# 1468| ValueCategory = prvalue -# 1468| getDeclarationEntry(1): [VariableDeclarationEntry] definition of x0 -# 1468| Type = [IntType] int +# 1503| [Destructor] void Inheritance_Test_A::~Inheritance_Test_A() +# 1503| : +# 1506| [Constructor] void Inheritance_Test_A::Inheritance_Test_A() +# 1506| : +# 1506| : +# 1506| getInitializer(0): (no string representation) +# 1506| Type = [Struct] Inheritance_Test_B +# 1506| ValueCategory = prvalue +# 1506| getInitializer(1): [ConstructorFieldInit] constructor init of field x +# 1506| Type = [IntType] int +# 1506| ValueCategory = prvalue +# 1506| getExpr(): [Literal] 42 +# 1506| Type = [IntType] int +# 1506| Value = [Literal] 42 +# 1506| ValueCategory = prvalue +# 1506| getEntryPoint(): [BlockStmt] { ... } +# 1507| getStmt(0): [ExprStmt] ExprStmt +# 1507| getExpr(): [AssignExpr] ... = ... +# 1507| Type = [IntType] int +# 1507| ValueCategory = lvalue +# 1507| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] y +# 1507| Type = [IntType] int +# 1507| ValueCategory = lvalue +# 1507| getQualifier(): [ThisExpr] this +# 1507| Type = [PointerType] Inheritance_Test_A * +# 1507| ValueCategory = prvalue(load) +# 1507| getRValue(): [Literal] 3 +# 1507| Type = [IntType] int +# 1507| Value = [Literal] 3 +# 1507| ValueCategory = prvalue +# 1508| getStmt(1): [ReturnStmt] return ... +# 1511| [TopLevelFunction] void array_structured_binding() +# 1511| : +# 1511| getEntryPoint(): [BlockStmt] { ... } +# 1512| getStmt(0): [DeclStmt] declaration +# 1512| getDeclarationEntry(0): [VariableDeclarationEntry] definition of xs +# 1512| Type = [ArrayType] int[2] +# 1512| getVariable().getInitializer(): [Initializer] initializer for xs +# 1512| getExpr(): [ArrayAggregateLiteral] {...} +# 1512| Type = [ArrayType] int[2] +# 1512| ValueCategory = prvalue +# 1512| getAnElementExpr(0): [Literal] 1 +# 1512| Type = [IntType] int +# 1512| Value = [Literal] 1 +# 1512| ValueCategory = prvalue +# 1512| getAnElementExpr(1): [Literal] 2 +# 1512| Type = [IntType] int +# 1512| Value = [Literal] 2 +# 1512| ValueCategory = prvalue +# 1514| getStmt(1): [BlockStmt] { ... } +# 1515| getStmt(0): [DeclStmt] declaration +# 1515| getDeclarationEntry(0): [VariableDeclarationEntry] definition of (unnamed local variable) +# 1515| Type = [LValueReferenceType] int(&)[2] +# 1515| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) +# 1515| getExpr(): [VariableAccess] xs +# 1515| Type = [ArrayType] int[2] +# 1515| ValueCategory = lvalue +# 1515| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1515| Type = [LValueReferenceType] int(&)[2] +# 1515| ValueCategory = prvalue +# 1515| getDeclarationEntry(1): [VariableDeclarationEntry] definition of x0 +# 1515| Type = [IntType] int #-----| getVariable().getInitializer(): [Initializer] initializer for x0 #-----| getExpr(): [ArrayExpr] access to array #-----| Type = [IntType] int @@ -11864,8 +12374,8 @@ ir.cpp: #-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [ArrayType] int[2] #-----| ValueCategory = lvalue -# 1468| getDeclarationEntry(2): [VariableDeclarationEntry] definition of x1 -# 1468| Type = [IntType] int +# 1515| getDeclarationEntry(2): [VariableDeclarationEntry] definition of x1 +# 1515| Type = [IntType] int #-----| getVariable().getInitializer(): [Initializer] initializer for x1 #-----| getExpr(): [ArrayExpr] access to array #-----| Type = [IntType] int @@ -11883,1462 +12393,1462 @@ ir.cpp: #-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [ArrayType] int[2] #-----| ValueCategory = lvalue -# 1469| getStmt(1): [ExprStmt] ExprStmt -# 1469| getExpr(): [AssignExpr] ... = ... -# 1469| Type = [IntType] int -# 1469| ValueCategory = lvalue -# 1469| getLValue(): [VariableAccess] x1 -# 1469| Type = [IntType] int -# 1469| ValueCategory = lvalue -# 1469| getRValue(): [Literal] 3 -# 1469| Type = [IntType] int -# 1469| Value = [Literal] 3 -# 1469| ValueCategory = prvalue -# 1470| getStmt(2): [DeclStmt] declaration -# 1470| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rx1 -# 1470| Type = [LValueReferenceType] int & -# 1470| getVariable().getInitializer(): [Initializer] initializer for rx1 -# 1470| getExpr(): [VariableAccess] x1 -# 1470| Type = [IntType] int -# 1470| ValueCategory = lvalue -# 1470| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1470| Type = [LValueReferenceType] int & -# 1470| ValueCategory = prvalue -# 1471| getStmt(3): [DeclStmt] declaration -# 1471| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1471| Type = [IntType] int -# 1471| getVariable().getInitializer(): [Initializer] initializer for x -# 1471| getExpr(): [VariableAccess] x1 -# 1471| Type = [IntType] int -# 1471| ValueCategory = prvalue(load) -# 1474| getStmt(2): [BlockStmt] { ... } -# 1475| getStmt(0): [DeclStmt] declaration -# 1475| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable -# 1475| Type = [LValueReferenceType] int(&)[2] -# 1475| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable -# 1475| getExpr(): [VariableAccess] xs -# 1475| Type = [ArrayType] int[2] -# 1475| ValueCategory = lvalue -# 1475| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1475| Type = [LValueReferenceType] int(&)[2] -# 1475| ValueCategory = prvalue -# 1476| getStmt(1): [DeclStmt] declaration -# 1476| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x0 -# 1476| Type = [LValueReferenceType] int & -# 1476| getVariable().getInitializer(): [Initializer] initializer for x0 -# 1476| getExpr(): [ArrayExpr] access to array -# 1476| Type = [IntType] int -# 1476| ValueCategory = lvalue -# 1476| getArrayBase(): [VariableAccess] unnamed_local_variable -# 1476| Type = [LValueReferenceType] int(&)[2] -# 1476| ValueCategory = prvalue(load) -# 1476| getArrayOffset(): [Literal] 0 -# 1476| Type = [IntType] int -# 1476| Value = [Literal] 0 -# 1476| ValueCategory = prvalue -# 1476| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1476| Type = [IntPointerType] int * -# 1476| ValueCategory = prvalue -# 1476| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1476| Type = [ArrayType] int[2] -# 1476| ValueCategory = lvalue -# 1476| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1476| Type = [LValueReferenceType] int & -# 1476| ValueCategory = prvalue -# 1477| getStmt(2): [DeclStmt] declaration -# 1477| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1 -# 1477| Type = [LValueReferenceType] int & -# 1477| getVariable().getInitializer(): [Initializer] initializer for x1 -# 1477| getExpr(): [ArrayExpr] access to array -# 1477| Type = [IntType] int -# 1477| ValueCategory = lvalue -# 1477| getArrayBase(): [VariableAccess] unnamed_local_variable -# 1477| Type = [LValueReferenceType] int(&)[2] -# 1477| ValueCategory = prvalue(load) -# 1477| getArrayOffset(): [Literal] 1 -# 1477| Type = [IntType] int -# 1477| Value = [Literal] 1 -# 1477| ValueCategory = prvalue -# 1477| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1477| Type = [IntPointerType] int * -# 1477| ValueCategory = prvalue -# 1477| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1477| Type = [ArrayType] int[2] -# 1477| ValueCategory = lvalue -# 1477| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1477| Type = [LValueReferenceType] int & -# 1477| ValueCategory = prvalue -# 1478| getStmt(3): [ExprStmt] ExprStmt -# 1478| getExpr(): [AssignExpr] ... = ... -# 1478| Type = [IntType] int -# 1478| ValueCategory = lvalue -# 1478| getLValue(): [VariableAccess] x1 -# 1478| Type = [LValueReferenceType] int & -# 1478| ValueCategory = prvalue(load) -# 1478| getRValue(): [Literal] 3 -# 1478| Type = [IntType] int -# 1478| Value = [Literal] 3 -# 1478| ValueCategory = prvalue -# 1478| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1478| Type = [IntType] int -# 1478| ValueCategory = lvalue -# 1479| getStmt(4): [DeclStmt] declaration -# 1479| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rx1 -# 1479| Type = [LValueReferenceType] int & -# 1479| getVariable().getInitializer(): [Initializer] initializer for rx1 -# 1479| getExpr(): [VariableAccess] x1 -# 1479| Type = [LValueReferenceType] int & -# 1479| ValueCategory = prvalue(load) -# 1479| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1479| Type = [LValueReferenceType] int & -# 1479| ValueCategory = prvalue -# 1479| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1479| Type = [IntType] int -# 1479| ValueCategory = lvalue -# 1480| getStmt(5): [DeclStmt] declaration -# 1480| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1480| Type = [IntType] int -# 1480| getVariable().getInitializer(): [Initializer] initializer for x -# 1480| getExpr(): [VariableAccess] x1 -# 1480| Type = [LValueReferenceType] int & -# 1480| ValueCategory = prvalue(load) -# 1480| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1480| Type = [IntType] int -# 1480| ValueCategory = prvalue(load) -# 1482| getStmt(3): [ReturnStmt] return ... -# 1484| [CopyAssignmentOperator] StructuredBindingDataMemberMemberStruct& StructuredBindingDataMemberMemberStruct::operator=(StructuredBindingDataMemberMemberStruct const&) -# 1484| : +# 1516| getStmt(1): [ExprStmt] ExprStmt +# 1516| getExpr(): [AssignExpr] ... = ... +# 1516| Type = [IntType] int +# 1516| ValueCategory = lvalue +# 1516| getLValue(): [VariableAccess] x1 +# 1516| Type = [IntType] int +# 1516| ValueCategory = lvalue +# 1516| getRValue(): [Literal] 3 +# 1516| Type = [IntType] int +# 1516| Value = [Literal] 3 +# 1516| ValueCategory = prvalue +# 1517| getStmt(2): [DeclStmt] declaration +# 1517| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rx1 +# 1517| Type = [LValueReferenceType] int & +# 1517| getVariable().getInitializer(): [Initializer] initializer for rx1 +# 1517| getExpr(): [VariableAccess] x1 +# 1517| Type = [IntType] int +# 1517| ValueCategory = lvalue +# 1517| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1517| Type = [LValueReferenceType] int & +# 1517| ValueCategory = prvalue +# 1518| getStmt(3): [DeclStmt] declaration +# 1518| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1518| Type = [IntType] int +# 1518| getVariable().getInitializer(): [Initializer] initializer for x +# 1518| getExpr(): [VariableAccess] x1 +# 1518| Type = [IntType] int +# 1518| ValueCategory = prvalue(load) +# 1521| getStmt(2): [BlockStmt] { ... } +# 1522| getStmt(0): [DeclStmt] declaration +# 1522| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable +# 1522| Type = [LValueReferenceType] int(&)[2] +# 1522| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable +# 1522| getExpr(): [VariableAccess] xs +# 1522| Type = [ArrayType] int[2] +# 1522| ValueCategory = lvalue +# 1522| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1522| Type = [LValueReferenceType] int(&)[2] +# 1522| ValueCategory = prvalue +# 1523| getStmt(1): [DeclStmt] declaration +# 1523| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x0 +# 1523| Type = [LValueReferenceType] int & +# 1523| getVariable().getInitializer(): [Initializer] initializer for x0 +# 1523| getExpr(): [ArrayExpr] access to array +# 1523| Type = [IntType] int +# 1523| ValueCategory = lvalue +# 1523| getArrayBase(): [VariableAccess] unnamed_local_variable +# 1523| Type = [LValueReferenceType] int(&)[2] +# 1523| ValueCategory = prvalue(load) +# 1523| getArrayOffset(): [Literal] 0 +# 1523| Type = [IntType] int +# 1523| Value = [Literal] 0 +# 1523| ValueCategory = prvalue +# 1523| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1523| Type = [IntPointerType] int * +# 1523| ValueCategory = prvalue +# 1523| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1523| Type = [ArrayType] int[2] +# 1523| ValueCategory = lvalue +# 1523| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1523| Type = [LValueReferenceType] int & +# 1523| ValueCategory = prvalue +# 1524| getStmt(2): [DeclStmt] declaration +# 1524| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1 +# 1524| Type = [LValueReferenceType] int & +# 1524| getVariable().getInitializer(): [Initializer] initializer for x1 +# 1524| getExpr(): [ArrayExpr] access to array +# 1524| Type = [IntType] int +# 1524| ValueCategory = lvalue +# 1524| getArrayBase(): [VariableAccess] unnamed_local_variable +# 1524| Type = [LValueReferenceType] int(&)[2] +# 1524| ValueCategory = prvalue(load) +# 1524| getArrayOffset(): [Literal] 1 +# 1524| Type = [IntType] int +# 1524| Value = [Literal] 1 +# 1524| ValueCategory = prvalue +# 1524| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1524| Type = [IntPointerType] int * +# 1524| ValueCategory = prvalue +# 1524| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1524| Type = [ArrayType] int[2] +# 1524| ValueCategory = lvalue +# 1524| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1524| Type = [LValueReferenceType] int & +# 1524| ValueCategory = prvalue +# 1525| getStmt(3): [ExprStmt] ExprStmt +# 1525| getExpr(): [AssignExpr] ... = ... +# 1525| Type = [IntType] int +# 1525| ValueCategory = lvalue +# 1525| getLValue(): [VariableAccess] x1 +# 1525| Type = [LValueReferenceType] int & +# 1525| ValueCategory = prvalue(load) +# 1525| getRValue(): [Literal] 3 +# 1525| Type = [IntType] int +# 1525| Value = [Literal] 3 +# 1525| ValueCategory = prvalue +# 1525| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1525| Type = [IntType] int +# 1525| ValueCategory = lvalue +# 1526| getStmt(4): [DeclStmt] declaration +# 1526| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rx1 +# 1526| Type = [LValueReferenceType] int & +# 1526| getVariable().getInitializer(): [Initializer] initializer for rx1 +# 1526| getExpr(): [VariableAccess] x1 +# 1526| Type = [LValueReferenceType] int & +# 1526| ValueCategory = prvalue(load) +# 1526| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1526| Type = [LValueReferenceType] int & +# 1526| ValueCategory = prvalue +# 1526| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1526| Type = [IntType] int +# 1526| ValueCategory = lvalue +# 1527| getStmt(5): [DeclStmt] declaration +# 1527| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1527| Type = [IntType] int +# 1527| getVariable().getInitializer(): [Initializer] initializer for x +# 1527| getExpr(): [VariableAccess] x1 +# 1527| Type = [LValueReferenceType] int & +# 1527| ValueCategory = prvalue(load) +# 1527| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1527| Type = [IntType] int +# 1527| ValueCategory = prvalue(load) +# 1529| getStmt(3): [ReturnStmt] return ... +# 1531| [CopyAssignmentOperator] StructuredBindingDataMemberMemberStruct& StructuredBindingDataMemberMemberStruct::operator=(StructuredBindingDataMemberMemberStruct const&) +# 1531| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingDataMemberMemberStruct & -# 1484| [MoveAssignmentOperator] StructuredBindingDataMemberMemberStruct& StructuredBindingDataMemberMemberStruct::operator=(StructuredBindingDataMemberMemberStruct&&) -# 1484| : +# 1531| [MoveAssignmentOperator] StructuredBindingDataMemberMemberStruct& StructuredBindingDataMemberMemberStruct::operator=(StructuredBindingDataMemberMemberStruct&&) +# 1531| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] StructuredBindingDataMemberMemberStruct && -# 1484| [Constructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct() -# 1484| : -# 1484| : -# 1484| getInitializer(0): [ConstructorFieldInit] constructor init of field x -# 1484| Type = [IntType] int -# 1484| ValueCategory = prvalue -# 1484| getEntryPoint(): [BlockStmt] { ... } -# 1484| getStmt(0): [ReturnStmt] return ... -# 1484| [CopyConstructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct(StructuredBindingDataMemberMemberStruct const&) -# 1484| : +# 1531| [Constructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct() +# 1531| : +# 1531| : +# 1531| getInitializer(0): [ConstructorFieldInit] constructor init of field x +# 1531| Type = [IntType] int +# 1531| ValueCategory = prvalue +# 1531| getEntryPoint(): [BlockStmt] { ... } +# 1531| getStmt(0): [ReturnStmt] return ... +# 1531| [CopyConstructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct(StructuredBindingDataMemberMemberStruct const&) +# 1531| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingDataMemberMemberStruct & -# 1484| [MoveConstructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct(StructuredBindingDataMemberMemberStruct&&) -# 1484| : +# 1531| [MoveConstructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct(StructuredBindingDataMemberMemberStruct&&) +# 1531| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] StructuredBindingDataMemberMemberStruct && -# 1488| [CopyAssignmentOperator] StructuredBindingDataMemberStruct& StructuredBindingDataMemberStruct::operator=(StructuredBindingDataMemberStruct const&) -# 1488| : +# 1535| [CopyAssignmentOperator] StructuredBindingDataMemberStruct& StructuredBindingDataMemberStruct::operator=(StructuredBindingDataMemberStruct const&) +# 1535| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1488| [Constructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() -# 1488| : -# 1488| : -# 1488| getInitializer(0): [ConstructorFieldInit] constructor init of field i -# 1488| Type = [IntType] int -# 1488| ValueCategory = prvalue -# 1488| getInitializer(1): [ConstructorFieldInit] constructor init of field d -# 1488| Type = [DoubleType] double -# 1488| ValueCategory = prvalue -# 1488| getInitializer(2): [ConstructorFieldInit] constructor init of field r -# 1488| Type = [LValueReferenceType] int & -# 1488| ValueCategory = prvalue -# 1488| getInitializer(3): [ConstructorFieldInit] constructor init of field p -# 1488| Type = [IntPointerType] int * -# 1488| ValueCategory = prvalue -# 1488| getInitializer(4): [ConstructorFieldInit] constructor init of field xs -# 1488| Type = [CTypedefType,NestedTypedefType] ArrayType -# 1488| ValueCategory = prvalue -# 1488| getInitializer(5): [ConstructorFieldInit] constructor init of field r_alt -# 1488| Type = [CTypedefType,NestedTypedefType] RefType -# 1488| ValueCategory = prvalue -# 1488| getInitializer(6): [ConstructorFieldInit] constructor init of field m -# 1488| Type = [Struct] StructuredBindingDataMemberMemberStruct -# 1488| ValueCategory = prvalue -# 1488| getExpr(): [ConstructorCall] call to StructuredBindingDataMemberMemberStruct -# 1488| Type = [VoidType] void -# 1488| ValueCategory = prvalue -# 1488| getEntryPoint(): [BlockStmt] { ... } -# 1488| getStmt(0): [ReturnStmt] return ... -# 1488| [CopyConstructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct const&) -# 1488| : +# 1535| [Constructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() +# 1535| : +# 1535| : +# 1535| getInitializer(0): [ConstructorFieldInit] constructor init of field i +# 1535| Type = [IntType] int +# 1535| ValueCategory = prvalue +# 1535| getInitializer(1): [ConstructorFieldInit] constructor init of field d +# 1535| Type = [DoubleType] double +# 1535| ValueCategory = prvalue +# 1535| getInitializer(2): [ConstructorFieldInit] constructor init of field r +# 1535| Type = [LValueReferenceType] int & +# 1535| ValueCategory = prvalue +# 1535| getInitializer(3): [ConstructorFieldInit] constructor init of field p +# 1535| Type = [IntPointerType] int * +# 1535| ValueCategory = prvalue +# 1535| getInitializer(4): [ConstructorFieldInit] constructor init of field xs +# 1535| Type = [CTypedefType,NestedTypedefType] ArrayType +# 1535| ValueCategory = prvalue +# 1535| getInitializer(5): [ConstructorFieldInit] constructor init of field r_alt +# 1535| Type = [CTypedefType,NestedTypedefType] RefType +# 1535| ValueCategory = prvalue +# 1535| getInitializer(6): [ConstructorFieldInit] constructor init of field m +# 1535| Type = [Struct] StructuredBindingDataMemberMemberStruct +# 1535| ValueCategory = prvalue +# 1535| getExpr(): [ConstructorCall] call to StructuredBindingDataMemberMemberStruct +# 1535| Type = [VoidType] void +# 1535| ValueCategory = prvalue +# 1535| getEntryPoint(): [BlockStmt] { ... } +# 1535| getStmt(0): [ReturnStmt] return ... +# 1535| [CopyConstructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct const&) +# 1535| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1488| : -# 1488| getInitializer(0): [ConstructorFieldInit] constructor init of field i -# 1488| Type = [IntType] int -# 1488| ValueCategory = prvalue -# 1488| getExpr(): [ReferenceFieldAccess] i -# 1488| Type = [IntType] int -# 1488| ValueCategory = prvalue(load) -# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1488| ValueCategory = prvalue(load) -# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1488| ValueCategory = lvalue -# 1488| getInitializer(1): [ConstructorFieldInit] constructor init of field d -# 1488| Type = [DoubleType] double -# 1488| ValueCategory = prvalue -# 1488| getExpr(): [ReferenceFieldAccess] d -# 1488| Type = [DoubleType] double -# 1488| ValueCategory = prvalue(load) -# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1488| ValueCategory = prvalue(load) -# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1488| ValueCategory = lvalue -# 1488| getInitializer(2): [ConstructorFieldInit] constructor init of field b -# 1488| Type = [IntType] unsigned int -# 1488| ValueCategory = prvalue -# 1488| getExpr(): [ReferenceFieldAccess] b -# 1488| Type = [IntType] unsigned int -# 1488| ValueCategory = prvalue(load) -# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1488| ValueCategory = prvalue(load) -# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1488| ValueCategory = lvalue -# 1488| getInitializer(3): [ConstructorFieldInit] constructor init of field r -# 1488| Type = [LValueReferenceType] int & -# 1488| ValueCategory = prvalue -# 1488| getExpr(): [ReferenceFieldAccess] r -# 1488| Type = [LValueReferenceType] int & -# 1488| ValueCategory = prvalue(load) -# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1488| ValueCategory = prvalue(load) -# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1488| ValueCategory = lvalue -# 1488| getInitializer(4): [ConstructorFieldInit] constructor init of field p -# 1488| Type = [IntPointerType] int * -# 1488| ValueCategory = prvalue -# 1488| getExpr(): [ReferenceFieldAccess] p -# 1488| Type = [IntPointerType] int * -# 1488| ValueCategory = prvalue(load) -# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1488| ValueCategory = prvalue(load) -# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1488| ValueCategory = lvalue -# 1488| getInitializer(5): [ConstructorFieldInit] constructor init of field xs -# 1488| Type = [CTypedefType,NestedTypedefType] ArrayType -# 1488| ValueCategory = prvalue -# 1488| getExpr(): [ReferenceFieldAccess] xs -# 1488| Type = [CTypedefType,NestedTypedefType] ArrayType -# 1488| ValueCategory = prvalue(load) -# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1488| ValueCategory = prvalue(load) -# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1488| ValueCategory = lvalue -# 1488| getInitializer(6): [ConstructorFieldInit] constructor init of field r_alt -# 1488| Type = [CTypedefType,NestedTypedefType] RefType -# 1488| ValueCategory = prvalue -# 1488| getExpr(): [ReferenceFieldAccess] r_alt -# 1488| Type = [CTypedefType,NestedTypedefType] RefType -# 1488| ValueCategory = prvalue(load) -# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1488| ValueCategory = prvalue(load) -# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1488| ValueCategory = lvalue -# 1488| getInitializer(7): [ConstructorFieldInit] constructor init of field m -# 1488| Type = [Struct] StructuredBindingDataMemberMemberStruct -# 1488| ValueCategory = prvalue -# 1488| getExpr(): [ReferenceFieldAccess] m -# 1488| Type = [Struct] StructuredBindingDataMemberMemberStruct -# 1488| ValueCategory = prvalue(load) -# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1488| ValueCategory = prvalue(load) -# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1488| ValueCategory = lvalue -# 1488| getEntryPoint(): [BlockStmt] { ... } -# 1488| getStmt(0): [ReturnStmt] return ... -# 1488| [MoveConstructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct&&) -# 1488| : +# 1535| : +# 1535| getInitializer(0): [ConstructorFieldInit] constructor init of field i +# 1535| Type = [IntType] int +# 1535| ValueCategory = prvalue +# 1535| getExpr(): [ReferenceFieldAccess] i +# 1535| Type = [IntType] int +# 1535| ValueCategory = prvalue(load) +# 1535| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1535| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1535| ValueCategory = prvalue(load) +# 1535| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1535| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1535| ValueCategory = lvalue +# 1535| getInitializer(1): [ConstructorFieldInit] constructor init of field d +# 1535| Type = [DoubleType] double +# 1535| ValueCategory = prvalue +# 1535| getExpr(): [ReferenceFieldAccess] d +# 1535| Type = [DoubleType] double +# 1535| ValueCategory = prvalue(load) +# 1535| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1535| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1535| ValueCategory = prvalue(load) +# 1535| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1535| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1535| ValueCategory = lvalue +# 1535| getInitializer(2): [ConstructorFieldInit] constructor init of field b +# 1535| Type = [IntType] unsigned int +# 1535| ValueCategory = prvalue +# 1535| getExpr(): [ReferenceFieldAccess] b +# 1535| Type = [IntType] unsigned int +# 1535| ValueCategory = prvalue(load) +# 1535| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1535| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1535| ValueCategory = prvalue(load) +# 1535| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1535| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1535| ValueCategory = lvalue +# 1535| getInitializer(3): [ConstructorFieldInit] constructor init of field r +# 1535| Type = [LValueReferenceType] int & +# 1535| ValueCategory = prvalue +# 1535| getExpr(): [ReferenceFieldAccess] r +# 1535| Type = [LValueReferenceType] int & +# 1535| ValueCategory = prvalue(load) +# 1535| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1535| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1535| ValueCategory = prvalue(load) +# 1535| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1535| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1535| ValueCategory = lvalue +# 1535| getInitializer(4): [ConstructorFieldInit] constructor init of field p +# 1535| Type = [IntPointerType] int * +# 1535| ValueCategory = prvalue +# 1535| getExpr(): [ReferenceFieldAccess] p +# 1535| Type = [IntPointerType] int * +# 1535| ValueCategory = prvalue(load) +# 1535| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1535| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1535| ValueCategory = prvalue(load) +# 1535| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1535| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1535| ValueCategory = lvalue +# 1535| getInitializer(5): [ConstructorFieldInit] constructor init of field xs +# 1535| Type = [CTypedefType,NestedTypedefType] ArrayType +# 1535| ValueCategory = prvalue +# 1535| getExpr(): [ReferenceFieldAccess] xs +# 1535| Type = [CTypedefType,NestedTypedefType] ArrayType +# 1535| ValueCategory = prvalue(load) +# 1535| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1535| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1535| ValueCategory = prvalue(load) +# 1535| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1535| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1535| ValueCategory = lvalue +# 1535| getInitializer(6): [ConstructorFieldInit] constructor init of field r_alt +# 1535| Type = [CTypedefType,NestedTypedefType] RefType +# 1535| ValueCategory = prvalue +# 1535| getExpr(): [ReferenceFieldAccess] r_alt +# 1535| Type = [CTypedefType,NestedTypedefType] RefType +# 1535| ValueCategory = prvalue(load) +# 1535| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1535| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1535| ValueCategory = prvalue(load) +# 1535| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1535| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1535| ValueCategory = lvalue +# 1535| getInitializer(7): [ConstructorFieldInit] constructor init of field m +# 1535| Type = [Struct] StructuredBindingDataMemberMemberStruct +# 1535| ValueCategory = prvalue +# 1535| getExpr(): [ReferenceFieldAccess] m +# 1535| Type = [Struct] StructuredBindingDataMemberMemberStruct +# 1535| ValueCategory = prvalue(load) +# 1535| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1535| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1535| ValueCategory = prvalue(load) +# 1535| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1535| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1535| ValueCategory = lvalue +# 1535| getEntryPoint(): [BlockStmt] { ... } +# 1535| getStmt(0): [ReturnStmt] return ... +# 1535| [MoveConstructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct&&) +# 1535| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] StructuredBindingDataMemberStruct && -# 1501| [TopLevelFunction] void data_member_structured_binding() -# 1501| : -# 1501| getEntryPoint(): [BlockStmt] { ... } -# 1502| getStmt(0): [DeclStmt] declaration -# 1502| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 1502| Type = [Struct] StructuredBindingDataMemberStruct -# 1502| getVariable().getInitializer(): [Initializer] initializer for s -# 1502| getExpr(): [ConstructorCall] call to StructuredBindingDataMemberStruct -# 1502| Type = [VoidType] void -# 1502| ValueCategory = prvalue -# 1504| getStmt(1): [BlockStmt] { ... } -# 1505| getStmt(0): [DeclStmt] declaration -# 1505| getDeclarationEntry(0): [VariableDeclarationEntry] definition of (unnamed local variable) -# 1505| Type = [Struct] StructuredBindingDataMemberStruct -# 1505| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) -# 1505| getExpr(): [VariableAccess] s -# 1505| Type = [Struct] StructuredBindingDataMemberStruct -# 1505| ValueCategory = prvalue(load) -# 1505| getDeclarationEntry(1): [VariableDeclarationEntry] definition of i -# 1505| Type = [IntType] int +# 1548| [TopLevelFunction] void data_member_structured_binding() +# 1548| : +# 1548| getEntryPoint(): [BlockStmt] { ... } +# 1549| getStmt(0): [DeclStmt] declaration +# 1549| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 1549| Type = [Struct] StructuredBindingDataMemberStruct +# 1549| getVariable().getInitializer(): [Initializer] initializer for s +# 1549| getExpr(): [ConstructorCall] call to StructuredBindingDataMemberStruct +# 1549| Type = [VoidType] void +# 1549| ValueCategory = prvalue +# 1551| getStmt(1): [BlockStmt] { ... } +# 1552| getStmt(0): [DeclStmt] declaration +# 1552| getDeclarationEntry(0): [VariableDeclarationEntry] definition of (unnamed local variable) +# 1552| Type = [Struct] StructuredBindingDataMemberStruct +# 1552| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) +# 1552| getExpr(): [VariableAccess] s +# 1552| Type = [Struct] StructuredBindingDataMemberStruct +# 1552| ValueCategory = prvalue(load) +# 1552| getDeclarationEntry(1): [VariableDeclarationEntry] definition of i +# 1552| Type = [IntType] int #-----| getVariable().getInitializer(): [Initializer] initializer for i -# 1505| getExpr(): [ValueFieldAccess] i -# 1505| Type = [IntType] int -# 1505| ValueCategory = lvalue -# 1505| getQualifier(): [VariableAccess] (unnamed local variable) -# 1505| Type = [Struct] StructuredBindingDataMemberStruct -# 1505| ValueCategory = lvalue -# 1505| getDeclarationEntry(2): [VariableDeclarationEntry] definition of d -# 1505| Type = [DoubleType] double +# 1552| getExpr(): [ValueFieldAccess] i +# 1552| Type = [IntType] int +# 1552| ValueCategory = lvalue +# 1552| getQualifier(): [VariableAccess] (unnamed local variable) +# 1552| Type = [Struct] StructuredBindingDataMemberStruct +# 1552| ValueCategory = lvalue +# 1552| getDeclarationEntry(2): [VariableDeclarationEntry] definition of d +# 1552| Type = [DoubleType] double #-----| getVariable().getInitializer(): [Initializer] initializer for d -# 1505| getExpr(): [ValueFieldAccess] d -# 1505| Type = [DoubleType] double -# 1505| ValueCategory = lvalue -# 1505| getQualifier(): [VariableAccess] (unnamed local variable) -# 1505| Type = [Struct] StructuredBindingDataMemberStruct -# 1505| ValueCategory = lvalue -# 1505| getDeclarationEntry(3): [VariableDeclarationEntry] definition of b -# 1505| Type = [IntType] unsigned int +# 1552| getExpr(): [ValueFieldAccess] d +# 1552| Type = [DoubleType] double +# 1552| ValueCategory = lvalue +# 1552| getQualifier(): [VariableAccess] (unnamed local variable) +# 1552| Type = [Struct] StructuredBindingDataMemberStruct +# 1552| ValueCategory = lvalue +# 1552| getDeclarationEntry(3): [VariableDeclarationEntry] definition of b +# 1552| Type = [IntType] unsigned int #-----| getVariable().getInitializer(): [Initializer] initializer for b -# 1505| getExpr(): [ValueFieldAccess] b -# 1505| Type = [IntType] unsigned int -# 1505| ValueCategory = lvalue -# 1505| getQualifier(): [VariableAccess] (unnamed local variable) -# 1505| Type = [Struct] StructuredBindingDataMemberStruct -# 1505| ValueCategory = lvalue -# 1505| getDeclarationEntry(4): [VariableDeclarationEntry] definition of r -# 1505| Type = [IntType] int +# 1552| getExpr(): [ValueFieldAccess] b +# 1552| Type = [IntType] unsigned int +# 1552| ValueCategory = lvalue +# 1552| getQualifier(): [VariableAccess] (unnamed local variable) +# 1552| Type = [Struct] StructuredBindingDataMemberStruct +# 1552| ValueCategory = lvalue +# 1552| getDeclarationEntry(4): [VariableDeclarationEntry] definition of r +# 1552| Type = [IntType] int #-----| getVariable().getInitializer(): [Initializer] initializer for r -# 1505| getExpr(): [ValueFieldAccess] r -# 1505| Type = [LValueReferenceType] int & -# 1505| ValueCategory = prvalue(load) -# 1505| getQualifier(): [VariableAccess] (unnamed local variable) -# 1505| Type = [Struct] StructuredBindingDataMemberStruct -# 1505| ValueCategory = lvalue -# 1505| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1505| Type = [IntType] int -# 1505| ValueCategory = lvalue -# 1505| getDeclarationEntry(5): [VariableDeclarationEntry] definition of p -# 1505| Type = [IntPointerType] int * +# 1552| getExpr(): [ValueFieldAccess] r +# 1552| Type = [LValueReferenceType] int & +# 1552| ValueCategory = prvalue(load) +# 1552| getQualifier(): [VariableAccess] (unnamed local variable) +# 1552| Type = [Struct] StructuredBindingDataMemberStruct +# 1552| ValueCategory = lvalue +# 1552| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1552| Type = [IntType] int +# 1552| ValueCategory = lvalue +# 1552| getDeclarationEntry(5): [VariableDeclarationEntry] definition of p +# 1552| Type = [IntPointerType] int * #-----| getVariable().getInitializer(): [Initializer] initializer for p -# 1505| getExpr(): [ValueFieldAccess] p -# 1505| Type = [IntPointerType] int * -# 1505| ValueCategory = lvalue -# 1505| getQualifier(): [VariableAccess] (unnamed local variable) -# 1505| Type = [Struct] StructuredBindingDataMemberStruct -# 1505| ValueCategory = lvalue -# 1505| getDeclarationEntry(6): [VariableDeclarationEntry] definition of xs -# 1505| Type = [CTypedefType,NestedTypedefType] ArrayType +# 1552| getExpr(): [ValueFieldAccess] p +# 1552| Type = [IntPointerType] int * +# 1552| ValueCategory = lvalue +# 1552| getQualifier(): [VariableAccess] (unnamed local variable) +# 1552| Type = [Struct] StructuredBindingDataMemberStruct +# 1552| ValueCategory = lvalue +# 1552| getDeclarationEntry(6): [VariableDeclarationEntry] definition of xs +# 1552| Type = [CTypedefType,NestedTypedefType] ArrayType #-----| getVariable().getInitializer(): [Initializer] initializer for xs -# 1505| getExpr(): [ValueFieldAccess] xs -# 1505| Type = [CTypedefType,NestedTypedefType] ArrayType -# 1505| ValueCategory = lvalue -# 1505| getQualifier(): [VariableAccess] (unnamed local variable) -# 1505| Type = [Struct] StructuredBindingDataMemberStruct -# 1505| ValueCategory = lvalue -# 1505| getDeclarationEntry(7): [VariableDeclarationEntry] definition of r_alt -# 1505| Type = [IntType] int +# 1552| getExpr(): [ValueFieldAccess] xs +# 1552| Type = [CTypedefType,NestedTypedefType] ArrayType +# 1552| ValueCategory = lvalue +# 1552| getQualifier(): [VariableAccess] (unnamed local variable) +# 1552| Type = [Struct] StructuredBindingDataMemberStruct +# 1552| ValueCategory = lvalue +# 1552| getDeclarationEntry(7): [VariableDeclarationEntry] definition of r_alt +# 1552| Type = [IntType] int #-----| getVariable().getInitializer(): [Initializer] initializer for r_alt -# 1505| getExpr(): [ValueFieldAccess] r_alt -# 1505| Type = [CTypedefType,NestedTypedefType] RefType -# 1505| ValueCategory = prvalue(load) -# 1505| getQualifier(): [VariableAccess] (unnamed local variable) -# 1505| Type = [Struct] StructuredBindingDataMemberStruct -# 1505| ValueCategory = lvalue -# 1505| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1505| Type = [IntType] int -# 1505| ValueCategory = lvalue -# 1505| getDeclarationEntry(8): [VariableDeclarationEntry] definition of m -# 1505| Type = [Struct] StructuredBindingDataMemberMemberStruct +# 1552| getExpr(): [ValueFieldAccess] r_alt +# 1552| Type = [CTypedefType,NestedTypedefType] RefType +# 1552| ValueCategory = prvalue(load) +# 1552| getQualifier(): [VariableAccess] (unnamed local variable) +# 1552| Type = [Struct] StructuredBindingDataMemberStruct +# 1552| ValueCategory = lvalue +# 1552| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1552| Type = [IntType] int +# 1552| ValueCategory = lvalue +# 1552| getDeclarationEntry(8): [VariableDeclarationEntry] definition of m +# 1552| Type = [Struct] StructuredBindingDataMemberMemberStruct #-----| getVariable().getInitializer(): [Initializer] initializer for m -# 1505| getExpr(): [ValueFieldAccess] m -# 1505| Type = [Struct] StructuredBindingDataMemberMemberStruct -# 1505| ValueCategory = lvalue -# 1505| getQualifier(): [VariableAccess] (unnamed local variable) -# 1505| Type = [Struct] StructuredBindingDataMemberStruct -# 1505| ValueCategory = lvalue -# 1506| getStmt(1): [ExprStmt] ExprStmt -# 1506| getExpr(): [AssignExpr] ... = ... -# 1506| Type = [DoubleType] double -# 1506| ValueCategory = lvalue -# 1506| getLValue(): [VariableAccess] d -# 1506| Type = [DoubleType] double -# 1506| ValueCategory = lvalue -# 1506| getRValue(): [Literal] 4.0 -# 1506| Type = [DoubleType] double -# 1506| Value = [Literal] 4.0 -# 1506| ValueCategory = prvalue -# 1507| getStmt(2): [DeclStmt] declaration -# 1507| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd -# 1507| Type = [LValueReferenceType] double & -# 1507| getVariable().getInitializer(): [Initializer] initializer for rd -# 1507| getExpr(): [VariableAccess] d -# 1507| Type = [DoubleType] double -# 1507| ValueCategory = lvalue -# 1507| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1507| Type = [LValueReferenceType] double & -# 1507| ValueCategory = prvalue -# 1508| getStmt(3): [DeclStmt] declaration -# 1508| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1508| Type = [IntType] int -# 1508| getVariable().getInitializer(): [Initializer] initializer for v -# 1508| getExpr(): [VariableAccess] i -# 1508| Type = [IntType] int -# 1508| ValueCategory = prvalue(load) -# 1509| getStmt(4): [ExprStmt] ExprStmt -# 1509| getExpr(): [AssignExpr] ... = ... -# 1509| Type = [IntType] int -# 1509| ValueCategory = lvalue -# 1509| getLValue(): [VariableAccess] r -# 1509| Type = [IntType] int -# 1509| ValueCategory = lvalue -# 1509| getRValue(): [Literal] 5 -# 1509| Type = [IntType] int -# 1509| Value = [Literal] 5 -# 1509| ValueCategory = prvalue -# 1510| getStmt(5): [ExprStmt] ExprStmt -# 1510| getExpr(): [AssignExpr] ... = ... -# 1510| Type = [IntType] int -# 1510| ValueCategory = lvalue -# 1510| getLValue(): [PointerDereferenceExpr] * ... -# 1510| Type = [IntType] int -# 1510| ValueCategory = lvalue -# 1510| getOperand(): [VariableAccess] p -# 1510| Type = [IntPointerType] int * -# 1510| ValueCategory = prvalue(load) -# 1510| getRValue(): [Literal] 6 -# 1510| Type = [IntType] int -# 1510| Value = [Literal] 6 -# 1510| ValueCategory = prvalue -# 1511| getStmt(6): [DeclStmt] declaration -# 1511| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr -# 1511| Type = [LValueReferenceType] int & -# 1511| getVariable().getInitializer(): [Initializer] initializer for rr -# 1511| getExpr(): [VariableAccess] r -# 1511| Type = [IntType] int -# 1511| ValueCategory = lvalue -# 1511| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1511| Type = [LValueReferenceType] int & -# 1511| ValueCategory = prvalue -# 1512| getStmt(7): [DeclStmt] declaration -# 1512| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pr -# 1512| Type = [IntPointerType] int * -# 1512| getVariable().getInitializer(): [Initializer] initializer for pr -# 1512| getExpr(): [AddressOfExpr] & ... -# 1512| Type = [IntPointerType] int * -# 1512| ValueCategory = prvalue -# 1512| getOperand(): [VariableAccess] r -# 1512| Type = [IntType] int -# 1512| ValueCategory = lvalue -# 1513| getStmt(8): [DeclStmt] declaration -# 1513| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w -# 1513| Type = [IntType] int -# 1513| getVariable().getInitializer(): [Initializer] initializer for w -# 1513| getExpr(): [VariableAccess] r -# 1513| Type = [IntType] int -# 1513| ValueCategory = prvalue(load) -# 1516| getStmt(2): [BlockStmt] { ... } -# 1517| getStmt(0): [DeclStmt] declaration -# 1517| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable -# 1517| Type = [Struct] StructuredBindingDataMemberStruct -# 1517| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable -# 1517| getExpr(): [VariableAccess] s -# 1517| Type = [Struct] StructuredBindingDataMemberStruct -# 1517| ValueCategory = prvalue(load) -# 1518| getStmt(1): [DeclStmt] declaration -# 1518| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i -# 1518| Type = [LValueReferenceType] int & -# 1518| getVariable().getInitializer(): [Initializer] initializer for i -# 1518| getExpr(): [ValueFieldAccess] i -# 1518| Type = [IntType] int -# 1518| ValueCategory = lvalue -# 1518| getQualifier(): [VariableAccess] unnamed_local_variable -# 1518| Type = [Struct] StructuredBindingDataMemberStruct -# 1518| ValueCategory = lvalue -# 1518| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1518| Type = [LValueReferenceType] int & -# 1518| ValueCategory = prvalue -# 1519| getStmt(2): [DeclStmt] declaration -# 1519| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 1519| Type = [LValueReferenceType] double & -# 1519| getVariable().getInitializer(): [Initializer] initializer for d -# 1519| getExpr(): [ValueFieldAccess] d -# 1519| Type = [DoubleType] double -# 1519| ValueCategory = lvalue -# 1519| getQualifier(): [VariableAccess] unnamed_local_variable -# 1519| Type = [Struct] StructuredBindingDataMemberStruct -# 1519| ValueCategory = lvalue -# 1519| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1519| Type = [LValueReferenceType] double & -# 1519| ValueCategory = prvalue -# 1521| getStmt(3): [DeclStmt] declaration -# 1521| getDeclarationEntry(0): [VariableDeclarationEntry] definition of r -# 1521| Type = [LValueReferenceType] int & -# 1521| getVariable().getInitializer(): [Initializer] initializer for r -# 1521| getExpr(): [ValueFieldAccess] r -# 1521| Type = [LValueReferenceType] int & -# 1521| ValueCategory = prvalue(load) -# 1521| getQualifier(): [VariableAccess] unnamed_local_variable -# 1521| Type = [Struct] StructuredBindingDataMemberStruct -# 1521| ValueCategory = lvalue -# 1521| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1521| Type = [LValueReferenceType] int & -# 1521| ValueCategory = prvalue -# 1521| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1521| Type = [IntType] int -# 1521| ValueCategory = lvalue -# 1522| getStmt(4): [DeclStmt] declaration -# 1522| getDeclarationEntry(0): [VariableDeclarationEntry] definition of p -# 1522| Type = [LValueReferenceType] int *& -# 1522| getVariable().getInitializer(): [Initializer] initializer for p -# 1522| getExpr(): [ValueFieldAccess] p -# 1522| Type = [IntPointerType] int * -# 1522| ValueCategory = lvalue -# 1522| getQualifier(): [VariableAccess] unnamed_local_variable -# 1522| Type = [Struct] StructuredBindingDataMemberStruct -# 1522| ValueCategory = lvalue -# 1522| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1522| Type = [LValueReferenceType] int *& -# 1522| ValueCategory = prvalue -# 1523| getStmt(5): [ExprStmt] ExprStmt -# 1523| getExpr(): [AssignExpr] ... = ... -# 1523| Type = [DoubleType] double -# 1523| ValueCategory = lvalue -# 1523| getLValue(): [VariableAccess] d -# 1523| Type = [LValueReferenceType] double & -# 1523| ValueCategory = prvalue(load) -# 1523| getRValue(): [Literal] 4.0 -# 1523| Type = [DoubleType] double -# 1523| Value = [Literal] 4.0 -# 1523| ValueCategory = prvalue -# 1523| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1523| Type = [DoubleType] double -# 1523| ValueCategory = lvalue -# 1524| getStmt(6): [DeclStmt] declaration -# 1524| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd -# 1524| Type = [LValueReferenceType] double & -# 1524| getVariable().getInitializer(): [Initializer] initializer for rd -# 1524| getExpr(): [VariableAccess] d -# 1524| Type = [LValueReferenceType] double & -# 1524| ValueCategory = prvalue(load) -# 1524| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1524| Type = [LValueReferenceType] double & -# 1524| ValueCategory = prvalue -# 1524| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1524| Type = [DoubleType] double -# 1524| ValueCategory = lvalue -# 1525| getStmt(7): [DeclStmt] declaration -# 1525| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1525| Type = [IntType] int -# 1525| getVariable().getInitializer(): [Initializer] initializer for v -# 1525| getExpr(): [VariableAccess] i -# 1525| Type = [LValueReferenceType] int & -# 1525| ValueCategory = prvalue(load) -# 1525| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1525| Type = [IntType] int -# 1525| ValueCategory = prvalue(load) -# 1526| getStmt(8): [ExprStmt] ExprStmt -# 1526| getExpr(): [AssignExpr] ... = ... -# 1526| Type = [IntType] int -# 1526| ValueCategory = lvalue -# 1526| getLValue(): [VariableAccess] r -# 1526| Type = [LValueReferenceType] int & -# 1526| ValueCategory = prvalue(load) -# 1526| getRValue(): [Literal] 5 -# 1526| Type = [IntType] int -# 1526| Value = [Literal] 5 -# 1526| ValueCategory = prvalue -# 1526| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1526| Type = [IntType] int -# 1526| ValueCategory = lvalue -# 1527| getStmt(9): [ExprStmt] ExprStmt -# 1527| getExpr(): [AssignExpr] ... = ... -# 1527| Type = [IntType] int -# 1527| ValueCategory = lvalue -# 1527| getLValue(): [PointerDereferenceExpr] * ... -# 1527| Type = [IntType] int -# 1527| ValueCategory = lvalue -# 1527| getOperand(): [VariableAccess] p -# 1527| Type = [LValueReferenceType] int *& -# 1527| ValueCategory = prvalue(load) -# 1527| getOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1527| Type = [IntPointerType] int * -# 1527| ValueCategory = prvalue(load) -# 1527| getRValue(): [Literal] 6 -# 1527| Type = [IntType] int -# 1527| Value = [Literal] 6 -# 1527| ValueCategory = prvalue -# 1528| getStmt(10): [DeclStmt] declaration -# 1528| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr -# 1528| Type = [LValueReferenceType] int & -# 1528| getVariable().getInitializer(): [Initializer] initializer for rr -# 1528| getExpr(): [VariableAccess] r -# 1528| Type = [LValueReferenceType] int & -# 1528| ValueCategory = prvalue(load) -# 1528| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1528| Type = [LValueReferenceType] int & -# 1528| ValueCategory = prvalue -# 1528| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1528| Type = [IntType] int -# 1528| ValueCategory = lvalue -# 1529| getStmt(11): [DeclStmt] declaration -# 1529| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pr -# 1529| Type = [IntPointerType] int * -# 1529| getVariable().getInitializer(): [Initializer] initializer for pr -# 1529| getExpr(): [AddressOfExpr] & ... -# 1529| Type = [IntPointerType] int * -# 1529| ValueCategory = prvalue -# 1529| getOperand(): [VariableAccess] r -# 1529| Type = [LValueReferenceType] int & -# 1529| ValueCategory = prvalue(load) -# 1529| getOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1529| Type = [IntType] int -# 1529| ValueCategory = lvalue -# 1530| getStmt(12): [DeclStmt] declaration -# 1530| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w -# 1530| Type = [IntType] int -# 1530| getVariable().getInitializer(): [Initializer] initializer for w -# 1530| getExpr(): [VariableAccess] r -# 1530| Type = [LValueReferenceType] int & -# 1530| ValueCategory = prvalue(load) -# 1530| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1530| Type = [IntType] int -# 1530| ValueCategory = prvalue(load) -# 1532| getStmt(3): [ReturnStmt] return ... -# 1541| [CopyAssignmentOperator] StructuredBindingTupleRefGet& StructuredBindingTupleRefGet::operator=(StructuredBindingTupleRefGet const&) -# 1541| : +# 1552| getExpr(): [ValueFieldAccess] m +# 1552| Type = [Struct] StructuredBindingDataMemberMemberStruct +# 1552| ValueCategory = lvalue +# 1552| getQualifier(): [VariableAccess] (unnamed local variable) +# 1552| Type = [Struct] StructuredBindingDataMemberStruct +# 1552| ValueCategory = lvalue +# 1553| getStmt(1): [ExprStmt] ExprStmt +# 1553| getExpr(): [AssignExpr] ... = ... +# 1553| Type = [DoubleType] double +# 1553| ValueCategory = lvalue +# 1553| getLValue(): [VariableAccess] d +# 1553| Type = [DoubleType] double +# 1553| ValueCategory = lvalue +# 1553| getRValue(): [Literal] 4.0 +# 1553| Type = [DoubleType] double +# 1553| Value = [Literal] 4.0 +# 1553| ValueCategory = prvalue +# 1554| getStmt(2): [DeclStmt] declaration +# 1554| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd +# 1554| Type = [LValueReferenceType] double & +# 1554| getVariable().getInitializer(): [Initializer] initializer for rd +# 1554| getExpr(): [VariableAccess] d +# 1554| Type = [DoubleType] double +# 1554| ValueCategory = lvalue +# 1554| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1554| Type = [LValueReferenceType] double & +# 1554| ValueCategory = prvalue +# 1555| getStmt(3): [DeclStmt] declaration +# 1555| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1555| Type = [IntType] int +# 1555| getVariable().getInitializer(): [Initializer] initializer for v +# 1555| getExpr(): [VariableAccess] i +# 1555| Type = [IntType] int +# 1555| ValueCategory = prvalue(load) +# 1556| getStmt(4): [ExprStmt] ExprStmt +# 1556| getExpr(): [AssignExpr] ... = ... +# 1556| Type = [IntType] int +# 1556| ValueCategory = lvalue +# 1556| getLValue(): [VariableAccess] r +# 1556| Type = [IntType] int +# 1556| ValueCategory = lvalue +# 1556| getRValue(): [Literal] 5 +# 1556| Type = [IntType] int +# 1556| Value = [Literal] 5 +# 1556| ValueCategory = prvalue +# 1557| getStmt(5): [ExprStmt] ExprStmt +# 1557| getExpr(): [AssignExpr] ... = ... +# 1557| Type = [IntType] int +# 1557| ValueCategory = lvalue +# 1557| getLValue(): [PointerDereferenceExpr] * ... +# 1557| Type = [IntType] int +# 1557| ValueCategory = lvalue +# 1557| getOperand(): [VariableAccess] p +# 1557| Type = [IntPointerType] int * +# 1557| ValueCategory = prvalue(load) +# 1557| getRValue(): [Literal] 6 +# 1557| Type = [IntType] int +# 1557| Value = [Literal] 6 +# 1557| ValueCategory = prvalue +# 1558| getStmt(6): [DeclStmt] declaration +# 1558| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr +# 1558| Type = [LValueReferenceType] int & +# 1558| getVariable().getInitializer(): [Initializer] initializer for rr +# 1558| getExpr(): [VariableAccess] r +# 1558| Type = [IntType] int +# 1558| ValueCategory = lvalue +# 1558| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1558| Type = [LValueReferenceType] int & +# 1558| ValueCategory = prvalue +# 1559| getStmt(7): [DeclStmt] declaration +# 1559| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pr +# 1559| Type = [IntPointerType] int * +# 1559| getVariable().getInitializer(): [Initializer] initializer for pr +# 1559| getExpr(): [AddressOfExpr] & ... +# 1559| Type = [IntPointerType] int * +# 1559| ValueCategory = prvalue +# 1559| getOperand(): [VariableAccess] r +# 1559| Type = [IntType] int +# 1559| ValueCategory = lvalue +# 1560| getStmt(8): [DeclStmt] declaration +# 1560| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1560| Type = [IntType] int +# 1560| getVariable().getInitializer(): [Initializer] initializer for w +# 1560| getExpr(): [VariableAccess] r +# 1560| Type = [IntType] int +# 1560| ValueCategory = prvalue(load) +# 1563| getStmt(2): [BlockStmt] { ... } +# 1564| getStmt(0): [DeclStmt] declaration +# 1564| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable +# 1564| Type = [Struct] StructuredBindingDataMemberStruct +# 1564| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable +# 1564| getExpr(): [VariableAccess] s +# 1564| Type = [Struct] StructuredBindingDataMemberStruct +# 1564| ValueCategory = prvalue(load) +# 1565| getStmt(1): [DeclStmt] declaration +# 1565| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1565| Type = [LValueReferenceType] int & +# 1565| getVariable().getInitializer(): [Initializer] initializer for i +# 1565| getExpr(): [ValueFieldAccess] i +# 1565| Type = [IntType] int +# 1565| ValueCategory = lvalue +# 1565| getQualifier(): [VariableAccess] unnamed_local_variable +# 1565| Type = [Struct] StructuredBindingDataMemberStruct +# 1565| ValueCategory = lvalue +# 1565| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1565| Type = [LValueReferenceType] int & +# 1565| ValueCategory = prvalue +# 1566| getStmt(2): [DeclStmt] declaration +# 1566| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d +# 1566| Type = [LValueReferenceType] double & +# 1566| getVariable().getInitializer(): [Initializer] initializer for d +# 1566| getExpr(): [ValueFieldAccess] d +# 1566| Type = [DoubleType] double +# 1566| ValueCategory = lvalue +# 1566| getQualifier(): [VariableAccess] unnamed_local_variable +# 1566| Type = [Struct] StructuredBindingDataMemberStruct +# 1566| ValueCategory = lvalue +# 1566| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1566| Type = [LValueReferenceType] double & +# 1566| ValueCategory = prvalue +# 1568| getStmt(3): [DeclStmt] declaration +# 1568| getDeclarationEntry(0): [VariableDeclarationEntry] definition of r +# 1568| Type = [LValueReferenceType] int & +# 1568| getVariable().getInitializer(): [Initializer] initializer for r +# 1568| getExpr(): [ValueFieldAccess] r +# 1568| Type = [LValueReferenceType] int & +# 1568| ValueCategory = prvalue(load) +# 1568| getQualifier(): [VariableAccess] unnamed_local_variable +# 1568| Type = [Struct] StructuredBindingDataMemberStruct +# 1568| ValueCategory = lvalue +# 1568| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1568| Type = [LValueReferenceType] int & +# 1568| ValueCategory = prvalue +# 1568| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1568| Type = [IntType] int +# 1568| ValueCategory = lvalue +# 1569| getStmt(4): [DeclStmt] declaration +# 1569| getDeclarationEntry(0): [VariableDeclarationEntry] definition of p +# 1569| Type = [LValueReferenceType] int *& +# 1569| getVariable().getInitializer(): [Initializer] initializer for p +# 1569| getExpr(): [ValueFieldAccess] p +# 1569| Type = [IntPointerType] int * +# 1569| ValueCategory = lvalue +# 1569| getQualifier(): [VariableAccess] unnamed_local_variable +# 1569| Type = [Struct] StructuredBindingDataMemberStruct +# 1569| ValueCategory = lvalue +# 1569| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1569| Type = [LValueReferenceType] int *& +# 1569| ValueCategory = prvalue +# 1570| getStmt(5): [ExprStmt] ExprStmt +# 1570| getExpr(): [AssignExpr] ... = ... +# 1570| Type = [DoubleType] double +# 1570| ValueCategory = lvalue +# 1570| getLValue(): [VariableAccess] d +# 1570| Type = [LValueReferenceType] double & +# 1570| ValueCategory = prvalue(load) +# 1570| getRValue(): [Literal] 4.0 +# 1570| Type = [DoubleType] double +# 1570| Value = [Literal] 4.0 +# 1570| ValueCategory = prvalue +# 1570| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1570| Type = [DoubleType] double +# 1570| ValueCategory = lvalue +# 1571| getStmt(6): [DeclStmt] declaration +# 1571| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd +# 1571| Type = [LValueReferenceType] double & +# 1571| getVariable().getInitializer(): [Initializer] initializer for rd +# 1571| getExpr(): [VariableAccess] d +# 1571| Type = [LValueReferenceType] double & +# 1571| ValueCategory = prvalue(load) +# 1571| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1571| Type = [LValueReferenceType] double & +# 1571| ValueCategory = prvalue +# 1571| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1571| Type = [DoubleType] double +# 1571| ValueCategory = lvalue +# 1572| getStmt(7): [DeclStmt] declaration +# 1572| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1572| Type = [IntType] int +# 1572| getVariable().getInitializer(): [Initializer] initializer for v +# 1572| getExpr(): [VariableAccess] i +# 1572| Type = [LValueReferenceType] int & +# 1572| ValueCategory = prvalue(load) +# 1572| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1572| Type = [IntType] int +# 1572| ValueCategory = prvalue(load) +# 1573| getStmt(8): [ExprStmt] ExprStmt +# 1573| getExpr(): [AssignExpr] ... = ... +# 1573| Type = [IntType] int +# 1573| ValueCategory = lvalue +# 1573| getLValue(): [VariableAccess] r +# 1573| Type = [LValueReferenceType] int & +# 1573| ValueCategory = prvalue(load) +# 1573| getRValue(): [Literal] 5 +# 1573| Type = [IntType] int +# 1573| Value = [Literal] 5 +# 1573| ValueCategory = prvalue +# 1573| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1573| Type = [IntType] int +# 1573| ValueCategory = lvalue +# 1574| getStmt(9): [ExprStmt] ExprStmt +# 1574| getExpr(): [AssignExpr] ... = ... +# 1574| Type = [IntType] int +# 1574| ValueCategory = lvalue +# 1574| getLValue(): [PointerDereferenceExpr] * ... +# 1574| Type = [IntType] int +# 1574| ValueCategory = lvalue +# 1574| getOperand(): [VariableAccess] p +# 1574| Type = [LValueReferenceType] int *& +# 1574| ValueCategory = prvalue(load) +# 1574| getOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1574| Type = [IntPointerType] int * +# 1574| ValueCategory = prvalue(load) +# 1574| getRValue(): [Literal] 6 +# 1574| Type = [IntType] int +# 1574| Value = [Literal] 6 +# 1574| ValueCategory = prvalue +# 1575| getStmt(10): [DeclStmt] declaration +# 1575| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr +# 1575| Type = [LValueReferenceType] int & +# 1575| getVariable().getInitializer(): [Initializer] initializer for rr +# 1575| getExpr(): [VariableAccess] r +# 1575| Type = [LValueReferenceType] int & +# 1575| ValueCategory = prvalue(load) +# 1575| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1575| Type = [LValueReferenceType] int & +# 1575| ValueCategory = prvalue +# 1575| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1575| Type = [IntType] int +# 1575| ValueCategory = lvalue +# 1576| getStmt(11): [DeclStmt] declaration +# 1576| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pr +# 1576| Type = [IntPointerType] int * +# 1576| getVariable().getInitializer(): [Initializer] initializer for pr +# 1576| getExpr(): [AddressOfExpr] & ... +# 1576| Type = [IntPointerType] int * +# 1576| ValueCategory = prvalue +# 1576| getOperand(): [VariableAccess] r +# 1576| Type = [LValueReferenceType] int & +# 1576| ValueCategory = prvalue(load) +# 1576| getOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1576| Type = [IntType] int +# 1576| ValueCategory = lvalue +# 1577| getStmt(12): [DeclStmt] declaration +# 1577| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1577| Type = [IntType] int +# 1577| getVariable().getInitializer(): [Initializer] initializer for w +# 1577| getExpr(): [VariableAccess] r +# 1577| Type = [LValueReferenceType] int & +# 1577| ValueCategory = prvalue(load) +# 1577| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1577| Type = [IntType] int +# 1577| ValueCategory = prvalue(load) +# 1579| getStmt(3): [ReturnStmt] return ... +# 1588| [CopyAssignmentOperator] StructuredBindingTupleRefGet& StructuredBindingTupleRefGet::operator=(StructuredBindingTupleRefGet const&) +# 1588| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & -# 1541| [Constructor] void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet() -# 1541| : -# 1541| : -# 1541| getInitializer(0): [ConstructorFieldInit] constructor init of field i -# 1541| Type = [IntType] int -# 1541| ValueCategory = prvalue -# 1541| getInitializer(1): [ConstructorFieldInit] constructor init of field d -# 1541| Type = [DoubleType] double -# 1541| ValueCategory = prvalue -# 1541| getInitializer(2): [ConstructorFieldInit] constructor init of field r -# 1541| Type = [LValueReferenceType] int & -# 1541| ValueCategory = prvalue -# 1541| getEntryPoint(): [BlockStmt] { ... } -# 1541| getStmt(0): [ReturnStmt] return ... -# 1541| [CopyConstructor] void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet const&) -# 1541| : +# 1588| [Constructor] void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet() +# 1588| : +# 1588| : +# 1588| getInitializer(0): [ConstructorFieldInit] constructor init of field i +# 1588| Type = [IntType] int +# 1588| ValueCategory = prvalue +# 1588| getInitializer(1): [ConstructorFieldInit] constructor init of field d +# 1588| Type = [DoubleType] double +# 1588| ValueCategory = prvalue +# 1588| getInitializer(2): [ConstructorFieldInit] constructor init of field r +# 1588| Type = [LValueReferenceType] int & +# 1588| ValueCategory = prvalue +# 1588| getEntryPoint(): [BlockStmt] { ... } +# 1588| getStmt(0): [ReturnStmt] return ... +# 1588| [CopyConstructor] void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet const&) +# 1588| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & -# 1541| : -# 1541| getInitializer(0): [ConstructorFieldInit] constructor init of field i -# 1541| Type = [IntType] int -# 1541| ValueCategory = prvalue -# 1541| getExpr(): [ReferenceFieldAccess] i -# 1541| Type = [IntType] int -# 1541| ValueCategory = prvalue(load) -# 1541| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1541| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & -# 1541| ValueCategory = prvalue(load) -# 1541| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1541| Type = [SpecifiedType] const StructuredBindingTupleRefGet -# 1541| ValueCategory = lvalue -# 1541| getInitializer(1): [ConstructorFieldInit] constructor init of field d -# 1541| Type = [DoubleType] double -# 1541| ValueCategory = prvalue -# 1541| getExpr(): [ReferenceFieldAccess] d -# 1541| Type = [DoubleType] double -# 1541| ValueCategory = prvalue(load) -# 1541| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1541| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & -# 1541| ValueCategory = prvalue(load) -# 1541| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1541| Type = [SpecifiedType] const StructuredBindingTupleRefGet -# 1541| ValueCategory = lvalue -# 1541| getInitializer(2): [ConstructorFieldInit] constructor init of field r -# 1541| Type = [LValueReferenceType] int & -# 1541| ValueCategory = prvalue -# 1541| getExpr(): [ReferenceFieldAccess] r -# 1541| Type = [LValueReferenceType] int & -# 1541| ValueCategory = prvalue(load) -# 1541| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1541| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & -# 1541| ValueCategory = prvalue(load) -# 1541| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1541| Type = [SpecifiedType] const StructuredBindingTupleRefGet -# 1541| ValueCategory = lvalue -# 1541| getEntryPoint(): [BlockStmt] { ... } -# 1541| getStmt(0): [ReturnStmt] return ... -# 1541| [MoveConstructor] void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet&&) -# 1541| : +# 1588| : +# 1588| getInitializer(0): [ConstructorFieldInit] constructor init of field i +# 1588| Type = [IntType] int +# 1588| ValueCategory = prvalue +# 1588| getExpr(): [ReferenceFieldAccess] i +# 1588| Type = [IntType] int +# 1588| ValueCategory = prvalue(load) +# 1588| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1588| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & +# 1588| ValueCategory = prvalue(load) +# 1588| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1588| Type = [SpecifiedType] const StructuredBindingTupleRefGet +# 1588| ValueCategory = lvalue +# 1588| getInitializer(1): [ConstructorFieldInit] constructor init of field d +# 1588| Type = [DoubleType] double +# 1588| ValueCategory = prvalue +# 1588| getExpr(): [ReferenceFieldAccess] d +# 1588| Type = [DoubleType] double +# 1588| ValueCategory = prvalue(load) +# 1588| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1588| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & +# 1588| ValueCategory = prvalue(load) +# 1588| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1588| Type = [SpecifiedType] const StructuredBindingTupleRefGet +# 1588| ValueCategory = lvalue +# 1588| getInitializer(2): [ConstructorFieldInit] constructor init of field r +# 1588| Type = [LValueReferenceType] int & +# 1588| ValueCategory = prvalue +# 1588| getExpr(): [ReferenceFieldAccess] r +# 1588| Type = [LValueReferenceType] int & +# 1588| ValueCategory = prvalue(load) +# 1588| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1588| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & +# 1588| ValueCategory = prvalue(load) +# 1588| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1588| Type = [SpecifiedType] const StructuredBindingTupleRefGet +# 1588| ValueCategory = lvalue +# 1588| getEntryPoint(): [BlockStmt] { ... } +# 1588| getStmt(0): [ReturnStmt] return ... +# 1588| [MoveConstructor] void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet&&) +# 1588| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] StructuredBindingTupleRefGet && -# 1547| [MemberFunction,TemplateFunction] type& StructuredBindingTupleRefGet::get() -# 1547| : -# 1551| [CopyAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size const&) -# 1551| : +# 1594| [MemberFunction,TemplateFunction] type& StructuredBindingTupleRefGet::get() +# 1594| : +# 1598| [CopyAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size const&) +# 1598| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_size & -# 1551| [MoveAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size&&) -# 1551| : +# 1598| [MoveAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size&&) +# 1598| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_size && -# 1556| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) -# 1556| : +# 1603| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) +# 1603| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<0, StructuredBindingTupleRefGet> & -# 1556| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) -# 1556| : +# 1603| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) +# 1603| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<0, StructuredBindingTupleRefGet> && -# 1560| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) -# 1560| : +# 1607| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) +# 1607| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<1, StructuredBindingTupleRefGet> & -# 1560| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) -# 1560| : +# 1607| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) +# 1607| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<1, StructuredBindingTupleRefGet> && -# 1564| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) -# 1564| : +# 1611| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) +# 1611| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<2, StructuredBindingTupleRefGet> & -# 1564| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) -# 1564| : +# 1611| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) +# 1611| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<2, StructuredBindingTupleRefGet> && -# 1569| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type& StructuredBindingTupleRefGet::get() -# 1569| : -# 1569| getEntryPoint(): [BlockStmt] { ... } -# 1570| getStmt(0): [ReturnStmt] return ... -# 1570| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] i -# 1570| Type = [IntType] int -# 1570| ValueCategory = lvalue -# 1570| getQualifier(): [ThisExpr] this -# 1570| Type = [PointerType] StructuredBindingTupleRefGet * -# 1570| ValueCategory = prvalue(load) +# 1616| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type& StructuredBindingTupleRefGet::get() +# 1616| : +# 1616| getEntryPoint(): [BlockStmt] { ... } +# 1617| getStmt(0): [ReturnStmt] return ... +# 1617| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] i +# 1617| Type = [IntType] int +# 1617| ValueCategory = lvalue +# 1617| getQualifier(): [ThisExpr] this +# 1617| Type = [PointerType] StructuredBindingTupleRefGet * +# 1617| ValueCategory = prvalue(load) #-----| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) #-----| Type = [LValueReferenceType] int & #-----| ValueCategory = prvalue -# 1573| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type& StructuredBindingTupleRefGet::get() -# 1573| : -# 1573| getEntryPoint(): [BlockStmt] { ... } -# 1574| getStmt(0): [ReturnStmt] return ... -# 1574| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] d -# 1574| Type = [DoubleType] double -# 1574| ValueCategory = lvalue -# 1574| getQualifier(): [ThisExpr] this -# 1574| Type = [PointerType] StructuredBindingTupleRefGet * -# 1574| ValueCategory = prvalue(load) +# 1620| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type& StructuredBindingTupleRefGet::get() +# 1620| : +# 1620| getEntryPoint(): [BlockStmt] { ... } +# 1621| getStmt(0): [ReturnStmt] return ... +# 1621| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] d +# 1621| Type = [DoubleType] double +# 1621| ValueCategory = lvalue +# 1621| getQualifier(): [ThisExpr] this +# 1621| Type = [PointerType] StructuredBindingTupleRefGet * +# 1621| ValueCategory = prvalue(load) #-----| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) #-----| Type = [LValueReferenceType] double & #-----| ValueCategory = prvalue -# 1577| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleRefGet::get() -# 1577| : -# 1577| getEntryPoint(): [BlockStmt] { ... } -# 1578| getStmt(0): [ReturnStmt] return ... -# 1578| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] r -# 1578| Type = [LValueReferenceType] int & -# 1578| ValueCategory = prvalue(load) -# 1578| getQualifier(): [ThisExpr] this -# 1578| Type = [PointerType] StructuredBindingTupleRefGet * -# 1578| ValueCategory = prvalue(load) -# 1578| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1578| Type = [LValueReferenceType] int & -# 1578| ValueCategory = prvalue -# 1578| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1578| Type = [IntType] int -# 1578| ValueCategory = lvalue -# 1581| [TopLevelFunction] void tuple_structured_binding_ref_get() -# 1581| : -# 1581| getEntryPoint(): [BlockStmt] { ... } -# 1582| getStmt(0): [DeclStmt] declaration -# 1582| getDeclarationEntry(0): [VariableDeclarationEntry] definition of t -# 1582| Type = [Struct] StructuredBindingTupleRefGet -# 1582| getVariable().getInitializer(): [Initializer] initializer for t -# 1582| getExpr(): [ConstructorCall] call to StructuredBindingTupleRefGet -# 1582| Type = [VoidType] void -# 1582| ValueCategory = prvalue -# 1584| getStmt(1): [BlockStmt] { ... } -# 1585| getStmt(0): [DeclStmt] declaration -# 1585| getDeclarationEntry(0): [VariableDeclarationEntry] definition of (unnamed local variable) -# 1585| Type = [Struct] StructuredBindingTupleRefGet -# 1585| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) -# 1585| getExpr(): [VariableAccess] t -# 1585| Type = [Struct] StructuredBindingTupleRefGet -# 1585| ValueCategory = prvalue(load) -# 1585| getDeclarationEntry(1): [VariableDeclarationEntry] definition of i -# 1585| Type = [LValueReferenceType] type & +# 1624| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleRefGet::get() +# 1624| : +# 1624| getEntryPoint(): [BlockStmt] { ... } +# 1625| getStmt(0): [ReturnStmt] return ... +# 1625| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] r +# 1625| Type = [LValueReferenceType] int & +# 1625| ValueCategory = prvalue(load) +# 1625| getQualifier(): [ThisExpr] this +# 1625| Type = [PointerType] StructuredBindingTupleRefGet * +# 1625| ValueCategory = prvalue(load) +# 1625| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1625| Type = [LValueReferenceType] int & +# 1625| ValueCategory = prvalue +# 1625| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1625| Type = [IntType] int +# 1625| ValueCategory = lvalue +# 1628| [TopLevelFunction] void tuple_structured_binding_ref_get() +# 1628| : +# 1628| getEntryPoint(): [BlockStmt] { ... } +# 1629| getStmt(0): [DeclStmt] declaration +# 1629| getDeclarationEntry(0): [VariableDeclarationEntry] definition of t +# 1629| Type = [Struct] StructuredBindingTupleRefGet +# 1629| getVariable().getInitializer(): [Initializer] initializer for t +# 1629| getExpr(): [ConstructorCall] call to StructuredBindingTupleRefGet +# 1629| Type = [VoidType] void +# 1629| ValueCategory = prvalue +# 1631| getStmt(1): [BlockStmt] { ... } +# 1632| getStmt(0): [DeclStmt] declaration +# 1632| getDeclarationEntry(0): [VariableDeclarationEntry] definition of (unnamed local variable) +# 1632| Type = [Struct] StructuredBindingTupleRefGet +# 1632| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) +# 1632| getExpr(): [VariableAccess] t +# 1632| Type = [Struct] StructuredBindingTupleRefGet +# 1632| ValueCategory = prvalue(load) +# 1632| getDeclarationEntry(1): [VariableDeclarationEntry] definition of i +# 1632| Type = [LValueReferenceType] type & #-----| getVariable().getInitializer(): [Initializer] initializer for i -# 1585| getExpr(): [FunctionCall] call to get -# 1585| Type = [LValueReferenceType] type & -# 1585| ValueCategory = prvalue -# 1585| getQualifier(): [VariableAccess] (unnamed local variable) -# 1585| Type = [Struct] StructuredBindingTupleRefGet -# 1585| ValueCategory = xvalue -# 1585| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1585| Type = [LValueReferenceType] type & -# 1585| ValueCategory = prvalue -# 1585| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1585| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1585| ValueCategory = lvalue -# 1585| getDeclarationEntry(2): [VariableDeclarationEntry] definition of d -# 1585| Type = [LValueReferenceType] type & +# 1632| getExpr(): [FunctionCall] call to get +# 1632| Type = [LValueReferenceType] type & +# 1632| ValueCategory = prvalue +# 1632| getQualifier(): [VariableAccess] (unnamed local variable) +# 1632| Type = [Struct] StructuredBindingTupleRefGet +# 1632| ValueCategory = xvalue +# 1632| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1632| Type = [LValueReferenceType] type & +# 1632| ValueCategory = prvalue +# 1632| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1632| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1632| ValueCategory = lvalue +# 1632| getDeclarationEntry(2): [VariableDeclarationEntry] definition of d +# 1632| Type = [LValueReferenceType] type & #-----| getVariable().getInitializer(): [Initializer] initializer for d -# 1585| getExpr(): [FunctionCall] call to get -# 1585| Type = [LValueReferenceType] type & -# 1585| ValueCategory = prvalue -# 1585| getQualifier(): [VariableAccess] (unnamed local variable) -# 1585| Type = [Struct] StructuredBindingTupleRefGet -# 1585| ValueCategory = xvalue -# 1585| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1585| Type = [LValueReferenceType] type & -# 1585| ValueCategory = prvalue -# 1585| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1585| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1585| ValueCategory = lvalue -# 1585| getDeclarationEntry(3): [VariableDeclarationEntry] definition of r -# 1585| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1632| getExpr(): [FunctionCall] call to get +# 1632| Type = [LValueReferenceType] type & +# 1632| ValueCategory = prvalue +# 1632| getQualifier(): [VariableAccess] (unnamed local variable) +# 1632| Type = [Struct] StructuredBindingTupleRefGet +# 1632| ValueCategory = xvalue +# 1632| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1632| Type = [LValueReferenceType] type & +# 1632| ValueCategory = prvalue +# 1632| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1632| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1632| ValueCategory = lvalue +# 1632| getDeclarationEntry(3): [VariableDeclarationEntry] definition of r +# 1632| Type = [NestedTypedefType,UsingAliasTypedefType] type #-----| getVariable().getInitializer(): [Initializer] initializer for r -# 1585| getExpr(): [FunctionCall] call to get -# 1585| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1585| ValueCategory = prvalue -# 1585| getQualifier(): [VariableAccess] (unnamed local variable) -# 1585| Type = [Struct] StructuredBindingTupleRefGet -# 1585| ValueCategory = xvalue -# 1585| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1585| Type = [LValueReferenceType] int & -# 1585| ValueCategory = prvalue -# 1585| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1585| Type = [IntType] int -# 1585| ValueCategory = lvalue -# 1586| getStmt(1): [ExprStmt] ExprStmt -# 1586| getExpr(): [AssignExpr] ... = ... -# 1586| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1586| ValueCategory = lvalue -# 1586| getLValue(): [VariableAccess] d -# 1586| Type = [LValueReferenceType] type & -# 1586| ValueCategory = prvalue(load) -# 1586| getRValue(): [Literal] 4.0 -# 1586| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1586| Value = [Literal] 4.0 -# 1586| ValueCategory = prvalue -# 1586| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1586| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1586| ValueCategory = lvalue -# 1587| getStmt(2): [DeclStmt] declaration -# 1587| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd -# 1587| Type = [LValueReferenceType] double & -# 1587| getVariable().getInitializer(): [Initializer] initializer for rd -# 1587| getExpr(): [VariableAccess] d -# 1587| Type = [LValueReferenceType] type & -# 1587| ValueCategory = prvalue(load) -# 1587| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1587| Type = [LValueReferenceType] type & -# 1587| ValueCategory = prvalue -# 1587| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1587| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1587| ValueCategory = lvalue -# 1588| getStmt(3): [DeclStmt] declaration -# 1588| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1588| Type = [IntType] int -# 1588| getVariable().getInitializer(): [Initializer] initializer for v -# 1588| getExpr(): [VariableAccess] i -# 1588| Type = [LValueReferenceType] type & -# 1588| ValueCategory = prvalue(load) -# 1588| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1588| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1588| ValueCategory = prvalue(load) -# 1589| getStmt(4): [ExprStmt] ExprStmt -# 1589| getExpr(): [AssignExpr] ... = ... -# 1589| Type = [IntType] int -# 1589| ValueCategory = lvalue -# 1589| getLValue(): [VariableAccess] r -# 1589| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1589| ValueCategory = prvalue(load) -# 1589| getRValue(): [Literal] 5 -# 1589| Type = [IntType] int -# 1589| Value = [Literal] 5 -# 1589| ValueCategory = prvalue -# 1589| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1589| Type = [IntType] int -# 1589| ValueCategory = lvalue -# 1590| getStmt(5): [DeclStmt] declaration -# 1590| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr -# 1590| Type = [LValueReferenceType] int & -# 1590| getVariable().getInitializer(): [Initializer] initializer for rr -# 1590| getExpr(): [VariableAccess] r -# 1590| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1590| ValueCategory = prvalue(load) -# 1590| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1590| Type = [LValueReferenceType] int & -# 1590| ValueCategory = prvalue -# 1590| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1590| Type = [IntType] int -# 1590| ValueCategory = lvalue -# 1591| getStmt(6): [DeclStmt] declaration -# 1591| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w -# 1591| Type = [IntType] int -# 1591| getVariable().getInitializer(): [Initializer] initializer for w -# 1591| getExpr(): [VariableAccess] r -# 1591| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1591| ValueCategory = prvalue(load) -# 1591| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1591| Type = [IntType] int -# 1591| ValueCategory = prvalue(load) -# 1594| getStmt(2): [BlockStmt] { ... } -# 1595| getStmt(0): [DeclStmt] declaration -# 1595| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable -# 1595| Type = [Struct] StructuredBindingTupleRefGet -# 1595| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable -# 1595| getExpr(): [VariableAccess] t -# 1595| Type = [Struct] StructuredBindingTupleRefGet -# 1595| ValueCategory = prvalue(load) -# 1596| getStmt(1): [DeclStmt] declaration -# 1596| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i -# 1596| Type = [LValueReferenceType] type & -# 1596| getVariable().getInitializer(): [Initializer] initializer for i -# 1596| getExpr(): [FunctionCall] call to get -# 1596| Type = [LValueReferenceType] type & -# 1596| ValueCategory = prvalue -# 1596| getQualifier(): [VariableAccess] unnamed_local_variable -# 1596| Type = [Struct] StructuredBindingTupleRefGet -# 1596| ValueCategory = lvalue -# 1596| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1596| Type = [LValueReferenceType] type & -# 1596| ValueCategory = prvalue -# 1596| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1596| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1596| ValueCategory = lvalue -# 1597| getStmt(2): [DeclStmt] declaration -# 1597| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 1597| Type = [LValueReferenceType] type & -# 1597| getVariable().getInitializer(): [Initializer] initializer for d -# 1597| getExpr(): [FunctionCall] call to get -# 1597| Type = [LValueReferenceType] type & -# 1597| ValueCategory = prvalue -# 1597| getQualifier(): [VariableAccess] unnamed_local_variable -# 1597| Type = [Struct] StructuredBindingTupleRefGet -# 1597| ValueCategory = lvalue -# 1597| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1597| Type = [LValueReferenceType] type & -# 1597| ValueCategory = prvalue -# 1597| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1597| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1597| ValueCategory = lvalue -# 1598| getStmt(3): [DeclStmt] declaration -# 1598| getDeclarationEntry(0): [VariableDeclarationEntry] definition of r -# 1598| Type = [LValueReferenceType] int & -# 1598| getVariable().getInitializer(): [Initializer] initializer for r -# 1598| getExpr(): [FunctionCall] call to get -# 1598| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1598| ValueCategory = prvalue -# 1598| getQualifier(): [VariableAccess] unnamed_local_variable -# 1598| Type = [Struct] StructuredBindingTupleRefGet -# 1598| ValueCategory = lvalue -# 1598| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1598| Type = [LValueReferenceType] int & -# 1598| ValueCategory = prvalue -# 1598| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1598| Type = [IntType] int -# 1598| ValueCategory = lvalue -# 1599| getStmt(4): [ExprStmt] ExprStmt -# 1599| getExpr(): [AssignExpr] ... = ... -# 1599| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1599| ValueCategory = lvalue -# 1599| getLValue(): [VariableAccess] d -# 1599| Type = [LValueReferenceType] type & -# 1599| ValueCategory = prvalue(load) -# 1599| getRValue(): [Literal] 4.0 -# 1599| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1599| Value = [Literal] 4.0 -# 1599| ValueCategory = prvalue -# 1599| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1599| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1599| ValueCategory = lvalue -# 1600| getStmt(5): [DeclStmt] declaration -# 1600| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd -# 1600| Type = [LValueReferenceType] double & -# 1600| getVariable().getInitializer(): [Initializer] initializer for rd -# 1600| getExpr(): [VariableAccess] d -# 1600| Type = [LValueReferenceType] type & -# 1600| ValueCategory = prvalue(load) -# 1600| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1600| Type = [LValueReferenceType] type & -# 1600| ValueCategory = prvalue -# 1600| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1600| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1600| ValueCategory = lvalue -# 1601| getStmt(6): [DeclStmt] declaration -# 1601| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1601| Type = [IntType] int -# 1601| getVariable().getInitializer(): [Initializer] initializer for v -# 1601| getExpr(): [VariableAccess] i -# 1601| Type = [LValueReferenceType] type & -# 1601| ValueCategory = prvalue(load) -# 1601| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1601| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1601| ValueCategory = prvalue(load) -# 1602| getStmt(7): [ExprStmt] ExprStmt -# 1602| getExpr(): [AssignExpr] ... = ... -# 1602| Type = [IntType] int -# 1602| ValueCategory = lvalue -# 1602| getLValue(): [VariableAccess] r -# 1602| Type = [LValueReferenceType] int & -# 1602| ValueCategory = prvalue(load) -# 1602| getRValue(): [Literal] 5 -# 1602| Type = [IntType] int -# 1602| Value = [Literal] 5 -# 1602| ValueCategory = prvalue -# 1602| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1602| Type = [IntType] int -# 1602| ValueCategory = lvalue -# 1603| getStmt(8): [DeclStmt] declaration -# 1603| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr -# 1603| Type = [LValueReferenceType] int & -# 1603| getVariable().getInitializer(): [Initializer] initializer for rr -# 1603| getExpr(): [VariableAccess] r -# 1603| Type = [LValueReferenceType] int & -# 1603| ValueCategory = prvalue(load) -# 1603| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1603| Type = [LValueReferenceType] int & -# 1603| ValueCategory = prvalue -# 1603| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1603| Type = [IntType] int -# 1603| ValueCategory = lvalue -# 1604| getStmt(9): [DeclStmt] declaration -# 1604| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w -# 1604| Type = [IntType] int -# 1604| getVariable().getInitializer(): [Initializer] initializer for w -# 1604| getExpr(): [VariableAccess] r -# 1604| Type = [LValueReferenceType] int & -# 1604| ValueCategory = prvalue(load) -# 1604| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1604| Type = [IntType] int -# 1604| ValueCategory = prvalue(load) -# 1606| getStmt(3): [ReturnStmt] return ... -# 1608| [CopyAssignmentOperator] StructuredBindingTupleNoRefGet& StructuredBindingTupleNoRefGet::operator=(StructuredBindingTupleNoRefGet const&) -# 1608| : +# 1632| getExpr(): [FunctionCall] call to get +# 1632| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1632| ValueCategory = prvalue +# 1632| getQualifier(): [VariableAccess] (unnamed local variable) +# 1632| Type = [Struct] StructuredBindingTupleRefGet +# 1632| ValueCategory = xvalue +# 1632| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1632| Type = [LValueReferenceType] int & +# 1632| ValueCategory = prvalue +# 1632| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1632| Type = [IntType] int +# 1632| ValueCategory = lvalue +# 1633| getStmt(1): [ExprStmt] ExprStmt +# 1633| getExpr(): [AssignExpr] ... = ... +# 1633| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1633| ValueCategory = lvalue +# 1633| getLValue(): [VariableAccess] d +# 1633| Type = [LValueReferenceType] type & +# 1633| ValueCategory = prvalue(load) +# 1633| getRValue(): [Literal] 4.0 +# 1633| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1633| Value = [Literal] 4.0 +# 1633| ValueCategory = prvalue +# 1633| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1633| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1633| ValueCategory = lvalue +# 1634| getStmt(2): [DeclStmt] declaration +# 1634| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd +# 1634| Type = [LValueReferenceType] double & +# 1634| getVariable().getInitializer(): [Initializer] initializer for rd +# 1634| getExpr(): [VariableAccess] d +# 1634| Type = [LValueReferenceType] type & +# 1634| ValueCategory = prvalue(load) +# 1634| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1634| Type = [LValueReferenceType] type & +# 1634| ValueCategory = prvalue +# 1634| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1634| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1634| ValueCategory = lvalue +# 1635| getStmt(3): [DeclStmt] declaration +# 1635| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1635| Type = [IntType] int +# 1635| getVariable().getInitializer(): [Initializer] initializer for v +# 1635| getExpr(): [VariableAccess] i +# 1635| Type = [LValueReferenceType] type & +# 1635| ValueCategory = prvalue(load) +# 1635| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1635| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1635| ValueCategory = prvalue(load) +# 1636| getStmt(4): [ExprStmt] ExprStmt +# 1636| getExpr(): [AssignExpr] ... = ... +# 1636| Type = [IntType] int +# 1636| ValueCategory = lvalue +# 1636| getLValue(): [VariableAccess] r +# 1636| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1636| ValueCategory = prvalue(load) +# 1636| getRValue(): [Literal] 5 +# 1636| Type = [IntType] int +# 1636| Value = [Literal] 5 +# 1636| ValueCategory = prvalue +# 1636| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1636| Type = [IntType] int +# 1636| ValueCategory = lvalue +# 1637| getStmt(5): [DeclStmt] declaration +# 1637| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr +# 1637| Type = [LValueReferenceType] int & +# 1637| getVariable().getInitializer(): [Initializer] initializer for rr +# 1637| getExpr(): [VariableAccess] r +# 1637| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1637| ValueCategory = prvalue(load) +# 1637| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1637| Type = [LValueReferenceType] int & +# 1637| ValueCategory = prvalue +# 1637| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1637| Type = [IntType] int +# 1637| ValueCategory = lvalue +# 1638| getStmt(6): [DeclStmt] declaration +# 1638| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1638| Type = [IntType] int +# 1638| getVariable().getInitializer(): [Initializer] initializer for w +# 1638| getExpr(): [VariableAccess] r +# 1638| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1638| ValueCategory = prvalue(load) +# 1638| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1638| Type = [IntType] int +# 1638| ValueCategory = prvalue(load) +# 1641| getStmt(2): [BlockStmt] { ... } +# 1642| getStmt(0): [DeclStmt] declaration +# 1642| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable +# 1642| Type = [Struct] StructuredBindingTupleRefGet +# 1642| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable +# 1642| getExpr(): [VariableAccess] t +# 1642| Type = [Struct] StructuredBindingTupleRefGet +# 1642| ValueCategory = prvalue(load) +# 1643| getStmt(1): [DeclStmt] declaration +# 1643| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1643| Type = [LValueReferenceType] type & +# 1643| getVariable().getInitializer(): [Initializer] initializer for i +# 1643| getExpr(): [FunctionCall] call to get +# 1643| Type = [LValueReferenceType] type & +# 1643| ValueCategory = prvalue +# 1643| getQualifier(): [VariableAccess] unnamed_local_variable +# 1643| Type = [Struct] StructuredBindingTupleRefGet +# 1643| ValueCategory = lvalue +# 1643| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1643| Type = [LValueReferenceType] type & +# 1643| ValueCategory = prvalue +# 1643| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1643| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1643| ValueCategory = lvalue +# 1644| getStmt(2): [DeclStmt] declaration +# 1644| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d +# 1644| Type = [LValueReferenceType] type & +# 1644| getVariable().getInitializer(): [Initializer] initializer for d +# 1644| getExpr(): [FunctionCall] call to get +# 1644| Type = [LValueReferenceType] type & +# 1644| ValueCategory = prvalue +# 1644| getQualifier(): [VariableAccess] unnamed_local_variable +# 1644| Type = [Struct] StructuredBindingTupleRefGet +# 1644| ValueCategory = lvalue +# 1644| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1644| Type = [LValueReferenceType] type & +# 1644| ValueCategory = prvalue +# 1644| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1644| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1644| ValueCategory = lvalue +# 1645| getStmt(3): [DeclStmt] declaration +# 1645| getDeclarationEntry(0): [VariableDeclarationEntry] definition of r +# 1645| Type = [LValueReferenceType] int & +# 1645| getVariable().getInitializer(): [Initializer] initializer for r +# 1645| getExpr(): [FunctionCall] call to get +# 1645| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1645| ValueCategory = prvalue +# 1645| getQualifier(): [VariableAccess] unnamed_local_variable +# 1645| Type = [Struct] StructuredBindingTupleRefGet +# 1645| ValueCategory = lvalue +# 1645| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1645| Type = [LValueReferenceType] int & +# 1645| ValueCategory = prvalue +# 1645| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1645| Type = [IntType] int +# 1645| ValueCategory = lvalue +# 1646| getStmt(4): [ExprStmt] ExprStmt +# 1646| getExpr(): [AssignExpr] ... = ... +# 1646| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1646| ValueCategory = lvalue +# 1646| getLValue(): [VariableAccess] d +# 1646| Type = [LValueReferenceType] type & +# 1646| ValueCategory = prvalue(load) +# 1646| getRValue(): [Literal] 4.0 +# 1646| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1646| Value = [Literal] 4.0 +# 1646| ValueCategory = prvalue +# 1646| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1646| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1646| ValueCategory = lvalue +# 1647| getStmt(5): [DeclStmt] declaration +# 1647| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd +# 1647| Type = [LValueReferenceType] double & +# 1647| getVariable().getInitializer(): [Initializer] initializer for rd +# 1647| getExpr(): [VariableAccess] d +# 1647| Type = [LValueReferenceType] type & +# 1647| ValueCategory = prvalue(load) +# 1647| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1647| Type = [LValueReferenceType] type & +# 1647| ValueCategory = prvalue +# 1647| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1647| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1647| ValueCategory = lvalue +# 1648| getStmt(6): [DeclStmt] declaration +# 1648| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1648| Type = [IntType] int +# 1648| getVariable().getInitializer(): [Initializer] initializer for v +# 1648| getExpr(): [VariableAccess] i +# 1648| Type = [LValueReferenceType] type & +# 1648| ValueCategory = prvalue(load) +# 1648| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1648| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1648| ValueCategory = prvalue(load) +# 1649| getStmt(7): [ExprStmt] ExprStmt +# 1649| getExpr(): [AssignExpr] ... = ... +# 1649| Type = [IntType] int +# 1649| ValueCategory = lvalue +# 1649| getLValue(): [VariableAccess] r +# 1649| Type = [LValueReferenceType] int & +# 1649| ValueCategory = prvalue(load) +# 1649| getRValue(): [Literal] 5 +# 1649| Type = [IntType] int +# 1649| Value = [Literal] 5 +# 1649| ValueCategory = prvalue +# 1649| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1649| Type = [IntType] int +# 1649| ValueCategory = lvalue +# 1650| getStmt(8): [DeclStmt] declaration +# 1650| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr +# 1650| Type = [LValueReferenceType] int & +# 1650| getVariable().getInitializer(): [Initializer] initializer for rr +# 1650| getExpr(): [VariableAccess] r +# 1650| Type = [LValueReferenceType] int & +# 1650| ValueCategory = prvalue(load) +# 1650| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1650| Type = [LValueReferenceType] int & +# 1650| ValueCategory = prvalue +# 1650| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1650| Type = [IntType] int +# 1650| ValueCategory = lvalue +# 1651| getStmt(9): [DeclStmt] declaration +# 1651| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1651| Type = [IntType] int +# 1651| getVariable().getInitializer(): [Initializer] initializer for w +# 1651| getExpr(): [VariableAccess] r +# 1651| Type = [LValueReferenceType] int & +# 1651| ValueCategory = prvalue(load) +# 1651| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1651| Type = [IntType] int +# 1651| ValueCategory = prvalue(load) +# 1653| getStmt(3): [ReturnStmt] return ... +# 1655| [CopyAssignmentOperator] StructuredBindingTupleNoRefGet& StructuredBindingTupleNoRefGet::operator=(StructuredBindingTupleNoRefGet const&) +# 1655| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingTupleNoRefGet & -# 1608| [Constructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet() -# 1608| : -# 1608| : -# 1608| getInitializer(0): [ConstructorFieldInit] constructor init of field i -# 1608| Type = [IntType] int -# 1608| ValueCategory = prvalue -# 1608| getInitializer(1): [ConstructorFieldInit] constructor init of field r -# 1608| Type = [LValueReferenceType] int & -# 1608| ValueCategory = prvalue -# 1608| getEntryPoint(): [BlockStmt] { ... } -# 1608| getStmt(0): [ReturnStmt] return ... -# 1608| [CopyConstructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet(StructuredBindingTupleNoRefGet const&) -# 1608| : +# 1655| [Constructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet() +# 1655| : +# 1655| : +# 1655| getInitializer(0): [ConstructorFieldInit] constructor init of field i +# 1655| Type = [IntType] int +# 1655| ValueCategory = prvalue +# 1655| getInitializer(1): [ConstructorFieldInit] constructor init of field r +# 1655| Type = [LValueReferenceType] int & +# 1655| ValueCategory = prvalue +# 1655| getEntryPoint(): [BlockStmt] { ... } +# 1655| getStmt(0): [ReturnStmt] return ... +# 1655| [CopyConstructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet(StructuredBindingTupleNoRefGet const&) +# 1655| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingTupleNoRefGet & -# 1608| [MoveConstructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet(StructuredBindingTupleNoRefGet&&) -# 1608| : +# 1655| [MoveConstructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet(StructuredBindingTupleNoRefGet&&) +# 1655| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] StructuredBindingTupleNoRefGet && -# 1613| [MemberFunction,TemplateFunction] type StructuredBindingTupleNoRefGet::get() -# 1613| : -# 1617| [CopyAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size const&) -# 1617| : +# 1660| [MemberFunction,TemplateFunction] type StructuredBindingTupleNoRefGet::get() +# 1660| : +# 1664| [CopyAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size const&) +# 1664| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_size & -# 1617| [MoveAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size&&) -# 1617| : +# 1664| [MoveAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size&&) +# 1664| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_size && -# 1622| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) -# 1622| : +# 1669| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) +# 1669| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<0, StructuredBindingTupleNoRefGet> & -# 1622| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) -# 1622| : +# 1669| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) +# 1669| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<0, StructuredBindingTupleNoRefGet> && -# 1626| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) -# 1626| : +# 1673| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) +# 1673| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<1, StructuredBindingTupleNoRefGet> & -# 1626| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) -# 1626| : +# 1673| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) +# 1673| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<1, StructuredBindingTupleNoRefGet> && -# 1630| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) -# 1630| : +# 1677| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) +# 1677| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<2, StructuredBindingTupleNoRefGet> & -# 1630| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) -# 1630| : +# 1677| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) +# 1677| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<2, StructuredBindingTupleNoRefGet> && -# 1635| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1635| : -# 1635| getEntryPoint(): [BlockStmt] { ... } -# 1636| getStmt(0): [ReturnStmt] return ... -# 1636| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] i -# 1636| Type = [IntType] int -# 1636| ValueCategory = prvalue(load) -# 1636| getQualifier(): [ThisExpr] this -# 1636| Type = [PointerType] StructuredBindingTupleNoRefGet * -# 1636| ValueCategory = prvalue(load) -# 1639| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1639| : -# 1639| getEntryPoint(): [BlockStmt] { ... } -# 1640| getStmt(0): [ReturnStmt] return ... -# 1640| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] r -# 1640| Type = [LValueReferenceType] int & -# 1640| ValueCategory = prvalue(load) -# 1640| getQualifier(): [ThisExpr] this -# 1640| Type = [PointerType] StructuredBindingTupleNoRefGet * -# 1640| ValueCategory = prvalue(load) -# 1640| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1640| Type = [LValueReferenceType] int & -# 1640| ValueCategory = prvalue -# 1640| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1640| Type = [IntType] int -# 1640| ValueCategory = lvalue -# 1643| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1643| : -# 1643| getEntryPoint(): [BlockStmt] { ... } -# 1644| getStmt(0): [ReturnStmt] return ... -# 1644| getExpr(): [Literal] 5 -# 1644| Type = [IntType] int -# 1644| Value = [Literal] 5 -# 1644| ValueCategory = prvalue -# 1644| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1644| Type = [LValueReferenceType] int & -# 1644| ValueCategory = prvalue -# 1644| getExpr(): [TemporaryObjectExpr] temporary object -# 1644| Type = [IntType] int -# 1644| ValueCategory = lvalue -# 1647| [TopLevelFunction] void tuple_structured_binding_no_ref_get() -# 1647| : -# 1647| getEntryPoint(): [BlockStmt] { ... } -# 1648| getStmt(0): [DeclStmt] declaration -# 1648| getDeclarationEntry(0): [VariableDeclarationEntry] definition of t -# 1648| Type = [Struct] StructuredBindingTupleNoRefGet -# 1648| getVariable().getInitializer(): [Initializer] initializer for t -# 1648| getExpr(): [ConstructorCall] call to StructuredBindingTupleNoRefGet -# 1648| Type = [VoidType] void -# 1648| ValueCategory = prvalue -# 1650| getStmt(1): [BlockStmt] { ... } -# 1651| getStmt(0): [DeclStmt] declaration -# 1651| getDeclarationEntry(0): [VariableDeclarationEntry] definition of (unnamed local variable) -# 1651| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1651| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) -# 1651| getExpr(): [VariableAccess] t -# 1651| Type = [Struct] StructuredBindingTupleNoRefGet -# 1651| ValueCategory = lvalue -# 1651| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1651| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1651| ValueCategory = prvalue -# 1651| getDeclarationEntry(1): [VariableDeclarationEntry] definition of i -# 1651| Type = [RValueReferenceType] type && +# 1682| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1682| : +# 1682| getEntryPoint(): [BlockStmt] { ... } +# 1683| getStmt(0): [ReturnStmt] return ... +# 1683| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] i +# 1683| Type = [IntType] int +# 1683| ValueCategory = prvalue(load) +# 1683| getQualifier(): [ThisExpr] this +# 1683| Type = [PointerType] StructuredBindingTupleNoRefGet * +# 1683| ValueCategory = prvalue(load) +# 1686| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1686| : +# 1686| getEntryPoint(): [BlockStmt] { ... } +# 1687| getStmt(0): [ReturnStmt] return ... +# 1687| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] r +# 1687| Type = [LValueReferenceType] int & +# 1687| ValueCategory = prvalue(load) +# 1687| getQualifier(): [ThisExpr] this +# 1687| Type = [PointerType] StructuredBindingTupleNoRefGet * +# 1687| ValueCategory = prvalue(load) +# 1687| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1687| Type = [LValueReferenceType] int & +# 1687| ValueCategory = prvalue +# 1687| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1687| Type = [IntType] int +# 1687| ValueCategory = lvalue +# 1690| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1690| : +# 1690| getEntryPoint(): [BlockStmt] { ... } +# 1691| getStmt(0): [ReturnStmt] return ... +# 1691| getExpr(): [Literal] 5 +# 1691| Type = [IntType] int +# 1691| Value = [Literal] 5 +# 1691| ValueCategory = prvalue +# 1691| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1691| Type = [LValueReferenceType] int & +# 1691| ValueCategory = prvalue +# 1691| getExpr(): [TemporaryObjectExpr] temporary object +# 1691| Type = [IntType] int +# 1691| ValueCategory = lvalue +# 1694| [TopLevelFunction] void tuple_structured_binding_no_ref_get() +# 1694| : +# 1694| getEntryPoint(): [BlockStmt] { ... } +# 1695| getStmt(0): [DeclStmt] declaration +# 1695| getDeclarationEntry(0): [VariableDeclarationEntry] definition of t +# 1695| Type = [Struct] StructuredBindingTupleNoRefGet +# 1695| getVariable().getInitializer(): [Initializer] initializer for t +# 1695| getExpr(): [ConstructorCall] call to StructuredBindingTupleNoRefGet +# 1695| Type = [VoidType] void +# 1695| ValueCategory = prvalue +# 1697| getStmt(1): [BlockStmt] { ... } +# 1698| getStmt(0): [DeclStmt] declaration +# 1698| getDeclarationEntry(0): [VariableDeclarationEntry] definition of (unnamed local variable) +# 1698| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1698| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) +# 1698| getExpr(): [VariableAccess] t +# 1698| Type = [Struct] StructuredBindingTupleNoRefGet +# 1698| ValueCategory = lvalue +# 1698| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1698| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1698| ValueCategory = prvalue +# 1698| getDeclarationEntry(1): [VariableDeclarationEntry] definition of i +# 1698| Type = [RValueReferenceType] type && #-----| getVariable().getInitializer(): [Initializer] initializer for i -# 1651| getExpr(): [FunctionCall] call to get -# 1651| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1651| ValueCategory = prvalue -# 1651| getQualifier(): [VariableAccess] (unnamed local variable) -# 1651| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1651| ValueCategory = prvalue(load) -# 1651| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1651| Type = [Struct] StructuredBindingTupleNoRefGet -# 1651| ValueCategory = lvalue -# 1651| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1651| Type = [LValueReferenceType] type & -# 1651| ValueCategory = prvalue -# 1651| getExpr(): [TemporaryObjectExpr] temporary object -# 1651| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1651| ValueCategory = lvalue -# 1651| getDeclarationEntry(2): [VariableDeclarationEntry] definition of r -# 1651| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1698| getExpr(): [FunctionCall] call to get +# 1698| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1698| ValueCategory = prvalue +# 1698| getQualifier(): [VariableAccess] (unnamed local variable) +# 1698| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1698| ValueCategory = prvalue(load) +# 1698| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1698| Type = [Struct] StructuredBindingTupleNoRefGet +# 1698| ValueCategory = lvalue +# 1698| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1698| Type = [LValueReferenceType] type & +# 1698| ValueCategory = prvalue +# 1698| getExpr(): [TemporaryObjectExpr] temporary object +# 1698| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1698| ValueCategory = lvalue +# 1698| getDeclarationEntry(2): [VariableDeclarationEntry] definition of r +# 1698| Type = [NestedTypedefType,UsingAliasTypedefType] type #-----| getVariable().getInitializer(): [Initializer] initializer for r -# 1651| getExpr(): [FunctionCall] call to get -# 1651| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1651| ValueCategory = prvalue -# 1651| getQualifier(): [VariableAccess] (unnamed local variable) -# 1651| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1651| ValueCategory = prvalue(load) -# 1651| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1651| Type = [Struct] StructuredBindingTupleNoRefGet -# 1651| ValueCategory = lvalue -# 1651| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1651| Type = [LValueReferenceType] int & -# 1651| ValueCategory = prvalue -# 1651| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1651| Type = [IntType] int -# 1651| ValueCategory = lvalue -# 1651| getDeclarationEntry(3): [VariableDeclarationEntry] definition of rv -# 1651| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1698| getExpr(): [FunctionCall] call to get +# 1698| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1698| ValueCategory = prvalue +# 1698| getQualifier(): [VariableAccess] (unnamed local variable) +# 1698| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1698| ValueCategory = prvalue(load) +# 1698| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1698| Type = [Struct] StructuredBindingTupleNoRefGet +# 1698| ValueCategory = lvalue +# 1698| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1698| Type = [LValueReferenceType] int & +# 1698| ValueCategory = prvalue +# 1698| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1698| Type = [IntType] int +# 1698| ValueCategory = lvalue +# 1698| getDeclarationEntry(3): [VariableDeclarationEntry] definition of rv +# 1698| Type = [NestedTypedefType,UsingAliasTypedefType] type #-----| getVariable().getInitializer(): [Initializer] initializer for rv -# 1651| getExpr(): [FunctionCall] call to get -# 1651| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1651| ValueCategory = prvalue -# 1651| getQualifier(): [VariableAccess] (unnamed local variable) -# 1651| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1651| ValueCategory = prvalue(load) -# 1651| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1651| Type = [Struct] StructuredBindingTupleNoRefGet -# 1651| ValueCategory = lvalue -# 1651| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1651| Type = [LValueReferenceType] int & -# 1651| ValueCategory = prvalue -# 1651| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1651| Type = [IntType] int -# 1651| ValueCategory = xvalue -# 1652| getStmt(1): [ExprStmt] ExprStmt -# 1652| getExpr(): [AssignExpr] ... = ... -# 1652| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1652| ValueCategory = lvalue -# 1652| getLValue(): [VariableAccess] i -# 1652| Type = [RValueReferenceType] type && -# 1652| ValueCategory = prvalue(load) -# 1652| getRValue(): [Literal] 4 -# 1652| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1652| Value = [Literal] 4 -# 1652| ValueCategory = prvalue -# 1652| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1652| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1652| ValueCategory = lvalue -# 1653| getStmt(2): [DeclStmt] declaration -# 1653| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ri -# 1653| Type = [LValueReferenceType] int & -# 1653| getVariable().getInitializer(): [Initializer] initializer for ri -# 1653| getExpr(): [VariableAccess] i -# 1653| Type = [RValueReferenceType] type && -# 1653| ValueCategory = prvalue(load) -# 1653| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1653| Type = [LValueReferenceType] type & -# 1653| ValueCategory = prvalue -# 1653| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1653| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1653| ValueCategory = lvalue -# 1654| getStmt(3): [DeclStmt] declaration -# 1654| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1654| Type = [IntType] int -# 1654| getVariable().getInitializer(): [Initializer] initializer for v -# 1654| getExpr(): [VariableAccess] i -# 1654| Type = [RValueReferenceType] type && -# 1654| ValueCategory = prvalue(load) -# 1654| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1654| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1654| ValueCategory = prvalue(load) -# 1655| getStmt(4): [ExprStmt] ExprStmt -# 1655| getExpr(): [AssignExpr] ... = ... -# 1655| Type = [IntType] int -# 1655| ValueCategory = lvalue -# 1655| getLValue(): [VariableAccess] r -# 1655| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1655| ValueCategory = prvalue(load) -# 1655| getRValue(): [Literal] 5 -# 1655| Type = [IntType] int -# 1655| Value = [Literal] 5 -# 1655| ValueCategory = prvalue -# 1655| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1655| Type = [IntType] int -# 1655| ValueCategory = lvalue -# 1656| getStmt(5): [DeclStmt] declaration -# 1656| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr -# 1656| Type = [LValueReferenceType] int & -# 1656| getVariable().getInitializer(): [Initializer] initializer for rr -# 1656| getExpr(): [VariableAccess] r -# 1656| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1656| ValueCategory = prvalue(load) -# 1656| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1656| Type = [LValueReferenceType] int & -# 1656| ValueCategory = prvalue -# 1656| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1656| Type = [IntType] int -# 1656| ValueCategory = lvalue -# 1657| getStmt(6): [DeclStmt] declaration -# 1657| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w -# 1657| Type = [IntType] int -# 1657| getVariable().getInitializer(): [Initializer] initializer for w -# 1657| getExpr(): [VariableAccess] r -# 1657| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1657| ValueCategory = prvalue(load) -# 1657| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1657| Type = [IntType] int -# 1657| ValueCategory = prvalue(load) -# 1660| getStmt(2): [BlockStmt] { ... } -# 1661| getStmt(0): [DeclStmt] declaration -# 1661| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable -# 1661| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1661| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable -# 1661| getExpr(): [VariableAccess] t -# 1661| Type = [Struct] StructuredBindingTupleNoRefGet -# 1661| ValueCategory = lvalue -# 1661| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1661| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1661| ValueCategory = prvalue -# 1662| getStmt(1): [DeclStmt] declaration -# 1662| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i -# 1662| Type = [RValueReferenceType] type && -# 1662| getVariable().getInitializer(): [Initializer] initializer for i -# 1662| getExpr(): [FunctionCall] call to get -# 1662| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1662| ValueCategory = prvalue -# 1662| getQualifier(): [VariableAccess] unnamed_local_variable -# 1662| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1662| ValueCategory = prvalue(load) -# 1662| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1662| Type = [Struct] StructuredBindingTupleNoRefGet -# 1662| ValueCategory = lvalue -# 1662| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1662| Type = [LValueReferenceType] type & -# 1662| ValueCategory = prvalue -# 1662| getExpr(): [TemporaryObjectExpr] temporary object -# 1662| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1662| ValueCategory = lvalue -# 1663| getStmt(2): [DeclStmt] declaration -# 1663| getDeclarationEntry(0): [VariableDeclarationEntry] definition of r -# 1663| Type = [LValueReferenceType] int & -# 1663| getVariable().getInitializer(): [Initializer] initializer for r -# 1663| getExpr(): [FunctionCall] call to get -# 1663| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1663| ValueCategory = prvalue -# 1663| getQualifier(): [VariableAccess] unnamed_local_variable -# 1663| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1663| ValueCategory = prvalue(load) -# 1663| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1663| Type = [Struct] StructuredBindingTupleNoRefGet -# 1663| ValueCategory = lvalue -# 1663| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1663| Type = [LValueReferenceType] int & -# 1663| ValueCategory = prvalue -# 1663| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1663| Type = [IntType] int -# 1663| ValueCategory = lvalue -# 1664| getStmt(3): [DeclStmt] declaration -# 1664| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rv -# 1664| Type = [RValueReferenceType] int && -# 1664| getVariable().getInitializer(): [Initializer] initializer for rv -# 1664| getExpr(): [FunctionCall] call to get -# 1664| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1664| ValueCategory = prvalue -# 1664| getQualifier(): [VariableAccess] unnamed_local_variable -# 1664| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1664| ValueCategory = prvalue(load) -# 1664| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1664| Type = [Struct] StructuredBindingTupleNoRefGet -# 1664| ValueCategory = lvalue -# 1664| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1664| Type = [LValueReferenceType] int & -# 1664| ValueCategory = prvalue -# 1664| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1664| Type = [IntType] int -# 1664| ValueCategory = xvalue -# 1665| getStmt(4): [ExprStmt] ExprStmt -# 1665| getExpr(): [AssignExpr] ... = ... -# 1665| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1665| ValueCategory = lvalue -# 1665| getLValue(): [VariableAccess] i -# 1665| Type = [RValueReferenceType] type && -# 1665| ValueCategory = prvalue(load) -# 1665| getRValue(): [Literal] 4 -# 1665| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1665| Value = [Literal] 4 -# 1665| ValueCategory = prvalue -# 1665| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1665| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1665| ValueCategory = lvalue -# 1666| getStmt(5): [DeclStmt] declaration -# 1666| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ri -# 1666| Type = [LValueReferenceType] int & -# 1666| getVariable().getInitializer(): [Initializer] initializer for ri -# 1666| getExpr(): [VariableAccess] i -# 1666| Type = [RValueReferenceType] type && -# 1666| ValueCategory = prvalue(load) -# 1666| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1666| Type = [LValueReferenceType] type & -# 1666| ValueCategory = prvalue -# 1666| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1666| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1666| ValueCategory = lvalue -# 1667| getStmt(6): [DeclStmt] declaration -# 1667| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1667| Type = [IntType] int -# 1667| getVariable().getInitializer(): [Initializer] initializer for v -# 1667| getExpr(): [VariableAccess] i -# 1667| Type = [RValueReferenceType] type && -# 1667| ValueCategory = prvalue(load) -# 1667| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1667| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1667| ValueCategory = prvalue(load) -# 1668| getStmt(7): [ExprStmt] ExprStmt -# 1668| getExpr(): [AssignExpr] ... = ... -# 1668| Type = [IntType] int -# 1668| ValueCategory = lvalue -# 1668| getLValue(): [VariableAccess] r -# 1668| Type = [LValueReferenceType] int & -# 1668| ValueCategory = prvalue(load) -# 1668| getRValue(): [Literal] 5 -# 1668| Type = [IntType] int -# 1668| Value = [Literal] 5 -# 1668| ValueCategory = prvalue -# 1668| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1668| Type = [IntType] int -# 1668| ValueCategory = lvalue -# 1669| getStmt(8): [DeclStmt] declaration -# 1669| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr -# 1669| Type = [LValueReferenceType] int & -# 1669| getVariable().getInitializer(): [Initializer] initializer for rr -# 1669| getExpr(): [VariableAccess] r -# 1669| Type = [LValueReferenceType] int & -# 1669| ValueCategory = prvalue(load) -# 1669| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1669| Type = [LValueReferenceType] int & -# 1669| ValueCategory = prvalue -# 1669| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1669| Type = [IntType] int -# 1669| ValueCategory = lvalue -# 1670| getStmt(9): [DeclStmt] declaration -# 1670| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w -# 1670| Type = [IntType] int -# 1670| getVariable().getInitializer(): [Initializer] initializer for w -# 1670| getExpr(): [VariableAccess] r -# 1670| Type = [LValueReferenceType] int & -# 1670| ValueCategory = prvalue(load) -# 1670| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1670| Type = [IntType] int -# 1670| ValueCategory = prvalue(load) -# 1672| getStmt(3): [ReturnStmt] return ... -# 1674| [TopLevelFunction] void array_structured_binding_non_ref_init() -# 1674| : -# 1674| getEntryPoint(): [BlockStmt] { ... } -# 1675| getStmt(0): [DeclStmt] declaration -# 1675| getDeclarationEntry(0): [VariableDeclarationEntry] definition of xs -# 1675| Type = [ArrayType] int[2] -# 1675| getVariable().getInitializer(): [Initializer] initializer for xs -# 1675| getExpr(): [ArrayAggregateLiteral] {...} -# 1675| Type = [ArrayType] int[2] -# 1675| ValueCategory = prvalue -# 1675| getAnElementExpr(0): [Literal] 1 -# 1675| Type = [IntType] int -# 1675| Value = [Literal] 1 -# 1675| ValueCategory = prvalue -# 1675| getAnElementExpr(1): [Literal] 2 -# 1675| Type = [IntType] int -# 1675| Value = [Literal] 2 -# 1675| ValueCategory = prvalue -# 1676| getStmt(1): [DeclStmt] declaration -# 1676| getDeclarationEntry(0): [VariableDeclarationEntry] definition of (unnamed local variable) -# 1676| Type = [ArrayType] int[2] -# 1676| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) -# 1676| getExpr(): [VariableAccess] xs -# 1676| Type = [ArrayType] int[2] -# 1676| ValueCategory = prvalue(load) -# 1676| getDeclarationEntry(1): [VariableDeclarationEntry] definition of x0 -# 1676| Type = [IntType] int +# 1698| getExpr(): [FunctionCall] call to get +# 1698| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1698| ValueCategory = prvalue +# 1698| getQualifier(): [VariableAccess] (unnamed local variable) +# 1698| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1698| ValueCategory = prvalue(load) +# 1698| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1698| Type = [Struct] StructuredBindingTupleNoRefGet +# 1698| ValueCategory = lvalue +# 1698| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1698| Type = [LValueReferenceType] int & +# 1698| ValueCategory = prvalue +# 1698| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1698| Type = [IntType] int +# 1698| ValueCategory = xvalue +# 1699| getStmt(1): [ExprStmt] ExprStmt +# 1699| getExpr(): [AssignExpr] ... = ... +# 1699| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1699| ValueCategory = lvalue +# 1699| getLValue(): [VariableAccess] i +# 1699| Type = [RValueReferenceType] type && +# 1699| ValueCategory = prvalue(load) +# 1699| getRValue(): [Literal] 4 +# 1699| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1699| Value = [Literal] 4 +# 1699| ValueCategory = prvalue +# 1699| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1699| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1699| ValueCategory = lvalue +# 1700| getStmt(2): [DeclStmt] declaration +# 1700| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ri +# 1700| Type = [LValueReferenceType] int & +# 1700| getVariable().getInitializer(): [Initializer] initializer for ri +# 1700| getExpr(): [VariableAccess] i +# 1700| Type = [RValueReferenceType] type && +# 1700| ValueCategory = prvalue(load) +# 1700| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1700| Type = [LValueReferenceType] type & +# 1700| ValueCategory = prvalue +# 1700| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1700| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1700| ValueCategory = lvalue +# 1701| getStmt(3): [DeclStmt] declaration +# 1701| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1701| Type = [IntType] int +# 1701| getVariable().getInitializer(): [Initializer] initializer for v +# 1701| getExpr(): [VariableAccess] i +# 1701| Type = [RValueReferenceType] type && +# 1701| ValueCategory = prvalue(load) +# 1701| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1701| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1701| ValueCategory = prvalue(load) +# 1702| getStmt(4): [ExprStmt] ExprStmt +# 1702| getExpr(): [AssignExpr] ... = ... +# 1702| Type = [IntType] int +# 1702| ValueCategory = lvalue +# 1702| getLValue(): [VariableAccess] r +# 1702| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1702| ValueCategory = prvalue(load) +# 1702| getRValue(): [Literal] 5 +# 1702| Type = [IntType] int +# 1702| Value = [Literal] 5 +# 1702| ValueCategory = prvalue +# 1702| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1702| Type = [IntType] int +# 1702| ValueCategory = lvalue +# 1703| getStmt(5): [DeclStmt] declaration +# 1703| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr +# 1703| Type = [LValueReferenceType] int & +# 1703| getVariable().getInitializer(): [Initializer] initializer for rr +# 1703| getExpr(): [VariableAccess] r +# 1703| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1703| ValueCategory = prvalue(load) +# 1703| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1703| Type = [LValueReferenceType] int & +# 1703| ValueCategory = prvalue +# 1703| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1703| Type = [IntType] int +# 1703| ValueCategory = lvalue +# 1704| getStmt(6): [DeclStmt] declaration +# 1704| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1704| Type = [IntType] int +# 1704| getVariable().getInitializer(): [Initializer] initializer for w +# 1704| getExpr(): [VariableAccess] r +# 1704| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1704| ValueCategory = prvalue(load) +# 1704| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1704| Type = [IntType] int +# 1704| ValueCategory = prvalue(load) +# 1707| getStmt(2): [BlockStmt] { ... } +# 1708| getStmt(0): [DeclStmt] declaration +# 1708| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable +# 1708| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1708| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable +# 1708| getExpr(): [VariableAccess] t +# 1708| Type = [Struct] StructuredBindingTupleNoRefGet +# 1708| ValueCategory = lvalue +# 1708| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1708| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1708| ValueCategory = prvalue +# 1709| getStmt(1): [DeclStmt] declaration +# 1709| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1709| Type = [RValueReferenceType] type && +# 1709| getVariable().getInitializer(): [Initializer] initializer for i +# 1709| getExpr(): [FunctionCall] call to get +# 1709| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1709| ValueCategory = prvalue +# 1709| getQualifier(): [VariableAccess] unnamed_local_variable +# 1709| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1709| ValueCategory = prvalue(load) +# 1709| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1709| Type = [Struct] StructuredBindingTupleNoRefGet +# 1709| ValueCategory = lvalue +# 1709| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1709| Type = [LValueReferenceType] type & +# 1709| ValueCategory = prvalue +# 1709| getExpr(): [TemporaryObjectExpr] temporary object +# 1709| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1709| ValueCategory = lvalue +# 1710| getStmt(2): [DeclStmt] declaration +# 1710| getDeclarationEntry(0): [VariableDeclarationEntry] definition of r +# 1710| Type = [LValueReferenceType] int & +# 1710| getVariable().getInitializer(): [Initializer] initializer for r +# 1710| getExpr(): [FunctionCall] call to get +# 1710| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1710| ValueCategory = prvalue +# 1710| getQualifier(): [VariableAccess] unnamed_local_variable +# 1710| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1710| ValueCategory = prvalue(load) +# 1710| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1710| Type = [Struct] StructuredBindingTupleNoRefGet +# 1710| ValueCategory = lvalue +# 1710| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1710| Type = [LValueReferenceType] int & +# 1710| ValueCategory = prvalue +# 1710| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1710| Type = [IntType] int +# 1710| ValueCategory = lvalue +# 1711| getStmt(3): [DeclStmt] declaration +# 1711| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rv +# 1711| Type = [RValueReferenceType] int && +# 1711| getVariable().getInitializer(): [Initializer] initializer for rv +# 1711| getExpr(): [FunctionCall] call to get +# 1711| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1711| ValueCategory = prvalue +# 1711| getQualifier(): [VariableAccess] unnamed_local_variable +# 1711| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1711| ValueCategory = prvalue(load) +# 1711| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1711| Type = [Struct] StructuredBindingTupleNoRefGet +# 1711| ValueCategory = lvalue +# 1711| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1711| Type = [LValueReferenceType] int & +# 1711| ValueCategory = prvalue +# 1711| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1711| Type = [IntType] int +# 1711| ValueCategory = xvalue +# 1712| getStmt(4): [ExprStmt] ExprStmt +# 1712| getExpr(): [AssignExpr] ... = ... +# 1712| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1712| ValueCategory = lvalue +# 1712| getLValue(): [VariableAccess] i +# 1712| Type = [RValueReferenceType] type && +# 1712| ValueCategory = prvalue(load) +# 1712| getRValue(): [Literal] 4 +# 1712| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1712| Value = [Literal] 4 +# 1712| ValueCategory = prvalue +# 1712| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1712| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1712| ValueCategory = lvalue +# 1713| getStmt(5): [DeclStmt] declaration +# 1713| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ri +# 1713| Type = [LValueReferenceType] int & +# 1713| getVariable().getInitializer(): [Initializer] initializer for ri +# 1713| getExpr(): [VariableAccess] i +# 1713| Type = [RValueReferenceType] type && +# 1713| ValueCategory = prvalue(load) +# 1713| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1713| Type = [LValueReferenceType] type & +# 1713| ValueCategory = prvalue +# 1713| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1713| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1713| ValueCategory = lvalue +# 1714| getStmt(6): [DeclStmt] declaration +# 1714| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1714| Type = [IntType] int +# 1714| getVariable().getInitializer(): [Initializer] initializer for v +# 1714| getExpr(): [VariableAccess] i +# 1714| Type = [RValueReferenceType] type && +# 1714| ValueCategory = prvalue(load) +# 1714| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1714| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1714| ValueCategory = prvalue(load) +# 1715| getStmt(7): [ExprStmt] ExprStmt +# 1715| getExpr(): [AssignExpr] ... = ... +# 1715| Type = [IntType] int +# 1715| ValueCategory = lvalue +# 1715| getLValue(): [VariableAccess] r +# 1715| Type = [LValueReferenceType] int & +# 1715| ValueCategory = prvalue(load) +# 1715| getRValue(): [Literal] 5 +# 1715| Type = [IntType] int +# 1715| Value = [Literal] 5 +# 1715| ValueCategory = prvalue +# 1715| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1715| Type = [IntType] int +# 1715| ValueCategory = lvalue +# 1716| getStmt(8): [DeclStmt] declaration +# 1716| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr +# 1716| Type = [LValueReferenceType] int & +# 1716| getVariable().getInitializer(): [Initializer] initializer for rr +# 1716| getExpr(): [VariableAccess] r +# 1716| Type = [LValueReferenceType] int & +# 1716| ValueCategory = prvalue(load) +# 1716| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1716| Type = [LValueReferenceType] int & +# 1716| ValueCategory = prvalue +# 1716| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1716| Type = [IntType] int +# 1716| ValueCategory = lvalue +# 1717| getStmt(9): [DeclStmt] declaration +# 1717| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1717| Type = [IntType] int +# 1717| getVariable().getInitializer(): [Initializer] initializer for w +# 1717| getExpr(): [VariableAccess] r +# 1717| Type = [LValueReferenceType] int & +# 1717| ValueCategory = prvalue(load) +# 1717| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1717| Type = [IntType] int +# 1717| ValueCategory = prvalue(load) +# 1719| getStmt(3): [ReturnStmt] return ... +# 1721| [TopLevelFunction] void array_structured_binding_non_ref_init() +# 1721| : +# 1721| getEntryPoint(): [BlockStmt] { ... } +# 1722| getStmt(0): [DeclStmt] declaration +# 1722| getDeclarationEntry(0): [VariableDeclarationEntry] definition of xs +# 1722| Type = [ArrayType] int[2] +# 1722| getVariable().getInitializer(): [Initializer] initializer for xs +# 1722| getExpr(): [ArrayAggregateLiteral] {...} +# 1722| Type = [ArrayType] int[2] +# 1722| ValueCategory = prvalue +# 1722| getAnElementExpr(0): [Literal] 1 +# 1722| Type = [IntType] int +# 1722| Value = [Literal] 1 +# 1722| ValueCategory = prvalue +# 1722| getAnElementExpr(1): [Literal] 2 +# 1722| Type = [IntType] int +# 1722| Value = [Literal] 2 +# 1722| ValueCategory = prvalue +# 1723| getStmt(1): [DeclStmt] declaration +# 1723| getDeclarationEntry(0): [VariableDeclarationEntry] definition of (unnamed local variable) +# 1723| Type = [ArrayType] int[2] +# 1723| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) +# 1723| getExpr(): [VariableAccess] xs +# 1723| Type = [ArrayType] int[2] +# 1723| ValueCategory = prvalue(load) +# 1723| getDeclarationEntry(1): [VariableDeclarationEntry] definition of x0 +# 1723| Type = [IntType] int #-----| getVariable().getInitializer(): [Initializer] initializer for x0 #-----| getExpr(): [ArrayExpr] access to array #-----| Type = [IntType] int @@ -13353,8 +13863,8 @@ ir.cpp: #-----| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion #-----| Type = [IntPointerType] int * #-----| ValueCategory = prvalue -# 1676| getDeclarationEntry(2): [VariableDeclarationEntry] definition of x1 -# 1676| Type = [IntType] int +# 1723| getDeclarationEntry(2): [VariableDeclarationEntry] definition of x1 +# 1723| Type = [IntType] int #-----| getVariable().getInitializer(): [Initializer] initializer for x1 #-----| getExpr(): [ArrayExpr] access to array #-----| Type = [IntType] int @@ -13369,351 +13879,351 @@ ir.cpp: #-----| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion #-----| Type = [IntPointerType] int * #-----| ValueCategory = prvalue -# 1677| getStmt(2): [ReturnStmt] return ... -# 1679| [CopyAssignmentOperator] CapturedLambdaMyObj& CapturedLambdaMyObj::operator=(CapturedLambdaMyObj const&) -# 1679| : +# 1724| getStmt(2): [ReturnStmt] return ... +# 1726| [CopyAssignmentOperator] CapturedLambdaMyObj& CapturedLambdaMyObj::operator=(CapturedLambdaMyObj const&) +# 1726| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CapturedLambdaMyObj & -# 1679| [MoveAssignmentOperator] CapturedLambdaMyObj& CapturedLambdaMyObj::operator=(CapturedLambdaMyObj&&) -# 1679| : +# 1726| [MoveAssignmentOperator] CapturedLambdaMyObj& CapturedLambdaMyObj::operator=(CapturedLambdaMyObj&&) +# 1726| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CapturedLambdaMyObj && -# 1679| [CopyConstructor] void CapturedLambdaMyObj::CapturedLambdaMyObj(CapturedLambdaMyObj const&) -# 1679| : +# 1726| [CopyConstructor] void CapturedLambdaMyObj::CapturedLambdaMyObj(CapturedLambdaMyObj const&) +# 1726| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CapturedLambdaMyObj & -# 1679| [MoveConstructor] void CapturedLambdaMyObj::CapturedLambdaMyObj(CapturedLambdaMyObj&&) -# 1679| : +# 1726| [MoveConstructor] void CapturedLambdaMyObj::CapturedLambdaMyObj(CapturedLambdaMyObj&&) +# 1726| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CapturedLambdaMyObj && -# 1682| [Constructor] void CapturedLambdaMyObj::CapturedLambdaMyObj() -# 1682| : -# 1682| : -# 1682| getEntryPoint(): [BlockStmt] { ... } -# 1682| getStmt(0): [ReturnStmt] return ... -# 1685| [TopLevelFunction] void captured_lambda(int, int&, int&&) -# 1685| : -# 1685| getParameter(0): [Parameter] x -# 1685| Type = [IntType] int -# 1685| getParameter(1): [Parameter] y -# 1685| Type = [LValueReferenceType] int & -# 1685| getParameter(2): [Parameter] z -# 1685| Type = [RValueReferenceType] int && -# 1686| getEntryPoint(): [BlockStmt] { ... } -# 1687| getStmt(0): [DeclStmt] declaration -# 1687| getDeclarationEntry(0): [VariableDeclarationEntry] definition of obj1 -# 1687| Type = [LValueReferenceType] const CapturedLambdaMyObj & -# 1687| getVariable().getInitializer(): [Initializer] initializer for obj1 -# 1687| getExpr(): [ConstructorCall] call to CapturedLambdaMyObj -# 1687| Type = [VoidType] void -# 1687| ValueCategory = prvalue -# 1687| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1687| Type = [LValueReferenceType] const CapturedLambdaMyObj & -# 1687| ValueCategory = prvalue -# 1687| getExpr(): [CStyleCast] (const CapturedLambdaMyObj)... -# 1687| Conversion = [GlvalueConversion] glvalue conversion -# 1687| Type = [SpecifiedType] const CapturedLambdaMyObj -# 1687| ValueCategory = lvalue -# 1687| getExpr(): [TemporaryObjectExpr] temporary object -# 1687| Type = [Class] CapturedLambdaMyObj -# 1687| ValueCategory = lvalue -# 1688| getStmt(1): [DeclStmt] declaration -# 1688| getDeclarationEntry(0): [VariableDeclarationEntry] definition of obj2 -# 1688| Type = [Class] CapturedLambdaMyObj -# 1688| getVariable().getInitializer(): [Initializer] initializer for obj2 -# 1688| getExpr(): [ConstructorCall] call to CapturedLambdaMyObj -# 1688| Type = [VoidType] void -# 1688| ValueCategory = prvalue -# 1690| getStmt(2): [DeclStmt] declaration -# 1690| getDeclarationEntry(0): [VariableDeclarationEntry] definition of lambda_outer -# 1690| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1690| getVariable().getInitializer(): [Initializer] initializer for lambda_outer -# 1690| getExpr(): [LambdaExpression] [...](...){...} -# 1690| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1690| ValueCategory = prvalue -# 1690| getInitializer(): [ClassAggregateLiteral] {...} -# 1690| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1690| ValueCategory = prvalue -# 1690| getAFieldExpr(obj1): [VariableAccess] obj1 -# 1690| Type = [LValueReferenceType] const CapturedLambdaMyObj & -# 1690| ValueCategory = prvalue(load) -# 1690| getAFieldExpr(obj2): [VariableAccess] obj2 -# 1690| Type = [Class] CapturedLambdaMyObj -# 1690| ValueCategory = prvalue(load) -# 1690| getAFieldExpr(x): [VariableAccess] x -# 1690| Type = [IntType] int -# 1690| ValueCategory = prvalue(load) -# 1690| getAFieldExpr(y): [VariableAccess] y -# 1690| Type = [LValueReferenceType] int & -# 1690| ValueCategory = prvalue(load) -# 1690| getAFieldExpr(z): [VariableAccess] z -# 1690| Type = [RValueReferenceType] int && -# 1690| ValueCategory = prvalue(load) +# 1729| [Constructor] void CapturedLambdaMyObj::CapturedLambdaMyObj() +# 1729| : +# 1729| : +# 1729| getEntryPoint(): [BlockStmt] { ... } +# 1729| getStmt(0): [ReturnStmt] return ... +# 1732| [TopLevelFunction] void captured_lambda(int, int&, int&&) +# 1732| : +# 1732| getParameter(0): [Parameter] x +# 1732| Type = [IntType] int +# 1732| getParameter(1): [Parameter] y +# 1732| Type = [LValueReferenceType] int & +# 1732| getParameter(2): [Parameter] z +# 1732| Type = [RValueReferenceType] int && +# 1733| getEntryPoint(): [BlockStmt] { ... } +# 1734| getStmt(0): [DeclStmt] declaration +# 1734| getDeclarationEntry(0): [VariableDeclarationEntry] definition of obj1 +# 1734| Type = [LValueReferenceType] const CapturedLambdaMyObj & +# 1734| getVariable().getInitializer(): [Initializer] initializer for obj1 +# 1734| getExpr(): [ConstructorCall] call to CapturedLambdaMyObj +# 1734| Type = [VoidType] void +# 1734| ValueCategory = prvalue +# 1734| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1734| Type = [LValueReferenceType] const CapturedLambdaMyObj & +# 1734| ValueCategory = prvalue +# 1734| getExpr(): [CStyleCast] (const CapturedLambdaMyObj)... +# 1734| Conversion = [GlvalueConversion] glvalue conversion +# 1734| Type = [SpecifiedType] const CapturedLambdaMyObj +# 1734| ValueCategory = lvalue +# 1734| getExpr(): [TemporaryObjectExpr] temporary object +# 1734| Type = [Class] CapturedLambdaMyObj +# 1734| ValueCategory = lvalue +# 1735| getStmt(1): [DeclStmt] declaration +# 1735| getDeclarationEntry(0): [VariableDeclarationEntry] definition of obj2 +# 1735| Type = [Class] CapturedLambdaMyObj +# 1735| getVariable().getInitializer(): [Initializer] initializer for obj2 +# 1735| getExpr(): [ConstructorCall] call to CapturedLambdaMyObj +# 1735| Type = [VoidType] void +# 1735| ValueCategory = prvalue +# 1737| getStmt(2): [DeclStmt] declaration +# 1737| getDeclarationEntry(0): [VariableDeclarationEntry] definition of lambda_outer +# 1737| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1737| getVariable().getInitializer(): [Initializer] initializer for lambda_outer +# 1737| getExpr(): [LambdaExpression] [...](...){...} +# 1737| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1737| ValueCategory = prvalue +# 1737| getInitializer(): [ClassAggregateLiteral] {...} +# 1737| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1737| ValueCategory = prvalue +# 1737| getAFieldExpr(obj1): [VariableAccess] obj1 +# 1737| Type = [LValueReferenceType] const CapturedLambdaMyObj & +# 1737| ValueCategory = prvalue(load) +# 1737| getAFieldExpr(obj2): [VariableAccess] obj2 +# 1737| Type = [Class] CapturedLambdaMyObj +# 1737| ValueCategory = prvalue(load) +# 1737| getAFieldExpr(x): [VariableAccess] x +# 1737| Type = [IntType] int +# 1737| ValueCategory = prvalue(load) +# 1737| getAFieldExpr(y): [VariableAccess] y +# 1737| Type = [LValueReferenceType] int & +# 1737| ValueCategory = prvalue(load) +# 1737| getAFieldExpr(z): [VariableAccess] z +# 1737| Type = [RValueReferenceType] int && +# 1737| ValueCategory = prvalue(load) #-----| getAFieldExpr(obj1).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [SpecifiedType] const CapturedLambdaMyObj #-----| ValueCategory = prvalue(load) -# 1692| getAFieldExpr(y).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1692| Type = [IntType] int -# 1692| ValueCategory = prvalue(load) -# 1692| getAFieldExpr(z).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1692| Type = [IntType] int -# 1692| ValueCategory = prvalue(load) -# 1693| getStmt(3): [ReturnStmt] return ... -# 1690| [CopyAssignmentOperator] (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)& (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator=((void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25) const&) -# 1690| : +# 1739| getAFieldExpr(y).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1739| Type = [IntType] int +# 1739| ValueCategory = prvalue(load) +# 1739| getAFieldExpr(z).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1739| Type = [IntType] int +# 1739| ValueCategory = prvalue(load) +# 1740| getStmt(3): [ReturnStmt] return ... +# 1737| [CopyAssignmentOperator] (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25)& (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25)::operator=((void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25) const&) +# 1737| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1690, col. 25 & -# 1690| [CopyConstructor] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::(unnamed constructor)((void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25) const&) -# 1690| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1737, col. 25 & +# 1737| [CopyConstructor] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25)::(unnamed constructor)((void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25) const&) +# 1737| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1690, col. 25 & -# 1690| [MoveConstructor] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::(unnamed constructor)((void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)&&) -# 1690| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1737, col. 25 & +# 1737| [MoveConstructor] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25)::(unnamed constructor)((void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25)&&) +# 1737| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] lambda [] type at line 1690, col. 25 && -# 1690| [Constructor] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::(unnamed constructor)() -# 1690| : -# 1690| [ConstMemberFunction] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const -# 1690| : -# 1690| getEntryPoint(): [BlockStmt] { ... } -# 1691| getStmt(0): [DeclStmt] declaration -# 1691| getDeclarationEntry(0): [VariableDeclarationEntry] definition of lambda_inner -# 1691| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1691| getVariable().getInitializer(): [Initializer] initializer for lambda_inner -# 1691| getExpr(): [LambdaExpression] [...](...){...} -# 1691| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1691| ValueCategory = prvalue -# 1691| getInitializer(): [ClassAggregateLiteral] {...} -# 1691| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1691| ValueCategory = prvalue -# 1691| getAFieldExpr(obj1): [PointerFieldAccess] obj1 -# 1691| Type = [SpecifiedType] const CapturedLambdaMyObj -# 1691| ValueCategory = prvalue(load) -# 1691| getQualifier(): [ThisExpr] this -# 1691| Type = [PointerType] lambda [] type at line 1691, col. 29 * -# 1691| ValueCategory = prvalue(load) -# 1691| getAFieldExpr(obj2): [PointerFieldAccess] obj2 -# 1691| Type = [Class] CapturedLambdaMyObj -# 1691| ValueCategory = prvalue(load) -# 1691| getQualifier(): [ThisExpr] this -# 1691| Type = [PointerType] lambda [] type at line 1691, col. 29 * -# 1691| ValueCategory = prvalue(load) -# 1691| getAFieldExpr(x): [PointerFieldAccess] x -# 1691| Type = [IntType] int -# 1691| ValueCategory = prvalue(load) -# 1691| getQualifier(): [ThisExpr] this -# 1691| Type = [PointerType] const lambda [] type at line 1690, col. 25 * -# 1691| ValueCategory = prvalue(load) -# 1691| getAFieldExpr(y): [PointerFieldAccess] y -# 1691| Type = [IntType] int -# 1691| ValueCategory = prvalue(load) -# 1691| getQualifier(): [ThisExpr] this -# 1691| Type = [PointerType] const lambda [] type at line 1690, col. 25 * -# 1691| ValueCategory = prvalue(load) -# 1691| getAFieldExpr(z): [PointerFieldAccess] z -# 1691| Type = [IntType] int -# 1691| ValueCategory = prvalue(load) -# 1691| getQualifier(): [ThisExpr] this -# 1691| Type = [PointerType] const lambda [] type at line 1690, col. 25 * -# 1691| ValueCategory = prvalue(load) -# 1692| getStmt(1): [ReturnStmt] return ... -# 1691| [CopyAssignmentOperator] (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)& (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)::operator=((void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29) const&) -# 1691| : +#-----| Type = [RValueReferenceType] lambda [] type at line 1737, col. 25 && +# 1737| [Constructor] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25)::(unnamed constructor)() +# 1737| : +# 1737| [ConstMemberFunction] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25)::operator()() const +# 1737| : +# 1737| getEntryPoint(): [BlockStmt] { ... } +# 1738| getStmt(0): [DeclStmt] declaration +# 1738| getDeclarationEntry(0): [VariableDeclarationEntry] definition of lambda_inner +# 1738| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1738| getVariable().getInitializer(): [Initializer] initializer for lambda_inner +# 1738| getExpr(): [LambdaExpression] [...](...){...} +# 1738| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1738| ValueCategory = prvalue +# 1738| getInitializer(): [ClassAggregateLiteral] {...} +# 1738| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1738| ValueCategory = prvalue +# 1738| getAFieldExpr(obj1): [PointerFieldAccess] obj1 +# 1738| Type = [SpecifiedType] const CapturedLambdaMyObj +# 1738| ValueCategory = prvalue(load) +# 1738| getQualifier(): [ThisExpr] this +# 1738| Type = [PointerType] lambda [] type at line 1738, col. 29 * +# 1738| ValueCategory = prvalue(load) +# 1738| getAFieldExpr(obj2): [PointerFieldAccess] obj2 +# 1738| Type = [Class] CapturedLambdaMyObj +# 1738| ValueCategory = prvalue(load) +# 1738| getQualifier(): [ThisExpr] this +# 1738| Type = [PointerType] lambda [] type at line 1738, col. 29 * +# 1738| ValueCategory = prvalue(load) +# 1738| getAFieldExpr(x): [PointerFieldAccess] x +# 1738| Type = [IntType] int +# 1738| ValueCategory = prvalue(load) +# 1738| getQualifier(): [ThisExpr] this +# 1738| Type = [PointerType] const lambda [] type at line 1737, col. 25 * +# 1738| ValueCategory = prvalue(load) +# 1738| getAFieldExpr(y): [PointerFieldAccess] y +# 1738| Type = [IntType] int +# 1738| ValueCategory = prvalue(load) +# 1738| getQualifier(): [ThisExpr] this +# 1738| Type = [PointerType] const lambda [] type at line 1737, col. 25 * +# 1738| ValueCategory = prvalue(load) +# 1738| getAFieldExpr(z): [PointerFieldAccess] z +# 1738| Type = [IntType] int +# 1738| ValueCategory = prvalue(load) +# 1738| getQualifier(): [ThisExpr] this +# 1738| Type = [PointerType] const lambda [] type at line 1737, col. 25 * +# 1738| ValueCategory = prvalue(load) +# 1739| getStmt(1): [ReturnStmt] return ... +# 1738| [CopyAssignmentOperator] (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25)::operator()() const)::(lambda [] type at line 1738, col. 29)& (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25)::operator()() const)::(lambda [] type at line 1738, col. 29)::operator=((void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25)::operator()() const)::(lambda [] type at line 1738, col. 29) const&) +# 1738| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1691, col. 29 & -# 1691| [CopyConstructor] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)::(unnamed constructor)((void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29) const&) -# 1691| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1738, col. 29 & +# 1738| [CopyConstructor] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25)::operator()() const)::(lambda [] type at line 1738, col. 29)::(unnamed constructor)((void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25)::operator()() const)::(lambda [] type at line 1738, col. 29) const&) +# 1738| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1691, col. 29 & -# 1691| [MoveConstructor] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)::(unnamed constructor)((void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)&&) -# 1691| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1738, col. 29 & +# 1738| [MoveConstructor] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25)::operator()() const)::(lambda [] type at line 1738, col. 29)::(unnamed constructor)((void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25)::operator()() const)::(lambda [] type at line 1738, col. 29)&&) +# 1738| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] lambda [] type at line 1691, col. 29 && -# 1691| [Constructor] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)::(unnamed constructor)() -# 1691| : -# 1691| [ConstMemberFunction] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)::operator()() const -# 1691| : -# 1691| getEntryPoint(): [BlockStmt] { ... } -# 1691| getStmt(0): [EmptyStmt] ; -# 1691| getStmt(1): [ReturnStmt] return ... -# 1695| [TopLevelFunction] int goto_on_same_line() -# 1695| : -# 1695| getEntryPoint(): [BlockStmt] { ... } -# 1696| getStmt(0): [DeclStmt] declaration -# 1696| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1696| Type = [IntType] int -# 1696| getVariable().getInitializer(): [Initializer] initializer for x -# 1696| getExpr(): [Literal] 42 -# 1696| Type = [IntType] int -# 1696| Value = [Literal] 42 -# 1696| ValueCategory = prvalue -# 1697| getStmt(1): [GotoStmt] goto ... -# 1697| getStmt(2): [LabelStmt] label ...: -# 1698| getStmt(3): [ReturnStmt] return ... -# 1698| getExpr(): [VariableAccess] x -# 1698| Type = [IntType] int -# 1698| ValueCategory = prvalue(load) -# 1701| [CopyAssignmentOperator] TrivialLambdaClass& TrivialLambdaClass::operator=(TrivialLambdaClass const&) -# 1701| : +#-----| Type = [RValueReferenceType] lambda [] type at line 1738, col. 29 && +# 1738| [Constructor] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25)::operator()() const)::(lambda [] type at line 1738, col. 29)::(unnamed constructor)() +# 1738| : +# 1738| [ConstMemberFunction] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25)::operator()() const)::(lambda [] type at line 1738, col. 29)::operator()() const +# 1738| : +# 1738| getEntryPoint(): [BlockStmt] { ... } +# 1738| getStmt(0): [EmptyStmt] ; +# 1738| getStmt(1): [ReturnStmt] return ... +# 1742| [TopLevelFunction] int goto_on_same_line() +# 1742| : +# 1742| getEntryPoint(): [BlockStmt] { ... } +# 1743| getStmt(0): [DeclStmt] declaration +# 1743| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1743| Type = [IntType] int +# 1743| getVariable().getInitializer(): [Initializer] initializer for x +# 1743| getExpr(): [Literal] 42 +# 1743| Type = [IntType] int +# 1743| Value = [Literal] 42 +# 1743| ValueCategory = prvalue +# 1744| getStmt(1): [GotoStmt] goto ... +# 1744| getStmt(2): [LabelStmt] label ...: +# 1745| getStmt(3): [ReturnStmt] return ... +# 1745| getExpr(): [VariableAccess] x +# 1745| Type = [IntType] int +# 1745| ValueCategory = prvalue(load) +# 1748| [CopyAssignmentOperator] TrivialLambdaClass& TrivialLambdaClass::operator=(TrivialLambdaClass const&) +# 1748| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const TrivialLambdaClass & -# 1701| [MoveAssignmentOperator] TrivialLambdaClass& TrivialLambdaClass::operator=(TrivialLambdaClass&&) -# 1701| : +# 1748| [MoveAssignmentOperator] TrivialLambdaClass& TrivialLambdaClass::operator=(TrivialLambdaClass&&) +# 1748| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] TrivialLambdaClass && -# 1703| [ConstMemberFunction] void TrivialLambdaClass::m() const -# 1703| : -# 1703| getEntryPoint(): [BlockStmt] { ... } -# 1704| getStmt(0): [DeclStmt] declaration -# 1704| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_m_outer -# 1704| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1704| getVariable().getInitializer(): [Initializer] initializer for l_m_outer -# 1704| getExpr(): [LambdaExpression] [...](...){...} -# 1704| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1704| ValueCategory = prvalue -# 1704| getInitializer(): [ClassAggregateLiteral] {...} -# 1704| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1704| ValueCategory = prvalue -# 1704| getAFieldExpr((captured this)): [PointerDereferenceExpr] * ... -# 1704| Type = [SpecifiedType] const TrivialLambdaClass -# 1704| ValueCategory = prvalue(load) -# 1704| getOperand(): [ThisExpr] this -# 1704| Type = [SpecifiedType] const TrivialLambdaClass *const -# 1704| ValueCategory = prvalue(load) -# 1711| getStmt(1): [ReturnStmt] return ... -# 1704| [CopyAssignmentOperator] (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)& (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator=((void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26) const&) -# 1704| : +# 1750| [ConstMemberFunction] void TrivialLambdaClass::m() const +# 1750| : +# 1750| getEntryPoint(): [BlockStmt] { ... } +# 1751| getStmt(0): [DeclStmt] declaration +# 1751| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_m_outer +# 1751| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1751| getVariable().getInitializer(): [Initializer] initializer for l_m_outer +# 1751| getExpr(): [LambdaExpression] [...](...){...} +# 1751| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1751| ValueCategory = prvalue +# 1751| getInitializer(): [ClassAggregateLiteral] {...} +# 1751| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1751| ValueCategory = prvalue +# 1751| getAFieldExpr((captured this)): [PointerDereferenceExpr] * ... +# 1751| Type = [SpecifiedType] const TrivialLambdaClass +# 1751| ValueCategory = prvalue(load) +# 1751| getOperand(): [ThisExpr] this +# 1751| Type = [SpecifiedType] const TrivialLambdaClass *const +# 1751| ValueCategory = prvalue(load) +# 1758| getStmt(1): [ReturnStmt] return ... +# 1751| [CopyAssignmentOperator] (void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26)& (void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26)::operator=((void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26) const&) +# 1751| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1704, col. 26 & -# 1704| [CopyConstructor] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::(unnamed constructor)((void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26) const&) -# 1704| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1751, col. 26 & +# 1751| [CopyConstructor] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26)::(unnamed constructor)((void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26) const&) +# 1751| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1704, col. 26 & -# 1704| [MoveConstructor] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::(unnamed constructor)((void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)&&) -# 1704| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1751, col. 26 & +# 1751| [MoveConstructor] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26)::(unnamed constructor)((void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26)&&) +# 1751| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] lambda [] type at line 1704, col. 26 && -# 1704| [Constructor] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::(unnamed constructor)() -# 1704| : -# 1704| [ConstMemberFunction] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const -# 1704| : -# 1704| getEntryPoint(): [BlockStmt] { ... } -# 1705| getStmt(0): [ExprStmt] ExprStmt -# 1705| getExpr(): [FunctionCall] call to m -# 1705| Type = [VoidType] void -# 1705| ValueCategory = prvalue -# 1705| getQualifier(): [AddressOfExpr] & ... -# 1705| Type = [PointerType] const TrivialLambdaClass * -# 1705| ValueCategory = prvalue -# 1705| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] (captured this) -# 1705| Type = [SpecifiedType] const TrivialLambdaClass -# 1705| ValueCategory = lvalue -# 1705| getQualifier(): [ThisExpr] this -# 1705| Type = [PointerType] const lambda [] type at line 1704, col. 26 * -# 1705| ValueCategory = prvalue(load) -# 1707| getStmt(1): [DeclStmt] declaration -# 1707| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_m_inner -# 1707| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1707| getVariable().getInitializer(): [Initializer] initializer for l_m_inner -# 1707| getExpr(): [LambdaExpression] [...](...){...} -# 1707| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1707| ValueCategory = prvalue -# 1707| getInitializer(): [ClassAggregateLiteral] {...} -# 1707| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1707| ValueCategory = prvalue -# 1707| getAFieldExpr((captured this)): [PointerFieldAccess] (captured this) -# 1707| Type = [SpecifiedType] const TrivialLambdaClass -# 1707| ValueCategory = prvalue(load) -# 1707| getQualifier(): [ThisExpr] this -# 1707| Type = [PointerType] lambda [] type at line 1707, col. 30 * -# 1707| ValueCategory = prvalue(load) -# 1710| getStmt(2): [ReturnStmt] return ... -# 1707| [CopyAssignmentOperator] (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)& (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)::operator=((void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30) const&) -# 1707| : +#-----| Type = [RValueReferenceType] lambda [] type at line 1751, col. 26 && +# 1751| [Constructor] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26)::(unnamed constructor)() +# 1751| : +# 1751| [ConstMemberFunction] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26)::operator()() const +# 1751| : +# 1751| getEntryPoint(): [BlockStmt] { ... } +# 1752| getStmt(0): [ExprStmt] ExprStmt +# 1752| getExpr(): [FunctionCall] call to m +# 1752| Type = [VoidType] void +# 1752| ValueCategory = prvalue +# 1752| getQualifier(): [AddressOfExpr] & ... +# 1752| Type = [PointerType] const TrivialLambdaClass * +# 1752| ValueCategory = prvalue +# 1752| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] (captured this) +# 1752| Type = [SpecifiedType] const TrivialLambdaClass +# 1752| ValueCategory = lvalue +# 1752| getQualifier(): [ThisExpr] this +# 1752| Type = [PointerType] const lambda [] type at line 1751, col. 26 * +# 1752| ValueCategory = prvalue(load) +# 1754| getStmt(1): [DeclStmt] declaration +# 1754| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_m_inner +# 1754| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1754| getVariable().getInitializer(): [Initializer] initializer for l_m_inner +# 1754| getExpr(): [LambdaExpression] [...](...){...} +# 1754| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1754| ValueCategory = prvalue +# 1754| getInitializer(): [ClassAggregateLiteral] {...} +# 1754| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1754| ValueCategory = prvalue +# 1754| getAFieldExpr((captured this)): [PointerFieldAccess] (captured this) +# 1754| Type = [SpecifiedType] const TrivialLambdaClass +# 1754| ValueCategory = prvalue(load) +# 1754| getQualifier(): [ThisExpr] this +# 1754| Type = [PointerType] lambda [] type at line 1754, col. 30 * +# 1754| ValueCategory = prvalue(load) +# 1757| getStmt(2): [ReturnStmt] return ... +# 1754| [CopyAssignmentOperator] (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26)::operator()() const)::(lambda [] type at line 1754, col. 30)& (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26)::operator()() const)::(lambda [] type at line 1754, col. 30)::operator=((void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26)::operator()() const)::(lambda [] type at line 1754, col. 30) const&) +# 1754| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1707, col. 30 & -# 1707| [CopyConstructor] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)::(unnamed constructor)((void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30) const&) -# 1707| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1754, col. 30 & +# 1754| [CopyConstructor] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26)::operator()() const)::(lambda [] type at line 1754, col. 30)::(unnamed constructor)((void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26)::operator()() const)::(lambda [] type at line 1754, col. 30) const&) +# 1754| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1707, col. 30 & -# 1707| [MoveConstructor] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)::(unnamed constructor)((void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)&&) -# 1707| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1754, col. 30 & +# 1754| [MoveConstructor] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26)::operator()() const)::(lambda [] type at line 1754, col. 30)::(unnamed constructor)((void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26)::operator()() const)::(lambda [] type at line 1754, col. 30)&&) +# 1754| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] lambda [] type at line 1707, col. 30 && -# 1707| [Constructor] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)::(unnamed constructor)() -# 1707| : -# 1707| [ConstMemberFunction] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)::operator()() const -# 1707| : -# 1707| getEntryPoint(): [BlockStmt] { ... } -# 1708| getStmt(0): [ExprStmt] ExprStmt -# 1708| getExpr(): [FunctionCall] call to m -# 1708| Type = [VoidType] void -# 1708| ValueCategory = prvalue -# 1708| getQualifier(): [AddressOfExpr] & ... -# 1708| Type = [PointerType] const TrivialLambdaClass * -# 1708| ValueCategory = prvalue -# 1708| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] (captured this) -# 1708| Type = [SpecifiedType] const TrivialLambdaClass -# 1708| ValueCategory = lvalue -# 1708| getQualifier(): [ThisExpr] this -# 1708| Type = [PointerType] const lambda [] type at line 1707, col. 30 * -# 1708| ValueCategory = prvalue(load) -# 1709| getStmt(1): [ReturnStmt] return ... -# 1714| [TopLevelFunction] void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&) -# 1714| : -# 1714| getParameter(0): [Parameter] p1 -# 1714| Type = [Class] TrivialLambdaClass -# 1714| getParameter(1): [Parameter] p2 -# 1714| Type = [LValueReferenceType] TrivialLambdaClass & -# 1714| getParameter(2): [Parameter] p3 -# 1714| Type = [RValueReferenceType] TrivialLambdaClass && -# 1714| getEntryPoint(): [BlockStmt] { ... } -# 1715| getStmt(0): [DeclStmt] declaration -# 1715| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l1 -# 1715| Type = [SpecifiedType] const TrivialLambdaClass -# 1716| getStmt(1): [DeclStmt] declaration -# 1716| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l2 -# 1716| Type = [LValueReferenceType] const TrivialLambdaClass & -# 1716| getVariable().getInitializer(): [Initializer] initializer for l2 -# 1716| getExpr(): [Literal] 0 -# 1716| Type = [Class] TrivialLambdaClass -# 1716| Value = [Literal] 0 -# 1716| ValueCategory = prvalue -# 1716| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1716| Type = [LValueReferenceType] const TrivialLambdaClass & -# 1716| ValueCategory = prvalue -# 1716| getExpr(): [CStyleCast] (const TrivialLambdaClass)... -# 1716| Conversion = [GlvalueConversion] glvalue conversion -# 1716| Type = [SpecifiedType] const TrivialLambdaClass -# 1716| ValueCategory = lvalue -# 1716| getExpr(): [TemporaryObjectExpr] temporary object -# 1716| Type = [Class] TrivialLambdaClass -# 1716| ValueCategory = lvalue -# 1718| getStmt(2): [DeclStmt] declaration -# 1718| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_outer1 -# 1718| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1718| getVariable().getInitializer(): [Initializer] initializer for l_outer1 -# 1718| getExpr(): [LambdaExpression] [...](...){...} -# 1718| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1718| ValueCategory = prvalue -# 1718| getInitializer(): [ClassAggregateLiteral] {...} -# 1718| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1718| ValueCategory = prvalue -# 1718| getAFieldExpr(p1): [VariableAccess] p1 -# 1718| Type = [Class] TrivialLambdaClass -# 1718| ValueCategory = prvalue(load) -# 1718| getAFieldExpr(p2): [VariableAccess] p2 -# 1718| Type = [LValueReferenceType] TrivialLambdaClass & -# 1718| ValueCategory = prvalue(load) -# 1718| getAFieldExpr(p3): [VariableAccess] p3 -# 1718| Type = [RValueReferenceType] TrivialLambdaClass && -# 1718| ValueCategory = prvalue(load) -# 1718| getAFieldExpr(l1): [VariableAccess] l1 -# 1718| Type = [SpecifiedType] const TrivialLambdaClass -# 1718| ValueCategory = prvalue(load) -# 1718| getAFieldExpr(l2): [VariableAccess] l2 -# 1718| Type = [LValueReferenceType] const TrivialLambdaClass & -# 1718| ValueCategory = prvalue(load) +#-----| Type = [RValueReferenceType] lambda [] type at line 1754, col. 30 && +# 1754| [Constructor] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26)::operator()() const)::(lambda [] type at line 1754, col. 30)::(unnamed constructor)() +# 1754| : +# 1754| [ConstMemberFunction] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26)::operator()() const)::(lambda [] type at line 1754, col. 30)::operator()() const +# 1754| : +# 1754| getEntryPoint(): [BlockStmt] { ... } +# 1755| getStmt(0): [ExprStmt] ExprStmt +# 1755| getExpr(): [FunctionCall] call to m +# 1755| Type = [VoidType] void +# 1755| ValueCategory = prvalue +# 1755| getQualifier(): [AddressOfExpr] & ... +# 1755| Type = [PointerType] const TrivialLambdaClass * +# 1755| ValueCategory = prvalue +# 1755| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] (captured this) +# 1755| Type = [SpecifiedType] const TrivialLambdaClass +# 1755| ValueCategory = lvalue +# 1755| getQualifier(): [ThisExpr] this +# 1755| Type = [PointerType] const lambda [] type at line 1754, col. 30 * +# 1755| ValueCategory = prvalue(load) +# 1756| getStmt(1): [ReturnStmt] return ... +# 1761| [TopLevelFunction] void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&) +# 1761| : +# 1761| getParameter(0): [Parameter] p1 +# 1761| Type = [Class] TrivialLambdaClass +# 1761| getParameter(1): [Parameter] p2 +# 1761| Type = [LValueReferenceType] TrivialLambdaClass & +# 1761| getParameter(2): [Parameter] p3 +# 1761| Type = [RValueReferenceType] TrivialLambdaClass && +# 1761| getEntryPoint(): [BlockStmt] { ... } +# 1762| getStmt(0): [DeclStmt] declaration +# 1762| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l1 +# 1762| Type = [SpecifiedType] const TrivialLambdaClass +# 1763| getStmt(1): [DeclStmt] declaration +# 1763| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l2 +# 1763| Type = [LValueReferenceType] const TrivialLambdaClass & +# 1763| getVariable().getInitializer(): [Initializer] initializer for l2 +# 1763| getExpr(): [Literal] 0 +# 1763| Type = [Class] TrivialLambdaClass +# 1763| Value = [Literal] 0 +# 1763| ValueCategory = prvalue +# 1763| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1763| Type = [LValueReferenceType] const TrivialLambdaClass & +# 1763| ValueCategory = prvalue +# 1763| getExpr(): [CStyleCast] (const TrivialLambdaClass)... +# 1763| Conversion = [GlvalueConversion] glvalue conversion +# 1763| Type = [SpecifiedType] const TrivialLambdaClass +# 1763| ValueCategory = lvalue +# 1763| getExpr(): [TemporaryObjectExpr] temporary object +# 1763| Type = [Class] TrivialLambdaClass +# 1763| ValueCategory = lvalue +# 1765| getStmt(2): [DeclStmt] declaration +# 1765| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_outer1 +# 1765| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1765| getVariable().getInitializer(): [Initializer] initializer for l_outer1 +# 1765| getExpr(): [LambdaExpression] [...](...){...} +# 1765| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1765| ValueCategory = prvalue +# 1765| getInitializer(): [ClassAggregateLiteral] {...} +# 1765| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1765| ValueCategory = prvalue +# 1765| getAFieldExpr(p1): [VariableAccess] p1 +# 1765| Type = [Class] TrivialLambdaClass +# 1765| ValueCategory = prvalue(load) +# 1765| getAFieldExpr(p2): [VariableAccess] p2 +# 1765| Type = [LValueReferenceType] TrivialLambdaClass & +# 1765| ValueCategory = prvalue(load) +# 1765| getAFieldExpr(p3): [VariableAccess] p3 +# 1765| Type = [RValueReferenceType] TrivialLambdaClass && +# 1765| ValueCategory = prvalue(load) +# 1765| getAFieldExpr(l1): [VariableAccess] l1 +# 1765| Type = [SpecifiedType] const TrivialLambdaClass +# 1765| ValueCategory = prvalue(load) +# 1765| getAFieldExpr(l2): [VariableAccess] l2 +# 1765| Type = [LValueReferenceType] const TrivialLambdaClass & +# 1765| ValueCategory = prvalue(load) #-----| getAFieldExpr(p2).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [Class] TrivialLambdaClass #-----| ValueCategory = prvalue(load) @@ -13723,723 +14233,723 @@ ir.cpp: #-----| getAFieldExpr(l2).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [SpecifiedType] const TrivialLambdaClass #-----| ValueCategory = prvalue(load) -# 1721| getStmt(3): [ReturnStmt] return ... -# 1718| [CopyAssignmentOperator] (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)& (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator=((void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21) const&) -# 1718| : +# 1768| getStmt(3): [ReturnStmt] return ... +# 1765| [CopyAssignmentOperator] (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21)& (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21)::operator=((void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21) const&) +# 1765| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1718, col. 21 & -# 1718| [CopyConstructor] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::(unnamed constructor)((void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21) const&) -# 1718| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1765, col. 21 & +# 1765| [CopyConstructor] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21)::(unnamed constructor)((void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21) const&) +# 1765| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1718, col. 21 & -# 1718| [MoveConstructor] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::(unnamed constructor)((void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)&&) -# 1718| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1765, col. 21 & +# 1765| [MoveConstructor] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21)::(unnamed constructor)((void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21)&&) +# 1765| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] lambda [] type at line 1718, col. 21 && -# 1718| [Constructor] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::(unnamed constructor)() -# 1718| : -# 1718| [ConstMemberFunction] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const -# 1718| : -# 1718| getEntryPoint(): [BlockStmt] { ... } -# 1719| getStmt(0): [DeclStmt] declaration -# 1719| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_inner1 -# 1719| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1719| getVariable().getInitializer(): [Initializer] initializer for l_inner1 -# 1719| getExpr(): [LambdaExpression] [...](...){...} -# 1719| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1719| ValueCategory = prvalue -# 1719| getInitializer(): [ClassAggregateLiteral] {...} -# 1719| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1719| ValueCategory = prvalue -# 1719| getAFieldExpr(p1): [PointerFieldAccess] p1 -# 1719| Type = [Class] TrivialLambdaClass -# 1719| ValueCategory = prvalue(load) -# 1719| getQualifier(): [ThisExpr] this -# 1719| Type = [PointerType] lambda [] type at line 1719, col. 25 * -# 1719| ValueCategory = prvalue(load) -# 1720| getStmt(1): [ReturnStmt] return ... -# 1719| [CopyAssignmentOperator] (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)& (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)::operator=((void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25) const&) -# 1719| : +#-----| Type = [RValueReferenceType] lambda [] type at line 1765, col. 21 && +# 1765| [Constructor] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21)::(unnamed constructor)() +# 1765| : +# 1765| [ConstMemberFunction] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21)::operator()() const +# 1765| : +# 1765| getEntryPoint(): [BlockStmt] { ... } +# 1766| getStmt(0): [DeclStmt] declaration +# 1766| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_inner1 +# 1766| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1766| getVariable().getInitializer(): [Initializer] initializer for l_inner1 +# 1766| getExpr(): [LambdaExpression] [...](...){...} +# 1766| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1766| ValueCategory = prvalue +# 1766| getInitializer(): [ClassAggregateLiteral] {...} +# 1766| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1766| ValueCategory = prvalue +# 1766| getAFieldExpr(p1): [PointerFieldAccess] p1 +# 1766| Type = [Class] TrivialLambdaClass +# 1766| ValueCategory = prvalue(load) +# 1766| getQualifier(): [ThisExpr] this +# 1766| Type = [PointerType] lambda [] type at line 1766, col. 25 * +# 1766| ValueCategory = prvalue(load) +# 1767| getStmt(1): [ReturnStmt] return ... +# 1766| [CopyAssignmentOperator] (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21)::operator()() const)::(lambda [] type at line 1766, col. 25)& (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21)::operator()() const)::(lambda [] type at line 1766, col. 25)::operator=((void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21)::operator()() const)::(lambda [] type at line 1766, col. 25) const&) +# 1766| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1719, col. 25 & -# 1719| [CopyConstructor] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)::(unnamed constructor)((void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25) const&) -# 1719| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1766, col. 25 & +# 1766| [CopyConstructor] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21)::operator()() const)::(lambda [] type at line 1766, col. 25)::(unnamed constructor)((void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21)::operator()() const)::(lambda [] type at line 1766, col. 25) const&) +# 1766| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1719, col. 25 & -# 1719| [MoveConstructor] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)::(unnamed constructor)((void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)&&) -# 1719| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1766, col. 25 & +# 1766| [MoveConstructor] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21)::operator()() const)::(lambda [] type at line 1766, col. 25)::(unnamed constructor)((void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21)::operator()() const)::(lambda [] type at line 1766, col. 25)&&) +# 1766| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] lambda [] type at line 1719, col. 25 && -# 1719| [Constructor] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)::(unnamed constructor)() -# 1719| : -# 1719| [ConstMemberFunction] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)::operator()() const -# 1719| : -# 1719| getEntryPoint(): [BlockStmt] { ... } -# 1719| getStmt(0): [ReturnStmt] return ... -# 1723| [CopyAssignmentOperator] CopyConstructorWithImplicitArgumentClass& CopyConstructorWithImplicitArgumentClass::operator=(CopyConstructorWithImplicitArgumentClass const&) -# 1723| : +#-----| Type = [RValueReferenceType] lambda [] type at line 1766, col. 25 && +# 1766| [Constructor] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21)::operator()() const)::(lambda [] type at line 1766, col. 25)::(unnamed constructor)() +# 1766| : +# 1766| [ConstMemberFunction] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21)::operator()() const)::(lambda [] type at line 1766, col. 25)::operator()() const +# 1766| : +# 1766| getEntryPoint(): [BlockStmt] { ... } +# 1766| getStmt(0): [ReturnStmt] return ... +# 1770| [CopyAssignmentOperator] CopyConstructorWithImplicitArgumentClass& CopyConstructorWithImplicitArgumentClass::operator=(CopyConstructorWithImplicitArgumentClass const&) +# 1770| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & -# 1726| [Constructor] void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() -# 1726| : -# 1726| : -# 1726| getEntryPoint(): [BlockStmt] { ... } -# 1726| getStmt(0): [ReturnStmt] return ... -# 1727| [CopyConstructor] void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) -# 1727| : -# 1727| getParameter(0): [Parameter] c -# 1727| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & -# 1727| : -# 1727| getEntryPoint(): [BlockStmt] { ... } -# 1728| getStmt(0): [ExprStmt] ExprStmt -# 1728| getExpr(): [AssignExpr] ... = ... -# 1728| Type = [IntType] int -# 1728| ValueCategory = lvalue -# 1728| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] x -# 1728| Type = [IntType] int -# 1728| ValueCategory = lvalue -# 1728| getQualifier(): [ThisExpr] this -# 1728| Type = [PointerType] CopyConstructorWithImplicitArgumentClass * -# 1728| ValueCategory = prvalue(load) -# 1728| getRValue(): [ReferenceFieldAccess] x -# 1728| Type = [IntType] int -# 1728| ValueCategory = prvalue(load) -# 1728| getQualifier(): [VariableAccess] c -# 1728| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & -# 1728| ValueCategory = prvalue(load) -# 1728| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1728| Type = [SpecifiedType] const CopyConstructorWithImplicitArgumentClass -# 1728| ValueCategory = lvalue -# 1729| getStmt(1): [ReturnStmt] return ... -# 1732| [CopyAssignmentOperator] CopyConstructorWithBitwiseCopyClass& CopyConstructorWithBitwiseCopyClass::operator=(CopyConstructorWithBitwiseCopyClass const&) -# 1732| : +# 1773| [Constructor] void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() +# 1773| : +# 1773| : +# 1773| getEntryPoint(): [BlockStmt] { ... } +# 1773| getStmt(0): [ReturnStmt] return ... +# 1774| [CopyConstructor] void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) +# 1774| : +# 1774| getParameter(0): [Parameter] c +# 1774| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & +# 1774| : +# 1774| getEntryPoint(): [BlockStmt] { ... } +# 1775| getStmt(0): [ExprStmt] ExprStmt +# 1775| getExpr(): [AssignExpr] ... = ... +# 1775| Type = [IntType] int +# 1775| ValueCategory = lvalue +# 1775| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 1775| Type = [IntType] int +# 1775| ValueCategory = lvalue +# 1775| getQualifier(): [ThisExpr] this +# 1775| Type = [PointerType] CopyConstructorWithImplicitArgumentClass * +# 1775| ValueCategory = prvalue(load) +# 1775| getRValue(): [ReferenceFieldAccess] x +# 1775| Type = [IntType] int +# 1775| ValueCategory = prvalue(load) +# 1775| getQualifier(): [VariableAccess] c +# 1775| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & +# 1775| ValueCategory = prvalue(load) +# 1775| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1775| Type = [SpecifiedType] const CopyConstructorWithImplicitArgumentClass +# 1775| ValueCategory = lvalue +# 1776| getStmt(1): [ReturnStmt] return ... +# 1779| [CopyAssignmentOperator] CopyConstructorWithBitwiseCopyClass& CopyConstructorWithBitwiseCopyClass::operator=(CopyConstructorWithBitwiseCopyClass const&) +# 1779| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorWithBitwiseCopyClass & -# 1732| [MoveAssignmentOperator] CopyConstructorWithBitwiseCopyClass& CopyConstructorWithBitwiseCopyClass::operator=(CopyConstructorWithBitwiseCopyClass&&) -# 1732| : +# 1779| [MoveAssignmentOperator] CopyConstructorWithBitwiseCopyClass& CopyConstructorWithBitwiseCopyClass::operator=(CopyConstructorWithBitwiseCopyClass&&) +# 1779| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorWithBitwiseCopyClass && -# 1732| [CopyConstructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass(CopyConstructorWithBitwiseCopyClass const&) -# 1732| : +# 1779| [CopyConstructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass(CopyConstructorWithBitwiseCopyClass const&) +# 1779| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorWithBitwiseCopyClass & -# 1732| [MoveConstructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass(CopyConstructorWithBitwiseCopyClass&&) -# 1732| : +# 1779| [MoveConstructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass(CopyConstructorWithBitwiseCopyClass&&) +# 1779| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorWithBitwiseCopyClass && -# 1735| [Constructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() -# 1735| : -# 1735| : -# 1735| getEntryPoint(): [BlockStmt] { ... } -# 1735| getStmt(0): [ReturnStmt] return ... -# 1738| [CopyAssignmentOperator] CopyConstructorTestNonVirtualClass& CopyConstructorTestNonVirtualClass::operator=(CopyConstructorTestNonVirtualClass const&) -# 1738| : +# 1782| [Constructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() +# 1782| : +# 1782| : +# 1782| getEntryPoint(): [BlockStmt] { ... } +# 1782| getStmt(0): [ReturnStmt] return ... +# 1785| [CopyAssignmentOperator] CopyConstructorTestNonVirtualClass& CopyConstructorTestNonVirtualClass::operator=(CopyConstructorTestNonVirtualClass const&) +# 1785| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & -# 1738| [MoveAssignmentOperator] CopyConstructorTestNonVirtualClass& CopyConstructorTestNonVirtualClass::operator=(CopyConstructorTestNonVirtualClass&&) -# 1738| : +# 1785| [MoveAssignmentOperator] CopyConstructorTestNonVirtualClass& CopyConstructorTestNonVirtualClass::operator=(CopyConstructorTestNonVirtualClass&&) +# 1785| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorTestNonVirtualClass && -# 1738| [CopyConstructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) -# 1738| : +# 1785| [CopyConstructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) +# 1785| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & -# 1738| : -# 1738| getInitializer(0): [ConstructorDirectInit] call to CopyConstructorWithImplicitArgumentClass -# 1738| Type = [VoidType] void -# 1738| ValueCategory = prvalue -# 1738| getArgument(0): [VariableAccess] (unnamed parameter 0) -# 1738| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & -# 1738| ValueCategory = prvalue(load) -# 1738| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1738| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & -# 1738| ValueCategory = prvalue -# 1738| getExpr(): [CStyleCast] (const CopyConstructorWithImplicitArgumentClass)... -# 1738| Conversion = [BaseClassConversion] base class conversion -# 1738| Type = [SpecifiedType] const CopyConstructorWithImplicitArgumentClass -# 1738| ValueCategory = lvalue -# 1738| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1738| Type = [SpecifiedType] const CopyConstructorTestNonVirtualClass -# 1738| ValueCategory = lvalue -# 1738| getInitializer(1): (no string representation) -# 1738| Type = [VirtualBaseClass] CopyConstructorWithBitwiseCopyClass -# 1738| ValueCategory = prvalue -# 1738| getEntryPoint(): [BlockStmt] { ... } -# 1738| getStmt(0): [ReturnStmt] return ... -# 1738| [MoveConstructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass&&) -# 1738| : +# 1785| : +# 1785| getInitializer(0): [ConstructorDirectInit] call to CopyConstructorWithImplicitArgumentClass +# 1785| Type = [VoidType] void +# 1785| ValueCategory = prvalue +# 1785| getArgument(0): [VariableAccess] (unnamed parameter 0) +# 1785| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & +# 1785| ValueCategory = prvalue(load) +# 1785| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1785| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & +# 1785| ValueCategory = prvalue +# 1785| getExpr(): [CStyleCast] (const CopyConstructorWithImplicitArgumentClass)... +# 1785| Conversion = [BaseClassConversion] base class conversion +# 1785| Type = [SpecifiedType] const CopyConstructorWithImplicitArgumentClass +# 1785| ValueCategory = lvalue +# 1785| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1785| Type = [SpecifiedType] const CopyConstructorTestNonVirtualClass +# 1785| ValueCategory = lvalue +# 1785| getInitializer(1): (no string representation) +# 1785| Type = [VirtualBaseClass] CopyConstructorWithBitwiseCopyClass +# 1785| ValueCategory = prvalue +# 1785| getEntryPoint(): [BlockStmt] { ... } +# 1785| getStmt(0): [ReturnStmt] return ... +# 1785| [MoveConstructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass&&) +# 1785| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorTestNonVirtualClass && -# 1742| [Constructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() -# 1742| : -# 1742| : -# 1742| getInitializer(0): [ConstructorDirectInit] call to CopyConstructorWithImplicitArgumentClass -# 1742| Type = [VoidType] void -# 1742| ValueCategory = prvalue -# 1742| getInitializer(1): [ConstructorDirectInit] call to CopyConstructorWithBitwiseCopyClass -# 1742| Type = [VoidType] void -# 1742| ValueCategory = prvalue -# 1742| getEntryPoint(): [BlockStmt] { ... } -# 1742| getStmt(0): [ReturnStmt] return ... -# 1745| [CopyAssignmentOperator] CopyConstructorTestVirtualClass& CopyConstructorTestVirtualClass::operator=(CopyConstructorTestVirtualClass const&) -# 1745| : +# 1789| [Constructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() +# 1789| : +# 1789| : +# 1789| getInitializer(0): [ConstructorDirectInit] call to CopyConstructorWithImplicitArgumentClass +# 1789| Type = [VoidType] void +# 1789| ValueCategory = prvalue +# 1789| getInitializer(1): [ConstructorDirectInit] call to CopyConstructorWithBitwiseCopyClass +# 1789| Type = [VoidType] void +# 1789| ValueCategory = prvalue +# 1789| getEntryPoint(): [BlockStmt] { ... } +# 1789| getStmt(0): [ReturnStmt] return ... +# 1792| [CopyAssignmentOperator] CopyConstructorTestVirtualClass& CopyConstructorTestVirtualClass::operator=(CopyConstructorTestVirtualClass const&) +# 1792| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & -# 1745| [MoveAssignmentOperator] CopyConstructorTestVirtualClass& CopyConstructorTestVirtualClass::operator=(CopyConstructorTestVirtualClass&&) -# 1745| : +# 1792| [MoveAssignmentOperator] CopyConstructorTestVirtualClass& CopyConstructorTestVirtualClass::operator=(CopyConstructorTestVirtualClass&&) +# 1792| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorTestVirtualClass && -# 1745| [CopyConstructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) -# 1745| : +# 1792| [CopyConstructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) +# 1792| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & -# 1745| : -# 1745| getInitializer(0): [ConstructorVirtualInit] call to CopyConstructorWithImplicitArgumentClass -# 1745| Type = [VoidType] void -# 1745| ValueCategory = prvalue -# 1745| getArgument(0): [VariableAccess] (unnamed parameter 0) -# 1745| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & -# 1745| ValueCategory = prvalue(load) -# 1745| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1745| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & -# 1745| ValueCategory = prvalue -# 1745| getExpr(): [CStyleCast] (const CopyConstructorWithImplicitArgumentClass)... -# 1745| Conversion = [BaseClassConversion] base class conversion -# 1745| Type = [SpecifiedType] const CopyConstructorWithImplicitArgumentClass -# 1745| ValueCategory = lvalue -# 1745| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1745| Type = [SpecifiedType] const CopyConstructorTestVirtualClass -# 1745| ValueCategory = lvalue -# 1745| getInitializer(1): (no string representation) -# 1745| Type = [VirtualBaseClass] CopyConstructorWithBitwiseCopyClass -# 1745| ValueCategory = prvalue -# 1745| getEntryPoint(): [BlockStmt] { ... } -# 1745| getStmt(0): [ReturnStmt] return ... -# 1745| [MoveConstructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass&&) -# 1745| : +# 1792| : +# 1792| getInitializer(0): [ConstructorVirtualInit] call to CopyConstructorWithImplicitArgumentClass +# 1792| Type = [VoidType] void +# 1792| ValueCategory = prvalue +# 1792| getArgument(0): [VariableAccess] (unnamed parameter 0) +# 1792| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & +# 1792| ValueCategory = prvalue(load) +# 1792| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1792| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & +# 1792| ValueCategory = prvalue +# 1792| getExpr(): [CStyleCast] (const CopyConstructorWithImplicitArgumentClass)... +# 1792| Conversion = [BaseClassConversion] base class conversion +# 1792| Type = [SpecifiedType] const CopyConstructorWithImplicitArgumentClass +# 1792| ValueCategory = lvalue +# 1792| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1792| Type = [SpecifiedType] const CopyConstructorTestVirtualClass +# 1792| ValueCategory = lvalue +# 1792| getInitializer(1): (no string representation) +# 1792| Type = [VirtualBaseClass] CopyConstructorWithBitwiseCopyClass +# 1792| ValueCategory = prvalue +# 1792| getEntryPoint(): [BlockStmt] { ... } +# 1792| getStmt(0): [ReturnStmt] return ... +# 1792| [MoveConstructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass&&) +# 1792| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorTestVirtualClass && -# 1749| [Constructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass() -# 1749| : -# 1749| : -# 1749| getInitializer(0): [ConstructorVirtualInit] call to CopyConstructorWithImplicitArgumentClass -# 1749| Type = [VoidType] void -# 1749| ValueCategory = prvalue -# 1749| getInitializer(1): [ConstructorVirtualInit] call to CopyConstructorWithBitwiseCopyClass -# 1749| Type = [VoidType] void -# 1749| ValueCategory = prvalue -# 1749| getEntryPoint(): [BlockStmt] { ... } -# 1749| getStmt(0): [ReturnStmt] return ... -# 1752| [TopLevelFunction] int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) -# 1752| : -# 1753| getParameter(0): [Parameter] x -# 1753| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & -# 1754| getParameter(1): [Parameter] y -# 1754| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & -# 1754| getEntryPoint(): [BlockStmt] { ... } -# 1755| getStmt(0): [DeclStmt] declaration -# 1755| getDeclarationEntry(0): [VariableDeclarationEntry] definition of cx -# 1755| Type = [Class] CopyConstructorTestNonVirtualClass -# 1755| getVariable().getInitializer(): [Initializer] initializer for cx -# 1755| getExpr(): [ConstructorCall] call to CopyConstructorTestNonVirtualClass -# 1755| Type = [VoidType] void -# 1755| ValueCategory = prvalue -# 1755| getArgument(0): [VariableAccess] x -# 1755| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & -# 1755| ValueCategory = prvalue(load) -# 1755| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1755| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & -# 1755| ValueCategory = prvalue -# 1755| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1755| Type = [SpecifiedType] const CopyConstructorTestNonVirtualClass -# 1755| ValueCategory = lvalue -# 1756| getStmt(1): [DeclStmt] declaration -# 1756| getDeclarationEntry(0): [VariableDeclarationEntry] definition of cy -# 1756| Type = [Class] CopyConstructorTestVirtualClass -# 1756| getVariable().getInitializer(): [Initializer] initializer for cy -# 1756| getExpr(): [ConstructorCall] call to CopyConstructorTestVirtualClass -# 1756| Type = [VoidType] void -# 1756| ValueCategory = prvalue -# 1756| getArgument(0): [VariableAccess] y -# 1756| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & -# 1756| ValueCategory = prvalue(load) -# 1756| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1756| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & -# 1756| ValueCategory = prvalue -# 1756| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1756| Type = [SpecifiedType] const CopyConstructorTestVirtualClass -# 1756| ValueCategory = lvalue -# 1757| getStmt(2): [ReturnStmt] return ... -# 1759| [TopLevelFunction] void if_initialization(int) -# 1759| : -# 1759| getParameter(0): [Parameter] x -# 1759| Type = [IntType] int -# 1759| getEntryPoint(): [BlockStmt] { ... } -# 1760| getStmt(0): [IfStmt] if (...) ... -# 1760| getInitialization(): [DeclStmt] declaration -# 1760| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1760| Type = [IntType] int -# 1760| getVariable().getInitializer(): [Initializer] initializer for y -# 1760| getExpr(): [VariableAccess] x -# 1760| Type = [IntType] int -# 1760| ValueCategory = prvalue(load) -# 1760| getCondition(): [AddExpr] ... + ... -# 1760| Type = [IntType] int -# 1760| ValueCategory = prvalue -# 1760| getLeftOperand(): [VariableAccess] x -# 1760| Type = [IntType] int -# 1760| ValueCategory = prvalue(load) -# 1760| getRightOperand(): [Literal] 1 -# 1760| Type = [IntType] int -# 1760| Value = [Literal] 1 -# 1760| ValueCategory = prvalue -# 1760| getThen(): [BlockStmt] { ... } -# 1761| getStmt(0): [ExprStmt] ExprStmt -# 1761| getExpr(): [AssignExpr] ... = ... -# 1761| Type = [IntType] int -# 1761| ValueCategory = lvalue -# 1761| getLValue(): [VariableAccess] x -# 1761| Type = [IntType] int -# 1761| ValueCategory = lvalue -# 1761| getRValue(): [AddExpr] ... + ... -# 1761| Type = [IntType] int -# 1761| ValueCategory = prvalue -# 1761| getLeftOperand(): [VariableAccess] x -# 1761| Type = [IntType] int -# 1761| ValueCategory = prvalue(load) -# 1761| getRightOperand(): [VariableAccess] y -# 1761| Type = [IntType] int -# 1761| ValueCategory = prvalue(load) -# 1760| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1760| Conversion = [BoolConversion] conversion to bool -# 1760| Type = [BoolType] bool -# 1760| ValueCategory = prvalue -# 1764| getStmt(1): [DeclStmt] declaration -# 1764| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w -# 1764| Type = [IntType] int -# 1765| getStmt(2): [IfStmt] if (...) ... -# 1765| getInitialization(): [ExprStmt] ExprStmt -# 1765| getExpr(): [AssignExpr] ... = ... -# 1765| Type = [IntType] int -# 1765| ValueCategory = lvalue -# 1765| getLValue(): [VariableAccess] w -# 1765| Type = [IntType] int -# 1765| ValueCategory = lvalue -# 1765| getRValue(): [VariableAccess] x -# 1765| Type = [IntType] int -# 1765| ValueCategory = prvalue(load) -# 1765| getCondition(): [AddExpr] ... + ... -# 1765| Type = [IntType] int -# 1765| ValueCategory = prvalue -# 1765| getLeftOperand(): [VariableAccess] x -# 1765| Type = [IntType] int -# 1765| ValueCategory = prvalue(load) -# 1765| getRightOperand(): [Literal] 1 -# 1765| Type = [IntType] int -# 1765| Value = [Literal] 1 -# 1765| ValueCategory = prvalue -# 1765| getThen(): [BlockStmt] { ... } -# 1766| getStmt(0): [ExprStmt] ExprStmt -# 1766| getExpr(): [AssignExpr] ... = ... -# 1766| Type = [IntType] int -# 1766| ValueCategory = lvalue -# 1766| getLValue(): [VariableAccess] x -# 1766| Type = [IntType] int -# 1766| ValueCategory = lvalue -# 1766| getRValue(): [AddExpr] ... + ... -# 1766| Type = [IntType] int -# 1766| ValueCategory = prvalue -# 1766| getLeftOperand(): [VariableAccess] x -# 1766| Type = [IntType] int -# 1766| ValueCategory = prvalue(load) -# 1766| getRightOperand(): [VariableAccess] w -# 1766| Type = [IntType] int -# 1766| ValueCategory = prvalue(load) -# 1765| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1765| Conversion = [BoolConversion] conversion to bool -# 1765| Type = [BoolType] bool -# 1765| ValueCategory = prvalue -# 1769| getStmt(3): [IfStmt] if (...) ... -# 1769| getInitialization(): [ExprStmt] ExprStmt -# 1769| getExpr(): [AssignExpr] ... = ... -# 1769| Type = [IntType] int -# 1769| ValueCategory = lvalue -# 1769| getLValue(): [VariableAccess] w -# 1769| Type = [IntType] int -# 1769| ValueCategory = lvalue -# 1769| getRValue(): [VariableAccess] x -# 1769| Type = [IntType] int -# 1769| ValueCategory = prvalue(load) -# 1769| getCondition(): [ConditionDeclExpr] (condition decl) -# 1769| Type = [BoolType] bool -# 1769| ValueCategory = prvalue -# 1769| getVariableAccess(): [VariableAccess] w2 -# 1769| Type = [IntType] int -# 1769| ValueCategory = prvalue(load) -# 1769| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... -# 1769| Conversion = [BoolConversion] conversion to bool -# 1769| Type = [BoolType] bool -# 1769| ValueCategory = prvalue -# 1769| getThen(): [BlockStmt] { ... } -# 1770| getStmt(0): [ExprStmt] ExprStmt -# 1770| getExpr(): [AssignExpr] ... = ... -# 1770| Type = [IntType] int -# 1770| ValueCategory = lvalue -# 1770| getLValue(): [VariableAccess] x -# 1770| Type = [IntType] int -# 1770| ValueCategory = lvalue -# 1770| getRValue(): [AddExpr] ... + ... -# 1770| Type = [IntType] int -# 1770| ValueCategory = prvalue -# 1770| getLeftOperand(): [VariableAccess] x -# 1770| Type = [IntType] int -# 1770| ValueCategory = prvalue(load) -# 1770| getRightOperand(): [VariableAccess] w -# 1770| Type = [IntType] int -# 1770| ValueCategory = prvalue(load) -# 1773| getStmt(4): [IfStmt] if (...) ... -# 1773| getInitialization(): [DeclStmt] declaration -# 1773| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1773| Type = [IntType] int -# 1773| getVariable().getInitializer(): [Initializer] initializer for v -# 1773| getExpr(): [VariableAccess] x -# 1773| Type = [IntType] int -# 1773| ValueCategory = prvalue(load) -# 1773| getCondition(): [ConditionDeclExpr] (condition decl) -# 1773| Type = [BoolType] bool -# 1773| ValueCategory = prvalue -# 1773| getVariableAccess(): [VariableAccess] v2 -# 1773| Type = [IntType] int -# 1773| ValueCategory = prvalue(load) -# 1773| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... -# 1773| Conversion = [BoolConversion] conversion to bool -# 1773| Type = [BoolType] bool -# 1773| ValueCategory = prvalue -# 1773| getThen(): [BlockStmt] { ... } -# 1774| getStmt(0): [ExprStmt] ExprStmt -# 1774| getExpr(): [AssignExpr] ... = ... -# 1774| Type = [IntType] int -# 1774| ValueCategory = lvalue -# 1774| getLValue(): [VariableAccess] x -# 1774| Type = [IntType] int -# 1774| ValueCategory = lvalue -# 1774| getRValue(): [AddExpr] ... + ... -# 1774| Type = [IntType] int -# 1774| ValueCategory = prvalue -# 1774| getLeftOperand(): [VariableAccess] x -# 1774| Type = [IntType] int -# 1774| ValueCategory = prvalue(load) -# 1774| getRightOperand(): [VariableAccess] v -# 1774| Type = [IntType] int -# 1774| ValueCategory = prvalue(load) -# 1777| getStmt(5): [DeclStmt] declaration -# 1777| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z -# 1777| Type = [IntType] int -# 1777| getVariable().getInitializer(): [Initializer] initializer for z -# 1777| getExpr(): [VariableAccess] x -# 1777| Type = [IntType] int -# 1777| ValueCategory = prvalue(load) -# 1778| getStmt(6): [IfStmt] if (...) ... -# 1778| getCondition(): [VariableAccess] z -# 1778| Type = [IntType] int -# 1778| ValueCategory = prvalue(load) -# 1778| getThen(): [BlockStmt] { ... } -# 1779| getStmt(0): [ExprStmt] ExprStmt -# 1779| getExpr(): [AssignExpr] ... = ... -# 1779| Type = [IntType] int -# 1779| ValueCategory = lvalue -# 1779| getLValue(): [VariableAccess] x -# 1779| Type = [IntType] int -# 1779| ValueCategory = lvalue -# 1779| getRValue(): [AddExpr] ... + ... -# 1779| Type = [IntType] int -# 1779| ValueCategory = prvalue -# 1779| getLeftOperand(): [VariableAccess] x -# 1779| Type = [IntType] int -# 1779| ValueCategory = prvalue(load) -# 1779| getRightOperand(): [VariableAccess] z -# 1779| Type = [IntType] int -# 1779| ValueCategory = prvalue(load) -# 1778| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1778| Conversion = [BoolConversion] conversion to bool -# 1778| Type = [BoolType] bool -# 1778| ValueCategory = prvalue -# 1782| getStmt(7): [IfStmt] if (...) ... -# 1782| getCondition(): [ConditionDeclExpr] (condition decl) -# 1782| Type = [BoolType] bool -# 1782| ValueCategory = prvalue -# 1782| getVariableAccess(): [VariableAccess] z2 -# 1782| Type = [IntType] int -# 1782| ValueCategory = prvalue(load) -# 1782| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... -# 1782| Conversion = [BoolConversion] conversion to bool -# 1782| Type = [BoolType] bool -# 1782| ValueCategory = prvalue -# 1782| getThen(): [BlockStmt] { ... } -# 1783| getStmt(0): [ExprStmt] ExprStmt -# 1783| getExpr(): [AssignAddExpr] ... += ... -# 1783| Type = [IntType] int -# 1783| ValueCategory = lvalue -# 1783| getLValue(): [VariableAccess] x -# 1783| Type = [IntType] int -# 1783| ValueCategory = lvalue -# 1783| getRValue(): [VariableAccess] z2 -# 1783| Type = [IntType] int -# 1783| ValueCategory = prvalue(load) -# 1785| getStmt(8): [ReturnStmt] return ... -# 1787| [TopLevelFunction] void switch_initialization(int) -# 1787| : -# 1787| getParameter(0): [Parameter] x -# 1787| Type = [IntType] int -# 1787| getEntryPoint(): [BlockStmt] { ... } -# 1788| getStmt(0): [SwitchStmt] switch (...) ... -# 1788| getInitialization(): [DeclStmt] declaration -# 1788| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1788| Type = [IntType] int -# 1788| getVariable().getInitializer(): [Initializer] initializer for y -# 1788| getExpr(): [VariableAccess] x -# 1788| Type = [IntType] int -# 1788| ValueCategory = prvalue(load) -# 1788| getExpr(): [AddExpr] ... + ... -# 1788| Type = [IntType] int -# 1788| ValueCategory = prvalue -# 1788| getLeftOperand(): [VariableAccess] x -# 1788| Type = [IntType] int -# 1788| ValueCategory = prvalue(load) -# 1788| getRightOperand(): [Literal] 1 -# 1788| Type = [IntType] int -# 1788| Value = [Literal] 1 -# 1788| ValueCategory = prvalue -# 1788| getStmt(): [BlockStmt] { ... } -# 1789| getStmt(0): [SwitchCase] default: -# 1790| getStmt(1): [ExprStmt] ExprStmt -# 1790| getExpr(): [AssignExpr] ... = ... -# 1790| Type = [IntType] int -# 1790| ValueCategory = lvalue -# 1790| getLValue(): [VariableAccess] x -# 1790| Type = [IntType] int -# 1790| ValueCategory = lvalue -# 1790| getRValue(): [AddExpr] ... + ... -# 1790| Type = [IntType] int -# 1790| ValueCategory = prvalue -# 1790| getLeftOperand(): [VariableAccess] x -# 1790| Type = [IntType] int -# 1790| ValueCategory = prvalue(load) -# 1790| getRightOperand(): [VariableAccess] y -# 1790| Type = [IntType] int -# 1790| ValueCategory = prvalue(load) -# 1793| getStmt(1): [DeclStmt] declaration -# 1793| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w -# 1793| Type = [IntType] int -# 1794| getStmt(2): [SwitchStmt] switch (...) ... -# 1794| getInitialization(): [ExprStmt] ExprStmt -# 1794| getExpr(): [AssignExpr] ... = ... -# 1794| Type = [IntType] int -# 1794| ValueCategory = lvalue -# 1794| getLValue(): [VariableAccess] w -# 1794| Type = [IntType] int -# 1794| ValueCategory = lvalue -# 1794| getRValue(): [VariableAccess] x -# 1794| Type = [IntType] int -# 1794| ValueCategory = prvalue(load) -# 1794| getExpr(): [AddExpr] ... + ... -# 1794| Type = [IntType] int -# 1794| ValueCategory = prvalue -# 1794| getLeftOperand(): [VariableAccess] x -# 1794| Type = [IntType] int -# 1794| ValueCategory = prvalue(load) -# 1794| getRightOperand(): [Literal] 1 -# 1794| Type = [IntType] int -# 1794| Value = [Literal] 1 -# 1794| ValueCategory = prvalue -# 1794| getStmt(): [BlockStmt] { ... } -# 1795| getStmt(0): [SwitchCase] default: -# 1796| getStmt(1): [ExprStmt] ExprStmt -# 1796| getExpr(): [AssignExpr] ... = ... -# 1796| Type = [IntType] int -# 1796| ValueCategory = lvalue -# 1796| getLValue(): [VariableAccess] x -# 1796| Type = [IntType] int -# 1796| ValueCategory = lvalue -# 1796| getRValue(): [AddExpr] ... + ... -# 1796| Type = [IntType] int -# 1796| ValueCategory = prvalue -# 1796| getLeftOperand(): [VariableAccess] x -# 1796| Type = [IntType] int -# 1796| ValueCategory = prvalue(load) -# 1796| getRightOperand(): [VariableAccess] w -# 1796| Type = [IntType] int -# 1796| ValueCategory = prvalue(load) -# 1799| getStmt(3): [SwitchStmt] switch (...) ... -# 1799| getInitialization(): [ExprStmt] ExprStmt -# 1799| getExpr(): [AssignExpr] ... = ... -# 1799| Type = [IntType] int -# 1799| ValueCategory = lvalue -# 1799| getLValue(): [VariableAccess] w -# 1799| Type = [IntType] int -# 1799| ValueCategory = lvalue -# 1799| getRValue(): [VariableAccess] x -# 1799| Type = [IntType] int -# 1799| ValueCategory = prvalue(load) -# 1799| getExpr(): [ConditionDeclExpr] (condition decl) -# 1799| Type = [IntType] int -# 1799| ValueCategory = prvalue -# 1799| getVariableAccess(): [VariableAccess] w2 -# 1799| Type = [IntType] int -# 1799| ValueCategory = prvalue(load) -# 1799| getStmt(): [BlockStmt] { ... } -# 1800| getStmt(0): [SwitchCase] default: -# 1801| getStmt(1): [ExprStmt] ExprStmt -# 1801| getExpr(): [AssignExpr] ... = ... -# 1801| Type = [IntType] int -# 1801| ValueCategory = lvalue -# 1801| getLValue(): [VariableAccess] x -# 1801| Type = [IntType] int -# 1801| ValueCategory = lvalue -# 1801| getRValue(): [AddExpr] ... + ... -# 1801| Type = [IntType] int -# 1801| ValueCategory = prvalue -# 1801| getLeftOperand(): [VariableAccess] x -# 1801| Type = [IntType] int -# 1801| ValueCategory = prvalue(load) -# 1801| getRightOperand(): [VariableAccess] w -# 1801| Type = [IntType] int -# 1801| ValueCategory = prvalue(load) -# 1804| getStmt(4): [SwitchStmt] switch (...) ... -# 1804| getInitialization(): [DeclStmt] declaration -# 1804| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1804| Type = [IntType] int -# 1804| getVariable().getInitializer(): [Initializer] initializer for v -# 1804| getExpr(): [VariableAccess] x -# 1804| Type = [IntType] int -# 1804| ValueCategory = prvalue(load) -# 1804| getExpr(): [ConditionDeclExpr] (condition decl) -# 1804| Type = [IntType] int -# 1804| ValueCategory = prvalue -# 1804| getVariableAccess(): [VariableAccess] v2 -# 1804| Type = [IntType] int -# 1804| ValueCategory = prvalue(load) -# 1804| getStmt(): [BlockStmt] { ... } -# 1805| getStmt(0): [SwitchCase] default: -# 1806| getStmt(1): [ExprStmt] ExprStmt -# 1806| getExpr(): [AssignExpr] ... = ... -# 1806| Type = [IntType] int -# 1806| ValueCategory = lvalue -# 1806| getLValue(): [VariableAccess] x -# 1806| Type = [IntType] int -# 1806| ValueCategory = lvalue -# 1806| getRValue(): [AddExpr] ... + ... -# 1806| Type = [IntType] int -# 1806| ValueCategory = prvalue -# 1806| getLeftOperand(): [VariableAccess] x -# 1806| Type = [IntType] int -# 1806| ValueCategory = prvalue(load) -# 1806| getRightOperand(): [VariableAccess] v -# 1806| Type = [IntType] int -# 1806| ValueCategory = prvalue(load) -# 1809| getStmt(5): [DeclStmt] declaration -# 1809| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z -# 1809| Type = [IntType] int -# 1809| getVariable().getInitializer(): [Initializer] initializer for z -# 1809| getExpr(): [VariableAccess] x -# 1809| Type = [IntType] int -# 1809| ValueCategory = prvalue(load) -# 1810| getStmt(6): [SwitchStmt] switch (...) ... -# 1810| getExpr(): [VariableAccess] z -# 1810| Type = [IntType] int -# 1810| ValueCategory = prvalue(load) -# 1810| getStmt(): [BlockStmt] { ... } -# 1811| getStmt(0): [SwitchCase] default: -# 1812| getStmt(1): [ExprStmt] ExprStmt -# 1812| getExpr(): [AssignExpr] ... = ... +# 1796| [Constructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass() +# 1796| : +# 1796| : +# 1796| getInitializer(0): [ConstructorVirtualInit] call to CopyConstructorWithImplicitArgumentClass +# 1796| Type = [VoidType] void +# 1796| ValueCategory = prvalue +# 1796| getInitializer(1): [ConstructorVirtualInit] call to CopyConstructorWithBitwiseCopyClass +# 1796| Type = [VoidType] void +# 1796| ValueCategory = prvalue +# 1796| getEntryPoint(): [BlockStmt] { ... } +# 1796| getStmt(0): [ReturnStmt] return ... +# 1799| [TopLevelFunction] int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) +# 1799| : +# 1800| getParameter(0): [Parameter] x +# 1800| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & +# 1801| getParameter(1): [Parameter] y +# 1801| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & +# 1801| getEntryPoint(): [BlockStmt] { ... } +# 1802| getStmt(0): [DeclStmt] declaration +# 1802| getDeclarationEntry(0): [VariableDeclarationEntry] definition of cx +# 1802| Type = [Class] CopyConstructorTestNonVirtualClass +# 1802| getVariable().getInitializer(): [Initializer] initializer for cx +# 1802| getExpr(): [ConstructorCall] call to CopyConstructorTestNonVirtualClass +# 1802| Type = [VoidType] void +# 1802| ValueCategory = prvalue +# 1802| getArgument(0): [VariableAccess] x +# 1802| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & +# 1802| ValueCategory = prvalue(load) +# 1802| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1802| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & +# 1802| ValueCategory = prvalue +# 1802| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1802| Type = [SpecifiedType] const CopyConstructorTestNonVirtualClass +# 1802| ValueCategory = lvalue +# 1803| getStmt(1): [DeclStmt] declaration +# 1803| getDeclarationEntry(0): [VariableDeclarationEntry] definition of cy +# 1803| Type = [Class] CopyConstructorTestVirtualClass +# 1803| getVariable().getInitializer(): [Initializer] initializer for cy +# 1803| getExpr(): [ConstructorCall] call to CopyConstructorTestVirtualClass +# 1803| Type = [VoidType] void +# 1803| ValueCategory = prvalue +# 1803| getArgument(0): [VariableAccess] y +# 1803| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & +# 1803| ValueCategory = prvalue(load) +# 1803| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1803| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & +# 1803| ValueCategory = prvalue +# 1803| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1803| Type = [SpecifiedType] const CopyConstructorTestVirtualClass +# 1803| ValueCategory = lvalue +# 1804| getStmt(2): [ReturnStmt] return ... +# 1806| [TopLevelFunction] void if_initialization(int) +# 1806| : +# 1806| getParameter(0): [Parameter] x +# 1806| Type = [IntType] int +# 1806| getEntryPoint(): [BlockStmt] { ... } +# 1807| getStmt(0): [IfStmt] if (...) ... +# 1807| getInitialization(): [DeclStmt] declaration +# 1807| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1807| Type = [IntType] int +# 1807| getVariable().getInitializer(): [Initializer] initializer for y +# 1807| getExpr(): [VariableAccess] x +# 1807| Type = [IntType] int +# 1807| ValueCategory = prvalue(load) +# 1807| getCondition(): [AddExpr] ... + ... +# 1807| Type = [IntType] int +# 1807| ValueCategory = prvalue +# 1807| getLeftOperand(): [VariableAccess] x +# 1807| Type = [IntType] int +# 1807| ValueCategory = prvalue(load) +# 1807| getRightOperand(): [Literal] 1 +# 1807| Type = [IntType] int +# 1807| Value = [Literal] 1 +# 1807| ValueCategory = prvalue +# 1807| getThen(): [BlockStmt] { ... } +# 1808| getStmt(0): [ExprStmt] ExprStmt +# 1808| getExpr(): [AssignExpr] ... = ... +# 1808| Type = [IntType] int +# 1808| ValueCategory = lvalue +# 1808| getLValue(): [VariableAccess] x +# 1808| Type = [IntType] int +# 1808| ValueCategory = lvalue +# 1808| getRValue(): [AddExpr] ... + ... +# 1808| Type = [IntType] int +# 1808| ValueCategory = prvalue +# 1808| getLeftOperand(): [VariableAccess] x +# 1808| Type = [IntType] int +# 1808| ValueCategory = prvalue(load) +# 1808| getRightOperand(): [VariableAccess] y +# 1808| Type = [IntType] int +# 1808| ValueCategory = prvalue(load) +# 1807| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 1807| Conversion = [BoolConversion] conversion to bool +# 1807| Type = [BoolType] bool +# 1807| ValueCategory = prvalue +# 1811| getStmt(1): [DeclStmt] declaration +# 1811| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1811| Type = [IntType] int +# 1812| getStmt(2): [IfStmt] if (...) ... +# 1812| getInitialization(): [ExprStmt] ExprStmt +# 1812| getExpr(): [AssignExpr] ... = ... +# 1812| Type = [IntType] int +# 1812| ValueCategory = lvalue +# 1812| getLValue(): [VariableAccess] w # 1812| Type = [IntType] int # 1812| ValueCategory = lvalue -# 1812| getLValue(): [VariableAccess] x -# 1812| Type = [IntType] int -# 1812| ValueCategory = lvalue -# 1812| getRValue(): [AddExpr] ... + ... -# 1812| Type = [IntType] int -# 1812| ValueCategory = prvalue -# 1812| getLeftOperand(): [VariableAccess] x -# 1812| Type = [IntType] int -# 1812| ValueCategory = prvalue(load) -# 1812| getRightOperand(): [VariableAccess] z -# 1812| Type = [IntType] int -# 1812| ValueCategory = prvalue(load) -# 1815| getStmt(7): [SwitchStmt] switch (...) ... -# 1815| getExpr(): [ConditionDeclExpr] (condition decl) -# 1815| Type = [IntType] int -# 1815| ValueCategory = prvalue -# 1815| getVariableAccess(): [VariableAccess] z2 -# 1815| Type = [IntType] int -# 1815| ValueCategory = prvalue(load) -# 1815| getStmt(): [BlockStmt] { ... } -# 1816| getStmt(0): [SwitchCase] default: -# 1817| getStmt(1): [ExprStmt] ExprStmt -# 1817| getExpr(): [AssignAddExpr] ... += ... +# 1812| getRValue(): [VariableAccess] x +# 1812| Type = [IntType] int +# 1812| ValueCategory = prvalue(load) +# 1812| getCondition(): [AddExpr] ... + ... +# 1812| Type = [IntType] int +# 1812| ValueCategory = prvalue +# 1812| getLeftOperand(): [VariableAccess] x +# 1812| Type = [IntType] int +# 1812| ValueCategory = prvalue(load) +# 1812| getRightOperand(): [Literal] 1 +# 1812| Type = [IntType] int +# 1812| Value = [Literal] 1 +# 1812| ValueCategory = prvalue +# 1812| getThen(): [BlockStmt] { ... } +# 1813| getStmt(0): [ExprStmt] ExprStmt +# 1813| getExpr(): [AssignExpr] ... = ... +# 1813| Type = [IntType] int +# 1813| ValueCategory = lvalue +# 1813| getLValue(): [VariableAccess] x +# 1813| Type = [IntType] int +# 1813| ValueCategory = lvalue +# 1813| getRValue(): [AddExpr] ... + ... +# 1813| Type = [IntType] int +# 1813| ValueCategory = prvalue +# 1813| getLeftOperand(): [VariableAccess] x +# 1813| Type = [IntType] int +# 1813| ValueCategory = prvalue(load) +# 1813| getRightOperand(): [VariableAccess] w +# 1813| Type = [IntType] int +# 1813| ValueCategory = prvalue(load) +# 1812| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 1812| Conversion = [BoolConversion] conversion to bool +# 1812| Type = [BoolType] bool +# 1812| ValueCategory = prvalue +# 1816| getStmt(3): [IfStmt] if (...) ... +# 1816| getInitialization(): [ExprStmt] ExprStmt +# 1816| getExpr(): [AssignExpr] ... = ... +# 1816| Type = [IntType] int +# 1816| ValueCategory = lvalue +# 1816| getLValue(): [VariableAccess] w +# 1816| Type = [IntType] int +# 1816| ValueCategory = lvalue +# 1816| getRValue(): [VariableAccess] x +# 1816| Type = [IntType] int +# 1816| ValueCategory = prvalue(load) +# 1816| getCondition(): [ConditionDeclExpr] (condition decl) +# 1816| Type = [BoolType] bool +# 1816| ValueCategory = prvalue +# 1816| getVariableAccess(): [VariableAccess] w2 +# 1816| Type = [IntType] int +# 1816| ValueCategory = prvalue(load) +# 1816| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... +# 1816| Conversion = [BoolConversion] conversion to bool +# 1816| Type = [BoolType] bool +# 1816| ValueCategory = prvalue +# 1816| getThen(): [BlockStmt] { ... } +# 1817| getStmt(0): [ExprStmt] ExprStmt +# 1817| getExpr(): [AssignExpr] ... = ... # 1817| Type = [IntType] int # 1817| ValueCategory = lvalue # 1817| getLValue(): [VariableAccess] x # 1817| Type = [IntType] int # 1817| ValueCategory = lvalue -# 1817| getRValue(): [VariableAccess] z2 +# 1817| getRValue(): [AddExpr] ... + ... # 1817| Type = [IntType] int -# 1817| ValueCategory = prvalue(load) -# 1819| getStmt(8): [ReturnStmt] return ... -# 1823| [GlobalVariable] int global_2 -# 1823| getInitializer(): [Initializer] initializer for global_2 -# 1823| getExpr(): [Literal] 1 -# 1823| Type = [IntType] int -# 1823| Value = [Literal] 1 -# 1823| ValueCategory = prvalue -# 1825| [GlobalVariable] int const global_3 -# 1825| getInitializer(): [Initializer] initializer for global_3 -# 1825| getExpr(): [Literal] 2 -# 1825| Type = [IntType] int -# 1825| Value = [Literal] 2 -# 1825| ValueCategory = prvalue -# 1827| [GlobalVariable] constructor_only global_4 -# 1827| getInitializer(): [Initializer] initializer for global_4 -# 1827| getExpr(): [ConstructorCall] call to constructor_only -# 1827| Type = [VoidType] void -# 1827| ValueCategory = prvalue -# 1827| getArgument(0): [Literal] 1 -# 1827| Type = [IntType] int -# 1827| Value = [Literal] 1 -# 1827| ValueCategory = prvalue -# 1829| [GlobalVariable] constructor_only global_5 -# 1829| getInitializer(): [Initializer] initializer for global_5 -# 1829| getExpr(): [ConstructorCall] call to constructor_only -# 1829| Type = [VoidType] void -# 1829| ValueCategory = prvalue -# 1829| getArgument(0): [Literal] 2 -# 1829| Type = [IntType] int -# 1829| Value = [Literal] 2 +# 1817| ValueCategory = prvalue +# 1817| getLeftOperand(): [VariableAccess] x +# 1817| Type = [IntType] int +# 1817| ValueCategory = prvalue(load) +# 1817| getRightOperand(): [VariableAccess] w +# 1817| Type = [IntType] int +# 1817| ValueCategory = prvalue(load) +# 1820| getStmt(4): [IfStmt] if (...) ... +# 1820| getInitialization(): [DeclStmt] declaration +# 1820| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1820| Type = [IntType] int +# 1820| getVariable().getInitializer(): [Initializer] initializer for v +# 1820| getExpr(): [VariableAccess] x +# 1820| Type = [IntType] int +# 1820| ValueCategory = prvalue(load) +# 1820| getCondition(): [ConditionDeclExpr] (condition decl) +# 1820| Type = [BoolType] bool +# 1820| ValueCategory = prvalue +# 1820| getVariableAccess(): [VariableAccess] v2 +# 1820| Type = [IntType] int +# 1820| ValueCategory = prvalue(load) +# 1820| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... +# 1820| Conversion = [BoolConversion] conversion to bool +# 1820| Type = [BoolType] bool +# 1820| ValueCategory = prvalue +# 1820| getThen(): [BlockStmt] { ... } +# 1821| getStmt(0): [ExprStmt] ExprStmt +# 1821| getExpr(): [AssignExpr] ... = ... +# 1821| Type = [IntType] int +# 1821| ValueCategory = lvalue +# 1821| getLValue(): [VariableAccess] x +# 1821| Type = [IntType] int +# 1821| ValueCategory = lvalue +# 1821| getRValue(): [AddExpr] ... + ... +# 1821| Type = [IntType] int +# 1821| ValueCategory = prvalue +# 1821| getLeftOperand(): [VariableAccess] x +# 1821| Type = [IntType] int +# 1821| ValueCategory = prvalue(load) +# 1821| getRightOperand(): [VariableAccess] v +# 1821| Type = [IntType] int +# 1821| ValueCategory = prvalue(load) +# 1824| getStmt(5): [DeclStmt] declaration +# 1824| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1824| Type = [IntType] int +# 1824| getVariable().getInitializer(): [Initializer] initializer for z +# 1824| getExpr(): [VariableAccess] x +# 1824| Type = [IntType] int +# 1824| ValueCategory = prvalue(load) +# 1825| getStmt(6): [IfStmt] if (...) ... +# 1825| getCondition(): [VariableAccess] z +# 1825| Type = [IntType] int +# 1825| ValueCategory = prvalue(load) +# 1825| getThen(): [BlockStmt] { ... } +# 1826| getStmt(0): [ExprStmt] ExprStmt +# 1826| getExpr(): [AssignExpr] ... = ... +# 1826| Type = [IntType] int +# 1826| ValueCategory = lvalue +# 1826| getLValue(): [VariableAccess] x +# 1826| Type = [IntType] int +# 1826| ValueCategory = lvalue +# 1826| getRValue(): [AddExpr] ... + ... +# 1826| Type = [IntType] int +# 1826| ValueCategory = prvalue +# 1826| getLeftOperand(): [VariableAccess] x +# 1826| Type = [IntType] int +# 1826| ValueCategory = prvalue(load) +# 1826| getRightOperand(): [VariableAccess] z +# 1826| Type = [IntType] int +# 1826| ValueCategory = prvalue(load) +# 1825| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 1825| Conversion = [BoolConversion] conversion to bool +# 1825| Type = [BoolType] bool +# 1825| ValueCategory = prvalue +# 1829| getStmt(7): [IfStmt] if (...) ... +# 1829| getCondition(): [ConditionDeclExpr] (condition decl) +# 1829| Type = [BoolType] bool # 1829| ValueCategory = prvalue -# 1831| [GlobalVariable] char* global_string -# 1831| getInitializer(): [Initializer] initializer for global_string -# 1831| getExpr(): global string -# 1831| Type = [ArrayType] const char[14] -# 1831| Value = [StringLiteral] "global string" -# 1831| ValueCategory = lvalue -# 1831| getExpr().getFullyConverted(): [CStyleCast] (char *)... -# 1831| Conversion = [PointerConversion] pointer conversion -# 1831| Type = [CharPointerType] char * -# 1831| ValueCategory = prvalue -# 1831| getExpr(): [ArrayToPointerConversion] array to pointer conversion -# 1831| Type = [PointerType] const char * -# 1831| ValueCategory = prvalue -# 1833| [GlobalVariable] int global_6 -# 1833| getInitializer(): [Initializer] initializer for global_6 -# 1833| getExpr(): [VariableAccess] global_2 -# 1833| Type = [IntType] int -# 1833| ValueCategory = prvalue(load) -# 1836| [CopyAssignmentOperator] block_assignment::A& block_assignment::A::operator=(block_assignment::A const&) -# 1836| : +# 1829| getVariableAccess(): [VariableAccess] z2 +# 1829| Type = [IntType] int +# 1829| ValueCategory = prvalue(load) +# 1829| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... +# 1829| Conversion = [BoolConversion] conversion to bool +# 1829| Type = [BoolType] bool +# 1829| ValueCategory = prvalue +# 1829| getThen(): [BlockStmt] { ... } +# 1830| getStmt(0): [ExprStmt] ExprStmt +# 1830| getExpr(): [AssignAddExpr] ... += ... +# 1830| Type = [IntType] int +# 1830| ValueCategory = lvalue +# 1830| getLValue(): [VariableAccess] x +# 1830| Type = [IntType] int +# 1830| ValueCategory = lvalue +# 1830| getRValue(): [VariableAccess] z2 +# 1830| Type = [IntType] int +# 1830| ValueCategory = prvalue(load) +# 1832| getStmt(8): [ReturnStmt] return ... +# 1834| [TopLevelFunction] void switch_initialization(int) +# 1834| : +# 1834| getParameter(0): [Parameter] x +# 1834| Type = [IntType] int +# 1834| getEntryPoint(): [BlockStmt] { ... } +# 1835| getStmt(0): [SwitchStmt] switch (...) ... +# 1835| getInitialization(): [DeclStmt] declaration +# 1835| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1835| Type = [IntType] int +# 1835| getVariable().getInitializer(): [Initializer] initializer for y +# 1835| getExpr(): [VariableAccess] x +# 1835| Type = [IntType] int +# 1835| ValueCategory = prvalue(load) +# 1835| getExpr(): [AddExpr] ... + ... +# 1835| Type = [IntType] int +# 1835| ValueCategory = prvalue +# 1835| getLeftOperand(): [VariableAccess] x +# 1835| Type = [IntType] int +# 1835| ValueCategory = prvalue(load) +# 1835| getRightOperand(): [Literal] 1 +# 1835| Type = [IntType] int +# 1835| Value = [Literal] 1 +# 1835| ValueCategory = prvalue +# 1835| getStmt(): [BlockStmt] { ... } +# 1836| getStmt(0): [SwitchCase] default: +# 1837| getStmt(1): [ExprStmt] ExprStmt +# 1837| getExpr(): [AssignExpr] ... = ... +# 1837| Type = [IntType] int +# 1837| ValueCategory = lvalue +# 1837| getLValue(): [VariableAccess] x +# 1837| Type = [IntType] int +# 1837| ValueCategory = lvalue +# 1837| getRValue(): [AddExpr] ... + ... +# 1837| Type = [IntType] int +# 1837| ValueCategory = prvalue +# 1837| getLeftOperand(): [VariableAccess] x +# 1837| Type = [IntType] int +# 1837| ValueCategory = prvalue(load) +# 1837| getRightOperand(): [VariableAccess] y +# 1837| Type = [IntType] int +# 1837| ValueCategory = prvalue(load) +# 1840| getStmt(1): [DeclStmt] declaration +# 1840| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1840| Type = [IntType] int +# 1841| getStmt(2): [SwitchStmt] switch (...) ... +# 1841| getInitialization(): [ExprStmt] ExprStmt +# 1841| getExpr(): [AssignExpr] ... = ... +# 1841| Type = [IntType] int +# 1841| ValueCategory = lvalue +# 1841| getLValue(): [VariableAccess] w +# 1841| Type = [IntType] int +# 1841| ValueCategory = lvalue +# 1841| getRValue(): [VariableAccess] x +# 1841| Type = [IntType] int +# 1841| ValueCategory = prvalue(load) +# 1841| getExpr(): [AddExpr] ... + ... +# 1841| Type = [IntType] int +# 1841| ValueCategory = prvalue +# 1841| getLeftOperand(): [VariableAccess] x +# 1841| Type = [IntType] int +# 1841| ValueCategory = prvalue(load) +# 1841| getRightOperand(): [Literal] 1 +# 1841| Type = [IntType] int +# 1841| Value = [Literal] 1 +# 1841| ValueCategory = prvalue +# 1841| getStmt(): [BlockStmt] { ... } +# 1842| getStmt(0): [SwitchCase] default: +# 1843| getStmt(1): [ExprStmt] ExprStmt +# 1843| getExpr(): [AssignExpr] ... = ... +# 1843| Type = [IntType] int +# 1843| ValueCategory = lvalue +# 1843| getLValue(): [VariableAccess] x +# 1843| Type = [IntType] int +# 1843| ValueCategory = lvalue +# 1843| getRValue(): [AddExpr] ... + ... +# 1843| Type = [IntType] int +# 1843| ValueCategory = prvalue +# 1843| getLeftOperand(): [VariableAccess] x +# 1843| Type = [IntType] int +# 1843| ValueCategory = prvalue(load) +# 1843| getRightOperand(): [VariableAccess] w +# 1843| Type = [IntType] int +# 1843| ValueCategory = prvalue(load) +# 1846| getStmt(3): [SwitchStmt] switch (...) ... +# 1846| getInitialization(): [ExprStmt] ExprStmt +# 1846| getExpr(): [AssignExpr] ... = ... +# 1846| Type = [IntType] int +# 1846| ValueCategory = lvalue +# 1846| getLValue(): [VariableAccess] w +# 1846| Type = [IntType] int +# 1846| ValueCategory = lvalue +# 1846| getRValue(): [VariableAccess] x +# 1846| Type = [IntType] int +# 1846| ValueCategory = prvalue(load) +# 1846| getExpr(): [ConditionDeclExpr] (condition decl) +# 1846| Type = [IntType] int +# 1846| ValueCategory = prvalue +# 1846| getVariableAccess(): [VariableAccess] w2 +# 1846| Type = [IntType] int +# 1846| ValueCategory = prvalue(load) +# 1846| getStmt(): [BlockStmt] { ... } +# 1847| getStmt(0): [SwitchCase] default: +# 1848| getStmt(1): [ExprStmt] ExprStmt +# 1848| getExpr(): [AssignExpr] ... = ... +# 1848| Type = [IntType] int +# 1848| ValueCategory = lvalue +# 1848| getLValue(): [VariableAccess] x +# 1848| Type = [IntType] int +# 1848| ValueCategory = lvalue +# 1848| getRValue(): [AddExpr] ... + ... +# 1848| Type = [IntType] int +# 1848| ValueCategory = prvalue +# 1848| getLeftOperand(): [VariableAccess] x +# 1848| Type = [IntType] int +# 1848| ValueCategory = prvalue(load) +# 1848| getRightOperand(): [VariableAccess] w +# 1848| Type = [IntType] int +# 1848| ValueCategory = prvalue(load) +# 1851| getStmt(4): [SwitchStmt] switch (...) ... +# 1851| getInitialization(): [DeclStmt] declaration +# 1851| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1851| Type = [IntType] int +# 1851| getVariable().getInitializer(): [Initializer] initializer for v +# 1851| getExpr(): [VariableAccess] x +# 1851| Type = [IntType] int +# 1851| ValueCategory = prvalue(load) +# 1851| getExpr(): [ConditionDeclExpr] (condition decl) +# 1851| Type = [IntType] int +# 1851| ValueCategory = prvalue +# 1851| getVariableAccess(): [VariableAccess] v2 +# 1851| Type = [IntType] int +# 1851| ValueCategory = prvalue(load) +# 1851| getStmt(): [BlockStmt] { ... } +# 1852| getStmt(0): [SwitchCase] default: +# 1853| getStmt(1): [ExprStmt] ExprStmt +# 1853| getExpr(): [AssignExpr] ... = ... +# 1853| Type = [IntType] int +# 1853| ValueCategory = lvalue +# 1853| getLValue(): [VariableAccess] x +# 1853| Type = [IntType] int +# 1853| ValueCategory = lvalue +# 1853| getRValue(): [AddExpr] ... + ... +# 1853| Type = [IntType] int +# 1853| ValueCategory = prvalue +# 1853| getLeftOperand(): [VariableAccess] x +# 1853| Type = [IntType] int +# 1853| ValueCategory = prvalue(load) +# 1853| getRightOperand(): [VariableAccess] v +# 1853| Type = [IntType] int +# 1853| ValueCategory = prvalue(load) +# 1856| getStmt(5): [DeclStmt] declaration +# 1856| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1856| Type = [IntType] int +# 1856| getVariable().getInitializer(): [Initializer] initializer for z +# 1856| getExpr(): [VariableAccess] x +# 1856| Type = [IntType] int +# 1856| ValueCategory = prvalue(load) +# 1857| getStmt(6): [SwitchStmt] switch (...) ... +# 1857| getExpr(): [VariableAccess] z +# 1857| Type = [IntType] int +# 1857| ValueCategory = prvalue(load) +# 1857| getStmt(): [BlockStmt] { ... } +# 1858| getStmt(0): [SwitchCase] default: +# 1859| getStmt(1): [ExprStmt] ExprStmt +# 1859| getExpr(): [AssignExpr] ... = ... +# 1859| Type = [IntType] int +# 1859| ValueCategory = lvalue +# 1859| getLValue(): [VariableAccess] x +# 1859| Type = [IntType] int +# 1859| ValueCategory = lvalue +# 1859| getRValue(): [AddExpr] ... + ... +# 1859| Type = [IntType] int +# 1859| ValueCategory = prvalue +# 1859| getLeftOperand(): [VariableAccess] x +# 1859| Type = [IntType] int +# 1859| ValueCategory = prvalue(load) +# 1859| getRightOperand(): [VariableAccess] z +# 1859| Type = [IntType] int +# 1859| ValueCategory = prvalue(load) +# 1862| getStmt(7): [SwitchStmt] switch (...) ... +# 1862| getExpr(): [ConditionDeclExpr] (condition decl) +# 1862| Type = [IntType] int +# 1862| ValueCategory = prvalue +# 1862| getVariableAccess(): [VariableAccess] z2 +# 1862| Type = [IntType] int +# 1862| ValueCategory = prvalue(load) +# 1862| getStmt(): [BlockStmt] { ... } +# 1863| getStmt(0): [SwitchCase] default: +# 1864| getStmt(1): [ExprStmt] ExprStmt +# 1864| getExpr(): [AssignAddExpr] ... += ... +# 1864| Type = [IntType] int +# 1864| ValueCategory = lvalue +# 1864| getLValue(): [VariableAccess] x +# 1864| Type = [IntType] int +# 1864| ValueCategory = lvalue +# 1864| getRValue(): [VariableAccess] z2 +# 1864| Type = [IntType] int +# 1864| ValueCategory = prvalue(load) +# 1866| getStmt(8): [ReturnStmt] return ... +# 1870| [GlobalVariable] int global_2 +# 1870| getInitializer(): [Initializer] initializer for global_2 +# 1870| getExpr(): [Literal] 1 +# 1870| Type = [IntType] int +# 1870| Value = [Literal] 1 +# 1870| ValueCategory = prvalue +# 1872| [GlobalVariable] int const global_3 +# 1872| getInitializer(): [Initializer] initializer for global_3 +# 1872| getExpr(): [Literal] 2 +# 1872| Type = [IntType] int +# 1872| Value = [Literal] 2 +# 1872| ValueCategory = prvalue +# 1874| [GlobalVariable] constructor_only global_4 +# 1874| getInitializer(): [Initializer] initializer for global_4 +# 1874| getExpr(): [ConstructorCall] call to constructor_only +# 1874| Type = [VoidType] void +# 1874| ValueCategory = prvalue +# 1874| getArgument(0): [Literal] 1 +# 1874| Type = [IntType] int +# 1874| Value = [Literal] 1 +# 1874| ValueCategory = prvalue +# 1876| [GlobalVariable] constructor_only global_5 +# 1876| getInitializer(): [Initializer] initializer for global_5 +# 1876| getExpr(): [ConstructorCall] call to constructor_only +# 1876| Type = [VoidType] void +# 1876| ValueCategory = prvalue +# 1876| getArgument(0): [Literal] 2 +# 1876| Type = [IntType] int +# 1876| Value = [Literal] 2 +# 1876| ValueCategory = prvalue +# 1878| [GlobalVariable] char* global_string +# 1878| getInitializer(): [Initializer] initializer for global_string +# 1878| getExpr(): global string +# 1878| Type = [ArrayType] const char[14] +# 1878| Value = [StringLiteral] "global string" +# 1878| ValueCategory = lvalue +# 1878| getExpr().getFullyConverted(): [CStyleCast] (char *)... +# 1878| Conversion = [PointerConversion] pointer conversion +# 1878| Type = [CharPointerType] char * +# 1878| ValueCategory = prvalue +# 1878| getExpr(): [ArrayToPointerConversion] array to pointer conversion +# 1878| Type = [PointerType] const char * +# 1878| ValueCategory = prvalue +# 1880| [GlobalVariable] int global_6 +# 1880| getInitializer(): [Initializer] initializer for global_6 +# 1880| getExpr(): [VariableAccess] global_2 +# 1880| Type = [IntType] int +# 1880| ValueCategory = prvalue(load) +# 1883| [CopyAssignmentOperator] block_assignment::A& block_assignment::A::operator=(block_assignment::A const&) +# 1883| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const A & -# 1836| [MoveAssignmentOperator] block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) -# 1836| : +# 1883| [MoveAssignmentOperator] block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) +# 1883| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] A && #-----| getEntryPoint(): [BlockStmt] { ... } @@ -14472,43 +14982,43 @@ ir.cpp: #-----| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) #-----| Type = [LValueReferenceType] A & #-----| ValueCategory = prvalue -# 1836| [Constructor] void block_assignment::A::A() -# 1836| : -# 1836| [CopyConstructor] void block_assignment::A::A(block_assignment::A const&) -# 1836| : +# 1883| [Constructor] void block_assignment::A::A() +# 1883| : +# 1883| [CopyConstructor] void block_assignment::A::A(block_assignment::A const&) +# 1883| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const A & -# 1836| [MoveConstructor] void block_assignment::A::A(block_assignment::A&&) -# 1836| : +# 1883| [MoveConstructor] void block_assignment::A::A(block_assignment::A&&) +# 1883| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] A && -# 1838| [VirtualFunction] void block_assignment::A::f() -# 1838| : -# 1841| [CopyAssignmentOperator] block_assignment::B& block_assignment::B::operator=(block_assignment::B const&) -# 1841| : +# 1885| [VirtualFunction] void block_assignment::A::f() +# 1885| : +# 1888| [CopyAssignmentOperator] block_assignment::B& block_assignment::B::operator=(block_assignment::B const&) +# 1888| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const B & -# 1841| [MoveAssignmentOperator] block_assignment::B& block_assignment::B::operator=(block_assignment::B&&) -# 1841| : +# 1888| [MoveAssignmentOperator] block_assignment::B& block_assignment::B::operator=(block_assignment::B&&) +# 1888| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] B && #-----| getEntryPoint(): [BlockStmt] { ... } #-----| getStmt(0): [ExprStmt] ExprStmt -# 1841| getExpr(): [FunctionCall] call to operator= -# 1841| Type = [LValueReferenceType] A & -# 1841| ValueCategory = prvalue -# 1841| getQualifier(): [ThisExpr] this -# 1841| Type = [PointerType] B * -# 1841| ValueCategory = prvalue(load) -# 1841| getArgument(0): [PointerDereferenceExpr] * ... -# 1841| Type = [Class] A -# 1841| ValueCategory = xvalue -# 1841| getOperand(): [AddressOfExpr] & ... -# 1841| Type = [PointerType] B * -# 1841| ValueCategory = prvalue -# 1841| getOperand(): [VariableAccess] (unnamed parameter 0) -# 1841| Type = [RValueReferenceType] B && -# 1841| ValueCategory = prvalue(load) +# 1888| getExpr(): [FunctionCall] call to operator= +# 1888| Type = [LValueReferenceType] A & +# 1888| ValueCategory = prvalue +# 1888| getQualifier(): [ThisExpr] this +# 1888| Type = [PointerType] B * +# 1888| ValueCategory = prvalue(load) +# 1888| getArgument(0): [PointerDereferenceExpr] * ... +# 1888| Type = [Class] A +# 1888| ValueCategory = xvalue +# 1888| getOperand(): [AddressOfExpr] & ... +# 1888| Type = [PointerType] B * +# 1888| ValueCategory = prvalue +# 1888| getOperand(): [VariableAccess] (unnamed parameter 0) +# 1888| Type = [RValueReferenceType] B && +# 1888| ValueCategory = prvalue(load) #-----| getOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [Struct] B #-----| ValueCategory = lvalue @@ -14536,1072 +15046,1072 @@ ir.cpp: #-----| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) #-----| Type = [LValueReferenceType] B & #-----| ValueCategory = prvalue -# 1841| [CopyConstructor] void block_assignment::B::B(block_assignment::B const&) -# 1841| : +# 1888| [CopyConstructor] void block_assignment::B::B(block_assignment::B const&) +# 1888| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const B & -# 1841| [MoveConstructor] void block_assignment::B::B(block_assignment::B&&) -# 1841| : +# 1888| [MoveConstructor] void block_assignment::B::B(block_assignment::B&&) +# 1888| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] B && -# 1842| [Constructor] void block_assignment::B::B(block_assignment::A*) -# 1842| : -# 1842| getParameter(0): [Parameter] (unnamed parameter 0) -# 1842| Type = [PointerType] A * -# 1845| [TopLevelFunction] void block_assignment::foo() -# 1845| : -# 1845| getEntryPoint(): [BlockStmt] { ... } -# 1846| getStmt(0): [DeclStmt] declaration -# 1846| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1846| Type = [Struct] B -# 1846| getVariable().getInitializer(): [Initializer] initializer for v -# 1846| getExpr(): [ConstructorCall] call to B -# 1846| Type = [VoidType] void -# 1846| ValueCategory = prvalue -# 1846| getArgument(0): [Literal] 0 -# 1846| Type = [IntType] int -# 1846| Value = [Literal] 0 -# 1846| ValueCategory = prvalue -# 1846| getArgument(0).getFullyConverted(): [CStyleCast] (A *)... -# 1846| Conversion = [IntegralToPointerConversion] integral to pointer conversion -# 1846| Type = [PointerType] A * -# 1846| Value = [CStyleCast] 0 -# 1846| ValueCategory = prvalue -# 1847| getStmt(1): [ExprStmt] ExprStmt -# 1847| getExpr(): [FunctionCall] call to operator= -# 1847| Type = [LValueReferenceType] B & -# 1847| ValueCategory = prvalue -# 1847| getQualifier(): [VariableAccess] v -# 1847| Type = [Struct] B -# 1847| ValueCategory = lvalue -# 1847| getArgument(0): [ConstructorCall] call to B -# 1847| Type = [VoidType] void -# 1847| ValueCategory = prvalue -# 1847| getArgument(0): [Literal] 0 -# 1847| Type = [IntType] int -# 1847| Value = [Literal] 0 -# 1847| ValueCategory = prvalue -# 1847| getArgument(0).getFullyConverted(): [CStyleCast] (A *)... -# 1847| Conversion = [IntegralToPointerConversion] integral to pointer conversion -# 1847| Type = [PointerType] A * -# 1847| Value = [CStyleCast] 0 -# 1847| ValueCategory = prvalue -# 1847| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1847| Type = [LValueReferenceType] B & -# 1847| ValueCategory = prvalue -# 1847| getExpr(): [TemporaryObjectExpr] temporary object -# 1847| Type = [Struct] B -# 1847| ValueCategory = lvalue -# 1847| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1847| Type = [Struct] B -# 1847| ValueCategory = lvalue -# 1848| getStmt(2): [ReturnStmt] return ... -# 1851| [TopLevelFunction] void magicvars() -# 1851| : -# 1851| getEntryPoint(): [BlockStmt] { ... } -# 1852| getStmt(0): [DeclStmt] declaration -# 1852| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pf -# 1852| Type = [PointerType] const char * -# 1852| getVariable().getInitializer(): [Initializer] initializer for pf -# 1852| getExpr(): [VariableAccess] __PRETTY_FUNCTION__ -# 1852| Type = [ArrayType] const char[17] -# 1852| ValueCategory = lvalue -# 1852| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1852| Type = [PointerType] const char * -# 1852| ValueCategory = prvalue -# 1853| getStmt(1): [DeclStmt] declaration -# 1853| getDeclarationEntry(0): [VariableDeclarationEntry] definition of strfunc -# 1853| Type = [PointerType] const char * -# 1853| getVariable().getInitializer(): [Initializer] initializer for strfunc -# 1853| getExpr(): [VariableAccess] __func__ -# 1853| Type = [ArrayType] const char[10] -# 1853| ValueCategory = lvalue -# 1853| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1853| Type = [PointerType] const char * -# 1853| ValueCategory = prvalue -# 1854| getStmt(2): [ReturnStmt] return ... -# 1857| [CopyAssignmentOperator] missing_declaration_entries::S& missing_declaration_entries::S::operator=(missing_declaration_entries::S const&) -# 1857| : +# 1889| [Constructor] void block_assignment::B::B(block_assignment::A*) +# 1889| : +# 1889| getParameter(0): [Parameter] (unnamed parameter 0) +# 1889| Type = [PointerType] A * +# 1892| [TopLevelFunction] void block_assignment::foo() +# 1892| : +# 1892| getEntryPoint(): [BlockStmt] { ... } +# 1893| getStmt(0): [DeclStmt] declaration +# 1893| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1893| Type = [Struct] B +# 1893| getVariable().getInitializer(): [Initializer] initializer for v +# 1893| getExpr(): [ConstructorCall] call to B +# 1893| Type = [VoidType] void +# 1893| ValueCategory = prvalue +# 1893| getArgument(0): [Literal] 0 +# 1893| Type = [IntType] int +# 1893| Value = [Literal] 0 +# 1893| ValueCategory = prvalue +# 1893| getArgument(0).getFullyConverted(): [CStyleCast] (A *)... +# 1893| Conversion = [IntegralToPointerConversion] integral to pointer conversion +# 1893| Type = [PointerType] A * +# 1893| Value = [CStyleCast] 0 +# 1893| ValueCategory = prvalue +# 1894| getStmt(1): [ExprStmt] ExprStmt +# 1894| getExpr(): [FunctionCall] call to operator= +# 1894| Type = [LValueReferenceType] B & +# 1894| ValueCategory = prvalue +# 1894| getQualifier(): [VariableAccess] v +# 1894| Type = [Struct] B +# 1894| ValueCategory = lvalue +# 1894| getArgument(0): [ConstructorCall] call to B +# 1894| Type = [VoidType] void +# 1894| ValueCategory = prvalue +# 1894| getArgument(0): [Literal] 0 +# 1894| Type = [IntType] int +# 1894| Value = [Literal] 0 +# 1894| ValueCategory = prvalue +# 1894| getArgument(0).getFullyConverted(): [CStyleCast] (A *)... +# 1894| Conversion = [IntegralToPointerConversion] integral to pointer conversion +# 1894| Type = [PointerType] A * +# 1894| Value = [CStyleCast] 0 +# 1894| ValueCategory = prvalue +# 1894| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1894| Type = [LValueReferenceType] B & +# 1894| ValueCategory = prvalue +# 1894| getExpr(): [TemporaryObjectExpr] temporary object +# 1894| Type = [Struct] B +# 1894| ValueCategory = lvalue +# 1894| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1894| Type = [Struct] B +# 1894| ValueCategory = lvalue +# 1895| getStmt(2): [ReturnStmt] return ... +# 1898| [TopLevelFunction] void magicvars() +# 1898| : +# 1898| getEntryPoint(): [BlockStmt] { ... } +# 1899| getStmt(0): [DeclStmt] declaration +# 1899| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pf +# 1899| Type = [PointerType] const char * +# 1899| getVariable().getInitializer(): [Initializer] initializer for pf +# 1899| getExpr(): [VariableAccess] __PRETTY_FUNCTION__ +# 1899| Type = [ArrayType] const char[17] +# 1899| ValueCategory = lvalue +# 1899| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1899| Type = [PointerType] const char * +# 1899| ValueCategory = prvalue +# 1900| getStmt(1): [DeclStmt] declaration +# 1900| getDeclarationEntry(0): [VariableDeclarationEntry] definition of strfunc +# 1900| Type = [PointerType] const char * +# 1900| getVariable().getInitializer(): [Initializer] initializer for strfunc +# 1900| getExpr(): [VariableAccess] __func__ +# 1900| Type = [ArrayType] const char[10] +# 1900| ValueCategory = lvalue +# 1900| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1900| Type = [PointerType] const char * +# 1900| ValueCategory = prvalue +# 1901| getStmt(2): [ReturnStmt] return ... +# 1904| [CopyAssignmentOperator] missing_declaration_entries::S& missing_declaration_entries::S::operator=(missing_declaration_entries::S const&) +# 1904| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const S & -# 1857| [MoveAssignmentOperator] missing_declaration_entries::S& missing_declaration_entries::S::operator=(missing_declaration_entries::S&&) -# 1857| : +# 1904| [MoveAssignmentOperator] missing_declaration_entries::S& missing_declaration_entries::S::operator=(missing_declaration_entries::S&&) +# 1904| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] S && -# 1861| [CopyAssignmentOperator] missing_declaration_entries::Bar1& missing_declaration_entries::Bar1::operator=(missing_declaration_entries::Bar1 const&) -# 1861| : +# 1908| [CopyAssignmentOperator] missing_declaration_entries::Bar1& missing_declaration_entries::Bar1::operator=(missing_declaration_entries::Bar1 const&) +# 1908| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Bar1 & -# 1861| [MoveAssignmentOperator] missing_declaration_entries::Bar1& missing_declaration_entries::Bar1::operator=(missing_declaration_entries::Bar1&&) -# 1861| : +# 1908| [MoveAssignmentOperator] missing_declaration_entries::Bar1& missing_declaration_entries::Bar1::operator=(missing_declaration_entries::Bar1&&) +# 1908| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] Bar1 && -# 1864| [MemberFunction] void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) -# 1864| : -# 1864| getParameter(0): [Parameter] p -# 1864| Type = [CTypedefType,NestedTypedefType] pointer -# 1864| getEntryPoint(): [BlockStmt] { ... } -# 1865| getStmt(0): [DeclStmt] declaration -# 1865| getDeclarationEntry(0): [TypeDeclarationEntry] declaration of _Res -# 1865| Type = [CTypedefType,LocalTypedefType] _Res -# 1866| getStmt(1): [ReturnStmt] return ... -# 1866| getExpr(): [VariableAccess] p -# 1866| Type = [CTypedefType,NestedTypedefType] pointer -# 1866| ValueCategory = prvalue(load) -# 1866| getExpr().getFullyConverted(): [CStyleCast] (void *)... -# 1866| Conversion = [PointerConversion] pointer conversion -# 1866| Type = [VoidPointerType] void * -# 1866| ValueCategory = prvalue -# 1864| [MemberFunction] void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) -# 1864| : -# 1864| getParameter(0): [Parameter] p -# 1864| Type = [CTypedefType,NestedTypedefType] pointer -# 1864| getEntryPoint(): [BlockStmt] { ... } -# 1865| getStmt(0): [DeclStmt] declaration -# 1866| getStmt(1): [ReturnStmt] return ... -# 1866| getExpr(): [VariableAccess] p -# 1866| Type = [CTypedefType,NestedTypedefType] pointer -# 1866| ValueCategory = prvalue(load) -# 1866| getExpr().getFullyConverted(): [CStyleCast] (void *)... -# 1866| Conversion = [PointerConversion] pointer conversion -# 1866| Type = [VoidPointerType] void * -# 1866| ValueCategory = prvalue -# 1870| [TopLevelFunction] void missing_declaration_entries::test1() -# 1870| : -# 1870| getEntryPoint(): [BlockStmt] { ... } -# 1871| getStmt(0): [DeclStmt] declaration -# 1871| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 1871| Type = [ClassTemplateInstantiation,Struct] Bar1 -# 1872| getStmt(1): [ExprStmt] ExprStmt -# 1872| getExpr(): [FunctionCall] call to missing_type_decl_entry -# 1872| Type = [VoidPointerType] void * -# 1872| ValueCategory = prvalue -# 1872| getQualifier(): [VariableAccess] b -# 1872| Type = [ClassTemplateInstantiation,Struct] Bar1 -# 1872| ValueCategory = lvalue -# 1872| getArgument(0): [Literal] 0 -# 1872| Type = [NullPointerType] decltype(nullptr) -# 1872| Value = [Literal] 0 -# 1872| ValueCategory = prvalue -# 1872| getArgument(0).getFullyConverted(): [CStyleCast] (pointer)... -# 1872| Conversion = [PointerConversion] pointer conversion -# 1872| Type = [CTypedefType,NestedTypedefType] pointer -# 1872| Value = [CStyleCast] 0 -# 1872| ValueCategory = prvalue -# 1873| getStmt(2): [ReturnStmt] return ... -# 1875| [CopyAssignmentOperator] missing_declaration_entries::Bar2& missing_declaration_entries::Bar2::operator=(missing_declaration_entries::Bar2 const&) -# 1875| : +# 1911| [MemberFunction] void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) +# 1911| : +# 1911| getParameter(0): [Parameter] p +# 1911| Type = [CTypedefType,NestedTypedefType] pointer +# 1911| getEntryPoint(): [BlockStmt] { ... } +# 1912| getStmt(0): [DeclStmt] declaration +# 1912| getDeclarationEntry(0): [TypeDeclarationEntry] declaration of _Res +# 1912| Type = [CTypedefType,LocalTypedefType] _Res +# 1913| getStmt(1): [ReturnStmt] return ... +# 1913| getExpr(): [VariableAccess] p +# 1913| Type = [CTypedefType,NestedTypedefType] pointer +# 1913| ValueCategory = prvalue(load) +# 1913| getExpr().getFullyConverted(): [CStyleCast] (void *)... +# 1913| Conversion = [PointerConversion] pointer conversion +# 1913| Type = [VoidPointerType] void * +# 1913| ValueCategory = prvalue +# 1911| [MemberFunction] void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) +# 1911| : +# 1911| getParameter(0): [Parameter] p +# 1911| Type = [CTypedefType,NestedTypedefType] pointer +# 1911| getEntryPoint(): [BlockStmt] { ... } +# 1912| getStmt(0): [DeclStmt] declaration +# 1913| getStmt(1): [ReturnStmt] return ... +# 1913| getExpr(): [VariableAccess] p +# 1913| Type = [CTypedefType,NestedTypedefType] pointer +# 1913| ValueCategory = prvalue(load) +# 1913| getExpr().getFullyConverted(): [CStyleCast] (void *)... +# 1913| Conversion = [PointerConversion] pointer conversion +# 1913| Type = [VoidPointerType] void * +# 1913| ValueCategory = prvalue +# 1917| [TopLevelFunction] void missing_declaration_entries::test1() +# 1917| : +# 1917| getEntryPoint(): [BlockStmt] { ... } +# 1918| getStmt(0): [DeclStmt] declaration +# 1918| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 1918| Type = [ClassTemplateInstantiation,Struct] Bar1 +# 1919| getStmt(1): [ExprStmt] ExprStmt +# 1919| getExpr(): [FunctionCall] call to missing_type_decl_entry +# 1919| Type = [VoidPointerType] void * +# 1919| ValueCategory = prvalue +# 1919| getQualifier(): [VariableAccess] b +# 1919| Type = [ClassTemplateInstantiation,Struct] Bar1 +# 1919| ValueCategory = lvalue +# 1919| getArgument(0): [Literal] 0 +# 1919| Type = [NullPointerType] decltype(nullptr) +# 1919| Value = [Literal] 0 +# 1919| ValueCategory = prvalue +# 1919| getArgument(0).getFullyConverted(): [CStyleCast] (pointer)... +# 1919| Conversion = [PointerConversion] pointer conversion +# 1919| Type = [CTypedefType,NestedTypedefType] pointer +# 1919| Value = [CStyleCast] 0 +# 1919| ValueCategory = prvalue +# 1920| getStmt(2): [ReturnStmt] return ... +# 1922| [CopyAssignmentOperator] missing_declaration_entries::Bar2& missing_declaration_entries::Bar2::operator=(missing_declaration_entries::Bar2 const&) +# 1922| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Bar2 & -# 1875| [MoveAssignmentOperator] missing_declaration_entries::Bar2& missing_declaration_entries::Bar2::operator=(missing_declaration_entries::Bar2&&) -# 1875| : +# 1922| [MoveAssignmentOperator] missing_declaration_entries::Bar2& missing_declaration_entries::Bar2::operator=(missing_declaration_entries::Bar2&&) +# 1922| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] Bar2 && -# 1877| [MemberFunction] int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() -# 1877| : -# 1877| getEntryPoint(): [BlockStmt] { ... } -# 1878| getStmt(0): [DeclStmt] declaration -# 1878| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1878| Type = [ArrayType] int[10] -# 1878| getDeclarationEntry(1): [VariableDeclarationEntry] definition of y -# 1878| Type = [ArrayType] int[10] -# 1879| getStmt(1): [ExprStmt] ExprStmt -# 1879| getExpr(): [AssignExpr] ... = ... -# 1879| Type = [IntType] int -# 1879| ValueCategory = lvalue -# 1879| getLValue(): [PointerDereferenceExpr] * ... -# 1879| Type = [IntType] int -# 1879| ValueCategory = lvalue -# 1879| getOperand(): [VariableAccess] x -# 1879| Type = [ArrayType] int[10] -# 1879| ValueCategory = lvalue -# 1879| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1879| Type = [IntPointerType] int * -# 1879| ValueCategory = prvalue -# 1879| getRValue(): [Literal] 10 -# 1879| Type = [IntType] int -# 1879| Value = [Literal] 10 -# 1879| ValueCategory = prvalue -# 1880| getStmt(2): [ExprStmt] ExprStmt -# 1880| getExpr(): [AssignExpr] ... = ... -# 1880| Type = [IntType] int -# 1880| ValueCategory = lvalue -# 1880| getLValue(): [PointerDereferenceExpr] * ... -# 1880| Type = [IntType] int -# 1880| ValueCategory = lvalue -# 1880| getOperand(): [VariableAccess] y -# 1880| Type = [ArrayType] int[10] -# 1880| ValueCategory = lvalue -# 1880| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1880| Type = [IntPointerType] int * -# 1880| ValueCategory = prvalue -# 1880| getRValue(): [Literal] 10 -# 1880| Type = [IntType] int -# 1880| Value = [Literal] 10 -# 1880| ValueCategory = prvalue -# 1881| getStmt(3): [ReturnStmt] return ... -# 1881| getExpr(): [AddExpr] ... + ... -# 1881| Type = [IntType] int -# 1881| ValueCategory = prvalue -# 1881| getLeftOperand(): [PointerDereferenceExpr] * ... -# 1881| Type = [IntType] int -# 1881| ValueCategory = prvalue(load) -# 1881| getOperand(): [VariableAccess] x -# 1881| Type = [ArrayType] int[10] -# 1881| ValueCategory = lvalue -# 1881| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1881| Type = [IntPointerType] int * -# 1881| ValueCategory = prvalue -# 1881| getRightOperand(): [PointerDereferenceExpr] * ... -# 1881| Type = [IntType] int -# 1881| ValueCategory = prvalue(load) -# 1881| getOperand(): [VariableAccess] y -# 1881| Type = [ArrayType] int[10] -# 1881| ValueCategory = lvalue -# 1881| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1881| Type = [IntPointerType] int * -# 1881| ValueCategory = prvalue -# 1877| [MemberFunction] int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() -# 1877| : -# 1877| getEntryPoint(): [BlockStmt] { ... } -# 1878| getStmt(0): [DeclStmt] declaration -# 1879| getStmt(1): [ExprStmt] ExprStmt -# 1879| getExpr(): [AssignExpr] ... = ... -# 1879| Type = [IntType] int -# 1879| ValueCategory = lvalue -# 1879| getLValue(): [PointerDereferenceExpr] * ... -# 1879| Type = [IntType] int -# 1879| ValueCategory = lvalue -# 1879| getOperand(): [VariableAccess] x -# 1879| Type = [ArrayType] int[10] -# 1879| ValueCategory = lvalue -# 1879| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1879| Type = [IntPointerType] int * -# 1879| ValueCategory = prvalue -# 1879| getRValue(): [Literal] 10 -# 1879| Type = [IntType] int -# 1879| Value = [Literal] 10 -# 1879| ValueCategory = prvalue -# 1880| getStmt(2): [ExprStmt] ExprStmt -# 1880| getExpr(): [AssignExpr] ... = ... -# 1880| Type = [IntType] int -# 1880| ValueCategory = lvalue -# 1880| getLValue(): [PointerDereferenceExpr] * ... -# 1880| Type = [IntType] int -# 1880| ValueCategory = lvalue -# 1880| getOperand(): [VariableAccess] y -# 1880| Type = [ArrayType] int[10] -# 1880| ValueCategory = lvalue -# 1880| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1880| Type = [IntPointerType] int * -# 1880| ValueCategory = prvalue -# 1880| getRValue(): [Literal] 10 -# 1880| Type = [IntType] int -# 1880| Value = [Literal] 10 -# 1880| ValueCategory = prvalue -# 1881| getStmt(3): [ReturnStmt] return ... -# 1881| getExpr(): [AddExpr] ... + ... -# 1881| Type = [IntType] int -# 1881| ValueCategory = prvalue -# 1881| getLeftOperand(): [PointerDereferenceExpr] * ... -# 1881| Type = [IntType] int -# 1881| ValueCategory = prvalue(load) -# 1881| getOperand(): [VariableAccess] x -# 1881| Type = [ArrayType] int[10] -# 1881| ValueCategory = lvalue -# 1881| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1881| Type = [IntPointerType] int * -# 1881| ValueCategory = prvalue -# 1881| getRightOperand(): [PointerDereferenceExpr] * ... -# 1881| Type = [IntType] int -# 1881| ValueCategory = prvalue(load) -# 1881| getOperand(): [VariableAccess] y -# 1881| Type = [ArrayType] int[10] -# 1881| ValueCategory = lvalue -# 1881| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1881| Type = [IntPointerType] int * -# 1881| ValueCategory = prvalue -# 1885| [TopLevelFunction] void missing_declaration_entries::test2() -# 1885| : -# 1885| getEntryPoint(): [BlockStmt] { ... } -# 1886| getStmt(0): [DeclStmt] declaration -# 1886| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 1886| Type = [ClassTemplateInstantiation,Struct] Bar2 -# 1887| getStmt(1): [ExprStmt] ExprStmt -# 1887| getExpr(): [FunctionCall] call to two_missing_variable_declaration_entries -# 1887| Type = [IntType] int -# 1887| ValueCategory = prvalue -# 1887| getQualifier(): [VariableAccess] b -# 1887| Type = [ClassTemplateInstantiation,Struct] Bar2 -# 1887| ValueCategory = lvalue -# 1888| getStmt(2): [ReturnStmt] return ... -# 1891| [GlobalVariable] char global_template -# 1891| getInitializer(): [Initializer] initializer for global_template -# 1891| getExpr(): [Literal] 42 -# 1891| Type = [IntType] int -# 1891| Value = [Literal] 42 -# 1891| ValueCategory = prvalue -# 1891| getExpr().getFullyConverted(): [CStyleCast] (char)... -# 1891| Conversion = [IntegralConversion] integral conversion -# 1891| Type = [PlainCharType] char -# 1891| Value = [CStyleCast] 42 -# 1891| ValueCategory = prvalue -# 1891| [GlobalVariable] int global_template -# 1891| getInitializer(): [Initializer] initializer for global_template -# 1891| getExpr(): [Literal] 42 -# 1891| Type = [IntType] int -# 1891| Value = [Literal] 42 -# 1891| ValueCategory = prvalue -# 1893| [TopLevelFunction] int test_global_template_int() -# 1893| : -# 1893| getEntryPoint(): [BlockStmt] { ... } -# 1894| getStmt(0): [DeclStmt] declaration -# 1894| getDeclarationEntry(0): [VariableDeclarationEntry] definition of local_int -# 1894| Type = [IntType] int -# 1894| getVariable().getInitializer(): [Initializer] initializer for local_int -# 1894| getExpr(): [VariableAccess] global_template -# 1894| Type = [IntType] int -# 1894| ValueCategory = prvalue(load) -# 1895| getStmt(1): [DeclStmt] declaration -# 1895| getDeclarationEntry(0): [VariableDeclarationEntry] definition of local_char -# 1895| Type = [PlainCharType] char -# 1895| getVariable().getInitializer(): [Initializer] initializer for local_char -# 1895| getExpr(): [VariableAccess] global_template -# 1895| Type = [PlainCharType] char -# 1895| ValueCategory = prvalue(load) -# 1896| getStmt(2): [ReturnStmt] return ... -# 1896| getExpr(): [AddExpr] ... + ... -# 1896| Type = [IntType] int -# 1896| ValueCategory = prvalue -# 1896| getLeftOperand(): [VariableAccess] local_int -# 1896| Type = [IntType] int -# 1896| ValueCategory = prvalue(load) -# 1896| getRightOperand(): [VariableAccess] local_char -# 1896| Type = [PlainCharType] char -# 1896| ValueCategory = prvalue(load) -# 1896| getRightOperand().getFullyConverted(): [CStyleCast] (int)... -# 1896| Conversion = [IntegralConversion] integral conversion -# 1896| Type = [IntType] int -# 1896| ValueCategory = prvalue -# 1899| [TopLevelFunction] void noreturnFunc() -# 1899| : -# 1901| [TopLevelFunction] int noreturnTest(int) -# 1901| : -# 1901| getParameter(0): [Parameter] x -# 1901| Type = [IntType] int -# 1901| getEntryPoint(): [BlockStmt] { ... } -# 1902| getStmt(0): [IfStmt] if (...) ... -# 1902| getCondition(): [LTExpr] ... < ... -# 1902| Type = [BoolType] bool -# 1902| ValueCategory = prvalue -# 1902| getLesserOperand(): [VariableAccess] x -# 1902| Type = [IntType] int -# 1902| ValueCategory = prvalue(load) -# 1902| getGreaterOperand(): [Literal] 10 -# 1902| Type = [IntType] int -# 1902| Value = [Literal] 10 -# 1902| ValueCategory = prvalue -# 1902| getThen(): [BlockStmt] { ... } -# 1903| getStmt(0): [ReturnStmt] return ... -# 1903| getExpr(): [VariableAccess] x -# 1903| Type = [IntType] int -# 1903| ValueCategory = prvalue(load) -# 1904| getElse(): [BlockStmt] { ... } -# 1905| getStmt(0): [ExprStmt] ExprStmt -# 1905| getExpr(): [FunctionCall] call to noreturnFunc -# 1905| Type = [VoidType] void -# 1905| ValueCategory = prvalue -# 1907| getStmt(1): [ReturnStmt] return ... -# 1909| [TopLevelFunction] int noreturnTest2(int) -# 1909| : -# 1909| getParameter(0): [Parameter] x -# 1909| Type = [IntType] int -# 1909| getEntryPoint(): [BlockStmt] { ... } -# 1910| getStmt(0): [IfStmt] if (...) ... -# 1910| getCondition(): [LTExpr] ... < ... -# 1910| Type = [BoolType] bool -# 1910| ValueCategory = prvalue -# 1910| getLesserOperand(): [VariableAccess] x -# 1910| Type = [IntType] int -# 1910| ValueCategory = prvalue(load) -# 1910| getGreaterOperand(): [Literal] 10 -# 1910| Type = [IntType] int -# 1910| Value = [Literal] 10 -# 1910| ValueCategory = prvalue -# 1910| getThen(): [BlockStmt] { ... } -# 1911| getStmt(0): [ExprStmt] ExprStmt -# 1911| getExpr(): [FunctionCall] call to noreturnFunc -# 1911| Type = [VoidType] void -# 1911| ValueCategory = prvalue -# 1913| getStmt(1): [ReturnStmt] return ... -# 1913| getExpr(): [VariableAccess] x -# 1913| Type = [IntType] int -# 1913| ValueCategory = prvalue(load) -# 1916| [TopLevelFunction] int static_function(int) -# 1916| : -# 1916| getParameter(0): [Parameter] x -# 1916| Type = [IntType] int -# 1916| getEntryPoint(): [BlockStmt] { ... } -# 1917| getStmt(0): [ReturnStmt] return ... -# 1917| getExpr(): [VariableAccess] x -# 1917| Type = [IntType] int -# 1917| ValueCategory = prvalue(load) -# 1920| [TopLevelFunction] void test_static_functions_with_assignments() -# 1920| : -# 1920| getEntryPoint(): [BlockStmt] { ... } -# 1921| getStmt(0): [DeclStmt] declaration -# 1921| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 1921| Type = [Class] C -# 1921| getVariable().getInitializer(): [Initializer] initializer for c -# 1921| getExpr(): [ConstructorCall] call to C -# 1921| Type = [VoidType] void -# 1921| ValueCategory = prvalue -# 1922| getStmt(1): [DeclStmt] declaration -# 1922| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1922| Type = [IntType] int -# 1923| getStmt(2): [ExprStmt] ExprStmt -# 1923| getExpr(): [AssignExpr] ... = ... -# 1923| Type = [IntType] int -# 1923| ValueCategory = lvalue -# 1923| getLValue(): [VariableAccess] x -# 1923| Type = [IntType] int -# 1923| ValueCategory = lvalue -# 1923| getRValue(): [FunctionCall] call to StaticMemberFunction -# 1923| Type = [IntType] int -# 1923| ValueCategory = prvalue -# 1923| getQualifier(): [VariableAccess] c -# 1923| Type = [Class] C -# 1923| ValueCategory = lvalue -# 1923| getArgument(0): [Literal] 10 -# 1923| Type = [IntType] int -# 1923| Value = [Literal] 10 -# 1923| ValueCategory = prvalue -# 1924| getStmt(3): [DeclStmt] declaration -# 1924| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1924| Type = [IntType] int -# 1925| getStmt(4): [ExprStmt] ExprStmt -# 1925| getExpr(): [AssignExpr] ... = ... -# 1925| Type = [IntType] int -# 1925| ValueCategory = lvalue -# 1925| getLValue(): [VariableAccess] y -# 1925| Type = [IntType] int -# 1925| ValueCategory = lvalue -# 1925| getRValue(): [FunctionCall] call to StaticMemberFunction -# 1925| Type = [IntType] int -# 1925| ValueCategory = prvalue -# 1925| getArgument(0): [Literal] 10 -# 1925| Type = [IntType] int -# 1925| Value = [Literal] 10 -# 1925| ValueCategory = prvalue -# 1926| getStmt(5): [DeclStmt] declaration -# 1926| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1924| [MemberFunction] int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() +# 1924| : +# 1924| getEntryPoint(): [BlockStmt] { ... } +# 1925| getStmt(0): [DeclStmt] declaration +# 1925| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1925| Type = [ArrayType] int[10] +# 1925| getDeclarationEntry(1): [VariableDeclarationEntry] definition of y +# 1925| Type = [ArrayType] int[10] +# 1926| getStmt(1): [ExprStmt] ExprStmt +# 1926| getExpr(): [AssignExpr] ... = ... # 1926| Type = [IntType] int -# 1927| getStmt(6): [ExprStmt] ExprStmt +# 1926| ValueCategory = lvalue +# 1926| getLValue(): [PointerDereferenceExpr] * ... +# 1926| Type = [IntType] int +# 1926| ValueCategory = lvalue +# 1926| getOperand(): [VariableAccess] x +# 1926| Type = [ArrayType] int[10] +# 1926| ValueCategory = lvalue +# 1926| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1926| Type = [IntPointerType] int * +# 1926| ValueCategory = prvalue +# 1926| getRValue(): [Literal] 10 +# 1926| Type = [IntType] int +# 1926| Value = [Literal] 10 +# 1926| ValueCategory = prvalue +# 1927| getStmt(2): [ExprStmt] ExprStmt # 1927| getExpr(): [AssignExpr] ... = ... # 1927| Type = [IntType] int # 1927| ValueCategory = lvalue -# 1927| getLValue(): [VariableAccess] z +# 1927| getLValue(): [PointerDereferenceExpr] * ... # 1927| Type = [IntType] int # 1927| ValueCategory = lvalue -# 1927| getRValue(): [FunctionCall] call to static_function -# 1927| Type = [IntType] int -# 1927| ValueCategory = prvalue -# 1927| getArgument(0): [Literal] 10 -# 1927| Type = [IntType] int -# 1927| Value = [Literal] 10 +# 1927| getOperand(): [VariableAccess] y +# 1927| Type = [ArrayType] int[10] +# 1927| ValueCategory = lvalue +# 1927| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1927| Type = [IntPointerType] int * # 1927| ValueCategory = prvalue -# 1928| getStmt(7): [ReturnStmt] return ... -# 1928| getImplicitDestructorCall(0): [DestructorCall] call to ~C -# 1928| Type = [VoidType] void +# 1927| getRValue(): [Literal] 10 +# 1927| Type = [IntType] int +# 1927| Value = [Literal] 10 +# 1927| ValueCategory = prvalue +# 1928| getStmt(3): [ReturnStmt] return ... +# 1928| getExpr(): [AddExpr] ... + ... +# 1928| Type = [IntType] int # 1928| ValueCategory = prvalue -# 1928| getQualifier(): [VariableAccess] c -# 1928| Type = [Class] C -# 1928| ValueCategory = lvalue -# 1930| [TopLevelFunction] void test_double_assign() -# 1930| : -# 1930| getEntryPoint(): [BlockStmt] { ... } -# 1931| getStmt(0): [DeclStmt] declaration -# 1931| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i -# 1931| Type = [IntType] int -# 1931| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j -# 1931| Type = [IntType] int -# 1932| getStmt(1): [ExprStmt] ExprStmt -# 1932| getExpr(): [AssignExpr] ... = ... -# 1932| Type = [IntType] int -# 1932| ValueCategory = lvalue -# 1932| getLValue(): [VariableAccess] i -# 1932| Type = [IntType] int -# 1932| ValueCategory = lvalue -# 1932| getRValue(): [AssignExpr] ... = ... -# 1932| Type = [IntType] int -# 1932| ValueCategory = prvalue(load) -# 1932| getLValue(): [VariableAccess] j -# 1932| Type = [IntType] int -# 1932| ValueCategory = lvalue -# 1932| getRValue(): [Literal] 40 -# 1932| Type = [IntType] int -# 1932| Value = [Literal] 40 -# 1932| ValueCategory = prvalue -# 1933| getStmt(2): [ReturnStmt] return ... -# 1935| [TopLevelFunction] void test_assign_with_assign_operation() -# 1935| : -# 1935| getEntryPoint(): [BlockStmt] { ... } -# 1936| getStmt(0): [DeclStmt] declaration -# 1936| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i -# 1936| Type = [IntType] int -# 1936| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j -# 1936| Type = [IntType] int -# 1936| getVariable().getInitializer(): [Initializer] initializer for j -# 1936| getExpr(): [Literal] 0 -# 1936| Type = [IntType] int -# 1936| Value = [Literal] 0 -# 1936| ValueCategory = prvalue -# 1937| getStmt(1): [ExprStmt] ExprStmt -# 1937| getExpr(): [AssignExpr] ... = ... -# 1937| Type = [IntType] int -# 1937| ValueCategory = lvalue -# 1937| getLValue(): [VariableAccess] i -# 1937| Type = [IntType] int -# 1937| ValueCategory = lvalue -# 1937| getRValue(): [AssignAddExpr] ... += ... -# 1937| Type = [IntType] int -# 1937| ValueCategory = prvalue(load) -# 1937| getLValue(): [VariableAccess] j -# 1937| Type = [IntType] int -# 1937| ValueCategory = lvalue -# 1937| getRValue(): [Literal] 40 -# 1937| Type = [IntType] int -# 1937| Value = [Literal] 40 -# 1937| ValueCategory = prvalue -# 1937| getRValue().getFullyConverted(): [ParenthesisExpr] (...) -# 1937| Type = [IntType] int -# 1937| ValueCategory = prvalue(load) -# 1938| getStmt(2): [ReturnStmt] return ... -# 1940| [CopyAssignmentOperator] D& D::operator=(D const&) +# 1928| getLeftOperand(): [PointerDereferenceExpr] * ... +# 1928| Type = [IntType] int +# 1928| ValueCategory = prvalue(load) +# 1928| getOperand(): [VariableAccess] x +# 1928| Type = [ArrayType] int[10] +# 1928| ValueCategory = lvalue +# 1928| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1928| Type = [IntPointerType] int * +# 1928| ValueCategory = prvalue +# 1928| getRightOperand(): [PointerDereferenceExpr] * ... +# 1928| Type = [IntType] int +# 1928| ValueCategory = prvalue(load) +# 1928| getOperand(): [VariableAccess] y +# 1928| Type = [ArrayType] int[10] +# 1928| ValueCategory = lvalue +# 1928| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1928| Type = [IntPointerType] int * +# 1928| ValueCategory = prvalue +# 1924| [MemberFunction] int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() +# 1924| : +# 1924| getEntryPoint(): [BlockStmt] { ... } +# 1925| getStmt(0): [DeclStmt] declaration +# 1926| getStmt(1): [ExprStmt] ExprStmt +# 1926| getExpr(): [AssignExpr] ... = ... +# 1926| Type = [IntType] int +# 1926| ValueCategory = lvalue +# 1926| getLValue(): [PointerDereferenceExpr] * ... +# 1926| Type = [IntType] int +# 1926| ValueCategory = lvalue +# 1926| getOperand(): [VariableAccess] x +# 1926| Type = [ArrayType] int[10] +# 1926| ValueCategory = lvalue +# 1926| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1926| Type = [IntPointerType] int * +# 1926| ValueCategory = prvalue +# 1926| getRValue(): [Literal] 10 +# 1926| Type = [IntType] int +# 1926| Value = [Literal] 10 +# 1926| ValueCategory = prvalue +# 1927| getStmt(2): [ExprStmt] ExprStmt +# 1927| getExpr(): [AssignExpr] ... = ... +# 1927| Type = [IntType] int +# 1927| ValueCategory = lvalue +# 1927| getLValue(): [PointerDereferenceExpr] * ... +# 1927| Type = [IntType] int +# 1927| ValueCategory = lvalue +# 1927| getOperand(): [VariableAccess] y +# 1927| Type = [ArrayType] int[10] +# 1927| ValueCategory = lvalue +# 1927| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1927| Type = [IntPointerType] int * +# 1927| ValueCategory = prvalue +# 1927| getRValue(): [Literal] 10 +# 1927| Type = [IntType] int +# 1927| Value = [Literal] 10 +# 1927| ValueCategory = prvalue +# 1928| getStmt(3): [ReturnStmt] return ... +# 1928| getExpr(): [AddExpr] ... + ... +# 1928| Type = [IntType] int +# 1928| ValueCategory = prvalue +# 1928| getLeftOperand(): [PointerDereferenceExpr] * ... +# 1928| Type = [IntType] int +# 1928| ValueCategory = prvalue(load) +# 1928| getOperand(): [VariableAccess] x +# 1928| Type = [ArrayType] int[10] +# 1928| ValueCategory = lvalue +# 1928| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1928| Type = [IntPointerType] int * +# 1928| ValueCategory = prvalue +# 1928| getRightOperand(): [PointerDereferenceExpr] * ... +# 1928| Type = [IntType] int +# 1928| ValueCategory = prvalue(load) +# 1928| getOperand(): [VariableAccess] y +# 1928| Type = [ArrayType] int[10] +# 1928| ValueCategory = lvalue +# 1928| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1928| Type = [IntPointerType] int * +# 1928| ValueCategory = prvalue +# 1932| [TopLevelFunction] void missing_declaration_entries::test2() +# 1932| : +# 1932| getEntryPoint(): [BlockStmt] { ... } +# 1933| getStmt(0): [DeclStmt] declaration +# 1933| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 1933| Type = [ClassTemplateInstantiation,Struct] Bar2 +# 1934| getStmt(1): [ExprStmt] ExprStmt +# 1934| getExpr(): [FunctionCall] call to two_missing_variable_declaration_entries +# 1934| Type = [IntType] int +# 1934| ValueCategory = prvalue +# 1934| getQualifier(): [VariableAccess] b +# 1934| Type = [ClassTemplateInstantiation,Struct] Bar2 +# 1934| ValueCategory = lvalue +# 1935| getStmt(2): [ReturnStmt] return ... +# 1938| [GlobalVariable] char global_template +# 1938| getInitializer(): [Initializer] initializer for global_template +# 1938| getExpr(): [Literal] 42 +# 1938| Type = [IntType] int +# 1938| Value = [Literal] 42 +# 1938| ValueCategory = prvalue +# 1938| getExpr().getFullyConverted(): [CStyleCast] (char)... +# 1938| Conversion = [IntegralConversion] integral conversion +# 1938| Type = [PlainCharType] char +# 1938| Value = [CStyleCast] 42 +# 1938| ValueCategory = prvalue +# 1938| [GlobalVariable] int global_template +# 1938| getInitializer(): [Initializer] initializer for global_template +# 1938| getExpr(): [Literal] 42 +# 1938| Type = [IntType] int +# 1938| Value = [Literal] 42 +# 1938| ValueCategory = prvalue +# 1940| [TopLevelFunction] int test_global_template_int() # 1940| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const D & -# 1940| [MoveAssignmentOperator] D& D::operator=(D&&) -# 1940| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] D && -# 1944| [MemberFunction] D& D::ReferenceStaticMemberFunction() -# 1944| : -# 1944| getEntryPoint(): [BlockStmt] { ... } -# 1945| getStmt(0): [ReturnStmt] return ... -# 1945| getExpr(): [VariableAccess] x -# 1945| Type = [Class] D -# 1945| ValueCategory = lvalue -# 1945| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1945| Type = [LValueReferenceType] D & -# 1945| ValueCategory = prvalue -# 1947| [MemberFunction] D D::ObjectStaticMemberFunction() -# 1947| : -# 1947| getEntryPoint(): [BlockStmt] { ... } -# 1948| getStmt(0): [ReturnStmt] return ... -# 1948| getExpr(): [VariableAccess] x -# 1948| Type = [Class] D -# 1948| ValueCategory = prvalue(load) -# 1952| [TopLevelFunction] void test_static_member_functions_with_reference_return() -# 1952| : -# 1952| getEntryPoint(): [BlockStmt] { ... } -# 1953| getStmt(0): [DeclStmt] declaration -# 1953| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 1953| Type = [Class] D -# 1955| getStmt(1): [ExprStmt] ExprStmt -# 1955| getExpr(): [FunctionCall] call to ReferenceStaticMemberFunction -# 1955| Type = [LValueReferenceType] D & -# 1955| ValueCategory = prvalue -# 1955| getQualifier(): [VariableAccess] d -# 1955| Type = [Class] D -# 1955| ValueCategory = lvalue -# 1955| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1955| Type = [Class] D -# 1955| ValueCategory = lvalue -# 1956| getStmt(2): [ExprStmt] ExprStmt -# 1956| getExpr(): [FunctionCall] call to ReferenceStaticMemberFunction -# 1956| Type = [LValueReferenceType] D & -# 1956| ValueCategory = prvalue -# 1956| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1956| Type = [Class] D -# 1956| ValueCategory = lvalue -# 1957| getStmt(3): [ExprStmt] ExprStmt -# 1957| getExpr(): [FunctionCall] call to ObjectStaticMemberFunction -# 1957| Type = [Class] D +# 1940| getEntryPoint(): [BlockStmt] { ... } +# 1941| getStmt(0): [DeclStmt] declaration +# 1941| getDeclarationEntry(0): [VariableDeclarationEntry] definition of local_int +# 1941| Type = [IntType] int +# 1941| getVariable().getInitializer(): [Initializer] initializer for local_int +# 1941| getExpr(): [VariableAccess] global_template +# 1941| Type = [IntType] int +# 1941| ValueCategory = prvalue(load) +# 1942| getStmt(1): [DeclStmt] declaration +# 1942| getDeclarationEntry(0): [VariableDeclarationEntry] definition of local_char +# 1942| Type = [PlainCharType] char +# 1942| getVariable().getInitializer(): [Initializer] initializer for local_char +# 1942| getExpr(): [VariableAccess] global_template +# 1942| Type = [PlainCharType] char +# 1942| ValueCategory = prvalue(load) +# 1943| getStmt(2): [ReturnStmt] return ... +# 1943| getExpr(): [AddExpr] ... + ... +# 1943| Type = [IntType] int +# 1943| ValueCategory = prvalue +# 1943| getLeftOperand(): [VariableAccess] local_int +# 1943| Type = [IntType] int +# 1943| ValueCategory = prvalue(load) +# 1943| getRightOperand(): [VariableAccess] local_char +# 1943| Type = [PlainCharType] char +# 1943| ValueCategory = prvalue(load) +# 1943| getRightOperand().getFullyConverted(): [CStyleCast] (int)... +# 1943| Conversion = [IntegralConversion] integral conversion +# 1943| Type = [IntType] int +# 1943| ValueCategory = prvalue +# 1946| [TopLevelFunction] void noreturnFunc() +# 1946| : +# 1948| [TopLevelFunction] int noreturnTest(int) +# 1948| : +# 1948| getParameter(0): [Parameter] x +# 1948| Type = [IntType] int +# 1948| getEntryPoint(): [BlockStmt] { ... } +# 1949| getStmt(0): [IfStmt] if (...) ... +# 1949| getCondition(): [LTExpr] ... < ... +# 1949| Type = [BoolType] bool +# 1949| ValueCategory = prvalue +# 1949| getLesserOperand(): [VariableAccess] x +# 1949| Type = [IntType] int +# 1949| ValueCategory = prvalue(load) +# 1949| getGreaterOperand(): [Literal] 10 +# 1949| Type = [IntType] int +# 1949| Value = [Literal] 10 +# 1949| ValueCategory = prvalue +# 1949| getThen(): [BlockStmt] { ... } +# 1950| getStmt(0): [ReturnStmt] return ... +# 1950| getExpr(): [VariableAccess] x +# 1950| Type = [IntType] int +# 1950| ValueCategory = prvalue(load) +# 1951| getElse(): [BlockStmt] { ... } +# 1952| getStmt(0): [ExprStmt] ExprStmt +# 1952| getExpr(): [FunctionCall] call to noreturnFunc +# 1952| Type = [VoidType] void +# 1952| ValueCategory = prvalue +# 1954| getStmt(1): [ReturnStmt] return ... +# 1956| [TopLevelFunction] int noreturnTest2(int) +# 1956| : +# 1956| getParameter(0): [Parameter] x +# 1956| Type = [IntType] int +# 1956| getEntryPoint(): [BlockStmt] { ... } +# 1957| getStmt(0): [IfStmt] if (...) ... +# 1957| getCondition(): [LTExpr] ... < ... +# 1957| Type = [BoolType] bool # 1957| ValueCategory = prvalue -# 1957| getQualifier(): [VariableAccess] d -# 1957| Type = [Class] D -# 1957| ValueCategory = lvalue -# 1958| getStmt(4): [ExprStmt] ExprStmt -# 1958| getExpr(): [FunctionCall] call to ObjectStaticMemberFunction -# 1958| Type = [Class] D -# 1958| ValueCategory = prvalue -# 1960| getStmt(5): [DeclStmt] declaration -# 1960| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1960| Type = [Class] D -# 1961| getStmt(6): [ExprStmt] ExprStmt -# 1961| getExpr(): [AssignExpr] ... = ... -# 1961| Type = [Class] D -# 1961| ValueCategory = lvalue -# 1961| getLValue(): [VariableAccess] x -# 1961| Type = [Class] D -# 1961| ValueCategory = lvalue -# 1961| getRValue(): [FunctionCall] call to ReferenceStaticMemberFunction -# 1961| Type = [LValueReferenceType] D & -# 1961| ValueCategory = prvalue -# 1961| getQualifier(): [VariableAccess] d -# 1961| Type = [Class] D -# 1961| ValueCategory = lvalue -# 1961| getRValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1961| Type = [Class] D -# 1961| ValueCategory = prvalue(load) -# 1962| getStmt(7): [DeclStmt] declaration -# 1962| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1962| Type = [Class] D -# 1963| getStmt(8): [ExprStmt] ExprStmt -# 1963| getExpr(): [AssignExpr] ... = ... -# 1963| Type = [Class] D -# 1963| ValueCategory = lvalue -# 1963| getLValue(): [VariableAccess] y -# 1963| Type = [Class] D -# 1963| ValueCategory = lvalue -# 1963| getRValue(): [FunctionCall] call to ReferenceStaticMemberFunction -# 1963| Type = [LValueReferenceType] D & -# 1963| ValueCategory = prvalue -# 1963| getRValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1963| Type = [Class] D -# 1963| ValueCategory = prvalue(load) -# 1964| getStmt(9): [DeclStmt] declaration -# 1964| getDeclarationEntry(0): [VariableDeclarationEntry] definition of j -# 1964| Type = [Class] D -# 1965| getStmt(10): [ExprStmt] ExprStmt -# 1965| getExpr(): [AssignExpr] ... = ... -# 1965| Type = [Class] D -# 1965| ValueCategory = lvalue -# 1965| getLValue(): [VariableAccess] j -# 1965| Type = [Class] D -# 1965| ValueCategory = lvalue -# 1965| getRValue(): [FunctionCall] call to ObjectStaticMemberFunction -# 1965| Type = [Class] D -# 1965| ValueCategory = prvalue -# 1965| getQualifier(): [VariableAccess] d -# 1965| Type = [Class] D -# 1965| ValueCategory = lvalue -# 1966| getStmt(11): [DeclStmt] declaration -# 1966| getDeclarationEntry(0): [VariableDeclarationEntry] definition of k -# 1966| Type = [Class] D -# 1967| getStmt(12): [ExprStmt] ExprStmt -# 1967| getExpr(): [AssignExpr] ... = ... -# 1967| Type = [Class] D -# 1967| ValueCategory = lvalue -# 1967| getLValue(): [VariableAccess] k -# 1967| Type = [Class] D -# 1967| ValueCategory = lvalue -# 1967| getRValue(): [FunctionCall] call to ObjectStaticMemberFunction -# 1967| Type = [Class] D -# 1967| ValueCategory = prvalue -# 1968| getStmt(13): [ReturnStmt] return ... -# 1970| [TopLevelFunction] void test_volatile() -# 1970| : -# 1970| getEntryPoint(): [BlockStmt] { ... } -# 1971| getStmt(0): [DeclStmt] declaration -# 1971| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1971| Type = [SpecifiedType] volatile int -# 1972| getStmt(1): [ExprStmt] ExprStmt -# 1972| getExpr(): [VariableAccess] x +# 1957| getLesserOperand(): [VariableAccess] x +# 1957| Type = [IntType] int +# 1957| ValueCategory = prvalue(load) +# 1957| getGreaterOperand(): [Literal] 10 +# 1957| Type = [IntType] int +# 1957| Value = [Literal] 10 +# 1957| ValueCategory = prvalue +# 1957| getThen(): [BlockStmt] { ... } +# 1958| getStmt(0): [ExprStmt] ExprStmt +# 1958| getExpr(): [FunctionCall] call to noreturnFunc +# 1958| Type = [VoidType] void +# 1958| ValueCategory = prvalue +# 1960| getStmt(1): [ReturnStmt] return ... +# 1960| getExpr(): [VariableAccess] x +# 1960| Type = [IntType] int +# 1960| ValueCategory = prvalue(load) +# 1963| [TopLevelFunction] int static_function(int) +# 1963| : +# 1963| getParameter(0): [Parameter] x +# 1963| Type = [IntType] int +# 1963| getEntryPoint(): [BlockStmt] { ... } +# 1964| getStmt(0): [ReturnStmt] return ... +# 1964| getExpr(): [VariableAccess] x +# 1964| Type = [IntType] int +# 1964| ValueCategory = prvalue(load) +# 1967| [TopLevelFunction] void test_static_functions_with_assignments() +# 1967| : +# 1967| getEntryPoint(): [BlockStmt] { ... } +# 1968| getStmt(0): [DeclStmt] declaration +# 1968| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 1968| Type = [Class] C +# 1968| getVariable().getInitializer(): [Initializer] initializer for c +# 1968| getExpr(): [ConstructorCall] call to C +# 1968| Type = [VoidType] void +# 1968| ValueCategory = prvalue +# 1969| getStmt(1): [DeclStmt] declaration +# 1969| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1969| Type = [IntType] int +# 1970| getStmt(2): [ExprStmt] ExprStmt +# 1970| getExpr(): [AssignExpr] ... = ... +# 1970| Type = [IntType] int +# 1970| ValueCategory = lvalue +# 1970| getLValue(): [VariableAccess] x +# 1970| Type = [IntType] int +# 1970| ValueCategory = lvalue +# 1970| getRValue(): [FunctionCall] call to StaticMemberFunction +# 1970| Type = [IntType] int +# 1970| ValueCategory = prvalue +# 1970| getQualifier(): [VariableAccess] c +# 1970| Type = [Class] C +# 1970| ValueCategory = lvalue +# 1970| getArgument(0): [Literal] 10 +# 1970| Type = [IntType] int +# 1970| Value = [Literal] 10 +# 1970| ValueCategory = prvalue +# 1971| getStmt(3): [DeclStmt] declaration +# 1971| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1971| Type = [IntType] int +# 1972| getStmt(4): [ExprStmt] ExprStmt +# 1972| getExpr(): [AssignExpr] ... = ... # 1972| Type = [IntType] int -# 1972| ValueCategory = prvalue(load) -# 1973| getStmt(2): [ReturnStmt] return ... -# 1975| [CopyAssignmentOperator] ValCat& ValCat::operator=(ValCat const&) -# 1975| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const ValCat & -# 1975| [MoveAssignmentOperator] ValCat& ValCat::operator=(ValCat&&) -# 1975| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] ValCat && -# 1976| [MemberFunction] ValCat& ValCat::lvalue() -# 1976| : -# 1977| [MemberFunction] ValCat&& ValCat::xvalue() +# 1972| ValueCategory = lvalue +# 1972| getLValue(): [VariableAccess] y +# 1972| Type = [IntType] int +# 1972| ValueCategory = lvalue +# 1972| getRValue(): [FunctionCall] call to StaticMemberFunction +# 1972| Type = [IntType] int +# 1972| ValueCategory = prvalue +# 1972| getArgument(0): [Literal] 10 +# 1972| Type = [IntType] int +# 1972| Value = [Literal] 10 +# 1972| ValueCategory = prvalue +# 1973| getStmt(5): [DeclStmt] declaration +# 1973| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1973| Type = [IntType] int +# 1974| getStmt(6): [ExprStmt] ExprStmt +# 1974| getExpr(): [AssignExpr] ... = ... +# 1974| Type = [IntType] int +# 1974| ValueCategory = lvalue +# 1974| getLValue(): [VariableAccess] z +# 1974| Type = [IntType] int +# 1974| ValueCategory = lvalue +# 1974| getRValue(): [FunctionCall] call to static_function +# 1974| Type = [IntType] int +# 1974| ValueCategory = prvalue +# 1974| getArgument(0): [Literal] 10 +# 1974| Type = [IntType] int +# 1974| Value = [Literal] 10 +# 1974| ValueCategory = prvalue +# 1975| getStmt(7): [ReturnStmt] return ... +# 1975| getImplicitDestructorCall(0): [DestructorCall] call to ~C +# 1975| Type = [VoidType] void +# 1975| ValueCategory = prvalue +# 1975| getQualifier(): [VariableAccess] c +# 1975| Type = [Class] C +# 1975| ValueCategory = lvalue +# 1977| [TopLevelFunction] void test_double_assign() # 1977| : -# 1978| [MemberFunction] ValCat ValCat::prvalue() -# 1978| : -# 1981| [TopLevelFunction] void value_category_test() -# 1981| : -# 1981| getEntryPoint(): [BlockStmt] { ... } -# 1982| getStmt(0): [DeclStmt] declaration -# 1982| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 1982| Type = [Struct] ValCat +# 1977| getEntryPoint(): [BlockStmt] { ... } +# 1978| getStmt(0): [DeclStmt] declaration +# 1978| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1978| Type = [IntType] int +# 1978| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j +# 1978| Type = [IntType] int +# 1979| getStmt(1): [ExprStmt] ExprStmt +# 1979| getExpr(): [AssignExpr] ... = ... +# 1979| Type = [IntType] int +# 1979| ValueCategory = lvalue +# 1979| getLValue(): [VariableAccess] i +# 1979| Type = [IntType] int +# 1979| ValueCategory = lvalue +# 1979| getRValue(): [AssignExpr] ... = ... +# 1979| Type = [IntType] int +# 1979| ValueCategory = prvalue(load) +# 1979| getLValue(): [VariableAccess] j +# 1979| Type = [IntType] int +# 1979| ValueCategory = lvalue +# 1979| getRValue(): [Literal] 40 +# 1979| Type = [IntType] int +# 1979| Value = [Literal] 40 +# 1979| ValueCategory = prvalue +# 1980| getStmt(2): [ReturnStmt] return ... +# 1982| [TopLevelFunction] void test_assign_with_assign_operation() +# 1982| : +# 1982| getEntryPoint(): [BlockStmt] { ... } +# 1983| getStmt(0): [DeclStmt] declaration +# 1983| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1983| Type = [IntType] int +# 1983| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j +# 1983| Type = [IntType] int +# 1983| getVariable().getInitializer(): [Initializer] initializer for j +# 1983| getExpr(): [Literal] 0 +# 1983| Type = [IntType] int +# 1983| Value = [Literal] 0 +# 1983| ValueCategory = prvalue # 1984| getStmt(1): [ExprStmt] ExprStmt # 1984| getExpr(): [AssignExpr] ... = ... -# 1984| Type = [Struct] ValCat +# 1984| Type = [IntType] int # 1984| ValueCategory = lvalue -# 1984| getLValue(): [FunctionCall] call to lvalue -# 1984| Type = [LValueReferenceType] ValCat & -# 1984| ValueCategory = prvalue -# 1984| getQualifier(): [VariableAccess] c -# 1984| Type = [Struct] ValCat -# 1984| ValueCategory = lvalue -# 1984| getRValue(): [ClassAggregateLiteral] {...} -# 1984| Type = [Struct] ValCat -# 1984| ValueCategory = prvalue -# 1984| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1984| Type = [Struct] ValCat +# 1984| getLValue(): [VariableAccess] i +# 1984| Type = [IntType] int # 1984| ValueCategory = lvalue -#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [Struct] ValCat -#-----| ValueCategory = prvalue(load) -# 1985| getStmt(2): [ExprStmt] ExprStmt -# 1985| getExpr(): [AssignExpr] ... = ... -# 1985| Type = [Struct] ValCat -# 1985| ValueCategory = lvalue -# 1985| getLValue(): [FunctionCall] call to xvalue -# 1985| Type = [RValueReferenceType] ValCat && -# 1985| ValueCategory = prvalue -# 1985| getQualifier(): [VariableAccess] c -# 1985| Type = [Struct] ValCat -# 1985| ValueCategory = lvalue -# 1985| getRValue(): [ClassAggregateLiteral] {...} -# 1985| Type = [Struct] ValCat -# 1985| ValueCategory = prvalue -# 1985| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1985| Type = [Struct] ValCat -# 1985| ValueCategory = lvalue -#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [Struct] ValCat -#-----| ValueCategory = prvalue(load) -# 1986| getStmt(3): [ExprStmt] ExprStmt -# 1986| getExpr(): [AssignExpr] ... = ... -# 1986| Type = [Struct] ValCat -# 1986| ValueCategory = lvalue -# 1986| getLValue(): [FunctionCall] call to prvalue -# 1986| Type = [Struct] ValCat -# 1986| ValueCategory = prvalue -# 1986| getQualifier(): [VariableAccess] c -# 1986| Type = [Struct] ValCat -# 1986| ValueCategory = lvalue -# 1986| getRValue(): [ClassAggregateLiteral] {...} -# 1986| Type = [Struct] ValCat -# 1986| ValueCategory = prvalue -# 1986| getLValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1986| Type = [Struct] ValCat -# 1986| ValueCategory = lvalue -#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [Struct] ValCat -#-----| ValueCategory = prvalue(load) -# 1987| getStmt(4): [ExprStmt] ExprStmt -# 1987| getExpr(): [AssignExpr] ... = ... -# 1987| Type = [Struct] ValCat -# 1987| ValueCategory = lvalue -# 1987| getLValue(): [FunctionCall] call to lvalue -# 1987| Type = [LValueReferenceType] ValCat & -# 1987| ValueCategory = prvalue -# 1987| getRValue(): [ClassAggregateLiteral] {...} -# 1987| Type = [Struct] ValCat -# 1987| ValueCategory = prvalue -# 1987| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1987| Type = [Struct] ValCat -# 1987| ValueCategory = lvalue -#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [Struct] ValCat -#-----| ValueCategory = prvalue(load) -# 1988| getStmt(5): [ExprStmt] ExprStmt -# 1988| getExpr(): [AssignExpr] ... = ... -# 1988| Type = [Struct] ValCat -# 1988| ValueCategory = lvalue -# 1988| getLValue(): [FunctionCall] call to xvalue -# 1988| Type = [RValueReferenceType] ValCat && -# 1988| ValueCategory = prvalue -# 1988| getRValue(): [ClassAggregateLiteral] {...} -# 1988| Type = [Struct] ValCat -# 1988| ValueCategory = prvalue -# 1988| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1988| Type = [Struct] ValCat -# 1988| ValueCategory = lvalue -#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [Struct] ValCat -#-----| ValueCategory = prvalue(load) -# 1989| getStmt(6): [ExprStmt] ExprStmt -# 1989| getExpr(): [AssignExpr] ... = ... -# 1989| Type = [Struct] ValCat -# 1989| ValueCategory = lvalue -# 1989| getLValue(): [FunctionCall] call to prvalue -# 1989| Type = [Struct] ValCat -# 1989| ValueCategory = prvalue -# 1989| getRValue(): [ClassAggregateLiteral] {...} -# 1989| Type = [Struct] ValCat -# 1989| ValueCategory = prvalue -# 1989| getLValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1989| Type = [Struct] ValCat -# 1989| ValueCategory = lvalue -#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [Struct] ValCat -#-----| ValueCategory = prvalue(load) -# 1990| getStmt(7): [ReturnStmt] return ... -# 1992| [TopLevelFunction] void SetStaticFuncPtr() -# 1992| : -# 1992| getEntryPoint(): [BlockStmt] { ... } -# 1993| getStmt(0): [DeclStmt] declaration -# 1993| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 1993| Type = [Class] C -# 1993| getVariable().getInitializer(): [Initializer] initializer for c -# 1993| getExpr(): [ConstructorCall] call to C -# 1993| Type = [VoidType] void -# 1993| ValueCategory = prvalue -# 1994| getStmt(1): [DeclStmt] declaration -# 1994| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pfn -# 1994| Type = [FunctionPointerType] ..(*)(..) -# 1994| getVariable().getInitializer(): [Initializer] initializer for pfn -# 1994| getExpr(): [FunctionAccess] StaticMemberFunction -# 1994| Type = [FunctionPointerType] ..(*)(..) -# 1994| ValueCategory = prvalue(load) -# 1995| getStmt(2): [ExprStmt] ExprStmt -# 1995| getExpr(): [AssignExpr] ... = ... -# 1995| Type = [FunctionPointerType] ..(*)(..) -# 1995| ValueCategory = lvalue -# 1995| getLValue(): [VariableAccess] pfn -# 1995| Type = [FunctionPointerType] ..(*)(..) -# 1995| ValueCategory = lvalue -# 1995| getRValue(): [FunctionAccess] StaticMemberFunction -# 1995| Type = [FunctionPointerType] ..(*)(..) -# 1995| ValueCategory = prvalue(load) -# 1995| getQualifier(): [VariableAccess] c -# 1995| Type = [Class] C -# 1995| ValueCategory = lvalue -# 1996| getStmt(3): [ReturnStmt] return ... -# 1996| getImplicitDestructorCall(0): [DestructorCall] call to ~C -# 1996| Type = [VoidType] void -# 1996| ValueCategory = prvalue -# 1996| getQualifier(): [VariableAccess] c -# 1996| Type = [Class] C -# 1996| ValueCategory = lvalue -# 1998| [TopLevelFunction] void TernaryTestInt(bool, int, int, int) -# 1998| : -# 1998| getParameter(0): [Parameter] a -# 1998| Type = [BoolType] bool -# 1998| getParameter(1): [Parameter] x -# 1998| Type = [IntType] int -# 1998| getParameter(2): [Parameter] y -# 1998| Type = [IntType] int -# 1998| getParameter(3): [Parameter] z -# 1998| Type = [IntType] int -# 1998| getEntryPoint(): [BlockStmt] { ... } -# 1999| getStmt(0): [ExprStmt] ExprStmt -# 1999| getExpr(): [AssignExpr] ... = ... -# 1999| Type = [IntType] int -# 1999| ValueCategory = lvalue -# 1999| getLValue(): [VariableAccess] z -# 1999| Type = [IntType] int -# 1999| ValueCategory = lvalue -# 1999| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1999| Type = [IntType] int -# 1999| ValueCategory = prvalue(load) -# 1999| getCondition(): [VariableAccess] a -# 1999| Type = [BoolType] bool -# 1999| ValueCategory = prvalue(load) -# 1999| getThen(): [VariableAccess] x -# 1999| Type = [IntType] int -# 1999| ValueCategory = prvalue(load) -# 1999| getElse(): [VariableAccess] y -# 1999| Type = [IntType] int -# 1999| ValueCategory = prvalue(load) -# 2000| getStmt(1): [ExprStmt] ExprStmt -# 2000| getExpr(): [AssignExpr] ... = ... -# 2000| Type = [IntType] int -# 2000| ValueCategory = lvalue -# 2000| getLValue(): [VariableAccess] z -# 2000| Type = [IntType] int -# 2000| ValueCategory = lvalue -# 2000| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2000| Type = [IntType] int -# 2000| ValueCategory = prvalue(load) -# 2000| getCondition(): [VariableAccess] a -# 2000| Type = [BoolType] bool -# 2000| ValueCategory = prvalue(load) -# 2000| getThen(): [VariableAccess] x -# 2000| Type = [IntType] int -# 2000| ValueCategory = prvalue(load) -# 2000| getElse(): [Literal] 5 -# 2000| Type = [IntType] int -# 2000| Value = [Literal] 5 -# 2000| ValueCategory = prvalue -# 2001| getStmt(2): [ExprStmt] ExprStmt -# 2001| getExpr(): [AssignExpr] ... = ... -# 2001| Type = [IntType] int -# 2001| ValueCategory = lvalue -# 2001| getLValue(): [VariableAccess] z -# 2001| Type = [IntType] int -# 2001| ValueCategory = lvalue -# 2001| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2001| Type = [IntType] int -# 2001| ValueCategory = prvalue -# 2001| getCondition(): [VariableAccess] a -# 2001| Type = [BoolType] bool -# 2001| ValueCategory = prvalue(load) -# 2001| getThen(): [Literal] 3 -# 2001| Type = [IntType] int -# 2001| Value = [Literal] 3 -# 2001| ValueCategory = prvalue -# 2001| getElse(): [Literal] 5 -# 2001| Type = [IntType] int -# 2001| Value = [Literal] 5 -# 2001| ValueCategory = prvalue -# 2002| getStmt(3): [ExprStmt] ExprStmt -# 2002| getExpr(): [AssignExpr] ... = ... -# 2002| Type = [IntType] int +# 1984| getRValue(): [AssignAddExpr] ... += ... +# 1984| Type = [IntType] int +# 1984| ValueCategory = prvalue(load) +# 1984| getLValue(): [VariableAccess] j +# 1984| Type = [IntType] int +# 1984| ValueCategory = lvalue +# 1984| getRValue(): [Literal] 40 +# 1984| Type = [IntType] int +# 1984| Value = [Literal] 40 +# 1984| ValueCategory = prvalue +# 1984| getRValue().getFullyConverted(): [ParenthesisExpr] (...) +# 1984| Type = [IntType] int +# 1984| ValueCategory = prvalue(load) +# 1985| getStmt(2): [ReturnStmt] return ... +# 1987| [CopyAssignmentOperator] D& D::operator=(D const&) +# 1987| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const D & +# 1987| [MoveAssignmentOperator] D& D::operator=(D&&) +# 1987| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] D && +# 1991| [MemberFunction] D& D::ReferenceStaticMemberFunction() +# 1991| : +# 1991| getEntryPoint(): [BlockStmt] { ... } +# 1992| getStmt(0): [ReturnStmt] return ... +# 1992| getExpr(): [VariableAccess] x +# 1992| Type = [Class] D +# 1992| ValueCategory = lvalue +# 1992| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1992| Type = [LValueReferenceType] D & +# 1992| ValueCategory = prvalue +# 1994| [MemberFunction] D D::ObjectStaticMemberFunction() +# 1994| : +# 1994| getEntryPoint(): [BlockStmt] { ... } +# 1995| getStmt(0): [ReturnStmt] return ... +# 1995| getExpr(): [VariableAccess] x +# 1995| Type = [Class] D +# 1995| ValueCategory = prvalue(load) +# 1999| [TopLevelFunction] void test_static_member_functions_with_reference_return() +# 1999| : +# 1999| getEntryPoint(): [BlockStmt] { ... } +# 2000| getStmt(0): [DeclStmt] declaration +# 2000| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d +# 2000| Type = [Class] D +# 2002| getStmt(1): [ExprStmt] ExprStmt +# 2002| getExpr(): [FunctionCall] call to ReferenceStaticMemberFunction +# 2002| Type = [LValueReferenceType] D & +# 2002| ValueCategory = prvalue +# 2002| getQualifier(): [VariableAccess] d +# 2002| Type = [Class] D +# 2002| ValueCategory = lvalue +# 2002| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2002| Type = [Class] D # 2002| ValueCategory = lvalue -# 2002| getLValue(): [ConditionalExpr] ... ? ... : ... -# 2002| Type = [IntType] int -# 2002| ValueCategory = lvalue -# 2002| getCondition(): [VariableAccess] a -# 2002| Type = [BoolType] bool -# 2002| ValueCategory = prvalue(load) -# 2002| getThen(): [VariableAccess] x -# 2002| Type = [IntType] int -# 2002| ValueCategory = lvalue -# 2002| getElse(): [VariableAccess] y -# 2002| Type = [IntType] int -# 2002| ValueCategory = lvalue -# 2002| getRValue(): [Literal] 7 -# 2002| Type = [IntType] int -# 2002| Value = [Literal] 7 -# 2002| ValueCategory = prvalue -# 2002| getLValue().getFullyConverted(): [ParenthesisExpr] (...) -# 2002| Type = [IntType] int -# 2002| ValueCategory = lvalue -# 2003| getStmt(4): [ReturnStmt] return ... -# 2005| [CopyAssignmentOperator] TernaryPodObj& TernaryPodObj::operator=(TernaryPodObj const&) -# 2005| : +# 2003| getStmt(2): [ExprStmt] ExprStmt +# 2003| getExpr(): [FunctionCall] call to ReferenceStaticMemberFunction +# 2003| Type = [LValueReferenceType] D & +# 2003| ValueCategory = prvalue +# 2003| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2003| Type = [Class] D +# 2003| ValueCategory = lvalue +# 2004| getStmt(3): [ExprStmt] ExprStmt +# 2004| getExpr(): [FunctionCall] call to ObjectStaticMemberFunction +# 2004| Type = [Class] D +# 2004| ValueCategory = prvalue +# 2004| getQualifier(): [VariableAccess] d +# 2004| Type = [Class] D +# 2004| ValueCategory = lvalue +# 2005| getStmt(4): [ExprStmt] ExprStmt +# 2005| getExpr(): [FunctionCall] call to ObjectStaticMemberFunction +# 2005| Type = [Class] D +# 2005| ValueCategory = prvalue +# 2007| getStmt(5): [DeclStmt] declaration +# 2007| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2007| Type = [Class] D +# 2008| getStmt(6): [ExprStmt] ExprStmt +# 2008| getExpr(): [AssignExpr] ... = ... +# 2008| Type = [Class] D +# 2008| ValueCategory = lvalue +# 2008| getLValue(): [VariableAccess] x +# 2008| Type = [Class] D +# 2008| ValueCategory = lvalue +# 2008| getRValue(): [FunctionCall] call to ReferenceStaticMemberFunction +# 2008| Type = [LValueReferenceType] D & +# 2008| ValueCategory = prvalue +# 2008| getQualifier(): [VariableAccess] d +# 2008| Type = [Class] D +# 2008| ValueCategory = lvalue +# 2008| getRValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2008| Type = [Class] D +# 2008| ValueCategory = prvalue(load) +# 2009| getStmt(7): [DeclStmt] declaration +# 2009| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2009| Type = [Class] D +# 2010| getStmt(8): [ExprStmt] ExprStmt +# 2010| getExpr(): [AssignExpr] ... = ... +# 2010| Type = [Class] D +# 2010| ValueCategory = lvalue +# 2010| getLValue(): [VariableAccess] y +# 2010| Type = [Class] D +# 2010| ValueCategory = lvalue +# 2010| getRValue(): [FunctionCall] call to ReferenceStaticMemberFunction +# 2010| Type = [LValueReferenceType] D & +# 2010| ValueCategory = prvalue +# 2010| getRValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2010| Type = [Class] D +# 2010| ValueCategory = prvalue(load) +# 2011| getStmt(9): [DeclStmt] declaration +# 2011| getDeclarationEntry(0): [VariableDeclarationEntry] definition of j +# 2011| Type = [Class] D +# 2012| getStmt(10): [ExprStmt] ExprStmt +# 2012| getExpr(): [AssignExpr] ... = ... +# 2012| Type = [Class] D +# 2012| ValueCategory = lvalue +# 2012| getLValue(): [VariableAccess] j +# 2012| Type = [Class] D +# 2012| ValueCategory = lvalue +# 2012| getRValue(): [FunctionCall] call to ObjectStaticMemberFunction +# 2012| Type = [Class] D +# 2012| ValueCategory = prvalue +# 2012| getQualifier(): [VariableAccess] d +# 2012| Type = [Class] D +# 2012| ValueCategory = lvalue +# 2013| getStmt(11): [DeclStmt] declaration +# 2013| getDeclarationEntry(0): [VariableDeclarationEntry] definition of k +# 2013| Type = [Class] D +# 2014| getStmt(12): [ExprStmt] ExprStmt +# 2014| getExpr(): [AssignExpr] ... = ... +# 2014| Type = [Class] D +# 2014| ValueCategory = lvalue +# 2014| getLValue(): [VariableAccess] k +# 2014| Type = [Class] D +# 2014| ValueCategory = lvalue +# 2014| getRValue(): [FunctionCall] call to ObjectStaticMemberFunction +# 2014| Type = [Class] D +# 2014| ValueCategory = prvalue +# 2015| getStmt(13): [ReturnStmt] return ... +# 2017| [TopLevelFunction] void test_volatile() +# 2017| : +# 2017| getEntryPoint(): [BlockStmt] { ... } +# 2018| getStmt(0): [DeclStmt] declaration +# 2018| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2018| Type = [SpecifiedType] volatile int +# 2019| getStmt(1): [ExprStmt] ExprStmt +# 2019| getExpr(): [VariableAccess] x +# 2019| Type = [IntType] int +# 2019| ValueCategory = prvalue(load) +# 2020| getStmt(2): [ReturnStmt] return ... +# 2022| [CopyAssignmentOperator] ValCat& ValCat::operator=(ValCat const&) +# 2022| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ValCat & +# 2022| [MoveAssignmentOperator] ValCat& ValCat::operator=(ValCat&&) +# 2022| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] ValCat && +# 2023| [MemberFunction] ValCat& ValCat::lvalue() +# 2023| : +# 2024| [MemberFunction] ValCat&& ValCat::xvalue() +# 2024| : +# 2025| [MemberFunction] ValCat ValCat::prvalue() +# 2025| : +# 2028| [TopLevelFunction] void value_category_test() +# 2028| : +# 2028| getEntryPoint(): [BlockStmt] { ... } +# 2029| getStmt(0): [DeclStmt] declaration +# 2029| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 2029| Type = [Struct] ValCat +# 2031| getStmt(1): [ExprStmt] ExprStmt +# 2031| getExpr(): [AssignExpr] ... = ... +# 2031| Type = [Struct] ValCat +# 2031| ValueCategory = lvalue +# 2031| getLValue(): [FunctionCall] call to lvalue +# 2031| Type = [LValueReferenceType] ValCat & +# 2031| ValueCategory = prvalue +# 2031| getQualifier(): [VariableAccess] c +# 2031| Type = [Struct] ValCat +# 2031| ValueCategory = lvalue +# 2031| getRValue(): [ClassAggregateLiteral] {...} +# 2031| Type = [Struct] ValCat +# 2031| ValueCategory = prvalue +# 2031| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2031| Type = [Struct] ValCat +# 2031| ValueCategory = lvalue +#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [Struct] ValCat +#-----| ValueCategory = prvalue(load) +# 2032| getStmt(2): [ExprStmt] ExprStmt +# 2032| getExpr(): [AssignExpr] ... = ... +# 2032| Type = [Struct] ValCat +# 2032| ValueCategory = lvalue +# 2032| getLValue(): [FunctionCall] call to xvalue +# 2032| Type = [RValueReferenceType] ValCat && +# 2032| ValueCategory = prvalue +# 2032| getQualifier(): [VariableAccess] c +# 2032| Type = [Struct] ValCat +# 2032| ValueCategory = lvalue +# 2032| getRValue(): [ClassAggregateLiteral] {...} +# 2032| Type = [Struct] ValCat +# 2032| ValueCategory = prvalue +# 2032| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2032| Type = [Struct] ValCat +# 2032| ValueCategory = lvalue +#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [Struct] ValCat +#-----| ValueCategory = prvalue(load) +# 2033| getStmt(3): [ExprStmt] ExprStmt +# 2033| getExpr(): [AssignExpr] ... = ... +# 2033| Type = [Struct] ValCat +# 2033| ValueCategory = lvalue +# 2033| getLValue(): [FunctionCall] call to prvalue +# 2033| Type = [Struct] ValCat +# 2033| ValueCategory = prvalue +# 2033| getQualifier(): [VariableAccess] c +# 2033| Type = [Struct] ValCat +# 2033| ValueCategory = lvalue +# 2033| getRValue(): [ClassAggregateLiteral] {...} +# 2033| Type = [Struct] ValCat +# 2033| ValueCategory = prvalue +# 2033| getLValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2033| Type = [Struct] ValCat +# 2033| ValueCategory = lvalue +#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [Struct] ValCat +#-----| ValueCategory = prvalue(load) +# 2034| getStmt(4): [ExprStmt] ExprStmt +# 2034| getExpr(): [AssignExpr] ... = ... +# 2034| Type = [Struct] ValCat +# 2034| ValueCategory = lvalue +# 2034| getLValue(): [FunctionCall] call to lvalue +# 2034| Type = [LValueReferenceType] ValCat & +# 2034| ValueCategory = prvalue +# 2034| getRValue(): [ClassAggregateLiteral] {...} +# 2034| Type = [Struct] ValCat +# 2034| ValueCategory = prvalue +# 2034| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2034| Type = [Struct] ValCat +# 2034| ValueCategory = lvalue +#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [Struct] ValCat +#-----| ValueCategory = prvalue(load) +# 2035| getStmt(5): [ExprStmt] ExprStmt +# 2035| getExpr(): [AssignExpr] ... = ... +# 2035| Type = [Struct] ValCat +# 2035| ValueCategory = lvalue +# 2035| getLValue(): [FunctionCall] call to xvalue +# 2035| Type = [RValueReferenceType] ValCat && +# 2035| ValueCategory = prvalue +# 2035| getRValue(): [ClassAggregateLiteral] {...} +# 2035| Type = [Struct] ValCat +# 2035| ValueCategory = prvalue +# 2035| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2035| Type = [Struct] ValCat +# 2035| ValueCategory = lvalue +#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [Struct] ValCat +#-----| ValueCategory = prvalue(load) +# 2036| getStmt(6): [ExprStmt] ExprStmt +# 2036| getExpr(): [AssignExpr] ... = ... +# 2036| Type = [Struct] ValCat +# 2036| ValueCategory = lvalue +# 2036| getLValue(): [FunctionCall] call to prvalue +# 2036| Type = [Struct] ValCat +# 2036| ValueCategory = prvalue +# 2036| getRValue(): [ClassAggregateLiteral] {...} +# 2036| Type = [Struct] ValCat +# 2036| ValueCategory = prvalue +# 2036| getLValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2036| Type = [Struct] ValCat +# 2036| ValueCategory = lvalue +#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [Struct] ValCat +#-----| ValueCategory = prvalue(load) +# 2037| getStmt(7): [ReturnStmt] return ... +# 2039| [TopLevelFunction] void SetStaticFuncPtr() +# 2039| : +# 2039| getEntryPoint(): [BlockStmt] { ... } +# 2040| getStmt(0): [DeclStmt] declaration +# 2040| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 2040| Type = [Class] C +# 2040| getVariable().getInitializer(): [Initializer] initializer for c +# 2040| getExpr(): [ConstructorCall] call to C +# 2040| Type = [VoidType] void +# 2040| ValueCategory = prvalue +# 2041| getStmt(1): [DeclStmt] declaration +# 2041| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pfn +# 2041| Type = [FunctionPointerType] ..(*)(..) +# 2041| getVariable().getInitializer(): [Initializer] initializer for pfn +# 2041| getExpr(): [FunctionAccess] StaticMemberFunction +# 2041| Type = [FunctionPointerType] ..(*)(..) +# 2041| ValueCategory = prvalue(load) +# 2042| getStmt(2): [ExprStmt] ExprStmt +# 2042| getExpr(): [AssignExpr] ... = ... +# 2042| Type = [FunctionPointerType] ..(*)(..) +# 2042| ValueCategory = lvalue +# 2042| getLValue(): [VariableAccess] pfn +# 2042| Type = [FunctionPointerType] ..(*)(..) +# 2042| ValueCategory = lvalue +# 2042| getRValue(): [FunctionAccess] StaticMemberFunction +# 2042| Type = [FunctionPointerType] ..(*)(..) +# 2042| ValueCategory = prvalue(load) +# 2042| getQualifier(): [VariableAccess] c +# 2042| Type = [Class] C +# 2042| ValueCategory = lvalue +# 2043| getStmt(3): [ReturnStmt] return ... +# 2043| getImplicitDestructorCall(0): [DestructorCall] call to ~C +# 2043| Type = [VoidType] void +# 2043| ValueCategory = prvalue +# 2043| getQualifier(): [VariableAccess] c +# 2043| Type = [Class] C +# 2043| ValueCategory = lvalue +# 2045| [TopLevelFunction] void TernaryTestInt(bool, int, int, int) +# 2045| : +# 2045| getParameter(0): [Parameter] a +# 2045| Type = [BoolType] bool +# 2045| getParameter(1): [Parameter] x +# 2045| Type = [IntType] int +# 2045| getParameter(2): [Parameter] y +# 2045| Type = [IntType] int +# 2045| getParameter(3): [Parameter] z +# 2045| Type = [IntType] int +# 2045| getEntryPoint(): [BlockStmt] { ... } +# 2046| getStmt(0): [ExprStmt] ExprStmt +# 2046| getExpr(): [AssignExpr] ... = ... +# 2046| Type = [IntType] int +# 2046| ValueCategory = lvalue +# 2046| getLValue(): [VariableAccess] z +# 2046| Type = [IntType] int +# 2046| ValueCategory = lvalue +# 2046| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2046| Type = [IntType] int +# 2046| ValueCategory = prvalue(load) +# 2046| getCondition(): [VariableAccess] a +# 2046| Type = [BoolType] bool +# 2046| ValueCategory = prvalue(load) +# 2046| getThen(): [VariableAccess] x +# 2046| Type = [IntType] int +# 2046| ValueCategory = prvalue(load) +# 2046| getElse(): [VariableAccess] y +# 2046| Type = [IntType] int +# 2046| ValueCategory = prvalue(load) +# 2047| getStmt(1): [ExprStmt] ExprStmt +# 2047| getExpr(): [AssignExpr] ... = ... +# 2047| Type = [IntType] int +# 2047| ValueCategory = lvalue +# 2047| getLValue(): [VariableAccess] z +# 2047| Type = [IntType] int +# 2047| ValueCategory = lvalue +# 2047| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2047| Type = [IntType] int +# 2047| ValueCategory = prvalue(load) +# 2047| getCondition(): [VariableAccess] a +# 2047| Type = [BoolType] bool +# 2047| ValueCategory = prvalue(load) +# 2047| getThen(): [VariableAccess] x +# 2047| Type = [IntType] int +# 2047| ValueCategory = prvalue(load) +# 2047| getElse(): [Literal] 5 +# 2047| Type = [IntType] int +# 2047| Value = [Literal] 5 +# 2047| ValueCategory = prvalue +# 2048| getStmt(2): [ExprStmt] ExprStmt +# 2048| getExpr(): [AssignExpr] ... = ... +# 2048| Type = [IntType] int +# 2048| ValueCategory = lvalue +# 2048| getLValue(): [VariableAccess] z +# 2048| Type = [IntType] int +# 2048| ValueCategory = lvalue +# 2048| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2048| Type = [IntType] int +# 2048| ValueCategory = prvalue +# 2048| getCondition(): [VariableAccess] a +# 2048| Type = [BoolType] bool +# 2048| ValueCategory = prvalue(load) +# 2048| getThen(): [Literal] 3 +# 2048| Type = [IntType] int +# 2048| Value = [Literal] 3 +# 2048| ValueCategory = prvalue +# 2048| getElse(): [Literal] 5 +# 2048| Type = [IntType] int +# 2048| Value = [Literal] 5 +# 2048| ValueCategory = prvalue +# 2049| getStmt(3): [ExprStmt] ExprStmt +# 2049| getExpr(): [AssignExpr] ... = ... +# 2049| Type = [IntType] int +# 2049| ValueCategory = lvalue +# 2049| getLValue(): [ConditionalExpr] ... ? ... : ... +# 2049| Type = [IntType] int +# 2049| ValueCategory = lvalue +# 2049| getCondition(): [VariableAccess] a +# 2049| Type = [BoolType] bool +# 2049| ValueCategory = prvalue(load) +# 2049| getThen(): [VariableAccess] x +# 2049| Type = [IntType] int +# 2049| ValueCategory = lvalue +# 2049| getElse(): [VariableAccess] y +# 2049| Type = [IntType] int +# 2049| ValueCategory = lvalue +# 2049| getRValue(): [Literal] 7 +# 2049| Type = [IntType] int +# 2049| Value = [Literal] 7 +# 2049| ValueCategory = prvalue +# 2049| getLValue().getFullyConverted(): [ParenthesisExpr] (...) +# 2049| Type = [IntType] int +# 2049| ValueCategory = lvalue +# 2050| getStmt(4): [ReturnStmt] return ... +# 2052| [CopyAssignmentOperator] TernaryPodObj& TernaryPodObj::operator=(TernaryPodObj const&) +# 2052| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const TernaryPodObj & -# 2005| [MoveAssignmentOperator] TernaryPodObj& TernaryPodObj::operator=(TernaryPodObj&&) -# 2005| : +# 2052| [MoveAssignmentOperator] TernaryPodObj& TernaryPodObj::operator=(TernaryPodObj&&) +# 2052| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] TernaryPodObj && -# 2008| [TopLevelFunction] void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) -# 2008| : -# 2008| getParameter(0): [Parameter] a -# 2008| Type = [BoolType] bool -# 2008| getParameter(1): [Parameter] x -# 2008| Type = [Struct] TernaryPodObj -# 2008| getParameter(2): [Parameter] y -# 2008| Type = [Struct] TernaryPodObj -# 2008| getParameter(3): [Parameter] z -# 2008| Type = [Struct] TernaryPodObj -# 2008| getEntryPoint(): [BlockStmt] { ... } -# 2009| getStmt(0): [ExprStmt] ExprStmt -# 2009| getExpr(): [AssignExpr] ... = ... -# 2009| Type = [Struct] TernaryPodObj -# 2009| ValueCategory = lvalue -# 2009| getLValue(): [VariableAccess] z -# 2009| Type = [Struct] TernaryPodObj -# 2009| ValueCategory = lvalue -# 2009| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2009| Type = [Struct] TernaryPodObj -# 2009| ValueCategory = prvalue(load) -# 2009| getCondition(): [VariableAccess] a -# 2009| Type = [BoolType] bool -# 2009| ValueCategory = prvalue(load) -# 2009| getThen(): [VariableAccess] x -# 2009| Type = [Struct] TernaryPodObj -# 2009| ValueCategory = prvalue(load) -# 2009| getElse(): [VariableAccess] y -# 2009| Type = [Struct] TernaryPodObj -# 2009| ValueCategory = prvalue(load) -# 2010| getStmt(1): [ExprStmt] ExprStmt -# 2010| getExpr(): [AssignExpr] ... = ... -# 2010| Type = [Struct] TernaryPodObj -# 2010| ValueCategory = lvalue -# 2010| getLValue(): [VariableAccess] z -# 2010| Type = [Struct] TernaryPodObj -# 2010| ValueCategory = lvalue -# 2010| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2010| Type = [Struct] TernaryPodObj -# 2010| ValueCategory = prvalue -# 2010| getCondition(): [VariableAccess] a -# 2010| Type = [BoolType] bool -# 2010| ValueCategory = prvalue(load) -# 2010| getThen(): [VariableAccess] x -# 2010| Type = [Struct] TernaryPodObj -# 2010| ValueCategory = prvalue(load) -# 2010| getElse(): [Literal] 0 -# 2010| Type = [Struct] TernaryPodObj -# 2010| Value = [Literal] 0 -# 2010| ValueCategory = prvalue -# 2010| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2010| Type = [Struct] TernaryPodObj -# 2010| ValueCategory = prvalue(load) -# 2010| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2010| Type = [Struct] TernaryPodObj -# 2010| ValueCategory = prvalue(load) -# 2010| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2010| Type = [Struct] TernaryPodObj -# 2010| ValueCategory = prvalue(load) -# 2011| getStmt(2): [ExprStmt] ExprStmt -# 2011| getExpr(): [AssignExpr] ... = ... -# 2011| Type = [Struct] TernaryPodObj -# 2011| ValueCategory = lvalue -# 2011| getLValue(): [VariableAccess] z -# 2011| Type = [Struct] TernaryPodObj -# 2011| ValueCategory = lvalue -# 2011| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2011| Type = [Struct] TernaryPodObj -# 2011| ValueCategory = prvalue -# 2011| getCondition(): [VariableAccess] a -# 2011| Type = [BoolType] bool -# 2011| ValueCategory = prvalue(load) -# 2011| getThen(): [Literal] 0 -# 2011| Type = [Struct] TernaryPodObj -# 2011| Value = [Literal] 0 -# 2011| ValueCategory = prvalue -# 2011| getElse(): [Literal] 0 -# 2011| Type = [Struct] TernaryPodObj -# 2011| Value = [Literal] 0 -# 2011| ValueCategory = prvalue -# 2011| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2011| Type = [Struct] TernaryPodObj -# 2011| ValueCategory = prvalue(load) -# 2011| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2011| Type = [Struct] TernaryPodObj -# 2011| ValueCategory = prvalue(load) -# 2011| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2011| Type = [Struct] TernaryPodObj -# 2011| ValueCategory = prvalue(load) -# 2012| getStmt(3): [ExprStmt] ExprStmt -# 2012| getExpr(): [AssignExpr] ... = ... -# 2012| Type = [Struct] TernaryPodObj -# 2012| ValueCategory = lvalue -# 2012| getLValue(): [AssignExpr] ... = ... -# 2012| Type = [Struct] TernaryPodObj -# 2012| ValueCategory = lvalue -# 2012| getLValue(): [VariableAccess] z -# 2012| Type = [Struct] TernaryPodObj -# 2012| ValueCategory = lvalue -# 2012| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2012| Type = [Struct] TernaryPodObj -# 2012| ValueCategory = prvalue(load) -# 2012| getCondition(): [VariableAccess] a -# 2012| Type = [BoolType] bool -# 2012| ValueCategory = prvalue(load) -# 2012| getThen(): [VariableAccess] x -# 2012| Type = [Struct] TernaryPodObj -# 2012| ValueCategory = prvalue(load) -# 2012| getElse(): [VariableAccess] y -# 2012| Type = [Struct] TernaryPodObj -# 2012| ValueCategory = prvalue(load) -# 2012| getRValue(): [Literal] 0 -# 2012| Type = [Struct] TernaryPodObj -# 2012| Value = [Literal] 0 -# 2012| ValueCategory = prvalue -# 2012| getLValue().getFullyConverted(): [ParenthesisExpr] (...) -# 2012| Type = [Struct] TernaryPodObj -# 2012| ValueCategory = lvalue -# 2012| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2012| Type = [Struct] TernaryPodObj -# 2012| ValueCategory = prvalue(load) -# 2013| getStmt(4): [ReturnStmt] return ... -# 2015| [CopyAssignmentOperator] TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) -# 2015| : +# 2055| [TopLevelFunction] void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) +# 2055| : +# 2055| getParameter(0): [Parameter] a +# 2055| Type = [BoolType] bool +# 2055| getParameter(1): [Parameter] x +# 2055| Type = [Struct] TernaryPodObj +# 2055| getParameter(2): [Parameter] y +# 2055| Type = [Struct] TernaryPodObj +# 2055| getParameter(3): [Parameter] z +# 2055| Type = [Struct] TernaryPodObj +# 2055| getEntryPoint(): [BlockStmt] { ... } +# 2056| getStmt(0): [ExprStmt] ExprStmt +# 2056| getExpr(): [AssignExpr] ... = ... +# 2056| Type = [Struct] TernaryPodObj +# 2056| ValueCategory = lvalue +# 2056| getLValue(): [VariableAccess] z +# 2056| Type = [Struct] TernaryPodObj +# 2056| ValueCategory = lvalue +# 2056| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2056| Type = [Struct] TernaryPodObj +# 2056| ValueCategory = prvalue(load) +# 2056| getCondition(): [VariableAccess] a +# 2056| Type = [BoolType] bool +# 2056| ValueCategory = prvalue(load) +# 2056| getThen(): [VariableAccess] x +# 2056| Type = [Struct] TernaryPodObj +# 2056| ValueCategory = prvalue(load) +# 2056| getElse(): [VariableAccess] y +# 2056| Type = [Struct] TernaryPodObj +# 2056| ValueCategory = prvalue(load) +# 2057| getStmt(1): [ExprStmt] ExprStmt +# 2057| getExpr(): [AssignExpr] ... = ... +# 2057| Type = [Struct] TernaryPodObj +# 2057| ValueCategory = lvalue +# 2057| getLValue(): [VariableAccess] z +# 2057| Type = [Struct] TernaryPodObj +# 2057| ValueCategory = lvalue +# 2057| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2057| Type = [Struct] TernaryPodObj +# 2057| ValueCategory = prvalue +# 2057| getCondition(): [VariableAccess] a +# 2057| Type = [BoolType] bool +# 2057| ValueCategory = prvalue(load) +# 2057| getThen(): [VariableAccess] x +# 2057| Type = [Struct] TernaryPodObj +# 2057| ValueCategory = prvalue(load) +# 2057| getElse(): [Literal] 0 +# 2057| Type = [Struct] TernaryPodObj +# 2057| Value = [Literal] 0 +# 2057| ValueCategory = prvalue +# 2057| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2057| Type = [Struct] TernaryPodObj +# 2057| ValueCategory = prvalue(load) +# 2057| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2057| Type = [Struct] TernaryPodObj +# 2057| ValueCategory = prvalue(load) +# 2057| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2057| Type = [Struct] TernaryPodObj +# 2057| ValueCategory = prvalue(load) +# 2058| getStmt(2): [ExprStmt] ExprStmt +# 2058| getExpr(): [AssignExpr] ... = ... +# 2058| Type = [Struct] TernaryPodObj +# 2058| ValueCategory = lvalue +# 2058| getLValue(): [VariableAccess] z +# 2058| Type = [Struct] TernaryPodObj +# 2058| ValueCategory = lvalue +# 2058| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2058| Type = [Struct] TernaryPodObj +# 2058| ValueCategory = prvalue +# 2058| getCondition(): [VariableAccess] a +# 2058| Type = [BoolType] bool +# 2058| ValueCategory = prvalue(load) +# 2058| getThen(): [Literal] 0 +# 2058| Type = [Struct] TernaryPodObj +# 2058| Value = [Literal] 0 +# 2058| ValueCategory = prvalue +# 2058| getElse(): [Literal] 0 +# 2058| Type = [Struct] TernaryPodObj +# 2058| Value = [Literal] 0 +# 2058| ValueCategory = prvalue +# 2058| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2058| Type = [Struct] TernaryPodObj +# 2058| ValueCategory = prvalue(load) +# 2058| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2058| Type = [Struct] TernaryPodObj +# 2058| ValueCategory = prvalue(load) +# 2058| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2058| Type = [Struct] TernaryPodObj +# 2058| ValueCategory = prvalue(load) +# 2059| getStmt(3): [ExprStmt] ExprStmt +# 2059| getExpr(): [AssignExpr] ... = ... +# 2059| Type = [Struct] TernaryPodObj +# 2059| ValueCategory = lvalue +# 2059| getLValue(): [AssignExpr] ... = ... +# 2059| Type = [Struct] TernaryPodObj +# 2059| ValueCategory = lvalue +# 2059| getLValue(): [VariableAccess] z +# 2059| Type = [Struct] TernaryPodObj +# 2059| ValueCategory = lvalue +# 2059| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2059| Type = [Struct] TernaryPodObj +# 2059| ValueCategory = prvalue(load) +# 2059| getCondition(): [VariableAccess] a +# 2059| Type = [BoolType] bool +# 2059| ValueCategory = prvalue(load) +# 2059| getThen(): [VariableAccess] x +# 2059| Type = [Struct] TernaryPodObj +# 2059| ValueCategory = prvalue(load) +# 2059| getElse(): [VariableAccess] y +# 2059| Type = [Struct] TernaryPodObj +# 2059| ValueCategory = prvalue(load) +# 2059| getRValue(): [Literal] 0 +# 2059| Type = [Struct] TernaryPodObj +# 2059| Value = [Literal] 0 +# 2059| ValueCategory = prvalue +# 2059| getLValue().getFullyConverted(): [ParenthesisExpr] (...) +# 2059| Type = [Struct] TernaryPodObj +# 2059| ValueCategory = lvalue +# 2059| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2059| Type = [Struct] TernaryPodObj +# 2059| ValueCategory = prvalue(load) +# 2060| getStmt(4): [ReturnStmt] return ... +# 2062| [CopyAssignmentOperator] TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) +# 2062| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const TernaryNonPodObj & #-----| getEntryPoint(): [BlockStmt] { ... } @@ -15615,2486 +16125,2551 @@ ir.cpp: #-----| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) #-----| Type = [LValueReferenceType] TernaryNonPodObj & #-----| ValueCategory = prvalue -# 2015| [Constructor] void TernaryNonPodObj::TernaryNonPodObj() -# 2015| : -# 2015| : -# 2015| getEntryPoint(): [BlockStmt] { ... } -# 2015| getStmt(0): [ReturnStmt] return ... -# 2015| [CopyConstructor] void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) -# 2015| : +# 2062| [Constructor] void TernaryNonPodObj::TernaryNonPodObj() +# 2062| : +# 2062| : +# 2062| getEntryPoint(): [BlockStmt] { ... } +# 2062| getStmt(0): [ReturnStmt] return ... +# 2062| [CopyConstructor] void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) +# 2062| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2015| : -# 2015| getEntryPoint(): [BlockStmt] { ... } -# 2015| getStmt(0): [ReturnStmt] return ... -# 2016| [Destructor,VirtualFunction] void TernaryNonPodObj::~TernaryNonPodObj() -# 2016| : -# 2016| getEntryPoint(): [BlockStmt] { ... } -# 2016| getStmt(0): [ReturnStmt] return ... -# 2016| : -# 2019| [TopLevelFunction] void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) -# 2019| : -# 2019| getParameter(0): [Parameter] a -# 2019| Type = [BoolType] bool -# 2019| getParameter(1): [Parameter] x -# 2019| Type = [Struct] TernaryNonPodObj -# 2019| getParameter(2): [Parameter] y -# 2019| Type = [Struct] TernaryNonPodObj -# 2019| getParameter(3): [Parameter] z -# 2019| Type = [Struct] TernaryNonPodObj -# 2019| getEntryPoint(): [BlockStmt] { ... } -# 2020| getStmt(0): [ExprStmt] ExprStmt -# 2020| getExpr(): [FunctionCall] call to operator= -# 2020| Type = [LValueReferenceType] TernaryNonPodObj & -# 2020| ValueCategory = prvalue -# 2020| getQualifier(): [VariableAccess] z -# 2020| Type = [Struct] TernaryNonPodObj -# 2020| ValueCategory = lvalue -# 2020| getArgument(0): [ConditionalExpr] ... ? ... : ... -# 2020| Type = [Struct] TernaryNonPodObj -# 2020| ValueCategory = lvalue -# 2020| getCondition(): [VariableAccess] a -# 2020| Type = [BoolType] bool -# 2020| ValueCategory = prvalue(load) -# 2020| getThen(): [VariableAccess] x -# 2020| Type = [Struct] TernaryNonPodObj -# 2020| ValueCategory = lvalue -# 2020| getElse(): [VariableAccess] y -# 2020| Type = [Struct] TernaryNonPodObj -# 2020| ValueCategory = lvalue -# 2020| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2020| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2020| ValueCategory = prvalue -# 2020| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2020| Conversion = [GlvalueConversion] glvalue conversion -# 2020| Type = [SpecifiedType] const TernaryNonPodObj -# 2020| ValueCategory = lvalue -# 2020| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2020| Type = [Struct] TernaryNonPodObj -# 2020| ValueCategory = lvalue -# 2021| getStmt(1): [ExprStmt] ExprStmt -# 2021| getExpr(): [FunctionCall] call to operator= -# 2021| Type = [LValueReferenceType] TernaryNonPodObj & -# 2021| ValueCategory = prvalue -# 2021| getQualifier(): [VariableAccess] z -# 2021| Type = [Struct] TernaryNonPodObj -# 2021| ValueCategory = lvalue -# 2021| getArgument(0): [ConditionalExpr] ... ? ... : ... -# 2021| Type = [Struct] TernaryNonPodObj -# 2021| ValueCategory = prvalue -# 2021| getCondition(): [VariableAccess] a -# 2021| Type = [BoolType] bool -# 2021| ValueCategory = prvalue(load) -# 2021| getThen(): [ConstructorCall] call to TernaryNonPodObj -# 2021| Type = [VoidType] void -# 2021| ValueCategory = prvalue -# 2021| getArgument(0): [VariableAccess] x -# 2021| Type = [Struct] TernaryNonPodObj -# 2021| ValueCategory = lvalue -# 2021| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2021| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2021| ValueCategory = prvalue -# 2021| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2021| Conversion = [GlvalueConversion] glvalue conversion -# 2021| Type = [SpecifiedType] const TernaryNonPodObj -# 2021| ValueCategory = lvalue -# 2021| getElse(): [ConstructorCall] call to TernaryNonPodObj -# 2021| Type = [VoidType] void -# 2021| ValueCategory = prvalue -# 2021| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2021| Type = [Struct] TernaryNonPodObj -# 2021| ValueCategory = prvalue(load) -# 2021| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2021| Type = [Struct] TernaryNonPodObj -# 2021| ValueCategory = prvalue(load) -# 2021| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2021| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2021| ValueCategory = prvalue -# 2021| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2021| Conversion = [GlvalueConversion] glvalue conversion -# 2021| Type = [SpecifiedType] const TernaryNonPodObj -# 2021| ValueCategory = lvalue -# 2021| getExpr(): [TemporaryObjectExpr] temporary object -# 2021| Type = [Struct] TernaryNonPodObj -# 2021| ValueCategory = lvalue -# 2021| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2021| Type = [Struct] TernaryNonPodObj -# 2021| ValueCategory = lvalue -# 2022| getStmt(2): [ExprStmt] ExprStmt -# 2022| getExpr(): [FunctionCall] call to operator= -# 2022| Type = [LValueReferenceType] TernaryNonPodObj & -# 2022| ValueCategory = prvalue -# 2022| getQualifier(): [VariableAccess] z -# 2022| Type = [Struct] TernaryNonPodObj -# 2022| ValueCategory = lvalue -# 2022| getArgument(0): [ConditionalExpr] ... ? ... : ... -# 2022| Type = [Struct] TernaryNonPodObj -# 2022| ValueCategory = prvalue -# 2022| getCondition(): [VariableAccess] a -# 2022| Type = [BoolType] bool -# 2022| ValueCategory = prvalue(load) -# 2022| getThen(): [ConstructorCall] call to TernaryNonPodObj -# 2022| Type = [VoidType] void -# 2022| ValueCategory = prvalue -# 2022| getElse(): [ConstructorCall] call to TernaryNonPodObj -# 2022| Type = [VoidType] void -# 2022| ValueCategory = prvalue -# 2022| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2022| Type = [Struct] TernaryNonPodObj -# 2022| ValueCategory = prvalue(load) -# 2022| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2022| Type = [Struct] TernaryNonPodObj -# 2022| ValueCategory = prvalue(load) -# 2022| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2022| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2022| ValueCategory = prvalue -# 2022| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2022| Conversion = [GlvalueConversion] glvalue conversion -# 2022| Type = [SpecifiedType] const TernaryNonPodObj -# 2022| ValueCategory = lvalue -# 2022| getExpr(): [TemporaryObjectExpr] temporary object -# 2022| Type = [Struct] TernaryNonPodObj -# 2022| ValueCategory = lvalue -# 2022| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2022| Type = [Struct] TernaryNonPodObj -# 2022| ValueCategory = lvalue -# 2023| getStmt(3): [ExprStmt] ExprStmt -# 2023| getExpr(): [FunctionCall] call to operator= -# 2023| Type = [LValueReferenceType] TernaryNonPodObj & -# 2023| ValueCategory = prvalue -# 2023| getQualifier(): [FunctionCall] call to operator= -# 2023| Type = [LValueReferenceType] TernaryNonPodObj & -# 2023| ValueCategory = prvalue -# 2023| getQualifier(): [VariableAccess] z -# 2023| Type = [Struct] TernaryNonPodObj -# 2023| ValueCategory = lvalue -# 2023| getArgument(0): [ConditionalExpr] ... ? ... : ... -# 2023| Type = [Struct] TernaryNonPodObj -# 2023| ValueCategory = lvalue -# 2023| getCondition(): [VariableAccess] a -# 2023| Type = [BoolType] bool -# 2023| ValueCategory = prvalue(load) -# 2023| getThen(): [VariableAccess] x -# 2023| Type = [Struct] TernaryNonPodObj -# 2023| ValueCategory = lvalue -# 2023| getElse(): [VariableAccess] y -# 2023| Type = [Struct] TernaryNonPodObj -# 2023| ValueCategory = lvalue -# 2023| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2023| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2023| ValueCategory = prvalue -# 2023| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2023| Conversion = [GlvalueConversion] glvalue conversion -# 2023| Type = [SpecifiedType] const TernaryNonPodObj -# 2023| ValueCategory = lvalue -# 2023| getArgument(0): [ConstructorCall] call to TernaryNonPodObj -# 2023| Type = [VoidType] void -# 2023| ValueCategory = prvalue -# 2023| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) -# 2023| Type = [Struct] TernaryNonPodObj -# 2023| ValueCategory = lvalue -# 2023| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 2023| Type = [Struct] TernaryNonPodObj -# 2023| ValueCategory = lvalue -# 2023| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2023| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2023| ValueCategory = prvalue -# 2023| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2023| Conversion = [GlvalueConversion] glvalue conversion -# 2023| Type = [SpecifiedType] const TernaryNonPodObj -# 2023| ValueCategory = lvalue -# 2023| getExpr(): [TemporaryObjectExpr] temporary object -# 2023| Type = [Struct] TernaryNonPodObj -# 2023| ValueCategory = lvalue -# 2023| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2023| Type = [Struct] TernaryNonPodObj -# 2023| ValueCategory = lvalue -# 2024| getStmt(4): [ReturnStmt] return ... -# 2026| [TopLevelFunction] void CommaTestHelper(unsigned int) -# 2026| : -# 2026| getParameter(0): [Parameter] (unnamed parameter 0) -# 2026| Type = [IntType] unsigned int -# 2028| [TopLevelFunction] unsigned int CommaTest(unsigned int) -# 2028| : -# 2028| getParameter(0): [Parameter] x -# 2028| Type = [IntType] unsigned int -# 2028| getEntryPoint(): [BlockStmt] { ... } -# 2029| getStmt(0): [DeclStmt] declaration -# 2029| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 2029| Type = [IntType] unsigned int -# 2030| getStmt(1): [ExprStmt] ExprStmt -# 2030| getExpr(): [AssignExpr] ... = ... -# 2030| Type = [IntType] unsigned int -# 2030| ValueCategory = lvalue -# 2030| getLValue(): [VariableAccess] y -# 2030| Type = [IntType] unsigned int -# 2030| ValueCategory = lvalue -# 2030| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2030| Type = [IntType] unsigned int -# 2030| ValueCategory = prvalue(load) -# 2030| getCondition(): [LTExpr] ... < ... -# 2030| Type = [BoolType] bool -# 2030| ValueCategory = prvalue -# 2030| getLesserOperand(): [VariableAccess] x -# 2030| Type = [IntType] unsigned int -# 2030| ValueCategory = prvalue(load) -# 2030| getGreaterOperand(): [Literal] 100 -# 2030| Type = [IntType] int -# 2030| Value = [Literal] 100 -# 2030| ValueCategory = prvalue -# 2030| getGreaterOperand().getFullyConverted(): [CStyleCast] (unsigned int)... -# 2030| Conversion = [IntegralConversion] integral conversion -# 2030| Type = [IntType] unsigned int -# 2030| Value = [CStyleCast] 100 -# 2030| ValueCategory = prvalue -# 2031| getThen(): [CommaExpr] ... , ... -# 2031| Type = [IntType] unsigned int -# 2031| ValueCategory = prvalue(load) -# 2031| getLeftOperand(): [FunctionCall] call to CommaTestHelper -# 2031| Type = [VoidType] void -# 2031| ValueCategory = prvalue -# 2031| getArgument(0): [VariableAccess] x -# 2031| Type = [IntType] unsigned int -# 2031| ValueCategory = prvalue(load) -# 2031| getRightOperand(): [VariableAccess] x -# 2031| Type = [IntType] unsigned int -# 2031| ValueCategory = prvalue(load) -# 2032| getElse(): [CommaExpr] ... , ... -# 2032| Type = [IntType] int -# 2032| ValueCategory = prvalue -# 2032| getLeftOperand(): [FunctionCall] call to CommaTestHelper -# 2032| Type = [VoidType] void -# 2032| ValueCategory = prvalue -# 2032| getArgument(0): [VariableAccess] x -# 2032| Type = [IntType] unsigned int -# 2032| ValueCategory = prvalue(load) -# 2032| getRightOperand(): [Literal] 10 -# 2032| Type = [IntType] int -# 2032| Value = [Literal] 10 -# 2032| ValueCategory = prvalue -# 2031| getThen().getFullyConverted(): [ParenthesisExpr] (...) -# 2031| Type = [IntType] unsigned int -# 2031| ValueCategory = prvalue(load) -# 2032| getElse().getFullyConverted(): [CStyleCast] (unsigned int)... -# 2032| Conversion = [IntegralConversion] integral conversion -# 2032| Type = [IntType] unsigned int -# 2032| ValueCategory = prvalue -# 2032| getExpr(): [ParenthesisExpr] (...) -# 2032| Type = [IntType] int -# 2032| ValueCategory = prvalue -# 2033| getStmt(2): [ReturnStmt] return ... -# 2035| [TopLevelFunction] void NewDeleteMem() -# 2035| : -# 2035| getEntryPoint(): [BlockStmt] { ... } -# 2036| getStmt(0): [DeclStmt] declaration -# 2036| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2036| Type = [IntPointerType] int * -# 2036| getVariable().getInitializer(): [Initializer] initializer for x -# 2036| getExpr(): [NewExpr] new -# 2036| Type = [IntPointerType] int * -# 2036| ValueCategory = prvalue -# 2037| getStmt(1): [ExprStmt] ExprStmt -# 2037| getExpr(): [AssignExpr] ... = ... -# 2037| Type = [IntType] int -# 2037| ValueCategory = lvalue -# 2037| getLValue(): [PointerDereferenceExpr] * ... -# 2037| Type = [IntType] int -# 2037| ValueCategory = lvalue -# 2037| getOperand(): [VariableAccess] x -# 2037| Type = [IntPointerType] int * -# 2037| ValueCategory = prvalue(load) -# 2037| getRValue(): [Literal] 6 -# 2037| Type = [IntType] int -# 2037| Value = [Literal] 6 -# 2037| ValueCategory = prvalue -# 2038| getStmt(2): [ExprStmt] ExprStmt -# 2038| getExpr(): [DeleteExpr] delete -# 2038| Type = [VoidType] void -# 2038| ValueCategory = prvalue -# 2038| getExpr(): [VariableAccess] x -# 2038| Type = [IntPointerType] int * -# 2038| ValueCategory = prvalue(load) -# 2039| getStmt(3): [ReturnStmt] return ... -# 2041| [CopyAssignmentOperator] Base2& Base2::operator=(Base2 const&) -# 2041| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Base2 & -# 2041| [Constructor] void Base2::Base2() -# 2041| : -# 2041| : -# 2041| getEntryPoint(): [BlockStmt] { ... } -# 2041| getStmt(0): [ReturnStmt] return ... -# 2041| [CopyConstructor] void Base2::Base2(Base2 const&) -# 2041| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Base2 & -# 2043| [MemberFunction] void Base2::operator delete(void*) -# 2043| : -# 2043| getParameter(0): [Parameter] p -# 2043| Type = [VoidPointerType] void * -# 2043| getEntryPoint(): [BlockStmt] { ... } -# 2044| getStmt(0): [ReturnStmt] return ... -# 2045| [Destructor,VirtualFunction] void Base2::~Base2() -# 2045| : -# 2045| getEntryPoint(): [BlockStmt] { ... } -# 2045| getStmt(0): [ReturnStmt] return ... -# 2045| : -# 2048| [CopyAssignmentOperator] Derived2& Derived2::operator=(Derived2 const&) -# 2048| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Derived2 & -# 2048| [Constructor] void Derived2::Derived2() -# 2048| : -# 2048| : -# 2048| getInitializer(0): [ConstructorDirectInit] call to Base2 -# 2048| Type = [VoidType] void -# 2048| ValueCategory = prvalue -# 2048| getEntryPoint(): [BlockStmt] { ... } -# 2048| getStmt(0): [ReturnStmt] return ... -# 2048| [CopyConstructor] void Derived2::Derived2(Derived2 const&) -# 2048| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Derived2 & -# 2051| [Destructor,VirtualFunction] void Derived2::~Derived2() -# 2051| : -# 2051| getEntryPoint(): [BlockStmt] { ... } -# 2051| getStmt(0): [ReturnStmt] return ... -# 2051| : -# 2051| getDestruction(0): [DestructorDirectDestruction] call to ~Base2 -# 2051| Type = [VoidType] void -# 2051| ValueCategory = prvalue -# 2053| [MemberFunction] void Derived2::operator delete(void*) -# 2053| : -# 2053| getParameter(0): [Parameter] p -# 2053| Type = [VoidPointerType] void * -# 2053| getEntryPoint(): [BlockStmt] { ... } -# 2054| getStmt(0): [ReturnStmt] return ... -# 2058| [TopLevelFunction] int virtual_delete() -# 2058| : -# 2059| getEntryPoint(): [BlockStmt] { ... } -# 2060| getStmt(0): [DeclStmt] declaration -# 2060| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b1 -# 2060| Type = [PointerType] Base2 * -# 2060| getVariable().getInitializer(): [Initializer] initializer for b1 -# 2060| getExpr(): [NewExpr] new -# 2060| Type = [PointerType] Base2 * -# 2060| ValueCategory = prvalue -# 2060| getInitializer(): [ConstructorCall] call to Base2 -# 2060| Type = [VoidType] void -# 2060| ValueCategory = prvalue -# 2061| getStmt(1): [ExprStmt] ExprStmt -# 2061| getExpr(): [DeleteExpr] delete -# 2061| Type = [VoidType] void -# 2061| ValueCategory = prvalue -# 2061| getDeallocatorCall(): [FunctionCall] call to operator delete -# 2061| Type = [VoidType] void -# 2061| ValueCategory = prvalue -# 2061| getDestructorCall(): [DestructorCall] call to ~Base2 -# 2061| Type = [VoidType] void -# 2061| ValueCategory = prvalue -# 2061| getQualifier(): [VariableAccess] b1 -# 2061| Type = [PointerType] Base2 * -# 2061| ValueCategory = prvalue(load) -# 2063| getStmt(2): [DeclStmt] declaration -# 2063| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b2 -# 2063| Type = [PointerType] Base2 * -# 2063| getVariable().getInitializer(): [Initializer] initializer for b2 -# 2063| getExpr(): [NewExpr] new -# 2063| Type = [PointerType] Derived2 * -# 2063| ValueCategory = prvalue -# 2063| getInitializer(): [ConstructorCall] call to Derived2 -# 2063| Type = [VoidType] void -# 2063| ValueCategory = prvalue -# 2063| getExpr().getFullyConverted(): [CStyleCast] (Base2 *)... -# 2063| Conversion = [BaseClassConversion] base class conversion -# 2063| Type = [PointerType] Base2 * -# 2063| ValueCategory = prvalue -# 2064| getStmt(3): [ExprStmt] ExprStmt -# 2064| getExpr(): [DeleteExpr] delete -# 2064| Type = [VoidType] void -# 2064| ValueCategory = prvalue -# 2064| getDeallocatorCall(): [FunctionCall] call to operator delete -# 2064| Type = [VoidType] void -# 2064| ValueCategory = prvalue -# 2064| getDestructorCall(): [DestructorCall] call to ~Base2 -# 2064| Type = [VoidType] void -# 2064| ValueCategory = prvalue -# 2064| getQualifier(): [VariableAccess] b2 -# 2064| Type = [PointerType] Base2 * -# 2064| ValueCategory = prvalue(load) -# 2066| getStmt(4): [DeclStmt] declaration -# 2066| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 2066| Type = [PointerType] Derived2 * -# 2066| getVariable().getInitializer(): [Initializer] initializer for d -# 2066| getExpr(): [NewExpr] new -# 2066| Type = [PointerType] Derived2 * -# 2066| ValueCategory = prvalue -# 2066| getInitializer(): [ConstructorCall] call to Derived2 -# 2066| Type = [VoidType] void -# 2066| ValueCategory = prvalue -# 2067| getStmt(5): [ExprStmt] ExprStmt -# 2067| getExpr(): [DeleteExpr] delete -# 2067| Type = [VoidType] void +# 2062| : +# 2062| getEntryPoint(): [BlockStmt] { ... } +# 2062| getStmt(0): [ReturnStmt] return ... +# 2063| [Destructor,VirtualFunction] void TernaryNonPodObj::~TernaryNonPodObj() +# 2063| : +# 2063| getEntryPoint(): [BlockStmt] { ... } +# 2063| getStmt(0): [ReturnStmt] return ... +# 2063| : +# 2066| [TopLevelFunction] void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) +# 2066| : +# 2066| getParameter(0): [Parameter] a +# 2066| Type = [BoolType] bool +# 2066| getParameter(1): [Parameter] x +# 2066| Type = [Struct] TernaryNonPodObj +# 2066| getParameter(2): [Parameter] y +# 2066| Type = [Struct] TernaryNonPodObj +# 2066| getParameter(3): [Parameter] z +# 2066| Type = [Struct] TernaryNonPodObj +# 2066| getEntryPoint(): [BlockStmt] { ... } +# 2067| getStmt(0): [ExprStmt] ExprStmt +# 2067| getExpr(): [FunctionCall] call to operator= +# 2067| Type = [LValueReferenceType] TernaryNonPodObj & # 2067| ValueCategory = prvalue -# 2067| getDeallocatorCall(): [FunctionCall] call to operator delete -# 2067| Type = [VoidType] void -# 2067| ValueCategory = prvalue -# 2067| getDestructorCall(): [DestructorCall] call to ~Derived2 -# 2067| Type = [VoidType] void -# 2067| ValueCategory = prvalue -# 2067| getQualifier(): [VariableAccess] d -# 2067| Type = [PointerType] Derived2 * +# 2067| getQualifier(): [VariableAccess] z +# 2067| Type = [Struct] TernaryNonPodObj +# 2067| ValueCategory = lvalue +# 2067| getArgument(0): [ConditionalExpr] ... ? ... : ... +# 2067| Type = [Struct] TernaryNonPodObj +# 2067| ValueCategory = lvalue +# 2067| getCondition(): [VariableAccess] a +# 2067| Type = [BoolType] bool # 2067| ValueCategory = prvalue(load) -# 2068| getStmt(6): [ReturnStmt] return ... -# 2070| [TopLevelFunction] void test_constant_folding_use(int) -# 2070| : -# 2070| getParameter(0): [Parameter] (unnamed parameter 0) -# 2070| Type = [IntType] int -# 2072| [TopLevelFunction] void test_constant_folding() -# 2072| : -# 2072| getEntryPoint(): [BlockStmt] { ... } -# 2073| getStmt(0): [DeclStmt] declaration -# 2073| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2073| Type = [SpecifiedType] const int -# 2073| getVariable().getInitializer(): [Initializer] initializer for x -# 2073| getExpr(): [Literal] 116 -# 2073| Type = [IntType] int -# 2073| Value = [Literal] 116 -# 2073| ValueCategory = prvalue -# 2074| getStmt(1): [ExprStmt] ExprStmt -# 2074| getExpr(): [FunctionCall] call to test_constant_folding_use -# 2074| Type = [VoidType] void -# 2074| ValueCategory = prvalue -# 2074| getArgument(0): [VariableAccess] x -# 2074| Type = [IntType] int -# 2074| Value = [VariableAccess] 116 -# 2074| ValueCategory = prvalue(load) -# 2075| getStmt(2): [ReturnStmt] return ... -# 2077| [TopLevelFunction] void exit(int) -# 2077| : -# 2077| getParameter(0): [Parameter] code -# 2077| Type = [IntType] int -# 2079| [TopLevelFunction] int NonExit() -# 2079| : -# 2079| getEntryPoint(): [BlockStmt] { ... } -# 2080| getStmt(0): [DeclStmt] declaration -# 2080| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2080| Type = [IntType] int -# 2080| getVariable().getInitializer(): [Initializer] initializer for x -# 2080| getExpr(): [FunctionCall] call to Add -# 2080| Type = [IntType] int -# 2080| ValueCategory = prvalue -# 2080| getArgument(0): [Literal] 3 -# 2080| Type = [IntType] int -# 2080| Value = [Literal] 3 -# 2080| ValueCategory = prvalue -# 2080| getArgument(1): [Literal] 4 -# 2080| Type = [IntType] int -# 2080| Value = [Literal] 4 -# 2080| ValueCategory = prvalue -# 2081| getStmt(1): [IfStmt] if (...) ... -# 2081| getCondition(): [EQExpr] ... == ... -# 2081| Type = [BoolType] bool -# 2081| ValueCategory = prvalue -# 2081| getLeftOperand(): [VariableAccess] x -# 2081| Type = [IntType] int -# 2081| ValueCategory = prvalue(load) -# 2081| getRightOperand(): [Literal] 7 -# 2081| Type = [IntType] int -# 2081| Value = [Literal] 7 -# 2081| ValueCategory = prvalue -# 2082| getThen(): [ExprStmt] ExprStmt -# 2082| getExpr(): [FunctionCall] call to exit -# 2082| Type = [VoidType] void -# 2082| ValueCategory = prvalue -# 2082| getArgument(0): [Literal] 3 -# 2082| Type = [IntType] int -# 2082| Value = [Literal] 3 -# 2082| ValueCategory = prvalue -# 2083| getStmt(2): [ExprStmt] ExprStmt -# 2083| getExpr(): [FunctionCall] call to VoidFunc -# 2083| Type = [VoidType] void -# 2083| ValueCategory = prvalue -# 2084| getStmt(3): [ReturnStmt] return ... -# 2084| getExpr(): [VariableAccess] x +# 2067| getThen(): [VariableAccess] x +# 2067| Type = [Struct] TernaryNonPodObj +# 2067| ValueCategory = lvalue +# 2067| getElse(): [VariableAccess] y +# 2067| Type = [Struct] TernaryNonPodObj +# 2067| ValueCategory = lvalue +# 2067| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2067| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2067| ValueCategory = prvalue +# 2067| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2067| Conversion = [GlvalueConversion] glvalue conversion +# 2067| Type = [SpecifiedType] const TernaryNonPodObj +# 2067| ValueCategory = lvalue +# 2067| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2067| Type = [Struct] TernaryNonPodObj +# 2067| ValueCategory = lvalue +# 2068| getStmt(1): [ExprStmt] ExprStmt +# 2068| getExpr(): [FunctionCall] call to operator= +# 2068| Type = [LValueReferenceType] TernaryNonPodObj & +# 2068| ValueCategory = prvalue +# 2068| getQualifier(): [VariableAccess] z +# 2068| Type = [Struct] TernaryNonPodObj +# 2068| ValueCategory = lvalue +# 2068| getArgument(0): [ConditionalExpr] ... ? ... : ... +# 2068| Type = [Struct] TernaryNonPodObj +# 2068| ValueCategory = prvalue +# 2068| getCondition(): [VariableAccess] a +# 2068| Type = [BoolType] bool +# 2068| ValueCategory = prvalue(load) +# 2068| getThen(): [ConstructorCall] call to TernaryNonPodObj +# 2068| Type = [VoidType] void +# 2068| ValueCategory = prvalue +# 2068| getArgument(0): [VariableAccess] x +# 2068| Type = [Struct] TernaryNonPodObj +# 2068| ValueCategory = lvalue +# 2068| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2068| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2068| ValueCategory = prvalue +# 2068| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2068| Conversion = [GlvalueConversion] glvalue conversion +# 2068| Type = [SpecifiedType] const TernaryNonPodObj +# 2068| ValueCategory = lvalue +# 2068| getElse(): [ConstructorCall] call to TernaryNonPodObj +# 2068| Type = [VoidType] void +# 2068| ValueCategory = prvalue +# 2068| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2068| Type = [Struct] TernaryNonPodObj +# 2068| ValueCategory = prvalue(load) +# 2068| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2068| Type = [Struct] TernaryNonPodObj +# 2068| ValueCategory = prvalue(load) +# 2068| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2068| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2068| ValueCategory = prvalue +# 2068| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2068| Conversion = [GlvalueConversion] glvalue conversion +# 2068| Type = [SpecifiedType] const TernaryNonPodObj +# 2068| ValueCategory = lvalue +# 2068| getExpr(): [TemporaryObjectExpr] temporary object +# 2068| Type = [Struct] TernaryNonPodObj +# 2068| ValueCategory = lvalue +# 2068| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2068| Type = [Struct] TernaryNonPodObj +# 2068| ValueCategory = lvalue +# 2069| getStmt(2): [ExprStmt] ExprStmt +# 2069| getExpr(): [FunctionCall] call to operator= +# 2069| Type = [LValueReferenceType] TernaryNonPodObj & +# 2069| ValueCategory = prvalue +# 2069| getQualifier(): [VariableAccess] z +# 2069| Type = [Struct] TernaryNonPodObj +# 2069| ValueCategory = lvalue +# 2069| getArgument(0): [ConditionalExpr] ... ? ... : ... +# 2069| Type = [Struct] TernaryNonPodObj +# 2069| ValueCategory = prvalue +# 2069| getCondition(): [VariableAccess] a +# 2069| Type = [BoolType] bool +# 2069| ValueCategory = prvalue(load) +# 2069| getThen(): [ConstructorCall] call to TernaryNonPodObj +# 2069| Type = [VoidType] void +# 2069| ValueCategory = prvalue +# 2069| getElse(): [ConstructorCall] call to TernaryNonPodObj +# 2069| Type = [VoidType] void +# 2069| ValueCategory = prvalue +# 2069| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2069| Type = [Struct] TernaryNonPodObj +# 2069| ValueCategory = prvalue(load) +# 2069| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2069| Type = [Struct] TernaryNonPodObj +# 2069| ValueCategory = prvalue(load) +# 2069| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2069| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2069| ValueCategory = prvalue +# 2069| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2069| Conversion = [GlvalueConversion] glvalue conversion +# 2069| Type = [SpecifiedType] const TernaryNonPodObj +# 2069| ValueCategory = lvalue +# 2069| getExpr(): [TemporaryObjectExpr] temporary object +# 2069| Type = [Struct] TernaryNonPodObj +# 2069| ValueCategory = lvalue +# 2069| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2069| Type = [Struct] TernaryNonPodObj +# 2069| ValueCategory = lvalue +# 2070| getStmt(3): [ExprStmt] ExprStmt +# 2070| getExpr(): [FunctionCall] call to operator= +# 2070| Type = [LValueReferenceType] TernaryNonPodObj & +# 2070| ValueCategory = prvalue +# 2070| getQualifier(): [FunctionCall] call to operator= +# 2070| Type = [LValueReferenceType] TernaryNonPodObj & +# 2070| ValueCategory = prvalue +# 2070| getQualifier(): [VariableAccess] z +# 2070| Type = [Struct] TernaryNonPodObj +# 2070| ValueCategory = lvalue +# 2070| getArgument(0): [ConditionalExpr] ... ? ... : ... +# 2070| Type = [Struct] TernaryNonPodObj +# 2070| ValueCategory = lvalue +# 2070| getCondition(): [VariableAccess] a +# 2070| Type = [BoolType] bool +# 2070| ValueCategory = prvalue(load) +# 2070| getThen(): [VariableAccess] x +# 2070| Type = [Struct] TernaryNonPodObj +# 2070| ValueCategory = lvalue +# 2070| getElse(): [VariableAccess] y +# 2070| Type = [Struct] TernaryNonPodObj +# 2070| ValueCategory = lvalue +# 2070| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2070| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2070| ValueCategory = prvalue +# 2070| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2070| Conversion = [GlvalueConversion] glvalue conversion +# 2070| Type = [SpecifiedType] const TernaryNonPodObj +# 2070| ValueCategory = lvalue +# 2070| getArgument(0): [ConstructorCall] call to TernaryNonPodObj +# 2070| Type = [VoidType] void +# 2070| ValueCategory = prvalue +# 2070| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) +# 2070| Type = [Struct] TernaryNonPodObj +# 2070| ValueCategory = lvalue +# 2070| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 2070| Type = [Struct] TernaryNonPodObj +# 2070| ValueCategory = lvalue +# 2070| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2070| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2070| ValueCategory = prvalue +# 2070| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2070| Conversion = [GlvalueConversion] glvalue conversion +# 2070| Type = [SpecifiedType] const TernaryNonPodObj +# 2070| ValueCategory = lvalue +# 2070| getExpr(): [TemporaryObjectExpr] temporary object +# 2070| Type = [Struct] TernaryNonPodObj +# 2070| ValueCategory = lvalue +# 2070| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2070| Type = [Struct] TernaryNonPodObj +# 2070| ValueCategory = lvalue +# 2071| getStmt(4): [ReturnStmt] return ... +# 2073| [TopLevelFunction] void CommaTestHelper(unsigned int) +# 2073| : +# 2073| getParameter(0): [Parameter] (unnamed parameter 0) +# 2073| Type = [IntType] unsigned int +# 2075| [TopLevelFunction] unsigned int CommaTest(unsigned int) +# 2075| : +# 2075| getParameter(0): [Parameter] x +# 2075| Type = [IntType] unsigned int +# 2075| getEntryPoint(): [BlockStmt] { ... } +# 2076| getStmt(0): [DeclStmt] declaration +# 2076| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2076| Type = [IntType] unsigned int +# 2077| getStmt(1): [ExprStmt] ExprStmt +# 2077| getExpr(): [AssignExpr] ... = ... +# 2077| Type = [IntType] unsigned int +# 2077| ValueCategory = lvalue +# 2077| getLValue(): [VariableAccess] y +# 2077| Type = [IntType] unsigned int +# 2077| ValueCategory = lvalue +# 2077| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2077| Type = [IntType] unsigned int +# 2077| ValueCategory = prvalue(load) +# 2077| getCondition(): [LTExpr] ... < ... +# 2077| Type = [BoolType] bool +# 2077| ValueCategory = prvalue +# 2077| getLesserOperand(): [VariableAccess] x +# 2077| Type = [IntType] unsigned int +# 2077| ValueCategory = prvalue(load) +# 2077| getGreaterOperand(): [Literal] 100 +# 2077| Type = [IntType] int +# 2077| Value = [Literal] 100 +# 2077| ValueCategory = prvalue +# 2077| getGreaterOperand().getFullyConverted(): [CStyleCast] (unsigned int)... +# 2077| Conversion = [IntegralConversion] integral conversion +# 2077| Type = [IntType] unsigned int +# 2077| Value = [CStyleCast] 100 +# 2077| ValueCategory = prvalue +# 2078| getThen(): [CommaExpr] ... , ... +# 2078| Type = [IntType] unsigned int +# 2078| ValueCategory = prvalue(load) +# 2078| getLeftOperand(): [FunctionCall] call to CommaTestHelper +# 2078| Type = [VoidType] void +# 2078| ValueCategory = prvalue +# 2078| getArgument(0): [VariableAccess] x +# 2078| Type = [IntType] unsigned int +# 2078| ValueCategory = prvalue(load) +# 2078| getRightOperand(): [VariableAccess] x +# 2078| Type = [IntType] unsigned int +# 2078| ValueCategory = prvalue(load) +# 2079| getElse(): [CommaExpr] ... , ... +# 2079| Type = [IntType] int +# 2079| ValueCategory = prvalue +# 2079| getLeftOperand(): [FunctionCall] call to CommaTestHelper +# 2079| Type = [VoidType] void +# 2079| ValueCategory = prvalue +# 2079| getArgument(0): [VariableAccess] x +# 2079| Type = [IntType] unsigned int +# 2079| ValueCategory = prvalue(load) +# 2079| getRightOperand(): [Literal] 10 +# 2079| Type = [IntType] int +# 2079| Value = [Literal] 10 +# 2079| ValueCategory = prvalue +# 2078| getThen().getFullyConverted(): [ParenthesisExpr] (...) +# 2078| Type = [IntType] unsigned int +# 2078| ValueCategory = prvalue(load) +# 2079| getElse().getFullyConverted(): [CStyleCast] (unsigned int)... +# 2079| Conversion = [IntegralConversion] integral conversion +# 2079| Type = [IntType] unsigned int +# 2079| ValueCategory = prvalue +# 2079| getExpr(): [ParenthesisExpr] (...) +# 2079| Type = [IntType] int +# 2079| ValueCategory = prvalue +# 2080| getStmt(2): [ReturnStmt] return ... +# 2082| [TopLevelFunction] void NewDeleteMem() +# 2082| : +# 2082| getEntryPoint(): [BlockStmt] { ... } +# 2083| getStmt(0): [DeclStmt] declaration +# 2083| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2083| Type = [IntPointerType] int * +# 2083| getVariable().getInitializer(): [Initializer] initializer for x +# 2083| getExpr(): [NewExpr] new +# 2083| Type = [IntPointerType] int * +# 2083| ValueCategory = prvalue +# 2084| getStmt(1): [ExprStmt] ExprStmt +# 2084| getExpr(): [AssignExpr] ... = ... # 2084| Type = [IntType] int -# 2084| ValueCategory = prvalue(load) -# 2087| [TopLevelFunction] void CallsNonExit() -# 2087| : -# 2087| getEntryPoint(): [BlockStmt] { ... } -# 2088| getStmt(0): [ExprStmt] ExprStmt -# 2088| getExpr(): [FunctionCall] call to VoidFunc -# 2088| Type = [VoidType] void -# 2088| ValueCategory = prvalue -# 2089| getStmt(1): [ExprStmt] ExprStmt -# 2089| getExpr(): [FunctionCall] call to exit -# 2089| Type = [VoidType] void -# 2089| ValueCategory = prvalue -# 2089| getArgument(0): [Literal] 3 -# 2089| Type = [IntType] int -# 2089| Value = [Literal] 3 -# 2089| ValueCategory = prvalue -# 2090| getStmt(2): [ReturnStmt] return ... -# 2092| [TopLevelFunction] int TransNonExit() +# 2084| ValueCategory = lvalue +# 2084| getLValue(): [PointerDereferenceExpr] * ... +# 2084| Type = [IntType] int +# 2084| ValueCategory = lvalue +# 2084| getOperand(): [VariableAccess] x +# 2084| Type = [IntPointerType] int * +# 2084| ValueCategory = prvalue(load) +# 2084| getRValue(): [Literal] 6 +# 2084| Type = [IntType] int +# 2084| Value = [Literal] 6 +# 2084| ValueCategory = prvalue +# 2085| getStmt(2): [ExprStmt] ExprStmt +# 2085| getExpr(): [DeleteExpr] delete +# 2085| Type = [VoidType] void +# 2085| ValueCategory = prvalue +# 2085| getExpr(): [VariableAccess] x +# 2085| Type = [IntPointerType] int * +# 2085| ValueCategory = prvalue(load) +# 2086| getStmt(3): [ReturnStmt] return ... +# 2088| [CopyAssignmentOperator] Base2& Base2::operator=(Base2 const&) +# 2088| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Base2 & +# 2088| [Constructor] void Base2::Base2() +# 2088| : +# 2088| : +# 2088| getEntryPoint(): [BlockStmt] { ... } +# 2088| getStmt(0): [ReturnStmt] return ... +# 2088| [CopyConstructor] void Base2::Base2(Base2 const&) +# 2088| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Base2 & +# 2090| [MemberFunction] void Base2::operator delete(void*) +# 2090| : +# 2090| getParameter(0): [Parameter] p +# 2090| Type = [VoidPointerType] void * +# 2090| getEntryPoint(): [BlockStmt] { ... } +# 2091| getStmt(0): [ReturnStmt] return ... +# 2092| [Destructor,VirtualFunction] void Base2::~Base2() # 2092| : # 2092| getEntryPoint(): [BlockStmt] { ... } -# 2093| getStmt(0): [DeclStmt] declaration -# 2093| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2093| Type = [IntType] int -# 2093| getVariable().getInitializer(): [Initializer] initializer for x -# 2093| getExpr(): [FunctionCall] call to Add -# 2093| Type = [IntType] int -# 2093| ValueCategory = prvalue -# 2093| getArgument(0): [Literal] 3 -# 2093| Type = [IntType] int -# 2093| Value = [Literal] 3 -# 2093| ValueCategory = prvalue -# 2093| getArgument(1): [Literal] 4 -# 2093| Type = [IntType] int -# 2093| Value = [Literal] 4 -# 2093| ValueCategory = prvalue -# 2094| getStmt(1): [IfStmt] if (...) ... -# 2094| getCondition(): [EQExpr] ... == ... -# 2094| Type = [BoolType] bool -# 2094| ValueCategory = prvalue -# 2094| getLeftOperand(): [VariableAccess] x -# 2094| Type = [IntType] int -# 2094| ValueCategory = prvalue(load) -# 2094| getRightOperand(): [Literal] 7 -# 2094| Type = [IntType] int -# 2094| Value = [Literal] 7 -# 2094| ValueCategory = prvalue -# 2095| getThen(): [ExprStmt] ExprStmt -# 2095| getExpr(): [FunctionCall] call to CallsNonExit -# 2095| Type = [VoidType] void -# 2095| ValueCategory = prvalue -# 2096| getStmt(2): [ExprStmt] ExprStmt -# 2096| getExpr(): [FunctionCall] call to VoidFunc -# 2096| Type = [VoidType] void -# 2096| ValueCategory = prvalue -# 2097| getStmt(3): [ReturnStmt] return ... -# 2097| getExpr(): [VariableAccess] x -# 2097| Type = [IntType] int -# 2097| ValueCategory = prvalue(load) -# 2100| [TopLevelFunction] void newArrayCorrectType(size_t) +# 2092| getStmt(0): [ReturnStmt] return ... +# 2092| : +# 2095| [CopyAssignmentOperator] Derived2& Derived2::operator=(Derived2 const&) +# 2095| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Derived2 & +# 2095| [Constructor] void Derived2::Derived2() +# 2095| : +# 2095| : +# 2095| getInitializer(0): [ConstructorDirectInit] call to Base2 +# 2095| Type = [VoidType] void +# 2095| ValueCategory = prvalue +# 2095| getEntryPoint(): [BlockStmt] { ... } +# 2095| getStmt(0): [ReturnStmt] return ... +# 2095| [CopyConstructor] void Derived2::Derived2(Derived2 const&) +# 2095| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Derived2 & +# 2098| [Destructor,VirtualFunction] void Derived2::~Derived2() +# 2098| : +# 2098| getEntryPoint(): [BlockStmt] { ... } +# 2098| getStmt(0): [ReturnStmt] return ... +# 2098| : +# 2098| getDestruction(0): [DestructorDirectDestruction] call to ~Base2 +# 2098| Type = [VoidType] void +# 2098| ValueCategory = prvalue +# 2100| [MemberFunction] void Derived2::operator delete(void*) # 2100| : -# 2100| getParameter(0): [Parameter] n -# 2100| Type = [CTypedefType,Size_t] size_t +# 2100| getParameter(0): [Parameter] p +# 2100| Type = [VoidPointerType] void * # 2100| getEntryPoint(): [BlockStmt] { ... } -# 2101| getStmt(0): [ExprStmt] ExprStmt -# 2101| getExpr(): [NewArrayExpr] new[] -# 2101| Type = [IntPointerType] int * -# 2101| ValueCategory = prvalue -# 2101| getExtent(): [VariableAccess] n -# 2101| Type = [CTypedefType,Size_t] size_t -# 2101| ValueCategory = prvalue(load) -# 2102| getStmt(1): [ExprStmt] ExprStmt -# 2102| getExpr(): [NewArrayExpr] new[] -# 2102| Type = [IntPointerType] int * -# 2102| ValueCategory = prvalue -# 2102| getAllocatorCall(): [FunctionCall] call to operator new[] -# 2102| Type = [VoidPointerType] void * -# 2102| ValueCategory = prvalue -# 2102| getArgument(0): [ErrorExpr] -# 2102| Type = [LongType] unsigned long -# 2102| ValueCategory = prvalue -# 2102| getArgument(1): [Literal] 1.0 -# 2102| Type = [FloatType] float -# 2102| Value = [Literal] 1.0 -# 2102| ValueCategory = prvalue -# 2102| getExtent(): [VariableAccess] n -# 2102| Type = [CTypedefType,Size_t] size_t -# 2102| ValueCategory = prvalue(load) -# 2103| getStmt(2): [ExprStmt] ExprStmt -# 2103| getExpr(): [NewArrayExpr] new[] -# 2103| Type = [PointerType] String * -# 2103| ValueCategory = prvalue -# 2103| getInitializer(): [ArrayAggregateLiteral] {...} -# 2103| Type = [ArrayType] String[] -# 2103| ValueCategory = prvalue -# 2103| getAnElementExpr(0): [ConstructorCall] call to String -# 2103| Type = [VoidType] void -# 2103| ValueCategory = prvalue -# 2103| getExtent(): [VariableAccess] n -# 2103| Type = [CTypedefType,Size_t] size_t -# 2103| ValueCategory = prvalue(load) -# 2104| getStmt(3): [ExprStmt] ExprStmt -# 2104| getExpr(): [NewArrayExpr] new[] -# 2104| Type = [PointerType] Overaligned * -# 2104| ValueCategory = prvalue -# 2104| getExtent(): [VariableAccess] n -# 2104| Type = [CTypedefType,Size_t] size_t -# 2104| ValueCategory = prvalue(load) -# 2104| getAlignmentArgument(): [Literal] 128 -# 2104| Type = [ScopedEnum] align_val_t -# 2104| Value = [Literal] 128 -# 2104| ValueCategory = prvalue -# 2105| getStmt(4): [ExprStmt] ExprStmt -# 2105| getExpr(): [NewArrayExpr] new[] -# 2105| Type = [PointerType] DefaultCtorWithDefaultParam * -# 2105| ValueCategory = prvalue -# 2105| getInitializer(): [ArrayAggregateLiteral] {...} -# 2105| Type = [ArrayType] DefaultCtorWithDefaultParam[] -# 2105| ValueCategory = prvalue -# 2105| getAnElementExpr(0): [ConstructorCall] call to DefaultCtorWithDefaultParam -# 2105| Type = [VoidType] void -# 2105| ValueCategory = prvalue -# 2105| getExtent(): [VariableAccess] n -# 2105| Type = [CTypedefType,Size_t] size_t -# 2105| ValueCategory = prvalue(load) -# 2106| getStmt(5): [ExprStmt] ExprStmt -# 2106| getExpr(): [NewArrayExpr] new[] -# 2106| Type = [IntPointerType] int * -# 2106| ValueCategory = prvalue -# 2106| getInitializer(): [ArrayAggregateLiteral] {...} -# 2106| Type = [ArrayType] int[3] -# 2106| ValueCategory = prvalue -# 2106| getAnElementExpr(0): [Literal] 0 -# 2106| Type = [IntType] int -# 2106| Value = [Literal] 0 -# 2106| ValueCategory = prvalue -# 2106| getAnElementExpr(1): [Literal] 1 -# 2106| Type = [IntType] int -# 2106| Value = [Literal] 1 -# 2106| ValueCategory = prvalue -# 2106| getAnElementExpr(2): [Literal] 2 -# 2106| Type = [IntType] int -# 2106| Value = [Literal] 2 -# 2106| ValueCategory = prvalue -# 2106| getExtent(): [VariableAccess] n -# 2106| Type = [CTypedefType,Size_t] size_t -# 2106| ValueCategory = prvalue(load) -# 2107| getStmt(6): [ReturnStmt] return ... -# 2109| [TopLevelFunction] double strtod(char const*, char**) -# 2109| : -# 2109| getParameter(0): [Parameter] str -# 2109| Type = [PointerType] const char * -# 2109| getParameter(1): [Parameter] endptr -# 2109| Type = [PointerType] char ** -# 2111| [TopLevelFunction] char* test_strtod(char*) -# 2111| : -# 2111| getParameter(0): [Parameter] s -# 2111| Type = [CharPointerType] char * -# 2111| getEntryPoint(): [BlockStmt] { ... } -# 2112| getStmt(0): [DeclStmt] declaration -# 2112| getDeclarationEntry(0): [VariableDeclarationEntry] definition of end -# 2112| Type = [CharPointerType] char * -# 2113| getStmt(1): [DeclStmt] declaration +# 2101| getStmt(0): [ReturnStmt] return ... +# 2105| [TopLevelFunction] int virtual_delete() +# 2105| : +# 2106| getEntryPoint(): [BlockStmt] { ... } +# 2107| getStmt(0): [DeclStmt] declaration +# 2107| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b1 +# 2107| Type = [PointerType] Base2 * +# 2107| getVariable().getInitializer(): [Initializer] initializer for b1 +# 2107| getExpr(): [NewExpr] new +# 2107| Type = [PointerType] Base2 * +# 2107| ValueCategory = prvalue +# 2107| getInitializer(): [ConstructorCall] call to Base2 +# 2107| Type = [VoidType] void +# 2107| ValueCategory = prvalue +# 2108| getStmt(1): [ExprStmt] ExprStmt +# 2108| getExpr(): [DeleteExpr] delete +# 2108| Type = [VoidType] void +# 2108| ValueCategory = prvalue +# 2108| getDeallocatorCall(): [FunctionCall] call to operator delete +# 2108| Type = [VoidType] void +# 2108| ValueCategory = prvalue +# 2108| getDestructorCall(): [DestructorCall] call to ~Base2 +# 2108| Type = [VoidType] void +# 2108| ValueCategory = prvalue +# 2108| getQualifier(): [VariableAccess] b1 +# 2108| Type = [PointerType] Base2 * +# 2108| ValueCategory = prvalue(load) +# 2110| getStmt(2): [DeclStmt] declaration +# 2110| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b2 +# 2110| Type = [PointerType] Base2 * +# 2110| getVariable().getInitializer(): [Initializer] initializer for b2 +# 2110| getExpr(): [NewExpr] new +# 2110| Type = [PointerType] Derived2 * +# 2110| ValueCategory = prvalue +# 2110| getInitializer(): [ConstructorCall] call to Derived2 +# 2110| Type = [VoidType] void +# 2110| ValueCategory = prvalue +# 2110| getExpr().getFullyConverted(): [CStyleCast] (Base2 *)... +# 2110| Conversion = [BaseClassConversion] base class conversion +# 2110| Type = [PointerType] Base2 * +# 2110| ValueCategory = prvalue +# 2111| getStmt(3): [ExprStmt] ExprStmt +# 2111| getExpr(): [DeleteExpr] delete +# 2111| Type = [VoidType] void +# 2111| ValueCategory = prvalue +# 2111| getDeallocatorCall(): [FunctionCall] call to operator delete +# 2111| Type = [VoidType] void +# 2111| ValueCategory = prvalue +# 2111| getDestructorCall(): [DestructorCall] call to ~Base2 +# 2111| Type = [VoidType] void +# 2111| ValueCategory = prvalue +# 2111| getQualifier(): [VariableAccess] b2 +# 2111| Type = [PointerType] Base2 * +# 2111| ValueCategory = prvalue(load) +# 2113| getStmt(4): [DeclStmt] declaration # 2113| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 2113| Type = [DoubleType] double +# 2113| Type = [PointerType] Derived2 * # 2113| getVariable().getInitializer(): [Initializer] initializer for d -# 2113| getExpr(): [FunctionCall] call to strtod -# 2113| Type = [DoubleType] double +# 2113| getExpr(): [NewExpr] new +# 2113| Type = [PointerType] Derived2 * # 2113| ValueCategory = prvalue -# 2113| getArgument(0): [VariableAccess] s -# 2113| Type = [CharPointerType] char * -# 2113| ValueCategory = prvalue(load) -# 2113| getArgument(1): [AddressOfExpr] & ... -# 2113| Type = [PointerType] char ** +# 2113| getInitializer(): [ConstructorCall] call to Derived2 +# 2113| Type = [VoidType] void # 2113| ValueCategory = prvalue -# 2113| getOperand(): [VariableAccess] end -# 2113| Type = [CharPointerType] char * -# 2113| ValueCategory = lvalue -# 2113| getArgument(0).getFullyConverted(): [CStyleCast] (const char *)... -# 2113| Conversion = [PointerConversion] pointer conversion -# 2113| Type = [PointerType] const char * -# 2113| ValueCategory = prvalue -# 2114| getStmt(2): [ReturnStmt] return ... -# 2114| getExpr(): [VariableAccess] end -# 2114| Type = [CharPointerType] char * -# 2114| ValueCategory = prvalue(load) -# 2117| [CopyAssignmentOperator] HasOperatorBool& HasOperatorBool::operator=(HasOperatorBool const&) +# 2114| getStmt(5): [ExprStmt] ExprStmt +# 2114| getExpr(): [DeleteExpr] delete +# 2114| Type = [VoidType] void +# 2114| ValueCategory = prvalue +# 2114| getDeallocatorCall(): [FunctionCall] call to operator delete +# 2114| Type = [VoidType] void +# 2114| ValueCategory = prvalue +# 2114| getDestructorCall(): [DestructorCall] call to ~Derived2 +# 2114| Type = [VoidType] void +# 2114| ValueCategory = prvalue +# 2114| getQualifier(): [VariableAccess] d +# 2114| Type = [PointerType] Derived2 * +# 2114| ValueCategory = prvalue(load) +# 2115| getStmt(6): [ReturnStmt] return ... +# 2117| [TopLevelFunction] void test_constant_folding_use(int) # 2117| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const HasOperatorBool & -# 2117| [MoveAssignmentOperator] HasOperatorBool& HasOperatorBool::operator=(HasOperatorBool&&) -# 2117| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] HasOperatorBool && -# 2118| [ConversionOperator] bool HasOperatorBool::operator bool() -# 2118| : -# 2121| [TopLevelFunction] void call_as_child_of_ConditionDeclExpr() -# 2121| : -# 2121| getEntryPoint(): [BlockStmt] { ... } -# 2122| getStmt(0): [IfStmt] if (...) ... -# 2122| getCondition(): [ConditionDeclExpr] (condition decl) -# 2122| Type = [BoolType] bool -# 2122| ValueCategory = prvalue -# 2122| getChild(0): [FunctionCall] call to operator bool -# 2122| Type = [BoolType] bool -# 2122| ValueCategory = prvalue -# 2122| getQualifier(): [VariableAccess] b -# 2122| Type = [Struct] HasOperatorBool -# 2122| ValueCategory = prvalue(load) -# 2122| getThen(): [BlockStmt] { ... } -# 2123| getStmt(1): [ReturnStmt] return ... -# 2125| [CopyAssignmentOperator] ClassWithDestructor& ClassWithDestructor::operator=(ClassWithDestructor const&) -# 2125| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const ClassWithDestructor & -# 2125| [CopyConstructor] void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) -# 2125| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const ClassWithDestructor & -# 2125| : -# 2125| getInitializer(0): [ConstructorFieldInit] constructor init of field x -# 2125| Type = [CharPointerType] char * -# 2125| ValueCategory = prvalue -# 2125| getExpr(): [ReferenceFieldAccess] x -# 2125| Type = [CharPointerType] char * -# 2125| ValueCategory = prvalue(load) -# 2125| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 2125| Type = [LValueReferenceType] const ClassWithDestructor & -# 2125| ValueCategory = prvalue(load) -# 2125| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2125| Type = [SpecifiedType] const ClassWithDestructor -# 2125| ValueCategory = lvalue -# 2125| getEntryPoint(): [BlockStmt] { ... } -# 2125| getStmt(0): [ReturnStmt] return ... -# 2128| [Constructor] void ClassWithDestructor::ClassWithDestructor() -# 2128| : -# 2128| : -# 2128| getEntryPoint(): [BlockStmt] { ... } -# 2128| getStmt(0): [ExprStmt] ExprStmt -# 2128| getExpr(): [AssignExpr] ... = ... -# 2128| Type = [CharPointerType] char * -# 2128| ValueCategory = lvalue -# 2128| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] x -# 2128| Type = [CharPointerType] char * -# 2128| ValueCategory = lvalue -# 2128| getQualifier(): [ThisExpr] this -# 2128| Type = [PointerType] ClassWithDestructor * -# 2128| ValueCategory = prvalue(load) -# 2128| getRValue(): [NewExpr] new -# 2128| Type = [CharPointerType] char * +# 2117| getParameter(0): [Parameter] (unnamed parameter 0) +# 2117| Type = [IntType] int +# 2119| [TopLevelFunction] void test_constant_folding() +# 2119| : +# 2119| getEntryPoint(): [BlockStmt] { ... } +# 2120| getStmt(0): [DeclStmt] declaration +# 2120| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2120| Type = [SpecifiedType] const int +# 2120| getVariable().getInitializer(): [Initializer] initializer for x +# 2120| getExpr(): [Literal] 116 +# 2120| Type = [IntType] int +# 2120| Value = [Literal] 116 +# 2120| ValueCategory = prvalue +# 2121| getStmt(1): [ExprStmt] ExprStmt +# 2121| getExpr(): [FunctionCall] call to test_constant_folding_use +# 2121| Type = [VoidType] void +# 2121| ValueCategory = prvalue +# 2121| getArgument(0): [VariableAccess] x +# 2121| Type = [IntType] int +# 2121| Value = [VariableAccess] 116 +# 2121| ValueCategory = prvalue(load) +# 2122| getStmt(2): [ReturnStmt] return ... +# 2124| [TopLevelFunction] void exit(int) +# 2124| : +# 2124| getParameter(0): [Parameter] code +# 2124| Type = [IntType] int +# 2126| [TopLevelFunction] int NonExit() +# 2126| : +# 2126| getEntryPoint(): [BlockStmt] { ... } +# 2127| getStmt(0): [DeclStmt] declaration +# 2127| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2127| Type = [IntType] int +# 2127| getVariable().getInitializer(): [Initializer] initializer for x +# 2127| getExpr(): [FunctionCall] call to Add +# 2127| Type = [IntType] int +# 2127| ValueCategory = prvalue +# 2127| getArgument(0): [Literal] 3 +# 2127| Type = [IntType] int +# 2127| Value = [Literal] 3 +# 2127| ValueCategory = prvalue +# 2127| getArgument(1): [Literal] 4 +# 2127| Type = [IntType] int +# 2127| Value = [Literal] 4 +# 2127| ValueCategory = prvalue +# 2128| getStmt(1): [IfStmt] if (...) ... +# 2128| getCondition(): [EQExpr] ... == ... +# 2128| Type = [BoolType] bool +# 2128| ValueCategory = prvalue +# 2128| getLeftOperand(): [VariableAccess] x +# 2128| Type = [IntType] int +# 2128| ValueCategory = prvalue(load) +# 2128| getRightOperand(): [Literal] 7 +# 2128| Type = [IntType] int +# 2128| Value = [Literal] 7 # 2128| ValueCategory = prvalue -# 2128| getStmt(1): [ReturnStmt] return ... -# 2129| [Destructor] void ClassWithDestructor::~ClassWithDestructor() -# 2129| : -# 2129| getEntryPoint(): [BlockStmt] { ... } -# 2129| getStmt(0): [ExprStmt] ExprStmt -# 2129| getExpr(): [DeleteExpr] delete -# 2129| Type = [VoidType] void -# 2129| ValueCategory = prvalue -# 2129| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] x -# 2129| Type = [CharPointerType] char * -# 2129| ValueCategory = prvalue(load) -# 2129| getQualifier(): [ThisExpr] this -# 2129| Type = [PointerType] ClassWithDestructor * -# 2129| ValueCategory = prvalue(load) -# 2129| getStmt(1): [ReturnStmt] return ... -# 2129| : -# 2131| [MemberFunction] void ClassWithDestructor::set_x(char) -# 2131| : -# 2131| getParameter(0): [Parameter] y -# 2131| Type = [PlainCharType] char -# 2131| getEntryPoint(): [BlockStmt] { ... } -# 2131| getStmt(0): [ExprStmt] ExprStmt -# 2131| getExpr(): [AssignExpr] ... = ... -# 2131| Type = [PlainCharType] char -# 2131| ValueCategory = lvalue -# 2131| getLValue(): [PointerDereferenceExpr] * ... -# 2131| Type = [PlainCharType] char -# 2131| ValueCategory = lvalue -# 2131| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] x -# 2131| Type = [CharPointerType] char * -# 2131| ValueCategory = prvalue(load) -# 2131| getQualifier(): [ThisExpr] this -# 2131| Type = [PointerType] ClassWithDestructor * -# 2131| ValueCategory = prvalue(load) -# 2131| getRValue(): [VariableAccess] y -# 2131| Type = [PlainCharType] char -# 2131| ValueCategory = prvalue(load) -# 2131| getStmt(1): [ReturnStmt] return ... -# 2132| [MemberFunction] char ClassWithDestructor::get_x() -# 2132| : -# 2132| getEntryPoint(): [BlockStmt] { ... } -# 2132| getStmt(0): [ReturnStmt] return ... -# 2132| getExpr(): [PointerDereferenceExpr] * ... -# 2132| Type = [PlainCharType] char -# 2132| ValueCategory = prvalue(load) -# 2132| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] x -# 2132| Type = [CharPointerType] char * -# 2132| ValueCategory = prvalue(load) -# 2132| getQualifier(): [ThisExpr] this -# 2132| Type = [PointerType] ClassWithDestructor * -# 2132| ValueCategory = prvalue(load) -# 2135| [GlobalVariable] bool initialization_with_destructor_bool -# 2135| getInitializer(): [Initializer] initializer for initialization_with_destructor_bool -# 2135| getExpr(): [Literal] 1 -# 2135| Type = [BoolType] bool -# 2135| Value = [Literal] 1 -# 2135| ValueCategory = prvalue -# 2137| [TopLevelFunction] void initialization_with_destructor(bool, char) -# 2137| : -# 2137| getParameter(0): [Parameter] b -# 2137| Type = [BoolType] bool -# 2137| getParameter(1): [Parameter] c -# 2137| Type = [PlainCharType] char -# 2137| getEntryPoint(): [BlockStmt] { ... } -# 2138| getStmt(0): [IfStmt] if (...) ... -# 2138| getInitialization(): [DeclStmt] declaration -# 2138| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2138| Type = [Class] ClassWithDestructor -# 2138| getVariable().getInitializer(): [Initializer] initializer for x -# 2138| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2138| Type = [VoidType] void -# 2138| ValueCategory = prvalue -# 2138| getCondition(): [VariableAccess] b -# 2138| Type = [BoolType] bool -# 2138| ValueCategory = prvalue(load) -# 2139| getThen(): [ExprStmt] ExprStmt -# 2139| getExpr(): [FunctionCall] call to set_x -# 2139| Type = [VoidType] void -# 2139| ValueCategory = prvalue -# 2139| getQualifier(): [VariableAccess] x -# 2139| Type = [Class] ClassWithDestructor -# 2139| ValueCategory = lvalue -# 2139| getArgument(0): [CharLiteral] 97 -# 2139| Type = [PlainCharType] char -# 2139| Value = [CharLiteral] 97 -# 2139| ValueCategory = prvalue -# 2139| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2139| Type = [VoidType] void -# 2139| ValueCategory = prvalue -# 2139| getQualifier(): [VariableAccess] x -# 2139| Type = [Class] ClassWithDestructor -# 2139| ValueCategory = lvalue -# 2141| getStmt(1): [ConstexprIfStmt] if constexpr (...) ... -# 2141| getInitialization(): [DeclStmt] declaration -# 2141| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2141| Type = [Class] ClassWithDestructor -# 2141| getVariable().getInitializer(): [Initializer] initializer for x -# 2141| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2141| Type = [VoidType] void -# 2141| ValueCategory = prvalue -# 2141| getCondition(): [VariableAccess] initialization_with_destructor_bool +# 2129| getThen(): [ExprStmt] ExprStmt +# 2129| getExpr(): [FunctionCall] call to exit +# 2129| Type = [VoidType] void +# 2129| ValueCategory = prvalue +# 2129| getArgument(0): [Literal] 3 +# 2129| Type = [IntType] int +# 2129| Value = [Literal] 3 +# 2129| ValueCategory = prvalue +# 2130| getStmt(2): [ExprStmt] ExprStmt +# 2130| getExpr(): [FunctionCall] call to VoidFunc +# 2130| Type = [VoidType] void +# 2130| ValueCategory = prvalue +# 2131| getStmt(3): [ReturnStmt] return ... +# 2131| getExpr(): [VariableAccess] x +# 2131| Type = [IntType] int +# 2131| ValueCategory = prvalue(load) +# 2134| [TopLevelFunction] void CallsNonExit() +# 2134| : +# 2134| getEntryPoint(): [BlockStmt] { ... } +# 2135| getStmt(0): [ExprStmt] ExprStmt +# 2135| getExpr(): [FunctionCall] call to VoidFunc +# 2135| Type = [VoidType] void +# 2135| ValueCategory = prvalue +# 2136| getStmt(1): [ExprStmt] ExprStmt +# 2136| getExpr(): [FunctionCall] call to exit +# 2136| Type = [VoidType] void +# 2136| ValueCategory = prvalue +# 2136| getArgument(0): [Literal] 3 +# 2136| Type = [IntType] int +# 2136| Value = [Literal] 3 +# 2136| ValueCategory = prvalue +# 2137| getStmt(2): [ReturnStmt] return ... +# 2139| [TopLevelFunction] int TransNonExit() +# 2139| : +# 2139| getEntryPoint(): [BlockStmt] { ... } +# 2140| getStmt(0): [DeclStmt] declaration +# 2140| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2140| Type = [IntType] int +# 2140| getVariable().getInitializer(): [Initializer] initializer for x +# 2140| getExpr(): [FunctionCall] call to Add +# 2140| Type = [IntType] int +# 2140| ValueCategory = prvalue +# 2140| getArgument(0): [Literal] 3 +# 2140| Type = [IntType] int +# 2140| Value = [Literal] 3 +# 2140| ValueCategory = prvalue +# 2140| getArgument(1): [Literal] 4 +# 2140| Type = [IntType] int +# 2140| Value = [Literal] 4 +# 2140| ValueCategory = prvalue +# 2141| getStmt(1): [IfStmt] if (...) ... +# 2141| getCondition(): [EQExpr] ... == ... # 2141| Type = [BoolType] bool -# 2141| Value = [VariableAccess] 1 -# 2141| ValueCategory = prvalue(load) +# 2141| ValueCategory = prvalue +# 2141| getLeftOperand(): [VariableAccess] x +# 2141| Type = [IntType] int +# 2141| ValueCategory = prvalue(load) +# 2141| getRightOperand(): [Literal] 7 +# 2141| Type = [IntType] int +# 2141| Value = [Literal] 7 +# 2141| ValueCategory = prvalue # 2142| getThen(): [ExprStmt] ExprStmt -# 2142| getExpr(): [FunctionCall] call to set_x +# 2142| getExpr(): [FunctionCall] call to CallsNonExit # 2142| Type = [VoidType] void # 2142| ValueCategory = prvalue -# 2142| getQualifier(): [VariableAccess] x -# 2142| Type = [Class] ClassWithDestructor -# 2142| ValueCategory = lvalue -# 2142| getArgument(0): [CharLiteral] 97 -# 2142| Type = [PlainCharType] char -# 2142| Value = [CharLiteral] 97 -# 2142| ValueCategory = prvalue -# 2142| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2142| Type = [VoidType] void -# 2142| ValueCategory = prvalue -# 2142| getQualifier(): [VariableAccess] x -# 2142| Type = [Class] ClassWithDestructor -# 2142| ValueCategory = lvalue -# 2144| getStmt(2): [SwitchStmt] switch (...) ... -# 2144| getInitialization(): [DeclStmt] declaration -# 2144| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2144| Type = [Class] ClassWithDestructor -# 2144| getVariable().getInitializer(): [Initializer] initializer for x -# 2144| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2144| Type = [VoidType] void -# 2144| ValueCategory = prvalue -# 2144| getExpr(): [VariableAccess] c -# 2144| Type = [PlainCharType] char -# 2144| ValueCategory = prvalue(load) -# 2144| getStmt(): [BlockStmt] { ... } -# 2145| getStmt(0): [SwitchCase] case ...: -# 2145| getExpr(): [CharLiteral] 97 -# 2145| Type = [PlainCharType] char -# 2145| Value = [CharLiteral] 97 -# 2145| ValueCategory = prvalue -# 2145| getExpr().getFullyConverted(): [CStyleCast] (int)... -# 2145| Conversion = [IntegralConversion] integral conversion -# 2145| Type = [IntType] int -# 2145| Value = [CStyleCast] 97 -# 2145| ValueCategory = prvalue -# 2146| getStmt(1): [ExprStmt] ExprStmt -# 2146| getExpr(): [FunctionCall] call to set_x -# 2146| Type = [VoidType] void -# 2146| ValueCategory = prvalue -# 2146| getQualifier(): [VariableAccess] x -# 2146| Type = [Class] ClassWithDestructor -# 2146| ValueCategory = lvalue -# 2146| getArgument(0): [CharLiteral] 97 -# 2146| Type = [PlainCharType] char -# 2146| Value = [CharLiteral] 97 -# 2146| ValueCategory = prvalue -# 2147| getStmt(2): [BreakStmt] break; -# 2148| getStmt(3): [SwitchCase] default: -# 2149| getStmt(4): [ExprStmt] ExprStmt -# 2149| getExpr(): [FunctionCall] call to set_x -# 2149| Type = [VoidType] void -# 2149| ValueCategory = prvalue -# 2149| getQualifier(): [VariableAccess] x -# 2149| Type = [Class] ClassWithDestructor -# 2149| ValueCategory = lvalue -# 2149| getArgument(0): [CharLiteral] 98 -# 2149| Type = [PlainCharType] char -# 2149| Value = [CharLiteral] 98 -# 2149| ValueCategory = prvalue -# 2150| getStmt(5): [BreakStmt] break; -# 2151| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2151| Type = [VoidType] void -# 2151| ValueCategory = prvalue -# 2151| getQualifier(): [VariableAccess] x -# 2151| Type = [Class] ClassWithDestructor -# 2151| ValueCategory = lvalue -# 2144| getExpr().getFullyConverted(): [CStyleCast] (int)... -# 2144| Conversion = [IntegralConversion] integral conversion +# 2143| getStmt(2): [ExprStmt] ExprStmt +# 2143| getExpr(): [FunctionCall] call to VoidFunc +# 2143| Type = [VoidType] void +# 2143| ValueCategory = prvalue +# 2144| getStmt(3): [ReturnStmt] return ... +# 2144| getExpr(): [VariableAccess] x # 2144| Type = [IntType] int -# 2144| ValueCategory = prvalue -# 2151| getStmt(3): [LabelStmt] label ...: -# 2153| getStmt(4): [DeclStmt] declaration -# 2153| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2153| Type = [Class] ClassWithDestructor -# 2153| getVariable().getInitializer(): [Initializer] initializer for x -# 2153| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2153| Type = [VoidType] void +# 2144| ValueCategory = prvalue(load) +# 2147| [TopLevelFunction] void newArrayCorrectType(size_t) +# 2147| : +# 2147| getParameter(0): [Parameter] n +# 2147| Type = [CTypedefType,Size_t] size_t +# 2147| getEntryPoint(): [BlockStmt] { ... } +# 2148| getStmt(0): [ExprStmt] ExprStmt +# 2148| getExpr(): [NewArrayExpr] new[] +# 2148| Type = [IntPointerType] int * +# 2148| ValueCategory = prvalue +# 2148| getExtent(): [VariableAccess] n +# 2148| Type = [CTypedefType,Size_t] size_t +# 2148| ValueCategory = prvalue(load) +# 2149| getStmt(1): [ExprStmt] ExprStmt +# 2149| getExpr(): [NewArrayExpr] new[] +# 2149| Type = [IntPointerType] int * +# 2149| ValueCategory = prvalue +# 2149| getAllocatorCall(): [FunctionCall] call to operator new[] +# 2149| Type = [VoidPointerType] void * +# 2149| ValueCategory = prvalue +# 2149| getArgument(0): [ErrorExpr] +# 2149| Type = [LongType] unsigned long +# 2149| ValueCategory = prvalue +# 2149| getArgument(1): [Literal] 1.0 +# 2149| Type = [FloatType] float +# 2149| Value = [Literal] 1.0 +# 2149| ValueCategory = prvalue +# 2149| getExtent(): [VariableAccess] n +# 2149| Type = [CTypedefType,Size_t] size_t +# 2149| ValueCategory = prvalue(load) +# 2150| getStmt(2): [ExprStmt] ExprStmt +# 2150| getExpr(): [NewArrayExpr] new[] +# 2150| Type = [PointerType] String * +# 2150| ValueCategory = prvalue +# 2150| getInitializer(): [ArrayAggregateLiteral] {...} +# 2150| Type = [ArrayType] String[] +# 2150| ValueCategory = prvalue +# 2150| getAnElementExpr(0): [ConstructorCall] call to String +# 2150| Type = [VoidType] void +# 2150| ValueCategory = prvalue +# 2150| getExtent(): [VariableAccess] n +# 2150| Type = [CTypedefType,Size_t] size_t +# 2150| ValueCategory = prvalue(load) +# 2151| getStmt(3): [ExprStmt] ExprStmt +# 2151| getExpr(): [NewArrayExpr] new[] +# 2151| Type = [PointerType] Overaligned * +# 2151| ValueCategory = prvalue +# 2151| getExtent(): [VariableAccess] n +# 2151| Type = [CTypedefType,Size_t] size_t +# 2151| ValueCategory = prvalue(load) +# 2151| getAlignmentArgument(): [Literal] 128 +# 2151| Type = [ScopedEnum] align_val_t +# 2151| Value = [Literal] 128 +# 2151| ValueCategory = prvalue +# 2152| getStmt(4): [ExprStmt] ExprStmt +# 2152| getExpr(): [NewArrayExpr] new[] +# 2152| Type = [PointerType] DefaultCtorWithDefaultParam * +# 2152| ValueCategory = prvalue +# 2152| getInitializer(): [ArrayAggregateLiteral] {...} +# 2152| Type = [ArrayType] DefaultCtorWithDefaultParam[] +# 2152| ValueCategory = prvalue +# 2152| getAnElementExpr(0): [ConstructorCall] call to DefaultCtorWithDefaultParam +# 2152| Type = [VoidType] void +# 2152| ValueCategory = prvalue +# 2152| getExtent(): [VariableAccess] n +# 2152| Type = [CTypedefType,Size_t] size_t +# 2152| ValueCategory = prvalue(load) +# 2153| getStmt(5): [ExprStmt] ExprStmt +# 2153| getExpr(): [NewArrayExpr] new[] +# 2153| Type = [IntPointerType] int * +# 2153| ValueCategory = prvalue +# 2153| getInitializer(): [ArrayAggregateLiteral] {...} +# 2153| Type = [ArrayType] int[3] +# 2153| ValueCategory = prvalue +# 2153| getAnElementExpr(0): [Literal] 0 +# 2153| Type = [IntType] int +# 2153| Value = [Literal] 0 # 2153| ValueCategory = prvalue -# 2154| getStmt(5): [RangeBasedForStmt] for(...:...) ... -# 2154| getInitialization(): [DeclStmt] declaration -# 2154| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys -# 2154| Type = [ClassTemplateInstantiation,Struct] vector -# 2154| getVariable().getInitializer(): [Initializer] initializer for ys -# 2154| getExpr(): [ConstructorCall] call to vector -# 2154| Type = [VoidType] void -# 2154| ValueCategory = prvalue -# 2154| getArgument(0): [VariableAccess] x -# 2154| Type = [Class] ClassWithDestructor -# 2154| ValueCategory = prvalue(load) -# 2154| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2154| Type = [Class] ClassWithDestructor -# 2154| ValueCategory = lvalue -# 2154| getChild(1): [DeclStmt] declaration -# 2154| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) -# 2154| Type = [LValueReferenceType] vector & -#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 2154| getExpr(): [VariableAccess] ys -# 2154| Type = [ClassTemplateInstantiation,Struct] vector -# 2154| ValueCategory = lvalue -# 2154| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2154| Type = [LValueReferenceType] vector & -# 2154| ValueCategory = prvalue -# 2154| getBeginEndDeclaration(): [DeclStmt] declaration -# 2154| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) -# 2154| Type = [NestedStruct] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) -# 2154| getExpr(): [FunctionCall] call to begin -# 2154| Type = [NestedStruct] iterator -# 2154| ValueCategory = prvalue -# 2154| getQualifier(): [VariableAccess] (__range) -# 2154| Type = [LValueReferenceType] vector & -# 2154| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2154| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) -# 2154| Type = [NestedStruct] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) -# 2154| getExpr(): [FunctionCall] call to end -# 2154| Type = [NestedStruct] iterator -# 2154| ValueCategory = prvalue -# 2154| getQualifier(): [VariableAccess] (__range) -# 2154| Type = [LValueReferenceType] vector & -# 2154| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2154| getCondition(): [FunctionCall] call to operator!= -# 2154| Type = [BoolType] bool -# 2154| ValueCategory = prvalue -# 2154| getQualifier(): [VariableAccess] (__begin) -# 2154| Type = [NestedStruct] iterator -# 2154| ValueCategory = lvalue -# 2154| getArgument(0): [VariableAccess] (__end) -# 2154| Type = [NestedStruct] iterator -# 2154| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -# 2154| getUpdate(): [FunctionCall] call to operator++ -# 2154| Type = [LValueReferenceType] iterator & -# 2154| ValueCategory = prvalue -# 2154| getQualifier(): [VariableAccess] (__begin) -# 2154| Type = [NestedStruct] iterator -# 2154| ValueCategory = lvalue -# 2154| getChild(5): [DeclStmt] declaration -# 2154| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 2154| Type = [Class] ClassWithDestructor -# 2154| getVariable().getInitializer(): [Initializer] initializer for y -# 2154| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* -# 2154| Type = [LValueReferenceType] ClassWithDestructor & -# 2154| ValueCategory = prvalue -# 2154| getQualifier(): [VariableAccess] (__begin) -# 2154| Type = [NestedStruct] iterator -# 2154| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -# 2154| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2154| Type = [Class] ClassWithDestructor -# 2154| ValueCategory = prvalue(load) -# 2155| getStmt(): [ExprStmt] ExprStmt -# 2155| getExpr(): [FunctionCall] call to set_x -# 2155| Type = [VoidType] void -# 2155| ValueCategory = prvalue -# 2155| getQualifier(): [VariableAccess] y -# 2155| Type = [Class] ClassWithDestructor -# 2155| ValueCategory = lvalue -# 2155| getArgument(0): [CharLiteral] 97 -# 2155| Type = [PlainCharType] char -# 2155| Value = [CharLiteral] 97 -# 2155| ValueCategory = prvalue -# 2154| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2154| Type = [VoidType] void -# 2154| ValueCategory = prvalue -# 2154| getQualifier(): [VariableAccess] y -# 2154| Type = [Class] ClassWithDestructor -# 2154| ValueCategory = lvalue -# 2154| getImplicitDestructorCall(0): [DestructorCall] call to ~vector -# 2154| Type = [VoidType] void -# 2154| ValueCategory = prvalue -# 2154| getQualifier(): [VariableAccess] ys -# 2154| Type = [ClassTemplateInstantiation,Struct] vector -# 2154| ValueCategory = lvalue -# 2154| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2154| Type = [NestedStruct] iterator -# 2154| ValueCategory = lvalue -# 2157| getStmt(6): [RangeBasedForStmt] for(...:...) ... -# 2157| getInitialization(): [DeclStmt] declaration -# 2157| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys -# 2157| Type = [ClassTemplateInstantiation,Struct] vector -# 2157| getVariable().getInitializer(): [Initializer] initializer for ys -# 2157| getExpr(): [ConstructorCall] call to vector -# 2157| Type = [VoidType] void -# 2157| ValueCategory = prvalue -# 2157| getArgument(0): [VariableAccess] x -# 2157| Type = [Class] ClassWithDestructor -# 2157| ValueCategory = prvalue(load) -# 2157| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2157| Type = [Class] ClassWithDestructor -# 2157| ValueCategory = lvalue -# 2157| getChild(1): [DeclStmt] declaration -# 2157| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) -# 2157| Type = [LValueReferenceType] vector & -#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 2157| getExpr(): [VariableAccess] ys -# 2157| Type = [ClassTemplateInstantiation,Struct] vector -# 2157| ValueCategory = lvalue -# 2157| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2157| Type = [LValueReferenceType] vector & -# 2157| ValueCategory = prvalue -# 2157| getBeginEndDeclaration(): [DeclStmt] declaration -# 2157| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) -# 2157| Type = [NestedStruct] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) -# 2157| getExpr(): [FunctionCall] call to begin -# 2157| Type = [NestedStruct] iterator -# 2157| ValueCategory = prvalue -# 2157| getQualifier(): [VariableAccess] (__range) -# 2157| Type = [LValueReferenceType] vector & -# 2157| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2157| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) -# 2157| Type = [NestedStruct] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) -# 2157| getExpr(): [FunctionCall] call to end -# 2157| Type = [NestedStruct] iterator -# 2157| ValueCategory = prvalue -# 2157| getQualifier(): [VariableAccess] (__range) -# 2157| Type = [LValueReferenceType] vector & -# 2157| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2157| getCondition(): [FunctionCall] call to operator!= -# 2157| Type = [BoolType] bool -# 2157| ValueCategory = prvalue -# 2157| getQualifier(): [VariableAccess] (__begin) -# 2157| Type = [NestedStruct] iterator -# 2157| ValueCategory = lvalue -# 2157| getArgument(0): [VariableAccess] (__end) -# 2157| Type = [NestedStruct] iterator -# 2157| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -# 2157| getUpdate(): [FunctionCall] call to operator++ -# 2157| Type = [LValueReferenceType] iterator & -# 2157| ValueCategory = prvalue -# 2157| getQualifier(): [VariableAccess] (__begin) -# 2157| Type = [NestedStruct] iterator -# 2157| ValueCategory = lvalue -# 2157| getChild(5): [DeclStmt] declaration -# 2157| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 2157| Type = [Class] ClassWithDestructor -# 2157| getVariable().getInitializer(): [Initializer] initializer for y -# 2157| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* -# 2157| Type = [LValueReferenceType] ClassWithDestructor & -# 2157| ValueCategory = prvalue -# 2157| getQualifier(): [VariableAccess] (__begin) -# 2157| Type = [NestedStruct] iterator -# 2157| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -# 2157| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2157| Type = [Class] ClassWithDestructor -# 2157| ValueCategory = prvalue(load) -# 2157| getStmt(): [BlockStmt] { ... } -# 2158| getStmt(0): [ExprStmt] ExprStmt -# 2158| getExpr(): [FunctionCall] call to set_x -# 2158| Type = [VoidType] void -# 2158| ValueCategory = prvalue -# 2158| getQualifier(): [VariableAccess] y -# 2158| Type = [Class] ClassWithDestructor -# 2158| ValueCategory = lvalue -# 2158| getArgument(0): [CharLiteral] 97 -# 2158| Type = [PlainCharType] char -# 2158| Value = [CharLiteral] 97 -# 2158| ValueCategory = prvalue -# 2159| getStmt(1): [IfStmt] if (...) ... -# 2159| getCondition(): [EQExpr] ... == ... -# 2159| Type = [BoolType] bool -# 2159| ValueCategory = prvalue -# 2159| getLeftOperand(): [FunctionCall] call to get_x -# 2159| Type = [PlainCharType] char -# 2159| ValueCategory = prvalue -# 2159| getQualifier(): [VariableAccess] y -# 2159| Type = [Class] ClassWithDestructor -# 2159| ValueCategory = lvalue -# 2159| getRightOperand(): [CharLiteral] 98 -# 2159| Type = [PlainCharType] char -# 2159| Value = [CharLiteral] 98 -# 2159| ValueCategory = prvalue -# 2159| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... -# 2159| Conversion = [IntegralConversion] integral conversion -# 2159| Type = [IntType] int -# 2159| ValueCategory = prvalue -# 2159| getRightOperand().getFullyConverted(): [CStyleCast] (int)... -# 2159| Conversion = [IntegralConversion] integral conversion -# 2159| Type = [IntType] int -# 2159| Value = [CStyleCast] 98 -# 2159| ValueCategory = prvalue -# 2160| getThen(): [ReturnStmt] return ... -# 2157| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2157| Type = [VoidType] void -# 2157| ValueCategory = prvalue -# 2157| getQualifier(): [VariableAccess] y -# 2157| Type = [Class] ClassWithDestructor -# 2157| ValueCategory = lvalue -# 2157| getImplicitDestructorCall(1): [DestructorCall] call to ~vector -# 2157| Type = [VoidType] void -# 2157| ValueCategory = prvalue -# 2157| getQualifier(): [VariableAccess] ys -# 2157| Type = [ClassTemplateInstantiation,Struct] vector -# 2157| ValueCategory = lvalue -# 2172| getImplicitDestructorCall(2): [DestructorCall] call to ~ClassWithDestructor -# 2172| Type = [VoidType] void -# 2172| ValueCategory = prvalue -# 2172| getQualifier(): [VariableAccess] x -# 2172| Type = [Class] ClassWithDestructor -# 2172| ValueCategory = lvalue -# 2157| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2157| Type = [VoidType] void -# 2157| ValueCategory = prvalue -# 2157| getQualifier(): [VariableAccess] y -# 2157| Type = [Class] ClassWithDestructor -# 2157| ValueCategory = lvalue -# 2157| getImplicitDestructorCall(0): [DestructorCall] call to ~vector -# 2157| Type = [VoidType] void -# 2157| ValueCategory = prvalue -# 2157| getQualifier(): [VariableAccess] ys -# 2157| Type = [ClassTemplateInstantiation,Struct] vector -# 2157| ValueCategory = lvalue -# 2157| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2157| Type = [NestedStruct] iterator -# 2157| ValueCategory = lvalue -# 2163| getStmt(7): [RangeBasedForStmt] for(...:...) ... -# 2163| getInitialization(): [DeclStmt] declaration -# 2163| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys -# 2163| Type = [ClassTemplateInstantiation,Struct] vector -# 2163| getVariable().getInitializer(): [Initializer] initializer for ys -# 2163| getExpr(): [ConstructorCall] call to vector -# 2163| Type = [VoidType] void -# 2163| ValueCategory = prvalue -# 2163| getArgument(0): [Literal] 1 -# 2163| Type = [IntType] int -# 2163| Value = [Literal] 1 -# 2163| ValueCategory = prvalue -# 2163| getChild(1): [DeclStmt] declaration -# 2163| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) -# 2163| Type = [LValueReferenceType] vector & -#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 2163| getExpr(): [VariableAccess] ys -# 2163| Type = [ClassTemplateInstantiation,Struct] vector -# 2163| ValueCategory = lvalue -# 2163| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2163| Type = [LValueReferenceType] vector & -# 2163| ValueCategory = prvalue -# 2163| getBeginEndDeclaration(): [DeclStmt] declaration -# 2163| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) -# 2163| Type = [NestedStruct] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) -# 2163| getExpr(): [FunctionCall] call to begin -# 2163| Type = [NestedStruct] iterator -# 2163| ValueCategory = prvalue -# 2163| getQualifier(): [VariableAccess] (__range) -# 2163| Type = [LValueReferenceType] vector & -# 2163| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2163| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) -# 2163| Type = [NestedStruct] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) -# 2163| getExpr(): [FunctionCall] call to end -# 2163| Type = [NestedStruct] iterator -# 2163| ValueCategory = prvalue -# 2163| getQualifier(): [VariableAccess] (__range) -# 2163| Type = [LValueReferenceType] vector & -# 2163| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2163| getCondition(): [FunctionCall] call to operator!= -# 2163| Type = [BoolType] bool -# 2163| ValueCategory = prvalue -# 2163| getQualifier(): [VariableAccess] (__begin) -# 2163| Type = [NestedStruct] iterator -# 2163| ValueCategory = lvalue -# 2163| getArgument(0): [VariableAccess] (__end) -# 2163| Type = [NestedStruct] iterator -# 2163| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -# 2163| getUpdate(): [FunctionCall] call to operator++ -# 2163| Type = [LValueReferenceType] iterator & -# 2163| ValueCategory = prvalue -# 2163| getQualifier(): [VariableAccess] (__begin) -# 2163| Type = [NestedStruct] iterator -# 2163| ValueCategory = lvalue -# 2163| getChild(5): [DeclStmt] declaration -# 2163| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 2163| Type = [IntType] int -# 2163| getVariable().getInitializer(): [Initializer] initializer for y -# 2163| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* -# 2163| Type = [LValueReferenceType] int & -# 2163| ValueCategory = prvalue -# 2163| getQualifier(): [VariableAccess] (__begin) -# 2163| Type = [NestedStruct] iterator -# 2163| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -# 2163| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2163| Type = [IntType] int -# 2163| ValueCategory = prvalue(load) -# 2163| getStmt(): [BlockStmt] { ... } -# 2164| getStmt(0): [IfStmt] if (...) ... -# 2164| getCondition(): [EQExpr] ... == ... -# 2164| Type = [BoolType] bool -# 2164| ValueCategory = prvalue -# 2164| getLeftOperand(): [VariableAccess] y -# 2164| Type = [IntType] int -# 2164| ValueCategory = prvalue(load) -# 2164| getRightOperand(): [Literal] 1 -# 2164| Type = [IntType] int -# 2164| Value = [Literal] 1 -# 2164| ValueCategory = prvalue -# 2165| getThen(): [ReturnStmt] return ... -# 2163| getImplicitDestructorCall(0): [DestructorCall] call to ~vector -# 2163| Type = [VoidType] void -# 2163| ValueCategory = prvalue -# 2163| getQualifier(): [VariableAccess] ys -# 2163| Type = [ClassTemplateInstantiation,Struct] vector -# 2163| ValueCategory = lvalue -# 2172| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor -# 2172| Type = [VoidType] void -# 2172| ValueCategory = prvalue -# 2172| getQualifier(): [VariableAccess] x -# 2172| Type = [Class] ClassWithDestructor -# 2172| ValueCategory = lvalue -# 2163| getImplicitDestructorCall(0): [DestructorCall] call to ~vector -# 2163| Type = [VoidType] void -# 2163| ValueCategory = prvalue -# 2163| getQualifier(): [VariableAccess] ys -# 2163| Type = [ClassTemplateInstantiation,Struct] vector -# 2163| ValueCategory = lvalue -# 2163| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2163| Type = [NestedStruct] iterator -# 2163| ValueCategory = lvalue -# 2168| getStmt(8): [RangeBasedForStmt] for(...:...) ... -# 2168| getInitialization(): [DeclStmt] declaration -# 2168| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys -# 2168| Type = [ClassTemplateInstantiation,Struct] vector -# 2168| getVariable().getInitializer(): [Initializer] initializer for ys -# 2168| getExpr(): [ConstructorCall] call to vector -# 2168| Type = [VoidType] void -# 2168| ValueCategory = prvalue -# 2168| getArgument(0): [VariableAccess] x -# 2168| Type = [Class] ClassWithDestructor -# 2168| ValueCategory = prvalue(load) -# 2168| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2168| Type = [Class] ClassWithDestructor -# 2168| ValueCategory = lvalue -# 2168| getChild(1): [DeclStmt] declaration -# 2168| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) -# 2168| Type = [LValueReferenceType] vector & -#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 2168| getExpr(): [VariableAccess] ys -# 2168| Type = [ClassTemplateInstantiation,Struct] vector -# 2168| ValueCategory = lvalue -# 2168| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2168| Type = [LValueReferenceType] vector & -# 2168| ValueCategory = prvalue -# 2168| getBeginEndDeclaration(): [DeclStmt] declaration -# 2168| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) -# 2168| Type = [NestedStruct] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) -# 2168| getExpr(): [FunctionCall] call to begin -# 2168| Type = [NestedStruct] iterator -# 2168| ValueCategory = prvalue -# 2168| getQualifier(): [VariableAccess] (__range) -# 2168| Type = [LValueReferenceType] vector & -# 2168| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2168| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) -# 2168| Type = [NestedStruct] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) -# 2168| getExpr(): [FunctionCall] call to end -# 2168| Type = [NestedStruct] iterator -# 2168| ValueCategory = prvalue -# 2168| getQualifier(): [VariableAccess] (__range) -# 2168| Type = [LValueReferenceType] vector & -# 2168| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2168| getCondition(): [FunctionCall] call to operator!= -# 2168| Type = [BoolType] bool -# 2168| ValueCategory = prvalue -# 2168| getQualifier(): [VariableAccess] (__begin) -# 2168| Type = [NestedStruct] iterator -# 2168| ValueCategory = lvalue -# 2168| getArgument(0): [VariableAccess] (__end) -# 2168| Type = [NestedStruct] iterator -# 2168| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -# 2168| getUpdate(): [FunctionCall] call to operator++ -# 2168| Type = [LValueReferenceType] iterator & -# 2168| ValueCategory = prvalue -# 2168| getQualifier(): [VariableAccess] (__begin) -# 2168| Type = [NestedStruct] iterator -# 2168| ValueCategory = lvalue -# 2168| getChild(5): [DeclStmt] declaration -# 2168| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 2168| Type = [Class] ClassWithDestructor -# 2168| getVariable().getInitializer(): [Initializer] initializer for y -# 2168| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* -# 2168| Type = [LValueReferenceType] ClassWithDestructor & -# 2168| ValueCategory = prvalue -# 2168| getQualifier(): [VariableAccess] (__begin) -# 2168| Type = [NestedStruct] iterator -# 2168| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -# 2168| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2168| Type = [Class] ClassWithDestructor -# 2168| ValueCategory = prvalue(load) -# 2168| getStmt(): [BlockStmt] { ... } -# 2169| getStmt(0): [DeclStmt] declaration -# 2169| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z1 -# 2169| Type = [Class] ClassWithDestructor -# 2169| getVariable().getInitializer(): [Initializer] initializer for z1 -# 2169| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2169| Type = [VoidType] void -# 2169| ValueCategory = prvalue -# 2170| getStmt(1): [DeclStmt] declaration -# 2170| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z2 -# 2170| Type = [Class] ClassWithDestructor -# 2170| getVariable().getInitializer(): [Initializer] initializer for z2 -# 2170| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2170| Type = [VoidType] void -# 2170| ValueCategory = prvalue -# 2171| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2171| Type = [VoidType] void -# 2171| ValueCategory = prvalue -# 2171| getQualifier(): [VariableAccess] z2 -# 2171| Type = [Class] ClassWithDestructor -# 2171| ValueCategory = lvalue -# 2171| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor -# 2171| Type = [VoidType] void -# 2171| ValueCategory = prvalue -# 2171| getQualifier(): [VariableAccess] z1 -# 2171| Type = [Class] ClassWithDestructor -# 2171| ValueCategory = lvalue -# 2168| getImplicitDestructorCall(2): [DestructorCall] call to ~ClassWithDestructor -# 2168| Type = [VoidType] void -# 2168| ValueCategory = prvalue -# 2168| getQualifier(): [VariableAccess] y -# 2168| Type = [Class] ClassWithDestructor -# 2168| ValueCategory = lvalue -# 2168| getImplicitDestructorCall(0): [DestructorCall] call to ~vector -# 2168| Type = [VoidType] void -# 2168| ValueCategory = prvalue -# 2168| getQualifier(): [VariableAccess] ys -# 2168| Type = [ClassTemplateInstantiation,Struct] vector -# 2168| ValueCategory = lvalue -# 2168| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2168| Type = [NestedStruct] iterator -# 2168| ValueCategory = lvalue -# 2172| getStmt(9): [ReturnStmt] return ... -# 2172| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2172| Type = [VoidType] void -# 2172| ValueCategory = prvalue -# 2172| getQualifier(): [VariableAccess] x -# 2172| Type = [Class] ClassWithDestructor +# 2153| getAnElementExpr(1): [Literal] 1 +# 2153| Type = [IntType] int +# 2153| Value = [Literal] 1 +# 2153| ValueCategory = prvalue +# 2153| getAnElementExpr(2): [Literal] 2 +# 2153| Type = [IntType] int +# 2153| Value = [Literal] 2 +# 2153| ValueCategory = prvalue +# 2153| getExtent(): [VariableAccess] n +# 2153| Type = [CTypedefType,Size_t] size_t +# 2153| ValueCategory = prvalue(load) +# 2154| getStmt(6): [ReturnStmt] return ... +# 2156| [TopLevelFunction] double strtod(char const*, char**) +# 2156| : +# 2156| getParameter(0): [Parameter] str +# 2156| Type = [PointerType] const char * +# 2156| getParameter(1): [Parameter] endptr +# 2156| Type = [PointerType] char ** +# 2158| [TopLevelFunction] char* test_strtod(char*) +# 2158| : +# 2158| getParameter(0): [Parameter] s +# 2158| Type = [CharPointerType] char * +# 2158| getEntryPoint(): [BlockStmt] { ... } +# 2159| getStmt(0): [DeclStmt] declaration +# 2159| getDeclarationEntry(0): [VariableDeclarationEntry] definition of end +# 2159| Type = [CharPointerType] char * +# 2160| getStmt(1): [DeclStmt] declaration +# 2160| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d +# 2160| Type = [DoubleType] double +# 2160| getVariable().getInitializer(): [Initializer] initializer for d +# 2160| getExpr(): [FunctionCall] call to strtod +# 2160| Type = [DoubleType] double +# 2160| ValueCategory = prvalue +# 2160| getArgument(0): [VariableAccess] s +# 2160| Type = [CharPointerType] char * +# 2160| ValueCategory = prvalue(load) +# 2160| getArgument(1): [AddressOfExpr] & ... +# 2160| Type = [PointerType] char ** +# 2160| ValueCategory = prvalue +# 2160| getOperand(): [VariableAccess] end +# 2160| Type = [CharPointerType] char * +# 2160| ValueCategory = lvalue +# 2160| getArgument(0).getFullyConverted(): [CStyleCast] (const char *)... +# 2160| Conversion = [PointerConversion] pointer conversion +# 2160| Type = [PointerType] const char * +# 2160| ValueCategory = prvalue +# 2161| getStmt(2): [ReturnStmt] return ... +# 2161| getExpr(): [VariableAccess] end +# 2161| Type = [CharPointerType] char * +# 2161| ValueCategory = prvalue(load) +# 2164| [CopyAssignmentOperator] HasOperatorBool& HasOperatorBool::operator=(HasOperatorBool const&) +# 2164| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const HasOperatorBool & +# 2164| [MoveAssignmentOperator] HasOperatorBool& HasOperatorBool::operator=(HasOperatorBool&&) +# 2164| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] HasOperatorBool && +# 2165| [ConversionOperator] bool HasOperatorBool::operator bool() +# 2165| : +# 2168| [TopLevelFunction] void call_as_child_of_ConditionDeclExpr() +# 2168| : +# 2168| getEntryPoint(): [BlockStmt] { ... } +# 2169| getStmt(0): [IfStmt] if (...) ... +# 2169| getCondition(): [ConditionDeclExpr] (condition decl) +# 2169| Type = [BoolType] bool +# 2169| ValueCategory = prvalue +# 2169| getChild(0): [FunctionCall] call to operator bool +# 2169| Type = [BoolType] bool +# 2169| ValueCategory = prvalue +# 2169| getQualifier(): [VariableAccess] b +# 2169| Type = [Struct] HasOperatorBool +# 2169| ValueCategory = prvalue(load) +# 2169| getThen(): [BlockStmt] { ... } +# 2170| getStmt(1): [ReturnStmt] return ... +# 2172| [CopyAssignmentOperator] ClassWithDestructor& ClassWithDestructor::operator=(ClassWithDestructor const&) +# 2172| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithDestructor & +# 2172| [CopyConstructor] void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) +# 2172| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithDestructor & +# 2172| : +# 2172| getInitializer(0): [ConstructorFieldInit] constructor init of field x +# 2172| Type = [CharPointerType] char * +# 2172| ValueCategory = prvalue +# 2172| getExpr(): [ReferenceFieldAccess] x +# 2172| Type = [CharPointerType] char * +# 2172| ValueCategory = prvalue(load) +# 2172| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 2172| Type = [LValueReferenceType] const ClassWithDestructor & +# 2172| ValueCategory = prvalue(load) +# 2172| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2172| Type = [SpecifiedType] const ClassWithDestructor # 2172| ValueCategory = lvalue -# 2174| [TopLevelFunction] void static_variable_with_destructor_1() -# 2174| : -# 2174| getEntryPoint(): [BlockStmt] { ... } -# 2175| getStmt(0): [DeclStmt] declaration -# 2175| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a -# 2175| Type = [Class] ClassWithDestructor -# 2175| getVariable().getInitializer(): [Initializer] initializer for a -# 2175| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2175| Type = [VoidType] void -# 2175| ValueCategory = prvalue -# 2176| getStmt(1): [DeclStmt] declaration -# 2176| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 2176| Type = [Class] ClassWithDestructor +# 2172| getEntryPoint(): [BlockStmt] { ... } +# 2172| getStmt(0): [ReturnStmt] return ... +# 2175| [Constructor] void ClassWithDestructor::ClassWithDestructor() +# 2175| : +# 2175| : +# 2175| getEntryPoint(): [BlockStmt] { ... } +# 2175| getStmt(0): [ExprStmt] ExprStmt +# 2175| getExpr(): [AssignExpr] ... = ... +# 2175| Type = [CharPointerType] char * +# 2175| ValueCategory = lvalue +# 2175| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 2175| Type = [CharPointerType] char * +# 2175| ValueCategory = lvalue +# 2175| getQualifier(): [ThisExpr] this +# 2175| Type = [PointerType] ClassWithDestructor * +# 2175| ValueCategory = prvalue(load) +# 2175| getRValue(): [NewExpr] new +# 2175| Type = [CharPointerType] char * +# 2175| ValueCategory = prvalue +# 2175| getStmt(1): [ReturnStmt] return ... +# 2176| [Destructor] void ClassWithDestructor::~ClassWithDestructor() +# 2176| : +# 2176| getEntryPoint(): [BlockStmt] { ... } +# 2176| getStmt(0): [ExprStmt] ExprStmt +# 2176| getExpr(): [DeleteExpr] delete +# 2176| Type = [VoidType] void +# 2176| ValueCategory = prvalue +# 2176| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 2176| Type = [CharPointerType] char * +# 2176| ValueCategory = prvalue(load) +# 2176| getQualifier(): [ThisExpr] this +# 2176| Type = [PointerType] ClassWithDestructor * +# 2176| ValueCategory = prvalue(load) +# 2176| getStmt(1): [ReturnStmt] return ... +# 2176| : +# 2178| [MemberFunction] void ClassWithDestructor::set_x(char) +# 2178| : +# 2178| getParameter(0): [Parameter] y +# 2178| Type = [PlainCharType] char +# 2178| getEntryPoint(): [BlockStmt] { ... } +# 2178| getStmt(0): [ExprStmt] ExprStmt +# 2178| getExpr(): [AssignExpr] ... = ... +# 2178| Type = [PlainCharType] char +# 2178| ValueCategory = lvalue +# 2178| getLValue(): [PointerDereferenceExpr] * ... +# 2178| Type = [PlainCharType] char +# 2178| ValueCategory = lvalue +# 2178| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 2178| Type = [CharPointerType] char * +# 2178| ValueCategory = prvalue(load) +# 2178| getQualifier(): [ThisExpr] this +# 2178| Type = [PointerType] ClassWithDestructor * +# 2178| ValueCategory = prvalue(load) +# 2178| getRValue(): [VariableAccess] y +# 2178| Type = [PlainCharType] char +# 2178| ValueCategory = prvalue(load) +# 2178| getStmt(1): [ReturnStmt] return ... +# 2179| [MemberFunction] char ClassWithDestructor::get_x() +# 2179| : +# 2179| getEntryPoint(): [BlockStmt] { ... } +# 2179| getStmt(0): [ReturnStmt] return ... +# 2179| getExpr(): [PointerDereferenceExpr] * ... +# 2179| Type = [PlainCharType] char +# 2179| ValueCategory = prvalue(load) +# 2179| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 2179| Type = [CharPointerType] char * +# 2179| ValueCategory = prvalue(load) +# 2179| getQualifier(): [ThisExpr] this +# 2179| Type = [PointerType] ClassWithDestructor * +# 2179| ValueCategory = prvalue(load) +# 2182| [GlobalVariable] bool initialization_with_destructor_bool +# 2182| getInitializer(): [Initializer] initializer for initialization_with_destructor_bool +# 2182| getExpr(): [Literal] 1 +# 2182| Type = [BoolType] bool +# 2182| Value = [Literal] 1 +# 2182| ValueCategory = prvalue +# 2184| [TopLevelFunction] void initialization_with_destructor(bool, char) +# 2184| : +# 2184| getParameter(0): [Parameter] b +# 2184| Type = [BoolType] bool +# 2184| getParameter(1): [Parameter] c +# 2184| Type = [PlainCharType] char +# 2184| getEntryPoint(): [BlockStmt] { ... } +# 2185| getStmt(0): [IfStmt] if (...) ... +# 2185| getInitialization(): [DeclStmt] declaration +# 2185| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2185| Type = [Class] ClassWithDestructor +# 2185| getVariable().getInitializer(): [Initializer] initializer for x +# 2185| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2185| Type = [VoidType] void +# 2185| ValueCategory = prvalue +# 2185| getCondition(): [VariableAccess] b +# 2185| Type = [BoolType] bool +# 2185| ValueCategory = prvalue(load) +# 2186| getThen(): [ExprStmt] ExprStmt +# 2186| getExpr(): [FunctionCall] call to set_x +# 2186| Type = [VoidType] void +# 2186| ValueCategory = prvalue +# 2186| getQualifier(): [VariableAccess] x +# 2186| Type = [Class] ClassWithDestructor +# 2186| ValueCategory = lvalue +# 2186| getArgument(0): [CharLiteral] 97 +# 2186| Type = [PlainCharType] char +# 2186| Value = [CharLiteral] 97 +# 2186| ValueCategory = prvalue +# 2186| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2186| Type = [VoidType] void +# 2186| ValueCategory = prvalue +# 2186| getQualifier(): [VariableAccess] x +# 2186| Type = [Class] ClassWithDestructor +# 2186| ValueCategory = lvalue +# 2188| getStmt(1): [ConstexprIfStmt] if constexpr (...) ... +# 2188| getInitialization(): [DeclStmt] declaration +# 2188| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2188| Type = [Class] ClassWithDestructor +# 2188| getVariable().getInitializer(): [Initializer] initializer for x +# 2188| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2188| Type = [VoidType] void +# 2188| ValueCategory = prvalue +# 2188| getCondition(): [VariableAccess] initialization_with_destructor_bool +# 2188| Type = [BoolType] bool +# 2188| Value = [VariableAccess] 1 +# 2188| ValueCategory = prvalue(load) +# 2189| getThen(): [ExprStmt] ExprStmt +# 2189| getExpr(): [FunctionCall] call to set_x +# 2189| Type = [VoidType] void +# 2189| ValueCategory = prvalue +# 2189| getQualifier(): [VariableAccess] x +# 2189| Type = [Class] ClassWithDestructor +# 2189| ValueCategory = lvalue +# 2189| getArgument(0): [CharLiteral] 97 +# 2189| Type = [PlainCharType] char +# 2189| Value = [CharLiteral] 97 +# 2189| ValueCategory = prvalue +# 2189| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2189| Type = [VoidType] void +# 2189| ValueCategory = prvalue +# 2189| getQualifier(): [VariableAccess] x +# 2189| Type = [Class] ClassWithDestructor +# 2189| ValueCategory = lvalue +# 2191| getStmt(2): [SwitchStmt] switch (...) ... +# 2191| getInitialization(): [DeclStmt] declaration +# 2191| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2191| Type = [Class] ClassWithDestructor +# 2191| getVariable().getInitializer(): [Initializer] initializer for x +# 2191| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2191| Type = [VoidType] void +# 2191| ValueCategory = prvalue +# 2191| getExpr(): [VariableAccess] c +# 2191| Type = [PlainCharType] char +# 2191| ValueCategory = prvalue(load) +# 2191| getStmt(): [BlockStmt] { ... } +# 2192| getStmt(0): [SwitchCase] case ...: +# 2192| getExpr(): [CharLiteral] 97 +# 2192| Type = [PlainCharType] char +# 2192| Value = [CharLiteral] 97 +# 2192| ValueCategory = prvalue +# 2192| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2192| Conversion = [IntegralConversion] integral conversion +# 2192| Type = [IntType] int +# 2192| Value = [CStyleCast] 97 +# 2192| ValueCategory = prvalue +# 2193| getStmt(1): [ExprStmt] ExprStmt +# 2193| getExpr(): [FunctionCall] call to set_x +# 2193| Type = [VoidType] void +# 2193| ValueCategory = prvalue +# 2193| getQualifier(): [VariableAccess] x +# 2193| Type = [Class] ClassWithDestructor +# 2193| ValueCategory = lvalue +# 2193| getArgument(0): [CharLiteral] 97 +# 2193| Type = [PlainCharType] char +# 2193| Value = [CharLiteral] 97 +# 2193| ValueCategory = prvalue +# 2194| getStmt(2): [BreakStmt] break; +# 2195| getStmt(3): [SwitchCase] default: +# 2196| getStmt(4): [ExprStmt] ExprStmt +# 2196| getExpr(): [FunctionCall] call to set_x +# 2196| Type = [VoidType] void +# 2196| ValueCategory = prvalue +# 2196| getQualifier(): [VariableAccess] x +# 2196| Type = [Class] ClassWithDestructor +# 2196| ValueCategory = lvalue +# 2196| getArgument(0): [CharLiteral] 98 +# 2196| Type = [PlainCharType] char +# 2196| Value = [CharLiteral] 98 +# 2196| ValueCategory = prvalue +# 2197| getStmt(5): [BreakStmt] break; +# 2198| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2198| Type = [VoidType] void +# 2198| ValueCategory = prvalue +# 2198| getQualifier(): [VariableAccess] x +# 2198| Type = [Class] ClassWithDestructor +# 2198| ValueCategory = lvalue +# 2191| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2191| Conversion = [IntegralConversion] integral conversion +# 2191| Type = [IntType] int +# 2191| ValueCategory = prvalue +# 2198| getStmt(3): [LabelStmt] label ...: +# 2200| getStmt(4): [DeclStmt] declaration +# 2200| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2200| Type = [Class] ClassWithDestructor +# 2200| getVariable().getInitializer(): [Initializer] initializer for x +# 2200| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2200| Type = [VoidType] void +# 2200| ValueCategory = prvalue +# 2201| getStmt(5): [RangeBasedForStmt] for(...:...) ... +# 2201| getInitialization(): [DeclStmt] declaration +# 2201| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys +# 2201| Type = [ClassTemplateInstantiation,Struct] vector +# 2201| getVariable().getInitializer(): [Initializer] initializer for ys +# 2201| getExpr(): [ConstructorCall] call to vector +# 2201| Type = [VoidType] void +# 2201| ValueCategory = prvalue +# 2201| getArgument(0): [VariableAccess] x +# 2201| Type = [Class] ClassWithDestructor +# 2201| ValueCategory = prvalue(load) +# 2201| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2201| Type = [Class] ClassWithDestructor +# 2201| ValueCategory = lvalue +# 2201| getChild(1): [DeclStmt] declaration +# 2201| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 2201| Type = [LValueReferenceType] vector & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2201| getExpr(): [VariableAccess] ys +# 2201| Type = [ClassTemplateInstantiation,Struct] vector +# 2201| ValueCategory = lvalue +# 2201| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2201| Type = [LValueReferenceType] vector & +# 2201| ValueCategory = prvalue +# 2201| getBeginEndDeclaration(): [DeclStmt] declaration +# 2201| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 2201| getExpr(): [FunctionCall] call to begin +# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2201| ValueCategory = prvalue +# 2201| getQualifier(): [VariableAccess] (__range) +# 2201| Type = [LValueReferenceType] vector & +# 2201| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2201| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 2201| getExpr(): [FunctionCall] call to end +# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2201| ValueCategory = prvalue +# 2201| getQualifier(): [VariableAccess] (__range) +# 2201| Type = [LValueReferenceType] vector & +# 2201| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2201| getCondition(): [FunctionCall] call to operator!= +# 2201| Type = [BoolType] bool +# 2201| ValueCategory = prvalue +# 2201| getQualifier(): [VariableAccess] (__begin) +# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2201| ValueCategory = lvalue +# 2201| getArgument(0): [ConstructorCall] call to iterator +# 2201| Type = [VoidType] void +# 2201| ValueCategory = prvalue +# 2201| getArgument(0): [VariableAccess] (__end) +# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2201| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +#-----| Type = [LValueReferenceType] const iterator & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator +#-----| ValueCategory = lvalue +# 2201| getUpdate(): [FunctionCall] call to operator++ +# 2201| Type = [LValueReferenceType] iterator & +# 2201| ValueCategory = prvalue +# 2201| getQualifier(): [VariableAccess] (__begin) +# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2201| ValueCategory = lvalue +# 2201| getChild(5): [DeclStmt] declaration +# 2201| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2201| Type = [Class] ClassWithDestructor +# 2201| getVariable().getInitializer(): [Initializer] initializer for y +# 2201| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 2201| Type = [LValueReferenceType] ClassWithDestructor & +# 2201| ValueCategory = prvalue +# 2201| getQualifier(): [VariableAccess] (__begin) +# 2201| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2201| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2201| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2201| Type = [Class] ClassWithDestructor +# 2201| ValueCategory = prvalue(load) +# 2202| getStmt(): [ExprStmt] ExprStmt +# 2202| getExpr(): [FunctionCall] call to set_x +# 2202| Type = [VoidType] void +# 2202| ValueCategory = prvalue +# 2202| getQualifier(): [VariableAccess] y +# 2202| Type = [Class] ClassWithDestructor +# 2202| ValueCategory = lvalue +# 2202| getArgument(0): [CharLiteral] 97 +# 2202| Type = [PlainCharType] char +# 2202| Value = [CharLiteral] 97 +# 2202| ValueCategory = prvalue +# 2201| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2201| Type = [VoidType] void +# 2201| ValueCategory = prvalue +# 2201| getQualifier(): [VariableAccess] y +# 2201| Type = [Class] ClassWithDestructor +# 2201| ValueCategory = lvalue +# 2201| getImplicitDestructorCall(0): [DestructorCall] call to ~vector +# 2201| Type = [VoidType] void +# 2201| ValueCategory = prvalue +# 2201| getQualifier(): [VariableAccess] ys +# 2201| Type = [ClassTemplateInstantiation,Struct] vector +# 2201| ValueCategory = lvalue +# 2201| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2201| Type = [ClassTemplateInstantiation,Struct] iterator +# 2201| ValueCategory = lvalue +# 2204| getStmt(6): [RangeBasedForStmt] for(...:...) ... +# 2204| getInitialization(): [DeclStmt] declaration +# 2204| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys +# 2204| Type = [ClassTemplateInstantiation,Struct] vector +# 2204| getVariable().getInitializer(): [Initializer] initializer for ys +# 2204| getExpr(): [ConstructorCall] call to vector +# 2204| Type = [VoidType] void +# 2204| ValueCategory = prvalue +# 2204| getArgument(0): [VariableAccess] x +# 2204| Type = [Class] ClassWithDestructor +# 2204| ValueCategory = prvalue(load) +# 2204| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2204| Type = [Class] ClassWithDestructor +# 2204| ValueCategory = lvalue +# 2204| getChild(1): [DeclStmt] declaration +# 2204| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 2204| Type = [LValueReferenceType] vector & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2204| getExpr(): [VariableAccess] ys +# 2204| Type = [ClassTemplateInstantiation,Struct] vector +# 2204| ValueCategory = lvalue +# 2204| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2204| Type = [LValueReferenceType] vector & +# 2204| ValueCategory = prvalue +# 2204| getBeginEndDeclaration(): [DeclStmt] declaration +# 2204| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 2204| getExpr(): [FunctionCall] call to begin +# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2204| ValueCategory = prvalue +# 2204| getQualifier(): [VariableAccess] (__range) +# 2204| Type = [LValueReferenceType] vector & +# 2204| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2204| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 2204| getExpr(): [FunctionCall] call to end +# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2204| ValueCategory = prvalue +# 2204| getQualifier(): [VariableAccess] (__range) +# 2204| Type = [LValueReferenceType] vector & +# 2204| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2204| getCondition(): [FunctionCall] call to operator!= +# 2204| Type = [BoolType] bool +# 2204| ValueCategory = prvalue +# 2204| getQualifier(): [VariableAccess] (__begin) +# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2204| ValueCategory = lvalue +# 2204| getArgument(0): [ConstructorCall] call to iterator +# 2204| Type = [VoidType] void +# 2204| ValueCategory = prvalue +# 2204| getArgument(0): [VariableAccess] (__end) +# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2204| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +#-----| Type = [LValueReferenceType] const iterator & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator +#-----| ValueCategory = lvalue +# 2204| getUpdate(): [FunctionCall] call to operator++ +# 2204| Type = [LValueReferenceType] iterator & +# 2204| ValueCategory = prvalue +# 2204| getQualifier(): [VariableAccess] (__begin) +# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2204| ValueCategory = lvalue +# 2204| getChild(5): [DeclStmt] declaration +# 2204| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2204| Type = [Class] ClassWithDestructor +# 2204| getVariable().getInitializer(): [Initializer] initializer for y +# 2204| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 2204| Type = [LValueReferenceType] ClassWithDestructor & +# 2204| ValueCategory = prvalue +# 2204| getQualifier(): [VariableAccess] (__begin) +# 2204| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2204| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2204| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2204| Type = [Class] ClassWithDestructor +# 2204| ValueCategory = prvalue(load) +# 2204| getStmt(): [BlockStmt] { ... } +# 2205| getStmt(0): [ExprStmt] ExprStmt +# 2205| getExpr(): [FunctionCall] call to set_x +# 2205| Type = [VoidType] void +# 2205| ValueCategory = prvalue +# 2205| getQualifier(): [VariableAccess] y +# 2205| Type = [Class] ClassWithDestructor +# 2205| ValueCategory = lvalue +# 2205| getArgument(0): [CharLiteral] 97 +# 2205| Type = [PlainCharType] char +# 2205| Value = [CharLiteral] 97 +# 2205| ValueCategory = prvalue +# 2206| getStmt(1): [IfStmt] if (...) ... +# 2206| getCondition(): [EQExpr] ... == ... +# 2206| Type = [BoolType] bool +# 2206| ValueCategory = prvalue +# 2206| getLeftOperand(): [FunctionCall] call to get_x +# 2206| Type = [PlainCharType] char +# 2206| ValueCategory = prvalue +# 2206| getQualifier(): [VariableAccess] y +# 2206| Type = [Class] ClassWithDestructor +# 2206| ValueCategory = lvalue +# 2206| getRightOperand(): [CharLiteral] 98 +# 2206| Type = [PlainCharType] char +# 2206| Value = [CharLiteral] 98 +# 2206| ValueCategory = prvalue +# 2206| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... +# 2206| Conversion = [IntegralConversion] integral conversion +# 2206| Type = [IntType] int +# 2206| ValueCategory = prvalue +# 2206| getRightOperand().getFullyConverted(): [CStyleCast] (int)... +# 2206| Conversion = [IntegralConversion] integral conversion +# 2206| Type = [IntType] int +# 2206| Value = [CStyleCast] 98 +# 2206| ValueCategory = prvalue +# 2207| getThen(): [ReturnStmt] return ... +# 2204| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2204| Type = [VoidType] void +# 2204| ValueCategory = prvalue +# 2204| getQualifier(): [VariableAccess] y +# 2204| Type = [Class] ClassWithDestructor +# 2204| ValueCategory = lvalue +# 2204| getImplicitDestructorCall(1): [DestructorCall] call to ~vector +# 2204| Type = [VoidType] void +# 2204| ValueCategory = prvalue +# 2204| getQualifier(): [VariableAccess] ys +# 2204| Type = [ClassTemplateInstantiation,Struct] vector +# 2204| ValueCategory = lvalue +# 2219| getImplicitDestructorCall(2): [DestructorCall] call to ~ClassWithDestructor +# 2219| Type = [VoidType] void +# 2219| ValueCategory = prvalue +# 2219| getQualifier(): [VariableAccess] x +# 2219| Type = [Class] ClassWithDestructor +# 2219| ValueCategory = lvalue +# 2204| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2204| Type = [VoidType] void +# 2204| ValueCategory = prvalue +# 2204| getQualifier(): [VariableAccess] y +# 2204| Type = [Class] ClassWithDestructor +# 2204| ValueCategory = lvalue +# 2204| getImplicitDestructorCall(0): [DestructorCall] call to ~vector +# 2204| Type = [VoidType] void +# 2204| ValueCategory = prvalue +# 2204| getQualifier(): [VariableAccess] ys +# 2204| Type = [ClassTemplateInstantiation,Struct] vector +# 2204| ValueCategory = lvalue +# 2204| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2204| Type = [ClassTemplateInstantiation,Struct] iterator +# 2204| ValueCategory = lvalue +# 2210| getStmt(7): [RangeBasedForStmt] for(...:...) ... +# 2210| getInitialization(): [DeclStmt] declaration +# 2210| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys +# 2210| Type = [ClassTemplateInstantiation,Struct] vector +# 2210| getVariable().getInitializer(): [Initializer] initializer for ys +# 2210| getExpr(): [ConstructorCall] call to vector +# 2210| Type = [VoidType] void +# 2210| ValueCategory = prvalue +# 2210| getArgument(0): [Literal] 1 +# 2210| Type = [IntType] int +# 2210| Value = [Literal] 1 +# 2210| ValueCategory = prvalue +# 2210| getChild(1): [DeclStmt] declaration +# 2210| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 2210| Type = [LValueReferenceType] vector & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2210| getExpr(): [VariableAccess] ys +# 2210| Type = [ClassTemplateInstantiation,Struct] vector +# 2210| ValueCategory = lvalue +# 2210| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2210| Type = [LValueReferenceType] vector & +# 2210| ValueCategory = prvalue +# 2210| getBeginEndDeclaration(): [DeclStmt] declaration +# 2210| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 2210| getExpr(): [FunctionCall] call to begin +# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2210| ValueCategory = prvalue +# 2210| getQualifier(): [VariableAccess] (__range) +# 2210| Type = [LValueReferenceType] vector & +# 2210| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2210| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 2210| getExpr(): [FunctionCall] call to end +# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2210| ValueCategory = prvalue +# 2210| getQualifier(): [VariableAccess] (__range) +# 2210| Type = [LValueReferenceType] vector & +# 2210| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2210| getCondition(): [FunctionCall] call to operator!= +# 2210| Type = [BoolType] bool +# 2210| ValueCategory = prvalue +# 2210| getQualifier(): [VariableAccess] (__begin) +# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2210| ValueCategory = lvalue +# 2210| getArgument(0): [ConstructorCall] call to iterator +# 2210| Type = [VoidType] void +# 2210| ValueCategory = prvalue +# 2210| getArgument(0): [VariableAccess] (__end) +# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2210| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +#-----| Type = [LValueReferenceType] const iterator & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator +#-----| ValueCategory = lvalue +# 2210| getUpdate(): [FunctionCall] call to operator++ +# 2210| Type = [LValueReferenceType] iterator & +# 2210| ValueCategory = prvalue +# 2210| getQualifier(): [VariableAccess] (__begin) +# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2210| ValueCategory = lvalue +# 2210| getChild(5): [DeclStmt] declaration +# 2210| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2210| Type = [IntType] int +# 2210| getVariable().getInitializer(): [Initializer] initializer for y +# 2210| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 2210| Type = [LValueReferenceType] int & +# 2210| ValueCategory = prvalue +# 2210| getQualifier(): [VariableAccess] (__begin) +# 2210| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2210| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2210| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2210| Type = [IntType] int +# 2210| ValueCategory = prvalue(load) +# 2210| getStmt(): [BlockStmt] { ... } +# 2211| getStmt(0): [IfStmt] if (...) ... +# 2211| getCondition(): [EQExpr] ... == ... +# 2211| Type = [BoolType] bool +# 2211| ValueCategory = prvalue +# 2211| getLeftOperand(): [VariableAccess] y +# 2211| Type = [IntType] int +# 2211| ValueCategory = prvalue(load) +# 2211| getRightOperand(): [Literal] 1 +# 2211| Type = [IntType] int +# 2211| Value = [Literal] 1 +# 2211| ValueCategory = prvalue +# 2212| getThen(): [ReturnStmt] return ... +# 2210| getImplicitDestructorCall(0): [DestructorCall] call to ~vector +# 2210| Type = [VoidType] void +# 2210| ValueCategory = prvalue +# 2210| getQualifier(): [VariableAccess] ys +# 2210| Type = [ClassTemplateInstantiation,Struct] vector +# 2210| ValueCategory = lvalue +# 2219| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor +# 2219| Type = [VoidType] void +# 2219| ValueCategory = prvalue +# 2219| getQualifier(): [VariableAccess] x +# 2219| Type = [Class] ClassWithDestructor +# 2219| ValueCategory = lvalue +# 2210| getImplicitDestructorCall(0): [DestructorCall] call to ~vector +# 2210| Type = [VoidType] void +# 2210| ValueCategory = prvalue +# 2210| getQualifier(): [VariableAccess] ys +# 2210| Type = [ClassTemplateInstantiation,Struct] vector +# 2210| ValueCategory = lvalue +# 2210| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2210| Type = [ClassTemplateInstantiation,Struct] iterator +# 2210| ValueCategory = lvalue +# 2215| getStmt(8): [RangeBasedForStmt] for(...:...) ... +# 2215| getInitialization(): [DeclStmt] declaration +# 2215| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys +# 2215| Type = [ClassTemplateInstantiation,Struct] vector +# 2215| getVariable().getInitializer(): [Initializer] initializer for ys +# 2215| getExpr(): [ConstructorCall] call to vector +# 2215| Type = [VoidType] void +# 2215| ValueCategory = prvalue +# 2215| getArgument(0): [VariableAccess] x +# 2215| Type = [Class] ClassWithDestructor +# 2215| ValueCategory = prvalue(load) +# 2215| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2215| Type = [Class] ClassWithDestructor +# 2215| ValueCategory = lvalue +# 2215| getChild(1): [DeclStmt] declaration +# 2215| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 2215| Type = [LValueReferenceType] vector & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2215| getExpr(): [VariableAccess] ys +# 2215| Type = [ClassTemplateInstantiation,Struct] vector +# 2215| ValueCategory = lvalue +# 2215| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2215| Type = [LValueReferenceType] vector & +# 2215| ValueCategory = prvalue +# 2215| getBeginEndDeclaration(): [DeclStmt] declaration +# 2215| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 2215| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 2215| getExpr(): [FunctionCall] call to begin +# 2215| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2215| ValueCategory = prvalue +# 2215| getQualifier(): [VariableAccess] (__range) +# 2215| Type = [LValueReferenceType] vector & +# 2215| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2215| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 2215| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 2215| getExpr(): [FunctionCall] call to end +# 2215| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2215| ValueCategory = prvalue +# 2215| getQualifier(): [VariableAccess] (__range) +# 2215| Type = [LValueReferenceType] vector & +# 2215| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2215| getCondition(): [FunctionCall] call to operator!= +# 2215| Type = [BoolType] bool +# 2215| ValueCategory = prvalue +# 2215| getQualifier(): [VariableAccess] (__begin) +# 2215| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2215| ValueCategory = lvalue +# 2215| getArgument(0): [ConstructorCall] call to iterator +# 2215| Type = [VoidType] void +# 2215| ValueCategory = prvalue +# 2215| getArgument(0): [VariableAccess] (__end) +# 2215| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2215| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +#-----| Type = [LValueReferenceType] const iterator & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator +#-----| ValueCategory = lvalue +# 2215| getUpdate(): [FunctionCall] call to operator++ +# 2215| Type = [LValueReferenceType] iterator & +# 2215| ValueCategory = prvalue +# 2215| getQualifier(): [VariableAccess] (__begin) +# 2215| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2215| ValueCategory = lvalue +# 2215| getChild(5): [DeclStmt] declaration +# 2215| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2215| Type = [Class] ClassWithDestructor +# 2215| getVariable().getInitializer(): [Initializer] initializer for y +# 2215| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 2215| Type = [LValueReferenceType] ClassWithDestructor & +# 2215| ValueCategory = prvalue +# 2215| getQualifier(): [VariableAccess] (__begin) +# 2215| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2215| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2215| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2215| Type = [Class] ClassWithDestructor +# 2215| ValueCategory = prvalue(load) +# 2215| getStmt(): [BlockStmt] { ... } +# 2216| getStmt(0): [DeclStmt] declaration +# 2216| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z1 +# 2216| Type = [Class] ClassWithDestructor +# 2216| getVariable().getInitializer(): [Initializer] initializer for z1 +# 2216| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2216| Type = [VoidType] void +# 2216| ValueCategory = prvalue +# 2217| getStmt(1): [DeclStmt] declaration +# 2217| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z2 +# 2217| Type = [Class] ClassWithDestructor +# 2217| getVariable().getInitializer(): [Initializer] initializer for z2 +# 2217| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2217| Type = [VoidType] void +# 2217| ValueCategory = prvalue +# 2218| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2218| Type = [VoidType] void +# 2218| ValueCategory = prvalue +# 2218| getQualifier(): [VariableAccess] z2 +# 2218| Type = [Class] ClassWithDestructor +# 2218| ValueCategory = lvalue +# 2218| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor +# 2218| Type = [VoidType] void +# 2218| ValueCategory = prvalue +# 2218| getQualifier(): [VariableAccess] z1 +# 2218| Type = [Class] ClassWithDestructor +# 2218| ValueCategory = lvalue +# 2215| getImplicitDestructorCall(2): [DestructorCall] call to ~ClassWithDestructor +# 2215| Type = [VoidType] void +# 2215| ValueCategory = prvalue +# 2215| getQualifier(): [VariableAccess] y +# 2215| Type = [Class] ClassWithDestructor +# 2215| ValueCategory = lvalue +# 2215| getImplicitDestructorCall(0): [DestructorCall] call to ~vector +# 2215| Type = [VoidType] void +# 2215| ValueCategory = prvalue +# 2215| getQualifier(): [VariableAccess] ys +# 2215| Type = [ClassTemplateInstantiation,Struct] vector +# 2215| ValueCategory = lvalue +# 2215| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2215| Type = [ClassTemplateInstantiation,Struct] iterator +# 2215| ValueCategory = lvalue +# 2219| getStmt(9): [ReturnStmt] return ... +# 2219| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2219| Type = [VoidType] void +# 2219| ValueCategory = prvalue +# 2219| getQualifier(): [VariableAccess] x +# 2219| Type = [Class] ClassWithDestructor +# 2219| ValueCategory = lvalue +# 2221| [TopLevelFunction] void static_variable_with_destructor_1() +# 2221| : +# 2221| getEntryPoint(): [BlockStmt] { ... } +# 2222| getStmt(0): [DeclStmt] declaration +# 2222| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a +# 2222| Type = [Class] ClassWithDestructor +# 2222| getVariable().getInitializer(): [Initializer] initializer for a +# 2222| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2222| Type = [VoidType] void +# 2222| ValueCategory = prvalue +# 2223| getStmt(1): [DeclStmt] declaration +# 2223| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 2223| Type = [Class] ClassWithDestructor #-----| getVariable().getInitializer(): [Initializer] initializer for b #-----| getExpr(): [ConstructorCall] call to ClassWithDestructor #-----| Type = [VoidType] void #-----| ValueCategory = prvalue -# 2177| getStmt(2): [ReturnStmt] return ... -# 2177| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2177| Type = [VoidType] void -# 2177| ValueCategory = prvalue -# 2177| getQualifier(): [VariableAccess] a -# 2177| Type = [Class] ClassWithDestructor -# 2177| ValueCategory = lvalue -# 2179| [TopLevelFunction] void static_variable_with_destructor_2() -# 2179| : -# 2179| getEntryPoint(): [BlockStmt] { ... } -# 2180| getStmt(0): [DeclStmt] declaration -# 2180| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a -# 2180| Type = [Class] ClassWithDestructor +# 2224| getStmt(2): [ReturnStmt] return ... +# 2224| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2224| Type = [VoidType] void +# 2224| ValueCategory = prvalue +# 2224| getQualifier(): [VariableAccess] a +# 2224| Type = [Class] ClassWithDestructor +# 2224| ValueCategory = lvalue +# 2226| [TopLevelFunction] void static_variable_with_destructor_2() +# 2226| : +# 2226| getEntryPoint(): [BlockStmt] { ... } +# 2227| getStmt(0): [DeclStmt] declaration +# 2227| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a +# 2227| Type = [Class] ClassWithDestructor #-----| getVariable().getInitializer(): [Initializer] initializer for a #-----| getExpr(): [ConstructorCall] call to ClassWithDestructor #-----| Type = [VoidType] void #-----| ValueCategory = prvalue -# 2181| getStmt(1): [DeclStmt] declaration -# 2181| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 2181| Type = [Class] ClassWithDestructor -# 2181| getVariable().getInitializer(): [Initializer] initializer for b -# 2181| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2181| Type = [VoidType] void -# 2181| ValueCategory = prvalue -# 2182| getStmt(2): [ReturnStmt] return ... -# 2182| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2182| Type = [VoidType] void -# 2182| ValueCategory = prvalue -# 2182| getQualifier(): [VariableAccess] b -# 2182| Type = [Class] ClassWithDestructor -# 2182| ValueCategory = lvalue -# 2184| [TopLevelFunction] void static_variable_with_destructor_3() -# 2184| : -# 2184| getEntryPoint(): [BlockStmt] { ... } -# 2185| getStmt(0): [DeclStmt] declaration -# 2185| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a -# 2185| Type = [Class] ClassWithDestructor -# 2185| getVariable().getInitializer(): [Initializer] initializer for a -# 2185| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2185| Type = [VoidType] void -# 2185| ValueCategory = prvalue -# 2186| getStmt(1): [DeclStmt] declaration -# 2186| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 2186| Type = [Class] ClassWithDestructor -# 2186| getVariable().getInitializer(): [Initializer] initializer for b -# 2186| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2186| Type = [VoidType] void -# 2186| ValueCategory = prvalue -# 2187| getStmt(2): [DeclStmt] declaration -# 2187| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 2187| Type = [Class] ClassWithDestructor +# 2228| getStmt(1): [DeclStmt] declaration +# 2228| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 2228| Type = [Class] ClassWithDestructor +# 2228| getVariable().getInitializer(): [Initializer] initializer for b +# 2228| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2228| Type = [VoidType] void +# 2228| ValueCategory = prvalue +# 2229| getStmt(2): [ReturnStmt] return ... +# 2229| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2229| Type = [VoidType] void +# 2229| ValueCategory = prvalue +# 2229| getQualifier(): [VariableAccess] b +# 2229| Type = [Class] ClassWithDestructor +# 2229| ValueCategory = lvalue +# 2231| [TopLevelFunction] void static_variable_with_destructor_3() +# 2231| : +# 2231| getEntryPoint(): [BlockStmt] { ... } +# 2232| getStmt(0): [DeclStmt] declaration +# 2232| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a +# 2232| Type = [Class] ClassWithDestructor +# 2232| getVariable().getInitializer(): [Initializer] initializer for a +# 2232| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2232| Type = [VoidType] void +# 2232| ValueCategory = prvalue +# 2233| getStmt(1): [DeclStmt] declaration +# 2233| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 2233| Type = [Class] ClassWithDestructor +# 2233| getVariable().getInitializer(): [Initializer] initializer for b +# 2233| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2233| Type = [VoidType] void +# 2233| ValueCategory = prvalue +# 2234| getStmt(2): [DeclStmt] declaration +# 2234| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 2234| Type = [Class] ClassWithDestructor #-----| getVariable().getInitializer(): [Initializer] initializer for c #-----| getExpr(): [ConstructorCall] call to ClassWithDestructor #-----| Type = [VoidType] void #-----| ValueCategory = prvalue -# 2188| getStmt(3): [ReturnStmt] return ... -# 2188| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2188| Type = [VoidType] void -# 2188| ValueCategory = prvalue -# 2188| getQualifier(): [VariableAccess] b -# 2188| Type = [Class] ClassWithDestructor -# 2188| ValueCategory = lvalue -# 2188| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor -# 2188| Type = [VoidType] void -# 2188| ValueCategory = prvalue -# 2188| getQualifier(): [VariableAccess] a -# 2188| Type = [Class] ClassWithDestructor -# 2188| ValueCategory = lvalue -# 2190| [GlobalVariable] ClassWithDestructor global_class_with_destructor -# 2190| getInitializer(): [Initializer] initializer for global_class_with_destructor -# 2190| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2190| Type = [VoidType] void -# 2190| ValueCategory = prvalue -# 2194| [FunctionTemplateInstantiation,TopLevelFunction] ClassWithDestructor& vacuous_destructor_call::get(ClassWithDestructor&) -# 2194| : -# 2194| getParameter(0): [Parameter] t -# 2194| Type = [LValueReferenceType] ClassWithDestructor & -# 2194| getEntryPoint(): [BlockStmt] { ... } -# 2194| getStmt(0): [ReturnStmt] return ... -# 2194| getExpr(): [VariableAccess] t -# 2194| Type = [LValueReferenceType] ClassWithDestructor & -# 2194| ValueCategory = prvalue(load) -# 2194| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2194| Type = [LValueReferenceType] ClassWithDestructor & -# 2194| ValueCategory = prvalue -# 2194| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 2194| Type = [Class] ClassWithDestructor -# 2194| ValueCategory = lvalue -# 2194| [TemplateFunction,TopLevelFunction] T& vacuous_destructor_call::get(T&) -# 2194| : -# 2194| getParameter(0): [Parameter] t -# 2194| Type = [LValueReferenceType] T & -# 2194| getEntryPoint(): [BlockStmt] { ... } -# 2194| getStmt(0): [ReturnStmt] return ... -# 2194| getExpr(): [VariableAccess] t -# 2194| Type = [LValueReferenceType] T & -# 2194| ValueCategory = prvalue(load) -# 2194| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2194| Type = [TemplateParameter] T -# 2194| ValueCategory = lvalue -# 2194| [FunctionTemplateInstantiation,TopLevelFunction] int& vacuous_destructor_call::get(int&) -# 2194| : -# 2194| getParameter(0): [Parameter] t -# 2194| Type = [LValueReferenceType] int & -# 2194| getEntryPoint(): [BlockStmt] { ... } -# 2194| getStmt(0): [ReturnStmt] return ... -# 2194| getExpr(): [VariableAccess] t -# 2194| Type = [LValueReferenceType] int & -# 2194| ValueCategory = prvalue(load) -# 2194| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2194| Type = [LValueReferenceType] int & -# 2194| ValueCategory = prvalue -# 2194| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 2194| Type = [IntType] int -# 2194| ValueCategory = lvalue -# 2197| [FunctionTemplateInstantiation,TopLevelFunction] void vacuous_destructor_call::call_destructor(ClassWithDestructor&) -# 2197| : -# 2197| getParameter(0): [Parameter] t -# 2197| Type = [LValueReferenceType] ClassWithDestructor & -# 2197| getEntryPoint(): [BlockStmt] { ... } -# 2198| getStmt(0): [ExprStmt] ExprStmt -# 2198| getExpr(): [DestructorCall] call to ~ClassWithDestructor -# 2198| Type = [VoidType] void -# 2198| ValueCategory = prvalue -# 2198| getQualifier(): [FunctionCall] call to get -# 2198| Type = [LValueReferenceType] ClassWithDestructor & -# 2198| ValueCategory = prvalue -# 2198| getArgument(0): [VariableAccess] t -# 2198| Type = [LValueReferenceType] ClassWithDestructor & -# 2198| ValueCategory = prvalue(load) -# 2198| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2198| Type = [LValueReferenceType] ClassWithDestructor & -# 2198| ValueCategory = prvalue -# 2198| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 2198| Type = [Class] ClassWithDestructor -# 2198| ValueCategory = lvalue -# 2198| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2198| Type = [Class] ClassWithDestructor -# 2198| ValueCategory = lvalue -# 2199| getStmt(1): [ReturnStmt] return ... -# 2197| [TemplateFunction,TopLevelFunction] void vacuous_destructor_call::call_destructor(T&) -# 2197| : -# 2197| getParameter(0): [Parameter] t -# 2197| Type = [LValueReferenceType] T & -# 2197| getEntryPoint(): [BlockStmt] { ... } -# 2198| getStmt(0): [ExprStmt] ExprStmt -# 2198| getExpr(): [ExprCall] call to expression -# 2198| Type = [UnknownType] unknown -# 2198| ValueCategory = prvalue -# 2198| getExpr(): [Literal] Unknown literal -# 2198| Type = [UnknownType] unknown -# 2198| ValueCategory = prvalue -# 2198| getChild(-1): [ExprCall] call to expression -# 2198| Type = [UnknownType] unknown -# 2198| ValueCategory = prvalue -# 2198| getExpr(): [Literal] Unknown literal -# 2198| Type = [UnknownType] unknown -# 2198| ValueCategory = prvalue -# 2198| getArgument(0): [VariableAccess] t -# 2198| Type = [LValueReferenceType] T & -# 2198| ValueCategory = prvalue(load) -# 2198| getArgument(0).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2198| Type = [TemplateParameter] T -# 2198| ValueCategory = lvalue -# 2199| getStmt(1): [ReturnStmt] return ... -# 2197| [FunctionTemplateInstantiation,TopLevelFunction] void vacuous_destructor_call::call_destructor(int&) -# 2197| : -# 2197| getParameter(0): [Parameter] t -# 2197| Type = [LValueReferenceType] int & -# 2197| getEntryPoint(): [BlockStmt] { ... } -# 2198| getStmt(0): [ExprStmt] ExprStmt -# 2198| getExpr(): [VacuousDestructorCall] (vacuous destructor call) -# 2198| Type = [VoidType] void -# 2198| ValueCategory = prvalue -# 2198| getChild(0): [FunctionCall] call to get -# 2198| Type = [LValueReferenceType] int & -# 2198| ValueCategory = prvalue -# 2198| getArgument(0): [VariableAccess] t -# 2198| Type = [LValueReferenceType] int & -# 2198| ValueCategory = prvalue(load) -# 2198| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2198| Type = [LValueReferenceType] int & -# 2198| ValueCategory = prvalue -# 2198| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 2198| Type = [IntType] int -# 2198| ValueCategory = lvalue -# 2198| getChild(0).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2198| Type = [IntType] int -# 2198| ValueCategory = lvalue -# 2199| getStmt(1): [ReturnStmt] return ... -# 2201| [TopLevelFunction] void vacuous_destructor_call::non_vacuous_destructor_call() -# 2201| : -# 2201| getEntryPoint(): [BlockStmt] { ... } -# 2202| getStmt(0): [DeclStmt] declaration -# 2202| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 2202| Type = [Class] ClassWithDestructor -# 2202| getVariable().getInitializer(): [Initializer] initializer for c -# 2202| getExpr(): [ConstructorCall] call to ClassWithDestructor -# 2202| Type = [VoidType] void -# 2202| ValueCategory = prvalue -# 2203| getStmt(1): [ExprStmt] ExprStmt -# 2203| getExpr(): [FunctionCall] call to call_destructor -# 2203| Type = [VoidType] void -# 2203| ValueCategory = prvalue -# 2203| getArgument(0): [VariableAccess] c -# 2203| Type = [Class] ClassWithDestructor -# 2203| ValueCategory = lvalue -# 2203| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2203| Type = [LValueReferenceType] ClassWithDestructor & -# 2203| ValueCategory = prvalue -# 2204| getStmt(2): [ReturnStmt] return ... -# 2204| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor -# 2204| Type = [VoidType] void -# 2204| ValueCategory = prvalue -# 2204| getQualifier(): [VariableAccess] c -# 2204| Type = [Class] ClassWithDestructor -# 2204| ValueCategory = lvalue -# 2206| [TopLevelFunction] void vacuous_destructor_call::vacuous_destructor_call() -# 2206| : -# 2206| getEntryPoint(): [BlockStmt] { ... } -# 2207| getStmt(0): [DeclStmt] declaration -# 2207| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i -# 2207| Type = [IntType] int -# 2208| getStmt(1): [ExprStmt] ExprStmt -# 2208| getExpr(): [FunctionCall] call to call_destructor -# 2208| Type = [VoidType] void -# 2208| ValueCategory = prvalue -# 2208| getArgument(0): [VariableAccess] i -# 2208| Type = [IntType] int -# 2208| ValueCategory = lvalue -# 2208| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2208| Type = [LValueReferenceType] int & -# 2208| ValueCategory = prvalue -# 2209| getStmt(2): [ReturnStmt] return ... -# 2212| [TopLevelFunction] void TryCatchDestructors(bool) -# 2212| : -# 2212| getParameter(0): [Parameter] b -# 2212| Type = [BoolType] bool -# 2212| getEntryPoint(): [BlockStmt] { ... } -# 2213| getStmt(0): [TryStmt] try { ... } -# 2213| getStmt(): [BlockStmt] { ... } -# 2214| getStmt(0): [DeclStmt] declaration -# 2214| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2214| Type = [Struct] String -# 2214| getVariable().getInitializer(): [Initializer] initializer for s -# 2214| getExpr(): [ConstructorCall] call to String -# 2214| Type = [VoidType] void -# 2214| ValueCategory = prvalue -# 2215| getStmt(1): [IfStmt] if (...) ... -# 2215| getCondition(): [VariableAccess] b -# 2215| Type = [BoolType] bool -# 2215| ValueCategory = prvalue(load) -# 2215| getThen(): [BlockStmt] { ... } -# 2216| getStmt(0): [ExprStmt] ExprStmt -# 2216| getExpr(): [ThrowExpr] throw ... -# 2216| Type = [PointerType] const char * -# 2216| ValueCategory = prvalue -# 2216| getExpr(): string literal -# 2216| Type = [ArrayType] const char[15] -# 2216| Value = [StringLiteral] "string literal" -# 2216| ValueCategory = lvalue -# 2219| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2219| Type = [VoidType] void -# 2219| ValueCategory = prvalue -# 2219| getQualifier(): [VariableAccess] s -# 2219| Type = [Struct] String -# 2219| ValueCategory = lvalue -# 2216| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 2216| Type = [PointerType] const char * -# 2216| ValueCategory = prvalue -# 2218| getStmt(2): [DeclStmt] declaration -# 2218| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 -# 2218| Type = [Struct] String -# 2218| getVariable().getInitializer(): [Initializer] initializer for s2 -# 2218| getExpr(): [ConstructorCall] call to String -# 2218| Type = [VoidType] void -# 2218| ValueCategory = prvalue -# 2219| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2219| Type = [VoidType] void -# 2219| ValueCategory = prvalue -# 2219| getQualifier(): [VariableAccess] s2 -# 2219| Type = [Struct] String -# 2219| ValueCategory = lvalue -# 2219| getImplicitDestructorCall(1): [DestructorCall] call to ~String -# 2219| Type = [VoidType] void -# 2219| ValueCategory = prvalue -# 2219| getQualifier(): [VariableAccess] s -# 2219| Type = [Struct] String -# 2219| ValueCategory = lvalue -# 2220| getChild(1): [Handler] -# 2220| getBlock(): [CatchBlock] { ... } -# 2221| getStmt(0): [ExprStmt] ExprStmt -# 2221| getExpr(): [ThrowExpr] throw ... -# 2221| Type = [Struct] String -# 2221| ValueCategory = prvalue -# 2221| getExpr(): [ConstructorCall] call to String -# 2221| Type = [VoidType] void -# 2221| ValueCategory = prvalue -# 2221| getArgument(0): [VariableAccess] s -# 2221| Type = [PointerType] const char * -# 2221| ValueCategory = prvalue(load) -# 2223| getChild(2): [Handler] -# 2223| getBlock(): [CatchBlock] { ... } -# 2225| getChild(3): [Handler] -# 2225| getBlock(): [CatchAnyBlock] { ... } -# 2226| getStmt(0): [ExprStmt] ExprStmt -# 2226| getExpr(): [ReThrowExpr] re-throw exception -# 2226| Type = [VoidType] void -# 2226| ValueCategory = prvalue -# 2228| getStmt(1): [ReturnStmt] return ... -# 2230| [TopLevelFunction] void IfDestructors(bool) -# 2230| : -# 2230| getParameter(0): [Parameter] b -# 2230| Type = [BoolType] bool -# 2230| getEntryPoint(): [BlockStmt] { ... } -# 2231| getStmt(0): [DeclStmt] declaration -# 2231| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s1 -# 2231| Type = [Struct] String -# 2231| getVariable().getInitializer(): [Initializer] initializer for s1 -# 2231| getExpr(): [ConstructorCall] call to String -# 2231| Type = [VoidType] void -# 2231| ValueCategory = prvalue -# 2232| getStmt(1): [IfStmt] if (...) ... -# 2232| getCondition(): [VariableAccess] b -# 2232| Type = [BoolType] bool -# 2232| ValueCategory = prvalue(load) -# 2232| getThen(): [BlockStmt] { ... } -# 2233| getStmt(0): [DeclStmt] declaration -# 2233| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 -# 2233| Type = [Struct] String -# 2233| getVariable().getInitializer(): [Initializer] initializer for s2 -# 2233| getExpr(): [ConstructorCall] call to String -# 2233| Type = [VoidType] void -# 2233| ValueCategory = prvalue -# 2234| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2234| Type = [VoidType] void -# 2234| ValueCategory = prvalue -# 2234| getQualifier(): [VariableAccess] s2 -# 2234| Type = [Struct] String -# 2234| ValueCategory = lvalue -# 2234| getElse(): [BlockStmt] { ... } -# 2235| getStmt(0): [DeclStmt] declaration -# 2235| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s3 -# 2235| Type = [Struct] String -# 2235| getVariable().getInitializer(): [Initializer] initializer for s3 -# 2235| getExpr(): [ConstructorCall] call to String -# 2235| Type = [VoidType] void -# 2235| ValueCategory = prvalue -# 2236| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2236| Type = [VoidType] void -# 2236| ValueCategory = prvalue -# 2236| getQualifier(): [VariableAccess] s3 -# 2236| Type = [Struct] String -# 2236| ValueCategory = lvalue -# 2237| getStmt(2): [DeclStmt] declaration -# 2237| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s4 -# 2237| Type = [Struct] String -# 2237| getVariable().getInitializer(): [Initializer] initializer for s4 -# 2237| getExpr(): [ConstructorCall] call to String -# 2237| Type = [VoidType] void -# 2237| ValueCategory = prvalue -# 2238| getStmt(3): [ReturnStmt] return ... -# 2238| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2238| Type = [VoidType] void -# 2238| ValueCategory = prvalue -# 2238| getQualifier(): [VariableAccess] s4 -# 2238| Type = [Struct] String -# 2238| ValueCategory = lvalue -# 2238| getImplicitDestructorCall(1): [DestructorCall] call to ~String -# 2238| Type = [VoidType] void -# 2238| ValueCategory = prvalue -# 2238| getQualifier(): [VariableAccess] s1 -# 2238| Type = [Struct] String -# 2238| ValueCategory = lvalue -# 2240| [TopLevelFunction] void ForDestructors() -# 2240| : -# 2240| getEntryPoint(): [BlockStmt] { ... } -# 2241| getStmt(0): [DeclStmt] declaration -# 2241| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 2241| Type = [PlainCharType] char -# 2241| getVariable().getInitializer(): [Initializer] initializer for c -# 2241| getExpr(): [CharLiteral] 97 -# 2241| Type = [PlainCharType] char -# 2241| Value = [CharLiteral] 97 -# 2241| ValueCategory = prvalue -# 2242| getStmt(1): [ForStmt] for(...;...;...) ... -# 2242| getInitialization(): [DeclStmt] declaration -# 2242| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2242| Type = [Struct] String -# 2242| getVariable().getInitializer(): [Initializer] initializer for s -# 2242| getExpr(): [ConstructorCall] call to String -# 2242| Type = [VoidType] void -# 2242| ValueCategory = prvalue -# 2242| getArgument(0): hello -# 2242| Type = [ArrayType] const char[6] -# 2242| Value = [StringLiteral] "hello" -# 2242| ValueCategory = lvalue -# 2242| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 2242| Type = [PointerType] const char * -# 2242| ValueCategory = prvalue -# 2242| getCondition(): [NEExpr] ... != ... -# 2242| Type = [BoolType] bool -# 2242| ValueCategory = prvalue -# 2242| getLeftOperand(): [VariableAccess] c -# 2242| Type = [PlainCharType] char -# 2242| ValueCategory = prvalue(load) -# 2242| getRightOperand(): [Literal] 0 -# 2242| Type = [IntType] int -# 2242| Value = [Literal] 0 -# 2242| ValueCategory = prvalue -# 2242| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... -# 2242| Conversion = [IntegralConversion] integral conversion -# 2242| Type = [IntType] int -# 2242| ValueCategory = prvalue -# 2242| getUpdate(): [AssignExpr] ... = ... -# 2242| Type = [PlainCharType] char -# 2242| ValueCategory = lvalue -# 2242| getLValue(): [VariableAccess] c -# 2242| Type = [PlainCharType] char -# 2242| ValueCategory = lvalue -# 2242| getRValue(): [FunctionCall] call to pop_back -# 2242| Type = [PlainCharType] char -# 2242| ValueCategory = prvalue -# 2242| getQualifier(): [VariableAccess] s -# 2242| Type = [Struct] String -# 2242| ValueCategory = lvalue -# 2242| getStmt(): [BlockStmt] { ... } -# 2243| getStmt(0): [DeclStmt] declaration -# 2243| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 -# 2243| Type = [Struct] String -# 2243| getVariable().getInitializer(): [Initializer] initializer for s2 -# 2243| getExpr(): [ConstructorCall] call to String -# 2243| Type = [VoidType] void -# 2243| ValueCategory = prvalue -# 2244| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2244| Type = [VoidType] void -# 2244| ValueCategory = prvalue -# 2244| getQualifier(): [VariableAccess] s2 -# 2244| Type = [Struct] String -# 2244| ValueCategory = lvalue -# 2242| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2242| Type = [VoidType] void -# 2242| ValueCategory = prvalue -# 2242| getQualifier(): [VariableAccess] s -# 2242| Type = [Struct] String -# 2242| ValueCategory = lvalue -# 2246| getStmt(2): [RangeBasedForStmt] for(...:...) ... -# 2246| getChild(1): [DeclStmt] declaration -# 2246| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) -# 2246| Type = [RValueReferenceType] vector && -#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) -# 2246| getExpr(): [ConstructorCall] call to vector -# 2246| Type = [VoidType] void -# 2246| ValueCategory = prvalue -# 2246| getArgument(0): [ConstructorCall] call to String -# 2246| Type = [VoidType] void -# 2246| ValueCategory = prvalue -# 2246| getArgument(0): hello -# 2246| Type = [ArrayType] const char[6] -# 2246| Value = [StringLiteral] "hello" -# 2246| ValueCategory = lvalue -# 2246| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 2246| Type = [PointerType] const char * -# 2246| ValueCategory = prvalue -# 2246| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2246| Type = [Struct] String -# 2246| ValueCategory = lvalue -# 2246| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 2246| Type = [LValueReferenceType] vector & -# 2246| ValueCategory = prvalue -# 2246| getExpr(): [TemporaryObjectExpr] temporary object -# 2246| Type = [ClassTemplateInstantiation,Struct] vector -# 2246| ValueCategory = xvalue -# 2246| getBeginEndDeclaration(): [DeclStmt] declaration -# 2246| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) -# 2246| Type = [NestedStruct] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) -# 2246| getExpr(): [FunctionCall] call to begin -# 2246| Type = [NestedStruct] iterator -# 2246| ValueCategory = prvalue -# 2246| getQualifier(): [VariableAccess] (__range) -# 2246| Type = [RValueReferenceType] vector && -# 2246| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2246| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) -# 2246| Type = [NestedStruct] iterator -#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) -# 2246| getExpr(): [FunctionCall] call to end -# 2246| Type = [NestedStruct] iterator -# 2246| ValueCategory = prvalue -# 2246| getQualifier(): [VariableAccess] (__range) -# 2246| Type = [RValueReferenceType] vector && -# 2246| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const vector -#-----| ValueCategory = lvalue -#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -#-----| Type = [ClassTemplateInstantiation,Struct] vector -#-----| ValueCategory = lvalue -# 2246| getCondition(): [FunctionCall] call to operator!= -# 2246| Type = [BoolType] bool -# 2246| ValueCategory = prvalue -# 2246| getQualifier(): [VariableAccess] (__begin) -# 2246| Type = [NestedStruct] iterator -# 2246| ValueCategory = lvalue -# 2246| getArgument(0): [VariableAccess] (__end) -# 2246| Type = [NestedStruct] iterator -# 2246| ValueCategory = prvalue(load) -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -# 2246| getUpdate(): [FunctionCall] call to operator++ -# 2246| Type = [LValueReferenceType] iterator & -# 2246| ValueCategory = prvalue -# 2246| getQualifier(): [VariableAccess] (__begin) -# 2246| Type = [NestedStruct] iterator -# 2246| ValueCategory = lvalue -# 2246| getChild(5): [DeclStmt] declaration -# 2246| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2246| Type = [Struct] String -# 2246| getVariable().getInitializer(): [Initializer] initializer for s -# 2246| getExpr(): [ConstructorCall] call to String -# 2246| Type = [VoidType] void -# 2246| ValueCategory = prvalue -# 2246| getArgument(0): [OverloadedPointerDereferenceExpr] call to operator* -# 2246| Type = [LValueReferenceType] String & -# 2246| ValueCategory = prvalue -# 2246| getQualifier(): [VariableAccess] (__begin) -# 2246| Type = [NestedStruct] iterator -# 2246| ValueCategory = lvalue -#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... -#-----| Conversion = [GlvalueConversion] glvalue conversion -#-----| Type = [SpecifiedType] const iterator -#-----| ValueCategory = lvalue -# 2246| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2246| Type = [LValueReferenceType] const String & -# 2246| ValueCategory = prvalue -# 2246| getExpr(): [CStyleCast] (const String)... -# 2246| Conversion = [GlvalueConversion] glvalue conversion -# 2246| Type = [SpecifiedType] const String -# 2246| ValueCategory = lvalue -# 2246| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 2246| Type = [Struct] String -# 2246| ValueCategory = lvalue -# 2246| getStmt(): [BlockStmt] { ... } -# 2247| getStmt(0): [DeclStmt] declaration -# 2247| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 -# 2247| Type = [Struct] String -# 2247| getVariable().getInitializer(): [Initializer] initializer for s2 -# 2247| getExpr(): [ConstructorCall] call to String -# 2247| Type = [VoidType] void -# 2247| ValueCategory = prvalue -# 2248| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2248| Type = [VoidType] void -# 2248| ValueCategory = prvalue -# 2248| getQualifier(): [VariableAccess] s2 -# 2248| Type = [Struct] String -# 2248| ValueCategory = lvalue -# 2246| getImplicitDestructorCall(1): [DestructorCall] call to ~String -# 2246| Type = [VoidType] void -# 2246| ValueCategory = prvalue -# 2246| getQualifier(): [VariableAccess] s -# 2246| Type = [Struct] String -# 2246| ValueCategory = lvalue -# 2246| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2246| Type = [NestedStruct] iterator -# 2246| ValueCategory = lvalue -# 2250| getStmt(3): [ForStmt] for(...;...;...) ... -# 2250| getInitialization(): [DeclStmt] declaration -# 2250| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2250| Type = [Struct] String -# 2250| getVariable().getInitializer(): [Initializer] initializer for s -# 2250| getExpr(): [ConstructorCall] call to String -# 2250| Type = [VoidType] void -# 2250| ValueCategory = prvalue -# 2250| getArgument(0): hello -# 2250| Type = [ArrayType] const char[6] -# 2250| Value = [StringLiteral] "hello" -# 2250| ValueCategory = lvalue -# 2250| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 2250| Type = [PointerType] const char * -# 2250| ValueCategory = prvalue -# 2250| getDeclarationEntry(1): [VariableDeclarationEntry] definition of s2 -# 2250| Type = [Struct] String -# 2250| getVariable().getInitializer(): [Initializer] initializer for s2 -# 2250| getExpr(): [ConstructorCall] call to String -# 2250| Type = [VoidType] void -# 2250| ValueCategory = prvalue -# 2250| getArgument(0): world -# 2250| Type = [ArrayType] const char[6] -# 2250| Value = [StringLiteral] "world" -# 2250| ValueCategory = lvalue -# 2250| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 2250| Type = [PointerType] const char * -# 2250| ValueCategory = prvalue -# 2250| getCondition(): [NEExpr] ... != ... -# 2250| Type = [BoolType] bool -# 2250| ValueCategory = prvalue -# 2250| getLeftOperand(): [VariableAccess] c -# 2250| Type = [PlainCharType] char -# 2250| ValueCategory = prvalue(load) -# 2250| getRightOperand(): [Literal] 0 -# 2250| Type = [IntType] int -# 2250| Value = [Literal] 0 -# 2250| ValueCategory = prvalue -# 2250| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... -# 2250| Conversion = [IntegralConversion] integral conversion -# 2250| Type = [IntType] int -# 2250| ValueCategory = prvalue -# 2250| getUpdate(): [AssignExpr] ... = ... -# 2250| Type = [PlainCharType] char -# 2250| ValueCategory = lvalue -# 2250| getLValue(): [VariableAccess] c -# 2250| Type = [PlainCharType] char -# 2250| ValueCategory = lvalue -# 2250| getRValue(): [FunctionCall] call to pop_back -# 2250| Type = [PlainCharType] char -# 2250| ValueCategory = prvalue -# 2250| getQualifier(): [VariableAccess] s -# 2250| Type = [Struct] String -# 2250| ValueCategory = lvalue -# 2250| getStmt(): [BlockStmt] { ... } -# 2251| getStmt(0): [ExprStmt] ExprStmt -# 2251| getExpr(): [AssignExpr] ... = ... -# 2251| Type = [PlainCharType] char -# 2251| ValueCategory = lvalue -# 2251| getLValue(): [VariableAccess] c -# 2251| Type = [PlainCharType] char -# 2251| ValueCategory = lvalue -# 2251| getRValue(): [Literal] 0 -# 2251| Type = [IntType] int -# 2251| Value = [Literal] 0 -# 2251| ValueCategory = prvalue -# 2251| getRValue().getFullyConverted(): [CStyleCast] (char)... -# 2251| Conversion = [IntegralConversion] integral conversion -# 2251| Type = [PlainCharType] char -# 2251| Value = [CStyleCast] 0 -# 2251| ValueCategory = prvalue -# 2250| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2235| getStmt(3): [ReturnStmt] return ... +# 2235| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2235| Type = [VoidType] void +# 2235| ValueCategory = prvalue +# 2235| getQualifier(): [VariableAccess] b +# 2235| Type = [Class] ClassWithDestructor +# 2235| ValueCategory = lvalue +# 2235| getImplicitDestructorCall(1): [DestructorCall] call to ~ClassWithDestructor +# 2235| Type = [VoidType] void +# 2235| ValueCategory = prvalue +# 2235| getQualifier(): [VariableAccess] a +# 2235| Type = [Class] ClassWithDestructor +# 2235| ValueCategory = lvalue +# 2237| [GlobalVariable] ClassWithDestructor global_class_with_destructor +# 2237| getInitializer(): [Initializer] initializer for global_class_with_destructor +# 2237| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2237| Type = [VoidType] void +# 2237| ValueCategory = prvalue +# 2241| [FunctionTemplateInstantiation,TopLevelFunction] ClassWithDestructor& vacuous_destructor_call::get(ClassWithDestructor&) +# 2241| : +# 2241| getParameter(0): [Parameter] t +# 2241| Type = [LValueReferenceType] ClassWithDestructor & +# 2241| getEntryPoint(): [BlockStmt] { ... } +# 2241| getStmt(0): [ReturnStmt] return ... +# 2241| getExpr(): [VariableAccess] t +# 2241| Type = [LValueReferenceType] ClassWithDestructor & +# 2241| ValueCategory = prvalue(load) +# 2241| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2241| Type = [LValueReferenceType] ClassWithDestructor & +# 2241| ValueCategory = prvalue +# 2241| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 2241| Type = [Class] ClassWithDestructor +# 2241| ValueCategory = lvalue +# 2241| [TemplateFunction,TopLevelFunction] T& vacuous_destructor_call::get(T&) +# 2241| : +# 2241| getParameter(0): [Parameter] t +# 2241| Type = [LValueReferenceType] T & +# 2241| getEntryPoint(): [BlockStmt] { ... } +# 2241| getStmt(0): [ReturnStmt] return ... +# 2241| getExpr(): [VariableAccess] t +# 2241| Type = [LValueReferenceType] T & +# 2241| ValueCategory = prvalue(load) +# 2241| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2241| Type = [TemplateParameter] T +# 2241| ValueCategory = lvalue +# 2241| [FunctionTemplateInstantiation,TopLevelFunction] int& vacuous_destructor_call::get(int&) +# 2241| : +# 2241| getParameter(0): [Parameter] t +# 2241| Type = [LValueReferenceType] int & +# 2241| getEntryPoint(): [BlockStmt] { ... } +# 2241| getStmt(0): [ReturnStmt] return ... +# 2241| getExpr(): [VariableAccess] t +# 2241| Type = [LValueReferenceType] int & +# 2241| ValueCategory = prvalue(load) +# 2241| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2241| Type = [LValueReferenceType] int & +# 2241| ValueCategory = prvalue +# 2241| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 2241| Type = [IntType] int +# 2241| ValueCategory = lvalue +# 2244| [FunctionTemplateInstantiation,TopLevelFunction] void vacuous_destructor_call::call_destructor(ClassWithDestructor&) +# 2244| : +# 2244| getParameter(0): [Parameter] t +# 2244| Type = [LValueReferenceType] ClassWithDestructor & +# 2244| getEntryPoint(): [BlockStmt] { ... } +# 2245| getStmt(0): [ExprStmt] ExprStmt +# 2245| getExpr(): [DestructorCall] call to ~ClassWithDestructor +# 2245| Type = [VoidType] void +# 2245| ValueCategory = prvalue +# 2245| getQualifier(): [FunctionCall] call to get +# 2245| Type = [LValueReferenceType] ClassWithDestructor & +# 2245| ValueCategory = prvalue +# 2245| getArgument(0): [VariableAccess] t +# 2245| Type = [LValueReferenceType] ClassWithDestructor & +# 2245| ValueCategory = prvalue(load) +# 2245| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2245| Type = [LValueReferenceType] ClassWithDestructor & +# 2245| ValueCategory = prvalue +# 2245| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 2245| Type = [Class] ClassWithDestructor +# 2245| ValueCategory = lvalue +# 2245| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2245| Type = [Class] ClassWithDestructor +# 2245| ValueCategory = lvalue +# 2246| getStmt(1): [ReturnStmt] return ... +# 2244| [TemplateFunction,TopLevelFunction] void vacuous_destructor_call::call_destructor(T&) +# 2244| : +# 2244| getParameter(0): [Parameter] t +# 2244| Type = [LValueReferenceType] T & +# 2244| getEntryPoint(): [BlockStmt] { ... } +# 2245| getStmt(0): [ExprStmt] ExprStmt +# 2245| getExpr(): [ExprCall] call to expression +# 2245| Type = [UnknownType] unknown +# 2245| ValueCategory = prvalue +# 2245| getExpr(): [Literal] Unknown literal +# 2245| Type = [UnknownType] unknown +# 2245| ValueCategory = prvalue +# 2245| getChild(-1): [ExprCall] call to expression +# 2245| Type = [UnknownType] unknown +# 2245| ValueCategory = prvalue +# 2245| getExpr(): [Literal] Unknown literal +# 2245| Type = [UnknownType] unknown +# 2245| ValueCategory = prvalue +# 2245| getArgument(0): [VariableAccess] t +# 2245| Type = [LValueReferenceType] T & +# 2245| ValueCategory = prvalue(load) +# 2245| getArgument(0).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2245| Type = [TemplateParameter] T +# 2245| ValueCategory = lvalue +# 2246| getStmt(1): [ReturnStmt] return ... +# 2244| [FunctionTemplateInstantiation,TopLevelFunction] void vacuous_destructor_call::call_destructor(int&) +# 2244| : +# 2244| getParameter(0): [Parameter] t +# 2244| Type = [LValueReferenceType] int & +# 2244| getEntryPoint(): [BlockStmt] { ... } +# 2245| getStmt(0): [ExprStmt] ExprStmt +# 2245| getExpr(): [VacuousDestructorCall] (vacuous destructor call) +# 2245| Type = [VoidType] void +# 2245| ValueCategory = prvalue +# 2245| getChild(0): [FunctionCall] call to get +# 2245| Type = [LValueReferenceType] int & +# 2245| ValueCategory = prvalue +# 2245| getArgument(0): [VariableAccess] t +# 2245| Type = [LValueReferenceType] int & +# 2245| ValueCategory = prvalue(load) +# 2245| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2245| Type = [LValueReferenceType] int & +# 2245| ValueCategory = prvalue +# 2245| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 2245| Type = [IntType] int +# 2245| ValueCategory = lvalue +# 2245| getChild(0).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2245| Type = [IntType] int +# 2245| ValueCategory = lvalue +# 2246| getStmt(1): [ReturnStmt] return ... +# 2248| [TopLevelFunction] void vacuous_destructor_call::non_vacuous_destructor_call() +# 2248| : +# 2248| getEntryPoint(): [BlockStmt] { ... } +# 2249| getStmt(0): [DeclStmt] declaration +# 2249| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 2249| Type = [Class] ClassWithDestructor +# 2249| getVariable().getInitializer(): [Initializer] initializer for c +# 2249| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2249| Type = [VoidType] void +# 2249| ValueCategory = prvalue +# 2250| getStmt(1): [ExprStmt] ExprStmt +# 2250| getExpr(): [FunctionCall] call to call_destructor # 2250| Type = [VoidType] void # 2250| ValueCategory = prvalue -# 2250| getQualifier(): [VariableAccess] s2 -# 2250| Type = [Struct] String +# 2250| getArgument(0): [VariableAccess] c +# 2250| Type = [Class] ClassWithDestructor # 2250| ValueCategory = lvalue -# 2250| getImplicitDestructorCall(1): [DestructorCall] call to ~String -# 2250| Type = [VoidType] void -# 2250| ValueCategory = prvalue -# 2250| getQualifier(): [VariableAccess] s -# 2250| Type = [Struct] String -# 2250| ValueCategory = lvalue -# 2253| getStmt(4): [ReturnStmt] return ... -# 2255| [TopLevelFunction] void IfDestructors2(bool) -# 2255| : -# 2255| getParameter(0): [Parameter] b -# 2255| Type = [BoolType] bool -# 2255| getEntryPoint(): [BlockStmt] { ... } -# 2256| getStmt(0): [IfStmt] if (...) ... -# 2256| getInitialization(): [DeclStmt] declaration -# 2256| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2256| Type = [Struct] String -# 2256| getVariable().getInitializer(): [Initializer] initializer for s -# 2256| getExpr(): [ConstructorCall] call to String -# 2256| Type = [VoidType] void -# 2256| ValueCategory = prvalue -# 2256| getArgument(0): hello -# 2256| Type = [ArrayType] const char[6] -# 2256| Value = [StringLiteral] "hello" -# 2256| ValueCategory = lvalue -# 2256| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 2256| Type = [PointerType] const char * -# 2256| ValueCategory = prvalue -# 2256| getCondition(): [VariableAccess] b -# 2256| Type = [BoolType] bool -# 2256| ValueCategory = prvalue(load) -# 2256| getThen(): [BlockStmt] { ... } -# 2257| getStmt(0): [DeclStmt] declaration -# 2257| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2257| Type = [IntType] int -# 2257| getVariable().getInitializer(): [Initializer] initializer for x -# 2257| getExpr(): [Literal] 0 -# 2257| Type = [IntType] int -# 2257| Value = [Literal] 0 -# 2257| ValueCategory = prvalue -# 2258| getElse(): [BlockStmt] { ... } -# 2259| getStmt(0): [DeclStmt] declaration -# 2259| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 2259| Type = [IntType] int -# 2259| getVariable().getInitializer(): [Initializer] initializer for y -# 2259| getExpr(): [Literal] 0 -# 2259| Type = [IntType] int -# 2259| Value = [Literal] 0 -# 2259| ValueCategory = prvalue -# 2260| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2260| Type = [VoidType] void -# 2260| ValueCategory = prvalue -# 2260| getQualifier(): [VariableAccess] s -# 2260| Type = [Struct] String -# 2260| ValueCategory = lvalue -# 2261| getStmt(1): [ReturnStmt] return ... -# 2263| [CopyAssignmentOperator] Bool& Bool::operator=(Bool const&) -# 2263| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Bool & -# 2263| [CopyConstructor] void Bool::Bool(Bool const&) -# 2263| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Bool & -# 2265| [Constructor] void Bool::Bool(bool) -# 2265| : -# 2265| getParameter(0): [Parameter] b_ -# 2265| Type = [BoolType] bool -# 2266| [ConversionOperator] bool Bool::operator bool() -# 2266| : -# 2267| [Destructor] void Bool::~Bool() -# 2267| : -# 2270| [TopLevelFunction] void IfDestructors3(bool) -# 2270| : -# 2270| getParameter(0): [Parameter] b -# 2270| Type = [BoolType] bool -# 2270| getEntryPoint(): [BlockStmt] { ... } -# 2271| getStmt(0): [IfStmt] if (...) ... -# 2271| getCondition(): [ConditionDeclExpr] (condition decl) -# 2271| Type = [BoolType] bool -# 2271| ValueCategory = prvalue -# 2271| getChild(0): [FunctionCall] call to operator bool -# 2271| Type = [BoolType] bool -# 2271| ValueCategory = prvalue -# 2271| getQualifier(): [VariableAccess] B -# 2271| Type = [Class] Bool -# 2271| ValueCategory = prvalue(load) -# 2271| getThen(): [BlockStmt] { ... } -# 2272| getStmt(0): [DeclStmt] declaration -# 2272| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s1 -# 2272| Type = [Struct] String -# 2272| getVariable().getInitializer(): [Initializer] initializer for s1 -# 2272| getExpr(): [ConstructorCall] call to String -# 2272| Type = [VoidType] void -# 2272| ValueCategory = prvalue -# 2273| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2273| Type = [VoidType] void -# 2273| ValueCategory = prvalue -# 2273| getQualifier(): [VariableAccess] s1 -# 2273| Type = [Struct] String -# 2273| ValueCategory = lvalue -# 2273| getElse(): [BlockStmt] { ... } -# 2274| getStmt(0): [DeclStmt] declaration -# 2274| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 -# 2274| Type = [Struct] String -# 2274| getVariable().getInitializer(): [Initializer] initializer for s2 -# 2274| getExpr(): [ConstructorCall] call to String -# 2274| Type = [VoidType] void -# 2274| ValueCategory = prvalue -# 2275| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2275| Type = [VoidType] void -# 2275| ValueCategory = prvalue -# 2275| getQualifier(): [VariableAccess] s2 -# 2275| Type = [Struct] String -# 2275| ValueCategory = lvalue -# 2275| getImplicitDestructorCall(0): [DestructorCall] call to ~Bool -# 2275| Type = [VoidType] void -# 2275| ValueCategory = prvalue -# 2275| getQualifier(): [VariableAccess] B -# 2275| Type = [Class] Bool -# 2275| ValueCategory = lvalue -# 2276| getStmt(1): [ReturnStmt] return ... -# 2278| [TopLevelFunction] void WhileLoopDestructors(bool) -# 2278| : -# 2278| getParameter(0): [Parameter] b -# 2278| Type = [BoolType] bool -# 2278| getEntryPoint(): [BlockStmt] { ... } -# 2279| getStmt(0): [BlockStmt] { ... } -# 2280| getStmt(0): [DeclStmt] declaration -# 2280| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2280| Type = [Struct] String -# 2280| getVariable().getInitializer(): [Initializer] initializer for s -# 2280| getExpr(): [ConstructorCall] call to String -# 2280| Type = [VoidType] void -# 2280| ValueCategory = prvalue -# 2281| getStmt(1): [WhileStmt] while (...) ... -# 2281| getCondition(): [VariableAccess] b -# 2281| Type = [BoolType] bool -# 2281| ValueCategory = prvalue(load) -# 2281| getStmt(): [BlockStmt] { ... } -# 2282| getStmt(0): [ExprStmt] ExprStmt -# 2282| getExpr(): [AssignExpr] ... = ... -# 2282| Type = [BoolType] bool -# 2282| ValueCategory = lvalue -# 2282| getLValue(): [VariableAccess] b -# 2282| Type = [BoolType] bool -# 2282| ValueCategory = lvalue -# 2282| getRValue(): [Literal] 0 -# 2282| Type = [BoolType] bool -# 2282| Value = [Literal] 0 +# 2250| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2250| Type = [LValueReferenceType] ClassWithDestructor & +# 2250| ValueCategory = prvalue +# 2251| getStmt(2): [ReturnStmt] return ... +# 2251| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2251| Type = [VoidType] void +# 2251| ValueCategory = prvalue +# 2251| getQualifier(): [VariableAccess] c +# 2251| Type = [Class] ClassWithDestructor +# 2251| ValueCategory = lvalue +# 2253| [TopLevelFunction] void vacuous_destructor_call::vacuous_destructor_call() +# 2253| : +# 2253| getEntryPoint(): [BlockStmt] { ... } +# 2254| getStmt(0): [DeclStmt] declaration +# 2254| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 2254| Type = [IntType] int +# 2255| getStmt(1): [ExprStmt] ExprStmt +# 2255| getExpr(): [FunctionCall] call to call_destructor +# 2255| Type = [VoidType] void +# 2255| ValueCategory = prvalue +# 2255| getArgument(0): [VariableAccess] i +# 2255| Type = [IntType] int +# 2255| ValueCategory = lvalue +# 2255| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2255| Type = [LValueReferenceType] int & +# 2255| ValueCategory = prvalue +# 2256| getStmt(2): [ReturnStmt] return ... +# 2259| [TopLevelFunction] void TryCatchDestructors(bool) +# 2259| : +# 2259| getParameter(0): [Parameter] b +# 2259| Type = [BoolType] bool +# 2259| getEntryPoint(): [BlockStmt] { ... } +# 2260| getStmt(0): [TryStmt] try { ... } +# 2260| getStmt(): [BlockStmt] { ... } +# 2261| getStmt(0): [DeclStmt] declaration +# 2261| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2261| Type = [Struct] String +# 2261| getVariable().getInitializer(): [Initializer] initializer for s +# 2261| getExpr(): [ConstructorCall] call to String +# 2261| Type = [VoidType] void +# 2261| ValueCategory = prvalue +# 2262| getStmt(1): [IfStmt] if (...) ... +# 2262| getCondition(): [VariableAccess] b +# 2262| Type = [BoolType] bool +# 2262| ValueCategory = prvalue(load) +# 2262| getThen(): [BlockStmt] { ... } +# 2263| getStmt(0): [ExprStmt] ExprStmt +# 2263| getExpr(): [ThrowExpr] throw ... +# 2263| Type = [PointerType] const char * +# 2263| ValueCategory = prvalue +# 2263| getExpr(): string literal +# 2263| Type = [ArrayType] const char[15] +# 2263| Value = [StringLiteral] "string literal" +# 2263| ValueCategory = lvalue +# 2266| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2266| Type = [VoidType] void +# 2266| ValueCategory = prvalue +# 2266| getQualifier(): [VariableAccess] s +# 2266| Type = [Struct] String +# 2266| ValueCategory = lvalue +# 2263| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2263| Type = [PointerType] const char * +# 2263| ValueCategory = prvalue +# 2265| getStmt(2): [DeclStmt] declaration +# 2265| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 +# 2265| Type = [Struct] String +# 2265| getVariable().getInitializer(): [Initializer] initializer for s2 +# 2265| getExpr(): [ConstructorCall] call to String +# 2265| Type = [VoidType] void +# 2265| ValueCategory = prvalue +# 2266| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2266| Type = [VoidType] void +# 2266| ValueCategory = prvalue +# 2266| getQualifier(): [VariableAccess] s2 +# 2266| Type = [Struct] String +# 2266| ValueCategory = lvalue +# 2266| getImplicitDestructorCall(1): [DestructorCall] call to ~String +# 2266| Type = [VoidType] void +# 2266| ValueCategory = prvalue +# 2266| getQualifier(): [VariableAccess] s +# 2266| Type = [Struct] String +# 2266| ValueCategory = lvalue +# 2267| getChild(1): [Handler] +# 2267| getBlock(): [CatchBlock] { ... } +# 2268| getStmt(0): [ExprStmt] ExprStmt +# 2268| getExpr(): [ThrowExpr] throw ... +# 2268| Type = [Struct] String +# 2268| ValueCategory = prvalue +# 2268| getExpr(): [ConstructorCall] call to String +# 2268| Type = [VoidType] void +# 2268| ValueCategory = prvalue +# 2268| getArgument(0): [VariableAccess] s +# 2268| Type = [PointerType] const char * +# 2268| ValueCategory = prvalue(load) +# 2270| getChild(2): [Handler] +# 2270| getBlock(): [CatchBlock] { ... } +# 2272| getChild(3): [Handler] +# 2272| getBlock(): [CatchAnyBlock] { ... } +# 2273| getStmt(0): [ExprStmt] ExprStmt +# 2273| getExpr(): [ReThrowExpr] re-throw exception +# 2273| Type = [VoidType] void +# 2273| ValueCategory = prvalue +# 2275| getStmt(1): [ReturnStmt] return ... +# 2277| [TopLevelFunction] void IfDestructors(bool) +# 2277| : +# 2277| getParameter(0): [Parameter] b +# 2277| Type = [BoolType] bool +# 2277| getEntryPoint(): [BlockStmt] { ... } +# 2278| getStmt(0): [DeclStmt] declaration +# 2278| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s1 +# 2278| Type = [Struct] String +# 2278| getVariable().getInitializer(): [Initializer] initializer for s1 +# 2278| getExpr(): [ConstructorCall] call to String +# 2278| Type = [VoidType] void +# 2278| ValueCategory = prvalue +# 2279| getStmt(1): [IfStmt] if (...) ... +# 2279| getCondition(): [VariableAccess] b +# 2279| Type = [BoolType] bool +# 2279| ValueCategory = prvalue(load) +# 2279| getThen(): [BlockStmt] { ... } +# 2280| getStmt(0): [DeclStmt] declaration +# 2280| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 +# 2280| Type = [Struct] String +# 2280| getVariable().getInitializer(): [Initializer] initializer for s2 +# 2280| getExpr(): [ConstructorCall] call to String +# 2280| Type = [VoidType] void +# 2280| ValueCategory = prvalue +# 2281| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2281| Type = [VoidType] void +# 2281| ValueCategory = prvalue +# 2281| getQualifier(): [VariableAccess] s2 +# 2281| Type = [Struct] String +# 2281| ValueCategory = lvalue +# 2281| getElse(): [BlockStmt] { ... } +# 2282| getStmt(0): [DeclStmt] declaration +# 2282| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s3 +# 2282| Type = [Struct] String +# 2282| getVariable().getInitializer(): [Initializer] initializer for s3 +# 2282| getExpr(): [ConstructorCall] call to String +# 2282| Type = [VoidType] void # 2282| ValueCategory = prvalue -# 2284| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2284| Type = [VoidType] void -# 2284| ValueCategory = prvalue -# 2284| getQualifier(): [VariableAccess] s -# 2284| Type = [Struct] String -# 2284| ValueCategory = lvalue -# 2286| getStmt(1): [BlockStmt] { ... } -# 2287| getStmt(0): [WhileStmt] while (...) ... -# 2287| getCondition(): [ConditionDeclExpr] (condition decl) -# 2287| Type = [BoolType] bool -# 2287| ValueCategory = prvalue -# 2287| getChild(0): [FunctionCall] call to operator bool -# 2287| Type = [BoolType] bool -# 2287| ValueCategory = prvalue -# 2287| getQualifier(): [VariableAccess] B -# 2287| Type = [Class] Bool -# 2287| ValueCategory = prvalue(load) -# 2287| getStmt(): [BlockStmt] { ... } -# 2288| getStmt(0): [ExprStmt] ExprStmt -# 2288| getExpr(): [AssignExpr] ... = ... -# 2288| Type = [BoolType] bool -# 2288| ValueCategory = lvalue -# 2288| getLValue(): [VariableAccess] b -# 2288| Type = [BoolType] bool -# 2288| ValueCategory = lvalue -# 2288| getRValue(): [Literal] 0 -# 2288| Type = [BoolType] bool -# 2288| Value = [Literal] 0 -# 2288| ValueCategory = prvalue -# 2289| getImplicitDestructorCall(0): [DestructorCall] call to ~Bool -# 2289| Type = [VoidType] void -# 2289| ValueCategory = prvalue -# 2289| getQualifier(): [VariableAccess] B -# 2289| Type = [Class] Bool -# 2289| ValueCategory = lvalue -# 2289| getImplicitDestructorCall(0): [DestructorCall] call to ~Bool -# 2289| Type = [VoidType] void +# 2283| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2283| Type = [VoidType] void +# 2283| ValueCategory = prvalue +# 2283| getQualifier(): [VariableAccess] s3 +# 2283| Type = [Struct] String +# 2283| ValueCategory = lvalue +# 2284| getStmt(2): [DeclStmt] declaration +# 2284| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s4 +# 2284| Type = [Struct] String +# 2284| getVariable().getInitializer(): [Initializer] initializer for s4 +# 2284| getExpr(): [ConstructorCall] call to String +# 2284| Type = [VoidType] void +# 2284| ValueCategory = prvalue +# 2285| getStmt(3): [ReturnStmt] return ... +# 2285| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2285| Type = [VoidType] void +# 2285| ValueCategory = prvalue +# 2285| getQualifier(): [VariableAccess] s4 +# 2285| Type = [Struct] String +# 2285| ValueCategory = lvalue +# 2285| getImplicitDestructorCall(1): [DestructorCall] call to ~String +# 2285| Type = [VoidType] void +# 2285| ValueCategory = prvalue +# 2285| getQualifier(): [VariableAccess] s1 +# 2285| Type = [Struct] String +# 2285| ValueCategory = lvalue +# 2287| [TopLevelFunction] void ForDestructors() +# 2287| : +# 2287| getEntryPoint(): [BlockStmt] { ... } +# 2288| getStmt(0): [DeclStmt] declaration +# 2288| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 2288| Type = [PlainCharType] char +# 2288| getVariable().getInitializer(): [Initializer] initializer for c +# 2288| getExpr(): [CharLiteral] 97 +# 2288| Type = [PlainCharType] char +# 2288| Value = [CharLiteral] 97 +# 2288| ValueCategory = prvalue +# 2289| getStmt(1): [ForStmt] for(...;...;...) ... +# 2289| getInitialization(): [DeclStmt] declaration +# 2289| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2289| Type = [Struct] String +# 2289| getVariable().getInitializer(): [Initializer] initializer for s +# 2289| getExpr(): [ConstructorCall] call to String +# 2289| Type = [VoidType] void +# 2289| ValueCategory = prvalue +# 2289| getArgument(0): hello +# 2289| Type = [ArrayType] const char[6] +# 2289| Value = [StringLiteral] "hello" +# 2289| ValueCategory = lvalue +# 2289| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2289| Type = [PointerType] const char * +# 2289| ValueCategory = prvalue +# 2289| getCondition(): [NEExpr] ... != ... +# 2289| Type = [BoolType] bool +# 2289| ValueCategory = prvalue +# 2289| getLeftOperand(): [VariableAccess] c +# 2289| Type = [PlainCharType] char +# 2289| ValueCategory = prvalue(load) +# 2289| getRightOperand(): [Literal] 0 +# 2289| Type = [IntType] int +# 2289| Value = [Literal] 0 # 2289| ValueCategory = prvalue -# 2289| getQualifier(): [VariableAccess] B -# 2289| Type = [Class] Bool +# 2289| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... +# 2289| Conversion = [IntegralConversion] integral conversion +# 2289| Type = [IntType] int +# 2289| ValueCategory = prvalue +# 2289| getUpdate(): [AssignExpr] ... = ... +# 2289| Type = [PlainCharType] char +# 2289| ValueCategory = lvalue +# 2289| getLValue(): [VariableAccess] c +# 2289| Type = [PlainCharType] char +# 2289| ValueCategory = lvalue +# 2289| getRValue(): [FunctionCall] call to pop_back +# 2289| Type = [PlainCharType] char +# 2289| ValueCategory = prvalue +# 2289| getQualifier(): [VariableAccess] s +# 2289| Type = [Struct] String # 2289| ValueCategory = lvalue -# 2291| getStmt(2): [ReturnStmt] return ... -# 2293| [TopLevelFunction] void VoidFunc() -# 2293| : -# 2293| getEntryPoint(): [BlockStmt] { ... } -# 2293| getStmt(0): [ReturnStmt] return ... -# 2295| [TopLevelFunction] void IfReturnDestructors(bool) -# 2295| : -# 2295| getParameter(0): [Parameter] b -# 2295| Type = [BoolType] bool -# 2295| getEntryPoint(): [BlockStmt] { ... } -# 2296| getStmt(0): [DeclStmt] declaration -# 2296| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2296| Type = [Struct] String -# 2296| getVariable().getInitializer(): [Initializer] initializer for s -# 2296| getExpr(): [ConstructorCall] call to String -# 2296| Type = [VoidType] void -# 2296| ValueCategory = prvalue -# 2297| getStmt(1): [IfStmt] if (...) ... -# 2297| getCondition(): [VariableAccess] b +# 2289| getStmt(): [BlockStmt] { ... } +# 2290| getStmt(0): [DeclStmt] declaration +# 2290| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 +# 2290| Type = [Struct] String +# 2290| getVariable().getInitializer(): [Initializer] initializer for s2 +# 2290| getExpr(): [ConstructorCall] call to String +# 2290| Type = [VoidType] void +# 2290| ValueCategory = prvalue +# 2291| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2291| Type = [VoidType] void +# 2291| ValueCategory = prvalue +# 2291| getQualifier(): [VariableAccess] s2 +# 2291| Type = [Struct] String +# 2291| ValueCategory = lvalue +# 2289| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2289| Type = [VoidType] void +# 2289| ValueCategory = prvalue +# 2289| getQualifier(): [VariableAccess] s +# 2289| Type = [Struct] String +# 2289| ValueCategory = lvalue +# 2293| getStmt(2): [RangeBasedForStmt] for(...:...) ... +# 2293| getChild(1): [DeclStmt] declaration +# 2293| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 2293| Type = [RValueReferenceType] vector && +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2293| getExpr(): [ConstructorCall] call to vector +# 2293| Type = [VoidType] void +# 2293| ValueCategory = prvalue +# 2293| getArgument(0): [ConstructorCall] call to String +# 2293| Type = [VoidType] void +# 2293| ValueCategory = prvalue +# 2293| getArgument(0): hello +# 2293| Type = [ArrayType] const char[6] +# 2293| Value = [StringLiteral] "hello" +# 2293| ValueCategory = lvalue +# 2293| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2293| Type = [PointerType] const char * +# 2293| ValueCategory = prvalue +# 2293| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2293| Type = [Struct] String +# 2293| ValueCategory = lvalue +# 2293| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2293| Type = [LValueReferenceType] vector & +# 2293| ValueCategory = prvalue +# 2293| getExpr(): [TemporaryObjectExpr] temporary object +# 2293| Type = [ClassTemplateInstantiation,Struct] vector +# 2293| ValueCategory = xvalue +# 2293| getBeginEndDeclaration(): [DeclStmt] declaration +# 2293| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 2293| getExpr(): [FunctionCall] call to begin +# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2293| ValueCategory = prvalue +# 2293| getQualifier(): [VariableAccess] (__range) +# 2293| Type = [RValueReferenceType] vector && +# 2293| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2293| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 2293| getExpr(): [FunctionCall] call to end +# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2293| ValueCategory = prvalue +# 2293| getQualifier(): [VariableAccess] (__range) +# 2293| Type = [RValueReferenceType] vector && +# 2293| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2293| getCondition(): [FunctionCall] call to operator!= +# 2293| Type = [BoolType] bool +# 2293| ValueCategory = prvalue +# 2293| getQualifier(): [VariableAccess] (__begin) +# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2293| ValueCategory = lvalue +# 2293| getArgument(0): [ConstructorCall] call to iterator +# 2293| Type = [VoidType] void +# 2293| ValueCategory = prvalue +# 2293| getArgument(0): [VariableAccess] (__end) +# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2293| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +#-----| Type = [LValueReferenceType] const iterator & +#-----| ValueCategory = prvalue +#-----| getExpr(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +#-----| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [ClassTemplateInstantiation,Struct] iterator +#-----| ValueCategory = lvalue +# 2293| getUpdate(): [FunctionCall] call to operator++ +# 2293| Type = [LValueReferenceType] iterator & +# 2293| ValueCategory = prvalue +# 2293| getQualifier(): [VariableAccess] (__begin) +# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2293| ValueCategory = lvalue +# 2293| getChild(5): [DeclStmt] declaration +# 2293| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2293| Type = [Struct] String +# 2293| getVariable().getInitializer(): [Initializer] initializer for s +# 2293| getExpr(): [ConstructorCall] call to String +# 2293| Type = [VoidType] void +# 2293| ValueCategory = prvalue +# 2293| getArgument(0): [OverloadedPointerDereferenceExpr] call to operator* +# 2293| Type = [LValueReferenceType] String & +# 2293| ValueCategory = prvalue +# 2293| getQualifier(): [VariableAccess] (__begin) +# 2293| Type = [NestedTypedefType,UsingAliasTypedefType] iterator +# 2293| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2293| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2293| Type = [LValueReferenceType] const String & +# 2293| ValueCategory = prvalue +# 2293| getExpr(): [CStyleCast] (const String)... +# 2293| Conversion = [GlvalueConversion] glvalue conversion +# 2293| Type = [SpecifiedType] const String +# 2293| ValueCategory = lvalue +# 2293| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 2293| Type = [Struct] String +# 2293| ValueCategory = lvalue +# 2293| getStmt(): [BlockStmt] { ... } +# 2294| getStmt(0): [DeclStmt] declaration +# 2294| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 +# 2294| Type = [Struct] String +# 2294| getVariable().getInitializer(): [Initializer] initializer for s2 +# 2294| getExpr(): [ConstructorCall] call to String +# 2294| Type = [VoidType] void +# 2294| ValueCategory = prvalue +# 2295| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2295| Type = [VoidType] void +# 2295| ValueCategory = prvalue +# 2295| getQualifier(): [VariableAccess] s2 +# 2295| Type = [Struct] String +# 2295| ValueCategory = lvalue +# 2293| getImplicitDestructorCall(1): [DestructorCall] call to ~String +# 2293| Type = [VoidType] void +# 2293| ValueCategory = prvalue +# 2293| getQualifier(): [VariableAccess] s +# 2293| Type = [Struct] String +# 2293| ValueCategory = lvalue +# 2293| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2293| Type = [ClassTemplateInstantiation,Struct] iterator +# 2293| ValueCategory = lvalue +# 2297| getStmt(3): [ForStmt] for(...;...;...) ... +# 2297| getInitialization(): [DeclStmt] declaration +# 2297| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2297| Type = [Struct] String +# 2297| getVariable().getInitializer(): [Initializer] initializer for s +# 2297| getExpr(): [ConstructorCall] call to String +# 2297| Type = [VoidType] void +# 2297| ValueCategory = prvalue +# 2297| getArgument(0): hello +# 2297| Type = [ArrayType] const char[6] +# 2297| Value = [StringLiteral] "hello" +# 2297| ValueCategory = lvalue +# 2297| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2297| Type = [PointerType] const char * +# 2297| ValueCategory = prvalue +# 2297| getDeclarationEntry(1): [VariableDeclarationEntry] definition of s2 +# 2297| Type = [Struct] String +# 2297| getVariable().getInitializer(): [Initializer] initializer for s2 +# 2297| getExpr(): [ConstructorCall] call to String +# 2297| Type = [VoidType] void +# 2297| ValueCategory = prvalue +# 2297| getArgument(0): world +# 2297| Type = [ArrayType] const char[6] +# 2297| Value = [StringLiteral] "world" +# 2297| ValueCategory = lvalue +# 2297| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2297| Type = [PointerType] const char * +# 2297| ValueCategory = prvalue +# 2297| getCondition(): [NEExpr] ... != ... # 2297| Type = [BoolType] bool -# 2297| ValueCategory = prvalue(load) -# 2297| getThen(): [BlockStmt] { ... } -# 2298| getStmt(0): [ReturnStmt] return ... -# 2304| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2304| Type = [VoidType] void -# 2304| ValueCategory = prvalue -# 2304| getQualifier(): [VariableAccess] s -# 2304| Type = [Struct] String -# 2304| ValueCategory = lvalue -# 2300| getStmt(2): [IfStmt] if (...) ... -# 2300| getCondition(): [VariableAccess] b -# 2300| Type = [BoolType] bool -# 2300| ValueCategory = prvalue(load) -# 2300| getThen(): [BlockStmt] { ... } -# 2301| getStmt(0): [ReturnStmt] return ... -# 2301| getExpr(): [FunctionCall] call to VoidFunc -# 2301| Type = [VoidType] void -# 2301| ValueCategory = prvalue -# 2304| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2304| Type = [VoidType] void -# 2304| ValueCategory = prvalue -# 2304| getQualifier(): [VariableAccess] s -# 2304| Type = [Struct] String -# 2304| ValueCategory = lvalue -# 2303| getStmt(3): [ExprStmt] ExprStmt -# 2303| getExpr(): [VariableAccess] s -# 2303| Type = [Struct] String -# 2303| ValueCategory = lvalue -# 2304| getStmt(4): [ReturnStmt] return ... -# 2304| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2304| Type = [VoidType] void -# 2304| ValueCategory = prvalue -# 2304| getQualifier(): [VariableAccess] s -# 2304| Type = [Struct] String -# 2304| ValueCategory = lvalue -# 2306| [TopLevelFunction] int IfReturnDestructors3(bool) -# 2306| : -# 2306| getParameter(0): [Parameter] b -# 2306| Type = [BoolType] bool -# 2306| getEntryPoint(): [BlockStmt] { ... } -# 2307| getStmt(0): [DeclStmt] declaration -# 2307| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2307| Type = [Struct] String -# 2307| getVariable().getInitializer(): [Initializer] initializer for s -# 2307| getExpr(): [ConstructorCall] call to String -# 2307| Type = [VoidType] void -# 2307| ValueCategory = prvalue -# 2308| getStmt(1): [IfStmt] if (...) ... -# 2308| getCondition(): [VariableAccess] b -# 2308| Type = [BoolType] bool -# 2308| ValueCategory = prvalue(load) -# 2308| getThen(): [BlockStmt] { ... } -# 2309| getStmt(0): [ReturnStmt] return ... -# 2309| getExpr(): [Literal] 1 -# 2309| Type = [IntType] int -# 2309| Value = [Literal] 1 -# 2309| ValueCategory = prvalue -# 2312| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2312| Type = [VoidType] void -# 2312| ValueCategory = prvalue -# 2312| getQualifier(): [VariableAccess] s -# 2312| Type = [Struct] String -# 2312| ValueCategory = lvalue -# 2311| getStmt(2): [ReturnStmt] return ... -# 2311| getExpr(): [Literal] 0 -# 2311| Type = [IntType] int -# 2311| Value = [Literal] 0 -# 2311| ValueCategory = prvalue -# 2312| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2312| Type = [VoidType] void -# 2312| ValueCategory = prvalue -# 2312| getQualifier(): [VariableAccess] s -# 2312| Type = [Struct] String -# 2312| ValueCategory = lvalue -# 2314| [TopLevelFunction] void VoidReturnDestructors() +# 2297| ValueCategory = prvalue +# 2297| getLeftOperand(): [VariableAccess] c +# 2297| Type = [PlainCharType] char +# 2297| ValueCategory = prvalue(load) +# 2297| getRightOperand(): [Literal] 0 +# 2297| Type = [IntType] int +# 2297| Value = [Literal] 0 +# 2297| ValueCategory = prvalue +# 2297| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... +# 2297| Conversion = [IntegralConversion] integral conversion +# 2297| Type = [IntType] int +# 2297| ValueCategory = prvalue +# 2297| getUpdate(): [AssignExpr] ... = ... +# 2297| Type = [PlainCharType] char +# 2297| ValueCategory = lvalue +# 2297| getLValue(): [VariableAccess] c +# 2297| Type = [PlainCharType] char +# 2297| ValueCategory = lvalue +# 2297| getRValue(): [FunctionCall] call to pop_back +# 2297| Type = [PlainCharType] char +# 2297| ValueCategory = prvalue +# 2297| getQualifier(): [VariableAccess] s +# 2297| Type = [Struct] String +# 2297| ValueCategory = lvalue +# 2297| getStmt(): [BlockStmt] { ... } +# 2298| getStmt(0): [ExprStmt] ExprStmt +# 2298| getExpr(): [AssignExpr] ... = ... +# 2298| Type = [PlainCharType] char +# 2298| ValueCategory = lvalue +# 2298| getLValue(): [VariableAccess] c +# 2298| Type = [PlainCharType] char +# 2298| ValueCategory = lvalue +# 2298| getRValue(): [Literal] 0 +# 2298| Type = [IntType] int +# 2298| Value = [Literal] 0 +# 2298| ValueCategory = prvalue +# 2298| getRValue().getFullyConverted(): [CStyleCast] (char)... +# 2298| Conversion = [IntegralConversion] integral conversion +# 2298| Type = [PlainCharType] char +# 2298| Value = [CStyleCast] 0 +# 2298| ValueCategory = prvalue +# 2297| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2297| Type = [VoidType] void +# 2297| ValueCategory = prvalue +# 2297| getQualifier(): [VariableAccess] s2 +# 2297| Type = [Struct] String +# 2297| ValueCategory = lvalue +# 2297| getImplicitDestructorCall(1): [DestructorCall] call to ~String +# 2297| Type = [VoidType] void +# 2297| ValueCategory = prvalue +# 2297| getQualifier(): [VariableAccess] s +# 2297| Type = [Struct] String +# 2297| ValueCategory = lvalue +# 2300| getStmt(4): [ReturnStmt] return ... +# 2302| [TopLevelFunction] void IfDestructors2(bool) +# 2302| : +# 2302| getParameter(0): [Parameter] b +# 2302| Type = [BoolType] bool +# 2302| getEntryPoint(): [BlockStmt] { ... } +# 2303| getStmt(0): [IfStmt] if (...) ... +# 2303| getInitialization(): [DeclStmt] declaration +# 2303| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2303| Type = [Struct] String +# 2303| getVariable().getInitializer(): [Initializer] initializer for s +# 2303| getExpr(): [ConstructorCall] call to String +# 2303| Type = [VoidType] void +# 2303| ValueCategory = prvalue +# 2303| getArgument(0): hello +# 2303| Type = [ArrayType] const char[6] +# 2303| Value = [StringLiteral] "hello" +# 2303| ValueCategory = lvalue +# 2303| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2303| Type = [PointerType] const char * +# 2303| ValueCategory = prvalue +# 2303| getCondition(): [VariableAccess] b +# 2303| Type = [BoolType] bool +# 2303| ValueCategory = prvalue(load) +# 2303| getThen(): [BlockStmt] { ... } +# 2304| getStmt(0): [DeclStmt] declaration +# 2304| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2304| Type = [IntType] int +# 2304| getVariable().getInitializer(): [Initializer] initializer for x +# 2304| getExpr(): [Literal] 0 +# 2304| Type = [IntType] int +# 2304| Value = [Literal] 0 +# 2304| ValueCategory = prvalue +# 2305| getElse(): [BlockStmt] { ... } +# 2306| getStmt(0): [DeclStmt] declaration +# 2306| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2306| Type = [IntType] int +# 2306| getVariable().getInitializer(): [Initializer] initializer for y +# 2306| getExpr(): [Literal] 0 +# 2306| Type = [IntType] int +# 2306| Value = [Literal] 0 +# 2306| ValueCategory = prvalue +# 2307| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2307| Type = [VoidType] void +# 2307| ValueCategory = prvalue +# 2307| getQualifier(): [VariableAccess] s +# 2307| Type = [Struct] String +# 2307| ValueCategory = lvalue +# 2308| getStmt(1): [ReturnStmt] return ... +# 2310| [CopyAssignmentOperator] Bool& Bool::operator=(Bool const&) +# 2310| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Bool & +# 2310| [CopyConstructor] void Bool::Bool(Bool const&) +# 2310| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Bool & +# 2312| [Constructor] void Bool::Bool(bool) +# 2312| : +# 2312| getParameter(0): [Parameter] b_ +# 2312| Type = [BoolType] bool +# 2313| [ConversionOperator] bool Bool::operator bool() +# 2313| : +# 2314| [Destructor] void Bool::~Bool() # 2314| : -# 2314| getEntryPoint(): [BlockStmt] { ... } -# 2315| getStmt(0): [DeclStmt] declaration -# 2315| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 2315| Type = [Struct] String -# 2315| getVariable().getInitializer(): [Initializer] initializer for s -# 2315| getExpr(): [ConstructorCall] call to String -# 2315| Type = [VoidType] void -# 2315| ValueCategory = prvalue -# 2316| getStmt(1): [ReturnStmt] return ... -# 2316| getExpr(): [FunctionCall] call to VoidFunc -# 2316| Type = [VoidType] void -# 2316| ValueCategory = prvalue -# 2317| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 2317| Type = [VoidType] void -# 2317| ValueCategory = prvalue -# 2317| getQualifier(): [VariableAccess] s -# 2317| Type = [Struct] String -# 2317| ValueCategory = lvalue -# 2320| [CopyAssignmentOperator] return_routine_type::HasVoidToIntFunc& return_routine_type::HasVoidToIntFunc::operator=(return_routine_type::HasVoidToIntFunc const&) -# 2320| : +# 2317| [TopLevelFunction] void IfDestructors3(bool) +# 2317| : +# 2317| getParameter(0): [Parameter] b +# 2317| Type = [BoolType] bool +# 2317| getEntryPoint(): [BlockStmt] { ... } +# 2318| getStmt(0): [IfStmt] if (...) ... +# 2318| getCondition(): [ConditionDeclExpr] (condition decl) +# 2318| Type = [BoolType] bool +# 2318| ValueCategory = prvalue +# 2318| getChild(0): [FunctionCall] call to operator bool +# 2318| Type = [BoolType] bool +# 2318| ValueCategory = prvalue +# 2318| getQualifier(): [VariableAccess] B +# 2318| Type = [Class] Bool +# 2318| ValueCategory = prvalue(load) +# 2318| getThen(): [BlockStmt] { ... } +# 2319| getStmt(0): [DeclStmt] declaration +# 2319| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s1 +# 2319| Type = [Struct] String +# 2319| getVariable().getInitializer(): [Initializer] initializer for s1 +# 2319| getExpr(): [ConstructorCall] call to String +# 2319| Type = [VoidType] void +# 2319| ValueCategory = prvalue +# 2320| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2320| Type = [VoidType] void +# 2320| ValueCategory = prvalue +# 2320| getQualifier(): [VariableAccess] s1 +# 2320| Type = [Struct] String +# 2320| ValueCategory = lvalue +# 2320| getElse(): [BlockStmt] { ... } +# 2321| getStmt(0): [DeclStmt] declaration +# 2321| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s2 +# 2321| Type = [Struct] String +# 2321| getVariable().getInitializer(): [Initializer] initializer for s2 +# 2321| getExpr(): [ConstructorCall] call to String +# 2321| Type = [VoidType] void +# 2321| ValueCategory = prvalue +# 2322| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2322| Type = [VoidType] void +# 2322| ValueCategory = prvalue +# 2322| getQualifier(): [VariableAccess] s2 +# 2322| Type = [Struct] String +# 2322| ValueCategory = lvalue +# 2322| getImplicitDestructorCall(0): [DestructorCall] call to ~Bool +# 2322| Type = [VoidType] void +# 2322| ValueCategory = prvalue +# 2322| getQualifier(): [VariableAccess] B +# 2322| Type = [Class] Bool +# 2322| ValueCategory = lvalue +# 2323| getStmt(1): [ReturnStmt] return ... +# 2325| [TopLevelFunction] void WhileLoopDestructors(bool) +# 2325| : +# 2325| getParameter(0): [Parameter] b +# 2325| Type = [BoolType] bool +# 2325| getEntryPoint(): [BlockStmt] { ... } +# 2326| getStmt(0): [BlockStmt] { ... } +# 2327| getStmt(0): [DeclStmt] declaration +# 2327| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2327| Type = [Struct] String +# 2327| getVariable().getInitializer(): [Initializer] initializer for s +# 2327| getExpr(): [ConstructorCall] call to String +# 2327| Type = [VoidType] void +# 2327| ValueCategory = prvalue +# 2328| getStmt(1): [WhileStmt] while (...) ... +# 2328| getCondition(): [VariableAccess] b +# 2328| Type = [BoolType] bool +# 2328| ValueCategory = prvalue(load) +# 2328| getStmt(): [BlockStmt] { ... } +# 2329| getStmt(0): [ExprStmt] ExprStmt +# 2329| getExpr(): [AssignExpr] ... = ... +# 2329| Type = [BoolType] bool +# 2329| ValueCategory = lvalue +# 2329| getLValue(): [VariableAccess] b +# 2329| Type = [BoolType] bool +# 2329| ValueCategory = lvalue +# 2329| getRValue(): [Literal] 0 +# 2329| Type = [BoolType] bool +# 2329| Value = [Literal] 0 +# 2329| ValueCategory = prvalue +# 2331| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2331| Type = [VoidType] void +# 2331| ValueCategory = prvalue +# 2331| getQualifier(): [VariableAccess] s +# 2331| Type = [Struct] String +# 2331| ValueCategory = lvalue +# 2333| getStmt(1): [BlockStmt] { ... } +# 2334| getStmt(0): [WhileStmt] while (...) ... +# 2334| getCondition(): [ConditionDeclExpr] (condition decl) +# 2334| Type = [BoolType] bool +# 2334| ValueCategory = prvalue +# 2334| getChild(0): [FunctionCall] call to operator bool +# 2334| Type = [BoolType] bool +# 2334| ValueCategory = prvalue +# 2334| getQualifier(): [VariableAccess] B +# 2334| Type = [Class] Bool +# 2334| ValueCategory = prvalue(load) +# 2334| getStmt(): [BlockStmt] { ... } +# 2335| getStmt(0): [ExprStmt] ExprStmt +# 2335| getExpr(): [AssignExpr] ... = ... +# 2335| Type = [BoolType] bool +# 2335| ValueCategory = lvalue +# 2335| getLValue(): [VariableAccess] b +# 2335| Type = [BoolType] bool +# 2335| ValueCategory = lvalue +# 2335| getRValue(): [Literal] 0 +# 2335| Type = [BoolType] bool +# 2335| Value = [Literal] 0 +# 2335| ValueCategory = prvalue +# 2336| getImplicitDestructorCall(0): [DestructorCall] call to ~Bool +# 2336| Type = [VoidType] void +# 2336| ValueCategory = prvalue +# 2336| getQualifier(): [VariableAccess] B +# 2336| Type = [Class] Bool +# 2336| ValueCategory = lvalue +# 2336| getImplicitDestructorCall(0): [DestructorCall] call to ~Bool +# 2336| Type = [VoidType] void +# 2336| ValueCategory = prvalue +# 2336| getQualifier(): [VariableAccess] B +# 2336| Type = [Class] Bool +# 2336| ValueCategory = lvalue +# 2338| getStmt(2): [ReturnStmt] return ... +# 2340| [TopLevelFunction] void VoidFunc() +# 2340| : +# 2340| getEntryPoint(): [BlockStmt] { ... } +# 2340| getStmt(0): [ReturnStmt] return ... +# 2342| [TopLevelFunction] void IfReturnDestructors(bool) +# 2342| : +# 2342| getParameter(0): [Parameter] b +# 2342| Type = [BoolType] bool +# 2342| getEntryPoint(): [BlockStmt] { ... } +# 2343| getStmt(0): [DeclStmt] declaration +# 2343| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2343| Type = [Struct] String +# 2343| getVariable().getInitializer(): [Initializer] initializer for s +# 2343| getExpr(): [ConstructorCall] call to String +# 2343| Type = [VoidType] void +# 2343| ValueCategory = prvalue +# 2344| getStmt(1): [IfStmt] if (...) ... +# 2344| getCondition(): [VariableAccess] b +# 2344| Type = [BoolType] bool +# 2344| ValueCategory = prvalue(load) +# 2344| getThen(): [BlockStmt] { ... } +# 2345| getStmt(0): [ReturnStmt] return ... +# 2351| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2351| Type = [VoidType] void +# 2351| ValueCategory = prvalue +# 2351| getQualifier(): [VariableAccess] s +# 2351| Type = [Struct] String +# 2351| ValueCategory = lvalue +# 2347| getStmt(2): [IfStmt] if (...) ... +# 2347| getCondition(): [VariableAccess] b +# 2347| Type = [BoolType] bool +# 2347| ValueCategory = prvalue(load) +# 2347| getThen(): [BlockStmt] { ... } +# 2348| getStmt(0): [ReturnStmt] return ... +# 2348| getExpr(): [FunctionCall] call to VoidFunc +# 2348| Type = [VoidType] void +# 2348| ValueCategory = prvalue +# 2351| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2351| Type = [VoidType] void +# 2351| ValueCategory = prvalue +# 2351| getQualifier(): [VariableAccess] s +# 2351| Type = [Struct] String +# 2351| ValueCategory = lvalue +# 2350| getStmt(3): [ExprStmt] ExprStmt +# 2350| getExpr(): [VariableAccess] s +# 2350| Type = [Struct] String +# 2350| ValueCategory = lvalue +# 2351| getStmt(4): [ReturnStmt] return ... +# 2351| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2351| Type = [VoidType] void +# 2351| ValueCategory = prvalue +# 2351| getQualifier(): [VariableAccess] s +# 2351| Type = [Struct] String +# 2351| ValueCategory = lvalue +# 2353| [TopLevelFunction] int IfReturnDestructors3(bool) +# 2353| : +# 2353| getParameter(0): [Parameter] b +# 2353| Type = [BoolType] bool +# 2353| getEntryPoint(): [BlockStmt] { ... } +# 2354| getStmt(0): [DeclStmt] declaration +# 2354| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2354| Type = [Struct] String +# 2354| getVariable().getInitializer(): [Initializer] initializer for s +# 2354| getExpr(): [ConstructorCall] call to String +# 2354| Type = [VoidType] void +# 2354| ValueCategory = prvalue +# 2355| getStmt(1): [IfStmt] if (...) ... +# 2355| getCondition(): [VariableAccess] b +# 2355| Type = [BoolType] bool +# 2355| ValueCategory = prvalue(load) +# 2355| getThen(): [BlockStmt] { ... } +# 2356| getStmt(0): [ReturnStmt] return ... +# 2356| getExpr(): [Literal] 1 +# 2356| Type = [IntType] int +# 2356| Value = [Literal] 1 +# 2356| ValueCategory = prvalue +# 2359| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2359| Type = [VoidType] void +# 2359| ValueCategory = prvalue +# 2359| getQualifier(): [VariableAccess] s +# 2359| Type = [Struct] String +# 2359| ValueCategory = lvalue +# 2358| getStmt(2): [ReturnStmt] return ... +# 2358| getExpr(): [Literal] 0 +# 2358| Type = [IntType] int +# 2358| Value = [Literal] 0 +# 2358| ValueCategory = prvalue +# 2359| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2359| Type = [VoidType] void +# 2359| ValueCategory = prvalue +# 2359| getQualifier(): [VariableAccess] s +# 2359| Type = [Struct] String +# 2359| ValueCategory = lvalue +# 2361| [TopLevelFunction] void VoidReturnDestructors() +# 2361| : +# 2361| getEntryPoint(): [BlockStmt] { ... } +# 2362| getStmt(0): [DeclStmt] declaration +# 2362| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 2362| Type = [Struct] String +# 2362| getVariable().getInitializer(): [Initializer] initializer for s +# 2362| getExpr(): [ConstructorCall] call to String +# 2362| Type = [VoidType] void +# 2362| ValueCategory = prvalue +# 2363| getStmt(1): [ReturnStmt] return ... +# 2363| getExpr(): [FunctionCall] call to VoidFunc +# 2363| Type = [VoidType] void +# 2363| ValueCategory = prvalue +# 2364| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 2364| Type = [VoidType] void +# 2364| ValueCategory = prvalue +# 2364| getQualifier(): [VariableAccess] s +# 2364| Type = [Struct] String +# 2364| ValueCategory = lvalue +# 2367| [CopyAssignmentOperator] return_routine_type::HasVoidToIntFunc& return_routine_type::HasVoidToIntFunc::operator=(return_routine_type::HasVoidToIntFunc const&) +# 2367| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const HasVoidToIntFunc & -# 2320| [MoveAssignmentOperator] return_routine_type::HasVoidToIntFunc& return_routine_type::HasVoidToIntFunc::operator=(return_routine_type::HasVoidToIntFunc&&) -# 2320| : +# 2367| [MoveAssignmentOperator] return_routine_type::HasVoidToIntFunc& return_routine_type::HasVoidToIntFunc::operator=(return_routine_type::HasVoidToIntFunc&&) +# 2367| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] HasVoidToIntFunc && -# 2322| [MemberFunction] void return_routine_type::HasVoidToIntFunc::VoidToInt(int) -# 2322| : -# 2322| getParameter(0): [Parameter] (unnamed parameter 0) -# 2322| Type = [IntType] int -# 2327| [TopLevelFunction] return_routine_type::VoidToIntMemberFunc return_routine_type::GetVoidToIntFunc() -# 2327| : -# 2328| getEntryPoint(): [BlockStmt] { ... } -# 2329| getStmt(0): [ReturnStmt] return ... -# 2329| getExpr(): [FunctionAccess] VoidToInt -# 2329| Type = [RoutineType] ..()(..) -# 2329| ValueCategory = prvalue +# 2369| [MemberFunction] void return_routine_type::HasVoidToIntFunc::VoidToInt(int) +# 2369| : +# 2369| getParameter(0): [Parameter] (unnamed parameter 0) +# 2369| Type = [IntType] int +# 2374| [TopLevelFunction] return_routine_type::VoidToIntMemberFunc return_routine_type::GetVoidToIntFunc() +# 2374| : +# 2375| getEntryPoint(): [BlockStmt] { ... } +# 2376| getStmt(0): [ReturnStmt] return ... +# 2376| getExpr(): [FunctionAccess] VoidToInt +# 2376| Type = [RoutineType] ..()(..) +# 2376| ValueCategory = prvalue perf-regression.cpp: # 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&) # 4| : diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected index 510a271b7ac..a5a09578750 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -738,6 +738,499 @@ complex.c: # 58| v58_6(void) = AliasedUse : m58_3 # 58| v58_7(void) = ExitFunction : +destructors_for_temps.cpp: +# 9| void ClassWithConstructor::ClassWithConstructor(ClassWithConstructor&&) +# 9| Block 0 +# 9| v9_1(void) = EnterFunction : +# 9| m9_2(unknown) = AliasedDefinition : +# 9| m9_3(unknown) = InitializeNonLocal : +# 9| m9_4(unknown) = Chi : total:m9_2, partial:m9_3 +# 9| r9_5(glval) = VariableAddress[#this] : +# 9| m9_6(glval) = InitializeParameter[#this] : &:r9_5 +# 9| r9_7(glval) = Load[#this] : &:r9_5, m9_6 +# 9| m9_8(ClassWithConstructor) = InitializeIndirection[#this] : &:r9_7 +#-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : +#-----| m0_2(ClassWithConstructor &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 +#-----| r0_3(ClassWithConstructor &&) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 +#-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 9| v9_9(void) = NoOp : +# 9| v9_10(void) = ReturnIndirection[#this] : &:r9_7, m9_8 +#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 +# 9| v9_11(void) = ReturnVoid : +# 9| v9_12(void) = AliasedUse : m9_3 +# 9| v9_13(void) = ExitFunction : + +# 14| char temp_test() +# 14| Block 0 +# 14| v14_1(void) = EnterFunction : +# 14| m14_2(unknown) = AliasedDefinition : +# 14| m14_3(unknown) = InitializeNonLocal : +# 14| m14_4(unknown) = Chi : total:m14_2, partial:m14_3 +# 15| r15_1(glval) = VariableAddress[x] : +# 15| r15_2(glval) = VariableAddress[#temp15:14] : +# 15| m15_3(ClassWithDestructor2) = Uninitialized[#temp15:14] : &:r15_2 +# 15| r15_4(glval) = FunctionAddress[ClassWithDestructor2] : +# 15| v15_5(void) = Call[ClassWithDestructor2] : func:r15_4, this:r15_2 +# 15| m15_6(unknown) = ^CallSideEffect : ~m14_4 +# 15| m15_7(unknown) = Chi : total:m14_4, partial:m15_6 +# 15| m15_8(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r15_2 +# 15| m15_9(ClassWithDestructor2) = Chi : total:m15_3, partial:m15_8 +# 15| r15_10(glval) = FunctionAddress[get_x] : +# 15| r15_11(char) = Call[get_x] : func:r15_10, this:r15_2 +# 15| m15_12(unknown) = ^CallSideEffect : ~m15_7 +# 15| m15_13(unknown) = Chi : total:m15_7, partial:m15_12 +# 15| v15_14(void) = ^IndirectReadSideEffect[-1] : &:r15_2, m15_9 +# 15| m15_15(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r15_2 +# 15| m15_16(ClassWithDestructor2) = Chi : total:m15_9, partial:m15_15 +# 15| m15_17(char) = Store[x] : &:r15_1, r15_11 +# 16| r16_1(glval) = VariableAddress[y] : +# 16| m16_2(ClassWithConstructor) = Uninitialized[y] : &:r16_1 +# 16| r16_3(glval) = FunctionAddress[ClassWithConstructor] : +# 16| r16_4(char) = Constant[97] : +# 16| r16_5(glval) = VariableAddress[#temp16:33] : +# 16| m16_6(ClassWithDestructor2) = Uninitialized[#temp16:33] : &:r16_5 +# 16| r16_7(glval) = FunctionAddress[ClassWithDestructor2] : +# 16| v16_8(void) = Call[ClassWithDestructor2] : func:r16_7, this:r16_5 +# 16| m16_9(unknown) = ^CallSideEffect : ~m15_13 +# 16| m16_10(unknown) = Chi : total:m15_13, partial:m16_9 +# 16| m16_11(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r16_5 +# 16| m16_12(ClassWithDestructor2) = Chi : total:m16_6, partial:m16_11 +# 16| r16_13(glval) = FunctionAddress[get_x] : +# 16| r16_14(char) = Call[get_x] : func:r16_13, this:r16_5 +# 16| m16_15(unknown) = ^CallSideEffect : ~m16_10 +# 16| m16_16(unknown) = Chi : total:m16_10, partial:m16_15 +# 16| v16_17(void) = ^IndirectReadSideEffect[-1] : &:r16_5, m16_12 +# 16| m16_18(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r16_5 +# 16| m16_19(ClassWithDestructor2) = Chi : total:m16_12, partial:m16_18 +# 16| v16_20(void) = Call[ClassWithConstructor] : func:r16_3, this:r16_1, 0:r16_4, 1:r16_14 +# 16| m16_21(unknown) = ^CallSideEffect : ~m16_16 +# 16| m16_22(unknown) = Chi : total:m16_16, partial:m16_21 +# 16| m16_23(ClassWithConstructor) = ^IndirectMayWriteSideEffect[-1] : &:r16_1 +# 16| m16_24(ClassWithConstructor) = Chi : total:m16_2, partial:m16_23 +# 17| r17_1(glval) = VariableAddress[#return] : +# 17| r17_2(glval) = VariableAddress[#temp17:12] : +# 17| m17_3(ClassWithDestructor2) = Uninitialized[#temp17:12] : &:r17_2 +# 17| r17_4(glval) = FunctionAddress[ClassWithDestructor2] : +# 17| v17_5(void) = Call[ClassWithDestructor2] : func:r17_4, this:r17_2 +# 17| m17_6(unknown) = ^CallSideEffect : ~m16_22 +# 17| m17_7(unknown) = Chi : total:m16_22, partial:m17_6 +# 17| m17_8(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r17_2 +# 17| m17_9(ClassWithDestructor2) = Chi : total:m17_3, partial:m17_8 +# 17| r17_10(glval) = FunctionAddress[get_x] : +# 17| r17_11(char) = Call[get_x] : func:r17_10, this:r17_2 +# 17| m17_12(unknown) = ^CallSideEffect : ~m17_7 +# 17| m17_13(unknown) = Chi : total:m17_7, partial:m17_12 +# 17| v17_14(void) = ^IndirectReadSideEffect[-1] : &:r17_2, m17_9 +# 17| m17_15(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r17_2 +# 17| m17_16(ClassWithDestructor2) = Chi : total:m17_9, partial:m17_15 +# 17| m17_17(char) = Store[#return] : &:r17_1, r17_11 +# 14| r14_5(glval) = VariableAddress[#return] : +# 14| v14_6(void) = ReturnValue : &:r14_5, m17_17 +# 14| v14_7(void) = AliasedUse : ~m17_13 +# 14| v14_8(void) = ExitFunction : + +# 21| char temp_test2() +# 21| Block 0 +# 21| v21_1(void) = EnterFunction : +# 21| m21_2(unknown) = AliasedDefinition : +# 21| m21_3(unknown) = InitializeNonLocal : +# 21| m21_4(unknown) = Chi : total:m21_2, partial:m21_3 +# 22| r22_1(glval) = FunctionAddress[operator new] : +# 22| r22_2(unsigned long) = Constant[1] : +# 22| r22_3(void *) = Call[operator new] : func:r22_1, 0:r22_2 +# 22| m22_4(unknown) = ^CallSideEffect : ~m21_4 +# 22| m22_5(unknown) = Chi : total:m21_4, partial:m22_4 +# 22| m22_6(unknown) = ^InitializeDynamicAllocation : &:r22_3 +# 22| r22_7(ClassWithDestructor2 *) = Convert : r22_3 +# 22| r22_8(glval) = FunctionAddress[ClassWithDestructor2] : +# 22| v22_9(void) = Call[ClassWithDestructor2] : func:r22_8, this:r22_7 +# 22| m22_10(unknown) = ^CallSideEffect : ~m22_5 +# 22| m22_11(unknown) = Chi : total:m22_5, partial:m22_10 +# 22| m22_12(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r22_7 +# 22| m22_13(unknown) = Chi : total:m22_6, partial:m22_12 +# 23| r23_1(glval) = VariableAddress[#return] : +# 23| r23_2(glval) = VariableAddress[#temp23:12] : +# 23| m23_3(ClassWithDestructor2) = Uninitialized[#temp23:12] : &:r23_2 +# 23| r23_4(glval) = FunctionAddress[ClassWithDestructor2] : +# 23| v23_5(void) = Call[ClassWithDestructor2] : func:r23_4, this:r23_2 +# 23| m23_6(unknown) = ^CallSideEffect : ~m22_11 +# 23| m23_7(unknown) = Chi : total:m22_11, partial:m23_6 +# 23| m23_8(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_2 +# 23| m23_9(ClassWithDestructor2) = Chi : total:m23_3, partial:m23_8 +# 23| r23_10(glval) = FunctionAddress[get_x] : +# 23| r23_11(char) = Call[get_x] : func:r23_10, this:r23_2 +# 23| m23_12(unknown) = ^CallSideEffect : ~m23_7 +# 23| m23_13(unknown) = Chi : total:m23_7, partial:m23_12 +# 23| v23_14(void) = ^IndirectReadSideEffect[-1] : &:r23_2, m23_9 +# 23| m23_15(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_2 +# 23| m23_16(ClassWithDestructor2) = Chi : total:m23_9, partial:m23_15 +# 23| r23_17(int) = Convert : r23_11 +# 23| r23_18(glval) = VariableAddress[#temp23:45] : +# 23| m23_19(ClassWithDestructor2) = Uninitialized[#temp23:45] : &:r23_18 +# 23| r23_20(glval) = FunctionAddress[ClassWithDestructor2] : +# 23| v23_21(void) = Call[ClassWithDestructor2] : func:r23_20, this:r23_18 +# 23| m23_22(unknown) = ^CallSideEffect : ~m23_13 +# 23| m23_23(unknown) = Chi : total:m23_13, partial:m23_22 +# 23| m23_24(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_18 +# 23| m23_25(ClassWithDestructor2) = Chi : total:m23_19, partial:m23_24 +# 23| r23_26(glval) = FunctionAddress[get_x] : +# 23| r23_27(char) = Call[get_x] : func:r23_26, this:r23_18 +# 23| m23_28(unknown) = ^CallSideEffect : ~m23_23 +# 23| m23_29(unknown) = Chi : total:m23_23, partial:m23_28 +# 23| v23_30(void) = ^IndirectReadSideEffect[-1] : &:r23_18, m23_25 +# 23| m23_31(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_18 +# 23| m23_32(ClassWithDestructor2) = Chi : total:m23_25, partial:m23_31 +# 23| r23_33(int) = Convert : r23_27 +# 23| r23_34(int) = Add : r23_17, r23_33 +# 23| r23_35(char) = Convert : r23_34 +# 23| m23_36(char) = Store[#return] : &:r23_1, r23_35 +# 21| r21_5(glval) = VariableAddress[#return] : +# 21| v21_6(void) = ReturnValue : &:r21_5, m23_36 +# 21| v21_7(void) = AliasedUse : ~m23_29 +# 21| v21_8(void) = ExitFunction : + +# 29| void temp_test3() +# 29| Block 0 +# 29| v29_1(void) = EnterFunction : +# 29| m29_2(unknown) = AliasedDefinition : +# 29| m29_3(unknown) = InitializeNonLocal : +# 29| m29_4(unknown) = Chi : total:m29_2, partial:m29_3 +# 30| r30_1(glval) = VariableAddress[rs] : +# 30| r30_2(glval) = VariableAddress[#temp30:38] : +# 30| r30_3(glval) = FunctionAddress[returnValue] : +# 30| r30_4(ClassWithDestructor2) = Call[returnValue] : func:r30_3 +# 30| m30_5(unknown) = ^CallSideEffect : ~m29_4 +# 30| m30_6(unknown) = Chi : total:m29_4, partial:m30_5 +# 30| m30_7(ClassWithDestructor2) = Store[#temp30:38] : &:r30_2, r30_4 +# 30| r30_8(glval) = Convert : r30_2 +# 30| r30_9(ClassWithDestructor2 &) = CopyValue : r30_8 +# 30| m30_10(ClassWithDestructor2 &) = Store[rs] : &:r30_1, r30_9 +# 31| v31_1(void) = NoOp : +# 29| v29_5(void) = ReturnVoid : +# 29| v29_6(void) = AliasedUse : ~m30_6 +# 29| v29_7(void) = ExitFunction : + +# 33| void temp_test4() +# 33| Block 0 +# 33| v33_1(void) = EnterFunction : +# 33| m33_2(unknown) = AliasedDefinition : +# 33| m33_3(unknown) = InitializeNonLocal : +# 33| m33_4(unknown) = Chi : total:m33_2, partial:m33_3 +# 34| r34_1(glval) = VariableAddress[c] : +# 34| m34_2(ClassWithDestructor2) = Uninitialized[c] : &:r34_1 +# 34| r34_3(glval) = FunctionAddress[ClassWithDestructor2] : +# 34| v34_4(void) = Call[ClassWithDestructor2] : func:r34_3, this:r34_1 +# 34| m34_5(unknown) = ^CallSideEffect : ~m33_4 +# 34| m34_6(unknown) = Chi : total:m33_4, partial:m34_5 +# 34| m34_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r34_1 +# 34| m34_8(ClassWithDestructor2) = Chi : total:m34_2, partial:m34_7 +# 35| r35_1(glval) = VariableAddress[rs2] : +# 35| r35_2(glval) = VariableAddress[#temp35:39] : +# 35| r35_3(glval) = FunctionAddress[returnValue] : +# 35| r35_4(ClassWithDestructor2) = Call[returnValue] : func:r35_3 +# 35| m35_5(unknown) = ^CallSideEffect : ~m34_6 +# 35| m35_6(unknown) = Chi : total:m34_6, partial:m35_5 +# 35| m35_7(ClassWithDestructor2) = Store[#temp35:39] : &:r35_2, r35_4 +# 35| r35_8(glval) = Convert : r35_2 +# 35| r35_9(ClassWithDestructor2 &) = CopyValue : r35_8 +# 35| m35_10(ClassWithDestructor2 &) = Store[rs2] : &:r35_1, r35_9 +# 36| v36_1(void) = NoOp : +# 36| r36_2(glval) = VariableAddress[c] : +# 36| r36_3(glval) = FunctionAddress[~ClassWithDestructor2] : +# 36| v36_4(void) = Call[~ClassWithDestructor2] : func:r36_3, this:r36_2 +# 36| m36_5(unknown) = ^CallSideEffect : ~m35_6 +# 36| m36_6(unknown) = Chi : total:m35_6, partial:m36_5 +# 36| v36_7(void) = ^IndirectReadSideEffect[-1] : &:r36_2, m34_8 +# 36| m36_8(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r36_2 +# 36| m36_9(ClassWithDestructor2) = Chi : total:m34_8, partial:m36_8 +# 33| v33_5(void) = ReturnVoid : +# 33| v33_6(void) = AliasedUse : ~m36_6 +# 33| v33_7(void) = ExitFunction : + +# 38| void temp_test5(bool) +# 38| Block 0 +# 38| v38_1(void) = EnterFunction : +# 38| m38_2(unknown) = AliasedDefinition : +# 38| m38_3(unknown) = InitializeNonLocal : +# 38| m38_4(unknown) = Chi : total:m38_2, partial:m38_3 +# 38| r38_5(glval) = VariableAddress[b] : +# 38| m38_6(bool) = InitializeParameter[b] : &:r38_5 +# 39| r39_1(glval) = VariableAddress[#temp39:3] : +# 39| r39_2(glval) = VariableAddress[b] : +# 39| r39_3(bool) = Load[b] : &:r39_2, m38_6 +# 39| v39_4(void) = ConditionalBranch : r39_3 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 39| Block 1 +# 39| m39_5(unknown) = Phi : from 2:~m39_15, from 3:~m39_26 +# 39| m39_6(ClassWithDestructor2) = Phi : from 2:m39_20, from 3:m39_31 +# 39| r39_7(glval) = VariableAddress[#temp39:3] : +# 39| r39_8(ClassWithDestructor2) = Load[#temp39:3] : &:r39_7, m39_6 +# 39| m39_9(ClassWithDestructor2) = Store[#temp39:3] : &:r39_1, r39_8 +# 40| v40_1(void) = NoOp : +# 38| v38_7(void) = ReturnVoid : +# 38| v38_8(void) = AliasedUse : ~m39_5 +# 38| v38_9(void) = ExitFunction : + +# 39| Block 2 +# 39| r39_10(glval) = VariableAddress[#temp39:7] : +# 39| m39_11(ClassWithDestructor2) = Uninitialized[#temp39:7] : &:r39_10 +# 39| r39_12(glval) = FunctionAddress[ClassWithDestructor2] : +# 39| v39_13(void) = Call[ClassWithDestructor2] : func:r39_12, this:r39_10 +# 39| m39_14(unknown) = ^CallSideEffect : ~m38_4 +# 39| m39_15(unknown) = Chi : total:m38_4, partial:m39_14 +# 39| m39_16(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r39_10 +# 39| m39_17(ClassWithDestructor2) = Chi : total:m39_11, partial:m39_16 +# 39| r39_18(ClassWithDestructor2) = Load[#temp39:7] : &:r39_10, m39_17 +# 39| r39_19(glval) = VariableAddress[#temp39:3] : +# 39| m39_20(ClassWithDestructor2) = Store[#temp39:3] : &:r39_19, r39_18 +#-----| Goto -> Block 1 + +# 39| Block 3 +# 39| r39_21(glval) = VariableAddress[#temp39:32] : +# 39| m39_22(ClassWithDestructor2) = Uninitialized[#temp39:32] : &:r39_21 +# 39| r39_23(glval) = FunctionAddress[ClassWithDestructor2] : +# 39| v39_24(void) = Call[ClassWithDestructor2] : func:r39_23, this:r39_21 +# 39| m39_25(unknown) = ^CallSideEffect : ~m38_4 +# 39| m39_26(unknown) = Chi : total:m38_4, partial:m39_25 +# 39| m39_27(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r39_21 +# 39| m39_28(ClassWithDestructor2) = Chi : total:m39_22, partial:m39_27 +# 39| r39_29(ClassWithDestructor2) = Load[#temp39:32] : &:r39_21, m39_28 +# 39| r39_30(glval) = VariableAddress[#temp39:3] : +# 39| m39_31(ClassWithDestructor2) = Store[#temp39:3] : &:r39_30, r39_29 +#-----| Goto -> Block 1 + +# 42| void temp_test6(bool) +# 42| Block 0 +# 42| v42_1(void) = EnterFunction : +# 42| m42_2(unknown) = AliasedDefinition : +# 42| m42_3(unknown) = InitializeNonLocal : +# 42| m42_4(unknown) = Chi : total:m42_2, partial:m42_3 +# 42| r42_5(glval) = VariableAddress[b] : +# 42| m42_6(bool) = InitializeParameter[b] : &:r42_5 +# 43| r43_1(glval) = VariableAddress[c] : +# 43| m43_2(ClassWithDestructor2) = Uninitialized[c] : &:r43_1 +# 43| r43_3(glval) = FunctionAddress[ClassWithDestructor2] : +# 43| v43_4(void) = Call[ClassWithDestructor2] : func:r43_3, this:r43_1 +# 43| m43_5(unknown) = ^CallSideEffect : ~m42_4 +# 43| m43_6(unknown) = Chi : total:m42_4, partial:m43_5 +# 43| m43_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r43_1 +# 43| m43_8(ClassWithDestructor2) = Chi : total:m43_2, partial:m43_7 +# 44| r44_1(glval) = VariableAddress[b] : +# 44| r44_2(bool) = Load[b] : &:r44_1, m42_6 +# 44| v44_3(void) = ConditionalBranch : r44_2 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 42| Block 1 +# 42| m42_7(unknown) = Phi : from 2:~m45_22, from 4:~m47_6 +# 42| v42_8(void) = AliasedUse : ~m42_7 +# 42| v42_9(void) = ExitFunction : + +# 42| Block 2 +# 42| v42_10(void) = Unwind : +#-----| Goto -> Block 1 + +# 45| Block 3 +# 45| r45_1(glval) = VariableAddress[#throw45:7] : +# 45| m45_2(ClassWithConstructor) = Uninitialized[#throw45:7] : &:r45_1 +# 45| r45_3(glval) = FunctionAddress[ClassWithConstructor] : +# 45| r45_4(char) = Constant[120] : +# 45| r45_5(glval) = VariableAddress[#temp45:39] : +# 45| m45_6(ClassWithDestructor2) = Uninitialized[#temp45:39] : &:r45_5 +# 45| r45_7(glval) = FunctionAddress[ClassWithDestructor2] : +# 45| v45_8(void) = Call[ClassWithDestructor2] : func:r45_7, this:r45_5 +# 45| m45_9(unknown) = ^CallSideEffect : ~m43_6 +# 45| m45_10(unknown) = Chi : total:m43_6, partial:m45_9 +# 45| m45_11(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r45_5 +# 45| m45_12(ClassWithDestructor2) = Chi : total:m45_6, partial:m45_11 +# 45| r45_13(glval) = FunctionAddress[get_x] : +# 45| r45_14(char) = Call[get_x] : func:r45_13, this:r45_5 +# 45| m45_15(unknown) = ^CallSideEffect : ~m45_10 +# 45| m45_16(unknown) = Chi : total:m45_10, partial:m45_15 +# 45| v45_17(void) = ^IndirectReadSideEffect[-1] : &:r45_5, m45_12 +# 45| m45_18(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r45_5 +# 45| m45_19(ClassWithDestructor2) = Chi : total:m45_12, partial:m45_18 +# 45| v45_20(void) = Call[ClassWithConstructor] : func:r45_3, this:r45_1, 0:r45_4, 1:r45_14 +# 45| m45_21(unknown) = ^CallSideEffect : ~m45_16 +# 45| m45_22(unknown) = Chi : total:m45_16, partial:m45_21 +# 45| m45_23(ClassWithConstructor) = ^IndirectMayWriteSideEffect[-1] : &:r45_1 +# 45| m45_24(ClassWithConstructor) = Chi : total:m45_2, partial:m45_23 +# 45| v45_25(void) = ThrowValue : &:r45_1, m45_24 +#-----| Exception -> Block 2 + +# 47| Block 4 +# 47| v47_1(void) = NoOp : +# 47| r47_2(glval) = VariableAddress[c] : +# 47| r47_3(glval) = FunctionAddress[~ClassWithDestructor2] : +# 47| v47_4(void) = Call[~ClassWithDestructor2] : func:r47_3, this:r47_2 +# 47| m47_5(unknown) = ^CallSideEffect : ~m43_6 +# 47| m47_6(unknown) = Chi : total:m43_6, partial:m47_5 +# 47| v47_7(void) = ^IndirectReadSideEffect[-1] : &:r47_2, m43_8 +# 47| m47_8(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r47_2 +# 47| m47_9(ClassWithDestructor2) = Chi : total:m43_8, partial:m47_8 +# 42| v42_11(void) = ReturnVoid : +#-----| Goto -> Block 1 + +# 49| void temp_test7(bool) +# 49| Block 0 +# 49| v49_1(void) = EnterFunction : +# 49| m49_2(unknown) = AliasedDefinition : +# 49| m49_3(unknown) = InitializeNonLocal : +# 49| m49_4(unknown) = Chi : total:m49_2, partial:m49_3 +# 49| r49_5(glval) = VariableAddress[b] : +# 49| m49_6(bool) = InitializeParameter[b] : &:r49_5 +# 50| r50_1(glval) = VariableAddress[c] : +# 50| m50_2(ClassWithDestructor2) = Uninitialized[c] : &:r50_1 +# 50| r50_3(glval) = FunctionAddress[ClassWithDestructor2] : +# 50| v50_4(void) = Call[ClassWithDestructor2] : func:r50_3, this:r50_1 +# 50| m50_5(unknown) = ^CallSideEffect : ~m49_4 +# 50| m50_6(unknown) = Chi : total:m49_4, partial:m50_5 +# 50| m50_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r50_1 +# 50| m50_8(ClassWithDestructor2) = Chi : total:m50_2, partial:m50_7 +# 51| r51_1(glval) = VariableAddress[#temp51:5] : +# 51| r51_2(glval) = VariableAddress[b] : +# 51| r51_3(bool) = Load[b] : &:r51_2, m49_6 +# 51| v51_4(void) = ConditionalBranch : r51_3 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 49| Block 1 +# 49| m49_7(unknown) = Phi : from 2:~m51_26, from 4:~m52_6 +# 49| v49_8(void) = AliasedUse : ~m49_7 +# 49| v49_9(void) = ExitFunction : + +# 49| Block 2 +# 49| v49_10(void) = Unwind : +#-----| Goto -> Block 1 + +# 51| Block 3 +# 51| r51_5(glval) = VariableAddress[#throw51:9] : +# 51| m51_6(ClassWithConstructor) = Uninitialized[#throw51:9] : &:r51_5 +# 51| r51_7(glval) = FunctionAddress[ClassWithConstructor] : +# 51| r51_8(char) = Constant[120] : +# 51| r51_9(glval) = VariableAddress[#temp51:41] : +# 51| m51_10(ClassWithDestructor2) = Uninitialized[#temp51:41] : &:r51_9 +# 51| r51_11(glval) = FunctionAddress[ClassWithDestructor2] : +# 51| v51_12(void) = Call[ClassWithDestructor2] : func:r51_11, this:r51_9 +# 51| m51_13(unknown) = ^CallSideEffect : ~m50_6 +# 51| m51_14(unknown) = Chi : total:m50_6, partial:m51_13 +# 51| m51_15(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r51_9 +# 51| m51_16(ClassWithDestructor2) = Chi : total:m51_10, partial:m51_15 +# 51| r51_17(glval) = FunctionAddress[get_x] : +# 51| r51_18(char) = Call[get_x] : func:r51_17, this:r51_9 +# 51| m51_19(unknown) = ^CallSideEffect : ~m51_14 +# 51| m51_20(unknown) = Chi : total:m51_14, partial:m51_19 +# 51| v51_21(void) = ^IndirectReadSideEffect[-1] : &:r51_9, m51_16 +# 51| m51_22(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r51_9 +# 51| m51_23(ClassWithDestructor2) = Chi : total:m51_16, partial:m51_22 +# 51| v51_24(void) = Call[ClassWithConstructor] : func:r51_7, this:r51_5, 0:r51_8, 1:r51_18 +# 51| m51_25(unknown) = ^CallSideEffect : ~m51_20 +# 51| m51_26(unknown) = Chi : total:m51_20, partial:m51_25 +# 51| m51_27(ClassWithConstructor) = ^IndirectMayWriteSideEffect[-1] : &:r51_5 +# 51| m51_28(ClassWithConstructor) = Chi : total:m51_6, partial:m51_27 +# 51| v51_29(void) = ThrowValue : &:r51_5, m51_28 +#-----| Exception -> Block 2 + +# 51| Block 4 +# 51| r51_30(glval) = VariableAddress[#temp51:75] : +# 51| m51_31(ClassWithDestructor2) = Uninitialized[#temp51:75] : &:r51_30 +# 51| r51_32(glval) = FunctionAddress[ClassWithDestructor2] : +# 51| v51_33(void) = Call[ClassWithDestructor2] : func:r51_32, this:r51_30 +# 51| m51_34(unknown) = ^CallSideEffect : ~m50_6 +# 51| m51_35(unknown) = Chi : total:m50_6, partial:m51_34 +# 51| m51_36(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r51_30 +# 51| m51_37(ClassWithDestructor2) = Chi : total:m51_31, partial:m51_36 +# 51| r51_38(ClassWithDestructor2) = Load[#temp51:75] : &:r51_30, m51_37 +# 51| r51_39(glval) = VariableAddress[#temp51:5] : +# 51| m51_40(ClassWithDestructor2) = Store[#temp51:5] : &:r51_39, r51_38 +# 51| r51_41(glval) = VariableAddress[#temp51:5] : +# 51| r51_42(ClassWithDestructor2) = Load[#temp51:5] : &:r51_41, m51_40 +# 51| m51_43(ClassWithDestructor2) = Store[#temp51:5] : &:r51_1, r51_42 +# 52| v52_1(void) = NoOp : +# 52| r52_2(glval) = VariableAddress[c] : +# 52| r52_3(glval) = FunctionAddress[~ClassWithDestructor2] : +# 52| v52_4(void) = Call[~ClassWithDestructor2] : func:r52_3, this:r52_2 +# 52| m52_5(unknown) = ^CallSideEffect : ~m51_35 +# 52| m52_6(unknown) = Chi : total:m51_35, partial:m52_5 +# 52| v52_7(void) = ^IndirectReadSideEffect[-1] : &:r52_2, m50_8 +# 52| m52_8(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r52_2 +# 52| m52_9(ClassWithDestructor2) = Chi : total:m50_8, partial:m52_8 +# 49| v49_11(void) = ReturnVoid : +#-----| Goto -> Block 1 + +# 54| void temp_test8(bool) +# 54| Block 0 +# 54| v54_1(void) = EnterFunction : +# 54| m54_2(unknown) = AliasedDefinition : +# 54| m54_3(unknown) = InitializeNonLocal : +# 54| m54_4(unknown) = Chi : total:m54_2, partial:m54_3 +# 54| r54_5(glval) = VariableAddress[b] : +# 54| m54_6(bool) = InitializeParameter[b] : &:r54_5 +# 55| r55_1(glval) = VariableAddress[#temp55:5] : +# 55| r55_2(glval) = VariableAddress[b] : +# 55| r55_3(bool) = Load[b] : &:r55_2, m54_6 +# 55| v55_4(void) = ConditionalBranch : r55_3 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 54| Block 1 +# 54| m54_7(unknown) = Phi : from 2:~m55_26, from 4:~m55_35 +# 54| v54_8(void) = AliasedUse : ~m54_7 +# 54| v54_9(void) = ExitFunction : + +# 54| Block 2 +# 54| v54_10(void) = Unwind : +#-----| Goto -> Block 1 + +# 55| Block 3 +# 55| r55_5(glval) = VariableAddress[#throw55:9] : +# 55| m55_6(ClassWithConstructor) = Uninitialized[#throw55:9] : &:r55_5 +# 55| r55_7(glval) = FunctionAddress[ClassWithConstructor] : +# 55| r55_8(char) = Constant[120] : +# 55| r55_9(glval) = VariableAddress[#temp55:41] : +# 55| m55_10(ClassWithDestructor2) = Uninitialized[#temp55:41] : &:r55_9 +# 55| r55_11(glval) = FunctionAddress[ClassWithDestructor2] : +# 55| v55_12(void) = Call[ClassWithDestructor2] : func:r55_11, this:r55_9 +# 55| m55_13(unknown) = ^CallSideEffect : ~m54_4 +# 55| m55_14(unknown) = Chi : total:m54_4, partial:m55_13 +# 55| m55_15(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r55_9 +# 55| m55_16(ClassWithDestructor2) = Chi : total:m55_10, partial:m55_15 +# 55| r55_17(glval) = FunctionAddress[get_x] : +# 55| r55_18(char) = Call[get_x] : func:r55_17, this:r55_9 +# 55| m55_19(unknown) = ^CallSideEffect : ~m55_14 +# 55| m55_20(unknown) = Chi : total:m55_14, partial:m55_19 +# 55| v55_21(void) = ^IndirectReadSideEffect[-1] : &:r55_9, m55_16 +# 55| m55_22(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r55_9 +# 55| m55_23(ClassWithDestructor2) = Chi : total:m55_16, partial:m55_22 +# 55| v55_24(void) = Call[ClassWithConstructor] : func:r55_7, this:r55_5, 0:r55_8, 1:r55_18 +# 55| m55_25(unknown) = ^CallSideEffect : ~m55_20 +# 55| m55_26(unknown) = Chi : total:m55_20, partial:m55_25 +# 55| m55_27(ClassWithConstructor) = ^IndirectMayWriteSideEffect[-1] : &:r55_5 +# 55| m55_28(ClassWithConstructor) = Chi : total:m55_6, partial:m55_27 +# 55| v55_29(void) = ThrowValue : &:r55_5, m55_28 +#-----| Exception -> Block 2 + +# 55| Block 4 +# 55| r55_30(glval) = VariableAddress[#temp55:75] : +# 55| m55_31(ClassWithDestructor2) = Uninitialized[#temp55:75] : &:r55_30 +# 55| r55_32(glval) = FunctionAddress[ClassWithDestructor2] : +# 55| v55_33(void) = Call[ClassWithDestructor2] : func:r55_32, this:r55_30 +# 55| m55_34(unknown) = ^CallSideEffect : ~m54_4 +# 55| m55_35(unknown) = Chi : total:m54_4, partial:m55_34 +# 55| m55_36(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r55_30 +# 55| m55_37(ClassWithDestructor2) = Chi : total:m55_31, partial:m55_36 +# 55| r55_38(ClassWithDestructor2) = Load[#temp55:75] : &:r55_30, m55_37 +# 55| r55_39(glval) = VariableAddress[#temp55:5] : +# 55| m55_40(ClassWithDestructor2) = Store[#temp55:5] : &:r55_39, r55_38 +# 55| r55_41(glval) = VariableAddress[#temp55:5] : +# 55| r55_42(ClassWithDestructor2) = Load[#temp55:5] : &:r55_41, m55_40 +# 55| m55_43(ClassWithDestructor2) = Store[#temp55:5] : &:r55_1, r55_42 +# 56| v56_1(void) = NoOp : +# 54| v54_11(void) = ReturnVoid : +#-----| Goto -> Block 1 + ir.c: # 7| void MyCoordsTest(int) # 7| Block 0 @@ -6775,4035 +7268,4049 @@ ir.cpp: # 1054| v1054_43(void) = AliasedUse : ~m1054_20 # 1054| v1054_44(void) = ExitFunction : -# 1079| void RangeBasedFor(vector const&) -# 1079| Block 0 -# 1079| v1079_1(void) = EnterFunction : -# 1079| m1079_2(unknown) = AliasedDefinition : -# 1079| m1079_3(unknown) = InitializeNonLocal : -# 1079| m1079_4(unknown) = Chi : total:m1079_2, partial:m1079_3 -# 1079| r1079_5(glval &>) = VariableAddress[v] : -# 1079| m1079_6(vector &) = InitializeParameter[v] : &:r1079_5 -# 1079| r1079_7(vector &) = Load[v] : &:r1079_5, m1079_6 -# 1079| m1079_8(unknown) = InitializeIndirection[v] : &:r1079_7 -# 1080| r1080_1(glval &>) = VariableAddress[(__range)] : -# 1080| r1080_2(glval &>) = VariableAddress[v] : -# 1080| r1080_3(vector &) = Load[v] : &:r1080_2, m1079_6 -# 1080| r1080_4(glval>) = CopyValue : r1080_3 -# 1080| r1080_5(vector &) = CopyValue : r1080_4 -# 1080| m1080_6(vector &) = Store[(__range)] : &:r1080_1, r1080_5 -# 1080| r1080_7(glval) = VariableAddress[(__begin)] : -# 1080| r1080_8(glval &>) = VariableAddress[(__range)] : -# 1080| r1080_9(vector &) = Load[(__range)] : &:r1080_8, m1080_6 -#-----| r0_1(glval>) = CopyValue : r1080_9 -# 1080| r1080_10(glval) = FunctionAddress[begin] : -# 1080| r1080_11(iterator) = Call[begin] : func:r1080_10, this:r0_1 -# 1080| m1080_12(unknown) = ^CallSideEffect : ~m1079_4 -# 1080| m1080_13(unknown) = Chi : total:m1079_4, partial:m1080_12 -#-----| v0_2(void) = ^IndirectReadSideEffect[-1] : &:r0_1, ~m1079_8 -# 1080| m1080_14(iterator) = Store[(__begin)] : &:r1080_7, r1080_11 -# 1080| r1080_15(glval) = VariableAddress[(__end)] : -# 1080| r1080_16(glval &>) = VariableAddress[(__range)] : -# 1080| r1080_17(vector &) = Load[(__range)] : &:r1080_16, m1080_6 -#-----| r0_3(glval>) = CopyValue : r1080_17 -# 1080| r1080_18(glval) = FunctionAddress[end] : -# 1080| r1080_19(iterator) = Call[end] : func:r1080_18, this:r0_3 -# 1080| m1080_20(unknown) = ^CallSideEffect : ~m1080_13 -# 1080| m1080_21(unknown) = Chi : total:m1080_13, partial:m1080_20 -#-----| v0_4(void) = ^IndirectReadSideEffect[-1] : &:r0_3, ~m1079_8 -# 1080| m1080_22(iterator) = Store[(__end)] : &:r1080_15, r1080_19 +# 1126| void RangeBasedFor(std::vector const&) +# 1126| Block 0 +# 1126| v1126_1(void) = EnterFunction : +# 1126| m1126_2(unknown) = AliasedDefinition : +# 1126| m1126_3(unknown) = InitializeNonLocal : +# 1126| m1126_4(unknown) = Chi : total:m1126_2, partial:m1126_3 +# 1126| r1126_5(glval &>) = VariableAddress[v] : +# 1126| m1126_6(vector &) = InitializeParameter[v] : &:r1126_5 +# 1126| r1126_7(vector &) = Load[v] : &:r1126_5, m1126_6 +# 1126| m1126_8(unknown) = InitializeIndirection[v] : &:r1126_7 +# 1127| r1127_1(glval &>) = VariableAddress[(__range)] : +# 1127| r1127_2(glval &>) = VariableAddress[v] : +# 1127| r1127_3(vector &) = Load[v] : &:r1127_2, m1126_6 +# 1127| r1127_4(glval>) = CopyValue : r1127_3 +# 1127| r1127_5(vector &) = CopyValue : r1127_4 +# 1127| m1127_6(vector &) = Store[(__range)] : &:r1127_1, r1127_5 +# 1127| r1127_7(glval>) = VariableAddress[(__begin)] : +# 1127| r1127_8(glval &>) = VariableAddress[(__range)] : +# 1127| r1127_9(vector &) = Load[(__range)] : &:r1127_8, m1127_6 +#-----| r0_1(glval>) = CopyValue : r1127_9 +# 1127| r1127_10(glval) = FunctionAddress[begin] : +# 1127| r1127_11(iterator) = Call[begin] : func:r1127_10, this:r0_1 +#-----| v0_2(void) = ^IndirectReadSideEffect[-1] : &:r0_1, ~m1126_8 +# 1127| m1127_12(iterator) = Store[(__begin)] : &:r1127_7, r1127_11 +# 1127| r1127_13(glval>) = VariableAddress[(__end)] : +# 1127| r1127_14(glval &>) = VariableAddress[(__range)] : +# 1127| r1127_15(vector &) = Load[(__range)] : &:r1127_14, m1127_6 +#-----| r0_3(glval>) = CopyValue : r1127_15 +# 1127| r1127_16(glval) = FunctionAddress[end] : +# 1127| r1127_17(iterator) = Call[end] : func:r1127_16, this:r0_3 +#-----| v0_4(void) = ^IndirectReadSideEffect[-1] : &:r0_3, ~m1126_8 +# 1127| m1127_18(iterator) = Store[(__end)] : &:r1127_13, r1127_17 #-----| Goto -> Block 1 -# 1080| Block 1 -# 1080| m1080_23(iterator) = Phi : from 0:m1080_14, from 4:m1080_49 -# 1080| m1080_24(unknown) = Phi : from 0:~m1080_21, from 4:~m1080_46 -# 1080| r1080_25(glval) = VariableAddress[(__begin)] : -#-----| r0_5(glval) = Convert : r1080_25 -# 1080| r1080_26(glval) = FunctionAddress[operator!=] : -# 1080| r1080_27(glval) = VariableAddress[(__end)] : -# 1080| r1080_28(iterator) = Load[(__end)] : &:r1080_27, m1080_22 -# 1080| r1080_29(bool) = Call[operator!=] : func:r1080_26, this:r0_5, 0:r1080_28 -# 1080| m1080_30(unknown) = ^CallSideEffect : ~m1080_24 -# 1080| m1080_31(unknown) = Chi : total:m1080_24, partial:m1080_30 -#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m1080_23 -# 1080| v1080_32(void) = ConditionalBranch : r1080_29 +# 1127| Block 1 +# 1127| m1127_19(iterator) = Phi : from 0:m1127_12, from 4:m1127_50 +# 1127| m1127_20(unknown) = Phi : from 0:~m1126_4, from 4:~m1127_47 +# 1127| r1127_21(glval>) = VariableAddress[(__begin)] : +#-----| r0_5(glval>) = Convert : r1127_21 +# 1127| r1127_22(glval) = FunctionAddress[operator!=] : +#-----| r0_6(glval>) = VariableAddress[#temp0:0] : +#-----| m0_7(iterator) = Uninitialized[#temp0:0] : &:r0_6 +# 1127| r1127_23(glval) = FunctionAddress[iterator] : +# 1127| r1127_24(glval>) = VariableAddress[(__end)] : +#-----| r0_8(glval>) = Convert : r1127_24 +#-----| r0_9(iterator &) = CopyValue : r0_8 +# 1127| v1127_25(void) = Call[iterator] : func:r1127_23, this:r0_6, 0:r0_9 +# 1127| m1127_26(unknown) = ^CallSideEffect : ~m1127_20 +# 1127| m1127_27(unknown) = Chi : total:m1127_20, partial:m1127_26 +#-----| v0_10(void) = ^BufferReadSideEffect[0] : &:r0_9, ~m1127_18 +# 1127| m1127_28(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_6 +# 1127| m1127_29(iterator) = Chi : total:m0_7, partial:m1127_28 +#-----| r0_11(iterator) = Load[#temp0:0] : &:r0_6, m1127_29 +# 1127| r1127_30(bool) = Call[operator!=] : func:r1127_22, this:r0_5, 0:r0_11 +# 1127| m1127_31(unknown) = ^CallSideEffect : ~m1127_27 +# 1127| m1127_32(unknown) = Chi : total:m1127_27, partial:m1127_31 +#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m1127_19 +# 1127| v1127_33(void) = ConditionalBranch : r1127_30 #-----| False -> Block 5 #-----| True -> Block 2 -# 1080| Block 2 -# 1080| r1080_33(glval) = VariableAddress[e] : -# 1080| r1080_34(glval) = VariableAddress[(__begin)] : -#-----| r0_7(glval) = Convert : r1080_34 -# 1080| r1080_35(glval) = FunctionAddress[operator*] : -# 1080| r1080_36(int &) = Call[operator*] : func:r1080_35, this:r0_7 -# 1080| m1080_37(unknown) = ^CallSideEffect : ~m1080_31 -# 1080| m1080_38(unknown) = Chi : total:m1080_31, partial:m1080_37 -#-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m1080_23 -# 1080| r1080_39(int) = Load[?] : &:r1080_36, ~m1080_38 -# 1080| m1080_40(int) = Store[e] : &:r1080_33, r1080_39 -# 1081| r1081_1(glval) = VariableAddress[e] : -# 1081| r1081_2(int) = Load[e] : &:r1081_1, m1080_40 -# 1081| r1081_3(int) = Constant[0] : -# 1081| r1081_4(bool) = CompareGT : r1081_2, r1081_3 -# 1081| v1081_5(void) = ConditionalBranch : r1081_4 +# 1127| Block 2 +# 1127| r1127_34(glval) = VariableAddress[e] : +# 1127| r1127_35(glval>) = VariableAddress[(__begin)] : +#-----| r0_13(glval>) = Convert : r1127_35 +# 1127| r1127_36(glval) = FunctionAddress[operator*] : +# 1127| r1127_37(int &) = Call[operator*] : func:r1127_36, this:r0_13 +# 1127| m1127_38(unknown) = ^CallSideEffect : ~m1127_32 +# 1127| m1127_39(unknown) = Chi : total:m1127_32, partial:m1127_38 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, m1127_19 +# 1127| r1127_40(int) = Load[?] : &:r1127_37, ~m1127_39 +# 1127| m1127_41(int) = Store[e] : &:r1127_34, r1127_40 +# 1128| r1128_1(glval) = VariableAddress[e] : +# 1128| r1128_2(int) = Load[e] : &:r1128_1, m1127_41 +# 1128| r1128_3(int) = Constant[0] : +# 1128| r1128_4(bool) = CompareGT : r1128_2, r1128_3 +# 1128| v1128_5(void) = ConditionalBranch : r1128_4 #-----| False -> Block 4 #-----| True -> Block 3 -# 1082| Block 3 -# 1082| v1082_1(void) = NoOp : +# 1129| Block 3 +# 1129| v1129_1(void) = NoOp : #-----| Goto -> Block 4 -# 1080| Block 4 -# 1080| v1080_41(void) = NoOp : -# 1080| r1080_42(glval) = VariableAddress[(__begin)] : -# 1080| r1080_43(glval) = FunctionAddress[operator++] : -# 1080| r1080_44(iterator &) = Call[operator++] : func:r1080_43, this:r1080_42 -# 1080| m1080_45(unknown) = ^CallSideEffect : ~m1080_38 -# 1080| m1080_46(unknown) = Chi : total:m1080_38, partial:m1080_45 -# 1080| v1080_47(void) = ^IndirectReadSideEffect[-1] : &:r1080_42, m1080_23 -# 1080| m1080_48(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1080_42 -# 1080| m1080_49(iterator) = Chi : total:m1080_23, partial:m1080_48 -# 1080| r1080_50(glval) = CopyValue : r1080_44 +# 1127| Block 4 +# 1127| v1127_42(void) = NoOp : +# 1127| r1127_43(glval>) = VariableAddress[(__begin)] : +# 1127| r1127_44(glval) = FunctionAddress[operator++] : +# 1127| r1127_45(iterator &) = Call[operator++] : func:r1127_44, this:r1127_43 +# 1127| m1127_46(unknown) = ^CallSideEffect : ~m1127_39 +# 1127| m1127_47(unknown) = Chi : total:m1127_39, partial:m1127_46 +# 1127| v1127_48(void) = ^IndirectReadSideEffect[-1] : &:r1127_43, m1127_19 +# 1127| m1127_49(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1127_43 +# 1127| m1127_50(iterator) = Chi : total:m1127_19, partial:m1127_49 +# 1127| r1127_51(glval>) = CopyValue : r1127_45 #-----| Goto (back edge) -> Block 1 -# 1086| Block 5 -# 1086| r1086_1(glval &>) = VariableAddress[(__range)] : -# 1086| r1086_2(glval &>) = VariableAddress[v] : -# 1086| r1086_3(vector &) = Load[v] : &:r1086_2, m1079_6 -# 1086| r1086_4(glval>) = CopyValue : r1086_3 -# 1086| r1086_5(vector &) = CopyValue : r1086_4 -# 1086| m1086_6(vector &) = Store[(__range)] : &:r1086_1, r1086_5 -# 1086| r1086_7(glval) = VariableAddress[(__begin)] : -# 1086| r1086_8(glval &>) = VariableAddress[(__range)] : -# 1086| r1086_9(vector &) = Load[(__range)] : &:r1086_8, m1086_6 -#-----| r0_9(glval>) = CopyValue : r1086_9 -# 1086| r1086_10(glval) = FunctionAddress[begin] : -# 1086| r1086_11(iterator) = Call[begin] : func:r1086_10, this:r0_9 -# 1086| m1086_12(unknown) = ^CallSideEffect : ~m1080_31 -# 1086| m1086_13(unknown) = Chi : total:m1080_31, partial:m1086_12 -#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, ~m1079_8 -# 1086| m1086_14(iterator) = Store[(__begin)] : &:r1086_7, r1086_11 -# 1086| r1086_15(glval) = VariableAddress[(__end)] : -# 1086| r1086_16(glval &>) = VariableAddress[(__range)] : -# 1086| r1086_17(vector &) = Load[(__range)] : &:r1086_16, m1086_6 -#-----| r0_11(glval>) = CopyValue : r1086_17 -# 1086| r1086_18(glval) = FunctionAddress[end] : -# 1086| r1086_19(iterator) = Call[end] : func:r1086_18, this:r0_11 -# 1086| m1086_20(unknown) = ^CallSideEffect : ~m1086_13 -# 1086| m1086_21(unknown) = Chi : total:m1086_13, partial:m1086_20 -#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m1079_8 -# 1086| m1086_22(iterator) = Store[(__end)] : &:r1086_15, r1086_19 +# 1133| Block 5 +# 1133| r1133_1(glval &>) = VariableAddress[(__range)] : +# 1133| r1133_2(glval &>) = VariableAddress[v] : +# 1133| r1133_3(vector &) = Load[v] : &:r1133_2, m1126_6 +# 1133| r1133_4(glval>) = CopyValue : r1133_3 +# 1133| r1133_5(vector &) = CopyValue : r1133_4 +# 1133| m1133_6(vector &) = Store[(__range)] : &:r1133_1, r1133_5 +# 1133| r1133_7(glval>) = VariableAddress[(__begin)] : +# 1133| r1133_8(glval &>) = VariableAddress[(__range)] : +# 1133| r1133_9(vector &) = Load[(__range)] : &:r1133_8, m1133_6 +#-----| r0_15(glval>) = CopyValue : r1133_9 +# 1133| r1133_10(glval) = FunctionAddress[begin] : +# 1133| r1133_11(iterator) = Call[begin] : func:r1133_10, this:r0_15 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m1126_8 +# 1133| m1133_12(iterator) = Store[(__begin)] : &:r1133_7, r1133_11 +# 1133| r1133_13(glval>) = VariableAddress[(__end)] : +# 1133| r1133_14(glval &>) = VariableAddress[(__range)] : +# 1133| r1133_15(vector &) = Load[(__range)] : &:r1133_14, m1133_6 +#-----| r0_17(glval>) = CopyValue : r1133_15 +# 1133| r1133_16(glval) = FunctionAddress[end] : +# 1133| r1133_17(iterator) = Call[end] : func:r1133_16, this:r0_17 +#-----| v0_18(void) = ^IndirectReadSideEffect[-1] : &:r0_17, ~m1126_8 +# 1133| m1133_18(iterator) = Store[(__end)] : &:r1133_13, r1133_17 #-----| Goto -> Block 6 -# 1086| Block 6 -# 1086| m1086_23(iterator) = Phi : from 5:m1086_14, from 7:m1086_40 -# 1086| m1086_24(unknown) = Phi : from 5:~m1086_21, from 7:~m1086_37 -# 1086| r1086_25(glval) = VariableAddress[(__begin)] : -#-----| r0_13(glval) = Convert : r1086_25 -# 1086| r1086_26(glval) = FunctionAddress[operator!=] : -# 1086| r1086_27(glval) = VariableAddress[(__end)] : -# 1086| r1086_28(iterator) = Load[(__end)] : &:r1086_27, m1086_22 -# 1086| r1086_29(bool) = Call[operator!=] : func:r1086_26, this:r0_13, 0:r1086_28 -# 1086| m1086_30(unknown) = ^CallSideEffect : ~m1086_24 -# 1086| m1086_31(unknown) = Chi : total:m1086_24, partial:m1086_30 -#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, m1086_23 -# 1086| v1086_32(void) = ConditionalBranch : r1086_29 +# 1133| Block 6 +# 1133| m1133_19(iterator) = Phi : from 5:m1133_12, from 7:m1133_41 +# 1133| m1133_20(unknown) = Phi : from 5:~m1127_32, from 7:~m1133_38 +# 1133| r1133_21(glval>) = VariableAddress[(__begin)] : +#-----| r0_19(glval>) = Convert : r1133_21 +# 1133| r1133_22(glval) = FunctionAddress[operator!=] : +#-----| r0_20(glval>) = VariableAddress[#temp0:0] : +#-----| m0_21(iterator) = Uninitialized[#temp0:0] : &:r0_20 +# 1133| r1133_23(glval) = FunctionAddress[iterator] : +# 1133| r1133_24(glval>) = VariableAddress[(__end)] : +#-----| r0_22(glval>) = Convert : r1133_24 +#-----| r0_23(iterator &) = CopyValue : r0_22 +# 1133| v1133_25(void) = Call[iterator] : func:r1133_23, this:r0_20, 0:r0_23 +# 1133| m1133_26(unknown) = ^CallSideEffect : ~m1133_20 +# 1133| m1133_27(unknown) = Chi : total:m1133_20, partial:m1133_26 +#-----| v0_24(void) = ^BufferReadSideEffect[0] : &:r0_23, ~m1133_18 +# 1133| m1133_28(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_20 +# 1133| m1133_29(iterator) = Chi : total:m0_21, partial:m1133_28 +#-----| r0_25(iterator) = Load[#temp0:0] : &:r0_20, m1133_29 +# 1133| r1133_30(bool) = Call[operator!=] : func:r1133_22, this:r0_19, 0:r0_25 +# 1133| m1133_31(unknown) = ^CallSideEffect : ~m1133_27 +# 1133| m1133_32(unknown) = Chi : total:m1133_27, partial:m1133_31 +#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_19, m1133_19 +# 1133| v1133_33(void) = ConditionalBranch : r1133_30 #-----| False -> Block 10 #-----| True -> Block 8 -# 1086| Block 7 -# 1086| r1086_33(glval) = VariableAddress[(__begin)] : -# 1086| r1086_34(glval) = FunctionAddress[operator++] : -# 1086| r1086_35(iterator &) = Call[operator++] : func:r1086_34, this:r1086_33 -# 1086| m1086_36(unknown) = ^CallSideEffect : ~m1086_47 -# 1086| m1086_37(unknown) = Chi : total:m1086_47, partial:m1086_36 -# 1086| v1086_38(void) = ^IndirectReadSideEffect[-1] : &:r1086_33, m1086_23 -# 1086| m1086_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1086_33 -# 1086| m1086_40(iterator) = Chi : total:m1086_23, partial:m1086_39 -# 1086| r1086_41(glval) = CopyValue : r1086_35 +# 1133| Block 7 +# 1133| r1133_34(glval>) = VariableAddress[(__begin)] : +# 1133| r1133_35(glval) = FunctionAddress[operator++] : +# 1133| r1133_36(iterator &) = Call[operator++] : func:r1133_35, this:r1133_34 +# 1133| m1133_37(unknown) = ^CallSideEffect : ~m1133_48 +# 1133| m1133_38(unknown) = Chi : total:m1133_48, partial:m1133_37 +# 1133| v1133_39(void) = ^IndirectReadSideEffect[-1] : &:r1133_34, m1133_19 +# 1133| m1133_40(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1133_34 +# 1133| m1133_41(iterator) = Chi : total:m1133_19, partial:m1133_40 +# 1133| r1133_42(glval>) = CopyValue : r1133_36 #-----| Goto (back edge) -> Block 6 -# 1086| Block 8 -# 1086| r1086_42(glval) = VariableAddress[e] : -# 1086| r1086_43(glval) = VariableAddress[(__begin)] : -#-----| r0_15(glval) = Convert : r1086_43 -# 1086| r1086_44(glval) = FunctionAddress[operator*] : -# 1086| r1086_45(int &) = Call[operator*] : func:r1086_44, this:r0_15 -# 1086| m1086_46(unknown) = ^CallSideEffect : ~m1086_31 -# 1086| m1086_47(unknown) = Chi : total:m1086_31, partial:m1086_46 -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m1086_23 -# 1086| r1086_48(glval) = CopyValue : r1086_45 -# 1086| r1086_49(glval) = Convert : r1086_48 -# 1086| r1086_50(int &) = CopyValue : r1086_49 -# 1086| m1086_51(int &) = Store[e] : &:r1086_42, r1086_50 -# 1087| r1087_1(glval) = VariableAddress[e] : -# 1087| r1087_2(int &) = Load[e] : &:r1087_1, m1086_51 -# 1087| r1087_3(int) = Load[?] : &:r1087_2, ~m1086_47 -# 1087| r1087_4(int) = Constant[5] : -# 1087| r1087_5(bool) = CompareLT : r1087_3, r1087_4 -# 1087| v1087_6(void) = ConditionalBranch : r1087_5 +# 1133| Block 8 +# 1133| r1133_43(glval) = VariableAddress[e] : +# 1133| r1133_44(glval>) = VariableAddress[(__begin)] : +#-----| r0_27(glval>) = Convert : r1133_44 +# 1133| r1133_45(glval) = FunctionAddress[operator*] : +# 1133| r1133_46(int &) = Call[operator*] : func:r1133_45, this:r0_27 +# 1133| m1133_47(unknown) = ^CallSideEffect : ~m1133_32 +# 1133| m1133_48(unknown) = Chi : total:m1133_32, partial:m1133_47 +#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, m1133_19 +# 1133| r1133_49(glval) = CopyValue : r1133_46 +# 1133| r1133_50(glval) = Convert : r1133_49 +# 1133| r1133_51(int &) = CopyValue : r1133_50 +# 1133| m1133_52(int &) = Store[e] : &:r1133_43, r1133_51 +# 1134| r1134_1(glval) = VariableAddress[e] : +# 1134| r1134_2(int &) = Load[e] : &:r1134_1, m1133_52 +# 1134| r1134_3(int) = Load[?] : &:r1134_2, ~m1133_48 +# 1134| r1134_4(int) = Constant[5] : +# 1134| r1134_5(bool) = CompareLT : r1134_3, r1134_4 +# 1134| v1134_6(void) = ConditionalBranch : r1134_5 #-----| False -> Block 7 #-----| True -> Block 9 -# 1088| Block 9 -# 1088| v1088_1(void) = NoOp : +# 1135| Block 9 +# 1135| v1135_1(void) = NoOp : #-----| Goto -> Block 10 -# 1090| Block 10 -# 1090| m1090_1(unknown) = Phi : from 6:~m1086_31, from 9:~m1086_47 -# 1090| v1090_2(void) = NoOp : -# 1091| v1091_1(void) = NoOp : -# 1079| v1079_9(void) = ReturnIndirection[v] : &:r1079_7, m1079_8 -# 1079| v1079_10(void) = ReturnVoid : -# 1079| v1079_11(void) = AliasedUse : ~m1090_1 -# 1079| v1079_12(void) = ExitFunction : +# 1137| Block 10 +# 1137| m1137_1(unknown) = Phi : from 6:~m1133_32, from 9:~m1133_48 +# 1137| v1137_2(void) = NoOp : +# 1138| v1138_1(void) = NoOp : +# 1126| v1126_9(void) = ReturnIndirection[v] : &:r1126_7, m1126_8 +# 1126| v1126_10(void) = ReturnVoid : +# 1126| v1126_11(void) = AliasedUse : ~m1137_1 +# 1126| v1126_12(void) = ExitFunction : -# 1110| int AsmStmt(int) -# 1110| Block 0 -# 1110| v1110_1(void) = EnterFunction : -# 1110| m1110_2(unknown) = AliasedDefinition : -# 1110| m1110_3(unknown) = InitializeNonLocal : -# 1110| m1110_4(unknown) = Chi : total:m1110_2, partial:m1110_3 -# 1110| r1110_5(glval) = VariableAddress[x] : -# 1110| m1110_6(int) = InitializeParameter[x] : &:r1110_5 -# 1111| m1111_1(unknown) = InlineAsm : ~m1110_4 -# 1111| m1111_2(unknown) = Chi : total:m1110_4, partial:m1111_1 -# 1112| r1112_1(glval) = VariableAddress[#return] : -# 1112| r1112_2(glval) = VariableAddress[x] : -# 1112| r1112_3(int) = Load[x] : &:r1112_2, m1110_6 -# 1112| m1112_4(int) = Store[#return] : &:r1112_1, r1112_3 -# 1110| r1110_7(glval) = VariableAddress[#return] : -# 1110| v1110_8(void) = ReturnValue : &:r1110_7, m1112_4 -# 1110| v1110_9(void) = AliasedUse : ~m1111_2 -# 1110| v1110_10(void) = ExitFunction : +# 1157| int AsmStmt(int) +# 1157| Block 0 +# 1157| v1157_1(void) = EnterFunction : +# 1157| m1157_2(unknown) = AliasedDefinition : +# 1157| m1157_3(unknown) = InitializeNonLocal : +# 1157| m1157_4(unknown) = Chi : total:m1157_2, partial:m1157_3 +# 1157| r1157_5(glval) = VariableAddress[x] : +# 1157| m1157_6(int) = InitializeParameter[x] : &:r1157_5 +# 1158| m1158_1(unknown) = InlineAsm : ~m1157_4 +# 1158| m1158_2(unknown) = Chi : total:m1157_4, partial:m1158_1 +# 1159| r1159_1(glval) = VariableAddress[#return] : +# 1159| r1159_2(glval) = VariableAddress[x] : +# 1159| r1159_3(int) = Load[x] : &:r1159_2, m1157_6 +# 1159| m1159_4(int) = Store[#return] : &:r1159_1, r1159_3 +# 1157| r1157_7(glval) = VariableAddress[#return] : +# 1157| v1157_8(void) = ReturnValue : &:r1157_7, m1159_4 +# 1157| v1157_9(void) = AliasedUse : ~m1158_2 +# 1157| v1157_10(void) = ExitFunction : -# 1115| void AsmStmtWithOutputs(unsigned int&, unsigned int, unsigned int&, unsigned int) -# 1115| Block 0 -# 1115| v1115_1(void) = EnterFunction : -# 1115| m1115_2(unknown) = AliasedDefinition : -# 1115| m1115_3(unknown) = InitializeNonLocal : -# 1115| m1115_4(unknown) = Chi : total:m1115_2, partial:m1115_3 -# 1115| r1115_5(glval) = VariableAddress[a] : -# 1115| m1115_6(unsigned int &) = InitializeParameter[a] : &:r1115_5 -# 1115| r1115_7(unsigned int &) = Load[a] : &:r1115_5, m1115_6 -# 1115| m1115_8(unknown) = InitializeIndirection[a] : &:r1115_7 -# 1115| r1115_9(glval) = VariableAddress[b] : -# 1115| m1115_10(unsigned int) = InitializeParameter[b] : &:r1115_9 -# 1115| r1115_11(glval) = VariableAddress[c] : -# 1115| m1115_12(unsigned int &) = InitializeParameter[c] : &:r1115_11 -# 1115| r1115_13(unsigned int &) = Load[c] : &:r1115_11, m1115_12 -# 1115| m1115_14(unknown) = InitializeIndirection[c] : &:r1115_13 -# 1115| r1115_15(glval) = VariableAddress[d] : -# 1115| m1115_16(unsigned int) = InitializeParameter[d] : &:r1115_15 -# 1120| r1120_1(glval) = VariableAddress[a] : -# 1120| r1120_2(unsigned int &) = Load[a] : &:r1120_1, m1115_6 -# 1120| r1120_3(glval) = CopyValue : r1120_2 -# 1120| r1120_4(glval) = VariableAddress[b] : -# 1120| r1120_5(glval) = VariableAddress[c] : -# 1120| r1120_6(unsigned int &) = Load[c] : &:r1120_5, m1115_12 -# 1120| r1120_7(unsigned int) = Load[?] : &:r1120_6, ~m1115_14 -# 1120| r1120_8(glval) = VariableAddress[d] : -# 1120| r1120_9(unsigned int) = Load[d] : &:r1120_8, m1115_16 -# 1117| m1117_1(unknown) = InlineAsm : ~m1115_4, 0:r1120_3, 1:r1120_4, 2:r1120_7, 3:r1120_9 -# 1117| m1117_2(unknown) = Chi : total:m1115_4, partial:m1117_1 -# 1122| v1122_1(void) = NoOp : -# 1115| v1115_17(void) = ReturnIndirection[a] : &:r1115_7, m1115_8 -# 1115| v1115_18(void) = ReturnIndirection[c] : &:r1115_13, m1115_14 -# 1115| v1115_19(void) = ReturnVoid : -# 1115| v1115_20(void) = AliasedUse : ~m1117_2 -# 1115| v1115_21(void) = ExitFunction : +# 1162| void AsmStmtWithOutputs(unsigned int&, unsigned int, unsigned int&, unsigned int) +# 1162| Block 0 +# 1162| v1162_1(void) = EnterFunction : +# 1162| m1162_2(unknown) = AliasedDefinition : +# 1162| m1162_3(unknown) = InitializeNonLocal : +# 1162| m1162_4(unknown) = Chi : total:m1162_2, partial:m1162_3 +# 1162| r1162_5(glval) = VariableAddress[a] : +# 1162| m1162_6(unsigned int &) = InitializeParameter[a] : &:r1162_5 +# 1162| r1162_7(unsigned int &) = Load[a] : &:r1162_5, m1162_6 +# 1162| m1162_8(unknown) = InitializeIndirection[a] : &:r1162_7 +# 1162| r1162_9(glval) = VariableAddress[b] : +# 1162| m1162_10(unsigned int) = InitializeParameter[b] : &:r1162_9 +# 1162| r1162_11(glval) = VariableAddress[c] : +# 1162| m1162_12(unsigned int &) = InitializeParameter[c] : &:r1162_11 +# 1162| r1162_13(unsigned int &) = Load[c] : &:r1162_11, m1162_12 +# 1162| m1162_14(unknown) = InitializeIndirection[c] : &:r1162_13 +# 1162| r1162_15(glval) = VariableAddress[d] : +# 1162| m1162_16(unsigned int) = InitializeParameter[d] : &:r1162_15 +# 1167| r1167_1(glval) = VariableAddress[a] : +# 1167| r1167_2(unsigned int &) = Load[a] : &:r1167_1, m1162_6 +# 1167| r1167_3(glval) = CopyValue : r1167_2 +# 1167| r1167_4(glval) = VariableAddress[b] : +# 1167| r1167_5(glval) = VariableAddress[c] : +# 1167| r1167_6(unsigned int &) = Load[c] : &:r1167_5, m1162_12 +# 1167| r1167_7(unsigned int) = Load[?] : &:r1167_6, ~m1162_14 +# 1167| r1167_8(glval) = VariableAddress[d] : +# 1167| r1167_9(unsigned int) = Load[d] : &:r1167_8, m1162_16 +# 1164| m1164_1(unknown) = InlineAsm : ~m1162_4, 0:r1167_3, 1:r1167_4, 2:r1167_7, 3:r1167_9 +# 1164| m1164_2(unknown) = Chi : total:m1162_4, partial:m1164_1 +# 1169| v1169_1(void) = NoOp : +# 1162| v1162_17(void) = ReturnIndirection[a] : &:r1162_7, m1162_8 +# 1162| v1162_18(void) = ReturnIndirection[c] : &:r1162_13, m1162_14 +# 1162| v1162_19(void) = ReturnVoid : +# 1162| v1162_20(void) = AliasedUse : ~m1164_2 +# 1162| v1162_21(void) = ExitFunction : -# 1124| void ExternDeclarations() -# 1124| Block 0 -# 1124| v1124_1(void) = EnterFunction : -# 1124| m1124_2(unknown) = AliasedDefinition : -# 1124| m1124_3(unknown) = InitializeNonLocal : -# 1124| m1124_4(unknown) = Chi : total:m1124_2, partial:m1124_3 -# 1127| r1127_1(glval) = VariableAddress[x] : -# 1127| m1127_2(int) = Uninitialized[x] : &:r1127_1 -# 1128| r1128_1(glval) = VariableAddress[y] : -# 1128| m1128_2(int) = Uninitialized[y] : &:r1128_1 -# 1129| r1129_1(glval) = VariableAddress[h] : -# 1129| m1129_2(int) = Uninitialized[h] : &:r1129_1 -# 1131| v1131_1(void) = NoOp : -# 1124| v1124_5(void) = ReturnVoid : -# 1124| v1124_6(void) = AliasedUse : m1124_3 -# 1124| v1124_7(void) = ExitFunction : +# 1171| void ExternDeclarations() +# 1171| Block 0 +# 1171| v1171_1(void) = EnterFunction : +# 1171| m1171_2(unknown) = AliasedDefinition : +# 1171| m1171_3(unknown) = InitializeNonLocal : +# 1171| m1171_4(unknown) = Chi : total:m1171_2, partial:m1171_3 +# 1174| r1174_1(glval) = VariableAddress[x] : +# 1174| m1174_2(int) = Uninitialized[x] : &:r1174_1 +# 1175| r1175_1(glval) = VariableAddress[y] : +# 1175| m1175_2(int) = Uninitialized[y] : &:r1175_1 +# 1176| r1176_1(glval) = VariableAddress[h] : +# 1176| m1176_2(int) = Uninitialized[h] : &:r1176_1 +# 1178| v1178_1(void) = NoOp : +# 1171| v1171_5(void) = ReturnVoid : +# 1171| v1171_6(void) = AliasedUse : m1171_3 +# 1171| v1171_7(void) = ExitFunction : -# 1139| void ExternDeclarationsInMacro() -# 1139| Block 0 -# 1139| v1139_1(void) = EnterFunction : -# 1139| m1139_2(unknown) = AliasedDefinition : -# 1139| m1139_3(unknown) = InitializeNonLocal : -# 1139| m1139_4(unknown) = Chi : total:m1139_2, partial:m1139_3 -# 1141| r1141_1(glval) = VariableAddress[i] : -# 1141| r1141_2(int) = Constant[0] : -# 1141| m1141_3(int) = Store[i] : &:r1141_1, r1141_2 +# 1186| void ExternDeclarationsInMacro() +# 1186| Block 0 +# 1186| v1186_1(void) = EnterFunction : +# 1186| m1186_2(unknown) = AliasedDefinition : +# 1186| m1186_3(unknown) = InitializeNonLocal : +# 1186| m1186_4(unknown) = Chi : total:m1186_2, partial:m1186_3 +# 1188| r1188_1(glval) = VariableAddress[i] : +# 1188| r1188_2(int) = Constant[0] : +# 1188| m1188_3(int) = Store[i] : &:r1188_1, r1188_2 #-----| Goto -> Block 1 -# 1141| Block 1 -# 1141| m1141_4(int) = Phi : from 0:m1141_3, from 2:m1141_14 -# 1141| r1141_5(glval) = VariableAddress[i] : -# 1141| r1141_6(int) = Load[i] : &:r1141_5, m1141_4 -# 1141| r1141_7(int) = Constant[10] : -# 1141| r1141_8(bool) = CompareLT : r1141_6, r1141_7 -# 1141| v1141_9(void) = ConditionalBranch : r1141_8 +# 1188| Block 1 +# 1188| m1188_4(int) = Phi : from 0:m1188_3, from 2:m1188_14 +# 1188| r1188_5(glval) = VariableAddress[i] : +# 1188| r1188_6(int) = Load[i] : &:r1188_5, m1188_4 +# 1188| r1188_7(int) = Constant[10] : +# 1188| r1188_8(bool) = CompareLT : r1188_6, r1188_7 +# 1188| v1188_9(void) = ConditionalBranch : r1188_8 #-----| False -> Block 3 #-----| True -> Block 2 -# 1141| Block 2 -# 1141| r1141_10(glval) = VariableAddress[i] : -# 1141| r1141_11(int) = Load[i] : &:r1141_10, m1141_4 -# 1141| r1141_12(int) = Constant[1] : -# 1141| r1141_13(int) = Add : r1141_11, r1141_12 -# 1141| m1141_14(int) = Store[i] : &:r1141_10, r1141_13 +# 1188| Block 2 +# 1188| r1188_10(glval) = VariableAddress[i] : +# 1188| r1188_11(int) = Load[i] : &:r1188_10, m1188_4 +# 1188| r1188_12(int) = Constant[1] : +# 1188| r1188_13(int) = Add : r1188_11, r1188_12 +# 1188| m1188_14(int) = Store[i] : &:r1188_10, r1188_13 #-----| Goto (back edge) -> Block 1 -# 1141| Block 3 -# 1141| v1141_15(void) = NoOp : -# 1142| v1142_1(void) = NoOp : -# 1139| v1139_5(void) = ReturnVoid : -# 1139| v1139_6(void) = AliasedUse : m1139_3 -# 1139| v1139_7(void) = ExitFunction : +# 1188| Block 3 +# 1188| v1188_15(void) = NoOp : +# 1189| v1189_1(void) = NoOp : +# 1186| v1186_5(void) = ReturnVoid : +# 1186| v1186_6(void) = AliasedUse : m1186_3 +# 1186| v1186_7(void) = ExitFunction : -# 1144| void TryCatchNoCatchAny(bool) -# 1144| Block 0 -# 1144| v1144_1(void) = EnterFunction : -# 1144| m1144_2(unknown) = AliasedDefinition : -# 1144| m1144_3(unknown) = InitializeNonLocal : -# 1144| m1144_4(unknown) = Chi : total:m1144_2, partial:m1144_3 -# 1144| r1144_5(glval) = VariableAddress[b] : -# 1144| m1144_6(bool) = InitializeParameter[b] : &:r1144_5 -# 1146| r1146_1(glval) = VariableAddress[x] : -# 1146| r1146_2(int) = Constant[5] : -# 1146| m1146_3(int) = Store[x] : &:r1146_1, r1146_2 -# 1147| r1147_1(glval) = VariableAddress[b] : -# 1147| r1147_2(bool) = Load[b] : &:r1147_1, m1144_6 -# 1147| v1147_3(void) = ConditionalBranch : r1147_2 +# 1191| void TryCatchNoCatchAny(bool) +# 1191| Block 0 +# 1191| v1191_1(void) = EnterFunction : +# 1191| m1191_2(unknown) = AliasedDefinition : +# 1191| m1191_3(unknown) = InitializeNonLocal : +# 1191| m1191_4(unknown) = Chi : total:m1191_2, partial:m1191_3 +# 1191| r1191_5(glval) = VariableAddress[b] : +# 1191| m1191_6(bool) = InitializeParameter[b] : &:r1191_5 +# 1193| r1193_1(glval) = VariableAddress[x] : +# 1193| r1193_2(int) = Constant[5] : +# 1193| m1193_3(int) = Store[x] : &:r1193_1, r1193_2 +# 1194| r1194_1(glval) = VariableAddress[b] : +# 1194| r1194_2(bool) = Load[b] : &:r1194_1, m1191_6 +# 1194| v1194_3(void) = ConditionalBranch : r1194_2 #-----| False -> Block 4 #-----| True -> Block 3 -# 1144| Block 1 -# 1144| m1144_7(unknown) = Phi : from 2:~m1144_10, from 10:~m1144_4 -# 1144| v1144_8(void) = AliasedUse : ~m1144_7 -# 1144| v1144_9(void) = ExitFunction : +# 1191| Block 1 +# 1191| m1191_7(unknown) = Phi : from 2:~m1191_10, from 10:~m1191_4 +# 1191| v1191_8(void) = AliasedUse : ~m1191_7 +# 1191| v1191_9(void) = ExitFunction : -# 1144| Block 2 -# 1144| m1144_10(unknown) = Phi : from 7:~m1156_8, from 8:~m1144_4 -# 1144| v1144_11(void) = Unwind : +# 1191| Block 2 +# 1191| m1191_10(unknown) = Phi : from 7:~m1203_8, from 8:~m1191_4 +# 1191| v1191_11(void) = Unwind : #-----| Goto -> Block 1 -# 1148| Block 3 -# 1148| r1148_1(glval) = VariableAddress[#throw1148:7] : -# 1148| r1148_2(glval) = StringConstant["string literal"] : -# 1148| r1148_3(char *) = Convert : r1148_2 -# 1148| m1148_4(char *) = Store[#throw1148:7] : &:r1148_1, r1148_3 -# 1148| v1148_5(void) = ThrowValue : &:r1148_1, m1148_4 +# 1195| Block 3 +# 1195| r1195_1(glval) = VariableAddress[#throw1195:7] : +# 1195| r1195_2(glval) = StringConstant["string literal"] : +# 1195| r1195_3(char *) = Convert : r1195_2 +# 1195| m1195_4(char *) = Store[#throw1195:7] : &:r1195_1, r1195_3 +# 1195| v1195_5(void) = ThrowValue : &:r1195_1, m1195_4 #-----| Exception -> Block 6 -# 1150| Block 4 -# 1150| r1150_1(glval) = VariableAddress[x] : -# 1150| r1150_2(int) = Load[x] : &:r1150_1, m1146_3 -# 1150| r1150_3(int) = Constant[2] : -# 1150| r1150_4(bool) = CompareLT : r1150_2, r1150_3 -# 1150| v1150_5(void) = ConditionalBranch : r1150_4 +# 1197| Block 4 +# 1197| r1197_1(glval) = VariableAddress[x] : +# 1197| r1197_2(int) = Load[x] : &:r1197_1, m1193_3 +# 1197| r1197_3(int) = Constant[2] : +# 1197| r1197_4(bool) = CompareLT : r1197_2, r1197_3 +# 1197| v1197_5(void) = ConditionalBranch : r1197_4 #-----| False -> Block 5 #-----| True -> Block 11 -# 1153| Block 5 -# 1153| r1153_1(int) = Constant[7] : -# 1153| r1153_2(glval) = VariableAddress[x] : -# 1153| m1153_3(int) = Store[x] : &:r1153_2, r1153_1 +# 1200| Block 5 +# 1200| r1200_1(int) = Constant[7] : +# 1200| r1200_2(glval) = VariableAddress[x] : +# 1200| m1200_3(int) = Store[x] : &:r1200_2, r1200_1 #-----| Goto -> Block 10 -# 1155| Block 6 -# 1155| v1155_1(void) = CatchByType[const char *] : +# 1202| Block 6 +# 1202| v1202_1(void) = CatchByType[const char *] : #-----| Exception -> Block 8 #-----| Goto -> Block 7 -# 1155| Block 7 -# 1155| r1155_2(glval) = VariableAddress[s] : -# 1155| m1155_3(char *) = InitializeParameter[s] : &:r1155_2 -# 1155| r1155_4(char *) = Load[s] : &:r1155_2, m1155_3 -# 1155| m1155_5(unknown) = InitializeIndirection[s] : &:r1155_4 -# 1156| r1156_1(glval) = VariableAddress[#throw1156:5] : -# 1156| m1156_2(String) = Uninitialized[#throw1156:5] : &:r1156_1 -# 1156| r1156_3(glval) = FunctionAddress[String] : -# 1156| r1156_4(glval) = VariableAddress[s] : -# 1156| r1156_5(char *) = Load[s] : &:r1156_4, m1155_3 -# 1156| v1156_6(void) = Call[String] : func:r1156_3, this:r1156_1, 0:r1156_5 -# 1156| m1156_7(unknown) = ^CallSideEffect : ~m1144_4 -# 1156| m1156_8(unknown) = Chi : total:m1144_4, partial:m1156_7 -# 1156| v1156_9(void) = ^BufferReadSideEffect[0] : &:r1156_5, ~m1155_5 -# 1156| m1156_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1156_1 -# 1156| m1156_11(String) = Chi : total:m1156_2, partial:m1156_10 -# 1156| v1156_12(void) = ThrowValue : &:r1156_1, m1156_11 +# 1202| Block 7 +# 1202| r1202_2(glval) = VariableAddress[s] : +# 1202| m1202_3(char *) = InitializeParameter[s] : &:r1202_2 +# 1202| r1202_4(char *) = Load[s] : &:r1202_2, m1202_3 +# 1202| m1202_5(unknown) = InitializeIndirection[s] : &:r1202_4 +# 1203| r1203_1(glval) = VariableAddress[#throw1203:5] : +# 1203| m1203_2(String) = Uninitialized[#throw1203:5] : &:r1203_1 +# 1203| r1203_3(glval) = FunctionAddress[String] : +# 1203| r1203_4(glval) = VariableAddress[s] : +# 1203| r1203_5(char *) = Load[s] : &:r1203_4, m1202_3 +# 1203| v1203_6(void) = Call[String] : func:r1203_3, this:r1203_1, 0:r1203_5 +# 1203| m1203_7(unknown) = ^CallSideEffect : ~m1191_4 +# 1203| m1203_8(unknown) = Chi : total:m1191_4, partial:m1203_7 +# 1203| v1203_9(void) = ^BufferReadSideEffect[0] : &:r1203_5, ~m1202_5 +# 1203| m1203_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1203_1 +# 1203| m1203_11(String) = Chi : total:m1203_2, partial:m1203_10 +# 1203| v1203_12(void) = ThrowValue : &:r1203_1, m1203_11 #-----| Exception -> Block 2 -# 1158| Block 8 -# 1158| v1158_1(void) = CatchByType[const String &] : +# 1205| Block 8 +# 1205| v1205_1(void) = CatchByType[const String &] : #-----| Exception -> Block 2 #-----| Goto -> Block 9 -# 1158| Block 9 -# 1158| r1158_2(glval) = VariableAddress[e] : -# 1158| m1158_3(String &) = InitializeParameter[e] : &:r1158_2 -# 1158| r1158_4(String &) = Load[e] : &:r1158_2, m1158_3 -# 1158| m1158_5(unknown) = InitializeIndirection[e] : &:r1158_4 -# 1158| v1158_6(void) = NoOp : +# 1205| Block 9 +# 1205| r1205_2(glval) = VariableAddress[e] : +# 1205| m1205_3(String &) = InitializeParameter[e] : &:r1205_2 +# 1205| r1205_4(String &) = Load[e] : &:r1205_2, m1205_3 +# 1205| m1205_5(unknown) = InitializeIndirection[e] : &:r1205_4 +# 1205| v1205_6(void) = NoOp : #-----| Goto -> Block 10 -# 1160| Block 10 -# 1160| v1160_1(void) = NoOp : -# 1144| v1144_12(void) = ReturnVoid : +# 1207| Block 10 +# 1207| v1207_1(void) = NoOp : +# 1191| v1191_12(void) = ReturnVoid : #-----| Goto -> Block 1 -# 1144| Block 11 -# 1144| v1144_13(void) = Unreached : +# 1191| Block 11 +# 1191| v1191_13(void) = Unreached : -# 1164| void VectorTypes(int) -# 1164| Block 0 -# 1164| v1164_1(void) = EnterFunction : -# 1164| m1164_2(unknown) = AliasedDefinition : -# 1164| m1164_3(unknown) = InitializeNonLocal : -# 1164| m1164_4(unknown) = Chi : total:m1164_2, partial:m1164_3 -# 1164| r1164_5(glval) = VariableAddress[i] : -# 1164| m1164_6(int) = InitializeParameter[i] : &:r1164_5 -# 1165| r1165_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1165| m1165_2(__attribute((vector_size(16UL))) int) = Uninitialized[vi4] : &:r1165_1 -# 1165| r1165_3(int) = Constant[0] : -# 1165| r1165_4(glval) = PointerAdd[4] : r1165_1, r1165_3 -# 1165| r1165_5(int) = Constant[0] : -# 1165| m1165_6(int) = Store[?] : &:r1165_4, r1165_5 -# 1165| m1165_7(__attribute((vector_size(16UL))) int) = Chi : total:m1165_2, partial:m1165_6 -# 1165| r1165_8(int) = Constant[1] : -# 1165| r1165_9(glval) = PointerAdd[4] : r1165_1, r1165_8 -# 1165| r1165_10(int) = Constant[1] : -# 1165| m1165_11(int) = Store[?] : &:r1165_9, r1165_10 -# 1165| m1165_12(__attribute((vector_size(16UL))) int) = Chi : total:m1165_7, partial:m1165_11 -# 1165| r1165_13(int) = Constant[2] : -# 1165| r1165_14(glval) = PointerAdd[4] : r1165_1, r1165_13 -# 1165| r1165_15(int) = Constant[2] : -# 1165| m1165_16(int) = Store[?] : &:r1165_14, r1165_15 -# 1165| m1165_17(__attribute((vector_size(16UL))) int) = Chi : total:m1165_12, partial:m1165_16 -# 1165| r1165_18(int) = Constant[3] : -# 1165| r1165_19(glval) = PointerAdd[4] : r1165_1, r1165_18 -# 1165| r1165_20(int) = Constant[3] : -# 1165| m1165_21(int) = Store[?] : &:r1165_19, r1165_20 -# 1165| m1165_22(__attribute((vector_size(16UL))) int) = Chi : total:m1165_17, partial:m1165_21 -# 1166| r1166_1(glval) = VariableAddress[x] : -# 1166| r1166_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1166| r1166_3(glval) = VariableAddress[i] : -# 1166| r1166_4(int) = Load[i] : &:r1166_3, m1164_6 -# 1166| r1166_5(glval) = PointerAdd[4] : r1166_2, r1166_4 -# 1166| r1166_6(int) = Load[?] : &:r1166_5, ~m1165_22 -# 1166| m1166_7(int) = Store[x] : &:r1166_1, r1166_6 -# 1167| r1167_1(glval) = VariableAddress[x] : -# 1167| r1167_2(int) = Load[x] : &:r1167_1, m1166_7 -# 1167| r1167_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1167| r1167_4(glval) = VariableAddress[i] : -# 1167| r1167_5(int) = Load[i] : &:r1167_4, m1164_6 -# 1167| r1167_6(glval) = PointerAdd[4] : r1167_3, r1167_5 -# 1167| m1167_7(int) = Store[?] : &:r1167_6, r1167_2 -# 1167| m1167_8(__attribute((vector_size(16UL))) int) = Chi : total:m1165_22, partial:m1167_7 -# 1168| r1168_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : -# 1168| r1168_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1168| r1168_3(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1168_2, m1167_8 -# 1168| r1168_4(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1168| r1168_5(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1168_4, m1167_8 -# 1168| r1168_6(int) = Constant[3] : -# 1168| r1168_7(int) = Constant[2] : -# 1168| r1168_8(int) = Constant[1] : -# 1168| r1168_9(int) = Constant[0] : -# 1168| r1168_10(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r1168_3, 1:r1168_5, 2:r1168_6, 3:r1168_7, 4:r1168_8, 5:r1168_9 -# 1168| m1168_11(__attribute((vector_size(16UL))) int) = Store[vi4_shuffle] : &:r1168_1, r1168_10 -# 1169| r1169_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1169| r1169_2(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1169_1, m1167_8 -# 1169| r1169_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : -# 1169| r1169_4(__attribute((vector_size(16UL))) int) = Load[vi4_shuffle] : &:r1169_3, m1168_11 -# 1169| r1169_5(__attribute((vector_size(16UL))) int) = Add : r1169_2, r1169_4 -# 1169| r1169_6(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1169| m1169_7(__attribute((vector_size(16UL))) int) = Store[vi4] : &:r1169_6, r1169_5 -# 1170| v1170_1(void) = NoOp : -# 1164| v1164_7(void) = ReturnVoid : -# 1164| v1164_8(void) = AliasedUse : m1164_3 -# 1164| v1164_9(void) = ExitFunction : +# 1211| void VectorTypes(int) +# 1211| Block 0 +# 1211| v1211_1(void) = EnterFunction : +# 1211| m1211_2(unknown) = AliasedDefinition : +# 1211| m1211_3(unknown) = InitializeNonLocal : +# 1211| m1211_4(unknown) = Chi : total:m1211_2, partial:m1211_3 +# 1211| r1211_5(glval) = VariableAddress[i] : +# 1211| m1211_6(int) = InitializeParameter[i] : &:r1211_5 +# 1212| r1212_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1212| m1212_2(__attribute((vector_size(16UL))) int) = Uninitialized[vi4] : &:r1212_1 +# 1212| r1212_3(int) = Constant[0] : +# 1212| r1212_4(glval) = PointerAdd[4] : r1212_1, r1212_3 +# 1212| r1212_5(int) = Constant[0] : +# 1212| m1212_6(int) = Store[?] : &:r1212_4, r1212_5 +# 1212| m1212_7(__attribute((vector_size(16UL))) int) = Chi : total:m1212_2, partial:m1212_6 +# 1212| r1212_8(int) = Constant[1] : +# 1212| r1212_9(glval) = PointerAdd[4] : r1212_1, r1212_8 +# 1212| r1212_10(int) = Constant[1] : +# 1212| m1212_11(int) = Store[?] : &:r1212_9, r1212_10 +# 1212| m1212_12(__attribute((vector_size(16UL))) int) = Chi : total:m1212_7, partial:m1212_11 +# 1212| r1212_13(int) = Constant[2] : +# 1212| r1212_14(glval) = PointerAdd[4] : r1212_1, r1212_13 +# 1212| r1212_15(int) = Constant[2] : +# 1212| m1212_16(int) = Store[?] : &:r1212_14, r1212_15 +# 1212| m1212_17(__attribute((vector_size(16UL))) int) = Chi : total:m1212_12, partial:m1212_16 +# 1212| r1212_18(int) = Constant[3] : +# 1212| r1212_19(glval) = PointerAdd[4] : r1212_1, r1212_18 +# 1212| r1212_20(int) = Constant[3] : +# 1212| m1212_21(int) = Store[?] : &:r1212_19, r1212_20 +# 1212| m1212_22(__attribute((vector_size(16UL))) int) = Chi : total:m1212_17, partial:m1212_21 +# 1213| r1213_1(glval) = VariableAddress[x] : +# 1213| r1213_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1213| r1213_3(glval) = VariableAddress[i] : +# 1213| r1213_4(int) = Load[i] : &:r1213_3, m1211_6 +# 1213| r1213_5(glval) = PointerAdd[4] : r1213_2, r1213_4 +# 1213| r1213_6(int) = Load[?] : &:r1213_5, ~m1212_22 +# 1213| m1213_7(int) = Store[x] : &:r1213_1, r1213_6 +# 1214| r1214_1(glval) = VariableAddress[x] : +# 1214| r1214_2(int) = Load[x] : &:r1214_1, m1213_7 +# 1214| r1214_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1214| r1214_4(glval) = VariableAddress[i] : +# 1214| r1214_5(int) = Load[i] : &:r1214_4, m1211_6 +# 1214| r1214_6(glval) = PointerAdd[4] : r1214_3, r1214_5 +# 1214| m1214_7(int) = Store[?] : &:r1214_6, r1214_2 +# 1214| m1214_8(__attribute((vector_size(16UL))) int) = Chi : total:m1212_22, partial:m1214_7 +# 1215| r1215_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : +# 1215| r1215_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1215| r1215_3(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1215_2, m1214_8 +# 1215| r1215_4(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1215| r1215_5(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1215_4, m1214_8 +# 1215| r1215_6(int) = Constant[3] : +# 1215| r1215_7(int) = Constant[2] : +# 1215| r1215_8(int) = Constant[1] : +# 1215| r1215_9(int) = Constant[0] : +# 1215| r1215_10(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r1215_3, 1:r1215_5, 2:r1215_6, 3:r1215_7, 4:r1215_8, 5:r1215_9 +# 1215| m1215_11(__attribute((vector_size(16UL))) int) = Store[vi4_shuffle] : &:r1215_1, r1215_10 +# 1216| r1216_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1216| r1216_2(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1216_1, m1214_8 +# 1216| r1216_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : +# 1216| r1216_4(__attribute((vector_size(16UL))) int) = Load[vi4_shuffle] : &:r1216_3, m1215_11 +# 1216| r1216_5(__attribute((vector_size(16UL))) int) = Add : r1216_2, r1216_4 +# 1216| r1216_6(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1216| m1216_7(__attribute((vector_size(16UL))) int) = Store[vi4] : &:r1216_6, r1216_5 +# 1217| v1217_1(void) = NoOp : +# 1211| v1211_7(void) = ReturnVoid : +# 1211| v1211_8(void) = AliasedUse : m1211_3 +# 1211| v1211_9(void) = ExitFunction : -# 1174| int ModeledCallTarget(int) -# 1174| Block 0 -# 1174| v1174_1(void) = EnterFunction : -# 1174| m1174_2(unknown) = AliasedDefinition : -# 1174| m1174_3(unknown) = InitializeNonLocal : -# 1174| m1174_4(unknown) = Chi : total:m1174_2, partial:m1174_3 -# 1174| r1174_5(glval) = VariableAddress[x] : -# 1174| m1174_6(int) = InitializeParameter[x] : &:r1174_5 -# 1175| r1175_1(glval) = VariableAddress[y] : -# 1175| m1175_2(int) = Uninitialized[y] : &:r1175_1 -# 1176| r1176_1(glval) = FunctionAddress[memcpy] : -# 1176| r1176_2(glval) = VariableAddress[y] : -# 1176| r1176_3(int *) = CopyValue : r1176_2 -# 1176| r1176_4(void *) = Convert : r1176_3 -# 1176| r1176_5(glval) = VariableAddress[x] : -# 1176| r1176_6(int *) = CopyValue : r1176_5 -# 1176| r1176_7(void *) = Convert : r1176_6 -# 1176| r1176_8(int) = Constant[4] : -# 1176| r1176_9(void *) = Call[memcpy] : func:r1176_1, 0:r1176_4, 1:r1176_7, 2:r1176_8 -# 1176| v1176_10(void) = ^SizedBufferReadSideEffect[1] : &:r1176_7, r1176_8, ~m1174_6 -# 1176| m1176_11(unknown) = ^SizedBufferMustWriteSideEffect[0] : &:r1176_4, r1176_8 -# 1176| m1176_12(int) = Chi : total:m1175_2, partial:m1176_11 -# 1177| r1177_1(glval) = VariableAddress[#return] : -# 1177| r1177_2(glval) = VariableAddress[y] : -# 1177| r1177_3(int) = Load[y] : &:r1177_2, m1176_12 -# 1177| m1177_4(int) = Store[#return] : &:r1177_1, r1177_3 -# 1174| r1174_7(glval) = VariableAddress[#return] : -# 1174| v1174_8(void) = ReturnValue : &:r1174_7, m1177_4 -# 1174| v1174_9(void) = AliasedUse : m1174_3 -# 1174| v1174_10(void) = ExitFunction : +# 1221| int ModeledCallTarget(int) +# 1221| Block 0 +# 1221| v1221_1(void) = EnterFunction : +# 1221| m1221_2(unknown) = AliasedDefinition : +# 1221| m1221_3(unknown) = InitializeNonLocal : +# 1221| m1221_4(unknown) = Chi : total:m1221_2, partial:m1221_3 +# 1221| r1221_5(glval) = VariableAddress[x] : +# 1221| m1221_6(int) = InitializeParameter[x] : &:r1221_5 +# 1222| r1222_1(glval) = VariableAddress[y] : +# 1222| m1222_2(int) = Uninitialized[y] : &:r1222_1 +# 1223| r1223_1(glval) = FunctionAddress[memcpy] : +# 1223| r1223_2(glval) = VariableAddress[y] : +# 1223| r1223_3(int *) = CopyValue : r1223_2 +# 1223| r1223_4(void *) = Convert : r1223_3 +# 1223| r1223_5(glval) = VariableAddress[x] : +# 1223| r1223_6(int *) = CopyValue : r1223_5 +# 1223| r1223_7(void *) = Convert : r1223_6 +# 1223| r1223_8(int) = Constant[4] : +# 1223| r1223_9(void *) = Call[memcpy] : func:r1223_1, 0:r1223_4, 1:r1223_7, 2:r1223_8 +# 1223| v1223_10(void) = ^SizedBufferReadSideEffect[1] : &:r1223_7, r1223_8, ~m1221_6 +# 1223| m1223_11(unknown) = ^SizedBufferMustWriteSideEffect[0] : &:r1223_4, r1223_8 +# 1223| m1223_12(int) = Chi : total:m1222_2, partial:m1223_11 +# 1224| r1224_1(glval) = VariableAddress[#return] : +# 1224| r1224_2(glval) = VariableAddress[y] : +# 1224| r1224_3(int) = Load[y] : &:r1224_2, m1223_12 +# 1224| m1224_4(int) = Store[#return] : &:r1224_1, r1224_3 +# 1221| r1221_7(glval) = VariableAddress[#return] : +# 1221| v1221_8(void) = ReturnValue : &:r1221_7, m1224_4 +# 1221| v1221_9(void) = AliasedUse : m1221_3 +# 1221| v1221_10(void) = ExitFunction : -# 1180| String ReturnObjectImpl() -# 1180| Block 0 -# 1180| v1180_1(void) = EnterFunction : -# 1180| m1180_2(unknown) = AliasedDefinition : -# 1180| m1180_3(unknown) = InitializeNonLocal : -# 1180| m1180_4(unknown) = Chi : total:m1180_2, partial:m1180_3 -# 1181| r1181_1(glval) = VariableAddress[#return] : -# 1181| m1181_2(String) = Uninitialized[#return] : &:r1181_1 -# 1181| r1181_3(glval) = FunctionAddress[String] : -# 1181| r1181_4(glval) = StringConstant["foo"] : -# 1181| r1181_5(char *) = Convert : r1181_4 -# 1181| v1181_6(void) = Call[String] : func:r1181_3, this:r1181_1, 0:r1181_5 -# 1181| m1181_7(unknown) = ^CallSideEffect : ~m1180_4 -# 1181| m1181_8(unknown) = Chi : total:m1180_4, partial:m1181_7 -# 1181| v1181_9(void) = ^BufferReadSideEffect[0] : &:r1181_5, ~m1180_3 -# 1181| m1181_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1181_1 -# 1181| m1181_11(String) = Chi : total:m1181_2, partial:m1181_10 -# 1180| r1180_5(glval) = VariableAddress[#return] : -# 1180| v1180_6(void) = ReturnValue : &:r1180_5, m1181_11 -# 1180| v1180_7(void) = AliasedUse : ~m1181_8 -# 1180| v1180_8(void) = ExitFunction : +# 1227| String ReturnObjectImpl() +# 1227| Block 0 +# 1227| v1227_1(void) = EnterFunction : +# 1227| m1227_2(unknown) = AliasedDefinition : +# 1227| m1227_3(unknown) = InitializeNonLocal : +# 1227| m1227_4(unknown) = Chi : total:m1227_2, partial:m1227_3 +# 1228| r1228_1(glval) = VariableAddress[#return] : +# 1228| m1228_2(String) = Uninitialized[#return] : &:r1228_1 +# 1228| r1228_3(glval) = FunctionAddress[String] : +# 1228| r1228_4(glval) = StringConstant["foo"] : +# 1228| r1228_5(char *) = Convert : r1228_4 +# 1228| v1228_6(void) = Call[String] : func:r1228_3, this:r1228_1, 0:r1228_5 +# 1228| m1228_7(unknown) = ^CallSideEffect : ~m1227_4 +# 1228| m1228_8(unknown) = Chi : total:m1227_4, partial:m1228_7 +# 1228| v1228_9(void) = ^BufferReadSideEffect[0] : &:r1228_5, ~m1227_3 +# 1228| m1228_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1228_1 +# 1228| m1228_11(String) = Chi : total:m1228_2, partial:m1228_10 +# 1227| r1227_5(glval) = VariableAddress[#return] : +# 1227| v1227_6(void) = ReturnValue : &:r1227_5, m1228_11 +# 1227| v1227_7(void) = AliasedUse : ~m1228_8 +# 1227| v1227_8(void) = ExitFunction : -# 1184| void switch1Case(int) -# 1184| Block 0 -# 1184| v1184_1(void) = EnterFunction : -# 1184| m1184_2(unknown) = AliasedDefinition : -# 1184| m1184_3(unknown) = InitializeNonLocal : -# 1184| m1184_4(unknown) = Chi : total:m1184_2, partial:m1184_3 -# 1184| r1184_5(glval) = VariableAddress[x] : -# 1184| m1184_6(int) = InitializeParameter[x] : &:r1184_5 -# 1185| r1185_1(glval) = VariableAddress[y] : -# 1185| r1185_2(int) = Constant[0] : -# 1185| m1185_3(int) = Store[y] : &:r1185_1, r1185_2 -# 1186| r1186_1(glval) = VariableAddress[x] : -# 1186| r1186_2(int) = Load[x] : &:r1186_1, m1184_6 -# 1186| v1186_3(void) = Switch : r1186_2 +# 1231| void switch1Case(int) +# 1231| Block 0 +# 1231| v1231_1(void) = EnterFunction : +# 1231| m1231_2(unknown) = AliasedDefinition : +# 1231| m1231_3(unknown) = InitializeNonLocal : +# 1231| m1231_4(unknown) = Chi : total:m1231_2, partial:m1231_3 +# 1231| r1231_5(glval) = VariableAddress[x] : +# 1231| m1231_6(int) = InitializeParameter[x] : &:r1231_5 +# 1232| r1232_1(glval) = VariableAddress[y] : +# 1232| r1232_2(int) = Constant[0] : +# 1232| m1232_3(int) = Store[y] : &:r1232_1, r1232_2 +# 1233| r1233_1(glval) = VariableAddress[x] : +# 1233| r1233_2(int) = Load[x] : &:r1233_1, m1231_6 +# 1233| v1233_3(void) = Switch : r1233_2 #-----| Case[1] -> Block 1 #-----| Default -> Block 2 -# 1187| Block 1 -# 1187| v1187_1(void) = NoOp : -# 1188| r1188_1(int) = Constant[2] : -# 1188| r1188_2(glval) = VariableAddress[y] : -# 1188| m1188_3(int) = Store[y] : &:r1188_2, r1188_1 +# 1234| Block 1 +# 1234| v1234_1(void) = NoOp : +# 1235| r1235_1(int) = Constant[2] : +# 1235| r1235_2(glval) = VariableAddress[y] : +# 1235| m1235_3(int) = Store[y] : &:r1235_2, r1235_1 #-----| Goto -> Block 2 -# 1190| Block 2 -# 1190| m1190_1(int) = Phi : from 0:m1185_3, from 1:m1188_3 -# 1190| r1190_2(glval) = VariableAddress[z] : -# 1190| r1190_3(glval) = VariableAddress[y] : -# 1190| r1190_4(int) = Load[y] : &:r1190_3, m1190_1 -# 1190| m1190_5(int) = Store[z] : &:r1190_2, r1190_4 -# 1191| v1191_1(void) = NoOp : -# 1184| v1184_7(void) = ReturnVoid : -# 1184| v1184_8(void) = AliasedUse : m1184_3 -# 1184| v1184_9(void) = ExitFunction : +# 1237| Block 2 +# 1237| m1237_1(int) = Phi : from 0:m1232_3, from 1:m1235_3 +# 1237| r1237_2(glval) = VariableAddress[z] : +# 1237| r1237_3(glval) = VariableAddress[y] : +# 1237| r1237_4(int) = Load[y] : &:r1237_3, m1237_1 +# 1237| m1237_5(int) = Store[z] : &:r1237_2, r1237_4 +# 1238| v1238_1(void) = NoOp : +# 1231| v1231_7(void) = ReturnVoid : +# 1231| v1231_8(void) = AliasedUse : m1231_3 +# 1231| v1231_9(void) = ExitFunction : -# 1193| void switch2Case_fallthrough(int) -# 1193| Block 0 -# 1193| v1193_1(void) = EnterFunction : -# 1193| m1193_2(unknown) = AliasedDefinition : -# 1193| m1193_3(unknown) = InitializeNonLocal : -# 1193| m1193_4(unknown) = Chi : total:m1193_2, partial:m1193_3 -# 1193| r1193_5(glval) = VariableAddress[x] : -# 1193| m1193_6(int) = InitializeParameter[x] : &:r1193_5 -# 1194| r1194_1(glval) = VariableAddress[y] : -# 1194| r1194_2(int) = Constant[0] : -# 1194| m1194_3(int) = Store[y] : &:r1194_1, r1194_2 -# 1195| r1195_1(glval) = VariableAddress[x] : -# 1195| r1195_2(int) = Load[x] : &:r1195_1, m1193_6 -# 1195| v1195_3(void) = Switch : r1195_2 +# 1240| void switch2Case_fallthrough(int) +# 1240| Block 0 +# 1240| v1240_1(void) = EnterFunction : +# 1240| m1240_2(unknown) = AliasedDefinition : +# 1240| m1240_3(unknown) = InitializeNonLocal : +# 1240| m1240_4(unknown) = Chi : total:m1240_2, partial:m1240_3 +# 1240| r1240_5(glval) = VariableAddress[x] : +# 1240| m1240_6(int) = InitializeParameter[x] : &:r1240_5 +# 1241| r1241_1(glval) = VariableAddress[y] : +# 1241| r1241_2(int) = Constant[0] : +# 1241| m1241_3(int) = Store[y] : &:r1241_1, r1241_2 +# 1242| r1242_1(glval) = VariableAddress[x] : +# 1242| r1242_2(int) = Load[x] : &:r1242_1, m1240_6 +# 1242| v1242_3(void) = Switch : r1242_2 #-----| Case[1] -> Block 1 #-----| Case[2] -> Block 2 #-----| Default -> Block 3 -# 1196| Block 1 -# 1196| v1196_1(void) = NoOp : -# 1197| r1197_1(int) = Constant[2] : -# 1197| r1197_2(glval) = VariableAddress[y] : -# 1197| m1197_3(int) = Store[y] : &:r1197_2, r1197_1 -#-----| Goto -> Block 2 - -# 1198| Block 2 -# 1198| v1198_1(void) = NoOp : -# 1199| r1199_1(int) = Constant[3] : -# 1199| r1199_2(glval) = VariableAddress[y] : -# 1199| m1199_3(int) = Store[y] : &:r1199_2, r1199_1 -#-----| Goto -> Block 3 - -# 1201| Block 3 -# 1201| m1201_1(int) = Phi : from 0:m1194_3, from 2:m1199_3 -# 1201| r1201_2(glval) = VariableAddress[z] : -# 1201| r1201_3(glval) = VariableAddress[y] : -# 1201| r1201_4(int) = Load[y] : &:r1201_3, m1201_1 -# 1201| m1201_5(int) = Store[z] : &:r1201_2, r1201_4 -# 1202| v1202_1(void) = NoOp : -# 1193| v1193_7(void) = ReturnVoid : -# 1193| v1193_8(void) = AliasedUse : m1193_3 -# 1193| v1193_9(void) = ExitFunction : - -# 1204| void switch2Case(int) -# 1204| Block 0 -# 1204| v1204_1(void) = EnterFunction : -# 1204| m1204_2(unknown) = AliasedDefinition : -# 1204| m1204_3(unknown) = InitializeNonLocal : -# 1204| m1204_4(unknown) = Chi : total:m1204_2, partial:m1204_3 -# 1204| r1204_5(glval) = VariableAddress[x] : -# 1204| m1204_6(int) = InitializeParameter[x] : &:r1204_5 -# 1205| r1205_1(glval) = VariableAddress[y] : -# 1205| r1205_2(int) = Constant[0] : -# 1205| m1205_3(int) = Store[y] : &:r1205_1, r1205_2 -# 1206| r1206_1(glval) = VariableAddress[x] : -# 1206| r1206_2(int) = Load[x] : &:r1206_1, m1204_6 -# 1206| v1206_3(void) = Switch : r1206_2 -#-----| Case[1] -> Block 1 -#-----| Case[2] -> Block 2 -#-----| Default -> Block 3 - -# 1207| Block 1 -# 1207| v1207_1(void) = NoOp : -# 1208| r1208_1(int) = Constant[2] : -# 1208| r1208_2(glval) = VariableAddress[y] : -# 1208| m1208_3(int) = Store[y] : &:r1208_2, r1208_1 -# 1209| v1209_1(void) = NoOp : -#-----| Goto -> Block 3 - -# 1210| Block 2 -# 1210| v1210_1(void) = NoOp : -# 1211| r1211_1(int) = Constant[3] : -# 1211| r1211_2(glval) = VariableAddress[y] : -# 1211| m1211_3(int) = Store[y] : &:r1211_2, r1211_1 -#-----| Goto -> Block 3 - -# 1212| Block 3 -# 1212| m1212_1(int) = Phi : from 0:m1205_3, from 1:m1208_3, from 2:m1211_3 -# 1212| v1212_2(void) = NoOp : -# 1213| r1213_1(glval) = VariableAddress[z] : -# 1213| r1213_2(glval) = VariableAddress[y] : -# 1213| r1213_3(int) = Load[y] : &:r1213_2, m1212_1 -# 1213| m1213_4(int) = Store[z] : &:r1213_1, r1213_3 -# 1214| v1214_1(void) = NoOp : -# 1204| v1204_7(void) = ReturnVoid : -# 1204| v1204_8(void) = AliasedUse : m1204_3 -# 1204| v1204_9(void) = ExitFunction : - -# 1216| void switch2Case_default(int) -# 1216| Block 0 -# 1216| v1216_1(void) = EnterFunction : -# 1216| m1216_2(unknown) = AliasedDefinition : -# 1216| m1216_3(unknown) = InitializeNonLocal : -# 1216| m1216_4(unknown) = Chi : total:m1216_2, partial:m1216_3 -# 1216| r1216_5(glval) = VariableAddress[x] : -# 1216| m1216_6(int) = InitializeParameter[x] : &:r1216_5 -# 1217| r1217_1(glval) = VariableAddress[y] : -# 1217| r1217_2(int) = Constant[0] : -# 1217| m1217_3(int) = Store[y] : &:r1217_1, r1217_2 -# 1218| r1218_1(glval) = VariableAddress[x] : -# 1218| r1218_2(int) = Load[x] : &:r1218_1, m1216_6 -# 1218| v1218_3(void) = Switch : r1218_2 -#-----| Case[1] -> Block 1 -#-----| Case[2] -> Block 2 -#-----| Default -> Block 3 - -# 1219| Block 1 -# 1219| v1219_1(void) = NoOp : -# 1220| r1220_1(int) = Constant[2] : -# 1220| r1220_2(glval) = VariableAddress[y] : -# 1220| m1220_3(int) = Store[y] : &:r1220_2, r1220_1 -# 1221| v1221_1(void) = NoOp : -#-----| Goto -> Block 4 - -# 1223| Block 2 -# 1223| v1223_1(void) = NoOp : -# 1224| r1224_1(int) = Constant[3] : -# 1224| r1224_2(glval) = VariableAddress[y] : -# 1224| m1224_3(int) = Store[y] : &:r1224_2, r1224_1 -# 1225| v1225_1(void) = NoOp : -#-----| Goto -> Block 4 - -# 1227| Block 3 -# 1227| v1227_1(void) = NoOp : -# 1228| r1228_1(int) = Constant[4] : -# 1228| r1228_2(glval) = VariableAddress[y] : -# 1228| m1228_3(int) = Store[y] : &:r1228_2, r1228_1 -#-----| Goto -> Block 4 - -# 1229| Block 4 -# 1229| m1229_1(int) = Phi : from 1:m1220_3, from 2:m1224_3, from 3:m1228_3 -# 1229| v1229_2(void) = NoOp : -# 1230| r1230_1(glval) = VariableAddress[z] : -# 1230| r1230_2(glval) = VariableAddress[y] : -# 1230| r1230_3(int) = Load[y] : &:r1230_2, m1229_1 -# 1230| m1230_4(int) = Store[z] : &:r1230_1, r1230_3 -# 1231| v1231_1(void) = NoOp : -# 1216| v1216_7(void) = ReturnVoid : -# 1216| v1216_8(void) = AliasedUse : m1216_3 -# 1216| v1216_9(void) = ExitFunction : - -# 1233| int staticLocalInit(int) -# 1233| Block 0 -# 1233| v1233_1(void) = EnterFunction : -# 1233| m1233_2(unknown) = AliasedDefinition : -# 1233| m1233_3(unknown) = InitializeNonLocal : -# 1233| m1233_4(unknown) = Chi : total:m1233_2, partial:m1233_3 -# 1233| r1233_5(glval) = VariableAddress[x] : -# 1233| m1233_6(int) = InitializeParameter[x] : &:r1233_5 -# 1236| r1236_1(glval) = VariableAddress[c#init] : -# 1236| r1236_2(bool) = Load[c#init] : &:r1236_1, ~m1233_3 -# 1236| v1236_3(void) = ConditionalBranch : r1236_2 -#-----| False -> Block 1 -#-----| True -> Block 2 - -# 1236| Block 1 -# 1236| r1236_4(glval) = VariableAddress[c] : -# 1236| r1236_5(glval) = VariableAddress[x] : -# 1236| r1236_6(int) = Load[x] : &:r1236_5, m1233_6 -# 1236| m1236_7(int) = Store[c] : &:r1236_4, r1236_6 -# 1236| m1236_8(unknown) = Chi : total:m1233_4, partial:m1236_7 -# 1236| r1236_9(bool) = Constant[1] : -# 1236| m1236_10(bool) = Store[c#init] : &:r1236_1, r1236_9 -# 1236| m1236_11(unknown) = Chi : total:m1236_8, partial:m1236_10 -#-----| Goto -> Block 2 - -# 1239| Block 2 -# 1239| m1239_1(int) = Phi : from 0:~m1233_3, from 1:m1236_7 -# 1239| m1239_2(unknown) = Phi : from 0:~m1233_4, from 1:~m1236_11 -# 1239| r1239_3(glval) = VariableAddress[#return] : -# 1239| r1239_4(glval) = VariableAddress[a] : -# 1239| r1239_5(int) = Load[a] : &:r1239_4, ~m1239_2 -# 1239| r1239_6(glval) = VariableAddress[b] : -# 1239| r1239_7(int) = Load[b] : &:r1239_6, ~m1239_2 -# 1239| r1239_8(int) = Add : r1239_5, r1239_7 -# 1239| r1239_9(glval) = VariableAddress[c] : -# 1239| r1239_10(int) = Load[c] : &:r1239_9, m1239_1 -# 1239| r1239_11(int) = Add : r1239_8, r1239_10 -# 1239| r1239_12(glval) = VariableAddress[d] : -# 1239| r1239_13(int) = Load[d] : &:r1239_12, ~m1239_2 -# 1239| r1239_14(int) = Add : r1239_11, r1239_13 -# 1239| m1239_15(int) = Store[#return] : &:r1239_3, r1239_14 -# 1233| r1233_7(glval) = VariableAddress[#return] : -# 1233| v1233_8(void) = ReturnValue : &:r1233_7, m1239_15 -# 1233| v1233_9(void) = AliasedUse : ~m1239_2 -# 1233| v1233_10(void) = ExitFunction : - -# 1234| int a -# 1234| Block 0 -# 1234| v1234_1(void) = EnterFunction : -# 1234| m1234_2(unknown) = AliasedDefinition : -# 1234| r1234_3(glval) = VariableAddress[a] : -# 1234| r1234_4(int) = Constant[0] : -# 1234| m1234_5(int) = Store[a] : &:r1234_3, r1234_4 -# 1234| m1234_6(unknown) = Chi : total:m1234_2, partial:m1234_5 -# 1234| v1234_7(void) = ReturnVoid : -# 1234| v1234_8(void) = AliasedUse : ~m1234_6 -# 1234| v1234_9(void) = ExitFunction : - -# 1235| int b -# 1235| Block 0 -# 1235| v1235_1(void) = EnterFunction : -# 1235| m1235_2(unknown) = AliasedDefinition : -# 1235| r1235_3(glval) = VariableAddress[b] : -# 1235| r1235_4(int) = Constant[4] : -# 1235| m1235_5(int) = Store[b] : &:r1235_3, r1235_4 -# 1235| m1235_6(unknown) = Chi : total:m1235_2, partial:m1235_5 -# 1235| v1235_7(void) = ReturnVoid : -# 1235| v1235_8(void) = AliasedUse : ~m1235_6 -# 1235| v1235_9(void) = ExitFunction : - -# 1242| void staticLocalWithConstructor(char const*) -# 1242| Block 0 -# 1242| v1242_1(void) = EnterFunction : -# 1242| m1242_2(unknown) = AliasedDefinition : -# 1242| m1242_3(unknown) = InitializeNonLocal : -# 1242| m1242_4(unknown) = Chi : total:m1242_2, partial:m1242_3 -# 1242| r1242_5(glval) = VariableAddress[dynamic] : -# 1242| m1242_6(char *) = InitializeParameter[dynamic] : &:r1242_5 -# 1242| r1242_7(char *) = Load[dynamic] : &:r1242_5, m1242_6 -# 1242| m1242_8(unknown) = InitializeIndirection[dynamic] : &:r1242_7 -# 1243| r1243_1(glval) = VariableAddress[a#init] : -# 1243| r1243_2(bool) = Load[a#init] : &:r1243_1, ~m1242_3 -# 1243| v1243_3(void) = ConditionalBranch : r1243_2 -#-----| False -> Block 1 -#-----| True -> Block 2 - # 1243| Block 1 -# 1243| r1243_4(glval) = VariableAddress[a] : -#-----| r0_1(glval) = FunctionAddress[String] : -#-----| v0_2(void) = Call[String] : func:r0_1, this:r1243_4 -#-----| m0_3(unknown) = ^CallSideEffect : ~m1242_4 -#-----| m0_4(unknown) = Chi : total:m1242_4, partial:m0_3 -#-----| m0_5(String) = ^IndirectMayWriteSideEffect[-1] : &:r1243_4 -#-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5 -# 1243| r1243_5(bool) = Constant[1] : -# 1243| m1243_6(bool) = Store[a#init] : &:r1243_1, r1243_5 -# 1243| m1243_7(unknown) = Chi : total:m0_6, partial:m1243_6 +# 1243| v1243_1(void) = NoOp : +# 1244| r1244_1(int) = Constant[2] : +# 1244| r1244_2(glval) = VariableAddress[y] : +# 1244| m1244_3(int) = Store[y] : &:r1244_2, r1244_1 #-----| Goto -> Block 2 -# 1244| Block 2 -# 1244| m1244_1(unknown) = Phi : from 0:~m1242_4, from 1:~m1243_7 -# 1244| r1244_2(glval) = VariableAddress[b#init] : -# 1244| r1244_3(bool) = Load[b#init] : &:r1244_2, ~m1244_1 -# 1244| v1244_4(void) = ConditionalBranch : r1244_3 +# 1245| Block 2 +# 1245| v1245_1(void) = NoOp : +# 1246| r1246_1(int) = Constant[3] : +# 1246| r1246_2(glval) = VariableAddress[y] : +# 1246| m1246_3(int) = Store[y] : &:r1246_2, r1246_1 +#-----| Goto -> Block 3 + +# 1248| Block 3 +# 1248| m1248_1(int) = Phi : from 0:m1241_3, from 2:m1246_3 +# 1248| r1248_2(glval) = VariableAddress[z] : +# 1248| r1248_3(glval) = VariableAddress[y] : +# 1248| r1248_4(int) = Load[y] : &:r1248_3, m1248_1 +# 1248| m1248_5(int) = Store[z] : &:r1248_2, r1248_4 +# 1249| v1249_1(void) = NoOp : +# 1240| v1240_7(void) = ReturnVoid : +# 1240| v1240_8(void) = AliasedUse : m1240_3 +# 1240| v1240_9(void) = ExitFunction : + +# 1251| void switch2Case(int) +# 1251| Block 0 +# 1251| v1251_1(void) = EnterFunction : +# 1251| m1251_2(unknown) = AliasedDefinition : +# 1251| m1251_3(unknown) = InitializeNonLocal : +# 1251| m1251_4(unknown) = Chi : total:m1251_2, partial:m1251_3 +# 1251| r1251_5(glval) = VariableAddress[x] : +# 1251| m1251_6(int) = InitializeParameter[x] : &:r1251_5 +# 1252| r1252_1(glval) = VariableAddress[y] : +# 1252| r1252_2(int) = Constant[0] : +# 1252| m1252_3(int) = Store[y] : &:r1252_1, r1252_2 +# 1253| r1253_1(glval) = VariableAddress[x] : +# 1253| r1253_2(int) = Load[x] : &:r1253_1, m1251_6 +# 1253| v1253_3(void) = Switch : r1253_2 +#-----| Case[1] -> Block 1 +#-----| Case[2] -> Block 2 +#-----| Default -> Block 3 + +# 1254| Block 1 +# 1254| v1254_1(void) = NoOp : +# 1255| r1255_1(int) = Constant[2] : +# 1255| r1255_2(glval) = VariableAddress[y] : +# 1255| m1255_3(int) = Store[y] : &:r1255_2, r1255_1 +# 1256| v1256_1(void) = NoOp : +#-----| Goto -> Block 3 + +# 1257| Block 2 +# 1257| v1257_1(void) = NoOp : +# 1258| r1258_1(int) = Constant[3] : +# 1258| r1258_2(glval) = VariableAddress[y] : +# 1258| m1258_3(int) = Store[y] : &:r1258_2, r1258_1 +#-----| Goto -> Block 3 + +# 1259| Block 3 +# 1259| m1259_1(int) = Phi : from 0:m1252_3, from 1:m1255_3, from 2:m1258_3 +# 1259| v1259_2(void) = NoOp : +# 1260| r1260_1(glval) = VariableAddress[z] : +# 1260| r1260_2(glval) = VariableAddress[y] : +# 1260| r1260_3(int) = Load[y] : &:r1260_2, m1259_1 +# 1260| m1260_4(int) = Store[z] : &:r1260_1, r1260_3 +# 1261| v1261_1(void) = NoOp : +# 1251| v1251_7(void) = ReturnVoid : +# 1251| v1251_8(void) = AliasedUse : m1251_3 +# 1251| v1251_9(void) = ExitFunction : + +# 1263| void switch2Case_default(int) +# 1263| Block 0 +# 1263| v1263_1(void) = EnterFunction : +# 1263| m1263_2(unknown) = AliasedDefinition : +# 1263| m1263_3(unknown) = InitializeNonLocal : +# 1263| m1263_4(unknown) = Chi : total:m1263_2, partial:m1263_3 +# 1263| r1263_5(glval) = VariableAddress[x] : +# 1263| m1263_6(int) = InitializeParameter[x] : &:r1263_5 +# 1264| r1264_1(glval) = VariableAddress[y] : +# 1264| r1264_2(int) = Constant[0] : +# 1264| m1264_3(int) = Store[y] : &:r1264_1, r1264_2 +# 1265| r1265_1(glval) = VariableAddress[x] : +# 1265| r1265_2(int) = Load[x] : &:r1265_1, m1263_6 +# 1265| v1265_3(void) = Switch : r1265_2 +#-----| Case[1] -> Block 1 +#-----| Case[2] -> Block 2 +#-----| Default -> Block 3 + +# 1266| Block 1 +# 1266| v1266_1(void) = NoOp : +# 1267| r1267_1(int) = Constant[2] : +# 1267| r1267_2(glval) = VariableAddress[y] : +# 1267| m1267_3(int) = Store[y] : &:r1267_2, r1267_1 +# 1268| v1268_1(void) = NoOp : +#-----| Goto -> Block 4 + +# 1270| Block 2 +# 1270| v1270_1(void) = NoOp : +# 1271| r1271_1(int) = Constant[3] : +# 1271| r1271_2(glval) = VariableAddress[y] : +# 1271| m1271_3(int) = Store[y] : &:r1271_2, r1271_1 +# 1272| v1272_1(void) = NoOp : +#-----| Goto -> Block 4 + +# 1274| Block 3 +# 1274| v1274_1(void) = NoOp : +# 1275| r1275_1(int) = Constant[4] : +# 1275| r1275_2(glval) = VariableAddress[y] : +# 1275| m1275_3(int) = Store[y] : &:r1275_2, r1275_1 +#-----| Goto -> Block 4 + +# 1276| Block 4 +# 1276| m1276_1(int) = Phi : from 1:m1267_3, from 2:m1271_3, from 3:m1275_3 +# 1276| v1276_2(void) = NoOp : +# 1277| r1277_1(glval) = VariableAddress[z] : +# 1277| r1277_2(glval) = VariableAddress[y] : +# 1277| r1277_3(int) = Load[y] : &:r1277_2, m1276_1 +# 1277| m1277_4(int) = Store[z] : &:r1277_1, r1277_3 +# 1278| v1278_1(void) = NoOp : +# 1263| v1263_7(void) = ReturnVoid : +# 1263| v1263_8(void) = AliasedUse : m1263_3 +# 1263| v1263_9(void) = ExitFunction : + +# 1280| int staticLocalInit(int) +# 1280| Block 0 +# 1280| v1280_1(void) = EnterFunction : +# 1280| m1280_2(unknown) = AliasedDefinition : +# 1280| m1280_3(unknown) = InitializeNonLocal : +# 1280| m1280_4(unknown) = Chi : total:m1280_2, partial:m1280_3 +# 1280| r1280_5(glval) = VariableAddress[x] : +# 1280| m1280_6(int) = InitializeParameter[x] : &:r1280_5 +# 1283| r1283_1(glval) = VariableAddress[c#init] : +# 1283| r1283_2(bool) = Load[c#init] : &:r1283_1, ~m1280_3 +# 1283| v1283_3(void) = ConditionalBranch : r1283_2 +#-----| False -> Block 1 +#-----| True -> Block 2 + +# 1283| Block 1 +# 1283| r1283_4(glval) = VariableAddress[c] : +# 1283| r1283_5(glval) = VariableAddress[x] : +# 1283| r1283_6(int) = Load[x] : &:r1283_5, m1280_6 +# 1283| m1283_7(int) = Store[c] : &:r1283_4, r1283_6 +# 1283| m1283_8(unknown) = Chi : total:m1280_4, partial:m1283_7 +# 1283| r1283_9(bool) = Constant[1] : +# 1283| m1283_10(bool) = Store[c#init] : &:r1283_1, r1283_9 +# 1283| m1283_11(unknown) = Chi : total:m1283_8, partial:m1283_10 +#-----| Goto -> Block 2 + +# 1286| Block 2 +# 1286| m1286_1(int) = Phi : from 0:~m1280_3, from 1:m1283_7 +# 1286| m1286_2(unknown) = Phi : from 0:~m1280_4, from 1:~m1283_11 +# 1286| r1286_3(glval) = VariableAddress[#return] : +# 1286| r1286_4(glval) = VariableAddress[a] : +# 1286| r1286_5(int) = Load[a] : &:r1286_4, ~m1286_2 +# 1286| r1286_6(glval) = VariableAddress[b] : +# 1286| r1286_7(int) = Load[b] : &:r1286_6, ~m1286_2 +# 1286| r1286_8(int) = Add : r1286_5, r1286_7 +# 1286| r1286_9(glval) = VariableAddress[c] : +# 1286| r1286_10(int) = Load[c] : &:r1286_9, m1286_1 +# 1286| r1286_11(int) = Add : r1286_8, r1286_10 +# 1286| r1286_12(glval) = VariableAddress[d] : +# 1286| r1286_13(int) = Load[d] : &:r1286_12, ~m1286_2 +# 1286| r1286_14(int) = Add : r1286_11, r1286_13 +# 1286| m1286_15(int) = Store[#return] : &:r1286_3, r1286_14 +# 1280| r1280_7(glval) = VariableAddress[#return] : +# 1280| v1280_8(void) = ReturnValue : &:r1280_7, m1286_15 +# 1280| v1280_9(void) = AliasedUse : ~m1286_2 +# 1280| v1280_10(void) = ExitFunction : + +# 1281| int a +# 1281| Block 0 +# 1281| v1281_1(void) = EnterFunction : +# 1281| m1281_2(unknown) = AliasedDefinition : +# 1281| r1281_3(glval) = VariableAddress[a] : +# 1281| r1281_4(int) = Constant[0] : +# 1281| m1281_5(int) = Store[a] : &:r1281_3, r1281_4 +# 1281| m1281_6(unknown) = Chi : total:m1281_2, partial:m1281_5 +# 1281| v1281_7(void) = ReturnVoid : +# 1281| v1281_8(void) = AliasedUse : ~m1281_6 +# 1281| v1281_9(void) = ExitFunction : + +# 1282| int b +# 1282| Block 0 +# 1282| v1282_1(void) = EnterFunction : +# 1282| m1282_2(unknown) = AliasedDefinition : +# 1282| r1282_3(glval) = VariableAddress[b] : +# 1282| r1282_4(int) = Constant[4] : +# 1282| m1282_5(int) = Store[b] : &:r1282_3, r1282_4 +# 1282| m1282_6(unknown) = Chi : total:m1282_2, partial:m1282_5 +# 1282| v1282_7(void) = ReturnVoid : +# 1282| v1282_8(void) = AliasedUse : ~m1282_6 +# 1282| v1282_9(void) = ExitFunction : + +# 1289| void staticLocalWithConstructor(char const*) +# 1289| Block 0 +# 1289| v1289_1(void) = EnterFunction : +# 1289| m1289_2(unknown) = AliasedDefinition : +# 1289| m1289_3(unknown) = InitializeNonLocal : +# 1289| m1289_4(unknown) = Chi : total:m1289_2, partial:m1289_3 +# 1289| r1289_5(glval) = VariableAddress[dynamic] : +# 1289| m1289_6(char *) = InitializeParameter[dynamic] : &:r1289_5 +# 1289| r1289_7(char *) = Load[dynamic] : &:r1289_5, m1289_6 +# 1289| m1289_8(unknown) = InitializeIndirection[dynamic] : &:r1289_7 +# 1290| r1290_1(glval) = VariableAddress[a#init] : +# 1290| r1290_2(bool) = Load[a#init] : &:r1290_1, ~m1289_3 +# 1290| v1290_3(void) = ConditionalBranch : r1290_2 +#-----| False -> Block 1 +#-----| True -> Block 2 + +# 1290| Block 1 +# 1290| r1290_4(glval) = VariableAddress[a] : +#-----| r0_1(glval) = FunctionAddress[String] : +#-----| v0_2(void) = Call[String] : func:r0_1, this:r1290_4 +#-----| m0_3(unknown) = ^CallSideEffect : ~m1289_4 +#-----| m0_4(unknown) = Chi : total:m1289_4, partial:m0_3 +#-----| m0_5(String) = ^IndirectMayWriteSideEffect[-1] : &:r1290_4 +#-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5 +# 1290| r1290_5(bool) = Constant[1] : +# 1290| m1290_6(bool) = Store[a#init] : &:r1290_1, r1290_5 +# 1290| m1290_7(unknown) = Chi : total:m0_6, partial:m1290_6 +#-----| Goto -> Block 2 + +# 1291| Block 2 +# 1291| m1291_1(unknown) = Phi : from 0:~m1289_4, from 1:~m1290_7 +# 1291| r1291_2(glval) = VariableAddress[b#init] : +# 1291| r1291_3(bool) = Load[b#init] : &:r1291_2, ~m1291_1 +# 1291| v1291_4(void) = ConditionalBranch : r1291_3 #-----| False -> Block 3 #-----| True -> Block 4 -# 1244| Block 3 -# 1244| r1244_5(glval) = VariableAddress[b] : -# 1244| r1244_6(glval) = FunctionAddress[String] : -# 1244| r1244_7(glval) = StringConstant["static"] : -# 1244| r1244_8(char *) = Convert : r1244_7 -# 1244| v1244_9(void) = Call[String] : func:r1244_6, this:r1244_5, 0:r1244_8 -# 1244| m1244_10(unknown) = ^CallSideEffect : ~m1244_1 -# 1244| m1244_11(unknown) = Chi : total:m1244_1, partial:m1244_10 -# 1244| v1244_12(void) = ^BufferReadSideEffect[0] : &:r1244_8, ~m1242_3 -# 1244| m1244_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r1244_5 -# 1244| m1244_14(unknown) = Chi : total:m1244_11, partial:m1244_13 -# 1244| r1244_15(bool) = Constant[1] : -# 1244| m1244_16(bool) = Store[b#init] : &:r1244_2, r1244_15 -# 1244| m1244_17(unknown) = Chi : total:m1244_14, partial:m1244_16 +# 1291| Block 3 +# 1291| r1291_5(glval) = VariableAddress[b] : +# 1291| r1291_6(glval) = FunctionAddress[String] : +# 1291| r1291_7(glval) = StringConstant["static"] : +# 1291| r1291_8(char *) = Convert : r1291_7 +# 1291| v1291_9(void) = Call[String] : func:r1291_6, this:r1291_5, 0:r1291_8 +# 1291| m1291_10(unknown) = ^CallSideEffect : ~m1291_1 +# 1291| m1291_11(unknown) = Chi : total:m1291_1, partial:m1291_10 +# 1291| v1291_12(void) = ^BufferReadSideEffect[0] : &:r1291_8, ~m1289_3 +# 1291| m1291_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r1291_5 +# 1291| m1291_14(unknown) = Chi : total:m1291_11, partial:m1291_13 +# 1291| r1291_15(bool) = Constant[1] : +# 1291| m1291_16(bool) = Store[b#init] : &:r1291_2, r1291_15 +# 1291| m1291_17(unknown) = Chi : total:m1291_14, partial:m1291_16 #-----| Goto -> Block 4 -# 1245| Block 4 -# 1245| m1245_1(unknown) = Phi : from 2:~m1244_1, from 3:~m1244_17 -# 1245| r1245_2(glval) = VariableAddress[c#init] : -# 1245| r1245_3(bool) = Load[c#init] : &:r1245_2, ~m1245_1 -# 1245| v1245_4(void) = ConditionalBranch : r1245_3 +# 1292| Block 4 +# 1292| m1292_1(unknown) = Phi : from 2:~m1291_1, from 3:~m1291_17 +# 1292| r1292_2(glval) = VariableAddress[c#init] : +# 1292| r1292_3(bool) = Load[c#init] : &:r1292_2, ~m1292_1 +# 1292| v1292_4(void) = ConditionalBranch : r1292_3 #-----| False -> Block 5 #-----| True -> Block 6 -# 1245| Block 5 -# 1245| r1245_5(glval) = VariableAddress[c] : -# 1245| r1245_6(glval) = FunctionAddress[String] : -# 1245| r1245_7(glval) = VariableAddress[dynamic] : -# 1245| r1245_8(char *) = Load[dynamic] : &:r1245_7, m1242_6 -# 1245| v1245_9(void) = Call[String] : func:r1245_6, this:r1245_5, 0:r1245_8 -# 1245| m1245_10(unknown) = ^CallSideEffect : ~m1245_1 -# 1245| m1245_11(unknown) = Chi : total:m1245_1, partial:m1245_10 -# 1245| v1245_12(void) = ^BufferReadSideEffect[0] : &:r1245_8, ~m1242_8 -# 1245| m1245_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r1245_5 -# 1245| m1245_14(unknown) = Chi : total:m1245_11, partial:m1245_13 -# 1245| r1245_15(bool) = Constant[1] : -# 1245| m1245_16(bool) = Store[c#init] : &:r1245_2, r1245_15 -# 1245| m1245_17(unknown) = Chi : total:m1245_14, partial:m1245_16 +# 1292| Block 5 +# 1292| r1292_5(glval) = VariableAddress[c] : +# 1292| r1292_6(glval) = FunctionAddress[String] : +# 1292| r1292_7(glval) = VariableAddress[dynamic] : +# 1292| r1292_8(char *) = Load[dynamic] : &:r1292_7, m1289_6 +# 1292| v1292_9(void) = Call[String] : func:r1292_6, this:r1292_5, 0:r1292_8 +# 1292| m1292_10(unknown) = ^CallSideEffect : ~m1292_1 +# 1292| m1292_11(unknown) = Chi : total:m1292_1, partial:m1292_10 +# 1292| v1292_12(void) = ^BufferReadSideEffect[0] : &:r1292_8, ~m1289_8 +# 1292| m1292_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r1292_5 +# 1292| m1292_14(unknown) = Chi : total:m1292_11, partial:m1292_13 +# 1292| r1292_15(bool) = Constant[1] : +# 1292| m1292_16(bool) = Store[c#init] : &:r1292_2, r1292_15 +# 1292| m1292_17(unknown) = Chi : total:m1292_14, partial:m1292_16 #-----| Goto -> Block 6 -# 1246| Block 6 -# 1246| m1246_1(unknown) = Phi : from 4:~m1245_1, from 5:~m1245_17 -# 1246| v1246_2(void) = NoOp : -# 1242| v1242_9(void) = ReturnIndirection[dynamic] : &:r1242_7, m1242_8 -# 1242| v1242_10(void) = ReturnVoid : -# 1242| v1242_11(void) = AliasedUse : ~m1246_1 -# 1242| v1242_12(void) = ExitFunction : +# 1293| Block 6 +# 1293| m1293_1(unknown) = Phi : from 4:~m1292_1, from 5:~m1292_17 +# 1293| v1293_2(void) = NoOp : +# 1289| v1289_9(void) = ReturnIndirection[dynamic] : &:r1289_7, m1289_8 +# 1289| v1289_10(void) = ReturnVoid : +# 1289| v1289_11(void) = AliasedUse : ~m1293_1 +# 1289| v1289_12(void) = ExitFunction : -# 1253| void test_strings(char*, char*) -# 1253| Block 0 -# 1253| v1253_1(void) = EnterFunction : -# 1253| m1253_2(unknown) = AliasedDefinition : -# 1253| m1253_3(unknown) = InitializeNonLocal : -# 1253| m1253_4(unknown) = Chi : total:m1253_2, partial:m1253_3 -# 1253| r1253_5(glval) = VariableAddress[s1] : -# 1253| m1253_6(char *) = InitializeParameter[s1] : &:r1253_5 -# 1253| r1253_7(char *) = Load[s1] : &:r1253_5, m1253_6 -# 1253| m1253_8(unknown) = InitializeIndirection[s1] : &:r1253_7 -# 1253| r1253_9(glval) = VariableAddress[s2] : -# 1253| m1253_10(char *) = InitializeParameter[s2] : &:r1253_9 -# 1253| r1253_11(char *) = Load[s2] : &:r1253_9, m1253_10 -# 1253| m1253_12(unknown) = InitializeIndirection[s2] : &:r1253_11 -# 1254| r1254_1(glval) = VariableAddress[buffer] : -# 1254| m1254_2(char[1024]) = Uninitialized[buffer] : &:r1254_1 -# 1254| r1254_3(int) = Constant[0] : -# 1254| r1254_4(glval) = PointerAdd[1] : r1254_1, r1254_3 -# 1254| r1254_5(char) = Constant[0] : -# 1254| m1254_6(char) = Store[?] : &:r1254_4, r1254_5 -# 1254| m1254_7(char[1024]) = Chi : total:m1254_2, partial:m1254_6 -# 1254| r1254_8(int) = Constant[1] : -# 1254| r1254_9(glval) = PointerAdd[1] : r1254_1, r1254_8 -# 1254| r1254_10(unknown[1023]) = Constant[0] : -# 1254| m1254_11(unknown[1023]) = Store[?] : &:r1254_9, r1254_10 -# 1254| m1254_12(char[1024]) = Chi : total:m1254_7, partial:m1254_11 -# 1256| r1256_1(glval) = FunctionAddress[strcpy] : -# 1256| r1256_2(glval) = VariableAddress[buffer] : -# 1256| r1256_3(char *) = Convert : r1256_2 -# 1256| r1256_4(glval) = VariableAddress[s1] : -# 1256| r1256_5(char *) = Load[s1] : &:r1256_4, m1253_6 -# 1256| r1256_6(char *) = Convert : r1256_5 -# 1256| r1256_7(char *) = Call[strcpy] : func:r1256_1, 0:r1256_3, 1:r1256_6 -# 1256| v1256_8(void) = ^BufferReadSideEffect[1] : &:r1256_6, ~m1253_8 -# 1256| m1256_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1256_3 -# 1256| m1256_10(char[1024]) = Chi : total:m1254_12, partial:m1256_9 -# 1257| r1257_1(glval) = FunctionAddress[strcat] : -# 1257| r1257_2(glval) = VariableAddress[buffer] : -# 1257| r1257_3(char *) = Convert : r1257_2 -# 1257| r1257_4(glval) = VariableAddress[s2] : -# 1257| r1257_5(char *) = Load[s2] : &:r1257_4, m1253_10 -# 1257| r1257_6(char *) = Convert : r1257_5 -# 1257| r1257_7(char *) = Call[strcat] : func:r1257_1, 0:r1257_3, 1:r1257_6 -# 1257| v1257_8(void) = ^BufferReadSideEffect[0] : &:r1257_3, ~m1256_10 -# 1257| v1257_9(void) = ^BufferReadSideEffect[1] : &:r1257_6, ~m1253_12 -# 1257| m1257_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1257_3 -# 1257| m1257_11(char[1024]) = Chi : total:m1256_10, partial:m1257_10 -# 1258| v1258_1(void) = NoOp : -# 1253| v1253_13(void) = ReturnIndirection[s1] : &:r1253_7, m1253_8 -# 1253| v1253_14(void) = ReturnIndirection[s2] : &:r1253_11, m1253_12 -# 1253| v1253_15(void) = ReturnVoid : -# 1253| v1253_16(void) = AliasedUse : m1253_3 -# 1253| v1253_17(void) = ExitFunction : +# 1300| void test_strings(char*, char*) +# 1300| Block 0 +# 1300| v1300_1(void) = EnterFunction : +# 1300| m1300_2(unknown) = AliasedDefinition : +# 1300| m1300_3(unknown) = InitializeNonLocal : +# 1300| m1300_4(unknown) = Chi : total:m1300_2, partial:m1300_3 +# 1300| r1300_5(glval) = VariableAddress[s1] : +# 1300| m1300_6(char *) = InitializeParameter[s1] : &:r1300_5 +# 1300| r1300_7(char *) = Load[s1] : &:r1300_5, m1300_6 +# 1300| m1300_8(unknown) = InitializeIndirection[s1] : &:r1300_7 +# 1300| r1300_9(glval) = VariableAddress[s2] : +# 1300| m1300_10(char *) = InitializeParameter[s2] : &:r1300_9 +# 1300| r1300_11(char *) = Load[s2] : &:r1300_9, m1300_10 +# 1300| m1300_12(unknown) = InitializeIndirection[s2] : &:r1300_11 +# 1301| r1301_1(glval) = VariableAddress[buffer] : +# 1301| m1301_2(char[1024]) = Uninitialized[buffer] : &:r1301_1 +# 1301| r1301_3(int) = Constant[0] : +# 1301| r1301_4(glval) = PointerAdd[1] : r1301_1, r1301_3 +# 1301| r1301_5(char) = Constant[0] : +# 1301| m1301_6(char) = Store[?] : &:r1301_4, r1301_5 +# 1301| m1301_7(char[1024]) = Chi : total:m1301_2, partial:m1301_6 +# 1301| r1301_8(int) = Constant[1] : +# 1301| r1301_9(glval) = PointerAdd[1] : r1301_1, r1301_8 +# 1301| r1301_10(unknown[1023]) = Constant[0] : +# 1301| m1301_11(unknown[1023]) = Store[?] : &:r1301_9, r1301_10 +# 1301| m1301_12(char[1024]) = Chi : total:m1301_7, partial:m1301_11 +# 1303| r1303_1(glval) = FunctionAddress[strcpy] : +# 1303| r1303_2(glval) = VariableAddress[buffer] : +# 1303| r1303_3(char *) = Convert : r1303_2 +# 1303| r1303_4(glval) = VariableAddress[s1] : +# 1303| r1303_5(char *) = Load[s1] : &:r1303_4, m1300_6 +# 1303| r1303_6(char *) = Convert : r1303_5 +# 1303| r1303_7(char *) = Call[strcpy] : func:r1303_1, 0:r1303_3, 1:r1303_6 +# 1303| v1303_8(void) = ^BufferReadSideEffect[1] : &:r1303_6, ~m1300_8 +# 1303| m1303_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1303_3 +# 1303| m1303_10(char[1024]) = Chi : total:m1301_12, partial:m1303_9 +# 1304| r1304_1(glval) = FunctionAddress[strcat] : +# 1304| r1304_2(glval) = VariableAddress[buffer] : +# 1304| r1304_3(char *) = Convert : r1304_2 +# 1304| r1304_4(glval) = VariableAddress[s2] : +# 1304| r1304_5(char *) = Load[s2] : &:r1304_4, m1300_10 +# 1304| r1304_6(char *) = Convert : r1304_5 +# 1304| r1304_7(char *) = Call[strcat] : func:r1304_1, 0:r1304_3, 1:r1304_6 +# 1304| v1304_8(void) = ^BufferReadSideEffect[0] : &:r1304_3, ~m1303_10 +# 1304| v1304_9(void) = ^BufferReadSideEffect[1] : &:r1304_6, ~m1300_12 +# 1304| m1304_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1304_3 +# 1304| m1304_11(char[1024]) = Chi : total:m1303_10, partial:m1304_10 +# 1305| v1305_1(void) = NoOp : +# 1300| v1300_13(void) = ReturnIndirection[s1] : &:r1300_7, m1300_8 +# 1300| v1300_14(void) = ReturnIndirection[s2] : &:r1300_11, m1300_12 +# 1300| v1300_15(void) = ReturnVoid : +# 1300| v1300_16(void) = AliasedUse : m1300_3 +# 1300| v1300_17(void) = ExitFunction : -# 1263| void A::static_member(A*, int) -# 1263| Block 0 -# 1263| v1263_1(void) = EnterFunction : -# 1263| m1263_2(unknown) = AliasedDefinition : -# 1263| m1263_3(unknown) = InitializeNonLocal : -# 1263| m1263_4(unknown) = Chi : total:m1263_2, partial:m1263_3 -# 1263| r1263_5(glval) = VariableAddress[a] : -# 1263| m1263_6(A *) = InitializeParameter[a] : &:r1263_5 -# 1263| r1263_7(A *) = Load[a] : &:r1263_5, m1263_6 -# 1263| m1263_8(unknown) = InitializeIndirection[a] : &:r1263_7 -# 1263| r1263_9(glval) = VariableAddress[x] : -# 1263| m1263_10(int) = InitializeParameter[x] : &:r1263_9 -# 1264| r1264_1(glval) = VariableAddress[x] : -# 1264| r1264_2(int) = Load[x] : &:r1264_1, m1263_10 -# 1264| r1264_3(glval) = VariableAddress[a] : -# 1264| r1264_4(A *) = Load[a] : &:r1264_3, m1263_6 -# 1264| r1264_5(glval) = FieldAddress[member] : r1264_4 -# 1264| m1264_6(int) = Store[?] : &:r1264_5, r1264_2 -# 1264| m1264_7(unknown) = Chi : total:m1263_8, partial:m1264_6 -# 1265| v1265_1(void) = NoOp : -# 1263| v1263_11(void) = ReturnIndirection[a] : &:r1263_7, m1264_7 -# 1263| v1263_12(void) = ReturnVoid : -# 1263| v1263_13(void) = AliasedUse : m1263_3 -# 1263| v1263_14(void) = ExitFunction : +# 1310| void A::static_member(A*, int) +# 1310| Block 0 +# 1310| v1310_1(void) = EnterFunction : +# 1310| m1310_2(unknown) = AliasedDefinition : +# 1310| m1310_3(unknown) = InitializeNonLocal : +# 1310| m1310_4(unknown) = Chi : total:m1310_2, partial:m1310_3 +# 1310| r1310_5(glval) = VariableAddress[a] : +# 1310| m1310_6(A *) = InitializeParameter[a] : &:r1310_5 +# 1310| r1310_7(A *) = Load[a] : &:r1310_5, m1310_6 +# 1310| m1310_8(unknown) = InitializeIndirection[a] : &:r1310_7 +# 1310| r1310_9(glval) = VariableAddress[x] : +# 1310| m1310_10(int) = InitializeParameter[x] : &:r1310_9 +# 1311| r1311_1(glval) = VariableAddress[x] : +# 1311| r1311_2(int) = Load[x] : &:r1311_1, m1310_10 +# 1311| r1311_3(glval) = VariableAddress[a] : +# 1311| r1311_4(A *) = Load[a] : &:r1311_3, m1310_6 +# 1311| r1311_5(glval) = FieldAddress[member] : r1311_4 +# 1311| m1311_6(int) = Store[?] : &:r1311_5, r1311_2 +# 1311| m1311_7(unknown) = Chi : total:m1310_8, partial:m1311_6 +# 1312| v1312_1(void) = NoOp : +# 1310| v1310_11(void) = ReturnIndirection[a] : &:r1310_7, m1311_7 +# 1310| v1310_12(void) = ReturnVoid : +# 1310| v1310_13(void) = AliasedUse : m1310_3 +# 1310| v1310_14(void) = ExitFunction : -# 1272| void test_static_member_functions(int, A*) -# 1272| Block 0 -# 1272| v1272_1(void) = EnterFunction : -# 1272| m1272_2(unknown) = AliasedDefinition : -# 1272| m1272_3(unknown) = InitializeNonLocal : -# 1272| m1272_4(unknown) = Chi : total:m1272_2, partial:m1272_3 -# 1272| r1272_5(glval) = VariableAddress[int_arg] : -# 1272| m1272_6(int) = InitializeParameter[int_arg] : &:r1272_5 -# 1272| r1272_7(glval) = VariableAddress[a_arg] : -# 1272| m1272_8(A *) = InitializeParameter[a_arg] : &:r1272_7 -# 1272| r1272_9(A *) = Load[a_arg] : &:r1272_7, m1272_8 -# 1272| m1272_10(unknown) = InitializeIndirection[a_arg] : &:r1272_9 -# 1273| r1273_1(glval) = VariableAddress[c] : -# 1273| m1273_2(C) = Uninitialized[c] : &:r1273_1 -# 1273| r1273_3(glval) = FunctionAddress[C] : -# 1273| v1273_4(void) = Call[C] : func:r1273_3, this:r1273_1 -# 1273| m1273_5(unknown) = ^CallSideEffect : ~m1272_4 -# 1273| m1273_6(unknown) = Chi : total:m1272_4, partial:m1273_5 -# 1273| m1273_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1273_1 -# 1273| m1273_8(C) = Chi : total:m1273_2, partial:m1273_7 -# 1274| r1274_1(glval) = VariableAddress[c] : -# 1274| r1274_2(glval) = FunctionAddress[StaticMemberFunction] : -# 1274| r1274_3(int) = Constant[10] : -# 1274| r1274_4(int) = Call[StaticMemberFunction] : func:r1274_2, 0:r1274_3 -# 1274| m1274_5(unknown) = ^CallSideEffect : ~m1273_6 -# 1274| m1274_6(unknown) = Chi : total:m1273_6, partial:m1274_5 -# 1275| r1275_1(glval) = FunctionAddress[StaticMemberFunction] : -# 1275| r1275_2(int) = Constant[10] : -# 1275| r1275_3(int) = Call[StaticMemberFunction] : func:r1275_1, 0:r1275_2 -# 1275| m1275_4(unknown) = ^CallSideEffect : ~m1274_6 -# 1275| m1275_5(unknown) = Chi : total:m1274_6, partial:m1275_4 -# 1277| r1277_1(glval) = VariableAddress[a] : -# 1277| m1277_2(A) = Uninitialized[a] : &:r1277_1 -# 1278| r1278_1(glval) = VariableAddress[a] : -# 1278| r1278_2(glval) = FunctionAddress[static_member] : -# 1278| r1278_3(glval) = VariableAddress[a] : -# 1278| r1278_4(A *) = CopyValue : r1278_3 -# 1278| r1278_5(glval) = VariableAddress[int_arg] : -# 1278| r1278_6(int) = Load[int_arg] : &:r1278_5, m1272_6 -# 1278| v1278_7(void) = Call[static_member] : func:r1278_2, 0:r1278_4, 1:r1278_6 -# 1278| m1278_8(unknown) = ^CallSideEffect : ~m1275_5 -# 1278| m1278_9(unknown) = Chi : total:m1275_5, partial:m1278_8 -# 1278| v1278_10(void) = ^BufferReadSideEffect[0] : &:r1278_4, ~m1277_2 -# 1278| m1278_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1278_4 -# 1278| m1278_12(A) = Chi : total:m1277_2, partial:m1278_11 -# 1279| r1279_1(glval) = FunctionAddress[static_member] : -# 1279| r1279_2(glval) = VariableAddress[a] : -# 1279| r1279_3(A *) = CopyValue : r1279_2 -# 1279| r1279_4(glval) = VariableAddress[int_arg] : -# 1279| r1279_5(int) = Load[int_arg] : &:r1279_4, m1272_6 -# 1279| v1279_6(void) = Call[static_member] : func:r1279_1, 0:r1279_3, 1:r1279_5 -# 1279| m1279_7(unknown) = ^CallSideEffect : ~m1278_9 -# 1279| m1279_8(unknown) = Chi : total:m1278_9, partial:m1279_7 -# 1279| v1279_9(void) = ^BufferReadSideEffect[0] : &:r1279_3, ~m1278_12 -# 1279| m1279_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1279_3 -# 1279| m1279_11(A) = Chi : total:m1278_12, partial:m1279_10 -# 1281| r1281_1(glval) = VariableAddress[a] : -# 1281| r1281_2(A *) = CopyValue : r1281_1 -# 1281| r1281_3(glval) = FunctionAddress[static_member] : -# 1281| r1281_4(glval) = VariableAddress[a_arg] : -# 1281| r1281_5(A *) = Load[a_arg] : &:r1281_4, m1272_8 -# 1281| r1281_6(glval) = VariableAddress[int_arg] : -# 1281| r1281_7(int) = Load[int_arg] : &:r1281_6, m1272_6 -# 1281| r1281_8(int) = Constant[2] : -# 1281| r1281_9(int) = Add : r1281_7, r1281_8 -# 1281| v1281_10(void) = Call[static_member] : func:r1281_3, 0:r1281_5, 1:r1281_9 -# 1281| m1281_11(unknown) = ^CallSideEffect : ~m1279_8 -# 1281| m1281_12(unknown) = Chi : total:m1279_8, partial:m1281_11 -# 1281| v1281_13(void) = ^BufferReadSideEffect[0] : &:r1281_5, ~m1272_10 -# 1281| m1281_14(unknown) = ^BufferMayWriteSideEffect[0] : &:r1281_5 -# 1281| m1281_15(unknown) = Chi : total:m1272_10, partial:m1281_14 -# 1282| r1282_1(glval) = VariableAddress[a_arg] : -# 1282| r1282_2(A *) = Load[a_arg] : &:r1282_1, m1272_8 -# 1282| r1282_3(glval) = CopyValue : r1282_2 -# 1282| r1282_4(glval) = FunctionAddress[static_member] : -# 1282| r1282_5(glval) = VariableAddress[a] : -# 1282| r1282_6(A *) = CopyValue : r1282_5 -# 1282| r1282_7(int) = Constant[99] : -# 1282| v1282_8(void) = Call[static_member] : func:r1282_4, 0:r1282_6, 1:r1282_7 -# 1282| m1282_9(unknown) = ^CallSideEffect : ~m1281_12 -# 1282| m1282_10(unknown) = Chi : total:m1281_12, partial:m1282_9 -# 1282| v1282_11(void) = ^BufferReadSideEffect[0] : &:r1282_6, ~m1279_11 -# 1282| m1282_12(unknown) = ^BufferMayWriteSideEffect[0] : &:r1282_6 -# 1282| m1282_13(A) = Chi : total:m1279_11, partial:m1282_12 -# 1283| r1283_1(glval) = VariableAddress[a_arg] : -# 1283| r1283_2(A *) = Load[a_arg] : &:r1283_1, m1272_8 -# 1283| r1283_3(glval) = FunctionAddress[static_member] : -# 1283| r1283_4(glval) = VariableAddress[a_arg] : -# 1283| r1283_5(A *) = Load[a_arg] : &:r1283_4, m1272_8 -# 1283| r1283_6(int) = Constant[-1] : -# 1283| v1283_7(void) = Call[static_member] : func:r1283_3, 0:r1283_5, 1:r1283_6 -# 1283| m1283_8(unknown) = ^CallSideEffect : ~m1282_10 -# 1283| m1283_9(unknown) = Chi : total:m1282_10, partial:m1283_8 -# 1283| v1283_10(void) = ^BufferReadSideEffect[0] : &:r1283_5, ~m1281_15 -# 1283| m1283_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1283_5 -# 1283| m1283_12(unknown) = Chi : total:m1281_15, partial:m1283_11 -# 1285| r1285_1(glval) = VariableAddress[a] : -# 1285| r1285_2(glval) = FunctionAddress[static_member_without_def] : -# 1285| v1285_3(void) = Call[static_member_without_def] : func:r1285_2 -# 1285| m1285_4(unknown) = ^CallSideEffect : ~m1283_9 -# 1285| m1285_5(unknown) = Chi : total:m1283_9, partial:m1285_4 -# 1286| r1286_1(glval) = FunctionAddress[static_member_without_def] : -# 1286| v1286_2(void) = Call[static_member_without_def] : func:r1286_1 -# 1286| m1286_3(unknown) = ^CallSideEffect : ~m1285_5 -# 1286| m1286_4(unknown) = Chi : total:m1285_5, partial:m1286_3 -# 1288| r1288_1(glval) = FunctionAddress[getAnInstanceOfA] : -# 1288| r1288_2(A *) = Call[getAnInstanceOfA] : func:r1288_1 -# 1288| m1288_3(unknown) = ^CallSideEffect : ~m1286_4 -# 1288| m1288_4(unknown) = Chi : total:m1286_4, partial:m1288_3 -# 1288| r1288_5(glval) = FunctionAddress[static_member_without_def] : -# 1288| v1288_6(void) = Call[static_member_without_def] : func:r1288_5 -# 1288| m1288_7(unknown) = ^CallSideEffect : ~m1288_4 -# 1288| m1288_8(unknown) = Chi : total:m1288_4, partial:m1288_7 -# 1289| v1289_1(void) = NoOp : -# 1289| r1289_2(glval) = VariableAddress[c] : -# 1289| r1289_3(glval) = FunctionAddress[~C] : -# 1289| v1289_4(void) = Call[~C] : func:r1289_3, this:r1289_2 -# 1289| m1289_5(unknown) = ^CallSideEffect : ~m1288_8 -# 1289| m1289_6(unknown) = Chi : total:m1288_8, partial:m1289_5 -# 1289| v1289_7(void) = ^IndirectReadSideEffect[-1] : &:r1289_2, m1273_8 -# 1289| m1289_8(C) = ^IndirectMayWriteSideEffect[-1] : &:r1289_2 -# 1289| m1289_9(C) = Chi : total:m1273_8, partial:m1289_8 -# 1272| v1272_11(void) = ReturnIndirection[a_arg] : &:r1272_9, m1283_12 -# 1272| v1272_12(void) = ReturnVoid : -# 1272| v1272_13(void) = AliasedUse : ~m1289_6 -# 1272| v1272_14(void) = ExitFunction : +# 1319| void test_static_member_functions(int, A*) +# 1319| Block 0 +# 1319| v1319_1(void) = EnterFunction : +# 1319| m1319_2(unknown) = AliasedDefinition : +# 1319| m1319_3(unknown) = InitializeNonLocal : +# 1319| m1319_4(unknown) = Chi : total:m1319_2, partial:m1319_3 +# 1319| r1319_5(glval) = VariableAddress[int_arg] : +# 1319| m1319_6(int) = InitializeParameter[int_arg] : &:r1319_5 +# 1319| r1319_7(glval) = VariableAddress[a_arg] : +# 1319| m1319_8(A *) = InitializeParameter[a_arg] : &:r1319_7 +# 1319| r1319_9(A *) = Load[a_arg] : &:r1319_7, m1319_8 +# 1319| m1319_10(unknown) = InitializeIndirection[a_arg] : &:r1319_9 +# 1320| r1320_1(glval) = VariableAddress[c] : +# 1320| m1320_2(C) = Uninitialized[c] : &:r1320_1 +# 1320| r1320_3(glval) = FunctionAddress[C] : +# 1320| v1320_4(void) = Call[C] : func:r1320_3, this:r1320_1 +# 1320| m1320_5(unknown) = ^CallSideEffect : ~m1319_4 +# 1320| m1320_6(unknown) = Chi : total:m1319_4, partial:m1320_5 +# 1320| m1320_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1320_1 +# 1320| m1320_8(C) = Chi : total:m1320_2, partial:m1320_7 +# 1321| r1321_1(glval) = VariableAddress[c] : +# 1321| r1321_2(glval) = FunctionAddress[StaticMemberFunction] : +# 1321| r1321_3(int) = Constant[10] : +# 1321| r1321_4(int) = Call[StaticMemberFunction] : func:r1321_2, 0:r1321_3 +# 1321| m1321_5(unknown) = ^CallSideEffect : ~m1320_6 +# 1321| m1321_6(unknown) = Chi : total:m1320_6, partial:m1321_5 +# 1322| r1322_1(glval) = FunctionAddress[StaticMemberFunction] : +# 1322| r1322_2(int) = Constant[10] : +# 1322| r1322_3(int) = Call[StaticMemberFunction] : func:r1322_1, 0:r1322_2 +# 1322| m1322_4(unknown) = ^CallSideEffect : ~m1321_6 +# 1322| m1322_5(unknown) = Chi : total:m1321_6, partial:m1322_4 +# 1324| r1324_1(glval) = VariableAddress[a] : +# 1324| m1324_2(A) = Uninitialized[a] : &:r1324_1 +# 1325| r1325_1(glval) = VariableAddress[a] : +# 1325| r1325_2(glval) = FunctionAddress[static_member] : +# 1325| r1325_3(glval) = VariableAddress[a] : +# 1325| r1325_4(A *) = CopyValue : r1325_3 +# 1325| r1325_5(glval) = VariableAddress[int_arg] : +# 1325| r1325_6(int) = Load[int_arg] : &:r1325_5, m1319_6 +# 1325| v1325_7(void) = Call[static_member] : func:r1325_2, 0:r1325_4, 1:r1325_6 +# 1325| m1325_8(unknown) = ^CallSideEffect : ~m1322_5 +# 1325| m1325_9(unknown) = Chi : total:m1322_5, partial:m1325_8 +# 1325| v1325_10(void) = ^BufferReadSideEffect[0] : &:r1325_4, ~m1324_2 +# 1325| m1325_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1325_4 +# 1325| m1325_12(A) = Chi : total:m1324_2, partial:m1325_11 +# 1326| r1326_1(glval) = FunctionAddress[static_member] : +# 1326| r1326_2(glval) = VariableAddress[a] : +# 1326| r1326_3(A *) = CopyValue : r1326_2 +# 1326| r1326_4(glval) = VariableAddress[int_arg] : +# 1326| r1326_5(int) = Load[int_arg] : &:r1326_4, m1319_6 +# 1326| v1326_6(void) = Call[static_member] : func:r1326_1, 0:r1326_3, 1:r1326_5 +# 1326| m1326_7(unknown) = ^CallSideEffect : ~m1325_9 +# 1326| m1326_8(unknown) = Chi : total:m1325_9, partial:m1326_7 +# 1326| v1326_9(void) = ^BufferReadSideEffect[0] : &:r1326_3, ~m1325_12 +# 1326| m1326_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1326_3 +# 1326| m1326_11(A) = Chi : total:m1325_12, partial:m1326_10 +# 1328| r1328_1(glval) = VariableAddress[a] : +# 1328| r1328_2(A *) = CopyValue : r1328_1 +# 1328| r1328_3(glval) = FunctionAddress[static_member] : +# 1328| r1328_4(glval) = VariableAddress[a_arg] : +# 1328| r1328_5(A *) = Load[a_arg] : &:r1328_4, m1319_8 +# 1328| r1328_6(glval) = VariableAddress[int_arg] : +# 1328| r1328_7(int) = Load[int_arg] : &:r1328_6, m1319_6 +# 1328| r1328_8(int) = Constant[2] : +# 1328| r1328_9(int) = Add : r1328_7, r1328_8 +# 1328| v1328_10(void) = Call[static_member] : func:r1328_3, 0:r1328_5, 1:r1328_9 +# 1328| m1328_11(unknown) = ^CallSideEffect : ~m1326_8 +# 1328| m1328_12(unknown) = Chi : total:m1326_8, partial:m1328_11 +# 1328| v1328_13(void) = ^BufferReadSideEffect[0] : &:r1328_5, ~m1319_10 +# 1328| m1328_14(unknown) = ^BufferMayWriteSideEffect[0] : &:r1328_5 +# 1328| m1328_15(unknown) = Chi : total:m1319_10, partial:m1328_14 +# 1329| r1329_1(glval) = VariableAddress[a_arg] : +# 1329| r1329_2(A *) = Load[a_arg] : &:r1329_1, m1319_8 +# 1329| r1329_3(glval) = CopyValue : r1329_2 +# 1329| r1329_4(glval) = FunctionAddress[static_member] : +# 1329| r1329_5(glval) = VariableAddress[a] : +# 1329| r1329_6(A *) = CopyValue : r1329_5 +# 1329| r1329_7(int) = Constant[99] : +# 1329| v1329_8(void) = Call[static_member] : func:r1329_4, 0:r1329_6, 1:r1329_7 +# 1329| m1329_9(unknown) = ^CallSideEffect : ~m1328_12 +# 1329| m1329_10(unknown) = Chi : total:m1328_12, partial:m1329_9 +# 1329| v1329_11(void) = ^BufferReadSideEffect[0] : &:r1329_6, ~m1326_11 +# 1329| m1329_12(unknown) = ^BufferMayWriteSideEffect[0] : &:r1329_6 +# 1329| m1329_13(A) = Chi : total:m1326_11, partial:m1329_12 +# 1330| r1330_1(glval) = VariableAddress[a_arg] : +# 1330| r1330_2(A *) = Load[a_arg] : &:r1330_1, m1319_8 +# 1330| r1330_3(glval) = FunctionAddress[static_member] : +# 1330| r1330_4(glval) = VariableAddress[a_arg] : +# 1330| r1330_5(A *) = Load[a_arg] : &:r1330_4, m1319_8 +# 1330| r1330_6(int) = Constant[-1] : +# 1330| v1330_7(void) = Call[static_member] : func:r1330_3, 0:r1330_5, 1:r1330_6 +# 1330| m1330_8(unknown) = ^CallSideEffect : ~m1329_10 +# 1330| m1330_9(unknown) = Chi : total:m1329_10, partial:m1330_8 +# 1330| v1330_10(void) = ^BufferReadSideEffect[0] : &:r1330_5, ~m1328_15 +# 1330| m1330_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1330_5 +# 1330| m1330_12(unknown) = Chi : total:m1328_15, partial:m1330_11 +# 1332| r1332_1(glval) = VariableAddress[a] : +# 1332| r1332_2(glval) = FunctionAddress[static_member_without_def] : +# 1332| v1332_3(void) = Call[static_member_without_def] : func:r1332_2 +# 1332| m1332_4(unknown) = ^CallSideEffect : ~m1330_9 +# 1332| m1332_5(unknown) = Chi : total:m1330_9, partial:m1332_4 +# 1333| r1333_1(glval) = FunctionAddress[static_member_without_def] : +# 1333| v1333_2(void) = Call[static_member_without_def] : func:r1333_1 +# 1333| m1333_3(unknown) = ^CallSideEffect : ~m1332_5 +# 1333| m1333_4(unknown) = Chi : total:m1332_5, partial:m1333_3 +# 1335| r1335_1(glval) = FunctionAddress[getAnInstanceOfA] : +# 1335| r1335_2(A *) = Call[getAnInstanceOfA] : func:r1335_1 +# 1335| m1335_3(unknown) = ^CallSideEffect : ~m1333_4 +# 1335| m1335_4(unknown) = Chi : total:m1333_4, partial:m1335_3 +# 1335| r1335_5(glval) = FunctionAddress[static_member_without_def] : +# 1335| v1335_6(void) = Call[static_member_without_def] : func:r1335_5 +# 1335| m1335_7(unknown) = ^CallSideEffect : ~m1335_4 +# 1335| m1335_8(unknown) = Chi : total:m1335_4, partial:m1335_7 +# 1336| v1336_1(void) = NoOp : +# 1336| r1336_2(glval) = VariableAddress[c] : +# 1336| r1336_3(glval) = FunctionAddress[~C] : +# 1336| v1336_4(void) = Call[~C] : func:r1336_3, this:r1336_2 +# 1336| m1336_5(unknown) = ^CallSideEffect : ~m1335_8 +# 1336| m1336_6(unknown) = Chi : total:m1335_8, partial:m1336_5 +# 1336| v1336_7(void) = ^IndirectReadSideEffect[-1] : &:r1336_2, m1320_8 +# 1336| m1336_8(C) = ^IndirectMayWriteSideEffect[-1] : &:r1336_2 +# 1336| m1336_9(C) = Chi : total:m1320_8, partial:m1336_8 +# 1319| v1319_11(void) = ReturnIndirection[a_arg] : &:r1319_9, m1330_12 +# 1319| v1319_12(void) = ReturnVoid : +# 1319| v1319_13(void) = AliasedUse : ~m1336_6 +# 1319| v1319_14(void) = ExitFunction : -# 1291| int missingReturnValue(bool, int) -# 1291| Block 0 -# 1291| v1291_1(void) = EnterFunction : -# 1291| m1291_2(unknown) = AliasedDefinition : -# 1291| m1291_3(unknown) = InitializeNonLocal : -# 1291| m1291_4(unknown) = Chi : total:m1291_2, partial:m1291_3 -# 1291| r1291_5(glval) = VariableAddress[b] : -# 1291| m1291_6(bool) = InitializeParameter[b] : &:r1291_5 -# 1291| r1291_7(glval) = VariableAddress[x] : -# 1291| m1291_8(int) = InitializeParameter[x] : &:r1291_7 -# 1292| r1292_1(glval) = VariableAddress[b] : -# 1292| r1292_2(bool) = Load[b] : &:r1292_1, m1291_6 -# 1292| v1292_3(void) = ConditionalBranch : r1292_2 +# 1338| int missingReturnValue(bool, int) +# 1338| Block 0 +# 1338| v1338_1(void) = EnterFunction : +# 1338| m1338_2(unknown) = AliasedDefinition : +# 1338| m1338_3(unknown) = InitializeNonLocal : +# 1338| m1338_4(unknown) = Chi : total:m1338_2, partial:m1338_3 +# 1338| r1338_5(glval) = VariableAddress[b] : +# 1338| m1338_6(bool) = InitializeParameter[b] : &:r1338_5 +# 1338| r1338_7(glval) = VariableAddress[x] : +# 1338| m1338_8(int) = InitializeParameter[x] : &:r1338_7 +# 1339| r1339_1(glval) = VariableAddress[b] : +# 1339| r1339_2(bool) = Load[b] : &:r1339_1, m1338_6 +# 1339| v1339_3(void) = ConditionalBranch : r1339_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 1291| Block 1 -# 1291| m1291_9(int) = Phi : from 2:m1293_4, from 3:m1295_2 -# 1291| r1291_10(glval) = VariableAddress[#return] : -# 1291| v1291_11(void) = ReturnValue : &:r1291_10, m1291_9 -# 1291| v1291_12(void) = AliasedUse : m1291_3 -# 1291| v1291_13(void) = ExitFunction : +# 1338| Block 1 +# 1338| m1338_9(int) = Phi : from 2:m1340_4, from 3:m1342_2 +# 1338| r1338_10(glval) = VariableAddress[#return] : +# 1338| v1338_11(void) = ReturnValue : &:r1338_10, m1338_9 +# 1338| v1338_12(void) = AliasedUse : m1338_3 +# 1338| v1338_13(void) = ExitFunction : -# 1293| Block 2 -# 1293| r1293_1(glval) = VariableAddress[#return] : -# 1293| r1293_2(glval) = VariableAddress[x] : -# 1293| r1293_3(int) = Load[x] : &:r1293_2, m1291_8 -# 1293| m1293_4(int) = Store[#return] : &:r1293_1, r1293_3 +# 1340| Block 2 +# 1340| r1340_1(glval) = VariableAddress[#return] : +# 1340| r1340_2(glval) = VariableAddress[x] : +# 1340| r1340_3(int) = Load[x] : &:r1340_2, m1338_8 +# 1340| m1340_4(int) = Store[#return] : &:r1340_1, r1340_3 #-----| Goto -> Block 1 -# 1295| Block 3 -# 1295| r1295_1(glval) = VariableAddress[#return] : -# 1295| m1295_2(int) = Uninitialized[#return] : &:r1295_1 +# 1342| Block 3 +# 1342| r1342_1(glval) = VariableAddress[#return] : +# 1342| m1342_2(int) = Uninitialized[#return] : &:r1342_1 #-----| Goto -> Block 1 -# 1297| void returnVoid(int, int) -# 1297| Block 0 -# 1297| v1297_1(void) = EnterFunction : -# 1297| m1297_2(unknown) = AliasedDefinition : -# 1297| m1297_3(unknown) = InitializeNonLocal : -# 1297| m1297_4(unknown) = Chi : total:m1297_2, partial:m1297_3 -# 1297| r1297_5(glval) = VariableAddress[x] : -# 1297| m1297_6(int) = InitializeParameter[x] : &:r1297_5 -# 1297| r1297_7(glval) = VariableAddress[y] : -# 1297| m1297_8(int) = InitializeParameter[y] : &:r1297_7 -# 1298| r1298_1(glval) = FunctionAddress[IntegerOps] : -# 1298| r1298_2(glval) = VariableAddress[x] : -# 1298| r1298_3(int) = Load[x] : &:r1298_2, m1297_6 -# 1298| r1298_4(glval) = VariableAddress[y] : -# 1298| r1298_5(int) = Load[y] : &:r1298_4, m1297_8 -# 1298| v1298_6(void) = Call[IntegerOps] : func:r1298_1, 0:r1298_3, 1:r1298_5 -# 1298| m1298_7(unknown) = ^CallSideEffect : ~m1297_4 -# 1298| m1298_8(unknown) = Chi : total:m1297_4, partial:m1298_7 -# 1298| v1298_9(void) = NoOp : -# 1297| v1297_9(void) = ReturnVoid : -# 1297| v1297_10(void) = AliasedUse : ~m1298_8 -# 1297| v1297_11(void) = ExitFunction : +# 1344| void returnVoid(int, int) +# 1344| Block 0 +# 1344| v1344_1(void) = EnterFunction : +# 1344| m1344_2(unknown) = AliasedDefinition : +# 1344| m1344_3(unknown) = InitializeNonLocal : +# 1344| m1344_4(unknown) = Chi : total:m1344_2, partial:m1344_3 +# 1344| r1344_5(glval) = VariableAddress[x] : +# 1344| m1344_6(int) = InitializeParameter[x] : &:r1344_5 +# 1344| r1344_7(glval) = VariableAddress[y] : +# 1344| m1344_8(int) = InitializeParameter[y] : &:r1344_7 +# 1345| r1345_1(glval) = FunctionAddress[IntegerOps] : +# 1345| r1345_2(glval) = VariableAddress[x] : +# 1345| r1345_3(int) = Load[x] : &:r1345_2, m1344_6 +# 1345| r1345_4(glval) = VariableAddress[y] : +# 1345| r1345_5(int) = Load[y] : &:r1345_4, m1344_8 +# 1345| v1345_6(void) = Call[IntegerOps] : func:r1345_1, 0:r1345_3, 1:r1345_5 +# 1345| m1345_7(unknown) = ^CallSideEffect : ~m1344_4 +# 1345| m1345_8(unknown) = Chi : total:m1344_4, partial:m1345_7 +# 1345| v1345_9(void) = NoOp : +# 1344| v1344_9(void) = ReturnVoid : +# 1344| v1344_10(void) = AliasedUse : ~m1345_8 +# 1344| v1344_11(void) = ExitFunction : -# 1301| void gccBinaryConditional(bool, int, long) -# 1301| Block 0 -# 1301| v1301_1(void) = EnterFunction : -# 1301| m1301_2(unknown) = AliasedDefinition : -# 1301| m1301_3(unknown) = InitializeNonLocal : -# 1301| m1301_4(unknown) = Chi : total:m1301_2, partial:m1301_3 -# 1301| r1301_5(glval) = VariableAddress[b] : -# 1301| m1301_6(bool) = InitializeParameter[b] : &:r1301_5 -# 1301| r1301_7(glval) = VariableAddress[x] : -# 1301| m1301_8(int) = InitializeParameter[x] : &:r1301_7 -# 1301| r1301_9(glval) = VariableAddress[y] : -# 1301| m1301_10(long) = InitializeParameter[y] : &:r1301_9 -# 1302| r1302_1(glval) = VariableAddress[z] : -# 1302| r1302_2(glval) = VariableAddress[x] : -# 1302| r1302_3(int) = Load[x] : &:r1302_2, m1301_8 -# 1302| m1302_4(int) = Store[z] : &:r1302_1, r1302_3 -# 1303| r1303_1(glval) = VariableAddress[b] : -# 1303| r1303_2(bool) = Load[b] : &:r1303_1, m1301_6 -# 1303| v1303_3(void) = ConditionalBranch : r1303_2 +# 1348| void gccBinaryConditional(bool, int, long) +# 1348| Block 0 +# 1348| v1348_1(void) = EnterFunction : +# 1348| m1348_2(unknown) = AliasedDefinition : +# 1348| m1348_3(unknown) = InitializeNonLocal : +# 1348| m1348_4(unknown) = Chi : total:m1348_2, partial:m1348_3 +# 1348| r1348_5(glval) = VariableAddress[b] : +# 1348| m1348_6(bool) = InitializeParameter[b] : &:r1348_5 +# 1348| r1348_7(glval) = VariableAddress[x] : +# 1348| m1348_8(int) = InitializeParameter[x] : &:r1348_7 +# 1348| r1348_9(glval) = VariableAddress[y] : +# 1348| m1348_10(long) = InitializeParameter[y] : &:r1348_9 +# 1349| r1349_1(glval) = VariableAddress[z] : +# 1349| r1349_2(glval) = VariableAddress[x] : +# 1349| r1349_3(int) = Load[x] : &:r1349_2, m1348_8 +# 1349| m1349_4(int) = Store[z] : &:r1349_1, r1349_3 +# 1350| r1350_1(glval) = VariableAddress[b] : +# 1350| r1350_2(bool) = Load[b] : &:r1350_1, m1348_6 +# 1350| v1350_3(void) = ConditionalBranch : r1350_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 1303| Block 1 -# 1303| m1303_4(int) = Phi : from 2:m1303_10, from 3:m1303_14 -# 1303| r1303_5(glval) = VariableAddress[#temp1303:9] : -# 1303| r1303_6(int) = Load[#temp1303:9] : &:r1303_5, m1303_4 -# 1303| r1303_7(glval) = VariableAddress[z] : -# 1303| m1303_8(int) = Store[z] : &:r1303_7, r1303_6 -# 1304| r1304_1(glval) = VariableAddress[b] : -# 1304| r1304_2(bool) = Load[b] : &:r1304_1, m1301_6 -# 1304| v1304_3(void) = ConditionalBranch : r1304_2 +# 1350| Block 1 +# 1350| m1350_4(int) = Phi : from 2:m1350_10, from 3:m1350_14 +# 1350| r1350_5(glval) = VariableAddress[#temp1350:9] : +# 1350| r1350_6(int) = Load[#temp1350:9] : &:r1350_5, m1350_4 +# 1350| r1350_7(glval) = VariableAddress[z] : +# 1350| m1350_8(int) = Store[z] : &:r1350_7, r1350_6 +# 1351| r1351_1(glval) = VariableAddress[b] : +# 1351| r1351_2(bool) = Load[b] : &:r1351_1, m1348_6 +# 1351| v1351_3(void) = ConditionalBranch : r1351_2 #-----| False -> Block 6 #-----| True -> Block 5 -# 1303| Block 2 -# 1303| r1303_9(glval) = VariableAddress[#temp1303:9] : -# 1303| m1303_10(int) = Store[#temp1303:9] : &:r1303_9, r1303_2 +# 1350| Block 2 +# 1350| r1350_9(glval) = VariableAddress[#temp1350:9] : +# 1350| m1350_10(int) = Store[#temp1350:9] : &:r1350_9, r1350_2 #-----| Goto -> Block 1 -# 1303| Block 3 -# 1303| r1303_11(glval) = VariableAddress[x] : -# 1303| r1303_12(int) = Load[x] : &:r1303_11, m1301_8 -# 1303| r1303_13(glval) = VariableAddress[#temp1303:9] : -# 1303| m1303_14(int) = Store[#temp1303:9] : &:r1303_13, r1303_12 +# 1350| Block 3 +# 1350| r1350_11(glval) = VariableAddress[x] : +# 1350| r1350_12(int) = Load[x] : &:r1350_11, m1348_8 +# 1350| r1350_13(glval) = VariableAddress[#temp1350:9] : +# 1350| m1350_14(int) = Store[#temp1350:9] : &:r1350_13, r1350_12 #-----| Goto -> Block 1 -# 1304| Block 4 -# 1304| m1304_4(long) = Phi : from 5:m1304_11, from 6:m1304_15 -# 1304| r1304_5(glval) = VariableAddress[#temp1304:9] : -# 1304| r1304_6(long) = Load[#temp1304:9] : &:r1304_5, m1304_4 -# 1304| r1304_7(int) = Convert : r1304_6 -# 1304| r1304_8(glval) = VariableAddress[z] : -# 1304| m1304_9(int) = Store[z] : &:r1304_8, r1304_7 -# 1305| r1305_1(glval) = VariableAddress[x] : -# 1305| r1305_2(int) = Load[x] : &:r1305_1, m1301_8 -# 1305| r1305_3(int) = Constant[0] : -# 1305| r1305_4(bool) = CompareNE : r1305_2, r1305_3 -# 1305| v1305_5(void) = ConditionalBranch : r1305_4 +# 1351| Block 4 +# 1351| m1351_4(long) = Phi : from 5:m1351_11, from 6:m1351_15 +# 1351| r1351_5(glval) = VariableAddress[#temp1351:9] : +# 1351| r1351_6(long) = Load[#temp1351:9] : &:r1351_5, m1351_4 +# 1351| r1351_7(int) = Convert : r1351_6 +# 1351| r1351_8(glval) = VariableAddress[z] : +# 1351| m1351_9(int) = Store[z] : &:r1351_8, r1351_7 +# 1352| r1352_1(glval) = VariableAddress[x] : +# 1352| r1352_2(int) = Load[x] : &:r1352_1, m1348_8 +# 1352| r1352_3(int) = Constant[0] : +# 1352| r1352_4(bool) = CompareNE : r1352_2, r1352_3 +# 1352| v1352_5(void) = ConditionalBranch : r1352_4 #-----| False -> Block 9 #-----| True -> Block 8 -# 1304| Block 5 -# 1304| r1304_10(glval) = VariableAddress[#temp1304:9] : -# 1304| m1304_11(long) = Store[#temp1304:9] : &:r1304_10, r1304_2 +# 1351| Block 5 +# 1351| r1351_10(glval) = VariableAddress[#temp1351:9] : +# 1351| m1351_11(long) = Store[#temp1351:9] : &:r1351_10, r1351_2 #-----| Goto -> Block 4 -# 1304| Block 6 -# 1304| r1304_12(glval) = VariableAddress[y] : -# 1304| r1304_13(long) = Load[y] : &:r1304_12, m1301_10 -# 1304| r1304_14(glval) = VariableAddress[#temp1304:9] : -# 1304| m1304_15(long) = Store[#temp1304:9] : &:r1304_14, r1304_13 +# 1351| Block 6 +# 1351| r1351_12(glval) = VariableAddress[y] : +# 1351| r1351_13(long) = Load[y] : &:r1351_12, m1348_10 +# 1351| r1351_14(glval) = VariableAddress[#temp1351:9] : +# 1351| m1351_15(long) = Store[#temp1351:9] : &:r1351_14, r1351_13 #-----| Goto -> Block 4 -# 1305| Block 7 -# 1305| m1305_6(int) = Phi : from 8:m1305_12, from 9:m1305_16 -# 1305| r1305_7(glval) = VariableAddress[#temp1305:9] : -# 1305| r1305_8(int) = Load[#temp1305:9] : &:r1305_7, m1305_6 -# 1305| r1305_9(glval) = VariableAddress[z] : -# 1305| m1305_10(int) = Store[z] : &:r1305_9, r1305_8 -# 1306| r1306_1(glval) = VariableAddress[x] : -# 1306| r1306_2(int) = Load[x] : &:r1306_1, m1301_8 -# 1306| r1306_3(int) = Constant[0] : -# 1306| r1306_4(bool) = CompareNE : r1306_2, r1306_3 -# 1306| v1306_5(void) = ConditionalBranch : r1306_4 +# 1352| Block 7 +# 1352| m1352_6(int) = Phi : from 8:m1352_12, from 9:m1352_16 +# 1352| r1352_7(glval) = VariableAddress[#temp1352:9] : +# 1352| r1352_8(int) = Load[#temp1352:9] : &:r1352_7, m1352_6 +# 1352| r1352_9(glval) = VariableAddress[z] : +# 1352| m1352_10(int) = Store[z] : &:r1352_9, r1352_8 +# 1353| r1353_1(glval) = VariableAddress[x] : +# 1353| r1353_2(int) = Load[x] : &:r1353_1, m1348_8 +# 1353| r1353_3(int) = Constant[0] : +# 1353| r1353_4(bool) = CompareNE : r1353_2, r1353_3 +# 1353| v1353_5(void) = ConditionalBranch : r1353_4 #-----| False -> Block 12 #-----| True -> Block 11 -# 1305| Block 8 -# 1305| r1305_11(glval) = VariableAddress[#temp1305:9] : -# 1305| m1305_12(int) = Store[#temp1305:9] : &:r1305_11, r1305_2 +# 1352| Block 8 +# 1352| r1352_11(glval) = VariableAddress[#temp1352:9] : +# 1352| m1352_12(int) = Store[#temp1352:9] : &:r1352_11, r1352_2 #-----| Goto -> Block 7 -# 1305| Block 9 -# 1305| r1305_13(glval) = VariableAddress[x] : -# 1305| r1305_14(int) = Load[x] : &:r1305_13, m1301_8 -# 1305| r1305_15(glval) = VariableAddress[#temp1305:9] : -# 1305| m1305_16(int) = Store[#temp1305:9] : &:r1305_15, r1305_14 +# 1352| Block 9 +# 1352| r1352_13(glval) = VariableAddress[x] : +# 1352| r1352_14(int) = Load[x] : &:r1352_13, m1348_8 +# 1352| r1352_15(glval) = VariableAddress[#temp1352:9] : +# 1352| m1352_16(int) = Store[#temp1352:9] : &:r1352_15, r1352_14 #-----| Goto -> Block 7 -# 1306| Block 10 -# 1306| m1306_6(long) = Phi : from 11:m1306_13, from 12:m1306_17 -# 1306| r1306_7(glval) = VariableAddress[#temp1306:9] : -# 1306| r1306_8(long) = Load[#temp1306:9] : &:r1306_7, m1306_6 -# 1306| r1306_9(int) = Convert : r1306_8 -# 1306| r1306_10(glval) = VariableAddress[z] : -# 1306| m1306_11(int) = Store[z] : &:r1306_10, r1306_9 -# 1307| r1307_1(glval) = VariableAddress[y] : -# 1307| r1307_2(long) = Load[y] : &:r1307_1, m1301_10 -# 1307| r1307_3(long) = Constant[0] : -# 1307| r1307_4(bool) = CompareNE : r1307_2, r1307_3 -# 1307| v1307_5(void) = ConditionalBranch : r1307_4 +# 1353| Block 10 +# 1353| m1353_6(long) = Phi : from 11:m1353_13, from 12:m1353_17 +# 1353| r1353_7(glval) = VariableAddress[#temp1353:9] : +# 1353| r1353_8(long) = Load[#temp1353:9] : &:r1353_7, m1353_6 +# 1353| r1353_9(int) = Convert : r1353_8 +# 1353| r1353_10(glval) = VariableAddress[z] : +# 1353| m1353_11(int) = Store[z] : &:r1353_10, r1353_9 +# 1354| r1354_1(glval) = VariableAddress[y] : +# 1354| r1354_2(long) = Load[y] : &:r1354_1, m1348_10 +# 1354| r1354_3(long) = Constant[0] : +# 1354| r1354_4(bool) = CompareNE : r1354_2, r1354_3 +# 1354| v1354_5(void) = ConditionalBranch : r1354_4 #-----| False -> Block 15 #-----| True -> Block 14 -# 1306| Block 11 -# 1306| r1306_12(glval) = VariableAddress[#temp1306:9] : -# 1306| m1306_13(long) = Store[#temp1306:9] : &:r1306_12, r1306_2 +# 1353| Block 11 +# 1353| r1353_12(glval) = VariableAddress[#temp1353:9] : +# 1353| m1353_13(long) = Store[#temp1353:9] : &:r1353_12, r1353_2 #-----| Goto -> Block 10 -# 1306| Block 12 -# 1306| r1306_14(glval) = VariableAddress[y] : -# 1306| r1306_15(long) = Load[y] : &:r1306_14, m1301_10 -# 1306| r1306_16(glval) = VariableAddress[#temp1306:9] : -# 1306| m1306_17(long) = Store[#temp1306:9] : &:r1306_16, r1306_15 +# 1353| Block 12 +# 1353| r1353_14(glval) = VariableAddress[y] : +# 1353| r1353_15(long) = Load[y] : &:r1353_14, m1348_10 +# 1353| r1353_16(glval) = VariableAddress[#temp1353:9] : +# 1353| m1353_17(long) = Store[#temp1353:9] : &:r1353_16, r1353_15 #-----| Goto -> Block 10 -# 1307| Block 13 -# 1307| m1307_6(long) = Phi : from 14:m1307_13, from 15:m1307_18 -# 1307| r1307_7(glval) = VariableAddress[#temp1307:9] : -# 1307| r1307_8(long) = Load[#temp1307:9] : &:r1307_7, m1307_6 -# 1307| r1307_9(int) = Convert : r1307_8 -# 1307| r1307_10(glval) = VariableAddress[z] : -# 1307| m1307_11(int) = Store[z] : &:r1307_10, r1307_9 -# 1308| r1308_1(glval) = VariableAddress[y] : -# 1308| r1308_2(long) = Load[y] : &:r1308_1, m1301_10 -# 1308| r1308_3(long) = Constant[0] : -# 1308| r1308_4(bool) = CompareNE : r1308_2, r1308_3 -# 1308| v1308_5(void) = ConditionalBranch : r1308_4 +# 1354| Block 13 +# 1354| m1354_6(long) = Phi : from 14:m1354_13, from 15:m1354_18 +# 1354| r1354_7(glval) = VariableAddress[#temp1354:9] : +# 1354| r1354_8(long) = Load[#temp1354:9] : &:r1354_7, m1354_6 +# 1354| r1354_9(int) = Convert : r1354_8 +# 1354| r1354_10(glval) = VariableAddress[z] : +# 1354| m1354_11(int) = Store[z] : &:r1354_10, r1354_9 +# 1355| r1355_1(glval) = VariableAddress[y] : +# 1355| r1355_2(long) = Load[y] : &:r1355_1, m1348_10 +# 1355| r1355_3(long) = Constant[0] : +# 1355| r1355_4(bool) = CompareNE : r1355_2, r1355_3 +# 1355| v1355_5(void) = ConditionalBranch : r1355_4 #-----| False -> Block 18 #-----| True -> Block 17 -# 1307| Block 14 -# 1307| r1307_12(glval) = VariableAddress[#temp1307:9] : -# 1307| m1307_13(long) = Store[#temp1307:9] : &:r1307_12, r1307_2 +# 1354| Block 14 +# 1354| r1354_12(glval) = VariableAddress[#temp1354:9] : +# 1354| m1354_13(long) = Store[#temp1354:9] : &:r1354_12, r1354_2 #-----| Goto -> Block 13 -# 1307| Block 15 -# 1307| r1307_14(glval) = VariableAddress[x] : -# 1307| r1307_15(int) = Load[x] : &:r1307_14, m1301_8 -# 1307| r1307_16(long) = Convert : r1307_15 -# 1307| r1307_17(glval) = VariableAddress[#temp1307:9] : -# 1307| m1307_18(long) = Store[#temp1307:9] : &:r1307_17, r1307_16 +# 1354| Block 15 +# 1354| r1354_14(glval) = VariableAddress[x] : +# 1354| r1354_15(int) = Load[x] : &:r1354_14, m1348_8 +# 1354| r1354_16(long) = Convert : r1354_15 +# 1354| r1354_17(glval) = VariableAddress[#temp1354:9] : +# 1354| m1354_18(long) = Store[#temp1354:9] : &:r1354_17, r1354_16 #-----| Goto -> Block 13 -# 1308| Block 16 -# 1308| m1308_6(long) = Phi : from 17:m1308_13, from 18:m1308_17 -# 1308| r1308_7(glval) = VariableAddress[#temp1308:9] : -# 1308| r1308_8(long) = Load[#temp1308:9] : &:r1308_7, m1308_6 -# 1308| r1308_9(int) = Convert : r1308_8 -# 1308| r1308_10(glval) = VariableAddress[z] : -# 1308| m1308_11(int) = Store[z] : &:r1308_10, r1308_9 -# 1310| r1310_1(glval) = VariableAddress[x] : -# 1310| r1310_2(int) = Load[x] : &:r1310_1, m1301_8 -# 1310| r1310_3(int) = Constant[0] : -# 1310| r1310_4(bool) = CompareNE : r1310_2, r1310_3 -# 1310| v1310_5(void) = ConditionalBranch : r1310_4 +# 1355| Block 16 +# 1355| m1355_6(long) = Phi : from 17:m1355_13, from 18:m1355_17 +# 1355| r1355_7(glval) = VariableAddress[#temp1355:9] : +# 1355| r1355_8(long) = Load[#temp1355:9] : &:r1355_7, m1355_6 +# 1355| r1355_9(int) = Convert : r1355_8 +# 1355| r1355_10(glval) = VariableAddress[z] : +# 1355| m1355_11(int) = Store[z] : &:r1355_10, r1355_9 +# 1357| r1357_1(glval) = VariableAddress[x] : +# 1357| r1357_2(int) = Load[x] : &:r1357_1, m1348_8 +# 1357| r1357_3(int) = Constant[0] : +# 1357| r1357_4(bool) = CompareNE : r1357_2, r1357_3 +# 1357| v1357_5(void) = ConditionalBranch : r1357_4 #-----| False -> Block 25 #-----| True -> Block 24 -# 1308| Block 17 -# 1308| r1308_12(glval) = VariableAddress[#temp1308:9] : -# 1308| m1308_13(long) = Store[#temp1308:9] : &:r1308_12, r1308_2 +# 1355| Block 17 +# 1355| r1355_12(glval) = VariableAddress[#temp1355:9] : +# 1355| m1355_13(long) = Store[#temp1355:9] : &:r1355_12, r1355_2 #-----| Goto -> Block 16 -# 1308| Block 18 -# 1308| r1308_14(glval) = VariableAddress[y] : -# 1308| r1308_15(long) = Load[y] : &:r1308_14, m1301_10 -# 1308| r1308_16(glval) = VariableAddress[#temp1308:9] : -# 1308| m1308_17(long) = Store[#temp1308:9] : &:r1308_16, r1308_15 +# 1355| Block 18 +# 1355| r1355_14(glval) = VariableAddress[y] : +# 1355| r1355_15(long) = Load[y] : &:r1355_14, m1348_10 +# 1355| r1355_16(glval) = VariableAddress[#temp1355:9] : +# 1355| m1355_17(long) = Store[#temp1355:9] : &:r1355_16, r1355_15 #-----| Goto -> Block 16 -# 1310| Block 19 -# 1310| m1310_6(int) = Phi : from 20:m1310_12, from 26:m1310_34 -# 1310| r1310_7(glval) = VariableAddress[#temp1310:9] : -# 1310| r1310_8(int) = Load[#temp1310:9] : &:r1310_7, m1310_6 -# 1310| r1310_9(glval) = VariableAddress[z] : -# 1310| m1310_10(int) = Store[z] : &:r1310_9, r1310_8 -# 1311| v1311_1(void) = NoOp : -# 1301| v1301_11(void) = ReturnVoid : -# 1301| v1301_12(void) = AliasedUse : m1301_3 -# 1301| v1301_13(void) = ExitFunction : +# 1357| Block 19 +# 1357| m1357_6(int) = Phi : from 20:m1357_12, from 26:m1357_34 +# 1357| r1357_7(glval) = VariableAddress[#temp1357:9] : +# 1357| r1357_8(int) = Load[#temp1357:9] : &:r1357_7, m1357_6 +# 1357| r1357_9(glval) = VariableAddress[z] : +# 1357| m1357_10(int) = Store[z] : &:r1357_9, r1357_8 +# 1358| v1358_1(void) = NoOp : +# 1348| v1348_11(void) = ReturnVoid : +# 1348| v1348_12(void) = AliasedUse : m1348_3 +# 1348| v1348_13(void) = ExitFunction : -# 1310| Block 20 -# 1310| r1310_11(glval) = VariableAddress[#temp1310:9] : -# 1310| m1310_12(int) = Store[#temp1310:9] : &:r1310_11, r1310_18 +# 1357| Block 20 +# 1357| r1357_11(glval) = VariableAddress[#temp1357:9] : +# 1357| m1357_12(int) = Store[#temp1357:9] : &:r1357_11, r1357_18 #-----| Goto -> Block 19 -# 1310| Block 21 -# 1310| r1310_13(glval) = VariableAddress[#temp1310:10] : -# 1310| r1310_14(bool) = Constant[0] : -# 1310| m1310_15(bool) = Store[#temp1310:10] : &:r1310_13, r1310_14 +# 1357| Block 21 +# 1357| r1357_13(glval) = VariableAddress[#temp1357:10] : +# 1357| r1357_14(bool) = Constant[0] : +# 1357| m1357_15(bool) = Store[#temp1357:10] : &:r1357_13, r1357_14 #-----| Goto -> Block 22 -# 1310| Block 22 -# 1310| m1310_16(bool) = Phi : from 21:m1310_15, from 23:m1310_22 -# 1310| r1310_17(glval) = VariableAddress[#temp1310:10] : -# 1310| r1310_18(bool) = Load[#temp1310:10] : &:r1310_17, m1310_16 -# 1310| v1310_19(void) = ConditionalBranch : r1310_18 +# 1357| Block 22 +# 1357| m1357_16(bool) = Phi : from 21:m1357_15, from 23:m1357_22 +# 1357| r1357_17(glval) = VariableAddress[#temp1357:10] : +# 1357| r1357_18(bool) = Load[#temp1357:10] : &:r1357_17, m1357_16 +# 1357| v1357_19(void) = ConditionalBranch : r1357_18 #-----| False -> Block 26 #-----| True -> Block 20 -# 1310| Block 23 -# 1310| r1310_20(glval) = VariableAddress[#temp1310:10] : -# 1310| r1310_21(bool) = Constant[1] : -# 1310| m1310_22(bool) = Store[#temp1310:10] : &:r1310_20, r1310_21 +# 1357| Block 23 +# 1357| r1357_20(glval) = VariableAddress[#temp1357:10] : +# 1357| r1357_21(bool) = Constant[1] : +# 1357| m1357_22(bool) = Store[#temp1357:10] : &:r1357_20, r1357_21 #-----| Goto -> Block 22 -# 1310| Block 24 -# 1310| r1310_23(glval) = VariableAddress[b] : -# 1310| r1310_24(bool) = Load[b] : &:r1310_23, m1301_6 -# 1310| v1310_25(void) = ConditionalBranch : r1310_24 +# 1357| Block 24 +# 1357| r1357_23(glval) = VariableAddress[b] : +# 1357| r1357_24(bool) = Load[b] : &:r1357_23, m1348_6 +# 1357| v1357_25(void) = ConditionalBranch : r1357_24 #-----| False -> Block 25 #-----| True -> Block 23 -# 1310| Block 25 -# 1310| r1310_26(glval) = VariableAddress[y] : -# 1310| r1310_27(long) = Load[y] : &:r1310_26, m1301_10 -# 1310| r1310_28(long) = Constant[0] : -# 1310| r1310_29(bool) = CompareNE : r1310_27, r1310_28 -# 1310| v1310_30(void) = ConditionalBranch : r1310_29 +# 1357| Block 25 +# 1357| r1357_26(glval) = VariableAddress[y] : +# 1357| r1357_27(long) = Load[y] : &:r1357_26, m1348_10 +# 1357| r1357_28(long) = Constant[0] : +# 1357| r1357_29(bool) = CompareNE : r1357_27, r1357_28 +# 1357| v1357_30(void) = ConditionalBranch : r1357_29 #-----| False -> Block 21 #-----| True -> Block 23 -# 1310| Block 26 -# 1310| r1310_31(glval) = VariableAddress[x] : -# 1310| r1310_32(int) = Load[x] : &:r1310_31, m1301_8 -# 1310| r1310_33(glval) = VariableAddress[#temp1310:9] : -# 1310| m1310_34(int) = Store[#temp1310:9] : &:r1310_33, r1310_32 +# 1357| Block 26 +# 1357| r1357_31(glval) = VariableAddress[x] : +# 1357| r1357_32(int) = Load[x] : &:r1357_31, m1348_8 +# 1357| r1357_33(glval) = VariableAddress[#temp1357:9] : +# 1357| m1357_34(int) = Store[#temp1357:9] : &:r1357_33, r1357_32 #-----| Goto -> Block 19 -# 1316| int shortCircuitConditional(int, int) -# 1316| Block 0 -# 1316| v1316_1(void) = EnterFunction : -# 1316| m1316_2(unknown) = AliasedDefinition : -# 1316| m1316_3(unknown) = InitializeNonLocal : -# 1316| m1316_4(unknown) = Chi : total:m1316_2, partial:m1316_3 -# 1316| r1316_5(glval) = VariableAddress[x] : -# 1316| m1316_6(int) = InitializeParameter[x] : &:r1316_5 -# 1316| r1316_7(glval) = VariableAddress[y] : -# 1316| m1316_8(int) = InitializeParameter[y] : &:r1316_7 -# 1317| r1317_1(glval) = VariableAddress[#return] : -# 1317| r1317_2(glval) = FunctionAddress[predicateA] : -# 1317| r1317_3(bool) = Call[predicateA] : func:r1317_2 -# 1317| m1317_4(unknown) = ^CallSideEffect : ~m1316_4 -# 1317| m1317_5(unknown) = Chi : total:m1316_4, partial:m1317_4 -# 1317| v1317_6(void) = ConditionalBranch : r1317_3 +# 1363| int shortCircuitConditional(int, int) +# 1363| Block 0 +# 1363| v1363_1(void) = EnterFunction : +# 1363| m1363_2(unknown) = AliasedDefinition : +# 1363| m1363_3(unknown) = InitializeNonLocal : +# 1363| m1363_4(unknown) = Chi : total:m1363_2, partial:m1363_3 +# 1363| r1363_5(glval) = VariableAddress[x] : +# 1363| m1363_6(int) = InitializeParameter[x] : &:r1363_5 +# 1363| r1363_7(glval) = VariableAddress[y] : +# 1363| m1363_8(int) = InitializeParameter[y] : &:r1363_7 +# 1364| r1364_1(glval) = VariableAddress[#return] : +# 1364| r1364_2(glval) = FunctionAddress[predicateA] : +# 1364| r1364_3(bool) = Call[predicateA] : func:r1364_2 +# 1364| m1364_4(unknown) = ^CallSideEffect : ~m1363_4 +# 1364| m1364_5(unknown) = Chi : total:m1363_4, partial:m1364_4 +# 1364| v1364_6(void) = ConditionalBranch : r1364_3 #-----| False -> Block 4 #-----| True -> Block 2 -# 1317| Block 1 -# 1317| m1317_7(unknown) = Phi : from 3:~m1317_15, from 4:~m1317_21 -# 1317| m1317_8(int) = Phi : from 3:m1317_20, from 4:m1317_25 -# 1317| r1317_9(glval) = VariableAddress[#temp1317:12] : -# 1317| r1317_10(int) = Load[#temp1317:12] : &:r1317_9, m1317_8 -# 1317| m1317_11(int) = Store[#return] : &:r1317_1, r1317_10 -# 1316| r1316_9(glval) = VariableAddress[#return] : -# 1316| v1316_10(void) = ReturnValue : &:r1316_9, m1317_11 -# 1316| v1316_11(void) = AliasedUse : ~m1317_7 -# 1316| v1316_12(void) = ExitFunction : +# 1364| Block 1 +# 1364| m1364_7(unknown) = Phi : from 3:~m1364_15, from 4:~m1364_21 +# 1364| m1364_8(int) = Phi : from 3:m1364_20, from 4:m1364_25 +# 1364| r1364_9(glval) = VariableAddress[#temp1364:12] : +# 1364| r1364_10(int) = Load[#temp1364:12] : &:r1364_9, m1364_8 +# 1364| m1364_11(int) = Store[#return] : &:r1364_1, r1364_10 +# 1363| r1363_9(glval) = VariableAddress[#return] : +# 1363| v1363_10(void) = ReturnValue : &:r1363_9, m1364_11 +# 1363| v1363_11(void) = AliasedUse : ~m1364_7 +# 1363| v1363_12(void) = ExitFunction : -# 1317| Block 2 -# 1317| r1317_12(glval) = FunctionAddress[predicateB] : -# 1317| r1317_13(bool) = Call[predicateB] : func:r1317_12 -# 1317| m1317_14(unknown) = ^CallSideEffect : ~m1317_5 -# 1317| m1317_15(unknown) = Chi : total:m1317_5, partial:m1317_14 -# 1317| v1317_16(void) = ConditionalBranch : r1317_13 +# 1364| Block 2 +# 1364| r1364_12(glval) = FunctionAddress[predicateB] : +# 1364| r1364_13(bool) = Call[predicateB] : func:r1364_12 +# 1364| m1364_14(unknown) = ^CallSideEffect : ~m1364_5 +# 1364| m1364_15(unknown) = Chi : total:m1364_5, partial:m1364_14 +# 1364| v1364_16(void) = ConditionalBranch : r1364_13 #-----| False -> Block 4 #-----| True -> Block 3 -# 1317| Block 3 -# 1317| r1317_17(glval) = VariableAddress[x] : -# 1317| r1317_18(int) = Load[x] : &:r1317_17, m1316_6 -# 1317| r1317_19(glval) = VariableAddress[#temp1317:12] : -# 1317| m1317_20(int) = Store[#temp1317:12] : &:r1317_19, r1317_18 +# 1364| Block 3 +# 1364| r1364_17(glval) = VariableAddress[x] : +# 1364| r1364_18(int) = Load[x] : &:r1364_17, m1363_6 +# 1364| r1364_19(glval) = VariableAddress[#temp1364:12] : +# 1364| m1364_20(int) = Store[#temp1364:12] : &:r1364_19, r1364_18 #-----| Goto -> Block 1 -# 1317| Block 4 -# 1317| m1317_21(unknown) = Phi : from 0:~m1317_5, from 2:~m1317_15 -# 1317| r1317_22(glval) = VariableAddress[y] : -# 1317| r1317_23(int) = Load[y] : &:r1317_22, m1316_8 -# 1317| r1317_24(glval) = VariableAddress[#temp1317:12] : -# 1317| m1317_25(int) = Store[#temp1317:12] : &:r1317_24, r1317_23 +# 1364| Block 4 +# 1364| m1364_21(unknown) = Phi : from 0:~m1364_5, from 2:~m1364_15 +# 1364| r1364_22(glval) = VariableAddress[y] : +# 1364| r1364_23(int) = Load[y] : &:r1364_22, m1363_8 +# 1364| r1364_24(glval) = VariableAddress[#temp1364:12] : +# 1364| m1364_25(int) = Store[#temp1364:12] : &:r1364_24, r1364_23 #-----| Goto -> Block 1 -# 1322| void f(int*) -# 1322| Block 0 -# 1322| v1322_1(void) = EnterFunction : -# 1322| m1322_2(unknown) = AliasedDefinition : -# 1322| m1322_3(unknown) = InitializeNonLocal : -# 1322| m1322_4(unknown) = Chi : total:m1322_2, partial:m1322_3 -# 1322| r1322_5(glval) = VariableAddress[p] : -# 1322| m1322_6(int *) = InitializeParameter[p] : &:r1322_5 -# 1322| r1322_7(int *) = Load[p] : &:r1322_5, m1322_6 -# 1322| m1322_8(unknown) = InitializeIndirection[p] : &:r1322_7 -# 1324| r1324_1(glval) = FunctionAddress[operator new] : -# 1324| r1324_2(unsigned long) = Constant[4] : -# 1324| r1324_3(glval) = VariableAddress[p] : -# 1324| r1324_4(int *) = Load[p] : &:r1324_3, m1322_6 -# 1324| r1324_5(void *) = Convert : r1324_4 -# 1324| r1324_6(void *) = Call[operator new] : func:r1324_1, 0:r1324_2, 1:r1324_5 -# 1324| m1324_7(unknown) = ^CallSideEffect : ~m1322_4 -# 1324| m1324_8(unknown) = Chi : total:m1322_4, partial:m1324_7 -# 1324| m1324_9(unknown) = ^InitializeDynamicAllocation : &:r1324_6 -# 1324| r1324_10(int *) = Convert : r1324_6 -# 1325| v1325_1(void) = NoOp : -# 1322| v1322_9(void) = ReturnIndirection[p] : &:r1322_7, m1322_8 -# 1322| v1322_10(void) = ReturnVoid : -# 1322| v1322_11(void) = AliasedUse : ~m1324_8 -# 1322| v1322_12(void) = ExitFunction : +# 1369| void f(int*) +# 1369| Block 0 +# 1369| v1369_1(void) = EnterFunction : +# 1369| m1369_2(unknown) = AliasedDefinition : +# 1369| m1369_3(unknown) = InitializeNonLocal : +# 1369| m1369_4(unknown) = Chi : total:m1369_2, partial:m1369_3 +# 1369| r1369_5(glval) = VariableAddress[p] : +# 1369| m1369_6(int *) = InitializeParameter[p] : &:r1369_5 +# 1369| r1369_7(int *) = Load[p] : &:r1369_5, m1369_6 +# 1369| m1369_8(unknown) = InitializeIndirection[p] : &:r1369_7 +# 1371| r1371_1(glval) = FunctionAddress[operator new] : +# 1371| r1371_2(unsigned long) = Constant[4] : +# 1371| r1371_3(glval) = VariableAddress[p] : +# 1371| r1371_4(int *) = Load[p] : &:r1371_3, m1369_6 +# 1371| r1371_5(void *) = Convert : r1371_4 +# 1371| r1371_6(void *) = Call[operator new] : func:r1371_1, 0:r1371_2, 1:r1371_5 +# 1371| m1371_7(unknown) = ^CallSideEffect : ~m1369_4 +# 1371| m1371_8(unknown) = Chi : total:m1369_4, partial:m1371_7 +# 1371| m1371_9(unknown) = ^InitializeDynamicAllocation : &:r1371_6 +# 1371| r1371_10(int *) = Convert : r1371_6 +# 1372| v1372_1(void) = NoOp : +# 1369| v1369_9(void) = ReturnIndirection[p] : &:r1369_7, m1369_8 +# 1369| v1369_10(void) = ReturnVoid : +# 1369| v1369_11(void) = AliasedUse : ~m1371_8 +# 1369| v1369_12(void) = ExitFunction : -# 1328| Point defaultConstruct() -# 1328| Block 0 -# 1328| v1328_1(void) = EnterFunction : -# 1328| m1328_2(unknown) = AliasedDefinition : -# 1328| m1328_3(unknown) = InitializeNonLocal : -# 1328| m1328_4(unknown) = Chi : total:m1328_2, partial:m1328_3 -# 1329| r1329_1(glval) = VariableAddress[#return] : -# 1329| r1329_2(Point) = Constant[0] : -# 1329| m1329_3(Point) = Store[#return] : &:r1329_1, r1329_2 -# 1328| r1328_5(glval) = VariableAddress[#return] : -# 1328| v1328_6(void) = ReturnValue : &:r1328_5, m1329_3 -# 1328| v1328_7(void) = AliasedUse : m1328_3 -# 1328| v1328_8(void) = ExitFunction : +# 1375| Point defaultConstruct() +# 1375| Block 0 +# 1375| v1375_1(void) = EnterFunction : +# 1375| m1375_2(unknown) = AliasedDefinition : +# 1375| m1375_3(unknown) = InitializeNonLocal : +# 1375| m1375_4(unknown) = Chi : total:m1375_2, partial:m1375_3 +# 1376| r1376_1(glval) = VariableAddress[#return] : +# 1376| r1376_2(Point) = Constant[0] : +# 1376| m1376_3(Point) = Store[#return] : &:r1376_1, r1376_2 +# 1375| r1375_5(glval) = VariableAddress[#return] : +# 1375| v1375_6(void) = ReturnValue : &:r1375_5, m1376_3 +# 1375| v1375_7(void) = AliasedUse : m1375_3 +# 1375| v1375_8(void) = ExitFunction : -# 1328| String defaultConstruct() -# 1328| Block 0 -# 1328| v1328_1(void) = EnterFunction : -# 1328| m1328_2(unknown) = AliasedDefinition : -# 1328| m1328_3(unknown) = InitializeNonLocal : -# 1328| m1328_4(unknown) = Chi : total:m1328_2, partial:m1328_3 -# 1329| r1329_1(glval) = VariableAddress[#return] : -# 1329| m1329_2(String) = Uninitialized[#return] : &:r1329_1 -# 1329| r1329_3(glval) = FunctionAddress[String] : -# 1329| v1329_4(void) = Call[String] : func:r1329_3, this:r1329_1 -# 1329| m1329_5(unknown) = ^CallSideEffect : ~m1328_4 -# 1329| m1329_6(unknown) = Chi : total:m1328_4, partial:m1329_5 -# 1329| m1329_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1329_1 -# 1329| m1329_8(String) = Chi : total:m1329_2, partial:m1329_7 -# 1328| r1328_5(glval) = VariableAddress[#return] : -# 1328| v1328_6(void) = ReturnValue : &:r1328_5, m1329_8 -# 1328| v1328_7(void) = AliasedUse : ~m1329_6 -# 1328| v1328_8(void) = ExitFunction : +# 1375| String defaultConstruct() +# 1375| Block 0 +# 1375| v1375_1(void) = EnterFunction : +# 1375| m1375_2(unknown) = AliasedDefinition : +# 1375| m1375_3(unknown) = InitializeNonLocal : +# 1375| m1375_4(unknown) = Chi : total:m1375_2, partial:m1375_3 +# 1376| r1376_1(glval) = VariableAddress[#return] : +# 1376| m1376_2(String) = Uninitialized[#return] : &:r1376_1 +# 1376| r1376_3(glval) = FunctionAddress[String] : +# 1376| v1376_4(void) = Call[String] : func:r1376_3, this:r1376_1 +# 1376| m1376_5(unknown) = ^CallSideEffect : ~m1375_4 +# 1376| m1376_6(unknown) = Chi : total:m1375_4, partial:m1376_5 +# 1376| m1376_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1376_1 +# 1376| m1376_8(String) = Chi : total:m1376_2, partial:m1376_7 +# 1375| r1375_5(glval) = VariableAddress[#return] : +# 1375| v1375_6(void) = ReturnValue : &:r1375_5, m1376_8 +# 1375| v1375_7(void) = AliasedUse : ~m1376_6 +# 1375| v1375_8(void) = ExitFunction : -# 1328| copy_constructor defaultConstruct() -# 1328| Block 0 -# 1328| v1328_1(void) = EnterFunction : -# 1328| m1328_2(unknown) = AliasedDefinition : -# 1328| m1328_3(unknown) = InitializeNonLocal : -# 1328| m1328_4(unknown) = Chi : total:m1328_2, partial:m1328_3 -# 1329| r1329_1(glval) = VariableAddress[#return] : -# 1329| m1329_2(copy_constructor) = Uninitialized[#return] : &:r1329_1 -# 1329| r1329_3(glval) = FunctionAddress[copy_constructor] : -# 1329| v1329_4(void) = Call[copy_constructor] : func:r1329_3, this:r1329_1 -# 1329| m1329_5(unknown) = ^CallSideEffect : ~m1328_4 -# 1329| m1329_6(unknown) = Chi : total:m1328_4, partial:m1329_5 -# 1329| m1329_7(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1329_1 -# 1329| m1329_8(copy_constructor) = Chi : total:m1329_2, partial:m1329_7 -# 1328| r1328_5(glval) = VariableAddress[#return] : -# 1328| v1328_6(void) = ReturnValue : &:r1328_5, m1329_8 -# 1328| v1328_7(void) = AliasedUse : ~m1329_6 -# 1328| v1328_8(void) = ExitFunction : +# 1375| copy_constructor defaultConstruct() +# 1375| Block 0 +# 1375| v1375_1(void) = EnterFunction : +# 1375| m1375_2(unknown) = AliasedDefinition : +# 1375| m1375_3(unknown) = InitializeNonLocal : +# 1375| m1375_4(unknown) = Chi : total:m1375_2, partial:m1375_3 +# 1376| r1376_1(glval) = VariableAddress[#return] : +# 1376| m1376_2(copy_constructor) = Uninitialized[#return] : &:r1376_1 +# 1376| r1376_3(glval) = FunctionAddress[copy_constructor] : +# 1376| v1376_4(void) = Call[copy_constructor] : func:r1376_3, this:r1376_1 +# 1376| m1376_5(unknown) = ^CallSideEffect : ~m1375_4 +# 1376| m1376_6(unknown) = Chi : total:m1375_4, partial:m1376_5 +# 1376| m1376_7(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1376_1 +# 1376| m1376_8(copy_constructor) = Chi : total:m1376_2, partial:m1376_7 +# 1375| r1375_5(glval) = VariableAddress[#return] : +# 1375| v1375_6(void) = ReturnValue : &:r1375_5, m1376_8 +# 1375| v1375_7(void) = AliasedUse : ~m1376_6 +# 1375| v1375_8(void) = ExitFunction : -# 1328| destructor_only defaultConstruct() -# 1328| Block 0 -# 1328| v1328_1(void) = EnterFunction : -# 1328| m1328_2(unknown) = AliasedDefinition : -# 1328| m1328_3(unknown) = InitializeNonLocal : -# 1328| m1328_4(unknown) = Chi : total:m1328_2, partial:m1328_3 -# 1329| r1329_1(glval) = VariableAddress[#return] : -# 1329| r1329_2(destructor_only) = Constant[0] : -# 1329| m1329_3(destructor_only) = Store[#return] : &:r1329_1, r1329_2 -# 1328| r1328_5(glval) = VariableAddress[#return] : -# 1328| v1328_6(void) = ReturnValue : &:r1328_5, m1329_3 -# 1328| v1328_7(void) = AliasedUse : m1328_3 -# 1328| v1328_8(void) = ExitFunction : +# 1375| destructor_only defaultConstruct() +# 1375| Block 0 +# 1375| v1375_1(void) = EnterFunction : +# 1375| m1375_2(unknown) = AliasedDefinition : +# 1375| m1375_3(unknown) = InitializeNonLocal : +# 1375| m1375_4(unknown) = Chi : total:m1375_2, partial:m1375_3 +# 1376| r1376_1(glval) = VariableAddress[#return] : +# 1376| r1376_2(destructor_only) = Constant[0] : +# 1376| m1376_3(destructor_only) = Store[#return] : &:r1376_1, r1376_2 +# 1375| r1375_5(glval) = VariableAddress[#return] : +# 1375| v1375_6(void) = ReturnValue : &:r1375_5, m1376_3 +# 1375| v1375_7(void) = AliasedUse : m1375_3 +# 1375| v1375_8(void) = ExitFunction : -# 1367| void temporary_string() -# 1367| Block 0 -# 1367| v1367_1(void) = EnterFunction : -# 1367| m1367_2(unknown) = AliasedDefinition : -# 1367| m1367_3(unknown) = InitializeNonLocal : -# 1367| m1367_4(unknown) = Chi : total:m1367_2, partial:m1367_3 -# 1368| r1368_1(glval) = VariableAddress[s] : -# 1368| r1368_2(glval) = FunctionAddress[returnValue] : -# 1368| r1368_3(String) = Call[returnValue] : func:r1368_2 -# 1368| m1368_4(unknown) = ^CallSideEffect : ~m1367_4 -# 1368| m1368_5(unknown) = Chi : total:m1367_4, partial:m1368_4 -# 1368| m1368_6(String) = Store[s] : &:r1368_1, r1368_3 -# 1369| r1369_1(glval) = VariableAddress[rs] : -# 1369| r1369_2(glval) = VariableAddress[#temp1369:24] : -# 1369| r1369_3(glval) = FunctionAddress[returnValue] : -# 1369| r1369_4(String) = Call[returnValue] : func:r1369_3 -# 1369| m1369_5(unknown) = ^CallSideEffect : ~m1368_5 -# 1369| m1369_6(unknown) = Chi : total:m1368_5, partial:m1369_5 -# 1369| m1369_7(String) = Store[#temp1369:24] : &:r1369_2, r1369_4 -# 1369| r1369_8(glval) = Convert : r1369_2 -# 1369| r1369_9(String &) = CopyValue : r1369_8 -# 1369| m1369_10(String &) = Store[rs] : &:r1369_1, r1369_9 -# 1371| r1371_1(glval) = FunctionAddress[acceptRef] : -# 1371| r1371_2(glval) = VariableAddress[s] : -# 1371| r1371_3(glval) = Convert : r1371_2 -# 1371| r1371_4(String &) = CopyValue : r1371_3 -# 1371| v1371_5(void) = Call[acceptRef] : func:r1371_1, 0:r1371_4 -# 1371| m1371_6(unknown) = ^CallSideEffect : ~m1369_6 -# 1371| m1371_7(unknown) = Chi : total:m1369_6, partial:m1371_6 -# 1371| v1371_8(void) = ^BufferReadSideEffect[0] : &:r1371_4, ~m1368_6 -# 1372| r1372_1(glval) = FunctionAddress[acceptRef] : -# 1372| r1372_2(glval) = VariableAddress[#temp1372:23] : -# 1372| m1372_3(String) = Uninitialized[#temp1372:23] : &:r1372_2 -# 1372| r1372_4(glval) = FunctionAddress[String] : -# 1372| r1372_5(glval) = StringConstant["foo"] : -# 1372| r1372_6(char *) = Convert : r1372_5 -# 1372| v1372_7(void) = Call[String] : func:r1372_4, this:r1372_2, 0:r1372_6 -# 1372| m1372_8(unknown) = ^CallSideEffect : ~m1371_7 -# 1372| m1372_9(unknown) = Chi : total:m1371_7, partial:m1372_8 -# 1372| v1372_10(void) = ^BufferReadSideEffect[0] : &:r1372_6, ~m1367_3 -# 1372| m1372_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1372_2 -# 1372| m1372_12(String) = Chi : total:m1372_3, partial:m1372_11 -# 1372| r1372_13(String &) = CopyValue : r1372_2 -# 1372| v1372_14(void) = Call[acceptRef] : func:r1372_1, 0:r1372_13 -# 1372| m1372_15(unknown) = ^CallSideEffect : ~m1372_9 -# 1372| m1372_16(unknown) = Chi : total:m1372_9, partial:m1372_15 -# 1372| v1372_17(void) = ^BufferReadSideEffect[0] : &:r1372_13, ~m1372_12 -# 1373| r1373_1(glval) = FunctionAddress[acceptValue] : -# 1373| r1373_2(glval) = VariableAddress[#temp1373:17] : -# 1373| m1373_3(String) = Uninitialized[#temp1373:17] : &:r1373_2 -# 1373| r1373_4(glval) = FunctionAddress[String] : -# 1373| r1373_5(glval) = VariableAddress[s] : -# 1373| r1373_6(glval) = Convert : r1373_5 -# 1373| r1373_7(String &) = CopyValue : r1373_6 -# 1373| v1373_8(void) = Call[String] : func:r1373_4, this:r1373_2, 0:r1373_7 -# 1373| m1373_9(unknown) = ^CallSideEffect : ~m1372_16 -# 1373| m1373_10(unknown) = Chi : total:m1372_16, partial:m1373_9 -# 1373| v1373_11(void) = ^BufferReadSideEffect[0] : &:r1373_7, ~m1368_6 -# 1373| m1373_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r1373_2 -# 1373| m1373_13(String) = Chi : total:m1373_3, partial:m1373_12 -# 1373| r1373_14(String) = Load[#temp1373:17] : &:r1373_2, m1373_13 -# 1373| v1373_15(void) = Call[acceptValue] : func:r1373_1, 0:r1373_14 -# 1373| m1373_16(unknown) = ^CallSideEffect : ~m1373_10 -# 1373| m1373_17(unknown) = Chi : total:m1373_10, partial:m1373_16 -# 1374| r1374_1(glval) = FunctionAddress[acceptValue] : -# 1374| r1374_2(glval) = VariableAddress[#temp1374:25] : -# 1374| m1374_3(String) = Uninitialized[#temp1374:25] : &:r1374_2 -# 1374| r1374_4(glval) = FunctionAddress[String] : -# 1374| r1374_5(glval) = StringConstant["foo"] : -# 1374| r1374_6(char *) = Convert : r1374_5 -# 1374| v1374_7(void) = Call[String] : func:r1374_4, this:r1374_2, 0:r1374_6 -# 1374| m1374_8(unknown) = ^CallSideEffect : ~m1373_17 -# 1374| m1374_9(unknown) = Chi : total:m1373_17, partial:m1374_8 -# 1374| v1374_10(void) = ^BufferReadSideEffect[0] : &:r1374_6, ~m1367_3 -# 1374| m1374_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1374_2 -# 1374| m1374_12(String) = Chi : total:m1374_3, partial:m1374_11 -# 1374| r1374_13(String) = Load[#temp1374:25] : &:r1374_2, m1374_12 -# 1374| v1374_14(void) = Call[acceptValue] : func:r1374_1, 0:r1374_13 -# 1374| m1374_15(unknown) = ^CallSideEffect : ~m1374_9 -# 1374| m1374_16(unknown) = Chi : total:m1374_9, partial:m1374_15 -# 1375| r1375_1(glval) = VariableAddress[#temp1375:5] : -# 1375| m1375_2(String) = Uninitialized[#temp1375:5] : &:r1375_1 -# 1375| r1375_3(glval) = FunctionAddress[String] : -# 1375| v1375_4(void) = Call[String] : func:r1375_3, this:r1375_1 -# 1375| m1375_5(unknown) = ^CallSideEffect : ~m1374_16 -# 1375| m1375_6(unknown) = Chi : total:m1374_16, partial:m1375_5 -# 1375| m1375_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1375_1 -# 1375| m1375_8(String) = Chi : total:m1375_2, partial:m1375_7 -# 1375| r1375_9(glval) = Convert : r1375_1 -# 1375| r1375_10(glval) = FunctionAddress[c_str] : -# 1375| r1375_11(char *) = Call[c_str] : func:r1375_10, this:r1375_9 -# 1375| m1375_12(unknown) = ^CallSideEffect : ~m1375_6 -# 1375| m1375_13(unknown) = Chi : total:m1375_6, partial:m1375_12 -# 1375| v1375_14(void) = ^IndirectReadSideEffect[-1] : &:r1375_9, m1375_8 -# 1376| r1376_1(glval) = VariableAddress[#temp1376:5] : -# 1376| r1376_2(glval) = FunctionAddress[returnValue] : -# 1376| r1376_3(String) = Call[returnValue] : func:r1376_2 -# 1376| m1376_4(unknown) = ^CallSideEffect : ~m1375_13 -# 1376| m1376_5(unknown) = Chi : total:m1375_13, partial:m1376_4 -# 1376| m1376_6(String) = Store[#temp1376:5] : &:r1376_1, r1376_3 -# 1376| r1376_7(glval) = Convert : r1376_1 -# 1376| r1376_8(glval) = FunctionAddress[c_str] : -# 1376| r1376_9(char *) = Call[c_str] : func:r1376_8, this:r1376_7 -# 1376| m1376_10(unknown) = ^CallSideEffect : ~m1376_5 -# 1376| m1376_11(unknown) = Chi : total:m1376_5, partial:m1376_10 -# 1376| v1376_12(void) = ^IndirectReadSideEffect[-1] : &:r1376_7, m1376_6 -# 1378| r1378_1(glval) = VariableAddress[#temp1378:5] : -# 1378| r1378_2(glval) = FunctionAddress[defaultConstruct] : -# 1378| r1378_3(String) = Call[defaultConstruct] : func:r1378_2 -# 1378| m1378_4(unknown) = ^CallSideEffect : ~m1376_11 -# 1378| m1378_5(unknown) = Chi : total:m1376_11, partial:m1378_4 -# 1378| m1378_6(String) = Store[#temp1378:5] : &:r1378_1, r1378_3 -# 1379| v1379_1(void) = NoOp : -# 1379| r1379_2(glval) = VariableAddress[s] : -# 1379| r1379_3(glval) = FunctionAddress[~String] : -# 1379| v1379_4(void) = Call[~String] : func:r1379_3, this:r1379_2 -# 1379| m1379_5(unknown) = ^CallSideEffect : ~m1378_5 -# 1379| m1379_6(unknown) = Chi : total:m1378_5, partial:m1379_5 -# 1379| v1379_7(void) = ^IndirectReadSideEffect[-1] : &:r1379_2, m1368_6 -# 1379| m1379_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r1379_2 -# 1379| m1379_9(String) = Chi : total:m1368_6, partial:m1379_8 -# 1367| v1367_5(void) = ReturnVoid : -# 1367| v1367_6(void) = AliasedUse : ~m1379_6 -# 1367| v1367_7(void) = ExitFunction : +# 1414| void temporary_string() +# 1414| Block 0 +# 1414| v1414_1(void) = EnterFunction : +# 1414| m1414_2(unknown) = AliasedDefinition : +# 1414| m1414_3(unknown) = InitializeNonLocal : +# 1414| m1414_4(unknown) = Chi : total:m1414_2, partial:m1414_3 +# 1415| r1415_1(glval) = VariableAddress[s] : +# 1415| r1415_2(glval) = FunctionAddress[returnValue] : +# 1415| r1415_3(String) = Call[returnValue] : func:r1415_2 +# 1415| m1415_4(unknown) = ^CallSideEffect : ~m1414_4 +# 1415| m1415_5(unknown) = Chi : total:m1414_4, partial:m1415_4 +# 1415| m1415_6(String) = Store[s] : &:r1415_1, r1415_3 +# 1416| r1416_1(glval) = VariableAddress[rs] : +# 1416| r1416_2(glval) = VariableAddress[#temp1416:24] : +# 1416| r1416_3(glval) = FunctionAddress[returnValue] : +# 1416| r1416_4(String) = Call[returnValue] : func:r1416_3 +# 1416| m1416_5(unknown) = ^CallSideEffect : ~m1415_5 +# 1416| m1416_6(unknown) = Chi : total:m1415_5, partial:m1416_5 +# 1416| m1416_7(String) = Store[#temp1416:24] : &:r1416_2, r1416_4 +# 1416| r1416_8(glval) = Convert : r1416_2 +# 1416| r1416_9(String &) = CopyValue : r1416_8 +# 1416| m1416_10(String &) = Store[rs] : &:r1416_1, r1416_9 +# 1418| r1418_1(glval) = FunctionAddress[acceptRef] : +# 1418| r1418_2(glval) = VariableAddress[s] : +# 1418| r1418_3(glval) = Convert : r1418_2 +# 1418| r1418_4(String &) = CopyValue : r1418_3 +# 1418| v1418_5(void) = Call[acceptRef] : func:r1418_1, 0:r1418_4 +# 1418| m1418_6(unknown) = ^CallSideEffect : ~m1416_6 +# 1418| m1418_7(unknown) = Chi : total:m1416_6, partial:m1418_6 +# 1418| v1418_8(void) = ^BufferReadSideEffect[0] : &:r1418_4, ~m1415_6 +# 1419| r1419_1(glval) = FunctionAddress[acceptRef] : +# 1419| r1419_2(glval) = VariableAddress[#temp1419:23] : +# 1419| m1419_3(String) = Uninitialized[#temp1419:23] : &:r1419_2 +# 1419| r1419_4(glval) = FunctionAddress[String] : +# 1419| r1419_5(glval) = StringConstant["foo"] : +# 1419| r1419_6(char *) = Convert : r1419_5 +# 1419| v1419_7(void) = Call[String] : func:r1419_4, this:r1419_2, 0:r1419_6 +# 1419| m1419_8(unknown) = ^CallSideEffect : ~m1418_7 +# 1419| m1419_9(unknown) = Chi : total:m1418_7, partial:m1419_8 +# 1419| v1419_10(void) = ^BufferReadSideEffect[0] : &:r1419_6, ~m1414_3 +# 1419| m1419_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1419_2 +# 1419| m1419_12(String) = Chi : total:m1419_3, partial:m1419_11 +# 1419| r1419_13(String &) = CopyValue : r1419_2 +# 1419| v1419_14(void) = Call[acceptRef] : func:r1419_1, 0:r1419_13 +# 1419| m1419_15(unknown) = ^CallSideEffect : ~m1419_9 +# 1419| m1419_16(unknown) = Chi : total:m1419_9, partial:m1419_15 +# 1419| v1419_17(void) = ^BufferReadSideEffect[0] : &:r1419_13, ~m1419_12 +# 1420| r1420_1(glval) = FunctionAddress[acceptValue] : +# 1420| r1420_2(glval) = VariableAddress[#temp1420:17] : +# 1420| m1420_3(String) = Uninitialized[#temp1420:17] : &:r1420_2 +# 1420| r1420_4(glval) = FunctionAddress[String] : +# 1420| r1420_5(glval) = VariableAddress[s] : +# 1420| r1420_6(glval) = Convert : r1420_5 +# 1420| r1420_7(String &) = CopyValue : r1420_6 +# 1420| v1420_8(void) = Call[String] : func:r1420_4, this:r1420_2, 0:r1420_7 +# 1420| m1420_9(unknown) = ^CallSideEffect : ~m1419_16 +# 1420| m1420_10(unknown) = Chi : total:m1419_16, partial:m1420_9 +# 1420| v1420_11(void) = ^BufferReadSideEffect[0] : &:r1420_7, ~m1415_6 +# 1420| m1420_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r1420_2 +# 1420| m1420_13(String) = Chi : total:m1420_3, partial:m1420_12 +# 1420| r1420_14(String) = Load[#temp1420:17] : &:r1420_2, m1420_13 +# 1420| v1420_15(void) = Call[acceptValue] : func:r1420_1, 0:r1420_14 +# 1420| m1420_16(unknown) = ^CallSideEffect : ~m1420_10 +# 1420| m1420_17(unknown) = Chi : total:m1420_10, partial:m1420_16 +# 1421| r1421_1(glval) = FunctionAddress[acceptValue] : +# 1421| r1421_2(glval) = VariableAddress[#temp1421:25] : +# 1421| m1421_3(String) = Uninitialized[#temp1421:25] : &:r1421_2 +# 1421| r1421_4(glval) = FunctionAddress[String] : +# 1421| r1421_5(glval) = StringConstant["foo"] : +# 1421| r1421_6(char *) = Convert : r1421_5 +# 1421| v1421_7(void) = Call[String] : func:r1421_4, this:r1421_2, 0:r1421_6 +# 1421| m1421_8(unknown) = ^CallSideEffect : ~m1420_17 +# 1421| m1421_9(unknown) = Chi : total:m1420_17, partial:m1421_8 +# 1421| v1421_10(void) = ^BufferReadSideEffect[0] : &:r1421_6, ~m1414_3 +# 1421| m1421_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1421_2 +# 1421| m1421_12(String) = Chi : total:m1421_3, partial:m1421_11 +# 1421| r1421_13(String) = Load[#temp1421:25] : &:r1421_2, m1421_12 +# 1421| v1421_14(void) = Call[acceptValue] : func:r1421_1, 0:r1421_13 +# 1421| m1421_15(unknown) = ^CallSideEffect : ~m1421_9 +# 1421| m1421_16(unknown) = Chi : total:m1421_9, partial:m1421_15 +# 1422| r1422_1(glval) = VariableAddress[#temp1422:5] : +# 1422| m1422_2(String) = Uninitialized[#temp1422:5] : &:r1422_1 +# 1422| r1422_3(glval) = FunctionAddress[String] : +# 1422| v1422_4(void) = Call[String] : func:r1422_3, this:r1422_1 +# 1422| m1422_5(unknown) = ^CallSideEffect : ~m1421_16 +# 1422| m1422_6(unknown) = Chi : total:m1421_16, partial:m1422_5 +# 1422| m1422_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1422_1 +# 1422| m1422_8(String) = Chi : total:m1422_2, partial:m1422_7 +# 1422| r1422_9(glval) = Convert : r1422_1 +# 1422| r1422_10(glval) = FunctionAddress[c_str] : +# 1422| r1422_11(char *) = Call[c_str] : func:r1422_10, this:r1422_9 +# 1422| m1422_12(unknown) = ^CallSideEffect : ~m1422_6 +# 1422| m1422_13(unknown) = Chi : total:m1422_6, partial:m1422_12 +# 1422| v1422_14(void) = ^IndirectReadSideEffect[-1] : &:r1422_9, m1422_8 +# 1423| r1423_1(glval) = VariableAddress[#temp1423:5] : +# 1423| r1423_2(glval) = FunctionAddress[returnValue] : +# 1423| r1423_3(String) = Call[returnValue] : func:r1423_2 +# 1423| m1423_4(unknown) = ^CallSideEffect : ~m1422_13 +# 1423| m1423_5(unknown) = Chi : total:m1422_13, partial:m1423_4 +# 1423| m1423_6(String) = Store[#temp1423:5] : &:r1423_1, r1423_3 +# 1423| r1423_7(glval) = Convert : r1423_1 +# 1423| r1423_8(glval) = FunctionAddress[c_str] : +# 1423| r1423_9(char *) = Call[c_str] : func:r1423_8, this:r1423_7 +# 1423| m1423_10(unknown) = ^CallSideEffect : ~m1423_5 +# 1423| m1423_11(unknown) = Chi : total:m1423_5, partial:m1423_10 +# 1423| v1423_12(void) = ^IndirectReadSideEffect[-1] : &:r1423_7, m1423_6 +# 1425| r1425_1(glval) = VariableAddress[#temp1425:5] : +# 1425| r1425_2(glval) = FunctionAddress[defaultConstruct] : +# 1425| r1425_3(String) = Call[defaultConstruct] : func:r1425_2 +# 1425| m1425_4(unknown) = ^CallSideEffect : ~m1423_11 +# 1425| m1425_5(unknown) = Chi : total:m1423_11, partial:m1425_4 +# 1425| m1425_6(String) = Store[#temp1425:5] : &:r1425_1, r1425_3 +# 1426| v1426_1(void) = NoOp : +# 1426| r1426_2(glval) = VariableAddress[s] : +# 1426| r1426_3(glval) = FunctionAddress[~String] : +# 1426| v1426_4(void) = Call[~String] : func:r1426_3, this:r1426_2 +# 1426| m1426_5(unknown) = ^CallSideEffect : ~m1425_5 +# 1426| m1426_6(unknown) = Chi : total:m1425_5, partial:m1426_5 +# 1426| v1426_7(void) = ^IndirectReadSideEffect[-1] : &:r1426_2, m1415_6 +# 1426| m1426_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r1426_2 +# 1426| m1426_9(String) = Chi : total:m1415_6, partial:m1426_8 +# 1414| v1414_5(void) = ReturnVoid : +# 1414| v1414_6(void) = AliasedUse : ~m1426_6 +# 1414| v1414_7(void) = ExitFunction : -# 1381| void temporary_destructor_only() -# 1381| Block 0 -# 1381| v1381_1(void) = EnterFunction : -# 1381| m1381_2(unknown) = AliasedDefinition : -# 1381| m1381_3(unknown) = InitializeNonLocal : -# 1381| m1381_4(unknown) = Chi : total:m1381_2, partial:m1381_3 -# 1382| r1382_1(glval) = VariableAddress[d] : -# 1382| r1382_2(glval) = FunctionAddress[returnValue] : -# 1382| r1382_3(destructor_only) = Call[returnValue] : func:r1382_2 -# 1382| m1382_4(unknown) = ^CallSideEffect : ~m1381_4 -# 1382| m1382_5(unknown) = Chi : total:m1381_4, partial:m1382_4 -# 1382| m1382_6(destructor_only) = Store[d] : &:r1382_1, r1382_3 -# 1383| r1383_1(glval) = VariableAddress[rd] : -# 1383| r1383_2(glval) = VariableAddress[#temp1383:33] : -# 1383| r1383_3(glval) = FunctionAddress[returnValue] : -# 1383| r1383_4(destructor_only) = Call[returnValue] : func:r1383_3 -# 1383| m1383_5(unknown) = ^CallSideEffect : ~m1382_5 -# 1383| m1383_6(unknown) = Chi : total:m1382_5, partial:m1383_5 -# 1383| m1383_7(destructor_only) = Store[#temp1383:33] : &:r1383_2, r1383_4 -# 1383| r1383_8(glval) = Convert : r1383_2 -# 1383| r1383_9(destructor_only &) = CopyValue : r1383_8 -# 1383| m1383_10(destructor_only &) = Store[rd] : &:r1383_1, r1383_9 -# 1384| r1384_1(glval) = VariableAddress[d2] : -# 1384| m1384_2(destructor_only) = Uninitialized[d2] : &:r1384_1 -# 1385| r1385_1(glval) = FunctionAddress[acceptRef] : -# 1385| r1385_2(glval) = VariableAddress[d] : -# 1385| r1385_3(glval) = Convert : r1385_2 -# 1385| r1385_4(destructor_only &) = CopyValue : r1385_3 -# 1385| v1385_5(void) = Call[acceptRef] : func:r1385_1, 0:r1385_4 -# 1385| m1385_6(unknown) = ^CallSideEffect : ~m1383_6 -# 1385| m1385_7(unknown) = Chi : total:m1383_6, partial:m1385_6 -# 1385| v1385_8(void) = ^BufferReadSideEffect[0] : &:r1385_4, ~m1382_6 -# 1386| r1386_1(glval) = FunctionAddress[acceptValue] : -# 1386| r1386_2(glval) = VariableAddress[#temp1386:17] : -# 1386| r1386_3(glval) = VariableAddress[d] : -# 1386| r1386_4(destructor_only) = Load[d] : &:r1386_3, m1382_6 -# 1386| m1386_5(destructor_only) = Store[#temp1386:17] : &:r1386_2, r1386_4 -# 1386| r1386_6(destructor_only) = Load[#temp1386:17] : &:r1386_2, m1386_5 -# 1386| v1386_7(void) = Call[acceptValue] : func:r1386_1, 0:r1386_6 -# 1386| m1386_8(unknown) = ^CallSideEffect : ~m1385_7 -# 1386| m1386_9(unknown) = Chi : total:m1385_7, partial:m1386_8 -# 1387| r1387_1(glval) = VariableAddress[#temp1387:5] : -# 1387| r1387_2(destructor_only) = Constant[0] : -# 1387| m1387_3(destructor_only) = Store[#temp1387:5] : &:r1387_1, r1387_2 -# 1387| r1387_4(glval) = FunctionAddress[method] : -# 1387| v1387_5(void) = Call[method] : func:r1387_4, this:r1387_1 -# 1387| m1387_6(unknown) = ^CallSideEffect : ~m1386_9 -# 1387| m1387_7(unknown) = Chi : total:m1386_9, partial:m1387_6 -# 1387| v1387_8(void) = ^IndirectReadSideEffect[-1] : &:r1387_1, m1387_3 -# 1387| m1387_9(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1387_1 -# 1387| m1387_10(destructor_only) = Chi : total:m1387_3, partial:m1387_9 -# 1388| r1388_1(glval) = VariableAddress[#temp1388:5] : -# 1388| r1388_2(glval) = FunctionAddress[returnValue] : -# 1388| r1388_3(destructor_only) = Call[returnValue] : func:r1388_2 -# 1388| m1388_4(unknown) = ^CallSideEffect : ~m1387_7 -# 1388| m1388_5(unknown) = Chi : total:m1387_7, partial:m1388_4 -# 1388| m1388_6(destructor_only) = Store[#temp1388:5] : &:r1388_1, r1388_3 -# 1388| r1388_7(glval) = FunctionAddress[method] : -# 1388| v1388_8(void) = Call[method] : func:r1388_7, this:r1388_1 -# 1388| m1388_9(unknown) = ^CallSideEffect : ~m1388_5 -# 1388| m1388_10(unknown) = Chi : total:m1388_5, partial:m1388_9 -# 1388| v1388_11(void) = ^IndirectReadSideEffect[-1] : &:r1388_1, m1388_6 -# 1388| m1388_12(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1388_1 -# 1388| m1388_13(destructor_only) = Chi : total:m1388_6, partial:m1388_12 -# 1390| r1390_1(glval) = VariableAddress[#temp1390:5] : -# 1390| r1390_2(glval) = FunctionAddress[defaultConstruct] : -# 1390| r1390_3(destructor_only) = Call[defaultConstruct] : func:r1390_2 -# 1390| m1390_4(unknown) = ^CallSideEffect : ~m1388_10 -# 1390| m1390_5(unknown) = Chi : total:m1388_10, partial:m1390_4 -# 1390| m1390_6(destructor_only) = Store[#temp1390:5] : &:r1390_1, r1390_3 -# 1391| v1391_1(void) = NoOp : -# 1391| r1391_2(glval) = VariableAddress[d2] : -# 1391| r1391_3(glval) = FunctionAddress[~destructor_only] : -# 1391| v1391_4(void) = Call[~destructor_only] : func:r1391_3, this:r1391_2 -# 1391| m1391_5(unknown) = ^CallSideEffect : ~m1390_5 -# 1391| m1391_6(unknown) = Chi : total:m1390_5, partial:m1391_5 -# 1391| v1391_7(void) = ^IndirectReadSideEffect[-1] : &:r1391_2, m1384_2 -# 1391| m1391_8(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1391_2 -# 1391| m1391_9(destructor_only) = Chi : total:m1384_2, partial:m1391_8 -# 1391| r1391_10(glval) = VariableAddress[d] : -# 1391| r1391_11(glval) = FunctionAddress[~destructor_only] : -# 1391| v1391_12(void) = Call[~destructor_only] : func:r1391_11, this:r1391_10 -# 1391| m1391_13(unknown) = ^CallSideEffect : ~m1391_6 -# 1391| m1391_14(unknown) = Chi : total:m1391_6, partial:m1391_13 -# 1391| v1391_15(void) = ^IndirectReadSideEffect[-1] : &:r1391_10, m1382_6 -# 1391| m1391_16(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1391_10 -# 1391| m1391_17(destructor_only) = Chi : total:m1382_6, partial:m1391_16 -# 1381| v1381_5(void) = ReturnVoid : -# 1381| v1381_6(void) = AliasedUse : ~m1391_14 -# 1381| v1381_7(void) = ExitFunction : +# 1428| void temporary_destructor_only() +# 1428| Block 0 +# 1428| v1428_1(void) = EnterFunction : +# 1428| m1428_2(unknown) = AliasedDefinition : +# 1428| m1428_3(unknown) = InitializeNonLocal : +# 1428| m1428_4(unknown) = Chi : total:m1428_2, partial:m1428_3 +# 1429| r1429_1(glval) = VariableAddress[d] : +# 1429| r1429_2(glval) = FunctionAddress[returnValue] : +# 1429| r1429_3(destructor_only) = Call[returnValue] : func:r1429_2 +# 1429| m1429_4(unknown) = ^CallSideEffect : ~m1428_4 +# 1429| m1429_5(unknown) = Chi : total:m1428_4, partial:m1429_4 +# 1429| m1429_6(destructor_only) = Store[d] : &:r1429_1, r1429_3 +# 1430| r1430_1(glval) = VariableAddress[rd] : +# 1430| r1430_2(glval) = VariableAddress[#temp1430:33] : +# 1430| r1430_3(glval) = FunctionAddress[returnValue] : +# 1430| r1430_4(destructor_only) = Call[returnValue] : func:r1430_3 +# 1430| m1430_5(unknown) = ^CallSideEffect : ~m1429_5 +# 1430| m1430_6(unknown) = Chi : total:m1429_5, partial:m1430_5 +# 1430| m1430_7(destructor_only) = Store[#temp1430:33] : &:r1430_2, r1430_4 +# 1430| r1430_8(glval) = Convert : r1430_2 +# 1430| r1430_9(destructor_only &) = CopyValue : r1430_8 +# 1430| m1430_10(destructor_only &) = Store[rd] : &:r1430_1, r1430_9 +# 1431| r1431_1(glval) = VariableAddress[d2] : +# 1431| m1431_2(destructor_only) = Uninitialized[d2] : &:r1431_1 +# 1432| r1432_1(glval) = FunctionAddress[acceptRef] : +# 1432| r1432_2(glval) = VariableAddress[d] : +# 1432| r1432_3(glval) = Convert : r1432_2 +# 1432| r1432_4(destructor_only &) = CopyValue : r1432_3 +# 1432| v1432_5(void) = Call[acceptRef] : func:r1432_1, 0:r1432_4 +# 1432| m1432_6(unknown) = ^CallSideEffect : ~m1430_6 +# 1432| m1432_7(unknown) = Chi : total:m1430_6, partial:m1432_6 +# 1432| v1432_8(void) = ^BufferReadSideEffect[0] : &:r1432_4, ~m1429_6 +# 1433| r1433_1(glval) = FunctionAddress[acceptValue] : +# 1433| r1433_2(glval) = VariableAddress[#temp1433:17] : +# 1433| r1433_3(glval) = VariableAddress[d] : +# 1433| r1433_4(destructor_only) = Load[d] : &:r1433_3, m1429_6 +# 1433| m1433_5(destructor_only) = Store[#temp1433:17] : &:r1433_2, r1433_4 +# 1433| r1433_6(destructor_only) = Load[#temp1433:17] : &:r1433_2, m1433_5 +# 1433| v1433_7(void) = Call[acceptValue] : func:r1433_1, 0:r1433_6 +# 1433| m1433_8(unknown) = ^CallSideEffect : ~m1432_7 +# 1433| m1433_9(unknown) = Chi : total:m1432_7, partial:m1433_8 +# 1434| r1434_1(glval) = VariableAddress[#temp1434:5] : +# 1434| r1434_2(destructor_only) = Constant[0] : +# 1434| m1434_3(destructor_only) = Store[#temp1434:5] : &:r1434_1, r1434_2 +# 1434| r1434_4(glval) = FunctionAddress[method] : +# 1434| v1434_5(void) = Call[method] : func:r1434_4, this:r1434_1 +# 1434| m1434_6(unknown) = ^CallSideEffect : ~m1433_9 +# 1434| m1434_7(unknown) = Chi : total:m1433_9, partial:m1434_6 +# 1434| v1434_8(void) = ^IndirectReadSideEffect[-1] : &:r1434_1, m1434_3 +# 1434| m1434_9(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1434_1 +# 1434| m1434_10(destructor_only) = Chi : total:m1434_3, partial:m1434_9 +# 1435| r1435_1(glval) = VariableAddress[#temp1435:5] : +# 1435| r1435_2(glval) = FunctionAddress[returnValue] : +# 1435| r1435_3(destructor_only) = Call[returnValue] : func:r1435_2 +# 1435| m1435_4(unknown) = ^CallSideEffect : ~m1434_7 +# 1435| m1435_5(unknown) = Chi : total:m1434_7, partial:m1435_4 +# 1435| m1435_6(destructor_only) = Store[#temp1435:5] : &:r1435_1, r1435_3 +# 1435| r1435_7(glval) = FunctionAddress[method] : +# 1435| v1435_8(void) = Call[method] : func:r1435_7, this:r1435_1 +# 1435| m1435_9(unknown) = ^CallSideEffect : ~m1435_5 +# 1435| m1435_10(unknown) = Chi : total:m1435_5, partial:m1435_9 +# 1435| v1435_11(void) = ^IndirectReadSideEffect[-1] : &:r1435_1, m1435_6 +# 1435| m1435_12(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1435_1 +# 1435| m1435_13(destructor_only) = Chi : total:m1435_6, partial:m1435_12 +# 1437| r1437_1(glval) = VariableAddress[#temp1437:5] : +# 1437| r1437_2(glval) = FunctionAddress[defaultConstruct] : +# 1437| r1437_3(destructor_only) = Call[defaultConstruct] : func:r1437_2 +# 1437| m1437_4(unknown) = ^CallSideEffect : ~m1435_10 +# 1437| m1437_5(unknown) = Chi : total:m1435_10, partial:m1437_4 +# 1437| m1437_6(destructor_only) = Store[#temp1437:5] : &:r1437_1, r1437_3 +# 1438| v1438_1(void) = NoOp : +# 1438| r1438_2(glval) = VariableAddress[d2] : +# 1438| r1438_3(glval) = FunctionAddress[~destructor_only] : +# 1438| v1438_4(void) = Call[~destructor_only] : func:r1438_3, this:r1438_2 +# 1438| m1438_5(unknown) = ^CallSideEffect : ~m1437_5 +# 1438| m1438_6(unknown) = Chi : total:m1437_5, partial:m1438_5 +# 1438| v1438_7(void) = ^IndirectReadSideEffect[-1] : &:r1438_2, m1431_2 +# 1438| m1438_8(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1438_2 +# 1438| m1438_9(destructor_only) = Chi : total:m1431_2, partial:m1438_8 +# 1438| r1438_10(glval) = VariableAddress[d] : +# 1438| r1438_11(glval) = FunctionAddress[~destructor_only] : +# 1438| v1438_12(void) = Call[~destructor_only] : func:r1438_11, this:r1438_10 +# 1438| m1438_13(unknown) = ^CallSideEffect : ~m1438_6 +# 1438| m1438_14(unknown) = Chi : total:m1438_6, partial:m1438_13 +# 1438| v1438_15(void) = ^IndirectReadSideEffect[-1] : &:r1438_10, m1429_6 +# 1438| m1438_16(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1438_10 +# 1438| m1438_17(destructor_only) = Chi : total:m1429_6, partial:m1438_16 +# 1428| v1428_5(void) = ReturnVoid : +# 1428| v1428_6(void) = AliasedUse : ~m1438_14 +# 1428| v1428_7(void) = ExitFunction : -# 1393| void temporary_copy_constructor() -# 1393| Block 0 -# 1393| v1393_1(void) = EnterFunction : -# 1393| m1393_2(unknown) = AliasedDefinition : -# 1393| m1393_3(unknown) = InitializeNonLocal : -# 1393| m1393_4(unknown) = Chi : total:m1393_2, partial:m1393_3 -# 1394| r1394_1(glval) = VariableAddress[d] : -# 1394| r1394_2(glval) = FunctionAddress[returnValue] : -# 1394| r1394_3(copy_constructor) = Call[returnValue] : func:r1394_2 -# 1394| m1394_4(unknown) = ^CallSideEffect : ~m1393_4 -# 1394| m1394_5(unknown) = Chi : total:m1393_4, partial:m1394_4 -# 1394| m1394_6(copy_constructor) = Store[d] : &:r1394_1, r1394_3 -# 1395| r1395_1(glval) = VariableAddress[rd] : -# 1395| r1395_2(glval) = VariableAddress[#temp1395:34] : -# 1395| r1395_3(glval) = FunctionAddress[returnValue] : -# 1395| r1395_4(copy_constructor) = Call[returnValue] : func:r1395_3 -# 1395| m1395_5(unknown) = ^CallSideEffect : ~m1394_5 -# 1395| m1395_6(unknown) = Chi : total:m1394_5, partial:m1395_5 -# 1395| m1395_7(copy_constructor) = Store[#temp1395:34] : &:r1395_2, r1395_4 -# 1395| r1395_8(glval) = Convert : r1395_2 -# 1395| r1395_9(copy_constructor &) = CopyValue : r1395_8 -# 1395| m1395_10(copy_constructor &) = Store[rd] : &:r1395_1, r1395_9 -# 1396| r1396_1(glval) = VariableAddress[d2] : -# 1396| m1396_2(copy_constructor) = Uninitialized[d2] : &:r1396_1 -# 1396| r1396_3(glval) = FunctionAddress[copy_constructor] : -# 1396| v1396_4(void) = Call[copy_constructor] : func:r1396_3, this:r1396_1 -# 1396| m1396_5(unknown) = ^CallSideEffect : ~m1395_6 -# 1396| m1396_6(unknown) = Chi : total:m1395_6, partial:m1396_5 -# 1396| m1396_7(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1396_1 -# 1396| m1396_8(copy_constructor) = Chi : total:m1396_2, partial:m1396_7 -# 1397| r1397_1(glval) = FunctionAddress[acceptRef] : -# 1397| r1397_2(glval) = VariableAddress[d] : -# 1397| r1397_3(glval) = Convert : r1397_2 -# 1397| r1397_4(copy_constructor &) = CopyValue : r1397_3 -# 1397| v1397_5(void) = Call[acceptRef] : func:r1397_1, 0:r1397_4 -# 1397| m1397_6(unknown) = ^CallSideEffect : ~m1396_6 -# 1397| m1397_7(unknown) = Chi : total:m1396_6, partial:m1397_6 -# 1397| v1397_8(void) = ^BufferReadSideEffect[0] : &:r1397_4, ~m1394_6 -# 1398| r1398_1(glval) = FunctionAddress[acceptValue] : -# 1398| r1398_2(glval) = VariableAddress[#temp1398:17] : -# 1398| m1398_3(copy_constructor) = Uninitialized[#temp1398:17] : &:r1398_2 -# 1398| r1398_4(glval) = FunctionAddress[copy_constructor] : -# 1398| r1398_5(glval) = VariableAddress[d] : -# 1398| r1398_6(glval) = Convert : r1398_5 -# 1398| r1398_7(copy_constructor &) = CopyValue : r1398_6 -# 1398| v1398_8(void) = Call[copy_constructor] : func:r1398_4, this:r1398_2, 0:r1398_7 -# 1398| m1398_9(unknown) = ^CallSideEffect : ~m1397_7 -# 1398| m1398_10(unknown) = Chi : total:m1397_7, partial:m1398_9 -# 1398| v1398_11(void) = ^BufferReadSideEffect[0] : &:r1398_7, ~m1394_6 -# 1398| m1398_12(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1398_2 -# 1398| m1398_13(copy_constructor) = Chi : total:m1398_3, partial:m1398_12 -# 1398| r1398_14(copy_constructor) = Load[#temp1398:17] : &:r1398_2, m1398_13 -# 1398| v1398_15(void) = Call[acceptValue] : func:r1398_1, 0:r1398_14 -# 1398| m1398_16(unknown) = ^CallSideEffect : ~m1398_10 -# 1398| m1398_17(unknown) = Chi : total:m1398_10, partial:m1398_16 -# 1399| r1399_1(glval) = VariableAddress[#temp1399:5] : -# 1399| m1399_2(copy_constructor) = Uninitialized[#temp1399:5] : &:r1399_1 -# 1399| r1399_3(glval) = FunctionAddress[copy_constructor] : -# 1399| v1399_4(void) = Call[copy_constructor] : func:r1399_3, this:r1399_1 -# 1399| m1399_5(unknown) = ^CallSideEffect : ~m1398_17 -# 1399| m1399_6(unknown) = Chi : total:m1398_17, partial:m1399_5 -# 1399| m1399_7(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1399_1 -# 1399| m1399_8(copy_constructor) = Chi : total:m1399_2, partial:m1399_7 -# 1399| r1399_9(glval) = FunctionAddress[method] : -# 1399| v1399_10(void) = Call[method] : func:r1399_9, this:r1399_1 -# 1399| m1399_11(unknown) = ^CallSideEffect : ~m1399_6 -# 1399| m1399_12(unknown) = Chi : total:m1399_6, partial:m1399_11 -# 1399| v1399_13(void) = ^IndirectReadSideEffect[-1] : &:r1399_1, m1399_8 -# 1399| m1399_14(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1399_1 -# 1399| m1399_15(copy_constructor) = Chi : total:m1399_8, partial:m1399_14 -# 1400| r1400_1(glval) = VariableAddress[#temp1400:5] : -# 1400| r1400_2(glval) = FunctionAddress[returnValue] : -# 1400| r1400_3(copy_constructor) = Call[returnValue] : func:r1400_2 -# 1400| m1400_4(unknown) = ^CallSideEffect : ~m1399_12 -# 1400| m1400_5(unknown) = Chi : total:m1399_12, partial:m1400_4 -# 1400| m1400_6(copy_constructor) = Store[#temp1400:5] : &:r1400_1, r1400_3 -# 1400| r1400_7(glval) = FunctionAddress[method] : -# 1400| v1400_8(void) = Call[method] : func:r1400_7, this:r1400_1 -# 1400| m1400_9(unknown) = ^CallSideEffect : ~m1400_5 -# 1400| m1400_10(unknown) = Chi : total:m1400_5, partial:m1400_9 -# 1400| v1400_11(void) = ^IndirectReadSideEffect[-1] : &:r1400_1, m1400_6 -# 1400| m1400_12(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1400_1 -# 1400| m1400_13(copy_constructor) = Chi : total:m1400_6, partial:m1400_12 -# 1401| r1401_1(glval) = VariableAddress[#temp1401:5] : -# 1401| r1401_2(glval) = FunctionAddress[defaultConstruct] : -# 1401| r1401_3(copy_constructor) = Call[defaultConstruct] : func:r1401_2 -# 1401| m1401_4(unknown) = ^CallSideEffect : ~m1400_10 -# 1401| m1401_5(unknown) = Chi : total:m1400_10, partial:m1401_4 -# 1401| m1401_6(copy_constructor) = Store[#temp1401:5] : &:r1401_1, r1401_3 -# 1403| r1403_1(glval) = VariableAddress[y] : -# 1403| r1403_2(glval) = VariableAddress[#temp1403:13] : -# 1403| r1403_3(glval) = FunctionAddress[returnValue] : -# 1403| r1403_4(copy_constructor) = Call[returnValue] : func:r1403_3 -# 1403| m1403_5(unknown) = ^CallSideEffect : ~m1401_5 -# 1403| m1403_6(unknown) = Chi : total:m1401_5, partial:m1403_5 -# 1403| m1403_7(copy_constructor) = Store[#temp1403:13] : &:r1403_2, r1403_4 -# 1403| r1403_8(glval) = FieldAddress[y] : r1403_2 -# 1403| r1403_9(int) = Load[?] : &:r1403_8, ~m1403_7 -# 1403| m1403_10(int) = Store[y] : &:r1403_1, r1403_9 -# 1404| v1404_1(void) = NoOp : -# 1393| v1393_5(void) = ReturnVoid : -# 1393| v1393_6(void) = AliasedUse : ~m1403_6 -# 1393| v1393_7(void) = ExitFunction : +# 1440| void temporary_copy_constructor() +# 1440| Block 0 +# 1440| v1440_1(void) = EnterFunction : +# 1440| m1440_2(unknown) = AliasedDefinition : +# 1440| m1440_3(unknown) = InitializeNonLocal : +# 1440| m1440_4(unknown) = Chi : total:m1440_2, partial:m1440_3 +# 1441| r1441_1(glval) = VariableAddress[d] : +# 1441| r1441_2(glval) = FunctionAddress[returnValue] : +# 1441| r1441_3(copy_constructor) = Call[returnValue] : func:r1441_2 +# 1441| m1441_4(unknown) = ^CallSideEffect : ~m1440_4 +# 1441| m1441_5(unknown) = Chi : total:m1440_4, partial:m1441_4 +# 1441| m1441_6(copy_constructor) = Store[d] : &:r1441_1, r1441_3 +# 1442| r1442_1(glval) = VariableAddress[rd] : +# 1442| r1442_2(glval) = VariableAddress[#temp1442:34] : +# 1442| r1442_3(glval) = FunctionAddress[returnValue] : +# 1442| r1442_4(copy_constructor) = Call[returnValue] : func:r1442_3 +# 1442| m1442_5(unknown) = ^CallSideEffect : ~m1441_5 +# 1442| m1442_6(unknown) = Chi : total:m1441_5, partial:m1442_5 +# 1442| m1442_7(copy_constructor) = Store[#temp1442:34] : &:r1442_2, r1442_4 +# 1442| r1442_8(glval) = Convert : r1442_2 +# 1442| r1442_9(copy_constructor &) = CopyValue : r1442_8 +# 1442| m1442_10(copy_constructor &) = Store[rd] : &:r1442_1, r1442_9 +# 1443| r1443_1(glval) = VariableAddress[d2] : +# 1443| m1443_2(copy_constructor) = Uninitialized[d2] : &:r1443_1 +# 1443| r1443_3(glval) = FunctionAddress[copy_constructor] : +# 1443| v1443_4(void) = Call[copy_constructor] : func:r1443_3, this:r1443_1 +# 1443| m1443_5(unknown) = ^CallSideEffect : ~m1442_6 +# 1443| m1443_6(unknown) = Chi : total:m1442_6, partial:m1443_5 +# 1443| m1443_7(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1443_1 +# 1443| m1443_8(copy_constructor) = Chi : total:m1443_2, partial:m1443_7 +# 1444| r1444_1(glval) = FunctionAddress[acceptRef] : +# 1444| r1444_2(glval) = VariableAddress[d] : +# 1444| r1444_3(glval) = Convert : r1444_2 +# 1444| r1444_4(copy_constructor &) = CopyValue : r1444_3 +# 1444| v1444_5(void) = Call[acceptRef] : func:r1444_1, 0:r1444_4 +# 1444| m1444_6(unknown) = ^CallSideEffect : ~m1443_6 +# 1444| m1444_7(unknown) = Chi : total:m1443_6, partial:m1444_6 +# 1444| v1444_8(void) = ^BufferReadSideEffect[0] : &:r1444_4, ~m1441_6 +# 1445| r1445_1(glval) = FunctionAddress[acceptValue] : +# 1445| r1445_2(glval) = VariableAddress[#temp1445:17] : +# 1445| m1445_3(copy_constructor) = Uninitialized[#temp1445:17] : &:r1445_2 +# 1445| r1445_4(glval) = FunctionAddress[copy_constructor] : +# 1445| r1445_5(glval) = VariableAddress[d] : +# 1445| r1445_6(glval) = Convert : r1445_5 +# 1445| r1445_7(copy_constructor &) = CopyValue : r1445_6 +# 1445| v1445_8(void) = Call[copy_constructor] : func:r1445_4, this:r1445_2, 0:r1445_7 +# 1445| m1445_9(unknown) = ^CallSideEffect : ~m1444_7 +# 1445| m1445_10(unknown) = Chi : total:m1444_7, partial:m1445_9 +# 1445| v1445_11(void) = ^BufferReadSideEffect[0] : &:r1445_7, ~m1441_6 +# 1445| m1445_12(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1445_2 +# 1445| m1445_13(copy_constructor) = Chi : total:m1445_3, partial:m1445_12 +# 1445| r1445_14(copy_constructor) = Load[#temp1445:17] : &:r1445_2, m1445_13 +# 1445| v1445_15(void) = Call[acceptValue] : func:r1445_1, 0:r1445_14 +# 1445| m1445_16(unknown) = ^CallSideEffect : ~m1445_10 +# 1445| m1445_17(unknown) = Chi : total:m1445_10, partial:m1445_16 +# 1446| r1446_1(glval) = VariableAddress[#temp1446:5] : +# 1446| m1446_2(copy_constructor) = Uninitialized[#temp1446:5] : &:r1446_1 +# 1446| r1446_3(glval) = FunctionAddress[copy_constructor] : +# 1446| v1446_4(void) = Call[copy_constructor] : func:r1446_3, this:r1446_1 +# 1446| m1446_5(unknown) = ^CallSideEffect : ~m1445_17 +# 1446| m1446_6(unknown) = Chi : total:m1445_17, partial:m1446_5 +# 1446| m1446_7(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1446_1 +# 1446| m1446_8(copy_constructor) = Chi : total:m1446_2, partial:m1446_7 +# 1446| r1446_9(glval) = FunctionAddress[method] : +# 1446| v1446_10(void) = Call[method] : func:r1446_9, this:r1446_1 +# 1446| m1446_11(unknown) = ^CallSideEffect : ~m1446_6 +# 1446| m1446_12(unknown) = Chi : total:m1446_6, partial:m1446_11 +# 1446| v1446_13(void) = ^IndirectReadSideEffect[-1] : &:r1446_1, m1446_8 +# 1446| m1446_14(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1446_1 +# 1446| m1446_15(copy_constructor) = Chi : total:m1446_8, partial:m1446_14 +# 1447| r1447_1(glval) = VariableAddress[#temp1447:5] : +# 1447| r1447_2(glval) = FunctionAddress[returnValue] : +# 1447| r1447_3(copy_constructor) = Call[returnValue] : func:r1447_2 +# 1447| m1447_4(unknown) = ^CallSideEffect : ~m1446_12 +# 1447| m1447_5(unknown) = Chi : total:m1446_12, partial:m1447_4 +# 1447| m1447_6(copy_constructor) = Store[#temp1447:5] : &:r1447_1, r1447_3 +# 1447| r1447_7(glval) = FunctionAddress[method] : +# 1447| v1447_8(void) = Call[method] : func:r1447_7, this:r1447_1 +# 1447| m1447_9(unknown) = ^CallSideEffect : ~m1447_5 +# 1447| m1447_10(unknown) = Chi : total:m1447_5, partial:m1447_9 +# 1447| v1447_11(void) = ^IndirectReadSideEffect[-1] : &:r1447_1, m1447_6 +# 1447| m1447_12(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1447_1 +# 1447| m1447_13(copy_constructor) = Chi : total:m1447_6, partial:m1447_12 +# 1448| r1448_1(glval) = VariableAddress[#temp1448:5] : +# 1448| r1448_2(glval) = FunctionAddress[defaultConstruct] : +# 1448| r1448_3(copy_constructor) = Call[defaultConstruct] : func:r1448_2 +# 1448| m1448_4(unknown) = ^CallSideEffect : ~m1447_10 +# 1448| m1448_5(unknown) = Chi : total:m1447_10, partial:m1448_4 +# 1448| m1448_6(copy_constructor) = Store[#temp1448:5] : &:r1448_1, r1448_3 +# 1450| r1450_1(glval) = VariableAddress[y] : +# 1450| r1450_2(glval) = VariableAddress[#temp1450:13] : +# 1450| r1450_3(glval) = FunctionAddress[returnValue] : +# 1450| r1450_4(copy_constructor) = Call[returnValue] : func:r1450_3 +# 1450| m1450_5(unknown) = ^CallSideEffect : ~m1448_5 +# 1450| m1450_6(unknown) = Chi : total:m1448_5, partial:m1450_5 +# 1450| m1450_7(copy_constructor) = Store[#temp1450:13] : &:r1450_2, r1450_4 +# 1450| r1450_8(glval) = FieldAddress[y] : r1450_2 +# 1450| r1450_9(int) = Load[?] : &:r1450_8, ~m1450_7 +# 1450| m1450_10(int) = Store[y] : &:r1450_1, r1450_9 +# 1451| v1451_1(void) = NoOp : +# 1440| v1440_5(void) = ReturnVoid : +# 1440| v1440_6(void) = AliasedUse : ~m1450_6 +# 1440| v1440_7(void) = ExitFunction : -# 1406| void temporary_point() -# 1406| Block 0 -# 1406| v1406_1(void) = EnterFunction : -# 1406| m1406_2(unknown) = AliasedDefinition : -# 1406| m1406_3(unknown) = InitializeNonLocal : -# 1406| m1406_4(unknown) = Chi : total:m1406_2, partial:m1406_3 -# 1407| r1407_1(glval) = VariableAddress[p] : -# 1407| r1407_2(glval) = FunctionAddress[returnValue] : -# 1407| r1407_3(Point) = Call[returnValue] : func:r1407_2 -# 1407| m1407_4(unknown) = ^CallSideEffect : ~m1406_4 -# 1407| m1407_5(unknown) = Chi : total:m1406_4, partial:m1407_4 -# 1407| m1407_6(Point) = Store[p] : &:r1407_1, r1407_3 -# 1408| r1408_1(glval) = VariableAddress[rp] : -# 1408| r1408_2(glval) = VariableAddress[#temp1408:23] : -# 1408| r1408_3(glval) = FunctionAddress[returnValue] : -# 1408| r1408_4(Point) = Call[returnValue] : func:r1408_3 -# 1408| m1408_5(unknown) = ^CallSideEffect : ~m1407_5 -# 1408| m1408_6(unknown) = Chi : total:m1407_5, partial:m1408_5 -# 1408| m1408_7(Point) = Store[#temp1408:23] : &:r1408_2, r1408_4 -# 1408| r1408_8(glval) = Convert : r1408_2 -# 1408| r1408_9(Point &) = CopyValue : r1408_8 -# 1408| m1408_10(Point &) = Store[rp] : &:r1408_1, r1408_9 -# 1410| r1410_1(glval) = FunctionAddress[acceptRef] : -# 1410| r1410_2(glval) = VariableAddress[p] : -# 1410| r1410_3(glval) = Convert : r1410_2 -# 1410| r1410_4(Point &) = CopyValue : r1410_3 -# 1410| v1410_5(void) = Call[acceptRef] : func:r1410_1, 0:r1410_4 -# 1410| m1410_6(unknown) = ^CallSideEffect : ~m1408_6 -# 1410| m1410_7(unknown) = Chi : total:m1408_6, partial:m1410_6 -# 1410| v1410_8(void) = ^BufferReadSideEffect[0] : &:r1410_4, ~m1407_6 -# 1411| r1411_1(glval) = FunctionAddress[acceptValue] : -# 1411| r1411_2(glval) = VariableAddress[p] : -# 1411| r1411_3(Point) = Load[p] : &:r1411_2, m1407_6 -# 1411| v1411_4(void) = Call[acceptValue] : func:r1411_1, 0:r1411_3 -# 1411| m1411_5(unknown) = ^CallSideEffect : ~m1410_7 -# 1411| m1411_6(unknown) = Chi : total:m1410_7, partial:m1411_5 -# 1412| r1412_1(int) = Constant[0] : -# 1413| r1413_1(glval) = VariableAddress[y] : -# 1413| r1413_2(glval) = FunctionAddress[returnValue] : -# 1413| r1413_3(Point) = Call[returnValue] : func:r1413_2 -# 1413| m1413_4(unknown) = ^CallSideEffect : ~m1411_6 -# 1413| m1413_5(unknown) = Chi : total:m1411_6, partial:m1413_4 -# 1413| r1413_6(glval) = VariableAddress[#temp1413:13] : -# 1413| m1413_7(Point) = Store[#temp1413:13] : &:r1413_6, r1413_3 -# 1413| r1413_8(glval) = FieldAddress[y] : r1413_6 -# 1413| r1413_9(int) = Load[?] : &:r1413_8, ~m1413_7 -# 1413| m1413_10(int) = Store[y] : &:r1413_1, r1413_9 -# 1415| r1415_1(glval) = FunctionAddress[defaultConstruct] : -# 1415| r1415_2(Point) = Call[defaultConstruct] : func:r1415_1 -# 1415| m1415_3(unknown) = ^CallSideEffect : ~m1413_5 -# 1415| m1415_4(unknown) = Chi : total:m1413_5, partial:m1415_3 -# 1416| v1416_1(void) = NoOp : -# 1406| v1406_5(void) = ReturnVoid : -# 1406| v1406_6(void) = AliasedUse : ~m1415_4 -# 1406| v1406_7(void) = ExitFunction : +# 1453| void temporary_point() +# 1453| Block 0 +# 1453| v1453_1(void) = EnterFunction : +# 1453| m1453_2(unknown) = AliasedDefinition : +# 1453| m1453_3(unknown) = InitializeNonLocal : +# 1453| m1453_4(unknown) = Chi : total:m1453_2, partial:m1453_3 +# 1454| r1454_1(glval) = VariableAddress[p] : +# 1454| r1454_2(glval) = FunctionAddress[returnValue] : +# 1454| r1454_3(Point) = Call[returnValue] : func:r1454_2 +# 1454| m1454_4(unknown) = ^CallSideEffect : ~m1453_4 +# 1454| m1454_5(unknown) = Chi : total:m1453_4, partial:m1454_4 +# 1454| m1454_6(Point) = Store[p] : &:r1454_1, r1454_3 +# 1455| r1455_1(glval) = VariableAddress[rp] : +# 1455| r1455_2(glval) = VariableAddress[#temp1455:23] : +# 1455| r1455_3(glval) = FunctionAddress[returnValue] : +# 1455| r1455_4(Point) = Call[returnValue] : func:r1455_3 +# 1455| m1455_5(unknown) = ^CallSideEffect : ~m1454_5 +# 1455| m1455_6(unknown) = Chi : total:m1454_5, partial:m1455_5 +# 1455| m1455_7(Point) = Store[#temp1455:23] : &:r1455_2, r1455_4 +# 1455| r1455_8(glval) = Convert : r1455_2 +# 1455| r1455_9(Point &) = CopyValue : r1455_8 +# 1455| m1455_10(Point &) = Store[rp] : &:r1455_1, r1455_9 +# 1457| r1457_1(glval) = FunctionAddress[acceptRef] : +# 1457| r1457_2(glval) = VariableAddress[p] : +# 1457| r1457_3(glval) = Convert : r1457_2 +# 1457| r1457_4(Point &) = CopyValue : r1457_3 +# 1457| v1457_5(void) = Call[acceptRef] : func:r1457_1, 0:r1457_4 +# 1457| m1457_6(unknown) = ^CallSideEffect : ~m1455_6 +# 1457| m1457_7(unknown) = Chi : total:m1455_6, partial:m1457_6 +# 1457| v1457_8(void) = ^BufferReadSideEffect[0] : &:r1457_4, ~m1454_6 +# 1458| r1458_1(glval) = FunctionAddress[acceptValue] : +# 1458| r1458_2(glval) = VariableAddress[p] : +# 1458| r1458_3(Point) = Load[p] : &:r1458_2, m1454_6 +# 1458| v1458_4(void) = Call[acceptValue] : func:r1458_1, 0:r1458_3 +# 1458| m1458_5(unknown) = ^CallSideEffect : ~m1457_7 +# 1458| m1458_6(unknown) = Chi : total:m1457_7, partial:m1458_5 +# 1459| r1459_1(int) = Constant[0] : +# 1460| r1460_1(glval) = VariableAddress[y] : +# 1460| r1460_2(glval) = FunctionAddress[returnValue] : +# 1460| r1460_3(Point) = Call[returnValue] : func:r1460_2 +# 1460| m1460_4(unknown) = ^CallSideEffect : ~m1458_6 +# 1460| m1460_5(unknown) = Chi : total:m1458_6, partial:m1460_4 +# 1460| r1460_6(glval) = VariableAddress[#temp1460:13] : +# 1460| m1460_7(Point) = Store[#temp1460:13] : &:r1460_6, r1460_3 +# 1460| r1460_8(glval) = FieldAddress[y] : r1460_6 +# 1460| r1460_9(int) = Load[?] : &:r1460_8, ~m1460_7 +# 1460| m1460_10(int) = Store[y] : &:r1460_1, r1460_9 +# 1462| r1462_1(glval) = FunctionAddress[defaultConstruct] : +# 1462| r1462_2(Point) = Call[defaultConstruct] : func:r1462_1 +# 1462| m1462_3(unknown) = ^CallSideEffect : ~m1460_5 +# 1462| m1462_4(unknown) = Chi : total:m1460_5, partial:m1462_3 +# 1463| v1463_1(void) = NoOp : +# 1453| v1453_5(void) = ReturnVoid : +# 1453| v1453_6(void) = AliasedUse : ~m1462_4 +# 1453| v1453_7(void) = ExitFunction : -# 1423| void temporary_unusual_fields() -# 1423| Block 0 -# 1423| v1423_1(void) = EnterFunction : -# 1423| m1423_2(unknown) = AliasedDefinition : -# 1423| m1423_3(unknown) = InitializeNonLocal : -# 1423| m1423_4(unknown) = Chi : total:m1423_2, partial:m1423_3 -# 1424| r1424_1(glval) = VariableAddress[rx] : -# 1424| r1424_2(glval) = FunctionAddress[returnValue] : -# 1424| r1424_3(UnusualFields) = Call[returnValue] : func:r1424_2 -# 1424| m1424_4(unknown) = ^CallSideEffect : ~m1423_4 -# 1424| m1424_5(unknown) = Chi : total:m1423_4, partial:m1424_4 -# 1424| r1424_6(glval) = VariableAddress[#temp1424:21] : -# 1424| m1424_7(UnusualFields) = Store[#temp1424:21] : &:r1424_6, r1424_3 -# 1424| r1424_8(glval) = FieldAddress[r] : r1424_6 -# 1424| r1424_9(int &) = Load[?] : &:r1424_8, ~m1424_7 -# 1424| r1424_10(glval) = CopyValue : r1424_9 -# 1424| r1424_11(glval) = Convert : r1424_10 -# 1424| r1424_12(int &) = CopyValue : r1424_11 -# 1424| m1424_13(int &) = Store[rx] : &:r1424_1, r1424_12 -# 1425| r1425_1(glval) = VariableAddress[x] : -# 1425| r1425_2(glval) = FunctionAddress[returnValue] : -# 1425| r1425_3(UnusualFields) = Call[returnValue] : func:r1425_2 -# 1425| m1425_4(unknown) = ^CallSideEffect : ~m1424_5 -# 1425| m1425_5(unknown) = Chi : total:m1424_5, partial:m1425_4 -# 1425| r1425_6(glval) = VariableAddress[#temp1425:13] : -# 1425| m1425_7(UnusualFields) = Store[#temp1425:13] : &:r1425_6, r1425_3 -# 1425| r1425_8(glval) = FieldAddress[r] : r1425_6 -# 1425| r1425_9(int &) = Load[?] : &:r1425_8, ~m1425_7 -# 1425| r1425_10(int) = Load[?] : &:r1425_9, ~m1425_5 -# 1425| m1425_11(int) = Store[x] : &:r1425_1, r1425_10 -# 1427| r1427_1(glval) = VariableAddress[rf] : -# 1427| r1427_2(glval) = FunctionAddress[returnValue] : -# 1427| r1427_3(UnusualFields) = Call[returnValue] : func:r1427_2 -# 1427| m1427_4(unknown) = ^CallSideEffect : ~m1425_5 -# 1427| m1427_5(unknown) = Chi : total:m1425_5, partial:m1427_4 -# 1427| r1427_6(glval) = VariableAddress[#temp1427:23] : -# 1427| m1427_7(UnusualFields) = Store[#temp1427:23] : &:r1427_6, r1427_3 -# 1427| r1427_8(glval) = FieldAddress[a] : r1427_6 -# 1427| r1427_9(float *) = Convert : r1427_8 -# 1427| r1427_10(int) = Constant[3] : -# 1427| r1427_11(glval) = PointerAdd[4] : r1427_9, r1427_10 -# 1427| r1427_12(glval) = Convert : r1427_11 -# 1427| r1427_13(float &) = CopyValue : r1427_12 -# 1427| m1427_14(float &) = Store[rf] : &:r1427_1, r1427_13 -# 1428| r1428_1(glval) = VariableAddress[f] : -# 1428| r1428_2(glval) = FunctionAddress[returnValue] : -# 1428| r1428_3(UnusualFields) = Call[returnValue] : func:r1428_2 -# 1428| m1428_4(unknown) = ^CallSideEffect : ~m1427_5 -# 1428| m1428_5(unknown) = Chi : total:m1427_5, partial:m1428_4 -# 1428| r1428_6(glval) = VariableAddress[#temp1428:15] : -# 1428| m1428_7(UnusualFields) = Store[#temp1428:15] : &:r1428_6, r1428_3 -# 1428| r1428_8(glval) = FieldAddress[a] : r1428_6 -# 1428| r1428_9(float *) = Convert : r1428_8 -# 1428| r1428_10(int) = Constant[5] : -# 1428| r1428_11(glval) = PointerAdd[4] : r1428_9, r1428_10 -# 1428| r1428_12(float) = Load[?] : &:r1428_11, ~m1428_7 -# 1428| m1428_13(float) = Store[f] : &:r1428_1, r1428_12 -# 1429| v1429_1(void) = NoOp : -# 1423| v1423_5(void) = ReturnVoid : -# 1423| v1423_6(void) = AliasedUse : ~m1428_5 -# 1423| v1423_7(void) = ExitFunction : +# 1470| void temporary_unusual_fields() +# 1470| Block 0 +# 1470| v1470_1(void) = EnterFunction : +# 1470| m1470_2(unknown) = AliasedDefinition : +# 1470| m1470_3(unknown) = InitializeNonLocal : +# 1470| m1470_4(unknown) = Chi : total:m1470_2, partial:m1470_3 +# 1471| r1471_1(glval) = VariableAddress[rx] : +# 1471| r1471_2(glval) = FunctionAddress[returnValue] : +# 1471| r1471_3(UnusualFields) = Call[returnValue] : func:r1471_2 +# 1471| m1471_4(unknown) = ^CallSideEffect : ~m1470_4 +# 1471| m1471_5(unknown) = Chi : total:m1470_4, partial:m1471_4 +# 1471| r1471_6(glval) = VariableAddress[#temp1471:21] : +# 1471| m1471_7(UnusualFields) = Store[#temp1471:21] : &:r1471_6, r1471_3 +# 1471| r1471_8(glval) = FieldAddress[r] : r1471_6 +# 1471| r1471_9(int &) = Load[?] : &:r1471_8, ~m1471_7 +# 1471| r1471_10(glval) = CopyValue : r1471_9 +# 1471| r1471_11(glval) = Convert : r1471_10 +# 1471| r1471_12(int &) = CopyValue : r1471_11 +# 1471| m1471_13(int &) = Store[rx] : &:r1471_1, r1471_12 +# 1472| r1472_1(glval) = VariableAddress[x] : +# 1472| r1472_2(glval) = FunctionAddress[returnValue] : +# 1472| r1472_3(UnusualFields) = Call[returnValue] : func:r1472_2 +# 1472| m1472_4(unknown) = ^CallSideEffect : ~m1471_5 +# 1472| m1472_5(unknown) = Chi : total:m1471_5, partial:m1472_4 +# 1472| r1472_6(glval) = VariableAddress[#temp1472:13] : +# 1472| m1472_7(UnusualFields) = Store[#temp1472:13] : &:r1472_6, r1472_3 +# 1472| r1472_8(glval) = FieldAddress[r] : r1472_6 +# 1472| r1472_9(int &) = Load[?] : &:r1472_8, ~m1472_7 +# 1472| r1472_10(int) = Load[?] : &:r1472_9, ~m1472_5 +# 1472| m1472_11(int) = Store[x] : &:r1472_1, r1472_10 +# 1474| r1474_1(glval) = VariableAddress[rf] : +# 1474| r1474_2(glval) = FunctionAddress[returnValue] : +# 1474| r1474_3(UnusualFields) = Call[returnValue] : func:r1474_2 +# 1474| m1474_4(unknown) = ^CallSideEffect : ~m1472_5 +# 1474| m1474_5(unknown) = Chi : total:m1472_5, partial:m1474_4 +# 1474| r1474_6(glval) = VariableAddress[#temp1474:23] : +# 1474| m1474_7(UnusualFields) = Store[#temp1474:23] : &:r1474_6, r1474_3 +# 1474| r1474_8(glval) = FieldAddress[a] : r1474_6 +# 1474| r1474_9(float *) = Convert : r1474_8 +# 1474| r1474_10(int) = Constant[3] : +# 1474| r1474_11(glval) = PointerAdd[4] : r1474_9, r1474_10 +# 1474| r1474_12(glval) = Convert : r1474_11 +# 1474| r1474_13(float &) = CopyValue : r1474_12 +# 1474| m1474_14(float &) = Store[rf] : &:r1474_1, r1474_13 +# 1475| r1475_1(glval) = VariableAddress[f] : +# 1475| r1475_2(glval) = FunctionAddress[returnValue] : +# 1475| r1475_3(UnusualFields) = Call[returnValue] : func:r1475_2 +# 1475| m1475_4(unknown) = ^CallSideEffect : ~m1474_5 +# 1475| m1475_5(unknown) = Chi : total:m1474_5, partial:m1475_4 +# 1475| r1475_6(glval) = VariableAddress[#temp1475:15] : +# 1475| m1475_7(UnusualFields) = Store[#temp1475:15] : &:r1475_6, r1475_3 +# 1475| r1475_8(glval) = FieldAddress[a] : r1475_6 +# 1475| r1475_9(float *) = Convert : r1475_8 +# 1475| r1475_10(int) = Constant[5] : +# 1475| r1475_11(glval) = PointerAdd[4] : r1475_9, r1475_10 +# 1475| r1475_12(float) = Load[?] : &:r1475_11, ~m1475_7 +# 1475| m1475_13(float) = Store[f] : &:r1475_1, r1475_12 +# 1476| v1476_1(void) = NoOp : +# 1470| v1470_5(void) = ReturnVoid : +# 1470| v1470_6(void) = AliasedUse : ~m1475_5 +# 1470| v1470_7(void) = ExitFunction : -# 1445| void temporary_hierarchy() -# 1445| Block 0 -# 1445| v1445_1(void) = EnterFunction : -# 1445| m1445_2(unknown) = AliasedDefinition : -# 1445| m1445_3(unknown) = InitializeNonLocal : -# 1445| m1445_4(unknown) = Chi : total:m1445_2, partial:m1445_3 -# 1446| r1446_1(glval) = VariableAddress[b] : +# 1492| void temporary_hierarchy() +# 1492| Block 0 +# 1492| v1492_1(void) = EnterFunction : +# 1492| m1492_2(unknown) = AliasedDefinition : +# 1492| m1492_3(unknown) = InitializeNonLocal : +# 1492| m1492_4(unknown) = Chi : total:m1492_2, partial:m1492_3 +# 1493| r1493_1(glval) = VariableAddress[b] : #-----| r0_1(glval) = VariableAddress[#temp0:0] : -# 1446| r1446_2(glval) = FunctionAddress[returnValue] : -# 1446| r1446_3(POD_Middle) = Call[returnValue] : func:r1446_2 -# 1446| m1446_4(unknown) = ^CallSideEffect : ~m1445_4 -# 1446| m1446_5(unknown) = Chi : total:m1445_4, partial:m1446_4 -# 1446| m1446_6(POD_Middle) = Store[#temp0:0] : &:r0_1, r1446_3 +# 1493| r1493_2(glval) = FunctionAddress[returnValue] : +# 1493| r1493_3(POD_Middle) = Call[returnValue] : func:r1493_2 +# 1493| m1493_4(unknown) = ^CallSideEffect : ~m1492_4 +# 1493| m1493_5(unknown) = Chi : total:m1492_4, partial:m1493_4 +# 1493| m1493_6(POD_Middle) = Store[#temp0:0] : &:r0_1, r1493_3 #-----| r0_2(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_1 -#-----| r0_3(POD_Base) = Load[?] : &:r0_2, ~m1446_6 -#-----| m0_4(POD_Base) = Store[b] : &:r1446_1, r0_3 -# 1447| r1447_1(glval) = VariableAddress[#temp1447:9] : -# 1447| r1447_2(glval) = FunctionAddress[returnValue] : -# 1447| r1447_3(POD_Derived) = Call[returnValue] : func:r1447_2 -# 1447| m1447_4(unknown) = ^CallSideEffect : ~m1446_5 -# 1447| m1447_5(unknown) = Chi : total:m1446_5, partial:m1447_4 -# 1447| m1447_6(POD_Derived) = Store[#temp1447:9] : &:r1447_1, r1447_3 -# 1447| r1447_7(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r1447_1 -# 1447| r1447_8(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r1447_7 -# 1447| r1447_9(POD_Base) = Load[?] : &:r1447_8, ~m1447_6 -# 1447| r1447_10(glval) = VariableAddress[b] : -# 1447| m1447_11(POD_Base) = Store[b] : &:r1447_10, r1447_9 -# 1448| r1448_1(glval) = VariableAddress[x] : +#-----| r0_3(POD_Base) = Load[?] : &:r0_2, ~m1493_6 +#-----| m0_4(POD_Base) = Store[b] : &:r1493_1, r0_3 +# 1494| r1494_1(glval) = VariableAddress[#temp1494:9] : +# 1494| r1494_2(glval) = FunctionAddress[returnValue] : +# 1494| r1494_3(POD_Derived) = Call[returnValue] : func:r1494_2 +# 1494| m1494_4(unknown) = ^CallSideEffect : ~m1493_5 +# 1494| m1494_5(unknown) = Chi : total:m1493_5, partial:m1494_4 +# 1494| m1494_6(POD_Derived) = Store[#temp1494:9] : &:r1494_1, r1494_3 +# 1494| r1494_7(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r1494_1 +# 1494| r1494_8(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r1494_7 +# 1494| r1494_9(POD_Base) = Load[?] : &:r1494_8, ~m1494_6 +# 1494| r1494_10(glval) = VariableAddress[b] : +# 1494| m1494_11(POD_Base) = Store[b] : &:r1494_10, r1494_9 +# 1495| r1495_1(glval) = VariableAddress[x] : #-----| r0_5(glval) = VariableAddress[#temp0:0] : -# 1448| r1448_2(glval) = FunctionAddress[returnValue] : -# 1448| r1448_3(POD_Derived) = Call[returnValue] : func:r1448_2 -# 1448| m1448_4(unknown) = ^CallSideEffect : ~m1447_5 -# 1448| m1448_5(unknown) = Chi : total:m1447_5, partial:m1448_4 -# 1448| m1448_6(POD_Derived) = Store[#temp0:0] : &:r0_5, r1448_3 +# 1495| r1495_2(glval) = FunctionAddress[returnValue] : +# 1495| r1495_3(POD_Derived) = Call[returnValue] : func:r1495_2 +# 1495| m1495_4(unknown) = ^CallSideEffect : ~m1494_5 +# 1495| m1495_5(unknown) = Chi : total:m1494_5, partial:m1495_4 +# 1495| m1495_6(POD_Derived) = Store[#temp0:0] : &:r0_5, r1495_3 #-----| r0_6(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r0_5 #-----| r0_7(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_6 -# 1448| r1448_7(glval) = FieldAddress[x] : r0_7 -# 1448| r1448_8(int) = Load[?] : &:r1448_7, ~m1448_6 -# 1448| m1448_9(int) = Store[x] : &:r1448_1, r1448_8 -# 1449| r1449_1(glval) = VariableAddress[f] : +# 1495| r1495_7(glval) = FieldAddress[x] : r0_7 +# 1495| r1495_8(int) = Load[?] : &:r1495_7, ~m1495_6 +# 1495| m1495_9(int) = Store[x] : &:r1495_1, r1495_8 +# 1496| r1496_1(glval) = VariableAddress[f] : #-----| r0_8(glval) = VariableAddress[#temp0:0] : -# 1449| r1449_2(glval) = FunctionAddress[returnValue] : -# 1449| r1449_3(POD_Derived) = Call[returnValue] : func:r1449_2 -# 1449| m1449_4(unknown) = ^CallSideEffect : ~m1448_5 -# 1449| m1449_5(unknown) = Chi : total:m1448_5, partial:m1449_4 -# 1449| m1449_6(POD_Derived) = Store[#temp0:0] : &:r0_8, r1449_3 +# 1496| r1496_2(glval) = FunctionAddress[returnValue] : +# 1496| r1496_3(POD_Derived) = Call[returnValue] : func:r1496_2 +# 1496| m1496_4(unknown) = ^CallSideEffect : ~m1495_5 +# 1496| m1496_5(unknown) = Chi : total:m1495_5, partial:m1496_4 +# 1496| m1496_6(POD_Derived) = Store[#temp0:0] : &:r0_8, r1496_3 #-----| r0_9(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r0_8 #-----| r0_10(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_9 #-----| r0_11(glval) = Convert : r0_10 -# 1449| r1449_7(glval) = FunctionAddress[f] : -# 1449| r1449_8(float) = Call[f] : func:r1449_7, this:r0_11 -# 1449| m1449_9(unknown) = ^CallSideEffect : ~m1449_5 -# 1449| m1449_10(unknown) = Chi : total:m1449_5, partial:m1449_9 -#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m1449_6 -# 1449| m1449_11(float) = Store[f] : &:r1449_1, r1449_8 -# 1450| v1450_1(void) = NoOp : -# 1445| v1445_5(void) = ReturnVoid : -# 1445| v1445_6(void) = AliasedUse : ~m1449_10 -# 1445| v1445_7(void) = ExitFunction : +# 1496| r1496_7(glval) = FunctionAddress[f] : +# 1496| r1496_8(float) = Call[f] : func:r1496_7, this:r0_11 +# 1496| m1496_9(unknown) = ^CallSideEffect : ~m1496_5 +# 1496| m1496_10(unknown) = Chi : total:m1496_5, partial:m1496_9 +#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m1496_6 +# 1496| m1496_11(float) = Store[f] : &:r1496_1, r1496_8 +# 1497| v1497_1(void) = NoOp : +# 1492| v1492_5(void) = ReturnVoid : +# 1492| v1492_6(void) = AliasedUse : ~m1496_10 +# 1492| v1492_7(void) = ExitFunction : -# 1453| void Inheritance_Test_B::~Inheritance_Test_B() -# 1453| Block 0 -# 1453| v1453_1(void) = EnterFunction : -# 1453| m1453_2(unknown) = AliasedDefinition : -# 1453| m1453_3(unknown) = InitializeNonLocal : -# 1453| m1453_4(unknown) = Chi : total:m1453_2, partial:m1453_3 -# 1453| r1453_5(glval) = VariableAddress[#this] : -# 1453| m1453_6(glval) = InitializeParameter[#this] : &:r1453_5 -# 1453| r1453_7(glval) = Load[#this] : &:r1453_5, m1453_6 -# 1453| m1453_8(Inheritance_Test_B) = InitializeIndirection[#this] : &:r1453_7 -# 1453| v1453_9(void) = NoOp : -# 1453| v1453_10(void) = ReturnIndirection[#this] : &:r1453_7, m1453_8 -# 1453| v1453_11(void) = ReturnVoid : -# 1453| v1453_12(void) = AliasedUse : m1453_3 -# 1453| v1453_13(void) = ExitFunction : +# 1500| void Inheritance_Test_B::~Inheritance_Test_B() +# 1500| Block 0 +# 1500| v1500_1(void) = EnterFunction : +# 1500| m1500_2(unknown) = AliasedDefinition : +# 1500| m1500_3(unknown) = InitializeNonLocal : +# 1500| m1500_4(unknown) = Chi : total:m1500_2, partial:m1500_3 +# 1500| r1500_5(glval) = VariableAddress[#this] : +# 1500| m1500_6(glval) = InitializeParameter[#this] : &:r1500_5 +# 1500| r1500_7(glval) = Load[#this] : &:r1500_5, m1500_6 +# 1500| m1500_8(Inheritance_Test_B) = InitializeIndirection[#this] : &:r1500_7 +# 1500| v1500_9(void) = NoOp : +# 1500| v1500_10(void) = ReturnIndirection[#this] : &:r1500_7, m1500_8 +# 1500| v1500_11(void) = ReturnVoid : +# 1500| v1500_12(void) = AliasedUse : m1500_3 +# 1500| v1500_13(void) = ExitFunction : -# 1459| void Inheritance_Test_A::Inheritance_Test_A() -# 1459| Block 0 -# 1459| v1459_1(void) = EnterFunction : -# 1459| m1459_2(unknown) = AliasedDefinition : -# 1459| m1459_3(unknown) = InitializeNonLocal : -# 1459| m1459_4(unknown) = Chi : total:m1459_2, partial:m1459_3 -# 1459| r1459_5(glval) = VariableAddress[#this] : -# 1459| m1459_6(glval) = InitializeParameter[#this] : &:r1459_5 -# 1459| r1459_7(glval) = Load[#this] : &:r1459_5, m1459_6 -# 1459| m1459_8(Inheritance_Test_A) = InitializeIndirection[#this] : &:r1459_7 -# 1459| r1459_9(glval) = FieldAddress[x] : m1459_6 -# 1459| r1459_10(int) = Constant[42] : -# 1459| m1459_11(int) = Store[?] : &:r1459_9, r1459_10 -# 1459| m1459_12(unknown) = Chi : total:m1459_8, partial:m1459_11 -# 1460| r1460_1(int) = Constant[3] : -# 1460| r1460_2(glval) = VariableAddress[#this] : -# 1460| r1460_3(Inheritance_Test_A *) = Load[#this] : &:r1460_2, m1459_6 -# 1460| r1460_4(glval) = FieldAddress[y] : r1460_3 -# 1460| m1460_5(int) = Store[?] : &:r1460_4, r1460_1 -# 1460| m1460_6(unknown) = Chi : total:m1459_12, partial:m1460_5 -# 1461| v1461_1(void) = NoOp : -# 1459| v1459_13(void) = ReturnIndirection[#this] : &:r1459_7, m1460_6 -# 1459| v1459_14(void) = ReturnVoid : -# 1459| v1459_15(void) = AliasedUse : m1459_3 -# 1459| v1459_16(void) = ExitFunction : +# 1506| void Inheritance_Test_A::Inheritance_Test_A() +# 1506| Block 0 +# 1506| v1506_1(void) = EnterFunction : +# 1506| m1506_2(unknown) = AliasedDefinition : +# 1506| m1506_3(unknown) = InitializeNonLocal : +# 1506| m1506_4(unknown) = Chi : total:m1506_2, partial:m1506_3 +# 1506| r1506_5(glval) = VariableAddress[#this] : +# 1506| m1506_6(glval) = InitializeParameter[#this] : &:r1506_5 +# 1506| r1506_7(glval) = Load[#this] : &:r1506_5, m1506_6 +# 1506| m1506_8(Inheritance_Test_A) = InitializeIndirection[#this] : &:r1506_7 +# 1506| r1506_9(glval) = FieldAddress[x] : m1506_6 +# 1506| r1506_10(int) = Constant[42] : +# 1506| m1506_11(int) = Store[?] : &:r1506_9, r1506_10 +# 1506| m1506_12(unknown) = Chi : total:m1506_8, partial:m1506_11 +# 1507| r1507_1(int) = Constant[3] : +# 1507| r1507_2(glval) = VariableAddress[#this] : +# 1507| r1507_3(Inheritance_Test_A *) = Load[#this] : &:r1507_2, m1506_6 +# 1507| r1507_4(glval) = FieldAddress[y] : r1507_3 +# 1507| m1507_5(int) = Store[?] : &:r1507_4, r1507_1 +# 1507| m1507_6(unknown) = Chi : total:m1506_12, partial:m1507_5 +# 1508| v1508_1(void) = NoOp : +# 1506| v1506_13(void) = ReturnIndirection[#this] : &:r1506_7, m1507_6 +# 1506| v1506_14(void) = ReturnVoid : +# 1506| v1506_15(void) = AliasedUse : m1506_3 +# 1506| v1506_16(void) = ExitFunction : -# 1464| void array_structured_binding() -# 1464| Block 0 -# 1464| v1464_1(void) = EnterFunction : -# 1464| m1464_2(unknown) = AliasedDefinition : -# 1464| m1464_3(unknown) = InitializeNonLocal : -# 1464| m1464_4(unknown) = Chi : total:m1464_2, partial:m1464_3 -# 1465| r1465_1(glval) = VariableAddress[xs] : -# 1465| m1465_2(int[2]) = Uninitialized[xs] : &:r1465_1 -# 1465| r1465_3(int) = Constant[0] : -# 1465| r1465_4(glval) = PointerAdd[4] : r1465_1, r1465_3 -# 1465| r1465_5(int) = Constant[1] : -# 1465| m1465_6(int) = Store[?] : &:r1465_4, r1465_5 -# 1465| m1465_7(int[2]) = Chi : total:m1465_2, partial:m1465_6 -# 1465| r1465_8(int) = Constant[1] : -# 1465| r1465_9(glval) = PointerAdd[4] : r1465_1, r1465_8 -# 1465| r1465_10(int) = Constant[2] : -# 1465| m1465_11(int) = Store[?] : &:r1465_9, r1465_10 -# 1465| m1465_12(int[2]) = Chi : total:m1465_7, partial:m1465_11 -# 1468| r1468_1(glval) = VariableAddress[(unnamed local variable)] : -# 1468| r1468_2(glval) = VariableAddress[xs] : -# 1468| r1468_3(int(&)[2]) = CopyValue : r1468_2 -# 1468| m1468_4(int(&)[2]) = Store[(unnamed local variable)] : &:r1468_1, r1468_3 -# 1468| r1468_5(glval) = VariableAddress[x0] : +# 1511| void array_structured_binding() +# 1511| Block 0 +# 1511| v1511_1(void) = EnterFunction : +# 1511| m1511_2(unknown) = AliasedDefinition : +# 1511| m1511_3(unknown) = InitializeNonLocal : +# 1511| m1511_4(unknown) = Chi : total:m1511_2, partial:m1511_3 +# 1512| r1512_1(glval) = VariableAddress[xs] : +# 1512| m1512_2(int[2]) = Uninitialized[xs] : &:r1512_1 +# 1512| r1512_3(int) = Constant[0] : +# 1512| r1512_4(glval) = PointerAdd[4] : r1512_1, r1512_3 +# 1512| r1512_5(int) = Constant[1] : +# 1512| m1512_6(int) = Store[?] : &:r1512_4, r1512_5 +# 1512| m1512_7(int[2]) = Chi : total:m1512_2, partial:m1512_6 +# 1512| r1512_8(int) = Constant[1] : +# 1512| r1512_9(glval) = PointerAdd[4] : r1512_1, r1512_8 +# 1512| r1512_10(int) = Constant[2] : +# 1512| m1512_11(int) = Store[?] : &:r1512_9, r1512_10 +# 1512| m1512_12(int[2]) = Chi : total:m1512_7, partial:m1512_11 +# 1515| r1515_1(glval) = VariableAddress[(unnamed local variable)] : +# 1515| r1515_2(glval) = VariableAddress[xs] : +# 1515| r1515_3(int(&)[2]) = CopyValue : r1515_2 +# 1515| m1515_4(int(&)[2]) = Store[(unnamed local variable)] : &:r1515_1, r1515_3 +# 1515| r1515_5(glval) = VariableAddress[x0] : #-----| r0_1(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_2(int(&)[2]) = Load[(unnamed local variable)] : &:r0_1, m1468_4 +#-----| r0_2(int(&)[2]) = Load[(unnamed local variable)] : &:r0_1, m1515_4 #-----| r0_3(glval) = CopyValue : r0_2 #-----| r0_4(int *) = Convert : r0_3 #-----| r0_5(unsigned long) = Constant[0] : #-----| r0_6(glval) = PointerAdd[4] : r0_4, r0_5 -#-----| m0_7(int &) = Store[x0] : &:r1468_5, r0_6 -# 1468| r1468_6(glval) = VariableAddress[x1] : +#-----| m0_7(int &) = Store[x0] : &:r1515_5, r0_6 +# 1515| r1515_6(glval) = VariableAddress[x1] : #-----| r0_8(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_9(int(&)[2]) = Load[(unnamed local variable)] : &:r0_8, m1468_4 +#-----| r0_9(int(&)[2]) = Load[(unnamed local variable)] : &:r0_8, m1515_4 #-----| r0_10(glval) = CopyValue : r0_9 #-----| r0_11(int *) = Convert : r0_10 #-----| r0_12(unsigned long) = Constant[1] : #-----| r0_13(glval) = PointerAdd[4] : r0_11, r0_12 -#-----| m0_14(int &) = Store[x1] : &:r1468_6, r0_13 -# 1469| r1469_1(int) = Constant[3] : -# 1469| r1469_2(glval) = VariableAddress[x1] : -# 1469| r1469_3(int &) = Load[x1] : &:r1469_2, m0_14 -# 1469| m1469_4(int) = Store[?] : &:r1469_3, r1469_1 -# 1469| m1469_5(int[2]) = Chi : total:m1465_12, partial:m1469_4 -# 1470| r1470_1(glval) = VariableAddress[rx1] : -# 1470| r1470_2(glval) = VariableAddress[x1] : -# 1470| r1470_3(int &) = Load[x1] : &:r1470_2, m0_14 -# 1470| r1470_4(int &) = CopyValue : r1470_3 -# 1470| m1470_5(int &) = Store[rx1] : &:r1470_1, r1470_4 -# 1471| r1471_1(glval) = VariableAddress[x] : -# 1471| r1471_2(glval) = VariableAddress[x1] : -# 1471| r1471_3(int &) = Load[x1] : &:r1471_2, m0_14 -# 1471| r1471_4(int) = Load[?] : &:r1471_3, m1469_4 -# 1471| m1471_5(int) = Store[x] : &:r1471_1, r1471_4 -# 1475| r1475_1(glval) = VariableAddress[unnamed_local_variable] : -# 1475| r1475_2(glval) = VariableAddress[xs] : -# 1475| r1475_3(int(&)[2]) = CopyValue : r1475_2 -# 1475| m1475_4(int(&)[2]) = Store[unnamed_local_variable] : &:r1475_1, r1475_3 -# 1476| r1476_1(glval) = VariableAddress[x0] : -# 1476| r1476_2(glval) = VariableAddress[unnamed_local_variable] : -# 1476| r1476_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1476_2, m1475_4 -# 1476| r1476_4(glval) = CopyValue : r1476_3 -# 1476| r1476_5(int *) = Convert : r1476_4 -# 1476| r1476_6(int) = Constant[0] : -# 1476| r1476_7(glval) = PointerAdd[4] : r1476_5, r1476_6 -# 1476| r1476_8(int &) = CopyValue : r1476_7 -# 1476| m1476_9(int &) = Store[x0] : &:r1476_1, r1476_8 -# 1477| r1477_1(glval) = VariableAddress[x1] : -# 1477| r1477_2(glval) = VariableAddress[unnamed_local_variable] : -# 1477| r1477_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1477_2, m1475_4 -# 1477| r1477_4(glval) = CopyValue : r1477_3 -# 1477| r1477_5(int *) = Convert : r1477_4 -# 1477| r1477_6(int) = Constant[1] : -# 1477| r1477_7(glval) = PointerAdd[4] : r1477_5, r1477_6 -# 1477| r1477_8(int &) = CopyValue : r1477_7 -# 1477| m1477_9(int &) = Store[x1] : &:r1477_1, r1477_8 -# 1478| r1478_1(int) = Constant[3] : -# 1478| r1478_2(glval) = VariableAddress[x1] : -# 1478| r1478_3(int &) = Load[x1] : &:r1478_2, m1477_9 -# 1478| r1478_4(glval) = CopyValue : r1478_3 -# 1478| m1478_5(int) = Store[?] : &:r1478_4, r1478_1 -# 1478| m1478_6(int[2]) = Chi : total:m1469_5, partial:m1478_5 -# 1479| r1479_1(glval) = VariableAddress[rx1] : -# 1479| r1479_2(glval) = VariableAddress[x1] : -# 1479| r1479_3(int &) = Load[x1] : &:r1479_2, m1477_9 -# 1479| r1479_4(glval) = CopyValue : r1479_3 -# 1479| r1479_5(int &) = CopyValue : r1479_4 -# 1479| m1479_6(int &) = Store[rx1] : &:r1479_1, r1479_5 -# 1480| r1480_1(glval) = VariableAddress[x] : -# 1480| r1480_2(glval) = VariableAddress[x1] : -# 1480| r1480_3(int &) = Load[x1] : &:r1480_2, m1477_9 -# 1480| r1480_4(int) = Load[?] : &:r1480_3, m1478_5 -# 1480| m1480_5(int) = Store[x] : &:r1480_1, r1480_4 -# 1482| v1482_1(void) = NoOp : -# 1464| v1464_5(void) = ReturnVoid : -# 1464| v1464_6(void) = AliasedUse : m1464_3 -# 1464| v1464_7(void) = ExitFunction : +#-----| m0_14(int &) = Store[x1] : &:r1515_6, r0_13 +# 1516| r1516_1(int) = Constant[3] : +# 1516| r1516_2(glval) = VariableAddress[x1] : +# 1516| r1516_3(int &) = Load[x1] : &:r1516_2, m0_14 +# 1516| m1516_4(int) = Store[?] : &:r1516_3, r1516_1 +# 1516| m1516_5(int[2]) = Chi : total:m1512_12, partial:m1516_4 +# 1517| r1517_1(glval) = VariableAddress[rx1] : +# 1517| r1517_2(glval) = VariableAddress[x1] : +# 1517| r1517_3(int &) = Load[x1] : &:r1517_2, m0_14 +# 1517| r1517_4(int &) = CopyValue : r1517_3 +# 1517| m1517_5(int &) = Store[rx1] : &:r1517_1, r1517_4 +# 1518| r1518_1(glval) = VariableAddress[x] : +# 1518| r1518_2(glval) = VariableAddress[x1] : +# 1518| r1518_3(int &) = Load[x1] : &:r1518_2, m0_14 +# 1518| r1518_4(int) = Load[?] : &:r1518_3, m1516_4 +# 1518| m1518_5(int) = Store[x] : &:r1518_1, r1518_4 +# 1522| r1522_1(glval) = VariableAddress[unnamed_local_variable] : +# 1522| r1522_2(glval) = VariableAddress[xs] : +# 1522| r1522_3(int(&)[2]) = CopyValue : r1522_2 +# 1522| m1522_4(int(&)[2]) = Store[unnamed_local_variable] : &:r1522_1, r1522_3 +# 1523| r1523_1(glval) = VariableAddress[x0] : +# 1523| r1523_2(glval) = VariableAddress[unnamed_local_variable] : +# 1523| r1523_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1523_2, m1522_4 +# 1523| r1523_4(glval) = CopyValue : r1523_3 +# 1523| r1523_5(int *) = Convert : r1523_4 +# 1523| r1523_6(int) = Constant[0] : +# 1523| r1523_7(glval) = PointerAdd[4] : r1523_5, r1523_6 +# 1523| r1523_8(int &) = CopyValue : r1523_7 +# 1523| m1523_9(int &) = Store[x0] : &:r1523_1, r1523_8 +# 1524| r1524_1(glval) = VariableAddress[x1] : +# 1524| r1524_2(glval) = VariableAddress[unnamed_local_variable] : +# 1524| r1524_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1524_2, m1522_4 +# 1524| r1524_4(glval) = CopyValue : r1524_3 +# 1524| r1524_5(int *) = Convert : r1524_4 +# 1524| r1524_6(int) = Constant[1] : +# 1524| r1524_7(glval) = PointerAdd[4] : r1524_5, r1524_6 +# 1524| r1524_8(int &) = CopyValue : r1524_7 +# 1524| m1524_9(int &) = Store[x1] : &:r1524_1, r1524_8 +# 1525| r1525_1(int) = Constant[3] : +# 1525| r1525_2(glval) = VariableAddress[x1] : +# 1525| r1525_3(int &) = Load[x1] : &:r1525_2, m1524_9 +# 1525| r1525_4(glval) = CopyValue : r1525_3 +# 1525| m1525_5(int) = Store[?] : &:r1525_4, r1525_1 +# 1525| m1525_6(int[2]) = Chi : total:m1516_5, partial:m1525_5 +# 1526| r1526_1(glval) = VariableAddress[rx1] : +# 1526| r1526_2(glval) = VariableAddress[x1] : +# 1526| r1526_3(int &) = Load[x1] : &:r1526_2, m1524_9 +# 1526| r1526_4(glval) = CopyValue : r1526_3 +# 1526| r1526_5(int &) = CopyValue : r1526_4 +# 1526| m1526_6(int &) = Store[rx1] : &:r1526_1, r1526_5 +# 1527| r1527_1(glval) = VariableAddress[x] : +# 1527| r1527_2(glval) = VariableAddress[x1] : +# 1527| r1527_3(int &) = Load[x1] : &:r1527_2, m1524_9 +# 1527| r1527_4(int) = Load[?] : &:r1527_3, m1525_5 +# 1527| m1527_5(int) = Store[x] : &:r1527_1, r1527_4 +# 1529| v1529_1(void) = NoOp : +# 1511| v1511_5(void) = ReturnVoid : +# 1511| v1511_6(void) = AliasedUse : m1511_3 +# 1511| v1511_7(void) = ExitFunction : -# 1484| void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct() -# 1484| Block 0 -# 1484| v1484_1(void) = EnterFunction : -# 1484| m1484_2(unknown) = AliasedDefinition : -# 1484| m1484_3(unknown) = InitializeNonLocal : -# 1484| m1484_4(unknown) = Chi : total:m1484_2, partial:m1484_3 -# 1484| r1484_5(glval) = VariableAddress[#this] : -# 1484| m1484_6(glval) = InitializeParameter[#this] : &:r1484_5 -# 1484| r1484_7(glval) = Load[#this] : &:r1484_5, m1484_6 -# 1484| m1484_8(StructuredBindingDataMemberMemberStruct) = InitializeIndirection[#this] : &:r1484_7 -# 1484| v1484_9(void) = NoOp : -# 1484| v1484_10(void) = ReturnIndirection[#this] : &:r1484_7, m1484_8 -# 1484| v1484_11(void) = ReturnVoid : -# 1484| v1484_12(void) = AliasedUse : m1484_3 -# 1484| v1484_13(void) = ExitFunction : +# 1531| void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct() +# 1531| Block 0 +# 1531| v1531_1(void) = EnterFunction : +# 1531| m1531_2(unknown) = AliasedDefinition : +# 1531| m1531_3(unknown) = InitializeNonLocal : +# 1531| m1531_4(unknown) = Chi : total:m1531_2, partial:m1531_3 +# 1531| r1531_5(glval) = VariableAddress[#this] : +# 1531| m1531_6(glval) = InitializeParameter[#this] : &:r1531_5 +# 1531| r1531_7(glval) = Load[#this] : &:r1531_5, m1531_6 +# 1531| m1531_8(StructuredBindingDataMemberMemberStruct) = InitializeIndirection[#this] : &:r1531_7 +# 1531| v1531_9(void) = NoOp : +# 1531| v1531_10(void) = ReturnIndirection[#this] : &:r1531_7, m1531_8 +# 1531| v1531_11(void) = ReturnVoid : +# 1531| v1531_12(void) = AliasedUse : m1531_3 +# 1531| v1531_13(void) = ExitFunction : -# 1488| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() -# 1488| Block 0 -# 1488| v1488_1(void) = EnterFunction : -# 1488| m1488_2(unknown) = AliasedDefinition : -# 1488| m1488_3(unknown) = InitializeNonLocal : -# 1488| m1488_4(unknown) = Chi : total:m1488_2, partial:m1488_3 -# 1488| r1488_5(glval) = VariableAddress[#this] : -# 1488| m1488_6(glval) = InitializeParameter[#this] : &:r1488_5 -# 1488| r1488_7(glval) = Load[#this] : &:r1488_5, m1488_6 -# 1488| m1488_8(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1488_7 -# 1488| v1488_9(void) = NoOp : -# 1488| v1488_10(void) = ReturnIndirection[#this] : &:r1488_7, m1488_8 -# 1488| v1488_11(void) = ReturnVoid : -# 1488| v1488_12(void) = AliasedUse : m1488_3 -# 1488| v1488_13(void) = ExitFunction : +# 1535| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() +# 1535| Block 0 +# 1535| v1535_1(void) = EnterFunction : +# 1535| m1535_2(unknown) = AliasedDefinition : +# 1535| m1535_3(unknown) = InitializeNonLocal : +# 1535| m1535_4(unknown) = Chi : total:m1535_2, partial:m1535_3 +# 1535| r1535_5(glval) = VariableAddress[#this] : +# 1535| m1535_6(glval) = InitializeParameter[#this] : &:r1535_5 +# 1535| r1535_7(glval) = Load[#this] : &:r1535_5, m1535_6 +# 1535| m1535_8(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1535_7 +# 1535| v1535_9(void) = NoOp : +# 1535| v1535_10(void) = ReturnIndirection[#this] : &:r1535_7, m1535_8 +# 1535| v1535_11(void) = ReturnVoid : +# 1535| v1535_12(void) = AliasedUse : m1535_3 +# 1535| v1535_13(void) = ExitFunction : -# 1488| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct const&) -# 1488| Block 0 -# 1488| v1488_1(void) = EnterFunction : -# 1488| m1488_2(unknown) = AliasedDefinition : -# 1488| m1488_3(unknown) = InitializeNonLocal : -# 1488| m1488_4(unknown) = Chi : total:m1488_2, partial:m1488_3 -# 1488| r1488_5(glval) = VariableAddress[#this] : -# 1488| m1488_6(glval) = InitializeParameter[#this] : &:r1488_5 -# 1488| r1488_7(glval) = Load[#this] : &:r1488_5, m1488_6 -# 1488| m1488_8(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1488_7 +# 1535| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct const&) +# 1535| Block 0 +# 1535| v1535_1(void) = EnterFunction : +# 1535| m1535_2(unknown) = AliasedDefinition : +# 1535| m1535_3(unknown) = InitializeNonLocal : +# 1535| m1535_4(unknown) = Chi : total:m1535_2, partial:m1535_3 +# 1535| r1535_5(glval) = VariableAddress[#this] : +# 1535| m1535_6(glval) = InitializeParameter[#this] : &:r1535_5 +# 1535| r1535_7(glval) = Load[#this] : &:r1535_5, m1535_6 +# 1535| m1535_8(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1535_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(StructuredBindingDataMemberStruct &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1488| r1488_9(glval) = FieldAddress[i] : m1488_6 -# 1488| r1488_10(glval) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_11(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_10, m0_2 -# 1488| r1488_12(glval) = CopyValue : r1488_11 -# 1488| r1488_13(glval) = FieldAddress[i] : r1488_12 -# 1488| r1488_14(int) = Load[?] : &:r1488_13, ~m0_4 -# 1488| m1488_15(int) = Store[?] : &:r1488_9, r1488_14 -# 1488| m1488_16(unknown) = Chi : total:m1488_8, partial:m1488_15 -# 1488| r1488_17(glval) = FieldAddress[d] : m1488_6 -# 1488| r1488_18(glval) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_19(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_18, m0_2 -# 1488| r1488_20(glval) = CopyValue : r1488_19 -# 1488| r1488_21(glval) = FieldAddress[d] : r1488_20 -# 1488| r1488_22(double) = Load[?] : &:r1488_21, ~m0_4 -# 1488| m1488_23(double) = Store[?] : &:r1488_17, r1488_22 -# 1488| m1488_24(unknown) = Chi : total:m1488_16, partial:m1488_23 -# 1488| r1488_25(glval) = FieldAddress[b] : m1488_6 -# 1488| r1488_26(glval) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_27(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_26, m0_2 -# 1488| r1488_28(glval) = CopyValue : r1488_27 -# 1488| r1488_29(glval) = FieldAddress[b] : r1488_28 -# 1488| r1488_30(unsigned int) = Load[?] : &:r1488_29, ~m0_4 -# 1488| m1488_31(unsigned int) = Store[?] : &:r1488_25, r1488_30 -# 1488| m1488_32(unknown) = Chi : total:m1488_24, partial:m1488_31 -# 1488| r1488_33(glval) = FieldAddress[r] : m1488_6 -# 1488| r1488_34(glval) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_35(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_34, m0_2 -# 1488| r1488_36(glval) = CopyValue : r1488_35 -# 1488| r1488_37(glval) = FieldAddress[r] : r1488_36 -# 1488| r1488_38(int &) = Load[?] : &:r1488_37, ~m0_4 -# 1488| m1488_39(int &) = Store[?] : &:r1488_33, r1488_38 -# 1488| m1488_40(unknown) = Chi : total:m1488_32, partial:m1488_39 -# 1488| r1488_41(glval) = FieldAddress[p] : m1488_6 -# 1488| r1488_42(glval) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_43(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_42, m0_2 -# 1488| r1488_44(glval) = CopyValue : r1488_43 -# 1488| r1488_45(glval) = FieldAddress[p] : r1488_44 -# 1488| r1488_46(int *) = Load[?] : &:r1488_45, ~m0_4 -# 1488| m1488_47(int *) = Store[?] : &:r1488_41, r1488_46 -# 1488| m1488_48(unknown) = Chi : total:m1488_40, partial:m1488_47 -# 1488| r1488_49(glval) = FieldAddress[xs] : m1488_6 -# 1488| r1488_50(glval) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_51(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_50, m0_2 -# 1488| r1488_52(glval) = CopyValue : r1488_51 -# 1488| r1488_53(glval) = FieldAddress[xs] : r1488_52 -# 1488| r1488_54(int[2]) = Load[?] : &:r1488_53, ~m0_4 -# 1488| m1488_55(int[2]) = Store[?] : &:r1488_49, r1488_54 -# 1488| m1488_56(unknown) = Chi : total:m1488_48, partial:m1488_55 -# 1488| r1488_57(glval) = FieldAddress[r_alt] : m1488_6 -# 1488| r1488_58(glval) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_59(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_58, m0_2 -# 1488| r1488_60(glval) = CopyValue : r1488_59 -# 1488| r1488_61(glval) = FieldAddress[r_alt] : r1488_60 -# 1488| r1488_62(int &) = Load[?] : &:r1488_61, ~m0_4 -# 1488| m1488_63(int &) = Store[?] : &:r1488_57, r1488_62 -# 1488| m1488_64(unknown) = Chi : total:m1488_56, partial:m1488_63 -# 1488| r1488_65(glval) = FieldAddress[m] : m1488_6 -# 1488| r1488_66(glval) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_67(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_66, m0_2 -# 1488| r1488_68(glval) = CopyValue : r1488_67 -# 1488| r1488_69(glval) = FieldAddress[m] : r1488_68 -# 1488| r1488_70(StructuredBindingDataMemberMemberStruct) = Load[?] : &:r1488_69, ~m0_4 -# 1488| m1488_71(StructuredBindingDataMemberMemberStruct) = Store[?] : &:r1488_65, r1488_70 -# 1488| m1488_72(unknown) = Chi : total:m1488_64, partial:m1488_71 -# 1488| v1488_73(void) = NoOp : -# 1488| v1488_74(void) = ReturnIndirection[#this] : &:r1488_7, m1488_72 +# 1535| r1535_9(glval) = FieldAddress[i] : m1535_6 +# 1535| r1535_10(glval) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_11(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_10, m0_2 +# 1535| r1535_12(glval) = CopyValue : r1535_11 +# 1535| r1535_13(glval) = FieldAddress[i] : r1535_12 +# 1535| r1535_14(int) = Load[?] : &:r1535_13, ~m0_4 +# 1535| m1535_15(int) = Store[?] : &:r1535_9, r1535_14 +# 1535| m1535_16(unknown) = Chi : total:m1535_8, partial:m1535_15 +# 1535| r1535_17(glval) = FieldAddress[d] : m1535_6 +# 1535| r1535_18(glval) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_19(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_18, m0_2 +# 1535| r1535_20(glval) = CopyValue : r1535_19 +# 1535| r1535_21(glval) = FieldAddress[d] : r1535_20 +# 1535| r1535_22(double) = Load[?] : &:r1535_21, ~m0_4 +# 1535| m1535_23(double) = Store[?] : &:r1535_17, r1535_22 +# 1535| m1535_24(unknown) = Chi : total:m1535_16, partial:m1535_23 +# 1535| r1535_25(glval) = FieldAddress[b] : m1535_6 +# 1535| r1535_26(glval) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_27(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_26, m0_2 +# 1535| r1535_28(glval) = CopyValue : r1535_27 +# 1535| r1535_29(glval) = FieldAddress[b] : r1535_28 +# 1535| r1535_30(unsigned int) = Load[?] : &:r1535_29, ~m0_4 +# 1535| m1535_31(unsigned int) = Store[?] : &:r1535_25, r1535_30 +# 1535| m1535_32(unknown) = Chi : total:m1535_24, partial:m1535_31 +# 1535| r1535_33(glval) = FieldAddress[r] : m1535_6 +# 1535| r1535_34(glval) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_35(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_34, m0_2 +# 1535| r1535_36(glval) = CopyValue : r1535_35 +# 1535| r1535_37(glval) = FieldAddress[r] : r1535_36 +# 1535| r1535_38(int &) = Load[?] : &:r1535_37, ~m0_4 +# 1535| m1535_39(int &) = Store[?] : &:r1535_33, r1535_38 +# 1535| m1535_40(unknown) = Chi : total:m1535_32, partial:m1535_39 +# 1535| r1535_41(glval) = FieldAddress[p] : m1535_6 +# 1535| r1535_42(glval) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_43(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_42, m0_2 +# 1535| r1535_44(glval) = CopyValue : r1535_43 +# 1535| r1535_45(glval) = FieldAddress[p] : r1535_44 +# 1535| r1535_46(int *) = Load[?] : &:r1535_45, ~m0_4 +# 1535| m1535_47(int *) = Store[?] : &:r1535_41, r1535_46 +# 1535| m1535_48(unknown) = Chi : total:m1535_40, partial:m1535_47 +# 1535| r1535_49(glval) = FieldAddress[xs] : m1535_6 +# 1535| r1535_50(glval) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_51(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_50, m0_2 +# 1535| r1535_52(glval) = CopyValue : r1535_51 +# 1535| r1535_53(glval) = FieldAddress[xs] : r1535_52 +# 1535| r1535_54(int[2]) = Load[?] : &:r1535_53, ~m0_4 +# 1535| m1535_55(int[2]) = Store[?] : &:r1535_49, r1535_54 +# 1535| m1535_56(unknown) = Chi : total:m1535_48, partial:m1535_55 +# 1535| r1535_57(glval) = FieldAddress[r_alt] : m1535_6 +# 1535| r1535_58(glval) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_59(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_58, m0_2 +# 1535| r1535_60(glval) = CopyValue : r1535_59 +# 1535| r1535_61(glval) = FieldAddress[r_alt] : r1535_60 +# 1535| r1535_62(int &) = Load[?] : &:r1535_61, ~m0_4 +# 1535| m1535_63(int &) = Store[?] : &:r1535_57, r1535_62 +# 1535| m1535_64(unknown) = Chi : total:m1535_56, partial:m1535_63 +# 1535| r1535_65(glval) = FieldAddress[m] : m1535_6 +# 1535| r1535_66(glval) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_67(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_66, m0_2 +# 1535| r1535_68(glval) = CopyValue : r1535_67 +# 1535| r1535_69(glval) = FieldAddress[m] : r1535_68 +# 1535| r1535_70(StructuredBindingDataMemberMemberStruct) = Load[?] : &:r1535_69, ~m0_4 +# 1535| m1535_71(StructuredBindingDataMemberMemberStruct) = Store[?] : &:r1535_65, r1535_70 +# 1535| m1535_72(unknown) = Chi : total:m1535_64, partial:m1535_71 +# 1535| v1535_73(void) = NoOp : +# 1535| v1535_74(void) = ReturnIndirection[#this] : &:r1535_7, m1535_72 #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 1488| v1488_75(void) = ReturnVoid : -# 1488| v1488_76(void) = AliasedUse : m1488_3 -# 1488| v1488_77(void) = ExitFunction : +# 1535| v1535_75(void) = ReturnVoid : +# 1535| v1535_76(void) = AliasedUse : m1535_3 +# 1535| v1535_77(void) = ExitFunction : -# 1501| void data_member_structured_binding() -# 1501| Block 0 -# 1501| v1501_1(void) = EnterFunction : -# 1501| m1501_2(unknown) = AliasedDefinition : -# 1501| m1501_3(unknown) = InitializeNonLocal : -# 1501| m1501_4(unknown) = Chi : total:m1501_2, partial:m1501_3 -# 1502| r1502_1(glval) = VariableAddress[s] : -# 1502| m1502_2(StructuredBindingDataMemberStruct) = Uninitialized[s] : &:r1502_1 -# 1502| r1502_3(glval) = FunctionAddress[StructuredBindingDataMemberStruct] : -# 1502| v1502_4(void) = Call[StructuredBindingDataMemberStruct] : func:r1502_3, this:r1502_1 -# 1502| m1502_5(unknown) = ^CallSideEffect : ~m1501_4 -# 1502| m1502_6(unknown) = Chi : total:m1501_4, partial:m1502_5 -# 1502| m1502_7(StructuredBindingDataMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1502_1 -# 1502| m1502_8(StructuredBindingDataMemberStruct) = Chi : total:m1502_2, partial:m1502_7 -# 1505| r1505_1(glval) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_2(glval) = VariableAddress[s] : -# 1505| r1505_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1505_2, m1502_8 -# 1505| m1505_4(StructuredBindingDataMemberStruct) = Store[(unnamed local variable)] : &:r1505_1, r1505_3 -# 1505| r1505_5(glval) = VariableAddress[i] : -# 1505| r1505_6(glval) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_7(glval) = FieldAddress[i] : r1505_6 -# 1505| m1505_8(int &) = Store[i] : &:r1505_5, r1505_7 -# 1505| r1505_9(glval) = VariableAddress[d] : -# 1505| r1505_10(glval) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_11(glval) = FieldAddress[d] : r1505_10 -# 1505| m1505_12(double &) = Store[d] : &:r1505_9, r1505_11 -# 1505| r1505_13(glval) = VariableAddress[b] : -# 1505| r1505_14(glval) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_15(glval) = FieldAddress[b] : r1505_14 -# 1505| m1505_16(unsigned int &) = Store[b] : &:r1505_13, r1505_15 -# 1505| r1505_17(glval) = VariableAddress[r] : -# 1505| r1505_18(glval) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_19(glval) = FieldAddress[r] : r1505_18 -# 1505| r1505_20(int &) = Load[?] : &:r1505_19, ~m1505_4 -# 1505| r1505_21(glval) = CopyValue : r1505_20 -# 1505| m1505_22(int &) = Store[r] : &:r1505_17, r1505_21 -# 1505| r1505_23(glval) = VariableAddress[p] : -# 1505| r1505_24(glval) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_25(glval) = FieldAddress[p] : r1505_24 -# 1505| m1505_26(int *&) = Store[p] : &:r1505_23, r1505_25 -# 1505| r1505_27(glval) = VariableAddress[xs] : -# 1505| r1505_28(glval) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_29(glval) = FieldAddress[xs] : r1505_28 -# 1505| m1505_30(int(&)[2]) = Store[xs] : &:r1505_27, r1505_29 -# 1505| r1505_31(glval) = VariableAddress[r_alt] : -# 1505| r1505_32(glval) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_33(glval) = FieldAddress[r_alt] : r1505_32 -# 1505| r1505_34(int &) = Load[?] : &:r1505_33, ~m1505_4 -# 1505| r1505_35(glval) = CopyValue : r1505_34 -# 1505| m1505_36(int &) = Store[r_alt] : &:r1505_31, r1505_35 -# 1505| r1505_37(glval) = VariableAddress[m] : -# 1505| r1505_38(glval) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_39(glval) = FieldAddress[m] : r1505_38 -# 1505| m1505_40(StructuredBindingDataMemberMemberStruct &) = Store[m] : &:r1505_37, r1505_39 -# 1506| r1506_1(double) = Constant[4.0] : -# 1506| r1506_2(glval) = VariableAddress[d] : -# 1506| r1506_3(double &) = Load[d] : &:r1506_2, m1505_12 -# 1506| m1506_4(double) = Store[?] : &:r1506_3, r1506_1 -# 1506| m1506_5(StructuredBindingDataMemberStruct) = Chi : total:m1505_4, partial:m1506_4 -# 1507| r1507_1(glval) = VariableAddress[rd] : -# 1507| r1507_2(glval) = VariableAddress[d] : -# 1507| r1507_3(double &) = Load[d] : &:r1507_2, m1505_12 -# 1507| r1507_4(double &) = CopyValue : r1507_3 -# 1507| m1507_5(double &) = Store[rd] : &:r1507_1, r1507_4 -# 1508| r1508_1(glval) = VariableAddress[v] : -# 1508| r1508_2(glval) = VariableAddress[i] : -# 1508| r1508_3(int &) = Load[i] : &:r1508_2, m1505_8 -# 1508| r1508_4(int) = Load[?] : &:r1508_3, ~m1505_4 -# 1508| m1508_5(int) = Store[v] : &:r1508_1, r1508_4 -# 1509| r1509_1(int) = Constant[5] : -# 1509| r1509_2(glval) = VariableAddress[r] : -# 1509| r1509_3(int &) = Load[r] : &:r1509_2, m1505_22 -# 1509| m1509_4(int) = Store[?] : &:r1509_3, r1509_1 -# 1509| m1509_5(unknown) = Chi : total:m1502_6, partial:m1509_4 -# 1510| r1510_1(int) = Constant[6] : -# 1510| r1510_2(glval) = VariableAddress[p] : -# 1510| r1510_3(int *&) = Load[p] : &:r1510_2, m1505_26 -# 1510| r1510_4(int *) = Load[?] : &:r1510_3, ~m1505_4 -# 1510| r1510_5(glval) = CopyValue : r1510_4 -# 1510| m1510_6(int) = Store[?] : &:r1510_5, r1510_1 -# 1510| m1510_7(unknown) = Chi : total:m1509_5, partial:m1510_6 -# 1511| r1511_1(glval) = VariableAddress[rr] : -# 1511| r1511_2(glval) = VariableAddress[r] : -# 1511| r1511_3(int &) = Load[r] : &:r1511_2, m1505_22 -# 1511| r1511_4(int &) = CopyValue : r1511_3 -# 1511| m1511_5(int &) = Store[rr] : &:r1511_1, r1511_4 -# 1512| r1512_1(glval) = VariableAddress[pr] : -# 1512| r1512_2(glval) = VariableAddress[r] : -# 1512| r1512_3(int &) = Load[r] : &:r1512_2, m1505_22 -# 1512| r1512_4(int *) = CopyValue : r1512_3 -# 1512| m1512_5(int *) = Store[pr] : &:r1512_1, r1512_4 -# 1513| r1513_1(glval) = VariableAddress[w] : -# 1513| r1513_2(glval) = VariableAddress[r] : -# 1513| r1513_3(int &) = Load[r] : &:r1513_2, m1505_22 -# 1513| r1513_4(int) = Load[?] : &:r1513_3, ~m1510_7 -# 1513| m1513_5(int) = Store[w] : &:r1513_1, r1513_4 -# 1517| r1517_1(glval) = VariableAddress[unnamed_local_variable] : -# 1517| r1517_2(glval) = VariableAddress[s] : -# 1517| r1517_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1517_2, m1502_8 -# 1517| m1517_4(StructuredBindingDataMemberStruct) = Store[unnamed_local_variable] : &:r1517_1, r1517_3 -# 1518| r1518_1(glval) = VariableAddress[i] : -# 1518| r1518_2(glval) = VariableAddress[unnamed_local_variable] : -# 1518| r1518_3(glval) = FieldAddress[i] : r1518_2 -# 1518| r1518_4(int &) = CopyValue : r1518_3 -# 1518| m1518_5(int &) = Store[i] : &:r1518_1, r1518_4 -# 1519| r1519_1(glval) = VariableAddress[d] : -# 1519| r1519_2(glval) = VariableAddress[unnamed_local_variable] : -# 1519| r1519_3(glval) = FieldAddress[d] : r1519_2 -# 1519| r1519_4(double &) = CopyValue : r1519_3 -# 1519| m1519_5(double &) = Store[d] : &:r1519_1, r1519_4 -# 1521| r1521_1(glval) = VariableAddress[r] : -# 1521| r1521_2(glval) = VariableAddress[unnamed_local_variable] : -# 1521| r1521_3(glval) = FieldAddress[r] : r1521_2 -# 1521| r1521_4(int &) = Load[?] : &:r1521_3, ~m1517_4 -# 1521| r1521_5(glval) = CopyValue : r1521_4 -# 1521| r1521_6(int &) = CopyValue : r1521_5 -# 1521| m1521_7(int &) = Store[r] : &:r1521_1, r1521_6 -# 1522| r1522_1(glval) = VariableAddress[p] : -# 1522| r1522_2(glval) = VariableAddress[unnamed_local_variable] : -# 1522| r1522_3(glval) = FieldAddress[p] : r1522_2 -# 1522| r1522_4(int *&) = CopyValue : r1522_3 -# 1522| m1522_5(int *&) = Store[p] : &:r1522_1, r1522_4 -# 1523| r1523_1(double) = Constant[4.0] : -# 1523| r1523_2(glval) = VariableAddress[d] : -# 1523| r1523_3(double &) = Load[d] : &:r1523_2, m1519_5 -# 1523| r1523_4(glval) = CopyValue : r1523_3 -# 1523| m1523_5(double) = Store[?] : &:r1523_4, r1523_1 -# 1523| m1523_6(StructuredBindingDataMemberStruct) = Chi : total:m1517_4, partial:m1523_5 -# 1524| r1524_1(glval) = VariableAddress[rd] : -# 1524| r1524_2(glval) = VariableAddress[d] : -# 1524| r1524_3(double &) = Load[d] : &:r1524_2, m1519_5 -# 1524| r1524_4(glval) = CopyValue : r1524_3 -# 1524| r1524_5(double &) = CopyValue : r1524_4 -# 1524| m1524_6(double &) = Store[rd] : &:r1524_1, r1524_5 -# 1525| r1525_1(glval) = VariableAddress[v] : -# 1525| r1525_2(glval) = VariableAddress[i] : -# 1525| r1525_3(int &) = Load[i] : &:r1525_2, m1518_5 -# 1525| r1525_4(int) = Load[?] : &:r1525_3, ~m1517_4 -# 1525| m1525_5(int) = Store[v] : &:r1525_1, r1525_4 -# 1526| r1526_1(int) = Constant[5] : -# 1526| r1526_2(glval) = VariableAddress[r] : -# 1526| r1526_3(int &) = Load[r] : &:r1526_2, m1521_7 -# 1526| r1526_4(glval) = CopyValue : r1526_3 -# 1526| m1526_5(int) = Store[?] : &:r1526_4, r1526_1 -# 1526| m1526_6(unknown) = Chi : total:m1510_7, partial:m1526_5 -# 1527| r1527_1(int) = Constant[6] : -# 1527| r1527_2(glval) = VariableAddress[p] : -# 1527| r1527_3(int *&) = Load[p] : &:r1527_2, m1522_5 -# 1527| r1527_4(int *) = Load[?] : &:r1527_3, ~m1517_4 -# 1527| r1527_5(glval) = CopyValue : r1527_4 -# 1527| m1527_6(int) = Store[?] : &:r1527_5, r1527_1 -# 1527| m1527_7(unknown) = Chi : total:m1526_6, partial:m1527_6 -# 1528| r1528_1(glval) = VariableAddress[rr] : -# 1528| r1528_2(glval) = VariableAddress[r] : -# 1528| r1528_3(int &) = Load[r] : &:r1528_2, m1521_7 -# 1528| r1528_4(glval) = CopyValue : r1528_3 -# 1528| r1528_5(int &) = CopyValue : r1528_4 -# 1528| m1528_6(int &) = Store[rr] : &:r1528_1, r1528_5 -# 1529| r1529_1(glval) = VariableAddress[pr] : -# 1529| r1529_2(glval) = VariableAddress[r] : -# 1529| r1529_3(int &) = Load[r] : &:r1529_2, m1521_7 -# 1529| r1529_4(glval) = CopyValue : r1529_3 -# 1529| r1529_5(int *) = CopyValue : r1529_4 -# 1529| m1529_6(int *) = Store[pr] : &:r1529_1, r1529_5 -# 1530| r1530_1(glval) = VariableAddress[w] : -# 1530| r1530_2(glval) = VariableAddress[r] : -# 1530| r1530_3(int &) = Load[r] : &:r1530_2, m1521_7 -# 1530| r1530_4(int) = Load[?] : &:r1530_3, ~m1527_7 -# 1530| m1530_5(int) = Store[w] : &:r1530_1, r1530_4 -# 1532| v1532_1(void) = NoOp : -# 1501| v1501_5(void) = ReturnVoid : -# 1501| v1501_6(void) = AliasedUse : ~m1527_7 -# 1501| v1501_7(void) = ExitFunction : +# 1548| void data_member_structured_binding() +# 1548| Block 0 +# 1548| v1548_1(void) = EnterFunction : +# 1548| m1548_2(unknown) = AliasedDefinition : +# 1548| m1548_3(unknown) = InitializeNonLocal : +# 1548| m1548_4(unknown) = Chi : total:m1548_2, partial:m1548_3 +# 1549| r1549_1(glval) = VariableAddress[s] : +# 1549| m1549_2(StructuredBindingDataMemberStruct) = Uninitialized[s] : &:r1549_1 +# 1549| r1549_3(glval) = FunctionAddress[StructuredBindingDataMemberStruct] : +# 1549| v1549_4(void) = Call[StructuredBindingDataMemberStruct] : func:r1549_3, this:r1549_1 +# 1549| m1549_5(unknown) = ^CallSideEffect : ~m1548_4 +# 1549| m1549_6(unknown) = Chi : total:m1548_4, partial:m1549_5 +# 1549| m1549_7(StructuredBindingDataMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1549_1 +# 1549| m1549_8(StructuredBindingDataMemberStruct) = Chi : total:m1549_2, partial:m1549_7 +# 1552| r1552_1(glval) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_2(glval) = VariableAddress[s] : +# 1552| r1552_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1552_2, m1549_8 +# 1552| m1552_4(StructuredBindingDataMemberStruct) = Store[(unnamed local variable)] : &:r1552_1, r1552_3 +# 1552| r1552_5(glval) = VariableAddress[i] : +# 1552| r1552_6(glval) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_7(glval) = FieldAddress[i] : r1552_6 +# 1552| m1552_8(int &) = Store[i] : &:r1552_5, r1552_7 +# 1552| r1552_9(glval) = VariableAddress[d] : +# 1552| r1552_10(glval) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_11(glval) = FieldAddress[d] : r1552_10 +# 1552| m1552_12(double &) = Store[d] : &:r1552_9, r1552_11 +# 1552| r1552_13(glval) = VariableAddress[b] : +# 1552| r1552_14(glval) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_15(glval) = FieldAddress[b] : r1552_14 +# 1552| m1552_16(unsigned int &) = Store[b] : &:r1552_13, r1552_15 +# 1552| r1552_17(glval) = VariableAddress[r] : +# 1552| r1552_18(glval) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_19(glval) = FieldAddress[r] : r1552_18 +# 1552| r1552_20(int &) = Load[?] : &:r1552_19, ~m1552_4 +# 1552| r1552_21(glval) = CopyValue : r1552_20 +# 1552| m1552_22(int &) = Store[r] : &:r1552_17, r1552_21 +# 1552| r1552_23(glval) = VariableAddress[p] : +# 1552| r1552_24(glval) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_25(glval) = FieldAddress[p] : r1552_24 +# 1552| m1552_26(int *&) = Store[p] : &:r1552_23, r1552_25 +# 1552| r1552_27(glval) = VariableAddress[xs] : +# 1552| r1552_28(glval) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_29(glval) = FieldAddress[xs] : r1552_28 +# 1552| m1552_30(int(&)[2]) = Store[xs] : &:r1552_27, r1552_29 +# 1552| r1552_31(glval) = VariableAddress[r_alt] : +# 1552| r1552_32(glval) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_33(glval) = FieldAddress[r_alt] : r1552_32 +# 1552| r1552_34(int &) = Load[?] : &:r1552_33, ~m1552_4 +# 1552| r1552_35(glval) = CopyValue : r1552_34 +# 1552| m1552_36(int &) = Store[r_alt] : &:r1552_31, r1552_35 +# 1552| r1552_37(glval) = VariableAddress[m] : +# 1552| r1552_38(glval) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_39(glval) = FieldAddress[m] : r1552_38 +# 1552| m1552_40(StructuredBindingDataMemberMemberStruct &) = Store[m] : &:r1552_37, r1552_39 +# 1553| r1553_1(double) = Constant[4.0] : +# 1553| r1553_2(glval) = VariableAddress[d] : +# 1553| r1553_3(double &) = Load[d] : &:r1553_2, m1552_12 +# 1553| m1553_4(double) = Store[?] : &:r1553_3, r1553_1 +# 1553| m1553_5(StructuredBindingDataMemberStruct) = Chi : total:m1552_4, partial:m1553_4 +# 1554| r1554_1(glval) = VariableAddress[rd] : +# 1554| r1554_2(glval) = VariableAddress[d] : +# 1554| r1554_3(double &) = Load[d] : &:r1554_2, m1552_12 +# 1554| r1554_4(double &) = CopyValue : r1554_3 +# 1554| m1554_5(double &) = Store[rd] : &:r1554_1, r1554_4 +# 1555| r1555_1(glval) = VariableAddress[v] : +# 1555| r1555_2(glval) = VariableAddress[i] : +# 1555| r1555_3(int &) = Load[i] : &:r1555_2, m1552_8 +# 1555| r1555_4(int) = Load[?] : &:r1555_3, ~m1552_4 +# 1555| m1555_5(int) = Store[v] : &:r1555_1, r1555_4 +# 1556| r1556_1(int) = Constant[5] : +# 1556| r1556_2(glval) = VariableAddress[r] : +# 1556| r1556_3(int &) = Load[r] : &:r1556_2, m1552_22 +# 1556| m1556_4(int) = Store[?] : &:r1556_3, r1556_1 +# 1556| m1556_5(unknown) = Chi : total:m1549_6, partial:m1556_4 +# 1557| r1557_1(int) = Constant[6] : +# 1557| r1557_2(glval) = VariableAddress[p] : +# 1557| r1557_3(int *&) = Load[p] : &:r1557_2, m1552_26 +# 1557| r1557_4(int *) = Load[?] : &:r1557_3, ~m1552_4 +# 1557| r1557_5(glval) = CopyValue : r1557_4 +# 1557| m1557_6(int) = Store[?] : &:r1557_5, r1557_1 +# 1557| m1557_7(unknown) = Chi : total:m1556_5, partial:m1557_6 +# 1558| r1558_1(glval) = VariableAddress[rr] : +# 1558| r1558_2(glval) = VariableAddress[r] : +# 1558| r1558_3(int &) = Load[r] : &:r1558_2, m1552_22 +# 1558| r1558_4(int &) = CopyValue : r1558_3 +# 1558| m1558_5(int &) = Store[rr] : &:r1558_1, r1558_4 +# 1559| r1559_1(glval) = VariableAddress[pr] : +# 1559| r1559_2(glval) = VariableAddress[r] : +# 1559| r1559_3(int &) = Load[r] : &:r1559_2, m1552_22 +# 1559| r1559_4(int *) = CopyValue : r1559_3 +# 1559| m1559_5(int *) = Store[pr] : &:r1559_1, r1559_4 +# 1560| r1560_1(glval) = VariableAddress[w] : +# 1560| r1560_2(glval) = VariableAddress[r] : +# 1560| r1560_3(int &) = Load[r] : &:r1560_2, m1552_22 +# 1560| r1560_4(int) = Load[?] : &:r1560_3, ~m1557_7 +# 1560| m1560_5(int) = Store[w] : &:r1560_1, r1560_4 +# 1564| r1564_1(glval) = VariableAddress[unnamed_local_variable] : +# 1564| r1564_2(glval) = VariableAddress[s] : +# 1564| r1564_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1564_2, m1549_8 +# 1564| m1564_4(StructuredBindingDataMemberStruct) = Store[unnamed_local_variable] : &:r1564_1, r1564_3 +# 1565| r1565_1(glval) = VariableAddress[i] : +# 1565| r1565_2(glval) = VariableAddress[unnamed_local_variable] : +# 1565| r1565_3(glval) = FieldAddress[i] : r1565_2 +# 1565| r1565_4(int &) = CopyValue : r1565_3 +# 1565| m1565_5(int &) = Store[i] : &:r1565_1, r1565_4 +# 1566| r1566_1(glval) = VariableAddress[d] : +# 1566| r1566_2(glval) = VariableAddress[unnamed_local_variable] : +# 1566| r1566_3(glval) = FieldAddress[d] : r1566_2 +# 1566| r1566_4(double &) = CopyValue : r1566_3 +# 1566| m1566_5(double &) = Store[d] : &:r1566_1, r1566_4 +# 1568| r1568_1(glval) = VariableAddress[r] : +# 1568| r1568_2(glval) = VariableAddress[unnamed_local_variable] : +# 1568| r1568_3(glval) = FieldAddress[r] : r1568_2 +# 1568| r1568_4(int &) = Load[?] : &:r1568_3, ~m1564_4 +# 1568| r1568_5(glval) = CopyValue : r1568_4 +# 1568| r1568_6(int &) = CopyValue : r1568_5 +# 1568| m1568_7(int &) = Store[r] : &:r1568_1, r1568_6 +# 1569| r1569_1(glval) = VariableAddress[p] : +# 1569| r1569_2(glval) = VariableAddress[unnamed_local_variable] : +# 1569| r1569_3(glval) = FieldAddress[p] : r1569_2 +# 1569| r1569_4(int *&) = CopyValue : r1569_3 +# 1569| m1569_5(int *&) = Store[p] : &:r1569_1, r1569_4 +# 1570| r1570_1(double) = Constant[4.0] : +# 1570| r1570_2(glval) = VariableAddress[d] : +# 1570| r1570_3(double &) = Load[d] : &:r1570_2, m1566_5 +# 1570| r1570_4(glval) = CopyValue : r1570_3 +# 1570| m1570_5(double) = Store[?] : &:r1570_4, r1570_1 +# 1570| m1570_6(StructuredBindingDataMemberStruct) = Chi : total:m1564_4, partial:m1570_5 +# 1571| r1571_1(glval) = VariableAddress[rd] : +# 1571| r1571_2(glval) = VariableAddress[d] : +# 1571| r1571_3(double &) = Load[d] : &:r1571_2, m1566_5 +# 1571| r1571_4(glval) = CopyValue : r1571_3 +# 1571| r1571_5(double &) = CopyValue : r1571_4 +# 1571| m1571_6(double &) = Store[rd] : &:r1571_1, r1571_5 +# 1572| r1572_1(glval) = VariableAddress[v] : +# 1572| r1572_2(glval) = VariableAddress[i] : +# 1572| r1572_3(int &) = Load[i] : &:r1572_2, m1565_5 +# 1572| r1572_4(int) = Load[?] : &:r1572_3, ~m1564_4 +# 1572| m1572_5(int) = Store[v] : &:r1572_1, r1572_4 +# 1573| r1573_1(int) = Constant[5] : +# 1573| r1573_2(glval) = VariableAddress[r] : +# 1573| r1573_3(int &) = Load[r] : &:r1573_2, m1568_7 +# 1573| r1573_4(glval) = CopyValue : r1573_3 +# 1573| m1573_5(int) = Store[?] : &:r1573_4, r1573_1 +# 1573| m1573_6(unknown) = Chi : total:m1557_7, partial:m1573_5 +# 1574| r1574_1(int) = Constant[6] : +# 1574| r1574_2(glval) = VariableAddress[p] : +# 1574| r1574_3(int *&) = Load[p] : &:r1574_2, m1569_5 +# 1574| r1574_4(int *) = Load[?] : &:r1574_3, ~m1564_4 +# 1574| r1574_5(glval) = CopyValue : r1574_4 +# 1574| m1574_6(int) = Store[?] : &:r1574_5, r1574_1 +# 1574| m1574_7(unknown) = Chi : total:m1573_6, partial:m1574_6 +# 1575| r1575_1(glval) = VariableAddress[rr] : +# 1575| r1575_2(glval) = VariableAddress[r] : +# 1575| r1575_3(int &) = Load[r] : &:r1575_2, m1568_7 +# 1575| r1575_4(glval) = CopyValue : r1575_3 +# 1575| r1575_5(int &) = CopyValue : r1575_4 +# 1575| m1575_6(int &) = Store[rr] : &:r1575_1, r1575_5 +# 1576| r1576_1(glval) = VariableAddress[pr] : +# 1576| r1576_2(glval) = VariableAddress[r] : +# 1576| r1576_3(int &) = Load[r] : &:r1576_2, m1568_7 +# 1576| r1576_4(glval) = CopyValue : r1576_3 +# 1576| r1576_5(int *) = CopyValue : r1576_4 +# 1576| m1576_6(int *) = Store[pr] : &:r1576_1, r1576_5 +# 1577| r1577_1(glval) = VariableAddress[w] : +# 1577| r1577_2(glval) = VariableAddress[r] : +# 1577| r1577_3(int &) = Load[r] : &:r1577_2, m1568_7 +# 1577| r1577_4(int) = Load[?] : &:r1577_3, ~m1574_7 +# 1577| m1577_5(int) = Store[w] : &:r1577_1, r1577_4 +# 1579| v1579_1(void) = NoOp : +# 1548| v1548_5(void) = ReturnVoid : +# 1548| v1548_6(void) = AliasedUse : ~m1574_7 +# 1548| v1548_7(void) = ExitFunction : -# 1541| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet() -# 1541| Block 0 -# 1541| v1541_1(void) = EnterFunction : -# 1541| m1541_2(unknown) = AliasedDefinition : -# 1541| m1541_3(unknown) = InitializeNonLocal : -# 1541| m1541_4(unknown) = Chi : total:m1541_2, partial:m1541_3 -# 1541| r1541_5(glval) = VariableAddress[#this] : -# 1541| m1541_6(glval) = InitializeParameter[#this] : &:r1541_5 -# 1541| r1541_7(glval) = Load[#this] : &:r1541_5, m1541_6 -# 1541| m1541_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1541_7 -# 1541| v1541_9(void) = NoOp : -# 1541| v1541_10(void) = ReturnIndirection[#this] : &:r1541_7, m1541_8 -# 1541| v1541_11(void) = ReturnVoid : -# 1541| v1541_12(void) = AliasedUse : m1541_3 -# 1541| v1541_13(void) = ExitFunction : +# 1588| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet() +# 1588| Block 0 +# 1588| v1588_1(void) = EnterFunction : +# 1588| m1588_2(unknown) = AliasedDefinition : +# 1588| m1588_3(unknown) = InitializeNonLocal : +# 1588| m1588_4(unknown) = Chi : total:m1588_2, partial:m1588_3 +# 1588| r1588_5(glval) = VariableAddress[#this] : +# 1588| m1588_6(glval) = InitializeParameter[#this] : &:r1588_5 +# 1588| r1588_7(glval) = Load[#this] : &:r1588_5, m1588_6 +# 1588| m1588_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1588_7 +# 1588| v1588_9(void) = NoOp : +# 1588| v1588_10(void) = ReturnIndirection[#this] : &:r1588_7, m1588_8 +# 1588| v1588_11(void) = ReturnVoid : +# 1588| v1588_12(void) = AliasedUse : m1588_3 +# 1588| v1588_13(void) = ExitFunction : -# 1541| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet const&) -# 1541| Block 0 -# 1541| v1541_1(void) = EnterFunction : -# 1541| m1541_2(unknown) = AliasedDefinition : -# 1541| m1541_3(unknown) = InitializeNonLocal : -# 1541| m1541_4(unknown) = Chi : total:m1541_2, partial:m1541_3 -# 1541| r1541_5(glval) = VariableAddress[#this] : -# 1541| m1541_6(glval) = InitializeParameter[#this] : &:r1541_5 -# 1541| r1541_7(glval) = Load[#this] : &:r1541_5, m1541_6 -# 1541| m1541_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1541_7 +# 1588| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet const&) +# 1588| Block 0 +# 1588| v1588_1(void) = EnterFunction : +# 1588| m1588_2(unknown) = AliasedDefinition : +# 1588| m1588_3(unknown) = InitializeNonLocal : +# 1588| m1588_4(unknown) = Chi : total:m1588_2, partial:m1588_3 +# 1588| r1588_5(glval) = VariableAddress[#this] : +# 1588| m1588_6(glval) = InitializeParameter[#this] : &:r1588_5 +# 1588| r1588_7(glval) = Load[#this] : &:r1588_5, m1588_6 +# 1588| m1588_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1588_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(StructuredBindingTupleRefGet &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1541| r1541_9(glval) = FieldAddress[i] : m1541_6 -# 1541| r1541_10(glval) = VariableAddress[(unnamed parameter 0)] : -# 1541| r1541_11(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_10, m0_2 -# 1541| r1541_12(glval) = CopyValue : r1541_11 -# 1541| r1541_13(glval) = FieldAddress[i] : r1541_12 -# 1541| r1541_14(int) = Load[?] : &:r1541_13, ~m0_4 -# 1541| m1541_15(int) = Store[?] : &:r1541_9, r1541_14 -# 1541| m1541_16(unknown) = Chi : total:m1541_8, partial:m1541_15 -# 1541| r1541_17(glval) = FieldAddress[d] : m1541_6 -# 1541| r1541_18(glval) = VariableAddress[(unnamed parameter 0)] : -# 1541| r1541_19(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_18, m0_2 -# 1541| r1541_20(glval) = CopyValue : r1541_19 -# 1541| r1541_21(glval) = FieldAddress[d] : r1541_20 -# 1541| r1541_22(double) = Load[?] : &:r1541_21, ~m0_4 -# 1541| m1541_23(double) = Store[?] : &:r1541_17, r1541_22 -# 1541| m1541_24(unknown) = Chi : total:m1541_16, partial:m1541_23 -# 1541| r1541_25(glval) = FieldAddress[r] : m1541_6 -# 1541| r1541_26(glval) = VariableAddress[(unnamed parameter 0)] : -# 1541| r1541_27(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_26, m0_2 -# 1541| r1541_28(glval) = CopyValue : r1541_27 -# 1541| r1541_29(glval) = FieldAddress[r] : r1541_28 -# 1541| r1541_30(int &) = Load[?] : &:r1541_29, ~m0_4 -# 1541| m1541_31(int &) = Store[?] : &:r1541_25, r1541_30 -# 1541| m1541_32(unknown) = Chi : total:m1541_24, partial:m1541_31 -# 1541| v1541_33(void) = NoOp : -# 1541| v1541_34(void) = ReturnIndirection[#this] : &:r1541_7, m1541_32 +# 1588| r1588_9(glval) = FieldAddress[i] : m1588_6 +# 1588| r1588_10(glval) = VariableAddress[(unnamed parameter 0)] : +# 1588| r1588_11(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1588_10, m0_2 +# 1588| r1588_12(glval) = CopyValue : r1588_11 +# 1588| r1588_13(glval) = FieldAddress[i] : r1588_12 +# 1588| r1588_14(int) = Load[?] : &:r1588_13, ~m0_4 +# 1588| m1588_15(int) = Store[?] : &:r1588_9, r1588_14 +# 1588| m1588_16(unknown) = Chi : total:m1588_8, partial:m1588_15 +# 1588| r1588_17(glval) = FieldAddress[d] : m1588_6 +# 1588| r1588_18(glval) = VariableAddress[(unnamed parameter 0)] : +# 1588| r1588_19(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1588_18, m0_2 +# 1588| r1588_20(glval) = CopyValue : r1588_19 +# 1588| r1588_21(glval) = FieldAddress[d] : r1588_20 +# 1588| r1588_22(double) = Load[?] : &:r1588_21, ~m0_4 +# 1588| m1588_23(double) = Store[?] : &:r1588_17, r1588_22 +# 1588| m1588_24(unknown) = Chi : total:m1588_16, partial:m1588_23 +# 1588| r1588_25(glval) = FieldAddress[r] : m1588_6 +# 1588| r1588_26(glval) = VariableAddress[(unnamed parameter 0)] : +# 1588| r1588_27(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1588_26, m0_2 +# 1588| r1588_28(glval) = CopyValue : r1588_27 +# 1588| r1588_29(glval) = FieldAddress[r] : r1588_28 +# 1588| r1588_30(int &) = Load[?] : &:r1588_29, ~m0_4 +# 1588| m1588_31(int &) = Store[?] : &:r1588_25, r1588_30 +# 1588| m1588_32(unknown) = Chi : total:m1588_24, partial:m1588_31 +# 1588| v1588_33(void) = NoOp : +# 1588| v1588_34(void) = ReturnIndirection[#this] : &:r1588_7, m1588_32 #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 1541| v1541_35(void) = ReturnVoid : -# 1541| v1541_36(void) = AliasedUse : m1541_3 -# 1541| v1541_37(void) = ExitFunction : +# 1588| v1588_35(void) = ReturnVoid : +# 1588| v1588_36(void) = AliasedUse : m1588_3 +# 1588| v1588_37(void) = ExitFunction : -# 1569| std::tuple_element::type& StructuredBindingTupleRefGet::get() -# 1569| Block 0 -# 1569| v1569_1(void) = EnterFunction : -# 1569| m1569_2(unknown) = AliasedDefinition : -# 1569| m1569_3(unknown) = InitializeNonLocal : -# 1569| m1569_4(unknown) = Chi : total:m1569_2, partial:m1569_3 -# 1569| r1569_5(glval) = VariableAddress[#this] : -# 1569| m1569_6(glval) = InitializeParameter[#this] : &:r1569_5 -# 1569| r1569_7(glval) = Load[#this] : &:r1569_5, m1569_6 -# 1569| m1569_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1569_7 -# 1570| r1570_1(glval) = VariableAddress[#return] : -# 1570| r1570_2(glval) = VariableAddress[#this] : -# 1570| r1570_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1570_2, m1569_6 -# 1570| r1570_4(glval) = FieldAddress[i] : r1570_3 -#-----| r0_1(int &) = CopyValue : r1570_4 -#-----| m0_2(int &) = Store[#return] : &:r1570_1, r0_1 -# 1569| v1569_9(void) = ReturnIndirection[#this] : &:r1569_7, m1569_8 -# 1569| r1569_10(glval) = VariableAddress[#return] : -# 1569| v1569_11(void) = ReturnValue : &:r1569_10, m0_2 -# 1569| v1569_12(void) = AliasedUse : m1569_3 -# 1569| v1569_13(void) = ExitFunction : +# 1616| std::tuple_element::type& StructuredBindingTupleRefGet::get() +# 1616| Block 0 +# 1616| v1616_1(void) = EnterFunction : +# 1616| m1616_2(unknown) = AliasedDefinition : +# 1616| m1616_3(unknown) = InitializeNonLocal : +# 1616| m1616_4(unknown) = Chi : total:m1616_2, partial:m1616_3 +# 1616| r1616_5(glval) = VariableAddress[#this] : +# 1616| m1616_6(glval) = InitializeParameter[#this] : &:r1616_5 +# 1616| r1616_7(glval) = Load[#this] : &:r1616_5, m1616_6 +# 1616| m1616_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1616_7 +# 1617| r1617_1(glval) = VariableAddress[#return] : +# 1617| r1617_2(glval) = VariableAddress[#this] : +# 1617| r1617_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1617_2, m1616_6 +# 1617| r1617_4(glval) = FieldAddress[i] : r1617_3 +#-----| r0_1(int &) = CopyValue : r1617_4 +#-----| m0_2(int &) = Store[#return] : &:r1617_1, r0_1 +# 1616| v1616_9(void) = ReturnIndirection[#this] : &:r1616_7, m1616_8 +# 1616| r1616_10(glval) = VariableAddress[#return] : +# 1616| v1616_11(void) = ReturnValue : &:r1616_10, m0_2 +# 1616| v1616_12(void) = AliasedUse : m1616_3 +# 1616| v1616_13(void) = ExitFunction : -# 1573| std::tuple_element::type& StructuredBindingTupleRefGet::get() -# 1573| Block 0 -# 1573| v1573_1(void) = EnterFunction : -# 1573| m1573_2(unknown) = AliasedDefinition : -# 1573| m1573_3(unknown) = InitializeNonLocal : -# 1573| m1573_4(unknown) = Chi : total:m1573_2, partial:m1573_3 -# 1573| r1573_5(glval) = VariableAddress[#this] : -# 1573| m1573_6(glval) = InitializeParameter[#this] : &:r1573_5 -# 1573| r1573_7(glval) = Load[#this] : &:r1573_5, m1573_6 -# 1573| m1573_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1573_7 -# 1574| r1574_1(glval) = VariableAddress[#return] : -# 1574| r1574_2(glval) = VariableAddress[#this] : -# 1574| r1574_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1574_2, m1573_6 -# 1574| r1574_4(glval) = FieldAddress[d] : r1574_3 -#-----| r0_1(double &) = CopyValue : r1574_4 -#-----| m0_2(double &) = Store[#return] : &:r1574_1, r0_1 -# 1573| v1573_9(void) = ReturnIndirection[#this] : &:r1573_7, m1573_8 -# 1573| r1573_10(glval) = VariableAddress[#return] : -# 1573| v1573_11(void) = ReturnValue : &:r1573_10, m0_2 -# 1573| v1573_12(void) = AliasedUse : m1573_3 -# 1573| v1573_13(void) = ExitFunction : +# 1620| std::tuple_element::type& StructuredBindingTupleRefGet::get() +# 1620| Block 0 +# 1620| v1620_1(void) = EnterFunction : +# 1620| m1620_2(unknown) = AliasedDefinition : +# 1620| m1620_3(unknown) = InitializeNonLocal : +# 1620| m1620_4(unknown) = Chi : total:m1620_2, partial:m1620_3 +# 1620| r1620_5(glval) = VariableAddress[#this] : +# 1620| m1620_6(glval) = InitializeParameter[#this] : &:r1620_5 +# 1620| r1620_7(glval) = Load[#this] : &:r1620_5, m1620_6 +# 1620| m1620_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1620_7 +# 1621| r1621_1(glval) = VariableAddress[#return] : +# 1621| r1621_2(glval) = VariableAddress[#this] : +# 1621| r1621_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1621_2, m1620_6 +# 1621| r1621_4(glval) = FieldAddress[d] : r1621_3 +#-----| r0_1(double &) = CopyValue : r1621_4 +#-----| m0_2(double &) = Store[#return] : &:r1621_1, r0_1 +# 1620| v1620_9(void) = ReturnIndirection[#this] : &:r1620_7, m1620_8 +# 1620| r1620_10(glval) = VariableAddress[#return] : +# 1620| v1620_11(void) = ReturnValue : &:r1620_10, m0_2 +# 1620| v1620_12(void) = AliasedUse : m1620_3 +# 1620| v1620_13(void) = ExitFunction : -# 1577| std::tuple_element::type StructuredBindingTupleRefGet::get() -# 1577| Block 0 -# 1577| v1577_1(void) = EnterFunction : -# 1577| m1577_2(unknown) = AliasedDefinition : -# 1577| m1577_3(unknown) = InitializeNonLocal : -# 1577| m1577_4(unknown) = Chi : total:m1577_2, partial:m1577_3 -# 1577| r1577_5(glval) = VariableAddress[#this] : -# 1577| m1577_6(glval) = InitializeParameter[#this] : &:r1577_5 -# 1577| r1577_7(glval) = Load[#this] : &:r1577_5, m1577_6 -# 1577| m1577_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1577_7 -# 1578| r1578_1(glval) = VariableAddress[#return] : -# 1578| r1578_2(glval) = VariableAddress[#this] : -# 1578| r1578_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1578_2, m1577_6 -# 1578| r1578_4(glval) = FieldAddress[r] : r1578_3 -# 1578| r1578_5(int &) = Load[?] : &:r1578_4, ~m1577_8 -# 1578| r1578_6(glval) = CopyValue : r1578_5 -# 1578| r1578_7(int &) = CopyValue : r1578_6 -# 1578| m1578_8(int &) = Store[#return] : &:r1578_1, r1578_7 -# 1577| v1577_9(void) = ReturnIndirection[#this] : &:r1577_7, m1577_8 -# 1577| r1577_10(glval) = VariableAddress[#return] : -# 1577| v1577_11(void) = ReturnValue : &:r1577_10, m1578_8 -# 1577| v1577_12(void) = AliasedUse : m1577_3 -# 1577| v1577_13(void) = ExitFunction : +# 1624| std::tuple_element::type StructuredBindingTupleRefGet::get() +# 1624| Block 0 +# 1624| v1624_1(void) = EnterFunction : +# 1624| m1624_2(unknown) = AliasedDefinition : +# 1624| m1624_3(unknown) = InitializeNonLocal : +# 1624| m1624_4(unknown) = Chi : total:m1624_2, partial:m1624_3 +# 1624| r1624_5(glval) = VariableAddress[#this] : +# 1624| m1624_6(glval) = InitializeParameter[#this] : &:r1624_5 +# 1624| r1624_7(glval) = Load[#this] : &:r1624_5, m1624_6 +# 1624| m1624_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1624_7 +# 1625| r1625_1(glval) = VariableAddress[#return] : +# 1625| r1625_2(glval) = VariableAddress[#this] : +# 1625| r1625_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1625_2, m1624_6 +# 1625| r1625_4(glval) = FieldAddress[r] : r1625_3 +# 1625| r1625_5(int &) = Load[?] : &:r1625_4, ~m1624_8 +# 1625| r1625_6(glval) = CopyValue : r1625_5 +# 1625| r1625_7(int &) = CopyValue : r1625_6 +# 1625| m1625_8(int &) = Store[#return] : &:r1625_1, r1625_7 +# 1624| v1624_9(void) = ReturnIndirection[#this] : &:r1624_7, m1624_8 +# 1624| r1624_10(glval) = VariableAddress[#return] : +# 1624| v1624_11(void) = ReturnValue : &:r1624_10, m1625_8 +# 1624| v1624_12(void) = AliasedUse : m1624_3 +# 1624| v1624_13(void) = ExitFunction : -# 1581| void tuple_structured_binding_ref_get() -# 1581| Block 0 -# 1581| v1581_1(void) = EnterFunction : -# 1581| m1581_2(unknown) = AliasedDefinition : -# 1581| m1581_3(unknown) = InitializeNonLocal : -# 1581| m1581_4(unknown) = Chi : total:m1581_2, partial:m1581_3 -# 1582| r1582_1(glval) = VariableAddress[t] : -# 1582| m1582_2(StructuredBindingTupleRefGet) = Uninitialized[t] : &:r1582_1 -# 1582| r1582_3(glval) = FunctionAddress[StructuredBindingTupleRefGet] : -# 1582| v1582_4(void) = Call[StructuredBindingTupleRefGet] : func:r1582_3, this:r1582_1 -# 1582| m1582_5(unknown) = ^CallSideEffect : ~m1581_4 -# 1582| m1582_6(unknown) = Chi : total:m1581_4, partial:m1582_5 -# 1582| m1582_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1582_1 -# 1582| m1582_8(StructuredBindingTupleRefGet) = Chi : total:m1582_2, partial:m1582_7 -# 1585| r1585_1(glval) = VariableAddress[(unnamed local variable)] : -# 1585| r1585_2(glval) = VariableAddress[t] : -# 1585| r1585_3(StructuredBindingTupleRefGet) = Load[t] : &:r1585_2, m1582_8 -# 1585| m1585_4(StructuredBindingTupleRefGet) = Store[(unnamed local variable)] : &:r1585_1, r1585_3 -# 1585| r1585_5(glval) = VariableAddress[i] : -# 1585| r1585_6(glval) = VariableAddress[(unnamed local variable)] : -# 1585| r1585_7(glval) = FunctionAddress[get] : -# 1585| r1585_8(int &) = Call[get] : func:r1585_7, this:r1585_6 -# 1585| m1585_9(unknown) = ^CallSideEffect : ~m1582_6 -# 1585| m1585_10(unknown) = Chi : total:m1582_6, partial:m1585_9 -# 1585| v1585_11(void) = ^IndirectReadSideEffect[-1] : &:r1585_6, m1585_4 -# 1585| m1585_12(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1585_6 -# 1585| m1585_13(StructuredBindingTupleRefGet) = Chi : total:m1585_4, partial:m1585_12 -# 1585| r1585_14(glval) = CopyValue : r1585_8 -# 1585| r1585_15(int &) = CopyValue : r1585_14 -# 1585| m1585_16(int &) = Store[i] : &:r1585_5, r1585_15 -# 1585| r1585_17(glval) = VariableAddress[d] : -# 1585| r1585_18(glval) = VariableAddress[(unnamed local variable)] : -# 1585| r1585_19(glval) = FunctionAddress[get] : -# 1585| r1585_20(double &) = Call[get] : func:r1585_19, this:r1585_18 -# 1585| m1585_21(unknown) = ^CallSideEffect : ~m1585_10 -# 1585| m1585_22(unknown) = Chi : total:m1585_10, partial:m1585_21 -# 1585| v1585_23(void) = ^IndirectReadSideEffect[-1] : &:r1585_18, m1585_13 -# 1585| m1585_24(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1585_18 -# 1585| m1585_25(StructuredBindingTupleRefGet) = Chi : total:m1585_13, partial:m1585_24 -# 1585| r1585_26(glval) = CopyValue : r1585_20 -# 1585| r1585_27(double &) = CopyValue : r1585_26 -# 1585| m1585_28(double &) = Store[d] : &:r1585_17, r1585_27 -# 1585| r1585_29(glval) = VariableAddress[r] : -# 1585| r1585_30(glval) = VariableAddress[(unnamed local variable)] : -# 1585| r1585_31(glval) = FunctionAddress[get] : -# 1585| r1585_32(int &) = Call[get] : func:r1585_31, this:r1585_30 -# 1585| m1585_33(unknown) = ^CallSideEffect : ~m1585_22 -# 1585| m1585_34(unknown) = Chi : total:m1585_22, partial:m1585_33 -# 1585| v1585_35(void) = ^IndirectReadSideEffect[-1] : &:r1585_30, m1585_25 -# 1585| m1585_36(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1585_30 -# 1585| m1585_37(StructuredBindingTupleRefGet) = Chi : total:m1585_25, partial:m1585_36 -# 1585| r1585_38(glval) = CopyValue : r1585_32 -# 1585| r1585_39(int &) = CopyValue : r1585_38 -# 1585| m1585_40(int &) = Store[r] : &:r1585_29, r1585_39 -# 1586| r1586_1(double) = Constant[4.0] : -# 1586| r1586_2(glval) = VariableAddress[d] : -# 1586| r1586_3(double &) = Load[d] : &:r1586_2, m1585_28 -# 1586| r1586_4(glval) = CopyValue : r1586_3 -# 1586| m1586_5(double) = Store[?] : &:r1586_4, r1586_1 -# 1586| m1586_6(StructuredBindingTupleRefGet) = Chi : total:m1585_37, partial:m1586_5 -# 1587| r1587_1(glval) = VariableAddress[rd] : -# 1587| r1587_2(glval) = VariableAddress[d] : -# 1587| r1587_3(double &) = Load[d] : &:r1587_2, m1585_28 -# 1587| r1587_4(glval) = CopyValue : r1587_3 -# 1587| r1587_5(double &) = CopyValue : r1587_4 -# 1587| m1587_6(double &) = Store[rd] : &:r1587_1, r1587_5 -# 1588| r1588_1(glval) = VariableAddress[v] : -# 1588| r1588_2(glval) = VariableAddress[i] : -# 1588| r1588_3(int &) = Load[i] : &:r1588_2, m1585_16 -# 1588| r1588_4(int) = Load[?] : &:r1588_3, ~m1585_37 -# 1588| m1588_5(int) = Store[v] : &:r1588_1, r1588_4 -# 1589| r1589_1(int) = Constant[5] : -# 1589| r1589_2(glval) = VariableAddress[r] : -# 1589| r1589_3(int &) = Load[r] : &:r1589_2, m1585_40 -# 1589| r1589_4(glval) = CopyValue : r1589_3 -# 1589| m1589_5(int) = Store[?] : &:r1589_4, r1589_1 -# 1589| m1589_6(unknown) = Chi : total:m1585_34, partial:m1589_5 -# 1590| r1590_1(glval) = VariableAddress[rr] : -# 1590| r1590_2(glval) = VariableAddress[r] : -# 1590| r1590_3(int &) = Load[r] : &:r1590_2, m1585_40 -# 1590| r1590_4(glval) = CopyValue : r1590_3 -# 1590| r1590_5(int &) = CopyValue : r1590_4 -# 1590| m1590_6(int &) = Store[rr] : &:r1590_1, r1590_5 -# 1591| r1591_1(glval) = VariableAddress[w] : -# 1591| r1591_2(glval) = VariableAddress[r] : -# 1591| r1591_3(int &) = Load[r] : &:r1591_2, m1585_40 -# 1591| r1591_4(int) = Load[?] : &:r1591_3, ~m1589_6 -# 1591| m1591_5(int) = Store[w] : &:r1591_1, r1591_4 -# 1595| r1595_1(glval) = VariableAddress[unnamed_local_variable] : -# 1595| r1595_2(glval) = VariableAddress[t] : -# 1595| r1595_3(StructuredBindingTupleRefGet) = Load[t] : &:r1595_2, m1582_8 -# 1595| m1595_4(StructuredBindingTupleRefGet) = Store[unnamed_local_variable] : &:r1595_1, r1595_3 -# 1596| r1596_1(glval) = VariableAddress[i] : -# 1596| r1596_2(glval) = VariableAddress[unnamed_local_variable] : -# 1596| r1596_3(glval) = FunctionAddress[get] : -# 1596| r1596_4(int &) = Call[get] : func:r1596_3, this:r1596_2 -# 1596| m1596_5(unknown) = ^CallSideEffect : ~m1589_6 -# 1596| m1596_6(unknown) = Chi : total:m1589_6, partial:m1596_5 -# 1596| v1596_7(void) = ^IndirectReadSideEffect[-1] : &:r1596_2, m1595_4 -# 1596| m1596_8(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1596_2 -# 1596| m1596_9(StructuredBindingTupleRefGet) = Chi : total:m1595_4, partial:m1596_8 -# 1596| r1596_10(glval) = CopyValue : r1596_4 -# 1596| r1596_11(int &) = CopyValue : r1596_10 -# 1596| m1596_12(int &) = Store[i] : &:r1596_1, r1596_11 -# 1597| r1597_1(glval) = VariableAddress[d] : -# 1597| r1597_2(glval) = VariableAddress[unnamed_local_variable] : -# 1597| r1597_3(glval) = FunctionAddress[get] : -# 1597| r1597_4(double &) = Call[get] : func:r1597_3, this:r1597_2 -# 1597| m1597_5(unknown) = ^CallSideEffect : ~m1596_6 -# 1597| m1597_6(unknown) = Chi : total:m1596_6, partial:m1597_5 -# 1597| v1597_7(void) = ^IndirectReadSideEffect[-1] : &:r1597_2, m1596_9 -# 1597| m1597_8(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1597_2 -# 1597| m1597_9(StructuredBindingTupleRefGet) = Chi : total:m1596_9, partial:m1597_8 -# 1597| r1597_10(glval) = CopyValue : r1597_4 -# 1597| r1597_11(double &) = CopyValue : r1597_10 -# 1597| m1597_12(double &) = Store[d] : &:r1597_1, r1597_11 -# 1598| r1598_1(glval) = VariableAddress[r] : -# 1598| r1598_2(glval) = VariableAddress[unnamed_local_variable] : -# 1598| r1598_3(glval) = FunctionAddress[get] : -# 1598| r1598_4(int &) = Call[get] : func:r1598_3, this:r1598_2 -# 1598| m1598_5(unknown) = ^CallSideEffect : ~m1597_6 -# 1598| m1598_6(unknown) = Chi : total:m1597_6, partial:m1598_5 -# 1598| v1598_7(void) = ^IndirectReadSideEffect[-1] : &:r1598_2, m1597_9 -# 1598| m1598_8(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1598_2 -# 1598| m1598_9(StructuredBindingTupleRefGet) = Chi : total:m1597_9, partial:m1598_8 -# 1598| r1598_10(glval) = CopyValue : r1598_4 -# 1598| r1598_11(int &) = CopyValue : r1598_10 -# 1598| m1598_12(int &) = Store[r] : &:r1598_1, r1598_11 -# 1599| r1599_1(double) = Constant[4.0] : -# 1599| r1599_2(glval) = VariableAddress[d] : -# 1599| r1599_3(double &) = Load[d] : &:r1599_2, m1597_12 -# 1599| r1599_4(glval) = CopyValue : r1599_3 -# 1599| m1599_5(double) = Store[?] : &:r1599_4, r1599_1 -# 1599| m1599_6(StructuredBindingTupleRefGet) = Chi : total:m1598_9, partial:m1599_5 -# 1600| r1600_1(glval) = VariableAddress[rd] : -# 1600| r1600_2(glval) = VariableAddress[d] : -# 1600| r1600_3(double &) = Load[d] : &:r1600_2, m1597_12 -# 1600| r1600_4(glval) = CopyValue : r1600_3 -# 1600| r1600_5(double &) = CopyValue : r1600_4 -# 1600| m1600_6(double &) = Store[rd] : &:r1600_1, r1600_5 -# 1601| r1601_1(glval) = VariableAddress[v] : -# 1601| r1601_2(glval) = VariableAddress[i] : -# 1601| r1601_3(int &) = Load[i] : &:r1601_2, m1596_12 -# 1601| r1601_4(int) = Load[?] : &:r1601_3, ~m1598_9 -# 1601| m1601_5(int) = Store[v] : &:r1601_1, r1601_4 -# 1602| r1602_1(int) = Constant[5] : -# 1602| r1602_2(glval) = VariableAddress[r] : -# 1602| r1602_3(int &) = Load[r] : &:r1602_2, m1598_12 -# 1602| r1602_4(glval) = CopyValue : r1602_3 -# 1602| m1602_5(int) = Store[?] : &:r1602_4, r1602_1 -# 1602| m1602_6(unknown) = Chi : total:m1598_6, partial:m1602_5 -# 1603| r1603_1(glval) = VariableAddress[rr] : -# 1603| r1603_2(glval) = VariableAddress[r] : -# 1603| r1603_3(int &) = Load[r] : &:r1603_2, m1598_12 -# 1603| r1603_4(glval) = CopyValue : r1603_3 -# 1603| r1603_5(int &) = CopyValue : r1603_4 -# 1603| m1603_6(int &) = Store[rr] : &:r1603_1, r1603_5 -# 1604| r1604_1(glval) = VariableAddress[w] : -# 1604| r1604_2(glval) = VariableAddress[r] : -# 1604| r1604_3(int &) = Load[r] : &:r1604_2, m1598_12 -# 1604| r1604_4(int) = Load[?] : &:r1604_3, ~m1602_6 -# 1604| m1604_5(int) = Store[w] : &:r1604_1, r1604_4 -# 1606| v1606_1(void) = NoOp : -# 1581| v1581_5(void) = ReturnVoid : -# 1581| v1581_6(void) = AliasedUse : ~m1602_6 -# 1581| v1581_7(void) = ExitFunction : +# 1628| void tuple_structured_binding_ref_get() +# 1628| Block 0 +# 1628| v1628_1(void) = EnterFunction : +# 1628| m1628_2(unknown) = AliasedDefinition : +# 1628| m1628_3(unknown) = InitializeNonLocal : +# 1628| m1628_4(unknown) = Chi : total:m1628_2, partial:m1628_3 +# 1629| r1629_1(glval) = VariableAddress[t] : +# 1629| m1629_2(StructuredBindingTupleRefGet) = Uninitialized[t] : &:r1629_1 +# 1629| r1629_3(glval) = FunctionAddress[StructuredBindingTupleRefGet] : +# 1629| v1629_4(void) = Call[StructuredBindingTupleRefGet] : func:r1629_3, this:r1629_1 +# 1629| m1629_5(unknown) = ^CallSideEffect : ~m1628_4 +# 1629| m1629_6(unknown) = Chi : total:m1628_4, partial:m1629_5 +# 1629| m1629_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1629_1 +# 1629| m1629_8(StructuredBindingTupleRefGet) = Chi : total:m1629_2, partial:m1629_7 +# 1632| r1632_1(glval) = VariableAddress[(unnamed local variable)] : +# 1632| r1632_2(glval) = VariableAddress[t] : +# 1632| r1632_3(StructuredBindingTupleRefGet) = Load[t] : &:r1632_2, m1629_8 +# 1632| m1632_4(StructuredBindingTupleRefGet) = Store[(unnamed local variable)] : &:r1632_1, r1632_3 +# 1632| r1632_5(glval) = VariableAddress[i] : +# 1632| r1632_6(glval) = VariableAddress[(unnamed local variable)] : +# 1632| r1632_7(glval) = FunctionAddress[get] : +# 1632| r1632_8(int &) = Call[get] : func:r1632_7, this:r1632_6 +# 1632| m1632_9(unknown) = ^CallSideEffect : ~m1629_6 +# 1632| m1632_10(unknown) = Chi : total:m1629_6, partial:m1632_9 +# 1632| v1632_11(void) = ^IndirectReadSideEffect[-1] : &:r1632_6, m1632_4 +# 1632| m1632_12(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1632_6 +# 1632| m1632_13(StructuredBindingTupleRefGet) = Chi : total:m1632_4, partial:m1632_12 +# 1632| r1632_14(glval) = CopyValue : r1632_8 +# 1632| r1632_15(int &) = CopyValue : r1632_14 +# 1632| m1632_16(int &) = Store[i] : &:r1632_5, r1632_15 +# 1632| r1632_17(glval) = VariableAddress[d] : +# 1632| r1632_18(glval) = VariableAddress[(unnamed local variable)] : +# 1632| r1632_19(glval) = FunctionAddress[get] : +# 1632| r1632_20(double &) = Call[get] : func:r1632_19, this:r1632_18 +# 1632| m1632_21(unknown) = ^CallSideEffect : ~m1632_10 +# 1632| m1632_22(unknown) = Chi : total:m1632_10, partial:m1632_21 +# 1632| v1632_23(void) = ^IndirectReadSideEffect[-1] : &:r1632_18, m1632_13 +# 1632| m1632_24(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1632_18 +# 1632| m1632_25(StructuredBindingTupleRefGet) = Chi : total:m1632_13, partial:m1632_24 +# 1632| r1632_26(glval) = CopyValue : r1632_20 +# 1632| r1632_27(double &) = CopyValue : r1632_26 +# 1632| m1632_28(double &) = Store[d] : &:r1632_17, r1632_27 +# 1632| r1632_29(glval) = VariableAddress[r] : +# 1632| r1632_30(glval) = VariableAddress[(unnamed local variable)] : +# 1632| r1632_31(glval) = FunctionAddress[get] : +# 1632| r1632_32(int &) = Call[get] : func:r1632_31, this:r1632_30 +# 1632| m1632_33(unknown) = ^CallSideEffect : ~m1632_22 +# 1632| m1632_34(unknown) = Chi : total:m1632_22, partial:m1632_33 +# 1632| v1632_35(void) = ^IndirectReadSideEffect[-1] : &:r1632_30, m1632_25 +# 1632| m1632_36(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1632_30 +# 1632| m1632_37(StructuredBindingTupleRefGet) = Chi : total:m1632_25, partial:m1632_36 +# 1632| r1632_38(glval) = CopyValue : r1632_32 +# 1632| r1632_39(int &) = CopyValue : r1632_38 +# 1632| m1632_40(int &) = Store[r] : &:r1632_29, r1632_39 +# 1633| r1633_1(double) = Constant[4.0] : +# 1633| r1633_2(glval) = VariableAddress[d] : +# 1633| r1633_3(double &) = Load[d] : &:r1633_2, m1632_28 +# 1633| r1633_4(glval) = CopyValue : r1633_3 +# 1633| m1633_5(double) = Store[?] : &:r1633_4, r1633_1 +# 1633| m1633_6(StructuredBindingTupleRefGet) = Chi : total:m1632_37, partial:m1633_5 +# 1634| r1634_1(glval) = VariableAddress[rd] : +# 1634| r1634_2(glval) = VariableAddress[d] : +# 1634| r1634_3(double &) = Load[d] : &:r1634_2, m1632_28 +# 1634| r1634_4(glval) = CopyValue : r1634_3 +# 1634| r1634_5(double &) = CopyValue : r1634_4 +# 1634| m1634_6(double &) = Store[rd] : &:r1634_1, r1634_5 +# 1635| r1635_1(glval) = VariableAddress[v] : +# 1635| r1635_2(glval) = VariableAddress[i] : +# 1635| r1635_3(int &) = Load[i] : &:r1635_2, m1632_16 +# 1635| r1635_4(int) = Load[?] : &:r1635_3, ~m1632_37 +# 1635| m1635_5(int) = Store[v] : &:r1635_1, r1635_4 +# 1636| r1636_1(int) = Constant[5] : +# 1636| r1636_2(glval) = VariableAddress[r] : +# 1636| r1636_3(int &) = Load[r] : &:r1636_2, m1632_40 +# 1636| r1636_4(glval) = CopyValue : r1636_3 +# 1636| m1636_5(int) = Store[?] : &:r1636_4, r1636_1 +# 1636| m1636_6(unknown) = Chi : total:m1632_34, partial:m1636_5 +# 1637| r1637_1(glval) = VariableAddress[rr] : +# 1637| r1637_2(glval) = VariableAddress[r] : +# 1637| r1637_3(int &) = Load[r] : &:r1637_2, m1632_40 +# 1637| r1637_4(glval) = CopyValue : r1637_3 +# 1637| r1637_5(int &) = CopyValue : r1637_4 +# 1637| m1637_6(int &) = Store[rr] : &:r1637_1, r1637_5 +# 1638| r1638_1(glval) = VariableAddress[w] : +# 1638| r1638_2(glval) = VariableAddress[r] : +# 1638| r1638_3(int &) = Load[r] : &:r1638_2, m1632_40 +# 1638| r1638_4(int) = Load[?] : &:r1638_3, ~m1636_6 +# 1638| m1638_5(int) = Store[w] : &:r1638_1, r1638_4 +# 1642| r1642_1(glval) = VariableAddress[unnamed_local_variable] : +# 1642| r1642_2(glval) = VariableAddress[t] : +# 1642| r1642_3(StructuredBindingTupleRefGet) = Load[t] : &:r1642_2, m1629_8 +# 1642| m1642_4(StructuredBindingTupleRefGet) = Store[unnamed_local_variable] : &:r1642_1, r1642_3 +# 1643| r1643_1(glval) = VariableAddress[i] : +# 1643| r1643_2(glval) = VariableAddress[unnamed_local_variable] : +# 1643| r1643_3(glval) = FunctionAddress[get] : +# 1643| r1643_4(int &) = Call[get] : func:r1643_3, this:r1643_2 +# 1643| m1643_5(unknown) = ^CallSideEffect : ~m1636_6 +# 1643| m1643_6(unknown) = Chi : total:m1636_6, partial:m1643_5 +# 1643| v1643_7(void) = ^IndirectReadSideEffect[-1] : &:r1643_2, m1642_4 +# 1643| m1643_8(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1643_2 +# 1643| m1643_9(StructuredBindingTupleRefGet) = Chi : total:m1642_4, partial:m1643_8 +# 1643| r1643_10(glval) = CopyValue : r1643_4 +# 1643| r1643_11(int &) = CopyValue : r1643_10 +# 1643| m1643_12(int &) = Store[i] : &:r1643_1, r1643_11 +# 1644| r1644_1(glval) = VariableAddress[d] : +# 1644| r1644_2(glval) = VariableAddress[unnamed_local_variable] : +# 1644| r1644_3(glval) = FunctionAddress[get] : +# 1644| r1644_4(double &) = Call[get] : func:r1644_3, this:r1644_2 +# 1644| m1644_5(unknown) = ^CallSideEffect : ~m1643_6 +# 1644| m1644_6(unknown) = Chi : total:m1643_6, partial:m1644_5 +# 1644| v1644_7(void) = ^IndirectReadSideEffect[-1] : &:r1644_2, m1643_9 +# 1644| m1644_8(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1644_2 +# 1644| m1644_9(StructuredBindingTupleRefGet) = Chi : total:m1643_9, partial:m1644_8 +# 1644| r1644_10(glval) = CopyValue : r1644_4 +# 1644| r1644_11(double &) = CopyValue : r1644_10 +# 1644| m1644_12(double &) = Store[d] : &:r1644_1, r1644_11 +# 1645| r1645_1(glval) = VariableAddress[r] : +# 1645| r1645_2(glval) = VariableAddress[unnamed_local_variable] : +# 1645| r1645_3(glval) = FunctionAddress[get] : +# 1645| r1645_4(int &) = Call[get] : func:r1645_3, this:r1645_2 +# 1645| m1645_5(unknown) = ^CallSideEffect : ~m1644_6 +# 1645| m1645_6(unknown) = Chi : total:m1644_6, partial:m1645_5 +# 1645| v1645_7(void) = ^IndirectReadSideEffect[-1] : &:r1645_2, m1644_9 +# 1645| m1645_8(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1645_2 +# 1645| m1645_9(StructuredBindingTupleRefGet) = Chi : total:m1644_9, partial:m1645_8 +# 1645| r1645_10(glval) = CopyValue : r1645_4 +# 1645| r1645_11(int &) = CopyValue : r1645_10 +# 1645| m1645_12(int &) = Store[r] : &:r1645_1, r1645_11 +# 1646| r1646_1(double) = Constant[4.0] : +# 1646| r1646_2(glval) = VariableAddress[d] : +# 1646| r1646_3(double &) = Load[d] : &:r1646_2, m1644_12 +# 1646| r1646_4(glval) = CopyValue : r1646_3 +# 1646| m1646_5(double) = Store[?] : &:r1646_4, r1646_1 +# 1646| m1646_6(StructuredBindingTupleRefGet) = Chi : total:m1645_9, partial:m1646_5 +# 1647| r1647_1(glval) = VariableAddress[rd] : +# 1647| r1647_2(glval) = VariableAddress[d] : +# 1647| r1647_3(double &) = Load[d] : &:r1647_2, m1644_12 +# 1647| r1647_4(glval) = CopyValue : r1647_3 +# 1647| r1647_5(double &) = CopyValue : r1647_4 +# 1647| m1647_6(double &) = Store[rd] : &:r1647_1, r1647_5 +# 1648| r1648_1(glval) = VariableAddress[v] : +# 1648| r1648_2(glval) = VariableAddress[i] : +# 1648| r1648_3(int &) = Load[i] : &:r1648_2, m1643_12 +# 1648| r1648_4(int) = Load[?] : &:r1648_3, ~m1645_9 +# 1648| m1648_5(int) = Store[v] : &:r1648_1, r1648_4 +# 1649| r1649_1(int) = Constant[5] : +# 1649| r1649_2(glval) = VariableAddress[r] : +# 1649| r1649_3(int &) = Load[r] : &:r1649_2, m1645_12 +# 1649| r1649_4(glval) = CopyValue : r1649_3 +# 1649| m1649_5(int) = Store[?] : &:r1649_4, r1649_1 +# 1649| m1649_6(unknown) = Chi : total:m1645_6, partial:m1649_5 +# 1650| r1650_1(glval) = VariableAddress[rr] : +# 1650| r1650_2(glval) = VariableAddress[r] : +# 1650| r1650_3(int &) = Load[r] : &:r1650_2, m1645_12 +# 1650| r1650_4(glval) = CopyValue : r1650_3 +# 1650| r1650_5(int &) = CopyValue : r1650_4 +# 1650| m1650_6(int &) = Store[rr] : &:r1650_1, r1650_5 +# 1651| r1651_1(glval) = VariableAddress[w] : +# 1651| r1651_2(glval) = VariableAddress[r] : +# 1651| r1651_3(int &) = Load[r] : &:r1651_2, m1645_12 +# 1651| r1651_4(int) = Load[?] : &:r1651_3, ~m1649_6 +# 1651| m1651_5(int) = Store[w] : &:r1651_1, r1651_4 +# 1653| v1653_1(void) = NoOp : +# 1628| v1628_5(void) = ReturnVoid : +# 1628| v1628_6(void) = AliasedUse : ~m1649_6 +# 1628| v1628_7(void) = ExitFunction : -# 1608| void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet() -# 1608| Block 0 -# 1608| v1608_1(void) = EnterFunction : -# 1608| m1608_2(unknown) = AliasedDefinition : -# 1608| m1608_3(unknown) = InitializeNonLocal : -# 1608| m1608_4(unknown) = Chi : total:m1608_2, partial:m1608_3 -# 1608| r1608_5(glval) = VariableAddress[#this] : -# 1608| m1608_6(glval) = InitializeParameter[#this] : &:r1608_5 -# 1608| r1608_7(glval) = Load[#this] : &:r1608_5, m1608_6 -# 1608| m1608_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1608_7 -# 1608| v1608_9(void) = NoOp : -# 1608| v1608_10(void) = ReturnIndirection[#this] : &:r1608_7, m1608_8 -# 1608| v1608_11(void) = ReturnVoid : -# 1608| v1608_12(void) = AliasedUse : m1608_3 -# 1608| v1608_13(void) = ExitFunction : +# 1655| void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet() +# 1655| Block 0 +# 1655| v1655_1(void) = EnterFunction : +# 1655| m1655_2(unknown) = AliasedDefinition : +# 1655| m1655_3(unknown) = InitializeNonLocal : +# 1655| m1655_4(unknown) = Chi : total:m1655_2, partial:m1655_3 +# 1655| r1655_5(glval) = VariableAddress[#this] : +# 1655| m1655_6(glval) = InitializeParameter[#this] : &:r1655_5 +# 1655| r1655_7(glval) = Load[#this] : &:r1655_5, m1655_6 +# 1655| m1655_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1655_7 +# 1655| v1655_9(void) = NoOp : +# 1655| v1655_10(void) = ReturnIndirection[#this] : &:r1655_7, m1655_8 +# 1655| v1655_11(void) = ReturnVoid : +# 1655| v1655_12(void) = AliasedUse : m1655_3 +# 1655| v1655_13(void) = ExitFunction : -# 1635| std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1635| Block 0 -# 1635| v1635_1(void) = EnterFunction : -# 1635| m1635_2(unknown) = AliasedDefinition : -# 1635| m1635_3(unknown) = InitializeNonLocal : -# 1635| m1635_4(unknown) = Chi : total:m1635_2, partial:m1635_3 -# 1635| r1635_5(glval) = VariableAddress[#this] : -# 1635| m1635_6(glval) = InitializeParameter[#this] : &:r1635_5 -# 1635| r1635_7(glval) = Load[#this] : &:r1635_5, m1635_6 -# 1635| m1635_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1635_7 -# 1636| r1636_1(glval) = VariableAddress[#return] : -# 1636| r1636_2(glval) = VariableAddress[#this] : -# 1636| r1636_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1636_2, m1635_6 -# 1636| r1636_4(glval) = FieldAddress[i] : r1636_3 -# 1636| r1636_5(int) = Load[?] : &:r1636_4, ~m1635_8 -# 1636| m1636_6(int) = Store[#return] : &:r1636_1, r1636_5 -# 1635| v1635_9(void) = ReturnIndirection[#this] : &:r1635_7, m1635_8 -# 1635| r1635_10(glval) = VariableAddress[#return] : -# 1635| v1635_11(void) = ReturnValue : &:r1635_10, m1636_6 -# 1635| v1635_12(void) = AliasedUse : m1635_3 -# 1635| v1635_13(void) = ExitFunction : +# 1682| std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1682| Block 0 +# 1682| v1682_1(void) = EnterFunction : +# 1682| m1682_2(unknown) = AliasedDefinition : +# 1682| m1682_3(unknown) = InitializeNonLocal : +# 1682| m1682_4(unknown) = Chi : total:m1682_2, partial:m1682_3 +# 1682| r1682_5(glval) = VariableAddress[#this] : +# 1682| m1682_6(glval) = InitializeParameter[#this] : &:r1682_5 +# 1682| r1682_7(glval) = Load[#this] : &:r1682_5, m1682_6 +# 1682| m1682_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1682_7 +# 1683| r1683_1(glval) = VariableAddress[#return] : +# 1683| r1683_2(glval) = VariableAddress[#this] : +# 1683| r1683_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1683_2, m1682_6 +# 1683| r1683_4(glval) = FieldAddress[i] : r1683_3 +# 1683| r1683_5(int) = Load[?] : &:r1683_4, ~m1682_8 +# 1683| m1683_6(int) = Store[#return] : &:r1683_1, r1683_5 +# 1682| v1682_9(void) = ReturnIndirection[#this] : &:r1682_7, m1682_8 +# 1682| r1682_10(glval) = VariableAddress[#return] : +# 1682| v1682_11(void) = ReturnValue : &:r1682_10, m1683_6 +# 1682| v1682_12(void) = AliasedUse : m1682_3 +# 1682| v1682_13(void) = ExitFunction : -# 1639| std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1639| Block 0 -# 1639| v1639_1(void) = EnterFunction : -# 1639| m1639_2(unknown) = AliasedDefinition : -# 1639| m1639_3(unknown) = InitializeNonLocal : -# 1639| m1639_4(unknown) = Chi : total:m1639_2, partial:m1639_3 -# 1639| r1639_5(glval) = VariableAddress[#this] : -# 1639| m1639_6(glval) = InitializeParameter[#this] : &:r1639_5 -# 1639| r1639_7(glval) = Load[#this] : &:r1639_5, m1639_6 -# 1639| m1639_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1639_7 -# 1640| r1640_1(glval) = VariableAddress[#return] : -# 1640| r1640_2(glval) = VariableAddress[#this] : -# 1640| r1640_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1640_2, m1639_6 -# 1640| r1640_4(glval) = FieldAddress[r] : r1640_3 -# 1640| r1640_5(int &) = Load[?] : &:r1640_4, ~m1639_8 -# 1640| r1640_6(glval) = CopyValue : r1640_5 -# 1640| r1640_7(int &) = CopyValue : r1640_6 -# 1640| m1640_8(int &) = Store[#return] : &:r1640_1, r1640_7 -# 1639| v1639_9(void) = ReturnIndirection[#this] : &:r1639_7, m1639_8 -# 1639| r1639_10(glval) = VariableAddress[#return] : -# 1639| v1639_11(void) = ReturnValue : &:r1639_10, m1640_8 -# 1639| v1639_12(void) = AliasedUse : m1639_3 -# 1639| v1639_13(void) = ExitFunction : +# 1686| std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1686| Block 0 +# 1686| v1686_1(void) = EnterFunction : +# 1686| m1686_2(unknown) = AliasedDefinition : +# 1686| m1686_3(unknown) = InitializeNonLocal : +# 1686| m1686_4(unknown) = Chi : total:m1686_2, partial:m1686_3 +# 1686| r1686_5(glval) = VariableAddress[#this] : +# 1686| m1686_6(glval) = InitializeParameter[#this] : &:r1686_5 +# 1686| r1686_7(glval) = Load[#this] : &:r1686_5, m1686_6 +# 1686| m1686_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1686_7 +# 1687| r1687_1(glval) = VariableAddress[#return] : +# 1687| r1687_2(glval) = VariableAddress[#this] : +# 1687| r1687_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1687_2, m1686_6 +# 1687| r1687_4(glval) = FieldAddress[r] : r1687_3 +# 1687| r1687_5(int &) = Load[?] : &:r1687_4, ~m1686_8 +# 1687| r1687_6(glval) = CopyValue : r1687_5 +# 1687| r1687_7(int &) = CopyValue : r1687_6 +# 1687| m1687_8(int &) = Store[#return] : &:r1687_1, r1687_7 +# 1686| v1686_9(void) = ReturnIndirection[#this] : &:r1686_7, m1686_8 +# 1686| r1686_10(glval) = VariableAddress[#return] : +# 1686| v1686_11(void) = ReturnValue : &:r1686_10, m1687_8 +# 1686| v1686_12(void) = AliasedUse : m1686_3 +# 1686| v1686_13(void) = ExitFunction : -# 1643| std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1643| Block 0 -# 1643| v1643_1(void) = EnterFunction : -# 1643| m1643_2(unknown) = AliasedDefinition : -# 1643| m1643_3(unknown) = InitializeNonLocal : -# 1643| m1643_4(unknown) = Chi : total:m1643_2, partial:m1643_3 -# 1643| r1643_5(glval) = VariableAddress[#this] : -# 1643| m1643_6(glval) = InitializeParameter[#this] : &:r1643_5 -# 1643| r1643_7(glval) = Load[#this] : &:r1643_5, m1643_6 -# 1643| m1643_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1643_7 -# 1644| r1644_1(glval) = VariableAddress[#return] : -# 1644| r1644_2(glval) = VariableAddress[#temp1644:12] : -# 1644| r1644_3(int) = Constant[5] : -# 1644| m1644_4(int) = Store[#temp1644:12] : &:r1644_2, r1644_3 -# 1644| r1644_5(int &) = CopyValue : r1644_2 -# 1644| m1644_6(int &&) = Store[#return] : &:r1644_1, r1644_5 -# 1643| v1643_9(void) = ReturnIndirection[#this] : &:r1643_7, m1643_8 -# 1643| r1643_10(glval) = VariableAddress[#return] : -# 1643| v1643_11(void) = ReturnValue : &:r1643_10, m1644_6 -# 1643| v1643_12(void) = AliasedUse : m1643_3 -# 1643| v1643_13(void) = ExitFunction : +# 1690| std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1690| Block 0 +# 1690| v1690_1(void) = EnterFunction : +# 1690| m1690_2(unknown) = AliasedDefinition : +# 1690| m1690_3(unknown) = InitializeNonLocal : +# 1690| m1690_4(unknown) = Chi : total:m1690_2, partial:m1690_3 +# 1690| r1690_5(glval) = VariableAddress[#this] : +# 1690| m1690_6(glval) = InitializeParameter[#this] : &:r1690_5 +# 1690| r1690_7(glval) = Load[#this] : &:r1690_5, m1690_6 +# 1690| m1690_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1690_7 +# 1691| r1691_1(glval) = VariableAddress[#return] : +# 1691| r1691_2(glval) = VariableAddress[#temp1691:12] : +# 1691| r1691_3(int) = Constant[5] : +# 1691| m1691_4(int) = Store[#temp1691:12] : &:r1691_2, r1691_3 +# 1691| r1691_5(int &) = CopyValue : r1691_2 +# 1691| m1691_6(int &&) = Store[#return] : &:r1691_1, r1691_5 +# 1690| v1690_9(void) = ReturnIndirection[#this] : &:r1690_7, m1690_8 +# 1690| r1690_10(glval) = VariableAddress[#return] : +# 1690| v1690_11(void) = ReturnValue : &:r1690_10, m1691_6 +# 1690| v1690_12(void) = AliasedUse : m1690_3 +# 1690| v1690_13(void) = ExitFunction : -# 1647| void tuple_structured_binding_no_ref_get() -# 1647| Block 0 -# 1647| v1647_1(void) = EnterFunction : -# 1647| m1647_2(unknown) = AliasedDefinition : -# 1647| m1647_3(unknown) = InitializeNonLocal : -# 1647| m1647_4(unknown) = Chi : total:m1647_2, partial:m1647_3 -# 1648| r1648_1(glval) = VariableAddress[t] : -# 1648| m1648_2(StructuredBindingTupleNoRefGet) = Uninitialized[t] : &:r1648_1 -# 1648| r1648_3(glval) = FunctionAddress[StructuredBindingTupleNoRefGet] : -# 1648| v1648_4(void) = Call[StructuredBindingTupleNoRefGet] : func:r1648_3, this:r1648_1 -# 1648| m1648_5(unknown) = ^CallSideEffect : ~m1647_4 -# 1648| m1648_6(unknown) = Chi : total:m1647_4, partial:m1648_5 -# 1648| m1648_7(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1648_1 -# 1648| m1648_8(StructuredBindingTupleNoRefGet) = Chi : total:m1648_2, partial:m1648_7 -# 1651| r1651_1(glval) = VariableAddress[(unnamed local variable)] : -# 1651| r1651_2(glval) = VariableAddress[t] : -# 1651| r1651_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1651_2 -# 1651| m1651_4(StructuredBindingTupleNoRefGet &) = Store[(unnamed local variable)] : &:r1651_1, r1651_3 -# 1651| r1651_5(glval) = VariableAddress[i] : -# 1651| r1651_6(glval) = VariableAddress[#temp1651:16] : -# 1651| r1651_7(glval) = VariableAddress[(unnamed local variable)] : -# 1651| r1651_8(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_7, m1651_4 -# 1651| r1651_9(glval) = CopyValue : r1651_8 -# 1651| r1651_10(glval) = FunctionAddress[get] : -# 1651| r1651_11(int) = Call[get] : func:r1651_10, this:r1651_9 -# 1651| m1651_12(unknown) = ^CallSideEffect : ~m1648_6 -# 1651| m1651_13(unknown) = Chi : total:m1648_6, partial:m1651_12 -# 1651| v1651_14(void) = ^IndirectReadSideEffect[-1] : &:r1651_9, m1648_8 -# 1651| m1651_15(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1651_9 -# 1651| m1651_16(StructuredBindingTupleNoRefGet) = Chi : total:m1648_8, partial:m1651_15 -# 1651| m1651_17(int) = Store[#temp1651:16] : &:r1651_6, r1651_11 -# 1651| r1651_18(int &) = CopyValue : r1651_6 -# 1651| m1651_19(int &&) = Store[i] : &:r1651_5, r1651_18 -# 1651| r1651_20(glval) = VariableAddress[r] : -# 1651| r1651_21(glval) = VariableAddress[(unnamed local variable)] : -# 1651| r1651_22(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_21, m1651_4 -# 1651| r1651_23(glval) = CopyValue : r1651_22 -# 1651| r1651_24(glval) = FunctionAddress[get] : -# 1651| r1651_25(int &) = Call[get] : func:r1651_24, this:r1651_23 -# 1651| m1651_26(unknown) = ^CallSideEffect : ~m1651_13 -# 1651| m1651_27(unknown) = Chi : total:m1651_13, partial:m1651_26 -# 1651| v1651_28(void) = ^IndirectReadSideEffect[-1] : &:r1651_23, m1651_16 -# 1651| m1651_29(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1651_23 -# 1651| m1651_30(StructuredBindingTupleNoRefGet) = Chi : total:m1651_16, partial:m1651_29 -# 1651| r1651_31(glval) = CopyValue : r1651_25 -# 1651| r1651_32(int &) = CopyValue : r1651_31 -# 1651| m1651_33(int &) = Store[r] : &:r1651_20, r1651_32 -# 1651| r1651_34(glval) = VariableAddress[rv] : -# 1651| r1651_35(glval) = VariableAddress[(unnamed local variable)] : -# 1651| r1651_36(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_35, m1651_4 -# 1651| r1651_37(glval) = CopyValue : r1651_36 -# 1651| r1651_38(glval) = FunctionAddress[get] : -# 1651| r1651_39(int &&) = Call[get] : func:r1651_38, this:r1651_37 -# 1651| m1651_40(unknown) = ^CallSideEffect : ~m1651_27 -# 1651| m1651_41(unknown) = Chi : total:m1651_27, partial:m1651_40 -# 1651| v1651_42(void) = ^IndirectReadSideEffect[-1] : &:r1651_37, m1651_30 -# 1651| m1651_43(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1651_37 -# 1651| m1651_44(StructuredBindingTupleNoRefGet) = Chi : total:m1651_30, partial:m1651_43 -# 1651| r1651_45(glval) = CopyValue : r1651_39 -# 1651| r1651_46(int &) = CopyValue : r1651_45 -# 1651| m1651_47(int &&) = Store[rv] : &:r1651_34, r1651_46 -# 1652| r1652_1(int) = Constant[4] : -# 1652| r1652_2(glval) = VariableAddress[i] : -# 1652| r1652_3(int &&) = Load[i] : &:r1652_2, m1651_19 -# 1652| r1652_4(glval) = CopyValue : r1652_3 -# 1652| m1652_5(int) = Store[?] : &:r1652_4, r1652_1 -# 1653| r1653_1(glval) = VariableAddress[ri] : -# 1653| r1653_2(glval) = VariableAddress[i] : -# 1653| r1653_3(int &&) = Load[i] : &:r1653_2, m1651_19 -# 1653| r1653_4(glval) = CopyValue : r1653_3 -# 1653| r1653_5(int &) = CopyValue : r1653_4 -# 1653| m1653_6(int &) = Store[ri] : &:r1653_1, r1653_5 -# 1654| r1654_1(glval) = VariableAddress[v] : -# 1654| r1654_2(glval) = VariableAddress[i] : -# 1654| r1654_3(int &&) = Load[i] : &:r1654_2, m1651_19 -# 1654| r1654_4(int) = Load[?] : &:r1654_3, m1652_5 -# 1654| m1654_5(int) = Store[v] : &:r1654_1, r1654_4 -# 1655| r1655_1(int) = Constant[5] : -# 1655| r1655_2(glval) = VariableAddress[r] : -# 1655| r1655_3(int &) = Load[r] : &:r1655_2, m1651_33 -# 1655| r1655_4(glval) = CopyValue : r1655_3 -# 1655| m1655_5(int) = Store[?] : &:r1655_4, r1655_1 -# 1655| m1655_6(unknown) = Chi : total:m1651_41, partial:m1655_5 -# 1656| r1656_1(glval) = VariableAddress[rr] : -# 1656| r1656_2(glval) = VariableAddress[r] : -# 1656| r1656_3(int &) = Load[r] : &:r1656_2, m1651_33 -# 1656| r1656_4(glval) = CopyValue : r1656_3 -# 1656| r1656_5(int &) = CopyValue : r1656_4 -# 1656| m1656_6(int &) = Store[rr] : &:r1656_1, r1656_5 -# 1657| r1657_1(glval) = VariableAddress[w] : -# 1657| r1657_2(glval) = VariableAddress[r] : -# 1657| r1657_3(int &) = Load[r] : &:r1657_2, m1651_33 -# 1657| r1657_4(int) = Load[?] : &:r1657_3, ~m1655_6 -# 1657| m1657_5(int) = Store[w] : &:r1657_1, r1657_4 -# 1661| r1661_1(glval) = VariableAddress[unnamed_local_variable] : -# 1661| r1661_2(glval) = VariableAddress[t] : -# 1661| r1661_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1661_2 -# 1661| m1661_4(StructuredBindingTupleNoRefGet &) = Store[unnamed_local_variable] : &:r1661_1, r1661_3 -# 1662| r1662_1(glval) = VariableAddress[i] : -# 1662| r1662_2(glval) = VariableAddress[#temp1662:20] : -# 1662| r1662_3(glval) = VariableAddress[unnamed_local_variable] : -# 1662| r1662_4(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1662_3, m1661_4 -# 1662| r1662_5(glval) = CopyValue : r1662_4 -# 1662| r1662_6(glval) = FunctionAddress[get] : -# 1662| r1662_7(int) = Call[get] : func:r1662_6, this:r1662_5 -# 1662| m1662_8(unknown) = ^CallSideEffect : ~m1655_6 -# 1662| m1662_9(unknown) = Chi : total:m1655_6, partial:m1662_8 -# 1662| v1662_10(void) = ^IndirectReadSideEffect[-1] : &:r1662_5, m1651_44 -# 1662| m1662_11(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1662_5 -# 1662| m1662_12(StructuredBindingTupleNoRefGet) = Chi : total:m1651_44, partial:m1662_11 -# 1662| m1662_13(int) = Store[#temp1662:20] : &:r1662_2, r1662_7 -# 1662| r1662_14(int &) = CopyValue : r1662_2 -# 1662| m1662_15(int &&) = Store[i] : &:r1662_1, r1662_14 -# 1663| r1663_1(glval) = VariableAddress[r] : -# 1663| r1663_2(glval) = VariableAddress[unnamed_local_variable] : -# 1663| r1663_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1663_2, m1661_4 -# 1663| r1663_4(glval) = CopyValue : r1663_3 -# 1663| r1663_5(glval) = FunctionAddress[get] : -# 1663| r1663_6(int &) = Call[get] : func:r1663_5, this:r1663_4 -# 1663| m1663_7(unknown) = ^CallSideEffect : ~m1662_9 -# 1663| m1663_8(unknown) = Chi : total:m1662_9, partial:m1663_7 -# 1663| v1663_9(void) = ^IndirectReadSideEffect[-1] : &:r1663_4, m1662_12 -# 1663| m1663_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1663_4 -# 1663| m1663_11(StructuredBindingTupleNoRefGet) = Chi : total:m1662_12, partial:m1663_10 -# 1663| r1663_12(glval) = CopyValue : r1663_6 -# 1663| r1663_13(int &) = CopyValue : r1663_12 -# 1663| m1663_14(int &) = Store[r] : &:r1663_1, r1663_13 -# 1664| r1664_1(glval) = VariableAddress[rv] : -# 1664| r1664_2(glval) = VariableAddress[unnamed_local_variable] : -# 1664| r1664_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1664_2, m1661_4 -# 1664| r1664_4(glval) = CopyValue : r1664_3 -# 1664| r1664_5(glval) = FunctionAddress[get] : -# 1664| r1664_6(int &&) = Call[get] : func:r1664_5, this:r1664_4 -# 1664| m1664_7(unknown) = ^CallSideEffect : ~m1663_8 -# 1664| m1664_8(unknown) = Chi : total:m1663_8, partial:m1664_7 -# 1664| v1664_9(void) = ^IndirectReadSideEffect[-1] : &:r1664_4, m1663_11 -# 1664| m1664_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1664_4 -# 1664| m1664_11(StructuredBindingTupleNoRefGet) = Chi : total:m1663_11, partial:m1664_10 -# 1664| r1664_12(glval) = CopyValue : r1664_6 -# 1664| r1664_13(int &) = CopyValue : r1664_12 -# 1664| m1664_14(int &&) = Store[rv] : &:r1664_1, r1664_13 -# 1665| r1665_1(int) = Constant[4] : -# 1665| r1665_2(glval) = VariableAddress[i] : -# 1665| r1665_3(int &&) = Load[i] : &:r1665_2, m1662_15 -# 1665| r1665_4(glval) = CopyValue : r1665_3 -# 1665| m1665_5(int) = Store[?] : &:r1665_4, r1665_1 -# 1666| r1666_1(glval) = VariableAddress[ri] : -# 1666| r1666_2(glval) = VariableAddress[i] : -# 1666| r1666_3(int &&) = Load[i] : &:r1666_2, m1662_15 -# 1666| r1666_4(glval) = CopyValue : r1666_3 -# 1666| r1666_5(int &) = CopyValue : r1666_4 -# 1666| m1666_6(int &) = Store[ri] : &:r1666_1, r1666_5 -# 1667| r1667_1(glval) = VariableAddress[v] : -# 1667| r1667_2(glval) = VariableAddress[i] : -# 1667| r1667_3(int &&) = Load[i] : &:r1667_2, m1662_15 -# 1667| r1667_4(int) = Load[?] : &:r1667_3, m1665_5 -# 1667| m1667_5(int) = Store[v] : &:r1667_1, r1667_4 -# 1668| r1668_1(int) = Constant[5] : -# 1668| r1668_2(glval) = VariableAddress[r] : -# 1668| r1668_3(int &) = Load[r] : &:r1668_2, m1663_14 -# 1668| r1668_4(glval) = CopyValue : r1668_3 -# 1668| m1668_5(int) = Store[?] : &:r1668_4, r1668_1 -# 1668| m1668_6(unknown) = Chi : total:m1664_8, partial:m1668_5 -# 1669| r1669_1(glval) = VariableAddress[rr] : -# 1669| r1669_2(glval) = VariableAddress[r] : -# 1669| r1669_3(int &) = Load[r] : &:r1669_2, m1663_14 -# 1669| r1669_4(glval) = CopyValue : r1669_3 -# 1669| r1669_5(int &) = CopyValue : r1669_4 -# 1669| m1669_6(int &) = Store[rr] : &:r1669_1, r1669_5 -# 1670| r1670_1(glval) = VariableAddress[w] : -# 1670| r1670_2(glval) = VariableAddress[r] : -# 1670| r1670_3(int &) = Load[r] : &:r1670_2, m1663_14 -# 1670| r1670_4(int) = Load[?] : &:r1670_3, ~m1668_6 -# 1670| m1670_5(int) = Store[w] : &:r1670_1, r1670_4 -# 1672| v1672_1(void) = NoOp : -# 1647| v1647_5(void) = ReturnVoid : -# 1647| v1647_6(void) = AliasedUse : ~m1668_6 -# 1647| v1647_7(void) = ExitFunction : +# 1694| void tuple_structured_binding_no_ref_get() +# 1694| Block 0 +# 1694| v1694_1(void) = EnterFunction : +# 1694| m1694_2(unknown) = AliasedDefinition : +# 1694| m1694_3(unknown) = InitializeNonLocal : +# 1694| m1694_4(unknown) = Chi : total:m1694_2, partial:m1694_3 +# 1695| r1695_1(glval) = VariableAddress[t] : +# 1695| m1695_2(StructuredBindingTupleNoRefGet) = Uninitialized[t] : &:r1695_1 +# 1695| r1695_3(glval) = FunctionAddress[StructuredBindingTupleNoRefGet] : +# 1695| v1695_4(void) = Call[StructuredBindingTupleNoRefGet] : func:r1695_3, this:r1695_1 +# 1695| m1695_5(unknown) = ^CallSideEffect : ~m1694_4 +# 1695| m1695_6(unknown) = Chi : total:m1694_4, partial:m1695_5 +# 1695| m1695_7(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1695_1 +# 1695| m1695_8(StructuredBindingTupleNoRefGet) = Chi : total:m1695_2, partial:m1695_7 +# 1698| r1698_1(glval) = VariableAddress[(unnamed local variable)] : +# 1698| r1698_2(glval) = VariableAddress[t] : +# 1698| r1698_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1698_2 +# 1698| m1698_4(StructuredBindingTupleNoRefGet &) = Store[(unnamed local variable)] : &:r1698_1, r1698_3 +# 1698| r1698_5(glval) = VariableAddress[i] : +# 1698| r1698_6(glval) = VariableAddress[#temp1698:16] : +# 1698| r1698_7(glval) = VariableAddress[(unnamed local variable)] : +# 1698| r1698_8(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1698_7, m1698_4 +# 1698| r1698_9(glval) = CopyValue : r1698_8 +# 1698| r1698_10(glval) = FunctionAddress[get] : +# 1698| r1698_11(int) = Call[get] : func:r1698_10, this:r1698_9 +# 1698| m1698_12(unknown) = ^CallSideEffect : ~m1695_6 +# 1698| m1698_13(unknown) = Chi : total:m1695_6, partial:m1698_12 +# 1698| v1698_14(void) = ^IndirectReadSideEffect[-1] : &:r1698_9, m1695_8 +# 1698| m1698_15(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1698_9 +# 1698| m1698_16(StructuredBindingTupleNoRefGet) = Chi : total:m1695_8, partial:m1698_15 +# 1698| m1698_17(int) = Store[#temp1698:16] : &:r1698_6, r1698_11 +# 1698| r1698_18(int &) = CopyValue : r1698_6 +# 1698| m1698_19(int &&) = Store[i] : &:r1698_5, r1698_18 +# 1698| r1698_20(glval) = VariableAddress[r] : +# 1698| r1698_21(glval) = VariableAddress[(unnamed local variable)] : +# 1698| r1698_22(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1698_21, m1698_4 +# 1698| r1698_23(glval) = CopyValue : r1698_22 +# 1698| r1698_24(glval) = FunctionAddress[get] : +# 1698| r1698_25(int &) = Call[get] : func:r1698_24, this:r1698_23 +# 1698| m1698_26(unknown) = ^CallSideEffect : ~m1698_13 +# 1698| m1698_27(unknown) = Chi : total:m1698_13, partial:m1698_26 +# 1698| v1698_28(void) = ^IndirectReadSideEffect[-1] : &:r1698_23, m1698_16 +# 1698| m1698_29(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1698_23 +# 1698| m1698_30(StructuredBindingTupleNoRefGet) = Chi : total:m1698_16, partial:m1698_29 +# 1698| r1698_31(glval) = CopyValue : r1698_25 +# 1698| r1698_32(int &) = CopyValue : r1698_31 +# 1698| m1698_33(int &) = Store[r] : &:r1698_20, r1698_32 +# 1698| r1698_34(glval) = VariableAddress[rv] : +# 1698| r1698_35(glval) = VariableAddress[(unnamed local variable)] : +# 1698| r1698_36(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1698_35, m1698_4 +# 1698| r1698_37(glval) = CopyValue : r1698_36 +# 1698| r1698_38(glval) = FunctionAddress[get] : +# 1698| r1698_39(int &&) = Call[get] : func:r1698_38, this:r1698_37 +# 1698| m1698_40(unknown) = ^CallSideEffect : ~m1698_27 +# 1698| m1698_41(unknown) = Chi : total:m1698_27, partial:m1698_40 +# 1698| v1698_42(void) = ^IndirectReadSideEffect[-1] : &:r1698_37, m1698_30 +# 1698| m1698_43(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1698_37 +# 1698| m1698_44(StructuredBindingTupleNoRefGet) = Chi : total:m1698_30, partial:m1698_43 +# 1698| r1698_45(glval) = CopyValue : r1698_39 +# 1698| r1698_46(int &) = CopyValue : r1698_45 +# 1698| m1698_47(int &&) = Store[rv] : &:r1698_34, r1698_46 +# 1699| r1699_1(int) = Constant[4] : +# 1699| r1699_2(glval) = VariableAddress[i] : +# 1699| r1699_3(int &&) = Load[i] : &:r1699_2, m1698_19 +# 1699| r1699_4(glval) = CopyValue : r1699_3 +# 1699| m1699_5(int) = Store[?] : &:r1699_4, r1699_1 +# 1700| r1700_1(glval) = VariableAddress[ri] : +# 1700| r1700_2(glval) = VariableAddress[i] : +# 1700| r1700_3(int &&) = Load[i] : &:r1700_2, m1698_19 +# 1700| r1700_4(glval) = CopyValue : r1700_3 +# 1700| r1700_5(int &) = CopyValue : r1700_4 +# 1700| m1700_6(int &) = Store[ri] : &:r1700_1, r1700_5 +# 1701| r1701_1(glval) = VariableAddress[v] : +# 1701| r1701_2(glval) = VariableAddress[i] : +# 1701| r1701_3(int &&) = Load[i] : &:r1701_2, m1698_19 +# 1701| r1701_4(int) = Load[?] : &:r1701_3, m1699_5 +# 1701| m1701_5(int) = Store[v] : &:r1701_1, r1701_4 +# 1702| r1702_1(int) = Constant[5] : +# 1702| r1702_2(glval) = VariableAddress[r] : +# 1702| r1702_3(int &) = Load[r] : &:r1702_2, m1698_33 +# 1702| r1702_4(glval) = CopyValue : r1702_3 +# 1702| m1702_5(int) = Store[?] : &:r1702_4, r1702_1 +# 1702| m1702_6(unknown) = Chi : total:m1698_41, partial:m1702_5 +# 1703| r1703_1(glval) = VariableAddress[rr] : +# 1703| r1703_2(glval) = VariableAddress[r] : +# 1703| r1703_3(int &) = Load[r] : &:r1703_2, m1698_33 +# 1703| r1703_4(glval) = CopyValue : r1703_3 +# 1703| r1703_5(int &) = CopyValue : r1703_4 +# 1703| m1703_6(int &) = Store[rr] : &:r1703_1, r1703_5 +# 1704| r1704_1(glval) = VariableAddress[w] : +# 1704| r1704_2(glval) = VariableAddress[r] : +# 1704| r1704_3(int &) = Load[r] : &:r1704_2, m1698_33 +# 1704| r1704_4(int) = Load[?] : &:r1704_3, ~m1702_6 +# 1704| m1704_5(int) = Store[w] : &:r1704_1, r1704_4 +# 1708| r1708_1(glval) = VariableAddress[unnamed_local_variable] : +# 1708| r1708_2(glval) = VariableAddress[t] : +# 1708| r1708_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1708_2 +# 1708| m1708_4(StructuredBindingTupleNoRefGet &) = Store[unnamed_local_variable] : &:r1708_1, r1708_3 +# 1709| r1709_1(glval) = VariableAddress[i] : +# 1709| r1709_2(glval) = VariableAddress[#temp1709:20] : +# 1709| r1709_3(glval) = VariableAddress[unnamed_local_variable] : +# 1709| r1709_4(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1709_3, m1708_4 +# 1709| r1709_5(glval) = CopyValue : r1709_4 +# 1709| r1709_6(glval) = FunctionAddress[get] : +# 1709| r1709_7(int) = Call[get] : func:r1709_6, this:r1709_5 +# 1709| m1709_8(unknown) = ^CallSideEffect : ~m1702_6 +# 1709| m1709_9(unknown) = Chi : total:m1702_6, partial:m1709_8 +# 1709| v1709_10(void) = ^IndirectReadSideEffect[-1] : &:r1709_5, m1698_44 +# 1709| m1709_11(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1709_5 +# 1709| m1709_12(StructuredBindingTupleNoRefGet) = Chi : total:m1698_44, partial:m1709_11 +# 1709| m1709_13(int) = Store[#temp1709:20] : &:r1709_2, r1709_7 +# 1709| r1709_14(int &) = CopyValue : r1709_2 +# 1709| m1709_15(int &&) = Store[i] : &:r1709_1, r1709_14 +# 1710| r1710_1(glval) = VariableAddress[r] : +# 1710| r1710_2(glval) = VariableAddress[unnamed_local_variable] : +# 1710| r1710_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1710_2, m1708_4 +# 1710| r1710_4(glval) = CopyValue : r1710_3 +# 1710| r1710_5(glval) = FunctionAddress[get] : +# 1710| r1710_6(int &) = Call[get] : func:r1710_5, this:r1710_4 +# 1710| m1710_7(unknown) = ^CallSideEffect : ~m1709_9 +# 1710| m1710_8(unknown) = Chi : total:m1709_9, partial:m1710_7 +# 1710| v1710_9(void) = ^IndirectReadSideEffect[-1] : &:r1710_4, m1709_12 +# 1710| m1710_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1710_4 +# 1710| m1710_11(StructuredBindingTupleNoRefGet) = Chi : total:m1709_12, partial:m1710_10 +# 1710| r1710_12(glval) = CopyValue : r1710_6 +# 1710| r1710_13(int &) = CopyValue : r1710_12 +# 1710| m1710_14(int &) = Store[r] : &:r1710_1, r1710_13 +# 1711| r1711_1(glval) = VariableAddress[rv] : +# 1711| r1711_2(glval) = VariableAddress[unnamed_local_variable] : +# 1711| r1711_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1711_2, m1708_4 +# 1711| r1711_4(glval) = CopyValue : r1711_3 +# 1711| r1711_5(glval) = FunctionAddress[get] : +# 1711| r1711_6(int &&) = Call[get] : func:r1711_5, this:r1711_4 +# 1711| m1711_7(unknown) = ^CallSideEffect : ~m1710_8 +# 1711| m1711_8(unknown) = Chi : total:m1710_8, partial:m1711_7 +# 1711| v1711_9(void) = ^IndirectReadSideEffect[-1] : &:r1711_4, m1710_11 +# 1711| m1711_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1711_4 +# 1711| m1711_11(StructuredBindingTupleNoRefGet) = Chi : total:m1710_11, partial:m1711_10 +# 1711| r1711_12(glval) = CopyValue : r1711_6 +# 1711| r1711_13(int &) = CopyValue : r1711_12 +# 1711| m1711_14(int &&) = Store[rv] : &:r1711_1, r1711_13 +# 1712| r1712_1(int) = Constant[4] : +# 1712| r1712_2(glval) = VariableAddress[i] : +# 1712| r1712_3(int &&) = Load[i] : &:r1712_2, m1709_15 +# 1712| r1712_4(glval) = CopyValue : r1712_3 +# 1712| m1712_5(int) = Store[?] : &:r1712_4, r1712_1 +# 1713| r1713_1(glval) = VariableAddress[ri] : +# 1713| r1713_2(glval) = VariableAddress[i] : +# 1713| r1713_3(int &&) = Load[i] : &:r1713_2, m1709_15 +# 1713| r1713_4(glval) = CopyValue : r1713_3 +# 1713| r1713_5(int &) = CopyValue : r1713_4 +# 1713| m1713_6(int &) = Store[ri] : &:r1713_1, r1713_5 +# 1714| r1714_1(glval) = VariableAddress[v] : +# 1714| r1714_2(glval) = VariableAddress[i] : +# 1714| r1714_3(int &&) = Load[i] : &:r1714_2, m1709_15 +# 1714| r1714_4(int) = Load[?] : &:r1714_3, m1712_5 +# 1714| m1714_5(int) = Store[v] : &:r1714_1, r1714_4 +# 1715| r1715_1(int) = Constant[5] : +# 1715| r1715_2(glval) = VariableAddress[r] : +# 1715| r1715_3(int &) = Load[r] : &:r1715_2, m1710_14 +# 1715| r1715_4(glval) = CopyValue : r1715_3 +# 1715| m1715_5(int) = Store[?] : &:r1715_4, r1715_1 +# 1715| m1715_6(unknown) = Chi : total:m1711_8, partial:m1715_5 +# 1716| r1716_1(glval) = VariableAddress[rr] : +# 1716| r1716_2(glval) = VariableAddress[r] : +# 1716| r1716_3(int &) = Load[r] : &:r1716_2, m1710_14 +# 1716| r1716_4(glval) = CopyValue : r1716_3 +# 1716| r1716_5(int &) = CopyValue : r1716_4 +# 1716| m1716_6(int &) = Store[rr] : &:r1716_1, r1716_5 +# 1717| r1717_1(glval) = VariableAddress[w] : +# 1717| r1717_2(glval) = VariableAddress[r] : +# 1717| r1717_3(int &) = Load[r] : &:r1717_2, m1710_14 +# 1717| r1717_4(int) = Load[?] : &:r1717_3, ~m1715_6 +# 1717| m1717_5(int) = Store[w] : &:r1717_1, r1717_4 +# 1719| v1719_1(void) = NoOp : +# 1694| v1694_5(void) = ReturnVoid : +# 1694| v1694_6(void) = AliasedUse : ~m1715_6 +# 1694| v1694_7(void) = ExitFunction : -# 1674| void array_structured_binding_non_ref_init() -# 1674| Block 0 -# 1674| v1674_1(void) = EnterFunction : -# 1674| m1674_2(unknown) = AliasedDefinition : -# 1674| m1674_3(unknown) = InitializeNonLocal : -# 1674| m1674_4(unknown) = Chi : total:m1674_2, partial:m1674_3 -# 1675| r1675_1(glval) = VariableAddress[xs] : -# 1675| m1675_2(int[2]) = Uninitialized[xs] : &:r1675_1 -# 1675| r1675_3(int) = Constant[0] : -# 1675| r1675_4(glval) = PointerAdd[4] : r1675_1, r1675_3 -# 1675| r1675_5(int) = Constant[1] : -# 1675| m1675_6(int) = Store[?] : &:r1675_4, r1675_5 -# 1675| m1675_7(int[2]) = Chi : total:m1675_2, partial:m1675_6 -# 1675| r1675_8(int) = Constant[1] : -# 1675| r1675_9(glval) = PointerAdd[4] : r1675_1, r1675_8 -# 1675| r1675_10(int) = Constant[2] : -# 1675| m1675_11(int) = Store[?] : &:r1675_9, r1675_10 -# 1675| m1675_12(int[2]) = Chi : total:m1675_7, partial:m1675_11 -# 1676| r1676_1(glval) = VariableAddress[(unnamed local variable)] : -# 1676| r1676_2(glval) = VariableAddress[xs] : -# 1676| r1676_3(int[2]) = Load[xs] : &:r1676_2, m1675_12 -# 1676| m1676_4(int[2]) = Store[(unnamed local variable)] : &:r1676_1, r1676_3 -# 1676| r1676_5(glval) = VariableAddress[x0] : +# 1721| void array_structured_binding_non_ref_init() +# 1721| Block 0 +# 1721| v1721_1(void) = EnterFunction : +# 1721| m1721_2(unknown) = AliasedDefinition : +# 1721| m1721_3(unknown) = InitializeNonLocal : +# 1721| m1721_4(unknown) = Chi : total:m1721_2, partial:m1721_3 +# 1722| r1722_1(glval) = VariableAddress[xs] : +# 1722| m1722_2(int[2]) = Uninitialized[xs] : &:r1722_1 +# 1722| r1722_3(int) = Constant[0] : +# 1722| r1722_4(glval) = PointerAdd[4] : r1722_1, r1722_3 +# 1722| r1722_5(int) = Constant[1] : +# 1722| m1722_6(int) = Store[?] : &:r1722_4, r1722_5 +# 1722| m1722_7(int[2]) = Chi : total:m1722_2, partial:m1722_6 +# 1722| r1722_8(int) = Constant[1] : +# 1722| r1722_9(glval) = PointerAdd[4] : r1722_1, r1722_8 +# 1722| r1722_10(int) = Constant[2] : +# 1722| m1722_11(int) = Store[?] : &:r1722_9, r1722_10 +# 1722| m1722_12(int[2]) = Chi : total:m1722_7, partial:m1722_11 +# 1723| r1723_1(glval) = VariableAddress[(unnamed local variable)] : +# 1723| r1723_2(glval) = VariableAddress[xs] : +# 1723| r1723_3(int[2]) = Load[xs] : &:r1723_2, m1722_12 +# 1723| m1723_4(int[2]) = Store[(unnamed local variable)] : &:r1723_1, r1723_3 +# 1723| r1723_5(glval) = VariableAddress[x0] : #-----| r0_1(glval) = VariableAddress[(unnamed local variable)] : #-----| r0_2(int *) = Convert : r0_1 #-----| r0_3(unsigned long) = Constant[0] : #-----| r0_4(glval) = PointerAdd[4] : r0_2, r0_3 -#-----| m0_5(int &) = Store[x0] : &:r1676_5, r0_4 -# 1676| r1676_6(glval) = VariableAddress[x1] : +#-----| m0_5(int &) = Store[x0] : &:r1723_5, r0_4 +# 1723| r1723_6(glval) = VariableAddress[x1] : #-----| r0_6(glval) = VariableAddress[(unnamed local variable)] : #-----| r0_7(int *) = Convert : r0_6 #-----| r0_8(unsigned long) = Constant[1] : #-----| r0_9(glval) = PointerAdd[4] : r0_7, r0_8 -#-----| m0_10(int &) = Store[x1] : &:r1676_6, r0_9 -# 1677| v1677_1(void) = NoOp : -# 1674| v1674_5(void) = ReturnVoid : -# 1674| v1674_6(void) = AliasedUse : m1674_3 -# 1674| v1674_7(void) = ExitFunction : +#-----| m0_10(int &) = Store[x1] : &:r1723_6, r0_9 +# 1724| v1724_1(void) = NoOp : +# 1721| v1721_5(void) = ReturnVoid : +# 1721| v1721_6(void) = AliasedUse : m1721_3 +# 1721| v1721_7(void) = ExitFunction : -# 1682| void CapturedLambdaMyObj::CapturedLambdaMyObj() -# 1682| Block 0 -# 1682| v1682_1(void) = EnterFunction : -# 1682| m1682_2(unknown) = AliasedDefinition : -# 1682| m1682_3(unknown) = InitializeNonLocal : -# 1682| m1682_4(unknown) = Chi : total:m1682_2, partial:m1682_3 -# 1682| r1682_5(glval) = VariableAddress[#this] : -# 1682| m1682_6(glval) = InitializeParameter[#this] : &:r1682_5 -# 1682| r1682_7(glval) = Load[#this] : &:r1682_5, m1682_6 -# 1682| m1682_8(CapturedLambdaMyObj) = InitializeIndirection[#this] : &:r1682_7 -# 1682| v1682_9(void) = NoOp : -# 1682| v1682_10(void) = ReturnIndirection[#this] : &:r1682_7, m1682_8 -# 1682| v1682_11(void) = ReturnVoid : -# 1682| v1682_12(void) = AliasedUse : m1682_3 -# 1682| v1682_13(void) = ExitFunction : +# 1729| void CapturedLambdaMyObj::CapturedLambdaMyObj() +# 1729| Block 0 +# 1729| v1729_1(void) = EnterFunction : +# 1729| m1729_2(unknown) = AliasedDefinition : +# 1729| m1729_3(unknown) = InitializeNonLocal : +# 1729| m1729_4(unknown) = Chi : total:m1729_2, partial:m1729_3 +# 1729| r1729_5(glval) = VariableAddress[#this] : +# 1729| m1729_6(glval) = InitializeParameter[#this] : &:r1729_5 +# 1729| r1729_7(glval) = Load[#this] : &:r1729_5, m1729_6 +# 1729| m1729_8(CapturedLambdaMyObj) = InitializeIndirection[#this] : &:r1729_7 +# 1729| v1729_9(void) = NoOp : +# 1729| v1729_10(void) = ReturnIndirection[#this] : &:r1729_7, m1729_8 +# 1729| v1729_11(void) = ReturnVoid : +# 1729| v1729_12(void) = AliasedUse : m1729_3 +# 1729| v1729_13(void) = ExitFunction : -# 1685| void captured_lambda(int, int&, int&&) -# 1685| Block 0 -# 1685| v1685_1(void) = EnterFunction : -# 1685| m1685_2(unknown) = AliasedDefinition : -# 1685| m1685_3(unknown) = InitializeNonLocal : -# 1685| m1685_4(unknown) = Chi : total:m1685_2, partial:m1685_3 -# 1685| r1685_5(glval) = VariableAddress[x] : -# 1685| m1685_6(int) = InitializeParameter[x] : &:r1685_5 -# 1685| r1685_7(glval) = VariableAddress[y] : -# 1685| m1685_8(int &) = InitializeParameter[y] : &:r1685_7 -# 1685| r1685_9(int &) = Load[y] : &:r1685_7, m1685_8 -# 1685| m1685_10(unknown) = InitializeIndirection[y] : &:r1685_9 -# 1685| r1685_11(glval) = VariableAddress[z] : -# 1685| m1685_12(int &&) = InitializeParameter[z] : &:r1685_11 -# 1685| r1685_13(int &&) = Load[z] : &:r1685_11, m1685_12 -# 1685| m1685_14(unknown) = InitializeIndirection[z] : &:r1685_13 -# 1687| r1687_1(glval) = VariableAddress[obj1] : -# 1687| r1687_2(glval) = VariableAddress[#temp1687:24] : -# 1687| m1687_3(CapturedLambdaMyObj) = Uninitialized[#temp1687:24] : &:r1687_2 -# 1687| r1687_4(glval) = FunctionAddress[CapturedLambdaMyObj] : -# 1687| v1687_5(void) = Call[CapturedLambdaMyObj] : func:r1687_4, this:r1687_2 -# 1687| m1687_6(unknown) = ^CallSideEffect : ~m1685_4 -# 1687| m1687_7(unknown) = Chi : total:m1685_4, partial:m1687_6 -# 1687| m1687_8(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1687_2 -# 1687| m1687_9(CapturedLambdaMyObj) = Chi : total:m1687_3, partial:m1687_8 -# 1687| r1687_10(glval) = Convert : r1687_2 -# 1687| r1687_11(CapturedLambdaMyObj &) = CopyValue : r1687_10 -# 1687| m1687_12(CapturedLambdaMyObj &) = Store[obj1] : &:r1687_1, r1687_11 -# 1688| r1688_1(glval) = VariableAddress[obj2] : -# 1688| m1688_2(CapturedLambdaMyObj) = Uninitialized[obj2] : &:r1688_1 -# 1688| r1688_3(glval) = FunctionAddress[CapturedLambdaMyObj] : -# 1688| v1688_4(void) = Call[CapturedLambdaMyObj] : func:r1688_3, this:r1688_1 -# 1688| m1688_5(unknown) = ^CallSideEffect : ~m1687_7 -# 1688| m1688_6(unknown) = Chi : total:m1687_7, partial:m1688_5 -# 1688| m1688_7(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1688_1 -# 1688| m1688_8(CapturedLambdaMyObj) = Chi : total:m1688_2, partial:m1688_7 -# 1690| r1690_1(glval) = VariableAddress[lambda_outer] : -# 1690| r1690_2(glval) = VariableAddress[#temp1690:24] : -# 1690| m1690_3(decltype([...](...){...})) = Uninitialized[#temp1690:24] : &:r1690_2 -# 1690| r1690_4(glval) = FieldAddress[obj1] : r1690_2 -# 1690| r1690_5(glval) = VariableAddress[obj1] : -# 1690| r1690_6(CapturedLambdaMyObj &) = Load[obj1] : &:r1690_5, m1687_12 -#-----| r0_1(CapturedLambdaMyObj) = Load[?] : &:r1690_6, m1687_9 -#-----| m0_2(CapturedLambdaMyObj) = Store[?] : &:r1690_4, r0_1 -#-----| m0_3(decltype([...](...){...})) = Chi : total:m1690_3, partial:m0_2 -# 1690| r1690_7(glval) = FieldAddress[obj2] : r1690_2 -# 1690| r1690_8(glval) = VariableAddress[obj2] : -# 1690| r1690_9(CapturedLambdaMyObj) = Load[obj2] : &:r1690_8, m1688_8 -# 1690| m1690_10(CapturedLambdaMyObj) = Store[?] : &:r1690_7, r1690_9 -# 1690| m1690_11(decltype([...](...){...})) = Chi : total:m0_3, partial:m1690_10 -# 1690| r1690_12(glval) = FieldAddress[x] : r1690_2 -# 1690| r1690_13(glval) = VariableAddress[x] : -# 1690| r1690_14(int) = Load[x] : &:r1690_13, m1685_6 -# 1690| m1690_15(int) = Store[?] : &:r1690_12, r1690_14 -# 1690| m1690_16(decltype([...](...){...})) = Chi : total:m1690_11, partial:m1690_15 -# 1690| r1690_17(glval) = FieldAddress[y] : r1690_2 -# 1690| r1690_18(glval) = VariableAddress[y] : -# 1690| r1690_19(int &) = Load[y] : &:r1690_18, m1685_8 -# 1692| r1692_1(int) = Load[?] : &:r1690_19, ~m1685_10 -# 1692| m1692_2(int) = Store[?] : &:r1690_17, r1692_1 -# 1692| m1692_3(decltype([...](...){...})) = Chi : total:m1690_16, partial:m1692_2 -# 1690| r1690_20(glval) = FieldAddress[z] : r1690_2 -# 1690| r1690_21(glval) = VariableAddress[z] : -# 1690| r1690_22(int &&) = Load[z] : &:r1690_21, m1685_12 -# 1692| r1692_4(int) = Load[?] : &:r1690_22, ~m1685_14 -# 1692| m1692_5(int) = Store[?] : &:r1690_20, r1692_4 -# 1692| m1692_6(decltype([...](...){...})) = Chi : total:m1692_3, partial:m1692_5 -# 1690| r1690_23(decltype([...](...){...})) = Load[#temp1690:24] : &:r1690_2, m1692_6 -# 1690| m1690_24(decltype([...](...){...})) = Store[lambda_outer] : &:r1690_1, r1690_23 -# 1693| v1693_1(void) = NoOp : -# 1685| v1685_15(void) = ReturnIndirection[y] : &:r1685_9, m1685_10 -# 1685| v1685_16(void) = ReturnIndirection[z] : &:r1685_13, m1685_14 -# 1685| v1685_17(void) = ReturnVoid : -# 1685| v1685_18(void) = AliasedUse : ~m1688_6 -# 1685| v1685_19(void) = ExitFunction : +# 1732| void captured_lambda(int, int&, int&&) +# 1732| Block 0 +# 1732| v1732_1(void) = EnterFunction : +# 1732| m1732_2(unknown) = AliasedDefinition : +# 1732| m1732_3(unknown) = InitializeNonLocal : +# 1732| m1732_4(unknown) = Chi : total:m1732_2, partial:m1732_3 +# 1732| r1732_5(glval) = VariableAddress[x] : +# 1732| m1732_6(int) = InitializeParameter[x] : &:r1732_5 +# 1732| r1732_7(glval) = VariableAddress[y] : +# 1732| m1732_8(int &) = InitializeParameter[y] : &:r1732_7 +# 1732| r1732_9(int &) = Load[y] : &:r1732_7, m1732_8 +# 1732| m1732_10(unknown) = InitializeIndirection[y] : &:r1732_9 +# 1732| r1732_11(glval) = VariableAddress[z] : +# 1732| m1732_12(int &&) = InitializeParameter[z] : &:r1732_11 +# 1732| r1732_13(int &&) = Load[z] : &:r1732_11, m1732_12 +# 1732| m1732_14(unknown) = InitializeIndirection[z] : &:r1732_13 +# 1734| r1734_1(glval) = VariableAddress[obj1] : +# 1734| r1734_2(glval) = VariableAddress[#temp1734:24] : +# 1734| m1734_3(CapturedLambdaMyObj) = Uninitialized[#temp1734:24] : &:r1734_2 +# 1734| r1734_4(glval) = FunctionAddress[CapturedLambdaMyObj] : +# 1734| v1734_5(void) = Call[CapturedLambdaMyObj] : func:r1734_4, this:r1734_2 +# 1734| m1734_6(unknown) = ^CallSideEffect : ~m1732_4 +# 1734| m1734_7(unknown) = Chi : total:m1732_4, partial:m1734_6 +# 1734| m1734_8(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1734_2 +# 1734| m1734_9(CapturedLambdaMyObj) = Chi : total:m1734_3, partial:m1734_8 +# 1734| r1734_10(glval) = Convert : r1734_2 +# 1734| r1734_11(CapturedLambdaMyObj &) = CopyValue : r1734_10 +# 1734| m1734_12(CapturedLambdaMyObj &) = Store[obj1] : &:r1734_1, r1734_11 +# 1735| r1735_1(glval) = VariableAddress[obj2] : +# 1735| m1735_2(CapturedLambdaMyObj) = Uninitialized[obj2] : &:r1735_1 +# 1735| r1735_3(glval) = FunctionAddress[CapturedLambdaMyObj] : +# 1735| v1735_4(void) = Call[CapturedLambdaMyObj] : func:r1735_3, this:r1735_1 +# 1735| m1735_5(unknown) = ^CallSideEffect : ~m1734_7 +# 1735| m1735_6(unknown) = Chi : total:m1734_7, partial:m1735_5 +# 1735| m1735_7(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1735_1 +# 1735| m1735_8(CapturedLambdaMyObj) = Chi : total:m1735_2, partial:m1735_7 +# 1737| r1737_1(glval) = VariableAddress[lambda_outer] : +# 1737| r1737_2(glval) = VariableAddress[#temp1737:24] : +# 1737| m1737_3(decltype([...](...){...})) = Uninitialized[#temp1737:24] : &:r1737_2 +# 1737| r1737_4(glval) = FieldAddress[obj1] : r1737_2 +# 1737| r1737_5(glval) = VariableAddress[obj1] : +# 1737| r1737_6(CapturedLambdaMyObj &) = Load[obj1] : &:r1737_5, m1734_12 +#-----| r0_1(CapturedLambdaMyObj) = Load[?] : &:r1737_6, m1734_9 +#-----| m0_2(CapturedLambdaMyObj) = Store[?] : &:r1737_4, r0_1 +#-----| m0_3(decltype([...](...){...})) = Chi : total:m1737_3, partial:m0_2 +# 1737| r1737_7(glval) = FieldAddress[obj2] : r1737_2 +# 1737| r1737_8(glval) = VariableAddress[obj2] : +# 1737| r1737_9(CapturedLambdaMyObj) = Load[obj2] : &:r1737_8, m1735_8 +# 1737| m1737_10(CapturedLambdaMyObj) = Store[?] : &:r1737_7, r1737_9 +# 1737| m1737_11(decltype([...](...){...})) = Chi : total:m0_3, partial:m1737_10 +# 1737| r1737_12(glval) = FieldAddress[x] : r1737_2 +# 1737| r1737_13(glval) = VariableAddress[x] : +# 1737| r1737_14(int) = Load[x] : &:r1737_13, m1732_6 +# 1737| m1737_15(int) = Store[?] : &:r1737_12, r1737_14 +# 1737| m1737_16(decltype([...](...){...})) = Chi : total:m1737_11, partial:m1737_15 +# 1737| r1737_17(glval) = FieldAddress[y] : r1737_2 +# 1737| r1737_18(glval) = VariableAddress[y] : +# 1737| r1737_19(int &) = Load[y] : &:r1737_18, m1732_8 +# 1739| r1739_1(int) = Load[?] : &:r1737_19, ~m1732_10 +# 1739| m1739_2(int) = Store[?] : &:r1737_17, r1739_1 +# 1739| m1739_3(decltype([...](...){...})) = Chi : total:m1737_16, partial:m1739_2 +# 1737| r1737_20(glval) = FieldAddress[z] : r1737_2 +# 1737| r1737_21(glval) = VariableAddress[z] : +# 1737| r1737_22(int &&) = Load[z] : &:r1737_21, m1732_12 +# 1739| r1739_4(int) = Load[?] : &:r1737_22, ~m1732_14 +# 1739| m1739_5(int) = Store[?] : &:r1737_20, r1739_4 +# 1739| m1739_6(decltype([...](...){...})) = Chi : total:m1739_3, partial:m1739_5 +# 1737| r1737_23(decltype([...](...){...})) = Load[#temp1737:24] : &:r1737_2, m1739_6 +# 1737| m1737_24(decltype([...](...){...})) = Store[lambda_outer] : &:r1737_1, r1737_23 +# 1740| v1740_1(void) = NoOp : +# 1732| v1732_15(void) = ReturnIndirection[y] : &:r1732_9, m1732_10 +# 1732| v1732_16(void) = ReturnIndirection[z] : &:r1732_13, m1732_14 +# 1732| v1732_17(void) = ReturnVoid : +# 1732| v1732_18(void) = AliasedUse : ~m1735_6 +# 1732| v1732_19(void) = ExitFunction : -# 1690| void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const -# 1690| Block 0 -# 1690| v1690_1(void) = EnterFunction : -# 1690| m1690_2(unknown) = AliasedDefinition : -# 1690| m1690_3(unknown) = InitializeNonLocal : -# 1690| m1690_4(unknown) = Chi : total:m1690_2, partial:m1690_3 -# 1690| r1690_5(glval) = VariableAddress[#this] : -# 1690| m1690_6(glval) = InitializeParameter[#this] : &:r1690_5 -# 1690| r1690_7(glval) = Load[#this] : &:r1690_5, m1690_6 -# 1690| m1690_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1690_7 -# 1691| r1691_1(glval) = VariableAddress[lambda_inner] : -# 1691| r1691_2(glval) = VariableAddress[#temp1691:28] : -# 1691| m1691_3(decltype([...](...){...})) = Uninitialized[#temp1691:28] : &:r1691_2 -# 1691| r1691_4(glval) = FieldAddress[obj1] : r1691_2 -# 1691| r1691_5(glval) = VariableAddress[#this] : -# 1691| r1691_6(lambda [] type at line 1691, col. 29 *) = Load[#this] : &:r1691_5, m1690_6 -# 1691| r1691_7(glval) = FieldAddress[obj1] : r1691_6 -# 1691| r1691_8(CapturedLambdaMyObj) = Load[?] : &:r1691_7, ~m1690_8 -# 1691| m1691_9(CapturedLambdaMyObj) = Store[?] : &:r1691_4, r1691_8 -# 1691| m1691_10(decltype([...](...){...})) = Chi : total:m1691_3, partial:m1691_9 -# 1691| r1691_11(glval) = FieldAddress[obj2] : r1691_2 -# 1691| r1691_12(glval) = VariableAddress[#this] : -# 1691| r1691_13(lambda [] type at line 1691, col. 29 *) = Load[#this] : &:r1691_12, m1690_6 -# 1691| r1691_14(glval) = FieldAddress[obj2] : r1691_13 -# 1691| r1691_15(CapturedLambdaMyObj) = Load[?] : &:r1691_14, ~m1690_8 -# 1691| m1691_16(CapturedLambdaMyObj) = Store[?] : &:r1691_11, r1691_15 -# 1691| m1691_17(decltype([...](...){...})) = Chi : total:m1691_10, partial:m1691_16 -# 1691| r1691_18(glval) = FieldAddress[x] : r1691_2 -# 1691| r1691_19(glval) = VariableAddress[#this] : -# 1691| r1691_20(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_19, m1690_6 -# 1691| r1691_21(glval) = FieldAddress[x] : r1691_20 -# 1691| r1691_22(int) = Load[?] : &:r1691_21, ~m1690_8 -# 1691| m1691_23(int) = Store[?] : &:r1691_18, r1691_22 -# 1691| m1691_24(decltype([...](...){...})) = Chi : total:m1691_17, partial:m1691_23 -# 1691| r1691_25(glval) = FieldAddress[y] : r1691_2 -# 1691| r1691_26(glval) = VariableAddress[#this] : -# 1691| r1691_27(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_26, m1690_6 -# 1691| r1691_28(glval) = FieldAddress[y] : r1691_27 -# 1691| r1691_29(int) = Load[?] : &:r1691_28, ~m1690_8 -# 1691| m1691_30(int) = Store[?] : &:r1691_25, r1691_29 -# 1691| m1691_31(decltype([...](...){...})) = Chi : total:m1691_24, partial:m1691_30 -# 1691| r1691_32(glval) = FieldAddress[z] : r1691_2 -# 1691| r1691_33(glval) = VariableAddress[#this] : -# 1691| r1691_34(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_33, m1690_6 -# 1691| r1691_35(glval) = FieldAddress[z] : r1691_34 -# 1691| r1691_36(int) = Load[?] : &:r1691_35, ~m1690_8 -# 1691| m1691_37(int) = Store[?] : &:r1691_32, r1691_36 -# 1691| m1691_38(decltype([...](...){...})) = Chi : total:m1691_31, partial:m1691_37 -# 1691| r1691_39(decltype([...](...){...})) = Load[#temp1691:28] : &:r1691_2, m1691_38 -# 1691| m1691_40(decltype([...](...){...})) = Store[lambda_inner] : &:r1691_1, r1691_39 -# 1692| v1692_1(void) = NoOp : -# 1690| v1690_9(void) = ReturnIndirection[#this] : &:r1690_7, m1690_8 -# 1690| v1690_10(void) = ReturnVoid : -# 1690| v1690_11(void) = AliasedUse : m1690_3 -# 1690| v1690_12(void) = ExitFunction : +# 1737| void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25)::operator()() const +# 1737| Block 0 +# 1737| v1737_1(void) = EnterFunction : +# 1737| m1737_2(unknown) = AliasedDefinition : +# 1737| m1737_3(unknown) = InitializeNonLocal : +# 1737| m1737_4(unknown) = Chi : total:m1737_2, partial:m1737_3 +# 1737| r1737_5(glval) = VariableAddress[#this] : +# 1737| m1737_6(glval) = InitializeParameter[#this] : &:r1737_5 +# 1737| r1737_7(glval) = Load[#this] : &:r1737_5, m1737_6 +# 1737| m1737_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1737_7 +# 1738| r1738_1(glval) = VariableAddress[lambda_inner] : +# 1738| r1738_2(glval) = VariableAddress[#temp1738:28] : +# 1738| m1738_3(decltype([...](...){...})) = Uninitialized[#temp1738:28] : &:r1738_2 +# 1738| r1738_4(glval) = FieldAddress[obj1] : r1738_2 +# 1738| r1738_5(glval) = VariableAddress[#this] : +# 1738| r1738_6(lambda [] type at line 1738, col. 29 *) = Load[#this] : &:r1738_5, m1737_6 +# 1738| r1738_7(glval) = FieldAddress[obj1] : r1738_6 +# 1738| r1738_8(CapturedLambdaMyObj) = Load[?] : &:r1738_7, ~m1737_8 +# 1738| m1738_9(CapturedLambdaMyObj) = Store[?] : &:r1738_4, r1738_8 +# 1738| m1738_10(decltype([...](...){...})) = Chi : total:m1738_3, partial:m1738_9 +# 1738| r1738_11(glval) = FieldAddress[obj2] : r1738_2 +# 1738| r1738_12(glval) = VariableAddress[#this] : +# 1738| r1738_13(lambda [] type at line 1738, col. 29 *) = Load[#this] : &:r1738_12, m1737_6 +# 1738| r1738_14(glval) = FieldAddress[obj2] : r1738_13 +# 1738| r1738_15(CapturedLambdaMyObj) = Load[?] : &:r1738_14, ~m1737_8 +# 1738| m1738_16(CapturedLambdaMyObj) = Store[?] : &:r1738_11, r1738_15 +# 1738| m1738_17(decltype([...](...){...})) = Chi : total:m1738_10, partial:m1738_16 +# 1738| r1738_18(glval) = FieldAddress[x] : r1738_2 +# 1738| r1738_19(glval) = VariableAddress[#this] : +# 1738| r1738_20(lambda [] type at line 1737, col. 25 *) = Load[#this] : &:r1738_19, m1737_6 +# 1738| r1738_21(glval) = FieldAddress[x] : r1738_20 +# 1738| r1738_22(int) = Load[?] : &:r1738_21, ~m1737_8 +# 1738| m1738_23(int) = Store[?] : &:r1738_18, r1738_22 +# 1738| m1738_24(decltype([...](...){...})) = Chi : total:m1738_17, partial:m1738_23 +# 1738| r1738_25(glval) = FieldAddress[y] : r1738_2 +# 1738| r1738_26(glval) = VariableAddress[#this] : +# 1738| r1738_27(lambda [] type at line 1737, col. 25 *) = Load[#this] : &:r1738_26, m1737_6 +# 1738| r1738_28(glval) = FieldAddress[y] : r1738_27 +# 1738| r1738_29(int) = Load[?] : &:r1738_28, ~m1737_8 +# 1738| m1738_30(int) = Store[?] : &:r1738_25, r1738_29 +# 1738| m1738_31(decltype([...](...){...})) = Chi : total:m1738_24, partial:m1738_30 +# 1738| r1738_32(glval) = FieldAddress[z] : r1738_2 +# 1738| r1738_33(glval) = VariableAddress[#this] : +# 1738| r1738_34(lambda [] type at line 1737, col. 25 *) = Load[#this] : &:r1738_33, m1737_6 +# 1738| r1738_35(glval) = FieldAddress[z] : r1738_34 +# 1738| r1738_36(int) = Load[?] : &:r1738_35, ~m1737_8 +# 1738| m1738_37(int) = Store[?] : &:r1738_32, r1738_36 +# 1738| m1738_38(decltype([...](...){...})) = Chi : total:m1738_31, partial:m1738_37 +# 1738| r1738_39(decltype([...](...){...})) = Load[#temp1738:28] : &:r1738_2, m1738_38 +# 1738| m1738_40(decltype([...](...){...})) = Store[lambda_inner] : &:r1738_1, r1738_39 +# 1739| v1739_1(void) = NoOp : +# 1737| v1737_9(void) = ReturnIndirection[#this] : &:r1737_7, m1737_8 +# 1737| v1737_10(void) = ReturnVoid : +# 1737| v1737_11(void) = AliasedUse : m1737_3 +# 1737| v1737_12(void) = ExitFunction : -# 1691| void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)::operator()() const -# 1691| Block 0 -# 1691| v1691_1(void) = EnterFunction : -# 1691| m1691_2(unknown) = AliasedDefinition : -# 1691| m1691_3(unknown) = InitializeNonLocal : -# 1691| m1691_4(unknown) = Chi : total:m1691_2, partial:m1691_3 -# 1691| r1691_5(glval) = VariableAddress[#this] : -# 1691| m1691_6(glval) = InitializeParameter[#this] : &:r1691_5 -# 1691| r1691_7(glval) = Load[#this] : &:r1691_5, m1691_6 -# 1691| m1691_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1691_7 -# 1691| v1691_9(void) = NoOp : -# 1691| v1691_10(void) = NoOp : -# 1691| v1691_11(void) = ReturnIndirection[#this] : &:r1691_7, m1691_8 -# 1691| v1691_12(void) = ReturnVoid : -# 1691| v1691_13(void) = AliasedUse : m1691_3 -# 1691| v1691_14(void) = ExitFunction : - -# 1695| int goto_on_same_line() -# 1695| Block 0 -# 1695| v1695_1(void) = EnterFunction : -# 1695| m1695_2(unknown) = AliasedDefinition : -# 1695| m1695_3(unknown) = InitializeNonLocal : -# 1695| m1695_4(unknown) = Chi : total:m1695_2, partial:m1695_3 -# 1696| r1696_1(glval) = VariableAddress[x] : -# 1696| r1696_2(int) = Constant[42] : -# 1696| m1696_3(int) = Store[x] : &:r1696_1, r1696_2 -# 1697| v1697_1(void) = NoOp : -# 1697| v1697_2(void) = NoOp : -# 1698| r1698_1(glval) = VariableAddress[#return] : -# 1698| r1698_2(glval) = VariableAddress[x] : -# 1698| r1698_3(int) = Load[x] : &:r1698_2, m1696_3 -# 1698| m1698_4(int) = Store[#return] : &:r1698_1, r1698_3 -# 1695| r1695_5(glval) = VariableAddress[#return] : -# 1695| v1695_6(void) = ReturnValue : &:r1695_5, m1698_4 -# 1695| v1695_7(void) = AliasedUse : m1695_3 -# 1695| v1695_8(void) = ExitFunction : - -# 1703| void TrivialLambdaClass::m() const -# 1703| Block 0 -# 1703| v1703_1(void) = EnterFunction : -# 1703| m1703_2(unknown) = AliasedDefinition : -# 1703| m1703_3(unknown) = InitializeNonLocal : -# 1703| m1703_4(unknown) = Chi : total:m1703_2, partial:m1703_3 -# 1703| r1703_5(glval) = VariableAddress[#this] : -# 1703| m1703_6(glval) = InitializeParameter[#this] : &:r1703_5 -# 1703| r1703_7(glval) = Load[#this] : &:r1703_5, m1703_6 -# 1703| m1703_8(TrivialLambdaClass) = InitializeIndirection[#this] : &:r1703_7 -# 1704| r1704_1(glval) = VariableAddress[l_m_outer] : -# 1704| r1704_2(glval) = VariableAddress[#temp1704:25] : -# 1704| m1704_3(decltype([...](...){...})) = Uninitialized[#temp1704:25] : &:r1704_2 -# 1704| r1704_4(glval) = FieldAddress[(captured this)] : r1704_2 -# 1704| r1704_5(glval) = VariableAddress[#this] : -# 1704| r1704_6(TrivialLambdaClass *) = Load[#this] : &:r1704_5, m1703_6 -# 1704| r1704_7(TrivialLambdaClass) = Load[?] : &:r1704_6, ~m1703_8 -# 1704| m1704_8(TrivialLambdaClass) = Store[?] : &:r1704_4, r1704_7 -# 1704| r1704_9(decltype([...](...){...})) = Load[#temp1704:25] : &:r1704_2, ~m1704_8 -# 1704| m1704_10(decltype([...](...){...})) = Store[l_m_outer] : &:r1704_1, r1704_9 -# 1711| v1711_1(void) = NoOp : -# 1703| v1703_9(void) = ReturnIndirection[#this] : &:r1703_7, m1703_8 -# 1703| v1703_10(void) = ReturnVoid : -# 1703| v1703_11(void) = AliasedUse : m1703_3 -# 1703| v1703_12(void) = ExitFunction : - -# 1704| void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const -# 1704| Block 0 -# 1704| v1704_1(void) = EnterFunction : -# 1704| m1704_2(unknown) = AliasedDefinition : -# 1704| m1704_3(unknown) = InitializeNonLocal : -# 1704| m1704_4(unknown) = Chi : total:m1704_2, partial:m1704_3 -# 1704| r1704_5(glval) = VariableAddress[#this] : -# 1704| m1704_6(glval) = InitializeParameter[#this] : &:r1704_5 -# 1704| r1704_7(glval) = Load[#this] : &:r1704_5, m1704_6 -# 1704| m1704_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1704_7 -# 1705| r1705_1(glval) = VariableAddress[#this] : -# 1705| r1705_2(lambda [] type at line 1704, col. 26 *) = Load[#this] : &:r1705_1, m1704_6 -# 1705| r1705_3(glval) = FieldAddress[(captured this)] : r1705_2 -# 1705| r1705_4(TrivialLambdaClass *) = CopyValue : r1705_3 -# 1705| r1705_5(glval) = FunctionAddress[m] : -# 1705| v1705_6(void) = Call[m] : func:r1705_5, this:r1705_4 -# 1705| m1705_7(unknown) = ^CallSideEffect : ~m1704_4 -# 1705| m1705_8(unknown) = Chi : total:m1704_4, partial:m1705_7 -# 1705| v1705_9(void) = ^IndirectReadSideEffect[-1] : &:r1705_4, ~m1704_8 -# 1707| r1707_1(glval) = VariableAddress[l_m_inner] : -# 1707| r1707_2(glval) = VariableAddress[#temp1707:29] : -# 1707| m1707_3(decltype([...](...){...})) = Uninitialized[#temp1707:29] : &:r1707_2 -# 1707| r1707_4(glval) = FieldAddress[(captured this)] : r1707_2 -# 1707| r1707_5(glval) = VariableAddress[#this] : -# 1707| r1707_6(lambda [] type at line 1707, col. 30 *) = Load[#this] : &:r1707_5, m1704_6 -# 1707| r1707_7(glval) = FieldAddress[(captured this)] : r1707_6 -# 1707| r1707_8(TrivialLambdaClass) = Load[?] : &:r1707_7, ~m1704_8 -# 1707| m1707_9(TrivialLambdaClass) = Store[?] : &:r1707_4, r1707_8 -# 1707| r1707_10(decltype([...](...){...})) = Load[#temp1707:29] : &:r1707_2, ~m1707_9 -# 1707| m1707_11(decltype([...](...){...})) = Store[l_m_inner] : &:r1707_1, r1707_10 -# 1710| v1710_1(void) = NoOp : -# 1704| v1704_9(void) = ReturnIndirection[#this] : &:r1704_7, m1704_8 -# 1704| v1704_10(void) = ReturnVoid : -# 1704| v1704_11(void) = AliasedUse : ~m1705_8 -# 1704| v1704_12(void) = ExitFunction : - -# 1707| void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)::operator()() const -# 1707| Block 0 -# 1707| v1707_1(void) = EnterFunction : -# 1707| m1707_2(unknown) = AliasedDefinition : -# 1707| m1707_3(unknown) = InitializeNonLocal : -# 1707| m1707_4(unknown) = Chi : total:m1707_2, partial:m1707_3 -# 1707| r1707_5(glval) = VariableAddress[#this] : -# 1707| m1707_6(glval) = InitializeParameter[#this] : &:r1707_5 -# 1707| r1707_7(glval) = Load[#this] : &:r1707_5, m1707_6 -# 1707| m1707_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1707_7 -# 1708| r1708_1(glval) = VariableAddress[#this] : -# 1708| r1708_2(lambda [] type at line 1707, col. 30 *) = Load[#this] : &:r1708_1, m1707_6 -# 1708| r1708_3(glval) = FieldAddress[(captured this)] : r1708_2 -# 1708| r1708_4(TrivialLambdaClass *) = CopyValue : r1708_3 -# 1708| r1708_5(glval) = FunctionAddress[m] : -# 1708| v1708_6(void) = Call[m] : func:r1708_5, this:r1708_4 -# 1708| m1708_7(unknown) = ^CallSideEffect : ~m1707_4 -# 1708| m1708_8(unknown) = Chi : total:m1707_4, partial:m1708_7 -# 1708| v1708_9(void) = ^IndirectReadSideEffect[-1] : &:r1708_4, ~m1707_8 -# 1709| v1709_1(void) = NoOp : -# 1707| v1707_9(void) = ReturnIndirection[#this] : &:r1707_7, m1707_8 -# 1707| v1707_10(void) = ReturnVoid : -# 1707| v1707_11(void) = AliasedUse : ~m1708_8 -# 1707| v1707_12(void) = ExitFunction : - -# 1714| void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&) -# 1714| Block 0 -# 1714| v1714_1(void) = EnterFunction : -# 1714| m1714_2(unknown) = AliasedDefinition : -# 1714| m1714_3(unknown) = InitializeNonLocal : -# 1714| m1714_4(unknown) = Chi : total:m1714_2, partial:m1714_3 -# 1714| r1714_5(glval) = VariableAddress[p1] : -# 1714| m1714_6(TrivialLambdaClass) = InitializeParameter[p1] : &:r1714_5 -# 1714| r1714_7(glval) = VariableAddress[p2] : -# 1714| m1714_8(TrivialLambdaClass &) = InitializeParameter[p2] : &:r1714_7 -# 1714| r1714_9(TrivialLambdaClass &) = Load[p2] : &:r1714_7, m1714_8 -# 1714| m1714_10(unknown) = InitializeIndirection[p2] : &:r1714_9 -# 1714| r1714_11(glval) = VariableAddress[p3] : -# 1714| m1714_12(TrivialLambdaClass &&) = InitializeParameter[p3] : &:r1714_11 -# 1714| r1714_13(TrivialLambdaClass &&) = Load[p3] : &:r1714_11, m1714_12 -# 1714| m1714_14(unknown) = InitializeIndirection[p3] : &:r1714_13 -# 1715| r1715_1(glval) = VariableAddress[l1] : -# 1715| m1715_2(TrivialLambdaClass) = Uninitialized[l1] : &:r1715_1 -# 1716| r1716_1(glval) = VariableAddress[l2] : -# 1716| r1716_2(glval) = VariableAddress[#temp1716:36] : -# 1716| r1716_3(TrivialLambdaClass) = Constant[0] : -# 1716| m1716_4(TrivialLambdaClass) = Store[#temp1716:36] : &:r1716_2, r1716_3 -# 1716| r1716_5(glval) = Convert : r1716_2 -# 1716| r1716_6(TrivialLambdaClass &) = CopyValue : r1716_5 -# 1716| m1716_7(TrivialLambdaClass &) = Store[l2] : &:r1716_1, r1716_6 -# 1718| r1718_1(glval) = VariableAddress[l_outer1] : -# 1718| r1718_2(glval) = VariableAddress[#temp1718:20] : -# 1718| m1718_3(decltype([...](...){...})) = Uninitialized[#temp1718:20] : &:r1718_2 -# 1718| r1718_4(glval) = FieldAddress[p1] : r1718_2 -# 1718| r1718_5(glval) = VariableAddress[p1] : -# 1718| r1718_6(TrivialLambdaClass) = Load[p1] : &:r1718_5, m1714_6 -# 1718| m1718_7(TrivialLambdaClass) = Store[?] : &:r1718_4, r1718_6 -# 1718| m1718_8(decltype([...](...){...})) = Chi : total:m1718_3, partial:m1718_7 -# 1718| r1718_9(glval) = FieldAddress[p2] : r1718_2 -# 1718| r1718_10(glval) = VariableAddress[p2] : -# 1718| r1718_11(TrivialLambdaClass &) = Load[p2] : &:r1718_10, m1714_8 -#-----| r0_1(TrivialLambdaClass) = Load[?] : &:r1718_11, ~m1714_10 -#-----| m0_2(TrivialLambdaClass) = Store[?] : &:r1718_9, r0_1 -#-----| m0_3(decltype([...](...){...})) = Chi : total:m1718_8, partial:m0_2 -# 1718| r1718_12(glval) = FieldAddress[p3] : r1718_2 -# 1718| r1718_13(glval) = VariableAddress[p3] : -# 1718| r1718_14(TrivialLambdaClass &&) = Load[p3] : &:r1718_13, m1714_12 -#-----| r0_4(TrivialLambdaClass) = Load[?] : &:r1718_14, ~m1714_14 -#-----| m0_5(TrivialLambdaClass) = Store[?] : &:r1718_12, r0_4 -#-----| m0_6(decltype([...](...){...})) = Chi : total:m0_3, partial:m0_5 -# 1718| r1718_15(glval) = FieldAddress[l1] : r1718_2 -# 1718| r1718_16(glval) = VariableAddress[l1] : -# 1718| r1718_17(TrivialLambdaClass) = Load[l1] : &:r1718_16, m1715_2 -# 1718| m1718_18(TrivialLambdaClass) = Store[?] : &:r1718_15, r1718_17 -# 1718| m1718_19(decltype([...](...){...})) = Chi : total:m0_6, partial:m1718_18 -# 1718| r1718_20(glval) = FieldAddress[l2] : r1718_2 -# 1718| r1718_21(glval) = VariableAddress[l2] : -# 1718| r1718_22(TrivialLambdaClass &) = Load[l2] : &:r1718_21, m1716_7 -#-----| r0_7(TrivialLambdaClass) = Load[?] : &:r1718_22, m1716_4 -#-----| m0_8(TrivialLambdaClass) = Store[?] : &:r1718_20, r0_7 -#-----| m0_9(decltype([...](...){...})) = Chi : total:m1718_19, partial:m0_8 -# 1718| r1718_23(decltype([...](...){...})) = Load[#temp1718:20] : &:r1718_2, m0_9 -# 1718| m1718_24(decltype([...](...){...})) = Store[l_outer1] : &:r1718_1, r1718_23 -# 1721| v1721_1(void) = NoOp : -# 1714| v1714_15(void) = ReturnIndirection[p2] : &:r1714_9, m1714_10 -# 1714| v1714_16(void) = ReturnIndirection[p3] : &:r1714_13, m1714_14 -# 1714| v1714_17(void) = ReturnVoid : -# 1714| v1714_18(void) = AliasedUse : m1714_3 -# 1714| v1714_19(void) = ExitFunction : - -# 1718| void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const -# 1718| Block 0 -# 1718| v1718_1(void) = EnterFunction : -# 1718| m1718_2(unknown) = AliasedDefinition : -# 1718| m1718_3(unknown) = InitializeNonLocal : -# 1718| m1718_4(unknown) = Chi : total:m1718_2, partial:m1718_3 -# 1718| r1718_5(glval) = VariableAddress[#this] : -# 1718| m1718_6(glval) = InitializeParameter[#this] : &:r1718_5 -# 1718| r1718_7(glval) = Load[#this] : &:r1718_5, m1718_6 -# 1718| m1718_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1718_7 -# 1719| r1719_1(glval) = VariableAddress[l_inner1] : -# 1719| r1719_2(glval) = VariableAddress[#temp1719:24] : -# 1719| m1719_3(decltype([...](...){...})) = Uninitialized[#temp1719:24] : &:r1719_2 -# 1719| r1719_4(glval) = FieldAddress[p1] : r1719_2 -# 1719| r1719_5(glval) = VariableAddress[#this] : -# 1719| r1719_6(lambda [] type at line 1719, col. 25 *) = Load[#this] : &:r1719_5, m1718_6 -# 1719| r1719_7(glval) = FieldAddress[p1] : r1719_6 -# 1719| r1719_8(TrivialLambdaClass) = Load[?] : &:r1719_7, ~m1718_8 -# 1719| m1719_9(TrivialLambdaClass) = Store[?] : &:r1719_4, r1719_8 -# 1719| r1719_10(decltype([...](...){...})) = Load[#temp1719:24] : &:r1719_2, ~m1719_9 -# 1719| m1719_11(decltype([...](...){...})) = Store[l_inner1] : &:r1719_1, r1719_10 -# 1720| v1720_1(void) = NoOp : -# 1718| v1718_9(void) = ReturnIndirection[#this] : &:r1718_7, m1718_8 -# 1718| v1718_10(void) = ReturnVoid : -# 1718| v1718_11(void) = AliasedUse : m1718_3 -# 1718| v1718_12(void) = ExitFunction : - -# 1719| void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)::operator()() const -# 1719| Block 0 -# 1719| v1719_1(void) = EnterFunction : -# 1719| m1719_2(unknown) = AliasedDefinition : -# 1719| m1719_3(unknown) = InitializeNonLocal : -# 1719| m1719_4(unknown) = Chi : total:m1719_2, partial:m1719_3 -# 1719| r1719_5(glval) = VariableAddress[#this] : -# 1719| m1719_6(glval) = InitializeParameter[#this] : &:r1719_5 -# 1719| r1719_7(glval) = Load[#this] : &:r1719_5, m1719_6 -# 1719| m1719_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1719_7 -# 1719| v1719_9(void) = NoOp : -# 1719| v1719_10(void) = ReturnIndirection[#this] : &:r1719_7, m1719_8 -# 1719| v1719_11(void) = ReturnVoid : -# 1719| v1719_12(void) = AliasedUse : m1719_3 -# 1719| v1719_13(void) = ExitFunction : - -# 1726| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() -# 1726| Block 0 -# 1726| v1726_1(void) = EnterFunction : -# 1726| m1726_2(unknown) = AliasedDefinition : -# 1726| m1726_3(unknown) = InitializeNonLocal : -# 1726| m1726_4(unknown) = Chi : total:m1726_2, partial:m1726_3 -# 1726| r1726_5(glval) = VariableAddress[#this] : -# 1726| m1726_6(glval) = InitializeParameter[#this] : &:r1726_5 -# 1726| r1726_7(glval) = Load[#this] : &:r1726_5, m1726_6 -# 1726| m1726_8(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1726_7 -# 1726| v1726_9(void) = NoOp : -# 1726| v1726_10(void) = ReturnIndirection[#this] : &:r1726_7, m1726_8 -# 1726| v1726_11(void) = ReturnVoid : -# 1726| v1726_12(void) = AliasedUse : m1726_3 -# 1726| v1726_13(void) = ExitFunction : - -# 1727| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) -# 1727| Block 0 -# 1727| v1727_1(void) = EnterFunction : -# 1727| m1727_2(unknown) = AliasedDefinition : -# 1727| m1727_3(unknown) = InitializeNonLocal : -# 1727| m1727_4(unknown) = Chi : total:m1727_2, partial:m1727_3 -# 1727| r1727_5(glval) = VariableAddress[#this] : -# 1727| m1727_6(glval) = InitializeParameter[#this] : &:r1727_5 -# 1727| r1727_7(glval) = Load[#this] : &:r1727_5, m1727_6 -# 1727| m1727_8(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1727_7 -# 1727| r1727_9(glval) = VariableAddress[c] : -# 1727| m1727_10(CopyConstructorWithImplicitArgumentClass &) = InitializeParameter[c] : &:r1727_9 -# 1727| r1727_11(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1727_9, m1727_10 -# 1727| m1727_12(unknown) = InitializeIndirection[c] : &:r1727_11 -# 1728| r1728_1(glval) = VariableAddress[c] : -# 1728| r1728_2(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1728_1, m1727_10 -# 1728| r1728_3(glval) = CopyValue : r1728_2 -# 1728| r1728_4(glval) = FieldAddress[x] : r1728_3 -# 1728| r1728_5(int) = Load[?] : &:r1728_4, ~m1727_12 -# 1728| r1728_6(glval) = VariableAddress[#this] : -# 1728| r1728_7(CopyConstructorWithImplicitArgumentClass *) = Load[#this] : &:r1728_6, m1727_6 -# 1728| r1728_8(glval) = FieldAddress[x] : r1728_7 -# 1728| m1728_9(int) = Store[?] : &:r1728_8, r1728_5 -# 1728| m1728_10(unknown) = Chi : total:m1727_8, partial:m1728_9 -# 1729| v1729_1(void) = NoOp : -# 1727| v1727_13(void) = ReturnIndirection[#this] : &:r1727_7, m1728_10 -# 1727| v1727_14(void) = ReturnIndirection[c] : &:r1727_11, m1727_12 -# 1727| v1727_15(void) = ReturnVoid : -# 1727| v1727_16(void) = AliasedUse : m1727_3 -# 1727| v1727_17(void) = ExitFunction : - -# 1735| void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() -# 1735| Block 0 -# 1735| v1735_1(void) = EnterFunction : -# 1735| m1735_2(unknown) = AliasedDefinition : -# 1735| m1735_3(unknown) = InitializeNonLocal : -# 1735| m1735_4(unknown) = Chi : total:m1735_2, partial:m1735_3 -# 1735| r1735_5(glval) = VariableAddress[#this] : -# 1735| m1735_6(glval) = InitializeParameter[#this] : &:r1735_5 -# 1735| r1735_7(glval) = Load[#this] : &:r1735_5, m1735_6 -# 1735| m1735_8(CopyConstructorWithBitwiseCopyClass) = InitializeIndirection[#this] : &:r1735_7 -# 1735| v1735_9(void) = NoOp : -# 1735| v1735_10(void) = ReturnIndirection[#this] : &:r1735_7, m1735_8 -# 1735| v1735_11(void) = ReturnVoid : -# 1735| v1735_12(void) = AliasedUse : m1735_3 -# 1735| v1735_13(void) = ExitFunction : - -# 1738| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) +# 1738| void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25)::operator()() const)::(lambda [] type at line 1738, col. 29)::operator()() const # 1738| Block 0 -# 1738| v1738_1(void) = EnterFunction : -# 1738| m1738_2(unknown) = AliasedDefinition : -# 1738| m1738_3(unknown) = InitializeNonLocal : -# 1738| m1738_4(unknown) = Chi : total:m1738_2, partial:m1738_3 -# 1738| r1738_5(glval) = VariableAddress[#this] : -# 1738| m1738_6(glval) = InitializeParameter[#this] : &:r1738_5 -# 1738| r1738_7(glval) = Load[#this] : &:r1738_5, m1738_6 -# 1738| m1738_8(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1738_7 +# 1738| v1738_1(void) = EnterFunction : +# 1738| m1738_2(unknown) = AliasedDefinition : +# 1738| m1738_3(unknown) = InitializeNonLocal : +# 1738| m1738_4(unknown) = Chi : total:m1738_2, partial:m1738_3 +# 1738| r1738_5(glval) = VariableAddress[#this] : +# 1738| m1738_6(glval) = InitializeParameter[#this] : &:r1738_5 +# 1738| r1738_7(glval) = Load[#this] : &:r1738_5, m1738_6 +# 1738| m1738_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1738_7 +# 1738| v1738_9(void) = NoOp : +# 1738| v1738_10(void) = NoOp : +# 1738| v1738_11(void) = ReturnIndirection[#this] : &:r1738_7, m1738_8 +# 1738| v1738_12(void) = ReturnVoid : +# 1738| v1738_13(void) = AliasedUse : m1738_3 +# 1738| v1738_14(void) = ExitFunction : + +# 1742| int goto_on_same_line() +# 1742| Block 0 +# 1742| v1742_1(void) = EnterFunction : +# 1742| m1742_2(unknown) = AliasedDefinition : +# 1742| m1742_3(unknown) = InitializeNonLocal : +# 1742| m1742_4(unknown) = Chi : total:m1742_2, partial:m1742_3 +# 1743| r1743_1(glval) = VariableAddress[x] : +# 1743| r1743_2(int) = Constant[42] : +# 1743| m1743_3(int) = Store[x] : &:r1743_1, r1743_2 +# 1744| v1744_1(void) = NoOp : +# 1744| v1744_2(void) = NoOp : +# 1745| r1745_1(glval) = VariableAddress[#return] : +# 1745| r1745_2(glval) = VariableAddress[x] : +# 1745| r1745_3(int) = Load[x] : &:r1745_2, m1743_3 +# 1745| m1745_4(int) = Store[#return] : &:r1745_1, r1745_3 +# 1742| r1742_5(glval) = VariableAddress[#return] : +# 1742| v1742_6(void) = ReturnValue : &:r1742_5, m1745_4 +# 1742| v1742_7(void) = AliasedUse : m1742_3 +# 1742| v1742_8(void) = ExitFunction : + +# 1750| void TrivialLambdaClass::m() const +# 1750| Block 0 +# 1750| v1750_1(void) = EnterFunction : +# 1750| m1750_2(unknown) = AliasedDefinition : +# 1750| m1750_3(unknown) = InitializeNonLocal : +# 1750| m1750_4(unknown) = Chi : total:m1750_2, partial:m1750_3 +# 1750| r1750_5(glval) = VariableAddress[#this] : +# 1750| m1750_6(glval) = InitializeParameter[#this] : &:r1750_5 +# 1750| r1750_7(glval) = Load[#this] : &:r1750_5, m1750_6 +# 1750| m1750_8(TrivialLambdaClass) = InitializeIndirection[#this] : &:r1750_7 +# 1751| r1751_1(glval) = VariableAddress[l_m_outer] : +# 1751| r1751_2(glval) = VariableAddress[#temp1751:25] : +# 1751| m1751_3(decltype([...](...){...})) = Uninitialized[#temp1751:25] : &:r1751_2 +# 1751| r1751_4(glval) = FieldAddress[(captured this)] : r1751_2 +# 1751| r1751_5(glval) = VariableAddress[#this] : +# 1751| r1751_6(TrivialLambdaClass *) = Load[#this] : &:r1751_5, m1750_6 +# 1751| r1751_7(TrivialLambdaClass) = Load[?] : &:r1751_6, ~m1750_8 +# 1751| m1751_8(TrivialLambdaClass) = Store[?] : &:r1751_4, r1751_7 +# 1751| r1751_9(decltype([...](...){...})) = Load[#temp1751:25] : &:r1751_2, ~m1751_8 +# 1751| m1751_10(decltype([...](...){...})) = Store[l_m_outer] : &:r1751_1, r1751_9 +# 1758| v1758_1(void) = NoOp : +# 1750| v1750_9(void) = ReturnIndirection[#this] : &:r1750_7, m1750_8 +# 1750| v1750_10(void) = ReturnVoid : +# 1750| v1750_11(void) = AliasedUse : m1750_3 +# 1750| v1750_12(void) = ExitFunction : + +# 1751| void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26)::operator()() const +# 1751| Block 0 +# 1751| v1751_1(void) = EnterFunction : +# 1751| m1751_2(unknown) = AliasedDefinition : +# 1751| m1751_3(unknown) = InitializeNonLocal : +# 1751| m1751_4(unknown) = Chi : total:m1751_2, partial:m1751_3 +# 1751| r1751_5(glval) = VariableAddress[#this] : +# 1751| m1751_6(glval) = InitializeParameter[#this] : &:r1751_5 +# 1751| r1751_7(glval) = Load[#this] : &:r1751_5, m1751_6 +# 1751| m1751_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1751_7 +# 1752| r1752_1(glval) = VariableAddress[#this] : +# 1752| r1752_2(lambda [] type at line 1751, col. 26 *) = Load[#this] : &:r1752_1, m1751_6 +# 1752| r1752_3(glval) = FieldAddress[(captured this)] : r1752_2 +# 1752| r1752_4(TrivialLambdaClass *) = CopyValue : r1752_3 +# 1752| r1752_5(glval) = FunctionAddress[m] : +# 1752| v1752_6(void) = Call[m] : func:r1752_5, this:r1752_4 +# 1752| m1752_7(unknown) = ^CallSideEffect : ~m1751_4 +# 1752| m1752_8(unknown) = Chi : total:m1751_4, partial:m1752_7 +# 1752| v1752_9(void) = ^IndirectReadSideEffect[-1] : &:r1752_4, ~m1751_8 +# 1754| r1754_1(glval) = VariableAddress[l_m_inner] : +# 1754| r1754_2(glval) = VariableAddress[#temp1754:29] : +# 1754| m1754_3(decltype([...](...){...})) = Uninitialized[#temp1754:29] : &:r1754_2 +# 1754| r1754_4(glval) = FieldAddress[(captured this)] : r1754_2 +# 1754| r1754_5(glval) = VariableAddress[#this] : +# 1754| r1754_6(lambda [] type at line 1754, col. 30 *) = Load[#this] : &:r1754_5, m1751_6 +# 1754| r1754_7(glval) = FieldAddress[(captured this)] : r1754_6 +# 1754| r1754_8(TrivialLambdaClass) = Load[?] : &:r1754_7, ~m1751_8 +# 1754| m1754_9(TrivialLambdaClass) = Store[?] : &:r1754_4, r1754_8 +# 1754| r1754_10(decltype([...](...){...})) = Load[#temp1754:29] : &:r1754_2, ~m1754_9 +# 1754| m1754_11(decltype([...](...){...})) = Store[l_m_inner] : &:r1754_1, r1754_10 +# 1757| v1757_1(void) = NoOp : +# 1751| v1751_9(void) = ReturnIndirection[#this] : &:r1751_7, m1751_8 +# 1751| v1751_10(void) = ReturnVoid : +# 1751| v1751_11(void) = AliasedUse : ~m1752_8 +# 1751| v1751_12(void) = ExitFunction : + +# 1754| void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26)::operator()() const)::(lambda [] type at line 1754, col. 30)::operator()() const +# 1754| Block 0 +# 1754| v1754_1(void) = EnterFunction : +# 1754| m1754_2(unknown) = AliasedDefinition : +# 1754| m1754_3(unknown) = InitializeNonLocal : +# 1754| m1754_4(unknown) = Chi : total:m1754_2, partial:m1754_3 +# 1754| r1754_5(glval) = VariableAddress[#this] : +# 1754| m1754_6(glval) = InitializeParameter[#this] : &:r1754_5 +# 1754| r1754_7(glval) = Load[#this] : &:r1754_5, m1754_6 +# 1754| m1754_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1754_7 +# 1755| r1755_1(glval) = VariableAddress[#this] : +# 1755| r1755_2(lambda [] type at line 1754, col. 30 *) = Load[#this] : &:r1755_1, m1754_6 +# 1755| r1755_3(glval) = FieldAddress[(captured this)] : r1755_2 +# 1755| r1755_4(TrivialLambdaClass *) = CopyValue : r1755_3 +# 1755| r1755_5(glval) = FunctionAddress[m] : +# 1755| v1755_6(void) = Call[m] : func:r1755_5, this:r1755_4 +# 1755| m1755_7(unknown) = ^CallSideEffect : ~m1754_4 +# 1755| m1755_8(unknown) = Chi : total:m1754_4, partial:m1755_7 +# 1755| v1755_9(void) = ^IndirectReadSideEffect[-1] : &:r1755_4, ~m1754_8 +# 1756| v1756_1(void) = NoOp : +# 1754| v1754_9(void) = ReturnIndirection[#this] : &:r1754_7, m1754_8 +# 1754| v1754_10(void) = ReturnVoid : +# 1754| v1754_11(void) = AliasedUse : ~m1755_8 +# 1754| v1754_12(void) = ExitFunction : + +# 1761| void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&) +# 1761| Block 0 +# 1761| v1761_1(void) = EnterFunction : +# 1761| m1761_2(unknown) = AliasedDefinition : +# 1761| m1761_3(unknown) = InitializeNonLocal : +# 1761| m1761_4(unknown) = Chi : total:m1761_2, partial:m1761_3 +# 1761| r1761_5(glval) = VariableAddress[p1] : +# 1761| m1761_6(TrivialLambdaClass) = InitializeParameter[p1] : &:r1761_5 +# 1761| r1761_7(glval) = VariableAddress[p2] : +# 1761| m1761_8(TrivialLambdaClass &) = InitializeParameter[p2] : &:r1761_7 +# 1761| r1761_9(TrivialLambdaClass &) = Load[p2] : &:r1761_7, m1761_8 +# 1761| m1761_10(unknown) = InitializeIndirection[p2] : &:r1761_9 +# 1761| r1761_11(glval) = VariableAddress[p3] : +# 1761| m1761_12(TrivialLambdaClass &&) = InitializeParameter[p3] : &:r1761_11 +# 1761| r1761_13(TrivialLambdaClass &&) = Load[p3] : &:r1761_11, m1761_12 +# 1761| m1761_14(unknown) = InitializeIndirection[p3] : &:r1761_13 +# 1762| r1762_1(glval) = VariableAddress[l1] : +# 1762| m1762_2(TrivialLambdaClass) = Uninitialized[l1] : &:r1762_1 +# 1763| r1763_1(glval) = VariableAddress[l2] : +# 1763| r1763_2(glval) = VariableAddress[#temp1763:36] : +# 1763| r1763_3(TrivialLambdaClass) = Constant[0] : +# 1763| m1763_4(TrivialLambdaClass) = Store[#temp1763:36] : &:r1763_2, r1763_3 +# 1763| r1763_5(glval) = Convert : r1763_2 +# 1763| r1763_6(TrivialLambdaClass &) = CopyValue : r1763_5 +# 1763| m1763_7(TrivialLambdaClass &) = Store[l2] : &:r1763_1, r1763_6 +# 1765| r1765_1(glval) = VariableAddress[l_outer1] : +# 1765| r1765_2(glval) = VariableAddress[#temp1765:20] : +# 1765| m1765_3(decltype([...](...){...})) = Uninitialized[#temp1765:20] : &:r1765_2 +# 1765| r1765_4(glval) = FieldAddress[p1] : r1765_2 +# 1765| r1765_5(glval) = VariableAddress[p1] : +# 1765| r1765_6(TrivialLambdaClass) = Load[p1] : &:r1765_5, m1761_6 +# 1765| m1765_7(TrivialLambdaClass) = Store[?] : &:r1765_4, r1765_6 +# 1765| m1765_8(decltype([...](...){...})) = Chi : total:m1765_3, partial:m1765_7 +# 1765| r1765_9(glval) = FieldAddress[p2] : r1765_2 +# 1765| r1765_10(glval) = VariableAddress[p2] : +# 1765| r1765_11(TrivialLambdaClass &) = Load[p2] : &:r1765_10, m1761_8 +#-----| r0_1(TrivialLambdaClass) = Load[?] : &:r1765_11, ~m1761_10 +#-----| m0_2(TrivialLambdaClass) = Store[?] : &:r1765_9, r0_1 +#-----| m0_3(decltype([...](...){...})) = Chi : total:m1765_8, partial:m0_2 +# 1765| r1765_12(glval) = FieldAddress[p3] : r1765_2 +# 1765| r1765_13(glval) = VariableAddress[p3] : +# 1765| r1765_14(TrivialLambdaClass &&) = Load[p3] : &:r1765_13, m1761_12 +#-----| r0_4(TrivialLambdaClass) = Load[?] : &:r1765_14, ~m1761_14 +#-----| m0_5(TrivialLambdaClass) = Store[?] : &:r1765_12, r0_4 +#-----| m0_6(decltype([...](...){...})) = Chi : total:m0_3, partial:m0_5 +# 1765| r1765_15(glval) = FieldAddress[l1] : r1765_2 +# 1765| r1765_16(glval) = VariableAddress[l1] : +# 1765| r1765_17(TrivialLambdaClass) = Load[l1] : &:r1765_16, m1762_2 +# 1765| m1765_18(TrivialLambdaClass) = Store[?] : &:r1765_15, r1765_17 +# 1765| m1765_19(decltype([...](...){...})) = Chi : total:m0_6, partial:m1765_18 +# 1765| r1765_20(glval) = FieldAddress[l2] : r1765_2 +# 1765| r1765_21(glval) = VariableAddress[l2] : +# 1765| r1765_22(TrivialLambdaClass &) = Load[l2] : &:r1765_21, m1763_7 +#-----| r0_7(TrivialLambdaClass) = Load[?] : &:r1765_22, m1763_4 +#-----| m0_8(TrivialLambdaClass) = Store[?] : &:r1765_20, r0_7 +#-----| m0_9(decltype([...](...){...})) = Chi : total:m1765_19, partial:m0_8 +# 1765| r1765_23(decltype([...](...){...})) = Load[#temp1765:20] : &:r1765_2, m0_9 +# 1765| m1765_24(decltype([...](...){...})) = Store[l_outer1] : &:r1765_1, r1765_23 +# 1768| v1768_1(void) = NoOp : +# 1761| v1761_15(void) = ReturnIndirection[p2] : &:r1761_9, m1761_10 +# 1761| v1761_16(void) = ReturnIndirection[p3] : &:r1761_13, m1761_14 +# 1761| v1761_17(void) = ReturnVoid : +# 1761| v1761_18(void) = AliasedUse : m1761_3 +# 1761| v1761_19(void) = ExitFunction : + +# 1765| void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21)::operator()() const +# 1765| Block 0 +# 1765| v1765_1(void) = EnterFunction : +# 1765| m1765_2(unknown) = AliasedDefinition : +# 1765| m1765_3(unknown) = InitializeNonLocal : +# 1765| m1765_4(unknown) = Chi : total:m1765_2, partial:m1765_3 +# 1765| r1765_5(glval) = VariableAddress[#this] : +# 1765| m1765_6(glval) = InitializeParameter[#this] : &:r1765_5 +# 1765| r1765_7(glval) = Load[#this] : &:r1765_5, m1765_6 +# 1765| m1765_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1765_7 +# 1766| r1766_1(glval) = VariableAddress[l_inner1] : +# 1766| r1766_2(glval) = VariableAddress[#temp1766:24] : +# 1766| m1766_3(decltype([...](...){...})) = Uninitialized[#temp1766:24] : &:r1766_2 +# 1766| r1766_4(glval) = FieldAddress[p1] : r1766_2 +# 1766| r1766_5(glval) = VariableAddress[#this] : +# 1766| r1766_6(lambda [] type at line 1766, col. 25 *) = Load[#this] : &:r1766_5, m1765_6 +# 1766| r1766_7(glval) = FieldAddress[p1] : r1766_6 +# 1766| r1766_8(TrivialLambdaClass) = Load[?] : &:r1766_7, ~m1765_8 +# 1766| m1766_9(TrivialLambdaClass) = Store[?] : &:r1766_4, r1766_8 +# 1766| r1766_10(decltype([...](...){...})) = Load[#temp1766:24] : &:r1766_2, ~m1766_9 +# 1766| m1766_11(decltype([...](...){...})) = Store[l_inner1] : &:r1766_1, r1766_10 +# 1767| v1767_1(void) = NoOp : +# 1765| v1765_9(void) = ReturnIndirection[#this] : &:r1765_7, m1765_8 +# 1765| v1765_10(void) = ReturnVoid : +# 1765| v1765_11(void) = AliasedUse : m1765_3 +# 1765| v1765_12(void) = ExitFunction : + +# 1766| void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21)::operator()() const)::(lambda [] type at line 1766, col. 25)::operator()() const +# 1766| Block 0 +# 1766| v1766_1(void) = EnterFunction : +# 1766| m1766_2(unknown) = AliasedDefinition : +# 1766| m1766_3(unknown) = InitializeNonLocal : +# 1766| m1766_4(unknown) = Chi : total:m1766_2, partial:m1766_3 +# 1766| r1766_5(glval) = VariableAddress[#this] : +# 1766| m1766_6(glval) = InitializeParameter[#this] : &:r1766_5 +# 1766| r1766_7(glval) = Load[#this] : &:r1766_5, m1766_6 +# 1766| m1766_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1766_7 +# 1766| v1766_9(void) = NoOp : +# 1766| v1766_10(void) = ReturnIndirection[#this] : &:r1766_7, m1766_8 +# 1766| v1766_11(void) = ReturnVoid : +# 1766| v1766_12(void) = AliasedUse : m1766_3 +# 1766| v1766_13(void) = ExitFunction : + +# 1773| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() +# 1773| Block 0 +# 1773| v1773_1(void) = EnterFunction : +# 1773| m1773_2(unknown) = AliasedDefinition : +# 1773| m1773_3(unknown) = InitializeNonLocal : +# 1773| m1773_4(unknown) = Chi : total:m1773_2, partial:m1773_3 +# 1773| r1773_5(glval) = VariableAddress[#this] : +# 1773| m1773_6(glval) = InitializeParameter[#this] : &:r1773_5 +# 1773| r1773_7(glval) = Load[#this] : &:r1773_5, m1773_6 +# 1773| m1773_8(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1773_7 +# 1773| v1773_9(void) = NoOp : +# 1773| v1773_10(void) = ReturnIndirection[#this] : &:r1773_7, m1773_8 +# 1773| v1773_11(void) = ReturnVoid : +# 1773| v1773_12(void) = AliasedUse : m1773_3 +# 1773| v1773_13(void) = ExitFunction : + +# 1774| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) +# 1774| Block 0 +# 1774| v1774_1(void) = EnterFunction : +# 1774| m1774_2(unknown) = AliasedDefinition : +# 1774| m1774_3(unknown) = InitializeNonLocal : +# 1774| m1774_4(unknown) = Chi : total:m1774_2, partial:m1774_3 +# 1774| r1774_5(glval) = VariableAddress[#this] : +# 1774| m1774_6(glval) = InitializeParameter[#this] : &:r1774_5 +# 1774| r1774_7(glval) = Load[#this] : &:r1774_5, m1774_6 +# 1774| m1774_8(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1774_7 +# 1774| r1774_9(glval) = VariableAddress[c] : +# 1774| m1774_10(CopyConstructorWithImplicitArgumentClass &) = InitializeParameter[c] : &:r1774_9 +# 1774| r1774_11(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1774_9, m1774_10 +# 1774| m1774_12(unknown) = InitializeIndirection[c] : &:r1774_11 +# 1775| r1775_1(glval) = VariableAddress[c] : +# 1775| r1775_2(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1775_1, m1774_10 +# 1775| r1775_3(glval) = CopyValue : r1775_2 +# 1775| r1775_4(glval) = FieldAddress[x] : r1775_3 +# 1775| r1775_5(int) = Load[?] : &:r1775_4, ~m1774_12 +# 1775| r1775_6(glval) = VariableAddress[#this] : +# 1775| r1775_7(CopyConstructorWithImplicitArgumentClass *) = Load[#this] : &:r1775_6, m1774_6 +# 1775| r1775_8(glval) = FieldAddress[x] : r1775_7 +# 1775| m1775_9(int) = Store[?] : &:r1775_8, r1775_5 +# 1775| m1775_10(unknown) = Chi : total:m1774_8, partial:m1775_9 +# 1776| v1776_1(void) = NoOp : +# 1774| v1774_13(void) = ReturnIndirection[#this] : &:r1774_7, m1775_10 +# 1774| v1774_14(void) = ReturnIndirection[c] : &:r1774_11, m1774_12 +# 1774| v1774_15(void) = ReturnVoid : +# 1774| v1774_16(void) = AliasedUse : m1774_3 +# 1774| v1774_17(void) = ExitFunction : + +# 1782| void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() +# 1782| Block 0 +# 1782| v1782_1(void) = EnterFunction : +# 1782| m1782_2(unknown) = AliasedDefinition : +# 1782| m1782_3(unknown) = InitializeNonLocal : +# 1782| m1782_4(unknown) = Chi : total:m1782_2, partial:m1782_3 +# 1782| r1782_5(glval) = VariableAddress[#this] : +# 1782| m1782_6(glval) = InitializeParameter[#this] : &:r1782_5 +# 1782| r1782_7(glval) = Load[#this] : &:r1782_5, m1782_6 +# 1782| m1782_8(CopyConstructorWithBitwiseCopyClass) = InitializeIndirection[#this] : &:r1782_7 +# 1782| v1782_9(void) = NoOp : +# 1782| v1782_10(void) = ReturnIndirection[#this] : &:r1782_7, m1782_8 +# 1782| v1782_11(void) = ReturnVoid : +# 1782| v1782_12(void) = AliasedUse : m1782_3 +# 1782| v1782_13(void) = ExitFunction : + +# 1785| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) +# 1785| Block 0 +# 1785| v1785_1(void) = EnterFunction : +# 1785| m1785_2(unknown) = AliasedDefinition : +# 1785| m1785_3(unknown) = InitializeNonLocal : +# 1785| m1785_4(unknown) = Chi : total:m1785_2, partial:m1785_3 +# 1785| r1785_5(glval) = VariableAddress[#this] : +# 1785| m1785_6(glval) = InitializeParameter[#this] : &:r1785_5 +# 1785| r1785_7(glval) = Load[#this] : &:r1785_5, m1785_6 +# 1785| m1785_8(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1785_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1738| r1738_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1738_6 -# 1738| r1738_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1738| r1738_11(glval) = VariableAddress[(unnamed parameter 0)] : -# 1738| r1738_12(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r1738_11, m0_2 -# 1738| r1738_13(glval) = CopyValue : r1738_12 -# 1738| r1738_14(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1738_13 -# 1738| r1738_15(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1738_14 -# 1738| v1738_16(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1738_10, this:r1738_9, 0:r1738_15 -# 1738| m1738_17(unknown) = ^CallSideEffect : ~m1738_4 -# 1738| m1738_18(unknown) = Chi : total:m1738_4, partial:m1738_17 -# 1738| v1738_19(void) = ^BufferReadSideEffect[0] : &:r1738_15, ~m0_4 -# 1738| m1738_20(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1738_9 -# 1738| m1738_21(unknown) = Chi : total:m1738_8, partial:m1738_20 -# 1738| v1738_22(void) = NoOp : -# 1738| v1738_23(void) = ReturnIndirection[#this] : &:r1738_7, m1738_21 +# 1785| r1785_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1785_6 +# 1785| r1785_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1785| r1785_11(glval) = VariableAddress[(unnamed parameter 0)] : +# 1785| r1785_12(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r1785_11, m0_2 +# 1785| r1785_13(glval) = CopyValue : r1785_12 +# 1785| r1785_14(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1785_13 +# 1785| r1785_15(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1785_14 +# 1785| v1785_16(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1785_10, this:r1785_9, 0:r1785_15 +# 1785| m1785_17(unknown) = ^CallSideEffect : ~m1785_4 +# 1785| m1785_18(unknown) = Chi : total:m1785_4, partial:m1785_17 +# 1785| v1785_19(void) = ^BufferReadSideEffect[0] : &:r1785_15, ~m0_4 +# 1785| m1785_20(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1785_9 +# 1785| m1785_21(unknown) = Chi : total:m1785_8, partial:m1785_20 +# 1785| v1785_22(void) = NoOp : +# 1785| v1785_23(void) = ReturnIndirection[#this] : &:r1785_7, m1785_21 #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 1738| v1738_24(void) = ReturnVoid : -# 1738| v1738_25(void) = AliasedUse : ~m1738_18 -# 1738| v1738_26(void) = ExitFunction : +# 1785| v1785_24(void) = ReturnVoid : +# 1785| v1785_25(void) = AliasedUse : ~m1785_18 +# 1785| v1785_26(void) = ExitFunction : -# 1742| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() -# 1742| Block 0 -# 1742| v1742_1(void) = EnterFunction : -# 1742| m1742_2(unknown) = AliasedDefinition : -# 1742| m1742_3(unknown) = InitializeNonLocal : -# 1742| m1742_4(unknown) = Chi : total:m1742_2, partial:m1742_3 -# 1742| r1742_5(glval) = VariableAddress[#this] : -# 1742| m1742_6(glval) = InitializeParameter[#this] : &:r1742_5 -# 1742| r1742_7(glval) = Load[#this] : &:r1742_5, m1742_6 -# 1742| m1742_8(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1742_7 -# 1742| r1742_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1742_6 -# 1742| r1742_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1742| v1742_11(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1742_10, this:r1742_9 -# 1742| m1742_12(unknown) = ^CallSideEffect : ~m1742_4 -# 1742| m1742_13(unknown) = Chi : total:m1742_4, partial:m1742_12 -# 1742| m1742_14(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1742_9 -# 1742| m1742_15(unknown) = Chi : total:m1742_8, partial:m1742_14 -# 1742| r1742_16(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : m1742_6 -# 1742| r1742_17(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : -# 1742| v1742_18(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1742_17, this:r1742_16 -# 1742| m1742_19(unknown) = ^CallSideEffect : ~m1742_13 -# 1742| m1742_20(unknown) = Chi : total:m1742_13, partial:m1742_19 -# 1742| m1742_21(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1742_16 -# 1742| m1742_22(unknown) = Chi : total:m1742_15, partial:m1742_21 -# 1742| v1742_23(void) = NoOp : -# 1742| v1742_24(void) = ReturnIndirection[#this] : &:r1742_7, m1742_22 -# 1742| v1742_25(void) = ReturnVoid : -# 1742| v1742_26(void) = AliasedUse : ~m1742_20 -# 1742| v1742_27(void) = ExitFunction : +# 1789| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() +# 1789| Block 0 +# 1789| v1789_1(void) = EnterFunction : +# 1789| m1789_2(unknown) = AliasedDefinition : +# 1789| m1789_3(unknown) = InitializeNonLocal : +# 1789| m1789_4(unknown) = Chi : total:m1789_2, partial:m1789_3 +# 1789| r1789_5(glval) = VariableAddress[#this] : +# 1789| m1789_6(glval) = InitializeParameter[#this] : &:r1789_5 +# 1789| r1789_7(glval) = Load[#this] : &:r1789_5, m1789_6 +# 1789| m1789_8(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1789_7 +# 1789| r1789_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1789_6 +# 1789| r1789_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1789| v1789_11(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1789_10, this:r1789_9 +# 1789| m1789_12(unknown) = ^CallSideEffect : ~m1789_4 +# 1789| m1789_13(unknown) = Chi : total:m1789_4, partial:m1789_12 +# 1789| m1789_14(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1789_9 +# 1789| m1789_15(unknown) = Chi : total:m1789_8, partial:m1789_14 +# 1789| r1789_16(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : m1789_6 +# 1789| r1789_17(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : +# 1789| v1789_18(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1789_17, this:r1789_16 +# 1789| m1789_19(unknown) = ^CallSideEffect : ~m1789_13 +# 1789| m1789_20(unknown) = Chi : total:m1789_13, partial:m1789_19 +# 1789| m1789_21(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1789_16 +# 1789| m1789_22(unknown) = Chi : total:m1789_15, partial:m1789_21 +# 1789| v1789_23(void) = NoOp : +# 1789| v1789_24(void) = ReturnIndirection[#this] : &:r1789_7, m1789_22 +# 1789| v1789_25(void) = ReturnVoid : +# 1789| v1789_26(void) = AliasedUse : ~m1789_20 +# 1789| v1789_27(void) = ExitFunction : -# 1745| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) -# 1745| Block 0 -# 1745| v1745_1(void) = EnterFunction : -# 1745| m1745_2(unknown) = AliasedDefinition : -# 1745| m1745_3(unknown) = InitializeNonLocal : -# 1745| m1745_4(unknown) = Chi : total:m1745_2, partial:m1745_3 -# 1745| r1745_5(glval) = VariableAddress[#this] : -# 1745| m1745_6(glval) = InitializeParameter[#this] : &:r1745_5 -# 1745| r1745_7(glval) = Load[#this] : &:r1745_5, m1745_6 -# 1745| m1745_8(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1745_7 +# 1792| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) +# 1792| Block 0 +# 1792| v1792_1(void) = EnterFunction : +# 1792| m1792_2(unknown) = AliasedDefinition : +# 1792| m1792_3(unknown) = InitializeNonLocal : +# 1792| m1792_4(unknown) = Chi : total:m1792_2, partial:m1792_3 +# 1792| r1792_5(glval) = VariableAddress[#this] : +# 1792| m1792_6(glval) = InitializeParameter[#this] : &:r1792_5 +# 1792| r1792_7(glval) = Load[#this] : &:r1792_5, m1792_6 +# 1792| m1792_8(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1792_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(CopyConstructorTestVirtualClass &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1745| r1745_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1745_6 -# 1745| r1745_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1745| r1745_11(glval) = VariableAddress[(unnamed parameter 0)] : -# 1745| r1745_12(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r1745_11, m0_2 -# 1745| r1745_13(glval) = CopyValue : r1745_12 -# 1745| r1745_14(glval) = ConvertToVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1745_13 -# 1745| r1745_15(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1745_14 -# 1745| v1745_16(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1745_10, this:r1745_9, 0:r1745_15 -# 1745| m1745_17(unknown) = ^CallSideEffect : ~m1745_4 -# 1745| m1745_18(unknown) = Chi : total:m1745_4, partial:m1745_17 -# 1745| v1745_19(void) = ^BufferReadSideEffect[0] : &:r1745_15, ~m0_4 -# 1745| m1745_20(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1745_9 -# 1745| m1745_21(unknown) = Chi : total:m1745_18, partial:m1745_20 -# 1745| v1745_22(void) = NoOp : -# 1745| v1745_23(void) = ReturnIndirection[#this] : &:r1745_7, m1745_8 +# 1792| r1792_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1792_6 +# 1792| r1792_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1792| r1792_11(glval) = VariableAddress[(unnamed parameter 0)] : +# 1792| r1792_12(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r1792_11, m0_2 +# 1792| r1792_13(glval) = CopyValue : r1792_12 +# 1792| r1792_14(glval) = ConvertToVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1792_13 +# 1792| r1792_15(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1792_14 +# 1792| v1792_16(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1792_10, this:r1792_9, 0:r1792_15 +# 1792| m1792_17(unknown) = ^CallSideEffect : ~m1792_4 +# 1792| m1792_18(unknown) = Chi : total:m1792_4, partial:m1792_17 +# 1792| v1792_19(void) = ^BufferReadSideEffect[0] : &:r1792_15, ~m0_4 +# 1792| m1792_20(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1792_9 +# 1792| m1792_21(unknown) = Chi : total:m1792_18, partial:m1792_20 +# 1792| v1792_22(void) = NoOp : +# 1792| v1792_23(void) = ReturnIndirection[#this] : &:r1792_7, m1792_8 #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 1745| v1745_24(void) = ReturnVoid : -# 1745| v1745_25(void) = AliasedUse : ~m1745_21 -# 1745| v1745_26(void) = ExitFunction : +# 1792| v1792_24(void) = ReturnVoid : +# 1792| v1792_25(void) = AliasedUse : ~m1792_21 +# 1792| v1792_26(void) = ExitFunction : -# 1749| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass() -# 1749| Block 0 -# 1749| v1749_1(void) = EnterFunction : -# 1749| m1749_2(unknown) = AliasedDefinition : -# 1749| m1749_3(unknown) = InitializeNonLocal : -# 1749| m1749_4(unknown) = Chi : total:m1749_2, partial:m1749_3 -# 1749| r1749_5(glval) = VariableAddress[#this] : -# 1749| m1749_6(glval) = InitializeParameter[#this] : &:r1749_5 -# 1749| r1749_7(glval) = Load[#this] : &:r1749_5, m1749_6 -# 1749| m1749_8(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1749_7 -# 1749| r1749_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1749_6 -# 1749| r1749_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1749| v1749_11(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1749_10, this:r1749_9 -# 1749| m1749_12(unknown) = ^CallSideEffect : ~m1749_4 -# 1749| m1749_13(unknown) = Chi : total:m1749_4, partial:m1749_12 -# 1749| m1749_14(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1749_9 -# 1749| m1749_15(unknown) = Chi : total:m1749_13, partial:m1749_14 -# 1749| r1749_16(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : m1749_6 -# 1749| r1749_17(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : -# 1749| v1749_18(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1749_17, this:r1749_16 -# 1749| m1749_19(unknown) = ^CallSideEffect : ~m1749_15 -# 1749| m1749_20(unknown) = Chi : total:m1749_15, partial:m1749_19 -# 1749| m1749_21(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1749_16 -# 1749| m1749_22(unknown) = Chi : total:m1749_20, partial:m1749_21 -# 1749| v1749_23(void) = NoOp : -# 1749| v1749_24(void) = ReturnIndirection[#this] : &:r1749_7, m1749_8 -# 1749| v1749_25(void) = ReturnVoid : -# 1749| v1749_26(void) = AliasedUse : ~m1749_22 -# 1749| v1749_27(void) = ExitFunction : +# 1796| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass() +# 1796| Block 0 +# 1796| v1796_1(void) = EnterFunction : +# 1796| m1796_2(unknown) = AliasedDefinition : +# 1796| m1796_3(unknown) = InitializeNonLocal : +# 1796| m1796_4(unknown) = Chi : total:m1796_2, partial:m1796_3 +# 1796| r1796_5(glval) = VariableAddress[#this] : +# 1796| m1796_6(glval) = InitializeParameter[#this] : &:r1796_5 +# 1796| r1796_7(glval) = Load[#this] : &:r1796_5, m1796_6 +# 1796| m1796_8(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1796_7 +# 1796| r1796_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1796_6 +# 1796| r1796_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1796| v1796_11(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1796_10, this:r1796_9 +# 1796| m1796_12(unknown) = ^CallSideEffect : ~m1796_4 +# 1796| m1796_13(unknown) = Chi : total:m1796_4, partial:m1796_12 +# 1796| m1796_14(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1796_9 +# 1796| m1796_15(unknown) = Chi : total:m1796_13, partial:m1796_14 +# 1796| r1796_16(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : m1796_6 +# 1796| r1796_17(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : +# 1796| v1796_18(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1796_17, this:r1796_16 +# 1796| m1796_19(unknown) = ^CallSideEffect : ~m1796_15 +# 1796| m1796_20(unknown) = Chi : total:m1796_15, partial:m1796_19 +# 1796| m1796_21(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1796_16 +# 1796| m1796_22(unknown) = Chi : total:m1796_20, partial:m1796_21 +# 1796| v1796_23(void) = NoOp : +# 1796| v1796_24(void) = ReturnIndirection[#this] : &:r1796_7, m1796_8 +# 1796| v1796_25(void) = ReturnVoid : +# 1796| v1796_26(void) = AliasedUse : ~m1796_22 +# 1796| v1796_27(void) = ExitFunction : -# 1752| int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) -# 1752| Block 0 -# 1752| v1752_1(void) = EnterFunction : -# 1752| m1752_2(unknown) = AliasedDefinition : -# 1752| m1752_3(unknown) = InitializeNonLocal : -# 1752| m1752_4(unknown) = Chi : total:m1752_2, partial:m1752_3 -# 1753| r1753_1(glval) = VariableAddress[x] : -# 1753| m1753_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[x] : &:r1753_1 -# 1753| r1753_3(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1753_1, m1753_2 -# 1753| m1753_4(unknown) = InitializeIndirection[x] : &:r1753_3 -# 1754| r1754_1(glval) = VariableAddress[y] : -# 1754| m1754_2(CopyConstructorTestVirtualClass &) = InitializeParameter[y] : &:r1754_1 -# 1754| r1754_3(CopyConstructorTestVirtualClass &) = Load[y] : &:r1754_1, m1754_2 -# 1754| m1754_4(unknown) = InitializeIndirection[y] : &:r1754_3 -# 1755| r1755_1(glval) = VariableAddress[cx] : -# 1755| m1755_2(CopyConstructorTestNonVirtualClass) = Uninitialized[cx] : &:r1755_1 -# 1755| r1755_3(glval) = FunctionAddress[CopyConstructorTestNonVirtualClass] : -# 1755| r1755_4(glval) = VariableAddress[x] : -# 1755| r1755_5(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1755_4, m1753_2 -# 1755| r1755_6(glval) = CopyValue : r1755_5 -# 1755| r1755_7(CopyConstructorTestNonVirtualClass &) = CopyValue : r1755_6 -# 1755| v1755_8(void) = Call[CopyConstructorTestNonVirtualClass] : func:r1755_3, this:r1755_1, 0:r1755_7 -# 1755| m1755_9(unknown) = ^CallSideEffect : ~m1752_4 -# 1755| m1755_10(unknown) = Chi : total:m1752_4, partial:m1755_9 -# 1755| v1755_11(void) = ^BufferReadSideEffect[0] : &:r1755_7, ~m1753_4 -# 1755| m1755_12(CopyConstructorTestNonVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1755_1 -# 1755| m1755_13(CopyConstructorTestNonVirtualClass) = Chi : total:m1755_2, partial:m1755_12 -# 1756| r1756_1(glval) = VariableAddress[cy] : -# 1756| m1756_2(CopyConstructorTestVirtualClass) = Uninitialized[cy] : &:r1756_1 -# 1756| r1756_3(glval) = FunctionAddress[CopyConstructorTestVirtualClass] : -# 1756| r1756_4(glval) = VariableAddress[y] : -# 1756| r1756_5(CopyConstructorTestVirtualClass &) = Load[y] : &:r1756_4, m1754_2 -# 1756| r1756_6(glval) = CopyValue : r1756_5 -# 1756| r1756_7(CopyConstructorTestVirtualClass &) = CopyValue : r1756_6 -# 1756| v1756_8(void) = Call[CopyConstructorTestVirtualClass] : func:r1756_3, this:r1756_1, 0:r1756_7 -# 1756| m1756_9(unknown) = ^CallSideEffect : ~m1755_10 -# 1756| m1756_10(unknown) = Chi : total:m1755_10, partial:m1756_9 -# 1756| v1756_11(void) = ^BufferReadSideEffect[0] : &:r1756_7, ~m1754_4 -# 1756| m1756_12(CopyConstructorTestVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1756_1 -# 1756| m1756_13(CopyConstructorTestVirtualClass) = Chi : total:m1756_2, partial:m1756_12 -# 1757| r1757_1(glval) = VariableAddress[#return] : -# 1757| m1757_2(int) = Uninitialized[#return] : &:r1757_1 -# 1753| v1753_5(void) = ReturnIndirection[x] : &:r1753_3, m1753_4 -# 1754| v1754_5(void) = ReturnIndirection[y] : &:r1754_3, m1754_4 -# 1752| r1752_5(glval) = VariableAddress[#return] : -# 1752| v1752_6(void) = ReturnValue : &:r1752_5, m1757_2 -# 1752| v1752_7(void) = AliasedUse : ~m1756_10 -# 1752| v1752_8(void) = ExitFunction : +# 1799| int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) +# 1799| Block 0 +# 1799| v1799_1(void) = EnterFunction : +# 1799| m1799_2(unknown) = AliasedDefinition : +# 1799| m1799_3(unknown) = InitializeNonLocal : +# 1799| m1799_4(unknown) = Chi : total:m1799_2, partial:m1799_3 +# 1800| r1800_1(glval) = VariableAddress[x] : +# 1800| m1800_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[x] : &:r1800_1 +# 1800| r1800_3(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1800_1, m1800_2 +# 1800| m1800_4(unknown) = InitializeIndirection[x] : &:r1800_3 +# 1801| r1801_1(glval) = VariableAddress[y] : +# 1801| m1801_2(CopyConstructorTestVirtualClass &) = InitializeParameter[y] : &:r1801_1 +# 1801| r1801_3(CopyConstructorTestVirtualClass &) = Load[y] : &:r1801_1, m1801_2 +# 1801| m1801_4(unknown) = InitializeIndirection[y] : &:r1801_3 +# 1802| r1802_1(glval) = VariableAddress[cx] : +# 1802| m1802_2(CopyConstructorTestNonVirtualClass) = Uninitialized[cx] : &:r1802_1 +# 1802| r1802_3(glval) = FunctionAddress[CopyConstructorTestNonVirtualClass] : +# 1802| r1802_4(glval) = VariableAddress[x] : +# 1802| r1802_5(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1802_4, m1800_2 +# 1802| r1802_6(glval) = CopyValue : r1802_5 +# 1802| r1802_7(CopyConstructorTestNonVirtualClass &) = CopyValue : r1802_6 +# 1802| v1802_8(void) = Call[CopyConstructorTestNonVirtualClass] : func:r1802_3, this:r1802_1, 0:r1802_7 +# 1802| m1802_9(unknown) = ^CallSideEffect : ~m1799_4 +# 1802| m1802_10(unknown) = Chi : total:m1799_4, partial:m1802_9 +# 1802| v1802_11(void) = ^BufferReadSideEffect[0] : &:r1802_7, ~m1800_4 +# 1802| m1802_12(CopyConstructorTestNonVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1802_1 +# 1802| m1802_13(CopyConstructorTestNonVirtualClass) = Chi : total:m1802_2, partial:m1802_12 +# 1803| r1803_1(glval) = VariableAddress[cy] : +# 1803| m1803_2(CopyConstructorTestVirtualClass) = Uninitialized[cy] : &:r1803_1 +# 1803| r1803_3(glval) = FunctionAddress[CopyConstructorTestVirtualClass] : +# 1803| r1803_4(glval) = VariableAddress[y] : +# 1803| r1803_5(CopyConstructorTestVirtualClass &) = Load[y] : &:r1803_4, m1801_2 +# 1803| r1803_6(glval) = CopyValue : r1803_5 +# 1803| r1803_7(CopyConstructorTestVirtualClass &) = CopyValue : r1803_6 +# 1803| v1803_8(void) = Call[CopyConstructorTestVirtualClass] : func:r1803_3, this:r1803_1, 0:r1803_7 +# 1803| m1803_9(unknown) = ^CallSideEffect : ~m1802_10 +# 1803| m1803_10(unknown) = Chi : total:m1802_10, partial:m1803_9 +# 1803| v1803_11(void) = ^BufferReadSideEffect[0] : &:r1803_7, ~m1801_4 +# 1803| m1803_12(CopyConstructorTestVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1803_1 +# 1803| m1803_13(CopyConstructorTestVirtualClass) = Chi : total:m1803_2, partial:m1803_12 +# 1804| r1804_1(glval) = VariableAddress[#return] : +# 1804| m1804_2(int) = Uninitialized[#return] : &:r1804_1 +# 1800| v1800_5(void) = ReturnIndirection[x] : &:r1800_3, m1800_4 +# 1801| v1801_5(void) = ReturnIndirection[y] : &:r1801_3, m1801_4 +# 1799| r1799_5(glval) = VariableAddress[#return] : +# 1799| v1799_6(void) = ReturnValue : &:r1799_5, m1804_2 +# 1799| v1799_7(void) = AliasedUse : ~m1803_10 +# 1799| v1799_8(void) = ExitFunction : -# 1759| void if_initialization(int) -# 1759| Block 0 -# 1759| v1759_1(void) = EnterFunction : -# 1759| m1759_2(unknown) = AliasedDefinition : -# 1759| m1759_3(unknown) = InitializeNonLocal : -# 1759| m1759_4(unknown) = Chi : total:m1759_2, partial:m1759_3 -# 1759| r1759_5(glval) = VariableAddress[x] : -# 1759| m1759_6(int) = InitializeParameter[x] : &:r1759_5 -# 1760| r1760_1(glval) = VariableAddress[y] : -# 1760| r1760_2(glval) = VariableAddress[x] : -# 1760| r1760_3(int) = Load[x] : &:r1760_2, m1759_6 -# 1760| m1760_4(int) = Store[y] : &:r1760_1, r1760_3 -# 1760| r1760_5(glval) = VariableAddress[x] : -# 1760| r1760_6(int) = Load[x] : &:r1760_5, m1759_6 -# 1760| r1760_7(int) = Constant[1] : -# 1760| r1760_8(int) = Add : r1760_6, r1760_7 -# 1760| r1760_9(int) = Constant[0] : -# 1760| r1760_10(bool) = CompareNE : r1760_8, r1760_9 -# 1760| v1760_11(void) = ConditionalBranch : r1760_10 +# 1806| void if_initialization(int) +# 1806| Block 0 +# 1806| v1806_1(void) = EnterFunction : +# 1806| m1806_2(unknown) = AliasedDefinition : +# 1806| m1806_3(unknown) = InitializeNonLocal : +# 1806| m1806_4(unknown) = Chi : total:m1806_2, partial:m1806_3 +# 1806| r1806_5(glval) = VariableAddress[x] : +# 1806| m1806_6(int) = InitializeParameter[x] : &:r1806_5 +# 1807| r1807_1(glval) = VariableAddress[y] : +# 1807| r1807_2(glval) = VariableAddress[x] : +# 1807| r1807_3(int) = Load[x] : &:r1807_2, m1806_6 +# 1807| m1807_4(int) = Store[y] : &:r1807_1, r1807_3 +# 1807| r1807_5(glval) = VariableAddress[x] : +# 1807| r1807_6(int) = Load[x] : &:r1807_5, m1806_6 +# 1807| r1807_7(int) = Constant[1] : +# 1807| r1807_8(int) = Add : r1807_6, r1807_7 +# 1807| r1807_9(int) = Constant[0] : +# 1807| r1807_10(bool) = CompareNE : r1807_8, r1807_9 +# 1807| v1807_11(void) = ConditionalBranch : r1807_10 #-----| False -> Block 2 #-----| True -> Block 1 -# 1761| Block 1 -# 1761| r1761_1(glval) = VariableAddress[x] : -# 1761| r1761_2(int) = Load[x] : &:r1761_1, m1759_6 -# 1761| r1761_3(glval) = VariableAddress[y] : -# 1761| r1761_4(int) = Load[y] : &:r1761_3, m1760_4 -# 1761| r1761_5(int) = Add : r1761_2, r1761_4 -# 1761| r1761_6(glval) = VariableAddress[x] : -# 1761| m1761_7(int) = Store[x] : &:r1761_6, r1761_5 +# 1808| Block 1 +# 1808| r1808_1(glval) = VariableAddress[x] : +# 1808| r1808_2(int) = Load[x] : &:r1808_1, m1806_6 +# 1808| r1808_3(glval) = VariableAddress[y] : +# 1808| r1808_4(int) = Load[y] : &:r1808_3, m1807_4 +# 1808| r1808_5(int) = Add : r1808_2, r1808_4 +# 1808| r1808_6(glval) = VariableAddress[x] : +# 1808| m1808_7(int) = Store[x] : &:r1808_6, r1808_5 #-----| Goto -> Block 2 -# 1764| Block 2 -# 1764| m1764_1(int) = Phi : from 0:m1759_6, from 1:m1761_7 -# 1764| r1764_2(glval) = VariableAddress[w] : -# 1764| m1764_3(int) = Uninitialized[w] : &:r1764_2 -# 1765| r1765_1(glval) = VariableAddress[x] : -# 1765| r1765_2(int) = Load[x] : &:r1765_1, m1764_1 -# 1765| r1765_3(glval) = VariableAddress[w] : -# 1765| m1765_4(int) = Store[w] : &:r1765_3, r1765_2 -# 1765| r1765_5(glval) = VariableAddress[x] : -# 1765| r1765_6(int) = Load[x] : &:r1765_5, m1764_1 -# 1765| r1765_7(int) = Constant[1] : -# 1765| r1765_8(int) = Add : r1765_6, r1765_7 -# 1765| r1765_9(int) = Constant[0] : -# 1765| r1765_10(bool) = CompareNE : r1765_8, r1765_9 -# 1765| v1765_11(void) = ConditionalBranch : r1765_10 +# 1811| Block 2 +# 1811| m1811_1(int) = Phi : from 0:m1806_6, from 1:m1808_7 +# 1811| r1811_2(glval) = VariableAddress[w] : +# 1811| m1811_3(int) = Uninitialized[w] : &:r1811_2 +# 1812| r1812_1(glval) = VariableAddress[x] : +# 1812| r1812_2(int) = Load[x] : &:r1812_1, m1811_1 +# 1812| r1812_3(glval) = VariableAddress[w] : +# 1812| m1812_4(int) = Store[w] : &:r1812_3, r1812_2 +# 1812| r1812_5(glval) = VariableAddress[x] : +# 1812| r1812_6(int) = Load[x] : &:r1812_5, m1811_1 +# 1812| r1812_7(int) = Constant[1] : +# 1812| r1812_8(int) = Add : r1812_6, r1812_7 +# 1812| r1812_9(int) = Constant[0] : +# 1812| r1812_10(bool) = CompareNE : r1812_8, r1812_9 +# 1812| v1812_11(void) = ConditionalBranch : r1812_10 #-----| False -> Block 4 #-----| True -> Block 3 -# 1766| Block 3 -# 1766| r1766_1(glval) = VariableAddress[x] : -# 1766| r1766_2(int) = Load[x] : &:r1766_1, m1764_1 -# 1766| r1766_3(glval) = VariableAddress[w] : -# 1766| r1766_4(int) = Load[w] : &:r1766_3, m1765_4 -# 1766| r1766_5(int) = Add : r1766_2, r1766_4 -# 1766| r1766_6(glval) = VariableAddress[x] : -# 1766| m1766_7(int) = Store[x] : &:r1766_6, r1766_5 +# 1813| Block 3 +# 1813| r1813_1(glval) = VariableAddress[x] : +# 1813| r1813_2(int) = Load[x] : &:r1813_1, m1811_1 +# 1813| r1813_3(glval) = VariableAddress[w] : +# 1813| r1813_4(int) = Load[w] : &:r1813_3, m1812_4 +# 1813| r1813_5(int) = Add : r1813_2, r1813_4 +# 1813| r1813_6(glval) = VariableAddress[x] : +# 1813| m1813_7(int) = Store[x] : &:r1813_6, r1813_5 #-----| Goto -> Block 4 -# 1769| Block 4 -# 1769| m1769_1(int) = Phi : from 2:m1764_1, from 3:m1766_7 -# 1769| r1769_2(glval) = VariableAddress[x] : -# 1769| r1769_3(int) = Load[x] : &:r1769_2, m1769_1 -# 1769| r1769_4(glval) = VariableAddress[w] : -# 1769| m1769_5(int) = Store[w] : &:r1769_4, r1769_3 -# 1769| r1769_6(glval) = VariableAddress[w2] : -# 1769| r1769_7(glval) = VariableAddress[w] : -# 1769| r1769_8(int) = Load[w] : &:r1769_7, m1769_5 -# 1769| m1769_9(int) = Store[w2] : &:r1769_6, r1769_8 -# 1769| r1769_10(glval) = VariableAddress[w2] : -# 1769| r1769_11(int) = Load[w2] : &:r1769_10, m1769_9 -# 1769| r1769_12(int) = Constant[0] : -# 1769| r1769_13(bool) = CompareNE : r1769_11, r1769_12 -# 1769| r1769_14(bool) = CopyValue : r1769_13 -# 1769| v1769_15(void) = ConditionalBranch : r1769_14 +# 1816| Block 4 +# 1816| m1816_1(int) = Phi : from 2:m1811_1, from 3:m1813_7 +# 1816| r1816_2(glval) = VariableAddress[x] : +# 1816| r1816_3(int) = Load[x] : &:r1816_2, m1816_1 +# 1816| r1816_4(glval) = VariableAddress[w] : +# 1816| m1816_5(int) = Store[w] : &:r1816_4, r1816_3 +# 1816| r1816_6(glval) = VariableAddress[w2] : +# 1816| r1816_7(glval) = VariableAddress[w] : +# 1816| r1816_8(int) = Load[w] : &:r1816_7, m1816_5 +# 1816| m1816_9(int) = Store[w2] : &:r1816_6, r1816_8 +# 1816| r1816_10(glval) = VariableAddress[w2] : +# 1816| r1816_11(int) = Load[w2] : &:r1816_10, m1816_9 +# 1816| r1816_12(int) = Constant[0] : +# 1816| r1816_13(bool) = CompareNE : r1816_11, r1816_12 +# 1816| r1816_14(bool) = CopyValue : r1816_13 +# 1816| v1816_15(void) = ConditionalBranch : r1816_14 #-----| False -> Block 6 #-----| True -> Block 5 -# 1770| Block 5 -# 1770| r1770_1(glval) = VariableAddress[x] : -# 1770| r1770_2(int) = Load[x] : &:r1770_1, m1769_1 -# 1770| r1770_3(glval) = VariableAddress[w] : -# 1770| r1770_4(int) = Load[w] : &:r1770_3, m1769_5 -# 1770| r1770_5(int) = Add : r1770_2, r1770_4 -# 1770| r1770_6(glval) = VariableAddress[x] : -# 1770| m1770_7(int) = Store[x] : &:r1770_6, r1770_5 +# 1817| Block 5 +# 1817| r1817_1(glval) = VariableAddress[x] : +# 1817| r1817_2(int) = Load[x] : &:r1817_1, m1816_1 +# 1817| r1817_3(glval) = VariableAddress[w] : +# 1817| r1817_4(int) = Load[w] : &:r1817_3, m1816_5 +# 1817| r1817_5(int) = Add : r1817_2, r1817_4 +# 1817| r1817_6(glval) = VariableAddress[x] : +# 1817| m1817_7(int) = Store[x] : &:r1817_6, r1817_5 #-----| Goto -> Block 6 -# 1773| Block 6 -# 1773| m1773_1(int) = Phi : from 4:m1769_1, from 5:m1770_7 -# 1773| r1773_2(glval) = VariableAddress[v] : -# 1773| r1773_3(glval) = VariableAddress[x] : -# 1773| r1773_4(int) = Load[x] : &:r1773_3, m1773_1 -# 1773| m1773_5(int) = Store[v] : &:r1773_2, r1773_4 -# 1773| r1773_6(glval) = VariableAddress[v2] : -# 1773| r1773_7(glval) = VariableAddress[v] : -# 1773| r1773_8(int) = Load[v] : &:r1773_7, m1773_5 -# 1773| m1773_9(int) = Store[v2] : &:r1773_6, r1773_8 -# 1773| r1773_10(glval) = VariableAddress[v2] : -# 1773| r1773_11(int) = Load[v2] : &:r1773_10, m1773_9 -# 1773| r1773_12(int) = Constant[0] : -# 1773| r1773_13(bool) = CompareNE : r1773_11, r1773_12 -# 1773| r1773_14(bool) = CopyValue : r1773_13 -# 1773| v1773_15(void) = ConditionalBranch : r1773_14 +# 1820| Block 6 +# 1820| m1820_1(int) = Phi : from 4:m1816_1, from 5:m1817_7 +# 1820| r1820_2(glval) = VariableAddress[v] : +# 1820| r1820_3(glval) = VariableAddress[x] : +# 1820| r1820_4(int) = Load[x] : &:r1820_3, m1820_1 +# 1820| m1820_5(int) = Store[v] : &:r1820_2, r1820_4 +# 1820| r1820_6(glval) = VariableAddress[v2] : +# 1820| r1820_7(glval) = VariableAddress[v] : +# 1820| r1820_8(int) = Load[v] : &:r1820_7, m1820_5 +# 1820| m1820_9(int) = Store[v2] : &:r1820_6, r1820_8 +# 1820| r1820_10(glval) = VariableAddress[v2] : +# 1820| r1820_11(int) = Load[v2] : &:r1820_10, m1820_9 +# 1820| r1820_12(int) = Constant[0] : +# 1820| r1820_13(bool) = CompareNE : r1820_11, r1820_12 +# 1820| r1820_14(bool) = CopyValue : r1820_13 +# 1820| v1820_15(void) = ConditionalBranch : r1820_14 #-----| False -> Block 8 #-----| True -> Block 7 -# 1774| Block 7 -# 1774| r1774_1(glval) = VariableAddress[x] : -# 1774| r1774_2(int) = Load[x] : &:r1774_1, m1773_1 -# 1774| r1774_3(glval) = VariableAddress[v] : -# 1774| r1774_4(int) = Load[v] : &:r1774_3, m1773_5 -# 1774| r1774_5(int) = Add : r1774_2, r1774_4 -# 1774| r1774_6(glval) = VariableAddress[x] : -# 1774| m1774_7(int) = Store[x] : &:r1774_6, r1774_5 +# 1821| Block 7 +# 1821| r1821_1(glval) = VariableAddress[x] : +# 1821| r1821_2(int) = Load[x] : &:r1821_1, m1820_1 +# 1821| r1821_3(glval) = VariableAddress[v] : +# 1821| r1821_4(int) = Load[v] : &:r1821_3, m1820_5 +# 1821| r1821_5(int) = Add : r1821_2, r1821_4 +# 1821| r1821_6(glval) = VariableAddress[x] : +# 1821| m1821_7(int) = Store[x] : &:r1821_6, r1821_5 #-----| Goto -> Block 8 -# 1777| Block 8 -# 1777| m1777_1(int) = Phi : from 6:m1773_1, from 7:m1774_7 -# 1777| r1777_2(glval) = VariableAddress[z] : -# 1777| r1777_3(glval) = VariableAddress[x] : -# 1777| r1777_4(int) = Load[x] : &:r1777_3, m1777_1 -# 1777| m1777_5(int) = Store[z] : &:r1777_2, r1777_4 -# 1778| r1778_1(glval) = VariableAddress[z] : -# 1778| r1778_2(int) = Load[z] : &:r1778_1, m1777_5 -# 1778| r1778_3(int) = Constant[0] : -# 1778| r1778_4(bool) = CompareNE : r1778_2, r1778_3 -# 1778| v1778_5(void) = ConditionalBranch : r1778_4 +# 1824| Block 8 +# 1824| m1824_1(int) = Phi : from 6:m1820_1, from 7:m1821_7 +# 1824| r1824_2(glval) = VariableAddress[z] : +# 1824| r1824_3(glval) = VariableAddress[x] : +# 1824| r1824_4(int) = Load[x] : &:r1824_3, m1824_1 +# 1824| m1824_5(int) = Store[z] : &:r1824_2, r1824_4 +# 1825| r1825_1(glval) = VariableAddress[z] : +# 1825| r1825_2(int) = Load[z] : &:r1825_1, m1824_5 +# 1825| r1825_3(int) = Constant[0] : +# 1825| r1825_4(bool) = CompareNE : r1825_2, r1825_3 +# 1825| v1825_5(void) = ConditionalBranch : r1825_4 #-----| False -> Block 10 #-----| True -> Block 9 -# 1779| Block 9 -# 1779| r1779_1(glval) = VariableAddress[x] : -# 1779| r1779_2(int) = Load[x] : &:r1779_1, m1777_1 -# 1779| r1779_3(glval) = VariableAddress[z] : -# 1779| r1779_4(int) = Load[z] : &:r1779_3, m1777_5 -# 1779| r1779_5(int) = Add : r1779_2, r1779_4 -# 1779| r1779_6(glval) = VariableAddress[x] : -# 1779| m1779_7(int) = Store[x] : &:r1779_6, r1779_5 +# 1826| Block 9 +# 1826| r1826_1(glval) = VariableAddress[x] : +# 1826| r1826_2(int) = Load[x] : &:r1826_1, m1824_1 +# 1826| r1826_3(glval) = VariableAddress[z] : +# 1826| r1826_4(int) = Load[z] : &:r1826_3, m1824_5 +# 1826| r1826_5(int) = Add : r1826_2, r1826_4 +# 1826| r1826_6(glval) = VariableAddress[x] : +# 1826| m1826_7(int) = Store[x] : &:r1826_6, r1826_5 #-----| Goto -> Block 10 -# 1782| Block 10 -# 1782| m1782_1(int) = Phi : from 8:m1777_1, from 9:m1779_7 -# 1782| r1782_2(glval) = VariableAddress[z2] : -# 1782| r1782_3(glval) = VariableAddress[z] : -# 1782| r1782_4(int) = Load[z] : &:r1782_3, m1777_5 -# 1782| m1782_5(int) = Store[z2] : &:r1782_2, r1782_4 -# 1782| r1782_6(glval) = VariableAddress[z2] : -# 1782| r1782_7(int) = Load[z2] : &:r1782_6, m1782_5 -# 1782| r1782_8(int) = Constant[0] : -# 1782| r1782_9(bool) = CompareNE : r1782_7, r1782_8 -# 1782| r1782_10(bool) = CopyValue : r1782_9 -# 1782| v1782_11(void) = ConditionalBranch : r1782_10 +# 1829| Block 10 +# 1829| m1829_1(int) = Phi : from 8:m1824_1, from 9:m1826_7 +# 1829| r1829_2(glval) = VariableAddress[z2] : +# 1829| r1829_3(glval) = VariableAddress[z] : +# 1829| r1829_4(int) = Load[z] : &:r1829_3, m1824_5 +# 1829| m1829_5(int) = Store[z2] : &:r1829_2, r1829_4 +# 1829| r1829_6(glval) = VariableAddress[z2] : +# 1829| r1829_7(int) = Load[z2] : &:r1829_6, m1829_5 +# 1829| r1829_8(int) = Constant[0] : +# 1829| r1829_9(bool) = CompareNE : r1829_7, r1829_8 +# 1829| r1829_10(bool) = CopyValue : r1829_9 +# 1829| v1829_11(void) = ConditionalBranch : r1829_10 #-----| False -> Block 12 #-----| True -> Block 11 -# 1783| Block 11 -# 1783| r1783_1(glval) = VariableAddress[z2] : -# 1783| r1783_2(int) = Load[z2] : &:r1783_1, m1782_5 -# 1783| r1783_3(glval) = VariableAddress[x] : -# 1783| r1783_4(int) = Load[x] : &:r1783_3, m1782_1 -# 1783| r1783_5(int) = Add : r1783_4, r1783_2 -# 1783| m1783_6(int) = Store[x] : &:r1783_3, r1783_5 +# 1830| Block 11 +# 1830| r1830_1(glval) = VariableAddress[z2] : +# 1830| r1830_2(int) = Load[z2] : &:r1830_1, m1829_5 +# 1830| r1830_3(glval) = VariableAddress[x] : +# 1830| r1830_4(int) = Load[x] : &:r1830_3, m1829_1 +# 1830| r1830_5(int) = Add : r1830_4, r1830_2 +# 1830| m1830_6(int) = Store[x] : &:r1830_3, r1830_5 #-----| Goto -> Block 12 -# 1785| Block 12 -# 1785| v1785_1(void) = NoOp : -# 1759| v1759_7(void) = ReturnVoid : -# 1759| v1759_8(void) = AliasedUse : m1759_3 -# 1759| v1759_9(void) = ExitFunction : +# 1832| Block 12 +# 1832| v1832_1(void) = NoOp : +# 1806| v1806_7(void) = ReturnVoid : +# 1806| v1806_8(void) = AliasedUse : m1806_3 +# 1806| v1806_9(void) = ExitFunction : -# 1787| void switch_initialization(int) -# 1787| Block 0 -# 1787| v1787_1(void) = EnterFunction : -# 1787| m1787_2(unknown) = AliasedDefinition : -# 1787| m1787_3(unknown) = InitializeNonLocal : -# 1787| m1787_4(unknown) = Chi : total:m1787_2, partial:m1787_3 -# 1787| r1787_5(glval) = VariableAddress[x] : -# 1787| m1787_6(int) = InitializeParameter[x] : &:r1787_5 -# 1788| r1788_1(glval) = VariableAddress[y] : -# 1788| r1788_2(glval) = VariableAddress[x] : -# 1788| r1788_3(int) = Load[x] : &:r1788_2, m1787_6 -# 1788| m1788_4(int) = Store[y] : &:r1788_1, r1788_3 -# 1788| r1788_5(glval) = VariableAddress[x] : -# 1788| r1788_6(int) = Load[x] : &:r1788_5, m1787_6 -# 1788| r1788_7(int) = Constant[1] : -# 1788| r1788_8(int) = Add : r1788_6, r1788_7 -# 1788| v1788_9(void) = Switch : r1788_8 +# 1834| void switch_initialization(int) +# 1834| Block 0 +# 1834| v1834_1(void) = EnterFunction : +# 1834| m1834_2(unknown) = AliasedDefinition : +# 1834| m1834_3(unknown) = InitializeNonLocal : +# 1834| m1834_4(unknown) = Chi : total:m1834_2, partial:m1834_3 +# 1834| r1834_5(glval) = VariableAddress[x] : +# 1834| m1834_6(int) = InitializeParameter[x] : &:r1834_5 +# 1835| r1835_1(glval) = VariableAddress[y] : +# 1835| r1835_2(glval) = VariableAddress[x] : +# 1835| r1835_3(int) = Load[x] : &:r1835_2, m1834_6 +# 1835| m1835_4(int) = Store[y] : &:r1835_1, r1835_3 +# 1835| r1835_5(glval) = VariableAddress[x] : +# 1835| r1835_6(int) = Load[x] : &:r1835_5, m1834_6 +# 1835| r1835_7(int) = Constant[1] : +# 1835| r1835_8(int) = Add : r1835_6, r1835_7 +# 1835| v1835_9(void) = Switch : r1835_8 #-----| Default -> Block 1 -# 1789| Block 1 -# 1789| v1789_1(void) = NoOp : -# 1790| r1790_1(glval) = VariableAddress[x] : -# 1790| r1790_2(int) = Load[x] : &:r1790_1, m1787_6 -# 1790| r1790_3(glval) = VariableAddress[y] : -# 1790| r1790_4(int) = Load[y] : &:r1790_3, m1788_4 -# 1790| r1790_5(int) = Add : r1790_2, r1790_4 -# 1790| r1790_6(glval) = VariableAddress[x] : -# 1790| m1790_7(int) = Store[x] : &:r1790_6, r1790_5 -# 1793| r1793_1(glval) = VariableAddress[w] : -# 1793| m1793_2(int) = Uninitialized[w] : &:r1793_1 -# 1794| r1794_1(glval) = VariableAddress[x] : -# 1794| r1794_2(int) = Load[x] : &:r1794_1, m1790_7 -# 1794| r1794_3(glval) = VariableAddress[w] : -# 1794| m1794_4(int) = Store[w] : &:r1794_3, r1794_2 -# 1794| r1794_5(glval) = VariableAddress[x] : -# 1794| r1794_6(int) = Load[x] : &:r1794_5, m1790_7 -# 1794| r1794_7(int) = Constant[1] : -# 1794| r1794_8(int) = Add : r1794_6, r1794_7 -# 1794| v1794_9(void) = Switch : r1794_8 +# 1836| Block 1 +# 1836| v1836_1(void) = NoOp : +# 1837| r1837_1(glval) = VariableAddress[x] : +# 1837| r1837_2(int) = Load[x] : &:r1837_1, m1834_6 +# 1837| r1837_3(glval) = VariableAddress[y] : +# 1837| r1837_4(int) = Load[y] : &:r1837_3, m1835_4 +# 1837| r1837_5(int) = Add : r1837_2, r1837_4 +# 1837| r1837_6(glval) = VariableAddress[x] : +# 1837| m1837_7(int) = Store[x] : &:r1837_6, r1837_5 +# 1840| r1840_1(glval) = VariableAddress[w] : +# 1840| m1840_2(int) = Uninitialized[w] : &:r1840_1 +# 1841| r1841_1(glval) = VariableAddress[x] : +# 1841| r1841_2(int) = Load[x] : &:r1841_1, m1837_7 +# 1841| r1841_3(glval) = VariableAddress[w] : +# 1841| m1841_4(int) = Store[w] : &:r1841_3, r1841_2 +# 1841| r1841_5(glval) = VariableAddress[x] : +# 1841| r1841_6(int) = Load[x] : &:r1841_5, m1837_7 +# 1841| r1841_7(int) = Constant[1] : +# 1841| r1841_8(int) = Add : r1841_6, r1841_7 +# 1841| v1841_9(void) = Switch : r1841_8 #-----| Default -> Block 2 -# 1795| Block 2 -# 1795| v1795_1(void) = NoOp : -# 1796| r1796_1(glval) = VariableAddress[x] : -# 1796| r1796_2(int) = Load[x] : &:r1796_1, m1790_7 -# 1796| r1796_3(glval) = VariableAddress[w] : -# 1796| r1796_4(int) = Load[w] : &:r1796_3, m1794_4 -# 1796| r1796_5(int) = Add : r1796_2, r1796_4 -# 1796| r1796_6(glval) = VariableAddress[x] : -# 1796| m1796_7(int) = Store[x] : &:r1796_6, r1796_5 -# 1799| r1799_1(glval) = VariableAddress[x] : -# 1799| r1799_2(int) = Load[x] : &:r1799_1, m1796_7 -# 1799| r1799_3(glval) = VariableAddress[w] : -# 1799| m1799_4(int) = Store[w] : &:r1799_3, r1799_2 -# 1799| r1799_5(glval) = VariableAddress[w2] : -# 1799| r1799_6(glval) = VariableAddress[w] : -# 1799| r1799_7(int) = Load[w] : &:r1799_6, m1799_4 -# 1799| m1799_8(int) = Store[w2] : &:r1799_5, r1799_7 -# 1799| r1799_9(glval) = VariableAddress[w2] : -# 1799| r1799_10(int) = Load[w2] : &:r1799_9, m1799_8 -# 1799| r1799_11(int) = CopyValue : r1799_10 -# 1799| v1799_12(void) = Switch : r1799_11 +# 1842| Block 2 +# 1842| v1842_1(void) = NoOp : +# 1843| r1843_1(glval) = VariableAddress[x] : +# 1843| r1843_2(int) = Load[x] : &:r1843_1, m1837_7 +# 1843| r1843_3(glval) = VariableAddress[w] : +# 1843| r1843_4(int) = Load[w] : &:r1843_3, m1841_4 +# 1843| r1843_5(int) = Add : r1843_2, r1843_4 +# 1843| r1843_6(glval) = VariableAddress[x] : +# 1843| m1843_7(int) = Store[x] : &:r1843_6, r1843_5 +# 1846| r1846_1(glval) = VariableAddress[x] : +# 1846| r1846_2(int) = Load[x] : &:r1846_1, m1843_7 +# 1846| r1846_3(glval) = VariableAddress[w] : +# 1846| m1846_4(int) = Store[w] : &:r1846_3, r1846_2 +# 1846| r1846_5(glval) = VariableAddress[w2] : +# 1846| r1846_6(glval) = VariableAddress[w] : +# 1846| r1846_7(int) = Load[w] : &:r1846_6, m1846_4 +# 1846| m1846_8(int) = Store[w2] : &:r1846_5, r1846_7 +# 1846| r1846_9(glval) = VariableAddress[w2] : +# 1846| r1846_10(int) = Load[w2] : &:r1846_9, m1846_8 +# 1846| r1846_11(int) = CopyValue : r1846_10 +# 1846| v1846_12(void) = Switch : r1846_11 #-----| Default -> Block 3 -# 1800| Block 3 -# 1800| v1800_1(void) = NoOp : -# 1801| r1801_1(glval) = VariableAddress[x] : -# 1801| r1801_2(int) = Load[x] : &:r1801_1, m1796_7 -# 1801| r1801_3(glval) = VariableAddress[w] : -# 1801| r1801_4(int) = Load[w] : &:r1801_3, m1799_4 -# 1801| r1801_5(int) = Add : r1801_2, r1801_4 -# 1801| r1801_6(glval) = VariableAddress[x] : -# 1801| m1801_7(int) = Store[x] : &:r1801_6, r1801_5 -# 1804| r1804_1(glval) = VariableAddress[v] : -# 1804| r1804_2(glval) = VariableAddress[x] : -# 1804| r1804_3(int) = Load[x] : &:r1804_2, m1801_7 -# 1804| m1804_4(int) = Store[v] : &:r1804_1, r1804_3 -# 1804| r1804_5(glval) = VariableAddress[v2] : -# 1804| r1804_6(glval) = VariableAddress[v] : -# 1804| r1804_7(int) = Load[v] : &:r1804_6, m1804_4 -# 1804| m1804_8(int) = Store[v2] : &:r1804_5, r1804_7 -# 1804| r1804_9(glval) = VariableAddress[v2] : -# 1804| r1804_10(int) = Load[v2] : &:r1804_9, m1804_8 -# 1804| r1804_11(int) = CopyValue : r1804_10 -# 1804| v1804_12(void) = Switch : r1804_11 +# 1847| Block 3 +# 1847| v1847_1(void) = NoOp : +# 1848| r1848_1(glval) = VariableAddress[x] : +# 1848| r1848_2(int) = Load[x] : &:r1848_1, m1843_7 +# 1848| r1848_3(glval) = VariableAddress[w] : +# 1848| r1848_4(int) = Load[w] : &:r1848_3, m1846_4 +# 1848| r1848_5(int) = Add : r1848_2, r1848_4 +# 1848| r1848_6(glval) = VariableAddress[x] : +# 1848| m1848_7(int) = Store[x] : &:r1848_6, r1848_5 +# 1851| r1851_1(glval) = VariableAddress[v] : +# 1851| r1851_2(glval) = VariableAddress[x] : +# 1851| r1851_3(int) = Load[x] : &:r1851_2, m1848_7 +# 1851| m1851_4(int) = Store[v] : &:r1851_1, r1851_3 +# 1851| r1851_5(glval) = VariableAddress[v2] : +# 1851| r1851_6(glval) = VariableAddress[v] : +# 1851| r1851_7(int) = Load[v] : &:r1851_6, m1851_4 +# 1851| m1851_8(int) = Store[v2] : &:r1851_5, r1851_7 +# 1851| r1851_9(glval) = VariableAddress[v2] : +# 1851| r1851_10(int) = Load[v2] : &:r1851_9, m1851_8 +# 1851| r1851_11(int) = CopyValue : r1851_10 +# 1851| v1851_12(void) = Switch : r1851_11 #-----| Default -> Block 4 -# 1805| Block 4 -# 1805| v1805_1(void) = NoOp : -# 1806| r1806_1(glval) = VariableAddress[x] : -# 1806| r1806_2(int) = Load[x] : &:r1806_1, m1801_7 -# 1806| r1806_3(glval) = VariableAddress[v] : -# 1806| r1806_4(int) = Load[v] : &:r1806_3, m1804_4 -# 1806| r1806_5(int) = Add : r1806_2, r1806_4 -# 1806| r1806_6(glval) = VariableAddress[x] : -# 1806| m1806_7(int) = Store[x] : &:r1806_6, r1806_5 -# 1809| r1809_1(glval) = VariableAddress[z] : -# 1809| r1809_2(glval) = VariableAddress[x] : -# 1809| r1809_3(int) = Load[x] : &:r1809_2, m1806_7 -# 1809| m1809_4(int) = Store[z] : &:r1809_1, r1809_3 -# 1810| r1810_1(glval) = VariableAddress[z] : -# 1810| r1810_2(int) = Load[z] : &:r1810_1, m1809_4 -# 1810| v1810_3(void) = Switch : r1810_2 +# 1852| Block 4 +# 1852| v1852_1(void) = NoOp : +# 1853| r1853_1(glval) = VariableAddress[x] : +# 1853| r1853_2(int) = Load[x] : &:r1853_1, m1848_7 +# 1853| r1853_3(glval) = VariableAddress[v] : +# 1853| r1853_4(int) = Load[v] : &:r1853_3, m1851_4 +# 1853| r1853_5(int) = Add : r1853_2, r1853_4 +# 1853| r1853_6(glval) = VariableAddress[x] : +# 1853| m1853_7(int) = Store[x] : &:r1853_6, r1853_5 +# 1856| r1856_1(glval) = VariableAddress[z] : +# 1856| r1856_2(glval) = VariableAddress[x] : +# 1856| r1856_3(int) = Load[x] : &:r1856_2, m1853_7 +# 1856| m1856_4(int) = Store[z] : &:r1856_1, r1856_3 +# 1857| r1857_1(glval) = VariableAddress[z] : +# 1857| r1857_2(int) = Load[z] : &:r1857_1, m1856_4 +# 1857| v1857_3(void) = Switch : r1857_2 #-----| Default -> Block 5 -# 1811| Block 5 -# 1811| v1811_1(void) = NoOp : -# 1812| r1812_1(glval) = VariableAddress[x] : -# 1812| r1812_2(int) = Load[x] : &:r1812_1, m1806_7 -# 1812| r1812_3(glval) = VariableAddress[z] : -# 1812| r1812_4(int) = Load[z] : &:r1812_3, m1809_4 -# 1812| r1812_5(int) = Add : r1812_2, r1812_4 -# 1812| r1812_6(glval) = VariableAddress[x] : -# 1812| m1812_7(int) = Store[x] : &:r1812_6, r1812_5 -# 1815| r1815_1(glval) = VariableAddress[z2] : -# 1815| r1815_2(glval) = VariableAddress[z] : -# 1815| r1815_3(int) = Load[z] : &:r1815_2, m1809_4 -# 1815| m1815_4(int) = Store[z2] : &:r1815_1, r1815_3 -# 1815| r1815_5(glval) = VariableAddress[z2] : -# 1815| r1815_6(int) = Load[z2] : &:r1815_5, m1815_4 -# 1815| r1815_7(int) = CopyValue : r1815_6 -# 1815| v1815_8(void) = Switch : r1815_7 +# 1858| Block 5 +# 1858| v1858_1(void) = NoOp : +# 1859| r1859_1(glval) = VariableAddress[x] : +# 1859| r1859_2(int) = Load[x] : &:r1859_1, m1853_7 +# 1859| r1859_3(glval) = VariableAddress[z] : +# 1859| r1859_4(int) = Load[z] : &:r1859_3, m1856_4 +# 1859| r1859_5(int) = Add : r1859_2, r1859_4 +# 1859| r1859_6(glval) = VariableAddress[x] : +# 1859| m1859_7(int) = Store[x] : &:r1859_6, r1859_5 +# 1862| r1862_1(glval) = VariableAddress[z2] : +# 1862| r1862_2(glval) = VariableAddress[z] : +# 1862| r1862_3(int) = Load[z] : &:r1862_2, m1856_4 +# 1862| m1862_4(int) = Store[z2] : &:r1862_1, r1862_3 +# 1862| r1862_5(glval) = VariableAddress[z2] : +# 1862| r1862_6(int) = Load[z2] : &:r1862_5, m1862_4 +# 1862| r1862_7(int) = CopyValue : r1862_6 +# 1862| v1862_8(void) = Switch : r1862_7 #-----| Default -> Block 6 -# 1816| Block 6 -# 1816| v1816_1(void) = NoOp : -# 1817| r1817_1(glval) = VariableAddress[z2] : -# 1817| r1817_2(int) = Load[z2] : &:r1817_1, m1815_4 -# 1817| r1817_3(glval) = VariableAddress[x] : -# 1817| r1817_4(int) = Load[x] : &:r1817_3, m1812_7 -# 1817| r1817_5(int) = Add : r1817_4, r1817_2 -# 1817| m1817_6(int) = Store[x] : &:r1817_3, r1817_5 -# 1819| v1819_1(void) = NoOp : -# 1787| v1787_7(void) = ReturnVoid : -# 1787| v1787_8(void) = AliasedUse : m1787_3 -# 1787| v1787_9(void) = ExitFunction : +# 1863| Block 6 +# 1863| v1863_1(void) = NoOp : +# 1864| r1864_1(glval) = VariableAddress[z2] : +# 1864| r1864_2(int) = Load[z2] : &:r1864_1, m1862_4 +# 1864| r1864_3(glval) = VariableAddress[x] : +# 1864| r1864_4(int) = Load[x] : &:r1864_3, m1859_7 +# 1864| r1864_5(int) = Add : r1864_4, r1864_2 +# 1864| m1864_6(int) = Store[x] : &:r1864_3, r1864_5 +# 1866| v1866_1(void) = NoOp : +# 1834| v1834_7(void) = ReturnVoid : +# 1834| v1834_8(void) = AliasedUse : m1834_3 +# 1834| v1834_9(void) = ExitFunction : -# 1823| int global_2 -# 1823| Block 0 -# 1823| v1823_1(void) = EnterFunction : -# 1823| m1823_2(unknown) = AliasedDefinition : -# 1823| r1823_3(glval) = VariableAddress[global_2] : -# 1823| r1823_4(int) = Constant[1] : -# 1823| m1823_5(int) = Store[global_2] : &:r1823_3, r1823_4 -# 1823| m1823_6(unknown) = Chi : total:m1823_2, partial:m1823_5 -# 1823| v1823_7(void) = ReturnVoid : -# 1823| v1823_8(void) = AliasedUse : ~m1823_6 -# 1823| v1823_9(void) = ExitFunction : +# 1870| int global_2 +# 1870| Block 0 +# 1870| v1870_1(void) = EnterFunction : +# 1870| m1870_2(unknown) = AliasedDefinition : +# 1870| r1870_3(glval) = VariableAddress[global_2] : +# 1870| r1870_4(int) = Constant[1] : +# 1870| m1870_5(int) = Store[global_2] : &:r1870_3, r1870_4 +# 1870| m1870_6(unknown) = Chi : total:m1870_2, partial:m1870_5 +# 1870| v1870_7(void) = ReturnVoid : +# 1870| v1870_8(void) = AliasedUse : ~m1870_6 +# 1870| v1870_9(void) = ExitFunction : -# 1827| constructor_only global_4 -# 1827| Block 0 -# 1827| v1827_1(void) = EnterFunction : -# 1827| m1827_2(unknown) = AliasedDefinition : -# 1827| r1827_3(glval) = VariableAddress[global_4] : -# 1827| r1827_4(glval) = FunctionAddress[constructor_only] : -# 1827| r1827_5(int) = Constant[1] : -# 1827| v1827_6(void) = Call[constructor_only] : func:r1827_4, this:r1827_3, 0:r1827_5 -# 1827| m1827_7(unknown) = ^CallSideEffect : ~m1827_2 -# 1827| m1827_8(unknown) = Chi : total:m1827_2, partial:m1827_7 -# 1827| m1827_9(constructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1827_3 -# 1827| m1827_10(unknown) = Chi : total:m1827_8, partial:m1827_9 -# 1827| v1827_11(void) = ReturnVoid : -# 1827| v1827_12(void) = AliasedUse : ~m1827_10 -# 1827| v1827_13(void) = ExitFunction : +# 1874| constructor_only global_4 +# 1874| Block 0 +# 1874| v1874_1(void) = EnterFunction : +# 1874| m1874_2(unknown) = AliasedDefinition : +# 1874| r1874_3(glval) = VariableAddress[global_4] : +# 1874| r1874_4(glval) = FunctionAddress[constructor_only] : +# 1874| r1874_5(int) = Constant[1] : +# 1874| v1874_6(void) = Call[constructor_only] : func:r1874_4, this:r1874_3, 0:r1874_5 +# 1874| m1874_7(unknown) = ^CallSideEffect : ~m1874_2 +# 1874| m1874_8(unknown) = Chi : total:m1874_2, partial:m1874_7 +# 1874| m1874_9(constructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1874_3 +# 1874| m1874_10(unknown) = Chi : total:m1874_8, partial:m1874_9 +# 1874| v1874_11(void) = ReturnVoid : +# 1874| v1874_12(void) = AliasedUse : ~m1874_10 +# 1874| v1874_13(void) = ExitFunction : -# 1829| constructor_only global_5 -# 1829| Block 0 -# 1829| v1829_1(void) = EnterFunction : -# 1829| m1829_2(unknown) = AliasedDefinition : -# 1829| r1829_3(glval) = VariableAddress[global_5] : -# 1829| r1829_4(glval) = FunctionAddress[constructor_only] : -# 1829| r1829_5(int) = Constant[2] : -# 1829| v1829_6(void) = Call[constructor_only] : func:r1829_4, this:r1829_3, 0:r1829_5 -# 1829| m1829_7(unknown) = ^CallSideEffect : ~m1829_2 -# 1829| m1829_8(unknown) = Chi : total:m1829_2, partial:m1829_7 -# 1829| m1829_9(constructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1829_3 -# 1829| m1829_10(unknown) = Chi : total:m1829_8, partial:m1829_9 -# 1829| v1829_11(void) = ReturnVoid : -# 1829| v1829_12(void) = AliasedUse : ~m1829_10 -# 1829| v1829_13(void) = ExitFunction : +# 1876| constructor_only global_5 +# 1876| Block 0 +# 1876| v1876_1(void) = EnterFunction : +# 1876| m1876_2(unknown) = AliasedDefinition : +# 1876| r1876_3(glval) = VariableAddress[global_5] : +# 1876| r1876_4(glval) = FunctionAddress[constructor_only] : +# 1876| r1876_5(int) = Constant[2] : +# 1876| v1876_6(void) = Call[constructor_only] : func:r1876_4, this:r1876_3, 0:r1876_5 +# 1876| m1876_7(unknown) = ^CallSideEffect : ~m1876_2 +# 1876| m1876_8(unknown) = Chi : total:m1876_2, partial:m1876_7 +# 1876| m1876_9(constructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1876_3 +# 1876| m1876_10(unknown) = Chi : total:m1876_8, partial:m1876_9 +# 1876| v1876_11(void) = ReturnVoid : +# 1876| v1876_12(void) = AliasedUse : ~m1876_10 +# 1876| v1876_13(void) = ExitFunction : -# 1831| char* global_string -# 1831| Block 0 -# 1831| v1831_1(void) = EnterFunction : -# 1831| m1831_2(unknown) = AliasedDefinition : -# 1831| r1831_3(glval) = VariableAddress[global_string] : -# 1831| r1831_4(glval) = StringConstant["global string"] : -# 1831| r1831_5(char *) = Convert : r1831_4 -# 1831| r1831_6(char *) = Convert : r1831_5 -# 1831| m1831_7(char *) = Store[global_string] : &:r1831_3, r1831_6 -# 1831| m1831_8(unknown) = Chi : total:m1831_2, partial:m1831_7 -# 1831| v1831_9(void) = ReturnVoid : -# 1831| v1831_10(void) = AliasedUse : ~m1831_8 -# 1831| v1831_11(void) = ExitFunction : +# 1878| char* global_string +# 1878| Block 0 +# 1878| v1878_1(void) = EnterFunction : +# 1878| m1878_2(unknown) = AliasedDefinition : +# 1878| r1878_3(glval) = VariableAddress[global_string] : +# 1878| r1878_4(glval) = StringConstant["global string"] : +# 1878| r1878_5(char *) = Convert : r1878_4 +# 1878| r1878_6(char *) = Convert : r1878_5 +# 1878| m1878_7(char *) = Store[global_string] : &:r1878_3, r1878_6 +# 1878| m1878_8(unknown) = Chi : total:m1878_2, partial:m1878_7 +# 1878| v1878_9(void) = ReturnVoid : +# 1878| v1878_10(void) = AliasedUse : ~m1878_8 +# 1878| v1878_11(void) = ExitFunction : -# 1833| int global_6 -# 1833| Block 0 -# 1833| v1833_1(void) = EnterFunction : -# 1833| m1833_2(unknown) = AliasedDefinition : -# 1833| r1833_3(glval) = VariableAddress[global_6] : -# 1833| r1833_4(glval) = VariableAddress[global_2] : -# 1833| r1833_5(int) = Load[global_2] : &:r1833_4, ~m1833_2 -# 1833| m1833_6(int) = Store[global_6] : &:r1833_3, r1833_5 -# 1833| m1833_7(unknown) = Chi : total:m1833_2, partial:m1833_6 -# 1833| v1833_8(void) = ReturnVoid : -# 1833| v1833_9(void) = AliasedUse : ~m1833_7 -# 1833| v1833_10(void) = ExitFunction : +# 1880| int global_6 +# 1880| Block 0 +# 1880| v1880_1(void) = EnterFunction : +# 1880| m1880_2(unknown) = AliasedDefinition : +# 1880| r1880_3(glval) = VariableAddress[global_6] : +# 1880| r1880_4(glval) = VariableAddress[global_2] : +# 1880| r1880_5(int) = Load[global_2] : &:r1880_4, ~m1880_2 +# 1880| m1880_6(int) = Store[global_6] : &:r1880_3, r1880_5 +# 1880| m1880_7(unknown) = Chi : total:m1880_2, partial:m1880_6 +# 1880| v1880_8(void) = ReturnVoid : +# 1880| v1880_9(void) = AliasedUse : ~m1880_7 +# 1880| v1880_10(void) = ExitFunction : -# 1836| block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) -# 1836| Block 0 -# 1836| v1836_1(void) = EnterFunction : -# 1836| m1836_2(unknown) = AliasedDefinition : -# 1836| m1836_3(unknown) = InitializeNonLocal : -# 1836| m1836_4(unknown) = Chi : total:m1836_2, partial:m1836_3 -# 1836| r1836_5(glval) = VariableAddress[#this] : -# 1836| m1836_6(glval) = InitializeParameter[#this] : &:r1836_5 -# 1836| r1836_7(glval) = Load[#this] : &:r1836_5, m1836_6 -# 1836| m1836_8(A) = InitializeIndirection[#this] : &:r1836_7 +# 1883| block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) +# 1883| Block 0 +# 1883| v1883_1(void) = EnterFunction : +# 1883| m1883_2(unknown) = AliasedDefinition : +# 1883| m1883_3(unknown) = InitializeNonLocal : +# 1883| m1883_4(unknown) = Chi : total:m1883_2, partial:m1883_3 +# 1883| r1883_5(glval) = VariableAddress[#this] : +# 1883| m1883_6(glval) = InitializeParameter[#this] : &:r1883_5 +# 1883| r1883_7(glval) = Load[#this] : &:r1883_5, m1883_6 +# 1883| m1883_8(A) = InitializeIndirection[#this] : &:r1883_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(A &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(A &&) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 #-----| r0_5(glval) = VariableAddress[#this] : -#-----| r0_6(A *) = Load[#this] : &:r0_5, m1836_6 +#-----| r0_6(A *) = Load[#this] : &:r0_5, m1883_6 #-----| r0_7(glval[1]>) = FieldAddress[e] : r0_6 #-----| r0_8(glval) = VariableAddress[(unnamed parameter 0)] : #-----| r0_9(A &&) = Load[(unnamed parameter 0)] : &:r0_8, m0_2 @@ -10811,3787 +11318,3822 @@ ir.cpp: #-----| r0_11(glval[1]>) = FieldAddress[e] : r0_10 #-----| r0_12(enum [1]) = Load[?] : &:r0_11, ~m0_4 #-----| m0_13(enum [1]) = Store[?] : &:r0_7, r0_12 -#-----| m0_14(unknown) = Chi : total:m1836_8, partial:m0_13 +#-----| m0_14(unknown) = Chi : total:m1883_8, partial:m0_13 #-----| r0_15(glval) = VariableAddress[#return] : #-----| r0_16(glval) = VariableAddress[#this] : -#-----| r0_17(A *) = Load[#this] : &:r0_16, m1836_6 +#-----| r0_17(A *) = Load[#this] : &:r0_16, m1883_6 #-----| r0_18(glval) = CopyValue : r0_17 #-----| r0_19(A &) = CopyValue : r0_18 #-----| m0_20(A &) = Store[#return] : &:r0_15, r0_19 -# 1836| v1836_9(void) = ReturnIndirection[#this] : &:r1836_7, m0_14 +# 1883| v1883_9(void) = ReturnIndirection[#this] : &:r1883_7, m0_14 #-----| v0_21(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 1836| r1836_10(glval) = VariableAddress[#return] : -# 1836| v1836_11(void) = ReturnValue : &:r1836_10, m0_20 -# 1836| v1836_12(void) = AliasedUse : m1836_3 -# 1836| v1836_13(void) = ExitFunction : +# 1883| r1883_10(glval) = VariableAddress[#return] : +# 1883| v1883_11(void) = ReturnValue : &:r1883_10, m0_20 +# 1883| v1883_12(void) = AliasedUse : m1883_3 +# 1883| v1883_13(void) = ExitFunction : -# 1841| block_assignment::B& block_assignment::B::operator=(block_assignment::B&&) -# 1841| Block 0 -# 1841| v1841_1(void) = EnterFunction : -# 1841| m1841_2(unknown) = AliasedDefinition : -# 1841| m1841_3(unknown) = InitializeNonLocal : -# 1841| m1841_4(unknown) = Chi : total:m1841_2, partial:m1841_3 -# 1841| r1841_5(glval) = VariableAddress[#this] : -# 1841| m1841_6(glval) = InitializeParameter[#this] : &:r1841_5 -# 1841| r1841_7(glval) = Load[#this] : &:r1841_5, m1841_6 -# 1841| m1841_8(B) = InitializeIndirection[#this] : &:r1841_7 +# 1888| block_assignment::B& block_assignment::B::operator=(block_assignment::B&&) +# 1888| Block 0 +# 1888| v1888_1(void) = EnterFunction : +# 1888| m1888_2(unknown) = AliasedDefinition : +# 1888| m1888_3(unknown) = InitializeNonLocal : +# 1888| m1888_4(unknown) = Chi : total:m1888_2, partial:m1888_3 +# 1888| r1888_5(glval) = VariableAddress[#this] : +# 1888| m1888_6(glval) = InitializeParameter[#this] : &:r1888_5 +# 1888| r1888_7(glval) = Load[#this] : &:r1888_5, m1888_6 +# 1888| m1888_8(B) = InitializeIndirection[#this] : &:r1888_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(B &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(B &&) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1841| r1841_9(glval) = VariableAddress[#this] : -# 1841| r1841_10(B *) = Load[#this] : &:r1841_9, m1841_6 -#-----| r0_5(A *) = ConvertToNonVirtualBase[B : A] : r1841_10 -# 1841| r1841_11(glval) = FunctionAddress[operator=] : -# 1841| r1841_12(glval) = VariableAddress[(unnamed parameter 0)] : -# 1841| r1841_13(B &&) = Load[(unnamed parameter 0)] : &:r1841_12, m0_2 -#-----| r0_6(glval) = CopyValue : r1841_13 -# 1841| r1841_14(B *) = CopyValue : r0_6 -#-----| r0_7(A *) = ConvertToNonVirtualBase[B : A] : r1841_14 -# 1841| r1841_15(glval) = CopyValue : r0_7 -#-----| r0_8(A &) = CopyValue : r1841_15 -# 1841| r1841_16(A &) = Call[operator=] : func:r1841_11, this:r0_5, 0:r0_8 -# 1841| m1841_17(unknown) = ^CallSideEffect : ~m1841_4 -# 1841| m1841_18(unknown) = Chi : total:m1841_4, partial:m1841_17 -#-----| v0_9(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m1841_8 +# 1888| r1888_9(glval) = VariableAddress[#this] : +# 1888| r1888_10(B *) = Load[#this] : &:r1888_9, m1888_6 +#-----| r0_5(A *) = ConvertToNonVirtualBase[B : A] : r1888_10 +# 1888| r1888_11(glval) = FunctionAddress[operator=] : +# 1888| r1888_12(glval) = VariableAddress[(unnamed parameter 0)] : +# 1888| r1888_13(B &&) = Load[(unnamed parameter 0)] : &:r1888_12, m0_2 +#-----| r0_6(glval) = CopyValue : r1888_13 +# 1888| r1888_14(B *) = CopyValue : r0_6 +#-----| r0_7(A *) = ConvertToNonVirtualBase[B : A] : r1888_14 +# 1888| r1888_15(glval) = CopyValue : r0_7 +#-----| r0_8(A &) = CopyValue : r1888_15 +# 1888| r1888_16(A &) = Call[operator=] : func:r1888_11, this:r0_5, 0:r0_8 +# 1888| m1888_17(unknown) = ^CallSideEffect : ~m1888_4 +# 1888| m1888_18(unknown) = Chi : total:m1888_4, partial:m1888_17 +#-----| v0_9(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m1888_8 #-----| v0_10(void) = ^BufferReadSideEffect[0] : &:r0_8, ~m0_4 #-----| m0_11(A) = ^IndirectMayWriteSideEffect[-1] : &:r0_5 -#-----| m0_12(unknown) = Chi : total:m1841_8, partial:m0_11 +#-----| m0_12(unknown) = Chi : total:m1888_8, partial:m0_11 #-----| m0_13(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_8 #-----| m0_14(unknown) = Chi : total:m0_4, partial:m0_13 -#-----| r0_15(glval) = CopyValue : r1841_16 +#-----| r0_15(glval) = CopyValue : r1888_16 #-----| r0_16(glval) = VariableAddress[#return] : #-----| r0_17(glval) = VariableAddress[#this] : -#-----| r0_18(B *) = Load[#this] : &:r0_17, m1841_6 +#-----| r0_18(B *) = Load[#this] : &:r0_17, m1888_6 #-----| r0_19(glval) = CopyValue : r0_18 #-----| r0_20(B &) = CopyValue : r0_19 #-----| m0_21(B &) = Store[#return] : &:r0_16, r0_20 -# 1841| v1841_19(void) = ReturnIndirection[#this] : &:r1841_7, m0_12 +# 1888| v1888_19(void) = ReturnIndirection[#this] : &:r1888_7, m0_12 #-----| v0_22(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_14 -# 1841| r1841_20(glval) = VariableAddress[#return] : -# 1841| v1841_21(void) = ReturnValue : &:r1841_20, m0_21 -# 1841| v1841_22(void) = AliasedUse : ~m1841_18 -# 1841| v1841_23(void) = ExitFunction : +# 1888| r1888_20(glval) = VariableAddress[#return] : +# 1888| v1888_21(void) = ReturnValue : &:r1888_20, m0_21 +# 1888| v1888_22(void) = AliasedUse : ~m1888_18 +# 1888| v1888_23(void) = ExitFunction : -# 1845| void block_assignment::foo() -# 1845| Block 0 -# 1845| v1845_1(void) = EnterFunction : -# 1845| m1845_2(unknown) = AliasedDefinition : -# 1845| m1845_3(unknown) = InitializeNonLocal : -# 1845| m1845_4(unknown) = Chi : total:m1845_2, partial:m1845_3 -# 1846| r1846_1(glval) = VariableAddress[v] : -# 1846| m1846_2(B) = Uninitialized[v] : &:r1846_1 -# 1846| r1846_3(glval) = FunctionAddress[B] : -# 1846| r1846_4(A *) = Constant[0] : -# 1846| v1846_5(void) = Call[B] : func:r1846_3, this:r1846_1, 0:r1846_4 -# 1846| m1846_6(unknown) = ^CallSideEffect : ~m1845_4 -# 1846| m1846_7(unknown) = Chi : total:m1845_4, partial:m1846_6 -# 1846| v1846_8(void) = ^BufferReadSideEffect[0] : &:r1846_4, ~m1846_7 -# 1846| m1846_9(B) = ^IndirectMayWriteSideEffect[-1] : &:r1846_1 -# 1846| m1846_10(B) = Chi : total:m1846_2, partial:m1846_9 -# 1846| m1846_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1846_4 -# 1846| m1846_12(unknown) = Chi : total:m1846_7, partial:m1846_11 -# 1847| r1847_1(glval) = VariableAddress[v] : -# 1847| r1847_2(glval) = FunctionAddress[operator=] : -# 1847| r1847_3(glval) = VariableAddress[#temp1847:13] : -# 1847| m1847_4(B) = Uninitialized[#temp1847:13] : &:r1847_3 -# 1847| r1847_5(glval) = FunctionAddress[B] : -# 1847| r1847_6(A *) = Constant[0] : -# 1847| v1847_7(void) = Call[B] : func:r1847_5, this:r1847_3, 0:r1847_6 -# 1847| m1847_8(unknown) = ^CallSideEffect : ~m1846_12 -# 1847| m1847_9(unknown) = Chi : total:m1846_12, partial:m1847_8 -# 1847| v1847_10(void) = ^BufferReadSideEffect[0] : &:r1847_6, ~m1847_9 -# 1847| m1847_11(B) = ^IndirectMayWriteSideEffect[-1] : &:r1847_3 -# 1847| m1847_12(B) = Chi : total:m1847_4, partial:m1847_11 -# 1847| m1847_13(unknown) = ^BufferMayWriteSideEffect[0] : &:r1847_6 -# 1847| m1847_14(unknown) = Chi : total:m1847_9, partial:m1847_13 -# 1847| r1847_15(B &) = CopyValue : r1847_3 -# 1847| r1847_16(B &) = Call[operator=] : func:r1847_2, this:r1847_1, 0:r1847_15 -# 1847| m1847_17(unknown) = ^CallSideEffect : ~m1847_14 -# 1847| m1847_18(unknown) = Chi : total:m1847_14, partial:m1847_17 -# 1847| v1847_19(void) = ^IndirectReadSideEffect[-1] : &:r1847_1, m1846_10 -# 1847| v1847_20(void) = ^BufferReadSideEffect[0] : &:r1847_15, ~m1847_12 -# 1847| m1847_21(B) = ^IndirectMayWriteSideEffect[-1] : &:r1847_1 -# 1847| m1847_22(B) = Chi : total:m1846_10, partial:m1847_21 -# 1847| m1847_23(unknown) = ^BufferMayWriteSideEffect[0] : &:r1847_15 -# 1847| m1847_24(B) = Chi : total:m1847_12, partial:m1847_23 -# 1847| r1847_25(glval) = CopyValue : r1847_16 -# 1848| v1848_1(void) = NoOp : -# 1845| v1845_5(void) = ReturnVoid : -# 1845| v1845_6(void) = AliasedUse : ~m1847_18 -# 1845| v1845_7(void) = ExitFunction : +# 1892| void block_assignment::foo() +# 1892| Block 0 +# 1892| v1892_1(void) = EnterFunction : +# 1892| m1892_2(unknown) = AliasedDefinition : +# 1892| m1892_3(unknown) = InitializeNonLocal : +# 1892| m1892_4(unknown) = Chi : total:m1892_2, partial:m1892_3 +# 1893| r1893_1(glval) = VariableAddress[v] : +# 1893| m1893_2(B) = Uninitialized[v] : &:r1893_1 +# 1893| r1893_3(glval) = FunctionAddress[B] : +# 1893| r1893_4(A *) = Constant[0] : +# 1893| v1893_5(void) = Call[B] : func:r1893_3, this:r1893_1, 0:r1893_4 +# 1893| m1893_6(unknown) = ^CallSideEffect : ~m1892_4 +# 1893| m1893_7(unknown) = Chi : total:m1892_4, partial:m1893_6 +# 1893| v1893_8(void) = ^BufferReadSideEffect[0] : &:r1893_4, ~m1893_7 +# 1893| m1893_9(B) = ^IndirectMayWriteSideEffect[-1] : &:r1893_1 +# 1893| m1893_10(B) = Chi : total:m1893_2, partial:m1893_9 +# 1893| m1893_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1893_4 +# 1893| m1893_12(unknown) = Chi : total:m1893_7, partial:m1893_11 +# 1894| r1894_1(glval) = VariableAddress[v] : +# 1894| r1894_2(glval) = FunctionAddress[operator=] : +# 1894| r1894_3(glval) = VariableAddress[#temp1894:13] : +# 1894| m1894_4(B) = Uninitialized[#temp1894:13] : &:r1894_3 +# 1894| r1894_5(glval) = FunctionAddress[B] : +# 1894| r1894_6(A *) = Constant[0] : +# 1894| v1894_7(void) = Call[B] : func:r1894_5, this:r1894_3, 0:r1894_6 +# 1894| m1894_8(unknown) = ^CallSideEffect : ~m1893_12 +# 1894| m1894_9(unknown) = Chi : total:m1893_12, partial:m1894_8 +# 1894| v1894_10(void) = ^BufferReadSideEffect[0] : &:r1894_6, ~m1894_9 +# 1894| m1894_11(B) = ^IndirectMayWriteSideEffect[-1] : &:r1894_3 +# 1894| m1894_12(B) = Chi : total:m1894_4, partial:m1894_11 +# 1894| m1894_13(unknown) = ^BufferMayWriteSideEffect[0] : &:r1894_6 +# 1894| m1894_14(unknown) = Chi : total:m1894_9, partial:m1894_13 +# 1894| r1894_15(B &) = CopyValue : r1894_3 +# 1894| r1894_16(B &) = Call[operator=] : func:r1894_2, this:r1894_1, 0:r1894_15 +# 1894| m1894_17(unknown) = ^CallSideEffect : ~m1894_14 +# 1894| m1894_18(unknown) = Chi : total:m1894_14, partial:m1894_17 +# 1894| v1894_19(void) = ^IndirectReadSideEffect[-1] : &:r1894_1, m1893_10 +# 1894| v1894_20(void) = ^BufferReadSideEffect[0] : &:r1894_15, ~m1894_12 +# 1894| m1894_21(B) = ^IndirectMayWriteSideEffect[-1] : &:r1894_1 +# 1894| m1894_22(B) = Chi : total:m1893_10, partial:m1894_21 +# 1894| m1894_23(unknown) = ^BufferMayWriteSideEffect[0] : &:r1894_15 +# 1894| m1894_24(B) = Chi : total:m1894_12, partial:m1894_23 +# 1894| r1894_25(glval) = CopyValue : r1894_16 +# 1895| v1895_1(void) = NoOp : +# 1892| v1892_5(void) = ReturnVoid : +# 1892| v1892_6(void) = AliasedUse : ~m1894_18 +# 1892| v1892_7(void) = ExitFunction : -# 1851| void magicvars() -# 1851| Block 0 -# 1851| v1851_1(void) = EnterFunction : -# 1851| m1851_2(unknown) = AliasedDefinition : -# 1851| m1851_3(unknown) = InitializeNonLocal : -# 1851| m1851_4(unknown) = Chi : total:m1851_2, partial:m1851_3 -# 1852| r1852_1(glval) = VariableAddress[pf] : -# 1852| r1852_2(glval) = VariableAddress[__PRETTY_FUNCTION__] : -# 1852| r1852_3(char *) = Convert : r1852_2 -# 1852| m1852_4(char *) = Store[pf] : &:r1852_1, r1852_3 -# 1853| r1853_1(glval) = VariableAddress[strfunc] : -# 1853| r1853_2(glval) = VariableAddress[__func__] : -# 1853| r1853_3(char *) = Convert : r1853_2 -# 1853| m1853_4(char *) = Store[strfunc] : &:r1853_1, r1853_3 -# 1854| v1854_1(void) = NoOp : -# 1851| v1851_5(void) = ReturnVoid : -# 1851| v1851_6(void) = AliasedUse : m1851_3 -# 1851| v1851_7(void) = ExitFunction : +# 1898| void magicvars() +# 1898| Block 0 +# 1898| v1898_1(void) = EnterFunction : +# 1898| m1898_2(unknown) = AliasedDefinition : +# 1898| m1898_3(unknown) = InitializeNonLocal : +# 1898| m1898_4(unknown) = Chi : total:m1898_2, partial:m1898_3 +# 1899| r1899_1(glval) = VariableAddress[pf] : +# 1899| r1899_2(glval) = VariableAddress[__PRETTY_FUNCTION__] : +# 1899| r1899_3(char *) = Convert : r1899_2 +# 1899| m1899_4(char *) = Store[pf] : &:r1899_1, r1899_3 +# 1900| r1900_1(glval) = VariableAddress[strfunc] : +# 1900| r1900_2(glval) = VariableAddress[__func__] : +# 1900| r1900_3(char *) = Convert : r1900_2 +# 1900| m1900_4(char *) = Store[strfunc] : &:r1900_1, r1900_3 +# 1901| v1901_1(void) = NoOp : +# 1898| v1898_5(void) = ReturnVoid : +# 1898| v1898_6(void) = AliasedUse : m1898_3 +# 1898| v1898_7(void) = ExitFunction : -# 1864| void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) -# 1864| Block 0 -# 1864| v1864_1(void) = EnterFunction : -# 1864| m1864_2(unknown) = AliasedDefinition : -# 1864| m1864_3(unknown) = InitializeNonLocal : -# 1864| m1864_4(unknown) = Chi : total:m1864_2, partial:m1864_3 -# 1864| r1864_5(glval) = VariableAddress[#this] : -# 1864| m1864_6(glval>) = InitializeParameter[#this] : &:r1864_5 -# 1864| r1864_7(glval>) = Load[#this] : &:r1864_5, m1864_6 -# 1864| m1864_8(Bar1) = InitializeIndirection[#this] : &:r1864_7 -# 1864| r1864_9(glval) = VariableAddress[p] : -# 1864| m1864_10(S *) = InitializeParameter[p] : &:r1864_9 -# 1864| r1864_11(S *) = Load[p] : &:r1864_9, m1864_10 -# 1864| m1864_12(unknown) = InitializeIndirection[p] : &:r1864_11 -# 1866| r1866_1(glval) = VariableAddress[#return] : -# 1866| r1866_2(glval) = VariableAddress[p] : -# 1866| r1866_3(S *) = Load[p] : &:r1866_2, m1864_10 -# 1866| r1866_4(void *) = Convert : r1866_3 -# 1866| m1866_5(void *) = Store[#return] : &:r1866_1, r1866_4 -# 1864| v1864_13(void) = ReturnIndirection[#this] : &:r1864_7, m1864_8 -# 1864| v1864_14(void) = ReturnIndirection[p] : &:r1864_11, m1864_12 -# 1864| r1864_15(glval) = VariableAddress[#return] : -# 1864| v1864_16(void) = ReturnValue : &:r1864_15, m1866_5 -# 1864| v1864_17(void) = AliasedUse : m1864_3 -# 1864| v1864_18(void) = ExitFunction : +# 1911| void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) +# 1911| Block 0 +# 1911| v1911_1(void) = EnterFunction : +# 1911| m1911_2(unknown) = AliasedDefinition : +# 1911| m1911_3(unknown) = InitializeNonLocal : +# 1911| m1911_4(unknown) = Chi : total:m1911_2, partial:m1911_3 +# 1911| r1911_5(glval) = VariableAddress[#this] : +# 1911| m1911_6(glval>) = InitializeParameter[#this] : &:r1911_5 +# 1911| r1911_7(glval>) = Load[#this] : &:r1911_5, m1911_6 +# 1911| m1911_8(Bar1) = InitializeIndirection[#this] : &:r1911_7 +# 1911| r1911_9(glval) = VariableAddress[p] : +# 1911| m1911_10(S *) = InitializeParameter[p] : &:r1911_9 +# 1911| r1911_11(S *) = Load[p] : &:r1911_9, m1911_10 +# 1911| m1911_12(unknown) = InitializeIndirection[p] : &:r1911_11 +# 1913| r1913_1(glval) = VariableAddress[#return] : +# 1913| r1913_2(glval) = VariableAddress[p] : +# 1913| r1913_3(S *) = Load[p] : &:r1913_2, m1911_10 +# 1913| r1913_4(void *) = Convert : r1913_3 +# 1913| m1913_5(void *) = Store[#return] : &:r1913_1, r1913_4 +# 1911| v1911_13(void) = ReturnIndirection[#this] : &:r1911_7, m1911_8 +# 1911| v1911_14(void) = ReturnIndirection[p] : &:r1911_11, m1911_12 +# 1911| r1911_15(glval) = VariableAddress[#return] : +# 1911| v1911_16(void) = ReturnValue : &:r1911_15, m1913_5 +# 1911| v1911_17(void) = AliasedUse : m1911_3 +# 1911| v1911_18(void) = ExitFunction : -# 1870| void missing_declaration_entries::test1() -# 1870| Block 0 -# 1870| v1870_1(void) = EnterFunction : -# 1870| m1870_2(unknown) = AliasedDefinition : -# 1870| m1870_3(unknown) = InitializeNonLocal : -# 1870| m1870_4(unknown) = Chi : total:m1870_2, partial:m1870_3 -# 1871| r1871_1(glval>) = VariableAddress[b] : -# 1871| m1871_2(Bar1) = Uninitialized[b] : &:r1871_1 -# 1872| r1872_1(glval>) = VariableAddress[b] : -# 1872| r1872_2(glval) = FunctionAddress[missing_type_decl_entry] : -# 1872| r1872_3(S *) = Constant[0] : -# 1872| r1872_4(void *) = Call[missing_type_decl_entry] : func:r1872_2, this:r1872_1, 0:r1872_3 -# 1872| m1872_5(unknown) = ^CallSideEffect : ~m1870_4 -# 1872| m1872_6(unknown) = Chi : total:m1870_4, partial:m1872_5 -# 1872| v1872_7(void) = ^IndirectReadSideEffect[-1] : &:r1872_1, m1871_2 -# 1872| v1872_8(void) = ^BufferReadSideEffect[0] : &:r1872_3, ~m1872_6 -# 1872| m1872_9(Bar1) = ^IndirectMayWriteSideEffect[-1] : &:r1872_1 -# 1872| m1872_10(Bar1) = Chi : total:m1871_2, partial:m1872_9 -# 1872| m1872_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1872_3 -# 1872| m1872_12(unknown) = Chi : total:m1872_6, partial:m1872_11 -# 1873| v1873_1(void) = NoOp : -# 1870| v1870_5(void) = ReturnVoid : -# 1870| v1870_6(void) = AliasedUse : ~m1872_12 -# 1870| v1870_7(void) = ExitFunction : +# 1917| void missing_declaration_entries::test1() +# 1917| Block 0 +# 1917| v1917_1(void) = EnterFunction : +# 1917| m1917_2(unknown) = AliasedDefinition : +# 1917| m1917_3(unknown) = InitializeNonLocal : +# 1917| m1917_4(unknown) = Chi : total:m1917_2, partial:m1917_3 +# 1918| r1918_1(glval>) = VariableAddress[b] : +# 1918| m1918_2(Bar1) = Uninitialized[b] : &:r1918_1 +# 1919| r1919_1(glval>) = VariableAddress[b] : +# 1919| r1919_2(glval) = FunctionAddress[missing_type_decl_entry] : +# 1919| r1919_3(S *) = Constant[0] : +# 1919| r1919_4(void *) = Call[missing_type_decl_entry] : func:r1919_2, this:r1919_1, 0:r1919_3 +# 1919| m1919_5(unknown) = ^CallSideEffect : ~m1917_4 +# 1919| m1919_6(unknown) = Chi : total:m1917_4, partial:m1919_5 +# 1919| v1919_7(void) = ^IndirectReadSideEffect[-1] : &:r1919_1, m1918_2 +# 1919| v1919_8(void) = ^BufferReadSideEffect[0] : &:r1919_3, ~m1919_6 +# 1919| m1919_9(Bar1) = ^IndirectMayWriteSideEffect[-1] : &:r1919_1 +# 1919| m1919_10(Bar1) = Chi : total:m1918_2, partial:m1919_9 +# 1919| m1919_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1919_3 +# 1919| m1919_12(unknown) = Chi : total:m1919_6, partial:m1919_11 +# 1920| v1920_1(void) = NoOp : +# 1917| v1917_5(void) = ReturnVoid : +# 1917| v1917_6(void) = AliasedUse : ~m1919_12 +# 1917| v1917_7(void) = ExitFunction : -# 1877| int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() -# 1877| Block 0 -# 1877| v1877_1(void) = EnterFunction : -# 1877| m1877_2(unknown) = AliasedDefinition : -# 1877| m1877_3(unknown) = InitializeNonLocal : -# 1877| m1877_4(unknown) = Chi : total:m1877_2, partial:m1877_3 -# 1877| r1877_5(glval) = VariableAddress[#this] : -# 1877| m1877_6(glval>) = InitializeParameter[#this] : &:r1877_5 -# 1877| r1877_7(glval>) = Load[#this] : &:r1877_5, m1877_6 -# 1877| m1877_8(Bar2) = InitializeIndirection[#this] : &:r1877_7 -# 1878| r1878_1(glval) = VariableAddress[x] : -# 1878| m1878_2(int[10]) = Uninitialized[x] : &:r1878_1 -# 1878| r1878_3(glval) = VariableAddress[y] : -# 1878| m1878_4(int[10]) = Uninitialized[y] : &:r1878_3 -# 1879| r1879_1(int) = Constant[10] : -# 1879| r1879_2(glval) = VariableAddress[x] : -# 1879| r1879_3(int *) = Convert : r1879_2 -# 1879| r1879_4(glval) = CopyValue : r1879_3 -# 1879| m1879_5(int) = Store[?] : &:r1879_4, r1879_1 -# 1879| m1879_6(int[10]) = Chi : total:m1878_2, partial:m1879_5 -# 1880| r1880_1(int) = Constant[10] : -# 1880| r1880_2(glval) = VariableAddress[y] : -# 1880| r1880_3(int *) = Convert : r1880_2 -# 1880| r1880_4(glval) = CopyValue : r1880_3 -# 1880| m1880_5(int) = Store[?] : &:r1880_4, r1880_1 -# 1880| m1880_6(int[10]) = Chi : total:m1878_4, partial:m1880_5 -# 1881| r1881_1(glval) = VariableAddress[#return] : -# 1881| r1881_2(glval) = VariableAddress[x] : -# 1881| r1881_3(int *) = Convert : r1881_2 -# 1881| r1881_4(int) = Load[?] : &:r1881_3, m1879_5 -# 1881| r1881_5(glval) = VariableAddress[y] : -# 1881| r1881_6(int *) = Convert : r1881_5 -# 1881| r1881_7(int) = Load[?] : &:r1881_6, m1880_5 -# 1881| r1881_8(int) = Add : r1881_4, r1881_7 -# 1881| m1881_9(int) = Store[#return] : &:r1881_1, r1881_8 -# 1877| v1877_9(void) = ReturnIndirection[#this] : &:r1877_7, m1877_8 -# 1877| r1877_10(glval) = VariableAddress[#return] : -# 1877| v1877_11(void) = ReturnValue : &:r1877_10, m1881_9 -# 1877| v1877_12(void) = AliasedUse : m1877_3 -# 1877| v1877_13(void) = ExitFunction : +# 1924| int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() +# 1924| Block 0 +# 1924| v1924_1(void) = EnterFunction : +# 1924| m1924_2(unknown) = AliasedDefinition : +# 1924| m1924_3(unknown) = InitializeNonLocal : +# 1924| m1924_4(unknown) = Chi : total:m1924_2, partial:m1924_3 +# 1924| r1924_5(glval) = VariableAddress[#this] : +# 1924| m1924_6(glval>) = InitializeParameter[#this] : &:r1924_5 +# 1924| r1924_7(glval>) = Load[#this] : &:r1924_5, m1924_6 +# 1924| m1924_8(Bar2) = InitializeIndirection[#this] : &:r1924_7 +# 1925| r1925_1(glval) = VariableAddress[x] : +# 1925| m1925_2(int[10]) = Uninitialized[x] : &:r1925_1 +# 1925| r1925_3(glval) = VariableAddress[y] : +# 1925| m1925_4(int[10]) = Uninitialized[y] : &:r1925_3 +# 1926| r1926_1(int) = Constant[10] : +# 1926| r1926_2(glval) = VariableAddress[x] : +# 1926| r1926_3(int *) = Convert : r1926_2 +# 1926| r1926_4(glval) = CopyValue : r1926_3 +# 1926| m1926_5(int) = Store[?] : &:r1926_4, r1926_1 +# 1926| m1926_6(int[10]) = Chi : total:m1925_2, partial:m1926_5 +# 1927| r1927_1(int) = Constant[10] : +# 1927| r1927_2(glval) = VariableAddress[y] : +# 1927| r1927_3(int *) = Convert : r1927_2 +# 1927| r1927_4(glval) = CopyValue : r1927_3 +# 1927| m1927_5(int) = Store[?] : &:r1927_4, r1927_1 +# 1927| m1927_6(int[10]) = Chi : total:m1925_4, partial:m1927_5 +# 1928| r1928_1(glval) = VariableAddress[#return] : +# 1928| r1928_2(glval) = VariableAddress[x] : +# 1928| r1928_3(int *) = Convert : r1928_2 +# 1928| r1928_4(int) = Load[?] : &:r1928_3, m1926_5 +# 1928| r1928_5(glval) = VariableAddress[y] : +# 1928| r1928_6(int *) = Convert : r1928_5 +# 1928| r1928_7(int) = Load[?] : &:r1928_6, m1927_5 +# 1928| r1928_8(int) = Add : r1928_4, r1928_7 +# 1928| m1928_9(int) = Store[#return] : &:r1928_1, r1928_8 +# 1924| v1924_9(void) = ReturnIndirection[#this] : &:r1924_7, m1924_8 +# 1924| r1924_10(glval) = VariableAddress[#return] : +# 1924| v1924_11(void) = ReturnValue : &:r1924_10, m1928_9 +# 1924| v1924_12(void) = AliasedUse : m1924_3 +# 1924| v1924_13(void) = ExitFunction : -# 1885| void missing_declaration_entries::test2() -# 1885| Block 0 -# 1885| v1885_1(void) = EnterFunction : -# 1885| m1885_2(unknown) = AliasedDefinition : -# 1885| m1885_3(unknown) = InitializeNonLocal : -# 1885| m1885_4(unknown) = Chi : total:m1885_2, partial:m1885_3 -# 1886| r1886_1(glval>) = VariableAddress[b] : -# 1886| m1886_2(Bar2) = Uninitialized[b] : &:r1886_1 -# 1887| r1887_1(glval>) = VariableAddress[b] : -# 1887| r1887_2(glval) = FunctionAddress[two_missing_variable_declaration_entries] : -# 1887| r1887_3(int) = Call[two_missing_variable_declaration_entries] : func:r1887_2, this:r1887_1 -# 1887| m1887_4(unknown) = ^CallSideEffect : ~m1885_4 -# 1887| m1887_5(unknown) = Chi : total:m1885_4, partial:m1887_4 -# 1887| v1887_6(void) = ^IndirectReadSideEffect[-1] : &:r1887_1, m1886_2 -# 1887| m1887_7(Bar2) = ^IndirectMayWriteSideEffect[-1] : &:r1887_1 -# 1887| m1887_8(Bar2) = Chi : total:m1886_2, partial:m1887_7 -# 1888| v1888_1(void) = NoOp : -# 1885| v1885_5(void) = ReturnVoid : -# 1885| v1885_6(void) = AliasedUse : ~m1887_5 -# 1885| v1885_7(void) = ExitFunction : +# 1932| void missing_declaration_entries::test2() +# 1932| Block 0 +# 1932| v1932_1(void) = EnterFunction : +# 1932| m1932_2(unknown) = AliasedDefinition : +# 1932| m1932_3(unknown) = InitializeNonLocal : +# 1932| m1932_4(unknown) = Chi : total:m1932_2, partial:m1932_3 +# 1933| r1933_1(glval>) = VariableAddress[b] : +# 1933| m1933_2(Bar2) = Uninitialized[b] : &:r1933_1 +# 1934| r1934_1(glval>) = VariableAddress[b] : +# 1934| r1934_2(glval) = FunctionAddress[two_missing_variable_declaration_entries] : +# 1934| r1934_3(int) = Call[two_missing_variable_declaration_entries] : func:r1934_2, this:r1934_1 +# 1934| m1934_4(unknown) = ^CallSideEffect : ~m1932_4 +# 1934| m1934_5(unknown) = Chi : total:m1932_4, partial:m1934_4 +# 1934| v1934_6(void) = ^IndirectReadSideEffect[-1] : &:r1934_1, m1933_2 +# 1934| m1934_7(Bar2) = ^IndirectMayWriteSideEffect[-1] : &:r1934_1 +# 1934| m1934_8(Bar2) = Chi : total:m1933_2, partial:m1934_7 +# 1935| v1935_1(void) = NoOp : +# 1932| v1932_5(void) = ReturnVoid : +# 1932| v1932_6(void) = AliasedUse : ~m1934_5 +# 1932| v1932_7(void) = ExitFunction : -# 1891| char global_template -# 1891| Block 0 -# 1891| v1891_1(void) = EnterFunction : -# 1891| m1891_2(unknown) = AliasedDefinition : -# 1891| r1891_3(glval) = VariableAddress[global_template] : -# 1891| r1891_4(char) = Constant[42] : -# 1891| m1891_5(char) = Store[global_template] : &:r1891_3, r1891_4 -# 1891| m1891_6(unknown) = Chi : total:m1891_2, partial:m1891_5 -# 1891| v1891_7(void) = ReturnVoid : -# 1891| v1891_8(void) = AliasedUse : ~m1891_6 -# 1891| v1891_9(void) = ExitFunction : +# 1938| char global_template +# 1938| Block 0 +# 1938| v1938_1(void) = EnterFunction : +# 1938| m1938_2(unknown) = AliasedDefinition : +# 1938| r1938_3(glval) = VariableAddress[global_template] : +# 1938| r1938_4(char) = Constant[42] : +# 1938| m1938_5(char) = Store[global_template] : &:r1938_3, r1938_4 +# 1938| m1938_6(unknown) = Chi : total:m1938_2, partial:m1938_5 +# 1938| v1938_7(void) = ReturnVoid : +# 1938| v1938_8(void) = AliasedUse : ~m1938_6 +# 1938| v1938_9(void) = ExitFunction : -# 1891| int global_template -# 1891| Block 0 -# 1891| v1891_1(void) = EnterFunction : -# 1891| m1891_2(unknown) = AliasedDefinition : -# 1891| r1891_3(glval) = VariableAddress[global_template] : -# 1891| r1891_4(int) = Constant[42] : -# 1891| m1891_5(int) = Store[global_template] : &:r1891_3, r1891_4 -# 1891| m1891_6(unknown) = Chi : total:m1891_2, partial:m1891_5 -# 1891| v1891_7(void) = ReturnVoid : -# 1891| v1891_8(void) = AliasedUse : ~m1891_6 -# 1891| v1891_9(void) = ExitFunction : +# 1938| int global_template +# 1938| Block 0 +# 1938| v1938_1(void) = EnterFunction : +# 1938| m1938_2(unknown) = AliasedDefinition : +# 1938| r1938_3(glval) = VariableAddress[global_template] : +# 1938| r1938_4(int) = Constant[42] : +# 1938| m1938_5(int) = Store[global_template] : &:r1938_3, r1938_4 +# 1938| m1938_6(unknown) = Chi : total:m1938_2, partial:m1938_5 +# 1938| v1938_7(void) = ReturnVoid : +# 1938| v1938_8(void) = AliasedUse : ~m1938_6 +# 1938| v1938_9(void) = ExitFunction : -# 1893| int test_global_template_int() -# 1893| Block 0 -# 1893| v1893_1(void) = EnterFunction : -# 1893| m1893_2(unknown) = AliasedDefinition : -# 1893| m1893_3(unknown) = InitializeNonLocal : -# 1893| m1893_4(unknown) = Chi : total:m1893_2, partial:m1893_3 -# 1894| r1894_1(glval) = VariableAddress[local_int] : -# 1894| r1894_2(glval) = VariableAddress[global_template] : -# 1894| r1894_3(int) = Load[global_template] : &:r1894_2, ~m1893_3 -# 1894| m1894_4(int) = Store[local_int] : &:r1894_1, r1894_3 -# 1895| r1895_1(glval) = VariableAddress[local_char] : -# 1895| r1895_2(glval) = VariableAddress[global_template] : -# 1895| r1895_3(char) = Load[global_template] : &:r1895_2, ~m1893_3 -# 1895| m1895_4(char) = Store[local_char] : &:r1895_1, r1895_3 -# 1896| r1896_1(glval) = VariableAddress[#return] : -# 1896| r1896_2(glval) = VariableAddress[local_int] : -# 1896| r1896_3(int) = Load[local_int] : &:r1896_2, m1894_4 -# 1896| r1896_4(glval) = VariableAddress[local_char] : -# 1896| r1896_5(char) = Load[local_char] : &:r1896_4, m1895_4 -# 1896| r1896_6(int) = Convert : r1896_5 -# 1896| r1896_7(int) = Add : r1896_3, r1896_6 -# 1896| m1896_8(int) = Store[#return] : &:r1896_1, r1896_7 -# 1893| r1893_5(glval) = VariableAddress[#return] : -# 1893| v1893_6(void) = ReturnValue : &:r1893_5, m1896_8 -# 1893| v1893_7(void) = AliasedUse : m1893_3 -# 1893| v1893_8(void) = ExitFunction : +# 1940| int test_global_template_int() +# 1940| Block 0 +# 1940| v1940_1(void) = EnterFunction : +# 1940| m1940_2(unknown) = AliasedDefinition : +# 1940| m1940_3(unknown) = InitializeNonLocal : +# 1940| m1940_4(unknown) = Chi : total:m1940_2, partial:m1940_3 +# 1941| r1941_1(glval) = VariableAddress[local_int] : +# 1941| r1941_2(glval) = VariableAddress[global_template] : +# 1941| r1941_3(int) = Load[global_template] : &:r1941_2, ~m1940_3 +# 1941| m1941_4(int) = Store[local_int] : &:r1941_1, r1941_3 +# 1942| r1942_1(glval) = VariableAddress[local_char] : +# 1942| r1942_2(glval) = VariableAddress[global_template] : +# 1942| r1942_3(char) = Load[global_template] : &:r1942_2, ~m1940_3 +# 1942| m1942_4(char) = Store[local_char] : &:r1942_1, r1942_3 +# 1943| r1943_1(glval) = VariableAddress[#return] : +# 1943| r1943_2(glval) = VariableAddress[local_int] : +# 1943| r1943_3(int) = Load[local_int] : &:r1943_2, m1941_4 +# 1943| r1943_4(glval) = VariableAddress[local_char] : +# 1943| r1943_5(char) = Load[local_char] : &:r1943_4, m1942_4 +# 1943| r1943_6(int) = Convert : r1943_5 +# 1943| r1943_7(int) = Add : r1943_3, r1943_6 +# 1943| m1943_8(int) = Store[#return] : &:r1943_1, r1943_7 +# 1940| r1940_5(glval) = VariableAddress[#return] : +# 1940| v1940_6(void) = ReturnValue : &:r1940_5, m1943_8 +# 1940| v1940_7(void) = AliasedUse : m1940_3 +# 1940| v1940_8(void) = ExitFunction : -# 1901| int noreturnTest(int) -# 1901| Block 0 -# 1901| v1901_1(void) = EnterFunction : -# 1901| m1901_2(unknown) = AliasedDefinition : -# 1901| m1901_3(unknown) = InitializeNonLocal : -# 1901| m1901_4(unknown) = Chi : total:m1901_2, partial:m1901_3 -# 1901| r1901_5(glval) = VariableAddress[x] : -# 1901| m1901_6(int) = InitializeParameter[x] : &:r1901_5 -# 1902| r1902_1(glval) = VariableAddress[x] : -# 1902| r1902_2(int) = Load[x] : &:r1902_1, m1901_6 -# 1902| r1902_3(int) = Constant[10] : -# 1902| r1902_4(bool) = CompareLT : r1902_2, r1902_3 -# 1902| v1902_5(void) = ConditionalBranch : r1902_4 +# 1948| int noreturnTest(int) +# 1948| Block 0 +# 1948| v1948_1(void) = EnterFunction : +# 1948| m1948_2(unknown) = AliasedDefinition : +# 1948| m1948_3(unknown) = InitializeNonLocal : +# 1948| m1948_4(unknown) = Chi : total:m1948_2, partial:m1948_3 +# 1948| r1948_5(glval) = VariableAddress[x] : +# 1948| m1948_6(int) = InitializeParameter[x] : &:r1948_5 +# 1949| r1949_1(glval) = VariableAddress[x] : +# 1949| r1949_2(int) = Load[x] : &:r1949_1, m1948_6 +# 1949| r1949_3(int) = Constant[10] : +# 1949| r1949_4(bool) = CompareLT : r1949_2, r1949_3 +# 1949| v1949_5(void) = ConditionalBranch : r1949_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 1903| Block 1 -# 1903| r1903_1(glval) = VariableAddress[#return] : -# 1903| r1903_2(glval) = VariableAddress[x] : -# 1903| r1903_3(int) = Load[x] : &:r1903_2, m1901_6 -# 1903| m1903_4(int) = Store[#return] : &:r1903_1, r1903_3 -# 1901| r1901_7(glval) = VariableAddress[#return] : -# 1901| v1901_8(void) = ReturnValue : &:r1901_7, m1903_4 -# 1901| v1901_9(void) = AliasedUse : m1901_3 -# 1901| v1901_10(void) = ExitFunction : +# 1950| Block 1 +# 1950| r1950_1(glval) = VariableAddress[#return] : +# 1950| r1950_2(glval) = VariableAddress[x] : +# 1950| r1950_3(int) = Load[x] : &:r1950_2, m1948_6 +# 1950| m1950_4(int) = Store[#return] : &:r1950_1, r1950_3 +# 1948| r1948_7(glval) = VariableAddress[#return] : +# 1948| v1948_8(void) = ReturnValue : &:r1948_7, m1950_4 +# 1948| v1948_9(void) = AliasedUse : m1948_3 +# 1948| v1948_10(void) = ExitFunction : -# 1905| Block 2 -# 1905| r1905_1(glval) = FunctionAddress[noreturnFunc] : -# 1905| v1905_2(void) = Call[noreturnFunc] : func:r1905_1 -# 1905| m1905_3(unknown) = ^CallSideEffect : ~m1901_4 -# 1905| m1905_4(unknown) = Chi : total:m1901_4, partial:m1905_3 -# 1901| v1901_11(void) = Unreached : +# 1952| Block 2 +# 1952| r1952_1(glval) = FunctionAddress[noreturnFunc] : +# 1952| v1952_2(void) = Call[noreturnFunc] : func:r1952_1 +# 1952| m1952_3(unknown) = ^CallSideEffect : ~m1948_4 +# 1952| m1952_4(unknown) = Chi : total:m1948_4, partial:m1952_3 +# 1948| v1948_11(void) = Unreached : -# 1909| int noreturnTest2(int) -# 1909| Block 0 -# 1909| v1909_1(void) = EnterFunction : -# 1909| m1909_2(unknown) = AliasedDefinition : -# 1909| m1909_3(unknown) = InitializeNonLocal : -# 1909| m1909_4(unknown) = Chi : total:m1909_2, partial:m1909_3 -# 1909| r1909_5(glval) = VariableAddress[x] : -# 1909| m1909_6(int) = InitializeParameter[x] : &:r1909_5 -# 1910| r1910_1(glval) = VariableAddress[x] : -# 1910| r1910_2(int) = Load[x] : &:r1910_1, m1909_6 -# 1910| r1910_3(int) = Constant[10] : -# 1910| r1910_4(bool) = CompareLT : r1910_2, r1910_3 -# 1910| v1910_5(void) = ConditionalBranch : r1910_4 +# 1956| int noreturnTest2(int) +# 1956| Block 0 +# 1956| v1956_1(void) = EnterFunction : +# 1956| m1956_2(unknown) = AliasedDefinition : +# 1956| m1956_3(unknown) = InitializeNonLocal : +# 1956| m1956_4(unknown) = Chi : total:m1956_2, partial:m1956_3 +# 1956| r1956_5(glval) = VariableAddress[x] : +# 1956| m1956_6(int) = InitializeParameter[x] : &:r1956_5 +# 1957| r1957_1(glval) = VariableAddress[x] : +# 1957| r1957_2(int) = Load[x] : &:r1957_1, m1956_6 +# 1957| r1957_3(int) = Constant[10] : +# 1957| r1957_4(bool) = CompareLT : r1957_2, r1957_3 +# 1957| v1957_5(void) = ConditionalBranch : r1957_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 1911| Block 1 -# 1911| r1911_1(glval) = FunctionAddress[noreturnFunc] : -# 1911| v1911_2(void) = Call[noreturnFunc] : func:r1911_1 -# 1911| m1911_3(unknown) = ^CallSideEffect : ~m1909_4 -# 1911| m1911_4(unknown) = Chi : total:m1909_4, partial:m1911_3 -# 1909| v1909_7(void) = Unreached : +# 1958| Block 1 +# 1958| r1958_1(glval) = FunctionAddress[noreturnFunc] : +# 1958| v1958_2(void) = Call[noreturnFunc] : func:r1958_1 +# 1958| m1958_3(unknown) = ^CallSideEffect : ~m1956_4 +# 1958| m1958_4(unknown) = Chi : total:m1956_4, partial:m1958_3 +# 1956| v1956_7(void) = Unreached : -# 1913| Block 2 -# 1913| r1913_1(glval) = VariableAddress[#return] : -# 1913| r1913_2(glval) = VariableAddress[x] : -# 1913| r1913_3(int) = Load[x] : &:r1913_2, m1909_6 -# 1913| m1913_4(int) = Store[#return] : &:r1913_1, r1913_3 -# 1909| r1909_8(glval) = VariableAddress[#return] : -# 1909| v1909_9(void) = ReturnValue : &:r1909_8, m1913_4 -# 1909| v1909_10(void) = AliasedUse : m1909_3 -# 1909| v1909_11(void) = ExitFunction : +# 1960| Block 2 +# 1960| r1960_1(glval) = VariableAddress[#return] : +# 1960| r1960_2(glval) = VariableAddress[x] : +# 1960| r1960_3(int) = Load[x] : &:r1960_2, m1956_6 +# 1960| m1960_4(int) = Store[#return] : &:r1960_1, r1960_3 +# 1956| r1956_8(glval) = VariableAddress[#return] : +# 1956| v1956_9(void) = ReturnValue : &:r1956_8, m1960_4 +# 1956| v1956_10(void) = AliasedUse : m1956_3 +# 1956| v1956_11(void) = ExitFunction : -# 1916| int static_function(int) -# 1916| Block 0 -# 1916| v1916_1(void) = EnterFunction : -# 1916| m1916_2(unknown) = AliasedDefinition : -# 1916| m1916_3(unknown) = InitializeNonLocal : -# 1916| m1916_4(unknown) = Chi : total:m1916_2, partial:m1916_3 -# 1916| r1916_5(glval) = VariableAddress[x] : -# 1916| m1916_6(int) = InitializeParameter[x] : &:r1916_5 -# 1917| r1917_1(glval) = VariableAddress[#return] : -# 1917| r1917_2(glval) = VariableAddress[x] : -# 1917| r1917_3(int) = Load[x] : &:r1917_2, m1916_6 -# 1917| m1917_4(int) = Store[#return] : &:r1917_1, r1917_3 -# 1916| r1916_7(glval) = VariableAddress[#return] : -# 1916| v1916_8(void) = ReturnValue : &:r1916_7, m1917_4 -# 1916| v1916_9(void) = AliasedUse : m1916_3 -# 1916| v1916_10(void) = ExitFunction : +# 1963| int static_function(int) +# 1963| Block 0 +# 1963| v1963_1(void) = EnterFunction : +# 1963| m1963_2(unknown) = AliasedDefinition : +# 1963| m1963_3(unknown) = InitializeNonLocal : +# 1963| m1963_4(unknown) = Chi : total:m1963_2, partial:m1963_3 +# 1963| r1963_5(glval) = VariableAddress[x] : +# 1963| m1963_6(int) = InitializeParameter[x] : &:r1963_5 +# 1964| r1964_1(glval) = VariableAddress[#return] : +# 1964| r1964_2(glval) = VariableAddress[x] : +# 1964| r1964_3(int) = Load[x] : &:r1964_2, m1963_6 +# 1964| m1964_4(int) = Store[#return] : &:r1964_1, r1964_3 +# 1963| r1963_7(glval) = VariableAddress[#return] : +# 1963| v1963_8(void) = ReturnValue : &:r1963_7, m1964_4 +# 1963| v1963_9(void) = AliasedUse : m1963_3 +# 1963| v1963_10(void) = ExitFunction : -# 1920| void test_static_functions_with_assignments() -# 1920| Block 0 -# 1920| v1920_1(void) = EnterFunction : -# 1920| m1920_2(unknown) = AliasedDefinition : -# 1920| m1920_3(unknown) = InitializeNonLocal : -# 1920| m1920_4(unknown) = Chi : total:m1920_2, partial:m1920_3 -# 1921| r1921_1(glval) = VariableAddress[c] : -# 1921| m1921_2(C) = Uninitialized[c] : &:r1921_1 -# 1921| r1921_3(glval) = FunctionAddress[C] : -# 1921| v1921_4(void) = Call[C] : func:r1921_3, this:r1921_1 -# 1921| m1921_5(unknown) = ^CallSideEffect : ~m1920_4 -# 1921| m1921_6(unknown) = Chi : total:m1920_4, partial:m1921_5 -# 1921| m1921_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1921_1 -# 1921| m1921_8(C) = Chi : total:m1921_2, partial:m1921_7 -# 1922| r1922_1(glval) = VariableAddress[x] : -# 1922| m1922_2(int) = Uninitialized[x] : &:r1922_1 -# 1923| r1923_1(glval) = VariableAddress[c] : -# 1923| r1923_2(glval) = FunctionAddress[StaticMemberFunction] : -# 1923| r1923_3(int) = Constant[10] : -# 1923| r1923_4(int) = Call[StaticMemberFunction] : func:r1923_2, 0:r1923_3 -# 1923| m1923_5(unknown) = ^CallSideEffect : ~m1921_6 -# 1923| m1923_6(unknown) = Chi : total:m1921_6, partial:m1923_5 -# 1923| r1923_7(glval) = VariableAddress[x] : -# 1923| m1923_8(int) = Store[x] : &:r1923_7, r1923_4 -# 1924| r1924_1(glval) = VariableAddress[y] : -# 1924| m1924_2(int) = Uninitialized[y] : &:r1924_1 -# 1925| r1925_1(glval) = FunctionAddress[StaticMemberFunction] : -# 1925| r1925_2(int) = Constant[10] : -# 1925| r1925_3(int) = Call[StaticMemberFunction] : func:r1925_1, 0:r1925_2 -# 1925| m1925_4(unknown) = ^CallSideEffect : ~m1923_6 -# 1925| m1925_5(unknown) = Chi : total:m1923_6, partial:m1925_4 -# 1925| r1925_6(glval) = VariableAddress[y] : -# 1925| m1925_7(int) = Store[y] : &:r1925_6, r1925_3 -# 1926| r1926_1(glval) = VariableAddress[z] : -# 1926| m1926_2(int) = Uninitialized[z] : &:r1926_1 -# 1927| r1927_1(glval) = FunctionAddress[static_function] : -# 1927| r1927_2(int) = Constant[10] : -# 1927| r1927_3(int) = Call[static_function] : func:r1927_1, 0:r1927_2 -# 1927| m1927_4(unknown) = ^CallSideEffect : ~m1925_5 -# 1927| m1927_5(unknown) = Chi : total:m1925_5, partial:m1927_4 -# 1927| r1927_6(glval) = VariableAddress[z] : -# 1927| m1927_7(int) = Store[z] : &:r1927_6, r1927_3 -# 1928| v1928_1(void) = NoOp : -# 1928| r1928_2(glval) = VariableAddress[c] : -# 1928| r1928_3(glval) = FunctionAddress[~C] : -# 1928| v1928_4(void) = Call[~C] : func:r1928_3, this:r1928_2 -# 1928| m1928_5(unknown) = ^CallSideEffect : ~m1927_5 -# 1928| m1928_6(unknown) = Chi : total:m1927_5, partial:m1928_5 -# 1928| v1928_7(void) = ^IndirectReadSideEffect[-1] : &:r1928_2, m1921_8 -# 1928| m1928_8(C) = ^IndirectMayWriteSideEffect[-1] : &:r1928_2 -# 1928| m1928_9(C) = Chi : total:m1921_8, partial:m1928_8 -# 1920| v1920_5(void) = ReturnVoid : -# 1920| v1920_6(void) = AliasedUse : ~m1928_6 -# 1920| v1920_7(void) = ExitFunction : +# 1967| void test_static_functions_with_assignments() +# 1967| Block 0 +# 1967| v1967_1(void) = EnterFunction : +# 1967| m1967_2(unknown) = AliasedDefinition : +# 1967| m1967_3(unknown) = InitializeNonLocal : +# 1967| m1967_4(unknown) = Chi : total:m1967_2, partial:m1967_3 +# 1968| r1968_1(glval) = VariableAddress[c] : +# 1968| m1968_2(C) = Uninitialized[c] : &:r1968_1 +# 1968| r1968_3(glval) = FunctionAddress[C] : +# 1968| v1968_4(void) = Call[C] : func:r1968_3, this:r1968_1 +# 1968| m1968_5(unknown) = ^CallSideEffect : ~m1967_4 +# 1968| m1968_6(unknown) = Chi : total:m1967_4, partial:m1968_5 +# 1968| m1968_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1968_1 +# 1968| m1968_8(C) = Chi : total:m1968_2, partial:m1968_7 +# 1969| r1969_1(glval) = VariableAddress[x] : +# 1969| m1969_2(int) = Uninitialized[x] : &:r1969_1 +# 1970| r1970_1(glval) = VariableAddress[c] : +# 1970| r1970_2(glval) = FunctionAddress[StaticMemberFunction] : +# 1970| r1970_3(int) = Constant[10] : +# 1970| r1970_4(int) = Call[StaticMemberFunction] : func:r1970_2, 0:r1970_3 +# 1970| m1970_5(unknown) = ^CallSideEffect : ~m1968_6 +# 1970| m1970_6(unknown) = Chi : total:m1968_6, partial:m1970_5 +# 1970| r1970_7(glval) = VariableAddress[x] : +# 1970| m1970_8(int) = Store[x] : &:r1970_7, r1970_4 +# 1971| r1971_1(glval) = VariableAddress[y] : +# 1971| m1971_2(int) = Uninitialized[y] : &:r1971_1 +# 1972| r1972_1(glval) = FunctionAddress[StaticMemberFunction] : +# 1972| r1972_2(int) = Constant[10] : +# 1972| r1972_3(int) = Call[StaticMemberFunction] : func:r1972_1, 0:r1972_2 +# 1972| m1972_4(unknown) = ^CallSideEffect : ~m1970_6 +# 1972| m1972_5(unknown) = Chi : total:m1970_6, partial:m1972_4 +# 1972| r1972_6(glval) = VariableAddress[y] : +# 1972| m1972_7(int) = Store[y] : &:r1972_6, r1972_3 +# 1973| r1973_1(glval) = VariableAddress[z] : +# 1973| m1973_2(int) = Uninitialized[z] : &:r1973_1 +# 1974| r1974_1(glval) = FunctionAddress[static_function] : +# 1974| r1974_2(int) = Constant[10] : +# 1974| r1974_3(int) = Call[static_function] : func:r1974_1, 0:r1974_2 +# 1974| m1974_4(unknown) = ^CallSideEffect : ~m1972_5 +# 1974| m1974_5(unknown) = Chi : total:m1972_5, partial:m1974_4 +# 1974| r1974_6(glval) = VariableAddress[z] : +# 1974| m1974_7(int) = Store[z] : &:r1974_6, r1974_3 +# 1975| v1975_1(void) = NoOp : +# 1975| r1975_2(glval) = VariableAddress[c] : +# 1975| r1975_3(glval) = FunctionAddress[~C] : +# 1975| v1975_4(void) = Call[~C] : func:r1975_3, this:r1975_2 +# 1975| m1975_5(unknown) = ^CallSideEffect : ~m1974_5 +# 1975| m1975_6(unknown) = Chi : total:m1974_5, partial:m1975_5 +# 1975| v1975_7(void) = ^IndirectReadSideEffect[-1] : &:r1975_2, m1968_8 +# 1975| m1975_8(C) = ^IndirectMayWriteSideEffect[-1] : &:r1975_2 +# 1975| m1975_9(C) = Chi : total:m1968_8, partial:m1975_8 +# 1967| v1967_5(void) = ReturnVoid : +# 1967| v1967_6(void) = AliasedUse : ~m1975_6 +# 1967| v1967_7(void) = ExitFunction : -# 1930| void test_double_assign() -# 1930| Block 0 -# 1930| v1930_1(void) = EnterFunction : -# 1930| m1930_2(unknown) = AliasedDefinition : -# 1930| m1930_3(unknown) = InitializeNonLocal : -# 1930| m1930_4(unknown) = Chi : total:m1930_2, partial:m1930_3 -# 1931| r1931_1(glval) = VariableAddress[i] : -# 1931| m1931_2(int) = Uninitialized[i] : &:r1931_1 -# 1931| r1931_3(glval) = VariableAddress[j] : -# 1931| m1931_4(int) = Uninitialized[j] : &:r1931_3 -# 1932| r1932_1(int) = Constant[40] : -# 1932| r1932_2(glval) = VariableAddress[j] : -# 1932| m1932_3(int) = Store[j] : &:r1932_2, r1932_1 -# 1932| r1932_4(int) = Load[j] : &:r1932_2, m1932_3 -# 1932| r1932_5(glval) = VariableAddress[i] : -# 1932| m1932_6(int) = Store[i] : &:r1932_5, r1932_4 -# 1933| v1933_1(void) = NoOp : -# 1930| v1930_5(void) = ReturnVoid : -# 1930| v1930_6(void) = AliasedUse : m1930_3 -# 1930| v1930_7(void) = ExitFunction : +# 1977| void test_double_assign() +# 1977| Block 0 +# 1977| v1977_1(void) = EnterFunction : +# 1977| m1977_2(unknown) = AliasedDefinition : +# 1977| m1977_3(unknown) = InitializeNonLocal : +# 1977| m1977_4(unknown) = Chi : total:m1977_2, partial:m1977_3 +# 1978| r1978_1(glval) = VariableAddress[i] : +# 1978| m1978_2(int) = Uninitialized[i] : &:r1978_1 +# 1978| r1978_3(glval) = VariableAddress[j] : +# 1978| m1978_4(int) = Uninitialized[j] : &:r1978_3 +# 1979| r1979_1(int) = Constant[40] : +# 1979| r1979_2(glval) = VariableAddress[j] : +# 1979| m1979_3(int) = Store[j] : &:r1979_2, r1979_1 +# 1979| r1979_4(int) = Load[j] : &:r1979_2, m1979_3 +# 1979| r1979_5(glval) = VariableAddress[i] : +# 1979| m1979_6(int) = Store[i] : &:r1979_5, r1979_4 +# 1980| v1980_1(void) = NoOp : +# 1977| v1977_5(void) = ReturnVoid : +# 1977| v1977_6(void) = AliasedUse : m1977_3 +# 1977| v1977_7(void) = ExitFunction : -# 1935| void test_assign_with_assign_operation() -# 1935| Block 0 -# 1935| v1935_1(void) = EnterFunction : -# 1935| m1935_2(unknown) = AliasedDefinition : -# 1935| m1935_3(unknown) = InitializeNonLocal : -# 1935| m1935_4(unknown) = Chi : total:m1935_2, partial:m1935_3 -# 1936| r1936_1(glval) = VariableAddress[i] : -# 1936| m1936_2(int) = Uninitialized[i] : &:r1936_1 -# 1936| r1936_3(glval) = VariableAddress[j] : -# 1936| r1936_4(int) = Constant[0] : -# 1936| m1936_5(int) = Store[j] : &:r1936_3, r1936_4 -# 1937| r1937_1(int) = Constant[40] : -# 1937| r1937_2(glval) = VariableAddress[j] : -# 1937| r1937_3(int) = Load[j] : &:r1937_2, m1936_5 -# 1937| r1937_4(int) = Add : r1937_3, r1937_1 -# 1937| m1937_5(int) = Store[j] : &:r1937_2, r1937_4 -# 1937| r1937_6(int) = Load[j] : &:r1937_2, m1937_5 -# 1937| r1937_7(glval) = VariableAddress[i] : -# 1937| m1937_8(int) = Store[i] : &:r1937_7, r1937_6 -# 1938| v1938_1(void) = NoOp : -# 1935| v1935_5(void) = ReturnVoid : -# 1935| v1935_6(void) = AliasedUse : m1935_3 -# 1935| v1935_7(void) = ExitFunction : +# 1982| void test_assign_with_assign_operation() +# 1982| Block 0 +# 1982| v1982_1(void) = EnterFunction : +# 1982| m1982_2(unknown) = AliasedDefinition : +# 1982| m1982_3(unknown) = InitializeNonLocal : +# 1982| m1982_4(unknown) = Chi : total:m1982_2, partial:m1982_3 +# 1983| r1983_1(glval) = VariableAddress[i] : +# 1983| m1983_2(int) = Uninitialized[i] : &:r1983_1 +# 1983| r1983_3(glval) = VariableAddress[j] : +# 1983| r1983_4(int) = Constant[0] : +# 1983| m1983_5(int) = Store[j] : &:r1983_3, r1983_4 +# 1984| r1984_1(int) = Constant[40] : +# 1984| r1984_2(glval) = VariableAddress[j] : +# 1984| r1984_3(int) = Load[j] : &:r1984_2, m1983_5 +# 1984| r1984_4(int) = Add : r1984_3, r1984_1 +# 1984| m1984_5(int) = Store[j] : &:r1984_2, r1984_4 +# 1984| r1984_6(int) = Load[j] : &:r1984_2, m1984_5 +# 1984| r1984_7(glval) = VariableAddress[i] : +# 1984| m1984_8(int) = Store[i] : &:r1984_7, r1984_6 +# 1985| v1985_1(void) = NoOp : +# 1982| v1982_5(void) = ReturnVoid : +# 1982| v1982_6(void) = AliasedUse : m1982_3 +# 1982| v1982_7(void) = ExitFunction : -# 1944| D& D::ReferenceStaticMemberFunction() -# 1944| Block 0 -# 1944| v1944_1(void) = EnterFunction : -# 1944| m1944_2(unknown) = AliasedDefinition : -# 1944| m1944_3(unknown) = InitializeNonLocal : -# 1944| m1944_4(unknown) = Chi : total:m1944_2, partial:m1944_3 -# 1945| r1945_1(glval) = VariableAddress[#return] : -# 1945| r1945_2(glval) = VariableAddress[x] : -# 1945| r1945_3(D &) = CopyValue : r1945_2 -# 1945| m1945_4(D &) = Store[#return] : &:r1945_1, r1945_3 -# 1944| r1944_5(glval) = VariableAddress[#return] : -# 1944| v1944_6(void) = ReturnValue : &:r1944_5, m1945_4 -# 1944| v1944_7(void) = AliasedUse : m1944_3 -# 1944| v1944_8(void) = ExitFunction : +# 1991| D& D::ReferenceStaticMemberFunction() +# 1991| Block 0 +# 1991| v1991_1(void) = EnterFunction : +# 1991| m1991_2(unknown) = AliasedDefinition : +# 1991| m1991_3(unknown) = InitializeNonLocal : +# 1991| m1991_4(unknown) = Chi : total:m1991_2, partial:m1991_3 +# 1992| r1992_1(glval) = VariableAddress[#return] : +# 1992| r1992_2(glval) = VariableAddress[x] : +# 1992| r1992_3(D &) = CopyValue : r1992_2 +# 1992| m1992_4(D &) = Store[#return] : &:r1992_1, r1992_3 +# 1991| r1991_5(glval) = VariableAddress[#return] : +# 1991| v1991_6(void) = ReturnValue : &:r1991_5, m1992_4 +# 1991| v1991_7(void) = AliasedUse : m1991_3 +# 1991| v1991_8(void) = ExitFunction : -# 1947| D D::ObjectStaticMemberFunction() -# 1947| Block 0 -# 1947| v1947_1(void) = EnterFunction : -# 1947| m1947_2(unknown) = AliasedDefinition : -# 1947| m1947_3(unknown) = InitializeNonLocal : -# 1947| m1947_4(unknown) = Chi : total:m1947_2, partial:m1947_3 -# 1948| r1948_1(glval) = VariableAddress[#return] : -# 1948| r1948_2(glval) = VariableAddress[x] : -# 1948| r1948_3(D) = Load[x] : &:r1948_2, ~m1947_3 -# 1948| m1948_4(D) = Store[#return] : &:r1948_1, r1948_3 -# 1947| r1947_5(glval) = VariableAddress[#return] : -# 1947| v1947_6(void) = ReturnValue : &:r1947_5, m1948_4 -# 1947| v1947_7(void) = AliasedUse : m1947_3 -# 1947| v1947_8(void) = ExitFunction : +# 1994| D D::ObjectStaticMemberFunction() +# 1994| Block 0 +# 1994| v1994_1(void) = EnterFunction : +# 1994| m1994_2(unknown) = AliasedDefinition : +# 1994| m1994_3(unknown) = InitializeNonLocal : +# 1994| m1994_4(unknown) = Chi : total:m1994_2, partial:m1994_3 +# 1995| r1995_1(glval) = VariableAddress[#return] : +# 1995| r1995_2(glval) = VariableAddress[x] : +# 1995| r1995_3(D) = Load[x] : &:r1995_2, ~m1994_3 +# 1995| m1995_4(D) = Store[#return] : &:r1995_1, r1995_3 +# 1994| r1994_5(glval) = VariableAddress[#return] : +# 1994| v1994_6(void) = ReturnValue : &:r1994_5, m1995_4 +# 1994| v1994_7(void) = AliasedUse : m1994_3 +# 1994| v1994_8(void) = ExitFunction : -# 1952| void test_static_member_functions_with_reference_return() -# 1952| Block 0 -# 1952| v1952_1(void) = EnterFunction : -# 1952| m1952_2(unknown) = AliasedDefinition : -# 1952| m1952_3(unknown) = InitializeNonLocal : -# 1952| m1952_4(unknown) = Chi : total:m1952_2, partial:m1952_3 -# 1953| r1953_1(glval) = VariableAddress[d] : -# 1953| m1953_2(D) = Uninitialized[d] : &:r1953_1 -# 1955| r1955_1(glval) = VariableAddress[d] : -# 1955| r1955_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1955| r1955_3(D &) = Call[ReferenceStaticMemberFunction] : func:r1955_2 -# 1955| m1955_4(unknown) = ^CallSideEffect : ~m1952_4 -# 1955| m1955_5(unknown) = Chi : total:m1952_4, partial:m1955_4 -# 1955| r1955_6(glval) = CopyValue : r1955_3 -# 1956| r1956_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1956| r1956_2(D &) = Call[ReferenceStaticMemberFunction] : func:r1956_1 -# 1956| m1956_3(unknown) = ^CallSideEffect : ~m1955_5 -# 1956| m1956_4(unknown) = Chi : total:m1955_5, partial:m1956_3 -# 1956| r1956_5(glval) = CopyValue : r1956_2 -# 1957| r1957_1(glval) = VariableAddress[d] : -# 1957| r1957_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1957| r1957_3(D) = Call[ObjectStaticMemberFunction] : func:r1957_2 -# 1957| m1957_4(unknown) = ^CallSideEffect : ~m1956_4 -# 1957| m1957_5(unknown) = Chi : total:m1956_4, partial:m1957_4 -# 1958| r1958_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1958| r1958_2(D) = Call[ObjectStaticMemberFunction] : func:r1958_1 -# 1958| m1958_3(unknown) = ^CallSideEffect : ~m1957_5 -# 1958| m1958_4(unknown) = Chi : total:m1957_5, partial:m1958_3 -# 1960| r1960_1(glval) = VariableAddress[x] : -# 1960| m1960_2(D) = Uninitialized[x] : &:r1960_1 -# 1961| r1961_1(glval) = VariableAddress[d] : -# 1961| r1961_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1961| r1961_3(D &) = Call[ReferenceStaticMemberFunction] : func:r1961_2 -# 1961| m1961_4(unknown) = ^CallSideEffect : ~m1958_4 -# 1961| m1961_5(unknown) = Chi : total:m1958_4, partial:m1961_4 -# 1961| r1961_6(D) = Load[?] : &:r1961_3, ~m1961_5 -# 1961| r1961_7(glval) = VariableAddress[x] : -# 1961| m1961_8(D) = Store[x] : &:r1961_7, r1961_6 -# 1962| r1962_1(glval) = VariableAddress[y] : -# 1962| m1962_2(D) = Uninitialized[y] : &:r1962_1 -# 1963| r1963_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1963| r1963_2(D &) = Call[ReferenceStaticMemberFunction] : func:r1963_1 -# 1963| m1963_3(unknown) = ^CallSideEffect : ~m1961_5 -# 1963| m1963_4(unknown) = Chi : total:m1961_5, partial:m1963_3 -# 1963| r1963_5(D) = Load[?] : &:r1963_2, ~m1963_4 -# 1963| r1963_6(glval) = VariableAddress[y] : -# 1963| m1963_7(D) = Store[y] : &:r1963_6, r1963_5 -# 1964| r1964_1(glval) = VariableAddress[j] : -# 1964| m1964_2(D) = Uninitialized[j] : &:r1964_1 -# 1965| r1965_1(glval) = VariableAddress[d] : -# 1965| r1965_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1965| r1965_3(D) = Call[ObjectStaticMemberFunction] : func:r1965_2 -# 1965| m1965_4(unknown) = ^CallSideEffect : ~m1963_4 -# 1965| m1965_5(unknown) = Chi : total:m1963_4, partial:m1965_4 -# 1965| r1965_6(glval) = VariableAddress[j] : -# 1965| m1965_7(D) = Store[j] : &:r1965_6, r1965_3 -# 1966| r1966_1(glval) = VariableAddress[k] : -# 1966| m1966_2(D) = Uninitialized[k] : &:r1966_1 -# 1967| r1967_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1967| r1967_2(D) = Call[ObjectStaticMemberFunction] : func:r1967_1 -# 1967| m1967_3(unknown) = ^CallSideEffect : ~m1965_5 -# 1967| m1967_4(unknown) = Chi : total:m1965_5, partial:m1967_3 -# 1967| r1967_5(glval) = VariableAddress[k] : -# 1967| m1967_6(D) = Store[k] : &:r1967_5, r1967_2 -# 1968| v1968_1(void) = NoOp : -# 1952| v1952_5(void) = ReturnVoid : -# 1952| v1952_6(void) = AliasedUse : ~m1967_4 -# 1952| v1952_7(void) = ExitFunction : +# 1999| void test_static_member_functions_with_reference_return() +# 1999| Block 0 +# 1999| v1999_1(void) = EnterFunction : +# 1999| m1999_2(unknown) = AliasedDefinition : +# 1999| m1999_3(unknown) = InitializeNonLocal : +# 1999| m1999_4(unknown) = Chi : total:m1999_2, partial:m1999_3 +# 2000| r2000_1(glval) = VariableAddress[d] : +# 2000| m2000_2(D) = Uninitialized[d] : &:r2000_1 +# 2002| r2002_1(glval) = VariableAddress[d] : +# 2002| r2002_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2002| r2002_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2002_2 +# 2002| m2002_4(unknown) = ^CallSideEffect : ~m1999_4 +# 2002| m2002_5(unknown) = Chi : total:m1999_4, partial:m2002_4 +# 2002| r2002_6(glval) = CopyValue : r2002_3 +# 2003| r2003_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2003| r2003_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2003_1 +# 2003| m2003_3(unknown) = ^CallSideEffect : ~m2002_5 +# 2003| m2003_4(unknown) = Chi : total:m2002_5, partial:m2003_3 +# 2003| r2003_5(glval) = CopyValue : r2003_2 +# 2004| r2004_1(glval) = VariableAddress[d] : +# 2004| r2004_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2004| r2004_3(D) = Call[ObjectStaticMemberFunction] : func:r2004_2 +# 2004| m2004_4(unknown) = ^CallSideEffect : ~m2003_4 +# 2004| m2004_5(unknown) = Chi : total:m2003_4, partial:m2004_4 +# 2005| r2005_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2005| r2005_2(D) = Call[ObjectStaticMemberFunction] : func:r2005_1 +# 2005| m2005_3(unknown) = ^CallSideEffect : ~m2004_5 +# 2005| m2005_4(unknown) = Chi : total:m2004_5, partial:m2005_3 +# 2007| r2007_1(glval) = VariableAddress[x] : +# 2007| m2007_2(D) = Uninitialized[x] : &:r2007_1 +# 2008| r2008_1(glval) = VariableAddress[d] : +# 2008| r2008_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2008| r2008_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2008_2 +# 2008| m2008_4(unknown) = ^CallSideEffect : ~m2005_4 +# 2008| m2008_5(unknown) = Chi : total:m2005_4, partial:m2008_4 +# 2008| r2008_6(D) = Load[?] : &:r2008_3, ~m2008_5 +# 2008| r2008_7(glval) = VariableAddress[x] : +# 2008| m2008_8(D) = Store[x] : &:r2008_7, r2008_6 +# 2009| r2009_1(glval) = VariableAddress[y] : +# 2009| m2009_2(D) = Uninitialized[y] : &:r2009_1 +# 2010| r2010_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2010| r2010_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2010_1 +# 2010| m2010_3(unknown) = ^CallSideEffect : ~m2008_5 +# 2010| m2010_4(unknown) = Chi : total:m2008_5, partial:m2010_3 +# 2010| r2010_5(D) = Load[?] : &:r2010_2, ~m2010_4 +# 2010| r2010_6(glval) = VariableAddress[y] : +# 2010| m2010_7(D) = Store[y] : &:r2010_6, r2010_5 +# 2011| r2011_1(glval) = VariableAddress[j] : +# 2011| m2011_2(D) = Uninitialized[j] : &:r2011_1 +# 2012| r2012_1(glval) = VariableAddress[d] : +# 2012| r2012_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2012| r2012_3(D) = Call[ObjectStaticMemberFunction] : func:r2012_2 +# 2012| m2012_4(unknown) = ^CallSideEffect : ~m2010_4 +# 2012| m2012_5(unknown) = Chi : total:m2010_4, partial:m2012_4 +# 2012| r2012_6(glval) = VariableAddress[j] : +# 2012| m2012_7(D) = Store[j] : &:r2012_6, r2012_3 +# 2013| r2013_1(glval) = VariableAddress[k] : +# 2013| m2013_2(D) = Uninitialized[k] : &:r2013_1 +# 2014| r2014_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2014| r2014_2(D) = Call[ObjectStaticMemberFunction] : func:r2014_1 +# 2014| m2014_3(unknown) = ^CallSideEffect : ~m2012_5 +# 2014| m2014_4(unknown) = Chi : total:m2012_5, partial:m2014_3 +# 2014| r2014_5(glval) = VariableAddress[k] : +# 2014| m2014_6(D) = Store[k] : &:r2014_5, r2014_2 +# 2015| v2015_1(void) = NoOp : +# 1999| v1999_5(void) = ReturnVoid : +# 1999| v1999_6(void) = AliasedUse : ~m2014_4 +# 1999| v1999_7(void) = ExitFunction : -# 1970| void test_volatile() -# 1970| Block 0 -# 1970| v1970_1(void) = EnterFunction : -# 1970| m1970_2(unknown) = AliasedDefinition : -# 1970| m1970_3(unknown) = InitializeNonLocal : -# 1970| m1970_4(unknown) = Chi : total:m1970_2, partial:m1970_3 -# 1971| r1971_1(glval) = VariableAddress[x] : -# 1971| m1971_2(int) = Uninitialized[x] : &:r1971_1 -# 1972| r1972_1(glval) = VariableAddress[x] : -# 1972| r1972_2(int) = Load[x] : &:r1972_1, m1971_2 -# 1973| v1973_1(void) = NoOp : -# 1970| v1970_5(void) = ReturnVoid : -# 1970| v1970_6(void) = AliasedUse : m1970_3 -# 1970| v1970_7(void) = ExitFunction : +# 2017| void test_volatile() +# 2017| Block 0 +# 2017| v2017_1(void) = EnterFunction : +# 2017| m2017_2(unknown) = AliasedDefinition : +# 2017| m2017_3(unknown) = InitializeNonLocal : +# 2017| m2017_4(unknown) = Chi : total:m2017_2, partial:m2017_3 +# 2018| r2018_1(glval) = VariableAddress[x] : +# 2018| m2018_2(int) = Uninitialized[x] : &:r2018_1 +# 2019| r2019_1(glval) = VariableAddress[x] : +# 2019| r2019_2(int) = Load[x] : &:r2019_1, m2018_2 +# 2020| v2020_1(void) = NoOp : +# 2017| v2017_5(void) = ReturnVoid : +# 2017| v2017_6(void) = AliasedUse : m2017_3 +# 2017| v2017_7(void) = ExitFunction : -# 1981| void value_category_test() -# 1981| Block 0 -# 1981| v1981_1(void) = EnterFunction : -# 1981| m1981_2(unknown) = AliasedDefinition : -# 1981| m1981_3(unknown) = InitializeNonLocal : -# 1981| m1981_4(unknown) = Chi : total:m1981_2, partial:m1981_3 -# 1982| r1982_1(glval) = VariableAddress[c] : -# 1982| m1982_2(ValCat) = Uninitialized[c] : &:r1982_1 +# 2028| void value_category_test() +# 2028| Block 0 +# 2028| v2028_1(void) = EnterFunction : +# 2028| m2028_2(unknown) = AliasedDefinition : +# 2028| m2028_3(unknown) = InitializeNonLocal : +# 2028| m2028_4(unknown) = Chi : total:m2028_2, partial:m2028_3 +# 2029| r2029_1(glval) = VariableAddress[c] : +# 2029| m2029_2(ValCat) = Uninitialized[c] : &:r2029_1 #-----| r0_1(glval) = VariableAddress[#temp0:0] : #-----| m0_2(ValCat) = Uninitialized[#temp0:0] : &:r0_1 #-----| r0_3(ValCat) = Load[#temp0:0] : &:r0_1, m0_2 -# 1984| r1984_1(glval) = VariableAddress[c] : -# 1984| r1984_2(glval) = FunctionAddress[lvalue] : -# 1984| r1984_3(ValCat &) = Call[lvalue] : func:r1984_2 -# 1984| m1984_4(unknown) = ^CallSideEffect : ~m1981_4 -# 1984| m1984_5(unknown) = Chi : total:m1981_4, partial:m1984_4 -# 1984| r1984_6(glval) = CopyValue : r1984_3 -# 1984| m1984_7(ValCat) = Store[?] : &:r1984_6, r0_3 -# 1984| m1984_8(unknown) = Chi : total:m1984_5, partial:m1984_7 +# 2031| r2031_1(glval) = VariableAddress[c] : +# 2031| r2031_2(glval) = FunctionAddress[lvalue] : +# 2031| r2031_3(ValCat &) = Call[lvalue] : func:r2031_2 +# 2031| m2031_4(unknown) = ^CallSideEffect : ~m2028_4 +# 2031| m2031_5(unknown) = Chi : total:m2028_4, partial:m2031_4 +# 2031| r2031_6(glval) = CopyValue : r2031_3 +# 2031| m2031_7(ValCat) = Store[?] : &:r2031_6, r0_3 +# 2031| m2031_8(unknown) = Chi : total:m2031_5, partial:m2031_7 #-----| r0_4(glval) = VariableAddress[#temp0:0] : #-----| m0_5(ValCat) = Uninitialized[#temp0:0] : &:r0_4 #-----| r0_6(ValCat) = Load[#temp0:0] : &:r0_4, m0_5 -# 1985| r1985_1(glval) = VariableAddress[c] : -# 1985| r1985_2(glval) = FunctionAddress[xvalue] : -# 1985| r1985_3(ValCat &&) = Call[xvalue] : func:r1985_2 -# 1985| m1985_4(unknown) = ^CallSideEffect : ~m1984_8 -# 1985| m1985_5(unknown) = Chi : total:m1984_8, partial:m1985_4 -# 1985| r1985_6(glval) = CopyValue : r1985_3 -# 1985| m1985_7(ValCat) = Store[?] : &:r1985_6, r0_6 -# 1985| m1985_8(unknown) = Chi : total:m1985_5, partial:m1985_7 +# 2032| r2032_1(glval) = VariableAddress[c] : +# 2032| r2032_2(glval) = FunctionAddress[xvalue] : +# 2032| r2032_3(ValCat &&) = Call[xvalue] : func:r2032_2 +# 2032| m2032_4(unknown) = ^CallSideEffect : ~m2031_8 +# 2032| m2032_5(unknown) = Chi : total:m2031_8, partial:m2032_4 +# 2032| r2032_6(glval) = CopyValue : r2032_3 +# 2032| m2032_7(ValCat) = Store[?] : &:r2032_6, r0_6 +# 2032| m2032_8(unknown) = Chi : total:m2032_5, partial:m2032_7 #-----| r0_7(glval) = VariableAddress[#temp0:0] : #-----| m0_8(ValCat) = Uninitialized[#temp0:0] : &:r0_7 #-----| r0_9(ValCat) = Load[#temp0:0] : &:r0_7, m0_8 -# 1986| r1986_1(glval) = VariableAddress[#temp1986:5] : -# 1986| r1986_2(glval) = VariableAddress[c] : -# 1986| r1986_3(glval) = FunctionAddress[prvalue] : -# 1986| r1986_4(ValCat) = Call[prvalue] : func:r1986_3 -# 1986| m1986_5(unknown) = ^CallSideEffect : ~m1985_8 -# 1986| m1986_6(unknown) = Chi : total:m1985_8, partial:m1986_5 -# 1986| m1986_7(ValCat) = Store[#temp1986:5] : &:r1986_1, r1986_4 -# 1986| m1986_8(ValCat) = Store[#temp1986:5] : &:r1986_1, r0_9 +# 2033| r2033_1(glval) = VariableAddress[#temp2033:5] : +# 2033| r2033_2(glval) = VariableAddress[c] : +# 2033| r2033_3(glval) = FunctionAddress[prvalue] : +# 2033| r2033_4(ValCat) = Call[prvalue] : func:r2033_3 +# 2033| m2033_5(unknown) = ^CallSideEffect : ~m2032_8 +# 2033| m2033_6(unknown) = Chi : total:m2032_8, partial:m2033_5 +# 2033| m2033_7(ValCat) = Store[#temp2033:5] : &:r2033_1, r2033_4 +# 2033| m2033_8(ValCat) = Store[#temp2033:5] : &:r2033_1, r0_9 #-----| r0_10(glval) = VariableAddress[#temp0:0] : #-----| m0_11(ValCat) = Uninitialized[#temp0:0] : &:r0_10 #-----| r0_12(ValCat) = Load[#temp0:0] : &:r0_10, m0_11 -# 1987| r1987_1(glval) = FunctionAddress[lvalue] : -# 1987| r1987_2(ValCat &) = Call[lvalue] : func:r1987_1 -# 1987| m1987_3(unknown) = ^CallSideEffect : ~m1986_6 -# 1987| m1987_4(unknown) = Chi : total:m1986_6, partial:m1987_3 -# 1987| r1987_5(glval) = CopyValue : r1987_2 -# 1987| m1987_6(ValCat) = Store[?] : &:r1987_5, r0_12 -# 1987| m1987_7(unknown) = Chi : total:m1987_4, partial:m1987_6 +# 2034| r2034_1(glval) = FunctionAddress[lvalue] : +# 2034| r2034_2(ValCat &) = Call[lvalue] : func:r2034_1 +# 2034| m2034_3(unknown) = ^CallSideEffect : ~m2033_6 +# 2034| m2034_4(unknown) = Chi : total:m2033_6, partial:m2034_3 +# 2034| r2034_5(glval) = CopyValue : r2034_2 +# 2034| m2034_6(ValCat) = Store[?] : &:r2034_5, r0_12 +# 2034| m2034_7(unknown) = Chi : total:m2034_4, partial:m2034_6 #-----| r0_13(glval) = VariableAddress[#temp0:0] : #-----| m0_14(ValCat) = Uninitialized[#temp0:0] : &:r0_13 #-----| r0_15(ValCat) = Load[#temp0:0] : &:r0_13, m0_14 -# 1988| r1988_1(glval) = FunctionAddress[xvalue] : -# 1988| r1988_2(ValCat &&) = Call[xvalue] : func:r1988_1 -# 1988| m1988_3(unknown) = ^CallSideEffect : ~m1987_7 -# 1988| m1988_4(unknown) = Chi : total:m1987_7, partial:m1988_3 -# 1988| r1988_5(glval) = CopyValue : r1988_2 -# 1988| m1988_6(ValCat) = Store[?] : &:r1988_5, r0_15 -# 1988| m1988_7(unknown) = Chi : total:m1988_4, partial:m1988_6 +# 2035| r2035_1(glval) = FunctionAddress[xvalue] : +# 2035| r2035_2(ValCat &&) = Call[xvalue] : func:r2035_1 +# 2035| m2035_3(unknown) = ^CallSideEffect : ~m2034_7 +# 2035| m2035_4(unknown) = Chi : total:m2034_7, partial:m2035_3 +# 2035| r2035_5(glval) = CopyValue : r2035_2 +# 2035| m2035_6(ValCat) = Store[?] : &:r2035_5, r0_15 +# 2035| m2035_7(unknown) = Chi : total:m2035_4, partial:m2035_6 #-----| r0_16(glval) = VariableAddress[#temp0:0] : #-----| m0_17(ValCat) = Uninitialized[#temp0:0] : &:r0_16 #-----| r0_18(ValCat) = Load[#temp0:0] : &:r0_16, m0_17 -# 1989| r1989_1(glval) = VariableAddress[#temp1989:5] : -# 1989| r1989_2(glval) = FunctionAddress[prvalue] : -# 1989| r1989_3(ValCat) = Call[prvalue] : func:r1989_2 -# 1989| m1989_4(unknown) = ^CallSideEffect : ~m1988_7 -# 1989| m1989_5(unknown) = Chi : total:m1988_7, partial:m1989_4 -# 1989| m1989_6(ValCat) = Store[#temp1989:5] : &:r1989_1, r1989_3 -# 1989| m1989_7(ValCat) = Store[#temp1989:5] : &:r1989_1, r0_18 -# 1990| v1990_1(void) = NoOp : -# 1981| v1981_5(void) = ReturnVoid : -# 1981| v1981_6(void) = AliasedUse : ~m1989_5 -# 1981| v1981_7(void) = ExitFunction : +# 2036| r2036_1(glval) = VariableAddress[#temp2036:5] : +# 2036| r2036_2(glval) = FunctionAddress[prvalue] : +# 2036| r2036_3(ValCat) = Call[prvalue] : func:r2036_2 +# 2036| m2036_4(unknown) = ^CallSideEffect : ~m2035_7 +# 2036| m2036_5(unknown) = Chi : total:m2035_7, partial:m2036_4 +# 2036| m2036_6(ValCat) = Store[#temp2036:5] : &:r2036_1, r2036_3 +# 2036| m2036_7(ValCat) = Store[#temp2036:5] : &:r2036_1, r0_18 +# 2037| v2037_1(void) = NoOp : +# 2028| v2028_5(void) = ReturnVoid : +# 2028| v2028_6(void) = AliasedUse : ~m2036_5 +# 2028| v2028_7(void) = ExitFunction : -# 1992| void SetStaticFuncPtr() -# 1992| Block 0 -# 1992| v1992_1(void) = EnterFunction : -# 1992| m1992_2(unknown) = AliasedDefinition : -# 1992| m1992_3(unknown) = InitializeNonLocal : -# 1992| m1992_4(unknown) = Chi : total:m1992_2, partial:m1992_3 -# 1993| r1993_1(glval) = VariableAddress[c] : -# 1993| m1993_2(C) = Uninitialized[c] : &:r1993_1 -# 1993| r1993_3(glval) = FunctionAddress[C] : -# 1993| v1993_4(void) = Call[C] : func:r1993_3, this:r1993_1 -# 1993| m1993_5(unknown) = ^CallSideEffect : ~m1992_4 -# 1993| m1993_6(unknown) = Chi : total:m1992_4, partial:m1993_5 -# 1993| m1993_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1993_1 -# 1993| m1993_8(C) = Chi : total:m1993_2, partial:m1993_7 -# 1994| r1994_1(glval<..(*)(..)>) = VariableAddress[pfn] : -# 1994| r1994_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : -# 1994| m1994_3(..(*)(..)) = Store[pfn] : &:r1994_1, r1994_2 -# 1995| r1995_1(glval) = VariableAddress[c] : -# 1995| r1995_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : -# 1995| r1995_3(glval<..(*)(..)>) = VariableAddress[pfn] : -# 1995| m1995_4(..(*)(..)) = Store[pfn] : &:r1995_3, r1995_2 -# 1996| v1996_1(void) = NoOp : -# 1996| r1996_2(glval) = VariableAddress[c] : -# 1996| r1996_3(glval) = FunctionAddress[~C] : -# 1996| v1996_4(void) = Call[~C] : func:r1996_3, this:r1996_2 -# 1996| m1996_5(unknown) = ^CallSideEffect : ~m1993_6 -# 1996| m1996_6(unknown) = Chi : total:m1993_6, partial:m1996_5 -# 1996| v1996_7(void) = ^IndirectReadSideEffect[-1] : &:r1996_2, m1993_8 -# 1996| m1996_8(C) = ^IndirectMayWriteSideEffect[-1] : &:r1996_2 -# 1996| m1996_9(C) = Chi : total:m1993_8, partial:m1996_8 -# 1992| v1992_5(void) = ReturnVoid : -# 1992| v1992_6(void) = AliasedUse : ~m1996_6 -# 1992| v1992_7(void) = ExitFunction : +# 2039| void SetStaticFuncPtr() +# 2039| Block 0 +# 2039| v2039_1(void) = EnterFunction : +# 2039| m2039_2(unknown) = AliasedDefinition : +# 2039| m2039_3(unknown) = InitializeNonLocal : +# 2039| m2039_4(unknown) = Chi : total:m2039_2, partial:m2039_3 +# 2040| r2040_1(glval) = VariableAddress[c] : +# 2040| m2040_2(C) = Uninitialized[c] : &:r2040_1 +# 2040| r2040_3(glval) = FunctionAddress[C] : +# 2040| v2040_4(void) = Call[C] : func:r2040_3, this:r2040_1 +# 2040| m2040_5(unknown) = ^CallSideEffect : ~m2039_4 +# 2040| m2040_6(unknown) = Chi : total:m2039_4, partial:m2040_5 +# 2040| m2040_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r2040_1 +# 2040| m2040_8(C) = Chi : total:m2040_2, partial:m2040_7 +# 2041| r2041_1(glval<..(*)(..)>) = VariableAddress[pfn] : +# 2041| r2041_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : +# 2041| m2041_3(..(*)(..)) = Store[pfn] : &:r2041_1, r2041_2 +# 2042| r2042_1(glval) = VariableAddress[c] : +# 2042| r2042_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : +# 2042| r2042_3(glval<..(*)(..)>) = VariableAddress[pfn] : +# 2042| m2042_4(..(*)(..)) = Store[pfn] : &:r2042_3, r2042_2 +# 2043| v2043_1(void) = NoOp : +# 2043| r2043_2(glval) = VariableAddress[c] : +# 2043| r2043_3(glval) = FunctionAddress[~C] : +# 2043| v2043_4(void) = Call[~C] : func:r2043_3, this:r2043_2 +# 2043| m2043_5(unknown) = ^CallSideEffect : ~m2040_6 +# 2043| m2043_6(unknown) = Chi : total:m2040_6, partial:m2043_5 +# 2043| v2043_7(void) = ^IndirectReadSideEffect[-1] : &:r2043_2, m2040_8 +# 2043| m2043_8(C) = ^IndirectMayWriteSideEffect[-1] : &:r2043_2 +# 2043| m2043_9(C) = Chi : total:m2040_8, partial:m2043_8 +# 2039| v2039_5(void) = ReturnVoid : +# 2039| v2039_6(void) = AliasedUse : ~m2043_6 +# 2039| v2039_7(void) = ExitFunction : -# 1998| void TernaryTestInt(bool, int, int, int) -# 1998| Block 0 -# 1998| v1998_1(void) = EnterFunction : -# 1998| m1998_2(unknown) = AliasedDefinition : -# 1998| m1998_3(unknown) = InitializeNonLocal : -# 1998| m1998_4(unknown) = Chi : total:m1998_2, partial:m1998_3 -# 1998| r1998_5(glval) = VariableAddress[a] : -# 1998| m1998_6(bool) = InitializeParameter[a] : &:r1998_5 -# 1998| r1998_7(glval) = VariableAddress[x] : -# 1998| m1998_8(int) = InitializeParameter[x] : &:r1998_7 -# 1998| r1998_9(glval) = VariableAddress[y] : -# 1998| m1998_10(int) = InitializeParameter[y] : &:r1998_9 -# 1998| r1998_11(glval) = VariableAddress[z] : -# 1998| m1998_12(int) = InitializeParameter[z] : &:r1998_11 -# 1999| r1999_1(glval) = VariableAddress[a] : -# 1999| r1999_2(bool) = Load[a] : &:r1999_1, m1998_6 -# 1999| v1999_3(void) = ConditionalBranch : r1999_2 +# 2045| void TernaryTestInt(bool, int, int, int) +# 2045| Block 0 +# 2045| v2045_1(void) = EnterFunction : +# 2045| m2045_2(unknown) = AliasedDefinition : +# 2045| m2045_3(unknown) = InitializeNonLocal : +# 2045| m2045_4(unknown) = Chi : total:m2045_2, partial:m2045_3 +# 2045| r2045_5(glval) = VariableAddress[a] : +# 2045| m2045_6(bool) = InitializeParameter[a] : &:r2045_5 +# 2045| r2045_7(glval) = VariableAddress[x] : +# 2045| m2045_8(int) = InitializeParameter[x] : &:r2045_7 +# 2045| r2045_9(glval) = VariableAddress[y] : +# 2045| m2045_10(int) = InitializeParameter[y] : &:r2045_9 +# 2045| r2045_11(glval) = VariableAddress[z] : +# 2045| m2045_12(int) = InitializeParameter[z] : &:r2045_11 +# 2046| r2046_1(glval) = VariableAddress[a] : +# 2046| r2046_2(bool) = Load[a] : &:r2046_1, m2045_6 +# 2046| v2046_3(void) = ConditionalBranch : r2046_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 1999| Block 1 -# 1999| m1999_4(int) = Phi : from 2:m1999_12, from 3:m1999_16 -# 1999| r1999_5(glval) = VariableAddress[#temp1999:9] : -# 1999| r1999_6(int) = Load[#temp1999:9] : &:r1999_5, m1999_4 -# 1999| r1999_7(glval) = VariableAddress[z] : -# 1999| m1999_8(int) = Store[z] : &:r1999_7, r1999_6 -# 2000| r2000_1(glval) = VariableAddress[a] : -# 2000| r2000_2(bool) = Load[a] : &:r2000_1, m1998_6 -# 2000| v2000_3(void) = ConditionalBranch : r2000_2 +# 2046| Block 1 +# 2046| m2046_4(int) = Phi : from 2:m2046_12, from 3:m2046_16 +# 2046| r2046_5(glval) = VariableAddress[#temp2046:9] : +# 2046| r2046_6(int) = Load[#temp2046:9] : &:r2046_5, m2046_4 +# 2046| r2046_7(glval) = VariableAddress[z] : +# 2046| m2046_8(int) = Store[z] : &:r2046_7, r2046_6 +# 2047| r2047_1(glval) = VariableAddress[a] : +# 2047| r2047_2(bool) = Load[a] : &:r2047_1, m2045_6 +# 2047| v2047_3(void) = ConditionalBranch : r2047_2 #-----| False -> Block 6 #-----| True -> Block 5 -# 1999| Block 2 -# 1999| r1999_9(glval) = VariableAddress[x] : -# 1999| r1999_10(int) = Load[x] : &:r1999_9, m1998_8 -# 1999| r1999_11(glval) = VariableAddress[#temp1999:9] : -# 1999| m1999_12(int) = Store[#temp1999:9] : &:r1999_11, r1999_10 +# 2046| Block 2 +# 2046| r2046_9(glval) = VariableAddress[x] : +# 2046| r2046_10(int) = Load[x] : &:r2046_9, m2045_8 +# 2046| r2046_11(glval) = VariableAddress[#temp2046:9] : +# 2046| m2046_12(int) = Store[#temp2046:9] : &:r2046_11, r2046_10 #-----| Goto -> Block 1 -# 1999| Block 3 -# 1999| r1999_13(glval) = VariableAddress[y] : -# 1999| r1999_14(int) = Load[y] : &:r1999_13, m1998_10 -# 1999| r1999_15(glval) = VariableAddress[#temp1999:9] : -# 1999| m1999_16(int) = Store[#temp1999:9] : &:r1999_15, r1999_14 +# 2046| Block 3 +# 2046| r2046_13(glval) = VariableAddress[y] : +# 2046| r2046_14(int) = Load[y] : &:r2046_13, m2045_10 +# 2046| r2046_15(glval) = VariableAddress[#temp2046:9] : +# 2046| m2046_16(int) = Store[#temp2046:9] : &:r2046_15, r2046_14 #-----| Goto -> Block 1 -# 2000| Block 4 -# 2000| m2000_4(int) = Phi : from 5:m2000_12, from 6:m2000_15 -# 2000| r2000_5(glval) = VariableAddress[#temp2000:9] : -# 2000| r2000_6(int) = Load[#temp2000:9] : &:r2000_5, m2000_4 -# 2000| r2000_7(glval) = VariableAddress[z] : -# 2000| m2000_8(int) = Store[z] : &:r2000_7, r2000_6 -# 2001| r2001_1(glval) = VariableAddress[a] : -# 2001| r2001_2(bool) = Load[a] : &:r2001_1, m1998_6 -# 2001| v2001_3(void) = ConditionalBranch : r2001_2 +# 2047| Block 4 +# 2047| m2047_4(int) = Phi : from 5:m2047_12, from 6:m2047_15 +# 2047| r2047_5(glval) = VariableAddress[#temp2047:9] : +# 2047| r2047_6(int) = Load[#temp2047:9] : &:r2047_5, m2047_4 +# 2047| r2047_7(glval) = VariableAddress[z] : +# 2047| m2047_8(int) = Store[z] : &:r2047_7, r2047_6 +# 2048| r2048_1(glval) = VariableAddress[a] : +# 2048| r2048_2(bool) = Load[a] : &:r2048_1, m2045_6 +# 2048| v2048_3(void) = ConditionalBranch : r2048_2 #-----| False -> Block 9 #-----| True -> Block 8 -# 2000| Block 5 -# 2000| r2000_9(glval) = VariableAddress[x] : -# 2000| r2000_10(int) = Load[x] : &:r2000_9, m1998_8 -# 2000| r2000_11(glval) = VariableAddress[#temp2000:9] : -# 2000| m2000_12(int) = Store[#temp2000:9] : &:r2000_11, r2000_10 +# 2047| Block 5 +# 2047| r2047_9(glval) = VariableAddress[x] : +# 2047| r2047_10(int) = Load[x] : &:r2047_9, m2045_8 +# 2047| r2047_11(glval) = VariableAddress[#temp2047:9] : +# 2047| m2047_12(int) = Store[#temp2047:9] : &:r2047_11, r2047_10 #-----| Goto -> Block 4 -# 2000| Block 6 -# 2000| r2000_13(int) = Constant[5] : -# 2000| r2000_14(glval) = VariableAddress[#temp2000:9] : -# 2000| m2000_15(int) = Store[#temp2000:9] : &:r2000_14, r2000_13 +# 2047| Block 6 +# 2047| r2047_13(int) = Constant[5] : +# 2047| r2047_14(glval) = VariableAddress[#temp2047:9] : +# 2047| m2047_15(int) = Store[#temp2047:9] : &:r2047_14, r2047_13 #-----| Goto -> Block 4 -# 2001| Block 7 -# 2001| m2001_4(int) = Phi : from 8:m2001_11, from 9:m2001_14 -# 2001| r2001_5(glval) = VariableAddress[#temp2001:9] : -# 2001| r2001_6(int) = Load[#temp2001:9] : &:r2001_5, m2001_4 -# 2001| r2001_7(glval) = VariableAddress[z] : -# 2001| m2001_8(int) = Store[z] : &:r2001_7, r2001_6 -# 2002| r2002_1(int) = Constant[7] : -# 2002| r2002_2(glval) = VariableAddress[a] : -# 2002| r2002_3(bool) = Load[a] : &:r2002_2, m1998_6 -# 2002| v2002_4(void) = ConditionalBranch : r2002_3 +# 2048| Block 7 +# 2048| m2048_4(int) = Phi : from 8:m2048_11, from 9:m2048_14 +# 2048| r2048_5(glval) = VariableAddress[#temp2048:9] : +# 2048| r2048_6(int) = Load[#temp2048:9] : &:r2048_5, m2048_4 +# 2048| r2048_7(glval) = VariableAddress[z] : +# 2048| m2048_8(int) = Store[z] : &:r2048_7, r2048_6 +# 2049| r2049_1(int) = Constant[7] : +# 2049| r2049_2(glval) = VariableAddress[a] : +# 2049| r2049_3(bool) = Load[a] : &:r2049_2, m2045_6 +# 2049| v2049_4(void) = ConditionalBranch : r2049_3 #-----| False -> Block 12 #-----| True -> Block 11 -# 2001| Block 8 -# 2001| r2001_9(int) = Constant[3] : -# 2001| r2001_10(glval) = VariableAddress[#temp2001:9] : -# 2001| m2001_11(int) = Store[#temp2001:9] : &:r2001_10, r2001_9 +# 2048| Block 8 +# 2048| r2048_9(int) = Constant[3] : +# 2048| r2048_10(glval) = VariableAddress[#temp2048:9] : +# 2048| m2048_11(int) = Store[#temp2048:9] : &:r2048_10, r2048_9 #-----| Goto -> Block 7 -# 2001| Block 9 -# 2001| r2001_12(int) = Constant[5] : -# 2001| r2001_13(glval) = VariableAddress[#temp2001:9] : -# 2001| m2001_14(int) = Store[#temp2001:9] : &:r2001_13, r2001_12 +# 2048| Block 9 +# 2048| r2048_12(int) = Constant[5] : +# 2048| r2048_13(glval) = VariableAddress[#temp2048:9] : +# 2048| m2048_14(int) = Store[#temp2048:9] : &:r2048_13, r2048_12 #-----| Goto -> Block 7 -# 2002| Block 10 -# 2002| m2002_5(glval) = Phi : from 11:m2002_12, from 12:m2002_15 -# 2002| r2002_6(glval) = VariableAddress[#temp2002:6] : -# 2002| r2002_7(glval) = Load[#temp2002:6] : &:r2002_6, m2002_5 -# 2002| m2002_8(int) = Store[?] : &:r2002_7, r2002_1 -# 2002| m2002_9(unknown) = Chi : total:m1998_4, partial:m2002_8 -# 2003| v2003_1(void) = NoOp : -# 1998| v1998_13(void) = ReturnVoid : -# 1998| v1998_14(void) = AliasedUse : ~m2002_9 -# 1998| v1998_15(void) = ExitFunction : +# 2049| Block 10 +# 2049| m2049_5(glval) = Phi : from 11:m2049_12, from 12:m2049_15 +# 2049| r2049_6(glval) = VariableAddress[#temp2049:6] : +# 2049| r2049_7(glval) = Load[#temp2049:6] : &:r2049_6, m2049_5 +# 2049| m2049_8(int) = Store[?] : &:r2049_7, r2049_1 +# 2049| m2049_9(unknown) = Chi : total:m2045_4, partial:m2049_8 +# 2050| v2050_1(void) = NoOp : +# 2045| v2045_13(void) = ReturnVoid : +# 2045| v2045_14(void) = AliasedUse : ~m2049_9 +# 2045| v2045_15(void) = ExitFunction : -# 2002| Block 11 -# 2002| r2002_10(glval) = VariableAddress[x] : -# 2002| r2002_11(glval) = VariableAddress[#temp2002:6] : -# 2002| m2002_12(glval) = Store[#temp2002:6] : &:r2002_11, r2002_10 +# 2049| Block 11 +# 2049| r2049_10(glval) = VariableAddress[x] : +# 2049| r2049_11(glval) = VariableAddress[#temp2049:6] : +# 2049| m2049_12(glval) = Store[#temp2049:6] : &:r2049_11, r2049_10 #-----| Goto -> Block 10 -# 2002| Block 12 -# 2002| r2002_13(glval) = VariableAddress[y] : -# 2002| r2002_14(glval) = VariableAddress[#temp2002:6] : -# 2002| m2002_15(glval) = Store[#temp2002:6] : &:r2002_14, r2002_13 +# 2049| Block 12 +# 2049| r2049_13(glval) = VariableAddress[y] : +# 2049| r2049_14(glval) = VariableAddress[#temp2049:6] : +# 2049| m2049_15(glval) = Store[#temp2049:6] : &:r2049_14, r2049_13 #-----| Goto -> Block 10 -# 2008| void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) -# 2008| Block 0 -# 2008| v2008_1(void) = EnterFunction : -# 2008| m2008_2(unknown) = AliasedDefinition : -# 2008| m2008_3(unknown) = InitializeNonLocal : -# 2008| m2008_4(unknown) = Chi : total:m2008_2, partial:m2008_3 -# 2008| r2008_5(glval) = VariableAddress[a] : -# 2008| m2008_6(bool) = InitializeParameter[a] : &:r2008_5 -# 2008| r2008_7(glval) = VariableAddress[x] : -# 2008| m2008_8(TernaryPodObj) = InitializeParameter[x] : &:r2008_7 -# 2008| r2008_9(glval) = VariableAddress[y] : -# 2008| m2008_10(TernaryPodObj) = InitializeParameter[y] : &:r2008_9 -# 2008| r2008_11(glval) = VariableAddress[z] : -# 2008| m2008_12(TernaryPodObj) = InitializeParameter[z] : &:r2008_11 -# 2009| r2009_1(glval) = VariableAddress[a] : -# 2009| r2009_2(bool) = Load[a] : &:r2009_1, m2008_6 -# 2009| v2009_3(void) = ConditionalBranch : r2009_2 +# 2055| void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) +# 2055| Block 0 +# 2055| v2055_1(void) = EnterFunction : +# 2055| m2055_2(unknown) = AliasedDefinition : +# 2055| m2055_3(unknown) = InitializeNonLocal : +# 2055| m2055_4(unknown) = Chi : total:m2055_2, partial:m2055_3 +# 2055| r2055_5(glval) = VariableAddress[a] : +# 2055| m2055_6(bool) = InitializeParameter[a] : &:r2055_5 +# 2055| r2055_7(glval) = VariableAddress[x] : +# 2055| m2055_8(TernaryPodObj) = InitializeParameter[x] : &:r2055_7 +# 2055| r2055_9(glval) = VariableAddress[y] : +# 2055| m2055_10(TernaryPodObj) = InitializeParameter[y] : &:r2055_9 +# 2055| r2055_11(glval) = VariableAddress[z] : +# 2055| m2055_12(TernaryPodObj) = InitializeParameter[z] : &:r2055_11 +# 2056| r2056_1(glval) = VariableAddress[a] : +# 2056| r2056_2(bool) = Load[a] : &:r2056_1, m2055_6 +# 2056| v2056_3(void) = ConditionalBranch : r2056_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 2009| Block 1 -# 2009| m2009_4(TernaryPodObj) = Phi : from 2:m2009_12, from 3:m2009_16 -# 2009| r2009_5(glval) = VariableAddress[#temp2009:9] : -# 2009| r2009_6(TernaryPodObj) = Load[#temp2009:9] : &:r2009_5, m2009_4 -# 2009| r2009_7(glval) = VariableAddress[z] : -# 2009| m2009_8(TernaryPodObj) = Store[z] : &:r2009_7, r2009_6 -# 2010| r2010_1(glval) = VariableAddress[#temp2010:9] : -# 2010| r2010_2(glval) = VariableAddress[a] : -# 2010| r2010_3(bool) = Load[a] : &:r2010_2, m2008_6 -# 2010| v2010_4(void) = ConditionalBranch : r2010_3 +# 2056| Block 1 +# 2056| m2056_4(TernaryPodObj) = Phi : from 2:m2056_12, from 3:m2056_16 +# 2056| r2056_5(glval) = VariableAddress[#temp2056:9] : +# 2056| r2056_6(TernaryPodObj) = Load[#temp2056:9] : &:r2056_5, m2056_4 +# 2056| r2056_7(glval) = VariableAddress[z] : +# 2056| m2056_8(TernaryPodObj) = Store[z] : &:r2056_7, r2056_6 +# 2057| r2057_1(glval) = VariableAddress[#temp2057:9] : +# 2057| r2057_2(glval) = VariableAddress[a] : +# 2057| r2057_3(bool) = Load[a] : &:r2057_2, m2055_6 +# 2057| v2057_4(void) = ConditionalBranch : r2057_3 #-----| False -> Block 6 #-----| True -> Block 5 -# 2009| Block 2 -# 2009| r2009_9(glval) = VariableAddress[x] : -# 2009| r2009_10(TernaryPodObj) = Load[x] : &:r2009_9, m2008_8 -# 2009| r2009_11(glval) = VariableAddress[#temp2009:9] : -# 2009| m2009_12(TernaryPodObj) = Store[#temp2009:9] : &:r2009_11, r2009_10 +# 2056| Block 2 +# 2056| r2056_9(glval) = VariableAddress[x] : +# 2056| r2056_10(TernaryPodObj) = Load[x] : &:r2056_9, m2055_8 +# 2056| r2056_11(glval) = VariableAddress[#temp2056:9] : +# 2056| m2056_12(TernaryPodObj) = Store[#temp2056:9] : &:r2056_11, r2056_10 #-----| Goto -> Block 1 -# 2009| Block 3 -# 2009| r2009_13(glval) = VariableAddress[y] : -# 2009| r2009_14(TernaryPodObj) = Load[y] : &:r2009_13, m2008_10 -# 2009| r2009_15(glval) = VariableAddress[#temp2009:9] : -# 2009| m2009_16(TernaryPodObj) = Store[#temp2009:9] : &:r2009_15, r2009_14 +# 2056| Block 3 +# 2056| r2056_13(glval) = VariableAddress[y] : +# 2056| r2056_14(TernaryPodObj) = Load[y] : &:r2056_13, m2055_10 +# 2056| r2056_15(glval) = VariableAddress[#temp2056:9] : +# 2056| m2056_16(TernaryPodObj) = Store[#temp2056:9] : &:r2056_15, r2056_14 #-----| Goto -> Block 1 -# 2010| Block 4 -# 2010| m2010_5(TernaryPodObj) = Phi : from 5:m2010_18, from 6:m2010_24 -# 2010| r2010_6(glval) = VariableAddress[#temp2010:9] : -# 2010| r2010_7(TernaryPodObj) = Load[#temp2010:9] : &:r2010_6, m2010_5 -# 2010| m2010_8(TernaryPodObj) = Store[#temp2010:9] : &:r2010_1, r2010_7 -# 2010| r2010_9(TernaryPodObj) = Load[#temp2010:9] : &:r2010_1, m2010_8 -# 2010| r2010_10(glval) = VariableAddress[z] : -# 2010| m2010_11(TernaryPodObj) = Store[z] : &:r2010_10, r2010_9 -# 2011| r2011_1(glval) = VariableAddress[#temp2011:9] : -# 2011| r2011_2(glval) = VariableAddress[a] : -# 2011| r2011_3(bool) = Load[a] : &:r2011_2, m2008_6 -# 2011| v2011_4(void) = ConditionalBranch : r2011_3 +# 2057| Block 4 +# 2057| m2057_5(TernaryPodObj) = Phi : from 5:m2057_18, from 6:m2057_24 +# 2057| r2057_6(glval) = VariableAddress[#temp2057:9] : +# 2057| r2057_7(TernaryPodObj) = Load[#temp2057:9] : &:r2057_6, m2057_5 +# 2057| m2057_8(TernaryPodObj) = Store[#temp2057:9] : &:r2057_1, r2057_7 +# 2057| r2057_9(TernaryPodObj) = Load[#temp2057:9] : &:r2057_1, m2057_8 +# 2057| r2057_10(glval) = VariableAddress[z] : +# 2057| m2057_11(TernaryPodObj) = Store[z] : &:r2057_10, r2057_9 +# 2058| r2058_1(glval) = VariableAddress[#temp2058:9] : +# 2058| r2058_2(glval) = VariableAddress[a] : +# 2058| r2058_3(bool) = Load[a] : &:r2058_2, m2055_6 +# 2058| v2058_4(void) = ConditionalBranch : r2058_3 #-----| False -> Block 9 #-----| True -> Block 8 -# 2010| Block 5 -# 2010| r2010_12(glval) = VariableAddress[#temp2010:13] : -# 2010| r2010_13(glval) = VariableAddress[x] : -# 2010| r2010_14(TernaryPodObj) = Load[x] : &:r2010_13, m2008_8 -# 2010| m2010_15(TernaryPodObj) = Store[#temp2010:13] : &:r2010_12, r2010_14 -# 2010| r2010_16(TernaryPodObj) = Load[#temp2010:13] : &:r2010_12, m2010_15 -# 2010| r2010_17(glval) = VariableAddress[#temp2010:9] : -# 2010| m2010_18(TernaryPodObj) = Store[#temp2010:9] : &:r2010_17, r2010_16 +# 2057| Block 5 +# 2057| r2057_12(glval) = VariableAddress[#temp2057:13] : +# 2057| r2057_13(glval) = VariableAddress[x] : +# 2057| r2057_14(TernaryPodObj) = Load[x] : &:r2057_13, m2055_8 +# 2057| m2057_15(TernaryPodObj) = Store[#temp2057:13] : &:r2057_12, r2057_14 +# 2057| r2057_16(TernaryPodObj) = Load[#temp2057:13] : &:r2057_12, m2057_15 +# 2057| r2057_17(glval) = VariableAddress[#temp2057:9] : +# 2057| m2057_18(TernaryPodObj) = Store[#temp2057:9] : &:r2057_17, r2057_16 #-----| Goto -> Block 4 -# 2010| Block 6 -# 2010| r2010_19(glval) = VariableAddress[#temp2010:17] : -# 2010| r2010_20(TernaryPodObj) = Constant[0] : -# 2010| m2010_21(TernaryPodObj) = Store[#temp2010:17] : &:r2010_19, r2010_20 -# 2010| r2010_22(TernaryPodObj) = Load[#temp2010:17] : &:r2010_19, m2010_21 -# 2010| r2010_23(glval) = VariableAddress[#temp2010:9] : -# 2010| m2010_24(TernaryPodObj) = Store[#temp2010:9] : &:r2010_23, r2010_22 +# 2057| Block 6 +# 2057| r2057_19(glval) = VariableAddress[#temp2057:17] : +# 2057| r2057_20(TernaryPodObj) = Constant[0] : +# 2057| m2057_21(TernaryPodObj) = Store[#temp2057:17] : &:r2057_19, r2057_20 +# 2057| r2057_22(TernaryPodObj) = Load[#temp2057:17] : &:r2057_19, m2057_21 +# 2057| r2057_23(glval) = VariableAddress[#temp2057:9] : +# 2057| m2057_24(TernaryPodObj) = Store[#temp2057:9] : &:r2057_23, r2057_22 #-----| Goto -> Block 4 -# 2011| Block 7 -# 2011| m2011_5(TernaryPodObj) = Phi : from 8:m2011_17, from 9:m2011_23 -# 2011| r2011_6(glval) = VariableAddress[#temp2011:9] : -# 2011| r2011_7(TernaryPodObj) = Load[#temp2011:9] : &:r2011_6, m2011_5 -# 2011| m2011_8(TernaryPodObj) = Store[#temp2011:9] : &:r2011_1, r2011_7 -# 2011| r2011_9(TernaryPodObj) = Load[#temp2011:9] : &:r2011_1, m2011_8 -# 2011| r2011_10(glval) = VariableAddress[z] : -# 2011| m2011_11(TernaryPodObj) = Store[z] : &:r2011_10, r2011_9 -# 2012| r2012_1(glval) = VariableAddress[#temp2012:23] : -# 2012| r2012_2(TernaryPodObj) = Constant[0] : -# 2012| m2012_3(TernaryPodObj) = Store[#temp2012:23] : &:r2012_1, r2012_2 -# 2012| r2012_4(TernaryPodObj) = Load[#temp2012:23] : &:r2012_1, m2012_3 -# 2012| r2012_5(glval) = VariableAddress[a] : -# 2012| r2012_6(bool) = Load[a] : &:r2012_5, m2008_6 -# 2012| v2012_7(void) = ConditionalBranch : r2012_6 +# 2058| Block 7 +# 2058| m2058_5(TernaryPodObj) = Phi : from 8:m2058_17, from 9:m2058_23 +# 2058| r2058_6(glval) = VariableAddress[#temp2058:9] : +# 2058| r2058_7(TernaryPodObj) = Load[#temp2058:9] : &:r2058_6, m2058_5 +# 2058| m2058_8(TernaryPodObj) = Store[#temp2058:9] : &:r2058_1, r2058_7 +# 2058| r2058_9(TernaryPodObj) = Load[#temp2058:9] : &:r2058_1, m2058_8 +# 2058| r2058_10(glval) = VariableAddress[z] : +# 2058| m2058_11(TernaryPodObj) = Store[z] : &:r2058_10, r2058_9 +# 2059| r2059_1(glval) = VariableAddress[#temp2059:23] : +# 2059| r2059_2(TernaryPodObj) = Constant[0] : +# 2059| m2059_3(TernaryPodObj) = Store[#temp2059:23] : &:r2059_1, r2059_2 +# 2059| r2059_4(TernaryPodObj) = Load[#temp2059:23] : &:r2059_1, m2059_3 +# 2059| r2059_5(glval) = VariableAddress[a] : +# 2059| r2059_6(bool) = Load[a] : &:r2059_5, m2055_6 +# 2059| v2059_7(void) = ConditionalBranch : r2059_6 #-----| False -> Block 12 #-----| True -> Block 11 -# 2011| Block 8 -# 2011| r2011_12(glval) = VariableAddress[#temp2011:13] : -# 2011| r2011_13(TernaryPodObj) = Constant[0] : -# 2011| m2011_14(TernaryPodObj) = Store[#temp2011:13] : &:r2011_12, r2011_13 -# 2011| r2011_15(TernaryPodObj) = Load[#temp2011:13] : &:r2011_12, m2011_14 -# 2011| r2011_16(glval) = VariableAddress[#temp2011:9] : -# 2011| m2011_17(TernaryPodObj) = Store[#temp2011:9] : &:r2011_16, r2011_15 +# 2058| Block 8 +# 2058| r2058_12(glval) = VariableAddress[#temp2058:13] : +# 2058| r2058_13(TernaryPodObj) = Constant[0] : +# 2058| m2058_14(TernaryPodObj) = Store[#temp2058:13] : &:r2058_12, r2058_13 +# 2058| r2058_15(TernaryPodObj) = Load[#temp2058:13] : &:r2058_12, m2058_14 +# 2058| r2058_16(glval) = VariableAddress[#temp2058:9] : +# 2058| m2058_17(TernaryPodObj) = Store[#temp2058:9] : &:r2058_16, r2058_15 #-----| Goto -> Block 7 -# 2011| Block 9 -# 2011| r2011_18(glval) = VariableAddress[#temp2011:31] : -# 2011| r2011_19(TernaryPodObj) = Constant[0] : -# 2011| m2011_20(TernaryPodObj) = Store[#temp2011:31] : &:r2011_18, r2011_19 -# 2011| r2011_21(TernaryPodObj) = Load[#temp2011:31] : &:r2011_18, m2011_20 -# 2011| r2011_22(glval) = VariableAddress[#temp2011:9] : -# 2011| m2011_23(TernaryPodObj) = Store[#temp2011:9] : &:r2011_22, r2011_21 +# 2058| Block 9 +# 2058| r2058_18(glval) = VariableAddress[#temp2058:31] : +# 2058| r2058_19(TernaryPodObj) = Constant[0] : +# 2058| m2058_20(TernaryPodObj) = Store[#temp2058:31] : &:r2058_18, r2058_19 +# 2058| r2058_21(TernaryPodObj) = Load[#temp2058:31] : &:r2058_18, m2058_20 +# 2058| r2058_22(glval) = VariableAddress[#temp2058:9] : +# 2058| m2058_23(TernaryPodObj) = Store[#temp2058:9] : &:r2058_22, r2058_21 #-----| Goto -> Block 7 -# 2012| Block 10 -# 2012| m2012_8(TernaryPodObj) = Phi : from 11:m2012_18, from 12:m2012_22 -# 2012| r2012_9(glval) = VariableAddress[#temp2012:10] : -# 2012| r2012_10(TernaryPodObj) = Load[#temp2012:10] : &:r2012_9, m2012_8 -# 2012| r2012_11(glval) = VariableAddress[z] : -# 2012| m2012_12(TernaryPodObj) = Store[z] : &:r2012_11, r2012_10 -# 2012| r2012_13(glval) = CopyValue : r2012_11 -# 2012| m2012_14(TernaryPodObj) = Store[?] : &:r2012_13, r2012_4 -# 2013| v2013_1(void) = NoOp : -# 2008| v2008_13(void) = ReturnVoid : -# 2008| v2008_14(void) = AliasedUse : m2008_3 -# 2008| v2008_15(void) = ExitFunction : +# 2059| Block 10 +# 2059| m2059_8(TernaryPodObj) = Phi : from 11:m2059_18, from 12:m2059_22 +# 2059| r2059_9(glval) = VariableAddress[#temp2059:10] : +# 2059| r2059_10(TernaryPodObj) = Load[#temp2059:10] : &:r2059_9, m2059_8 +# 2059| r2059_11(glval) = VariableAddress[z] : +# 2059| m2059_12(TernaryPodObj) = Store[z] : &:r2059_11, r2059_10 +# 2059| r2059_13(glval) = CopyValue : r2059_11 +# 2059| m2059_14(TernaryPodObj) = Store[?] : &:r2059_13, r2059_4 +# 2060| v2060_1(void) = NoOp : +# 2055| v2055_13(void) = ReturnVoid : +# 2055| v2055_14(void) = AliasedUse : m2055_3 +# 2055| v2055_15(void) = ExitFunction : -# 2012| Block 11 -# 2012| r2012_15(glval) = VariableAddress[x] : -# 2012| r2012_16(TernaryPodObj) = Load[x] : &:r2012_15, m2008_8 -# 2012| r2012_17(glval) = VariableAddress[#temp2012:10] : -# 2012| m2012_18(TernaryPodObj) = Store[#temp2012:10] : &:r2012_17, r2012_16 +# 2059| Block 11 +# 2059| r2059_15(glval) = VariableAddress[x] : +# 2059| r2059_16(TernaryPodObj) = Load[x] : &:r2059_15, m2055_8 +# 2059| r2059_17(glval) = VariableAddress[#temp2059:10] : +# 2059| m2059_18(TernaryPodObj) = Store[#temp2059:10] : &:r2059_17, r2059_16 #-----| Goto -> Block 10 -# 2012| Block 12 -# 2012| r2012_19(glval) = VariableAddress[y] : -# 2012| r2012_20(TernaryPodObj) = Load[y] : &:r2012_19, m2008_10 -# 2012| r2012_21(glval) = VariableAddress[#temp2012:10] : -# 2012| m2012_22(TernaryPodObj) = Store[#temp2012:10] : &:r2012_21, r2012_20 +# 2059| Block 12 +# 2059| r2059_19(glval) = VariableAddress[y] : +# 2059| r2059_20(TernaryPodObj) = Load[y] : &:r2059_19, m2055_10 +# 2059| r2059_21(glval) = VariableAddress[#temp2059:10] : +# 2059| m2059_22(TernaryPodObj) = Store[#temp2059:10] : &:r2059_21, r2059_20 #-----| Goto -> Block 10 -# 2015| TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) -# 2015| Block 0 -# 2015| v2015_1(void) = EnterFunction : -# 2015| m2015_2(unknown) = AliasedDefinition : -# 2015| m2015_3(unknown) = InitializeNonLocal : -# 2015| m2015_4(unknown) = Chi : total:m2015_2, partial:m2015_3 -# 2015| r2015_5(glval) = VariableAddress[#this] : -# 2015| m2015_6(glval) = InitializeParameter[#this] : &:r2015_5 -# 2015| r2015_7(glval) = Load[#this] : &:r2015_5, m2015_6 -# 2015| m2015_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2015_7 +# 2062| TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) +# 2062| Block 0 +# 2062| v2062_1(void) = EnterFunction : +# 2062| m2062_2(unknown) = AliasedDefinition : +# 2062| m2062_3(unknown) = InitializeNonLocal : +# 2062| m2062_4(unknown) = Chi : total:m2062_2, partial:m2062_3 +# 2062| r2062_5(glval) = VariableAddress[#this] : +# 2062| m2062_6(glval) = InitializeParameter[#this] : &:r2062_5 +# 2062| r2062_7(glval) = Load[#this] : &:r2062_5, m2062_6 +# 2062| m2062_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2062_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 #-----| r0_5(glval) = VariableAddress[#return] : #-----| r0_6(glval) = VariableAddress[#this] : -#-----| r0_7(TernaryNonPodObj *) = Load[#this] : &:r0_6, m2015_6 +#-----| r0_7(TernaryNonPodObj *) = Load[#this] : &:r0_6, m2062_6 #-----| r0_8(glval) = CopyValue : r0_7 #-----| r0_9(TernaryNonPodObj &) = CopyValue : r0_8 #-----| m0_10(TernaryNonPodObj &) = Store[#return] : &:r0_5, r0_9 -# 2015| v2015_9(void) = ReturnIndirection[#this] : &:r2015_7, m2015_8 +# 2062| v2062_9(void) = ReturnIndirection[#this] : &:r2062_7, m2062_8 #-----| v0_11(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 2015| r2015_10(glval) = VariableAddress[#return] : -# 2015| v2015_11(void) = ReturnValue : &:r2015_10, m0_10 -# 2015| v2015_12(void) = AliasedUse : m2015_3 -# 2015| v2015_13(void) = ExitFunction : +# 2062| r2062_10(glval) = VariableAddress[#return] : +# 2062| v2062_11(void) = ReturnValue : &:r2062_10, m0_10 +# 2062| v2062_12(void) = AliasedUse : m2062_3 +# 2062| v2062_13(void) = ExitFunction : -# 2015| void TernaryNonPodObj::TernaryNonPodObj() -# 2015| Block 0 -# 2015| v2015_1(void) = EnterFunction : -# 2015| m2015_2(unknown) = AliasedDefinition : -# 2015| m2015_3(unknown) = InitializeNonLocal : -# 2015| m2015_4(unknown) = Chi : total:m2015_2, partial:m2015_3 -# 2015| r2015_5(glval) = VariableAddress[#this] : -# 2015| m2015_6(glval) = InitializeParameter[#this] : &:r2015_5 -# 2015| r2015_7(glval) = Load[#this] : &:r2015_5, m2015_6 -# 2015| m2015_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2015_7 -# 2015| v2015_9(void) = NoOp : -# 2015| v2015_10(void) = ReturnIndirection[#this] : &:r2015_7, m2015_8 -# 2015| v2015_11(void) = ReturnVoid : -# 2015| v2015_12(void) = AliasedUse : m2015_3 -# 2015| v2015_13(void) = ExitFunction : +# 2062| void TernaryNonPodObj::TernaryNonPodObj() +# 2062| Block 0 +# 2062| v2062_1(void) = EnterFunction : +# 2062| m2062_2(unknown) = AliasedDefinition : +# 2062| m2062_3(unknown) = InitializeNonLocal : +# 2062| m2062_4(unknown) = Chi : total:m2062_2, partial:m2062_3 +# 2062| r2062_5(glval) = VariableAddress[#this] : +# 2062| m2062_6(glval) = InitializeParameter[#this] : &:r2062_5 +# 2062| r2062_7(glval) = Load[#this] : &:r2062_5, m2062_6 +# 2062| m2062_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2062_7 +# 2062| v2062_9(void) = NoOp : +# 2062| v2062_10(void) = ReturnIndirection[#this] : &:r2062_7, m2062_8 +# 2062| v2062_11(void) = ReturnVoid : +# 2062| v2062_12(void) = AliasedUse : m2062_3 +# 2062| v2062_13(void) = ExitFunction : -# 2015| void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) -# 2015| Block 0 -# 2015| v2015_1(void) = EnterFunction : -# 2015| m2015_2(unknown) = AliasedDefinition : -# 2015| m2015_3(unknown) = InitializeNonLocal : -# 2015| m2015_4(unknown) = Chi : total:m2015_2, partial:m2015_3 -# 2015| r2015_5(glval) = VariableAddress[#this] : -# 2015| m2015_6(glval) = InitializeParameter[#this] : &:r2015_5 -# 2015| r2015_7(glval) = Load[#this] : &:r2015_5, m2015_6 -# 2015| m2015_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2015_7 +# 2062| void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) +# 2062| Block 0 +# 2062| v2062_1(void) = EnterFunction : +# 2062| m2062_2(unknown) = AliasedDefinition : +# 2062| m2062_3(unknown) = InitializeNonLocal : +# 2062| m2062_4(unknown) = Chi : total:m2062_2, partial:m2062_3 +# 2062| r2062_5(glval) = VariableAddress[#this] : +# 2062| m2062_6(glval) = InitializeParameter[#this] : &:r2062_5 +# 2062| r2062_7(glval) = Load[#this] : &:r2062_5, m2062_6 +# 2062| m2062_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2062_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 2015| v2015_9(void) = NoOp : -# 2015| v2015_10(void) = ReturnIndirection[#this] : &:r2015_7, m2015_8 +# 2062| v2062_9(void) = NoOp : +# 2062| v2062_10(void) = ReturnIndirection[#this] : &:r2062_7, m2062_8 #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 2015| v2015_11(void) = ReturnVoid : -# 2015| v2015_12(void) = AliasedUse : m2015_3 -# 2015| v2015_13(void) = ExitFunction : +# 2062| v2062_11(void) = ReturnVoid : +# 2062| v2062_12(void) = AliasedUse : m2062_3 +# 2062| v2062_13(void) = ExitFunction : -# 2016| void TernaryNonPodObj::~TernaryNonPodObj() -# 2016| Block 0 -# 2016| v2016_1(void) = EnterFunction : -# 2016| m2016_2(unknown) = AliasedDefinition : -# 2016| m2016_3(unknown) = InitializeNonLocal : -# 2016| m2016_4(unknown) = Chi : total:m2016_2, partial:m2016_3 -# 2016| r2016_5(glval) = VariableAddress[#this] : -# 2016| m2016_6(glval) = InitializeParameter[#this] : &:r2016_5 -# 2016| r2016_7(glval) = Load[#this] : &:r2016_5, m2016_6 -# 2016| m2016_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2016_7 -# 2016| v2016_9(void) = NoOp : -# 2016| v2016_10(void) = ReturnIndirection[#this] : &:r2016_7, m2016_8 -# 2016| v2016_11(void) = ReturnVoid : -# 2016| v2016_12(void) = AliasedUse : m2016_3 -# 2016| v2016_13(void) = ExitFunction : +# 2063| void TernaryNonPodObj::~TernaryNonPodObj() +# 2063| Block 0 +# 2063| v2063_1(void) = EnterFunction : +# 2063| m2063_2(unknown) = AliasedDefinition : +# 2063| m2063_3(unknown) = InitializeNonLocal : +# 2063| m2063_4(unknown) = Chi : total:m2063_2, partial:m2063_3 +# 2063| r2063_5(glval) = VariableAddress[#this] : +# 2063| m2063_6(glval) = InitializeParameter[#this] : &:r2063_5 +# 2063| r2063_7(glval) = Load[#this] : &:r2063_5, m2063_6 +# 2063| m2063_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2063_7 +# 2063| v2063_9(void) = NoOp : +# 2063| v2063_10(void) = ReturnIndirection[#this] : &:r2063_7, m2063_8 +# 2063| v2063_11(void) = ReturnVoid : +# 2063| v2063_12(void) = AliasedUse : m2063_3 +# 2063| v2063_13(void) = ExitFunction : -# 2019| void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) -# 2019| Block 0 -# 2019| v2019_1(void) = EnterFunction : -# 2019| m2019_2(unknown) = AliasedDefinition : -# 2019| m2019_3(unknown) = InitializeNonLocal : -# 2019| m2019_4(unknown) = Chi : total:m2019_2, partial:m2019_3 -# 2019| r2019_5(glval) = VariableAddress[a] : -# 2019| m2019_6(bool) = InitializeParameter[a] : &:r2019_5 -# 2019| r2019_7(glval) = VariableAddress[x] : -# 2019| m2019_8(TernaryNonPodObj) = InitializeParameter[x] : &:r2019_7 -# 2019| r2019_9(glval) = VariableAddress[y] : -# 2019| m2019_10(TernaryNonPodObj) = InitializeParameter[y] : &:r2019_9 -# 2019| r2019_11(glval) = VariableAddress[z] : -# 2019| m2019_12(TernaryNonPodObj) = InitializeParameter[z] : &:r2019_11 -# 2020| r2020_1(glval) = VariableAddress[z] : -# 2020| r2020_2(glval) = FunctionAddress[operator=] : -# 2020| r2020_3(glval) = VariableAddress[a] : -# 2020| r2020_4(bool) = Load[a] : &:r2020_3, m2019_6 -# 2020| v2020_5(void) = ConditionalBranch : r2020_4 +# 2066| void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) +# 2066| Block 0 +# 2066| v2066_1(void) = EnterFunction : +# 2066| m2066_2(unknown) = AliasedDefinition : +# 2066| m2066_3(unknown) = InitializeNonLocal : +# 2066| m2066_4(unknown) = Chi : total:m2066_2, partial:m2066_3 +# 2066| r2066_5(glval) = VariableAddress[a] : +# 2066| m2066_6(bool) = InitializeParameter[a] : &:r2066_5 +# 2066| r2066_7(glval) = VariableAddress[x] : +# 2066| m2066_8(TernaryNonPodObj) = InitializeParameter[x] : &:r2066_7 +# 2066| r2066_9(glval) = VariableAddress[y] : +# 2066| m2066_10(TernaryNonPodObj) = InitializeParameter[y] : &:r2066_9 +# 2066| r2066_11(glval) = VariableAddress[z] : +# 2066| m2066_12(TernaryNonPodObj) = InitializeParameter[z] : &:r2066_11 +# 2067| r2067_1(glval) = VariableAddress[z] : +# 2067| r2067_2(glval) = FunctionAddress[operator=] : +# 2067| r2067_3(glval) = VariableAddress[a] : +# 2067| r2067_4(bool) = Load[a] : &:r2067_3, m2066_6 +# 2067| v2067_5(void) = ConditionalBranch : r2067_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 2020| Block 1 -# 2020| m2020_6(glval) = Phi : from 2:m2020_21, from 3:m2020_24 -# 2020| r2020_7(glval) = VariableAddress[#temp2020:9] : -# 2020| r2020_8(glval) = Load[#temp2020:9] : &:r2020_7, m2020_6 -# 2020| r2020_9(glval) = Convert : r2020_8 -# 2020| r2020_10(TernaryNonPodObj &) = CopyValue : r2020_9 -# 2020| r2020_11(TernaryNonPodObj &) = Call[operator=] : func:r2020_2, this:r2020_1, 0:r2020_10 -# 2020| m2020_12(unknown) = ^CallSideEffect : ~m2019_4 -# 2020| m2020_13(unknown) = Chi : total:m2019_4, partial:m2020_12 -# 2020| v2020_14(void) = ^IndirectReadSideEffect[-1] : &:r2020_1, m2019_12 -# 2020| v2020_15(void) = ^BufferReadSideEffect[0] : &:r2020_10, ~m2020_13 -# 2020| m2020_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2020_1 -# 2020| m2020_17(TernaryNonPodObj) = Chi : total:m2019_12, partial:m2020_16 -# 2020| r2020_18(glval) = CopyValue : r2020_11 -# 2021| r2021_1(glval) = VariableAddress[z] : -# 2021| r2021_2(glval) = FunctionAddress[operator=] : -# 2021| r2021_3(glval) = VariableAddress[#temp2021:9] : -# 2021| r2021_4(glval) = VariableAddress[a] : -# 2021| r2021_5(bool) = Load[a] : &:r2021_4, m2019_6 -# 2021| v2021_6(void) = ConditionalBranch : r2021_5 +# 2067| Block 1 +# 2067| m2067_6(glval) = Phi : from 2:m2067_21, from 3:m2067_24 +# 2067| r2067_7(glval) = VariableAddress[#temp2067:9] : +# 2067| r2067_8(glval) = Load[#temp2067:9] : &:r2067_7, m2067_6 +# 2067| r2067_9(glval) = Convert : r2067_8 +# 2067| r2067_10(TernaryNonPodObj &) = CopyValue : r2067_9 +# 2067| r2067_11(TernaryNonPodObj &) = Call[operator=] : func:r2067_2, this:r2067_1, 0:r2067_10 +# 2067| m2067_12(unknown) = ^CallSideEffect : ~m2066_4 +# 2067| m2067_13(unknown) = Chi : total:m2066_4, partial:m2067_12 +# 2067| v2067_14(void) = ^IndirectReadSideEffect[-1] : &:r2067_1, m2066_12 +# 2067| v2067_15(void) = ^BufferReadSideEffect[0] : &:r2067_10, ~m2067_13 +# 2067| m2067_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2067_1 +# 2067| m2067_17(TernaryNonPodObj) = Chi : total:m2066_12, partial:m2067_16 +# 2067| r2067_18(glval) = CopyValue : r2067_11 +# 2068| r2068_1(glval) = VariableAddress[z] : +# 2068| r2068_2(glval) = FunctionAddress[operator=] : +# 2068| r2068_3(glval) = VariableAddress[#temp2068:9] : +# 2068| r2068_4(glval) = VariableAddress[a] : +# 2068| r2068_5(bool) = Load[a] : &:r2068_4, m2066_6 +# 2068| v2068_6(void) = ConditionalBranch : r2068_5 #-----| False -> Block 6 #-----| True -> Block 5 -# 2020| Block 2 -# 2020| r2020_19(glval) = VariableAddress[x] : -# 2020| r2020_20(glval) = VariableAddress[#temp2020:9] : -# 2020| m2020_21(glval) = Store[#temp2020:9] : &:r2020_20, r2020_19 +# 2067| Block 2 +# 2067| r2067_19(glval) = VariableAddress[x] : +# 2067| r2067_20(glval) = VariableAddress[#temp2067:9] : +# 2067| m2067_21(glval) = Store[#temp2067:9] : &:r2067_20, r2067_19 #-----| Goto -> Block 1 -# 2020| Block 3 -# 2020| r2020_22(glval) = VariableAddress[y] : -# 2020| r2020_23(glval) = VariableAddress[#temp2020:9] : -# 2020| m2020_24(glval) = Store[#temp2020:9] : &:r2020_23, r2020_22 +# 2067| Block 3 +# 2067| r2067_22(glval) = VariableAddress[y] : +# 2067| r2067_23(glval) = VariableAddress[#temp2067:9] : +# 2067| m2067_24(glval) = Store[#temp2067:9] : &:r2067_23, r2067_22 #-----| Goto -> Block 1 -# 2021| Block 4 -# 2021| m2021_7(unknown) = Phi : from 5:~m2021_30, from 6:~m2021_42 -# 2021| m2021_8(TernaryNonPodObj) = Phi : from 5:m2021_36, from 6:m2021_47 -# 2021| r2021_9(glval) = VariableAddress[#temp2021:9] : -# 2021| r2021_10(TernaryNonPodObj) = Load[#temp2021:9] : &:r2021_9, m2021_8 -# 2021| m2021_11(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_3, r2021_10 -# 2021| r2021_12(glval) = Convert : r2021_3 -# 2021| r2021_13(TernaryNonPodObj &) = CopyValue : r2021_12 -# 2021| r2021_14(TernaryNonPodObj &) = Call[operator=] : func:r2021_2, this:r2021_1, 0:r2021_13 -# 2021| m2021_15(unknown) = ^CallSideEffect : ~m2021_7 -# 2021| m2021_16(unknown) = Chi : total:m2021_7, partial:m2021_15 -# 2021| v2021_17(void) = ^IndirectReadSideEffect[-1] : &:r2021_1, m2020_17 -# 2021| v2021_18(void) = ^BufferReadSideEffect[0] : &:r2021_13, ~m2021_11 -# 2021| m2021_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_1 -# 2021| m2021_20(TernaryNonPodObj) = Chi : total:m2020_17, partial:m2021_19 -# 2021| r2021_21(glval) = CopyValue : r2021_14 -# 2022| r2022_1(glval) = VariableAddress[z] : -# 2022| r2022_2(glval) = FunctionAddress[operator=] : -# 2022| r2022_3(glval) = VariableAddress[#temp2022:9] : -# 2022| r2022_4(glval) = VariableAddress[a] : -# 2022| r2022_5(bool) = Load[a] : &:r2022_4, m2019_6 -# 2022| v2022_6(void) = ConditionalBranch : r2022_5 +# 2068| Block 4 +# 2068| m2068_7(unknown) = Phi : from 5:~m2068_30, from 6:~m2068_42 +# 2068| m2068_8(TernaryNonPodObj) = Phi : from 5:m2068_36, from 6:m2068_47 +# 2068| r2068_9(glval) = VariableAddress[#temp2068:9] : +# 2068| r2068_10(TernaryNonPodObj) = Load[#temp2068:9] : &:r2068_9, m2068_8 +# 2068| m2068_11(TernaryNonPodObj) = Store[#temp2068:9] : &:r2068_3, r2068_10 +# 2068| r2068_12(glval) = Convert : r2068_3 +# 2068| r2068_13(TernaryNonPodObj &) = CopyValue : r2068_12 +# 2068| r2068_14(TernaryNonPodObj &) = Call[operator=] : func:r2068_2, this:r2068_1, 0:r2068_13 +# 2068| m2068_15(unknown) = ^CallSideEffect : ~m2068_7 +# 2068| m2068_16(unknown) = Chi : total:m2068_7, partial:m2068_15 +# 2068| v2068_17(void) = ^IndirectReadSideEffect[-1] : &:r2068_1, m2067_17 +# 2068| v2068_18(void) = ^BufferReadSideEffect[0] : &:r2068_13, ~m2068_11 +# 2068| m2068_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2068_1 +# 2068| m2068_20(TernaryNonPodObj) = Chi : total:m2067_17, partial:m2068_19 +# 2068| r2068_21(glval) = CopyValue : r2068_14 +# 2069| r2069_1(glval) = VariableAddress[z] : +# 2069| r2069_2(glval) = FunctionAddress[operator=] : +# 2069| r2069_3(glval) = VariableAddress[#temp2069:9] : +# 2069| r2069_4(glval) = VariableAddress[a] : +# 2069| r2069_5(bool) = Load[a] : &:r2069_4, m2066_6 +# 2069| v2069_6(void) = ConditionalBranch : r2069_5 #-----| False -> Block 9 #-----| True -> Block 8 -# 2021| Block 5 -# 2021| r2021_22(glval) = VariableAddress[#temp2021:13] : -# 2021| m2021_23(TernaryNonPodObj) = Uninitialized[#temp2021:13] : &:r2021_22 -# 2021| r2021_24(glval) = FunctionAddress[TernaryNonPodObj] : -# 2021| r2021_25(glval) = VariableAddress[x] : -# 2021| r2021_26(glval) = Convert : r2021_25 -# 2021| r2021_27(TernaryNonPodObj &) = CopyValue : r2021_26 -# 2021| v2021_28(void) = Call[TernaryNonPodObj] : func:r2021_24, this:r2021_22, 0:r2021_27 -# 2021| m2021_29(unknown) = ^CallSideEffect : ~m2020_13 -# 2021| m2021_30(unknown) = Chi : total:m2020_13, partial:m2021_29 -# 2021| v2021_31(void) = ^BufferReadSideEffect[0] : &:r2021_27, ~m2019_8 -# 2021| m2021_32(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_22 -# 2021| m2021_33(TernaryNonPodObj) = Chi : total:m2021_23, partial:m2021_32 -# 2021| r2021_34(TernaryNonPodObj) = Load[#temp2021:13] : &:r2021_22, m2021_33 -# 2021| r2021_35(glval) = VariableAddress[#temp2021:9] : -# 2021| m2021_36(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_35, r2021_34 +# 2068| Block 5 +# 2068| r2068_22(glval) = VariableAddress[#temp2068:13] : +# 2068| m2068_23(TernaryNonPodObj) = Uninitialized[#temp2068:13] : &:r2068_22 +# 2068| r2068_24(glval) = FunctionAddress[TernaryNonPodObj] : +# 2068| r2068_25(glval) = VariableAddress[x] : +# 2068| r2068_26(glval) = Convert : r2068_25 +# 2068| r2068_27(TernaryNonPodObj &) = CopyValue : r2068_26 +# 2068| v2068_28(void) = Call[TernaryNonPodObj] : func:r2068_24, this:r2068_22, 0:r2068_27 +# 2068| m2068_29(unknown) = ^CallSideEffect : ~m2067_13 +# 2068| m2068_30(unknown) = Chi : total:m2067_13, partial:m2068_29 +# 2068| v2068_31(void) = ^BufferReadSideEffect[0] : &:r2068_27, ~m2066_8 +# 2068| m2068_32(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2068_22 +# 2068| m2068_33(TernaryNonPodObj) = Chi : total:m2068_23, partial:m2068_32 +# 2068| r2068_34(TernaryNonPodObj) = Load[#temp2068:13] : &:r2068_22, m2068_33 +# 2068| r2068_35(glval) = VariableAddress[#temp2068:9] : +# 2068| m2068_36(TernaryNonPodObj) = Store[#temp2068:9] : &:r2068_35, r2068_34 #-----| Goto -> Block 4 -# 2021| Block 6 -# 2021| r2021_37(glval) = VariableAddress[#temp2021:17] : -# 2021| m2021_38(TernaryNonPodObj) = Uninitialized[#temp2021:17] : &:r2021_37 -# 2021| r2021_39(glval) = FunctionAddress[TernaryNonPodObj] : -# 2021| v2021_40(void) = Call[TernaryNonPodObj] : func:r2021_39, this:r2021_37 -# 2021| m2021_41(unknown) = ^CallSideEffect : ~m2020_13 -# 2021| m2021_42(unknown) = Chi : total:m2020_13, partial:m2021_41 -# 2021| m2021_43(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_37 -# 2021| m2021_44(TernaryNonPodObj) = Chi : total:m2021_38, partial:m2021_43 -# 2021| r2021_45(TernaryNonPodObj) = Load[#temp2021:17] : &:r2021_37, m2021_44 -# 2021| r2021_46(glval) = VariableAddress[#temp2021:9] : -# 2021| m2021_47(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_46, r2021_45 +# 2068| Block 6 +# 2068| r2068_37(glval) = VariableAddress[#temp2068:17] : +# 2068| m2068_38(TernaryNonPodObj) = Uninitialized[#temp2068:17] : &:r2068_37 +# 2068| r2068_39(glval) = FunctionAddress[TernaryNonPodObj] : +# 2068| v2068_40(void) = Call[TernaryNonPodObj] : func:r2068_39, this:r2068_37 +# 2068| m2068_41(unknown) = ^CallSideEffect : ~m2067_13 +# 2068| m2068_42(unknown) = Chi : total:m2067_13, partial:m2068_41 +# 2068| m2068_43(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2068_37 +# 2068| m2068_44(TernaryNonPodObj) = Chi : total:m2068_38, partial:m2068_43 +# 2068| r2068_45(TernaryNonPodObj) = Load[#temp2068:17] : &:r2068_37, m2068_44 +# 2068| r2068_46(glval) = VariableAddress[#temp2068:9] : +# 2068| m2068_47(TernaryNonPodObj) = Store[#temp2068:9] : &:r2068_46, r2068_45 #-----| Goto -> Block 4 -# 2022| Block 7 -# 2022| m2022_7(unknown) = Phi : from 8:~m2022_27, from 9:~m2022_38 -# 2022| m2022_8(TernaryNonPodObj) = Phi : from 8:m2022_32, from 9:m2022_43 -# 2022| r2022_9(glval) = VariableAddress[#temp2022:9] : -# 2022| r2022_10(TernaryNonPodObj) = Load[#temp2022:9] : &:r2022_9, m2022_8 -# 2022| m2022_11(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_3, r2022_10 -# 2022| r2022_12(glval) = Convert : r2022_3 -# 2022| r2022_13(TernaryNonPodObj &) = CopyValue : r2022_12 -# 2022| r2022_14(TernaryNonPodObj &) = Call[operator=] : func:r2022_2, this:r2022_1, 0:r2022_13 -# 2022| m2022_15(unknown) = ^CallSideEffect : ~m2022_7 -# 2022| m2022_16(unknown) = Chi : total:m2022_7, partial:m2022_15 -# 2022| v2022_17(void) = ^IndirectReadSideEffect[-1] : &:r2022_1, m2021_20 -# 2022| v2022_18(void) = ^BufferReadSideEffect[0] : &:r2022_13, ~m2022_11 -# 2022| m2022_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_1 -# 2022| m2022_20(TernaryNonPodObj) = Chi : total:m2021_20, partial:m2022_19 -# 2022| r2022_21(glval) = CopyValue : r2022_14 -# 2023| r2023_1(glval) = VariableAddress[z] : -# 2023| r2023_2(glval) = FunctionAddress[operator=] : -# 2023| r2023_3(glval) = VariableAddress[a] : -# 2023| r2023_4(bool) = Load[a] : &:r2023_3, m2019_6 -# 2023| v2023_5(void) = ConditionalBranch : r2023_4 +# 2069| Block 7 +# 2069| m2069_7(unknown) = Phi : from 8:~m2069_27, from 9:~m2069_38 +# 2069| m2069_8(TernaryNonPodObj) = Phi : from 8:m2069_32, from 9:m2069_43 +# 2069| r2069_9(glval) = VariableAddress[#temp2069:9] : +# 2069| r2069_10(TernaryNonPodObj) = Load[#temp2069:9] : &:r2069_9, m2069_8 +# 2069| m2069_11(TernaryNonPodObj) = Store[#temp2069:9] : &:r2069_3, r2069_10 +# 2069| r2069_12(glval) = Convert : r2069_3 +# 2069| r2069_13(TernaryNonPodObj &) = CopyValue : r2069_12 +# 2069| r2069_14(TernaryNonPodObj &) = Call[operator=] : func:r2069_2, this:r2069_1, 0:r2069_13 +# 2069| m2069_15(unknown) = ^CallSideEffect : ~m2069_7 +# 2069| m2069_16(unknown) = Chi : total:m2069_7, partial:m2069_15 +# 2069| v2069_17(void) = ^IndirectReadSideEffect[-1] : &:r2069_1, m2068_20 +# 2069| v2069_18(void) = ^BufferReadSideEffect[0] : &:r2069_13, ~m2069_11 +# 2069| m2069_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2069_1 +# 2069| m2069_20(TernaryNonPodObj) = Chi : total:m2068_20, partial:m2069_19 +# 2069| r2069_21(glval) = CopyValue : r2069_14 +# 2070| r2070_1(glval) = VariableAddress[z] : +# 2070| r2070_2(glval) = FunctionAddress[operator=] : +# 2070| r2070_3(glval) = VariableAddress[a] : +# 2070| r2070_4(bool) = Load[a] : &:r2070_3, m2066_6 +# 2070| v2070_5(void) = ConditionalBranch : r2070_4 #-----| False -> Block 12 #-----| True -> Block 11 -# 2022| Block 8 -# 2022| r2022_22(glval) = VariableAddress[#temp2022:13] : -# 2022| m2022_23(TernaryNonPodObj) = Uninitialized[#temp2022:13] : &:r2022_22 -# 2022| r2022_24(glval) = FunctionAddress[TernaryNonPodObj] : -# 2022| v2022_25(void) = Call[TernaryNonPodObj] : func:r2022_24, this:r2022_22 -# 2022| m2022_26(unknown) = ^CallSideEffect : ~m2021_16 -# 2022| m2022_27(unknown) = Chi : total:m2021_16, partial:m2022_26 -# 2022| m2022_28(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_22 -# 2022| m2022_29(TernaryNonPodObj) = Chi : total:m2022_23, partial:m2022_28 -# 2022| r2022_30(TernaryNonPodObj) = Load[#temp2022:13] : &:r2022_22, m2022_29 -# 2022| r2022_31(glval) = VariableAddress[#temp2022:9] : -# 2022| m2022_32(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_31, r2022_30 +# 2069| Block 8 +# 2069| r2069_22(glval) = VariableAddress[#temp2069:13] : +# 2069| m2069_23(TernaryNonPodObj) = Uninitialized[#temp2069:13] : &:r2069_22 +# 2069| r2069_24(glval) = FunctionAddress[TernaryNonPodObj] : +# 2069| v2069_25(void) = Call[TernaryNonPodObj] : func:r2069_24, this:r2069_22 +# 2069| m2069_26(unknown) = ^CallSideEffect : ~m2068_16 +# 2069| m2069_27(unknown) = Chi : total:m2068_16, partial:m2069_26 +# 2069| m2069_28(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2069_22 +# 2069| m2069_29(TernaryNonPodObj) = Chi : total:m2069_23, partial:m2069_28 +# 2069| r2069_30(TernaryNonPodObj) = Load[#temp2069:13] : &:r2069_22, m2069_29 +# 2069| r2069_31(glval) = VariableAddress[#temp2069:9] : +# 2069| m2069_32(TernaryNonPodObj) = Store[#temp2069:9] : &:r2069_31, r2069_30 #-----| Goto -> Block 7 -# 2022| Block 9 -# 2022| r2022_33(glval) = VariableAddress[#temp2022:34] : -# 2022| m2022_34(TernaryNonPodObj) = Uninitialized[#temp2022:34] : &:r2022_33 -# 2022| r2022_35(glval) = FunctionAddress[TernaryNonPodObj] : -# 2022| v2022_36(void) = Call[TernaryNonPodObj] : func:r2022_35, this:r2022_33 -# 2022| m2022_37(unknown) = ^CallSideEffect : ~m2021_16 -# 2022| m2022_38(unknown) = Chi : total:m2021_16, partial:m2022_37 -# 2022| m2022_39(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_33 -# 2022| m2022_40(TernaryNonPodObj) = Chi : total:m2022_34, partial:m2022_39 -# 2022| r2022_41(TernaryNonPodObj) = Load[#temp2022:34] : &:r2022_33, m2022_40 -# 2022| r2022_42(glval) = VariableAddress[#temp2022:9] : -# 2022| m2022_43(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_42, r2022_41 +# 2069| Block 9 +# 2069| r2069_33(glval) = VariableAddress[#temp2069:34] : +# 2069| m2069_34(TernaryNonPodObj) = Uninitialized[#temp2069:34] : &:r2069_33 +# 2069| r2069_35(glval) = FunctionAddress[TernaryNonPodObj] : +# 2069| v2069_36(void) = Call[TernaryNonPodObj] : func:r2069_35, this:r2069_33 +# 2069| m2069_37(unknown) = ^CallSideEffect : ~m2068_16 +# 2069| m2069_38(unknown) = Chi : total:m2068_16, partial:m2069_37 +# 2069| m2069_39(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2069_33 +# 2069| m2069_40(TernaryNonPodObj) = Chi : total:m2069_34, partial:m2069_39 +# 2069| r2069_41(TernaryNonPodObj) = Load[#temp2069:34] : &:r2069_33, m2069_40 +# 2069| r2069_42(glval) = VariableAddress[#temp2069:9] : +# 2069| m2069_43(TernaryNonPodObj) = Store[#temp2069:9] : &:r2069_42, r2069_41 #-----| Goto -> Block 7 -# 2023| Block 10 -# 2023| m2023_6(glval) = Phi : from 11:m2023_40, from 12:m2023_43 -# 2023| r2023_7(glval) = VariableAddress[#temp2023:10] : -# 2023| r2023_8(glval) = Load[#temp2023:10] : &:r2023_7, m2023_6 -# 2023| r2023_9(glval) = Convert : r2023_8 -# 2023| r2023_10(TernaryNonPodObj &) = CopyValue : r2023_9 -# 2023| r2023_11(TernaryNonPodObj &) = Call[operator=] : func:r2023_2, this:r2023_1, 0:r2023_10 -# 2023| m2023_12(unknown) = ^CallSideEffect : ~m2022_16 -# 2023| m2023_13(unknown) = Chi : total:m2022_16, partial:m2023_12 -# 2023| v2023_14(void) = ^IndirectReadSideEffect[-1] : &:r2023_1, m2022_20 -# 2023| v2023_15(void) = ^BufferReadSideEffect[0] : &:r2023_10, ~m2023_13 -# 2023| m2023_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_1 -# 2023| m2023_17(TernaryNonPodObj) = Chi : total:m2022_20, partial:m2023_16 -# 2023| r2023_18(glval) = CopyValue : r2023_11 -# 2023| r2023_19(glval) = FunctionAddress[operator=] : -# 2023| r2023_20(glval) = VariableAddress[#temp2023:23] : -# 2023| m2023_21(TernaryNonPodObj) = Uninitialized[#temp2023:23] : &:r2023_20 -# 2023| r2023_22(glval) = FunctionAddress[TernaryNonPodObj] : -# 2023| v2023_23(void) = Call[TernaryNonPodObj] : func:r2023_22, this:r2023_20 -# 2023| m2023_24(unknown) = ^CallSideEffect : ~m2023_13 -# 2023| m2023_25(unknown) = Chi : total:m2023_13, partial:m2023_24 -# 2023| m2023_26(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_20 -# 2023| m2023_27(TernaryNonPodObj) = Chi : total:m2023_21, partial:m2023_26 -# 2023| r2023_28(glval) = Convert : r2023_20 -# 2023| r2023_29(TernaryNonPodObj &) = CopyValue : r2023_28 -# 2023| r2023_30(TernaryNonPodObj &) = Call[operator=] : func:r2023_19, this:r2023_18, 0:r2023_29 -# 2023| m2023_31(unknown) = ^CallSideEffect : ~m2023_25 -# 2023| m2023_32(unknown) = Chi : total:m2023_25, partial:m2023_31 -# 2023| v2023_33(void) = ^IndirectReadSideEffect[-1] : &:r2023_18, m2023_17 -# 2023| v2023_34(void) = ^BufferReadSideEffect[0] : &:r2023_29, ~m2023_27 -# 2023| m2023_35(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_18 -# 2023| m2023_36(TernaryNonPodObj) = Chi : total:m2023_17, partial:m2023_35 -# 2023| r2023_37(glval) = CopyValue : r2023_30 -# 2024| v2024_1(void) = NoOp : -# 2019| v2019_13(void) = ReturnVoid : -# 2019| v2019_14(void) = AliasedUse : ~m2023_32 -# 2019| v2019_15(void) = ExitFunction : +# 2070| Block 10 +# 2070| m2070_6(glval) = Phi : from 11:m2070_40, from 12:m2070_43 +# 2070| r2070_7(glval) = VariableAddress[#temp2070:10] : +# 2070| r2070_8(glval) = Load[#temp2070:10] : &:r2070_7, m2070_6 +# 2070| r2070_9(glval) = Convert : r2070_8 +# 2070| r2070_10(TernaryNonPodObj &) = CopyValue : r2070_9 +# 2070| r2070_11(TernaryNonPodObj &) = Call[operator=] : func:r2070_2, this:r2070_1, 0:r2070_10 +# 2070| m2070_12(unknown) = ^CallSideEffect : ~m2069_16 +# 2070| m2070_13(unknown) = Chi : total:m2069_16, partial:m2070_12 +# 2070| v2070_14(void) = ^IndirectReadSideEffect[-1] : &:r2070_1, m2069_20 +# 2070| v2070_15(void) = ^BufferReadSideEffect[0] : &:r2070_10, ~m2070_13 +# 2070| m2070_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2070_1 +# 2070| m2070_17(TernaryNonPodObj) = Chi : total:m2069_20, partial:m2070_16 +# 2070| r2070_18(glval) = CopyValue : r2070_11 +# 2070| r2070_19(glval) = FunctionAddress[operator=] : +# 2070| r2070_20(glval) = VariableAddress[#temp2070:23] : +# 2070| m2070_21(TernaryNonPodObj) = Uninitialized[#temp2070:23] : &:r2070_20 +# 2070| r2070_22(glval) = FunctionAddress[TernaryNonPodObj] : +# 2070| v2070_23(void) = Call[TernaryNonPodObj] : func:r2070_22, this:r2070_20 +# 2070| m2070_24(unknown) = ^CallSideEffect : ~m2070_13 +# 2070| m2070_25(unknown) = Chi : total:m2070_13, partial:m2070_24 +# 2070| m2070_26(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2070_20 +# 2070| m2070_27(TernaryNonPodObj) = Chi : total:m2070_21, partial:m2070_26 +# 2070| r2070_28(glval) = Convert : r2070_20 +# 2070| r2070_29(TernaryNonPodObj &) = CopyValue : r2070_28 +# 2070| r2070_30(TernaryNonPodObj &) = Call[operator=] : func:r2070_19, this:r2070_18, 0:r2070_29 +# 2070| m2070_31(unknown) = ^CallSideEffect : ~m2070_25 +# 2070| m2070_32(unknown) = Chi : total:m2070_25, partial:m2070_31 +# 2070| v2070_33(void) = ^IndirectReadSideEffect[-1] : &:r2070_18, m2070_17 +# 2070| v2070_34(void) = ^BufferReadSideEffect[0] : &:r2070_29, ~m2070_27 +# 2070| m2070_35(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2070_18 +# 2070| m2070_36(TernaryNonPodObj) = Chi : total:m2070_17, partial:m2070_35 +# 2070| r2070_37(glval) = CopyValue : r2070_30 +# 2071| v2071_1(void) = NoOp : +# 2066| v2066_13(void) = ReturnVoid : +# 2066| v2066_14(void) = AliasedUse : ~m2070_32 +# 2066| v2066_15(void) = ExitFunction : -# 2023| Block 11 -# 2023| r2023_38(glval) = VariableAddress[x] : -# 2023| r2023_39(glval) = VariableAddress[#temp2023:10] : -# 2023| m2023_40(glval) = Store[#temp2023:10] : &:r2023_39, r2023_38 +# 2070| Block 11 +# 2070| r2070_38(glval) = VariableAddress[x] : +# 2070| r2070_39(glval) = VariableAddress[#temp2070:10] : +# 2070| m2070_40(glval) = Store[#temp2070:10] : &:r2070_39, r2070_38 #-----| Goto -> Block 10 -# 2023| Block 12 -# 2023| r2023_41(glval) = VariableAddress[y] : -# 2023| r2023_42(glval) = VariableAddress[#temp2023:10] : -# 2023| m2023_43(glval) = Store[#temp2023:10] : &:r2023_42, r2023_41 +# 2070| Block 12 +# 2070| r2070_41(glval) = VariableAddress[y] : +# 2070| r2070_42(glval) = VariableAddress[#temp2070:10] : +# 2070| m2070_43(glval) = Store[#temp2070:10] : &:r2070_42, r2070_41 #-----| Goto -> Block 10 -# 2028| unsigned int CommaTest(unsigned int) -# 2028| Block 0 -# 2028| v2028_1(void) = EnterFunction : -# 2028| m2028_2(unknown) = AliasedDefinition : -# 2028| m2028_3(unknown) = InitializeNonLocal : -# 2028| m2028_4(unknown) = Chi : total:m2028_2, partial:m2028_3 -# 2028| r2028_5(glval) = VariableAddress[x] : -# 2028| m2028_6(unsigned int) = InitializeParameter[x] : &:r2028_5 -# 2029| r2029_1(glval) = VariableAddress[y] : -# 2029| m2029_2(unsigned int) = Uninitialized[y] : &:r2029_1 -# 2030| r2030_1(glval) = VariableAddress[x] : -# 2030| r2030_2(unsigned int) = Load[x] : &:r2030_1, m2028_6 -# 2030| r2030_3(unsigned int) = Constant[100] : -# 2030| r2030_4(bool) = CompareLT : r2030_2, r2030_3 -# 2030| v2030_5(void) = ConditionalBranch : r2030_4 +# 2075| unsigned int CommaTest(unsigned int) +# 2075| Block 0 +# 2075| v2075_1(void) = EnterFunction : +# 2075| m2075_2(unknown) = AliasedDefinition : +# 2075| m2075_3(unknown) = InitializeNonLocal : +# 2075| m2075_4(unknown) = Chi : total:m2075_2, partial:m2075_3 +# 2075| r2075_5(glval) = VariableAddress[x] : +# 2075| m2075_6(unsigned int) = InitializeParameter[x] : &:r2075_5 +# 2076| r2076_1(glval) = VariableAddress[y] : +# 2076| m2076_2(unsigned int) = Uninitialized[y] : &:r2076_1 +# 2077| r2077_1(glval) = VariableAddress[x] : +# 2077| r2077_2(unsigned int) = Load[x] : &:r2077_1, m2075_6 +# 2077| r2077_3(unsigned int) = Constant[100] : +# 2077| r2077_4(bool) = CompareLT : r2077_2, r2077_3 +# 2077| v2077_5(void) = ConditionalBranch : r2077_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 2030| Block 1 -# 2030| m2030_6(unknown) = Phi : from 2:~m2031_6, from 3:~m2032_6 -# 2030| m2030_7(unsigned int) = Phi : from 2:m2030_13, from 3:m2030_15 -# 2030| r2030_8(glval) = VariableAddress[#temp2030:7] : -# 2030| r2030_9(unsigned int) = Load[#temp2030:7] : &:r2030_8, m2030_7 -# 2030| r2030_10(glval) = VariableAddress[y] : -# 2030| m2030_11(unsigned int) = Store[y] : &:r2030_10, r2030_9 -# 2033| r2033_1(glval) = VariableAddress[#return] : -# 2033| m2033_2(unsigned int) = Uninitialized[#return] : &:r2033_1 -# 2028| r2028_7(glval) = VariableAddress[#return] : -# 2028| v2028_8(void) = ReturnValue : &:r2028_7, m2033_2 -# 2028| v2028_9(void) = AliasedUse : ~m2030_6 -# 2028| v2028_10(void) = ExitFunction : +# 2077| Block 1 +# 2077| m2077_6(unknown) = Phi : from 2:~m2078_6, from 3:~m2079_6 +# 2077| m2077_7(unsigned int) = Phi : from 2:m2077_13, from 3:m2077_15 +# 2077| r2077_8(glval) = VariableAddress[#temp2077:7] : +# 2077| r2077_9(unsigned int) = Load[#temp2077:7] : &:r2077_8, m2077_7 +# 2077| r2077_10(glval) = VariableAddress[y] : +# 2077| m2077_11(unsigned int) = Store[y] : &:r2077_10, r2077_9 +# 2080| r2080_1(glval) = VariableAddress[#return] : +# 2080| m2080_2(unsigned int) = Uninitialized[#return] : &:r2080_1 +# 2075| r2075_7(glval) = VariableAddress[#return] : +# 2075| v2075_8(void) = ReturnValue : &:r2075_7, m2080_2 +# 2075| v2075_9(void) = AliasedUse : ~m2077_6 +# 2075| v2075_10(void) = ExitFunction : -# 2031| Block 2 -# 2031| r2031_1(glval) = FunctionAddress[CommaTestHelper] : -# 2031| r2031_2(glval) = VariableAddress[x] : -# 2031| r2031_3(unsigned int) = Load[x] : &:r2031_2, m2028_6 -# 2031| v2031_4(void) = Call[CommaTestHelper] : func:r2031_1, 0:r2031_3 -# 2031| m2031_5(unknown) = ^CallSideEffect : ~m2028_4 -# 2031| m2031_6(unknown) = Chi : total:m2028_4, partial:m2031_5 -# 2031| r2031_7(glval) = VariableAddress[x] : -# 2031| r2031_8(unsigned int) = Load[x] : &:r2031_7, m2028_6 -# 2031| r2031_9(unsigned int) = CopyValue : r2031_8 -# 2030| r2030_12(glval) = VariableAddress[#temp2030:7] : -# 2030| m2030_13(unsigned int) = Store[#temp2030:7] : &:r2030_12, r2031_9 +# 2078| Block 2 +# 2078| r2078_1(glval) = FunctionAddress[CommaTestHelper] : +# 2078| r2078_2(glval) = VariableAddress[x] : +# 2078| r2078_3(unsigned int) = Load[x] : &:r2078_2, m2075_6 +# 2078| v2078_4(void) = Call[CommaTestHelper] : func:r2078_1, 0:r2078_3 +# 2078| m2078_5(unknown) = ^CallSideEffect : ~m2075_4 +# 2078| m2078_6(unknown) = Chi : total:m2075_4, partial:m2078_5 +# 2078| r2078_7(glval) = VariableAddress[x] : +# 2078| r2078_8(unsigned int) = Load[x] : &:r2078_7, m2075_6 +# 2078| r2078_9(unsigned int) = CopyValue : r2078_8 +# 2077| r2077_12(glval) = VariableAddress[#temp2077:7] : +# 2077| m2077_13(unsigned int) = Store[#temp2077:7] : &:r2077_12, r2078_9 #-----| Goto -> Block 1 -# 2032| Block 3 -# 2032| r2032_1(glval) = FunctionAddress[CommaTestHelper] : -# 2032| r2032_2(glval) = VariableAddress[x] : -# 2032| r2032_3(unsigned int) = Load[x] : &:r2032_2, m2028_6 -# 2032| v2032_4(void) = Call[CommaTestHelper] : func:r2032_1, 0:r2032_3 -# 2032| m2032_5(unknown) = ^CallSideEffect : ~m2028_4 -# 2032| m2032_6(unknown) = Chi : total:m2028_4, partial:m2032_5 -# 2032| r2032_7(int) = Constant[10] : -# 2032| r2032_8(int) = CopyValue : r2032_7 -# 2032| r2032_9(unsigned int) = Convert : r2032_8 -# 2030| r2030_14(glval) = VariableAddress[#temp2030:7] : -# 2030| m2030_15(unsigned int) = Store[#temp2030:7] : &:r2030_14, r2032_9 +# 2079| Block 3 +# 2079| r2079_1(glval) = FunctionAddress[CommaTestHelper] : +# 2079| r2079_2(glval) = VariableAddress[x] : +# 2079| r2079_3(unsigned int) = Load[x] : &:r2079_2, m2075_6 +# 2079| v2079_4(void) = Call[CommaTestHelper] : func:r2079_1, 0:r2079_3 +# 2079| m2079_5(unknown) = ^CallSideEffect : ~m2075_4 +# 2079| m2079_6(unknown) = Chi : total:m2075_4, partial:m2079_5 +# 2079| r2079_7(int) = Constant[10] : +# 2079| r2079_8(int) = CopyValue : r2079_7 +# 2079| r2079_9(unsigned int) = Convert : r2079_8 +# 2077| r2077_14(glval) = VariableAddress[#temp2077:7] : +# 2077| m2077_15(unsigned int) = Store[#temp2077:7] : &:r2077_14, r2079_9 #-----| Goto -> Block 1 -# 2035| void NewDeleteMem() -# 2035| Block 0 -# 2035| v2035_1(void) = EnterFunction : -# 2035| m2035_2(unknown) = AliasedDefinition : -# 2035| m2035_3(unknown) = InitializeNonLocal : -# 2035| m2035_4(unknown) = Chi : total:m2035_2, partial:m2035_3 -# 2036| r2036_1(glval) = VariableAddress[x] : -# 2036| r2036_2(glval) = FunctionAddress[operator new] : -# 2036| r2036_3(unsigned long) = Constant[4] : -# 2036| r2036_4(void *) = Call[operator new] : func:r2036_2, 0:r2036_3 -# 2036| m2036_5(unknown) = ^CallSideEffect : ~m2035_4 -# 2036| m2036_6(unknown) = Chi : total:m2035_4, partial:m2036_5 -# 2036| m2036_7(unknown) = ^InitializeDynamicAllocation : &:r2036_4 -# 2036| r2036_8(int *) = Convert : r2036_4 -# 2036| m2036_9(int *) = Store[x] : &:r2036_1, r2036_8 -# 2037| r2037_1(int) = Constant[6] : -# 2037| r2037_2(glval) = VariableAddress[x] : -# 2037| r2037_3(int *) = Load[x] : &:r2037_2, m2036_9 -# 2037| r2037_4(glval) = CopyValue : r2037_3 -# 2037| m2037_5(int) = Store[?] : &:r2037_4, r2037_1 -# 2037| m2037_6(unknown) = Chi : total:m2036_7, partial:m2037_5 -# 2038| r2038_1(glval) = FunctionAddress[operator delete] : -# 2038| r2038_2(glval) = VariableAddress[x] : -# 2038| r2038_3(int *) = Load[x] : &:r2038_2, m2036_9 -# 2038| v2038_4(void) = Call[operator delete] : func:r2038_1, 0:r2038_3 -# 2038| m2038_5(unknown) = ^CallSideEffect : ~m2036_6 -# 2038| m2038_6(unknown) = Chi : total:m2036_6, partial:m2038_5 -# 2039| v2039_1(void) = NoOp : -# 2035| v2035_5(void) = ReturnVoid : -# 2035| v2035_6(void) = AliasedUse : ~m2038_6 -# 2035| v2035_7(void) = ExitFunction : +# 2082| void NewDeleteMem() +# 2082| Block 0 +# 2082| v2082_1(void) = EnterFunction : +# 2082| m2082_2(unknown) = AliasedDefinition : +# 2082| m2082_3(unknown) = InitializeNonLocal : +# 2082| m2082_4(unknown) = Chi : total:m2082_2, partial:m2082_3 +# 2083| r2083_1(glval) = VariableAddress[x] : +# 2083| r2083_2(glval) = FunctionAddress[operator new] : +# 2083| r2083_3(unsigned long) = Constant[4] : +# 2083| r2083_4(void *) = Call[operator new] : func:r2083_2, 0:r2083_3 +# 2083| m2083_5(unknown) = ^CallSideEffect : ~m2082_4 +# 2083| m2083_6(unknown) = Chi : total:m2082_4, partial:m2083_5 +# 2083| m2083_7(unknown) = ^InitializeDynamicAllocation : &:r2083_4 +# 2083| r2083_8(int *) = Convert : r2083_4 +# 2083| m2083_9(int *) = Store[x] : &:r2083_1, r2083_8 +# 2084| r2084_1(int) = Constant[6] : +# 2084| r2084_2(glval) = VariableAddress[x] : +# 2084| r2084_3(int *) = Load[x] : &:r2084_2, m2083_9 +# 2084| r2084_4(glval) = CopyValue : r2084_3 +# 2084| m2084_5(int) = Store[?] : &:r2084_4, r2084_1 +# 2084| m2084_6(unknown) = Chi : total:m2083_7, partial:m2084_5 +# 2085| r2085_1(glval) = FunctionAddress[operator delete] : +# 2085| r2085_2(glval) = VariableAddress[x] : +# 2085| r2085_3(int *) = Load[x] : &:r2085_2, m2083_9 +# 2085| v2085_4(void) = Call[operator delete] : func:r2085_1, 0:r2085_3 +# 2085| m2085_5(unknown) = ^CallSideEffect : ~m2083_6 +# 2085| m2085_6(unknown) = Chi : total:m2083_6, partial:m2085_5 +# 2086| v2086_1(void) = NoOp : +# 2082| v2082_5(void) = ReturnVoid : +# 2082| v2082_6(void) = AliasedUse : ~m2085_6 +# 2082| v2082_7(void) = ExitFunction : -# 2041| void Base2::Base2() -# 2041| Block 0 -# 2041| v2041_1(void) = EnterFunction : -# 2041| m2041_2(unknown) = AliasedDefinition : -# 2041| m2041_3(unknown) = InitializeNonLocal : -# 2041| m2041_4(unknown) = Chi : total:m2041_2, partial:m2041_3 -# 2041| r2041_5(glval) = VariableAddress[#this] : -# 2041| m2041_6(glval) = InitializeParameter[#this] : &:r2041_5 -# 2041| r2041_7(glval) = Load[#this] : &:r2041_5, m2041_6 -# 2041| m2041_8(Base2) = InitializeIndirection[#this] : &:r2041_7 -# 2041| v2041_9(void) = NoOp : -# 2041| v2041_10(void) = ReturnIndirection[#this] : &:r2041_7, m2041_8 -# 2041| v2041_11(void) = ReturnVoid : -# 2041| v2041_12(void) = AliasedUse : m2041_3 -# 2041| v2041_13(void) = ExitFunction : +# 2088| void Base2::Base2() +# 2088| Block 0 +# 2088| v2088_1(void) = EnterFunction : +# 2088| m2088_2(unknown) = AliasedDefinition : +# 2088| m2088_3(unknown) = InitializeNonLocal : +# 2088| m2088_4(unknown) = Chi : total:m2088_2, partial:m2088_3 +# 2088| r2088_5(glval) = VariableAddress[#this] : +# 2088| m2088_6(glval) = InitializeParameter[#this] : &:r2088_5 +# 2088| r2088_7(glval) = Load[#this] : &:r2088_5, m2088_6 +# 2088| m2088_8(Base2) = InitializeIndirection[#this] : &:r2088_7 +# 2088| v2088_9(void) = NoOp : +# 2088| v2088_10(void) = ReturnIndirection[#this] : &:r2088_7, m2088_8 +# 2088| v2088_11(void) = ReturnVoid : +# 2088| v2088_12(void) = AliasedUse : m2088_3 +# 2088| v2088_13(void) = ExitFunction : -# 2043| void Base2::operator delete(void*) -# 2043| Block 0 -# 2043| v2043_1(void) = EnterFunction : -# 2043| m2043_2(unknown) = AliasedDefinition : -# 2043| m2043_3(unknown) = InitializeNonLocal : -# 2043| m2043_4(unknown) = Chi : total:m2043_2, partial:m2043_3 -# 2043| r2043_5(glval) = VariableAddress[p] : -# 2043| m2043_6(void *) = InitializeParameter[p] : &:r2043_5 -# 2043| r2043_7(void *) = Load[p] : &:r2043_5, m2043_6 -# 2043| m2043_8(unknown) = InitializeIndirection[p] : &:r2043_7 -# 2044| v2044_1(void) = NoOp : -# 2043| v2043_9(void) = ReturnIndirection[p] : &:r2043_7, m2043_8 -# 2043| v2043_10(void) = ReturnVoid : -# 2043| v2043_11(void) = AliasedUse : m2043_3 -# 2043| v2043_12(void) = ExitFunction : +# 2090| void Base2::operator delete(void*) +# 2090| Block 0 +# 2090| v2090_1(void) = EnterFunction : +# 2090| m2090_2(unknown) = AliasedDefinition : +# 2090| m2090_3(unknown) = InitializeNonLocal : +# 2090| m2090_4(unknown) = Chi : total:m2090_2, partial:m2090_3 +# 2090| r2090_5(glval) = VariableAddress[p] : +# 2090| m2090_6(void *) = InitializeParameter[p] : &:r2090_5 +# 2090| r2090_7(void *) = Load[p] : &:r2090_5, m2090_6 +# 2090| m2090_8(unknown) = InitializeIndirection[p] : &:r2090_7 +# 2091| v2091_1(void) = NoOp : +# 2090| v2090_9(void) = ReturnIndirection[p] : &:r2090_7, m2090_8 +# 2090| v2090_10(void) = ReturnVoid : +# 2090| v2090_11(void) = AliasedUse : m2090_3 +# 2090| v2090_12(void) = ExitFunction : -# 2045| void Base2::~Base2() -# 2045| Block 0 -# 2045| v2045_1(void) = EnterFunction : -# 2045| m2045_2(unknown) = AliasedDefinition : -# 2045| m2045_3(unknown) = InitializeNonLocal : -# 2045| m2045_4(unknown) = Chi : total:m2045_2, partial:m2045_3 -# 2045| r2045_5(glval) = VariableAddress[#this] : -# 2045| m2045_6(glval) = InitializeParameter[#this] : &:r2045_5 -# 2045| r2045_7(glval) = Load[#this] : &:r2045_5, m2045_6 -# 2045| m2045_8(Base2) = InitializeIndirection[#this] : &:r2045_7 -# 2045| v2045_9(void) = NoOp : -# 2045| v2045_10(void) = ReturnIndirection[#this] : &:r2045_7, m2045_8 -# 2045| v2045_11(void) = ReturnVoid : -# 2045| v2045_12(void) = AliasedUse : m2045_3 -# 2045| v2045_13(void) = ExitFunction : - -# 2048| void Derived2::Derived2() -# 2048| Block 0 -# 2048| v2048_1(void) = EnterFunction : -# 2048| m2048_2(unknown) = AliasedDefinition : -# 2048| m2048_3(unknown) = InitializeNonLocal : -# 2048| m2048_4(unknown) = Chi : total:m2048_2, partial:m2048_3 -# 2048| r2048_5(glval) = VariableAddress[#this] : -# 2048| m2048_6(glval) = InitializeParameter[#this] : &:r2048_5 -# 2048| r2048_7(glval) = Load[#this] : &:r2048_5, m2048_6 -# 2048| m2048_8(Derived2) = InitializeIndirection[#this] : &:r2048_7 -# 2048| r2048_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : m2048_6 -# 2048| r2048_10(glval) = FunctionAddress[Base2] : -# 2048| v2048_11(void) = Call[Base2] : func:r2048_10, this:r2048_9 -# 2048| m2048_12(unknown) = ^CallSideEffect : ~m2048_4 -# 2048| m2048_13(unknown) = Chi : total:m2048_4, partial:m2048_12 -# 2048| m2048_14(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2048_9 -# 2048| m2048_15(unknown) = Chi : total:m2048_8, partial:m2048_14 -# 2048| v2048_16(void) = NoOp : -# 2048| v2048_17(void) = ReturnIndirection[#this] : &:r2048_7, m2048_15 -# 2048| v2048_18(void) = ReturnVoid : -# 2048| v2048_19(void) = AliasedUse : ~m2048_13 -# 2048| v2048_20(void) = ExitFunction : - -# 2051| void Derived2::~Derived2() -# 2051| Block 0 -# 2051| v2051_1(void) = EnterFunction : -# 2051| m2051_2(unknown) = AliasedDefinition : -# 2051| m2051_3(unknown) = InitializeNonLocal : -# 2051| m2051_4(unknown) = Chi : total:m2051_2, partial:m2051_3 -# 2051| r2051_5(glval) = VariableAddress[#this] : -# 2051| m2051_6(glval) = InitializeParameter[#this] : &:r2051_5 -# 2051| r2051_7(glval) = Load[#this] : &:r2051_5, m2051_6 -# 2051| m2051_8(Derived2) = InitializeIndirection[#this] : &:r2051_7 -# 2051| v2051_9(void) = NoOp : -# 2051| r2051_10(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : m2051_6 -# 2051| r2051_11(glval) = FunctionAddress[~Base2] : -# 2051| v2051_12(void) = Call[~Base2] : func:r2051_11, this:r2051_10 -# 2051| m2051_13(unknown) = ^CallSideEffect : ~m2051_4 -# 2051| m2051_14(unknown) = Chi : total:m2051_4, partial:m2051_13 -# 2051| v2051_15(void) = ReturnIndirection[#this] : &:r2051_7, m2051_8 -# 2051| v2051_16(void) = ReturnVoid : -# 2051| v2051_17(void) = AliasedUse : ~m2051_14 -# 2051| v2051_18(void) = ExitFunction : - -# 2053| void Derived2::operator delete(void*) -# 2053| Block 0 -# 2053| v2053_1(void) = EnterFunction : -# 2053| m2053_2(unknown) = AliasedDefinition : -# 2053| m2053_3(unknown) = InitializeNonLocal : -# 2053| m2053_4(unknown) = Chi : total:m2053_2, partial:m2053_3 -# 2053| r2053_5(glval) = VariableAddress[p] : -# 2053| m2053_6(void *) = InitializeParameter[p] : &:r2053_5 -# 2053| r2053_7(void *) = Load[p] : &:r2053_5, m2053_6 -# 2053| m2053_8(unknown) = InitializeIndirection[p] : &:r2053_7 -# 2054| v2054_1(void) = NoOp : -# 2053| v2053_9(void) = ReturnIndirection[p] : &:r2053_7, m2053_8 -# 2053| v2053_10(void) = ReturnVoid : -# 2053| v2053_11(void) = AliasedUse : m2053_3 -# 2053| v2053_12(void) = ExitFunction : - -# 2058| int virtual_delete() -# 2058| Block 0 -# 2058| v2058_1(void) = EnterFunction : -# 2058| m2058_2(unknown) = AliasedDefinition : -# 2058| m2058_3(unknown) = InitializeNonLocal : -# 2058| m2058_4(unknown) = Chi : total:m2058_2, partial:m2058_3 -# 2060| r2060_1(glval) = VariableAddress[b1] : -# 2060| r2060_2(glval) = FunctionAddress[operator new] : -# 2060| r2060_3(unsigned long) = Constant[8] : -# 2060| r2060_4(void *) = Call[operator new] : func:r2060_2, 0:r2060_3 -# 2060| m2060_5(unknown) = ^CallSideEffect : ~m2058_4 -# 2060| m2060_6(unknown) = Chi : total:m2058_4, partial:m2060_5 -# 2060| m2060_7(unknown) = ^InitializeDynamicAllocation : &:r2060_4 -# 2060| r2060_8(Base2 *) = Convert : r2060_4 -# 2060| r2060_9(glval) = FunctionAddress[Base2] : -# 2060| v2060_10(void) = Call[Base2] : func:r2060_9, this:r2060_8 -# 2060| m2060_11(unknown) = ^CallSideEffect : ~m2060_6 -# 2060| m2060_12(unknown) = Chi : total:m2060_6, partial:m2060_11 -# 2060| m2060_13(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2060_8 -# 2060| m2060_14(unknown) = Chi : total:m2060_7, partial:m2060_13 -# 2060| m2060_15(Base2 *) = Store[b1] : &:r2060_1, r2060_8 -# 2061| r2061_1(glval) = VirtualDeleteFunctionAddress : -# 2061| r2061_2(glval) = VariableAddress[b1] : -# 2061| r2061_3(Base2 *) = Load[b1] : &:r2061_2, m2060_15 -# 2061| v2061_4(void) = Call[?] : func:r2061_1, 0:r2061_3 -# 2061| m2061_5(unknown) = ^CallSideEffect : ~m2060_12 -# 2061| m2061_6(unknown) = Chi : total:m2060_12, partial:m2061_5 -# 2063| r2063_1(glval) = VariableAddress[b2] : -# 2063| r2063_2(glval) = FunctionAddress[operator new] : -# 2063| r2063_3(unsigned long) = Constant[16] : -# 2063| r2063_4(void *) = Call[operator new] : func:r2063_2, 0:r2063_3 -# 2063| m2063_5(unknown) = ^CallSideEffect : ~m2061_6 -# 2063| m2063_6(unknown) = Chi : total:m2061_6, partial:m2063_5 -# 2063| m2063_7(unknown) = ^InitializeDynamicAllocation : &:r2063_4 -# 2063| r2063_8(Derived2 *) = Convert : r2063_4 -# 2063| r2063_9(glval) = FunctionAddress[Derived2] : -# 2063| v2063_10(void) = Call[Derived2] : func:r2063_9, this:r2063_8 -# 2063| m2063_11(unknown) = ^CallSideEffect : ~m2063_6 -# 2063| m2063_12(unknown) = Chi : total:m2063_6, partial:m2063_11 -# 2063| m2063_13(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2063_8 -# 2063| m2063_14(unknown) = Chi : total:m2063_7, partial:m2063_13 -# 2063| r2063_15(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2063_8 -# 2063| m2063_16(Base2 *) = Store[b2] : &:r2063_1, r2063_15 -# 2064| r2064_1(glval) = VirtualDeleteFunctionAddress : -# 2064| r2064_2(glval) = VariableAddress[b2] : -# 2064| r2064_3(Base2 *) = Load[b2] : &:r2064_2, m2063_16 -# 2064| v2064_4(void) = Call[?] : func:r2064_1, 0:r2064_3 -# 2064| m2064_5(unknown) = ^CallSideEffect : ~m2063_12 -# 2064| m2064_6(unknown) = Chi : total:m2063_12, partial:m2064_5 -# 2066| r2066_1(glval) = VariableAddress[d] : -# 2066| r2066_2(glval) = FunctionAddress[operator new] : -# 2066| r2066_3(unsigned long) = Constant[16] : -# 2066| r2066_4(void *) = Call[operator new] : func:r2066_2, 0:r2066_3 -# 2066| m2066_5(unknown) = ^CallSideEffect : ~m2064_6 -# 2066| m2066_6(unknown) = Chi : total:m2064_6, partial:m2066_5 -# 2066| m2066_7(unknown) = ^InitializeDynamicAllocation : &:r2066_4 -# 2066| r2066_8(Derived2 *) = Convert : r2066_4 -# 2066| r2066_9(glval) = FunctionAddress[Derived2] : -# 2066| v2066_10(void) = Call[Derived2] : func:r2066_9, this:r2066_8 -# 2066| m2066_11(unknown) = ^CallSideEffect : ~m2066_6 -# 2066| m2066_12(unknown) = Chi : total:m2066_6, partial:m2066_11 -# 2066| m2066_13(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2066_8 -# 2066| m2066_14(unknown) = Chi : total:m2066_7, partial:m2066_13 -# 2066| m2066_15(Derived2 *) = Store[d] : &:r2066_1, r2066_8 -# 2067| r2067_1(glval) = VirtualDeleteFunctionAddress : -# 2067| r2067_2(glval) = VariableAddress[d] : -# 2067| r2067_3(Derived2 *) = Load[d] : &:r2067_2, m2066_15 -# 2067| v2067_4(void) = Call[?] : func:r2067_1, 0:r2067_3 -# 2067| m2067_5(unknown) = ^CallSideEffect : ~m2066_12 -# 2067| m2067_6(unknown) = Chi : total:m2066_12, partial:m2067_5 -# 2068| r2068_1(glval) = VariableAddress[#return] : -# 2068| m2068_2(int) = Uninitialized[#return] : &:r2068_1 -# 2058| r2058_5(glval) = VariableAddress[#return] : -# 2058| v2058_6(void) = ReturnValue : &:r2058_5, m2068_2 -# 2058| v2058_7(void) = AliasedUse : ~m2067_6 -# 2058| v2058_8(void) = ExitFunction : - -# 2072| void test_constant_folding() -# 2072| Block 0 -# 2072| v2072_1(void) = EnterFunction : -# 2072| m2072_2(unknown) = AliasedDefinition : -# 2072| m2072_3(unknown) = InitializeNonLocal : -# 2072| m2072_4(unknown) = Chi : total:m2072_2, partial:m2072_3 -# 2073| r2073_1(glval) = VariableAddress[x] : -# 2073| r2073_2(int) = Constant[116] : -# 2073| m2073_3(int) = Store[x] : &:r2073_1, r2073_2 -# 2074| r2074_1(glval) = FunctionAddress[test_constant_folding_use] : -# 2074| r2074_2(int) = Constant[116] : -# 2074| v2074_3(void) = Call[test_constant_folding_use] : func:r2074_1, 0:r2074_2 -# 2074| m2074_4(unknown) = ^CallSideEffect : ~m2072_4 -# 2074| m2074_5(unknown) = Chi : total:m2072_4, partial:m2074_4 -# 2075| v2075_1(void) = NoOp : -# 2072| v2072_5(void) = ReturnVoid : -# 2072| v2072_6(void) = AliasedUse : ~m2074_5 -# 2072| v2072_7(void) = ExitFunction : - -# 2079| int NonExit() -# 2079| Block 0 -# 2079| v2079_1(void) = EnterFunction : -# 2079| m2079_2(unknown) = AliasedDefinition : -# 2079| m2079_3(unknown) = InitializeNonLocal : -# 2079| m2079_4(unknown) = Chi : total:m2079_2, partial:m2079_3 -# 2080| r2080_1(glval) = VariableAddress[x] : -# 2080| r2080_2(glval) = FunctionAddress[Add] : -# 2080| r2080_3(int) = Constant[3] : -# 2080| r2080_4(int) = Constant[4] : -# 2080| r2080_5(int) = Call[Add] : func:r2080_2, 0:r2080_3, 1:r2080_4 -# 2080| m2080_6(unknown) = ^CallSideEffect : ~m2079_4 -# 2080| m2080_7(unknown) = Chi : total:m2079_4, partial:m2080_6 -# 2080| m2080_8(int) = Store[x] : &:r2080_1, r2080_5 -# 2081| r2081_1(glval) = VariableAddress[x] : -# 2081| r2081_2(int) = Load[x] : &:r2081_1, m2080_8 -# 2081| r2081_3(int) = Constant[7] : -# 2081| r2081_4(bool) = CompareEQ : r2081_2, r2081_3 -# 2081| v2081_5(void) = ConditionalBranch : r2081_4 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 2082| Block 1 -# 2082| r2082_1(glval) = FunctionAddress[exit] : -# 2082| r2082_2(int) = Constant[3] : -# 2082| v2082_3(void) = Call[exit] : func:r2082_1, 0:r2082_2 -# 2082| m2082_4(unknown) = ^CallSideEffect : ~m2080_7 -# 2082| m2082_5(unknown) = Chi : total:m2080_7, partial:m2082_4 -# 2079| v2079_5(void) = Unreached : - -# 2083| Block 2 -# 2083| r2083_1(glval) = FunctionAddress[VoidFunc] : -# 2083| v2083_2(void) = Call[VoidFunc] : func:r2083_1 -# 2083| m2083_3(unknown) = ^CallSideEffect : ~m2080_7 -# 2083| m2083_4(unknown) = Chi : total:m2080_7, partial:m2083_3 -# 2084| r2084_1(glval) = VariableAddress[#return] : -# 2084| r2084_2(glval) = VariableAddress[x] : -# 2084| r2084_3(int) = Load[x] : &:r2084_2, m2080_8 -# 2084| m2084_4(int) = Store[#return] : &:r2084_1, r2084_3 -# 2079| r2079_6(glval) = VariableAddress[#return] : -# 2079| v2079_7(void) = ReturnValue : &:r2079_6, m2084_4 -# 2079| v2079_8(void) = AliasedUse : ~m2083_4 -# 2079| v2079_9(void) = ExitFunction : - -# 2087| void CallsNonExit() -# 2087| Block 0 -# 2087| v2087_1(void) = EnterFunction : -# 2087| m2087_2(unknown) = AliasedDefinition : -# 2087| m2087_3(unknown) = InitializeNonLocal : -# 2087| m2087_4(unknown) = Chi : total:m2087_2, partial:m2087_3 -# 2088| r2088_1(glval) = FunctionAddress[VoidFunc] : -# 2088| v2088_2(void) = Call[VoidFunc] : func:r2088_1 -# 2088| m2088_3(unknown) = ^CallSideEffect : ~m2087_4 -# 2088| m2088_4(unknown) = Chi : total:m2087_4, partial:m2088_3 -# 2089| r2089_1(glval) = FunctionAddress[exit] : -# 2089| r2089_2(int) = Constant[3] : -# 2089| v2089_3(void) = Call[exit] : func:r2089_1, 0:r2089_2 -# 2089| m2089_4(unknown) = ^CallSideEffect : ~m2088_4 -# 2089| m2089_5(unknown) = Chi : total:m2088_4, partial:m2089_4 -# 2087| v2087_5(void) = Unreached : - -# 2092| int TransNonExit() +# 2092| void Base2::~Base2() # 2092| Block 0 -# 2092| v2092_1(void) = EnterFunction : -# 2092| m2092_2(unknown) = AliasedDefinition : -# 2092| m2092_3(unknown) = InitializeNonLocal : -# 2092| m2092_4(unknown) = Chi : total:m2092_2, partial:m2092_3 -# 2093| r2093_1(glval) = VariableAddress[x] : -# 2093| r2093_2(glval) = FunctionAddress[Add] : -# 2093| r2093_3(int) = Constant[3] : -# 2093| r2093_4(int) = Constant[4] : -# 2093| r2093_5(int) = Call[Add] : func:r2093_2, 0:r2093_3, 1:r2093_4 -# 2093| m2093_6(unknown) = ^CallSideEffect : ~m2092_4 -# 2093| m2093_7(unknown) = Chi : total:m2092_4, partial:m2093_6 -# 2093| m2093_8(int) = Store[x] : &:r2093_1, r2093_5 -# 2094| r2094_1(glval) = VariableAddress[x] : -# 2094| r2094_2(int) = Load[x] : &:r2094_1, m2093_8 -# 2094| r2094_3(int) = Constant[7] : -# 2094| r2094_4(bool) = CompareEQ : r2094_2, r2094_3 -# 2094| v2094_5(void) = ConditionalBranch : r2094_4 -#-----| False -> Block 2 -#-----| True -> Block 1 +# 2092| v2092_1(void) = EnterFunction : +# 2092| m2092_2(unknown) = AliasedDefinition : +# 2092| m2092_3(unknown) = InitializeNonLocal : +# 2092| m2092_4(unknown) = Chi : total:m2092_2, partial:m2092_3 +# 2092| r2092_5(glval) = VariableAddress[#this] : +# 2092| m2092_6(glval) = InitializeParameter[#this] : &:r2092_5 +# 2092| r2092_7(glval) = Load[#this] : &:r2092_5, m2092_6 +# 2092| m2092_8(Base2) = InitializeIndirection[#this] : &:r2092_7 +# 2092| v2092_9(void) = NoOp : +# 2092| v2092_10(void) = ReturnIndirection[#this] : &:r2092_7, m2092_8 +# 2092| v2092_11(void) = ReturnVoid : +# 2092| v2092_12(void) = AliasedUse : m2092_3 +# 2092| v2092_13(void) = ExitFunction : -# 2095| Block 1 -# 2095| r2095_1(glval) = FunctionAddress[CallsNonExit] : -# 2095| v2095_2(void) = Call[CallsNonExit] : func:r2095_1 -# 2092| v2092_5(void) = Unreached : +# 2095| void Derived2::Derived2() +# 2095| Block 0 +# 2095| v2095_1(void) = EnterFunction : +# 2095| m2095_2(unknown) = AliasedDefinition : +# 2095| m2095_3(unknown) = InitializeNonLocal : +# 2095| m2095_4(unknown) = Chi : total:m2095_2, partial:m2095_3 +# 2095| r2095_5(glval) = VariableAddress[#this] : +# 2095| m2095_6(glval) = InitializeParameter[#this] : &:r2095_5 +# 2095| r2095_7(glval) = Load[#this] : &:r2095_5, m2095_6 +# 2095| m2095_8(Derived2) = InitializeIndirection[#this] : &:r2095_7 +# 2095| r2095_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : m2095_6 +# 2095| r2095_10(glval) = FunctionAddress[Base2] : +# 2095| v2095_11(void) = Call[Base2] : func:r2095_10, this:r2095_9 +# 2095| m2095_12(unknown) = ^CallSideEffect : ~m2095_4 +# 2095| m2095_13(unknown) = Chi : total:m2095_4, partial:m2095_12 +# 2095| m2095_14(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2095_9 +# 2095| m2095_15(unknown) = Chi : total:m2095_8, partial:m2095_14 +# 2095| v2095_16(void) = NoOp : +# 2095| v2095_17(void) = ReturnIndirection[#this] : &:r2095_7, m2095_15 +# 2095| v2095_18(void) = ReturnVoid : +# 2095| v2095_19(void) = AliasedUse : ~m2095_13 +# 2095| v2095_20(void) = ExitFunction : -# 2096| Block 2 -# 2096| r2096_1(glval) = FunctionAddress[VoidFunc] : -# 2096| v2096_2(void) = Call[VoidFunc] : func:r2096_1 -# 2096| m2096_3(unknown) = ^CallSideEffect : ~m2093_7 -# 2096| m2096_4(unknown) = Chi : total:m2093_7, partial:m2096_3 -# 2097| r2097_1(glval) = VariableAddress[#return] : -# 2097| r2097_2(glval) = VariableAddress[x] : -# 2097| r2097_3(int) = Load[x] : &:r2097_2, m2093_8 -# 2097| m2097_4(int) = Store[#return] : &:r2097_1, r2097_3 -# 2092| r2092_6(glval) = VariableAddress[#return] : -# 2092| v2092_7(void) = ReturnValue : &:r2092_6, m2097_4 -# 2092| v2092_8(void) = AliasedUse : ~m2096_4 -# 2092| v2092_9(void) = ExitFunction : +# 2098| void Derived2::~Derived2() +# 2098| Block 0 +# 2098| v2098_1(void) = EnterFunction : +# 2098| m2098_2(unknown) = AliasedDefinition : +# 2098| m2098_3(unknown) = InitializeNonLocal : +# 2098| m2098_4(unknown) = Chi : total:m2098_2, partial:m2098_3 +# 2098| r2098_5(glval) = VariableAddress[#this] : +# 2098| m2098_6(glval) = InitializeParameter[#this] : &:r2098_5 +# 2098| r2098_7(glval) = Load[#this] : &:r2098_5, m2098_6 +# 2098| m2098_8(Derived2) = InitializeIndirection[#this] : &:r2098_7 +# 2098| v2098_9(void) = NoOp : +# 2098| r2098_10(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : m2098_6 +# 2098| r2098_11(glval) = FunctionAddress[~Base2] : +# 2098| v2098_12(void) = Call[~Base2] : func:r2098_11, this:r2098_10 +# 2098| m2098_13(unknown) = ^CallSideEffect : ~m2098_4 +# 2098| m2098_14(unknown) = Chi : total:m2098_4, partial:m2098_13 +# 2098| v2098_15(void) = ReturnIndirection[#this] : &:r2098_7, m2098_8 +# 2098| v2098_16(void) = ReturnVoid : +# 2098| v2098_17(void) = AliasedUse : ~m2098_14 +# 2098| v2098_18(void) = ExitFunction : -# 2100| void newArrayCorrectType(size_t) +# 2100| void Derived2::operator delete(void*) # 2100| Block 0 -# 2100| v2100_1(void) = EnterFunction : -# 2100| m2100_2(unknown) = AliasedDefinition : -# 2100| m2100_3(unknown) = InitializeNonLocal : -# 2100| m2100_4(unknown) = Chi : total:m2100_2, partial:m2100_3 -# 2100| r2100_5(glval) = VariableAddress[n] : -# 2100| m2100_6(unsigned long) = InitializeParameter[n] : &:r2100_5 -# 2101| r2101_1(glval) = FunctionAddress[operator new[]] : -# 2101| r2101_2(glval) = VariableAddress[n] : -# 2101| r2101_3(unsigned long) = Load[n] : &:r2101_2, m2100_6 -# 2101| r2101_4(unsigned long) = Constant[4] : -# 2101| r2101_5(unsigned long) = Mul : r2101_3, r2101_4 -# 2101| r2101_6(void *) = Call[operator new[]] : func:r2101_1, 0:r2101_5 -# 2101| m2101_7(unknown) = ^CallSideEffect : ~m2100_4 -# 2101| m2101_8(unknown) = Chi : total:m2100_4, partial:m2101_7 -# 2101| m2101_9(unknown) = ^InitializeDynamicAllocation : &:r2101_6 -# 2101| r2101_10(int *) = Convert : r2101_6 -# 2102| r2102_1(glval) = FunctionAddress[operator new[]] : -# 2102| r2102_2(glval) = VariableAddress[n] : -# 2102| r2102_3(unsigned long) = Load[n] : &:r2102_2, m2100_6 -# 2102| r2102_4(unsigned long) = Constant[4] : -# 2102| r2102_5(unsigned long) = Mul : r2102_3, r2102_4 -# 2102| r2102_6(float) = Constant[1.0] : -# 2102| r2102_7(void *) = Call[operator new[]] : func:r2102_1, 0:r2102_5, 1:r2102_6 -# 2102| m2102_8(unknown) = ^CallSideEffect : ~m2101_8 -# 2102| m2102_9(unknown) = Chi : total:m2101_8, partial:m2102_8 -# 2102| m2102_10(unknown) = ^InitializeDynamicAllocation : &:r2102_7 -# 2102| r2102_11(int *) = Convert : r2102_7 -# 2103| r2103_1(glval) = FunctionAddress[operator new[]] : -# 2103| r2103_2(glval) = VariableAddress[n] : -# 2103| r2103_3(unsigned long) = Load[n] : &:r2103_2, m2100_6 -# 2103| r2103_4(unsigned long) = Constant[8] : -# 2103| r2103_5(unsigned long) = Mul : r2103_3, r2103_4 -# 2103| r2103_6(void *) = Call[operator new[]] : func:r2103_1, 0:r2103_5 -# 2103| m2103_7(unknown) = ^CallSideEffect : ~m2102_9 -# 2103| m2103_8(unknown) = Chi : total:m2102_9, partial:m2103_7 -# 2103| m2103_9(unknown) = ^InitializeDynamicAllocation : &:r2103_6 -# 2103| r2103_10(String *) = Convert : r2103_6 -# 2104| r2104_1(glval) = FunctionAddress[operator new[]] : -# 2104| r2104_2(glval) = VariableAddress[n] : -# 2104| r2104_3(unsigned long) = Load[n] : &:r2104_2, m2100_6 -# 2104| r2104_4(unsigned long) = Constant[256] : -# 2104| r2104_5(unsigned long) = Mul : r2104_3, r2104_4 -# 2104| r2104_6(align_val_t) = Constant[128] : -# 2104| r2104_7(void *) = Call[operator new[]] : func:r2104_1, 0:r2104_5, 1:r2104_6 -# 2104| m2104_8(unknown) = ^CallSideEffect : ~m2103_8 -# 2104| m2104_9(unknown) = Chi : total:m2103_8, partial:m2104_8 -# 2104| m2104_10(unknown) = ^InitializeDynamicAllocation : &:r2104_7 -# 2104| r2104_11(Overaligned *) = Convert : r2104_7 -# 2105| r2105_1(glval) = FunctionAddress[operator new[]] : -# 2105| r2105_2(glval) = VariableAddress[n] : -# 2105| r2105_3(unsigned long) = Load[n] : &:r2105_2, m2100_6 -# 2105| r2105_4(unsigned long) = Constant[1] : -# 2105| r2105_5(unsigned long) = Mul : r2105_3, r2105_4 -# 2105| r2105_6(void *) = Call[operator new[]] : func:r2105_1, 0:r2105_5 -# 2105| m2105_7(unknown) = ^CallSideEffect : ~m2104_9 -# 2105| m2105_8(unknown) = Chi : total:m2104_9, partial:m2105_7 -# 2105| m2105_9(unknown) = ^InitializeDynamicAllocation : &:r2105_6 -# 2105| r2105_10(DefaultCtorWithDefaultParam *) = Convert : r2105_6 -# 2106| r2106_1(glval) = FunctionAddress[operator new[]] : -# 2106| r2106_2(glval) = VariableAddress[n] : -# 2106| r2106_3(unsigned long) = Load[n] : &:r2106_2, m2100_6 -# 2106| r2106_4(unsigned long) = Constant[4] : -# 2106| r2106_5(unsigned long) = Mul : r2106_3, r2106_4 -# 2106| r2106_6(void *) = Call[operator new[]] : func:r2106_1, 0:r2106_5 -# 2106| m2106_7(unknown) = ^CallSideEffect : ~m2105_8 -# 2106| m2106_8(unknown) = Chi : total:m2105_8, partial:m2106_7 -# 2106| m2106_9(unknown) = ^InitializeDynamicAllocation : &:r2106_6 -# 2106| r2106_10(int *) = Convert : r2106_6 -# 2107| v2107_1(void) = NoOp : -# 2100| v2100_7(void) = ReturnVoid : -# 2100| v2100_8(void) = AliasedUse : ~m2106_8 -# 2100| v2100_9(void) = ExitFunction : +# 2100| v2100_1(void) = EnterFunction : +# 2100| m2100_2(unknown) = AliasedDefinition : +# 2100| m2100_3(unknown) = InitializeNonLocal : +# 2100| m2100_4(unknown) = Chi : total:m2100_2, partial:m2100_3 +# 2100| r2100_5(glval) = VariableAddress[p] : +# 2100| m2100_6(void *) = InitializeParameter[p] : &:r2100_5 +# 2100| r2100_7(void *) = Load[p] : &:r2100_5, m2100_6 +# 2100| m2100_8(unknown) = InitializeIndirection[p] : &:r2100_7 +# 2101| v2101_1(void) = NoOp : +# 2100| v2100_9(void) = ReturnIndirection[p] : &:r2100_7, m2100_8 +# 2100| v2100_10(void) = ReturnVoid : +# 2100| v2100_11(void) = AliasedUse : m2100_3 +# 2100| v2100_12(void) = ExitFunction : -# 2111| char* test_strtod(char*) -# 2111| Block 0 -# 2111| v2111_1(void) = EnterFunction : -# 2111| m2111_2(unknown) = AliasedDefinition : -# 2111| m2111_3(unknown) = InitializeNonLocal : -# 2111| m2111_4(unknown) = Chi : total:m2111_2, partial:m2111_3 -# 2111| r2111_5(glval) = VariableAddress[s] : -# 2111| m2111_6(char *) = InitializeParameter[s] : &:r2111_5 -# 2111| r2111_7(char *) = Load[s] : &:r2111_5, m2111_6 -# 2111| m2111_8(unknown) = InitializeIndirection[s] : &:r2111_7 -# 2112| r2112_1(glval) = VariableAddress[end] : -# 2112| m2112_2(char *) = Uninitialized[end] : &:r2112_1 -# 2113| r2113_1(glval) = VariableAddress[d] : -# 2113| r2113_2(glval) = FunctionAddress[strtod] : -# 2113| r2113_3(glval) = VariableAddress[s] : -# 2113| r2113_4(char *) = Load[s] : &:r2113_3, m2111_6 -# 2113| r2113_5(char *) = Convert : r2113_4 -# 2113| r2113_6(glval) = VariableAddress[end] : -# 2113| r2113_7(char **) = CopyValue : r2113_6 -# 2113| r2113_8(double) = Call[strtod] : func:r2113_2, 0:r2113_5, 1:r2113_7 -# 2113| v2113_9(void) = ^BufferReadSideEffect[0] : &:r2113_5, ~m2111_8 -# 2113| m2113_10(char *) = ^IndirectMayWriteSideEffect[1] : &:r2113_7 -# 2113| m2113_11(char *) = Chi : total:m2112_2, partial:m2113_10 -# 2113| m2113_12(double) = Store[d] : &:r2113_1, r2113_8 -# 2114| r2114_1(glval) = VariableAddress[#return] : -# 2114| r2114_2(glval) = VariableAddress[end] : -# 2114| r2114_3(char *) = Load[end] : &:r2114_2, m2113_11 -# 2114| m2114_4(char *) = Store[#return] : &:r2114_1, r2114_3 -# 2111| v2111_9(void) = ReturnIndirection[s] : &:r2111_7, m2111_8 -# 2111| r2111_10(glval) = VariableAddress[#return] : -# 2111| v2111_11(void) = ReturnValue : &:r2111_10, m2114_4 -# 2111| v2111_12(void) = AliasedUse : m2111_3 -# 2111| v2111_13(void) = ExitFunction : +# 2105| int virtual_delete() +# 2105| Block 0 +# 2105| v2105_1(void) = EnterFunction : +# 2105| m2105_2(unknown) = AliasedDefinition : +# 2105| m2105_3(unknown) = InitializeNonLocal : +# 2105| m2105_4(unknown) = Chi : total:m2105_2, partial:m2105_3 +# 2107| r2107_1(glval) = VariableAddress[b1] : +# 2107| r2107_2(glval) = FunctionAddress[operator new] : +# 2107| r2107_3(unsigned long) = Constant[8] : +# 2107| r2107_4(void *) = Call[operator new] : func:r2107_2, 0:r2107_3 +# 2107| m2107_5(unknown) = ^CallSideEffect : ~m2105_4 +# 2107| m2107_6(unknown) = Chi : total:m2105_4, partial:m2107_5 +# 2107| m2107_7(unknown) = ^InitializeDynamicAllocation : &:r2107_4 +# 2107| r2107_8(Base2 *) = Convert : r2107_4 +# 2107| r2107_9(glval) = FunctionAddress[Base2] : +# 2107| v2107_10(void) = Call[Base2] : func:r2107_9, this:r2107_8 +# 2107| m2107_11(unknown) = ^CallSideEffect : ~m2107_6 +# 2107| m2107_12(unknown) = Chi : total:m2107_6, partial:m2107_11 +# 2107| m2107_13(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2107_8 +# 2107| m2107_14(unknown) = Chi : total:m2107_7, partial:m2107_13 +# 2107| m2107_15(Base2 *) = Store[b1] : &:r2107_1, r2107_8 +# 2108| r2108_1(glval) = VirtualDeleteFunctionAddress : +# 2108| r2108_2(glval) = VariableAddress[b1] : +# 2108| r2108_3(Base2 *) = Load[b1] : &:r2108_2, m2107_15 +# 2108| v2108_4(void) = Call[?] : func:r2108_1, 0:r2108_3 +# 2108| m2108_5(unknown) = ^CallSideEffect : ~m2107_12 +# 2108| m2108_6(unknown) = Chi : total:m2107_12, partial:m2108_5 +# 2110| r2110_1(glval) = VariableAddress[b2] : +# 2110| r2110_2(glval) = FunctionAddress[operator new] : +# 2110| r2110_3(unsigned long) = Constant[16] : +# 2110| r2110_4(void *) = Call[operator new] : func:r2110_2, 0:r2110_3 +# 2110| m2110_5(unknown) = ^CallSideEffect : ~m2108_6 +# 2110| m2110_6(unknown) = Chi : total:m2108_6, partial:m2110_5 +# 2110| m2110_7(unknown) = ^InitializeDynamicAllocation : &:r2110_4 +# 2110| r2110_8(Derived2 *) = Convert : r2110_4 +# 2110| r2110_9(glval) = FunctionAddress[Derived2] : +# 2110| v2110_10(void) = Call[Derived2] : func:r2110_9, this:r2110_8 +# 2110| m2110_11(unknown) = ^CallSideEffect : ~m2110_6 +# 2110| m2110_12(unknown) = Chi : total:m2110_6, partial:m2110_11 +# 2110| m2110_13(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2110_8 +# 2110| m2110_14(unknown) = Chi : total:m2110_7, partial:m2110_13 +# 2110| r2110_15(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2110_8 +# 2110| m2110_16(Base2 *) = Store[b2] : &:r2110_1, r2110_15 +# 2111| r2111_1(glval) = VirtualDeleteFunctionAddress : +# 2111| r2111_2(glval) = VariableAddress[b2] : +# 2111| r2111_3(Base2 *) = Load[b2] : &:r2111_2, m2110_16 +# 2111| v2111_4(void) = Call[?] : func:r2111_1, 0:r2111_3 +# 2111| m2111_5(unknown) = ^CallSideEffect : ~m2110_12 +# 2111| m2111_6(unknown) = Chi : total:m2110_12, partial:m2111_5 +# 2113| r2113_1(glval) = VariableAddress[d] : +# 2113| r2113_2(glval) = FunctionAddress[operator new] : +# 2113| r2113_3(unsigned long) = Constant[16] : +# 2113| r2113_4(void *) = Call[operator new] : func:r2113_2, 0:r2113_3 +# 2113| m2113_5(unknown) = ^CallSideEffect : ~m2111_6 +# 2113| m2113_6(unknown) = Chi : total:m2111_6, partial:m2113_5 +# 2113| m2113_7(unknown) = ^InitializeDynamicAllocation : &:r2113_4 +# 2113| r2113_8(Derived2 *) = Convert : r2113_4 +# 2113| r2113_9(glval) = FunctionAddress[Derived2] : +# 2113| v2113_10(void) = Call[Derived2] : func:r2113_9, this:r2113_8 +# 2113| m2113_11(unknown) = ^CallSideEffect : ~m2113_6 +# 2113| m2113_12(unknown) = Chi : total:m2113_6, partial:m2113_11 +# 2113| m2113_13(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2113_8 +# 2113| m2113_14(unknown) = Chi : total:m2113_7, partial:m2113_13 +# 2113| m2113_15(Derived2 *) = Store[d] : &:r2113_1, r2113_8 +# 2114| r2114_1(glval) = VirtualDeleteFunctionAddress : +# 2114| r2114_2(glval) = VariableAddress[d] : +# 2114| r2114_3(Derived2 *) = Load[d] : &:r2114_2, m2113_15 +# 2114| v2114_4(void) = Call[?] : func:r2114_1, 0:r2114_3 +# 2114| m2114_5(unknown) = ^CallSideEffect : ~m2113_12 +# 2114| m2114_6(unknown) = Chi : total:m2113_12, partial:m2114_5 +# 2115| r2115_1(glval) = VariableAddress[#return] : +# 2115| m2115_2(int) = Uninitialized[#return] : &:r2115_1 +# 2105| r2105_5(glval) = VariableAddress[#return] : +# 2105| v2105_6(void) = ReturnValue : &:r2105_5, m2115_2 +# 2105| v2105_7(void) = AliasedUse : ~m2114_6 +# 2105| v2105_8(void) = ExitFunction : -# 2121| void call_as_child_of_ConditionDeclExpr() -# 2121| Block 0 -# 2121| v2121_1(void) = EnterFunction : -# 2121| m2121_2(unknown) = AliasedDefinition : -# 2121| m2121_3(unknown) = InitializeNonLocal : -# 2121| m2121_4(unknown) = Chi : total:m2121_2, partial:m2121_3 -# 2122| r2122_1(glval) = VariableAddress[b] : -# 2122| r2122_2(HasOperatorBool) = Constant[0] : -# 2122| m2122_3(HasOperatorBool) = Store[b] : &:r2122_1, r2122_2 -# 2122| r2122_4(glval) = VariableAddress[b] : -# 2122| r2122_5(glval) = FunctionAddress[operator bool] : -# 2122| r2122_6(bool) = Call[operator bool] : func:r2122_5, this:r2122_4 -# 2122| m2122_7(unknown) = ^CallSideEffect : ~m2121_4 -# 2122| m2122_8(unknown) = Chi : total:m2121_4, partial:m2122_7 -# 2122| v2122_9(void) = ^IndirectReadSideEffect[-1] : &:r2122_4, m2122_3 -# 2122| m2122_10(HasOperatorBool) = ^IndirectMayWriteSideEffect[-1] : &:r2122_4 -# 2122| m2122_11(HasOperatorBool) = Chi : total:m2122_3, partial:m2122_10 -# 2122| r2122_12(bool) = CopyValue : r2122_6 -# 2122| v2122_13(void) = ConditionalBranch : r2122_12 +# 2119| void test_constant_folding() +# 2119| Block 0 +# 2119| v2119_1(void) = EnterFunction : +# 2119| m2119_2(unknown) = AliasedDefinition : +# 2119| m2119_3(unknown) = InitializeNonLocal : +# 2119| m2119_4(unknown) = Chi : total:m2119_2, partial:m2119_3 +# 2120| r2120_1(glval) = VariableAddress[x] : +# 2120| r2120_2(int) = Constant[116] : +# 2120| m2120_3(int) = Store[x] : &:r2120_1, r2120_2 +# 2121| r2121_1(glval) = FunctionAddress[test_constant_folding_use] : +# 2121| r2121_2(int) = Constant[116] : +# 2121| v2121_3(void) = Call[test_constant_folding_use] : func:r2121_1, 0:r2121_2 +# 2121| m2121_4(unknown) = ^CallSideEffect : ~m2119_4 +# 2121| m2121_5(unknown) = Chi : total:m2119_4, partial:m2121_4 +# 2122| v2122_1(void) = NoOp : +# 2119| v2119_5(void) = ReturnVoid : +# 2119| v2119_6(void) = AliasedUse : ~m2121_5 +# 2119| v2119_7(void) = ExitFunction : + +# 2126| int NonExit() +# 2126| Block 0 +# 2126| v2126_1(void) = EnterFunction : +# 2126| m2126_2(unknown) = AliasedDefinition : +# 2126| m2126_3(unknown) = InitializeNonLocal : +# 2126| m2126_4(unknown) = Chi : total:m2126_2, partial:m2126_3 +# 2127| r2127_1(glval) = VariableAddress[x] : +# 2127| r2127_2(glval) = FunctionAddress[Add] : +# 2127| r2127_3(int) = Constant[3] : +# 2127| r2127_4(int) = Constant[4] : +# 2127| r2127_5(int) = Call[Add] : func:r2127_2, 0:r2127_3, 1:r2127_4 +# 2127| m2127_6(unknown) = ^CallSideEffect : ~m2126_4 +# 2127| m2127_7(unknown) = Chi : total:m2126_4, partial:m2127_6 +# 2127| m2127_8(int) = Store[x] : &:r2127_1, r2127_5 +# 2128| r2128_1(glval) = VariableAddress[x] : +# 2128| r2128_2(int) = Load[x] : &:r2128_1, m2127_8 +# 2128| r2128_3(int) = Constant[7] : +# 2128| r2128_4(bool) = CompareEQ : r2128_2, r2128_3 +# 2128| v2128_5(void) = ConditionalBranch : r2128_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 2122| Block 1 -# 2122| v2122_14(void) = NoOp : +# 2129| Block 1 +# 2129| r2129_1(glval) = FunctionAddress[exit] : +# 2129| r2129_2(int) = Constant[3] : +# 2129| v2129_3(void) = Call[exit] : func:r2129_1, 0:r2129_2 +# 2129| m2129_4(unknown) = ^CallSideEffect : ~m2127_7 +# 2129| m2129_5(unknown) = Chi : total:m2127_7, partial:m2129_4 +# 2126| v2126_5(void) = Unreached : + +# 2130| Block 2 +# 2130| r2130_1(glval) = FunctionAddress[VoidFunc] : +# 2130| v2130_2(void) = Call[VoidFunc] : func:r2130_1 +# 2130| m2130_3(unknown) = ^CallSideEffect : ~m2127_7 +# 2130| m2130_4(unknown) = Chi : total:m2127_7, partial:m2130_3 +# 2131| r2131_1(glval) = VariableAddress[#return] : +# 2131| r2131_2(glval) = VariableAddress[x] : +# 2131| r2131_3(int) = Load[x] : &:r2131_2, m2127_8 +# 2131| m2131_4(int) = Store[#return] : &:r2131_1, r2131_3 +# 2126| r2126_6(glval) = VariableAddress[#return] : +# 2126| v2126_7(void) = ReturnValue : &:r2126_6, m2131_4 +# 2126| v2126_8(void) = AliasedUse : ~m2130_4 +# 2126| v2126_9(void) = ExitFunction : + +# 2134| void CallsNonExit() +# 2134| Block 0 +# 2134| v2134_1(void) = EnterFunction : +# 2134| m2134_2(unknown) = AliasedDefinition : +# 2134| m2134_3(unknown) = InitializeNonLocal : +# 2134| m2134_4(unknown) = Chi : total:m2134_2, partial:m2134_3 +# 2135| r2135_1(glval) = FunctionAddress[VoidFunc] : +# 2135| v2135_2(void) = Call[VoidFunc] : func:r2135_1 +# 2135| m2135_3(unknown) = ^CallSideEffect : ~m2134_4 +# 2135| m2135_4(unknown) = Chi : total:m2134_4, partial:m2135_3 +# 2136| r2136_1(glval) = FunctionAddress[exit] : +# 2136| r2136_2(int) = Constant[3] : +# 2136| v2136_3(void) = Call[exit] : func:r2136_1, 0:r2136_2 +# 2136| m2136_4(unknown) = ^CallSideEffect : ~m2135_4 +# 2136| m2136_5(unknown) = Chi : total:m2135_4, partial:m2136_4 +# 2134| v2134_5(void) = Unreached : + +# 2139| int TransNonExit() +# 2139| Block 0 +# 2139| v2139_1(void) = EnterFunction : +# 2139| m2139_2(unknown) = AliasedDefinition : +# 2139| m2139_3(unknown) = InitializeNonLocal : +# 2139| m2139_4(unknown) = Chi : total:m2139_2, partial:m2139_3 +# 2140| r2140_1(glval) = VariableAddress[x] : +# 2140| r2140_2(glval) = FunctionAddress[Add] : +# 2140| r2140_3(int) = Constant[3] : +# 2140| r2140_4(int) = Constant[4] : +# 2140| r2140_5(int) = Call[Add] : func:r2140_2, 0:r2140_3, 1:r2140_4 +# 2140| m2140_6(unknown) = ^CallSideEffect : ~m2139_4 +# 2140| m2140_7(unknown) = Chi : total:m2139_4, partial:m2140_6 +# 2140| m2140_8(int) = Store[x] : &:r2140_1, r2140_5 +# 2141| r2141_1(glval) = VariableAddress[x] : +# 2141| r2141_2(int) = Load[x] : &:r2141_1, m2140_8 +# 2141| r2141_3(int) = Constant[7] : +# 2141| r2141_4(bool) = CompareEQ : r2141_2, r2141_3 +# 2141| v2141_5(void) = ConditionalBranch : r2141_4 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2142| Block 1 +# 2142| r2142_1(glval) = FunctionAddress[CallsNonExit] : +# 2142| v2142_2(void) = Call[CallsNonExit] : func:r2142_1 +# 2139| v2139_5(void) = Unreached : + +# 2143| Block 2 +# 2143| r2143_1(glval) = FunctionAddress[VoidFunc] : +# 2143| v2143_2(void) = Call[VoidFunc] : func:r2143_1 +# 2143| m2143_3(unknown) = ^CallSideEffect : ~m2140_7 +# 2143| m2143_4(unknown) = Chi : total:m2140_7, partial:m2143_3 +# 2144| r2144_1(glval) = VariableAddress[#return] : +# 2144| r2144_2(glval) = VariableAddress[x] : +# 2144| r2144_3(int) = Load[x] : &:r2144_2, m2140_8 +# 2144| m2144_4(int) = Store[#return] : &:r2144_1, r2144_3 +# 2139| r2139_6(glval) = VariableAddress[#return] : +# 2139| v2139_7(void) = ReturnValue : &:r2139_6, m2144_4 +# 2139| v2139_8(void) = AliasedUse : ~m2143_4 +# 2139| v2139_9(void) = ExitFunction : + +# 2147| void newArrayCorrectType(size_t) +# 2147| Block 0 +# 2147| v2147_1(void) = EnterFunction : +# 2147| m2147_2(unknown) = AliasedDefinition : +# 2147| m2147_3(unknown) = InitializeNonLocal : +# 2147| m2147_4(unknown) = Chi : total:m2147_2, partial:m2147_3 +# 2147| r2147_5(glval) = VariableAddress[n] : +# 2147| m2147_6(unsigned long) = InitializeParameter[n] : &:r2147_5 +# 2148| r2148_1(glval) = FunctionAddress[operator new[]] : +# 2148| r2148_2(glval) = VariableAddress[n] : +# 2148| r2148_3(unsigned long) = Load[n] : &:r2148_2, m2147_6 +# 2148| r2148_4(unsigned long) = Constant[4] : +# 2148| r2148_5(unsigned long) = Mul : r2148_3, r2148_4 +# 2148| r2148_6(void *) = Call[operator new[]] : func:r2148_1, 0:r2148_5 +# 2148| m2148_7(unknown) = ^CallSideEffect : ~m2147_4 +# 2148| m2148_8(unknown) = Chi : total:m2147_4, partial:m2148_7 +# 2148| m2148_9(unknown) = ^InitializeDynamicAllocation : &:r2148_6 +# 2148| r2148_10(int *) = Convert : r2148_6 +# 2149| r2149_1(glval) = FunctionAddress[operator new[]] : +# 2149| r2149_2(glval) = VariableAddress[n] : +# 2149| r2149_3(unsigned long) = Load[n] : &:r2149_2, m2147_6 +# 2149| r2149_4(unsigned long) = Constant[4] : +# 2149| r2149_5(unsigned long) = Mul : r2149_3, r2149_4 +# 2149| r2149_6(float) = Constant[1.0] : +# 2149| r2149_7(void *) = Call[operator new[]] : func:r2149_1, 0:r2149_5, 1:r2149_6 +# 2149| m2149_8(unknown) = ^CallSideEffect : ~m2148_8 +# 2149| m2149_9(unknown) = Chi : total:m2148_8, partial:m2149_8 +# 2149| m2149_10(unknown) = ^InitializeDynamicAllocation : &:r2149_7 +# 2149| r2149_11(int *) = Convert : r2149_7 +# 2150| r2150_1(glval) = FunctionAddress[operator new[]] : +# 2150| r2150_2(glval) = VariableAddress[n] : +# 2150| r2150_3(unsigned long) = Load[n] : &:r2150_2, m2147_6 +# 2150| r2150_4(unsigned long) = Constant[8] : +# 2150| r2150_5(unsigned long) = Mul : r2150_3, r2150_4 +# 2150| r2150_6(void *) = Call[operator new[]] : func:r2150_1, 0:r2150_5 +# 2150| m2150_7(unknown) = ^CallSideEffect : ~m2149_9 +# 2150| m2150_8(unknown) = Chi : total:m2149_9, partial:m2150_7 +# 2150| m2150_9(unknown) = ^InitializeDynamicAllocation : &:r2150_6 +# 2150| r2150_10(String *) = Convert : r2150_6 +# 2151| r2151_1(glval) = FunctionAddress[operator new[]] : +# 2151| r2151_2(glval) = VariableAddress[n] : +# 2151| r2151_3(unsigned long) = Load[n] : &:r2151_2, m2147_6 +# 2151| r2151_4(unsigned long) = Constant[256] : +# 2151| r2151_5(unsigned long) = Mul : r2151_3, r2151_4 +# 2151| r2151_6(align_val_t) = Constant[128] : +# 2151| r2151_7(void *) = Call[operator new[]] : func:r2151_1, 0:r2151_5, 1:r2151_6 +# 2151| m2151_8(unknown) = ^CallSideEffect : ~m2150_8 +# 2151| m2151_9(unknown) = Chi : total:m2150_8, partial:m2151_8 +# 2151| m2151_10(unknown) = ^InitializeDynamicAllocation : &:r2151_7 +# 2151| r2151_11(Overaligned *) = Convert : r2151_7 +# 2152| r2152_1(glval) = FunctionAddress[operator new[]] : +# 2152| r2152_2(glval) = VariableAddress[n] : +# 2152| r2152_3(unsigned long) = Load[n] : &:r2152_2, m2147_6 +# 2152| r2152_4(unsigned long) = Constant[1] : +# 2152| r2152_5(unsigned long) = Mul : r2152_3, r2152_4 +# 2152| r2152_6(void *) = Call[operator new[]] : func:r2152_1, 0:r2152_5 +# 2152| m2152_7(unknown) = ^CallSideEffect : ~m2151_9 +# 2152| m2152_8(unknown) = Chi : total:m2151_9, partial:m2152_7 +# 2152| m2152_9(unknown) = ^InitializeDynamicAllocation : &:r2152_6 +# 2152| r2152_10(DefaultCtorWithDefaultParam *) = Convert : r2152_6 +# 2153| r2153_1(glval) = FunctionAddress[operator new[]] : +# 2153| r2153_2(glval) = VariableAddress[n] : +# 2153| r2153_3(unsigned long) = Load[n] : &:r2153_2, m2147_6 +# 2153| r2153_4(unsigned long) = Constant[4] : +# 2153| r2153_5(unsigned long) = Mul : r2153_3, r2153_4 +# 2153| r2153_6(void *) = Call[operator new[]] : func:r2153_1, 0:r2153_5 +# 2153| m2153_7(unknown) = ^CallSideEffect : ~m2152_8 +# 2153| m2153_8(unknown) = Chi : total:m2152_8, partial:m2153_7 +# 2153| m2153_9(unknown) = ^InitializeDynamicAllocation : &:r2153_6 +# 2153| r2153_10(int *) = Convert : r2153_6 +# 2154| v2154_1(void) = NoOp : +# 2147| v2147_7(void) = ReturnVoid : +# 2147| v2147_8(void) = AliasedUse : ~m2153_8 +# 2147| v2147_9(void) = ExitFunction : + +# 2158| char* test_strtod(char*) +# 2158| Block 0 +# 2158| v2158_1(void) = EnterFunction : +# 2158| m2158_2(unknown) = AliasedDefinition : +# 2158| m2158_3(unknown) = InitializeNonLocal : +# 2158| m2158_4(unknown) = Chi : total:m2158_2, partial:m2158_3 +# 2158| r2158_5(glval) = VariableAddress[s] : +# 2158| m2158_6(char *) = InitializeParameter[s] : &:r2158_5 +# 2158| r2158_7(char *) = Load[s] : &:r2158_5, m2158_6 +# 2158| m2158_8(unknown) = InitializeIndirection[s] : &:r2158_7 +# 2159| r2159_1(glval) = VariableAddress[end] : +# 2159| m2159_2(char *) = Uninitialized[end] : &:r2159_1 +# 2160| r2160_1(glval) = VariableAddress[d] : +# 2160| r2160_2(glval) = FunctionAddress[strtod] : +# 2160| r2160_3(glval) = VariableAddress[s] : +# 2160| r2160_4(char *) = Load[s] : &:r2160_3, m2158_6 +# 2160| r2160_5(char *) = Convert : r2160_4 +# 2160| r2160_6(glval) = VariableAddress[end] : +# 2160| r2160_7(char **) = CopyValue : r2160_6 +# 2160| r2160_8(double) = Call[strtod] : func:r2160_2, 0:r2160_5, 1:r2160_7 +# 2160| v2160_9(void) = ^BufferReadSideEffect[0] : &:r2160_5, ~m2158_8 +# 2160| m2160_10(char *) = ^IndirectMayWriteSideEffect[1] : &:r2160_7 +# 2160| m2160_11(char *) = Chi : total:m2159_2, partial:m2160_10 +# 2160| m2160_12(double) = Store[d] : &:r2160_1, r2160_8 +# 2161| r2161_1(glval) = VariableAddress[#return] : +# 2161| r2161_2(glval) = VariableAddress[end] : +# 2161| r2161_3(char *) = Load[end] : &:r2161_2, m2160_11 +# 2161| m2161_4(char *) = Store[#return] : &:r2161_1, r2161_3 +# 2158| v2158_9(void) = ReturnIndirection[s] : &:r2158_7, m2158_8 +# 2158| r2158_10(glval) = VariableAddress[#return] : +# 2158| v2158_11(void) = ReturnValue : &:r2158_10, m2161_4 +# 2158| v2158_12(void) = AliasedUse : m2158_3 +# 2158| v2158_13(void) = ExitFunction : + +# 2168| void call_as_child_of_ConditionDeclExpr() +# 2168| Block 0 +# 2168| v2168_1(void) = EnterFunction : +# 2168| m2168_2(unknown) = AliasedDefinition : +# 2168| m2168_3(unknown) = InitializeNonLocal : +# 2168| m2168_4(unknown) = Chi : total:m2168_2, partial:m2168_3 +# 2169| r2169_1(glval) = VariableAddress[b] : +# 2169| r2169_2(HasOperatorBool) = Constant[0] : +# 2169| m2169_3(HasOperatorBool) = Store[b] : &:r2169_1, r2169_2 +# 2169| r2169_4(glval) = VariableAddress[b] : +# 2169| r2169_5(glval) = FunctionAddress[operator bool] : +# 2169| r2169_6(bool) = Call[operator bool] : func:r2169_5, this:r2169_4 +# 2169| m2169_7(unknown) = ^CallSideEffect : ~m2168_4 +# 2169| m2169_8(unknown) = Chi : total:m2168_4, partial:m2169_7 +# 2169| v2169_9(void) = ^IndirectReadSideEffect[-1] : &:r2169_4, m2169_3 +# 2169| m2169_10(HasOperatorBool) = ^IndirectMayWriteSideEffect[-1] : &:r2169_4 +# 2169| m2169_11(HasOperatorBool) = Chi : total:m2169_3, partial:m2169_10 +# 2169| r2169_12(bool) = CopyValue : r2169_6 +# 2169| v2169_13(void) = ConditionalBranch : r2169_12 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2169| Block 1 +# 2169| v2169_14(void) = NoOp : #-----| Goto -> Block 2 -# 2123| Block 2 -# 2123| v2123_1(void) = NoOp : -# 2121| v2121_5(void) = ReturnVoid : -# 2121| v2121_6(void) = AliasedUse : ~m2122_8 -# 2121| v2121_7(void) = ExitFunction : +# 2170| Block 2 +# 2170| v2170_1(void) = NoOp : +# 2168| v2168_5(void) = ReturnVoid : +# 2168| v2168_6(void) = AliasedUse : ~m2169_8 +# 2168| v2168_7(void) = ExitFunction : -# 2125| void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) -# 2125| Block 0 -# 2125| v2125_1(void) = EnterFunction : -# 2125| m2125_2(unknown) = AliasedDefinition : -# 2125| m2125_3(unknown) = InitializeNonLocal : -# 2125| m2125_4(unknown) = Chi : total:m2125_2, partial:m2125_3 -# 2125| r2125_5(glval) = VariableAddress[#this] : -# 2125| m2125_6(glval) = InitializeParameter[#this] : &:r2125_5 -# 2125| r2125_7(glval) = Load[#this] : &:r2125_5, m2125_6 -# 2125| m2125_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2125_7 +# 2172| void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) +# 2172| Block 0 +# 2172| v2172_1(void) = EnterFunction : +# 2172| m2172_2(unknown) = AliasedDefinition : +# 2172| m2172_3(unknown) = InitializeNonLocal : +# 2172| m2172_4(unknown) = Chi : total:m2172_2, partial:m2172_3 +# 2172| r2172_5(glval) = VariableAddress[#this] : +# 2172| m2172_6(glval) = InitializeParameter[#this] : &:r2172_5 +# 2172| r2172_7(glval) = Load[#this] : &:r2172_5, m2172_6 +# 2172| m2172_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2172_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(ClassWithDestructor &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 2125| r2125_9(glval) = FieldAddress[x] : m2125_6 -# 2125| r2125_10(glval) = VariableAddress[(unnamed parameter 0)] : -# 2125| r2125_11(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2125_10, m0_2 -# 2125| r2125_12(glval) = CopyValue : r2125_11 -# 2125| r2125_13(glval) = FieldAddress[x] : r2125_12 -# 2125| r2125_14(char *) = Load[?] : &:r2125_13, ~m0_4 -# 2125| m2125_15(char *) = Store[?] : &:r2125_9, r2125_14 -# 2125| m2125_16(unknown) = Chi : total:m2125_8, partial:m2125_15 -# 2125| v2125_17(void) = NoOp : -# 2125| v2125_18(void) = ReturnIndirection[#this] : &:r2125_7, m2125_16 +# 2172| r2172_9(glval) = FieldAddress[x] : m2172_6 +# 2172| r2172_10(glval) = VariableAddress[(unnamed parameter 0)] : +# 2172| r2172_11(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2172_10, m0_2 +# 2172| r2172_12(glval) = CopyValue : r2172_11 +# 2172| r2172_13(glval) = FieldAddress[x] : r2172_12 +# 2172| r2172_14(char *) = Load[?] : &:r2172_13, ~m0_4 +# 2172| m2172_15(char *) = Store[?] : &:r2172_9, r2172_14 +# 2172| m2172_16(unknown) = Chi : total:m2172_8, partial:m2172_15 +# 2172| v2172_17(void) = NoOp : +# 2172| v2172_18(void) = ReturnIndirection[#this] : &:r2172_7, m2172_16 #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 2125| v2125_19(void) = ReturnVoid : -# 2125| v2125_20(void) = AliasedUse : m2125_3 -# 2125| v2125_21(void) = ExitFunction : +# 2172| v2172_19(void) = ReturnVoid : +# 2172| v2172_20(void) = AliasedUse : m2172_3 +# 2172| v2172_21(void) = ExitFunction : -# 2128| void ClassWithDestructor::ClassWithDestructor() -# 2128| Block 0 -# 2128| v2128_1(void) = EnterFunction : -# 2128| m2128_2(unknown) = AliasedDefinition : -# 2128| m2128_3(unknown) = InitializeNonLocal : -# 2128| m2128_4(unknown) = Chi : total:m2128_2, partial:m2128_3 -# 2128| r2128_5(glval) = VariableAddress[#this] : -# 2128| m2128_6(glval) = InitializeParameter[#this] : &:r2128_5 -# 2128| r2128_7(glval) = Load[#this] : &:r2128_5, m2128_6 -# 2128| m2128_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2128_7 -# 2128| r2128_9(glval) = FunctionAddress[operator new] : -# 2128| r2128_10(unsigned long) = Constant[1] : -# 2128| r2128_11(void *) = Call[operator new] : func:r2128_9, 0:r2128_10 -# 2128| m2128_12(unknown) = ^CallSideEffect : ~m2128_4 -# 2128| m2128_13(unknown) = Chi : total:m2128_4, partial:m2128_12 -# 2128| m2128_14(unknown) = ^InitializeDynamicAllocation : &:r2128_11 -# 2128| r2128_15(char *) = Convert : r2128_11 -# 2128| r2128_16(glval) = VariableAddress[#this] : -# 2128| r2128_17(ClassWithDestructor *) = Load[#this] : &:r2128_16, m2128_6 -# 2128| r2128_18(glval) = FieldAddress[x] : r2128_17 -# 2128| m2128_19(char *) = Store[?] : &:r2128_18, r2128_15 -# 2128| m2128_20(unknown) = Chi : total:m2128_8, partial:m2128_19 -# 2128| v2128_21(void) = NoOp : -# 2128| v2128_22(void) = ReturnIndirection[#this] : &:r2128_7, m2128_20 -# 2128| v2128_23(void) = ReturnVoid : -# 2128| v2128_24(void) = AliasedUse : ~m2128_13 -# 2128| v2128_25(void) = ExitFunction : +# 2175| void ClassWithDestructor::ClassWithDestructor() +# 2175| Block 0 +# 2175| v2175_1(void) = EnterFunction : +# 2175| m2175_2(unknown) = AliasedDefinition : +# 2175| m2175_3(unknown) = InitializeNonLocal : +# 2175| m2175_4(unknown) = Chi : total:m2175_2, partial:m2175_3 +# 2175| r2175_5(glval) = VariableAddress[#this] : +# 2175| m2175_6(glval) = InitializeParameter[#this] : &:r2175_5 +# 2175| r2175_7(glval) = Load[#this] : &:r2175_5, m2175_6 +# 2175| m2175_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2175_7 +# 2175| r2175_9(glval) = FunctionAddress[operator new] : +# 2175| r2175_10(unsigned long) = Constant[1] : +# 2175| r2175_11(void *) = Call[operator new] : func:r2175_9, 0:r2175_10 +# 2175| m2175_12(unknown) = ^CallSideEffect : ~m2175_4 +# 2175| m2175_13(unknown) = Chi : total:m2175_4, partial:m2175_12 +# 2175| m2175_14(unknown) = ^InitializeDynamicAllocation : &:r2175_11 +# 2175| r2175_15(char *) = Convert : r2175_11 +# 2175| r2175_16(glval) = VariableAddress[#this] : +# 2175| r2175_17(ClassWithDestructor *) = Load[#this] : &:r2175_16, m2175_6 +# 2175| r2175_18(glval) = FieldAddress[x] : r2175_17 +# 2175| m2175_19(char *) = Store[?] : &:r2175_18, r2175_15 +# 2175| m2175_20(unknown) = Chi : total:m2175_8, partial:m2175_19 +# 2175| v2175_21(void) = NoOp : +# 2175| v2175_22(void) = ReturnIndirection[#this] : &:r2175_7, m2175_20 +# 2175| v2175_23(void) = ReturnVoid : +# 2175| v2175_24(void) = AliasedUse : ~m2175_13 +# 2175| v2175_25(void) = ExitFunction : -# 2129| void ClassWithDestructor::~ClassWithDestructor() -# 2129| Block 0 -# 2129| v2129_1(void) = EnterFunction : -# 2129| m2129_2(unknown) = AliasedDefinition : -# 2129| m2129_3(unknown) = InitializeNonLocal : -# 2129| m2129_4(unknown) = Chi : total:m2129_2, partial:m2129_3 -# 2129| r2129_5(glval) = VariableAddress[#this] : -# 2129| m2129_6(glval) = InitializeParameter[#this] : &:r2129_5 -# 2129| r2129_7(glval) = Load[#this] : &:r2129_5, m2129_6 -# 2129| m2129_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2129_7 -# 2129| r2129_9(glval) = FunctionAddress[operator delete] : -# 2129| r2129_10(glval) = VariableAddress[#this] : -# 2129| r2129_11(ClassWithDestructor *) = Load[#this] : &:r2129_10, m2129_6 -# 2129| r2129_12(glval) = FieldAddress[x] : r2129_11 -# 2129| r2129_13(char *) = Load[?] : &:r2129_12, ~m2129_8 -# 2129| v2129_14(void) = Call[operator delete] : func:r2129_9, 0:r2129_13 -# 2129| m2129_15(unknown) = ^CallSideEffect : ~m2129_4 -# 2129| m2129_16(unknown) = Chi : total:m2129_4, partial:m2129_15 -# 2129| v2129_17(void) = NoOp : -# 2129| v2129_18(void) = ReturnIndirection[#this] : &:r2129_7, m2129_8 -# 2129| v2129_19(void) = ReturnVoid : -# 2129| v2129_20(void) = AliasedUse : ~m2129_16 -# 2129| v2129_21(void) = ExitFunction : +# 2176| void ClassWithDestructor::~ClassWithDestructor() +# 2176| Block 0 +# 2176| v2176_1(void) = EnterFunction : +# 2176| m2176_2(unknown) = AliasedDefinition : +# 2176| m2176_3(unknown) = InitializeNonLocal : +# 2176| m2176_4(unknown) = Chi : total:m2176_2, partial:m2176_3 +# 2176| r2176_5(glval) = VariableAddress[#this] : +# 2176| m2176_6(glval) = InitializeParameter[#this] : &:r2176_5 +# 2176| r2176_7(glval) = Load[#this] : &:r2176_5, m2176_6 +# 2176| m2176_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2176_7 +# 2176| r2176_9(glval) = FunctionAddress[operator delete] : +# 2176| r2176_10(glval) = VariableAddress[#this] : +# 2176| r2176_11(ClassWithDestructor *) = Load[#this] : &:r2176_10, m2176_6 +# 2176| r2176_12(glval) = FieldAddress[x] : r2176_11 +# 2176| r2176_13(char *) = Load[?] : &:r2176_12, ~m2176_8 +# 2176| v2176_14(void) = Call[operator delete] : func:r2176_9, 0:r2176_13 +# 2176| m2176_15(unknown) = ^CallSideEffect : ~m2176_4 +# 2176| m2176_16(unknown) = Chi : total:m2176_4, partial:m2176_15 +# 2176| v2176_17(void) = NoOp : +# 2176| v2176_18(void) = ReturnIndirection[#this] : &:r2176_7, m2176_8 +# 2176| v2176_19(void) = ReturnVoid : +# 2176| v2176_20(void) = AliasedUse : ~m2176_16 +# 2176| v2176_21(void) = ExitFunction : -# 2131| void ClassWithDestructor::set_x(char) -# 2131| Block 0 -# 2131| v2131_1(void) = EnterFunction : -# 2131| m2131_2(unknown) = AliasedDefinition : -# 2131| m2131_3(unknown) = InitializeNonLocal : -# 2131| m2131_4(unknown) = Chi : total:m2131_2, partial:m2131_3 -# 2131| r2131_5(glval) = VariableAddress[#this] : -# 2131| m2131_6(glval) = InitializeParameter[#this] : &:r2131_5 -# 2131| r2131_7(glval) = Load[#this] : &:r2131_5, m2131_6 -# 2131| m2131_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2131_7 -# 2131| r2131_9(glval) = VariableAddress[y] : -# 2131| m2131_10(char) = InitializeParameter[y] : &:r2131_9 -# 2131| r2131_11(glval) = VariableAddress[y] : -# 2131| r2131_12(char) = Load[y] : &:r2131_11, m2131_10 -# 2131| r2131_13(glval) = VariableAddress[#this] : -# 2131| r2131_14(ClassWithDestructor *) = Load[#this] : &:r2131_13, m2131_6 -# 2131| r2131_15(glval) = FieldAddress[x] : r2131_14 -# 2131| r2131_16(char *) = Load[?] : &:r2131_15, ~m2131_8 -# 2131| r2131_17(glval) = CopyValue : r2131_16 -# 2131| m2131_18(char) = Store[?] : &:r2131_17, r2131_12 -# 2131| m2131_19(unknown) = Chi : total:m2131_4, partial:m2131_18 -# 2131| v2131_20(void) = NoOp : -# 2131| v2131_21(void) = ReturnIndirection[#this] : &:r2131_7, m2131_8 -# 2131| v2131_22(void) = ReturnVoid : -# 2131| v2131_23(void) = AliasedUse : ~m2131_19 -# 2131| v2131_24(void) = ExitFunction : +# 2178| void ClassWithDestructor::set_x(char) +# 2178| Block 0 +# 2178| v2178_1(void) = EnterFunction : +# 2178| m2178_2(unknown) = AliasedDefinition : +# 2178| m2178_3(unknown) = InitializeNonLocal : +# 2178| m2178_4(unknown) = Chi : total:m2178_2, partial:m2178_3 +# 2178| r2178_5(glval) = VariableAddress[#this] : +# 2178| m2178_6(glval) = InitializeParameter[#this] : &:r2178_5 +# 2178| r2178_7(glval) = Load[#this] : &:r2178_5, m2178_6 +# 2178| m2178_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2178_7 +# 2178| r2178_9(glval) = VariableAddress[y] : +# 2178| m2178_10(char) = InitializeParameter[y] : &:r2178_9 +# 2178| r2178_11(glval) = VariableAddress[y] : +# 2178| r2178_12(char) = Load[y] : &:r2178_11, m2178_10 +# 2178| r2178_13(glval) = VariableAddress[#this] : +# 2178| r2178_14(ClassWithDestructor *) = Load[#this] : &:r2178_13, m2178_6 +# 2178| r2178_15(glval) = FieldAddress[x] : r2178_14 +# 2178| r2178_16(char *) = Load[?] : &:r2178_15, ~m2178_8 +# 2178| r2178_17(glval) = CopyValue : r2178_16 +# 2178| m2178_18(char) = Store[?] : &:r2178_17, r2178_12 +# 2178| m2178_19(unknown) = Chi : total:m2178_4, partial:m2178_18 +# 2178| v2178_20(void) = NoOp : +# 2178| v2178_21(void) = ReturnIndirection[#this] : &:r2178_7, m2178_8 +# 2178| v2178_22(void) = ReturnVoid : +# 2178| v2178_23(void) = AliasedUse : ~m2178_19 +# 2178| v2178_24(void) = ExitFunction : -# 2132| char ClassWithDestructor::get_x() -# 2132| Block 0 -# 2132| v2132_1(void) = EnterFunction : -# 2132| m2132_2(unknown) = AliasedDefinition : -# 2132| m2132_3(unknown) = InitializeNonLocal : -# 2132| m2132_4(unknown) = Chi : total:m2132_2, partial:m2132_3 -# 2132| r2132_5(glval) = VariableAddress[#this] : -# 2132| m2132_6(glval) = InitializeParameter[#this] : &:r2132_5 -# 2132| r2132_7(glval) = Load[#this] : &:r2132_5, m2132_6 -# 2132| m2132_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2132_7 -# 2132| r2132_9(glval) = VariableAddress[#return] : -# 2132| r2132_10(glval) = VariableAddress[#this] : -# 2132| r2132_11(ClassWithDestructor *) = Load[#this] : &:r2132_10, m2132_6 -# 2132| r2132_12(glval) = FieldAddress[x] : r2132_11 -# 2132| r2132_13(char *) = Load[?] : &:r2132_12, ~m2132_8 -# 2132| r2132_14(char) = Load[?] : &:r2132_13, ~m2132_4 -# 2132| m2132_15(char) = Store[#return] : &:r2132_9, r2132_14 -# 2132| v2132_16(void) = ReturnIndirection[#this] : &:r2132_7, m2132_8 -# 2132| r2132_17(glval) = VariableAddress[#return] : -# 2132| v2132_18(void) = ReturnValue : &:r2132_17, m2132_15 -# 2132| v2132_19(void) = AliasedUse : m2132_3 -# 2132| v2132_20(void) = ExitFunction : - -# 2135| bool initialization_with_destructor_bool -# 2135| Block 0 -# 2135| v2135_1(void) = EnterFunction : -# 2135| m2135_2(unknown) = AliasedDefinition : -# 2135| r2135_3(glval) = VariableAddress[initialization_with_destructor_bool] : -# 2135| r2135_4(bool) = Constant[1] : -# 2135| m2135_5(bool) = Store[initialization_with_destructor_bool] : &:r2135_3, r2135_4 -# 2135| m2135_6(unknown) = Chi : total:m2135_2, partial:m2135_5 -# 2135| v2135_7(void) = ReturnVoid : -# 2135| v2135_8(void) = AliasedUse : ~m2135_6 -# 2135| v2135_9(void) = ExitFunction : - -# 2137| void initialization_with_destructor(bool, char) -# 2137| Block 0 -# 2137| v2137_1(void) = EnterFunction : -# 2137| m2137_2(unknown) = AliasedDefinition : -# 2137| m2137_3(unknown) = InitializeNonLocal : -# 2137| m2137_4(unknown) = Chi : total:m2137_2, partial:m2137_3 -# 2137| r2137_5(glval) = VariableAddress[b] : -# 2137| m2137_6(bool) = InitializeParameter[b] : &:r2137_5 -# 2137| r2137_7(glval) = VariableAddress[c] : -# 2137| m2137_8(char) = InitializeParameter[c] : &:r2137_7 -# 2138| r2138_1(glval) = VariableAddress[x] : -# 2138| m2138_2(ClassWithDestructor) = Uninitialized[x] : &:r2138_1 -# 2138| r2138_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2138| v2138_4(void) = Call[ClassWithDestructor] : func:r2138_3, this:r2138_1 -# 2138| m2138_5(unknown) = ^CallSideEffect : ~m2137_4 -# 2138| m2138_6(unknown) = Chi : total:m2137_4, partial:m2138_5 -# 2138| m2138_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2138_1 -# 2138| m2138_8(ClassWithDestructor) = Chi : total:m2138_2, partial:m2138_7 -# 2138| r2138_9(glval) = VariableAddress[b] : -# 2138| r2138_10(bool) = Load[b] : &:r2138_9, m2137_6 -# 2138| v2138_11(void) = ConditionalBranch : r2138_10 -#-----| False -> Block 3 -#-----| True -> Block 2 - -# 2137| Block 1 -# 2137| m2137_9(unknown) = Phi : from 13:~m2172_5, from 19:~m2172_13, from 23:~m2172_22 -# 2137| v2137_10(void) = ReturnVoid : -# 2137| v2137_11(void) = AliasedUse : ~m2137_9 -# 2137| v2137_12(void) = ExitFunction : - -# 2139| Block 2 -# 2139| r2139_1(glval) = VariableAddress[x] : -# 2139| r2139_2(glval) = FunctionAddress[set_x] : -# 2139| r2139_3(char) = Constant[97] : -# 2139| v2139_4(void) = Call[set_x] : func:r2139_2, this:r2139_1, 0:r2139_3 -# 2139| m2139_5(unknown) = ^CallSideEffect : ~m2138_6 -# 2139| m2139_6(unknown) = Chi : total:m2138_6, partial:m2139_5 -# 2139| v2139_7(void) = ^IndirectReadSideEffect[-1] : &:r2139_1, m2138_8 -# 2139| m2139_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2139_1 -# 2139| m2139_9(ClassWithDestructor) = Chi : total:m2138_8, partial:m2139_8 -# 2139| r2139_10(glval) = VariableAddress[x] : -# 2139| r2139_11(glval) = FunctionAddress[~ClassWithDestructor] : -# 2139| v2139_12(void) = Call[~ClassWithDestructor] : func:r2139_11, this:r2139_10 -# 2139| m2139_13(unknown) = ^CallSideEffect : ~m2139_6 -# 2139| m2139_14(unknown) = Chi : total:m2139_6, partial:m2139_13 -# 2139| v2139_15(void) = ^IndirectReadSideEffect[-1] : &:r2139_10, m2139_9 -# 2139| m2139_16(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2139_10 -# 2139| m2139_17(ClassWithDestructor) = Chi : total:m2139_9, partial:m2139_16 -#-----| Goto -> Block 3 - -# 2141| Block 3 -# 2141| m2141_1(unknown) = Phi : from 0:~m2138_6, from 2:~m2139_14 -# 2141| r2141_2(glval) = VariableAddress[x] : -# 2141| m2141_3(ClassWithDestructor) = Uninitialized[x] : &:r2141_2 -# 2141| r2141_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2141| v2141_5(void) = Call[ClassWithDestructor] : func:r2141_4, this:r2141_2 -# 2141| m2141_6(unknown) = ^CallSideEffect : ~m2141_1 -# 2141| m2141_7(unknown) = Chi : total:m2141_1, partial:m2141_6 -# 2141| m2141_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2141_2 -# 2141| m2141_9(ClassWithDestructor) = Chi : total:m2141_3, partial:m2141_8 -# 2141| r2141_10(bool) = Constant[1] : -# 2141| v2141_11(void) = ConditionalBranch : r2141_10 -#-----| False -> Block 24 -#-----| True -> Block 4 - -# 2142| Block 4 -# 2142| r2142_1(glval) = VariableAddress[x] : -# 2142| r2142_2(glval) = FunctionAddress[set_x] : -# 2142| r2142_3(char) = Constant[97] : -# 2142| v2142_4(void) = Call[set_x] : func:r2142_2, this:r2142_1, 0:r2142_3 -# 2142| m2142_5(unknown) = ^CallSideEffect : ~m2141_7 -# 2142| m2142_6(unknown) = Chi : total:m2141_7, partial:m2142_5 -# 2142| v2142_7(void) = ^IndirectReadSideEffect[-1] : &:r2142_1, m2141_9 -# 2142| m2142_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2142_1 -# 2142| m2142_9(ClassWithDestructor) = Chi : total:m2141_9, partial:m2142_8 -# 2144| r2144_1(glval) = VariableAddress[x] : -# 2144| m2144_2(ClassWithDestructor) = Uninitialized[x] : &:r2144_1 -# 2144| r2144_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2144| v2144_4(void) = Call[ClassWithDestructor] : func:r2144_3, this:r2144_1 -# 2144| m2144_5(unknown) = ^CallSideEffect : ~m2142_6 -# 2144| m2144_6(unknown) = Chi : total:m2142_6, partial:m2144_5 -# 2144| m2144_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2144_1 -# 2144| m2144_8(ClassWithDestructor) = Chi : total:m2144_2, partial:m2144_7 -# 2144| r2144_9(glval) = VariableAddress[c] : -# 2144| r2144_10(char) = Load[c] : &:r2144_9, m2137_8 -# 2144| r2144_11(int) = Convert : r2144_10 -# 2144| v2144_12(void) = Switch : r2144_11 -#-----| Case[97] -> Block 5 -#-----| Default -> Block 6 - -# 2145| Block 5 -# 2145| v2145_1(void) = NoOp : -# 2146| r2146_1(glval) = VariableAddress[x] : -# 2146| r2146_2(glval) = FunctionAddress[set_x] : -# 2146| r2146_3(char) = Constant[97] : -# 2146| v2146_4(void) = Call[set_x] : func:r2146_2, this:r2146_1, 0:r2146_3 -# 2146| m2146_5(unknown) = ^CallSideEffect : ~m2144_6 -# 2146| m2146_6(unknown) = Chi : total:m2144_6, partial:m2146_5 -# 2146| v2146_7(void) = ^IndirectReadSideEffect[-1] : &:r2146_1, m2144_8 -# 2146| m2146_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2146_1 -# 2146| m2146_9(ClassWithDestructor) = Chi : total:m2144_8, partial:m2146_8 -# 2147| v2147_1(void) = NoOp : -#-----| Goto -> Block 7 - -# 2148| Block 6 -# 2148| v2148_1(void) = NoOp : -# 2149| r2149_1(glval) = VariableAddress[x] : -# 2149| r2149_2(glval) = FunctionAddress[set_x] : -# 2149| r2149_3(char) = Constant[98] : -# 2149| v2149_4(void) = Call[set_x] : func:r2149_2, this:r2149_1, 0:r2149_3 -# 2149| m2149_5(unknown) = ^CallSideEffect : ~m2144_6 -# 2149| m2149_6(unknown) = Chi : total:m2144_6, partial:m2149_5 -# 2149| v2149_7(void) = ^IndirectReadSideEffect[-1] : &:r2149_1, m2144_8 -# 2149| m2149_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2149_1 -# 2149| m2149_9(ClassWithDestructor) = Chi : total:m2144_8, partial:m2149_8 -# 2150| v2150_1(void) = NoOp : -#-----| Goto -> Block 7 - -# 2151| Block 7 -# 2151| m2151_1(unknown) = Phi : from 5:~m2146_6, from 6:~m2149_6 -# 2151| v2151_2(void) = NoOp : -# 2153| r2153_1(glval) = VariableAddress[x] : -# 2153| m2153_2(ClassWithDestructor) = Uninitialized[x] : &:r2153_1 -# 2153| r2153_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2153| v2153_4(void) = Call[ClassWithDestructor] : func:r2153_3, this:r2153_1 -# 2153| m2153_5(unknown) = ^CallSideEffect : ~m2151_1 -# 2153| m2153_6(unknown) = Chi : total:m2151_1, partial:m2153_5 -# 2153| m2153_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2153_1 -# 2153| m2153_8(ClassWithDestructor) = Chi : total:m2153_2, partial:m2153_7 -# 2154| r2154_1(glval>) = VariableAddress[ys] : -# 2154| m2154_2(vector) = Uninitialized[ys] : &:r2154_1 -# 2154| r2154_3(glval) = FunctionAddress[vector] : -# 2154| r2154_4(glval) = VariableAddress[#temp2154:40] : -# 2154| r2154_5(glval) = VariableAddress[x] : -# 2154| r2154_6(ClassWithDestructor) = Load[x] : &:r2154_5, m2153_8 -# 2154| m2154_7(ClassWithDestructor) = Store[#temp2154:40] : &:r2154_4, r2154_6 -# 2154| r2154_8(ClassWithDestructor) = Load[#temp2154:40] : &:r2154_4, m2154_7 -# 2154| v2154_9(void) = Call[vector] : func:r2154_3, this:r2154_1, 0:r2154_8 -# 2154| m2154_10(unknown) = ^CallSideEffect : ~m2153_6 -# 2154| m2154_11(unknown) = Chi : total:m2153_6, partial:m2154_10 -# 2154| m2154_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2154_1 -# 2154| m2154_13(vector) = Chi : total:m2154_2, partial:m2154_12 -# 2154| r2154_14(glval &>) = VariableAddress[(__range)] : -# 2154| r2154_15(glval>) = VariableAddress[ys] : -# 2154| r2154_16(vector &) = CopyValue : r2154_15 -# 2154| m2154_17(vector &) = Store[(__range)] : &:r2154_14, r2154_16 -# 2154| r2154_18(glval) = VariableAddress[(__begin)] : -# 2154| r2154_19(glval &>) = VariableAddress[(__range)] : -# 2154| r2154_20(vector &) = Load[(__range)] : &:r2154_19, m2154_17 -#-----| r0_1(glval>) = CopyValue : r2154_20 -#-----| r0_2(glval>) = Convert : r0_1 -# 2154| r2154_21(glval) = FunctionAddress[begin] : -# 2154| r2154_22(iterator) = Call[begin] : func:r2154_21, this:r0_2 -# 2154| m2154_23(unknown) = ^CallSideEffect : ~m2154_11 -# 2154| m2154_24(unknown) = Chi : total:m2154_11, partial:m2154_23 -#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2154_13 -# 2154| m2154_25(iterator) = Store[(__begin)] : &:r2154_18, r2154_22 -# 2154| r2154_26(glval) = VariableAddress[(__end)] : -# 2154| r2154_27(glval &>) = VariableAddress[(__range)] : -# 2154| r2154_28(vector &) = Load[(__range)] : &:r2154_27, m2154_17 -#-----| r0_4(glval>) = CopyValue : r2154_28 -#-----| r0_5(glval>) = Convert : r0_4 -# 2154| r2154_29(glval) = FunctionAddress[end] : -# 2154| r2154_30(iterator) = Call[end] : func:r2154_29, this:r0_5 -# 2154| m2154_31(unknown) = ^CallSideEffect : ~m2154_24 -# 2154| m2154_32(unknown) = Chi : total:m2154_24, partial:m2154_31 -#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2154_13 -# 2154| m2154_33(iterator) = Store[(__end)] : &:r2154_26, r2154_30 -#-----| Goto -> Block 8 - -# 2154| Block 8 -# 2154| m2154_34(iterator) = Phi : from 7:m2154_25, from 9:m2154_67 -# 2154| m2154_35(unknown) = Phi : from 7:~m2154_32, from 9:~m2154_64 -# 2154| r2154_36(glval) = VariableAddress[(__begin)] : -#-----| r0_7(glval) = Convert : r2154_36 -# 2154| r2154_37(glval) = FunctionAddress[operator!=] : -# 2154| r2154_38(glval) = VariableAddress[(__end)] : -# 2154| r2154_39(iterator) = Load[(__end)] : &:r2154_38, m2154_33 -# 2154| r2154_40(bool) = Call[operator!=] : func:r2154_37, this:r0_7, 0:r2154_39 -# 2154| m2154_41(unknown) = ^CallSideEffect : ~m2154_35 -# 2154| m2154_42(unknown) = Chi : total:m2154_35, partial:m2154_41 -#-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2154_34 -# 2154| v2154_43(void) = ConditionalBranch : r2154_40 -#-----| False -> Block 10 -#-----| True -> Block 9 - -# 2154| Block 9 -# 2154| r2154_44(glval) = VariableAddress[y] : -# 2154| r2154_45(glval) = VariableAddress[(__begin)] : -#-----| r0_9(glval) = Convert : r2154_45 -# 2154| r2154_46(glval) = FunctionAddress[operator*] : -# 2154| r2154_47(ClassWithDestructor &) = Call[operator*] : func:r2154_46, this:r0_9 -# 2154| m2154_48(unknown) = ^CallSideEffect : ~m2154_42 -# 2154| m2154_49(unknown) = Chi : total:m2154_42, partial:m2154_48 -#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, m2154_34 -# 2154| r2154_50(ClassWithDestructor) = Load[?] : &:r2154_47, ~m2154_49 -# 2154| m2154_51(ClassWithDestructor) = Store[y] : &:r2154_44, r2154_50 -# 2155| r2155_1(glval) = VariableAddress[y] : -# 2155| r2155_2(glval) = FunctionAddress[set_x] : -# 2155| r2155_3(char) = Constant[97] : -# 2155| v2155_4(void) = Call[set_x] : func:r2155_2, this:r2155_1, 0:r2155_3 -# 2155| m2155_5(unknown) = ^CallSideEffect : ~m2154_49 -# 2155| m2155_6(unknown) = Chi : total:m2154_49, partial:m2155_5 -# 2155| v2155_7(void) = ^IndirectReadSideEffect[-1] : &:r2155_1, m2154_51 -# 2155| m2155_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2155_1 -# 2155| m2155_9(ClassWithDestructor) = Chi : total:m2154_51, partial:m2155_8 -# 2154| r2154_52(glval) = VariableAddress[y] : -# 2154| r2154_53(glval) = FunctionAddress[~ClassWithDestructor] : -# 2154| v2154_54(void) = Call[~ClassWithDestructor] : func:r2154_53, this:r2154_52 -# 2154| m2154_55(unknown) = ^CallSideEffect : ~m2155_6 -# 2154| m2154_56(unknown) = Chi : total:m2155_6, partial:m2154_55 -# 2154| v2154_57(void) = ^IndirectReadSideEffect[-1] : &:r2154_52, m2155_9 -# 2154| m2154_58(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2154_52 -# 2154| m2154_59(ClassWithDestructor) = Chi : total:m2155_9, partial:m2154_58 -# 2154| r2154_60(glval) = VariableAddress[(__begin)] : -# 2154| r2154_61(glval) = FunctionAddress[operator++] : -# 2154| r2154_62(iterator &) = Call[operator++] : func:r2154_61, this:r2154_60 -# 2154| m2154_63(unknown) = ^CallSideEffect : ~m2154_56 -# 2154| m2154_64(unknown) = Chi : total:m2154_56, partial:m2154_63 -# 2154| v2154_65(void) = ^IndirectReadSideEffect[-1] : &:r2154_60, m2154_34 -# 2154| m2154_66(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2154_60 -# 2154| m2154_67(iterator) = Chi : total:m2154_34, partial:m2154_66 -# 2154| r2154_68(glval) = CopyValue : r2154_62 -#-----| Goto (back edge) -> Block 8 - -# 2157| Block 10 -# 2157| r2157_1(glval>) = VariableAddress[ys] : -# 2157| m2157_2(vector) = Uninitialized[ys] : &:r2157_1 -# 2157| r2157_3(glval) = FunctionAddress[vector] : -# 2157| r2157_4(glval) = VariableAddress[#temp2157:40] : -# 2157| r2157_5(glval) = VariableAddress[x] : -# 2157| r2157_6(ClassWithDestructor) = Load[x] : &:r2157_5, m2153_8 -# 2157| m2157_7(ClassWithDestructor) = Store[#temp2157:40] : &:r2157_4, r2157_6 -# 2157| r2157_8(ClassWithDestructor) = Load[#temp2157:40] : &:r2157_4, m2157_7 -# 2157| v2157_9(void) = Call[vector] : func:r2157_3, this:r2157_1, 0:r2157_8 -# 2157| m2157_10(unknown) = ^CallSideEffect : ~m2154_42 -# 2157| m2157_11(unknown) = Chi : total:m2154_42, partial:m2157_10 -# 2157| m2157_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2157_1 -# 2157| m2157_13(vector) = Chi : total:m2157_2, partial:m2157_12 -# 2157| r2157_14(glval &>) = VariableAddress[(__range)] : -# 2157| r2157_15(glval>) = VariableAddress[ys] : -# 2157| r2157_16(vector &) = CopyValue : r2157_15 -# 2157| m2157_17(vector &) = Store[(__range)] : &:r2157_14, r2157_16 -# 2157| r2157_18(glval) = VariableAddress[(__begin)] : -# 2157| r2157_19(glval &>) = VariableAddress[(__range)] : -# 2157| r2157_20(vector &) = Load[(__range)] : &:r2157_19, m2157_17 -#-----| r0_11(glval>) = CopyValue : r2157_20 -#-----| r0_12(glval>) = Convert : r0_11 -# 2157| r2157_21(glval) = FunctionAddress[begin] : -# 2157| r2157_22(iterator) = Call[begin] : func:r2157_21, this:r0_12 -# 2157| m2157_23(unknown) = ^CallSideEffect : ~m2157_11 -# 2157| m2157_24(unknown) = Chi : total:m2157_11, partial:m2157_23 -#-----| v0_13(void) = ^IndirectReadSideEffect[-1] : &:r0_12, m2157_13 -# 2157| m2157_25(iterator) = Store[(__begin)] : &:r2157_18, r2157_22 -# 2157| r2157_26(glval) = VariableAddress[(__end)] : -# 2157| r2157_27(glval &>) = VariableAddress[(__range)] : -# 2157| r2157_28(vector &) = Load[(__range)] : &:r2157_27, m2157_17 -#-----| r0_14(glval>) = CopyValue : r2157_28 -#-----| r0_15(glval>) = Convert : r0_14 -# 2157| r2157_29(glval) = FunctionAddress[end] : -# 2157| r2157_30(iterator) = Call[end] : func:r2157_29, this:r0_15 -# 2157| m2157_31(unknown) = ^CallSideEffect : ~m2157_24 -# 2157| m2157_32(unknown) = Chi : total:m2157_24, partial:m2157_31 -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2157_13 -# 2157| m2157_33(iterator) = Store[(__end)] : &:r2157_26, r2157_30 -#-----| Goto -> Block 11 - -# 2157| Block 11 -# 2157| m2157_34(iterator) = Phi : from 10:m2157_25, from 14:m2157_83 -# 2157| m2157_35(unknown) = Phi : from 10:~m2157_32, from 14:~m2157_80 -# 2157| r2157_36(glval) = VariableAddress[(__begin)] : -#-----| r0_17(glval) = Convert : r2157_36 -# 2157| r2157_37(glval) = FunctionAddress[operator!=] : -# 2157| r2157_38(glval) = VariableAddress[(__end)] : -# 2157| r2157_39(iterator) = Load[(__end)] : &:r2157_38, m2157_33 -# 2157| r2157_40(bool) = Call[operator!=] : func:r2157_37, this:r0_17, 0:r2157_39 -# 2157| m2157_41(unknown) = ^CallSideEffect : ~m2157_35 -# 2157| m2157_42(unknown) = Chi : total:m2157_35, partial:m2157_41 -#-----| v0_18(void) = ^IndirectReadSideEffect[-1] : &:r0_17, m2157_34 -# 2157| v2157_43(void) = ConditionalBranch : r2157_40 -#-----| False -> Block 15 -#-----| True -> Block 12 - -# 2157| Block 12 -# 2157| r2157_44(glval) = VariableAddress[y] : -# 2157| r2157_45(glval) = VariableAddress[(__begin)] : -#-----| r0_19(glval) = Convert : r2157_45 -# 2157| r2157_46(glval) = FunctionAddress[operator*] : -# 2157| r2157_47(ClassWithDestructor &) = Call[operator*] : func:r2157_46, this:r0_19 -# 2157| m2157_48(unknown) = ^CallSideEffect : ~m2157_42 -# 2157| m2157_49(unknown) = Chi : total:m2157_42, partial:m2157_48 -#-----| v0_20(void) = ^IndirectReadSideEffect[-1] : &:r0_19, m2157_34 -# 2157| r2157_50(ClassWithDestructor) = Load[?] : &:r2157_47, ~m2157_49 -# 2157| m2157_51(ClassWithDestructor) = Store[y] : &:r2157_44, r2157_50 -# 2158| r2158_1(glval) = VariableAddress[y] : -# 2158| r2158_2(glval) = FunctionAddress[set_x] : -# 2158| r2158_3(char) = Constant[97] : -# 2158| v2158_4(void) = Call[set_x] : func:r2158_2, this:r2158_1, 0:r2158_3 -# 2158| m2158_5(unknown) = ^CallSideEffect : ~m2157_49 -# 2158| m2158_6(unknown) = Chi : total:m2157_49, partial:m2158_5 -# 2158| v2158_7(void) = ^IndirectReadSideEffect[-1] : &:r2158_1, m2157_51 -# 2158| m2158_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2158_1 -# 2158| m2158_9(ClassWithDestructor) = Chi : total:m2157_51, partial:m2158_8 -# 2159| r2159_1(glval) = VariableAddress[y] : -# 2159| r2159_2(glval) = FunctionAddress[get_x] : -# 2159| r2159_3(char) = Call[get_x] : func:r2159_2, this:r2159_1 -# 2159| m2159_4(unknown) = ^CallSideEffect : ~m2158_6 -# 2159| m2159_5(unknown) = Chi : total:m2158_6, partial:m2159_4 -# 2159| v2159_6(void) = ^IndirectReadSideEffect[-1] : &:r2159_1, m2158_9 -# 2159| m2159_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2159_1 -# 2159| m2159_8(ClassWithDestructor) = Chi : total:m2158_9, partial:m2159_7 -# 2159| r2159_9(int) = Convert : r2159_3 -# 2159| r2159_10(int) = Constant[98] : -# 2159| r2159_11(bool) = CompareEQ : r2159_9, r2159_10 -# 2159| v2159_12(void) = ConditionalBranch : r2159_11 -#-----| False -> Block 14 -#-----| True -> Block 13 - -# 2160| Block 13 -# 2160| v2160_1(void) = NoOp : -# 2157| r2157_52(glval) = VariableAddress[y] : -# 2157| r2157_53(glval) = FunctionAddress[~ClassWithDestructor] : -# 2157| v2157_54(void) = Call[~ClassWithDestructor] : func:r2157_53, this:r2157_52 -# 2157| m2157_55(unknown) = ^CallSideEffect : ~m2159_5 -# 2157| m2157_56(unknown) = Chi : total:m2159_5, partial:m2157_55 -# 2157| v2157_57(void) = ^IndirectReadSideEffect[-1] : &:r2157_52, m2159_8 -# 2157| m2157_58(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2157_52 -# 2157| m2157_59(ClassWithDestructor) = Chi : total:m2159_8, partial:m2157_58 -# 2157| r2157_60(glval>) = VariableAddress[ys] : -# 2157| r2157_61(glval) = FunctionAddress[~vector] : -# 2157| v2157_62(void) = Call[~vector] : func:r2157_61, this:r2157_60 -# 2157| m2157_63(unknown) = ^CallSideEffect : ~m2157_56 -# 2157| m2157_64(unknown) = Chi : total:m2157_56, partial:m2157_63 -# 2157| v2157_65(void) = ^IndirectReadSideEffect[-1] : &:r2157_60, m2157_13 -# 2157| m2157_66(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2157_60 -# 2157| m2157_67(vector) = Chi : total:m2157_13, partial:m2157_66 -# 2172| r2172_1(glval) = VariableAddress[x] : -# 2172| r2172_2(glval) = FunctionAddress[~ClassWithDestructor] : -# 2172| v2172_3(void) = Call[~ClassWithDestructor] : func:r2172_2, this:r2172_1 -# 2172| m2172_4(unknown) = ^CallSideEffect : ~m2157_64 -# 2172| m2172_5(unknown) = Chi : total:m2157_64, partial:m2172_4 -# 2172| v2172_6(void) = ^IndirectReadSideEffect[-1] : &:r2172_1, m2153_8 -# 2172| m2172_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2172_1 -# 2172| m2172_8(ClassWithDestructor) = Chi : total:m2153_8, partial:m2172_7 -#-----| Goto -> Block 1 - -# 2157| Block 14 -# 2157| r2157_68(glval) = VariableAddress[y] : -# 2157| r2157_69(glval) = FunctionAddress[~ClassWithDestructor] : -# 2157| v2157_70(void) = Call[~ClassWithDestructor] : func:r2157_69, this:r2157_68 -# 2157| m2157_71(unknown) = ^CallSideEffect : ~m2159_5 -# 2157| m2157_72(unknown) = Chi : total:m2159_5, partial:m2157_71 -# 2157| v2157_73(void) = ^IndirectReadSideEffect[-1] : &:r2157_68, m2159_8 -# 2157| m2157_74(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2157_68 -# 2157| m2157_75(ClassWithDestructor) = Chi : total:m2159_8, partial:m2157_74 -# 2157| r2157_76(glval) = VariableAddress[(__begin)] : -# 2157| r2157_77(glval) = FunctionAddress[operator++] : -# 2157| r2157_78(iterator &) = Call[operator++] : func:r2157_77, this:r2157_76 -# 2157| m2157_79(unknown) = ^CallSideEffect : ~m2157_72 -# 2157| m2157_80(unknown) = Chi : total:m2157_72, partial:m2157_79 -# 2157| v2157_81(void) = ^IndirectReadSideEffect[-1] : &:r2157_76, m2157_34 -# 2157| m2157_82(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2157_76 -# 2157| m2157_83(iterator) = Chi : total:m2157_34, partial:m2157_82 -# 2157| r2157_84(glval) = CopyValue : r2157_78 -#-----| Goto (back edge) -> Block 11 - -# 2163| Block 15 -# 2163| r2163_1(glval>) = VariableAddress[ys] : -# 2163| m2163_2(vector) = Uninitialized[ys] : &:r2163_1 -# 2163| r2163_3(glval) = FunctionAddress[vector] : -# 2163| r2163_4(int) = Constant[1] : -# 2163| v2163_5(void) = Call[vector] : func:r2163_3, this:r2163_1, 0:r2163_4 -# 2163| m2163_6(unknown) = ^CallSideEffect : ~m2157_42 -# 2163| m2163_7(unknown) = Chi : total:m2157_42, partial:m2163_6 -# 2163| m2163_8(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2163_1 -# 2163| m2163_9(vector) = Chi : total:m2163_2, partial:m2163_8 -# 2163| r2163_10(glval &>) = VariableAddress[(__range)] : -# 2163| r2163_11(glval>) = VariableAddress[ys] : -# 2163| r2163_12(vector &) = CopyValue : r2163_11 -# 2163| m2163_13(vector &) = Store[(__range)] : &:r2163_10, r2163_12 -# 2163| r2163_14(glval) = VariableAddress[(__begin)] : -# 2163| r2163_15(glval &>) = VariableAddress[(__range)] : -# 2163| r2163_16(vector &) = Load[(__range)] : &:r2163_15, m2163_13 -#-----| r0_21(glval>) = CopyValue : r2163_16 -#-----| r0_22(glval>) = Convert : r0_21 -# 2163| r2163_17(glval) = FunctionAddress[begin] : -# 2163| r2163_18(iterator) = Call[begin] : func:r2163_17, this:r0_22 -# 2163| m2163_19(unknown) = ^CallSideEffect : ~m2163_7 -# 2163| m2163_20(unknown) = Chi : total:m2163_7, partial:m2163_19 -#-----| v0_23(void) = ^IndirectReadSideEffect[-1] : &:r0_22, m2163_9 -# 2163| m2163_21(iterator) = Store[(__begin)] : &:r2163_14, r2163_18 -# 2163| r2163_22(glval) = VariableAddress[(__end)] : -# 2163| r2163_23(glval &>) = VariableAddress[(__range)] : -# 2163| r2163_24(vector &) = Load[(__range)] : &:r2163_23, m2163_13 -#-----| r0_24(glval>) = CopyValue : r2163_24 -#-----| r0_25(glval>) = Convert : r0_24 -# 2163| r2163_25(glval) = FunctionAddress[end] : -# 2163| r2163_26(iterator) = Call[end] : func:r2163_25, this:r0_25 -# 2163| m2163_27(unknown) = ^CallSideEffect : ~m2163_20 -# 2163| m2163_28(unknown) = Chi : total:m2163_20, partial:m2163_27 -#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_25, m2163_9 -# 2163| m2163_29(iterator) = Store[(__end)] : &:r2163_22, r2163_26 -#-----| Goto -> Block 16 - -# 2163| Block 16 -# 2163| m2163_30(iterator) = Phi : from 15:m2163_21, from 17:m2163_47 -# 2163| m2163_31(unknown) = Phi : from 15:~m2163_28, from 17:~m2163_44 -# 2163| r2163_32(glval) = VariableAddress[(__begin)] : -#-----| r0_27(glval) = Convert : r2163_32 -# 2163| r2163_33(glval) = FunctionAddress[operator!=] : -# 2163| r2163_34(glval) = VariableAddress[(__end)] : -# 2163| r2163_35(iterator) = Load[(__end)] : &:r2163_34, m2163_29 -# 2163| r2163_36(bool) = Call[operator!=] : func:r2163_33, this:r0_27, 0:r2163_35 -# 2163| m2163_37(unknown) = ^CallSideEffect : ~m2163_31 -# 2163| m2163_38(unknown) = Chi : total:m2163_31, partial:m2163_37 -#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, m2163_30 -# 2163| v2163_39(void) = ConditionalBranch : r2163_36 -#-----| False -> Block 20 -#-----| True -> Block 18 - -# 2163| Block 17 -# 2163| r2163_40(glval) = VariableAddress[(__begin)] : -# 2163| r2163_41(glval) = FunctionAddress[operator++] : -# 2163| r2163_42(iterator &) = Call[operator++] : func:r2163_41, this:r2163_40 -# 2163| m2163_43(unknown) = ^CallSideEffect : ~m2163_54 -# 2163| m2163_44(unknown) = Chi : total:m2163_54, partial:m2163_43 -# 2163| v2163_45(void) = ^IndirectReadSideEffect[-1] : &:r2163_40, m2163_30 -# 2163| m2163_46(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2163_40 -# 2163| m2163_47(iterator) = Chi : total:m2163_30, partial:m2163_46 -# 2163| r2163_48(glval) = CopyValue : r2163_42 -#-----| Goto (back edge) -> Block 16 - -# 2163| Block 18 -# 2163| r2163_49(glval) = VariableAddress[y] : -# 2163| r2163_50(glval) = VariableAddress[(__begin)] : -#-----| r0_29(glval) = Convert : r2163_50 -# 2163| r2163_51(glval) = FunctionAddress[operator*] : -# 2163| r2163_52(int &) = Call[operator*] : func:r2163_51, this:r0_29 -# 2163| m2163_53(unknown) = ^CallSideEffect : ~m2163_38 -# 2163| m2163_54(unknown) = Chi : total:m2163_38, partial:m2163_53 -#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_29, m2163_30 -# 2163| r2163_55(int) = Load[?] : &:r2163_52, ~m2163_54 -# 2163| m2163_56(int) = Store[y] : &:r2163_49, r2163_55 -# 2164| r2164_1(glval) = VariableAddress[y] : -# 2164| r2164_2(int) = Load[y] : &:r2164_1, m2163_56 -# 2164| r2164_3(int) = Constant[1] : -# 2164| r2164_4(bool) = CompareEQ : r2164_2, r2164_3 -# 2164| v2164_5(void) = ConditionalBranch : r2164_4 -#-----| False -> Block 17 -#-----| True -> Block 19 - -# 2165| Block 19 -# 2165| v2165_1(void) = NoOp : -# 2163| r2163_57(glval>) = VariableAddress[ys] : -# 2163| r2163_58(glval) = FunctionAddress[~vector] : -# 2163| v2163_59(void) = Call[~vector] : func:r2163_58, this:r2163_57 -# 2163| m2163_60(unknown) = ^CallSideEffect : ~m2163_54 -# 2163| m2163_61(unknown) = Chi : total:m2163_54, partial:m2163_60 -# 2163| v2163_62(void) = ^IndirectReadSideEffect[-1] : &:r2163_57, m2163_9 -# 2163| m2163_63(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2163_57 -# 2163| m2163_64(vector) = Chi : total:m2163_9, partial:m2163_63 -# 2172| r2172_9(glval) = VariableAddress[x] : -# 2172| r2172_10(glval) = FunctionAddress[~ClassWithDestructor] : -# 2172| v2172_11(void) = Call[~ClassWithDestructor] : func:r2172_10, this:r2172_9 -# 2172| m2172_12(unknown) = ^CallSideEffect : ~m2163_61 -# 2172| m2172_13(unknown) = Chi : total:m2163_61, partial:m2172_12 -# 2172| v2172_14(void) = ^IndirectReadSideEffect[-1] : &:r2172_9, m2153_8 -# 2172| m2172_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2172_9 -# 2172| m2172_16(ClassWithDestructor) = Chi : total:m2153_8, partial:m2172_15 -#-----| Goto -> Block 1 - -# 2168| Block 20 -# 2168| r2168_1(glval>) = VariableAddress[ys] : -# 2168| m2168_2(vector) = Uninitialized[ys] : &:r2168_1 -# 2168| r2168_3(glval) = FunctionAddress[vector] : -# 2168| r2168_4(glval) = VariableAddress[#temp2168:40] : -# 2168| r2168_5(glval) = VariableAddress[x] : -# 2168| r2168_6(ClassWithDestructor) = Load[x] : &:r2168_5, m2153_8 -# 2168| m2168_7(ClassWithDestructor) = Store[#temp2168:40] : &:r2168_4, r2168_6 -# 2168| r2168_8(ClassWithDestructor) = Load[#temp2168:40] : &:r2168_4, m2168_7 -# 2168| v2168_9(void) = Call[vector] : func:r2168_3, this:r2168_1, 0:r2168_8 -# 2168| m2168_10(unknown) = ^CallSideEffect : ~m2163_38 -# 2168| m2168_11(unknown) = Chi : total:m2163_38, partial:m2168_10 -# 2168| m2168_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2168_1 -# 2168| m2168_13(vector) = Chi : total:m2168_2, partial:m2168_12 -# 2168| r2168_14(glval &>) = VariableAddress[(__range)] : -# 2168| r2168_15(glval>) = VariableAddress[ys] : -# 2168| r2168_16(vector &) = CopyValue : r2168_15 -# 2168| m2168_17(vector &) = Store[(__range)] : &:r2168_14, r2168_16 -# 2168| r2168_18(glval) = VariableAddress[(__begin)] : -# 2168| r2168_19(glval &>) = VariableAddress[(__range)] : -# 2168| r2168_20(vector &) = Load[(__range)] : &:r2168_19, m2168_17 -#-----| r0_31(glval>) = CopyValue : r2168_20 -#-----| r0_32(glval>) = Convert : r0_31 -# 2168| r2168_21(glval) = FunctionAddress[begin] : -# 2168| r2168_22(iterator) = Call[begin] : func:r2168_21, this:r0_32 -# 2168| m2168_23(unknown) = ^CallSideEffect : ~m2168_11 -# 2168| m2168_24(unknown) = Chi : total:m2168_11, partial:m2168_23 -#-----| v0_33(void) = ^IndirectReadSideEffect[-1] : &:r0_32, m2168_13 -# 2168| m2168_25(iterator) = Store[(__begin)] : &:r2168_18, r2168_22 -# 2168| r2168_26(glval) = VariableAddress[(__end)] : -# 2168| r2168_27(glval &>) = VariableAddress[(__range)] : -# 2168| r2168_28(vector &) = Load[(__range)] : &:r2168_27, m2168_17 -#-----| r0_34(glval>) = CopyValue : r2168_28 -#-----| r0_35(glval>) = Convert : r0_34 -# 2168| r2168_29(glval) = FunctionAddress[end] : -# 2168| r2168_30(iterator) = Call[end] : func:r2168_29, this:r0_35 -# 2168| m2168_31(unknown) = ^CallSideEffect : ~m2168_24 -# 2168| m2168_32(unknown) = Chi : total:m2168_24, partial:m2168_31 -#-----| v0_36(void) = ^IndirectReadSideEffect[-1] : &:r0_35, m2168_13 -# 2168| m2168_33(iterator) = Store[(__end)] : &:r2168_26, r2168_30 -#-----| Goto -> Block 21 - -# 2168| Block 21 -# 2168| m2168_34(iterator) = Phi : from 20:m2168_25, from 22:m2168_67 -# 2168| m2168_35(unknown) = Phi : from 20:~m2168_32, from 22:~m2168_64 -# 2168| r2168_36(glval) = VariableAddress[(__begin)] : -#-----| r0_37(glval) = Convert : r2168_36 -# 2168| r2168_37(glval) = FunctionAddress[operator!=] : -# 2168| r2168_38(glval) = VariableAddress[(__end)] : -# 2168| r2168_39(iterator) = Load[(__end)] : &:r2168_38, m2168_33 -# 2168| r2168_40(bool) = Call[operator!=] : func:r2168_37, this:r0_37, 0:r2168_39 -# 2168| m2168_41(unknown) = ^CallSideEffect : ~m2168_35 -# 2168| m2168_42(unknown) = Chi : total:m2168_35, partial:m2168_41 -#-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, m2168_34 -# 2168| v2168_43(void) = ConditionalBranch : r2168_40 -#-----| False -> Block 23 -#-----| True -> Block 22 - -# 2168| Block 22 -# 2168| r2168_44(glval) = VariableAddress[y] : -# 2168| r2168_45(glval) = VariableAddress[(__begin)] : -#-----| r0_39(glval) = Convert : r2168_45 -# 2168| r2168_46(glval) = FunctionAddress[operator*] : -# 2168| r2168_47(ClassWithDestructor &) = Call[operator*] : func:r2168_46, this:r0_39 -# 2168| m2168_48(unknown) = ^CallSideEffect : ~m2168_42 -# 2168| m2168_49(unknown) = Chi : total:m2168_42, partial:m2168_48 -#-----| v0_40(void) = ^IndirectReadSideEffect[-1] : &:r0_39, m2168_34 -# 2168| r2168_50(ClassWithDestructor) = Load[?] : &:r2168_47, ~m2168_49 -# 2168| m2168_51(ClassWithDestructor) = Store[y] : &:r2168_44, r2168_50 -# 2169| r2169_1(glval) = VariableAddress[z1] : -# 2169| m2169_2(ClassWithDestructor) = Uninitialized[z1] : &:r2169_1 -# 2169| r2169_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2169| v2169_4(void) = Call[ClassWithDestructor] : func:r2169_3, this:r2169_1 -# 2169| m2169_5(unknown) = ^CallSideEffect : ~m2168_49 -# 2169| m2169_6(unknown) = Chi : total:m2168_49, partial:m2169_5 -# 2169| m2169_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2169_1 -# 2169| m2169_8(ClassWithDestructor) = Chi : total:m2169_2, partial:m2169_7 -# 2170| r2170_1(glval) = VariableAddress[z2] : -# 2170| m2170_2(ClassWithDestructor) = Uninitialized[z2] : &:r2170_1 -# 2170| r2170_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2170| v2170_4(void) = Call[ClassWithDestructor] : func:r2170_3, this:r2170_1 -# 2170| m2170_5(unknown) = ^CallSideEffect : ~m2169_6 -# 2170| m2170_6(unknown) = Chi : total:m2169_6, partial:m2170_5 -# 2170| m2170_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2170_1 -# 2170| m2170_8(ClassWithDestructor) = Chi : total:m2170_2, partial:m2170_7 -# 2171| r2171_1(glval) = VariableAddress[z2] : -# 2171| r2171_2(glval) = FunctionAddress[~ClassWithDestructor] : -# 2171| v2171_3(void) = Call[~ClassWithDestructor] : func:r2171_2, this:r2171_1 -# 2171| m2171_4(unknown) = ^CallSideEffect : ~m2170_6 -# 2171| m2171_5(unknown) = Chi : total:m2170_6, partial:m2171_4 -# 2171| v2171_6(void) = ^IndirectReadSideEffect[-1] : &:r2171_1, m2170_8 -# 2171| m2171_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2171_1 -# 2171| m2171_8(ClassWithDestructor) = Chi : total:m2170_8, partial:m2171_7 -# 2171| r2171_9(glval) = VariableAddress[z1] : -# 2171| r2171_10(glval) = FunctionAddress[~ClassWithDestructor] : -# 2171| v2171_11(void) = Call[~ClassWithDestructor] : func:r2171_10, this:r2171_9 -# 2171| m2171_12(unknown) = ^CallSideEffect : ~m2171_5 -# 2171| m2171_13(unknown) = Chi : total:m2171_5, partial:m2171_12 -# 2171| v2171_14(void) = ^IndirectReadSideEffect[-1] : &:r2171_9, m2169_8 -# 2171| m2171_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2171_9 -# 2171| m2171_16(ClassWithDestructor) = Chi : total:m2169_8, partial:m2171_15 -# 2168| r2168_52(glval) = VariableAddress[y] : -# 2168| r2168_53(glval) = FunctionAddress[~ClassWithDestructor] : -# 2168| v2168_54(void) = Call[~ClassWithDestructor] : func:r2168_53, this:r2168_52 -# 2168| m2168_55(unknown) = ^CallSideEffect : ~m2171_13 -# 2168| m2168_56(unknown) = Chi : total:m2171_13, partial:m2168_55 -# 2168| v2168_57(void) = ^IndirectReadSideEffect[-1] : &:r2168_52, m2168_51 -# 2168| m2168_58(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2168_52 -# 2168| m2168_59(ClassWithDestructor) = Chi : total:m2168_51, partial:m2168_58 -# 2168| r2168_60(glval) = VariableAddress[(__begin)] : -# 2168| r2168_61(glval) = FunctionAddress[operator++] : -# 2168| r2168_62(iterator &) = Call[operator++] : func:r2168_61, this:r2168_60 -# 2168| m2168_63(unknown) = ^CallSideEffect : ~m2168_56 -# 2168| m2168_64(unknown) = Chi : total:m2168_56, partial:m2168_63 -# 2168| v2168_65(void) = ^IndirectReadSideEffect[-1] : &:r2168_60, m2168_34 -# 2168| m2168_66(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2168_60 -# 2168| m2168_67(iterator) = Chi : total:m2168_34, partial:m2168_66 -# 2168| r2168_68(glval) = CopyValue : r2168_62 -#-----| Goto (back edge) -> Block 21 - -# 2172| Block 23 -# 2172| v2172_17(void) = NoOp : -# 2172| r2172_18(glval) = VariableAddress[x] : -# 2172| r2172_19(glval) = FunctionAddress[~ClassWithDestructor] : -# 2172| v2172_20(void) = Call[~ClassWithDestructor] : func:r2172_19, this:r2172_18 -# 2172| m2172_21(unknown) = ^CallSideEffect : ~m2168_42 -# 2172| m2172_22(unknown) = Chi : total:m2168_42, partial:m2172_21 -# 2172| v2172_23(void) = ^IndirectReadSideEffect[-1] : &:r2172_18, m2153_8 -# 2172| m2172_24(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2172_18 -# 2172| m2172_25(ClassWithDestructor) = Chi : total:m2153_8, partial:m2172_24 -#-----| Goto -> Block 1 - -# 2137| Block 24 -# 2137| v2137_13(void) = Unreached : - -# 2174| void static_variable_with_destructor_1() -# 2174| Block 0 -# 2174| v2174_1(void) = EnterFunction : -# 2174| m2174_2(unknown) = AliasedDefinition : -# 2174| m2174_3(unknown) = InitializeNonLocal : -# 2174| m2174_4(unknown) = Chi : total:m2174_2, partial:m2174_3 -# 2175| r2175_1(glval) = VariableAddress[a] : -# 2175| m2175_2(ClassWithDestructor) = Uninitialized[a] : &:r2175_1 -# 2175| r2175_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2175| v2175_4(void) = Call[ClassWithDestructor] : func:r2175_3, this:r2175_1 -# 2175| m2175_5(unknown) = ^CallSideEffect : ~m2174_4 -# 2175| m2175_6(unknown) = Chi : total:m2174_4, partial:m2175_5 -# 2175| m2175_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2175_1 -# 2175| m2175_8(ClassWithDestructor) = Chi : total:m2175_2, partial:m2175_7 -# 2176| r2176_1(glval) = VariableAddress[b#init] : -# 2176| r2176_2(bool) = Load[b#init] : &:r2176_1, ~m2175_6 -# 2176| v2176_3(void) = ConditionalBranch : r2176_2 -#-----| False -> Block 1 -#-----| True -> Block 2 - -# 2176| Block 1 -# 2176| r2176_4(glval) = VariableAddress[b] : -#-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : -#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2176_4 -#-----| m0_3(unknown) = ^CallSideEffect : ~m2175_6 -#-----| m0_4(unknown) = Chi : total:m2175_6, partial:m0_3 -#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2176_4 -#-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5 -# 2176| r2176_5(bool) = Constant[1] : -# 2176| m2176_6(bool) = Store[b#init] : &:r2176_1, r2176_5 -# 2176| m2176_7(unknown) = Chi : total:m0_6, partial:m2176_6 -#-----| Goto -> Block 2 - -# 2177| Block 2 -# 2177| m2177_1(unknown) = Phi : from 0:~m2175_6, from 1:~m2176_7 -# 2177| v2177_2(void) = NoOp : -# 2177| r2177_3(glval) = VariableAddress[a] : -# 2177| r2177_4(glval) = FunctionAddress[~ClassWithDestructor] : -# 2177| v2177_5(void) = Call[~ClassWithDestructor] : func:r2177_4, this:r2177_3 -# 2177| m2177_6(unknown) = ^CallSideEffect : ~m2177_1 -# 2177| m2177_7(unknown) = Chi : total:m2177_1, partial:m2177_6 -# 2177| v2177_8(void) = ^IndirectReadSideEffect[-1] : &:r2177_3, m2175_8 -# 2177| m2177_9(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2177_3 -# 2177| m2177_10(ClassWithDestructor) = Chi : total:m2175_8, partial:m2177_9 -# 2174| v2174_5(void) = ReturnVoid : -# 2174| v2174_6(void) = AliasedUse : ~m2177_7 -# 2174| v2174_7(void) = ExitFunction : - -# 2179| void static_variable_with_destructor_2() +# 2179| char ClassWithDestructor::get_x() # 2179| Block 0 -# 2179| v2179_1(void) = EnterFunction : -# 2179| m2179_2(unknown) = AliasedDefinition : -# 2179| m2179_3(unknown) = InitializeNonLocal : -# 2179| m2179_4(unknown) = Chi : total:m2179_2, partial:m2179_3 -# 2180| r2180_1(glval) = VariableAddress[a#init] : -# 2180| r2180_2(bool) = Load[a#init] : &:r2180_1, ~m2179_3 -# 2180| v2180_3(void) = ConditionalBranch : r2180_2 -#-----| False -> Block 1 -#-----| True -> Block 2 +# 2179| v2179_1(void) = EnterFunction : +# 2179| m2179_2(unknown) = AliasedDefinition : +# 2179| m2179_3(unknown) = InitializeNonLocal : +# 2179| m2179_4(unknown) = Chi : total:m2179_2, partial:m2179_3 +# 2179| r2179_5(glval) = VariableAddress[#this] : +# 2179| m2179_6(glval) = InitializeParameter[#this] : &:r2179_5 +# 2179| r2179_7(glval) = Load[#this] : &:r2179_5, m2179_6 +# 2179| m2179_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2179_7 +# 2179| r2179_9(glval) = VariableAddress[#return] : +# 2179| r2179_10(glval) = VariableAddress[#this] : +# 2179| r2179_11(ClassWithDestructor *) = Load[#this] : &:r2179_10, m2179_6 +# 2179| r2179_12(glval) = FieldAddress[x] : r2179_11 +# 2179| r2179_13(char *) = Load[?] : &:r2179_12, ~m2179_8 +# 2179| r2179_14(char) = Load[?] : &:r2179_13, ~m2179_4 +# 2179| m2179_15(char) = Store[#return] : &:r2179_9, r2179_14 +# 2179| v2179_16(void) = ReturnIndirection[#this] : &:r2179_7, m2179_8 +# 2179| r2179_17(glval) = VariableAddress[#return] : +# 2179| v2179_18(void) = ReturnValue : &:r2179_17, m2179_15 +# 2179| v2179_19(void) = AliasedUse : m2179_3 +# 2179| v2179_20(void) = ExitFunction : -# 2180| Block 1 -# 2180| r2180_4(glval) = VariableAddress[a] : -#-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : -#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2180_4 -#-----| m0_3(unknown) = ^CallSideEffect : ~m2179_4 -#-----| m0_4(unknown) = Chi : total:m2179_4, partial:m0_3 -#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2180_4 -#-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5 -# 2180| r2180_5(bool) = Constant[1] : -# 2180| m2180_6(bool) = Store[a#init] : &:r2180_1, r2180_5 -# 2180| m2180_7(unknown) = Chi : total:m0_6, partial:m2180_6 -#-----| Goto -> Block 2 +# 2182| bool initialization_with_destructor_bool +# 2182| Block 0 +# 2182| v2182_1(void) = EnterFunction : +# 2182| m2182_2(unknown) = AliasedDefinition : +# 2182| r2182_3(glval) = VariableAddress[initialization_with_destructor_bool] : +# 2182| r2182_4(bool) = Constant[1] : +# 2182| m2182_5(bool) = Store[initialization_with_destructor_bool] : &:r2182_3, r2182_4 +# 2182| m2182_6(unknown) = Chi : total:m2182_2, partial:m2182_5 +# 2182| v2182_7(void) = ReturnVoid : +# 2182| v2182_8(void) = AliasedUse : ~m2182_6 +# 2182| v2182_9(void) = ExitFunction : -# 2181| Block 2 -# 2181| m2181_1(unknown) = Phi : from 0:~m2179_4, from 1:~m2180_7 -# 2181| r2181_2(glval) = VariableAddress[b] : -# 2181| m2181_3(ClassWithDestructor) = Uninitialized[b] : &:r2181_2 -# 2181| r2181_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2181| v2181_5(void) = Call[ClassWithDestructor] : func:r2181_4, this:r2181_2 -# 2181| m2181_6(unknown) = ^CallSideEffect : ~m2181_1 -# 2181| m2181_7(unknown) = Chi : total:m2181_1, partial:m2181_6 -# 2181| m2181_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2181_2 -# 2181| m2181_9(ClassWithDestructor) = Chi : total:m2181_3, partial:m2181_8 -# 2182| v2182_1(void) = NoOp : -# 2182| r2182_2(glval) = VariableAddress[b] : -# 2182| r2182_3(glval) = FunctionAddress[~ClassWithDestructor] : -# 2182| v2182_4(void) = Call[~ClassWithDestructor] : func:r2182_3, this:r2182_2 -# 2182| m2182_5(unknown) = ^CallSideEffect : ~m2181_7 -# 2182| m2182_6(unknown) = Chi : total:m2181_7, partial:m2182_5 -# 2182| v2182_7(void) = ^IndirectReadSideEffect[-1] : &:r2182_2, m2181_9 -# 2182| m2182_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2182_2 -# 2182| m2182_9(ClassWithDestructor) = Chi : total:m2181_9, partial:m2182_8 -# 2179| v2179_5(void) = ReturnVoid : -# 2179| v2179_6(void) = AliasedUse : ~m2182_6 -# 2179| v2179_7(void) = ExitFunction : - -# 2184| void static_variable_with_destructor_3() +# 2184| void initialization_with_destructor(bool, char) # 2184| Block 0 # 2184| v2184_1(void) = EnterFunction : # 2184| m2184_2(unknown) = AliasedDefinition : # 2184| m2184_3(unknown) = InitializeNonLocal : # 2184| m2184_4(unknown) = Chi : total:m2184_2, partial:m2184_3 -# 2185| r2185_1(glval) = VariableAddress[a] : -# 2185| m2185_2(ClassWithDestructor) = Uninitialized[a] : &:r2185_1 +# 2184| r2184_5(glval) = VariableAddress[b] : +# 2184| m2184_6(bool) = InitializeParameter[b] : &:r2184_5 +# 2184| r2184_7(glval) = VariableAddress[c] : +# 2184| m2184_8(char) = InitializeParameter[c] : &:r2184_7 +# 2185| r2185_1(glval) = VariableAddress[x] : +# 2185| m2185_2(ClassWithDestructor) = Uninitialized[x] : &:r2185_1 # 2185| r2185_3(glval) = FunctionAddress[ClassWithDestructor] : # 2185| v2185_4(void) = Call[ClassWithDestructor] : func:r2185_3, this:r2185_1 # 2185| m2185_5(unknown) = ^CallSideEffect : ~m2184_4 # 2185| m2185_6(unknown) = Chi : total:m2184_4, partial:m2185_5 # 2185| m2185_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2185_1 # 2185| m2185_8(ClassWithDestructor) = Chi : total:m2185_2, partial:m2185_7 -# 2186| r2186_1(glval) = VariableAddress[b] : -# 2186| m2186_2(ClassWithDestructor) = Uninitialized[b] : &:r2186_1 -# 2186| r2186_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2186| v2186_4(void) = Call[ClassWithDestructor] : func:r2186_3, this:r2186_1 -# 2186| m2186_5(unknown) = ^CallSideEffect : ~m2185_6 -# 2186| m2186_6(unknown) = Chi : total:m2185_6, partial:m2186_5 -# 2186| m2186_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2186_1 -# 2186| m2186_8(ClassWithDestructor) = Chi : total:m2186_2, partial:m2186_7 -# 2187| r2187_1(glval) = VariableAddress[c#init] : -# 2187| r2187_2(bool) = Load[c#init] : &:r2187_1, ~m2186_6 -# 2187| v2187_3(void) = ConditionalBranch : r2187_2 +# 2185| r2185_9(glval) = VariableAddress[b] : +# 2185| r2185_10(bool) = Load[b] : &:r2185_9, m2184_6 +# 2185| v2185_11(void) = ConditionalBranch : r2185_10 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2184| Block 1 +# 2184| m2184_9(unknown) = Phi : from 13:~m2219_5, from 19:~m2219_13, from 23:~m2219_22 +# 2184| v2184_10(void) = ReturnVoid : +# 2184| v2184_11(void) = AliasedUse : ~m2184_9 +# 2184| v2184_12(void) = ExitFunction : + +# 2186| Block 2 +# 2186| r2186_1(glval) = VariableAddress[x] : +# 2186| r2186_2(glval) = FunctionAddress[set_x] : +# 2186| r2186_3(char) = Constant[97] : +# 2186| v2186_4(void) = Call[set_x] : func:r2186_2, this:r2186_1, 0:r2186_3 +# 2186| m2186_5(unknown) = ^CallSideEffect : ~m2185_6 +# 2186| m2186_6(unknown) = Chi : total:m2185_6, partial:m2186_5 +# 2186| v2186_7(void) = ^IndirectReadSideEffect[-1] : &:r2186_1, m2185_8 +# 2186| m2186_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2186_1 +# 2186| m2186_9(ClassWithDestructor) = Chi : total:m2185_8, partial:m2186_8 +# 2186| r2186_10(glval) = VariableAddress[x] : +# 2186| r2186_11(glval) = FunctionAddress[~ClassWithDestructor] : +# 2186| v2186_12(void) = Call[~ClassWithDestructor] : func:r2186_11, this:r2186_10 +# 2186| m2186_13(unknown) = ^CallSideEffect : ~m2186_6 +# 2186| m2186_14(unknown) = Chi : total:m2186_6, partial:m2186_13 +# 2186| v2186_15(void) = ^IndirectReadSideEffect[-1] : &:r2186_10, m2186_9 +# 2186| m2186_16(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2186_10 +# 2186| m2186_17(ClassWithDestructor) = Chi : total:m2186_9, partial:m2186_16 +#-----| Goto -> Block 3 + +# 2188| Block 3 +# 2188| m2188_1(unknown) = Phi : from 0:~m2185_6, from 2:~m2186_14 +# 2188| r2188_2(glval) = VariableAddress[x] : +# 2188| m2188_3(ClassWithDestructor) = Uninitialized[x] : &:r2188_2 +# 2188| r2188_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2188| v2188_5(void) = Call[ClassWithDestructor] : func:r2188_4, this:r2188_2 +# 2188| m2188_6(unknown) = ^CallSideEffect : ~m2188_1 +# 2188| m2188_7(unknown) = Chi : total:m2188_1, partial:m2188_6 +# 2188| m2188_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2188_2 +# 2188| m2188_9(ClassWithDestructor) = Chi : total:m2188_3, partial:m2188_8 +# 2188| r2188_10(bool) = Constant[1] : +# 2188| v2188_11(void) = ConditionalBranch : r2188_10 +#-----| False -> Block 24 +#-----| True -> Block 4 + +# 2189| Block 4 +# 2189| r2189_1(glval) = VariableAddress[x] : +# 2189| r2189_2(glval) = FunctionAddress[set_x] : +# 2189| r2189_3(char) = Constant[97] : +# 2189| v2189_4(void) = Call[set_x] : func:r2189_2, this:r2189_1, 0:r2189_3 +# 2189| m2189_5(unknown) = ^CallSideEffect : ~m2188_7 +# 2189| m2189_6(unknown) = Chi : total:m2188_7, partial:m2189_5 +# 2189| v2189_7(void) = ^IndirectReadSideEffect[-1] : &:r2189_1, m2188_9 +# 2189| m2189_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2189_1 +# 2189| m2189_9(ClassWithDestructor) = Chi : total:m2188_9, partial:m2189_8 +# 2191| r2191_1(glval) = VariableAddress[x] : +# 2191| m2191_2(ClassWithDestructor) = Uninitialized[x] : &:r2191_1 +# 2191| r2191_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2191| v2191_4(void) = Call[ClassWithDestructor] : func:r2191_3, this:r2191_1 +# 2191| m2191_5(unknown) = ^CallSideEffect : ~m2189_6 +# 2191| m2191_6(unknown) = Chi : total:m2189_6, partial:m2191_5 +# 2191| m2191_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2191_1 +# 2191| m2191_8(ClassWithDestructor) = Chi : total:m2191_2, partial:m2191_7 +# 2191| r2191_9(glval) = VariableAddress[c] : +# 2191| r2191_10(char) = Load[c] : &:r2191_9, m2184_8 +# 2191| r2191_11(int) = Convert : r2191_10 +# 2191| v2191_12(void) = Switch : r2191_11 +#-----| Case[97] -> Block 5 +#-----| Default -> Block 6 + +# 2192| Block 5 +# 2192| v2192_1(void) = NoOp : +# 2193| r2193_1(glval) = VariableAddress[x] : +# 2193| r2193_2(glval) = FunctionAddress[set_x] : +# 2193| r2193_3(char) = Constant[97] : +# 2193| v2193_4(void) = Call[set_x] : func:r2193_2, this:r2193_1, 0:r2193_3 +# 2193| m2193_5(unknown) = ^CallSideEffect : ~m2191_6 +# 2193| m2193_6(unknown) = Chi : total:m2191_6, partial:m2193_5 +# 2193| v2193_7(void) = ^IndirectReadSideEffect[-1] : &:r2193_1, m2191_8 +# 2193| m2193_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2193_1 +# 2193| m2193_9(ClassWithDestructor) = Chi : total:m2191_8, partial:m2193_8 +# 2194| v2194_1(void) = NoOp : +#-----| Goto -> Block 7 + +# 2195| Block 6 +# 2195| v2195_1(void) = NoOp : +# 2196| r2196_1(glval) = VariableAddress[x] : +# 2196| r2196_2(glval) = FunctionAddress[set_x] : +# 2196| r2196_3(char) = Constant[98] : +# 2196| v2196_4(void) = Call[set_x] : func:r2196_2, this:r2196_1, 0:r2196_3 +# 2196| m2196_5(unknown) = ^CallSideEffect : ~m2191_6 +# 2196| m2196_6(unknown) = Chi : total:m2191_6, partial:m2196_5 +# 2196| v2196_7(void) = ^IndirectReadSideEffect[-1] : &:r2196_1, m2191_8 +# 2196| m2196_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2196_1 +# 2196| m2196_9(ClassWithDestructor) = Chi : total:m2191_8, partial:m2196_8 +# 2197| v2197_1(void) = NoOp : +#-----| Goto -> Block 7 + +# 2198| Block 7 +# 2198| m2198_1(unknown) = Phi : from 5:~m2193_6, from 6:~m2196_6 +# 2198| v2198_2(void) = NoOp : +# 2200| r2200_1(glval) = VariableAddress[x] : +# 2200| m2200_2(ClassWithDestructor) = Uninitialized[x] : &:r2200_1 +# 2200| r2200_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2200| v2200_4(void) = Call[ClassWithDestructor] : func:r2200_3, this:r2200_1 +# 2200| m2200_5(unknown) = ^CallSideEffect : ~m2198_1 +# 2200| m2200_6(unknown) = Chi : total:m2198_1, partial:m2200_5 +# 2200| m2200_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2200_1 +# 2200| m2200_8(ClassWithDestructor) = Chi : total:m2200_2, partial:m2200_7 +# 2201| r2201_1(glval>) = VariableAddress[ys] : +# 2201| m2201_2(vector) = Uninitialized[ys] : &:r2201_1 +# 2201| r2201_3(glval) = FunctionAddress[vector] : +# 2201| r2201_4(glval) = VariableAddress[#temp2201:45] : +# 2201| r2201_5(glval) = VariableAddress[x] : +# 2201| r2201_6(ClassWithDestructor) = Load[x] : &:r2201_5, m2200_8 +# 2201| m2201_7(ClassWithDestructor) = Store[#temp2201:45] : &:r2201_4, r2201_6 +# 2201| r2201_8(ClassWithDestructor) = Load[#temp2201:45] : &:r2201_4, m2201_7 +# 2201| v2201_9(void) = Call[vector] : func:r2201_3, this:r2201_1, 0:r2201_8 +# 2201| m2201_10(unknown) = ^CallSideEffect : ~m2200_6 +# 2201| m2201_11(unknown) = Chi : total:m2200_6, partial:m2201_10 +# 2201| m2201_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2201_1 +# 2201| m2201_13(vector) = Chi : total:m2201_2, partial:m2201_12 +# 2201| r2201_14(glval &>) = VariableAddress[(__range)] : +# 2201| r2201_15(glval>) = VariableAddress[ys] : +# 2201| r2201_16(vector &) = CopyValue : r2201_15 +# 2201| m2201_17(vector &) = Store[(__range)] : &:r2201_14, r2201_16 +# 2201| r2201_18(glval>) = VariableAddress[(__begin)] : +# 2201| r2201_19(glval &>) = VariableAddress[(__range)] : +# 2201| r2201_20(vector &) = Load[(__range)] : &:r2201_19, m2201_17 +#-----| r0_1(glval>) = CopyValue : r2201_20 +#-----| r0_2(glval>) = Convert : r0_1 +# 2201| r2201_21(glval) = FunctionAddress[begin] : +# 2201| r2201_22(iterator) = Call[begin] : func:r2201_21, this:r0_2 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2201_13 +# 2201| m2201_23(iterator) = Store[(__begin)] : &:r2201_18, r2201_22 +# 2201| r2201_24(glval>) = VariableAddress[(__end)] : +# 2201| r2201_25(glval &>) = VariableAddress[(__range)] : +# 2201| r2201_26(vector &) = Load[(__range)] : &:r2201_25, m2201_17 +#-----| r0_4(glval>) = CopyValue : r2201_26 +#-----| r0_5(glval>) = Convert : r0_4 +# 2201| r2201_27(glval) = FunctionAddress[end] : +# 2201| r2201_28(iterator) = Call[end] : func:r2201_27, this:r0_5 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2201_13 +# 2201| m2201_29(iterator) = Store[(__end)] : &:r2201_24, r2201_28 +#-----| Goto -> Block 8 + +# 2201| Block 8 +# 2201| m2201_30(iterator) = Phi : from 7:m2201_23, from 9:m2201_68 +# 2201| m2201_31(unknown) = Phi : from 7:~m2201_11, from 9:~m2201_65 +# 2201| r2201_32(glval>) = VariableAddress[(__begin)] : +#-----| r0_7(glval>) = Convert : r2201_32 +# 2201| r2201_33(glval) = FunctionAddress[operator!=] : +#-----| r0_8(glval>) = VariableAddress[#temp0:0] : +#-----| m0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 +# 2201| r2201_34(glval) = FunctionAddress[iterator] : +# 2201| r2201_35(glval>) = VariableAddress[(__end)] : +#-----| r0_10(glval>) = Convert : r2201_35 +#-----| r0_11(iterator &) = CopyValue : r0_10 +# 2201| v2201_36(void) = Call[iterator] : func:r2201_34, this:r0_8, 0:r0_11 +# 2201| m2201_37(unknown) = ^CallSideEffect : ~m2201_31 +# 2201| m2201_38(unknown) = Chi : total:m2201_31, partial:m2201_37 +#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m2201_29 +# 2201| m2201_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +# 2201| m2201_40(iterator) = Chi : total:m0_9, partial:m2201_39 +#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, m2201_40 +# 2201| r2201_41(bool) = Call[operator!=] : func:r2201_33, this:r0_7, 0:r0_13 +# 2201| m2201_42(unknown) = ^CallSideEffect : ~m2201_38 +# 2201| m2201_43(unknown) = Chi : total:m2201_38, partial:m2201_42 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2201_30 +# 2201| v2201_44(void) = ConditionalBranch : r2201_41 +#-----| False -> Block 10 +#-----| True -> Block 9 + +# 2201| Block 9 +# 2201| r2201_45(glval) = VariableAddress[y] : +# 2201| r2201_46(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2201_46 +# 2201| r2201_47(glval) = FunctionAddress[operator*] : +# 2201| r2201_48(ClassWithDestructor &) = Call[operator*] : func:r2201_47, this:r0_15 +# 2201| m2201_49(unknown) = ^CallSideEffect : ~m2201_43 +# 2201| m2201_50(unknown) = Chi : total:m2201_43, partial:m2201_49 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2201_30 +# 2201| r2201_51(ClassWithDestructor) = Load[?] : &:r2201_48, ~m2201_50 +# 2201| m2201_52(ClassWithDestructor) = Store[y] : &:r2201_45, r2201_51 +# 2202| r2202_1(glval) = VariableAddress[y] : +# 2202| r2202_2(glval) = FunctionAddress[set_x] : +# 2202| r2202_3(char) = Constant[97] : +# 2202| v2202_4(void) = Call[set_x] : func:r2202_2, this:r2202_1, 0:r2202_3 +# 2202| m2202_5(unknown) = ^CallSideEffect : ~m2201_50 +# 2202| m2202_6(unknown) = Chi : total:m2201_50, partial:m2202_5 +# 2202| v2202_7(void) = ^IndirectReadSideEffect[-1] : &:r2202_1, m2201_52 +# 2202| m2202_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2202_1 +# 2202| m2202_9(ClassWithDestructor) = Chi : total:m2201_52, partial:m2202_8 +# 2201| r2201_53(glval) = VariableAddress[y] : +# 2201| r2201_54(glval) = FunctionAddress[~ClassWithDestructor] : +# 2201| v2201_55(void) = Call[~ClassWithDestructor] : func:r2201_54, this:r2201_53 +# 2201| m2201_56(unknown) = ^CallSideEffect : ~m2202_6 +# 2201| m2201_57(unknown) = Chi : total:m2202_6, partial:m2201_56 +# 2201| v2201_58(void) = ^IndirectReadSideEffect[-1] : &:r2201_53, m2202_9 +# 2201| m2201_59(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2201_53 +# 2201| m2201_60(ClassWithDestructor) = Chi : total:m2202_9, partial:m2201_59 +# 2201| r2201_61(glval>) = VariableAddress[(__begin)] : +# 2201| r2201_62(glval) = FunctionAddress[operator++] : +# 2201| r2201_63(iterator &) = Call[operator++] : func:r2201_62, this:r2201_61 +# 2201| m2201_64(unknown) = ^CallSideEffect : ~m2201_57 +# 2201| m2201_65(unknown) = Chi : total:m2201_57, partial:m2201_64 +# 2201| v2201_66(void) = ^IndirectReadSideEffect[-1] : &:r2201_61, m2201_30 +# 2201| m2201_67(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2201_61 +# 2201| m2201_68(iterator) = Chi : total:m2201_30, partial:m2201_67 +# 2201| r2201_69(glval>) = CopyValue : r2201_63 +#-----| Goto (back edge) -> Block 8 + +# 2204| Block 10 +# 2204| r2204_1(glval>) = VariableAddress[ys] : +# 2204| m2204_2(vector) = Uninitialized[ys] : &:r2204_1 +# 2204| r2204_3(glval) = FunctionAddress[vector] : +# 2204| r2204_4(glval) = VariableAddress[#temp2204:45] : +# 2204| r2204_5(glval) = VariableAddress[x] : +# 2204| r2204_6(ClassWithDestructor) = Load[x] : &:r2204_5, m2200_8 +# 2204| m2204_7(ClassWithDestructor) = Store[#temp2204:45] : &:r2204_4, r2204_6 +# 2204| r2204_8(ClassWithDestructor) = Load[#temp2204:45] : &:r2204_4, m2204_7 +# 2204| v2204_9(void) = Call[vector] : func:r2204_3, this:r2204_1, 0:r2204_8 +# 2204| m2204_10(unknown) = ^CallSideEffect : ~m2201_43 +# 2204| m2204_11(unknown) = Chi : total:m2201_43, partial:m2204_10 +# 2204| m2204_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2204_1 +# 2204| m2204_13(vector) = Chi : total:m2204_2, partial:m2204_12 +# 2204| r2204_14(glval &>) = VariableAddress[(__range)] : +# 2204| r2204_15(glval>) = VariableAddress[ys] : +# 2204| r2204_16(vector &) = CopyValue : r2204_15 +# 2204| m2204_17(vector &) = Store[(__range)] : &:r2204_14, r2204_16 +# 2204| r2204_18(glval>) = VariableAddress[(__begin)] : +# 2204| r2204_19(glval &>) = VariableAddress[(__range)] : +# 2204| r2204_20(vector &) = Load[(__range)] : &:r2204_19, m2204_17 +#-----| r0_17(glval>) = CopyValue : r2204_20 +#-----| r0_18(glval>) = Convert : r0_17 +# 2204| r2204_21(glval) = FunctionAddress[begin] : +# 2204| r2204_22(iterator) = Call[begin] : func:r2204_21, this:r0_18 +#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, m2204_13 +# 2204| m2204_23(iterator) = Store[(__begin)] : &:r2204_18, r2204_22 +# 2204| r2204_24(glval>) = VariableAddress[(__end)] : +# 2204| r2204_25(glval &>) = VariableAddress[(__range)] : +# 2204| r2204_26(vector &) = Load[(__range)] : &:r2204_25, m2204_17 +#-----| r0_20(glval>) = CopyValue : r2204_26 +#-----| r0_21(glval>) = Convert : r0_20 +# 2204| r2204_27(glval) = FunctionAddress[end] : +# 2204| r2204_28(iterator) = Call[end] : func:r2204_27, this:r0_21 +#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_21, m2204_13 +# 2204| m2204_29(iterator) = Store[(__end)] : &:r2204_24, r2204_28 +#-----| Goto -> Block 11 + +# 2204| Block 11 +# 2204| m2204_30(iterator) = Phi : from 10:m2204_23, from 14:m2204_84 +# 2204| m2204_31(unknown) = Phi : from 10:~m2204_11, from 14:~m2204_81 +# 2204| r2204_32(glval>) = VariableAddress[(__begin)] : +#-----| r0_23(glval>) = Convert : r2204_32 +# 2204| r2204_33(glval) = FunctionAddress[operator!=] : +#-----| r0_24(glval>) = VariableAddress[#temp0:0] : +#-----| m0_25(iterator) = Uninitialized[#temp0:0] : &:r0_24 +# 2204| r2204_34(glval) = FunctionAddress[iterator] : +# 2204| r2204_35(glval>) = VariableAddress[(__end)] : +#-----| r0_26(glval>) = Convert : r2204_35 +#-----| r0_27(iterator &) = CopyValue : r0_26 +# 2204| v2204_36(void) = Call[iterator] : func:r2204_34, this:r0_24, 0:r0_27 +# 2204| m2204_37(unknown) = ^CallSideEffect : ~m2204_31 +# 2204| m2204_38(unknown) = Chi : total:m2204_31, partial:m2204_37 +#-----| v0_28(void) = ^BufferReadSideEffect[0] : &:r0_27, ~m2204_29 +# 2204| m2204_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_24 +# 2204| m2204_40(iterator) = Chi : total:m0_25, partial:m2204_39 +#-----| r0_29(iterator) = Load[#temp0:0] : &:r0_24, m2204_40 +# 2204| r2204_41(bool) = Call[operator!=] : func:r2204_33, this:r0_23, 0:r0_29 +# 2204| m2204_42(unknown) = ^CallSideEffect : ~m2204_38 +# 2204| m2204_43(unknown) = Chi : total:m2204_38, partial:m2204_42 +#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_23, m2204_30 +# 2204| v2204_44(void) = ConditionalBranch : r2204_41 +#-----| False -> Block 15 +#-----| True -> Block 12 + +# 2204| Block 12 +# 2204| r2204_45(glval) = VariableAddress[y] : +# 2204| r2204_46(glval>) = VariableAddress[(__begin)] : +#-----| r0_31(glval>) = Convert : r2204_46 +# 2204| r2204_47(glval) = FunctionAddress[operator*] : +# 2204| r2204_48(ClassWithDestructor &) = Call[operator*] : func:r2204_47, this:r0_31 +# 2204| m2204_49(unknown) = ^CallSideEffect : ~m2204_43 +# 2204| m2204_50(unknown) = Chi : total:m2204_43, partial:m2204_49 +#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, m2204_30 +# 2204| r2204_51(ClassWithDestructor) = Load[?] : &:r2204_48, ~m2204_50 +# 2204| m2204_52(ClassWithDestructor) = Store[y] : &:r2204_45, r2204_51 +# 2205| r2205_1(glval) = VariableAddress[y] : +# 2205| r2205_2(glval) = FunctionAddress[set_x] : +# 2205| r2205_3(char) = Constant[97] : +# 2205| v2205_4(void) = Call[set_x] : func:r2205_2, this:r2205_1, 0:r2205_3 +# 2205| m2205_5(unknown) = ^CallSideEffect : ~m2204_50 +# 2205| m2205_6(unknown) = Chi : total:m2204_50, partial:m2205_5 +# 2205| v2205_7(void) = ^IndirectReadSideEffect[-1] : &:r2205_1, m2204_52 +# 2205| m2205_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2205_1 +# 2205| m2205_9(ClassWithDestructor) = Chi : total:m2204_52, partial:m2205_8 +# 2206| r2206_1(glval) = VariableAddress[y] : +# 2206| r2206_2(glval) = FunctionAddress[get_x] : +# 2206| r2206_3(char) = Call[get_x] : func:r2206_2, this:r2206_1 +# 2206| m2206_4(unknown) = ^CallSideEffect : ~m2205_6 +# 2206| m2206_5(unknown) = Chi : total:m2205_6, partial:m2206_4 +# 2206| v2206_6(void) = ^IndirectReadSideEffect[-1] : &:r2206_1, m2205_9 +# 2206| m2206_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2206_1 +# 2206| m2206_8(ClassWithDestructor) = Chi : total:m2205_9, partial:m2206_7 +# 2206| r2206_9(int) = Convert : r2206_3 +# 2206| r2206_10(int) = Constant[98] : +# 2206| r2206_11(bool) = CompareEQ : r2206_9, r2206_10 +# 2206| v2206_12(void) = ConditionalBranch : r2206_11 +#-----| False -> Block 14 +#-----| True -> Block 13 + +# 2207| Block 13 +# 2207| v2207_1(void) = NoOp : +# 2204| r2204_53(glval) = VariableAddress[y] : +# 2204| r2204_54(glval) = FunctionAddress[~ClassWithDestructor] : +# 2204| v2204_55(void) = Call[~ClassWithDestructor] : func:r2204_54, this:r2204_53 +# 2204| m2204_56(unknown) = ^CallSideEffect : ~m2206_5 +# 2204| m2204_57(unknown) = Chi : total:m2206_5, partial:m2204_56 +# 2204| v2204_58(void) = ^IndirectReadSideEffect[-1] : &:r2204_53, m2206_8 +# 2204| m2204_59(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2204_53 +# 2204| m2204_60(ClassWithDestructor) = Chi : total:m2206_8, partial:m2204_59 +# 2204| r2204_61(glval>) = VariableAddress[ys] : +# 2204| r2204_62(glval) = FunctionAddress[~vector] : +# 2204| v2204_63(void) = Call[~vector] : func:r2204_62, this:r2204_61 +# 2204| m2204_64(unknown) = ^CallSideEffect : ~m2204_57 +# 2204| m2204_65(unknown) = Chi : total:m2204_57, partial:m2204_64 +# 2204| v2204_66(void) = ^IndirectReadSideEffect[-1] : &:r2204_61, m2204_13 +# 2204| m2204_67(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2204_61 +# 2204| m2204_68(vector) = Chi : total:m2204_13, partial:m2204_67 +# 2219| r2219_1(glval) = VariableAddress[x] : +# 2219| r2219_2(glval) = FunctionAddress[~ClassWithDestructor] : +# 2219| v2219_3(void) = Call[~ClassWithDestructor] : func:r2219_2, this:r2219_1 +# 2219| m2219_4(unknown) = ^CallSideEffect : ~m2204_65 +# 2219| m2219_5(unknown) = Chi : total:m2204_65, partial:m2219_4 +# 2219| v2219_6(void) = ^IndirectReadSideEffect[-1] : &:r2219_1, m2200_8 +# 2219| m2219_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_1 +# 2219| m2219_8(ClassWithDestructor) = Chi : total:m2200_8, partial:m2219_7 +#-----| Goto -> Block 1 + +# 2204| Block 14 +# 2204| r2204_69(glval) = VariableAddress[y] : +# 2204| r2204_70(glval) = FunctionAddress[~ClassWithDestructor] : +# 2204| v2204_71(void) = Call[~ClassWithDestructor] : func:r2204_70, this:r2204_69 +# 2204| m2204_72(unknown) = ^CallSideEffect : ~m2206_5 +# 2204| m2204_73(unknown) = Chi : total:m2206_5, partial:m2204_72 +# 2204| v2204_74(void) = ^IndirectReadSideEffect[-1] : &:r2204_69, m2206_8 +# 2204| m2204_75(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2204_69 +# 2204| m2204_76(ClassWithDestructor) = Chi : total:m2206_8, partial:m2204_75 +# 2204| r2204_77(glval>) = VariableAddress[(__begin)] : +# 2204| r2204_78(glval) = FunctionAddress[operator++] : +# 2204| r2204_79(iterator &) = Call[operator++] : func:r2204_78, this:r2204_77 +# 2204| m2204_80(unknown) = ^CallSideEffect : ~m2204_73 +# 2204| m2204_81(unknown) = Chi : total:m2204_73, partial:m2204_80 +# 2204| v2204_82(void) = ^IndirectReadSideEffect[-1] : &:r2204_77, m2204_30 +# 2204| m2204_83(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2204_77 +# 2204| m2204_84(iterator) = Chi : total:m2204_30, partial:m2204_83 +# 2204| r2204_85(glval>) = CopyValue : r2204_79 +#-----| Goto (back edge) -> Block 11 + +# 2210| Block 15 +# 2210| r2210_1(glval>) = VariableAddress[ys] : +# 2210| m2210_2(vector) = Uninitialized[ys] : &:r2210_1 +# 2210| r2210_3(glval) = FunctionAddress[vector] : +# 2210| r2210_4(int) = Constant[1] : +# 2210| v2210_5(void) = Call[vector] : func:r2210_3, this:r2210_1, 0:r2210_4 +# 2210| m2210_6(unknown) = ^CallSideEffect : ~m2204_43 +# 2210| m2210_7(unknown) = Chi : total:m2204_43, partial:m2210_6 +# 2210| m2210_8(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2210_1 +# 2210| m2210_9(vector) = Chi : total:m2210_2, partial:m2210_8 +# 2210| r2210_10(glval &>) = VariableAddress[(__range)] : +# 2210| r2210_11(glval>) = VariableAddress[ys] : +# 2210| r2210_12(vector &) = CopyValue : r2210_11 +# 2210| m2210_13(vector &) = Store[(__range)] : &:r2210_10, r2210_12 +# 2210| r2210_14(glval>) = VariableAddress[(__begin)] : +# 2210| r2210_15(glval &>) = VariableAddress[(__range)] : +# 2210| r2210_16(vector &) = Load[(__range)] : &:r2210_15, m2210_13 +#-----| r0_33(glval>) = CopyValue : r2210_16 +#-----| r0_34(glval>) = Convert : r0_33 +# 2210| r2210_17(glval) = FunctionAddress[begin] : +# 2210| r2210_18(iterator) = Call[begin] : func:r2210_17, this:r0_34 +#-----| v0_35(void) = ^IndirectReadSideEffect[-1] : &:r0_34, m2210_9 +# 2210| m2210_19(iterator) = Store[(__begin)] : &:r2210_14, r2210_18 +# 2210| r2210_20(glval>) = VariableAddress[(__end)] : +# 2210| r2210_21(glval &>) = VariableAddress[(__range)] : +# 2210| r2210_22(vector &) = Load[(__range)] : &:r2210_21, m2210_13 +#-----| r0_36(glval>) = CopyValue : r2210_22 +#-----| r0_37(glval>) = Convert : r0_36 +# 2210| r2210_23(glval) = FunctionAddress[end] : +# 2210| r2210_24(iterator) = Call[end] : func:r2210_23, this:r0_37 +#-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, m2210_9 +# 2210| m2210_25(iterator) = Store[(__end)] : &:r2210_20, r2210_24 +#-----| Goto -> Block 16 + +# 2210| Block 16 +# 2210| m2210_26(iterator) = Phi : from 15:m2210_19, from 17:m2210_48 +# 2210| m2210_27(unknown) = Phi : from 15:~m2210_7, from 17:~m2210_45 +# 2210| r2210_28(glval>) = VariableAddress[(__begin)] : +#-----| r0_39(glval>) = Convert : r2210_28 +# 2210| r2210_29(glval) = FunctionAddress[operator!=] : +#-----| r0_40(glval>) = VariableAddress[#temp0:0] : +#-----| m0_41(iterator) = Uninitialized[#temp0:0] : &:r0_40 +# 2210| r2210_30(glval) = FunctionAddress[iterator] : +# 2210| r2210_31(glval>) = VariableAddress[(__end)] : +#-----| r0_42(glval>) = Convert : r2210_31 +#-----| r0_43(iterator &) = CopyValue : r0_42 +# 2210| v2210_32(void) = Call[iterator] : func:r2210_30, this:r0_40, 0:r0_43 +# 2210| m2210_33(unknown) = ^CallSideEffect : ~m2210_27 +# 2210| m2210_34(unknown) = Chi : total:m2210_27, partial:m2210_33 +#-----| v0_44(void) = ^BufferReadSideEffect[0] : &:r0_43, ~m2210_25 +# 2210| m2210_35(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_40 +# 2210| m2210_36(iterator) = Chi : total:m0_41, partial:m2210_35 +#-----| r0_45(iterator) = Load[#temp0:0] : &:r0_40, m2210_36 +# 2210| r2210_37(bool) = Call[operator!=] : func:r2210_29, this:r0_39, 0:r0_45 +# 2210| m2210_38(unknown) = ^CallSideEffect : ~m2210_34 +# 2210| m2210_39(unknown) = Chi : total:m2210_34, partial:m2210_38 +#-----| v0_46(void) = ^IndirectReadSideEffect[-1] : &:r0_39, m2210_26 +# 2210| v2210_40(void) = ConditionalBranch : r2210_37 +#-----| False -> Block 20 +#-----| True -> Block 18 + +# 2210| Block 17 +# 2210| r2210_41(glval>) = VariableAddress[(__begin)] : +# 2210| r2210_42(glval) = FunctionAddress[operator++] : +# 2210| r2210_43(iterator &) = Call[operator++] : func:r2210_42, this:r2210_41 +# 2210| m2210_44(unknown) = ^CallSideEffect : ~m2210_55 +# 2210| m2210_45(unknown) = Chi : total:m2210_55, partial:m2210_44 +# 2210| v2210_46(void) = ^IndirectReadSideEffect[-1] : &:r2210_41, m2210_26 +# 2210| m2210_47(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2210_41 +# 2210| m2210_48(iterator) = Chi : total:m2210_26, partial:m2210_47 +# 2210| r2210_49(glval>) = CopyValue : r2210_43 +#-----| Goto (back edge) -> Block 16 + +# 2210| Block 18 +# 2210| r2210_50(glval) = VariableAddress[y] : +# 2210| r2210_51(glval>) = VariableAddress[(__begin)] : +#-----| r0_47(glval>) = Convert : r2210_51 +# 2210| r2210_52(glval) = FunctionAddress[operator*] : +# 2210| r2210_53(int &) = Call[operator*] : func:r2210_52, this:r0_47 +# 2210| m2210_54(unknown) = ^CallSideEffect : ~m2210_39 +# 2210| m2210_55(unknown) = Chi : total:m2210_39, partial:m2210_54 +#-----| v0_48(void) = ^IndirectReadSideEffect[-1] : &:r0_47, m2210_26 +# 2210| r2210_56(int) = Load[?] : &:r2210_53, ~m2210_55 +# 2210| m2210_57(int) = Store[y] : &:r2210_50, r2210_56 +# 2211| r2211_1(glval) = VariableAddress[y] : +# 2211| r2211_2(int) = Load[y] : &:r2211_1, m2210_57 +# 2211| r2211_3(int) = Constant[1] : +# 2211| r2211_4(bool) = CompareEQ : r2211_2, r2211_3 +# 2211| v2211_5(void) = ConditionalBranch : r2211_4 +#-----| False -> Block 17 +#-----| True -> Block 19 + +# 2212| Block 19 +# 2212| v2212_1(void) = NoOp : +# 2210| r2210_58(glval>) = VariableAddress[ys] : +# 2210| r2210_59(glval) = FunctionAddress[~vector] : +# 2210| v2210_60(void) = Call[~vector] : func:r2210_59, this:r2210_58 +# 2210| m2210_61(unknown) = ^CallSideEffect : ~m2210_55 +# 2210| m2210_62(unknown) = Chi : total:m2210_55, partial:m2210_61 +# 2210| v2210_63(void) = ^IndirectReadSideEffect[-1] : &:r2210_58, m2210_9 +# 2210| m2210_64(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2210_58 +# 2210| m2210_65(vector) = Chi : total:m2210_9, partial:m2210_64 +# 2219| r2219_9(glval) = VariableAddress[x] : +# 2219| r2219_10(glval) = FunctionAddress[~ClassWithDestructor] : +# 2219| v2219_11(void) = Call[~ClassWithDestructor] : func:r2219_10, this:r2219_9 +# 2219| m2219_12(unknown) = ^CallSideEffect : ~m2210_62 +# 2219| m2219_13(unknown) = Chi : total:m2210_62, partial:m2219_12 +# 2219| v2219_14(void) = ^IndirectReadSideEffect[-1] : &:r2219_9, m2200_8 +# 2219| m2219_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_9 +# 2219| m2219_16(ClassWithDestructor) = Chi : total:m2200_8, partial:m2219_15 +#-----| Goto -> Block 1 + +# 2215| Block 20 +# 2215| r2215_1(glval>) = VariableAddress[ys] : +# 2215| m2215_2(vector) = Uninitialized[ys] : &:r2215_1 +# 2215| r2215_3(glval) = FunctionAddress[vector] : +# 2215| r2215_4(glval) = VariableAddress[#temp2215:45] : +# 2215| r2215_5(glval) = VariableAddress[x] : +# 2215| r2215_6(ClassWithDestructor) = Load[x] : &:r2215_5, m2200_8 +# 2215| m2215_7(ClassWithDestructor) = Store[#temp2215:45] : &:r2215_4, r2215_6 +# 2215| r2215_8(ClassWithDestructor) = Load[#temp2215:45] : &:r2215_4, m2215_7 +# 2215| v2215_9(void) = Call[vector] : func:r2215_3, this:r2215_1, 0:r2215_8 +# 2215| m2215_10(unknown) = ^CallSideEffect : ~m2210_39 +# 2215| m2215_11(unknown) = Chi : total:m2210_39, partial:m2215_10 +# 2215| m2215_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2215_1 +# 2215| m2215_13(vector) = Chi : total:m2215_2, partial:m2215_12 +# 2215| r2215_14(glval &>) = VariableAddress[(__range)] : +# 2215| r2215_15(glval>) = VariableAddress[ys] : +# 2215| r2215_16(vector &) = CopyValue : r2215_15 +# 2215| m2215_17(vector &) = Store[(__range)] : &:r2215_14, r2215_16 +# 2215| r2215_18(glval>) = VariableAddress[(__begin)] : +# 2215| r2215_19(glval &>) = VariableAddress[(__range)] : +# 2215| r2215_20(vector &) = Load[(__range)] : &:r2215_19, m2215_17 +#-----| r0_49(glval>) = CopyValue : r2215_20 +#-----| r0_50(glval>) = Convert : r0_49 +# 2215| r2215_21(glval) = FunctionAddress[begin] : +# 2215| r2215_22(iterator) = Call[begin] : func:r2215_21, this:r0_50 +#-----| v0_51(void) = ^IndirectReadSideEffect[-1] : &:r0_50, m2215_13 +# 2215| m2215_23(iterator) = Store[(__begin)] : &:r2215_18, r2215_22 +# 2215| r2215_24(glval>) = VariableAddress[(__end)] : +# 2215| r2215_25(glval &>) = VariableAddress[(__range)] : +# 2215| r2215_26(vector &) = Load[(__range)] : &:r2215_25, m2215_17 +#-----| r0_52(glval>) = CopyValue : r2215_26 +#-----| r0_53(glval>) = Convert : r0_52 +# 2215| r2215_27(glval) = FunctionAddress[end] : +# 2215| r2215_28(iterator) = Call[end] : func:r2215_27, this:r0_53 +#-----| v0_54(void) = ^IndirectReadSideEffect[-1] : &:r0_53, m2215_13 +# 2215| m2215_29(iterator) = Store[(__end)] : &:r2215_24, r2215_28 +#-----| Goto -> Block 21 + +# 2215| Block 21 +# 2215| m2215_30(iterator) = Phi : from 20:m2215_23, from 22:m2215_68 +# 2215| m2215_31(unknown) = Phi : from 20:~m2215_11, from 22:~m2215_65 +# 2215| r2215_32(glval>) = VariableAddress[(__begin)] : +#-----| r0_55(glval>) = Convert : r2215_32 +# 2215| r2215_33(glval) = FunctionAddress[operator!=] : +#-----| r0_56(glval>) = VariableAddress[#temp0:0] : +#-----| m0_57(iterator) = Uninitialized[#temp0:0] : &:r0_56 +# 2215| r2215_34(glval) = FunctionAddress[iterator] : +# 2215| r2215_35(glval>) = VariableAddress[(__end)] : +#-----| r0_58(glval>) = Convert : r2215_35 +#-----| r0_59(iterator &) = CopyValue : r0_58 +# 2215| v2215_36(void) = Call[iterator] : func:r2215_34, this:r0_56, 0:r0_59 +# 2215| m2215_37(unknown) = ^CallSideEffect : ~m2215_31 +# 2215| m2215_38(unknown) = Chi : total:m2215_31, partial:m2215_37 +#-----| v0_60(void) = ^BufferReadSideEffect[0] : &:r0_59, ~m2215_29 +# 2215| m2215_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_56 +# 2215| m2215_40(iterator) = Chi : total:m0_57, partial:m2215_39 +#-----| r0_61(iterator) = Load[#temp0:0] : &:r0_56, m2215_40 +# 2215| r2215_41(bool) = Call[operator!=] : func:r2215_33, this:r0_55, 0:r0_61 +# 2215| m2215_42(unknown) = ^CallSideEffect : ~m2215_38 +# 2215| m2215_43(unknown) = Chi : total:m2215_38, partial:m2215_42 +#-----| v0_62(void) = ^IndirectReadSideEffect[-1] : &:r0_55, m2215_30 +# 2215| v2215_44(void) = ConditionalBranch : r2215_41 +#-----| False -> Block 23 +#-----| True -> Block 22 + +# 2215| Block 22 +# 2215| r2215_45(glval) = VariableAddress[y] : +# 2215| r2215_46(glval>) = VariableAddress[(__begin)] : +#-----| r0_63(glval>) = Convert : r2215_46 +# 2215| r2215_47(glval) = FunctionAddress[operator*] : +# 2215| r2215_48(ClassWithDestructor &) = Call[operator*] : func:r2215_47, this:r0_63 +# 2215| m2215_49(unknown) = ^CallSideEffect : ~m2215_43 +# 2215| m2215_50(unknown) = Chi : total:m2215_43, partial:m2215_49 +#-----| v0_64(void) = ^IndirectReadSideEffect[-1] : &:r0_63, m2215_30 +# 2215| r2215_51(ClassWithDestructor) = Load[?] : &:r2215_48, ~m2215_50 +# 2215| m2215_52(ClassWithDestructor) = Store[y] : &:r2215_45, r2215_51 +# 2216| r2216_1(glval) = VariableAddress[z1] : +# 2216| m2216_2(ClassWithDestructor) = Uninitialized[z1] : &:r2216_1 +# 2216| r2216_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2216| v2216_4(void) = Call[ClassWithDestructor] : func:r2216_3, this:r2216_1 +# 2216| m2216_5(unknown) = ^CallSideEffect : ~m2215_50 +# 2216| m2216_6(unknown) = Chi : total:m2215_50, partial:m2216_5 +# 2216| m2216_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2216_1 +# 2216| m2216_8(ClassWithDestructor) = Chi : total:m2216_2, partial:m2216_7 +# 2217| r2217_1(glval) = VariableAddress[z2] : +# 2217| m2217_2(ClassWithDestructor) = Uninitialized[z2] : &:r2217_1 +# 2217| r2217_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2217| v2217_4(void) = Call[ClassWithDestructor] : func:r2217_3, this:r2217_1 +# 2217| m2217_5(unknown) = ^CallSideEffect : ~m2216_6 +# 2217| m2217_6(unknown) = Chi : total:m2216_6, partial:m2217_5 +# 2217| m2217_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2217_1 +# 2217| m2217_8(ClassWithDestructor) = Chi : total:m2217_2, partial:m2217_7 +# 2218| r2218_1(glval) = VariableAddress[z2] : +# 2218| r2218_2(glval) = FunctionAddress[~ClassWithDestructor] : +# 2218| v2218_3(void) = Call[~ClassWithDestructor] : func:r2218_2, this:r2218_1 +# 2218| m2218_4(unknown) = ^CallSideEffect : ~m2217_6 +# 2218| m2218_5(unknown) = Chi : total:m2217_6, partial:m2218_4 +# 2218| v2218_6(void) = ^IndirectReadSideEffect[-1] : &:r2218_1, m2217_8 +# 2218| m2218_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_1 +# 2218| m2218_8(ClassWithDestructor) = Chi : total:m2217_8, partial:m2218_7 +# 2218| r2218_9(glval) = VariableAddress[z1] : +# 2218| r2218_10(glval) = FunctionAddress[~ClassWithDestructor] : +# 2218| v2218_11(void) = Call[~ClassWithDestructor] : func:r2218_10, this:r2218_9 +# 2218| m2218_12(unknown) = ^CallSideEffect : ~m2218_5 +# 2218| m2218_13(unknown) = Chi : total:m2218_5, partial:m2218_12 +# 2218| v2218_14(void) = ^IndirectReadSideEffect[-1] : &:r2218_9, m2216_8 +# 2218| m2218_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_9 +# 2218| m2218_16(ClassWithDestructor) = Chi : total:m2216_8, partial:m2218_15 +# 2215| r2215_53(glval) = VariableAddress[y] : +# 2215| r2215_54(glval) = FunctionAddress[~ClassWithDestructor] : +# 2215| v2215_55(void) = Call[~ClassWithDestructor] : func:r2215_54, this:r2215_53 +# 2215| m2215_56(unknown) = ^CallSideEffect : ~m2218_13 +# 2215| m2215_57(unknown) = Chi : total:m2218_13, partial:m2215_56 +# 2215| v2215_58(void) = ^IndirectReadSideEffect[-1] : &:r2215_53, m2215_52 +# 2215| m2215_59(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2215_53 +# 2215| m2215_60(ClassWithDestructor) = Chi : total:m2215_52, partial:m2215_59 +# 2215| r2215_61(glval>) = VariableAddress[(__begin)] : +# 2215| r2215_62(glval) = FunctionAddress[operator++] : +# 2215| r2215_63(iterator &) = Call[operator++] : func:r2215_62, this:r2215_61 +# 2215| m2215_64(unknown) = ^CallSideEffect : ~m2215_57 +# 2215| m2215_65(unknown) = Chi : total:m2215_57, partial:m2215_64 +# 2215| v2215_66(void) = ^IndirectReadSideEffect[-1] : &:r2215_61, m2215_30 +# 2215| m2215_67(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2215_61 +# 2215| m2215_68(iterator) = Chi : total:m2215_30, partial:m2215_67 +# 2215| r2215_69(glval>) = CopyValue : r2215_63 +#-----| Goto (back edge) -> Block 21 + +# 2219| Block 23 +# 2219| v2219_17(void) = NoOp : +# 2219| r2219_18(glval) = VariableAddress[x] : +# 2219| r2219_19(glval) = FunctionAddress[~ClassWithDestructor] : +# 2219| v2219_20(void) = Call[~ClassWithDestructor] : func:r2219_19, this:r2219_18 +# 2219| m2219_21(unknown) = ^CallSideEffect : ~m2215_43 +# 2219| m2219_22(unknown) = Chi : total:m2215_43, partial:m2219_21 +# 2219| v2219_23(void) = ^IndirectReadSideEffect[-1] : &:r2219_18, m2200_8 +# 2219| m2219_24(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_18 +# 2219| m2219_25(ClassWithDestructor) = Chi : total:m2200_8, partial:m2219_24 +#-----| Goto -> Block 1 + +# 2184| Block 24 +# 2184| v2184_13(void) = Unreached : + +# 2221| void static_variable_with_destructor_1() +# 2221| Block 0 +# 2221| v2221_1(void) = EnterFunction : +# 2221| m2221_2(unknown) = AliasedDefinition : +# 2221| m2221_3(unknown) = InitializeNonLocal : +# 2221| m2221_4(unknown) = Chi : total:m2221_2, partial:m2221_3 +# 2222| r2222_1(glval) = VariableAddress[a] : +# 2222| m2222_2(ClassWithDestructor) = Uninitialized[a] : &:r2222_1 +# 2222| r2222_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2222| v2222_4(void) = Call[ClassWithDestructor] : func:r2222_3, this:r2222_1 +# 2222| m2222_5(unknown) = ^CallSideEffect : ~m2221_4 +# 2222| m2222_6(unknown) = Chi : total:m2221_4, partial:m2222_5 +# 2222| m2222_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2222_1 +# 2222| m2222_8(ClassWithDestructor) = Chi : total:m2222_2, partial:m2222_7 +# 2223| r2223_1(glval) = VariableAddress[b#init] : +# 2223| r2223_2(bool) = Load[b#init] : &:r2223_1, ~m2222_6 +# 2223| v2223_3(void) = ConditionalBranch : r2223_2 #-----| False -> Block 1 #-----| True -> Block 2 -# 2187| Block 1 -# 2187| r2187_4(glval) = VariableAddress[c] : +# 2223| Block 1 +# 2223| r2223_4(glval) = VariableAddress[b] : #-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : -#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2187_4 -#-----| m0_3(unknown) = ^CallSideEffect : ~m2186_6 -#-----| m0_4(unknown) = Chi : total:m2186_6, partial:m0_3 -#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2187_4 +#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2223_4 +#-----| m0_3(unknown) = ^CallSideEffect : ~m2222_6 +#-----| m0_4(unknown) = Chi : total:m2222_6, partial:m0_3 +#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2223_4 #-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5 -# 2187| r2187_5(bool) = Constant[1] : -# 2187| m2187_6(bool) = Store[c#init] : &:r2187_1, r2187_5 -# 2187| m2187_7(unknown) = Chi : total:m0_6, partial:m2187_6 +# 2223| r2223_5(bool) = Constant[1] : +# 2223| m2223_6(bool) = Store[b#init] : &:r2223_1, r2223_5 +# 2223| m2223_7(unknown) = Chi : total:m0_6, partial:m2223_6 #-----| Goto -> Block 2 -# 2188| Block 2 -# 2188| m2188_1(unknown) = Phi : from 0:~m2186_6, from 1:~m2187_7 -# 2188| v2188_2(void) = NoOp : -# 2188| r2188_3(glval) = VariableAddress[b] : -# 2188| r2188_4(glval) = FunctionAddress[~ClassWithDestructor] : -# 2188| v2188_5(void) = Call[~ClassWithDestructor] : func:r2188_4, this:r2188_3 -# 2188| m2188_6(unknown) = ^CallSideEffect : ~m2188_1 -# 2188| m2188_7(unknown) = Chi : total:m2188_1, partial:m2188_6 -# 2188| v2188_8(void) = ^IndirectReadSideEffect[-1] : &:r2188_3, m2186_8 -# 2188| m2188_9(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2188_3 -# 2188| m2188_10(ClassWithDestructor) = Chi : total:m2186_8, partial:m2188_9 -# 2188| r2188_11(glval) = VariableAddress[a] : -# 2188| r2188_12(glval) = FunctionAddress[~ClassWithDestructor] : -# 2188| v2188_13(void) = Call[~ClassWithDestructor] : func:r2188_12, this:r2188_11 -# 2188| m2188_14(unknown) = ^CallSideEffect : ~m2188_7 -# 2188| m2188_15(unknown) = Chi : total:m2188_7, partial:m2188_14 -# 2188| v2188_16(void) = ^IndirectReadSideEffect[-1] : &:r2188_11, m2185_8 -# 2188| m2188_17(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2188_11 -# 2188| m2188_18(ClassWithDestructor) = Chi : total:m2185_8, partial:m2188_17 -# 2184| v2184_5(void) = ReturnVoid : -# 2184| v2184_6(void) = AliasedUse : ~m2188_15 -# 2184| v2184_7(void) = ExitFunction : +# 2224| Block 2 +# 2224| m2224_1(unknown) = Phi : from 0:~m2222_6, from 1:~m2223_7 +# 2224| v2224_2(void) = NoOp : +# 2224| r2224_3(glval) = VariableAddress[a] : +# 2224| r2224_4(glval) = FunctionAddress[~ClassWithDestructor] : +# 2224| v2224_5(void) = Call[~ClassWithDestructor] : func:r2224_4, this:r2224_3 +# 2224| m2224_6(unknown) = ^CallSideEffect : ~m2224_1 +# 2224| m2224_7(unknown) = Chi : total:m2224_1, partial:m2224_6 +# 2224| v2224_8(void) = ^IndirectReadSideEffect[-1] : &:r2224_3, m2222_8 +# 2224| m2224_9(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2224_3 +# 2224| m2224_10(ClassWithDestructor) = Chi : total:m2222_8, partial:m2224_9 +# 2221| v2221_5(void) = ReturnVoid : +# 2221| v2221_6(void) = AliasedUse : ~m2224_7 +# 2221| v2221_7(void) = ExitFunction : -# 2190| ClassWithDestructor global_class_with_destructor -# 2190| Block 0 -# 2190| v2190_1(void) = EnterFunction : -# 2190| m2190_2(unknown) = AliasedDefinition : -# 2190| r2190_3(glval) = VariableAddress[global_class_with_destructor] : -# 2190| r2190_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2190| v2190_5(void) = Call[ClassWithDestructor] : func:r2190_4, this:r2190_3 -# 2190| m2190_6(unknown) = ^CallSideEffect : ~m2190_2 -# 2190| m2190_7(unknown) = Chi : total:m2190_2, partial:m2190_6 -# 2190| m2190_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2190_3 -# 2190| m2190_9(unknown) = Chi : total:m2190_7, partial:m2190_8 -# 2190| v2190_10(void) = ReturnVoid : -# 2190| v2190_11(void) = AliasedUse : ~m2190_9 -# 2190| v2190_12(void) = ExitFunction : +# 2226| void static_variable_with_destructor_2() +# 2226| Block 0 +# 2226| v2226_1(void) = EnterFunction : +# 2226| m2226_2(unknown) = AliasedDefinition : +# 2226| m2226_3(unknown) = InitializeNonLocal : +# 2226| m2226_4(unknown) = Chi : total:m2226_2, partial:m2226_3 +# 2227| r2227_1(glval) = VariableAddress[a#init] : +# 2227| r2227_2(bool) = Load[a#init] : &:r2227_1, ~m2226_3 +# 2227| v2227_3(void) = ConditionalBranch : r2227_2 +#-----| False -> Block 1 +#-----| True -> Block 2 -# 2194| ClassWithDestructor& vacuous_destructor_call::get(ClassWithDestructor&) -# 2194| Block 0 -# 2194| v2194_1(void) = EnterFunction : -# 2194| m2194_2(unknown) = AliasedDefinition : -# 2194| m2194_3(unknown) = InitializeNonLocal : -# 2194| m2194_4(unknown) = Chi : total:m2194_2, partial:m2194_3 -# 2194| r2194_5(glval) = VariableAddress[t] : -# 2194| m2194_6(ClassWithDestructor &) = InitializeParameter[t] : &:r2194_5 -# 2194| r2194_7(ClassWithDestructor &) = Load[t] : &:r2194_5, m2194_6 -# 2194| m2194_8(unknown) = InitializeIndirection[t] : &:r2194_7 -# 2194| r2194_9(glval) = VariableAddress[#return] : -# 2194| r2194_10(glval) = VariableAddress[t] : -# 2194| r2194_11(ClassWithDestructor &) = Load[t] : &:r2194_10, m2194_6 -# 2194| r2194_12(glval) = CopyValue : r2194_11 -# 2194| r2194_13(ClassWithDestructor &) = CopyValue : r2194_12 -# 2194| m2194_14(ClassWithDestructor &) = Store[#return] : &:r2194_9, r2194_13 -# 2194| v2194_15(void) = ReturnIndirection[t] : &:r2194_7, m2194_8 -# 2194| r2194_16(glval) = VariableAddress[#return] : -# 2194| v2194_17(void) = ReturnValue : &:r2194_16, m2194_14 -# 2194| v2194_18(void) = AliasedUse : m2194_3 -# 2194| v2194_19(void) = ExitFunction : +# 2227| Block 1 +# 2227| r2227_4(glval) = VariableAddress[a] : +#-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : +#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2227_4 +#-----| m0_3(unknown) = ^CallSideEffect : ~m2226_4 +#-----| m0_4(unknown) = Chi : total:m2226_4, partial:m0_3 +#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2227_4 +#-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5 +# 2227| r2227_5(bool) = Constant[1] : +# 2227| m2227_6(bool) = Store[a#init] : &:r2227_1, r2227_5 +# 2227| m2227_7(unknown) = Chi : total:m0_6, partial:m2227_6 +#-----| Goto -> Block 2 -# 2194| int& vacuous_destructor_call::get(int&) -# 2194| Block 0 -# 2194| v2194_1(void) = EnterFunction : -# 2194| m2194_2(unknown) = AliasedDefinition : -# 2194| m2194_3(unknown) = InitializeNonLocal : -# 2194| m2194_4(unknown) = Chi : total:m2194_2, partial:m2194_3 -# 2194| r2194_5(glval) = VariableAddress[t] : -# 2194| m2194_6(int &) = InitializeParameter[t] : &:r2194_5 -# 2194| r2194_7(int &) = Load[t] : &:r2194_5, m2194_6 -# 2194| m2194_8(unknown) = InitializeIndirection[t] : &:r2194_7 -# 2194| r2194_9(glval) = VariableAddress[#return] : -# 2194| r2194_10(glval) = VariableAddress[t] : -# 2194| r2194_11(int &) = Load[t] : &:r2194_10, m2194_6 -# 2194| r2194_12(glval) = CopyValue : r2194_11 -# 2194| r2194_13(int &) = CopyValue : r2194_12 -# 2194| m2194_14(int &) = Store[#return] : &:r2194_9, r2194_13 -# 2194| v2194_15(void) = ReturnIndirection[t] : &:r2194_7, m2194_8 -# 2194| r2194_16(glval) = VariableAddress[#return] : -# 2194| v2194_17(void) = ReturnValue : &:r2194_16, m2194_14 -# 2194| v2194_18(void) = AliasedUse : m2194_3 -# 2194| v2194_19(void) = ExitFunction : +# 2228| Block 2 +# 2228| m2228_1(unknown) = Phi : from 0:~m2226_4, from 1:~m2227_7 +# 2228| r2228_2(glval) = VariableAddress[b] : +# 2228| m2228_3(ClassWithDestructor) = Uninitialized[b] : &:r2228_2 +# 2228| r2228_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2228| v2228_5(void) = Call[ClassWithDestructor] : func:r2228_4, this:r2228_2 +# 2228| m2228_6(unknown) = ^CallSideEffect : ~m2228_1 +# 2228| m2228_7(unknown) = Chi : total:m2228_1, partial:m2228_6 +# 2228| m2228_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2228_2 +# 2228| m2228_9(ClassWithDestructor) = Chi : total:m2228_3, partial:m2228_8 +# 2229| v2229_1(void) = NoOp : +# 2229| r2229_2(glval) = VariableAddress[b] : +# 2229| r2229_3(glval) = FunctionAddress[~ClassWithDestructor] : +# 2229| v2229_4(void) = Call[~ClassWithDestructor] : func:r2229_3, this:r2229_2 +# 2229| m2229_5(unknown) = ^CallSideEffect : ~m2228_7 +# 2229| m2229_6(unknown) = Chi : total:m2228_7, partial:m2229_5 +# 2229| v2229_7(void) = ^IndirectReadSideEffect[-1] : &:r2229_2, m2228_9 +# 2229| m2229_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2229_2 +# 2229| m2229_9(ClassWithDestructor) = Chi : total:m2228_9, partial:m2229_8 +# 2226| v2226_5(void) = ReturnVoid : +# 2226| v2226_6(void) = AliasedUse : ~m2229_6 +# 2226| v2226_7(void) = ExitFunction : -# 2197| void vacuous_destructor_call::call_destructor(ClassWithDestructor&) -# 2197| Block 0 -# 2197| v2197_1(void) = EnterFunction : -# 2197| m2197_2(unknown) = AliasedDefinition : -# 2197| m2197_3(unknown) = InitializeNonLocal : -# 2197| m2197_4(unknown) = Chi : total:m2197_2, partial:m2197_3 -# 2197| r2197_5(glval) = VariableAddress[t] : -# 2197| m2197_6(ClassWithDestructor &) = InitializeParameter[t] : &:r2197_5 -# 2197| r2197_7(ClassWithDestructor &) = Load[t] : &:r2197_5, m2197_6 -# 2197| m2197_8(unknown) = InitializeIndirection[t] : &:r2197_7 -# 2198| r2198_1(glval) = FunctionAddress[get] : -# 2198| r2198_2(glval) = VariableAddress[t] : -# 2198| r2198_3(ClassWithDestructor &) = Load[t] : &:r2198_2, m2197_6 -# 2198| r2198_4(glval) = CopyValue : r2198_3 -# 2198| r2198_5(ClassWithDestructor &) = CopyValue : r2198_4 -# 2198| r2198_6(ClassWithDestructor &) = Call[get] : func:r2198_1, 0:r2198_5 -# 2198| m2198_7(unknown) = ^CallSideEffect : ~m2197_4 -# 2198| m2198_8(unknown) = Chi : total:m2197_4, partial:m2198_7 -# 2198| v2198_9(void) = ^BufferReadSideEffect[0] : &:r2198_5, ~m2197_8 -# 2198| m2198_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r2198_5 -# 2198| m2198_11(unknown) = Chi : total:m2197_8, partial:m2198_10 -# 2198| r2198_12(glval) = CopyValue : r2198_6 -# 2198| r2198_13(glval) = FunctionAddress[~ClassWithDestructor] : -# 2198| v2198_14(void) = Call[~ClassWithDestructor] : func:r2198_13 -# 2198| m2198_15(unknown) = ^CallSideEffect : ~m2198_8 -# 2198| m2198_16(unknown) = Chi : total:m2198_8, partial:m2198_15 -# 2198| v2198_17(void) = ^IndirectReadSideEffect[-1] : &:r2198_12, ~m2198_11 -# 2198| m2198_18(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2198_12 -# 2198| m2198_19(unknown) = Chi : total:m2198_11, partial:m2198_18 -# 2199| v2199_1(void) = NoOp : -# 2197| v2197_9(void) = ReturnIndirection[t] : &:r2197_7, m2198_19 -# 2197| v2197_10(void) = ReturnVoid : -# 2197| v2197_11(void) = AliasedUse : ~m2198_16 -# 2197| v2197_12(void) = ExitFunction : +# 2231| void static_variable_with_destructor_3() +# 2231| Block 0 +# 2231| v2231_1(void) = EnterFunction : +# 2231| m2231_2(unknown) = AliasedDefinition : +# 2231| m2231_3(unknown) = InitializeNonLocal : +# 2231| m2231_4(unknown) = Chi : total:m2231_2, partial:m2231_3 +# 2232| r2232_1(glval) = VariableAddress[a] : +# 2232| m2232_2(ClassWithDestructor) = Uninitialized[a] : &:r2232_1 +# 2232| r2232_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2232| v2232_4(void) = Call[ClassWithDestructor] : func:r2232_3, this:r2232_1 +# 2232| m2232_5(unknown) = ^CallSideEffect : ~m2231_4 +# 2232| m2232_6(unknown) = Chi : total:m2231_4, partial:m2232_5 +# 2232| m2232_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2232_1 +# 2232| m2232_8(ClassWithDestructor) = Chi : total:m2232_2, partial:m2232_7 +# 2233| r2233_1(glval) = VariableAddress[b] : +# 2233| m2233_2(ClassWithDestructor) = Uninitialized[b] : &:r2233_1 +# 2233| r2233_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2233| v2233_4(void) = Call[ClassWithDestructor] : func:r2233_3, this:r2233_1 +# 2233| m2233_5(unknown) = ^CallSideEffect : ~m2232_6 +# 2233| m2233_6(unknown) = Chi : total:m2232_6, partial:m2233_5 +# 2233| m2233_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_1 +# 2233| m2233_8(ClassWithDestructor) = Chi : total:m2233_2, partial:m2233_7 +# 2234| r2234_1(glval) = VariableAddress[c#init] : +# 2234| r2234_2(bool) = Load[c#init] : &:r2234_1, ~m2233_6 +# 2234| v2234_3(void) = ConditionalBranch : r2234_2 +#-----| False -> Block 1 +#-----| True -> Block 2 -# 2197| void vacuous_destructor_call::call_destructor(int&) -# 2197| Block 0 -# 2197| v2197_1(void) = EnterFunction : -# 2197| m2197_2(unknown) = AliasedDefinition : -# 2197| m2197_3(unknown) = InitializeNonLocal : -# 2197| m2197_4(unknown) = Chi : total:m2197_2, partial:m2197_3 -# 2197| r2197_5(glval) = VariableAddress[t] : -# 2197| m2197_6(int &) = InitializeParameter[t] : &:r2197_5 -# 2197| r2197_7(int &) = Load[t] : &:r2197_5, m2197_6 -# 2197| m2197_8(unknown) = InitializeIndirection[t] : &:r2197_7 -# 2198| r2198_1(glval) = FunctionAddress[get] : -# 2198| r2198_2(glval) = VariableAddress[t] : -# 2198| r2198_3(int &) = Load[t] : &:r2198_2, m2197_6 -# 2198| r2198_4(glval) = CopyValue : r2198_3 -# 2198| r2198_5(int &) = CopyValue : r2198_4 -# 2198| r2198_6(int &) = Call[get] : func:r2198_1, 0:r2198_5 -# 2198| m2198_7(unknown) = ^CallSideEffect : ~m2197_4 -# 2198| m2198_8(unknown) = Chi : total:m2197_4, partial:m2198_7 -# 2198| v2198_9(void) = ^BufferReadSideEffect[0] : &:r2198_5, ~m2197_8 -# 2198| m2198_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r2198_5 -# 2198| m2198_11(unknown) = Chi : total:m2197_8, partial:m2198_10 -# 2198| r2198_12(glval) = CopyValue : r2198_6 -# 2199| v2199_1(void) = NoOp : -# 2197| v2197_9(void) = ReturnIndirection[t] : &:r2197_7, m2198_11 -# 2197| v2197_10(void) = ReturnVoid : -# 2197| v2197_11(void) = AliasedUse : ~m2198_8 -# 2197| v2197_12(void) = ExitFunction : +# 2234| Block 1 +# 2234| r2234_4(glval) = VariableAddress[c] : +#-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : +#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2234_4 +#-----| m0_3(unknown) = ^CallSideEffect : ~m2233_6 +#-----| m0_4(unknown) = Chi : total:m2233_6, partial:m0_3 +#-----| m0_5(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2234_4 +#-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5 +# 2234| r2234_5(bool) = Constant[1] : +# 2234| m2234_6(bool) = Store[c#init] : &:r2234_1, r2234_5 +# 2234| m2234_7(unknown) = Chi : total:m0_6, partial:m2234_6 +#-----| Goto -> Block 2 -# 2201| void vacuous_destructor_call::non_vacuous_destructor_call() -# 2201| Block 0 -# 2201| v2201_1(void) = EnterFunction : -# 2201| m2201_2(unknown) = AliasedDefinition : -# 2201| m2201_3(unknown) = InitializeNonLocal : -# 2201| m2201_4(unknown) = Chi : total:m2201_2, partial:m2201_3 -# 2202| r2202_1(glval) = VariableAddress[c] : -# 2202| m2202_2(ClassWithDestructor) = Uninitialized[c] : &:r2202_1 -# 2202| r2202_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2202| v2202_4(void) = Call[ClassWithDestructor] : func:r2202_3, this:r2202_1 -# 2202| m2202_5(unknown) = ^CallSideEffect : ~m2201_4 -# 2202| m2202_6(unknown) = Chi : total:m2201_4, partial:m2202_5 -# 2202| m2202_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2202_1 -# 2202| m2202_8(ClassWithDestructor) = Chi : total:m2202_2, partial:m2202_7 -# 2203| r2203_1(glval) = FunctionAddress[call_destructor] : -# 2203| r2203_2(glval) = VariableAddress[c] : -# 2203| r2203_3(ClassWithDestructor &) = CopyValue : r2203_2 -# 2203| v2203_4(void) = Call[call_destructor] : func:r2203_1, 0:r2203_3 -# 2203| m2203_5(unknown) = ^CallSideEffect : ~m2202_6 -# 2203| m2203_6(unknown) = Chi : total:m2202_6, partial:m2203_5 -# 2203| v2203_7(void) = ^BufferReadSideEffect[0] : &:r2203_3, ~m2202_8 -# 2203| m2203_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r2203_3 -# 2203| m2203_9(ClassWithDestructor) = Chi : total:m2202_8, partial:m2203_8 -# 2204| v2204_1(void) = NoOp : -# 2204| r2204_2(glval) = VariableAddress[c] : -# 2204| r2204_3(glval) = FunctionAddress[~ClassWithDestructor] : -# 2204| v2204_4(void) = Call[~ClassWithDestructor] : func:r2204_3, this:r2204_2 -# 2204| m2204_5(unknown) = ^CallSideEffect : ~m2203_6 -# 2204| m2204_6(unknown) = Chi : total:m2203_6, partial:m2204_5 -# 2204| v2204_7(void) = ^IndirectReadSideEffect[-1] : &:r2204_2, m2203_9 -# 2204| m2204_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2204_2 -# 2204| m2204_9(ClassWithDestructor) = Chi : total:m2203_9, partial:m2204_8 -# 2201| v2201_5(void) = ReturnVoid : -# 2201| v2201_6(void) = AliasedUse : ~m2204_6 -# 2201| v2201_7(void) = ExitFunction : +# 2235| Block 2 +# 2235| m2235_1(unknown) = Phi : from 0:~m2233_6, from 1:~m2234_7 +# 2235| v2235_2(void) = NoOp : +# 2235| r2235_3(glval) = VariableAddress[b] : +# 2235| r2235_4(glval) = FunctionAddress[~ClassWithDestructor] : +# 2235| v2235_5(void) = Call[~ClassWithDestructor] : func:r2235_4, this:r2235_3 +# 2235| m2235_6(unknown) = ^CallSideEffect : ~m2235_1 +# 2235| m2235_7(unknown) = Chi : total:m2235_1, partial:m2235_6 +# 2235| v2235_8(void) = ^IndirectReadSideEffect[-1] : &:r2235_3, m2233_8 +# 2235| m2235_9(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2235_3 +# 2235| m2235_10(ClassWithDestructor) = Chi : total:m2233_8, partial:m2235_9 +# 2235| r2235_11(glval) = VariableAddress[a] : +# 2235| r2235_12(glval) = FunctionAddress[~ClassWithDestructor] : +# 2235| v2235_13(void) = Call[~ClassWithDestructor] : func:r2235_12, this:r2235_11 +# 2235| m2235_14(unknown) = ^CallSideEffect : ~m2235_7 +# 2235| m2235_15(unknown) = Chi : total:m2235_7, partial:m2235_14 +# 2235| v2235_16(void) = ^IndirectReadSideEffect[-1] : &:r2235_11, m2232_8 +# 2235| m2235_17(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2235_11 +# 2235| m2235_18(ClassWithDestructor) = Chi : total:m2232_8, partial:m2235_17 +# 2231| v2231_5(void) = ReturnVoid : +# 2231| v2231_6(void) = AliasedUse : ~m2235_15 +# 2231| v2231_7(void) = ExitFunction : -# 2206| void vacuous_destructor_call::vacuous_destructor_call() -# 2206| Block 0 -# 2206| v2206_1(void) = EnterFunction : -# 2206| m2206_2(unknown) = AliasedDefinition : -# 2206| m2206_3(unknown) = InitializeNonLocal : -# 2206| m2206_4(unknown) = Chi : total:m2206_2, partial:m2206_3 -# 2207| r2207_1(glval) = VariableAddress[i] : -# 2207| m2207_2(int) = Uninitialized[i] : &:r2207_1 -# 2208| r2208_1(glval) = FunctionAddress[call_destructor] : -# 2208| r2208_2(glval) = VariableAddress[i] : -# 2208| r2208_3(int &) = CopyValue : r2208_2 -# 2208| v2208_4(void) = Call[call_destructor] : func:r2208_1, 0:r2208_3 -# 2208| m2208_5(unknown) = ^CallSideEffect : ~m2206_4 -# 2208| m2208_6(unknown) = Chi : total:m2206_4, partial:m2208_5 -# 2208| v2208_7(void) = ^BufferReadSideEffect[0] : &:r2208_3, ~m2207_2 -# 2208| m2208_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r2208_3 -# 2208| m2208_9(int) = Chi : total:m2207_2, partial:m2208_8 -# 2209| v2209_1(void) = NoOp : -# 2206| v2206_5(void) = ReturnVoid : -# 2206| v2206_6(void) = AliasedUse : ~m2208_6 -# 2206| v2206_7(void) = ExitFunction : +# 2237| ClassWithDestructor global_class_with_destructor +# 2237| Block 0 +# 2237| v2237_1(void) = EnterFunction : +# 2237| m2237_2(unknown) = AliasedDefinition : +# 2237| r2237_3(glval) = VariableAddress[global_class_with_destructor] : +# 2237| r2237_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2237| v2237_5(void) = Call[ClassWithDestructor] : func:r2237_4, this:r2237_3 +# 2237| m2237_6(unknown) = ^CallSideEffect : ~m2237_2 +# 2237| m2237_7(unknown) = Chi : total:m2237_2, partial:m2237_6 +# 2237| m2237_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2237_3 +# 2237| m2237_9(unknown) = Chi : total:m2237_7, partial:m2237_8 +# 2237| v2237_10(void) = ReturnVoid : +# 2237| v2237_11(void) = AliasedUse : ~m2237_9 +# 2237| v2237_12(void) = ExitFunction : -# 2212| void TryCatchDestructors(bool) -# 2212| Block 0 -# 2212| v2212_1(void) = EnterFunction : -# 2212| m2212_2(unknown) = AliasedDefinition : -# 2212| m2212_3(unknown) = InitializeNonLocal : -# 2212| m2212_4(unknown) = Chi : total:m2212_2, partial:m2212_3 -# 2212| r2212_5(glval) = VariableAddress[b] : -# 2212| m2212_6(bool) = InitializeParameter[b] : &:r2212_5 -# 2214| r2214_1(glval) = VariableAddress[s] : -# 2214| m2214_2(String) = Uninitialized[s] : &:r2214_1 -# 2214| r2214_3(glval) = FunctionAddress[String] : -# 2214| v2214_4(void) = Call[String] : func:r2214_3, this:r2214_1 -# 2214| m2214_5(unknown) = ^CallSideEffect : ~m2212_4 -# 2214| m2214_6(unknown) = Chi : total:m2212_4, partial:m2214_5 -# 2214| m2214_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2214_1 -# 2214| m2214_8(String) = Chi : total:m2214_2, partial:m2214_7 -# 2215| r2215_1(glval) = VariableAddress[b] : -# 2215| r2215_2(bool) = Load[b] : &:r2215_1, m2212_6 -# 2215| v2215_3(void) = ConditionalBranch : r2215_2 +# 2241| ClassWithDestructor& vacuous_destructor_call::get(ClassWithDestructor&) +# 2241| Block 0 +# 2241| v2241_1(void) = EnterFunction : +# 2241| m2241_2(unknown) = AliasedDefinition : +# 2241| m2241_3(unknown) = InitializeNonLocal : +# 2241| m2241_4(unknown) = Chi : total:m2241_2, partial:m2241_3 +# 2241| r2241_5(glval) = VariableAddress[t] : +# 2241| m2241_6(ClassWithDestructor &) = InitializeParameter[t] : &:r2241_5 +# 2241| r2241_7(ClassWithDestructor &) = Load[t] : &:r2241_5, m2241_6 +# 2241| m2241_8(unknown) = InitializeIndirection[t] : &:r2241_7 +# 2241| r2241_9(glval) = VariableAddress[#return] : +# 2241| r2241_10(glval) = VariableAddress[t] : +# 2241| r2241_11(ClassWithDestructor &) = Load[t] : &:r2241_10, m2241_6 +# 2241| r2241_12(glval) = CopyValue : r2241_11 +# 2241| r2241_13(ClassWithDestructor &) = CopyValue : r2241_12 +# 2241| m2241_14(ClassWithDestructor &) = Store[#return] : &:r2241_9, r2241_13 +# 2241| v2241_15(void) = ReturnIndirection[t] : &:r2241_7, m2241_8 +# 2241| r2241_16(glval) = VariableAddress[#return] : +# 2241| v2241_17(void) = ReturnValue : &:r2241_16, m2241_14 +# 2241| v2241_18(void) = AliasedUse : m2241_3 +# 2241| v2241_19(void) = ExitFunction : + +# 2241| int& vacuous_destructor_call::get(int&) +# 2241| Block 0 +# 2241| v2241_1(void) = EnterFunction : +# 2241| m2241_2(unknown) = AliasedDefinition : +# 2241| m2241_3(unknown) = InitializeNonLocal : +# 2241| m2241_4(unknown) = Chi : total:m2241_2, partial:m2241_3 +# 2241| r2241_5(glval) = VariableAddress[t] : +# 2241| m2241_6(int &) = InitializeParameter[t] : &:r2241_5 +# 2241| r2241_7(int &) = Load[t] : &:r2241_5, m2241_6 +# 2241| m2241_8(unknown) = InitializeIndirection[t] : &:r2241_7 +# 2241| r2241_9(glval) = VariableAddress[#return] : +# 2241| r2241_10(glval) = VariableAddress[t] : +# 2241| r2241_11(int &) = Load[t] : &:r2241_10, m2241_6 +# 2241| r2241_12(glval) = CopyValue : r2241_11 +# 2241| r2241_13(int &) = CopyValue : r2241_12 +# 2241| m2241_14(int &) = Store[#return] : &:r2241_9, r2241_13 +# 2241| v2241_15(void) = ReturnIndirection[t] : &:r2241_7, m2241_8 +# 2241| r2241_16(glval) = VariableAddress[#return] : +# 2241| v2241_17(void) = ReturnValue : &:r2241_16, m2241_14 +# 2241| v2241_18(void) = AliasedUse : m2241_3 +# 2241| v2241_19(void) = ExitFunction : + +# 2244| void vacuous_destructor_call::call_destructor(ClassWithDestructor&) +# 2244| Block 0 +# 2244| v2244_1(void) = EnterFunction : +# 2244| m2244_2(unknown) = AliasedDefinition : +# 2244| m2244_3(unknown) = InitializeNonLocal : +# 2244| m2244_4(unknown) = Chi : total:m2244_2, partial:m2244_3 +# 2244| r2244_5(glval) = VariableAddress[t] : +# 2244| m2244_6(ClassWithDestructor &) = InitializeParameter[t] : &:r2244_5 +# 2244| r2244_7(ClassWithDestructor &) = Load[t] : &:r2244_5, m2244_6 +# 2244| m2244_8(unknown) = InitializeIndirection[t] : &:r2244_7 +# 2245| r2245_1(glval) = FunctionAddress[get] : +# 2245| r2245_2(glval) = VariableAddress[t] : +# 2245| r2245_3(ClassWithDestructor &) = Load[t] : &:r2245_2, m2244_6 +# 2245| r2245_4(glval) = CopyValue : r2245_3 +# 2245| r2245_5(ClassWithDestructor &) = CopyValue : r2245_4 +# 2245| r2245_6(ClassWithDestructor &) = Call[get] : func:r2245_1, 0:r2245_5 +# 2245| m2245_7(unknown) = ^CallSideEffect : ~m2244_4 +# 2245| m2245_8(unknown) = Chi : total:m2244_4, partial:m2245_7 +# 2245| v2245_9(void) = ^BufferReadSideEffect[0] : &:r2245_5, ~m2244_8 +# 2245| m2245_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r2245_5 +# 2245| m2245_11(unknown) = Chi : total:m2244_8, partial:m2245_10 +# 2245| r2245_12(glval) = CopyValue : r2245_6 +# 2245| r2245_13(glval) = FunctionAddress[~ClassWithDestructor] : +# 2245| v2245_14(void) = Call[~ClassWithDestructor] : func:r2245_13 +# 2245| m2245_15(unknown) = ^CallSideEffect : ~m2245_8 +# 2245| m2245_16(unknown) = Chi : total:m2245_8, partial:m2245_15 +# 2245| v2245_17(void) = ^IndirectReadSideEffect[-1] : &:r2245_12, ~m2245_11 +# 2245| m2245_18(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2245_12 +# 2245| m2245_19(unknown) = Chi : total:m2245_11, partial:m2245_18 +# 2246| v2246_1(void) = NoOp : +# 2244| v2244_9(void) = ReturnIndirection[t] : &:r2244_7, m2245_19 +# 2244| v2244_10(void) = ReturnVoid : +# 2244| v2244_11(void) = AliasedUse : ~m2245_16 +# 2244| v2244_12(void) = ExitFunction : + +# 2244| void vacuous_destructor_call::call_destructor(int&) +# 2244| Block 0 +# 2244| v2244_1(void) = EnterFunction : +# 2244| m2244_2(unknown) = AliasedDefinition : +# 2244| m2244_3(unknown) = InitializeNonLocal : +# 2244| m2244_4(unknown) = Chi : total:m2244_2, partial:m2244_3 +# 2244| r2244_5(glval) = VariableAddress[t] : +# 2244| m2244_6(int &) = InitializeParameter[t] : &:r2244_5 +# 2244| r2244_7(int &) = Load[t] : &:r2244_5, m2244_6 +# 2244| m2244_8(unknown) = InitializeIndirection[t] : &:r2244_7 +# 2245| r2245_1(glval) = FunctionAddress[get] : +# 2245| r2245_2(glval) = VariableAddress[t] : +# 2245| r2245_3(int &) = Load[t] : &:r2245_2, m2244_6 +# 2245| r2245_4(glval) = CopyValue : r2245_3 +# 2245| r2245_5(int &) = CopyValue : r2245_4 +# 2245| r2245_6(int &) = Call[get] : func:r2245_1, 0:r2245_5 +# 2245| m2245_7(unknown) = ^CallSideEffect : ~m2244_4 +# 2245| m2245_8(unknown) = Chi : total:m2244_4, partial:m2245_7 +# 2245| v2245_9(void) = ^BufferReadSideEffect[0] : &:r2245_5, ~m2244_8 +# 2245| m2245_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r2245_5 +# 2245| m2245_11(unknown) = Chi : total:m2244_8, partial:m2245_10 +# 2245| r2245_12(glval) = CopyValue : r2245_6 +# 2246| v2246_1(void) = NoOp : +# 2244| v2244_9(void) = ReturnIndirection[t] : &:r2244_7, m2245_11 +# 2244| v2244_10(void) = ReturnVoid : +# 2244| v2244_11(void) = AliasedUse : ~m2245_8 +# 2244| v2244_12(void) = ExitFunction : + +# 2248| void vacuous_destructor_call::non_vacuous_destructor_call() +# 2248| Block 0 +# 2248| v2248_1(void) = EnterFunction : +# 2248| m2248_2(unknown) = AliasedDefinition : +# 2248| m2248_3(unknown) = InitializeNonLocal : +# 2248| m2248_4(unknown) = Chi : total:m2248_2, partial:m2248_3 +# 2249| r2249_1(glval) = VariableAddress[c] : +# 2249| m2249_2(ClassWithDestructor) = Uninitialized[c] : &:r2249_1 +# 2249| r2249_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2249| v2249_4(void) = Call[ClassWithDestructor] : func:r2249_3, this:r2249_1 +# 2249| m2249_5(unknown) = ^CallSideEffect : ~m2248_4 +# 2249| m2249_6(unknown) = Chi : total:m2248_4, partial:m2249_5 +# 2249| m2249_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2249_1 +# 2249| m2249_8(ClassWithDestructor) = Chi : total:m2249_2, partial:m2249_7 +# 2250| r2250_1(glval) = FunctionAddress[call_destructor] : +# 2250| r2250_2(glval) = VariableAddress[c] : +# 2250| r2250_3(ClassWithDestructor &) = CopyValue : r2250_2 +# 2250| v2250_4(void) = Call[call_destructor] : func:r2250_1, 0:r2250_3 +# 2250| m2250_5(unknown) = ^CallSideEffect : ~m2249_6 +# 2250| m2250_6(unknown) = Chi : total:m2249_6, partial:m2250_5 +# 2250| v2250_7(void) = ^BufferReadSideEffect[0] : &:r2250_3, ~m2249_8 +# 2250| m2250_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r2250_3 +# 2250| m2250_9(ClassWithDestructor) = Chi : total:m2249_8, partial:m2250_8 +# 2251| v2251_1(void) = NoOp : +# 2251| r2251_2(glval) = VariableAddress[c] : +# 2251| r2251_3(glval) = FunctionAddress[~ClassWithDestructor] : +# 2251| v2251_4(void) = Call[~ClassWithDestructor] : func:r2251_3, this:r2251_2 +# 2251| m2251_5(unknown) = ^CallSideEffect : ~m2250_6 +# 2251| m2251_6(unknown) = Chi : total:m2250_6, partial:m2251_5 +# 2251| v2251_7(void) = ^IndirectReadSideEffect[-1] : &:r2251_2, m2250_9 +# 2251| m2251_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2251_2 +# 2251| m2251_9(ClassWithDestructor) = Chi : total:m2250_9, partial:m2251_8 +# 2248| v2248_5(void) = ReturnVoid : +# 2248| v2248_6(void) = AliasedUse : ~m2251_6 +# 2248| v2248_7(void) = ExitFunction : + +# 2253| void vacuous_destructor_call::vacuous_destructor_call() +# 2253| Block 0 +# 2253| v2253_1(void) = EnterFunction : +# 2253| m2253_2(unknown) = AliasedDefinition : +# 2253| m2253_3(unknown) = InitializeNonLocal : +# 2253| m2253_4(unknown) = Chi : total:m2253_2, partial:m2253_3 +# 2254| r2254_1(glval) = VariableAddress[i] : +# 2254| m2254_2(int) = Uninitialized[i] : &:r2254_1 +# 2255| r2255_1(glval) = FunctionAddress[call_destructor] : +# 2255| r2255_2(glval) = VariableAddress[i] : +# 2255| r2255_3(int &) = CopyValue : r2255_2 +# 2255| v2255_4(void) = Call[call_destructor] : func:r2255_1, 0:r2255_3 +# 2255| m2255_5(unknown) = ^CallSideEffect : ~m2253_4 +# 2255| m2255_6(unknown) = Chi : total:m2253_4, partial:m2255_5 +# 2255| v2255_7(void) = ^BufferReadSideEffect[0] : &:r2255_3, ~m2254_2 +# 2255| m2255_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r2255_3 +# 2255| m2255_9(int) = Chi : total:m2254_2, partial:m2255_8 +# 2256| v2256_1(void) = NoOp : +# 2253| v2253_5(void) = ReturnVoid : +# 2253| v2253_6(void) = AliasedUse : ~m2255_6 +# 2253| v2253_7(void) = ExitFunction : + +# 2259| void TryCatchDestructors(bool) +# 2259| Block 0 +# 2259| v2259_1(void) = EnterFunction : +# 2259| m2259_2(unknown) = AliasedDefinition : +# 2259| m2259_3(unknown) = InitializeNonLocal : +# 2259| m2259_4(unknown) = Chi : total:m2259_2, partial:m2259_3 +# 2259| r2259_5(glval) = VariableAddress[b] : +# 2259| m2259_6(bool) = InitializeParameter[b] : &:r2259_5 +# 2261| r2261_1(glval) = VariableAddress[s] : +# 2261| m2261_2(String) = Uninitialized[s] : &:r2261_1 +# 2261| r2261_3(glval) = FunctionAddress[String] : +# 2261| v2261_4(void) = Call[String] : func:r2261_3, this:r2261_1 +# 2261| m2261_5(unknown) = ^CallSideEffect : ~m2259_4 +# 2261| m2261_6(unknown) = Chi : total:m2259_4, partial:m2261_5 +# 2261| m2261_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2261_1 +# 2261| m2261_8(String) = Chi : total:m2261_2, partial:m2261_7 +# 2262| r2262_1(glval) = VariableAddress[b] : +# 2262| r2262_2(bool) = Load[b] : &:r2262_1, m2259_6 +# 2262| v2262_3(void) = ConditionalBranch : r2262_2 #-----| False -> Block 4 #-----| True -> Block 3 -# 2212| Block 1 -# 2212| m2212_7(unknown) = Phi : from 2:~m2212_10, from 10:~m2228_1 -# 2212| v2212_8(void) = AliasedUse : ~m2212_7 -# 2212| v2212_9(void) = ExitFunction : +# 2259| Block 1 +# 2259| m2259_7(unknown) = Phi : from 2:~m2259_10, from 10:~m2275_1 +# 2259| v2259_8(void) = AliasedUse : ~m2259_7 +# 2259| v2259_9(void) = ExitFunction : -# 2212| Block 2 -# 2212| m2212_10(unknown) = Phi : from 6:~m2221_8, from 9:~m2214_6 -# 2212| v2212_11(void) = Unwind : +# 2259| Block 2 +# 2259| m2259_10(unknown) = Phi : from 6:~m2268_8, from 9:~m2261_6 +# 2259| v2259_11(void) = Unwind : #-----| Goto -> Block 1 -# 2216| Block 3 -# 2216| r2216_1(glval) = VariableAddress[#throw2216:7] : -# 2216| r2216_2(glval) = StringConstant["string literal"] : -# 2216| r2216_3(char *) = Convert : r2216_2 -# 2216| m2216_4(char *) = Store[#throw2216:7] : &:r2216_1, r2216_3 -# 2216| v2216_5(void) = ThrowValue : &:r2216_1, m2216_4 +# 2263| Block 3 +# 2263| r2263_1(glval) = VariableAddress[#throw2263:7] : +# 2263| r2263_2(glval) = StringConstant["string literal"] : +# 2263| r2263_3(char *) = Convert : r2263_2 +# 2263| m2263_4(char *) = Store[#throw2263:7] : &:r2263_1, r2263_3 +# 2263| v2263_5(void) = ThrowValue : &:r2263_1, m2263_4 #-----| Exception -> Block 5 -# 2218| Block 4 -# 2218| r2218_1(glval) = VariableAddress[s2] : -# 2218| m2218_2(String) = Uninitialized[s2] : &:r2218_1 -# 2218| r2218_3(glval) = FunctionAddress[String] : -# 2218| v2218_4(void) = Call[String] : func:r2218_3, this:r2218_1 -# 2218| m2218_5(unknown) = ^CallSideEffect : ~m2214_6 -# 2218| m2218_6(unknown) = Chi : total:m2214_6, partial:m2218_5 -# 2218| m2218_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2218_1 -# 2218| m2218_8(String) = Chi : total:m2218_2, partial:m2218_7 -# 2219| r2219_1(glval) = VariableAddress[s2] : -# 2219| r2219_2(glval) = FunctionAddress[~String] : -# 2219| v2219_3(void) = Call[~String] : func:r2219_2, this:r2219_1 -# 2219| m2219_4(unknown) = ^CallSideEffect : ~m2218_6 -# 2219| m2219_5(unknown) = Chi : total:m2218_6, partial:m2219_4 -# 2219| v2219_6(void) = ^IndirectReadSideEffect[-1] : &:r2219_1, m2218_8 -# 2219| m2219_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2219_1 -# 2219| m2219_8(String) = Chi : total:m2218_8, partial:m2219_7 -# 2219| r2219_9(glval) = VariableAddress[s] : -# 2219| r2219_10(glval) = FunctionAddress[~String] : -# 2219| v2219_11(void) = Call[~String] : func:r2219_10, this:r2219_9 -# 2219| m2219_12(unknown) = ^CallSideEffect : ~m2219_5 -# 2219| m2219_13(unknown) = Chi : total:m2219_5, partial:m2219_12 -# 2219| v2219_14(void) = ^IndirectReadSideEffect[-1] : &:r2219_9, m2214_8 -# 2219| m2219_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2219_9 -# 2219| m2219_16(String) = Chi : total:m2214_8, partial:m2219_15 +# 2265| Block 4 +# 2265| r2265_1(glval) = VariableAddress[s2] : +# 2265| m2265_2(String) = Uninitialized[s2] : &:r2265_1 +# 2265| r2265_3(glval) = FunctionAddress[String] : +# 2265| v2265_4(void) = Call[String] : func:r2265_3, this:r2265_1 +# 2265| m2265_5(unknown) = ^CallSideEffect : ~m2261_6 +# 2265| m2265_6(unknown) = Chi : total:m2261_6, partial:m2265_5 +# 2265| m2265_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2265_1 +# 2265| m2265_8(String) = Chi : total:m2265_2, partial:m2265_7 +# 2266| r2266_1(glval) = VariableAddress[s2] : +# 2266| r2266_2(glval) = FunctionAddress[~String] : +# 2266| v2266_3(void) = Call[~String] : func:r2266_2, this:r2266_1 +# 2266| m2266_4(unknown) = ^CallSideEffect : ~m2265_6 +# 2266| m2266_5(unknown) = Chi : total:m2265_6, partial:m2266_4 +# 2266| v2266_6(void) = ^IndirectReadSideEffect[-1] : &:r2266_1, m2265_8 +# 2266| m2266_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2266_1 +# 2266| m2266_8(String) = Chi : total:m2265_8, partial:m2266_7 +# 2266| r2266_9(glval) = VariableAddress[s] : +# 2266| r2266_10(glval) = FunctionAddress[~String] : +# 2266| v2266_11(void) = Call[~String] : func:r2266_10, this:r2266_9 +# 2266| m2266_12(unknown) = ^CallSideEffect : ~m2266_5 +# 2266| m2266_13(unknown) = Chi : total:m2266_5, partial:m2266_12 +# 2266| v2266_14(void) = ^IndirectReadSideEffect[-1] : &:r2266_9, m2261_8 +# 2266| m2266_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2266_9 +# 2266| m2266_16(String) = Chi : total:m2261_8, partial:m2266_15 #-----| Goto -> Block 10 -# 2220| Block 5 -# 2220| v2220_1(void) = CatchByType[const char *] : +# 2267| Block 5 +# 2267| v2267_1(void) = CatchByType[const char *] : #-----| Exception -> Block 7 #-----| Goto -> Block 6 -# 2220| Block 6 -# 2220| r2220_2(glval) = VariableAddress[s] : -# 2220| m2220_3(char *) = InitializeParameter[s] : &:r2220_2 -# 2220| r2220_4(char *) = Load[s] : &:r2220_2, m2220_3 -# 2220| m2220_5(unknown) = InitializeIndirection[s] : &:r2220_4 -# 2221| r2221_1(glval) = VariableAddress[#throw2221:5] : -# 2221| m2221_2(String) = Uninitialized[#throw2221:5] : &:r2221_1 -# 2221| r2221_3(glval) = FunctionAddress[String] : -# 2221| r2221_4(glval) = VariableAddress[s] : -# 2221| r2221_5(char *) = Load[s] : &:r2221_4, m2220_3 -# 2221| v2221_6(void) = Call[String] : func:r2221_3, this:r2221_1, 0:r2221_5 -# 2221| m2221_7(unknown) = ^CallSideEffect : ~m2214_6 -# 2221| m2221_8(unknown) = Chi : total:m2214_6, partial:m2221_7 -# 2221| v2221_9(void) = ^BufferReadSideEffect[0] : &:r2221_5, ~m2220_5 -# 2221| m2221_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2221_1 -# 2221| m2221_11(String) = Chi : total:m2221_2, partial:m2221_10 -# 2221| v2221_12(void) = ThrowValue : &:r2221_1, m2221_11 +# 2267| Block 6 +# 2267| r2267_2(glval) = VariableAddress[s] : +# 2267| m2267_3(char *) = InitializeParameter[s] : &:r2267_2 +# 2267| r2267_4(char *) = Load[s] : &:r2267_2, m2267_3 +# 2267| m2267_5(unknown) = InitializeIndirection[s] : &:r2267_4 +# 2268| r2268_1(glval) = VariableAddress[#throw2268:5] : +# 2268| m2268_2(String) = Uninitialized[#throw2268:5] : &:r2268_1 +# 2268| r2268_3(glval) = FunctionAddress[String] : +# 2268| r2268_4(glval) = VariableAddress[s] : +# 2268| r2268_5(char *) = Load[s] : &:r2268_4, m2267_3 +# 2268| v2268_6(void) = Call[String] : func:r2268_3, this:r2268_1, 0:r2268_5 +# 2268| m2268_7(unknown) = ^CallSideEffect : ~m2261_6 +# 2268| m2268_8(unknown) = Chi : total:m2261_6, partial:m2268_7 +# 2268| v2268_9(void) = ^BufferReadSideEffect[0] : &:r2268_5, ~m2267_5 +# 2268| m2268_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2268_1 +# 2268| m2268_11(String) = Chi : total:m2268_2, partial:m2268_10 +# 2268| v2268_12(void) = ThrowValue : &:r2268_1, m2268_11 #-----| Exception -> Block 2 -# 2223| Block 7 -# 2223| v2223_1(void) = CatchByType[const String &] : +# 2270| Block 7 +# 2270| v2270_1(void) = CatchByType[const String &] : #-----| Exception -> Block 9 #-----| Goto -> Block 8 -# 2223| Block 8 -# 2223| r2223_2(glval) = VariableAddress[e] : -# 2223| m2223_3(String &) = InitializeParameter[e] : &:r2223_2 -# 2223| r2223_4(String &) = Load[e] : &:r2223_2, m2223_3 -# 2223| m2223_5(unknown) = InitializeIndirection[e] : &:r2223_4 -# 2223| v2223_6(void) = NoOp : +# 2270| Block 8 +# 2270| r2270_2(glval) = VariableAddress[e] : +# 2270| m2270_3(String &) = InitializeParameter[e] : &:r2270_2 +# 2270| r2270_4(String &) = Load[e] : &:r2270_2, m2270_3 +# 2270| m2270_5(unknown) = InitializeIndirection[e] : &:r2270_4 +# 2270| v2270_6(void) = NoOp : #-----| Goto -> Block 10 -# 2225| Block 9 -# 2225| v2225_1(void) = CatchAny : -# 2226| v2226_1(void) = ReThrow : +# 2272| Block 9 +# 2272| v2272_1(void) = CatchAny : +# 2273| v2273_1(void) = ReThrow : #-----| Exception -> Block 2 -# 2228| Block 10 -# 2228| m2228_1(unknown) = Phi : from 4:~m2219_13, from 8:~m2214_6 -# 2228| v2228_2(void) = NoOp : -# 2212| v2212_12(void) = ReturnVoid : +# 2275| Block 10 +# 2275| m2275_1(unknown) = Phi : from 4:~m2266_13, from 8:~m2261_6 +# 2275| v2275_2(void) = NoOp : +# 2259| v2259_12(void) = ReturnVoid : #-----| Goto -> Block 1 -# 2230| void IfDestructors(bool) -# 2230| Block 0 -# 2230| v2230_1(void) = EnterFunction : -# 2230| m2230_2(unknown) = AliasedDefinition : -# 2230| m2230_3(unknown) = InitializeNonLocal : -# 2230| m2230_4(unknown) = Chi : total:m2230_2, partial:m2230_3 -# 2230| r2230_5(glval) = VariableAddress[b] : -# 2230| m2230_6(bool) = InitializeParameter[b] : &:r2230_5 -# 2231| r2231_1(glval) = VariableAddress[s1] : -# 2231| m2231_2(String) = Uninitialized[s1] : &:r2231_1 -# 2231| r2231_3(glval) = FunctionAddress[String] : -# 2231| v2231_4(void) = Call[String] : func:r2231_3, this:r2231_1 -# 2231| m2231_5(unknown) = ^CallSideEffect : ~m2230_4 -# 2231| m2231_6(unknown) = Chi : total:m2230_4, partial:m2231_5 -# 2231| m2231_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2231_1 -# 2231| m2231_8(String) = Chi : total:m2231_2, partial:m2231_7 -# 2232| r2232_1(glval) = VariableAddress[b] : -# 2232| r2232_2(bool) = Load[b] : &:r2232_1, m2230_6 -# 2232| v2232_3(void) = ConditionalBranch : r2232_2 +# 2277| void IfDestructors(bool) +# 2277| Block 0 +# 2277| v2277_1(void) = EnterFunction : +# 2277| m2277_2(unknown) = AliasedDefinition : +# 2277| m2277_3(unknown) = InitializeNonLocal : +# 2277| m2277_4(unknown) = Chi : total:m2277_2, partial:m2277_3 +# 2277| r2277_5(glval) = VariableAddress[b] : +# 2277| m2277_6(bool) = InitializeParameter[b] : &:r2277_5 +# 2278| r2278_1(glval) = VariableAddress[s1] : +# 2278| m2278_2(String) = Uninitialized[s1] : &:r2278_1 +# 2278| r2278_3(glval) = FunctionAddress[String] : +# 2278| v2278_4(void) = Call[String] : func:r2278_3, this:r2278_1 +# 2278| m2278_5(unknown) = ^CallSideEffect : ~m2277_4 +# 2278| m2278_6(unknown) = Chi : total:m2277_4, partial:m2278_5 +# 2278| m2278_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2278_1 +# 2278| m2278_8(String) = Chi : total:m2278_2, partial:m2278_7 +# 2279| r2279_1(glval) = VariableAddress[b] : +# 2279| r2279_2(bool) = Load[b] : &:r2279_1, m2277_6 +# 2279| v2279_3(void) = ConditionalBranch : r2279_2 #-----| False -> Block 2 #-----| True -> Block 1 -# 2233| Block 1 -# 2233| r2233_1(glval) = VariableAddress[s2] : -# 2233| m2233_2(String) = Uninitialized[s2] : &:r2233_1 -# 2233| r2233_3(glval) = FunctionAddress[String] : -# 2233| v2233_4(void) = Call[String] : func:r2233_3, this:r2233_1 -# 2233| m2233_5(unknown) = ^CallSideEffect : ~m2231_6 -# 2233| m2233_6(unknown) = Chi : total:m2231_6, partial:m2233_5 -# 2233| m2233_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2233_1 -# 2233| m2233_8(String) = Chi : total:m2233_2, partial:m2233_7 -# 2234| r2234_1(glval) = VariableAddress[s2] : -# 2234| r2234_2(glval) = FunctionAddress[~String] : -# 2234| v2234_3(void) = Call[~String] : func:r2234_2, this:r2234_1 -# 2234| m2234_4(unknown) = ^CallSideEffect : ~m2233_6 -# 2234| m2234_5(unknown) = Chi : total:m2233_6, partial:m2234_4 -# 2234| v2234_6(void) = ^IndirectReadSideEffect[-1] : &:r2234_1, m2233_8 -# 2234| m2234_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2234_1 -# 2234| m2234_8(String) = Chi : total:m2233_8, partial:m2234_7 +# 2280| Block 1 +# 2280| r2280_1(glval) = VariableAddress[s2] : +# 2280| m2280_2(String) = Uninitialized[s2] : &:r2280_1 +# 2280| r2280_3(glval) = FunctionAddress[String] : +# 2280| v2280_4(void) = Call[String] : func:r2280_3, this:r2280_1 +# 2280| m2280_5(unknown) = ^CallSideEffect : ~m2278_6 +# 2280| m2280_6(unknown) = Chi : total:m2278_6, partial:m2280_5 +# 2280| m2280_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2280_1 +# 2280| m2280_8(String) = Chi : total:m2280_2, partial:m2280_7 +# 2281| r2281_1(glval) = VariableAddress[s2] : +# 2281| r2281_2(glval) = FunctionAddress[~String] : +# 2281| v2281_3(void) = Call[~String] : func:r2281_2, this:r2281_1 +# 2281| m2281_4(unknown) = ^CallSideEffect : ~m2280_6 +# 2281| m2281_5(unknown) = Chi : total:m2280_6, partial:m2281_4 +# 2281| v2281_6(void) = ^IndirectReadSideEffect[-1] : &:r2281_1, m2280_8 +# 2281| m2281_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2281_1 +# 2281| m2281_8(String) = Chi : total:m2280_8, partial:m2281_7 #-----| Goto -> Block 3 -# 2235| Block 2 -# 2235| r2235_1(glval) = VariableAddress[s3] : -# 2235| m2235_2(String) = Uninitialized[s3] : &:r2235_1 -# 2235| r2235_3(glval) = FunctionAddress[String] : -# 2235| v2235_4(void) = Call[String] : func:r2235_3, this:r2235_1 -# 2235| m2235_5(unknown) = ^CallSideEffect : ~m2231_6 -# 2235| m2235_6(unknown) = Chi : total:m2231_6, partial:m2235_5 -# 2235| m2235_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2235_1 -# 2235| m2235_8(String) = Chi : total:m2235_2, partial:m2235_7 -# 2236| r2236_1(glval) = VariableAddress[s3] : -# 2236| r2236_2(glval) = FunctionAddress[~String] : -# 2236| v2236_3(void) = Call[~String] : func:r2236_2, this:r2236_1 -# 2236| m2236_4(unknown) = ^CallSideEffect : ~m2235_6 -# 2236| m2236_5(unknown) = Chi : total:m2235_6, partial:m2236_4 -# 2236| v2236_6(void) = ^IndirectReadSideEffect[-1] : &:r2236_1, m2235_8 -# 2236| m2236_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2236_1 -# 2236| m2236_8(String) = Chi : total:m2235_8, partial:m2236_7 +# 2282| Block 2 +# 2282| r2282_1(glval) = VariableAddress[s3] : +# 2282| m2282_2(String) = Uninitialized[s3] : &:r2282_1 +# 2282| r2282_3(glval) = FunctionAddress[String] : +# 2282| v2282_4(void) = Call[String] : func:r2282_3, this:r2282_1 +# 2282| m2282_5(unknown) = ^CallSideEffect : ~m2278_6 +# 2282| m2282_6(unknown) = Chi : total:m2278_6, partial:m2282_5 +# 2282| m2282_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2282_1 +# 2282| m2282_8(String) = Chi : total:m2282_2, partial:m2282_7 +# 2283| r2283_1(glval) = VariableAddress[s3] : +# 2283| r2283_2(glval) = FunctionAddress[~String] : +# 2283| v2283_3(void) = Call[~String] : func:r2283_2, this:r2283_1 +# 2283| m2283_4(unknown) = ^CallSideEffect : ~m2282_6 +# 2283| m2283_5(unknown) = Chi : total:m2282_6, partial:m2283_4 +# 2283| v2283_6(void) = ^IndirectReadSideEffect[-1] : &:r2283_1, m2282_8 +# 2283| m2283_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2283_1 +# 2283| m2283_8(String) = Chi : total:m2282_8, partial:m2283_7 #-----| Goto -> Block 3 -# 2237| Block 3 -# 2237| m2237_1(unknown) = Phi : from 1:~m2234_5, from 2:~m2236_5 -# 2237| r2237_2(glval) = VariableAddress[s4] : -# 2237| m2237_3(String) = Uninitialized[s4] : &:r2237_2 -# 2237| r2237_4(glval) = FunctionAddress[String] : -# 2237| v2237_5(void) = Call[String] : func:r2237_4, this:r2237_2 -# 2237| m2237_6(unknown) = ^CallSideEffect : ~m2237_1 -# 2237| m2237_7(unknown) = Chi : total:m2237_1, partial:m2237_6 -# 2237| m2237_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2237_2 -# 2237| m2237_9(String) = Chi : total:m2237_3, partial:m2237_8 -# 2238| v2238_1(void) = NoOp : -# 2238| r2238_2(glval) = VariableAddress[s4] : -# 2238| r2238_3(glval) = FunctionAddress[~String] : -# 2238| v2238_4(void) = Call[~String] : func:r2238_3, this:r2238_2 -# 2238| m2238_5(unknown) = ^CallSideEffect : ~m2237_7 -# 2238| m2238_6(unknown) = Chi : total:m2237_7, partial:m2238_5 -# 2238| v2238_7(void) = ^IndirectReadSideEffect[-1] : &:r2238_2, m2237_9 -# 2238| m2238_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2238_2 -# 2238| m2238_9(String) = Chi : total:m2237_9, partial:m2238_8 -# 2238| r2238_10(glval) = VariableAddress[s1] : -# 2238| r2238_11(glval) = FunctionAddress[~String] : -# 2238| v2238_12(void) = Call[~String] : func:r2238_11, this:r2238_10 -# 2238| m2238_13(unknown) = ^CallSideEffect : ~m2238_6 -# 2238| m2238_14(unknown) = Chi : total:m2238_6, partial:m2238_13 -# 2238| v2238_15(void) = ^IndirectReadSideEffect[-1] : &:r2238_10, m2231_8 -# 2238| m2238_16(String) = ^IndirectMayWriteSideEffect[-1] : &:r2238_10 -# 2238| m2238_17(String) = Chi : total:m2231_8, partial:m2238_16 -# 2230| v2230_7(void) = ReturnVoid : -# 2230| v2230_8(void) = AliasedUse : ~m2238_14 -# 2230| v2230_9(void) = ExitFunction : +# 2284| Block 3 +# 2284| m2284_1(unknown) = Phi : from 1:~m2281_5, from 2:~m2283_5 +# 2284| r2284_2(glval) = VariableAddress[s4] : +# 2284| m2284_3(String) = Uninitialized[s4] : &:r2284_2 +# 2284| r2284_4(glval) = FunctionAddress[String] : +# 2284| v2284_5(void) = Call[String] : func:r2284_4, this:r2284_2 +# 2284| m2284_6(unknown) = ^CallSideEffect : ~m2284_1 +# 2284| m2284_7(unknown) = Chi : total:m2284_1, partial:m2284_6 +# 2284| m2284_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2284_2 +# 2284| m2284_9(String) = Chi : total:m2284_3, partial:m2284_8 +# 2285| v2285_1(void) = NoOp : +# 2285| r2285_2(glval) = VariableAddress[s4] : +# 2285| r2285_3(glval) = FunctionAddress[~String] : +# 2285| v2285_4(void) = Call[~String] : func:r2285_3, this:r2285_2 +# 2285| m2285_5(unknown) = ^CallSideEffect : ~m2284_7 +# 2285| m2285_6(unknown) = Chi : total:m2284_7, partial:m2285_5 +# 2285| v2285_7(void) = ^IndirectReadSideEffect[-1] : &:r2285_2, m2284_9 +# 2285| m2285_8(String) = ^IndirectMayWriteSideEffect[-1] : &:r2285_2 +# 2285| m2285_9(String) = Chi : total:m2284_9, partial:m2285_8 +# 2285| r2285_10(glval) = VariableAddress[s1] : +# 2285| r2285_11(glval) = FunctionAddress[~String] : +# 2285| v2285_12(void) = Call[~String] : func:r2285_11, this:r2285_10 +# 2285| m2285_13(unknown) = ^CallSideEffect : ~m2285_6 +# 2285| m2285_14(unknown) = Chi : total:m2285_6, partial:m2285_13 +# 2285| v2285_15(void) = ^IndirectReadSideEffect[-1] : &:r2285_10, m2278_8 +# 2285| m2285_16(String) = ^IndirectMayWriteSideEffect[-1] : &:r2285_10 +# 2285| m2285_17(String) = Chi : total:m2278_8, partial:m2285_16 +# 2277| v2277_7(void) = ReturnVoid : +# 2277| v2277_8(void) = AliasedUse : ~m2285_14 +# 2277| v2277_9(void) = ExitFunction : -# 2240| void ForDestructors() -# 2240| Block 0 -# 2240| v2240_1(void) = EnterFunction : -# 2240| m2240_2(unknown) = AliasedDefinition : -# 2240| m2240_3(unknown) = InitializeNonLocal : -# 2240| m2240_4(unknown) = Chi : total:m2240_2, partial:m2240_3 -# 2241| r2241_1(glval) = VariableAddress[c] : -# 2241| r2241_2(char) = Constant[97] : -# 2241| m2241_3(char) = Store[c] : &:r2241_1, r2241_2 -# 2242| r2242_1(glval) = VariableAddress[s] : -# 2242| m2242_2(String) = Uninitialized[s] : &:r2242_1 -# 2242| r2242_3(glval) = FunctionAddress[String] : -# 2242| r2242_4(glval) = StringConstant["hello"] : -# 2242| r2242_5(char *) = Convert : r2242_4 -# 2242| v2242_6(void) = Call[String] : func:r2242_3, this:r2242_1, 0:r2242_5 -# 2242| m2242_7(unknown) = ^CallSideEffect : ~m2240_4 -# 2242| m2242_8(unknown) = Chi : total:m2240_4, partial:m2242_7 -# 2242| v2242_9(void) = ^BufferReadSideEffect[0] : &:r2242_5, ~m2240_3 -# 2242| m2242_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2242_1 -# 2242| m2242_11(String) = Chi : total:m2242_2, partial:m2242_10 +# 2287| void ForDestructors() +# 2287| Block 0 +# 2287| v2287_1(void) = EnterFunction : +# 2287| m2287_2(unknown) = AliasedDefinition : +# 2287| m2287_3(unknown) = InitializeNonLocal : +# 2287| m2287_4(unknown) = Chi : total:m2287_2, partial:m2287_3 +# 2288| r2288_1(glval) = VariableAddress[c] : +# 2288| r2288_2(char) = Constant[97] : +# 2288| m2288_3(char) = Store[c] : &:r2288_1, r2288_2 +# 2289| r2289_1(glval) = VariableAddress[s] : +# 2289| m2289_2(String) = Uninitialized[s] : &:r2289_1 +# 2289| r2289_3(glval) = FunctionAddress[String] : +# 2289| r2289_4(glval) = StringConstant["hello"] : +# 2289| r2289_5(char *) = Convert : r2289_4 +# 2289| v2289_6(void) = Call[String] : func:r2289_3, this:r2289_1, 0:r2289_5 +# 2289| m2289_7(unknown) = ^CallSideEffect : ~m2287_4 +# 2289| m2289_8(unknown) = Chi : total:m2287_4, partial:m2289_7 +# 2289| v2289_9(void) = ^BufferReadSideEffect[0] : &:r2289_5, ~m2287_3 +# 2289| m2289_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2289_1 +# 2289| m2289_11(String) = Chi : total:m2289_2, partial:m2289_10 #-----| Goto -> Block 1 -# 2242| Block 1 -# 2242| m2242_12(String) = Phi : from 0:m2242_11, from 2:m2242_28 -# 2242| m2242_13(unknown) = Phi : from 0:~m2242_8, from 2:~m2242_25 -# 2242| m2242_14(char) = Phi : from 0:m2241_3, from 2:m2242_30 -# 2242| r2242_15(glval) = VariableAddress[c] : -# 2242| r2242_16(char) = Load[c] : &:r2242_15, m2242_14 -# 2242| r2242_17(int) = Convert : r2242_16 -# 2242| r2242_18(int) = Constant[0] : -# 2242| r2242_19(bool) = CompareNE : r2242_17, r2242_18 -# 2242| v2242_20(void) = ConditionalBranch : r2242_19 +# 2289| Block 1 +# 2289| m2289_12(String) = Phi : from 0:m2289_11, from 2:m2289_28 +# 2289| m2289_13(unknown) = Phi : from 0:~m2289_8, from 2:~m2289_25 +# 2289| m2289_14(char) = Phi : from 0:m2288_3, from 2:m2289_30 +# 2289| r2289_15(glval) = VariableAddress[c] : +# 2289| r2289_16(char) = Load[c] : &:r2289_15, m2289_14 +# 2289| r2289_17(int) = Convert : r2289_16 +# 2289| r2289_18(int) = Constant[0] : +# 2289| r2289_19(bool) = CompareNE : r2289_17, r2289_18 +# 2289| v2289_20(void) = ConditionalBranch : r2289_19 #-----| False -> Block 3 #-----| True -> Block 2 -# 2243| Block 2 -# 2243| r2243_1(glval) = VariableAddress[s2] : -# 2243| m2243_2(String) = Uninitialized[s2] : &:r2243_1 -# 2243| r2243_3(glval) = FunctionAddress[String] : -# 2243| v2243_4(void) = Call[String] : func:r2243_3, this:r2243_1 -# 2243| m2243_5(unknown) = ^CallSideEffect : ~m2242_13 -# 2243| m2243_6(unknown) = Chi : total:m2242_13, partial:m2243_5 -# 2243| m2243_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2243_1 -# 2243| m2243_8(String) = Chi : total:m2243_2, partial:m2243_7 -# 2244| r2244_1(glval) = VariableAddress[s2] : -# 2244| r2244_2(glval) = FunctionAddress[~String] : -# 2244| v2244_3(void) = Call[~String] : func:r2244_2, this:r2244_1 -# 2244| m2244_4(unknown) = ^CallSideEffect : ~m2243_6 -# 2244| m2244_5(unknown) = Chi : total:m2243_6, partial:m2244_4 -# 2244| v2244_6(void) = ^IndirectReadSideEffect[-1] : &:r2244_1, m2243_8 -# 2244| m2244_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2244_1 -# 2244| m2244_8(String) = Chi : total:m2243_8, partial:m2244_7 -# 2242| r2242_21(glval) = VariableAddress[s] : -# 2242| r2242_22(glval) = FunctionAddress[pop_back] : -# 2242| r2242_23(char) = Call[pop_back] : func:r2242_22, this:r2242_21 -# 2242| m2242_24(unknown) = ^CallSideEffect : ~m2244_5 -# 2242| m2242_25(unknown) = Chi : total:m2244_5, partial:m2242_24 -# 2242| v2242_26(void) = ^IndirectReadSideEffect[-1] : &:r2242_21, m2242_12 -# 2242| m2242_27(String) = ^IndirectMayWriteSideEffect[-1] : &:r2242_21 -# 2242| m2242_28(String) = Chi : total:m2242_12, partial:m2242_27 -# 2242| r2242_29(glval) = VariableAddress[c] : -# 2242| m2242_30(char) = Store[c] : &:r2242_29, r2242_23 +# 2290| Block 2 +# 2290| r2290_1(glval) = VariableAddress[s2] : +# 2290| m2290_2(String) = Uninitialized[s2] : &:r2290_1 +# 2290| r2290_3(glval) = FunctionAddress[String] : +# 2290| v2290_4(void) = Call[String] : func:r2290_3, this:r2290_1 +# 2290| m2290_5(unknown) = ^CallSideEffect : ~m2289_13 +# 2290| m2290_6(unknown) = Chi : total:m2289_13, partial:m2290_5 +# 2290| m2290_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2290_1 +# 2290| m2290_8(String) = Chi : total:m2290_2, partial:m2290_7 +# 2291| r2291_1(glval) = VariableAddress[s2] : +# 2291| r2291_2(glval) = FunctionAddress[~String] : +# 2291| v2291_3(void) = Call[~String] : func:r2291_2, this:r2291_1 +# 2291| m2291_4(unknown) = ^CallSideEffect : ~m2290_6 +# 2291| m2291_5(unknown) = Chi : total:m2290_6, partial:m2291_4 +# 2291| v2291_6(void) = ^IndirectReadSideEffect[-1] : &:r2291_1, m2290_8 +# 2291| m2291_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2291_1 +# 2291| m2291_8(String) = Chi : total:m2290_8, partial:m2291_7 +# 2289| r2289_21(glval) = VariableAddress[s] : +# 2289| r2289_22(glval) = FunctionAddress[pop_back] : +# 2289| r2289_23(char) = Call[pop_back] : func:r2289_22, this:r2289_21 +# 2289| m2289_24(unknown) = ^CallSideEffect : ~m2291_5 +# 2289| m2289_25(unknown) = Chi : total:m2291_5, partial:m2289_24 +# 2289| v2289_26(void) = ^IndirectReadSideEffect[-1] : &:r2289_21, m2289_12 +# 2289| m2289_27(String) = ^IndirectMayWriteSideEffect[-1] : &:r2289_21 +# 2289| m2289_28(String) = Chi : total:m2289_12, partial:m2289_27 +# 2289| r2289_29(glval) = VariableAddress[c] : +# 2289| m2289_30(char) = Store[c] : &:r2289_29, r2289_23 #-----| Goto (back edge) -> Block 1 -# 2242| Block 3 -# 2242| r2242_31(glval) = VariableAddress[s] : -# 2242| r2242_32(glval) = FunctionAddress[~String] : -# 2242| v2242_33(void) = Call[~String] : func:r2242_32, this:r2242_31 -# 2242| m2242_34(unknown) = ^CallSideEffect : ~m2242_13 -# 2242| m2242_35(unknown) = Chi : total:m2242_13, partial:m2242_34 -# 2242| v2242_36(void) = ^IndirectReadSideEffect[-1] : &:r2242_31, m2242_12 -# 2242| m2242_37(String) = ^IndirectMayWriteSideEffect[-1] : &:r2242_31 -# 2242| m2242_38(String) = Chi : total:m2242_12, partial:m2242_37 -# 2246| r2246_1(glval &&>) = VariableAddress[(__range)] : -# 2246| r2246_2(glval>) = VariableAddress[#temp2246:20] : -# 2246| m2246_3(vector) = Uninitialized[#temp2246:20] : &:r2246_2 -# 2246| r2246_4(glval) = FunctionAddress[vector] : -# 2246| r2246_5(glval) = VariableAddress[#temp2246:35] : -# 2246| m2246_6(String) = Uninitialized[#temp2246:35] : &:r2246_5 -# 2246| r2246_7(glval) = FunctionAddress[String] : -# 2246| r2246_8(glval) = StringConstant["hello"] : -# 2246| r2246_9(char *) = Convert : r2246_8 -# 2246| v2246_10(void) = Call[String] : func:r2246_7, this:r2246_5, 0:r2246_9 -# 2246| m2246_11(unknown) = ^CallSideEffect : ~m2242_35 -# 2246| m2246_12(unknown) = Chi : total:m2242_35, partial:m2246_11 -# 2246| v2246_13(void) = ^BufferReadSideEffect[0] : &:r2246_9, ~m2240_3 -# 2246| m2246_14(String) = ^IndirectMayWriteSideEffect[-1] : &:r2246_5 -# 2246| m2246_15(String) = Chi : total:m2246_6, partial:m2246_14 -# 2246| r2246_16(String) = Load[#temp2246:35] : &:r2246_5, m2246_15 -# 2246| v2246_17(void) = Call[vector] : func:r2246_4, this:r2246_2, 0:r2246_16 -# 2246| m2246_18(unknown) = ^CallSideEffect : ~m2246_12 -# 2246| m2246_19(unknown) = Chi : total:m2246_12, partial:m2246_18 -# 2246| m2246_20(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2246_2 -# 2246| m2246_21(vector) = Chi : total:m2246_3, partial:m2246_20 -# 2246| r2246_22(vector &) = CopyValue : r2246_2 -# 2246| m2246_23(vector &&) = Store[(__range)] : &:r2246_1, r2246_22 -# 2246| r2246_24(glval) = VariableAddress[(__begin)] : -# 2246| r2246_25(glval &&>) = VariableAddress[(__range)] : -# 2246| r2246_26(vector &&) = Load[(__range)] : &:r2246_25, m2246_23 -#-----| r0_1(glval>) = CopyValue : r2246_26 -#-----| r0_2(glval>) = Convert : r0_1 -# 2246| r2246_27(glval) = FunctionAddress[begin] : -# 2246| r2246_28(iterator) = Call[begin] : func:r2246_27, this:r0_2 -# 2246| m2246_29(unknown) = ^CallSideEffect : ~m2246_19 -# 2246| m2246_30(unknown) = Chi : total:m2246_19, partial:m2246_29 -#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2246_21 -# 2246| m2246_31(iterator) = Store[(__begin)] : &:r2246_24, r2246_28 -# 2246| r2246_32(glval) = VariableAddress[(__end)] : -# 2246| r2246_33(glval &&>) = VariableAddress[(__range)] : -# 2246| r2246_34(vector &&) = Load[(__range)] : &:r2246_33, m2246_23 -#-----| r0_4(glval>) = CopyValue : r2246_34 -#-----| r0_5(glval>) = Convert : r0_4 -# 2246| r2246_35(glval) = FunctionAddress[end] : -# 2246| r2246_36(iterator) = Call[end] : func:r2246_35, this:r0_5 -# 2246| m2246_37(unknown) = ^CallSideEffect : ~m2246_30 -# 2246| m2246_38(unknown) = Chi : total:m2246_30, partial:m2246_37 -#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2246_21 -# 2246| m2246_39(iterator) = Store[(__end)] : &:r2246_32, r2246_36 +# 2289| Block 3 +# 2289| r2289_31(glval) = VariableAddress[s] : +# 2289| r2289_32(glval) = FunctionAddress[~String] : +# 2289| v2289_33(void) = Call[~String] : func:r2289_32, this:r2289_31 +# 2289| m2289_34(unknown) = ^CallSideEffect : ~m2289_13 +# 2289| m2289_35(unknown) = Chi : total:m2289_13, partial:m2289_34 +# 2289| v2289_36(void) = ^IndirectReadSideEffect[-1] : &:r2289_31, m2289_12 +# 2289| m2289_37(String) = ^IndirectMayWriteSideEffect[-1] : &:r2289_31 +# 2289| m2289_38(String) = Chi : total:m2289_12, partial:m2289_37 +# 2293| r2293_1(glval &&>) = VariableAddress[(__range)] : +# 2293| r2293_2(glval>) = VariableAddress[#temp2293:20] : +# 2293| m2293_3(vector) = Uninitialized[#temp2293:20] : &:r2293_2 +# 2293| r2293_4(glval) = FunctionAddress[vector] : +# 2293| r2293_5(glval) = VariableAddress[#temp2293:40] : +# 2293| m2293_6(String) = Uninitialized[#temp2293:40] : &:r2293_5 +# 2293| r2293_7(glval) = FunctionAddress[String] : +# 2293| r2293_8(glval) = StringConstant["hello"] : +# 2293| r2293_9(char *) = Convert : r2293_8 +# 2293| v2293_10(void) = Call[String] : func:r2293_7, this:r2293_5, 0:r2293_9 +# 2293| m2293_11(unknown) = ^CallSideEffect : ~m2289_35 +# 2293| m2293_12(unknown) = Chi : total:m2289_35, partial:m2293_11 +# 2293| v2293_13(void) = ^BufferReadSideEffect[0] : &:r2293_9, ~m2287_3 +# 2293| m2293_14(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_5 +# 2293| m2293_15(String) = Chi : total:m2293_6, partial:m2293_14 +# 2293| r2293_16(String) = Load[#temp2293:40] : &:r2293_5, m2293_15 +# 2293| v2293_17(void) = Call[vector] : func:r2293_4, this:r2293_2, 0:r2293_16 +# 2293| m2293_18(unknown) = ^CallSideEffect : ~m2293_12 +# 2293| m2293_19(unknown) = Chi : total:m2293_12, partial:m2293_18 +# 2293| m2293_20(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2293_2 +# 2293| m2293_21(vector) = Chi : total:m2293_3, partial:m2293_20 +# 2293| r2293_22(vector &) = CopyValue : r2293_2 +# 2293| m2293_23(vector &&) = Store[(__range)] : &:r2293_1, r2293_22 +# 2293| r2293_24(glval>) = VariableAddress[(__begin)] : +# 2293| r2293_25(glval &&>) = VariableAddress[(__range)] : +# 2293| r2293_26(vector &&) = Load[(__range)] : &:r2293_25, m2293_23 +#-----| r0_1(glval>) = CopyValue : r2293_26 +#-----| r0_2(glval>) = Convert : r0_1 +# 2293| r2293_27(glval) = FunctionAddress[begin] : +# 2293| r2293_28(iterator) = Call[begin] : func:r2293_27, this:r0_2 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2293_21 +# 2293| m2293_29(iterator) = Store[(__begin)] : &:r2293_24, r2293_28 +# 2293| r2293_30(glval>) = VariableAddress[(__end)] : +# 2293| r2293_31(glval &&>) = VariableAddress[(__range)] : +# 2293| r2293_32(vector &&) = Load[(__range)] : &:r2293_31, m2293_23 +#-----| r0_4(glval>) = CopyValue : r2293_32 +#-----| r0_5(glval>) = Convert : r0_4 +# 2293| r2293_33(glval) = FunctionAddress[end] : +# 2293| r2293_34(iterator) = Call[end] : func:r2293_33, this:r0_5 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2293_21 +# 2293| m2293_35(iterator) = Store[(__end)] : &:r2293_30, r2293_34 #-----| Goto -> Block 4 -# 2246| Block 4 -# 2246| m2246_40(iterator) = Phi : from 3:m2246_31, from 5:m2246_82 -# 2246| m2246_41(unknown) = Phi : from 3:~m2246_38, from 5:~m2246_79 -# 2246| r2246_42(glval) = VariableAddress[(__begin)] : -#-----| r0_7(glval) = Convert : r2246_42 -# 2246| r2246_43(glval) = FunctionAddress[operator!=] : -# 2246| r2246_44(glval) = VariableAddress[(__end)] : -# 2246| r2246_45(iterator) = Load[(__end)] : &:r2246_44, m2246_39 -# 2246| r2246_46(bool) = Call[operator!=] : func:r2246_43, this:r0_7, 0:r2246_45 -# 2246| m2246_47(unknown) = ^CallSideEffect : ~m2246_41 -# 2246| m2246_48(unknown) = Chi : total:m2246_41, partial:m2246_47 -#-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2246_40 -# 2246| v2246_49(void) = ConditionalBranch : r2246_46 +# 2293| Block 4 +# 2293| m2293_36(iterator) = Phi : from 3:m2293_29, from 5:m2293_83 +# 2293| m2293_37(unknown) = Phi : from 3:~m2293_19, from 5:~m2293_80 +# 2293| r2293_38(glval>) = VariableAddress[(__begin)] : +#-----| r0_7(glval>) = Convert : r2293_38 +# 2293| r2293_39(glval) = FunctionAddress[operator!=] : +#-----| r0_8(glval>) = VariableAddress[#temp0:0] : +#-----| m0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 +# 2293| r2293_40(glval) = FunctionAddress[iterator] : +# 2293| r2293_41(glval>) = VariableAddress[(__end)] : +#-----| r0_10(glval>) = Convert : r2293_41 +#-----| r0_11(iterator &) = CopyValue : r0_10 +# 2293| v2293_42(void) = Call[iterator] : func:r2293_40, this:r0_8, 0:r0_11 +# 2293| m2293_43(unknown) = ^CallSideEffect : ~m2293_37 +# 2293| m2293_44(unknown) = Chi : total:m2293_37, partial:m2293_43 +#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m2293_35 +# 2293| m2293_45(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +# 2293| m2293_46(iterator) = Chi : total:m0_9, partial:m2293_45 +#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, m2293_46 +# 2293| r2293_47(bool) = Call[operator!=] : func:r2293_39, this:r0_7, 0:r0_13 +# 2293| m2293_48(unknown) = ^CallSideEffect : ~m2293_44 +# 2293| m2293_49(unknown) = Chi : total:m2293_44, partial:m2293_48 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2293_36 +# 2293| v2293_50(void) = ConditionalBranch : r2293_47 #-----| False -> Block 6 #-----| True -> Block 5 -# 2246| Block 5 -# 2246| r2246_50(glval) = VariableAddress[s] : -# 2246| m2246_51(String) = Uninitialized[s] : &:r2246_50 -# 2246| r2246_52(glval) = FunctionAddress[String] : -# 2246| r2246_53(glval) = VariableAddress[(__begin)] : -#-----| r0_9(glval) = Convert : r2246_53 -# 2246| r2246_54(glval) = FunctionAddress[operator*] : -# 2246| r2246_55(String &) = Call[operator*] : func:r2246_54, this:r0_9 -# 2246| m2246_56(unknown) = ^CallSideEffect : ~m2246_48 -# 2246| m2246_57(unknown) = Chi : total:m2246_48, partial:m2246_56 -#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, m2246_40 -# 2246| r2246_58(glval) = CopyValue : r2246_55 -# 2246| r2246_59(glval) = Convert : r2246_58 -# 2246| r2246_60(String &) = CopyValue : r2246_59 -# 2246| v2246_61(void) = Call[String] : func:r2246_52, this:r2246_50, 0:r2246_60 -# 2246| m2246_62(unknown) = ^CallSideEffect : ~m2246_57 -# 2246| m2246_63(unknown) = Chi : total:m2246_57, partial:m2246_62 -# 2246| v2246_64(void) = ^BufferReadSideEffect[0] : &:r2246_60, ~m2246_63 -# 2246| m2246_65(String) = ^IndirectMayWriteSideEffect[-1] : &:r2246_50 -# 2246| m2246_66(String) = Chi : total:m2246_51, partial:m2246_65 -# 2247| r2247_1(glval) = VariableAddress[s2] : -# 2247| m2247_2(String) = Uninitialized[s2] : &:r2247_1 -# 2247| r2247_3(glval) = FunctionAddress[String] : -# 2247| v2247_4(void) = Call[String] : func:r2247_3, this:r2247_1 -# 2247| m2247_5(unknown) = ^CallSideEffect : ~m2246_63 -# 2247| m2247_6(unknown) = Chi : total:m2246_63, partial:m2247_5 -# 2247| m2247_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2247_1 -# 2247| m2247_8(String) = Chi : total:m2247_2, partial:m2247_7 -# 2248| r2248_1(glval) = VariableAddress[s2] : -# 2248| r2248_2(glval) = FunctionAddress[~String] : -# 2248| v2248_3(void) = Call[~String] : func:r2248_2, this:r2248_1 -# 2248| m2248_4(unknown) = ^CallSideEffect : ~m2247_6 -# 2248| m2248_5(unknown) = Chi : total:m2247_6, partial:m2248_4 -# 2248| v2248_6(void) = ^IndirectReadSideEffect[-1] : &:r2248_1, m2247_8 -# 2248| m2248_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2248_1 -# 2248| m2248_8(String) = Chi : total:m2247_8, partial:m2248_7 -# 2246| r2246_67(glval) = VariableAddress[s] : -# 2246| r2246_68(glval) = FunctionAddress[~String] : -# 2246| v2246_69(void) = Call[~String] : func:r2246_68, this:r2246_67 -# 2246| m2246_70(unknown) = ^CallSideEffect : ~m2248_5 -# 2246| m2246_71(unknown) = Chi : total:m2248_5, partial:m2246_70 -# 2246| v2246_72(void) = ^IndirectReadSideEffect[-1] : &:r2246_67, m2246_66 -# 2246| m2246_73(String) = ^IndirectMayWriteSideEffect[-1] : &:r2246_67 -# 2246| m2246_74(String) = Chi : total:m2246_66, partial:m2246_73 -# 2246| r2246_75(glval) = VariableAddress[(__begin)] : -# 2246| r2246_76(glval) = FunctionAddress[operator++] : -# 2246| r2246_77(iterator &) = Call[operator++] : func:r2246_76, this:r2246_75 -# 2246| m2246_78(unknown) = ^CallSideEffect : ~m2246_71 -# 2246| m2246_79(unknown) = Chi : total:m2246_71, partial:m2246_78 -# 2246| v2246_80(void) = ^IndirectReadSideEffect[-1] : &:r2246_75, m2246_40 -# 2246| m2246_81(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2246_75 -# 2246| m2246_82(iterator) = Chi : total:m2246_40, partial:m2246_81 -# 2246| r2246_83(glval) = CopyValue : r2246_77 +# 2293| Block 5 +# 2293| r2293_51(glval) = VariableAddress[s] : +# 2293| m2293_52(String) = Uninitialized[s] : &:r2293_51 +# 2293| r2293_53(glval) = FunctionAddress[String] : +# 2293| r2293_54(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2293_54 +# 2293| r2293_55(glval) = FunctionAddress[operator*] : +# 2293| r2293_56(String &) = Call[operator*] : func:r2293_55, this:r0_15 +# 2293| m2293_57(unknown) = ^CallSideEffect : ~m2293_49 +# 2293| m2293_58(unknown) = Chi : total:m2293_49, partial:m2293_57 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2293_36 +# 2293| r2293_59(glval) = CopyValue : r2293_56 +# 2293| r2293_60(glval) = Convert : r2293_59 +# 2293| r2293_61(String &) = CopyValue : r2293_60 +# 2293| v2293_62(void) = Call[String] : func:r2293_53, this:r2293_51, 0:r2293_61 +# 2293| m2293_63(unknown) = ^CallSideEffect : ~m2293_58 +# 2293| m2293_64(unknown) = Chi : total:m2293_58, partial:m2293_63 +# 2293| v2293_65(void) = ^BufferReadSideEffect[0] : &:r2293_61, ~m2293_64 +# 2293| m2293_66(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_51 +# 2293| m2293_67(String) = Chi : total:m2293_52, partial:m2293_66 +# 2294| r2294_1(glval) = VariableAddress[s2] : +# 2294| m2294_2(String) = Uninitialized[s2] : &:r2294_1 +# 2294| r2294_3(glval) = FunctionAddress[String] : +# 2294| v2294_4(void) = Call[String] : func:r2294_3, this:r2294_1 +# 2294| m2294_5(unknown) = ^CallSideEffect : ~m2293_64 +# 2294| m2294_6(unknown) = Chi : total:m2293_64, partial:m2294_5 +# 2294| m2294_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2294_1 +# 2294| m2294_8(String) = Chi : total:m2294_2, partial:m2294_7 +# 2295| r2295_1(glval) = VariableAddress[s2] : +# 2295| r2295_2(glval) = FunctionAddress[~String] : +# 2295| v2295_3(void) = Call[~String] : func:r2295_2, this:r2295_1 +# 2295| m2295_4(unknown) = ^CallSideEffect : ~m2294_6 +# 2295| m2295_5(unknown) = Chi : total:m2294_6, partial:m2295_4 +# 2295| v2295_6(void) = ^IndirectReadSideEffect[-1] : &:r2295_1, m2294_8 +# 2295| m2295_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2295_1 +# 2295| m2295_8(String) = Chi : total:m2294_8, partial:m2295_7 +# 2293| r2293_68(glval) = VariableAddress[s] : +# 2293| r2293_69(glval) = FunctionAddress[~String] : +# 2293| v2293_70(void) = Call[~String] : func:r2293_69, this:r2293_68 +# 2293| m2293_71(unknown) = ^CallSideEffect : ~m2295_5 +# 2293| m2293_72(unknown) = Chi : total:m2295_5, partial:m2293_71 +# 2293| v2293_73(void) = ^IndirectReadSideEffect[-1] : &:r2293_68, m2293_67 +# 2293| m2293_74(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_68 +# 2293| m2293_75(String) = Chi : total:m2293_67, partial:m2293_74 +# 2293| r2293_76(glval>) = VariableAddress[(__begin)] : +# 2293| r2293_77(glval) = FunctionAddress[operator++] : +# 2293| r2293_78(iterator &) = Call[operator++] : func:r2293_77, this:r2293_76 +# 2293| m2293_79(unknown) = ^CallSideEffect : ~m2293_72 +# 2293| m2293_80(unknown) = Chi : total:m2293_72, partial:m2293_79 +# 2293| v2293_81(void) = ^IndirectReadSideEffect[-1] : &:r2293_76, m2293_36 +# 2293| m2293_82(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2293_76 +# 2293| m2293_83(iterator) = Chi : total:m2293_36, partial:m2293_82 +# 2293| r2293_84(glval>) = CopyValue : r2293_78 #-----| Goto (back edge) -> Block 4 -# 2250| Block 6 -# 2250| r2250_1(glval) = VariableAddress[s] : -# 2250| m2250_2(String) = Uninitialized[s] : &:r2250_1 -# 2250| r2250_3(glval) = FunctionAddress[String] : -# 2250| r2250_4(glval) = StringConstant["hello"] : -# 2250| r2250_5(char *) = Convert : r2250_4 -# 2250| v2250_6(void) = Call[String] : func:r2250_3, this:r2250_1, 0:r2250_5 -# 2250| m2250_7(unknown) = ^CallSideEffect : ~m2246_48 -# 2250| m2250_8(unknown) = Chi : total:m2246_48, partial:m2250_7 -# 2250| v2250_9(void) = ^BufferReadSideEffect[0] : &:r2250_5, ~m2240_3 -# 2250| m2250_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2250_1 -# 2250| m2250_11(String) = Chi : total:m2250_2, partial:m2250_10 -# 2250| r2250_12(glval) = VariableAddress[s2] : -# 2250| m2250_13(String) = Uninitialized[s2] : &:r2250_12 -# 2250| r2250_14(glval) = FunctionAddress[String] : -# 2250| r2250_15(glval) = StringConstant["world"] : -# 2250| r2250_16(char *) = Convert : r2250_15 -# 2250| v2250_17(void) = Call[String] : func:r2250_14, this:r2250_12, 0:r2250_16 -# 2250| m2250_18(unknown) = ^CallSideEffect : ~m2250_8 -# 2250| m2250_19(unknown) = Chi : total:m2250_8, partial:m2250_18 -# 2250| v2250_20(void) = ^BufferReadSideEffect[0] : &:r2250_16, ~m2240_3 -# 2250| m2250_21(String) = ^IndirectMayWriteSideEffect[-1] : &:r2250_12 -# 2250| m2250_22(String) = Chi : total:m2250_13, partial:m2250_21 +# 2297| Block 6 +# 2297| r2297_1(glval) = VariableAddress[s] : +# 2297| m2297_2(String) = Uninitialized[s] : &:r2297_1 +# 2297| r2297_3(glval) = FunctionAddress[String] : +# 2297| r2297_4(glval) = StringConstant["hello"] : +# 2297| r2297_5(char *) = Convert : r2297_4 +# 2297| v2297_6(void) = Call[String] : func:r2297_3, this:r2297_1, 0:r2297_5 +# 2297| m2297_7(unknown) = ^CallSideEffect : ~m2293_49 +# 2297| m2297_8(unknown) = Chi : total:m2293_49, partial:m2297_7 +# 2297| v2297_9(void) = ^BufferReadSideEffect[0] : &:r2297_5, ~m2287_3 +# 2297| m2297_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_1 +# 2297| m2297_11(String) = Chi : total:m2297_2, partial:m2297_10 +# 2297| r2297_12(glval) = VariableAddress[s2] : +# 2297| m2297_13(String) = Uninitialized[s2] : &:r2297_12 +# 2297| r2297_14(glval) = FunctionAddress[String] : +# 2297| r2297_15(glval) = StringConstant["world"] : +# 2297| r2297_16(char *) = Convert : r2297_15 +# 2297| v2297_17(void) = Call[String] : func:r2297_14, this:r2297_12, 0:r2297_16 +# 2297| m2297_18(unknown) = ^CallSideEffect : ~m2297_8 +# 2297| m2297_19(unknown) = Chi : total:m2297_8, partial:m2297_18 +# 2297| v2297_20(void) = ^BufferReadSideEffect[0] : &:r2297_16, ~m2287_3 +# 2297| m2297_21(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_12 +# 2297| m2297_22(String) = Chi : total:m2297_13, partial:m2297_21 #-----| Goto -> Block 7 -# 2250| Block 7 -# 2250| m2250_23(String) = Phi : from 6:m2250_11, from 8:m2250_39 -# 2250| m2250_24(unknown) = Phi : from 6:~m2250_19, from 8:~m2250_36 -# 2250| m2250_25(char) = Phi : from 6:m2242_14, from 8:m2250_41 -# 2250| r2250_26(glval) = VariableAddress[c] : -# 2250| r2250_27(char) = Load[c] : &:r2250_26, m2250_25 -# 2250| r2250_28(int) = Convert : r2250_27 -# 2250| r2250_29(int) = Constant[0] : -# 2250| r2250_30(bool) = CompareNE : r2250_28, r2250_29 -# 2250| v2250_31(void) = ConditionalBranch : r2250_30 +# 2297| Block 7 +# 2297| m2297_23(String) = Phi : from 6:m2297_11, from 8:m2297_39 +# 2297| m2297_24(unknown) = Phi : from 6:~m2297_19, from 8:~m2297_36 +# 2297| m2297_25(char) = Phi : from 6:m2289_14, from 8:m2297_41 +# 2297| r2297_26(glval) = VariableAddress[c] : +# 2297| r2297_27(char) = Load[c] : &:r2297_26, m2297_25 +# 2297| r2297_28(int) = Convert : r2297_27 +# 2297| r2297_29(int) = Constant[0] : +# 2297| r2297_30(bool) = CompareNE : r2297_28, r2297_29 +# 2297| v2297_31(void) = ConditionalBranch : r2297_30 #-----| False -> Block 9 #-----| True -> Block 8 -# 2251| Block 8 -# 2251| r2251_1(char) = Constant[0] : -# 2251| r2251_2(glval) = VariableAddress[c] : -# 2251| m2251_3(char) = Store[c] : &:r2251_2, r2251_1 -# 2250| r2250_32(glval) = VariableAddress[s] : -# 2250| r2250_33(glval) = FunctionAddress[pop_back] : -# 2250| r2250_34(char) = Call[pop_back] : func:r2250_33, this:r2250_32 -# 2250| m2250_35(unknown) = ^CallSideEffect : ~m2250_24 -# 2250| m2250_36(unknown) = Chi : total:m2250_24, partial:m2250_35 -# 2250| v2250_37(void) = ^IndirectReadSideEffect[-1] : &:r2250_32, m2250_23 -# 2250| m2250_38(String) = ^IndirectMayWriteSideEffect[-1] : &:r2250_32 -# 2250| m2250_39(String) = Chi : total:m2250_23, partial:m2250_38 -# 2250| r2250_40(glval) = VariableAddress[c] : -# 2250| m2250_41(char) = Store[c] : &:r2250_40, r2250_34 +# 2298| Block 8 +# 2298| r2298_1(char) = Constant[0] : +# 2298| r2298_2(glval) = VariableAddress[c] : +# 2298| m2298_3(char) = Store[c] : &:r2298_2, r2298_1 +# 2297| r2297_32(glval) = VariableAddress[s] : +# 2297| r2297_33(glval) = FunctionAddress[pop_back] : +# 2297| r2297_34(char) = Call[pop_back] : func:r2297_33, this:r2297_32 +# 2297| m2297_35(unknown) = ^CallSideEffect : ~m2297_24 +# 2297| m2297_36(unknown) = Chi : total:m2297_24, partial:m2297_35 +# 2297| v2297_37(void) = ^IndirectReadSideEffect[-1] : &:r2297_32, m2297_23 +# 2297| m2297_38(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_32 +# 2297| m2297_39(String) = Chi : total:m2297_23, partial:m2297_38 +# 2297| r2297_40(glval) = VariableAddress[c] : +# 2297| m2297_41(char) = Store[c] : &:r2297_40, r2297_34 #-----| Goto (back edge) -> Block 7 -# 2250| Block 9 -# 2250| r2250_42(glval) = VariableAddress[s2] : -# 2250| r2250_43(glval) = FunctionAddress[~String] : -# 2250| v2250_44(void) = Call[~String] : func:r2250_43, this:r2250_42 -# 2250| m2250_45(unknown) = ^CallSideEffect : ~m2250_24 -# 2250| m2250_46(unknown) = Chi : total:m2250_24, partial:m2250_45 -# 2250| v2250_47(void) = ^IndirectReadSideEffect[-1] : &:r2250_42, m2250_22 -# 2250| m2250_48(String) = ^IndirectMayWriteSideEffect[-1] : &:r2250_42 -# 2250| m2250_49(String) = Chi : total:m2250_22, partial:m2250_48 -# 2250| r2250_50(glval) = VariableAddress[s] : -# 2250| r2250_51(glval) = FunctionAddress[~String] : -# 2250| v2250_52(void) = Call[~String] : func:r2250_51, this:r2250_50 -# 2250| m2250_53(unknown) = ^CallSideEffect : ~m2250_46 -# 2250| m2250_54(unknown) = Chi : total:m2250_46, partial:m2250_53 -# 2250| v2250_55(void) = ^IndirectReadSideEffect[-1] : &:r2250_50, m2250_23 -# 2250| m2250_56(String) = ^IndirectMayWriteSideEffect[-1] : &:r2250_50 -# 2250| m2250_57(String) = Chi : total:m2250_23, partial:m2250_56 -# 2253| v2253_1(void) = NoOp : -# 2240| v2240_5(void) = ReturnVoid : -# 2240| v2240_6(void) = AliasedUse : ~m2250_54 -# 2240| v2240_7(void) = ExitFunction : +# 2297| Block 9 +# 2297| r2297_42(glval) = VariableAddress[s2] : +# 2297| r2297_43(glval) = FunctionAddress[~String] : +# 2297| v2297_44(void) = Call[~String] : func:r2297_43, this:r2297_42 +# 2297| m2297_45(unknown) = ^CallSideEffect : ~m2297_24 +# 2297| m2297_46(unknown) = Chi : total:m2297_24, partial:m2297_45 +# 2297| v2297_47(void) = ^IndirectReadSideEffect[-1] : &:r2297_42, m2297_22 +# 2297| m2297_48(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_42 +# 2297| m2297_49(String) = Chi : total:m2297_22, partial:m2297_48 +# 2297| r2297_50(glval) = VariableAddress[s] : +# 2297| r2297_51(glval) = FunctionAddress[~String] : +# 2297| v2297_52(void) = Call[~String] : func:r2297_51, this:r2297_50 +# 2297| m2297_53(unknown) = ^CallSideEffect : ~m2297_46 +# 2297| m2297_54(unknown) = Chi : total:m2297_46, partial:m2297_53 +# 2297| v2297_55(void) = ^IndirectReadSideEffect[-1] : &:r2297_50, m2297_23 +# 2297| m2297_56(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_50 +# 2297| m2297_57(String) = Chi : total:m2297_23, partial:m2297_56 +# 2300| v2300_1(void) = NoOp : +# 2287| v2287_5(void) = ReturnVoid : +# 2287| v2287_6(void) = AliasedUse : ~m2297_54 +# 2287| v2287_7(void) = ExitFunction : -# 2255| void IfDestructors2(bool) -# 2255| Block 0 -# 2255| v2255_1(void) = EnterFunction : -# 2255| m2255_2(unknown) = AliasedDefinition : -# 2255| m2255_3(unknown) = InitializeNonLocal : -# 2255| m2255_4(unknown) = Chi : total:m2255_2, partial:m2255_3 -# 2255| r2255_5(glval) = VariableAddress[b] : -# 2255| m2255_6(bool) = InitializeParameter[b] : &:r2255_5 -# 2256| r2256_1(glval) = VariableAddress[s] : -# 2256| m2256_2(String) = Uninitialized[s] : &:r2256_1 -# 2256| r2256_3(glval) = FunctionAddress[String] : -# 2256| r2256_4(glval) = StringConstant["hello"] : -# 2256| r2256_5(char *) = Convert : r2256_4 -# 2256| v2256_6(void) = Call[String] : func:r2256_3, this:r2256_1, 0:r2256_5 -# 2256| m2256_7(unknown) = ^CallSideEffect : ~m2255_4 -# 2256| m2256_8(unknown) = Chi : total:m2255_4, partial:m2256_7 -# 2256| v2256_9(void) = ^BufferReadSideEffect[0] : &:r2256_5, ~m2255_3 -# 2256| m2256_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2256_1 -# 2256| m2256_11(String) = Chi : total:m2256_2, partial:m2256_10 -# 2256| r2256_12(glval) = VariableAddress[b] : -# 2256| r2256_13(bool) = Load[b] : &:r2256_12, m2255_6 -# 2256| v2256_14(void) = ConditionalBranch : r2256_13 +# 2302| void IfDestructors2(bool) +# 2302| Block 0 +# 2302| v2302_1(void) = EnterFunction : +# 2302| m2302_2(unknown) = AliasedDefinition : +# 2302| m2302_3(unknown) = InitializeNonLocal : +# 2302| m2302_4(unknown) = Chi : total:m2302_2, partial:m2302_3 +# 2302| r2302_5(glval) = VariableAddress[b] : +# 2302| m2302_6(bool) = InitializeParameter[b] : &:r2302_5 +# 2303| r2303_1(glval) = VariableAddress[s] : +# 2303| m2303_2(String) = Uninitialized[s] : &:r2303_1 +# 2303| r2303_3(glval) = FunctionAddress[String] : +# 2303| r2303_4(glval) = StringConstant["hello"] : +# 2303| r2303_5(char *) = Convert : r2303_4 +# 2303| v2303_6(void) = Call[String] : func:r2303_3, this:r2303_1, 0:r2303_5 +# 2303| m2303_7(unknown) = ^CallSideEffect : ~m2302_4 +# 2303| m2303_8(unknown) = Chi : total:m2302_4, partial:m2303_7 +# 2303| v2303_9(void) = ^BufferReadSideEffect[0] : &:r2303_5, ~m2302_3 +# 2303| m2303_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r2303_1 +# 2303| m2303_11(String) = Chi : total:m2303_2, partial:m2303_10 +# 2303| r2303_12(glval) = VariableAddress[b] : +# 2303| r2303_13(bool) = Load[b] : &:r2303_12, m2302_6 +# 2303| v2303_14(void) = ConditionalBranch : r2303_13 #-----| False -> Block 2 #-----| True -> Block 1 -# 2257| Block 1 -# 2257| r2257_1(glval) = VariableAddress[x] : -# 2257| r2257_2(int) = Constant[0] : -# 2257| m2257_3(int) = Store[x] : &:r2257_1, r2257_2 +# 2304| Block 1 +# 2304| r2304_1(glval) = VariableAddress[x] : +# 2304| r2304_2(int) = Constant[0] : +# 2304| m2304_3(int) = Store[x] : &:r2304_1, r2304_2 #-----| Goto -> Block 3 -# 2259| Block 2 -# 2259| r2259_1(glval) = VariableAddress[y] : -# 2259| r2259_2(int) = Constant[0] : -# 2259| m2259_3(int) = Store[y] : &:r2259_1, r2259_2 +# 2306| Block 2 +# 2306| r2306_1(glval) = VariableAddress[y] : +# 2306| r2306_2(int) = Constant[0] : +# 2306| m2306_3(int) = Store[y] : &:r2306_1, r2306_2 #-----| Goto -> Block 3 -# 2260| Block 3 -# 2260| r2260_1(glval) = VariableAddress[s] : -# 2260| r2260_2(glval) = FunctionAddress[~String] : -# 2260| v2260_3(void) = Call[~String] : func:r2260_2, this:r2260_1 -# 2260| m2260_4(unknown) = ^CallSideEffect : ~m2256_8 -# 2260| m2260_5(unknown) = Chi : total:m2256_8, partial:m2260_4 -# 2260| v2260_6(void) = ^IndirectReadSideEffect[-1] : &:r2260_1, m2256_11 -# 2260| m2260_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2260_1 -# 2260| m2260_8(String) = Chi : total:m2256_11, partial:m2260_7 -# 2261| v2261_1(void) = NoOp : -# 2255| v2255_7(void) = ReturnVoid : -# 2255| v2255_8(void) = AliasedUse : ~m2260_5 -# 2255| v2255_9(void) = ExitFunction : +# 2307| Block 3 +# 2307| r2307_1(glval) = VariableAddress[s] : +# 2307| r2307_2(glval) = FunctionAddress[~String] : +# 2307| v2307_3(void) = Call[~String] : func:r2307_2, this:r2307_1 +# 2307| m2307_4(unknown) = ^CallSideEffect : ~m2303_8 +# 2307| m2307_5(unknown) = Chi : total:m2303_8, partial:m2307_4 +# 2307| v2307_6(void) = ^IndirectReadSideEffect[-1] : &:r2307_1, m2303_11 +# 2307| m2307_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_1 +# 2307| m2307_8(String) = Chi : total:m2303_11, partial:m2307_7 +# 2308| v2308_1(void) = NoOp : +# 2302| v2302_7(void) = ReturnVoid : +# 2302| v2302_8(void) = AliasedUse : ~m2307_5 +# 2302| v2302_9(void) = ExitFunction : -# 2270| void IfDestructors3(bool) -# 2270| Block 0 -# 2270| v2270_1(void) = EnterFunction : -# 2270| m2270_2(unknown) = AliasedDefinition : -# 2270| m2270_3(unknown) = InitializeNonLocal : -# 2270| m2270_4(unknown) = Chi : total:m2270_2, partial:m2270_3 -# 2270| r2270_5(glval) = VariableAddress[b] : -# 2270| m2270_6(bool) = InitializeParameter[b] : &:r2270_5 -# 2271| r2271_1(glval) = VariableAddress[B] : -# 2271| m2271_2(Bool) = Uninitialized[B] : &:r2271_1 -# 2271| r2271_3(glval) = FunctionAddress[Bool] : -# 2271| r2271_4(glval) = VariableAddress[b] : -# 2271| r2271_5(bool) = Load[b] : &:r2271_4, m2270_6 -# 2271| v2271_6(void) = Call[Bool] : func:r2271_3, this:r2271_1, 0:r2271_5 -# 2271| m2271_7(unknown) = ^CallSideEffect : ~m2270_4 -# 2271| m2271_8(unknown) = Chi : total:m2270_4, partial:m2271_7 -# 2271| m2271_9(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2271_1 -# 2271| m2271_10(Bool) = Chi : total:m2271_2, partial:m2271_9 -# 2271| r2271_11(glval) = VariableAddress[B] : -# 2271| r2271_12(glval) = FunctionAddress[operator bool] : -# 2271| r2271_13(bool) = Call[operator bool] : func:r2271_12, this:r2271_11 -# 2271| m2271_14(unknown) = ^CallSideEffect : ~m2271_8 -# 2271| m2271_15(unknown) = Chi : total:m2271_8, partial:m2271_14 -# 2271| v2271_16(void) = ^IndirectReadSideEffect[-1] : &:r2271_11, m2271_10 -# 2271| m2271_17(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2271_11 -# 2271| m2271_18(Bool) = Chi : total:m2271_10, partial:m2271_17 -# 2271| r2271_19(bool) = CopyValue : r2271_13 -# 2271| v2271_20(void) = ConditionalBranch : r2271_19 +# 2317| void IfDestructors3(bool) +# 2317| Block 0 +# 2317| v2317_1(void) = EnterFunction : +# 2317| m2317_2(unknown) = AliasedDefinition : +# 2317| m2317_3(unknown) = InitializeNonLocal : +# 2317| m2317_4(unknown) = Chi : total:m2317_2, partial:m2317_3 +# 2317| r2317_5(glval) = VariableAddress[b] : +# 2317| m2317_6(bool) = InitializeParameter[b] : &:r2317_5 +# 2318| r2318_1(glval) = VariableAddress[B] : +# 2318| m2318_2(Bool) = Uninitialized[B] : &:r2318_1 +# 2318| r2318_3(glval) = FunctionAddress[Bool] : +# 2318| r2318_4(glval) = VariableAddress[b] : +# 2318| r2318_5(bool) = Load[b] : &:r2318_4, m2317_6 +# 2318| v2318_6(void) = Call[Bool] : func:r2318_3, this:r2318_1, 0:r2318_5 +# 2318| m2318_7(unknown) = ^CallSideEffect : ~m2317_4 +# 2318| m2318_8(unknown) = Chi : total:m2317_4, partial:m2318_7 +# 2318| m2318_9(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2318_1 +# 2318| m2318_10(Bool) = Chi : total:m2318_2, partial:m2318_9 +# 2318| r2318_11(glval) = VariableAddress[B] : +# 2318| r2318_12(glval) = FunctionAddress[operator bool] : +# 2318| r2318_13(bool) = Call[operator bool] : func:r2318_12, this:r2318_11 +# 2318| m2318_14(unknown) = ^CallSideEffect : ~m2318_8 +# 2318| m2318_15(unknown) = Chi : total:m2318_8, partial:m2318_14 +# 2318| v2318_16(void) = ^IndirectReadSideEffect[-1] : &:r2318_11, m2318_10 +# 2318| m2318_17(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2318_11 +# 2318| m2318_18(Bool) = Chi : total:m2318_10, partial:m2318_17 +# 2318| r2318_19(bool) = CopyValue : r2318_13 +# 2318| v2318_20(void) = ConditionalBranch : r2318_19 #-----| False -> Block 2 #-----| True -> Block 1 -# 2272| Block 1 -# 2272| r2272_1(glval) = VariableAddress[s1] : -# 2272| m2272_2(String) = Uninitialized[s1] : &:r2272_1 -# 2272| r2272_3(glval) = FunctionAddress[String] : -# 2272| v2272_4(void) = Call[String] : func:r2272_3, this:r2272_1 -# 2272| m2272_5(unknown) = ^CallSideEffect : ~m2271_15 -# 2272| m2272_6(unknown) = Chi : total:m2271_15, partial:m2272_5 -# 2272| m2272_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2272_1 -# 2272| m2272_8(String) = Chi : total:m2272_2, partial:m2272_7 -# 2273| r2273_1(glval) = VariableAddress[s1] : -# 2273| r2273_2(glval) = FunctionAddress[~String] : -# 2273| v2273_3(void) = Call[~String] : func:r2273_2, this:r2273_1 -# 2273| m2273_4(unknown) = ^CallSideEffect : ~m2272_6 -# 2273| m2273_5(unknown) = Chi : total:m2272_6, partial:m2273_4 -# 2273| v2273_6(void) = ^IndirectReadSideEffect[-1] : &:r2273_1, m2272_8 -# 2273| m2273_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2273_1 -# 2273| m2273_8(String) = Chi : total:m2272_8, partial:m2273_7 +# 2319| Block 1 +# 2319| r2319_1(glval) = VariableAddress[s1] : +# 2319| m2319_2(String) = Uninitialized[s1] : &:r2319_1 +# 2319| r2319_3(glval) = FunctionAddress[String] : +# 2319| v2319_4(void) = Call[String] : func:r2319_3, this:r2319_1 +# 2319| m2319_5(unknown) = ^CallSideEffect : ~m2318_15 +# 2319| m2319_6(unknown) = Chi : total:m2318_15, partial:m2319_5 +# 2319| m2319_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2319_1 +# 2319| m2319_8(String) = Chi : total:m2319_2, partial:m2319_7 +# 2320| r2320_1(glval) = VariableAddress[s1] : +# 2320| r2320_2(glval) = FunctionAddress[~String] : +# 2320| v2320_3(void) = Call[~String] : func:r2320_2, this:r2320_1 +# 2320| m2320_4(unknown) = ^CallSideEffect : ~m2319_6 +# 2320| m2320_5(unknown) = Chi : total:m2319_6, partial:m2320_4 +# 2320| v2320_6(void) = ^IndirectReadSideEffect[-1] : &:r2320_1, m2319_8 +# 2320| m2320_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2320_1 +# 2320| m2320_8(String) = Chi : total:m2319_8, partial:m2320_7 #-----| Goto -> Block 3 -# 2274| Block 2 -# 2274| r2274_1(glval) = VariableAddress[s2] : -# 2274| m2274_2(String) = Uninitialized[s2] : &:r2274_1 -# 2274| r2274_3(glval) = FunctionAddress[String] : -# 2274| v2274_4(void) = Call[String] : func:r2274_3, this:r2274_1 -# 2274| m2274_5(unknown) = ^CallSideEffect : ~m2271_15 -# 2274| m2274_6(unknown) = Chi : total:m2271_15, partial:m2274_5 -# 2274| m2274_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2274_1 -# 2274| m2274_8(String) = Chi : total:m2274_2, partial:m2274_7 -# 2275| r2275_1(glval) = VariableAddress[s2] : -# 2275| r2275_2(glval) = FunctionAddress[~String] : -# 2275| v2275_3(void) = Call[~String] : func:r2275_2, this:r2275_1 -# 2275| m2275_4(unknown) = ^CallSideEffect : ~m2274_6 -# 2275| m2275_5(unknown) = Chi : total:m2274_6, partial:m2275_4 -# 2275| v2275_6(void) = ^IndirectReadSideEffect[-1] : &:r2275_1, m2274_8 -# 2275| m2275_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2275_1 -# 2275| m2275_8(String) = Chi : total:m2274_8, partial:m2275_7 +# 2321| Block 2 +# 2321| r2321_1(glval) = VariableAddress[s2] : +# 2321| m2321_2(String) = Uninitialized[s2] : &:r2321_1 +# 2321| r2321_3(glval) = FunctionAddress[String] : +# 2321| v2321_4(void) = Call[String] : func:r2321_3, this:r2321_1 +# 2321| m2321_5(unknown) = ^CallSideEffect : ~m2318_15 +# 2321| m2321_6(unknown) = Chi : total:m2318_15, partial:m2321_5 +# 2321| m2321_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2321_1 +# 2321| m2321_8(String) = Chi : total:m2321_2, partial:m2321_7 +# 2322| r2322_1(glval) = VariableAddress[s2] : +# 2322| r2322_2(glval) = FunctionAddress[~String] : +# 2322| v2322_3(void) = Call[~String] : func:r2322_2, this:r2322_1 +# 2322| m2322_4(unknown) = ^CallSideEffect : ~m2321_6 +# 2322| m2322_5(unknown) = Chi : total:m2321_6, partial:m2322_4 +# 2322| v2322_6(void) = ^IndirectReadSideEffect[-1] : &:r2322_1, m2321_8 +# 2322| m2322_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2322_1 +# 2322| m2322_8(String) = Chi : total:m2321_8, partial:m2322_7 #-----| Goto -> Block 3 -# 2275| Block 3 -# 2275| m2275_9(unknown) = Phi : from 1:~m2273_5, from 2:~m2275_5 -# 2275| r2275_10(glval) = VariableAddress[B] : -# 2275| r2275_11(glval) = FunctionAddress[~Bool] : -# 2275| v2275_12(void) = Call[~Bool] : func:r2275_11, this:r2275_10 -# 2275| m2275_13(unknown) = ^CallSideEffect : ~m2275_9 -# 2275| m2275_14(unknown) = Chi : total:m2275_9, partial:m2275_13 -# 2275| v2275_15(void) = ^IndirectReadSideEffect[-1] : &:r2275_10, m2271_18 -# 2275| m2275_16(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2275_10 -# 2275| m2275_17(Bool) = Chi : total:m2271_18, partial:m2275_16 -# 2276| v2276_1(void) = NoOp : -# 2270| v2270_7(void) = ReturnVoid : -# 2270| v2270_8(void) = AliasedUse : ~m2275_14 -# 2270| v2270_9(void) = ExitFunction : +# 2322| Block 3 +# 2322| m2322_9(unknown) = Phi : from 1:~m2320_5, from 2:~m2322_5 +# 2322| r2322_10(glval) = VariableAddress[B] : +# 2322| r2322_11(glval) = FunctionAddress[~Bool] : +# 2322| v2322_12(void) = Call[~Bool] : func:r2322_11, this:r2322_10 +# 2322| m2322_13(unknown) = ^CallSideEffect : ~m2322_9 +# 2322| m2322_14(unknown) = Chi : total:m2322_9, partial:m2322_13 +# 2322| v2322_15(void) = ^IndirectReadSideEffect[-1] : &:r2322_10, m2318_18 +# 2322| m2322_16(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2322_10 +# 2322| m2322_17(Bool) = Chi : total:m2318_18, partial:m2322_16 +# 2323| v2323_1(void) = NoOp : +# 2317| v2317_7(void) = ReturnVoid : +# 2317| v2317_8(void) = AliasedUse : ~m2322_14 +# 2317| v2317_9(void) = ExitFunction : -# 2278| void WhileLoopDestructors(bool) -# 2278| Block 0 -# 2278| v2278_1(void) = EnterFunction : -# 2278| m2278_2(unknown) = AliasedDefinition : -# 2278| m2278_3(unknown) = InitializeNonLocal : -# 2278| m2278_4(unknown) = Chi : total:m2278_2, partial:m2278_3 -# 2278| r2278_5(glval) = VariableAddress[b] : -# 2278| m2278_6(bool) = InitializeParameter[b] : &:r2278_5 -# 2280| r2280_1(glval) = VariableAddress[s] : -# 2280| m2280_2(String) = Uninitialized[s] : &:r2280_1 -# 2280| r2280_3(glval) = FunctionAddress[String] : -# 2280| v2280_4(void) = Call[String] : func:r2280_3, this:r2280_1 -# 2280| m2280_5(unknown) = ^CallSideEffect : ~m2278_4 -# 2280| m2280_6(unknown) = Chi : total:m2278_4, partial:m2280_5 -# 2280| m2280_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2280_1 -# 2280| m2280_8(String) = Chi : total:m2280_2, partial:m2280_7 +# 2325| void WhileLoopDestructors(bool) +# 2325| Block 0 +# 2325| v2325_1(void) = EnterFunction : +# 2325| m2325_2(unknown) = AliasedDefinition : +# 2325| m2325_3(unknown) = InitializeNonLocal : +# 2325| m2325_4(unknown) = Chi : total:m2325_2, partial:m2325_3 +# 2325| r2325_5(glval) = VariableAddress[b] : +# 2325| m2325_6(bool) = InitializeParameter[b] : &:r2325_5 +# 2327| r2327_1(glval) = VariableAddress[s] : +# 2327| m2327_2(String) = Uninitialized[s] : &:r2327_1 +# 2327| r2327_3(glval) = FunctionAddress[String] : +# 2327| v2327_4(void) = Call[String] : func:r2327_3, this:r2327_1 +# 2327| m2327_5(unknown) = ^CallSideEffect : ~m2325_4 +# 2327| m2327_6(unknown) = Chi : total:m2325_4, partial:m2327_5 +# 2327| m2327_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2327_1 +# 2327| m2327_8(String) = Chi : total:m2327_2, partial:m2327_7 #-----| Goto -> Block 1 -# 2281| Block 1 -# 2281| m2281_1(bool) = Phi : from 0:m2278_6, from 2:m2282_3 -# 2281| r2281_2(glval) = VariableAddress[b] : -# 2281| r2281_3(bool) = Load[b] : &:r2281_2, m2281_1 -# 2281| v2281_4(void) = ConditionalBranch : r2281_3 +# 2328| Block 1 +# 2328| m2328_1(bool) = Phi : from 0:m2325_6, from 2:m2329_3 +# 2328| r2328_2(glval) = VariableAddress[b] : +# 2328| r2328_3(bool) = Load[b] : &:r2328_2, m2328_1 +# 2328| v2328_4(void) = ConditionalBranch : r2328_3 #-----| False -> Block 3 #-----| True -> Block 2 -# 2282| Block 2 -# 2282| r2282_1(bool) = Constant[0] : -# 2282| r2282_2(glval) = VariableAddress[b] : -# 2282| m2282_3(bool) = Store[b] : &:r2282_2, r2282_1 +# 2329| Block 2 +# 2329| r2329_1(bool) = Constant[0] : +# 2329| r2329_2(glval) = VariableAddress[b] : +# 2329| m2329_3(bool) = Store[b] : &:r2329_2, r2329_1 #-----| Goto (back edge) -> Block 1 -# 2284| Block 3 -# 2284| r2284_1(glval) = VariableAddress[s] : -# 2284| r2284_2(glval) = FunctionAddress[~String] : -# 2284| v2284_3(void) = Call[~String] : func:r2284_2, this:r2284_1 -# 2284| m2284_4(unknown) = ^CallSideEffect : ~m2280_6 -# 2284| m2284_5(unknown) = Chi : total:m2280_6, partial:m2284_4 -# 2284| v2284_6(void) = ^IndirectReadSideEffect[-1] : &:r2284_1, m2280_8 -# 2284| m2284_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2284_1 -# 2284| m2284_8(String) = Chi : total:m2280_8, partial:m2284_7 +# 2331| Block 3 +# 2331| r2331_1(glval) = VariableAddress[s] : +# 2331| r2331_2(glval) = FunctionAddress[~String] : +# 2331| v2331_3(void) = Call[~String] : func:r2331_2, this:r2331_1 +# 2331| m2331_4(unknown) = ^CallSideEffect : ~m2327_6 +# 2331| m2331_5(unknown) = Chi : total:m2327_6, partial:m2331_4 +# 2331| v2331_6(void) = ^IndirectReadSideEffect[-1] : &:r2331_1, m2327_8 +# 2331| m2331_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2331_1 +# 2331| m2331_8(String) = Chi : total:m2327_8, partial:m2331_7 #-----| Goto -> Block 4 -# 2287| Block 4 -# 2287| m2287_1(unknown) = Phi : from 3:~m2284_5, from 5:~m2289_5 -# 2287| m2287_2(bool) = Phi : from 3:m2281_1, from 5:m2288_3 -# 2287| r2287_3(glval) = VariableAddress[B] : -# 2287| m2287_4(Bool) = Uninitialized[B] : &:r2287_3 -# 2287| r2287_5(glval) = FunctionAddress[Bool] : -# 2287| r2287_6(glval) = VariableAddress[b] : -# 2287| r2287_7(bool) = Load[b] : &:r2287_6, m2287_2 -# 2287| v2287_8(void) = Call[Bool] : func:r2287_5, this:r2287_3, 0:r2287_7 -# 2287| m2287_9(unknown) = ^CallSideEffect : ~m2287_1 -# 2287| m2287_10(unknown) = Chi : total:m2287_1, partial:m2287_9 -# 2287| m2287_11(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2287_3 -# 2287| m2287_12(Bool) = Chi : total:m2287_4, partial:m2287_11 -# 2287| r2287_13(glval) = VariableAddress[B] : -# 2287| r2287_14(glval) = FunctionAddress[operator bool] : -# 2287| r2287_15(bool) = Call[operator bool] : func:r2287_14, this:r2287_13 -# 2287| m2287_16(unknown) = ^CallSideEffect : ~m2287_10 -# 2287| m2287_17(unknown) = Chi : total:m2287_10, partial:m2287_16 -# 2287| v2287_18(void) = ^IndirectReadSideEffect[-1] : &:r2287_13, m2287_12 -# 2287| m2287_19(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2287_13 -# 2287| m2287_20(Bool) = Chi : total:m2287_12, partial:m2287_19 -# 2287| r2287_21(bool) = CopyValue : r2287_15 -# 2287| v2287_22(void) = ConditionalBranch : r2287_21 +# 2334| Block 4 +# 2334| m2334_1(unknown) = Phi : from 3:~m2331_5, from 5:~m2336_5 +# 2334| m2334_2(bool) = Phi : from 3:m2328_1, from 5:m2335_3 +# 2334| r2334_3(glval) = VariableAddress[B] : +# 2334| m2334_4(Bool) = Uninitialized[B] : &:r2334_3 +# 2334| r2334_5(glval) = FunctionAddress[Bool] : +# 2334| r2334_6(glval) = VariableAddress[b] : +# 2334| r2334_7(bool) = Load[b] : &:r2334_6, m2334_2 +# 2334| v2334_8(void) = Call[Bool] : func:r2334_5, this:r2334_3, 0:r2334_7 +# 2334| m2334_9(unknown) = ^CallSideEffect : ~m2334_1 +# 2334| m2334_10(unknown) = Chi : total:m2334_1, partial:m2334_9 +# 2334| m2334_11(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2334_3 +# 2334| m2334_12(Bool) = Chi : total:m2334_4, partial:m2334_11 +# 2334| r2334_13(glval) = VariableAddress[B] : +# 2334| r2334_14(glval) = FunctionAddress[operator bool] : +# 2334| r2334_15(bool) = Call[operator bool] : func:r2334_14, this:r2334_13 +# 2334| m2334_16(unknown) = ^CallSideEffect : ~m2334_10 +# 2334| m2334_17(unknown) = Chi : total:m2334_10, partial:m2334_16 +# 2334| v2334_18(void) = ^IndirectReadSideEffect[-1] : &:r2334_13, m2334_12 +# 2334| m2334_19(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2334_13 +# 2334| m2334_20(Bool) = Chi : total:m2334_12, partial:m2334_19 +# 2334| r2334_21(bool) = CopyValue : r2334_15 +# 2334| v2334_22(void) = ConditionalBranch : r2334_21 #-----| False -> Block 6 #-----| True -> Block 5 -# 2288| Block 5 -# 2288| r2288_1(bool) = Constant[0] : -# 2288| r2288_2(glval) = VariableAddress[b] : -# 2288| m2288_3(bool) = Store[b] : &:r2288_2, r2288_1 -# 2289| r2289_1(glval) = VariableAddress[B] : -# 2289| r2289_2(glval) = FunctionAddress[~Bool] : -# 2289| v2289_3(void) = Call[~Bool] : func:r2289_2, this:r2289_1 -# 2289| m2289_4(unknown) = ^CallSideEffect : ~m2287_17 -# 2289| m2289_5(unknown) = Chi : total:m2287_17, partial:m2289_4 -# 2289| v2289_6(void) = ^IndirectReadSideEffect[-1] : &:r2289_1, m2287_20 -# 2289| m2289_7(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2289_1 -# 2289| m2289_8(Bool) = Chi : total:m2287_20, partial:m2289_7 +# 2335| Block 5 +# 2335| r2335_1(bool) = Constant[0] : +# 2335| r2335_2(glval) = VariableAddress[b] : +# 2335| m2335_3(bool) = Store[b] : &:r2335_2, r2335_1 +# 2336| r2336_1(glval) = VariableAddress[B] : +# 2336| r2336_2(glval) = FunctionAddress[~Bool] : +# 2336| v2336_3(void) = Call[~Bool] : func:r2336_2, this:r2336_1 +# 2336| m2336_4(unknown) = ^CallSideEffect : ~m2334_17 +# 2336| m2336_5(unknown) = Chi : total:m2334_17, partial:m2336_4 +# 2336| v2336_6(void) = ^IndirectReadSideEffect[-1] : &:r2336_1, m2334_20 +# 2336| m2336_7(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2336_1 +# 2336| m2336_8(Bool) = Chi : total:m2334_20, partial:m2336_7 #-----| Goto (back edge) -> Block 4 -# 2289| Block 6 -# 2289| r2289_9(glval) = VariableAddress[B] : -# 2289| r2289_10(glval) = FunctionAddress[~Bool] : -# 2289| v2289_11(void) = Call[~Bool] : func:r2289_10, this:r2289_9 -# 2289| m2289_12(unknown) = ^CallSideEffect : ~m2287_17 -# 2289| m2289_13(unknown) = Chi : total:m2287_17, partial:m2289_12 -# 2289| v2289_14(void) = ^IndirectReadSideEffect[-1] : &:r2289_9, m2287_20 -# 2289| m2289_15(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2289_9 -# 2289| m2289_16(Bool) = Chi : total:m2287_20, partial:m2289_15 -# 2291| v2291_1(void) = NoOp : -# 2278| v2278_7(void) = ReturnVoid : -# 2278| v2278_8(void) = AliasedUse : ~m2289_13 -# 2278| v2278_9(void) = ExitFunction : +# 2336| Block 6 +# 2336| r2336_9(glval) = VariableAddress[B] : +# 2336| r2336_10(glval) = FunctionAddress[~Bool] : +# 2336| v2336_11(void) = Call[~Bool] : func:r2336_10, this:r2336_9 +# 2336| m2336_12(unknown) = ^CallSideEffect : ~m2334_17 +# 2336| m2336_13(unknown) = Chi : total:m2334_17, partial:m2336_12 +# 2336| v2336_14(void) = ^IndirectReadSideEffect[-1] : &:r2336_9, m2334_20 +# 2336| m2336_15(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2336_9 +# 2336| m2336_16(Bool) = Chi : total:m2334_20, partial:m2336_15 +# 2338| v2338_1(void) = NoOp : +# 2325| v2325_7(void) = ReturnVoid : +# 2325| v2325_8(void) = AliasedUse : ~m2336_13 +# 2325| v2325_9(void) = ExitFunction : -# 2293| void VoidFunc() -# 2293| Block 0 -# 2293| v2293_1(void) = EnterFunction : -# 2293| m2293_2(unknown) = AliasedDefinition : -# 2293| m2293_3(unknown) = InitializeNonLocal : -# 2293| m2293_4(unknown) = Chi : total:m2293_2, partial:m2293_3 -# 2293| v2293_5(void) = NoOp : -# 2293| v2293_6(void) = ReturnVoid : -# 2293| v2293_7(void) = AliasedUse : m2293_3 -# 2293| v2293_8(void) = ExitFunction : +# 2340| void VoidFunc() +# 2340| Block 0 +# 2340| v2340_1(void) = EnterFunction : +# 2340| m2340_2(unknown) = AliasedDefinition : +# 2340| m2340_3(unknown) = InitializeNonLocal : +# 2340| m2340_4(unknown) = Chi : total:m2340_2, partial:m2340_3 +# 2340| v2340_5(void) = NoOp : +# 2340| v2340_6(void) = ReturnVoid : +# 2340| v2340_7(void) = AliasedUse : m2340_3 +# 2340| v2340_8(void) = ExitFunction : -# 2295| void IfReturnDestructors(bool) -# 2295| Block 0 -# 2295| v2295_1(void) = EnterFunction : -# 2295| m2295_2(unknown) = AliasedDefinition : -# 2295| m2295_3(unknown) = InitializeNonLocal : -# 2295| m2295_4(unknown) = Chi : total:m2295_2, partial:m2295_3 -# 2295| r2295_5(glval) = VariableAddress[b] : -# 2295| m2295_6(bool) = InitializeParameter[b] : &:r2295_5 -# 2296| r2296_1(glval) = VariableAddress[s] : -# 2296| m2296_2(String) = Uninitialized[s] : &:r2296_1 -# 2296| r2296_3(glval) = FunctionAddress[String] : -# 2296| v2296_4(void) = Call[String] : func:r2296_3, this:r2296_1 -# 2296| m2296_5(unknown) = ^CallSideEffect : ~m2295_4 -# 2296| m2296_6(unknown) = Chi : total:m2295_4, partial:m2296_5 -# 2296| m2296_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2296_1 -# 2296| m2296_8(String) = Chi : total:m2296_2, partial:m2296_7 -# 2297| r2297_1(glval) = VariableAddress[b] : -# 2297| r2297_2(bool) = Load[b] : &:r2297_1, m2295_6 -# 2297| v2297_3(void) = ConditionalBranch : r2297_2 +# 2342| void IfReturnDestructors(bool) +# 2342| Block 0 +# 2342| v2342_1(void) = EnterFunction : +# 2342| m2342_2(unknown) = AliasedDefinition : +# 2342| m2342_3(unknown) = InitializeNonLocal : +# 2342| m2342_4(unknown) = Chi : total:m2342_2, partial:m2342_3 +# 2342| r2342_5(glval) = VariableAddress[b] : +# 2342| m2342_6(bool) = InitializeParameter[b] : &:r2342_5 +# 2343| r2343_1(glval) = VariableAddress[s] : +# 2343| m2343_2(String) = Uninitialized[s] : &:r2343_1 +# 2343| r2343_3(glval) = FunctionAddress[String] : +# 2343| v2343_4(void) = Call[String] : func:r2343_3, this:r2343_1 +# 2343| m2343_5(unknown) = ^CallSideEffect : ~m2342_4 +# 2343| m2343_6(unknown) = Chi : total:m2342_4, partial:m2343_5 +# 2343| m2343_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2343_1 +# 2343| m2343_8(String) = Chi : total:m2343_2, partial:m2343_7 +# 2344| r2344_1(glval) = VariableAddress[b] : +# 2344| r2344_2(bool) = Load[b] : &:r2344_1, m2342_6 +# 2344| v2344_3(void) = ConditionalBranch : r2344_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 2295| Block 1 -# 2295| m2295_7(unknown) = Phi : from 2:~m2304_5, from 4:~m2304_13, from 5:~m2304_22 -# 2295| v2295_8(void) = ReturnVoid : -# 2295| v2295_9(void) = AliasedUse : ~m2295_7 -# 2295| v2295_10(void) = ExitFunction : +# 2342| Block 1 +# 2342| m2342_7(unknown) = Phi : from 2:~m2351_5, from 4:~m2351_13, from 5:~m2351_22 +# 2342| v2342_8(void) = ReturnVoid : +# 2342| v2342_9(void) = AliasedUse : ~m2342_7 +# 2342| v2342_10(void) = ExitFunction : -# 2298| Block 2 -# 2298| v2298_1(void) = NoOp : -# 2304| r2304_1(glval) = VariableAddress[s] : -# 2304| r2304_2(glval) = FunctionAddress[~String] : -# 2304| v2304_3(void) = Call[~String] : func:r2304_2, this:r2304_1 -# 2304| m2304_4(unknown) = ^CallSideEffect : ~m2296_6 -# 2304| m2304_5(unknown) = Chi : total:m2296_6, partial:m2304_4 -# 2304| v2304_6(void) = ^IndirectReadSideEffect[-1] : &:r2304_1, m2296_8 -# 2304| m2304_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2304_1 -# 2304| m2304_8(String) = Chi : total:m2296_8, partial:m2304_7 +# 2345| Block 2 +# 2345| v2345_1(void) = NoOp : +# 2351| r2351_1(glval) = VariableAddress[s] : +# 2351| r2351_2(glval) = FunctionAddress[~String] : +# 2351| v2351_3(void) = Call[~String] : func:r2351_2, this:r2351_1 +# 2351| m2351_4(unknown) = ^CallSideEffect : ~m2343_6 +# 2351| m2351_5(unknown) = Chi : total:m2343_6, partial:m2351_4 +# 2351| v2351_6(void) = ^IndirectReadSideEffect[-1] : &:r2351_1, m2343_8 +# 2351| m2351_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2351_1 +# 2351| m2351_8(String) = Chi : total:m2343_8, partial:m2351_7 #-----| Goto -> Block 1 -# 2300| Block 3 -# 2300| r2300_1(glval) = VariableAddress[b] : -# 2300| r2300_2(bool) = Load[b] : &:r2300_1, m2295_6 -# 2300| v2300_3(void) = ConditionalBranch : r2300_2 +# 2347| Block 3 +# 2347| r2347_1(glval) = VariableAddress[b] : +# 2347| r2347_2(bool) = Load[b] : &:r2347_1, m2342_6 +# 2347| v2347_3(void) = ConditionalBranch : r2347_2 #-----| False -> Block 5 #-----| True -> Block 4 -# 2301| Block 4 -# 2301| r2301_1(glval) = FunctionAddress[VoidFunc] : -# 2301| v2301_2(void) = Call[VoidFunc] : func:r2301_1 -# 2301| m2301_3(unknown) = ^CallSideEffect : ~m2296_6 -# 2301| m2301_4(unknown) = Chi : total:m2296_6, partial:m2301_3 -# 2301| v2301_5(void) = NoOp : -# 2304| r2304_9(glval) = VariableAddress[s] : -# 2304| r2304_10(glval) = FunctionAddress[~String] : -# 2304| v2304_11(void) = Call[~String] : func:r2304_10, this:r2304_9 -# 2304| m2304_12(unknown) = ^CallSideEffect : ~m2301_4 -# 2304| m2304_13(unknown) = Chi : total:m2301_4, partial:m2304_12 -# 2304| v2304_14(void) = ^IndirectReadSideEffect[-1] : &:r2304_9, m2296_8 -# 2304| m2304_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2304_9 -# 2304| m2304_16(String) = Chi : total:m2296_8, partial:m2304_15 +# 2348| Block 4 +# 2348| r2348_1(glval) = FunctionAddress[VoidFunc] : +# 2348| v2348_2(void) = Call[VoidFunc] : func:r2348_1 +# 2348| m2348_3(unknown) = ^CallSideEffect : ~m2343_6 +# 2348| m2348_4(unknown) = Chi : total:m2343_6, partial:m2348_3 +# 2348| v2348_5(void) = NoOp : +# 2351| r2351_9(glval) = VariableAddress[s] : +# 2351| r2351_10(glval) = FunctionAddress[~String] : +# 2351| v2351_11(void) = Call[~String] : func:r2351_10, this:r2351_9 +# 2351| m2351_12(unknown) = ^CallSideEffect : ~m2348_4 +# 2351| m2351_13(unknown) = Chi : total:m2348_4, partial:m2351_12 +# 2351| v2351_14(void) = ^IndirectReadSideEffect[-1] : &:r2351_9, m2343_8 +# 2351| m2351_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2351_9 +# 2351| m2351_16(String) = Chi : total:m2343_8, partial:m2351_15 #-----| Goto -> Block 1 -# 2303| Block 5 -# 2303| r2303_1(glval) = VariableAddress[s] : -# 2304| v2304_17(void) = NoOp : -# 2304| r2304_18(glval) = VariableAddress[s] : -# 2304| r2304_19(glval) = FunctionAddress[~String] : -# 2304| v2304_20(void) = Call[~String] : func:r2304_19, this:r2304_18 -# 2304| m2304_21(unknown) = ^CallSideEffect : ~m2296_6 -# 2304| m2304_22(unknown) = Chi : total:m2296_6, partial:m2304_21 -# 2304| v2304_23(void) = ^IndirectReadSideEffect[-1] : &:r2304_18, m2296_8 -# 2304| m2304_24(String) = ^IndirectMayWriteSideEffect[-1] : &:r2304_18 -# 2304| m2304_25(String) = Chi : total:m2296_8, partial:m2304_24 +# 2350| Block 5 +# 2350| r2350_1(glval) = VariableAddress[s] : +# 2351| v2351_17(void) = NoOp : +# 2351| r2351_18(glval) = VariableAddress[s] : +# 2351| r2351_19(glval) = FunctionAddress[~String] : +# 2351| v2351_20(void) = Call[~String] : func:r2351_19, this:r2351_18 +# 2351| m2351_21(unknown) = ^CallSideEffect : ~m2343_6 +# 2351| m2351_22(unknown) = Chi : total:m2343_6, partial:m2351_21 +# 2351| v2351_23(void) = ^IndirectReadSideEffect[-1] : &:r2351_18, m2343_8 +# 2351| m2351_24(String) = ^IndirectMayWriteSideEffect[-1] : &:r2351_18 +# 2351| m2351_25(String) = Chi : total:m2343_8, partial:m2351_24 #-----| Goto -> Block 1 -# 2306| int IfReturnDestructors3(bool) -# 2306| Block 0 -# 2306| v2306_1(void) = EnterFunction : -# 2306| m2306_2(unknown) = AliasedDefinition : -# 2306| m2306_3(unknown) = InitializeNonLocal : -# 2306| m2306_4(unknown) = Chi : total:m2306_2, partial:m2306_3 -# 2306| r2306_5(glval) = VariableAddress[b] : -# 2306| m2306_6(bool) = InitializeParameter[b] : &:r2306_5 -# 2307| r2307_1(glval) = VariableAddress[s] : -# 2307| m2307_2(String) = Uninitialized[s] : &:r2307_1 -# 2307| r2307_3(glval) = FunctionAddress[String] : -# 2307| v2307_4(void) = Call[String] : func:r2307_3, this:r2307_1 -# 2307| m2307_5(unknown) = ^CallSideEffect : ~m2306_4 -# 2307| m2307_6(unknown) = Chi : total:m2306_4, partial:m2307_5 -# 2307| m2307_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_1 -# 2307| m2307_8(String) = Chi : total:m2307_2, partial:m2307_7 -# 2308| r2308_1(glval) = VariableAddress[b] : -# 2308| r2308_2(bool) = Load[b] : &:r2308_1, m2306_6 -# 2308| v2308_3(void) = ConditionalBranch : r2308_2 +# 2353| int IfReturnDestructors3(bool) +# 2353| Block 0 +# 2353| v2353_1(void) = EnterFunction : +# 2353| m2353_2(unknown) = AliasedDefinition : +# 2353| m2353_3(unknown) = InitializeNonLocal : +# 2353| m2353_4(unknown) = Chi : total:m2353_2, partial:m2353_3 +# 2353| r2353_5(glval) = VariableAddress[b] : +# 2353| m2353_6(bool) = InitializeParameter[b] : &:r2353_5 +# 2354| r2354_1(glval) = VariableAddress[s] : +# 2354| m2354_2(String) = Uninitialized[s] : &:r2354_1 +# 2354| r2354_3(glval) = FunctionAddress[String] : +# 2354| v2354_4(void) = Call[String] : func:r2354_3, this:r2354_1 +# 2354| m2354_5(unknown) = ^CallSideEffect : ~m2353_4 +# 2354| m2354_6(unknown) = Chi : total:m2353_4, partial:m2354_5 +# 2354| m2354_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2354_1 +# 2354| m2354_8(String) = Chi : total:m2354_2, partial:m2354_7 +# 2355| r2355_1(glval) = VariableAddress[b] : +# 2355| r2355_2(bool) = Load[b] : &:r2355_1, m2353_6 +# 2355| v2355_3(void) = ConditionalBranch : r2355_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 2306| Block 1 -# 2306| m2306_7(unknown) = Phi : from 2:~m2312_5, from 3:~m2312_13 -# 2306| m2306_8(int) = Phi : from 2:m2309_3, from 3:m2311_3 -# 2306| r2306_9(glval) = VariableAddress[#return] : -# 2306| v2306_10(void) = ReturnValue : &:r2306_9, m2306_8 -# 2306| v2306_11(void) = AliasedUse : ~m2306_7 -# 2306| v2306_12(void) = ExitFunction : +# 2353| Block 1 +# 2353| m2353_7(unknown) = Phi : from 2:~m2359_5, from 3:~m2359_13 +# 2353| m2353_8(int) = Phi : from 2:m2356_3, from 3:m2358_3 +# 2353| r2353_9(glval) = VariableAddress[#return] : +# 2353| v2353_10(void) = ReturnValue : &:r2353_9, m2353_8 +# 2353| v2353_11(void) = AliasedUse : ~m2353_7 +# 2353| v2353_12(void) = ExitFunction : -# 2309| Block 2 -# 2309| r2309_1(glval) = VariableAddress[#return] : -# 2309| r2309_2(int) = Constant[1] : -# 2309| m2309_3(int) = Store[#return] : &:r2309_1, r2309_2 -# 2312| r2312_1(glval) = VariableAddress[s] : -# 2312| r2312_2(glval) = FunctionAddress[~String] : -# 2312| v2312_3(void) = Call[~String] : func:r2312_2, this:r2312_1 -# 2312| m2312_4(unknown) = ^CallSideEffect : ~m2307_6 -# 2312| m2312_5(unknown) = Chi : total:m2307_6, partial:m2312_4 -# 2312| v2312_6(void) = ^IndirectReadSideEffect[-1] : &:r2312_1, m2307_8 -# 2312| m2312_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2312_1 -# 2312| m2312_8(String) = Chi : total:m2307_8, partial:m2312_7 +# 2356| Block 2 +# 2356| r2356_1(glval) = VariableAddress[#return] : +# 2356| r2356_2(int) = Constant[1] : +# 2356| m2356_3(int) = Store[#return] : &:r2356_1, r2356_2 +# 2359| r2359_1(glval) = VariableAddress[s] : +# 2359| r2359_2(glval) = FunctionAddress[~String] : +# 2359| v2359_3(void) = Call[~String] : func:r2359_2, this:r2359_1 +# 2359| m2359_4(unknown) = ^CallSideEffect : ~m2354_6 +# 2359| m2359_5(unknown) = Chi : total:m2354_6, partial:m2359_4 +# 2359| v2359_6(void) = ^IndirectReadSideEffect[-1] : &:r2359_1, m2354_8 +# 2359| m2359_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2359_1 +# 2359| m2359_8(String) = Chi : total:m2354_8, partial:m2359_7 #-----| Goto -> Block 1 -# 2311| Block 3 -# 2311| r2311_1(glval) = VariableAddress[#return] : -# 2311| r2311_2(int) = Constant[0] : -# 2311| m2311_3(int) = Store[#return] : &:r2311_1, r2311_2 -# 2312| r2312_9(glval) = VariableAddress[s] : -# 2312| r2312_10(glval) = FunctionAddress[~String] : -# 2312| v2312_11(void) = Call[~String] : func:r2312_10, this:r2312_9 -# 2312| m2312_12(unknown) = ^CallSideEffect : ~m2307_6 -# 2312| m2312_13(unknown) = Chi : total:m2307_6, partial:m2312_12 -# 2312| v2312_14(void) = ^IndirectReadSideEffect[-1] : &:r2312_9, m2307_8 -# 2312| m2312_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2312_9 -# 2312| m2312_16(String) = Chi : total:m2307_8, partial:m2312_15 +# 2358| Block 3 +# 2358| r2358_1(glval) = VariableAddress[#return] : +# 2358| r2358_2(int) = Constant[0] : +# 2358| m2358_3(int) = Store[#return] : &:r2358_1, r2358_2 +# 2359| r2359_9(glval) = VariableAddress[s] : +# 2359| r2359_10(glval) = FunctionAddress[~String] : +# 2359| v2359_11(void) = Call[~String] : func:r2359_10, this:r2359_9 +# 2359| m2359_12(unknown) = ^CallSideEffect : ~m2354_6 +# 2359| m2359_13(unknown) = Chi : total:m2354_6, partial:m2359_12 +# 2359| v2359_14(void) = ^IndirectReadSideEffect[-1] : &:r2359_9, m2354_8 +# 2359| m2359_15(String) = ^IndirectMayWriteSideEffect[-1] : &:r2359_9 +# 2359| m2359_16(String) = Chi : total:m2354_8, partial:m2359_15 #-----| Goto -> Block 1 -# 2314| void VoidReturnDestructors() -# 2314| Block 0 -# 2314| v2314_1(void) = EnterFunction : -# 2314| m2314_2(unknown) = AliasedDefinition : -# 2314| m2314_3(unknown) = InitializeNonLocal : -# 2314| m2314_4(unknown) = Chi : total:m2314_2, partial:m2314_3 -# 2315| r2315_1(glval) = VariableAddress[s] : -# 2315| m2315_2(String) = Uninitialized[s] : &:r2315_1 -# 2315| r2315_3(glval) = FunctionAddress[String] : -# 2315| v2315_4(void) = Call[String] : func:r2315_3, this:r2315_1 -# 2315| m2315_5(unknown) = ^CallSideEffect : ~m2314_4 -# 2315| m2315_6(unknown) = Chi : total:m2314_4, partial:m2315_5 -# 2315| m2315_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2315_1 -# 2315| m2315_8(String) = Chi : total:m2315_2, partial:m2315_7 -# 2316| r2316_1(glval) = FunctionAddress[VoidFunc] : -# 2316| v2316_2(void) = Call[VoidFunc] : func:r2316_1 -# 2316| m2316_3(unknown) = ^CallSideEffect : ~m2315_6 -# 2316| m2316_4(unknown) = Chi : total:m2315_6, partial:m2316_3 -# 2316| v2316_5(void) = NoOp : -# 2317| r2317_1(glval) = VariableAddress[s] : -# 2317| r2317_2(glval) = FunctionAddress[~String] : -# 2317| v2317_3(void) = Call[~String] : func:r2317_2, this:r2317_1 -# 2317| m2317_4(unknown) = ^CallSideEffect : ~m2316_4 -# 2317| m2317_5(unknown) = Chi : total:m2316_4, partial:m2317_4 -# 2317| v2317_6(void) = ^IndirectReadSideEffect[-1] : &:r2317_1, m2315_8 -# 2317| m2317_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2317_1 -# 2317| m2317_8(String) = Chi : total:m2315_8, partial:m2317_7 -# 2314| v2314_5(void) = ReturnVoid : -# 2314| v2314_6(void) = AliasedUse : ~m2317_5 -# 2314| v2314_7(void) = ExitFunction : +# 2361| void VoidReturnDestructors() +# 2361| Block 0 +# 2361| v2361_1(void) = EnterFunction : +# 2361| m2361_2(unknown) = AliasedDefinition : +# 2361| m2361_3(unknown) = InitializeNonLocal : +# 2361| m2361_4(unknown) = Chi : total:m2361_2, partial:m2361_3 +# 2362| r2362_1(glval) = VariableAddress[s] : +# 2362| m2362_2(String) = Uninitialized[s] : &:r2362_1 +# 2362| r2362_3(glval) = FunctionAddress[String] : +# 2362| v2362_4(void) = Call[String] : func:r2362_3, this:r2362_1 +# 2362| m2362_5(unknown) = ^CallSideEffect : ~m2361_4 +# 2362| m2362_6(unknown) = Chi : total:m2361_4, partial:m2362_5 +# 2362| m2362_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2362_1 +# 2362| m2362_8(String) = Chi : total:m2362_2, partial:m2362_7 +# 2363| r2363_1(glval) = FunctionAddress[VoidFunc] : +# 2363| v2363_2(void) = Call[VoidFunc] : func:r2363_1 +# 2363| m2363_3(unknown) = ^CallSideEffect : ~m2362_6 +# 2363| m2363_4(unknown) = Chi : total:m2362_6, partial:m2363_3 +# 2363| v2363_5(void) = NoOp : +# 2364| r2364_1(glval) = VariableAddress[s] : +# 2364| r2364_2(glval) = FunctionAddress[~String] : +# 2364| v2364_3(void) = Call[~String] : func:r2364_2, this:r2364_1 +# 2364| m2364_4(unknown) = ^CallSideEffect : ~m2363_4 +# 2364| m2364_5(unknown) = Chi : total:m2363_4, partial:m2364_4 +# 2364| v2364_6(void) = ^IndirectReadSideEffect[-1] : &:r2364_1, m2362_8 +# 2364| m2364_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2364_1 +# 2364| m2364_8(String) = Chi : total:m2362_8, partial:m2364_7 +# 2361| v2361_5(void) = ReturnVoid : +# 2361| v2361_6(void) = AliasedUse : ~m2364_5 +# 2361| v2361_7(void) = ExitFunction : -# 2327| return_routine_type::VoidToIntMemberFunc return_routine_type::GetVoidToIntFunc() -# 2327| Block 0 -# 2327| v2327_1(void) = EnterFunction : -# 2327| m2327_2(unknown) = AliasedDefinition : -# 2327| m2327_3(unknown) = InitializeNonLocal : -# 2327| m2327_4(unknown) = Chi : total:m2327_2, partial:m2327_3 -# 2329| r2329_1(glval<..:: *>) = VariableAddress[#return] : -# 2329| r2329_2(..()(..)) = FunctionAddress[VoidToInt] : -# 2329| m2329_3(..:: *) = Store[#return] : &:r2329_1, r2329_2 -# 2327| r2327_5(glval<..:: *>) = VariableAddress[#return] : -# 2327| v2327_6(void) = ReturnValue : &:r2327_5, m2329_3 -# 2327| v2327_7(void) = AliasedUse : m2327_3 -# 2327| v2327_8(void) = ExitFunction : +# 2374| return_routine_type::VoidToIntMemberFunc return_routine_type::GetVoidToIntFunc() +# 2374| Block 0 +# 2374| v2374_1(void) = EnterFunction : +# 2374| m2374_2(unknown) = AliasedDefinition : +# 2374| m2374_3(unknown) = InitializeNonLocal : +# 2374| m2374_4(unknown) = Chi : total:m2374_2, partial:m2374_3 +# 2376| r2376_1(glval<..:: *>) = VariableAddress[#return] : +# 2376| r2376_2(..()(..)) = FunctionAddress[VoidToInt] : +# 2376| m2376_3(..:: *) = Store[#return] : &:r2376_1, r2376_2 +# 2374| r2374_5(glval<..:: *>) = VariableAddress[#return] : +# 2374| v2374_6(void) = ReturnValue : &:r2374_5, m2376_3 +# 2374| v2374_7(void) = AliasedUse : m2374_3 +# 2374| v2374_8(void) = ExitFunction : perf-regression.cpp: # 6| void Big::Big() diff --git a/cpp/ql/test/library-tests/ir/ir/destructors_for_temps.cpp b/cpp/ql/test/library-tests/ir/ir/destructors_for_temps.cpp new file mode 100644 index 00000000000..572c81ac111 --- /dev/null +++ b/cpp/ql/test/library-tests/ir/ir/destructors_for_temps.cpp @@ -0,0 +1,56 @@ +class ClassWithDestructor2 { +public: + ClassWithDestructor2(); + ~ClassWithDestructor2(); + + char get_x(); +}; + +class ClassWithConstructor { +public: + ClassWithConstructor(char x, char y); +}; + +char temp_test() { + char x = ClassWithDestructor2().get_x(); + ClassWithConstructor y('a', ClassWithDestructor2().get_x()); + return ClassWithDestructor2().get_x(); +} + + +char temp_test2() { + new ClassWithDestructor2(); + return ClassWithDestructor2().get_x() + ClassWithDestructor2().get_x(); +} + +template +T returnValue(); + +void temp_test3() { + const ClassWithDestructor2& rs = returnValue(); +} + +void temp_test4() { + ClassWithDestructor2 c; + const ClassWithDestructor2& rs2 = returnValue(); +} + +void temp_test5(bool b) { + b ? ClassWithDestructor2() : ClassWithDestructor2(); +} + +void temp_test6(bool b) { + ClassWithDestructor2 c; + if (b) { + throw ClassWithConstructor('x', ClassWithDestructor2().get_x()); + } +} + +void temp_test7(bool b) { + ClassWithDestructor2 c; + b ? throw ClassWithConstructor('x', ClassWithDestructor2().get_x()) : ClassWithDestructor2(); +} + +void temp_test8(bool b) { + b ? throw ClassWithConstructor('x', ClassWithDestructor2().get_x()) : ClassWithDestructor2(); +} diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index b63449d96f0..492f8c71c11 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -1055,28 +1055,75 @@ void Lambda(int x, const String& s) { lambda_inits(6); } -template -struct vector { - struct iterator { - T* p; - iterator& operator++(); - T& operator*() const; +namespace std { + template + struct remove_const { typedef T type; }; - bool operator!=(iterator right) const; + template + struct remove_const { typedef T type; }; + + // `remove_const_t` removes any `const` specifier from `T` + template + using remove_const_t = typename remove_const::type; + + struct ptrdiff_t; + + template struct iterator_traits; + + template + struct iterator { + typedef Category iterator_category; + + iterator(); + iterator(iterator > const &other); // non-const -> const conversion constructor + + iterator &operator++(); + iterator operator++(int); + iterator &operator--(); + iterator operator--(int); + bool operator==(iterator other) const; + bool operator!=(iterator other) const; + reference_type operator*() const; + pointer_type operator->() const; + iterator operator+(int); + iterator operator-(int); + iterator &operator+=(int); + iterator &operator-=(int); + int operator-(iterator); + reference_type operator[](int); }; - vector(T); - ~vector(); - iterator begin() const; - iterator end() const; -}; + struct input_iterator_tag {}; + struct forward_iterator_tag : public input_iterator_tag {}; + struct bidirectional_iterator_tag : public forward_iterator_tag {}; + struct random_access_iterator_tag : public bidirectional_iterator_tag {}; -template -bool operator==(typename vector::iterator left, typename vector::iterator right); -template -bool operator!=(typename vector::iterator left, typename vector::iterator right); + struct output_iterator_tag {}; -void RangeBasedFor(const vector& v) { + template + struct vector { + vector(T); + ~vector(); + + using iterator = std::iterator; + using const_iterator = std::iterator; + + iterator begin() const; + iterator end() const; + }; + + template + bool operator==(typename vector::iterator left, typename vector::iterator right); + template + bool operator!=(typename vector::iterator left, typename vector::iterator right); + +} + +void RangeBasedFor(const std::vector& v) { for (int e : v) { if (e > 0) { continue; @@ -2151,21 +2198,21 @@ void initialization_with_destructor(bool b, char c) { } ClassWithDestructor x; - for(vector ys(x); ClassWithDestructor y : ys) + for(std::vector ys(x); ClassWithDestructor y : ys) y.set_x('a'); - for(vector ys(x); ClassWithDestructor y : ys) { + for(std::vector ys(x); ClassWithDestructor y : ys) { y.set_x('a'); if (y.get_x() == 'b') return; } - for(vector ys(1); int y : ys) { + for(std::vector ys(1); int y : ys) { if (y == 1) return; } - for(vector ys(x); ClassWithDestructor y : ys) { + for(std::vector ys(x); ClassWithDestructor y : ys) { ClassWithDestructor z1; ClassWithDestructor z2; } @@ -2243,7 +2290,7 @@ void ForDestructors() { String s2; } - for(String s : vector(String("hello"))) { + for(String s : std::vector(String("hello"))) { String s2; } diff --git a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected index 6d9a76dc068..ad4cfdb1e7c 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -652,6 +652,440 @@ | complex.c:144:8:144:10 | Load | m133_5 | | complex.c:144:8:144:10 | StoreValue | r144_3 | | complex.c:144:8:144:10 | Unary | r144_2 | +| destructors_for_temps.cpp:9:7:9:7 | Address | &:r9_5 | +| destructors_for_temps.cpp:9:7:9:7 | Address | &:r9_5 | +| destructors_for_temps.cpp:9:7:9:7 | Address | &:r9_7 | +| destructors_for_temps.cpp:9:7:9:7 | Address | &:r9_7 | +| destructors_for_temps.cpp:9:7:9:7 | ChiPartial | partial:m9_3 | +| destructors_for_temps.cpp:9:7:9:7 | ChiTotal | total:m9_2 | +| destructors_for_temps.cpp:9:7:9:7 | Load | m9_6 | +| destructors_for_temps.cpp:9:7:9:7 | SideEffect | m9_3 | +| destructors_for_temps.cpp:9:7:9:7 | SideEffect | m9_8 | +| destructors_for_temps.cpp:14:6:14:14 | Address | &:r14_5 | +| destructors_for_temps.cpp:14:6:14:14 | ChiPartial | partial:m14_3 | +| destructors_for_temps.cpp:14:6:14:14 | ChiTotal | total:m14_2 | +| destructors_for_temps.cpp:14:6:14:14 | Load | m17_17 | +| destructors_for_temps.cpp:14:6:14:14 | SideEffect | ~m17_13 | +| destructors_for_temps.cpp:15:10:15:10 | Address | &:r15_1 | +| destructors_for_temps.cpp:15:14:15:35 | Address | &:r15_2 | +| destructors_for_temps.cpp:15:14:15:35 | Address | &:r15_2 | +| destructors_for_temps.cpp:15:14:15:35 | Address | &:r15_2 | +| destructors_for_temps.cpp:15:14:15:35 | Address | &:r15_2 | +| destructors_for_temps.cpp:15:14:15:35 | Arg(this) | this:r15_2 | +| destructors_for_temps.cpp:15:14:15:35 | Arg(this) | this:r15_2 | +| destructors_for_temps.cpp:15:14:15:35 | CallTarget | func:r15_4 | +| destructors_for_temps.cpp:15:14:15:35 | ChiPartial | partial:m15_6 | +| destructors_for_temps.cpp:15:14:15:35 | ChiPartial | partial:m15_8 | +| destructors_for_temps.cpp:15:14:15:35 | ChiPartial | partial:m15_15 | +| destructors_for_temps.cpp:15:14:15:35 | ChiTotal | total:m14_4 | +| destructors_for_temps.cpp:15:14:15:35 | ChiTotal | total:m15_3 | +| destructors_for_temps.cpp:15:14:15:35 | ChiTotal | total:m15_9 | +| destructors_for_temps.cpp:15:14:15:35 | SideEffect | m15_9 | +| destructors_for_temps.cpp:15:14:15:35 | SideEffect | ~m14_4 | +| destructors_for_temps.cpp:15:37:15:41 | CallTarget | func:r15_10 | +| destructors_for_temps.cpp:15:37:15:41 | ChiPartial | partial:m15_12 | +| destructors_for_temps.cpp:15:37:15:41 | ChiTotal | total:m15_7 | +| destructors_for_temps.cpp:15:37:15:41 | SideEffect | ~m15_7 | +| destructors_for_temps.cpp:15:37:15:41 | StoreValue | r15_11 | +| destructors_for_temps.cpp:16:26:16:26 | Address | &:r16_1 | +| destructors_for_temps.cpp:16:26:16:26 | Address | &:r16_1 | +| destructors_for_temps.cpp:16:26:16:26 | Arg(this) | this:r16_1 | +| destructors_for_temps.cpp:16:28:16:30 | Arg(0) | 0:r16_4 | +| destructors_for_temps.cpp:16:28:16:63 | CallTarget | func:r16_3 | +| destructors_for_temps.cpp:16:28:16:63 | ChiPartial | partial:m16_21 | +| destructors_for_temps.cpp:16:28:16:63 | ChiPartial | partial:m16_23 | +| destructors_for_temps.cpp:16:28:16:63 | ChiTotal | total:m16_2 | +| destructors_for_temps.cpp:16:28:16:63 | ChiTotal | total:m16_16 | +| destructors_for_temps.cpp:16:28:16:63 | SideEffect | ~m16_16 | +| destructors_for_temps.cpp:16:33:16:54 | Address | &:r16_5 | +| destructors_for_temps.cpp:16:33:16:54 | Address | &:r16_5 | +| destructors_for_temps.cpp:16:33:16:54 | Address | &:r16_5 | +| destructors_for_temps.cpp:16:33:16:54 | Address | &:r16_5 | +| destructors_for_temps.cpp:16:33:16:54 | Arg(this) | this:r16_5 | +| destructors_for_temps.cpp:16:33:16:54 | Arg(this) | this:r16_5 | +| destructors_for_temps.cpp:16:33:16:54 | CallTarget | func:r16_7 | +| destructors_for_temps.cpp:16:33:16:54 | ChiPartial | partial:m16_9 | +| destructors_for_temps.cpp:16:33:16:54 | ChiPartial | partial:m16_11 | +| destructors_for_temps.cpp:16:33:16:54 | ChiPartial | partial:m16_18 | +| destructors_for_temps.cpp:16:33:16:54 | ChiTotal | total:m15_13 | +| destructors_for_temps.cpp:16:33:16:54 | ChiTotal | total:m16_6 | +| destructors_for_temps.cpp:16:33:16:54 | ChiTotal | total:m16_12 | +| destructors_for_temps.cpp:16:33:16:54 | SideEffect | m16_12 | +| destructors_for_temps.cpp:16:33:16:54 | SideEffect | ~m15_13 | +| destructors_for_temps.cpp:16:56:16:60 | Arg(1) | 1:r16_14 | +| destructors_for_temps.cpp:16:56:16:60 | CallTarget | func:r16_13 | +| destructors_for_temps.cpp:16:56:16:60 | ChiPartial | partial:m16_15 | +| destructors_for_temps.cpp:16:56:16:60 | ChiTotal | total:m16_10 | +| destructors_for_temps.cpp:16:56:16:60 | SideEffect | ~m16_10 | +| destructors_for_temps.cpp:17:5:17:42 | Address | &:r17_1 | +| destructors_for_temps.cpp:17:12:17:33 | Address | &:r17_2 | +| destructors_for_temps.cpp:17:12:17:33 | Address | &:r17_2 | +| destructors_for_temps.cpp:17:12:17:33 | Address | &:r17_2 | +| destructors_for_temps.cpp:17:12:17:33 | Address | &:r17_2 | +| destructors_for_temps.cpp:17:12:17:33 | Arg(this) | this:r17_2 | +| destructors_for_temps.cpp:17:12:17:33 | Arg(this) | this:r17_2 | +| destructors_for_temps.cpp:17:12:17:33 | CallTarget | func:r17_4 | +| destructors_for_temps.cpp:17:12:17:33 | ChiPartial | partial:m17_6 | +| destructors_for_temps.cpp:17:12:17:33 | ChiPartial | partial:m17_8 | +| destructors_for_temps.cpp:17:12:17:33 | ChiPartial | partial:m17_15 | +| destructors_for_temps.cpp:17:12:17:33 | ChiTotal | total:m16_22 | +| destructors_for_temps.cpp:17:12:17:33 | ChiTotal | total:m17_3 | +| destructors_for_temps.cpp:17:12:17:33 | ChiTotal | total:m17_9 | +| destructors_for_temps.cpp:17:12:17:33 | SideEffect | m17_9 | +| destructors_for_temps.cpp:17:12:17:33 | SideEffect | ~m16_22 | +| destructors_for_temps.cpp:17:35:17:39 | CallTarget | func:r17_10 | +| destructors_for_temps.cpp:17:35:17:39 | ChiPartial | partial:m17_12 | +| destructors_for_temps.cpp:17:35:17:39 | ChiTotal | total:m17_7 | +| destructors_for_temps.cpp:17:35:17:39 | SideEffect | ~m17_7 | +| destructors_for_temps.cpp:17:35:17:39 | StoreValue | r17_11 | +| destructors_for_temps.cpp:21:6:21:15 | Address | &:r21_5 | +| destructors_for_temps.cpp:21:6:21:15 | ChiPartial | partial:m21_3 | +| destructors_for_temps.cpp:21:6:21:15 | ChiTotal | total:m21_2 | +| destructors_for_temps.cpp:21:6:21:15 | Load | m23_36 | +| destructors_for_temps.cpp:21:6:21:15 | SideEffect | ~m23_29 | +| destructors_for_temps.cpp:22:5:22:30 | Address | &:r22_3 | +| destructors_for_temps.cpp:22:5:22:30 | Address | &:r22_7 | +| destructors_for_temps.cpp:22:5:22:30 | Arg(0) | 0:r22_2 | +| destructors_for_temps.cpp:22:5:22:30 | Arg(this) | this:r22_7 | +| destructors_for_temps.cpp:22:5:22:30 | CallTarget | func:r22_1 | +| destructors_for_temps.cpp:22:5:22:30 | CallTarget | func:r22_8 | +| destructors_for_temps.cpp:22:5:22:30 | ChiPartial | partial:m22_4 | +| destructors_for_temps.cpp:22:5:22:30 | ChiPartial | partial:m22_10 | +| destructors_for_temps.cpp:22:5:22:30 | ChiPartial | partial:m22_12 | +| destructors_for_temps.cpp:22:5:22:30 | ChiTotal | total:m21_4 | +| destructors_for_temps.cpp:22:5:22:30 | ChiTotal | total:m22_5 | +| destructors_for_temps.cpp:22:5:22:30 | ChiTotal | total:m22_6 | +| destructors_for_temps.cpp:22:5:22:30 | SideEffect | ~m21_4 | +| destructors_for_temps.cpp:22:5:22:30 | SideEffect | ~m22_5 | +| destructors_for_temps.cpp:22:5:22:30 | Unary | r22_3 | +| destructors_for_temps.cpp:23:5:23:75 | Address | &:r23_1 | +| destructors_for_temps.cpp:23:12:23:33 | Address | &:r23_2 | +| destructors_for_temps.cpp:23:12:23:33 | Address | &:r23_2 | +| destructors_for_temps.cpp:23:12:23:33 | Address | &:r23_2 | +| destructors_for_temps.cpp:23:12:23:33 | Address | &:r23_2 | +| destructors_for_temps.cpp:23:12:23:33 | Arg(this) | this:r23_2 | +| destructors_for_temps.cpp:23:12:23:33 | Arg(this) | this:r23_2 | +| destructors_for_temps.cpp:23:12:23:33 | CallTarget | func:r23_4 | +| destructors_for_temps.cpp:23:12:23:33 | ChiPartial | partial:m23_6 | +| destructors_for_temps.cpp:23:12:23:33 | ChiPartial | partial:m23_8 | +| destructors_for_temps.cpp:23:12:23:33 | ChiPartial | partial:m23_15 | +| destructors_for_temps.cpp:23:12:23:33 | ChiTotal | total:m22_11 | +| destructors_for_temps.cpp:23:12:23:33 | ChiTotal | total:m23_3 | +| destructors_for_temps.cpp:23:12:23:33 | ChiTotal | total:m23_9 | +| destructors_for_temps.cpp:23:12:23:33 | SideEffect | m23_9 | +| destructors_for_temps.cpp:23:12:23:33 | SideEffect | ~m22_11 | +| destructors_for_temps.cpp:23:12:23:41 | Left | r23_17 | +| destructors_for_temps.cpp:23:12:23:74 | StoreValue | r23_35 | +| destructors_for_temps.cpp:23:12:23:74 | Unary | r23_34 | +| destructors_for_temps.cpp:23:35:23:39 | CallTarget | func:r23_10 | +| destructors_for_temps.cpp:23:35:23:39 | ChiPartial | partial:m23_12 | +| destructors_for_temps.cpp:23:35:23:39 | ChiTotal | total:m23_7 | +| destructors_for_temps.cpp:23:35:23:39 | SideEffect | ~m23_7 | +| destructors_for_temps.cpp:23:35:23:39 | Unary | r23_11 | +| destructors_for_temps.cpp:23:45:23:66 | Address | &:r23_18 | +| destructors_for_temps.cpp:23:45:23:66 | Address | &:r23_18 | +| destructors_for_temps.cpp:23:45:23:66 | Address | &:r23_18 | +| destructors_for_temps.cpp:23:45:23:66 | Address | &:r23_18 | +| destructors_for_temps.cpp:23:45:23:66 | Arg(this) | this:r23_18 | +| destructors_for_temps.cpp:23:45:23:66 | Arg(this) | this:r23_18 | +| destructors_for_temps.cpp:23:45:23:66 | CallTarget | func:r23_20 | +| destructors_for_temps.cpp:23:45:23:66 | ChiPartial | partial:m23_22 | +| destructors_for_temps.cpp:23:45:23:66 | ChiPartial | partial:m23_24 | +| destructors_for_temps.cpp:23:45:23:66 | ChiPartial | partial:m23_31 | +| destructors_for_temps.cpp:23:45:23:66 | ChiTotal | total:m23_13 | +| destructors_for_temps.cpp:23:45:23:66 | ChiTotal | total:m23_19 | +| destructors_for_temps.cpp:23:45:23:66 | ChiTotal | total:m23_25 | +| destructors_for_temps.cpp:23:45:23:66 | SideEffect | m23_25 | +| destructors_for_temps.cpp:23:45:23:66 | SideEffect | ~m23_13 | +| destructors_for_temps.cpp:23:45:23:74 | Right | r23_33 | +| destructors_for_temps.cpp:23:68:23:72 | CallTarget | func:r23_26 | +| destructors_for_temps.cpp:23:68:23:72 | ChiPartial | partial:m23_28 | +| destructors_for_temps.cpp:23:68:23:72 | ChiTotal | total:m23_23 | +| destructors_for_temps.cpp:23:68:23:72 | SideEffect | ~m23_23 | +| destructors_for_temps.cpp:23:68:23:72 | Unary | r23_27 | +| destructors_for_temps.cpp:29:6:29:15 | ChiPartial | partial:m29_3 | +| destructors_for_temps.cpp:29:6:29:15 | ChiTotal | total:m29_2 | +| destructors_for_temps.cpp:29:6:29:15 | SideEffect | ~m30_6 | +| destructors_for_temps.cpp:30:33:30:34 | Address | &:r30_1 | +| destructors_for_temps.cpp:30:38:30:70 | CallTarget | func:r30_3 | +| destructors_for_temps.cpp:30:38:30:70 | ChiPartial | partial:m30_5 | +| destructors_for_temps.cpp:30:38:30:70 | ChiTotal | total:m29_4 | +| destructors_for_temps.cpp:30:38:30:70 | SideEffect | ~m29_4 | +| destructors_for_temps.cpp:30:38:30:70 | StoreValue | r30_4 | +| destructors_for_temps.cpp:30:38:30:72 | Address | &:r30_2 | +| destructors_for_temps.cpp:30:38:30:72 | StoreValue | r30_9 | +| destructors_for_temps.cpp:30:38:30:72 | Unary | r30_2 | +| destructors_for_temps.cpp:30:38:30:72 | Unary | r30_8 | +| destructors_for_temps.cpp:33:6:33:15 | ChiPartial | partial:m33_3 | +| destructors_for_temps.cpp:33:6:33:15 | ChiTotal | total:m33_2 | +| destructors_for_temps.cpp:33:6:33:15 | SideEffect | ~m36_6 | +| destructors_for_temps.cpp:34:26:34:26 | Address | &:r34_1 | +| destructors_for_temps.cpp:34:26:34:26 | Address | &:r34_1 | +| destructors_for_temps.cpp:34:26:34:26 | Arg(this) | this:r34_1 | +| destructors_for_temps.cpp:34:26:34:26 | CallTarget | func:r34_3 | +| destructors_for_temps.cpp:34:26:34:26 | ChiPartial | partial:m34_5 | +| destructors_for_temps.cpp:34:26:34:26 | ChiPartial | partial:m34_7 | +| destructors_for_temps.cpp:34:26:34:26 | ChiTotal | total:m33_4 | +| destructors_for_temps.cpp:34:26:34:26 | ChiTotal | total:m34_2 | +| destructors_for_temps.cpp:34:26:34:26 | SideEffect | ~m33_4 | +| destructors_for_temps.cpp:35:33:35:35 | Address | &:r35_1 | +| destructors_for_temps.cpp:35:39:35:71 | CallTarget | func:r35_3 | +| destructors_for_temps.cpp:35:39:35:71 | ChiPartial | partial:m35_5 | +| destructors_for_temps.cpp:35:39:35:71 | ChiTotal | total:m34_6 | +| destructors_for_temps.cpp:35:39:35:71 | SideEffect | ~m34_6 | +| destructors_for_temps.cpp:35:39:35:71 | StoreValue | r35_4 | +| destructors_for_temps.cpp:35:39:35:73 | Address | &:r35_2 | +| destructors_for_temps.cpp:35:39:35:73 | StoreValue | r35_9 | +| destructors_for_temps.cpp:35:39:35:73 | Unary | r35_2 | +| destructors_for_temps.cpp:35:39:35:73 | Unary | r35_8 | +| destructors_for_temps.cpp:36:1:36:1 | Address | &:r36_2 | +| destructors_for_temps.cpp:36:1:36:1 | Address | &:r36_2 | +| destructors_for_temps.cpp:36:1:36:1 | Arg(this) | this:r36_2 | +| destructors_for_temps.cpp:36:1:36:1 | CallTarget | func:r36_3 | +| destructors_for_temps.cpp:36:1:36:1 | ChiPartial | partial:m36_5 | +| destructors_for_temps.cpp:36:1:36:1 | ChiPartial | partial:m36_8 | +| destructors_for_temps.cpp:36:1:36:1 | ChiTotal | total:m34_8 | +| destructors_for_temps.cpp:36:1:36:1 | ChiTotal | total:m35_6 | +| destructors_for_temps.cpp:36:1:36:1 | SideEffect | m34_8 | +| destructors_for_temps.cpp:36:1:36:1 | SideEffect | ~m35_6 | +| destructors_for_temps.cpp:38:6:38:15 | ChiPartial | partial:m38_3 | +| destructors_for_temps.cpp:38:6:38:15 | ChiTotal | total:m38_2 | +| destructors_for_temps.cpp:38:6:38:15 | SideEffect | ~m39_5 | +| destructors_for_temps.cpp:38:22:38:22 | Address | &:r38_5 | +| destructors_for_temps.cpp:39:3:39:3 | Address | &:r39_2 | +| destructors_for_temps.cpp:39:3:39:3 | Address | &:r39_7 | +| destructors_for_temps.cpp:39:3:39:3 | Address | &:r39_19 | +| destructors_for_temps.cpp:39:3:39:3 | Address | &:r39_30 | +| destructors_for_temps.cpp:39:3:39:3 | Condition | r39_3 | +| destructors_for_temps.cpp:39:3:39:3 | Load | m38_6 | +| destructors_for_temps.cpp:39:3:39:3 | Load | m39_6 | +| destructors_for_temps.cpp:39:3:39:3 | Phi | from 2:m39_20 | +| destructors_for_temps.cpp:39:3:39:3 | Phi | from 2:~m39_15 | +| destructors_for_temps.cpp:39:3:39:3 | Phi | from 3:m39_31 | +| destructors_for_temps.cpp:39:3:39:3 | Phi | from 3:~m39_26 | +| destructors_for_temps.cpp:39:3:39:3 | StoreValue | r39_8 | +| destructors_for_temps.cpp:39:3:39:53 | Address | &:r39_1 | +| destructors_for_temps.cpp:39:7:39:28 | Address | &:r39_10 | +| destructors_for_temps.cpp:39:7:39:28 | Address | &:r39_10 | +| destructors_for_temps.cpp:39:7:39:28 | Address | &:r39_10 | +| destructors_for_temps.cpp:39:7:39:28 | Arg(this) | this:r39_10 | +| destructors_for_temps.cpp:39:7:39:28 | CallTarget | func:r39_12 | +| destructors_for_temps.cpp:39:7:39:28 | ChiPartial | partial:m39_14 | +| destructors_for_temps.cpp:39:7:39:28 | ChiPartial | partial:m39_16 | +| destructors_for_temps.cpp:39:7:39:28 | ChiTotal | total:m38_4 | +| destructors_for_temps.cpp:39:7:39:28 | ChiTotal | total:m39_11 | +| destructors_for_temps.cpp:39:7:39:28 | Load | m39_17 | +| destructors_for_temps.cpp:39:7:39:28 | SideEffect | ~m38_4 | +| destructors_for_temps.cpp:39:7:39:28 | StoreValue | r39_18 | +| destructors_for_temps.cpp:39:32:39:53 | Address | &:r39_21 | +| destructors_for_temps.cpp:39:32:39:53 | Address | &:r39_21 | +| destructors_for_temps.cpp:39:32:39:53 | Address | &:r39_21 | +| destructors_for_temps.cpp:39:32:39:53 | Arg(this) | this:r39_21 | +| destructors_for_temps.cpp:39:32:39:53 | CallTarget | func:r39_23 | +| destructors_for_temps.cpp:39:32:39:53 | ChiPartial | partial:m39_25 | +| destructors_for_temps.cpp:39:32:39:53 | ChiPartial | partial:m39_27 | +| destructors_for_temps.cpp:39:32:39:53 | ChiTotal | total:m38_4 | +| destructors_for_temps.cpp:39:32:39:53 | ChiTotal | total:m39_22 | +| destructors_for_temps.cpp:39:32:39:53 | Load | m39_28 | +| destructors_for_temps.cpp:39:32:39:53 | SideEffect | ~m38_4 | +| destructors_for_temps.cpp:39:32:39:53 | StoreValue | r39_29 | +| destructors_for_temps.cpp:42:6:42:15 | ChiPartial | partial:m42_3 | +| destructors_for_temps.cpp:42:6:42:15 | ChiTotal | total:m42_2 | +| destructors_for_temps.cpp:42:6:42:15 | Phi | from 2:~m45_22 | +| destructors_for_temps.cpp:42:6:42:15 | Phi | from 4:~m47_6 | +| destructors_for_temps.cpp:42:6:42:15 | SideEffect | ~m42_7 | +| destructors_for_temps.cpp:42:22:42:22 | Address | &:r42_5 | +| destructors_for_temps.cpp:43:26:43:26 | Address | &:r43_1 | +| destructors_for_temps.cpp:43:26:43:26 | Address | &:r43_1 | +| destructors_for_temps.cpp:43:26:43:26 | Arg(this) | this:r43_1 | +| destructors_for_temps.cpp:43:26:43:26 | CallTarget | func:r43_3 | +| destructors_for_temps.cpp:43:26:43:26 | ChiPartial | partial:m43_5 | +| destructors_for_temps.cpp:43:26:43:26 | ChiPartial | partial:m43_7 | +| destructors_for_temps.cpp:43:26:43:26 | ChiTotal | total:m42_4 | +| destructors_for_temps.cpp:43:26:43:26 | ChiTotal | total:m43_2 | +| destructors_for_temps.cpp:43:26:43:26 | SideEffect | ~m42_4 | +| destructors_for_temps.cpp:44:9:44:9 | Address | &:r44_1 | +| destructors_for_temps.cpp:44:9:44:9 | Condition | r44_2 | +| destructors_for_temps.cpp:44:9:44:9 | Load | m42_6 | +| destructors_for_temps.cpp:45:7:45:69 | Address | &:r45_1 | +| destructors_for_temps.cpp:45:7:45:69 | Address | &:r45_1 | +| destructors_for_temps.cpp:45:7:45:69 | Address | &:r45_1 | +| destructors_for_temps.cpp:45:7:45:69 | Arg(this) | this:r45_1 | +| destructors_for_temps.cpp:45:7:45:69 | CallTarget | func:r45_3 | +| destructors_for_temps.cpp:45:7:45:69 | ChiPartial | partial:m45_21 | +| destructors_for_temps.cpp:45:7:45:69 | ChiPartial | partial:m45_23 | +| destructors_for_temps.cpp:45:7:45:69 | ChiTotal | total:m45_2 | +| destructors_for_temps.cpp:45:7:45:69 | ChiTotal | total:m45_16 | +| destructors_for_temps.cpp:45:7:45:69 | Load | m45_24 | +| destructors_for_temps.cpp:45:7:45:69 | SideEffect | ~m45_16 | +| destructors_for_temps.cpp:45:34:45:36 | Arg(0) | 0:r45_4 | +| destructors_for_temps.cpp:45:39:45:60 | Address | &:r45_5 | +| destructors_for_temps.cpp:45:39:45:60 | Address | &:r45_5 | +| destructors_for_temps.cpp:45:39:45:60 | Address | &:r45_5 | +| destructors_for_temps.cpp:45:39:45:60 | Address | &:r45_5 | +| destructors_for_temps.cpp:45:39:45:60 | Arg(this) | this:r45_5 | +| destructors_for_temps.cpp:45:39:45:60 | Arg(this) | this:r45_5 | +| destructors_for_temps.cpp:45:39:45:60 | CallTarget | func:r45_7 | +| destructors_for_temps.cpp:45:39:45:60 | ChiPartial | partial:m45_9 | +| destructors_for_temps.cpp:45:39:45:60 | ChiPartial | partial:m45_11 | +| destructors_for_temps.cpp:45:39:45:60 | ChiPartial | partial:m45_18 | +| destructors_for_temps.cpp:45:39:45:60 | ChiTotal | total:m43_6 | +| destructors_for_temps.cpp:45:39:45:60 | ChiTotal | total:m45_6 | +| destructors_for_temps.cpp:45:39:45:60 | ChiTotal | total:m45_12 | +| destructors_for_temps.cpp:45:39:45:60 | SideEffect | m45_12 | +| destructors_for_temps.cpp:45:39:45:60 | SideEffect | ~m43_6 | +| destructors_for_temps.cpp:45:62:45:66 | Arg(1) | 1:r45_14 | +| destructors_for_temps.cpp:45:62:45:66 | CallTarget | func:r45_13 | +| destructors_for_temps.cpp:45:62:45:66 | ChiPartial | partial:m45_15 | +| destructors_for_temps.cpp:45:62:45:66 | ChiTotal | total:m45_10 | +| destructors_for_temps.cpp:45:62:45:66 | SideEffect | ~m45_10 | +| destructors_for_temps.cpp:47:1:47:1 | Address | &:r47_2 | +| destructors_for_temps.cpp:47:1:47:1 | Address | &:r47_2 | +| destructors_for_temps.cpp:47:1:47:1 | Arg(this) | this:r47_2 | +| destructors_for_temps.cpp:47:1:47:1 | CallTarget | func:r47_3 | +| destructors_for_temps.cpp:47:1:47:1 | ChiPartial | partial:m47_5 | +| destructors_for_temps.cpp:47:1:47:1 | ChiPartial | partial:m47_8 | +| destructors_for_temps.cpp:47:1:47:1 | ChiTotal | total:m43_6 | +| destructors_for_temps.cpp:47:1:47:1 | ChiTotal | total:m43_8 | +| destructors_for_temps.cpp:47:1:47:1 | SideEffect | m43_8 | +| destructors_for_temps.cpp:47:1:47:1 | SideEffect | ~m43_6 | +| destructors_for_temps.cpp:49:6:49:15 | ChiPartial | partial:m49_3 | +| destructors_for_temps.cpp:49:6:49:15 | ChiTotal | total:m49_2 | +| destructors_for_temps.cpp:49:6:49:15 | Phi | from 2:~m51_26 | +| destructors_for_temps.cpp:49:6:49:15 | Phi | from 4:~m52_6 | +| destructors_for_temps.cpp:49:6:49:15 | SideEffect | ~m49_7 | +| destructors_for_temps.cpp:49:22:49:22 | Address | &:r49_5 | +| destructors_for_temps.cpp:50:26:50:26 | Address | &:r50_1 | +| destructors_for_temps.cpp:50:26:50:26 | Address | &:r50_1 | +| destructors_for_temps.cpp:50:26:50:26 | Arg(this) | this:r50_1 | +| destructors_for_temps.cpp:50:26:50:26 | CallTarget | func:r50_3 | +| destructors_for_temps.cpp:50:26:50:26 | ChiPartial | partial:m50_5 | +| destructors_for_temps.cpp:50:26:50:26 | ChiPartial | partial:m50_7 | +| destructors_for_temps.cpp:50:26:50:26 | ChiTotal | total:m49_4 | +| destructors_for_temps.cpp:50:26:50:26 | ChiTotal | total:m50_2 | +| destructors_for_temps.cpp:50:26:50:26 | SideEffect | ~m49_4 | +| destructors_for_temps.cpp:51:5:51:5 | Address | &:r51_2 | +| destructors_for_temps.cpp:51:5:51:5 | Address | &:r51_39 | +| destructors_for_temps.cpp:51:5:51:5 | Address | &:r51_41 | +| destructors_for_temps.cpp:51:5:51:5 | Condition | r51_3 | +| destructors_for_temps.cpp:51:5:51:5 | Load | m49_6 | +| destructors_for_temps.cpp:51:5:51:5 | Load | m51_40 | +| destructors_for_temps.cpp:51:5:51:5 | StoreValue | r51_42 | +| destructors_for_temps.cpp:51:5:51:96 | Address | &:r51_1 | +| destructors_for_temps.cpp:51:9:51:71 | Address | &:r51_5 | +| destructors_for_temps.cpp:51:9:51:71 | Address | &:r51_5 | +| destructors_for_temps.cpp:51:9:51:71 | Address | &:r51_5 | +| destructors_for_temps.cpp:51:9:51:71 | Arg(this) | this:r51_5 | +| destructors_for_temps.cpp:51:9:51:71 | CallTarget | func:r51_7 | +| destructors_for_temps.cpp:51:9:51:71 | ChiPartial | partial:m51_25 | +| destructors_for_temps.cpp:51:9:51:71 | ChiPartial | partial:m51_27 | +| destructors_for_temps.cpp:51:9:51:71 | ChiTotal | total:m51_6 | +| destructors_for_temps.cpp:51:9:51:71 | ChiTotal | total:m51_20 | +| destructors_for_temps.cpp:51:9:51:71 | Load | m51_28 | +| destructors_for_temps.cpp:51:9:51:71 | SideEffect | ~m51_20 | +| destructors_for_temps.cpp:51:36:51:38 | Arg(0) | 0:r51_8 | +| destructors_for_temps.cpp:51:41:51:62 | Address | &:r51_9 | +| destructors_for_temps.cpp:51:41:51:62 | Address | &:r51_9 | +| destructors_for_temps.cpp:51:41:51:62 | Address | &:r51_9 | +| destructors_for_temps.cpp:51:41:51:62 | Address | &:r51_9 | +| destructors_for_temps.cpp:51:41:51:62 | Arg(this) | this:r51_9 | +| destructors_for_temps.cpp:51:41:51:62 | Arg(this) | this:r51_9 | +| destructors_for_temps.cpp:51:41:51:62 | CallTarget | func:r51_11 | +| destructors_for_temps.cpp:51:41:51:62 | ChiPartial | partial:m51_13 | +| destructors_for_temps.cpp:51:41:51:62 | ChiPartial | partial:m51_15 | +| destructors_for_temps.cpp:51:41:51:62 | ChiPartial | partial:m51_22 | +| destructors_for_temps.cpp:51:41:51:62 | ChiTotal | total:m50_6 | +| destructors_for_temps.cpp:51:41:51:62 | ChiTotal | total:m51_10 | +| destructors_for_temps.cpp:51:41:51:62 | ChiTotal | total:m51_16 | +| destructors_for_temps.cpp:51:41:51:62 | SideEffect | m51_16 | +| destructors_for_temps.cpp:51:41:51:62 | SideEffect | ~m50_6 | +| destructors_for_temps.cpp:51:64:51:68 | Arg(1) | 1:r51_18 | +| destructors_for_temps.cpp:51:64:51:68 | CallTarget | func:r51_17 | +| destructors_for_temps.cpp:51:64:51:68 | ChiPartial | partial:m51_19 | +| destructors_for_temps.cpp:51:64:51:68 | ChiTotal | total:m51_14 | +| destructors_for_temps.cpp:51:64:51:68 | SideEffect | ~m51_14 | +| destructors_for_temps.cpp:51:75:51:96 | Address | &:r51_30 | +| destructors_for_temps.cpp:51:75:51:96 | Address | &:r51_30 | +| destructors_for_temps.cpp:51:75:51:96 | Address | &:r51_30 | +| destructors_for_temps.cpp:51:75:51:96 | Arg(this) | this:r51_30 | +| destructors_for_temps.cpp:51:75:51:96 | CallTarget | func:r51_32 | +| destructors_for_temps.cpp:51:75:51:96 | ChiPartial | partial:m51_34 | +| destructors_for_temps.cpp:51:75:51:96 | ChiPartial | partial:m51_36 | +| destructors_for_temps.cpp:51:75:51:96 | ChiTotal | total:m50_6 | +| destructors_for_temps.cpp:51:75:51:96 | ChiTotal | total:m51_31 | +| destructors_for_temps.cpp:51:75:51:96 | Load | m51_37 | +| destructors_for_temps.cpp:51:75:51:96 | SideEffect | ~m50_6 | +| destructors_for_temps.cpp:51:75:51:96 | StoreValue | r51_38 | +| destructors_for_temps.cpp:52:1:52:1 | Address | &:r52_2 | +| destructors_for_temps.cpp:52:1:52:1 | Address | &:r52_2 | +| destructors_for_temps.cpp:52:1:52:1 | Arg(this) | this:r52_2 | +| destructors_for_temps.cpp:52:1:52:1 | CallTarget | func:r52_3 | +| destructors_for_temps.cpp:52:1:52:1 | ChiPartial | partial:m52_5 | +| destructors_for_temps.cpp:52:1:52:1 | ChiPartial | partial:m52_8 | +| destructors_for_temps.cpp:52:1:52:1 | ChiTotal | total:m50_8 | +| destructors_for_temps.cpp:52:1:52:1 | ChiTotal | total:m51_35 | +| destructors_for_temps.cpp:52:1:52:1 | SideEffect | m50_8 | +| destructors_for_temps.cpp:52:1:52:1 | SideEffect | ~m51_35 | +| destructors_for_temps.cpp:54:6:54:15 | ChiPartial | partial:m54_3 | +| destructors_for_temps.cpp:54:6:54:15 | ChiTotal | total:m54_2 | +| destructors_for_temps.cpp:54:6:54:15 | Phi | from 2:~m55_26 | +| destructors_for_temps.cpp:54:6:54:15 | Phi | from 4:~m55_35 | +| destructors_for_temps.cpp:54:6:54:15 | SideEffect | ~m54_7 | +| destructors_for_temps.cpp:54:22:54:22 | Address | &:r54_5 | +| destructors_for_temps.cpp:55:5:55:5 | Address | &:r55_2 | +| destructors_for_temps.cpp:55:5:55:5 | Address | &:r55_39 | +| destructors_for_temps.cpp:55:5:55:5 | Address | &:r55_41 | +| destructors_for_temps.cpp:55:5:55:5 | Condition | r55_3 | +| destructors_for_temps.cpp:55:5:55:5 | Load | m54_6 | +| destructors_for_temps.cpp:55:5:55:5 | Load | m55_40 | +| destructors_for_temps.cpp:55:5:55:5 | StoreValue | r55_42 | +| destructors_for_temps.cpp:55:5:55:96 | Address | &:r55_1 | +| destructors_for_temps.cpp:55:9:55:71 | Address | &:r55_5 | +| destructors_for_temps.cpp:55:9:55:71 | Address | &:r55_5 | +| destructors_for_temps.cpp:55:9:55:71 | Address | &:r55_5 | +| destructors_for_temps.cpp:55:9:55:71 | Arg(this) | this:r55_5 | +| destructors_for_temps.cpp:55:9:55:71 | CallTarget | func:r55_7 | +| destructors_for_temps.cpp:55:9:55:71 | ChiPartial | partial:m55_25 | +| destructors_for_temps.cpp:55:9:55:71 | ChiPartial | partial:m55_27 | +| destructors_for_temps.cpp:55:9:55:71 | ChiTotal | total:m55_6 | +| destructors_for_temps.cpp:55:9:55:71 | ChiTotal | total:m55_20 | +| destructors_for_temps.cpp:55:9:55:71 | Load | m55_28 | +| destructors_for_temps.cpp:55:9:55:71 | SideEffect | ~m55_20 | +| destructors_for_temps.cpp:55:36:55:38 | Arg(0) | 0:r55_8 | +| destructors_for_temps.cpp:55:41:55:62 | Address | &:r55_9 | +| destructors_for_temps.cpp:55:41:55:62 | Address | &:r55_9 | +| destructors_for_temps.cpp:55:41:55:62 | Address | &:r55_9 | +| destructors_for_temps.cpp:55:41:55:62 | Address | &:r55_9 | +| destructors_for_temps.cpp:55:41:55:62 | Arg(this) | this:r55_9 | +| destructors_for_temps.cpp:55:41:55:62 | Arg(this) | this:r55_9 | +| destructors_for_temps.cpp:55:41:55:62 | CallTarget | func:r55_11 | +| destructors_for_temps.cpp:55:41:55:62 | ChiPartial | partial:m55_13 | +| destructors_for_temps.cpp:55:41:55:62 | ChiPartial | partial:m55_15 | +| destructors_for_temps.cpp:55:41:55:62 | ChiPartial | partial:m55_22 | +| destructors_for_temps.cpp:55:41:55:62 | ChiTotal | total:m54_4 | +| destructors_for_temps.cpp:55:41:55:62 | ChiTotal | total:m55_10 | +| destructors_for_temps.cpp:55:41:55:62 | ChiTotal | total:m55_16 | +| destructors_for_temps.cpp:55:41:55:62 | SideEffect | m55_16 | +| destructors_for_temps.cpp:55:41:55:62 | SideEffect | ~m54_4 | +| destructors_for_temps.cpp:55:64:55:68 | Arg(1) | 1:r55_18 | +| destructors_for_temps.cpp:55:64:55:68 | CallTarget | func:r55_17 | +| destructors_for_temps.cpp:55:64:55:68 | ChiPartial | partial:m55_19 | +| destructors_for_temps.cpp:55:64:55:68 | ChiTotal | total:m55_14 | +| destructors_for_temps.cpp:55:64:55:68 | SideEffect | ~m55_14 | +| destructors_for_temps.cpp:55:75:55:96 | Address | &:r55_30 | +| destructors_for_temps.cpp:55:75:55:96 | Address | &:r55_30 | +| destructors_for_temps.cpp:55:75:55:96 | Address | &:r55_30 | +| destructors_for_temps.cpp:55:75:55:96 | Arg(this) | this:r55_30 | +| destructors_for_temps.cpp:55:75:55:96 | CallTarget | func:r55_32 | +| destructors_for_temps.cpp:55:75:55:96 | ChiPartial | partial:m55_34 | +| destructors_for_temps.cpp:55:75:55:96 | ChiPartial | partial:m55_36 | +| destructors_for_temps.cpp:55:75:55:96 | ChiTotal | total:m54_4 | +| destructors_for_temps.cpp:55:75:55:96 | ChiTotal | total:m55_31 | +| destructors_for_temps.cpp:55:75:55:96 | Load | m55_37 | +| destructors_for_temps.cpp:55:75:55:96 | SideEffect | ~m54_4 | +| destructors_for_temps.cpp:55:75:55:96 | StoreValue | r55_38 | +| file://:0:0:0:0 | Address | &:r0_1 | +| file://:0:0:0:0 | Address | &:r0_1 | | file://:0:0:0:0 | Address | &:r0_1 | | file://:0:0:0:0 | Address | &:r0_1 | | file://:0:0:0:0 | Address | &:r0_1 | @@ -726,6 +1160,8 @@ | file://:0:0:0:0 | Address | &:r0_3 | | file://:0:0:0:0 | Address | &:r0_3 | | file://:0:0:0:0 | Address | &:r0_3 | +| file://:0:0:0:0 | Address | &:r0_3 | +| file://:0:0:0:0 | Address | &:r0_3 | | file://:0:0:0:0 | Address | &:r0_4 | | file://:0:0:0:0 | Address | &:r0_4 | | file://:0:0:0:0 | Address | &:r0_5 | @@ -742,7 +1178,9 @@ | file://:0:0:0:0 | Address | &:r0_5 | | file://:0:0:0:0 | Address | &:r0_6 | | file://:0:0:0:0 | Address | &:r0_6 | -| file://:0:0:0:0 | Address | &:r0_7 | +| file://:0:0:0:0 | Address | &:r0_6 | +| file://:0:0:0:0 | Address | &:r0_6 | +| file://:0:0:0:0 | Address | &:r0_6 | | file://:0:0:0:0 | Address | &:r0_7 | | file://:0:0:0:0 | Address | &:r0_7 | | file://:0:0:0:0 | Address | &:r0_7 | @@ -755,8 +1193,12 @@ | file://:0:0:0:0 | Address | &:r0_8 | | file://:0:0:0:0 | Address | &:r0_8 | | file://:0:0:0:0 | Address | &:r0_8 | -| file://:0:0:0:0 | Address | &:r0_9 | -| file://:0:0:0:0 | Address | &:r0_9 | +| file://:0:0:0:0 | Address | &:r0_8 | +| file://:0:0:0:0 | Address | &:r0_8 | +| file://:0:0:0:0 | Address | &:r0_8 | +| file://:0:0:0:0 | Address | &:r0_8 | +| file://:0:0:0:0 | Address | &:r0_8 | +| file://:0:0:0:0 | Address | &:r0_8 | | file://:0:0:0:0 | Address | &:r0_9 | | file://:0:0:0:0 | Address | &:r0_9 | | file://:0:0:0:0 | Address | &:r0_10 | @@ -765,7 +1207,7 @@ | file://:0:0:0:0 | Address | &:r0_11 | | file://:0:0:0:0 | Address | &:r0_11 | | file://:0:0:0:0 | Address | &:r0_11 | -| file://:0:0:0:0 | Address | &:r0_12 | +| file://:0:0:0:0 | Address | &:r0_11 | | file://:0:0:0:0 | Address | &:r0_13 | | file://:0:0:0:0 | Address | &:r0_13 | | file://:0:0:0:0 | Address | &:r0_13 | @@ -774,6 +1216,7 @@ | file://:0:0:0:0 | Address | &:r0_15 | | file://:0:0:0:0 | Address | &:r0_15 | | file://:0:0:0:0 | Address | &:r0_15 | +| file://:0:0:0:0 | Address | &:r0_15 | | file://:0:0:0:0 | Address | &:r0_16 | | file://:0:0:0:0 | Address | &:r0_16 | | file://:0:0:0:0 | Address | &:r0_16 | @@ -782,23 +1225,58 @@ | file://:0:0:0:0 | Address | &:r0_17 | | file://:0:0:0:0 | Address | &:r0_18 | | file://:0:0:0:0 | Address | &:r0_18 | +| file://:0:0:0:0 | Address | &:r0_18 | | file://:0:0:0:0 | Address | &:r0_19 | | file://:0:0:0:0 | Address | &:r0_19 | | file://:0:0:0:0 | Address | &:r0_19 | -| file://:0:0:0:0 | Address | &:r0_22 | -| file://:0:0:0:0 | Address | &:r0_25 | +| file://:0:0:0:0 | Address | &:r0_20 | +| file://:0:0:0:0 | Address | &:r0_20 | +| file://:0:0:0:0 | Address | &:r0_20 | +| file://:0:0:0:0 | Address | &:r0_21 | +| file://:0:0:0:0 | Address | &:r0_23 | +| file://:0:0:0:0 | Address | &:r0_23 | +| file://:0:0:0:0 | Address | &:r0_24 | +| file://:0:0:0:0 | Address | &:r0_24 | +| file://:0:0:0:0 | Address | &:r0_24 | | file://:0:0:0:0 | Address | &:r0_27 | -| file://:0:0:0:0 | Address | &:r0_29 | -| file://:0:0:0:0 | Address | &:r0_32 | -| file://:0:0:0:0 | Address | &:r0_35 | +| file://:0:0:0:0 | Address | &:r0_27 | +| file://:0:0:0:0 | Address | &:r0_31 | +| file://:0:0:0:0 | Address | &:r0_34 | | file://:0:0:0:0 | Address | &:r0_37 | | file://:0:0:0:0 | Address | &:r0_39 | +| file://:0:0:0:0 | Address | &:r0_40 | +| file://:0:0:0:0 | Address | &:r0_40 | +| file://:0:0:0:0 | Address | &:r0_40 | +| file://:0:0:0:0 | Address | &:r0_43 | +| file://:0:0:0:0 | Address | &:r0_47 | +| file://:0:0:0:0 | Address | &:r0_50 | +| file://:0:0:0:0 | Address | &:r0_53 | +| file://:0:0:0:0 | Address | &:r0_55 | +| file://:0:0:0:0 | Address | &:r0_56 | +| file://:0:0:0:0 | Address | &:r0_56 | +| file://:0:0:0:0 | Address | &:r0_56 | +| file://:0:0:0:0 | Address | &:r0_59 | +| file://:0:0:0:0 | Address | &:r0_63 | | file://:0:0:0:0 | Arg(0) | 0:r0_6 | | file://:0:0:0:0 | Arg(0) | 0:r0_8 | | file://:0:0:0:0 | Arg(0) | 0:r0_8 | | file://:0:0:0:0 | Arg(0) | 0:r0_8 | +| file://:0:0:0:0 | Arg(0) | 0:r0_9 | +| file://:0:0:0:0 | Arg(0) | 0:r0_11 | +| file://:0:0:0:0 | Arg(0) | 0:r0_11 | +| file://:0:0:0:0 | Arg(0) | 0:r0_11 | +| file://:0:0:0:0 | Arg(0) | 0:r0_13 | +| file://:0:0:0:0 | Arg(0) | 0:r0_13 | | file://:0:0:0:0 | Arg(0) | 0:r0_15 | | file://:0:0:0:0 | Arg(0) | 0:r0_15 | +| file://:0:0:0:0 | Arg(0) | 0:r0_23 | +| file://:0:0:0:0 | Arg(0) | 0:r0_25 | +| file://:0:0:0:0 | Arg(0) | 0:r0_27 | +| file://:0:0:0:0 | Arg(0) | 0:r0_29 | +| file://:0:0:0:0 | Arg(0) | 0:r0_43 | +| file://:0:0:0:0 | Arg(0) | 0:r0_45 | +| file://:0:0:0:0 | Arg(0) | 0:r0_59 | +| file://:0:0:0:0 | Arg(0) | 0:r0_61 | | file://:0:0:0:0 | CallTarget | func:r0_1 | | file://:0:0:0:0 | CallTarget | func:r0_1 | | file://:0:0:0:0 | CallTarget | func:r0_1 | @@ -830,15 +1308,15 @@ | file://:0:0:0:0 | ChiTotal | total:m754_8 | | file://:0:0:0:0 | ChiTotal | total:m763_8 | | file://:0:0:0:0 | ChiTotal | total:m1043_10 | -| file://:0:0:0:0 | ChiTotal | total:m1242_4 | -| file://:0:0:0:0 | ChiTotal | total:m1690_3 | -| file://:0:0:0:0 | ChiTotal | total:m1718_8 | -| file://:0:0:0:0 | ChiTotal | total:m1718_19 | -| file://:0:0:0:0 | ChiTotal | total:m1836_8 | -| file://:0:0:0:0 | ChiTotal | total:m1841_8 | -| file://:0:0:0:0 | ChiTotal | total:m2175_6 | -| file://:0:0:0:0 | ChiTotal | total:m2179_4 | -| file://:0:0:0:0 | ChiTotal | total:m2186_6 | +| file://:0:0:0:0 | ChiTotal | total:m1289_4 | +| file://:0:0:0:0 | ChiTotal | total:m1737_3 | +| file://:0:0:0:0 | ChiTotal | total:m1765_8 | +| file://:0:0:0:0 | ChiTotal | total:m1765_19 | +| file://:0:0:0:0 | ChiTotal | total:m1883_8 | +| file://:0:0:0:0 | ChiTotal | total:m1888_8 | +| file://:0:0:0:0 | ChiTotal | total:m2222_6 | +| file://:0:0:0:0 | ChiTotal | total:m2226_4 | +| file://:0:0:0:0 | ChiTotal | total:m2233_6 | | file://:0:0:0:0 | Left | r0_2 | | file://:0:0:0:0 | Left | r0_4 | | file://:0:0:0:0 | Left | r0_7 | @@ -861,6 +1339,7 @@ | file://:0:0:0:0 | Load | m0_2 | | file://:0:0:0:0 | Load | m0_2 | | file://:0:0:0:0 | Load | m0_2 | +| file://:0:0:0:0 | Load | m0_2 | | file://:0:0:0:0 | Load | m0_5 | | file://:0:0:0:0 | Load | m0_8 | | file://:0:0:0:0 | Load | m0_11 | @@ -869,18 +1348,25 @@ | file://:0:0:0:0 | Load | m745_6 | | file://:0:0:0:0 | Load | m754_6 | | file://:0:0:0:0 | Load | m763_6 | -| file://:0:0:0:0 | Load | m1468_4 | -| file://:0:0:0:0 | Load | m1468_4 | -| file://:0:0:0:0 | Load | m1687_9 | -| file://:0:0:0:0 | Load | m1716_4 | -| file://:0:0:0:0 | Load | m1836_6 | -| file://:0:0:0:0 | Load | m1836_6 | -| file://:0:0:0:0 | Load | m1841_6 | -| file://:0:0:0:0 | Load | m2015_6 | +| file://:0:0:0:0 | Load | m1127_29 | +| file://:0:0:0:0 | Load | m1133_29 | +| file://:0:0:0:0 | Load | m1515_4 | +| file://:0:0:0:0 | Load | m1515_4 | +| file://:0:0:0:0 | Load | m1734_9 | +| file://:0:0:0:0 | Load | m1763_4 | +| file://:0:0:0:0 | Load | m1883_6 | +| file://:0:0:0:0 | Load | m1883_6 | +| file://:0:0:0:0 | Load | m1888_6 | +| file://:0:0:0:0 | Load | m2062_6 | +| file://:0:0:0:0 | Load | m2201_40 | +| file://:0:0:0:0 | Load | m2204_40 | +| file://:0:0:0:0 | Load | m2210_36 | +| file://:0:0:0:0 | Load | m2215_40 | +| file://:0:0:0:0 | Load | m2293_46 | | file://:0:0:0:0 | Load | ~m0_4 | -| file://:0:0:0:0 | Load | ~m1446_6 | -| file://:0:0:0:0 | Load | ~m1714_10 | -| file://:0:0:0:0 | Load | ~m1714_14 | +| file://:0:0:0:0 | Load | ~m1493_6 | +| file://:0:0:0:0 | Load | ~m1761_10 | +| file://:0:0:0:0 | Load | ~m1761_14 | | file://:0:0:0:0 | Right | r0_3 | | file://:0:0:0:0 | Right | r0_5 | | file://:0:0:0:0 | Right | r0_8 | @@ -900,31 +1386,32 @@ | file://:0:0:0:0 | SideEffect | m0_4 | | file://:0:0:0:0 | SideEffect | m0_4 | | file://:0:0:0:0 | SideEffect | m0_4 | +| file://:0:0:0:0 | SideEffect | m0_4 | | file://:0:0:0:0 | SideEffect | m0_14 | -| file://:0:0:0:0 | SideEffect | m1080_23 | -| file://:0:0:0:0 | SideEffect | m1080_23 | -| file://:0:0:0:0 | SideEffect | m1086_23 | -| file://:0:0:0:0 | SideEffect | m1086_23 | -| file://:0:0:0:0 | SideEffect | m2154_13 | -| file://:0:0:0:0 | SideEffect | m2154_13 | -| file://:0:0:0:0 | SideEffect | m2154_34 | -| file://:0:0:0:0 | SideEffect | m2154_34 | -| file://:0:0:0:0 | SideEffect | m2157_13 | -| file://:0:0:0:0 | SideEffect | m2157_13 | -| file://:0:0:0:0 | SideEffect | m2157_34 | -| file://:0:0:0:0 | SideEffect | m2157_34 | -| file://:0:0:0:0 | SideEffect | m2163_9 | -| file://:0:0:0:0 | SideEffect | m2163_9 | -| file://:0:0:0:0 | SideEffect | m2163_30 | -| file://:0:0:0:0 | SideEffect | m2163_30 | -| file://:0:0:0:0 | SideEffect | m2168_13 | -| file://:0:0:0:0 | SideEffect | m2168_13 | -| file://:0:0:0:0 | SideEffect | m2168_34 | -| file://:0:0:0:0 | SideEffect | m2168_34 | -| file://:0:0:0:0 | SideEffect | m2246_21 | -| file://:0:0:0:0 | SideEffect | m2246_21 | -| file://:0:0:0:0 | SideEffect | m2246_40 | -| file://:0:0:0:0 | SideEffect | m2246_40 | +| file://:0:0:0:0 | SideEffect | m1127_19 | +| file://:0:0:0:0 | SideEffect | m1127_19 | +| file://:0:0:0:0 | SideEffect | m1133_19 | +| file://:0:0:0:0 | SideEffect | m1133_19 | +| file://:0:0:0:0 | SideEffect | m2201_13 | +| file://:0:0:0:0 | SideEffect | m2201_13 | +| file://:0:0:0:0 | SideEffect | m2201_30 | +| file://:0:0:0:0 | SideEffect | m2201_30 | +| file://:0:0:0:0 | SideEffect | m2204_13 | +| file://:0:0:0:0 | SideEffect | m2204_13 | +| file://:0:0:0:0 | SideEffect | m2204_30 | +| file://:0:0:0:0 | SideEffect | m2204_30 | +| file://:0:0:0:0 | SideEffect | m2210_9 | +| file://:0:0:0:0 | SideEffect | m2210_9 | +| file://:0:0:0:0 | SideEffect | m2210_26 | +| file://:0:0:0:0 | SideEffect | m2210_26 | +| file://:0:0:0:0 | SideEffect | m2215_13 | +| file://:0:0:0:0 | SideEffect | m2215_13 | +| file://:0:0:0:0 | SideEffect | m2215_30 | +| file://:0:0:0:0 | SideEffect | m2215_30 | +| file://:0:0:0:0 | SideEffect | m2293_21 | +| file://:0:0:0:0 | SideEffect | m2293_21 | +| file://:0:0:0:0 | SideEffect | m2293_36 | +| file://:0:0:0:0 | SideEffect | m2293_36 | | file://:0:0:0:0 | SideEffect | ~m0_4 | | file://:0:0:0:0 | SideEffect | ~m0_4 | | file://:0:0:0:0 | SideEffect | ~m0_4 | @@ -934,16 +1421,23 @@ | file://:0:0:0:0 | SideEffect | ~m96_8 | | file://:0:0:0:0 | SideEffect | ~m754_8 | | file://:0:0:0:0 | SideEffect | ~m763_8 | -| file://:0:0:0:0 | SideEffect | ~m1079_8 | -| file://:0:0:0:0 | SideEffect | ~m1079_8 | -| file://:0:0:0:0 | SideEffect | ~m1079_8 | -| file://:0:0:0:0 | SideEffect | ~m1079_8 | -| file://:0:0:0:0 | SideEffect | ~m1242_4 | -| file://:0:0:0:0 | SideEffect | ~m1449_6 | -| file://:0:0:0:0 | SideEffect | ~m1841_8 | -| file://:0:0:0:0 | SideEffect | ~m2175_6 | -| file://:0:0:0:0 | SideEffect | ~m2179_4 | -| file://:0:0:0:0 | SideEffect | ~m2186_6 | +| file://:0:0:0:0 | SideEffect | ~m1126_8 | +| file://:0:0:0:0 | SideEffect | ~m1126_8 | +| file://:0:0:0:0 | SideEffect | ~m1126_8 | +| file://:0:0:0:0 | SideEffect | ~m1126_8 | +| file://:0:0:0:0 | SideEffect | ~m1127_18 | +| file://:0:0:0:0 | SideEffect | ~m1133_18 | +| file://:0:0:0:0 | SideEffect | ~m1289_4 | +| file://:0:0:0:0 | SideEffect | ~m1496_6 | +| file://:0:0:0:0 | SideEffect | ~m1888_8 | +| file://:0:0:0:0 | SideEffect | ~m2201_29 | +| file://:0:0:0:0 | SideEffect | ~m2204_29 | +| file://:0:0:0:0 | SideEffect | ~m2210_25 | +| file://:0:0:0:0 | SideEffect | ~m2215_29 | +| file://:0:0:0:0 | SideEffect | ~m2222_6 | +| file://:0:0:0:0 | SideEffect | ~m2226_4 | +| file://:0:0:0:0 | SideEffect | ~m2233_6 | +| file://:0:0:0:0 | SideEffect | ~m2293_35 | | file://:0:0:0:0 | StoreValue | r0_1 | | file://:0:0:0:0 | StoreValue | r0_1 | | file://:0:0:0:0 | StoreValue | r0_1 | @@ -994,30 +1488,37 @@ | file://:0:0:0:0 | Unary | r0_7 | | file://:0:0:0:0 | Unary | r0_8 | | file://:0:0:0:0 | Unary | r0_8 | +| file://:0:0:0:0 | Unary | r0_8 | | file://:0:0:0:0 | Unary | r0_9 | | file://:0:0:0:0 | Unary | r0_9 | | file://:0:0:0:0 | Unary | r0_9 | | file://:0:0:0:0 | Unary | r0_10 | | file://:0:0:0:0 | Unary | r0_10 | | file://:0:0:0:0 | Unary | r0_10 | -| file://:0:0:0:0 | Unary | r0_11 | +| file://:0:0:0:0 | Unary | r0_10 | +| file://:0:0:0:0 | Unary | r0_10 | | file://:0:0:0:0 | Unary | r0_11 | | file://:0:0:0:0 | Unary | r0_12 | | file://:0:0:0:0 | Unary | r0_14 | | file://:0:0:0:0 | Unary | r0_14 | -| file://:0:0:0:0 | Unary | r0_14 | +| file://:0:0:0:0 | Unary | r0_17 | | file://:0:0:0:0 | Unary | r0_17 | | file://:0:0:0:0 | Unary | r0_18 | | file://:0:0:0:0 | Unary | r0_18 | | file://:0:0:0:0 | Unary | r0_19 | | file://:0:0:0:0 | Unary | r0_20 | | file://:0:0:0:0 | Unary | r0_20 | +| file://:0:0:0:0 | Unary | r0_20 | | file://:0:0:0:0 | Unary | r0_21 | | file://:0:0:0:0 | Unary | r0_21 | -| file://:0:0:0:0 | Unary | r0_21 | -| file://:0:0:0:0 | Unary | r0_24 | -| file://:0:0:0:0 | Unary | r0_31 | -| file://:0:0:0:0 | Unary | r0_34 | +| file://:0:0:0:0 | Unary | r0_22 | +| file://:0:0:0:0 | Unary | r0_26 | +| file://:0:0:0:0 | Unary | r0_33 | +| file://:0:0:0:0 | Unary | r0_36 | +| file://:0:0:0:0 | Unary | r0_42 | +| file://:0:0:0:0 | Unary | r0_49 | +| file://:0:0:0:0 | Unary | r0_52 | +| file://:0:0:0:0 | Unary | r0_58 | | ir.c:7:6:7:17 | ChiPartial | partial:m7_3 | | ir.c:7:6:7:17 | ChiTotal | total:m7_2 | | ir.c:7:6:7:17 | SideEffect | ~m10_6 | @@ -5709,6333 +6210,6326 @@ | ir.cpp:1056:1:1056:1 | SideEffect | m1049_12 | | ir.cpp:1056:1:1056:1 | SideEffect | ~m1055_7 | | ir.cpp:1056:1:1056:1 | SideEffect | ~m1056_6 | -| ir.cpp:1079:6:1079:18 | ChiPartial | partial:m1079_3 | -| ir.cpp:1079:6:1079:18 | ChiTotal | total:m1079_2 | -| ir.cpp:1079:6:1079:18 | SideEffect | ~m1090_1 | -| ir.cpp:1079:39:1079:39 | Address | &:r1079_5 | -| ir.cpp:1079:39:1079:39 | Address | &:r1079_5 | -| ir.cpp:1079:39:1079:39 | Address | &:r1079_7 | -| ir.cpp:1079:39:1079:39 | Address | &:r1079_7 | -| ir.cpp:1079:39:1079:39 | Load | m1079_6 | -| ir.cpp:1079:39:1079:39 | SideEffect | m1079_8 | -| ir.cpp:1080:5:1080:5 | Address | &:r1080_1 | -| ir.cpp:1080:5:1080:5 | Address | &:r1080_7 | -| ir.cpp:1080:5:1080:5 | Address | &:r1080_15 | -| ir.cpp:1080:14:1080:14 | Address | &:r1080_33 | -| ir.cpp:1080:18:1080:18 | Address | &:r1080_2 | -| ir.cpp:1080:18:1080:18 | Address | &:r1080_8 | -| ir.cpp:1080:18:1080:18 | Address | &:r1080_16 | -| ir.cpp:1080:18:1080:18 | Address | &:r1080_27 | -| ir.cpp:1080:18:1080:18 | Address | &:r1080_36 | -| ir.cpp:1080:18:1080:18 | Address | &:r1080_42 | -| ir.cpp:1080:18:1080:18 | Address | &:r1080_42 | -| ir.cpp:1080:18:1080:18 | Arg(0) | 0:r1080_28 | -| ir.cpp:1080:18:1080:18 | Arg(this) | this:r0_1 | -| ir.cpp:1080:18:1080:18 | Arg(this) | this:r0_3 | -| ir.cpp:1080:18:1080:18 | Arg(this) | this:r0_5 | -| ir.cpp:1080:18:1080:18 | Arg(this) | this:r0_7 | -| ir.cpp:1080:18:1080:18 | Arg(this) | this:r1080_42 | -| ir.cpp:1080:18:1080:18 | CallTarget | func:r1080_10 | -| ir.cpp:1080:18:1080:18 | CallTarget | func:r1080_18 | -| ir.cpp:1080:18:1080:18 | CallTarget | func:r1080_26 | -| ir.cpp:1080:18:1080:18 | CallTarget | func:r1080_35 | -| ir.cpp:1080:18:1080:18 | CallTarget | func:r1080_43 | -| ir.cpp:1080:18:1080:18 | ChiPartial | partial:m1080_12 | -| ir.cpp:1080:18:1080:18 | ChiPartial | partial:m1080_20 | -| ir.cpp:1080:18:1080:18 | ChiPartial | partial:m1080_30 | -| ir.cpp:1080:18:1080:18 | ChiPartial | partial:m1080_37 | -| ir.cpp:1080:18:1080:18 | ChiPartial | partial:m1080_45 | -| ir.cpp:1080:18:1080:18 | ChiPartial | partial:m1080_48 | -| ir.cpp:1080:18:1080:18 | ChiTotal | total:m1079_4 | -| ir.cpp:1080:18:1080:18 | ChiTotal | total:m1080_13 | -| ir.cpp:1080:18:1080:18 | ChiTotal | total:m1080_23 | -| ir.cpp:1080:18:1080:18 | ChiTotal | total:m1080_24 | -| ir.cpp:1080:18:1080:18 | ChiTotal | total:m1080_31 | -| ir.cpp:1080:18:1080:18 | ChiTotal | total:m1080_38 | -| ir.cpp:1080:18:1080:18 | Condition | r1080_29 | -| ir.cpp:1080:18:1080:18 | Load | m1079_6 | -| ir.cpp:1080:18:1080:18 | Load | m1080_6 | -| ir.cpp:1080:18:1080:18 | Load | m1080_6 | -| ir.cpp:1080:18:1080:18 | Load | m1080_22 | -| ir.cpp:1080:18:1080:18 | Phi | from 0:m1080_14 | -| ir.cpp:1080:18:1080:18 | Phi | from 0:~m1080_21 | -| ir.cpp:1080:18:1080:18 | Phi | from 4:m1080_49 | -| ir.cpp:1080:18:1080:18 | Phi | from 4:~m1080_46 | -| ir.cpp:1080:18:1080:18 | SideEffect | m1080_23 | -| ir.cpp:1080:18:1080:18 | SideEffect | ~m1079_4 | -| ir.cpp:1080:18:1080:18 | SideEffect | ~m1080_13 | -| ir.cpp:1080:18:1080:18 | SideEffect | ~m1080_24 | -| ir.cpp:1080:18:1080:18 | SideEffect | ~m1080_31 | -| ir.cpp:1080:18:1080:18 | SideEffect | ~m1080_38 | -| ir.cpp:1080:18:1080:18 | StoreValue | r1080_5 | -| ir.cpp:1080:18:1080:18 | StoreValue | r1080_11 | -| ir.cpp:1080:18:1080:18 | StoreValue | r1080_19 | -| ir.cpp:1080:18:1080:18 | Unary | r1080_3 | -| ir.cpp:1080:18:1080:18 | Unary | r1080_4 | -| ir.cpp:1080:18:1080:18 | Unary | r1080_9 | -| ir.cpp:1080:18:1080:18 | Unary | r1080_17 | -| ir.cpp:1080:18:1080:18 | Unary | r1080_25 | -| ir.cpp:1080:18:1080:18 | Unary | r1080_34 | -| ir.cpp:1080:18:1080:18 | Unary | r1080_44 | -| ir.cpp:1080:18:1080:19 | Load | ~m1080_38 | -| ir.cpp:1080:18:1080:19 | StoreValue | r1080_39 | -| ir.cpp:1081:13:1081:13 | Address | &:r1081_1 | -| ir.cpp:1081:13:1081:13 | Left | r1081_2 | -| ir.cpp:1081:13:1081:13 | Load | m1080_40 | -| ir.cpp:1081:13:1081:17 | Condition | r1081_4 | -| ir.cpp:1081:17:1081:17 | Right | r1081_3 | -| ir.cpp:1086:5:1086:5 | Address | &:r1086_1 | -| ir.cpp:1086:5:1086:5 | Address | &:r1086_7 | -| ir.cpp:1086:5:1086:5 | Address | &:r1086_15 | -| ir.cpp:1086:21:1086:21 | Address | &:r1086_42 | -| ir.cpp:1086:25:1086:25 | Address | &:r1086_2 | -| ir.cpp:1086:25:1086:25 | Address | &:r1086_8 | -| ir.cpp:1086:25:1086:25 | Address | &:r1086_16 | -| ir.cpp:1086:25:1086:25 | Address | &:r1086_27 | -| ir.cpp:1086:25:1086:25 | Address | &:r1086_33 | -| ir.cpp:1086:25:1086:25 | Address | &:r1086_33 | -| ir.cpp:1086:25:1086:25 | Arg(0) | 0:r1086_28 | -| ir.cpp:1086:25:1086:25 | Arg(this) | this:r0_9 | -| ir.cpp:1086:25:1086:25 | Arg(this) | this:r0_11 | -| ir.cpp:1086:25:1086:25 | Arg(this) | this:r0_13 | -| ir.cpp:1086:25:1086:25 | Arg(this) | this:r0_15 | -| ir.cpp:1086:25:1086:25 | Arg(this) | this:r1086_33 | -| ir.cpp:1086:25:1086:25 | CallTarget | func:r1086_10 | -| ir.cpp:1086:25:1086:25 | CallTarget | func:r1086_18 | -| ir.cpp:1086:25:1086:25 | CallTarget | func:r1086_26 | -| ir.cpp:1086:25:1086:25 | CallTarget | func:r1086_34 | -| ir.cpp:1086:25:1086:25 | CallTarget | func:r1086_44 | -| ir.cpp:1086:25:1086:25 | ChiPartial | partial:m1086_12 | -| ir.cpp:1086:25:1086:25 | ChiPartial | partial:m1086_20 | -| ir.cpp:1086:25:1086:25 | ChiPartial | partial:m1086_30 | -| ir.cpp:1086:25:1086:25 | ChiPartial | partial:m1086_36 | -| ir.cpp:1086:25:1086:25 | ChiPartial | partial:m1086_39 | -| ir.cpp:1086:25:1086:25 | ChiPartial | partial:m1086_46 | -| ir.cpp:1086:25:1086:25 | ChiTotal | total:m1080_31 | -| ir.cpp:1086:25:1086:25 | ChiTotal | total:m1086_13 | -| ir.cpp:1086:25:1086:25 | ChiTotal | total:m1086_23 | -| ir.cpp:1086:25:1086:25 | ChiTotal | total:m1086_24 | -| ir.cpp:1086:25:1086:25 | ChiTotal | total:m1086_31 | -| ir.cpp:1086:25:1086:25 | ChiTotal | total:m1086_47 | -| ir.cpp:1086:25:1086:25 | Condition | r1086_29 | -| ir.cpp:1086:25:1086:25 | Load | m1079_6 | -| ir.cpp:1086:25:1086:25 | Load | m1086_6 | -| ir.cpp:1086:25:1086:25 | Load | m1086_6 | -| ir.cpp:1086:25:1086:25 | Load | m1086_22 | -| ir.cpp:1086:25:1086:25 | Phi | from 5:m1086_14 | -| ir.cpp:1086:25:1086:25 | Phi | from 5:~m1086_21 | -| ir.cpp:1086:25:1086:25 | Phi | from 7:m1086_40 | -| ir.cpp:1086:25:1086:25 | Phi | from 7:~m1086_37 | -| ir.cpp:1086:25:1086:25 | SideEffect | m1086_23 | -| ir.cpp:1086:25:1086:25 | SideEffect | ~m1080_31 | -| ir.cpp:1086:25:1086:25 | SideEffect | ~m1086_13 | -| ir.cpp:1086:25:1086:25 | SideEffect | ~m1086_24 | -| ir.cpp:1086:25:1086:25 | SideEffect | ~m1086_31 | -| ir.cpp:1086:25:1086:25 | SideEffect | ~m1086_47 | -| ir.cpp:1086:25:1086:25 | StoreValue | r1086_5 | -| ir.cpp:1086:25:1086:25 | StoreValue | r1086_11 | -| ir.cpp:1086:25:1086:25 | StoreValue | r1086_19 | -| ir.cpp:1086:25:1086:25 | Unary | r1086_3 | -| ir.cpp:1086:25:1086:25 | Unary | r1086_4 | -| ir.cpp:1086:25:1086:25 | Unary | r1086_9 | -| ir.cpp:1086:25:1086:25 | Unary | r1086_17 | -| ir.cpp:1086:25:1086:25 | Unary | r1086_25 | -| ir.cpp:1086:25:1086:25 | Unary | r1086_35 | -| ir.cpp:1086:25:1086:25 | Unary | r1086_43 | -| ir.cpp:1086:25:1086:25 | Unary | r1086_45 | -| ir.cpp:1086:25:1086:26 | StoreValue | r1086_50 | -| ir.cpp:1086:25:1086:26 | Unary | r1086_48 | -| ir.cpp:1086:25:1086:26 | Unary | r1086_49 | -| ir.cpp:1087:13:1087:13 | Address | &:r1087_1 | -| ir.cpp:1087:13:1087:13 | Address | &:r1087_2 | -| ir.cpp:1087:13:1087:13 | Left | r1087_3 | -| ir.cpp:1087:13:1087:13 | Load | m1086_51 | -| ir.cpp:1087:13:1087:13 | Load | ~m1086_47 | -| ir.cpp:1087:13:1087:17 | Condition | r1087_5 | -| ir.cpp:1087:17:1087:17 | Right | r1087_4 | -| ir.cpp:1090:5:1090:5 | Phi | from 6:~m1086_31 | -| ir.cpp:1090:5:1090:5 | Phi | from 9:~m1086_47 | -| ir.cpp:1110:5:1110:11 | Address | &:r1110_7 | -| ir.cpp:1110:5:1110:11 | ChiPartial | partial:m1110_3 | -| ir.cpp:1110:5:1110:11 | ChiTotal | total:m1110_2 | -| ir.cpp:1110:5:1110:11 | Load | m1112_4 | -| ir.cpp:1110:5:1110:11 | SideEffect | ~m1111_2 | -| ir.cpp:1110:17:1110:17 | Address | &:r1110_5 | -| ir.cpp:1111:3:1111:14 | ChiPartial | partial:m1111_1 | -| ir.cpp:1111:3:1111:14 | ChiTotal | total:m1110_4 | -| ir.cpp:1111:3:1111:14 | SideEffect | ~m1110_4 | -| ir.cpp:1112:3:1112:11 | Address | &:r1112_1 | -| ir.cpp:1112:10:1112:10 | Address | &:r1112_2 | -| ir.cpp:1112:10:1112:10 | Load | m1110_6 | -| ir.cpp:1112:10:1112:10 | StoreValue | r1112_3 | -| ir.cpp:1115:13:1115:30 | ChiPartial | partial:m1115_3 | -| ir.cpp:1115:13:1115:30 | ChiTotal | total:m1115_2 | -| ir.cpp:1115:13:1115:30 | SideEffect | ~m1117_2 | -| ir.cpp:1115:46:1115:46 | Address | &:r1115_5 | -| ir.cpp:1115:46:1115:46 | Address | &:r1115_5 | -| ir.cpp:1115:46:1115:46 | Address | &:r1115_7 | -| ir.cpp:1115:46:1115:46 | Address | &:r1115_7 | -| ir.cpp:1115:46:1115:46 | Load | m1115_6 | -| ir.cpp:1115:46:1115:46 | SideEffect | m1115_8 | -| ir.cpp:1115:62:1115:62 | Address | &:r1115_9 | -| ir.cpp:1115:79:1115:79 | Address | &:r1115_11 | -| ir.cpp:1115:79:1115:79 | Address | &:r1115_11 | -| ir.cpp:1115:79:1115:79 | Address | &:r1115_13 | -| ir.cpp:1115:79:1115:79 | Address | &:r1115_13 | -| ir.cpp:1115:79:1115:79 | Load | m1115_12 | -| ir.cpp:1115:79:1115:79 | SideEffect | m1115_14 | -| ir.cpp:1115:95:1115:95 | Address | &:r1115_15 | -| ir.cpp:1117:3:1121:6 | ChiPartial | partial:m1117_1 | -| ir.cpp:1117:3:1121:6 | ChiTotal | total:m1115_4 | -| ir.cpp:1117:3:1121:6 | SideEffect | ~m1115_4 | -| ir.cpp:1120:13:1120:13 | Address | &:r1120_1 | -| ir.cpp:1120:13:1120:13 | AsmOperand(0) | 0:r1120_3 | -| ir.cpp:1120:13:1120:13 | Load | m1115_6 | -| ir.cpp:1120:13:1120:13 | Unary | r1120_2 | -| ir.cpp:1120:23:1120:23 | AsmOperand(1) | 1:r1120_4 | -| ir.cpp:1120:33:1120:33 | Address | &:r1120_5 | -| ir.cpp:1120:33:1120:33 | Address | &:r1120_6 | -| ir.cpp:1120:33:1120:33 | AsmOperand(2) | 2:r1120_7 | -| ir.cpp:1120:33:1120:33 | Load | m1115_12 | -| ir.cpp:1120:33:1120:33 | Load | ~m1115_14 | -| ir.cpp:1120:42:1120:42 | Address | &:r1120_8 | -| ir.cpp:1120:42:1120:42 | AsmOperand(3) | 3:r1120_9 | -| ir.cpp:1120:42:1120:42 | Load | m1115_16 | -| ir.cpp:1124:6:1124:23 | ChiPartial | partial:m1124_3 | -| ir.cpp:1124:6:1124:23 | ChiTotal | total:m1124_2 | -| ir.cpp:1124:6:1124:23 | SideEffect | m1124_3 | -| ir.cpp:1127:9:1127:9 | Address | &:r1127_1 | -| ir.cpp:1128:9:1128:9 | Address | &:r1128_1 | -| ir.cpp:1129:29:1129:29 | Address | &:r1129_1 | -| ir.cpp:1139:6:1139:30 | ChiPartial | partial:m1139_3 | -| ir.cpp:1139:6:1139:30 | ChiTotal | total:m1139_2 | -| ir.cpp:1139:6:1139:30 | SideEffect | m1139_3 | -| ir.cpp:1141:5:1141:20 | Address | &:r1141_1 | -| ir.cpp:1141:5:1141:20 | Address | &:r1141_5 | -| ir.cpp:1141:5:1141:20 | Address | &:r1141_10 | -| ir.cpp:1141:5:1141:20 | Address | &:r1141_10 | -| ir.cpp:1141:5:1141:20 | Condition | r1141_8 | -| ir.cpp:1141:5:1141:20 | Left | r1141_6 | -| ir.cpp:1141:5:1141:20 | Left | r1141_11 | -| ir.cpp:1141:5:1141:20 | Load | m1141_4 | -| ir.cpp:1141:5:1141:20 | Load | m1141_4 | -| ir.cpp:1141:5:1141:20 | Phi | from 0:m1141_3 | -| ir.cpp:1141:5:1141:20 | Phi | from 2:m1141_14 | -| ir.cpp:1141:5:1141:20 | Right | r1141_7 | -| ir.cpp:1141:5:1141:20 | Right | r1141_12 | -| ir.cpp:1141:5:1141:20 | StoreValue | r1141_2 | -| ir.cpp:1141:5:1141:20 | StoreValue | r1141_13 | -| ir.cpp:1144:6:1144:23 | ChiPartial | partial:m1144_3 | -| ir.cpp:1144:6:1144:23 | ChiTotal | total:m1144_2 | -| ir.cpp:1144:6:1144:23 | Phi | from 2:~m1144_10 | -| ir.cpp:1144:6:1144:23 | Phi | from 7:~m1156_8 | -| ir.cpp:1144:6:1144:23 | Phi | from 8:~m1144_4 | -| ir.cpp:1144:6:1144:23 | Phi | from 10:~m1144_4 | -| ir.cpp:1144:6:1144:23 | SideEffect | ~m1144_7 | -| ir.cpp:1144:30:1144:30 | Address | &:r1144_5 | -| ir.cpp:1146:9:1146:9 | Address | &:r1146_1 | -| ir.cpp:1146:12:1146:13 | StoreValue | r1146_2 | -| ir.cpp:1147:9:1147:9 | Address | &:r1147_1 | -| ir.cpp:1147:9:1147:9 | Condition | r1147_2 | -| ir.cpp:1147:9:1147:9 | Load | m1144_6 | -| ir.cpp:1148:7:1148:28 | Address | &:r1148_1 | -| ir.cpp:1148:7:1148:28 | Address | &:r1148_1 | -| ir.cpp:1148:7:1148:28 | Load | m1148_4 | -| ir.cpp:1148:13:1148:28 | StoreValue | r1148_3 | -| ir.cpp:1148:13:1148:28 | Unary | r1148_2 | -| ir.cpp:1150:14:1150:14 | Address | &:r1150_1 | -| ir.cpp:1150:14:1150:14 | Left | r1150_2 | -| ir.cpp:1150:14:1150:14 | Load | m1146_3 | -| ir.cpp:1150:14:1150:18 | Condition | r1150_4 | -| ir.cpp:1150:18:1150:18 | Right | r1150_3 | -| ir.cpp:1153:5:1153:5 | Address | &:r1153_2 | -| ir.cpp:1153:9:1153:9 | StoreValue | r1153_1 | -| ir.cpp:1155:22:1155:22 | Address | &:r1155_2 | -| ir.cpp:1155:22:1155:22 | Address | &:r1155_2 | -| ir.cpp:1155:22:1155:22 | Address | &:r1155_4 | -| ir.cpp:1155:22:1155:22 | Load | m1155_3 | -| ir.cpp:1156:5:1156:19 | Address | &:r1156_1 | -| ir.cpp:1156:5:1156:19 | Address | &:r1156_1 | -| ir.cpp:1156:5:1156:19 | Address | &:r1156_1 | -| ir.cpp:1156:5:1156:19 | Arg(this) | this:r1156_1 | -| ir.cpp:1156:5:1156:19 | CallTarget | func:r1156_3 | -| ir.cpp:1156:5:1156:19 | ChiPartial | partial:m1156_7 | -| ir.cpp:1156:5:1156:19 | ChiPartial | partial:m1156_10 | -| ir.cpp:1156:5:1156:19 | ChiTotal | total:m1144_4 | -| ir.cpp:1156:5:1156:19 | ChiTotal | total:m1156_2 | -| ir.cpp:1156:5:1156:19 | Load | m1156_11 | -| ir.cpp:1156:5:1156:19 | SideEffect | ~m1144_4 | -| ir.cpp:1156:18:1156:18 | Address | &:r1156_4 | -| ir.cpp:1156:18:1156:18 | Address | &:r1156_5 | -| ir.cpp:1156:18:1156:18 | Arg(0) | 0:r1156_5 | -| ir.cpp:1156:18:1156:18 | Load | m1155_3 | -| ir.cpp:1156:18:1156:18 | SideEffect | ~m1155_5 | -| ir.cpp:1158:24:1158:24 | Address | &:r1158_2 | -| ir.cpp:1158:24:1158:24 | Address | &:r1158_2 | -| ir.cpp:1158:24:1158:24 | Address | &:r1158_4 | -| ir.cpp:1158:24:1158:24 | Load | m1158_3 | -| ir.cpp:1164:6:1164:16 | ChiPartial | partial:m1164_3 | -| ir.cpp:1164:6:1164:16 | ChiTotal | total:m1164_2 | -| ir.cpp:1164:6:1164:16 | SideEffect | m1164_3 | -| ir.cpp:1164:22:1164:22 | Address | &:r1164_5 | -| ir.cpp:1165:18:1165:20 | Address | &:r1165_1 | -| ir.cpp:1165:18:1165:20 | Left | r1165_1 | -| ir.cpp:1165:18:1165:20 | Left | r1165_1 | -| ir.cpp:1165:18:1165:20 | Left | r1165_1 | -| ir.cpp:1165:18:1165:20 | Left | r1165_1 | -| ir.cpp:1165:23:1165:37 | Address | &:r1165_4 | -| ir.cpp:1165:23:1165:37 | Address | &:r1165_9 | -| ir.cpp:1165:23:1165:37 | Address | &:r1165_14 | -| ir.cpp:1165:23:1165:37 | Address | &:r1165_19 | -| ir.cpp:1165:23:1165:37 | Right | r1165_3 | -| ir.cpp:1165:23:1165:37 | Right | r1165_8 | -| ir.cpp:1165:23:1165:37 | Right | r1165_13 | -| ir.cpp:1165:23:1165:37 | Right | r1165_18 | -| ir.cpp:1165:26:1165:26 | ChiPartial | partial:m1165_6 | -| ir.cpp:1165:26:1165:26 | ChiTotal | total:m1165_2 | -| ir.cpp:1165:26:1165:26 | StoreValue | r1165_5 | -| ir.cpp:1165:29:1165:29 | ChiPartial | partial:m1165_11 | -| ir.cpp:1165:29:1165:29 | ChiTotal | total:m1165_7 | -| ir.cpp:1165:29:1165:29 | StoreValue | r1165_10 | -| ir.cpp:1165:32:1165:32 | ChiPartial | partial:m1165_16 | -| ir.cpp:1165:32:1165:32 | ChiTotal | total:m1165_12 | -| ir.cpp:1165:32:1165:32 | StoreValue | r1165_15 | -| ir.cpp:1165:35:1165:35 | ChiPartial | partial:m1165_21 | -| ir.cpp:1165:35:1165:35 | ChiTotal | total:m1165_17 | -| ir.cpp:1165:35:1165:35 | StoreValue | r1165_20 | -| ir.cpp:1166:7:1166:7 | Address | &:r1166_1 | -| ir.cpp:1166:11:1166:13 | Left | r1166_2 | -| ir.cpp:1166:11:1166:16 | Address | &:r1166_5 | -| ir.cpp:1166:11:1166:16 | Load | ~m1165_22 | -| ir.cpp:1166:11:1166:16 | StoreValue | r1166_6 | -| ir.cpp:1166:15:1166:15 | Address | &:r1166_3 | -| ir.cpp:1166:15:1166:15 | Load | m1164_6 | -| ir.cpp:1166:15:1166:15 | Right | r1166_4 | -| ir.cpp:1167:3:1167:5 | Left | r1167_3 | -| ir.cpp:1167:3:1167:8 | Address | &:r1167_6 | -| ir.cpp:1167:3:1167:12 | ChiPartial | partial:m1167_7 | -| ir.cpp:1167:3:1167:12 | ChiTotal | total:m1165_22 | -| ir.cpp:1167:7:1167:7 | Address | &:r1167_4 | -| ir.cpp:1167:7:1167:7 | Load | m1164_6 | -| ir.cpp:1167:7:1167:7 | Right | r1167_5 | -| ir.cpp:1167:12:1167:12 | Address | &:r1167_1 | -| ir.cpp:1167:12:1167:12 | Load | m1166_7 | -| ir.cpp:1167:12:1167:12 | StoreValue | r1167_2 | -| ir.cpp:1168:18:1168:28 | Address | &:r1168_1 | -| ir.cpp:1168:32:1168:78 | Arg(2) | 2:r1168_6 | -| ir.cpp:1168:32:1168:78 | StoreValue | r1168_10 | -| ir.cpp:1168:56:1168:58 | Address | &:r1168_2 | -| ir.cpp:1168:56:1168:58 | Arg(0) | 0:r1168_3 | -| ir.cpp:1168:56:1168:58 | Load | m1167_8 | -| ir.cpp:1168:61:1168:63 | Address | &:r1168_4 | -| ir.cpp:1168:61:1168:63 | Arg(1) | 1:r1168_5 | -| ir.cpp:1168:61:1168:63 | Load | m1167_8 | -| ir.cpp:1168:71:1168:71 | Arg(3) | 3:r1168_7 | -| ir.cpp:1168:74:1168:74 | Arg(4) | 4:r1168_8 | -| ir.cpp:1168:77:1168:77 | Arg(5) | 5:r1168_9 | -| ir.cpp:1169:3:1169:5 | Address | &:r1169_6 | -| ir.cpp:1169:9:1169:11 | Address | &:r1169_1 | -| ir.cpp:1169:9:1169:11 | Left | r1169_2 | -| ir.cpp:1169:9:1169:11 | Load | m1167_8 | -| ir.cpp:1169:9:1169:25 | StoreValue | r1169_5 | -| ir.cpp:1169:15:1169:25 | Address | &:r1169_3 | -| ir.cpp:1169:15:1169:25 | Load | m1168_11 | -| ir.cpp:1169:15:1169:25 | Right | r1169_4 | -| ir.cpp:1174:5:1174:21 | Address | &:r1174_7 | -| ir.cpp:1174:5:1174:21 | ChiPartial | partial:m1174_3 | -| ir.cpp:1174:5:1174:21 | ChiTotal | total:m1174_2 | -| ir.cpp:1174:5:1174:21 | Load | m1177_4 | -| ir.cpp:1174:5:1174:21 | SideEffect | m1174_3 | -| ir.cpp:1174:27:1174:27 | Address | &:r1174_5 | -| ir.cpp:1175:7:1175:7 | Address | &:r1175_1 | -| ir.cpp:1176:3:1176:8 | CallTarget | func:r1176_1 | -| ir.cpp:1176:10:1176:11 | Address | &:r1176_4 | -| ir.cpp:1176:10:1176:11 | Arg(0) | 0:r1176_4 | -| ir.cpp:1176:10:1176:11 | ChiPartial | partial:m1176_11 | -| ir.cpp:1176:10:1176:11 | ChiTotal | total:m1175_2 | -| ir.cpp:1176:10:1176:11 | Unary | r1176_3 | -| ir.cpp:1176:11:1176:11 | Unary | r1176_2 | -| ir.cpp:1176:14:1176:15 | Address | &:r1176_7 | -| ir.cpp:1176:14:1176:15 | Arg(1) | 1:r1176_7 | -| ir.cpp:1176:14:1176:15 | SideEffect | ~m1174_6 | -| ir.cpp:1176:14:1176:15 | Unary | r1176_6 | -| ir.cpp:1176:15:1176:15 | Unary | r1176_5 | -| ir.cpp:1176:18:1176:28 | Arg(2) | 2:r1176_8 | -| ir.cpp:1176:18:1176:28 | BufferSize | r1176_8 | -| ir.cpp:1176:18:1176:28 | BufferSize | r1176_8 | -| ir.cpp:1177:3:1177:11 | Address | &:r1177_1 | -| ir.cpp:1177:10:1177:10 | Address | &:r1177_2 | -| ir.cpp:1177:10:1177:10 | Load | m1176_12 | -| ir.cpp:1177:10:1177:10 | StoreValue | r1177_3 | -| ir.cpp:1180:8:1180:23 | Address | &:r1180_5 | -| ir.cpp:1180:8:1180:23 | ChiPartial | partial:m1180_3 | -| ir.cpp:1180:8:1180:23 | ChiTotal | total:m1180_2 | -| ir.cpp:1180:8:1180:23 | Load | m1181_11 | -| ir.cpp:1180:8:1180:23 | SideEffect | ~m1181_8 | -| ir.cpp:1181:3:1181:23 | Address | &:r1181_1 | -| ir.cpp:1181:3:1181:23 | Address | &:r1181_1 | -| ir.cpp:1181:3:1181:23 | Arg(this) | this:r1181_1 | -| ir.cpp:1181:3:1181:23 | CallTarget | func:r1181_3 | -| ir.cpp:1181:3:1181:23 | ChiPartial | partial:m1181_7 | -| ir.cpp:1181:3:1181:23 | ChiPartial | partial:m1181_10 | -| ir.cpp:1181:3:1181:23 | ChiTotal | total:m1180_4 | -| ir.cpp:1181:3:1181:23 | ChiTotal | total:m1181_2 | -| ir.cpp:1181:3:1181:23 | SideEffect | ~m1180_4 | -| ir.cpp:1181:17:1181:21 | Address | &:r1181_5 | -| ir.cpp:1181:17:1181:21 | Arg(0) | 0:r1181_5 | -| ir.cpp:1181:17:1181:21 | SideEffect | ~m1180_3 | -| ir.cpp:1181:17:1181:21 | Unary | r1181_4 | -| ir.cpp:1184:6:1184:16 | ChiPartial | partial:m1184_3 | -| ir.cpp:1184:6:1184:16 | ChiTotal | total:m1184_2 | -| ir.cpp:1184:6:1184:16 | SideEffect | m1184_3 | -| ir.cpp:1184:22:1184:22 | Address | &:r1184_5 | -| ir.cpp:1185:9:1185:9 | Address | &:r1185_1 | -| ir.cpp:1185:12:1185:13 | StoreValue | r1185_2 | -| ir.cpp:1186:12:1186:12 | Address | &:r1186_1 | -| ir.cpp:1186:12:1186:12 | Condition | r1186_2 | -| ir.cpp:1186:12:1186:12 | Load | m1184_6 | -| ir.cpp:1188:9:1188:9 | Address | &:r1188_2 | -| ir.cpp:1188:13:1188:13 | StoreValue | r1188_1 | -| ir.cpp:1190:9:1190:9 | Address | &:r1190_2 | -| ir.cpp:1190:9:1190:9 | Phi | from 0:m1185_3 | -| ir.cpp:1190:9:1190:9 | Phi | from 1:m1188_3 | -| ir.cpp:1190:13:1190:13 | Address | &:r1190_3 | -| ir.cpp:1190:13:1190:13 | Load | m1190_1 | -| ir.cpp:1190:13:1190:13 | StoreValue | r1190_4 | -| ir.cpp:1193:6:1193:28 | ChiPartial | partial:m1193_3 | -| ir.cpp:1193:6:1193:28 | ChiTotal | total:m1193_2 | -| ir.cpp:1193:6:1193:28 | SideEffect | m1193_3 | -| ir.cpp:1193:34:1193:34 | Address | &:r1193_5 | +| ir.cpp:1126:6:1126:18 | ChiPartial | partial:m1126_3 | +| ir.cpp:1126:6:1126:18 | ChiTotal | total:m1126_2 | +| ir.cpp:1126:6:1126:18 | SideEffect | ~m1137_1 | +| ir.cpp:1126:44:1126:44 | Address | &:r1126_5 | +| ir.cpp:1126:44:1126:44 | Address | &:r1126_5 | +| ir.cpp:1126:44:1126:44 | Address | &:r1126_7 | +| ir.cpp:1126:44:1126:44 | Address | &:r1126_7 | +| ir.cpp:1126:44:1126:44 | Load | m1126_6 | +| ir.cpp:1126:44:1126:44 | SideEffect | m1126_8 | +| ir.cpp:1127:5:1127:5 | Address | &:r1127_1 | +| ir.cpp:1127:5:1127:5 | Address | &:r1127_7 | +| ir.cpp:1127:5:1127:5 | Address | &:r1127_13 | +| ir.cpp:1127:14:1127:14 | Address | &:r1127_34 | +| ir.cpp:1127:18:1127:18 | Address | &:r1127_2 | +| ir.cpp:1127:18:1127:18 | Address | &:r1127_8 | +| ir.cpp:1127:18:1127:18 | Address | &:r1127_14 | +| ir.cpp:1127:18:1127:18 | Address | &:r1127_37 | +| ir.cpp:1127:18:1127:18 | Address | &:r1127_43 | +| ir.cpp:1127:18:1127:18 | Address | &:r1127_43 | +| ir.cpp:1127:18:1127:18 | Arg(this) | this:r0_1 | +| ir.cpp:1127:18:1127:18 | Arg(this) | this:r0_3 | +| ir.cpp:1127:18:1127:18 | Arg(this) | this:r0_5 | +| ir.cpp:1127:18:1127:18 | Arg(this) | this:r0_6 | +| ir.cpp:1127:18:1127:18 | Arg(this) | this:r0_13 | +| ir.cpp:1127:18:1127:18 | Arg(this) | this:r1127_43 | +| ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_10 | +| ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_16 | +| ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_22 | +| ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_23 | +| ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_36 | +| ir.cpp:1127:18:1127:18 | CallTarget | func:r1127_44 | +| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_26 | +| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_28 | +| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_31 | +| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_38 | +| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_46 | +| ir.cpp:1127:18:1127:18 | ChiPartial | partial:m1127_49 | +| ir.cpp:1127:18:1127:18 | ChiTotal | total:m0_7 | +| ir.cpp:1127:18:1127:18 | ChiTotal | total:m1127_19 | +| ir.cpp:1127:18:1127:18 | ChiTotal | total:m1127_20 | +| ir.cpp:1127:18:1127:18 | ChiTotal | total:m1127_27 | +| ir.cpp:1127:18:1127:18 | ChiTotal | total:m1127_32 | +| ir.cpp:1127:18:1127:18 | ChiTotal | total:m1127_39 | +| ir.cpp:1127:18:1127:18 | Condition | r1127_30 | +| ir.cpp:1127:18:1127:18 | Load | m1126_6 | +| ir.cpp:1127:18:1127:18 | Load | m1127_6 | +| ir.cpp:1127:18:1127:18 | Load | m1127_6 | +| ir.cpp:1127:18:1127:18 | Phi | from 0:m1127_12 | +| ir.cpp:1127:18:1127:18 | Phi | from 0:~m1126_4 | +| ir.cpp:1127:18:1127:18 | Phi | from 4:m1127_50 | +| ir.cpp:1127:18:1127:18 | Phi | from 4:~m1127_47 | +| ir.cpp:1127:18:1127:18 | SideEffect | m1127_19 | +| ir.cpp:1127:18:1127:18 | SideEffect | ~m1127_20 | +| ir.cpp:1127:18:1127:18 | SideEffect | ~m1127_27 | +| ir.cpp:1127:18:1127:18 | SideEffect | ~m1127_32 | +| ir.cpp:1127:18:1127:18 | SideEffect | ~m1127_39 | +| ir.cpp:1127:18:1127:18 | StoreValue | r1127_5 | +| ir.cpp:1127:18:1127:18 | StoreValue | r1127_11 | +| ir.cpp:1127:18:1127:18 | StoreValue | r1127_17 | +| ir.cpp:1127:18:1127:18 | Unary | r1127_3 | +| ir.cpp:1127:18:1127:18 | Unary | r1127_4 | +| ir.cpp:1127:18:1127:18 | Unary | r1127_9 | +| ir.cpp:1127:18:1127:18 | Unary | r1127_15 | +| ir.cpp:1127:18:1127:18 | Unary | r1127_21 | +| ir.cpp:1127:18:1127:18 | Unary | r1127_24 | +| ir.cpp:1127:18:1127:18 | Unary | r1127_35 | +| ir.cpp:1127:18:1127:18 | Unary | r1127_45 | +| ir.cpp:1127:18:1127:19 | Load | ~m1127_39 | +| ir.cpp:1127:18:1127:19 | StoreValue | r1127_40 | +| ir.cpp:1128:13:1128:13 | Address | &:r1128_1 | +| ir.cpp:1128:13:1128:13 | Left | r1128_2 | +| ir.cpp:1128:13:1128:13 | Load | m1127_41 | +| ir.cpp:1128:13:1128:17 | Condition | r1128_4 | +| ir.cpp:1128:17:1128:17 | Right | r1128_3 | +| ir.cpp:1133:5:1133:5 | Address | &:r1133_1 | +| ir.cpp:1133:5:1133:5 | Address | &:r1133_7 | +| ir.cpp:1133:5:1133:5 | Address | &:r1133_13 | +| ir.cpp:1133:21:1133:21 | Address | &:r1133_43 | +| ir.cpp:1133:25:1133:25 | Address | &:r1133_2 | +| ir.cpp:1133:25:1133:25 | Address | &:r1133_8 | +| ir.cpp:1133:25:1133:25 | Address | &:r1133_14 | +| ir.cpp:1133:25:1133:25 | Address | &:r1133_34 | +| ir.cpp:1133:25:1133:25 | Address | &:r1133_34 | +| ir.cpp:1133:25:1133:25 | Arg(this) | this:r0_15 | +| ir.cpp:1133:25:1133:25 | Arg(this) | this:r0_17 | +| ir.cpp:1133:25:1133:25 | Arg(this) | this:r0_19 | +| ir.cpp:1133:25:1133:25 | Arg(this) | this:r0_20 | +| ir.cpp:1133:25:1133:25 | Arg(this) | this:r0_27 | +| ir.cpp:1133:25:1133:25 | Arg(this) | this:r1133_34 | +| ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_10 | +| ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_16 | +| ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_22 | +| ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_23 | +| ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_35 | +| ir.cpp:1133:25:1133:25 | CallTarget | func:r1133_45 | +| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_26 | +| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_28 | +| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_31 | +| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_37 | +| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_40 | +| ir.cpp:1133:25:1133:25 | ChiPartial | partial:m1133_47 | +| ir.cpp:1133:25:1133:25 | ChiTotal | total:m0_21 | +| ir.cpp:1133:25:1133:25 | ChiTotal | total:m1133_19 | +| ir.cpp:1133:25:1133:25 | ChiTotal | total:m1133_20 | +| ir.cpp:1133:25:1133:25 | ChiTotal | total:m1133_27 | +| ir.cpp:1133:25:1133:25 | ChiTotal | total:m1133_32 | +| ir.cpp:1133:25:1133:25 | ChiTotal | total:m1133_48 | +| ir.cpp:1133:25:1133:25 | Condition | r1133_30 | +| ir.cpp:1133:25:1133:25 | Load | m1126_6 | +| ir.cpp:1133:25:1133:25 | Load | m1133_6 | +| ir.cpp:1133:25:1133:25 | Load | m1133_6 | +| ir.cpp:1133:25:1133:25 | Phi | from 5:m1133_12 | +| ir.cpp:1133:25:1133:25 | Phi | from 5:~m1127_32 | +| ir.cpp:1133:25:1133:25 | Phi | from 7:m1133_41 | +| ir.cpp:1133:25:1133:25 | Phi | from 7:~m1133_38 | +| ir.cpp:1133:25:1133:25 | SideEffect | m1133_19 | +| ir.cpp:1133:25:1133:25 | SideEffect | ~m1133_20 | +| ir.cpp:1133:25:1133:25 | SideEffect | ~m1133_27 | +| ir.cpp:1133:25:1133:25 | SideEffect | ~m1133_32 | +| ir.cpp:1133:25:1133:25 | SideEffect | ~m1133_48 | +| ir.cpp:1133:25:1133:25 | StoreValue | r1133_5 | +| ir.cpp:1133:25:1133:25 | StoreValue | r1133_11 | +| ir.cpp:1133:25:1133:25 | StoreValue | r1133_17 | +| ir.cpp:1133:25:1133:25 | Unary | r1133_3 | +| ir.cpp:1133:25:1133:25 | Unary | r1133_4 | +| ir.cpp:1133:25:1133:25 | Unary | r1133_9 | +| ir.cpp:1133:25:1133:25 | Unary | r1133_15 | +| ir.cpp:1133:25:1133:25 | Unary | r1133_21 | +| ir.cpp:1133:25:1133:25 | Unary | r1133_24 | +| ir.cpp:1133:25:1133:25 | Unary | r1133_36 | +| ir.cpp:1133:25:1133:25 | Unary | r1133_44 | +| ir.cpp:1133:25:1133:25 | Unary | r1133_46 | +| ir.cpp:1133:25:1133:26 | StoreValue | r1133_51 | +| ir.cpp:1133:25:1133:26 | Unary | r1133_49 | +| ir.cpp:1133:25:1133:26 | Unary | r1133_50 | +| ir.cpp:1134:13:1134:13 | Address | &:r1134_1 | +| ir.cpp:1134:13:1134:13 | Address | &:r1134_2 | +| ir.cpp:1134:13:1134:13 | Left | r1134_3 | +| ir.cpp:1134:13:1134:13 | Load | m1133_52 | +| ir.cpp:1134:13:1134:13 | Load | ~m1133_48 | +| ir.cpp:1134:13:1134:17 | Condition | r1134_5 | +| ir.cpp:1134:17:1134:17 | Right | r1134_4 | +| ir.cpp:1137:5:1137:5 | Phi | from 6:~m1133_32 | +| ir.cpp:1137:5:1137:5 | Phi | from 9:~m1133_48 | +| ir.cpp:1157:5:1157:11 | Address | &:r1157_7 | +| ir.cpp:1157:5:1157:11 | ChiPartial | partial:m1157_3 | +| ir.cpp:1157:5:1157:11 | ChiTotal | total:m1157_2 | +| ir.cpp:1157:5:1157:11 | Load | m1159_4 | +| ir.cpp:1157:5:1157:11 | SideEffect | ~m1158_2 | +| ir.cpp:1157:17:1157:17 | Address | &:r1157_5 | +| ir.cpp:1158:3:1158:14 | ChiPartial | partial:m1158_1 | +| ir.cpp:1158:3:1158:14 | ChiTotal | total:m1157_4 | +| ir.cpp:1158:3:1158:14 | SideEffect | ~m1157_4 | +| ir.cpp:1159:3:1159:11 | Address | &:r1159_1 | +| ir.cpp:1159:10:1159:10 | Address | &:r1159_2 | +| ir.cpp:1159:10:1159:10 | Load | m1157_6 | +| ir.cpp:1159:10:1159:10 | StoreValue | r1159_3 | +| ir.cpp:1162:13:1162:30 | ChiPartial | partial:m1162_3 | +| ir.cpp:1162:13:1162:30 | ChiTotal | total:m1162_2 | +| ir.cpp:1162:13:1162:30 | SideEffect | ~m1164_2 | +| ir.cpp:1162:46:1162:46 | Address | &:r1162_5 | +| ir.cpp:1162:46:1162:46 | Address | &:r1162_5 | +| ir.cpp:1162:46:1162:46 | Address | &:r1162_7 | +| ir.cpp:1162:46:1162:46 | Address | &:r1162_7 | +| ir.cpp:1162:46:1162:46 | Load | m1162_6 | +| ir.cpp:1162:46:1162:46 | SideEffect | m1162_8 | +| ir.cpp:1162:62:1162:62 | Address | &:r1162_9 | +| ir.cpp:1162:79:1162:79 | Address | &:r1162_11 | +| ir.cpp:1162:79:1162:79 | Address | &:r1162_11 | +| ir.cpp:1162:79:1162:79 | Address | &:r1162_13 | +| ir.cpp:1162:79:1162:79 | Address | &:r1162_13 | +| ir.cpp:1162:79:1162:79 | Load | m1162_12 | +| ir.cpp:1162:79:1162:79 | SideEffect | m1162_14 | +| ir.cpp:1162:95:1162:95 | Address | &:r1162_15 | +| ir.cpp:1164:3:1168:6 | ChiPartial | partial:m1164_1 | +| ir.cpp:1164:3:1168:6 | ChiTotal | total:m1162_4 | +| ir.cpp:1164:3:1168:6 | SideEffect | ~m1162_4 | +| ir.cpp:1167:13:1167:13 | Address | &:r1167_1 | +| ir.cpp:1167:13:1167:13 | AsmOperand(0) | 0:r1167_3 | +| ir.cpp:1167:13:1167:13 | Load | m1162_6 | +| ir.cpp:1167:13:1167:13 | Unary | r1167_2 | +| ir.cpp:1167:23:1167:23 | AsmOperand(1) | 1:r1167_4 | +| ir.cpp:1167:33:1167:33 | Address | &:r1167_5 | +| ir.cpp:1167:33:1167:33 | Address | &:r1167_6 | +| ir.cpp:1167:33:1167:33 | AsmOperand(2) | 2:r1167_7 | +| ir.cpp:1167:33:1167:33 | Load | m1162_12 | +| ir.cpp:1167:33:1167:33 | Load | ~m1162_14 | +| ir.cpp:1167:42:1167:42 | Address | &:r1167_8 | +| ir.cpp:1167:42:1167:42 | AsmOperand(3) | 3:r1167_9 | +| ir.cpp:1167:42:1167:42 | Load | m1162_16 | +| ir.cpp:1171:6:1171:23 | ChiPartial | partial:m1171_3 | +| ir.cpp:1171:6:1171:23 | ChiTotal | total:m1171_2 | +| ir.cpp:1171:6:1171:23 | SideEffect | m1171_3 | +| ir.cpp:1174:9:1174:9 | Address | &:r1174_1 | +| ir.cpp:1175:9:1175:9 | Address | &:r1175_1 | +| ir.cpp:1176:29:1176:29 | Address | &:r1176_1 | +| ir.cpp:1186:6:1186:30 | ChiPartial | partial:m1186_3 | +| ir.cpp:1186:6:1186:30 | ChiTotal | total:m1186_2 | +| ir.cpp:1186:6:1186:30 | SideEffect | m1186_3 | +| ir.cpp:1188:5:1188:20 | Address | &:r1188_1 | +| ir.cpp:1188:5:1188:20 | Address | &:r1188_5 | +| ir.cpp:1188:5:1188:20 | Address | &:r1188_10 | +| ir.cpp:1188:5:1188:20 | Address | &:r1188_10 | +| ir.cpp:1188:5:1188:20 | Condition | r1188_8 | +| ir.cpp:1188:5:1188:20 | Left | r1188_6 | +| ir.cpp:1188:5:1188:20 | Left | r1188_11 | +| ir.cpp:1188:5:1188:20 | Load | m1188_4 | +| ir.cpp:1188:5:1188:20 | Load | m1188_4 | +| ir.cpp:1188:5:1188:20 | Phi | from 0:m1188_3 | +| ir.cpp:1188:5:1188:20 | Phi | from 2:m1188_14 | +| ir.cpp:1188:5:1188:20 | Right | r1188_7 | +| ir.cpp:1188:5:1188:20 | Right | r1188_12 | +| ir.cpp:1188:5:1188:20 | StoreValue | r1188_2 | +| ir.cpp:1188:5:1188:20 | StoreValue | r1188_13 | +| ir.cpp:1191:6:1191:23 | ChiPartial | partial:m1191_3 | +| ir.cpp:1191:6:1191:23 | ChiTotal | total:m1191_2 | +| ir.cpp:1191:6:1191:23 | Phi | from 2:~m1191_10 | +| ir.cpp:1191:6:1191:23 | Phi | from 7:~m1203_8 | +| ir.cpp:1191:6:1191:23 | Phi | from 8:~m1191_4 | +| ir.cpp:1191:6:1191:23 | Phi | from 10:~m1191_4 | +| ir.cpp:1191:6:1191:23 | SideEffect | ~m1191_7 | +| ir.cpp:1191:30:1191:30 | Address | &:r1191_5 | +| ir.cpp:1193:9:1193:9 | Address | &:r1193_1 | +| ir.cpp:1193:12:1193:13 | StoreValue | r1193_2 | | ir.cpp:1194:9:1194:9 | Address | &:r1194_1 | -| ir.cpp:1194:12:1194:13 | StoreValue | r1194_2 | -| ir.cpp:1195:12:1195:12 | Address | &:r1195_1 | -| ir.cpp:1195:12:1195:12 | Condition | r1195_2 | -| ir.cpp:1195:12:1195:12 | Load | m1193_6 | -| ir.cpp:1197:9:1197:9 | Address | &:r1197_2 | -| ir.cpp:1197:13:1197:13 | StoreValue | r1197_1 | -| ir.cpp:1199:9:1199:9 | Address | &:r1199_2 | -| ir.cpp:1199:13:1199:13 | StoreValue | r1199_1 | -| ir.cpp:1201:9:1201:9 | Address | &:r1201_2 | -| ir.cpp:1201:9:1201:9 | Phi | from 0:m1194_3 | -| ir.cpp:1201:9:1201:9 | Phi | from 2:m1199_3 | -| ir.cpp:1201:13:1201:13 | Address | &:r1201_3 | -| ir.cpp:1201:13:1201:13 | Load | m1201_1 | -| ir.cpp:1201:13:1201:13 | StoreValue | r1201_4 | -| ir.cpp:1204:6:1204:16 | ChiPartial | partial:m1204_3 | -| ir.cpp:1204:6:1204:16 | ChiTotal | total:m1204_2 | -| ir.cpp:1204:6:1204:16 | SideEffect | m1204_3 | -| ir.cpp:1204:22:1204:22 | Address | &:r1204_5 | -| ir.cpp:1205:9:1205:9 | Address | &:r1205_1 | -| ir.cpp:1205:12:1205:13 | StoreValue | r1205_2 | -| ir.cpp:1206:12:1206:12 | Address | &:r1206_1 | -| ir.cpp:1206:12:1206:12 | Condition | r1206_2 | -| ir.cpp:1206:12:1206:12 | Load | m1204_6 | -| ir.cpp:1208:9:1208:9 | Address | &:r1208_2 | -| ir.cpp:1208:13:1208:13 | StoreValue | r1208_1 | -| ir.cpp:1211:9:1211:9 | Address | &:r1211_2 | -| ir.cpp:1211:13:1211:13 | StoreValue | r1211_1 | -| ir.cpp:1212:5:1212:5 | Phi | from 0:m1205_3 | -| ir.cpp:1212:5:1212:5 | Phi | from 1:m1208_3 | -| ir.cpp:1212:5:1212:5 | Phi | from 2:m1211_3 | -| ir.cpp:1213:9:1213:9 | Address | &:r1213_1 | -| ir.cpp:1213:13:1213:13 | Address | &:r1213_2 | -| ir.cpp:1213:13:1213:13 | Load | m1212_1 | -| ir.cpp:1213:13:1213:13 | StoreValue | r1213_3 | -| ir.cpp:1216:6:1216:24 | ChiPartial | partial:m1216_3 | -| ir.cpp:1216:6:1216:24 | ChiTotal | total:m1216_2 | -| ir.cpp:1216:6:1216:24 | SideEffect | m1216_3 | -| ir.cpp:1216:30:1216:30 | Address | &:r1216_5 | -| ir.cpp:1217:9:1217:9 | Address | &:r1217_1 | -| ir.cpp:1217:12:1217:13 | StoreValue | r1217_2 | -| ir.cpp:1218:12:1218:12 | Address | &:r1218_1 | -| ir.cpp:1218:12:1218:12 | Condition | r1218_2 | -| ir.cpp:1218:12:1218:12 | Load | m1216_6 | -| ir.cpp:1220:13:1220:13 | Address | &:r1220_2 | -| ir.cpp:1220:17:1220:17 | StoreValue | r1220_1 | -| ir.cpp:1224:13:1224:13 | Address | &:r1224_2 | -| ir.cpp:1224:17:1224:17 | StoreValue | r1224_1 | -| ir.cpp:1228:13:1228:13 | Address | &:r1228_2 | -| ir.cpp:1228:17:1228:17 | StoreValue | r1228_1 | -| ir.cpp:1229:5:1229:5 | Phi | from 1:m1220_3 | -| ir.cpp:1229:5:1229:5 | Phi | from 2:m1224_3 | -| ir.cpp:1229:5:1229:5 | Phi | from 3:m1228_3 | -| ir.cpp:1230:9:1230:9 | Address | &:r1230_1 | -| ir.cpp:1230:13:1230:13 | Address | &:r1230_2 | -| ir.cpp:1230:13:1230:13 | Load | m1229_1 | -| ir.cpp:1230:13:1230:13 | StoreValue | r1230_3 | -| ir.cpp:1233:5:1233:19 | Address | &:r1233_7 | -| ir.cpp:1233:5:1233:19 | ChiPartial | partial:m1233_3 | -| ir.cpp:1233:5:1233:19 | ChiTotal | total:m1233_2 | -| ir.cpp:1233:5:1233:19 | Load | m1239_15 | -| ir.cpp:1233:5:1233:19 | SideEffect | ~m1239_2 | -| ir.cpp:1233:25:1233:25 | Address | &:r1233_5 | -| ir.cpp:1234:16:1234:16 | Address | &:r1234_3 | -| ir.cpp:1234:16:1234:16 | SideEffect | ~m1234_6 | -| ir.cpp:1234:20:1234:20 | ChiPartial | partial:m1234_5 | -| ir.cpp:1234:20:1234:20 | ChiTotal | total:m1234_2 | -| ir.cpp:1234:20:1234:20 | StoreValue | r1234_4 | -| ir.cpp:1235:16:1235:16 | Address | &:r1235_3 | -| ir.cpp:1235:16:1235:16 | SideEffect | ~m1235_6 | -| ir.cpp:1235:20:1235:28 | ChiPartial | partial:m1235_5 | -| ir.cpp:1235:20:1235:28 | ChiTotal | total:m1235_2 | -| ir.cpp:1235:20:1235:28 | StoreValue | r1235_4 | -| ir.cpp:1236:16:1236:16 | Address | &:r1236_1 | -| ir.cpp:1236:16:1236:16 | Address | &:r1236_1 | -| ir.cpp:1236:16:1236:16 | Address | &:r1236_4 | -| ir.cpp:1236:16:1236:16 | ChiPartial | partial:m1236_10 | -| ir.cpp:1236:16:1236:16 | ChiTotal | total:m1236_8 | -| ir.cpp:1236:16:1236:16 | Condition | r1236_2 | -| ir.cpp:1236:16:1236:16 | Load | ~m1233_3 | -| ir.cpp:1236:16:1236:16 | StoreValue | r1236_9 | -| ir.cpp:1236:20:1236:20 | Address | &:r1236_5 | -| ir.cpp:1236:20:1236:20 | ChiPartial | partial:m1236_7 | -| ir.cpp:1236:20:1236:20 | ChiTotal | total:m1233_4 | -| ir.cpp:1236:20:1236:20 | Load | m1233_6 | -| ir.cpp:1236:20:1236:20 | StoreValue | r1236_6 | -| ir.cpp:1239:5:1239:25 | Address | &:r1239_3 | -| ir.cpp:1239:5:1239:25 | Phi | from 0:~m1233_3 | -| ir.cpp:1239:5:1239:25 | Phi | from 0:~m1233_4 | -| ir.cpp:1239:5:1239:25 | Phi | from 1:m1236_7 | -| ir.cpp:1239:5:1239:25 | Phi | from 1:~m1236_11 | -| ir.cpp:1239:12:1239:12 | Address | &:r1239_4 | -| ir.cpp:1239:12:1239:12 | Left | r1239_5 | -| ir.cpp:1239:12:1239:12 | Load | ~m1239_2 | -| ir.cpp:1239:12:1239:16 | Left | r1239_8 | -| ir.cpp:1239:12:1239:20 | Left | r1239_11 | -| ir.cpp:1239:12:1239:24 | StoreValue | r1239_14 | -| ir.cpp:1239:16:1239:16 | Address | &:r1239_6 | -| ir.cpp:1239:16:1239:16 | Load | ~m1239_2 | -| ir.cpp:1239:16:1239:16 | Right | r1239_7 | -| ir.cpp:1239:20:1239:20 | Address | &:r1239_9 | -| ir.cpp:1239:20:1239:20 | Load | m1239_1 | -| ir.cpp:1239:20:1239:20 | Right | r1239_10 | -| ir.cpp:1239:24:1239:24 | Address | &:r1239_12 | -| ir.cpp:1239:24:1239:24 | Load | ~m1239_2 | -| ir.cpp:1239:24:1239:24 | Right | r1239_13 | -| ir.cpp:1242:6:1242:31 | ChiPartial | partial:m1242_3 | -| ir.cpp:1242:6:1242:31 | ChiTotal | total:m1242_2 | -| ir.cpp:1242:6:1242:31 | SideEffect | ~m1246_1 | -| ir.cpp:1242:45:1242:51 | Address | &:r1242_5 | -| ir.cpp:1242:45:1242:51 | Address | &:r1242_5 | -| ir.cpp:1242:45:1242:51 | Address | &:r1242_7 | -| ir.cpp:1242:45:1242:51 | Address | &:r1242_7 | -| ir.cpp:1242:45:1242:51 | Load | m1242_6 | -| ir.cpp:1242:45:1242:51 | SideEffect | m1242_8 | -| ir.cpp:1243:19:1243:19 | Address | &:r1243_1 | -| ir.cpp:1243:19:1243:19 | Address | &:r1243_1 | -| ir.cpp:1243:19:1243:19 | Address | &:r1243_4 | -| ir.cpp:1243:19:1243:19 | Arg(this) | this:r1243_4 | -| ir.cpp:1243:19:1243:19 | ChiPartial | partial:m1243_6 | -| ir.cpp:1243:19:1243:19 | ChiTotal | total:m0_6 | -| ir.cpp:1243:19:1243:19 | Condition | r1243_2 | -| ir.cpp:1243:19:1243:19 | Load | ~m1242_3 | -| ir.cpp:1243:19:1243:19 | StoreValue | r1243_5 | -| ir.cpp:1244:19:1244:19 | Address | &:r1244_2 | -| ir.cpp:1244:19:1244:19 | Address | &:r1244_2 | -| ir.cpp:1244:19:1244:19 | Address | &:r1244_5 | -| ir.cpp:1244:19:1244:19 | Arg(this) | this:r1244_5 | -| ir.cpp:1244:19:1244:19 | ChiPartial | partial:m1244_16 | -| ir.cpp:1244:19:1244:19 | ChiTotal | total:m1244_14 | -| ir.cpp:1244:19:1244:19 | Condition | r1244_3 | -| ir.cpp:1244:19:1244:19 | Load | ~m1244_1 | -| ir.cpp:1244:19:1244:19 | Phi | from 0:~m1242_4 | -| ir.cpp:1244:19:1244:19 | Phi | from 1:~m1243_7 | -| ir.cpp:1244:19:1244:19 | StoreValue | r1244_15 | -| ir.cpp:1244:20:1244:29 | CallTarget | func:r1244_6 | -| ir.cpp:1244:20:1244:29 | ChiPartial | partial:m1244_10 | -| ir.cpp:1244:20:1244:29 | ChiPartial | partial:m1244_13 | -| ir.cpp:1244:20:1244:29 | ChiTotal | total:m1244_1 | -| ir.cpp:1244:20:1244:29 | ChiTotal | total:m1244_11 | -| ir.cpp:1244:20:1244:29 | SideEffect | ~m1244_1 | -| ir.cpp:1244:21:1244:28 | Address | &:r1244_8 | -| ir.cpp:1244:21:1244:28 | Arg(0) | 0:r1244_8 | -| ir.cpp:1244:21:1244:28 | SideEffect | ~m1242_3 | -| ir.cpp:1244:21:1244:28 | Unary | r1244_7 | -| ir.cpp:1245:19:1245:19 | Address | &:r1245_2 | -| ir.cpp:1245:19:1245:19 | Address | &:r1245_2 | -| ir.cpp:1245:19:1245:19 | Address | &:r1245_5 | -| ir.cpp:1245:19:1245:19 | Arg(this) | this:r1245_5 | -| ir.cpp:1245:19:1245:19 | ChiPartial | partial:m1245_16 | -| ir.cpp:1245:19:1245:19 | ChiTotal | total:m1245_14 | -| ir.cpp:1245:19:1245:19 | Condition | r1245_3 | -| ir.cpp:1245:19:1245:19 | Load | ~m1245_1 | -| ir.cpp:1245:19:1245:19 | Phi | from 2:~m1244_1 | -| ir.cpp:1245:19:1245:19 | Phi | from 3:~m1244_17 | -| ir.cpp:1245:19:1245:19 | StoreValue | r1245_15 | -| ir.cpp:1245:20:1245:28 | CallTarget | func:r1245_6 | -| ir.cpp:1245:20:1245:28 | ChiPartial | partial:m1245_10 | -| ir.cpp:1245:20:1245:28 | ChiPartial | partial:m1245_13 | -| ir.cpp:1245:20:1245:28 | ChiTotal | total:m1245_1 | -| ir.cpp:1245:20:1245:28 | ChiTotal | total:m1245_11 | -| ir.cpp:1245:20:1245:28 | SideEffect | ~m1245_1 | -| ir.cpp:1245:21:1245:27 | Address | &:r1245_7 | -| ir.cpp:1245:21:1245:27 | Address | &:r1245_8 | -| ir.cpp:1245:21:1245:27 | Arg(0) | 0:r1245_8 | -| ir.cpp:1245:21:1245:27 | Load | m1242_6 | -| ir.cpp:1245:21:1245:27 | SideEffect | ~m1242_8 | -| ir.cpp:1246:1:1246:1 | Phi | from 4:~m1245_1 | -| ir.cpp:1246:1:1246:1 | Phi | from 5:~m1245_17 | -| ir.cpp:1253:6:1253:17 | ChiPartial | partial:m1253_3 | -| ir.cpp:1253:6:1253:17 | ChiTotal | total:m1253_2 | -| ir.cpp:1253:6:1253:17 | SideEffect | m1253_3 | -| ir.cpp:1253:25:1253:26 | Address | &:r1253_5 | -| ir.cpp:1253:25:1253:26 | Address | &:r1253_5 | -| ir.cpp:1253:25:1253:26 | Address | &:r1253_7 | -| ir.cpp:1253:25:1253:26 | Address | &:r1253_7 | -| ir.cpp:1253:25:1253:26 | Load | m1253_6 | -| ir.cpp:1253:25:1253:26 | SideEffect | m1253_8 | -| ir.cpp:1253:35:1253:36 | Address | &:r1253_9 | -| ir.cpp:1253:35:1253:36 | Address | &:r1253_9 | -| ir.cpp:1253:35:1253:36 | Address | &:r1253_11 | -| ir.cpp:1253:35:1253:36 | Address | &:r1253_11 | -| ir.cpp:1253:35:1253:36 | Load | m1253_10 | -| ir.cpp:1253:35:1253:36 | SideEffect | m1253_12 | -| ir.cpp:1254:10:1254:15 | Address | &:r1254_1 | -| ir.cpp:1254:10:1254:15 | Left | r1254_1 | -| ir.cpp:1254:10:1254:15 | Left | r1254_1 | -| ir.cpp:1254:24:1254:27 | Address | &:r1254_4 | -| ir.cpp:1254:24:1254:27 | Address | &:r1254_9 | -| ir.cpp:1254:24:1254:27 | ChiPartial | partial:m1254_11 | -| ir.cpp:1254:24:1254:27 | ChiTotal | total:m1254_7 | -| ir.cpp:1254:24:1254:27 | Right | r1254_3 | -| ir.cpp:1254:24:1254:27 | Right | r1254_8 | -| ir.cpp:1254:24:1254:27 | StoreValue | r1254_10 | -| ir.cpp:1254:26:1254:26 | ChiPartial | partial:m1254_6 | -| ir.cpp:1254:26:1254:26 | ChiTotal | total:m1254_2 | -| ir.cpp:1254:26:1254:26 | StoreValue | r1254_5 | -| ir.cpp:1256:5:1256:10 | CallTarget | func:r1256_1 | -| ir.cpp:1256:12:1256:17 | Address | &:r1256_3 | -| ir.cpp:1256:12:1256:17 | Arg(0) | 0:r1256_3 | -| ir.cpp:1256:12:1256:17 | ChiPartial | partial:m1256_9 | -| ir.cpp:1256:12:1256:17 | ChiTotal | total:m1254_12 | -| ir.cpp:1256:12:1256:17 | Unary | r1256_2 | -| ir.cpp:1256:20:1256:21 | Address | &:r1256_4 | -| ir.cpp:1256:20:1256:21 | Address | &:r1256_6 | -| ir.cpp:1256:20:1256:21 | Arg(1) | 1:r1256_6 | -| ir.cpp:1256:20:1256:21 | Load | m1253_6 | -| ir.cpp:1256:20:1256:21 | SideEffect | ~m1253_8 | -| ir.cpp:1256:20:1256:21 | Unary | r1256_5 | -| ir.cpp:1257:5:1257:10 | CallTarget | func:r1257_1 | -| ir.cpp:1257:12:1257:17 | Address | &:r1257_3 | -| ir.cpp:1257:12:1257:17 | Address | &:r1257_3 | -| ir.cpp:1257:12:1257:17 | Arg(0) | 0:r1257_3 | -| ir.cpp:1257:12:1257:17 | ChiPartial | partial:m1257_10 | -| ir.cpp:1257:12:1257:17 | ChiTotal | total:m1256_10 | -| ir.cpp:1257:12:1257:17 | SideEffect | ~m1256_10 | -| ir.cpp:1257:12:1257:17 | Unary | r1257_2 | -| ir.cpp:1257:20:1257:21 | Address | &:r1257_4 | -| ir.cpp:1257:20:1257:21 | Address | &:r1257_6 | -| ir.cpp:1257:20:1257:21 | Arg(1) | 1:r1257_6 | -| ir.cpp:1257:20:1257:21 | Load | m1253_10 | -| ir.cpp:1257:20:1257:21 | SideEffect | ~m1253_12 | -| ir.cpp:1257:20:1257:21 | Unary | r1257_5 | -| ir.cpp:1263:17:1263:29 | ChiPartial | partial:m1263_3 | -| ir.cpp:1263:17:1263:29 | ChiTotal | total:m1263_2 | -| ir.cpp:1263:17:1263:29 | SideEffect | m1263_3 | -| ir.cpp:1263:34:1263:34 | Address | &:r1263_5 | -| ir.cpp:1263:34:1263:34 | Address | &:r1263_5 | -| ir.cpp:1263:34:1263:34 | Address | &:r1263_7 | -| ir.cpp:1263:34:1263:34 | Address | &:r1263_7 | -| ir.cpp:1263:34:1263:34 | Load | m1263_6 | -| ir.cpp:1263:34:1263:34 | SideEffect | m1264_7 | -| ir.cpp:1263:41:1263:41 | Address | &:r1263_9 | -| ir.cpp:1264:9:1264:9 | Address | &:r1264_3 | -| ir.cpp:1264:9:1264:9 | Load | m1263_6 | -| ir.cpp:1264:9:1264:9 | Unary | r1264_4 | -| ir.cpp:1264:9:1264:21 | ChiPartial | partial:m1264_6 | -| ir.cpp:1264:9:1264:21 | ChiTotal | total:m1263_8 | -| ir.cpp:1264:12:1264:17 | Address | &:r1264_5 | -| ir.cpp:1264:21:1264:21 | Address | &:r1264_1 | -| ir.cpp:1264:21:1264:21 | Load | m1263_10 | -| ir.cpp:1264:21:1264:21 | StoreValue | r1264_2 | -| ir.cpp:1272:6:1272:33 | ChiPartial | partial:m1272_3 | -| ir.cpp:1272:6:1272:33 | ChiTotal | total:m1272_2 | -| ir.cpp:1272:6:1272:33 | SideEffect | ~m1289_6 | -| ir.cpp:1272:39:1272:45 | Address | &:r1272_5 | -| ir.cpp:1272:51:1272:55 | Address | &:r1272_7 | -| ir.cpp:1272:51:1272:55 | Address | &:r1272_7 | -| ir.cpp:1272:51:1272:55 | Address | &:r1272_9 | -| ir.cpp:1272:51:1272:55 | Address | &:r1272_9 | -| ir.cpp:1272:51:1272:55 | Load | m1272_8 | -| ir.cpp:1272:51:1272:55 | SideEffect | m1283_12 | -| ir.cpp:1273:7:1273:7 | Address | &:r1273_1 | -| ir.cpp:1273:7:1273:7 | Address | &:r1273_1 | -| ir.cpp:1273:7:1273:7 | Arg(this) | this:r1273_1 | -| ir.cpp:1273:7:1273:7 | CallTarget | func:r1273_3 | -| ir.cpp:1273:7:1273:7 | ChiPartial | partial:m1273_5 | -| ir.cpp:1273:7:1273:7 | ChiPartial | partial:m1273_7 | -| ir.cpp:1273:7:1273:7 | ChiTotal | total:m1272_4 | -| ir.cpp:1273:7:1273:7 | ChiTotal | total:m1273_2 | -| ir.cpp:1273:7:1273:7 | SideEffect | ~m1272_4 | -| ir.cpp:1274:7:1274:26 | CallTarget | func:r1274_2 | -| ir.cpp:1274:7:1274:26 | ChiPartial | partial:m1274_5 | -| ir.cpp:1274:7:1274:26 | ChiTotal | total:m1273_6 | -| ir.cpp:1274:7:1274:26 | SideEffect | ~m1273_6 | -| ir.cpp:1274:28:1274:29 | Arg(0) | 0:r1274_3 | -| ir.cpp:1275:5:1275:27 | CallTarget | func:r1275_1 | -| ir.cpp:1275:5:1275:27 | ChiPartial | partial:m1275_4 | -| ir.cpp:1275:5:1275:27 | ChiTotal | total:m1274_6 | -| ir.cpp:1275:5:1275:27 | SideEffect | ~m1274_6 | -| ir.cpp:1275:29:1275:30 | Arg(0) | 0:r1275_2 | -| ir.cpp:1277:7:1277:7 | Address | &:r1277_1 | -| ir.cpp:1278:7:1278:19 | CallTarget | func:r1278_2 | -| ir.cpp:1278:7:1278:19 | ChiPartial | partial:m1278_8 | -| ir.cpp:1278:7:1278:19 | ChiTotal | total:m1275_5 | -| ir.cpp:1278:7:1278:19 | SideEffect | ~m1275_5 | -| ir.cpp:1278:21:1278:22 | Address | &:r1278_4 | -| ir.cpp:1278:21:1278:22 | Address | &:r1278_4 | -| ir.cpp:1278:21:1278:22 | Arg(0) | 0:r1278_4 | -| ir.cpp:1278:21:1278:22 | ChiPartial | partial:m1278_11 | -| ir.cpp:1278:21:1278:22 | ChiTotal | total:m1277_2 | -| ir.cpp:1278:21:1278:22 | SideEffect | ~m1277_2 | -| ir.cpp:1278:22:1278:22 | Unary | r1278_3 | -| ir.cpp:1278:25:1278:31 | Address | &:r1278_5 | -| ir.cpp:1278:25:1278:31 | Arg(1) | 1:r1278_6 | -| ir.cpp:1278:25:1278:31 | Load | m1272_6 | -| ir.cpp:1279:5:1279:20 | CallTarget | func:r1279_1 | -| ir.cpp:1279:5:1279:20 | ChiPartial | partial:m1279_7 | -| ir.cpp:1279:5:1279:20 | ChiTotal | total:m1278_9 | -| ir.cpp:1279:5:1279:20 | SideEffect | ~m1278_9 | -| ir.cpp:1279:22:1279:23 | Address | &:r1279_3 | -| ir.cpp:1279:22:1279:23 | Address | &:r1279_3 | -| ir.cpp:1279:22:1279:23 | Arg(0) | 0:r1279_3 | -| ir.cpp:1279:22:1279:23 | ChiPartial | partial:m1279_10 | -| ir.cpp:1279:22:1279:23 | ChiTotal | total:m1278_12 | -| ir.cpp:1279:22:1279:23 | SideEffect | ~m1278_12 | -| ir.cpp:1279:23:1279:23 | Unary | r1279_2 | -| ir.cpp:1279:26:1279:32 | Address | &:r1279_4 | -| ir.cpp:1279:26:1279:32 | Arg(1) | 1:r1279_5 | -| ir.cpp:1279:26:1279:32 | Load | m1272_6 | -| ir.cpp:1281:7:1281:7 | Unary | r1281_1 | -| ir.cpp:1281:11:1281:23 | CallTarget | func:r1281_3 | -| ir.cpp:1281:11:1281:23 | ChiPartial | partial:m1281_11 | -| ir.cpp:1281:11:1281:23 | ChiTotal | total:m1279_8 | -| ir.cpp:1281:11:1281:23 | SideEffect | ~m1279_8 | -| ir.cpp:1281:25:1281:29 | Address | &:r1281_4 | -| ir.cpp:1281:25:1281:29 | Address | &:r1281_5 | -| ir.cpp:1281:25:1281:29 | Address | &:r1281_5 | -| ir.cpp:1281:25:1281:29 | Arg(0) | 0:r1281_5 | -| ir.cpp:1281:25:1281:29 | ChiPartial | partial:m1281_14 | -| ir.cpp:1281:25:1281:29 | ChiTotal | total:m1272_10 | -| ir.cpp:1281:25:1281:29 | Load | m1272_8 | -| ir.cpp:1281:25:1281:29 | SideEffect | ~m1272_10 | -| ir.cpp:1281:32:1281:38 | Address | &:r1281_6 | -| ir.cpp:1281:32:1281:38 | Left | r1281_7 | -| ir.cpp:1281:32:1281:38 | Load | m1272_6 | -| ir.cpp:1281:32:1281:42 | Arg(1) | 1:r1281_9 | -| ir.cpp:1281:42:1281:42 | Right | r1281_8 | -| ir.cpp:1282:7:1282:11 | Address | &:r1282_1 | -| ir.cpp:1282:7:1282:11 | Load | m1272_8 | -| ir.cpp:1282:7:1282:11 | Unary | r1282_2 | -| ir.cpp:1282:14:1282:26 | CallTarget | func:r1282_4 | -| ir.cpp:1282:14:1282:26 | ChiPartial | partial:m1282_9 | -| ir.cpp:1282:14:1282:26 | ChiTotal | total:m1281_12 | -| ir.cpp:1282:14:1282:26 | SideEffect | ~m1281_12 | -| ir.cpp:1282:28:1282:29 | Address | &:r1282_6 | -| ir.cpp:1282:28:1282:29 | Address | &:r1282_6 | -| ir.cpp:1282:28:1282:29 | Arg(0) | 0:r1282_6 | -| ir.cpp:1282:28:1282:29 | ChiPartial | partial:m1282_12 | -| ir.cpp:1282:28:1282:29 | ChiTotal | total:m1279_11 | -| ir.cpp:1282:28:1282:29 | SideEffect | ~m1279_11 | -| ir.cpp:1282:29:1282:29 | Unary | r1282_5 | -| ir.cpp:1282:32:1282:33 | Arg(1) | 1:r1282_7 | -| ir.cpp:1283:5:1283:9 | Address | &:r1283_1 | -| ir.cpp:1283:5:1283:9 | Load | m1272_8 | -| ir.cpp:1283:12:1283:24 | CallTarget | func:r1283_3 | -| ir.cpp:1283:12:1283:24 | ChiPartial | partial:m1283_8 | -| ir.cpp:1283:12:1283:24 | ChiTotal | total:m1282_10 | -| ir.cpp:1283:12:1283:24 | SideEffect | ~m1282_10 | -| ir.cpp:1283:26:1283:30 | Address | &:r1283_4 | -| ir.cpp:1283:26:1283:30 | Address | &:r1283_5 | -| ir.cpp:1283:26:1283:30 | Address | &:r1283_5 | -| ir.cpp:1283:26:1283:30 | Arg(0) | 0:r1283_5 | -| ir.cpp:1283:26:1283:30 | ChiPartial | partial:m1283_11 | -| ir.cpp:1283:26:1283:30 | ChiTotal | total:m1281_15 | -| ir.cpp:1283:26:1283:30 | Load | m1272_8 | -| ir.cpp:1283:26:1283:30 | SideEffect | ~m1281_15 | -| ir.cpp:1283:33:1283:34 | Arg(1) | 1:r1283_6 | -| ir.cpp:1285:7:1285:31 | CallTarget | func:r1285_2 | -| ir.cpp:1285:7:1285:31 | ChiPartial | partial:m1285_4 | -| ir.cpp:1285:7:1285:31 | ChiTotal | total:m1283_9 | -| ir.cpp:1285:7:1285:31 | SideEffect | ~m1283_9 | -| ir.cpp:1286:5:1286:32 | CallTarget | func:r1286_1 | -| ir.cpp:1286:5:1286:32 | ChiPartial | partial:m1286_3 | -| ir.cpp:1286:5:1286:32 | ChiTotal | total:m1285_5 | -| ir.cpp:1286:5:1286:32 | SideEffect | ~m1285_5 | -| ir.cpp:1288:5:1288:20 | CallTarget | func:r1288_1 | -| ir.cpp:1288:5:1288:20 | ChiPartial | partial:m1288_3 | -| ir.cpp:1288:5:1288:20 | ChiTotal | total:m1286_4 | -| ir.cpp:1288:5:1288:20 | SideEffect | ~m1286_4 | -| ir.cpp:1288:25:1288:49 | CallTarget | func:r1288_5 | -| ir.cpp:1288:25:1288:49 | ChiPartial | partial:m1288_7 | -| ir.cpp:1288:25:1288:49 | ChiTotal | total:m1288_4 | -| ir.cpp:1288:25:1288:49 | SideEffect | ~m1288_4 | -| ir.cpp:1289:1:1289:1 | Address | &:r1289_2 | -| ir.cpp:1289:1:1289:1 | Address | &:r1289_2 | -| ir.cpp:1289:1:1289:1 | Arg(this) | this:r1289_2 | -| ir.cpp:1289:1:1289:1 | CallTarget | func:r1289_3 | -| ir.cpp:1289:1:1289:1 | ChiPartial | partial:m1289_5 | -| ir.cpp:1289:1:1289:1 | ChiPartial | partial:m1289_8 | -| ir.cpp:1289:1:1289:1 | ChiTotal | total:m1273_8 | -| ir.cpp:1289:1:1289:1 | ChiTotal | total:m1288_8 | -| ir.cpp:1289:1:1289:1 | SideEffect | m1273_8 | -| ir.cpp:1289:1:1289:1 | SideEffect | ~m1288_8 | -| ir.cpp:1291:5:1291:22 | Address | &:r1291_10 | -| ir.cpp:1291:5:1291:22 | ChiPartial | partial:m1291_3 | -| ir.cpp:1291:5:1291:22 | ChiTotal | total:m1291_2 | -| ir.cpp:1291:5:1291:22 | Load | m1291_9 | -| ir.cpp:1291:5:1291:22 | Phi | from 2:m1293_4 | -| ir.cpp:1291:5:1291:22 | Phi | from 3:m1295_2 | -| ir.cpp:1291:5:1291:22 | SideEffect | m1291_3 | -| ir.cpp:1291:29:1291:29 | Address | &:r1291_5 | -| ir.cpp:1291:36:1291:36 | Address | &:r1291_7 | -| ir.cpp:1292:9:1292:9 | Address | &:r1292_1 | -| ir.cpp:1292:9:1292:9 | Condition | r1292_2 | -| ir.cpp:1292:9:1292:9 | Load | m1291_6 | -| ir.cpp:1293:9:1293:17 | Address | &:r1293_1 | -| ir.cpp:1293:16:1293:16 | Address | &:r1293_2 | -| ir.cpp:1293:16:1293:16 | Load | m1291_8 | -| ir.cpp:1293:16:1293:16 | StoreValue | r1293_3 | -| ir.cpp:1295:1:1295:1 | Address | &:r1295_1 | -| ir.cpp:1297:6:1297:15 | ChiPartial | partial:m1297_3 | -| ir.cpp:1297:6:1297:15 | ChiTotal | total:m1297_2 | -| ir.cpp:1297:6:1297:15 | SideEffect | ~m1298_8 | -| ir.cpp:1297:21:1297:21 | Address | &:r1297_5 | -| ir.cpp:1297:28:1297:28 | Address | &:r1297_7 | -| ir.cpp:1298:12:1298:21 | CallTarget | func:r1298_1 | -| ir.cpp:1298:12:1298:21 | ChiPartial | partial:m1298_7 | -| ir.cpp:1298:12:1298:21 | ChiTotal | total:m1297_4 | -| ir.cpp:1298:12:1298:21 | SideEffect | ~m1297_4 | -| ir.cpp:1298:23:1298:23 | Address | &:r1298_2 | -| ir.cpp:1298:23:1298:23 | Arg(0) | 0:r1298_3 | -| ir.cpp:1298:23:1298:23 | Load | m1297_6 | -| ir.cpp:1298:26:1298:26 | Address | &:r1298_4 | -| ir.cpp:1298:26:1298:26 | Arg(1) | 1:r1298_5 | -| ir.cpp:1298:26:1298:26 | Load | m1297_8 | -| ir.cpp:1301:6:1301:25 | ChiPartial | partial:m1301_3 | -| ir.cpp:1301:6:1301:25 | ChiTotal | total:m1301_2 | -| ir.cpp:1301:6:1301:25 | SideEffect | m1301_3 | -| ir.cpp:1301:32:1301:32 | Address | &:r1301_5 | -| ir.cpp:1301:39:1301:39 | Address | &:r1301_7 | -| ir.cpp:1301:47:1301:47 | Address | &:r1301_9 | -| ir.cpp:1302:9:1302:9 | Address | &:r1302_1 | -| ir.cpp:1302:13:1302:13 | Address | &:r1302_2 | -| ir.cpp:1302:13:1302:13 | Load | m1301_8 | -| ir.cpp:1302:13:1302:13 | StoreValue | r1302_3 | -| ir.cpp:1303:5:1303:5 | Address | &:r1303_7 | -| ir.cpp:1303:9:1303:9 | Address | &:r1303_1 | -| ir.cpp:1303:9:1303:9 | Condition | r1303_2 | -| ir.cpp:1303:9:1303:9 | Load | m1301_6 | -| ir.cpp:1303:9:1303:9 | StoreValue | r1303_2 | -| ir.cpp:1303:9:1303:14 | Address | &:r1303_5 | -| ir.cpp:1303:9:1303:14 | Address | &:r1303_9 | -| ir.cpp:1303:9:1303:14 | Address | &:r1303_13 | -| ir.cpp:1303:9:1303:14 | Load | m1303_4 | -| ir.cpp:1303:9:1303:14 | Phi | from 2:m1303_10 | -| ir.cpp:1303:9:1303:14 | Phi | from 3:m1303_14 | -| ir.cpp:1303:9:1303:14 | StoreValue | r1303_6 | -| ir.cpp:1303:14:1303:14 | Address | &:r1303_11 | -| ir.cpp:1303:14:1303:14 | Load | m1301_8 | -| ir.cpp:1303:14:1303:14 | StoreValue | r1303_12 | -| ir.cpp:1304:5:1304:5 | Address | &:r1304_8 | -| ir.cpp:1304:9:1304:9 | Address | &:r1304_1 | -| ir.cpp:1304:9:1304:9 | Condition | r1304_2 | -| ir.cpp:1304:9:1304:9 | Load | m1301_6 | -| ir.cpp:1304:9:1304:9 | StoreValue | r1304_2 | -| ir.cpp:1304:9:1304:14 | Address | &:r1304_5 | -| ir.cpp:1304:9:1304:14 | Address | &:r1304_10 | -| ir.cpp:1304:9:1304:14 | Address | &:r1304_14 | -| ir.cpp:1304:9:1304:14 | Load | m1304_4 | -| ir.cpp:1304:9:1304:14 | Phi | from 5:m1304_11 | -| ir.cpp:1304:9:1304:14 | Phi | from 6:m1304_15 | -| ir.cpp:1304:9:1304:14 | StoreValue | r1304_7 | -| ir.cpp:1304:9:1304:14 | Unary | r1304_6 | -| ir.cpp:1304:14:1304:14 | Address | &:r1304_12 | -| ir.cpp:1304:14:1304:14 | Load | m1301_10 | -| ir.cpp:1304:14:1304:14 | StoreValue | r1304_13 | -| ir.cpp:1305:5:1305:5 | Address | &:r1305_9 | -| ir.cpp:1305:9:1305:9 | Address | &:r1305_1 | -| ir.cpp:1305:9:1305:9 | Condition | r1305_4 | -| ir.cpp:1305:9:1305:9 | Left | r1305_2 | -| ir.cpp:1305:9:1305:9 | Load | m1301_8 | -| ir.cpp:1305:9:1305:9 | Right | r1305_3 | -| ir.cpp:1305:9:1305:9 | StoreValue | r1305_2 | -| ir.cpp:1305:9:1305:14 | Address | &:r1305_7 | -| ir.cpp:1305:9:1305:14 | Address | &:r1305_11 | -| ir.cpp:1305:9:1305:14 | Address | &:r1305_15 | -| ir.cpp:1305:9:1305:14 | Load | m1305_6 | -| ir.cpp:1305:9:1305:14 | Phi | from 8:m1305_12 | -| ir.cpp:1305:9:1305:14 | Phi | from 9:m1305_16 | -| ir.cpp:1305:9:1305:14 | StoreValue | r1305_8 | -| ir.cpp:1305:14:1305:14 | Address | &:r1305_13 | -| ir.cpp:1305:14:1305:14 | Load | m1301_8 | -| ir.cpp:1305:14:1305:14 | StoreValue | r1305_14 | -| ir.cpp:1306:5:1306:5 | Address | &:r1306_10 | -| ir.cpp:1306:9:1306:9 | Address | &:r1306_1 | -| ir.cpp:1306:9:1306:9 | Condition | r1306_4 | -| ir.cpp:1306:9:1306:9 | Left | r1306_2 | -| ir.cpp:1306:9:1306:9 | Load | m1301_8 | -| ir.cpp:1306:9:1306:9 | Right | r1306_3 | -| ir.cpp:1306:9:1306:9 | StoreValue | r1306_2 | -| ir.cpp:1306:9:1306:14 | Address | &:r1306_7 | -| ir.cpp:1306:9:1306:14 | Address | &:r1306_12 | -| ir.cpp:1306:9:1306:14 | Address | &:r1306_16 | -| ir.cpp:1306:9:1306:14 | Load | m1306_6 | -| ir.cpp:1306:9:1306:14 | Phi | from 11:m1306_13 | -| ir.cpp:1306:9:1306:14 | Phi | from 12:m1306_17 | -| ir.cpp:1306:9:1306:14 | StoreValue | r1306_9 | -| ir.cpp:1306:9:1306:14 | Unary | r1306_8 | -| ir.cpp:1306:14:1306:14 | Address | &:r1306_14 | -| ir.cpp:1306:14:1306:14 | Load | m1301_10 | -| ir.cpp:1306:14:1306:14 | StoreValue | r1306_15 | -| ir.cpp:1307:5:1307:5 | Address | &:r1307_10 | -| ir.cpp:1307:9:1307:9 | Address | &:r1307_1 | -| ir.cpp:1307:9:1307:9 | Condition | r1307_4 | -| ir.cpp:1307:9:1307:9 | Left | r1307_2 | -| ir.cpp:1307:9:1307:9 | Load | m1301_10 | -| ir.cpp:1307:9:1307:9 | Right | r1307_3 | -| ir.cpp:1307:9:1307:9 | StoreValue | r1307_2 | -| ir.cpp:1307:9:1307:14 | Address | &:r1307_7 | -| ir.cpp:1307:9:1307:14 | Address | &:r1307_12 | -| ir.cpp:1307:9:1307:14 | Address | &:r1307_17 | -| ir.cpp:1307:9:1307:14 | Load | m1307_6 | -| ir.cpp:1307:9:1307:14 | Phi | from 14:m1307_13 | -| ir.cpp:1307:9:1307:14 | Phi | from 15:m1307_18 | -| ir.cpp:1307:9:1307:14 | StoreValue | r1307_9 | -| ir.cpp:1307:9:1307:14 | Unary | r1307_8 | -| ir.cpp:1307:14:1307:14 | Address | &:r1307_14 | -| ir.cpp:1307:14:1307:14 | Load | m1301_8 | -| ir.cpp:1307:14:1307:14 | StoreValue | r1307_16 | -| ir.cpp:1307:14:1307:14 | Unary | r1307_15 | -| ir.cpp:1308:5:1308:5 | Address | &:r1308_10 | -| ir.cpp:1308:9:1308:9 | Address | &:r1308_1 | -| ir.cpp:1308:9:1308:9 | Condition | r1308_4 | -| ir.cpp:1308:9:1308:9 | Left | r1308_2 | -| ir.cpp:1308:9:1308:9 | Load | m1301_10 | -| ir.cpp:1308:9:1308:9 | Right | r1308_3 | -| ir.cpp:1308:9:1308:9 | StoreValue | r1308_2 | -| ir.cpp:1308:9:1308:14 | Address | &:r1308_7 | -| ir.cpp:1308:9:1308:14 | Address | &:r1308_12 | -| ir.cpp:1308:9:1308:14 | Address | &:r1308_16 | -| ir.cpp:1308:9:1308:14 | Load | m1308_6 | -| ir.cpp:1308:9:1308:14 | Phi | from 17:m1308_13 | -| ir.cpp:1308:9:1308:14 | Phi | from 18:m1308_17 | -| ir.cpp:1308:9:1308:14 | StoreValue | r1308_9 | -| ir.cpp:1308:9:1308:14 | Unary | r1308_8 | -| ir.cpp:1308:14:1308:14 | Address | &:r1308_14 | -| ir.cpp:1308:14:1308:14 | Load | m1301_10 | -| ir.cpp:1308:14:1308:14 | StoreValue | r1308_15 | -| ir.cpp:1310:5:1310:5 | Address | &:r1310_9 | -| ir.cpp:1310:9:1310:26 | Address | &:r1310_7 | -| ir.cpp:1310:9:1310:26 | Address | &:r1310_11 | -| ir.cpp:1310:9:1310:26 | Address | &:r1310_33 | -| ir.cpp:1310:9:1310:26 | Load | m1310_6 | -| ir.cpp:1310:9:1310:26 | Phi | from 20:m1310_12 | -| ir.cpp:1310:9:1310:26 | Phi | from 26:m1310_34 | -| ir.cpp:1310:9:1310:26 | StoreValue | r1310_8 | -| ir.cpp:1310:10:1310:10 | Address | &:r1310_1 | -| ir.cpp:1310:10:1310:10 | Condition | r1310_4 | -| ir.cpp:1310:10:1310:10 | Left | r1310_2 | -| ir.cpp:1310:10:1310:10 | Load | m1301_8 | -| ir.cpp:1310:10:1310:10 | Right | r1310_3 | -| ir.cpp:1310:10:1310:20 | Address | &:r1310_13 | -| ir.cpp:1310:10:1310:20 | Address | &:r1310_17 | -| ir.cpp:1310:10:1310:20 | Address | &:r1310_20 | -| ir.cpp:1310:10:1310:20 | Condition | r1310_18 | -| ir.cpp:1310:10:1310:20 | Load | m1310_16 | -| ir.cpp:1310:10:1310:20 | Phi | from 21:m1310_15 | -| ir.cpp:1310:10:1310:20 | Phi | from 23:m1310_22 | -| ir.cpp:1310:10:1310:20 | StoreValue | r1310_14 | -| ir.cpp:1310:10:1310:20 | StoreValue | r1310_18 | -| ir.cpp:1310:10:1310:20 | StoreValue | r1310_21 | -| ir.cpp:1310:15:1310:15 | Address | &:r1310_23 | -| ir.cpp:1310:15:1310:15 | Condition | r1310_24 | -| ir.cpp:1310:15:1310:15 | Load | m1301_6 | -| ir.cpp:1310:20:1310:20 | Address | &:r1310_26 | -| ir.cpp:1310:20:1310:20 | Condition | r1310_29 | -| ir.cpp:1310:20:1310:20 | Left | r1310_27 | -| ir.cpp:1310:20:1310:20 | Load | m1301_10 | -| ir.cpp:1310:20:1310:20 | Right | r1310_28 | -| ir.cpp:1310:26:1310:26 | Address | &:r1310_31 | -| ir.cpp:1310:26:1310:26 | Load | m1301_8 | -| ir.cpp:1310:26:1310:26 | StoreValue | r1310_32 | -| ir.cpp:1316:5:1316:27 | Address | &:r1316_9 | -| ir.cpp:1316:5:1316:27 | ChiPartial | partial:m1316_3 | -| ir.cpp:1316:5:1316:27 | ChiTotal | total:m1316_2 | -| ir.cpp:1316:5:1316:27 | Load | m1317_11 | -| ir.cpp:1316:5:1316:27 | SideEffect | ~m1317_7 | -| ir.cpp:1316:33:1316:33 | Address | &:r1316_5 | -| ir.cpp:1316:40:1316:40 | Address | &:r1316_7 | -| ir.cpp:1317:5:1317:48 | Address | &:r1317_1 | -| ir.cpp:1317:12:1317:21 | CallTarget | func:r1317_2 | -| ir.cpp:1317:12:1317:21 | ChiPartial | partial:m1317_4 | -| ir.cpp:1317:12:1317:21 | ChiTotal | total:m1316_4 | -| ir.cpp:1317:12:1317:21 | Condition | r1317_3 | -| ir.cpp:1317:12:1317:21 | SideEffect | ~m1316_4 | -| ir.cpp:1317:12:1317:47 | Address | &:r1317_9 | -| ir.cpp:1317:12:1317:47 | Address | &:r1317_19 | -| ir.cpp:1317:12:1317:47 | Address | &:r1317_24 | -| ir.cpp:1317:12:1317:47 | Load | m1317_8 | -| ir.cpp:1317:12:1317:47 | Phi | from 3:m1317_20 | -| ir.cpp:1317:12:1317:47 | Phi | from 3:~m1317_15 | -| ir.cpp:1317:12:1317:47 | Phi | from 4:m1317_25 | -| ir.cpp:1317:12:1317:47 | Phi | from 4:~m1317_21 | -| ir.cpp:1317:12:1317:47 | StoreValue | r1317_10 | -| ir.cpp:1317:28:1317:37 | CallTarget | func:r1317_12 | -| ir.cpp:1317:28:1317:37 | ChiPartial | partial:m1317_14 | -| ir.cpp:1317:28:1317:37 | ChiTotal | total:m1317_5 | -| ir.cpp:1317:28:1317:37 | Condition | r1317_13 | -| ir.cpp:1317:28:1317:37 | SideEffect | ~m1317_5 | -| ir.cpp:1317:43:1317:43 | Address | &:r1317_17 | -| ir.cpp:1317:43:1317:43 | Load | m1316_6 | -| ir.cpp:1317:43:1317:43 | StoreValue | r1317_18 | -| ir.cpp:1317:47:1317:47 | Address | &:r1317_22 | -| ir.cpp:1317:47:1317:47 | Load | m1316_8 | -| ir.cpp:1317:47:1317:47 | Phi | from 0:~m1317_5 | -| ir.cpp:1317:47:1317:47 | Phi | from 2:~m1317_15 | -| ir.cpp:1317:47:1317:47 | StoreValue | r1317_23 | -| ir.cpp:1322:6:1322:6 | ChiPartial | partial:m1322_3 | -| ir.cpp:1322:6:1322:6 | ChiTotal | total:m1322_2 | -| ir.cpp:1322:6:1322:6 | SideEffect | ~m1324_8 | -| ir.cpp:1322:13:1322:13 | Address | &:r1322_5 | -| ir.cpp:1322:13:1322:13 | Address | &:r1322_5 | -| ir.cpp:1322:13:1322:13 | Address | &:r1322_7 | -| ir.cpp:1322:13:1322:13 | Address | &:r1322_7 | -| ir.cpp:1322:13:1322:13 | Load | m1322_6 | -| ir.cpp:1322:13:1322:13 | SideEffect | m1322_8 | -| ir.cpp:1324:3:1324:13 | Address | &:r1324_6 | -| ir.cpp:1324:3:1324:13 | Arg(0) | 0:r1324_2 | -| ir.cpp:1324:3:1324:13 | CallTarget | func:r1324_1 | -| ir.cpp:1324:3:1324:13 | ChiPartial | partial:m1324_7 | -| ir.cpp:1324:3:1324:13 | ChiTotal | total:m1322_4 | -| ir.cpp:1324:3:1324:13 | SideEffect | ~m1322_4 | -| ir.cpp:1324:3:1324:13 | Unary | r1324_6 | -| ir.cpp:1324:8:1324:8 | Address | &:r1324_3 | -| ir.cpp:1324:8:1324:8 | Arg(1) | 1:r1324_5 | -| ir.cpp:1324:8:1324:8 | Load | m1322_6 | -| ir.cpp:1324:8:1324:8 | Unary | r1324_4 | -| ir.cpp:1328:3:1328:3 | Address | &:r1328_5 | -| ir.cpp:1328:3:1328:3 | Address | &:r1328_5 | -| ir.cpp:1328:3:1328:3 | Address | &:r1328_5 | -| ir.cpp:1328:3:1328:3 | Address | &:r1328_5 | -| ir.cpp:1328:3:1328:3 | ChiPartial | partial:m1328_3 | -| ir.cpp:1328:3:1328:3 | ChiPartial | partial:m1328_3 | -| ir.cpp:1328:3:1328:3 | ChiPartial | partial:m1328_3 | -| ir.cpp:1328:3:1328:3 | ChiPartial | partial:m1328_3 | -| ir.cpp:1328:3:1328:3 | ChiTotal | total:m1328_2 | -| ir.cpp:1328:3:1328:3 | ChiTotal | total:m1328_2 | -| ir.cpp:1328:3:1328:3 | ChiTotal | total:m1328_2 | -| ir.cpp:1328:3:1328:3 | ChiTotal | total:m1328_2 | -| ir.cpp:1328:3:1328:3 | Load | m1329_3 | -| ir.cpp:1328:3:1328:3 | Load | m1329_3 | -| ir.cpp:1328:3:1328:3 | Load | m1329_8 | -| ir.cpp:1328:3:1328:3 | Load | m1329_8 | -| ir.cpp:1328:3:1328:3 | SideEffect | m1328_3 | -| ir.cpp:1328:3:1328:3 | SideEffect | m1328_3 | -| ir.cpp:1328:3:1328:3 | SideEffect | ~m1329_6 | -| ir.cpp:1328:3:1328:3 | SideEffect | ~m1329_6 | -| ir.cpp:1329:5:1329:15 | Address | &:r1329_1 | -| ir.cpp:1329:5:1329:15 | Address | &:r1329_1 | -| ir.cpp:1329:5:1329:15 | Address | &:r1329_1 | -| ir.cpp:1329:5:1329:15 | Address | &:r1329_1 | -| ir.cpp:1329:5:1329:15 | Address | &:r1329_1 | -| ir.cpp:1329:5:1329:15 | Address | &:r1329_1 | -| ir.cpp:1329:5:1329:15 | Arg(this) | this:r1329_1 | -| ir.cpp:1329:5:1329:15 | Arg(this) | this:r1329_1 | -| ir.cpp:1329:5:1329:15 | CallTarget | func:r1329_3 | -| ir.cpp:1329:5:1329:15 | CallTarget | func:r1329_3 | -| ir.cpp:1329:5:1329:15 | ChiPartial | partial:m1329_5 | -| ir.cpp:1329:5:1329:15 | ChiPartial | partial:m1329_5 | -| ir.cpp:1329:5:1329:15 | ChiPartial | partial:m1329_7 | -| ir.cpp:1329:5:1329:15 | ChiPartial | partial:m1329_7 | -| ir.cpp:1329:5:1329:15 | ChiTotal | total:m1328_4 | -| ir.cpp:1329:5:1329:15 | ChiTotal | total:m1328_4 | -| ir.cpp:1329:5:1329:15 | ChiTotal | total:m1329_2 | -| ir.cpp:1329:5:1329:15 | ChiTotal | total:m1329_2 | -| ir.cpp:1329:5:1329:15 | SideEffect | ~m1328_4 | -| ir.cpp:1329:5:1329:15 | SideEffect | ~m1328_4 | -| ir.cpp:1329:5:1329:15 | StoreValue | r1329_2 | -| ir.cpp:1329:5:1329:15 | StoreValue | r1329_2 | -| ir.cpp:1367:6:1367:21 | ChiPartial | partial:m1367_3 | -| ir.cpp:1367:6:1367:21 | ChiTotal | total:m1367_2 | -| ir.cpp:1367:6:1367:21 | SideEffect | ~m1379_6 | -| ir.cpp:1368:12:1368:12 | Address | &:r1368_1 | -| ir.cpp:1368:16:1368:34 | CallTarget | func:r1368_2 | -| ir.cpp:1368:16:1368:34 | ChiPartial | partial:m1368_4 | -| ir.cpp:1368:16:1368:34 | ChiTotal | total:m1367_4 | -| ir.cpp:1368:16:1368:34 | SideEffect | ~m1367_4 | -| ir.cpp:1368:16:1368:34 | StoreValue | r1368_3 | -| ir.cpp:1369:19:1369:20 | Address | &:r1369_1 | -| ir.cpp:1369:24:1369:42 | CallTarget | func:r1369_3 | -| ir.cpp:1369:24:1369:42 | ChiPartial | partial:m1369_5 | -| ir.cpp:1369:24:1369:42 | ChiTotal | total:m1368_5 | -| ir.cpp:1369:24:1369:42 | SideEffect | ~m1368_5 | -| ir.cpp:1369:24:1369:42 | StoreValue | r1369_4 | -| ir.cpp:1369:24:1369:44 | Address | &:r1369_2 | -| ir.cpp:1369:24:1369:44 | StoreValue | r1369_9 | -| ir.cpp:1369:24:1369:44 | Unary | r1369_2 | -| ir.cpp:1369:24:1369:44 | Unary | r1369_8 | -| ir.cpp:1371:5:1371:13 | CallTarget | func:r1371_1 | -| ir.cpp:1371:5:1371:13 | ChiPartial | partial:m1371_6 | -| ir.cpp:1371:5:1371:13 | ChiTotal | total:m1369_6 | -| ir.cpp:1371:5:1371:13 | SideEffect | ~m1369_6 | -| ir.cpp:1371:15:1371:15 | Address | &:r1371_4 | -| ir.cpp:1371:15:1371:15 | Arg(0) | 0:r1371_4 | -| ir.cpp:1371:15:1371:15 | SideEffect | ~m1368_6 | -| ir.cpp:1371:15:1371:15 | Unary | r1371_2 | -| ir.cpp:1371:15:1371:15 | Unary | r1371_3 | -| ir.cpp:1372:5:1372:21 | CallTarget | func:r1372_1 | -| ir.cpp:1372:5:1372:21 | ChiPartial | partial:m1372_15 | -| ir.cpp:1372:5:1372:21 | ChiTotal | total:m1372_9 | -| ir.cpp:1372:5:1372:21 | SideEffect | ~m1372_9 | -| ir.cpp:1372:23:1372:27 | Address | &:r1372_2 | -| ir.cpp:1372:23:1372:27 | Address | &:r1372_2 | -| ir.cpp:1372:23:1372:27 | Address | &:r1372_6 | -| ir.cpp:1372:23:1372:27 | Address | &:r1372_13 | -| ir.cpp:1372:23:1372:27 | Arg(0) | 0:r1372_6 | -| ir.cpp:1372:23:1372:27 | Arg(0) | 0:r1372_13 | -| ir.cpp:1372:23:1372:27 | Arg(this) | this:r1372_2 | -| ir.cpp:1372:23:1372:27 | CallTarget | func:r1372_4 | -| ir.cpp:1372:23:1372:27 | ChiPartial | partial:m1372_8 | -| ir.cpp:1372:23:1372:27 | ChiPartial | partial:m1372_11 | -| ir.cpp:1372:23:1372:27 | ChiTotal | total:m1371_7 | -| ir.cpp:1372:23:1372:27 | ChiTotal | total:m1372_3 | -| ir.cpp:1372:23:1372:27 | SideEffect | ~m1367_3 | -| ir.cpp:1372:23:1372:27 | SideEffect | ~m1371_7 | -| ir.cpp:1372:23:1372:27 | SideEffect | ~m1372_12 | -| ir.cpp:1372:23:1372:27 | Unary | r1372_2 | -| ir.cpp:1372:23:1372:27 | Unary | r1372_5 | -| ir.cpp:1373:5:1373:15 | CallTarget | func:r1373_1 | -| ir.cpp:1373:5:1373:15 | ChiPartial | partial:m1373_16 | -| ir.cpp:1373:5:1373:15 | ChiTotal | total:m1373_10 | -| ir.cpp:1373:5:1373:15 | SideEffect | ~m1373_10 | -| ir.cpp:1373:17:1373:17 | Address | &:r1373_2 | -| ir.cpp:1373:17:1373:17 | Address | &:r1373_2 | -| ir.cpp:1373:17:1373:17 | Address | &:r1373_2 | -| ir.cpp:1373:17:1373:17 | Address | &:r1373_7 | -| ir.cpp:1373:17:1373:17 | Arg(0) | 0:r1373_7 | -| ir.cpp:1373:17:1373:17 | Arg(0) | 0:r1373_14 | -| ir.cpp:1373:17:1373:17 | Arg(this) | this:r1373_2 | -| ir.cpp:1373:17:1373:17 | CallTarget | func:r1373_4 | -| ir.cpp:1373:17:1373:17 | ChiPartial | partial:m1373_9 | -| ir.cpp:1373:17:1373:17 | ChiPartial | partial:m1373_12 | -| ir.cpp:1373:17:1373:17 | ChiTotal | total:m1372_16 | -| ir.cpp:1373:17:1373:17 | ChiTotal | total:m1373_3 | -| ir.cpp:1373:17:1373:17 | Load | m1373_13 | -| ir.cpp:1373:17:1373:17 | SideEffect | ~m1368_6 | -| ir.cpp:1373:17:1373:17 | SideEffect | ~m1372_16 | -| ir.cpp:1373:17:1373:17 | Unary | r1373_5 | -| ir.cpp:1373:17:1373:17 | Unary | r1373_6 | -| ir.cpp:1374:5:1374:23 | CallTarget | func:r1374_1 | -| ir.cpp:1374:5:1374:23 | ChiPartial | partial:m1374_15 | -| ir.cpp:1374:5:1374:23 | ChiTotal | total:m1374_9 | -| ir.cpp:1374:5:1374:23 | SideEffect | ~m1374_9 | -| ir.cpp:1374:25:1374:29 | Address | &:r1374_2 | -| ir.cpp:1374:25:1374:29 | Address | &:r1374_2 | -| ir.cpp:1374:25:1374:29 | Address | &:r1374_2 | -| ir.cpp:1374:25:1374:29 | Address | &:r1374_6 | -| ir.cpp:1374:25:1374:29 | Arg(0) | 0:r1374_6 | -| ir.cpp:1374:25:1374:29 | Arg(0) | 0:r1374_13 | -| ir.cpp:1374:25:1374:29 | Arg(this) | this:r1374_2 | -| ir.cpp:1374:25:1374:29 | CallTarget | func:r1374_4 | -| ir.cpp:1374:25:1374:29 | ChiPartial | partial:m1374_8 | -| ir.cpp:1374:25:1374:29 | ChiPartial | partial:m1374_11 | -| ir.cpp:1374:25:1374:29 | ChiTotal | total:m1373_17 | -| ir.cpp:1374:25:1374:29 | ChiTotal | total:m1374_3 | -| ir.cpp:1374:25:1374:29 | Load | m1374_12 | -| ir.cpp:1374:25:1374:29 | SideEffect | ~m1367_3 | -| ir.cpp:1374:25:1374:29 | SideEffect | ~m1373_17 | -| ir.cpp:1374:25:1374:29 | Unary | r1374_5 | -| ir.cpp:1375:5:1375:12 | Address | &:r1375_1 | -| ir.cpp:1375:5:1375:12 | Address | &:r1375_1 | -| ir.cpp:1375:5:1375:12 | Address | &:r1375_9 | -| ir.cpp:1375:5:1375:12 | Arg(this) | this:r1375_1 | -| ir.cpp:1375:5:1375:12 | Arg(this) | this:r1375_9 | -| ir.cpp:1375:5:1375:12 | CallTarget | func:r1375_3 | -| ir.cpp:1375:5:1375:12 | ChiPartial | partial:m1375_5 | -| ir.cpp:1375:5:1375:12 | ChiPartial | partial:m1375_7 | -| ir.cpp:1375:5:1375:12 | ChiTotal | total:m1374_16 | -| ir.cpp:1375:5:1375:12 | ChiTotal | total:m1375_2 | -| ir.cpp:1375:5:1375:12 | SideEffect | m1375_8 | -| ir.cpp:1375:5:1375:12 | SideEffect | ~m1374_16 | -| ir.cpp:1375:5:1375:12 | Unary | r1375_1 | -| ir.cpp:1375:14:1375:18 | CallTarget | func:r1375_10 | -| ir.cpp:1375:14:1375:18 | ChiPartial | partial:m1375_12 | -| ir.cpp:1375:14:1375:18 | ChiTotal | total:m1375_6 | -| ir.cpp:1375:14:1375:18 | SideEffect | ~m1375_6 | -| ir.cpp:1376:5:1376:23 | CallTarget | func:r1376_2 | -| ir.cpp:1376:5:1376:23 | ChiPartial | partial:m1376_4 | -| ir.cpp:1376:5:1376:23 | ChiTotal | total:m1375_13 | -| ir.cpp:1376:5:1376:23 | SideEffect | ~m1375_13 | -| ir.cpp:1376:5:1376:23 | StoreValue | r1376_3 | -| ir.cpp:1376:5:1376:25 | Address | &:r1376_1 | -| ir.cpp:1376:5:1376:25 | Address | &:r1376_7 | -| ir.cpp:1376:5:1376:25 | Arg(this) | this:r1376_7 | -| ir.cpp:1376:5:1376:25 | SideEffect | m1376_6 | -| ir.cpp:1376:5:1376:25 | Unary | r1376_1 | -| ir.cpp:1376:27:1376:31 | CallTarget | func:r1376_8 | -| ir.cpp:1376:27:1376:31 | ChiPartial | partial:m1376_10 | -| ir.cpp:1376:27:1376:31 | ChiTotal | total:m1376_5 | -| ir.cpp:1376:27:1376:31 | SideEffect | ~m1376_5 | -| ir.cpp:1378:5:1378:28 | CallTarget | func:r1378_2 | -| ir.cpp:1378:5:1378:28 | ChiPartial | partial:m1378_4 | -| ir.cpp:1378:5:1378:28 | ChiTotal | total:m1376_11 | -| ir.cpp:1378:5:1378:28 | SideEffect | ~m1376_11 | -| ir.cpp:1378:5:1378:28 | StoreValue | r1378_3 | -| ir.cpp:1378:5:1378:30 | Address | &:r1378_1 | -| ir.cpp:1379:1:1379:1 | Address | &:r1379_2 | -| ir.cpp:1379:1:1379:1 | Address | &:r1379_2 | -| ir.cpp:1379:1:1379:1 | Arg(this) | this:r1379_2 | -| ir.cpp:1379:1:1379:1 | CallTarget | func:r1379_3 | -| ir.cpp:1379:1:1379:1 | ChiPartial | partial:m1379_5 | -| ir.cpp:1379:1:1379:1 | ChiPartial | partial:m1379_8 | -| ir.cpp:1379:1:1379:1 | ChiTotal | total:m1368_6 | -| ir.cpp:1379:1:1379:1 | ChiTotal | total:m1378_5 | -| ir.cpp:1379:1:1379:1 | SideEffect | m1368_6 | -| ir.cpp:1379:1:1379:1 | SideEffect | ~m1378_5 | -| ir.cpp:1381:6:1381:30 | ChiPartial | partial:m1381_3 | -| ir.cpp:1381:6:1381:30 | ChiTotal | total:m1381_2 | -| ir.cpp:1381:6:1381:30 | SideEffect | ~m1391_14 | -| ir.cpp:1382:21:1382:21 | Address | &:r1382_1 | -| ir.cpp:1382:25:1382:52 | CallTarget | func:r1382_2 | -| ir.cpp:1382:25:1382:52 | ChiPartial | partial:m1382_4 | -| ir.cpp:1382:25:1382:52 | ChiTotal | total:m1381_4 | -| ir.cpp:1382:25:1382:52 | SideEffect | ~m1381_4 | -| ir.cpp:1382:25:1382:52 | StoreValue | r1382_3 | -| ir.cpp:1383:28:1383:29 | Address | &:r1383_1 | -| ir.cpp:1383:33:1383:60 | CallTarget | func:r1383_3 | -| ir.cpp:1383:33:1383:60 | ChiPartial | partial:m1383_5 | -| ir.cpp:1383:33:1383:60 | ChiTotal | total:m1382_5 | -| ir.cpp:1383:33:1383:60 | SideEffect | ~m1382_5 | -| ir.cpp:1383:33:1383:60 | StoreValue | r1383_4 | -| ir.cpp:1383:33:1383:62 | Address | &:r1383_2 | -| ir.cpp:1383:33:1383:62 | StoreValue | r1383_9 | -| ir.cpp:1383:33:1383:62 | Unary | r1383_2 | -| ir.cpp:1383:33:1383:62 | Unary | r1383_8 | -| ir.cpp:1384:21:1384:22 | Address | &:r1384_1 | -| ir.cpp:1385:5:1385:13 | CallTarget | func:r1385_1 | -| ir.cpp:1385:5:1385:13 | ChiPartial | partial:m1385_6 | -| ir.cpp:1385:5:1385:13 | ChiTotal | total:m1383_6 | -| ir.cpp:1385:5:1385:13 | SideEffect | ~m1383_6 | -| ir.cpp:1385:15:1385:15 | Address | &:r1385_4 | -| ir.cpp:1385:15:1385:15 | Arg(0) | 0:r1385_4 | -| ir.cpp:1385:15:1385:15 | SideEffect | ~m1382_6 | -| ir.cpp:1385:15:1385:15 | Unary | r1385_2 | -| ir.cpp:1385:15:1385:15 | Unary | r1385_3 | -| ir.cpp:1386:5:1386:15 | CallTarget | func:r1386_1 | -| ir.cpp:1386:5:1386:15 | ChiPartial | partial:m1386_8 | -| ir.cpp:1386:5:1386:15 | ChiTotal | total:m1385_7 | -| ir.cpp:1386:5:1386:15 | SideEffect | ~m1385_7 | -| ir.cpp:1386:17:1386:17 | Address | &:r1386_2 | -| ir.cpp:1386:17:1386:17 | Address | &:r1386_2 | -| ir.cpp:1386:17:1386:17 | Address | &:r1386_3 | -| ir.cpp:1386:17:1386:17 | Arg(0) | 0:r1386_6 | -| ir.cpp:1386:17:1386:17 | Load | m1382_6 | -| ir.cpp:1386:17:1386:17 | Load | m1386_5 | -| ir.cpp:1386:17:1386:17 | StoreValue | r1386_4 | -| ir.cpp:1387:5:1387:21 | Address | &:r1387_1 | -| ir.cpp:1387:5:1387:21 | Address | &:r1387_1 | -| ir.cpp:1387:5:1387:21 | Address | &:r1387_1 | -| ir.cpp:1387:5:1387:21 | Arg(this) | this:r1387_1 | -| ir.cpp:1387:5:1387:21 | ChiPartial | partial:m1387_9 | -| ir.cpp:1387:5:1387:21 | ChiTotal | total:m1387_3 | -| ir.cpp:1387:5:1387:21 | SideEffect | m1387_3 | -| ir.cpp:1387:5:1387:21 | StoreValue | r1387_2 | -| ir.cpp:1387:23:1387:28 | CallTarget | func:r1387_4 | -| ir.cpp:1387:23:1387:28 | ChiPartial | partial:m1387_6 | -| ir.cpp:1387:23:1387:28 | ChiTotal | total:m1386_9 | -| ir.cpp:1387:23:1387:28 | SideEffect | ~m1386_9 | -| ir.cpp:1388:5:1388:32 | CallTarget | func:r1388_2 | -| ir.cpp:1388:5:1388:32 | ChiPartial | partial:m1388_4 | -| ir.cpp:1388:5:1388:32 | ChiTotal | total:m1387_7 | -| ir.cpp:1388:5:1388:32 | SideEffect | ~m1387_7 | -| ir.cpp:1388:5:1388:32 | StoreValue | r1388_3 | -| ir.cpp:1388:5:1388:34 | Address | &:r1388_1 | -| ir.cpp:1388:5:1388:34 | Address | &:r1388_1 | -| ir.cpp:1388:5:1388:34 | Address | &:r1388_1 | -| ir.cpp:1388:5:1388:34 | Arg(this) | this:r1388_1 | -| ir.cpp:1388:5:1388:34 | ChiPartial | partial:m1388_12 | -| ir.cpp:1388:5:1388:34 | ChiTotal | total:m1388_6 | -| ir.cpp:1388:5:1388:34 | SideEffect | m1388_6 | -| ir.cpp:1388:36:1388:41 | CallTarget | func:r1388_7 | -| ir.cpp:1388:36:1388:41 | ChiPartial | partial:m1388_9 | -| ir.cpp:1388:36:1388:41 | ChiTotal | total:m1388_5 | -| ir.cpp:1388:36:1388:41 | SideEffect | ~m1388_5 | -| ir.cpp:1390:5:1390:37 | CallTarget | func:r1390_2 | -| ir.cpp:1390:5:1390:37 | ChiPartial | partial:m1390_4 | -| ir.cpp:1390:5:1390:37 | ChiTotal | total:m1388_10 | -| ir.cpp:1390:5:1390:37 | SideEffect | ~m1388_10 | -| ir.cpp:1390:5:1390:37 | StoreValue | r1390_3 | -| ir.cpp:1390:5:1390:39 | Address | &:r1390_1 | -| ir.cpp:1391:1:1391:1 | Address | &:r1391_2 | -| ir.cpp:1391:1:1391:1 | Address | &:r1391_2 | -| ir.cpp:1391:1:1391:1 | Address | &:r1391_10 | -| ir.cpp:1391:1:1391:1 | Address | &:r1391_10 | -| ir.cpp:1391:1:1391:1 | Arg(this) | this:r1391_2 | -| ir.cpp:1391:1:1391:1 | Arg(this) | this:r1391_10 | -| ir.cpp:1391:1:1391:1 | CallTarget | func:r1391_3 | -| ir.cpp:1391:1:1391:1 | CallTarget | func:r1391_11 | -| ir.cpp:1391:1:1391:1 | ChiPartial | partial:m1391_5 | -| ir.cpp:1391:1:1391:1 | ChiPartial | partial:m1391_8 | -| ir.cpp:1391:1:1391:1 | ChiPartial | partial:m1391_13 | -| ir.cpp:1391:1:1391:1 | ChiPartial | partial:m1391_16 | -| ir.cpp:1391:1:1391:1 | ChiTotal | total:m1382_6 | -| ir.cpp:1391:1:1391:1 | ChiTotal | total:m1384_2 | -| ir.cpp:1391:1:1391:1 | ChiTotal | total:m1390_5 | -| ir.cpp:1391:1:1391:1 | ChiTotal | total:m1391_6 | -| ir.cpp:1391:1:1391:1 | SideEffect | m1382_6 | -| ir.cpp:1391:1:1391:1 | SideEffect | m1384_2 | -| ir.cpp:1391:1:1391:1 | SideEffect | ~m1390_5 | -| ir.cpp:1391:1:1391:1 | SideEffect | ~m1391_6 | -| ir.cpp:1393:6:1393:31 | ChiPartial | partial:m1393_3 | -| ir.cpp:1393:6:1393:31 | ChiTotal | total:m1393_2 | -| ir.cpp:1393:6:1393:31 | SideEffect | ~m1403_6 | -| ir.cpp:1394:22:1394:22 | Address | &:r1394_1 | -| ir.cpp:1394:26:1394:54 | CallTarget | func:r1394_2 | -| ir.cpp:1394:26:1394:54 | ChiPartial | partial:m1394_4 | -| ir.cpp:1394:26:1394:54 | ChiTotal | total:m1393_4 | -| ir.cpp:1394:26:1394:54 | SideEffect | ~m1393_4 | -| ir.cpp:1394:26:1394:54 | StoreValue | r1394_3 | -| ir.cpp:1395:29:1395:30 | Address | &:r1395_1 | -| ir.cpp:1395:34:1395:62 | CallTarget | func:r1395_3 | -| ir.cpp:1395:34:1395:62 | ChiPartial | partial:m1395_5 | -| ir.cpp:1395:34:1395:62 | ChiTotal | total:m1394_5 | -| ir.cpp:1395:34:1395:62 | SideEffect | ~m1394_5 | -| ir.cpp:1395:34:1395:62 | StoreValue | r1395_4 | -| ir.cpp:1395:34:1395:64 | Address | &:r1395_2 | -| ir.cpp:1395:34:1395:64 | StoreValue | r1395_9 | -| ir.cpp:1395:34:1395:64 | Unary | r1395_2 | -| ir.cpp:1395:34:1395:64 | Unary | r1395_8 | -| ir.cpp:1396:22:1396:23 | Address | &:r1396_1 | -| ir.cpp:1396:22:1396:23 | Address | &:r1396_1 | -| ir.cpp:1396:22:1396:23 | Arg(this) | this:r1396_1 | -| ir.cpp:1396:22:1396:23 | CallTarget | func:r1396_3 | -| ir.cpp:1396:22:1396:23 | ChiPartial | partial:m1396_5 | -| ir.cpp:1396:22:1396:23 | ChiPartial | partial:m1396_7 | -| ir.cpp:1396:22:1396:23 | ChiTotal | total:m1395_6 | -| ir.cpp:1396:22:1396:23 | ChiTotal | total:m1396_2 | -| ir.cpp:1396:22:1396:23 | SideEffect | ~m1395_6 | -| ir.cpp:1397:5:1397:13 | CallTarget | func:r1397_1 | -| ir.cpp:1397:5:1397:13 | ChiPartial | partial:m1397_6 | -| ir.cpp:1397:5:1397:13 | ChiTotal | total:m1396_6 | -| ir.cpp:1397:5:1397:13 | SideEffect | ~m1396_6 | -| ir.cpp:1397:15:1397:15 | Address | &:r1397_4 | -| ir.cpp:1397:15:1397:15 | Arg(0) | 0:r1397_4 | -| ir.cpp:1397:15:1397:15 | SideEffect | ~m1394_6 | -| ir.cpp:1397:15:1397:15 | Unary | r1397_2 | -| ir.cpp:1397:15:1397:15 | Unary | r1397_3 | -| ir.cpp:1398:5:1398:15 | CallTarget | func:r1398_1 | -| ir.cpp:1398:5:1398:15 | ChiPartial | partial:m1398_16 | -| ir.cpp:1398:5:1398:15 | ChiTotal | total:m1398_10 | -| ir.cpp:1398:5:1398:15 | SideEffect | ~m1398_10 | -| ir.cpp:1398:17:1398:17 | Address | &:r1398_2 | -| ir.cpp:1398:17:1398:17 | Address | &:r1398_2 | -| ir.cpp:1398:17:1398:17 | Address | &:r1398_2 | -| ir.cpp:1398:17:1398:17 | Address | &:r1398_7 | -| ir.cpp:1398:17:1398:17 | Arg(0) | 0:r1398_7 | -| ir.cpp:1398:17:1398:17 | Arg(0) | 0:r1398_14 | -| ir.cpp:1398:17:1398:17 | Arg(this) | this:r1398_2 | -| ir.cpp:1398:17:1398:17 | CallTarget | func:r1398_4 | -| ir.cpp:1398:17:1398:17 | ChiPartial | partial:m1398_9 | -| ir.cpp:1398:17:1398:17 | ChiPartial | partial:m1398_12 | -| ir.cpp:1398:17:1398:17 | ChiTotal | total:m1397_7 | -| ir.cpp:1398:17:1398:17 | ChiTotal | total:m1398_3 | -| ir.cpp:1398:17:1398:17 | Load | m1398_13 | -| ir.cpp:1398:17:1398:17 | SideEffect | ~m1394_6 | -| ir.cpp:1398:17:1398:17 | SideEffect | ~m1397_7 | -| ir.cpp:1398:17:1398:17 | Unary | r1398_5 | -| ir.cpp:1398:17:1398:17 | Unary | r1398_6 | -| ir.cpp:1399:5:1399:22 | Address | &:r1399_1 | -| ir.cpp:1399:5:1399:22 | Address | &:r1399_1 | -| ir.cpp:1399:5:1399:22 | Address | &:r1399_1 | -| ir.cpp:1399:5:1399:22 | Address | &:r1399_1 | -| ir.cpp:1399:5:1399:22 | Arg(this) | this:r1399_1 | -| ir.cpp:1399:5:1399:22 | Arg(this) | this:r1399_1 | -| ir.cpp:1399:5:1399:22 | CallTarget | func:r1399_3 | -| ir.cpp:1399:5:1399:22 | ChiPartial | partial:m1399_5 | -| ir.cpp:1399:5:1399:22 | ChiPartial | partial:m1399_7 | -| ir.cpp:1399:5:1399:22 | ChiPartial | partial:m1399_14 | -| ir.cpp:1399:5:1399:22 | ChiTotal | total:m1398_17 | -| ir.cpp:1399:5:1399:22 | ChiTotal | total:m1399_2 | -| ir.cpp:1399:5:1399:22 | ChiTotal | total:m1399_8 | -| ir.cpp:1399:5:1399:22 | SideEffect | m1399_8 | -| ir.cpp:1399:5:1399:22 | SideEffect | ~m1398_17 | -| ir.cpp:1399:24:1399:29 | CallTarget | func:r1399_9 | -| ir.cpp:1399:24:1399:29 | ChiPartial | partial:m1399_11 | -| ir.cpp:1399:24:1399:29 | ChiTotal | total:m1399_6 | -| ir.cpp:1399:24:1399:29 | SideEffect | ~m1399_6 | -| ir.cpp:1400:5:1400:33 | CallTarget | func:r1400_2 | -| ir.cpp:1400:5:1400:33 | ChiPartial | partial:m1400_4 | -| ir.cpp:1400:5:1400:33 | ChiTotal | total:m1399_12 | -| ir.cpp:1400:5:1400:33 | SideEffect | ~m1399_12 | -| ir.cpp:1400:5:1400:33 | StoreValue | r1400_3 | -| ir.cpp:1400:5:1400:35 | Address | &:r1400_1 | -| ir.cpp:1400:5:1400:35 | Address | &:r1400_1 | -| ir.cpp:1400:5:1400:35 | Address | &:r1400_1 | -| ir.cpp:1400:5:1400:35 | Arg(this) | this:r1400_1 | -| ir.cpp:1400:5:1400:35 | ChiPartial | partial:m1400_12 | -| ir.cpp:1400:5:1400:35 | ChiTotal | total:m1400_6 | -| ir.cpp:1400:5:1400:35 | SideEffect | m1400_6 | -| ir.cpp:1400:37:1400:42 | CallTarget | func:r1400_7 | -| ir.cpp:1400:37:1400:42 | ChiPartial | partial:m1400_9 | -| ir.cpp:1400:37:1400:42 | ChiTotal | total:m1400_5 | -| ir.cpp:1400:37:1400:42 | SideEffect | ~m1400_5 | -| ir.cpp:1401:5:1401:38 | CallTarget | func:r1401_2 | -| ir.cpp:1401:5:1401:38 | ChiPartial | partial:m1401_4 | -| ir.cpp:1401:5:1401:38 | ChiTotal | total:m1400_10 | -| ir.cpp:1401:5:1401:38 | SideEffect | ~m1400_10 | -| ir.cpp:1401:5:1401:38 | StoreValue | r1401_3 | -| ir.cpp:1401:5:1401:40 | Address | &:r1401_1 | -| ir.cpp:1403:9:1403:9 | Address | &:r1403_1 | -| ir.cpp:1403:13:1403:41 | CallTarget | func:r1403_3 | -| ir.cpp:1403:13:1403:41 | ChiPartial | partial:m1403_5 | -| ir.cpp:1403:13:1403:41 | ChiTotal | total:m1401_5 | -| ir.cpp:1403:13:1403:41 | SideEffect | ~m1401_5 | -| ir.cpp:1403:13:1403:41 | StoreValue | r1403_4 | -| ir.cpp:1403:13:1403:43 | Address | &:r1403_2 | -| ir.cpp:1403:13:1403:43 | Unary | r1403_2 | -| ir.cpp:1403:45:1403:45 | Address | &:r1403_8 | -| ir.cpp:1403:45:1403:45 | Load | ~m1403_7 | -| ir.cpp:1403:45:1403:45 | StoreValue | r1403_9 | -| ir.cpp:1406:6:1406:20 | ChiPartial | partial:m1406_3 | -| ir.cpp:1406:6:1406:20 | ChiTotal | total:m1406_2 | -| ir.cpp:1406:6:1406:20 | SideEffect | ~m1415_4 | -| ir.cpp:1407:11:1407:11 | Address | &:r1407_1 | -| ir.cpp:1407:15:1407:32 | CallTarget | func:r1407_2 | -| ir.cpp:1407:15:1407:32 | ChiPartial | partial:m1407_4 | -| ir.cpp:1407:15:1407:32 | ChiTotal | total:m1406_4 | -| ir.cpp:1407:15:1407:32 | SideEffect | ~m1406_4 | -| ir.cpp:1407:15:1407:32 | StoreValue | r1407_3 | -| ir.cpp:1408:18:1408:19 | Address | &:r1408_1 | -| ir.cpp:1408:23:1408:40 | CallTarget | func:r1408_3 | -| ir.cpp:1408:23:1408:40 | ChiPartial | partial:m1408_5 | -| ir.cpp:1408:23:1408:40 | ChiTotal | total:m1407_5 | -| ir.cpp:1408:23:1408:40 | SideEffect | ~m1407_5 | -| ir.cpp:1408:23:1408:40 | StoreValue | r1408_4 | -| ir.cpp:1408:23:1408:42 | Address | &:r1408_2 | -| ir.cpp:1408:23:1408:42 | StoreValue | r1408_9 | -| ir.cpp:1408:23:1408:42 | Unary | r1408_2 | -| ir.cpp:1408:23:1408:42 | Unary | r1408_8 | -| ir.cpp:1410:5:1410:13 | CallTarget | func:r1410_1 | -| ir.cpp:1410:5:1410:13 | ChiPartial | partial:m1410_6 | -| ir.cpp:1410:5:1410:13 | ChiTotal | total:m1408_6 | -| ir.cpp:1410:5:1410:13 | SideEffect | ~m1408_6 | -| ir.cpp:1410:15:1410:15 | Address | &:r1410_4 | -| ir.cpp:1410:15:1410:15 | Arg(0) | 0:r1410_4 | -| ir.cpp:1410:15:1410:15 | SideEffect | ~m1407_6 | -| ir.cpp:1410:15:1410:15 | Unary | r1410_2 | -| ir.cpp:1410:15:1410:15 | Unary | r1410_3 | -| ir.cpp:1411:5:1411:15 | CallTarget | func:r1411_1 | -| ir.cpp:1411:5:1411:15 | ChiPartial | partial:m1411_5 | -| ir.cpp:1411:5:1411:15 | ChiTotal | total:m1410_7 | -| ir.cpp:1411:5:1411:15 | SideEffect | ~m1410_7 | -| ir.cpp:1411:17:1411:17 | Address | &:r1411_2 | -| ir.cpp:1411:17:1411:17 | Arg(0) | 0:r1411_3 | -| ir.cpp:1411:17:1411:17 | Load | m1407_6 | -| ir.cpp:1413:9:1413:9 | Address | &:r1413_1 | -| ir.cpp:1413:13:1413:30 | Address | &:r1413_6 | -| ir.cpp:1413:13:1413:30 | CallTarget | func:r1413_2 | -| ir.cpp:1413:13:1413:30 | ChiPartial | partial:m1413_4 | -| ir.cpp:1413:13:1413:30 | ChiTotal | total:m1411_6 | -| ir.cpp:1413:13:1413:30 | SideEffect | ~m1411_6 | -| ir.cpp:1413:13:1413:30 | StoreValue | r1413_3 | -| ir.cpp:1413:13:1413:30 | Unary | r1413_6 | -| ir.cpp:1413:34:1413:34 | Address | &:r1413_8 | -| ir.cpp:1413:34:1413:34 | Load | ~m1413_7 | -| ir.cpp:1413:34:1413:34 | StoreValue | r1413_9 | -| ir.cpp:1415:5:1415:27 | CallTarget | func:r1415_1 | -| ir.cpp:1415:5:1415:27 | ChiPartial | partial:m1415_3 | -| ir.cpp:1415:5:1415:27 | ChiTotal | total:m1413_5 | -| ir.cpp:1415:5:1415:27 | SideEffect | ~m1413_5 | -| ir.cpp:1423:6:1423:29 | ChiPartial | partial:m1423_3 | -| ir.cpp:1423:6:1423:29 | ChiTotal | total:m1423_2 | -| ir.cpp:1423:6:1423:29 | SideEffect | ~m1428_5 | -| ir.cpp:1424:16:1424:17 | Address | &:r1424_1 | -| ir.cpp:1424:21:1424:46 | Address | &:r1424_6 | -| ir.cpp:1424:21:1424:46 | CallTarget | func:r1424_2 | -| ir.cpp:1424:21:1424:46 | ChiPartial | partial:m1424_4 | -| ir.cpp:1424:21:1424:46 | ChiTotal | total:m1423_4 | -| ir.cpp:1424:21:1424:46 | SideEffect | ~m1423_4 | -| ir.cpp:1424:21:1424:46 | StoreValue | r1424_3 | -| ir.cpp:1424:21:1424:46 | Unary | r1424_6 | -| ir.cpp:1424:21:1424:50 | StoreValue | r1424_12 | -| ir.cpp:1424:21:1424:50 | Unary | r1424_10 | -| ir.cpp:1424:21:1424:50 | Unary | r1424_11 | -| ir.cpp:1424:50:1424:50 | Address | &:r1424_8 | -| ir.cpp:1424:50:1424:50 | Load | ~m1424_7 | -| ir.cpp:1424:50:1424:50 | Unary | r1424_9 | -| ir.cpp:1425:9:1425:9 | Address | &:r1425_1 | -| ir.cpp:1425:13:1425:38 | Address | &:r1425_6 | -| ir.cpp:1425:13:1425:38 | CallTarget | func:r1425_2 | -| ir.cpp:1425:13:1425:38 | ChiPartial | partial:m1425_4 | -| ir.cpp:1425:13:1425:38 | ChiTotal | total:m1424_5 | -| ir.cpp:1425:13:1425:38 | SideEffect | ~m1424_5 | -| ir.cpp:1425:13:1425:38 | StoreValue | r1425_3 | -| ir.cpp:1425:13:1425:38 | Unary | r1425_6 | -| ir.cpp:1425:13:1425:42 | Load | ~m1425_5 | -| ir.cpp:1425:13:1425:42 | StoreValue | r1425_10 | -| ir.cpp:1425:42:1425:42 | Address | &:r1425_8 | -| ir.cpp:1425:42:1425:42 | Address | &:r1425_9 | -| ir.cpp:1425:42:1425:42 | Load | ~m1425_7 | -| ir.cpp:1427:18:1427:19 | Address | &:r1427_1 | -| ir.cpp:1427:23:1427:48 | Address | &:r1427_6 | -| ir.cpp:1427:23:1427:48 | CallTarget | func:r1427_2 | -| ir.cpp:1427:23:1427:48 | ChiPartial | partial:m1427_4 | -| ir.cpp:1427:23:1427:48 | ChiTotal | total:m1425_5 | -| ir.cpp:1427:23:1427:48 | SideEffect | ~m1425_5 | -| ir.cpp:1427:23:1427:48 | StoreValue | r1427_3 | -| ir.cpp:1427:23:1427:48 | Unary | r1427_6 | -| ir.cpp:1427:23:1427:52 | Left | r1427_9 | -| ir.cpp:1427:23:1427:55 | StoreValue | r1427_13 | -| ir.cpp:1427:23:1427:55 | Unary | r1427_11 | -| ir.cpp:1427:23:1427:55 | Unary | r1427_12 | -| ir.cpp:1427:52:1427:52 | Unary | r1427_8 | -| ir.cpp:1427:54:1427:54 | Right | r1427_10 | -| ir.cpp:1428:11:1428:11 | Address | &:r1428_1 | -| ir.cpp:1428:15:1428:40 | Address | &:r1428_6 | -| ir.cpp:1428:15:1428:40 | CallTarget | func:r1428_2 | -| ir.cpp:1428:15:1428:40 | ChiPartial | partial:m1428_4 | -| ir.cpp:1428:15:1428:40 | ChiTotal | total:m1427_5 | -| ir.cpp:1428:15:1428:40 | SideEffect | ~m1427_5 | -| ir.cpp:1428:15:1428:40 | StoreValue | r1428_3 | -| ir.cpp:1428:15:1428:40 | Unary | r1428_6 | -| ir.cpp:1428:15:1428:44 | Left | r1428_9 | -| ir.cpp:1428:15:1428:47 | Address | &:r1428_11 | -| ir.cpp:1428:15:1428:47 | Load | ~m1428_7 | -| ir.cpp:1428:15:1428:47 | StoreValue | r1428_12 | -| ir.cpp:1428:44:1428:44 | Unary | r1428_8 | -| ir.cpp:1428:46:1428:46 | Right | r1428_10 | -| ir.cpp:1445:6:1445:24 | ChiPartial | partial:m1445_3 | -| ir.cpp:1445:6:1445:24 | ChiTotal | total:m1445_2 | -| ir.cpp:1445:6:1445:24 | SideEffect | ~m1449_10 | -| ir.cpp:1446:14:1446:14 | Address | &:r1446_1 | -| ir.cpp:1446:18:1446:40 | CallTarget | func:r1446_2 | -| ir.cpp:1446:18:1446:40 | ChiPartial | partial:m1446_4 | -| ir.cpp:1446:18:1446:40 | ChiTotal | total:m1445_4 | -| ir.cpp:1446:18:1446:40 | SideEffect | ~m1445_4 | -| ir.cpp:1446:18:1446:40 | StoreValue | r1446_3 | -| ir.cpp:1447:5:1447:5 | Address | &:r1447_10 | -| ir.cpp:1447:9:1447:36 | Address | &:r1447_1 | -| ir.cpp:1447:9:1447:36 | Address | &:r1447_8 | -| ir.cpp:1447:9:1447:36 | Load | ~m1447_6 | -| ir.cpp:1447:9:1447:36 | StoreValue | r1447_9 | -| ir.cpp:1447:9:1447:36 | Unary | r1447_1 | -| ir.cpp:1447:9:1447:36 | Unary | r1447_7 | -| ir.cpp:1447:10:1447:33 | CallTarget | func:r1447_2 | -| ir.cpp:1447:10:1447:33 | ChiPartial | partial:m1447_4 | -| ir.cpp:1447:10:1447:33 | ChiTotal | total:m1446_5 | -| ir.cpp:1447:10:1447:33 | SideEffect | ~m1446_5 | -| ir.cpp:1447:10:1447:33 | StoreValue | r1447_3 | -| ir.cpp:1448:9:1448:9 | Address | &:r1448_1 | -| ir.cpp:1448:13:1448:36 | CallTarget | func:r1448_2 | -| ir.cpp:1448:13:1448:36 | ChiPartial | partial:m1448_4 | -| ir.cpp:1448:13:1448:36 | ChiTotal | total:m1447_5 | -| ir.cpp:1448:13:1448:36 | SideEffect | ~m1447_5 | -| ir.cpp:1448:13:1448:36 | StoreValue | r1448_3 | -| ir.cpp:1448:40:1448:40 | Address | &:r1448_7 | -| ir.cpp:1448:40:1448:40 | Load | ~m1448_6 | -| ir.cpp:1448:40:1448:40 | StoreValue | r1448_8 | -| ir.cpp:1449:11:1449:11 | Address | &:r1449_1 | -| ir.cpp:1449:16:1449:39 | CallTarget | func:r1449_2 | -| ir.cpp:1449:16:1449:39 | ChiPartial | partial:m1449_4 | -| ir.cpp:1449:16:1449:39 | ChiTotal | total:m1448_5 | -| ir.cpp:1449:16:1449:39 | SideEffect | ~m1448_5 | -| ir.cpp:1449:16:1449:39 | StoreValue | r1449_3 | -| ir.cpp:1449:44:1449:44 | Arg(this) | this:r0_11 | -| ir.cpp:1449:44:1449:44 | CallTarget | func:r1449_7 | -| ir.cpp:1449:44:1449:44 | ChiPartial | partial:m1449_9 | -| ir.cpp:1449:44:1449:44 | ChiTotal | total:m1449_5 | -| ir.cpp:1449:44:1449:44 | SideEffect | ~m1449_5 | -| ir.cpp:1449:44:1449:44 | StoreValue | r1449_8 | -| ir.cpp:1453:3:1453:21 | Address | &:r1453_5 | -| ir.cpp:1453:3:1453:21 | Address | &:r1453_5 | -| ir.cpp:1453:3:1453:21 | Address | &:r1453_7 | -| ir.cpp:1453:3:1453:21 | Address | &:r1453_7 | -| ir.cpp:1453:3:1453:21 | ChiPartial | partial:m1453_3 | -| ir.cpp:1453:3:1453:21 | ChiTotal | total:m1453_2 | -| ir.cpp:1453:3:1453:21 | Load | m1453_6 | -| ir.cpp:1453:3:1453:21 | SideEffect | m1453_3 | -| ir.cpp:1453:3:1453:21 | SideEffect | m1453_8 | -| ir.cpp:1459:3:1459:20 | Address | &:r1459_5 | -| ir.cpp:1459:3:1459:20 | Address | &:r1459_5 | -| ir.cpp:1459:3:1459:20 | Address | &:r1459_7 | -| ir.cpp:1459:3:1459:20 | Address | &:r1459_7 | -| ir.cpp:1459:3:1459:20 | ChiPartial | partial:m1459_3 | -| ir.cpp:1459:3:1459:20 | ChiTotal | total:m1459_2 | -| ir.cpp:1459:3:1459:20 | Load | m1459_6 | -| ir.cpp:1459:3:1459:20 | SideEffect | m1459_3 | -| ir.cpp:1459:3:1459:20 | SideEffect | m1460_6 | -| ir.cpp:1459:3:1459:20 | Unary | m1459_6 | -| ir.cpp:1459:26:1459:30 | Address | &:r1459_9 | -| ir.cpp:1459:26:1459:30 | ChiPartial | partial:m1459_11 | -| ir.cpp:1459:26:1459:30 | ChiTotal | total:m1459_8 | -| ir.cpp:1459:26:1459:30 | StoreValue | r1459_10 | -| ir.cpp:1460:5:1460:5 | Address | &:r1460_2 | -| ir.cpp:1460:5:1460:5 | Address | &:r1460_4 | -| ir.cpp:1460:5:1460:5 | Load | m1459_6 | -| ir.cpp:1460:5:1460:5 | Unary | r1460_3 | -| ir.cpp:1460:5:1460:9 | ChiPartial | partial:m1460_5 | -| ir.cpp:1460:5:1460:9 | ChiTotal | total:m1459_12 | -| ir.cpp:1460:9:1460:9 | StoreValue | r1460_1 | -| ir.cpp:1464:6:1464:29 | ChiPartial | partial:m1464_3 | -| ir.cpp:1464:6:1464:29 | ChiTotal | total:m1464_2 | -| ir.cpp:1464:6:1464:29 | SideEffect | m1464_3 | -| ir.cpp:1465:9:1465:10 | Address | &:r1465_1 | -| ir.cpp:1465:9:1465:10 | Left | r1465_1 | -| ir.cpp:1465:9:1465:10 | Left | r1465_1 | -| ir.cpp:1465:16:1465:22 | Address | &:r1465_4 | -| ir.cpp:1465:16:1465:22 | Address | &:r1465_9 | -| ir.cpp:1465:16:1465:22 | Right | r1465_3 | -| ir.cpp:1465:16:1465:22 | Right | r1465_8 | -| ir.cpp:1465:18:1465:18 | ChiPartial | partial:m1465_6 | -| ir.cpp:1465:18:1465:18 | ChiTotal | total:m1465_2 | -| ir.cpp:1465:18:1465:18 | StoreValue | r1465_5 | -| ir.cpp:1465:21:1465:21 | ChiPartial | partial:m1465_11 | -| ir.cpp:1465:21:1465:21 | ChiTotal | total:m1465_7 | -| ir.cpp:1465:21:1465:21 | StoreValue | r1465_10 | -| ir.cpp:1468:15:1468:15 | Address | &:r1468_1 | -| ir.cpp:1468:16:1468:16 | Address | &:r1468_5 | -| ir.cpp:1468:20:1468:20 | Address | &:r1468_6 | -| ir.cpp:1468:26:1468:27 | StoreValue | r1468_3 | -| ir.cpp:1468:26:1468:27 | Unary | r1468_2 | -| ir.cpp:1469:9:1469:10 | Address | &:r1469_2 | -| ir.cpp:1469:9:1469:10 | Address | &:r1469_3 | -| ir.cpp:1469:9:1469:10 | Load | m0_14 | -| ir.cpp:1469:9:1469:14 | ChiPartial | partial:m1469_4 | -| ir.cpp:1469:9:1469:14 | ChiTotal | total:m1465_12 | -| ir.cpp:1469:14:1469:14 | StoreValue | r1469_1 | -| ir.cpp:1470:14:1470:16 | Address | &:r1470_1 | -| ir.cpp:1470:20:1470:21 | Address | &:r1470_2 | -| ir.cpp:1470:20:1470:21 | Load | m0_14 | -| ir.cpp:1470:20:1470:21 | StoreValue | r1470_4 | -| ir.cpp:1470:20:1470:21 | Unary | r1470_3 | -| ir.cpp:1471:13:1471:13 | Address | &:r1471_1 | -| ir.cpp:1471:17:1471:18 | Address | &:r1471_2 | -| ir.cpp:1471:17:1471:18 | Address | &:r1471_3 | -| ir.cpp:1471:17:1471:18 | Load | m0_14 | -| ir.cpp:1471:17:1471:18 | Load | m1469_4 | -| ir.cpp:1471:17:1471:18 | StoreValue | r1471_4 | -| ir.cpp:1475:15:1475:36 | Address | &:r1475_1 | -| ir.cpp:1475:40:1475:41 | StoreValue | r1475_3 | -| ir.cpp:1475:40:1475:41 | Unary | r1475_2 | -| ir.cpp:1476:15:1476:16 | Address | &:r1476_1 | -| ir.cpp:1476:20:1476:41 | Address | &:r1476_2 | -| ir.cpp:1476:20:1476:41 | Left | r1476_5 | -| ir.cpp:1476:20:1476:41 | Load | m1475_4 | -| ir.cpp:1476:20:1476:41 | Unary | r1476_3 | -| ir.cpp:1476:20:1476:41 | Unary | r1476_4 | -| ir.cpp:1476:20:1476:44 | StoreValue | r1476_8 | -| ir.cpp:1476:20:1476:44 | Unary | r1476_7 | -| ir.cpp:1476:43:1476:43 | Right | r1476_6 | -| ir.cpp:1477:15:1477:16 | Address | &:r1477_1 | -| ir.cpp:1477:20:1477:41 | Address | &:r1477_2 | -| ir.cpp:1477:20:1477:41 | Left | r1477_5 | -| ir.cpp:1477:20:1477:41 | Load | m1475_4 | -| ir.cpp:1477:20:1477:41 | Unary | r1477_3 | -| ir.cpp:1477:20:1477:41 | Unary | r1477_4 | -| ir.cpp:1477:20:1477:44 | StoreValue | r1477_8 | -| ir.cpp:1477:20:1477:44 | Unary | r1477_7 | -| ir.cpp:1477:43:1477:43 | Right | r1477_6 | -| ir.cpp:1478:9:1478:10 | Address | &:r1478_2 | -| ir.cpp:1478:9:1478:10 | Address | &:r1478_4 | -| ir.cpp:1478:9:1478:10 | Load | m1477_9 | -| ir.cpp:1478:9:1478:10 | Unary | r1478_3 | -| ir.cpp:1478:9:1478:14 | ChiPartial | partial:m1478_5 | -| ir.cpp:1478:9:1478:14 | ChiTotal | total:m1469_5 | -| ir.cpp:1478:14:1478:14 | StoreValue | r1478_1 | -| ir.cpp:1479:14:1479:16 | Address | &:r1479_1 | -| ir.cpp:1479:20:1479:21 | Address | &:r1479_2 | -| ir.cpp:1479:20:1479:21 | Load | m1477_9 | -| ir.cpp:1479:20:1479:21 | StoreValue | r1479_5 | -| ir.cpp:1479:20:1479:21 | Unary | r1479_3 | -| ir.cpp:1479:20:1479:21 | Unary | r1479_4 | -| ir.cpp:1480:13:1480:13 | Address | &:r1480_1 | -| ir.cpp:1480:17:1480:18 | Address | &:r1480_2 | -| ir.cpp:1480:17:1480:18 | Address | &:r1480_3 | -| ir.cpp:1480:17:1480:18 | Load | m1477_9 | -| ir.cpp:1480:17:1480:18 | Load | m1478_5 | -| ir.cpp:1480:17:1480:18 | StoreValue | r1480_4 | -| ir.cpp:1484:8:1484:8 | Address | &:r1484_5 | -| ir.cpp:1484:8:1484:8 | Address | &:r1484_5 | -| ir.cpp:1484:8:1484:8 | Address | &:r1484_7 | -| ir.cpp:1484:8:1484:8 | Address | &:r1484_7 | -| ir.cpp:1484:8:1484:8 | ChiPartial | partial:m1484_3 | -| ir.cpp:1484:8:1484:8 | ChiTotal | total:m1484_2 | -| ir.cpp:1484:8:1484:8 | Load | m1484_6 | -| ir.cpp:1484:8:1484:8 | SideEffect | m1484_3 | -| ir.cpp:1484:8:1484:8 | SideEffect | m1484_8 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_5 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_5 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_5 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_5 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_7 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_7 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_7 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_7 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_9 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_10 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_13 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_17 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_18 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_21 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_25 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_26 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_29 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_33 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_34 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_37 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_41 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_42 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_45 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_49 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_50 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_53 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_57 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_58 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_61 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_65 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_66 | -| ir.cpp:1488:8:1488:8 | Address | &:r1488_69 | -| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_3 | -| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_3 | -| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_15 | -| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_23 | -| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_31 | -| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_39 | -| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_47 | -| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_55 | -| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_63 | -| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_71 | -| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_2 | -| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_2 | -| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_8 | -| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_16 | -| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_24 | -| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_32 | -| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_40 | -| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_48 | -| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_56 | -| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_64 | -| ir.cpp:1488:8:1488:8 | Load | m0_2 | -| ir.cpp:1488:8:1488:8 | Load | m0_2 | -| ir.cpp:1488:8:1488:8 | Load | m0_2 | -| ir.cpp:1488:8:1488:8 | Load | m0_2 | -| ir.cpp:1488:8:1488:8 | Load | m0_2 | -| ir.cpp:1488:8:1488:8 | Load | m0_2 | -| ir.cpp:1488:8:1488:8 | Load | m0_2 | -| ir.cpp:1488:8:1488:8 | Load | m0_2 | -| ir.cpp:1488:8:1488:8 | Load | m1488_6 | -| ir.cpp:1488:8:1488:8 | Load | m1488_6 | -| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | -| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | -| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | -| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | -| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | -| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | -| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | -| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | -| ir.cpp:1488:8:1488:8 | SideEffect | m1488_3 | -| ir.cpp:1488:8:1488:8 | SideEffect | m1488_3 | -| ir.cpp:1488:8:1488:8 | SideEffect | m1488_8 | -| ir.cpp:1488:8:1488:8 | SideEffect | m1488_72 | -| ir.cpp:1488:8:1488:8 | StoreValue | r1488_14 | -| ir.cpp:1488:8:1488:8 | StoreValue | r1488_22 | -| ir.cpp:1488:8:1488:8 | StoreValue | r1488_30 | -| ir.cpp:1488:8:1488:8 | StoreValue | r1488_38 | -| ir.cpp:1488:8:1488:8 | StoreValue | r1488_46 | -| ir.cpp:1488:8:1488:8 | StoreValue | r1488_54 | -| ir.cpp:1488:8:1488:8 | StoreValue | r1488_62 | -| ir.cpp:1488:8:1488:8 | StoreValue | r1488_70 | -| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | -| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | -| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | -| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | -| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | -| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | -| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | -| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | -| ir.cpp:1488:8:1488:8 | Unary | r1488_11 | -| ir.cpp:1488:8:1488:8 | Unary | r1488_12 | -| ir.cpp:1488:8:1488:8 | Unary | r1488_19 | -| ir.cpp:1488:8:1488:8 | Unary | r1488_20 | -| ir.cpp:1488:8:1488:8 | Unary | r1488_27 | -| ir.cpp:1488:8:1488:8 | Unary | r1488_28 | -| ir.cpp:1488:8:1488:8 | Unary | r1488_35 | -| ir.cpp:1488:8:1488:8 | Unary | r1488_36 | -| ir.cpp:1488:8:1488:8 | Unary | r1488_43 | -| ir.cpp:1488:8:1488:8 | Unary | r1488_44 | -| ir.cpp:1488:8:1488:8 | Unary | r1488_51 | -| ir.cpp:1488:8:1488:8 | Unary | r1488_52 | -| ir.cpp:1488:8:1488:8 | Unary | r1488_59 | -| ir.cpp:1488:8:1488:8 | Unary | r1488_60 | -| ir.cpp:1488:8:1488:8 | Unary | r1488_67 | -| ir.cpp:1488:8:1488:8 | Unary | r1488_68 | -| ir.cpp:1501:6:1501:35 | ChiPartial | partial:m1501_3 | -| ir.cpp:1501:6:1501:35 | ChiTotal | total:m1501_2 | -| ir.cpp:1501:6:1501:35 | SideEffect | ~m1527_7 | -| ir.cpp:1502:39:1502:39 | Address | &:r1502_1 | -| ir.cpp:1502:39:1502:39 | Address | &:r1502_1 | -| ir.cpp:1502:39:1502:39 | Arg(this) | this:r1502_1 | -| ir.cpp:1502:39:1502:39 | CallTarget | func:r1502_3 | -| ir.cpp:1502:39:1502:39 | ChiPartial | partial:m1502_5 | -| ir.cpp:1502:39:1502:39 | ChiPartial | partial:m1502_7 | -| ir.cpp:1502:39:1502:39 | ChiTotal | total:m1501_4 | -| ir.cpp:1502:39:1502:39 | ChiTotal | total:m1502_2 | -| ir.cpp:1502:39:1502:39 | SideEffect | ~m1501_4 | -| ir.cpp:1505:14:1505:14 | Address | &:r1505_1 | -| ir.cpp:1505:15:1505:15 | Address | &:r1505_5 | -| ir.cpp:1505:18:1505:18 | Address | &:r1505_9 | -| ir.cpp:1505:21:1505:21 | Address | &:r1505_13 | -| ir.cpp:1505:24:1505:24 | Address | &:r1505_17 | -| ir.cpp:1505:27:1505:27 | Address | &:r1505_23 | -| ir.cpp:1505:30:1505:30 | Address | &:r1505_27 | -| ir.cpp:1505:34:1505:34 | Address | &:r1505_31 | -| ir.cpp:1505:41:1505:41 | Address | &:r1505_37 | -| ir.cpp:1505:46:1505:46 | Address | &:r1505_2 | -| ir.cpp:1505:46:1505:46 | Load | m1502_8 | -| ir.cpp:1505:46:1505:46 | StoreValue | r1505_3 | -| ir.cpp:1505:47:1505:47 | Address | &:r1505_19 | -| ir.cpp:1505:47:1505:47 | Address | &:r1505_33 | -| ir.cpp:1505:47:1505:47 | Load | ~m1505_4 | -| ir.cpp:1505:47:1505:47 | Load | ~m1505_4 | -| ir.cpp:1505:47:1505:47 | StoreValue | r1505_7 | -| ir.cpp:1505:47:1505:47 | StoreValue | r1505_11 | -| ir.cpp:1505:47:1505:47 | StoreValue | r1505_15 | -| ir.cpp:1505:47:1505:47 | StoreValue | r1505_21 | -| ir.cpp:1505:47:1505:47 | StoreValue | r1505_25 | -| ir.cpp:1505:47:1505:47 | StoreValue | r1505_29 | -| ir.cpp:1505:47:1505:47 | StoreValue | r1505_35 | -| ir.cpp:1505:47:1505:47 | StoreValue | r1505_39 | -| ir.cpp:1505:47:1505:47 | Unary | r1505_6 | -| ir.cpp:1505:47:1505:47 | Unary | r1505_10 | -| ir.cpp:1505:47:1505:47 | Unary | r1505_14 | -| ir.cpp:1505:47:1505:47 | Unary | r1505_18 | -| ir.cpp:1505:47:1505:47 | Unary | r1505_20 | -| ir.cpp:1505:47:1505:47 | Unary | r1505_24 | -| ir.cpp:1505:47:1505:47 | Unary | r1505_28 | -| ir.cpp:1505:47:1505:47 | Unary | r1505_32 | -| ir.cpp:1505:47:1505:47 | Unary | r1505_34 | -| ir.cpp:1505:47:1505:47 | Unary | r1505_38 | -| ir.cpp:1506:9:1506:9 | Address | &:r1506_2 | -| ir.cpp:1506:9:1506:9 | Address | &:r1506_3 | -| ir.cpp:1506:9:1506:9 | Load | m1505_12 | -| ir.cpp:1506:9:1506:15 | ChiPartial | partial:m1506_4 | -| ir.cpp:1506:9:1506:15 | ChiTotal | total:m1505_4 | -| ir.cpp:1506:13:1506:15 | StoreValue | r1506_1 | -| ir.cpp:1507:17:1507:18 | Address | &:r1507_1 | -| ir.cpp:1507:22:1507:22 | Address | &:r1507_2 | -| ir.cpp:1507:22:1507:22 | Load | m1505_12 | -| ir.cpp:1507:22:1507:22 | StoreValue | r1507_4 | -| ir.cpp:1507:22:1507:22 | Unary | r1507_3 | -| ir.cpp:1508:13:1508:13 | Address | &:r1508_1 | -| ir.cpp:1508:17:1508:17 | Address | &:r1508_2 | -| ir.cpp:1508:17:1508:17 | Address | &:r1508_3 | -| ir.cpp:1508:17:1508:17 | Load | m1505_8 | -| ir.cpp:1508:17:1508:17 | Load | ~m1505_4 | -| ir.cpp:1508:17:1508:17 | StoreValue | r1508_4 | -| ir.cpp:1509:9:1509:9 | Address | &:r1509_2 | -| ir.cpp:1509:9:1509:9 | Address | &:r1509_3 | -| ir.cpp:1509:9:1509:9 | Load | m1505_22 | -| ir.cpp:1509:9:1509:13 | ChiPartial | partial:m1509_4 | -| ir.cpp:1509:9:1509:13 | ChiTotal | total:m1502_6 | -| ir.cpp:1509:13:1509:13 | StoreValue | r1509_1 | -| ir.cpp:1510:9:1510:10 | Address | &:r1510_5 | -| ir.cpp:1510:9:1510:14 | ChiPartial | partial:m1510_6 | -| ir.cpp:1510:9:1510:14 | ChiTotal | total:m1509_5 | -| ir.cpp:1510:10:1510:10 | Address | &:r1510_2 | -| ir.cpp:1510:10:1510:10 | Address | &:r1510_3 | -| ir.cpp:1510:10:1510:10 | Load | m1505_26 | -| ir.cpp:1510:10:1510:10 | Load | ~m1505_4 | -| ir.cpp:1510:10:1510:10 | Unary | r1510_4 | -| ir.cpp:1510:14:1510:14 | StoreValue | r1510_1 | -| ir.cpp:1511:14:1511:15 | Address | &:r1511_1 | -| ir.cpp:1511:19:1511:19 | Address | &:r1511_2 | -| ir.cpp:1511:19:1511:19 | Load | m1505_22 | -| ir.cpp:1511:19:1511:19 | StoreValue | r1511_4 | -| ir.cpp:1511:19:1511:19 | Unary | r1511_3 | -| ir.cpp:1512:14:1512:15 | Address | &:r1512_1 | -| ir.cpp:1512:19:1512:20 | StoreValue | r1512_4 | -| ir.cpp:1512:20:1512:20 | Address | &:r1512_2 | -| ir.cpp:1512:20:1512:20 | Load | m1505_22 | -| ir.cpp:1512:20:1512:20 | Unary | r1512_3 | -| ir.cpp:1513:13:1513:13 | Address | &:r1513_1 | -| ir.cpp:1513:17:1513:17 | Address | &:r1513_2 | -| ir.cpp:1513:17:1513:17 | Address | &:r1513_3 | -| ir.cpp:1513:17:1513:17 | Load | m1505_22 | -| ir.cpp:1513:17:1513:17 | Load | ~m1510_7 | -| ir.cpp:1513:17:1513:17 | StoreValue | r1513_4 | -| ir.cpp:1517:14:1517:35 | Address | &:r1517_1 | -| ir.cpp:1517:39:1517:39 | Address | &:r1517_2 | -| ir.cpp:1517:39:1517:39 | Load | m1502_8 | -| ir.cpp:1517:39:1517:39 | StoreValue | r1517_3 | -| ir.cpp:1518:15:1518:15 | Address | &:r1518_1 | -| ir.cpp:1518:19:1518:40 | Unary | r1518_2 | -| ir.cpp:1518:19:1518:42 | StoreValue | r1518_4 | -| ir.cpp:1518:42:1518:42 | Unary | r1518_3 | -| ir.cpp:1519:15:1519:15 | Address | &:r1519_1 | -| ir.cpp:1519:19:1519:40 | Unary | r1519_2 | -| ir.cpp:1519:19:1519:42 | StoreValue | r1519_4 | -| ir.cpp:1519:42:1519:42 | Unary | r1519_3 | -| ir.cpp:1521:15:1521:15 | Address | &:r1521_1 | -| ir.cpp:1521:19:1521:40 | Unary | r1521_2 | -| ir.cpp:1521:19:1521:42 | StoreValue | r1521_6 | -| ir.cpp:1521:19:1521:42 | Unary | r1521_5 | -| ir.cpp:1521:42:1521:42 | Address | &:r1521_3 | -| ir.cpp:1521:42:1521:42 | Load | ~m1517_4 | -| ir.cpp:1521:42:1521:42 | Unary | r1521_4 | -| ir.cpp:1522:15:1522:15 | Address | &:r1522_1 | -| ir.cpp:1522:19:1522:40 | Unary | r1522_2 | -| ir.cpp:1522:19:1522:42 | StoreValue | r1522_4 | -| ir.cpp:1522:42:1522:42 | Unary | r1522_3 | -| ir.cpp:1523:9:1523:9 | Address | &:r1523_2 | -| ir.cpp:1523:9:1523:9 | Address | &:r1523_4 | -| ir.cpp:1523:9:1523:9 | Load | m1519_5 | -| ir.cpp:1523:9:1523:9 | Unary | r1523_3 | -| ir.cpp:1523:9:1523:15 | ChiPartial | partial:m1523_5 | -| ir.cpp:1523:9:1523:15 | ChiTotal | total:m1517_4 | -| ir.cpp:1523:13:1523:15 | StoreValue | r1523_1 | -| ir.cpp:1524:17:1524:18 | Address | &:r1524_1 | -| ir.cpp:1524:22:1524:22 | Address | &:r1524_2 | -| ir.cpp:1524:22:1524:22 | Load | m1519_5 | -| ir.cpp:1524:22:1524:22 | StoreValue | r1524_5 | -| ir.cpp:1524:22:1524:22 | Unary | r1524_3 | -| ir.cpp:1524:22:1524:22 | Unary | r1524_4 | -| ir.cpp:1525:13:1525:13 | Address | &:r1525_1 | -| ir.cpp:1525:17:1525:17 | Address | &:r1525_2 | -| ir.cpp:1525:17:1525:17 | Address | &:r1525_3 | -| ir.cpp:1525:17:1525:17 | Load | m1518_5 | -| ir.cpp:1525:17:1525:17 | Load | ~m1517_4 | -| ir.cpp:1525:17:1525:17 | StoreValue | r1525_4 | -| ir.cpp:1526:9:1526:9 | Address | &:r1526_2 | -| ir.cpp:1526:9:1526:9 | Address | &:r1526_4 | -| ir.cpp:1526:9:1526:9 | Load | m1521_7 | -| ir.cpp:1526:9:1526:9 | Unary | r1526_3 | -| ir.cpp:1526:9:1526:13 | ChiPartial | partial:m1526_5 | -| ir.cpp:1526:9:1526:13 | ChiTotal | total:m1510_7 | -| ir.cpp:1526:13:1526:13 | StoreValue | r1526_1 | -| ir.cpp:1527:9:1527:10 | Address | &:r1527_5 | -| ir.cpp:1527:9:1527:14 | ChiPartial | partial:m1527_6 | -| ir.cpp:1527:9:1527:14 | ChiTotal | total:m1526_6 | -| ir.cpp:1527:10:1527:10 | Address | &:r1527_2 | -| ir.cpp:1527:10:1527:10 | Address | &:r1527_3 | -| ir.cpp:1527:10:1527:10 | Load | m1522_5 | -| ir.cpp:1527:10:1527:10 | Load | ~m1517_4 | -| ir.cpp:1527:10:1527:10 | Unary | r1527_4 | -| ir.cpp:1527:14:1527:14 | StoreValue | r1527_1 | -| ir.cpp:1528:14:1528:15 | Address | &:r1528_1 | -| ir.cpp:1528:19:1528:19 | Address | &:r1528_2 | -| ir.cpp:1528:19:1528:19 | Load | m1521_7 | -| ir.cpp:1528:19:1528:19 | StoreValue | r1528_5 | -| ir.cpp:1528:19:1528:19 | Unary | r1528_3 | -| ir.cpp:1528:19:1528:19 | Unary | r1528_4 | -| ir.cpp:1529:14:1529:15 | Address | &:r1529_1 | -| ir.cpp:1529:19:1529:20 | StoreValue | r1529_5 | -| ir.cpp:1529:20:1529:20 | Address | &:r1529_2 | -| ir.cpp:1529:20:1529:20 | Load | m1521_7 | -| ir.cpp:1529:20:1529:20 | Unary | r1529_3 | -| ir.cpp:1529:20:1529:20 | Unary | r1529_4 | -| ir.cpp:1530:13:1530:13 | Address | &:r1530_1 | -| ir.cpp:1530:17:1530:17 | Address | &:r1530_2 | -| ir.cpp:1530:17:1530:17 | Address | &:r1530_3 | -| ir.cpp:1530:17:1530:17 | Load | m1521_7 | -| ir.cpp:1530:17:1530:17 | Load | ~m1527_7 | -| ir.cpp:1530:17:1530:17 | StoreValue | r1530_4 | -| ir.cpp:1541:8:1541:8 | Address | &:r1541_5 | -| ir.cpp:1541:8:1541:8 | Address | &:r1541_5 | -| ir.cpp:1541:8:1541:8 | Address | &:r1541_5 | -| ir.cpp:1541:8:1541:8 | Address | &:r1541_5 | -| ir.cpp:1541:8:1541:8 | Address | &:r1541_7 | -| ir.cpp:1541:8:1541:8 | Address | &:r1541_7 | -| ir.cpp:1541:8:1541:8 | Address | &:r1541_7 | -| ir.cpp:1541:8:1541:8 | Address | &:r1541_7 | -| ir.cpp:1541:8:1541:8 | Address | &:r1541_9 | -| ir.cpp:1541:8:1541:8 | Address | &:r1541_10 | -| ir.cpp:1541:8:1541:8 | Address | &:r1541_13 | -| ir.cpp:1541:8:1541:8 | Address | &:r1541_17 | -| ir.cpp:1541:8:1541:8 | Address | &:r1541_18 | -| ir.cpp:1541:8:1541:8 | Address | &:r1541_21 | -| ir.cpp:1541:8:1541:8 | Address | &:r1541_25 | -| ir.cpp:1541:8:1541:8 | Address | &:r1541_26 | -| ir.cpp:1541:8:1541:8 | Address | &:r1541_29 | -| ir.cpp:1541:8:1541:8 | ChiPartial | partial:m1541_3 | -| ir.cpp:1541:8:1541:8 | ChiPartial | partial:m1541_3 | -| ir.cpp:1541:8:1541:8 | ChiPartial | partial:m1541_15 | -| ir.cpp:1541:8:1541:8 | ChiPartial | partial:m1541_23 | -| ir.cpp:1541:8:1541:8 | ChiPartial | partial:m1541_31 | -| ir.cpp:1541:8:1541:8 | ChiTotal | total:m1541_2 | -| ir.cpp:1541:8:1541:8 | ChiTotal | total:m1541_2 | -| ir.cpp:1541:8:1541:8 | ChiTotal | total:m1541_8 | -| ir.cpp:1541:8:1541:8 | ChiTotal | total:m1541_16 | -| ir.cpp:1541:8:1541:8 | ChiTotal | total:m1541_24 | -| ir.cpp:1541:8:1541:8 | Load | m0_2 | -| ir.cpp:1541:8:1541:8 | Load | m0_2 | -| ir.cpp:1541:8:1541:8 | Load | m0_2 | -| ir.cpp:1541:8:1541:8 | Load | m1541_6 | -| ir.cpp:1541:8:1541:8 | Load | m1541_6 | -| ir.cpp:1541:8:1541:8 | Load | ~m0_4 | -| ir.cpp:1541:8:1541:8 | Load | ~m0_4 | -| ir.cpp:1541:8:1541:8 | Load | ~m0_4 | -| ir.cpp:1541:8:1541:8 | SideEffect | m1541_3 | -| ir.cpp:1541:8:1541:8 | SideEffect | m1541_3 | -| ir.cpp:1541:8:1541:8 | SideEffect | m1541_8 | -| ir.cpp:1541:8:1541:8 | SideEffect | m1541_32 | -| ir.cpp:1541:8:1541:8 | StoreValue | r1541_14 | -| ir.cpp:1541:8:1541:8 | StoreValue | r1541_22 | -| ir.cpp:1541:8:1541:8 | StoreValue | r1541_30 | -| ir.cpp:1541:8:1541:8 | Unary | m1541_6 | -| ir.cpp:1541:8:1541:8 | Unary | m1541_6 | -| ir.cpp:1541:8:1541:8 | Unary | m1541_6 | -| ir.cpp:1541:8:1541:8 | Unary | r1541_11 | -| ir.cpp:1541:8:1541:8 | Unary | r1541_12 | -| ir.cpp:1541:8:1541:8 | Unary | r1541_19 | -| ir.cpp:1541:8:1541:8 | Unary | r1541_20 | -| ir.cpp:1541:8:1541:8 | Unary | r1541_27 | -| ir.cpp:1541:8:1541:8 | Unary | r1541_28 | -| ir.cpp:1569:60:1569:95 | Address | &:r1569_5 | -| ir.cpp:1569:60:1569:95 | Address | &:r1569_5 | -| ir.cpp:1569:60:1569:95 | Address | &:r1569_7 | -| ir.cpp:1569:60:1569:95 | Address | &:r1569_7 | -| ir.cpp:1569:60:1569:95 | Address | &:r1569_10 | -| ir.cpp:1569:60:1569:95 | ChiPartial | partial:m1569_3 | -| ir.cpp:1569:60:1569:95 | ChiTotal | total:m1569_2 | -| ir.cpp:1569:60:1569:95 | Load | m0_2 | -| ir.cpp:1569:60:1569:95 | Load | m1569_6 | -| ir.cpp:1569:60:1569:95 | SideEffect | m1569_3 | -| ir.cpp:1569:60:1569:95 | SideEffect | m1569_8 | -| ir.cpp:1570:5:1570:13 | Address | &:r1570_1 | -| ir.cpp:1570:12:1570:12 | Address | &:r1570_2 | -| ir.cpp:1570:12:1570:12 | Load | m1569_6 | -| ir.cpp:1570:12:1570:12 | Unary | r1570_3 | -| ir.cpp:1570:12:1570:12 | Unary | r1570_4 | -| ir.cpp:1573:60:1573:95 | Address | &:r1573_5 | -| ir.cpp:1573:60:1573:95 | Address | &:r1573_5 | -| ir.cpp:1573:60:1573:95 | Address | &:r1573_7 | -| ir.cpp:1573:60:1573:95 | Address | &:r1573_7 | -| ir.cpp:1573:60:1573:95 | Address | &:r1573_10 | -| ir.cpp:1573:60:1573:95 | ChiPartial | partial:m1573_3 | -| ir.cpp:1573:60:1573:95 | ChiTotal | total:m1573_2 | -| ir.cpp:1573:60:1573:95 | Load | m0_2 | -| ir.cpp:1573:60:1573:95 | Load | m1573_6 | -| ir.cpp:1573:60:1573:95 | SideEffect | m1573_3 | -| ir.cpp:1573:60:1573:95 | SideEffect | m1573_8 | -| ir.cpp:1574:5:1574:13 | Address | &:r1574_1 | -| ir.cpp:1574:12:1574:12 | Address | &:r1574_2 | -| ir.cpp:1574:12:1574:12 | Load | m1573_6 | -| ir.cpp:1574:12:1574:12 | Unary | r1574_3 | -| ir.cpp:1574:12:1574:12 | Unary | r1574_4 | -| ir.cpp:1577:60:1577:95 | Address | &:r1577_5 | -| ir.cpp:1577:60:1577:95 | Address | &:r1577_5 | -| ir.cpp:1577:60:1577:95 | Address | &:r1577_7 | -| ir.cpp:1577:60:1577:95 | Address | &:r1577_7 | -| ir.cpp:1577:60:1577:95 | Address | &:r1577_10 | -| ir.cpp:1577:60:1577:95 | ChiPartial | partial:m1577_3 | -| ir.cpp:1577:60:1577:95 | ChiTotal | total:m1577_2 | -| ir.cpp:1577:60:1577:95 | Load | m1577_6 | -| ir.cpp:1577:60:1577:95 | Load | m1578_8 | -| ir.cpp:1577:60:1577:95 | SideEffect | m1577_3 | -| ir.cpp:1577:60:1577:95 | SideEffect | m1577_8 | -| ir.cpp:1578:5:1578:13 | Address | &:r1578_1 | -| ir.cpp:1578:12:1578:12 | Address | &:r1578_2 | -| ir.cpp:1578:12:1578:12 | Address | &:r1578_4 | -| ir.cpp:1578:12:1578:12 | Load | m1577_6 | -| ir.cpp:1578:12:1578:12 | Load | ~m1577_8 | -| ir.cpp:1578:12:1578:12 | StoreValue | r1578_7 | -| ir.cpp:1578:12:1578:12 | Unary | r1578_3 | -| ir.cpp:1578:12:1578:12 | Unary | r1578_5 | -| ir.cpp:1578:12:1578:12 | Unary | r1578_6 | -| ir.cpp:1581:6:1581:37 | ChiPartial | partial:m1581_3 | -| ir.cpp:1581:6:1581:37 | ChiTotal | total:m1581_2 | -| ir.cpp:1581:6:1581:37 | SideEffect | ~m1602_6 | -| ir.cpp:1582:34:1582:34 | Address | &:r1582_1 | -| ir.cpp:1582:34:1582:34 | Address | &:r1582_1 | -| ir.cpp:1582:34:1582:34 | Arg(this) | this:r1582_1 | -| ir.cpp:1582:34:1582:34 | CallTarget | func:r1582_3 | -| ir.cpp:1582:34:1582:34 | ChiPartial | partial:m1582_5 | -| ir.cpp:1582:34:1582:34 | ChiPartial | partial:m1582_7 | -| ir.cpp:1582:34:1582:34 | ChiTotal | total:m1581_4 | -| ir.cpp:1582:34:1582:34 | ChiTotal | total:m1582_2 | -| ir.cpp:1582:34:1582:34 | SideEffect | ~m1581_4 | -| ir.cpp:1585:14:1585:14 | Address | &:r1585_1 | -| ir.cpp:1585:14:1585:14 | Address | &:r1585_6 | -| ir.cpp:1585:14:1585:14 | Address | &:r1585_6 | -| ir.cpp:1585:14:1585:14 | Address | &:r1585_18 | -| ir.cpp:1585:14:1585:14 | Address | &:r1585_18 | -| ir.cpp:1585:14:1585:14 | Address | &:r1585_30 | -| ir.cpp:1585:14:1585:14 | Address | &:r1585_30 | -| ir.cpp:1585:14:1585:14 | Arg(this) | this:r1585_6 | -| ir.cpp:1585:14:1585:14 | Arg(this) | this:r1585_18 | -| ir.cpp:1585:14:1585:14 | Arg(this) | this:r1585_30 | -| ir.cpp:1585:14:1585:14 | CallTarget | func:r1585_7 | -| ir.cpp:1585:14:1585:14 | CallTarget | func:r1585_19 | -| ir.cpp:1585:14:1585:14 | CallTarget | func:r1585_31 | -| ir.cpp:1585:14:1585:14 | ChiPartial | partial:m1585_9 | -| ir.cpp:1585:14:1585:14 | ChiPartial | partial:m1585_12 | -| ir.cpp:1585:14:1585:14 | ChiPartial | partial:m1585_21 | -| ir.cpp:1585:14:1585:14 | ChiPartial | partial:m1585_24 | -| ir.cpp:1585:14:1585:14 | ChiPartial | partial:m1585_33 | -| ir.cpp:1585:14:1585:14 | ChiPartial | partial:m1585_36 | -| ir.cpp:1585:14:1585:14 | ChiTotal | total:m1582_6 | -| ir.cpp:1585:14:1585:14 | ChiTotal | total:m1585_4 | -| ir.cpp:1585:14:1585:14 | ChiTotal | total:m1585_10 | -| ir.cpp:1585:14:1585:14 | ChiTotal | total:m1585_13 | -| ir.cpp:1585:14:1585:14 | ChiTotal | total:m1585_22 | -| ir.cpp:1585:14:1585:14 | ChiTotal | total:m1585_25 | -| ir.cpp:1585:14:1585:14 | SideEffect | m1585_4 | -| ir.cpp:1585:14:1585:14 | SideEffect | m1585_13 | -| ir.cpp:1585:14:1585:14 | SideEffect | m1585_25 | -| ir.cpp:1585:14:1585:14 | SideEffect | ~m1582_6 | -| ir.cpp:1585:14:1585:14 | SideEffect | ~m1585_10 | -| ir.cpp:1585:14:1585:14 | SideEffect | ~m1585_22 | -| ir.cpp:1585:14:1585:14 | Unary | r1585_8 | -| ir.cpp:1585:14:1585:14 | Unary | r1585_20 | -| ir.cpp:1585:14:1585:14 | Unary | r1585_32 | -| ir.cpp:1585:14:1585:27 | StoreValue | r1585_15 | -| ir.cpp:1585:14:1585:27 | StoreValue | r1585_27 | -| ir.cpp:1585:14:1585:27 | StoreValue | r1585_39 | -| ir.cpp:1585:14:1585:27 | Unary | r1585_14 | -| ir.cpp:1585:14:1585:27 | Unary | r1585_26 | -| ir.cpp:1585:14:1585:27 | Unary | r1585_38 | -| ir.cpp:1585:15:1585:15 | Address | &:r1585_5 | -| ir.cpp:1585:18:1585:18 | Address | &:r1585_17 | -| ir.cpp:1585:21:1585:21 | Address | &:r1585_29 | -| ir.cpp:1585:26:1585:26 | Address | &:r1585_2 | -| ir.cpp:1585:26:1585:26 | Load | m1582_8 | -| ir.cpp:1585:26:1585:26 | StoreValue | r1585_3 | -| ir.cpp:1586:9:1586:9 | Address | &:r1586_2 | -| ir.cpp:1586:9:1586:9 | Address | &:r1586_4 | -| ir.cpp:1586:9:1586:9 | Load | m1585_28 | -| ir.cpp:1586:9:1586:9 | Unary | r1586_3 | -| ir.cpp:1586:9:1586:15 | ChiPartial | partial:m1586_5 | -| ir.cpp:1586:9:1586:15 | ChiTotal | total:m1585_37 | -| ir.cpp:1586:13:1586:15 | StoreValue | r1586_1 | -| ir.cpp:1587:17:1587:18 | Address | &:r1587_1 | -| ir.cpp:1587:22:1587:22 | Address | &:r1587_2 | -| ir.cpp:1587:22:1587:22 | Load | m1585_28 | -| ir.cpp:1587:22:1587:22 | StoreValue | r1587_5 | -| ir.cpp:1587:22:1587:22 | Unary | r1587_3 | -| ir.cpp:1587:22:1587:22 | Unary | r1587_4 | -| ir.cpp:1588:13:1588:13 | Address | &:r1588_1 | -| ir.cpp:1588:17:1588:17 | Address | &:r1588_2 | -| ir.cpp:1588:17:1588:17 | Address | &:r1588_3 | -| ir.cpp:1588:17:1588:17 | Load | m1585_16 | -| ir.cpp:1588:17:1588:17 | Load | ~m1585_37 | -| ir.cpp:1588:17:1588:17 | StoreValue | r1588_4 | -| ir.cpp:1589:9:1589:9 | Address | &:r1589_2 | -| ir.cpp:1589:9:1589:9 | Address | &:r1589_4 | -| ir.cpp:1589:9:1589:9 | Load | m1585_40 | -| ir.cpp:1589:9:1589:9 | Unary | r1589_3 | -| ir.cpp:1589:9:1589:13 | ChiPartial | partial:m1589_5 | -| ir.cpp:1589:9:1589:13 | ChiTotal | total:m1585_34 | -| ir.cpp:1589:13:1589:13 | StoreValue | r1589_1 | -| ir.cpp:1590:14:1590:15 | Address | &:r1590_1 | -| ir.cpp:1590:19:1590:19 | Address | &:r1590_2 | -| ir.cpp:1590:19:1590:19 | Load | m1585_40 | -| ir.cpp:1590:19:1590:19 | StoreValue | r1590_5 | -| ir.cpp:1590:19:1590:19 | Unary | r1590_3 | -| ir.cpp:1590:19:1590:19 | Unary | r1590_4 | -| ir.cpp:1591:13:1591:13 | Address | &:r1591_1 | -| ir.cpp:1591:17:1591:17 | Address | &:r1591_2 | -| ir.cpp:1591:17:1591:17 | Address | &:r1591_3 | -| ir.cpp:1591:17:1591:17 | Load | m1585_40 | -| ir.cpp:1591:17:1591:17 | Load | ~m1589_6 | -| ir.cpp:1591:17:1591:17 | StoreValue | r1591_4 | -| ir.cpp:1595:14:1595:35 | Address | &:r1595_1 | -| ir.cpp:1595:39:1595:39 | Address | &:r1595_2 | -| ir.cpp:1595:39:1595:39 | Load | m1582_8 | -| ir.cpp:1595:39:1595:39 | StoreValue | r1595_3 | -| ir.cpp:1596:15:1596:15 | Address | &:r1596_1 | -| ir.cpp:1596:19:1596:40 | Address | &:r1596_2 | -| ir.cpp:1596:19:1596:40 | Address | &:r1596_2 | -| ir.cpp:1596:19:1596:40 | Arg(this) | this:r1596_2 | -| ir.cpp:1596:19:1596:40 | ChiPartial | partial:m1596_8 | -| ir.cpp:1596:19:1596:40 | ChiTotal | total:m1595_4 | -| ir.cpp:1596:19:1596:40 | SideEffect | m1595_4 | -| ir.cpp:1596:42:1596:47 | CallTarget | func:r1596_3 | -| ir.cpp:1596:42:1596:47 | ChiPartial | partial:m1596_5 | -| ir.cpp:1596:42:1596:47 | ChiTotal | total:m1589_6 | -| ir.cpp:1596:42:1596:47 | SideEffect | ~m1589_6 | -| ir.cpp:1596:42:1596:47 | Unary | r1596_4 | -| ir.cpp:1596:48:1596:50 | StoreValue | r1596_11 | -| ir.cpp:1596:48:1596:50 | Unary | r1596_10 | -| ir.cpp:1597:15:1597:15 | Address | &:r1597_1 | -| ir.cpp:1597:19:1597:40 | Address | &:r1597_2 | -| ir.cpp:1597:19:1597:40 | Address | &:r1597_2 | -| ir.cpp:1597:19:1597:40 | Arg(this) | this:r1597_2 | -| ir.cpp:1597:19:1597:40 | ChiPartial | partial:m1597_8 | -| ir.cpp:1597:19:1597:40 | ChiTotal | total:m1596_9 | -| ir.cpp:1597:19:1597:40 | SideEffect | m1596_9 | -| ir.cpp:1597:42:1597:47 | CallTarget | func:r1597_3 | -| ir.cpp:1597:42:1597:47 | ChiPartial | partial:m1597_5 | -| ir.cpp:1597:42:1597:47 | ChiTotal | total:m1596_6 | -| ir.cpp:1597:42:1597:47 | SideEffect | ~m1596_6 | -| ir.cpp:1597:42:1597:47 | Unary | r1597_4 | -| ir.cpp:1597:48:1597:50 | StoreValue | r1597_11 | -| ir.cpp:1597:48:1597:50 | Unary | r1597_10 | -| ir.cpp:1598:15:1598:15 | Address | &:r1598_1 | -| ir.cpp:1598:19:1598:40 | Address | &:r1598_2 | -| ir.cpp:1598:19:1598:40 | Address | &:r1598_2 | -| ir.cpp:1598:19:1598:40 | Arg(this) | this:r1598_2 | -| ir.cpp:1598:19:1598:40 | ChiPartial | partial:m1598_8 | -| ir.cpp:1598:19:1598:40 | ChiTotal | total:m1597_9 | -| ir.cpp:1598:19:1598:40 | SideEffect | m1597_9 | -| ir.cpp:1598:42:1598:47 | CallTarget | func:r1598_3 | -| ir.cpp:1598:42:1598:47 | ChiPartial | partial:m1598_5 | -| ir.cpp:1598:42:1598:47 | ChiTotal | total:m1597_6 | -| ir.cpp:1598:42:1598:47 | SideEffect | ~m1597_6 | -| ir.cpp:1598:42:1598:47 | Unary | r1598_4 | -| ir.cpp:1598:48:1598:50 | StoreValue | r1598_11 | -| ir.cpp:1598:48:1598:50 | Unary | r1598_10 | -| ir.cpp:1599:9:1599:9 | Address | &:r1599_2 | -| ir.cpp:1599:9:1599:9 | Address | &:r1599_4 | -| ir.cpp:1599:9:1599:9 | Load | m1597_12 | -| ir.cpp:1599:9:1599:9 | Unary | r1599_3 | -| ir.cpp:1599:9:1599:15 | ChiPartial | partial:m1599_5 | -| ir.cpp:1599:9:1599:15 | ChiTotal | total:m1598_9 | -| ir.cpp:1599:13:1599:15 | StoreValue | r1599_1 | -| ir.cpp:1600:17:1600:18 | Address | &:r1600_1 | -| ir.cpp:1600:22:1600:22 | Address | &:r1600_2 | -| ir.cpp:1600:22:1600:22 | Load | m1597_12 | -| ir.cpp:1600:22:1600:22 | StoreValue | r1600_5 | -| ir.cpp:1600:22:1600:22 | Unary | r1600_3 | -| ir.cpp:1600:22:1600:22 | Unary | r1600_4 | -| ir.cpp:1601:13:1601:13 | Address | &:r1601_1 | -| ir.cpp:1601:17:1601:17 | Address | &:r1601_2 | -| ir.cpp:1601:17:1601:17 | Address | &:r1601_3 | -| ir.cpp:1601:17:1601:17 | Load | m1596_12 | -| ir.cpp:1601:17:1601:17 | Load | ~m1598_9 | -| ir.cpp:1601:17:1601:17 | StoreValue | r1601_4 | -| ir.cpp:1602:9:1602:9 | Address | &:r1602_2 | -| ir.cpp:1602:9:1602:9 | Address | &:r1602_4 | -| ir.cpp:1602:9:1602:9 | Load | m1598_12 | -| ir.cpp:1602:9:1602:9 | Unary | r1602_3 | -| ir.cpp:1602:9:1602:13 | ChiPartial | partial:m1602_5 | -| ir.cpp:1602:9:1602:13 | ChiTotal | total:m1598_6 | -| ir.cpp:1602:13:1602:13 | StoreValue | r1602_1 | -| ir.cpp:1603:14:1603:15 | Address | &:r1603_1 | -| ir.cpp:1603:19:1603:19 | Address | &:r1603_2 | -| ir.cpp:1603:19:1603:19 | Load | m1598_12 | -| ir.cpp:1603:19:1603:19 | StoreValue | r1603_5 | -| ir.cpp:1603:19:1603:19 | Unary | r1603_3 | -| ir.cpp:1603:19:1603:19 | Unary | r1603_4 | -| ir.cpp:1604:13:1604:13 | Address | &:r1604_1 | -| ir.cpp:1604:17:1604:17 | Address | &:r1604_2 | -| ir.cpp:1604:17:1604:17 | Address | &:r1604_3 | -| ir.cpp:1604:17:1604:17 | Load | m1598_12 | -| ir.cpp:1604:17:1604:17 | Load | ~m1602_6 | -| ir.cpp:1604:17:1604:17 | StoreValue | r1604_4 | -| ir.cpp:1608:8:1608:8 | Address | &:r1608_5 | -| ir.cpp:1608:8:1608:8 | Address | &:r1608_5 | -| ir.cpp:1608:8:1608:8 | Address | &:r1608_7 | -| ir.cpp:1608:8:1608:8 | Address | &:r1608_7 | -| ir.cpp:1608:8:1608:8 | ChiPartial | partial:m1608_3 | -| ir.cpp:1608:8:1608:8 | ChiTotal | total:m1608_2 | -| ir.cpp:1608:8:1608:8 | Load | m1608_6 | -| ir.cpp:1608:8:1608:8 | SideEffect | m1608_3 | -| ir.cpp:1608:8:1608:8 | SideEffect | m1608_8 | -| ir.cpp:1635:61:1635:98 | Address | &:r1635_5 | -| ir.cpp:1635:61:1635:98 | Address | &:r1635_5 | -| ir.cpp:1635:61:1635:98 | Address | &:r1635_7 | -| ir.cpp:1635:61:1635:98 | Address | &:r1635_7 | -| ir.cpp:1635:61:1635:98 | Address | &:r1635_10 | -| ir.cpp:1635:61:1635:98 | ChiPartial | partial:m1635_3 | -| ir.cpp:1635:61:1635:98 | ChiTotal | total:m1635_2 | -| ir.cpp:1635:61:1635:98 | Load | m1635_6 | -| ir.cpp:1635:61:1635:98 | Load | m1636_6 | -| ir.cpp:1635:61:1635:98 | SideEffect | m1635_3 | -| ir.cpp:1635:61:1635:98 | SideEffect | m1635_8 | -| ir.cpp:1636:5:1636:13 | Address | &:r1636_1 | -| ir.cpp:1636:12:1636:12 | Address | &:r1636_2 | -| ir.cpp:1636:12:1636:12 | Address | &:r1636_4 | -| ir.cpp:1636:12:1636:12 | Load | m1635_6 | -| ir.cpp:1636:12:1636:12 | Load | ~m1635_8 | -| ir.cpp:1636:12:1636:12 | StoreValue | r1636_5 | -| ir.cpp:1636:12:1636:12 | Unary | r1636_3 | -| ir.cpp:1639:61:1639:98 | Address | &:r1639_5 | -| ir.cpp:1639:61:1639:98 | Address | &:r1639_5 | -| ir.cpp:1639:61:1639:98 | Address | &:r1639_7 | -| ir.cpp:1639:61:1639:98 | Address | &:r1639_7 | -| ir.cpp:1639:61:1639:98 | Address | &:r1639_10 | -| ir.cpp:1639:61:1639:98 | ChiPartial | partial:m1639_3 | -| ir.cpp:1639:61:1639:98 | ChiTotal | total:m1639_2 | -| ir.cpp:1639:61:1639:98 | Load | m1639_6 | -| ir.cpp:1639:61:1639:98 | Load | m1640_8 | -| ir.cpp:1639:61:1639:98 | SideEffect | m1639_3 | -| ir.cpp:1639:61:1639:98 | SideEffect | m1639_8 | -| ir.cpp:1640:5:1640:13 | Address | &:r1640_1 | -| ir.cpp:1640:12:1640:12 | Address | &:r1640_2 | -| ir.cpp:1640:12:1640:12 | Address | &:r1640_4 | -| ir.cpp:1640:12:1640:12 | Load | m1639_6 | -| ir.cpp:1640:12:1640:12 | Load | ~m1639_8 | -| ir.cpp:1640:12:1640:12 | StoreValue | r1640_7 | -| ir.cpp:1640:12:1640:12 | Unary | r1640_3 | -| ir.cpp:1640:12:1640:12 | Unary | r1640_5 | -| ir.cpp:1640:12:1640:12 | Unary | r1640_6 | -| ir.cpp:1643:61:1643:98 | Address | &:r1643_5 | -| ir.cpp:1643:61:1643:98 | Address | &:r1643_5 | -| ir.cpp:1643:61:1643:98 | Address | &:r1643_7 | -| ir.cpp:1643:61:1643:98 | Address | &:r1643_7 | -| ir.cpp:1643:61:1643:98 | Address | &:r1643_10 | -| ir.cpp:1643:61:1643:98 | ChiPartial | partial:m1643_3 | -| ir.cpp:1643:61:1643:98 | ChiTotal | total:m1643_2 | -| ir.cpp:1643:61:1643:98 | Load | m1643_6 | -| ir.cpp:1643:61:1643:98 | Load | m1644_6 | -| ir.cpp:1643:61:1643:98 | SideEffect | m1643_3 | -| ir.cpp:1643:61:1643:98 | SideEffect | m1643_8 | -| ir.cpp:1644:5:1644:13 | Address | &:r1644_1 | -| ir.cpp:1644:12:1644:12 | Address | &:r1644_2 | -| ir.cpp:1644:12:1644:12 | StoreValue | r1644_3 | -| ir.cpp:1644:12:1644:12 | StoreValue | r1644_5 | -| ir.cpp:1644:12:1644:12 | Unary | r1644_2 | -| ir.cpp:1647:6:1647:40 | ChiPartial | partial:m1647_3 | -| ir.cpp:1647:6:1647:40 | ChiTotal | total:m1647_2 | -| ir.cpp:1647:6:1647:40 | SideEffect | ~m1668_6 | -| ir.cpp:1648:36:1648:36 | Address | &:r1648_1 | -| ir.cpp:1648:36:1648:36 | Address | &:r1648_1 | -| ir.cpp:1648:36:1648:36 | Arg(this) | this:r1648_1 | -| ir.cpp:1648:36:1648:36 | CallTarget | func:r1648_3 | -| ir.cpp:1648:36:1648:36 | ChiPartial | partial:m1648_5 | -| ir.cpp:1648:36:1648:36 | ChiPartial | partial:m1648_7 | -| ir.cpp:1648:36:1648:36 | ChiTotal | total:m1647_4 | -| ir.cpp:1648:36:1648:36 | ChiTotal | total:m1648_2 | -| ir.cpp:1648:36:1648:36 | SideEffect | ~m1647_4 | -| ir.cpp:1651:16:1651:16 | Address | &:r1651_1 | -| ir.cpp:1651:16:1651:16 | Address | &:r1651_7 | -| ir.cpp:1651:16:1651:16 | Address | &:r1651_21 | -| ir.cpp:1651:16:1651:16 | Address | &:r1651_35 | -| ir.cpp:1651:16:1651:16 | CallTarget | func:r1651_10 | -| ir.cpp:1651:16:1651:16 | CallTarget | func:r1651_24 | -| ir.cpp:1651:16:1651:16 | CallTarget | func:r1651_38 | -| ir.cpp:1651:16:1651:16 | ChiPartial | partial:m1651_12 | -| ir.cpp:1651:16:1651:16 | ChiPartial | partial:m1651_26 | -| ir.cpp:1651:16:1651:16 | ChiPartial | partial:m1651_40 | -| ir.cpp:1651:16:1651:16 | ChiTotal | total:m1648_6 | -| ir.cpp:1651:16:1651:16 | ChiTotal | total:m1651_13 | -| ir.cpp:1651:16:1651:16 | ChiTotal | total:m1651_27 | -| ir.cpp:1651:16:1651:16 | Load | m1651_4 | -| ir.cpp:1651:16:1651:16 | Load | m1651_4 | -| ir.cpp:1651:16:1651:16 | Load | m1651_4 | -| ir.cpp:1651:16:1651:16 | SideEffect | ~m1648_6 | -| ir.cpp:1651:16:1651:16 | SideEffect | ~m1651_13 | -| ir.cpp:1651:16:1651:16 | SideEffect | ~m1651_27 | -| ir.cpp:1651:16:1651:16 | StoreValue | r1651_11 | -| ir.cpp:1651:16:1651:16 | Unary | r1651_8 | -| ir.cpp:1651:16:1651:16 | Unary | r1651_22 | -| ir.cpp:1651:16:1651:16 | Unary | r1651_25 | -| ir.cpp:1651:16:1651:16 | Unary | r1651_36 | -| ir.cpp:1651:16:1651:16 | Unary | r1651_39 | -| ir.cpp:1651:16:1651:30 | Address | &:r1651_6 | -| ir.cpp:1651:16:1651:30 | StoreValue | r1651_18 | -| ir.cpp:1651:16:1651:30 | StoreValue | r1651_32 | -| ir.cpp:1651:16:1651:30 | StoreValue | r1651_46 | -| ir.cpp:1651:16:1651:30 | Unary | r1651_6 | -| ir.cpp:1651:16:1651:30 | Unary | r1651_31 | -| ir.cpp:1651:16:1651:30 | Unary | r1651_45 | -| ir.cpp:1651:17:1651:17 | Address | &:r1651_5 | -| ir.cpp:1651:20:1651:20 | Address | &:r1651_20 | -| ir.cpp:1651:23:1651:23 | Address | &:r1651_34 | -| ir.cpp:1651:29:1651:29 | StoreValue | r1651_3 | -| ir.cpp:1651:29:1651:29 | Unary | r1651_2 | -| ir.cpp:1651:30:1651:30 | Address | &:r1651_9 | -| ir.cpp:1651:30:1651:30 | Address | &:r1651_9 | -| ir.cpp:1651:30:1651:30 | Address | &:r1651_23 | -| ir.cpp:1651:30:1651:30 | Address | &:r1651_23 | -| ir.cpp:1651:30:1651:30 | Address | &:r1651_37 | -| ir.cpp:1651:30:1651:30 | Address | &:r1651_37 | -| ir.cpp:1651:30:1651:30 | Arg(this) | this:r1651_9 | -| ir.cpp:1651:30:1651:30 | Arg(this) | this:r1651_23 | -| ir.cpp:1651:30:1651:30 | Arg(this) | this:r1651_37 | -| ir.cpp:1651:30:1651:30 | ChiPartial | partial:m1651_15 | -| ir.cpp:1651:30:1651:30 | ChiPartial | partial:m1651_29 | -| ir.cpp:1651:30:1651:30 | ChiPartial | partial:m1651_43 | -| ir.cpp:1651:30:1651:30 | ChiTotal | total:m1648_8 | -| ir.cpp:1651:30:1651:30 | ChiTotal | total:m1651_16 | -| ir.cpp:1651:30:1651:30 | ChiTotal | total:m1651_30 | -| ir.cpp:1651:30:1651:30 | SideEffect | m1648_8 | -| ir.cpp:1651:30:1651:30 | SideEffect | m1651_16 | -| ir.cpp:1651:30:1651:30 | SideEffect | m1651_30 | -| ir.cpp:1652:9:1652:9 | Address | &:r1652_2 | -| ir.cpp:1652:9:1652:9 | Address | &:r1652_4 | -| ir.cpp:1652:9:1652:9 | Load | m1651_19 | -| ir.cpp:1652:9:1652:9 | Unary | r1652_3 | -| ir.cpp:1652:13:1652:13 | StoreValue | r1652_1 | -| ir.cpp:1653:14:1653:15 | Address | &:r1653_1 | -| ir.cpp:1653:19:1653:19 | Address | &:r1653_2 | -| ir.cpp:1653:19:1653:19 | Load | m1651_19 | -| ir.cpp:1653:19:1653:19 | StoreValue | r1653_5 | -| ir.cpp:1653:19:1653:19 | Unary | r1653_3 | -| ir.cpp:1653:19:1653:19 | Unary | r1653_4 | -| ir.cpp:1654:13:1654:13 | Address | &:r1654_1 | -| ir.cpp:1654:17:1654:17 | Address | &:r1654_2 | -| ir.cpp:1654:17:1654:17 | Address | &:r1654_3 | -| ir.cpp:1654:17:1654:17 | Load | m1651_19 | -| ir.cpp:1654:17:1654:17 | Load | m1652_5 | -| ir.cpp:1654:17:1654:17 | StoreValue | r1654_4 | -| ir.cpp:1655:9:1655:9 | Address | &:r1655_2 | -| ir.cpp:1655:9:1655:9 | Address | &:r1655_4 | -| ir.cpp:1655:9:1655:9 | Load | m1651_33 | -| ir.cpp:1655:9:1655:9 | Unary | r1655_3 | -| ir.cpp:1655:9:1655:13 | ChiPartial | partial:m1655_5 | -| ir.cpp:1655:9:1655:13 | ChiTotal | total:m1651_41 | -| ir.cpp:1655:13:1655:13 | StoreValue | r1655_1 | -| ir.cpp:1656:14:1656:15 | Address | &:r1656_1 | -| ir.cpp:1656:19:1656:19 | Address | &:r1656_2 | -| ir.cpp:1656:19:1656:19 | Load | m1651_33 | -| ir.cpp:1656:19:1656:19 | StoreValue | r1656_5 | -| ir.cpp:1656:19:1656:19 | Unary | r1656_3 | -| ir.cpp:1656:19:1656:19 | Unary | r1656_4 | -| ir.cpp:1657:13:1657:13 | Address | &:r1657_1 | -| ir.cpp:1657:17:1657:17 | Address | &:r1657_2 | -| ir.cpp:1657:17:1657:17 | Address | &:r1657_3 | -| ir.cpp:1657:17:1657:17 | Load | m1651_33 | -| ir.cpp:1657:17:1657:17 | Load | ~m1655_6 | -| ir.cpp:1657:17:1657:17 | StoreValue | r1657_4 | -| ir.cpp:1661:16:1661:37 | Address | &:r1661_1 | -| ir.cpp:1661:41:1661:41 | StoreValue | r1661_3 | -| ir.cpp:1661:41:1661:41 | Unary | r1661_2 | -| ir.cpp:1662:16:1662:16 | Address | &:r1662_1 | -| ir.cpp:1662:20:1662:41 | Address | &:r1662_3 | -| ir.cpp:1662:20:1662:41 | Address | &:r1662_5 | -| ir.cpp:1662:20:1662:41 | Address | &:r1662_5 | -| ir.cpp:1662:20:1662:41 | Arg(this) | this:r1662_5 | -| ir.cpp:1662:20:1662:41 | ChiPartial | partial:m1662_11 | -| ir.cpp:1662:20:1662:41 | ChiTotal | total:m1651_44 | -| ir.cpp:1662:20:1662:41 | Load | m1661_4 | -| ir.cpp:1662:20:1662:41 | SideEffect | m1651_44 | -| ir.cpp:1662:20:1662:41 | Unary | r1662_4 | -| ir.cpp:1662:20:1662:50 | Address | &:r1662_2 | -| ir.cpp:1662:20:1662:50 | StoreValue | r1662_14 | -| ir.cpp:1662:20:1662:50 | Unary | r1662_2 | -| ir.cpp:1662:43:1662:48 | CallTarget | func:r1662_6 | -| ir.cpp:1662:43:1662:48 | ChiPartial | partial:m1662_8 | -| ir.cpp:1662:43:1662:48 | ChiTotal | total:m1655_6 | -| ir.cpp:1662:43:1662:48 | SideEffect | ~m1655_6 | -| ir.cpp:1662:43:1662:48 | StoreValue | r1662_7 | -| ir.cpp:1663:15:1663:15 | Address | &:r1663_1 | -| ir.cpp:1663:19:1663:40 | Address | &:r1663_2 | -| ir.cpp:1663:19:1663:40 | Address | &:r1663_4 | -| ir.cpp:1663:19:1663:40 | Address | &:r1663_4 | -| ir.cpp:1663:19:1663:40 | Arg(this) | this:r1663_4 | -| ir.cpp:1663:19:1663:40 | ChiPartial | partial:m1663_10 | -| ir.cpp:1663:19:1663:40 | ChiTotal | total:m1662_12 | -| ir.cpp:1663:19:1663:40 | Load | m1661_4 | -| ir.cpp:1663:19:1663:40 | SideEffect | m1662_12 | -| ir.cpp:1663:19:1663:40 | Unary | r1663_3 | -| ir.cpp:1663:42:1663:47 | CallTarget | func:r1663_5 | -| ir.cpp:1663:42:1663:47 | ChiPartial | partial:m1663_7 | -| ir.cpp:1663:42:1663:47 | ChiTotal | total:m1662_9 | -| ir.cpp:1663:42:1663:47 | SideEffect | ~m1662_9 | -| ir.cpp:1663:42:1663:47 | Unary | r1663_6 | -| ir.cpp:1663:48:1663:50 | StoreValue | r1663_13 | -| ir.cpp:1663:48:1663:50 | Unary | r1663_12 | -| ir.cpp:1664:16:1664:17 | Address | &:r1664_1 | -| ir.cpp:1664:21:1664:42 | Address | &:r1664_2 | -| ir.cpp:1664:21:1664:42 | Address | &:r1664_4 | -| ir.cpp:1664:21:1664:42 | Address | &:r1664_4 | -| ir.cpp:1664:21:1664:42 | Arg(this) | this:r1664_4 | -| ir.cpp:1664:21:1664:42 | ChiPartial | partial:m1664_10 | -| ir.cpp:1664:21:1664:42 | ChiTotal | total:m1663_11 | -| ir.cpp:1664:21:1664:42 | Load | m1661_4 | -| ir.cpp:1664:21:1664:42 | SideEffect | m1663_11 | -| ir.cpp:1664:21:1664:42 | Unary | r1664_3 | -| ir.cpp:1664:44:1664:49 | CallTarget | func:r1664_5 | -| ir.cpp:1664:44:1664:49 | ChiPartial | partial:m1664_7 | -| ir.cpp:1664:44:1664:49 | ChiTotal | total:m1663_8 | -| ir.cpp:1664:44:1664:49 | SideEffect | ~m1663_8 | -| ir.cpp:1664:44:1664:49 | Unary | r1664_6 | -| ir.cpp:1664:50:1664:52 | StoreValue | r1664_13 | -| ir.cpp:1664:50:1664:52 | Unary | r1664_12 | -| ir.cpp:1665:9:1665:9 | Address | &:r1665_2 | -| ir.cpp:1665:9:1665:9 | Address | &:r1665_4 | -| ir.cpp:1665:9:1665:9 | Load | m1662_15 | -| ir.cpp:1665:9:1665:9 | Unary | r1665_3 | -| ir.cpp:1665:13:1665:13 | StoreValue | r1665_1 | -| ir.cpp:1666:14:1666:15 | Address | &:r1666_1 | -| ir.cpp:1666:19:1666:19 | Address | &:r1666_2 | -| ir.cpp:1666:19:1666:19 | Load | m1662_15 | -| ir.cpp:1666:19:1666:19 | StoreValue | r1666_5 | -| ir.cpp:1666:19:1666:19 | Unary | r1666_3 | -| ir.cpp:1666:19:1666:19 | Unary | r1666_4 | -| ir.cpp:1667:13:1667:13 | Address | &:r1667_1 | -| ir.cpp:1667:17:1667:17 | Address | &:r1667_2 | -| ir.cpp:1667:17:1667:17 | Address | &:r1667_3 | -| ir.cpp:1667:17:1667:17 | Load | m1662_15 | -| ir.cpp:1667:17:1667:17 | Load | m1665_5 | -| ir.cpp:1667:17:1667:17 | StoreValue | r1667_4 | -| ir.cpp:1668:9:1668:9 | Address | &:r1668_2 | -| ir.cpp:1668:9:1668:9 | Address | &:r1668_4 | -| ir.cpp:1668:9:1668:9 | Load | m1663_14 | -| ir.cpp:1668:9:1668:9 | Unary | r1668_3 | -| ir.cpp:1668:9:1668:13 | ChiPartial | partial:m1668_5 | -| ir.cpp:1668:9:1668:13 | ChiTotal | total:m1664_8 | -| ir.cpp:1668:13:1668:13 | StoreValue | r1668_1 | -| ir.cpp:1669:14:1669:15 | Address | &:r1669_1 | -| ir.cpp:1669:19:1669:19 | Address | &:r1669_2 | -| ir.cpp:1669:19:1669:19 | Load | m1663_14 | -| ir.cpp:1669:19:1669:19 | StoreValue | r1669_5 | -| ir.cpp:1669:19:1669:19 | Unary | r1669_3 | -| ir.cpp:1669:19:1669:19 | Unary | r1669_4 | -| ir.cpp:1670:13:1670:13 | Address | &:r1670_1 | -| ir.cpp:1670:17:1670:17 | Address | &:r1670_2 | -| ir.cpp:1670:17:1670:17 | Address | &:r1670_3 | -| ir.cpp:1670:17:1670:17 | Load | m1663_14 | -| ir.cpp:1670:17:1670:17 | Load | ~m1668_6 | -| ir.cpp:1670:17:1670:17 | StoreValue | r1670_4 | -| ir.cpp:1674:6:1674:42 | ChiPartial | partial:m1674_3 | -| ir.cpp:1674:6:1674:42 | ChiTotal | total:m1674_2 | -| ir.cpp:1674:6:1674:42 | SideEffect | m1674_3 | -| ir.cpp:1675:9:1675:10 | Address | &:r1675_1 | -| ir.cpp:1675:9:1675:10 | Left | r1675_1 | -| ir.cpp:1675:9:1675:10 | Left | r1675_1 | -| ir.cpp:1675:16:1675:22 | Address | &:r1675_4 | -| ir.cpp:1675:16:1675:22 | Address | &:r1675_9 | -| ir.cpp:1675:16:1675:22 | Right | r1675_3 | -| ir.cpp:1675:16:1675:22 | Right | r1675_8 | -| ir.cpp:1675:18:1675:18 | ChiPartial | partial:m1675_6 | -| ir.cpp:1675:18:1675:18 | ChiTotal | total:m1675_2 | -| ir.cpp:1675:18:1675:18 | StoreValue | r1675_5 | -| ir.cpp:1675:21:1675:21 | ChiPartial | partial:m1675_11 | -| ir.cpp:1675:21:1675:21 | ChiTotal | total:m1675_7 | -| ir.cpp:1675:21:1675:21 | StoreValue | r1675_10 | -| ir.cpp:1676:10:1676:10 | Address | &:r1676_1 | -| ir.cpp:1676:11:1676:11 | Address | &:r1676_5 | -| ir.cpp:1676:15:1676:15 | Address | &:r1676_6 | -| ir.cpp:1676:21:1676:22 | Address | &:r1676_2 | -| ir.cpp:1676:21:1676:22 | Load | m1675_12 | -| ir.cpp:1676:21:1676:22 | StoreValue | r1676_3 | -| ir.cpp:1682:5:1682:23 | Address | &:r1682_5 | -| ir.cpp:1682:5:1682:23 | Address | &:r1682_5 | -| ir.cpp:1682:5:1682:23 | Address | &:r1682_7 | -| ir.cpp:1682:5:1682:23 | Address | &:r1682_7 | -| ir.cpp:1682:5:1682:23 | ChiPartial | partial:m1682_3 | -| ir.cpp:1682:5:1682:23 | ChiTotal | total:m1682_2 | -| ir.cpp:1682:5:1682:23 | Load | m1682_6 | -| ir.cpp:1682:5:1682:23 | SideEffect | m1682_3 | -| ir.cpp:1682:5:1682:23 | SideEffect | m1682_8 | -| ir.cpp:1685:6:1685:20 | ChiPartial | partial:m1685_3 | -| ir.cpp:1685:6:1685:20 | ChiTotal | total:m1685_2 | -| ir.cpp:1685:6:1685:20 | SideEffect | ~m1688_6 | -| ir.cpp:1685:26:1685:26 | Address | &:r1685_5 | -| ir.cpp:1685:34:1685:34 | Address | &:r1685_7 | -| ir.cpp:1685:34:1685:34 | Address | &:r1685_7 | -| ir.cpp:1685:34:1685:34 | Address | &:r1685_9 | -| ir.cpp:1685:34:1685:34 | Address | &:r1685_9 | -| ir.cpp:1685:34:1685:34 | Load | m1685_8 | -| ir.cpp:1685:34:1685:34 | SideEffect | m1685_10 | -| ir.cpp:1685:43:1685:43 | Address | &:r1685_11 | -| ir.cpp:1685:43:1685:43 | Address | &:r1685_11 | -| ir.cpp:1685:43:1685:43 | Address | &:r1685_13 | -| ir.cpp:1685:43:1685:43 | Address | &:r1685_13 | -| ir.cpp:1685:43:1685:43 | Load | m1685_12 | -| ir.cpp:1685:43:1685:43 | SideEffect | m1685_14 | -| ir.cpp:1687:17:1687:20 | Address | &:r1687_1 | -| ir.cpp:1687:24:1687:44 | Address | &:r1687_2 | -| ir.cpp:1687:24:1687:44 | Address | &:r1687_2 | -| ir.cpp:1687:24:1687:44 | Arg(this) | this:r1687_2 | -| ir.cpp:1687:24:1687:44 | CallTarget | func:r1687_4 | -| ir.cpp:1687:24:1687:44 | ChiPartial | partial:m1687_6 | -| ir.cpp:1687:24:1687:44 | ChiPartial | partial:m1687_8 | -| ir.cpp:1687:24:1687:44 | ChiTotal | total:m1685_4 | -| ir.cpp:1687:24:1687:44 | ChiTotal | total:m1687_3 | -| ir.cpp:1687:24:1687:44 | SideEffect | ~m1685_4 | -| ir.cpp:1687:24:1687:44 | StoreValue | r1687_11 | -| ir.cpp:1687:24:1687:44 | Unary | r1687_2 | -| ir.cpp:1687:24:1687:44 | Unary | r1687_10 | -| ir.cpp:1688:10:1688:13 | Address | &:r1688_1 | -| ir.cpp:1688:10:1688:13 | Address | &:r1688_1 | -| ir.cpp:1688:10:1688:13 | Arg(this) | this:r1688_1 | -| ir.cpp:1688:16:1688:37 | CallTarget | func:r1688_3 | -| ir.cpp:1688:16:1688:37 | ChiPartial | partial:m1688_5 | -| ir.cpp:1688:16:1688:37 | ChiPartial | partial:m1688_7 | -| ir.cpp:1688:16:1688:37 | ChiTotal | total:m1687_7 | -| ir.cpp:1688:16:1688:37 | ChiTotal | total:m1688_2 | -| ir.cpp:1688:16:1688:37 | SideEffect | ~m1687_7 | -| ir.cpp:1690:10:1690:21 | Address | &:r1690_1 | -| ir.cpp:1690:24:1692:5 | Address | &:r1690_2 | -| ir.cpp:1690:24:1692:5 | Address | &:r1690_2 | -| ir.cpp:1690:24:1692:5 | Address | &:r1690_4 | -| ir.cpp:1690:24:1692:5 | Address | &:r1690_5 | -| ir.cpp:1690:24:1692:5 | Address | &:r1690_6 | -| ir.cpp:1690:24:1692:5 | Address | &:r1690_7 | -| ir.cpp:1690:24:1692:5 | Address | &:r1690_8 | -| ir.cpp:1690:24:1692:5 | Address | &:r1690_12 | -| ir.cpp:1690:24:1692:5 | Address | &:r1690_17 | -| ir.cpp:1690:24:1692:5 | Address | &:r1690_20 | -| ir.cpp:1690:24:1692:5 | ChiPartial | partial:m1690_10 | -| ir.cpp:1690:24:1692:5 | ChiTotal | total:m0_3 | -| ir.cpp:1690:24:1692:5 | Load | m1687_12 | -| ir.cpp:1690:24:1692:5 | Load | m1688_8 | -| ir.cpp:1690:24:1692:5 | Load | m1692_6 | -| ir.cpp:1690:24:1692:5 | StoreValue | r1690_9 | -| ir.cpp:1690:24:1692:5 | StoreValue | r1690_23 | -| ir.cpp:1690:24:1692:5 | Unary | r1690_2 | -| ir.cpp:1690:24:1692:5 | Unary | r1690_2 | -| ir.cpp:1690:24:1692:5 | Unary | r1690_2 | -| ir.cpp:1690:24:1692:5 | Unary | r1690_2 | -| ir.cpp:1690:24:1692:5 | Unary | r1690_2 | -| ir.cpp:1690:38:1690:38 | Address | &:r1690_13 | -| ir.cpp:1690:38:1690:38 | ChiPartial | partial:m1690_15 | -| ir.cpp:1690:38:1690:38 | ChiTotal | total:m1690_11 | -| ir.cpp:1690:38:1690:38 | Load | m1685_6 | -| ir.cpp:1690:38:1690:38 | StoreValue | r1690_14 | -| ir.cpp:1690:41:1690:41 | Address | &:r1690_18 | -| ir.cpp:1690:41:1690:41 | Address | &:r1690_19 | -| ir.cpp:1690:41:1690:41 | Load | m1685_8 | -| ir.cpp:1690:44:1690:44 | Address | &:r1690_21 | -| ir.cpp:1690:44:1690:44 | Address | &:r1690_22 | -| ir.cpp:1690:44:1690:44 | Load | m1685_12 | -| ir.cpp:1690:46:1690:46 | Address | &:r1690_5 | -| ir.cpp:1690:46:1690:46 | Address | &:r1690_5 | -| ir.cpp:1690:46:1690:46 | Address | &:r1690_7 | -| ir.cpp:1690:46:1690:46 | Address | &:r1690_7 | -| ir.cpp:1690:46:1690:46 | ChiPartial | partial:m1690_3 | -| ir.cpp:1690:46:1690:46 | ChiTotal | total:m1690_2 | -| ir.cpp:1690:46:1690:46 | Load | m1690_6 | -| ir.cpp:1690:46:1690:46 | SideEffect | m1690_3 | -| ir.cpp:1690:46:1690:46 | SideEffect | m1690_8 | -| ir.cpp:1691:14:1691:25 | Address | &:r1691_1 | -| ir.cpp:1691:28:1691:54 | Address | &:r1691_2 | -| ir.cpp:1691:28:1691:54 | Address | &:r1691_2 | -| ir.cpp:1691:28:1691:54 | Address | &:r1691_4 | -| ir.cpp:1691:28:1691:54 | Address | &:r1691_5 | -| ir.cpp:1691:28:1691:54 | Address | &:r1691_7 | -| ir.cpp:1691:28:1691:54 | Address | &:r1691_11 | -| ir.cpp:1691:28:1691:54 | Address | &:r1691_12 | -| ir.cpp:1691:28:1691:54 | Address | &:r1691_14 | -| ir.cpp:1691:28:1691:54 | Address | &:r1691_18 | -| ir.cpp:1691:28:1691:54 | Address | &:r1691_19 | -| ir.cpp:1691:28:1691:54 | Address | &:r1691_21 | -| ir.cpp:1691:28:1691:54 | Address | &:r1691_25 | -| ir.cpp:1691:28:1691:54 | Address | &:r1691_26 | -| ir.cpp:1691:28:1691:54 | Address | &:r1691_28 | -| ir.cpp:1691:28:1691:54 | Address | &:r1691_32 | -| ir.cpp:1691:28:1691:54 | Address | &:r1691_33 | -| ir.cpp:1691:28:1691:54 | Address | &:r1691_35 | -| ir.cpp:1691:28:1691:54 | ChiPartial | partial:m1691_9 | -| ir.cpp:1691:28:1691:54 | ChiPartial | partial:m1691_16 | -| ir.cpp:1691:28:1691:54 | ChiPartial | partial:m1691_23 | -| ir.cpp:1691:28:1691:54 | ChiPartial | partial:m1691_30 | -| ir.cpp:1691:28:1691:54 | ChiPartial | partial:m1691_37 | -| ir.cpp:1691:28:1691:54 | ChiTotal | total:m1691_3 | -| ir.cpp:1691:28:1691:54 | ChiTotal | total:m1691_10 | -| ir.cpp:1691:28:1691:54 | ChiTotal | total:m1691_17 | -| ir.cpp:1691:28:1691:54 | ChiTotal | total:m1691_24 | -| ir.cpp:1691:28:1691:54 | ChiTotal | total:m1691_31 | -| ir.cpp:1691:28:1691:54 | Load | m1690_6 | -| ir.cpp:1691:28:1691:54 | Load | m1690_6 | -| ir.cpp:1691:28:1691:54 | Load | m1690_6 | -| ir.cpp:1691:28:1691:54 | Load | m1690_6 | -| ir.cpp:1691:28:1691:54 | Load | m1690_6 | -| ir.cpp:1691:28:1691:54 | Load | m1691_38 | -| ir.cpp:1691:28:1691:54 | Load | ~m1690_8 | -| ir.cpp:1691:28:1691:54 | Load | ~m1690_8 | -| ir.cpp:1691:28:1691:54 | Load | ~m1690_8 | -| ir.cpp:1691:28:1691:54 | Load | ~m1690_8 | -| ir.cpp:1691:28:1691:54 | Load | ~m1690_8 | -| ir.cpp:1691:28:1691:54 | StoreValue | r1691_8 | -| ir.cpp:1691:28:1691:54 | StoreValue | r1691_15 | -| ir.cpp:1691:28:1691:54 | StoreValue | r1691_22 | -| ir.cpp:1691:28:1691:54 | StoreValue | r1691_29 | -| ir.cpp:1691:28:1691:54 | StoreValue | r1691_36 | -| ir.cpp:1691:28:1691:54 | StoreValue | r1691_39 | -| ir.cpp:1691:28:1691:54 | Unary | r1691_2 | -| ir.cpp:1691:28:1691:54 | Unary | r1691_2 | -| ir.cpp:1691:28:1691:54 | Unary | r1691_2 | -| ir.cpp:1691:28:1691:54 | Unary | r1691_2 | -| ir.cpp:1691:28:1691:54 | Unary | r1691_2 | -| ir.cpp:1691:28:1691:54 | Unary | r1691_6 | -| ir.cpp:1691:28:1691:54 | Unary | r1691_13 | -| ir.cpp:1691:28:1691:54 | Unary | r1691_20 | -| ir.cpp:1691:28:1691:54 | Unary | r1691_27 | -| ir.cpp:1691:28:1691:54 | Unary | r1691_34 | -| ir.cpp:1691:50:1691:50 | Address | &:r1691_5 | -| ir.cpp:1691:50:1691:50 | Address | &:r1691_5 | -| ir.cpp:1691:50:1691:50 | Address | &:r1691_7 | -| ir.cpp:1691:50:1691:50 | Address | &:r1691_7 | -| ir.cpp:1691:50:1691:50 | ChiPartial | partial:m1691_3 | -| ir.cpp:1691:50:1691:50 | ChiTotal | total:m1691_2 | -| ir.cpp:1691:50:1691:50 | Load | m1691_6 | -| ir.cpp:1691:50:1691:50 | SideEffect | m1691_3 | -| ir.cpp:1691:50:1691:50 | SideEffect | m1691_8 | -| ir.cpp:1692:6:1692:6 | ChiPartial | partial:m1692_2 | -| ir.cpp:1692:6:1692:6 | ChiPartial | partial:m1692_5 | -| ir.cpp:1692:6:1692:6 | ChiTotal | total:m1690_16 | -| ir.cpp:1692:6:1692:6 | ChiTotal | total:m1692_3 | -| ir.cpp:1692:6:1692:6 | Load | ~m1685_10 | -| ir.cpp:1692:6:1692:6 | Load | ~m1685_14 | -| ir.cpp:1692:6:1692:6 | StoreValue | r1692_1 | -| ir.cpp:1692:6:1692:6 | StoreValue | r1692_4 | -| ir.cpp:1695:5:1695:21 | Address | &:r1695_5 | -| ir.cpp:1695:5:1695:21 | ChiPartial | partial:m1695_3 | -| ir.cpp:1695:5:1695:21 | ChiTotal | total:m1695_2 | -| ir.cpp:1695:5:1695:21 | Load | m1698_4 | -| ir.cpp:1695:5:1695:21 | SideEffect | m1695_3 | -| ir.cpp:1696:7:1696:7 | Address | &:r1696_1 | -| ir.cpp:1696:10:1696:12 | StoreValue | r1696_2 | -| ir.cpp:1698:3:1698:11 | Address | &:r1698_1 | -| ir.cpp:1698:10:1698:10 | Address | &:r1698_2 | -| ir.cpp:1698:10:1698:10 | Load | m1696_3 | -| ir.cpp:1698:10:1698:10 | StoreValue | r1698_3 | -| ir.cpp:1703:10:1703:10 | Address | &:r1703_5 | -| ir.cpp:1703:10:1703:10 | Address | &:r1703_5 | -| ir.cpp:1703:10:1703:10 | Address | &:r1703_7 | -| ir.cpp:1703:10:1703:10 | Address | &:r1703_7 | -| ir.cpp:1703:10:1703:10 | ChiPartial | partial:m1703_3 | -| ir.cpp:1703:10:1703:10 | ChiTotal | total:m1703_2 | -| ir.cpp:1703:10:1703:10 | Load | m1703_6 | -| ir.cpp:1703:10:1703:10 | SideEffect | m1703_3 | -| ir.cpp:1703:10:1703:10 | SideEffect | m1703_8 | -| ir.cpp:1704:14:1704:22 | Address | &:r1704_1 | -| ir.cpp:1704:25:1710:9 | Address | &:r1704_2 | -| ir.cpp:1704:25:1710:9 | Address | &:r1704_2 | -| ir.cpp:1704:25:1710:9 | Address | &:r1704_4 | -| ir.cpp:1704:25:1710:9 | Address | &:r1704_5 | -| ir.cpp:1704:25:1710:9 | Address | &:r1704_6 | -| ir.cpp:1704:25:1710:9 | Load | m1703_6 | -| ir.cpp:1704:25:1710:9 | Load | ~m1703_8 | -| ir.cpp:1704:25:1710:9 | Load | ~m1704_8 | -| ir.cpp:1704:25:1710:9 | StoreValue | r1704_7 | -| ir.cpp:1704:25:1710:9 | StoreValue | r1704_9 | -| ir.cpp:1704:25:1710:9 | Unary | r1704_2 | -| ir.cpp:1704:34:1704:34 | Address | &:r1704_5 | -| ir.cpp:1704:34:1704:34 | Address | &:r1704_5 | -| ir.cpp:1704:34:1704:34 | Address | &:r1704_7 | -| ir.cpp:1704:34:1704:34 | Address | &:r1704_7 | -| ir.cpp:1704:34:1704:34 | ChiPartial | partial:m1704_3 | -| ir.cpp:1704:34:1704:34 | ChiTotal | total:m1704_2 | -| ir.cpp:1704:34:1704:34 | Load | m1704_6 | -| ir.cpp:1704:34:1704:34 | SideEffect | m1704_8 | -| ir.cpp:1704:34:1704:34 | SideEffect | ~m1705_8 | -| ir.cpp:1705:13:1705:13 | Address | &:r1705_1 | -| ir.cpp:1705:13:1705:13 | Address | &:r1705_4 | -| ir.cpp:1705:13:1705:13 | Arg(this) | this:r1705_4 | -| ir.cpp:1705:13:1705:13 | CallTarget | func:r1705_5 | -| ir.cpp:1705:13:1705:13 | ChiPartial | partial:m1705_7 | -| ir.cpp:1705:13:1705:13 | ChiTotal | total:m1704_4 | -| ir.cpp:1705:13:1705:13 | Load | m1704_6 | -| ir.cpp:1705:13:1705:13 | SideEffect | ~m1704_4 | -| ir.cpp:1705:13:1705:13 | SideEffect | ~m1704_8 | -| ir.cpp:1705:13:1705:13 | Unary | r1705_2 | -| ir.cpp:1705:13:1705:13 | Unary | r1705_3 | -| ir.cpp:1707:18:1707:26 | Address | &:r1707_1 | -| ir.cpp:1707:29:1709:13 | Address | &:r1707_2 | -| ir.cpp:1707:29:1709:13 | Address | &:r1707_2 | -| ir.cpp:1707:29:1709:13 | Address | &:r1707_4 | -| ir.cpp:1707:29:1709:13 | Address | &:r1707_5 | -| ir.cpp:1707:29:1709:13 | Address | &:r1707_7 | -| ir.cpp:1707:29:1709:13 | Load | m1704_6 | -| ir.cpp:1707:29:1709:13 | Load | ~m1704_8 | -| ir.cpp:1707:29:1709:13 | Load | ~m1707_9 | -| ir.cpp:1707:29:1709:13 | StoreValue | r1707_8 | -| ir.cpp:1707:29:1709:13 | StoreValue | r1707_10 | -| ir.cpp:1707:29:1709:13 | Unary | r1707_2 | -| ir.cpp:1707:29:1709:13 | Unary | r1707_6 | -| ir.cpp:1707:38:1707:38 | Address | &:r1707_5 | -| ir.cpp:1707:38:1707:38 | Address | &:r1707_5 | -| ir.cpp:1707:38:1707:38 | Address | &:r1707_7 | -| ir.cpp:1707:38:1707:38 | Address | &:r1707_7 | -| ir.cpp:1707:38:1707:38 | ChiPartial | partial:m1707_3 | -| ir.cpp:1707:38:1707:38 | ChiTotal | total:m1707_2 | -| ir.cpp:1707:38:1707:38 | Load | m1707_6 | -| ir.cpp:1707:38:1707:38 | SideEffect | m1707_8 | -| ir.cpp:1707:38:1707:38 | SideEffect | ~m1708_8 | -| ir.cpp:1708:17:1708:17 | Address | &:r1708_1 | -| ir.cpp:1708:17:1708:17 | Address | &:r1708_4 | -| ir.cpp:1708:17:1708:17 | Arg(this) | this:r1708_4 | -| ir.cpp:1708:17:1708:17 | CallTarget | func:r1708_5 | -| ir.cpp:1708:17:1708:17 | ChiPartial | partial:m1708_7 | -| ir.cpp:1708:17:1708:17 | ChiTotal | total:m1707_4 | -| ir.cpp:1708:17:1708:17 | Load | m1707_6 | -| ir.cpp:1708:17:1708:17 | SideEffect | ~m1707_4 | -| ir.cpp:1708:17:1708:17 | SideEffect | ~m1707_8 | -| ir.cpp:1708:17:1708:17 | Unary | r1708_2 | -| ir.cpp:1708:17:1708:17 | Unary | r1708_3 | -| ir.cpp:1714:6:1714:21 | ChiPartial | partial:m1714_3 | -| ir.cpp:1714:6:1714:21 | ChiTotal | total:m1714_2 | -| ir.cpp:1714:6:1714:21 | SideEffect | m1714_3 | -| ir.cpp:1714:42:1714:43 | Address | &:r1714_5 | -| ir.cpp:1714:66:1714:67 | Address | &:r1714_7 | -| ir.cpp:1714:66:1714:67 | Address | &:r1714_7 | -| ir.cpp:1714:66:1714:67 | Address | &:r1714_9 | -| ir.cpp:1714:66:1714:67 | Address | &:r1714_9 | -| ir.cpp:1714:66:1714:67 | Load | m1714_8 | -| ir.cpp:1714:66:1714:67 | SideEffect | m1714_10 | -| ir.cpp:1714:91:1714:92 | Address | &:r1714_11 | -| ir.cpp:1714:91:1714:92 | Address | &:r1714_11 | -| ir.cpp:1714:91:1714:92 | Address | &:r1714_13 | -| ir.cpp:1714:91:1714:92 | Address | &:r1714_13 | -| ir.cpp:1714:91:1714:92 | Load | m1714_12 | -| ir.cpp:1714:91:1714:92 | SideEffect | m1714_14 | -| ir.cpp:1715:30:1715:31 | Address | &:r1715_1 | -| ir.cpp:1716:31:1716:32 | Address | &:r1716_1 | -| ir.cpp:1716:36:1716:55 | Address | &:r1716_2 | -| ir.cpp:1716:36:1716:55 | StoreValue | r1716_3 | -| ir.cpp:1716:36:1716:55 | StoreValue | r1716_6 | -| ir.cpp:1716:36:1716:55 | Unary | r1716_2 | -| ir.cpp:1716:36:1716:55 | Unary | r1716_5 | -| ir.cpp:1718:10:1718:17 | Address | &:r1718_1 | -| ir.cpp:1718:20:1720:5 | Address | &:r1718_2 | -| ir.cpp:1718:20:1720:5 | Address | &:r1718_2 | -| ir.cpp:1718:20:1720:5 | Address | &:r1718_4 | -| ir.cpp:1718:20:1720:5 | Address | &:r1718_5 | -| ir.cpp:1718:20:1720:5 | Address | &:r1718_9 | -| ir.cpp:1718:20:1720:5 | Address | &:r1718_10 | -| ir.cpp:1718:20:1720:5 | Address | &:r1718_11 | -| ir.cpp:1718:20:1720:5 | Address | &:r1718_12 | -| ir.cpp:1718:20:1720:5 | Address | &:r1718_13 | -| ir.cpp:1718:20:1720:5 | Address | &:r1718_14 | -| ir.cpp:1718:20:1720:5 | Address | &:r1718_15 | -| ir.cpp:1718:20:1720:5 | Address | &:r1718_16 | -| ir.cpp:1718:20:1720:5 | Address | &:r1718_20 | -| ir.cpp:1718:20:1720:5 | Address | &:r1718_21 | -| ir.cpp:1718:20:1720:5 | Address | &:r1718_22 | -| ir.cpp:1718:20:1720:5 | ChiPartial | partial:m1718_7 | -| ir.cpp:1718:20:1720:5 | ChiPartial | partial:m1718_18 | -| ir.cpp:1718:20:1720:5 | ChiTotal | total:m0_6 | -| ir.cpp:1718:20:1720:5 | ChiTotal | total:m1718_3 | -| ir.cpp:1718:20:1720:5 | Load | m0_9 | -| ir.cpp:1718:20:1720:5 | Load | m1714_6 | -| ir.cpp:1718:20:1720:5 | Load | m1714_8 | -| ir.cpp:1718:20:1720:5 | Load | m1714_12 | -| ir.cpp:1718:20:1720:5 | Load | m1715_2 | -| ir.cpp:1718:20:1720:5 | Load | m1716_7 | -| ir.cpp:1718:20:1720:5 | StoreValue | r1718_6 | -| ir.cpp:1718:20:1720:5 | StoreValue | r1718_17 | -| ir.cpp:1718:20:1720:5 | StoreValue | r1718_23 | -| ir.cpp:1718:20:1720:5 | Unary | r1718_2 | -| ir.cpp:1718:20:1720:5 | Unary | r1718_2 | -| ir.cpp:1718:20:1720:5 | Unary | r1718_2 | -| ir.cpp:1718:20:1720:5 | Unary | r1718_2 | -| ir.cpp:1718:20:1720:5 | Unary | r1718_2 | -| ir.cpp:1718:42:1718:42 | Address | &:r1718_5 | -| ir.cpp:1718:42:1718:42 | Address | &:r1718_5 | -| ir.cpp:1718:42:1718:42 | Address | &:r1718_7 | -| ir.cpp:1718:42:1718:42 | Address | &:r1718_7 | -| ir.cpp:1718:42:1718:42 | ChiPartial | partial:m1718_3 | -| ir.cpp:1718:42:1718:42 | ChiTotal | total:m1718_2 | -| ir.cpp:1718:42:1718:42 | Load | m1718_6 | -| ir.cpp:1718:42:1718:42 | SideEffect | m1718_3 | -| ir.cpp:1718:42:1718:42 | SideEffect | m1718_8 | -| ir.cpp:1719:14:1719:21 | Address | &:r1719_1 | -| ir.cpp:1719:24:1719:31 | Address | &:r1719_2 | -| ir.cpp:1719:24:1719:31 | Address | &:r1719_2 | -| ir.cpp:1719:24:1719:31 | Address | &:r1719_4 | -| ir.cpp:1719:24:1719:31 | Address | &:r1719_5 | -| ir.cpp:1719:24:1719:31 | Address | &:r1719_7 | -| ir.cpp:1719:24:1719:31 | Load | m1718_6 | -| ir.cpp:1719:24:1719:31 | Load | ~m1718_8 | -| ir.cpp:1719:24:1719:31 | Load | ~m1719_9 | -| ir.cpp:1719:24:1719:31 | StoreValue | r1719_8 | -| ir.cpp:1719:24:1719:31 | StoreValue | r1719_10 | -| ir.cpp:1719:24:1719:31 | Unary | r1719_2 | -| ir.cpp:1719:24:1719:31 | Unary | r1719_6 | -| ir.cpp:1719:30:1719:30 | Address | &:r1719_5 | -| ir.cpp:1719:30:1719:30 | Address | &:r1719_5 | -| ir.cpp:1719:30:1719:30 | Address | &:r1719_7 | -| ir.cpp:1719:30:1719:30 | Address | &:r1719_7 | -| ir.cpp:1719:30:1719:30 | ChiPartial | partial:m1719_3 | -| ir.cpp:1719:30:1719:30 | ChiTotal | total:m1719_2 | -| ir.cpp:1719:30:1719:30 | Load | m1719_6 | -| ir.cpp:1719:30:1719:30 | SideEffect | m1719_3 | -| ir.cpp:1719:30:1719:30 | SideEffect | m1719_8 | -| ir.cpp:1726:5:1726:44 | Address | &:r1726_5 | -| ir.cpp:1726:5:1726:44 | Address | &:r1726_5 | -| ir.cpp:1726:5:1726:44 | Address | &:r1726_7 | -| ir.cpp:1726:5:1726:44 | Address | &:r1726_7 | -| ir.cpp:1726:5:1726:44 | ChiPartial | partial:m1726_3 | -| ir.cpp:1726:5:1726:44 | ChiTotal | total:m1726_2 | -| ir.cpp:1726:5:1726:44 | Load | m1726_6 | -| ir.cpp:1726:5:1726:44 | SideEffect | m1726_3 | -| ir.cpp:1726:5:1726:44 | SideEffect | m1726_8 | -| ir.cpp:1727:5:1727:44 | Address | &:r1727_5 | -| ir.cpp:1727:5:1727:44 | Address | &:r1727_5 | -| ir.cpp:1727:5:1727:44 | Address | &:r1727_7 | -| ir.cpp:1727:5:1727:44 | Address | &:r1727_7 | -| ir.cpp:1727:5:1727:44 | ChiPartial | partial:m1727_3 | -| ir.cpp:1727:5:1727:44 | ChiTotal | total:m1727_2 | -| ir.cpp:1727:5:1727:44 | Load | m1727_6 | -| ir.cpp:1727:5:1727:44 | SideEffect | m1727_3 | -| ir.cpp:1727:5:1727:44 | SideEffect | m1728_10 | -| ir.cpp:1727:94:1727:94 | Address | &:r1727_9 | -| ir.cpp:1727:94:1727:94 | Address | &:r1727_9 | -| ir.cpp:1727:94:1727:94 | Address | &:r1727_11 | -| ir.cpp:1727:94:1727:94 | Address | &:r1727_11 | -| ir.cpp:1727:94:1727:94 | Load | m1727_10 | -| ir.cpp:1727:94:1727:94 | SideEffect | m1727_12 | -| ir.cpp:1728:9:1728:9 | Address | &:r1728_6 | -| ir.cpp:1728:9:1728:9 | Address | &:r1728_8 | -| ir.cpp:1728:9:1728:9 | Load | m1727_6 | -| ir.cpp:1728:9:1728:9 | Unary | r1728_7 | -| ir.cpp:1728:9:1728:15 | ChiPartial | partial:m1728_9 | -| ir.cpp:1728:9:1728:15 | ChiTotal | total:m1727_8 | -| ir.cpp:1728:13:1728:13 | Address | &:r1728_1 | -| ir.cpp:1728:13:1728:13 | Load | m1727_10 | -| ir.cpp:1728:13:1728:13 | Unary | r1728_2 | -| ir.cpp:1728:13:1728:13 | Unary | r1728_3 | -| ir.cpp:1728:15:1728:15 | Address | &:r1728_4 | -| ir.cpp:1728:15:1728:15 | Load | ~m1727_12 | -| ir.cpp:1728:15:1728:15 | StoreValue | r1728_5 | -| ir.cpp:1735:5:1735:39 | Address | &:r1735_5 | -| ir.cpp:1735:5:1735:39 | Address | &:r1735_5 | -| ir.cpp:1735:5:1735:39 | Address | &:r1735_7 | -| ir.cpp:1735:5:1735:39 | Address | &:r1735_7 | -| ir.cpp:1735:5:1735:39 | ChiPartial | partial:m1735_3 | -| ir.cpp:1735:5:1735:39 | ChiTotal | total:m1735_2 | -| ir.cpp:1735:5:1735:39 | Load | m1735_6 | -| ir.cpp:1735:5:1735:39 | SideEffect | m1735_3 | -| ir.cpp:1735:5:1735:39 | SideEffect | m1735_8 | -| ir.cpp:1738:7:1738:7 | Address | &:r1738_5 | -| ir.cpp:1738:7:1738:7 | Address | &:r1738_5 | -| ir.cpp:1738:7:1738:7 | Address | &:r1738_7 | -| ir.cpp:1738:7:1738:7 | Address | &:r1738_7 | -| ir.cpp:1738:7:1738:7 | Address | &:r1738_9 | -| ir.cpp:1738:7:1738:7 | Address | &:r1738_11 | -| ir.cpp:1738:7:1738:7 | Address | &:r1738_15 | -| ir.cpp:1738:7:1738:7 | Arg(0) | 0:r1738_15 | -| ir.cpp:1738:7:1738:7 | Arg(this) | this:r1738_9 | -| ir.cpp:1738:7:1738:7 | CallTarget | func:r1738_10 | -| ir.cpp:1738:7:1738:7 | ChiPartial | partial:m1738_3 | -| ir.cpp:1738:7:1738:7 | ChiPartial | partial:m1738_17 | -| ir.cpp:1738:7:1738:7 | ChiPartial | partial:m1738_20 | -| ir.cpp:1738:7:1738:7 | ChiTotal | total:m1738_2 | -| ir.cpp:1738:7:1738:7 | ChiTotal | total:m1738_4 | -| ir.cpp:1738:7:1738:7 | ChiTotal | total:m1738_8 | -| ir.cpp:1738:7:1738:7 | Load | m0_2 | -| ir.cpp:1738:7:1738:7 | Load | m1738_6 | -| ir.cpp:1738:7:1738:7 | SideEffect | m1738_21 | -| ir.cpp:1738:7:1738:7 | SideEffect | ~m0_4 | -| ir.cpp:1738:7:1738:7 | SideEffect | ~m1738_4 | -| ir.cpp:1738:7:1738:7 | SideEffect | ~m1738_18 | -| ir.cpp:1738:7:1738:7 | Unary | m1738_6 | -| ir.cpp:1738:7:1738:7 | Unary | r1738_12 | -| ir.cpp:1738:7:1738:7 | Unary | r1738_13 | -| ir.cpp:1738:7:1738:7 | Unary | r1738_14 | -| ir.cpp:1742:5:1742:38 | Address | &:r1742_5 | -| ir.cpp:1742:5:1742:38 | Address | &:r1742_5 | -| ir.cpp:1742:5:1742:38 | Address | &:r1742_7 | -| ir.cpp:1742:5:1742:38 | Address | &:r1742_7 | -| ir.cpp:1742:5:1742:38 | ChiPartial | partial:m1742_3 | -| ir.cpp:1742:5:1742:38 | ChiTotal | total:m1742_2 | -| ir.cpp:1742:5:1742:38 | Load | m1742_6 | -| ir.cpp:1742:5:1742:38 | SideEffect | m1742_22 | -| ir.cpp:1742:5:1742:38 | SideEffect | ~m1742_20 | -| ir.cpp:1742:5:1742:38 | Unary | m1742_6 | -| ir.cpp:1742:5:1742:38 | Unary | m1742_6 | -| ir.cpp:1742:42:1742:42 | Address | &:r1742_9 | -| ir.cpp:1742:42:1742:42 | Address | &:r1742_16 | -| ir.cpp:1742:42:1742:42 | Arg(this) | this:r1742_9 | -| ir.cpp:1742:42:1742:42 | Arg(this) | this:r1742_16 | -| ir.cpp:1742:42:1742:42 | CallTarget | func:r1742_10 | -| ir.cpp:1742:42:1742:42 | CallTarget | func:r1742_17 | -| ir.cpp:1742:42:1742:42 | ChiPartial | partial:m1742_12 | -| ir.cpp:1742:42:1742:42 | ChiPartial | partial:m1742_14 | -| ir.cpp:1742:42:1742:42 | ChiPartial | partial:m1742_19 | -| ir.cpp:1742:42:1742:42 | ChiPartial | partial:m1742_21 | -| ir.cpp:1742:42:1742:42 | ChiTotal | total:m1742_4 | -| ir.cpp:1742:42:1742:42 | ChiTotal | total:m1742_8 | -| ir.cpp:1742:42:1742:42 | ChiTotal | total:m1742_13 | -| ir.cpp:1742:42:1742:42 | ChiTotal | total:m1742_15 | -| ir.cpp:1742:42:1742:42 | SideEffect | ~m1742_4 | -| ir.cpp:1742:42:1742:42 | SideEffect | ~m1742_13 | -| ir.cpp:1745:7:1745:7 | Address | &:r1745_5 | -| ir.cpp:1745:7:1745:7 | Address | &:r1745_5 | -| ir.cpp:1745:7:1745:7 | Address | &:r1745_7 | -| ir.cpp:1745:7:1745:7 | Address | &:r1745_7 | -| ir.cpp:1745:7:1745:7 | Address | &:r1745_9 | -| ir.cpp:1745:7:1745:7 | Address | &:r1745_11 | -| ir.cpp:1745:7:1745:7 | Address | &:r1745_15 | -| ir.cpp:1745:7:1745:7 | Arg(0) | 0:r1745_15 | -| ir.cpp:1745:7:1745:7 | Arg(this) | this:r1745_9 | -| ir.cpp:1745:7:1745:7 | CallTarget | func:r1745_10 | -| ir.cpp:1745:7:1745:7 | ChiPartial | partial:m1745_3 | -| ir.cpp:1745:7:1745:7 | ChiPartial | partial:m1745_17 | -| ir.cpp:1745:7:1745:7 | ChiPartial | partial:m1745_20 | -| ir.cpp:1745:7:1745:7 | ChiTotal | total:m1745_2 | -| ir.cpp:1745:7:1745:7 | ChiTotal | total:m1745_4 | -| ir.cpp:1745:7:1745:7 | ChiTotal | total:m1745_18 | -| ir.cpp:1745:7:1745:7 | Load | m0_2 | -| ir.cpp:1745:7:1745:7 | Load | m1745_6 | -| ir.cpp:1745:7:1745:7 | SideEffect | m1745_8 | -| ir.cpp:1745:7:1745:7 | SideEffect | ~m0_4 | -| ir.cpp:1745:7:1745:7 | SideEffect | ~m1745_4 | -| ir.cpp:1745:7:1745:7 | SideEffect | ~m1745_21 | -| ir.cpp:1745:7:1745:7 | Unary | m1745_6 | -| ir.cpp:1745:7:1745:7 | Unary | r1745_12 | -| ir.cpp:1745:7:1745:7 | Unary | r1745_13 | -| ir.cpp:1745:7:1745:7 | Unary | r1745_14 | -| ir.cpp:1749:5:1749:35 | Address | &:r1749_5 | -| ir.cpp:1749:5:1749:35 | Address | &:r1749_5 | -| ir.cpp:1749:5:1749:35 | Address | &:r1749_7 | -| ir.cpp:1749:5:1749:35 | Address | &:r1749_7 | -| ir.cpp:1749:5:1749:35 | ChiPartial | partial:m1749_3 | -| ir.cpp:1749:5:1749:35 | ChiTotal | total:m1749_2 | -| ir.cpp:1749:5:1749:35 | Load | m1749_6 | -| ir.cpp:1749:5:1749:35 | SideEffect | m1749_8 | -| ir.cpp:1749:5:1749:35 | SideEffect | ~m1749_22 | -| ir.cpp:1749:5:1749:35 | Unary | m1749_6 | -| ir.cpp:1749:5:1749:35 | Unary | m1749_6 | -| ir.cpp:1749:39:1749:39 | Address | &:r1749_9 | -| ir.cpp:1749:39:1749:39 | Address | &:r1749_16 | -| ir.cpp:1749:39:1749:39 | Arg(this) | this:r1749_9 | -| ir.cpp:1749:39:1749:39 | Arg(this) | this:r1749_16 | -| ir.cpp:1749:39:1749:39 | CallTarget | func:r1749_10 | -| ir.cpp:1749:39:1749:39 | CallTarget | func:r1749_17 | -| ir.cpp:1749:39:1749:39 | ChiPartial | partial:m1749_12 | -| ir.cpp:1749:39:1749:39 | ChiPartial | partial:m1749_14 | -| ir.cpp:1749:39:1749:39 | ChiPartial | partial:m1749_19 | -| ir.cpp:1749:39:1749:39 | ChiPartial | partial:m1749_21 | -| ir.cpp:1749:39:1749:39 | ChiTotal | total:m1749_4 | -| ir.cpp:1749:39:1749:39 | ChiTotal | total:m1749_13 | -| ir.cpp:1749:39:1749:39 | ChiTotal | total:m1749_15 | -| ir.cpp:1749:39:1749:39 | ChiTotal | total:m1749_20 | -| ir.cpp:1749:39:1749:39 | SideEffect | ~m1749_4 | -| ir.cpp:1749:39:1749:39 | SideEffect | ~m1749_15 | -| ir.cpp:1752:5:1752:34 | Address | &:r1752_5 | -| ir.cpp:1752:5:1752:34 | ChiPartial | partial:m1752_3 | -| ir.cpp:1752:5:1752:34 | ChiTotal | total:m1752_2 | -| ir.cpp:1752:5:1752:34 | Load | m1757_2 | -| ir.cpp:1752:5:1752:34 | SideEffect | ~m1756_10 | -| ir.cpp:1753:51:1753:51 | Address | &:r1753_1 | -| ir.cpp:1753:51:1753:51 | Address | &:r1753_1 | -| ir.cpp:1753:51:1753:51 | Address | &:r1753_3 | -| ir.cpp:1753:51:1753:51 | Address | &:r1753_3 | -| ir.cpp:1753:51:1753:51 | Load | m1753_2 | -| ir.cpp:1753:51:1753:51 | SideEffect | m1753_4 | -| ir.cpp:1754:48:1754:48 | Address | &:r1754_1 | -| ir.cpp:1754:48:1754:48 | Address | &:r1754_1 | -| ir.cpp:1754:48:1754:48 | Address | &:r1754_3 | -| ir.cpp:1754:48:1754:48 | Address | &:r1754_3 | -| ir.cpp:1754:48:1754:48 | Load | m1754_2 | -| ir.cpp:1754:48:1754:48 | SideEffect | m1754_4 | -| ir.cpp:1755:40:1755:41 | Address | &:r1755_1 | -| ir.cpp:1755:40:1755:41 | Address | &:r1755_1 | -| ir.cpp:1755:40:1755:41 | Arg(this) | this:r1755_1 | -| ir.cpp:1755:44:1755:45 | CallTarget | func:r1755_3 | -| ir.cpp:1755:44:1755:45 | ChiPartial | partial:m1755_9 | -| ir.cpp:1755:44:1755:45 | ChiPartial | partial:m1755_12 | -| ir.cpp:1755:44:1755:45 | ChiTotal | total:m1752_4 | -| ir.cpp:1755:44:1755:45 | ChiTotal | total:m1755_2 | -| ir.cpp:1755:44:1755:45 | SideEffect | ~m1752_4 | -| ir.cpp:1755:45:1755:45 | Address | &:r1755_4 | -| ir.cpp:1755:45:1755:45 | Address | &:r1755_7 | -| ir.cpp:1755:45:1755:45 | Arg(0) | 0:r1755_7 | -| ir.cpp:1755:45:1755:45 | Load | m1753_2 | -| ir.cpp:1755:45:1755:45 | SideEffect | ~m1753_4 | -| ir.cpp:1755:45:1755:45 | Unary | r1755_5 | -| ir.cpp:1755:45:1755:45 | Unary | r1755_6 | -| ir.cpp:1756:37:1756:38 | Address | &:r1756_1 | -| ir.cpp:1756:37:1756:38 | Address | &:r1756_1 | -| ir.cpp:1756:37:1756:38 | Arg(this) | this:r1756_1 | -| ir.cpp:1756:41:1756:42 | CallTarget | func:r1756_3 | -| ir.cpp:1756:41:1756:42 | ChiPartial | partial:m1756_9 | -| ir.cpp:1756:41:1756:42 | ChiPartial | partial:m1756_12 | -| ir.cpp:1756:41:1756:42 | ChiTotal | total:m1755_10 | -| ir.cpp:1756:41:1756:42 | ChiTotal | total:m1756_2 | -| ir.cpp:1756:41:1756:42 | SideEffect | ~m1755_10 | -| ir.cpp:1756:42:1756:42 | Address | &:r1756_4 | -| ir.cpp:1756:42:1756:42 | Address | &:r1756_7 | -| ir.cpp:1756:42:1756:42 | Arg(0) | 0:r1756_7 | -| ir.cpp:1756:42:1756:42 | Load | m1754_2 | -| ir.cpp:1756:42:1756:42 | SideEffect | ~m1754_4 | -| ir.cpp:1756:42:1756:42 | Unary | r1756_5 | -| ir.cpp:1756:42:1756:42 | Unary | r1756_6 | -| ir.cpp:1757:1:1757:1 | Address | &:r1757_1 | -| ir.cpp:1759:6:1759:22 | ChiPartial | partial:m1759_3 | -| ir.cpp:1759:6:1759:22 | ChiTotal | total:m1759_2 | -| ir.cpp:1759:6:1759:22 | SideEffect | m1759_3 | -| ir.cpp:1759:28:1759:28 | Address | &:r1759_5 | -| ir.cpp:1760:13:1760:13 | Address | &:r1760_1 | -| ir.cpp:1760:17:1760:17 | Address | &:r1760_2 | -| ir.cpp:1760:17:1760:17 | Load | m1759_6 | -| ir.cpp:1760:17:1760:17 | StoreValue | r1760_3 | -| ir.cpp:1760:20:1760:20 | Address | &:r1760_5 | -| ir.cpp:1760:20:1760:20 | Left | r1760_6 | -| ir.cpp:1760:20:1760:20 | Load | m1759_6 | -| ir.cpp:1760:20:1760:24 | Condition | r1760_10 | -| ir.cpp:1760:20:1760:24 | Left | r1760_8 | -| ir.cpp:1760:20:1760:24 | Right | r1760_9 | -| ir.cpp:1760:24:1760:24 | Right | r1760_7 | -| ir.cpp:1761:9:1761:9 | Address | &:r1761_6 | -| ir.cpp:1761:13:1761:13 | Address | &:r1761_1 | -| ir.cpp:1761:13:1761:13 | Left | r1761_2 | -| ir.cpp:1761:13:1761:13 | Load | m1759_6 | -| ir.cpp:1761:13:1761:17 | StoreValue | r1761_5 | -| ir.cpp:1761:17:1761:17 | Address | &:r1761_3 | -| ir.cpp:1761:17:1761:17 | Load | m1760_4 | -| ir.cpp:1761:17:1761:17 | Right | r1761_4 | -| ir.cpp:1764:9:1764:9 | Address | &:r1764_2 | -| ir.cpp:1764:9:1764:9 | Phi | from 0:m1759_6 | -| ir.cpp:1764:9:1764:9 | Phi | from 1:m1761_7 | -| ir.cpp:1765:9:1765:9 | Address | &:r1765_3 | -| ir.cpp:1765:13:1765:13 | Address | &:r1765_1 | -| ir.cpp:1765:13:1765:13 | Load | m1764_1 | -| ir.cpp:1765:13:1765:13 | StoreValue | r1765_2 | -| ir.cpp:1765:16:1765:16 | Address | &:r1765_5 | -| ir.cpp:1765:16:1765:16 | Left | r1765_6 | -| ir.cpp:1765:16:1765:16 | Load | m1764_1 | -| ir.cpp:1765:16:1765:20 | Condition | r1765_10 | -| ir.cpp:1765:16:1765:20 | Left | r1765_8 | -| ir.cpp:1765:16:1765:20 | Right | r1765_9 | -| ir.cpp:1765:20:1765:20 | Right | r1765_7 | -| ir.cpp:1766:9:1766:9 | Address | &:r1766_6 | -| ir.cpp:1766:13:1766:13 | Address | &:r1766_1 | -| ir.cpp:1766:13:1766:13 | Left | r1766_2 | -| ir.cpp:1766:13:1766:13 | Load | m1764_1 | -| ir.cpp:1766:13:1766:17 | StoreValue | r1766_5 | -| ir.cpp:1766:17:1766:17 | Address | &:r1766_3 | -| ir.cpp:1766:17:1766:17 | Load | m1765_4 | -| ir.cpp:1766:17:1766:17 | Right | r1766_4 | -| ir.cpp:1769:9:1769:9 | Address | &:r1769_4 | -| ir.cpp:1769:13:1769:13 | Address | &:r1769_2 | -| ir.cpp:1769:13:1769:13 | Load | m1769_1 | -| ir.cpp:1769:13:1769:13 | Phi | from 2:m1764_1 | -| ir.cpp:1769:13:1769:13 | Phi | from 3:m1766_7 | -| ir.cpp:1769:13:1769:13 | StoreValue | r1769_3 | -| ir.cpp:1769:14:1769:25 | Address | &:r1769_6 | -| ir.cpp:1769:14:1769:25 | Condition | r1769_14 | -| ir.cpp:1769:20:1769:21 | Address | &:r1769_10 | -| ir.cpp:1769:20:1769:21 | Left | r1769_11 | -| ir.cpp:1769:20:1769:21 | Load | m1769_9 | -| ir.cpp:1769:20:1769:21 | Right | r1769_12 | -| ir.cpp:1769:20:1769:21 | Unary | r1769_13 | -| ir.cpp:1769:25:1769:25 | Address | &:r1769_7 | -| ir.cpp:1769:25:1769:25 | Load | m1769_5 | -| ir.cpp:1769:25:1769:25 | StoreValue | r1769_8 | -| ir.cpp:1770:9:1770:9 | Address | &:r1770_6 | -| ir.cpp:1770:13:1770:13 | Address | &:r1770_1 | -| ir.cpp:1770:13:1770:13 | Left | r1770_2 | -| ir.cpp:1770:13:1770:13 | Load | m1769_1 | -| ir.cpp:1770:13:1770:17 | StoreValue | r1770_5 | -| ir.cpp:1770:17:1770:17 | Address | &:r1770_3 | -| ir.cpp:1770:17:1770:17 | Load | m1769_5 | -| ir.cpp:1770:17:1770:17 | Right | r1770_4 | -| ir.cpp:1773:9:1773:29 | Address | &:r1773_6 | -| ir.cpp:1773:9:1773:29 | Condition | r1773_14 | -| ir.cpp:1773:13:1773:13 | Address | &:r1773_2 | -| ir.cpp:1773:13:1773:13 | Phi | from 4:m1769_1 | -| ir.cpp:1773:13:1773:13 | Phi | from 5:m1770_7 | -| ir.cpp:1773:17:1773:17 | Address | &:r1773_3 | -| ir.cpp:1773:17:1773:17 | Load | m1773_1 | -| ir.cpp:1773:17:1773:17 | StoreValue | r1773_4 | -| ir.cpp:1773:24:1773:25 | Address | &:r1773_10 | -| ir.cpp:1773:24:1773:25 | Left | r1773_11 | -| ir.cpp:1773:24:1773:25 | Load | m1773_9 | -| ir.cpp:1773:24:1773:25 | Right | r1773_12 | -| ir.cpp:1773:24:1773:25 | Unary | r1773_13 | -| ir.cpp:1773:29:1773:29 | Address | &:r1773_7 | -| ir.cpp:1773:29:1773:29 | Load | m1773_5 | -| ir.cpp:1773:29:1773:29 | StoreValue | r1773_8 | -| ir.cpp:1774:9:1774:9 | Address | &:r1774_6 | -| ir.cpp:1774:13:1774:13 | Address | &:r1774_1 | -| ir.cpp:1774:13:1774:13 | Left | r1774_2 | -| ir.cpp:1774:13:1774:13 | Load | m1773_1 | -| ir.cpp:1774:13:1774:17 | StoreValue | r1774_5 | -| ir.cpp:1774:17:1774:17 | Address | &:r1774_3 | -| ir.cpp:1774:17:1774:17 | Load | m1773_5 | -| ir.cpp:1774:17:1774:17 | Right | r1774_4 | -| ir.cpp:1777:9:1777:9 | Address | &:r1777_2 | -| ir.cpp:1777:9:1777:9 | Phi | from 6:m1773_1 | -| ir.cpp:1777:9:1777:9 | Phi | from 7:m1774_7 | -| ir.cpp:1777:13:1777:13 | Address | &:r1777_3 | -| ir.cpp:1777:13:1777:13 | Load | m1777_1 | -| ir.cpp:1777:13:1777:13 | StoreValue | r1777_4 | -| ir.cpp:1778:9:1778:9 | Address | &:r1778_1 | -| ir.cpp:1778:9:1778:9 | Condition | r1778_4 | -| ir.cpp:1778:9:1778:9 | Left | r1778_2 | -| ir.cpp:1778:9:1778:9 | Load | m1777_5 | -| ir.cpp:1778:9:1778:9 | Right | r1778_3 | -| ir.cpp:1779:9:1779:9 | Address | &:r1779_6 | -| ir.cpp:1779:13:1779:13 | Address | &:r1779_1 | -| ir.cpp:1779:13:1779:13 | Left | r1779_2 | -| ir.cpp:1779:13:1779:13 | Load | m1777_1 | -| ir.cpp:1779:13:1779:17 | StoreValue | r1779_5 | -| ir.cpp:1779:17:1779:17 | Address | &:r1779_3 | -| ir.cpp:1779:17:1779:17 | Load | m1777_5 | -| ir.cpp:1779:17:1779:17 | Right | r1779_4 | -| ir.cpp:1782:9:1782:18 | Address | &:r1782_2 | -| ir.cpp:1782:9:1782:18 | Condition | r1782_10 | -| ir.cpp:1782:9:1782:18 | Phi | from 8:m1777_1 | -| ir.cpp:1782:9:1782:18 | Phi | from 9:m1779_7 | -| ir.cpp:1782:13:1782:14 | Address | &:r1782_6 | -| ir.cpp:1782:13:1782:14 | Left | r1782_7 | -| ir.cpp:1782:13:1782:14 | Load | m1782_5 | -| ir.cpp:1782:13:1782:14 | Right | r1782_8 | -| ir.cpp:1782:13:1782:14 | Unary | r1782_9 | -| ir.cpp:1782:18:1782:18 | Address | &:r1782_3 | -| ir.cpp:1782:18:1782:18 | Load | m1777_5 | -| ir.cpp:1782:18:1782:18 | StoreValue | r1782_4 | -| ir.cpp:1783:9:1783:9 | Address | &:r1783_3 | -| ir.cpp:1783:9:1783:9 | Address | &:r1783_3 | -| ir.cpp:1783:9:1783:9 | Left | r1783_4 | -| ir.cpp:1783:9:1783:9 | Load | m1782_1 | -| ir.cpp:1783:9:1783:15 | StoreValue | r1783_5 | -| ir.cpp:1783:14:1783:15 | Address | &:r1783_1 | -| ir.cpp:1783:14:1783:15 | Load | m1782_5 | -| ir.cpp:1783:14:1783:15 | Right | r1783_2 | -| ir.cpp:1787:6:1787:26 | ChiPartial | partial:m1787_3 | -| ir.cpp:1787:6:1787:26 | ChiTotal | total:m1787_2 | -| ir.cpp:1787:6:1787:26 | SideEffect | m1787_3 | -| ir.cpp:1787:32:1787:32 | Address | &:r1787_5 | -| ir.cpp:1788:17:1788:17 | Address | &:r1788_1 | -| ir.cpp:1788:21:1788:21 | Address | &:r1788_2 | -| ir.cpp:1788:21:1788:21 | Load | m1787_6 | -| ir.cpp:1788:21:1788:21 | StoreValue | r1788_3 | -| ir.cpp:1788:24:1788:24 | Address | &:r1788_5 | -| ir.cpp:1788:24:1788:24 | Left | r1788_6 | -| ir.cpp:1788:24:1788:24 | Load | m1787_6 | -| ir.cpp:1788:24:1788:28 | Condition | r1788_8 | -| ir.cpp:1788:28:1788:28 | Right | r1788_7 | -| ir.cpp:1790:9:1790:9 | Address | &:r1790_6 | -| ir.cpp:1790:13:1790:13 | Address | &:r1790_1 | -| ir.cpp:1790:13:1790:13 | Left | r1790_2 | -| ir.cpp:1790:13:1790:13 | Load | m1787_6 | -| ir.cpp:1790:13:1790:17 | StoreValue | r1790_5 | -| ir.cpp:1790:17:1790:17 | Address | &:r1790_3 | -| ir.cpp:1790:17:1790:17 | Load | m1788_4 | -| ir.cpp:1790:17:1790:17 | Right | r1790_4 | -| ir.cpp:1793:9:1793:9 | Address | &:r1793_1 | -| ir.cpp:1794:13:1794:13 | Address | &:r1794_3 | -| ir.cpp:1794:17:1794:17 | Address | &:r1794_1 | -| ir.cpp:1794:17:1794:17 | Load | m1790_7 | -| ir.cpp:1794:17:1794:17 | StoreValue | r1794_2 | -| ir.cpp:1794:20:1794:20 | Address | &:r1794_5 | -| ir.cpp:1794:20:1794:20 | Left | r1794_6 | -| ir.cpp:1794:20:1794:20 | Load | m1790_7 | -| ir.cpp:1794:20:1794:24 | Condition | r1794_8 | -| ir.cpp:1794:24:1794:24 | Right | r1794_7 | -| ir.cpp:1796:9:1796:9 | Address | &:r1796_6 | -| ir.cpp:1796:13:1796:13 | Address | &:r1796_1 | -| ir.cpp:1796:13:1796:13 | Left | r1796_2 | -| ir.cpp:1796:13:1796:13 | Load | m1790_7 | -| ir.cpp:1796:13:1796:17 | StoreValue | r1796_5 | -| ir.cpp:1796:17:1796:17 | Address | &:r1796_3 | -| ir.cpp:1796:17:1796:17 | Load | m1794_4 | -| ir.cpp:1796:17:1796:17 | Right | r1796_4 | -| ir.cpp:1799:13:1799:13 | Address | &:r1799_3 | -| ir.cpp:1799:17:1799:17 | Address | &:r1799_1 | -| ir.cpp:1799:17:1799:17 | Load | m1796_7 | -| ir.cpp:1799:17:1799:17 | StoreValue | r1799_2 | -| ir.cpp:1799:18:1799:29 | Address | &:r1799_5 | -| ir.cpp:1799:18:1799:29 | Condition | r1799_11 | -| ir.cpp:1799:24:1799:25 | Address | &:r1799_9 | -| ir.cpp:1799:24:1799:25 | Load | m1799_8 | -| ir.cpp:1799:24:1799:25 | Unary | r1799_10 | -| ir.cpp:1799:29:1799:29 | Address | &:r1799_6 | -| ir.cpp:1799:29:1799:29 | Load | m1799_4 | -| ir.cpp:1799:29:1799:29 | StoreValue | r1799_7 | -| ir.cpp:1801:9:1801:9 | Address | &:r1801_6 | -| ir.cpp:1801:13:1801:13 | Address | &:r1801_1 | -| ir.cpp:1801:13:1801:13 | Left | r1801_2 | -| ir.cpp:1801:13:1801:13 | Load | m1796_7 | -| ir.cpp:1801:13:1801:17 | StoreValue | r1801_5 | -| ir.cpp:1801:17:1801:17 | Address | &:r1801_3 | -| ir.cpp:1801:17:1801:17 | Load | m1799_4 | -| ir.cpp:1801:17:1801:17 | Right | r1801_4 | -| ir.cpp:1804:13:1804:33 | Address | &:r1804_5 | -| ir.cpp:1804:13:1804:33 | Condition | r1804_11 | -| ir.cpp:1804:17:1804:17 | Address | &:r1804_1 | -| ir.cpp:1804:21:1804:21 | Address | &:r1804_2 | -| ir.cpp:1804:21:1804:21 | Load | m1801_7 | -| ir.cpp:1804:21:1804:21 | StoreValue | r1804_3 | -| ir.cpp:1804:28:1804:29 | Address | &:r1804_9 | -| ir.cpp:1804:28:1804:29 | Load | m1804_8 | -| ir.cpp:1804:28:1804:29 | Unary | r1804_10 | -| ir.cpp:1804:33:1804:33 | Address | &:r1804_6 | -| ir.cpp:1804:33:1804:33 | Load | m1804_4 | -| ir.cpp:1804:33:1804:33 | StoreValue | r1804_7 | -| ir.cpp:1806:9:1806:9 | Address | &:r1806_6 | -| ir.cpp:1806:13:1806:13 | Address | &:r1806_1 | -| ir.cpp:1806:13:1806:13 | Left | r1806_2 | -| ir.cpp:1806:13:1806:13 | Load | m1801_7 | -| ir.cpp:1806:13:1806:17 | StoreValue | r1806_5 | -| ir.cpp:1806:17:1806:17 | Address | &:r1806_3 | -| ir.cpp:1806:17:1806:17 | Load | m1804_4 | -| ir.cpp:1806:17:1806:17 | Right | r1806_4 | -| ir.cpp:1809:9:1809:9 | Address | &:r1809_1 | -| ir.cpp:1809:13:1809:13 | Address | &:r1809_2 | -| ir.cpp:1809:13:1809:13 | Load | m1806_7 | -| ir.cpp:1809:13:1809:13 | StoreValue | r1809_3 | -| ir.cpp:1810:13:1810:13 | Address | &:r1810_1 | -| ir.cpp:1810:13:1810:13 | Condition | r1810_2 | -| ir.cpp:1810:13:1810:13 | Load | m1809_4 | -| ir.cpp:1812:9:1812:9 | Address | &:r1812_6 | +| ir.cpp:1194:9:1194:9 | Condition | r1194_2 | +| ir.cpp:1194:9:1194:9 | Load | m1191_6 | +| ir.cpp:1195:7:1195:28 | Address | &:r1195_1 | +| ir.cpp:1195:7:1195:28 | Address | &:r1195_1 | +| ir.cpp:1195:7:1195:28 | Load | m1195_4 | +| ir.cpp:1195:13:1195:28 | StoreValue | r1195_3 | +| ir.cpp:1195:13:1195:28 | Unary | r1195_2 | +| ir.cpp:1197:14:1197:14 | Address | &:r1197_1 | +| ir.cpp:1197:14:1197:14 | Left | r1197_2 | +| ir.cpp:1197:14:1197:14 | Load | m1193_3 | +| ir.cpp:1197:14:1197:18 | Condition | r1197_4 | +| ir.cpp:1197:18:1197:18 | Right | r1197_3 | +| ir.cpp:1200:5:1200:5 | Address | &:r1200_2 | +| ir.cpp:1200:9:1200:9 | StoreValue | r1200_1 | +| ir.cpp:1202:22:1202:22 | Address | &:r1202_2 | +| ir.cpp:1202:22:1202:22 | Address | &:r1202_2 | +| ir.cpp:1202:22:1202:22 | Address | &:r1202_4 | +| ir.cpp:1202:22:1202:22 | Load | m1202_3 | +| ir.cpp:1203:5:1203:19 | Address | &:r1203_1 | +| ir.cpp:1203:5:1203:19 | Address | &:r1203_1 | +| ir.cpp:1203:5:1203:19 | Address | &:r1203_1 | +| ir.cpp:1203:5:1203:19 | Arg(this) | this:r1203_1 | +| ir.cpp:1203:5:1203:19 | CallTarget | func:r1203_3 | +| ir.cpp:1203:5:1203:19 | ChiPartial | partial:m1203_7 | +| ir.cpp:1203:5:1203:19 | ChiPartial | partial:m1203_10 | +| ir.cpp:1203:5:1203:19 | ChiTotal | total:m1191_4 | +| ir.cpp:1203:5:1203:19 | ChiTotal | total:m1203_2 | +| ir.cpp:1203:5:1203:19 | Load | m1203_11 | +| ir.cpp:1203:5:1203:19 | SideEffect | ~m1191_4 | +| ir.cpp:1203:18:1203:18 | Address | &:r1203_4 | +| ir.cpp:1203:18:1203:18 | Address | &:r1203_5 | +| ir.cpp:1203:18:1203:18 | Arg(0) | 0:r1203_5 | +| ir.cpp:1203:18:1203:18 | Load | m1202_3 | +| ir.cpp:1203:18:1203:18 | SideEffect | ~m1202_5 | +| ir.cpp:1205:24:1205:24 | Address | &:r1205_2 | +| ir.cpp:1205:24:1205:24 | Address | &:r1205_2 | +| ir.cpp:1205:24:1205:24 | Address | &:r1205_4 | +| ir.cpp:1205:24:1205:24 | Load | m1205_3 | +| ir.cpp:1211:6:1211:16 | ChiPartial | partial:m1211_3 | +| ir.cpp:1211:6:1211:16 | ChiTotal | total:m1211_2 | +| ir.cpp:1211:6:1211:16 | SideEffect | m1211_3 | +| ir.cpp:1211:22:1211:22 | Address | &:r1211_5 | +| ir.cpp:1212:18:1212:20 | Address | &:r1212_1 | +| ir.cpp:1212:18:1212:20 | Left | r1212_1 | +| ir.cpp:1212:18:1212:20 | Left | r1212_1 | +| ir.cpp:1212:18:1212:20 | Left | r1212_1 | +| ir.cpp:1212:18:1212:20 | Left | r1212_1 | +| ir.cpp:1212:23:1212:37 | Address | &:r1212_4 | +| ir.cpp:1212:23:1212:37 | Address | &:r1212_9 | +| ir.cpp:1212:23:1212:37 | Address | &:r1212_14 | +| ir.cpp:1212:23:1212:37 | Address | &:r1212_19 | +| ir.cpp:1212:23:1212:37 | Right | r1212_3 | +| ir.cpp:1212:23:1212:37 | Right | r1212_8 | +| ir.cpp:1212:23:1212:37 | Right | r1212_13 | +| ir.cpp:1212:23:1212:37 | Right | r1212_18 | +| ir.cpp:1212:26:1212:26 | ChiPartial | partial:m1212_6 | +| ir.cpp:1212:26:1212:26 | ChiTotal | total:m1212_2 | +| ir.cpp:1212:26:1212:26 | StoreValue | r1212_5 | +| ir.cpp:1212:29:1212:29 | ChiPartial | partial:m1212_11 | +| ir.cpp:1212:29:1212:29 | ChiTotal | total:m1212_7 | +| ir.cpp:1212:29:1212:29 | StoreValue | r1212_10 | +| ir.cpp:1212:32:1212:32 | ChiPartial | partial:m1212_16 | +| ir.cpp:1212:32:1212:32 | ChiTotal | total:m1212_12 | +| ir.cpp:1212:32:1212:32 | StoreValue | r1212_15 | +| ir.cpp:1212:35:1212:35 | ChiPartial | partial:m1212_21 | +| ir.cpp:1212:35:1212:35 | ChiTotal | total:m1212_17 | +| ir.cpp:1212:35:1212:35 | StoreValue | r1212_20 | +| ir.cpp:1213:7:1213:7 | Address | &:r1213_1 | +| ir.cpp:1213:11:1213:13 | Left | r1213_2 | +| ir.cpp:1213:11:1213:16 | Address | &:r1213_5 | +| ir.cpp:1213:11:1213:16 | Load | ~m1212_22 | +| ir.cpp:1213:11:1213:16 | StoreValue | r1213_6 | +| ir.cpp:1213:15:1213:15 | Address | &:r1213_3 | +| ir.cpp:1213:15:1213:15 | Load | m1211_6 | +| ir.cpp:1213:15:1213:15 | Right | r1213_4 | +| ir.cpp:1214:3:1214:5 | Left | r1214_3 | +| ir.cpp:1214:3:1214:8 | Address | &:r1214_6 | +| ir.cpp:1214:3:1214:12 | ChiPartial | partial:m1214_7 | +| ir.cpp:1214:3:1214:12 | ChiTotal | total:m1212_22 | +| ir.cpp:1214:7:1214:7 | Address | &:r1214_4 | +| ir.cpp:1214:7:1214:7 | Load | m1211_6 | +| ir.cpp:1214:7:1214:7 | Right | r1214_5 | +| ir.cpp:1214:12:1214:12 | Address | &:r1214_1 | +| ir.cpp:1214:12:1214:12 | Load | m1213_7 | +| ir.cpp:1214:12:1214:12 | StoreValue | r1214_2 | +| ir.cpp:1215:18:1215:28 | Address | &:r1215_1 | +| ir.cpp:1215:32:1215:78 | Arg(2) | 2:r1215_6 | +| ir.cpp:1215:32:1215:78 | StoreValue | r1215_10 | +| ir.cpp:1215:56:1215:58 | Address | &:r1215_2 | +| ir.cpp:1215:56:1215:58 | Arg(0) | 0:r1215_3 | +| ir.cpp:1215:56:1215:58 | Load | m1214_8 | +| ir.cpp:1215:61:1215:63 | Address | &:r1215_4 | +| ir.cpp:1215:61:1215:63 | Arg(1) | 1:r1215_5 | +| ir.cpp:1215:61:1215:63 | Load | m1214_8 | +| ir.cpp:1215:71:1215:71 | Arg(3) | 3:r1215_7 | +| ir.cpp:1215:74:1215:74 | Arg(4) | 4:r1215_8 | +| ir.cpp:1215:77:1215:77 | Arg(5) | 5:r1215_9 | +| ir.cpp:1216:3:1216:5 | Address | &:r1216_6 | +| ir.cpp:1216:9:1216:11 | Address | &:r1216_1 | +| ir.cpp:1216:9:1216:11 | Left | r1216_2 | +| ir.cpp:1216:9:1216:11 | Load | m1214_8 | +| ir.cpp:1216:9:1216:25 | StoreValue | r1216_5 | +| ir.cpp:1216:15:1216:25 | Address | &:r1216_3 | +| ir.cpp:1216:15:1216:25 | Load | m1215_11 | +| ir.cpp:1216:15:1216:25 | Right | r1216_4 | +| ir.cpp:1221:5:1221:21 | Address | &:r1221_7 | +| ir.cpp:1221:5:1221:21 | ChiPartial | partial:m1221_3 | +| ir.cpp:1221:5:1221:21 | ChiTotal | total:m1221_2 | +| ir.cpp:1221:5:1221:21 | Load | m1224_4 | +| ir.cpp:1221:5:1221:21 | SideEffect | m1221_3 | +| ir.cpp:1221:27:1221:27 | Address | &:r1221_5 | +| ir.cpp:1222:7:1222:7 | Address | &:r1222_1 | +| ir.cpp:1223:3:1223:8 | CallTarget | func:r1223_1 | +| ir.cpp:1223:10:1223:11 | Address | &:r1223_4 | +| ir.cpp:1223:10:1223:11 | Arg(0) | 0:r1223_4 | +| ir.cpp:1223:10:1223:11 | ChiPartial | partial:m1223_11 | +| ir.cpp:1223:10:1223:11 | ChiTotal | total:m1222_2 | +| ir.cpp:1223:10:1223:11 | Unary | r1223_3 | +| ir.cpp:1223:11:1223:11 | Unary | r1223_2 | +| ir.cpp:1223:14:1223:15 | Address | &:r1223_7 | +| ir.cpp:1223:14:1223:15 | Arg(1) | 1:r1223_7 | +| ir.cpp:1223:14:1223:15 | SideEffect | ~m1221_6 | +| ir.cpp:1223:14:1223:15 | Unary | r1223_6 | +| ir.cpp:1223:15:1223:15 | Unary | r1223_5 | +| ir.cpp:1223:18:1223:28 | Arg(2) | 2:r1223_8 | +| ir.cpp:1223:18:1223:28 | BufferSize | r1223_8 | +| ir.cpp:1223:18:1223:28 | BufferSize | r1223_8 | +| ir.cpp:1224:3:1224:11 | Address | &:r1224_1 | +| ir.cpp:1224:10:1224:10 | Address | &:r1224_2 | +| ir.cpp:1224:10:1224:10 | Load | m1223_12 | +| ir.cpp:1224:10:1224:10 | StoreValue | r1224_3 | +| ir.cpp:1227:8:1227:23 | Address | &:r1227_5 | +| ir.cpp:1227:8:1227:23 | ChiPartial | partial:m1227_3 | +| ir.cpp:1227:8:1227:23 | ChiTotal | total:m1227_2 | +| ir.cpp:1227:8:1227:23 | Load | m1228_11 | +| ir.cpp:1227:8:1227:23 | SideEffect | ~m1228_8 | +| ir.cpp:1228:3:1228:23 | Address | &:r1228_1 | +| ir.cpp:1228:3:1228:23 | Address | &:r1228_1 | +| ir.cpp:1228:3:1228:23 | Arg(this) | this:r1228_1 | +| ir.cpp:1228:3:1228:23 | CallTarget | func:r1228_3 | +| ir.cpp:1228:3:1228:23 | ChiPartial | partial:m1228_7 | +| ir.cpp:1228:3:1228:23 | ChiPartial | partial:m1228_10 | +| ir.cpp:1228:3:1228:23 | ChiTotal | total:m1227_4 | +| ir.cpp:1228:3:1228:23 | ChiTotal | total:m1228_2 | +| ir.cpp:1228:3:1228:23 | SideEffect | ~m1227_4 | +| ir.cpp:1228:17:1228:21 | Address | &:r1228_5 | +| ir.cpp:1228:17:1228:21 | Arg(0) | 0:r1228_5 | +| ir.cpp:1228:17:1228:21 | SideEffect | ~m1227_3 | +| ir.cpp:1228:17:1228:21 | Unary | r1228_4 | +| ir.cpp:1231:6:1231:16 | ChiPartial | partial:m1231_3 | +| ir.cpp:1231:6:1231:16 | ChiTotal | total:m1231_2 | +| ir.cpp:1231:6:1231:16 | SideEffect | m1231_3 | +| ir.cpp:1231:22:1231:22 | Address | &:r1231_5 | +| ir.cpp:1232:9:1232:9 | Address | &:r1232_1 | +| ir.cpp:1232:12:1232:13 | StoreValue | r1232_2 | +| ir.cpp:1233:12:1233:12 | Address | &:r1233_1 | +| ir.cpp:1233:12:1233:12 | Condition | r1233_2 | +| ir.cpp:1233:12:1233:12 | Load | m1231_6 | +| ir.cpp:1235:9:1235:9 | Address | &:r1235_2 | +| ir.cpp:1235:13:1235:13 | StoreValue | r1235_1 | +| ir.cpp:1237:9:1237:9 | Address | &:r1237_2 | +| ir.cpp:1237:9:1237:9 | Phi | from 0:m1232_3 | +| ir.cpp:1237:9:1237:9 | Phi | from 1:m1235_3 | +| ir.cpp:1237:13:1237:13 | Address | &:r1237_3 | +| ir.cpp:1237:13:1237:13 | Load | m1237_1 | +| ir.cpp:1237:13:1237:13 | StoreValue | r1237_4 | +| ir.cpp:1240:6:1240:28 | ChiPartial | partial:m1240_3 | +| ir.cpp:1240:6:1240:28 | ChiTotal | total:m1240_2 | +| ir.cpp:1240:6:1240:28 | SideEffect | m1240_3 | +| ir.cpp:1240:34:1240:34 | Address | &:r1240_5 | +| ir.cpp:1241:9:1241:9 | Address | &:r1241_1 | +| ir.cpp:1241:12:1241:13 | StoreValue | r1241_2 | +| ir.cpp:1242:12:1242:12 | Address | &:r1242_1 | +| ir.cpp:1242:12:1242:12 | Condition | r1242_2 | +| ir.cpp:1242:12:1242:12 | Load | m1240_6 | +| ir.cpp:1244:9:1244:9 | Address | &:r1244_2 | +| ir.cpp:1244:13:1244:13 | StoreValue | r1244_1 | +| ir.cpp:1246:9:1246:9 | Address | &:r1246_2 | +| ir.cpp:1246:13:1246:13 | StoreValue | r1246_1 | +| ir.cpp:1248:9:1248:9 | Address | &:r1248_2 | +| ir.cpp:1248:9:1248:9 | Phi | from 0:m1241_3 | +| ir.cpp:1248:9:1248:9 | Phi | from 2:m1246_3 | +| ir.cpp:1248:13:1248:13 | Address | &:r1248_3 | +| ir.cpp:1248:13:1248:13 | Load | m1248_1 | +| ir.cpp:1248:13:1248:13 | StoreValue | r1248_4 | +| ir.cpp:1251:6:1251:16 | ChiPartial | partial:m1251_3 | +| ir.cpp:1251:6:1251:16 | ChiTotal | total:m1251_2 | +| ir.cpp:1251:6:1251:16 | SideEffect | m1251_3 | +| ir.cpp:1251:22:1251:22 | Address | &:r1251_5 | +| ir.cpp:1252:9:1252:9 | Address | &:r1252_1 | +| ir.cpp:1252:12:1252:13 | StoreValue | r1252_2 | +| ir.cpp:1253:12:1253:12 | Address | &:r1253_1 | +| ir.cpp:1253:12:1253:12 | Condition | r1253_2 | +| ir.cpp:1253:12:1253:12 | Load | m1251_6 | +| ir.cpp:1255:9:1255:9 | Address | &:r1255_2 | +| ir.cpp:1255:13:1255:13 | StoreValue | r1255_1 | +| ir.cpp:1258:9:1258:9 | Address | &:r1258_2 | +| ir.cpp:1258:13:1258:13 | StoreValue | r1258_1 | +| ir.cpp:1259:5:1259:5 | Phi | from 0:m1252_3 | +| ir.cpp:1259:5:1259:5 | Phi | from 1:m1255_3 | +| ir.cpp:1259:5:1259:5 | Phi | from 2:m1258_3 | +| ir.cpp:1260:9:1260:9 | Address | &:r1260_1 | +| ir.cpp:1260:13:1260:13 | Address | &:r1260_2 | +| ir.cpp:1260:13:1260:13 | Load | m1259_1 | +| ir.cpp:1260:13:1260:13 | StoreValue | r1260_3 | +| ir.cpp:1263:6:1263:24 | ChiPartial | partial:m1263_3 | +| ir.cpp:1263:6:1263:24 | ChiTotal | total:m1263_2 | +| ir.cpp:1263:6:1263:24 | SideEffect | m1263_3 | +| ir.cpp:1263:30:1263:30 | Address | &:r1263_5 | +| ir.cpp:1264:9:1264:9 | Address | &:r1264_1 | +| ir.cpp:1264:12:1264:13 | StoreValue | r1264_2 | +| ir.cpp:1265:12:1265:12 | Address | &:r1265_1 | +| ir.cpp:1265:12:1265:12 | Condition | r1265_2 | +| ir.cpp:1265:12:1265:12 | Load | m1263_6 | +| ir.cpp:1267:13:1267:13 | Address | &:r1267_2 | +| ir.cpp:1267:17:1267:17 | StoreValue | r1267_1 | +| ir.cpp:1271:13:1271:13 | Address | &:r1271_2 | +| ir.cpp:1271:17:1271:17 | StoreValue | r1271_1 | +| ir.cpp:1275:13:1275:13 | Address | &:r1275_2 | +| ir.cpp:1275:17:1275:17 | StoreValue | r1275_1 | +| ir.cpp:1276:5:1276:5 | Phi | from 1:m1267_3 | +| ir.cpp:1276:5:1276:5 | Phi | from 2:m1271_3 | +| ir.cpp:1276:5:1276:5 | Phi | from 3:m1275_3 | +| ir.cpp:1277:9:1277:9 | Address | &:r1277_1 | +| ir.cpp:1277:13:1277:13 | Address | &:r1277_2 | +| ir.cpp:1277:13:1277:13 | Load | m1276_1 | +| ir.cpp:1277:13:1277:13 | StoreValue | r1277_3 | +| ir.cpp:1280:5:1280:19 | Address | &:r1280_7 | +| ir.cpp:1280:5:1280:19 | ChiPartial | partial:m1280_3 | +| ir.cpp:1280:5:1280:19 | ChiTotal | total:m1280_2 | +| ir.cpp:1280:5:1280:19 | Load | m1286_15 | +| ir.cpp:1280:5:1280:19 | SideEffect | ~m1286_2 | +| ir.cpp:1280:25:1280:25 | Address | &:r1280_5 | +| ir.cpp:1281:16:1281:16 | Address | &:r1281_3 | +| ir.cpp:1281:16:1281:16 | SideEffect | ~m1281_6 | +| ir.cpp:1281:20:1281:20 | ChiPartial | partial:m1281_5 | +| ir.cpp:1281:20:1281:20 | ChiTotal | total:m1281_2 | +| ir.cpp:1281:20:1281:20 | StoreValue | r1281_4 | +| ir.cpp:1282:16:1282:16 | Address | &:r1282_3 | +| ir.cpp:1282:16:1282:16 | SideEffect | ~m1282_6 | +| ir.cpp:1282:20:1282:28 | ChiPartial | partial:m1282_5 | +| ir.cpp:1282:20:1282:28 | ChiTotal | total:m1282_2 | +| ir.cpp:1282:20:1282:28 | StoreValue | r1282_4 | +| ir.cpp:1283:16:1283:16 | Address | &:r1283_1 | +| ir.cpp:1283:16:1283:16 | Address | &:r1283_1 | +| ir.cpp:1283:16:1283:16 | Address | &:r1283_4 | +| ir.cpp:1283:16:1283:16 | ChiPartial | partial:m1283_10 | +| ir.cpp:1283:16:1283:16 | ChiTotal | total:m1283_8 | +| ir.cpp:1283:16:1283:16 | Condition | r1283_2 | +| ir.cpp:1283:16:1283:16 | Load | ~m1280_3 | +| ir.cpp:1283:16:1283:16 | StoreValue | r1283_9 | +| ir.cpp:1283:20:1283:20 | Address | &:r1283_5 | +| ir.cpp:1283:20:1283:20 | ChiPartial | partial:m1283_7 | +| ir.cpp:1283:20:1283:20 | ChiTotal | total:m1280_4 | +| ir.cpp:1283:20:1283:20 | Load | m1280_6 | +| ir.cpp:1283:20:1283:20 | StoreValue | r1283_6 | +| ir.cpp:1286:5:1286:25 | Address | &:r1286_3 | +| ir.cpp:1286:5:1286:25 | Phi | from 0:~m1280_3 | +| ir.cpp:1286:5:1286:25 | Phi | from 0:~m1280_4 | +| ir.cpp:1286:5:1286:25 | Phi | from 1:m1283_7 | +| ir.cpp:1286:5:1286:25 | Phi | from 1:~m1283_11 | +| ir.cpp:1286:12:1286:12 | Address | &:r1286_4 | +| ir.cpp:1286:12:1286:12 | Left | r1286_5 | +| ir.cpp:1286:12:1286:12 | Load | ~m1286_2 | +| ir.cpp:1286:12:1286:16 | Left | r1286_8 | +| ir.cpp:1286:12:1286:20 | Left | r1286_11 | +| ir.cpp:1286:12:1286:24 | StoreValue | r1286_14 | +| ir.cpp:1286:16:1286:16 | Address | &:r1286_6 | +| ir.cpp:1286:16:1286:16 | Load | ~m1286_2 | +| ir.cpp:1286:16:1286:16 | Right | r1286_7 | +| ir.cpp:1286:20:1286:20 | Address | &:r1286_9 | +| ir.cpp:1286:20:1286:20 | Load | m1286_1 | +| ir.cpp:1286:20:1286:20 | Right | r1286_10 | +| ir.cpp:1286:24:1286:24 | Address | &:r1286_12 | +| ir.cpp:1286:24:1286:24 | Load | ~m1286_2 | +| ir.cpp:1286:24:1286:24 | Right | r1286_13 | +| ir.cpp:1289:6:1289:31 | ChiPartial | partial:m1289_3 | +| ir.cpp:1289:6:1289:31 | ChiTotal | total:m1289_2 | +| ir.cpp:1289:6:1289:31 | SideEffect | ~m1293_1 | +| ir.cpp:1289:45:1289:51 | Address | &:r1289_5 | +| ir.cpp:1289:45:1289:51 | Address | &:r1289_5 | +| ir.cpp:1289:45:1289:51 | Address | &:r1289_7 | +| ir.cpp:1289:45:1289:51 | Address | &:r1289_7 | +| ir.cpp:1289:45:1289:51 | Load | m1289_6 | +| ir.cpp:1289:45:1289:51 | SideEffect | m1289_8 | +| ir.cpp:1290:19:1290:19 | Address | &:r1290_1 | +| ir.cpp:1290:19:1290:19 | Address | &:r1290_1 | +| ir.cpp:1290:19:1290:19 | Address | &:r1290_4 | +| ir.cpp:1290:19:1290:19 | Arg(this) | this:r1290_4 | +| ir.cpp:1290:19:1290:19 | ChiPartial | partial:m1290_6 | +| ir.cpp:1290:19:1290:19 | ChiTotal | total:m0_6 | +| ir.cpp:1290:19:1290:19 | Condition | r1290_2 | +| ir.cpp:1290:19:1290:19 | Load | ~m1289_3 | +| ir.cpp:1290:19:1290:19 | StoreValue | r1290_5 | +| ir.cpp:1291:19:1291:19 | Address | &:r1291_2 | +| ir.cpp:1291:19:1291:19 | Address | &:r1291_2 | +| ir.cpp:1291:19:1291:19 | Address | &:r1291_5 | +| ir.cpp:1291:19:1291:19 | Arg(this) | this:r1291_5 | +| ir.cpp:1291:19:1291:19 | ChiPartial | partial:m1291_16 | +| ir.cpp:1291:19:1291:19 | ChiTotal | total:m1291_14 | +| ir.cpp:1291:19:1291:19 | Condition | r1291_3 | +| ir.cpp:1291:19:1291:19 | Load | ~m1291_1 | +| ir.cpp:1291:19:1291:19 | Phi | from 0:~m1289_4 | +| ir.cpp:1291:19:1291:19 | Phi | from 1:~m1290_7 | +| ir.cpp:1291:19:1291:19 | StoreValue | r1291_15 | +| ir.cpp:1291:20:1291:29 | CallTarget | func:r1291_6 | +| ir.cpp:1291:20:1291:29 | ChiPartial | partial:m1291_10 | +| ir.cpp:1291:20:1291:29 | ChiPartial | partial:m1291_13 | +| ir.cpp:1291:20:1291:29 | ChiTotal | total:m1291_1 | +| ir.cpp:1291:20:1291:29 | ChiTotal | total:m1291_11 | +| ir.cpp:1291:20:1291:29 | SideEffect | ~m1291_1 | +| ir.cpp:1291:21:1291:28 | Address | &:r1291_8 | +| ir.cpp:1291:21:1291:28 | Arg(0) | 0:r1291_8 | +| ir.cpp:1291:21:1291:28 | SideEffect | ~m1289_3 | +| ir.cpp:1291:21:1291:28 | Unary | r1291_7 | +| ir.cpp:1292:19:1292:19 | Address | &:r1292_2 | +| ir.cpp:1292:19:1292:19 | Address | &:r1292_2 | +| ir.cpp:1292:19:1292:19 | Address | &:r1292_5 | +| ir.cpp:1292:19:1292:19 | Arg(this) | this:r1292_5 | +| ir.cpp:1292:19:1292:19 | ChiPartial | partial:m1292_16 | +| ir.cpp:1292:19:1292:19 | ChiTotal | total:m1292_14 | +| ir.cpp:1292:19:1292:19 | Condition | r1292_3 | +| ir.cpp:1292:19:1292:19 | Load | ~m1292_1 | +| ir.cpp:1292:19:1292:19 | Phi | from 2:~m1291_1 | +| ir.cpp:1292:19:1292:19 | Phi | from 3:~m1291_17 | +| ir.cpp:1292:19:1292:19 | StoreValue | r1292_15 | +| ir.cpp:1292:20:1292:28 | CallTarget | func:r1292_6 | +| ir.cpp:1292:20:1292:28 | ChiPartial | partial:m1292_10 | +| ir.cpp:1292:20:1292:28 | ChiPartial | partial:m1292_13 | +| ir.cpp:1292:20:1292:28 | ChiTotal | total:m1292_1 | +| ir.cpp:1292:20:1292:28 | ChiTotal | total:m1292_11 | +| ir.cpp:1292:20:1292:28 | SideEffect | ~m1292_1 | +| ir.cpp:1292:21:1292:27 | Address | &:r1292_7 | +| ir.cpp:1292:21:1292:27 | Address | &:r1292_8 | +| ir.cpp:1292:21:1292:27 | Arg(0) | 0:r1292_8 | +| ir.cpp:1292:21:1292:27 | Load | m1289_6 | +| ir.cpp:1292:21:1292:27 | SideEffect | ~m1289_8 | +| ir.cpp:1293:1:1293:1 | Phi | from 4:~m1292_1 | +| ir.cpp:1293:1:1293:1 | Phi | from 5:~m1292_17 | +| ir.cpp:1300:6:1300:17 | ChiPartial | partial:m1300_3 | +| ir.cpp:1300:6:1300:17 | ChiTotal | total:m1300_2 | +| ir.cpp:1300:6:1300:17 | SideEffect | m1300_3 | +| ir.cpp:1300:25:1300:26 | Address | &:r1300_5 | +| ir.cpp:1300:25:1300:26 | Address | &:r1300_5 | +| ir.cpp:1300:25:1300:26 | Address | &:r1300_7 | +| ir.cpp:1300:25:1300:26 | Address | &:r1300_7 | +| ir.cpp:1300:25:1300:26 | Load | m1300_6 | +| ir.cpp:1300:25:1300:26 | SideEffect | m1300_8 | +| ir.cpp:1300:35:1300:36 | Address | &:r1300_9 | +| ir.cpp:1300:35:1300:36 | Address | &:r1300_9 | +| ir.cpp:1300:35:1300:36 | Address | &:r1300_11 | +| ir.cpp:1300:35:1300:36 | Address | &:r1300_11 | +| ir.cpp:1300:35:1300:36 | Load | m1300_10 | +| ir.cpp:1300:35:1300:36 | SideEffect | m1300_12 | +| ir.cpp:1301:10:1301:15 | Address | &:r1301_1 | +| ir.cpp:1301:10:1301:15 | Left | r1301_1 | +| ir.cpp:1301:10:1301:15 | Left | r1301_1 | +| ir.cpp:1301:24:1301:27 | Address | &:r1301_4 | +| ir.cpp:1301:24:1301:27 | Address | &:r1301_9 | +| ir.cpp:1301:24:1301:27 | ChiPartial | partial:m1301_11 | +| ir.cpp:1301:24:1301:27 | ChiTotal | total:m1301_7 | +| ir.cpp:1301:24:1301:27 | Right | r1301_3 | +| ir.cpp:1301:24:1301:27 | Right | r1301_8 | +| ir.cpp:1301:24:1301:27 | StoreValue | r1301_10 | +| ir.cpp:1301:26:1301:26 | ChiPartial | partial:m1301_6 | +| ir.cpp:1301:26:1301:26 | ChiTotal | total:m1301_2 | +| ir.cpp:1301:26:1301:26 | StoreValue | r1301_5 | +| ir.cpp:1303:5:1303:10 | CallTarget | func:r1303_1 | +| ir.cpp:1303:12:1303:17 | Address | &:r1303_3 | +| ir.cpp:1303:12:1303:17 | Arg(0) | 0:r1303_3 | +| ir.cpp:1303:12:1303:17 | ChiPartial | partial:m1303_9 | +| ir.cpp:1303:12:1303:17 | ChiTotal | total:m1301_12 | +| ir.cpp:1303:12:1303:17 | Unary | r1303_2 | +| ir.cpp:1303:20:1303:21 | Address | &:r1303_4 | +| ir.cpp:1303:20:1303:21 | Address | &:r1303_6 | +| ir.cpp:1303:20:1303:21 | Arg(1) | 1:r1303_6 | +| ir.cpp:1303:20:1303:21 | Load | m1300_6 | +| ir.cpp:1303:20:1303:21 | SideEffect | ~m1300_8 | +| ir.cpp:1303:20:1303:21 | Unary | r1303_5 | +| ir.cpp:1304:5:1304:10 | CallTarget | func:r1304_1 | +| ir.cpp:1304:12:1304:17 | Address | &:r1304_3 | +| ir.cpp:1304:12:1304:17 | Address | &:r1304_3 | +| ir.cpp:1304:12:1304:17 | Arg(0) | 0:r1304_3 | +| ir.cpp:1304:12:1304:17 | ChiPartial | partial:m1304_10 | +| ir.cpp:1304:12:1304:17 | ChiTotal | total:m1303_10 | +| ir.cpp:1304:12:1304:17 | SideEffect | ~m1303_10 | +| ir.cpp:1304:12:1304:17 | Unary | r1304_2 | +| ir.cpp:1304:20:1304:21 | Address | &:r1304_4 | +| ir.cpp:1304:20:1304:21 | Address | &:r1304_6 | +| ir.cpp:1304:20:1304:21 | Arg(1) | 1:r1304_6 | +| ir.cpp:1304:20:1304:21 | Load | m1300_10 | +| ir.cpp:1304:20:1304:21 | SideEffect | ~m1300_12 | +| ir.cpp:1304:20:1304:21 | Unary | r1304_5 | +| ir.cpp:1310:17:1310:29 | ChiPartial | partial:m1310_3 | +| ir.cpp:1310:17:1310:29 | ChiTotal | total:m1310_2 | +| ir.cpp:1310:17:1310:29 | SideEffect | m1310_3 | +| ir.cpp:1310:34:1310:34 | Address | &:r1310_5 | +| ir.cpp:1310:34:1310:34 | Address | &:r1310_5 | +| ir.cpp:1310:34:1310:34 | Address | &:r1310_7 | +| ir.cpp:1310:34:1310:34 | Address | &:r1310_7 | +| ir.cpp:1310:34:1310:34 | Load | m1310_6 | +| ir.cpp:1310:34:1310:34 | SideEffect | m1311_7 | +| ir.cpp:1310:41:1310:41 | Address | &:r1310_9 | +| ir.cpp:1311:9:1311:9 | Address | &:r1311_3 | +| ir.cpp:1311:9:1311:9 | Load | m1310_6 | +| ir.cpp:1311:9:1311:9 | Unary | r1311_4 | +| ir.cpp:1311:9:1311:21 | ChiPartial | partial:m1311_6 | +| ir.cpp:1311:9:1311:21 | ChiTotal | total:m1310_8 | +| ir.cpp:1311:12:1311:17 | Address | &:r1311_5 | +| ir.cpp:1311:21:1311:21 | Address | &:r1311_1 | +| ir.cpp:1311:21:1311:21 | Load | m1310_10 | +| ir.cpp:1311:21:1311:21 | StoreValue | r1311_2 | +| ir.cpp:1319:6:1319:33 | ChiPartial | partial:m1319_3 | +| ir.cpp:1319:6:1319:33 | ChiTotal | total:m1319_2 | +| ir.cpp:1319:6:1319:33 | SideEffect | ~m1336_6 | +| ir.cpp:1319:39:1319:45 | Address | &:r1319_5 | +| ir.cpp:1319:51:1319:55 | Address | &:r1319_7 | +| ir.cpp:1319:51:1319:55 | Address | &:r1319_7 | +| ir.cpp:1319:51:1319:55 | Address | &:r1319_9 | +| ir.cpp:1319:51:1319:55 | Address | &:r1319_9 | +| ir.cpp:1319:51:1319:55 | Load | m1319_8 | +| ir.cpp:1319:51:1319:55 | SideEffect | m1330_12 | +| ir.cpp:1320:7:1320:7 | Address | &:r1320_1 | +| ir.cpp:1320:7:1320:7 | Address | &:r1320_1 | +| ir.cpp:1320:7:1320:7 | Arg(this) | this:r1320_1 | +| ir.cpp:1320:7:1320:7 | CallTarget | func:r1320_3 | +| ir.cpp:1320:7:1320:7 | ChiPartial | partial:m1320_5 | +| ir.cpp:1320:7:1320:7 | ChiPartial | partial:m1320_7 | +| ir.cpp:1320:7:1320:7 | ChiTotal | total:m1319_4 | +| ir.cpp:1320:7:1320:7 | ChiTotal | total:m1320_2 | +| ir.cpp:1320:7:1320:7 | SideEffect | ~m1319_4 | +| ir.cpp:1321:7:1321:26 | CallTarget | func:r1321_2 | +| ir.cpp:1321:7:1321:26 | ChiPartial | partial:m1321_5 | +| ir.cpp:1321:7:1321:26 | ChiTotal | total:m1320_6 | +| ir.cpp:1321:7:1321:26 | SideEffect | ~m1320_6 | +| ir.cpp:1321:28:1321:29 | Arg(0) | 0:r1321_3 | +| ir.cpp:1322:5:1322:27 | CallTarget | func:r1322_1 | +| ir.cpp:1322:5:1322:27 | ChiPartial | partial:m1322_4 | +| ir.cpp:1322:5:1322:27 | ChiTotal | total:m1321_6 | +| ir.cpp:1322:5:1322:27 | SideEffect | ~m1321_6 | +| ir.cpp:1322:29:1322:30 | Arg(0) | 0:r1322_2 | +| ir.cpp:1324:7:1324:7 | Address | &:r1324_1 | +| ir.cpp:1325:7:1325:19 | CallTarget | func:r1325_2 | +| ir.cpp:1325:7:1325:19 | ChiPartial | partial:m1325_8 | +| ir.cpp:1325:7:1325:19 | ChiTotal | total:m1322_5 | +| ir.cpp:1325:7:1325:19 | SideEffect | ~m1322_5 | +| ir.cpp:1325:21:1325:22 | Address | &:r1325_4 | +| ir.cpp:1325:21:1325:22 | Address | &:r1325_4 | +| ir.cpp:1325:21:1325:22 | Arg(0) | 0:r1325_4 | +| ir.cpp:1325:21:1325:22 | ChiPartial | partial:m1325_11 | +| ir.cpp:1325:21:1325:22 | ChiTotal | total:m1324_2 | +| ir.cpp:1325:21:1325:22 | SideEffect | ~m1324_2 | +| ir.cpp:1325:22:1325:22 | Unary | r1325_3 | +| ir.cpp:1325:25:1325:31 | Address | &:r1325_5 | +| ir.cpp:1325:25:1325:31 | Arg(1) | 1:r1325_6 | +| ir.cpp:1325:25:1325:31 | Load | m1319_6 | +| ir.cpp:1326:5:1326:20 | CallTarget | func:r1326_1 | +| ir.cpp:1326:5:1326:20 | ChiPartial | partial:m1326_7 | +| ir.cpp:1326:5:1326:20 | ChiTotal | total:m1325_9 | +| ir.cpp:1326:5:1326:20 | SideEffect | ~m1325_9 | +| ir.cpp:1326:22:1326:23 | Address | &:r1326_3 | +| ir.cpp:1326:22:1326:23 | Address | &:r1326_3 | +| ir.cpp:1326:22:1326:23 | Arg(0) | 0:r1326_3 | +| ir.cpp:1326:22:1326:23 | ChiPartial | partial:m1326_10 | +| ir.cpp:1326:22:1326:23 | ChiTotal | total:m1325_12 | +| ir.cpp:1326:22:1326:23 | SideEffect | ~m1325_12 | +| ir.cpp:1326:23:1326:23 | Unary | r1326_2 | +| ir.cpp:1326:26:1326:32 | Address | &:r1326_4 | +| ir.cpp:1326:26:1326:32 | Arg(1) | 1:r1326_5 | +| ir.cpp:1326:26:1326:32 | Load | m1319_6 | +| ir.cpp:1328:7:1328:7 | Unary | r1328_1 | +| ir.cpp:1328:11:1328:23 | CallTarget | func:r1328_3 | +| ir.cpp:1328:11:1328:23 | ChiPartial | partial:m1328_11 | +| ir.cpp:1328:11:1328:23 | ChiTotal | total:m1326_8 | +| ir.cpp:1328:11:1328:23 | SideEffect | ~m1326_8 | +| ir.cpp:1328:25:1328:29 | Address | &:r1328_4 | +| ir.cpp:1328:25:1328:29 | Address | &:r1328_5 | +| ir.cpp:1328:25:1328:29 | Address | &:r1328_5 | +| ir.cpp:1328:25:1328:29 | Arg(0) | 0:r1328_5 | +| ir.cpp:1328:25:1328:29 | ChiPartial | partial:m1328_14 | +| ir.cpp:1328:25:1328:29 | ChiTotal | total:m1319_10 | +| ir.cpp:1328:25:1328:29 | Load | m1319_8 | +| ir.cpp:1328:25:1328:29 | SideEffect | ~m1319_10 | +| ir.cpp:1328:32:1328:38 | Address | &:r1328_6 | +| ir.cpp:1328:32:1328:38 | Left | r1328_7 | +| ir.cpp:1328:32:1328:38 | Load | m1319_6 | +| ir.cpp:1328:32:1328:42 | Arg(1) | 1:r1328_9 | +| ir.cpp:1328:42:1328:42 | Right | r1328_8 | +| ir.cpp:1329:7:1329:11 | Address | &:r1329_1 | +| ir.cpp:1329:7:1329:11 | Load | m1319_8 | +| ir.cpp:1329:7:1329:11 | Unary | r1329_2 | +| ir.cpp:1329:14:1329:26 | CallTarget | func:r1329_4 | +| ir.cpp:1329:14:1329:26 | ChiPartial | partial:m1329_9 | +| ir.cpp:1329:14:1329:26 | ChiTotal | total:m1328_12 | +| ir.cpp:1329:14:1329:26 | SideEffect | ~m1328_12 | +| ir.cpp:1329:28:1329:29 | Address | &:r1329_6 | +| ir.cpp:1329:28:1329:29 | Address | &:r1329_6 | +| ir.cpp:1329:28:1329:29 | Arg(0) | 0:r1329_6 | +| ir.cpp:1329:28:1329:29 | ChiPartial | partial:m1329_12 | +| ir.cpp:1329:28:1329:29 | ChiTotal | total:m1326_11 | +| ir.cpp:1329:28:1329:29 | SideEffect | ~m1326_11 | +| ir.cpp:1329:29:1329:29 | Unary | r1329_5 | +| ir.cpp:1329:32:1329:33 | Arg(1) | 1:r1329_7 | +| ir.cpp:1330:5:1330:9 | Address | &:r1330_1 | +| ir.cpp:1330:5:1330:9 | Load | m1319_8 | +| ir.cpp:1330:12:1330:24 | CallTarget | func:r1330_3 | +| ir.cpp:1330:12:1330:24 | ChiPartial | partial:m1330_8 | +| ir.cpp:1330:12:1330:24 | ChiTotal | total:m1329_10 | +| ir.cpp:1330:12:1330:24 | SideEffect | ~m1329_10 | +| ir.cpp:1330:26:1330:30 | Address | &:r1330_4 | +| ir.cpp:1330:26:1330:30 | Address | &:r1330_5 | +| ir.cpp:1330:26:1330:30 | Address | &:r1330_5 | +| ir.cpp:1330:26:1330:30 | Arg(0) | 0:r1330_5 | +| ir.cpp:1330:26:1330:30 | ChiPartial | partial:m1330_11 | +| ir.cpp:1330:26:1330:30 | ChiTotal | total:m1328_15 | +| ir.cpp:1330:26:1330:30 | Load | m1319_8 | +| ir.cpp:1330:26:1330:30 | SideEffect | ~m1328_15 | +| ir.cpp:1330:33:1330:34 | Arg(1) | 1:r1330_6 | +| ir.cpp:1332:7:1332:31 | CallTarget | func:r1332_2 | +| ir.cpp:1332:7:1332:31 | ChiPartial | partial:m1332_4 | +| ir.cpp:1332:7:1332:31 | ChiTotal | total:m1330_9 | +| ir.cpp:1332:7:1332:31 | SideEffect | ~m1330_9 | +| ir.cpp:1333:5:1333:32 | CallTarget | func:r1333_1 | +| ir.cpp:1333:5:1333:32 | ChiPartial | partial:m1333_3 | +| ir.cpp:1333:5:1333:32 | ChiTotal | total:m1332_5 | +| ir.cpp:1333:5:1333:32 | SideEffect | ~m1332_5 | +| ir.cpp:1335:5:1335:20 | CallTarget | func:r1335_1 | +| ir.cpp:1335:5:1335:20 | ChiPartial | partial:m1335_3 | +| ir.cpp:1335:5:1335:20 | ChiTotal | total:m1333_4 | +| ir.cpp:1335:5:1335:20 | SideEffect | ~m1333_4 | +| ir.cpp:1335:25:1335:49 | CallTarget | func:r1335_5 | +| ir.cpp:1335:25:1335:49 | ChiPartial | partial:m1335_7 | +| ir.cpp:1335:25:1335:49 | ChiTotal | total:m1335_4 | +| ir.cpp:1335:25:1335:49 | SideEffect | ~m1335_4 | +| ir.cpp:1336:1:1336:1 | Address | &:r1336_2 | +| ir.cpp:1336:1:1336:1 | Address | &:r1336_2 | +| ir.cpp:1336:1:1336:1 | Arg(this) | this:r1336_2 | +| ir.cpp:1336:1:1336:1 | CallTarget | func:r1336_3 | +| ir.cpp:1336:1:1336:1 | ChiPartial | partial:m1336_5 | +| ir.cpp:1336:1:1336:1 | ChiPartial | partial:m1336_8 | +| ir.cpp:1336:1:1336:1 | ChiTotal | total:m1320_8 | +| ir.cpp:1336:1:1336:1 | ChiTotal | total:m1335_8 | +| ir.cpp:1336:1:1336:1 | SideEffect | m1320_8 | +| ir.cpp:1336:1:1336:1 | SideEffect | ~m1335_8 | +| ir.cpp:1338:5:1338:22 | Address | &:r1338_10 | +| ir.cpp:1338:5:1338:22 | ChiPartial | partial:m1338_3 | +| ir.cpp:1338:5:1338:22 | ChiTotal | total:m1338_2 | +| ir.cpp:1338:5:1338:22 | Load | m1338_9 | +| ir.cpp:1338:5:1338:22 | Phi | from 2:m1340_4 | +| ir.cpp:1338:5:1338:22 | Phi | from 3:m1342_2 | +| ir.cpp:1338:5:1338:22 | SideEffect | m1338_3 | +| ir.cpp:1338:29:1338:29 | Address | &:r1338_5 | +| ir.cpp:1338:36:1338:36 | Address | &:r1338_7 | +| ir.cpp:1339:9:1339:9 | Address | &:r1339_1 | +| ir.cpp:1339:9:1339:9 | Condition | r1339_2 | +| ir.cpp:1339:9:1339:9 | Load | m1338_6 | +| ir.cpp:1340:9:1340:17 | Address | &:r1340_1 | +| ir.cpp:1340:16:1340:16 | Address | &:r1340_2 | +| ir.cpp:1340:16:1340:16 | Load | m1338_8 | +| ir.cpp:1340:16:1340:16 | StoreValue | r1340_3 | +| ir.cpp:1342:1:1342:1 | Address | &:r1342_1 | +| ir.cpp:1344:6:1344:15 | ChiPartial | partial:m1344_3 | +| ir.cpp:1344:6:1344:15 | ChiTotal | total:m1344_2 | +| ir.cpp:1344:6:1344:15 | SideEffect | ~m1345_8 | +| ir.cpp:1344:21:1344:21 | Address | &:r1344_5 | +| ir.cpp:1344:28:1344:28 | Address | &:r1344_7 | +| ir.cpp:1345:12:1345:21 | CallTarget | func:r1345_1 | +| ir.cpp:1345:12:1345:21 | ChiPartial | partial:m1345_7 | +| ir.cpp:1345:12:1345:21 | ChiTotal | total:m1344_4 | +| ir.cpp:1345:12:1345:21 | SideEffect | ~m1344_4 | +| ir.cpp:1345:23:1345:23 | Address | &:r1345_2 | +| ir.cpp:1345:23:1345:23 | Arg(0) | 0:r1345_3 | +| ir.cpp:1345:23:1345:23 | Load | m1344_6 | +| ir.cpp:1345:26:1345:26 | Address | &:r1345_4 | +| ir.cpp:1345:26:1345:26 | Arg(1) | 1:r1345_5 | +| ir.cpp:1345:26:1345:26 | Load | m1344_8 | +| ir.cpp:1348:6:1348:25 | ChiPartial | partial:m1348_3 | +| ir.cpp:1348:6:1348:25 | ChiTotal | total:m1348_2 | +| ir.cpp:1348:6:1348:25 | SideEffect | m1348_3 | +| ir.cpp:1348:32:1348:32 | Address | &:r1348_5 | +| ir.cpp:1348:39:1348:39 | Address | &:r1348_7 | +| ir.cpp:1348:47:1348:47 | Address | &:r1348_9 | +| ir.cpp:1349:9:1349:9 | Address | &:r1349_1 | +| ir.cpp:1349:13:1349:13 | Address | &:r1349_2 | +| ir.cpp:1349:13:1349:13 | Load | m1348_8 | +| ir.cpp:1349:13:1349:13 | StoreValue | r1349_3 | +| ir.cpp:1350:5:1350:5 | Address | &:r1350_7 | +| ir.cpp:1350:9:1350:9 | Address | &:r1350_1 | +| ir.cpp:1350:9:1350:9 | Condition | r1350_2 | +| ir.cpp:1350:9:1350:9 | Load | m1348_6 | +| ir.cpp:1350:9:1350:9 | StoreValue | r1350_2 | +| ir.cpp:1350:9:1350:14 | Address | &:r1350_5 | +| ir.cpp:1350:9:1350:14 | Address | &:r1350_9 | +| ir.cpp:1350:9:1350:14 | Address | &:r1350_13 | +| ir.cpp:1350:9:1350:14 | Load | m1350_4 | +| ir.cpp:1350:9:1350:14 | Phi | from 2:m1350_10 | +| ir.cpp:1350:9:1350:14 | Phi | from 3:m1350_14 | +| ir.cpp:1350:9:1350:14 | StoreValue | r1350_6 | +| ir.cpp:1350:14:1350:14 | Address | &:r1350_11 | +| ir.cpp:1350:14:1350:14 | Load | m1348_8 | +| ir.cpp:1350:14:1350:14 | StoreValue | r1350_12 | +| ir.cpp:1351:5:1351:5 | Address | &:r1351_8 | +| ir.cpp:1351:9:1351:9 | Address | &:r1351_1 | +| ir.cpp:1351:9:1351:9 | Condition | r1351_2 | +| ir.cpp:1351:9:1351:9 | Load | m1348_6 | +| ir.cpp:1351:9:1351:9 | StoreValue | r1351_2 | +| ir.cpp:1351:9:1351:14 | Address | &:r1351_5 | +| ir.cpp:1351:9:1351:14 | Address | &:r1351_10 | +| ir.cpp:1351:9:1351:14 | Address | &:r1351_14 | +| ir.cpp:1351:9:1351:14 | Load | m1351_4 | +| ir.cpp:1351:9:1351:14 | Phi | from 5:m1351_11 | +| ir.cpp:1351:9:1351:14 | Phi | from 6:m1351_15 | +| ir.cpp:1351:9:1351:14 | StoreValue | r1351_7 | +| ir.cpp:1351:9:1351:14 | Unary | r1351_6 | +| ir.cpp:1351:14:1351:14 | Address | &:r1351_12 | +| ir.cpp:1351:14:1351:14 | Load | m1348_10 | +| ir.cpp:1351:14:1351:14 | StoreValue | r1351_13 | +| ir.cpp:1352:5:1352:5 | Address | &:r1352_9 | +| ir.cpp:1352:9:1352:9 | Address | &:r1352_1 | +| ir.cpp:1352:9:1352:9 | Condition | r1352_4 | +| ir.cpp:1352:9:1352:9 | Left | r1352_2 | +| ir.cpp:1352:9:1352:9 | Load | m1348_8 | +| ir.cpp:1352:9:1352:9 | Right | r1352_3 | +| ir.cpp:1352:9:1352:9 | StoreValue | r1352_2 | +| ir.cpp:1352:9:1352:14 | Address | &:r1352_7 | +| ir.cpp:1352:9:1352:14 | Address | &:r1352_11 | +| ir.cpp:1352:9:1352:14 | Address | &:r1352_15 | +| ir.cpp:1352:9:1352:14 | Load | m1352_6 | +| ir.cpp:1352:9:1352:14 | Phi | from 8:m1352_12 | +| ir.cpp:1352:9:1352:14 | Phi | from 9:m1352_16 | +| ir.cpp:1352:9:1352:14 | StoreValue | r1352_8 | +| ir.cpp:1352:14:1352:14 | Address | &:r1352_13 | +| ir.cpp:1352:14:1352:14 | Load | m1348_8 | +| ir.cpp:1352:14:1352:14 | StoreValue | r1352_14 | +| ir.cpp:1353:5:1353:5 | Address | &:r1353_10 | +| ir.cpp:1353:9:1353:9 | Address | &:r1353_1 | +| ir.cpp:1353:9:1353:9 | Condition | r1353_4 | +| ir.cpp:1353:9:1353:9 | Left | r1353_2 | +| ir.cpp:1353:9:1353:9 | Load | m1348_8 | +| ir.cpp:1353:9:1353:9 | Right | r1353_3 | +| ir.cpp:1353:9:1353:9 | StoreValue | r1353_2 | +| ir.cpp:1353:9:1353:14 | Address | &:r1353_7 | +| ir.cpp:1353:9:1353:14 | Address | &:r1353_12 | +| ir.cpp:1353:9:1353:14 | Address | &:r1353_16 | +| ir.cpp:1353:9:1353:14 | Load | m1353_6 | +| ir.cpp:1353:9:1353:14 | Phi | from 11:m1353_13 | +| ir.cpp:1353:9:1353:14 | Phi | from 12:m1353_17 | +| ir.cpp:1353:9:1353:14 | StoreValue | r1353_9 | +| ir.cpp:1353:9:1353:14 | Unary | r1353_8 | +| ir.cpp:1353:14:1353:14 | Address | &:r1353_14 | +| ir.cpp:1353:14:1353:14 | Load | m1348_10 | +| ir.cpp:1353:14:1353:14 | StoreValue | r1353_15 | +| ir.cpp:1354:5:1354:5 | Address | &:r1354_10 | +| ir.cpp:1354:9:1354:9 | Address | &:r1354_1 | +| ir.cpp:1354:9:1354:9 | Condition | r1354_4 | +| ir.cpp:1354:9:1354:9 | Left | r1354_2 | +| ir.cpp:1354:9:1354:9 | Load | m1348_10 | +| ir.cpp:1354:9:1354:9 | Right | r1354_3 | +| ir.cpp:1354:9:1354:9 | StoreValue | r1354_2 | +| ir.cpp:1354:9:1354:14 | Address | &:r1354_7 | +| ir.cpp:1354:9:1354:14 | Address | &:r1354_12 | +| ir.cpp:1354:9:1354:14 | Address | &:r1354_17 | +| ir.cpp:1354:9:1354:14 | Load | m1354_6 | +| ir.cpp:1354:9:1354:14 | Phi | from 14:m1354_13 | +| ir.cpp:1354:9:1354:14 | Phi | from 15:m1354_18 | +| ir.cpp:1354:9:1354:14 | StoreValue | r1354_9 | +| ir.cpp:1354:9:1354:14 | Unary | r1354_8 | +| ir.cpp:1354:14:1354:14 | Address | &:r1354_14 | +| ir.cpp:1354:14:1354:14 | Load | m1348_8 | +| ir.cpp:1354:14:1354:14 | StoreValue | r1354_16 | +| ir.cpp:1354:14:1354:14 | Unary | r1354_15 | +| ir.cpp:1355:5:1355:5 | Address | &:r1355_10 | +| ir.cpp:1355:9:1355:9 | Address | &:r1355_1 | +| ir.cpp:1355:9:1355:9 | Condition | r1355_4 | +| ir.cpp:1355:9:1355:9 | Left | r1355_2 | +| ir.cpp:1355:9:1355:9 | Load | m1348_10 | +| ir.cpp:1355:9:1355:9 | Right | r1355_3 | +| ir.cpp:1355:9:1355:9 | StoreValue | r1355_2 | +| ir.cpp:1355:9:1355:14 | Address | &:r1355_7 | +| ir.cpp:1355:9:1355:14 | Address | &:r1355_12 | +| ir.cpp:1355:9:1355:14 | Address | &:r1355_16 | +| ir.cpp:1355:9:1355:14 | Load | m1355_6 | +| ir.cpp:1355:9:1355:14 | Phi | from 17:m1355_13 | +| ir.cpp:1355:9:1355:14 | Phi | from 18:m1355_17 | +| ir.cpp:1355:9:1355:14 | StoreValue | r1355_9 | +| ir.cpp:1355:9:1355:14 | Unary | r1355_8 | +| ir.cpp:1355:14:1355:14 | Address | &:r1355_14 | +| ir.cpp:1355:14:1355:14 | Load | m1348_10 | +| ir.cpp:1355:14:1355:14 | StoreValue | r1355_15 | +| ir.cpp:1357:5:1357:5 | Address | &:r1357_9 | +| ir.cpp:1357:9:1357:26 | Address | &:r1357_7 | +| ir.cpp:1357:9:1357:26 | Address | &:r1357_11 | +| ir.cpp:1357:9:1357:26 | Address | &:r1357_33 | +| ir.cpp:1357:9:1357:26 | Load | m1357_6 | +| ir.cpp:1357:9:1357:26 | Phi | from 20:m1357_12 | +| ir.cpp:1357:9:1357:26 | Phi | from 26:m1357_34 | +| ir.cpp:1357:9:1357:26 | StoreValue | r1357_8 | +| ir.cpp:1357:10:1357:10 | Address | &:r1357_1 | +| ir.cpp:1357:10:1357:10 | Condition | r1357_4 | +| ir.cpp:1357:10:1357:10 | Left | r1357_2 | +| ir.cpp:1357:10:1357:10 | Load | m1348_8 | +| ir.cpp:1357:10:1357:10 | Right | r1357_3 | +| ir.cpp:1357:10:1357:20 | Address | &:r1357_13 | +| ir.cpp:1357:10:1357:20 | Address | &:r1357_17 | +| ir.cpp:1357:10:1357:20 | Address | &:r1357_20 | +| ir.cpp:1357:10:1357:20 | Condition | r1357_18 | +| ir.cpp:1357:10:1357:20 | Load | m1357_16 | +| ir.cpp:1357:10:1357:20 | Phi | from 21:m1357_15 | +| ir.cpp:1357:10:1357:20 | Phi | from 23:m1357_22 | +| ir.cpp:1357:10:1357:20 | StoreValue | r1357_14 | +| ir.cpp:1357:10:1357:20 | StoreValue | r1357_18 | +| ir.cpp:1357:10:1357:20 | StoreValue | r1357_21 | +| ir.cpp:1357:15:1357:15 | Address | &:r1357_23 | +| ir.cpp:1357:15:1357:15 | Condition | r1357_24 | +| ir.cpp:1357:15:1357:15 | Load | m1348_6 | +| ir.cpp:1357:20:1357:20 | Address | &:r1357_26 | +| ir.cpp:1357:20:1357:20 | Condition | r1357_29 | +| ir.cpp:1357:20:1357:20 | Left | r1357_27 | +| ir.cpp:1357:20:1357:20 | Load | m1348_10 | +| ir.cpp:1357:20:1357:20 | Right | r1357_28 | +| ir.cpp:1357:26:1357:26 | Address | &:r1357_31 | +| ir.cpp:1357:26:1357:26 | Load | m1348_8 | +| ir.cpp:1357:26:1357:26 | StoreValue | r1357_32 | +| ir.cpp:1363:5:1363:27 | Address | &:r1363_9 | +| ir.cpp:1363:5:1363:27 | ChiPartial | partial:m1363_3 | +| ir.cpp:1363:5:1363:27 | ChiTotal | total:m1363_2 | +| ir.cpp:1363:5:1363:27 | Load | m1364_11 | +| ir.cpp:1363:5:1363:27 | SideEffect | ~m1364_7 | +| ir.cpp:1363:33:1363:33 | Address | &:r1363_5 | +| ir.cpp:1363:40:1363:40 | Address | &:r1363_7 | +| ir.cpp:1364:5:1364:48 | Address | &:r1364_1 | +| ir.cpp:1364:12:1364:21 | CallTarget | func:r1364_2 | +| ir.cpp:1364:12:1364:21 | ChiPartial | partial:m1364_4 | +| ir.cpp:1364:12:1364:21 | ChiTotal | total:m1363_4 | +| ir.cpp:1364:12:1364:21 | Condition | r1364_3 | +| ir.cpp:1364:12:1364:21 | SideEffect | ~m1363_4 | +| ir.cpp:1364:12:1364:47 | Address | &:r1364_9 | +| ir.cpp:1364:12:1364:47 | Address | &:r1364_19 | +| ir.cpp:1364:12:1364:47 | Address | &:r1364_24 | +| ir.cpp:1364:12:1364:47 | Load | m1364_8 | +| ir.cpp:1364:12:1364:47 | Phi | from 3:m1364_20 | +| ir.cpp:1364:12:1364:47 | Phi | from 3:~m1364_15 | +| ir.cpp:1364:12:1364:47 | Phi | from 4:m1364_25 | +| ir.cpp:1364:12:1364:47 | Phi | from 4:~m1364_21 | +| ir.cpp:1364:12:1364:47 | StoreValue | r1364_10 | +| ir.cpp:1364:28:1364:37 | CallTarget | func:r1364_12 | +| ir.cpp:1364:28:1364:37 | ChiPartial | partial:m1364_14 | +| ir.cpp:1364:28:1364:37 | ChiTotal | total:m1364_5 | +| ir.cpp:1364:28:1364:37 | Condition | r1364_13 | +| ir.cpp:1364:28:1364:37 | SideEffect | ~m1364_5 | +| ir.cpp:1364:43:1364:43 | Address | &:r1364_17 | +| ir.cpp:1364:43:1364:43 | Load | m1363_6 | +| ir.cpp:1364:43:1364:43 | StoreValue | r1364_18 | +| ir.cpp:1364:47:1364:47 | Address | &:r1364_22 | +| ir.cpp:1364:47:1364:47 | Load | m1363_8 | +| ir.cpp:1364:47:1364:47 | Phi | from 0:~m1364_5 | +| ir.cpp:1364:47:1364:47 | Phi | from 2:~m1364_15 | +| ir.cpp:1364:47:1364:47 | StoreValue | r1364_23 | +| ir.cpp:1369:6:1369:6 | ChiPartial | partial:m1369_3 | +| ir.cpp:1369:6:1369:6 | ChiTotal | total:m1369_2 | +| ir.cpp:1369:6:1369:6 | SideEffect | ~m1371_8 | +| ir.cpp:1369:13:1369:13 | Address | &:r1369_5 | +| ir.cpp:1369:13:1369:13 | Address | &:r1369_5 | +| ir.cpp:1369:13:1369:13 | Address | &:r1369_7 | +| ir.cpp:1369:13:1369:13 | Address | &:r1369_7 | +| ir.cpp:1369:13:1369:13 | Load | m1369_6 | +| ir.cpp:1369:13:1369:13 | SideEffect | m1369_8 | +| ir.cpp:1371:3:1371:13 | Address | &:r1371_6 | +| ir.cpp:1371:3:1371:13 | Arg(0) | 0:r1371_2 | +| ir.cpp:1371:3:1371:13 | CallTarget | func:r1371_1 | +| ir.cpp:1371:3:1371:13 | ChiPartial | partial:m1371_7 | +| ir.cpp:1371:3:1371:13 | ChiTotal | total:m1369_4 | +| ir.cpp:1371:3:1371:13 | SideEffect | ~m1369_4 | +| ir.cpp:1371:3:1371:13 | Unary | r1371_6 | +| ir.cpp:1371:8:1371:8 | Address | &:r1371_3 | +| ir.cpp:1371:8:1371:8 | Arg(1) | 1:r1371_5 | +| ir.cpp:1371:8:1371:8 | Load | m1369_6 | +| ir.cpp:1371:8:1371:8 | Unary | r1371_4 | +| ir.cpp:1375:3:1375:3 | Address | &:r1375_5 | +| ir.cpp:1375:3:1375:3 | Address | &:r1375_5 | +| ir.cpp:1375:3:1375:3 | Address | &:r1375_5 | +| ir.cpp:1375:3:1375:3 | Address | &:r1375_5 | +| ir.cpp:1375:3:1375:3 | ChiPartial | partial:m1375_3 | +| ir.cpp:1375:3:1375:3 | ChiPartial | partial:m1375_3 | +| ir.cpp:1375:3:1375:3 | ChiPartial | partial:m1375_3 | +| ir.cpp:1375:3:1375:3 | ChiPartial | partial:m1375_3 | +| ir.cpp:1375:3:1375:3 | ChiTotal | total:m1375_2 | +| ir.cpp:1375:3:1375:3 | ChiTotal | total:m1375_2 | +| ir.cpp:1375:3:1375:3 | ChiTotal | total:m1375_2 | +| ir.cpp:1375:3:1375:3 | ChiTotal | total:m1375_2 | +| ir.cpp:1375:3:1375:3 | Load | m1376_3 | +| ir.cpp:1375:3:1375:3 | Load | m1376_3 | +| ir.cpp:1375:3:1375:3 | Load | m1376_8 | +| ir.cpp:1375:3:1375:3 | Load | m1376_8 | +| ir.cpp:1375:3:1375:3 | SideEffect | m1375_3 | +| ir.cpp:1375:3:1375:3 | SideEffect | m1375_3 | +| ir.cpp:1375:3:1375:3 | SideEffect | ~m1376_6 | +| ir.cpp:1375:3:1375:3 | SideEffect | ~m1376_6 | +| ir.cpp:1376:5:1376:15 | Address | &:r1376_1 | +| ir.cpp:1376:5:1376:15 | Address | &:r1376_1 | +| ir.cpp:1376:5:1376:15 | Address | &:r1376_1 | +| ir.cpp:1376:5:1376:15 | Address | &:r1376_1 | +| ir.cpp:1376:5:1376:15 | Address | &:r1376_1 | +| ir.cpp:1376:5:1376:15 | Address | &:r1376_1 | +| ir.cpp:1376:5:1376:15 | Arg(this) | this:r1376_1 | +| ir.cpp:1376:5:1376:15 | Arg(this) | this:r1376_1 | +| ir.cpp:1376:5:1376:15 | CallTarget | func:r1376_3 | +| ir.cpp:1376:5:1376:15 | CallTarget | func:r1376_3 | +| ir.cpp:1376:5:1376:15 | ChiPartial | partial:m1376_5 | +| ir.cpp:1376:5:1376:15 | ChiPartial | partial:m1376_5 | +| ir.cpp:1376:5:1376:15 | ChiPartial | partial:m1376_7 | +| ir.cpp:1376:5:1376:15 | ChiPartial | partial:m1376_7 | +| ir.cpp:1376:5:1376:15 | ChiTotal | total:m1375_4 | +| ir.cpp:1376:5:1376:15 | ChiTotal | total:m1375_4 | +| ir.cpp:1376:5:1376:15 | ChiTotal | total:m1376_2 | +| ir.cpp:1376:5:1376:15 | ChiTotal | total:m1376_2 | +| ir.cpp:1376:5:1376:15 | SideEffect | ~m1375_4 | +| ir.cpp:1376:5:1376:15 | SideEffect | ~m1375_4 | +| ir.cpp:1376:5:1376:15 | StoreValue | r1376_2 | +| ir.cpp:1376:5:1376:15 | StoreValue | r1376_2 | +| ir.cpp:1414:6:1414:21 | ChiPartial | partial:m1414_3 | +| ir.cpp:1414:6:1414:21 | ChiTotal | total:m1414_2 | +| ir.cpp:1414:6:1414:21 | SideEffect | ~m1426_6 | +| ir.cpp:1415:12:1415:12 | Address | &:r1415_1 | +| ir.cpp:1415:16:1415:34 | CallTarget | func:r1415_2 | +| ir.cpp:1415:16:1415:34 | ChiPartial | partial:m1415_4 | +| ir.cpp:1415:16:1415:34 | ChiTotal | total:m1414_4 | +| ir.cpp:1415:16:1415:34 | SideEffect | ~m1414_4 | +| ir.cpp:1415:16:1415:34 | StoreValue | r1415_3 | +| ir.cpp:1416:19:1416:20 | Address | &:r1416_1 | +| ir.cpp:1416:24:1416:42 | CallTarget | func:r1416_3 | +| ir.cpp:1416:24:1416:42 | ChiPartial | partial:m1416_5 | +| ir.cpp:1416:24:1416:42 | ChiTotal | total:m1415_5 | +| ir.cpp:1416:24:1416:42 | SideEffect | ~m1415_5 | +| ir.cpp:1416:24:1416:42 | StoreValue | r1416_4 | +| ir.cpp:1416:24:1416:44 | Address | &:r1416_2 | +| ir.cpp:1416:24:1416:44 | StoreValue | r1416_9 | +| ir.cpp:1416:24:1416:44 | Unary | r1416_2 | +| ir.cpp:1416:24:1416:44 | Unary | r1416_8 | +| ir.cpp:1418:5:1418:13 | CallTarget | func:r1418_1 | +| ir.cpp:1418:5:1418:13 | ChiPartial | partial:m1418_6 | +| ir.cpp:1418:5:1418:13 | ChiTotal | total:m1416_6 | +| ir.cpp:1418:5:1418:13 | SideEffect | ~m1416_6 | +| ir.cpp:1418:15:1418:15 | Address | &:r1418_4 | +| ir.cpp:1418:15:1418:15 | Arg(0) | 0:r1418_4 | +| ir.cpp:1418:15:1418:15 | SideEffect | ~m1415_6 | +| ir.cpp:1418:15:1418:15 | Unary | r1418_2 | +| ir.cpp:1418:15:1418:15 | Unary | r1418_3 | +| ir.cpp:1419:5:1419:21 | CallTarget | func:r1419_1 | +| ir.cpp:1419:5:1419:21 | ChiPartial | partial:m1419_15 | +| ir.cpp:1419:5:1419:21 | ChiTotal | total:m1419_9 | +| ir.cpp:1419:5:1419:21 | SideEffect | ~m1419_9 | +| ir.cpp:1419:23:1419:27 | Address | &:r1419_2 | +| ir.cpp:1419:23:1419:27 | Address | &:r1419_2 | +| ir.cpp:1419:23:1419:27 | Address | &:r1419_6 | +| ir.cpp:1419:23:1419:27 | Address | &:r1419_13 | +| ir.cpp:1419:23:1419:27 | Arg(0) | 0:r1419_6 | +| ir.cpp:1419:23:1419:27 | Arg(0) | 0:r1419_13 | +| ir.cpp:1419:23:1419:27 | Arg(this) | this:r1419_2 | +| ir.cpp:1419:23:1419:27 | CallTarget | func:r1419_4 | +| ir.cpp:1419:23:1419:27 | ChiPartial | partial:m1419_8 | +| ir.cpp:1419:23:1419:27 | ChiPartial | partial:m1419_11 | +| ir.cpp:1419:23:1419:27 | ChiTotal | total:m1418_7 | +| ir.cpp:1419:23:1419:27 | ChiTotal | total:m1419_3 | +| ir.cpp:1419:23:1419:27 | SideEffect | ~m1414_3 | +| ir.cpp:1419:23:1419:27 | SideEffect | ~m1418_7 | +| ir.cpp:1419:23:1419:27 | SideEffect | ~m1419_12 | +| ir.cpp:1419:23:1419:27 | Unary | r1419_2 | +| ir.cpp:1419:23:1419:27 | Unary | r1419_5 | +| ir.cpp:1420:5:1420:15 | CallTarget | func:r1420_1 | +| ir.cpp:1420:5:1420:15 | ChiPartial | partial:m1420_16 | +| ir.cpp:1420:5:1420:15 | ChiTotal | total:m1420_10 | +| ir.cpp:1420:5:1420:15 | SideEffect | ~m1420_10 | +| ir.cpp:1420:17:1420:17 | Address | &:r1420_2 | +| ir.cpp:1420:17:1420:17 | Address | &:r1420_2 | +| ir.cpp:1420:17:1420:17 | Address | &:r1420_2 | +| ir.cpp:1420:17:1420:17 | Address | &:r1420_7 | +| ir.cpp:1420:17:1420:17 | Arg(0) | 0:r1420_7 | +| ir.cpp:1420:17:1420:17 | Arg(0) | 0:r1420_14 | +| ir.cpp:1420:17:1420:17 | Arg(this) | this:r1420_2 | +| ir.cpp:1420:17:1420:17 | CallTarget | func:r1420_4 | +| ir.cpp:1420:17:1420:17 | ChiPartial | partial:m1420_9 | +| ir.cpp:1420:17:1420:17 | ChiPartial | partial:m1420_12 | +| ir.cpp:1420:17:1420:17 | ChiTotal | total:m1419_16 | +| ir.cpp:1420:17:1420:17 | ChiTotal | total:m1420_3 | +| ir.cpp:1420:17:1420:17 | Load | m1420_13 | +| ir.cpp:1420:17:1420:17 | SideEffect | ~m1415_6 | +| ir.cpp:1420:17:1420:17 | SideEffect | ~m1419_16 | +| ir.cpp:1420:17:1420:17 | Unary | r1420_5 | +| ir.cpp:1420:17:1420:17 | Unary | r1420_6 | +| ir.cpp:1421:5:1421:23 | CallTarget | func:r1421_1 | +| ir.cpp:1421:5:1421:23 | ChiPartial | partial:m1421_15 | +| ir.cpp:1421:5:1421:23 | ChiTotal | total:m1421_9 | +| ir.cpp:1421:5:1421:23 | SideEffect | ~m1421_9 | +| ir.cpp:1421:25:1421:29 | Address | &:r1421_2 | +| ir.cpp:1421:25:1421:29 | Address | &:r1421_2 | +| ir.cpp:1421:25:1421:29 | Address | &:r1421_2 | +| ir.cpp:1421:25:1421:29 | Address | &:r1421_6 | +| ir.cpp:1421:25:1421:29 | Arg(0) | 0:r1421_6 | +| ir.cpp:1421:25:1421:29 | Arg(0) | 0:r1421_13 | +| ir.cpp:1421:25:1421:29 | Arg(this) | this:r1421_2 | +| ir.cpp:1421:25:1421:29 | CallTarget | func:r1421_4 | +| ir.cpp:1421:25:1421:29 | ChiPartial | partial:m1421_8 | +| ir.cpp:1421:25:1421:29 | ChiPartial | partial:m1421_11 | +| ir.cpp:1421:25:1421:29 | ChiTotal | total:m1420_17 | +| ir.cpp:1421:25:1421:29 | ChiTotal | total:m1421_3 | +| ir.cpp:1421:25:1421:29 | Load | m1421_12 | +| ir.cpp:1421:25:1421:29 | SideEffect | ~m1414_3 | +| ir.cpp:1421:25:1421:29 | SideEffect | ~m1420_17 | +| ir.cpp:1421:25:1421:29 | Unary | r1421_5 | +| ir.cpp:1422:5:1422:12 | Address | &:r1422_1 | +| ir.cpp:1422:5:1422:12 | Address | &:r1422_1 | +| ir.cpp:1422:5:1422:12 | Address | &:r1422_9 | +| ir.cpp:1422:5:1422:12 | Arg(this) | this:r1422_1 | +| ir.cpp:1422:5:1422:12 | Arg(this) | this:r1422_9 | +| ir.cpp:1422:5:1422:12 | CallTarget | func:r1422_3 | +| ir.cpp:1422:5:1422:12 | ChiPartial | partial:m1422_5 | +| ir.cpp:1422:5:1422:12 | ChiPartial | partial:m1422_7 | +| ir.cpp:1422:5:1422:12 | ChiTotal | total:m1421_16 | +| ir.cpp:1422:5:1422:12 | ChiTotal | total:m1422_2 | +| ir.cpp:1422:5:1422:12 | SideEffect | m1422_8 | +| ir.cpp:1422:5:1422:12 | SideEffect | ~m1421_16 | +| ir.cpp:1422:5:1422:12 | Unary | r1422_1 | +| ir.cpp:1422:14:1422:18 | CallTarget | func:r1422_10 | +| ir.cpp:1422:14:1422:18 | ChiPartial | partial:m1422_12 | +| ir.cpp:1422:14:1422:18 | ChiTotal | total:m1422_6 | +| ir.cpp:1422:14:1422:18 | SideEffect | ~m1422_6 | +| ir.cpp:1423:5:1423:23 | CallTarget | func:r1423_2 | +| ir.cpp:1423:5:1423:23 | ChiPartial | partial:m1423_4 | +| ir.cpp:1423:5:1423:23 | ChiTotal | total:m1422_13 | +| ir.cpp:1423:5:1423:23 | SideEffect | ~m1422_13 | +| ir.cpp:1423:5:1423:23 | StoreValue | r1423_3 | +| ir.cpp:1423:5:1423:25 | Address | &:r1423_1 | +| ir.cpp:1423:5:1423:25 | Address | &:r1423_7 | +| ir.cpp:1423:5:1423:25 | Arg(this) | this:r1423_7 | +| ir.cpp:1423:5:1423:25 | SideEffect | m1423_6 | +| ir.cpp:1423:5:1423:25 | Unary | r1423_1 | +| ir.cpp:1423:27:1423:31 | CallTarget | func:r1423_8 | +| ir.cpp:1423:27:1423:31 | ChiPartial | partial:m1423_10 | +| ir.cpp:1423:27:1423:31 | ChiTotal | total:m1423_5 | +| ir.cpp:1423:27:1423:31 | SideEffect | ~m1423_5 | +| ir.cpp:1425:5:1425:28 | CallTarget | func:r1425_2 | +| ir.cpp:1425:5:1425:28 | ChiPartial | partial:m1425_4 | +| ir.cpp:1425:5:1425:28 | ChiTotal | total:m1423_11 | +| ir.cpp:1425:5:1425:28 | SideEffect | ~m1423_11 | +| ir.cpp:1425:5:1425:28 | StoreValue | r1425_3 | +| ir.cpp:1425:5:1425:30 | Address | &:r1425_1 | +| ir.cpp:1426:1:1426:1 | Address | &:r1426_2 | +| ir.cpp:1426:1:1426:1 | Address | &:r1426_2 | +| ir.cpp:1426:1:1426:1 | Arg(this) | this:r1426_2 | +| ir.cpp:1426:1:1426:1 | CallTarget | func:r1426_3 | +| ir.cpp:1426:1:1426:1 | ChiPartial | partial:m1426_5 | +| ir.cpp:1426:1:1426:1 | ChiPartial | partial:m1426_8 | +| ir.cpp:1426:1:1426:1 | ChiTotal | total:m1415_6 | +| ir.cpp:1426:1:1426:1 | ChiTotal | total:m1425_5 | +| ir.cpp:1426:1:1426:1 | SideEffect | m1415_6 | +| ir.cpp:1426:1:1426:1 | SideEffect | ~m1425_5 | +| ir.cpp:1428:6:1428:30 | ChiPartial | partial:m1428_3 | +| ir.cpp:1428:6:1428:30 | ChiTotal | total:m1428_2 | +| ir.cpp:1428:6:1428:30 | SideEffect | ~m1438_14 | +| ir.cpp:1429:21:1429:21 | Address | &:r1429_1 | +| ir.cpp:1429:25:1429:52 | CallTarget | func:r1429_2 | +| ir.cpp:1429:25:1429:52 | ChiPartial | partial:m1429_4 | +| ir.cpp:1429:25:1429:52 | ChiTotal | total:m1428_4 | +| ir.cpp:1429:25:1429:52 | SideEffect | ~m1428_4 | +| ir.cpp:1429:25:1429:52 | StoreValue | r1429_3 | +| ir.cpp:1430:28:1430:29 | Address | &:r1430_1 | +| ir.cpp:1430:33:1430:60 | CallTarget | func:r1430_3 | +| ir.cpp:1430:33:1430:60 | ChiPartial | partial:m1430_5 | +| ir.cpp:1430:33:1430:60 | ChiTotal | total:m1429_5 | +| ir.cpp:1430:33:1430:60 | SideEffect | ~m1429_5 | +| ir.cpp:1430:33:1430:60 | StoreValue | r1430_4 | +| ir.cpp:1430:33:1430:62 | Address | &:r1430_2 | +| ir.cpp:1430:33:1430:62 | StoreValue | r1430_9 | +| ir.cpp:1430:33:1430:62 | Unary | r1430_2 | +| ir.cpp:1430:33:1430:62 | Unary | r1430_8 | +| ir.cpp:1431:21:1431:22 | Address | &:r1431_1 | +| ir.cpp:1432:5:1432:13 | CallTarget | func:r1432_1 | +| ir.cpp:1432:5:1432:13 | ChiPartial | partial:m1432_6 | +| ir.cpp:1432:5:1432:13 | ChiTotal | total:m1430_6 | +| ir.cpp:1432:5:1432:13 | SideEffect | ~m1430_6 | +| ir.cpp:1432:15:1432:15 | Address | &:r1432_4 | +| ir.cpp:1432:15:1432:15 | Arg(0) | 0:r1432_4 | +| ir.cpp:1432:15:1432:15 | SideEffect | ~m1429_6 | +| ir.cpp:1432:15:1432:15 | Unary | r1432_2 | +| ir.cpp:1432:15:1432:15 | Unary | r1432_3 | +| ir.cpp:1433:5:1433:15 | CallTarget | func:r1433_1 | +| ir.cpp:1433:5:1433:15 | ChiPartial | partial:m1433_8 | +| ir.cpp:1433:5:1433:15 | ChiTotal | total:m1432_7 | +| ir.cpp:1433:5:1433:15 | SideEffect | ~m1432_7 | +| ir.cpp:1433:17:1433:17 | Address | &:r1433_2 | +| ir.cpp:1433:17:1433:17 | Address | &:r1433_2 | +| ir.cpp:1433:17:1433:17 | Address | &:r1433_3 | +| ir.cpp:1433:17:1433:17 | Arg(0) | 0:r1433_6 | +| ir.cpp:1433:17:1433:17 | Load | m1429_6 | +| ir.cpp:1433:17:1433:17 | Load | m1433_5 | +| ir.cpp:1433:17:1433:17 | StoreValue | r1433_4 | +| ir.cpp:1434:5:1434:21 | Address | &:r1434_1 | +| ir.cpp:1434:5:1434:21 | Address | &:r1434_1 | +| ir.cpp:1434:5:1434:21 | Address | &:r1434_1 | +| ir.cpp:1434:5:1434:21 | Arg(this) | this:r1434_1 | +| ir.cpp:1434:5:1434:21 | ChiPartial | partial:m1434_9 | +| ir.cpp:1434:5:1434:21 | ChiTotal | total:m1434_3 | +| ir.cpp:1434:5:1434:21 | SideEffect | m1434_3 | +| ir.cpp:1434:5:1434:21 | StoreValue | r1434_2 | +| ir.cpp:1434:23:1434:28 | CallTarget | func:r1434_4 | +| ir.cpp:1434:23:1434:28 | ChiPartial | partial:m1434_6 | +| ir.cpp:1434:23:1434:28 | ChiTotal | total:m1433_9 | +| ir.cpp:1434:23:1434:28 | SideEffect | ~m1433_9 | +| ir.cpp:1435:5:1435:32 | CallTarget | func:r1435_2 | +| ir.cpp:1435:5:1435:32 | ChiPartial | partial:m1435_4 | +| ir.cpp:1435:5:1435:32 | ChiTotal | total:m1434_7 | +| ir.cpp:1435:5:1435:32 | SideEffect | ~m1434_7 | +| ir.cpp:1435:5:1435:32 | StoreValue | r1435_3 | +| ir.cpp:1435:5:1435:34 | Address | &:r1435_1 | +| ir.cpp:1435:5:1435:34 | Address | &:r1435_1 | +| ir.cpp:1435:5:1435:34 | Address | &:r1435_1 | +| ir.cpp:1435:5:1435:34 | Arg(this) | this:r1435_1 | +| ir.cpp:1435:5:1435:34 | ChiPartial | partial:m1435_12 | +| ir.cpp:1435:5:1435:34 | ChiTotal | total:m1435_6 | +| ir.cpp:1435:5:1435:34 | SideEffect | m1435_6 | +| ir.cpp:1435:36:1435:41 | CallTarget | func:r1435_7 | +| ir.cpp:1435:36:1435:41 | ChiPartial | partial:m1435_9 | +| ir.cpp:1435:36:1435:41 | ChiTotal | total:m1435_5 | +| ir.cpp:1435:36:1435:41 | SideEffect | ~m1435_5 | +| ir.cpp:1437:5:1437:37 | CallTarget | func:r1437_2 | +| ir.cpp:1437:5:1437:37 | ChiPartial | partial:m1437_4 | +| ir.cpp:1437:5:1437:37 | ChiTotal | total:m1435_10 | +| ir.cpp:1437:5:1437:37 | SideEffect | ~m1435_10 | +| ir.cpp:1437:5:1437:37 | StoreValue | r1437_3 | +| ir.cpp:1437:5:1437:39 | Address | &:r1437_1 | +| ir.cpp:1438:1:1438:1 | Address | &:r1438_2 | +| ir.cpp:1438:1:1438:1 | Address | &:r1438_2 | +| ir.cpp:1438:1:1438:1 | Address | &:r1438_10 | +| ir.cpp:1438:1:1438:1 | Address | &:r1438_10 | +| ir.cpp:1438:1:1438:1 | Arg(this) | this:r1438_2 | +| ir.cpp:1438:1:1438:1 | Arg(this) | this:r1438_10 | +| ir.cpp:1438:1:1438:1 | CallTarget | func:r1438_3 | +| ir.cpp:1438:1:1438:1 | CallTarget | func:r1438_11 | +| ir.cpp:1438:1:1438:1 | ChiPartial | partial:m1438_5 | +| ir.cpp:1438:1:1438:1 | ChiPartial | partial:m1438_8 | +| ir.cpp:1438:1:1438:1 | ChiPartial | partial:m1438_13 | +| ir.cpp:1438:1:1438:1 | ChiPartial | partial:m1438_16 | +| ir.cpp:1438:1:1438:1 | ChiTotal | total:m1429_6 | +| ir.cpp:1438:1:1438:1 | ChiTotal | total:m1431_2 | +| ir.cpp:1438:1:1438:1 | ChiTotal | total:m1437_5 | +| ir.cpp:1438:1:1438:1 | ChiTotal | total:m1438_6 | +| ir.cpp:1438:1:1438:1 | SideEffect | m1429_6 | +| ir.cpp:1438:1:1438:1 | SideEffect | m1431_2 | +| ir.cpp:1438:1:1438:1 | SideEffect | ~m1437_5 | +| ir.cpp:1438:1:1438:1 | SideEffect | ~m1438_6 | +| ir.cpp:1440:6:1440:31 | ChiPartial | partial:m1440_3 | +| ir.cpp:1440:6:1440:31 | ChiTotal | total:m1440_2 | +| ir.cpp:1440:6:1440:31 | SideEffect | ~m1450_6 | +| ir.cpp:1441:22:1441:22 | Address | &:r1441_1 | +| ir.cpp:1441:26:1441:54 | CallTarget | func:r1441_2 | +| ir.cpp:1441:26:1441:54 | ChiPartial | partial:m1441_4 | +| ir.cpp:1441:26:1441:54 | ChiTotal | total:m1440_4 | +| ir.cpp:1441:26:1441:54 | SideEffect | ~m1440_4 | +| ir.cpp:1441:26:1441:54 | StoreValue | r1441_3 | +| ir.cpp:1442:29:1442:30 | Address | &:r1442_1 | +| ir.cpp:1442:34:1442:62 | CallTarget | func:r1442_3 | +| ir.cpp:1442:34:1442:62 | ChiPartial | partial:m1442_5 | +| ir.cpp:1442:34:1442:62 | ChiTotal | total:m1441_5 | +| ir.cpp:1442:34:1442:62 | SideEffect | ~m1441_5 | +| ir.cpp:1442:34:1442:62 | StoreValue | r1442_4 | +| ir.cpp:1442:34:1442:64 | Address | &:r1442_2 | +| ir.cpp:1442:34:1442:64 | StoreValue | r1442_9 | +| ir.cpp:1442:34:1442:64 | Unary | r1442_2 | +| ir.cpp:1442:34:1442:64 | Unary | r1442_8 | +| ir.cpp:1443:22:1443:23 | Address | &:r1443_1 | +| ir.cpp:1443:22:1443:23 | Address | &:r1443_1 | +| ir.cpp:1443:22:1443:23 | Arg(this) | this:r1443_1 | +| ir.cpp:1443:22:1443:23 | CallTarget | func:r1443_3 | +| ir.cpp:1443:22:1443:23 | ChiPartial | partial:m1443_5 | +| ir.cpp:1443:22:1443:23 | ChiPartial | partial:m1443_7 | +| ir.cpp:1443:22:1443:23 | ChiTotal | total:m1442_6 | +| ir.cpp:1443:22:1443:23 | ChiTotal | total:m1443_2 | +| ir.cpp:1443:22:1443:23 | SideEffect | ~m1442_6 | +| ir.cpp:1444:5:1444:13 | CallTarget | func:r1444_1 | +| ir.cpp:1444:5:1444:13 | ChiPartial | partial:m1444_6 | +| ir.cpp:1444:5:1444:13 | ChiTotal | total:m1443_6 | +| ir.cpp:1444:5:1444:13 | SideEffect | ~m1443_6 | +| ir.cpp:1444:15:1444:15 | Address | &:r1444_4 | +| ir.cpp:1444:15:1444:15 | Arg(0) | 0:r1444_4 | +| ir.cpp:1444:15:1444:15 | SideEffect | ~m1441_6 | +| ir.cpp:1444:15:1444:15 | Unary | r1444_2 | +| ir.cpp:1444:15:1444:15 | Unary | r1444_3 | +| ir.cpp:1445:5:1445:15 | CallTarget | func:r1445_1 | +| ir.cpp:1445:5:1445:15 | ChiPartial | partial:m1445_16 | +| ir.cpp:1445:5:1445:15 | ChiTotal | total:m1445_10 | +| ir.cpp:1445:5:1445:15 | SideEffect | ~m1445_10 | +| ir.cpp:1445:17:1445:17 | Address | &:r1445_2 | +| ir.cpp:1445:17:1445:17 | Address | &:r1445_2 | +| ir.cpp:1445:17:1445:17 | Address | &:r1445_2 | +| ir.cpp:1445:17:1445:17 | Address | &:r1445_7 | +| ir.cpp:1445:17:1445:17 | Arg(0) | 0:r1445_7 | +| ir.cpp:1445:17:1445:17 | Arg(0) | 0:r1445_14 | +| ir.cpp:1445:17:1445:17 | Arg(this) | this:r1445_2 | +| ir.cpp:1445:17:1445:17 | CallTarget | func:r1445_4 | +| ir.cpp:1445:17:1445:17 | ChiPartial | partial:m1445_9 | +| ir.cpp:1445:17:1445:17 | ChiPartial | partial:m1445_12 | +| ir.cpp:1445:17:1445:17 | ChiTotal | total:m1444_7 | +| ir.cpp:1445:17:1445:17 | ChiTotal | total:m1445_3 | +| ir.cpp:1445:17:1445:17 | Load | m1445_13 | +| ir.cpp:1445:17:1445:17 | SideEffect | ~m1441_6 | +| ir.cpp:1445:17:1445:17 | SideEffect | ~m1444_7 | +| ir.cpp:1445:17:1445:17 | Unary | r1445_5 | +| ir.cpp:1445:17:1445:17 | Unary | r1445_6 | +| ir.cpp:1446:5:1446:22 | Address | &:r1446_1 | +| ir.cpp:1446:5:1446:22 | Address | &:r1446_1 | +| ir.cpp:1446:5:1446:22 | Address | &:r1446_1 | +| ir.cpp:1446:5:1446:22 | Address | &:r1446_1 | +| ir.cpp:1446:5:1446:22 | Arg(this) | this:r1446_1 | +| ir.cpp:1446:5:1446:22 | Arg(this) | this:r1446_1 | +| ir.cpp:1446:5:1446:22 | CallTarget | func:r1446_3 | +| ir.cpp:1446:5:1446:22 | ChiPartial | partial:m1446_5 | +| ir.cpp:1446:5:1446:22 | ChiPartial | partial:m1446_7 | +| ir.cpp:1446:5:1446:22 | ChiPartial | partial:m1446_14 | +| ir.cpp:1446:5:1446:22 | ChiTotal | total:m1445_17 | +| ir.cpp:1446:5:1446:22 | ChiTotal | total:m1446_2 | +| ir.cpp:1446:5:1446:22 | ChiTotal | total:m1446_8 | +| ir.cpp:1446:5:1446:22 | SideEffect | m1446_8 | +| ir.cpp:1446:5:1446:22 | SideEffect | ~m1445_17 | +| ir.cpp:1446:24:1446:29 | CallTarget | func:r1446_9 | +| ir.cpp:1446:24:1446:29 | ChiPartial | partial:m1446_11 | +| ir.cpp:1446:24:1446:29 | ChiTotal | total:m1446_6 | +| ir.cpp:1446:24:1446:29 | SideEffect | ~m1446_6 | +| ir.cpp:1447:5:1447:33 | CallTarget | func:r1447_2 | +| ir.cpp:1447:5:1447:33 | ChiPartial | partial:m1447_4 | +| ir.cpp:1447:5:1447:33 | ChiTotal | total:m1446_12 | +| ir.cpp:1447:5:1447:33 | SideEffect | ~m1446_12 | +| ir.cpp:1447:5:1447:33 | StoreValue | r1447_3 | +| ir.cpp:1447:5:1447:35 | Address | &:r1447_1 | +| ir.cpp:1447:5:1447:35 | Address | &:r1447_1 | +| ir.cpp:1447:5:1447:35 | Address | &:r1447_1 | +| ir.cpp:1447:5:1447:35 | Arg(this) | this:r1447_1 | +| ir.cpp:1447:5:1447:35 | ChiPartial | partial:m1447_12 | +| ir.cpp:1447:5:1447:35 | ChiTotal | total:m1447_6 | +| ir.cpp:1447:5:1447:35 | SideEffect | m1447_6 | +| ir.cpp:1447:37:1447:42 | CallTarget | func:r1447_7 | +| ir.cpp:1447:37:1447:42 | ChiPartial | partial:m1447_9 | +| ir.cpp:1447:37:1447:42 | ChiTotal | total:m1447_5 | +| ir.cpp:1447:37:1447:42 | SideEffect | ~m1447_5 | +| ir.cpp:1448:5:1448:38 | CallTarget | func:r1448_2 | +| ir.cpp:1448:5:1448:38 | ChiPartial | partial:m1448_4 | +| ir.cpp:1448:5:1448:38 | ChiTotal | total:m1447_10 | +| ir.cpp:1448:5:1448:38 | SideEffect | ~m1447_10 | +| ir.cpp:1448:5:1448:38 | StoreValue | r1448_3 | +| ir.cpp:1448:5:1448:40 | Address | &:r1448_1 | +| ir.cpp:1450:9:1450:9 | Address | &:r1450_1 | +| ir.cpp:1450:13:1450:41 | CallTarget | func:r1450_3 | +| ir.cpp:1450:13:1450:41 | ChiPartial | partial:m1450_5 | +| ir.cpp:1450:13:1450:41 | ChiTotal | total:m1448_5 | +| ir.cpp:1450:13:1450:41 | SideEffect | ~m1448_5 | +| ir.cpp:1450:13:1450:41 | StoreValue | r1450_4 | +| ir.cpp:1450:13:1450:43 | Address | &:r1450_2 | +| ir.cpp:1450:13:1450:43 | Unary | r1450_2 | +| ir.cpp:1450:45:1450:45 | Address | &:r1450_8 | +| ir.cpp:1450:45:1450:45 | Load | ~m1450_7 | +| ir.cpp:1450:45:1450:45 | StoreValue | r1450_9 | +| ir.cpp:1453:6:1453:20 | ChiPartial | partial:m1453_3 | +| ir.cpp:1453:6:1453:20 | ChiTotal | total:m1453_2 | +| ir.cpp:1453:6:1453:20 | SideEffect | ~m1462_4 | +| ir.cpp:1454:11:1454:11 | Address | &:r1454_1 | +| ir.cpp:1454:15:1454:32 | CallTarget | func:r1454_2 | +| ir.cpp:1454:15:1454:32 | ChiPartial | partial:m1454_4 | +| ir.cpp:1454:15:1454:32 | ChiTotal | total:m1453_4 | +| ir.cpp:1454:15:1454:32 | SideEffect | ~m1453_4 | +| ir.cpp:1454:15:1454:32 | StoreValue | r1454_3 | +| ir.cpp:1455:18:1455:19 | Address | &:r1455_1 | +| ir.cpp:1455:23:1455:40 | CallTarget | func:r1455_3 | +| ir.cpp:1455:23:1455:40 | ChiPartial | partial:m1455_5 | +| ir.cpp:1455:23:1455:40 | ChiTotal | total:m1454_5 | +| ir.cpp:1455:23:1455:40 | SideEffect | ~m1454_5 | +| ir.cpp:1455:23:1455:40 | StoreValue | r1455_4 | +| ir.cpp:1455:23:1455:42 | Address | &:r1455_2 | +| ir.cpp:1455:23:1455:42 | StoreValue | r1455_9 | +| ir.cpp:1455:23:1455:42 | Unary | r1455_2 | +| ir.cpp:1455:23:1455:42 | Unary | r1455_8 | +| ir.cpp:1457:5:1457:13 | CallTarget | func:r1457_1 | +| ir.cpp:1457:5:1457:13 | ChiPartial | partial:m1457_6 | +| ir.cpp:1457:5:1457:13 | ChiTotal | total:m1455_6 | +| ir.cpp:1457:5:1457:13 | SideEffect | ~m1455_6 | +| ir.cpp:1457:15:1457:15 | Address | &:r1457_4 | +| ir.cpp:1457:15:1457:15 | Arg(0) | 0:r1457_4 | +| ir.cpp:1457:15:1457:15 | SideEffect | ~m1454_6 | +| ir.cpp:1457:15:1457:15 | Unary | r1457_2 | +| ir.cpp:1457:15:1457:15 | Unary | r1457_3 | +| ir.cpp:1458:5:1458:15 | CallTarget | func:r1458_1 | +| ir.cpp:1458:5:1458:15 | ChiPartial | partial:m1458_5 | +| ir.cpp:1458:5:1458:15 | ChiTotal | total:m1457_7 | +| ir.cpp:1458:5:1458:15 | SideEffect | ~m1457_7 | +| ir.cpp:1458:17:1458:17 | Address | &:r1458_2 | +| ir.cpp:1458:17:1458:17 | Arg(0) | 0:r1458_3 | +| ir.cpp:1458:17:1458:17 | Load | m1454_6 | +| ir.cpp:1460:9:1460:9 | Address | &:r1460_1 | +| ir.cpp:1460:13:1460:30 | Address | &:r1460_6 | +| ir.cpp:1460:13:1460:30 | CallTarget | func:r1460_2 | +| ir.cpp:1460:13:1460:30 | ChiPartial | partial:m1460_4 | +| ir.cpp:1460:13:1460:30 | ChiTotal | total:m1458_6 | +| ir.cpp:1460:13:1460:30 | SideEffect | ~m1458_6 | +| ir.cpp:1460:13:1460:30 | StoreValue | r1460_3 | +| ir.cpp:1460:13:1460:30 | Unary | r1460_6 | +| ir.cpp:1460:34:1460:34 | Address | &:r1460_8 | +| ir.cpp:1460:34:1460:34 | Load | ~m1460_7 | +| ir.cpp:1460:34:1460:34 | StoreValue | r1460_9 | +| ir.cpp:1462:5:1462:27 | CallTarget | func:r1462_1 | +| ir.cpp:1462:5:1462:27 | ChiPartial | partial:m1462_3 | +| ir.cpp:1462:5:1462:27 | ChiTotal | total:m1460_5 | +| ir.cpp:1462:5:1462:27 | SideEffect | ~m1460_5 | +| ir.cpp:1470:6:1470:29 | ChiPartial | partial:m1470_3 | +| ir.cpp:1470:6:1470:29 | ChiTotal | total:m1470_2 | +| ir.cpp:1470:6:1470:29 | SideEffect | ~m1475_5 | +| ir.cpp:1471:16:1471:17 | Address | &:r1471_1 | +| ir.cpp:1471:21:1471:46 | Address | &:r1471_6 | +| ir.cpp:1471:21:1471:46 | CallTarget | func:r1471_2 | +| ir.cpp:1471:21:1471:46 | ChiPartial | partial:m1471_4 | +| ir.cpp:1471:21:1471:46 | ChiTotal | total:m1470_4 | +| ir.cpp:1471:21:1471:46 | SideEffect | ~m1470_4 | +| ir.cpp:1471:21:1471:46 | StoreValue | r1471_3 | +| ir.cpp:1471:21:1471:46 | Unary | r1471_6 | +| ir.cpp:1471:21:1471:50 | StoreValue | r1471_12 | +| ir.cpp:1471:21:1471:50 | Unary | r1471_10 | +| ir.cpp:1471:21:1471:50 | Unary | r1471_11 | +| ir.cpp:1471:50:1471:50 | Address | &:r1471_8 | +| ir.cpp:1471:50:1471:50 | Load | ~m1471_7 | +| ir.cpp:1471:50:1471:50 | Unary | r1471_9 | +| ir.cpp:1472:9:1472:9 | Address | &:r1472_1 | +| ir.cpp:1472:13:1472:38 | Address | &:r1472_6 | +| ir.cpp:1472:13:1472:38 | CallTarget | func:r1472_2 | +| ir.cpp:1472:13:1472:38 | ChiPartial | partial:m1472_4 | +| ir.cpp:1472:13:1472:38 | ChiTotal | total:m1471_5 | +| ir.cpp:1472:13:1472:38 | SideEffect | ~m1471_5 | +| ir.cpp:1472:13:1472:38 | StoreValue | r1472_3 | +| ir.cpp:1472:13:1472:38 | Unary | r1472_6 | +| ir.cpp:1472:13:1472:42 | Load | ~m1472_5 | +| ir.cpp:1472:13:1472:42 | StoreValue | r1472_10 | +| ir.cpp:1472:42:1472:42 | Address | &:r1472_8 | +| ir.cpp:1472:42:1472:42 | Address | &:r1472_9 | +| ir.cpp:1472:42:1472:42 | Load | ~m1472_7 | +| ir.cpp:1474:18:1474:19 | Address | &:r1474_1 | +| ir.cpp:1474:23:1474:48 | Address | &:r1474_6 | +| ir.cpp:1474:23:1474:48 | CallTarget | func:r1474_2 | +| ir.cpp:1474:23:1474:48 | ChiPartial | partial:m1474_4 | +| ir.cpp:1474:23:1474:48 | ChiTotal | total:m1472_5 | +| ir.cpp:1474:23:1474:48 | SideEffect | ~m1472_5 | +| ir.cpp:1474:23:1474:48 | StoreValue | r1474_3 | +| ir.cpp:1474:23:1474:48 | Unary | r1474_6 | +| ir.cpp:1474:23:1474:52 | Left | r1474_9 | +| ir.cpp:1474:23:1474:55 | StoreValue | r1474_13 | +| ir.cpp:1474:23:1474:55 | Unary | r1474_11 | +| ir.cpp:1474:23:1474:55 | Unary | r1474_12 | +| ir.cpp:1474:52:1474:52 | Unary | r1474_8 | +| ir.cpp:1474:54:1474:54 | Right | r1474_10 | +| ir.cpp:1475:11:1475:11 | Address | &:r1475_1 | +| ir.cpp:1475:15:1475:40 | Address | &:r1475_6 | +| ir.cpp:1475:15:1475:40 | CallTarget | func:r1475_2 | +| ir.cpp:1475:15:1475:40 | ChiPartial | partial:m1475_4 | +| ir.cpp:1475:15:1475:40 | ChiTotal | total:m1474_5 | +| ir.cpp:1475:15:1475:40 | SideEffect | ~m1474_5 | +| ir.cpp:1475:15:1475:40 | StoreValue | r1475_3 | +| ir.cpp:1475:15:1475:40 | Unary | r1475_6 | +| ir.cpp:1475:15:1475:44 | Left | r1475_9 | +| ir.cpp:1475:15:1475:47 | Address | &:r1475_11 | +| ir.cpp:1475:15:1475:47 | Load | ~m1475_7 | +| ir.cpp:1475:15:1475:47 | StoreValue | r1475_12 | +| ir.cpp:1475:44:1475:44 | Unary | r1475_8 | +| ir.cpp:1475:46:1475:46 | Right | r1475_10 | +| ir.cpp:1492:6:1492:24 | ChiPartial | partial:m1492_3 | +| ir.cpp:1492:6:1492:24 | ChiTotal | total:m1492_2 | +| ir.cpp:1492:6:1492:24 | SideEffect | ~m1496_10 | +| ir.cpp:1493:14:1493:14 | Address | &:r1493_1 | +| ir.cpp:1493:18:1493:40 | CallTarget | func:r1493_2 | +| ir.cpp:1493:18:1493:40 | ChiPartial | partial:m1493_4 | +| ir.cpp:1493:18:1493:40 | ChiTotal | total:m1492_4 | +| ir.cpp:1493:18:1493:40 | SideEffect | ~m1492_4 | +| ir.cpp:1493:18:1493:40 | StoreValue | r1493_3 | +| ir.cpp:1494:5:1494:5 | Address | &:r1494_10 | +| ir.cpp:1494:9:1494:36 | Address | &:r1494_1 | +| ir.cpp:1494:9:1494:36 | Address | &:r1494_8 | +| ir.cpp:1494:9:1494:36 | Load | ~m1494_6 | +| ir.cpp:1494:9:1494:36 | StoreValue | r1494_9 | +| ir.cpp:1494:9:1494:36 | Unary | r1494_1 | +| ir.cpp:1494:9:1494:36 | Unary | r1494_7 | +| ir.cpp:1494:10:1494:33 | CallTarget | func:r1494_2 | +| ir.cpp:1494:10:1494:33 | ChiPartial | partial:m1494_4 | +| ir.cpp:1494:10:1494:33 | ChiTotal | total:m1493_5 | +| ir.cpp:1494:10:1494:33 | SideEffect | ~m1493_5 | +| ir.cpp:1494:10:1494:33 | StoreValue | r1494_3 | +| ir.cpp:1495:9:1495:9 | Address | &:r1495_1 | +| ir.cpp:1495:13:1495:36 | CallTarget | func:r1495_2 | +| ir.cpp:1495:13:1495:36 | ChiPartial | partial:m1495_4 | +| ir.cpp:1495:13:1495:36 | ChiTotal | total:m1494_5 | +| ir.cpp:1495:13:1495:36 | SideEffect | ~m1494_5 | +| ir.cpp:1495:13:1495:36 | StoreValue | r1495_3 | +| ir.cpp:1495:40:1495:40 | Address | &:r1495_7 | +| ir.cpp:1495:40:1495:40 | Load | ~m1495_6 | +| ir.cpp:1495:40:1495:40 | StoreValue | r1495_8 | +| ir.cpp:1496:11:1496:11 | Address | &:r1496_1 | +| ir.cpp:1496:16:1496:39 | CallTarget | func:r1496_2 | +| ir.cpp:1496:16:1496:39 | ChiPartial | partial:m1496_4 | +| ir.cpp:1496:16:1496:39 | ChiTotal | total:m1495_5 | +| ir.cpp:1496:16:1496:39 | SideEffect | ~m1495_5 | +| ir.cpp:1496:16:1496:39 | StoreValue | r1496_3 | +| ir.cpp:1496:44:1496:44 | Arg(this) | this:r0_11 | +| ir.cpp:1496:44:1496:44 | CallTarget | func:r1496_7 | +| ir.cpp:1496:44:1496:44 | ChiPartial | partial:m1496_9 | +| ir.cpp:1496:44:1496:44 | ChiTotal | total:m1496_5 | +| ir.cpp:1496:44:1496:44 | SideEffect | ~m1496_5 | +| ir.cpp:1496:44:1496:44 | StoreValue | r1496_8 | +| ir.cpp:1500:3:1500:21 | Address | &:r1500_5 | +| ir.cpp:1500:3:1500:21 | Address | &:r1500_5 | +| ir.cpp:1500:3:1500:21 | Address | &:r1500_7 | +| ir.cpp:1500:3:1500:21 | Address | &:r1500_7 | +| ir.cpp:1500:3:1500:21 | ChiPartial | partial:m1500_3 | +| ir.cpp:1500:3:1500:21 | ChiTotal | total:m1500_2 | +| ir.cpp:1500:3:1500:21 | Load | m1500_6 | +| ir.cpp:1500:3:1500:21 | SideEffect | m1500_3 | +| ir.cpp:1500:3:1500:21 | SideEffect | m1500_8 | +| ir.cpp:1506:3:1506:20 | Address | &:r1506_5 | +| ir.cpp:1506:3:1506:20 | Address | &:r1506_5 | +| ir.cpp:1506:3:1506:20 | Address | &:r1506_7 | +| ir.cpp:1506:3:1506:20 | Address | &:r1506_7 | +| ir.cpp:1506:3:1506:20 | ChiPartial | partial:m1506_3 | +| ir.cpp:1506:3:1506:20 | ChiTotal | total:m1506_2 | +| ir.cpp:1506:3:1506:20 | Load | m1506_6 | +| ir.cpp:1506:3:1506:20 | SideEffect | m1506_3 | +| ir.cpp:1506:3:1506:20 | SideEffect | m1507_6 | +| ir.cpp:1506:3:1506:20 | Unary | m1506_6 | +| ir.cpp:1506:26:1506:30 | Address | &:r1506_9 | +| ir.cpp:1506:26:1506:30 | ChiPartial | partial:m1506_11 | +| ir.cpp:1506:26:1506:30 | ChiTotal | total:m1506_8 | +| ir.cpp:1506:26:1506:30 | StoreValue | r1506_10 | +| ir.cpp:1507:5:1507:5 | Address | &:r1507_2 | +| ir.cpp:1507:5:1507:5 | Address | &:r1507_4 | +| ir.cpp:1507:5:1507:5 | Load | m1506_6 | +| ir.cpp:1507:5:1507:5 | Unary | r1507_3 | +| ir.cpp:1507:5:1507:9 | ChiPartial | partial:m1507_5 | +| ir.cpp:1507:5:1507:9 | ChiTotal | total:m1506_12 | +| ir.cpp:1507:9:1507:9 | StoreValue | r1507_1 | +| ir.cpp:1511:6:1511:29 | ChiPartial | partial:m1511_3 | +| ir.cpp:1511:6:1511:29 | ChiTotal | total:m1511_2 | +| ir.cpp:1511:6:1511:29 | SideEffect | m1511_3 | +| ir.cpp:1512:9:1512:10 | Address | &:r1512_1 | +| ir.cpp:1512:9:1512:10 | Left | r1512_1 | +| ir.cpp:1512:9:1512:10 | Left | r1512_1 | +| ir.cpp:1512:16:1512:22 | Address | &:r1512_4 | +| ir.cpp:1512:16:1512:22 | Address | &:r1512_9 | +| ir.cpp:1512:16:1512:22 | Right | r1512_3 | +| ir.cpp:1512:16:1512:22 | Right | r1512_8 | +| ir.cpp:1512:18:1512:18 | ChiPartial | partial:m1512_6 | +| ir.cpp:1512:18:1512:18 | ChiTotal | total:m1512_2 | +| ir.cpp:1512:18:1512:18 | StoreValue | r1512_5 | +| ir.cpp:1512:21:1512:21 | ChiPartial | partial:m1512_11 | +| ir.cpp:1512:21:1512:21 | ChiTotal | total:m1512_7 | +| ir.cpp:1512:21:1512:21 | StoreValue | r1512_10 | +| ir.cpp:1515:15:1515:15 | Address | &:r1515_1 | +| ir.cpp:1515:16:1515:16 | Address | &:r1515_5 | +| ir.cpp:1515:20:1515:20 | Address | &:r1515_6 | +| ir.cpp:1515:26:1515:27 | StoreValue | r1515_3 | +| ir.cpp:1515:26:1515:27 | Unary | r1515_2 | +| ir.cpp:1516:9:1516:10 | Address | &:r1516_2 | +| ir.cpp:1516:9:1516:10 | Address | &:r1516_3 | +| ir.cpp:1516:9:1516:10 | Load | m0_14 | +| ir.cpp:1516:9:1516:14 | ChiPartial | partial:m1516_4 | +| ir.cpp:1516:9:1516:14 | ChiTotal | total:m1512_12 | +| ir.cpp:1516:14:1516:14 | StoreValue | r1516_1 | +| ir.cpp:1517:14:1517:16 | Address | &:r1517_1 | +| ir.cpp:1517:20:1517:21 | Address | &:r1517_2 | +| ir.cpp:1517:20:1517:21 | Load | m0_14 | +| ir.cpp:1517:20:1517:21 | StoreValue | r1517_4 | +| ir.cpp:1517:20:1517:21 | Unary | r1517_3 | +| ir.cpp:1518:13:1518:13 | Address | &:r1518_1 | +| ir.cpp:1518:17:1518:18 | Address | &:r1518_2 | +| ir.cpp:1518:17:1518:18 | Address | &:r1518_3 | +| ir.cpp:1518:17:1518:18 | Load | m0_14 | +| ir.cpp:1518:17:1518:18 | Load | m1516_4 | +| ir.cpp:1518:17:1518:18 | StoreValue | r1518_4 | +| ir.cpp:1522:15:1522:36 | Address | &:r1522_1 | +| ir.cpp:1522:40:1522:41 | StoreValue | r1522_3 | +| ir.cpp:1522:40:1522:41 | Unary | r1522_2 | +| ir.cpp:1523:15:1523:16 | Address | &:r1523_1 | +| ir.cpp:1523:20:1523:41 | Address | &:r1523_2 | +| ir.cpp:1523:20:1523:41 | Left | r1523_5 | +| ir.cpp:1523:20:1523:41 | Load | m1522_4 | +| ir.cpp:1523:20:1523:41 | Unary | r1523_3 | +| ir.cpp:1523:20:1523:41 | Unary | r1523_4 | +| ir.cpp:1523:20:1523:44 | StoreValue | r1523_8 | +| ir.cpp:1523:20:1523:44 | Unary | r1523_7 | +| ir.cpp:1523:43:1523:43 | Right | r1523_6 | +| ir.cpp:1524:15:1524:16 | Address | &:r1524_1 | +| ir.cpp:1524:20:1524:41 | Address | &:r1524_2 | +| ir.cpp:1524:20:1524:41 | Left | r1524_5 | +| ir.cpp:1524:20:1524:41 | Load | m1522_4 | +| ir.cpp:1524:20:1524:41 | Unary | r1524_3 | +| ir.cpp:1524:20:1524:41 | Unary | r1524_4 | +| ir.cpp:1524:20:1524:44 | StoreValue | r1524_8 | +| ir.cpp:1524:20:1524:44 | Unary | r1524_7 | +| ir.cpp:1524:43:1524:43 | Right | r1524_6 | +| ir.cpp:1525:9:1525:10 | Address | &:r1525_2 | +| ir.cpp:1525:9:1525:10 | Address | &:r1525_4 | +| ir.cpp:1525:9:1525:10 | Load | m1524_9 | +| ir.cpp:1525:9:1525:10 | Unary | r1525_3 | +| ir.cpp:1525:9:1525:14 | ChiPartial | partial:m1525_5 | +| ir.cpp:1525:9:1525:14 | ChiTotal | total:m1516_5 | +| ir.cpp:1525:14:1525:14 | StoreValue | r1525_1 | +| ir.cpp:1526:14:1526:16 | Address | &:r1526_1 | +| ir.cpp:1526:20:1526:21 | Address | &:r1526_2 | +| ir.cpp:1526:20:1526:21 | Load | m1524_9 | +| ir.cpp:1526:20:1526:21 | StoreValue | r1526_5 | +| ir.cpp:1526:20:1526:21 | Unary | r1526_3 | +| ir.cpp:1526:20:1526:21 | Unary | r1526_4 | +| ir.cpp:1527:13:1527:13 | Address | &:r1527_1 | +| ir.cpp:1527:17:1527:18 | Address | &:r1527_2 | +| ir.cpp:1527:17:1527:18 | Address | &:r1527_3 | +| ir.cpp:1527:17:1527:18 | Load | m1524_9 | +| ir.cpp:1527:17:1527:18 | Load | m1525_5 | +| ir.cpp:1527:17:1527:18 | StoreValue | r1527_4 | +| ir.cpp:1531:8:1531:8 | Address | &:r1531_5 | +| ir.cpp:1531:8:1531:8 | Address | &:r1531_5 | +| ir.cpp:1531:8:1531:8 | Address | &:r1531_7 | +| ir.cpp:1531:8:1531:8 | Address | &:r1531_7 | +| ir.cpp:1531:8:1531:8 | ChiPartial | partial:m1531_3 | +| ir.cpp:1531:8:1531:8 | ChiTotal | total:m1531_2 | +| ir.cpp:1531:8:1531:8 | Load | m1531_6 | +| ir.cpp:1531:8:1531:8 | SideEffect | m1531_3 | +| ir.cpp:1531:8:1531:8 | SideEffect | m1531_8 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_5 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_5 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_5 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_5 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_7 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_7 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_7 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_7 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_9 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_10 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_13 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_17 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_18 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_21 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_25 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_26 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_29 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_33 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_34 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_37 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_41 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_42 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_45 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_49 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_50 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_53 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_57 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_58 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_61 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_65 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_66 | +| ir.cpp:1535:8:1535:8 | Address | &:r1535_69 | +| ir.cpp:1535:8:1535:8 | ChiPartial | partial:m1535_3 | +| ir.cpp:1535:8:1535:8 | ChiPartial | partial:m1535_3 | +| ir.cpp:1535:8:1535:8 | ChiPartial | partial:m1535_15 | +| ir.cpp:1535:8:1535:8 | ChiPartial | partial:m1535_23 | +| ir.cpp:1535:8:1535:8 | ChiPartial | partial:m1535_31 | +| ir.cpp:1535:8:1535:8 | ChiPartial | partial:m1535_39 | +| ir.cpp:1535:8:1535:8 | ChiPartial | partial:m1535_47 | +| ir.cpp:1535:8:1535:8 | ChiPartial | partial:m1535_55 | +| ir.cpp:1535:8:1535:8 | ChiPartial | partial:m1535_63 | +| ir.cpp:1535:8:1535:8 | ChiPartial | partial:m1535_71 | +| ir.cpp:1535:8:1535:8 | ChiTotal | total:m1535_2 | +| ir.cpp:1535:8:1535:8 | ChiTotal | total:m1535_2 | +| ir.cpp:1535:8:1535:8 | ChiTotal | total:m1535_8 | +| ir.cpp:1535:8:1535:8 | ChiTotal | total:m1535_16 | +| ir.cpp:1535:8:1535:8 | ChiTotal | total:m1535_24 | +| ir.cpp:1535:8:1535:8 | ChiTotal | total:m1535_32 | +| ir.cpp:1535:8:1535:8 | ChiTotal | total:m1535_40 | +| ir.cpp:1535:8:1535:8 | ChiTotal | total:m1535_48 | +| ir.cpp:1535:8:1535:8 | ChiTotal | total:m1535_56 | +| ir.cpp:1535:8:1535:8 | ChiTotal | total:m1535_64 | +| ir.cpp:1535:8:1535:8 | Load | m0_2 | +| ir.cpp:1535:8:1535:8 | Load | m0_2 | +| ir.cpp:1535:8:1535:8 | Load | m0_2 | +| ir.cpp:1535:8:1535:8 | Load | m0_2 | +| ir.cpp:1535:8:1535:8 | Load | m0_2 | +| ir.cpp:1535:8:1535:8 | Load | m0_2 | +| ir.cpp:1535:8:1535:8 | Load | m0_2 | +| ir.cpp:1535:8:1535:8 | Load | m0_2 | +| ir.cpp:1535:8:1535:8 | Load | m1535_6 | +| ir.cpp:1535:8:1535:8 | Load | m1535_6 | +| ir.cpp:1535:8:1535:8 | Load | ~m0_4 | +| ir.cpp:1535:8:1535:8 | Load | ~m0_4 | +| ir.cpp:1535:8:1535:8 | Load | ~m0_4 | +| ir.cpp:1535:8:1535:8 | Load | ~m0_4 | +| ir.cpp:1535:8:1535:8 | Load | ~m0_4 | +| ir.cpp:1535:8:1535:8 | Load | ~m0_4 | +| ir.cpp:1535:8:1535:8 | Load | ~m0_4 | +| ir.cpp:1535:8:1535:8 | Load | ~m0_4 | +| ir.cpp:1535:8:1535:8 | SideEffect | m1535_3 | +| ir.cpp:1535:8:1535:8 | SideEffect | m1535_3 | +| ir.cpp:1535:8:1535:8 | SideEffect | m1535_8 | +| ir.cpp:1535:8:1535:8 | SideEffect | m1535_72 | +| ir.cpp:1535:8:1535:8 | StoreValue | r1535_14 | +| ir.cpp:1535:8:1535:8 | StoreValue | r1535_22 | +| ir.cpp:1535:8:1535:8 | StoreValue | r1535_30 | +| ir.cpp:1535:8:1535:8 | StoreValue | r1535_38 | +| ir.cpp:1535:8:1535:8 | StoreValue | r1535_46 | +| ir.cpp:1535:8:1535:8 | StoreValue | r1535_54 | +| ir.cpp:1535:8:1535:8 | StoreValue | r1535_62 | +| ir.cpp:1535:8:1535:8 | StoreValue | r1535_70 | +| ir.cpp:1535:8:1535:8 | Unary | m1535_6 | +| ir.cpp:1535:8:1535:8 | Unary | m1535_6 | +| ir.cpp:1535:8:1535:8 | Unary | m1535_6 | +| ir.cpp:1535:8:1535:8 | Unary | m1535_6 | +| ir.cpp:1535:8:1535:8 | Unary | m1535_6 | +| ir.cpp:1535:8:1535:8 | Unary | m1535_6 | +| ir.cpp:1535:8:1535:8 | Unary | m1535_6 | +| ir.cpp:1535:8:1535:8 | Unary | m1535_6 | +| ir.cpp:1535:8:1535:8 | Unary | r1535_11 | +| ir.cpp:1535:8:1535:8 | Unary | r1535_12 | +| ir.cpp:1535:8:1535:8 | Unary | r1535_19 | +| ir.cpp:1535:8:1535:8 | Unary | r1535_20 | +| ir.cpp:1535:8:1535:8 | Unary | r1535_27 | +| ir.cpp:1535:8:1535:8 | Unary | r1535_28 | +| ir.cpp:1535:8:1535:8 | Unary | r1535_35 | +| ir.cpp:1535:8:1535:8 | Unary | r1535_36 | +| ir.cpp:1535:8:1535:8 | Unary | r1535_43 | +| ir.cpp:1535:8:1535:8 | Unary | r1535_44 | +| ir.cpp:1535:8:1535:8 | Unary | r1535_51 | +| ir.cpp:1535:8:1535:8 | Unary | r1535_52 | +| ir.cpp:1535:8:1535:8 | Unary | r1535_59 | +| ir.cpp:1535:8:1535:8 | Unary | r1535_60 | +| ir.cpp:1535:8:1535:8 | Unary | r1535_67 | +| ir.cpp:1535:8:1535:8 | Unary | r1535_68 | +| ir.cpp:1548:6:1548:35 | ChiPartial | partial:m1548_3 | +| ir.cpp:1548:6:1548:35 | ChiTotal | total:m1548_2 | +| ir.cpp:1548:6:1548:35 | SideEffect | ~m1574_7 | +| ir.cpp:1549:39:1549:39 | Address | &:r1549_1 | +| ir.cpp:1549:39:1549:39 | Address | &:r1549_1 | +| ir.cpp:1549:39:1549:39 | Arg(this) | this:r1549_1 | +| ir.cpp:1549:39:1549:39 | CallTarget | func:r1549_3 | +| ir.cpp:1549:39:1549:39 | ChiPartial | partial:m1549_5 | +| ir.cpp:1549:39:1549:39 | ChiPartial | partial:m1549_7 | +| ir.cpp:1549:39:1549:39 | ChiTotal | total:m1548_4 | +| ir.cpp:1549:39:1549:39 | ChiTotal | total:m1549_2 | +| ir.cpp:1549:39:1549:39 | SideEffect | ~m1548_4 | +| ir.cpp:1552:14:1552:14 | Address | &:r1552_1 | +| ir.cpp:1552:15:1552:15 | Address | &:r1552_5 | +| ir.cpp:1552:18:1552:18 | Address | &:r1552_9 | +| ir.cpp:1552:21:1552:21 | Address | &:r1552_13 | +| ir.cpp:1552:24:1552:24 | Address | &:r1552_17 | +| ir.cpp:1552:27:1552:27 | Address | &:r1552_23 | +| ir.cpp:1552:30:1552:30 | Address | &:r1552_27 | +| ir.cpp:1552:34:1552:34 | Address | &:r1552_31 | +| ir.cpp:1552:41:1552:41 | Address | &:r1552_37 | +| ir.cpp:1552:46:1552:46 | Address | &:r1552_2 | +| ir.cpp:1552:46:1552:46 | Load | m1549_8 | +| ir.cpp:1552:46:1552:46 | StoreValue | r1552_3 | +| ir.cpp:1552:47:1552:47 | Address | &:r1552_19 | +| ir.cpp:1552:47:1552:47 | Address | &:r1552_33 | +| ir.cpp:1552:47:1552:47 | Load | ~m1552_4 | +| ir.cpp:1552:47:1552:47 | Load | ~m1552_4 | +| ir.cpp:1552:47:1552:47 | StoreValue | r1552_7 | +| ir.cpp:1552:47:1552:47 | StoreValue | r1552_11 | +| ir.cpp:1552:47:1552:47 | StoreValue | r1552_15 | +| ir.cpp:1552:47:1552:47 | StoreValue | r1552_21 | +| ir.cpp:1552:47:1552:47 | StoreValue | r1552_25 | +| ir.cpp:1552:47:1552:47 | StoreValue | r1552_29 | +| ir.cpp:1552:47:1552:47 | StoreValue | r1552_35 | +| ir.cpp:1552:47:1552:47 | StoreValue | r1552_39 | +| ir.cpp:1552:47:1552:47 | Unary | r1552_6 | +| ir.cpp:1552:47:1552:47 | Unary | r1552_10 | +| ir.cpp:1552:47:1552:47 | Unary | r1552_14 | +| ir.cpp:1552:47:1552:47 | Unary | r1552_18 | +| ir.cpp:1552:47:1552:47 | Unary | r1552_20 | +| ir.cpp:1552:47:1552:47 | Unary | r1552_24 | +| ir.cpp:1552:47:1552:47 | Unary | r1552_28 | +| ir.cpp:1552:47:1552:47 | Unary | r1552_32 | +| ir.cpp:1552:47:1552:47 | Unary | r1552_34 | +| ir.cpp:1552:47:1552:47 | Unary | r1552_38 | +| ir.cpp:1553:9:1553:9 | Address | &:r1553_2 | +| ir.cpp:1553:9:1553:9 | Address | &:r1553_3 | +| ir.cpp:1553:9:1553:9 | Load | m1552_12 | +| ir.cpp:1553:9:1553:15 | ChiPartial | partial:m1553_4 | +| ir.cpp:1553:9:1553:15 | ChiTotal | total:m1552_4 | +| ir.cpp:1553:13:1553:15 | StoreValue | r1553_1 | +| ir.cpp:1554:17:1554:18 | Address | &:r1554_1 | +| ir.cpp:1554:22:1554:22 | Address | &:r1554_2 | +| ir.cpp:1554:22:1554:22 | Load | m1552_12 | +| ir.cpp:1554:22:1554:22 | StoreValue | r1554_4 | +| ir.cpp:1554:22:1554:22 | Unary | r1554_3 | +| ir.cpp:1555:13:1555:13 | Address | &:r1555_1 | +| ir.cpp:1555:17:1555:17 | Address | &:r1555_2 | +| ir.cpp:1555:17:1555:17 | Address | &:r1555_3 | +| ir.cpp:1555:17:1555:17 | Load | m1552_8 | +| ir.cpp:1555:17:1555:17 | Load | ~m1552_4 | +| ir.cpp:1555:17:1555:17 | StoreValue | r1555_4 | +| ir.cpp:1556:9:1556:9 | Address | &:r1556_2 | +| ir.cpp:1556:9:1556:9 | Address | &:r1556_3 | +| ir.cpp:1556:9:1556:9 | Load | m1552_22 | +| ir.cpp:1556:9:1556:13 | ChiPartial | partial:m1556_4 | +| ir.cpp:1556:9:1556:13 | ChiTotal | total:m1549_6 | +| ir.cpp:1556:13:1556:13 | StoreValue | r1556_1 | +| ir.cpp:1557:9:1557:10 | Address | &:r1557_5 | +| ir.cpp:1557:9:1557:14 | ChiPartial | partial:m1557_6 | +| ir.cpp:1557:9:1557:14 | ChiTotal | total:m1556_5 | +| ir.cpp:1557:10:1557:10 | Address | &:r1557_2 | +| ir.cpp:1557:10:1557:10 | Address | &:r1557_3 | +| ir.cpp:1557:10:1557:10 | Load | m1552_26 | +| ir.cpp:1557:10:1557:10 | Load | ~m1552_4 | +| ir.cpp:1557:10:1557:10 | Unary | r1557_4 | +| ir.cpp:1557:14:1557:14 | StoreValue | r1557_1 | +| ir.cpp:1558:14:1558:15 | Address | &:r1558_1 | +| ir.cpp:1558:19:1558:19 | Address | &:r1558_2 | +| ir.cpp:1558:19:1558:19 | Load | m1552_22 | +| ir.cpp:1558:19:1558:19 | StoreValue | r1558_4 | +| ir.cpp:1558:19:1558:19 | Unary | r1558_3 | +| ir.cpp:1559:14:1559:15 | Address | &:r1559_1 | +| ir.cpp:1559:19:1559:20 | StoreValue | r1559_4 | +| ir.cpp:1559:20:1559:20 | Address | &:r1559_2 | +| ir.cpp:1559:20:1559:20 | Load | m1552_22 | +| ir.cpp:1559:20:1559:20 | Unary | r1559_3 | +| ir.cpp:1560:13:1560:13 | Address | &:r1560_1 | +| ir.cpp:1560:17:1560:17 | Address | &:r1560_2 | +| ir.cpp:1560:17:1560:17 | Address | &:r1560_3 | +| ir.cpp:1560:17:1560:17 | Load | m1552_22 | +| ir.cpp:1560:17:1560:17 | Load | ~m1557_7 | +| ir.cpp:1560:17:1560:17 | StoreValue | r1560_4 | +| ir.cpp:1564:14:1564:35 | Address | &:r1564_1 | +| ir.cpp:1564:39:1564:39 | Address | &:r1564_2 | +| ir.cpp:1564:39:1564:39 | Load | m1549_8 | +| ir.cpp:1564:39:1564:39 | StoreValue | r1564_3 | +| ir.cpp:1565:15:1565:15 | Address | &:r1565_1 | +| ir.cpp:1565:19:1565:40 | Unary | r1565_2 | +| ir.cpp:1565:19:1565:42 | StoreValue | r1565_4 | +| ir.cpp:1565:42:1565:42 | Unary | r1565_3 | +| ir.cpp:1566:15:1566:15 | Address | &:r1566_1 | +| ir.cpp:1566:19:1566:40 | Unary | r1566_2 | +| ir.cpp:1566:19:1566:42 | StoreValue | r1566_4 | +| ir.cpp:1566:42:1566:42 | Unary | r1566_3 | +| ir.cpp:1568:15:1568:15 | Address | &:r1568_1 | +| ir.cpp:1568:19:1568:40 | Unary | r1568_2 | +| ir.cpp:1568:19:1568:42 | StoreValue | r1568_6 | +| ir.cpp:1568:19:1568:42 | Unary | r1568_5 | +| ir.cpp:1568:42:1568:42 | Address | &:r1568_3 | +| ir.cpp:1568:42:1568:42 | Load | ~m1564_4 | +| ir.cpp:1568:42:1568:42 | Unary | r1568_4 | +| ir.cpp:1569:15:1569:15 | Address | &:r1569_1 | +| ir.cpp:1569:19:1569:40 | Unary | r1569_2 | +| ir.cpp:1569:19:1569:42 | StoreValue | r1569_4 | +| ir.cpp:1569:42:1569:42 | Unary | r1569_3 | +| ir.cpp:1570:9:1570:9 | Address | &:r1570_2 | +| ir.cpp:1570:9:1570:9 | Address | &:r1570_4 | +| ir.cpp:1570:9:1570:9 | Load | m1566_5 | +| ir.cpp:1570:9:1570:9 | Unary | r1570_3 | +| ir.cpp:1570:9:1570:15 | ChiPartial | partial:m1570_5 | +| ir.cpp:1570:9:1570:15 | ChiTotal | total:m1564_4 | +| ir.cpp:1570:13:1570:15 | StoreValue | r1570_1 | +| ir.cpp:1571:17:1571:18 | Address | &:r1571_1 | +| ir.cpp:1571:22:1571:22 | Address | &:r1571_2 | +| ir.cpp:1571:22:1571:22 | Load | m1566_5 | +| ir.cpp:1571:22:1571:22 | StoreValue | r1571_5 | +| ir.cpp:1571:22:1571:22 | Unary | r1571_3 | +| ir.cpp:1571:22:1571:22 | Unary | r1571_4 | +| ir.cpp:1572:13:1572:13 | Address | &:r1572_1 | +| ir.cpp:1572:17:1572:17 | Address | &:r1572_2 | +| ir.cpp:1572:17:1572:17 | Address | &:r1572_3 | +| ir.cpp:1572:17:1572:17 | Load | m1565_5 | +| ir.cpp:1572:17:1572:17 | Load | ~m1564_4 | +| ir.cpp:1572:17:1572:17 | StoreValue | r1572_4 | +| ir.cpp:1573:9:1573:9 | Address | &:r1573_2 | +| ir.cpp:1573:9:1573:9 | Address | &:r1573_4 | +| ir.cpp:1573:9:1573:9 | Load | m1568_7 | +| ir.cpp:1573:9:1573:9 | Unary | r1573_3 | +| ir.cpp:1573:9:1573:13 | ChiPartial | partial:m1573_5 | +| ir.cpp:1573:9:1573:13 | ChiTotal | total:m1557_7 | +| ir.cpp:1573:13:1573:13 | StoreValue | r1573_1 | +| ir.cpp:1574:9:1574:10 | Address | &:r1574_5 | +| ir.cpp:1574:9:1574:14 | ChiPartial | partial:m1574_6 | +| ir.cpp:1574:9:1574:14 | ChiTotal | total:m1573_6 | +| ir.cpp:1574:10:1574:10 | Address | &:r1574_2 | +| ir.cpp:1574:10:1574:10 | Address | &:r1574_3 | +| ir.cpp:1574:10:1574:10 | Load | m1569_5 | +| ir.cpp:1574:10:1574:10 | Load | ~m1564_4 | +| ir.cpp:1574:10:1574:10 | Unary | r1574_4 | +| ir.cpp:1574:14:1574:14 | StoreValue | r1574_1 | +| ir.cpp:1575:14:1575:15 | Address | &:r1575_1 | +| ir.cpp:1575:19:1575:19 | Address | &:r1575_2 | +| ir.cpp:1575:19:1575:19 | Load | m1568_7 | +| ir.cpp:1575:19:1575:19 | StoreValue | r1575_5 | +| ir.cpp:1575:19:1575:19 | Unary | r1575_3 | +| ir.cpp:1575:19:1575:19 | Unary | r1575_4 | +| ir.cpp:1576:14:1576:15 | Address | &:r1576_1 | +| ir.cpp:1576:19:1576:20 | StoreValue | r1576_5 | +| ir.cpp:1576:20:1576:20 | Address | &:r1576_2 | +| ir.cpp:1576:20:1576:20 | Load | m1568_7 | +| ir.cpp:1576:20:1576:20 | Unary | r1576_3 | +| ir.cpp:1576:20:1576:20 | Unary | r1576_4 | +| ir.cpp:1577:13:1577:13 | Address | &:r1577_1 | +| ir.cpp:1577:17:1577:17 | Address | &:r1577_2 | +| ir.cpp:1577:17:1577:17 | Address | &:r1577_3 | +| ir.cpp:1577:17:1577:17 | Load | m1568_7 | +| ir.cpp:1577:17:1577:17 | Load | ~m1574_7 | +| ir.cpp:1577:17:1577:17 | StoreValue | r1577_4 | +| ir.cpp:1588:8:1588:8 | Address | &:r1588_5 | +| ir.cpp:1588:8:1588:8 | Address | &:r1588_5 | +| ir.cpp:1588:8:1588:8 | Address | &:r1588_5 | +| ir.cpp:1588:8:1588:8 | Address | &:r1588_5 | +| ir.cpp:1588:8:1588:8 | Address | &:r1588_7 | +| ir.cpp:1588:8:1588:8 | Address | &:r1588_7 | +| ir.cpp:1588:8:1588:8 | Address | &:r1588_7 | +| ir.cpp:1588:8:1588:8 | Address | &:r1588_7 | +| ir.cpp:1588:8:1588:8 | Address | &:r1588_9 | +| ir.cpp:1588:8:1588:8 | Address | &:r1588_10 | +| ir.cpp:1588:8:1588:8 | Address | &:r1588_13 | +| ir.cpp:1588:8:1588:8 | Address | &:r1588_17 | +| ir.cpp:1588:8:1588:8 | Address | &:r1588_18 | +| ir.cpp:1588:8:1588:8 | Address | &:r1588_21 | +| ir.cpp:1588:8:1588:8 | Address | &:r1588_25 | +| ir.cpp:1588:8:1588:8 | Address | &:r1588_26 | +| ir.cpp:1588:8:1588:8 | Address | &:r1588_29 | +| ir.cpp:1588:8:1588:8 | ChiPartial | partial:m1588_3 | +| ir.cpp:1588:8:1588:8 | ChiPartial | partial:m1588_3 | +| ir.cpp:1588:8:1588:8 | ChiPartial | partial:m1588_15 | +| ir.cpp:1588:8:1588:8 | ChiPartial | partial:m1588_23 | +| ir.cpp:1588:8:1588:8 | ChiPartial | partial:m1588_31 | +| ir.cpp:1588:8:1588:8 | ChiTotal | total:m1588_2 | +| ir.cpp:1588:8:1588:8 | ChiTotal | total:m1588_2 | +| ir.cpp:1588:8:1588:8 | ChiTotal | total:m1588_8 | +| ir.cpp:1588:8:1588:8 | ChiTotal | total:m1588_16 | +| ir.cpp:1588:8:1588:8 | ChiTotal | total:m1588_24 | +| ir.cpp:1588:8:1588:8 | Load | m0_2 | +| ir.cpp:1588:8:1588:8 | Load | m0_2 | +| ir.cpp:1588:8:1588:8 | Load | m0_2 | +| ir.cpp:1588:8:1588:8 | Load | m1588_6 | +| ir.cpp:1588:8:1588:8 | Load | m1588_6 | +| ir.cpp:1588:8:1588:8 | Load | ~m0_4 | +| ir.cpp:1588:8:1588:8 | Load | ~m0_4 | +| ir.cpp:1588:8:1588:8 | Load | ~m0_4 | +| ir.cpp:1588:8:1588:8 | SideEffect | m1588_3 | +| ir.cpp:1588:8:1588:8 | SideEffect | m1588_3 | +| ir.cpp:1588:8:1588:8 | SideEffect | m1588_8 | +| ir.cpp:1588:8:1588:8 | SideEffect | m1588_32 | +| ir.cpp:1588:8:1588:8 | StoreValue | r1588_14 | +| ir.cpp:1588:8:1588:8 | StoreValue | r1588_22 | +| ir.cpp:1588:8:1588:8 | StoreValue | r1588_30 | +| ir.cpp:1588:8:1588:8 | Unary | m1588_6 | +| ir.cpp:1588:8:1588:8 | Unary | m1588_6 | +| ir.cpp:1588:8:1588:8 | Unary | m1588_6 | +| ir.cpp:1588:8:1588:8 | Unary | r1588_11 | +| ir.cpp:1588:8:1588:8 | Unary | r1588_12 | +| ir.cpp:1588:8:1588:8 | Unary | r1588_19 | +| ir.cpp:1588:8:1588:8 | Unary | r1588_20 | +| ir.cpp:1588:8:1588:8 | Unary | r1588_27 | +| ir.cpp:1588:8:1588:8 | Unary | r1588_28 | +| ir.cpp:1616:60:1616:95 | Address | &:r1616_5 | +| ir.cpp:1616:60:1616:95 | Address | &:r1616_5 | +| ir.cpp:1616:60:1616:95 | Address | &:r1616_7 | +| ir.cpp:1616:60:1616:95 | Address | &:r1616_7 | +| ir.cpp:1616:60:1616:95 | Address | &:r1616_10 | +| ir.cpp:1616:60:1616:95 | ChiPartial | partial:m1616_3 | +| ir.cpp:1616:60:1616:95 | ChiTotal | total:m1616_2 | +| ir.cpp:1616:60:1616:95 | Load | m0_2 | +| ir.cpp:1616:60:1616:95 | Load | m1616_6 | +| ir.cpp:1616:60:1616:95 | SideEffect | m1616_3 | +| ir.cpp:1616:60:1616:95 | SideEffect | m1616_8 | +| ir.cpp:1617:5:1617:13 | Address | &:r1617_1 | +| ir.cpp:1617:12:1617:12 | Address | &:r1617_2 | +| ir.cpp:1617:12:1617:12 | Load | m1616_6 | +| ir.cpp:1617:12:1617:12 | Unary | r1617_3 | +| ir.cpp:1617:12:1617:12 | Unary | r1617_4 | +| ir.cpp:1620:60:1620:95 | Address | &:r1620_5 | +| ir.cpp:1620:60:1620:95 | Address | &:r1620_5 | +| ir.cpp:1620:60:1620:95 | Address | &:r1620_7 | +| ir.cpp:1620:60:1620:95 | Address | &:r1620_7 | +| ir.cpp:1620:60:1620:95 | Address | &:r1620_10 | +| ir.cpp:1620:60:1620:95 | ChiPartial | partial:m1620_3 | +| ir.cpp:1620:60:1620:95 | ChiTotal | total:m1620_2 | +| ir.cpp:1620:60:1620:95 | Load | m0_2 | +| ir.cpp:1620:60:1620:95 | Load | m1620_6 | +| ir.cpp:1620:60:1620:95 | SideEffect | m1620_3 | +| ir.cpp:1620:60:1620:95 | SideEffect | m1620_8 | +| ir.cpp:1621:5:1621:13 | Address | &:r1621_1 | +| ir.cpp:1621:12:1621:12 | Address | &:r1621_2 | +| ir.cpp:1621:12:1621:12 | Load | m1620_6 | +| ir.cpp:1621:12:1621:12 | Unary | r1621_3 | +| ir.cpp:1621:12:1621:12 | Unary | r1621_4 | +| ir.cpp:1624:60:1624:95 | Address | &:r1624_5 | +| ir.cpp:1624:60:1624:95 | Address | &:r1624_5 | +| ir.cpp:1624:60:1624:95 | Address | &:r1624_7 | +| ir.cpp:1624:60:1624:95 | Address | &:r1624_7 | +| ir.cpp:1624:60:1624:95 | Address | &:r1624_10 | +| ir.cpp:1624:60:1624:95 | ChiPartial | partial:m1624_3 | +| ir.cpp:1624:60:1624:95 | ChiTotal | total:m1624_2 | +| ir.cpp:1624:60:1624:95 | Load | m1624_6 | +| ir.cpp:1624:60:1624:95 | Load | m1625_8 | +| ir.cpp:1624:60:1624:95 | SideEffect | m1624_3 | +| ir.cpp:1624:60:1624:95 | SideEffect | m1624_8 | +| ir.cpp:1625:5:1625:13 | Address | &:r1625_1 | +| ir.cpp:1625:12:1625:12 | Address | &:r1625_2 | +| ir.cpp:1625:12:1625:12 | Address | &:r1625_4 | +| ir.cpp:1625:12:1625:12 | Load | m1624_6 | +| ir.cpp:1625:12:1625:12 | Load | ~m1624_8 | +| ir.cpp:1625:12:1625:12 | StoreValue | r1625_7 | +| ir.cpp:1625:12:1625:12 | Unary | r1625_3 | +| ir.cpp:1625:12:1625:12 | Unary | r1625_5 | +| ir.cpp:1625:12:1625:12 | Unary | r1625_6 | +| ir.cpp:1628:6:1628:37 | ChiPartial | partial:m1628_3 | +| ir.cpp:1628:6:1628:37 | ChiTotal | total:m1628_2 | +| ir.cpp:1628:6:1628:37 | SideEffect | ~m1649_6 | +| ir.cpp:1629:34:1629:34 | Address | &:r1629_1 | +| ir.cpp:1629:34:1629:34 | Address | &:r1629_1 | +| ir.cpp:1629:34:1629:34 | Arg(this) | this:r1629_1 | +| ir.cpp:1629:34:1629:34 | CallTarget | func:r1629_3 | +| ir.cpp:1629:34:1629:34 | ChiPartial | partial:m1629_5 | +| ir.cpp:1629:34:1629:34 | ChiPartial | partial:m1629_7 | +| ir.cpp:1629:34:1629:34 | ChiTotal | total:m1628_4 | +| ir.cpp:1629:34:1629:34 | ChiTotal | total:m1629_2 | +| ir.cpp:1629:34:1629:34 | SideEffect | ~m1628_4 | +| ir.cpp:1632:14:1632:14 | Address | &:r1632_1 | +| ir.cpp:1632:14:1632:14 | Address | &:r1632_6 | +| ir.cpp:1632:14:1632:14 | Address | &:r1632_6 | +| ir.cpp:1632:14:1632:14 | Address | &:r1632_18 | +| ir.cpp:1632:14:1632:14 | Address | &:r1632_18 | +| ir.cpp:1632:14:1632:14 | Address | &:r1632_30 | +| ir.cpp:1632:14:1632:14 | Address | &:r1632_30 | +| ir.cpp:1632:14:1632:14 | Arg(this) | this:r1632_6 | +| ir.cpp:1632:14:1632:14 | Arg(this) | this:r1632_18 | +| ir.cpp:1632:14:1632:14 | Arg(this) | this:r1632_30 | +| ir.cpp:1632:14:1632:14 | CallTarget | func:r1632_7 | +| ir.cpp:1632:14:1632:14 | CallTarget | func:r1632_19 | +| ir.cpp:1632:14:1632:14 | CallTarget | func:r1632_31 | +| ir.cpp:1632:14:1632:14 | ChiPartial | partial:m1632_9 | +| ir.cpp:1632:14:1632:14 | ChiPartial | partial:m1632_12 | +| ir.cpp:1632:14:1632:14 | ChiPartial | partial:m1632_21 | +| ir.cpp:1632:14:1632:14 | ChiPartial | partial:m1632_24 | +| ir.cpp:1632:14:1632:14 | ChiPartial | partial:m1632_33 | +| ir.cpp:1632:14:1632:14 | ChiPartial | partial:m1632_36 | +| ir.cpp:1632:14:1632:14 | ChiTotal | total:m1629_6 | +| ir.cpp:1632:14:1632:14 | ChiTotal | total:m1632_4 | +| ir.cpp:1632:14:1632:14 | ChiTotal | total:m1632_10 | +| ir.cpp:1632:14:1632:14 | ChiTotal | total:m1632_13 | +| ir.cpp:1632:14:1632:14 | ChiTotal | total:m1632_22 | +| ir.cpp:1632:14:1632:14 | ChiTotal | total:m1632_25 | +| ir.cpp:1632:14:1632:14 | SideEffect | m1632_4 | +| ir.cpp:1632:14:1632:14 | SideEffect | m1632_13 | +| ir.cpp:1632:14:1632:14 | SideEffect | m1632_25 | +| ir.cpp:1632:14:1632:14 | SideEffect | ~m1629_6 | +| ir.cpp:1632:14:1632:14 | SideEffect | ~m1632_10 | +| ir.cpp:1632:14:1632:14 | SideEffect | ~m1632_22 | +| ir.cpp:1632:14:1632:14 | Unary | r1632_8 | +| ir.cpp:1632:14:1632:14 | Unary | r1632_20 | +| ir.cpp:1632:14:1632:14 | Unary | r1632_32 | +| ir.cpp:1632:14:1632:27 | StoreValue | r1632_15 | +| ir.cpp:1632:14:1632:27 | StoreValue | r1632_27 | +| ir.cpp:1632:14:1632:27 | StoreValue | r1632_39 | +| ir.cpp:1632:14:1632:27 | Unary | r1632_14 | +| ir.cpp:1632:14:1632:27 | Unary | r1632_26 | +| ir.cpp:1632:14:1632:27 | Unary | r1632_38 | +| ir.cpp:1632:15:1632:15 | Address | &:r1632_5 | +| ir.cpp:1632:18:1632:18 | Address | &:r1632_17 | +| ir.cpp:1632:21:1632:21 | Address | &:r1632_29 | +| ir.cpp:1632:26:1632:26 | Address | &:r1632_2 | +| ir.cpp:1632:26:1632:26 | Load | m1629_8 | +| ir.cpp:1632:26:1632:26 | StoreValue | r1632_3 | +| ir.cpp:1633:9:1633:9 | Address | &:r1633_2 | +| ir.cpp:1633:9:1633:9 | Address | &:r1633_4 | +| ir.cpp:1633:9:1633:9 | Load | m1632_28 | +| ir.cpp:1633:9:1633:9 | Unary | r1633_3 | +| ir.cpp:1633:9:1633:15 | ChiPartial | partial:m1633_5 | +| ir.cpp:1633:9:1633:15 | ChiTotal | total:m1632_37 | +| ir.cpp:1633:13:1633:15 | StoreValue | r1633_1 | +| ir.cpp:1634:17:1634:18 | Address | &:r1634_1 | +| ir.cpp:1634:22:1634:22 | Address | &:r1634_2 | +| ir.cpp:1634:22:1634:22 | Load | m1632_28 | +| ir.cpp:1634:22:1634:22 | StoreValue | r1634_5 | +| ir.cpp:1634:22:1634:22 | Unary | r1634_3 | +| ir.cpp:1634:22:1634:22 | Unary | r1634_4 | +| ir.cpp:1635:13:1635:13 | Address | &:r1635_1 | +| ir.cpp:1635:17:1635:17 | Address | &:r1635_2 | +| ir.cpp:1635:17:1635:17 | Address | &:r1635_3 | +| ir.cpp:1635:17:1635:17 | Load | m1632_16 | +| ir.cpp:1635:17:1635:17 | Load | ~m1632_37 | +| ir.cpp:1635:17:1635:17 | StoreValue | r1635_4 | +| ir.cpp:1636:9:1636:9 | Address | &:r1636_2 | +| ir.cpp:1636:9:1636:9 | Address | &:r1636_4 | +| ir.cpp:1636:9:1636:9 | Load | m1632_40 | +| ir.cpp:1636:9:1636:9 | Unary | r1636_3 | +| ir.cpp:1636:9:1636:13 | ChiPartial | partial:m1636_5 | +| ir.cpp:1636:9:1636:13 | ChiTotal | total:m1632_34 | +| ir.cpp:1636:13:1636:13 | StoreValue | r1636_1 | +| ir.cpp:1637:14:1637:15 | Address | &:r1637_1 | +| ir.cpp:1637:19:1637:19 | Address | &:r1637_2 | +| ir.cpp:1637:19:1637:19 | Load | m1632_40 | +| ir.cpp:1637:19:1637:19 | StoreValue | r1637_5 | +| ir.cpp:1637:19:1637:19 | Unary | r1637_3 | +| ir.cpp:1637:19:1637:19 | Unary | r1637_4 | +| ir.cpp:1638:13:1638:13 | Address | &:r1638_1 | +| ir.cpp:1638:17:1638:17 | Address | &:r1638_2 | +| ir.cpp:1638:17:1638:17 | Address | &:r1638_3 | +| ir.cpp:1638:17:1638:17 | Load | m1632_40 | +| ir.cpp:1638:17:1638:17 | Load | ~m1636_6 | +| ir.cpp:1638:17:1638:17 | StoreValue | r1638_4 | +| ir.cpp:1642:14:1642:35 | Address | &:r1642_1 | +| ir.cpp:1642:39:1642:39 | Address | &:r1642_2 | +| ir.cpp:1642:39:1642:39 | Load | m1629_8 | +| ir.cpp:1642:39:1642:39 | StoreValue | r1642_3 | +| ir.cpp:1643:15:1643:15 | Address | &:r1643_1 | +| ir.cpp:1643:19:1643:40 | Address | &:r1643_2 | +| ir.cpp:1643:19:1643:40 | Address | &:r1643_2 | +| ir.cpp:1643:19:1643:40 | Arg(this) | this:r1643_2 | +| ir.cpp:1643:19:1643:40 | ChiPartial | partial:m1643_8 | +| ir.cpp:1643:19:1643:40 | ChiTotal | total:m1642_4 | +| ir.cpp:1643:19:1643:40 | SideEffect | m1642_4 | +| ir.cpp:1643:42:1643:47 | CallTarget | func:r1643_3 | +| ir.cpp:1643:42:1643:47 | ChiPartial | partial:m1643_5 | +| ir.cpp:1643:42:1643:47 | ChiTotal | total:m1636_6 | +| ir.cpp:1643:42:1643:47 | SideEffect | ~m1636_6 | +| ir.cpp:1643:42:1643:47 | Unary | r1643_4 | +| ir.cpp:1643:48:1643:50 | StoreValue | r1643_11 | +| ir.cpp:1643:48:1643:50 | Unary | r1643_10 | +| ir.cpp:1644:15:1644:15 | Address | &:r1644_1 | +| ir.cpp:1644:19:1644:40 | Address | &:r1644_2 | +| ir.cpp:1644:19:1644:40 | Address | &:r1644_2 | +| ir.cpp:1644:19:1644:40 | Arg(this) | this:r1644_2 | +| ir.cpp:1644:19:1644:40 | ChiPartial | partial:m1644_8 | +| ir.cpp:1644:19:1644:40 | ChiTotal | total:m1643_9 | +| ir.cpp:1644:19:1644:40 | SideEffect | m1643_9 | +| ir.cpp:1644:42:1644:47 | CallTarget | func:r1644_3 | +| ir.cpp:1644:42:1644:47 | ChiPartial | partial:m1644_5 | +| ir.cpp:1644:42:1644:47 | ChiTotal | total:m1643_6 | +| ir.cpp:1644:42:1644:47 | SideEffect | ~m1643_6 | +| ir.cpp:1644:42:1644:47 | Unary | r1644_4 | +| ir.cpp:1644:48:1644:50 | StoreValue | r1644_11 | +| ir.cpp:1644:48:1644:50 | Unary | r1644_10 | +| ir.cpp:1645:15:1645:15 | Address | &:r1645_1 | +| ir.cpp:1645:19:1645:40 | Address | &:r1645_2 | +| ir.cpp:1645:19:1645:40 | Address | &:r1645_2 | +| ir.cpp:1645:19:1645:40 | Arg(this) | this:r1645_2 | +| ir.cpp:1645:19:1645:40 | ChiPartial | partial:m1645_8 | +| ir.cpp:1645:19:1645:40 | ChiTotal | total:m1644_9 | +| ir.cpp:1645:19:1645:40 | SideEffect | m1644_9 | +| ir.cpp:1645:42:1645:47 | CallTarget | func:r1645_3 | +| ir.cpp:1645:42:1645:47 | ChiPartial | partial:m1645_5 | +| ir.cpp:1645:42:1645:47 | ChiTotal | total:m1644_6 | +| ir.cpp:1645:42:1645:47 | SideEffect | ~m1644_6 | +| ir.cpp:1645:42:1645:47 | Unary | r1645_4 | +| ir.cpp:1645:48:1645:50 | StoreValue | r1645_11 | +| ir.cpp:1645:48:1645:50 | Unary | r1645_10 | +| ir.cpp:1646:9:1646:9 | Address | &:r1646_2 | +| ir.cpp:1646:9:1646:9 | Address | &:r1646_4 | +| ir.cpp:1646:9:1646:9 | Load | m1644_12 | +| ir.cpp:1646:9:1646:9 | Unary | r1646_3 | +| ir.cpp:1646:9:1646:15 | ChiPartial | partial:m1646_5 | +| ir.cpp:1646:9:1646:15 | ChiTotal | total:m1645_9 | +| ir.cpp:1646:13:1646:15 | StoreValue | r1646_1 | +| ir.cpp:1647:17:1647:18 | Address | &:r1647_1 | +| ir.cpp:1647:22:1647:22 | Address | &:r1647_2 | +| ir.cpp:1647:22:1647:22 | Load | m1644_12 | +| ir.cpp:1647:22:1647:22 | StoreValue | r1647_5 | +| ir.cpp:1647:22:1647:22 | Unary | r1647_3 | +| ir.cpp:1647:22:1647:22 | Unary | r1647_4 | +| ir.cpp:1648:13:1648:13 | Address | &:r1648_1 | +| ir.cpp:1648:17:1648:17 | Address | &:r1648_2 | +| ir.cpp:1648:17:1648:17 | Address | &:r1648_3 | +| ir.cpp:1648:17:1648:17 | Load | m1643_12 | +| ir.cpp:1648:17:1648:17 | Load | ~m1645_9 | +| ir.cpp:1648:17:1648:17 | StoreValue | r1648_4 | +| ir.cpp:1649:9:1649:9 | Address | &:r1649_2 | +| ir.cpp:1649:9:1649:9 | Address | &:r1649_4 | +| ir.cpp:1649:9:1649:9 | Load | m1645_12 | +| ir.cpp:1649:9:1649:9 | Unary | r1649_3 | +| ir.cpp:1649:9:1649:13 | ChiPartial | partial:m1649_5 | +| ir.cpp:1649:9:1649:13 | ChiTotal | total:m1645_6 | +| ir.cpp:1649:13:1649:13 | StoreValue | r1649_1 | +| ir.cpp:1650:14:1650:15 | Address | &:r1650_1 | +| ir.cpp:1650:19:1650:19 | Address | &:r1650_2 | +| ir.cpp:1650:19:1650:19 | Load | m1645_12 | +| ir.cpp:1650:19:1650:19 | StoreValue | r1650_5 | +| ir.cpp:1650:19:1650:19 | Unary | r1650_3 | +| ir.cpp:1650:19:1650:19 | Unary | r1650_4 | +| ir.cpp:1651:13:1651:13 | Address | &:r1651_1 | +| ir.cpp:1651:17:1651:17 | Address | &:r1651_2 | +| ir.cpp:1651:17:1651:17 | Address | &:r1651_3 | +| ir.cpp:1651:17:1651:17 | Load | m1645_12 | +| ir.cpp:1651:17:1651:17 | Load | ~m1649_6 | +| ir.cpp:1651:17:1651:17 | StoreValue | r1651_4 | +| ir.cpp:1655:8:1655:8 | Address | &:r1655_5 | +| ir.cpp:1655:8:1655:8 | Address | &:r1655_5 | +| ir.cpp:1655:8:1655:8 | Address | &:r1655_7 | +| ir.cpp:1655:8:1655:8 | Address | &:r1655_7 | +| ir.cpp:1655:8:1655:8 | ChiPartial | partial:m1655_3 | +| ir.cpp:1655:8:1655:8 | ChiTotal | total:m1655_2 | +| ir.cpp:1655:8:1655:8 | Load | m1655_6 | +| ir.cpp:1655:8:1655:8 | SideEffect | m1655_3 | +| ir.cpp:1655:8:1655:8 | SideEffect | m1655_8 | +| ir.cpp:1682:61:1682:98 | Address | &:r1682_5 | +| ir.cpp:1682:61:1682:98 | Address | &:r1682_5 | +| ir.cpp:1682:61:1682:98 | Address | &:r1682_7 | +| ir.cpp:1682:61:1682:98 | Address | &:r1682_7 | +| ir.cpp:1682:61:1682:98 | Address | &:r1682_10 | +| ir.cpp:1682:61:1682:98 | ChiPartial | partial:m1682_3 | +| ir.cpp:1682:61:1682:98 | ChiTotal | total:m1682_2 | +| ir.cpp:1682:61:1682:98 | Load | m1682_6 | +| ir.cpp:1682:61:1682:98 | Load | m1683_6 | +| ir.cpp:1682:61:1682:98 | SideEffect | m1682_3 | +| ir.cpp:1682:61:1682:98 | SideEffect | m1682_8 | +| ir.cpp:1683:5:1683:13 | Address | &:r1683_1 | +| ir.cpp:1683:12:1683:12 | Address | &:r1683_2 | +| ir.cpp:1683:12:1683:12 | Address | &:r1683_4 | +| ir.cpp:1683:12:1683:12 | Load | m1682_6 | +| ir.cpp:1683:12:1683:12 | Load | ~m1682_8 | +| ir.cpp:1683:12:1683:12 | StoreValue | r1683_5 | +| ir.cpp:1683:12:1683:12 | Unary | r1683_3 | +| ir.cpp:1686:61:1686:98 | Address | &:r1686_5 | +| ir.cpp:1686:61:1686:98 | Address | &:r1686_5 | +| ir.cpp:1686:61:1686:98 | Address | &:r1686_7 | +| ir.cpp:1686:61:1686:98 | Address | &:r1686_7 | +| ir.cpp:1686:61:1686:98 | Address | &:r1686_10 | +| ir.cpp:1686:61:1686:98 | ChiPartial | partial:m1686_3 | +| ir.cpp:1686:61:1686:98 | ChiTotal | total:m1686_2 | +| ir.cpp:1686:61:1686:98 | Load | m1686_6 | +| ir.cpp:1686:61:1686:98 | Load | m1687_8 | +| ir.cpp:1686:61:1686:98 | SideEffect | m1686_3 | +| ir.cpp:1686:61:1686:98 | SideEffect | m1686_8 | +| ir.cpp:1687:5:1687:13 | Address | &:r1687_1 | +| ir.cpp:1687:12:1687:12 | Address | &:r1687_2 | +| ir.cpp:1687:12:1687:12 | Address | &:r1687_4 | +| ir.cpp:1687:12:1687:12 | Load | m1686_6 | +| ir.cpp:1687:12:1687:12 | Load | ~m1686_8 | +| ir.cpp:1687:12:1687:12 | StoreValue | r1687_7 | +| ir.cpp:1687:12:1687:12 | Unary | r1687_3 | +| ir.cpp:1687:12:1687:12 | Unary | r1687_5 | +| ir.cpp:1687:12:1687:12 | Unary | r1687_6 | +| ir.cpp:1690:61:1690:98 | Address | &:r1690_5 | +| ir.cpp:1690:61:1690:98 | Address | &:r1690_5 | +| ir.cpp:1690:61:1690:98 | Address | &:r1690_7 | +| ir.cpp:1690:61:1690:98 | Address | &:r1690_7 | +| ir.cpp:1690:61:1690:98 | Address | &:r1690_10 | +| ir.cpp:1690:61:1690:98 | ChiPartial | partial:m1690_3 | +| ir.cpp:1690:61:1690:98 | ChiTotal | total:m1690_2 | +| ir.cpp:1690:61:1690:98 | Load | m1690_6 | +| ir.cpp:1690:61:1690:98 | Load | m1691_6 | +| ir.cpp:1690:61:1690:98 | SideEffect | m1690_3 | +| ir.cpp:1690:61:1690:98 | SideEffect | m1690_8 | +| ir.cpp:1691:5:1691:13 | Address | &:r1691_1 | +| ir.cpp:1691:12:1691:12 | Address | &:r1691_2 | +| ir.cpp:1691:12:1691:12 | StoreValue | r1691_3 | +| ir.cpp:1691:12:1691:12 | StoreValue | r1691_5 | +| ir.cpp:1691:12:1691:12 | Unary | r1691_2 | +| ir.cpp:1694:6:1694:40 | ChiPartial | partial:m1694_3 | +| ir.cpp:1694:6:1694:40 | ChiTotal | total:m1694_2 | +| ir.cpp:1694:6:1694:40 | SideEffect | ~m1715_6 | +| ir.cpp:1695:36:1695:36 | Address | &:r1695_1 | +| ir.cpp:1695:36:1695:36 | Address | &:r1695_1 | +| ir.cpp:1695:36:1695:36 | Arg(this) | this:r1695_1 | +| ir.cpp:1695:36:1695:36 | CallTarget | func:r1695_3 | +| ir.cpp:1695:36:1695:36 | ChiPartial | partial:m1695_5 | +| ir.cpp:1695:36:1695:36 | ChiPartial | partial:m1695_7 | +| ir.cpp:1695:36:1695:36 | ChiTotal | total:m1694_4 | +| ir.cpp:1695:36:1695:36 | ChiTotal | total:m1695_2 | +| ir.cpp:1695:36:1695:36 | SideEffect | ~m1694_4 | +| ir.cpp:1698:16:1698:16 | Address | &:r1698_1 | +| ir.cpp:1698:16:1698:16 | Address | &:r1698_7 | +| ir.cpp:1698:16:1698:16 | Address | &:r1698_21 | +| ir.cpp:1698:16:1698:16 | Address | &:r1698_35 | +| ir.cpp:1698:16:1698:16 | CallTarget | func:r1698_10 | +| ir.cpp:1698:16:1698:16 | CallTarget | func:r1698_24 | +| ir.cpp:1698:16:1698:16 | CallTarget | func:r1698_38 | +| ir.cpp:1698:16:1698:16 | ChiPartial | partial:m1698_12 | +| ir.cpp:1698:16:1698:16 | ChiPartial | partial:m1698_26 | +| ir.cpp:1698:16:1698:16 | ChiPartial | partial:m1698_40 | +| ir.cpp:1698:16:1698:16 | ChiTotal | total:m1695_6 | +| ir.cpp:1698:16:1698:16 | ChiTotal | total:m1698_13 | +| ir.cpp:1698:16:1698:16 | ChiTotal | total:m1698_27 | +| ir.cpp:1698:16:1698:16 | Load | m1698_4 | +| ir.cpp:1698:16:1698:16 | Load | m1698_4 | +| ir.cpp:1698:16:1698:16 | Load | m1698_4 | +| ir.cpp:1698:16:1698:16 | SideEffect | ~m1695_6 | +| ir.cpp:1698:16:1698:16 | SideEffect | ~m1698_13 | +| ir.cpp:1698:16:1698:16 | SideEffect | ~m1698_27 | +| ir.cpp:1698:16:1698:16 | StoreValue | r1698_11 | +| ir.cpp:1698:16:1698:16 | Unary | r1698_8 | +| ir.cpp:1698:16:1698:16 | Unary | r1698_22 | +| ir.cpp:1698:16:1698:16 | Unary | r1698_25 | +| ir.cpp:1698:16:1698:16 | Unary | r1698_36 | +| ir.cpp:1698:16:1698:16 | Unary | r1698_39 | +| ir.cpp:1698:16:1698:30 | Address | &:r1698_6 | +| ir.cpp:1698:16:1698:30 | StoreValue | r1698_18 | +| ir.cpp:1698:16:1698:30 | StoreValue | r1698_32 | +| ir.cpp:1698:16:1698:30 | StoreValue | r1698_46 | +| ir.cpp:1698:16:1698:30 | Unary | r1698_6 | +| ir.cpp:1698:16:1698:30 | Unary | r1698_31 | +| ir.cpp:1698:16:1698:30 | Unary | r1698_45 | +| ir.cpp:1698:17:1698:17 | Address | &:r1698_5 | +| ir.cpp:1698:20:1698:20 | Address | &:r1698_20 | +| ir.cpp:1698:23:1698:23 | Address | &:r1698_34 | +| ir.cpp:1698:29:1698:29 | StoreValue | r1698_3 | +| ir.cpp:1698:29:1698:29 | Unary | r1698_2 | +| ir.cpp:1698:30:1698:30 | Address | &:r1698_9 | +| ir.cpp:1698:30:1698:30 | Address | &:r1698_9 | +| ir.cpp:1698:30:1698:30 | Address | &:r1698_23 | +| ir.cpp:1698:30:1698:30 | Address | &:r1698_23 | +| ir.cpp:1698:30:1698:30 | Address | &:r1698_37 | +| ir.cpp:1698:30:1698:30 | Address | &:r1698_37 | +| ir.cpp:1698:30:1698:30 | Arg(this) | this:r1698_9 | +| ir.cpp:1698:30:1698:30 | Arg(this) | this:r1698_23 | +| ir.cpp:1698:30:1698:30 | Arg(this) | this:r1698_37 | +| ir.cpp:1698:30:1698:30 | ChiPartial | partial:m1698_15 | +| ir.cpp:1698:30:1698:30 | ChiPartial | partial:m1698_29 | +| ir.cpp:1698:30:1698:30 | ChiPartial | partial:m1698_43 | +| ir.cpp:1698:30:1698:30 | ChiTotal | total:m1695_8 | +| ir.cpp:1698:30:1698:30 | ChiTotal | total:m1698_16 | +| ir.cpp:1698:30:1698:30 | ChiTotal | total:m1698_30 | +| ir.cpp:1698:30:1698:30 | SideEffect | m1695_8 | +| ir.cpp:1698:30:1698:30 | SideEffect | m1698_16 | +| ir.cpp:1698:30:1698:30 | SideEffect | m1698_30 | +| ir.cpp:1699:9:1699:9 | Address | &:r1699_2 | +| ir.cpp:1699:9:1699:9 | Address | &:r1699_4 | +| ir.cpp:1699:9:1699:9 | Load | m1698_19 | +| ir.cpp:1699:9:1699:9 | Unary | r1699_3 | +| ir.cpp:1699:13:1699:13 | StoreValue | r1699_1 | +| ir.cpp:1700:14:1700:15 | Address | &:r1700_1 | +| ir.cpp:1700:19:1700:19 | Address | &:r1700_2 | +| ir.cpp:1700:19:1700:19 | Load | m1698_19 | +| ir.cpp:1700:19:1700:19 | StoreValue | r1700_5 | +| ir.cpp:1700:19:1700:19 | Unary | r1700_3 | +| ir.cpp:1700:19:1700:19 | Unary | r1700_4 | +| ir.cpp:1701:13:1701:13 | Address | &:r1701_1 | +| ir.cpp:1701:17:1701:17 | Address | &:r1701_2 | +| ir.cpp:1701:17:1701:17 | Address | &:r1701_3 | +| ir.cpp:1701:17:1701:17 | Load | m1698_19 | +| ir.cpp:1701:17:1701:17 | Load | m1699_5 | +| ir.cpp:1701:17:1701:17 | StoreValue | r1701_4 | +| ir.cpp:1702:9:1702:9 | Address | &:r1702_2 | +| ir.cpp:1702:9:1702:9 | Address | &:r1702_4 | +| ir.cpp:1702:9:1702:9 | Load | m1698_33 | +| ir.cpp:1702:9:1702:9 | Unary | r1702_3 | +| ir.cpp:1702:9:1702:13 | ChiPartial | partial:m1702_5 | +| ir.cpp:1702:9:1702:13 | ChiTotal | total:m1698_41 | +| ir.cpp:1702:13:1702:13 | StoreValue | r1702_1 | +| ir.cpp:1703:14:1703:15 | Address | &:r1703_1 | +| ir.cpp:1703:19:1703:19 | Address | &:r1703_2 | +| ir.cpp:1703:19:1703:19 | Load | m1698_33 | +| ir.cpp:1703:19:1703:19 | StoreValue | r1703_5 | +| ir.cpp:1703:19:1703:19 | Unary | r1703_3 | +| ir.cpp:1703:19:1703:19 | Unary | r1703_4 | +| ir.cpp:1704:13:1704:13 | Address | &:r1704_1 | +| ir.cpp:1704:17:1704:17 | Address | &:r1704_2 | +| ir.cpp:1704:17:1704:17 | Address | &:r1704_3 | +| ir.cpp:1704:17:1704:17 | Load | m1698_33 | +| ir.cpp:1704:17:1704:17 | Load | ~m1702_6 | +| ir.cpp:1704:17:1704:17 | StoreValue | r1704_4 | +| ir.cpp:1708:16:1708:37 | Address | &:r1708_1 | +| ir.cpp:1708:41:1708:41 | StoreValue | r1708_3 | +| ir.cpp:1708:41:1708:41 | Unary | r1708_2 | +| ir.cpp:1709:16:1709:16 | Address | &:r1709_1 | +| ir.cpp:1709:20:1709:41 | Address | &:r1709_3 | +| ir.cpp:1709:20:1709:41 | Address | &:r1709_5 | +| ir.cpp:1709:20:1709:41 | Address | &:r1709_5 | +| ir.cpp:1709:20:1709:41 | Arg(this) | this:r1709_5 | +| ir.cpp:1709:20:1709:41 | ChiPartial | partial:m1709_11 | +| ir.cpp:1709:20:1709:41 | ChiTotal | total:m1698_44 | +| ir.cpp:1709:20:1709:41 | Load | m1708_4 | +| ir.cpp:1709:20:1709:41 | SideEffect | m1698_44 | +| ir.cpp:1709:20:1709:41 | Unary | r1709_4 | +| ir.cpp:1709:20:1709:50 | Address | &:r1709_2 | +| ir.cpp:1709:20:1709:50 | StoreValue | r1709_14 | +| ir.cpp:1709:20:1709:50 | Unary | r1709_2 | +| ir.cpp:1709:43:1709:48 | CallTarget | func:r1709_6 | +| ir.cpp:1709:43:1709:48 | ChiPartial | partial:m1709_8 | +| ir.cpp:1709:43:1709:48 | ChiTotal | total:m1702_6 | +| ir.cpp:1709:43:1709:48 | SideEffect | ~m1702_6 | +| ir.cpp:1709:43:1709:48 | StoreValue | r1709_7 | +| ir.cpp:1710:15:1710:15 | Address | &:r1710_1 | +| ir.cpp:1710:19:1710:40 | Address | &:r1710_2 | +| ir.cpp:1710:19:1710:40 | Address | &:r1710_4 | +| ir.cpp:1710:19:1710:40 | Address | &:r1710_4 | +| ir.cpp:1710:19:1710:40 | Arg(this) | this:r1710_4 | +| ir.cpp:1710:19:1710:40 | ChiPartial | partial:m1710_10 | +| ir.cpp:1710:19:1710:40 | ChiTotal | total:m1709_12 | +| ir.cpp:1710:19:1710:40 | Load | m1708_4 | +| ir.cpp:1710:19:1710:40 | SideEffect | m1709_12 | +| ir.cpp:1710:19:1710:40 | Unary | r1710_3 | +| ir.cpp:1710:42:1710:47 | CallTarget | func:r1710_5 | +| ir.cpp:1710:42:1710:47 | ChiPartial | partial:m1710_7 | +| ir.cpp:1710:42:1710:47 | ChiTotal | total:m1709_9 | +| ir.cpp:1710:42:1710:47 | SideEffect | ~m1709_9 | +| ir.cpp:1710:42:1710:47 | Unary | r1710_6 | +| ir.cpp:1710:48:1710:50 | StoreValue | r1710_13 | +| ir.cpp:1710:48:1710:50 | Unary | r1710_12 | +| ir.cpp:1711:16:1711:17 | Address | &:r1711_1 | +| ir.cpp:1711:21:1711:42 | Address | &:r1711_2 | +| ir.cpp:1711:21:1711:42 | Address | &:r1711_4 | +| ir.cpp:1711:21:1711:42 | Address | &:r1711_4 | +| ir.cpp:1711:21:1711:42 | Arg(this) | this:r1711_4 | +| ir.cpp:1711:21:1711:42 | ChiPartial | partial:m1711_10 | +| ir.cpp:1711:21:1711:42 | ChiTotal | total:m1710_11 | +| ir.cpp:1711:21:1711:42 | Load | m1708_4 | +| ir.cpp:1711:21:1711:42 | SideEffect | m1710_11 | +| ir.cpp:1711:21:1711:42 | Unary | r1711_3 | +| ir.cpp:1711:44:1711:49 | CallTarget | func:r1711_5 | +| ir.cpp:1711:44:1711:49 | ChiPartial | partial:m1711_7 | +| ir.cpp:1711:44:1711:49 | ChiTotal | total:m1710_8 | +| ir.cpp:1711:44:1711:49 | SideEffect | ~m1710_8 | +| ir.cpp:1711:44:1711:49 | Unary | r1711_6 | +| ir.cpp:1711:50:1711:52 | StoreValue | r1711_13 | +| ir.cpp:1711:50:1711:52 | Unary | r1711_12 | +| ir.cpp:1712:9:1712:9 | Address | &:r1712_2 | +| ir.cpp:1712:9:1712:9 | Address | &:r1712_4 | +| ir.cpp:1712:9:1712:9 | Load | m1709_15 | +| ir.cpp:1712:9:1712:9 | Unary | r1712_3 | +| ir.cpp:1712:13:1712:13 | StoreValue | r1712_1 | +| ir.cpp:1713:14:1713:15 | Address | &:r1713_1 | +| ir.cpp:1713:19:1713:19 | Address | &:r1713_2 | +| ir.cpp:1713:19:1713:19 | Load | m1709_15 | +| ir.cpp:1713:19:1713:19 | StoreValue | r1713_5 | +| ir.cpp:1713:19:1713:19 | Unary | r1713_3 | +| ir.cpp:1713:19:1713:19 | Unary | r1713_4 | +| ir.cpp:1714:13:1714:13 | Address | &:r1714_1 | +| ir.cpp:1714:17:1714:17 | Address | &:r1714_2 | +| ir.cpp:1714:17:1714:17 | Address | &:r1714_3 | +| ir.cpp:1714:17:1714:17 | Load | m1709_15 | +| ir.cpp:1714:17:1714:17 | Load | m1712_5 | +| ir.cpp:1714:17:1714:17 | StoreValue | r1714_4 | +| ir.cpp:1715:9:1715:9 | Address | &:r1715_2 | +| ir.cpp:1715:9:1715:9 | Address | &:r1715_4 | +| ir.cpp:1715:9:1715:9 | Load | m1710_14 | +| ir.cpp:1715:9:1715:9 | Unary | r1715_3 | +| ir.cpp:1715:9:1715:13 | ChiPartial | partial:m1715_5 | +| ir.cpp:1715:9:1715:13 | ChiTotal | total:m1711_8 | +| ir.cpp:1715:13:1715:13 | StoreValue | r1715_1 | +| ir.cpp:1716:14:1716:15 | Address | &:r1716_1 | +| ir.cpp:1716:19:1716:19 | Address | &:r1716_2 | +| ir.cpp:1716:19:1716:19 | Load | m1710_14 | +| ir.cpp:1716:19:1716:19 | StoreValue | r1716_5 | +| ir.cpp:1716:19:1716:19 | Unary | r1716_3 | +| ir.cpp:1716:19:1716:19 | Unary | r1716_4 | +| ir.cpp:1717:13:1717:13 | Address | &:r1717_1 | +| ir.cpp:1717:17:1717:17 | Address | &:r1717_2 | +| ir.cpp:1717:17:1717:17 | Address | &:r1717_3 | +| ir.cpp:1717:17:1717:17 | Load | m1710_14 | +| ir.cpp:1717:17:1717:17 | Load | ~m1715_6 | +| ir.cpp:1717:17:1717:17 | StoreValue | r1717_4 | +| ir.cpp:1721:6:1721:42 | ChiPartial | partial:m1721_3 | +| ir.cpp:1721:6:1721:42 | ChiTotal | total:m1721_2 | +| ir.cpp:1721:6:1721:42 | SideEffect | m1721_3 | +| ir.cpp:1722:9:1722:10 | Address | &:r1722_1 | +| ir.cpp:1722:9:1722:10 | Left | r1722_1 | +| ir.cpp:1722:9:1722:10 | Left | r1722_1 | +| ir.cpp:1722:16:1722:22 | Address | &:r1722_4 | +| ir.cpp:1722:16:1722:22 | Address | &:r1722_9 | +| ir.cpp:1722:16:1722:22 | Right | r1722_3 | +| ir.cpp:1722:16:1722:22 | Right | r1722_8 | +| ir.cpp:1722:18:1722:18 | ChiPartial | partial:m1722_6 | +| ir.cpp:1722:18:1722:18 | ChiTotal | total:m1722_2 | +| ir.cpp:1722:18:1722:18 | StoreValue | r1722_5 | +| ir.cpp:1722:21:1722:21 | ChiPartial | partial:m1722_11 | +| ir.cpp:1722:21:1722:21 | ChiTotal | total:m1722_7 | +| ir.cpp:1722:21:1722:21 | StoreValue | r1722_10 | +| ir.cpp:1723:10:1723:10 | Address | &:r1723_1 | +| ir.cpp:1723:11:1723:11 | Address | &:r1723_5 | +| ir.cpp:1723:15:1723:15 | Address | &:r1723_6 | +| ir.cpp:1723:21:1723:22 | Address | &:r1723_2 | +| ir.cpp:1723:21:1723:22 | Load | m1722_12 | +| ir.cpp:1723:21:1723:22 | StoreValue | r1723_3 | +| ir.cpp:1729:5:1729:23 | Address | &:r1729_5 | +| ir.cpp:1729:5:1729:23 | Address | &:r1729_5 | +| ir.cpp:1729:5:1729:23 | Address | &:r1729_7 | +| ir.cpp:1729:5:1729:23 | Address | &:r1729_7 | +| ir.cpp:1729:5:1729:23 | ChiPartial | partial:m1729_3 | +| ir.cpp:1729:5:1729:23 | ChiTotal | total:m1729_2 | +| ir.cpp:1729:5:1729:23 | Load | m1729_6 | +| ir.cpp:1729:5:1729:23 | SideEffect | m1729_3 | +| ir.cpp:1729:5:1729:23 | SideEffect | m1729_8 | +| ir.cpp:1732:6:1732:20 | ChiPartial | partial:m1732_3 | +| ir.cpp:1732:6:1732:20 | ChiTotal | total:m1732_2 | +| ir.cpp:1732:6:1732:20 | SideEffect | ~m1735_6 | +| ir.cpp:1732:26:1732:26 | Address | &:r1732_5 | +| ir.cpp:1732:34:1732:34 | Address | &:r1732_7 | +| ir.cpp:1732:34:1732:34 | Address | &:r1732_7 | +| ir.cpp:1732:34:1732:34 | Address | &:r1732_9 | +| ir.cpp:1732:34:1732:34 | Address | &:r1732_9 | +| ir.cpp:1732:34:1732:34 | Load | m1732_8 | +| ir.cpp:1732:34:1732:34 | SideEffect | m1732_10 | +| ir.cpp:1732:43:1732:43 | Address | &:r1732_11 | +| ir.cpp:1732:43:1732:43 | Address | &:r1732_11 | +| ir.cpp:1732:43:1732:43 | Address | &:r1732_13 | +| ir.cpp:1732:43:1732:43 | Address | &:r1732_13 | +| ir.cpp:1732:43:1732:43 | Load | m1732_12 | +| ir.cpp:1732:43:1732:43 | SideEffect | m1732_14 | +| ir.cpp:1734:17:1734:20 | Address | &:r1734_1 | +| ir.cpp:1734:24:1734:44 | Address | &:r1734_2 | +| ir.cpp:1734:24:1734:44 | Address | &:r1734_2 | +| ir.cpp:1734:24:1734:44 | Arg(this) | this:r1734_2 | +| ir.cpp:1734:24:1734:44 | CallTarget | func:r1734_4 | +| ir.cpp:1734:24:1734:44 | ChiPartial | partial:m1734_6 | +| ir.cpp:1734:24:1734:44 | ChiPartial | partial:m1734_8 | +| ir.cpp:1734:24:1734:44 | ChiTotal | total:m1732_4 | +| ir.cpp:1734:24:1734:44 | ChiTotal | total:m1734_3 | +| ir.cpp:1734:24:1734:44 | SideEffect | ~m1732_4 | +| ir.cpp:1734:24:1734:44 | StoreValue | r1734_11 | +| ir.cpp:1734:24:1734:44 | Unary | r1734_2 | +| ir.cpp:1734:24:1734:44 | Unary | r1734_10 | +| ir.cpp:1735:10:1735:13 | Address | &:r1735_1 | +| ir.cpp:1735:10:1735:13 | Address | &:r1735_1 | +| ir.cpp:1735:10:1735:13 | Arg(this) | this:r1735_1 | +| ir.cpp:1735:16:1735:37 | CallTarget | func:r1735_3 | +| ir.cpp:1735:16:1735:37 | ChiPartial | partial:m1735_5 | +| ir.cpp:1735:16:1735:37 | ChiPartial | partial:m1735_7 | +| ir.cpp:1735:16:1735:37 | ChiTotal | total:m1734_7 | +| ir.cpp:1735:16:1735:37 | ChiTotal | total:m1735_2 | +| ir.cpp:1735:16:1735:37 | SideEffect | ~m1734_7 | +| ir.cpp:1737:10:1737:21 | Address | &:r1737_1 | +| ir.cpp:1737:24:1739:5 | Address | &:r1737_2 | +| ir.cpp:1737:24:1739:5 | Address | &:r1737_2 | +| ir.cpp:1737:24:1739:5 | Address | &:r1737_4 | +| ir.cpp:1737:24:1739:5 | Address | &:r1737_5 | +| ir.cpp:1737:24:1739:5 | Address | &:r1737_6 | +| ir.cpp:1737:24:1739:5 | Address | &:r1737_7 | +| ir.cpp:1737:24:1739:5 | Address | &:r1737_8 | +| ir.cpp:1737:24:1739:5 | Address | &:r1737_12 | +| ir.cpp:1737:24:1739:5 | Address | &:r1737_17 | +| ir.cpp:1737:24:1739:5 | Address | &:r1737_20 | +| ir.cpp:1737:24:1739:5 | ChiPartial | partial:m1737_10 | +| ir.cpp:1737:24:1739:5 | ChiTotal | total:m0_3 | +| ir.cpp:1737:24:1739:5 | Load | m1734_12 | +| ir.cpp:1737:24:1739:5 | Load | m1735_8 | +| ir.cpp:1737:24:1739:5 | Load | m1739_6 | +| ir.cpp:1737:24:1739:5 | StoreValue | r1737_9 | +| ir.cpp:1737:24:1739:5 | StoreValue | r1737_23 | +| ir.cpp:1737:24:1739:5 | Unary | r1737_2 | +| ir.cpp:1737:24:1739:5 | Unary | r1737_2 | +| ir.cpp:1737:24:1739:5 | Unary | r1737_2 | +| ir.cpp:1737:24:1739:5 | Unary | r1737_2 | +| ir.cpp:1737:24:1739:5 | Unary | r1737_2 | +| ir.cpp:1737:38:1737:38 | Address | &:r1737_13 | +| ir.cpp:1737:38:1737:38 | ChiPartial | partial:m1737_15 | +| ir.cpp:1737:38:1737:38 | ChiTotal | total:m1737_11 | +| ir.cpp:1737:38:1737:38 | Load | m1732_6 | +| ir.cpp:1737:38:1737:38 | StoreValue | r1737_14 | +| ir.cpp:1737:41:1737:41 | Address | &:r1737_18 | +| ir.cpp:1737:41:1737:41 | Address | &:r1737_19 | +| ir.cpp:1737:41:1737:41 | Load | m1732_8 | +| ir.cpp:1737:44:1737:44 | Address | &:r1737_21 | +| ir.cpp:1737:44:1737:44 | Address | &:r1737_22 | +| ir.cpp:1737:44:1737:44 | Load | m1732_12 | +| ir.cpp:1737:46:1737:46 | Address | &:r1737_5 | +| ir.cpp:1737:46:1737:46 | Address | &:r1737_5 | +| ir.cpp:1737:46:1737:46 | Address | &:r1737_7 | +| ir.cpp:1737:46:1737:46 | Address | &:r1737_7 | +| ir.cpp:1737:46:1737:46 | ChiPartial | partial:m1737_3 | +| ir.cpp:1737:46:1737:46 | ChiTotal | total:m1737_2 | +| ir.cpp:1737:46:1737:46 | Load | m1737_6 | +| ir.cpp:1737:46:1737:46 | SideEffect | m1737_3 | +| ir.cpp:1737:46:1737:46 | SideEffect | m1737_8 | +| ir.cpp:1738:14:1738:25 | Address | &:r1738_1 | +| ir.cpp:1738:28:1738:54 | Address | &:r1738_2 | +| ir.cpp:1738:28:1738:54 | Address | &:r1738_2 | +| ir.cpp:1738:28:1738:54 | Address | &:r1738_4 | +| ir.cpp:1738:28:1738:54 | Address | &:r1738_5 | +| ir.cpp:1738:28:1738:54 | Address | &:r1738_7 | +| ir.cpp:1738:28:1738:54 | Address | &:r1738_11 | +| ir.cpp:1738:28:1738:54 | Address | &:r1738_12 | +| ir.cpp:1738:28:1738:54 | Address | &:r1738_14 | +| ir.cpp:1738:28:1738:54 | Address | &:r1738_18 | +| ir.cpp:1738:28:1738:54 | Address | &:r1738_19 | +| ir.cpp:1738:28:1738:54 | Address | &:r1738_21 | +| ir.cpp:1738:28:1738:54 | Address | &:r1738_25 | +| ir.cpp:1738:28:1738:54 | Address | &:r1738_26 | +| ir.cpp:1738:28:1738:54 | Address | &:r1738_28 | +| ir.cpp:1738:28:1738:54 | Address | &:r1738_32 | +| ir.cpp:1738:28:1738:54 | Address | &:r1738_33 | +| ir.cpp:1738:28:1738:54 | Address | &:r1738_35 | +| ir.cpp:1738:28:1738:54 | ChiPartial | partial:m1738_9 | +| ir.cpp:1738:28:1738:54 | ChiPartial | partial:m1738_16 | +| ir.cpp:1738:28:1738:54 | ChiPartial | partial:m1738_23 | +| ir.cpp:1738:28:1738:54 | ChiPartial | partial:m1738_30 | +| ir.cpp:1738:28:1738:54 | ChiPartial | partial:m1738_37 | +| ir.cpp:1738:28:1738:54 | ChiTotal | total:m1738_3 | +| ir.cpp:1738:28:1738:54 | ChiTotal | total:m1738_10 | +| ir.cpp:1738:28:1738:54 | ChiTotal | total:m1738_17 | +| ir.cpp:1738:28:1738:54 | ChiTotal | total:m1738_24 | +| ir.cpp:1738:28:1738:54 | ChiTotal | total:m1738_31 | +| ir.cpp:1738:28:1738:54 | Load | m1737_6 | +| ir.cpp:1738:28:1738:54 | Load | m1737_6 | +| ir.cpp:1738:28:1738:54 | Load | m1737_6 | +| ir.cpp:1738:28:1738:54 | Load | m1737_6 | +| ir.cpp:1738:28:1738:54 | Load | m1737_6 | +| ir.cpp:1738:28:1738:54 | Load | m1738_38 | +| ir.cpp:1738:28:1738:54 | Load | ~m1737_8 | +| ir.cpp:1738:28:1738:54 | Load | ~m1737_8 | +| ir.cpp:1738:28:1738:54 | Load | ~m1737_8 | +| ir.cpp:1738:28:1738:54 | Load | ~m1737_8 | +| ir.cpp:1738:28:1738:54 | Load | ~m1737_8 | +| ir.cpp:1738:28:1738:54 | StoreValue | r1738_8 | +| ir.cpp:1738:28:1738:54 | StoreValue | r1738_15 | +| ir.cpp:1738:28:1738:54 | StoreValue | r1738_22 | +| ir.cpp:1738:28:1738:54 | StoreValue | r1738_29 | +| ir.cpp:1738:28:1738:54 | StoreValue | r1738_36 | +| ir.cpp:1738:28:1738:54 | StoreValue | r1738_39 | +| ir.cpp:1738:28:1738:54 | Unary | r1738_2 | +| ir.cpp:1738:28:1738:54 | Unary | r1738_2 | +| ir.cpp:1738:28:1738:54 | Unary | r1738_2 | +| ir.cpp:1738:28:1738:54 | Unary | r1738_2 | +| ir.cpp:1738:28:1738:54 | Unary | r1738_2 | +| ir.cpp:1738:28:1738:54 | Unary | r1738_6 | +| ir.cpp:1738:28:1738:54 | Unary | r1738_13 | +| ir.cpp:1738:28:1738:54 | Unary | r1738_20 | +| ir.cpp:1738:28:1738:54 | Unary | r1738_27 | +| ir.cpp:1738:28:1738:54 | Unary | r1738_34 | +| ir.cpp:1738:50:1738:50 | Address | &:r1738_5 | +| ir.cpp:1738:50:1738:50 | Address | &:r1738_5 | +| ir.cpp:1738:50:1738:50 | Address | &:r1738_7 | +| ir.cpp:1738:50:1738:50 | Address | &:r1738_7 | +| ir.cpp:1738:50:1738:50 | ChiPartial | partial:m1738_3 | +| ir.cpp:1738:50:1738:50 | ChiTotal | total:m1738_2 | +| ir.cpp:1738:50:1738:50 | Load | m1738_6 | +| ir.cpp:1738:50:1738:50 | SideEffect | m1738_3 | +| ir.cpp:1738:50:1738:50 | SideEffect | m1738_8 | +| ir.cpp:1739:6:1739:6 | ChiPartial | partial:m1739_2 | +| ir.cpp:1739:6:1739:6 | ChiPartial | partial:m1739_5 | +| ir.cpp:1739:6:1739:6 | ChiTotal | total:m1737_16 | +| ir.cpp:1739:6:1739:6 | ChiTotal | total:m1739_3 | +| ir.cpp:1739:6:1739:6 | Load | ~m1732_10 | +| ir.cpp:1739:6:1739:6 | Load | ~m1732_14 | +| ir.cpp:1739:6:1739:6 | StoreValue | r1739_1 | +| ir.cpp:1739:6:1739:6 | StoreValue | r1739_4 | +| ir.cpp:1742:5:1742:21 | Address | &:r1742_5 | +| ir.cpp:1742:5:1742:21 | ChiPartial | partial:m1742_3 | +| ir.cpp:1742:5:1742:21 | ChiTotal | total:m1742_2 | +| ir.cpp:1742:5:1742:21 | Load | m1745_4 | +| ir.cpp:1742:5:1742:21 | SideEffect | m1742_3 | +| ir.cpp:1743:7:1743:7 | Address | &:r1743_1 | +| ir.cpp:1743:10:1743:12 | StoreValue | r1743_2 | +| ir.cpp:1745:3:1745:11 | Address | &:r1745_1 | +| ir.cpp:1745:10:1745:10 | Address | &:r1745_2 | +| ir.cpp:1745:10:1745:10 | Load | m1743_3 | +| ir.cpp:1745:10:1745:10 | StoreValue | r1745_3 | +| ir.cpp:1750:10:1750:10 | Address | &:r1750_5 | +| ir.cpp:1750:10:1750:10 | Address | &:r1750_5 | +| ir.cpp:1750:10:1750:10 | Address | &:r1750_7 | +| ir.cpp:1750:10:1750:10 | Address | &:r1750_7 | +| ir.cpp:1750:10:1750:10 | ChiPartial | partial:m1750_3 | +| ir.cpp:1750:10:1750:10 | ChiTotal | total:m1750_2 | +| ir.cpp:1750:10:1750:10 | Load | m1750_6 | +| ir.cpp:1750:10:1750:10 | SideEffect | m1750_3 | +| ir.cpp:1750:10:1750:10 | SideEffect | m1750_8 | +| ir.cpp:1751:14:1751:22 | Address | &:r1751_1 | +| ir.cpp:1751:25:1757:9 | Address | &:r1751_2 | +| ir.cpp:1751:25:1757:9 | Address | &:r1751_2 | +| ir.cpp:1751:25:1757:9 | Address | &:r1751_4 | +| ir.cpp:1751:25:1757:9 | Address | &:r1751_5 | +| ir.cpp:1751:25:1757:9 | Address | &:r1751_6 | +| ir.cpp:1751:25:1757:9 | Load | m1750_6 | +| ir.cpp:1751:25:1757:9 | Load | ~m1750_8 | +| ir.cpp:1751:25:1757:9 | Load | ~m1751_8 | +| ir.cpp:1751:25:1757:9 | StoreValue | r1751_7 | +| ir.cpp:1751:25:1757:9 | StoreValue | r1751_9 | +| ir.cpp:1751:25:1757:9 | Unary | r1751_2 | +| ir.cpp:1751:34:1751:34 | Address | &:r1751_5 | +| ir.cpp:1751:34:1751:34 | Address | &:r1751_5 | +| ir.cpp:1751:34:1751:34 | Address | &:r1751_7 | +| ir.cpp:1751:34:1751:34 | Address | &:r1751_7 | +| ir.cpp:1751:34:1751:34 | ChiPartial | partial:m1751_3 | +| ir.cpp:1751:34:1751:34 | ChiTotal | total:m1751_2 | +| ir.cpp:1751:34:1751:34 | Load | m1751_6 | +| ir.cpp:1751:34:1751:34 | SideEffect | m1751_8 | +| ir.cpp:1751:34:1751:34 | SideEffect | ~m1752_8 | +| ir.cpp:1752:13:1752:13 | Address | &:r1752_1 | +| ir.cpp:1752:13:1752:13 | Address | &:r1752_4 | +| ir.cpp:1752:13:1752:13 | Arg(this) | this:r1752_4 | +| ir.cpp:1752:13:1752:13 | CallTarget | func:r1752_5 | +| ir.cpp:1752:13:1752:13 | ChiPartial | partial:m1752_7 | +| ir.cpp:1752:13:1752:13 | ChiTotal | total:m1751_4 | +| ir.cpp:1752:13:1752:13 | Load | m1751_6 | +| ir.cpp:1752:13:1752:13 | SideEffect | ~m1751_4 | +| ir.cpp:1752:13:1752:13 | SideEffect | ~m1751_8 | +| ir.cpp:1752:13:1752:13 | Unary | r1752_2 | +| ir.cpp:1752:13:1752:13 | Unary | r1752_3 | +| ir.cpp:1754:18:1754:26 | Address | &:r1754_1 | +| ir.cpp:1754:29:1756:13 | Address | &:r1754_2 | +| ir.cpp:1754:29:1756:13 | Address | &:r1754_2 | +| ir.cpp:1754:29:1756:13 | Address | &:r1754_4 | +| ir.cpp:1754:29:1756:13 | Address | &:r1754_5 | +| ir.cpp:1754:29:1756:13 | Address | &:r1754_7 | +| ir.cpp:1754:29:1756:13 | Load | m1751_6 | +| ir.cpp:1754:29:1756:13 | Load | ~m1751_8 | +| ir.cpp:1754:29:1756:13 | Load | ~m1754_9 | +| ir.cpp:1754:29:1756:13 | StoreValue | r1754_8 | +| ir.cpp:1754:29:1756:13 | StoreValue | r1754_10 | +| ir.cpp:1754:29:1756:13 | Unary | r1754_2 | +| ir.cpp:1754:29:1756:13 | Unary | r1754_6 | +| ir.cpp:1754:38:1754:38 | Address | &:r1754_5 | +| ir.cpp:1754:38:1754:38 | Address | &:r1754_5 | +| ir.cpp:1754:38:1754:38 | Address | &:r1754_7 | +| ir.cpp:1754:38:1754:38 | Address | &:r1754_7 | +| ir.cpp:1754:38:1754:38 | ChiPartial | partial:m1754_3 | +| ir.cpp:1754:38:1754:38 | ChiTotal | total:m1754_2 | +| ir.cpp:1754:38:1754:38 | Load | m1754_6 | +| ir.cpp:1754:38:1754:38 | SideEffect | m1754_8 | +| ir.cpp:1754:38:1754:38 | SideEffect | ~m1755_8 | +| ir.cpp:1755:17:1755:17 | Address | &:r1755_1 | +| ir.cpp:1755:17:1755:17 | Address | &:r1755_4 | +| ir.cpp:1755:17:1755:17 | Arg(this) | this:r1755_4 | +| ir.cpp:1755:17:1755:17 | CallTarget | func:r1755_5 | +| ir.cpp:1755:17:1755:17 | ChiPartial | partial:m1755_7 | +| ir.cpp:1755:17:1755:17 | ChiTotal | total:m1754_4 | +| ir.cpp:1755:17:1755:17 | Load | m1754_6 | +| ir.cpp:1755:17:1755:17 | SideEffect | ~m1754_4 | +| ir.cpp:1755:17:1755:17 | SideEffect | ~m1754_8 | +| ir.cpp:1755:17:1755:17 | Unary | r1755_2 | +| ir.cpp:1755:17:1755:17 | Unary | r1755_3 | +| ir.cpp:1761:6:1761:21 | ChiPartial | partial:m1761_3 | +| ir.cpp:1761:6:1761:21 | ChiTotal | total:m1761_2 | +| ir.cpp:1761:6:1761:21 | SideEffect | m1761_3 | +| ir.cpp:1761:42:1761:43 | Address | &:r1761_5 | +| ir.cpp:1761:66:1761:67 | Address | &:r1761_7 | +| ir.cpp:1761:66:1761:67 | Address | &:r1761_7 | +| ir.cpp:1761:66:1761:67 | Address | &:r1761_9 | +| ir.cpp:1761:66:1761:67 | Address | &:r1761_9 | +| ir.cpp:1761:66:1761:67 | Load | m1761_8 | +| ir.cpp:1761:66:1761:67 | SideEffect | m1761_10 | +| ir.cpp:1761:91:1761:92 | Address | &:r1761_11 | +| ir.cpp:1761:91:1761:92 | Address | &:r1761_11 | +| ir.cpp:1761:91:1761:92 | Address | &:r1761_13 | +| ir.cpp:1761:91:1761:92 | Address | &:r1761_13 | +| ir.cpp:1761:91:1761:92 | Load | m1761_12 | +| ir.cpp:1761:91:1761:92 | SideEffect | m1761_14 | +| ir.cpp:1762:30:1762:31 | Address | &:r1762_1 | +| ir.cpp:1763:31:1763:32 | Address | &:r1763_1 | +| ir.cpp:1763:36:1763:55 | Address | &:r1763_2 | +| ir.cpp:1763:36:1763:55 | StoreValue | r1763_3 | +| ir.cpp:1763:36:1763:55 | StoreValue | r1763_6 | +| ir.cpp:1763:36:1763:55 | Unary | r1763_2 | +| ir.cpp:1763:36:1763:55 | Unary | r1763_5 | +| ir.cpp:1765:10:1765:17 | Address | &:r1765_1 | +| ir.cpp:1765:20:1767:5 | Address | &:r1765_2 | +| ir.cpp:1765:20:1767:5 | Address | &:r1765_2 | +| ir.cpp:1765:20:1767:5 | Address | &:r1765_4 | +| ir.cpp:1765:20:1767:5 | Address | &:r1765_5 | +| ir.cpp:1765:20:1767:5 | Address | &:r1765_9 | +| ir.cpp:1765:20:1767:5 | Address | &:r1765_10 | +| ir.cpp:1765:20:1767:5 | Address | &:r1765_11 | +| ir.cpp:1765:20:1767:5 | Address | &:r1765_12 | +| ir.cpp:1765:20:1767:5 | Address | &:r1765_13 | +| ir.cpp:1765:20:1767:5 | Address | &:r1765_14 | +| ir.cpp:1765:20:1767:5 | Address | &:r1765_15 | +| ir.cpp:1765:20:1767:5 | Address | &:r1765_16 | +| ir.cpp:1765:20:1767:5 | Address | &:r1765_20 | +| ir.cpp:1765:20:1767:5 | Address | &:r1765_21 | +| ir.cpp:1765:20:1767:5 | Address | &:r1765_22 | +| ir.cpp:1765:20:1767:5 | ChiPartial | partial:m1765_7 | +| ir.cpp:1765:20:1767:5 | ChiPartial | partial:m1765_18 | +| ir.cpp:1765:20:1767:5 | ChiTotal | total:m0_6 | +| ir.cpp:1765:20:1767:5 | ChiTotal | total:m1765_3 | +| ir.cpp:1765:20:1767:5 | Load | m0_9 | +| ir.cpp:1765:20:1767:5 | Load | m1761_6 | +| ir.cpp:1765:20:1767:5 | Load | m1761_8 | +| ir.cpp:1765:20:1767:5 | Load | m1761_12 | +| ir.cpp:1765:20:1767:5 | Load | m1762_2 | +| ir.cpp:1765:20:1767:5 | Load | m1763_7 | +| ir.cpp:1765:20:1767:5 | StoreValue | r1765_6 | +| ir.cpp:1765:20:1767:5 | StoreValue | r1765_17 | +| ir.cpp:1765:20:1767:5 | StoreValue | r1765_23 | +| ir.cpp:1765:20:1767:5 | Unary | r1765_2 | +| ir.cpp:1765:20:1767:5 | Unary | r1765_2 | +| ir.cpp:1765:20:1767:5 | Unary | r1765_2 | +| ir.cpp:1765:20:1767:5 | Unary | r1765_2 | +| ir.cpp:1765:20:1767:5 | Unary | r1765_2 | +| ir.cpp:1765:42:1765:42 | Address | &:r1765_5 | +| ir.cpp:1765:42:1765:42 | Address | &:r1765_5 | +| ir.cpp:1765:42:1765:42 | Address | &:r1765_7 | +| ir.cpp:1765:42:1765:42 | Address | &:r1765_7 | +| ir.cpp:1765:42:1765:42 | ChiPartial | partial:m1765_3 | +| ir.cpp:1765:42:1765:42 | ChiTotal | total:m1765_2 | +| ir.cpp:1765:42:1765:42 | Load | m1765_6 | +| ir.cpp:1765:42:1765:42 | SideEffect | m1765_3 | +| ir.cpp:1765:42:1765:42 | SideEffect | m1765_8 | +| ir.cpp:1766:14:1766:21 | Address | &:r1766_1 | +| ir.cpp:1766:24:1766:31 | Address | &:r1766_2 | +| ir.cpp:1766:24:1766:31 | Address | &:r1766_2 | +| ir.cpp:1766:24:1766:31 | Address | &:r1766_4 | +| ir.cpp:1766:24:1766:31 | Address | &:r1766_5 | +| ir.cpp:1766:24:1766:31 | Address | &:r1766_7 | +| ir.cpp:1766:24:1766:31 | Load | m1765_6 | +| ir.cpp:1766:24:1766:31 | Load | ~m1765_8 | +| ir.cpp:1766:24:1766:31 | Load | ~m1766_9 | +| ir.cpp:1766:24:1766:31 | StoreValue | r1766_8 | +| ir.cpp:1766:24:1766:31 | StoreValue | r1766_10 | +| ir.cpp:1766:24:1766:31 | Unary | r1766_2 | +| ir.cpp:1766:24:1766:31 | Unary | r1766_6 | +| ir.cpp:1766:30:1766:30 | Address | &:r1766_5 | +| ir.cpp:1766:30:1766:30 | Address | &:r1766_5 | +| ir.cpp:1766:30:1766:30 | Address | &:r1766_7 | +| ir.cpp:1766:30:1766:30 | Address | &:r1766_7 | +| ir.cpp:1766:30:1766:30 | ChiPartial | partial:m1766_3 | +| ir.cpp:1766:30:1766:30 | ChiTotal | total:m1766_2 | +| ir.cpp:1766:30:1766:30 | Load | m1766_6 | +| ir.cpp:1766:30:1766:30 | SideEffect | m1766_3 | +| ir.cpp:1766:30:1766:30 | SideEffect | m1766_8 | +| ir.cpp:1773:5:1773:44 | Address | &:r1773_5 | +| ir.cpp:1773:5:1773:44 | Address | &:r1773_5 | +| ir.cpp:1773:5:1773:44 | Address | &:r1773_7 | +| ir.cpp:1773:5:1773:44 | Address | &:r1773_7 | +| ir.cpp:1773:5:1773:44 | ChiPartial | partial:m1773_3 | +| ir.cpp:1773:5:1773:44 | ChiTotal | total:m1773_2 | +| ir.cpp:1773:5:1773:44 | Load | m1773_6 | +| ir.cpp:1773:5:1773:44 | SideEffect | m1773_3 | +| ir.cpp:1773:5:1773:44 | SideEffect | m1773_8 | +| ir.cpp:1774:5:1774:44 | Address | &:r1774_5 | +| ir.cpp:1774:5:1774:44 | Address | &:r1774_5 | +| ir.cpp:1774:5:1774:44 | Address | &:r1774_7 | +| ir.cpp:1774:5:1774:44 | Address | &:r1774_7 | +| ir.cpp:1774:5:1774:44 | ChiPartial | partial:m1774_3 | +| ir.cpp:1774:5:1774:44 | ChiTotal | total:m1774_2 | +| ir.cpp:1774:5:1774:44 | Load | m1774_6 | +| ir.cpp:1774:5:1774:44 | SideEffect | m1774_3 | +| ir.cpp:1774:5:1774:44 | SideEffect | m1775_10 | +| ir.cpp:1774:94:1774:94 | Address | &:r1774_9 | +| ir.cpp:1774:94:1774:94 | Address | &:r1774_9 | +| ir.cpp:1774:94:1774:94 | Address | &:r1774_11 | +| ir.cpp:1774:94:1774:94 | Address | &:r1774_11 | +| ir.cpp:1774:94:1774:94 | Load | m1774_10 | +| ir.cpp:1774:94:1774:94 | SideEffect | m1774_12 | +| ir.cpp:1775:9:1775:9 | Address | &:r1775_6 | +| ir.cpp:1775:9:1775:9 | Address | &:r1775_8 | +| ir.cpp:1775:9:1775:9 | Load | m1774_6 | +| ir.cpp:1775:9:1775:9 | Unary | r1775_7 | +| ir.cpp:1775:9:1775:15 | ChiPartial | partial:m1775_9 | +| ir.cpp:1775:9:1775:15 | ChiTotal | total:m1774_8 | +| ir.cpp:1775:13:1775:13 | Address | &:r1775_1 | +| ir.cpp:1775:13:1775:13 | Load | m1774_10 | +| ir.cpp:1775:13:1775:13 | Unary | r1775_2 | +| ir.cpp:1775:13:1775:13 | Unary | r1775_3 | +| ir.cpp:1775:15:1775:15 | Address | &:r1775_4 | +| ir.cpp:1775:15:1775:15 | Load | ~m1774_12 | +| ir.cpp:1775:15:1775:15 | StoreValue | r1775_5 | +| ir.cpp:1782:5:1782:39 | Address | &:r1782_5 | +| ir.cpp:1782:5:1782:39 | Address | &:r1782_5 | +| ir.cpp:1782:5:1782:39 | Address | &:r1782_7 | +| ir.cpp:1782:5:1782:39 | Address | &:r1782_7 | +| ir.cpp:1782:5:1782:39 | ChiPartial | partial:m1782_3 | +| ir.cpp:1782:5:1782:39 | ChiTotal | total:m1782_2 | +| ir.cpp:1782:5:1782:39 | Load | m1782_6 | +| ir.cpp:1782:5:1782:39 | SideEffect | m1782_3 | +| ir.cpp:1782:5:1782:39 | SideEffect | m1782_8 | +| ir.cpp:1785:7:1785:7 | Address | &:r1785_5 | +| ir.cpp:1785:7:1785:7 | Address | &:r1785_5 | +| ir.cpp:1785:7:1785:7 | Address | &:r1785_7 | +| ir.cpp:1785:7:1785:7 | Address | &:r1785_7 | +| ir.cpp:1785:7:1785:7 | Address | &:r1785_9 | +| ir.cpp:1785:7:1785:7 | Address | &:r1785_11 | +| ir.cpp:1785:7:1785:7 | Address | &:r1785_15 | +| ir.cpp:1785:7:1785:7 | Arg(0) | 0:r1785_15 | +| ir.cpp:1785:7:1785:7 | Arg(this) | this:r1785_9 | +| ir.cpp:1785:7:1785:7 | CallTarget | func:r1785_10 | +| ir.cpp:1785:7:1785:7 | ChiPartial | partial:m1785_3 | +| ir.cpp:1785:7:1785:7 | ChiPartial | partial:m1785_17 | +| ir.cpp:1785:7:1785:7 | ChiPartial | partial:m1785_20 | +| ir.cpp:1785:7:1785:7 | ChiTotal | total:m1785_2 | +| ir.cpp:1785:7:1785:7 | ChiTotal | total:m1785_4 | +| ir.cpp:1785:7:1785:7 | ChiTotal | total:m1785_8 | +| ir.cpp:1785:7:1785:7 | Load | m0_2 | +| ir.cpp:1785:7:1785:7 | Load | m1785_6 | +| ir.cpp:1785:7:1785:7 | SideEffect | m1785_21 | +| ir.cpp:1785:7:1785:7 | SideEffect | ~m0_4 | +| ir.cpp:1785:7:1785:7 | SideEffect | ~m1785_4 | +| ir.cpp:1785:7:1785:7 | SideEffect | ~m1785_18 | +| ir.cpp:1785:7:1785:7 | Unary | m1785_6 | +| ir.cpp:1785:7:1785:7 | Unary | r1785_12 | +| ir.cpp:1785:7:1785:7 | Unary | r1785_13 | +| ir.cpp:1785:7:1785:7 | Unary | r1785_14 | +| ir.cpp:1789:5:1789:38 | Address | &:r1789_5 | +| ir.cpp:1789:5:1789:38 | Address | &:r1789_5 | +| ir.cpp:1789:5:1789:38 | Address | &:r1789_7 | +| ir.cpp:1789:5:1789:38 | Address | &:r1789_7 | +| ir.cpp:1789:5:1789:38 | ChiPartial | partial:m1789_3 | +| ir.cpp:1789:5:1789:38 | ChiTotal | total:m1789_2 | +| ir.cpp:1789:5:1789:38 | Load | m1789_6 | +| ir.cpp:1789:5:1789:38 | SideEffect | m1789_22 | +| ir.cpp:1789:5:1789:38 | SideEffect | ~m1789_20 | +| ir.cpp:1789:5:1789:38 | Unary | m1789_6 | +| ir.cpp:1789:5:1789:38 | Unary | m1789_6 | +| ir.cpp:1789:42:1789:42 | Address | &:r1789_9 | +| ir.cpp:1789:42:1789:42 | Address | &:r1789_16 | +| ir.cpp:1789:42:1789:42 | Arg(this) | this:r1789_9 | +| ir.cpp:1789:42:1789:42 | Arg(this) | this:r1789_16 | +| ir.cpp:1789:42:1789:42 | CallTarget | func:r1789_10 | +| ir.cpp:1789:42:1789:42 | CallTarget | func:r1789_17 | +| ir.cpp:1789:42:1789:42 | ChiPartial | partial:m1789_12 | +| ir.cpp:1789:42:1789:42 | ChiPartial | partial:m1789_14 | +| ir.cpp:1789:42:1789:42 | ChiPartial | partial:m1789_19 | +| ir.cpp:1789:42:1789:42 | ChiPartial | partial:m1789_21 | +| ir.cpp:1789:42:1789:42 | ChiTotal | total:m1789_4 | +| ir.cpp:1789:42:1789:42 | ChiTotal | total:m1789_8 | +| ir.cpp:1789:42:1789:42 | ChiTotal | total:m1789_13 | +| ir.cpp:1789:42:1789:42 | ChiTotal | total:m1789_15 | +| ir.cpp:1789:42:1789:42 | SideEffect | ~m1789_4 | +| ir.cpp:1789:42:1789:42 | SideEffect | ~m1789_13 | +| ir.cpp:1792:7:1792:7 | Address | &:r1792_5 | +| ir.cpp:1792:7:1792:7 | Address | &:r1792_5 | +| ir.cpp:1792:7:1792:7 | Address | &:r1792_7 | +| ir.cpp:1792:7:1792:7 | Address | &:r1792_7 | +| ir.cpp:1792:7:1792:7 | Address | &:r1792_9 | +| ir.cpp:1792:7:1792:7 | Address | &:r1792_11 | +| ir.cpp:1792:7:1792:7 | Address | &:r1792_15 | +| ir.cpp:1792:7:1792:7 | Arg(0) | 0:r1792_15 | +| ir.cpp:1792:7:1792:7 | Arg(this) | this:r1792_9 | +| ir.cpp:1792:7:1792:7 | CallTarget | func:r1792_10 | +| ir.cpp:1792:7:1792:7 | ChiPartial | partial:m1792_3 | +| ir.cpp:1792:7:1792:7 | ChiPartial | partial:m1792_17 | +| ir.cpp:1792:7:1792:7 | ChiPartial | partial:m1792_20 | +| ir.cpp:1792:7:1792:7 | ChiTotal | total:m1792_2 | +| ir.cpp:1792:7:1792:7 | ChiTotal | total:m1792_4 | +| ir.cpp:1792:7:1792:7 | ChiTotal | total:m1792_18 | +| ir.cpp:1792:7:1792:7 | Load | m0_2 | +| ir.cpp:1792:7:1792:7 | Load | m1792_6 | +| ir.cpp:1792:7:1792:7 | SideEffect | m1792_8 | +| ir.cpp:1792:7:1792:7 | SideEffect | ~m0_4 | +| ir.cpp:1792:7:1792:7 | SideEffect | ~m1792_4 | +| ir.cpp:1792:7:1792:7 | SideEffect | ~m1792_21 | +| ir.cpp:1792:7:1792:7 | Unary | m1792_6 | +| ir.cpp:1792:7:1792:7 | Unary | r1792_12 | +| ir.cpp:1792:7:1792:7 | Unary | r1792_13 | +| ir.cpp:1792:7:1792:7 | Unary | r1792_14 | +| ir.cpp:1796:5:1796:35 | Address | &:r1796_5 | +| ir.cpp:1796:5:1796:35 | Address | &:r1796_5 | +| ir.cpp:1796:5:1796:35 | Address | &:r1796_7 | +| ir.cpp:1796:5:1796:35 | Address | &:r1796_7 | +| ir.cpp:1796:5:1796:35 | ChiPartial | partial:m1796_3 | +| ir.cpp:1796:5:1796:35 | ChiTotal | total:m1796_2 | +| ir.cpp:1796:5:1796:35 | Load | m1796_6 | +| ir.cpp:1796:5:1796:35 | SideEffect | m1796_8 | +| ir.cpp:1796:5:1796:35 | SideEffect | ~m1796_22 | +| ir.cpp:1796:5:1796:35 | Unary | m1796_6 | +| ir.cpp:1796:5:1796:35 | Unary | m1796_6 | +| ir.cpp:1796:39:1796:39 | Address | &:r1796_9 | +| ir.cpp:1796:39:1796:39 | Address | &:r1796_16 | +| ir.cpp:1796:39:1796:39 | Arg(this) | this:r1796_9 | +| ir.cpp:1796:39:1796:39 | Arg(this) | this:r1796_16 | +| ir.cpp:1796:39:1796:39 | CallTarget | func:r1796_10 | +| ir.cpp:1796:39:1796:39 | CallTarget | func:r1796_17 | +| ir.cpp:1796:39:1796:39 | ChiPartial | partial:m1796_12 | +| ir.cpp:1796:39:1796:39 | ChiPartial | partial:m1796_14 | +| ir.cpp:1796:39:1796:39 | ChiPartial | partial:m1796_19 | +| ir.cpp:1796:39:1796:39 | ChiPartial | partial:m1796_21 | +| ir.cpp:1796:39:1796:39 | ChiTotal | total:m1796_4 | +| ir.cpp:1796:39:1796:39 | ChiTotal | total:m1796_13 | +| ir.cpp:1796:39:1796:39 | ChiTotal | total:m1796_15 | +| ir.cpp:1796:39:1796:39 | ChiTotal | total:m1796_20 | +| ir.cpp:1796:39:1796:39 | SideEffect | ~m1796_4 | +| ir.cpp:1796:39:1796:39 | SideEffect | ~m1796_15 | +| ir.cpp:1799:5:1799:34 | Address | &:r1799_5 | +| ir.cpp:1799:5:1799:34 | ChiPartial | partial:m1799_3 | +| ir.cpp:1799:5:1799:34 | ChiTotal | total:m1799_2 | +| ir.cpp:1799:5:1799:34 | Load | m1804_2 | +| ir.cpp:1799:5:1799:34 | SideEffect | ~m1803_10 | +| ir.cpp:1800:51:1800:51 | Address | &:r1800_1 | +| ir.cpp:1800:51:1800:51 | Address | &:r1800_1 | +| ir.cpp:1800:51:1800:51 | Address | &:r1800_3 | +| ir.cpp:1800:51:1800:51 | Address | &:r1800_3 | +| ir.cpp:1800:51:1800:51 | Load | m1800_2 | +| ir.cpp:1800:51:1800:51 | SideEffect | m1800_4 | +| ir.cpp:1801:48:1801:48 | Address | &:r1801_1 | +| ir.cpp:1801:48:1801:48 | Address | &:r1801_1 | +| ir.cpp:1801:48:1801:48 | Address | &:r1801_3 | +| ir.cpp:1801:48:1801:48 | Address | &:r1801_3 | +| ir.cpp:1801:48:1801:48 | Load | m1801_2 | +| ir.cpp:1801:48:1801:48 | SideEffect | m1801_4 | +| ir.cpp:1802:40:1802:41 | Address | &:r1802_1 | +| ir.cpp:1802:40:1802:41 | Address | &:r1802_1 | +| ir.cpp:1802:40:1802:41 | Arg(this) | this:r1802_1 | +| ir.cpp:1802:44:1802:45 | CallTarget | func:r1802_3 | +| ir.cpp:1802:44:1802:45 | ChiPartial | partial:m1802_9 | +| ir.cpp:1802:44:1802:45 | ChiPartial | partial:m1802_12 | +| ir.cpp:1802:44:1802:45 | ChiTotal | total:m1799_4 | +| ir.cpp:1802:44:1802:45 | ChiTotal | total:m1802_2 | +| ir.cpp:1802:44:1802:45 | SideEffect | ~m1799_4 | +| ir.cpp:1802:45:1802:45 | Address | &:r1802_4 | +| ir.cpp:1802:45:1802:45 | Address | &:r1802_7 | +| ir.cpp:1802:45:1802:45 | Arg(0) | 0:r1802_7 | +| ir.cpp:1802:45:1802:45 | Load | m1800_2 | +| ir.cpp:1802:45:1802:45 | SideEffect | ~m1800_4 | +| ir.cpp:1802:45:1802:45 | Unary | r1802_5 | +| ir.cpp:1802:45:1802:45 | Unary | r1802_6 | +| ir.cpp:1803:37:1803:38 | Address | &:r1803_1 | +| ir.cpp:1803:37:1803:38 | Address | &:r1803_1 | +| ir.cpp:1803:37:1803:38 | Arg(this) | this:r1803_1 | +| ir.cpp:1803:41:1803:42 | CallTarget | func:r1803_3 | +| ir.cpp:1803:41:1803:42 | ChiPartial | partial:m1803_9 | +| ir.cpp:1803:41:1803:42 | ChiPartial | partial:m1803_12 | +| ir.cpp:1803:41:1803:42 | ChiTotal | total:m1802_10 | +| ir.cpp:1803:41:1803:42 | ChiTotal | total:m1803_2 | +| ir.cpp:1803:41:1803:42 | SideEffect | ~m1802_10 | +| ir.cpp:1803:42:1803:42 | Address | &:r1803_4 | +| ir.cpp:1803:42:1803:42 | Address | &:r1803_7 | +| ir.cpp:1803:42:1803:42 | Arg(0) | 0:r1803_7 | +| ir.cpp:1803:42:1803:42 | Load | m1801_2 | +| ir.cpp:1803:42:1803:42 | SideEffect | ~m1801_4 | +| ir.cpp:1803:42:1803:42 | Unary | r1803_5 | +| ir.cpp:1803:42:1803:42 | Unary | r1803_6 | +| ir.cpp:1804:1:1804:1 | Address | &:r1804_1 | +| ir.cpp:1806:6:1806:22 | ChiPartial | partial:m1806_3 | +| ir.cpp:1806:6:1806:22 | ChiTotal | total:m1806_2 | +| ir.cpp:1806:6:1806:22 | SideEffect | m1806_3 | +| ir.cpp:1806:28:1806:28 | Address | &:r1806_5 | +| ir.cpp:1807:13:1807:13 | Address | &:r1807_1 | +| ir.cpp:1807:17:1807:17 | Address | &:r1807_2 | +| ir.cpp:1807:17:1807:17 | Load | m1806_6 | +| ir.cpp:1807:17:1807:17 | StoreValue | r1807_3 | +| ir.cpp:1807:20:1807:20 | Address | &:r1807_5 | +| ir.cpp:1807:20:1807:20 | Left | r1807_6 | +| ir.cpp:1807:20:1807:20 | Load | m1806_6 | +| ir.cpp:1807:20:1807:24 | Condition | r1807_10 | +| ir.cpp:1807:20:1807:24 | Left | r1807_8 | +| ir.cpp:1807:20:1807:24 | Right | r1807_9 | +| ir.cpp:1807:24:1807:24 | Right | r1807_7 | +| ir.cpp:1808:9:1808:9 | Address | &:r1808_6 | +| ir.cpp:1808:13:1808:13 | Address | &:r1808_1 | +| ir.cpp:1808:13:1808:13 | Left | r1808_2 | +| ir.cpp:1808:13:1808:13 | Load | m1806_6 | +| ir.cpp:1808:13:1808:17 | StoreValue | r1808_5 | +| ir.cpp:1808:17:1808:17 | Address | &:r1808_3 | +| ir.cpp:1808:17:1808:17 | Load | m1807_4 | +| ir.cpp:1808:17:1808:17 | Right | r1808_4 | +| ir.cpp:1811:9:1811:9 | Address | &:r1811_2 | +| ir.cpp:1811:9:1811:9 | Phi | from 0:m1806_6 | +| ir.cpp:1811:9:1811:9 | Phi | from 1:m1808_7 | +| ir.cpp:1812:9:1812:9 | Address | &:r1812_3 | | ir.cpp:1812:13:1812:13 | Address | &:r1812_1 | -| ir.cpp:1812:13:1812:13 | Left | r1812_2 | -| ir.cpp:1812:13:1812:13 | Load | m1806_7 | -| ir.cpp:1812:13:1812:17 | StoreValue | r1812_5 | -| ir.cpp:1812:17:1812:17 | Address | &:r1812_3 | -| ir.cpp:1812:17:1812:17 | Load | m1809_4 | -| ir.cpp:1812:17:1812:17 | Right | r1812_4 | -| ir.cpp:1815:13:1815:22 | Address | &:r1815_1 | -| ir.cpp:1815:13:1815:22 | Condition | r1815_7 | -| ir.cpp:1815:17:1815:18 | Address | &:r1815_5 | -| ir.cpp:1815:17:1815:18 | Load | m1815_4 | -| ir.cpp:1815:17:1815:18 | Unary | r1815_6 | -| ir.cpp:1815:22:1815:22 | Address | &:r1815_2 | -| ir.cpp:1815:22:1815:22 | Load | m1809_4 | -| ir.cpp:1815:22:1815:22 | StoreValue | r1815_3 | -| ir.cpp:1817:9:1817:9 | Address | &:r1817_3 | -| ir.cpp:1817:9:1817:9 | Address | &:r1817_3 | -| ir.cpp:1817:9:1817:9 | Left | r1817_4 | -| ir.cpp:1817:9:1817:9 | Load | m1812_7 | -| ir.cpp:1817:9:1817:15 | StoreValue | r1817_5 | -| ir.cpp:1817:14:1817:15 | Address | &:r1817_1 | -| ir.cpp:1817:14:1817:15 | Load | m1815_4 | -| ir.cpp:1817:14:1817:15 | Right | r1817_2 | -| ir.cpp:1823:5:1823:12 | Address | &:r1823_3 | -| ir.cpp:1823:5:1823:12 | SideEffect | ~m1823_6 | -| ir.cpp:1823:16:1823:16 | ChiPartial | partial:m1823_5 | -| ir.cpp:1823:16:1823:16 | ChiTotal | total:m1823_2 | -| ir.cpp:1823:16:1823:16 | StoreValue | r1823_4 | -| ir.cpp:1827:18:1827:25 | Address | &:r1827_3 | -| ir.cpp:1827:18:1827:25 | Arg(this) | this:r1827_3 | -| ir.cpp:1827:18:1827:25 | SideEffect | ~m1827_10 | -| ir.cpp:1827:27:1827:27 | Arg(0) | 0:r1827_5 | -| ir.cpp:1827:27:1827:28 | CallTarget | func:r1827_4 | -| ir.cpp:1827:27:1827:28 | ChiPartial | partial:m1827_7 | -| ir.cpp:1827:27:1827:28 | ChiPartial | partial:m1827_9 | -| ir.cpp:1827:27:1827:28 | ChiTotal | total:m1827_2 | -| ir.cpp:1827:27:1827:28 | ChiTotal | total:m1827_8 | -| ir.cpp:1827:27:1827:28 | SideEffect | ~m1827_2 | -| ir.cpp:1829:18:1829:25 | Address | &:r1829_3 | -| ir.cpp:1829:18:1829:25 | Arg(this) | this:r1829_3 | -| ir.cpp:1829:18:1829:25 | SideEffect | ~m1829_10 | -| ir.cpp:1829:28:1829:47 | CallTarget | func:r1829_4 | -| ir.cpp:1829:28:1829:47 | ChiPartial | partial:m1829_7 | -| ir.cpp:1829:28:1829:47 | ChiPartial | partial:m1829_9 | -| ir.cpp:1829:28:1829:47 | ChiTotal | total:m1829_2 | -| ir.cpp:1829:28:1829:47 | ChiTotal | total:m1829_8 | -| ir.cpp:1829:28:1829:47 | SideEffect | ~m1829_2 | -| ir.cpp:1829:46:1829:46 | Arg(0) | 0:r1829_5 | -| ir.cpp:1831:7:1831:19 | Address | &:r1831_3 | -| ir.cpp:1831:7:1831:19 | SideEffect | ~m1831_8 | -| ir.cpp:1831:23:1831:37 | ChiPartial | partial:m1831_7 | -| ir.cpp:1831:23:1831:37 | ChiTotal | total:m1831_2 | -| ir.cpp:1831:23:1831:37 | StoreValue | r1831_6 | -| ir.cpp:1831:23:1831:37 | Unary | r1831_4 | -| ir.cpp:1831:23:1831:37 | Unary | r1831_5 | -| ir.cpp:1833:5:1833:12 | Address | &:r1833_3 | -| ir.cpp:1833:5:1833:12 | SideEffect | ~m1833_7 | -| ir.cpp:1833:16:1833:23 | Address | &:r1833_4 | -| ir.cpp:1833:16:1833:23 | ChiPartial | partial:m1833_6 | -| ir.cpp:1833:16:1833:23 | ChiTotal | total:m1833_2 | -| ir.cpp:1833:16:1833:23 | Load | ~m1833_2 | -| ir.cpp:1833:16:1833:23 | StoreValue | r1833_5 | -| ir.cpp:1836:11:1836:11 | Address | &:r1836_5 | -| ir.cpp:1836:11:1836:11 | Address | &:r1836_5 | -| ir.cpp:1836:11:1836:11 | Address | &:r1836_7 | -| ir.cpp:1836:11:1836:11 | Address | &:r1836_7 | -| ir.cpp:1836:11:1836:11 | Address | &:r1836_10 | -| ir.cpp:1836:11:1836:11 | ChiPartial | partial:m1836_3 | -| ir.cpp:1836:11:1836:11 | ChiTotal | total:m1836_2 | -| ir.cpp:1836:11:1836:11 | Load | m0_20 | -| ir.cpp:1836:11:1836:11 | Load | m1836_6 | -| ir.cpp:1836:11:1836:11 | SideEffect | m0_14 | -| ir.cpp:1836:11:1836:11 | SideEffect | m1836_3 | -| ir.cpp:1841:12:1841:12 | Address | &:r1841_5 | -| ir.cpp:1841:12:1841:12 | Address | &:r1841_5 | -| ir.cpp:1841:12:1841:12 | Address | &:r1841_7 | -| ir.cpp:1841:12:1841:12 | Address | &:r1841_7 | -| ir.cpp:1841:12:1841:12 | Address | &:r1841_9 | -| ir.cpp:1841:12:1841:12 | Address | &:r1841_12 | -| ir.cpp:1841:12:1841:12 | Address | &:r1841_20 | -| ir.cpp:1841:12:1841:12 | Arg(this) | this:r0_5 | -| ir.cpp:1841:12:1841:12 | CallTarget | func:r1841_11 | -| ir.cpp:1841:12:1841:12 | ChiPartial | partial:m1841_3 | -| ir.cpp:1841:12:1841:12 | ChiPartial | partial:m1841_17 | -| ir.cpp:1841:12:1841:12 | ChiTotal | total:m1841_2 | -| ir.cpp:1841:12:1841:12 | ChiTotal | total:m1841_4 | -| ir.cpp:1841:12:1841:12 | Load | m0_2 | -| ir.cpp:1841:12:1841:12 | Load | m0_21 | -| ir.cpp:1841:12:1841:12 | Load | m1841_6 | -| ir.cpp:1841:12:1841:12 | Load | m1841_6 | -| ir.cpp:1841:12:1841:12 | SideEffect | m0_12 | -| ir.cpp:1841:12:1841:12 | SideEffect | ~m1841_4 | -| ir.cpp:1841:12:1841:12 | SideEffect | ~m1841_18 | -| ir.cpp:1841:12:1841:12 | Unary | r1841_10 | -| ir.cpp:1841:12:1841:12 | Unary | r1841_13 | -| ir.cpp:1841:12:1841:12 | Unary | r1841_14 | -| ir.cpp:1841:12:1841:12 | Unary | r1841_15 | -| ir.cpp:1841:12:1841:12 | Unary | r1841_16 | -| ir.cpp:1845:10:1845:12 | ChiPartial | partial:m1845_3 | -| ir.cpp:1845:10:1845:12 | ChiTotal | total:m1845_2 | -| ir.cpp:1845:10:1845:12 | SideEffect | ~m1847_18 | -| ir.cpp:1846:11:1846:11 | Address | &:r1846_1 | -| ir.cpp:1846:11:1846:11 | Address | &:r1846_1 | -| ir.cpp:1846:11:1846:11 | Arg(this) | this:r1846_1 | -| ir.cpp:1846:13:1846:13 | Address | &:r1846_4 | -| ir.cpp:1846:13:1846:13 | Address | &:r1846_4 | -| ir.cpp:1846:13:1846:13 | Arg(0) | 0:r1846_4 | -| ir.cpp:1846:13:1846:13 | ChiPartial | partial:m1846_11 | -| ir.cpp:1846:13:1846:13 | ChiTotal | total:m1846_7 | -| ir.cpp:1846:13:1846:13 | SideEffect | ~m1846_7 | -| ir.cpp:1846:13:1846:14 | CallTarget | func:r1846_3 | -| ir.cpp:1846:13:1846:14 | ChiPartial | partial:m1846_6 | -| ir.cpp:1846:13:1846:14 | ChiPartial | partial:m1846_9 | -| ir.cpp:1846:13:1846:14 | ChiTotal | total:m1845_4 | -| ir.cpp:1846:13:1846:14 | ChiTotal | total:m1846_2 | -| ir.cpp:1846:13:1846:14 | SideEffect | ~m1845_4 | -| ir.cpp:1847:9:1847:9 | Address | &:r1847_1 | -| ir.cpp:1847:9:1847:9 | Address | &:r1847_1 | -| ir.cpp:1847:9:1847:9 | Arg(this) | this:r1847_1 | -| ir.cpp:1847:9:1847:9 | ChiPartial | partial:m1847_21 | -| ir.cpp:1847:9:1847:9 | ChiTotal | total:m1846_10 | -| ir.cpp:1847:9:1847:9 | SideEffect | m1846_10 | -| ir.cpp:1847:11:1847:11 | CallTarget | func:r1847_2 | -| ir.cpp:1847:11:1847:11 | ChiPartial | partial:m1847_17 | -| ir.cpp:1847:11:1847:11 | ChiTotal | total:m1847_14 | -| ir.cpp:1847:11:1847:11 | SideEffect | ~m1847_14 | -| ir.cpp:1847:11:1847:11 | Unary | r1847_16 | -| ir.cpp:1847:13:1847:13 | Address | &:r1847_3 | -| ir.cpp:1847:13:1847:13 | Address | &:r1847_3 | -| ir.cpp:1847:13:1847:13 | Address | &:r1847_6 | -| ir.cpp:1847:13:1847:13 | Address | &:r1847_6 | -| ir.cpp:1847:13:1847:13 | Address | &:r1847_15 | -| ir.cpp:1847:13:1847:13 | Address | &:r1847_15 | -| ir.cpp:1847:13:1847:13 | Arg(0) | 0:r1847_6 | -| ir.cpp:1847:13:1847:13 | Arg(0) | 0:r1847_15 | -| ir.cpp:1847:13:1847:13 | Arg(this) | this:r1847_3 | -| ir.cpp:1847:13:1847:13 | CallTarget | func:r1847_5 | -| ir.cpp:1847:13:1847:13 | ChiPartial | partial:m1847_8 | -| ir.cpp:1847:13:1847:13 | ChiPartial | partial:m1847_11 | -| ir.cpp:1847:13:1847:13 | ChiPartial | partial:m1847_13 | -| ir.cpp:1847:13:1847:13 | ChiPartial | partial:m1847_23 | -| ir.cpp:1847:13:1847:13 | ChiTotal | total:m1846_12 | -| ir.cpp:1847:13:1847:13 | ChiTotal | total:m1847_4 | -| ir.cpp:1847:13:1847:13 | ChiTotal | total:m1847_9 | -| ir.cpp:1847:13:1847:13 | ChiTotal | total:m1847_12 | -| ir.cpp:1847:13:1847:13 | SideEffect | ~m1846_12 | -| ir.cpp:1847:13:1847:13 | SideEffect | ~m1847_9 | -| ir.cpp:1847:13:1847:13 | SideEffect | ~m1847_12 | -| ir.cpp:1847:13:1847:13 | Unary | r1847_3 | -| ir.cpp:1851:6:1851:14 | ChiPartial | partial:m1851_3 | -| ir.cpp:1851:6:1851:14 | ChiTotal | total:m1851_2 | -| ir.cpp:1851:6:1851:14 | SideEffect | m1851_3 | -| ir.cpp:1852:17:1852:18 | Address | &:r1852_1 | -| ir.cpp:1852:22:1852:40 | StoreValue | r1852_3 | -| ir.cpp:1852:22:1852:40 | Unary | r1852_2 | -| ir.cpp:1853:17:1853:23 | Address | &:r1853_1 | -| ir.cpp:1853:27:1853:34 | StoreValue | r1853_3 | -| ir.cpp:1853:27:1853:34 | Unary | r1853_2 | -| ir.cpp:1864:15:1864:15 | Address | &:r1864_5 | -| ir.cpp:1864:15:1864:15 | Address | &:r1864_5 | -| ir.cpp:1864:15:1864:15 | Address | &:r1864_7 | -| ir.cpp:1864:15:1864:15 | Address | &:r1864_7 | -| ir.cpp:1864:15:1864:15 | Address | &:r1864_15 | -| ir.cpp:1864:15:1864:15 | ChiPartial | partial:m1864_3 | -| ir.cpp:1864:15:1864:15 | ChiTotal | total:m1864_2 | -| ir.cpp:1864:15:1864:15 | Load | m1864_6 | -| ir.cpp:1864:15:1864:15 | Load | m1866_5 | -| ir.cpp:1864:15:1864:15 | SideEffect | m1864_3 | -| ir.cpp:1864:15:1864:15 | SideEffect | m1864_8 | -| ir.cpp:1864:47:1864:47 | Address | &:r1864_9 | -| ir.cpp:1864:47:1864:47 | Address | &:r1864_9 | -| ir.cpp:1864:47:1864:47 | Address | &:r1864_11 | -| ir.cpp:1864:47:1864:47 | Address | &:r1864_11 | -| ir.cpp:1864:47:1864:47 | Load | m1864_10 | -| ir.cpp:1864:47:1864:47 | SideEffect | m1864_12 | -| ir.cpp:1866:13:1866:21 | Address | &:r1866_1 | -| ir.cpp:1866:20:1866:20 | Address | &:r1866_2 | -| ir.cpp:1866:20:1866:20 | Load | m1864_10 | -| ir.cpp:1866:20:1866:20 | StoreValue | r1866_4 | -| ir.cpp:1866:20:1866:20 | Unary | r1866_3 | -| ir.cpp:1870:10:1870:14 | ChiPartial | partial:m1870_3 | -| ir.cpp:1870:10:1870:14 | ChiTotal | total:m1870_2 | -| ir.cpp:1870:10:1870:14 | SideEffect | ~m1872_12 | -| ir.cpp:1871:19:1871:19 | Address | &:r1871_1 | -| ir.cpp:1872:9:1872:9 | Address | &:r1872_1 | -| ir.cpp:1872:9:1872:9 | Address | &:r1872_1 | -| ir.cpp:1872:9:1872:9 | Arg(this) | this:r1872_1 | -| ir.cpp:1872:9:1872:9 | ChiPartial | partial:m1872_9 | -| ir.cpp:1872:9:1872:9 | ChiTotal | total:m1871_2 | -| ir.cpp:1872:9:1872:9 | SideEffect | m1871_2 | -| ir.cpp:1872:11:1872:33 | CallTarget | func:r1872_2 | -| ir.cpp:1872:11:1872:33 | ChiPartial | partial:m1872_5 | -| ir.cpp:1872:11:1872:33 | ChiTotal | total:m1870_4 | -| ir.cpp:1872:11:1872:33 | SideEffect | ~m1870_4 | -| ir.cpp:1872:35:1872:41 | Address | &:r1872_3 | -| ir.cpp:1872:35:1872:41 | Address | &:r1872_3 | -| ir.cpp:1872:35:1872:41 | Arg(0) | 0:r1872_3 | -| ir.cpp:1872:35:1872:41 | ChiPartial | partial:m1872_11 | -| ir.cpp:1872:35:1872:41 | ChiTotal | total:m1872_6 | -| ir.cpp:1872:35:1872:41 | SideEffect | ~m1872_6 | -| ir.cpp:1877:13:1877:13 | Address | &:r1877_5 | -| ir.cpp:1877:13:1877:13 | Address | &:r1877_5 | -| ir.cpp:1877:13:1877:13 | Address | &:r1877_7 | -| ir.cpp:1877:13:1877:13 | Address | &:r1877_7 | -| ir.cpp:1877:13:1877:13 | Address | &:r1877_10 | -| ir.cpp:1877:13:1877:13 | ChiPartial | partial:m1877_3 | -| ir.cpp:1877:13:1877:13 | ChiTotal | total:m1877_2 | -| ir.cpp:1877:13:1877:13 | Load | m1877_6 | -| ir.cpp:1877:13:1877:13 | Load | m1881_9 | -| ir.cpp:1877:13:1877:13 | SideEffect | m1877_3 | -| ir.cpp:1877:13:1877:13 | SideEffect | m1877_8 | -| ir.cpp:1878:13:1878:29 | Address | &:r1878_1 | -| ir.cpp:1878:13:1878:29 | Address | &:r1878_3 | -| ir.cpp:1879:13:1879:14 | Address | &:r1879_4 | -| ir.cpp:1879:13:1879:19 | ChiPartial | partial:m1879_5 | -| ir.cpp:1879:13:1879:19 | ChiTotal | total:m1878_2 | -| ir.cpp:1879:14:1879:14 | Unary | r1879_2 | -| ir.cpp:1879:14:1879:14 | Unary | r1879_3 | -| ir.cpp:1879:18:1879:19 | StoreValue | r1879_1 | -| ir.cpp:1880:13:1880:14 | Address | &:r1880_4 | -| ir.cpp:1880:13:1880:19 | ChiPartial | partial:m1880_5 | -| ir.cpp:1880:13:1880:19 | ChiTotal | total:m1878_4 | -| ir.cpp:1880:14:1880:14 | Unary | r1880_2 | -| ir.cpp:1880:14:1880:14 | Unary | r1880_3 | -| ir.cpp:1880:18:1880:19 | StoreValue | r1880_1 | -| ir.cpp:1881:13:1881:27 | Address | &:r1881_1 | -| ir.cpp:1881:20:1881:21 | Left | r1881_4 | -| ir.cpp:1881:20:1881:21 | Load | m1879_5 | -| ir.cpp:1881:20:1881:26 | StoreValue | r1881_8 | -| ir.cpp:1881:21:1881:21 | Address | &:r1881_3 | -| ir.cpp:1881:21:1881:21 | Unary | r1881_2 | -| ir.cpp:1881:25:1881:26 | Load | m1880_5 | -| ir.cpp:1881:25:1881:26 | Right | r1881_7 | -| ir.cpp:1881:26:1881:26 | Address | &:r1881_6 | -| ir.cpp:1881:26:1881:26 | Unary | r1881_5 | -| ir.cpp:1885:10:1885:14 | ChiPartial | partial:m1885_3 | -| ir.cpp:1885:10:1885:14 | ChiTotal | total:m1885_2 | -| ir.cpp:1885:10:1885:14 | SideEffect | ~m1887_5 | -| ir.cpp:1886:19:1886:19 | Address | &:r1886_1 | -| ir.cpp:1887:9:1887:9 | Address | &:r1887_1 | -| ir.cpp:1887:9:1887:9 | Address | &:r1887_1 | -| ir.cpp:1887:9:1887:9 | Arg(this) | this:r1887_1 | -| ir.cpp:1887:9:1887:9 | ChiPartial | partial:m1887_7 | -| ir.cpp:1887:9:1887:9 | ChiTotal | total:m1886_2 | -| ir.cpp:1887:9:1887:9 | SideEffect | m1886_2 | -| ir.cpp:1887:11:1887:50 | CallTarget | func:r1887_2 | -| ir.cpp:1887:11:1887:50 | ChiPartial | partial:m1887_4 | -| ir.cpp:1887:11:1887:50 | ChiTotal | total:m1885_4 | -| ir.cpp:1887:11:1887:50 | SideEffect | ~m1885_4 | -| ir.cpp:1891:24:1891:24 | Address | &:r1891_3 | -| ir.cpp:1891:24:1891:24 | Address | &:r1891_3 | -| ir.cpp:1891:24:1891:24 | SideEffect | ~m1891_6 | -| ir.cpp:1891:24:1891:24 | SideEffect | ~m1891_6 | -| ir.cpp:1891:42:1891:43 | ChiPartial | partial:m1891_5 | -| ir.cpp:1891:42:1891:43 | ChiPartial | partial:m1891_5 | -| ir.cpp:1891:42:1891:43 | ChiTotal | total:m1891_2 | -| ir.cpp:1891:42:1891:43 | ChiTotal | total:m1891_2 | -| ir.cpp:1891:42:1891:43 | StoreValue | r1891_4 | -| ir.cpp:1891:42:1891:43 | StoreValue | r1891_4 | -| ir.cpp:1893:5:1893:28 | Address | &:r1893_5 | -| ir.cpp:1893:5:1893:28 | ChiPartial | partial:m1893_3 | -| ir.cpp:1893:5:1893:28 | ChiTotal | total:m1893_2 | -| ir.cpp:1893:5:1893:28 | Load | m1896_8 | -| ir.cpp:1893:5:1893:28 | SideEffect | m1893_3 | -| ir.cpp:1894:9:1894:17 | Address | &:r1894_1 | -| ir.cpp:1894:21:1894:40 | Address | &:r1894_2 | -| ir.cpp:1894:21:1894:40 | Load | ~m1893_3 | -| ir.cpp:1894:21:1894:40 | StoreValue | r1894_3 | -| ir.cpp:1895:10:1895:19 | Address | &:r1895_1 | -| ir.cpp:1895:23:1895:43 | Address | &:r1895_2 | -| ir.cpp:1895:23:1895:43 | Load | ~m1893_3 | -| ir.cpp:1895:23:1895:43 | StoreValue | r1895_3 | -| ir.cpp:1896:5:1896:39 | Address | &:r1896_1 | -| ir.cpp:1896:12:1896:20 | Address | &:r1896_2 | -| ir.cpp:1896:12:1896:20 | Left | r1896_3 | -| ir.cpp:1896:12:1896:20 | Load | m1894_4 | -| ir.cpp:1896:12:1896:38 | StoreValue | r1896_7 | -| ir.cpp:1896:24:1896:38 | Right | r1896_6 | -| ir.cpp:1896:29:1896:38 | Address | &:r1896_4 | -| ir.cpp:1896:29:1896:38 | Load | m1895_4 | -| ir.cpp:1896:29:1896:38 | Unary | r1896_5 | -| ir.cpp:1901:5:1901:16 | Address | &:r1901_7 | -| ir.cpp:1901:5:1901:16 | ChiPartial | partial:m1901_3 | -| ir.cpp:1901:5:1901:16 | ChiTotal | total:m1901_2 | -| ir.cpp:1901:5:1901:16 | Load | m1903_4 | -| ir.cpp:1901:5:1901:16 | SideEffect | m1901_3 | -| ir.cpp:1901:22:1901:22 | Address | &:r1901_5 | -| ir.cpp:1902:9:1902:9 | Address | &:r1902_1 | -| ir.cpp:1902:9:1902:9 | Left | r1902_2 | -| ir.cpp:1902:9:1902:9 | Load | m1901_6 | -| ir.cpp:1902:9:1902:14 | Condition | r1902_4 | -| ir.cpp:1902:13:1902:14 | Right | r1902_3 | -| ir.cpp:1903:9:1903:17 | Address | &:r1903_1 | -| ir.cpp:1903:16:1903:16 | Address | &:r1903_2 | -| ir.cpp:1903:16:1903:16 | Load | m1901_6 | -| ir.cpp:1903:16:1903:16 | StoreValue | r1903_3 | -| ir.cpp:1905:9:1905:20 | CallTarget | func:r1905_1 | -| ir.cpp:1905:9:1905:20 | ChiPartial | partial:m1905_3 | -| ir.cpp:1905:9:1905:20 | ChiTotal | total:m1901_4 | -| ir.cpp:1905:9:1905:20 | SideEffect | ~m1901_4 | -| ir.cpp:1909:5:1909:17 | Address | &:r1909_8 | -| ir.cpp:1909:5:1909:17 | ChiPartial | partial:m1909_3 | -| ir.cpp:1909:5:1909:17 | ChiTotal | total:m1909_2 | -| ir.cpp:1909:5:1909:17 | Load | m1913_4 | -| ir.cpp:1909:5:1909:17 | SideEffect | m1909_3 | -| ir.cpp:1909:23:1909:23 | Address | &:r1909_5 | -| ir.cpp:1910:9:1910:9 | Address | &:r1910_1 | -| ir.cpp:1910:9:1910:9 | Left | r1910_2 | -| ir.cpp:1910:9:1910:9 | Load | m1909_6 | -| ir.cpp:1910:9:1910:14 | Condition | r1910_4 | -| ir.cpp:1910:13:1910:14 | Right | r1910_3 | -| ir.cpp:1911:9:1911:20 | CallTarget | func:r1911_1 | -| ir.cpp:1911:9:1911:20 | ChiPartial | partial:m1911_3 | -| ir.cpp:1911:9:1911:20 | ChiTotal | total:m1909_4 | -| ir.cpp:1911:9:1911:20 | SideEffect | ~m1909_4 | -| ir.cpp:1913:5:1913:13 | Address | &:r1913_1 | -| ir.cpp:1913:12:1913:12 | Address | &:r1913_2 | -| ir.cpp:1913:12:1913:12 | Load | m1909_6 | -| ir.cpp:1913:12:1913:12 | StoreValue | r1913_3 | -| ir.cpp:1916:5:1916:19 | Address | &:r1916_7 | -| ir.cpp:1916:5:1916:19 | ChiPartial | partial:m1916_3 | -| ir.cpp:1916:5:1916:19 | ChiTotal | total:m1916_2 | -| ir.cpp:1916:5:1916:19 | Load | m1917_4 | -| ir.cpp:1916:5:1916:19 | SideEffect | m1916_3 | -| ir.cpp:1916:25:1916:25 | Address | &:r1916_5 | -| ir.cpp:1917:5:1917:13 | Address | &:r1917_1 | -| ir.cpp:1917:12:1917:12 | Address | &:r1917_2 | -| ir.cpp:1917:12:1917:12 | Load | m1916_6 | -| ir.cpp:1917:12:1917:12 | StoreValue | r1917_3 | -| ir.cpp:1920:6:1920:43 | ChiPartial | partial:m1920_3 | -| ir.cpp:1920:6:1920:43 | ChiTotal | total:m1920_2 | -| ir.cpp:1920:6:1920:43 | SideEffect | ~m1928_6 | -| ir.cpp:1921:7:1921:7 | Address | &:r1921_1 | -| ir.cpp:1921:7:1921:7 | Address | &:r1921_1 | -| ir.cpp:1921:7:1921:7 | Arg(this) | this:r1921_1 | -| ir.cpp:1921:7:1921:7 | CallTarget | func:r1921_3 | -| ir.cpp:1921:7:1921:7 | ChiPartial | partial:m1921_5 | -| ir.cpp:1921:7:1921:7 | ChiPartial | partial:m1921_7 | -| ir.cpp:1921:7:1921:7 | ChiTotal | total:m1920_4 | -| ir.cpp:1921:7:1921:7 | ChiTotal | total:m1921_2 | -| ir.cpp:1921:7:1921:7 | SideEffect | ~m1920_4 | -| ir.cpp:1922:9:1922:9 | Address | &:r1922_1 | -| ir.cpp:1923:5:1923:5 | Address | &:r1923_7 | -| ir.cpp:1923:11:1923:30 | CallTarget | func:r1923_2 | -| ir.cpp:1923:11:1923:30 | ChiPartial | partial:m1923_5 | -| ir.cpp:1923:11:1923:30 | ChiTotal | total:m1921_6 | -| ir.cpp:1923:11:1923:30 | SideEffect | ~m1921_6 | -| ir.cpp:1923:11:1923:30 | StoreValue | r1923_4 | -| ir.cpp:1923:32:1923:33 | Arg(0) | 0:r1923_3 | -| ir.cpp:1924:9:1924:9 | Address | &:r1924_1 | -| ir.cpp:1925:5:1925:5 | Address | &:r1925_6 | -| ir.cpp:1925:9:1925:31 | CallTarget | func:r1925_1 | -| ir.cpp:1925:9:1925:31 | ChiPartial | partial:m1925_4 | -| ir.cpp:1925:9:1925:31 | ChiTotal | total:m1923_6 | -| ir.cpp:1925:9:1925:31 | SideEffect | ~m1923_6 | -| ir.cpp:1925:9:1925:31 | StoreValue | r1925_3 | -| ir.cpp:1925:33:1925:34 | Arg(0) | 0:r1925_2 | -| ir.cpp:1926:9:1926:9 | Address | &:r1926_1 | -| ir.cpp:1927:5:1927:5 | Address | &:r1927_6 | -| ir.cpp:1927:9:1927:23 | CallTarget | func:r1927_1 | -| ir.cpp:1927:9:1927:23 | ChiPartial | partial:m1927_4 | -| ir.cpp:1927:9:1927:23 | ChiTotal | total:m1925_5 | -| ir.cpp:1927:9:1927:23 | SideEffect | ~m1925_5 | -| ir.cpp:1927:9:1927:23 | StoreValue | r1927_3 | -| ir.cpp:1927:25:1927:26 | Arg(0) | 0:r1927_2 | -| ir.cpp:1928:1:1928:1 | Address | &:r1928_2 | -| ir.cpp:1928:1:1928:1 | Address | &:r1928_2 | -| ir.cpp:1928:1:1928:1 | Arg(this) | this:r1928_2 | -| ir.cpp:1928:1:1928:1 | CallTarget | func:r1928_3 | -| ir.cpp:1928:1:1928:1 | ChiPartial | partial:m1928_5 | -| ir.cpp:1928:1:1928:1 | ChiPartial | partial:m1928_8 | -| ir.cpp:1928:1:1928:1 | ChiTotal | total:m1921_8 | -| ir.cpp:1928:1:1928:1 | ChiTotal | total:m1927_5 | -| ir.cpp:1928:1:1928:1 | SideEffect | m1921_8 | -| ir.cpp:1928:1:1928:1 | SideEffect | ~m1927_5 | -| ir.cpp:1930:6:1930:23 | ChiPartial | partial:m1930_3 | -| ir.cpp:1930:6:1930:23 | ChiTotal | total:m1930_2 | -| ir.cpp:1930:6:1930:23 | SideEffect | m1930_3 | -| ir.cpp:1931:7:1931:7 | Address | &:r1931_1 | -| ir.cpp:1931:10:1931:10 | Address | &:r1931_3 | -| ir.cpp:1932:3:1932:3 | Address | &:r1932_5 | -| ir.cpp:1932:7:1932:7 | Address | &:r1932_2 | -| ir.cpp:1932:7:1932:7 | Address | &:r1932_2 | -| ir.cpp:1932:7:1932:12 | Load | m1932_3 | -| ir.cpp:1932:7:1932:12 | StoreValue | r1932_4 | -| ir.cpp:1932:11:1932:12 | StoreValue | r1932_1 | -| ir.cpp:1935:6:1935:38 | ChiPartial | partial:m1935_3 | -| ir.cpp:1935:6:1935:38 | ChiTotal | total:m1935_2 | -| ir.cpp:1935:6:1935:38 | SideEffect | m1935_3 | -| ir.cpp:1936:7:1936:7 | Address | &:r1936_1 | -| ir.cpp:1936:10:1936:10 | Address | &:r1936_3 | -| ir.cpp:1936:13:1936:14 | StoreValue | r1936_4 | -| ir.cpp:1937:3:1937:3 | Address | &:r1937_7 | -| ir.cpp:1937:8:1937:8 | Address | &:r1937_2 | -| ir.cpp:1937:8:1937:8 | Address | &:r1937_2 | -| ir.cpp:1937:8:1937:8 | Address | &:r1937_2 | -| ir.cpp:1937:8:1937:8 | Left | r1937_3 | -| ir.cpp:1937:8:1937:8 | Load | m1936_5 | -| ir.cpp:1937:8:1937:14 | Load | m1937_5 | -| ir.cpp:1937:8:1937:14 | StoreValue | r1937_4 | -| ir.cpp:1937:8:1937:14 | StoreValue | r1937_6 | -| ir.cpp:1937:13:1937:14 | Right | r1937_1 | -| ir.cpp:1944:15:1944:43 | Address | &:r1944_5 | -| ir.cpp:1944:15:1944:43 | ChiPartial | partial:m1944_3 | -| ir.cpp:1944:15:1944:43 | ChiTotal | total:m1944_2 | -| ir.cpp:1944:15:1944:43 | Load | m1945_4 | -| ir.cpp:1944:15:1944:43 | SideEffect | m1944_3 | -| ir.cpp:1945:9:1945:17 | Address | &:r1945_1 | -| ir.cpp:1945:16:1945:16 | StoreValue | r1945_3 | -| ir.cpp:1945:16:1945:16 | Unary | r1945_2 | -| ir.cpp:1947:14:1947:39 | Address | &:r1947_5 | -| ir.cpp:1947:14:1947:39 | ChiPartial | partial:m1947_3 | -| ir.cpp:1947:14:1947:39 | ChiTotal | total:m1947_2 | -| ir.cpp:1947:14:1947:39 | Load | m1948_4 | -| ir.cpp:1947:14:1947:39 | SideEffect | m1947_3 | -| ir.cpp:1948:9:1948:17 | Address | &:r1948_1 | -| ir.cpp:1948:16:1948:16 | Address | &:r1948_2 | -| ir.cpp:1948:16:1948:16 | Load | ~m1947_3 | -| ir.cpp:1948:16:1948:16 | StoreValue | r1948_3 | -| ir.cpp:1952:6:1952:55 | ChiPartial | partial:m1952_3 | -| ir.cpp:1952:6:1952:55 | ChiTotal | total:m1952_2 | -| ir.cpp:1952:6:1952:55 | SideEffect | ~m1967_4 | -| ir.cpp:1953:7:1953:7 | Address | &:r1953_1 | -| ir.cpp:1955:7:1955:35 | CallTarget | func:r1955_2 | -| ir.cpp:1955:7:1955:35 | ChiPartial | partial:m1955_4 | -| ir.cpp:1955:7:1955:35 | ChiTotal | total:m1952_4 | -| ir.cpp:1955:7:1955:35 | SideEffect | ~m1952_4 | -| ir.cpp:1955:7:1955:35 | Unary | r1955_3 | -| ir.cpp:1956:5:1956:36 | CallTarget | func:r1956_1 | -| ir.cpp:1956:5:1956:36 | ChiPartial | partial:m1956_3 | -| ir.cpp:1956:5:1956:36 | ChiTotal | total:m1955_5 | -| ir.cpp:1956:5:1956:36 | SideEffect | ~m1955_5 | -| ir.cpp:1956:5:1956:36 | Unary | r1956_2 | -| ir.cpp:1957:7:1957:32 | CallTarget | func:r1957_2 | -| ir.cpp:1957:7:1957:32 | ChiPartial | partial:m1957_4 | -| ir.cpp:1957:7:1957:32 | ChiTotal | total:m1956_4 | -| ir.cpp:1957:7:1957:32 | SideEffect | ~m1956_4 | -| ir.cpp:1958:5:1958:33 | CallTarget | func:r1958_1 | -| ir.cpp:1958:5:1958:33 | ChiPartial | partial:m1958_3 | -| ir.cpp:1958:5:1958:33 | ChiTotal | total:m1957_5 | -| ir.cpp:1958:5:1958:33 | SideEffect | ~m1957_5 | -| ir.cpp:1960:7:1960:7 | Address | &:r1960_1 | -| ir.cpp:1961:5:1961:5 | Address | &:r1961_7 | -| ir.cpp:1961:11:1961:39 | Address | &:r1961_3 | -| ir.cpp:1961:11:1961:39 | CallTarget | func:r1961_2 | -| ir.cpp:1961:11:1961:39 | ChiPartial | partial:m1961_4 | -| ir.cpp:1961:11:1961:39 | ChiTotal | total:m1958_4 | -| ir.cpp:1961:11:1961:39 | SideEffect | ~m1958_4 | -| ir.cpp:1961:40:1961:42 | Load | ~m1961_5 | -| ir.cpp:1961:40:1961:42 | StoreValue | r1961_6 | -| ir.cpp:1962:7:1962:7 | Address | &:r1962_1 | -| ir.cpp:1963:5:1963:5 | Address | &:r1963_6 | -| ir.cpp:1963:9:1963:40 | Address | &:r1963_2 | -| ir.cpp:1963:9:1963:40 | CallTarget | func:r1963_1 | -| ir.cpp:1963:9:1963:40 | ChiPartial | partial:m1963_3 | -| ir.cpp:1963:9:1963:40 | ChiTotal | total:m1961_5 | -| ir.cpp:1963:9:1963:40 | SideEffect | ~m1961_5 | -| ir.cpp:1963:41:1963:43 | Load | ~m1963_4 | -| ir.cpp:1963:41:1963:43 | StoreValue | r1963_5 | -| ir.cpp:1964:7:1964:7 | Address | &:r1964_1 | -| ir.cpp:1965:5:1965:5 | Address | &:r1965_6 | -| ir.cpp:1965:11:1965:36 | CallTarget | func:r1965_2 | -| ir.cpp:1965:11:1965:36 | ChiPartial | partial:m1965_4 | -| ir.cpp:1965:11:1965:36 | ChiTotal | total:m1963_4 | -| ir.cpp:1965:11:1965:36 | SideEffect | ~m1963_4 | -| ir.cpp:1965:11:1965:36 | StoreValue | r1965_3 | -| ir.cpp:1966:7:1966:7 | Address | &:r1966_1 | -| ir.cpp:1967:5:1967:5 | Address | &:r1967_5 | -| ir.cpp:1967:9:1967:37 | CallTarget | func:r1967_1 | -| ir.cpp:1967:9:1967:37 | ChiPartial | partial:m1967_3 | -| ir.cpp:1967:9:1967:37 | ChiTotal | total:m1965_5 | -| ir.cpp:1967:9:1967:37 | SideEffect | ~m1965_5 | -| ir.cpp:1967:9:1967:37 | StoreValue | r1967_2 | -| ir.cpp:1970:6:1970:18 | ChiPartial | partial:m1970_3 | -| ir.cpp:1970:6:1970:18 | ChiTotal | total:m1970_2 | -| ir.cpp:1970:6:1970:18 | SideEffect | m1970_3 | -| ir.cpp:1971:18:1971:18 | Address | &:r1971_1 | -| ir.cpp:1972:5:1972:5 | Address | &:r1972_1 | -| ir.cpp:1972:5:1972:5 | Load | m1971_2 | -| ir.cpp:1981:6:1981:24 | ChiPartial | partial:m1981_3 | -| ir.cpp:1981:6:1981:24 | ChiTotal | total:m1981_2 | -| ir.cpp:1981:6:1981:24 | SideEffect | ~m1989_5 | -| ir.cpp:1982:12:1982:12 | Address | &:r1982_1 | -| ir.cpp:1984:5:1984:19 | ChiPartial | partial:m1984_7 | -| ir.cpp:1984:5:1984:19 | ChiTotal | total:m1984_5 | -| ir.cpp:1984:7:1984:12 | CallTarget | func:r1984_2 | -| ir.cpp:1984:7:1984:12 | ChiPartial | partial:m1984_4 | -| ir.cpp:1984:7:1984:12 | ChiTotal | total:m1981_4 | -| ir.cpp:1984:7:1984:12 | SideEffect | ~m1981_4 | -| ir.cpp:1984:7:1984:12 | Unary | r1984_3 | -| ir.cpp:1984:13:1984:16 | Address | &:r1984_6 | -| ir.cpp:1985:5:1985:19 | ChiPartial | partial:m1985_7 | -| ir.cpp:1985:5:1985:19 | ChiTotal | total:m1985_5 | -| ir.cpp:1985:7:1985:12 | CallTarget | func:r1985_2 | -| ir.cpp:1985:7:1985:12 | ChiPartial | partial:m1985_4 | -| ir.cpp:1985:7:1985:12 | ChiTotal | total:m1984_8 | -| ir.cpp:1985:7:1985:12 | SideEffect | ~m1984_8 | -| ir.cpp:1985:7:1985:12 | Unary | r1985_3 | -| ir.cpp:1985:13:1985:16 | Address | &:r1985_6 | -| ir.cpp:1986:5:1986:15 | Address | &:r1986_1 | -| ir.cpp:1986:5:1986:15 | Address | &:r1986_1 | -| ir.cpp:1986:7:1986:13 | CallTarget | func:r1986_3 | -| ir.cpp:1986:7:1986:13 | ChiPartial | partial:m1986_5 | -| ir.cpp:1986:7:1986:13 | ChiTotal | total:m1985_8 | -| ir.cpp:1986:7:1986:13 | SideEffect | ~m1985_8 | -| ir.cpp:1986:7:1986:13 | StoreValue | r1986_4 | -| ir.cpp:1987:5:1987:18 | CallTarget | func:r1987_1 | -| ir.cpp:1987:5:1987:18 | ChiPartial | partial:m1987_3 | -| ir.cpp:1987:5:1987:18 | ChiTotal | total:m1986_6 | -| ir.cpp:1987:5:1987:18 | SideEffect | ~m1986_6 | -| ir.cpp:1987:5:1987:18 | Unary | r1987_2 | -| ir.cpp:1987:5:1987:25 | ChiPartial | partial:m1987_6 | -| ir.cpp:1987:5:1987:25 | ChiTotal | total:m1987_4 | -| ir.cpp:1987:19:1987:22 | Address | &:r1987_5 | -| ir.cpp:1988:5:1988:18 | CallTarget | func:r1988_1 | -| ir.cpp:1988:5:1988:18 | ChiPartial | partial:m1988_3 | -| ir.cpp:1988:5:1988:18 | ChiTotal | total:m1987_7 | -| ir.cpp:1988:5:1988:18 | SideEffect | ~m1987_7 | -| ir.cpp:1988:5:1988:18 | Unary | r1988_2 | -| ir.cpp:1988:5:1988:25 | ChiPartial | partial:m1988_6 | -| ir.cpp:1988:5:1988:25 | ChiTotal | total:m1988_4 | -| ir.cpp:1988:19:1988:22 | Address | &:r1988_5 | -| ir.cpp:1989:5:1989:19 | CallTarget | func:r1989_2 | -| ir.cpp:1989:5:1989:19 | ChiPartial | partial:m1989_4 | -| ir.cpp:1989:5:1989:19 | ChiTotal | total:m1988_7 | -| ir.cpp:1989:5:1989:19 | SideEffect | ~m1988_7 | -| ir.cpp:1989:5:1989:19 | StoreValue | r1989_3 | -| ir.cpp:1989:5:1989:21 | Address | &:r1989_1 | -| ir.cpp:1989:5:1989:21 | Address | &:r1989_1 | -| ir.cpp:1992:6:1992:21 | ChiPartial | partial:m1992_3 | -| ir.cpp:1992:6:1992:21 | ChiTotal | total:m1992_2 | -| ir.cpp:1992:6:1992:21 | SideEffect | ~m1996_6 | -| ir.cpp:1993:7:1993:7 | Address | &:r1993_1 | -| ir.cpp:1993:7:1993:7 | Address | &:r1993_1 | -| ir.cpp:1993:7:1993:7 | Arg(this) | this:r1993_1 | -| ir.cpp:1993:7:1993:7 | CallTarget | func:r1993_3 | -| ir.cpp:1993:7:1993:7 | ChiPartial | partial:m1993_5 | -| ir.cpp:1993:7:1993:7 | ChiPartial | partial:m1993_7 | -| ir.cpp:1993:7:1993:7 | ChiTotal | total:m1992_4 | -| ir.cpp:1993:7:1993:7 | ChiTotal | total:m1993_2 | -| ir.cpp:1993:7:1993:7 | SideEffect | ~m1992_4 | -| ir.cpp:1994:11:1994:13 | Address | &:r1994_1 | -| ir.cpp:1994:23:1994:45 | StoreValue | r1994_2 | -| ir.cpp:1995:5:1995:7 | Address | &:r1995_3 | -| ir.cpp:1995:13:1995:32 | StoreValue | r1995_2 | -| ir.cpp:1996:1:1996:1 | Address | &:r1996_2 | -| ir.cpp:1996:1:1996:1 | Address | &:r1996_2 | -| ir.cpp:1996:1:1996:1 | Arg(this) | this:r1996_2 | -| ir.cpp:1996:1:1996:1 | CallTarget | func:r1996_3 | -| ir.cpp:1996:1:1996:1 | ChiPartial | partial:m1996_5 | -| ir.cpp:1996:1:1996:1 | ChiPartial | partial:m1996_8 | -| ir.cpp:1996:1:1996:1 | ChiTotal | total:m1993_6 | -| ir.cpp:1996:1:1996:1 | ChiTotal | total:m1993_8 | -| ir.cpp:1996:1:1996:1 | SideEffect | m1993_8 | -| ir.cpp:1996:1:1996:1 | SideEffect | ~m1993_6 | -| ir.cpp:1998:6:1998:19 | ChiPartial | partial:m1998_3 | -| ir.cpp:1998:6:1998:19 | ChiTotal | total:m1998_2 | -| ir.cpp:1998:6:1998:19 | SideEffect | ~m2002_9 | -| ir.cpp:1998:26:1998:26 | Address | &:r1998_5 | -| ir.cpp:1998:33:1998:33 | Address | &:r1998_7 | -| ir.cpp:1998:40:1998:40 | Address | &:r1998_9 | -| ir.cpp:1998:47:1998:47 | Address | &:r1998_11 | -| ir.cpp:1999:5:1999:5 | Address | &:r1999_7 | -| ir.cpp:1999:9:1999:9 | Address | &:r1999_1 | -| ir.cpp:1999:9:1999:9 | Condition | r1999_2 | -| ir.cpp:1999:9:1999:9 | Load | m1998_6 | -| ir.cpp:1999:9:1999:17 | Address | &:r1999_5 | -| ir.cpp:1999:9:1999:17 | Address | &:r1999_11 | -| ir.cpp:1999:9:1999:17 | Address | &:r1999_15 | -| ir.cpp:1999:9:1999:17 | Load | m1999_4 | -| ir.cpp:1999:9:1999:17 | Phi | from 2:m1999_12 | -| ir.cpp:1999:9:1999:17 | Phi | from 3:m1999_16 | -| ir.cpp:1999:9:1999:17 | StoreValue | r1999_6 | -| ir.cpp:1999:13:1999:13 | Address | &:r1999_9 | -| ir.cpp:1999:13:1999:13 | Load | m1998_8 | -| ir.cpp:1999:13:1999:13 | StoreValue | r1999_10 | -| ir.cpp:1999:17:1999:17 | Address | &:r1999_13 | -| ir.cpp:1999:17:1999:17 | Load | m1998_10 | -| ir.cpp:1999:17:1999:17 | StoreValue | r1999_14 | -| ir.cpp:2000:5:2000:5 | Address | &:r2000_7 | -| ir.cpp:2000:9:2000:9 | Address | &:r2000_1 | -| ir.cpp:2000:9:2000:9 | Condition | r2000_2 | -| ir.cpp:2000:9:2000:9 | Load | m1998_6 | -| ir.cpp:2000:9:2000:17 | Address | &:r2000_5 | -| ir.cpp:2000:9:2000:17 | Address | &:r2000_11 | -| ir.cpp:2000:9:2000:17 | Address | &:r2000_14 | -| ir.cpp:2000:9:2000:17 | Load | m2000_4 | -| ir.cpp:2000:9:2000:17 | Phi | from 5:m2000_12 | -| ir.cpp:2000:9:2000:17 | Phi | from 6:m2000_15 | -| ir.cpp:2000:9:2000:17 | StoreValue | r2000_6 | -| ir.cpp:2000:13:2000:13 | Address | &:r2000_9 | -| ir.cpp:2000:13:2000:13 | Load | m1998_8 | -| ir.cpp:2000:13:2000:13 | StoreValue | r2000_10 | -| ir.cpp:2000:17:2000:17 | StoreValue | r2000_13 | -| ir.cpp:2001:5:2001:5 | Address | &:r2001_7 | -| ir.cpp:2001:9:2001:9 | Address | &:r2001_1 | -| ir.cpp:2001:9:2001:9 | Condition | r2001_2 | -| ir.cpp:2001:9:2001:9 | Load | m1998_6 | -| ir.cpp:2001:9:2001:17 | Address | &:r2001_5 | -| ir.cpp:2001:9:2001:17 | Address | &:r2001_10 | -| ir.cpp:2001:9:2001:17 | Address | &:r2001_13 | -| ir.cpp:2001:9:2001:17 | Load | m2001_4 | -| ir.cpp:2001:9:2001:17 | Phi | from 8:m2001_11 | -| ir.cpp:2001:9:2001:17 | Phi | from 9:m2001_14 | -| ir.cpp:2001:9:2001:17 | StoreValue | r2001_6 | -| ir.cpp:2001:13:2001:13 | StoreValue | r2001_9 | -| ir.cpp:2001:17:2001:17 | StoreValue | r2001_12 | -| ir.cpp:2002:5:2002:19 | ChiPartial | partial:m2002_8 | -| ir.cpp:2002:5:2002:19 | ChiTotal | total:m1998_4 | -| ir.cpp:2002:6:2002:6 | Address | &:r2002_2 | -| ir.cpp:2002:6:2002:6 | Condition | r2002_3 | -| ir.cpp:2002:6:2002:6 | Load | m1998_6 | -| ir.cpp:2002:6:2002:14 | Address | &:r2002_6 | -| ir.cpp:2002:6:2002:14 | Address | &:r2002_7 | -| ir.cpp:2002:6:2002:14 | Address | &:r2002_11 | -| ir.cpp:2002:6:2002:14 | Address | &:r2002_14 | -| ir.cpp:2002:6:2002:14 | Load | m2002_5 | -| ir.cpp:2002:6:2002:14 | Phi | from 11:m2002_12 | -| ir.cpp:2002:6:2002:14 | Phi | from 12:m2002_15 | -| ir.cpp:2002:10:2002:10 | StoreValue | r2002_10 | -| ir.cpp:2002:14:2002:14 | StoreValue | r2002_13 | -| ir.cpp:2002:19:2002:19 | StoreValue | r2002_1 | -| ir.cpp:2008:6:2008:22 | ChiPartial | partial:m2008_3 | -| ir.cpp:2008:6:2008:22 | ChiTotal | total:m2008_2 | -| ir.cpp:2008:6:2008:22 | SideEffect | m2008_3 | -| ir.cpp:2008:29:2008:29 | Address | &:r2008_5 | -| ir.cpp:2008:46:2008:46 | Address | &:r2008_7 | -| ir.cpp:2008:63:2008:63 | Address | &:r2008_9 | -| ir.cpp:2008:80:2008:80 | Address | &:r2008_11 | -| ir.cpp:2009:5:2009:5 | Address | &:r2009_7 | -| ir.cpp:2009:9:2009:9 | Address | &:r2009_1 | -| ir.cpp:2009:9:2009:9 | Condition | r2009_2 | -| ir.cpp:2009:9:2009:9 | Load | m2008_6 | -| ir.cpp:2009:9:2009:17 | Address | &:r2009_5 | -| ir.cpp:2009:9:2009:17 | Address | &:r2009_11 | -| ir.cpp:2009:9:2009:17 | Address | &:r2009_15 | -| ir.cpp:2009:9:2009:17 | Load | m2009_4 | -| ir.cpp:2009:9:2009:17 | Phi | from 2:m2009_12 | -| ir.cpp:2009:9:2009:17 | Phi | from 3:m2009_16 | -| ir.cpp:2009:9:2009:17 | StoreValue | r2009_6 | -| ir.cpp:2009:13:2009:13 | Address | &:r2009_9 | -| ir.cpp:2009:13:2009:13 | Load | m2008_8 | -| ir.cpp:2009:13:2009:13 | StoreValue | r2009_10 | -| ir.cpp:2009:17:2009:17 | Address | &:r2009_13 | -| ir.cpp:2009:17:2009:17 | Load | m2008_10 | -| ir.cpp:2009:17:2009:17 | StoreValue | r2009_14 | -| ir.cpp:2010:5:2010:5 | Address | &:r2010_10 | -| ir.cpp:2010:9:2010:9 | Address | &:r2010_2 | -| ir.cpp:2010:9:2010:9 | Address | &:r2010_6 | -| ir.cpp:2010:9:2010:9 | Address | &:r2010_17 | -| ir.cpp:2010:9:2010:9 | Address | &:r2010_23 | -| ir.cpp:2010:9:2010:9 | Condition | r2010_3 | -| ir.cpp:2010:9:2010:9 | Load | m2008_6 | -| ir.cpp:2010:9:2010:9 | Load | m2010_5 | -| ir.cpp:2010:9:2010:9 | Phi | from 5:m2010_18 | -| ir.cpp:2010:9:2010:9 | Phi | from 6:m2010_24 | -| ir.cpp:2010:9:2010:9 | StoreValue | r2010_7 | -| ir.cpp:2010:9:2010:31 | Address | &:r2010_1 | -| ir.cpp:2010:9:2010:31 | Address | &:r2010_1 | -| ir.cpp:2010:9:2010:31 | Load | m2010_8 | -| ir.cpp:2010:9:2010:31 | StoreValue | r2010_9 | -| ir.cpp:2010:13:2010:13 | Address | &:r2010_12 | -| ir.cpp:2010:13:2010:13 | Address | &:r2010_12 | -| ir.cpp:2010:13:2010:13 | Address | &:r2010_13 | -| ir.cpp:2010:13:2010:13 | Load | m2008_8 | -| ir.cpp:2010:13:2010:13 | Load | m2010_15 | -| ir.cpp:2010:13:2010:13 | StoreValue | r2010_14 | -| ir.cpp:2010:13:2010:13 | StoreValue | r2010_16 | -| ir.cpp:2010:17:2010:31 | Address | &:r2010_19 | -| ir.cpp:2010:17:2010:31 | Address | &:r2010_19 | -| ir.cpp:2010:17:2010:31 | Load | m2010_21 | -| ir.cpp:2010:17:2010:31 | StoreValue | r2010_20 | -| ir.cpp:2010:17:2010:31 | StoreValue | r2010_22 | -| ir.cpp:2011:5:2011:5 | Address | &:r2011_10 | -| ir.cpp:2011:9:2011:9 | Address | &:r2011_2 | -| ir.cpp:2011:9:2011:9 | Address | &:r2011_6 | -| ir.cpp:2011:9:2011:9 | Address | &:r2011_16 | -| ir.cpp:2011:9:2011:9 | Address | &:r2011_22 | -| ir.cpp:2011:9:2011:9 | Condition | r2011_3 | -| ir.cpp:2011:9:2011:9 | Load | m2008_6 | -| ir.cpp:2011:9:2011:9 | Load | m2011_5 | -| ir.cpp:2011:9:2011:9 | Phi | from 8:m2011_17 | -| ir.cpp:2011:9:2011:9 | Phi | from 9:m2011_23 | -| ir.cpp:2011:9:2011:9 | StoreValue | r2011_7 | -| ir.cpp:2011:9:2011:45 | Address | &:r2011_1 | -| ir.cpp:2011:9:2011:45 | Address | &:r2011_1 | -| ir.cpp:2011:9:2011:45 | Load | m2011_8 | -| ir.cpp:2011:9:2011:45 | StoreValue | r2011_9 | -| ir.cpp:2011:13:2011:27 | Address | &:r2011_12 | -| ir.cpp:2011:13:2011:27 | Address | &:r2011_12 | -| ir.cpp:2011:13:2011:27 | Load | m2011_14 | -| ir.cpp:2011:13:2011:27 | StoreValue | r2011_13 | -| ir.cpp:2011:13:2011:27 | StoreValue | r2011_15 | -| ir.cpp:2011:31:2011:45 | Address | &:r2011_18 | -| ir.cpp:2011:31:2011:45 | Address | &:r2011_18 | -| ir.cpp:2011:31:2011:45 | Load | m2011_20 | -| ir.cpp:2011:31:2011:45 | StoreValue | r2011_19 | -| ir.cpp:2011:31:2011:45 | StoreValue | r2011_21 | -| ir.cpp:2012:6:2012:6 | Address | &:r2012_11 | -| ir.cpp:2012:6:2012:6 | Unary | r2012_11 | -| ir.cpp:2012:6:2012:18 | Address | &:r2012_13 | -| ir.cpp:2012:10:2012:10 | Address | &:r2012_5 | -| ir.cpp:2012:10:2012:10 | Condition | r2012_6 | -| ir.cpp:2012:10:2012:10 | Load | m2008_6 | -| ir.cpp:2012:10:2012:18 | Address | &:r2012_9 | -| ir.cpp:2012:10:2012:18 | Address | &:r2012_17 | -| ir.cpp:2012:10:2012:18 | Address | &:r2012_21 | -| ir.cpp:2012:10:2012:18 | Load | m2012_8 | -| ir.cpp:2012:10:2012:18 | Phi | from 11:m2012_18 | -| ir.cpp:2012:10:2012:18 | Phi | from 12:m2012_22 | -| ir.cpp:2012:10:2012:18 | StoreValue | r2012_10 | -| ir.cpp:2012:14:2012:14 | Address | &:r2012_15 | -| ir.cpp:2012:14:2012:14 | Load | m2008_8 | -| ir.cpp:2012:14:2012:14 | StoreValue | r2012_16 | -| ir.cpp:2012:18:2012:18 | Address | &:r2012_19 | -| ir.cpp:2012:18:2012:18 | Load | m2008_10 | -| ir.cpp:2012:18:2012:18 | StoreValue | r2012_20 | -| ir.cpp:2012:23:2012:37 | Address | &:r2012_1 | -| ir.cpp:2012:23:2012:37 | Address | &:r2012_1 | -| ir.cpp:2012:23:2012:37 | Load | m2012_3 | -| ir.cpp:2012:23:2012:37 | StoreValue | r2012_2 | -| ir.cpp:2012:23:2012:37 | StoreValue | r2012_4 | -| ir.cpp:2015:8:2015:8 | Address | &:r2015_5 | -| ir.cpp:2015:8:2015:8 | Address | &:r2015_5 | -| ir.cpp:2015:8:2015:8 | Address | &:r2015_5 | -| ir.cpp:2015:8:2015:8 | Address | &:r2015_5 | -| ir.cpp:2015:8:2015:8 | Address | &:r2015_5 | -| ir.cpp:2015:8:2015:8 | Address | &:r2015_5 | -| ir.cpp:2015:8:2015:8 | Address | &:r2015_7 | -| ir.cpp:2015:8:2015:8 | Address | &:r2015_7 | -| ir.cpp:2015:8:2015:8 | Address | &:r2015_7 | -| ir.cpp:2015:8:2015:8 | Address | &:r2015_7 | -| ir.cpp:2015:8:2015:8 | Address | &:r2015_7 | -| ir.cpp:2015:8:2015:8 | Address | &:r2015_7 | -| ir.cpp:2015:8:2015:8 | Address | &:r2015_10 | -| ir.cpp:2015:8:2015:8 | ChiPartial | partial:m2015_3 | -| ir.cpp:2015:8:2015:8 | ChiPartial | partial:m2015_3 | -| ir.cpp:2015:8:2015:8 | ChiPartial | partial:m2015_3 | -| ir.cpp:2015:8:2015:8 | ChiTotal | total:m2015_2 | -| ir.cpp:2015:8:2015:8 | ChiTotal | total:m2015_2 | -| ir.cpp:2015:8:2015:8 | ChiTotal | total:m2015_2 | -| ir.cpp:2015:8:2015:8 | Load | m0_10 | -| ir.cpp:2015:8:2015:8 | Load | m2015_6 | -| ir.cpp:2015:8:2015:8 | Load | m2015_6 | -| ir.cpp:2015:8:2015:8 | Load | m2015_6 | -| ir.cpp:2015:8:2015:8 | SideEffect | m2015_3 | -| ir.cpp:2015:8:2015:8 | SideEffect | m2015_3 | -| ir.cpp:2015:8:2015:8 | SideEffect | m2015_3 | -| ir.cpp:2015:8:2015:8 | SideEffect | m2015_8 | -| ir.cpp:2015:8:2015:8 | SideEffect | m2015_8 | -| ir.cpp:2015:8:2015:8 | SideEffect | m2015_8 | -| ir.cpp:2016:13:2016:29 | Address | &:r2016_5 | -| ir.cpp:2016:13:2016:29 | Address | &:r2016_5 | -| ir.cpp:2016:13:2016:29 | Address | &:r2016_7 | -| ir.cpp:2016:13:2016:29 | Address | &:r2016_7 | -| ir.cpp:2016:13:2016:29 | ChiPartial | partial:m2016_3 | -| ir.cpp:2016:13:2016:29 | ChiTotal | total:m2016_2 | -| ir.cpp:2016:13:2016:29 | Load | m2016_6 | -| ir.cpp:2016:13:2016:29 | SideEffect | m2016_3 | -| ir.cpp:2016:13:2016:29 | SideEffect | m2016_8 | -| ir.cpp:2019:6:2019:25 | ChiPartial | partial:m2019_3 | -| ir.cpp:2019:6:2019:25 | ChiTotal | total:m2019_2 | -| ir.cpp:2019:6:2019:25 | SideEffect | ~m2023_32 | -| ir.cpp:2019:32:2019:32 | Address | &:r2019_5 | -| ir.cpp:2019:52:2019:52 | Address | &:r2019_7 | -| ir.cpp:2019:72:2019:72 | Address | &:r2019_9 | -| ir.cpp:2019:92:2019:92 | Address | &:r2019_11 | -| ir.cpp:2020:5:2020:5 | Address | &:r2020_1 | -| ir.cpp:2020:5:2020:5 | Address | &:r2020_1 | -| ir.cpp:2020:5:2020:5 | Arg(this) | this:r2020_1 | -| ir.cpp:2020:5:2020:5 | ChiPartial | partial:m2020_16 | -| ir.cpp:2020:5:2020:5 | ChiTotal | total:m2019_12 | -| ir.cpp:2020:5:2020:5 | SideEffect | m2019_12 | -| ir.cpp:2020:7:2020:7 | CallTarget | func:r2020_2 | -| ir.cpp:2020:7:2020:7 | ChiPartial | partial:m2020_12 | -| ir.cpp:2020:7:2020:7 | ChiTotal | total:m2019_4 | -| ir.cpp:2020:7:2020:7 | SideEffect | ~m2019_4 | -| ir.cpp:2020:7:2020:7 | Unary | r2020_11 | -| ir.cpp:2020:9:2020:9 | Address | &:r2020_3 | -| ir.cpp:2020:9:2020:9 | Condition | r2020_4 | -| ir.cpp:2020:9:2020:9 | Load | m2019_6 | -| ir.cpp:2020:9:2020:17 | Address | &:r2020_7 | -| ir.cpp:2020:9:2020:17 | Address | &:r2020_10 | -| ir.cpp:2020:9:2020:17 | Address | &:r2020_20 | -| ir.cpp:2020:9:2020:17 | Address | &:r2020_23 | -| ir.cpp:2020:9:2020:17 | Arg(0) | 0:r2020_10 | -| ir.cpp:2020:9:2020:17 | Load | m2020_6 | -| ir.cpp:2020:9:2020:17 | Phi | from 2:m2020_21 | -| ir.cpp:2020:9:2020:17 | Phi | from 3:m2020_24 | -| ir.cpp:2020:9:2020:17 | SideEffect | ~m2020_13 | -| ir.cpp:2020:9:2020:17 | Unary | r2020_8 | -| ir.cpp:2020:9:2020:17 | Unary | r2020_9 | -| ir.cpp:2020:13:2020:13 | StoreValue | r2020_19 | -| ir.cpp:2020:17:2020:17 | StoreValue | r2020_22 | -| ir.cpp:2021:5:2021:5 | Address | &:r2021_1 | -| ir.cpp:2021:5:2021:5 | Address | &:r2021_1 | -| ir.cpp:2021:5:2021:5 | Arg(this) | this:r2021_1 | -| ir.cpp:2021:5:2021:5 | ChiPartial | partial:m2021_19 | -| ir.cpp:2021:5:2021:5 | ChiTotal | total:m2020_17 | -| ir.cpp:2021:5:2021:5 | SideEffect | m2020_17 | -| ir.cpp:2021:7:2021:7 | CallTarget | func:r2021_2 | -| ir.cpp:2021:7:2021:7 | ChiPartial | partial:m2021_15 | -| ir.cpp:2021:7:2021:7 | ChiTotal | total:m2021_7 | -| ir.cpp:2021:7:2021:7 | SideEffect | ~m2021_7 | -| ir.cpp:2021:7:2021:7 | Unary | r2021_14 | -| ir.cpp:2021:9:2021:9 | Address | &:r2021_4 | -| ir.cpp:2021:9:2021:9 | Address | &:r2021_9 | -| ir.cpp:2021:9:2021:9 | Address | &:r2021_35 | -| ir.cpp:2021:9:2021:9 | Address | &:r2021_46 | -| ir.cpp:2021:9:2021:9 | Condition | r2021_5 | -| ir.cpp:2021:9:2021:9 | Load | m2019_6 | -| ir.cpp:2021:9:2021:9 | Load | m2021_8 | -| ir.cpp:2021:9:2021:9 | Phi | from 5:m2021_36 | -| ir.cpp:2021:9:2021:9 | Phi | from 5:~m2021_30 | -| ir.cpp:2021:9:2021:9 | Phi | from 6:m2021_47 | -| ir.cpp:2021:9:2021:9 | Phi | from 6:~m2021_42 | -| ir.cpp:2021:9:2021:9 | StoreValue | r2021_10 | -| ir.cpp:2021:9:2021:34 | Address | &:r2021_3 | -| ir.cpp:2021:9:2021:34 | Address | &:r2021_13 | -| ir.cpp:2021:9:2021:34 | Arg(0) | 0:r2021_13 | -| ir.cpp:2021:9:2021:34 | SideEffect | ~m2021_11 | -| ir.cpp:2021:9:2021:34 | Unary | r2021_3 | -| ir.cpp:2021:9:2021:34 | Unary | r2021_12 | -| ir.cpp:2021:13:2021:13 | Address | &:r2021_22 | -| ir.cpp:2021:13:2021:13 | Address | &:r2021_22 | -| ir.cpp:2021:13:2021:13 | Address | &:r2021_22 | -| ir.cpp:2021:13:2021:13 | Address | &:r2021_27 | -| ir.cpp:2021:13:2021:13 | Arg(0) | 0:r2021_27 | -| ir.cpp:2021:13:2021:13 | Arg(this) | this:r2021_22 | -| ir.cpp:2021:13:2021:13 | CallTarget | func:r2021_24 | -| ir.cpp:2021:13:2021:13 | ChiPartial | partial:m2021_29 | -| ir.cpp:2021:13:2021:13 | ChiPartial | partial:m2021_32 | -| ir.cpp:2021:13:2021:13 | ChiTotal | total:m2020_13 | -| ir.cpp:2021:13:2021:13 | ChiTotal | total:m2021_23 | -| ir.cpp:2021:13:2021:13 | Load | m2021_33 | -| ir.cpp:2021:13:2021:13 | SideEffect | ~m2019_8 | -| ir.cpp:2021:13:2021:13 | SideEffect | ~m2020_13 | -| ir.cpp:2021:13:2021:13 | StoreValue | r2021_34 | -| ir.cpp:2021:13:2021:13 | Unary | r2021_25 | -| ir.cpp:2021:13:2021:13 | Unary | r2021_26 | -| ir.cpp:2021:17:2021:34 | Address | &:r2021_37 | -| ir.cpp:2021:17:2021:34 | Address | &:r2021_37 | -| ir.cpp:2021:17:2021:34 | Address | &:r2021_37 | -| ir.cpp:2021:17:2021:34 | Arg(this) | this:r2021_37 | -| ir.cpp:2021:17:2021:34 | CallTarget | func:r2021_39 | -| ir.cpp:2021:17:2021:34 | ChiPartial | partial:m2021_41 | -| ir.cpp:2021:17:2021:34 | ChiPartial | partial:m2021_43 | -| ir.cpp:2021:17:2021:34 | ChiTotal | total:m2020_13 | -| ir.cpp:2021:17:2021:34 | ChiTotal | total:m2021_38 | -| ir.cpp:2021:17:2021:34 | Load | m2021_44 | -| ir.cpp:2021:17:2021:34 | SideEffect | ~m2020_13 | -| ir.cpp:2021:17:2021:34 | StoreValue | r2021_45 | -| ir.cpp:2022:5:2022:5 | Address | &:r2022_1 | -| ir.cpp:2022:5:2022:5 | Address | &:r2022_1 | -| ir.cpp:2022:5:2022:5 | Arg(this) | this:r2022_1 | -| ir.cpp:2022:5:2022:5 | ChiPartial | partial:m2022_19 | -| ir.cpp:2022:5:2022:5 | ChiTotal | total:m2021_20 | -| ir.cpp:2022:5:2022:5 | SideEffect | m2021_20 | -| ir.cpp:2022:7:2022:7 | CallTarget | func:r2022_2 | -| ir.cpp:2022:7:2022:7 | ChiPartial | partial:m2022_15 | -| ir.cpp:2022:7:2022:7 | ChiTotal | total:m2022_7 | -| ir.cpp:2022:7:2022:7 | SideEffect | ~m2022_7 | -| ir.cpp:2022:7:2022:7 | Unary | r2022_14 | -| ir.cpp:2022:9:2022:9 | Address | &:r2022_4 | -| ir.cpp:2022:9:2022:9 | Address | &:r2022_9 | -| ir.cpp:2022:9:2022:9 | Address | &:r2022_31 | -| ir.cpp:2022:9:2022:9 | Address | &:r2022_42 | -| ir.cpp:2022:9:2022:9 | Condition | r2022_5 | -| ir.cpp:2022:9:2022:9 | Load | m2019_6 | -| ir.cpp:2022:9:2022:9 | Load | m2022_8 | -| ir.cpp:2022:9:2022:9 | Phi | from 8:m2022_32 | -| ir.cpp:2022:9:2022:9 | Phi | from 8:~m2022_27 | -| ir.cpp:2022:9:2022:9 | Phi | from 9:m2022_43 | -| ir.cpp:2022:9:2022:9 | Phi | from 9:~m2022_38 | -| ir.cpp:2022:9:2022:9 | StoreValue | r2022_10 | -| ir.cpp:2022:9:2022:51 | Address | &:r2022_3 | -| ir.cpp:2022:9:2022:51 | Address | &:r2022_13 | -| ir.cpp:2022:9:2022:51 | Arg(0) | 0:r2022_13 | -| ir.cpp:2022:9:2022:51 | SideEffect | ~m2022_11 | -| ir.cpp:2022:9:2022:51 | Unary | r2022_3 | -| ir.cpp:2022:9:2022:51 | Unary | r2022_12 | -| ir.cpp:2022:13:2022:30 | Address | &:r2022_22 | -| ir.cpp:2022:13:2022:30 | Address | &:r2022_22 | -| ir.cpp:2022:13:2022:30 | Address | &:r2022_22 | -| ir.cpp:2022:13:2022:30 | Arg(this) | this:r2022_22 | -| ir.cpp:2022:13:2022:30 | CallTarget | func:r2022_24 | -| ir.cpp:2022:13:2022:30 | ChiPartial | partial:m2022_26 | -| ir.cpp:2022:13:2022:30 | ChiPartial | partial:m2022_28 | -| ir.cpp:2022:13:2022:30 | ChiTotal | total:m2021_16 | -| ir.cpp:2022:13:2022:30 | ChiTotal | total:m2022_23 | -| ir.cpp:2022:13:2022:30 | Load | m2022_29 | -| ir.cpp:2022:13:2022:30 | SideEffect | ~m2021_16 | -| ir.cpp:2022:13:2022:30 | StoreValue | r2022_30 | -| ir.cpp:2022:34:2022:51 | Address | &:r2022_33 | -| ir.cpp:2022:34:2022:51 | Address | &:r2022_33 | -| ir.cpp:2022:34:2022:51 | Address | &:r2022_33 | -| ir.cpp:2022:34:2022:51 | Arg(this) | this:r2022_33 | -| ir.cpp:2022:34:2022:51 | CallTarget | func:r2022_35 | -| ir.cpp:2022:34:2022:51 | ChiPartial | partial:m2022_37 | -| ir.cpp:2022:34:2022:51 | ChiPartial | partial:m2022_39 | -| ir.cpp:2022:34:2022:51 | ChiTotal | total:m2021_16 | -| ir.cpp:2022:34:2022:51 | ChiTotal | total:m2022_34 | -| ir.cpp:2022:34:2022:51 | Load | m2022_40 | -| ir.cpp:2022:34:2022:51 | SideEffect | ~m2021_16 | -| ir.cpp:2022:34:2022:51 | StoreValue | r2022_41 | -| ir.cpp:2023:5:2023:19 | ChiPartial | partial:m2023_35 | -| ir.cpp:2023:5:2023:19 | ChiTotal | total:m2023_17 | -| ir.cpp:2023:5:2023:19 | SideEffect | m2023_17 | -| ir.cpp:2023:6:2023:6 | Address | &:r2023_1 | -| ir.cpp:2023:6:2023:6 | Address | &:r2023_1 | -| ir.cpp:2023:6:2023:6 | Arg(this) | this:r2023_1 | -| ir.cpp:2023:6:2023:6 | ChiPartial | partial:m2023_16 | -| ir.cpp:2023:6:2023:6 | ChiTotal | total:m2022_20 | -| ir.cpp:2023:6:2023:6 | SideEffect | m2022_20 | -| ir.cpp:2023:8:2023:8 | CallTarget | func:r2023_2 | -| ir.cpp:2023:8:2023:8 | ChiPartial | partial:m2023_12 | -| ir.cpp:2023:8:2023:8 | ChiTotal | total:m2022_16 | -| ir.cpp:2023:8:2023:8 | SideEffect | ~m2022_16 | -| ir.cpp:2023:8:2023:8 | Unary | r2023_11 | -| ir.cpp:2023:8:2023:19 | Address | &:r2023_18 | -| ir.cpp:2023:8:2023:19 | Address | &:r2023_18 | -| ir.cpp:2023:8:2023:19 | Arg(this) | this:r2023_18 | -| ir.cpp:2023:10:2023:10 | Address | &:r2023_3 | -| ir.cpp:2023:10:2023:10 | Condition | r2023_4 | -| ir.cpp:2023:10:2023:10 | Load | m2019_6 | -| ir.cpp:2023:10:2023:18 | Address | &:r2023_7 | -| ir.cpp:2023:10:2023:18 | Address | &:r2023_10 | -| ir.cpp:2023:10:2023:18 | Address | &:r2023_39 | -| ir.cpp:2023:10:2023:18 | Address | &:r2023_42 | -| ir.cpp:2023:10:2023:18 | Arg(0) | 0:r2023_10 | -| ir.cpp:2023:10:2023:18 | Load | m2023_6 | -| ir.cpp:2023:10:2023:18 | Phi | from 11:m2023_40 | -| ir.cpp:2023:10:2023:18 | Phi | from 12:m2023_43 | -| ir.cpp:2023:10:2023:18 | SideEffect | ~m2023_13 | -| ir.cpp:2023:10:2023:18 | Unary | r2023_8 | -| ir.cpp:2023:10:2023:18 | Unary | r2023_9 | -| ir.cpp:2023:14:2023:14 | StoreValue | r2023_38 | -| ir.cpp:2023:18:2023:18 | StoreValue | r2023_41 | -| ir.cpp:2023:21:2023:21 | CallTarget | func:r2023_19 | -| ir.cpp:2023:21:2023:21 | ChiPartial | partial:m2023_31 | -| ir.cpp:2023:21:2023:21 | ChiTotal | total:m2023_25 | -| ir.cpp:2023:21:2023:21 | SideEffect | ~m2023_25 | -| ir.cpp:2023:21:2023:21 | Unary | r2023_30 | -| ir.cpp:2023:23:2023:40 | Address | &:r2023_20 | -| ir.cpp:2023:23:2023:40 | Address | &:r2023_20 | -| ir.cpp:2023:23:2023:40 | Address | &:r2023_29 | -| ir.cpp:2023:23:2023:40 | Arg(0) | 0:r2023_29 | -| ir.cpp:2023:23:2023:40 | Arg(this) | this:r2023_20 | -| ir.cpp:2023:23:2023:40 | CallTarget | func:r2023_22 | -| ir.cpp:2023:23:2023:40 | ChiPartial | partial:m2023_24 | -| ir.cpp:2023:23:2023:40 | ChiPartial | partial:m2023_26 | -| ir.cpp:2023:23:2023:40 | ChiTotal | total:m2023_13 | -| ir.cpp:2023:23:2023:40 | ChiTotal | total:m2023_21 | -| ir.cpp:2023:23:2023:40 | SideEffect | ~m2023_13 | -| ir.cpp:2023:23:2023:40 | SideEffect | ~m2023_27 | -| ir.cpp:2023:23:2023:40 | Unary | r2023_20 | -| ir.cpp:2023:23:2023:40 | Unary | r2023_28 | -| ir.cpp:2028:14:2028:22 | Address | &:r2028_7 | -| ir.cpp:2028:14:2028:22 | ChiPartial | partial:m2028_3 | -| ir.cpp:2028:14:2028:22 | ChiTotal | total:m2028_2 | -| ir.cpp:2028:14:2028:22 | Load | m2033_2 | -| ir.cpp:2028:14:2028:22 | SideEffect | ~m2030_6 | -| ir.cpp:2028:37:2028:37 | Address | &:r2028_5 | -| ir.cpp:2029:16:2029:16 | Address | &:r2029_1 | -| ir.cpp:2030:3:2030:3 | Address | &:r2030_10 | -| ir.cpp:2030:7:2030:7 | Address | &:r2030_1 | -| ir.cpp:2030:7:2030:7 | Left | r2030_2 | -| ir.cpp:2030:7:2030:7 | Load | m2028_6 | -| ir.cpp:2030:7:2030:13 | Condition | r2030_4 | -| ir.cpp:2030:7:2032:28 | Address | &:r2030_8 | -| ir.cpp:2030:7:2032:28 | Address | &:r2030_12 | -| ir.cpp:2030:7:2032:28 | Address | &:r2030_14 | -| ir.cpp:2030:7:2032:28 | Load | m2030_7 | -| ir.cpp:2030:7:2032:28 | Phi | from 2:m2030_13 | -| ir.cpp:2030:7:2032:28 | Phi | from 2:~m2031_6 | -| ir.cpp:2030:7:2032:28 | Phi | from 3:m2030_15 | -| ir.cpp:2030:7:2032:28 | Phi | from 3:~m2032_6 | -| ir.cpp:2030:7:2032:28 | StoreValue | r2030_9 | -| ir.cpp:2030:11:2030:13 | Right | r2030_3 | -| ir.cpp:2031:6:2031:20 | CallTarget | func:r2031_1 | -| ir.cpp:2031:6:2031:20 | ChiPartial | partial:m2031_5 | -| ir.cpp:2031:6:2031:20 | ChiTotal | total:m2028_4 | -| ir.cpp:2031:6:2031:20 | SideEffect | ~m2028_4 | -| ir.cpp:2031:6:2031:26 | StoreValue | r2031_9 | -| ir.cpp:2031:22:2031:22 | Address | &:r2031_2 | -| ir.cpp:2031:22:2031:22 | Arg(0) | 0:r2031_3 | -| ir.cpp:2031:22:2031:22 | Load | m2028_6 | -| ir.cpp:2031:26:2031:26 | Address | &:r2031_7 | -| ir.cpp:2031:26:2031:26 | Load | m2028_6 | -| ir.cpp:2031:26:2031:26 | Unary | r2031_8 | -| ir.cpp:2032:5:2032:28 | StoreValue | r2032_9 | -| ir.cpp:2032:6:2032:20 | CallTarget | func:r2032_1 | -| ir.cpp:2032:6:2032:20 | ChiPartial | partial:m2032_5 | -| ir.cpp:2032:6:2032:20 | ChiTotal | total:m2028_4 | -| ir.cpp:2032:6:2032:20 | SideEffect | ~m2028_4 | -| ir.cpp:2032:6:2032:27 | Unary | r2032_8 | -| ir.cpp:2032:22:2032:22 | Address | &:r2032_2 | -| ir.cpp:2032:22:2032:22 | Arg(0) | 0:r2032_3 | -| ir.cpp:2032:22:2032:22 | Load | m2028_6 | -| ir.cpp:2032:26:2032:27 | Unary | r2032_7 | -| ir.cpp:2033:1:2033:1 | Address | &:r2033_1 | -| ir.cpp:2035:6:2035:17 | ChiPartial | partial:m2035_3 | -| ir.cpp:2035:6:2035:17 | ChiTotal | total:m2035_2 | -| ir.cpp:2035:6:2035:17 | SideEffect | ~m2038_6 | -| ir.cpp:2036:8:2036:8 | Address | &:r2036_1 | -| ir.cpp:2036:12:2036:18 | Address | &:r2036_4 | -| ir.cpp:2036:12:2036:18 | Arg(0) | 0:r2036_3 | -| ir.cpp:2036:12:2036:18 | CallTarget | func:r2036_2 | -| ir.cpp:2036:12:2036:18 | ChiPartial | partial:m2036_5 | -| ir.cpp:2036:12:2036:18 | ChiTotal | total:m2035_4 | -| ir.cpp:2036:12:2036:18 | SideEffect | ~m2035_4 | -| ir.cpp:2036:12:2036:18 | StoreValue | r2036_8 | -| ir.cpp:2036:12:2036:18 | Unary | r2036_4 | -| ir.cpp:2037:3:2037:4 | Address | &:r2037_4 | -| ir.cpp:2037:3:2037:8 | ChiPartial | partial:m2037_5 | -| ir.cpp:2037:3:2037:8 | ChiTotal | total:m2036_7 | -| ir.cpp:2037:4:2037:4 | Address | &:r2037_2 | -| ir.cpp:2037:4:2037:4 | Load | m2036_9 | -| ir.cpp:2037:4:2037:4 | Unary | r2037_3 | -| ir.cpp:2037:8:2037:8 | StoreValue | r2037_1 | -| ir.cpp:2038:3:2038:10 | CallTarget | func:r2038_1 | -| ir.cpp:2038:3:2038:10 | ChiPartial | partial:m2038_5 | -| ir.cpp:2038:3:2038:10 | ChiTotal | total:m2036_6 | -| ir.cpp:2038:3:2038:10 | SideEffect | ~m2036_6 | -| ir.cpp:2038:10:2038:10 | Address | &:r2038_2 | -| ir.cpp:2038:10:2038:10 | Arg(0) | 0:r2038_3 | -| ir.cpp:2038:10:2038:10 | Load | m2036_9 | -| ir.cpp:2041:7:2041:7 | Address | &:r2041_5 | -| ir.cpp:2041:7:2041:7 | Address | &:r2041_5 | -| ir.cpp:2041:7:2041:7 | Address | &:r2041_7 | -| ir.cpp:2041:7:2041:7 | Address | &:r2041_7 | -| ir.cpp:2041:7:2041:7 | ChiPartial | partial:m2041_3 | -| ir.cpp:2041:7:2041:7 | ChiTotal | total:m2041_2 | -| ir.cpp:2041:7:2041:7 | Load | m2041_6 | -| ir.cpp:2041:7:2041:7 | SideEffect | m2041_3 | -| ir.cpp:2041:7:2041:7 | SideEffect | m2041_8 | -| ir.cpp:2043:10:2043:24 | ChiPartial | partial:m2043_3 | -| ir.cpp:2043:10:2043:24 | ChiTotal | total:m2043_2 | -| ir.cpp:2043:10:2043:24 | SideEffect | m2043_3 | -| ir.cpp:2043:32:2043:32 | Address | &:r2043_5 | -| ir.cpp:2043:32:2043:32 | Address | &:r2043_5 | -| ir.cpp:2043:32:2043:32 | Address | &:r2043_7 | -| ir.cpp:2043:32:2043:32 | Address | &:r2043_7 | -| ir.cpp:2043:32:2043:32 | Load | m2043_6 | -| ir.cpp:2043:32:2043:32 | SideEffect | m2043_8 | -| ir.cpp:2045:13:2045:18 | Address | &:r2045_5 | -| ir.cpp:2045:13:2045:18 | Address | &:r2045_5 | -| ir.cpp:2045:13:2045:18 | Address | &:r2045_7 | -| ir.cpp:2045:13:2045:18 | Address | &:r2045_7 | -| ir.cpp:2045:13:2045:18 | ChiPartial | partial:m2045_3 | -| ir.cpp:2045:13:2045:18 | ChiTotal | total:m2045_2 | -| ir.cpp:2045:13:2045:18 | Load | m2045_6 | -| ir.cpp:2045:13:2045:18 | SideEffect | m2045_3 | -| ir.cpp:2045:13:2045:18 | SideEffect | m2045_8 | -| ir.cpp:2048:7:2048:7 | Address | &:r2048_5 | -| ir.cpp:2048:7:2048:7 | Address | &:r2048_5 | -| ir.cpp:2048:7:2048:7 | Address | &:r2048_7 | -| ir.cpp:2048:7:2048:7 | Address | &:r2048_7 | -| ir.cpp:2048:7:2048:7 | Address | &:r2048_9 | -| ir.cpp:2048:7:2048:7 | Arg(this) | this:r2048_9 | -| ir.cpp:2048:7:2048:7 | CallTarget | func:r2048_10 | -| ir.cpp:2048:7:2048:7 | ChiPartial | partial:m2048_3 | -| ir.cpp:2048:7:2048:7 | ChiPartial | partial:m2048_12 | -| ir.cpp:2048:7:2048:7 | ChiPartial | partial:m2048_14 | -| ir.cpp:2048:7:2048:7 | ChiTotal | total:m2048_2 | -| ir.cpp:2048:7:2048:7 | ChiTotal | total:m2048_4 | -| ir.cpp:2048:7:2048:7 | ChiTotal | total:m2048_8 | -| ir.cpp:2048:7:2048:7 | Load | m2048_6 | -| ir.cpp:2048:7:2048:7 | SideEffect | m2048_15 | -| ir.cpp:2048:7:2048:7 | SideEffect | ~m2048_4 | -| ir.cpp:2048:7:2048:7 | SideEffect | ~m2048_13 | -| ir.cpp:2048:7:2048:7 | Unary | m2048_6 | -| ir.cpp:2051:5:2051:13 | Address | &:r2051_5 | -| ir.cpp:2051:5:2051:13 | Address | &:r2051_5 | -| ir.cpp:2051:5:2051:13 | Address | &:r2051_7 | -| ir.cpp:2051:5:2051:13 | Address | &:r2051_7 | -| ir.cpp:2051:5:2051:13 | ChiPartial | partial:m2051_3 | -| ir.cpp:2051:5:2051:13 | ChiTotal | total:m2051_2 | -| ir.cpp:2051:5:2051:13 | Load | m2051_6 | -| ir.cpp:2051:5:2051:13 | SideEffect | m2051_8 | -| ir.cpp:2051:5:2051:13 | SideEffect | ~m2051_14 | -| ir.cpp:2051:5:2051:13 | Unary | m2051_6 | -| ir.cpp:2051:18:2051:18 | Arg(this) | this:r2051_10 | -| ir.cpp:2051:18:2051:18 | CallTarget | func:r2051_11 | -| ir.cpp:2051:18:2051:18 | ChiPartial | partial:m2051_13 | -| ir.cpp:2051:18:2051:18 | ChiTotal | total:m2051_4 | -| ir.cpp:2051:18:2051:18 | SideEffect | ~m2051_4 | -| ir.cpp:2053:10:2053:24 | ChiPartial | partial:m2053_3 | -| ir.cpp:2053:10:2053:24 | ChiTotal | total:m2053_2 | -| ir.cpp:2053:10:2053:24 | SideEffect | m2053_3 | -| ir.cpp:2053:32:2053:32 | Address | &:r2053_5 | -| ir.cpp:2053:32:2053:32 | Address | &:r2053_5 | -| ir.cpp:2053:32:2053:32 | Address | &:r2053_7 | -| ir.cpp:2053:32:2053:32 | Address | &:r2053_7 | -| ir.cpp:2053:32:2053:32 | Load | m2053_6 | -| ir.cpp:2053:32:2053:32 | SideEffect | m2053_8 | -| ir.cpp:2058:5:2058:18 | Address | &:r2058_5 | -| ir.cpp:2058:5:2058:18 | ChiPartial | partial:m2058_3 | -| ir.cpp:2058:5:2058:18 | ChiTotal | total:m2058_2 | -| ir.cpp:2058:5:2058:18 | Load | m2068_2 | -| ir.cpp:2058:5:2058:18 | SideEffect | ~m2067_6 | -| ir.cpp:2060:12:2060:13 | Address | &:r2060_1 | -| ir.cpp:2060:17:2060:27 | Address | &:r2060_4 | -| ir.cpp:2060:17:2060:27 | Address | &:r2060_8 | -| ir.cpp:2060:17:2060:27 | Arg(0) | 0:r2060_3 | -| ir.cpp:2060:17:2060:27 | Arg(this) | this:r2060_8 | -| ir.cpp:2060:17:2060:27 | CallTarget | func:r2060_2 | -| ir.cpp:2060:17:2060:27 | CallTarget | func:r2060_9 | -| ir.cpp:2060:17:2060:27 | ChiPartial | partial:m2060_5 | -| ir.cpp:2060:17:2060:27 | ChiPartial | partial:m2060_11 | -| ir.cpp:2060:17:2060:27 | ChiPartial | partial:m2060_13 | -| ir.cpp:2060:17:2060:27 | ChiTotal | total:m2058_4 | -| ir.cpp:2060:17:2060:27 | ChiTotal | total:m2060_6 | -| ir.cpp:2060:17:2060:27 | ChiTotal | total:m2060_7 | -| ir.cpp:2060:17:2060:27 | SideEffect | ~m2058_4 | -| ir.cpp:2060:17:2060:27 | SideEffect | ~m2060_6 | -| ir.cpp:2060:17:2060:27 | StoreValue | r2060_8 | -| ir.cpp:2060:17:2060:27 | Unary | r2060_4 | -| ir.cpp:2061:5:2061:13 | CallTarget | func:r2061_1 | -| ir.cpp:2061:5:2061:13 | ChiPartial | partial:m2061_5 | -| ir.cpp:2061:5:2061:13 | ChiTotal | total:m2060_12 | -| ir.cpp:2061:5:2061:13 | SideEffect | ~m2060_12 | -| ir.cpp:2061:12:2061:13 | Address | &:r2061_2 | -| ir.cpp:2061:12:2061:13 | Arg(0) | 0:r2061_3 | -| ir.cpp:2061:12:2061:13 | Load | m2060_15 | -| ir.cpp:2063:12:2063:13 | Address | &:r2063_1 | -| ir.cpp:2063:17:2063:30 | Address | &:r2063_4 | -| ir.cpp:2063:17:2063:30 | Address | &:r2063_8 | -| ir.cpp:2063:17:2063:30 | Arg(0) | 0:r2063_3 | -| ir.cpp:2063:17:2063:30 | Arg(this) | this:r2063_8 | -| ir.cpp:2063:17:2063:30 | CallTarget | func:r2063_2 | -| ir.cpp:2063:17:2063:30 | CallTarget | func:r2063_9 | -| ir.cpp:2063:17:2063:30 | ChiPartial | partial:m2063_5 | -| ir.cpp:2063:17:2063:30 | ChiPartial | partial:m2063_11 | -| ir.cpp:2063:17:2063:30 | ChiPartial | partial:m2063_13 | -| ir.cpp:2063:17:2063:30 | ChiTotal | total:m2061_6 | -| ir.cpp:2063:17:2063:30 | ChiTotal | total:m2063_6 | -| ir.cpp:2063:17:2063:30 | ChiTotal | total:m2063_7 | -| ir.cpp:2063:17:2063:30 | SideEffect | ~m2061_6 | -| ir.cpp:2063:17:2063:30 | SideEffect | ~m2063_6 | -| ir.cpp:2063:17:2063:30 | StoreValue | r2063_15 | -| ir.cpp:2063:17:2063:30 | Unary | r2063_4 | -| ir.cpp:2063:17:2063:30 | Unary | r2063_8 | -| ir.cpp:2064:5:2064:13 | CallTarget | func:r2064_1 | -| ir.cpp:2064:5:2064:13 | ChiPartial | partial:m2064_5 | -| ir.cpp:2064:5:2064:13 | ChiTotal | total:m2063_12 | -| ir.cpp:2064:5:2064:13 | SideEffect | ~m2063_12 | -| ir.cpp:2064:12:2064:13 | Address | &:r2064_2 | -| ir.cpp:2064:12:2064:13 | Arg(0) | 0:r2064_3 | -| ir.cpp:2064:12:2064:13 | Load | m2063_16 | -| ir.cpp:2066:15:2066:15 | Address | &:r2066_1 | -| ir.cpp:2066:19:2066:32 | Address | &:r2066_4 | -| ir.cpp:2066:19:2066:32 | Address | &:r2066_8 | -| ir.cpp:2066:19:2066:32 | Arg(0) | 0:r2066_3 | -| ir.cpp:2066:19:2066:32 | Arg(this) | this:r2066_8 | -| ir.cpp:2066:19:2066:32 | CallTarget | func:r2066_2 | -| ir.cpp:2066:19:2066:32 | CallTarget | func:r2066_9 | -| ir.cpp:2066:19:2066:32 | ChiPartial | partial:m2066_5 | -| ir.cpp:2066:19:2066:32 | ChiPartial | partial:m2066_11 | -| ir.cpp:2066:19:2066:32 | ChiPartial | partial:m2066_13 | -| ir.cpp:2066:19:2066:32 | ChiTotal | total:m2064_6 | -| ir.cpp:2066:19:2066:32 | ChiTotal | total:m2066_6 | -| ir.cpp:2066:19:2066:32 | ChiTotal | total:m2066_7 | -| ir.cpp:2066:19:2066:32 | SideEffect | ~m2064_6 | -| ir.cpp:2066:19:2066:32 | SideEffect | ~m2066_6 | -| ir.cpp:2066:19:2066:32 | StoreValue | r2066_8 | -| ir.cpp:2066:19:2066:32 | Unary | r2066_4 | -| ir.cpp:2067:5:2067:12 | CallTarget | func:r2067_1 | -| ir.cpp:2067:5:2067:12 | ChiPartial | partial:m2067_5 | -| ir.cpp:2067:5:2067:12 | ChiTotal | total:m2066_12 | -| ir.cpp:2067:5:2067:12 | SideEffect | ~m2066_12 | -| ir.cpp:2067:12:2067:12 | Address | &:r2067_2 | -| ir.cpp:2067:12:2067:12 | Arg(0) | 0:r2067_3 | -| ir.cpp:2067:12:2067:12 | Load | m2066_15 | -| ir.cpp:2068:1:2068:1 | Address | &:r2068_1 | -| ir.cpp:2072:6:2072:26 | ChiPartial | partial:m2072_3 | -| ir.cpp:2072:6:2072:26 | ChiTotal | total:m2072_2 | -| ir.cpp:2072:6:2072:26 | SideEffect | ~m2074_5 | -| ir.cpp:2073:13:2073:13 | Address | &:r2073_1 | -| ir.cpp:2073:16:2073:19 | StoreValue | r2073_2 | -| ir.cpp:2074:3:2074:27 | CallTarget | func:r2074_1 | -| ir.cpp:2074:3:2074:27 | ChiPartial | partial:m2074_4 | -| ir.cpp:2074:3:2074:27 | ChiTotal | total:m2072_4 | -| ir.cpp:2074:3:2074:27 | SideEffect | ~m2072_4 | -| ir.cpp:2074:29:2074:29 | Arg(0) | 0:r2074_2 | -| ir.cpp:2079:5:2079:11 | Address | &:r2079_6 | -| ir.cpp:2079:5:2079:11 | ChiPartial | partial:m2079_3 | -| ir.cpp:2079:5:2079:11 | ChiTotal | total:m2079_2 | -| ir.cpp:2079:5:2079:11 | Load | m2084_4 | -| ir.cpp:2079:5:2079:11 | SideEffect | ~m2083_4 | -| ir.cpp:2080:9:2080:9 | Address | &:r2080_1 | -| ir.cpp:2080:13:2080:15 | CallTarget | func:r2080_2 | -| ir.cpp:2080:13:2080:15 | ChiPartial | partial:m2080_6 | -| ir.cpp:2080:13:2080:15 | ChiTotal | total:m2079_4 | -| ir.cpp:2080:13:2080:15 | SideEffect | ~m2079_4 | -| ir.cpp:2080:13:2080:15 | StoreValue | r2080_5 | -| ir.cpp:2080:17:2080:17 | Arg(0) | 0:r2080_3 | -| ir.cpp:2080:19:2080:19 | Arg(1) | 1:r2080_4 | -| ir.cpp:2081:9:2081:9 | Address | &:r2081_1 | -| ir.cpp:2081:9:2081:9 | Left | r2081_2 | -| ir.cpp:2081:9:2081:9 | Load | m2080_8 | -| ir.cpp:2081:9:2081:14 | Condition | r2081_4 | -| ir.cpp:2081:14:2081:14 | Right | r2081_3 | -| ir.cpp:2082:9:2082:12 | CallTarget | func:r2082_1 | -| ir.cpp:2082:9:2082:12 | ChiPartial | partial:m2082_4 | -| ir.cpp:2082:9:2082:12 | ChiTotal | total:m2080_7 | -| ir.cpp:2082:9:2082:12 | SideEffect | ~m2080_7 | -| ir.cpp:2082:14:2082:14 | Arg(0) | 0:r2082_2 | -| ir.cpp:2083:5:2083:12 | CallTarget | func:r2083_1 | -| ir.cpp:2083:5:2083:12 | ChiPartial | partial:m2083_3 | -| ir.cpp:2083:5:2083:12 | ChiTotal | total:m2080_7 | -| ir.cpp:2083:5:2083:12 | SideEffect | ~m2080_7 | -| ir.cpp:2084:5:2084:13 | Address | &:r2084_1 | -| ir.cpp:2084:12:2084:12 | Address | &:r2084_2 | -| ir.cpp:2084:12:2084:12 | Load | m2080_8 | -| ir.cpp:2084:12:2084:12 | StoreValue | r2084_3 | -| ir.cpp:2087:6:2087:17 | ChiPartial | partial:m2087_3 | -| ir.cpp:2087:6:2087:17 | ChiTotal | total:m2087_2 | -| ir.cpp:2088:5:2088:12 | CallTarget | func:r2088_1 | -| ir.cpp:2088:5:2088:12 | ChiPartial | partial:m2088_3 | -| ir.cpp:2088:5:2088:12 | ChiTotal | total:m2087_4 | -| ir.cpp:2088:5:2088:12 | SideEffect | ~m2087_4 | -| ir.cpp:2089:5:2089:8 | CallTarget | func:r2089_1 | -| ir.cpp:2089:5:2089:8 | ChiPartial | partial:m2089_4 | -| ir.cpp:2089:5:2089:8 | ChiTotal | total:m2088_4 | -| ir.cpp:2089:5:2089:8 | SideEffect | ~m2088_4 | -| ir.cpp:2089:10:2089:10 | Arg(0) | 0:r2089_2 | -| ir.cpp:2092:5:2092:16 | Address | &:r2092_6 | -| ir.cpp:2092:5:2092:16 | ChiPartial | partial:m2092_3 | -| ir.cpp:2092:5:2092:16 | ChiTotal | total:m2092_2 | -| ir.cpp:2092:5:2092:16 | Load | m2097_4 | -| ir.cpp:2092:5:2092:16 | SideEffect | ~m2096_4 | -| ir.cpp:2093:9:2093:9 | Address | &:r2093_1 | -| ir.cpp:2093:13:2093:15 | CallTarget | func:r2093_2 | -| ir.cpp:2093:13:2093:15 | ChiPartial | partial:m2093_6 | -| ir.cpp:2093:13:2093:15 | ChiTotal | total:m2092_4 | -| ir.cpp:2093:13:2093:15 | SideEffect | ~m2092_4 | -| ir.cpp:2093:13:2093:15 | StoreValue | r2093_5 | -| ir.cpp:2093:17:2093:17 | Arg(0) | 0:r2093_3 | -| ir.cpp:2093:19:2093:19 | Arg(1) | 1:r2093_4 | -| ir.cpp:2094:9:2094:9 | Address | &:r2094_1 | -| ir.cpp:2094:9:2094:9 | Left | r2094_2 | -| ir.cpp:2094:9:2094:9 | Load | m2093_8 | -| ir.cpp:2094:9:2094:14 | Condition | r2094_4 | -| ir.cpp:2094:14:2094:14 | Right | r2094_3 | -| ir.cpp:2095:9:2095:20 | CallTarget | func:r2095_1 | -| ir.cpp:2096:5:2096:12 | CallTarget | func:r2096_1 | -| ir.cpp:2096:5:2096:12 | ChiPartial | partial:m2096_3 | -| ir.cpp:2096:5:2096:12 | ChiTotal | total:m2093_7 | -| ir.cpp:2096:5:2096:12 | SideEffect | ~m2093_7 | -| ir.cpp:2097:5:2097:13 | Address | &:r2097_1 | -| ir.cpp:2097:12:2097:12 | Address | &:r2097_2 | -| ir.cpp:2097:12:2097:12 | Load | m2093_8 | -| ir.cpp:2097:12:2097:12 | StoreValue | r2097_3 | -| ir.cpp:2100:6:2100:24 | ChiPartial | partial:m2100_3 | -| ir.cpp:2100:6:2100:24 | ChiTotal | total:m2100_2 | -| ir.cpp:2100:6:2100:24 | SideEffect | ~m2106_8 | -| ir.cpp:2100:33:2100:33 | Address | &:r2100_5 | -| ir.cpp:2101:3:2101:12 | Address | &:r2101_6 | -| ir.cpp:2101:3:2101:12 | Arg(0) | 0:r2101_5 | -| ir.cpp:2101:3:2101:12 | CallTarget | func:r2101_1 | -| ir.cpp:2101:3:2101:12 | ChiPartial | partial:m2101_7 | -| ir.cpp:2101:3:2101:12 | ChiTotal | total:m2100_4 | -| ir.cpp:2101:3:2101:12 | Right | r2101_4 | -| ir.cpp:2101:3:2101:12 | SideEffect | ~m2100_4 | -| ir.cpp:2101:3:2101:12 | Unary | r2101_6 | -| ir.cpp:2101:11:2101:11 | Address | &:r2101_2 | -| ir.cpp:2101:11:2101:11 | Left | r2101_3 | -| ir.cpp:2101:11:2101:11 | Load | m2100_6 | -| ir.cpp:2102:3:2102:18 | Address | &:r2102_7 | -| ir.cpp:2102:3:2102:18 | Arg(0) | 0:r2102_5 | -| ir.cpp:2102:3:2102:18 | CallTarget | func:r2102_1 | -| ir.cpp:2102:3:2102:18 | ChiPartial | partial:m2102_8 | -| ir.cpp:2102:3:2102:18 | ChiTotal | total:m2101_8 | -| ir.cpp:2102:3:2102:18 | Right | r2102_4 | -| ir.cpp:2102:3:2102:18 | SideEffect | ~m2101_8 | -| ir.cpp:2102:3:2102:18 | Unary | r2102_7 | -| ir.cpp:2102:7:2102:10 | Arg(1) | 1:r2102_6 | -| ir.cpp:2102:17:2102:17 | Address | &:r2102_2 | -| ir.cpp:2102:17:2102:17 | Left | r2102_3 | -| ir.cpp:2102:17:2102:17 | Load | m2100_6 | -| ir.cpp:2103:3:2103:15 | Address | &:r2103_6 | -| ir.cpp:2103:3:2103:15 | Arg(0) | 0:r2103_5 | -| ir.cpp:2103:3:2103:15 | CallTarget | func:r2103_1 | -| ir.cpp:2103:3:2103:15 | ChiPartial | partial:m2103_7 | -| ir.cpp:2103:3:2103:15 | ChiTotal | total:m2102_9 | -| ir.cpp:2103:3:2103:15 | Right | r2103_4 | -| ir.cpp:2103:3:2103:15 | SideEffect | ~m2102_9 | -| ir.cpp:2103:3:2103:15 | Unary | r2103_6 | -| ir.cpp:2103:14:2103:14 | Address | &:r2103_2 | -| ir.cpp:2103:14:2103:14 | Left | r2103_3 | -| ir.cpp:2103:14:2103:14 | Load | m2100_6 | -| ir.cpp:2104:3:2104:20 | Address | &:r2104_7 | -| ir.cpp:2104:3:2104:20 | Arg(0) | 0:r2104_5 | -| ir.cpp:2104:3:2104:20 | CallTarget | func:r2104_1 | -| ir.cpp:2104:3:2104:20 | ChiPartial | partial:m2104_8 | -| ir.cpp:2104:3:2104:20 | ChiTotal | total:m2103_8 | -| ir.cpp:2104:3:2104:20 | Right | r2104_4 | -| ir.cpp:2104:3:2104:20 | SideEffect | ~m2103_8 | -| ir.cpp:2104:3:2104:20 | Unary | r2104_7 | -| ir.cpp:2104:19:2104:19 | Address | &:r2104_2 | -| ir.cpp:2104:19:2104:19 | Left | r2104_3 | -| ir.cpp:2104:19:2104:19 | Load | m2100_6 | -| ir.cpp:2104:21:2104:21 | Arg(1) | 1:r2104_6 | -| ir.cpp:2105:3:2105:36 | Address | &:r2105_6 | -| ir.cpp:2105:3:2105:36 | Arg(0) | 0:r2105_5 | -| ir.cpp:2105:3:2105:36 | CallTarget | func:r2105_1 | -| ir.cpp:2105:3:2105:36 | ChiPartial | partial:m2105_7 | -| ir.cpp:2105:3:2105:36 | ChiTotal | total:m2104_9 | -| ir.cpp:2105:3:2105:36 | Right | r2105_4 | -| ir.cpp:2105:3:2105:36 | SideEffect | ~m2104_9 | -| ir.cpp:2105:3:2105:36 | Unary | r2105_6 | -| ir.cpp:2105:35:2105:35 | Address | &:r2105_2 | -| ir.cpp:2105:35:2105:35 | Left | r2105_3 | -| ir.cpp:2105:35:2105:35 | Load | m2100_6 | -| ir.cpp:2106:3:2106:24 | Address | &:r2106_6 | -| ir.cpp:2106:3:2106:24 | Arg(0) | 0:r2106_5 | -| ir.cpp:2106:3:2106:24 | CallTarget | func:r2106_1 | -| ir.cpp:2106:3:2106:24 | ChiPartial | partial:m2106_7 | -| ir.cpp:2106:3:2106:24 | ChiTotal | total:m2105_8 | -| ir.cpp:2106:3:2106:24 | Right | r2106_4 | -| ir.cpp:2106:3:2106:24 | SideEffect | ~m2105_8 | -| ir.cpp:2106:3:2106:24 | Unary | r2106_6 | -| ir.cpp:2106:11:2106:11 | Address | &:r2106_2 | -| ir.cpp:2106:11:2106:11 | Left | r2106_3 | -| ir.cpp:2106:11:2106:11 | Load | m2100_6 | -| ir.cpp:2111:7:2111:17 | Address | &:r2111_10 | -| ir.cpp:2111:7:2111:17 | ChiPartial | partial:m2111_3 | -| ir.cpp:2111:7:2111:17 | ChiTotal | total:m2111_2 | -| ir.cpp:2111:7:2111:17 | Load | m2114_4 | -| ir.cpp:2111:7:2111:17 | SideEffect | m2111_3 | -| ir.cpp:2111:25:2111:25 | Address | &:r2111_5 | -| ir.cpp:2111:25:2111:25 | Address | &:r2111_5 | -| ir.cpp:2111:25:2111:25 | Address | &:r2111_7 | -| ir.cpp:2111:25:2111:25 | Address | &:r2111_7 | -| ir.cpp:2111:25:2111:25 | Load | m2111_6 | -| ir.cpp:2111:25:2111:25 | SideEffect | m2111_8 | -| ir.cpp:2112:9:2112:11 | Address | &:r2112_1 | -| ir.cpp:2113:10:2113:10 | Address | &:r2113_1 | -| ir.cpp:2113:14:2113:19 | CallTarget | func:r2113_2 | -| ir.cpp:2113:14:2113:19 | StoreValue | r2113_8 | -| ir.cpp:2113:21:2113:21 | Address | &:r2113_3 | -| ir.cpp:2113:21:2113:21 | Address | &:r2113_5 | -| ir.cpp:2113:21:2113:21 | Arg(0) | 0:r2113_5 | -| ir.cpp:2113:21:2113:21 | Load | m2111_6 | -| ir.cpp:2113:21:2113:21 | SideEffect | ~m2111_8 | -| ir.cpp:2113:21:2113:21 | Unary | r2113_4 | -| ir.cpp:2113:24:2113:27 | Address | &:r2113_7 | -| ir.cpp:2113:24:2113:27 | Arg(1) | 1:r2113_7 | -| ir.cpp:2113:24:2113:27 | ChiPartial | partial:m2113_10 | -| ir.cpp:2113:24:2113:27 | ChiTotal | total:m2112_2 | -| ir.cpp:2113:25:2113:27 | Unary | r2113_6 | -| ir.cpp:2114:3:2114:13 | Address | &:r2114_1 | -| ir.cpp:2114:10:2114:12 | Address | &:r2114_2 | -| ir.cpp:2114:10:2114:12 | Load | m2113_11 | -| ir.cpp:2114:10:2114:12 | StoreValue | r2114_3 | -| ir.cpp:2121:6:2121:39 | ChiPartial | partial:m2121_3 | -| ir.cpp:2121:6:2121:39 | ChiTotal | total:m2121_2 | -| ir.cpp:2121:6:2121:39 | SideEffect | ~m2122_8 | -| ir.cpp:2122:6:2122:42 | Address | &:r2122_1 | -| ir.cpp:2122:6:2122:42 | Condition | r2122_12 | -| ir.cpp:2122:22:2122:22 | Address | &:r2122_4 | -| ir.cpp:2122:22:2122:22 | Address | &:r2122_4 | -| ir.cpp:2122:22:2122:22 | Arg(this) | this:r2122_4 | -| ir.cpp:2122:22:2122:22 | CallTarget | func:r2122_5 | -| ir.cpp:2122:22:2122:22 | ChiPartial | partial:m2122_7 | -| ir.cpp:2122:22:2122:22 | ChiPartial | partial:m2122_10 | -| ir.cpp:2122:22:2122:22 | ChiTotal | total:m2121_4 | -| ir.cpp:2122:22:2122:22 | ChiTotal | total:m2122_3 | -| ir.cpp:2122:22:2122:22 | SideEffect | m2122_3 | -| ir.cpp:2122:22:2122:22 | SideEffect | ~m2121_4 | -| ir.cpp:2122:22:2122:22 | Unary | r2122_6 | -| ir.cpp:2122:25:2122:42 | StoreValue | r2122_2 | -| ir.cpp:2125:7:2125:7 | Address | &:r2125_5 | -| ir.cpp:2125:7:2125:7 | Address | &:r2125_5 | -| ir.cpp:2125:7:2125:7 | Address | &:r2125_7 | -| ir.cpp:2125:7:2125:7 | Address | &:r2125_7 | -| ir.cpp:2125:7:2125:7 | Address | &:r2125_9 | -| ir.cpp:2125:7:2125:7 | Address | &:r2125_10 | -| ir.cpp:2125:7:2125:7 | Address | &:r2125_13 | -| ir.cpp:2125:7:2125:7 | ChiPartial | partial:m2125_3 | -| ir.cpp:2125:7:2125:7 | ChiPartial | partial:m2125_15 | -| ir.cpp:2125:7:2125:7 | ChiTotal | total:m2125_2 | -| ir.cpp:2125:7:2125:7 | ChiTotal | total:m2125_8 | -| ir.cpp:2125:7:2125:7 | Load | m0_2 | -| ir.cpp:2125:7:2125:7 | Load | m2125_6 | -| ir.cpp:2125:7:2125:7 | Load | ~m0_4 | -| ir.cpp:2125:7:2125:7 | SideEffect | m2125_3 | -| ir.cpp:2125:7:2125:7 | SideEffect | m2125_16 | -| ir.cpp:2125:7:2125:7 | StoreValue | r2125_14 | -| ir.cpp:2125:7:2125:7 | Unary | m2125_6 | -| ir.cpp:2125:7:2125:7 | Unary | r2125_11 | -| ir.cpp:2125:7:2125:7 | Unary | r2125_12 | -| ir.cpp:2128:5:2128:23 | Address | &:r2128_5 | -| ir.cpp:2128:5:2128:23 | Address | &:r2128_5 | -| ir.cpp:2128:5:2128:23 | Address | &:r2128_7 | -| ir.cpp:2128:5:2128:23 | Address | &:r2128_7 | -| ir.cpp:2128:5:2128:23 | ChiPartial | partial:m2128_3 | -| ir.cpp:2128:5:2128:23 | ChiTotal | total:m2128_2 | -| ir.cpp:2128:5:2128:23 | Load | m2128_6 | -| ir.cpp:2128:5:2128:23 | SideEffect | m2128_20 | -| ir.cpp:2128:5:2128:23 | SideEffect | ~m2128_13 | -| ir.cpp:2128:29:2128:29 | Address | &:r2128_16 | -| ir.cpp:2128:29:2128:29 | Address | &:r2128_18 | -| ir.cpp:2128:29:2128:29 | Load | m2128_6 | -| ir.cpp:2128:29:2128:29 | Unary | r2128_17 | -| ir.cpp:2128:29:2128:40 | ChiPartial | partial:m2128_19 | -| ir.cpp:2128:29:2128:40 | ChiTotal | total:m2128_8 | -| ir.cpp:2128:33:2128:40 | Address | &:r2128_11 | -| ir.cpp:2128:33:2128:40 | Arg(0) | 0:r2128_10 | -| ir.cpp:2128:33:2128:40 | CallTarget | func:r2128_9 | -| ir.cpp:2128:33:2128:40 | ChiPartial | partial:m2128_12 | -| ir.cpp:2128:33:2128:40 | ChiTotal | total:m2128_4 | -| ir.cpp:2128:33:2128:40 | SideEffect | ~m2128_4 | -| ir.cpp:2128:33:2128:40 | StoreValue | r2128_15 | -| ir.cpp:2128:33:2128:40 | Unary | r2128_11 | -| ir.cpp:2129:5:2129:24 | Address | &:r2129_5 | -| ir.cpp:2129:5:2129:24 | Address | &:r2129_5 | -| ir.cpp:2129:5:2129:24 | Address | &:r2129_7 | -| ir.cpp:2129:5:2129:24 | Address | &:r2129_7 | -| ir.cpp:2129:5:2129:24 | ChiPartial | partial:m2129_3 | -| ir.cpp:2129:5:2129:24 | ChiTotal | total:m2129_2 | -| ir.cpp:2129:5:2129:24 | Load | m2129_6 | -| ir.cpp:2129:5:2129:24 | SideEffect | m2129_8 | -| ir.cpp:2129:5:2129:24 | SideEffect | ~m2129_16 | -| ir.cpp:2129:30:2129:37 | CallTarget | func:r2129_9 | -| ir.cpp:2129:30:2129:37 | ChiPartial | partial:m2129_15 | -| ir.cpp:2129:30:2129:37 | ChiTotal | total:m2129_4 | -| ir.cpp:2129:30:2129:37 | SideEffect | ~m2129_4 | -| ir.cpp:2129:37:2129:37 | Address | &:r2129_10 | -| ir.cpp:2129:37:2129:37 | Address | &:r2129_12 | -| ir.cpp:2129:37:2129:37 | Arg(0) | 0:r2129_13 | -| ir.cpp:2129:37:2129:37 | Load | m2129_6 | -| ir.cpp:2129:37:2129:37 | Load | ~m2129_8 | -| ir.cpp:2129:37:2129:37 | Unary | r2129_11 | -| ir.cpp:2131:10:2131:14 | Address | &:r2131_5 | -| ir.cpp:2131:10:2131:14 | Address | &:r2131_5 | -| ir.cpp:2131:10:2131:14 | Address | &:r2131_7 | -| ir.cpp:2131:10:2131:14 | Address | &:r2131_7 | -| ir.cpp:2131:10:2131:14 | ChiPartial | partial:m2131_3 | -| ir.cpp:2131:10:2131:14 | ChiTotal | total:m2131_2 | -| ir.cpp:2131:10:2131:14 | Load | m2131_6 | -| ir.cpp:2131:10:2131:14 | SideEffect | m2131_8 | -| ir.cpp:2131:10:2131:14 | SideEffect | ~m2131_19 | -| ir.cpp:2131:21:2131:21 | Address | &:r2131_9 | -| ir.cpp:2131:26:2131:27 | Address | &:r2131_17 | -| ir.cpp:2131:26:2131:31 | ChiPartial | partial:m2131_18 | -| ir.cpp:2131:26:2131:31 | ChiTotal | total:m2131_4 | -| ir.cpp:2131:27:2131:27 | Address | &:r2131_13 | -| ir.cpp:2131:27:2131:27 | Address | &:r2131_15 | -| ir.cpp:2131:27:2131:27 | Load | m2131_6 | -| ir.cpp:2131:27:2131:27 | Load | ~m2131_8 | -| ir.cpp:2131:27:2131:27 | Unary | r2131_14 | -| ir.cpp:2131:27:2131:27 | Unary | r2131_16 | -| ir.cpp:2131:31:2131:31 | Address | &:r2131_11 | -| ir.cpp:2131:31:2131:31 | Load | m2131_10 | -| ir.cpp:2131:31:2131:31 | StoreValue | r2131_12 | -| ir.cpp:2132:10:2132:14 | Address | &:r2132_5 | -| ir.cpp:2132:10:2132:14 | Address | &:r2132_5 | -| ir.cpp:2132:10:2132:14 | Address | &:r2132_7 | -| ir.cpp:2132:10:2132:14 | Address | &:r2132_7 | -| ir.cpp:2132:10:2132:14 | Address | &:r2132_17 | -| ir.cpp:2132:10:2132:14 | ChiPartial | partial:m2132_3 | -| ir.cpp:2132:10:2132:14 | ChiTotal | total:m2132_2 | -| ir.cpp:2132:10:2132:14 | Load | m2132_6 | -| ir.cpp:2132:10:2132:14 | Load | m2132_15 | -| ir.cpp:2132:10:2132:14 | SideEffect | m2132_3 | -| ir.cpp:2132:10:2132:14 | SideEffect | m2132_8 | -| ir.cpp:2132:20:2132:29 | Address | &:r2132_9 | -| ir.cpp:2132:27:2132:28 | Load | ~m2132_4 | -| ir.cpp:2132:27:2132:28 | StoreValue | r2132_14 | -| ir.cpp:2132:28:2132:28 | Address | &:r2132_10 | -| ir.cpp:2132:28:2132:28 | Address | &:r2132_12 | -| ir.cpp:2132:28:2132:28 | Address | &:r2132_13 | -| ir.cpp:2132:28:2132:28 | Load | m2132_6 | -| ir.cpp:2132:28:2132:28 | Load | ~m2132_8 | -| ir.cpp:2132:28:2132:28 | Unary | r2132_11 | -| ir.cpp:2135:16:2135:50 | Address | &:r2135_3 | -| ir.cpp:2135:16:2135:50 | SideEffect | ~m2135_6 | -| ir.cpp:2135:54:2135:57 | ChiPartial | partial:m2135_5 | -| ir.cpp:2135:54:2135:57 | ChiTotal | total:m2135_2 | -| ir.cpp:2135:54:2135:57 | StoreValue | r2135_4 | -| ir.cpp:2137:6:2137:35 | ChiPartial | partial:m2137_3 | -| ir.cpp:2137:6:2137:35 | ChiTotal | total:m2137_2 | -| ir.cpp:2137:6:2137:35 | Phi | from 13:~m2172_5 | -| ir.cpp:2137:6:2137:35 | Phi | from 19:~m2172_13 | -| ir.cpp:2137:6:2137:35 | Phi | from 23:~m2172_22 | -| ir.cpp:2137:6:2137:35 | SideEffect | ~m2137_9 | -| ir.cpp:2137:42:2137:42 | Address | &:r2137_5 | -| ir.cpp:2137:50:2137:50 | Address | &:r2137_7 | -| ir.cpp:2138:29:2138:29 | Address | &:r2138_1 | -| ir.cpp:2138:29:2138:29 | Address | &:r2138_1 | -| ir.cpp:2138:29:2138:29 | Arg(this) | this:r2138_1 | -| ir.cpp:2138:29:2138:29 | CallTarget | func:r2138_3 | -| ir.cpp:2138:29:2138:29 | ChiPartial | partial:m2138_5 | -| ir.cpp:2138:29:2138:29 | ChiPartial | partial:m2138_7 | -| ir.cpp:2138:29:2138:29 | ChiTotal | total:m2137_4 | -| ir.cpp:2138:29:2138:29 | ChiTotal | total:m2138_2 | -| ir.cpp:2138:29:2138:29 | SideEffect | ~m2137_4 | -| ir.cpp:2138:32:2138:32 | Address | &:r2138_9 | -| ir.cpp:2138:32:2138:32 | Condition | r2138_10 | -| ir.cpp:2138:32:2138:32 | Load | m2137_6 | -| ir.cpp:2139:9:2139:9 | Address | &:r2139_1 | -| ir.cpp:2139:9:2139:9 | Address | &:r2139_1 | -| ir.cpp:2139:9:2139:9 | Arg(this) | this:r2139_1 | -| ir.cpp:2139:9:2139:9 | ChiPartial | partial:m2139_8 | -| ir.cpp:2139:9:2139:9 | ChiTotal | total:m2138_8 | -| ir.cpp:2139:9:2139:9 | SideEffect | m2138_8 | -| ir.cpp:2139:11:2139:15 | CallTarget | func:r2139_2 | -| ir.cpp:2139:11:2139:15 | ChiPartial | partial:m2139_5 | -| ir.cpp:2139:11:2139:15 | ChiTotal | total:m2138_6 | -| ir.cpp:2139:11:2139:15 | SideEffect | ~m2138_6 | -| ir.cpp:2139:17:2139:19 | Arg(0) | 0:r2139_3 | -| ir.cpp:2139:21:2139:21 | Address | &:r2139_10 | -| ir.cpp:2139:21:2139:21 | Address | &:r2139_10 | -| ir.cpp:2139:21:2139:21 | Arg(this) | this:r2139_10 | -| ir.cpp:2139:21:2139:21 | CallTarget | func:r2139_11 | -| ir.cpp:2139:21:2139:21 | ChiPartial | partial:m2139_13 | -| ir.cpp:2139:21:2139:21 | ChiPartial | partial:m2139_16 | -| ir.cpp:2139:21:2139:21 | ChiTotal | total:m2139_6 | -| ir.cpp:2139:21:2139:21 | ChiTotal | total:m2139_9 | -| ir.cpp:2139:21:2139:21 | SideEffect | m2139_9 | -| ir.cpp:2139:21:2139:21 | SideEffect | ~m2139_6 | -| ir.cpp:2141:39:2141:39 | Address | &:r2141_2 | -| ir.cpp:2141:39:2141:39 | Address | &:r2141_2 | -| ir.cpp:2141:39:2141:39 | Arg(this) | this:r2141_2 | -| ir.cpp:2141:39:2141:39 | CallTarget | func:r2141_4 | -| ir.cpp:2141:39:2141:39 | ChiPartial | partial:m2141_6 | -| ir.cpp:2141:39:2141:39 | ChiPartial | partial:m2141_8 | -| ir.cpp:2141:39:2141:39 | ChiTotal | total:m2141_1 | -| ir.cpp:2141:39:2141:39 | ChiTotal | total:m2141_3 | -| ir.cpp:2141:39:2141:39 | Phi | from 0:~m2138_6 | -| ir.cpp:2141:39:2141:39 | Phi | from 2:~m2139_14 | -| ir.cpp:2141:39:2141:39 | SideEffect | ~m2141_1 | -| ir.cpp:2141:42:2141:76 | Condition | r2141_10 | -| ir.cpp:2142:9:2142:9 | Address | &:r2142_1 | -| ir.cpp:2142:9:2142:9 | Address | &:r2142_1 | -| ir.cpp:2142:9:2142:9 | Arg(this) | this:r2142_1 | -| ir.cpp:2142:9:2142:9 | ChiPartial | partial:m2142_8 | -| ir.cpp:2142:9:2142:9 | ChiTotal | total:m2141_9 | -| ir.cpp:2142:9:2142:9 | SideEffect | m2141_9 | -| ir.cpp:2142:11:2142:15 | CallTarget | func:r2142_2 | -| ir.cpp:2142:11:2142:15 | ChiPartial | partial:m2142_5 | -| ir.cpp:2142:11:2142:15 | ChiTotal | total:m2141_7 | -| ir.cpp:2142:11:2142:15 | SideEffect | ~m2141_7 | -| ir.cpp:2142:17:2142:19 | Arg(0) | 0:r2142_3 | -| ir.cpp:2144:32:2144:32 | Address | &:r2144_1 | -| ir.cpp:2144:32:2144:32 | Address | &:r2144_1 | -| ir.cpp:2144:32:2144:32 | Arg(this) | this:r2144_1 | -| ir.cpp:2144:32:2144:32 | CallTarget | func:r2144_3 | -| ir.cpp:2144:32:2144:32 | ChiPartial | partial:m2144_5 | -| ir.cpp:2144:32:2144:32 | ChiPartial | partial:m2144_7 | -| ir.cpp:2144:32:2144:32 | ChiTotal | total:m2142_6 | -| ir.cpp:2144:32:2144:32 | ChiTotal | total:m2144_2 | -| ir.cpp:2144:32:2144:32 | SideEffect | ~m2142_6 | -| ir.cpp:2144:35:2144:35 | Address | &:r2144_9 | -| ir.cpp:2144:35:2144:35 | Condition | r2144_11 | -| ir.cpp:2144:35:2144:35 | Load | m2137_8 | -| ir.cpp:2144:35:2144:35 | Unary | r2144_10 | -| ir.cpp:2146:11:2146:11 | Address | &:r2146_1 | -| ir.cpp:2146:11:2146:11 | Address | &:r2146_1 | -| ir.cpp:2146:11:2146:11 | Arg(this) | this:r2146_1 | -| ir.cpp:2146:11:2146:11 | ChiPartial | partial:m2146_8 | -| ir.cpp:2146:11:2146:11 | ChiTotal | total:m2144_8 | -| ir.cpp:2146:11:2146:11 | SideEffect | m2144_8 | -| ir.cpp:2146:13:2146:17 | CallTarget | func:r2146_2 | -| ir.cpp:2146:13:2146:17 | ChiPartial | partial:m2146_5 | -| ir.cpp:2146:13:2146:17 | ChiTotal | total:m2144_6 | -| ir.cpp:2146:13:2146:17 | SideEffect | ~m2144_6 | -| ir.cpp:2146:19:2146:21 | Arg(0) | 0:r2146_3 | -| ir.cpp:2149:11:2149:11 | Address | &:r2149_1 | -| ir.cpp:2149:11:2149:11 | Address | &:r2149_1 | -| ir.cpp:2149:11:2149:11 | Arg(this) | this:r2149_1 | -| ir.cpp:2149:11:2149:11 | ChiPartial | partial:m2149_8 | -| ir.cpp:2149:11:2149:11 | ChiTotal | total:m2144_8 | -| ir.cpp:2149:11:2149:11 | SideEffect | m2144_8 | -| ir.cpp:2149:13:2149:17 | CallTarget | func:r2149_2 | -| ir.cpp:2149:13:2149:17 | ChiPartial | partial:m2149_5 | -| ir.cpp:2149:13:2149:17 | ChiTotal | total:m2144_6 | -| ir.cpp:2149:13:2149:17 | SideEffect | ~m2144_6 | -| ir.cpp:2149:19:2149:21 | Arg(0) | 0:r2149_3 | -| ir.cpp:2151:5:2151:5 | Phi | from 5:~m2146_6 | -| ir.cpp:2151:5:2151:5 | Phi | from 6:~m2149_6 | -| ir.cpp:2153:25:2153:25 | Address | &:r2153_1 | -| ir.cpp:2153:25:2153:25 | Address | &:r2153_1 | -| ir.cpp:2153:25:2153:25 | Arg(this) | this:r2153_1 | -| ir.cpp:2153:25:2153:25 | CallTarget | func:r2153_3 | -| ir.cpp:2153:25:2153:25 | ChiPartial | partial:m2153_5 | -| ir.cpp:2153:25:2153:25 | ChiPartial | partial:m2153_7 | -| ir.cpp:2153:25:2153:25 | ChiTotal | total:m2151_1 | -| ir.cpp:2153:25:2153:25 | ChiTotal | total:m2153_2 | -| ir.cpp:2153:25:2153:25 | SideEffect | ~m2151_1 | -| ir.cpp:2154:5:2154:5 | Address | &:r2154_14 | -| ir.cpp:2154:5:2154:5 | Address | &:r2154_18 | -| ir.cpp:2154:5:2154:5 | Address | &:r2154_26 | -| ir.cpp:2154:37:2154:38 | Address | &:r2154_1 | -| ir.cpp:2154:37:2154:38 | Address | &:r2154_1 | -| ir.cpp:2154:37:2154:38 | Arg(this) | this:r2154_1 | -| ir.cpp:2154:40:2154:40 | Address | &:r2154_4 | -| ir.cpp:2154:40:2154:40 | Address | &:r2154_4 | -| ir.cpp:2154:40:2154:40 | Address | &:r2154_5 | -| ir.cpp:2154:40:2154:40 | Arg(0) | 0:r2154_8 | -| ir.cpp:2154:40:2154:40 | Load | m2153_8 | -| ir.cpp:2154:40:2154:40 | Load | m2154_7 | -| ir.cpp:2154:40:2154:40 | StoreValue | r2154_6 | -| ir.cpp:2154:40:2154:41 | CallTarget | func:r2154_3 | -| ir.cpp:2154:40:2154:41 | ChiPartial | partial:m2154_10 | -| ir.cpp:2154:40:2154:41 | ChiPartial | partial:m2154_12 | -| ir.cpp:2154:40:2154:41 | ChiTotal | total:m2153_6 | -| ir.cpp:2154:40:2154:41 | ChiTotal | total:m2154_2 | -| ir.cpp:2154:40:2154:41 | SideEffect | ~m2153_6 | -| ir.cpp:2154:64:2154:64 | Address | &:r2154_44 | -| ir.cpp:2154:64:2154:64 | Address | &:r2154_52 | -| ir.cpp:2154:64:2154:64 | Address | &:r2154_52 | -| ir.cpp:2154:64:2154:64 | Arg(this) | this:r2154_52 | -| ir.cpp:2154:64:2154:64 | CallTarget | func:r2154_53 | -| ir.cpp:2154:64:2154:64 | ChiPartial | partial:m2154_55 | -| ir.cpp:2154:64:2154:64 | ChiPartial | partial:m2154_58 | -| ir.cpp:2154:64:2154:64 | ChiTotal | total:m2155_6 | -| ir.cpp:2154:64:2154:64 | ChiTotal | total:m2155_9 | -| ir.cpp:2154:64:2154:64 | SideEffect | m2155_9 | -| ir.cpp:2154:64:2154:64 | SideEffect | ~m2155_6 | -| ir.cpp:2154:68:2154:68 | Address | &:r2154_19 | -| ir.cpp:2154:68:2154:68 | Address | &:r2154_27 | -| ir.cpp:2154:68:2154:68 | Address | &:r2154_38 | -| ir.cpp:2154:68:2154:68 | Address | &:r2154_47 | -| ir.cpp:2154:68:2154:68 | Address | &:r2154_60 | -| ir.cpp:2154:68:2154:68 | Address | &:r2154_60 | -| ir.cpp:2154:68:2154:68 | Arg(0) | 0:r2154_39 | -| ir.cpp:2154:68:2154:68 | Arg(this) | this:r0_2 | -| ir.cpp:2154:68:2154:68 | Arg(this) | this:r0_5 | -| ir.cpp:2154:68:2154:68 | Arg(this) | this:r0_7 | -| ir.cpp:2154:68:2154:68 | Arg(this) | this:r0_9 | -| ir.cpp:2154:68:2154:68 | Arg(this) | this:r2154_60 | -| ir.cpp:2154:68:2154:68 | CallTarget | func:r2154_21 | -| ir.cpp:2154:68:2154:68 | CallTarget | func:r2154_29 | -| ir.cpp:2154:68:2154:68 | CallTarget | func:r2154_37 | -| ir.cpp:2154:68:2154:68 | CallTarget | func:r2154_46 | -| ir.cpp:2154:68:2154:68 | CallTarget | func:r2154_61 | -| ir.cpp:2154:68:2154:68 | ChiPartial | partial:m2154_23 | -| ir.cpp:2154:68:2154:68 | ChiPartial | partial:m2154_31 | -| ir.cpp:2154:68:2154:68 | ChiPartial | partial:m2154_41 | -| ir.cpp:2154:68:2154:68 | ChiPartial | partial:m2154_48 | -| ir.cpp:2154:68:2154:68 | ChiPartial | partial:m2154_63 | -| ir.cpp:2154:68:2154:68 | ChiPartial | partial:m2154_66 | -| ir.cpp:2154:68:2154:68 | ChiTotal | total:m2154_11 | -| ir.cpp:2154:68:2154:68 | ChiTotal | total:m2154_24 | -| ir.cpp:2154:68:2154:68 | ChiTotal | total:m2154_34 | -| ir.cpp:2154:68:2154:68 | ChiTotal | total:m2154_35 | -| ir.cpp:2154:68:2154:68 | ChiTotal | total:m2154_42 | -| ir.cpp:2154:68:2154:68 | ChiTotal | total:m2154_56 | -| ir.cpp:2154:68:2154:68 | Condition | r2154_40 | -| ir.cpp:2154:68:2154:68 | Load | m2154_17 | -| ir.cpp:2154:68:2154:68 | Load | m2154_17 | -| ir.cpp:2154:68:2154:68 | Load | m2154_33 | -| ir.cpp:2154:68:2154:68 | Phi | from 7:m2154_25 | -| ir.cpp:2154:68:2154:68 | Phi | from 7:~m2154_32 | -| ir.cpp:2154:68:2154:68 | Phi | from 9:m2154_67 | -| ir.cpp:2154:68:2154:68 | Phi | from 9:~m2154_64 | -| ir.cpp:2154:68:2154:68 | SideEffect | m2154_34 | -| ir.cpp:2154:68:2154:68 | SideEffect | ~m2154_11 | -| ir.cpp:2154:68:2154:68 | SideEffect | ~m2154_24 | -| ir.cpp:2154:68:2154:68 | SideEffect | ~m2154_35 | -| ir.cpp:2154:68:2154:68 | SideEffect | ~m2154_42 | -| ir.cpp:2154:68:2154:68 | SideEffect | ~m2154_56 | -| ir.cpp:2154:68:2154:68 | StoreValue | r2154_22 | -| ir.cpp:2154:68:2154:68 | StoreValue | r2154_30 | -| ir.cpp:2154:68:2154:68 | Unary | r2154_20 | -| ir.cpp:2154:68:2154:68 | Unary | r2154_28 | -| ir.cpp:2154:68:2154:68 | Unary | r2154_36 | -| ir.cpp:2154:68:2154:68 | Unary | r2154_45 | -| ir.cpp:2154:68:2154:68 | Unary | r2154_62 | -| ir.cpp:2154:68:2154:69 | StoreValue | r2154_16 | -| ir.cpp:2154:68:2154:69 | Unary | r2154_15 | -| ir.cpp:2154:68:2154:70 | Load | ~m2154_49 | -| ir.cpp:2154:68:2154:70 | StoreValue | r2154_50 | -| ir.cpp:2155:7:2155:7 | Address | &:r2155_1 | -| ir.cpp:2155:7:2155:7 | Address | &:r2155_1 | -| ir.cpp:2155:7:2155:7 | Arg(this) | this:r2155_1 | -| ir.cpp:2155:7:2155:7 | ChiPartial | partial:m2155_8 | -| ir.cpp:2155:7:2155:7 | ChiTotal | total:m2154_51 | -| ir.cpp:2155:7:2155:7 | SideEffect | m2154_51 | -| ir.cpp:2155:9:2155:13 | CallTarget | func:r2155_2 | -| ir.cpp:2155:9:2155:13 | ChiPartial | partial:m2155_5 | -| ir.cpp:2155:9:2155:13 | ChiTotal | total:m2154_49 | -| ir.cpp:2155:9:2155:13 | SideEffect | ~m2154_49 | -| ir.cpp:2155:15:2155:17 | Arg(0) | 0:r2155_3 | -| ir.cpp:2157:5:2157:5 | Address | &:r2157_14 | -| ir.cpp:2157:5:2157:5 | Address | &:r2157_18 | -| ir.cpp:2157:5:2157:5 | Address | &:r2157_26 | -| ir.cpp:2157:37:2157:38 | Address | &:r2157_1 | -| ir.cpp:2157:37:2157:38 | Address | &:r2157_1 | -| ir.cpp:2157:37:2157:38 | Address | &:r2157_60 | -| ir.cpp:2157:37:2157:38 | Address | &:r2157_60 | -| ir.cpp:2157:37:2157:38 | Arg(this) | this:r2157_1 | -| ir.cpp:2157:37:2157:38 | Arg(this) | this:r2157_60 | -| ir.cpp:2157:37:2157:38 | CallTarget | func:r2157_61 | -| ir.cpp:2157:37:2157:38 | ChiPartial | partial:m2157_63 | -| ir.cpp:2157:37:2157:38 | ChiPartial | partial:m2157_66 | -| ir.cpp:2157:37:2157:38 | ChiTotal | total:m2157_13 | -| ir.cpp:2157:37:2157:38 | ChiTotal | total:m2157_56 | -| ir.cpp:2157:37:2157:38 | SideEffect | m2157_13 | -| ir.cpp:2157:37:2157:38 | SideEffect | ~m2157_56 | -| ir.cpp:2157:40:2157:40 | Address | &:r2157_4 | -| ir.cpp:2157:40:2157:40 | Address | &:r2157_4 | -| ir.cpp:2157:40:2157:40 | Address | &:r2157_5 | -| ir.cpp:2157:40:2157:40 | Arg(0) | 0:r2157_8 | -| ir.cpp:2157:40:2157:40 | Load | m2153_8 | -| ir.cpp:2157:40:2157:40 | Load | m2157_7 | -| ir.cpp:2157:40:2157:40 | StoreValue | r2157_6 | -| ir.cpp:2157:40:2157:41 | CallTarget | func:r2157_3 | -| ir.cpp:2157:40:2157:41 | ChiPartial | partial:m2157_10 | -| ir.cpp:2157:40:2157:41 | ChiPartial | partial:m2157_12 | -| ir.cpp:2157:40:2157:41 | ChiTotal | total:m2154_42 | -| ir.cpp:2157:40:2157:41 | ChiTotal | total:m2157_2 | -| ir.cpp:2157:40:2157:41 | SideEffect | ~m2154_42 | -| ir.cpp:2157:64:2157:64 | Address | &:r2157_44 | -| ir.cpp:2157:64:2157:64 | Address | &:r2157_52 | -| ir.cpp:2157:64:2157:64 | Address | &:r2157_52 | -| ir.cpp:2157:64:2157:64 | Address | &:r2157_68 | -| ir.cpp:2157:64:2157:64 | Address | &:r2157_68 | -| ir.cpp:2157:64:2157:64 | Arg(this) | this:r2157_52 | -| ir.cpp:2157:64:2157:64 | Arg(this) | this:r2157_68 | -| ir.cpp:2157:64:2157:64 | CallTarget | func:r2157_53 | -| ir.cpp:2157:64:2157:64 | CallTarget | func:r2157_69 | -| ir.cpp:2157:64:2157:64 | ChiPartial | partial:m2157_55 | -| ir.cpp:2157:64:2157:64 | ChiPartial | partial:m2157_58 | -| ir.cpp:2157:64:2157:64 | ChiPartial | partial:m2157_71 | -| ir.cpp:2157:64:2157:64 | ChiPartial | partial:m2157_74 | -| ir.cpp:2157:64:2157:64 | ChiTotal | total:m2159_5 | -| ir.cpp:2157:64:2157:64 | ChiTotal | total:m2159_5 | -| ir.cpp:2157:64:2157:64 | ChiTotal | total:m2159_8 | -| ir.cpp:2157:64:2157:64 | ChiTotal | total:m2159_8 | -| ir.cpp:2157:64:2157:64 | SideEffect | m2159_8 | -| ir.cpp:2157:64:2157:64 | SideEffect | m2159_8 | -| ir.cpp:2157:64:2157:64 | SideEffect | ~m2159_5 | -| ir.cpp:2157:64:2157:64 | SideEffect | ~m2159_5 | -| ir.cpp:2157:68:2157:68 | Address | &:r2157_19 | -| ir.cpp:2157:68:2157:68 | Address | &:r2157_27 | -| ir.cpp:2157:68:2157:68 | Address | &:r2157_38 | -| ir.cpp:2157:68:2157:68 | Address | &:r2157_47 | -| ir.cpp:2157:68:2157:68 | Address | &:r2157_76 | -| ir.cpp:2157:68:2157:68 | Address | &:r2157_76 | -| ir.cpp:2157:68:2157:68 | Arg(0) | 0:r2157_39 | -| ir.cpp:2157:68:2157:68 | Arg(this) | this:r0_12 | -| ir.cpp:2157:68:2157:68 | Arg(this) | this:r0_15 | -| ir.cpp:2157:68:2157:68 | Arg(this) | this:r0_17 | -| ir.cpp:2157:68:2157:68 | Arg(this) | this:r0_19 | -| ir.cpp:2157:68:2157:68 | Arg(this) | this:r2157_76 | -| ir.cpp:2157:68:2157:68 | CallTarget | func:r2157_21 | -| ir.cpp:2157:68:2157:68 | CallTarget | func:r2157_29 | -| ir.cpp:2157:68:2157:68 | CallTarget | func:r2157_37 | -| ir.cpp:2157:68:2157:68 | CallTarget | func:r2157_46 | -| ir.cpp:2157:68:2157:68 | CallTarget | func:r2157_77 | -| ir.cpp:2157:68:2157:68 | ChiPartial | partial:m2157_23 | -| ir.cpp:2157:68:2157:68 | ChiPartial | partial:m2157_31 | -| ir.cpp:2157:68:2157:68 | ChiPartial | partial:m2157_41 | -| ir.cpp:2157:68:2157:68 | ChiPartial | partial:m2157_48 | -| ir.cpp:2157:68:2157:68 | ChiPartial | partial:m2157_79 | -| ir.cpp:2157:68:2157:68 | ChiPartial | partial:m2157_82 | -| ir.cpp:2157:68:2157:68 | ChiTotal | total:m2157_11 | -| ir.cpp:2157:68:2157:68 | ChiTotal | total:m2157_24 | -| ir.cpp:2157:68:2157:68 | ChiTotal | total:m2157_34 | -| ir.cpp:2157:68:2157:68 | ChiTotal | total:m2157_35 | -| ir.cpp:2157:68:2157:68 | ChiTotal | total:m2157_42 | -| ir.cpp:2157:68:2157:68 | ChiTotal | total:m2157_72 | -| ir.cpp:2157:68:2157:68 | Condition | r2157_40 | -| ir.cpp:2157:68:2157:68 | Load | m2157_17 | -| ir.cpp:2157:68:2157:68 | Load | m2157_17 | -| ir.cpp:2157:68:2157:68 | Load | m2157_33 | -| ir.cpp:2157:68:2157:68 | Phi | from 10:m2157_25 | -| ir.cpp:2157:68:2157:68 | Phi | from 10:~m2157_32 | -| ir.cpp:2157:68:2157:68 | Phi | from 14:m2157_83 | -| ir.cpp:2157:68:2157:68 | Phi | from 14:~m2157_80 | -| ir.cpp:2157:68:2157:68 | SideEffect | m2157_34 | -| ir.cpp:2157:68:2157:68 | SideEffect | ~m2157_11 | -| ir.cpp:2157:68:2157:68 | SideEffect | ~m2157_24 | -| ir.cpp:2157:68:2157:68 | SideEffect | ~m2157_35 | -| ir.cpp:2157:68:2157:68 | SideEffect | ~m2157_42 | -| ir.cpp:2157:68:2157:68 | SideEffect | ~m2157_72 | -| ir.cpp:2157:68:2157:68 | StoreValue | r2157_22 | -| ir.cpp:2157:68:2157:68 | StoreValue | r2157_30 | -| ir.cpp:2157:68:2157:68 | Unary | r2157_20 | -| ir.cpp:2157:68:2157:68 | Unary | r2157_28 | -| ir.cpp:2157:68:2157:68 | Unary | r2157_36 | -| ir.cpp:2157:68:2157:68 | Unary | r2157_45 | -| ir.cpp:2157:68:2157:68 | Unary | r2157_78 | -| ir.cpp:2157:68:2157:69 | StoreValue | r2157_16 | -| ir.cpp:2157:68:2157:69 | Unary | r2157_15 | -| ir.cpp:2157:68:2157:70 | Load | ~m2157_49 | -| ir.cpp:2157:68:2157:70 | StoreValue | r2157_50 | -| ir.cpp:2158:7:2158:7 | Address | &:r2158_1 | -| ir.cpp:2158:7:2158:7 | Address | &:r2158_1 | -| ir.cpp:2158:7:2158:7 | Arg(this) | this:r2158_1 | -| ir.cpp:2158:7:2158:7 | ChiPartial | partial:m2158_8 | -| ir.cpp:2158:7:2158:7 | ChiTotal | total:m2157_51 | -| ir.cpp:2158:7:2158:7 | SideEffect | m2157_51 | -| ir.cpp:2158:9:2158:13 | CallTarget | func:r2158_2 | -| ir.cpp:2158:9:2158:13 | ChiPartial | partial:m2158_5 | -| ir.cpp:2158:9:2158:13 | ChiTotal | total:m2157_49 | -| ir.cpp:2158:9:2158:13 | SideEffect | ~m2157_49 | -| ir.cpp:2158:15:2158:17 | Arg(0) | 0:r2158_3 | -| ir.cpp:2159:11:2159:11 | Address | &:r2159_1 | -| ir.cpp:2159:11:2159:11 | Address | &:r2159_1 | -| ir.cpp:2159:11:2159:11 | Arg(this) | this:r2159_1 | -| ir.cpp:2159:11:2159:11 | ChiPartial | partial:m2159_7 | -| ir.cpp:2159:11:2159:11 | ChiTotal | total:m2158_9 | -| ir.cpp:2159:11:2159:11 | SideEffect | m2158_9 | -| ir.cpp:2159:11:2159:19 | Left | r2159_9 | -| ir.cpp:2159:11:2159:26 | Condition | r2159_11 | -| ir.cpp:2159:13:2159:17 | CallTarget | func:r2159_2 | -| ir.cpp:2159:13:2159:17 | ChiPartial | partial:m2159_4 | -| ir.cpp:2159:13:2159:17 | ChiTotal | total:m2158_6 | -| ir.cpp:2159:13:2159:17 | SideEffect | ~m2158_6 | -| ir.cpp:2159:13:2159:17 | Unary | r2159_3 | -| ir.cpp:2159:24:2159:26 | Right | r2159_10 | -| ir.cpp:2163:5:2163:5 | Address | &:r2163_10 | -| ir.cpp:2163:5:2163:5 | Address | &:r2163_14 | -| ir.cpp:2163:5:2163:5 | Address | &:r2163_22 | -| ir.cpp:2163:21:2163:22 | Address | &:r2163_1 | -| ir.cpp:2163:21:2163:22 | Address | &:r2163_1 | -| ir.cpp:2163:21:2163:22 | Address | &:r2163_57 | -| ir.cpp:2163:21:2163:22 | Address | &:r2163_57 | -| ir.cpp:2163:21:2163:22 | Arg(this) | this:r2163_1 | -| ir.cpp:2163:21:2163:22 | Arg(this) | this:r2163_57 | -| ir.cpp:2163:21:2163:22 | CallTarget | func:r2163_58 | -| ir.cpp:2163:21:2163:22 | ChiPartial | partial:m2163_60 | -| ir.cpp:2163:21:2163:22 | ChiPartial | partial:m2163_63 | -| ir.cpp:2163:21:2163:22 | ChiTotal | total:m2163_9 | -| ir.cpp:2163:21:2163:22 | ChiTotal | total:m2163_54 | -| ir.cpp:2163:21:2163:22 | SideEffect | m2163_9 | -| ir.cpp:2163:21:2163:22 | SideEffect | ~m2163_54 | -| ir.cpp:2163:24:2163:24 | Arg(0) | 0:r2163_4 | -| ir.cpp:2163:24:2163:25 | CallTarget | func:r2163_3 | -| ir.cpp:2163:24:2163:25 | ChiPartial | partial:m2163_6 | -| ir.cpp:2163:24:2163:25 | ChiPartial | partial:m2163_8 | -| ir.cpp:2163:24:2163:25 | ChiTotal | total:m2157_42 | -| ir.cpp:2163:24:2163:25 | ChiTotal | total:m2163_2 | -| ir.cpp:2163:24:2163:25 | SideEffect | ~m2157_42 | -| ir.cpp:2163:32:2163:32 | Address | &:r2163_49 | -| ir.cpp:2163:36:2163:36 | Address | &:r2163_15 | -| ir.cpp:2163:36:2163:36 | Address | &:r2163_23 | -| ir.cpp:2163:36:2163:36 | Address | &:r2163_34 | -| ir.cpp:2163:36:2163:36 | Address | &:r2163_40 | -| ir.cpp:2163:36:2163:36 | Address | &:r2163_40 | -| ir.cpp:2163:36:2163:36 | Address | &:r2163_52 | -| ir.cpp:2163:36:2163:36 | Arg(0) | 0:r2163_35 | -| ir.cpp:2163:36:2163:36 | Arg(this) | this:r0_22 | -| ir.cpp:2163:36:2163:36 | Arg(this) | this:r0_25 | -| ir.cpp:2163:36:2163:36 | Arg(this) | this:r0_27 | -| ir.cpp:2163:36:2163:36 | Arg(this) | this:r0_29 | -| ir.cpp:2163:36:2163:36 | Arg(this) | this:r2163_40 | -| ir.cpp:2163:36:2163:36 | CallTarget | func:r2163_17 | -| ir.cpp:2163:36:2163:36 | CallTarget | func:r2163_25 | -| ir.cpp:2163:36:2163:36 | CallTarget | func:r2163_33 | -| ir.cpp:2163:36:2163:36 | CallTarget | func:r2163_41 | -| ir.cpp:2163:36:2163:36 | CallTarget | func:r2163_51 | -| ir.cpp:2163:36:2163:36 | ChiPartial | partial:m2163_19 | -| ir.cpp:2163:36:2163:36 | ChiPartial | partial:m2163_27 | -| ir.cpp:2163:36:2163:36 | ChiPartial | partial:m2163_37 | -| ir.cpp:2163:36:2163:36 | ChiPartial | partial:m2163_43 | -| ir.cpp:2163:36:2163:36 | ChiPartial | partial:m2163_46 | -| ir.cpp:2163:36:2163:36 | ChiPartial | partial:m2163_53 | -| ir.cpp:2163:36:2163:36 | ChiTotal | total:m2163_7 | -| ir.cpp:2163:36:2163:36 | ChiTotal | total:m2163_20 | -| ir.cpp:2163:36:2163:36 | ChiTotal | total:m2163_30 | -| ir.cpp:2163:36:2163:36 | ChiTotal | total:m2163_31 | -| ir.cpp:2163:36:2163:36 | ChiTotal | total:m2163_38 | -| ir.cpp:2163:36:2163:36 | ChiTotal | total:m2163_54 | -| ir.cpp:2163:36:2163:36 | Condition | r2163_36 | -| ir.cpp:2163:36:2163:36 | Load | m2163_13 | -| ir.cpp:2163:36:2163:36 | Load | m2163_13 | -| ir.cpp:2163:36:2163:36 | Load | m2163_29 | -| ir.cpp:2163:36:2163:36 | Phi | from 15:m2163_21 | -| ir.cpp:2163:36:2163:36 | Phi | from 15:~m2163_28 | -| ir.cpp:2163:36:2163:36 | Phi | from 17:m2163_47 | -| ir.cpp:2163:36:2163:36 | Phi | from 17:~m2163_44 | -| ir.cpp:2163:36:2163:36 | SideEffect | m2163_30 | -| ir.cpp:2163:36:2163:36 | SideEffect | ~m2163_7 | -| ir.cpp:2163:36:2163:36 | SideEffect | ~m2163_20 | -| ir.cpp:2163:36:2163:36 | SideEffect | ~m2163_31 | -| ir.cpp:2163:36:2163:36 | SideEffect | ~m2163_38 | -| ir.cpp:2163:36:2163:36 | SideEffect | ~m2163_54 | -| ir.cpp:2163:36:2163:36 | StoreValue | r2163_18 | -| ir.cpp:2163:36:2163:36 | StoreValue | r2163_26 | -| ir.cpp:2163:36:2163:36 | Unary | r2163_16 | -| ir.cpp:2163:36:2163:36 | Unary | r2163_24 | -| ir.cpp:2163:36:2163:36 | Unary | r2163_32 | -| ir.cpp:2163:36:2163:36 | Unary | r2163_42 | -| ir.cpp:2163:36:2163:36 | Unary | r2163_50 | -| ir.cpp:2163:36:2163:37 | StoreValue | r2163_12 | -| ir.cpp:2163:36:2163:37 | Unary | r2163_11 | -| ir.cpp:2163:36:2163:38 | Load | ~m2163_54 | -| ir.cpp:2163:36:2163:38 | StoreValue | r2163_55 | -| ir.cpp:2164:11:2164:11 | Address | &:r2164_1 | -| ir.cpp:2164:11:2164:11 | Left | r2164_2 | -| ir.cpp:2164:11:2164:11 | Load | m2163_56 | -| ir.cpp:2164:11:2164:16 | Condition | r2164_4 | -| ir.cpp:2164:16:2164:16 | Right | r2164_3 | -| ir.cpp:2168:5:2168:5 | Address | &:r2168_14 | -| ir.cpp:2168:5:2168:5 | Address | &:r2168_18 | -| ir.cpp:2168:5:2168:5 | Address | &:r2168_26 | -| ir.cpp:2168:37:2168:38 | Address | &:r2168_1 | -| ir.cpp:2168:37:2168:38 | Address | &:r2168_1 | -| ir.cpp:2168:37:2168:38 | Arg(this) | this:r2168_1 | -| ir.cpp:2168:40:2168:40 | Address | &:r2168_4 | -| ir.cpp:2168:40:2168:40 | Address | &:r2168_4 | -| ir.cpp:2168:40:2168:40 | Address | &:r2168_5 | -| ir.cpp:2168:40:2168:40 | Arg(0) | 0:r2168_8 | -| ir.cpp:2168:40:2168:40 | Load | m2153_8 | -| ir.cpp:2168:40:2168:40 | Load | m2168_7 | -| ir.cpp:2168:40:2168:40 | StoreValue | r2168_6 | -| ir.cpp:2168:40:2168:41 | CallTarget | func:r2168_3 | -| ir.cpp:2168:40:2168:41 | ChiPartial | partial:m2168_10 | -| ir.cpp:2168:40:2168:41 | ChiPartial | partial:m2168_12 | -| ir.cpp:2168:40:2168:41 | ChiTotal | total:m2163_38 | -| ir.cpp:2168:40:2168:41 | ChiTotal | total:m2168_2 | -| ir.cpp:2168:40:2168:41 | SideEffect | ~m2163_38 | -| ir.cpp:2168:64:2168:64 | Address | &:r2168_44 | -| ir.cpp:2168:64:2168:64 | Address | &:r2168_52 | -| ir.cpp:2168:64:2168:64 | Address | &:r2168_52 | -| ir.cpp:2168:64:2168:64 | Arg(this) | this:r2168_52 | -| ir.cpp:2168:64:2168:64 | CallTarget | func:r2168_53 | -| ir.cpp:2168:64:2168:64 | ChiPartial | partial:m2168_55 | -| ir.cpp:2168:64:2168:64 | ChiPartial | partial:m2168_58 | -| ir.cpp:2168:64:2168:64 | ChiTotal | total:m2168_51 | -| ir.cpp:2168:64:2168:64 | ChiTotal | total:m2171_13 | -| ir.cpp:2168:64:2168:64 | SideEffect | m2168_51 | -| ir.cpp:2168:64:2168:64 | SideEffect | ~m2171_13 | -| ir.cpp:2168:68:2168:68 | Address | &:r2168_19 | -| ir.cpp:2168:68:2168:68 | Address | &:r2168_27 | -| ir.cpp:2168:68:2168:68 | Address | &:r2168_38 | -| ir.cpp:2168:68:2168:68 | Address | &:r2168_47 | -| ir.cpp:2168:68:2168:68 | Address | &:r2168_60 | -| ir.cpp:2168:68:2168:68 | Address | &:r2168_60 | -| ir.cpp:2168:68:2168:68 | Arg(0) | 0:r2168_39 | -| ir.cpp:2168:68:2168:68 | Arg(this) | this:r0_32 | -| ir.cpp:2168:68:2168:68 | Arg(this) | this:r0_35 | -| ir.cpp:2168:68:2168:68 | Arg(this) | this:r0_37 | -| ir.cpp:2168:68:2168:68 | Arg(this) | this:r0_39 | -| ir.cpp:2168:68:2168:68 | Arg(this) | this:r2168_60 | -| ir.cpp:2168:68:2168:68 | CallTarget | func:r2168_21 | -| ir.cpp:2168:68:2168:68 | CallTarget | func:r2168_29 | -| ir.cpp:2168:68:2168:68 | CallTarget | func:r2168_37 | -| ir.cpp:2168:68:2168:68 | CallTarget | func:r2168_46 | -| ir.cpp:2168:68:2168:68 | CallTarget | func:r2168_61 | -| ir.cpp:2168:68:2168:68 | ChiPartial | partial:m2168_23 | -| ir.cpp:2168:68:2168:68 | ChiPartial | partial:m2168_31 | -| ir.cpp:2168:68:2168:68 | ChiPartial | partial:m2168_41 | -| ir.cpp:2168:68:2168:68 | ChiPartial | partial:m2168_48 | -| ir.cpp:2168:68:2168:68 | ChiPartial | partial:m2168_63 | -| ir.cpp:2168:68:2168:68 | ChiPartial | partial:m2168_66 | -| ir.cpp:2168:68:2168:68 | ChiTotal | total:m2168_11 | -| ir.cpp:2168:68:2168:68 | ChiTotal | total:m2168_24 | -| ir.cpp:2168:68:2168:68 | ChiTotal | total:m2168_34 | -| ir.cpp:2168:68:2168:68 | ChiTotal | total:m2168_35 | -| ir.cpp:2168:68:2168:68 | ChiTotal | total:m2168_42 | -| ir.cpp:2168:68:2168:68 | ChiTotal | total:m2168_56 | -| ir.cpp:2168:68:2168:68 | Condition | r2168_40 | -| ir.cpp:2168:68:2168:68 | Load | m2168_17 | -| ir.cpp:2168:68:2168:68 | Load | m2168_17 | -| ir.cpp:2168:68:2168:68 | Load | m2168_33 | -| ir.cpp:2168:68:2168:68 | Phi | from 20:m2168_25 | -| ir.cpp:2168:68:2168:68 | Phi | from 20:~m2168_32 | -| ir.cpp:2168:68:2168:68 | Phi | from 22:m2168_67 | -| ir.cpp:2168:68:2168:68 | Phi | from 22:~m2168_64 | -| ir.cpp:2168:68:2168:68 | SideEffect | m2168_34 | -| ir.cpp:2168:68:2168:68 | SideEffect | ~m2168_11 | -| ir.cpp:2168:68:2168:68 | SideEffect | ~m2168_24 | -| ir.cpp:2168:68:2168:68 | SideEffect | ~m2168_35 | -| ir.cpp:2168:68:2168:68 | SideEffect | ~m2168_42 | -| ir.cpp:2168:68:2168:68 | SideEffect | ~m2168_56 | -| ir.cpp:2168:68:2168:68 | StoreValue | r2168_22 | -| ir.cpp:2168:68:2168:68 | StoreValue | r2168_30 | -| ir.cpp:2168:68:2168:68 | Unary | r2168_20 | -| ir.cpp:2168:68:2168:68 | Unary | r2168_28 | -| ir.cpp:2168:68:2168:68 | Unary | r2168_36 | -| ir.cpp:2168:68:2168:68 | Unary | r2168_45 | -| ir.cpp:2168:68:2168:68 | Unary | r2168_62 | -| ir.cpp:2168:68:2168:69 | StoreValue | r2168_16 | -| ir.cpp:2168:68:2168:69 | Unary | r2168_15 | -| ir.cpp:2168:68:2168:70 | Load | ~m2168_49 | -| ir.cpp:2168:68:2168:70 | StoreValue | r2168_50 | -| ir.cpp:2169:27:2169:28 | Address | &:r2169_1 | -| ir.cpp:2169:27:2169:28 | Address | &:r2169_1 | -| ir.cpp:2169:27:2169:28 | Arg(this) | this:r2169_1 | -| ir.cpp:2169:27:2169:28 | CallTarget | func:r2169_3 | -| ir.cpp:2169:27:2169:28 | ChiPartial | partial:m2169_5 | -| ir.cpp:2169:27:2169:28 | ChiPartial | partial:m2169_7 | -| ir.cpp:2169:27:2169:28 | ChiTotal | total:m2168_49 | -| ir.cpp:2169:27:2169:28 | ChiTotal | total:m2169_2 | -| ir.cpp:2169:27:2169:28 | SideEffect | ~m2168_49 | -| ir.cpp:2170:27:2170:28 | Address | &:r2170_1 | -| ir.cpp:2170:27:2170:28 | Address | &:r2170_1 | -| ir.cpp:2170:27:2170:28 | Arg(this) | this:r2170_1 | -| ir.cpp:2170:27:2170:28 | CallTarget | func:r2170_3 | -| ir.cpp:2170:27:2170:28 | ChiPartial | partial:m2170_5 | -| ir.cpp:2170:27:2170:28 | ChiPartial | partial:m2170_7 | -| ir.cpp:2170:27:2170:28 | ChiTotal | total:m2169_6 | -| ir.cpp:2170:27:2170:28 | ChiTotal | total:m2170_2 | -| ir.cpp:2170:27:2170:28 | SideEffect | ~m2169_6 | -| ir.cpp:2171:5:2171:5 | Address | &:r2171_1 | -| ir.cpp:2171:5:2171:5 | Address | &:r2171_1 | -| ir.cpp:2171:5:2171:5 | Address | &:r2171_9 | -| ir.cpp:2171:5:2171:5 | Address | &:r2171_9 | -| ir.cpp:2171:5:2171:5 | Arg(this) | this:r2171_1 | -| ir.cpp:2171:5:2171:5 | Arg(this) | this:r2171_9 | -| ir.cpp:2171:5:2171:5 | CallTarget | func:r2171_2 | -| ir.cpp:2171:5:2171:5 | CallTarget | func:r2171_10 | -| ir.cpp:2171:5:2171:5 | ChiPartial | partial:m2171_4 | -| ir.cpp:2171:5:2171:5 | ChiPartial | partial:m2171_7 | -| ir.cpp:2171:5:2171:5 | ChiPartial | partial:m2171_12 | -| ir.cpp:2171:5:2171:5 | ChiPartial | partial:m2171_15 | -| ir.cpp:2171:5:2171:5 | ChiTotal | total:m2169_8 | -| ir.cpp:2171:5:2171:5 | ChiTotal | total:m2170_6 | -| ir.cpp:2171:5:2171:5 | ChiTotal | total:m2170_8 | -| ir.cpp:2171:5:2171:5 | ChiTotal | total:m2171_5 | -| ir.cpp:2171:5:2171:5 | SideEffect | m2169_8 | -| ir.cpp:2171:5:2171:5 | SideEffect | m2170_8 | -| ir.cpp:2171:5:2171:5 | SideEffect | ~m2170_6 | -| ir.cpp:2171:5:2171:5 | SideEffect | ~m2171_5 | -| ir.cpp:2172:1:2172:1 | Address | &:r2172_1 | -| ir.cpp:2172:1:2172:1 | Address | &:r2172_1 | -| ir.cpp:2172:1:2172:1 | Address | &:r2172_9 | -| ir.cpp:2172:1:2172:1 | Address | &:r2172_9 | -| ir.cpp:2172:1:2172:1 | Address | &:r2172_18 | -| ir.cpp:2172:1:2172:1 | Address | &:r2172_18 | -| ir.cpp:2172:1:2172:1 | Arg(this) | this:r2172_1 | -| ir.cpp:2172:1:2172:1 | Arg(this) | this:r2172_9 | -| ir.cpp:2172:1:2172:1 | Arg(this) | this:r2172_18 | -| ir.cpp:2172:1:2172:1 | CallTarget | func:r2172_2 | -| ir.cpp:2172:1:2172:1 | CallTarget | func:r2172_10 | -| ir.cpp:2172:1:2172:1 | CallTarget | func:r2172_19 | -| ir.cpp:2172:1:2172:1 | ChiPartial | partial:m2172_4 | -| ir.cpp:2172:1:2172:1 | ChiPartial | partial:m2172_7 | -| ir.cpp:2172:1:2172:1 | ChiPartial | partial:m2172_12 | -| ir.cpp:2172:1:2172:1 | ChiPartial | partial:m2172_15 | -| ir.cpp:2172:1:2172:1 | ChiPartial | partial:m2172_21 | -| ir.cpp:2172:1:2172:1 | ChiPartial | partial:m2172_24 | -| ir.cpp:2172:1:2172:1 | ChiTotal | total:m2153_8 | -| ir.cpp:2172:1:2172:1 | ChiTotal | total:m2153_8 | -| ir.cpp:2172:1:2172:1 | ChiTotal | total:m2153_8 | -| ir.cpp:2172:1:2172:1 | ChiTotal | total:m2157_64 | -| ir.cpp:2172:1:2172:1 | ChiTotal | total:m2163_61 | -| ir.cpp:2172:1:2172:1 | ChiTotal | total:m2168_42 | -| ir.cpp:2172:1:2172:1 | SideEffect | m2153_8 | -| ir.cpp:2172:1:2172:1 | SideEffect | m2153_8 | -| ir.cpp:2172:1:2172:1 | SideEffect | m2153_8 | -| ir.cpp:2172:1:2172:1 | SideEffect | ~m2157_64 | -| ir.cpp:2172:1:2172:1 | SideEffect | ~m2163_61 | -| ir.cpp:2172:1:2172:1 | SideEffect | ~m2168_42 | -| ir.cpp:2174:6:2174:38 | ChiPartial | partial:m2174_3 | -| ir.cpp:2174:6:2174:38 | ChiTotal | total:m2174_2 | -| ir.cpp:2174:6:2174:38 | SideEffect | ~m2177_7 | -| ir.cpp:2175:25:2175:25 | Address | &:r2175_1 | -| ir.cpp:2175:25:2175:25 | Address | &:r2175_1 | -| ir.cpp:2175:25:2175:25 | Arg(this) | this:r2175_1 | -| ir.cpp:2175:25:2175:25 | CallTarget | func:r2175_3 | -| ir.cpp:2175:25:2175:25 | ChiPartial | partial:m2175_5 | -| ir.cpp:2175:25:2175:25 | ChiPartial | partial:m2175_7 | -| ir.cpp:2175:25:2175:25 | ChiTotal | total:m2174_4 | -| ir.cpp:2175:25:2175:25 | ChiTotal | total:m2175_2 | -| ir.cpp:2175:25:2175:25 | SideEffect | ~m2174_4 | -| ir.cpp:2176:32:2176:32 | Address | &:r2176_1 | -| ir.cpp:2176:32:2176:32 | Address | &:r2176_1 | -| ir.cpp:2176:32:2176:32 | Address | &:r2176_4 | -| ir.cpp:2176:32:2176:32 | Arg(this) | this:r2176_4 | -| ir.cpp:2176:32:2176:32 | ChiPartial | partial:m2176_6 | -| ir.cpp:2176:32:2176:32 | ChiTotal | total:m0_6 | -| ir.cpp:2176:32:2176:32 | Condition | r2176_2 | -| ir.cpp:2176:32:2176:32 | Load | ~m2175_6 | -| ir.cpp:2176:32:2176:32 | StoreValue | r2176_5 | -| ir.cpp:2177:1:2177:1 | Address | &:r2177_3 | -| ir.cpp:2177:1:2177:1 | Address | &:r2177_3 | -| ir.cpp:2177:1:2177:1 | Arg(this) | this:r2177_3 | -| ir.cpp:2177:1:2177:1 | CallTarget | func:r2177_4 | -| ir.cpp:2177:1:2177:1 | ChiPartial | partial:m2177_6 | -| ir.cpp:2177:1:2177:1 | ChiPartial | partial:m2177_9 | -| ir.cpp:2177:1:2177:1 | ChiTotal | total:m2175_8 | -| ir.cpp:2177:1:2177:1 | ChiTotal | total:m2177_1 | -| ir.cpp:2177:1:2177:1 | Phi | from 0:~m2175_6 | -| ir.cpp:2177:1:2177:1 | Phi | from 1:~m2176_7 | -| ir.cpp:2177:1:2177:1 | SideEffect | m2175_8 | -| ir.cpp:2177:1:2177:1 | SideEffect | ~m2177_1 | -| ir.cpp:2179:6:2179:38 | ChiPartial | partial:m2179_3 | -| ir.cpp:2179:6:2179:38 | ChiTotal | total:m2179_2 | -| ir.cpp:2179:6:2179:38 | SideEffect | ~m2182_6 | -| ir.cpp:2180:32:2180:32 | Address | &:r2180_1 | -| ir.cpp:2180:32:2180:32 | Address | &:r2180_1 | -| ir.cpp:2180:32:2180:32 | Address | &:r2180_4 | -| ir.cpp:2180:32:2180:32 | Arg(this) | this:r2180_4 | -| ir.cpp:2180:32:2180:32 | ChiPartial | partial:m2180_6 | -| ir.cpp:2180:32:2180:32 | ChiTotal | total:m0_6 | -| ir.cpp:2180:32:2180:32 | Condition | r2180_2 | -| ir.cpp:2180:32:2180:32 | Load | ~m2179_3 | -| ir.cpp:2180:32:2180:32 | StoreValue | r2180_5 | -| ir.cpp:2181:25:2181:25 | Address | &:r2181_2 | -| ir.cpp:2181:25:2181:25 | Address | &:r2181_2 | -| ir.cpp:2181:25:2181:25 | Arg(this) | this:r2181_2 | -| ir.cpp:2181:25:2181:25 | CallTarget | func:r2181_4 | -| ir.cpp:2181:25:2181:25 | ChiPartial | partial:m2181_6 | -| ir.cpp:2181:25:2181:25 | ChiPartial | partial:m2181_8 | -| ir.cpp:2181:25:2181:25 | ChiTotal | total:m2181_1 | -| ir.cpp:2181:25:2181:25 | ChiTotal | total:m2181_3 | -| ir.cpp:2181:25:2181:25 | Phi | from 0:~m2179_4 | -| ir.cpp:2181:25:2181:25 | Phi | from 1:~m2180_7 | -| ir.cpp:2181:25:2181:25 | SideEffect | ~m2181_1 | -| ir.cpp:2182:1:2182:1 | Address | &:r2182_2 | -| ir.cpp:2182:1:2182:1 | Address | &:r2182_2 | -| ir.cpp:2182:1:2182:1 | Arg(this) | this:r2182_2 | -| ir.cpp:2182:1:2182:1 | CallTarget | func:r2182_3 | -| ir.cpp:2182:1:2182:1 | ChiPartial | partial:m2182_5 | -| ir.cpp:2182:1:2182:1 | ChiPartial | partial:m2182_8 | -| ir.cpp:2182:1:2182:1 | ChiTotal | total:m2181_7 | -| ir.cpp:2182:1:2182:1 | ChiTotal | total:m2181_9 | -| ir.cpp:2182:1:2182:1 | SideEffect | m2181_9 | -| ir.cpp:2182:1:2182:1 | SideEffect | ~m2181_7 | -| ir.cpp:2184:6:2184:38 | ChiPartial | partial:m2184_3 | -| ir.cpp:2184:6:2184:38 | ChiTotal | total:m2184_2 | -| ir.cpp:2184:6:2184:38 | SideEffect | ~m2188_15 | -| ir.cpp:2185:25:2185:25 | Address | &:r2185_1 | -| ir.cpp:2185:25:2185:25 | Address | &:r2185_1 | -| ir.cpp:2185:25:2185:25 | Arg(this) | this:r2185_1 | -| ir.cpp:2185:25:2185:25 | CallTarget | func:r2185_3 | -| ir.cpp:2185:25:2185:25 | ChiPartial | partial:m2185_5 | -| ir.cpp:2185:25:2185:25 | ChiPartial | partial:m2185_7 | -| ir.cpp:2185:25:2185:25 | ChiTotal | total:m2184_4 | -| ir.cpp:2185:25:2185:25 | ChiTotal | total:m2185_2 | -| ir.cpp:2185:25:2185:25 | SideEffect | ~m2184_4 | -| ir.cpp:2186:25:2186:25 | Address | &:r2186_1 | -| ir.cpp:2186:25:2186:25 | Address | &:r2186_1 | -| ir.cpp:2186:25:2186:25 | Arg(this) | this:r2186_1 | -| ir.cpp:2186:25:2186:25 | CallTarget | func:r2186_3 | -| ir.cpp:2186:25:2186:25 | ChiPartial | partial:m2186_5 | -| ir.cpp:2186:25:2186:25 | ChiPartial | partial:m2186_7 | -| ir.cpp:2186:25:2186:25 | ChiTotal | total:m2185_6 | -| ir.cpp:2186:25:2186:25 | ChiTotal | total:m2186_2 | -| ir.cpp:2186:25:2186:25 | SideEffect | ~m2185_6 | -| ir.cpp:2187:32:2187:32 | Address | &:r2187_1 | -| ir.cpp:2187:32:2187:32 | Address | &:r2187_1 | -| ir.cpp:2187:32:2187:32 | Address | &:r2187_4 | -| ir.cpp:2187:32:2187:32 | Arg(this) | this:r2187_4 | -| ir.cpp:2187:32:2187:32 | ChiPartial | partial:m2187_6 | -| ir.cpp:2187:32:2187:32 | ChiTotal | total:m0_6 | -| ir.cpp:2187:32:2187:32 | Condition | r2187_2 | -| ir.cpp:2187:32:2187:32 | Load | ~m2186_6 | -| ir.cpp:2187:32:2187:32 | StoreValue | r2187_5 | -| ir.cpp:2188:1:2188:1 | Address | &:r2188_3 | -| ir.cpp:2188:1:2188:1 | Address | &:r2188_3 | -| ir.cpp:2188:1:2188:1 | Address | &:r2188_11 | -| ir.cpp:2188:1:2188:1 | Address | &:r2188_11 | -| ir.cpp:2188:1:2188:1 | Arg(this) | this:r2188_3 | -| ir.cpp:2188:1:2188:1 | Arg(this) | this:r2188_11 | -| ir.cpp:2188:1:2188:1 | CallTarget | func:r2188_4 | -| ir.cpp:2188:1:2188:1 | CallTarget | func:r2188_12 | -| ir.cpp:2188:1:2188:1 | ChiPartial | partial:m2188_6 | -| ir.cpp:2188:1:2188:1 | ChiPartial | partial:m2188_9 | -| ir.cpp:2188:1:2188:1 | ChiPartial | partial:m2188_14 | -| ir.cpp:2188:1:2188:1 | ChiPartial | partial:m2188_17 | -| ir.cpp:2188:1:2188:1 | ChiTotal | total:m2185_8 | -| ir.cpp:2188:1:2188:1 | ChiTotal | total:m2186_8 | -| ir.cpp:2188:1:2188:1 | ChiTotal | total:m2188_1 | -| ir.cpp:2188:1:2188:1 | ChiTotal | total:m2188_7 | -| ir.cpp:2188:1:2188:1 | Phi | from 0:~m2186_6 | -| ir.cpp:2188:1:2188:1 | Phi | from 1:~m2187_7 | -| ir.cpp:2188:1:2188:1 | SideEffect | m2185_8 | -| ir.cpp:2188:1:2188:1 | SideEffect | m2186_8 | -| ir.cpp:2188:1:2188:1 | SideEffect | ~m2188_1 | -| ir.cpp:2188:1:2188:1 | SideEffect | ~m2188_7 | -| ir.cpp:2190:28:2190:55 | Address | &:r2190_3 | -| ir.cpp:2190:28:2190:55 | Arg(this) | this:r2190_3 | -| ir.cpp:2190:28:2190:55 | CallTarget | func:r2190_4 | -| ir.cpp:2190:28:2190:55 | ChiPartial | partial:m2190_6 | -| ir.cpp:2190:28:2190:55 | ChiPartial | partial:m2190_8 | -| ir.cpp:2190:28:2190:55 | ChiTotal | total:m2190_2 | -| ir.cpp:2190:28:2190:55 | ChiTotal | total:m2190_7 | -| ir.cpp:2190:28:2190:55 | SideEffect | ~m2190_2 | -| ir.cpp:2190:28:2190:55 | SideEffect | ~m2190_9 | -| ir.cpp:2194:8:2194:8 | Address | &:r2194_16 | -| ir.cpp:2194:8:2194:8 | Address | &:r2194_16 | -| ir.cpp:2194:8:2194:8 | ChiPartial | partial:m2194_3 | -| ir.cpp:2194:8:2194:8 | ChiPartial | partial:m2194_3 | -| ir.cpp:2194:8:2194:8 | ChiTotal | total:m2194_2 | -| ir.cpp:2194:8:2194:8 | ChiTotal | total:m2194_2 | -| ir.cpp:2194:8:2194:8 | Load | m2194_14 | -| ir.cpp:2194:8:2194:8 | Load | m2194_14 | -| ir.cpp:2194:8:2194:8 | SideEffect | m2194_3 | -| ir.cpp:2194:8:2194:8 | SideEffect | m2194_3 | -| ir.cpp:2194:15:2194:15 | Address | &:r2194_5 | -| ir.cpp:2194:15:2194:15 | Address | &:r2194_5 | -| ir.cpp:2194:15:2194:15 | Address | &:r2194_5 | -| ir.cpp:2194:15:2194:15 | Address | &:r2194_5 | -| ir.cpp:2194:15:2194:15 | Address | &:r2194_7 | -| ir.cpp:2194:15:2194:15 | Address | &:r2194_7 | -| ir.cpp:2194:15:2194:15 | Address | &:r2194_7 | -| ir.cpp:2194:15:2194:15 | Address | &:r2194_7 | -| ir.cpp:2194:15:2194:15 | Load | m2194_6 | -| ir.cpp:2194:15:2194:15 | Load | m2194_6 | -| ir.cpp:2194:15:2194:15 | SideEffect | m2194_8 | -| ir.cpp:2194:15:2194:15 | SideEffect | m2194_8 | -| ir.cpp:2194:20:2194:28 | Address | &:r2194_9 | -| ir.cpp:2194:20:2194:28 | Address | &:r2194_9 | -| ir.cpp:2194:27:2194:27 | Address | &:r2194_10 | -| ir.cpp:2194:27:2194:27 | Address | &:r2194_10 | -| ir.cpp:2194:27:2194:27 | Load | m2194_6 | -| ir.cpp:2194:27:2194:27 | Load | m2194_6 | -| ir.cpp:2194:27:2194:27 | StoreValue | r2194_13 | -| ir.cpp:2194:27:2194:27 | StoreValue | r2194_13 | -| ir.cpp:2194:27:2194:27 | Unary | r2194_11 | -| ir.cpp:2194:27:2194:27 | Unary | r2194_11 | -| ir.cpp:2194:27:2194:27 | Unary | r2194_12 | -| ir.cpp:2194:27:2194:27 | Unary | r2194_12 | -| ir.cpp:2197:10:2197:10 | ChiPartial | partial:m2197_3 | -| ir.cpp:2197:10:2197:10 | ChiPartial | partial:m2197_3 | -| ir.cpp:2197:10:2197:10 | ChiTotal | total:m2197_2 | -| ir.cpp:2197:10:2197:10 | ChiTotal | total:m2197_2 | -| ir.cpp:2197:10:2197:10 | SideEffect | ~m2198_8 | -| ir.cpp:2197:10:2197:10 | SideEffect | ~m2198_16 | -| ir.cpp:2197:29:2197:29 | Address | &:r2197_5 | -| ir.cpp:2197:29:2197:29 | Address | &:r2197_5 | -| ir.cpp:2197:29:2197:29 | Address | &:r2197_5 | -| ir.cpp:2197:29:2197:29 | Address | &:r2197_5 | -| ir.cpp:2197:29:2197:29 | Address | &:r2197_7 | -| ir.cpp:2197:29:2197:29 | Address | &:r2197_7 | -| ir.cpp:2197:29:2197:29 | Address | &:r2197_7 | -| ir.cpp:2197:29:2197:29 | Address | &:r2197_7 | -| ir.cpp:2197:29:2197:29 | Load | m2197_6 | -| ir.cpp:2197:29:2197:29 | Load | m2197_6 | -| ir.cpp:2197:29:2197:29 | SideEffect | m2198_11 | -| ir.cpp:2197:29:2197:29 | SideEffect | m2198_19 | -| ir.cpp:2198:9:2198:11 | CallTarget | func:r2198_1 | -| ir.cpp:2198:9:2198:11 | CallTarget | func:r2198_1 | -| ir.cpp:2198:9:2198:11 | ChiPartial | partial:m2198_7 | -| ir.cpp:2198:9:2198:11 | ChiPartial | partial:m2198_7 | -| ir.cpp:2198:9:2198:11 | ChiTotal | total:m2197_4 | -| ir.cpp:2198:9:2198:11 | ChiTotal | total:m2197_4 | -| ir.cpp:2198:9:2198:11 | SideEffect | ~m2197_4 | -| ir.cpp:2198:9:2198:11 | SideEffect | ~m2197_4 | -| ir.cpp:2198:9:2198:11 | Unary | r2198_6 | -| ir.cpp:2198:9:2198:11 | Unary | r2198_6 | -| ir.cpp:2198:12:2198:15 | Address | &:r2198_12 | -| ir.cpp:2198:12:2198:15 | Address | &:r2198_12 | -| ir.cpp:2198:12:2198:15 | ChiPartial | partial:m2198_18 | -| ir.cpp:2198:12:2198:15 | ChiTotal | total:m2198_11 | -| ir.cpp:2198:12:2198:15 | SideEffect | ~m2198_11 | -| ir.cpp:2198:13:2198:13 | Address | &:r2198_2 | -| ir.cpp:2198:13:2198:13 | Address | &:r2198_2 | -| ir.cpp:2198:13:2198:13 | Address | &:r2198_5 | -| ir.cpp:2198:13:2198:13 | Address | &:r2198_5 | -| ir.cpp:2198:13:2198:13 | Address | &:r2198_5 | -| ir.cpp:2198:13:2198:13 | Address | &:r2198_5 | -| ir.cpp:2198:13:2198:13 | Arg(0) | 0:r2198_5 | -| ir.cpp:2198:13:2198:13 | Arg(0) | 0:r2198_5 | -| ir.cpp:2198:13:2198:13 | ChiPartial | partial:m2198_10 | -| ir.cpp:2198:13:2198:13 | ChiPartial | partial:m2198_10 | -| ir.cpp:2198:13:2198:13 | ChiTotal | total:m2197_8 | -| ir.cpp:2198:13:2198:13 | ChiTotal | total:m2197_8 | -| ir.cpp:2198:13:2198:13 | Load | m2197_6 | -| ir.cpp:2198:13:2198:13 | Load | m2197_6 | -| ir.cpp:2198:13:2198:13 | SideEffect | ~m2197_8 | -| ir.cpp:2198:13:2198:13 | SideEffect | ~m2197_8 | -| ir.cpp:2198:13:2198:13 | Unary | r2198_3 | -| ir.cpp:2198:13:2198:13 | Unary | r2198_3 | -| ir.cpp:2198:13:2198:13 | Unary | r2198_4 | -| ir.cpp:2198:13:2198:13 | Unary | r2198_4 | -| ir.cpp:2198:16:2198:17 | CallTarget | func:r2198_13 | -| ir.cpp:2198:16:2198:17 | ChiPartial | partial:m2198_15 | -| ir.cpp:2198:16:2198:17 | ChiTotal | total:m2198_8 | -| ir.cpp:2198:16:2198:17 | SideEffect | ~m2198_8 | -| ir.cpp:2201:10:2201:36 | ChiPartial | partial:m2201_3 | -| ir.cpp:2201:10:2201:36 | ChiTotal | total:m2201_2 | -| ir.cpp:2201:10:2201:36 | SideEffect | ~m2204_6 | -| ir.cpp:2202:29:2202:29 | Address | &:r2202_1 | -| ir.cpp:2202:29:2202:29 | Address | &:r2202_1 | -| ir.cpp:2202:29:2202:29 | Arg(this) | this:r2202_1 | -| ir.cpp:2202:29:2202:29 | CallTarget | func:r2202_3 | -| ir.cpp:2202:29:2202:29 | ChiPartial | partial:m2202_5 | -| ir.cpp:2202:29:2202:29 | ChiPartial | partial:m2202_7 | -| ir.cpp:2202:29:2202:29 | ChiTotal | total:m2201_4 | -| ir.cpp:2202:29:2202:29 | ChiTotal | total:m2202_2 | -| ir.cpp:2202:29:2202:29 | SideEffect | ~m2201_4 | -| ir.cpp:2203:9:2203:23 | CallTarget | func:r2203_1 | -| ir.cpp:2203:9:2203:23 | ChiPartial | partial:m2203_5 | -| ir.cpp:2203:9:2203:23 | ChiTotal | total:m2202_6 | -| ir.cpp:2203:9:2203:23 | SideEffect | ~m2202_6 | -| ir.cpp:2203:25:2203:25 | Address | &:r2203_3 | -| ir.cpp:2203:25:2203:25 | Address | &:r2203_3 | -| ir.cpp:2203:25:2203:25 | Arg(0) | 0:r2203_3 | -| ir.cpp:2203:25:2203:25 | ChiPartial | partial:m2203_8 | -| ir.cpp:2203:25:2203:25 | ChiTotal | total:m2202_8 | -| ir.cpp:2203:25:2203:25 | SideEffect | ~m2202_8 | -| ir.cpp:2203:25:2203:25 | Unary | r2203_2 | -| ir.cpp:2204:5:2204:5 | Address | &:r2204_2 | -| ir.cpp:2204:5:2204:5 | Address | &:r2204_2 | -| ir.cpp:2204:5:2204:5 | Arg(this) | this:r2204_2 | -| ir.cpp:2204:5:2204:5 | CallTarget | func:r2204_3 | -| ir.cpp:2204:5:2204:5 | ChiPartial | partial:m2204_5 | -| ir.cpp:2204:5:2204:5 | ChiPartial | partial:m2204_8 | -| ir.cpp:2204:5:2204:5 | ChiTotal | total:m2203_6 | -| ir.cpp:2204:5:2204:5 | ChiTotal | total:m2203_9 | -| ir.cpp:2204:5:2204:5 | SideEffect | m2203_9 | -| ir.cpp:2204:5:2204:5 | SideEffect | ~m2203_6 | -| ir.cpp:2206:10:2206:32 | ChiPartial | partial:m2206_3 | -| ir.cpp:2206:10:2206:32 | ChiTotal | total:m2206_2 | -| ir.cpp:2206:10:2206:32 | SideEffect | ~m2208_6 | -| ir.cpp:2207:13:2207:13 | Address | &:r2207_1 | -| ir.cpp:2208:9:2208:23 | CallTarget | func:r2208_1 | -| ir.cpp:2208:9:2208:23 | ChiPartial | partial:m2208_5 | -| ir.cpp:2208:9:2208:23 | ChiTotal | total:m2206_4 | -| ir.cpp:2208:9:2208:23 | SideEffect | ~m2206_4 | -| ir.cpp:2208:25:2208:25 | Address | &:r2208_3 | -| ir.cpp:2208:25:2208:25 | Address | &:r2208_3 | -| ir.cpp:2208:25:2208:25 | Arg(0) | 0:r2208_3 | -| ir.cpp:2208:25:2208:25 | ChiPartial | partial:m2208_8 | -| ir.cpp:2208:25:2208:25 | ChiTotal | total:m2207_2 | -| ir.cpp:2208:25:2208:25 | SideEffect | ~m2207_2 | -| ir.cpp:2208:25:2208:25 | Unary | r2208_2 | -| ir.cpp:2212:6:2212:24 | ChiPartial | partial:m2212_3 | -| ir.cpp:2212:6:2212:24 | ChiTotal | total:m2212_2 | -| ir.cpp:2212:6:2212:24 | Phi | from 2:~m2212_10 | -| ir.cpp:2212:6:2212:24 | Phi | from 6:~m2221_8 | -| ir.cpp:2212:6:2212:24 | Phi | from 9:~m2214_6 | -| ir.cpp:2212:6:2212:24 | Phi | from 10:~m2228_1 | -| ir.cpp:2212:6:2212:24 | SideEffect | ~m2212_7 | -| ir.cpp:2212:31:2212:31 | Address | &:r2212_5 | -| ir.cpp:2214:12:2214:12 | Address | &:r2214_1 | -| ir.cpp:2214:12:2214:12 | Address | &:r2214_1 | -| ir.cpp:2214:12:2214:12 | Arg(this) | this:r2214_1 | -| ir.cpp:2214:12:2214:12 | CallTarget | func:r2214_3 | -| ir.cpp:2214:12:2214:12 | ChiPartial | partial:m2214_5 | -| ir.cpp:2214:12:2214:12 | ChiPartial | partial:m2214_7 | -| ir.cpp:2214:12:2214:12 | ChiTotal | total:m2212_4 | -| ir.cpp:2214:12:2214:12 | ChiTotal | total:m2214_2 | -| ir.cpp:2214:12:2214:12 | SideEffect | ~m2212_4 | -| ir.cpp:2215:9:2215:9 | Address | &:r2215_1 | -| ir.cpp:2215:9:2215:9 | Condition | r2215_2 | -| ir.cpp:2215:9:2215:9 | Load | m2212_6 | -| ir.cpp:2216:7:2216:28 | Address | &:r2216_1 | -| ir.cpp:2216:7:2216:28 | Address | &:r2216_1 | -| ir.cpp:2216:7:2216:28 | Load | m2216_4 | -| ir.cpp:2216:13:2216:28 | StoreValue | r2216_3 | -| ir.cpp:2216:13:2216:28 | Unary | r2216_2 | -| ir.cpp:2218:12:2218:13 | Address | &:r2218_1 | -| ir.cpp:2218:12:2218:13 | Address | &:r2218_1 | -| ir.cpp:2218:12:2218:13 | Arg(this) | this:r2218_1 | -| ir.cpp:2218:12:2218:13 | CallTarget | func:r2218_3 | -| ir.cpp:2218:12:2218:13 | ChiPartial | partial:m2218_5 | -| ir.cpp:2218:12:2218:13 | ChiPartial | partial:m2218_7 | -| ir.cpp:2218:12:2218:13 | ChiTotal | total:m2214_6 | -| ir.cpp:2218:12:2218:13 | ChiTotal | total:m2218_2 | -| ir.cpp:2218:12:2218:13 | SideEffect | ~m2214_6 | -| ir.cpp:2219:3:2219:3 | Address | &:r2219_1 | -| ir.cpp:2219:3:2219:3 | Address | &:r2219_1 | -| ir.cpp:2219:3:2219:3 | Address | &:r2219_9 | -| ir.cpp:2219:3:2219:3 | Address | &:r2219_9 | -| ir.cpp:2219:3:2219:3 | Arg(this) | this:r2219_1 | -| ir.cpp:2219:3:2219:3 | Arg(this) | this:r2219_9 | -| ir.cpp:2219:3:2219:3 | CallTarget | func:r2219_2 | -| ir.cpp:2219:3:2219:3 | CallTarget | func:r2219_10 | -| ir.cpp:2219:3:2219:3 | ChiPartial | partial:m2219_4 | -| ir.cpp:2219:3:2219:3 | ChiPartial | partial:m2219_7 | -| ir.cpp:2219:3:2219:3 | ChiPartial | partial:m2219_12 | -| ir.cpp:2219:3:2219:3 | ChiPartial | partial:m2219_15 | -| ir.cpp:2219:3:2219:3 | ChiTotal | total:m2214_8 | -| ir.cpp:2219:3:2219:3 | ChiTotal | total:m2218_6 | -| ir.cpp:2219:3:2219:3 | ChiTotal | total:m2218_8 | -| ir.cpp:2219:3:2219:3 | ChiTotal | total:m2219_5 | -| ir.cpp:2219:3:2219:3 | SideEffect | m2214_8 | -| ir.cpp:2219:3:2219:3 | SideEffect | m2218_8 | -| ir.cpp:2219:3:2219:3 | SideEffect | ~m2218_6 | -| ir.cpp:2219:3:2219:3 | SideEffect | ~m2219_5 | -| ir.cpp:2220:22:2220:22 | Address | &:r2220_2 | -| ir.cpp:2220:22:2220:22 | Address | &:r2220_2 | -| ir.cpp:2220:22:2220:22 | Address | &:r2220_4 | -| ir.cpp:2220:22:2220:22 | Load | m2220_3 | -| ir.cpp:2221:5:2221:19 | Address | &:r2221_1 | -| ir.cpp:2221:5:2221:19 | Address | &:r2221_1 | -| ir.cpp:2221:5:2221:19 | Address | &:r2221_1 | -| ir.cpp:2221:5:2221:19 | Arg(this) | this:r2221_1 | -| ir.cpp:2221:5:2221:19 | CallTarget | func:r2221_3 | -| ir.cpp:2221:5:2221:19 | ChiPartial | partial:m2221_7 | -| ir.cpp:2221:5:2221:19 | ChiPartial | partial:m2221_10 | -| ir.cpp:2221:5:2221:19 | ChiTotal | total:m2214_6 | -| ir.cpp:2221:5:2221:19 | ChiTotal | total:m2221_2 | -| ir.cpp:2221:5:2221:19 | Load | m2221_11 | -| ir.cpp:2221:5:2221:19 | SideEffect | ~m2214_6 | -| ir.cpp:2221:18:2221:18 | Address | &:r2221_4 | -| ir.cpp:2221:18:2221:18 | Address | &:r2221_5 | -| ir.cpp:2221:18:2221:18 | Arg(0) | 0:r2221_5 | -| ir.cpp:2221:18:2221:18 | Load | m2220_3 | -| ir.cpp:2221:18:2221:18 | SideEffect | ~m2220_5 | -| ir.cpp:2223:24:2223:24 | Address | &:r2223_2 | -| ir.cpp:2223:24:2223:24 | Address | &:r2223_2 | -| ir.cpp:2223:24:2223:24 | Address | &:r2223_4 | -| ir.cpp:2223:24:2223:24 | Load | m2223_3 | -| ir.cpp:2228:1:2228:1 | Phi | from 4:~m2219_13 | -| ir.cpp:2228:1:2228:1 | Phi | from 8:~m2214_6 | -| ir.cpp:2230:6:2230:18 | ChiPartial | partial:m2230_3 | -| ir.cpp:2230:6:2230:18 | ChiTotal | total:m2230_2 | -| ir.cpp:2230:6:2230:18 | SideEffect | ~m2238_14 | -| ir.cpp:2230:25:2230:25 | Address | &:r2230_5 | -| ir.cpp:2231:12:2231:13 | Address | &:r2231_1 | -| ir.cpp:2231:12:2231:13 | Address | &:r2231_1 | -| ir.cpp:2231:12:2231:13 | Arg(this) | this:r2231_1 | -| ir.cpp:2231:12:2231:13 | CallTarget | func:r2231_3 | -| ir.cpp:2231:12:2231:13 | ChiPartial | partial:m2231_5 | -| ir.cpp:2231:12:2231:13 | ChiPartial | partial:m2231_7 | -| ir.cpp:2231:12:2231:13 | ChiTotal | total:m2230_4 | -| ir.cpp:2231:12:2231:13 | ChiTotal | total:m2231_2 | -| ir.cpp:2231:12:2231:13 | SideEffect | ~m2230_4 | -| ir.cpp:2232:8:2232:8 | Address | &:r2232_1 | -| ir.cpp:2232:8:2232:8 | Condition | r2232_2 | -| ir.cpp:2232:8:2232:8 | Load | m2230_6 | -| ir.cpp:2233:16:2233:17 | Address | &:r2233_1 | -| ir.cpp:2233:16:2233:17 | Address | &:r2233_1 | -| ir.cpp:2233:16:2233:17 | Arg(this) | this:r2233_1 | -| ir.cpp:2233:16:2233:17 | CallTarget | func:r2233_3 | -| ir.cpp:2233:16:2233:17 | ChiPartial | partial:m2233_5 | -| ir.cpp:2233:16:2233:17 | ChiPartial | partial:m2233_7 | -| ir.cpp:2233:16:2233:17 | ChiTotal | total:m2231_6 | -| ir.cpp:2233:16:2233:17 | ChiTotal | total:m2233_2 | -| ir.cpp:2233:16:2233:17 | SideEffect | ~m2231_6 | -| ir.cpp:2234:5:2234:5 | Address | &:r2234_1 | -| ir.cpp:2234:5:2234:5 | Address | &:r2234_1 | -| ir.cpp:2234:5:2234:5 | Arg(this) | this:r2234_1 | -| ir.cpp:2234:5:2234:5 | CallTarget | func:r2234_2 | -| ir.cpp:2234:5:2234:5 | ChiPartial | partial:m2234_4 | -| ir.cpp:2234:5:2234:5 | ChiPartial | partial:m2234_7 | -| ir.cpp:2234:5:2234:5 | ChiTotal | total:m2233_6 | -| ir.cpp:2234:5:2234:5 | ChiTotal | total:m2233_8 | -| ir.cpp:2234:5:2234:5 | SideEffect | m2233_8 | -| ir.cpp:2234:5:2234:5 | SideEffect | ~m2233_6 | -| ir.cpp:2235:16:2235:17 | Address | &:r2235_1 | -| ir.cpp:2235:16:2235:17 | Address | &:r2235_1 | -| ir.cpp:2235:16:2235:17 | Arg(this) | this:r2235_1 | -| ir.cpp:2235:16:2235:17 | CallTarget | func:r2235_3 | -| ir.cpp:2235:16:2235:17 | ChiPartial | partial:m2235_5 | -| ir.cpp:2235:16:2235:17 | ChiPartial | partial:m2235_7 | -| ir.cpp:2235:16:2235:17 | ChiTotal | total:m2231_6 | -| ir.cpp:2235:16:2235:17 | ChiTotal | total:m2235_2 | -| ir.cpp:2235:16:2235:17 | SideEffect | ~m2231_6 | -| ir.cpp:2236:5:2236:5 | Address | &:r2236_1 | -| ir.cpp:2236:5:2236:5 | Address | &:r2236_1 | -| ir.cpp:2236:5:2236:5 | Arg(this) | this:r2236_1 | -| ir.cpp:2236:5:2236:5 | CallTarget | func:r2236_2 | -| ir.cpp:2236:5:2236:5 | ChiPartial | partial:m2236_4 | -| ir.cpp:2236:5:2236:5 | ChiPartial | partial:m2236_7 | -| ir.cpp:2236:5:2236:5 | ChiTotal | total:m2235_6 | -| ir.cpp:2236:5:2236:5 | ChiTotal | total:m2235_8 | -| ir.cpp:2236:5:2236:5 | SideEffect | m2235_8 | -| ir.cpp:2236:5:2236:5 | SideEffect | ~m2235_6 | -| ir.cpp:2237:12:2237:13 | Address | &:r2237_2 | -| ir.cpp:2237:12:2237:13 | Address | &:r2237_2 | -| ir.cpp:2237:12:2237:13 | Arg(this) | this:r2237_2 | -| ir.cpp:2237:12:2237:13 | CallTarget | func:r2237_4 | -| ir.cpp:2237:12:2237:13 | ChiPartial | partial:m2237_6 | -| ir.cpp:2237:12:2237:13 | ChiPartial | partial:m2237_8 | -| ir.cpp:2237:12:2237:13 | ChiTotal | total:m2237_1 | -| ir.cpp:2237:12:2237:13 | ChiTotal | total:m2237_3 | -| ir.cpp:2237:12:2237:13 | Phi | from 1:~m2234_5 | -| ir.cpp:2237:12:2237:13 | Phi | from 2:~m2236_5 | -| ir.cpp:2237:12:2237:13 | SideEffect | ~m2237_1 | -| ir.cpp:2238:1:2238:1 | Address | &:r2238_2 | -| ir.cpp:2238:1:2238:1 | Address | &:r2238_2 | -| ir.cpp:2238:1:2238:1 | Address | &:r2238_10 | -| ir.cpp:2238:1:2238:1 | Address | &:r2238_10 | -| ir.cpp:2238:1:2238:1 | Arg(this) | this:r2238_2 | -| ir.cpp:2238:1:2238:1 | Arg(this) | this:r2238_10 | -| ir.cpp:2238:1:2238:1 | CallTarget | func:r2238_3 | -| ir.cpp:2238:1:2238:1 | CallTarget | func:r2238_11 | -| ir.cpp:2238:1:2238:1 | ChiPartial | partial:m2238_5 | -| ir.cpp:2238:1:2238:1 | ChiPartial | partial:m2238_8 | -| ir.cpp:2238:1:2238:1 | ChiPartial | partial:m2238_13 | -| ir.cpp:2238:1:2238:1 | ChiPartial | partial:m2238_16 | -| ir.cpp:2238:1:2238:1 | ChiTotal | total:m2231_8 | -| ir.cpp:2238:1:2238:1 | ChiTotal | total:m2237_7 | -| ir.cpp:2238:1:2238:1 | ChiTotal | total:m2237_9 | -| ir.cpp:2238:1:2238:1 | ChiTotal | total:m2238_6 | -| ir.cpp:2238:1:2238:1 | SideEffect | m2231_8 | -| ir.cpp:2238:1:2238:1 | SideEffect | m2237_9 | -| ir.cpp:2238:1:2238:1 | SideEffect | ~m2237_7 | -| ir.cpp:2238:1:2238:1 | SideEffect | ~m2238_6 | -| ir.cpp:2240:6:2240:19 | ChiPartial | partial:m2240_3 | -| ir.cpp:2240:6:2240:19 | ChiTotal | total:m2240_2 | -| ir.cpp:2240:6:2240:19 | SideEffect | ~m2250_54 | -| ir.cpp:2241:10:2241:10 | Address | &:r2241_1 | -| ir.cpp:2241:13:2241:16 | StoreValue | r2241_2 | -| ir.cpp:2242:16:2242:16 | Address | &:r2242_1 | -| ir.cpp:2242:16:2242:16 | Address | &:r2242_1 | -| ir.cpp:2242:16:2242:16 | Address | &:r2242_31 | -| ir.cpp:2242:16:2242:16 | Address | &:r2242_31 | -| ir.cpp:2242:16:2242:16 | Arg(this) | this:r2242_1 | -| ir.cpp:2242:16:2242:16 | Arg(this) | this:r2242_31 | -| ir.cpp:2242:16:2242:16 | CallTarget | func:r2242_32 | -| ir.cpp:2242:16:2242:16 | ChiPartial | partial:m2242_34 | -| ir.cpp:2242:16:2242:16 | ChiPartial | partial:m2242_37 | -| ir.cpp:2242:16:2242:16 | ChiTotal | total:m2242_12 | -| ir.cpp:2242:16:2242:16 | ChiTotal | total:m2242_13 | -| ir.cpp:2242:16:2242:16 | SideEffect | m2242_12 | -| ir.cpp:2242:16:2242:16 | SideEffect | ~m2242_13 | -| ir.cpp:2242:18:2242:24 | Address | &:r2242_5 | -| ir.cpp:2242:18:2242:24 | Arg(0) | 0:r2242_5 | -| ir.cpp:2242:18:2242:24 | SideEffect | ~m2240_3 | -| ir.cpp:2242:18:2242:24 | Unary | r2242_4 | -| ir.cpp:2242:18:2242:25 | CallTarget | func:r2242_3 | -| ir.cpp:2242:18:2242:25 | ChiPartial | partial:m2242_7 | -| ir.cpp:2242:18:2242:25 | ChiPartial | partial:m2242_10 | -| ir.cpp:2242:18:2242:25 | ChiTotal | total:m2240_4 | -| ir.cpp:2242:18:2242:25 | ChiTotal | total:m2242_2 | -| ir.cpp:2242:18:2242:25 | SideEffect | ~m2240_4 | -| ir.cpp:2242:28:2242:28 | Address | &:r2242_15 | -| ir.cpp:2242:28:2242:28 | Left | r2242_17 | -| ir.cpp:2242:28:2242:28 | Load | m2242_14 | -| ir.cpp:2242:28:2242:28 | Phi | from 0:m2241_3 | -| ir.cpp:2242:28:2242:28 | Phi | from 0:m2242_11 | -| ir.cpp:2242:28:2242:28 | Phi | from 0:~m2242_8 | -| ir.cpp:2242:28:2242:28 | Phi | from 2:m2242_28 | -| ir.cpp:2242:28:2242:28 | Phi | from 2:m2242_30 | -| ir.cpp:2242:28:2242:28 | Phi | from 2:~m2242_25 | -| ir.cpp:2242:28:2242:28 | Unary | r2242_16 | -| ir.cpp:2242:28:2242:33 | Condition | r2242_19 | -| ir.cpp:2242:33:2242:33 | Right | r2242_18 | -| ir.cpp:2242:36:2242:36 | Address | &:r2242_29 | -| ir.cpp:2242:40:2242:40 | Address | &:r2242_21 | -| ir.cpp:2242:40:2242:40 | Address | &:r2242_21 | -| ir.cpp:2242:40:2242:40 | Arg(this) | this:r2242_21 | -| ir.cpp:2242:40:2242:40 | ChiPartial | partial:m2242_27 | -| ir.cpp:2242:40:2242:40 | ChiTotal | total:m2242_12 | -| ir.cpp:2242:40:2242:40 | SideEffect | m2242_12 | -| ir.cpp:2242:42:2242:49 | CallTarget | func:r2242_22 | -| ir.cpp:2242:42:2242:49 | ChiPartial | partial:m2242_24 | -| ir.cpp:2242:42:2242:49 | ChiTotal | total:m2244_5 | -| ir.cpp:2242:42:2242:49 | SideEffect | ~m2244_5 | -| ir.cpp:2242:42:2242:49 | StoreValue | r2242_23 | -| ir.cpp:2243:16:2243:17 | Address | &:r2243_1 | -| ir.cpp:2243:16:2243:17 | Address | &:r2243_1 | -| ir.cpp:2243:16:2243:17 | Arg(this) | this:r2243_1 | -| ir.cpp:2243:16:2243:17 | CallTarget | func:r2243_3 | -| ir.cpp:2243:16:2243:17 | ChiPartial | partial:m2243_5 | -| ir.cpp:2243:16:2243:17 | ChiPartial | partial:m2243_7 | -| ir.cpp:2243:16:2243:17 | ChiTotal | total:m2242_13 | -| ir.cpp:2243:16:2243:17 | ChiTotal | total:m2243_2 | -| ir.cpp:2243:16:2243:17 | SideEffect | ~m2242_13 | -| ir.cpp:2244:5:2244:5 | Address | &:r2244_1 | -| ir.cpp:2244:5:2244:5 | Address | &:r2244_1 | -| ir.cpp:2244:5:2244:5 | Arg(this) | this:r2244_1 | -| ir.cpp:2244:5:2244:5 | CallTarget | func:r2244_2 | -| ir.cpp:2244:5:2244:5 | ChiPartial | partial:m2244_4 | -| ir.cpp:2244:5:2244:5 | ChiPartial | partial:m2244_7 | -| ir.cpp:2244:5:2244:5 | ChiTotal | total:m2243_6 | -| ir.cpp:2244:5:2244:5 | ChiTotal | total:m2243_8 | -| ir.cpp:2244:5:2244:5 | SideEffect | m2243_8 | -| ir.cpp:2244:5:2244:5 | SideEffect | ~m2243_6 | -| ir.cpp:2246:5:2246:5 | Address | &:r2246_1 | -| ir.cpp:2246:5:2246:5 | Address | &:r2246_24 | -| ir.cpp:2246:5:2246:5 | Address | &:r2246_32 | -| ir.cpp:2246:16:2246:16 | Address | &:r2246_50 | -| ir.cpp:2246:16:2246:16 | Address | &:r2246_50 | -| ir.cpp:2246:16:2246:16 | Address | &:r2246_67 | -| ir.cpp:2246:16:2246:16 | Address | &:r2246_67 | -| ir.cpp:2246:16:2246:16 | Arg(this) | this:r2246_50 | -| ir.cpp:2246:16:2246:16 | Arg(this) | this:r2246_67 | -| ir.cpp:2246:16:2246:16 | CallTarget | func:r2246_52 | -| ir.cpp:2246:16:2246:16 | CallTarget | func:r2246_68 | -| ir.cpp:2246:16:2246:16 | ChiPartial | partial:m2246_62 | -| ir.cpp:2246:16:2246:16 | ChiPartial | partial:m2246_65 | -| ir.cpp:2246:16:2246:16 | ChiPartial | partial:m2246_70 | -| ir.cpp:2246:16:2246:16 | ChiPartial | partial:m2246_73 | -| ir.cpp:2246:16:2246:16 | ChiTotal | total:m2246_51 | -| ir.cpp:2246:16:2246:16 | ChiTotal | total:m2246_57 | -| ir.cpp:2246:16:2246:16 | ChiTotal | total:m2246_66 | -| ir.cpp:2246:16:2246:16 | ChiTotal | total:m2248_5 | -| ir.cpp:2246:16:2246:16 | SideEffect | m2246_66 | -| ir.cpp:2246:16:2246:16 | SideEffect | ~m2246_57 | -| ir.cpp:2246:16:2246:16 | SideEffect | ~m2248_5 | -| ir.cpp:2246:20:2246:20 | Address | &:r2246_25 | -| ir.cpp:2246:20:2246:20 | Address | &:r2246_33 | -| ir.cpp:2246:20:2246:20 | Address | &:r2246_44 | -| ir.cpp:2246:20:2246:20 | Address | &:r2246_75 | -| ir.cpp:2246:20:2246:20 | Address | &:r2246_75 | -| ir.cpp:2246:20:2246:20 | Arg(0) | 0:r2246_45 | -| ir.cpp:2246:20:2246:20 | Arg(this) | this:r0_2 | -| ir.cpp:2246:20:2246:20 | Arg(this) | this:r0_5 | -| ir.cpp:2246:20:2246:20 | Arg(this) | this:r0_7 | -| ir.cpp:2246:20:2246:20 | Arg(this) | this:r0_9 | -| ir.cpp:2246:20:2246:20 | Arg(this) | this:r2246_75 | -| ir.cpp:2246:20:2246:20 | CallTarget | func:r2246_27 | -| ir.cpp:2246:20:2246:20 | CallTarget | func:r2246_35 | -| ir.cpp:2246:20:2246:20 | CallTarget | func:r2246_43 | -| ir.cpp:2246:20:2246:20 | CallTarget | func:r2246_54 | -| ir.cpp:2246:20:2246:20 | CallTarget | func:r2246_76 | -| ir.cpp:2246:20:2246:20 | ChiPartial | partial:m2246_29 | -| ir.cpp:2246:20:2246:20 | ChiPartial | partial:m2246_37 | -| ir.cpp:2246:20:2246:20 | ChiPartial | partial:m2246_47 | -| ir.cpp:2246:20:2246:20 | ChiPartial | partial:m2246_56 | -| ir.cpp:2246:20:2246:20 | ChiPartial | partial:m2246_78 | -| ir.cpp:2246:20:2246:20 | ChiPartial | partial:m2246_81 | -| ir.cpp:2246:20:2246:20 | ChiTotal | total:m2246_19 | -| ir.cpp:2246:20:2246:20 | ChiTotal | total:m2246_30 | -| ir.cpp:2246:20:2246:20 | ChiTotal | total:m2246_40 | -| ir.cpp:2246:20:2246:20 | ChiTotal | total:m2246_41 | -| ir.cpp:2246:20:2246:20 | ChiTotal | total:m2246_48 | -| ir.cpp:2246:20:2246:20 | ChiTotal | total:m2246_71 | -| ir.cpp:2246:20:2246:20 | Condition | r2246_46 | -| ir.cpp:2246:20:2246:20 | Load | m2246_23 | -| ir.cpp:2246:20:2246:20 | Load | m2246_23 | -| ir.cpp:2246:20:2246:20 | Load | m2246_39 | -| ir.cpp:2246:20:2246:20 | Phi | from 3:m2246_31 | -| ir.cpp:2246:20:2246:20 | Phi | from 3:~m2246_38 | -| ir.cpp:2246:20:2246:20 | Phi | from 5:m2246_82 | -| ir.cpp:2246:20:2246:20 | Phi | from 5:~m2246_79 | -| ir.cpp:2246:20:2246:20 | SideEffect | m2246_40 | -| ir.cpp:2246:20:2246:20 | SideEffect | ~m2246_19 | -| ir.cpp:2246:20:2246:20 | SideEffect | ~m2246_30 | -| ir.cpp:2246:20:2246:20 | SideEffect | ~m2246_41 | -| ir.cpp:2246:20:2246:20 | SideEffect | ~m2246_48 | -| ir.cpp:2246:20:2246:20 | SideEffect | ~m2246_71 | -| ir.cpp:2246:20:2246:20 | StoreValue | r2246_28 | -| ir.cpp:2246:20:2246:20 | StoreValue | r2246_36 | -| ir.cpp:2246:20:2246:20 | Unary | r2246_26 | -| ir.cpp:2246:20:2246:20 | Unary | r2246_34 | -| ir.cpp:2246:20:2246:20 | Unary | r2246_42 | -| ir.cpp:2246:20:2246:20 | Unary | r2246_53 | -| ir.cpp:2246:20:2246:20 | Unary | r2246_55 | -| ir.cpp:2246:20:2246:20 | Unary | r2246_77 | -| ir.cpp:2246:20:2246:50 | Address | &:r2246_2 | -| ir.cpp:2246:20:2246:50 | Address | &:r2246_2 | -| ir.cpp:2246:20:2246:50 | Arg(this) | this:r2246_2 | -| ir.cpp:2246:20:2246:50 | CallTarget | func:r2246_4 | -| ir.cpp:2246:20:2246:50 | ChiPartial | partial:m2246_18 | -| ir.cpp:2246:20:2246:50 | ChiPartial | partial:m2246_20 | -| ir.cpp:2246:20:2246:50 | ChiTotal | total:m2246_3 | -| ir.cpp:2246:20:2246:50 | ChiTotal | total:m2246_12 | -| ir.cpp:2246:20:2246:50 | SideEffect | ~m2246_12 | -| ir.cpp:2246:20:2246:50 | StoreValue | r2246_22 | -| ir.cpp:2246:20:2246:50 | Unary | r2246_2 | -| ir.cpp:2246:20:2246:51 | Address | &:r2246_60 | -| ir.cpp:2246:20:2246:51 | Arg(0) | 0:r2246_60 | -| ir.cpp:2246:20:2246:51 | SideEffect | ~m2246_63 | -| ir.cpp:2246:20:2246:51 | Unary | r2246_58 | -| ir.cpp:2246:20:2246:51 | Unary | r2246_59 | -| ir.cpp:2246:35:2246:49 | Address | &:r2246_5 | -| ir.cpp:2246:35:2246:49 | Address | &:r2246_5 | -| ir.cpp:2246:35:2246:49 | Address | &:r2246_5 | -| ir.cpp:2246:35:2246:49 | Arg(0) | 0:r2246_16 | -| ir.cpp:2246:35:2246:49 | Arg(this) | this:r2246_5 | -| ir.cpp:2246:35:2246:49 | CallTarget | func:r2246_7 | -| ir.cpp:2246:35:2246:49 | ChiPartial | partial:m2246_11 | -| ir.cpp:2246:35:2246:49 | ChiPartial | partial:m2246_14 | -| ir.cpp:2246:35:2246:49 | ChiTotal | total:m2242_35 | -| ir.cpp:2246:35:2246:49 | ChiTotal | total:m2246_6 | -| ir.cpp:2246:35:2246:49 | Load | m2246_15 | -| ir.cpp:2246:35:2246:49 | SideEffect | ~m2242_35 | -| ir.cpp:2246:42:2246:48 | Address | &:r2246_9 | -| ir.cpp:2246:42:2246:48 | Arg(0) | 0:r2246_9 | -| ir.cpp:2246:42:2246:48 | SideEffect | ~m2240_3 | -| ir.cpp:2246:42:2246:48 | Unary | r2246_8 | -| ir.cpp:2247:16:2247:17 | Address | &:r2247_1 | -| ir.cpp:2247:16:2247:17 | Address | &:r2247_1 | -| ir.cpp:2247:16:2247:17 | Arg(this) | this:r2247_1 | -| ir.cpp:2247:16:2247:17 | CallTarget | func:r2247_3 | -| ir.cpp:2247:16:2247:17 | ChiPartial | partial:m2247_5 | -| ir.cpp:2247:16:2247:17 | ChiPartial | partial:m2247_7 | -| ir.cpp:2247:16:2247:17 | ChiTotal | total:m2246_63 | -| ir.cpp:2247:16:2247:17 | ChiTotal | total:m2247_2 | -| ir.cpp:2247:16:2247:17 | SideEffect | ~m2246_63 | -| ir.cpp:2248:5:2248:5 | Address | &:r2248_1 | -| ir.cpp:2248:5:2248:5 | Address | &:r2248_1 | -| ir.cpp:2248:5:2248:5 | Arg(this) | this:r2248_1 | -| ir.cpp:2248:5:2248:5 | CallTarget | func:r2248_2 | -| ir.cpp:2248:5:2248:5 | ChiPartial | partial:m2248_4 | -| ir.cpp:2248:5:2248:5 | ChiPartial | partial:m2248_7 | -| ir.cpp:2248:5:2248:5 | ChiTotal | total:m2247_6 | -| ir.cpp:2248:5:2248:5 | ChiTotal | total:m2247_8 | -| ir.cpp:2248:5:2248:5 | SideEffect | m2247_8 | -| ir.cpp:2248:5:2248:5 | SideEffect | ~m2247_6 | -| ir.cpp:2250:16:2250:16 | Address | &:r2250_1 | -| ir.cpp:2250:16:2250:16 | Address | &:r2250_1 | -| ir.cpp:2250:16:2250:16 | Address | &:r2250_50 | -| ir.cpp:2250:16:2250:16 | Address | &:r2250_50 | -| ir.cpp:2250:16:2250:16 | Arg(this) | this:r2250_1 | -| ir.cpp:2250:16:2250:16 | Arg(this) | this:r2250_50 | -| ir.cpp:2250:16:2250:16 | CallTarget | func:r2250_51 | -| ir.cpp:2250:16:2250:16 | ChiPartial | partial:m2250_53 | -| ir.cpp:2250:16:2250:16 | ChiPartial | partial:m2250_56 | -| ir.cpp:2250:16:2250:16 | ChiTotal | total:m2250_23 | -| ir.cpp:2250:16:2250:16 | ChiTotal | total:m2250_46 | -| ir.cpp:2250:16:2250:16 | SideEffect | m2250_23 | -| ir.cpp:2250:16:2250:16 | SideEffect | ~m2250_46 | -| ir.cpp:2250:18:2250:24 | Address | &:r2250_5 | -| ir.cpp:2250:18:2250:24 | Arg(0) | 0:r2250_5 | -| ir.cpp:2250:18:2250:24 | SideEffect | ~m2240_3 | -| ir.cpp:2250:18:2250:24 | Unary | r2250_4 | -| ir.cpp:2250:18:2250:25 | CallTarget | func:r2250_3 | -| ir.cpp:2250:18:2250:25 | ChiPartial | partial:m2250_7 | -| ir.cpp:2250:18:2250:25 | ChiPartial | partial:m2250_10 | -| ir.cpp:2250:18:2250:25 | ChiTotal | total:m2246_48 | -| ir.cpp:2250:18:2250:25 | ChiTotal | total:m2250_2 | -| ir.cpp:2250:18:2250:25 | SideEffect | ~m2246_48 | -| ir.cpp:2250:28:2250:29 | Address | &:r2250_12 | -| ir.cpp:2250:28:2250:29 | Address | &:r2250_12 | -| ir.cpp:2250:28:2250:29 | Address | &:r2250_42 | -| ir.cpp:2250:28:2250:29 | Address | &:r2250_42 | -| ir.cpp:2250:28:2250:29 | Arg(this) | this:r2250_12 | -| ir.cpp:2250:28:2250:29 | Arg(this) | this:r2250_42 | -| ir.cpp:2250:28:2250:29 | CallTarget | func:r2250_43 | -| ir.cpp:2250:28:2250:29 | ChiPartial | partial:m2250_45 | -| ir.cpp:2250:28:2250:29 | ChiPartial | partial:m2250_48 | -| ir.cpp:2250:28:2250:29 | ChiTotal | total:m2250_22 | -| ir.cpp:2250:28:2250:29 | ChiTotal | total:m2250_24 | -| ir.cpp:2250:28:2250:29 | SideEffect | m2250_22 | -| ir.cpp:2250:28:2250:29 | SideEffect | ~m2250_24 | -| ir.cpp:2250:31:2250:37 | Address | &:r2250_16 | -| ir.cpp:2250:31:2250:37 | Arg(0) | 0:r2250_16 | -| ir.cpp:2250:31:2250:37 | SideEffect | ~m2240_3 | -| ir.cpp:2250:31:2250:37 | Unary | r2250_15 | -| ir.cpp:2250:31:2250:38 | CallTarget | func:r2250_14 | -| ir.cpp:2250:31:2250:38 | ChiPartial | partial:m2250_18 | -| ir.cpp:2250:31:2250:38 | ChiPartial | partial:m2250_21 | -| ir.cpp:2250:31:2250:38 | ChiTotal | total:m2250_8 | -| ir.cpp:2250:31:2250:38 | ChiTotal | total:m2250_13 | -| ir.cpp:2250:31:2250:38 | SideEffect | ~m2250_8 | -| ir.cpp:2250:41:2250:41 | Address | &:r2250_26 | -| ir.cpp:2250:41:2250:41 | Left | r2250_28 | -| ir.cpp:2250:41:2250:41 | Load | m2250_25 | -| ir.cpp:2250:41:2250:41 | Phi | from 6:m2242_14 | -| ir.cpp:2250:41:2250:41 | Phi | from 6:m2250_11 | -| ir.cpp:2250:41:2250:41 | Phi | from 6:~m2250_19 | -| ir.cpp:2250:41:2250:41 | Phi | from 8:m2250_39 | -| ir.cpp:2250:41:2250:41 | Phi | from 8:m2250_41 | -| ir.cpp:2250:41:2250:41 | Phi | from 8:~m2250_36 | -| ir.cpp:2250:41:2250:41 | Unary | r2250_27 | -| ir.cpp:2250:41:2250:46 | Condition | r2250_30 | -| ir.cpp:2250:46:2250:46 | Right | r2250_29 | -| ir.cpp:2250:49:2250:49 | Address | &:r2250_40 | -| ir.cpp:2250:53:2250:53 | Address | &:r2250_32 | -| ir.cpp:2250:53:2250:53 | Address | &:r2250_32 | -| ir.cpp:2250:53:2250:53 | Arg(this) | this:r2250_32 | -| ir.cpp:2250:53:2250:53 | ChiPartial | partial:m2250_38 | -| ir.cpp:2250:53:2250:53 | ChiTotal | total:m2250_23 | -| ir.cpp:2250:53:2250:53 | SideEffect | m2250_23 | -| ir.cpp:2250:55:2250:62 | CallTarget | func:r2250_33 | -| ir.cpp:2250:55:2250:62 | ChiPartial | partial:m2250_35 | -| ir.cpp:2250:55:2250:62 | ChiTotal | total:m2250_24 | -| ir.cpp:2250:55:2250:62 | SideEffect | ~m2250_24 | -| ir.cpp:2250:55:2250:62 | StoreValue | r2250_34 | -| ir.cpp:2251:9:2251:9 | Address | &:r2251_2 | -| ir.cpp:2251:13:2251:13 | StoreValue | r2251_1 | -| ir.cpp:2255:6:2255:19 | ChiPartial | partial:m2255_3 | -| ir.cpp:2255:6:2255:19 | ChiTotal | total:m2255_2 | -| ir.cpp:2255:6:2255:19 | SideEffect | ~m2260_5 | -| ir.cpp:2255:26:2255:26 | Address | &:r2255_5 | -| ir.cpp:2256:15:2256:15 | Address | &:r2256_1 | -| ir.cpp:2256:15:2256:15 | Address | &:r2256_1 | -| ir.cpp:2256:15:2256:15 | Arg(this) | this:r2256_1 | -| ir.cpp:2256:18:2256:33 | CallTarget | func:r2256_3 | -| ir.cpp:2256:18:2256:33 | ChiPartial | partial:m2256_7 | -| ir.cpp:2256:18:2256:33 | ChiPartial | partial:m2256_10 | -| ir.cpp:2256:18:2256:33 | ChiTotal | total:m2255_4 | -| ir.cpp:2256:18:2256:33 | ChiTotal | total:m2256_2 | -| ir.cpp:2256:18:2256:33 | SideEffect | ~m2255_4 | -| ir.cpp:2256:26:2256:32 | Address | &:r2256_5 | -| ir.cpp:2256:26:2256:32 | Arg(0) | 0:r2256_5 | -| ir.cpp:2256:26:2256:32 | SideEffect | ~m2255_3 | -| ir.cpp:2256:26:2256:32 | Unary | r2256_4 | -| ir.cpp:2256:36:2256:36 | Address | &:r2256_12 | -| ir.cpp:2256:36:2256:36 | Condition | r2256_13 | -| ir.cpp:2256:36:2256:36 | Load | m2255_6 | -| ir.cpp:2257:13:2257:13 | Address | &:r2257_1 | -| ir.cpp:2257:16:2257:17 | StoreValue | r2257_2 | -| ir.cpp:2259:13:2259:13 | Address | &:r2259_1 | -| ir.cpp:2259:16:2259:17 | StoreValue | r2259_2 | -| ir.cpp:2260:5:2260:5 | Address | &:r2260_1 | -| ir.cpp:2260:5:2260:5 | Address | &:r2260_1 | -| ir.cpp:2260:5:2260:5 | Arg(this) | this:r2260_1 | -| ir.cpp:2260:5:2260:5 | CallTarget | func:r2260_2 | -| ir.cpp:2260:5:2260:5 | ChiPartial | partial:m2260_4 | -| ir.cpp:2260:5:2260:5 | ChiPartial | partial:m2260_7 | -| ir.cpp:2260:5:2260:5 | ChiTotal | total:m2256_8 | -| ir.cpp:2260:5:2260:5 | ChiTotal | total:m2256_11 | -| ir.cpp:2260:5:2260:5 | SideEffect | m2256_11 | -| ir.cpp:2260:5:2260:5 | SideEffect | ~m2256_8 | -| ir.cpp:2270:6:2270:19 | ChiPartial | partial:m2270_3 | -| ir.cpp:2270:6:2270:19 | ChiTotal | total:m2270_2 | -| ir.cpp:2270:6:2270:19 | SideEffect | ~m2275_14 | -| ir.cpp:2270:26:2270:26 | Address | &:r2270_5 | -| ir.cpp:2271:8:2271:23 | Address | &:r2271_1 | -| ir.cpp:2271:8:2271:23 | Address | &:r2271_1 | -| ir.cpp:2271:8:2271:23 | Arg(this) | this:r2271_1 | -| ir.cpp:2271:8:2271:23 | Condition | r2271_19 | -| ir.cpp:2271:13:2271:13 | Address | &:r2271_11 | -| ir.cpp:2271:13:2271:13 | Address | &:r2271_11 | -| ir.cpp:2271:13:2271:13 | Arg(this) | this:r2271_11 | -| ir.cpp:2271:13:2271:13 | CallTarget | func:r2271_12 | -| ir.cpp:2271:13:2271:13 | ChiPartial | partial:m2271_14 | -| ir.cpp:2271:13:2271:13 | ChiPartial | partial:m2271_17 | -| ir.cpp:2271:13:2271:13 | ChiTotal | total:m2271_8 | -| ir.cpp:2271:13:2271:13 | ChiTotal | total:m2271_10 | -| ir.cpp:2271:13:2271:13 | SideEffect | m2271_10 | -| ir.cpp:2271:13:2271:13 | SideEffect | ~m2271_8 | -| ir.cpp:2271:13:2271:13 | Unary | r2271_13 | -| ir.cpp:2271:16:2271:23 | CallTarget | func:r2271_3 | -| ir.cpp:2271:16:2271:23 | ChiPartial | partial:m2271_7 | -| ir.cpp:2271:16:2271:23 | ChiPartial | partial:m2271_9 | -| ir.cpp:2271:16:2271:23 | ChiTotal | total:m2270_4 | -| ir.cpp:2271:16:2271:23 | ChiTotal | total:m2271_2 | -| ir.cpp:2271:16:2271:23 | SideEffect | ~m2270_4 | -| ir.cpp:2271:22:2271:22 | Address | &:r2271_4 | -| ir.cpp:2271:22:2271:22 | Arg(0) | 0:r2271_5 | -| ir.cpp:2271:22:2271:22 | Load | m2270_6 | -| ir.cpp:2272:16:2272:17 | Address | &:r2272_1 | -| ir.cpp:2272:16:2272:17 | Address | &:r2272_1 | -| ir.cpp:2272:16:2272:17 | Arg(this) | this:r2272_1 | -| ir.cpp:2272:16:2272:17 | CallTarget | func:r2272_3 | -| ir.cpp:2272:16:2272:17 | ChiPartial | partial:m2272_5 | -| ir.cpp:2272:16:2272:17 | ChiPartial | partial:m2272_7 | -| ir.cpp:2272:16:2272:17 | ChiTotal | total:m2271_15 | -| ir.cpp:2272:16:2272:17 | ChiTotal | total:m2272_2 | -| ir.cpp:2272:16:2272:17 | SideEffect | ~m2271_15 | -| ir.cpp:2273:5:2273:5 | Address | &:r2273_1 | -| ir.cpp:2273:5:2273:5 | Address | &:r2273_1 | -| ir.cpp:2273:5:2273:5 | Arg(this) | this:r2273_1 | -| ir.cpp:2273:5:2273:5 | CallTarget | func:r2273_2 | -| ir.cpp:2273:5:2273:5 | ChiPartial | partial:m2273_4 | -| ir.cpp:2273:5:2273:5 | ChiPartial | partial:m2273_7 | -| ir.cpp:2273:5:2273:5 | ChiTotal | total:m2272_6 | -| ir.cpp:2273:5:2273:5 | ChiTotal | total:m2272_8 | -| ir.cpp:2273:5:2273:5 | SideEffect | m2272_8 | -| ir.cpp:2273:5:2273:5 | SideEffect | ~m2272_6 | -| ir.cpp:2274:16:2274:17 | Address | &:r2274_1 | -| ir.cpp:2274:16:2274:17 | Address | &:r2274_1 | -| ir.cpp:2274:16:2274:17 | Arg(this) | this:r2274_1 | -| ir.cpp:2274:16:2274:17 | CallTarget | func:r2274_3 | -| ir.cpp:2274:16:2274:17 | ChiPartial | partial:m2274_5 | -| ir.cpp:2274:16:2274:17 | ChiPartial | partial:m2274_7 | -| ir.cpp:2274:16:2274:17 | ChiTotal | total:m2271_15 | -| ir.cpp:2274:16:2274:17 | ChiTotal | total:m2274_2 | -| ir.cpp:2274:16:2274:17 | SideEffect | ~m2271_15 | -| ir.cpp:2275:5:2275:5 | Address | &:r2275_1 | -| ir.cpp:2275:5:2275:5 | Address | &:r2275_1 | -| ir.cpp:2275:5:2275:5 | Address | &:r2275_10 | -| ir.cpp:2275:5:2275:5 | Address | &:r2275_10 | -| ir.cpp:2275:5:2275:5 | Arg(this) | this:r2275_1 | -| ir.cpp:2275:5:2275:5 | Arg(this) | this:r2275_10 | -| ir.cpp:2275:5:2275:5 | CallTarget | func:r2275_2 | -| ir.cpp:2275:5:2275:5 | CallTarget | func:r2275_11 | -| ir.cpp:2275:5:2275:5 | ChiPartial | partial:m2275_4 | -| ir.cpp:2275:5:2275:5 | ChiPartial | partial:m2275_7 | -| ir.cpp:2275:5:2275:5 | ChiPartial | partial:m2275_13 | -| ir.cpp:2275:5:2275:5 | ChiPartial | partial:m2275_16 | -| ir.cpp:2275:5:2275:5 | ChiTotal | total:m2271_18 | -| ir.cpp:2275:5:2275:5 | ChiTotal | total:m2274_6 | -| ir.cpp:2275:5:2275:5 | ChiTotal | total:m2274_8 | -| ir.cpp:2275:5:2275:5 | ChiTotal | total:m2275_9 | -| ir.cpp:2275:5:2275:5 | Phi | from 1:~m2273_5 | -| ir.cpp:2275:5:2275:5 | Phi | from 2:~m2275_5 | -| ir.cpp:2275:5:2275:5 | SideEffect | m2271_18 | -| ir.cpp:2275:5:2275:5 | SideEffect | m2274_8 | -| ir.cpp:2275:5:2275:5 | SideEffect | ~m2274_6 | -| ir.cpp:2275:5:2275:5 | SideEffect | ~m2275_9 | -| ir.cpp:2278:6:2278:25 | ChiPartial | partial:m2278_3 | -| ir.cpp:2278:6:2278:25 | ChiTotal | total:m2278_2 | -| ir.cpp:2278:6:2278:25 | SideEffect | ~m2289_13 | -| ir.cpp:2278:32:2278:32 | Address | &:r2278_5 | -| ir.cpp:2280:16:2280:16 | Address | &:r2280_1 | -| ir.cpp:2280:16:2280:16 | Address | &:r2280_1 | -| ir.cpp:2280:16:2280:16 | Arg(this) | this:r2280_1 | -| ir.cpp:2280:16:2280:16 | CallTarget | func:r2280_3 | -| ir.cpp:2280:16:2280:16 | ChiPartial | partial:m2280_5 | -| ir.cpp:2280:16:2280:16 | ChiPartial | partial:m2280_7 | -| ir.cpp:2280:16:2280:16 | ChiTotal | total:m2278_4 | -| ir.cpp:2280:16:2280:16 | ChiTotal | total:m2280_2 | -| ir.cpp:2280:16:2280:16 | SideEffect | ~m2278_4 | -| ir.cpp:2281:15:2281:15 | Address | &:r2281_2 | -| ir.cpp:2281:15:2281:15 | Condition | r2281_3 | -| ir.cpp:2281:15:2281:15 | Load | m2281_1 | -| ir.cpp:2281:15:2281:15 | Phi | from 0:m2278_6 | -| ir.cpp:2281:15:2281:15 | Phi | from 2:m2282_3 | -| ir.cpp:2282:13:2282:13 | Address | &:r2282_2 | -| ir.cpp:2282:17:2282:21 | StoreValue | r2282_1 | -| ir.cpp:2284:5:2284:5 | Address | &:r2284_1 | -| ir.cpp:2284:5:2284:5 | Address | &:r2284_1 | -| ir.cpp:2284:5:2284:5 | Arg(this) | this:r2284_1 | -| ir.cpp:2284:5:2284:5 | CallTarget | func:r2284_2 | -| ir.cpp:2284:5:2284:5 | ChiPartial | partial:m2284_4 | -| ir.cpp:2284:5:2284:5 | ChiPartial | partial:m2284_7 | -| ir.cpp:2284:5:2284:5 | ChiTotal | total:m2280_6 | -| ir.cpp:2284:5:2284:5 | ChiTotal | total:m2280_8 | -| ir.cpp:2284:5:2284:5 | SideEffect | m2280_8 | -| ir.cpp:2284:5:2284:5 | SideEffect | ~m2280_6 | -| ir.cpp:2287:16:2287:31 | Address | &:r2287_3 | -| ir.cpp:2287:16:2287:31 | Address | &:r2287_3 | -| ir.cpp:2287:16:2287:31 | Arg(this) | this:r2287_3 | -| ir.cpp:2287:16:2287:31 | Condition | r2287_21 | -| ir.cpp:2287:16:2287:31 | Phi | from 3:m2281_1 | -| ir.cpp:2287:16:2287:31 | Phi | from 3:~m2284_5 | -| ir.cpp:2287:16:2287:31 | Phi | from 5:m2288_3 | -| ir.cpp:2287:16:2287:31 | Phi | from 5:~m2289_5 | -| ir.cpp:2287:21:2287:21 | Address | &:r2287_13 | -| ir.cpp:2287:21:2287:21 | Address | &:r2287_13 | -| ir.cpp:2287:21:2287:21 | Arg(this) | this:r2287_13 | -| ir.cpp:2287:21:2287:21 | CallTarget | func:r2287_14 | -| ir.cpp:2287:21:2287:21 | ChiPartial | partial:m2287_16 | -| ir.cpp:2287:21:2287:21 | ChiPartial | partial:m2287_19 | -| ir.cpp:2287:21:2287:21 | ChiTotal | total:m2287_10 | -| ir.cpp:2287:21:2287:21 | ChiTotal | total:m2287_12 | -| ir.cpp:2287:21:2287:21 | SideEffect | m2287_12 | -| ir.cpp:2287:21:2287:21 | SideEffect | ~m2287_10 | -| ir.cpp:2287:21:2287:21 | Unary | r2287_15 | -| ir.cpp:2287:24:2287:31 | CallTarget | func:r2287_5 | -| ir.cpp:2287:24:2287:31 | ChiPartial | partial:m2287_9 | -| ir.cpp:2287:24:2287:31 | ChiPartial | partial:m2287_11 | -| ir.cpp:2287:24:2287:31 | ChiTotal | total:m2287_1 | -| ir.cpp:2287:24:2287:31 | ChiTotal | total:m2287_4 | -| ir.cpp:2287:24:2287:31 | SideEffect | ~m2287_1 | -| ir.cpp:2287:30:2287:30 | Address | &:r2287_6 | -| ir.cpp:2287:30:2287:30 | Arg(0) | 0:r2287_7 | -| ir.cpp:2287:30:2287:30 | Load | m2287_2 | -| ir.cpp:2288:13:2288:13 | Address | &:r2288_2 | -| ir.cpp:2288:17:2288:21 | StoreValue | r2288_1 | -| ir.cpp:2289:9:2289:9 | Address | &:r2289_1 | -| ir.cpp:2289:9:2289:9 | Address | &:r2289_1 | -| ir.cpp:2289:9:2289:9 | Address | &:r2289_9 | -| ir.cpp:2289:9:2289:9 | Address | &:r2289_9 | -| ir.cpp:2289:9:2289:9 | Arg(this) | this:r2289_1 | -| ir.cpp:2289:9:2289:9 | Arg(this) | this:r2289_9 | -| ir.cpp:2289:9:2289:9 | CallTarget | func:r2289_2 | -| ir.cpp:2289:9:2289:9 | CallTarget | func:r2289_10 | -| ir.cpp:2289:9:2289:9 | ChiPartial | partial:m2289_4 | -| ir.cpp:2289:9:2289:9 | ChiPartial | partial:m2289_7 | -| ir.cpp:2289:9:2289:9 | ChiPartial | partial:m2289_12 | -| ir.cpp:2289:9:2289:9 | ChiPartial | partial:m2289_15 | -| ir.cpp:2289:9:2289:9 | ChiTotal | total:m2287_17 | -| ir.cpp:2289:9:2289:9 | ChiTotal | total:m2287_17 | -| ir.cpp:2289:9:2289:9 | ChiTotal | total:m2287_20 | -| ir.cpp:2289:9:2289:9 | ChiTotal | total:m2287_20 | -| ir.cpp:2289:9:2289:9 | SideEffect | m2287_20 | -| ir.cpp:2289:9:2289:9 | SideEffect | m2287_20 | -| ir.cpp:2289:9:2289:9 | SideEffect | ~m2287_17 | -| ir.cpp:2289:9:2289:9 | SideEffect | ~m2287_17 | -| ir.cpp:2293:6:2293:13 | ChiPartial | partial:m2293_3 | -| ir.cpp:2293:6:2293:13 | ChiTotal | total:m2293_2 | -| ir.cpp:2293:6:2293:13 | SideEffect | m2293_3 | -| ir.cpp:2295:6:2295:24 | ChiPartial | partial:m2295_3 | -| ir.cpp:2295:6:2295:24 | ChiTotal | total:m2295_2 | -| ir.cpp:2295:6:2295:24 | Phi | from 2:~m2304_5 | -| ir.cpp:2295:6:2295:24 | Phi | from 4:~m2304_13 | -| ir.cpp:2295:6:2295:24 | Phi | from 5:~m2304_22 | -| ir.cpp:2295:6:2295:24 | SideEffect | ~m2295_7 | -| ir.cpp:2295:31:2295:31 | Address | &:r2295_5 | -| ir.cpp:2296:12:2296:12 | Address | &:r2296_1 | -| ir.cpp:2296:12:2296:12 | Address | &:r2296_1 | -| ir.cpp:2296:12:2296:12 | Arg(this) | this:r2296_1 | -| ir.cpp:2296:12:2296:12 | CallTarget | func:r2296_3 | -| ir.cpp:2296:12:2296:12 | ChiPartial | partial:m2296_5 | -| ir.cpp:2296:12:2296:12 | ChiPartial | partial:m2296_7 | -| ir.cpp:2296:12:2296:12 | ChiTotal | total:m2295_4 | -| ir.cpp:2296:12:2296:12 | ChiTotal | total:m2296_2 | -| ir.cpp:2296:12:2296:12 | SideEffect | ~m2295_4 | -| ir.cpp:2297:8:2297:8 | Address | &:r2297_1 | -| ir.cpp:2297:8:2297:8 | Condition | r2297_2 | -| ir.cpp:2297:8:2297:8 | Load | m2295_6 | -| ir.cpp:2300:8:2300:8 | Address | &:r2300_1 | -| ir.cpp:2300:8:2300:8 | Condition | r2300_2 | -| ir.cpp:2300:8:2300:8 | Load | m2295_6 | -| ir.cpp:2301:16:2301:23 | CallTarget | func:r2301_1 | -| ir.cpp:2301:16:2301:23 | ChiPartial | partial:m2301_3 | -| ir.cpp:2301:16:2301:23 | ChiTotal | total:m2296_6 | -| ir.cpp:2301:16:2301:23 | SideEffect | ~m2296_6 | -| ir.cpp:2304:1:2304:1 | Address | &:r2304_1 | -| ir.cpp:2304:1:2304:1 | Address | &:r2304_1 | -| ir.cpp:2304:1:2304:1 | Address | &:r2304_9 | -| ir.cpp:2304:1:2304:1 | Address | &:r2304_9 | -| ir.cpp:2304:1:2304:1 | Address | &:r2304_18 | -| ir.cpp:2304:1:2304:1 | Address | &:r2304_18 | -| ir.cpp:2304:1:2304:1 | Arg(this) | this:r2304_1 | -| ir.cpp:2304:1:2304:1 | Arg(this) | this:r2304_9 | -| ir.cpp:2304:1:2304:1 | Arg(this) | this:r2304_18 | -| ir.cpp:2304:1:2304:1 | CallTarget | func:r2304_2 | -| ir.cpp:2304:1:2304:1 | CallTarget | func:r2304_10 | -| ir.cpp:2304:1:2304:1 | CallTarget | func:r2304_19 | -| ir.cpp:2304:1:2304:1 | ChiPartial | partial:m2304_4 | -| ir.cpp:2304:1:2304:1 | ChiPartial | partial:m2304_7 | -| ir.cpp:2304:1:2304:1 | ChiPartial | partial:m2304_12 | -| ir.cpp:2304:1:2304:1 | ChiPartial | partial:m2304_15 | -| ir.cpp:2304:1:2304:1 | ChiPartial | partial:m2304_21 | -| ir.cpp:2304:1:2304:1 | ChiPartial | partial:m2304_24 | -| ir.cpp:2304:1:2304:1 | ChiTotal | total:m2296_6 | -| ir.cpp:2304:1:2304:1 | ChiTotal | total:m2296_6 | -| ir.cpp:2304:1:2304:1 | ChiTotal | total:m2296_8 | -| ir.cpp:2304:1:2304:1 | ChiTotal | total:m2296_8 | -| ir.cpp:2304:1:2304:1 | ChiTotal | total:m2296_8 | -| ir.cpp:2304:1:2304:1 | ChiTotal | total:m2301_4 | -| ir.cpp:2304:1:2304:1 | SideEffect | m2296_8 | -| ir.cpp:2304:1:2304:1 | SideEffect | m2296_8 | -| ir.cpp:2304:1:2304:1 | SideEffect | m2296_8 | -| ir.cpp:2304:1:2304:1 | SideEffect | ~m2296_6 | -| ir.cpp:2304:1:2304:1 | SideEffect | ~m2296_6 | -| ir.cpp:2304:1:2304:1 | SideEffect | ~m2301_4 | -| ir.cpp:2306:5:2306:24 | Address | &:r2306_9 | -| ir.cpp:2306:5:2306:24 | ChiPartial | partial:m2306_3 | -| ir.cpp:2306:5:2306:24 | ChiTotal | total:m2306_2 | -| ir.cpp:2306:5:2306:24 | Load | m2306_8 | -| ir.cpp:2306:5:2306:24 | Phi | from 2:m2309_3 | -| ir.cpp:2306:5:2306:24 | Phi | from 2:~m2312_5 | -| ir.cpp:2306:5:2306:24 | Phi | from 3:m2311_3 | -| ir.cpp:2306:5:2306:24 | Phi | from 3:~m2312_13 | -| ir.cpp:2306:5:2306:24 | SideEffect | ~m2306_7 | -| ir.cpp:2306:31:2306:31 | Address | &:r2306_5 | -| ir.cpp:2307:12:2307:12 | Address | &:r2307_1 | -| ir.cpp:2307:12:2307:12 | Address | &:r2307_1 | -| ir.cpp:2307:12:2307:12 | Arg(this) | this:r2307_1 | -| ir.cpp:2307:12:2307:12 | CallTarget | func:r2307_3 | -| ir.cpp:2307:12:2307:12 | ChiPartial | partial:m2307_5 | -| ir.cpp:2307:12:2307:12 | ChiPartial | partial:m2307_7 | -| ir.cpp:2307:12:2307:12 | ChiTotal | total:m2306_4 | -| ir.cpp:2307:12:2307:12 | ChiTotal | total:m2307_2 | -| ir.cpp:2307:12:2307:12 | SideEffect | ~m2306_4 | -| ir.cpp:2308:8:2308:8 | Address | &:r2308_1 | -| ir.cpp:2308:8:2308:8 | Condition | r2308_2 | -| ir.cpp:2308:8:2308:8 | Load | m2306_6 | -| ir.cpp:2309:9:2309:17 | Address | &:r2309_1 | -| ir.cpp:2309:16:2309:16 | StoreValue | r2309_2 | -| ir.cpp:2311:5:2311:13 | Address | &:r2311_1 | -| ir.cpp:2311:12:2311:12 | StoreValue | r2311_2 | -| ir.cpp:2312:1:2312:1 | Address | &:r2312_1 | -| ir.cpp:2312:1:2312:1 | Address | &:r2312_1 | -| ir.cpp:2312:1:2312:1 | Address | &:r2312_9 | -| ir.cpp:2312:1:2312:1 | Address | &:r2312_9 | -| ir.cpp:2312:1:2312:1 | Arg(this) | this:r2312_1 | -| ir.cpp:2312:1:2312:1 | Arg(this) | this:r2312_9 | -| ir.cpp:2312:1:2312:1 | CallTarget | func:r2312_2 | -| ir.cpp:2312:1:2312:1 | CallTarget | func:r2312_10 | -| ir.cpp:2312:1:2312:1 | ChiPartial | partial:m2312_4 | -| ir.cpp:2312:1:2312:1 | ChiPartial | partial:m2312_7 | -| ir.cpp:2312:1:2312:1 | ChiPartial | partial:m2312_12 | -| ir.cpp:2312:1:2312:1 | ChiPartial | partial:m2312_15 | -| ir.cpp:2312:1:2312:1 | ChiTotal | total:m2307_6 | -| ir.cpp:2312:1:2312:1 | ChiTotal | total:m2307_6 | -| ir.cpp:2312:1:2312:1 | ChiTotal | total:m2307_8 | -| ir.cpp:2312:1:2312:1 | ChiTotal | total:m2307_8 | -| ir.cpp:2312:1:2312:1 | SideEffect | m2307_8 | -| ir.cpp:2312:1:2312:1 | SideEffect | m2307_8 | -| ir.cpp:2312:1:2312:1 | SideEffect | ~m2307_6 | -| ir.cpp:2312:1:2312:1 | SideEffect | ~m2307_6 | -| ir.cpp:2314:6:2314:26 | ChiPartial | partial:m2314_3 | -| ir.cpp:2314:6:2314:26 | ChiTotal | total:m2314_2 | -| ir.cpp:2314:6:2314:26 | SideEffect | ~m2317_5 | -| ir.cpp:2315:12:2315:12 | Address | &:r2315_1 | -| ir.cpp:2315:12:2315:12 | Address | &:r2315_1 | -| ir.cpp:2315:12:2315:12 | Arg(this) | this:r2315_1 | -| ir.cpp:2315:12:2315:12 | CallTarget | func:r2315_3 | -| ir.cpp:2315:12:2315:12 | ChiPartial | partial:m2315_5 | -| ir.cpp:2315:12:2315:12 | ChiPartial | partial:m2315_7 | -| ir.cpp:2315:12:2315:12 | ChiTotal | total:m2314_4 | -| ir.cpp:2315:12:2315:12 | ChiTotal | total:m2315_2 | -| ir.cpp:2315:12:2315:12 | SideEffect | ~m2314_4 | -| ir.cpp:2316:12:2316:19 | CallTarget | func:r2316_1 | -| ir.cpp:2316:12:2316:19 | ChiPartial | partial:m2316_3 | -| ir.cpp:2316:12:2316:19 | ChiTotal | total:m2315_6 | -| ir.cpp:2316:12:2316:19 | SideEffect | ~m2315_6 | -| ir.cpp:2317:1:2317:1 | Address | &:r2317_1 | -| ir.cpp:2317:1:2317:1 | Address | &:r2317_1 | -| ir.cpp:2317:1:2317:1 | Arg(this) | this:r2317_1 | -| ir.cpp:2317:1:2317:1 | CallTarget | func:r2317_2 | -| ir.cpp:2317:1:2317:1 | ChiPartial | partial:m2317_4 | -| ir.cpp:2317:1:2317:1 | ChiPartial | partial:m2317_7 | -| ir.cpp:2317:1:2317:1 | ChiTotal | total:m2315_8 | -| ir.cpp:2317:1:2317:1 | ChiTotal | total:m2316_4 | -| ir.cpp:2317:1:2317:1 | SideEffect | m2315_8 | -| ir.cpp:2317:1:2317:1 | SideEffect | ~m2316_4 | -| ir.cpp:2327:32:2327:47 | Address | &:r2327_5 | -| ir.cpp:2327:32:2327:47 | ChiPartial | partial:m2327_3 | -| ir.cpp:2327:32:2327:47 | ChiTotal | total:m2327_2 | -| ir.cpp:2327:32:2327:47 | Load | m2329_3 | -| ir.cpp:2327:32:2327:47 | SideEffect | m2327_3 | -| ir.cpp:2329:9:2329:44 | Address | &:r2329_1 | -| ir.cpp:2329:16:2329:43 | StoreValue | r2329_2 | +| ir.cpp:1812:13:1812:13 | Load | m1811_1 | +| ir.cpp:1812:13:1812:13 | StoreValue | r1812_2 | +| ir.cpp:1812:16:1812:16 | Address | &:r1812_5 | +| ir.cpp:1812:16:1812:16 | Left | r1812_6 | +| ir.cpp:1812:16:1812:16 | Load | m1811_1 | +| ir.cpp:1812:16:1812:20 | Condition | r1812_10 | +| ir.cpp:1812:16:1812:20 | Left | r1812_8 | +| ir.cpp:1812:16:1812:20 | Right | r1812_9 | +| ir.cpp:1812:20:1812:20 | Right | r1812_7 | +| ir.cpp:1813:9:1813:9 | Address | &:r1813_6 | +| ir.cpp:1813:13:1813:13 | Address | &:r1813_1 | +| ir.cpp:1813:13:1813:13 | Left | r1813_2 | +| ir.cpp:1813:13:1813:13 | Load | m1811_1 | +| ir.cpp:1813:13:1813:17 | StoreValue | r1813_5 | +| ir.cpp:1813:17:1813:17 | Address | &:r1813_3 | +| ir.cpp:1813:17:1813:17 | Load | m1812_4 | +| ir.cpp:1813:17:1813:17 | Right | r1813_4 | +| ir.cpp:1816:9:1816:9 | Address | &:r1816_4 | +| ir.cpp:1816:13:1816:13 | Address | &:r1816_2 | +| ir.cpp:1816:13:1816:13 | Load | m1816_1 | +| ir.cpp:1816:13:1816:13 | Phi | from 2:m1811_1 | +| ir.cpp:1816:13:1816:13 | Phi | from 3:m1813_7 | +| ir.cpp:1816:13:1816:13 | StoreValue | r1816_3 | +| ir.cpp:1816:14:1816:25 | Address | &:r1816_6 | +| ir.cpp:1816:14:1816:25 | Condition | r1816_14 | +| ir.cpp:1816:20:1816:21 | Address | &:r1816_10 | +| ir.cpp:1816:20:1816:21 | Left | r1816_11 | +| ir.cpp:1816:20:1816:21 | Load | m1816_9 | +| ir.cpp:1816:20:1816:21 | Right | r1816_12 | +| ir.cpp:1816:20:1816:21 | Unary | r1816_13 | +| ir.cpp:1816:25:1816:25 | Address | &:r1816_7 | +| ir.cpp:1816:25:1816:25 | Load | m1816_5 | +| ir.cpp:1816:25:1816:25 | StoreValue | r1816_8 | +| ir.cpp:1817:9:1817:9 | Address | &:r1817_6 | +| ir.cpp:1817:13:1817:13 | Address | &:r1817_1 | +| ir.cpp:1817:13:1817:13 | Left | r1817_2 | +| ir.cpp:1817:13:1817:13 | Load | m1816_1 | +| ir.cpp:1817:13:1817:17 | StoreValue | r1817_5 | +| ir.cpp:1817:17:1817:17 | Address | &:r1817_3 | +| ir.cpp:1817:17:1817:17 | Load | m1816_5 | +| ir.cpp:1817:17:1817:17 | Right | r1817_4 | +| ir.cpp:1820:9:1820:29 | Address | &:r1820_6 | +| ir.cpp:1820:9:1820:29 | Condition | r1820_14 | +| ir.cpp:1820:13:1820:13 | Address | &:r1820_2 | +| ir.cpp:1820:13:1820:13 | Phi | from 4:m1816_1 | +| ir.cpp:1820:13:1820:13 | Phi | from 5:m1817_7 | +| ir.cpp:1820:17:1820:17 | Address | &:r1820_3 | +| ir.cpp:1820:17:1820:17 | Load | m1820_1 | +| ir.cpp:1820:17:1820:17 | StoreValue | r1820_4 | +| ir.cpp:1820:24:1820:25 | Address | &:r1820_10 | +| ir.cpp:1820:24:1820:25 | Left | r1820_11 | +| ir.cpp:1820:24:1820:25 | Load | m1820_9 | +| ir.cpp:1820:24:1820:25 | Right | r1820_12 | +| ir.cpp:1820:24:1820:25 | Unary | r1820_13 | +| ir.cpp:1820:29:1820:29 | Address | &:r1820_7 | +| ir.cpp:1820:29:1820:29 | Load | m1820_5 | +| ir.cpp:1820:29:1820:29 | StoreValue | r1820_8 | +| ir.cpp:1821:9:1821:9 | Address | &:r1821_6 | +| ir.cpp:1821:13:1821:13 | Address | &:r1821_1 | +| ir.cpp:1821:13:1821:13 | Left | r1821_2 | +| ir.cpp:1821:13:1821:13 | Load | m1820_1 | +| ir.cpp:1821:13:1821:17 | StoreValue | r1821_5 | +| ir.cpp:1821:17:1821:17 | Address | &:r1821_3 | +| ir.cpp:1821:17:1821:17 | Load | m1820_5 | +| ir.cpp:1821:17:1821:17 | Right | r1821_4 | +| ir.cpp:1824:9:1824:9 | Address | &:r1824_2 | +| ir.cpp:1824:9:1824:9 | Phi | from 6:m1820_1 | +| ir.cpp:1824:9:1824:9 | Phi | from 7:m1821_7 | +| ir.cpp:1824:13:1824:13 | Address | &:r1824_3 | +| ir.cpp:1824:13:1824:13 | Load | m1824_1 | +| ir.cpp:1824:13:1824:13 | StoreValue | r1824_4 | +| ir.cpp:1825:9:1825:9 | Address | &:r1825_1 | +| ir.cpp:1825:9:1825:9 | Condition | r1825_4 | +| ir.cpp:1825:9:1825:9 | Left | r1825_2 | +| ir.cpp:1825:9:1825:9 | Load | m1824_5 | +| ir.cpp:1825:9:1825:9 | Right | r1825_3 | +| ir.cpp:1826:9:1826:9 | Address | &:r1826_6 | +| ir.cpp:1826:13:1826:13 | Address | &:r1826_1 | +| ir.cpp:1826:13:1826:13 | Left | r1826_2 | +| ir.cpp:1826:13:1826:13 | Load | m1824_1 | +| ir.cpp:1826:13:1826:17 | StoreValue | r1826_5 | +| ir.cpp:1826:17:1826:17 | Address | &:r1826_3 | +| ir.cpp:1826:17:1826:17 | Load | m1824_5 | +| ir.cpp:1826:17:1826:17 | Right | r1826_4 | +| ir.cpp:1829:9:1829:18 | Address | &:r1829_2 | +| ir.cpp:1829:9:1829:18 | Condition | r1829_10 | +| ir.cpp:1829:9:1829:18 | Phi | from 8:m1824_1 | +| ir.cpp:1829:9:1829:18 | Phi | from 9:m1826_7 | +| ir.cpp:1829:13:1829:14 | Address | &:r1829_6 | +| ir.cpp:1829:13:1829:14 | Left | r1829_7 | +| ir.cpp:1829:13:1829:14 | Load | m1829_5 | +| ir.cpp:1829:13:1829:14 | Right | r1829_8 | +| ir.cpp:1829:13:1829:14 | Unary | r1829_9 | +| ir.cpp:1829:18:1829:18 | Address | &:r1829_3 | +| ir.cpp:1829:18:1829:18 | Load | m1824_5 | +| ir.cpp:1829:18:1829:18 | StoreValue | r1829_4 | +| ir.cpp:1830:9:1830:9 | Address | &:r1830_3 | +| ir.cpp:1830:9:1830:9 | Address | &:r1830_3 | +| ir.cpp:1830:9:1830:9 | Left | r1830_4 | +| ir.cpp:1830:9:1830:9 | Load | m1829_1 | +| ir.cpp:1830:9:1830:15 | StoreValue | r1830_5 | +| ir.cpp:1830:14:1830:15 | Address | &:r1830_1 | +| ir.cpp:1830:14:1830:15 | Load | m1829_5 | +| ir.cpp:1830:14:1830:15 | Right | r1830_2 | +| ir.cpp:1834:6:1834:26 | ChiPartial | partial:m1834_3 | +| ir.cpp:1834:6:1834:26 | ChiTotal | total:m1834_2 | +| ir.cpp:1834:6:1834:26 | SideEffect | m1834_3 | +| ir.cpp:1834:32:1834:32 | Address | &:r1834_5 | +| ir.cpp:1835:17:1835:17 | Address | &:r1835_1 | +| ir.cpp:1835:21:1835:21 | Address | &:r1835_2 | +| ir.cpp:1835:21:1835:21 | Load | m1834_6 | +| ir.cpp:1835:21:1835:21 | StoreValue | r1835_3 | +| ir.cpp:1835:24:1835:24 | Address | &:r1835_5 | +| ir.cpp:1835:24:1835:24 | Left | r1835_6 | +| ir.cpp:1835:24:1835:24 | Load | m1834_6 | +| ir.cpp:1835:24:1835:28 | Condition | r1835_8 | +| ir.cpp:1835:28:1835:28 | Right | r1835_7 | +| ir.cpp:1837:9:1837:9 | Address | &:r1837_6 | +| ir.cpp:1837:13:1837:13 | Address | &:r1837_1 | +| ir.cpp:1837:13:1837:13 | Left | r1837_2 | +| ir.cpp:1837:13:1837:13 | Load | m1834_6 | +| ir.cpp:1837:13:1837:17 | StoreValue | r1837_5 | +| ir.cpp:1837:17:1837:17 | Address | &:r1837_3 | +| ir.cpp:1837:17:1837:17 | Load | m1835_4 | +| ir.cpp:1837:17:1837:17 | Right | r1837_4 | +| ir.cpp:1840:9:1840:9 | Address | &:r1840_1 | +| ir.cpp:1841:13:1841:13 | Address | &:r1841_3 | +| ir.cpp:1841:17:1841:17 | Address | &:r1841_1 | +| ir.cpp:1841:17:1841:17 | Load | m1837_7 | +| ir.cpp:1841:17:1841:17 | StoreValue | r1841_2 | +| ir.cpp:1841:20:1841:20 | Address | &:r1841_5 | +| ir.cpp:1841:20:1841:20 | Left | r1841_6 | +| ir.cpp:1841:20:1841:20 | Load | m1837_7 | +| ir.cpp:1841:20:1841:24 | Condition | r1841_8 | +| ir.cpp:1841:24:1841:24 | Right | r1841_7 | +| ir.cpp:1843:9:1843:9 | Address | &:r1843_6 | +| ir.cpp:1843:13:1843:13 | Address | &:r1843_1 | +| ir.cpp:1843:13:1843:13 | Left | r1843_2 | +| ir.cpp:1843:13:1843:13 | Load | m1837_7 | +| ir.cpp:1843:13:1843:17 | StoreValue | r1843_5 | +| ir.cpp:1843:17:1843:17 | Address | &:r1843_3 | +| ir.cpp:1843:17:1843:17 | Load | m1841_4 | +| ir.cpp:1843:17:1843:17 | Right | r1843_4 | +| ir.cpp:1846:13:1846:13 | Address | &:r1846_3 | +| ir.cpp:1846:17:1846:17 | Address | &:r1846_1 | +| ir.cpp:1846:17:1846:17 | Load | m1843_7 | +| ir.cpp:1846:17:1846:17 | StoreValue | r1846_2 | +| ir.cpp:1846:18:1846:29 | Address | &:r1846_5 | +| ir.cpp:1846:18:1846:29 | Condition | r1846_11 | +| ir.cpp:1846:24:1846:25 | Address | &:r1846_9 | +| ir.cpp:1846:24:1846:25 | Load | m1846_8 | +| ir.cpp:1846:24:1846:25 | Unary | r1846_10 | +| ir.cpp:1846:29:1846:29 | Address | &:r1846_6 | +| ir.cpp:1846:29:1846:29 | Load | m1846_4 | +| ir.cpp:1846:29:1846:29 | StoreValue | r1846_7 | +| ir.cpp:1848:9:1848:9 | Address | &:r1848_6 | +| ir.cpp:1848:13:1848:13 | Address | &:r1848_1 | +| ir.cpp:1848:13:1848:13 | Left | r1848_2 | +| ir.cpp:1848:13:1848:13 | Load | m1843_7 | +| ir.cpp:1848:13:1848:17 | StoreValue | r1848_5 | +| ir.cpp:1848:17:1848:17 | Address | &:r1848_3 | +| ir.cpp:1848:17:1848:17 | Load | m1846_4 | +| ir.cpp:1848:17:1848:17 | Right | r1848_4 | +| ir.cpp:1851:13:1851:33 | Address | &:r1851_5 | +| ir.cpp:1851:13:1851:33 | Condition | r1851_11 | +| ir.cpp:1851:17:1851:17 | Address | &:r1851_1 | +| ir.cpp:1851:21:1851:21 | Address | &:r1851_2 | +| ir.cpp:1851:21:1851:21 | Load | m1848_7 | +| ir.cpp:1851:21:1851:21 | StoreValue | r1851_3 | +| ir.cpp:1851:28:1851:29 | Address | &:r1851_9 | +| ir.cpp:1851:28:1851:29 | Load | m1851_8 | +| ir.cpp:1851:28:1851:29 | Unary | r1851_10 | +| ir.cpp:1851:33:1851:33 | Address | &:r1851_6 | +| ir.cpp:1851:33:1851:33 | Load | m1851_4 | +| ir.cpp:1851:33:1851:33 | StoreValue | r1851_7 | +| ir.cpp:1853:9:1853:9 | Address | &:r1853_6 | +| ir.cpp:1853:13:1853:13 | Address | &:r1853_1 | +| ir.cpp:1853:13:1853:13 | Left | r1853_2 | +| ir.cpp:1853:13:1853:13 | Load | m1848_7 | +| ir.cpp:1853:13:1853:17 | StoreValue | r1853_5 | +| ir.cpp:1853:17:1853:17 | Address | &:r1853_3 | +| ir.cpp:1853:17:1853:17 | Load | m1851_4 | +| ir.cpp:1853:17:1853:17 | Right | r1853_4 | +| ir.cpp:1856:9:1856:9 | Address | &:r1856_1 | +| ir.cpp:1856:13:1856:13 | Address | &:r1856_2 | +| ir.cpp:1856:13:1856:13 | Load | m1853_7 | +| ir.cpp:1856:13:1856:13 | StoreValue | r1856_3 | +| ir.cpp:1857:13:1857:13 | Address | &:r1857_1 | +| ir.cpp:1857:13:1857:13 | Condition | r1857_2 | +| ir.cpp:1857:13:1857:13 | Load | m1856_4 | +| ir.cpp:1859:9:1859:9 | Address | &:r1859_6 | +| ir.cpp:1859:13:1859:13 | Address | &:r1859_1 | +| ir.cpp:1859:13:1859:13 | Left | r1859_2 | +| ir.cpp:1859:13:1859:13 | Load | m1853_7 | +| ir.cpp:1859:13:1859:17 | StoreValue | r1859_5 | +| ir.cpp:1859:17:1859:17 | Address | &:r1859_3 | +| ir.cpp:1859:17:1859:17 | Load | m1856_4 | +| ir.cpp:1859:17:1859:17 | Right | r1859_4 | +| ir.cpp:1862:13:1862:22 | Address | &:r1862_1 | +| ir.cpp:1862:13:1862:22 | Condition | r1862_7 | +| ir.cpp:1862:17:1862:18 | Address | &:r1862_5 | +| ir.cpp:1862:17:1862:18 | Load | m1862_4 | +| ir.cpp:1862:17:1862:18 | Unary | r1862_6 | +| ir.cpp:1862:22:1862:22 | Address | &:r1862_2 | +| ir.cpp:1862:22:1862:22 | Load | m1856_4 | +| ir.cpp:1862:22:1862:22 | StoreValue | r1862_3 | +| ir.cpp:1864:9:1864:9 | Address | &:r1864_3 | +| ir.cpp:1864:9:1864:9 | Address | &:r1864_3 | +| ir.cpp:1864:9:1864:9 | Left | r1864_4 | +| ir.cpp:1864:9:1864:9 | Load | m1859_7 | +| ir.cpp:1864:9:1864:15 | StoreValue | r1864_5 | +| ir.cpp:1864:14:1864:15 | Address | &:r1864_1 | +| ir.cpp:1864:14:1864:15 | Load | m1862_4 | +| ir.cpp:1864:14:1864:15 | Right | r1864_2 | +| ir.cpp:1870:5:1870:12 | Address | &:r1870_3 | +| ir.cpp:1870:5:1870:12 | SideEffect | ~m1870_6 | +| ir.cpp:1870:16:1870:16 | ChiPartial | partial:m1870_5 | +| ir.cpp:1870:16:1870:16 | ChiTotal | total:m1870_2 | +| ir.cpp:1870:16:1870:16 | StoreValue | r1870_4 | +| ir.cpp:1874:18:1874:25 | Address | &:r1874_3 | +| ir.cpp:1874:18:1874:25 | Arg(this) | this:r1874_3 | +| ir.cpp:1874:18:1874:25 | SideEffect | ~m1874_10 | +| ir.cpp:1874:27:1874:27 | Arg(0) | 0:r1874_5 | +| ir.cpp:1874:27:1874:28 | CallTarget | func:r1874_4 | +| ir.cpp:1874:27:1874:28 | ChiPartial | partial:m1874_7 | +| ir.cpp:1874:27:1874:28 | ChiPartial | partial:m1874_9 | +| ir.cpp:1874:27:1874:28 | ChiTotal | total:m1874_2 | +| ir.cpp:1874:27:1874:28 | ChiTotal | total:m1874_8 | +| ir.cpp:1874:27:1874:28 | SideEffect | ~m1874_2 | +| ir.cpp:1876:18:1876:25 | Address | &:r1876_3 | +| ir.cpp:1876:18:1876:25 | Arg(this) | this:r1876_3 | +| ir.cpp:1876:18:1876:25 | SideEffect | ~m1876_10 | +| ir.cpp:1876:28:1876:47 | CallTarget | func:r1876_4 | +| ir.cpp:1876:28:1876:47 | ChiPartial | partial:m1876_7 | +| ir.cpp:1876:28:1876:47 | ChiPartial | partial:m1876_9 | +| ir.cpp:1876:28:1876:47 | ChiTotal | total:m1876_2 | +| ir.cpp:1876:28:1876:47 | ChiTotal | total:m1876_8 | +| ir.cpp:1876:28:1876:47 | SideEffect | ~m1876_2 | +| ir.cpp:1876:46:1876:46 | Arg(0) | 0:r1876_5 | +| ir.cpp:1878:7:1878:19 | Address | &:r1878_3 | +| ir.cpp:1878:7:1878:19 | SideEffect | ~m1878_8 | +| ir.cpp:1878:23:1878:37 | ChiPartial | partial:m1878_7 | +| ir.cpp:1878:23:1878:37 | ChiTotal | total:m1878_2 | +| ir.cpp:1878:23:1878:37 | StoreValue | r1878_6 | +| ir.cpp:1878:23:1878:37 | Unary | r1878_4 | +| ir.cpp:1878:23:1878:37 | Unary | r1878_5 | +| ir.cpp:1880:5:1880:12 | Address | &:r1880_3 | +| ir.cpp:1880:5:1880:12 | SideEffect | ~m1880_7 | +| ir.cpp:1880:16:1880:23 | Address | &:r1880_4 | +| ir.cpp:1880:16:1880:23 | ChiPartial | partial:m1880_6 | +| ir.cpp:1880:16:1880:23 | ChiTotal | total:m1880_2 | +| ir.cpp:1880:16:1880:23 | Load | ~m1880_2 | +| ir.cpp:1880:16:1880:23 | StoreValue | r1880_5 | +| ir.cpp:1883:11:1883:11 | Address | &:r1883_5 | +| ir.cpp:1883:11:1883:11 | Address | &:r1883_5 | +| ir.cpp:1883:11:1883:11 | Address | &:r1883_7 | +| ir.cpp:1883:11:1883:11 | Address | &:r1883_7 | +| ir.cpp:1883:11:1883:11 | Address | &:r1883_10 | +| ir.cpp:1883:11:1883:11 | ChiPartial | partial:m1883_3 | +| ir.cpp:1883:11:1883:11 | ChiTotal | total:m1883_2 | +| ir.cpp:1883:11:1883:11 | Load | m0_20 | +| ir.cpp:1883:11:1883:11 | Load | m1883_6 | +| ir.cpp:1883:11:1883:11 | SideEffect | m0_14 | +| ir.cpp:1883:11:1883:11 | SideEffect | m1883_3 | +| ir.cpp:1888:12:1888:12 | Address | &:r1888_5 | +| ir.cpp:1888:12:1888:12 | Address | &:r1888_5 | +| ir.cpp:1888:12:1888:12 | Address | &:r1888_7 | +| ir.cpp:1888:12:1888:12 | Address | &:r1888_7 | +| ir.cpp:1888:12:1888:12 | Address | &:r1888_9 | +| ir.cpp:1888:12:1888:12 | Address | &:r1888_12 | +| ir.cpp:1888:12:1888:12 | Address | &:r1888_20 | +| ir.cpp:1888:12:1888:12 | Arg(this) | this:r0_5 | +| ir.cpp:1888:12:1888:12 | CallTarget | func:r1888_11 | +| ir.cpp:1888:12:1888:12 | ChiPartial | partial:m1888_3 | +| ir.cpp:1888:12:1888:12 | ChiPartial | partial:m1888_17 | +| ir.cpp:1888:12:1888:12 | ChiTotal | total:m1888_2 | +| ir.cpp:1888:12:1888:12 | ChiTotal | total:m1888_4 | +| ir.cpp:1888:12:1888:12 | Load | m0_2 | +| ir.cpp:1888:12:1888:12 | Load | m0_21 | +| ir.cpp:1888:12:1888:12 | Load | m1888_6 | +| ir.cpp:1888:12:1888:12 | Load | m1888_6 | +| ir.cpp:1888:12:1888:12 | SideEffect | m0_12 | +| ir.cpp:1888:12:1888:12 | SideEffect | ~m1888_4 | +| ir.cpp:1888:12:1888:12 | SideEffect | ~m1888_18 | +| ir.cpp:1888:12:1888:12 | Unary | r1888_10 | +| ir.cpp:1888:12:1888:12 | Unary | r1888_13 | +| ir.cpp:1888:12:1888:12 | Unary | r1888_14 | +| ir.cpp:1888:12:1888:12 | Unary | r1888_15 | +| ir.cpp:1888:12:1888:12 | Unary | r1888_16 | +| ir.cpp:1892:10:1892:12 | ChiPartial | partial:m1892_3 | +| ir.cpp:1892:10:1892:12 | ChiTotal | total:m1892_2 | +| ir.cpp:1892:10:1892:12 | SideEffect | ~m1894_18 | +| ir.cpp:1893:11:1893:11 | Address | &:r1893_1 | +| ir.cpp:1893:11:1893:11 | Address | &:r1893_1 | +| ir.cpp:1893:11:1893:11 | Arg(this) | this:r1893_1 | +| ir.cpp:1893:13:1893:13 | Address | &:r1893_4 | +| ir.cpp:1893:13:1893:13 | Address | &:r1893_4 | +| ir.cpp:1893:13:1893:13 | Arg(0) | 0:r1893_4 | +| ir.cpp:1893:13:1893:13 | ChiPartial | partial:m1893_11 | +| ir.cpp:1893:13:1893:13 | ChiTotal | total:m1893_7 | +| ir.cpp:1893:13:1893:13 | SideEffect | ~m1893_7 | +| ir.cpp:1893:13:1893:14 | CallTarget | func:r1893_3 | +| ir.cpp:1893:13:1893:14 | ChiPartial | partial:m1893_6 | +| ir.cpp:1893:13:1893:14 | ChiPartial | partial:m1893_9 | +| ir.cpp:1893:13:1893:14 | ChiTotal | total:m1892_4 | +| ir.cpp:1893:13:1893:14 | ChiTotal | total:m1893_2 | +| ir.cpp:1893:13:1893:14 | SideEffect | ~m1892_4 | +| ir.cpp:1894:9:1894:9 | Address | &:r1894_1 | +| ir.cpp:1894:9:1894:9 | Address | &:r1894_1 | +| ir.cpp:1894:9:1894:9 | Arg(this) | this:r1894_1 | +| ir.cpp:1894:9:1894:9 | ChiPartial | partial:m1894_21 | +| ir.cpp:1894:9:1894:9 | ChiTotal | total:m1893_10 | +| ir.cpp:1894:9:1894:9 | SideEffect | m1893_10 | +| ir.cpp:1894:11:1894:11 | CallTarget | func:r1894_2 | +| ir.cpp:1894:11:1894:11 | ChiPartial | partial:m1894_17 | +| ir.cpp:1894:11:1894:11 | ChiTotal | total:m1894_14 | +| ir.cpp:1894:11:1894:11 | SideEffect | ~m1894_14 | +| ir.cpp:1894:11:1894:11 | Unary | r1894_16 | +| ir.cpp:1894:13:1894:13 | Address | &:r1894_3 | +| ir.cpp:1894:13:1894:13 | Address | &:r1894_3 | +| ir.cpp:1894:13:1894:13 | Address | &:r1894_6 | +| ir.cpp:1894:13:1894:13 | Address | &:r1894_6 | +| ir.cpp:1894:13:1894:13 | Address | &:r1894_15 | +| ir.cpp:1894:13:1894:13 | Address | &:r1894_15 | +| ir.cpp:1894:13:1894:13 | Arg(0) | 0:r1894_6 | +| ir.cpp:1894:13:1894:13 | Arg(0) | 0:r1894_15 | +| ir.cpp:1894:13:1894:13 | Arg(this) | this:r1894_3 | +| ir.cpp:1894:13:1894:13 | CallTarget | func:r1894_5 | +| ir.cpp:1894:13:1894:13 | ChiPartial | partial:m1894_8 | +| ir.cpp:1894:13:1894:13 | ChiPartial | partial:m1894_11 | +| ir.cpp:1894:13:1894:13 | ChiPartial | partial:m1894_13 | +| ir.cpp:1894:13:1894:13 | ChiPartial | partial:m1894_23 | +| ir.cpp:1894:13:1894:13 | ChiTotal | total:m1893_12 | +| ir.cpp:1894:13:1894:13 | ChiTotal | total:m1894_4 | +| ir.cpp:1894:13:1894:13 | ChiTotal | total:m1894_9 | +| ir.cpp:1894:13:1894:13 | ChiTotal | total:m1894_12 | +| ir.cpp:1894:13:1894:13 | SideEffect | ~m1893_12 | +| ir.cpp:1894:13:1894:13 | SideEffect | ~m1894_9 | +| ir.cpp:1894:13:1894:13 | SideEffect | ~m1894_12 | +| ir.cpp:1894:13:1894:13 | Unary | r1894_3 | +| ir.cpp:1898:6:1898:14 | ChiPartial | partial:m1898_3 | +| ir.cpp:1898:6:1898:14 | ChiTotal | total:m1898_2 | +| ir.cpp:1898:6:1898:14 | SideEffect | m1898_3 | +| ir.cpp:1899:17:1899:18 | Address | &:r1899_1 | +| ir.cpp:1899:22:1899:40 | StoreValue | r1899_3 | +| ir.cpp:1899:22:1899:40 | Unary | r1899_2 | +| ir.cpp:1900:17:1900:23 | Address | &:r1900_1 | +| ir.cpp:1900:27:1900:34 | StoreValue | r1900_3 | +| ir.cpp:1900:27:1900:34 | Unary | r1900_2 | +| ir.cpp:1911:15:1911:15 | Address | &:r1911_5 | +| ir.cpp:1911:15:1911:15 | Address | &:r1911_5 | +| ir.cpp:1911:15:1911:15 | Address | &:r1911_7 | +| ir.cpp:1911:15:1911:15 | Address | &:r1911_7 | +| ir.cpp:1911:15:1911:15 | Address | &:r1911_15 | +| ir.cpp:1911:15:1911:15 | ChiPartial | partial:m1911_3 | +| ir.cpp:1911:15:1911:15 | ChiTotal | total:m1911_2 | +| ir.cpp:1911:15:1911:15 | Load | m1911_6 | +| ir.cpp:1911:15:1911:15 | Load | m1913_5 | +| ir.cpp:1911:15:1911:15 | SideEffect | m1911_3 | +| ir.cpp:1911:15:1911:15 | SideEffect | m1911_8 | +| ir.cpp:1911:47:1911:47 | Address | &:r1911_9 | +| ir.cpp:1911:47:1911:47 | Address | &:r1911_9 | +| ir.cpp:1911:47:1911:47 | Address | &:r1911_11 | +| ir.cpp:1911:47:1911:47 | Address | &:r1911_11 | +| ir.cpp:1911:47:1911:47 | Load | m1911_10 | +| ir.cpp:1911:47:1911:47 | SideEffect | m1911_12 | +| ir.cpp:1913:13:1913:21 | Address | &:r1913_1 | +| ir.cpp:1913:20:1913:20 | Address | &:r1913_2 | +| ir.cpp:1913:20:1913:20 | Load | m1911_10 | +| ir.cpp:1913:20:1913:20 | StoreValue | r1913_4 | +| ir.cpp:1913:20:1913:20 | Unary | r1913_3 | +| ir.cpp:1917:10:1917:14 | ChiPartial | partial:m1917_3 | +| ir.cpp:1917:10:1917:14 | ChiTotal | total:m1917_2 | +| ir.cpp:1917:10:1917:14 | SideEffect | ~m1919_12 | +| ir.cpp:1918:19:1918:19 | Address | &:r1918_1 | +| ir.cpp:1919:9:1919:9 | Address | &:r1919_1 | +| ir.cpp:1919:9:1919:9 | Address | &:r1919_1 | +| ir.cpp:1919:9:1919:9 | Arg(this) | this:r1919_1 | +| ir.cpp:1919:9:1919:9 | ChiPartial | partial:m1919_9 | +| ir.cpp:1919:9:1919:9 | ChiTotal | total:m1918_2 | +| ir.cpp:1919:9:1919:9 | SideEffect | m1918_2 | +| ir.cpp:1919:11:1919:33 | CallTarget | func:r1919_2 | +| ir.cpp:1919:11:1919:33 | ChiPartial | partial:m1919_5 | +| ir.cpp:1919:11:1919:33 | ChiTotal | total:m1917_4 | +| ir.cpp:1919:11:1919:33 | SideEffect | ~m1917_4 | +| ir.cpp:1919:35:1919:41 | Address | &:r1919_3 | +| ir.cpp:1919:35:1919:41 | Address | &:r1919_3 | +| ir.cpp:1919:35:1919:41 | Arg(0) | 0:r1919_3 | +| ir.cpp:1919:35:1919:41 | ChiPartial | partial:m1919_11 | +| ir.cpp:1919:35:1919:41 | ChiTotal | total:m1919_6 | +| ir.cpp:1919:35:1919:41 | SideEffect | ~m1919_6 | +| ir.cpp:1924:13:1924:13 | Address | &:r1924_5 | +| ir.cpp:1924:13:1924:13 | Address | &:r1924_5 | +| ir.cpp:1924:13:1924:13 | Address | &:r1924_7 | +| ir.cpp:1924:13:1924:13 | Address | &:r1924_7 | +| ir.cpp:1924:13:1924:13 | Address | &:r1924_10 | +| ir.cpp:1924:13:1924:13 | ChiPartial | partial:m1924_3 | +| ir.cpp:1924:13:1924:13 | ChiTotal | total:m1924_2 | +| ir.cpp:1924:13:1924:13 | Load | m1924_6 | +| ir.cpp:1924:13:1924:13 | Load | m1928_9 | +| ir.cpp:1924:13:1924:13 | SideEffect | m1924_3 | +| ir.cpp:1924:13:1924:13 | SideEffect | m1924_8 | +| ir.cpp:1925:13:1925:29 | Address | &:r1925_1 | +| ir.cpp:1925:13:1925:29 | Address | &:r1925_3 | +| ir.cpp:1926:13:1926:14 | Address | &:r1926_4 | +| ir.cpp:1926:13:1926:19 | ChiPartial | partial:m1926_5 | +| ir.cpp:1926:13:1926:19 | ChiTotal | total:m1925_2 | +| ir.cpp:1926:14:1926:14 | Unary | r1926_2 | +| ir.cpp:1926:14:1926:14 | Unary | r1926_3 | +| ir.cpp:1926:18:1926:19 | StoreValue | r1926_1 | +| ir.cpp:1927:13:1927:14 | Address | &:r1927_4 | +| ir.cpp:1927:13:1927:19 | ChiPartial | partial:m1927_5 | +| ir.cpp:1927:13:1927:19 | ChiTotal | total:m1925_4 | +| ir.cpp:1927:14:1927:14 | Unary | r1927_2 | +| ir.cpp:1927:14:1927:14 | Unary | r1927_3 | +| ir.cpp:1927:18:1927:19 | StoreValue | r1927_1 | +| ir.cpp:1928:13:1928:27 | Address | &:r1928_1 | +| ir.cpp:1928:20:1928:21 | Left | r1928_4 | +| ir.cpp:1928:20:1928:21 | Load | m1926_5 | +| ir.cpp:1928:20:1928:26 | StoreValue | r1928_8 | +| ir.cpp:1928:21:1928:21 | Address | &:r1928_3 | +| ir.cpp:1928:21:1928:21 | Unary | r1928_2 | +| ir.cpp:1928:25:1928:26 | Load | m1927_5 | +| ir.cpp:1928:25:1928:26 | Right | r1928_7 | +| ir.cpp:1928:26:1928:26 | Address | &:r1928_6 | +| ir.cpp:1928:26:1928:26 | Unary | r1928_5 | +| ir.cpp:1932:10:1932:14 | ChiPartial | partial:m1932_3 | +| ir.cpp:1932:10:1932:14 | ChiTotal | total:m1932_2 | +| ir.cpp:1932:10:1932:14 | SideEffect | ~m1934_5 | +| ir.cpp:1933:19:1933:19 | Address | &:r1933_1 | +| ir.cpp:1934:9:1934:9 | Address | &:r1934_1 | +| ir.cpp:1934:9:1934:9 | Address | &:r1934_1 | +| ir.cpp:1934:9:1934:9 | Arg(this) | this:r1934_1 | +| ir.cpp:1934:9:1934:9 | ChiPartial | partial:m1934_7 | +| ir.cpp:1934:9:1934:9 | ChiTotal | total:m1933_2 | +| ir.cpp:1934:9:1934:9 | SideEffect | m1933_2 | +| ir.cpp:1934:11:1934:50 | CallTarget | func:r1934_2 | +| ir.cpp:1934:11:1934:50 | ChiPartial | partial:m1934_4 | +| ir.cpp:1934:11:1934:50 | ChiTotal | total:m1932_4 | +| ir.cpp:1934:11:1934:50 | SideEffect | ~m1932_4 | +| ir.cpp:1938:24:1938:24 | Address | &:r1938_3 | +| ir.cpp:1938:24:1938:24 | Address | &:r1938_3 | +| ir.cpp:1938:24:1938:24 | SideEffect | ~m1938_6 | +| ir.cpp:1938:24:1938:24 | SideEffect | ~m1938_6 | +| ir.cpp:1938:42:1938:43 | ChiPartial | partial:m1938_5 | +| ir.cpp:1938:42:1938:43 | ChiPartial | partial:m1938_5 | +| ir.cpp:1938:42:1938:43 | ChiTotal | total:m1938_2 | +| ir.cpp:1938:42:1938:43 | ChiTotal | total:m1938_2 | +| ir.cpp:1938:42:1938:43 | StoreValue | r1938_4 | +| ir.cpp:1938:42:1938:43 | StoreValue | r1938_4 | +| ir.cpp:1940:5:1940:28 | Address | &:r1940_5 | +| ir.cpp:1940:5:1940:28 | ChiPartial | partial:m1940_3 | +| ir.cpp:1940:5:1940:28 | ChiTotal | total:m1940_2 | +| ir.cpp:1940:5:1940:28 | Load | m1943_8 | +| ir.cpp:1940:5:1940:28 | SideEffect | m1940_3 | +| ir.cpp:1941:9:1941:17 | Address | &:r1941_1 | +| ir.cpp:1941:21:1941:40 | Address | &:r1941_2 | +| ir.cpp:1941:21:1941:40 | Load | ~m1940_3 | +| ir.cpp:1941:21:1941:40 | StoreValue | r1941_3 | +| ir.cpp:1942:10:1942:19 | Address | &:r1942_1 | +| ir.cpp:1942:23:1942:43 | Address | &:r1942_2 | +| ir.cpp:1942:23:1942:43 | Load | ~m1940_3 | +| ir.cpp:1942:23:1942:43 | StoreValue | r1942_3 | +| ir.cpp:1943:5:1943:39 | Address | &:r1943_1 | +| ir.cpp:1943:12:1943:20 | Address | &:r1943_2 | +| ir.cpp:1943:12:1943:20 | Left | r1943_3 | +| ir.cpp:1943:12:1943:20 | Load | m1941_4 | +| ir.cpp:1943:12:1943:38 | StoreValue | r1943_7 | +| ir.cpp:1943:24:1943:38 | Right | r1943_6 | +| ir.cpp:1943:29:1943:38 | Address | &:r1943_4 | +| ir.cpp:1943:29:1943:38 | Load | m1942_4 | +| ir.cpp:1943:29:1943:38 | Unary | r1943_5 | +| ir.cpp:1948:5:1948:16 | Address | &:r1948_7 | +| ir.cpp:1948:5:1948:16 | ChiPartial | partial:m1948_3 | +| ir.cpp:1948:5:1948:16 | ChiTotal | total:m1948_2 | +| ir.cpp:1948:5:1948:16 | Load | m1950_4 | +| ir.cpp:1948:5:1948:16 | SideEffect | m1948_3 | +| ir.cpp:1948:22:1948:22 | Address | &:r1948_5 | +| ir.cpp:1949:9:1949:9 | Address | &:r1949_1 | +| ir.cpp:1949:9:1949:9 | Left | r1949_2 | +| ir.cpp:1949:9:1949:9 | Load | m1948_6 | +| ir.cpp:1949:9:1949:14 | Condition | r1949_4 | +| ir.cpp:1949:13:1949:14 | Right | r1949_3 | +| ir.cpp:1950:9:1950:17 | Address | &:r1950_1 | +| ir.cpp:1950:16:1950:16 | Address | &:r1950_2 | +| ir.cpp:1950:16:1950:16 | Load | m1948_6 | +| ir.cpp:1950:16:1950:16 | StoreValue | r1950_3 | +| ir.cpp:1952:9:1952:20 | CallTarget | func:r1952_1 | +| ir.cpp:1952:9:1952:20 | ChiPartial | partial:m1952_3 | +| ir.cpp:1952:9:1952:20 | ChiTotal | total:m1948_4 | +| ir.cpp:1952:9:1952:20 | SideEffect | ~m1948_4 | +| ir.cpp:1956:5:1956:17 | Address | &:r1956_8 | +| ir.cpp:1956:5:1956:17 | ChiPartial | partial:m1956_3 | +| ir.cpp:1956:5:1956:17 | ChiTotal | total:m1956_2 | +| ir.cpp:1956:5:1956:17 | Load | m1960_4 | +| ir.cpp:1956:5:1956:17 | SideEffect | m1956_3 | +| ir.cpp:1956:23:1956:23 | Address | &:r1956_5 | +| ir.cpp:1957:9:1957:9 | Address | &:r1957_1 | +| ir.cpp:1957:9:1957:9 | Left | r1957_2 | +| ir.cpp:1957:9:1957:9 | Load | m1956_6 | +| ir.cpp:1957:9:1957:14 | Condition | r1957_4 | +| ir.cpp:1957:13:1957:14 | Right | r1957_3 | +| ir.cpp:1958:9:1958:20 | CallTarget | func:r1958_1 | +| ir.cpp:1958:9:1958:20 | ChiPartial | partial:m1958_3 | +| ir.cpp:1958:9:1958:20 | ChiTotal | total:m1956_4 | +| ir.cpp:1958:9:1958:20 | SideEffect | ~m1956_4 | +| ir.cpp:1960:5:1960:13 | Address | &:r1960_1 | +| ir.cpp:1960:12:1960:12 | Address | &:r1960_2 | +| ir.cpp:1960:12:1960:12 | Load | m1956_6 | +| ir.cpp:1960:12:1960:12 | StoreValue | r1960_3 | +| ir.cpp:1963:5:1963:19 | Address | &:r1963_7 | +| ir.cpp:1963:5:1963:19 | ChiPartial | partial:m1963_3 | +| ir.cpp:1963:5:1963:19 | ChiTotal | total:m1963_2 | +| ir.cpp:1963:5:1963:19 | Load | m1964_4 | +| ir.cpp:1963:5:1963:19 | SideEffect | m1963_3 | +| ir.cpp:1963:25:1963:25 | Address | &:r1963_5 | +| ir.cpp:1964:5:1964:13 | Address | &:r1964_1 | +| ir.cpp:1964:12:1964:12 | Address | &:r1964_2 | +| ir.cpp:1964:12:1964:12 | Load | m1963_6 | +| ir.cpp:1964:12:1964:12 | StoreValue | r1964_3 | +| ir.cpp:1967:6:1967:43 | ChiPartial | partial:m1967_3 | +| ir.cpp:1967:6:1967:43 | ChiTotal | total:m1967_2 | +| ir.cpp:1967:6:1967:43 | SideEffect | ~m1975_6 | +| ir.cpp:1968:7:1968:7 | Address | &:r1968_1 | +| ir.cpp:1968:7:1968:7 | Address | &:r1968_1 | +| ir.cpp:1968:7:1968:7 | Arg(this) | this:r1968_1 | +| ir.cpp:1968:7:1968:7 | CallTarget | func:r1968_3 | +| ir.cpp:1968:7:1968:7 | ChiPartial | partial:m1968_5 | +| ir.cpp:1968:7:1968:7 | ChiPartial | partial:m1968_7 | +| ir.cpp:1968:7:1968:7 | ChiTotal | total:m1967_4 | +| ir.cpp:1968:7:1968:7 | ChiTotal | total:m1968_2 | +| ir.cpp:1968:7:1968:7 | SideEffect | ~m1967_4 | +| ir.cpp:1969:9:1969:9 | Address | &:r1969_1 | +| ir.cpp:1970:5:1970:5 | Address | &:r1970_7 | +| ir.cpp:1970:11:1970:30 | CallTarget | func:r1970_2 | +| ir.cpp:1970:11:1970:30 | ChiPartial | partial:m1970_5 | +| ir.cpp:1970:11:1970:30 | ChiTotal | total:m1968_6 | +| ir.cpp:1970:11:1970:30 | SideEffect | ~m1968_6 | +| ir.cpp:1970:11:1970:30 | StoreValue | r1970_4 | +| ir.cpp:1970:32:1970:33 | Arg(0) | 0:r1970_3 | +| ir.cpp:1971:9:1971:9 | Address | &:r1971_1 | +| ir.cpp:1972:5:1972:5 | Address | &:r1972_6 | +| ir.cpp:1972:9:1972:31 | CallTarget | func:r1972_1 | +| ir.cpp:1972:9:1972:31 | ChiPartial | partial:m1972_4 | +| ir.cpp:1972:9:1972:31 | ChiTotal | total:m1970_6 | +| ir.cpp:1972:9:1972:31 | SideEffect | ~m1970_6 | +| ir.cpp:1972:9:1972:31 | StoreValue | r1972_3 | +| ir.cpp:1972:33:1972:34 | Arg(0) | 0:r1972_2 | +| ir.cpp:1973:9:1973:9 | Address | &:r1973_1 | +| ir.cpp:1974:5:1974:5 | Address | &:r1974_6 | +| ir.cpp:1974:9:1974:23 | CallTarget | func:r1974_1 | +| ir.cpp:1974:9:1974:23 | ChiPartial | partial:m1974_4 | +| ir.cpp:1974:9:1974:23 | ChiTotal | total:m1972_5 | +| ir.cpp:1974:9:1974:23 | SideEffect | ~m1972_5 | +| ir.cpp:1974:9:1974:23 | StoreValue | r1974_3 | +| ir.cpp:1974:25:1974:26 | Arg(0) | 0:r1974_2 | +| ir.cpp:1975:1:1975:1 | Address | &:r1975_2 | +| ir.cpp:1975:1:1975:1 | Address | &:r1975_2 | +| ir.cpp:1975:1:1975:1 | Arg(this) | this:r1975_2 | +| ir.cpp:1975:1:1975:1 | CallTarget | func:r1975_3 | +| ir.cpp:1975:1:1975:1 | ChiPartial | partial:m1975_5 | +| ir.cpp:1975:1:1975:1 | ChiPartial | partial:m1975_8 | +| ir.cpp:1975:1:1975:1 | ChiTotal | total:m1968_8 | +| ir.cpp:1975:1:1975:1 | ChiTotal | total:m1974_5 | +| ir.cpp:1975:1:1975:1 | SideEffect | m1968_8 | +| ir.cpp:1975:1:1975:1 | SideEffect | ~m1974_5 | +| ir.cpp:1977:6:1977:23 | ChiPartial | partial:m1977_3 | +| ir.cpp:1977:6:1977:23 | ChiTotal | total:m1977_2 | +| ir.cpp:1977:6:1977:23 | SideEffect | m1977_3 | +| ir.cpp:1978:7:1978:7 | Address | &:r1978_1 | +| ir.cpp:1978:10:1978:10 | Address | &:r1978_3 | +| ir.cpp:1979:3:1979:3 | Address | &:r1979_5 | +| ir.cpp:1979:7:1979:7 | Address | &:r1979_2 | +| ir.cpp:1979:7:1979:7 | Address | &:r1979_2 | +| ir.cpp:1979:7:1979:12 | Load | m1979_3 | +| ir.cpp:1979:7:1979:12 | StoreValue | r1979_4 | +| ir.cpp:1979:11:1979:12 | StoreValue | r1979_1 | +| ir.cpp:1982:6:1982:38 | ChiPartial | partial:m1982_3 | +| ir.cpp:1982:6:1982:38 | ChiTotal | total:m1982_2 | +| ir.cpp:1982:6:1982:38 | SideEffect | m1982_3 | +| ir.cpp:1983:7:1983:7 | Address | &:r1983_1 | +| ir.cpp:1983:10:1983:10 | Address | &:r1983_3 | +| ir.cpp:1983:13:1983:14 | StoreValue | r1983_4 | +| ir.cpp:1984:3:1984:3 | Address | &:r1984_7 | +| ir.cpp:1984:8:1984:8 | Address | &:r1984_2 | +| ir.cpp:1984:8:1984:8 | Address | &:r1984_2 | +| ir.cpp:1984:8:1984:8 | Address | &:r1984_2 | +| ir.cpp:1984:8:1984:8 | Left | r1984_3 | +| ir.cpp:1984:8:1984:8 | Load | m1983_5 | +| ir.cpp:1984:8:1984:14 | Load | m1984_5 | +| ir.cpp:1984:8:1984:14 | StoreValue | r1984_4 | +| ir.cpp:1984:8:1984:14 | StoreValue | r1984_6 | +| ir.cpp:1984:13:1984:14 | Right | r1984_1 | +| ir.cpp:1991:15:1991:43 | Address | &:r1991_5 | +| ir.cpp:1991:15:1991:43 | ChiPartial | partial:m1991_3 | +| ir.cpp:1991:15:1991:43 | ChiTotal | total:m1991_2 | +| ir.cpp:1991:15:1991:43 | Load | m1992_4 | +| ir.cpp:1991:15:1991:43 | SideEffect | m1991_3 | +| ir.cpp:1992:9:1992:17 | Address | &:r1992_1 | +| ir.cpp:1992:16:1992:16 | StoreValue | r1992_3 | +| ir.cpp:1992:16:1992:16 | Unary | r1992_2 | +| ir.cpp:1994:14:1994:39 | Address | &:r1994_5 | +| ir.cpp:1994:14:1994:39 | ChiPartial | partial:m1994_3 | +| ir.cpp:1994:14:1994:39 | ChiTotal | total:m1994_2 | +| ir.cpp:1994:14:1994:39 | Load | m1995_4 | +| ir.cpp:1994:14:1994:39 | SideEffect | m1994_3 | +| ir.cpp:1995:9:1995:17 | Address | &:r1995_1 | +| ir.cpp:1995:16:1995:16 | Address | &:r1995_2 | +| ir.cpp:1995:16:1995:16 | Load | ~m1994_3 | +| ir.cpp:1995:16:1995:16 | StoreValue | r1995_3 | +| ir.cpp:1999:6:1999:55 | ChiPartial | partial:m1999_3 | +| ir.cpp:1999:6:1999:55 | ChiTotal | total:m1999_2 | +| ir.cpp:1999:6:1999:55 | SideEffect | ~m2014_4 | +| ir.cpp:2000:7:2000:7 | Address | &:r2000_1 | +| ir.cpp:2002:7:2002:35 | CallTarget | func:r2002_2 | +| ir.cpp:2002:7:2002:35 | ChiPartial | partial:m2002_4 | +| ir.cpp:2002:7:2002:35 | ChiTotal | total:m1999_4 | +| ir.cpp:2002:7:2002:35 | SideEffect | ~m1999_4 | +| ir.cpp:2002:7:2002:35 | Unary | r2002_3 | +| ir.cpp:2003:5:2003:36 | CallTarget | func:r2003_1 | +| ir.cpp:2003:5:2003:36 | ChiPartial | partial:m2003_3 | +| ir.cpp:2003:5:2003:36 | ChiTotal | total:m2002_5 | +| ir.cpp:2003:5:2003:36 | SideEffect | ~m2002_5 | +| ir.cpp:2003:5:2003:36 | Unary | r2003_2 | +| ir.cpp:2004:7:2004:32 | CallTarget | func:r2004_2 | +| ir.cpp:2004:7:2004:32 | ChiPartial | partial:m2004_4 | +| ir.cpp:2004:7:2004:32 | ChiTotal | total:m2003_4 | +| ir.cpp:2004:7:2004:32 | SideEffect | ~m2003_4 | +| ir.cpp:2005:5:2005:33 | CallTarget | func:r2005_1 | +| ir.cpp:2005:5:2005:33 | ChiPartial | partial:m2005_3 | +| ir.cpp:2005:5:2005:33 | ChiTotal | total:m2004_5 | +| ir.cpp:2005:5:2005:33 | SideEffect | ~m2004_5 | +| ir.cpp:2007:7:2007:7 | Address | &:r2007_1 | +| ir.cpp:2008:5:2008:5 | Address | &:r2008_7 | +| ir.cpp:2008:11:2008:39 | Address | &:r2008_3 | +| ir.cpp:2008:11:2008:39 | CallTarget | func:r2008_2 | +| ir.cpp:2008:11:2008:39 | ChiPartial | partial:m2008_4 | +| ir.cpp:2008:11:2008:39 | ChiTotal | total:m2005_4 | +| ir.cpp:2008:11:2008:39 | SideEffect | ~m2005_4 | +| ir.cpp:2008:40:2008:42 | Load | ~m2008_5 | +| ir.cpp:2008:40:2008:42 | StoreValue | r2008_6 | +| ir.cpp:2009:7:2009:7 | Address | &:r2009_1 | +| ir.cpp:2010:5:2010:5 | Address | &:r2010_6 | +| ir.cpp:2010:9:2010:40 | Address | &:r2010_2 | +| ir.cpp:2010:9:2010:40 | CallTarget | func:r2010_1 | +| ir.cpp:2010:9:2010:40 | ChiPartial | partial:m2010_3 | +| ir.cpp:2010:9:2010:40 | ChiTotal | total:m2008_5 | +| ir.cpp:2010:9:2010:40 | SideEffect | ~m2008_5 | +| ir.cpp:2010:41:2010:43 | Load | ~m2010_4 | +| ir.cpp:2010:41:2010:43 | StoreValue | r2010_5 | +| ir.cpp:2011:7:2011:7 | Address | &:r2011_1 | +| ir.cpp:2012:5:2012:5 | Address | &:r2012_6 | +| ir.cpp:2012:11:2012:36 | CallTarget | func:r2012_2 | +| ir.cpp:2012:11:2012:36 | ChiPartial | partial:m2012_4 | +| ir.cpp:2012:11:2012:36 | ChiTotal | total:m2010_4 | +| ir.cpp:2012:11:2012:36 | SideEffect | ~m2010_4 | +| ir.cpp:2012:11:2012:36 | StoreValue | r2012_3 | +| ir.cpp:2013:7:2013:7 | Address | &:r2013_1 | +| ir.cpp:2014:5:2014:5 | Address | &:r2014_5 | +| ir.cpp:2014:9:2014:37 | CallTarget | func:r2014_1 | +| ir.cpp:2014:9:2014:37 | ChiPartial | partial:m2014_3 | +| ir.cpp:2014:9:2014:37 | ChiTotal | total:m2012_5 | +| ir.cpp:2014:9:2014:37 | SideEffect | ~m2012_5 | +| ir.cpp:2014:9:2014:37 | StoreValue | r2014_2 | +| ir.cpp:2017:6:2017:18 | ChiPartial | partial:m2017_3 | +| ir.cpp:2017:6:2017:18 | ChiTotal | total:m2017_2 | +| ir.cpp:2017:6:2017:18 | SideEffect | m2017_3 | +| ir.cpp:2018:18:2018:18 | Address | &:r2018_1 | +| ir.cpp:2019:5:2019:5 | Address | &:r2019_1 | +| ir.cpp:2019:5:2019:5 | Load | m2018_2 | +| ir.cpp:2028:6:2028:24 | ChiPartial | partial:m2028_3 | +| ir.cpp:2028:6:2028:24 | ChiTotal | total:m2028_2 | +| ir.cpp:2028:6:2028:24 | SideEffect | ~m2036_5 | +| ir.cpp:2029:12:2029:12 | Address | &:r2029_1 | +| ir.cpp:2031:5:2031:19 | ChiPartial | partial:m2031_7 | +| ir.cpp:2031:5:2031:19 | ChiTotal | total:m2031_5 | +| ir.cpp:2031:7:2031:12 | CallTarget | func:r2031_2 | +| ir.cpp:2031:7:2031:12 | ChiPartial | partial:m2031_4 | +| ir.cpp:2031:7:2031:12 | ChiTotal | total:m2028_4 | +| ir.cpp:2031:7:2031:12 | SideEffect | ~m2028_4 | +| ir.cpp:2031:7:2031:12 | Unary | r2031_3 | +| ir.cpp:2031:13:2031:16 | Address | &:r2031_6 | +| ir.cpp:2032:5:2032:19 | ChiPartial | partial:m2032_7 | +| ir.cpp:2032:5:2032:19 | ChiTotal | total:m2032_5 | +| ir.cpp:2032:7:2032:12 | CallTarget | func:r2032_2 | +| ir.cpp:2032:7:2032:12 | ChiPartial | partial:m2032_4 | +| ir.cpp:2032:7:2032:12 | ChiTotal | total:m2031_8 | +| ir.cpp:2032:7:2032:12 | SideEffect | ~m2031_8 | +| ir.cpp:2032:7:2032:12 | Unary | r2032_3 | +| ir.cpp:2032:13:2032:16 | Address | &:r2032_6 | +| ir.cpp:2033:5:2033:15 | Address | &:r2033_1 | +| ir.cpp:2033:5:2033:15 | Address | &:r2033_1 | +| ir.cpp:2033:7:2033:13 | CallTarget | func:r2033_3 | +| ir.cpp:2033:7:2033:13 | ChiPartial | partial:m2033_5 | +| ir.cpp:2033:7:2033:13 | ChiTotal | total:m2032_8 | +| ir.cpp:2033:7:2033:13 | SideEffect | ~m2032_8 | +| ir.cpp:2033:7:2033:13 | StoreValue | r2033_4 | +| ir.cpp:2034:5:2034:18 | CallTarget | func:r2034_1 | +| ir.cpp:2034:5:2034:18 | ChiPartial | partial:m2034_3 | +| ir.cpp:2034:5:2034:18 | ChiTotal | total:m2033_6 | +| ir.cpp:2034:5:2034:18 | SideEffect | ~m2033_6 | +| ir.cpp:2034:5:2034:18 | Unary | r2034_2 | +| ir.cpp:2034:5:2034:25 | ChiPartial | partial:m2034_6 | +| ir.cpp:2034:5:2034:25 | ChiTotal | total:m2034_4 | +| ir.cpp:2034:19:2034:22 | Address | &:r2034_5 | +| ir.cpp:2035:5:2035:18 | CallTarget | func:r2035_1 | +| ir.cpp:2035:5:2035:18 | ChiPartial | partial:m2035_3 | +| ir.cpp:2035:5:2035:18 | ChiTotal | total:m2034_7 | +| ir.cpp:2035:5:2035:18 | SideEffect | ~m2034_7 | +| ir.cpp:2035:5:2035:18 | Unary | r2035_2 | +| ir.cpp:2035:5:2035:25 | ChiPartial | partial:m2035_6 | +| ir.cpp:2035:5:2035:25 | ChiTotal | total:m2035_4 | +| ir.cpp:2035:19:2035:22 | Address | &:r2035_5 | +| ir.cpp:2036:5:2036:19 | CallTarget | func:r2036_2 | +| ir.cpp:2036:5:2036:19 | ChiPartial | partial:m2036_4 | +| ir.cpp:2036:5:2036:19 | ChiTotal | total:m2035_7 | +| ir.cpp:2036:5:2036:19 | SideEffect | ~m2035_7 | +| ir.cpp:2036:5:2036:19 | StoreValue | r2036_3 | +| ir.cpp:2036:5:2036:21 | Address | &:r2036_1 | +| ir.cpp:2036:5:2036:21 | Address | &:r2036_1 | +| ir.cpp:2039:6:2039:21 | ChiPartial | partial:m2039_3 | +| ir.cpp:2039:6:2039:21 | ChiTotal | total:m2039_2 | +| ir.cpp:2039:6:2039:21 | SideEffect | ~m2043_6 | +| ir.cpp:2040:7:2040:7 | Address | &:r2040_1 | +| ir.cpp:2040:7:2040:7 | Address | &:r2040_1 | +| ir.cpp:2040:7:2040:7 | Arg(this) | this:r2040_1 | +| ir.cpp:2040:7:2040:7 | CallTarget | func:r2040_3 | +| ir.cpp:2040:7:2040:7 | ChiPartial | partial:m2040_5 | +| ir.cpp:2040:7:2040:7 | ChiPartial | partial:m2040_7 | +| ir.cpp:2040:7:2040:7 | ChiTotal | total:m2039_4 | +| ir.cpp:2040:7:2040:7 | ChiTotal | total:m2040_2 | +| ir.cpp:2040:7:2040:7 | SideEffect | ~m2039_4 | +| ir.cpp:2041:11:2041:13 | Address | &:r2041_1 | +| ir.cpp:2041:23:2041:45 | StoreValue | r2041_2 | +| ir.cpp:2042:5:2042:7 | Address | &:r2042_3 | +| ir.cpp:2042:13:2042:32 | StoreValue | r2042_2 | +| ir.cpp:2043:1:2043:1 | Address | &:r2043_2 | +| ir.cpp:2043:1:2043:1 | Address | &:r2043_2 | +| ir.cpp:2043:1:2043:1 | Arg(this) | this:r2043_2 | +| ir.cpp:2043:1:2043:1 | CallTarget | func:r2043_3 | +| ir.cpp:2043:1:2043:1 | ChiPartial | partial:m2043_5 | +| ir.cpp:2043:1:2043:1 | ChiPartial | partial:m2043_8 | +| ir.cpp:2043:1:2043:1 | ChiTotal | total:m2040_6 | +| ir.cpp:2043:1:2043:1 | ChiTotal | total:m2040_8 | +| ir.cpp:2043:1:2043:1 | SideEffect | m2040_8 | +| ir.cpp:2043:1:2043:1 | SideEffect | ~m2040_6 | +| ir.cpp:2045:6:2045:19 | ChiPartial | partial:m2045_3 | +| ir.cpp:2045:6:2045:19 | ChiTotal | total:m2045_2 | +| ir.cpp:2045:6:2045:19 | SideEffect | ~m2049_9 | +| ir.cpp:2045:26:2045:26 | Address | &:r2045_5 | +| ir.cpp:2045:33:2045:33 | Address | &:r2045_7 | +| ir.cpp:2045:40:2045:40 | Address | &:r2045_9 | +| ir.cpp:2045:47:2045:47 | Address | &:r2045_11 | +| ir.cpp:2046:5:2046:5 | Address | &:r2046_7 | +| ir.cpp:2046:9:2046:9 | Address | &:r2046_1 | +| ir.cpp:2046:9:2046:9 | Condition | r2046_2 | +| ir.cpp:2046:9:2046:9 | Load | m2045_6 | +| ir.cpp:2046:9:2046:17 | Address | &:r2046_5 | +| ir.cpp:2046:9:2046:17 | Address | &:r2046_11 | +| ir.cpp:2046:9:2046:17 | Address | &:r2046_15 | +| ir.cpp:2046:9:2046:17 | Load | m2046_4 | +| ir.cpp:2046:9:2046:17 | Phi | from 2:m2046_12 | +| ir.cpp:2046:9:2046:17 | Phi | from 3:m2046_16 | +| ir.cpp:2046:9:2046:17 | StoreValue | r2046_6 | +| ir.cpp:2046:13:2046:13 | Address | &:r2046_9 | +| ir.cpp:2046:13:2046:13 | Load | m2045_8 | +| ir.cpp:2046:13:2046:13 | StoreValue | r2046_10 | +| ir.cpp:2046:17:2046:17 | Address | &:r2046_13 | +| ir.cpp:2046:17:2046:17 | Load | m2045_10 | +| ir.cpp:2046:17:2046:17 | StoreValue | r2046_14 | +| ir.cpp:2047:5:2047:5 | Address | &:r2047_7 | +| ir.cpp:2047:9:2047:9 | Address | &:r2047_1 | +| ir.cpp:2047:9:2047:9 | Condition | r2047_2 | +| ir.cpp:2047:9:2047:9 | Load | m2045_6 | +| ir.cpp:2047:9:2047:17 | Address | &:r2047_5 | +| ir.cpp:2047:9:2047:17 | Address | &:r2047_11 | +| ir.cpp:2047:9:2047:17 | Address | &:r2047_14 | +| ir.cpp:2047:9:2047:17 | Load | m2047_4 | +| ir.cpp:2047:9:2047:17 | Phi | from 5:m2047_12 | +| ir.cpp:2047:9:2047:17 | Phi | from 6:m2047_15 | +| ir.cpp:2047:9:2047:17 | StoreValue | r2047_6 | +| ir.cpp:2047:13:2047:13 | Address | &:r2047_9 | +| ir.cpp:2047:13:2047:13 | Load | m2045_8 | +| ir.cpp:2047:13:2047:13 | StoreValue | r2047_10 | +| ir.cpp:2047:17:2047:17 | StoreValue | r2047_13 | +| ir.cpp:2048:5:2048:5 | Address | &:r2048_7 | +| ir.cpp:2048:9:2048:9 | Address | &:r2048_1 | +| ir.cpp:2048:9:2048:9 | Condition | r2048_2 | +| ir.cpp:2048:9:2048:9 | Load | m2045_6 | +| ir.cpp:2048:9:2048:17 | Address | &:r2048_5 | +| ir.cpp:2048:9:2048:17 | Address | &:r2048_10 | +| ir.cpp:2048:9:2048:17 | Address | &:r2048_13 | +| ir.cpp:2048:9:2048:17 | Load | m2048_4 | +| ir.cpp:2048:9:2048:17 | Phi | from 8:m2048_11 | +| ir.cpp:2048:9:2048:17 | Phi | from 9:m2048_14 | +| ir.cpp:2048:9:2048:17 | StoreValue | r2048_6 | +| ir.cpp:2048:13:2048:13 | StoreValue | r2048_9 | +| ir.cpp:2048:17:2048:17 | StoreValue | r2048_12 | +| ir.cpp:2049:5:2049:19 | ChiPartial | partial:m2049_8 | +| ir.cpp:2049:5:2049:19 | ChiTotal | total:m2045_4 | +| ir.cpp:2049:6:2049:6 | Address | &:r2049_2 | +| ir.cpp:2049:6:2049:6 | Condition | r2049_3 | +| ir.cpp:2049:6:2049:6 | Load | m2045_6 | +| ir.cpp:2049:6:2049:14 | Address | &:r2049_6 | +| ir.cpp:2049:6:2049:14 | Address | &:r2049_7 | +| ir.cpp:2049:6:2049:14 | Address | &:r2049_11 | +| ir.cpp:2049:6:2049:14 | Address | &:r2049_14 | +| ir.cpp:2049:6:2049:14 | Load | m2049_5 | +| ir.cpp:2049:6:2049:14 | Phi | from 11:m2049_12 | +| ir.cpp:2049:6:2049:14 | Phi | from 12:m2049_15 | +| ir.cpp:2049:10:2049:10 | StoreValue | r2049_10 | +| ir.cpp:2049:14:2049:14 | StoreValue | r2049_13 | +| ir.cpp:2049:19:2049:19 | StoreValue | r2049_1 | +| ir.cpp:2055:6:2055:22 | ChiPartial | partial:m2055_3 | +| ir.cpp:2055:6:2055:22 | ChiTotal | total:m2055_2 | +| ir.cpp:2055:6:2055:22 | SideEffect | m2055_3 | +| ir.cpp:2055:29:2055:29 | Address | &:r2055_5 | +| ir.cpp:2055:46:2055:46 | Address | &:r2055_7 | +| ir.cpp:2055:63:2055:63 | Address | &:r2055_9 | +| ir.cpp:2055:80:2055:80 | Address | &:r2055_11 | +| ir.cpp:2056:5:2056:5 | Address | &:r2056_7 | +| ir.cpp:2056:9:2056:9 | Address | &:r2056_1 | +| ir.cpp:2056:9:2056:9 | Condition | r2056_2 | +| ir.cpp:2056:9:2056:9 | Load | m2055_6 | +| ir.cpp:2056:9:2056:17 | Address | &:r2056_5 | +| ir.cpp:2056:9:2056:17 | Address | &:r2056_11 | +| ir.cpp:2056:9:2056:17 | Address | &:r2056_15 | +| ir.cpp:2056:9:2056:17 | Load | m2056_4 | +| ir.cpp:2056:9:2056:17 | Phi | from 2:m2056_12 | +| ir.cpp:2056:9:2056:17 | Phi | from 3:m2056_16 | +| ir.cpp:2056:9:2056:17 | StoreValue | r2056_6 | +| ir.cpp:2056:13:2056:13 | Address | &:r2056_9 | +| ir.cpp:2056:13:2056:13 | Load | m2055_8 | +| ir.cpp:2056:13:2056:13 | StoreValue | r2056_10 | +| ir.cpp:2056:17:2056:17 | Address | &:r2056_13 | +| ir.cpp:2056:17:2056:17 | Load | m2055_10 | +| ir.cpp:2056:17:2056:17 | StoreValue | r2056_14 | +| ir.cpp:2057:5:2057:5 | Address | &:r2057_10 | +| ir.cpp:2057:9:2057:9 | Address | &:r2057_2 | +| ir.cpp:2057:9:2057:9 | Address | &:r2057_6 | +| ir.cpp:2057:9:2057:9 | Address | &:r2057_17 | +| ir.cpp:2057:9:2057:9 | Address | &:r2057_23 | +| ir.cpp:2057:9:2057:9 | Condition | r2057_3 | +| ir.cpp:2057:9:2057:9 | Load | m2055_6 | +| ir.cpp:2057:9:2057:9 | Load | m2057_5 | +| ir.cpp:2057:9:2057:9 | Phi | from 5:m2057_18 | +| ir.cpp:2057:9:2057:9 | Phi | from 6:m2057_24 | +| ir.cpp:2057:9:2057:9 | StoreValue | r2057_7 | +| ir.cpp:2057:9:2057:31 | Address | &:r2057_1 | +| ir.cpp:2057:9:2057:31 | Address | &:r2057_1 | +| ir.cpp:2057:9:2057:31 | Load | m2057_8 | +| ir.cpp:2057:9:2057:31 | StoreValue | r2057_9 | +| ir.cpp:2057:13:2057:13 | Address | &:r2057_12 | +| ir.cpp:2057:13:2057:13 | Address | &:r2057_12 | +| ir.cpp:2057:13:2057:13 | Address | &:r2057_13 | +| ir.cpp:2057:13:2057:13 | Load | m2055_8 | +| ir.cpp:2057:13:2057:13 | Load | m2057_15 | +| ir.cpp:2057:13:2057:13 | StoreValue | r2057_14 | +| ir.cpp:2057:13:2057:13 | StoreValue | r2057_16 | +| ir.cpp:2057:17:2057:31 | Address | &:r2057_19 | +| ir.cpp:2057:17:2057:31 | Address | &:r2057_19 | +| ir.cpp:2057:17:2057:31 | Load | m2057_21 | +| ir.cpp:2057:17:2057:31 | StoreValue | r2057_20 | +| ir.cpp:2057:17:2057:31 | StoreValue | r2057_22 | +| ir.cpp:2058:5:2058:5 | Address | &:r2058_10 | +| ir.cpp:2058:9:2058:9 | Address | &:r2058_2 | +| ir.cpp:2058:9:2058:9 | Address | &:r2058_6 | +| ir.cpp:2058:9:2058:9 | Address | &:r2058_16 | +| ir.cpp:2058:9:2058:9 | Address | &:r2058_22 | +| ir.cpp:2058:9:2058:9 | Condition | r2058_3 | +| ir.cpp:2058:9:2058:9 | Load | m2055_6 | +| ir.cpp:2058:9:2058:9 | Load | m2058_5 | +| ir.cpp:2058:9:2058:9 | Phi | from 8:m2058_17 | +| ir.cpp:2058:9:2058:9 | Phi | from 9:m2058_23 | +| ir.cpp:2058:9:2058:9 | StoreValue | r2058_7 | +| ir.cpp:2058:9:2058:45 | Address | &:r2058_1 | +| ir.cpp:2058:9:2058:45 | Address | &:r2058_1 | +| ir.cpp:2058:9:2058:45 | Load | m2058_8 | +| ir.cpp:2058:9:2058:45 | StoreValue | r2058_9 | +| ir.cpp:2058:13:2058:27 | Address | &:r2058_12 | +| ir.cpp:2058:13:2058:27 | Address | &:r2058_12 | +| ir.cpp:2058:13:2058:27 | Load | m2058_14 | +| ir.cpp:2058:13:2058:27 | StoreValue | r2058_13 | +| ir.cpp:2058:13:2058:27 | StoreValue | r2058_15 | +| ir.cpp:2058:31:2058:45 | Address | &:r2058_18 | +| ir.cpp:2058:31:2058:45 | Address | &:r2058_18 | +| ir.cpp:2058:31:2058:45 | Load | m2058_20 | +| ir.cpp:2058:31:2058:45 | StoreValue | r2058_19 | +| ir.cpp:2058:31:2058:45 | StoreValue | r2058_21 | +| ir.cpp:2059:6:2059:6 | Address | &:r2059_11 | +| ir.cpp:2059:6:2059:6 | Unary | r2059_11 | +| ir.cpp:2059:6:2059:18 | Address | &:r2059_13 | +| ir.cpp:2059:10:2059:10 | Address | &:r2059_5 | +| ir.cpp:2059:10:2059:10 | Condition | r2059_6 | +| ir.cpp:2059:10:2059:10 | Load | m2055_6 | +| ir.cpp:2059:10:2059:18 | Address | &:r2059_9 | +| ir.cpp:2059:10:2059:18 | Address | &:r2059_17 | +| ir.cpp:2059:10:2059:18 | Address | &:r2059_21 | +| ir.cpp:2059:10:2059:18 | Load | m2059_8 | +| ir.cpp:2059:10:2059:18 | Phi | from 11:m2059_18 | +| ir.cpp:2059:10:2059:18 | Phi | from 12:m2059_22 | +| ir.cpp:2059:10:2059:18 | StoreValue | r2059_10 | +| ir.cpp:2059:14:2059:14 | Address | &:r2059_15 | +| ir.cpp:2059:14:2059:14 | Load | m2055_8 | +| ir.cpp:2059:14:2059:14 | StoreValue | r2059_16 | +| ir.cpp:2059:18:2059:18 | Address | &:r2059_19 | +| ir.cpp:2059:18:2059:18 | Load | m2055_10 | +| ir.cpp:2059:18:2059:18 | StoreValue | r2059_20 | +| ir.cpp:2059:23:2059:37 | Address | &:r2059_1 | +| ir.cpp:2059:23:2059:37 | Address | &:r2059_1 | +| ir.cpp:2059:23:2059:37 | Load | m2059_3 | +| ir.cpp:2059:23:2059:37 | StoreValue | r2059_2 | +| ir.cpp:2059:23:2059:37 | StoreValue | r2059_4 | +| ir.cpp:2062:8:2062:8 | Address | &:r2062_5 | +| ir.cpp:2062:8:2062:8 | Address | &:r2062_5 | +| ir.cpp:2062:8:2062:8 | Address | &:r2062_5 | +| ir.cpp:2062:8:2062:8 | Address | &:r2062_5 | +| ir.cpp:2062:8:2062:8 | Address | &:r2062_5 | +| ir.cpp:2062:8:2062:8 | Address | &:r2062_5 | +| ir.cpp:2062:8:2062:8 | Address | &:r2062_7 | +| ir.cpp:2062:8:2062:8 | Address | &:r2062_7 | +| ir.cpp:2062:8:2062:8 | Address | &:r2062_7 | +| ir.cpp:2062:8:2062:8 | Address | &:r2062_7 | +| ir.cpp:2062:8:2062:8 | Address | &:r2062_7 | +| ir.cpp:2062:8:2062:8 | Address | &:r2062_7 | +| ir.cpp:2062:8:2062:8 | Address | &:r2062_10 | +| ir.cpp:2062:8:2062:8 | ChiPartial | partial:m2062_3 | +| ir.cpp:2062:8:2062:8 | ChiPartial | partial:m2062_3 | +| ir.cpp:2062:8:2062:8 | ChiPartial | partial:m2062_3 | +| ir.cpp:2062:8:2062:8 | ChiTotal | total:m2062_2 | +| ir.cpp:2062:8:2062:8 | ChiTotal | total:m2062_2 | +| ir.cpp:2062:8:2062:8 | ChiTotal | total:m2062_2 | +| ir.cpp:2062:8:2062:8 | Load | m0_10 | +| ir.cpp:2062:8:2062:8 | Load | m2062_6 | +| ir.cpp:2062:8:2062:8 | Load | m2062_6 | +| ir.cpp:2062:8:2062:8 | Load | m2062_6 | +| ir.cpp:2062:8:2062:8 | SideEffect | m2062_3 | +| ir.cpp:2062:8:2062:8 | SideEffect | m2062_3 | +| ir.cpp:2062:8:2062:8 | SideEffect | m2062_3 | +| ir.cpp:2062:8:2062:8 | SideEffect | m2062_8 | +| ir.cpp:2062:8:2062:8 | SideEffect | m2062_8 | +| ir.cpp:2062:8:2062:8 | SideEffect | m2062_8 | +| ir.cpp:2063:13:2063:29 | Address | &:r2063_5 | +| ir.cpp:2063:13:2063:29 | Address | &:r2063_5 | +| ir.cpp:2063:13:2063:29 | Address | &:r2063_7 | +| ir.cpp:2063:13:2063:29 | Address | &:r2063_7 | +| ir.cpp:2063:13:2063:29 | ChiPartial | partial:m2063_3 | +| ir.cpp:2063:13:2063:29 | ChiTotal | total:m2063_2 | +| ir.cpp:2063:13:2063:29 | Load | m2063_6 | +| ir.cpp:2063:13:2063:29 | SideEffect | m2063_3 | +| ir.cpp:2063:13:2063:29 | SideEffect | m2063_8 | +| ir.cpp:2066:6:2066:25 | ChiPartial | partial:m2066_3 | +| ir.cpp:2066:6:2066:25 | ChiTotal | total:m2066_2 | +| ir.cpp:2066:6:2066:25 | SideEffect | ~m2070_32 | +| ir.cpp:2066:32:2066:32 | Address | &:r2066_5 | +| ir.cpp:2066:52:2066:52 | Address | &:r2066_7 | +| ir.cpp:2066:72:2066:72 | Address | &:r2066_9 | +| ir.cpp:2066:92:2066:92 | Address | &:r2066_11 | +| ir.cpp:2067:5:2067:5 | Address | &:r2067_1 | +| ir.cpp:2067:5:2067:5 | Address | &:r2067_1 | +| ir.cpp:2067:5:2067:5 | Arg(this) | this:r2067_1 | +| ir.cpp:2067:5:2067:5 | ChiPartial | partial:m2067_16 | +| ir.cpp:2067:5:2067:5 | ChiTotal | total:m2066_12 | +| ir.cpp:2067:5:2067:5 | SideEffect | m2066_12 | +| ir.cpp:2067:7:2067:7 | CallTarget | func:r2067_2 | +| ir.cpp:2067:7:2067:7 | ChiPartial | partial:m2067_12 | +| ir.cpp:2067:7:2067:7 | ChiTotal | total:m2066_4 | +| ir.cpp:2067:7:2067:7 | SideEffect | ~m2066_4 | +| ir.cpp:2067:7:2067:7 | Unary | r2067_11 | +| ir.cpp:2067:9:2067:9 | Address | &:r2067_3 | +| ir.cpp:2067:9:2067:9 | Condition | r2067_4 | +| ir.cpp:2067:9:2067:9 | Load | m2066_6 | +| ir.cpp:2067:9:2067:17 | Address | &:r2067_7 | +| ir.cpp:2067:9:2067:17 | Address | &:r2067_10 | +| ir.cpp:2067:9:2067:17 | Address | &:r2067_20 | +| ir.cpp:2067:9:2067:17 | Address | &:r2067_23 | +| ir.cpp:2067:9:2067:17 | Arg(0) | 0:r2067_10 | +| ir.cpp:2067:9:2067:17 | Load | m2067_6 | +| ir.cpp:2067:9:2067:17 | Phi | from 2:m2067_21 | +| ir.cpp:2067:9:2067:17 | Phi | from 3:m2067_24 | +| ir.cpp:2067:9:2067:17 | SideEffect | ~m2067_13 | +| ir.cpp:2067:9:2067:17 | Unary | r2067_8 | +| ir.cpp:2067:9:2067:17 | Unary | r2067_9 | +| ir.cpp:2067:13:2067:13 | StoreValue | r2067_19 | +| ir.cpp:2067:17:2067:17 | StoreValue | r2067_22 | +| ir.cpp:2068:5:2068:5 | Address | &:r2068_1 | +| ir.cpp:2068:5:2068:5 | Address | &:r2068_1 | +| ir.cpp:2068:5:2068:5 | Arg(this) | this:r2068_1 | +| ir.cpp:2068:5:2068:5 | ChiPartial | partial:m2068_19 | +| ir.cpp:2068:5:2068:5 | ChiTotal | total:m2067_17 | +| ir.cpp:2068:5:2068:5 | SideEffect | m2067_17 | +| ir.cpp:2068:7:2068:7 | CallTarget | func:r2068_2 | +| ir.cpp:2068:7:2068:7 | ChiPartial | partial:m2068_15 | +| ir.cpp:2068:7:2068:7 | ChiTotal | total:m2068_7 | +| ir.cpp:2068:7:2068:7 | SideEffect | ~m2068_7 | +| ir.cpp:2068:7:2068:7 | Unary | r2068_14 | +| ir.cpp:2068:9:2068:9 | Address | &:r2068_4 | +| ir.cpp:2068:9:2068:9 | Address | &:r2068_9 | +| ir.cpp:2068:9:2068:9 | Address | &:r2068_35 | +| ir.cpp:2068:9:2068:9 | Address | &:r2068_46 | +| ir.cpp:2068:9:2068:9 | Condition | r2068_5 | +| ir.cpp:2068:9:2068:9 | Load | m2066_6 | +| ir.cpp:2068:9:2068:9 | Load | m2068_8 | +| ir.cpp:2068:9:2068:9 | Phi | from 5:m2068_36 | +| ir.cpp:2068:9:2068:9 | Phi | from 5:~m2068_30 | +| ir.cpp:2068:9:2068:9 | Phi | from 6:m2068_47 | +| ir.cpp:2068:9:2068:9 | Phi | from 6:~m2068_42 | +| ir.cpp:2068:9:2068:9 | StoreValue | r2068_10 | +| ir.cpp:2068:9:2068:34 | Address | &:r2068_3 | +| ir.cpp:2068:9:2068:34 | Address | &:r2068_13 | +| ir.cpp:2068:9:2068:34 | Arg(0) | 0:r2068_13 | +| ir.cpp:2068:9:2068:34 | SideEffect | ~m2068_11 | +| ir.cpp:2068:9:2068:34 | Unary | r2068_3 | +| ir.cpp:2068:9:2068:34 | Unary | r2068_12 | +| ir.cpp:2068:13:2068:13 | Address | &:r2068_22 | +| ir.cpp:2068:13:2068:13 | Address | &:r2068_22 | +| ir.cpp:2068:13:2068:13 | Address | &:r2068_22 | +| ir.cpp:2068:13:2068:13 | Address | &:r2068_27 | +| ir.cpp:2068:13:2068:13 | Arg(0) | 0:r2068_27 | +| ir.cpp:2068:13:2068:13 | Arg(this) | this:r2068_22 | +| ir.cpp:2068:13:2068:13 | CallTarget | func:r2068_24 | +| ir.cpp:2068:13:2068:13 | ChiPartial | partial:m2068_29 | +| ir.cpp:2068:13:2068:13 | ChiPartial | partial:m2068_32 | +| ir.cpp:2068:13:2068:13 | ChiTotal | total:m2067_13 | +| ir.cpp:2068:13:2068:13 | ChiTotal | total:m2068_23 | +| ir.cpp:2068:13:2068:13 | Load | m2068_33 | +| ir.cpp:2068:13:2068:13 | SideEffect | ~m2066_8 | +| ir.cpp:2068:13:2068:13 | SideEffect | ~m2067_13 | +| ir.cpp:2068:13:2068:13 | StoreValue | r2068_34 | +| ir.cpp:2068:13:2068:13 | Unary | r2068_25 | +| ir.cpp:2068:13:2068:13 | Unary | r2068_26 | +| ir.cpp:2068:17:2068:34 | Address | &:r2068_37 | +| ir.cpp:2068:17:2068:34 | Address | &:r2068_37 | +| ir.cpp:2068:17:2068:34 | Address | &:r2068_37 | +| ir.cpp:2068:17:2068:34 | Arg(this) | this:r2068_37 | +| ir.cpp:2068:17:2068:34 | CallTarget | func:r2068_39 | +| ir.cpp:2068:17:2068:34 | ChiPartial | partial:m2068_41 | +| ir.cpp:2068:17:2068:34 | ChiPartial | partial:m2068_43 | +| ir.cpp:2068:17:2068:34 | ChiTotal | total:m2067_13 | +| ir.cpp:2068:17:2068:34 | ChiTotal | total:m2068_38 | +| ir.cpp:2068:17:2068:34 | Load | m2068_44 | +| ir.cpp:2068:17:2068:34 | SideEffect | ~m2067_13 | +| ir.cpp:2068:17:2068:34 | StoreValue | r2068_45 | +| ir.cpp:2069:5:2069:5 | Address | &:r2069_1 | +| ir.cpp:2069:5:2069:5 | Address | &:r2069_1 | +| ir.cpp:2069:5:2069:5 | Arg(this) | this:r2069_1 | +| ir.cpp:2069:5:2069:5 | ChiPartial | partial:m2069_19 | +| ir.cpp:2069:5:2069:5 | ChiTotal | total:m2068_20 | +| ir.cpp:2069:5:2069:5 | SideEffect | m2068_20 | +| ir.cpp:2069:7:2069:7 | CallTarget | func:r2069_2 | +| ir.cpp:2069:7:2069:7 | ChiPartial | partial:m2069_15 | +| ir.cpp:2069:7:2069:7 | ChiTotal | total:m2069_7 | +| ir.cpp:2069:7:2069:7 | SideEffect | ~m2069_7 | +| ir.cpp:2069:7:2069:7 | Unary | r2069_14 | +| ir.cpp:2069:9:2069:9 | Address | &:r2069_4 | +| ir.cpp:2069:9:2069:9 | Address | &:r2069_9 | +| ir.cpp:2069:9:2069:9 | Address | &:r2069_31 | +| ir.cpp:2069:9:2069:9 | Address | &:r2069_42 | +| ir.cpp:2069:9:2069:9 | Condition | r2069_5 | +| ir.cpp:2069:9:2069:9 | Load | m2066_6 | +| ir.cpp:2069:9:2069:9 | Load | m2069_8 | +| ir.cpp:2069:9:2069:9 | Phi | from 8:m2069_32 | +| ir.cpp:2069:9:2069:9 | Phi | from 8:~m2069_27 | +| ir.cpp:2069:9:2069:9 | Phi | from 9:m2069_43 | +| ir.cpp:2069:9:2069:9 | Phi | from 9:~m2069_38 | +| ir.cpp:2069:9:2069:9 | StoreValue | r2069_10 | +| ir.cpp:2069:9:2069:51 | Address | &:r2069_3 | +| ir.cpp:2069:9:2069:51 | Address | &:r2069_13 | +| ir.cpp:2069:9:2069:51 | Arg(0) | 0:r2069_13 | +| ir.cpp:2069:9:2069:51 | SideEffect | ~m2069_11 | +| ir.cpp:2069:9:2069:51 | Unary | r2069_3 | +| ir.cpp:2069:9:2069:51 | Unary | r2069_12 | +| ir.cpp:2069:13:2069:30 | Address | &:r2069_22 | +| ir.cpp:2069:13:2069:30 | Address | &:r2069_22 | +| ir.cpp:2069:13:2069:30 | Address | &:r2069_22 | +| ir.cpp:2069:13:2069:30 | Arg(this) | this:r2069_22 | +| ir.cpp:2069:13:2069:30 | CallTarget | func:r2069_24 | +| ir.cpp:2069:13:2069:30 | ChiPartial | partial:m2069_26 | +| ir.cpp:2069:13:2069:30 | ChiPartial | partial:m2069_28 | +| ir.cpp:2069:13:2069:30 | ChiTotal | total:m2068_16 | +| ir.cpp:2069:13:2069:30 | ChiTotal | total:m2069_23 | +| ir.cpp:2069:13:2069:30 | Load | m2069_29 | +| ir.cpp:2069:13:2069:30 | SideEffect | ~m2068_16 | +| ir.cpp:2069:13:2069:30 | StoreValue | r2069_30 | +| ir.cpp:2069:34:2069:51 | Address | &:r2069_33 | +| ir.cpp:2069:34:2069:51 | Address | &:r2069_33 | +| ir.cpp:2069:34:2069:51 | Address | &:r2069_33 | +| ir.cpp:2069:34:2069:51 | Arg(this) | this:r2069_33 | +| ir.cpp:2069:34:2069:51 | CallTarget | func:r2069_35 | +| ir.cpp:2069:34:2069:51 | ChiPartial | partial:m2069_37 | +| ir.cpp:2069:34:2069:51 | ChiPartial | partial:m2069_39 | +| ir.cpp:2069:34:2069:51 | ChiTotal | total:m2068_16 | +| ir.cpp:2069:34:2069:51 | ChiTotal | total:m2069_34 | +| ir.cpp:2069:34:2069:51 | Load | m2069_40 | +| ir.cpp:2069:34:2069:51 | SideEffect | ~m2068_16 | +| ir.cpp:2069:34:2069:51 | StoreValue | r2069_41 | +| ir.cpp:2070:5:2070:19 | ChiPartial | partial:m2070_35 | +| ir.cpp:2070:5:2070:19 | ChiTotal | total:m2070_17 | +| ir.cpp:2070:5:2070:19 | SideEffect | m2070_17 | +| ir.cpp:2070:6:2070:6 | Address | &:r2070_1 | +| ir.cpp:2070:6:2070:6 | Address | &:r2070_1 | +| ir.cpp:2070:6:2070:6 | Arg(this) | this:r2070_1 | +| ir.cpp:2070:6:2070:6 | ChiPartial | partial:m2070_16 | +| ir.cpp:2070:6:2070:6 | ChiTotal | total:m2069_20 | +| ir.cpp:2070:6:2070:6 | SideEffect | m2069_20 | +| ir.cpp:2070:8:2070:8 | CallTarget | func:r2070_2 | +| ir.cpp:2070:8:2070:8 | ChiPartial | partial:m2070_12 | +| ir.cpp:2070:8:2070:8 | ChiTotal | total:m2069_16 | +| ir.cpp:2070:8:2070:8 | SideEffect | ~m2069_16 | +| ir.cpp:2070:8:2070:8 | Unary | r2070_11 | +| ir.cpp:2070:8:2070:19 | Address | &:r2070_18 | +| ir.cpp:2070:8:2070:19 | Address | &:r2070_18 | +| ir.cpp:2070:8:2070:19 | Arg(this) | this:r2070_18 | +| ir.cpp:2070:10:2070:10 | Address | &:r2070_3 | +| ir.cpp:2070:10:2070:10 | Condition | r2070_4 | +| ir.cpp:2070:10:2070:10 | Load | m2066_6 | +| ir.cpp:2070:10:2070:18 | Address | &:r2070_7 | +| ir.cpp:2070:10:2070:18 | Address | &:r2070_10 | +| ir.cpp:2070:10:2070:18 | Address | &:r2070_39 | +| ir.cpp:2070:10:2070:18 | Address | &:r2070_42 | +| ir.cpp:2070:10:2070:18 | Arg(0) | 0:r2070_10 | +| ir.cpp:2070:10:2070:18 | Load | m2070_6 | +| ir.cpp:2070:10:2070:18 | Phi | from 11:m2070_40 | +| ir.cpp:2070:10:2070:18 | Phi | from 12:m2070_43 | +| ir.cpp:2070:10:2070:18 | SideEffect | ~m2070_13 | +| ir.cpp:2070:10:2070:18 | Unary | r2070_8 | +| ir.cpp:2070:10:2070:18 | Unary | r2070_9 | +| ir.cpp:2070:14:2070:14 | StoreValue | r2070_38 | +| ir.cpp:2070:18:2070:18 | StoreValue | r2070_41 | +| ir.cpp:2070:21:2070:21 | CallTarget | func:r2070_19 | +| ir.cpp:2070:21:2070:21 | ChiPartial | partial:m2070_31 | +| ir.cpp:2070:21:2070:21 | ChiTotal | total:m2070_25 | +| ir.cpp:2070:21:2070:21 | SideEffect | ~m2070_25 | +| ir.cpp:2070:21:2070:21 | Unary | r2070_30 | +| ir.cpp:2070:23:2070:40 | Address | &:r2070_20 | +| ir.cpp:2070:23:2070:40 | Address | &:r2070_20 | +| ir.cpp:2070:23:2070:40 | Address | &:r2070_29 | +| ir.cpp:2070:23:2070:40 | Arg(0) | 0:r2070_29 | +| ir.cpp:2070:23:2070:40 | Arg(this) | this:r2070_20 | +| ir.cpp:2070:23:2070:40 | CallTarget | func:r2070_22 | +| ir.cpp:2070:23:2070:40 | ChiPartial | partial:m2070_24 | +| ir.cpp:2070:23:2070:40 | ChiPartial | partial:m2070_26 | +| ir.cpp:2070:23:2070:40 | ChiTotal | total:m2070_13 | +| ir.cpp:2070:23:2070:40 | ChiTotal | total:m2070_21 | +| ir.cpp:2070:23:2070:40 | SideEffect | ~m2070_13 | +| ir.cpp:2070:23:2070:40 | SideEffect | ~m2070_27 | +| ir.cpp:2070:23:2070:40 | Unary | r2070_20 | +| ir.cpp:2070:23:2070:40 | Unary | r2070_28 | +| ir.cpp:2075:14:2075:22 | Address | &:r2075_7 | +| ir.cpp:2075:14:2075:22 | ChiPartial | partial:m2075_3 | +| ir.cpp:2075:14:2075:22 | ChiTotal | total:m2075_2 | +| ir.cpp:2075:14:2075:22 | Load | m2080_2 | +| ir.cpp:2075:14:2075:22 | SideEffect | ~m2077_6 | +| ir.cpp:2075:37:2075:37 | Address | &:r2075_5 | +| ir.cpp:2076:16:2076:16 | Address | &:r2076_1 | +| ir.cpp:2077:3:2077:3 | Address | &:r2077_10 | +| ir.cpp:2077:7:2077:7 | Address | &:r2077_1 | +| ir.cpp:2077:7:2077:7 | Left | r2077_2 | +| ir.cpp:2077:7:2077:7 | Load | m2075_6 | +| ir.cpp:2077:7:2077:13 | Condition | r2077_4 | +| ir.cpp:2077:7:2079:28 | Address | &:r2077_8 | +| ir.cpp:2077:7:2079:28 | Address | &:r2077_12 | +| ir.cpp:2077:7:2079:28 | Address | &:r2077_14 | +| ir.cpp:2077:7:2079:28 | Load | m2077_7 | +| ir.cpp:2077:7:2079:28 | Phi | from 2:m2077_13 | +| ir.cpp:2077:7:2079:28 | Phi | from 2:~m2078_6 | +| ir.cpp:2077:7:2079:28 | Phi | from 3:m2077_15 | +| ir.cpp:2077:7:2079:28 | Phi | from 3:~m2079_6 | +| ir.cpp:2077:7:2079:28 | StoreValue | r2077_9 | +| ir.cpp:2077:11:2077:13 | Right | r2077_3 | +| ir.cpp:2078:6:2078:20 | CallTarget | func:r2078_1 | +| ir.cpp:2078:6:2078:20 | ChiPartial | partial:m2078_5 | +| ir.cpp:2078:6:2078:20 | ChiTotal | total:m2075_4 | +| ir.cpp:2078:6:2078:20 | SideEffect | ~m2075_4 | +| ir.cpp:2078:6:2078:26 | StoreValue | r2078_9 | +| ir.cpp:2078:22:2078:22 | Address | &:r2078_2 | +| ir.cpp:2078:22:2078:22 | Arg(0) | 0:r2078_3 | +| ir.cpp:2078:22:2078:22 | Load | m2075_6 | +| ir.cpp:2078:26:2078:26 | Address | &:r2078_7 | +| ir.cpp:2078:26:2078:26 | Load | m2075_6 | +| ir.cpp:2078:26:2078:26 | Unary | r2078_8 | +| ir.cpp:2079:5:2079:28 | StoreValue | r2079_9 | +| ir.cpp:2079:6:2079:20 | CallTarget | func:r2079_1 | +| ir.cpp:2079:6:2079:20 | ChiPartial | partial:m2079_5 | +| ir.cpp:2079:6:2079:20 | ChiTotal | total:m2075_4 | +| ir.cpp:2079:6:2079:20 | SideEffect | ~m2075_4 | +| ir.cpp:2079:6:2079:27 | Unary | r2079_8 | +| ir.cpp:2079:22:2079:22 | Address | &:r2079_2 | +| ir.cpp:2079:22:2079:22 | Arg(0) | 0:r2079_3 | +| ir.cpp:2079:22:2079:22 | Load | m2075_6 | +| ir.cpp:2079:26:2079:27 | Unary | r2079_7 | +| ir.cpp:2080:1:2080:1 | Address | &:r2080_1 | +| ir.cpp:2082:6:2082:17 | ChiPartial | partial:m2082_3 | +| ir.cpp:2082:6:2082:17 | ChiTotal | total:m2082_2 | +| ir.cpp:2082:6:2082:17 | SideEffect | ~m2085_6 | +| ir.cpp:2083:8:2083:8 | Address | &:r2083_1 | +| ir.cpp:2083:12:2083:18 | Address | &:r2083_4 | +| ir.cpp:2083:12:2083:18 | Arg(0) | 0:r2083_3 | +| ir.cpp:2083:12:2083:18 | CallTarget | func:r2083_2 | +| ir.cpp:2083:12:2083:18 | ChiPartial | partial:m2083_5 | +| ir.cpp:2083:12:2083:18 | ChiTotal | total:m2082_4 | +| ir.cpp:2083:12:2083:18 | SideEffect | ~m2082_4 | +| ir.cpp:2083:12:2083:18 | StoreValue | r2083_8 | +| ir.cpp:2083:12:2083:18 | Unary | r2083_4 | +| ir.cpp:2084:3:2084:4 | Address | &:r2084_4 | +| ir.cpp:2084:3:2084:8 | ChiPartial | partial:m2084_5 | +| ir.cpp:2084:3:2084:8 | ChiTotal | total:m2083_7 | +| ir.cpp:2084:4:2084:4 | Address | &:r2084_2 | +| ir.cpp:2084:4:2084:4 | Load | m2083_9 | +| ir.cpp:2084:4:2084:4 | Unary | r2084_3 | +| ir.cpp:2084:8:2084:8 | StoreValue | r2084_1 | +| ir.cpp:2085:3:2085:10 | CallTarget | func:r2085_1 | +| ir.cpp:2085:3:2085:10 | ChiPartial | partial:m2085_5 | +| ir.cpp:2085:3:2085:10 | ChiTotal | total:m2083_6 | +| ir.cpp:2085:3:2085:10 | SideEffect | ~m2083_6 | +| ir.cpp:2085:10:2085:10 | Address | &:r2085_2 | +| ir.cpp:2085:10:2085:10 | Arg(0) | 0:r2085_3 | +| ir.cpp:2085:10:2085:10 | Load | m2083_9 | +| ir.cpp:2088:7:2088:7 | Address | &:r2088_5 | +| ir.cpp:2088:7:2088:7 | Address | &:r2088_5 | +| ir.cpp:2088:7:2088:7 | Address | &:r2088_7 | +| ir.cpp:2088:7:2088:7 | Address | &:r2088_7 | +| ir.cpp:2088:7:2088:7 | ChiPartial | partial:m2088_3 | +| ir.cpp:2088:7:2088:7 | ChiTotal | total:m2088_2 | +| ir.cpp:2088:7:2088:7 | Load | m2088_6 | +| ir.cpp:2088:7:2088:7 | SideEffect | m2088_3 | +| ir.cpp:2088:7:2088:7 | SideEffect | m2088_8 | +| ir.cpp:2090:10:2090:24 | ChiPartial | partial:m2090_3 | +| ir.cpp:2090:10:2090:24 | ChiTotal | total:m2090_2 | +| ir.cpp:2090:10:2090:24 | SideEffect | m2090_3 | +| ir.cpp:2090:32:2090:32 | Address | &:r2090_5 | +| ir.cpp:2090:32:2090:32 | Address | &:r2090_5 | +| ir.cpp:2090:32:2090:32 | Address | &:r2090_7 | +| ir.cpp:2090:32:2090:32 | Address | &:r2090_7 | +| ir.cpp:2090:32:2090:32 | Load | m2090_6 | +| ir.cpp:2090:32:2090:32 | SideEffect | m2090_8 | +| ir.cpp:2092:13:2092:18 | Address | &:r2092_5 | +| ir.cpp:2092:13:2092:18 | Address | &:r2092_5 | +| ir.cpp:2092:13:2092:18 | Address | &:r2092_7 | +| ir.cpp:2092:13:2092:18 | Address | &:r2092_7 | +| ir.cpp:2092:13:2092:18 | ChiPartial | partial:m2092_3 | +| ir.cpp:2092:13:2092:18 | ChiTotal | total:m2092_2 | +| ir.cpp:2092:13:2092:18 | Load | m2092_6 | +| ir.cpp:2092:13:2092:18 | SideEffect | m2092_3 | +| ir.cpp:2092:13:2092:18 | SideEffect | m2092_8 | +| ir.cpp:2095:7:2095:7 | Address | &:r2095_5 | +| ir.cpp:2095:7:2095:7 | Address | &:r2095_5 | +| ir.cpp:2095:7:2095:7 | Address | &:r2095_7 | +| ir.cpp:2095:7:2095:7 | Address | &:r2095_7 | +| ir.cpp:2095:7:2095:7 | Address | &:r2095_9 | +| ir.cpp:2095:7:2095:7 | Arg(this) | this:r2095_9 | +| ir.cpp:2095:7:2095:7 | CallTarget | func:r2095_10 | +| ir.cpp:2095:7:2095:7 | ChiPartial | partial:m2095_3 | +| ir.cpp:2095:7:2095:7 | ChiPartial | partial:m2095_12 | +| ir.cpp:2095:7:2095:7 | ChiPartial | partial:m2095_14 | +| ir.cpp:2095:7:2095:7 | ChiTotal | total:m2095_2 | +| ir.cpp:2095:7:2095:7 | ChiTotal | total:m2095_4 | +| ir.cpp:2095:7:2095:7 | ChiTotal | total:m2095_8 | +| ir.cpp:2095:7:2095:7 | Load | m2095_6 | +| ir.cpp:2095:7:2095:7 | SideEffect | m2095_15 | +| ir.cpp:2095:7:2095:7 | SideEffect | ~m2095_4 | +| ir.cpp:2095:7:2095:7 | SideEffect | ~m2095_13 | +| ir.cpp:2095:7:2095:7 | Unary | m2095_6 | +| ir.cpp:2098:5:2098:13 | Address | &:r2098_5 | +| ir.cpp:2098:5:2098:13 | Address | &:r2098_5 | +| ir.cpp:2098:5:2098:13 | Address | &:r2098_7 | +| ir.cpp:2098:5:2098:13 | Address | &:r2098_7 | +| ir.cpp:2098:5:2098:13 | ChiPartial | partial:m2098_3 | +| ir.cpp:2098:5:2098:13 | ChiTotal | total:m2098_2 | +| ir.cpp:2098:5:2098:13 | Load | m2098_6 | +| ir.cpp:2098:5:2098:13 | SideEffect | m2098_8 | +| ir.cpp:2098:5:2098:13 | SideEffect | ~m2098_14 | +| ir.cpp:2098:5:2098:13 | Unary | m2098_6 | +| ir.cpp:2098:18:2098:18 | Arg(this) | this:r2098_10 | +| ir.cpp:2098:18:2098:18 | CallTarget | func:r2098_11 | +| ir.cpp:2098:18:2098:18 | ChiPartial | partial:m2098_13 | +| ir.cpp:2098:18:2098:18 | ChiTotal | total:m2098_4 | +| ir.cpp:2098:18:2098:18 | SideEffect | ~m2098_4 | +| ir.cpp:2100:10:2100:24 | ChiPartial | partial:m2100_3 | +| ir.cpp:2100:10:2100:24 | ChiTotal | total:m2100_2 | +| ir.cpp:2100:10:2100:24 | SideEffect | m2100_3 | +| ir.cpp:2100:32:2100:32 | Address | &:r2100_5 | +| ir.cpp:2100:32:2100:32 | Address | &:r2100_5 | +| ir.cpp:2100:32:2100:32 | Address | &:r2100_7 | +| ir.cpp:2100:32:2100:32 | Address | &:r2100_7 | +| ir.cpp:2100:32:2100:32 | Load | m2100_6 | +| ir.cpp:2100:32:2100:32 | SideEffect | m2100_8 | +| ir.cpp:2105:5:2105:18 | Address | &:r2105_5 | +| ir.cpp:2105:5:2105:18 | ChiPartial | partial:m2105_3 | +| ir.cpp:2105:5:2105:18 | ChiTotal | total:m2105_2 | +| ir.cpp:2105:5:2105:18 | Load | m2115_2 | +| ir.cpp:2105:5:2105:18 | SideEffect | ~m2114_6 | +| ir.cpp:2107:12:2107:13 | Address | &:r2107_1 | +| ir.cpp:2107:17:2107:27 | Address | &:r2107_4 | +| ir.cpp:2107:17:2107:27 | Address | &:r2107_8 | +| ir.cpp:2107:17:2107:27 | Arg(0) | 0:r2107_3 | +| ir.cpp:2107:17:2107:27 | Arg(this) | this:r2107_8 | +| ir.cpp:2107:17:2107:27 | CallTarget | func:r2107_2 | +| ir.cpp:2107:17:2107:27 | CallTarget | func:r2107_9 | +| ir.cpp:2107:17:2107:27 | ChiPartial | partial:m2107_5 | +| ir.cpp:2107:17:2107:27 | ChiPartial | partial:m2107_11 | +| ir.cpp:2107:17:2107:27 | ChiPartial | partial:m2107_13 | +| ir.cpp:2107:17:2107:27 | ChiTotal | total:m2105_4 | +| ir.cpp:2107:17:2107:27 | ChiTotal | total:m2107_6 | +| ir.cpp:2107:17:2107:27 | ChiTotal | total:m2107_7 | +| ir.cpp:2107:17:2107:27 | SideEffect | ~m2105_4 | +| ir.cpp:2107:17:2107:27 | SideEffect | ~m2107_6 | +| ir.cpp:2107:17:2107:27 | StoreValue | r2107_8 | +| ir.cpp:2107:17:2107:27 | Unary | r2107_4 | +| ir.cpp:2108:5:2108:13 | CallTarget | func:r2108_1 | +| ir.cpp:2108:5:2108:13 | ChiPartial | partial:m2108_5 | +| ir.cpp:2108:5:2108:13 | ChiTotal | total:m2107_12 | +| ir.cpp:2108:5:2108:13 | SideEffect | ~m2107_12 | +| ir.cpp:2108:12:2108:13 | Address | &:r2108_2 | +| ir.cpp:2108:12:2108:13 | Arg(0) | 0:r2108_3 | +| ir.cpp:2108:12:2108:13 | Load | m2107_15 | +| ir.cpp:2110:12:2110:13 | Address | &:r2110_1 | +| ir.cpp:2110:17:2110:30 | Address | &:r2110_4 | +| ir.cpp:2110:17:2110:30 | Address | &:r2110_8 | +| ir.cpp:2110:17:2110:30 | Arg(0) | 0:r2110_3 | +| ir.cpp:2110:17:2110:30 | Arg(this) | this:r2110_8 | +| ir.cpp:2110:17:2110:30 | CallTarget | func:r2110_2 | +| ir.cpp:2110:17:2110:30 | CallTarget | func:r2110_9 | +| ir.cpp:2110:17:2110:30 | ChiPartial | partial:m2110_5 | +| ir.cpp:2110:17:2110:30 | ChiPartial | partial:m2110_11 | +| ir.cpp:2110:17:2110:30 | ChiPartial | partial:m2110_13 | +| ir.cpp:2110:17:2110:30 | ChiTotal | total:m2108_6 | +| ir.cpp:2110:17:2110:30 | ChiTotal | total:m2110_6 | +| ir.cpp:2110:17:2110:30 | ChiTotal | total:m2110_7 | +| ir.cpp:2110:17:2110:30 | SideEffect | ~m2108_6 | +| ir.cpp:2110:17:2110:30 | SideEffect | ~m2110_6 | +| ir.cpp:2110:17:2110:30 | StoreValue | r2110_15 | +| ir.cpp:2110:17:2110:30 | Unary | r2110_4 | +| ir.cpp:2110:17:2110:30 | Unary | r2110_8 | +| ir.cpp:2111:5:2111:13 | CallTarget | func:r2111_1 | +| ir.cpp:2111:5:2111:13 | ChiPartial | partial:m2111_5 | +| ir.cpp:2111:5:2111:13 | ChiTotal | total:m2110_12 | +| ir.cpp:2111:5:2111:13 | SideEffect | ~m2110_12 | +| ir.cpp:2111:12:2111:13 | Address | &:r2111_2 | +| ir.cpp:2111:12:2111:13 | Arg(0) | 0:r2111_3 | +| ir.cpp:2111:12:2111:13 | Load | m2110_16 | +| ir.cpp:2113:15:2113:15 | Address | &:r2113_1 | +| ir.cpp:2113:19:2113:32 | Address | &:r2113_4 | +| ir.cpp:2113:19:2113:32 | Address | &:r2113_8 | +| ir.cpp:2113:19:2113:32 | Arg(0) | 0:r2113_3 | +| ir.cpp:2113:19:2113:32 | Arg(this) | this:r2113_8 | +| ir.cpp:2113:19:2113:32 | CallTarget | func:r2113_2 | +| ir.cpp:2113:19:2113:32 | CallTarget | func:r2113_9 | +| ir.cpp:2113:19:2113:32 | ChiPartial | partial:m2113_5 | +| ir.cpp:2113:19:2113:32 | ChiPartial | partial:m2113_11 | +| ir.cpp:2113:19:2113:32 | ChiPartial | partial:m2113_13 | +| ir.cpp:2113:19:2113:32 | ChiTotal | total:m2111_6 | +| ir.cpp:2113:19:2113:32 | ChiTotal | total:m2113_6 | +| ir.cpp:2113:19:2113:32 | ChiTotal | total:m2113_7 | +| ir.cpp:2113:19:2113:32 | SideEffect | ~m2111_6 | +| ir.cpp:2113:19:2113:32 | SideEffect | ~m2113_6 | +| ir.cpp:2113:19:2113:32 | StoreValue | r2113_8 | +| ir.cpp:2113:19:2113:32 | Unary | r2113_4 | +| ir.cpp:2114:5:2114:12 | CallTarget | func:r2114_1 | +| ir.cpp:2114:5:2114:12 | ChiPartial | partial:m2114_5 | +| ir.cpp:2114:5:2114:12 | ChiTotal | total:m2113_12 | +| ir.cpp:2114:5:2114:12 | SideEffect | ~m2113_12 | +| ir.cpp:2114:12:2114:12 | Address | &:r2114_2 | +| ir.cpp:2114:12:2114:12 | Arg(0) | 0:r2114_3 | +| ir.cpp:2114:12:2114:12 | Load | m2113_15 | +| ir.cpp:2115:1:2115:1 | Address | &:r2115_1 | +| ir.cpp:2119:6:2119:26 | ChiPartial | partial:m2119_3 | +| ir.cpp:2119:6:2119:26 | ChiTotal | total:m2119_2 | +| ir.cpp:2119:6:2119:26 | SideEffect | ~m2121_5 | +| ir.cpp:2120:13:2120:13 | Address | &:r2120_1 | +| ir.cpp:2120:16:2120:19 | StoreValue | r2120_2 | +| ir.cpp:2121:3:2121:27 | CallTarget | func:r2121_1 | +| ir.cpp:2121:3:2121:27 | ChiPartial | partial:m2121_4 | +| ir.cpp:2121:3:2121:27 | ChiTotal | total:m2119_4 | +| ir.cpp:2121:3:2121:27 | SideEffect | ~m2119_4 | +| ir.cpp:2121:29:2121:29 | Arg(0) | 0:r2121_2 | +| ir.cpp:2126:5:2126:11 | Address | &:r2126_6 | +| ir.cpp:2126:5:2126:11 | ChiPartial | partial:m2126_3 | +| ir.cpp:2126:5:2126:11 | ChiTotal | total:m2126_2 | +| ir.cpp:2126:5:2126:11 | Load | m2131_4 | +| ir.cpp:2126:5:2126:11 | SideEffect | ~m2130_4 | +| ir.cpp:2127:9:2127:9 | Address | &:r2127_1 | +| ir.cpp:2127:13:2127:15 | CallTarget | func:r2127_2 | +| ir.cpp:2127:13:2127:15 | ChiPartial | partial:m2127_6 | +| ir.cpp:2127:13:2127:15 | ChiTotal | total:m2126_4 | +| ir.cpp:2127:13:2127:15 | SideEffect | ~m2126_4 | +| ir.cpp:2127:13:2127:15 | StoreValue | r2127_5 | +| ir.cpp:2127:17:2127:17 | Arg(0) | 0:r2127_3 | +| ir.cpp:2127:19:2127:19 | Arg(1) | 1:r2127_4 | +| ir.cpp:2128:9:2128:9 | Address | &:r2128_1 | +| ir.cpp:2128:9:2128:9 | Left | r2128_2 | +| ir.cpp:2128:9:2128:9 | Load | m2127_8 | +| ir.cpp:2128:9:2128:14 | Condition | r2128_4 | +| ir.cpp:2128:14:2128:14 | Right | r2128_3 | +| ir.cpp:2129:9:2129:12 | CallTarget | func:r2129_1 | +| ir.cpp:2129:9:2129:12 | ChiPartial | partial:m2129_4 | +| ir.cpp:2129:9:2129:12 | ChiTotal | total:m2127_7 | +| ir.cpp:2129:9:2129:12 | SideEffect | ~m2127_7 | +| ir.cpp:2129:14:2129:14 | Arg(0) | 0:r2129_2 | +| ir.cpp:2130:5:2130:12 | CallTarget | func:r2130_1 | +| ir.cpp:2130:5:2130:12 | ChiPartial | partial:m2130_3 | +| ir.cpp:2130:5:2130:12 | ChiTotal | total:m2127_7 | +| ir.cpp:2130:5:2130:12 | SideEffect | ~m2127_7 | +| ir.cpp:2131:5:2131:13 | Address | &:r2131_1 | +| ir.cpp:2131:12:2131:12 | Address | &:r2131_2 | +| ir.cpp:2131:12:2131:12 | Load | m2127_8 | +| ir.cpp:2131:12:2131:12 | StoreValue | r2131_3 | +| ir.cpp:2134:6:2134:17 | ChiPartial | partial:m2134_3 | +| ir.cpp:2134:6:2134:17 | ChiTotal | total:m2134_2 | +| ir.cpp:2135:5:2135:12 | CallTarget | func:r2135_1 | +| ir.cpp:2135:5:2135:12 | ChiPartial | partial:m2135_3 | +| ir.cpp:2135:5:2135:12 | ChiTotal | total:m2134_4 | +| ir.cpp:2135:5:2135:12 | SideEffect | ~m2134_4 | +| ir.cpp:2136:5:2136:8 | CallTarget | func:r2136_1 | +| ir.cpp:2136:5:2136:8 | ChiPartial | partial:m2136_4 | +| ir.cpp:2136:5:2136:8 | ChiTotal | total:m2135_4 | +| ir.cpp:2136:5:2136:8 | SideEffect | ~m2135_4 | +| ir.cpp:2136:10:2136:10 | Arg(0) | 0:r2136_2 | +| ir.cpp:2139:5:2139:16 | Address | &:r2139_6 | +| ir.cpp:2139:5:2139:16 | ChiPartial | partial:m2139_3 | +| ir.cpp:2139:5:2139:16 | ChiTotal | total:m2139_2 | +| ir.cpp:2139:5:2139:16 | Load | m2144_4 | +| ir.cpp:2139:5:2139:16 | SideEffect | ~m2143_4 | +| ir.cpp:2140:9:2140:9 | Address | &:r2140_1 | +| ir.cpp:2140:13:2140:15 | CallTarget | func:r2140_2 | +| ir.cpp:2140:13:2140:15 | ChiPartial | partial:m2140_6 | +| ir.cpp:2140:13:2140:15 | ChiTotal | total:m2139_4 | +| ir.cpp:2140:13:2140:15 | SideEffect | ~m2139_4 | +| ir.cpp:2140:13:2140:15 | StoreValue | r2140_5 | +| ir.cpp:2140:17:2140:17 | Arg(0) | 0:r2140_3 | +| ir.cpp:2140:19:2140:19 | Arg(1) | 1:r2140_4 | +| ir.cpp:2141:9:2141:9 | Address | &:r2141_1 | +| ir.cpp:2141:9:2141:9 | Left | r2141_2 | +| ir.cpp:2141:9:2141:9 | Load | m2140_8 | +| ir.cpp:2141:9:2141:14 | Condition | r2141_4 | +| ir.cpp:2141:14:2141:14 | Right | r2141_3 | +| ir.cpp:2142:9:2142:20 | CallTarget | func:r2142_1 | +| ir.cpp:2143:5:2143:12 | CallTarget | func:r2143_1 | +| ir.cpp:2143:5:2143:12 | ChiPartial | partial:m2143_3 | +| ir.cpp:2143:5:2143:12 | ChiTotal | total:m2140_7 | +| ir.cpp:2143:5:2143:12 | SideEffect | ~m2140_7 | +| ir.cpp:2144:5:2144:13 | Address | &:r2144_1 | +| ir.cpp:2144:12:2144:12 | Address | &:r2144_2 | +| ir.cpp:2144:12:2144:12 | Load | m2140_8 | +| ir.cpp:2144:12:2144:12 | StoreValue | r2144_3 | +| ir.cpp:2147:6:2147:24 | ChiPartial | partial:m2147_3 | +| ir.cpp:2147:6:2147:24 | ChiTotal | total:m2147_2 | +| ir.cpp:2147:6:2147:24 | SideEffect | ~m2153_8 | +| ir.cpp:2147:33:2147:33 | Address | &:r2147_5 | +| ir.cpp:2148:3:2148:12 | Address | &:r2148_6 | +| ir.cpp:2148:3:2148:12 | Arg(0) | 0:r2148_5 | +| ir.cpp:2148:3:2148:12 | CallTarget | func:r2148_1 | +| ir.cpp:2148:3:2148:12 | ChiPartial | partial:m2148_7 | +| ir.cpp:2148:3:2148:12 | ChiTotal | total:m2147_4 | +| ir.cpp:2148:3:2148:12 | Right | r2148_4 | +| ir.cpp:2148:3:2148:12 | SideEffect | ~m2147_4 | +| ir.cpp:2148:3:2148:12 | Unary | r2148_6 | +| ir.cpp:2148:11:2148:11 | Address | &:r2148_2 | +| ir.cpp:2148:11:2148:11 | Left | r2148_3 | +| ir.cpp:2148:11:2148:11 | Load | m2147_6 | +| ir.cpp:2149:3:2149:18 | Address | &:r2149_7 | +| ir.cpp:2149:3:2149:18 | Arg(0) | 0:r2149_5 | +| ir.cpp:2149:3:2149:18 | CallTarget | func:r2149_1 | +| ir.cpp:2149:3:2149:18 | ChiPartial | partial:m2149_8 | +| ir.cpp:2149:3:2149:18 | ChiTotal | total:m2148_8 | +| ir.cpp:2149:3:2149:18 | Right | r2149_4 | +| ir.cpp:2149:3:2149:18 | SideEffect | ~m2148_8 | +| ir.cpp:2149:3:2149:18 | Unary | r2149_7 | +| ir.cpp:2149:7:2149:10 | Arg(1) | 1:r2149_6 | +| ir.cpp:2149:17:2149:17 | Address | &:r2149_2 | +| ir.cpp:2149:17:2149:17 | Left | r2149_3 | +| ir.cpp:2149:17:2149:17 | Load | m2147_6 | +| ir.cpp:2150:3:2150:15 | Address | &:r2150_6 | +| ir.cpp:2150:3:2150:15 | Arg(0) | 0:r2150_5 | +| ir.cpp:2150:3:2150:15 | CallTarget | func:r2150_1 | +| ir.cpp:2150:3:2150:15 | ChiPartial | partial:m2150_7 | +| ir.cpp:2150:3:2150:15 | ChiTotal | total:m2149_9 | +| ir.cpp:2150:3:2150:15 | Right | r2150_4 | +| ir.cpp:2150:3:2150:15 | SideEffect | ~m2149_9 | +| ir.cpp:2150:3:2150:15 | Unary | r2150_6 | +| ir.cpp:2150:14:2150:14 | Address | &:r2150_2 | +| ir.cpp:2150:14:2150:14 | Left | r2150_3 | +| ir.cpp:2150:14:2150:14 | Load | m2147_6 | +| ir.cpp:2151:3:2151:20 | Address | &:r2151_7 | +| ir.cpp:2151:3:2151:20 | Arg(0) | 0:r2151_5 | +| ir.cpp:2151:3:2151:20 | CallTarget | func:r2151_1 | +| ir.cpp:2151:3:2151:20 | ChiPartial | partial:m2151_8 | +| ir.cpp:2151:3:2151:20 | ChiTotal | total:m2150_8 | +| ir.cpp:2151:3:2151:20 | Right | r2151_4 | +| ir.cpp:2151:3:2151:20 | SideEffect | ~m2150_8 | +| ir.cpp:2151:3:2151:20 | Unary | r2151_7 | +| ir.cpp:2151:19:2151:19 | Address | &:r2151_2 | +| ir.cpp:2151:19:2151:19 | Left | r2151_3 | +| ir.cpp:2151:19:2151:19 | Load | m2147_6 | +| ir.cpp:2151:21:2151:21 | Arg(1) | 1:r2151_6 | +| ir.cpp:2152:3:2152:36 | Address | &:r2152_6 | +| ir.cpp:2152:3:2152:36 | Arg(0) | 0:r2152_5 | +| ir.cpp:2152:3:2152:36 | CallTarget | func:r2152_1 | +| ir.cpp:2152:3:2152:36 | ChiPartial | partial:m2152_7 | +| ir.cpp:2152:3:2152:36 | ChiTotal | total:m2151_9 | +| ir.cpp:2152:3:2152:36 | Right | r2152_4 | +| ir.cpp:2152:3:2152:36 | SideEffect | ~m2151_9 | +| ir.cpp:2152:3:2152:36 | Unary | r2152_6 | +| ir.cpp:2152:35:2152:35 | Address | &:r2152_2 | +| ir.cpp:2152:35:2152:35 | Left | r2152_3 | +| ir.cpp:2152:35:2152:35 | Load | m2147_6 | +| ir.cpp:2153:3:2153:24 | Address | &:r2153_6 | +| ir.cpp:2153:3:2153:24 | Arg(0) | 0:r2153_5 | +| ir.cpp:2153:3:2153:24 | CallTarget | func:r2153_1 | +| ir.cpp:2153:3:2153:24 | ChiPartial | partial:m2153_7 | +| ir.cpp:2153:3:2153:24 | ChiTotal | total:m2152_8 | +| ir.cpp:2153:3:2153:24 | Right | r2153_4 | +| ir.cpp:2153:3:2153:24 | SideEffect | ~m2152_8 | +| ir.cpp:2153:3:2153:24 | Unary | r2153_6 | +| ir.cpp:2153:11:2153:11 | Address | &:r2153_2 | +| ir.cpp:2153:11:2153:11 | Left | r2153_3 | +| ir.cpp:2153:11:2153:11 | Load | m2147_6 | +| ir.cpp:2158:7:2158:17 | Address | &:r2158_10 | +| ir.cpp:2158:7:2158:17 | ChiPartial | partial:m2158_3 | +| ir.cpp:2158:7:2158:17 | ChiTotal | total:m2158_2 | +| ir.cpp:2158:7:2158:17 | Load | m2161_4 | +| ir.cpp:2158:7:2158:17 | SideEffect | m2158_3 | +| ir.cpp:2158:25:2158:25 | Address | &:r2158_5 | +| ir.cpp:2158:25:2158:25 | Address | &:r2158_5 | +| ir.cpp:2158:25:2158:25 | Address | &:r2158_7 | +| ir.cpp:2158:25:2158:25 | Address | &:r2158_7 | +| ir.cpp:2158:25:2158:25 | Load | m2158_6 | +| ir.cpp:2158:25:2158:25 | SideEffect | m2158_8 | +| ir.cpp:2159:9:2159:11 | Address | &:r2159_1 | +| ir.cpp:2160:10:2160:10 | Address | &:r2160_1 | +| ir.cpp:2160:14:2160:19 | CallTarget | func:r2160_2 | +| ir.cpp:2160:14:2160:19 | StoreValue | r2160_8 | +| ir.cpp:2160:21:2160:21 | Address | &:r2160_3 | +| ir.cpp:2160:21:2160:21 | Address | &:r2160_5 | +| ir.cpp:2160:21:2160:21 | Arg(0) | 0:r2160_5 | +| ir.cpp:2160:21:2160:21 | Load | m2158_6 | +| ir.cpp:2160:21:2160:21 | SideEffect | ~m2158_8 | +| ir.cpp:2160:21:2160:21 | Unary | r2160_4 | +| ir.cpp:2160:24:2160:27 | Address | &:r2160_7 | +| ir.cpp:2160:24:2160:27 | Arg(1) | 1:r2160_7 | +| ir.cpp:2160:24:2160:27 | ChiPartial | partial:m2160_10 | +| ir.cpp:2160:24:2160:27 | ChiTotal | total:m2159_2 | +| ir.cpp:2160:25:2160:27 | Unary | r2160_6 | +| ir.cpp:2161:3:2161:13 | Address | &:r2161_1 | +| ir.cpp:2161:10:2161:12 | Address | &:r2161_2 | +| ir.cpp:2161:10:2161:12 | Load | m2160_11 | +| ir.cpp:2161:10:2161:12 | StoreValue | r2161_3 | +| ir.cpp:2168:6:2168:39 | ChiPartial | partial:m2168_3 | +| ir.cpp:2168:6:2168:39 | ChiTotal | total:m2168_2 | +| ir.cpp:2168:6:2168:39 | SideEffect | ~m2169_8 | +| ir.cpp:2169:6:2169:42 | Address | &:r2169_1 | +| ir.cpp:2169:6:2169:42 | Condition | r2169_12 | +| ir.cpp:2169:22:2169:22 | Address | &:r2169_4 | +| ir.cpp:2169:22:2169:22 | Address | &:r2169_4 | +| ir.cpp:2169:22:2169:22 | Arg(this) | this:r2169_4 | +| ir.cpp:2169:22:2169:22 | CallTarget | func:r2169_5 | +| ir.cpp:2169:22:2169:22 | ChiPartial | partial:m2169_7 | +| ir.cpp:2169:22:2169:22 | ChiPartial | partial:m2169_10 | +| ir.cpp:2169:22:2169:22 | ChiTotal | total:m2168_4 | +| ir.cpp:2169:22:2169:22 | ChiTotal | total:m2169_3 | +| ir.cpp:2169:22:2169:22 | SideEffect | m2169_3 | +| ir.cpp:2169:22:2169:22 | SideEffect | ~m2168_4 | +| ir.cpp:2169:22:2169:22 | Unary | r2169_6 | +| ir.cpp:2169:25:2169:42 | StoreValue | r2169_2 | +| ir.cpp:2172:7:2172:7 | Address | &:r2172_5 | +| ir.cpp:2172:7:2172:7 | Address | &:r2172_5 | +| ir.cpp:2172:7:2172:7 | Address | &:r2172_7 | +| ir.cpp:2172:7:2172:7 | Address | &:r2172_7 | +| ir.cpp:2172:7:2172:7 | Address | &:r2172_9 | +| ir.cpp:2172:7:2172:7 | Address | &:r2172_10 | +| ir.cpp:2172:7:2172:7 | Address | &:r2172_13 | +| ir.cpp:2172:7:2172:7 | ChiPartial | partial:m2172_3 | +| ir.cpp:2172:7:2172:7 | ChiPartial | partial:m2172_15 | +| ir.cpp:2172:7:2172:7 | ChiTotal | total:m2172_2 | +| ir.cpp:2172:7:2172:7 | ChiTotal | total:m2172_8 | +| ir.cpp:2172:7:2172:7 | Load | m0_2 | +| ir.cpp:2172:7:2172:7 | Load | m2172_6 | +| ir.cpp:2172:7:2172:7 | Load | ~m0_4 | +| ir.cpp:2172:7:2172:7 | SideEffect | m2172_3 | +| ir.cpp:2172:7:2172:7 | SideEffect | m2172_16 | +| ir.cpp:2172:7:2172:7 | StoreValue | r2172_14 | +| ir.cpp:2172:7:2172:7 | Unary | m2172_6 | +| ir.cpp:2172:7:2172:7 | Unary | r2172_11 | +| ir.cpp:2172:7:2172:7 | Unary | r2172_12 | +| ir.cpp:2175:5:2175:23 | Address | &:r2175_5 | +| ir.cpp:2175:5:2175:23 | Address | &:r2175_5 | +| ir.cpp:2175:5:2175:23 | Address | &:r2175_7 | +| ir.cpp:2175:5:2175:23 | Address | &:r2175_7 | +| ir.cpp:2175:5:2175:23 | ChiPartial | partial:m2175_3 | +| ir.cpp:2175:5:2175:23 | ChiTotal | total:m2175_2 | +| ir.cpp:2175:5:2175:23 | Load | m2175_6 | +| ir.cpp:2175:5:2175:23 | SideEffect | m2175_20 | +| ir.cpp:2175:5:2175:23 | SideEffect | ~m2175_13 | +| ir.cpp:2175:29:2175:29 | Address | &:r2175_16 | +| ir.cpp:2175:29:2175:29 | Address | &:r2175_18 | +| ir.cpp:2175:29:2175:29 | Load | m2175_6 | +| ir.cpp:2175:29:2175:29 | Unary | r2175_17 | +| ir.cpp:2175:29:2175:40 | ChiPartial | partial:m2175_19 | +| ir.cpp:2175:29:2175:40 | ChiTotal | total:m2175_8 | +| ir.cpp:2175:33:2175:40 | Address | &:r2175_11 | +| ir.cpp:2175:33:2175:40 | Arg(0) | 0:r2175_10 | +| ir.cpp:2175:33:2175:40 | CallTarget | func:r2175_9 | +| ir.cpp:2175:33:2175:40 | ChiPartial | partial:m2175_12 | +| ir.cpp:2175:33:2175:40 | ChiTotal | total:m2175_4 | +| ir.cpp:2175:33:2175:40 | SideEffect | ~m2175_4 | +| ir.cpp:2175:33:2175:40 | StoreValue | r2175_15 | +| ir.cpp:2175:33:2175:40 | Unary | r2175_11 | +| ir.cpp:2176:5:2176:24 | Address | &:r2176_5 | +| ir.cpp:2176:5:2176:24 | Address | &:r2176_5 | +| ir.cpp:2176:5:2176:24 | Address | &:r2176_7 | +| ir.cpp:2176:5:2176:24 | Address | &:r2176_7 | +| ir.cpp:2176:5:2176:24 | ChiPartial | partial:m2176_3 | +| ir.cpp:2176:5:2176:24 | ChiTotal | total:m2176_2 | +| ir.cpp:2176:5:2176:24 | Load | m2176_6 | +| ir.cpp:2176:5:2176:24 | SideEffect | m2176_8 | +| ir.cpp:2176:5:2176:24 | SideEffect | ~m2176_16 | +| ir.cpp:2176:30:2176:37 | CallTarget | func:r2176_9 | +| ir.cpp:2176:30:2176:37 | ChiPartial | partial:m2176_15 | +| ir.cpp:2176:30:2176:37 | ChiTotal | total:m2176_4 | +| ir.cpp:2176:30:2176:37 | SideEffect | ~m2176_4 | +| ir.cpp:2176:37:2176:37 | Address | &:r2176_10 | +| ir.cpp:2176:37:2176:37 | Address | &:r2176_12 | +| ir.cpp:2176:37:2176:37 | Arg(0) | 0:r2176_13 | +| ir.cpp:2176:37:2176:37 | Load | m2176_6 | +| ir.cpp:2176:37:2176:37 | Load | ~m2176_8 | +| ir.cpp:2176:37:2176:37 | Unary | r2176_11 | +| ir.cpp:2178:10:2178:14 | Address | &:r2178_5 | +| ir.cpp:2178:10:2178:14 | Address | &:r2178_5 | +| ir.cpp:2178:10:2178:14 | Address | &:r2178_7 | +| ir.cpp:2178:10:2178:14 | Address | &:r2178_7 | +| ir.cpp:2178:10:2178:14 | ChiPartial | partial:m2178_3 | +| ir.cpp:2178:10:2178:14 | ChiTotal | total:m2178_2 | +| ir.cpp:2178:10:2178:14 | Load | m2178_6 | +| ir.cpp:2178:10:2178:14 | SideEffect | m2178_8 | +| ir.cpp:2178:10:2178:14 | SideEffect | ~m2178_19 | +| ir.cpp:2178:21:2178:21 | Address | &:r2178_9 | +| ir.cpp:2178:26:2178:27 | Address | &:r2178_17 | +| ir.cpp:2178:26:2178:31 | ChiPartial | partial:m2178_18 | +| ir.cpp:2178:26:2178:31 | ChiTotal | total:m2178_4 | +| ir.cpp:2178:27:2178:27 | Address | &:r2178_13 | +| ir.cpp:2178:27:2178:27 | Address | &:r2178_15 | +| ir.cpp:2178:27:2178:27 | Load | m2178_6 | +| ir.cpp:2178:27:2178:27 | Load | ~m2178_8 | +| ir.cpp:2178:27:2178:27 | Unary | r2178_14 | +| ir.cpp:2178:27:2178:27 | Unary | r2178_16 | +| ir.cpp:2178:31:2178:31 | Address | &:r2178_11 | +| ir.cpp:2178:31:2178:31 | Load | m2178_10 | +| ir.cpp:2178:31:2178:31 | StoreValue | r2178_12 | +| ir.cpp:2179:10:2179:14 | Address | &:r2179_5 | +| ir.cpp:2179:10:2179:14 | Address | &:r2179_5 | +| ir.cpp:2179:10:2179:14 | Address | &:r2179_7 | +| ir.cpp:2179:10:2179:14 | Address | &:r2179_7 | +| ir.cpp:2179:10:2179:14 | Address | &:r2179_17 | +| ir.cpp:2179:10:2179:14 | ChiPartial | partial:m2179_3 | +| ir.cpp:2179:10:2179:14 | ChiTotal | total:m2179_2 | +| ir.cpp:2179:10:2179:14 | Load | m2179_6 | +| ir.cpp:2179:10:2179:14 | Load | m2179_15 | +| ir.cpp:2179:10:2179:14 | SideEffect | m2179_3 | +| ir.cpp:2179:10:2179:14 | SideEffect | m2179_8 | +| ir.cpp:2179:20:2179:29 | Address | &:r2179_9 | +| ir.cpp:2179:27:2179:28 | Load | ~m2179_4 | +| ir.cpp:2179:27:2179:28 | StoreValue | r2179_14 | +| ir.cpp:2179:28:2179:28 | Address | &:r2179_10 | +| ir.cpp:2179:28:2179:28 | Address | &:r2179_12 | +| ir.cpp:2179:28:2179:28 | Address | &:r2179_13 | +| ir.cpp:2179:28:2179:28 | Load | m2179_6 | +| ir.cpp:2179:28:2179:28 | Load | ~m2179_8 | +| ir.cpp:2179:28:2179:28 | Unary | r2179_11 | +| ir.cpp:2182:16:2182:50 | Address | &:r2182_3 | +| ir.cpp:2182:16:2182:50 | SideEffect | ~m2182_6 | +| ir.cpp:2182:54:2182:57 | ChiPartial | partial:m2182_5 | +| ir.cpp:2182:54:2182:57 | ChiTotal | total:m2182_2 | +| ir.cpp:2182:54:2182:57 | StoreValue | r2182_4 | +| ir.cpp:2184:6:2184:35 | ChiPartial | partial:m2184_3 | +| ir.cpp:2184:6:2184:35 | ChiTotal | total:m2184_2 | +| ir.cpp:2184:6:2184:35 | Phi | from 13:~m2219_5 | +| ir.cpp:2184:6:2184:35 | Phi | from 19:~m2219_13 | +| ir.cpp:2184:6:2184:35 | Phi | from 23:~m2219_22 | +| ir.cpp:2184:6:2184:35 | SideEffect | ~m2184_9 | +| ir.cpp:2184:42:2184:42 | Address | &:r2184_5 | +| ir.cpp:2184:50:2184:50 | Address | &:r2184_7 | +| ir.cpp:2185:29:2185:29 | Address | &:r2185_1 | +| ir.cpp:2185:29:2185:29 | Address | &:r2185_1 | +| ir.cpp:2185:29:2185:29 | Arg(this) | this:r2185_1 | +| ir.cpp:2185:29:2185:29 | CallTarget | func:r2185_3 | +| ir.cpp:2185:29:2185:29 | ChiPartial | partial:m2185_5 | +| ir.cpp:2185:29:2185:29 | ChiPartial | partial:m2185_7 | +| ir.cpp:2185:29:2185:29 | ChiTotal | total:m2184_4 | +| ir.cpp:2185:29:2185:29 | ChiTotal | total:m2185_2 | +| ir.cpp:2185:29:2185:29 | SideEffect | ~m2184_4 | +| ir.cpp:2185:32:2185:32 | Address | &:r2185_9 | +| ir.cpp:2185:32:2185:32 | Condition | r2185_10 | +| ir.cpp:2185:32:2185:32 | Load | m2184_6 | +| ir.cpp:2186:9:2186:9 | Address | &:r2186_1 | +| ir.cpp:2186:9:2186:9 | Address | &:r2186_1 | +| ir.cpp:2186:9:2186:9 | Arg(this) | this:r2186_1 | +| ir.cpp:2186:9:2186:9 | ChiPartial | partial:m2186_8 | +| ir.cpp:2186:9:2186:9 | ChiTotal | total:m2185_8 | +| ir.cpp:2186:9:2186:9 | SideEffect | m2185_8 | +| ir.cpp:2186:11:2186:15 | CallTarget | func:r2186_2 | +| ir.cpp:2186:11:2186:15 | ChiPartial | partial:m2186_5 | +| ir.cpp:2186:11:2186:15 | ChiTotal | total:m2185_6 | +| ir.cpp:2186:11:2186:15 | SideEffect | ~m2185_6 | +| ir.cpp:2186:17:2186:19 | Arg(0) | 0:r2186_3 | +| ir.cpp:2186:21:2186:21 | Address | &:r2186_10 | +| ir.cpp:2186:21:2186:21 | Address | &:r2186_10 | +| ir.cpp:2186:21:2186:21 | Arg(this) | this:r2186_10 | +| ir.cpp:2186:21:2186:21 | CallTarget | func:r2186_11 | +| ir.cpp:2186:21:2186:21 | ChiPartial | partial:m2186_13 | +| ir.cpp:2186:21:2186:21 | ChiPartial | partial:m2186_16 | +| ir.cpp:2186:21:2186:21 | ChiTotal | total:m2186_6 | +| ir.cpp:2186:21:2186:21 | ChiTotal | total:m2186_9 | +| ir.cpp:2186:21:2186:21 | SideEffect | m2186_9 | +| ir.cpp:2186:21:2186:21 | SideEffect | ~m2186_6 | +| ir.cpp:2188:39:2188:39 | Address | &:r2188_2 | +| ir.cpp:2188:39:2188:39 | Address | &:r2188_2 | +| ir.cpp:2188:39:2188:39 | Arg(this) | this:r2188_2 | +| ir.cpp:2188:39:2188:39 | CallTarget | func:r2188_4 | +| ir.cpp:2188:39:2188:39 | ChiPartial | partial:m2188_6 | +| ir.cpp:2188:39:2188:39 | ChiPartial | partial:m2188_8 | +| ir.cpp:2188:39:2188:39 | ChiTotal | total:m2188_1 | +| ir.cpp:2188:39:2188:39 | ChiTotal | total:m2188_3 | +| ir.cpp:2188:39:2188:39 | Phi | from 0:~m2185_6 | +| ir.cpp:2188:39:2188:39 | Phi | from 2:~m2186_14 | +| ir.cpp:2188:39:2188:39 | SideEffect | ~m2188_1 | +| ir.cpp:2188:42:2188:76 | Condition | r2188_10 | +| ir.cpp:2189:9:2189:9 | Address | &:r2189_1 | +| ir.cpp:2189:9:2189:9 | Address | &:r2189_1 | +| ir.cpp:2189:9:2189:9 | Arg(this) | this:r2189_1 | +| ir.cpp:2189:9:2189:9 | ChiPartial | partial:m2189_8 | +| ir.cpp:2189:9:2189:9 | ChiTotal | total:m2188_9 | +| ir.cpp:2189:9:2189:9 | SideEffect | m2188_9 | +| ir.cpp:2189:11:2189:15 | CallTarget | func:r2189_2 | +| ir.cpp:2189:11:2189:15 | ChiPartial | partial:m2189_5 | +| ir.cpp:2189:11:2189:15 | ChiTotal | total:m2188_7 | +| ir.cpp:2189:11:2189:15 | SideEffect | ~m2188_7 | +| ir.cpp:2189:17:2189:19 | Arg(0) | 0:r2189_3 | +| ir.cpp:2191:32:2191:32 | Address | &:r2191_1 | +| ir.cpp:2191:32:2191:32 | Address | &:r2191_1 | +| ir.cpp:2191:32:2191:32 | Arg(this) | this:r2191_1 | +| ir.cpp:2191:32:2191:32 | CallTarget | func:r2191_3 | +| ir.cpp:2191:32:2191:32 | ChiPartial | partial:m2191_5 | +| ir.cpp:2191:32:2191:32 | ChiPartial | partial:m2191_7 | +| ir.cpp:2191:32:2191:32 | ChiTotal | total:m2189_6 | +| ir.cpp:2191:32:2191:32 | ChiTotal | total:m2191_2 | +| ir.cpp:2191:32:2191:32 | SideEffect | ~m2189_6 | +| ir.cpp:2191:35:2191:35 | Address | &:r2191_9 | +| ir.cpp:2191:35:2191:35 | Condition | r2191_11 | +| ir.cpp:2191:35:2191:35 | Load | m2184_8 | +| ir.cpp:2191:35:2191:35 | Unary | r2191_10 | +| ir.cpp:2193:11:2193:11 | Address | &:r2193_1 | +| ir.cpp:2193:11:2193:11 | Address | &:r2193_1 | +| ir.cpp:2193:11:2193:11 | Arg(this) | this:r2193_1 | +| ir.cpp:2193:11:2193:11 | ChiPartial | partial:m2193_8 | +| ir.cpp:2193:11:2193:11 | ChiTotal | total:m2191_8 | +| ir.cpp:2193:11:2193:11 | SideEffect | m2191_8 | +| ir.cpp:2193:13:2193:17 | CallTarget | func:r2193_2 | +| ir.cpp:2193:13:2193:17 | ChiPartial | partial:m2193_5 | +| ir.cpp:2193:13:2193:17 | ChiTotal | total:m2191_6 | +| ir.cpp:2193:13:2193:17 | SideEffect | ~m2191_6 | +| ir.cpp:2193:19:2193:21 | Arg(0) | 0:r2193_3 | +| ir.cpp:2196:11:2196:11 | Address | &:r2196_1 | +| ir.cpp:2196:11:2196:11 | Address | &:r2196_1 | +| ir.cpp:2196:11:2196:11 | Arg(this) | this:r2196_1 | +| ir.cpp:2196:11:2196:11 | ChiPartial | partial:m2196_8 | +| ir.cpp:2196:11:2196:11 | ChiTotal | total:m2191_8 | +| ir.cpp:2196:11:2196:11 | SideEffect | m2191_8 | +| ir.cpp:2196:13:2196:17 | CallTarget | func:r2196_2 | +| ir.cpp:2196:13:2196:17 | ChiPartial | partial:m2196_5 | +| ir.cpp:2196:13:2196:17 | ChiTotal | total:m2191_6 | +| ir.cpp:2196:13:2196:17 | SideEffect | ~m2191_6 | +| ir.cpp:2196:19:2196:21 | Arg(0) | 0:r2196_3 | +| ir.cpp:2198:5:2198:5 | Phi | from 5:~m2193_6 | +| ir.cpp:2198:5:2198:5 | Phi | from 6:~m2196_6 | +| ir.cpp:2200:25:2200:25 | Address | &:r2200_1 | +| ir.cpp:2200:25:2200:25 | Address | &:r2200_1 | +| ir.cpp:2200:25:2200:25 | Arg(this) | this:r2200_1 | +| ir.cpp:2200:25:2200:25 | CallTarget | func:r2200_3 | +| ir.cpp:2200:25:2200:25 | ChiPartial | partial:m2200_5 | +| ir.cpp:2200:25:2200:25 | ChiPartial | partial:m2200_7 | +| ir.cpp:2200:25:2200:25 | ChiTotal | total:m2198_1 | +| ir.cpp:2200:25:2200:25 | ChiTotal | total:m2200_2 | +| ir.cpp:2200:25:2200:25 | SideEffect | ~m2198_1 | +| ir.cpp:2201:5:2201:5 | Address | &:r2201_14 | +| ir.cpp:2201:5:2201:5 | Address | &:r2201_18 | +| ir.cpp:2201:5:2201:5 | Address | &:r2201_24 | +| ir.cpp:2201:42:2201:43 | Address | &:r2201_1 | +| ir.cpp:2201:42:2201:43 | Address | &:r2201_1 | +| ir.cpp:2201:42:2201:43 | Arg(this) | this:r2201_1 | +| ir.cpp:2201:45:2201:45 | Address | &:r2201_4 | +| ir.cpp:2201:45:2201:45 | Address | &:r2201_4 | +| ir.cpp:2201:45:2201:45 | Address | &:r2201_5 | +| ir.cpp:2201:45:2201:45 | Arg(0) | 0:r2201_8 | +| ir.cpp:2201:45:2201:45 | Load | m2200_8 | +| ir.cpp:2201:45:2201:45 | Load | m2201_7 | +| ir.cpp:2201:45:2201:45 | StoreValue | r2201_6 | +| ir.cpp:2201:45:2201:46 | CallTarget | func:r2201_3 | +| ir.cpp:2201:45:2201:46 | ChiPartial | partial:m2201_10 | +| ir.cpp:2201:45:2201:46 | ChiPartial | partial:m2201_12 | +| ir.cpp:2201:45:2201:46 | ChiTotal | total:m2200_6 | +| ir.cpp:2201:45:2201:46 | ChiTotal | total:m2201_2 | +| ir.cpp:2201:45:2201:46 | SideEffect | ~m2200_6 | +| ir.cpp:2201:69:2201:69 | Address | &:r2201_45 | +| ir.cpp:2201:69:2201:69 | Address | &:r2201_53 | +| ir.cpp:2201:69:2201:69 | Address | &:r2201_53 | +| ir.cpp:2201:69:2201:69 | Arg(this) | this:r2201_53 | +| ir.cpp:2201:69:2201:69 | CallTarget | func:r2201_54 | +| ir.cpp:2201:69:2201:69 | ChiPartial | partial:m2201_56 | +| ir.cpp:2201:69:2201:69 | ChiPartial | partial:m2201_59 | +| ir.cpp:2201:69:2201:69 | ChiTotal | total:m2202_6 | +| ir.cpp:2201:69:2201:69 | ChiTotal | total:m2202_9 | +| ir.cpp:2201:69:2201:69 | SideEffect | m2202_9 | +| ir.cpp:2201:69:2201:69 | SideEffect | ~m2202_6 | +| ir.cpp:2201:73:2201:73 | Address | &:r2201_19 | +| ir.cpp:2201:73:2201:73 | Address | &:r2201_25 | +| ir.cpp:2201:73:2201:73 | Address | &:r2201_48 | +| ir.cpp:2201:73:2201:73 | Address | &:r2201_61 | +| ir.cpp:2201:73:2201:73 | Address | &:r2201_61 | +| ir.cpp:2201:73:2201:73 | Arg(this) | this:r0_2 | +| ir.cpp:2201:73:2201:73 | Arg(this) | this:r0_5 | +| ir.cpp:2201:73:2201:73 | Arg(this) | this:r0_7 | +| ir.cpp:2201:73:2201:73 | Arg(this) | this:r0_8 | +| ir.cpp:2201:73:2201:73 | Arg(this) | this:r0_15 | +| ir.cpp:2201:73:2201:73 | Arg(this) | this:r2201_61 | +| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_21 | +| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_27 | +| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_33 | +| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_34 | +| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_47 | +| ir.cpp:2201:73:2201:73 | CallTarget | func:r2201_62 | +| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_37 | +| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_39 | +| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_42 | +| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_49 | +| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_64 | +| ir.cpp:2201:73:2201:73 | ChiPartial | partial:m2201_67 | +| ir.cpp:2201:73:2201:73 | ChiTotal | total:m0_9 | +| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_30 | +| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_31 | +| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_38 | +| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_43 | +| ir.cpp:2201:73:2201:73 | ChiTotal | total:m2201_57 | +| ir.cpp:2201:73:2201:73 | Condition | r2201_41 | +| ir.cpp:2201:73:2201:73 | Load | m2201_17 | +| ir.cpp:2201:73:2201:73 | Load | m2201_17 | +| ir.cpp:2201:73:2201:73 | Phi | from 7:m2201_23 | +| ir.cpp:2201:73:2201:73 | Phi | from 7:~m2201_11 | +| ir.cpp:2201:73:2201:73 | Phi | from 9:m2201_68 | +| ir.cpp:2201:73:2201:73 | Phi | from 9:~m2201_65 | +| ir.cpp:2201:73:2201:73 | SideEffect | m2201_30 | +| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_31 | +| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_38 | +| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_43 | +| ir.cpp:2201:73:2201:73 | SideEffect | ~m2201_57 | +| ir.cpp:2201:73:2201:73 | StoreValue | r2201_22 | +| ir.cpp:2201:73:2201:73 | StoreValue | r2201_28 | +| ir.cpp:2201:73:2201:73 | Unary | r2201_20 | +| ir.cpp:2201:73:2201:73 | Unary | r2201_26 | +| ir.cpp:2201:73:2201:73 | Unary | r2201_32 | +| ir.cpp:2201:73:2201:73 | Unary | r2201_35 | +| ir.cpp:2201:73:2201:73 | Unary | r2201_46 | +| ir.cpp:2201:73:2201:73 | Unary | r2201_63 | +| ir.cpp:2201:73:2201:74 | StoreValue | r2201_16 | +| ir.cpp:2201:73:2201:74 | Unary | r2201_15 | +| ir.cpp:2201:73:2201:75 | Load | ~m2201_50 | +| ir.cpp:2201:73:2201:75 | StoreValue | r2201_51 | +| ir.cpp:2202:7:2202:7 | Address | &:r2202_1 | +| ir.cpp:2202:7:2202:7 | Address | &:r2202_1 | +| ir.cpp:2202:7:2202:7 | Arg(this) | this:r2202_1 | +| ir.cpp:2202:7:2202:7 | ChiPartial | partial:m2202_8 | +| ir.cpp:2202:7:2202:7 | ChiTotal | total:m2201_52 | +| ir.cpp:2202:7:2202:7 | SideEffect | m2201_52 | +| ir.cpp:2202:9:2202:13 | CallTarget | func:r2202_2 | +| ir.cpp:2202:9:2202:13 | ChiPartial | partial:m2202_5 | +| ir.cpp:2202:9:2202:13 | ChiTotal | total:m2201_50 | +| ir.cpp:2202:9:2202:13 | SideEffect | ~m2201_50 | +| ir.cpp:2202:15:2202:17 | Arg(0) | 0:r2202_3 | +| ir.cpp:2204:5:2204:5 | Address | &:r2204_14 | +| ir.cpp:2204:5:2204:5 | Address | &:r2204_18 | +| ir.cpp:2204:5:2204:5 | Address | &:r2204_24 | +| ir.cpp:2204:42:2204:43 | Address | &:r2204_1 | +| ir.cpp:2204:42:2204:43 | Address | &:r2204_1 | +| ir.cpp:2204:42:2204:43 | Address | &:r2204_61 | +| ir.cpp:2204:42:2204:43 | Address | &:r2204_61 | +| ir.cpp:2204:42:2204:43 | Arg(this) | this:r2204_1 | +| ir.cpp:2204:42:2204:43 | Arg(this) | this:r2204_61 | +| ir.cpp:2204:42:2204:43 | CallTarget | func:r2204_62 | +| ir.cpp:2204:42:2204:43 | ChiPartial | partial:m2204_64 | +| ir.cpp:2204:42:2204:43 | ChiPartial | partial:m2204_67 | +| ir.cpp:2204:42:2204:43 | ChiTotal | total:m2204_13 | +| ir.cpp:2204:42:2204:43 | ChiTotal | total:m2204_57 | +| ir.cpp:2204:42:2204:43 | SideEffect | m2204_13 | +| ir.cpp:2204:42:2204:43 | SideEffect | ~m2204_57 | +| ir.cpp:2204:45:2204:45 | Address | &:r2204_4 | +| ir.cpp:2204:45:2204:45 | Address | &:r2204_4 | +| ir.cpp:2204:45:2204:45 | Address | &:r2204_5 | +| ir.cpp:2204:45:2204:45 | Arg(0) | 0:r2204_8 | +| ir.cpp:2204:45:2204:45 | Load | m2200_8 | +| ir.cpp:2204:45:2204:45 | Load | m2204_7 | +| ir.cpp:2204:45:2204:45 | StoreValue | r2204_6 | +| ir.cpp:2204:45:2204:46 | CallTarget | func:r2204_3 | +| ir.cpp:2204:45:2204:46 | ChiPartial | partial:m2204_10 | +| ir.cpp:2204:45:2204:46 | ChiPartial | partial:m2204_12 | +| ir.cpp:2204:45:2204:46 | ChiTotal | total:m2201_43 | +| ir.cpp:2204:45:2204:46 | ChiTotal | total:m2204_2 | +| ir.cpp:2204:45:2204:46 | SideEffect | ~m2201_43 | +| ir.cpp:2204:69:2204:69 | Address | &:r2204_45 | +| ir.cpp:2204:69:2204:69 | Address | &:r2204_53 | +| ir.cpp:2204:69:2204:69 | Address | &:r2204_53 | +| ir.cpp:2204:69:2204:69 | Address | &:r2204_69 | +| ir.cpp:2204:69:2204:69 | Address | &:r2204_69 | +| ir.cpp:2204:69:2204:69 | Arg(this) | this:r2204_53 | +| ir.cpp:2204:69:2204:69 | Arg(this) | this:r2204_69 | +| ir.cpp:2204:69:2204:69 | CallTarget | func:r2204_54 | +| ir.cpp:2204:69:2204:69 | CallTarget | func:r2204_70 | +| ir.cpp:2204:69:2204:69 | ChiPartial | partial:m2204_56 | +| ir.cpp:2204:69:2204:69 | ChiPartial | partial:m2204_59 | +| ir.cpp:2204:69:2204:69 | ChiPartial | partial:m2204_72 | +| ir.cpp:2204:69:2204:69 | ChiPartial | partial:m2204_75 | +| ir.cpp:2204:69:2204:69 | ChiTotal | total:m2206_5 | +| ir.cpp:2204:69:2204:69 | ChiTotal | total:m2206_5 | +| ir.cpp:2204:69:2204:69 | ChiTotal | total:m2206_8 | +| ir.cpp:2204:69:2204:69 | ChiTotal | total:m2206_8 | +| ir.cpp:2204:69:2204:69 | SideEffect | m2206_8 | +| ir.cpp:2204:69:2204:69 | SideEffect | m2206_8 | +| ir.cpp:2204:69:2204:69 | SideEffect | ~m2206_5 | +| ir.cpp:2204:69:2204:69 | SideEffect | ~m2206_5 | +| ir.cpp:2204:73:2204:73 | Address | &:r2204_19 | +| ir.cpp:2204:73:2204:73 | Address | &:r2204_25 | +| ir.cpp:2204:73:2204:73 | Address | &:r2204_48 | +| ir.cpp:2204:73:2204:73 | Address | &:r2204_77 | +| ir.cpp:2204:73:2204:73 | Address | &:r2204_77 | +| ir.cpp:2204:73:2204:73 | Arg(this) | this:r0_18 | +| ir.cpp:2204:73:2204:73 | Arg(this) | this:r0_21 | +| ir.cpp:2204:73:2204:73 | Arg(this) | this:r0_23 | +| ir.cpp:2204:73:2204:73 | Arg(this) | this:r0_24 | +| ir.cpp:2204:73:2204:73 | Arg(this) | this:r0_31 | +| ir.cpp:2204:73:2204:73 | Arg(this) | this:r2204_77 | +| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_21 | +| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_27 | +| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_33 | +| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_34 | +| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_47 | +| ir.cpp:2204:73:2204:73 | CallTarget | func:r2204_78 | +| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_37 | +| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_39 | +| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_42 | +| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_49 | +| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_80 | +| ir.cpp:2204:73:2204:73 | ChiPartial | partial:m2204_83 | +| ir.cpp:2204:73:2204:73 | ChiTotal | total:m0_25 | +| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_30 | +| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_31 | +| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_38 | +| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_43 | +| ir.cpp:2204:73:2204:73 | ChiTotal | total:m2204_73 | +| ir.cpp:2204:73:2204:73 | Condition | r2204_41 | +| ir.cpp:2204:73:2204:73 | Load | m2204_17 | +| ir.cpp:2204:73:2204:73 | Load | m2204_17 | +| ir.cpp:2204:73:2204:73 | Phi | from 10:m2204_23 | +| ir.cpp:2204:73:2204:73 | Phi | from 10:~m2204_11 | +| ir.cpp:2204:73:2204:73 | Phi | from 14:m2204_84 | +| ir.cpp:2204:73:2204:73 | Phi | from 14:~m2204_81 | +| ir.cpp:2204:73:2204:73 | SideEffect | m2204_30 | +| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_31 | +| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_38 | +| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_43 | +| ir.cpp:2204:73:2204:73 | SideEffect | ~m2204_73 | +| ir.cpp:2204:73:2204:73 | StoreValue | r2204_22 | +| ir.cpp:2204:73:2204:73 | StoreValue | r2204_28 | +| ir.cpp:2204:73:2204:73 | Unary | r2204_20 | +| ir.cpp:2204:73:2204:73 | Unary | r2204_26 | +| ir.cpp:2204:73:2204:73 | Unary | r2204_32 | +| ir.cpp:2204:73:2204:73 | Unary | r2204_35 | +| ir.cpp:2204:73:2204:73 | Unary | r2204_46 | +| ir.cpp:2204:73:2204:73 | Unary | r2204_79 | +| ir.cpp:2204:73:2204:74 | StoreValue | r2204_16 | +| ir.cpp:2204:73:2204:74 | Unary | r2204_15 | +| ir.cpp:2204:73:2204:75 | Load | ~m2204_50 | +| ir.cpp:2204:73:2204:75 | StoreValue | r2204_51 | +| ir.cpp:2205:7:2205:7 | Address | &:r2205_1 | +| ir.cpp:2205:7:2205:7 | Address | &:r2205_1 | +| ir.cpp:2205:7:2205:7 | Arg(this) | this:r2205_1 | +| ir.cpp:2205:7:2205:7 | ChiPartial | partial:m2205_8 | +| ir.cpp:2205:7:2205:7 | ChiTotal | total:m2204_52 | +| ir.cpp:2205:7:2205:7 | SideEffect | m2204_52 | +| ir.cpp:2205:9:2205:13 | CallTarget | func:r2205_2 | +| ir.cpp:2205:9:2205:13 | ChiPartial | partial:m2205_5 | +| ir.cpp:2205:9:2205:13 | ChiTotal | total:m2204_50 | +| ir.cpp:2205:9:2205:13 | SideEffect | ~m2204_50 | +| ir.cpp:2205:15:2205:17 | Arg(0) | 0:r2205_3 | +| ir.cpp:2206:11:2206:11 | Address | &:r2206_1 | +| ir.cpp:2206:11:2206:11 | Address | &:r2206_1 | +| ir.cpp:2206:11:2206:11 | Arg(this) | this:r2206_1 | +| ir.cpp:2206:11:2206:11 | ChiPartial | partial:m2206_7 | +| ir.cpp:2206:11:2206:11 | ChiTotal | total:m2205_9 | +| ir.cpp:2206:11:2206:11 | SideEffect | m2205_9 | +| ir.cpp:2206:11:2206:19 | Left | r2206_9 | +| ir.cpp:2206:11:2206:26 | Condition | r2206_11 | +| ir.cpp:2206:13:2206:17 | CallTarget | func:r2206_2 | +| ir.cpp:2206:13:2206:17 | ChiPartial | partial:m2206_4 | +| ir.cpp:2206:13:2206:17 | ChiTotal | total:m2205_6 | +| ir.cpp:2206:13:2206:17 | SideEffect | ~m2205_6 | +| ir.cpp:2206:13:2206:17 | Unary | r2206_3 | +| ir.cpp:2206:24:2206:26 | Right | r2206_10 | +| ir.cpp:2210:5:2210:5 | Address | &:r2210_10 | +| ir.cpp:2210:5:2210:5 | Address | &:r2210_14 | +| ir.cpp:2210:5:2210:5 | Address | &:r2210_20 | +| ir.cpp:2210:26:2210:27 | Address | &:r2210_1 | +| ir.cpp:2210:26:2210:27 | Address | &:r2210_1 | +| ir.cpp:2210:26:2210:27 | Address | &:r2210_58 | +| ir.cpp:2210:26:2210:27 | Address | &:r2210_58 | +| ir.cpp:2210:26:2210:27 | Arg(this) | this:r2210_1 | +| ir.cpp:2210:26:2210:27 | Arg(this) | this:r2210_58 | +| ir.cpp:2210:26:2210:27 | CallTarget | func:r2210_59 | +| ir.cpp:2210:26:2210:27 | ChiPartial | partial:m2210_61 | +| ir.cpp:2210:26:2210:27 | ChiPartial | partial:m2210_64 | +| ir.cpp:2210:26:2210:27 | ChiTotal | total:m2210_9 | +| ir.cpp:2210:26:2210:27 | ChiTotal | total:m2210_55 | +| ir.cpp:2210:26:2210:27 | SideEffect | m2210_9 | +| ir.cpp:2210:26:2210:27 | SideEffect | ~m2210_55 | +| ir.cpp:2210:29:2210:29 | Arg(0) | 0:r2210_4 | +| ir.cpp:2210:29:2210:30 | CallTarget | func:r2210_3 | +| ir.cpp:2210:29:2210:30 | ChiPartial | partial:m2210_6 | +| ir.cpp:2210:29:2210:30 | ChiPartial | partial:m2210_8 | +| ir.cpp:2210:29:2210:30 | ChiTotal | total:m2204_43 | +| ir.cpp:2210:29:2210:30 | ChiTotal | total:m2210_2 | +| ir.cpp:2210:29:2210:30 | SideEffect | ~m2204_43 | +| ir.cpp:2210:37:2210:37 | Address | &:r2210_50 | +| ir.cpp:2210:41:2210:41 | Address | &:r2210_15 | +| ir.cpp:2210:41:2210:41 | Address | &:r2210_21 | +| ir.cpp:2210:41:2210:41 | Address | &:r2210_41 | +| ir.cpp:2210:41:2210:41 | Address | &:r2210_41 | +| ir.cpp:2210:41:2210:41 | Address | &:r2210_53 | +| ir.cpp:2210:41:2210:41 | Arg(this) | this:r0_34 | +| ir.cpp:2210:41:2210:41 | Arg(this) | this:r0_37 | +| ir.cpp:2210:41:2210:41 | Arg(this) | this:r0_39 | +| ir.cpp:2210:41:2210:41 | Arg(this) | this:r0_40 | +| ir.cpp:2210:41:2210:41 | Arg(this) | this:r0_47 | +| ir.cpp:2210:41:2210:41 | Arg(this) | this:r2210_41 | +| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_17 | +| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_23 | +| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_29 | +| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_30 | +| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_42 | +| ir.cpp:2210:41:2210:41 | CallTarget | func:r2210_52 | +| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_33 | +| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_35 | +| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_38 | +| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_44 | +| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_47 | +| ir.cpp:2210:41:2210:41 | ChiPartial | partial:m2210_54 | +| ir.cpp:2210:41:2210:41 | ChiTotal | total:m0_41 | +| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_26 | +| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_27 | +| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_34 | +| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_39 | +| ir.cpp:2210:41:2210:41 | ChiTotal | total:m2210_55 | +| ir.cpp:2210:41:2210:41 | Condition | r2210_37 | +| ir.cpp:2210:41:2210:41 | Load | m2210_13 | +| ir.cpp:2210:41:2210:41 | Load | m2210_13 | +| ir.cpp:2210:41:2210:41 | Phi | from 15:m2210_19 | +| ir.cpp:2210:41:2210:41 | Phi | from 15:~m2210_7 | +| ir.cpp:2210:41:2210:41 | Phi | from 17:m2210_48 | +| ir.cpp:2210:41:2210:41 | Phi | from 17:~m2210_45 | +| ir.cpp:2210:41:2210:41 | SideEffect | m2210_26 | +| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_27 | +| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_34 | +| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_39 | +| ir.cpp:2210:41:2210:41 | SideEffect | ~m2210_55 | +| ir.cpp:2210:41:2210:41 | StoreValue | r2210_18 | +| ir.cpp:2210:41:2210:41 | StoreValue | r2210_24 | +| ir.cpp:2210:41:2210:41 | Unary | r2210_16 | +| ir.cpp:2210:41:2210:41 | Unary | r2210_22 | +| ir.cpp:2210:41:2210:41 | Unary | r2210_28 | +| ir.cpp:2210:41:2210:41 | Unary | r2210_31 | +| ir.cpp:2210:41:2210:41 | Unary | r2210_43 | +| ir.cpp:2210:41:2210:41 | Unary | r2210_51 | +| ir.cpp:2210:41:2210:42 | StoreValue | r2210_12 | +| ir.cpp:2210:41:2210:42 | Unary | r2210_11 | +| ir.cpp:2210:41:2210:43 | Load | ~m2210_55 | +| ir.cpp:2210:41:2210:43 | StoreValue | r2210_56 | +| ir.cpp:2211:11:2211:11 | Address | &:r2211_1 | +| ir.cpp:2211:11:2211:11 | Left | r2211_2 | +| ir.cpp:2211:11:2211:11 | Load | m2210_57 | +| ir.cpp:2211:11:2211:16 | Condition | r2211_4 | +| ir.cpp:2211:16:2211:16 | Right | r2211_3 | +| ir.cpp:2215:5:2215:5 | Address | &:r2215_14 | +| ir.cpp:2215:5:2215:5 | Address | &:r2215_18 | +| ir.cpp:2215:5:2215:5 | Address | &:r2215_24 | +| ir.cpp:2215:42:2215:43 | Address | &:r2215_1 | +| ir.cpp:2215:42:2215:43 | Address | &:r2215_1 | +| ir.cpp:2215:42:2215:43 | Arg(this) | this:r2215_1 | +| ir.cpp:2215:45:2215:45 | Address | &:r2215_4 | +| ir.cpp:2215:45:2215:45 | Address | &:r2215_4 | +| ir.cpp:2215:45:2215:45 | Address | &:r2215_5 | +| ir.cpp:2215:45:2215:45 | Arg(0) | 0:r2215_8 | +| ir.cpp:2215:45:2215:45 | Load | m2200_8 | +| ir.cpp:2215:45:2215:45 | Load | m2215_7 | +| ir.cpp:2215:45:2215:45 | StoreValue | r2215_6 | +| ir.cpp:2215:45:2215:46 | CallTarget | func:r2215_3 | +| ir.cpp:2215:45:2215:46 | ChiPartial | partial:m2215_10 | +| ir.cpp:2215:45:2215:46 | ChiPartial | partial:m2215_12 | +| ir.cpp:2215:45:2215:46 | ChiTotal | total:m2210_39 | +| ir.cpp:2215:45:2215:46 | ChiTotal | total:m2215_2 | +| ir.cpp:2215:45:2215:46 | SideEffect | ~m2210_39 | +| ir.cpp:2215:69:2215:69 | Address | &:r2215_45 | +| ir.cpp:2215:69:2215:69 | Address | &:r2215_53 | +| ir.cpp:2215:69:2215:69 | Address | &:r2215_53 | +| ir.cpp:2215:69:2215:69 | Arg(this) | this:r2215_53 | +| ir.cpp:2215:69:2215:69 | CallTarget | func:r2215_54 | +| ir.cpp:2215:69:2215:69 | ChiPartial | partial:m2215_56 | +| ir.cpp:2215:69:2215:69 | ChiPartial | partial:m2215_59 | +| ir.cpp:2215:69:2215:69 | ChiTotal | total:m2215_52 | +| ir.cpp:2215:69:2215:69 | ChiTotal | total:m2218_13 | +| ir.cpp:2215:69:2215:69 | SideEffect | m2215_52 | +| ir.cpp:2215:69:2215:69 | SideEffect | ~m2218_13 | +| ir.cpp:2215:73:2215:73 | Address | &:r2215_19 | +| ir.cpp:2215:73:2215:73 | Address | &:r2215_25 | +| ir.cpp:2215:73:2215:73 | Address | &:r2215_48 | +| ir.cpp:2215:73:2215:73 | Address | &:r2215_61 | +| ir.cpp:2215:73:2215:73 | Address | &:r2215_61 | +| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_50 | +| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_53 | +| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_55 | +| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_56 | +| ir.cpp:2215:73:2215:73 | Arg(this) | this:r0_63 | +| ir.cpp:2215:73:2215:73 | Arg(this) | this:r2215_61 | +| ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_21 | +| ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_27 | +| ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_33 | +| ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_34 | +| ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_47 | +| ir.cpp:2215:73:2215:73 | CallTarget | func:r2215_62 | +| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_37 | +| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_39 | +| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_42 | +| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_49 | +| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_64 | +| ir.cpp:2215:73:2215:73 | ChiPartial | partial:m2215_67 | +| ir.cpp:2215:73:2215:73 | ChiTotal | total:m0_57 | +| ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_30 | +| ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_31 | +| ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_38 | +| ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_43 | +| ir.cpp:2215:73:2215:73 | ChiTotal | total:m2215_57 | +| ir.cpp:2215:73:2215:73 | Condition | r2215_41 | +| ir.cpp:2215:73:2215:73 | Load | m2215_17 | +| ir.cpp:2215:73:2215:73 | Load | m2215_17 | +| ir.cpp:2215:73:2215:73 | Phi | from 20:m2215_23 | +| ir.cpp:2215:73:2215:73 | Phi | from 20:~m2215_11 | +| ir.cpp:2215:73:2215:73 | Phi | from 22:m2215_68 | +| ir.cpp:2215:73:2215:73 | Phi | from 22:~m2215_65 | +| ir.cpp:2215:73:2215:73 | SideEffect | m2215_30 | +| ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_31 | +| ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_38 | +| ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_43 | +| ir.cpp:2215:73:2215:73 | SideEffect | ~m2215_57 | +| ir.cpp:2215:73:2215:73 | StoreValue | r2215_22 | +| ir.cpp:2215:73:2215:73 | StoreValue | r2215_28 | +| ir.cpp:2215:73:2215:73 | Unary | r2215_20 | +| ir.cpp:2215:73:2215:73 | Unary | r2215_26 | +| ir.cpp:2215:73:2215:73 | Unary | r2215_32 | +| ir.cpp:2215:73:2215:73 | Unary | r2215_35 | +| ir.cpp:2215:73:2215:73 | Unary | r2215_46 | +| ir.cpp:2215:73:2215:73 | Unary | r2215_63 | +| ir.cpp:2215:73:2215:74 | StoreValue | r2215_16 | +| ir.cpp:2215:73:2215:74 | Unary | r2215_15 | +| ir.cpp:2215:73:2215:75 | Load | ~m2215_50 | +| ir.cpp:2215:73:2215:75 | StoreValue | r2215_51 | +| ir.cpp:2216:27:2216:28 | Address | &:r2216_1 | +| ir.cpp:2216:27:2216:28 | Address | &:r2216_1 | +| ir.cpp:2216:27:2216:28 | Arg(this) | this:r2216_1 | +| ir.cpp:2216:27:2216:28 | CallTarget | func:r2216_3 | +| ir.cpp:2216:27:2216:28 | ChiPartial | partial:m2216_5 | +| ir.cpp:2216:27:2216:28 | ChiPartial | partial:m2216_7 | +| ir.cpp:2216:27:2216:28 | ChiTotal | total:m2215_50 | +| ir.cpp:2216:27:2216:28 | ChiTotal | total:m2216_2 | +| ir.cpp:2216:27:2216:28 | SideEffect | ~m2215_50 | +| ir.cpp:2217:27:2217:28 | Address | &:r2217_1 | +| ir.cpp:2217:27:2217:28 | Address | &:r2217_1 | +| ir.cpp:2217:27:2217:28 | Arg(this) | this:r2217_1 | +| ir.cpp:2217:27:2217:28 | CallTarget | func:r2217_3 | +| ir.cpp:2217:27:2217:28 | ChiPartial | partial:m2217_5 | +| ir.cpp:2217:27:2217:28 | ChiPartial | partial:m2217_7 | +| ir.cpp:2217:27:2217:28 | ChiTotal | total:m2216_6 | +| ir.cpp:2217:27:2217:28 | ChiTotal | total:m2217_2 | +| ir.cpp:2217:27:2217:28 | SideEffect | ~m2216_6 | +| ir.cpp:2218:5:2218:5 | Address | &:r2218_1 | +| ir.cpp:2218:5:2218:5 | Address | &:r2218_1 | +| ir.cpp:2218:5:2218:5 | Address | &:r2218_9 | +| ir.cpp:2218:5:2218:5 | Address | &:r2218_9 | +| ir.cpp:2218:5:2218:5 | Arg(this) | this:r2218_1 | +| ir.cpp:2218:5:2218:5 | Arg(this) | this:r2218_9 | +| ir.cpp:2218:5:2218:5 | CallTarget | func:r2218_2 | +| ir.cpp:2218:5:2218:5 | CallTarget | func:r2218_10 | +| ir.cpp:2218:5:2218:5 | ChiPartial | partial:m2218_4 | +| ir.cpp:2218:5:2218:5 | ChiPartial | partial:m2218_7 | +| ir.cpp:2218:5:2218:5 | ChiPartial | partial:m2218_12 | +| ir.cpp:2218:5:2218:5 | ChiPartial | partial:m2218_15 | +| ir.cpp:2218:5:2218:5 | ChiTotal | total:m2216_8 | +| ir.cpp:2218:5:2218:5 | ChiTotal | total:m2217_6 | +| ir.cpp:2218:5:2218:5 | ChiTotal | total:m2217_8 | +| ir.cpp:2218:5:2218:5 | ChiTotal | total:m2218_5 | +| ir.cpp:2218:5:2218:5 | SideEffect | m2216_8 | +| ir.cpp:2218:5:2218:5 | SideEffect | m2217_8 | +| ir.cpp:2218:5:2218:5 | SideEffect | ~m2217_6 | +| ir.cpp:2218:5:2218:5 | SideEffect | ~m2218_5 | +| ir.cpp:2219:1:2219:1 | Address | &:r2219_1 | +| ir.cpp:2219:1:2219:1 | Address | &:r2219_1 | +| ir.cpp:2219:1:2219:1 | Address | &:r2219_9 | +| ir.cpp:2219:1:2219:1 | Address | &:r2219_9 | +| ir.cpp:2219:1:2219:1 | Address | &:r2219_18 | +| ir.cpp:2219:1:2219:1 | Address | &:r2219_18 | +| ir.cpp:2219:1:2219:1 | Arg(this) | this:r2219_1 | +| ir.cpp:2219:1:2219:1 | Arg(this) | this:r2219_9 | +| ir.cpp:2219:1:2219:1 | Arg(this) | this:r2219_18 | +| ir.cpp:2219:1:2219:1 | CallTarget | func:r2219_2 | +| ir.cpp:2219:1:2219:1 | CallTarget | func:r2219_10 | +| ir.cpp:2219:1:2219:1 | CallTarget | func:r2219_19 | +| ir.cpp:2219:1:2219:1 | ChiPartial | partial:m2219_4 | +| ir.cpp:2219:1:2219:1 | ChiPartial | partial:m2219_7 | +| ir.cpp:2219:1:2219:1 | ChiPartial | partial:m2219_12 | +| ir.cpp:2219:1:2219:1 | ChiPartial | partial:m2219_15 | +| ir.cpp:2219:1:2219:1 | ChiPartial | partial:m2219_21 | +| ir.cpp:2219:1:2219:1 | ChiPartial | partial:m2219_24 | +| ir.cpp:2219:1:2219:1 | ChiTotal | total:m2200_8 | +| ir.cpp:2219:1:2219:1 | ChiTotal | total:m2200_8 | +| ir.cpp:2219:1:2219:1 | ChiTotal | total:m2200_8 | +| ir.cpp:2219:1:2219:1 | ChiTotal | total:m2204_65 | +| ir.cpp:2219:1:2219:1 | ChiTotal | total:m2210_62 | +| ir.cpp:2219:1:2219:1 | ChiTotal | total:m2215_43 | +| ir.cpp:2219:1:2219:1 | SideEffect | m2200_8 | +| ir.cpp:2219:1:2219:1 | SideEffect | m2200_8 | +| ir.cpp:2219:1:2219:1 | SideEffect | m2200_8 | +| ir.cpp:2219:1:2219:1 | SideEffect | ~m2204_65 | +| ir.cpp:2219:1:2219:1 | SideEffect | ~m2210_62 | +| ir.cpp:2219:1:2219:1 | SideEffect | ~m2215_43 | +| ir.cpp:2221:6:2221:38 | ChiPartial | partial:m2221_3 | +| ir.cpp:2221:6:2221:38 | ChiTotal | total:m2221_2 | +| ir.cpp:2221:6:2221:38 | SideEffect | ~m2224_7 | +| ir.cpp:2222:25:2222:25 | Address | &:r2222_1 | +| ir.cpp:2222:25:2222:25 | Address | &:r2222_1 | +| ir.cpp:2222:25:2222:25 | Arg(this) | this:r2222_1 | +| ir.cpp:2222:25:2222:25 | CallTarget | func:r2222_3 | +| ir.cpp:2222:25:2222:25 | ChiPartial | partial:m2222_5 | +| ir.cpp:2222:25:2222:25 | ChiPartial | partial:m2222_7 | +| ir.cpp:2222:25:2222:25 | ChiTotal | total:m2221_4 | +| ir.cpp:2222:25:2222:25 | ChiTotal | total:m2222_2 | +| ir.cpp:2222:25:2222:25 | SideEffect | ~m2221_4 | +| ir.cpp:2223:32:2223:32 | Address | &:r2223_1 | +| ir.cpp:2223:32:2223:32 | Address | &:r2223_1 | +| ir.cpp:2223:32:2223:32 | Address | &:r2223_4 | +| ir.cpp:2223:32:2223:32 | Arg(this) | this:r2223_4 | +| ir.cpp:2223:32:2223:32 | ChiPartial | partial:m2223_6 | +| ir.cpp:2223:32:2223:32 | ChiTotal | total:m0_6 | +| ir.cpp:2223:32:2223:32 | Condition | r2223_2 | +| ir.cpp:2223:32:2223:32 | Load | ~m2222_6 | +| ir.cpp:2223:32:2223:32 | StoreValue | r2223_5 | +| ir.cpp:2224:1:2224:1 | Address | &:r2224_3 | +| ir.cpp:2224:1:2224:1 | Address | &:r2224_3 | +| ir.cpp:2224:1:2224:1 | Arg(this) | this:r2224_3 | +| ir.cpp:2224:1:2224:1 | CallTarget | func:r2224_4 | +| ir.cpp:2224:1:2224:1 | ChiPartial | partial:m2224_6 | +| ir.cpp:2224:1:2224:1 | ChiPartial | partial:m2224_9 | +| ir.cpp:2224:1:2224:1 | ChiTotal | total:m2222_8 | +| ir.cpp:2224:1:2224:1 | ChiTotal | total:m2224_1 | +| ir.cpp:2224:1:2224:1 | Phi | from 0:~m2222_6 | +| ir.cpp:2224:1:2224:1 | Phi | from 1:~m2223_7 | +| ir.cpp:2224:1:2224:1 | SideEffect | m2222_8 | +| ir.cpp:2224:1:2224:1 | SideEffect | ~m2224_1 | +| ir.cpp:2226:6:2226:38 | ChiPartial | partial:m2226_3 | +| ir.cpp:2226:6:2226:38 | ChiTotal | total:m2226_2 | +| ir.cpp:2226:6:2226:38 | SideEffect | ~m2229_6 | +| ir.cpp:2227:32:2227:32 | Address | &:r2227_1 | +| ir.cpp:2227:32:2227:32 | Address | &:r2227_1 | +| ir.cpp:2227:32:2227:32 | Address | &:r2227_4 | +| ir.cpp:2227:32:2227:32 | Arg(this) | this:r2227_4 | +| ir.cpp:2227:32:2227:32 | ChiPartial | partial:m2227_6 | +| ir.cpp:2227:32:2227:32 | ChiTotal | total:m0_6 | +| ir.cpp:2227:32:2227:32 | Condition | r2227_2 | +| ir.cpp:2227:32:2227:32 | Load | ~m2226_3 | +| ir.cpp:2227:32:2227:32 | StoreValue | r2227_5 | +| ir.cpp:2228:25:2228:25 | Address | &:r2228_2 | +| ir.cpp:2228:25:2228:25 | Address | &:r2228_2 | +| ir.cpp:2228:25:2228:25 | Arg(this) | this:r2228_2 | +| ir.cpp:2228:25:2228:25 | CallTarget | func:r2228_4 | +| ir.cpp:2228:25:2228:25 | ChiPartial | partial:m2228_6 | +| ir.cpp:2228:25:2228:25 | ChiPartial | partial:m2228_8 | +| ir.cpp:2228:25:2228:25 | ChiTotal | total:m2228_1 | +| ir.cpp:2228:25:2228:25 | ChiTotal | total:m2228_3 | +| ir.cpp:2228:25:2228:25 | Phi | from 0:~m2226_4 | +| ir.cpp:2228:25:2228:25 | Phi | from 1:~m2227_7 | +| ir.cpp:2228:25:2228:25 | SideEffect | ~m2228_1 | +| ir.cpp:2229:1:2229:1 | Address | &:r2229_2 | +| ir.cpp:2229:1:2229:1 | Address | &:r2229_2 | +| ir.cpp:2229:1:2229:1 | Arg(this) | this:r2229_2 | +| ir.cpp:2229:1:2229:1 | CallTarget | func:r2229_3 | +| ir.cpp:2229:1:2229:1 | ChiPartial | partial:m2229_5 | +| ir.cpp:2229:1:2229:1 | ChiPartial | partial:m2229_8 | +| ir.cpp:2229:1:2229:1 | ChiTotal | total:m2228_7 | +| ir.cpp:2229:1:2229:1 | ChiTotal | total:m2228_9 | +| ir.cpp:2229:1:2229:1 | SideEffect | m2228_9 | +| ir.cpp:2229:1:2229:1 | SideEffect | ~m2228_7 | +| ir.cpp:2231:6:2231:38 | ChiPartial | partial:m2231_3 | +| ir.cpp:2231:6:2231:38 | ChiTotal | total:m2231_2 | +| ir.cpp:2231:6:2231:38 | SideEffect | ~m2235_15 | +| ir.cpp:2232:25:2232:25 | Address | &:r2232_1 | +| ir.cpp:2232:25:2232:25 | Address | &:r2232_1 | +| ir.cpp:2232:25:2232:25 | Arg(this) | this:r2232_1 | +| ir.cpp:2232:25:2232:25 | CallTarget | func:r2232_3 | +| ir.cpp:2232:25:2232:25 | ChiPartial | partial:m2232_5 | +| ir.cpp:2232:25:2232:25 | ChiPartial | partial:m2232_7 | +| ir.cpp:2232:25:2232:25 | ChiTotal | total:m2231_4 | +| ir.cpp:2232:25:2232:25 | ChiTotal | total:m2232_2 | +| ir.cpp:2232:25:2232:25 | SideEffect | ~m2231_4 | +| ir.cpp:2233:25:2233:25 | Address | &:r2233_1 | +| ir.cpp:2233:25:2233:25 | Address | &:r2233_1 | +| ir.cpp:2233:25:2233:25 | Arg(this) | this:r2233_1 | +| ir.cpp:2233:25:2233:25 | CallTarget | func:r2233_3 | +| ir.cpp:2233:25:2233:25 | ChiPartial | partial:m2233_5 | +| ir.cpp:2233:25:2233:25 | ChiPartial | partial:m2233_7 | +| ir.cpp:2233:25:2233:25 | ChiTotal | total:m2232_6 | +| ir.cpp:2233:25:2233:25 | ChiTotal | total:m2233_2 | +| ir.cpp:2233:25:2233:25 | SideEffect | ~m2232_6 | +| ir.cpp:2234:32:2234:32 | Address | &:r2234_1 | +| ir.cpp:2234:32:2234:32 | Address | &:r2234_1 | +| ir.cpp:2234:32:2234:32 | Address | &:r2234_4 | +| ir.cpp:2234:32:2234:32 | Arg(this) | this:r2234_4 | +| ir.cpp:2234:32:2234:32 | ChiPartial | partial:m2234_6 | +| ir.cpp:2234:32:2234:32 | ChiTotal | total:m0_6 | +| ir.cpp:2234:32:2234:32 | Condition | r2234_2 | +| ir.cpp:2234:32:2234:32 | Load | ~m2233_6 | +| ir.cpp:2234:32:2234:32 | StoreValue | r2234_5 | +| ir.cpp:2235:1:2235:1 | Address | &:r2235_3 | +| ir.cpp:2235:1:2235:1 | Address | &:r2235_3 | +| ir.cpp:2235:1:2235:1 | Address | &:r2235_11 | +| ir.cpp:2235:1:2235:1 | Address | &:r2235_11 | +| ir.cpp:2235:1:2235:1 | Arg(this) | this:r2235_3 | +| ir.cpp:2235:1:2235:1 | Arg(this) | this:r2235_11 | +| ir.cpp:2235:1:2235:1 | CallTarget | func:r2235_4 | +| ir.cpp:2235:1:2235:1 | CallTarget | func:r2235_12 | +| ir.cpp:2235:1:2235:1 | ChiPartial | partial:m2235_6 | +| ir.cpp:2235:1:2235:1 | ChiPartial | partial:m2235_9 | +| ir.cpp:2235:1:2235:1 | ChiPartial | partial:m2235_14 | +| ir.cpp:2235:1:2235:1 | ChiPartial | partial:m2235_17 | +| ir.cpp:2235:1:2235:1 | ChiTotal | total:m2232_8 | +| ir.cpp:2235:1:2235:1 | ChiTotal | total:m2233_8 | +| ir.cpp:2235:1:2235:1 | ChiTotal | total:m2235_1 | +| ir.cpp:2235:1:2235:1 | ChiTotal | total:m2235_7 | +| ir.cpp:2235:1:2235:1 | Phi | from 0:~m2233_6 | +| ir.cpp:2235:1:2235:1 | Phi | from 1:~m2234_7 | +| ir.cpp:2235:1:2235:1 | SideEffect | m2232_8 | +| ir.cpp:2235:1:2235:1 | SideEffect | m2233_8 | +| ir.cpp:2235:1:2235:1 | SideEffect | ~m2235_1 | +| ir.cpp:2235:1:2235:1 | SideEffect | ~m2235_7 | +| ir.cpp:2237:28:2237:55 | Address | &:r2237_3 | +| ir.cpp:2237:28:2237:55 | Arg(this) | this:r2237_3 | +| ir.cpp:2237:28:2237:55 | CallTarget | func:r2237_4 | +| ir.cpp:2237:28:2237:55 | ChiPartial | partial:m2237_6 | +| ir.cpp:2237:28:2237:55 | ChiPartial | partial:m2237_8 | +| ir.cpp:2237:28:2237:55 | ChiTotal | total:m2237_2 | +| ir.cpp:2237:28:2237:55 | ChiTotal | total:m2237_7 | +| ir.cpp:2237:28:2237:55 | SideEffect | ~m2237_2 | +| ir.cpp:2237:28:2237:55 | SideEffect | ~m2237_9 | +| ir.cpp:2241:8:2241:8 | Address | &:r2241_16 | +| ir.cpp:2241:8:2241:8 | Address | &:r2241_16 | +| ir.cpp:2241:8:2241:8 | ChiPartial | partial:m2241_3 | +| ir.cpp:2241:8:2241:8 | ChiPartial | partial:m2241_3 | +| ir.cpp:2241:8:2241:8 | ChiTotal | total:m2241_2 | +| ir.cpp:2241:8:2241:8 | ChiTotal | total:m2241_2 | +| ir.cpp:2241:8:2241:8 | Load | m2241_14 | +| ir.cpp:2241:8:2241:8 | Load | m2241_14 | +| ir.cpp:2241:8:2241:8 | SideEffect | m2241_3 | +| ir.cpp:2241:8:2241:8 | SideEffect | m2241_3 | +| ir.cpp:2241:15:2241:15 | Address | &:r2241_5 | +| ir.cpp:2241:15:2241:15 | Address | &:r2241_5 | +| ir.cpp:2241:15:2241:15 | Address | &:r2241_5 | +| ir.cpp:2241:15:2241:15 | Address | &:r2241_5 | +| ir.cpp:2241:15:2241:15 | Address | &:r2241_7 | +| ir.cpp:2241:15:2241:15 | Address | &:r2241_7 | +| ir.cpp:2241:15:2241:15 | Address | &:r2241_7 | +| ir.cpp:2241:15:2241:15 | Address | &:r2241_7 | +| ir.cpp:2241:15:2241:15 | Load | m2241_6 | +| ir.cpp:2241:15:2241:15 | Load | m2241_6 | +| ir.cpp:2241:15:2241:15 | SideEffect | m2241_8 | +| ir.cpp:2241:15:2241:15 | SideEffect | m2241_8 | +| ir.cpp:2241:20:2241:28 | Address | &:r2241_9 | +| ir.cpp:2241:20:2241:28 | Address | &:r2241_9 | +| ir.cpp:2241:27:2241:27 | Address | &:r2241_10 | +| ir.cpp:2241:27:2241:27 | Address | &:r2241_10 | +| ir.cpp:2241:27:2241:27 | Load | m2241_6 | +| ir.cpp:2241:27:2241:27 | Load | m2241_6 | +| ir.cpp:2241:27:2241:27 | StoreValue | r2241_13 | +| ir.cpp:2241:27:2241:27 | StoreValue | r2241_13 | +| ir.cpp:2241:27:2241:27 | Unary | r2241_11 | +| ir.cpp:2241:27:2241:27 | Unary | r2241_11 | +| ir.cpp:2241:27:2241:27 | Unary | r2241_12 | +| ir.cpp:2241:27:2241:27 | Unary | r2241_12 | +| ir.cpp:2244:10:2244:10 | ChiPartial | partial:m2244_3 | +| ir.cpp:2244:10:2244:10 | ChiPartial | partial:m2244_3 | +| ir.cpp:2244:10:2244:10 | ChiTotal | total:m2244_2 | +| ir.cpp:2244:10:2244:10 | ChiTotal | total:m2244_2 | +| ir.cpp:2244:10:2244:10 | SideEffect | ~m2245_8 | +| ir.cpp:2244:10:2244:10 | SideEffect | ~m2245_16 | +| ir.cpp:2244:29:2244:29 | Address | &:r2244_5 | +| ir.cpp:2244:29:2244:29 | Address | &:r2244_5 | +| ir.cpp:2244:29:2244:29 | Address | &:r2244_5 | +| ir.cpp:2244:29:2244:29 | Address | &:r2244_5 | +| ir.cpp:2244:29:2244:29 | Address | &:r2244_7 | +| ir.cpp:2244:29:2244:29 | Address | &:r2244_7 | +| ir.cpp:2244:29:2244:29 | Address | &:r2244_7 | +| ir.cpp:2244:29:2244:29 | Address | &:r2244_7 | +| ir.cpp:2244:29:2244:29 | Load | m2244_6 | +| ir.cpp:2244:29:2244:29 | Load | m2244_6 | +| ir.cpp:2244:29:2244:29 | SideEffect | m2245_11 | +| ir.cpp:2244:29:2244:29 | SideEffect | m2245_19 | +| ir.cpp:2245:9:2245:11 | CallTarget | func:r2245_1 | +| ir.cpp:2245:9:2245:11 | CallTarget | func:r2245_1 | +| ir.cpp:2245:9:2245:11 | ChiPartial | partial:m2245_7 | +| ir.cpp:2245:9:2245:11 | ChiPartial | partial:m2245_7 | +| ir.cpp:2245:9:2245:11 | ChiTotal | total:m2244_4 | +| ir.cpp:2245:9:2245:11 | ChiTotal | total:m2244_4 | +| ir.cpp:2245:9:2245:11 | SideEffect | ~m2244_4 | +| ir.cpp:2245:9:2245:11 | SideEffect | ~m2244_4 | +| ir.cpp:2245:9:2245:11 | Unary | r2245_6 | +| ir.cpp:2245:9:2245:11 | Unary | r2245_6 | +| ir.cpp:2245:12:2245:15 | Address | &:r2245_12 | +| ir.cpp:2245:12:2245:15 | Address | &:r2245_12 | +| ir.cpp:2245:12:2245:15 | ChiPartial | partial:m2245_18 | +| ir.cpp:2245:12:2245:15 | ChiTotal | total:m2245_11 | +| ir.cpp:2245:12:2245:15 | SideEffect | ~m2245_11 | +| ir.cpp:2245:13:2245:13 | Address | &:r2245_2 | +| ir.cpp:2245:13:2245:13 | Address | &:r2245_2 | +| ir.cpp:2245:13:2245:13 | Address | &:r2245_5 | +| ir.cpp:2245:13:2245:13 | Address | &:r2245_5 | +| ir.cpp:2245:13:2245:13 | Address | &:r2245_5 | +| ir.cpp:2245:13:2245:13 | Address | &:r2245_5 | +| ir.cpp:2245:13:2245:13 | Arg(0) | 0:r2245_5 | +| ir.cpp:2245:13:2245:13 | Arg(0) | 0:r2245_5 | +| ir.cpp:2245:13:2245:13 | ChiPartial | partial:m2245_10 | +| ir.cpp:2245:13:2245:13 | ChiPartial | partial:m2245_10 | +| ir.cpp:2245:13:2245:13 | ChiTotal | total:m2244_8 | +| ir.cpp:2245:13:2245:13 | ChiTotal | total:m2244_8 | +| ir.cpp:2245:13:2245:13 | Load | m2244_6 | +| ir.cpp:2245:13:2245:13 | Load | m2244_6 | +| ir.cpp:2245:13:2245:13 | SideEffect | ~m2244_8 | +| ir.cpp:2245:13:2245:13 | SideEffect | ~m2244_8 | +| ir.cpp:2245:13:2245:13 | Unary | r2245_3 | +| ir.cpp:2245:13:2245:13 | Unary | r2245_3 | +| ir.cpp:2245:13:2245:13 | Unary | r2245_4 | +| ir.cpp:2245:13:2245:13 | Unary | r2245_4 | +| ir.cpp:2245:16:2245:17 | CallTarget | func:r2245_13 | +| ir.cpp:2245:16:2245:17 | ChiPartial | partial:m2245_15 | +| ir.cpp:2245:16:2245:17 | ChiTotal | total:m2245_8 | +| ir.cpp:2245:16:2245:17 | SideEffect | ~m2245_8 | +| ir.cpp:2248:10:2248:36 | ChiPartial | partial:m2248_3 | +| ir.cpp:2248:10:2248:36 | ChiTotal | total:m2248_2 | +| ir.cpp:2248:10:2248:36 | SideEffect | ~m2251_6 | +| ir.cpp:2249:29:2249:29 | Address | &:r2249_1 | +| ir.cpp:2249:29:2249:29 | Address | &:r2249_1 | +| ir.cpp:2249:29:2249:29 | Arg(this) | this:r2249_1 | +| ir.cpp:2249:29:2249:29 | CallTarget | func:r2249_3 | +| ir.cpp:2249:29:2249:29 | ChiPartial | partial:m2249_5 | +| ir.cpp:2249:29:2249:29 | ChiPartial | partial:m2249_7 | +| ir.cpp:2249:29:2249:29 | ChiTotal | total:m2248_4 | +| ir.cpp:2249:29:2249:29 | ChiTotal | total:m2249_2 | +| ir.cpp:2249:29:2249:29 | SideEffect | ~m2248_4 | +| ir.cpp:2250:9:2250:23 | CallTarget | func:r2250_1 | +| ir.cpp:2250:9:2250:23 | ChiPartial | partial:m2250_5 | +| ir.cpp:2250:9:2250:23 | ChiTotal | total:m2249_6 | +| ir.cpp:2250:9:2250:23 | SideEffect | ~m2249_6 | +| ir.cpp:2250:25:2250:25 | Address | &:r2250_3 | +| ir.cpp:2250:25:2250:25 | Address | &:r2250_3 | +| ir.cpp:2250:25:2250:25 | Arg(0) | 0:r2250_3 | +| ir.cpp:2250:25:2250:25 | ChiPartial | partial:m2250_8 | +| ir.cpp:2250:25:2250:25 | ChiTotal | total:m2249_8 | +| ir.cpp:2250:25:2250:25 | SideEffect | ~m2249_8 | +| ir.cpp:2250:25:2250:25 | Unary | r2250_2 | +| ir.cpp:2251:5:2251:5 | Address | &:r2251_2 | +| ir.cpp:2251:5:2251:5 | Address | &:r2251_2 | +| ir.cpp:2251:5:2251:5 | Arg(this) | this:r2251_2 | +| ir.cpp:2251:5:2251:5 | CallTarget | func:r2251_3 | +| ir.cpp:2251:5:2251:5 | ChiPartial | partial:m2251_5 | +| ir.cpp:2251:5:2251:5 | ChiPartial | partial:m2251_8 | +| ir.cpp:2251:5:2251:5 | ChiTotal | total:m2250_6 | +| ir.cpp:2251:5:2251:5 | ChiTotal | total:m2250_9 | +| ir.cpp:2251:5:2251:5 | SideEffect | m2250_9 | +| ir.cpp:2251:5:2251:5 | SideEffect | ~m2250_6 | +| ir.cpp:2253:10:2253:32 | ChiPartial | partial:m2253_3 | +| ir.cpp:2253:10:2253:32 | ChiTotal | total:m2253_2 | +| ir.cpp:2253:10:2253:32 | SideEffect | ~m2255_6 | +| ir.cpp:2254:13:2254:13 | Address | &:r2254_1 | +| ir.cpp:2255:9:2255:23 | CallTarget | func:r2255_1 | +| ir.cpp:2255:9:2255:23 | ChiPartial | partial:m2255_5 | +| ir.cpp:2255:9:2255:23 | ChiTotal | total:m2253_4 | +| ir.cpp:2255:9:2255:23 | SideEffect | ~m2253_4 | +| ir.cpp:2255:25:2255:25 | Address | &:r2255_3 | +| ir.cpp:2255:25:2255:25 | Address | &:r2255_3 | +| ir.cpp:2255:25:2255:25 | Arg(0) | 0:r2255_3 | +| ir.cpp:2255:25:2255:25 | ChiPartial | partial:m2255_8 | +| ir.cpp:2255:25:2255:25 | ChiTotal | total:m2254_2 | +| ir.cpp:2255:25:2255:25 | SideEffect | ~m2254_2 | +| ir.cpp:2255:25:2255:25 | Unary | r2255_2 | +| ir.cpp:2259:6:2259:24 | ChiPartial | partial:m2259_3 | +| ir.cpp:2259:6:2259:24 | ChiTotal | total:m2259_2 | +| ir.cpp:2259:6:2259:24 | Phi | from 2:~m2259_10 | +| ir.cpp:2259:6:2259:24 | Phi | from 6:~m2268_8 | +| ir.cpp:2259:6:2259:24 | Phi | from 9:~m2261_6 | +| ir.cpp:2259:6:2259:24 | Phi | from 10:~m2275_1 | +| ir.cpp:2259:6:2259:24 | SideEffect | ~m2259_7 | +| ir.cpp:2259:31:2259:31 | Address | &:r2259_5 | +| ir.cpp:2261:12:2261:12 | Address | &:r2261_1 | +| ir.cpp:2261:12:2261:12 | Address | &:r2261_1 | +| ir.cpp:2261:12:2261:12 | Arg(this) | this:r2261_1 | +| ir.cpp:2261:12:2261:12 | CallTarget | func:r2261_3 | +| ir.cpp:2261:12:2261:12 | ChiPartial | partial:m2261_5 | +| ir.cpp:2261:12:2261:12 | ChiPartial | partial:m2261_7 | +| ir.cpp:2261:12:2261:12 | ChiTotal | total:m2259_4 | +| ir.cpp:2261:12:2261:12 | ChiTotal | total:m2261_2 | +| ir.cpp:2261:12:2261:12 | SideEffect | ~m2259_4 | +| ir.cpp:2262:9:2262:9 | Address | &:r2262_1 | +| ir.cpp:2262:9:2262:9 | Condition | r2262_2 | +| ir.cpp:2262:9:2262:9 | Load | m2259_6 | +| ir.cpp:2263:7:2263:28 | Address | &:r2263_1 | +| ir.cpp:2263:7:2263:28 | Address | &:r2263_1 | +| ir.cpp:2263:7:2263:28 | Load | m2263_4 | +| ir.cpp:2263:13:2263:28 | StoreValue | r2263_3 | +| ir.cpp:2263:13:2263:28 | Unary | r2263_2 | +| ir.cpp:2265:12:2265:13 | Address | &:r2265_1 | +| ir.cpp:2265:12:2265:13 | Address | &:r2265_1 | +| ir.cpp:2265:12:2265:13 | Arg(this) | this:r2265_1 | +| ir.cpp:2265:12:2265:13 | CallTarget | func:r2265_3 | +| ir.cpp:2265:12:2265:13 | ChiPartial | partial:m2265_5 | +| ir.cpp:2265:12:2265:13 | ChiPartial | partial:m2265_7 | +| ir.cpp:2265:12:2265:13 | ChiTotal | total:m2261_6 | +| ir.cpp:2265:12:2265:13 | ChiTotal | total:m2265_2 | +| ir.cpp:2265:12:2265:13 | SideEffect | ~m2261_6 | +| ir.cpp:2266:3:2266:3 | Address | &:r2266_1 | +| ir.cpp:2266:3:2266:3 | Address | &:r2266_1 | +| ir.cpp:2266:3:2266:3 | Address | &:r2266_9 | +| ir.cpp:2266:3:2266:3 | Address | &:r2266_9 | +| ir.cpp:2266:3:2266:3 | Arg(this) | this:r2266_1 | +| ir.cpp:2266:3:2266:3 | Arg(this) | this:r2266_9 | +| ir.cpp:2266:3:2266:3 | CallTarget | func:r2266_2 | +| ir.cpp:2266:3:2266:3 | CallTarget | func:r2266_10 | +| ir.cpp:2266:3:2266:3 | ChiPartial | partial:m2266_4 | +| ir.cpp:2266:3:2266:3 | ChiPartial | partial:m2266_7 | +| ir.cpp:2266:3:2266:3 | ChiPartial | partial:m2266_12 | +| ir.cpp:2266:3:2266:3 | ChiPartial | partial:m2266_15 | +| ir.cpp:2266:3:2266:3 | ChiTotal | total:m2261_8 | +| ir.cpp:2266:3:2266:3 | ChiTotal | total:m2265_6 | +| ir.cpp:2266:3:2266:3 | ChiTotal | total:m2265_8 | +| ir.cpp:2266:3:2266:3 | ChiTotal | total:m2266_5 | +| ir.cpp:2266:3:2266:3 | SideEffect | m2261_8 | +| ir.cpp:2266:3:2266:3 | SideEffect | m2265_8 | +| ir.cpp:2266:3:2266:3 | SideEffect | ~m2265_6 | +| ir.cpp:2266:3:2266:3 | SideEffect | ~m2266_5 | +| ir.cpp:2267:22:2267:22 | Address | &:r2267_2 | +| ir.cpp:2267:22:2267:22 | Address | &:r2267_2 | +| ir.cpp:2267:22:2267:22 | Address | &:r2267_4 | +| ir.cpp:2267:22:2267:22 | Load | m2267_3 | +| ir.cpp:2268:5:2268:19 | Address | &:r2268_1 | +| ir.cpp:2268:5:2268:19 | Address | &:r2268_1 | +| ir.cpp:2268:5:2268:19 | Address | &:r2268_1 | +| ir.cpp:2268:5:2268:19 | Arg(this) | this:r2268_1 | +| ir.cpp:2268:5:2268:19 | CallTarget | func:r2268_3 | +| ir.cpp:2268:5:2268:19 | ChiPartial | partial:m2268_7 | +| ir.cpp:2268:5:2268:19 | ChiPartial | partial:m2268_10 | +| ir.cpp:2268:5:2268:19 | ChiTotal | total:m2261_6 | +| ir.cpp:2268:5:2268:19 | ChiTotal | total:m2268_2 | +| ir.cpp:2268:5:2268:19 | Load | m2268_11 | +| ir.cpp:2268:5:2268:19 | SideEffect | ~m2261_6 | +| ir.cpp:2268:18:2268:18 | Address | &:r2268_4 | +| ir.cpp:2268:18:2268:18 | Address | &:r2268_5 | +| ir.cpp:2268:18:2268:18 | Arg(0) | 0:r2268_5 | +| ir.cpp:2268:18:2268:18 | Load | m2267_3 | +| ir.cpp:2268:18:2268:18 | SideEffect | ~m2267_5 | +| ir.cpp:2270:24:2270:24 | Address | &:r2270_2 | +| ir.cpp:2270:24:2270:24 | Address | &:r2270_2 | +| ir.cpp:2270:24:2270:24 | Address | &:r2270_4 | +| ir.cpp:2270:24:2270:24 | Load | m2270_3 | +| ir.cpp:2275:1:2275:1 | Phi | from 4:~m2266_13 | +| ir.cpp:2275:1:2275:1 | Phi | from 8:~m2261_6 | +| ir.cpp:2277:6:2277:18 | ChiPartial | partial:m2277_3 | +| ir.cpp:2277:6:2277:18 | ChiTotal | total:m2277_2 | +| ir.cpp:2277:6:2277:18 | SideEffect | ~m2285_14 | +| ir.cpp:2277:25:2277:25 | Address | &:r2277_5 | +| ir.cpp:2278:12:2278:13 | Address | &:r2278_1 | +| ir.cpp:2278:12:2278:13 | Address | &:r2278_1 | +| ir.cpp:2278:12:2278:13 | Arg(this) | this:r2278_1 | +| ir.cpp:2278:12:2278:13 | CallTarget | func:r2278_3 | +| ir.cpp:2278:12:2278:13 | ChiPartial | partial:m2278_5 | +| ir.cpp:2278:12:2278:13 | ChiPartial | partial:m2278_7 | +| ir.cpp:2278:12:2278:13 | ChiTotal | total:m2277_4 | +| ir.cpp:2278:12:2278:13 | ChiTotal | total:m2278_2 | +| ir.cpp:2278:12:2278:13 | SideEffect | ~m2277_4 | +| ir.cpp:2279:8:2279:8 | Address | &:r2279_1 | +| ir.cpp:2279:8:2279:8 | Condition | r2279_2 | +| ir.cpp:2279:8:2279:8 | Load | m2277_6 | +| ir.cpp:2280:16:2280:17 | Address | &:r2280_1 | +| ir.cpp:2280:16:2280:17 | Address | &:r2280_1 | +| ir.cpp:2280:16:2280:17 | Arg(this) | this:r2280_1 | +| ir.cpp:2280:16:2280:17 | CallTarget | func:r2280_3 | +| ir.cpp:2280:16:2280:17 | ChiPartial | partial:m2280_5 | +| ir.cpp:2280:16:2280:17 | ChiPartial | partial:m2280_7 | +| ir.cpp:2280:16:2280:17 | ChiTotal | total:m2278_6 | +| ir.cpp:2280:16:2280:17 | ChiTotal | total:m2280_2 | +| ir.cpp:2280:16:2280:17 | SideEffect | ~m2278_6 | +| ir.cpp:2281:5:2281:5 | Address | &:r2281_1 | +| ir.cpp:2281:5:2281:5 | Address | &:r2281_1 | +| ir.cpp:2281:5:2281:5 | Arg(this) | this:r2281_1 | +| ir.cpp:2281:5:2281:5 | CallTarget | func:r2281_2 | +| ir.cpp:2281:5:2281:5 | ChiPartial | partial:m2281_4 | +| ir.cpp:2281:5:2281:5 | ChiPartial | partial:m2281_7 | +| ir.cpp:2281:5:2281:5 | ChiTotal | total:m2280_6 | +| ir.cpp:2281:5:2281:5 | ChiTotal | total:m2280_8 | +| ir.cpp:2281:5:2281:5 | SideEffect | m2280_8 | +| ir.cpp:2281:5:2281:5 | SideEffect | ~m2280_6 | +| ir.cpp:2282:16:2282:17 | Address | &:r2282_1 | +| ir.cpp:2282:16:2282:17 | Address | &:r2282_1 | +| ir.cpp:2282:16:2282:17 | Arg(this) | this:r2282_1 | +| ir.cpp:2282:16:2282:17 | CallTarget | func:r2282_3 | +| ir.cpp:2282:16:2282:17 | ChiPartial | partial:m2282_5 | +| ir.cpp:2282:16:2282:17 | ChiPartial | partial:m2282_7 | +| ir.cpp:2282:16:2282:17 | ChiTotal | total:m2278_6 | +| ir.cpp:2282:16:2282:17 | ChiTotal | total:m2282_2 | +| ir.cpp:2282:16:2282:17 | SideEffect | ~m2278_6 | +| ir.cpp:2283:5:2283:5 | Address | &:r2283_1 | +| ir.cpp:2283:5:2283:5 | Address | &:r2283_1 | +| ir.cpp:2283:5:2283:5 | Arg(this) | this:r2283_1 | +| ir.cpp:2283:5:2283:5 | CallTarget | func:r2283_2 | +| ir.cpp:2283:5:2283:5 | ChiPartial | partial:m2283_4 | +| ir.cpp:2283:5:2283:5 | ChiPartial | partial:m2283_7 | +| ir.cpp:2283:5:2283:5 | ChiTotal | total:m2282_6 | +| ir.cpp:2283:5:2283:5 | ChiTotal | total:m2282_8 | +| ir.cpp:2283:5:2283:5 | SideEffect | m2282_8 | +| ir.cpp:2283:5:2283:5 | SideEffect | ~m2282_6 | +| ir.cpp:2284:12:2284:13 | Address | &:r2284_2 | +| ir.cpp:2284:12:2284:13 | Address | &:r2284_2 | +| ir.cpp:2284:12:2284:13 | Arg(this) | this:r2284_2 | +| ir.cpp:2284:12:2284:13 | CallTarget | func:r2284_4 | +| ir.cpp:2284:12:2284:13 | ChiPartial | partial:m2284_6 | +| ir.cpp:2284:12:2284:13 | ChiPartial | partial:m2284_8 | +| ir.cpp:2284:12:2284:13 | ChiTotal | total:m2284_1 | +| ir.cpp:2284:12:2284:13 | ChiTotal | total:m2284_3 | +| ir.cpp:2284:12:2284:13 | Phi | from 1:~m2281_5 | +| ir.cpp:2284:12:2284:13 | Phi | from 2:~m2283_5 | +| ir.cpp:2284:12:2284:13 | SideEffect | ~m2284_1 | +| ir.cpp:2285:1:2285:1 | Address | &:r2285_2 | +| ir.cpp:2285:1:2285:1 | Address | &:r2285_2 | +| ir.cpp:2285:1:2285:1 | Address | &:r2285_10 | +| ir.cpp:2285:1:2285:1 | Address | &:r2285_10 | +| ir.cpp:2285:1:2285:1 | Arg(this) | this:r2285_2 | +| ir.cpp:2285:1:2285:1 | Arg(this) | this:r2285_10 | +| ir.cpp:2285:1:2285:1 | CallTarget | func:r2285_3 | +| ir.cpp:2285:1:2285:1 | CallTarget | func:r2285_11 | +| ir.cpp:2285:1:2285:1 | ChiPartial | partial:m2285_5 | +| ir.cpp:2285:1:2285:1 | ChiPartial | partial:m2285_8 | +| ir.cpp:2285:1:2285:1 | ChiPartial | partial:m2285_13 | +| ir.cpp:2285:1:2285:1 | ChiPartial | partial:m2285_16 | +| ir.cpp:2285:1:2285:1 | ChiTotal | total:m2278_8 | +| ir.cpp:2285:1:2285:1 | ChiTotal | total:m2284_7 | +| ir.cpp:2285:1:2285:1 | ChiTotal | total:m2284_9 | +| ir.cpp:2285:1:2285:1 | ChiTotal | total:m2285_6 | +| ir.cpp:2285:1:2285:1 | SideEffect | m2278_8 | +| ir.cpp:2285:1:2285:1 | SideEffect | m2284_9 | +| ir.cpp:2285:1:2285:1 | SideEffect | ~m2284_7 | +| ir.cpp:2285:1:2285:1 | SideEffect | ~m2285_6 | +| ir.cpp:2287:6:2287:19 | ChiPartial | partial:m2287_3 | +| ir.cpp:2287:6:2287:19 | ChiTotal | total:m2287_2 | +| ir.cpp:2287:6:2287:19 | SideEffect | ~m2297_54 | +| ir.cpp:2288:10:2288:10 | Address | &:r2288_1 | +| ir.cpp:2288:13:2288:16 | StoreValue | r2288_2 | +| ir.cpp:2289:16:2289:16 | Address | &:r2289_1 | +| ir.cpp:2289:16:2289:16 | Address | &:r2289_1 | +| ir.cpp:2289:16:2289:16 | Address | &:r2289_31 | +| ir.cpp:2289:16:2289:16 | Address | &:r2289_31 | +| ir.cpp:2289:16:2289:16 | Arg(this) | this:r2289_1 | +| ir.cpp:2289:16:2289:16 | Arg(this) | this:r2289_31 | +| ir.cpp:2289:16:2289:16 | CallTarget | func:r2289_32 | +| ir.cpp:2289:16:2289:16 | ChiPartial | partial:m2289_34 | +| ir.cpp:2289:16:2289:16 | ChiPartial | partial:m2289_37 | +| ir.cpp:2289:16:2289:16 | ChiTotal | total:m2289_12 | +| ir.cpp:2289:16:2289:16 | ChiTotal | total:m2289_13 | +| ir.cpp:2289:16:2289:16 | SideEffect | m2289_12 | +| ir.cpp:2289:16:2289:16 | SideEffect | ~m2289_13 | +| ir.cpp:2289:18:2289:24 | Address | &:r2289_5 | +| ir.cpp:2289:18:2289:24 | Arg(0) | 0:r2289_5 | +| ir.cpp:2289:18:2289:24 | SideEffect | ~m2287_3 | +| ir.cpp:2289:18:2289:24 | Unary | r2289_4 | +| ir.cpp:2289:18:2289:25 | CallTarget | func:r2289_3 | +| ir.cpp:2289:18:2289:25 | ChiPartial | partial:m2289_7 | +| ir.cpp:2289:18:2289:25 | ChiPartial | partial:m2289_10 | +| ir.cpp:2289:18:2289:25 | ChiTotal | total:m2287_4 | +| ir.cpp:2289:18:2289:25 | ChiTotal | total:m2289_2 | +| ir.cpp:2289:18:2289:25 | SideEffect | ~m2287_4 | +| ir.cpp:2289:28:2289:28 | Address | &:r2289_15 | +| ir.cpp:2289:28:2289:28 | Left | r2289_17 | +| ir.cpp:2289:28:2289:28 | Load | m2289_14 | +| ir.cpp:2289:28:2289:28 | Phi | from 0:m2288_3 | +| ir.cpp:2289:28:2289:28 | Phi | from 0:m2289_11 | +| ir.cpp:2289:28:2289:28 | Phi | from 0:~m2289_8 | +| ir.cpp:2289:28:2289:28 | Phi | from 2:m2289_28 | +| ir.cpp:2289:28:2289:28 | Phi | from 2:m2289_30 | +| ir.cpp:2289:28:2289:28 | Phi | from 2:~m2289_25 | +| ir.cpp:2289:28:2289:28 | Unary | r2289_16 | +| ir.cpp:2289:28:2289:33 | Condition | r2289_19 | +| ir.cpp:2289:33:2289:33 | Right | r2289_18 | +| ir.cpp:2289:36:2289:36 | Address | &:r2289_29 | +| ir.cpp:2289:40:2289:40 | Address | &:r2289_21 | +| ir.cpp:2289:40:2289:40 | Address | &:r2289_21 | +| ir.cpp:2289:40:2289:40 | Arg(this) | this:r2289_21 | +| ir.cpp:2289:40:2289:40 | ChiPartial | partial:m2289_27 | +| ir.cpp:2289:40:2289:40 | ChiTotal | total:m2289_12 | +| ir.cpp:2289:40:2289:40 | SideEffect | m2289_12 | +| ir.cpp:2289:42:2289:49 | CallTarget | func:r2289_22 | +| ir.cpp:2289:42:2289:49 | ChiPartial | partial:m2289_24 | +| ir.cpp:2289:42:2289:49 | ChiTotal | total:m2291_5 | +| ir.cpp:2289:42:2289:49 | SideEffect | ~m2291_5 | +| ir.cpp:2289:42:2289:49 | StoreValue | r2289_23 | +| ir.cpp:2290:16:2290:17 | Address | &:r2290_1 | +| ir.cpp:2290:16:2290:17 | Address | &:r2290_1 | +| ir.cpp:2290:16:2290:17 | Arg(this) | this:r2290_1 | +| ir.cpp:2290:16:2290:17 | CallTarget | func:r2290_3 | +| ir.cpp:2290:16:2290:17 | ChiPartial | partial:m2290_5 | +| ir.cpp:2290:16:2290:17 | ChiPartial | partial:m2290_7 | +| ir.cpp:2290:16:2290:17 | ChiTotal | total:m2289_13 | +| ir.cpp:2290:16:2290:17 | ChiTotal | total:m2290_2 | +| ir.cpp:2290:16:2290:17 | SideEffect | ~m2289_13 | +| ir.cpp:2291:5:2291:5 | Address | &:r2291_1 | +| ir.cpp:2291:5:2291:5 | Address | &:r2291_1 | +| ir.cpp:2291:5:2291:5 | Arg(this) | this:r2291_1 | +| ir.cpp:2291:5:2291:5 | CallTarget | func:r2291_2 | +| ir.cpp:2291:5:2291:5 | ChiPartial | partial:m2291_4 | +| ir.cpp:2291:5:2291:5 | ChiPartial | partial:m2291_7 | +| ir.cpp:2291:5:2291:5 | ChiTotal | total:m2290_6 | +| ir.cpp:2291:5:2291:5 | ChiTotal | total:m2290_8 | +| ir.cpp:2291:5:2291:5 | SideEffect | m2290_8 | +| ir.cpp:2291:5:2291:5 | SideEffect | ~m2290_6 | +| ir.cpp:2293:5:2293:5 | Address | &:r2293_1 | +| ir.cpp:2293:5:2293:5 | Address | &:r2293_24 | +| ir.cpp:2293:5:2293:5 | Address | &:r2293_30 | +| ir.cpp:2293:16:2293:16 | Address | &:r2293_51 | +| ir.cpp:2293:16:2293:16 | Address | &:r2293_51 | +| ir.cpp:2293:16:2293:16 | Address | &:r2293_68 | +| ir.cpp:2293:16:2293:16 | Address | &:r2293_68 | +| ir.cpp:2293:16:2293:16 | Arg(this) | this:r2293_51 | +| ir.cpp:2293:16:2293:16 | Arg(this) | this:r2293_68 | +| ir.cpp:2293:16:2293:16 | CallTarget | func:r2293_53 | +| ir.cpp:2293:16:2293:16 | CallTarget | func:r2293_69 | +| ir.cpp:2293:16:2293:16 | ChiPartial | partial:m2293_63 | +| ir.cpp:2293:16:2293:16 | ChiPartial | partial:m2293_66 | +| ir.cpp:2293:16:2293:16 | ChiPartial | partial:m2293_71 | +| ir.cpp:2293:16:2293:16 | ChiPartial | partial:m2293_74 | +| ir.cpp:2293:16:2293:16 | ChiTotal | total:m2293_52 | +| ir.cpp:2293:16:2293:16 | ChiTotal | total:m2293_58 | +| ir.cpp:2293:16:2293:16 | ChiTotal | total:m2293_67 | +| ir.cpp:2293:16:2293:16 | ChiTotal | total:m2295_5 | +| ir.cpp:2293:16:2293:16 | SideEffect | m2293_67 | +| ir.cpp:2293:16:2293:16 | SideEffect | ~m2293_58 | +| ir.cpp:2293:16:2293:16 | SideEffect | ~m2295_5 | +| ir.cpp:2293:20:2293:20 | Address | &:r2293_25 | +| ir.cpp:2293:20:2293:20 | Address | &:r2293_31 | +| ir.cpp:2293:20:2293:20 | Address | &:r2293_76 | +| ir.cpp:2293:20:2293:20 | Address | &:r2293_76 | +| ir.cpp:2293:20:2293:20 | Arg(this) | this:r0_2 | +| ir.cpp:2293:20:2293:20 | Arg(this) | this:r0_5 | +| ir.cpp:2293:20:2293:20 | Arg(this) | this:r0_7 | +| ir.cpp:2293:20:2293:20 | Arg(this) | this:r0_8 | +| ir.cpp:2293:20:2293:20 | Arg(this) | this:r0_15 | +| ir.cpp:2293:20:2293:20 | Arg(this) | this:r2293_76 | +| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_27 | +| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_33 | +| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_39 | +| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_40 | +| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_55 | +| ir.cpp:2293:20:2293:20 | CallTarget | func:r2293_77 | +| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_43 | +| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_45 | +| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_48 | +| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_57 | +| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_79 | +| ir.cpp:2293:20:2293:20 | ChiPartial | partial:m2293_82 | +| ir.cpp:2293:20:2293:20 | ChiTotal | total:m0_9 | +| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_36 | +| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_37 | +| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_44 | +| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_49 | +| ir.cpp:2293:20:2293:20 | ChiTotal | total:m2293_72 | +| ir.cpp:2293:20:2293:20 | Condition | r2293_47 | +| ir.cpp:2293:20:2293:20 | Load | m2293_23 | +| ir.cpp:2293:20:2293:20 | Load | m2293_23 | +| ir.cpp:2293:20:2293:20 | Phi | from 3:m2293_29 | +| ir.cpp:2293:20:2293:20 | Phi | from 3:~m2293_19 | +| ir.cpp:2293:20:2293:20 | Phi | from 5:m2293_83 | +| ir.cpp:2293:20:2293:20 | Phi | from 5:~m2293_80 | +| ir.cpp:2293:20:2293:20 | SideEffect | m2293_36 | +| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_37 | +| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_44 | +| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_49 | +| ir.cpp:2293:20:2293:20 | SideEffect | ~m2293_72 | +| ir.cpp:2293:20:2293:20 | StoreValue | r2293_28 | +| ir.cpp:2293:20:2293:20 | StoreValue | r2293_34 | +| ir.cpp:2293:20:2293:20 | Unary | r2293_26 | +| ir.cpp:2293:20:2293:20 | Unary | r2293_32 | +| ir.cpp:2293:20:2293:20 | Unary | r2293_38 | +| ir.cpp:2293:20:2293:20 | Unary | r2293_41 | +| ir.cpp:2293:20:2293:20 | Unary | r2293_54 | +| ir.cpp:2293:20:2293:20 | Unary | r2293_56 | +| ir.cpp:2293:20:2293:20 | Unary | r2293_78 | +| ir.cpp:2293:20:2293:55 | Address | &:r2293_2 | +| ir.cpp:2293:20:2293:55 | Address | &:r2293_2 | +| ir.cpp:2293:20:2293:55 | Arg(this) | this:r2293_2 | +| ir.cpp:2293:20:2293:55 | CallTarget | func:r2293_4 | +| ir.cpp:2293:20:2293:55 | ChiPartial | partial:m2293_18 | +| ir.cpp:2293:20:2293:55 | ChiPartial | partial:m2293_20 | +| ir.cpp:2293:20:2293:55 | ChiTotal | total:m2293_3 | +| ir.cpp:2293:20:2293:55 | ChiTotal | total:m2293_12 | +| ir.cpp:2293:20:2293:55 | SideEffect | ~m2293_12 | +| ir.cpp:2293:20:2293:55 | StoreValue | r2293_22 | +| ir.cpp:2293:20:2293:55 | Unary | r2293_2 | +| ir.cpp:2293:20:2293:56 | Address | &:r2293_61 | +| ir.cpp:2293:20:2293:56 | Arg(0) | 0:r2293_61 | +| ir.cpp:2293:20:2293:56 | SideEffect | ~m2293_64 | +| ir.cpp:2293:20:2293:56 | Unary | r2293_59 | +| ir.cpp:2293:20:2293:56 | Unary | r2293_60 | +| ir.cpp:2293:40:2293:54 | Address | &:r2293_5 | +| ir.cpp:2293:40:2293:54 | Address | &:r2293_5 | +| ir.cpp:2293:40:2293:54 | Address | &:r2293_5 | +| ir.cpp:2293:40:2293:54 | Arg(0) | 0:r2293_16 | +| ir.cpp:2293:40:2293:54 | Arg(this) | this:r2293_5 | +| ir.cpp:2293:40:2293:54 | CallTarget | func:r2293_7 | +| ir.cpp:2293:40:2293:54 | ChiPartial | partial:m2293_11 | +| ir.cpp:2293:40:2293:54 | ChiPartial | partial:m2293_14 | +| ir.cpp:2293:40:2293:54 | ChiTotal | total:m2289_35 | +| ir.cpp:2293:40:2293:54 | ChiTotal | total:m2293_6 | +| ir.cpp:2293:40:2293:54 | Load | m2293_15 | +| ir.cpp:2293:40:2293:54 | SideEffect | ~m2289_35 | +| ir.cpp:2293:47:2293:53 | Address | &:r2293_9 | +| ir.cpp:2293:47:2293:53 | Arg(0) | 0:r2293_9 | +| ir.cpp:2293:47:2293:53 | SideEffect | ~m2287_3 | +| ir.cpp:2293:47:2293:53 | Unary | r2293_8 | +| ir.cpp:2294:16:2294:17 | Address | &:r2294_1 | +| ir.cpp:2294:16:2294:17 | Address | &:r2294_1 | +| ir.cpp:2294:16:2294:17 | Arg(this) | this:r2294_1 | +| ir.cpp:2294:16:2294:17 | CallTarget | func:r2294_3 | +| ir.cpp:2294:16:2294:17 | ChiPartial | partial:m2294_5 | +| ir.cpp:2294:16:2294:17 | ChiPartial | partial:m2294_7 | +| ir.cpp:2294:16:2294:17 | ChiTotal | total:m2293_64 | +| ir.cpp:2294:16:2294:17 | ChiTotal | total:m2294_2 | +| ir.cpp:2294:16:2294:17 | SideEffect | ~m2293_64 | +| ir.cpp:2295:5:2295:5 | Address | &:r2295_1 | +| ir.cpp:2295:5:2295:5 | Address | &:r2295_1 | +| ir.cpp:2295:5:2295:5 | Arg(this) | this:r2295_1 | +| ir.cpp:2295:5:2295:5 | CallTarget | func:r2295_2 | +| ir.cpp:2295:5:2295:5 | ChiPartial | partial:m2295_4 | +| ir.cpp:2295:5:2295:5 | ChiPartial | partial:m2295_7 | +| ir.cpp:2295:5:2295:5 | ChiTotal | total:m2294_6 | +| ir.cpp:2295:5:2295:5 | ChiTotal | total:m2294_8 | +| ir.cpp:2295:5:2295:5 | SideEffect | m2294_8 | +| ir.cpp:2295:5:2295:5 | SideEffect | ~m2294_6 | +| ir.cpp:2297:16:2297:16 | Address | &:r2297_1 | +| ir.cpp:2297:16:2297:16 | Address | &:r2297_1 | +| ir.cpp:2297:16:2297:16 | Address | &:r2297_50 | +| ir.cpp:2297:16:2297:16 | Address | &:r2297_50 | +| ir.cpp:2297:16:2297:16 | Arg(this) | this:r2297_1 | +| ir.cpp:2297:16:2297:16 | Arg(this) | this:r2297_50 | +| ir.cpp:2297:16:2297:16 | CallTarget | func:r2297_51 | +| ir.cpp:2297:16:2297:16 | ChiPartial | partial:m2297_53 | +| ir.cpp:2297:16:2297:16 | ChiPartial | partial:m2297_56 | +| ir.cpp:2297:16:2297:16 | ChiTotal | total:m2297_23 | +| ir.cpp:2297:16:2297:16 | ChiTotal | total:m2297_46 | +| ir.cpp:2297:16:2297:16 | SideEffect | m2297_23 | +| ir.cpp:2297:16:2297:16 | SideEffect | ~m2297_46 | +| ir.cpp:2297:18:2297:24 | Address | &:r2297_5 | +| ir.cpp:2297:18:2297:24 | Arg(0) | 0:r2297_5 | +| ir.cpp:2297:18:2297:24 | SideEffect | ~m2287_3 | +| ir.cpp:2297:18:2297:24 | Unary | r2297_4 | +| ir.cpp:2297:18:2297:25 | CallTarget | func:r2297_3 | +| ir.cpp:2297:18:2297:25 | ChiPartial | partial:m2297_7 | +| ir.cpp:2297:18:2297:25 | ChiPartial | partial:m2297_10 | +| ir.cpp:2297:18:2297:25 | ChiTotal | total:m2293_49 | +| ir.cpp:2297:18:2297:25 | ChiTotal | total:m2297_2 | +| ir.cpp:2297:18:2297:25 | SideEffect | ~m2293_49 | +| ir.cpp:2297:28:2297:29 | Address | &:r2297_12 | +| ir.cpp:2297:28:2297:29 | Address | &:r2297_12 | +| ir.cpp:2297:28:2297:29 | Address | &:r2297_42 | +| ir.cpp:2297:28:2297:29 | Address | &:r2297_42 | +| ir.cpp:2297:28:2297:29 | Arg(this) | this:r2297_12 | +| ir.cpp:2297:28:2297:29 | Arg(this) | this:r2297_42 | +| ir.cpp:2297:28:2297:29 | CallTarget | func:r2297_43 | +| ir.cpp:2297:28:2297:29 | ChiPartial | partial:m2297_45 | +| ir.cpp:2297:28:2297:29 | ChiPartial | partial:m2297_48 | +| ir.cpp:2297:28:2297:29 | ChiTotal | total:m2297_22 | +| ir.cpp:2297:28:2297:29 | ChiTotal | total:m2297_24 | +| ir.cpp:2297:28:2297:29 | SideEffect | m2297_22 | +| ir.cpp:2297:28:2297:29 | SideEffect | ~m2297_24 | +| ir.cpp:2297:31:2297:37 | Address | &:r2297_16 | +| ir.cpp:2297:31:2297:37 | Arg(0) | 0:r2297_16 | +| ir.cpp:2297:31:2297:37 | SideEffect | ~m2287_3 | +| ir.cpp:2297:31:2297:37 | Unary | r2297_15 | +| ir.cpp:2297:31:2297:38 | CallTarget | func:r2297_14 | +| ir.cpp:2297:31:2297:38 | ChiPartial | partial:m2297_18 | +| ir.cpp:2297:31:2297:38 | ChiPartial | partial:m2297_21 | +| ir.cpp:2297:31:2297:38 | ChiTotal | total:m2297_8 | +| ir.cpp:2297:31:2297:38 | ChiTotal | total:m2297_13 | +| ir.cpp:2297:31:2297:38 | SideEffect | ~m2297_8 | +| ir.cpp:2297:41:2297:41 | Address | &:r2297_26 | +| ir.cpp:2297:41:2297:41 | Left | r2297_28 | +| ir.cpp:2297:41:2297:41 | Load | m2297_25 | +| ir.cpp:2297:41:2297:41 | Phi | from 6:m2289_14 | +| ir.cpp:2297:41:2297:41 | Phi | from 6:m2297_11 | +| ir.cpp:2297:41:2297:41 | Phi | from 6:~m2297_19 | +| ir.cpp:2297:41:2297:41 | Phi | from 8:m2297_39 | +| ir.cpp:2297:41:2297:41 | Phi | from 8:m2297_41 | +| ir.cpp:2297:41:2297:41 | Phi | from 8:~m2297_36 | +| ir.cpp:2297:41:2297:41 | Unary | r2297_27 | +| ir.cpp:2297:41:2297:46 | Condition | r2297_30 | +| ir.cpp:2297:46:2297:46 | Right | r2297_29 | +| ir.cpp:2297:49:2297:49 | Address | &:r2297_40 | +| ir.cpp:2297:53:2297:53 | Address | &:r2297_32 | +| ir.cpp:2297:53:2297:53 | Address | &:r2297_32 | +| ir.cpp:2297:53:2297:53 | Arg(this) | this:r2297_32 | +| ir.cpp:2297:53:2297:53 | ChiPartial | partial:m2297_38 | +| ir.cpp:2297:53:2297:53 | ChiTotal | total:m2297_23 | +| ir.cpp:2297:53:2297:53 | SideEffect | m2297_23 | +| ir.cpp:2297:55:2297:62 | CallTarget | func:r2297_33 | +| ir.cpp:2297:55:2297:62 | ChiPartial | partial:m2297_35 | +| ir.cpp:2297:55:2297:62 | ChiTotal | total:m2297_24 | +| ir.cpp:2297:55:2297:62 | SideEffect | ~m2297_24 | +| ir.cpp:2297:55:2297:62 | StoreValue | r2297_34 | +| ir.cpp:2298:9:2298:9 | Address | &:r2298_2 | +| ir.cpp:2298:13:2298:13 | StoreValue | r2298_1 | +| ir.cpp:2302:6:2302:19 | ChiPartial | partial:m2302_3 | +| ir.cpp:2302:6:2302:19 | ChiTotal | total:m2302_2 | +| ir.cpp:2302:6:2302:19 | SideEffect | ~m2307_5 | +| ir.cpp:2302:26:2302:26 | Address | &:r2302_5 | +| ir.cpp:2303:15:2303:15 | Address | &:r2303_1 | +| ir.cpp:2303:15:2303:15 | Address | &:r2303_1 | +| ir.cpp:2303:15:2303:15 | Arg(this) | this:r2303_1 | +| ir.cpp:2303:18:2303:33 | CallTarget | func:r2303_3 | +| ir.cpp:2303:18:2303:33 | ChiPartial | partial:m2303_7 | +| ir.cpp:2303:18:2303:33 | ChiPartial | partial:m2303_10 | +| ir.cpp:2303:18:2303:33 | ChiTotal | total:m2302_4 | +| ir.cpp:2303:18:2303:33 | ChiTotal | total:m2303_2 | +| ir.cpp:2303:18:2303:33 | SideEffect | ~m2302_4 | +| ir.cpp:2303:26:2303:32 | Address | &:r2303_5 | +| ir.cpp:2303:26:2303:32 | Arg(0) | 0:r2303_5 | +| ir.cpp:2303:26:2303:32 | SideEffect | ~m2302_3 | +| ir.cpp:2303:26:2303:32 | Unary | r2303_4 | +| ir.cpp:2303:36:2303:36 | Address | &:r2303_12 | +| ir.cpp:2303:36:2303:36 | Condition | r2303_13 | +| ir.cpp:2303:36:2303:36 | Load | m2302_6 | +| ir.cpp:2304:13:2304:13 | Address | &:r2304_1 | +| ir.cpp:2304:16:2304:17 | StoreValue | r2304_2 | +| ir.cpp:2306:13:2306:13 | Address | &:r2306_1 | +| ir.cpp:2306:16:2306:17 | StoreValue | r2306_2 | +| ir.cpp:2307:5:2307:5 | Address | &:r2307_1 | +| ir.cpp:2307:5:2307:5 | Address | &:r2307_1 | +| ir.cpp:2307:5:2307:5 | Arg(this) | this:r2307_1 | +| ir.cpp:2307:5:2307:5 | CallTarget | func:r2307_2 | +| ir.cpp:2307:5:2307:5 | ChiPartial | partial:m2307_4 | +| ir.cpp:2307:5:2307:5 | ChiPartial | partial:m2307_7 | +| ir.cpp:2307:5:2307:5 | ChiTotal | total:m2303_8 | +| ir.cpp:2307:5:2307:5 | ChiTotal | total:m2303_11 | +| ir.cpp:2307:5:2307:5 | SideEffect | m2303_11 | +| ir.cpp:2307:5:2307:5 | SideEffect | ~m2303_8 | +| ir.cpp:2317:6:2317:19 | ChiPartial | partial:m2317_3 | +| ir.cpp:2317:6:2317:19 | ChiTotal | total:m2317_2 | +| ir.cpp:2317:6:2317:19 | SideEffect | ~m2322_14 | +| ir.cpp:2317:26:2317:26 | Address | &:r2317_5 | +| ir.cpp:2318:8:2318:23 | Address | &:r2318_1 | +| ir.cpp:2318:8:2318:23 | Address | &:r2318_1 | +| ir.cpp:2318:8:2318:23 | Arg(this) | this:r2318_1 | +| ir.cpp:2318:8:2318:23 | Condition | r2318_19 | +| ir.cpp:2318:13:2318:13 | Address | &:r2318_11 | +| ir.cpp:2318:13:2318:13 | Address | &:r2318_11 | +| ir.cpp:2318:13:2318:13 | Arg(this) | this:r2318_11 | +| ir.cpp:2318:13:2318:13 | CallTarget | func:r2318_12 | +| ir.cpp:2318:13:2318:13 | ChiPartial | partial:m2318_14 | +| ir.cpp:2318:13:2318:13 | ChiPartial | partial:m2318_17 | +| ir.cpp:2318:13:2318:13 | ChiTotal | total:m2318_8 | +| ir.cpp:2318:13:2318:13 | ChiTotal | total:m2318_10 | +| ir.cpp:2318:13:2318:13 | SideEffect | m2318_10 | +| ir.cpp:2318:13:2318:13 | SideEffect | ~m2318_8 | +| ir.cpp:2318:13:2318:13 | Unary | r2318_13 | +| ir.cpp:2318:16:2318:23 | CallTarget | func:r2318_3 | +| ir.cpp:2318:16:2318:23 | ChiPartial | partial:m2318_7 | +| ir.cpp:2318:16:2318:23 | ChiPartial | partial:m2318_9 | +| ir.cpp:2318:16:2318:23 | ChiTotal | total:m2317_4 | +| ir.cpp:2318:16:2318:23 | ChiTotal | total:m2318_2 | +| ir.cpp:2318:16:2318:23 | SideEffect | ~m2317_4 | +| ir.cpp:2318:22:2318:22 | Address | &:r2318_4 | +| ir.cpp:2318:22:2318:22 | Arg(0) | 0:r2318_5 | +| ir.cpp:2318:22:2318:22 | Load | m2317_6 | +| ir.cpp:2319:16:2319:17 | Address | &:r2319_1 | +| ir.cpp:2319:16:2319:17 | Address | &:r2319_1 | +| ir.cpp:2319:16:2319:17 | Arg(this) | this:r2319_1 | +| ir.cpp:2319:16:2319:17 | CallTarget | func:r2319_3 | +| ir.cpp:2319:16:2319:17 | ChiPartial | partial:m2319_5 | +| ir.cpp:2319:16:2319:17 | ChiPartial | partial:m2319_7 | +| ir.cpp:2319:16:2319:17 | ChiTotal | total:m2318_15 | +| ir.cpp:2319:16:2319:17 | ChiTotal | total:m2319_2 | +| ir.cpp:2319:16:2319:17 | SideEffect | ~m2318_15 | +| ir.cpp:2320:5:2320:5 | Address | &:r2320_1 | +| ir.cpp:2320:5:2320:5 | Address | &:r2320_1 | +| ir.cpp:2320:5:2320:5 | Arg(this) | this:r2320_1 | +| ir.cpp:2320:5:2320:5 | CallTarget | func:r2320_2 | +| ir.cpp:2320:5:2320:5 | ChiPartial | partial:m2320_4 | +| ir.cpp:2320:5:2320:5 | ChiPartial | partial:m2320_7 | +| ir.cpp:2320:5:2320:5 | ChiTotal | total:m2319_6 | +| ir.cpp:2320:5:2320:5 | ChiTotal | total:m2319_8 | +| ir.cpp:2320:5:2320:5 | SideEffect | m2319_8 | +| ir.cpp:2320:5:2320:5 | SideEffect | ~m2319_6 | +| ir.cpp:2321:16:2321:17 | Address | &:r2321_1 | +| ir.cpp:2321:16:2321:17 | Address | &:r2321_1 | +| ir.cpp:2321:16:2321:17 | Arg(this) | this:r2321_1 | +| ir.cpp:2321:16:2321:17 | CallTarget | func:r2321_3 | +| ir.cpp:2321:16:2321:17 | ChiPartial | partial:m2321_5 | +| ir.cpp:2321:16:2321:17 | ChiPartial | partial:m2321_7 | +| ir.cpp:2321:16:2321:17 | ChiTotal | total:m2318_15 | +| ir.cpp:2321:16:2321:17 | ChiTotal | total:m2321_2 | +| ir.cpp:2321:16:2321:17 | SideEffect | ~m2318_15 | +| ir.cpp:2322:5:2322:5 | Address | &:r2322_1 | +| ir.cpp:2322:5:2322:5 | Address | &:r2322_1 | +| ir.cpp:2322:5:2322:5 | Address | &:r2322_10 | +| ir.cpp:2322:5:2322:5 | Address | &:r2322_10 | +| ir.cpp:2322:5:2322:5 | Arg(this) | this:r2322_1 | +| ir.cpp:2322:5:2322:5 | Arg(this) | this:r2322_10 | +| ir.cpp:2322:5:2322:5 | CallTarget | func:r2322_2 | +| ir.cpp:2322:5:2322:5 | CallTarget | func:r2322_11 | +| ir.cpp:2322:5:2322:5 | ChiPartial | partial:m2322_4 | +| ir.cpp:2322:5:2322:5 | ChiPartial | partial:m2322_7 | +| ir.cpp:2322:5:2322:5 | ChiPartial | partial:m2322_13 | +| ir.cpp:2322:5:2322:5 | ChiPartial | partial:m2322_16 | +| ir.cpp:2322:5:2322:5 | ChiTotal | total:m2318_18 | +| ir.cpp:2322:5:2322:5 | ChiTotal | total:m2321_6 | +| ir.cpp:2322:5:2322:5 | ChiTotal | total:m2321_8 | +| ir.cpp:2322:5:2322:5 | ChiTotal | total:m2322_9 | +| ir.cpp:2322:5:2322:5 | Phi | from 1:~m2320_5 | +| ir.cpp:2322:5:2322:5 | Phi | from 2:~m2322_5 | +| ir.cpp:2322:5:2322:5 | SideEffect | m2318_18 | +| ir.cpp:2322:5:2322:5 | SideEffect | m2321_8 | +| ir.cpp:2322:5:2322:5 | SideEffect | ~m2321_6 | +| ir.cpp:2322:5:2322:5 | SideEffect | ~m2322_9 | +| ir.cpp:2325:6:2325:25 | ChiPartial | partial:m2325_3 | +| ir.cpp:2325:6:2325:25 | ChiTotal | total:m2325_2 | +| ir.cpp:2325:6:2325:25 | SideEffect | ~m2336_13 | +| ir.cpp:2325:32:2325:32 | Address | &:r2325_5 | +| ir.cpp:2327:16:2327:16 | Address | &:r2327_1 | +| ir.cpp:2327:16:2327:16 | Address | &:r2327_1 | +| ir.cpp:2327:16:2327:16 | Arg(this) | this:r2327_1 | +| ir.cpp:2327:16:2327:16 | CallTarget | func:r2327_3 | +| ir.cpp:2327:16:2327:16 | ChiPartial | partial:m2327_5 | +| ir.cpp:2327:16:2327:16 | ChiPartial | partial:m2327_7 | +| ir.cpp:2327:16:2327:16 | ChiTotal | total:m2325_4 | +| ir.cpp:2327:16:2327:16 | ChiTotal | total:m2327_2 | +| ir.cpp:2327:16:2327:16 | SideEffect | ~m2325_4 | +| ir.cpp:2328:15:2328:15 | Address | &:r2328_2 | +| ir.cpp:2328:15:2328:15 | Condition | r2328_3 | +| ir.cpp:2328:15:2328:15 | Load | m2328_1 | +| ir.cpp:2328:15:2328:15 | Phi | from 0:m2325_6 | +| ir.cpp:2328:15:2328:15 | Phi | from 2:m2329_3 | +| ir.cpp:2329:13:2329:13 | Address | &:r2329_2 | +| ir.cpp:2329:17:2329:21 | StoreValue | r2329_1 | +| ir.cpp:2331:5:2331:5 | Address | &:r2331_1 | +| ir.cpp:2331:5:2331:5 | Address | &:r2331_1 | +| ir.cpp:2331:5:2331:5 | Arg(this) | this:r2331_1 | +| ir.cpp:2331:5:2331:5 | CallTarget | func:r2331_2 | +| ir.cpp:2331:5:2331:5 | ChiPartial | partial:m2331_4 | +| ir.cpp:2331:5:2331:5 | ChiPartial | partial:m2331_7 | +| ir.cpp:2331:5:2331:5 | ChiTotal | total:m2327_6 | +| ir.cpp:2331:5:2331:5 | ChiTotal | total:m2327_8 | +| ir.cpp:2331:5:2331:5 | SideEffect | m2327_8 | +| ir.cpp:2331:5:2331:5 | SideEffect | ~m2327_6 | +| ir.cpp:2334:16:2334:31 | Address | &:r2334_3 | +| ir.cpp:2334:16:2334:31 | Address | &:r2334_3 | +| ir.cpp:2334:16:2334:31 | Arg(this) | this:r2334_3 | +| ir.cpp:2334:16:2334:31 | Condition | r2334_21 | +| ir.cpp:2334:16:2334:31 | Phi | from 3:m2328_1 | +| ir.cpp:2334:16:2334:31 | Phi | from 3:~m2331_5 | +| ir.cpp:2334:16:2334:31 | Phi | from 5:m2335_3 | +| ir.cpp:2334:16:2334:31 | Phi | from 5:~m2336_5 | +| ir.cpp:2334:21:2334:21 | Address | &:r2334_13 | +| ir.cpp:2334:21:2334:21 | Address | &:r2334_13 | +| ir.cpp:2334:21:2334:21 | Arg(this) | this:r2334_13 | +| ir.cpp:2334:21:2334:21 | CallTarget | func:r2334_14 | +| ir.cpp:2334:21:2334:21 | ChiPartial | partial:m2334_16 | +| ir.cpp:2334:21:2334:21 | ChiPartial | partial:m2334_19 | +| ir.cpp:2334:21:2334:21 | ChiTotal | total:m2334_10 | +| ir.cpp:2334:21:2334:21 | ChiTotal | total:m2334_12 | +| ir.cpp:2334:21:2334:21 | SideEffect | m2334_12 | +| ir.cpp:2334:21:2334:21 | SideEffect | ~m2334_10 | +| ir.cpp:2334:21:2334:21 | Unary | r2334_15 | +| ir.cpp:2334:24:2334:31 | CallTarget | func:r2334_5 | +| ir.cpp:2334:24:2334:31 | ChiPartial | partial:m2334_9 | +| ir.cpp:2334:24:2334:31 | ChiPartial | partial:m2334_11 | +| ir.cpp:2334:24:2334:31 | ChiTotal | total:m2334_1 | +| ir.cpp:2334:24:2334:31 | ChiTotal | total:m2334_4 | +| ir.cpp:2334:24:2334:31 | SideEffect | ~m2334_1 | +| ir.cpp:2334:30:2334:30 | Address | &:r2334_6 | +| ir.cpp:2334:30:2334:30 | Arg(0) | 0:r2334_7 | +| ir.cpp:2334:30:2334:30 | Load | m2334_2 | +| ir.cpp:2335:13:2335:13 | Address | &:r2335_2 | +| ir.cpp:2335:17:2335:21 | StoreValue | r2335_1 | +| ir.cpp:2336:9:2336:9 | Address | &:r2336_1 | +| ir.cpp:2336:9:2336:9 | Address | &:r2336_1 | +| ir.cpp:2336:9:2336:9 | Address | &:r2336_9 | +| ir.cpp:2336:9:2336:9 | Address | &:r2336_9 | +| ir.cpp:2336:9:2336:9 | Arg(this) | this:r2336_1 | +| ir.cpp:2336:9:2336:9 | Arg(this) | this:r2336_9 | +| ir.cpp:2336:9:2336:9 | CallTarget | func:r2336_2 | +| ir.cpp:2336:9:2336:9 | CallTarget | func:r2336_10 | +| ir.cpp:2336:9:2336:9 | ChiPartial | partial:m2336_4 | +| ir.cpp:2336:9:2336:9 | ChiPartial | partial:m2336_7 | +| ir.cpp:2336:9:2336:9 | ChiPartial | partial:m2336_12 | +| ir.cpp:2336:9:2336:9 | ChiPartial | partial:m2336_15 | +| ir.cpp:2336:9:2336:9 | ChiTotal | total:m2334_17 | +| ir.cpp:2336:9:2336:9 | ChiTotal | total:m2334_17 | +| ir.cpp:2336:9:2336:9 | ChiTotal | total:m2334_20 | +| ir.cpp:2336:9:2336:9 | ChiTotal | total:m2334_20 | +| ir.cpp:2336:9:2336:9 | SideEffect | m2334_20 | +| ir.cpp:2336:9:2336:9 | SideEffect | m2334_20 | +| ir.cpp:2336:9:2336:9 | SideEffect | ~m2334_17 | +| ir.cpp:2336:9:2336:9 | SideEffect | ~m2334_17 | +| ir.cpp:2340:6:2340:13 | ChiPartial | partial:m2340_3 | +| ir.cpp:2340:6:2340:13 | ChiTotal | total:m2340_2 | +| ir.cpp:2340:6:2340:13 | SideEffect | m2340_3 | +| ir.cpp:2342:6:2342:24 | ChiPartial | partial:m2342_3 | +| ir.cpp:2342:6:2342:24 | ChiTotal | total:m2342_2 | +| ir.cpp:2342:6:2342:24 | Phi | from 2:~m2351_5 | +| ir.cpp:2342:6:2342:24 | Phi | from 4:~m2351_13 | +| ir.cpp:2342:6:2342:24 | Phi | from 5:~m2351_22 | +| ir.cpp:2342:6:2342:24 | SideEffect | ~m2342_7 | +| ir.cpp:2342:31:2342:31 | Address | &:r2342_5 | +| ir.cpp:2343:12:2343:12 | Address | &:r2343_1 | +| ir.cpp:2343:12:2343:12 | Address | &:r2343_1 | +| ir.cpp:2343:12:2343:12 | Arg(this) | this:r2343_1 | +| ir.cpp:2343:12:2343:12 | CallTarget | func:r2343_3 | +| ir.cpp:2343:12:2343:12 | ChiPartial | partial:m2343_5 | +| ir.cpp:2343:12:2343:12 | ChiPartial | partial:m2343_7 | +| ir.cpp:2343:12:2343:12 | ChiTotal | total:m2342_4 | +| ir.cpp:2343:12:2343:12 | ChiTotal | total:m2343_2 | +| ir.cpp:2343:12:2343:12 | SideEffect | ~m2342_4 | +| ir.cpp:2344:8:2344:8 | Address | &:r2344_1 | +| ir.cpp:2344:8:2344:8 | Condition | r2344_2 | +| ir.cpp:2344:8:2344:8 | Load | m2342_6 | +| ir.cpp:2347:8:2347:8 | Address | &:r2347_1 | +| ir.cpp:2347:8:2347:8 | Condition | r2347_2 | +| ir.cpp:2347:8:2347:8 | Load | m2342_6 | +| ir.cpp:2348:16:2348:23 | CallTarget | func:r2348_1 | +| ir.cpp:2348:16:2348:23 | ChiPartial | partial:m2348_3 | +| ir.cpp:2348:16:2348:23 | ChiTotal | total:m2343_6 | +| ir.cpp:2348:16:2348:23 | SideEffect | ~m2343_6 | +| ir.cpp:2351:1:2351:1 | Address | &:r2351_1 | +| ir.cpp:2351:1:2351:1 | Address | &:r2351_1 | +| ir.cpp:2351:1:2351:1 | Address | &:r2351_9 | +| ir.cpp:2351:1:2351:1 | Address | &:r2351_9 | +| ir.cpp:2351:1:2351:1 | Address | &:r2351_18 | +| ir.cpp:2351:1:2351:1 | Address | &:r2351_18 | +| ir.cpp:2351:1:2351:1 | Arg(this) | this:r2351_1 | +| ir.cpp:2351:1:2351:1 | Arg(this) | this:r2351_9 | +| ir.cpp:2351:1:2351:1 | Arg(this) | this:r2351_18 | +| ir.cpp:2351:1:2351:1 | CallTarget | func:r2351_2 | +| ir.cpp:2351:1:2351:1 | CallTarget | func:r2351_10 | +| ir.cpp:2351:1:2351:1 | CallTarget | func:r2351_19 | +| ir.cpp:2351:1:2351:1 | ChiPartial | partial:m2351_4 | +| ir.cpp:2351:1:2351:1 | ChiPartial | partial:m2351_7 | +| ir.cpp:2351:1:2351:1 | ChiPartial | partial:m2351_12 | +| ir.cpp:2351:1:2351:1 | ChiPartial | partial:m2351_15 | +| ir.cpp:2351:1:2351:1 | ChiPartial | partial:m2351_21 | +| ir.cpp:2351:1:2351:1 | ChiPartial | partial:m2351_24 | +| ir.cpp:2351:1:2351:1 | ChiTotal | total:m2343_6 | +| ir.cpp:2351:1:2351:1 | ChiTotal | total:m2343_6 | +| ir.cpp:2351:1:2351:1 | ChiTotal | total:m2343_8 | +| ir.cpp:2351:1:2351:1 | ChiTotal | total:m2343_8 | +| ir.cpp:2351:1:2351:1 | ChiTotal | total:m2343_8 | +| ir.cpp:2351:1:2351:1 | ChiTotal | total:m2348_4 | +| ir.cpp:2351:1:2351:1 | SideEffect | m2343_8 | +| ir.cpp:2351:1:2351:1 | SideEffect | m2343_8 | +| ir.cpp:2351:1:2351:1 | SideEffect | m2343_8 | +| ir.cpp:2351:1:2351:1 | SideEffect | ~m2343_6 | +| ir.cpp:2351:1:2351:1 | SideEffect | ~m2343_6 | +| ir.cpp:2351:1:2351:1 | SideEffect | ~m2348_4 | +| ir.cpp:2353:5:2353:24 | Address | &:r2353_9 | +| ir.cpp:2353:5:2353:24 | ChiPartial | partial:m2353_3 | +| ir.cpp:2353:5:2353:24 | ChiTotal | total:m2353_2 | +| ir.cpp:2353:5:2353:24 | Load | m2353_8 | +| ir.cpp:2353:5:2353:24 | Phi | from 2:m2356_3 | +| ir.cpp:2353:5:2353:24 | Phi | from 2:~m2359_5 | +| ir.cpp:2353:5:2353:24 | Phi | from 3:m2358_3 | +| ir.cpp:2353:5:2353:24 | Phi | from 3:~m2359_13 | +| ir.cpp:2353:5:2353:24 | SideEffect | ~m2353_7 | +| ir.cpp:2353:31:2353:31 | Address | &:r2353_5 | +| ir.cpp:2354:12:2354:12 | Address | &:r2354_1 | +| ir.cpp:2354:12:2354:12 | Address | &:r2354_1 | +| ir.cpp:2354:12:2354:12 | Arg(this) | this:r2354_1 | +| ir.cpp:2354:12:2354:12 | CallTarget | func:r2354_3 | +| ir.cpp:2354:12:2354:12 | ChiPartial | partial:m2354_5 | +| ir.cpp:2354:12:2354:12 | ChiPartial | partial:m2354_7 | +| ir.cpp:2354:12:2354:12 | ChiTotal | total:m2353_4 | +| ir.cpp:2354:12:2354:12 | ChiTotal | total:m2354_2 | +| ir.cpp:2354:12:2354:12 | SideEffect | ~m2353_4 | +| ir.cpp:2355:8:2355:8 | Address | &:r2355_1 | +| ir.cpp:2355:8:2355:8 | Condition | r2355_2 | +| ir.cpp:2355:8:2355:8 | Load | m2353_6 | +| ir.cpp:2356:9:2356:17 | Address | &:r2356_1 | +| ir.cpp:2356:16:2356:16 | StoreValue | r2356_2 | +| ir.cpp:2358:5:2358:13 | Address | &:r2358_1 | +| ir.cpp:2358:12:2358:12 | StoreValue | r2358_2 | +| ir.cpp:2359:1:2359:1 | Address | &:r2359_1 | +| ir.cpp:2359:1:2359:1 | Address | &:r2359_1 | +| ir.cpp:2359:1:2359:1 | Address | &:r2359_9 | +| ir.cpp:2359:1:2359:1 | Address | &:r2359_9 | +| ir.cpp:2359:1:2359:1 | Arg(this) | this:r2359_1 | +| ir.cpp:2359:1:2359:1 | Arg(this) | this:r2359_9 | +| ir.cpp:2359:1:2359:1 | CallTarget | func:r2359_2 | +| ir.cpp:2359:1:2359:1 | CallTarget | func:r2359_10 | +| ir.cpp:2359:1:2359:1 | ChiPartial | partial:m2359_4 | +| ir.cpp:2359:1:2359:1 | ChiPartial | partial:m2359_7 | +| ir.cpp:2359:1:2359:1 | ChiPartial | partial:m2359_12 | +| ir.cpp:2359:1:2359:1 | ChiPartial | partial:m2359_15 | +| ir.cpp:2359:1:2359:1 | ChiTotal | total:m2354_6 | +| ir.cpp:2359:1:2359:1 | ChiTotal | total:m2354_6 | +| ir.cpp:2359:1:2359:1 | ChiTotal | total:m2354_8 | +| ir.cpp:2359:1:2359:1 | ChiTotal | total:m2354_8 | +| ir.cpp:2359:1:2359:1 | SideEffect | m2354_8 | +| ir.cpp:2359:1:2359:1 | SideEffect | m2354_8 | +| ir.cpp:2359:1:2359:1 | SideEffect | ~m2354_6 | +| ir.cpp:2359:1:2359:1 | SideEffect | ~m2354_6 | +| ir.cpp:2361:6:2361:26 | ChiPartial | partial:m2361_3 | +| ir.cpp:2361:6:2361:26 | ChiTotal | total:m2361_2 | +| ir.cpp:2361:6:2361:26 | SideEffect | ~m2364_5 | +| ir.cpp:2362:12:2362:12 | Address | &:r2362_1 | +| ir.cpp:2362:12:2362:12 | Address | &:r2362_1 | +| ir.cpp:2362:12:2362:12 | Arg(this) | this:r2362_1 | +| ir.cpp:2362:12:2362:12 | CallTarget | func:r2362_3 | +| ir.cpp:2362:12:2362:12 | ChiPartial | partial:m2362_5 | +| ir.cpp:2362:12:2362:12 | ChiPartial | partial:m2362_7 | +| ir.cpp:2362:12:2362:12 | ChiTotal | total:m2361_4 | +| ir.cpp:2362:12:2362:12 | ChiTotal | total:m2362_2 | +| ir.cpp:2362:12:2362:12 | SideEffect | ~m2361_4 | +| ir.cpp:2363:12:2363:19 | CallTarget | func:r2363_1 | +| ir.cpp:2363:12:2363:19 | ChiPartial | partial:m2363_3 | +| ir.cpp:2363:12:2363:19 | ChiTotal | total:m2362_6 | +| ir.cpp:2363:12:2363:19 | SideEffect | ~m2362_6 | +| ir.cpp:2364:1:2364:1 | Address | &:r2364_1 | +| ir.cpp:2364:1:2364:1 | Address | &:r2364_1 | +| ir.cpp:2364:1:2364:1 | Arg(this) | this:r2364_1 | +| ir.cpp:2364:1:2364:1 | CallTarget | func:r2364_2 | +| ir.cpp:2364:1:2364:1 | ChiPartial | partial:m2364_4 | +| ir.cpp:2364:1:2364:1 | ChiPartial | partial:m2364_7 | +| ir.cpp:2364:1:2364:1 | ChiTotal | total:m2362_8 | +| ir.cpp:2364:1:2364:1 | ChiTotal | total:m2363_4 | +| ir.cpp:2364:1:2364:1 | SideEffect | m2362_8 | +| ir.cpp:2364:1:2364:1 | SideEffect | ~m2363_4 | +| ir.cpp:2374:32:2374:47 | Address | &:r2374_5 | +| ir.cpp:2374:32:2374:47 | ChiPartial | partial:m2374_3 | +| ir.cpp:2374:32:2374:47 | ChiTotal | total:m2374_2 | +| ir.cpp:2374:32:2374:47 | Load | m2376_3 | +| ir.cpp:2374:32:2374:47 | SideEffect | m2374_3 | +| ir.cpp:2376:9:2376:44 | Address | &:r2376_1 | +| ir.cpp:2376:16:2376:43 | StoreValue | r2376_2 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_7 | diff --git a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected index aefdbf9d134..356390f9b4f 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected @@ -20,7 +20,7 @@ multipleIRTypes lostReachability backEdgeCountMismatch useNotDominatedByDefinition -| ir.cpp:1488:8:1488:8 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | ir.cpp:1488:8:1488:8 | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() | +| ir.cpp:1535:8:1535:8 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | ir.cpp:1535:8:1535:8 | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() | | try_except.c:13:13:13:13 | Left | Operand 'Left' is not dominated by its definition in function '$@'. | try_except.c:6:6:6:6 | void f() | void f() | | try_except.c:13:13:13:13 | Left | Operand 'Left' is not dominated by its definition in function '$@'. | try_except.c:6:6:6:6 | void f() | void f() | | try_except.c:39:15:39:15 | Left | Operand 'Left' is not dominated by its definition in function '$@'. | try_except.c:32:6:32:6 | void h(int) | void h(int) | diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index 91760c805b9..0c42f3d2af6 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -724,6 +724,420 @@ complex.c: # 58| v58_5(void) = AliasedUse : ~m? # 58| v58_6(void) = ExitFunction : +destructors_for_temps.cpp: +# 9| void ClassWithConstructor::ClassWithConstructor(ClassWithConstructor&&) +# 9| Block 0 +# 9| v9_1(void) = EnterFunction : +# 9| mu9_2(unknown) = AliasedDefinition : +# 9| mu9_3(unknown) = InitializeNonLocal : +# 9| r9_4(glval) = VariableAddress[#this] : +# 9| mu9_5(glval) = InitializeParameter[#this] : &:r9_4 +# 9| r9_6(glval) = Load[#this] : &:r9_4, ~m? +# 9| mu9_7(ClassWithConstructor) = InitializeIndirection[#this] : &:r9_6 +#-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : +#-----| mu0_2(ClassWithConstructor &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 +#-----| r0_3(ClassWithConstructor &&) = Load[(unnamed parameter 0)] : &:r0_1, ~m? +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 9| v9_8(void) = NoOp : +# 9| v9_9(void) = ReturnIndirection[#this] : &:r9_6, ~m? +#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 9| v9_10(void) = ReturnVoid : +# 9| v9_11(void) = AliasedUse : ~m? +# 9| v9_12(void) = ExitFunction : + +# 14| char temp_test() +# 14| Block 0 +# 14| v14_1(void) = EnterFunction : +# 14| mu14_2(unknown) = AliasedDefinition : +# 14| mu14_3(unknown) = InitializeNonLocal : +# 15| r15_1(glval) = VariableAddress[x] : +# 15| r15_2(glval) = VariableAddress[#temp15:14] : +# 15| mu15_3(ClassWithDestructor2) = Uninitialized[#temp15:14] : &:r15_2 +# 15| r15_4(glval) = FunctionAddress[ClassWithDestructor2] : +# 15| v15_5(void) = Call[ClassWithDestructor2] : func:r15_4, this:r15_2 +# 15| mu15_6(unknown) = ^CallSideEffect : ~m? +# 15| mu15_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r15_2 +# 15| r15_8(glval) = FunctionAddress[get_x] : +# 15| r15_9(char) = Call[get_x] : func:r15_8, this:r15_2 +# 15| mu15_10(unknown) = ^CallSideEffect : ~m? +# 15| v15_11(void) = ^IndirectReadSideEffect[-1] : &:r15_2, ~m? +# 15| mu15_12(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r15_2 +# 15| mu15_13(char) = Store[x] : &:r15_1, r15_9 +# 16| r16_1(glval) = VariableAddress[y] : +# 16| mu16_2(ClassWithConstructor) = Uninitialized[y] : &:r16_1 +# 16| r16_3(glval) = FunctionAddress[ClassWithConstructor] : +# 16| r16_4(char) = Constant[97] : +# 16| r16_5(glval) = VariableAddress[#temp16:33] : +# 16| mu16_6(ClassWithDestructor2) = Uninitialized[#temp16:33] : &:r16_5 +# 16| r16_7(glval) = FunctionAddress[ClassWithDestructor2] : +# 16| v16_8(void) = Call[ClassWithDestructor2] : func:r16_7, this:r16_5 +# 16| mu16_9(unknown) = ^CallSideEffect : ~m? +# 16| mu16_10(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r16_5 +# 16| r16_11(glval) = FunctionAddress[get_x] : +# 16| r16_12(char) = Call[get_x] : func:r16_11, this:r16_5 +# 16| mu16_13(unknown) = ^CallSideEffect : ~m? +# 16| v16_14(void) = ^IndirectReadSideEffect[-1] : &:r16_5, ~m? +# 16| mu16_15(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r16_5 +# 16| v16_16(void) = Call[ClassWithConstructor] : func:r16_3, this:r16_1, 0:r16_4, 1:r16_12 +# 16| mu16_17(unknown) = ^CallSideEffect : ~m? +# 16| mu16_18(ClassWithConstructor) = ^IndirectMayWriteSideEffect[-1] : &:r16_1 +# 17| r17_1(glval) = VariableAddress[#return] : +# 17| r17_2(glval) = VariableAddress[#temp17:12] : +# 17| mu17_3(ClassWithDestructor2) = Uninitialized[#temp17:12] : &:r17_2 +# 17| r17_4(glval) = FunctionAddress[ClassWithDestructor2] : +# 17| v17_5(void) = Call[ClassWithDestructor2] : func:r17_4, this:r17_2 +# 17| mu17_6(unknown) = ^CallSideEffect : ~m? +# 17| mu17_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r17_2 +# 17| r17_8(glval) = FunctionAddress[get_x] : +# 17| r17_9(char) = Call[get_x] : func:r17_8, this:r17_2 +# 17| mu17_10(unknown) = ^CallSideEffect : ~m? +# 17| v17_11(void) = ^IndirectReadSideEffect[-1] : &:r17_2, ~m? +# 17| mu17_12(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r17_2 +# 17| mu17_13(char) = Store[#return] : &:r17_1, r17_9 +# 14| r14_4(glval) = VariableAddress[#return] : +# 14| v14_5(void) = ReturnValue : &:r14_4, ~m? +# 14| v14_6(void) = AliasedUse : ~m? +# 14| v14_7(void) = ExitFunction : + +# 21| char temp_test2() +# 21| Block 0 +# 21| v21_1(void) = EnterFunction : +# 21| mu21_2(unknown) = AliasedDefinition : +# 21| mu21_3(unknown) = InitializeNonLocal : +# 22| r22_1(glval) = FunctionAddress[operator new] : +# 22| r22_2(unsigned long) = Constant[1] : +# 22| r22_3(void *) = Call[operator new] : func:r22_1, 0:r22_2 +# 22| mu22_4(unknown) = ^CallSideEffect : ~m? +# 22| mu22_5(unknown) = ^InitializeDynamicAllocation : &:r22_3 +# 22| r22_6(ClassWithDestructor2 *) = Convert : r22_3 +# 22| r22_7(glval) = FunctionAddress[ClassWithDestructor2] : +# 22| v22_8(void) = Call[ClassWithDestructor2] : func:r22_7, this:r22_6 +# 22| mu22_9(unknown) = ^CallSideEffect : ~m? +# 22| mu22_10(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r22_6 +# 23| r23_1(glval) = VariableAddress[#return] : +# 23| r23_2(glval) = VariableAddress[#temp23:12] : +# 23| mu23_3(ClassWithDestructor2) = Uninitialized[#temp23:12] : &:r23_2 +# 23| r23_4(glval) = FunctionAddress[ClassWithDestructor2] : +# 23| v23_5(void) = Call[ClassWithDestructor2] : func:r23_4, this:r23_2 +# 23| mu23_6(unknown) = ^CallSideEffect : ~m? +# 23| mu23_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_2 +# 23| r23_8(glval) = FunctionAddress[get_x] : +# 23| r23_9(char) = Call[get_x] : func:r23_8, this:r23_2 +# 23| mu23_10(unknown) = ^CallSideEffect : ~m? +# 23| v23_11(void) = ^IndirectReadSideEffect[-1] : &:r23_2, ~m? +# 23| mu23_12(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_2 +# 23| r23_13(int) = Convert : r23_9 +# 23| r23_14(glval) = VariableAddress[#temp23:45] : +# 23| mu23_15(ClassWithDestructor2) = Uninitialized[#temp23:45] : &:r23_14 +# 23| r23_16(glval) = FunctionAddress[ClassWithDestructor2] : +# 23| v23_17(void) = Call[ClassWithDestructor2] : func:r23_16, this:r23_14 +# 23| mu23_18(unknown) = ^CallSideEffect : ~m? +# 23| mu23_19(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_14 +# 23| r23_20(glval) = FunctionAddress[get_x] : +# 23| r23_21(char) = Call[get_x] : func:r23_20, this:r23_14 +# 23| mu23_22(unknown) = ^CallSideEffect : ~m? +# 23| v23_23(void) = ^IndirectReadSideEffect[-1] : &:r23_14, ~m? +# 23| mu23_24(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r23_14 +# 23| r23_25(int) = Convert : r23_21 +# 23| r23_26(int) = Add : r23_13, r23_25 +# 23| r23_27(char) = Convert : r23_26 +# 23| mu23_28(char) = Store[#return] : &:r23_1, r23_27 +# 21| r21_4(glval) = VariableAddress[#return] : +# 21| v21_5(void) = ReturnValue : &:r21_4, ~m? +# 21| v21_6(void) = AliasedUse : ~m? +# 21| v21_7(void) = ExitFunction : + +# 29| void temp_test3() +# 29| Block 0 +# 29| v29_1(void) = EnterFunction : +# 29| mu29_2(unknown) = AliasedDefinition : +# 29| mu29_3(unknown) = InitializeNonLocal : +# 30| r30_1(glval) = VariableAddress[rs] : +# 30| r30_2(glval) = VariableAddress[#temp30:38] : +# 30| r30_3(glval) = FunctionAddress[returnValue] : +# 30| r30_4(ClassWithDestructor2) = Call[returnValue] : func:r30_3 +# 30| mu30_5(unknown) = ^CallSideEffect : ~m? +# 30| mu30_6(ClassWithDestructor2) = Store[#temp30:38] : &:r30_2, r30_4 +# 30| r30_7(glval) = Convert : r30_2 +# 30| r30_8(ClassWithDestructor2 &) = CopyValue : r30_7 +# 30| mu30_9(ClassWithDestructor2 &) = Store[rs] : &:r30_1, r30_8 +# 31| v31_1(void) = NoOp : +# 29| v29_4(void) = ReturnVoid : +# 29| v29_5(void) = AliasedUse : ~m? +# 29| v29_6(void) = ExitFunction : + +# 33| void temp_test4() +# 33| Block 0 +# 33| v33_1(void) = EnterFunction : +# 33| mu33_2(unknown) = AliasedDefinition : +# 33| mu33_3(unknown) = InitializeNonLocal : +# 34| r34_1(glval) = VariableAddress[c] : +# 34| mu34_2(ClassWithDestructor2) = Uninitialized[c] : &:r34_1 +# 34| r34_3(glval) = FunctionAddress[ClassWithDestructor2] : +# 34| v34_4(void) = Call[ClassWithDestructor2] : func:r34_3, this:r34_1 +# 34| mu34_5(unknown) = ^CallSideEffect : ~m? +# 34| mu34_6(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r34_1 +# 35| r35_1(glval) = VariableAddress[rs2] : +# 35| r35_2(glval) = VariableAddress[#temp35:39] : +# 35| r35_3(glval) = FunctionAddress[returnValue] : +# 35| r35_4(ClassWithDestructor2) = Call[returnValue] : func:r35_3 +# 35| mu35_5(unknown) = ^CallSideEffect : ~m? +# 35| mu35_6(ClassWithDestructor2) = Store[#temp35:39] : &:r35_2, r35_4 +# 35| r35_7(glval) = Convert : r35_2 +# 35| r35_8(ClassWithDestructor2 &) = CopyValue : r35_7 +# 35| mu35_9(ClassWithDestructor2 &) = Store[rs2] : &:r35_1, r35_8 +# 36| v36_1(void) = NoOp : +# 36| r36_2(glval) = VariableAddress[c] : +# 36| r36_3(glval) = FunctionAddress[~ClassWithDestructor2] : +# 36| v36_4(void) = Call[~ClassWithDestructor2] : func:r36_3, this:r36_2 +# 36| mu36_5(unknown) = ^CallSideEffect : ~m? +# 36| v36_6(void) = ^IndirectReadSideEffect[-1] : &:r36_2, ~m? +# 36| mu36_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r36_2 +# 33| v33_4(void) = ReturnVoid : +# 33| v33_5(void) = AliasedUse : ~m? +# 33| v33_6(void) = ExitFunction : + +# 38| void temp_test5(bool) +# 38| Block 0 +# 38| v38_1(void) = EnterFunction : +# 38| mu38_2(unknown) = AliasedDefinition : +# 38| mu38_3(unknown) = InitializeNonLocal : +# 38| r38_4(glval) = VariableAddress[b] : +# 38| mu38_5(bool) = InitializeParameter[b] : &:r38_4 +# 39| r39_1(glval) = VariableAddress[#temp39:3] : +# 39| r39_2(glval) = VariableAddress[b] : +# 39| r39_3(bool) = Load[b] : &:r39_2, ~m? +# 39| v39_4(void) = ConditionalBranch : r39_3 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 39| Block 1 +# 39| r39_5(glval) = VariableAddress[#temp39:3] : +# 39| r39_6(ClassWithDestructor2) = Load[#temp39:3] : &:r39_5, ~m? +# 39| mu39_7(ClassWithDestructor2) = Store[#temp39:3] : &:r39_1, r39_6 +# 40| v40_1(void) = NoOp : +# 38| v38_6(void) = ReturnVoid : +# 38| v38_7(void) = AliasedUse : ~m? +# 38| v38_8(void) = ExitFunction : + +# 39| Block 2 +# 39| r39_8(glval) = VariableAddress[#temp39:7] : +# 39| mu39_9(ClassWithDestructor2) = Uninitialized[#temp39:7] : &:r39_8 +# 39| r39_10(glval) = FunctionAddress[ClassWithDestructor2] : +# 39| v39_11(void) = Call[ClassWithDestructor2] : func:r39_10, this:r39_8 +# 39| mu39_12(unknown) = ^CallSideEffect : ~m? +# 39| mu39_13(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r39_8 +# 39| r39_14(ClassWithDestructor2) = Load[#temp39:7] : &:r39_8, ~m? +# 39| r39_15(glval) = VariableAddress[#temp39:3] : +# 39| mu39_16(ClassWithDestructor2) = Store[#temp39:3] : &:r39_15, r39_14 +#-----| Goto -> Block 1 + +# 39| Block 3 +# 39| r39_17(glval) = VariableAddress[#temp39:32] : +# 39| mu39_18(ClassWithDestructor2) = Uninitialized[#temp39:32] : &:r39_17 +# 39| r39_19(glval) = FunctionAddress[ClassWithDestructor2] : +# 39| v39_20(void) = Call[ClassWithDestructor2] : func:r39_19, this:r39_17 +# 39| mu39_21(unknown) = ^CallSideEffect : ~m? +# 39| mu39_22(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r39_17 +# 39| r39_23(ClassWithDestructor2) = Load[#temp39:32] : &:r39_17, ~m? +# 39| r39_24(glval) = VariableAddress[#temp39:3] : +# 39| mu39_25(ClassWithDestructor2) = Store[#temp39:3] : &:r39_24, r39_23 +#-----| Goto -> Block 1 + +# 42| void temp_test6(bool) +# 42| Block 0 +# 42| v42_1(void) = EnterFunction : +# 42| mu42_2(unknown) = AliasedDefinition : +# 42| mu42_3(unknown) = InitializeNonLocal : +# 42| r42_4(glval) = VariableAddress[b] : +# 42| mu42_5(bool) = InitializeParameter[b] : &:r42_4 +# 43| r43_1(glval) = VariableAddress[c] : +# 43| mu43_2(ClassWithDestructor2) = Uninitialized[c] : &:r43_1 +# 43| r43_3(glval) = FunctionAddress[ClassWithDestructor2] : +# 43| v43_4(void) = Call[ClassWithDestructor2] : func:r43_3, this:r43_1 +# 43| mu43_5(unknown) = ^CallSideEffect : ~m? +# 43| mu43_6(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r43_1 +# 44| r44_1(glval) = VariableAddress[b] : +# 44| r44_2(bool) = Load[b] : &:r44_1, ~m? +# 44| v44_3(void) = ConditionalBranch : r44_2 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 42| Block 1 +# 42| v42_6(void) = AliasedUse : ~m? +# 42| v42_7(void) = ExitFunction : + +# 42| Block 2 +# 42| v42_8(void) = Unwind : +#-----| Goto -> Block 1 + +# 45| Block 3 +# 45| r45_1(glval) = VariableAddress[#throw45:7] : +# 45| mu45_2(ClassWithConstructor) = Uninitialized[#throw45:7] : &:r45_1 +# 45| r45_3(glval) = FunctionAddress[ClassWithConstructor] : +# 45| r45_4(char) = Constant[120] : +# 45| r45_5(glval) = VariableAddress[#temp45:39] : +# 45| mu45_6(ClassWithDestructor2) = Uninitialized[#temp45:39] : &:r45_5 +# 45| r45_7(glval) = FunctionAddress[ClassWithDestructor2] : +# 45| v45_8(void) = Call[ClassWithDestructor2] : func:r45_7, this:r45_5 +# 45| mu45_9(unknown) = ^CallSideEffect : ~m? +# 45| mu45_10(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r45_5 +# 45| r45_11(glval) = FunctionAddress[get_x] : +# 45| r45_12(char) = Call[get_x] : func:r45_11, this:r45_5 +# 45| mu45_13(unknown) = ^CallSideEffect : ~m? +# 45| v45_14(void) = ^IndirectReadSideEffect[-1] : &:r45_5, ~m? +# 45| mu45_15(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r45_5 +# 45| v45_16(void) = Call[ClassWithConstructor] : func:r45_3, this:r45_1, 0:r45_4, 1:r45_12 +# 45| mu45_17(unknown) = ^CallSideEffect : ~m? +# 45| mu45_18(ClassWithConstructor) = ^IndirectMayWriteSideEffect[-1] : &:r45_1 +# 45| v45_19(void) = ThrowValue : &:r45_1, ~m? +#-----| Exception -> Block 2 + +# 47| Block 4 +# 47| v47_1(void) = NoOp : +# 47| r47_2(glval) = VariableAddress[c] : +# 47| r47_3(glval) = FunctionAddress[~ClassWithDestructor2] : +# 47| v47_4(void) = Call[~ClassWithDestructor2] : func:r47_3, this:r47_2 +# 47| mu47_5(unknown) = ^CallSideEffect : ~m? +# 47| v47_6(void) = ^IndirectReadSideEffect[-1] : &:r47_2, ~m? +# 47| mu47_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r47_2 +# 42| v42_9(void) = ReturnVoid : +#-----| Goto -> Block 1 + +# 49| void temp_test7(bool) +# 49| Block 0 +# 49| v49_1(void) = EnterFunction : +# 49| mu49_2(unknown) = AliasedDefinition : +# 49| mu49_3(unknown) = InitializeNonLocal : +# 49| r49_4(glval) = VariableAddress[b] : +# 49| mu49_5(bool) = InitializeParameter[b] : &:r49_4 +# 50| r50_1(glval) = VariableAddress[c] : +# 50| mu50_2(ClassWithDestructor2) = Uninitialized[c] : &:r50_1 +# 50| r50_3(glval) = FunctionAddress[ClassWithDestructor2] : +# 50| v50_4(void) = Call[ClassWithDestructor2] : func:r50_3, this:r50_1 +# 50| mu50_5(unknown) = ^CallSideEffect : ~m? +# 50| mu50_6(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r50_1 +# 51| r51_1(glval) = VariableAddress[#temp51:5] : +# 51| r51_2(glval) = VariableAddress[b] : +# 51| r51_3(bool) = Load[b] : &:r51_2, ~m? +# 51| v51_4(void) = ConditionalBranch : r51_3 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 49| Block 1 +# 49| v49_6(void) = AliasedUse : ~m? +# 49| v49_7(void) = ExitFunction : + +# 49| Block 2 +# 49| v49_8(void) = Unwind : +#-----| Goto -> Block 1 + +# 51| Block 3 +# 51| r51_5(glval) = VariableAddress[#throw51:9] : +# 51| mu51_6(ClassWithConstructor) = Uninitialized[#throw51:9] : &:r51_5 +# 51| r51_7(glval) = FunctionAddress[ClassWithConstructor] : +# 51| r51_8(char) = Constant[120] : +# 51| r51_9(glval) = VariableAddress[#temp51:41] : +# 51| mu51_10(ClassWithDestructor2) = Uninitialized[#temp51:41] : &:r51_9 +# 51| r51_11(glval) = FunctionAddress[ClassWithDestructor2] : +# 51| v51_12(void) = Call[ClassWithDestructor2] : func:r51_11, this:r51_9 +# 51| mu51_13(unknown) = ^CallSideEffect : ~m? +# 51| mu51_14(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r51_9 +# 51| r51_15(glval) = FunctionAddress[get_x] : +# 51| r51_16(char) = Call[get_x] : func:r51_15, this:r51_9 +# 51| mu51_17(unknown) = ^CallSideEffect : ~m? +# 51| v51_18(void) = ^IndirectReadSideEffect[-1] : &:r51_9, ~m? +# 51| mu51_19(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r51_9 +# 51| v51_20(void) = Call[ClassWithConstructor] : func:r51_7, this:r51_5, 0:r51_8, 1:r51_16 +# 51| mu51_21(unknown) = ^CallSideEffect : ~m? +# 51| mu51_22(ClassWithConstructor) = ^IndirectMayWriteSideEffect[-1] : &:r51_5 +# 51| v51_23(void) = ThrowValue : &:r51_5, ~m? +#-----| Exception -> Block 2 + +# 51| Block 4 +# 51| r51_24(glval) = VariableAddress[#temp51:75] : +# 51| mu51_25(ClassWithDestructor2) = Uninitialized[#temp51:75] : &:r51_24 +# 51| r51_26(glval) = FunctionAddress[ClassWithDestructor2] : +# 51| v51_27(void) = Call[ClassWithDestructor2] : func:r51_26, this:r51_24 +# 51| mu51_28(unknown) = ^CallSideEffect : ~m? +# 51| mu51_29(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r51_24 +# 51| r51_30(ClassWithDestructor2) = Load[#temp51:75] : &:r51_24, ~m? +# 51| r51_31(glval) = VariableAddress[#temp51:5] : +# 51| mu51_32(ClassWithDestructor2) = Store[#temp51:5] : &:r51_31, r51_30 +# 51| r51_33(glval) = VariableAddress[#temp51:5] : +# 51| r51_34(ClassWithDestructor2) = Load[#temp51:5] : &:r51_33, ~m? +# 51| mu51_35(ClassWithDestructor2) = Store[#temp51:5] : &:r51_1, r51_34 +# 52| v52_1(void) = NoOp : +# 52| r52_2(glval) = VariableAddress[c] : +# 52| r52_3(glval) = FunctionAddress[~ClassWithDestructor2] : +# 52| v52_4(void) = Call[~ClassWithDestructor2] : func:r52_3, this:r52_2 +# 52| mu52_5(unknown) = ^CallSideEffect : ~m? +# 52| v52_6(void) = ^IndirectReadSideEffect[-1] : &:r52_2, ~m? +# 52| mu52_7(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r52_2 +# 49| v49_9(void) = ReturnVoid : +#-----| Goto -> Block 1 + +# 54| void temp_test8(bool) +# 54| Block 0 +# 54| v54_1(void) = EnterFunction : +# 54| mu54_2(unknown) = AliasedDefinition : +# 54| mu54_3(unknown) = InitializeNonLocal : +# 54| r54_4(glval) = VariableAddress[b] : +# 54| mu54_5(bool) = InitializeParameter[b] : &:r54_4 +# 55| r55_1(glval) = VariableAddress[#temp55:5] : +# 55| r55_2(glval) = VariableAddress[b] : +# 55| r55_3(bool) = Load[b] : &:r55_2, ~m? +# 55| v55_4(void) = ConditionalBranch : r55_3 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 54| Block 1 +# 54| v54_6(void) = AliasedUse : ~m? +# 54| v54_7(void) = ExitFunction : + +# 54| Block 2 +# 54| v54_8(void) = Unwind : +#-----| Goto -> Block 1 + +# 55| Block 3 +# 55| r55_5(glval) = VariableAddress[#throw55:9] : +# 55| mu55_6(ClassWithConstructor) = Uninitialized[#throw55:9] : &:r55_5 +# 55| r55_7(glval) = FunctionAddress[ClassWithConstructor] : +# 55| r55_8(char) = Constant[120] : +# 55| r55_9(glval) = VariableAddress[#temp55:41] : +# 55| mu55_10(ClassWithDestructor2) = Uninitialized[#temp55:41] : &:r55_9 +# 55| r55_11(glval) = FunctionAddress[ClassWithDestructor2] : +# 55| v55_12(void) = Call[ClassWithDestructor2] : func:r55_11, this:r55_9 +# 55| mu55_13(unknown) = ^CallSideEffect : ~m? +# 55| mu55_14(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r55_9 +# 55| r55_15(glval) = FunctionAddress[get_x] : +# 55| r55_16(char) = Call[get_x] : func:r55_15, this:r55_9 +# 55| mu55_17(unknown) = ^CallSideEffect : ~m? +# 55| v55_18(void) = ^IndirectReadSideEffect[-1] : &:r55_9, ~m? +# 55| mu55_19(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r55_9 +# 55| v55_20(void) = Call[ClassWithConstructor] : func:r55_7, this:r55_5, 0:r55_8, 1:r55_16 +# 55| mu55_21(unknown) = ^CallSideEffect : ~m? +# 55| mu55_22(ClassWithConstructor) = ^IndirectMayWriteSideEffect[-1] : &:r55_5 +# 55| v55_23(void) = ThrowValue : &:r55_5, ~m? +#-----| Exception -> Block 2 + +# 55| Block 4 +# 55| r55_24(glval) = VariableAddress[#temp55:75] : +# 55| mu55_25(ClassWithDestructor2) = Uninitialized[#temp55:75] : &:r55_24 +# 55| r55_26(glval) = FunctionAddress[ClassWithDestructor2] : +# 55| v55_27(void) = Call[ClassWithDestructor2] : func:r55_26, this:r55_24 +# 55| mu55_28(unknown) = ^CallSideEffect : ~m? +# 55| mu55_29(ClassWithDestructor2) = ^IndirectMayWriteSideEffect[-1] : &:r55_24 +# 55| r55_30(ClassWithDestructor2) = Load[#temp55:75] : &:r55_24, ~m? +# 55| r55_31(glval) = VariableAddress[#temp55:5] : +# 55| mu55_32(ClassWithDestructor2) = Store[#temp55:5] : &:r55_31, r55_30 +# 55| r55_33(glval) = VariableAddress[#temp55:5] : +# 55| r55_34(ClassWithDestructor2) = Load[#temp55:5] : &:r55_33, ~m? +# 55| mu55_35(ClassWithDestructor2) = Store[#temp55:5] : &:r55_1, r55_34 +# 56| v56_1(void) = NoOp : +# 54| v54_9(void) = ReturnVoid : +#-----| Goto -> Block 1 + ir.c: # 7| void MyCoordsTest(int) # 7| Block 0 @@ -6411,3717 +6825,3731 @@ ir.cpp: # 1054| v1054_41(void) = AliasedUse : ~m? # 1054| v1054_42(void) = ExitFunction : -# 1079| void RangeBasedFor(vector const&) -# 1079| Block 0 -# 1079| v1079_1(void) = EnterFunction : -# 1079| mu1079_2(unknown) = AliasedDefinition : -# 1079| mu1079_3(unknown) = InitializeNonLocal : -# 1079| r1079_4(glval &>) = VariableAddress[v] : -# 1079| mu1079_5(vector &) = InitializeParameter[v] : &:r1079_4 -# 1079| r1079_6(vector &) = Load[v] : &:r1079_4, ~m? -# 1079| mu1079_7(unknown) = InitializeIndirection[v] : &:r1079_6 -# 1080| r1080_1(glval &>) = VariableAddress[(__range)] : -# 1080| r1080_2(glval &>) = VariableAddress[v] : -# 1080| r1080_3(vector &) = Load[v] : &:r1080_2, ~m? -# 1080| r1080_4(glval>) = CopyValue : r1080_3 -# 1080| r1080_5(vector &) = CopyValue : r1080_4 -# 1080| mu1080_6(vector &) = Store[(__range)] : &:r1080_1, r1080_5 -# 1080| r1080_7(glval) = VariableAddress[(__begin)] : -# 1080| r1080_8(glval &>) = VariableAddress[(__range)] : -# 1080| r1080_9(vector &) = Load[(__range)] : &:r1080_8, ~m? -#-----| r0_1(glval>) = CopyValue : r1080_9 -# 1080| r1080_10(glval) = FunctionAddress[begin] : -# 1080| r1080_11(iterator) = Call[begin] : func:r1080_10, this:r0_1 -# 1080| mu1080_12(unknown) = ^CallSideEffect : ~m? -#-----| v0_2(void) = ^IndirectReadSideEffect[-1] : &:r0_1, ~m? -# 1080| mu1080_13(iterator) = Store[(__begin)] : &:r1080_7, r1080_11 -# 1080| r1080_14(glval) = VariableAddress[(__end)] : -# 1080| r1080_15(glval &>) = VariableAddress[(__range)] : -# 1080| r1080_16(vector &) = Load[(__range)] : &:r1080_15, ~m? -#-----| r0_3(glval>) = CopyValue : r1080_16 -# 1080| r1080_17(glval) = FunctionAddress[end] : -# 1080| r1080_18(iterator) = Call[end] : func:r1080_17, this:r0_3 -# 1080| mu1080_19(unknown) = ^CallSideEffect : ~m? -#-----| v0_4(void) = ^IndirectReadSideEffect[-1] : &:r0_3, ~m? -# 1080| mu1080_20(iterator) = Store[(__end)] : &:r1080_14, r1080_18 +# 1126| void RangeBasedFor(std::vector const&) +# 1126| Block 0 +# 1126| v1126_1(void) = EnterFunction : +# 1126| mu1126_2(unknown) = AliasedDefinition : +# 1126| mu1126_3(unknown) = InitializeNonLocal : +# 1126| r1126_4(glval &>) = VariableAddress[v] : +# 1126| mu1126_5(vector &) = InitializeParameter[v] : &:r1126_4 +# 1126| r1126_6(vector &) = Load[v] : &:r1126_4, ~m? +# 1126| mu1126_7(unknown) = InitializeIndirection[v] : &:r1126_6 +# 1127| r1127_1(glval &>) = VariableAddress[(__range)] : +# 1127| r1127_2(glval &>) = VariableAddress[v] : +# 1127| r1127_3(vector &) = Load[v] : &:r1127_2, ~m? +# 1127| r1127_4(glval>) = CopyValue : r1127_3 +# 1127| r1127_5(vector &) = CopyValue : r1127_4 +# 1127| mu1127_6(vector &) = Store[(__range)] : &:r1127_1, r1127_5 +# 1127| r1127_7(glval>) = VariableAddress[(__begin)] : +# 1127| r1127_8(glval &>) = VariableAddress[(__range)] : +# 1127| r1127_9(vector &) = Load[(__range)] : &:r1127_8, ~m? +#-----| r0_1(glval>) = CopyValue : r1127_9 +# 1127| r1127_10(glval) = FunctionAddress[begin] : +# 1127| r1127_11(iterator) = Call[begin] : func:r1127_10, this:r0_1 +#-----| v0_2(void) = ^IndirectReadSideEffect[-1] : &:r0_1, ~m? +# 1127| mu1127_12(iterator) = Store[(__begin)] : &:r1127_7, r1127_11 +# 1127| r1127_13(glval>) = VariableAddress[(__end)] : +# 1127| r1127_14(glval &>) = VariableAddress[(__range)] : +# 1127| r1127_15(vector &) = Load[(__range)] : &:r1127_14, ~m? +#-----| r0_3(glval>) = CopyValue : r1127_15 +# 1127| r1127_16(glval) = FunctionAddress[end] : +# 1127| r1127_17(iterator) = Call[end] : func:r1127_16, this:r0_3 +#-----| v0_4(void) = ^IndirectReadSideEffect[-1] : &:r0_3, ~m? +# 1127| mu1127_18(iterator) = Store[(__end)] : &:r1127_13, r1127_17 #-----| Goto -> Block 1 -# 1080| Block 1 -# 1080| r1080_21(glval) = VariableAddress[(__begin)] : -#-----| r0_5(glval) = Convert : r1080_21 -# 1080| r1080_22(glval) = FunctionAddress[operator!=] : -# 1080| r1080_23(glval) = VariableAddress[(__end)] : -# 1080| r1080_24(iterator) = Load[(__end)] : &:r1080_23, ~m? -# 1080| r1080_25(bool) = Call[operator!=] : func:r1080_22, this:r0_5, 0:r1080_24 -# 1080| mu1080_26(unknown) = ^CallSideEffect : ~m? -#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? -# 1080| v1080_27(void) = ConditionalBranch : r1080_25 +# 1127| Block 1 +# 1127| r1127_19(glval>) = VariableAddress[(__begin)] : +#-----| r0_5(glval>) = Convert : r1127_19 +# 1127| r1127_20(glval) = FunctionAddress[operator!=] : +#-----| r0_6(glval>) = VariableAddress[#temp0:0] : +#-----| mu0_7(iterator) = Uninitialized[#temp0:0] : &:r0_6 +# 1127| r1127_21(glval) = FunctionAddress[iterator] : +# 1127| r1127_22(glval>) = VariableAddress[(__end)] : +#-----| r0_8(glval>) = Convert : r1127_22 +#-----| r0_9(iterator &) = CopyValue : r0_8 +# 1127| v1127_23(void) = Call[iterator] : func:r1127_21, this:r0_6, 0:r0_9 +# 1127| mu1127_24(unknown) = ^CallSideEffect : ~m? +#-----| v0_10(void) = ^BufferReadSideEffect[0] : &:r0_9, ~m? +# 1127| mu1127_25(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_6 +#-----| r0_11(iterator) = Load[#temp0:0] : &:r0_6, ~m? +# 1127| r1127_26(bool) = Call[operator!=] : func:r1127_20, this:r0_5, 0:r0_11 +# 1127| mu1127_27(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? +# 1127| v1127_28(void) = ConditionalBranch : r1127_26 #-----| False -> Block 5 #-----| True -> Block 2 -# 1080| Block 2 -# 1080| r1080_28(glval) = VariableAddress[e] : -# 1080| r1080_29(glval) = VariableAddress[(__begin)] : -#-----| r0_7(glval) = Convert : r1080_29 -# 1080| r1080_30(glval) = FunctionAddress[operator*] : -# 1080| r1080_31(int &) = Call[operator*] : func:r1080_30, this:r0_7 -# 1080| mu1080_32(unknown) = ^CallSideEffect : ~m? -#-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? -# 1080| r1080_33(int) = Load[?] : &:r1080_31, ~m? -# 1080| mu1080_34(int) = Store[e] : &:r1080_28, r1080_33 -# 1081| r1081_1(glval) = VariableAddress[e] : -# 1081| r1081_2(int) = Load[e] : &:r1081_1, ~m? -# 1081| r1081_3(int) = Constant[0] : -# 1081| r1081_4(bool) = CompareGT : r1081_2, r1081_3 -# 1081| v1081_5(void) = ConditionalBranch : r1081_4 +# 1127| Block 2 +# 1127| r1127_29(glval) = VariableAddress[e] : +# 1127| r1127_30(glval>) = VariableAddress[(__begin)] : +#-----| r0_13(glval>) = Convert : r1127_30 +# 1127| r1127_31(glval) = FunctionAddress[operator*] : +# 1127| r1127_32(int &) = Call[operator*] : func:r1127_31, this:r0_13 +# 1127| mu1127_33(unknown) = ^CallSideEffect : ~m? +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, ~m? +# 1127| r1127_34(int) = Load[?] : &:r1127_32, ~m? +# 1127| mu1127_35(int) = Store[e] : &:r1127_29, r1127_34 +# 1128| r1128_1(glval) = VariableAddress[e] : +# 1128| r1128_2(int) = Load[e] : &:r1128_1, ~m? +# 1128| r1128_3(int) = Constant[0] : +# 1128| r1128_4(bool) = CompareGT : r1128_2, r1128_3 +# 1128| v1128_5(void) = ConditionalBranch : r1128_4 #-----| False -> Block 4 #-----| True -> Block 3 -# 1082| Block 3 -# 1082| v1082_1(void) = NoOp : +# 1129| Block 3 +# 1129| v1129_1(void) = NoOp : #-----| Goto -> Block 4 -# 1080| Block 4 -# 1080| v1080_35(void) = NoOp : -# 1080| r1080_36(glval) = VariableAddress[(__begin)] : -# 1080| r1080_37(glval) = FunctionAddress[operator++] : -# 1080| r1080_38(iterator &) = Call[operator++] : func:r1080_37, this:r1080_36 -# 1080| mu1080_39(unknown) = ^CallSideEffect : ~m? -# 1080| v1080_40(void) = ^IndirectReadSideEffect[-1] : &:r1080_36, ~m? -# 1080| mu1080_41(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1080_36 -# 1080| r1080_42(glval) = CopyValue : r1080_38 +# 1127| Block 4 +# 1127| v1127_36(void) = NoOp : +# 1127| r1127_37(glval>) = VariableAddress[(__begin)] : +# 1127| r1127_38(glval) = FunctionAddress[operator++] : +# 1127| r1127_39(iterator &) = Call[operator++] : func:r1127_38, this:r1127_37 +# 1127| mu1127_40(unknown) = ^CallSideEffect : ~m? +# 1127| v1127_41(void) = ^IndirectReadSideEffect[-1] : &:r1127_37, ~m? +# 1127| mu1127_42(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1127_37 +# 1127| r1127_43(glval>) = CopyValue : r1127_39 #-----| Goto (back edge) -> Block 1 -# 1086| Block 5 -# 1086| r1086_1(glval &>) = VariableAddress[(__range)] : -# 1086| r1086_2(glval &>) = VariableAddress[v] : -# 1086| r1086_3(vector &) = Load[v] : &:r1086_2, ~m? -# 1086| r1086_4(glval>) = CopyValue : r1086_3 -# 1086| r1086_5(vector &) = CopyValue : r1086_4 -# 1086| mu1086_6(vector &) = Store[(__range)] : &:r1086_1, r1086_5 -# 1086| r1086_7(glval) = VariableAddress[(__begin)] : -# 1086| r1086_8(glval &>) = VariableAddress[(__range)] : -# 1086| r1086_9(vector &) = Load[(__range)] : &:r1086_8, ~m? -#-----| r0_9(glval>) = CopyValue : r1086_9 -# 1086| r1086_10(glval) = FunctionAddress[begin] : -# 1086| r1086_11(iterator) = Call[begin] : func:r1086_10, this:r0_9 -# 1086| mu1086_12(unknown) = ^CallSideEffect : ~m? -#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, ~m? -# 1086| mu1086_13(iterator) = Store[(__begin)] : &:r1086_7, r1086_11 -# 1086| r1086_14(glval) = VariableAddress[(__end)] : -# 1086| r1086_15(glval &>) = VariableAddress[(__range)] : -# 1086| r1086_16(vector &) = Load[(__range)] : &:r1086_15, ~m? -#-----| r0_11(glval>) = CopyValue : r1086_16 -# 1086| r1086_17(glval) = FunctionAddress[end] : -# 1086| r1086_18(iterator) = Call[end] : func:r1086_17, this:r0_11 -# 1086| mu1086_19(unknown) = ^CallSideEffect : ~m? -#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m? -# 1086| mu1086_20(iterator) = Store[(__end)] : &:r1086_14, r1086_18 +# 1133| Block 5 +# 1133| r1133_1(glval &>) = VariableAddress[(__range)] : +# 1133| r1133_2(glval &>) = VariableAddress[v] : +# 1133| r1133_3(vector &) = Load[v] : &:r1133_2, ~m? +# 1133| r1133_4(glval>) = CopyValue : r1133_3 +# 1133| r1133_5(vector &) = CopyValue : r1133_4 +# 1133| mu1133_6(vector &) = Store[(__range)] : &:r1133_1, r1133_5 +# 1133| r1133_7(glval>) = VariableAddress[(__begin)] : +# 1133| r1133_8(glval &>) = VariableAddress[(__range)] : +# 1133| r1133_9(vector &) = Load[(__range)] : &:r1133_8, ~m? +#-----| r0_15(glval>) = CopyValue : r1133_9 +# 1133| r1133_10(glval) = FunctionAddress[begin] : +# 1133| r1133_11(iterator) = Call[begin] : func:r1133_10, this:r0_15 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? +# 1133| mu1133_12(iterator) = Store[(__begin)] : &:r1133_7, r1133_11 +# 1133| r1133_13(glval>) = VariableAddress[(__end)] : +# 1133| r1133_14(glval &>) = VariableAddress[(__range)] : +# 1133| r1133_15(vector &) = Load[(__range)] : &:r1133_14, ~m? +#-----| r0_17(glval>) = CopyValue : r1133_15 +# 1133| r1133_16(glval) = FunctionAddress[end] : +# 1133| r1133_17(iterator) = Call[end] : func:r1133_16, this:r0_17 +#-----| v0_18(void) = ^IndirectReadSideEffect[-1] : &:r0_17, ~m? +# 1133| mu1133_18(iterator) = Store[(__end)] : &:r1133_13, r1133_17 #-----| Goto -> Block 6 -# 1086| Block 6 -# 1086| r1086_21(glval) = VariableAddress[(__begin)] : -#-----| r0_13(glval) = Convert : r1086_21 -# 1086| r1086_22(glval) = FunctionAddress[operator!=] : -# 1086| r1086_23(glval) = VariableAddress[(__end)] : -# 1086| r1086_24(iterator) = Load[(__end)] : &:r1086_23, ~m? -# 1086| r1086_25(bool) = Call[operator!=] : func:r1086_22, this:r0_13, 0:r1086_24 -# 1086| mu1086_26(unknown) = ^CallSideEffect : ~m? -#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, ~m? -# 1086| v1086_27(void) = ConditionalBranch : r1086_25 +# 1133| Block 6 +# 1133| r1133_19(glval>) = VariableAddress[(__begin)] : +#-----| r0_19(glval>) = Convert : r1133_19 +# 1133| r1133_20(glval) = FunctionAddress[operator!=] : +#-----| r0_20(glval>) = VariableAddress[#temp0:0] : +#-----| mu0_21(iterator) = Uninitialized[#temp0:0] : &:r0_20 +# 1133| r1133_21(glval) = FunctionAddress[iterator] : +# 1133| r1133_22(glval>) = VariableAddress[(__end)] : +#-----| r0_22(glval>) = Convert : r1133_22 +#-----| r0_23(iterator &) = CopyValue : r0_22 +# 1133| v1133_23(void) = Call[iterator] : func:r1133_21, this:r0_20, 0:r0_23 +# 1133| mu1133_24(unknown) = ^CallSideEffect : ~m? +#-----| v0_24(void) = ^BufferReadSideEffect[0] : &:r0_23, ~m? +# 1133| mu1133_25(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_20 +#-----| r0_25(iterator) = Load[#temp0:0] : &:r0_20, ~m? +# 1133| r1133_26(bool) = Call[operator!=] : func:r1133_20, this:r0_19, 0:r0_25 +# 1133| mu1133_27(unknown) = ^CallSideEffect : ~m? +#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_19, ~m? +# 1133| v1133_28(void) = ConditionalBranch : r1133_26 #-----| False -> Block 10 #-----| True -> Block 8 -# 1086| Block 7 -# 1086| r1086_28(glval) = VariableAddress[(__begin)] : -# 1086| r1086_29(glval) = FunctionAddress[operator++] : -# 1086| r1086_30(iterator &) = Call[operator++] : func:r1086_29, this:r1086_28 -# 1086| mu1086_31(unknown) = ^CallSideEffect : ~m? -# 1086| v1086_32(void) = ^IndirectReadSideEffect[-1] : &:r1086_28, ~m? -# 1086| mu1086_33(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1086_28 -# 1086| r1086_34(glval) = CopyValue : r1086_30 +# 1133| Block 7 +# 1133| r1133_29(glval>) = VariableAddress[(__begin)] : +# 1133| r1133_30(glval) = FunctionAddress[operator++] : +# 1133| r1133_31(iterator &) = Call[operator++] : func:r1133_30, this:r1133_29 +# 1133| mu1133_32(unknown) = ^CallSideEffect : ~m? +# 1133| v1133_33(void) = ^IndirectReadSideEffect[-1] : &:r1133_29, ~m? +# 1133| mu1133_34(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1133_29 +# 1133| r1133_35(glval>) = CopyValue : r1133_31 #-----| Goto (back edge) -> Block 6 -# 1086| Block 8 -# 1086| r1086_35(glval) = VariableAddress[e] : -# 1086| r1086_36(glval) = VariableAddress[(__begin)] : -#-----| r0_15(glval) = Convert : r1086_36 -# 1086| r1086_37(glval) = FunctionAddress[operator*] : -# 1086| r1086_38(int &) = Call[operator*] : func:r1086_37, this:r0_15 -# 1086| mu1086_39(unknown) = ^CallSideEffect : ~m? -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? -# 1086| r1086_40(glval) = CopyValue : r1086_38 -# 1086| r1086_41(glval) = Convert : r1086_40 -# 1086| r1086_42(int &) = CopyValue : r1086_41 -# 1086| mu1086_43(int &) = Store[e] : &:r1086_35, r1086_42 -# 1087| r1087_1(glval) = VariableAddress[e] : -# 1087| r1087_2(int &) = Load[e] : &:r1087_1, ~m? -# 1087| r1087_3(int) = Load[?] : &:r1087_2, ~m? -# 1087| r1087_4(int) = Constant[5] : -# 1087| r1087_5(bool) = CompareLT : r1087_3, r1087_4 -# 1087| v1087_6(void) = ConditionalBranch : r1087_5 +# 1133| Block 8 +# 1133| r1133_36(glval) = VariableAddress[e] : +# 1133| r1133_37(glval>) = VariableAddress[(__begin)] : +#-----| r0_27(glval>) = Convert : r1133_37 +# 1133| r1133_38(glval) = FunctionAddress[operator*] : +# 1133| r1133_39(int &) = Call[operator*] : func:r1133_38, this:r0_27 +# 1133| mu1133_40(unknown) = ^CallSideEffect : ~m? +#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, ~m? +# 1133| r1133_41(glval) = CopyValue : r1133_39 +# 1133| r1133_42(glval) = Convert : r1133_41 +# 1133| r1133_43(int &) = CopyValue : r1133_42 +# 1133| mu1133_44(int &) = Store[e] : &:r1133_36, r1133_43 +# 1134| r1134_1(glval) = VariableAddress[e] : +# 1134| r1134_2(int &) = Load[e] : &:r1134_1, ~m? +# 1134| r1134_3(int) = Load[?] : &:r1134_2, ~m? +# 1134| r1134_4(int) = Constant[5] : +# 1134| r1134_5(bool) = CompareLT : r1134_3, r1134_4 +# 1134| v1134_6(void) = ConditionalBranch : r1134_5 #-----| False -> Block 7 #-----| True -> Block 9 -# 1088| Block 9 -# 1088| v1088_1(void) = NoOp : +# 1135| Block 9 +# 1135| v1135_1(void) = NoOp : #-----| Goto -> Block 10 -# 1090| Block 10 -# 1090| v1090_1(void) = NoOp : -# 1091| v1091_1(void) = NoOp : -# 1079| v1079_8(void) = ReturnIndirection[v] : &:r1079_6, ~m? -# 1079| v1079_9(void) = ReturnVoid : -# 1079| v1079_10(void) = AliasedUse : ~m? -# 1079| v1079_11(void) = ExitFunction : +# 1137| Block 10 +# 1137| v1137_1(void) = NoOp : +# 1138| v1138_1(void) = NoOp : +# 1126| v1126_8(void) = ReturnIndirection[v] : &:r1126_6, ~m? +# 1126| v1126_9(void) = ReturnVoid : +# 1126| v1126_10(void) = AliasedUse : ~m? +# 1126| v1126_11(void) = ExitFunction : -# 1110| int AsmStmt(int) -# 1110| Block 0 -# 1110| v1110_1(void) = EnterFunction : -# 1110| mu1110_2(unknown) = AliasedDefinition : -# 1110| mu1110_3(unknown) = InitializeNonLocal : -# 1110| r1110_4(glval) = VariableAddress[x] : -# 1110| mu1110_5(int) = InitializeParameter[x] : &:r1110_4 -# 1111| mu1111_1(unknown) = InlineAsm : ~m? -# 1112| r1112_1(glval) = VariableAddress[#return] : -# 1112| r1112_2(glval) = VariableAddress[x] : -# 1112| r1112_3(int) = Load[x] : &:r1112_2, ~m? -# 1112| mu1112_4(int) = Store[#return] : &:r1112_1, r1112_3 -# 1110| r1110_6(glval) = VariableAddress[#return] : -# 1110| v1110_7(void) = ReturnValue : &:r1110_6, ~m? -# 1110| v1110_8(void) = AliasedUse : ~m? -# 1110| v1110_9(void) = ExitFunction : +# 1157| int AsmStmt(int) +# 1157| Block 0 +# 1157| v1157_1(void) = EnterFunction : +# 1157| mu1157_2(unknown) = AliasedDefinition : +# 1157| mu1157_3(unknown) = InitializeNonLocal : +# 1157| r1157_4(glval) = VariableAddress[x] : +# 1157| mu1157_5(int) = InitializeParameter[x] : &:r1157_4 +# 1158| mu1158_1(unknown) = InlineAsm : ~m? +# 1159| r1159_1(glval) = VariableAddress[#return] : +# 1159| r1159_2(glval) = VariableAddress[x] : +# 1159| r1159_3(int) = Load[x] : &:r1159_2, ~m? +# 1159| mu1159_4(int) = Store[#return] : &:r1159_1, r1159_3 +# 1157| r1157_6(glval) = VariableAddress[#return] : +# 1157| v1157_7(void) = ReturnValue : &:r1157_6, ~m? +# 1157| v1157_8(void) = AliasedUse : ~m? +# 1157| v1157_9(void) = ExitFunction : -# 1115| void AsmStmtWithOutputs(unsigned int&, unsigned int, unsigned int&, unsigned int) -# 1115| Block 0 -# 1115| v1115_1(void) = EnterFunction : -# 1115| mu1115_2(unknown) = AliasedDefinition : -# 1115| mu1115_3(unknown) = InitializeNonLocal : -# 1115| r1115_4(glval) = VariableAddress[a] : -# 1115| mu1115_5(unsigned int &) = InitializeParameter[a] : &:r1115_4 -# 1115| r1115_6(unsigned int &) = Load[a] : &:r1115_4, ~m? -# 1115| mu1115_7(unknown) = InitializeIndirection[a] : &:r1115_6 -# 1115| r1115_8(glval) = VariableAddress[b] : -# 1115| mu1115_9(unsigned int) = InitializeParameter[b] : &:r1115_8 -# 1115| r1115_10(glval) = VariableAddress[c] : -# 1115| mu1115_11(unsigned int &) = InitializeParameter[c] : &:r1115_10 -# 1115| r1115_12(unsigned int &) = Load[c] : &:r1115_10, ~m? -# 1115| mu1115_13(unknown) = InitializeIndirection[c] : &:r1115_12 -# 1115| r1115_14(glval) = VariableAddress[d] : -# 1115| mu1115_15(unsigned int) = InitializeParameter[d] : &:r1115_14 -# 1120| r1120_1(glval) = VariableAddress[a] : -# 1120| r1120_2(unsigned int &) = Load[a] : &:r1120_1, ~m? -# 1120| r1120_3(glval) = CopyValue : r1120_2 -# 1120| r1120_4(glval) = VariableAddress[b] : -# 1120| r1120_5(glval) = VariableAddress[c] : -# 1120| r1120_6(unsigned int &) = Load[c] : &:r1120_5, ~m? -# 1120| r1120_7(unsigned int) = Load[?] : &:r1120_6, ~m? -# 1120| r1120_8(glval) = VariableAddress[d] : -# 1120| r1120_9(unsigned int) = Load[d] : &:r1120_8, ~m? -# 1117| mu1117_1(unknown) = InlineAsm : ~m?, 0:r1120_3, 1:r1120_4, 2:r1120_7, 3:r1120_9 -# 1122| v1122_1(void) = NoOp : -# 1115| v1115_16(void) = ReturnIndirection[a] : &:r1115_6, ~m? -# 1115| v1115_17(void) = ReturnIndirection[c] : &:r1115_12, ~m? -# 1115| v1115_18(void) = ReturnVoid : -# 1115| v1115_19(void) = AliasedUse : ~m? -# 1115| v1115_20(void) = ExitFunction : +# 1162| void AsmStmtWithOutputs(unsigned int&, unsigned int, unsigned int&, unsigned int) +# 1162| Block 0 +# 1162| v1162_1(void) = EnterFunction : +# 1162| mu1162_2(unknown) = AliasedDefinition : +# 1162| mu1162_3(unknown) = InitializeNonLocal : +# 1162| r1162_4(glval) = VariableAddress[a] : +# 1162| mu1162_5(unsigned int &) = InitializeParameter[a] : &:r1162_4 +# 1162| r1162_6(unsigned int &) = Load[a] : &:r1162_4, ~m? +# 1162| mu1162_7(unknown) = InitializeIndirection[a] : &:r1162_6 +# 1162| r1162_8(glval) = VariableAddress[b] : +# 1162| mu1162_9(unsigned int) = InitializeParameter[b] : &:r1162_8 +# 1162| r1162_10(glval) = VariableAddress[c] : +# 1162| mu1162_11(unsigned int &) = InitializeParameter[c] : &:r1162_10 +# 1162| r1162_12(unsigned int &) = Load[c] : &:r1162_10, ~m? +# 1162| mu1162_13(unknown) = InitializeIndirection[c] : &:r1162_12 +# 1162| r1162_14(glval) = VariableAddress[d] : +# 1162| mu1162_15(unsigned int) = InitializeParameter[d] : &:r1162_14 +# 1167| r1167_1(glval) = VariableAddress[a] : +# 1167| r1167_2(unsigned int &) = Load[a] : &:r1167_1, ~m? +# 1167| r1167_3(glval) = CopyValue : r1167_2 +# 1167| r1167_4(glval) = VariableAddress[b] : +# 1167| r1167_5(glval) = VariableAddress[c] : +# 1167| r1167_6(unsigned int &) = Load[c] : &:r1167_5, ~m? +# 1167| r1167_7(unsigned int) = Load[?] : &:r1167_6, ~m? +# 1167| r1167_8(glval) = VariableAddress[d] : +# 1167| r1167_9(unsigned int) = Load[d] : &:r1167_8, ~m? +# 1164| mu1164_1(unknown) = InlineAsm : ~m?, 0:r1167_3, 1:r1167_4, 2:r1167_7, 3:r1167_9 +# 1169| v1169_1(void) = NoOp : +# 1162| v1162_16(void) = ReturnIndirection[a] : &:r1162_6, ~m? +# 1162| v1162_17(void) = ReturnIndirection[c] : &:r1162_12, ~m? +# 1162| v1162_18(void) = ReturnVoid : +# 1162| v1162_19(void) = AliasedUse : ~m? +# 1162| v1162_20(void) = ExitFunction : -# 1124| void ExternDeclarations() -# 1124| Block 0 -# 1124| v1124_1(void) = EnterFunction : -# 1124| mu1124_2(unknown) = AliasedDefinition : -# 1124| mu1124_3(unknown) = InitializeNonLocal : -# 1127| r1127_1(glval) = VariableAddress[x] : -# 1127| mu1127_2(int) = Uninitialized[x] : &:r1127_1 -# 1128| r1128_1(glval) = VariableAddress[y] : -# 1128| mu1128_2(int) = Uninitialized[y] : &:r1128_1 -# 1129| r1129_1(glval) = VariableAddress[h] : -# 1129| mu1129_2(int) = Uninitialized[h] : &:r1129_1 -# 1131| v1131_1(void) = NoOp : -# 1124| v1124_4(void) = ReturnVoid : -# 1124| v1124_5(void) = AliasedUse : ~m? -# 1124| v1124_6(void) = ExitFunction : +# 1171| void ExternDeclarations() +# 1171| Block 0 +# 1171| v1171_1(void) = EnterFunction : +# 1171| mu1171_2(unknown) = AliasedDefinition : +# 1171| mu1171_3(unknown) = InitializeNonLocal : +# 1174| r1174_1(glval) = VariableAddress[x] : +# 1174| mu1174_2(int) = Uninitialized[x] : &:r1174_1 +# 1175| r1175_1(glval) = VariableAddress[y] : +# 1175| mu1175_2(int) = Uninitialized[y] : &:r1175_1 +# 1176| r1176_1(glval) = VariableAddress[h] : +# 1176| mu1176_2(int) = Uninitialized[h] : &:r1176_1 +# 1178| v1178_1(void) = NoOp : +# 1171| v1171_4(void) = ReturnVoid : +# 1171| v1171_5(void) = AliasedUse : ~m? +# 1171| v1171_6(void) = ExitFunction : -# 1139| void ExternDeclarationsInMacro() -# 1139| Block 0 -# 1139| v1139_1(void) = EnterFunction : -# 1139| mu1139_2(unknown) = AliasedDefinition : -# 1139| mu1139_3(unknown) = InitializeNonLocal : -# 1141| r1141_1(glval) = VariableAddress[i] : -# 1141| r1141_2(int) = Constant[0] : -# 1141| mu1141_3(int) = Store[i] : &:r1141_1, r1141_2 +# 1186| void ExternDeclarationsInMacro() +# 1186| Block 0 +# 1186| v1186_1(void) = EnterFunction : +# 1186| mu1186_2(unknown) = AliasedDefinition : +# 1186| mu1186_3(unknown) = InitializeNonLocal : +# 1188| r1188_1(glval) = VariableAddress[i] : +# 1188| r1188_2(int) = Constant[0] : +# 1188| mu1188_3(int) = Store[i] : &:r1188_1, r1188_2 #-----| Goto -> Block 1 -# 1141| Block 1 -# 1141| r1141_4(glval) = VariableAddress[i] : -# 1141| r1141_5(int) = Load[i] : &:r1141_4, ~m? -# 1141| r1141_6(int) = Constant[10] : -# 1141| r1141_7(bool) = CompareLT : r1141_5, r1141_6 -# 1141| v1141_8(void) = ConditionalBranch : r1141_7 +# 1188| Block 1 +# 1188| r1188_4(glval) = VariableAddress[i] : +# 1188| r1188_5(int) = Load[i] : &:r1188_4, ~m? +# 1188| r1188_6(int) = Constant[10] : +# 1188| r1188_7(bool) = CompareLT : r1188_5, r1188_6 +# 1188| v1188_8(void) = ConditionalBranch : r1188_7 #-----| False -> Block 3 #-----| True -> Block 2 -# 1141| Block 2 -# 1141| r1141_9(glval) = VariableAddress[i] : -# 1141| r1141_10(int) = Load[i] : &:r1141_9, ~m? -# 1141| r1141_11(int) = Constant[1] : -# 1141| r1141_12(int) = Add : r1141_10, r1141_11 -# 1141| mu1141_13(int) = Store[i] : &:r1141_9, r1141_12 +# 1188| Block 2 +# 1188| r1188_9(glval) = VariableAddress[i] : +# 1188| r1188_10(int) = Load[i] : &:r1188_9, ~m? +# 1188| r1188_11(int) = Constant[1] : +# 1188| r1188_12(int) = Add : r1188_10, r1188_11 +# 1188| mu1188_13(int) = Store[i] : &:r1188_9, r1188_12 #-----| Goto (back edge) -> Block 1 -# 1141| Block 3 -# 1141| v1141_14(void) = NoOp : -# 1142| v1142_1(void) = NoOp : -# 1139| v1139_4(void) = ReturnVoid : -# 1139| v1139_5(void) = AliasedUse : ~m? -# 1139| v1139_6(void) = ExitFunction : +# 1188| Block 3 +# 1188| v1188_14(void) = NoOp : +# 1189| v1189_1(void) = NoOp : +# 1186| v1186_4(void) = ReturnVoid : +# 1186| v1186_5(void) = AliasedUse : ~m? +# 1186| v1186_6(void) = ExitFunction : -# 1144| void TryCatchNoCatchAny(bool) -# 1144| Block 0 -# 1144| v1144_1(void) = EnterFunction : -# 1144| mu1144_2(unknown) = AliasedDefinition : -# 1144| mu1144_3(unknown) = InitializeNonLocal : -# 1144| r1144_4(glval) = VariableAddress[b] : -# 1144| mu1144_5(bool) = InitializeParameter[b] : &:r1144_4 -# 1146| r1146_1(glval) = VariableAddress[x] : -# 1146| r1146_2(int) = Constant[5] : -# 1146| mu1146_3(int) = Store[x] : &:r1146_1, r1146_2 -# 1147| r1147_1(glval) = VariableAddress[b] : -# 1147| r1147_2(bool) = Load[b] : &:r1147_1, ~m? -# 1147| v1147_3(void) = ConditionalBranch : r1147_2 +# 1191| void TryCatchNoCatchAny(bool) +# 1191| Block 0 +# 1191| v1191_1(void) = EnterFunction : +# 1191| mu1191_2(unknown) = AliasedDefinition : +# 1191| mu1191_3(unknown) = InitializeNonLocal : +# 1191| r1191_4(glval) = VariableAddress[b] : +# 1191| mu1191_5(bool) = InitializeParameter[b] : &:r1191_4 +# 1193| r1193_1(glval) = VariableAddress[x] : +# 1193| r1193_2(int) = Constant[5] : +# 1193| mu1193_3(int) = Store[x] : &:r1193_1, r1193_2 +# 1194| r1194_1(glval) = VariableAddress[b] : +# 1194| r1194_2(bool) = Load[b] : &:r1194_1, ~m? +# 1194| v1194_3(void) = ConditionalBranch : r1194_2 #-----| False -> Block 4 #-----| True -> Block 3 -# 1144| Block 1 -# 1144| v1144_6(void) = AliasedUse : ~m? -# 1144| v1144_7(void) = ExitFunction : +# 1191| Block 1 +# 1191| v1191_6(void) = AliasedUse : ~m? +# 1191| v1191_7(void) = ExitFunction : -# 1144| Block 2 -# 1144| v1144_8(void) = Unwind : +# 1191| Block 2 +# 1191| v1191_8(void) = Unwind : #-----| Goto -> Block 1 -# 1148| Block 3 -# 1148| r1148_1(glval) = VariableAddress[#throw1148:7] : -# 1148| r1148_2(glval) = StringConstant["string literal"] : -# 1148| r1148_3(char *) = Convert : r1148_2 -# 1148| mu1148_4(char *) = Store[#throw1148:7] : &:r1148_1, r1148_3 -# 1148| v1148_5(void) = ThrowValue : &:r1148_1, ~m? +# 1195| Block 3 +# 1195| r1195_1(glval) = VariableAddress[#throw1195:7] : +# 1195| r1195_2(glval) = StringConstant["string literal"] : +# 1195| r1195_3(char *) = Convert : r1195_2 +# 1195| mu1195_4(char *) = Store[#throw1195:7] : &:r1195_1, r1195_3 +# 1195| v1195_5(void) = ThrowValue : &:r1195_1, ~m? #-----| Exception -> Block 9 -# 1150| Block 4 -# 1150| r1150_1(glval) = VariableAddress[x] : -# 1150| r1150_2(int) = Load[x] : &:r1150_1, ~m? -# 1150| r1150_3(int) = Constant[2] : -# 1150| r1150_4(bool) = CompareLT : r1150_2, r1150_3 -# 1150| v1150_5(void) = ConditionalBranch : r1150_4 +# 1197| Block 4 +# 1197| r1197_1(glval) = VariableAddress[x] : +# 1197| r1197_2(int) = Load[x] : &:r1197_1, ~m? +# 1197| r1197_3(int) = Constant[2] : +# 1197| r1197_4(bool) = CompareLT : r1197_2, r1197_3 +# 1197| v1197_5(void) = ConditionalBranch : r1197_4 #-----| False -> Block 8 #-----| True -> Block 5 -# 1151| Block 5 -# 1151| r1151_1(glval) = VariableAddress[b] : -# 1151| r1151_2(bool) = Load[b] : &:r1151_1, ~m? -# 1151| v1151_3(void) = ConditionalBranch : r1151_2 +# 1198| Block 5 +# 1198| r1198_1(glval) = VariableAddress[b] : +# 1198| r1198_2(bool) = Load[b] : &:r1198_1, ~m? +# 1198| v1198_3(void) = ConditionalBranch : r1198_2 #-----| False -> Block 7 #-----| True -> Block 6 -# 1151| Block 6 -# 1151| r1151_4(int) = Constant[7] : -# 1151| r1151_5(glval) = VariableAddress[#temp1151:11] : -# 1151| mu1151_6(int) = Store[#temp1151:11] : &:r1151_5, r1151_4 -# 1151| r1151_7(glval) = VariableAddress[#temp1151:11] : -# 1151| r1151_8(int) = Load[#temp1151:11] : &:r1151_7, ~m? -# 1151| r1151_9(glval) = VariableAddress[x] : -# 1151| mu1151_10(int) = Store[x] : &:r1151_9, r1151_8 +# 1198| Block 6 +# 1198| r1198_4(int) = Constant[7] : +# 1198| r1198_5(glval) = VariableAddress[#temp1198:11] : +# 1198| mu1198_6(int) = Store[#temp1198:11] : &:r1198_5, r1198_4 +# 1198| r1198_7(glval) = VariableAddress[#temp1198:11] : +# 1198| r1198_8(int) = Load[#temp1198:11] : &:r1198_7, ~m? +# 1198| r1198_9(glval) = VariableAddress[x] : +# 1198| mu1198_10(int) = Store[x] : &:r1198_9, r1198_8 #-----| Goto -> Block 8 -# 1151| Block 7 -# 1151| r1151_11(glval) = VariableAddress[#throw1151:19] : -# 1151| mu1151_12(String) = Uninitialized[#throw1151:19] : &:r1151_11 -# 1151| r1151_13(glval) = FunctionAddress[String] : -# 1151| r1151_14(glval) = StringConstant["String object"] : -# 1151| r1151_15(char *) = Convert : r1151_14 -# 1151| v1151_16(void) = Call[String] : func:r1151_13, this:r1151_11, 0:r1151_15 -# 1151| mu1151_17(unknown) = ^CallSideEffect : ~m? -# 1151| v1151_18(void) = ^BufferReadSideEffect[0] : &:r1151_15, ~m? -# 1151| mu1151_19(String) = ^IndirectMayWriteSideEffect[-1] : &:r1151_11 -# 1151| v1151_20(void) = ThrowValue : &:r1151_11, ~m? +# 1198| Block 7 +# 1198| r1198_11(glval) = VariableAddress[#throw1198:19] : +# 1198| mu1198_12(String) = Uninitialized[#throw1198:19] : &:r1198_11 +# 1198| r1198_13(glval) = FunctionAddress[String] : +# 1198| r1198_14(glval) = StringConstant["String object"] : +# 1198| r1198_15(char *) = Convert : r1198_14 +# 1198| v1198_16(void) = Call[String] : func:r1198_13, this:r1198_11, 0:r1198_15 +# 1198| mu1198_17(unknown) = ^CallSideEffect : ~m? +# 1198| v1198_18(void) = ^BufferReadSideEffect[0] : &:r1198_15, ~m? +# 1198| mu1198_19(String) = ^IndirectMayWriteSideEffect[-1] : &:r1198_11 +# 1198| v1198_20(void) = ThrowValue : &:r1198_11, ~m? #-----| Exception -> Block 9 -# 1153| Block 8 -# 1153| r1153_1(int) = Constant[7] : -# 1153| r1153_2(glval) = VariableAddress[x] : -# 1153| mu1153_3(int) = Store[x] : &:r1153_2, r1153_1 +# 1200| Block 8 +# 1200| r1200_1(int) = Constant[7] : +# 1200| r1200_2(glval) = VariableAddress[x] : +# 1200| mu1200_3(int) = Store[x] : &:r1200_2, r1200_1 #-----| Goto -> Block 13 -# 1155| Block 9 -# 1155| v1155_1(void) = CatchByType[const char *] : +# 1202| Block 9 +# 1202| v1202_1(void) = CatchByType[const char *] : #-----| Exception -> Block 11 #-----| Goto -> Block 10 -# 1155| Block 10 -# 1155| r1155_2(glval) = VariableAddress[s] : -# 1155| mu1155_3(char *) = InitializeParameter[s] : &:r1155_2 -# 1155| r1155_4(char *) = Load[s] : &:r1155_2, ~m? -# 1155| mu1155_5(unknown) = InitializeIndirection[s] : &:r1155_4 -# 1156| r1156_1(glval) = VariableAddress[#throw1156:5] : -# 1156| mu1156_2(String) = Uninitialized[#throw1156:5] : &:r1156_1 -# 1156| r1156_3(glval) = FunctionAddress[String] : -# 1156| r1156_4(glval) = VariableAddress[s] : -# 1156| r1156_5(char *) = Load[s] : &:r1156_4, ~m? -# 1156| v1156_6(void) = Call[String] : func:r1156_3, this:r1156_1, 0:r1156_5 -# 1156| mu1156_7(unknown) = ^CallSideEffect : ~m? -# 1156| v1156_8(void) = ^BufferReadSideEffect[0] : &:r1156_5, ~m? -# 1156| mu1156_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r1156_1 -# 1156| v1156_10(void) = ThrowValue : &:r1156_1, ~m? +# 1202| Block 10 +# 1202| r1202_2(glval) = VariableAddress[s] : +# 1202| mu1202_3(char *) = InitializeParameter[s] : &:r1202_2 +# 1202| r1202_4(char *) = Load[s] : &:r1202_2, ~m? +# 1202| mu1202_5(unknown) = InitializeIndirection[s] : &:r1202_4 +# 1203| r1203_1(glval) = VariableAddress[#throw1203:5] : +# 1203| mu1203_2(String) = Uninitialized[#throw1203:5] : &:r1203_1 +# 1203| r1203_3(glval) = FunctionAddress[String] : +# 1203| r1203_4(glval) = VariableAddress[s] : +# 1203| r1203_5(char *) = Load[s] : &:r1203_4, ~m? +# 1203| v1203_6(void) = Call[String] : func:r1203_3, this:r1203_1, 0:r1203_5 +# 1203| mu1203_7(unknown) = ^CallSideEffect : ~m? +# 1203| v1203_8(void) = ^BufferReadSideEffect[0] : &:r1203_5, ~m? +# 1203| mu1203_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r1203_1 +# 1203| v1203_10(void) = ThrowValue : &:r1203_1, ~m? #-----| Exception -> Block 2 -# 1158| Block 11 -# 1158| v1158_1(void) = CatchByType[const String &] : +# 1205| Block 11 +# 1205| v1205_1(void) = CatchByType[const String &] : #-----| Exception -> Block 2 #-----| Goto -> Block 12 -# 1158| Block 12 -# 1158| r1158_2(glval) = VariableAddress[e] : -# 1158| mu1158_3(String &) = InitializeParameter[e] : &:r1158_2 -# 1158| r1158_4(String &) = Load[e] : &:r1158_2, ~m? -# 1158| mu1158_5(unknown) = InitializeIndirection[e] : &:r1158_4 -# 1158| v1158_6(void) = NoOp : +# 1205| Block 12 +# 1205| r1205_2(glval) = VariableAddress[e] : +# 1205| mu1205_3(String &) = InitializeParameter[e] : &:r1205_2 +# 1205| r1205_4(String &) = Load[e] : &:r1205_2, ~m? +# 1205| mu1205_5(unknown) = InitializeIndirection[e] : &:r1205_4 +# 1205| v1205_6(void) = NoOp : #-----| Goto -> Block 13 -# 1160| Block 13 -# 1160| v1160_1(void) = NoOp : -# 1144| v1144_9(void) = ReturnVoid : +# 1207| Block 13 +# 1207| v1207_1(void) = NoOp : +# 1191| v1191_9(void) = ReturnVoid : #-----| Goto -> Block 1 -# 1164| void VectorTypes(int) -# 1164| Block 0 -# 1164| v1164_1(void) = EnterFunction : -# 1164| mu1164_2(unknown) = AliasedDefinition : -# 1164| mu1164_3(unknown) = InitializeNonLocal : -# 1164| r1164_4(glval) = VariableAddress[i] : -# 1164| mu1164_5(int) = InitializeParameter[i] : &:r1164_4 -# 1165| r1165_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1165| mu1165_2(__attribute((vector_size(16UL))) int) = Uninitialized[vi4] : &:r1165_1 -# 1165| r1165_3(int) = Constant[0] : -# 1165| r1165_4(glval) = PointerAdd[4] : r1165_1, r1165_3 -# 1165| r1165_5(int) = Constant[0] : -# 1165| mu1165_6(int) = Store[?] : &:r1165_4, r1165_5 -# 1165| r1165_7(int) = Constant[1] : -# 1165| r1165_8(glval) = PointerAdd[4] : r1165_1, r1165_7 -# 1165| r1165_9(int) = Constant[1] : -# 1165| mu1165_10(int) = Store[?] : &:r1165_8, r1165_9 -# 1165| r1165_11(int) = Constant[2] : -# 1165| r1165_12(glval) = PointerAdd[4] : r1165_1, r1165_11 -# 1165| r1165_13(int) = Constant[2] : -# 1165| mu1165_14(int) = Store[?] : &:r1165_12, r1165_13 -# 1165| r1165_15(int) = Constant[3] : -# 1165| r1165_16(glval) = PointerAdd[4] : r1165_1, r1165_15 -# 1165| r1165_17(int) = Constant[3] : -# 1165| mu1165_18(int) = Store[?] : &:r1165_16, r1165_17 -# 1166| r1166_1(glval) = VariableAddress[x] : -# 1166| r1166_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1166| r1166_3(glval) = VariableAddress[i] : -# 1166| r1166_4(int) = Load[i] : &:r1166_3, ~m? -# 1166| r1166_5(glval) = PointerAdd[4] : r1166_2, r1166_4 -# 1166| r1166_6(int) = Load[?] : &:r1166_5, ~m? -# 1166| mu1166_7(int) = Store[x] : &:r1166_1, r1166_6 -# 1167| r1167_1(glval) = VariableAddress[x] : -# 1167| r1167_2(int) = Load[x] : &:r1167_1, ~m? -# 1167| r1167_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1167| r1167_4(glval) = VariableAddress[i] : -# 1167| r1167_5(int) = Load[i] : &:r1167_4, ~m? -# 1167| r1167_6(glval) = PointerAdd[4] : r1167_3, r1167_5 -# 1167| mu1167_7(int) = Store[?] : &:r1167_6, r1167_2 -# 1168| r1168_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : -# 1168| r1168_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1168| r1168_3(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1168_2, ~m? -# 1168| r1168_4(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1168| r1168_5(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1168_4, ~m? -# 1168| r1168_6(int) = Constant[3] : -# 1168| r1168_7(int) = Constant[2] : -# 1168| r1168_8(int) = Constant[1] : -# 1168| r1168_9(int) = Constant[0] : -# 1168| r1168_10(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r1168_3, 1:r1168_5, 2:r1168_6, 3:r1168_7, 4:r1168_8, 5:r1168_9 -# 1168| mu1168_11(__attribute((vector_size(16UL))) int) = Store[vi4_shuffle] : &:r1168_1, r1168_10 -# 1169| r1169_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1169| r1169_2(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1169_1, ~m? -# 1169| r1169_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : -# 1169| r1169_4(__attribute((vector_size(16UL))) int) = Load[vi4_shuffle] : &:r1169_3, ~m? -# 1169| r1169_5(__attribute((vector_size(16UL))) int) = Add : r1169_2, r1169_4 -# 1169| r1169_6(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1169| mu1169_7(__attribute((vector_size(16UL))) int) = Store[vi4] : &:r1169_6, r1169_5 -# 1170| v1170_1(void) = NoOp : -# 1164| v1164_6(void) = ReturnVoid : -# 1164| v1164_7(void) = AliasedUse : ~m? -# 1164| v1164_8(void) = ExitFunction : +# 1211| void VectorTypes(int) +# 1211| Block 0 +# 1211| v1211_1(void) = EnterFunction : +# 1211| mu1211_2(unknown) = AliasedDefinition : +# 1211| mu1211_3(unknown) = InitializeNonLocal : +# 1211| r1211_4(glval) = VariableAddress[i] : +# 1211| mu1211_5(int) = InitializeParameter[i] : &:r1211_4 +# 1212| r1212_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1212| mu1212_2(__attribute((vector_size(16UL))) int) = Uninitialized[vi4] : &:r1212_1 +# 1212| r1212_3(int) = Constant[0] : +# 1212| r1212_4(glval) = PointerAdd[4] : r1212_1, r1212_3 +# 1212| r1212_5(int) = Constant[0] : +# 1212| mu1212_6(int) = Store[?] : &:r1212_4, r1212_5 +# 1212| r1212_7(int) = Constant[1] : +# 1212| r1212_8(glval) = PointerAdd[4] : r1212_1, r1212_7 +# 1212| r1212_9(int) = Constant[1] : +# 1212| mu1212_10(int) = Store[?] : &:r1212_8, r1212_9 +# 1212| r1212_11(int) = Constant[2] : +# 1212| r1212_12(glval) = PointerAdd[4] : r1212_1, r1212_11 +# 1212| r1212_13(int) = Constant[2] : +# 1212| mu1212_14(int) = Store[?] : &:r1212_12, r1212_13 +# 1212| r1212_15(int) = Constant[3] : +# 1212| r1212_16(glval) = PointerAdd[4] : r1212_1, r1212_15 +# 1212| r1212_17(int) = Constant[3] : +# 1212| mu1212_18(int) = Store[?] : &:r1212_16, r1212_17 +# 1213| r1213_1(glval) = VariableAddress[x] : +# 1213| r1213_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1213| r1213_3(glval) = VariableAddress[i] : +# 1213| r1213_4(int) = Load[i] : &:r1213_3, ~m? +# 1213| r1213_5(glval) = PointerAdd[4] : r1213_2, r1213_4 +# 1213| r1213_6(int) = Load[?] : &:r1213_5, ~m? +# 1213| mu1213_7(int) = Store[x] : &:r1213_1, r1213_6 +# 1214| r1214_1(glval) = VariableAddress[x] : +# 1214| r1214_2(int) = Load[x] : &:r1214_1, ~m? +# 1214| r1214_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1214| r1214_4(glval) = VariableAddress[i] : +# 1214| r1214_5(int) = Load[i] : &:r1214_4, ~m? +# 1214| r1214_6(glval) = PointerAdd[4] : r1214_3, r1214_5 +# 1214| mu1214_7(int) = Store[?] : &:r1214_6, r1214_2 +# 1215| r1215_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : +# 1215| r1215_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1215| r1215_3(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1215_2, ~m? +# 1215| r1215_4(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1215| r1215_5(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1215_4, ~m? +# 1215| r1215_6(int) = Constant[3] : +# 1215| r1215_7(int) = Constant[2] : +# 1215| r1215_8(int) = Constant[1] : +# 1215| r1215_9(int) = Constant[0] : +# 1215| r1215_10(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r1215_3, 1:r1215_5, 2:r1215_6, 3:r1215_7, 4:r1215_8, 5:r1215_9 +# 1215| mu1215_11(__attribute((vector_size(16UL))) int) = Store[vi4_shuffle] : &:r1215_1, r1215_10 +# 1216| r1216_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1216| r1216_2(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1216_1, ~m? +# 1216| r1216_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : +# 1216| r1216_4(__attribute((vector_size(16UL))) int) = Load[vi4_shuffle] : &:r1216_3, ~m? +# 1216| r1216_5(__attribute((vector_size(16UL))) int) = Add : r1216_2, r1216_4 +# 1216| r1216_6(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1216| mu1216_7(__attribute((vector_size(16UL))) int) = Store[vi4] : &:r1216_6, r1216_5 +# 1217| v1217_1(void) = NoOp : +# 1211| v1211_6(void) = ReturnVoid : +# 1211| v1211_7(void) = AliasedUse : ~m? +# 1211| v1211_8(void) = ExitFunction : -# 1174| int ModeledCallTarget(int) -# 1174| Block 0 -# 1174| v1174_1(void) = EnterFunction : -# 1174| mu1174_2(unknown) = AliasedDefinition : -# 1174| mu1174_3(unknown) = InitializeNonLocal : -# 1174| r1174_4(glval) = VariableAddress[x] : -# 1174| mu1174_5(int) = InitializeParameter[x] : &:r1174_4 -# 1175| r1175_1(glval) = VariableAddress[y] : -# 1175| mu1175_2(int) = Uninitialized[y] : &:r1175_1 -# 1176| r1176_1(glval) = FunctionAddress[memcpy] : -# 1176| r1176_2(glval) = VariableAddress[y] : -# 1176| r1176_3(int *) = CopyValue : r1176_2 -# 1176| r1176_4(void *) = Convert : r1176_3 -# 1176| r1176_5(glval) = VariableAddress[x] : -# 1176| r1176_6(int *) = CopyValue : r1176_5 -# 1176| r1176_7(void *) = Convert : r1176_6 -# 1176| r1176_8(int) = Constant[4] : -# 1176| r1176_9(void *) = Call[memcpy] : func:r1176_1, 0:r1176_4, 1:r1176_7, 2:r1176_8 -# 1176| v1176_10(void) = ^SizedBufferReadSideEffect[1] : &:r1176_7, r1176_8, ~m? -# 1176| mu1176_11(unknown) = ^SizedBufferMustWriteSideEffect[0] : &:r1176_4, r1176_8 -# 1177| r1177_1(glval) = VariableAddress[#return] : -# 1177| r1177_2(glval) = VariableAddress[y] : -# 1177| r1177_3(int) = Load[y] : &:r1177_2, ~m? -# 1177| mu1177_4(int) = Store[#return] : &:r1177_1, r1177_3 -# 1174| r1174_6(glval) = VariableAddress[#return] : -# 1174| v1174_7(void) = ReturnValue : &:r1174_6, ~m? -# 1174| v1174_8(void) = AliasedUse : ~m? -# 1174| v1174_9(void) = ExitFunction : +# 1221| int ModeledCallTarget(int) +# 1221| Block 0 +# 1221| v1221_1(void) = EnterFunction : +# 1221| mu1221_2(unknown) = AliasedDefinition : +# 1221| mu1221_3(unknown) = InitializeNonLocal : +# 1221| r1221_4(glval) = VariableAddress[x] : +# 1221| mu1221_5(int) = InitializeParameter[x] : &:r1221_4 +# 1222| r1222_1(glval) = VariableAddress[y] : +# 1222| mu1222_2(int) = Uninitialized[y] : &:r1222_1 +# 1223| r1223_1(glval) = FunctionAddress[memcpy] : +# 1223| r1223_2(glval) = VariableAddress[y] : +# 1223| r1223_3(int *) = CopyValue : r1223_2 +# 1223| r1223_4(void *) = Convert : r1223_3 +# 1223| r1223_5(glval) = VariableAddress[x] : +# 1223| r1223_6(int *) = CopyValue : r1223_5 +# 1223| r1223_7(void *) = Convert : r1223_6 +# 1223| r1223_8(int) = Constant[4] : +# 1223| r1223_9(void *) = Call[memcpy] : func:r1223_1, 0:r1223_4, 1:r1223_7, 2:r1223_8 +# 1223| v1223_10(void) = ^SizedBufferReadSideEffect[1] : &:r1223_7, r1223_8, ~m? +# 1223| mu1223_11(unknown) = ^SizedBufferMustWriteSideEffect[0] : &:r1223_4, r1223_8 +# 1224| r1224_1(glval) = VariableAddress[#return] : +# 1224| r1224_2(glval) = VariableAddress[y] : +# 1224| r1224_3(int) = Load[y] : &:r1224_2, ~m? +# 1224| mu1224_4(int) = Store[#return] : &:r1224_1, r1224_3 +# 1221| r1221_6(glval) = VariableAddress[#return] : +# 1221| v1221_7(void) = ReturnValue : &:r1221_6, ~m? +# 1221| v1221_8(void) = AliasedUse : ~m? +# 1221| v1221_9(void) = ExitFunction : -# 1180| String ReturnObjectImpl() -# 1180| Block 0 -# 1180| v1180_1(void) = EnterFunction : -# 1180| mu1180_2(unknown) = AliasedDefinition : -# 1180| mu1180_3(unknown) = InitializeNonLocal : -# 1181| r1181_1(glval) = VariableAddress[#return] : -# 1181| mu1181_2(String) = Uninitialized[#return] : &:r1181_1 -# 1181| r1181_3(glval) = FunctionAddress[String] : -# 1181| r1181_4(glval) = StringConstant["foo"] : -# 1181| r1181_5(char *) = Convert : r1181_4 -# 1181| v1181_6(void) = Call[String] : func:r1181_3, this:r1181_1, 0:r1181_5 -# 1181| mu1181_7(unknown) = ^CallSideEffect : ~m? -# 1181| v1181_8(void) = ^BufferReadSideEffect[0] : &:r1181_5, ~m? -# 1181| mu1181_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r1181_1 -# 1180| r1180_4(glval) = VariableAddress[#return] : -# 1180| v1180_5(void) = ReturnValue : &:r1180_4, ~m? -# 1180| v1180_6(void) = AliasedUse : ~m? -# 1180| v1180_7(void) = ExitFunction : +# 1227| String ReturnObjectImpl() +# 1227| Block 0 +# 1227| v1227_1(void) = EnterFunction : +# 1227| mu1227_2(unknown) = AliasedDefinition : +# 1227| mu1227_3(unknown) = InitializeNonLocal : +# 1228| r1228_1(glval) = VariableAddress[#return] : +# 1228| mu1228_2(String) = Uninitialized[#return] : &:r1228_1 +# 1228| r1228_3(glval) = FunctionAddress[String] : +# 1228| r1228_4(glval) = StringConstant["foo"] : +# 1228| r1228_5(char *) = Convert : r1228_4 +# 1228| v1228_6(void) = Call[String] : func:r1228_3, this:r1228_1, 0:r1228_5 +# 1228| mu1228_7(unknown) = ^CallSideEffect : ~m? +# 1228| v1228_8(void) = ^BufferReadSideEffect[0] : &:r1228_5, ~m? +# 1228| mu1228_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r1228_1 +# 1227| r1227_4(glval) = VariableAddress[#return] : +# 1227| v1227_5(void) = ReturnValue : &:r1227_4, ~m? +# 1227| v1227_6(void) = AliasedUse : ~m? +# 1227| v1227_7(void) = ExitFunction : -# 1184| void switch1Case(int) -# 1184| Block 0 -# 1184| v1184_1(void) = EnterFunction : -# 1184| mu1184_2(unknown) = AliasedDefinition : -# 1184| mu1184_3(unknown) = InitializeNonLocal : -# 1184| r1184_4(glval) = VariableAddress[x] : -# 1184| mu1184_5(int) = InitializeParameter[x] : &:r1184_4 -# 1185| r1185_1(glval) = VariableAddress[y] : -# 1185| r1185_2(int) = Constant[0] : -# 1185| mu1185_3(int) = Store[y] : &:r1185_1, r1185_2 -# 1186| r1186_1(glval) = VariableAddress[x] : -# 1186| r1186_2(int) = Load[x] : &:r1186_1, ~m? -# 1186| v1186_3(void) = Switch : r1186_2 +# 1231| void switch1Case(int) +# 1231| Block 0 +# 1231| v1231_1(void) = EnterFunction : +# 1231| mu1231_2(unknown) = AliasedDefinition : +# 1231| mu1231_3(unknown) = InitializeNonLocal : +# 1231| r1231_4(glval) = VariableAddress[x] : +# 1231| mu1231_5(int) = InitializeParameter[x] : &:r1231_4 +# 1232| r1232_1(glval) = VariableAddress[y] : +# 1232| r1232_2(int) = Constant[0] : +# 1232| mu1232_3(int) = Store[y] : &:r1232_1, r1232_2 +# 1233| r1233_1(glval) = VariableAddress[x] : +# 1233| r1233_2(int) = Load[x] : &:r1233_1, ~m? +# 1233| v1233_3(void) = Switch : r1233_2 #-----| Case[1] -> Block 1 #-----| Default -> Block 2 -# 1187| Block 1 -# 1187| v1187_1(void) = NoOp : -# 1188| r1188_1(int) = Constant[2] : -# 1188| r1188_2(glval) = VariableAddress[y] : -# 1188| mu1188_3(int) = Store[y] : &:r1188_2, r1188_1 +# 1234| Block 1 +# 1234| v1234_1(void) = NoOp : +# 1235| r1235_1(int) = Constant[2] : +# 1235| r1235_2(glval) = VariableAddress[y] : +# 1235| mu1235_3(int) = Store[y] : &:r1235_2, r1235_1 #-----| Goto -> Block 2 -# 1190| Block 2 -# 1190| r1190_1(glval) = VariableAddress[z] : -# 1190| r1190_2(glval) = VariableAddress[y] : -# 1190| r1190_3(int) = Load[y] : &:r1190_2, ~m? -# 1190| mu1190_4(int) = Store[z] : &:r1190_1, r1190_3 -# 1191| v1191_1(void) = NoOp : -# 1184| v1184_6(void) = ReturnVoid : -# 1184| v1184_7(void) = AliasedUse : ~m? -# 1184| v1184_8(void) = ExitFunction : +# 1237| Block 2 +# 1237| r1237_1(glval) = VariableAddress[z] : +# 1237| r1237_2(glval) = VariableAddress[y] : +# 1237| r1237_3(int) = Load[y] : &:r1237_2, ~m? +# 1237| mu1237_4(int) = Store[z] : &:r1237_1, r1237_3 +# 1238| v1238_1(void) = NoOp : +# 1231| v1231_6(void) = ReturnVoid : +# 1231| v1231_7(void) = AliasedUse : ~m? +# 1231| v1231_8(void) = ExitFunction : -# 1193| void switch2Case_fallthrough(int) -# 1193| Block 0 -# 1193| v1193_1(void) = EnterFunction : -# 1193| mu1193_2(unknown) = AliasedDefinition : -# 1193| mu1193_3(unknown) = InitializeNonLocal : -# 1193| r1193_4(glval) = VariableAddress[x] : -# 1193| mu1193_5(int) = InitializeParameter[x] : &:r1193_4 -# 1194| r1194_1(glval) = VariableAddress[y] : -# 1194| r1194_2(int) = Constant[0] : -# 1194| mu1194_3(int) = Store[y] : &:r1194_1, r1194_2 -# 1195| r1195_1(glval) = VariableAddress[x] : -# 1195| r1195_2(int) = Load[x] : &:r1195_1, ~m? -# 1195| v1195_3(void) = Switch : r1195_2 +# 1240| void switch2Case_fallthrough(int) +# 1240| Block 0 +# 1240| v1240_1(void) = EnterFunction : +# 1240| mu1240_2(unknown) = AliasedDefinition : +# 1240| mu1240_3(unknown) = InitializeNonLocal : +# 1240| r1240_4(glval) = VariableAddress[x] : +# 1240| mu1240_5(int) = InitializeParameter[x] : &:r1240_4 +# 1241| r1241_1(glval) = VariableAddress[y] : +# 1241| r1241_2(int) = Constant[0] : +# 1241| mu1241_3(int) = Store[y] : &:r1241_1, r1241_2 +# 1242| r1242_1(glval) = VariableAddress[x] : +# 1242| r1242_2(int) = Load[x] : &:r1242_1, ~m? +# 1242| v1242_3(void) = Switch : r1242_2 #-----| Case[1] -> Block 1 #-----| Case[2] -> Block 2 #-----| Default -> Block 3 -# 1196| Block 1 -# 1196| v1196_1(void) = NoOp : -# 1197| r1197_1(int) = Constant[2] : -# 1197| r1197_2(glval) = VariableAddress[y] : -# 1197| mu1197_3(int) = Store[y] : &:r1197_2, r1197_1 -#-----| Goto -> Block 2 - -# 1198| Block 2 -# 1198| v1198_1(void) = NoOp : -# 1199| r1199_1(int) = Constant[3] : -# 1199| r1199_2(glval) = VariableAddress[y] : -# 1199| mu1199_3(int) = Store[y] : &:r1199_2, r1199_1 -#-----| Goto -> Block 3 - -# 1201| Block 3 -# 1201| r1201_1(glval) = VariableAddress[z] : -# 1201| r1201_2(glval) = VariableAddress[y] : -# 1201| r1201_3(int) = Load[y] : &:r1201_2, ~m? -# 1201| mu1201_4(int) = Store[z] : &:r1201_1, r1201_3 -# 1202| v1202_1(void) = NoOp : -# 1193| v1193_6(void) = ReturnVoid : -# 1193| v1193_7(void) = AliasedUse : ~m? -# 1193| v1193_8(void) = ExitFunction : - -# 1204| void switch2Case(int) -# 1204| Block 0 -# 1204| v1204_1(void) = EnterFunction : -# 1204| mu1204_2(unknown) = AliasedDefinition : -# 1204| mu1204_3(unknown) = InitializeNonLocal : -# 1204| r1204_4(glval) = VariableAddress[x] : -# 1204| mu1204_5(int) = InitializeParameter[x] : &:r1204_4 -# 1205| r1205_1(glval) = VariableAddress[y] : -# 1205| r1205_2(int) = Constant[0] : -# 1205| mu1205_3(int) = Store[y] : &:r1205_1, r1205_2 -# 1206| r1206_1(glval) = VariableAddress[x] : -# 1206| r1206_2(int) = Load[x] : &:r1206_1, ~m? -# 1206| v1206_3(void) = Switch : r1206_2 -#-----| Case[1] -> Block 1 -#-----| Case[2] -> Block 2 -#-----| Default -> Block 3 - -# 1207| Block 1 -# 1207| v1207_1(void) = NoOp : -# 1208| r1208_1(int) = Constant[2] : -# 1208| r1208_2(glval) = VariableAddress[y] : -# 1208| mu1208_3(int) = Store[y] : &:r1208_2, r1208_1 -# 1209| v1209_1(void) = NoOp : -#-----| Goto -> Block 3 - -# 1210| Block 2 -# 1210| v1210_1(void) = NoOp : -# 1211| r1211_1(int) = Constant[3] : -# 1211| r1211_2(glval) = VariableAddress[y] : -# 1211| mu1211_3(int) = Store[y] : &:r1211_2, r1211_1 -#-----| Goto -> Block 3 - -# 1212| Block 3 -# 1212| v1212_1(void) = NoOp : -# 1213| r1213_1(glval) = VariableAddress[z] : -# 1213| r1213_2(glval) = VariableAddress[y] : -# 1213| r1213_3(int) = Load[y] : &:r1213_2, ~m? -# 1213| mu1213_4(int) = Store[z] : &:r1213_1, r1213_3 -# 1214| v1214_1(void) = NoOp : -# 1204| v1204_6(void) = ReturnVoid : -# 1204| v1204_7(void) = AliasedUse : ~m? -# 1204| v1204_8(void) = ExitFunction : - -# 1216| void switch2Case_default(int) -# 1216| Block 0 -# 1216| v1216_1(void) = EnterFunction : -# 1216| mu1216_2(unknown) = AliasedDefinition : -# 1216| mu1216_3(unknown) = InitializeNonLocal : -# 1216| r1216_4(glval) = VariableAddress[x] : -# 1216| mu1216_5(int) = InitializeParameter[x] : &:r1216_4 -# 1217| r1217_1(glval) = VariableAddress[y] : -# 1217| r1217_2(int) = Constant[0] : -# 1217| mu1217_3(int) = Store[y] : &:r1217_1, r1217_2 -# 1218| r1218_1(glval) = VariableAddress[x] : -# 1218| r1218_2(int) = Load[x] : &:r1218_1, ~m? -# 1218| v1218_3(void) = Switch : r1218_2 -#-----| Case[1] -> Block 1 -#-----| Case[2] -> Block 2 -#-----| Default -> Block 3 - -# 1219| Block 1 -# 1219| v1219_1(void) = NoOp : -# 1220| r1220_1(int) = Constant[2] : -# 1220| r1220_2(glval) = VariableAddress[y] : -# 1220| mu1220_3(int) = Store[y] : &:r1220_2, r1220_1 -# 1221| v1221_1(void) = NoOp : -#-----| Goto -> Block 4 - -# 1223| Block 2 -# 1223| v1223_1(void) = NoOp : -# 1224| r1224_1(int) = Constant[3] : -# 1224| r1224_2(glval) = VariableAddress[y] : -# 1224| mu1224_3(int) = Store[y] : &:r1224_2, r1224_1 -# 1225| v1225_1(void) = NoOp : -#-----| Goto -> Block 4 - -# 1227| Block 3 -# 1227| v1227_1(void) = NoOp : -# 1228| r1228_1(int) = Constant[4] : -# 1228| r1228_2(glval) = VariableAddress[y] : -# 1228| mu1228_3(int) = Store[y] : &:r1228_2, r1228_1 -#-----| Goto -> Block 4 - -# 1229| Block 4 -# 1229| v1229_1(void) = NoOp : -# 1230| r1230_1(glval) = VariableAddress[z] : -# 1230| r1230_2(glval) = VariableAddress[y] : -# 1230| r1230_3(int) = Load[y] : &:r1230_2, ~m? -# 1230| mu1230_4(int) = Store[z] : &:r1230_1, r1230_3 -# 1231| v1231_1(void) = NoOp : -# 1216| v1216_6(void) = ReturnVoid : -# 1216| v1216_7(void) = AliasedUse : ~m? -# 1216| v1216_8(void) = ExitFunction : - -# 1233| int staticLocalInit(int) -# 1233| Block 0 -# 1233| v1233_1(void) = EnterFunction : -# 1233| mu1233_2(unknown) = AliasedDefinition : -# 1233| mu1233_3(unknown) = InitializeNonLocal : -# 1233| r1233_4(glval) = VariableAddress[x] : -# 1233| mu1233_5(int) = InitializeParameter[x] : &:r1233_4 -# 1236| r1236_1(glval) = VariableAddress[c#init] : -# 1236| r1236_2(bool) = Load[c#init] : &:r1236_1, ~m? -# 1236| v1236_3(void) = ConditionalBranch : r1236_2 -#-----| False -> Block 1 -#-----| True -> Block 2 - -# 1236| Block 1 -# 1236| r1236_4(glval) = VariableAddress[c] : -# 1236| r1236_5(glval) = VariableAddress[x] : -# 1236| r1236_6(int) = Load[x] : &:r1236_5, ~m? -# 1236| mu1236_7(int) = Store[c] : &:r1236_4, r1236_6 -# 1236| r1236_8(bool) = Constant[1] : -# 1236| mu1236_9(bool) = Store[c#init] : &:r1236_1, r1236_8 -#-----| Goto -> Block 2 - -# 1239| Block 2 -# 1239| r1239_1(glval) = VariableAddress[#return] : -# 1239| r1239_2(glval) = VariableAddress[a] : -# 1239| r1239_3(int) = Load[a] : &:r1239_2, ~m? -# 1239| r1239_4(glval) = VariableAddress[b] : -# 1239| r1239_5(int) = Load[b] : &:r1239_4, ~m? -# 1239| r1239_6(int) = Add : r1239_3, r1239_5 -# 1239| r1239_7(glval) = VariableAddress[c] : -# 1239| r1239_8(int) = Load[c] : &:r1239_7, ~m? -# 1239| r1239_9(int) = Add : r1239_6, r1239_8 -# 1239| r1239_10(glval) = VariableAddress[d] : -# 1239| r1239_11(int) = Load[d] : &:r1239_10, ~m? -# 1239| r1239_12(int) = Add : r1239_9, r1239_11 -# 1239| mu1239_13(int) = Store[#return] : &:r1239_1, r1239_12 -# 1233| r1233_6(glval) = VariableAddress[#return] : -# 1233| v1233_7(void) = ReturnValue : &:r1233_6, ~m? -# 1233| v1233_8(void) = AliasedUse : ~m? -# 1233| v1233_9(void) = ExitFunction : - -# 1234| int a -# 1234| Block 0 -# 1234| v1234_1(void) = EnterFunction : -# 1234| mu1234_2(unknown) = AliasedDefinition : -# 1234| r1234_3(glval) = VariableAddress[a] : -# 1234| r1234_4(int) = Constant[0] : -# 1234| mu1234_5(int) = Store[a] : &:r1234_3, r1234_4 -# 1234| v1234_6(void) = ReturnVoid : -# 1234| v1234_7(void) = AliasedUse : ~m? -# 1234| v1234_8(void) = ExitFunction : - -# 1235| int b -# 1235| Block 0 -# 1235| v1235_1(void) = EnterFunction : -# 1235| mu1235_2(unknown) = AliasedDefinition : -# 1235| r1235_3(glval) = VariableAddress[b] : -# 1235| r1235_4(int) = Constant[4] : -# 1235| mu1235_5(int) = Store[b] : &:r1235_3, r1235_4 -# 1235| v1235_6(void) = ReturnVoid : -# 1235| v1235_7(void) = AliasedUse : ~m? -# 1235| v1235_8(void) = ExitFunction : - -# 1242| void staticLocalWithConstructor(char const*) -# 1242| Block 0 -# 1242| v1242_1(void) = EnterFunction : -# 1242| mu1242_2(unknown) = AliasedDefinition : -# 1242| mu1242_3(unknown) = InitializeNonLocal : -# 1242| r1242_4(glval) = VariableAddress[dynamic] : -# 1242| mu1242_5(char *) = InitializeParameter[dynamic] : &:r1242_4 -# 1242| r1242_6(char *) = Load[dynamic] : &:r1242_4, ~m? -# 1242| mu1242_7(unknown) = InitializeIndirection[dynamic] : &:r1242_6 -# 1243| r1243_1(glval) = VariableAddress[a#init] : -# 1243| r1243_2(bool) = Load[a#init] : &:r1243_1, ~m? -# 1243| v1243_3(void) = ConditionalBranch : r1243_2 -#-----| False -> Block 1 -#-----| True -> Block 2 - # 1243| Block 1 -# 1243| r1243_4(glval) = VariableAddress[a] : -#-----| r0_1(glval) = FunctionAddress[String] : -#-----| v0_2(void) = Call[String] : func:r0_1, this:r1243_4 -#-----| mu0_3(unknown) = ^CallSideEffect : ~m? -#-----| mu0_4(String) = ^IndirectMayWriteSideEffect[-1] : &:r1243_4 -# 1243| r1243_5(bool) = Constant[1] : -# 1243| mu1243_6(bool) = Store[a#init] : &:r1243_1, r1243_5 +# 1243| v1243_1(void) = NoOp : +# 1244| r1244_1(int) = Constant[2] : +# 1244| r1244_2(glval) = VariableAddress[y] : +# 1244| mu1244_3(int) = Store[y] : &:r1244_2, r1244_1 #-----| Goto -> Block 2 -# 1244| Block 2 -# 1244| r1244_1(glval) = VariableAddress[b#init] : -# 1244| r1244_2(bool) = Load[b#init] : &:r1244_1, ~m? -# 1244| v1244_3(void) = ConditionalBranch : r1244_2 +# 1245| Block 2 +# 1245| v1245_1(void) = NoOp : +# 1246| r1246_1(int) = Constant[3] : +# 1246| r1246_2(glval) = VariableAddress[y] : +# 1246| mu1246_3(int) = Store[y] : &:r1246_2, r1246_1 +#-----| Goto -> Block 3 + +# 1248| Block 3 +# 1248| r1248_1(glval) = VariableAddress[z] : +# 1248| r1248_2(glval) = VariableAddress[y] : +# 1248| r1248_3(int) = Load[y] : &:r1248_2, ~m? +# 1248| mu1248_4(int) = Store[z] : &:r1248_1, r1248_3 +# 1249| v1249_1(void) = NoOp : +# 1240| v1240_6(void) = ReturnVoid : +# 1240| v1240_7(void) = AliasedUse : ~m? +# 1240| v1240_8(void) = ExitFunction : + +# 1251| void switch2Case(int) +# 1251| Block 0 +# 1251| v1251_1(void) = EnterFunction : +# 1251| mu1251_2(unknown) = AliasedDefinition : +# 1251| mu1251_3(unknown) = InitializeNonLocal : +# 1251| r1251_4(glval) = VariableAddress[x] : +# 1251| mu1251_5(int) = InitializeParameter[x] : &:r1251_4 +# 1252| r1252_1(glval) = VariableAddress[y] : +# 1252| r1252_2(int) = Constant[0] : +# 1252| mu1252_3(int) = Store[y] : &:r1252_1, r1252_2 +# 1253| r1253_1(glval) = VariableAddress[x] : +# 1253| r1253_2(int) = Load[x] : &:r1253_1, ~m? +# 1253| v1253_3(void) = Switch : r1253_2 +#-----| Case[1] -> Block 1 +#-----| Case[2] -> Block 2 +#-----| Default -> Block 3 + +# 1254| Block 1 +# 1254| v1254_1(void) = NoOp : +# 1255| r1255_1(int) = Constant[2] : +# 1255| r1255_2(glval) = VariableAddress[y] : +# 1255| mu1255_3(int) = Store[y] : &:r1255_2, r1255_1 +# 1256| v1256_1(void) = NoOp : +#-----| Goto -> Block 3 + +# 1257| Block 2 +# 1257| v1257_1(void) = NoOp : +# 1258| r1258_1(int) = Constant[3] : +# 1258| r1258_2(glval) = VariableAddress[y] : +# 1258| mu1258_3(int) = Store[y] : &:r1258_2, r1258_1 +#-----| Goto -> Block 3 + +# 1259| Block 3 +# 1259| v1259_1(void) = NoOp : +# 1260| r1260_1(glval) = VariableAddress[z] : +# 1260| r1260_2(glval) = VariableAddress[y] : +# 1260| r1260_3(int) = Load[y] : &:r1260_2, ~m? +# 1260| mu1260_4(int) = Store[z] : &:r1260_1, r1260_3 +# 1261| v1261_1(void) = NoOp : +# 1251| v1251_6(void) = ReturnVoid : +# 1251| v1251_7(void) = AliasedUse : ~m? +# 1251| v1251_8(void) = ExitFunction : + +# 1263| void switch2Case_default(int) +# 1263| Block 0 +# 1263| v1263_1(void) = EnterFunction : +# 1263| mu1263_2(unknown) = AliasedDefinition : +# 1263| mu1263_3(unknown) = InitializeNonLocal : +# 1263| r1263_4(glval) = VariableAddress[x] : +# 1263| mu1263_5(int) = InitializeParameter[x] : &:r1263_4 +# 1264| r1264_1(glval) = VariableAddress[y] : +# 1264| r1264_2(int) = Constant[0] : +# 1264| mu1264_3(int) = Store[y] : &:r1264_1, r1264_2 +# 1265| r1265_1(glval) = VariableAddress[x] : +# 1265| r1265_2(int) = Load[x] : &:r1265_1, ~m? +# 1265| v1265_3(void) = Switch : r1265_2 +#-----| Case[1] -> Block 1 +#-----| Case[2] -> Block 2 +#-----| Default -> Block 3 + +# 1266| Block 1 +# 1266| v1266_1(void) = NoOp : +# 1267| r1267_1(int) = Constant[2] : +# 1267| r1267_2(glval) = VariableAddress[y] : +# 1267| mu1267_3(int) = Store[y] : &:r1267_2, r1267_1 +# 1268| v1268_1(void) = NoOp : +#-----| Goto -> Block 4 + +# 1270| Block 2 +# 1270| v1270_1(void) = NoOp : +# 1271| r1271_1(int) = Constant[3] : +# 1271| r1271_2(glval) = VariableAddress[y] : +# 1271| mu1271_3(int) = Store[y] : &:r1271_2, r1271_1 +# 1272| v1272_1(void) = NoOp : +#-----| Goto -> Block 4 + +# 1274| Block 3 +# 1274| v1274_1(void) = NoOp : +# 1275| r1275_1(int) = Constant[4] : +# 1275| r1275_2(glval) = VariableAddress[y] : +# 1275| mu1275_3(int) = Store[y] : &:r1275_2, r1275_1 +#-----| Goto -> Block 4 + +# 1276| Block 4 +# 1276| v1276_1(void) = NoOp : +# 1277| r1277_1(glval) = VariableAddress[z] : +# 1277| r1277_2(glval) = VariableAddress[y] : +# 1277| r1277_3(int) = Load[y] : &:r1277_2, ~m? +# 1277| mu1277_4(int) = Store[z] : &:r1277_1, r1277_3 +# 1278| v1278_1(void) = NoOp : +# 1263| v1263_6(void) = ReturnVoid : +# 1263| v1263_7(void) = AliasedUse : ~m? +# 1263| v1263_8(void) = ExitFunction : + +# 1280| int staticLocalInit(int) +# 1280| Block 0 +# 1280| v1280_1(void) = EnterFunction : +# 1280| mu1280_2(unknown) = AliasedDefinition : +# 1280| mu1280_3(unknown) = InitializeNonLocal : +# 1280| r1280_4(glval) = VariableAddress[x] : +# 1280| mu1280_5(int) = InitializeParameter[x] : &:r1280_4 +# 1283| r1283_1(glval) = VariableAddress[c#init] : +# 1283| r1283_2(bool) = Load[c#init] : &:r1283_1, ~m? +# 1283| v1283_3(void) = ConditionalBranch : r1283_2 +#-----| False -> Block 1 +#-----| True -> Block 2 + +# 1283| Block 1 +# 1283| r1283_4(glval) = VariableAddress[c] : +# 1283| r1283_5(glval) = VariableAddress[x] : +# 1283| r1283_6(int) = Load[x] : &:r1283_5, ~m? +# 1283| mu1283_7(int) = Store[c] : &:r1283_4, r1283_6 +# 1283| r1283_8(bool) = Constant[1] : +# 1283| mu1283_9(bool) = Store[c#init] : &:r1283_1, r1283_8 +#-----| Goto -> Block 2 + +# 1286| Block 2 +# 1286| r1286_1(glval) = VariableAddress[#return] : +# 1286| r1286_2(glval) = VariableAddress[a] : +# 1286| r1286_3(int) = Load[a] : &:r1286_2, ~m? +# 1286| r1286_4(glval) = VariableAddress[b] : +# 1286| r1286_5(int) = Load[b] : &:r1286_4, ~m? +# 1286| r1286_6(int) = Add : r1286_3, r1286_5 +# 1286| r1286_7(glval) = VariableAddress[c] : +# 1286| r1286_8(int) = Load[c] : &:r1286_7, ~m? +# 1286| r1286_9(int) = Add : r1286_6, r1286_8 +# 1286| r1286_10(glval) = VariableAddress[d] : +# 1286| r1286_11(int) = Load[d] : &:r1286_10, ~m? +# 1286| r1286_12(int) = Add : r1286_9, r1286_11 +# 1286| mu1286_13(int) = Store[#return] : &:r1286_1, r1286_12 +# 1280| r1280_6(glval) = VariableAddress[#return] : +# 1280| v1280_7(void) = ReturnValue : &:r1280_6, ~m? +# 1280| v1280_8(void) = AliasedUse : ~m? +# 1280| v1280_9(void) = ExitFunction : + +# 1281| int a +# 1281| Block 0 +# 1281| v1281_1(void) = EnterFunction : +# 1281| mu1281_2(unknown) = AliasedDefinition : +# 1281| r1281_3(glval) = VariableAddress[a] : +# 1281| r1281_4(int) = Constant[0] : +# 1281| mu1281_5(int) = Store[a] : &:r1281_3, r1281_4 +# 1281| v1281_6(void) = ReturnVoid : +# 1281| v1281_7(void) = AliasedUse : ~m? +# 1281| v1281_8(void) = ExitFunction : + +# 1282| int b +# 1282| Block 0 +# 1282| v1282_1(void) = EnterFunction : +# 1282| mu1282_2(unknown) = AliasedDefinition : +# 1282| r1282_3(glval) = VariableAddress[b] : +# 1282| r1282_4(int) = Constant[4] : +# 1282| mu1282_5(int) = Store[b] : &:r1282_3, r1282_4 +# 1282| v1282_6(void) = ReturnVoid : +# 1282| v1282_7(void) = AliasedUse : ~m? +# 1282| v1282_8(void) = ExitFunction : + +# 1289| void staticLocalWithConstructor(char const*) +# 1289| Block 0 +# 1289| v1289_1(void) = EnterFunction : +# 1289| mu1289_2(unknown) = AliasedDefinition : +# 1289| mu1289_3(unknown) = InitializeNonLocal : +# 1289| r1289_4(glval) = VariableAddress[dynamic] : +# 1289| mu1289_5(char *) = InitializeParameter[dynamic] : &:r1289_4 +# 1289| r1289_6(char *) = Load[dynamic] : &:r1289_4, ~m? +# 1289| mu1289_7(unknown) = InitializeIndirection[dynamic] : &:r1289_6 +# 1290| r1290_1(glval) = VariableAddress[a#init] : +# 1290| r1290_2(bool) = Load[a#init] : &:r1290_1, ~m? +# 1290| v1290_3(void) = ConditionalBranch : r1290_2 +#-----| False -> Block 1 +#-----| True -> Block 2 + +# 1290| Block 1 +# 1290| r1290_4(glval) = VariableAddress[a] : +#-----| r0_1(glval) = FunctionAddress[String] : +#-----| v0_2(void) = Call[String] : func:r0_1, this:r1290_4 +#-----| mu0_3(unknown) = ^CallSideEffect : ~m? +#-----| mu0_4(String) = ^IndirectMayWriteSideEffect[-1] : &:r1290_4 +# 1290| r1290_5(bool) = Constant[1] : +# 1290| mu1290_6(bool) = Store[a#init] : &:r1290_1, r1290_5 +#-----| Goto -> Block 2 + +# 1291| Block 2 +# 1291| r1291_1(glval) = VariableAddress[b#init] : +# 1291| r1291_2(bool) = Load[b#init] : &:r1291_1, ~m? +# 1291| v1291_3(void) = ConditionalBranch : r1291_2 #-----| False -> Block 3 #-----| True -> Block 4 -# 1244| Block 3 -# 1244| r1244_4(glval) = VariableAddress[b] : -# 1244| r1244_5(glval) = FunctionAddress[String] : -# 1244| r1244_6(glval) = StringConstant["static"] : -# 1244| r1244_7(char *) = Convert : r1244_6 -# 1244| v1244_8(void) = Call[String] : func:r1244_5, this:r1244_4, 0:r1244_7 -# 1244| mu1244_9(unknown) = ^CallSideEffect : ~m? -# 1244| v1244_10(void) = ^BufferReadSideEffect[0] : &:r1244_7, ~m? -# 1244| mu1244_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1244_4 -# 1244| r1244_12(bool) = Constant[1] : -# 1244| mu1244_13(bool) = Store[b#init] : &:r1244_1, r1244_12 +# 1291| Block 3 +# 1291| r1291_4(glval) = VariableAddress[b] : +# 1291| r1291_5(glval) = FunctionAddress[String] : +# 1291| r1291_6(glval) = StringConstant["static"] : +# 1291| r1291_7(char *) = Convert : r1291_6 +# 1291| v1291_8(void) = Call[String] : func:r1291_5, this:r1291_4, 0:r1291_7 +# 1291| mu1291_9(unknown) = ^CallSideEffect : ~m? +# 1291| v1291_10(void) = ^BufferReadSideEffect[0] : &:r1291_7, ~m? +# 1291| mu1291_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1291_4 +# 1291| r1291_12(bool) = Constant[1] : +# 1291| mu1291_13(bool) = Store[b#init] : &:r1291_1, r1291_12 #-----| Goto -> Block 4 -# 1245| Block 4 -# 1245| r1245_1(glval) = VariableAddress[c#init] : -# 1245| r1245_2(bool) = Load[c#init] : &:r1245_1, ~m? -# 1245| v1245_3(void) = ConditionalBranch : r1245_2 +# 1292| Block 4 +# 1292| r1292_1(glval) = VariableAddress[c#init] : +# 1292| r1292_2(bool) = Load[c#init] : &:r1292_1, ~m? +# 1292| v1292_3(void) = ConditionalBranch : r1292_2 #-----| False -> Block 5 #-----| True -> Block 6 -# 1245| Block 5 -# 1245| r1245_4(glval) = VariableAddress[c] : -# 1245| r1245_5(glval) = FunctionAddress[String] : -# 1245| r1245_6(glval) = VariableAddress[dynamic] : -# 1245| r1245_7(char *) = Load[dynamic] : &:r1245_6, ~m? -# 1245| v1245_8(void) = Call[String] : func:r1245_5, this:r1245_4, 0:r1245_7 -# 1245| mu1245_9(unknown) = ^CallSideEffect : ~m? -# 1245| v1245_10(void) = ^BufferReadSideEffect[0] : &:r1245_7, ~m? -# 1245| mu1245_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1245_4 -# 1245| r1245_12(bool) = Constant[1] : -# 1245| mu1245_13(bool) = Store[c#init] : &:r1245_1, r1245_12 +# 1292| Block 5 +# 1292| r1292_4(glval) = VariableAddress[c] : +# 1292| r1292_5(glval) = FunctionAddress[String] : +# 1292| r1292_6(glval) = VariableAddress[dynamic] : +# 1292| r1292_7(char *) = Load[dynamic] : &:r1292_6, ~m? +# 1292| v1292_8(void) = Call[String] : func:r1292_5, this:r1292_4, 0:r1292_7 +# 1292| mu1292_9(unknown) = ^CallSideEffect : ~m? +# 1292| v1292_10(void) = ^BufferReadSideEffect[0] : &:r1292_7, ~m? +# 1292| mu1292_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1292_4 +# 1292| r1292_12(bool) = Constant[1] : +# 1292| mu1292_13(bool) = Store[c#init] : &:r1292_1, r1292_12 #-----| Goto -> Block 6 -# 1246| Block 6 -# 1246| v1246_1(void) = NoOp : -# 1242| v1242_8(void) = ReturnIndirection[dynamic] : &:r1242_6, ~m? -# 1242| v1242_9(void) = ReturnVoid : -# 1242| v1242_10(void) = AliasedUse : ~m? -# 1242| v1242_11(void) = ExitFunction : +# 1293| Block 6 +# 1293| v1293_1(void) = NoOp : +# 1289| v1289_8(void) = ReturnIndirection[dynamic] : &:r1289_6, ~m? +# 1289| v1289_9(void) = ReturnVoid : +# 1289| v1289_10(void) = AliasedUse : ~m? +# 1289| v1289_11(void) = ExitFunction : -# 1253| void test_strings(char*, char*) -# 1253| Block 0 -# 1253| v1253_1(void) = EnterFunction : -# 1253| mu1253_2(unknown) = AliasedDefinition : -# 1253| mu1253_3(unknown) = InitializeNonLocal : -# 1253| r1253_4(glval) = VariableAddress[s1] : -# 1253| mu1253_5(char *) = InitializeParameter[s1] : &:r1253_4 -# 1253| r1253_6(char *) = Load[s1] : &:r1253_4, ~m? -# 1253| mu1253_7(unknown) = InitializeIndirection[s1] : &:r1253_6 -# 1253| r1253_8(glval) = VariableAddress[s2] : -# 1253| mu1253_9(char *) = InitializeParameter[s2] : &:r1253_8 -# 1253| r1253_10(char *) = Load[s2] : &:r1253_8, ~m? -# 1253| mu1253_11(unknown) = InitializeIndirection[s2] : &:r1253_10 -# 1254| r1254_1(glval) = VariableAddress[buffer] : -# 1254| mu1254_2(char[1024]) = Uninitialized[buffer] : &:r1254_1 -# 1254| r1254_3(int) = Constant[0] : -# 1254| r1254_4(glval) = PointerAdd[1] : r1254_1, r1254_3 -# 1254| r1254_5(char) = Constant[0] : -# 1254| mu1254_6(char) = Store[?] : &:r1254_4, r1254_5 -# 1254| r1254_7(int) = Constant[1] : -# 1254| r1254_8(glval) = PointerAdd[1] : r1254_1, r1254_7 -# 1254| r1254_9(unknown[1023]) = Constant[0] : -# 1254| mu1254_10(unknown[1023]) = Store[?] : &:r1254_8, r1254_9 -# 1256| r1256_1(glval) = FunctionAddress[strcpy] : -# 1256| r1256_2(glval) = VariableAddress[buffer] : -# 1256| r1256_3(char *) = Convert : r1256_2 -# 1256| r1256_4(glval) = VariableAddress[s1] : -# 1256| r1256_5(char *) = Load[s1] : &:r1256_4, ~m? -# 1256| r1256_6(char *) = Convert : r1256_5 -# 1256| r1256_7(char *) = Call[strcpy] : func:r1256_1, 0:r1256_3, 1:r1256_6 -# 1256| v1256_8(void) = ^BufferReadSideEffect[1] : &:r1256_6, ~m? -# 1256| mu1256_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1256_3 -# 1257| r1257_1(glval) = FunctionAddress[strcat] : -# 1257| r1257_2(glval) = VariableAddress[buffer] : -# 1257| r1257_3(char *) = Convert : r1257_2 -# 1257| r1257_4(glval) = VariableAddress[s2] : -# 1257| r1257_5(char *) = Load[s2] : &:r1257_4, ~m? -# 1257| r1257_6(char *) = Convert : r1257_5 -# 1257| r1257_7(char *) = Call[strcat] : func:r1257_1, 0:r1257_3, 1:r1257_6 -# 1257| v1257_8(void) = ^BufferReadSideEffect[0] : &:r1257_3, ~m? -# 1257| v1257_9(void) = ^BufferReadSideEffect[1] : &:r1257_6, ~m? -# 1257| mu1257_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1257_3 -# 1258| v1258_1(void) = NoOp : -# 1253| v1253_12(void) = ReturnIndirection[s1] : &:r1253_6, ~m? -# 1253| v1253_13(void) = ReturnIndirection[s2] : &:r1253_10, ~m? -# 1253| v1253_14(void) = ReturnVoid : -# 1253| v1253_15(void) = AliasedUse : ~m? -# 1253| v1253_16(void) = ExitFunction : +# 1300| void test_strings(char*, char*) +# 1300| Block 0 +# 1300| v1300_1(void) = EnterFunction : +# 1300| mu1300_2(unknown) = AliasedDefinition : +# 1300| mu1300_3(unknown) = InitializeNonLocal : +# 1300| r1300_4(glval) = VariableAddress[s1] : +# 1300| mu1300_5(char *) = InitializeParameter[s1] : &:r1300_4 +# 1300| r1300_6(char *) = Load[s1] : &:r1300_4, ~m? +# 1300| mu1300_7(unknown) = InitializeIndirection[s1] : &:r1300_6 +# 1300| r1300_8(glval) = VariableAddress[s2] : +# 1300| mu1300_9(char *) = InitializeParameter[s2] : &:r1300_8 +# 1300| r1300_10(char *) = Load[s2] : &:r1300_8, ~m? +# 1300| mu1300_11(unknown) = InitializeIndirection[s2] : &:r1300_10 +# 1301| r1301_1(glval) = VariableAddress[buffer] : +# 1301| mu1301_2(char[1024]) = Uninitialized[buffer] : &:r1301_1 +# 1301| r1301_3(int) = Constant[0] : +# 1301| r1301_4(glval) = PointerAdd[1] : r1301_1, r1301_3 +# 1301| r1301_5(char) = Constant[0] : +# 1301| mu1301_6(char) = Store[?] : &:r1301_4, r1301_5 +# 1301| r1301_7(int) = Constant[1] : +# 1301| r1301_8(glval) = PointerAdd[1] : r1301_1, r1301_7 +# 1301| r1301_9(unknown[1023]) = Constant[0] : +# 1301| mu1301_10(unknown[1023]) = Store[?] : &:r1301_8, r1301_9 +# 1303| r1303_1(glval) = FunctionAddress[strcpy] : +# 1303| r1303_2(glval) = VariableAddress[buffer] : +# 1303| r1303_3(char *) = Convert : r1303_2 +# 1303| r1303_4(glval) = VariableAddress[s1] : +# 1303| r1303_5(char *) = Load[s1] : &:r1303_4, ~m? +# 1303| r1303_6(char *) = Convert : r1303_5 +# 1303| r1303_7(char *) = Call[strcpy] : func:r1303_1, 0:r1303_3, 1:r1303_6 +# 1303| v1303_8(void) = ^BufferReadSideEffect[1] : &:r1303_6, ~m? +# 1303| mu1303_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1303_3 +# 1304| r1304_1(glval) = FunctionAddress[strcat] : +# 1304| r1304_2(glval) = VariableAddress[buffer] : +# 1304| r1304_3(char *) = Convert : r1304_2 +# 1304| r1304_4(glval) = VariableAddress[s2] : +# 1304| r1304_5(char *) = Load[s2] : &:r1304_4, ~m? +# 1304| r1304_6(char *) = Convert : r1304_5 +# 1304| r1304_7(char *) = Call[strcat] : func:r1304_1, 0:r1304_3, 1:r1304_6 +# 1304| v1304_8(void) = ^BufferReadSideEffect[0] : &:r1304_3, ~m? +# 1304| v1304_9(void) = ^BufferReadSideEffect[1] : &:r1304_6, ~m? +# 1304| mu1304_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1304_3 +# 1305| v1305_1(void) = NoOp : +# 1300| v1300_12(void) = ReturnIndirection[s1] : &:r1300_6, ~m? +# 1300| v1300_13(void) = ReturnIndirection[s2] : &:r1300_10, ~m? +# 1300| v1300_14(void) = ReturnVoid : +# 1300| v1300_15(void) = AliasedUse : ~m? +# 1300| v1300_16(void) = ExitFunction : -# 1263| void A::static_member(A*, int) -# 1263| Block 0 -# 1263| v1263_1(void) = EnterFunction : -# 1263| mu1263_2(unknown) = AliasedDefinition : -# 1263| mu1263_3(unknown) = InitializeNonLocal : -# 1263| r1263_4(glval) = VariableAddress[a] : -# 1263| mu1263_5(A *) = InitializeParameter[a] : &:r1263_4 -# 1263| r1263_6(A *) = Load[a] : &:r1263_4, ~m? -# 1263| mu1263_7(unknown) = InitializeIndirection[a] : &:r1263_6 -# 1263| r1263_8(glval) = VariableAddress[x] : -# 1263| mu1263_9(int) = InitializeParameter[x] : &:r1263_8 -# 1264| r1264_1(glval) = VariableAddress[x] : -# 1264| r1264_2(int) = Load[x] : &:r1264_1, ~m? -# 1264| r1264_3(glval) = VariableAddress[a] : -# 1264| r1264_4(A *) = Load[a] : &:r1264_3, ~m? -# 1264| r1264_5(glval) = FieldAddress[member] : r1264_4 -# 1264| mu1264_6(int) = Store[?] : &:r1264_5, r1264_2 -# 1265| v1265_1(void) = NoOp : -# 1263| v1263_10(void) = ReturnIndirection[a] : &:r1263_6, ~m? -# 1263| v1263_11(void) = ReturnVoid : -# 1263| v1263_12(void) = AliasedUse : ~m? -# 1263| v1263_13(void) = ExitFunction : +# 1310| void A::static_member(A*, int) +# 1310| Block 0 +# 1310| v1310_1(void) = EnterFunction : +# 1310| mu1310_2(unknown) = AliasedDefinition : +# 1310| mu1310_3(unknown) = InitializeNonLocal : +# 1310| r1310_4(glval) = VariableAddress[a] : +# 1310| mu1310_5(A *) = InitializeParameter[a] : &:r1310_4 +# 1310| r1310_6(A *) = Load[a] : &:r1310_4, ~m? +# 1310| mu1310_7(unknown) = InitializeIndirection[a] : &:r1310_6 +# 1310| r1310_8(glval) = VariableAddress[x] : +# 1310| mu1310_9(int) = InitializeParameter[x] : &:r1310_8 +# 1311| r1311_1(glval) = VariableAddress[x] : +# 1311| r1311_2(int) = Load[x] : &:r1311_1, ~m? +# 1311| r1311_3(glval) = VariableAddress[a] : +# 1311| r1311_4(A *) = Load[a] : &:r1311_3, ~m? +# 1311| r1311_5(glval) = FieldAddress[member] : r1311_4 +# 1311| mu1311_6(int) = Store[?] : &:r1311_5, r1311_2 +# 1312| v1312_1(void) = NoOp : +# 1310| v1310_10(void) = ReturnIndirection[a] : &:r1310_6, ~m? +# 1310| v1310_11(void) = ReturnVoid : +# 1310| v1310_12(void) = AliasedUse : ~m? +# 1310| v1310_13(void) = ExitFunction : -# 1272| void test_static_member_functions(int, A*) -# 1272| Block 0 -# 1272| v1272_1(void) = EnterFunction : -# 1272| mu1272_2(unknown) = AliasedDefinition : -# 1272| mu1272_3(unknown) = InitializeNonLocal : -# 1272| r1272_4(glval) = VariableAddress[int_arg] : -# 1272| mu1272_5(int) = InitializeParameter[int_arg] : &:r1272_4 -# 1272| r1272_6(glval) = VariableAddress[a_arg] : -# 1272| mu1272_7(A *) = InitializeParameter[a_arg] : &:r1272_6 -# 1272| r1272_8(A *) = Load[a_arg] : &:r1272_6, ~m? -# 1272| mu1272_9(unknown) = InitializeIndirection[a_arg] : &:r1272_8 -# 1273| r1273_1(glval) = VariableAddress[c] : -# 1273| mu1273_2(C) = Uninitialized[c] : &:r1273_1 -# 1273| r1273_3(glval) = FunctionAddress[C] : -# 1273| v1273_4(void) = Call[C] : func:r1273_3, this:r1273_1 -# 1273| mu1273_5(unknown) = ^CallSideEffect : ~m? -# 1273| mu1273_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1273_1 -# 1274| r1274_1(glval) = VariableAddress[c] : -# 1274| r1274_2(glval) = FunctionAddress[StaticMemberFunction] : -# 1274| r1274_3(int) = Constant[10] : -# 1274| r1274_4(int) = Call[StaticMemberFunction] : func:r1274_2, 0:r1274_3 -# 1274| mu1274_5(unknown) = ^CallSideEffect : ~m? -# 1275| r1275_1(glval) = FunctionAddress[StaticMemberFunction] : -# 1275| r1275_2(int) = Constant[10] : -# 1275| r1275_3(int) = Call[StaticMemberFunction] : func:r1275_1, 0:r1275_2 -# 1275| mu1275_4(unknown) = ^CallSideEffect : ~m? -# 1277| r1277_1(glval) = VariableAddress[a] : -# 1277| mu1277_2(A) = Uninitialized[a] : &:r1277_1 -# 1278| r1278_1(glval) = VariableAddress[a] : -# 1278| r1278_2(glval) = FunctionAddress[static_member] : -# 1278| r1278_3(glval) = VariableAddress[a] : -# 1278| r1278_4(A *) = CopyValue : r1278_3 -# 1278| r1278_5(glval) = VariableAddress[int_arg] : -# 1278| r1278_6(int) = Load[int_arg] : &:r1278_5, ~m? -# 1278| v1278_7(void) = Call[static_member] : func:r1278_2, 0:r1278_4, 1:r1278_6 -# 1278| mu1278_8(unknown) = ^CallSideEffect : ~m? -# 1278| v1278_9(void) = ^BufferReadSideEffect[0] : &:r1278_4, ~m? -# 1278| mu1278_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1278_4 -# 1279| r1279_1(glval) = FunctionAddress[static_member] : -# 1279| r1279_2(glval) = VariableAddress[a] : -# 1279| r1279_3(A *) = CopyValue : r1279_2 -# 1279| r1279_4(glval) = VariableAddress[int_arg] : -# 1279| r1279_5(int) = Load[int_arg] : &:r1279_4, ~m? -# 1279| v1279_6(void) = Call[static_member] : func:r1279_1, 0:r1279_3, 1:r1279_5 -# 1279| mu1279_7(unknown) = ^CallSideEffect : ~m? -# 1279| v1279_8(void) = ^BufferReadSideEffect[0] : &:r1279_3, ~m? -# 1279| mu1279_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1279_3 -# 1281| r1281_1(glval) = VariableAddress[a] : -# 1281| r1281_2(A *) = CopyValue : r1281_1 -# 1281| r1281_3(glval) = FunctionAddress[static_member] : -# 1281| r1281_4(glval) = VariableAddress[a_arg] : -# 1281| r1281_5(A *) = Load[a_arg] : &:r1281_4, ~m? -# 1281| r1281_6(glval) = VariableAddress[int_arg] : -# 1281| r1281_7(int) = Load[int_arg] : &:r1281_6, ~m? -# 1281| r1281_8(int) = Constant[2] : -# 1281| r1281_9(int) = Add : r1281_7, r1281_8 -# 1281| v1281_10(void) = Call[static_member] : func:r1281_3, 0:r1281_5, 1:r1281_9 -# 1281| mu1281_11(unknown) = ^CallSideEffect : ~m? -# 1281| v1281_12(void) = ^BufferReadSideEffect[0] : &:r1281_5, ~m? -# 1281| mu1281_13(unknown) = ^BufferMayWriteSideEffect[0] : &:r1281_5 -# 1282| r1282_1(glval) = VariableAddress[a_arg] : -# 1282| r1282_2(A *) = Load[a_arg] : &:r1282_1, ~m? -# 1282| r1282_3(glval) = CopyValue : r1282_2 -# 1282| r1282_4(glval) = FunctionAddress[static_member] : -# 1282| r1282_5(glval) = VariableAddress[a] : -# 1282| r1282_6(A *) = CopyValue : r1282_5 -# 1282| r1282_7(int) = Constant[99] : -# 1282| v1282_8(void) = Call[static_member] : func:r1282_4, 0:r1282_6, 1:r1282_7 -# 1282| mu1282_9(unknown) = ^CallSideEffect : ~m? -# 1282| v1282_10(void) = ^BufferReadSideEffect[0] : &:r1282_6, ~m? -# 1282| mu1282_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1282_6 -# 1283| r1283_1(glval) = VariableAddress[a_arg] : -# 1283| r1283_2(A *) = Load[a_arg] : &:r1283_1, ~m? -# 1283| r1283_3(glval) = FunctionAddress[static_member] : -# 1283| r1283_4(glval) = VariableAddress[a_arg] : -# 1283| r1283_5(A *) = Load[a_arg] : &:r1283_4, ~m? -# 1283| r1283_6(int) = Constant[-1] : -# 1283| v1283_7(void) = Call[static_member] : func:r1283_3, 0:r1283_5, 1:r1283_6 -# 1283| mu1283_8(unknown) = ^CallSideEffect : ~m? -# 1283| v1283_9(void) = ^BufferReadSideEffect[0] : &:r1283_5, ~m? -# 1283| mu1283_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1283_5 -# 1285| r1285_1(glval) = VariableAddress[a] : -# 1285| r1285_2(glval) = FunctionAddress[static_member_without_def] : -# 1285| v1285_3(void) = Call[static_member_without_def] : func:r1285_2 -# 1285| mu1285_4(unknown) = ^CallSideEffect : ~m? -# 1286| r1286_1(glval) = FunctionAddress[static_member_without_def] : -# 1286| v1286_2(void) = Call[static_member_without_def] : func:r1286_1 -# 1286| mu1286_3(unknown) = ^CallSideEffect : ~m? -# 1288| r1288_1(glval) = FunctionAddress[getAnInstanceOfA] : -# 1288| r1288_2(A *) = Call[getAnInstanceOfA] : func:r1288_1 -# 1288| mu1288_3(unknown) = ^CallSideEffect : ~m? -# 1288| r1288_4(glval) = FunctionAddress[static_member_without_def] : -# 1288| v1288_5(void) = Call[static_member_without_def] : func:r1288_4 -# 1288| mu1288_6(unknown) = ^CallSideEffect : ~m? -# 1289| v1289_1(void) = NoOp : -# 1289| r1289_2(glval) = VariableAddress[c] : -# 1289| r1289_3(glval) = FunctionAddress[~C] : -# 1289| v1289_4(void) = Call[~C] : func:r1289_3, this:r1289_2 -# 1289| mu1289_5(unknown) = ^CallSideEffect : ~m? -# 1289| v1289_6(void) = ^IndirectReadSideEffect[-1] : &:r1289_2, ~m? -# 1289| mu1289_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1289_2 -# 1272| v1272_10(void) = ReturnIndirection[a_arg] : &:r1272_8, ~m? -# 1272| v1272_11(void) = ReturnVoid : -# 1272| v1272_12(void) = AliasedUse : ~m? -# 1272| v1272_13(void) = ExitFunction : +# 1319| void test_static_member_functions(int, A*) +# 1319| Block 0 +# 1319| v1319_1(void) = EnterFunction : +# 1319| mu1319_2(unknown) = AliasedDefinition : +# 1319| mu1319_3(unknown) = InitializeNonLocal : +# 1319| r1319_4(glval) = VariableAddress[int_arg] : +# 1319| mu1319_5(int) = InitializeParameter[int_arg] : &:r1319_4 +# 1319| r1319_6(glval) = VariableAddress[a_arg] : +# 1319| mu1319_7(A *) = InitializeParameter[a_arg] : &:r1319_6 +# 1319| r1319_8(A *) = Load[a_arg] : &:r1319_6, ~m? +# 1319| mu1319_9(unknown) = InitializeIndirection[a_arg] : &:r1319_8 +# 1320| r1320_1(glval) = VariableAddress[c] : +# 1320| mu1320_2(C) = Uninitialized[c] : &:r1320_1 +# 1320| r1320_3(glval) = FunctionAddress[C] : +# 1320| v1320_4(void) = Call[C] : func:r1320_3, this:r1320_1 +# 1320| mu1320_5(unknown) = ^CallSideEffect : ~m? +# 1320| mu1320_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1320_1 +# 1321| r1321_1(glval) = VariableAddress[c] : +# 1321| r1321_2(glval) = FunctionAddress[StaticMemberFunction] : +# 1321| r1321_3(int) = Constant[10] : +# 1321| r1321_4(int) = Call[StaticMemberFunction] : func:r1321_2, 0:r1321_3 +# 1321| mu1321_5(unknown) = ^CallSideEffect : ~m? +# 1322| r1322_1(glval) = FunctionAddress[StaticMemberFunction] : +# 1322| r1322_2(int) = Constant[10] : +# 1322| r1322_3(int) = Call[StaticMemberFunction] : func:r1322_1, 0:r1322_2 +# 1322| mu1322_4(unknown) = ^CallSideEffect : ~m? +# 1324| r1324_1(glval) = VariableAddress[a] : +# 1324| mu1324_2(A) = Uninitialized[a] : &:r1324_1 +# 1325| r1325_1(glval) = VariableAddress[a] : +# 1325| r1325_2(glval) = FunctionAddress[static_member] : +# 1325| r1325_3(glval) = VariableAddress[a] : +# 1325| r1325_4(A *) = CopyValue : r1325_3 +# 1325| r1325_5(glval) = VariableAddress[int_arg] : +# 1325| r1325_6(int) = Load[int_arg] : &:r1325_5, ~m? +# 1325| v1325_7(void) = Call[static_member] : func:r1325_2, 0:r1325_4, 1:r1325_6 +# 1325| mu1325_8(unknown) = ^CallSideEffect : ~m? +# 1325| v1325_9(void) = ^BufferReadSideEffect[0] : &:r1325_4, ~m? +# 1325| mu1325_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1325_4 +# 1326| r1326_1(glval) = FunctionAddress[static_member] : +# 1326| r1326_2(glval) = VariableAddress[a] : +# 1326| r1326_3(A *) = CopyValue : r1326_2 +# 1326| r1326_4(glval) = VariableAddress[int_arg] : +# 1326| r1326_5(int) = Load[int_arg] : &:r1326_4, ~m? +# 1326| v1326_6(void) = Call[static_member] : func:r1326_1, 0:r1326_3, 1:r1326_5 +# 1326| mu1326_7(unknown) = ^CallSideEffect : ~m? +# 1326| v1326_8(void) = ^BufferReadSideEffect[0] : &:r1326_3, ~m? +# 1326| mu1326_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1326_3 +# 1328| r1328_1(glval) = VariableAddress[a] : +# 1328| r1328_2(A *) = CopyValue : r1328_1 +# 1328| r1328_3(glval) = FunctionAddress[static_member] : +# 1328| r1328_4(glval) = VariableAddress[a_arg] : +# 1328| r1328_5(A *) = Load[a_arg] : &:r1328_4, ~m? +# 1328| r1328_6(glval) = VariableAddress[int_arg] : +# 1328| r1328_7(int) = Load[int_arg] : &:r1328_6, ~m? +# 1328| r1328_8(int) = Constant[2] : +# 1328| r1328_9(int) = Add : r1328_7, r1328_8 +# 1328| v1328_10(void) = Call[static_member] : func:r1328_3, 0:r1328_5, 1:r1328_9 +# 1328| mu1328_11(unknown) = ^CallSideEffect : ~m? +# 1328| v1328_12(void) = ^BufferReadSideEffect[0] : &:r1328_5, ~m? +# 1328| mu1328_13(unknown) = ^BufferMayWriteSideEffect[0] : &:r1328_5 +# 1329| r1329_1(glval) = VariableAddress[a_arg] : +# 1329| r1329_2(A *) = Load[a_arg] : &:r1329_1, ~m? +# 1329| r1329_3(glval) = CopyValue : r1329_2 +# 1329| r1329_4(glval) = FunctionAddress[static_member] : +# 1329| r1329_5(glval) = VariableAddress[a] : +# 1329| r1329_6(A *) = CopyValue : r1329_5 +# 1329| r1329_7(int) = Constant[99] : +# 1329| v1329_8(void) = Call[static_member] : func:r1329_4, 0:r1329_6, 1:r1329_7 +# 1329| mu1329_9(unknown) = ^CallSideEffect : ~m? +# 1329| v1329_10(void) = ^BufferReadSideEffect[0] : &:r1329_6, ~m? +# 1329| mu1329_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1329_6 +# 1330| r1330_1(glval) = VariableAddress[a_arg] : +# 1330| r1330_2(A *) = Load[a_arg] : &:r1330_1, ~m? +# 1330| r1330_3(glval) = FunctionAddress[static_member] : +# 1330| r1330_4(glval) = VariableAddress[a_arg] : +# 1330| r1330_5(A *) = Load[a_arg] : &:r1330_4, ~m? +# 1330| r1330_6(int) = Constant[-1] : +# 1330| v1330_7(void) = Call[static_member] : func:r1330_3, 0:r1330_5, 1:r1330_6 +# 1330| mu1330_8(unknown) = ^CallSideEffect : ~m? +# 1330| v1330_9(void) = ^BufferReadSideEffect[0] : &:r1330_5, ~m? +# 1330| mu1330_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1330_5 +# 1332| r1332_1(glval) = VariableAddress[a] : +# 1332| r1332_2(glval) = FunctionAddress[static_member_without_def] : +# 1332| v1332_3(void) = Call[static_member_without_def] : func:r1332_2 +# 1332| mu1332_4(unknown) = ^CallSideEffect : ~m? +# 1333| r1333_1(glval) = FunctionAddress[static_member_without_def] : +# 1333| v1333_2(void) = Call[static_member_without_def] : func:r1333_1 +# 1333| mu1333_3(unknown) = ^CallSideEffect : ~m? +# 1335| r1335_1(glval) = FunctionAddress[getAnInstanceOfA] : +# 1335| r1335_2(A *) = Call[getAnInstanceOfA] : func:r1335_1 +# 1335| mu1335_3(unknown) = ^CallSideEffect : ~m? +# 1335| r1335_4(glval) = FunctionAddress[static_member_without_def] : +# 1335| v1335_5(void) = Call[static_member_without_def] : func:r1335_4 +# 1335| mu1335_6(unknown) = ^CallSideEffect : ~m? +# 1336| v1336_1(void) = NoOp : +# 1336| r1336_2(glval) = VariableAddress[c] : +# 1336| r1336_3(glval) = FunctionAddress[~C] : +# 1336| v1336_4(void) = Call[~C] : func:r1336_3, this:r1336_2 +# 1336| mu1336_5(unknown) = ^CallSideEffect : ~m? +# 1336| v1336_6(void) = ^IndirectReadSideEffect[-1] : &:r1336_2, ~m? +# 1336| mu1336_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1336_2 +# 1319| v1319_10(void) = ReturnIndirection[a_arg] : &:r1319_8, ~m? +# 1319| v1319_11(void) = ReturnVoid : +# 1319| v1319_12(void) = AliasedUse : ~m? +# 1319| v1319_13(void) = ExitFunction : -# 1291| int missingReturnValue(bool, int) -# 1291| Block 0 -# 1291| v1291_1(void) = EnterFunction : -# 1291| mu1291_2(unknown) = AliasedDefinition : -# 1291| mu1291_3(unknown) = InitializeNonLocal : -# 1291| r1291_4(glval) = VariableAddress[b] : -# 1291| mu1291_5(bool) = InitializeParameter[b] : &:r1291_4 -# 1291| r1291_6(glval) = VariableAddress[x] : -# 1291| mu1291_7(int) = InitializeParameter[x] : &:r1291_6 -# 1292| r1292_1(glval) = VariableAddress[b] : -# 1292| r1292_2(bool) = Load[b] : &:r1292_1, ~m? -# 1292| v1292_3(void) = ConditionalBranch : r1292_2 +# 1338| int missingReturnValue(bool, int) +# 1338| Block 0 +# 1338| v1338_1(void) = EnterFunction : +# 1338| mu1338_2(unknown) = AliasedDefinition : +# 1338| mu1338_3(unknown) = InitializeNonLocal : +# 1338| r1338_4(glval) = VariableAddress[b] : +# 1338| mu1338_5(bool) = InitializeParameter[b] : &:r1338_4 +# 1338| r1338_6(glval) = VariableAddress[x] : +# 1338| mu1338_7(int) = InitializeParameter[x] : &:r1338_6 +# 1339| r1339_1(glval) = VariableAddress[b] : +# 1339| r1339_2(bool) = Load[b] : &:r1339_1, ~m? +# 1339| v1339_3(void) = ConditionalBranch : r1339_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 1291| Block 1 -# 1291| r1291_8(glval) = VariableAddress[#return] : -# 1291| v1291_9(void) = ReturnValue : &:r1291_8, ~m? -# 1291| v1291_10(void) = AliasedUse : ~m? -# 1291| v1291_11(void) = ExitFunction : +# 1338| Block 1 +# 1338| r1338_8(glval) = VariableAddress[#return] : +# 1338| v1338_9(void) = ReturnValue : &:r1338_8, ~m? +# 1338| v1338_10(void) = AliasedUse : ~m? +# 1338| v1338_11(void) = ExitFunction : -# 1293| Block 2 -# 1293| r1293_1(glval) = VariableAddress[#return] : -# 1293| r1293_2(glval) = VariableAddress[x] : -# 1293| r1293_3(int) = Load[x] : &:r1293_2, ~m? -# 1293| mu1293_4(int) = Store[#return] : &:r1293_1, r1293_3 +# 1340| Block 2 +# 1340| r1340_1(glval) = VariableAddress[#return] : +# 1340| r1340_2(glval) = VariableAddress[x] : +# 1340| r1340_3(int) = Load[x] : &:r1340_2, ~m? +# 1340| mu1340_4(int) = Store[#return] : &:r1340_1, r1340_3 #-----| Goto -> Block 1 -# 1295| Block 3 -# 1295| r1295_1(glval) = VariableAddress[#return] : -# 1295| mu1295_2(int) = Uninitialized[#return] : &:r1295_1 +# 1342| Block 3 +# 1342| r1342_1(glval) = VariableAddress[#return] : +# 1342| mu1342_2(int) = Uninitialized[#return] : &:r1342_1 #-----| Goto -> Block 1 -# 1297| void returnVoid(int, int) -# 1297| Block 0 -# 1297| v1297_1(void) = EnterFunction : -# 1297| mu1297_2(unknown) = AliasedDefinition : -# 1297| mu1297_3(unknown) = InitializeNonLocal : -# 1297| r1297_4(glval) = VariableAddress[x] : -# 1297| mu1297_5(int) = InitializeParameter[x] : &:r1297_4 -# 1297| r1297_6(glval) = VariableAddress[y] : -# 1297| mu1297_7(int) = InitializeParameter[y] : &:r1297_6 -# 1298| r1298_1(glval) = FunctionAddress[IntegerOps] : -# 1298| r1298_2(glval) = VariableAddress[x] : -# 1298| r1298_3(int) = Load[x] : &:r1298_2, ~m? -# 1298| r1298_4(glval) = VariableAddress[y] : -# 1298| r1298_5(int) = Load[y] : &:r1298_4, ~m? -# 1298| v1298_6(void) = Call[IntegerOps] : func:r1298_1, 0:r1298_3, 1:r1298_5 -# 1298| mu1298_7(unknown) = ^CallSideEffect : ~m? -# 1298| v1298_8(void) = NoOp : -# 1297| v1297_8(void) = ReturnVoid : -# 1297| v1297_9(void) = AliasedUse : ~m? -# 1297| v1297_10(void) = ExitFunction : +# 1344| void returnVoid(int, int) +# 1344| Block 0 +# 1344| v1344_1(void) = EnterFunction : +# 1344| mu1344_2(unknown) = AliasedDefinition : +# 1344| mu1344_3(unknown) = InitializeNonLocal : +# 1344| r1344_4(glval) = VariableAddress[x] : +# 1344| mu1344_5(int) = InitializeParameter[x] : &:r1344_4 +# 1344| r1344_6(glval) = VariableAddress[y] : +# 1344| mu1344_7(int) = InitializeParameter[y] : &:r1344_6 +# 1345| r1345_1(glval) = FunctionAddress[IntegerOps] : +# 1345| r1345_2(glval) = VariableAddress[x] : +# 1345| r1345_3(int) = Load[x] : &:r1345_2, ~m? +# 1345| r1345_4(glval) = VariableAddress[y] : +# 1345| r1345_5(int) = Load[y] : &:r1345_4, ~m? +# 1345| v1345_6(void) = Call[IntegerOps] : func:r1345_1, 0:r1345_3, 1:r1345_5 +# 1345| mu1345_7(unknown) = ^CallSideEffect : ~m? +# 1345| v1345_8(void) = NoOp : +# 1344| v1344_8(void) = ReturnVoid : +# 1344| v1344_9(void) = AliasedUse : ~m? +# 1344| v1344_10(void) = ExitFunction : -# 1301| void gccBinaryConditional(bool, int, long) -# 1301| Block 0 -# 1301| v1301_1(void) = EnterFunction : -# 1301| mu1301_2(unknown) = AliasedDefinition : -# 1301| mu1301_3(unknown) = InitializeNonLocal : -# 1301| r1301_4(glval) = VariableAddress[b] : -# 1301| mu1301_5(bool) = InitializeParameter[b] : &:r1301_4 -# 1301| r1301_6(glval) = VariableAddress[x] : -# 1301| mu1301_7(int) = InitializeParameter[x] : &:r1301_6 -# 1301| r1301_8(glval) = VariableAddress[y] : -# 1301| mu1301_9(long) = InitializeParameter[y] : &:r1301_8 -# 1302| r1302_1(glval) = VariableAddress[z] : -# 1302| r1302_2(glval) = VariableAddress[x] : -# 1302| r1302_3(int) = Load[x] : &:r1302_2, ~m? -# 1302| mu1302_4(int) = Store[z] : &:r1302_1, r1302_3 -# 1303| r1303_1(glval) = VariableAddress[b] : -# 1303| r1303_2(bool) = Load[b] : &:r1303_1, ~m? -# 1303| v1303_3(void) = ConditionalBranch : r1303_2 +# 1348| void gccBinaryConditional(bool, int, long) +# 1348| Block 0 +# 1348| v1348_1(void) = EnterFunction : +# 1348| mu1348_2(unknown) = AliasedDefinition : +# 1348| mu1348_3(unknown) = InitializeNonLocal : +# 1348| r1348_4(glval) = VariableAddress[b] : +# 1348| mu1348_5(bool) = InitializeParameter[b] : &:r1348_4 +# 1348| r1348_6(glval) = VariableAddress[x] : +# 1348| mu1348_7(int) = InitializeParameter[x] : &:r1348_6 +# 1348| r1348_8(glval) = VariableAddress[y] : +# 1348| mu1348_9(long) = InitializeParameter[y] : &:r1348_8 +# 1349| r1349_1(glval) = VariableAddress[z] : +# 1349| r1349_2(glval) = VariableAddress[x] : +# 1349| r1349_3(int) = Load[x] : &:r1349_2, ~m? +# 1349| mu1349_4(int) = Store[z] : &:r1349_1, r1349_3 +# 1350| r1350_1(glval) = VariableAddress[b] : +# 1350| r1350_2(bool) = Load[b] : &:r1350_1, ~m? +# 1350| v1350_3(void) = ConditionalBranch : r1350_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 1303| Block 1 -# 1303| r1303_4(glval) = VariableAddress[#temp1303:9] : -# 1303| r1303_5(int) = Load[#temp1303:9] : &:r1303_4, ~m? -# 1303| r1303_6(glval) = VariableAddress[z] : -# 1303| mu1303_7(int) = Store[z] : &:r1303_6, r1303_5 -# 1304| r1304_1(glval) = VariableAddress[b] : -# 1304| r1304_2(bool) = Load[b] : &:r1304_1, ~m? -# 1304| v1304_3(void) = ConditionalBranch : r1304_2 +# 1350| Block 1 +# 1350| r1350_4(glval) = VariableAddress[#temp1350:9] : +# 1350| r1350_5(int) = Load[#temp1350:9] : &:r1350_4, ~m? +# 1350| r1350_6(glval) = VariableAddress[z] : +# 1350| mu1350_7(int) = Store[z] : &:r1350_6, r1350_5 +# 1351| r1351_1(glval) = VariableAddress[b] : +# 1351| r1351_2(bool) = Load[b] : &:r1351_1, ~m? +# 1351| v1351_3(void) = ConditionalBranch : r1351_2 #-----| False -> Block 6 #-----| True -> Block 5 -# 1303| Block 2 -# 1303| r1303_8(glval) = VariableAddress[#temp1303:9] : -# 1303| mu1303_9(int) = Store[#temp1303:9] : &:r1303_8, r1303_2 +# 1350| Block 2 +# 1350| r1350_8(glval) = VariableAddress[#temp1350:9] : +# 1350| mu1350_9(int) = Store[#temp1350:9] : &:r1350_8, r1350_2 #-----| Goto -> Block 1 -# 1303| Block 3 -# 1303| r1303_10(glval) = VariableAddress[x] : -# 1303| r1303_11(int) = Load[x] : &:r1303_10, ~m? -# 1303| r1303_12(glval) = VariableAddress[#temp1303:9] : -# 1303| mu1303_13(int) = Store[#temp1303:9] : &:r1303_12, r1303_11 +# 1350| Block 3 +# 1350| r1350_10(glval) = VariableAddress[x] : +# 1350| r1350_11(int) = Load[x] : &:r1350_10, ~m? +# 1350| r1350_12(glval) = VariableAddress[#temp1350:9] : +# 1350| mu1350_13(int) = Store[#temp1350:9] : &:r1350_12, r1350_11 #-----| Goto -> Block 1 -# 1304| Block 4 -# 1304| r1304_4(glval) = VariableAddress[#temp1304:9] : -# 1304| r1304_5(long) = Load[#temp1304:9] : &:r1304_4, ~m? -# 1304| r1304_6(int) = Convert : r1304_5 -# 1304| r1304_7(glval) = VariableAddress[z] : -# 1304| mu1304_8(int) = Store[z] : &:r1304_7, r1304_6 -# 1305| r1305_1(glval) = VariableAddress[x] : -# 1305| r1305_2(int) = Load[x] : &:r1305_1, ~m? -# 1305| r1305_3(int) = Constant[0] : -# 1305| r1305_4(bool) = CompareNE : r1305_2, r1305_3 -# 1305| v1305_5(void) = ConditionalBranch : r1305_4 +# 1351| Block 4 +# 1351| r1351_4(glval) = VariableAddress[#temp1351:9] : +# 1351| r1351_5(long) = Load[#temp1351:9] : &:r1351_4, ~m? +# 1351| r1351_6(int) = Convert : r1351_5 +# 1351| r1351_7(glval) = VariableAddress[z] : +# 1351| mu1351_8(int) = Store[z] : &:r1351_7, r1351_6 +# 1352| r1352_1(glval) = VariableAddress[x] : +# 1352| r1352_2(int) = Load[x] : &:r1352_1, ~m? +# 1352| r1352_3(int) = Constant[0] : +# 1352| r1352_4(bool) = CompareNE : r1352_2, r1352_3 +# 1352| v1352_5(void) = ConditionalBranch : r1352_4 #-----| False -> Block 9 #-----| True -> Block 8 -# 1304| Block 5 -# 1304| r1304_9(glval) = VariableAddress[#temp1304:9] : -# 1304| mu1304_10(long) = Store[#temp1304:9] : &:r1304_9, r1304_2 +# 1351| Block 5 +# 1351| r1351_9(glval) = VariableAddress[#temp1351:9] : +# 1351| mu1351_10(long) = Store[#temp1351:9] : &:r1351_9, r1351_2 #-----| Goto -> Block 4 -# 1304| Block 6 -# 1304| r1304_11(glval) = VariableAddress[y] : -# 1304| r1304_12(long) = Load[y] : &:r1304_11, ~m? -# 1304| r1304_13(glval) = VariableAddress[#temp1304:9] : -# 1304| mu1304_14(long) = Store[#temp1304:9] : &:r1304_13, r1304_12 +# 1351| Block 6 +# 1351| r1351_11(glval) = VariableAddress[y] : +# 1351| r1351_12(long) = Load[y] : &:r1351_11, ~m? +# 1351| r1351_13(glval) = VariableAddress[#temp1351:9] : +# 1351| mu1351_14(long) = Store[#temp1351:9] : &:r1351_13, r1351_12 #-----| Goto -> Block 4 -# 1305| Block 7 -# 1305| r1305_6(glval) = VariableAddress[#temp1305:9] : -# 1305| r1305_7(int) = Load[#temp1305:9] : &:r1305_6, ~m? -# 1305| r1305_8(glval) = VariableAddress[z] : -# 1305| mu1305_9(int) = Store[z] : &:r1305_8, r1305_7 -# 1306| r1306_1(glval) = VariableAddress[x] : -# 1306| r1306_2(int) = Load[x] : &:r1306_1, ~m? -# 1306| r1306_3(int) = Constant[0] : -# 1306| r1306_4(bool) = CompareNE : r1306_2, r1306_3 -# 1306| v1306_5(void) = ConditionalBranch : r1306_4 +# 1352| Block 7 +# 1352| r1352_6(glval) = VariableAddress[#temp1352:9] : +# 1352| r1352_7(int) = Load[#temp1352:9] : &:r1352_6, ~m? +# 1352| r1352_8(glval) = VariableAddress[z] : +# 1352| mu1352_9(int) = Store[z] : &:r1352_8, r1352_7 +# 1353| r1353_1(glval) = VariableAddress[x] : +# 1353| r1353_2(int) = Load[x] : &:r1353_1, ~m? +# 1353| r1353_3(int) = Constant[0] : +# 1353| r1353_4(bool) = CompareNE : r1353_2, r1353_3 +# 1353| v1353_5(void) = ConditionalBranch : r1353_4 #-----| False -> Block 12 #-----| True -> Block 11 -# 1305| Block 8 -# 1305| r1305_10(glval) = VariableAddress[#temp1305:9] : -# 1305| mu1305_11(int) = Store[#temp1305:9] : &:r1305_10, r1305_2 +# 1352| Block 8 +# 1352| r1352_10(glval) = VariableAddress[#temp1352:9] : +# 1352| mu1352_11(int) = Store[#temp1352:9] : &:r1352_10, r1352_2 #-----| Goto -> Block 7 -# 1305| Block 9 -# 1305| r1305_12(glval) = VariableAddress[x] : -# 1305| r1305_13(int) = Load[x] : &:r1305_12, ~m? -# 1305| r1305_14(glval) = VariableAddress[#temp1305:9] : -# 1305| mu1305_15(int) = Store[#temp1305:9] : &:r1305_14, r1305_13 +# 1352| Block 9 +# 1352| r1352_12(glval) = VariableAddress[x] : +# 1352| r1352_13(int) = Load[x] : &:r1352_12, ~m? +# 1352| r1352_14(glval) = VariableAddress[#temp1352:9] : +# 1352| mu1352_15(int) = Store[#temp1352:9] : &:r1352_14, r1352_13 #-----| Goto -> Block 7 -# 1306| Block 10 -# 1306| r1306_6(glval) = VariableAddress[#temp1306:9] : -# 1306| r1306_7(long) = Load[#temp1306:9] : &:r1306_6, ~m? -# 1306| r1306_8(int) = Convert : r1306_7 -# 1306| r1306_9(glval) = VariableAddress[z] : -# 1306| mu1306_10(int) = Store[z] : &:r1306_9, r1306_8 -# 1307| r1307_1(glval) = VariableAddress[y] : -# 1307| r1307_2(long) = Load[y] : &:r1307_1, ~m? -# 1307| r1307_3(long) = Constant[0] : -# 1307| r1307_4(bool) = CompareNE : r1307_2, r1307_3 -# 1307| v1307_5(void) = ConditionalBranch : r1307_4 +# 1353| Block 10 +# 1353| r1353_6(glval) = VariableAddress[#temp1353:9] : +# 1353| r1353_7(long) = Load[#temp1353:9] : &:r1353_6, ~m? +# 1353| r1353_8(int) = Convert : r1353_7 +# 1353| r1353_9(glval) = VariableAddress[z] : +# 1353| mu1353_10(int) = Store[z] : &:r1353_9, r1353_8 +# 1354| r1354_1(glval) = VariableAddress[y] : +# 1354| r1354_2(long) = Load[y] : &:r1354_1, ~m? +# 1354| r1354_3(long) = Constant[0] : +# 1354| r1354_4(bool) = CompareNE : r1354_2, r1354_3 +# 1354| v1354_5(void) = ConditionalBranch : r1354_4 #-----| False -> Block 15 #-----| True -> Block 14 -# 1306| Block 11 -# 1306| r1306_11(glval) = VariableAddress[#temp1306:9] : -# 1306| mu1306_12(long) = Store[#temp1306:9] : &:r1306_11, r1306_2 +# 1353| Block 11 +# 1353| r1353_11(glval) = VariableAddress[#temp1353:9] : +# 1353| mu1353_12(long) = Store[#temp1353:9] : &:r1353_11, r1353_2 #-----| Goto -> Block 10 -# 1306| Block 12 -# 1306| r1306_13(glval) = VariableAddress[y] : -# 1306| r1306_14(long) = Load[y] : &:r1306_13, ~m? -# 1306| r1306_15(glval) = VariableAddress[#temp1306:9] : -# 1306| mu1306_16(long) = Store[#temp1306:9] : &:r1306_15, r1306_14 +# 1353| Block 12 +# 1353| r1353_13(glval) = VariableAddress[y] : +# 1353| r1353_14(long) = Load[y] : &:r1353_13, ~m? +# 1353| r1353_15(glval) = VariableAddress[#temp1353:9] : +# 1353| mu1353_16(long) = Store[#temp1353:9] : &:r1353_15, r1353_14 #-----| Goto -> Block 10 -# 1307| Block 13 -# 1307| r1307_6(glval) = VariableAddress[#temp1307:9] : -# 1307| r1307_7(long) = Load[#temp1307:9] : &:r1307_6, ~m? -# 1307| r1307_8(int) = Convert : r1307_7 -# 1307| r1307_9(glval) = VariableAddress[z] : -# 1307| mu1307_10(int) = Store[z] : &:r1307_9, r1307_8 -# 1308| r1308_1(glval) = VariableAddress[y] : -# 1308| r1308_2(long) = Load[y] : &:r1308_1, ~m? -# 1308| r1308_3(long) = Constant[0] : -# 1308| r1308_4(bool) = CompareNE : r1308_2, r1308_3 -# 1308| v1308_5(void) = ConditionalBranch : r1308_4 +# 1354| Block 13 +# 1354| r1354_6(glval) = VariableAddress[#temp1354:9] : +# 1354| r1354_7(long) = Load[#temp1354:9] : &:r1354_6, ~m? +# 1354| r1354_8(int) = Convert : r1354_7 +# 1354| r1354_9(glval) = VariableAddress[z] : +# 1354| mu1354_10(int) = Store[z] : &:r1354_9, r1354_8 +# 1355| r1355_1(glval) = VariableAddress[y] : +# 1355| r1355_2(long) = Load[y] : &:r1355_1, ~m? +# 1355| r1355_3(long) = Constant[0] : +# 1355| r1355_4(bool) = CompareNE : r1355_2, r1355_3 +# 1355| v1355_5(void) = ConditionalBranch : r1355_4 #-----| False -> Block 18 #-----| True -> Block 17 -# 1307| Block 14 -# 1307| r1307_11(glval) = VariableAddress[#temp1307:9] : -# 1307| mu1307_12(long) = Store[#temp1307:9] : &:r1307_11, r1307_2 +# 1354| Block 14 +# 1354| r1354_11(glval) = VariableAddress[#temp1354:9] : +# 1354| mu1354_12(long) = Store[#temp1354:9] : &:r1354_11, r1354_2 #-----| Goto -> Block 13 -# 1307| Block 15 -# 1307| r1307_13(glval) = VariableAddress[x] : -# 1307| r1307_14(int) = Load[x] : &:r1307_13, ~m? -# 1307| r1307_15(long) = Convert : r1307_14 -# 1307| r1307_16(glval) = VariableAddress[#temp1307:9] : -# 1307| mu1307_17(long) = Store[#temp1307:9] : &:r1307_16, r1307_15 +# 1354| Block 15 +# 1354| r1354_13(glval) = VariableAddress[x] : +# 1354| r1354_14(int) = Load[x] : &:r1354_13, ~m? +# 1354| r1354_15(long) = Convert : r1354_14 +# 1354| r1354_16(glval) = VariableAddress[#temp1354:9] : +# 1354| mu1354_17(long) = Store[#temp1354:9] : &:r1354_16, r1354_15 #-----| Goto -> Block 13 -# 1308| Block 16 -# 1308| r1308_6(glval) = VariableAddress[#temp1308:9] : -# 1308| r1308_7(long) = Load[#temp1308:9] : &:r1308_6, ~m? -# 1308| r1308_8(int) = Convert : r1308_7 -# 1308| r1308_9(glval) = VariableAddress[z] : -# 1308| mu1308_10(int) = Store[z] : &:r1308_9, r1308_8 -# 1310| r1310_1(glval) = VariableAddress[x] : -# 1310| r1310_2(int) = Load[x] : &:r1310_1, ~m? -# 1310| r1310_3(int) = Constant[0] : -# 1310| r1310_4(bool) = CompareNE : r1310_2, r1310_3 -# 1310| v1310_5(void) = ConditionalBranch : r1310_4 +# 1355| Block 16 +# 1355| r1355_6(glval) = VariableAddress[#temp1355:9] : +# 1355| r1355_7(long) = Load[#temp1355:9] : &:r1355_6, ~m? +# 1355| r1355_8(int) = Convert : r1355_7 +# 1355| r1355_9(glval) = VariableAddress[z] : +# 1355| mu1355_10(int) = Store[z] : &:r1355_9, r1355_8 +# 1357| r1357_1(glval) = VariableAddress[x] : +# 1357| r1357_2(int) = Load[x] : &:r1357_1, ~m? +# 1357| r1357_3(int) = Constant[0] : +# 1357| r1357_4(bool) = CompareNE : r1357_2, r1357_3 +# 1357| v1357_5(void) = ConditionalBranch : r1357_4 #-----| False -> Block 25 #-----| True -> Block 24 -# 1308| Block 17 -# 1308| r1308_11(glval) = VariableAddress[#temp1308:9] : -# 1308| mu1308_12(long) = Store[#temp1308:9] : &:r1308_11, r1308_2 +# 1355| Block 17 +# 1355| r1355_11(glval) = VariableAddress[#temp1355:9] : +# 1355| mu1355_12(long) = Store[#temp1355:9] : &:r1355_11, r1355_2 #-----| Goto -> Block 16 -# 1308| Block 18 -# 1308| r1308_13(glval) = VariableAddress[y] : -# 1308| r1308_14(long) = Load[y] : &:r1308_13, ~m? -# 1308| r1308_15(glval) = VariableAddress[#temp1308:9] : -# 1308| mu1308_16(long) = Store[#temp1308:9] : &:r1308_15, r1308_14 +# 1355| Block 18 +# 1355| r1355_13(glval) = VariableAddress[y] : +# 1355| r1355_14(long) = Load[y] : &:r1355_13, ~m? +# 1355| r1355_15(glval) = VariableAddress[#temp1355:9] : +# 1355| mu1355_16(long) = Store[#temp1355:9] : &:r1355_15, r1355_14 #-----| Goto -> Block 16 -# 1310| Block 19 -# 1310| r1310_6(glval) = VariableAddress[#temp1310:9] : -# 1310| r1310_7(int) = Load[#temp1310:9] : &:r1310_6, ~m? -# 1310| r1310_8(glval) = VariableAddress[z] : -# 1310| mu1310_9(int) = Store[z] : &:r1310_8, r1310_7 -# 1311| v1311_1(void) = NoOp : -# 1301| v1301_10(void) = ReturnVoid : -# 1301| v1301_11(void) = AliasedUse : ~m? -# 1301| v1301_12(void) = ExitFunction : +# 1357| Block 19 +# 1357| r1357_6(glval) = VariableAddress[#temp1357:9] : +# 1357| r1357_7(int) = Load[#temp1357:9] : &:r1357_6, ~m? +# 1357| r1357_8(glval) = VariableAddress[z] : +# 1357| mu1357_9(int) = Store[z] : &:r1357_8, r1357_7 +# 1358| v1358_1(void) = NoOp : +# 1348| v1348_10(void) = ReturnVoid : +# 1348| v1348_11(void) = AliasedUse : ~m? +# 1348| v1348_12(void) = ExitFunction : -# 1310| Block 20 -# 1310| r1310_10(glval) = VariableAddress[#temp1310:9] : -# 1310| mu1310_11(int) = Store[#temp1310:9] : &:r1310_10, r1310_16 +# 1357| Block 20 +# 1357| r1357_10(glval) = VariableAddress[#temp1357:9] : +# 1357| mu1357_11(int) = Store[#temp1357:9] : &:r1357_10, r1357_16 #-----| Goto -> Block 19 -# 1310| Block 21 -# 1310| r1310_12(glval) = VariableAddress[#temp1310:10] : -# 1310| r1310_13(bool) = Constant[0] : -# 1310| mu1310_14(bool) = Store[#temp1310:10] : &:r1310_12, r1310_13 +# 1357| Block 21 +# 1357| r1357_12(glval) = VariableAddress[#temp1357:10] : +# 1357| r1357_13(bool) = Constant[0] : +# 1357| mu1357_14(bool) = Store[#temp1357:10] : &:r1357_12, r1357_13 #-----| Goto -> Block 22 -# 1310| Block 22 -# 1310| r1310_15(glval) = VariableAddress[#temp1310:10] : -# 1310| r1310_16(bool) = Load[#temp1310:10] : &:r1310_15, ~m? -# 1310| v1310_17(void) = ConditionalBranch : r1310_16 +# 1357| Block 22 +# 1357| r1357_15(glval) = VariableAddress[#temp1357:10] : +# 1357| r1357_16(bool) = Load[#temp1357:10] : &:r1357_15, ~m? +# 1357| v1357_17(void) = ConditionalBranch : r1357_16 #-----| False -> Block 26 #-----| True -> Block 20 -# 1310| Block 23 -# 1310| r1310_18(glval) = VariableAddress[#temp1310:10] : -# 1310| r1310_19(bool) = Constant[1] : -# 1310| mu1310_20(bool) = Store[#temp1310:10] : &:r1310_18, r1310_19 +# 1357| Block 23 +# 1357| r1357_18(glval) = VariableAddress[#temp1357:10] : +# 1357| r1357_19(bool) = Constant[1] : +# 1357| mu1357_20(bool) = Store[#temp1357:10] : &:r1357_18, r1357_19 #-----| Goto -> Block 22 -# 1310| Block 24 -# 1310| r1310_21(glval) = VariableAddress[b] : -# 1310| r1310_22(bool) = Load[b] : &:r1310_21, ~m? -# 1310| v1310_23(void) = ConditionalBranch : r1310_22 +# 1357| Block 24 +# 1357| r1357_21(glval) = VariableAddress[b] : +# 1357| r1357_22(bool) = Load[b] : &:r1357_21, ~m? +# 1357| v1357_23(void) = ConditionalBranch : r1357_22 #-----| False -> Block 25 #-----| True -> Block 23 -# 1310| Block 25 -# 1310| r1310_24(glval) = VariableAddress[y] : -# 1310| r1310_25(long) = Load[y] : &:r1310_24, ~m? -# 1310| r1310_26(long) = Constant[0] : -# 1310| r1310_27(bool) = CompareNE : r1310_25, r1310_26 -# 1310| v1310_28(void) = ConditionalBranch : r1310_27 +# 1357| Block 25 +# 1357| r1357_24(glval) = VariableAddress[y] : +# 1357| r1357_25(long) = Load[y] : &:r1357_24, ~m? +# 1357| r1357_26(long) = Constant[0] : +# 1357| r1357_27(bool) = CompareNE : r1357_25, r1357_26 +# 1357| v1357_28(void) = ConditionalBranch : r1357_27 #-----| False -> Block 21 #-----| True -> Block 23 -# 1310| Block 26 -# 1310| r1310_29(glval) = VariableAddress[x] : -# 1310| r1310_30(int) = Load[x] : &:r1310_29, ~m? -# 1310| r1310_31(glval) = VariableAddress[#temp1310:9] : -# 1310| mu1310_32(int) = Store[#temp1310:9] : &:r1310_31, r1310_30 +# 1357| Block 26 +# 1357| r1357_29(glval) = VariableAddress[x] : +# 1357| r1357_30(int) = Load[x] : &:r1357_29, ~m? +# 1357| r1357_31(glval) = VariableAddress[#temp1357:9] : +# 1357| mu1357_32(int) = Store[#temp1357:9] : &:r1357_31, r1357_30 #-----| Goto -> Block 19 -# 1316| int shortCircuitConditional(int, int) -# 1316| Block 0 -# 1316| v1316_1(void) = EnterFunction : -# 1316| mu1316_2(unknown) = AliasedDefinition : -# 1316| mu1316_3(unknown) = InitializeNonLocal : -# 1316| r1316_4(glval) = VariableAddress[x] : -# 1316| mu1316_5(int) = InitializeParameter[x] : &:r1316_4 -# 1316| r1316_6(glval) = VariableAddress[y] : -# 1316| mu1316_7(int) = InitializeParameter[y] : &:r1316_6 -# 1317| r1317_1(glval) = VariableAddress[#return] : -# 1317| r1317_2(glval) = FunctionAddress[predicateA] : -# 1317| r1317_3(bool) = Call[predicateA] : func:r1317_2 -# 1317| mu1317_4(unknown) = ^CallSideEffect : ~m? -# 1317| v1317_5(void) = ConditionalBranch : r1317_3 +# 1363| int shortCircuitConditional(int, int) +# 1363| Block 0 +# 1363| v1363_1(void) = EnterFunction : +# 1363| mu1363_2(unknown) = AliasedDefinition : +# 1363| mu1363_3(unknown) = InitializeNonLocal : +# 1363| r1363_4(glval) = VariableAddress[x] : +# 1363| mu1363_5(int) = InitializeParameter[x] : &:r1363_4 +# 1363| r1363_6(glval) = VariableAddress[y] : +# 1363| mu1363_7(int) = InitializeParameter[y] : &:r1363_6 +# 1364| r1364_1(glval) = VariableAddress[#return] : +# 1364| r1364_2(glval) = FunctionAddress[predicateA] : +# 1364| r1364_3(bool) = Call[predicateA] : func:r1364_2 +# 1364| mu1364_4(unknown) = ^CallSideEffect : ~m? +# 1364| v1364_5(void) = ConditionalBranch : r1364_3 #-----| False -> Block 4 #-----| True -> Block 2 -# 1317| Block 1 -# 1317| r1317_6(glval) = VariableAddress[#temp1317:12] : -# 1317| r1317_7(int) = Load[#temp1317:12] : &:r1317_6, ~m? -# 1317| mu1317_8(int) = Store[#return] : &:r1317_1, r1317_7 -# 1316| r1316_8(glval) = VariableAddress[#return] : -# 1316| v1316_9(void) = ReturnValue : &:r1316_8, ~m? -# 1316| v1316_10(void) = AliasedUse : ~m? -# 1316| v1316_11(void) = ExitFunction : +# 1364| Block 1 +# 1364| r1364_6(glval) = VariableAddress[#temp1364:12] : +# 1364| r1364_7(int) = Load[#temp1364:12] : &:r1364_6, ~m? +# 1364| mu1364_8(int) = Store[#return] : &:r1364_1, r1364_7 +# 1363| r1363_8(glval) = VariableAddress[#return] : +# 1363| v1363_9(void) = ReturnValue : &:r1363_8, ~m? +# 1363| v1363_10(void) = AliasedUse : ~m? +# 1363| v1363_11(void) = ExitFunction : -# 1317| Block 2 -# 1317| r1317_9(glval) = FunctionAddress[predicateB] : -# 1317| r1317_10(bool) = Call[predicateB] : func:r1317_9 -# 1317| mu1317_11(unknown) = ^CallSideEffect : ~m? -# 1317| v1317_12(void) = ConditionalBranch : r1317_10 +# 1364| Block 2 +# 1364| r1364_9(glval) = FunctionAddress[predicateB] : +# 1364| r1364_10(bool) = Call[predicateB] : func:r1364_9 +# 1364| mu1364_11(unknown) = ^CallSideEffect : ~m? +# 1364| v1364_12(void) = ConditionalBranch : r1364_10 #-----| False -> Block 4 #-----| True -> Block 3 -# 1317| Block 3 -# 1317| r1317_13(glval) = VariableAddress[x] : -# 1317| r1317_14(int) = Load[x] : &:r1317_13, ~m? -# 1317| r1317_15(glval) = VariableAddress[#temp1317:12] : -# 1317| mu1317_16(int) = Store[#temp1317:12] : &:r1317_15, r1317_14 +# 1364| Block 3 +# 1364| r1364_13(glval) = VariableAddress[x] : +# 1364| r1364_14(int) = Load[x] : &:r1364_13, ~m? +# 1364| r1364_15(glval) = VariableAddress[#temp1364:12] : +# 1364| mu1364_16(int) = Store[#temp1364:12] : &:r1364_15, r1364_14 #-----| Goto -> Block 1 -# 1317| Block 4 -# 1317| r1317_17(glval) = VariableAddress[y] : -# 1317| r1317_18(int) = Load[y] : &:r1317_17, ~m? -# 1317| r1317_19(glval) = VariableAddress[#temp1317:12] : -# 1317| mu1317_20(int) = Store[#temp1317:12] : &:r1317_19, r1317_18 +# 1364| Block 4 +# 1364| r1364_17(glval) = VariableAddress[y] : +# 1364| r1364_18(int) = Load[y] : &:r1364_17, ~m? +# 1364| r1364_19(glval) = VariableAddress[#temp1364:12] : +# 1364| mu1364_20(int) = Store[#temp1364:12] : &:r1364_19, r1364_18 #-----| Goto -> Block 1 -# 1322| void f(int*) -# 1322| Block 0 -# 1322| v1322_1(void) = EnterFunction : -# 1322| mu1322_2(unknown) = AliasedDefinition : -# 1322| mu1322_3(unknown) = InitializeNonLocal : -# 1322| r1322_4(glval) = VariableAddress[p] : -# 1322| mu1322_5(int *) = InitializeParameter[p] : &:r1322_4 -# 1322| r1322_6(int *) = Load[p] : &:r1322_4, ~m? -# 1322| mu1322_7(unknown) = InitializeIndirection[p] : &:r1322_6 -# 1324| r1324_1(glval) = FunctionAddress[operator new] : -# 1324| r1324_2(unsigned long) = Constant[4] : -# 1324| r1324_3(glval) = VariableAddress[p] : -# 1324| r1324_4(int *) = Load[p] : &:r1324_3, ~m? -# 1324| r1324_5(void *) = Convert : r1324_4 -# 1324| r1324_6(void *) = Call[operator new] : func:r1324_1, 0:r1324_2, 1:r1324_5 -# 1324| mu1324_7(unknown) = ^CallSideEffect : ~m? -# 1324| mu1324_8(unknown) = ^InitializeDynamicAllocation : &:r1324_6 -# 1324| r1324_9(int *) = Convert : r1324_6 -# 1325| v1325_1(void) = NoOp : -# 1322| v1322_8(void) = ReturnIndirection[p] : &:r1322_6, ~m? -# 1322| v1322_9(void) = ReturnVoid : -# 1322| v1322_10(void) = AliasedUse : ~m? -# 1322| v1322_11(void) = ExitFunction : +# 1369| void f(int*) +# 1369| Block 0 +# 1369| v1369_1(void) = EnterFunction : +# 1369| mu1369_2(unknown) = AliasedDefinition : +# 1369| mu1369_3(unknown) = InitializeNonLocal : +# 1369| r1369_4(glval) = VariableAddress[p] : +# 1369| mu1369_5(int *) = InitializeParameter[p] : &:r1369_4 +# 1369| r1369_6(int *) = Load[p] : &:r1369_4, ~m? +# 1369| mu1369_7(unknown) = InitializeIndirection[p] : &:r1369_6 +# 1371| r1371_1(glval) = FunctionAddress[operator new] : +# 1371| r1371_2(unsigned long) = Constant[4] : +# 1371| r1371_3(glval) = VariableAddress[p] : +# 1371| r1371_4(int *) = Load[p] : &:r1371_3, ~m? +# 1371| r1371_5(void *) = Convert : r1371_4 +# 1371| r1371_6(void *) = Call[operator new] : func:r1371_1, 0:r1371_2, 1:r1371_5 +# 1371| mu1371_7(unknown) = ^CallSideEffect : ~m? +# 1371| mu1371_8(unknown) = ^InitializeDynamicAllocation : &:r1371_6 +# 1371| r1371_9(int *) = Convert : r1371_6 +# 1372| v1372_1(void) = NoOp : +# 1369| v1369_8(void) = ReturnIndirection[p] : &:r1369_6, ~m? +# 1369| v1369_9(void) = ReturnVoid : +# 1369| v1369_10(void) = AliasedUse : ~m? +# 1369| v1369_11(void) = ExitFunction : -# 1328| Point defaultConstruct() -# 1328| Block 0 -# 1328| v1328_1(void) = EnterFunction : -# 1328| mu1328_2(unknown) = AliasedDefinition : -# 1328| mu1328_3(unknown) = InitializeNonLocal : -# 1329| r1329_1(glval) = VariableAddress[#return] : -# 1329| r1329_2(Point) = Constant[0] : -# 1329| mu1329_3(Point) = Store[#return] : &:r1329_1, r1329_2 -# 1328| r1328_4(glval) = VariableAddress[#return] : -# 1328| v1328_5(void) = ReturnValue : &:r1328_4, ~m? -# 1328| v1328_6(void) = AliasedUse : ~m? -# 1328| v1328_7(void) = ExitFunction : +# 1375| Point defaultConstruct() +# 1375| Block 0 +# 1375| v1375_1(void) = EnterFunction : +# 1375| mu1375_2(unknown) = AliasedDefinition : +# 1375| mu1375_3(unknown) = InitializeNonLocal : +# 1376| r1376_1(glval) = VariableAddress[#return] : +# 1376| r1376_2(Point) = Constant[0] : +# 1376| mu1376_3(Point) = Store[#return] : &:r1376_1, r1376_2 +# 1375| r1375_4(glval) = VariableAddress[#return] : +# 1375| v1375_5(void) = ReturnValue : &:r1375_4, ~m? +# 1375| v1375_6(void) = AliasedUse : ~m? +# 1375| v1375_7(void) = ExitFunction : -# 1328| String defaultConstruct() -# 1328| Block 0 -# 1328| v1328_1(void) = EnterFunction : -# 1328| mu1328_2(unknown) = AliasedDefinition : -# 1328| mu1328_3(unknown) = InitializeNonLocal : -# 1329| r1329_1(glval) = VariableAddress[#return] : -# 1329| mu1329_2(String) = Uninitialized[#return] : &:r1329_1 -# 1329| r1329_3(glval) = FunctionAddress[String] : -# 1329| v1329_4(void) = Call[String] : func:r1329_3, this:r1329_1 -# 1329| mu1329_5(unknown) = ^CallSideEffect : ~m? -# 1329| mu1329_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1329_1 -# 1328| r1328_4(glval) = VariableAddress[#return] : -# 1328| v1328_5(void) = ReturnValue : &:r1328_4, ~m? -# 1328| v1328_6(void) = AliasedUse : ~m? -# 1328| v1328_7(void) = ExitFunction : +# 1375| String defaultConstruct() +# 1375| Block 0 +# 1375| v1375_1(void) = EnterFunction : +# 1375| mu1375_2(unknown) = AliasedDefinition : +# 1375| mu1375_3(unknown) = InitializeNonLocal : +# 1376| r1376_1(glval) = VariableAddress[#return] : +# 1376| mu1376_2(String) = Uninitialized[#return] : &:r1376_1 +# 1376| r1376_3(glval) = FunctionAddress[String] : +# 1376| v1376_4(void) = Call[String] : func:r1376_3, this:r1376_1 +# 1376| mu1376_5(unknown) = ^CallSideEffect : ~m? +# 1376| mu1376_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1376_1 +# 1375| r1375_4(glval) = VariableAddress[#return] : +# 1375| v1375_5(void) = ReturnValue : &:r1375_4, ~m? +# 1375| v1375_6(void) = AliasedUse : ~m? +# 1375| v1375_7(void) = ExitFunction : -# 1328| copy_constructor defaultConstruct() -# 1328| Block 0 -# 1328| v1328_1(void) = EnterFunction : -# 1328| mu1328_2(unknown) = AliasedDefinition : -# 1328| mu1328_3(unknown) = InitializeNonLocal : -# 1329| r1329_1(glval) = VariableAddress[#return] : -# 1329| mu1329_2(copy_constructor) = Uninitialized[#return] : &:r1329_1 -# 1329| r1329_3(glval) = FunctionAddress[copy_constructor] : -# 1329| v1329_4(void) = Call[copy_constructor] : func:r1329_3, this:r1329_1 -# 1329| mu1329_5(unknown) = ^CallSideEffect : ~m? -# 1329| mu1329_6(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1329_1 -# 1328| r1328_4(glval) = VariableAddress[#return] : -# 1328| v1328_5(void) = ReturnValue : &:r1328_4, ~m? -# 1328| v1328_6(void) = AliasedUse : ~m? -# 1328| v1328_7(void) = ExitFunction : +# 1375| copy_constructor defaultConstruct() +# 1375| Block 0 +# 1375| v1375_1(void) = EnterFunction : +# 1375| mu1375_2(unknown) = AliasedDefinition : +# 1375| mu1375_3(unknown) = InitializeNonLocal : +# 1376| r1376_1(glval) = VariableAddress[#return] : +# 1376| mu1376_2(copy_constructor) = Uninitialized[#return] : &:r1376_1 +# 1376| r1376_3(glval) = FunctionAddress[copy_constructor] : +# 1376| v1376_4(void) = Call[copy_constructor] : func:r1376_3, this:r1376_1 +# 1376| mu1376_5(unknown) = ^CallSideEffect : ~m? +# 1376| mu1376_6(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1376_1 +# 1375| r1375_4(glval) = VariableAddress[#return] : +# 1375| v1375_5(void) = ReturnValue : &:r1375_4, ~m? +# 1375| v1375_6(void) = AliasedUse : ~m? +# 1375| v1375_7(void) = ExitFunction : -# 1328| destructor_only defaultConstruct() -# 1328| Block 0 -# 1328| v1328_1(void) = EnterFunction : -# 1328| mu1328_2(unknown) = AliasedDefinition : -# 1328| mu1328_3(unknown) = InitializeNonLocal : -# 1329| r1329_1(glval) = VariableAddress[#return] : -# 1329| r1329_2(destructor_only) = Constant[0] : -# 1329| mu1329_3(destructor_only) = Store[#return] : &:r1329_1, r1329_2 -# 1328| r1328_4(glval) = VariableAddress[#return] : -# 1328| v1328_5(void) = ReturnValue : &:r1328_4, ~m? -# 1328| v1328_6(void) = AliasedUse : ~m? -# 1328| v1328_7(void) = ExitFunction : +# 1375| destructor_only defaultConstruct() +# 1375| Block 0 +# 1375| v1375_1(void) = EnterFunction : +# 1375| mu1375_2(unknown) = AliasedDefinition : +# 1375| mu1375_3(unknown) = InitializeNonLocal : +# 1376| r1376_1(glval) = VariableAddress[#return] : +# 1376| r1376_2(destructor_only) = Constant[0] : +# 1376| mu1376_3(destructor_only) = Store[#return] : &:r1376_1, r1376_2 +# 1375| r1375_4(glval) = VariableAddress[#return] : +# 1375| v1375_5(void) = ReturnValue : &:r1375_4, ~m? +# 1375| v1375_6(void) = AliasedUse : ~m? +# 1375| v1375_7(void) = ExitFunction : -# 1367| void temporary_string() -# 1367| Block 0 -# 1367| v1367_1(void) = EnterFunction : -# 1367| mu1367_2(unknown) = AliasedDefinition : -# 1367| mu1367_3(unknown) = InitializeNonLocal : -# 1368| r1368_1(glval) = VariableAddress[s] : -# 1368| r1368_2(glval) = FunctionAddress[returnValue] : -# 1368| r1368_3(String) = Call[returnValue] : func:r1368_2 -# 1368| mu1368_4(unknown) = ^CallSideEffect : ~m? -# 1368| mu1368_5(String) = Store[s] : &:r1368_1, r1368_3 -# 1369| r1369_1(glval) = VariableAddress[rs] : -# 1369| r1369_2(glval) = VariableAddress[#temp1369:24] : -# 1369| r1369_3(glval) = FunctionAddress[returnValue] : -# 1369| r1369_4(String) = Call[returnValue] : func:r1369_3 -# 1369| mu1369_5(unknown) = ^CallSideEffect : ~m? -# 1369| mu1369_6(String) = Store[#temp1369:24] : &:r1369_2, r1369_4 -# 1369| r1369_7(glval) = Convert : r1369_2 -# 1369| r1369_8(String &) = CopyValue : r1369_7 -# 1369| mu1369_9(String &) = Store[rs] : &:r1369_1, r1369_8 -# 1371| r1371_1(glval) = FunctionAddress[acceptRef] : -# 1371| r1371_2(glval) = VariableAddress[s] : -# 1371| r1371_3(glval) = Convert : r1371_2 -# 1371| r1371_4(String &) = CopyValue : r1371_3 -# 1371| v1371_5(void) = Call[acceptRef] : func:r1371_1, 0:r1371_4 -# 1371| mu1371_6(unknown) = ^CallSideEffect : ~m? -# 1371| v1371_7(void) = ^BufferReadSideEffect[0] : &:r1371_4, ~m? -# 1372| r1372_1(glval) = FunctionAddress[acceptRef] : -# 1372| r1372_2(glval) = VariableAddress[#temp1372:23] : -# 1372| mu1372_3(String) = Uninitialized[#temp1372:23] : &:r1372_2 -# 1372| r1372_4(glval) = FunctionAddress[String] : -# 1372| r1372_5(glval) = StringConstant["foo"] : -# 1372| r1372_6(char *) = Convert : r1372_5 -# 1372| v1372_7(void) = Call[String] : func:r1372_4, this:r1372_2, 0:r1372_6 -# 1372| mu1372_8(unknown) = ^CallSideEffect : ~m? -# 1372| v1372_9(void) = ^BufferReadSideEffect[0] : &:r1372_6, ~m? -# 1372| mu1372_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1372_2 -# 1372| r1372_11(String &) = CopyValue : r1372_2 -# 1372| v1372_12(void) = Call[acceptRef] : func:r1372_1, 0:r1372_11 -# 1372| mu1372_13(unknown) = ^CallSideEffect : ~m? -# 1372| v1372_14(void) = ^BufferReadSideEffect[0] : &:r1372_11, ~m? -# 1373| r1373_1(glval) = FunctionAddress[acceptValue] : -# 1373| r1373_2(glval) = VariableAddress[#temp1373:17] : -# 1373| mu1373_3(String) = Uninitialized[#temp1373:17] : &:r1373_2 -# 1373| r1373_4(glval) = FunctionAddress[String] : -# 1373| r1373_5(glval) = VariableAddress[s] : -# 1373| r1373_6(glval) = Convert : r1373_5 -# 1373| r1373_7(String &) = CopyValue : r1373_6 -# 1373| v1373_8(void) = Call[String] : func:r1373_4, this:r1373_2, 0:r1373_7 -# 1373| mu1373_9(unknown) = ^CallSideEffect : ~m? -# 1373| v1373_10(void) = ^BufferReadSideEffect[0] : &:r1373_7, ~m? -# 1373| mu1373_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1373_2 -# 1373| r1373_12(String) = Load[#temp1373:17] : &:r1373_2, ~m? -# 1373| v1373_13(void) = Call[acceptValue] : func:r1373_1, 0:r1373_12 -# 1373| mu1373_14(unknown) = ^CallSideEffect : ~m? -# 1374| r1374_1(glval) = FunctionAddress[acceptValue] : -# 1374| r1374_2(glval) = VariableAddress[#temp1374:25] : -# 1374| mu1374_3(String) = Uninitialized[#temp1374:25] : &:r1374_2 -# 1374| r1374_4(glval) = FunctionAddress[String] : -# 1374| r1374_5(glval) = StringConstant["foo"] : -# 1374| r1374_6(char *) = Convert : r1374_5 -# 1374| v1374_7(void) = Call[String] : func:r1374_4, this:r1374_2, 0:r1374_6 -# 1374| mu1374_8(unknown) = ^CallSideEffect : ~m? -# 1374| v1374_9(void) = ^BufferReadSideEffect[0] : &:r1374_6, ~m? -# 1374| mu1374_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1374_2 -# 1374| r1374_11(String) = Load[#temp1374:25] : &:r1374_2, ~m? -# 1374| v1374_12(void) = Call[acceptValue] : func:r1374_1, 0:r1374_11 -# 1374| mu1374_13(unknown) = ^CallSideEffect : ~m? -# 1375| r1375_1(glval) = VariableAddress[#temp1375:5] : -# 1375| mu1375_2(String) = Uninitialized[#temp1375:5] : &:r1375_1 -# 1375| r1375_3(glval) = FunctionAddress[String] : -# 1375| v1375_4(void) = Call[String] : func:r1375_3, this:r1375_1 -# 1375| mu1375_5(unknown) = ^CallSideEffect : ~m? -# 1375| mu1375_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1375_1 -# 1375| r1375_7(glval) = Convert : r1375_1 -# 1375| r1375_8(glval) = FunctionAddress[c_str] : -# 1375| r1375_9(char *) = Call[c_str] : func:r1375_8, this:r1375_7 -# 1375| mu1375_10(unknown) = ^CallSideEffect : ~m? -# 1375| v1375_11(void) = ^IndirectReadSideEffect[-1] : &:r1375_7, ~m? -# 1376| r1376_1(glval) = VariableAddress[#temp1376:5] : -# 1376| r1376_2(glval) = FunctionAddress[returnValue] : -# 1376| r1376_3(String) = Call[returnValue] : func:r1376_2 -# 1376| mu1376_4(unknown) = ^CallSideEffect : ~m? -# 1376| mu1376_5(String) = Store[#temp1376:5] : &:r1376_1, r1376_3 -# 1376| r1376_6(glval) = Convert : r1376_1 -# 1376| r1376_7(glval) = FunctionAddress[c_str] : -# 1376| r1376_8(char *) = Call[c_str] : func:r1376_7, this:r1376_6 -# 1376| mu1376_9(unknown) = ^CallSideEffect : ~m? -# 1376| v1376_10(void) = ^IndirectReadSideEffect[-1] : &:r1376_6, ~m? -# 1378| r1378_1(glval) = VariableAddress[#temp1378:5] : -# 1378| r1378_2(glval) = FunctionAddress[defaultConstruct] : -# 1378| r1378_3(String) = Call[defaultConstruct] : func:r1378_2 -# 1378| mu1378_4(unknown) = ^CallSideEffect : ~m? -# 1378| mu1378_5(String) = Store[#temp1378:5] : &:r1378_1, r1378_3 -# 1379| v1379_1(void) = NoOp : -# 1379| r1379_2(glval) = VariableAddress[s] : -# 1379| r1379_3(glval) = FunctionAddress[~String] : -# 1379| v1379_4(void) = Call[~String] : func:r1379_3, this:r1379_2 -# 1379| mu1379_5(unknown) = ^CallSideEffect : ~m? -# 1379| v1379_6(void) = ^IndirectReadSideEffect[-1] : &:r1379_2, ~m? -# 1379| mu1379_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1379_2 -# 1367| v1367_4(void) = ReturnVoid : -# 1367| v1367_5(void) = AliasedUse : ~m? -# 1367| v1367_6(void) = ExitFunction : +# 1414| void temporary_string() +# 1414| Block 0 +# 1414| v1414_1(void) = EnterFunction : +# 1414| mu1414_2(unknown) = AliasedDefinition : +# 1414| mu1414_3(unknown) = InitializeNonLocal : +# 1415| r1415_1(glval) = VariableAddress[s] : +# 1415| r1415_2(glval) = FunctionAddress[returnValue] : +# 1415| r1415_3(String) = Call[returnValue] : func:r1415_2 +# 1415| mu1415_4(unknown) = ^CallSideEffect : ~m? +# 1415| mu1415_5(String) = Store[s] : &:r1415_1, r1415_3 +# 1416| r1416_1(glval) = VariableAddress[rs] : +# 1416| r1416_2(glval) = VariableAddress[#temp1416:24] : +# 1416| r1416_3(glval) = FunctionAddress[returnValue] : +# 1416| r1416_4(String) = Call[returnValue] : func:r1416_3 +# 1416| mu1416_5(unknown) = ^CallSideEffect : ~m? +# 1416| mu1416_6(String) = Store[#temp1416:24] : &:r1416_2, r1416_4 +# 1416| r1416_7(glval) = Convert : r1416_2 +# 1416| r1416_8(String &) = CopyValue : r1416_7 +# 1416| mu1416_9(String &) = Store[rs] : &:r1416_1, r1416_8 +# 1418| r1418_1(glval) = FunctionAddress[acceptRef] : +# 1418| r1418_2(glval) = VariableAddress[s] : +# 1418| r1418_3(glval) = Convert : r1418_2 +# 1418| r1418_4(String &) = CopyValue : r1418_3 +# 1418| v1418_5(void) = Call[acceptRef] : func:r1418_1, 0:r1418_4 +# 1418| mu1418_6(unknown) = ^CallSideEffect : ~m? +# 1418| v1418_7(void) = ^BufferReadSideEffect[0] : &:r1418_4, ~m? +# 1419| r1419_1(glval) = FunctionAddress[acceptRef] : +# 1419| r1419_2(glval) = VariableAddress[#temp1419:23] : +# 1419| mu1419_3(String) = Uninitialized[#temp1419:23] : &:r1419_2 +# 1419| r1419_4(glval) = FunctionAddress[String] : +# 1419| r1419_5(glval) = StringConstant["foo"] : +# 1419| r1419_6(char *) = Convert : r1419_5 +# 1419| v1419_7(void) = Call[String] : func:r1419_4, this:r1419_2, 0:r1419_6 +# 1419| mu1419_8(unknown) = ^CallSideEffect : ~m? +# 1419| v1419_9(void) = ^BufferReadSideEffect[0] : &:r1419_6, ~m? +# 1419| mu1419_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1419_2 +# 1419| r1419_11(String &) = CopyValue : r1419_2 +# 1419| v1419_12(void) = Call[acceptRef] : func:r1419_1, 0:r1419_11 +# 1419| mu1419_13(unknown) = ^CallSideEffect : ~m? +# 1419| v1419_14(void) = ^BufferReadSideEffect[0] : &:r1419_11, ~m? +# 1420| r1420_1(glval) = FunctionAddress[acceptValue] : +# 1420| r1420_2(glval) = VariableAddress[#temp1420:17] : +# 1420| mu1420_3(String) = Uninitialized[#temp1420:17] : &:r1420_2 +# 1420| r1420_4(glval) = FunctionAddress[String] : +# 1420| r1420_5(glval) = VariableAddress[s] : +# 1420| r1420_6(glval) = Convert : r1420_5 +# 1420| r1420_7(String &) = CopyValue : r1420_6 +# 1420| v1420_8(void) = Call[String] : func:r1420_4, this:r1420_2, 0:r1420_7 +# 1420| mu1420_9(unknown) = ^CallSideEffect : ~m? +# 1420| v1420_10(void) = ^BufferReadSideEffect[0] : &:r1420_7, ~m? +# 1420| mu1420_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1420_2 +# 1420| r1420_12(String) = Load[#temp1420:17] : &:r1420_2, ~m? +# 1420| v1420_13(void) = Call[acceptValue] : func:r1420_1, 0:r1420_12 +# 1420| mu1420_14(unknown) = ^CallSideEffect : ~m? +# 1421| r1421_1(glval) = FunctionAddress[acceptValue] : +# 1421| r1421_2(glval) = VariableAddress[#temp1421:25] : +# 1421| mu1421_3(String) = Uninitialized[#temp1421:25] : &:r1421_2 +# 1421| r1421_4(glval) = FunctionAddress[String] : +# 1421| r1421_5(glval) = StringConstant["foo"] : +# 1421| r1421_6(char *) = Convert : r1421_5 +# 1421| v1421_7(void) = Call[String] : func:r1421_4, this:r1421_2, 0:r1421_6 +# 1421| mu1421_8(unknown) = ^CallSideEffect : ~m? +# 1421| v1421_9(void) = ^BufferReadSideEffect[0] : &:r1421_6, ~m? +# 1421| mu1421_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1421_2 +# 1421| r1421_11(String) = Load[#temp1421:25] : &:r1421_2, ~m? +# 1421| v1421_12(void) = Call[acceptValue] : func:r1421_1, 0:r1421_11 +# 1421| mu1421_13(unknown) = ^CallSideEffect : ~m? +# 1422| r1422_1(glval) = VariableAddress[#temp1422:5] : +# 1422| mu1422_2(String) = Uninitialized[#temp1422:5] : &:r1422_1 +# 1422| r1422_3(glval) = FunctionAddress[String] : +# 1422| v1422_4(void) = Call[String] : func:r1422_3, this:r1422_1 +# 1422| mu1422_5(unknown) = ^CallSideEffect : ~m? +# 1422| mu1422_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1422_1 +# 1422| r1422_7(glval) = Convert : r1422_1 +# 1422| r1422_8(glval) = FunctionAddress[c_str] : +# 1422| r1422_9(char *) = Call[c_str] : func:r1422_8, this:r1422_7 +# 1422| mu1422_10(unknown) = ^CallSideEffect : ~m? +# 1422| v1422_11(void) = ^IndirectReadSideEffect[-1] : &:r1422_7, ~m? +# 1423| r1423_1(glval) = VariableAddress[#temp1423:5] : +# 1423| r1423_2(glval) = FunctionAddress[returnValue] : +# 1423| r1423_3(String) = Call[returnValue] : func:r1423_2 +# 1423| mu1423_4(unknown) = ^CallSideEffect : ~m? +# 1423| mu1423_5(String) = Store[#temp1423:5] : &:r1423_1, r1423_3 +# 1423| r1423_6(glval) = Convert : r1423_1 +# 1423| r1423_7(glval) = FunctionAddress[c_str] : +# 1423| r1423_8(char *) = Call[c_str] : func:r1423_7, this:r1423_6 +# 1423| mu1423_9(unknown) = ^CallSideEffect : ~m? +# 1423| v1423_10(void) = ^IndirectReadSideEffect[-1] : &:r1423_6, ~m? +# 1425| r1425_1(glval) = VariableAddress[#temp1425:5] : +# 1425| r1425_2(glval) = FunctionAddress[defaultConstruct] : +# 1425| r1425_3(String) = Call[defaultConstruct] : func:r1425_2 +# 1425| mu1425_4(unknown) = ^CallSideEffect : ~m? +# 1425| mu1425_5(String) = Store[#temp1425:5] : &:r1425_1, r1425_3 +# 1426| v1426_1(void) = NoOp : +# 1426| r1426_2(glval) = VariableAddress[s] : +# 1426| r1426_3(glval) = FunctionAddress[~String] : +# 1426| v1426_4(void) = Call[~String] : func:r1426_3, this:r1426_2 +# 1426| mu1426_5(unknown) = ^CallSideEffect : ~m? +# 1426| v1426_6(void) = ^IndirectReadSideEffect[-1] : &:r1426_2, ~m? +# 1426| mu1426_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1426_2 +# 1414| v1414_4(void) = ReturnVoid : +# 1414| v1414_5(void) = AliasedUse : ~m? +# 1414| v1414_6(void) = ExitFunction : -# 1381| void temporary_destructor_only() -# 1381| Block 0 -# 1381| v1381_1(void) = EnterFunction : -# 1381| mu1381_2(unknown) = AliasedDefinition : -# 1381| mu1381_3(unknown) = InitializeNonLocal : -# 1382| r1382_1(glval) = VariableAddress[d] : -# 1382| r1382_2(glval) = FunctionAddress[returnValue] : -# 1382| r1382_3(destructor_only) = Call[returnValue] : func:r1382_2 -# 1382| mu1382_4(unknown) = ^CallSideEffect : ~m? -# 1382| mu1382_5(destructor_only) = Store[d] : &:r1382_1, r1382_3 -# 1383| r1383_1(glval) = VariableAddress[rd] : -# 1383| r1383_2(glval) = VariableAddress[#temp1383:33] : -# 1383| r1383_3(glval) = FunctionAddress[returnValue] : -# 1383| r1383_4(destructor_only) = Call[returnValue] : func:r1383_3 -# 1383| mu1383_5(unknown) = ^CallSideEffect : ~m? -# 1383| mu1383_6(destructor_only) = Store[#temp1383:33] : &:r1383_2, r1383_4 -# 1383| r1383_7(glval) = Convert : r1383_2 -# 1383| r1383_8(destructor_only &) = CopyValue : r1383_7 -# 1383| mu1383_9(destructor_only &) = Store[rd] : &:r1383_1, r1383_8 -# 1384| r1384_1(glval) = VariableAddress[d2] : -# 1384| mu1384_2(destructor_only) = Uninitialized[d2] : &:r1384_1 -# 1385| r1385_1(glval) = FunctionAddress[acceptRef] : -# 1385| r1385_2(glval) = VariableAddress[d] : -# 1385| r1385_3(glval) = Convert : r1385_2 -# 1385| r1385_4(destructor_only &) = CopyValue : r1385_3 -# 1385| v1385_5(void) = Call[acceptRef] : func:r1385_1, 0:r1385_4 -# 1385| mu1385_6(unknown) = ^CallSideEffect : ~m? -# 1385| v1385_7(void) = ^BufferReadSideEffect[0] : &:r1385_4, ~m? -# 1386| r1386_1(glval) = FunctionAddress[acceptValue] : -# 1386| r1386_2(glval) = VariableAddress[#temp1386:17] : -# 1386| r1386_3(glval) = VariableAddress[d] : -# 1386| r1386_4(destructor_only) = Load[d] : &:r1386_3, ~m? -# 1386| mu1386_5(destructor_only) = Store[#temp1386:17] : &:r1386_2, r1386_4 -# 1386| r1386_6(destructor_only) = Load[#temp1386:17] : &:r1386_2, ~m? -# 1386| v1386_7(void) = Call[acceptValue] : func:r1386_1, 0:r1386_6 -# 1386| mu1386_8(unknown) = ^CallSideEffect : ~m? -# 1387| r1387_1(glval) = VariableAddress[#temp1387:5] : -# 1387| r1387_2(destructor_only) = Constant[0] : -# 1387| mu1387_3(destructor_only) = Store[#temp1387:5] : &:r1387_1, r1387_2 -# 1387| r1387_4(glval) = FunctionAddress[method] : -# 1387| v1387_5(void) = Call[method] : func:r1387_4, this:r1387_1 -# 1387| mu1387_6(unknown) = ^CallSideEffect : ~m? -# 1387| v1387_7(void) = ^IndirectReadSideEffect[-1] : &:r1387_1, ~m? -# 1387| mu1387_8(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1387_1 -# 1388| r1388_1(glval) = VariableAddress[#temp1388:5] : -# 1388| r1388_2(glval) = FunctionAddress[returnValue] : -# 1388| r1388_3(destructor_only) = Call[returnValue] : func:r1388_2 -# 1388| mu1388_4(unknown) = ^CallSideEffect : ~m? -# 1388| mu1388_5(destructor_only) = Store[#temp1388:5] : &:r1388_1, r1388_3 -# 1388| r1388_6(glval) = FunctionAddress[method] : -# 1388| v1388_7(void) = Call[method] : func:r1388_6, this:r1388_1 -# 1388| mu1388_8(unknown) = ^CallSideEffect : ~m? -# 1388| v1388_9(void) = ^IndirectReadSideEffect[-1] : &:r1388_1, ~m? -# 1388| mu1388_10(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1388_1 -# 1390| r1390_1(glval) = VariableAddress[#temp1390:5] : -# 1390| r1390_2(glval) = FunctionAddress[defaultConstruct] : -# 1390| r1390_3(destructor_only) = Call[defaultConstruct] : func:r1390_2 -# 1390| mu1390_4(unknown) = ^CallSideEffect : ~m? -# 1390| mu1390_5(destructor_only) = Store[#temp1390:5] : &:r1390_1, r1390_3 -# 1391| v1391_1(void) = NoOp : -# 1391| r1391_2(glval) = VariableAddress[d2] : -# 1391| r1391_3(glval) = FunctionAddress[~destructor_only] : -# 1391| v1391_4(void) = Call[~destructor_only] : func:r1391_3, this:r1391_2 -# 1391| mu1391_5(unknown) = ^CallSideEffect : ~m? -# 1391| v1391_6(void) = ^IndirectReadSideEffect[-1] : &:r1391_2, ~m? -# 1391| mu1391_7(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1391_2 -# 1391| r1391_8(glval) = VariableAddress[d] : -# 1391| r1391_9(glval) = FunctionAddress[~destructor_only] : -# 1391| v1391_10(void) = Call[~destructor_only] : func:r1391_9, this:r1391_8 -# 1391| mu1391_11(unknown) = ^CallSideEffect : ~m? -# 1391| v1391_12(void) = ^IndirectReadSideEffect[-1] : &:r1391_8, ~m? -# 1391| mu1391_13(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1391_8 -# 1381| v1381_4(void) = ReturnVoid : -# 1381| v1381_5(void) = AliasedUse : ~m? -# 1381| v1381_6(void) = ExitFunction : +# 1428| void temporary_destructor_only() +# 1428| Block 0 +# 1428| v1428_1(void) = EnterFunction : +# 1428| mu1428_2(unknown) = AliasedDefinition : +# 1428| mu1428_3(unknown) = InitializeNonLocal : +# 1429| r1429_1(glval) = VariableAddress[d] : +# 1429| r1429_2(glval) = FunctionAddress[returnValue] : +# 1429| r1429_3(destructor_only) = Call[returnValue] : func:r1429_2 +# 1429| mu1429_4(unknown) = ^CallSideEffect : ~m? +# 1429| mu1429_5(destructor_only) = Store[d] : &:r1429_1, r1429_3 +# 1430| r1430_1(glval) = VariableAddress[rd] : +# 1430| r1430_2(glval) = VariableAddress[#temp1430:33] : +# 1430| r1430_3(glval) = FunctionAddress[returnValue] : +# 1430| r1430_4(destructor_only) = Call[returnValue] : func:r1430_3 +# 1430| mu1430_5(unknown) = ^CallSideEffect : ~m? +# 1430| mu1430_6(destructor_only) = Store[#temp1430:33] : &:r1430_2, r1430_4 +# 1430| r1430_7(glval) = Convert : r1430_2 +# 1430| r1430_8(destructor_only &) = CopyValue : r1430_7 +# 1430| mu1430_9(destructor_only &) = Store[rd] : &:r1430_1, r1430_8 +# 1431| r1431_1(glval) = VariableAddress[d2] : +# 1431| mu1431_2(destructor_only) = Uninitialized[d2] : &:r1431_1 +# 1432| r1432_1(glval) = FunctionAddress[acceptRef] : +# 1432| r1432_2(glval) = VariableAddress[d] : +# 1432| r1432_3(glval) = Convert : r1432_2 +# 1432| r1432_4(destructor_only &) = CopyValue : r1432_3 +# 1432| v1432_5(void) = Call[acceptRef] : func:r1432_1, 0:r1432_4 +# 1432| mu1432_6(unknown) = ^CallSideEffect : ~m? +# 1432| v1432_7(void) = ^BufferReadSideEffect[0] : &:r1432_4, ~m? +# 1433| r1433_1(glval) = FunctionAddress[acceptValue] : +# 1433| r1433_2(glval) = VariableAddress[#temp1433:17] : +# 1433| r1433_3(glval) = VariableAddress[d] : +# 1433| r1433_4(destructor_only) = Load[d] : &:r1433_3, ~m? +# 1433| mu1433_5(destructor_only) = Store[#temp1433:17] : &:r1433_2, r1433_4 +# 1433| r1433_6(destructor_only) = Load[#temp1433:17] : &:r1433_2, ~m? +# 1433| v1433_7(void) = Call[acceptValue] : func:r1433_1, 0:r1433_6 +# 1433| mu1433_8(unknown) = ^CallSideEffect : ~m? +# 1434| r1434_1(glval) = VariableAddress[#temp1434:5] : +# 1434| r1434_2(destructor_only) = Constant[0] : +# 1434| mu1434_3(destructor_only) = Store[#temp1434:5] : &:r1434_1, r1434_2 +# 1434| r1434_4(glval) = FunctionAddress[method] : +# 1434| v1434_5(void) = Call[method] : func:r1434_4, this:r1434_1 +# 1434| mu1434_6(unknown) = ^CallSideEffect : ~m? +# 1434| v1434_7(void) = ^IndirectReadSideEffect[-1] : &:r1434_1, ~m? +# 1434| mu1434_8(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1434_1 +# 1435| r1435_1(glval) = VariableAddress[#temp1435:5] : +# 1435| r1435_2(glval) = FunctionAddress[returnValue] : +# 1435| r1435_3(destructor_only) = Call[returnValue] : func:r1435_2 +# 1435| mu1435_4(unknown) = ^CallSideEffect : ~m? +# 1435| mu1435_5(destructor_only) = Store[#temp1435:5] : &:r1435_1, r1435_3 +# 1435| r1435_6(glval) = FunctionAddress[method] : +# 1435| v1435_7(void) = Call[method] : func:r1435_6, this:r1435_1 +# 1435| mu1435_8(unknown) = ^CallSideEffect : ~m? +# 1435| v1435_9(void) = ^IndirectReadSideEffect[-1] : &:r1435_1, ~m? +# 1435| mu1435_10(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1435_1 +# 1437| r1437_1(glval) = VariableAddress[#temp1437:5] : +# 1437| r1437_2(glval) = FunctionAddress[defaultConstruct] : +# 1437| r1437_3(destructor_only) = Call[defaultConstruct] : func:r1437_2 +# 1437| mu1437_4(unknown) = ^CallSideEffect : ~m? +# 1437| mu1437_5(destructor_only) = Store[#temp1437:5] : &:r1437_1, r1437_3 +# 1438| v1438_1(void) = NoOp : +# 1438| r1438_2(glval) = VariableAddress[d2] : +# 1438| r1438_3(glval) = FunctionAddress[~destructor_only] : +# 1438| v1438_4(void) = Call[~destructor_only] : func:r1438_3, this:r1438_2 +# 1438| mu1438_5(unknown) = ^CallSideEffect : ~m? +# 1438| v1438_6(void) = ^IndirectReadSideEffect[-1] : &:r1438_2, ~m? +# 1438| mu1438_7(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1438_2 +# 1438| r1438_8(glval) = VariableAddress[d] : +# 1438| r1438_9(glval) = FunctionAddress[~destructor_only] : +# 1438| v1438_10(void) = Call[~destructor_only] : func:r1438_9, this:r1438_8 +# 1438| mu1438_11(unknown) = ^CallSideEffect : ~m? +# 1438| v1438_12(void) = ^IndirectReadSideEffect[-1] : &:r1438_8, ~m? +# 1438| mu1438_13(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1438_8 +# 1428| v1428_4(void) = ReturnVoid : +# 1428| v1428_5(void) = AliasedUse : ~m? +# 1428| v1428_6(void) = ExitFunction : -# 1393| void temporary_copy_constructor() -# 1393| Block 0 -# 1393| v1393_1(void) = EnterFunction : -# 1393| mu1393_2(unknown) = AliasedDefinition : -# 1393| mu1393_3(unknown) = InitializeNonLocal : -# 1394| r1394_1(glval) = VariableAddress[d] : -# 1394| r1394_2(glval) = FunctionAddress[returnValue] : -# 1394| r1394_3(copy_constructor) = Call[returnValue] : func:r1394_2 -# 1394| mu1394_4(unknown) = ^CallSideEffect : ~m? -# 1394| mu1394_5(copy_constructor) = Store[d] : &:r1394_1, r1394_3 -# 1395| r1395_1(glval) = VariableAddress[rd] : -# 1395| r1395_2(glval) = VariableAddress[#temp1395:34] : -# 1395| r1395_3(glval) = FunctionAddress[returnValue] : -# 1395| r1395_4(copy_constructor) = Call[returnValue] : func:r1395_3 -# 1395| mu1395_5(unknown) = ^CallSideEffect : ~m? -# 1395| mu1395_6(copy_constructor) = Store[#temp1395:34] : &:r1395_2, r1395_4 -# 1395| r1395_7(glval) = Convert : r1395_2 -# 1395| r1395_8(copy_constructor &) = CopyValue : r1395_7 -# 1395| mu1395_9(copy_constructor &) = Store[rd] : &:r1395_1, r1395_8 -# 1396| r1396_1(glval) = VariableAddress[d2] : -# 1396| mu1396_2(copy_constructor) = Uninitialized[d2] : &:r1396_1 -# 1396| r1396_3(glval) = FunctionAddress[copy_constructor] : -# 1396| v1396_4(void) = Call[copy_constructor] : func:r1396_3, this:r1396_1 -# 1396| mu1396_5(unknown) = ^CallSideEffect : ~m? -# 1396| mu1396_6(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1396_1 -# 1397| r1397_1(glval) = FunctionAddress[acceptRef] : -# 1397| r1397_2(glval) = VariableAddress[d] : -# 1397| r1397_3(glval) = Convert : r1397_2 -# 1397| r1397_4(copy_constructor &) = CopyValue : r1397_3 -# 1397| v1397_5(void) = Call[acceptRef] : func:r1397_1, 0:r1397_4 -# 1397| mu1397_6(unknown) = ^CallSideEffect : ~m? -# 1397| v1397_7(void) = ^BufferReadSideEffect[0] : &:r1397_4, ~m? -# 1398| r1398_1(glval) = FunctionAddress[acceptValue] : -# 1398| r1398_2(glval) = VariableAddress[#temp1398:17] : -# 1398| mu1398_3(copy_constructor) = Uninitialized[#temp1398:17] : &:r1398_2 -# 1398| r1398_4(glval) = FunctionAddress[copy_constructor] : -# 1398| r1398_5(glval) = VariableAddress[d] : -# 1398| r1398_6(glval) = Convert : r1398_5 -# 1398| r1398_7(copy_constructor &) = CopyValue : r1398_6 -# 1398| v1398_8(void) = Call[copy_constructor] : func:r1398_4, this:r1398_2, 0:r1398_7 -# 1398| mu1398_9(unknown) = ^CallSideEffect : ~m? -# 1398| v1398_10(void) = ^BufferReadSideEffect[0] : &:r1398_7, ~m? -# 1398| mu1398_11(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1398_2 -# 1398| r1398_12(copy_constructor) = Load[#temp1398:17] : &:r1398_2, ~m? -# 1398| v1398_13(void) = Call[acceptValue] : func:r1398_1, 0:r1398_12 -# 1398| mu1398_14(unknown) = ^CallSideEffect : ~m? -# 1399| r1399_1(glval) = VariableAddress[#temp1399:5] : -# 1399| mu1399_2(copy_constructor) = Uninitialized[#temp1399:5] : &:r1399_1 -# 1399| r1399_3(glval) = FunctionAddress[copy_constructor] : -# 1399| v1399_4(void) = Call[copy_constructor] : func:r1399_3, this:r1399_1 -# 1399| mu1399_5(unknown) = ^CallSideEffect : ~m? -# 1399| mu1399_6(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1399_1 -# 1399| r1399_7(glval) = FunctionAddress[method] : -# 1399| v1399_8(void) = Call[method] : func:r1399_7, this:r1399_1 -# 1399| mu1399_9(unknown) = ^CallSideEffect : ~m? -# 1399| v1399_10(void) = ^IndirectReadSideEffect[-1] : &:r1399_1, ~m? -# 1399| mu1399_11(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1399_1 -# 1400| r1400_1(glval) = VariableAddress[#temp1400:5] : -# 1400| r1400_2(glval) = FunctionAddress[returnValue] : -# 1400| r1400_3(copy_constructor) = Call[returnValue] : func:r1400_2 -# 1400| mu1400_4(unknown) = ^CallSideEffect : ~m? -# 1400| mu1400_5(copy_constructor) = Store[#temp1400:5] : &:r1400_1, r1400_3 -# 1400| r1400_6(glval) = FunctionAddress[method] : -# 1400| v1400_7(void) = Call[method] : func:r1400_6, this:r1400_1 -# 1400| mu1400_8(unknown) = ^CallSideEffect : ~m? -# 1400| v1400_9(void) = ^IndirectReadSideEffect[-1] : &:r1400_1, ~m? -# 1400| mu1400_10(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1400_1 -# 1401| r1401_1(glval) = VariableAddress[#temp1401:5] : -# 1401| r1401_2(glval) = FunctionAddress[defaultConstruct] : -# 1401| r1401_3(copy_constructor) = Call[defaultConstruct] : func:r1401_2 -# 1401| mu1401_4(unknown) = ^CallSideEffect : ~m? -# 1401| mu1401_5(copy_constructor) = Store[#temp1401:5] : &:r1401_1, r1401_3 -# 1403| r1403_1(glval) = VariableAddress[y] : -# 1403| r1403_2(glval) = VariableAddress[#temp1403:13] : -# 1403| r1403_3(glval) = FunctionAddress[returnValue] : -# 1403| r1403_4(copy_constructor) = Call[returnValue] : func:r1403_3 -# 1403| mu1403_5(unknown) = ^CallSideEffect : ~m? -# 1403| mu1403_6(copy_constructor) = Store[#temp1403:13] : &:r1403_2, r1403_4 -# 1403| r1403_7(glval) = FieldAddress[y] : r1403_2 -# 1403| r1403_8(int) = Load[?] : &:r1403_7, ~m? -# 1403| mu1403_9(int) = Store[y] : &:r1403_1, r1403_8 -# 1404| v1404_1(void) = NoOp : -# 1393| v1393_4(void) = ReturnVoid : -# 1393| v1393_5(void) = AliasedUse : ~m? -# 1393| v1393_6(void) = ExitFunction : +# 1440| void temporary_copy_constructor() +# 1440| Block 0 +# 1440| v1440_1(void) = EnterFunction : +# 1440| mu1440_2(unknown) = AliasedDefinition : +# 1440| mu1440_3(unknown) = InitializeNonLocal : +# 1441| r1441_1(glval) = VariableAddress[d] : +# 1441| r1441_2(glval) = FunctionAddress[returnValue] : +# 1441| r1441_3(copy_constructor) = Call[returnValue] : func:r1441_2 +# 1441| mu1441_4(unknown) = ^CallSideEffect : ~m? +# 1441| mu1441_5(copy_constructor) = Store[d] : &:r1441_1, r1441_3 +# 1442| r1442_1(glval) = VariableAddress[rd] : +# 1442| r1442_2(glval) = VariableAddress[#temp1442:34] : +# 1442| r1442_3(glval) = FunctionAddress[returnValue] : +# 1442| r1442_4(copy_constructor) = Call[returnValue] : func:r1442_3 +# 1442| mu1442_5(unknown) = ^CallSideEffect : ~m? +# 1442| mu1442_6(copy_constructor) = Store[#temp1442:34] : &:r1442_2, r1442_4 +# 1442| r1442_7(glval) = Convert : r1442_2 +# 1442| r1442_8(copy_constructor &) = CopyValue : r1442_7 +# 1442| mu1442_9(copy_constructor &) = Store[rd] : &:r1442_1, r1442_8 +# 1443| r1443_1(glval) = VariableAddress[d2] : +# 1443| mu1443_2(copy_constructor) = Uninitialized[d2] : &:r1443_1 +# 1443| r1443_3(glval) = FunctionAddress[copy_constructor] : +# 1443| v1443_4(void) = Call[copy_constructor] : func:r1443_3, this:r1443_1 +# 1443| mu1443_5(unknown) = ^CallSideEffect : ~m? +# 1443| mu1443_6(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1443_1 +# 1444| r1444_1(glval) = FunctionAddress[acceptRef] : +# 1444| r1444_2(glval) = VariableAddress[d] : +# 1444| r1444_3(glval) = Convert : r1444_2 +# 1444| r1444_4(copy_constructor &) = CopyValue : r1444_3 +# 1444| v1444_5(void) = Call[acceptRef] : func:r1444_1, 0:r1444_4 +# 1444| mu1444_6(unknown) = ^CallSideEffect : ~m? +# 1444| v1444_7(void) = ^BufferReadSideEffect[0] : &:r1444_4, ~m? +# 1445| r1445_1(glval) = FunctionAddress[acceptValue] : +# 1445| r1445_2(glval) = VariableAddress[#temp1445:17] : +# 1445| mu1445_3(copy_constructor) = Uninitialized[#temp1445:17] : &:r1445_2 +# 1445| r1445_4(glval) = FunctionAddress[copy_constructor] : +# 1445| r1445_5(glval) = VariableAddress[d] : +# 1445| r1445_6(glval) = Convert : r1445_5 +# 1445| r1445_7(copy_constructor &) = CopyValue : r1445_6 +# 1445| v1445_8(void) = Call[copy_constructor] : func:r1445_4, this:r1445_2, 0:r1445_7 +# 1445| mu1445_9(unknown) = ^CallSideEffect : ~m? +# 1445| v1445_10(void) = ^BufferReadSideEffect[0] : &:r1445_7, ~m? +# 1445| mu1445_11(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1445_2 +# 1445| r1445_12(copy_constructor) = Load[#temp1445:17] : &:r1445_2, ~m? +# 1445| v1445_13(void) = Call[acceptValue] : func:r1445_1, 0:r1445_12 +# 1445| mu1445_14(unknown) = ^CallSideEffect : ~m? +# 1446| r1446_1(glval) = VariableAddress[#temp1446:5] : +# 1446| mu1446_2(copy_constructor) = Uninitialized[#temp1446:5] : &:r1446_1 +# 1446| r1446_3(glval) = FunctionAddress[copy_constructor] : +# 1446| v1446_4(void) = Call[copy_constructor] : func:r1446_3, this:r1446_1 +# 1446| mu1446_5(unknown) = ^CallSideEffect : ~m? +# 1446| mu1446_6(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1446_1 +# 1446| r1446_7(glval) = FunctionAddress[method] : +# 1446| v1446_8(void) = Call[method] : func:r1446_7, this:r1446_1 +# 1446| mu1446_9(unknown) = ^CallSideEffect : ~m? +# 1446| v1446_10(void) = ^IndirectReadSideEffect[-1] : &:r1446_1, ~m? +# 1446| mu1446_11(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1446_1 +# 1447| r1447_1(glval) = VariableAddress[#temp1447:5] : +# 1447| r1447_2(glval) = FunctionAddress[returnValue] : +# 1447| r1447_3(copy_constructor) = Call[returnValue] : func:r1447_2 +# 1447| mu1447_4(unknown) = ^CallSideEffect : ~m? +# 1447| mu1447_5(copy_constructor) = Store[#temp1447:5] : &:r1447_1, r1447_3 +# 1447| r1447_6(glval) = FunctionAddress[method] : +# 1447| v1447_7(void) = Call[method] : func:r1447_6, this:r1447_1 +# 1447| mu1447_8(unknown) = ^CallSideEffect : ~m? +# 1447| v1447_9(void) = ^IndirectReadSideEffect[-1] : &:r1447_1, ~m? +# 1447| mu1447_10(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1447_1 +# 1448| r1448_1(glval) = VariableAddress[#temp1448:5] : +# 1448| r1448_2(glval) = FunctionAddress[defaultConstruct] : +# 1448| r1448_3(copy_constructor) = Call[defaultConstruct] : func:r1448_2 +# 1448| mu1448_4(unknown) = ^CallSideEffect : ~m? +# 1448| mu1448_5(copy_constructor) = Store[#temp1448:5] : &:r1448_1, r1448_3 +# 1450| r1450_1(glval) = VariableAddress[y] : +# 1450| r1450_2(glval) = VariableAddress[#temp1450:13] : +# 1450| r1450_3(glval) = FunctionAddress[returnValue] : +# 1450| r1450_4(copy_constructor) = Call[returnValue] : func:r1450_3 +# 1450| mu1450_5(unknown) = ^CallSideEffect : ~m? +# 1450| mu1450_6(copy_constructor) = Store[#temp1450:13] : &:r1450_2, r1450_4 +# 1450| r1450_7(glval) = FieldAddress[y] : r1450_2 +# 1450| r1450_8(int) = Load[?] : &:r1450_7, ~m? +# 1450| mu1450_9(int) = Store[y] : &:r1450_1, r1450_8 +# 1451| v1451_1(void) = NoOp : +# 1440| v1440_4(void) = ReturnVoid : +# 1440| v1440_5(void) = AliasedUse : ~m? +# 1440| v1440_6(void) = ExitFunction : -# 1406| void temporary_point() -# 1406| Block 0 -# 1406| v1406_1(void) = EnterFunction : -# 1406| mu1406_2(unknown) = AliasedDefinition : -# 1406| mu1406_3(unknown) = InitializeNonLocal : -# 1407| r1407_1(glval) = VariableAddress[p] : -# 1407| r1407_2(glval) = FunctionAddress[returnValue] : -# 1407| r1407_3(Point) = Call[returnValue] : func:r1407_2 -# 1407| mu1407_4(unknown) = ^CallSideEffect : ~m? -# 1407| mu1407_5(Point) = Store[p] : &:r1407_1, r1407_3 -# 1408| r1408_1(glval) = VariableAddress[rp] : -# 1408| r1408_2(glval) = VariableAddress[#temp1408:23] : -# 1408| r1408_3(glval) = FunctionAddress[returnValue] : -# 1408| r1408_4(Point) = Call[returnValue] : func:r1408_3 -# 1408| mu1408_5(unknown) = ^CallSideEffect : ~m? -# 1408| mu1408_6(Point) = Store[#temp1408:23] : &:r1408_2, r1408_4 -# 1408| r1408_7(glval) = Convert : r1408_2 -# 1408| r1408_8(Point &) = CopyValue : r1408_7 -# 1408| mu1408_9(Point &) = Store[rp] : &:r1408_1, r1408_8 -# 1410| r1410_1(glval) = FunctionAddress[acceptRef] : -# 1410| r1410_2(glval) = VariableAddress[p] : -# 1410| r1410_3(glval) = Convert : r1410_2 -# 1410| r1410_4(Point &) = CopyValue : r1410_3 -# 1410| v1410_5(void) = Call[acceptRef] : func:r1410_1, 0:r1410_4 -# 1410| mu1410_6(unknown) = ^CallSideEffect : ~m? -# 1410| v1410_7(void) = ^BufferReadSideEffect[0] : &:r1410_4, ~m? -# 1411| r1411_1(glval) = FunctionAddress[acceptValue] : -# 1411| r1411_2(glval) = VariableAddress[p] : -# 1411| r1411_3(Point) = Load[p] : &:r1411_2, ~m? -# 1411| v1411_4(void) = Call[acceptValue] : func:r1411_1, 0:r1411_3 -# 1411| mu1411_5(unknown) = ^CallSideEffect : ~m? -# 1412| r1412_1(int) = Constant[0] : -# 1413| r1413_1(glval) = VariableAddress[y] : -# 1413| r1413_2(glval) = FunctionAddress[returnValue] : -# 1413| r1413_3(Point) = Call[returnValue] : func:r1413_2 -# 1413| mu1413_4(unknown) = ^CallSideEffect : ~m? -# 1413| r1413_5(glval) = VariableAddress[#temp1413:13] : -# 1413| mu1413_6(Point) = Store[#temp1413:13] : &:r1413_5, r1413_3 -# 1413| r1413_7(glval) = FieldAddress[y] : r1413_5 -# 1413| r1413_8(int) = Load[?] : &:r1413_7, ~m? -# 1413| mu1413_9(int) = Store[y] : &:r1413_1, r1413_8 -# 1415| r1415_1(glval) = FunctionAddress[defaultConstruct] : -# 1415| r1415_2(Point) = Call[defaultConstruct] : func:r1415_1 -# 1415| mu1415_3(unknown) = ^CallSideEffect : ~m? -# 1416| v1416_1(void) = NoOp : -# 1406| v1406_4(void) = ReturnVoid : -# 1406| v1406_5(void) = AliasedUse : ~m? -# 1406| v1406_6(void) = ExitFunction : +# 1453| void temporary_point() +# 1453| Block 0 +# 1453| v1453_1(void) = EnterFunction : +# 1453| mu1453_2(unknown) = AliasedDefinition : +# 1453| mu1453_3(unknown) = InitializeNonLocal : +# 1454| r1454_1(glval) = VariableAddress[p] : +# 1454| r1454_2(glval) = FunctionAddress[returnValue] : +# 1454| r1454_3(Point) = Call[returnValue] : func:r1454_2 +# 1454| mu1454_4(unknown) = ^CallSideEffect : ~m? +# 1454| mu1454_5(Point) = Store[p] : &:r1454_1, r1454_3 +# 1455| r1455_1(glval) = VariableAddress[rp] : +# 1455| r1455_2(glval) = VariableAddress[#temp1455:23] : +# 1455| r1455_3(glval) = FunctionAddress[returnValue] : +# 1455| r1455_4(Point) = Call[returnValue] : func:r1455_3 +# 1455| mu1455_5(unknown) = ^CallSideEffect : ~m? +# 1455| mu1455_6(Point) = Store[#temp1455:23] : &:r1455_2, r1455_4 +# 1455| r1455_7(glval) = Convert : r1455_2 +# 1455| r1455_8(Point &) = CopyValue : r1455_7 +# 1455| mu1455_9(Point &) = Store[rp] : &:r1455_1, r1455_8 +# 1457| r1457_1(glval) = FunctionAddress[acceptRef] : +# 1457| r1457_2(glval) = VariableAddress[p] : +# 1457| r1457_3(glval) = Convert : r1457_2 +# 1457| r1457_4(Point &) = CopyValue : r1457_3 +# 1457| v1457_5(void) = Call[acceptRef] : func:r1457_1, 0:r1457_4 +# 1457| mu1457_6(unknown) = ^CallSideEffect : ~m? +# 1457| v1457_7(void) = ^BufferReadSideEffect[0] : &:r1457_4, ~m? +# 1458| r1458_1(glval) = FunctionAddress[acceptValue] : +# 1458| r1458_2(glval) = VariableAddress[p] : +# 1458| r1458_3(Point) = Load[p] : &:r1458_2, ~m? +# 1458| v1458_4(void) = Call[acceptValue] : func:r1458_1, 0:r1458_3 +# 1458| mu1458_5(unknown) = ^CallSideEffect : ~m? +# 1459| r1459_1(int) = Constant[0] : +# 1460| r1460_1(glval) = VariableAddress[y] : +# 1460| r1460_2(glval) = FunctionAddress[returnValue] : +# 1460| r1460_3(Point) = Call[returnValue] : func:r1460_2 +# 1460| mu1460_4(unknown) = ^CallSideEffect : ~m? +# 1460| r1460_5(glval) = VariableAddress[#temp1460:13] : +# 1460| mu1460_6(Point) = Store[#temp1460:13] : &:r1460_5, r1460_3 +# 1460| r1460_7(glval) = FieldAddress[y] : r1460_5 +# 1460| r1460_8(int) = Load[?] : &:r1460_7, ~m? +# 1460| mu1460_9(int) = Store[y] : &:r1460_1, r1460_8 +# 1462| r1462_1(glval) = FunctionAddress[defaultConstruct] : +# 1462| r1462_2(Point) = Call[defaultConstruct] : func:r1462_1 +# 1462| mu1462_3(unknown) = ^CallSideEffect : ~m? +# 1463| v1463_1(void) = NoOp : +# 1453| v1453_4(void) = ReturnVoid : +# 1453| v1453_5(void) = AliasedUse : ~m? +# 1453| v1453_6(void) = ExitFunction : -# 1423| void temporary_unusual_fields() -# 1423| Block 0 -# 1423| v1423_1(void) = EnterFunction : -# 1423| mu1423_2(unknown) = AliasedDefinition : -# 1423| mu1423_3(unknown) = InitializeNonLocal : -# 1424| r1424_1(glval) = VariableAddress[rx] : -# 1424| r1424_2(glval) = FunctionAddress[returnValue] : -# 1424| r1424_3(UnusualFields) = Call[returnValue] : func:r1424_2 -# 1424| mu1424_4(unknown) = ^CallSideEffect : ~m? -# 1424| r1424_5(glval) = VariableAddress[#temp1424:21] : -# 1424| mu1424_6(UnusualFields) = Store[#temp1424:21] : &:r1424_5, r1424_3 -# 1424| r1424_7(glval) = FieldAddress[r] : r1424_5 -# 1424| r1424_8(int &) = Load[?] : &:r1424_7, ~m? -# 1424| r1424_9(glval) = CopyValue : r1424_8 -# 1424| r1424_10(glval) = Convert : r1424_9 -# 1424| r1424_11(int &) = CopyValue : r1424_10 -# 1424| mu1424_12(int &) = Store[rx] : &:r1424_1, r1424_11 -# 1425| r1425_1(glval) = VariableAddress[x] : -# 1425| r1425_2(glval) = FunctionAddress[returnValue] : -# 1425| r1425_3(UnusualFields) = Call[returnValue] : func:r1425_2 -# 1425| mu1425_4(unknown) = ^CallSideEffect : ~m? -# 1425| r1425_5(glval) = VariableAddress[#temp1425:13] : -# 1425| mu1425_6(UnusualFields) = Store[#temp1425:13] : &:r1425_5, r1425_3 -# 1425| r1425_7(glval) = FieldAddress[r] : r1425_5 -# 1425| r1425_8(int &) = Load[?] : &:r1425_7, ~m? -# 1425| r1425_9(int) = Load[?] : &:r1425_8, ~m? -# 1425| mu1425_10(int) = Store[x] : &:r1425_1, r1425_9 -# 1427| r1427_1(glval) = VariableAddress[rf] : -# 1427| r1427_2(glval) = FunctionAddress[returnValue] : -# 1427| r1427_3(UnusualFields) = Call[returnValue] : func:r1427_2 -# 1427| mu1427_4(unknown) = ^CallSideEffect : ~m? -# 1427| r1427_5(glval) = VariableAddress[#temp1427:23] : -# 1427| mu1427_6(UnusualFields) = Store[#temp1427:23] : &:r1427_5, r1427_3 -# 1427| r1427_7(glval) = FieldAddress[a] : r1427_5 -# 1427| r1427_8(float *) = Convert : r1427_7 -# 1427| r1427_9(int) = Constant[3] : -# 1427| r1427_10(glval) = PointerAdd[4] : r1427_8, r1427_9 -# 1427| r1427_11(glval) = Convert : r1427_10 -# 1427| r1427_12(float &) = CopyValue : r1427_11 -# 1427| mu1427_13(float &) = Store[rf] : &:r1427_1, r1427_12 -# 1428| r1428_1(glval) = VariableAddress[f] : -# 1428| r1428_2(glval) = FunctionAddress[returnValue] : -# 1428| r1428_3(UnusualFields) = Call[returnValue] : func:r1428_2 -# 1428| mu1428_4(unknown) = ^CallSideEffect : ~m? -# 1428| r1428_5(glval) = VariableAddress[#temp1428:15] : -# 1428| mu1428_6(UnusualFields) = Store[#temp1428:15] : &:r1428_5, r1428_3 -# 1428| r1428_7(glval) = FieldAddress[a] : r1428_5 -# 1428| r1428_8(float *) = Convert : r1428_7 -# 1428| r1428_9(int) = Constant[5] : -# 1428| r1428_10(glval) = PointerAdd[4] : r1428_8, r1428_9 -# 1428| r1428_11(float) = Load[?] : &:r1428_10, ~m? -# 1428| mu1428_12(float) = Store[f] : &:r1428_1, r1428_11 -# 1429| v1429_1(void) = NoOp : -# 1423| v1423_4(void) = ReturnVoid : -# 1423| v1423_5(void) = AliasedUse : ~m? -# 1423| v1423_6(void) = ExitFunction : +# 1470| void temporary_unusual_fields() +# 1470| Block 0 +# 1470| v1470_1(void) = EnterFunction : +# 1470| mu1470_2(unknown) = AliasedDefinition : +# 1470| mu1470_3(unknown) = InitializeNonLocal : +# 1471| r1471_1(glval) = VariableAddress[rx] : +# 1471| r1471_2(glval) = FunctionAddress[returnValue] : +# 1471| r1471_3(UnusualFields) = Call[returnValue] : func:r1471_2 +# 1471| mu1471_4(unknown) = ^CallSideEffect : ~m? +# 1471| r1471_5(glval) = VariableAddress[#temp1471:21] : +# 1471| mu1471_6(UnusualFields) = Store[#temp1471:21] : &:r1471_5, r1471_3 +# 1471| r1471_7(glval) = FieldAddress[r] : r1471_5 +# 1471| r1471_8(int &) = Load[?] : &:r1471_7, ~m? +# 1471| r1471_9(glval) = CopyValue : r1471_8 +# 1471| r1471_10(glval) = Convert : r1471_9 +# 1471| r1471_11(int &) = CopyValue : r1471_10 +# 1471| mu1471_12(int &) = Store[rx] : &:r1471_1, r1471_11 +# 1472| r1472_1(glval) = VariableAddress[x] : +# 1472| r1472_2(glval) = FunctionAddress[returnValue] : +# 1472| r1472_3(UnusualFields) = Call[returnValue] : func:r1472_2 +# 1472| mu1472_4(unknown) = ^CallSideEffect : ~m? +# 1472| r1472_5(glval) = VariableAddress[#temp1472:13] : +# 1472| mu1472_6(UnusualFields) = Store[#temp1472:13] : &:r1472_5, r1472_3 +# 1472| r1472_7(glval) = FieldAddress[r] : r1472_5 +# 1472| r1472_8(int &) = Load[?] : &:r1472_7, ~m? +# 1472| r1472_9(int) = Load[?] : &:r1472_8, ~m? +# 1472| mu1472_10(int) = Store[x] : &:r1472_1, r1472_9 +# 1474| r1474_1(glval) = VariableAddress[rf] : +# 1474| r1474_2(glval) = FunctionAddress[returnValue] : +# 1474| r1474_3(UnusualFields) = Call[returnValue] : func:r1474_2 +# 1474| mu1474_4(unknown) = ^CallSideEffect : ~m? +# 1474| r1474_5(glval) = VariableAddress[#temp1474:23] : +# 1474| mu1474_6(UnusualFields) = Store[#temp1474:23] : &:r1474_5, r1474_3 +# 1474| r1474_7(glval) = FieldAddress[a] : r1474_5 +# 1474| r1474_8(float *) = Convert : r1474_7 +# 1474| r1474_9(int) = Constant[3] : +# 1474| r1474_10(glval) = PointerAdd[4] : r1474_8, r1474_9 +# 1474| r1474_11(glval) = Convert : r1474_10 +# 1474| r1474_12(float &) = CopyValue : r1474_11 +# 1474| mu1474_13(float &) = Store[rf] : &:r1474_1, r1474_12 +# 1475| r1475_1(glval) = VariableAddress[f] : +# 1475| r1475_2(glval) = FunctionAddress[returnValue] : +# 1475| r1475_3(UnusualFields) = Call[returnValue] : func:r1475_2 +# 1475| mu1475_4(unknown) = ^CallSideEffect : ~m? +# 1475| r1475_5(glval) = VariableAddress[#temp1475:15] : +# 1475| mu1475_6(UnusualFields) = Store[#temp1475:15] : &:r1475_5, r1475_3 +# 1475| r1475_7(glval) = FieldAddress[a] : r1475_5 +# 1475| r1475_8(float *) = Convert : r1475_7 +# 1475| r1475_9(int) = Constant[5] : +# 1475| r1475_10(glval) = PointerAdd[4] : r1475_8, r1475_9 +# 1475| r1475_11(float) = Load[?] : &:r1475_10, ~m? +# 1475| mu1475_12(float) = Store[f] : &:r1475_1, r1475_11 +# 1476| v1476_1(void) = NoOp : +# 1470| v1470_4(void) = ReturnVoid : +# 1470| v1470_5(void) = AliasedUse : ~m? +# 1470| v1470_6(void) = ExitFunction : -# 1445| void temporary_hierarchy() -# 1445| Block 0 -# 1445| v1445_1(void) = EnterFunction : -# 1445| mu1445_2(unknown) = AliasedDefinition : -# 1445| mu1445_3(unknown) = InitializeNonLocal : -# 1446| r1446_1(glval) = VariableAddress[b] : +# 1492| void temporary_hierarchy() +# 1492| Block 0 +# 1492| v1492_1(void) = EnterFunction : +# 1492| mu1492_2(unknown) = AliasedDefinition : +# 1492| mu1492_3(unknown) = InitializeNonLocal : +# 1493| r1493_1(glval) = VariableAddress[b] : #-----| r0_1(glval) = VariableAddress[#temp0:0] : -# 1446| r1446_2(glval) = FunctionAddress[returnValue] : -# 1446| r1446_3(POD_Middle) = Call[returnValue] : func:r1446_2 -# 1446| mu1446_4(unknown) = ^CallSideEffect : ~m? -# 1446| mu1446_5(POD_Middle) = Store[#temp0:0] : &:r0_1, r1446_3 +# 1493| r1493_2(glval) = FunctionAddress[returnValue] : +# 1493| r1493_3(POD_Middle) = Call[returnValue] : func:r1493_2 +# 1493| mu1493_4(unknown) = ^CallSideEffect : ~m? +# 1493| mu1493_5(POD_Middle) = Store[#temp0:0] : &:r0_1, r1493_3 #-----| r0_2(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_1 #-----| r0_3(POD_Base) = Load[?] : &:r0_2, ~m? -#-----| mu0_4(POD_Base) = Store[b] : &:r1446_1, r0_3 -# 1447| r1447_1(glval) = VariableAddress[#temp1447:9] : -# 1447| r1447_2(glval) = FunctionAddress[returnValue] : -# 1447| r1447_3(POD_Derived) = Call[returnValue] : func:r1447_2 -# 1447| mu1447_4(unknown) = ^CallSideEffect : ~m? -# 1447| mu1447_5(POD_Derived) = Store[#temp1447:9] : &:r1447_1, r1447_3 -# 1447| r1447_6(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r1447_1 -# 1447| r1447_7(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r1447_6 -# 1447| r1447_8(POD_Base) = Load[?] : &:r1447_7, ~m? -# 1447| r1447_9(glval) = VariableAddress[b] : -# 1447| mu1447_10(POD_Base) = Store[b] : &:r1447_9, r1447_8 -# 1448| r1448_1(glval) = VariableAddress[x] : +#-----| mu0_4(POD_Base) = Store[b] : &:r1493_1, r0_3 +# 1494| r1494_1(glval) = VariableAddress[#temp1494:9] : +# 1494| r1494_2(glval) = FunctionAddress[returnValue] : +# 1494| r1494_3(POD_Derived) = Call[returnValue] : func:r1494_2 +# 1494| mu1494_4(unknown) = ^CallSideEffect : ~m? +# 1494| mu1494_5(POD_Derived) = Store[#temp1494:9] : &:r1494_1, r1494_3 +# 1494| r1494_6(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r1494_1 +# 1494| r1494_7(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r1494_6 +# 1494| r1494_8(POD_Base) = Load[?] : &:r1494_7, ~m? +# 1494| r1494_9(glval) = VariableAddress[b] : +# 1494| mu1494_10(POD_Base) = Store[b] : &:r1494_9, r1494_8 +# 1495| r1495_1(glval) = VariableAddress[x] : #-----| r0_5(glval) = VariableAddress[#temp0:0] : -# 1448| r1448_2(glval) = FunctionAddress[returnValue] : -# 1448| r1448_3(POD_Derived) = Call[returnValue] : func:r1448_2 -# 1448| mu1448_4(unknown) = ^CallSideEffect : ~m? -# 1448| mu1448_5(POD_Derived) = Store[#temp0:0] : &:r0_5, r1448_3 +# 1495| r1495_2(glval) = FunctionAddress[returnValue] : +# 1495| r1495_3(POD_Derived) = Call[returnValue] : func:r1495_2 +# 1495| mu1495_4(unknown) = ^CallSideEffect : ~m? +# 1495| mu1495_5(POD_Derived) = Store[#temp0:0] : &:r0_5, r1495_3 #-----| r0_6(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r0_5 #-----| r0_7(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_6 -# 1448| r1448_6(glval) = FieldAddress[x] : r0_7 -# 1448| r1448_7(int) = Load[?] : &:r1448_6, ~m? -# 1448| mu1448_8(int) = Store[x] : &:r1448_1, r1448_7 -# 1449| r1449_1(glval) = VariableAddress[f] : +# 1495| r1495_6(glval) = FieldAddress[x] : r0_7 +# 1495| r1495_7(int) = Load[?] : &:r1495_6, ~m? +# 1495| mu1495_8(int) = Store[x] : &:r1495_1, r1495_7 +# 1496| r1496_1(glval) = VariableAddress[f] : #-----| r0_8(glval) = VariableAddress[#temp0:0] : -# 1449| r1449_2(glval) = FunctionAddress[returnValue] : -# 1449| r1449_3(POD_Derived) = Call[returnValue] : func:r1449_2 -# 1449| mu1449_4(unknown) = ^CallSideEffect : ~m? -# 1449| mu1449_5(POD_Derived) = Store[#temp0:0] : &:r0_8, r1449_3 +# 1496| r1496_2(glval) = FunctionAddress[returnValue] : +# 1496| r1496_3(POD_Derived) = Call[returnValue] : func:r1496_2 +# 1496| mu1496_4(unknown) = ^CallSideEffect : ~m? +# 1496| mu1496_5(POD_Derived) = Store[#temp0:0] : &:r0_8, r1496_3 #-----| r0_9(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r0_8 #-----| r0_10(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_9 #-----| r0_11(glval) = Convert : r0_10 -# 1449| r1449_6(glval) = FunctionAddress[f] : -# 1449| r1449_7(float) = Call[f] : func:r1449_6, this:r0_11 -# 1449| mu1449_8(unknown) = ^CallSideEffect : ~m? +# 1496| r1496_6(glval) = FunctionAddress[f] : +# 1496| r1496_7(float) = Call[f] : func:r1496_6, this:r0_11 +# 1496| mu1496_8(unknown) = ^CallSideEffect : ~m? #-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m? -# 1449| mu1449_9(float) = Store[f] : &:r1449_1, r1449_7 -# 1450| v1450_1(void) = NoOp : -# 1445| v1445_4(void) = ReturnVoid : -# 1445| v1445_5(void) = AliasedUse : ~m? -# 1445| v1445_6(void) = ExitFunction : +# 1496| mu1496_9(float) = Store[f] : &:r1496_1, r1496_7 +# 1497| v1497_1(void) = NoOp : +# 1492| v1492_4(void) = ReturnVoid : +# 1492| v1492_5(void) = AliasedUse : ~m? +# 1492| v1492_6(void) = ExitFunction : -# 1453| void Inheritance_Test_B::~Inheritance_Test_B() -# 1453| Block 0 -# 1453| v1453_1(void) = EnterFunction : -# 1453| mu1453_2(unknown) = AliasedDefinition : -# 1453| mu1453_3(unknown) = InitializeNonLocal : -# 1453| r1453_4(glval) = VariableAddress[#this] : -# 1453| mu1453_5(glval) = InitializeParameter[#this] : &:r1453_4 -# 1453| r1453_6(glval) = Load[#this] : &:r1453_4, ~m? -# 1453| mu1453_7(Inheritance_Test_B) = InitializeIndirection[#this] : &:r1453_6 -# 1453| v1453_8(void) = NoOp : -# 1453| v1453_9(void) = ReturnIndirection[#this] : &:r1453_6, ~m? -# 1453| v1453_10(void) = ReturnVoid : -# 1453| v1453_11(void) = AliasedUse : ~m? -# 1453| v1453_12(void) = ExitFunction : +# 1500| void Inheritance_Test_B::~Inheritance_Test_B() +# 1500| Block 0 +# 1500| v1500_1(void) = EnterFunction : +# 1500| mu1500_2(unknown) = AliasedDefinition : +# 1500| mu1500_3(unknown) = InitializeNonLocal : +# 1500| r1500_4(glval) = VariableAddress[#this] : +# 1500| mu1500_5(glval) = InitializeParameter[#this] : &:r1500_4 +# 1500| r1500_6(glval) = Load[#this] : &:r1500_4, ~m? +# 1500| mu1500_7(Inheritance_Test_B) = InitializeIndirection[#this] : &:r1500_6 +# 1500| v1500_8(void) = NoOp : +# 1500| v1500_9(void) = ReturnIndirection[#this] : &:r1500_6, ~m? +# 1500| v1500_10(void) = ReturnVoid : +# 1500| v1500_11(void) = AliasedUse : ~m? +# 1500| v1500_12(void) = ExitFunction : -# 1459| void Inheritance_Test_A::Inheritance_Test_A() -# 1459| Block 0 -# 1459| v1459_1(void) = EnterFunction : -# 1459| mu1459_2(unknown) = AliasedDefinition : -# 1459| mu1459_3(unknown) = InitializeNonLocal : -# 1459| r1459_4(glval) = VariableAddress[#this] : -# 1459| mu1459_5(glval) = InitializeParameter[#this] : &:r1459_4 -# 1459| r1459_6(glval) = Load[#this] : &:r1459_4, ~m? -# 1459| mu1459_7(Inheritance_Test_A) = InitializeIndirection[#this] : &:r1459_6 -# 1459| r1459_8(glval) = FieldAddress[x] : mu1459_5 -# 1459| r1459_9(int) = Constant[42] : -# 1459| mu1459_10(int) = Store[?] : &:r1459_8, r1459_9 -# 1460| r1460_1(int) = Constant[3] : -# 1460| r1460_2(glval) = VariableAddress[#this] : -# 1460| r1460_3(Inheritance_Test_A *) = Load[#this] : &:r1460_2, ~m? -# 1460| r1460_4(glval) = FieldAddress[y] : r1460_3 -# 1460| mu1460_5(int) = Store[?] : &:r1460_4, r1460_1 -# 1461| v1461_1(void) = NoOp : -# 1459| v1459_11(void) = ReturnIndirection[#this] : &:r1459_6, ~m? -# 1459| v1459_12(void) = ReturnVoid : -# 1459| v1459_13(void) = AliasedUse : ~m? -# 1459| v1459_14(void) = ExitFunction : +# 1506| void Inheritance_Test_A::Inheritance_Test_A() +# 1506| Block 0 +# 1506| v1506_1(void) = EnterFunction : +# 1506| mu1506_2(unknown) = AliasedDefinition : +# 1506| mu1506_3(unknown) = InitializeNonLocal : +# 1506| r1506_4(glval) = VariableAddress[#this] : +# 1506| mu1506_5(glval) = InitializeParameter[#this] : &:r1506_4 +# 1506| r1506_6(glval) = Load[#this] : &:r1506_4, ~m? +# 1506| mu1506_7(Inheritance_Test_A) = InitializeIndirection[#this] : &:r1506_6 +# 1506| r1506_8(glval) = FieldAddress[x] : mu1506_5 +# 1506| r1506_9(int) = Constant[42] : +# 1506| mu1506_10(int) = Store[?] : &:r1506_8, r1506_9 +# 1507| r1507_1(int) = Constant[3] : +# 1507| r1507_2(glval) = VariableAddress[#this] : +# 1507| r1507_3(Inheritance_Test_A *) = Load[#this] : &:r1507_2, ~m? +# 1507| r1507_4(glval) = FieldAddress[y] : r1507_3 +# 1507| mu1507_5(int) = Store[?] : &:r1507_4, r1507_1 +# 1508| v1508_1(void) = NoOp : +# 1506| v1506_11(void) = ReturnIndirection[#this] : &:r1506_6, ~m? +# 1506| v1506_12(void) = ReturnVoid : +# 1506| v1506_13(void) = AliasedUse : ~m? +# 1506| v1506_14(void) = ExitFunction : -# 1464| void array_structured_binding() -# 1464| Block 0 -# 1464| v1464_1(void) = EnterFunction : -# 1464| mu1464_2(unknown) = AliasedDefinition : -# 1464| mu1464_3(unknown) = InitializeNonLocal : -# 1465| r1465_1(glval) = VariableAddress[xs] : -# 1465| mu1465_2(int[2]) = Uninitialized[xs] : &:r1465_1 -# 1465| r1465_3(int) = Constant[0] : -# 1465| r1465_4(glval) = PointerAdd[4] : r1465_1, r1465_3 -# 1465| r1465_5(int) = Constant[1] : -# 1465| mu1465_6(int) = Store[?] : &:r1465_4, r1465_5 -# 1465| r1465_7(int) = Constant[1] : -# 1465| r1465_8(glval) = PointerAdd[4] : r1465_1, r1465_7 -# 1465| r1465_9(int) = Constant[2] : -# 1465| mu1465_10(int) = Store[?] : &:r1465_8, r1465_9 -# 1468| r1468_1(glval) = VariableAddress[(unnamed local variable)] : -# 1468| r1468_2(glval) = VariableAddress[xs] : -# 1468| r1468_3(int(&)[2]) = CopyValue : r1468_2 -# 1468| mu1468_4(int(&)[2]) = Store[(unnamed local variable)] : &:r1468_1, r1468_3 -# 1468| r1468_5(glval) = VariableAddress[x0] : +# 1511| void array_structured_binding() +# 1511| Block 0 +# 1511| v1511_1(void) = EnterFunction : +# 1511| mu1511_2(unknown) = AliasedDefinition : +# 1511| mu1511_3(unknown) = InitializeNonLocal : +# 1512| r1512_1(glval) = VariableAddress[xs] : +# 1512| mu1512_2(int[2]) = Uninitialized[xs] : &:r1512_1 +# 1512| r1512_3(int) = Constant[0] : +# 1512| r1512_4(glval) = PointerAdd[4] : r1512_1, r1512_3 +# 1512| r1512_5(int) = Constant[1] : +# 1512| mu1512_6(int) = Store[?] : &:r1512_4, r1512_5 +# 1512| r1512_7(int) = Constant[1] : +# 1512| r1512_8(glval) = PointerAdd[4] : r1512_1, r1512_7 +# 1512| r1512_9(int) = Constant[2] : +# 1512| mu1512_10(int) = Store[?] : &:r1512_8, r1512_9 +# 1515| r1515_1(glval) = VariableAddress[(unnamed local variable)] : +# 1515| r1515_2(glval) = VariableAddress[xs] : +# 1515| r1515_3(int(&)[2]) = CopyValue : r1515_2 +# 1515| mu1515_4(int(&)[2]) = Store[(unnamed local variable)] : &:r1515_1, r1515_3 +# 1515| r1515_5(glval) = VariableAddress[x0] : #-----| r0_1(glval) = VariableAddress[(unnamed local variable)] : #-----| r0_2(int(&)[2]) = Load[(unnamed local variable)] : &:r0_1, ~m? #-----| r0_3(glval) = CopyValue : r0_2 #-----| r0_4(int *) = Convert : r0_3 #-----| r0_5(unsigned long) = Constant[0] : #-----| r0_6(glval) = PointerAdd[4] : r0_4, r0_5 -#-----| mu0_7(int &) = Store[x0] : &:r1468_5, r0_6 -# 1468| r1468_6(glval) = VariableAddress[x1] : +#-----| mu0_7(int &) = Store[x0] : &:r1515_5, r0_6 +# 1515| r1515_6(glval) = VariableAddress[x1] : #-----| r0_8(glval) = VariableAddress[(unnamed local variable)] : #-----| r0_9(int(&)[2]) = Load[(unnamed local variable)] : &:r0_8, ~m? #-----| r0_10(glval) = CopyValue : r0_9 #-----| r0_11(int *) = Convert : r0_10 #-----| r0_12(unsigned long) = Constant[1] : #-----| r0_13(glval) = PointerAdd[4] : r0_11, r0_12 -#-----| mu0_14(int &) = Store[x1] : &:r1468_6, r0_13 -# 1469| r1469_1(int) = Constant[3] : -# 1469| r1469_2(glval) = VariableAddress[x1] : -# 1469| r1469_3(int &) = Load[x1] : &:r1469_2, ~m? -# 1469| mu1469_4(int) = Store[?] : &:r1469_3, r1469_1 -# 1470| r1470_1(glval) = VariableAddress[rx1] : -# 1470| r1470_2(glval) = VariableAddress[x1] : -# 1470| r1470_3(int &) = Load[x1] : &:r1470_2, ~m? -# 1470| r1470_4(int &) = CopyValue : r1470_3 -# 1470| mu1470_5(int &) = Store[rx1] : &:r1470_1, r1470_4 -# 1471| r1471_1(glval) = VariableAddress[x] : -# 1471| r1471_2(glval) = VariableAddress[x1] : -# 1471| r1471_3(int &) = Load[x1] : &:r1471_2, ~m? -# 1471| r1471_4(int) = Load[?] : &:r1471_3, ~m? -# 1471| mu1471_5(int) = Store[x] : &:r1471_1, r1471_4 -# 1475| r1475_1(glval) = VariableAddress[unnamed_local_variable] : -# 1475| r1475_2(glval) = VariableAddress[xs] : -# 1475| r1475_3(int(&)[2]) = CopyValue : r1475_2 -# 1475| mu1475_4(int(&)[2]) = Store[unnamed_local_variable] : &:r1475_1, r1475_3 -# 1476| r1476_1(glval) = VariableAddress[x0] : -# 1476| r1476_2(glval) = VariableAddress[unnamed_local_variable] : -# 1476| r1476_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1476_2, ~m? -# 1476| r1476_4(glval) = CopyValue : r1476_3 -# 1476| r1476_5(int *) = Convert : r1476_4 -# 1476| r1476_6(int) = Constant[0] : -# 1476| r1476_7(glval) = PointerAdd[4] : r1476_5, r1476_6 -# 1476| r1476_8(int &) = CopyValue : r1476_7 -# 1476| mu1476_9(int &) = Store[x0] : &:r1476_1, r1476_8 -# 1477| r1477_1(glval) = VariableAddress[x1] : -# 1477| r1477_2(glval) = VariableAddress[unnamed_local_variable] : -# 1477| r1477_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1477_2, ~m? -# 1477| r1477_4(glval) = CopyValue : r1477_3 -# 1477| r1477_5(int *) = Convert : r1477_4 -# 1477| r1477_6(int) = Constant[1] : -# 1477| r1477_7(glval) = PointerAdd[4] : r1477_5, r1477_6 -# 1477| r1477_8(int &) = CopyValue : r1477_7 -# 1477| mu1477_9(int &) = Store[x1] : &:r1477_1, r1477_8 -# 1478| r1478_1(int) = Constant[3] : -# 1478| r1478_2(glval) = VariableAddress[x1] : -# 1478| r1478_3(int &) = Load[x1] : &:r1478_2, ~m? -# 1478| r1478_4(glval) = CopyValue : r1478_3 -# 1478| mu1478_5(int) = Store[?] : &:r1478_4, r1478_1 -# 1479| r1479_1(glval) = VariableAddress[rx1] : -# 1479| r1479_2(glval) = VariableAddress[x1] : -# 1479| r1479_3(int &) = Load[x1] : &:r1479_2, ~m? -# 1479| r1479_4(glval) = CopyValue : r1479_3 -# 1479| r1479_5(int &) = CopyValue : r1479_4 -# 1479| mu1479_6(int &) = Store[rx1] : &:r1479_1, r1479_5 -# 1480| r1480_1(glval) = VariableAddress[x] : -# 1480| r1480_2(glval) = VariableAddress[x1] : -# 1480| r1480_3(int &) = Load[x1] : &:r1480_2, ~m? -# 1480| r1480_4(int) = Load[?] : &:r1480_3, ~m? -# 1480| mu1480_5(int) = Store[x] : &:r1480_1, r1480_4 -# 1482| v1482_1(void) = NoOp : -# 1464| v1464_4(void) = ReturnVoid : -# 1464| v1464_5(void) = AliasedUse : ~m? -# 1464| v1464_6(void) = ExitFunction : +#-----| mu0_14(int &) = Store[x1] : &:r1515_6, r0_13 +# 1516| r1516_1(int) = Constant[3] : +# 1516| r1516_2(glval) = VariableAddress[x1] : +# 1516| r1516_3(int &) = Load[x1] : &:r1516_2, ~m? +# 1516| mu1516_4(int) = Store[?] : &:r1516_3, r1516_1 +# 1517| r1517_1(glval) = VariableAddress[rx1] : +# 1517| r1517_2(glval) = VariableAddress[x1] : +# 1517| r1517_3(int &) = Load[x1] : &:r1517_2, ~m? +# 1517| r1517_4(int &) = CopyValue : r1517_3 +# 1517| mu1517_5(int &) = Store[rx1] : &:r1517_1, r1517_4 +# 1518| r1518_1(glval) = VariableAddress[x] : +# 1518| r1518_2(glval) = VariableAddress[x1] : +# 1518| r1518_3(int &) = Load[x1] : &:r1518_2, ~m? +# 1518| r1518_4(int) = Load[?] : &:r1518_3, ~m? +# 1518| mu1518_5(int) = Store[x] : &:r1518_1, r1518_4 +# 1522| r1522_1(glval) = VariableAddress[unnamed_local_variable] : +# 1522| r1522_2(glval) = VariableAddress[xs] : +# 1522| r1522_3(int(&)[2]) = CopyValue : r1522_2 +# 1522| mu1522_4(int(&)[2]) = Store[unnamed_local_variable] : &:r1522_1, r1522_3 +# 1523| r1523_1(glval) = VariableAddress[x0] : +# 1523| r1523_2(glval) = VariableAddress[unnamed_local_variable] : +# 1523| r1523_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1523_2, ~m? +# 1523| r1523_4(glval) = CopyValue : r1523_3 +# 1523| r1523_5(int *) = Convert : r1523_4 +# 1523| r1523_6(int) = Constant[0] : +# 1523| r1523_7(glval) = PointerAdd[4] : r1523_5, r1523_6 +# 1523| r1523_8(int &) = CopyValue : r1523_7 +# 1523| mu1523_9(int &) = Store[x0] : &:r1523_1, r1523_8 +# 1524| r1524_1(glval) = VariableAddress[x1] : +# 1524| r1524_2(glval) = VariableAddress[unnamed_local_variable] : +# 1524| r1524_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1524_2, ~m? +# 1524| r1524_4(glval) = CopyValue : r1524_3 +# 1524| r1524_5(int *) = Convert : r1524_4 +# 1524| r1524_6(int) = Constant[1] : +# 1524| r1524_7(glval) = PointerAdd[4] : r1524_5, r1524_6 +# 1524| r1524_8(int &) = CopyValue : r1524_7 +# 1524| mu1524_9(int &) = Store[x1] : &:r1524_1, r1524_8 +# 1525| r1525_1(int) = Constant[3] : +# 1525| r1525_2(glval) = VariableAddress[x1] : +# 1525| r1525_3(int &) = Load[x1] : &:r1525_2, ~m? +# 1525| r1525_4(glval) = CopyValue : r1525_3 +# 1525| mu1525_5(int) = Store[?] : &:r1525_4, r1525_1 +# 1526| r1526_1(glval) = VariableAddress[rx1] : +# 1526| r1526_2(glval) = VariableAddress[x1] : +# 1526| r1526_3(int &) = Load[x1] : &:r1526_2, ~m? +# 1526| r1526_4(glval) = CopyValue : r1526_3 +# 1526| r1526_5(int &) = CopyValue : r1526_4 +# 1526| mu1526_6(int &) = Store[rx1] : &:r1526_1, r1526_5 +# 1527| r1527_1(glval) = VariableAddress[x] : +# 1527| r1527_2(glval) = VariableAddress[x1] : +# 1527| r1527_3(int &) = Load[x1] : &:r1527_2, ~m? +# 1527| r1527_4(int) = Load[?] : &:r1527_3, ~m? +# 1527| mu1527_5(int) = Store[x] : &:r1527_1, r1527_4 +# 1529| v1529_1(void) = NoOp : +# 1511| v1511_4(void) = ReturnVoid : +# 1511| v1511_5(void) = AliasedUse : ~m? +# 1511| v1511_6(void) = ExitFunction : -# 1484| void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct() -# 1484| Block 0 -# 1484| v1484_1(void) = EnterFunction : -# 1484| mu1484_2(unknown) = AliasedDefinition : -# 1484| mu1484_3(unknown) = InitializeNonLocal : -# 1484| r1484_4(glval) = VariableAddress[#this] : -# 1484| mu1484_5(glval) = InitializeParameter[#this] : &:r1484_4 -# 1484| r1484_6(glval) = Load[#this] : &:r1484_4, ~m? -# 1484| mu1484_7(StructuredBindingDataMemberMemberStruct) = InitializeIndirection[#this] : &:r1484_6 -# 1484| v1484_8(void) = NoOp : -# 1484| v1484_9(void) = ReturnIndirection[#this] : &:r1484_6, ~m? -# 1484| v1484_10(void) = ReturnVoid : -# 1484| v1484_11(void) = AliasedUse : ~m? -# 1484| v1484_12(void) = ExitFunction : +# 1531| void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct() +# 1531| Block 0 +# 1531| v1531_1(void) = EnterFunction : +# 1531| mu1531_2(unknown) = AliasedDefinition : +# 1531| mu1531_3(unknown) = InitializeNonLocal : +# 1531| r1531_4(glval) = VariableAddress[#this] : +# 1531| mu1531_5(glval) = InitializeParameter[#this] : &:r1531_4 +# 1531| r1531_6(glval) = Load[#this] : &:r1531_4, ~m? +# 1531| mu1531_7(StructuredBindingDataMemberMemberStruct) = InitializeIndirection[#this] : &:r1531_6 +# 1531| v1531_8(void) = NoOp : +# 1531| v1531_9(void) = ReturnIndirection[#this] : &:r1531_6, ~m? +# 1531| v1531_10(void) = ReturnVoid : +# 1531| v1531_11(void) = AliasedUse : ~m? +# 1531| v1531_12(void) = ExitFunction : -# 1488| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() -# 1488| Block 0 -# 1488| v1488_1(void) = EnterFunction : -# 1488| mu1488_2(unknown) = AliasedDefinition : -# 1488| mu1488_3(unknown) = InitializeNonLocal : -# 1488| r1488_4(glval) = VariableAddress[#this] : -# 1488| mu1488_5(glval) = InitializeParameter[#this] : &:r1488_4 -# 1488| r1488_6(glval) = Load[#this] : &:r1488_4, ~m? -# 1488| mu1488_7(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1488_6 +# 1535| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() +# 1535| Block 0 +# 1535| v1535_1(void) = EnterFunction : +# 1535| mu1535_2(unknown) = AliasedDefinition : +# 1535| mu1535_3(unknown) = InitializeNonLocal : +# 1535| r1535_4(glval) = VariableAddress[#this] : +# 1535| mu1535_5(glval) = InitializeParameter[#this] : &:r1535_4 +# 1535| r1535_6(glval) = Load[#this] : &:r1535_4, ~m? +# 1535| mu1535_7(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1535_6 #-----| Goto -> Block 2 -# 1488| Block 1 -# 1488| r1488_8(glval) = FieldAddress[m] : mu1488_5 -# 1488| r1488_9(glval) = FunctionAddress[StructuredBindingDataMemberMemberStruct] : -# 1488| v1488_10(void) = Call[StructuredBindingDataMemberMemberStruct] : func:r1488_9, this:r1488_8 -# 1488| mu1488_11(unknown) = ^CallSideEffect : ~m? -# 1488| mu1488_12(StructuredBindingDataMemberMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1488_8 +# 1535| Block 1 +# 1535| r1535_8(glval) = FieldAddress[m] : mu1535_5 +# 1535| r1535_9(glval) = FunctionAddress[StructuredBindingDataMemberMemberStruct] : +# 1535| v1535_10(void) = Call[StructuredBindingDataMemberMemberStruct] : func:r1535_9, this:r1535_8 +# 1535| mu1535_11(unknown) = ^CallSideEffect : ~m? +# 1535| mu1535_12(StructuredBindingDataMemberMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1535_8 #-----| Goto -> Block 2 -# 1488| Block 2 -# 1488| v1488_13(void) = NoOp : -# 1488| v1488_14(void) = ReturnIndirection[#this] : &:r1488_6, ~m? -# 1488| v1488_15(void) = ReturnVoid : -# 1488| v1488_16(void) = AliasedUse : ~m? -# 1488| v1488_17(void) = ExitFunction : +# 1535| Block 2 +# 1535| v1535_13(void) = NoOp : +# 1535| v1535_14(void) = ReturnIndirection[#this] : &:r1535_6, ~m? +# 1535| v1535_15(void) = ReturnVoid : +# 1535| v1535_16(void) = AliasedUse : ~m? +# 1535| v1535_17(void) = ExitFunction : -# 1488| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct const&) -# 1488| Block 0 -# 1488| v1488_1(void) = EnterFunction : -# 1488| mu1488_2(unknown) = AliasedDefinition : -# 1488| mu1488_3(unknown) = InitializeNonLocal : -# 1488| r1488_4(glval) = VariableAddress[#this] : -# 1488| mu1488_5(glval) = InitializeParameter[#this] : &:r1488_4 -# 1488| r1488_6(glval) = Load[#this] : &:r1488_4, ~m? -# 1488| mu1488_7(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1488_6 +# 1535| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct const&) +# 1535| Block 0 +# 1535| v1535_1(void) = EnterFunction : +# 1535| mu1535_2(unknown) = AliasedDefinition : +# 1535| mu1535_3(unknown) = InitializeNonLocal : +# 1535| r1535_4(glval) = VariableAddress[#this] : +# 1535| mu1535_5(glval) = InitializeParameter[#this] : &:r1535_4 +# 1535| r1535_6(glval) = Load[#this] : &:r1535_4, ~m? +# 1535| mu1535_7(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1535_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(StructuredBindingDataMemberStruct &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1488| r1488_8(glval) = FieldAddress[i] : mu1488_5 -# 1488| r1488_9(glval) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_10(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_9, ~m? -# 1488| r1488_11(glval) = CopyValue : r1488_10 -# 1488| r1488_12(glval) = FieldAddress[i] : r1488_11 -# 1488| r1488_13(int) = Load[?] : &:r1488_12, ~m? -# 1488| mu1488_14(int) = Store[?] : &:r1488_8, r1488_13 -# 1488| r1488_15(glval) = FieldAddress[d] : mu1488_5 -# 1488| r1488_16(glval) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_17(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_16, ~m? -# 1488| r1488_18(glval) = CopyValue : r1488_17 -# 1488| r1488_19(glval) = FieldAddress[d] : r1488_18 -# 1488| r1488_20(double) = Load[?] : &:r1488_19, ~m? -# 1488| mu1488_21(double) = Store[?] : &:r1488_15, r1488_20 -# 1488| r1488_22(glval) = FieldAddress[b] : mu1488_5 -# 1488| r1488_23(glval) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_24(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_23, ~m? -# 1488| r1488_25(glval) = CopyValue : r1488_24 -# 1488| r1488_26(glval) = FieldAddress[b] : r1488_25 -# 1488| r1488_27(unsigned int) = Load[?] : &:r1488_26, ~m? -# 1488| mu1488_28(unsigned int) = Store[?] : &:r1488_22, r1488_27 -# 1488| r1488_29(glval) = FieldAddress[r] : mu1488_5 -# 1488| r1488_30(glval) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_31(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_30, ~m? -# 1488| r1488_32(glval) = CopyValue : r1488_31 -# 1488| r1488_33(glval) = FieldAddress[r] : r1488_32 -# 1488| r1488_34(int &) = Load[?] : &:r1488_33, ~m? -# 1488| mu1488_35(int &) = Store[?] : &:r1488_29, r1488_34 -# 1488| r1488_36(glval) = FieldAddress[p] : mu1488_5 -# 1488| r1488_37(glval) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_38(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_37, ~m? -# 1488| r1488_39(glval) = CopyValue : r1488_38 -# 1488| r1488_40(glval) = FieldAddress[p] : r1488_39 -# 1488| r1488_41(int *) = Load[?] : &:r1488_40, ~m? -# 1488| mu1488_42(int *) = Store[?] : &:r1488_36, r1488_41 -# 1488| r1488_43(glval) = FieldAddress[xs] : mu1488_5 -# 1488| r1488_44(glval) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_45(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_44, ~m? -# 1488| r1488_46(glval) = CopyValue : r1488_45 -# 1488| r1488_47(glval) = FieldAddress[xs] : r1488_46 -# 1488| r1488_48(int[2]) = Load[?] : &:r1488_47, ~m? -# 1488| mu1488_49(int[2]) = Store[?] : &:r1488_43, r1488_48 -# 1488| r1488_50(glval) = FieldAddress[r_alt] : mu1488_5 -# 1488| r1488_51(glval) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_52(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_51, ~m? -# 1488| r1488_53(glval) = CopyValue : r1488_52 -# 1488| r1488_54(glval) = FieldAddress[r_alt] : r1488_53 -# 1488| r1488_55(int &) = Load[?] : &:r1488_54, ~m? -# 1488| mu1488_56(int &) = Store[?] : &:r1488_50, r1488_55 -# 1488| r1488_57(glval) = FieldAddress[m] : mu1488_5 -# 1488| r1488_58(glval) = VariableAddress[(unnamed parameter 0)] : -# 1488| r1488_59(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_58, ~m? -# 1488| r1488_60(glval) = CopyValue : r1488_59 -# 1488| r1488_61(glval) = FieldAddress[m] : r1488_60 -# 1488| r1488_62(StructuredBindingDataMemberMemberStruct) = Load[?] : &:r1488_61, ~m? -# 1488| mu1488_63(StructuredBindingDataMemberMemberStruct) = Store[?] : &:r1488_57, r1488_62 -# 1488| v1488_64(void) = NoOp : -# 1488| v1488_65(void) = ReturnIndirection[#this] : &:r1488_6, ~m? +# 1535| r1535_8(glval) = FieldAddress[i] : mu1535_5 +# 1535| r1535_9(glval) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_10(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_9, ~m? +# 1535| r1535_11(glval) = CopyValue : r1535_10 +# 1535| r1535_12(glval) = FieldAddress[i] : r1535_11 +# 1535| r1535_13(int) = Load[?] : &:r1535_12, ~m? +# 1535| mu1535_14(int) = Store[?] : &:r1535_8, r1535_13 +# 1535| r1535_15(glval) = FieldAddress[d] : mu1535_5 +# 1535| r1535_16(glval) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_17(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_16, ~m? +# 1535| r1535_18(glval) = CopyValue : r1535_17 +# 1535| r1535_19(glval) = FieldAddress[d] : r1535_18 +# 1535| r1535_20(double) = Load[?] : &:r1535_19, ~m? +# 1535| mu1535_21(double) = Store[?] : &:r1535_15, r1535_20 +# 1535| r1535_22(glval) = FieldAddress[b] : mu1535_5 +# 1535| r1535_23(glval) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_24(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_23, ~m? +# 1535| r1535_25(glval) = CopyValue : r1535_24 +# 1535| r1535_26(glval) = FieldAddress[b] : r1535_25 +# 1535| r1535_27(unsigned int) = Load[?] : &:r1535_26, ~m? +# 1535| mu1535_28(unsigned int) = Store[?] : &:r1535_22, r1535_27 +# 1535| r1535_29(glval) = FieldAddress[r] : mu1535_5 +# 1535| r1535_30(glval) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_31(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_30, ~m? +# 1535| r1535_32(glval) = CopyValue : r1535_31 +# 1535| r1535_33(glval) = FieldAddress[r] : r1535_32 +# 1535| r1535_34(int &) = Load[?] : &:r1535_33, ~m? +# 1535| mu1535_35(int &) = Store[?] : &:r1535_29, r1535_34 +# 1535| r1535_36(glval) = FieldAddress[p] : mu1535_5 +# 1535| r1535_37(glval) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_38(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_37, ~m? +# 1535| r1535_39(glval) = CopyValue : r1535_38 +# 1535| r1535_40(glval) = FieldAddress[p] : r1535_39 +# 1535| r1535_41(int *) = Load[?] : &:r1535_40, ~m? +# 1535| mu1535_42(int *) = Store[?] : &:r1535_36, r1535_41 +# 1535| r1535_43(glval) = FieldAddress[xs] : mu1535_5 +# 1535| r1535_44(glval) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_45(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_44, ~m? +# 1535| r1535_46(glval) = CopyValue : r1535_45 +# 1535| r1535_47(glval) = FieldAddress[xs] : r1535_46 +# 1535| r1535_48(int[2]) = Load[?] : &:r1535_47, ~m? +# 1535| mu1535_49(int[2]) = Store[?] : &:r1535_43, r1535_48 +# 1535| r1535_50(glval) = FieldAddress[r_alt] : mu1535_5 +# 1535| r1535_51(glval) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_52(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_51, ~m? +# 1535| r1535_53(glval) = CopyValue : r1535_52 +# 1535| r1535_54(glval) = FieldAddress[r_alt] : r1535_53 +# 1535| r1535_55(int &) = Load[?] : &:r1535_54, ~m? +# 1535| mu1535_56(int &) = Store[?] : &:r1535_50, r1535_55 +# 1535| r1535_57(glval) = FieldAddress[m] : mu1535_5 +# 1535| r1535_58(glval) = VariableAddress[(unnamed parameter 0)] : +# 1535| r1535_59(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1535_58, ~m? +# 1535| r1535_60(glval) = CopyValue : r1535_59 +# 1535| r1535_61(glval) = FieldAddress[m] : r1535_60 +# 1535| r1535_62(StructuredBindingDataMemberMemberStruct) = Load[?] : &:r1535_61, ~m? +# 1535| mu1535_63(StructuredBindingDataMemberMemberStruct) = Store[?] : &:r1535_57, r1535_62 +# 1535| v1535_64(void) = NoOp : +# 1535| v1535_65(void) = ReturnIndirection[#this] : &:r1535_6, ~m? #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 1488| v1488_66(void) = ReturnVoid : -# 1488| v1488_67(void) = AliasedUse : ~m? -# 1488| v1488_68(void) = ExitFunction : +# 1535| v1535_66(void) = ReturnVoid : +# 1535| v1535_67(void) = AliasedUse : ~m? +# 1535| v1535_68(void) = ExitFunction : -# 1501| void data_member_structured_binding() -# 1501| Block 0 -# 1501| v1501_1(void) = EnterFunction : -# 1501| mu1501_2(unknown) = AliasedDefinition : -# 1501| mu1501_3(unknown) = InitializeNonLocal : -# 1502| r1502_1(glval) = VariableAddress[s] : -# 1502| mu1502_2(StructuredBindingDataMemberStruct) = Uninitialized[s] : &:r1502_1 -# 1502| r1502_3(glval) = FunctionAddress[StructuredBindingDataMemberStruct] : -# 1502| v1502_4(void) = Call[StructuredBindingDataMemberStruct] : func:r1502_3, this:r1502_1 -# 1502| mu1502_5(unknown) = ^CallSideEffect : ~m? -# 1502| mu1502_6(StructuredBindingDataMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1502_1 -# 1505| r1505_1(glval) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_2(glval) = VariableAddress[s] : -# 1505| r1505_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1505_2, ~m? -# 1505| mu1505_4(StructuredBindingDataMemberStruct) = Store[(unnamed local variable)] : &:r1505_1, r1505_3 -# 1505| r1505_5(glval) = VariableAddress[i] : -# 1505| r1505_6(glval) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_7(glval) = FieldAddress[i] : r1505_6 -# 1505| mu1505_8(int &) = Store[i] : &:r1505_5, r1505_7 -# 1505| r1505_9(glval) = VariableAddress[d] : -# 1505| r1505_10(glval) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_11(glval) = FieldAddress[d] : r1505_10 -# 1505| mu1505_12(double &) = Store[d] : &:r1505_9, r1505_11 -# 1505| r1505_13(glval) = VariableAddress[b] : -# 1505| r1505_14(glval) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_15(glval) = FieldAddress[b] : r1505_14 -# 1505| mu1505_16(unsigned int &) = Store[b] : &:r1505_13, r1505_15 -# 1505| r1505_17(glval) = VariableAddress[r] : -# 1505| r1505_18(glval) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_19(glval) = FieldAddress[r] : r1505_18 -# 1505| r1505_20(int &) = Load[?] : &:r1505_19, ~m? -# 1505| r1505_21(glval) = CopyValue : r1505_20 -# 1505| mu1505_22(int &) = Store[r] : &:r1505_17, r1505_21 -# 1505| r1505_23(glval) = VariableAddress[p] : -# 1505| r1505_24(glval) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_25(glval) = FieldAddress[p] : r1505_24 -# 1505| mu1505_26(int *&) = Store[p] : &:r1505_23, r1505_25 -# 1505| r1505_27(glval) = VariableAddress[xs] : -# 1505| r1505_28(glval) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_29(glval) = FieldAddress[xs] : r1505_28 -# 1505| mu1505_30(int(&)[2]) = Store[xs] : &:r1505_27, r1505_29 -# 1505| r1505_31(glval) = VariableAddress[r_alt] : -# 1505| r1505_32(glval) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_33(glval) = FieldAddress[r_alt] : r1505_32 -# 1505| r1505_34(int &) = Load[?] : &:r1505_33, ~m? -# 1505| r1505_35(glval) = CopyValue : r1505_34 -# 1505| mu1505_36(int &) = Store[r_alt] : &:r1505_31, r1505_35 -# 1505| r1505_37(glval) = VariableAddress[m] : -# 1505| r1505_38(glval) = VariableAddress[(unnamed local variable)] : -# 1505| r1505_39(glval) = FieldAddress[m] : r1505_38 -# 1505| mu1505_40(StructuredBindingDataMemberMemberStruct &) = Store[m] : &:r1505_37, r1505_39 -# 1506| r1506_1(double) = Constant[4.0] : -# 1506| r1506_2(glval) = VariableAddress[d] : -# 1506| r1506_3(double &) = Load[d] : &:r1506_2, ~m? -# 1506| mu1506_4(double) = Store[?] : &:r1506_3, r1506_1 -# 1507| r1507_1(glval) = VariableAddress[rd] : -# 1507| r1507_2(glval) = VariableAddress[d] : -# 1507| r1507_3(double &) = Load[d] : &:r1507_2, ~m? -# 1507| r1507_4(double &) = CopyValue : r1507_3 -# 1507| mu1507_5(double &) = Store[rd] : &:r1507_1, r1507_4 -# 1508| r1508_1(glval) = VariableAddress[v] : -# 1508| r1508_2(glval) = VariableAddress[i] : -# 1508| r1508_3(int &) = Load[i] : &:r1508_2, ~m? -# 1508| r1508_4(int) = Load[?] : &:r1508_3, ~m? -# 1508| mu1508_5(int) = Store[v] : &:r1508_1, r1508_4 -# 1509| r1509_1(int) = Constant[5] : -# 1509| r1509_2(glval) = VariableAddress[r] : -# 1509| r1509_3(int &) = Load[r] : &:r1509_2, ~m? -# 1509| mu1509_4(int) = Store[?] : &:r1509_3, r1509_1 -# 1510| r1510_1(int) = Constant[6] : -# 1510| r1510_2(glval) = VariableAddress[p] : -# 1510| r1510_3(int *&) = Load[p] : &:r1510_2, ~m? -# 1510| r1510_4(int *) = Load[?] : &:r1510_3, ~m? -# 1510| r1510_5(glval) = CopyValue : r1510_4 -# 1510| mu1510_6(int) = Store[?] : &:r1510_5, r1510_1 -# 1511| r1511_1(glval) = VariableAddress[rr] : -# 1511| r1511_2(glval) = VariableAddress[r] : -# 1511| r1511_3(int &) = Load[r] : &:r1511_2, ~m? -# 1511| r1511_4(int &) = CopyValue : r1511_3 -# 1511| mu1511_5(int &) = Store[rr] : &:r1511_1, r1511_4 -# 1512| r1512_1(glval) = VariableAddress[pr] : -# 1512| r1512_2(glval) = VariableAddress[r] : -# 1512| r1512_3(int &) = Load[r] : &:r1512_2, ~m? -# 1512| r1512_4(int *) = CopyValue : r1512_3 -# 1512| mu1512_5(int *) = Store[pr] : &:r1512_1, r1512_4 -# 1513| r1513_1(glval) = VariableAddress[w] : -# 1513| r1513_2(glval) = VariableAddress[r] : -# 1513| r1513_3(int &) = Load[r] : &:r1513_2, ~m? -# 1513| r1513_4(int) = Load[?] : &:r1513_3, ~m? -# 1513| mu1513_5(int) = Store[w] : &:r1513_1, r1513_4 -# 1517| r1517_1(glval) = VariableAddress[unnamed_local_variable] : -# 1517| r1517_2(glval) = VariableAddress[s] : -# 1517| r1517_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1517_2, ~m? -# 1517| mu1517_4(StructuredBindingDataMemberStruct) = Store[unnamed_local_variable] : &:r1517_1, r1517_3 -# 1518| r1518_1(glval) = VariableAddress[i] : -# 1518| r1518_2(glval) = VariableAddress[unnamed_local_variable] : -# 1518| r1518_3(glval) = FieldAddress[i] : r1518_2 -# 1518| r1518_4(int &) = CopyValue : r1518_3 -# 1518| mu1518_5(int &) = Store[i] : &:r1518_1, r1518_4 -# 1519| r1519_1(glval) = VariableAddress[d] : -# 1519| r1519_2(glval) = VariableAddress[unnamed_local_variable] : -# 1519| r1519_3(glval) = FieldAddress[d] : r1519_2 -# 1519| r1519_4(double &) = CopyValue : r1519_3 -# 1519| mu1519_5(double &) = Store[d] : &:r1519_1, r1519_4 -# 1521| r1521_1(glval) = VariableAddress[r] : -# 1521| r1521_2(glval) = VariableAddress[unnamed_local_variable] : -# 1521| r1521_3(glval) = FieldAddress[r] : r1521_2 -# 1521| r1521_4(int &) = Load[?] : &:r1521_3, ~m? -# 1521| r1521_5(glval) = CopyValue : r1521_4 -# 1521| r1521_6(int &) = CopyValue : r1521_5 -# 1521| mu1521_7(int &) = Store[r] : &:r1521_1, r1521_6 -# 1522| r1522_1(glval) = VariableAddress[p] : -# 1522| r1522_2(glval) = VariableAddress[unnamed_local_variable] : -# 1522| r1522_3(glval) = FieldAddress[p] : r1522_2 -# 1522| r1522_4(int *&) = CopyValue : r1522_3 -# 1522| mu1522_5(int *&) = Store[p] : &:r1522_1, r1522_4 -# 1523| r1523_1(double) = Constant[4.0] : -# 1523| r1523_2(glval) = VariableAddress[d] : -# 1523| r1523_3(double &) = Load[d] : &:r1523_2, ~m? -# 1523| r1523_4(glval) = CopyValue : r1523_3 -# 1523| mu1523_5(double) = Store[?] : &:r1523_4, r1523_1 -# 1524| r1524_1(glval) = VariableAddress[rd] : -# 1524| r1524_2(glval) = VariableAddress[d] : -# 1524| r1524_3(double &) = Load[d] : &:r1524_2, ~m? -# 1524| r1524_4(glval) = CopyValue : r1524_3 -# 1524| r1524_5(double &) = CopyValue : r1524_4 -# 1524| mu1524_6(double &) = Store[rd] : &:r1524_1, r1524_5 -# 1525| r1525_1(glval) = VariableAddress[v] : -# 1525| r1525_2(glval) = VariableAddress[i] : -# 1525| r1525_3(int &) = Load[i] : &:r1525_2, ~m? -# 1525| r1525_4(int) = Load[?] : &:r1525_3, ~m? -# 1525| mu1525_5(int) = Store[v] : &:r1525_1, r1525_4 -# 1526| r1526_1(int) = Constant[5] : -# 1526| r1526_2(glval) = VariableAddress[r] : -# 1526| r1526_3(int &) = Load[r] : &:r1526_2, ~m? -# 1526| r1526_4(glval) = CopyValue : r1526_3 -# 1526| mu1526_5(int) = Store[?] : &:r1526_4, r1526_1 -# 1527| r1527_1(int) = Constant[6] : -# 1527| r1527_2(glval) = VariableAddress[p] : -# 1527| r1527_3(int *&) = Load[p] : &:r1527_2, ~m? -# 1527| r1527_4(int *) = Load[?] : &:r1527_3, ~m? -# 1527| r1527_5(glval) = CopyValue : r1527_4 -# 1527| mu1527_6(int) = Store[?] : &:r1527_5, r1527_1 -# 1528| r1528_1(glval) = VariableAddress[rr] : -# 1528| r1528_2(glval) = VariableAddress[r] : -# 1528| r1528_3(int &) = Load[r] : &:r1528_2, ~m? -# 1528| r1528_4(glval) = CopyValue : r1528_3 -# 1528| r1528_5(int &) = CopyValue : r1528_4 -# 1528| mu1528_6(int &) = Store[rr] : &:r1528_1, r1528_5 -# 1529| r1529_1(glval) = VariableAddress[pr] : -# 1529| r1529_2(glval) = VariableAddress[r] : -# 1529| r1529_3(int &) = Load[r] : &:r1529_2, ~m? -# 1529| r1529_4(glval) = CopyValue : r1529_3 -# 1529| r1529_5(int *) = CopyValue : r1529_4 -# 1529| mu1529_6(int *) = Store[pr] : &:r1529_1, r1529_5 -# 1530| r1530_1(glval) = VariableAddress[w] : -# 1530| r1530_2(glval) = VariableAddress[r] : -# 1530| r1530_3(int &) = Load[r] : &:r1530_2, ~m? -# 1530| r1530_4(int) = Load[?] : &:r1530_3, ~m? -# 1530| mu1530_5(int) = Store[w] : &:r1530_1, r1530_4 -# 1532| v1532_1(void) = NoOp : -# 1501| v1501_4(void) = ReturnVoid : -# 1501| v1501_5(void) = AliasedUse : ~m? -# 1501| v1501_6(void) = ExitFunction : +# 1548| void data_member_structured_binding() +# 1548| Block 0 +# 1548| v1548_1(void) = EnterFunction : +# 1548| mu1548_2(unknown) = AliasedDefinition : +# 1548| mu1548_3(unknown) = InitializeNonLocal : +# 1549| r1549_1(glval) = VariableAddress[s] : +# 1549| mu1549_2(StructuredBindingDataMemberStruct) = Uninitialized[s] : &:r1549_1 +# 1549| r1549_3(glval) = FunctionAddress[StructuredBindingDataMemberStruct] : +# 1549| v1549_4(void) = Call[StructuredBindingDataMemberStruct] : func:r1549_3, this:r1549_1 +# 1549| mu1549_5(unknown) = ^CallSideEffect : ~m? +# 1549| mu1549_6(StructuredBindingDataMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1549_1 +# 1552| r1552_1(glval) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_2(glval) = VariableAddress[s] : +# 1552| r1552_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1552_2, ~m? +# 1552| mu1552_4(StructuredBindingDataMemberStruct) = Store[(unnamed local variable)] : &:r1552_1, r1552_3 +# 1552| r1552_5(glval) = VariableAddress[i] : +# 1552| r1552_6(glval) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_7(glval) = FieldAddress[i] : r1552_6 +# 1552| mu1552_8(int &) = Store[i] : &:r1552_5, r1552_7 +# 1552| r1552_9(glval) = VariableAddress[d] : +# 1552| r1552_10(glval) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_11(glval) = FieldAddress[d] : r1552_10 +# 1552| mu1552_12(double &) = Store[d] : &:r1552_9, r1552_11 +# 1552| r1552_13(glval) = VariableAddress[b] : +# 1552| r1552_14(glval) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_15(glval) = FieldAddress[b] : r1552_14 +# 1552| mu1552_16(unsigned int &) = Store[b] : &:r1552_13, r1552_15 +# 1552| r1552_17(glval) = VariableAddress[r] : +# 1552| r1552_18(glval) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_19(glval) = FieldAddress[r] : r1552_18 +# 1552| r1552_20(int &) = Load[?] : &:r1552_19, ~m? +# 1552| r1552_21(glval) = CopyValue : r1552_20 +# 1552| mu1552_22(int &) = Store[r] : &:r1552_17, r1552_21 +# 1552| r1552_23(glval) = VariableAddress[p] : +# 1552| r1552_24(glval) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_25(glval) = FieldAddress[p] : r1552_24 +# 1552| mu1552_26(int *&) = Store[p] : &:r1552_23, r1552_25 +# 1552| r1552_27(glval) = VariableAddress[xs] : +# 1552| r1552_28(glval) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_29(glval) = FieldAddress[xs] : r1552_28 +# 1552| mu1552_30(int(&)[2]) = Store[xs] : &:r1552_27, r1552_29 +# 1552| r1552_31(glval) = VariableAddress[r_alt] : +# 1552| r1552_32(glval) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_33(glval) = FieldAddress[r_alt] : r1552_32 +# 1552| r1552_34(int &) = Load[?] : &:r1552_33, ~m? +# 1552| r1552_35(glval) = CopyValue : r1552_34 +# 1552| mu1552_36(int &) = Store[r_alt] : &:r1552_31, r1552_35 +# 1552| r1552_37(glval) = VariableAddress[m] : +# 1552| r1552_38(glval) = VariableAddress[(unnamed local variable)] : +# 1552| r1552_39(glval) = FieldAddress[m] : r1552_38 +# 1552| mu1552_40(StructuredBindingDataMemberMemberStruct &) = Store[m] : &:r1552_37, r1552_39 +# 1553| r1553_1(double) = Constant[4.0] : +# 1553| r1553_2(glval) = VariableAddress[d] : +# 1553| r1553_3(double &) = Load[d] : &:r1553_2, ~m? +# 1553| mu1553_4(double) = Store[?] : &:r1553_3, r1553_1 +# 1554| r1554_1(glval) = VariableAddress[rd] : +# 1554| r1554_2(glval) = VariableAddress[d] : +# 1554| r1554_3(double &) = Load[d] : &:r1554_2, ~m? +# 1554| r1554_4(double &) = CopyValue : r1554_3 +# 1554| mu1554_5(double &) = Store[rd] : &:r1554_1, r1554_4 +# 1555| r1555_1(glval) = VariableAddress[v] : +# 1555| r1555_2(glval) = VariableAddress[i] : +# 1555| r1555_3(int &) = Load[i] : &:r1555_2, ~m? +# 1555| r1555_4(int) = Load[?] : &:r1555_3, ~m? +# 1555| mu1555_5(int) = Store[v] : &:r1555_1, r1555_4 +# 1556| r1556_1(int) = Constant[5] : +# 1556| r1556_2(glval) = VariableAddress[r] : +# 1556| r1556_3(int &) = Load[r] : &:r1556_2, ~m? +# 1556| mu1556_4(int) = Store[?] : &:r1556_3, r1556_1 +# 1557| r1557_1(int) = Constant[6] : +# 1557| r1557_2(glval) = VariableAddress[p] : +# 1557| r1557_3(int *&) = Load[p] : &:r1557_2, ~m? +# 1557| r1557_4(int *) = Load[?] : &:r1557_3, ~m? +# 1557| r1557_5(glval) = CopyValue : r1557_4 +# 1557| mu1557_6(int) = Store[?] : &:r1557_5, r1557_1 +# 1558| r1558_1(glval) = VariableAddress[rr] : +# 1558| r1558_2(glval) = VariableAddress[r] : +# 1558| r1558_3(int &) = Load[r] : &:r1558_2, ~m? +# 1558| r1558_4(int &) = CopyValue : r1558_3 +# 1558| mu1558_5(int &) = Store[rr] : &:r1558_1, r1558_4 +# 1559| r1559_1(glval) = VariableAddress[pr] : +# 1559| r1559_2(glval) = VariableAddress[r] : +# 1559| r1559_3(int &) = Load[r] : &:r1559_2, ~m? +# 1559| r1559_4(int *) = CopyValue : r1559_3 +# 1559| mu1559_5(int *) = Store[pr] : &:r1559_1, r1559_4 +# 1560| r1560_1(glval) = VariableAddress[w] : +# 1560| r1560_2(glval) = VariableAddress[r] : +# 1560| r1560_3(int &) = Load[r] : &:r1560_2, ~m? +# 1560| r1560_4(int) = Load[?] : &:r1560_3, ~m? +# 1560| mu1560_5(int) = Store[w] : &:r1560_1, r1560_4 +# 1564| r1564_1(glval) = VariableAddress[unnamed_local_variable] : +# 1564| r1564_2(glval) = VariableAddress[s] : +# 1564| r1564_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1564_2, ~m? +# 1564| mu1564_4(StructuredBindingDataMemberStruct) = Store[unnamed_local_variable] : &:r1564_1, r1564_3 +# 1565| r1565_1(glval) = VariableAddress[i] : +# 1565| r1565_2(glval) = VariableAddress[unnamed_local_variable] : +# 1565| r1565_3(glval) = FieldAddress[i] : r1565_2 +# 1565| r1565_4(int &) = CopyValue : r1565_3 +# 1565| mu1565_5(int &) = Store[i] : &:r1565_1, r1565_4 +# 1566| r1566_1(glval) = VariableAddress[d] : +# 1566| r1566_2(glval) = VariableAddress[unnamed_local_variable] : +# 1566| r1566_3(glval) = FieldAddress[d] : r1566_2 +# 1566| r1566_4(double &) = CopyValue : r1566_3 +# 1566| mu1566_5(double &) = Store[d] : &:r1566_1, r1566_4 +# 1568| r1568_1(glval) = VariableAddress[r] : +# 1568| r1568_2(glval) = VariableAddress[unnamed_local_variable] : +# 1568| r1568_3(glval) = FieldAddress[r] : r1568_2 +# 1568| r1568_4(int &) = Load[?] : &:r1568_3, ~m? +# 1568| r1568_5(glval) = CopyValue : r1568_4 +# 1568| r1568_6(int &) = CopyValue : r1568_5 +# 1568| mu1568_7(int &) = Store[r] : &:r1568_1, r1568_6 +# 1569| r1569_1(glval) = VariableAddress[p] : +# 1569| r1569_2(glval) = VariableAddress[unnamed_local_variable] : +# 1569| r1569_3(glval) = FieldAddress[p] : r1569_2 +# 1569| r1569_4(int *&) = CopyValue : r1569_3 +# 1569| mu1569_5(int *&) = Store[p] : &:r1569_1, r1569_4 +# 1570| r1570_1(double) = Constant[4.0] : +# 1570| r1570_2(glval) = VariableAddress[d] : +# 1570| r1570_3(double &) = Load[d] : &:r1570_2, ~m? +# 1570| r1570_4(glval) = CopyValue : r1570_3 +# 1570| mu1570_5(double) = Store[?] : &:r1570_4, r1570_1 +# 1571| r1571_1(glval) = VariableAddress[rd] : +# 1571| r1571_2(glval) = VariableAddress[d] : +# 1571| r1571_3(double &) = Load[d] : &:r1571_2, ~m? +# 1571| r1571_4(glval) = CopyValue : r1571_3 +# 1571| r1571_5(double &) = CopyValue : r1571_4 +# 1571| mu1571_6(double &) = Store[rd] : &:r1571_1, r1571_5 +# 1572| r1572_1(glval) = VariableAddress[v] : +# 1572| r1572_2(glval) = VariableAddress[i] : +# 1572| r1572_3(int &) = Load[i] : &:r1572_2, ~m? +# 1572| r1572_4(int) = Load[?] : &:r1572_3, ~m? +# 1572| mu1572_5(int) = Store[v] : &:r1572_1, r1572_4 +# 1573| r1573_1(int) = Constant[5] : +# 1573| r1573_2(glval) = VariableAddress[r] : +# 1573| r1573_3(int &) = Load[r] : &:r1573_2, ~m? +# 1573| r1573_4(glval) = CopyValue : r1573_3 +# 1573| mu1573_5(int) = Store[?] : &:r1573_4, r1573_1 +# 1574| r1574_1(int) = Constant[6] : +# 1574| r1574_2(glval) = VariableAddress[p] : +# 1574| r1574_3(int *&) = Load[p] : &:r1574_2, ~m? +# 1574| r1574_4(int *) = Load[?] : &:r1574_3, ~m? +# 1574| r1574_5(glval) = CopyValue : r1574_4 +# 1574| mu1574_6(int) = Store[?] : &:r1574_5, r1574_1 +# 1575| r1575_1(glval) = VariableAddress[rr] : +# 1575| r1575_2(glval) = VariableAddress[r] : +# 1575| r1575_3(int &) = Load[r] : &:r1575_2, ~m? +# 1575| r1575_4(glval) = CopyValue : r1575_3 +# 1575| r1575_5(int &) = CopyValue : r1575_4 +# 1575| mu1575_6(int &) = Store[rr] : &:r1575_1, r1575_5 +# 1576| r1576_1(glval) = VariableAddress[pr] : +# 1576| r1576_2(glval) = VariableAddress[r] : +# 1576| r1576_3(int &) = Load[r] : &:r1576_2, ~m? +# 1576| r1576_4(glval) = CopyValue : r1576_3 +# 1576| r1576_5(int *) = CopyValue : r1576_4 +# 1576| mu1576_6(int *) = Store[pr] : &:r1576_1, r1576_5 +# 1577| r1577_1(glval) = VariableAddress[w] : +# 1577| r1577_2(glval) = VariableAddress[r] : +# 1577| r1577_3(int &) = Load[r] : &:r1577_2, ~m? +# 1577| r1577_4(int) = Load[?] : &:r1577_3, ~m? +# 1577| mu1577_5(int) = Store[w] : &:r1577_1, r1577_4 +# 1579| v1579_1(void) = NoOp : +# 1548| v1548_4(void) = ReturnVoid : +# 1548| v1548_5(void) = AliasedUse : ~m? +# 1548| v1548_6(void) = ExitFunction : -# 1541| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet() -# 1541| Block 0 -# 1541| v1541_1(void) = EnterFunction : -# 1541| mu1541_2(unknown) = AliasedDefinition : -# 1541| mu1541_3(unknown) = InitializeNonLocal : -# 1541| r1541_4(glval) = VariableAddress[#this] : -# 1541| mu1541_5(glval) = InitializeParameter[#this] : &:r1541_4 -# 1541| r1541_6(glval) = Load[#this] : &:r1541_4, ~m? -# 1541| mu1541_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1541_6 -# 1541| v1541_8(void) = NoOp : -# 1541| v1541_9(void) = ReturnIndirection[#this] : &:r1541_6, ~m? -# 1541| v1541_10(void) = ReturnVoid : -# 1541| v1541_11(void) = AliasedUse : ~m? -# 1541| v1541_12(void) = ExitFunction : +# 1588| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet() +# 1588| Block 0 +# 1588| v1588_1(void) = EnterFunction : +# 1588| mu1588_2(unknown) = AliasedDefinition : +# 1588| mu1588_3(unknown) = InitializeNonLocal : +# 1588| r1588_4(glval) = VariableAddress[#this] : +# 1588| mu1588_5(glval) = InitializeParameter[#this] : &:r1588_4 +# 1588| r1588_6(glval) = Load[#this] : &:r1588_4, ~m? +# 1588| mu1588_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1588_6 +# 1588| v1588_8(void) = NoOp : +# 1588| v1588_9(void) = ReturnIndirection[#this] : &:r1588_6, ~m? +# 1588| v1588_10(void) = ReturnVoid : +# 1588| v1588_11(void) = AliasedUse : ~m? +# 1588| v1588_12(void) = ExitFunction : -# 1541| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet const&) -# 1541| Block 0 -# 1541| v1541_1(void) = EnterFunction : -# 1541| mu1541_2(unknown) = AliasedDefinition : -# 1541| mu1541_3(unknown) = InitializeNonLocal : -# 1541| r1541_4(glval) = VariableAddress[#this] : -# 1541| mu1541_5(glval) = InitializeParameter[#this] : &:r1541_4 -# 1541| r1541_6(glval) = Load[#this] : &:r1541_4, ~m? -# 1541| mu1541_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1541_6 +# 1588| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet const&) +# 1588| Block 0 +# 1588| v1588_1(void) = EnterFunction : +# 1588| mu1588_2(unknown) = AliasedDefinition : +# 1588| mu1588_3(unknown) = InitializeNonLocal : +# 1588| r1588_4(glval) = VariableAddress[#this] : +# 1588| mu1588_5(glval) = InitializeParameter[#this] : &:r1588_4 +# 1588| r1588_6(glval) = Load[#this] : &:r1588_4, ~m? +# 1588| mu1588_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1588_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(StructuredBindingTupleRefGet &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1541| r1541_8(glval) = FieldAddress[i] : mu1541_5 -# 1541| r1541_9(glval) = VariableAddress[(unnamed parameter 0)] : -# 1541| r1541_10(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_9, ~m? -# 1541| r1541_11(glval) = CopyValue : r1541_10 -# 1541| r1541_12(glval) = FieldAddress[i] : r1541_11 -# 1541| r1541_13(int) = Load[?] : &:r1541_12, ~m? -# 1541| mu1541_14(int) = Store[?] : &:r1541_8, r1541_13 -# 1541| r1541_15(glval) = FieldAddress[d] : mu1541_5 -# 1541| r1541_16(glval) = VariableAddress[(unnamed parameter 0)] : -# 1541| r1541_17(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_16, ~m? -# 1541| r1541_18(glval) = CopyValue : r1541_17 -# 1541| r1541_19(glval) = FieldAddress[d] : r1541_18 -# 1541| r1541_20(double) = Load[?] : &:r1541_19, ~m? -# 1541| mu1541_21(double) = Store[?] : &:r1541_15, r1541_20 -# 1541| r1541_22(glval) = FieldAddress[r] : mu1541_5 -# 1541| r1541_23(glval) = VariableAddress[(unnamed parameter 0)] : -# 1541| r1541_24(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_23, ~m? -# 1541| r1541_25(glval) = CopyValue : r1541_24 -# 1541| r1541_26(glval) = FieldAddress[r] : r1541_25 -# 1541| r1541_27(int &) = Load[?] : &:r1541_26, ~m? -# 1541| mu1541_28(int &) = Store[?] : &:r1541_22, r1541_27 -# 1541| v1541_29(void) = NoOp : -# 1541| v1541_30(void) = ReturnIndirection[#this] : &:r1541_6, ~m? +# 1588| r1588_8(glval) = FieldAddress[i] : mu1588_5 +# 1588| r1588_9(glval) = VariableAddress[(unnamed parameter 0)] : +# 1588| r1588_10(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1588_9, ~m? +# 1588| r1588_11(glval) = CopyValue : r1588_10 +# 1588| r1588_12(glval) = FieldAddress[i] : r1588_11 +# 1588| r1588_13(int) = Load[?] : &:r1588_12, ~m? +# 1588| mu1588_14(int) = Store[?] : &:r1588_8, r1588_13 +# 1588| r1588_15(glval) = FieldAddress[d] : mu1588_5 +# 1588| r1588_16(glval) = VariableAddress[(unnamed parameter 0)] : +# 1588| r1588_17(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1588_16, ~m? +# 1588| r1588_18(glval) = CopyValue : r1588_17 +# 1588| r1588_19(glval) = FieldAddress[d] : r1588_18 +# 1588| r1588_20(double) = Load[?] : &:r1588_19, ~m? +# 1588| mu1588_21(double) = Store[?] : &:r1588_15, r1588_20 +# 1588| r1588_22(glval) = FieldAddress[r] : mu1588_5 +# 1588| r1588_23(glval) = VariableAddress[(unnamed parameter 0)] : +# 1588| r1588_24(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1588_23, ~m? +# 1588| r1588_25(glval) = CopyValue : r1588_24 +# 1588| r1588_26(glval) = FieldAddress[r] : r1588_25 +# 1588| r1588_27(int &) = Load[?] : &:r1588_26, ~m? +# 1588| mu1588_28(int &) = Store[?] : &:r1588_22, r1588_27 +# 1588| v1588_29(void) = NoOp : +# 1588| v1588_30(void) = ReturnIndirection[#this] : &:r1588_6, ~m? #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 1541| v1541_31(void) = ReturnVoid : -# 1541| v1541_32(void) = AliasedUse : ~m? -# 1541| v1541_33(void) = ExitFunction : +# 1588| v1588_31(void) = ReturnVoid : +# 1588| v1588_32(void) = AliasedUse : ~m? +# 1588| v1588_33(void) = ExitFunction : -# 1569| std::tuple_element::type& StructuredBindingTupleRefGet::get() -# 1569| Block 0 -# 1569| v1569_1(void) = EnterFunction : -# 1569| mu1569_2(unknown) = AliasedDefinition : -# 1569| mu1569_3(unknown) = InitializeNonLocal : -# 1569| r1569_4(glval) = VariableAddress[#this] : -# 1569| mu1569_5(glval) = InitializeParameter[#this] : &:r1569_4 -# 1569| r1569_6(glval) = Load[#this] : &:r1569_4, ~m? -# 1569| mu1569_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1569_6 -# 1570| r1570_1(glval) = VariableAddress[#return] : -# 1570| r1570_2(glval) = VariableAddress[#this] : -# 1570| r1570_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1570_2, ~m? -# 1570| r1570_4(glval) = FieldAddress[i] : r1570_3 -#-----| r0_1(int &) = CopyValue : r1570_4 -#-----| mu0_2(int &) = Store[#return] : &:r1570_1, r0_1 -# 1569| v1569_8(void) = ReturnIndirection[#this] : &:r1569_6, ~m? -# 1569| r1569_9(glval) = VariableAddress[#return] : -# 1569| v1569_10(void) = ReturnValue : &:r1569_9, ~m? -# 1569| v1569_11(void) = AliasedUse : ~m? -# 1569| v1569_12(void) = ExitFunction : +# 1616| std::tuple_element::type& StructuredBindingTupleRefGet::get() +# 1616| Block 0 +# 1616| v1616_1(void) = EnterFunction : +# 1616| mu1616_2(unknown) = AliasedDefinition : +# 1616| mu1616_3(unknown) = InitializeNonLocal : +# 1616| r1616_4(glval) = VariableAddress[#this] : +# 1616| mu1616_5(glval) = InitializeParameter[#this] : &:r1616_4 +# 1616| r1616_6(glval) = Load[#this] : &:r1616_4, ~m? +# 1616| mu1616_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1616_6 +# 1617| r1617_1(glval) = VariableAddress[#return] : +# 1617| r1617_2(glval) = VariableAddress[#this] : +# 1617| r1617_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1617_2, ~m? +# 1617| r1617_4(glval) = FieldAddress[i] : r1617_3 +#-----| r0_1(int &) = CopyValue : r1617_4 +#-----| mu0_2(int &) = Store[#return] : &:r1617_1, r0_1 +# 1616| v1616_8(void) = ReturnIndirection[#this] : &:r1616_6, ~m? +# 1616| r1616_9(glval) = VariableAddress[#return] : +# 1616| v1616_10(void) = ReturnValue : &:r1616_9, ~m? +# 1616| v1616_11(void) = AliasedUse : ~m? +# 1616| v1616_12(void) = ExitFunction : -# 1573| std::tuple_element::type& StructuredBindingTupleRefGet::get() -# 1573| Block 0 -# 1573| v1573_1(void) = EnterFunction : -# 1573| mu1573_2(unknown) = AliasedDefinition : -# 1573| mu1573_3(unknown) = InitializeNonLocal : -# 1573| r1573_4(glval) = VariableAddress[#this] : -# 1573| mu1573_5(glval) = InitializeParameter[#this] : &:r1573_4 -# 1573| r1573_6(glval) = Load[#this] : &:r1573_4, ~m? -# 1573| mu1573_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1573_6 -# 1574| r1574_1(glval) = VariableAddress[#return] : -# 1574| r1574_2(glval) = VariableAddress[#this] : -# 1574| r1574_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1574_2, ~m? -# 1574| r1574_4(glval) = FieldAddress[d] : r1574_3 -#-----| r0_1(double &) = CopyValue : r1574_4 -#-----| mu0_2(double &) = Store[#return] : &:r1574_1, r0_1 -# 1573| v1573_8(void) = ReturnIndirection[#this] : &:r1573_6, ~m? -# 1573| r1573_9(glval) = VariableAddress[#return] : -# 1573| v1573_10(void) = ReturnValue : &:r1573_9, ~m? -# 1573| v1573_11(void) = AliasedUse : ~m? -# 1573| v1573_12(void) = ExitFunction : +# 1620| std::tuple_element::type& StructuredBindingTupleRefGet::get() +# 1620| Block 0 +# 1620| v1620_1(void) = EnterFunction : +# 1620| mu1620_2(unknown) = AliasedDefinition : +# 1620| mu1620_3(unknown) = InitializeNonLocal : +# 1620| r1620_4(glval) = VariableAddress[#this] : +# 1620| mu1620_5(glval) = InitializeParameter[#this] : &:r1620_4 +# 1620| r1620_6(glval) = Load[#this] : &:r1620_4, ~m? +# 1620| mu1620_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1620_6 +# 1621| r1621_1(glval) = VariableAddress[#return] : +# 1621| r1621_2(glval) = VariableAddress[#this] : +# 1621| r1621_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1621_2, ~m? +# 1621| r1621_4(glval) = FieldAddress[d] : r1621_3 +#-----| r0_1(double &) = CopyValue : r1621_4 +#-----| mu0_2(double &) = Store[#return] : &:r1621_1, r0_1 +# 1620| v1620_8(void) = ReturnIndirection[#this] : &:r1620_6, ~m? +# 1620| r1620_9(glval) = VariableAddress[#return] : +# 1620| v1620_10(void) = ReturnValue : &:r1620_9, ~m? +# 1620| v1620_11(void) = AliasedUse : ~m? +# 1620| v1620_12(void) = ExitFunction : -# 1577| std::tuple_element::type StructuredBindingTupleRefGet::get() -# 1577| Block 0 -# 1577| v1577_1(void) = EnterFunction : -# 1577| mu1577_2(unknown) = AliasedDefinition : -# 1577| mu1577_3(unknown) = InitializeNonLocal : -# 1577| r1577_4(glval) = VariableAddress[#this] : -# 1577| mu1577_5(glval) = InitializeParameter[#this] : &:r1577_4 -# 1577| r1577_6(glval) = Load[#this] : &:r1577_4, ~m? -# 1577| mu1577_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1577_6 -# 1578| r1578_1(glval) = VariableAddress[#return] : -# 1578| r1578_2(glval) = VariableAddress[#this] : -# 1578| r1578_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1578_2, ~m? -# 1578| r1578_4(glval) = FieldAddress[r] : r1578_3 -# 1578| r1578_5(int &) = Load[?] : &:r1578_4, ~m? -# 1578| r1578_6(glval) = CopyValue : r1578_5 -# 1578| r1578_7(int &) = CopyValue : r1578_6 -# 1578| mu1578_8(int &) = Store[#return] : &:r1578_1, r1578_7 -# 1577| v1577_8(void) = ReturnIndirection[#this] : &:r1577_6, ~m? -# 1577| r1577_9(glval) = VariableAddress[#return] : -# 1577| v1577_10(void) = ReturnValue : &:r1577_9, ~m? -# 1577| v1577_11(void) = AliasedUse : ~m? -# 1577| v1577_12(void) = ExitFunction : +# 1624| std::tuple_element::type StructuredBindingTupleRefGet::get() +# 1624| Block 0 +# 1624| v1624_1(void) = EnterFunction : +# 1624| mu1624_2(unknown) = AliasedDefinition : +# 1624| mu1624_3(unknown) = InitializeNonLocal : +# 1624| r1624_4(glval) = VariableAddress[#this] : +# 1624| mu1624_5(glval) = InitializeParameter[#this] : &:r1624_4 +# 1624| r1624_6(glval) = Load[#this] : &:r1624_4, ~m? +# 1624| mu1624_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1624_6 +# 1625| r1625_1(glval) = VariableAddress[#return] : +# 1625| r1625_2(glval) = VariableAddress[#this] : +# 1625| r1625_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1625_2, ~m? +# 1625| r1625_4(glval) = FieldAddress[r] : r1625_3 +# 1625| r1625_5(int &) = Load[?] : &:r1625_4, ~m? +# 1625| r1625_6(glval) = CopyValue : r1625_5 +# 1625| r1625_7(int &) = CopyValue : r1625_6 +# 1625| mu1625_8(int &) = Store[#return] : &:r1625_1, r1625_7 +# 1624| v1624_8(void) = ReturnIndirection[#this] : &:r1624_6, ~m? +# 1624| r1624_9(glval) = VariableAddress[#return] : +# 1624| v1624_10(void) = ReturnValue : &:r1624_9, ~m? +# 1624| v1624_11(void) = AliasedUse : ~m? +# 1624| v1624_12(void) = ExitFunction : -# 1581| void tuple_structured_binding_ref_get() -# 1581| Block 0 -# 1581| v1581_1(void) = EnterFunction : -# 1581| mu1581_2(unknown) = AliasedDefinition : -# 1581| mu1581_3(unknown) = InitializeNonLocal : -# 1582| r1582_1(glval) = VariableAddress[t] : -# 1582| mu1582_2(StructuredBindingTupleRefGet) = Uninitialized[t] : &:r1582_1 -# 1582| r1582_3(glval) = FunctionAddress[StructuredBindingTupleRefGet] : -# 1582| v1582_4(void) = Call[StructuredBindingTupleRefGet] : func:r1582_3, this:r1582_1 -# 1582| mu1582_5(unknown) = ^CallSideEffect : ~m? -# 1582| mu1582_6(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1582_1 -# 1585| r1585_1(glval) = VariableAddress[(unnamed local variable)] : -# 1585| r1585_2(glval) = VariableAddress[t] : -# 1585| r1585_3(StructuredBindingTupleRefGet) = Load[t] : &:r1585_2, ~m? -# 1585| mu1585_4(StructuredBindingTupleRefGet) = Store[(unnamed local variable)] : &:r1585_1, r1585_3 -# 1585| r1585_5(glval) = VariableAddress[i] : -# 1585| r1585_6(glval) = VariableAddress[(unnamed local variable)] : -# 1585| r1585_7(glval) = FunctionAddress[get] : -# 1585| r1585_8(int &) = Call[get] : func:r1585_7, this:r1585_6 -# 1585| mu1585_9(unknown) = ^CallSideEffect : ~m? -# 1585| v1585_10(void) = ^IndirectReadSideEffect[-1] : &:r1585_6, ~m? -# 1585| mu1585_11(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1585_6 -# 1585| r1585_12(glval) = CopyValue : r1585_8 -# 1585| r1585_13(int &) = CopyValue : r1585_12 -# 1585| mu1585_14(int &) = Store[i] : &:r1585_5, r1585_13 -# 1585| r1585_15(glval) = VariableAddress[d] : -# 1585| r1585_16(glval) = VariableAddress[(unnamed local variable)] : -# 1585| r1585_17(glval) = FunctionAddress[get] : -# 1585| r1585_18(double &) = Call[get] : func:r1585_17, this:r1585_16 -# 1585| mu1585_19(unknown) = ^CallSideEffect : ~m? -# 1585| v1585_20(void) = ^IndirectReadSideEffect[-1] : &:r1585_16, ~m? -# 1585| mu1585_21(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1585_16 -# 1585| r1585_22(glval) = CopyValue : r1585_18 -# 1585| r1585_23(double &) = CopyValue : r1585_22 -# 1585| mu1585_24(double &) = Store[d] : &:r1585_15, r1585_23 -# 1585| r1585_25(glval) = VariableAddress[r] : -# 1585| r1585_26(glval) = VariableAddress[(unnamed local variable)] : -# 1585| r1585_27(glval) = FunctionAddress[get] : -# 1585| r1585_28(int &) = Call[get] : func:r1585_27, this:r1585_26 -# 1585| mu1585_29(unknown) = ^CallSideEffect : ~m? -# 1585| v1585_30(void) = ^IndirectReadSideEffect[-1] : &:r1585_26, ~m? -# 1585| mu1585_31(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1585_26 -# 1585| r1585_32(glval) = CopyValue : r1585_28 -# 1585| r1585_33(int &) = CopyValue : r1585_32 -# 1585| mu1585_34(int &) = Store[r] : &:r1585_25, r1585_33 -# 1586| r1586_1(double) = Constant[4.0] : -# 1586| r1586_2(glval) = VariableAddress[d] : -# 1586| r1586_3(double &) = Load[d] : &:r1586_2, ~m? -# 1586| r1586_4(glval) = CopyValue : r1586_3 -# 1586| mu1586_5(double) = Store[?] : &:r1586_4, r1586_1 -# 1587| r1587_1(glval) = VariableAddress[rd] : -# 1587| r1587_2(glval) = VariableAddress[d] : -# 1587| r1587_3(double &) = Load[d] : &:r1587_2, ~m? -# 1587| r1587_4(glval) = CopyValue : r1587_3 -# 1587| r1587_5(double &) = CopyValue : r1587_4 -# 1587| mu1587_6(double &) = Store[rd] : &:r1587_1, r1587_5 -# 1588| r1588_1(glval) = VariableAddress[v] : -# 1588| r1588_2(glval) = VariableAddress[i] : -# 1588| r1588_3(int &) = Load[i] : &:r1588_2, ~m? -# 1588| r1588_4(int) = Load[?] : &:r1588_3, ~m? -# 1588| mu1588_5(int) = Store[v] : &:r1588_1, r1588_4 -# 1589| r1589_1(int) = Constant[5] : -# 1589| r1589_2(glval) = VariableAddress[r] : -# 1589| r1589_3(int &) = Load[r] : &:r1589_2, ~m? -# 1589| r1589_4(glval) = CopyValue : r1589_3 -# 1589| mu1589_5(int) = Store[?] : &:r1589_4, r1589_1 -# 1590| r1590_1(glval) = VariableAddress[rr] : -# 1590| r1590_2(glval) = VariableAddress[r] : -# 1590| r1590_3(int &) = Load[r] : &:r1590_2, ~m? -# 1590| r1590_4(glval) = CopyValue : r1590_3 -# 1590| r1590_5(int &) = CopyValue : r1590_4 -# 1590| mu1590_6(int &) = Store[rr] : &:r1590_1, r1590_5 -# 1591| r1591_1(glval) = VariableAddress[w] : -# 1591| r1591_2(glval) = VariableAddress[r] : -# 1591| r1591_3(int &) = Load[r] : &:r1591_2, ~m? -# 1591| r1591_4(int) = Load[?] : &:r1591_3, ~m? -# 1591| mu1591_5(int) = Store[w] : &:r1591_1, r1591_4 -# 1595| r1595_1(glval) = VariableAddress[unnamed_local_variable] : -# 1595| r1595_2(glval) = VariableAddress[t] : -# 1595| r1595_3(StructuredBindingTupleRefGet) = Load[t] : &:r1595_2, ~m? -# 1595| mu1595_4(StructuredBindingTupleRefGet) = Store[unnamed_local_variable] : &:r1595_1, r1595_3 -# 1596| r1596_1(glval) = VariableAddress[i] : -# 1596| r1596_2(glval) = VariableAddress[unnamed_local_variable] : -# 1596| r1596_3(glval) = FunctionAddress[get] : -# 1596| r1596_4(int &) = Call[get] : func:r1596_3, this:r1596_2 -# 1596| mu1596_5(unknown) = ^CallSideEffect : ~m? -# 1596| v1596_6(void) = ^IndirectReadSideEffect[-1] : &:r1596_2, ~m? -# 1596| mu1596_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1596_2 -# 1596| r1596_8(glval) = CopyValue : r1596_4 -# 1596| r1596_9(int &) = CopyValue : r1596_8 -# 1596| mu1596_10(int &) = Store[i] : &:r1596_1, r1596_9 -# 1597| r1597_1(glval) = VariableAddress[d] : -# 1597| r1597_2(glval) = VariableAddress[unnamed_local_variable] : -# 1597| r1597_3(glval) = FunctionAddress[get] : -# 1597| r1597_4(double &) = Call[get] : func:r1597_3, this:r1597_2 -# 1597| mu1597_5(unknown) = ^CallSideEffect : ~m? -# 1597| v1597_6(void) = ^IndirectReadSideEffect[-1] : &:r1597_2, ~m? -# 1597| mu1597_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1597_2 -# 1597| r1597_8(glval) = CopyValue : r1597_4 -# 1597| r1597_9(double &) = CopyValue : r1597_8 -# 1597| mu1597_10(double &) = Store[d] : &:r1597_1, r1597_9 -# 1598| r1598_1(glval) = VariableAddress[r] : -# 1598| r1598_2(glval) = VariableAddress[unnamed_local_variable] : -# 1598| r1598_3(glval) = FunctionAddress[get] : -# 1598| r1598_4(int &) = Call[get] : func:r1598_3, this:r1598_2 -# 1598| mu1598_5(unknown) = ^CallSideEffect : ~m? -# 1598| v1598_6(void) = ^IndirectReadSideEffect[-1] : &:r1598_2, ~m? -# 1598| mu1598_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1598_2 -# 1598| r1598_8(glval) = CopyValue : r1598_4 -# 1598| r1598_9(int &) = CopyValue : r1598_8 -# 1598| mu1598_10(int &) = Store[r] : &:r1598_1, r1598_9 -# 1599| r1599_1(double) = Constant[4.0] : -# 1599| r1599_2(glval) = VariableAddress[d] : -# 1599| r1599_3(double &) = Load[d] : &:r1599_2, ~m? -# 1599| r1599_4(glval) = CopyValue : r1599_3 -# 1599| mu1599_5(double) = Store[?] : &:r1599_4, r1599_1 -# 1600| r1600_1(glval) = VariableAddress[rd] : -# 1600| r1600_2(glval) = VariableAddress[d] : -# 1600| r1600_3(double &) = Load[d] : &:r1600_2, ~m? -# 1600| r1600_4(glval) = CopyValue : r1600_3 -# 1600| r1600_5(double &) = CopyValue : r1600_4 -# 1600| mu1600_6(double &) = Store[rd] : &:r1600_1, r1600_5 -# 1601| r1601_1(glval) = VariableAddress[v] : -# 1601| r1601_2(glval) = VariableAddress[i] : -# 1601| r1601_3(int &) = Load[i] : &:r1601_2, ~m? -# 1601| r1601_4(int) = Load[?] : &:r1601_3, ~m? -# 1601| mu1601_5(int) = Store[v] : &:r1601_1, r1601_4 -# 1602| r1602_1(int) = Constant[5] : -# 1602| r1602_2(glval) = VariableAddress[r] : -# 1602| r1602_3(int &) = Load[r] : &:r1602_2, ~m? -# 1602| r1602_4(glval) = CopyValue : r1602_3 -# 1602| mu1602_5(int) = Store[?] : &:r1602_4, r1602_1 -# 1603| r1603_1(glval) = VariableAddress[rr] : -# 1603| r1603_2(glval) = VariableAddress[r] : -# 1603| r1603_3(int &) = Load[r] : &:r1603_2, ~m? -# 1603| r1603_4(glval) = CopyValue : r1603_3 -# 1603| r1603_5(int &) = CopyValue : r1603_4 -# 1603| mu1603_6(int &) = Store[rr] : &:r1603_1, r1603_5 -# 1604| r1604_1(glval) = VariableAddress[w] : -# 1604| r1604_2(glval) = VariableAddress[r] : -# 1604| r1604_3(int &) = Load[r] : &:r1604_2, ~m? -# 1604| r1604_4(int) = Load[?] : &:r1604_3, ~m? -# 1604| mu1604_5(int) = Store[w] : &:r1604_1, r1604_4 -# 1606| v1606_1(void) = NoOp : -# 1581| v1581_4(void) = ReturnVoid : -# 1581| v1581_5(void) = AliasedUse : ~m? -# 1581| v1581_6(void) = ExitFunction : +# 1628| void tuple_structured_binding_ref_get() +# 1628| Block 0 +# 1628| v1628_1(void) = EnterFunction : +# 1628| mu1628_2(unknown) = AliasedDefinition : +# 1628| mu1628_3(unknown) = InitializeNonLocal : +# 1629| r1629_1(glval) = VariableAddress[t] : +# 1629| mu1629_2(StructuredBindingTupleRefGet) = Uninitialized[t] : &:r1629_1 +# 1629| r1629_3(glval) = FunctionAddress[StructuredBindingTupleRefGet] : +# 1629| v1629_4(void) = Call[StructuredBindingTupleRefGet] : func:r1629_3, this:r1629_1 +# 1629| mu1629_5(unknown) = ^CallSideEffect : ~m? +# 1629| mu1629_6(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1629_1 +# 1632| r1632_1(glval) = VariableAddress[(unnamed local variable)] : +# 1632| r1632_2(glval) = VariableAddress[t] : +# 1632| r1632_3(StructuredBindingTupleRefGet) = Load[t] : &:r1632_2, ~m? +# 1632| mu1632_4(StructuredBindingTupleRefGet) = Store[(unnamed local variable)] : &:r1632_1, r1632_3 +# 1632| r1632_5(glval) = VariableAddress[i] : +# 1632| r1632_6(glval) = VariableAddress[(unnamed local variable)] : +# 1632| r1632_7(glval) = FunctionAddress[get] : +# 1632| r1632_8(int &) = Call[get] : func:r1632_7, this:r1632_6 +# 1632| mu1632_9(unknown) = ^CallSideEffect : ~m? +# 1632| v1632_10(void) = ^IndirectReadSideEffect[-1] : &:r1632_6, ~m? +# 1632| mu1632_11(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1632_6 +# 1632| r1632_12(glval) = CopyValue : r1632_8 +# 1632| r1632_13(int &) = CopyValue : r1632_12 +# 1632| mu1632_14(int &) = Store[i] : &:r1632_5, r1632_13 +# 1632| r1632_15(glval) = VariableAddress[d] : +# 1632| r1632_16(glval) = VariableAddress[(unnamed local variable)] : +# 1632| r1632_17(glval) = FunctionAddress[get] : +# 1632| r1632_18(double &) = Call[get] : func:r1632_17, this:r1632_16 +# 1632| mu1632_19(unknown) = ^CallSideEffect : ~m? +# 1632| v1632_20(void) = ^IndirectReadSideEffect[-1] : &:r1632_16, ~m? +# 1632| mu1632_21(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1632_16 +# 1632| r1632_22(glval) = CopyValue : r1632_18 +# 1632| r1632_23(double &) = CopyValue : r1632_22 +# 1632| mu1632_24(double &) = Store[d] : &:r1632_15, r1632_23 +# 1632| r1632_25(glval) = VariableAddress[r] : +# 1632| r1632_26(glval) = VariableAddress[(unnamed local variable)] : +# 1632| r1632_27(glval) = FunctionAddress[get] : +# 1632| r1632_28(int &) = Call[get] : func:r1632_27, this:r1632_26 +# 1632| mu1632_29(unknown) = ^CallSideEffect : ~m? +# 1632| v1632_30(void) = ^IndirectReadSideEffect[-1] : &:r1632_26, ~m? +# 1632| mu1632_31(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1632_26 +# 1632| r1632_32(glval) = CopyValue : r1632_28 +# 1632| r1632_33(int &) = CopyValue : r1632_32 +# 1632| mu1632_34(int &) = Store[r] : &:r1632_25, r1632_33 +# 1633| r1633_1(double) = Constant[4.0] : +# 1633| r1633_2(glval) = VariableAddress[d] : +# 1633| r1633_3(double &) = Load[d] : &:r1633_2, ~m? +# 1633| r1633_4(glval) = CopyValue : r1633_3 +# 1633| mu1633_5(double) = Store[?] : &:r1633_4, r1633_1 +# 1634| r1634_1(glval) = VariableAddress[rd] : +# 1634| r1634_2(glval) = VariableAddress[d] : +# 1634| r1634_3(double &) = Load[d] : &:r1634_2, ~m? +# 1634| r1634_4(glval) = CopyValue : r1634_3 +# 1634| r1634_5(double &) = CopyValue : r1634_4 +# 1634| mu1634_6(double &) = Store[rd] : &:r1634_1, r1634_5 +# 1635| r1635_1(glval) = VariableAddress[v] : +# 1635| r1635_2(glval) = VariableAddress[i] : +# 1635| r1635_3(int &) = Load[i] : &:r1635_2, ~m? +# 1635| r1635_4(int) = Load[?] : &:r1635_3, ~m? +# 1635| mu1635_5(int) = Store[v] : &:r1635_1, r1635_4 +# 1636| r1636_1(int) = Constant[5] : +# 1636| r1636_2(glval) = VariableAddress[r] : +# 1636| r1636_3(int &) = Load[r] : &:r1636_2, ~m? +# 1636| r1636_4(glval) = CopyValue : r1636_3 +# 1636| mu1636_5(int) = Store[?] : &:r1636_4, r1636_1 +# 1637| r1637_1(glval) = VariableAddress[rr] : +# 1637| r1637_2(glval) = VariableAddress[r] : +# 1637| r1637_3(int &) = Load[r] : &:r1637_2, ~m? +# 1637| r1637_4(glval) = CopyValue : r1637_3 +# 1637| r1637_5(int &) = CopyValue : r1637_4 +# 1637| mu1637_6(int &) = Store[rr] : &:r1637_1, r1637_5 +# 1638| r1638_1(glval) = VariableAddress[w] : +# 1638| r1638_2(glval) = VariableAddress[r] : +# 1638| r1638_3(int &) = Load[r] : &:r1638_2, ~m? +# 1638| r1638_4(int) = Load[?] : &:r1638_3, ~m? +# 1638| mu1638_5(int) = Store[w] : &:r1638_1, r1638_4 +# 1642| r1642_1(glval) = VariableAddress[unnamed_local_variable] : +# 1642| r1642_2(glval) = VariableAddress[t] : +# 1642| r1642_3(StructuredBindingTupleRefGet) = Load[t] : &:r1642_2, ~m? +# 1642| mu1642_4(StructuredBindingTupleRefGet) = Store[unnamed_local_variable] : &:r1642_1, r1642_3 +# 1643| r1643_1(glval) = VariableAddress[i] : +# 1643| r1643_2(glval) = VariableAddress[unnamed_local_variable] : +# 1643| r1643_3(glval) = FunctionAddress[get] : +# 1643| r1643_4(int &) = Call[get] : func:r1643_3, this:r1643_2 +# 1643| mu1643_5(unknown) = ^CallSideEffect : ~m? +# 1643| v1643_6(void) = ^IndirectReadSideEffect[-1] : &:r1643_2, ~m? +# 1643| mu1643_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1643_2 +# 1643| r1643_8(glval) = CopyValue : r1643_4 +# 1643| r1643_9(int &) = CopyValue : r1643_8 +# 1643| mu1643_10(int &) = Store[i] : &:r1643_1, r1643_9 +# 1644| r1644_1(glval) = VariableAddress[d] : +# 1644| r1644_2(glval) = VariableAddress[unnamed_local_variable] : +# 1644| r1644_3(glval) = FunctionAddress[get] : +# 1644| r1644_4(double &) = Call[get] : func:r1644_3, this:r1644_2 +# 1644| mu1644_5(unknown) = ^CallSideEffect : ~m? +# 1644| v1644_6(void) = ^IndirectReadSideEffect[-1] : &:r1644_2, ~m? +# 1644| mu1644_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1644_2 +# 1644| r1644_8(glval) = CopyValue : r1644_4 +# 1644| r1644_9(double &) = CopyValue : r1644_8 +# 1644| mu1644_10(double &) = Store[d] : &:r1644_1, r1644_9 +# 1645| r1645_1(glval) = VariableAddress[r] : +# 1645| r1645_2(glval) = VariableAddress[unnamed_local_variable] : +# 1645| r1645_3(glval) = FunctionAddress[get] : +# 1645| r1645_4(int &) = Call[get] : func:r1645_3, this:r1645_2 +# 1645| mu1645_5(unknown) = ^CallSideEffect : ~m? +# 1645| v1645_6(void) = ^IndirectReadSideEffect[-1] : &:r1645_2, ~m? +# 1645| mu1645_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1645_2 +# 1645| r1645_8(glval) = CopyValue : r1645_4 +# 1645| r1645_9(int &) = CopyValue : r1645_8 +# 1645| mu1645_10(int &) = Store[r] : &:r1645_1, r1645_9 +# 1646| r1646_1(double) = Constant[4.0] : +# 1646| r1646_2(glval) = VariableAddress[d] : +# 1646| r1646_3(double &) = Load[d] : &:r1646_2, ~m? +# 1646| r1646_4(glval) = CopyValue : r1646_3 +# 1646| mu1646_5(double) = Store[?] : &:r1646_4, r1646_1 +# 1647| r1647_1(glval) = VariableAddress[rd] : +# 1647| r1647_2(glval) = VariableAddress[d] : +# 1647| r1647_3(double &) = Load[d] : &:r1647_2, ~m? +# 1647| r1647_4(glval) = CopyValue : r1647_3 +# 1647| r1647_5(double &) = CopyValue : r1647_4 +# 1647| mu1647_6(double &) = Store[rd] : &:r1647_1, r1647_5 +# 1648| r1648_1(glval) = VariableAddress[v] : +# 1648| r1648_2(glval) = VariableAddress[i] : +# 1648| r1648_3(int &) = Load[i] : &:r1648_2, ~m? +# 1648| r1648_4(int) = Load[?] : &:r1648_3, ~m? +# 1648| mu1648_5(int) = Store[v] : &:r1648_1, r1648_4 +# 1649| r1649_1(int) = Constant[5] : +# 1649| r1649_2(glval) = VariableAddress[r] : +# 1649| r1649_3(int &) = Load[r] : &:r1649_2, ~m? +# 1649| r1649_4(glval) = CopyValue : r1649_3 +# 1649| mu1649_5(int) = Store[?] : &:r1649_4, r1649_1 +# 1650| r1650_1(glval) = VariableAddress[rr] : +# 1650| r1650_2(glval) = VariableAddress[r] : +# 1650| r1650_3(int &) = Load[r] : &:r1650_2, ~m? +# 1650| r1650_4(glval) = CopyValue : r1650_3 +# 1650| r1650_5(int &) = CopyValue : r1650_4 +# 1650| mu1650_6(int &) = Store[rr] : &:r1650_1, r1650_5 +# 1651| r1651_1(glval) = VariableAddress[w] : +# 1651| r1651_2(glval) = VariableAddress[r] : +# 1651| r1651_3(int &) = Load[r] : &:r1651_2, ~m? +# 1651| r1651_4(int) = Load[?] : &:r1651_3, ~m? +# 1651| mu1651_5(int) = Store[w] : &:r1651_1, r1651_4 +# 1653| v1653_1(void) = NoOp : +# 1628| v1628_4(void) = ReturnVoid : +# 1628| v1628_5(void) = AliasedUse : ~m? +# 1628| v1628_6(void) = ExitFunction : -# 1608| void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet() -# 1608| Block 0 -# 1608| v1608_1(void) = EnterFunction : -# 1608| mu1608_2(unknown) = AliasedDefinition : -# 1608| mu1608_3(unknown) = InitializeNonLocal : -# 1608| r1608_4(glval) = VariableAddress[#this] : -# 1608| mu1608_5(glval) = InitializeParameter[#this] : &:r1608_4 -# 1608| r1608_6(glval) = Load[#this] : &:r1608_4, ~m? -# 1608| mu1608_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1608_6 -# 1608| v1608_8(void) = NoOp : -# 1608| v1608_9(void) = ReturnIndirection[#this] : &:r1608_6, ~m? -# 1608| v1608_10(void) = ReturnVoid : -# 1608| v1608_11(void) = AliasedUse : ~m? -# 1608| v1608_12(void) = ExitFunction : +# 1655| void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet() +# 1655| Block 0 +# 1655| v1655_1(void) = EnterFunction : +# 1655| mu1655_2(unknown) = AliasedDefinition : +# 1655| mu1655_3(unknown) = InitializeNonLocal : +# 1655| r1655_4(glval) = VariableAddress[#this] : +# 1655| mu1655_5(glval) = InitializeParameter[#this] : &:r1655_4 +# 1655| r1655_6(glval) = Load[#this] : &:r1655_4, ~m? +# 1655| mu1655_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1655_6 +# 1655| v1655_8(void) = NoOp : +# 1655| v1655_9(void) = ReturnIndirection[#this] : &:r1655_6, ~m? +# 1655| v1655_10(void) = ReturnVoid : +# 1655| v1655_11(void) = AliasedUse : ~m? +# 1655| v1655_12(void) = ExitFunction : -# 1635| std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1635| Block 0 -# 1635| v1635_1(void) = EnterFunction : -# 1635| mu1635_2(unknown) = AliasedDefinition : -# 1635| mu1635_3(unknown) = InitializeNonLocal : -# 1635| r1635_4(glval) = VariableAddress[#this] : -# 1635| mu1635_5(glval) = InitializeParameter[#this] : &:r1635_4 -# 1635| r1635_6(glval) = Load[#this] : &:r1635_4, ~m? -# 1635| mu1635_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1635_6 -# 1636| r1636_1(glval) = VariableAddress[#return] : -# 1636| r1636_2(glval) = VariableAddress[#this] : -# 1636| r1636_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1636_2, ~m? -# 1636| r1636_4(glval) = FieldAddress[i] : r1636_3 -# 1636| r1636_5(int) = Load[?] : &:r1636_4, ~m? -# 1636| mu1636_6(int) = Store[#return] : &:r1636_1, r1636_5 -# 1635| v1635_8(void) = ReturnIndirection[#this] : &:r1635_6, ~m? -# 1635| r1635_9(glval) = VariableAddress[#return] : -# 1635| v1635_10(void) = ReturnValue : &:r1635_9, ~m? -# 1635| v1635_11(void) = AliasedUse : ~m? -# 1635| v1635_12(void) = ExitFunction : +# 1682| std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1682| Block 0 +# 1682| v1682_1(void) = EnterFunction : +# 1682| mu1682_2(unknown) = AliasedDefinition : +# 1682| mu1682_3(unknown) = InitializeNonLocal : +# 1682| r1682_4(glval) = VariableAddress[#this] : +# 1682| mu1682_5(glval) = InitializeParameter[#this] : &:r1682_4 +# 1682| r1682_6(glval) = Load[#this] : &:r1682_4, ~m? +# 1682| mu1682_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1682_6 +# 1683| r1683_1(glval) = VariableAddress[#return] : +# 1683| r1683_2(glval) = VariableAddress[#this] : +# 1683| r1683_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1683_2, ~m? +# 1683| r1683_4(glval) = FieldAddress[i] : r1683_3 +# 1683| r1683_5(int) = Load[?] : &:r1683_4, ~m? +# 1683| mu1683_6(int) = Store[#return] : &:r1683_1, r1683_5 +# 1682| v1682_8(void) = ReturnIndirection[#this] : &:r1682_6, ~m? +# 1682| r1682_9(glval) = VariableAddress[#return] : +# 1682| v1682_10(void) = ReturnValue : &:r1682_9, ~m? +# 1682| v1682_11(void) = AliasedUse : ~m? +# 1682| v1682_12(void) = ExitFunction : -# 1639| std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1639| Block 0 -# 1639| v1639_1(void) = EnterFunction : -# 1639| mu1639_2(unknown) = AliasedDefinition : -# 1639| mu1639_3(unknown) = InitializeNonLocal : -# 1639| r1639_4(glval) = VariableAddress[#this] : -# 1639| mu1639_5(glval) = InitializeParameter[#this] : &:r1639_4 -# 1639| r1639_6(glval) = Load[#this] : &:r1639_4, ~m? -# 1639| mu1639_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1639_6 -# 1640| r1640_1(glval) = VariableAddress[#return] : -# 1640| r1640_2(glval) = VariableAddress[#this] : -# 1640| r1640_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1640_2, ~m? -# 1640| r1640_4(glval) = FieldAddress[r] : r1640_3 -# 1640| r1640_5(int &) = Load[?] : &:r1640_4, ~m? -# 1640| r1640_6(glval) = CopyValue : r1640_5 -# 1640| r1640_7(int &) = CopyValue : r1640_6 -# 1640| mu1640_8(int &) = Store[#return] : &:r1640_1, r1640_7 -# 1639| v1639_8(void) = ReturnIndirection[#this] : &:r1639_6, ~m? -# 1639| r1639_9(glval) = VariableAddress[#return] : -# 1639| v1639_10(void) = ReturnValue : &:r1639_9, ~m? -# 1639| v1639_11(void) = AliasedUse : ~m? -# 1639| v1639_12(void) = ExitFunction : +# 1686| std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1686| Block 0 +# 1686| v1686_1(void) = EnterFunction : +# 1686| mu1686_2(unknown) = AliasedDefinition : +# 1686| mu1686_3(unknown) = InitializeNonLocal : +# 1686| r1686_4(glval) = VariableAddress[#this] : +# 1686| mu1686_5(glval) = InitializeParameter[#this] : &:r1686_4 +# 1686| r1686_6(glval) = Load[#this] : &:r1686_4, ~m? +# 1686| mu1686_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1686_6 +# 1687| r1687_1(glval) = VariableAddress[#return] : +# 1687| r1687_2(glval) = VariableAddress[#this] : +# 1687| r1687_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1687_2, ~m? +# 1687| r1687_4(glval) = FieldAddress[r] : r1687_3 +# 1687| r1687_5(int &) = Load[?] : &:r1687_4, ~m? +# 1687| r1687_6(glval) = CopyValue : r1687_5 +# 1687| r1687_7(int &) = CopyValue : r1687_6 +# 1687| mu1687_8(int &) = Store[#return] : &:r1687_1, r1687_7 +# 1686| v1686_8(void) = ReturnIndirection[#this] : &:r1686_6, ~m? +# 1686| r1686_9(glval) = VariableAddress[#return] : +# 1686| v1686_10(void) = ReturnValue : &:r1686_9, ~m? +# 1686| v1686_11(void) = AliasedUse : ~m? +# 1686| v1686_12(void) = ExitFunction : -# 1643| std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1643| Block 0 -# 1643| v1643_1(void) = EnterFunction : -# 1643| mu1643_2(unknown) = AliasedDefinition : -# 1643| mu1643_3(unknown) = InitializeNonLocal : -# 1643| r1643_4(glval) = VariableAddress[#this] : -# 1643| mu1643_5(glval) = InitializeParameter[#this] : &:r1643_4 -# 1643| r1643_6(glval) = Load[#this] : &:r1643_4, ~m? -# 1643| mu1643_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1643_6 -# 1644| r1644_1(glval) = VariableAddress[#return] : -# 1644| r1644_2(glval) = VariableAddress[#temp1644:12] : -# 1644| r1644_3(int) = Constant[5] : -# 1644| mu1644_4(int) = Store[#temp1644:12] : &:r1644_2, r1644_3 -# 1644| r1644_5(int &) = CopyValue : r1644_2 -# 1644| mu1644_6(int &&) = Store[#return] : &:r1644_1, r1644_5 -# 1643| v1643_8(void) = ReturnIndirection[#this] : &:r1643_6, ~m? -# 1643| r1643_9(glval) = VariableAddress[#return] : -# 1643| v1643_10(void) = ReturnValue : &:r1643_9, ~m? -# 1643| v1643_11(void) = AliasedUse : ~m? -# 1643| v1643_12(void) = ExitFunction : +# 1690| std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1690| Block 0 +# 1690| v1690_1(void) = EnterFunction : +# 1690| mu1690_2(unknown) = AliasedDefinition : +# 1690| mu1690_3(unknown) = InitializeNonLocal : +# 1690| r1690_4(glval) = VariableAddress[#this] : +# 1690| mu1690_5(glval) = InitializeParameter[#this] : &:r1690_4 +# 1690| r1690_6(glval) = Load[#this] : &:r1690_4, ~m? +# 1690| mu1690_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1690_6 +# 1691| r1691_1(glval) = VariableAddress[#return] : +# 1691| r1691_2(glval) = VariableAddress[#temp1691:12] : +# 1691| r1691_3(int) = Constant[5] : +# 1691| mu1691_4(int) = Store[#temp1691:12] : &:r1691_2, r1691_3 +# 1691| r1691_5(int &) = CopyValue : r1691_2 +# 1691| mu1691_6(int &&) = Store[#return] : &:r1691_1, r1691_5 +# 1690| v1690_8(void) = ReturnIndirection[#this] : &:r1690_6, ~m? +# 1690| r1690_9(glval) = VariableAddress[#return] : +# 1690| v1690_10(void) = ReturnValue : &:r1690_9, ~m? +# 1690| v1690_11(void) = AliasedUse : ~m? +# 1690| v1690_12(void) = ExitFunction : -# 1647| void tuple_structured_binding_no_ref_get() -# 1647| Block 0 -# 1647| v1647_1(void) = EnterFunction : -# 1647| mu1647_2(unknown) = AliasedDefinition : -# 1647| mu1647_3(unknown) = InitializeNonLocal : -# 1648| r1648_1(glval) = VariableAddress[t] : -# 1648| mu1648_2(StructuredBindingTupleNoRefGet) = Uninitialized[t] : &:r1648_1 -# 1648| r1648_3(glval) = FunctionAddress[StructuredBindingTupleNoRefGet] : -# 1648| v1648_4(void) = Call[StructuredBindingTupleNoRefGet] : func:r1648_3, this:r1648_1 -# 1648| mu1648_5(unknown) = ^CallSideEffect : ~m? -# 1648| mu1648_6(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1648_1 -# 1651| r1651_1(glval) = VariableAddress[(unnamed local variable)] : -# 1651| r1651_2(glval) = VariableAddress[t] : -# 1651| r1651_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1651_2 -# 1651| mu1651_4(StructuredBindingTupleNoRefGet &) = Store[(unnamed local variable)] : &:r1651_1, r1651_3 -# 1651| r1651_5(glval) = VariableAddress[i] : -# 1651| r1651_6(glval) = VariableAddress[#temp1651:16] : -# 1651| r1651_7(glval) = VariableAddress[(unnamed local variable)] : -# 1651| r1651_8(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_7, ~m? -# 1651| r1651_9(glval) = CopyValue : r1651_8 -# 1651| r1651_10(glval) = FunctionAddress[get] : -# 1651| r1651_11(int) = Call[get] : func:r1651_10, this:r1651_9 -# 1651| mu1651_12(unknown) = ^CallSideEffect : ~m? -# 1651| v1651_13(void) = ^IndirectReadSideEffect[-1] : &:r1651_9, ~m? -# 1651| mu1651_14(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1651_9 -# 1651| mu1651_15(int) = Store[#temp1651:16] : &:r1651_6, r1651_11 -# 1651| r1651_16(int &) = CopyValue : r1651_6 -# 1651| mu1651_17(int &&) = Store[i] : &:r1651_5, r1651_16 -# 1651| r1651_18(glval) = VariableAddress[r] : -# 1651| r1651_19(glval) = VariableAddress[(unnamed local variable)] : -# 1651| r1651_20(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_19, ~m? -# 1651| r1651_21(glval) = CopyValue : r1651_20 -# 1651| r1651_22(glval) = FunctionAddress[get] : -# 1651| r1651_23(int &) = Call[get] : func:r1651_22, this:r1651_21 -# 1651| mu1651_24(unknown) = ^CallSideEffect : ~m? -# 1651| v1651_25(void) = ^IndirectReadSideEffect[-1] : &:r1651_21, ~m? -# 1651| mu1651_26(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1651_21 -# 1651| r1651_27(glval) = CopyValue : r1651_23 -# 1651| r1651_28(int &) = CopyValue : r1651_27 -# 1651| mu1651_29(int &) = Store[r] : &:r1651_18, r1651_28 -# 1651| r1651_30(glval) = VariableAddress[rv] : -# 1651| r1651_31(glval) = VariableAddress[(unnamed local variable)] : -# 1651| r1651_32(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_31, ~m? -# 1651| r1651_33(glval) = CopyValue : r1651_32 -# 1651| r1651_34(glval) = FunctionAddress[get] : -# 1651| r1651_35(int &&) = Call[get] : func:r1651_34, this:r1651_33 -# 1651| mu1651_36(unknown) = ^CallSideEffect : ~m? -# 1651| v1651_37(void) = ^IndirectReadSideEffect[-1] : &:r1651_33, ~m? -# 1651| mu1651_38(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1651_33 -# 1651| r1651_39(glval) = CopyValue : r1651_35 -# 1651| r1651_40(int &) = CopyValue : r1651_39 -# 1651| mu1651_41(int &&) = Store[rv] : &:r1651_30, r1651_40 -# 1652| r1652_1(int) = Constant[4] : -# 1652| r1652_2(glval) = VariableAddress[i] : -# 1652| r1652_3(int &&) = Load[i] : &:r1652_2, ~m? -# 1652| r1652_4(glval) = CopyValue : r1652_3 -# 1652| mu1652_5(int) = Store[?] : &:r1652_4, r1652_1 -# 1653| r1653_1(glval) = VariableAddress[ri] : -# 1653| r1653_2(glval) = VariableAddress[i] : -# 1653| r1653_3(int &&) = Load[i] : &:r1653_2, ~m? -# 1653| r1653_4(glval) = CopyValue : r1653_3 -# 1653| r1653_5(int &) = CopyValue : r1653_4 -# 1653| mu1653_6(int &) = Store[ri] : &:r1653_1, r1653_5 -# 1654| r1654_1(glval) = VariableAddress[v] : -# 1654| r1654_2(glval) = VariableAddress[i] : -# 1654| r1654_3(int &&) = Load[i] : &:r1654_2, ~m? -# 1654| r1654_4(int) = Load[?] : &:r1654_3, ~m? -# 1654| mu1654_5(int) = Store[v] : &:r1654_1, r1654_4 -# 1655| r1655_1(int) = Constant[5] : -# 1655| r1655_2(glval) = VariableAddress[r] : -# 1655| r1655_3(int &) = Load[r] : &:r1655_2, ~m? -# 1655| r1655_4(glval) = CopyValue : r1655_3 -# 1655| mu1655_5(int) = Store[?] : &:r1655_4, r1655_1 -# 1656| r1656_1(glval) = VariableAddress[rr] : -# 1656| r1656_2(glval) = VariableAddress[r] : -# 1656| r1656_3(int &) = Load[r] : &:r1656_2, ~m? -# 1656| r1656_4(glval) = CopyValue : r1656_3 -# 1656| r1656_5(int &) = CopyValue : r1656_4 -# 1656| mu1656_6(int &) = Store[rr] : &:r1656_1, r1656_5 -# 1657| r1657_1(glval) = VariableAddress[w] : -# 1657| r1657_2(glval) = VariableAddress[r] : -# 1657| r1657_3(int &) = Load[r] : &:r1657_2, ~m? -# 1657| r1657_4(int) = Load[?] : &:r1657_3, ~m? -# 1657| mu1657_5(int) = Store[w] : &:r1657_1, r1657_4 -# 1661| r1661_1(glval) = VariableAddress[unnamed_local_variable] : -# 1661| r1661_2(glval) = VariableAddress[t] : -# 1661| r1661_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1661_2 -# 1661| mu1661_4(StructuredBindingTupleNoRefGet &) = Store[unnamed_local_variable] : &:r1661_1, r1661_3 -# 1662| r1662_1(glval) = VariableAddress[i] : -# 1662| r1662_2(glval) = VariableAddress[#temp1662:20] : -# 1662| r1662_3(glval) = VariableAddress[unnamed_local_variable] : -# 1662| r1662_4(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1662_3, ~m? -# 1662| r1662_5(glval) = CopyValue : r1662_4 -# 1662| r1662_6(glval) = FunctionAddress[get] : -# 1662| r1662_7(int) = Call[get] : func:r1662_6, this:r1662_5 -# 1662| mu1662_8(unknown) = ^CallSideEffect : ~m? -# 1662| v1662_9(void) = ^IndirectReadSideEffect[-1] : &:r1662_5, ~m? -# 1662| mu1662_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1662_5 -# 1662| mu1662_11(int) = Store[#temp1662:20] : &:r1662_2, r1662_7 -# 1662| r1662_12(int &) = CopyValue : r1662_2 -# 1662| mu1662_13(int &&) = Store[i] : &:r1662_1, r1662_12 -# 1663| r1663_1(glval) = VariableAddress[r] : -# 1663| r1663_2(glval) = VariableAddress[unnamed_local_variable] : -# 1663| r1663_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1663_2, ~m? -# 1663| r1663_4(glval) = CopyValue : r1663_3 -# 1663| r1663_5(glval) = FunctionAddress[get] : -# 1663| r1663_6(int &) = Call[get] : func:r1663_5, this:r1663_4 -# 1663| mu1663_7(unknown) = ^CallSideEffect : ~m? -# 1663| v1663_8(void) = ^IndirectReadSideEffect[-1] : &:r1663_4, ~m? -# 1663| mu1663_9(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1663_4 -# 1663| r1663_10(glval) = CopyValue : r1663_6 -# 1663| r1663_11(int &) = CopyValue : r1663_10 -# 1663| mu1663_12(int &) = Store[r] : &:r1663_1, r1663_11 -# 1664| r1664_1(glval) = VariableAddress[rv] : -# 1664| r1664_2(glval) = VariableAddress[unnamed_local_variable] : -# 1664| r1664_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1664_2, ~m? -# 1664| r1664_4(glval) = CopyValue : r1664_3 -# 1664| r1664_5(glval) = FunctionAddress[get] : -# 1664| r1664_6(int &&) = Call[get] : func:r1664_5, this:r1664_4 -# 1664| mu1664_7(unknown) = ^CallSideEffect : ~m? -# 1664| v1664_8(void) = ^IndirectReadSideEffect[-1] : &:r1664_4, ~m? -# 1664| mu1664_9(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1664_4 -# 1664| r1664_10(glval) = CopyValue : r1664_6 -# 1664| r1664_11(int &) = CopyValue : r1664_10 -# 1664| mu1664_12(int &&) = Store[rv] : &:r1664_1, r1664_11 -# 1665| r1665_1(int) = Constant[4] : -# 1665| r1665_2(glval) = VariableAddress[i] : -# 1665| r1665_3(int &&) = Load[i] : &:r1665_2, ~m? -# 1665| r1665_4(glval) = CopyValue : r1665_3 -# 1665| mu1665_5(int) = Store[?] : &:r1665_4, r1665_1 -# 1666| r1666_1(glval) = VariableAddress[ri] : -# 1666| r1666_2(glval) = VariableAddress[i] : -# 1666| r1666_3(int &&) = Load[i] : &:r1666_2, ~m? -# 1666| r1666_4(glval) = CopyValue : r1666_3 -# 1666| r1666_5(int &) = CopyValue : r1666_4 -# 1666| mu1666_6(int &) = Store[ri] : &:r1666_1, r1666_5 -# 1667| r1667_1(glval) = VariableAddress[v] : -# 1667| r1667_2(glval) = VariableAddress[i] : -# 1667| r1667_3(int &&) = Load[i] : &:r1667_2, ~m? -# 1667| r1667_4(int) = Load[?] : &:r1667_3, ~m? -# 1667| mu1667_5(int) = Store[v] : &:r1667_1, r1667_4 -# 1668| r1668_1(int) = Constant[5] : -# 1668| r1668_2(glval) = VariableAddress[r] : -# 1668| r1668_3(int &) = Load[r] : &:r1668_2, ~m? -# 1668| r1668_4(glval) = CopyValue : r1668_3 -# 1668| mu1668_5(int) = Store[?] : &:r1668_4, r1668_1 -# 1669| r1669_1(glval) = VariableAddress[rr] : -# 1669| r1669_2(glval) = VariableAddress[r] : -# 1669| r1669_3(int &) = Load[r] : &:r1669_2, ~m? -# 1669| r1669_4(glval) = CopyValue : r1669_3 -# 1669| r1669_5(int &) = CopyValue : r1669_4 -# 1669| mu1669_6(int &) = Store[rr] : &:r1669_1, r1669_5 -# 1670| r1670_1(glval) = VariableAddress[w] : -# 1670| r1670_2(glval) = VariableAddress[r] : -# 1670| r1670_3(int &) = Load[r] : &:r1670_2, ~m? -# 1670| r1670_4(int) = Load[?] : &:r1670_3, ~m? -# 1670| mu1670_5(int) = Store[w] : &:r1670_1, r1670_4 -# 1672| v1672_1(void) = NoOp : -# 1647| v1647_4(void) = ReturnVoid : -# 1647| v1647_5(void) = AliasedUse : ~m? -# 1647| v1647_6(void) = ExitFunction : +# 1694| void tuple_structured_binding_no_ref_get() +# 1694| Block 0 +# 1694| v1694_1(void) = EnterFunction : +# 1694| mu1694_2(unknown) = AliasedDefinition : +# 1694| mu1694_3(unknown) = InitializeNonLocal : +# 1695| r1695_1(glval) = VariableAddress[t] : +# 1695| mu1695_2(StructuredBindingTupleNoRefGet) = Uninitialized[t] : &:r1695_1 +# 1695| r1695_3(glval) = FunctionAddress[StructuredBindingTupleNoRefGet] : +# 1695| v1695_4(void) = Call[StructuredBindingTupleNoRefGet] : func:r1695_3, this:r1695_1 +# 1695| mu1695_5(unknown) = ^CallSideEffect : ~m? +# 1695| mu1695_6(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1695_1 +# 1698| r1698_1(glval) = VariableAddress[(unnamed local variable)] : +# 1698| r1698_2(glval) = VariableAddress[t] : +# 1698| r1698_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1698_2 +# 1698| mu1698_4(StructuredBindingTupleNoRefGet &) = Store[(unnamed local variable)] : &:r1698_1, r1698_3 +# 1698| r1698_5(glval) = VariableAddress[i] : +# 1698| r1698_6(glval) = VariableAddress[#temp1698:16] : +# 1698| r1698_7(glval) = VariableAddress[(unnamed local variable)] : +# 1698| r1698_8(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1698_7, ~m? +# 1698| r1698_9(glval) = CopyValue : r1698_8 +# 1698| r1698_10(glval) = FunctionAddress[get] : +# 1698| r1698_11(int) = Call[get] : func:r1698_10, this:r1698_9 +# 1698| mu1698_12(unknown) = ^CallSideEffect : ~m? +# 1698| v1698_13(void) = ^IndirectReadSideEffect[-1] : &:r1698_9, ~m? +# 1698| mu1698_14(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1698_9 +# 1698| mu1698_15(int) = Store[#temp1698:16] : &:r1698_6, r1698_11 +# 1698| r1698_16(int &) = CopyValue : r1698_6 +# 1698| mu1698_17(int &&) = Store[i] : &:r1698_5, r1698_16 +# 1698| r1698_18(glval) = VariableAddress[r] : +# 1698| r1698_19(glval) = VariableAddress[(unnamed local variable)] : +# 1698| r1698_20(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1698_19, ~m? +# 1698| r1698_21(glval) = CopyValue : r1698_20 +# 1698| r1698_22(glval) = FunctionAddress[get] : +# 1698| r1698_23(int &) = Call[get] : func:r1698_22, this:r1698_21 +# 1698| mu1698_24(unknown) = ^CallSideEffect : ~m? +# 1698| v1698_25(void) = ^IndirectReadSideEffect[-1] : &:r1698_21, ~m? +# 1698| mu1698_26(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1698_21 +# 1698| r1698_27(glval) = CopyValue : r1698_23 +# 1698| r1698_28(int &) = CopyValue : r1698_27 +# 1698| mu1698_29(int &) = Store[r] : &:r1698_18, r1698_28 +# 1698| r1698_30(glval) = VariableAddress[rv] : +# 1698| r1698_31(glval) = VariableAddress[(unnamed local variable)] : +# 1698| r1698_32(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1698_31, ~m? +# 1698| r1698_33(glval) = CopyValue : r1698_32 +# 1698| r1698_34(glval) = FunctionAddress[get] : +# 1698| r1698_35(int &&) = Call[get] : func:r1698_34, this:r1698_33 +# 1698| mu1698_36(unknown) = ^CallSideEffect : ~m? +# 1698| v1698_37(void) = ^IndirectReadSideEffect[-1] : &:r1698_33, ~m? +# 1698| mu1698_38(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1698_33 +# 1698| r1698_39(glval) = CopyValue : r1698_35 +# 1698| r1698_40(int &) = CopyValue : r1698_39 +# 1698| mu1698_41(int &&) = Store[rv] : &:r1698_30, r1698_40 +# 1699| r1699_1(int) = Constant[4] : +# 1699| r1699_2(glval) = VariableAddress[i] : +# 1699| r1699_3(int &&) = Load[i] : &:r1699_2, ~m? +# 1699| r1699_4(glval) = CopyValue : r1699_3 +# 1699| mu1699_5(int) = Store[?] : &:r1699_4, r1699_1 +# 1700| r1700_1(glval) = VariableAddress[ri] : +# 1700| r1700_2(glval) = VariableAddress[i] : +# 1700| r1700_3(int &&) = Load[i] : &:r1700_2, ~m? +# 1700| r1700_4(glval) = CopyValue : r1700_3 +# 1700| r1700_5(int &) = CopyValue : r1700_4 +# 1700| mu1700_6(int &) = Store[ri] : &:r1700_1, r1700_5 +# 1701| r1701_1(glval) = VariableAddress[v] : +# 1701| r1701_2(glval) = VariableAddress[i] : +# 1701| r1701_3(int &&) = Load[i] : &:r1701_2, ~m? +# 1701| r1701_4(int) = Load[?] : &:r1701_3, ~m? +# 1701| mu1701_5(int) = Store[v] : &:r1701_1, r1701_4 +# 1702| r1702_1(int) = Constant[5] : +# 1702| r1702_2(glval) = VariableAddress[r] : +# 1702| r1702_3(int &) = Load[r] : &:r1702_2, ~m? +# 1702| r1702_4(glval) = CopyValue : r1702_3 +# 1702| mu1702_5(int) = Store[?] : &:r1702_4, r1702_1 +# 1703| r1703_1(glval) = VariableAddress[rr] : +# 1703| r1703_2(glval) = VariableAddress[r] : +# 1703| r1703_3(int &) = Load[r] : &:r1703_2, ~m? +# 1703| r1703_4(glval) = CopyValue : r1703_3 +# 1703| r1703_5(int &) = CopyValue : r1703_4 +# 1703| mu1703_6(int &) = Store[rr] : &:r1703_1, r1703_5 +# 1704| r1704_1(glval) = VariableAddress[w] : +# 1704| r1704_2(glval) = VariableAddress[r] : +# 1704| r1704_3(int &) = Load[r] : &:r1704_2, ~m? +# 1704| r1704_4(int) = Load[?] : &:r1704_3, ~m? +# 1704| mu1704_5(int) = Store[w] : &:r1704_1, r1704_4 +# 1708| r1708_1(glval) = VariableAddress[unnamed_local_variable] : +# 1708| r1708_2(glval) = VariableAddress[t] : +# 1708| r1708_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1708_2 +# 1708| mu1708_4(StructuredBindingTupleNoRefGet &) = Store[unnamed_local_variable] : &:r1708_1, r1708_3 +# 1709| r1709_1(glval) = VariableAddress[i] : +# 1709| r1709_2(glval) = VariableAddress[#temp1709:20] : +# 1709| r1709_3(glval) = VariableAddress[unnamed_local_variable] : +# 1709| r1709_4(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1709_3, ~m? +# 1709| r1709_5(glval) = CopyValue : r1709_4 +# 1709| r1709_6(glval) = FunctionAddress[get] : +# 1709| r1709_7(int) = Call[get] : func:r1709_6, this:r1709_5 +# 1709| mu1709_8(unknown) = ^CallSideEffect : ~m? +# 1709| v1709_9(void) = ^IndirectReadSideEffect[-1] : &:r1709_5, ~m? +# 1709| mu1709_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1709_5 +# 1709| mu1709_11(int) = Store[#temp1709:20] : &:r1709_2, r1709_7 +# 1709| r1709_12(int &) = CopyValue : r1709_2 +# 1709| mu1709_13(int &&) = Store[i] : &:r1709_1, r1709_12 +# 1710| r1710_1(glval) = VariableAddress[r] : +# 1710| r1710_2(glval) = VariableAddress[unnamed_local_variable] : +# 1710| r1710_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1710_2, ~m? +# 1710| r1710_4(glval) = CopyValue : r1710_3 +# 1710| r1710_5(glval) = FunctionAddress[get] : +# 1710| r1710_6(int &) = Call[get] : func:r1710_5, this:r1710_4 +# 1710| mu1710_7(unknown) = ^CallSideEffect : ~m? +# 1710| v1710_8(void) = ^IndirectReadSideEffect[-1] : &:r1710_4, ~m? +# 1710| mu1710_9(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1710_4 +# 1710| r1710_10(glval) = CopyValue : r1710_6 +# 1710| r1710_11(int &) = CopyValue : r1710_10 +# 1710| mu1710_12(int &) = Store[r] : &:r1710_1, r1710_11 +# 1711| r1711_1(glval) = VariableAddress[rv] : +# 1711| r1711_2(glval) = VariableAddress[unnamed_local_variable] : +# 1711| r1711_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1711_2, ~m? +# 1711| r1711_4(glval) = CopyValue : r1711_3 +# 1711| r1711_5(glval) = FunctionAddress[get] : +# 1711| r1711_6(int &&) = Call[get] : func:r1711_5, this:r1711_4 +# 1711| mu1711_7(unknown) = ^CallSideEffect : ~m? +# 1711| v1711_8(void) = ^IndirectReadSideEffect[-1] : &:r1711_4, ~m? +# 1711| mu1711_9(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1711_4 +# 1711| r1711_10(glval) = CopyValue : r1711_6 +# 1711| r1711_11(int &) = CopyValue : r1711_10 +# 1711| mu1711_12(int &&) = Store[rv] : &:r1711_1, r1711_11 +# 1712| r1712_1(int) = Constant[4] : +# 1712| r1712_2(glval) = VariableAddress[i] : +# 1712| r1712_3(int &&) = Load[i] : &:r1712_2, ~m? +# 1712| r1712_4(glval) = CopyValue : r1712_3 +# 1712| mu1712_5(int) = Store[?] : &:r1712_4, r1712_1 +# 1713| r1713_1(glval) = VariableAddress[ri] : +# 1713| r1713_2(glval) = VariableAddress[i] : +# 1713| r1713_3(int &&) = Load[i] : &:r1713_2, ~m? +# 1713| r1713_4(glval) = CopyValue : r1713_3 +# 1713| r1713_5(int &) = CopyValue : r1713_4 +# 1713| mu1713_6(int &) = Store[ri] : &:r1713_1, r1713_5 +# 1714| r1714_1(glval) = VariableAddress[v] : +# 1714| r1714_2(glval) = VariableAddress[i] : +# 1714| r1714_3(int &&) = Load[i] : &:r1714_2, ~m? +# 1714| r1714_4(int) = Load[?] : &:r1714_3, ~m? +# 1714| mu1714_5(int) = Store[v] : &:r1714_1, r1714_4 +# 1715| r1715_1(int) = Constant[5] : +# 1715| r1715_2(glval) = VariableAddress[r] : +# 1715| r1715_3(int &) = Load[r] : &:r1715_2, ~m? +# 1715| r1715_4(glval) = CopyValue : r1715_3 +# 1715| mu1715_5(int) = Store[?] : &:r1715_4, r1715_1 +# 1716| r1716_1(glval) = VariableAddress[rr] : +# 1716| r1716_2(glval) = VariableAddress[r] : +# 1716| r1716_3(int &) = Load[r] : &:r1716_2, ~m? +# 1716| r1716_4(glval) = CopyValue : r1716_3 +# 1716| r1716_5(int &) = CopyValue : r1716_4 +# 1716| mu1716_6(int &) = Store[rr] : &:r1716_1, r1716_5 +# 1717| r1717_1(glval) = VariableAddress[w] : +# 1717| r1717_2(glval) = VariableAddress[r] : +# 1717| r1717_3(int &) = Load[r] : &:r1717_2, ~m? +# 1717| r1717_4(int) = Load[?] : &:r1717_3, ~m? +# 1717| mu1717_5(int) = Store[w] : &:r1717_1, r1717_4 +# 1719| v1719_1(void) = NoOp : +# 1694| v1694_4(void) = ReturnVoid : +# 1694| v1694_5(void) = AliasedUse : ~m? +# 1694| v1694_6(void) = ExitFunction : -# 1674| void array_structured_binding_non_ref_init() -# 1674| Block 0 -# 1674| v1674_1(void) = EnterFunction : -# 1674| mu1674_2(unknown) = AliasedDefinition : -# 1674| mu1674_3(unknown) = InitializeNonLocal : -# 1675| r1675_1(glval) = VariableAddress[xs] : -# 1675| mu1675_2(int[2]) = Uninitialized[xs] : &:r1675_1 -# 1675| r1675_3(int) = Constant[0] : -# 1675| r1675_4(glval) = PointerAdd[4] : r1675_1, r1675_3 -# 1675| r1675_5(int) = Constant[1] : -# 1675| mu1675_6(int) = Store[?] : &:r1675_4, r1675_5 -# 1675| r1675_7(int) = Constant[1] : -# 1675| r1675_8(glval) = PointerAdd[4] : r1675_1, r1675_7 -# 1675| r1675_9(int) = Constant[2] : -# 1675| mu1675_10(int) = Store[?] : &:r1675_8, r1675_9 -# 1676| r1676_1(glval) = VariableAddress[(unnamed local variable)] : -# 1676| r1676_2(glval) = VariableAddress[xs] : -# 1676| r1676_3(int[2]) = Load[xs] : &:r1676_2, ~m? -# 1676| mu1676_4(int[2]) = Store[(unnamed local variable)] : &:r1676_1, r1676_3 -# 1676| r1676_5(glval) = VariableAddress[x0] : +# 1721| void array_structured_binding_non_ref_init() +# 1721| Block 0 +# 1721| v1721_1(void) = EnterFunction : +# 1721| mu1721_2(unknown) = AliasedDefinition : +# 1721| mu1721_3(unknown) = InitializeNonLocal : +# 1722| r1722_1(glval) = VariableAddress[xs] : +# 1722| mu1722_2(int[2]) = Uninitialized[xs] : &:r1722_1 +# 1722| r1722_3(int) = Constant[0] : +# 1722| r1722_4(glval) = PointerAdd[4] : r1722_1, r1722_3 +# 1722| r1722_5(int) = Constant[1] : +# 1722| mu1722_6(int) = Store[?] : &:r1722_4, r1722_5 +# 1722| r1722_7(int) = Constant[1] : +# 1722| r1722_8(glval) = PointerAdd[4] : r1722_1, r1722_7 +# 1722| r1722_9(int) = Constant[2] : +# 1722| mu1722_10(int) = Store[?] : &:r1722_8, r1722_9 +# 1723| r1723_1(glval) = VariableAddress[(unnamed local variable)] : +# 1723| r1723_2(glval) = VariableAddress[xs] : +# 1723| r1723_3(int[2]) = Load[xs] : &:r1723_2, ~m? +# 1723| mu1723_4(int[2]) = Store[(unnamed local variable)] : &:r1723_1, r1723_3 +# 1723| r1723_5(glval) = VariableAddress[x0] : #-----| r0_1(glval) = VariableAddress[(unnamed local variable)] : #-----| r0_2(int *) = Convert : r0_1 #-----| r0_3(unsigned long) = Constant[0] : #-----| r0_4(glval) = PointerAdd[4] : r0_2, r0_3 -#-----| mu0_5(int &) = Store[x0] : &:r1676_5, r0_4 -# 1676| r1676_6(glval) = VariableAddress[x1] : +#-----| mu0_5(int &) = Store[x0] : &:r1723_5, r0_4 +# 1723| r1723_6(glval) = VariableAddress[x1] : #-----| r0_6(glval) = VariableAddress[(unnamed local variable)] : #-----| r0_7(int *) = Convert : r0_6 #-----| r0_8(unsigned long) = Constant[1] : #-----| r0_9(glval) = PointerAdd[4] : r0_7, r0_8 -#-----| mu0_10(int &) = Store[x1] : &:r1676_6, r0_9 -# 1677| v1677_1(void) = NoOp : -# 1674| v1674_4(void) = ReturnVoid : -# 1674| v1674_5(void) = AliasedUse : ~m? -# 1674| v1674_6(void) = ExitFunction : +#-----| mu0_10(int &) = Store[x1] : &:r1723_6, r0_9 +# 1724| v1724_1(void) = NoOp : +# 1721| v1721_4(void) = ReturnVoid : +# 1721| v1721_5(void) = AliasedUse : ~m? +# 1721| v1721_6(void) = ExitFunction : -# 1682| void CapturedLambdaMyObj::CapturedLambdaMyObj() -# 1682| Block 0 -# 1682| v1682_1(void) = EnterFunction : -# 1682| mu1682_2(unknown) = AliasedDefinition : -# 1682| mu1682_3(unknown) = InitializeNonLocal : -# 1682| r1682_4(glval) = VariableAddress[#this] : -# 1682| mu1682_5(glval) = InitializeParameter[#this] : &:r1682_4 -# 1682| r1682_6(glval) = Load[#this] : &:r1682_4, ~m? -# 1682| mu1682_7(CapturedLambdaMyObj) = InitializeIndirection[#this] : &:r1682_6 -# 1682| v1682_8(void) = NoOp : -# 1682| v1682_9(void) = ReturnIndirection[#this] : &:r1682_6, ~m? -# 1682| v1682_10(void) = ReturnVoid : -# 1682| v1682_11(void) = AliasedUse : ~m? -# 1682| v1682_12(void) = ExitFunction : +# 1729| void CapturedLambdaMyObj::CapturedLambdaMyObj() +# 1729| Block 0 +# 1729| v1729_1(void) = EnterFunction : +# 1729| mu1729_2(unknown) = AliasedDefinition : +# 1729| mu1729_3(unknown) = InitializeNonLocal : +# 1729| r1729_4(glval) = VariableAddress[#this] : +# 1729| mu1729_5(glval) = InitializeParameter[#this] : &:r1729_4 +# 1729| r1729_6(glval) = Load[#this] : &:r1729_4, ~m? +# 1729| mu1729_7(CapturedLambdaMyObj) = InitializeIndirection[#this] : &:r1729_6 +# 1729| v1729_8(void) = NoOp : +# 1729| v1729_9(void) = ReturnIndirection[#this] : &:r1729_6, ~m? +# 1729| v1729_10(void) = ReturnVoid : +# 1729| v1729_11(void) = AliasedUse : ~m? +# 1729| v1729_12(void) = ExitFunction : -# 1685| void captured_lambda(int, int&, int&&) -# 1685| Block 0 -# 1685| v1685_1(void) = EnterFunction : -# 1685| mu1685_2(unknown) = AliasedDefinition : -# 1685| mu1685_3(unknown) = InitializeNonLocal : -# 1685| r1685_4(glval) = VariableAddress[x] : -# 1685| mu1685_5(int) = InitializeParameter[x] : &:r1685_4 -# 1685| r1685_6(glval) = VariableAddress[y] : -# 1685| mu1685_7(int &) = InitializeParameter[y] : &:r1685_6 -# 1685| r1685_8(int &) = Load[y] : &:r1685_6, ~m? -# 1685| mu1685_9(unknown) = InitializeIndirection[y] : &:r1685_8 -# 1685| r1685_10(glval) = VariableAddress[z] : -# 1685| mu1685_11(int &&) = InitializeParameter[z] : &:r1685_10 -# 1685| r1685_12(int &&) = Load[z] : &:r1685_10, ~m? -# 1685| mu1685_13(unknown) = InitializeIndirection[z] : &:r1685_12 -# 1687| r1687_1(glval) = VariableAddress[obj1] : -# 1687| r1687_2(glval) = VariableAddress[#temp1687:24] : -# 1687| mu1687_3(CapturedLambdaMyObj) = Uninitialized[#temp1687:24] : &:r1687_2 -# 1687| r1687_4(glval) = FunctionAddress[CapturedLambdaMyObj] : -# 1687| v1687_5(void) = Call[CapturedLambdaMyObj] : func:r1687_4, this:r1687_2 -# 1687| mu1687_6(unknown) = ^CallSideEffect : ~m? -# 1687| mu1687_7(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1687_2 -# 1687| r1687_8(glval) = Convert : r1687_2 -# 1687| r1687_9(CapturedLambdaMyObj &) = CopyValue : r1687_8 -# 1687| mu1687_10(CapturedLambdaMyObj &) = Store[obj1] : &:r1687_1, r1687_9 -# 1688| r1688_1(glval) = VariableAddress[obj2] : -# 1688| mu1688_2(CapturedLambdaMyObj) = Uninitialized[obj2] : &:r1688_1 -# 1688| r1688_3(glval) = FunctionAddress[CapturedLambdaMyObj] : -# 1688| v1688_4(void) = Call[CapturedLambdaMyObj] : func:r1688_3, this:r1688_1 -# 1688| mu1688_5(unknown) = ^CallSideEffect : ~m? -# 1688| mu1688_6(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1688_1 -# 1690| r1690_1(glval) = VariableAddress[lambda_outer] : -# 1690| r1690_2(glval) = VariableAddress[#temp1690:24] : -# 1690| mu1690_3(decltype([...](...){...})) = Uninitialized[#temp1690:24] : &:r1690_2 -# 1690| r1690_4(glval) = FieldAddress[obj1] : r1690_2 -# 1690| r1690_5(glval) = VariableAddress[obj1] : -# 1690| r1690_6(CapturedLambdaMyObj &) = Load[obj1] : &:r1690_5, ~m? -#-----| r0_1(CapturedLambdaMyObj) = Load[?] : &:r1690_6, ~m? -#-----| mu0_2(CapturedLambdaMyObj) = Store[?] : &:r1690_4, r0_1 -# 1690| r1690_7(glval) = FieldAddress[obj2] : r1690_2 -# 1690| r1690_8(glval) = VariableAddress[obj2] : -# 1690| r1690_9(CapturedLambdaMyObj) = Load[obj2] : &:r1690_8, ~m? -# 1690| mu1690_10(CapturedLambdaMyObj) = Store[?] : &:r1690_7, r1690_9 -# 1690| r1690_11(glval) = FieldAddress[x] : r1690_2 -# 1690| r1690_12(glval) = VariableAddress[x] : -# 1690| r1690_13(int) = Load[x] : &:r1690_12, ~m? -# 1690| mu1690_14(int) = Store[?] : &:r1690_11, r1690_13 -# 1690| r1690_15(glval) = FieldAddress[y] : r1690_2 -# 1690| r1690_16(glval) = VariableAddress[y] : -# 1690| r1690_17(int &) = Load[y] : &:r1690_16, ~m? -# 1692| r1692_1(int) = Load[?] : &:r1690_17, ~m? -# 1692| mu1692_2(int) = Store[?] : &:r1690_15, r1692_1 -# 1690| r1690_18(glval) = FieldAddress[z] : r1690_2 -# 1690| r1690_19(glval) = VariableAddress[z] : -# 1690| r1690_20(int &&) = Load[z] : &:r1690_19, ~m? -# 1692| r1692_3(int) = Load[?] : &:r1690_20, ~m? -# 1692| mu1692_4(int) = Store[?] : &:r1690_18, r1692_3 -# 1690| r1690_21(decltype([...](...){...})) = Load[#temp1690:24] : &:r1690_2, ~m? -# 1690| mu1690_22(decltype([...](...){...})) = Store[lambda_outer] : &:r1690_1, r1690_21 -# 1693| v1693_1(void) = NoOp : -# 1685| v1685_14(void) = ReturnIndirection[y] : &:r1685_8, ~m? -# 1685| v1685_15(void) = ReturnIndirection[z] : &:r1685_12, ~m? -# 1685| v1685_16(void) = ReturnVoid : -# 1685| v1685_17(void) = AliasedUse : ~m? -# 1685| v1685_18(void) = ExitFunction : +# 1732| void captured_lambda(int, int&, int&&) +# 1732| Block 0 +# 1732| v1732_1(void) = EnterFunction : +# 1732| mu1732_2(unknown) = AliasedDefinition : +# 1732| mu1732_3(unknown) = InitializeNonLocal : +# 1732| r1732_4(glval) = VariableAddress[x] : +# 1732| mu1732_5(int) = InitializeParameter[x] : &:r1732_4 +# 1732| r1732_6(glval) = VariableAddress[y] : +# 1732| mu1732_7(int &) = InitializeParameter[y] : &:r1732_6 +# 1732| r1732_8(int &) = Load[y] : &:r1732_6, ~m? +# 1732| mu1732_9(unknown) = InitializeIndirection[y] : &:r1732_8 +# 1732| r1732_10(glval) = VariableAddress[z] : +# 1732| mu1732_11(int &&) = InitializeParameter[z] : &:r1732_10 +# 1732| r1732_12(int &&) = Load[z] : &:r1732_10, ~m? +# 1732| mu1732_13(unknown) = InitializeIndirection[z] : &:r1732_12 +# 1734| r1734_1(glval) = VariableAddress[obj1] : +# 1734| r1734_2(glval) = VariableAddress[#temp1734:24] : +# 1734| mu1734_3(CapturedLambdaMyObj) = Uninitialized[#temp1734:24] : &:r1734_2 +# 1734| r1734_4(glval) = FunctionAddress[CapturedLambdaMyObj] : +# 1734| v1734_5(void) = Call[CapturedLambdaMyObj] : func:r1734_4, this:r1734_2 +# 1734| mu1734_6(unknown) = ^CallSideEffect : ~m? +# 1734| mu1734_7(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1734_2 +# 1734| r1734_8(glval) = Convert : r1734_2 +# 1734| r1734_9(CapturedLambdaMyObj &) = CopyValue : r1734_8 +# 1734| mu1734_10(CapturedLambdaMyObj &) = Store[obj1] : &:r1734_1, r1734_9 +# 1735| r1735_1(glval) = VariableAddress[obj2] : +# 1735| mu1735_2(CapturedLambdaMyObj) = Uninitialized[obj2] : &:r1735_1 +# 1735| r1735_3(glval) = FunctionAddress[CapturedLambdaMyObj] : +# 1735| v1735_4(void) = Call[CapturedLambdaMyObj] : func:r1735_3, this:r1735_1 +# 1735| mu1735_5(unknown) = ^CallSideEffect : ~m? +# 1735| mu1735_6(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1735_1 +# 1737| r1737_1(glval) = VariableAddress[lambda_outer] : +# 1737| r1737_2(glval) = VariableAddress[#temp1737:24] : +# 1737| mu1737_3(decltype([...](...){...})) = Uninitialized[#temp1737:24] : &:r1737_2 +# 1737| r1737_4(glval) = FieldAddress[obj1] : r1737_2 +# 1737| r1737_5(glval) = VariableAddress[obj1] : +# 1737| r1737_6(CapturedLambdaMyObj &) = Load[obj1] : &:r1737_5, ~m? +#-----| r0_1(CapturedLambdaMyObj) = Load[?] : &:r1737_6, ~m? +#-----| mu0_2(CapturedLambdaMyObj) = Store[?] : &:r1737_4, r0_1 +# 1737| r1737_7(glval) = FieldAddress[obj2] : r1737_2 +# 1737| r1737_8(glval) = VariableAddress[obj2] : +# 1737| r1737_9(CapturedLambdaMyObj) = Load[obj2] : &:r1737_8, ~m? +# 1737| mu1737_10(CapturedLambdaMyObj) = Store[?] : &:r1737_7, r1737_9 +# 1737| r1737_11(glval) = FieldAddress[x] : r1737_2 +# 1737| r1737_12(glval) = VariableAddress[x] : +# 1737| r1737_13(int) = Load[x] : &:r1737_12, ~m? +# 1737| mu1737_14(int) = Store[?] : &:r1737_11, r1737_13 +# 1737| r1737_15(glval) = FieldAddress[y] : r1737_2 +# 1737| r1737_16(glval) = VariableAddress[y] : +# 1737| r1737_17(int &) = Load[y] : &:r1737_16, ~m? +# 1739| r1739_1(int) = Load[?] : &:r1737_17, ~m? +# 1739| mu1739_2(int) = Store[?] : &:r1737_15, r1739_1 +# 1737| r1737_18(glval) = FieldAddress[z] : r1737_2 +# 1737| r1737_19(glval) = VariableAddress[z] : +# 1737| r1737_20(int &&) = Load[z] : &:r1737_19, ~m? +# 1739| r1739_3(int) = Load[?] : &:r1737_20, ~m? +# 1739| mu1739_4(int) = Store[?] : &:r1737_18, r1739_3 +# 1737| r1737_21(decltype([...](...){...})) = Load[#temp1737:24] : &:r1737_2, ~m? +# 1737| mu1737_22(decltype([...](...){...})) = Store[lambda_outer] : &:r1737_1, r1737_21 +# 1740| v1740_1(void) = NoOp : +# 1732| v1732_14(void) = ReturnIndirection[y] : &:r1732_8, ~m? +# 1732| v1732_15(void) = ReturnIndirection[z] : &:r1732_12, ~m? +# 1732| v1732_16(void) = ReturnVoid : +# 1732| v1732_17(void) = AliasedUse : ~m? +# 1732| v1732_18(void) = ExitFunction : -# 1690| void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const -# 1690| Block 0 -# 1690| v1690_1(void) = EnterFunction : -# 1690| mu1690_2(unknown) = AliasedDefinition : -# 1690| mu1690_3(unknown) = InitializeNonLocal : -# 1690| r1690_4(glval) = VariableAddress[#this] : -# 1690| mu1690_5(glval) = InitializeParameter[#this] : &:r1690_4 -# 1690| r1690_6(glval) = Load[#this] : &:r1690_4, ~m? -# 1690| mu1690_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1690_6 -# 1691| r1691_1(glval) = VariableAddress[lambda_inner] : -# 1691| r1691_2(glval) = VariableAddress[#temp1691:28] : -# 1691| mu1691_3(decltype([...](...){...})) = Uninitialized[#temp1691:28] : &:r1691_2 -# 1691| r1691_4(glval) = FieldAddress[obj1] : r1691_2 -# 1691| r1691_5(glval) = VariableAddress[#this] : -# 1691| r1691_6(lambda [] type at line 1691, col. 29 *) = Load[#this] : &:r1691_5, ~m? -# 1691| r1691_7(glval) = FieldAddress[obj1] : r1691_6 -# 1691| r1691_8(CapturedLambdaMyObj) = Load[?] : &:r1691_7, ~m? -# 1691| mu1691_9(CapturedLambdaMyObj) = Store[?] : &:r1691_4, r1691_8 -# 1691| r1691_10(glval) = FieldAddress[obj2] : r1691_2 -# 1691| r1691_11(glval) = VariableAddress[#this] : -# 1691| r1691_12(lambda [] type at line 1691, col. 29 *) = Load[#this] : &:r1691_11, ~m? -# 1691| r1691_13(glval) = FieldAddress[obj2] : r1691_12 -# 1691| r1691_14(CapturedLambdaMyObj) = Load[?] : &:r1691_13, ~m? -# 1691| mu1691_15(CapturedLambdaMyObj) = Store[?] : &:r1691_10, r1691_14 -# 1691| r1691_16(glval) = FieldAddress[x] : r1691_2 -# 1691| r1691_17(glval) = VariableAddress[#this] : -# 1691| r1691_18(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_17, ~m? -# 1691| r1691_19(glval) = FieldAddress[x] : r1691_18 -# 1691| r1691_20(int) = Load[?] : &:r1691_19, ~m? -# 1691| mu1691_21(int) = Store[?] : &:r1691_16, r1691_20 -# 1691| r1691_22(glval) = FieldAddress[y] : r1691_2 -# 1691| r1691_23(glval) = VariableAddress[#this] : -# 1691| r1691_24(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_23, ~m? -# 1691| r1691_25(glval) = FieldAddress[y] : r1691_24 -# 1691| r1691_26(int) = Load[?] : &:r1691_25, ~m? -# 1691| mu1691_27(int) = Store[?] : &:r1691_22, r1691_26 -# 1691| r1691_28(glval) = FieldAddress[z] : r1691_2 -# 1691| r1691_29(glval) = VariableAddress[#this] : -# 1691| r1691_30(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_29, ~m? -# 1691| r1691_31(glval) = FieldAddress[z] : r1691_30 -# 1691| r1691_32(int) = Load[?] : &:r1691_31, ~m? -# 1691| mu1691_33(int) = Store[?] : &:r1691_28, r1691_32 -# 1691| r1691_34(decltype([...](...){...})) = Load[#temp1691:28] : &:r1691_2, ~m? -# 1691| mu1691_35(decltype([...](...){...})) = Store[lambda_inner] : &:r1691_1, r1691_34 -# 1692| v1692_1(void) = NoOp : -# 1690| v1690_8(void) = ReturnIndirection[#this] : &:r1690_6, ~m? -# 1690| v1690_9(void) = ReturnVoid : -# 1690| v1690_10(void) = AliasedUse : ~m? -# 1690| v1690_11(void) = ExitFunction : +# 1737| void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25)::operator()() const +# 1737| Block 0 +# 1737| v1737_1(void) = EnterFunction : +# 1737| mu1737_2(unknown) = AliasedDefinition : +# 1737| mu1737_3(unknown) = InitializeNonLocal : +# 1737| r1737_4(glval) = VariableAddress[#this] : +# 1737| mu1737_5(glval) = InitializeParameter[#this] : &:r1737_4 +# 1737| r1737_6(glval) = Load[#this] : &:r1737_4, ~m? +# 1737| mu1737_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1737_6 +# 1738| r1738_1(glval) = VariableAddress[lambda_inner] : +# 1738| r1738_2(glval) = VariableAddress[#temp1738:28] : +# 1738| mu1738_3(decltype([...](...){...})) = Uninitialized[#temp1738:28] : &:r1738_2 +# 1738| r1738_4(glval) = FieldAddress[obj1] : r1738_2 +# 1738| r1738_5(glval) = VariableAddress[#this] : +# 1738| r1738_6(lambda [] type at line 1738, col. 29 *) = Load[#this] : &:r1738_5, ~m? +# 1738| r1738_7(glval) = FieldAddress[obj1] : r1738_6 +# 1738| r1738_8(CapturedLambdaMyObj) = Load[?] : &:r1738_7, ~m? +# 1738| mu1738_9(CapturedLambdaMyObj) = Store[?] : &:r1738_4, r1738_8 +# 1738| r1738_10(glval) = FieldAddress[obj2] : r1738_2 +# 1738| r1738_11(glval) = VariableAddress[#this] : +# 1738| r1738_12(lambda [] type at line 1738, col. 29 *) = Load[#this] : &:r1738_11, ~m? +# 1738| r1738_13(glval) = FieldAddress[obj2] : r1738_12 +# 1738| r1738_14(CapturedLambdaMyObj) = Load[?] : &:r1738_13, ~m? +# 1738| mu1738_15(CapturedLambdaMyObj) = Store[?] : &:r1738_10, r1738_14 +# 1738| r1738_16(glval) = FieldAddress[x] : r1738_2 +# 1738| r1738_17(glval) = VariableAddress[#this] : +# 1738| r1738_18(lambda [] type at line 1737, col. 25 *) = Load[#this] : &:r1738_17, ~m? +# 1738| r1738_19(glval) = FieldAddress[x] : r1738_18 +# 1738| r1738_20(int) = Load[?] : &:r1738_19, ~m? +# 1738| mu1738_21(int) = Store[?] : &:r1738_16, r1738_20 +# 1738| r1738_22(glval) = FieldAddress[y] : r1738_2 +# 1738| r1738_23(glval) = VariableAddress[#this] : +# 1738| r1738_24(lambda [] type at line 1737, col. 25 *) = Load[#this] : &:r1738_23, ~m? +# 1738| r1738_25(glval) = FieldAddress[y] : r1738_24 +# 1738| r1738_26(int) = Load[?] : &:r1738_25, ~m? +# 1738| mu1738_27(int) = Store[?] : &:r1738_22, r1738_26 +# 1738| r1738_28(glval) = FieldAddress[z] : r1738_2 +# 1738| r1738_29(glval) = VariableAddress[#this] : +# 1738| r1738_30(lambda [] type at line 1737, col. 25 *) = Load[#this] : &:r1738_29, ~m? +# 1738| r1738_31(glval) = FieldAddress[z] : r1738_30 +# 1738| r1738_32(int) = Load[?] : &:r1738_31, ~m? +# 1738| mu1738_33(int) = Store[?] : &:r1738_28, r1738_32 +# 1738| r1738_34(decltype([...](...){...})) = Load[#temp1738:28] : &:r1738_2, ~m? +# 1738| mu1738_35(decltype([...](...){...})) = Store[lambda_inner] : &:r1738_1, r1738_34 +# 1739| v1739_1(void) = NoOp : +# 1737| v1737_8(void) = ReturnIndirection[#this] : &:r1737_6, ~m? +# 1737| v1737_9(void) = ReturnVoid : +# 1737| v1737_10(void) = AliasedUse : ~m? +# 1737| v1737_11(void) = ExitFunction : -# 1691| void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)::operator()() const -# 1691| Block 0 -# 1691| v1691_1(void) = EnterFunction : -# 1691| mu1691_2(unknown) = AliasedDefinition : -# 1691| mu1691_3(unknown) = InitializeNonLocal : -# 1691| r1691_4(glval) = VariableAddress[#this] : -# 1691| mu1691_5(glval) = InitializeParameter[#this] : &:r1691_4 -# 1691| r1691_6(glval) = Load[#this] : &:r1691_4, ~m? -# 1691| mu1691_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1691_6 -# 1691| v1691_8(void) = NoOp : -# 1691| v1691_9(void) = NoOp : -# 1691| v1691_10(void) = ReturnIndirection[#this] : &:r1691_6, ~m? -# 1691| v1691_11(void) = ReturnVoid : -# 1691| v1691_12(void) = AliasedUse : ~m? -# 1691| v1691_13(void) = ExitFunction : - -# 1695| int goto_on_same_line() -# 1695| Block 0 -# 1695| v1695_1(void) = EnterFunction : -# 1695| mu1695_2(unknown) = AliasedDefinition : -# 1695| mu1695_3(unknown) = InitializeNonLocal : -# 1696| r1696_1(glval) = VariableAddress[x] : -# 1696| r1696_2(int) = Constant[42] : -# 1696| mu1696_3(int) = Store[x] : &:r1696_1, r1696_2 -# 1697| v1697_1(void) = NoOp : -# 1697| v1697_2(void) = NoOp : -# 1698| r1698_1(glval) = VariableAddress[#return] : -# 1698| r1698_2(glval) = VariableAddress[x] : -# 1698| r1698_3(int) = Load[x] : &:r1698_2, ~m? -# 1698| mu1698_4(int) = Store[#return] : &:r1698_1, r1698_3 -# 1695| r1695_4(glval) = VariableAddress[#return] : -# 1695| v1695_5(void) = ReturnValue : &:r1695_4, ~m? -# 1695| v1695_6(void) = AliasedUse : ~m? -# 1695| v1695_7(void) = ExitFunction : - -# 1703| void TrivialLambdaClass::m() const -# 1703| Block 0 -# 1703| v1703_1(void) = EnterFunction : -# 1703| mu1703_2(unknown) = AliasedDefinition : -# 1703| mu1703_3(unknown) = InitializeNonLocal : -# 1703| r1703_4(glval) = VariableAddress[#this] : -# 1703| mu1703_5(glval) = InitializeParameter[#this] : &:r1703_4 -# 1703| r1703_6(glval) = Load[#this] : &:r1703_4, ~m? -# 1703| mu1703_7(TrivialLambdaClass) = InitializeIndirection[#this] : &:r1703_6 -# 1704| r1704_1(glval) = VariableAddress[l_m_outer] : -# 1704| r1704_2(glval) = VariableAddress[#temp1704:25] : -# 1704| mu1704_3(decltype([...](...){...})) = Uninitialized[#temp1704:25] : &:r1704_2 -# 1704| r1704_4(glval) = FieldAddress[(captured this)] : r1704_2 -# 1704| r1704_5(glval) = VariableAddress[#this] : -# 1704| r1704_6(TrivialLambdaClass *) = Load[#this] : &:r1704_5, ~m? -# 1704| r1704_7(TrivialLambdaClass) = Load[?] : &:r1704_6, ~m? -# 1704| mu1704_8(TrivialLambdaClass) = Store[?] : &:r1704_4, r1704_7 -# 1704| r1704_9(decltype([...](...){...})) = Load[#temp1704:25] : &:r1704_2, ~m? -# 1704| mu1704_10(decltype([...](...){...})) = Store[l_m_outer] : &:r1704_1, r1704_9 -# 1711| v1711_1(void) = NoOp : -# 1703| v1703_8(void) = ReturnIndirection[#this] : &:r1703_6, ~m? -# 1703| v1703_9(void) = ReturnVoid : -# 1703| v1703_10(void) = AliasedUse : ~m? -# 1703| v1703_11(void) = ExitFunction : - -# 1704| void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const -# 1704| Block 0 -# 1704| v1704_1(void) = EnterFunction : -# 1704| mu1704_2(unknown) = AliasedDefinition : -# 1704| mu1704_3(unknown) = InitializeNonLocal : -# 1704| r1704_4(glval) = VariableAddress[#this] : -# 1704| mu1704_5(glval) = InitializeParameter[#this] : &:r1704_4 -# 1704| r1704_6(glval) = Load[#this] : &:r1704_4, ~m? -# 1704| mu1704_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1704_6 -# 1705| r1705_1(glval) = VariableAddress[#this] : -# 1705| r1705_2(lambda [] type at line 1704, col. 26 *) = Load[#this] : &:r1705_1, ~m? -# 1705| r1705_3(glval) = FieldAddress[(captured this)] : r1705_2 -# 1705| r1705_4(TrivialLambdaClass *) = CopyValue : r1705_3 -# 1705| r1705_5(glval) = FunctionAddress[m] : -# 1705| v1705_6(void) = Call[m] : func:r1705_5, this:r1705_4 -# 1705| mu1705_7(unknown) = ^CallSideEffect : ~m? -# 1705| v1705_8(void) = ^IndirectReadSideEffect[-1] : &:r1705_4, ~m? -# 1707| r1707_1(glval) = VariableAddress[l_m_inner] : -# 1707| r1707_2(glval) = VariableAddress[#temp1707:29] : -# 1707| mu1707_3(decltype([...](...){...})) = Uninitialized[#temp1707:29] : &:r1707_2 -# 1707| r1707_4(glval) = FieldAddress[(captured this)] : r1707_2 -# 1707| r1707_5(glval) = VariableAddress[#this] : -# 1707| r1707_6(lambda [] type at line 1707, col. 30 *) = Load[#this] : &:r1707_5, ~m? -# 1707| r1707_7(glval) = FieldAddress[(captured this)] : r1707_6 -# 1707| r1707_8(TrivialLambdaClass) = Load[?] : &:r1707_7, ~m? -# 1707| mu1707_9(TrivialLambdaClass) = Store[?] : &:r1707_4, r1707_8 -# 1707| r1707_10(decltype([...](...){...})) = Load[#temp1707:29] : &:r1707_2, ~m? -# 1707| mu1707_11(decltype([...](...){...})) = Store[l_m_inner] : &:r1707_1, r1707_10 -# 1710| v1710_1(void) = NoOp : -# 1704| v1704_8(void) = ReturnIndirection[#this] : &:r1704_6, ~m? -# 1704| v1704_9(void) = ReturnVoid : -# 1704| v1704_10(void) = AliasedUse : ~m? -# 1704| v1704_11(void) = ExitFunction : - -# 1707| void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)::operator()() const -# 1707| Block 0 -# 1707| v1707_1(void) = EnterFunction : -# 1707| mu1707_2(unknown) = AliasedDefinition : -# 1707| mu1707_3(unknown) = InitializeNonLocal : -# 1707| r1707_4(glval) = VariableAddress[#this] : -# 1707| mu1707_5(glval) = InitializeParameter[#this] : &:r1707_4 -# 1707| r1707_6(glval) = Load[#this] : &:r1707_4, ~m? -# 1707| mu1707_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1707_6 -# 1708| r1708_1(glval) = VariableAddress[#this] : -# 1708| r1708_2(lambda [] type at line 1707, col. 30 *) = Load[#this] : &:r1708_1, ~m? -# 1708| r1708_3(glval) = FieldAddress[(captured this)] : r1708_2 -# 1708| r1708_4(TrivialLambdaClass *) = CopyValue : r1708_3 -# 1708| r1708_5(glval) = FunctionAddress[m] : -# 1708| v1708_6(void) = Call[m] : func:r1708_5, this:r1708_4 -# 1708| mu1708_7(unknown) = ^CallSideEffect : ~m? -# 1708| v1708_8(void) = ^IndirectReadSideEffect[-1] : &:r1708_4, ~m? -# 1709| v1709_1(void) = NoOp : -# 1707| v1707_8(void) = ReturnIndirection[#this] : &:r1707_6, ~m? -# 1707| v1707_9(void) = ReturnVoid : -# 1707| v1707_10(void) = AliasedUse : ~m? -# 1707| v1707_11(void) = ExitFunction : - -# 1714| void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&) -# 1714| Block 0 -# 1714| v1714_1(void) = EnterFunction : -# 1714| mu1714_2(unknown) = AliasedDefinition : -# 1714| mu1714_3(unknown) = InitializeNonLocal : -# 1714| r1714_4(glval) = VariableAddress[p1] : -# 1714| mu1714_5(TrivialLambdaClass) = InitializeParameter[p1] : &:r1714_4 -# 1714| r1714_6(glval) = VariableAddress[p2] : -# 1714| mu1714_7(TrivialLambdaClass &) = InitializeParameter[p2] : &:r1714_6 -# 1714| r1714_8(TrivialLambdaClass &) = Load[p2] : &:r1714_6, ~m? -# 1714| mu1714_9(unknown) = InitializeIndirection[p2] : &:r1714_8 -# 1714| r1714_10(glval) = VariableAddress[p3] : -# 1714| mu1714_11(TrivialLambdaClass &&) = InitializeParameter[p3] : &:r1714_10 -# 1714| r1714_12(TrivialLambdaClass &&) = Load[p3] : &:r1714_10, ~m? -# 1714| mu1714_13(unknown) = InitializeIndirection[p3] : &:r1714_12 -# 1715| r1715_1(glval) = VariableAddress[l1] : -# 1715| mu1715_2(TrivialLambdaClass) = Uninitialized[l1] : &:r1715_1 -# 1716| r1716_1(glval) = VariableAddress[l2] : -# 1716| r1716_2(glval) = VariableAddress[#temp1716:36] : -# 1716| r1716_3(TrivialLambdaClass) = Constant[0] : -# 1716| mu1716_4(TrivialLambdaClass) = Store[#temp1716:36] : &:r1716_2, r1716_3 -# 1716| r1716_5(glval) = Convert : r1716_2 -# 1716| r1716_6(TrivialLambdaClass &) = CopyValue : r1716_5 -# 1716| mu1716_7(TrivialLambdaClass &) = Store[l2] : &:r1716_1, r1716_6 -# 1718| r1718_1(glval) = VariableAddress[l_outer1] : -# 1718| r1718_2(glval) = VariableAddress[#temp1718:20] : -# 1718| mu1718_3(decltype([...](...){...})) = Uninitialized[#temp1718:20] : &:r1718_2 -# 1718| r1718_4(glval) = FieldAddress[p1] : r1718_2 -# 1718| r1718_5(glval) = VariableAddress[p1] : -# 1718| r1718_6(TrivialLambdaClass) = Load[p1] : &:r1718_5, ~m? -# 1718| mu1718_7(TrivialLambdaClass) = Store[?] : &:r1718_4, r1718_6 -# 1718| r1718_8(glval) = FieldAddress[p2] : r1718_2 -# 1718| r1718_9(glval) = VariableAddress[p2] : -# 1718| r1718_10(TrivialLambdaClass &) = Load[p2] : &:r1718_9, ~m? -#-----| r0_1(TrivialLambdaClass) = Load[?] : &:r1718_10, ~m? -#-----| mu0_2(TrivialLambdaClass) = Store[?] : &:r1718_8, r0_1 -# 1718| r1718_11(glval) = FieldAddress[p3] : r1718_2 -# 1718| r1718_12(glval) = VariableAddress[p3] : -# 1718| r1718_13(TrivialLambdaClass &&) = Load[p3] : &:r1718_12, ~m? -#-----| r0_3(TrivialLambdaClass) = Load[?] : &:r1718_13, ~m? -#-----| mu0_4(TrivialLambdaClass) = Store[?] : &:r1718_11, r0_3 -# 1718| r1718_14(glval) = FieldAddress[l1] : r1718_2 -# 1718| r1718_15(glval) = VariableAddress[l1] : -# 1718| r1718_16(TrivialLambdaClass) = Load[l1] : &:r1718_15, ~m? -# 1718| mu1718_17(TrivialLambdaClass) = Store[?] : &:r1718_14, r1718_16 -# 1718| r1718_18(glval) = FieldAddress[l2] : r1718_2 -# 1718| r1718_19(glval) = VariableAddress[l2] : -# 1718| r1718_20(TrivialLambdaClass &) = Load[l2] : &:r1718_19, ~m? -#-----| r0_5(TrivialLambdaClass) = Load[?] : &:r1718_20, ~m? -#-----| mu0_6(TrivialLambdaClass) = Store[?] : &:r1718_18, r0_5 -# 1718| r1718_21(decltype([...](...){...})) = Load[#temp1718:20] : &:r1718_2, ~m? -# 1718| mu1718_22(decltype([...](...){...})) = Store[l_outer1] : &:r1718_1, r1718_21 -# 1721| v1721_1(void) = NoOp : -# 1714| v1714_14(void) = ReturnIndirection[p2] : &:r1714_8, ~m? -# 1714| v1714_15(void) = ReturnIndirection[p3] : &:r1714_12, ~m? -# 1714| v1714_16(void) = ReturnVoid : -# 1714| v1714_17(void) = AliasedUse : ~m? -# 1714| v1714_18(void) = ExitFunction : - -# 1718| void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const -# 1718| Block 0 -# 1718| v1718_1(void) = EnterFunction : -# 1718| mu1718_2(unknown) = AliasedDefinition : -# 1718| mu1718_3(unknown) = InitializeNonLocal : -# 1718| r1718_4(glval) = VariableAddress[#this] : -# 1718| mu1718_5(glval) = InitializeParameter[#this] : &:r1718_4 -# 1718| r1718_6(glval) = Load[#this] : &:r1718_4, ~m? -# 1718| mu1718_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1718_6 -# 1719| r1719_1(glval) = VariableAddress[l_inner1] : -# 1719| r1719_2(glval) = VariableAddress[#temp1719:24] : -# 1719| mu1719_3(decltype([...](...){...})) = Uninitialized[#temp1719:24] : &:r1719_2 -# 1719| r1719_4(glval) = FieldAddress[p1] : r1719_2 -# 1719| r1719_5(glval) = VariableAddress[#this] : -# 1719| r1719_6(lambda [] type at line 1719, col. 25 *) = Load[#this] : &:r1719_5, ~m? -# 1719| r1719_7(glval) = FieldAddress[p1] : r1719_6 -# 1719| r1719_8(TrivialLambdaClass) = Load[?] : &:r1719_7, ~m? -# 1719| mu1719_9(TrivialLambdaClass) = Store[?] : &:r1719_4, r1719_8 -# 1719| r1719_10(decltype([...](...){...})) = Load[#temp1719:24] : &:r1719_2, ~m? -# 1719| mu1719_11(decltype([...](...){...})) = Store[l_inner1] : &:r1719_1, r1719_10 -# 1720| v1720_1(void) = NoOp : -# 1718| v1718_8(void) = ReturnIndirection[#this] : &:r1718_6, ~m? -# 1718| v1718_9(void) = ReturnVoid : -# 1718| v1718_10(void) = AliasedUse : ~m? -# 1718| v1718_11(void) = ExitFunction : - -# 1719| void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)::operator()() const -# 1719| Block 0 -# 1719| v1719_1(void) = EnterFunction : -# 1719| mu1719_2(unknown) = AliasedDefinition : -# 1719| mu1719_3(unknown) = InitializeNonLocal : -# 1719| r1719_4(glval) = VariableAddress[#this] : -# 1719| mu1719_5(glval) = InitializeParameter[#this] : &:r1719_4 -# 1719| r1719_6(glval) = Load[#this] : &:r1719_4, ~m? -# 1719| mu1719_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1719_6 -# 1719| v1719_8(void) = NoOp : -# 1719| v1719_9(void) = ReturnIndirection[#this] : &:r1719_6, ~m? -# 1719| v1719_10(void) = ReturnVoid : -# 1719| v1719_11(void) = AliasedUse : ~m? -# 1719| v1719_12(void) = ExitFunction : - -# 1726| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() -# 1726| Block 0 -# 1726| v1726_1(void) = EnterFunction : -# 1726| mu1726_2(unknown) = AliasedDefinition : -# 1726| mu1726_3(unknown) = InitializeNonLocal : -# 1726| r1726_4(glval) = VariableAddress[#this] : -# 1726| mu1726_5(glval) = InitializeParameter[#this] : &:r1726_4 -# 1726| r1726_6(glval) = Load[#this] : &:r1726_4, ~m? -# 1726| mu1726_7(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1726_6 -# 1726| v1726_8(void) = NoOp : -# 1726| v1726_9(void) = ReturnIndirection[#this] : &:r1726_6, ~m? -# 1726| v1726_10(void) = ReturnVoid : -# 1726| v1726_11(void) = AliasedUse : ~m? -# 1726| v1726_12(void) = ExitFunction : - -# 1727| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) -# 1727| Block 0 -# 1727| v1727_1(void) = EnterFunction : -# 1727| mu1727_2(unknown) = AliasedDefinition : -# 1727| mu1727_3(unknown) = InitializeNonLocal : -# 1727| r1727_4(glval) = VariableAddress[#this] : -# 1727| mu1727_5(glval) = InitializeParameter[#this] : &:r1727_4 -# 1727| r1727_6(glval) = Load[#this] : &:r1727_4, ~m? -# 1727| mu1727_7(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1727_6 -# 1727| r1727_8(glval) = VariableAddress[c] : -# 1727| mu1727_9(CopyConstructorWithImplicitArgumentClass &) = InitializeParameter[c] : &:r1727_8 -# 1727| r1727_10(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1727_8, ~m? -# 1727| mu1727_11(unknown) = InitializeIndirection[c] : &:r1727_10 -# 1728| r1728_1(glval) = VariableAddress[c] : -# 1728| r1728_2(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1728_1, ~m? -# 1728| r1728_3(glval) = CopyValue : r1728_2 -# 1728| r1728_4(glval) = FieldAddress[x] : r1728_3 -# 1728| r1728_5(int) = Load[?] : &:r1728_4, ~m? -# 1728| r1728_6(glval) = VariableAddress[#this] : -# 1728| r1728_7(CopyConstructorWithImplicitArgumentClass *) = Load[#this] : &:r1728_6, ~m? -# 1728| r1728_8(glval) = FieldAddress[x] : r1728_7 -# 1728| mu1728_9(int) = Store[?] : &:r1728_8, r1728_5 -# 1729| v1729_1(void) = NoOp : -# 1727| v1727_12(void) = ReturnIndirection[#this] : &:r1727_6, ~m? -# 1727| v1727_13(void) = ReturnIndirection[c] : &:r1727_10, ~m? -# 1727| v1727_14(void) = ReturnVoid : -# 1727| v1727_15(void) = AliasedUse : ~m? -# 1727| v1727_16(void) = ExitFunction : - -# 1735| void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() -# 1735| Block 0 -# 1735| v1735_1(void) = EnterFunction : -# 1735| mu1735_2(unknown) = AliasedDefinition : -# 1735| mu1735_3(unknown) = InitializeNonLocal : -# 1735| r1735_4(glval) = VariableAddress[#this] : -# 1735| mu1735_5(glval) = InitializeParameter[#this] : &:r1735_4 -# 1735| r1735_6(glval) = Load[#this] : &:r1735_4, ~m? -# 1735| mu1735_7(CopyConstructorWithBitwiseCopyClass) = InitializeIndirection[#this] : &:r1735_6 -# 1735| v1735_8(void) = NoOp : -# 1735| v1735_9(void) = ReturnIndirection[#this] : &:r1735_6, ~m? -# 1735| v1735_10(void) = ReturnVoid : -# 1735| v1735_11(void) = AliasedUse : ~m? -# 1735| v1735_12(void) = ExitFunction : - -# 1738| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) +# 1738| void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1737, col. 25)::operator()() const)::(lambda [] type at line 1738, col. 29)::operator()() const # 1738| Block 0 -# 1738| v1738_1(void) = EnterFunction : -# 1738| mu1738_2(unknown) = AliasedDefinition : -# 1738| mu1738_3(unknown) = InitializeNonLocal : -# 1738| r1738_4(glval) = VariableAddress[#this] : -# 1738| mu1738_5(glval) = InitializeParameter[#this] : &:r1738_4 -# 1738| r1738_6(glval) = Load[#this] : &:r1738_4, ~m? -# 1738| mu1738_7(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1738_6 +# 1738| v1738_1(void) = EnterFunction : +# 1738| mu1738_2(unknown) = AliasedDefinition : +# 1738| mu1738_3(unknown) = InitializeNonLocal : +# 1738| r1738_4(glval) = VariableAddress[#this] : +# 1738| mu1738_5(glval) = InitializeParameter[#this] : &:r1738_4 +# 1738| r1738_6(glval) = Load[#this] : &:r1738_4, ~m? +# 1738| mu1738_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1738_6 +# 1738| v1738_8(void) = NoOp : +# 1738| v1738_9(void) = NoOp : +# 1738| v1738_10(void) = ReturnIndirection[#this] : &:r1738_6, ~m? +# 1738| v1738_11(void) = ReturnVoid : +# 1738| v1738_12(void) = AliasedUse : ~m? +# 1738| v1738_13(void) = ExitFunction : + +# 1742| int goto_on_same_line() +# 1742| Block 0 +# 1742| v1742_1(void) = EnterFunction : +# 1742| mu1742_2(unknown) = AliasedDefinition : +# 1742| mu1742_3(unknown) = InitializeNonLocal : +# 1743| r1743_1(glval) = VariableAddress[x] : +# 1743| r1743_2(int) = Constant[42] : +# 1743| mu1743_3(int) = Store[x] : &:r1743_1, r1743_2 +# 1744| v1744_1(void) = NoOp : +# 1744| v1744_2(void) = NoOp : +# 1745| r1745_1(glval) = VariableAddress[#return] : +# 1745| r1745_2(glval) = VariableAddress[x] : +# 1745| r1745_3(int) = Load[x] : &:r1745_2, ~m? +# 1745| mu1745_4(int) = Store[#return] : &:r1745_1, r1745_3 +# 1742| r1742_4(glval) = VariableAddress[#return] : +# 1742| v1742_5(void) = ReturnValue : &:r1742_4, ~m? +# 1742| v1742_6(void) = AliasedUse : ~m? +# 1742| v1742_7(void) = ExitFunction : + +# 1750| void TrivialLambdaClass::m() const +# 1750| Block 0 +# 1750| v1750_1(void) = EnterFunction : +# 1750| mu1750_2(unknown) = AliasedDefinition : +# 1750| mu1750_3(unknown) = InitializeNonLocal : +# 1750| r1750_4(glval) = VariableAddress[#this] : +# 1750| mu1750_5(glval) = InitializeParameter[#this] : &:r1750_4 +# 1750| r1750_6(glval) = Load[#this] : &:r1750_4, ~m? +# 1750| mu1750_7(TrivialLambdaClass) = InitializeIndirection[#this] : &:r1750_6 +# 1751| r1751_1(glval) = VariableAddress[l_m_outer] : +# 1751| r1751_2(glval) = VariableAddress[#temp1751:25] : +# 1751| mu1751_3(decltype([...](...){...})) = Uninitialized[#temp1751:25] : &:r1751_2 +# 1751| r1751_4(glval) = FieldAddress[(captured this)] : r1751_2 +# 1751| r1751_5(glval) = VariableAddress[#this] : +# 1751| r1751_6(TrivialLambdaClass *) = Load[#this] : &:r1751_5, ~m? +# 1751| r1751_7(TrivialLambdaClass) = Load[?] : &:r1751_6, ~m? +# 1751| mu1751_8(TrivialLambdaClass) = Store[?] : &:r1751_4, r1751_7 +# 1751| r1751_9(decltype([...](...){...})) = Load[#temp1751:25] : &:r1751_2, ~m? +# 1751| mu1751_10(decltype([...](...){...})) = Store[l_m_outer] : &:r1751_1, r1751_9 +# 1758| v1758_1(void) = NoOp : +# 1750| v1750_8(void) = ReturnIndirection[#this] : &:r1750_6, ~m? +# 1750| v1750_9(void) = ReturnVoid : +# 1750| v1750_10(void) = AliasedUse : ~m? +# 1750| v1750_11(void) = ExitFunction : + +# 1751| void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26)::operator()() const +# 1751| Block 0 +# 1751| v1751_1(void) = EnterFunction : +# 1751| mu1751_2(unknown) = AliasedDefinition : +# 1751| mu1751_3(unknown) = InitializeNonLocal : +# 1751| r1751_4(glval) = VariableAddress[#this] : +# 1751| mu1751_5(glval) = InitializeParameter[#this] : &:r1751_4 +# 1751| r1751_6(glval) = Load[#this] : &:r1751_4, ~m? +# 1751| mu1751_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1751_6 +# 1752| r1752_1(glval) = VariableAddress[#this] : +# 1752| r1752_2(lambda [] type at line 1751, col. 26 *) = Load[#this] : &:r1752_1, ~m? +# 1752| r1752_3(glval) = FieldAddress[(captured this)] : r1752_2 +# 1752| r1752_4(TrivialLambdaClass *) = CopyValue : r1752_3 +# 1752| r1752_5(glval) = FunctionAddress[m] : +# 1752| v1752_6(void) = Call[m] : func:r1752_5, this:r1752_4 +# 1752| mu1752_7(unknown) = ^CallSideEffect : ~m? +# 1752| v1752_8(void) = ^IndirectReadSideEffect[-1] : &:r1752_4, ~m? +# 1754| r1754_1(glval) = VariableAddress[l_m_inner] : +# 1754| r1754_2(glval) = VariableAddress[#temp1754:29] : +# 1754| mu1754_3(decltype([...](...){...})) = Uninitialized[#temp1754:29] : &:r1754_2 +# 1754| r1754_4(glval) = FieldAddress[(captured this)] : r1754_2 +# 1754| r1754_5(glval) = VariableAddress[#this] : +# 1754| r1754_6(lambda [] type at line 1754, col. 30 *) = Load[#this] : &:r1754_5, ~m? +# 1754| r1754_7(glval) = FieldAddress[(captured this)] : r1754_6 +# 1754| r1754_8(TrivialLambdaClass) = Load[?] : &:r1754_7, ~m? +# 1754| mu1754_9(TrivialLambdaClass) = Store[?] : &:r1754_4, r1754_8 +# 1754| r1754_10(decltype([...](...){...})) = Load[#temp1754:29] : &:r1754_2, ~m? +# 1754| mu1754_11(decltype([...](...){...})) = Store[l_m_inner] : &:r1754_1, r1754_10 +# 1757| v1757_1(void) = NoOp : +# 1751| v1751_8(void) = ReturnIndirection[#this] : &:r1751_6, ~m? +# 1751| v1751_9(void) = ReturnVoid : +# 1751| v1751_10(void) = AliasedUse : ~m? +# 1751| v1751_11(void) = ExitFunction : + +# 1754| void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1751, col. 26)::operator()() const)::(lambda [] type at line 1754, col. 30)::operator()() const +# 1754| Block 0 +# 1754| v1754_1(void) = EnterFunction : +# 1754| mu1754_2(unknown) = AliasedDefinition : +# 1754| mu1754_3(unknown) = InitializeNonLocal : +# 1754| r1754_4(glval) = VariableAddress[#this] : +# 1754| mu1754_5(glval) = InitializeParameter[#this] : &:r1754_4 +# 1754| r1754_6(glval) = Load[#this] : &:r1754_4, ~m? +# 1754| mu1754_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1754_6 +# 1755| r1755_1(glval) = VariableAddress[#this] : +# 1755| r1755_2(lambda [] type at line 1754, col. 30 *) = Load[#this] : &:r1755_1, ~m? +# 1755| r1755_3(glval) = FieldAddress[(captured this)] : r1755_2 +# 1755| r1755_4(TrivialLambdaClass *) = CopyValue : r1755_3 +# 1755| r1755_5(glval) = FunctionAddress[m] : +# 1755| v1755_6(void) = Call[m] : func:r1755_5, this:r1755_4 +# 1755| mu1755_7(unknown) = ^CallSideEffect : ~m? +# 1755| v1755_8(void) = ^IndirectReadSideEffect[-1] : &:r1755_4, ~m? +# 1756| v1756_1(void) = NoOp : +# 1754| v1754_8(void) = ReturnIndirection[#this] : &:r1754_6, ~m? +# 1754| v1754_9(void) = ReturnVoid : +# 1754| v1754_10(void) = AliasedUse : ~m? +# 1754| v1754_11(void) = ExitFunction : + +# 1761| void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&) +# 1761| Block 0 +# 1761| v1761_1(void) = EnterFunction : +# 1761| mu1761_2(unknown) = AliasedDefinition : +# 1761| mu1761_3(unknown) = InitializeNonLocal : +# 1761| r1761_4(glval) = VariableAddress[p1] : +# 1761| mu1761_5(TrivialLambdaClass) = InitializeParameter[p1] : &:r1761_4 +# 1761| r1761_6(glval) = VariableAddress[p2] : +# 1761| mu1761_7(TrivialLambdaClass &) = InitializeParameter[p2] : &:r1761_6 +# 1761| r1761_8(TrivialLambdaClass &) = Load[p2] : &:r1761_6, ~m? +# 1761| mu1761_9(unknown) = InitializeIndirection[p2] : &:r1761_8 +# 1761| r1761_10(glval) = VariableAddress[p3] : +# 1761| mu1761_11(TrivialLambdaClass &&) = InitializeParameter[p3] : &:r1761_10 +# 1761| r1761_12(TrivialLambdaClass &&) = Load[p3] : &:r1761_10, ~m? +# 1761| mu1761_13(unknown) = InitializeIndirection[p3] : &:r1761_12 +# 1762| r1762_1(glval) = VariableAddress[l1] : +# 1762| mu1762_2(TrivialLambdaClass) = Uninitialized[l1] : &:r1762_1 +# 1763| r1763_1(glval) = VariableAddress[l2] : +# 1763| r1763_2(glval) = VariableAddress[#temp1763:36] : +# 1763| r1763_3(TrivialLambdaClass) = Constant[0] : +# 1763| mu1763_4(TrivialLambdaClass) = Store[#temp1763:36] : &:r1763_2, r1763_3 +# 1763| r1763_5(glval) = Convert : r1763_2 +# 1763| r1763_6(TrivialLambdaClass &) = CopyValue : r1763_5 +# 1763| mu1763_7(TrivialLambdaClass &) = Store[l2] : &:r1763_1, r1763_6 +# 1765| r1765_1(glval) = VariableAddress[l_outer1] : +# 1765| r1765_2(glval) = VariableAddress[#temp1765:20] : +# 1765| mu1765_3(decltype([...](...){...})) = Uninitialized[#temp1765:20] : &:r1765_2 +# 1765| r1765_4(glval) = FieldAddress[p1] : r1765_2 +# 1765| r1765_5(glval) = VariableAddress[p1] : +# 1765| r1765_6(TrivialLambdaClass) = Load[p1] : &:r1765_5, ~m? +# 1765| mu1765_7(TrivialLambdaClass) = Store[?] : &:r1765_4, r1765_6 +# 1765| r1765_8(glval) = FieldAddress[p2] : r1765_2 +# 1765| r1765_9(glval) = VariableAddress[p2] : +# 1765| r1765_10(TrivialLambdaClass &) = Load[p2] : &:r1765_9, ~m? +#-----| r0_1(TrivialLambdaClass) = Load[?] : &:r1765_10, ~m? +#-----| mu0_2(TrivialLambdaClass) = Store[?] : &:r1765_8, r0_1 +# 1765| r1765_11(glval) = FieldAddress[p3] : r1765_2 +# 1765| r1765_12(glval) = VariableAddress[p3] : +# 1765| r1765_13(TrivialLambdaClass &&) = Load[p3] : &:r1765_12, ~m? +#-----| r0_3(TrivialLambdaClass) = Load[?] : &:r1765_13, ~m? +#-----| mu0_4(TrivialLambdaClass) = Store[?] : &:r1765_11, r0_3 +# 1765| r1765_14(glval) = FieldAddress[l1] : r1765_2 +# 1765| r1765_15(glval) = VariableAddress[l1] : +# 1765| r1765_16(TrivialLambdaClass) = Load[l1] : &:r1765_15, ~m? +# 1765| mu1765_17(TrivialLambdaClass) = Store[?] : &:r1765_14, r1765_16 +# 1765| r1765_18(glval) = FieldAddress[l2] : r1765_2 +# 1765| r1765_19(glval) = VariableAddress[l2] : +# 1765| r1765_20(TrivialLambdaClass &) = Load[l2] : &:r1765_19, ~m? +#-----| r0_5(TrivialLambdaClass) = Load[?] : &:r1765_20, ~m? +#-----| mu0_6(TrivialLambdaClass) = Store[?] : &:r1765_18, r0_5 +# 1765| r1765_21(decltype([...](...){...})) = Load[#temp1765:20] : &:r1765_2, ~m? +# 1765| mu1765_22(decltype([...](...){...})) = Store[l_outer1] : &:r1765_1, r1765_21 +# 1768| v1768_1(void) = NoOp : +# 1761| v1761_14(void) = ReturnIndirection[p2] : &:r1761_8, ~m? +# 1761| v1761_15(void) = ReturnIndirection[p3] : &:r1761_12, ~m? +# 1761| v1761_16(void) = ReturnVoid : +# 1761| v1761_17(void) = AliasedUse : ~m? +# 1761| v1761_18(void) = ExitFunction : + +# 1765| void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21)::operator()() const +# 1765| Block 0 +# 1765| v1765_1(void) = EnterFunction : +# 1765| mu1765_2(unknown) = AliasedDefinition : +# 1765| mu1765_3(unknown) = InitializeNonLocal : +# 1765| r1765_4(glval) = VariableAddress[#this] : +# 1765| mu1765_5(glval) = InitializeParameter[#this] : &:r1765_4 +# 1765| r1765_6(glval) = Load[#this] : &:r1765_4, ~m? +# 1765| mu1765_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1765_6 +# 1766| r1766_1(glval) = VariableAddress[l_inner1] : +# 1766| r1766_2(glval) = VariableAddress[#temp1766:24] : +# 1766| mu1766_3(decltype([...](...){...})) = Uninitialized[#temp1766:24] : &:r1766_2 +# 1766| r1766_4(glval) = FieldAddress[p1] : r1766_2 +# 1766| r1766_5(glval) = VariableAddress[#this] : +# 1766| r1766_6(lambda [] type at line 1766, col. 25 *) = Load[#this] : &:r1766_5, ~m? +# 1766| r1766_7(glval) = FieldAddress[p1] : r1766_6 +# 1766| r1766_8(TrivialLambdaClass) = Load[?] : &:r1766_7, ~m? +# 1766| mu1766_9(TrivialLambdaClass) = Store[?] : &:r1766_4, r1766_8 +# 1766| r1766_10(decltype([...](...){...})) = Load[#temp1766:24] : &:r1766_2, ~m? +# 1766| mu1766_11(decltype([...](...){...})) = Store[l_inner1] : &:r1766_1, r1766_10 +# 1767| v1767_1(void) = NoOp : +# 1765| v1765_8(void) = ReturnIndirection[#this] : &:r1765_6, ~m? +# 1765| v1765_9(void) = ReturnVoid : +# 1765| v1765_10(void) = AliasedUse : ~m? +# 1765| v1765_11(void) = ExitFunction : + +# 1766| void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1765, col. 21)::operator()() const)::(lambda [] type at line 1766, col. 25)::operator()() const +# 1766| Block 0 +# 1766| v1766_1(void) = EnterFunction : +# 1766| mu1766_2(unknown) = AliasedDefinition : +# 1766| mu1766_3(unknown) = InitializeNonLocal : +# 1766| r1766_4(glval) = VariableAddress[#this] : +# 1766| mu1766_5(glval) = InitializeParameter[#this] : &:r1766_4 +# 1766| r1766_6(glval) = Load[#this] : &:r1766_4, ~m? +# 1766| mu1766_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1766_6 +# 1766| v1766_8(void) = NoOp : +# 1766| v1766_9(void) = ReturnIndirection[#this] : &:r1766_6, ~m? +# 1766| v1766_10(void) = ReturnVoid : +# 1766| v1766_11(void) = AliasedUse : ~m? +# 1766| v1766_12(void) = ExitFunction : + +# 1773| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() +# 1773| Block 0 +# 1773| v1773_1(void) = EnterFunction : +# 1773| mu1773_2(unknown) = AliasedDefinition : +# 1773| mu1773_3(unknown) = InitializeNonLocal : +# 1773| r1773_4(glval) = VariableAddress[#this] : +# 1773| mu1773_5(glval) = InitializeParameter[#this] : &:r1773_4 +# 1773| r1773_6(glval) = Load[#this] : &:r1773_4, ~m? +# 1773| mu1773_7(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1773_6 +# 1773| v1773_8(void) = NoOp : +# 1773| v1773_9(void) = ReturnIndirection[#this] : &:r1773_6, ~m? +# 1773| v1773_10(void) = ReturnVoid : +# 1773| v1773_11(void) = AliasedUse : ~m? +# 1773| v1773_12(void) = ExitFunction : + +# 1774| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) +# 1774| Block 0 +# 1774| v1774_1(void) = EnterFunction : +# 1774| mu1774_2(unknown) = AliasedDefinition : +# 1774| mu1774_3(unknown) = InitializeNonLocal : +# 1774| r1774_4(glval) = VariableAddress[#this] : +# 1774| mu1774_5(glval) = InitializeParameter[#this] : &:r1774_4 +# 1774| r1774_6(glval) = Load[#this] : &:r1774_4, ~m? +# 1774| mu1774_7(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1774_6 +# 1774| r1774_8(glval) = VariableAddress[c] : +# 1774| mu1774_9(CopyConstructorWithImplicitArgumentClass &) = InitializeParameter[c] : &:r1774_8 +# 1774| r1774_10(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1774_8, ~m? +# 1774| mu1774_11(unknown) = InitializeIndirection[c] : &:r1774_10 +# 1775| r1775_1(glval) = VariableAddress[c] : +# 1775| r1775_2(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1775_1, ~m? +# 1775| r1775_3(glval) = CopyValue : r1775_2 +# 1775| r1775_4(glval) = FieldAddress[x] : r1775_3 +# 1775| r1775_5(int) = Load[?] : &:r1775_4, ~m? +# 1775| r1775_6(glval) = VariableAddress[#this] : +# 1775| r1775_7(CopyConstructorWithImplicitArgumentClass *) = Load[#this] : &:r1775_6, ~m? +# 1775| r1775_8(glval) = FieldAddress[x] : r1775_7 +# 1775| mu1775_9(int) = Store[?] : &:r1775_8, r1775_5 +# 1776| v1776_1(void) = NoOp : +# 1774| v1774_12(void) = ReturnIndirection[#this] : &:r1774_6, ~m? +# 1774| v1774_13(void) = ReturnIndirection[c] : &:r1774_10, ~m? +# 1774| v1774_14(void) = ReturnVoid : +# 1774| v1774_15(void) = AliasedUse : ~m? +# 1774| v1774_16(void) = ExitFunction : + +# 1782| void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() +# 1782| Block 0 +# 1782| v1782_1(void) = EnterFunction : +# 1782| mu1782_2(unknown) = AliasedDefinition : +# 1782| mu1782_3(unknown) = InitializeNonLocal : +# 1782| r1782_4(glval) = VariableAddress[#this] : +# 1782| mu1782_5(glval) = InitializeParameter[#this] : &:r1782_4 +# 1782| r1782_6(glval) = Load[#this] : &:r1782_4, ~m? +# 1782| mu1782_7(CopyConstructorWithBitwiseCopyClass) = InitializeIndirection[#this] : &:r1782_6 +# 1782| v1782_8(void) = NoOp : +# 1782| v1782_9(void) = ReturnIndirection[#this] : &:r1782_6, ~m? +# 1782| v1782_10(void) = ReturnVoid : +# 1782| v1782_11(void) = AliasedUse : ~m? +# 1782| v1782_12(void) = ExitFunction : + +# 1785| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) +# 1785| Block 0 +# 1785| v1785_1(void) = EnterFunction : +# 1785| mu1785_2(unknown) = AliasedDefinition : +# 1785| mu1785_3(unknown) = InitializeNonLocal : +# 1785| r1785_4(glval) = VariableAddress[#this] : +# 1785| mu1785_5(glval) = InitializeParameter[#this] : &:r1785_4 +# 1785| r1785_6(glval) = Load[#this] : &:r1785_4, ~m? +# 1785| mu1785_7(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1785_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1738| r1738_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1738_5 -# 1738| r1738_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1738| r1738_10(glval) = VariableAddress[(unnamed parameter 0)] : -# 1738| r1738_11(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r1738_10, ~m? -# 1738| r1738_12(glval) = CopyValue : r1738_11 -# 1738| r1738_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1738_12 -# 1738| r1738_14(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1738_13 -# 1738| v1738_15(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1738_9, this:r1738_8, 0:r1738_14 -# 1738| mu1738_16(unknown) = ^CallSideEffect : ~m? -# 1738| v1738_17(void) = ^BufferReadSideEffect[0] : &:r1738_14, ~m? -# 1738| mu1738_18(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1738_8 -# 1738| v1738_19(void) = NoOp : -# 1738| v1738_20(void) = ReturnIndirection[#this] : &:r1738_6, ~m? +# 1785| r1785_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1785_5 +# 1785| r1785_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1785| r1785_10(glval) = VariableAddress[(unnamed parameter 0)] : +# 1785| r1785_11(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r1785_10, ~m? +# 1785| r1785_12(glval) = CopyValue : r1785_11 +# 1785| r1785_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1785_12 +# 1785| r1785_14(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1785_13 +# 1785| v1785_15(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1785_9, this:r1785_8, 0:r1785_14 +# 1785| mu1785_16(unknown) = ^CallSideEffect : ~m? +# 1785| v1785_17(void) = ^BufferReadSideEffect[0] : &:r1785_14, ~m? +# 1785| mu1785_18(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1785_8 +# 1785| v1785_19(void) = NoOp : +# 1785| v1785_20(void) = ReturnIndirection[#this] : &:r1785_6, ~m? #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 1738| v1738_21(void) = ReturnVoid : -# 1738| v1738_22(void) = AliasedUse : ~m? -# 1738| v1738_23(void) = ExitFunction : +# 1785| v1785_21(void) = ReturnVoid : +# 1785| v1785_22(void) = AliasedUse : ~m? +# 1785| v1785_23(void) = ExitFunction : -# 1742| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() -# 1742| Block 0 -# 1742| v1742_1(void) = EnterFunction : -# 1742| mu1742_2(unknown) = AliasedDefinition : -# 1742| mu1742_3(unknown) = InitializeNonLocal : -# 1742| r1742_4(glval) = VariableAddress[#this] : -# 1742| mu1742_5(glval) = InitializeParameter[#this] : &:r1742_4 -# 1742| r1742_6(glval) = Load[#this] : &:r1742_4, ~m? -# 1742| mu1742_7(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1742_6 -# 1742| r1742_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1742_5 -# 1742| r1742_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1742| v1742_10(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1742_9, this:r1742_8 -# 1742| mu1742_11(unknown) = ^CallSideEffect : ~m? -# 1742| mu1742_12(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1742_8 -# 1742| r1742_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : mu1742_5 -# 1742| r1742_14(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : -# 1742| v1742_15(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1742_14, this:r1742_13 -# 1742| mu1742_16(unknown) = ^CallSideEffect : ~m? -# 1742| mu1742_17(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1742_13 -# 1742| v1742_18(void) = NoOp : -# 1742| v1742_19(void) = ReturnIndirection[#this] : &:r1742_6, ~m? -# 1742| v1742_20(void) = ReturnVoid : -# 1742| v1742_21(void) = AliasedUse : ~m? -# 1742| v1742_22(void) = ExitFunction : +# 1789| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() +# 1789| Block 0 +# 1789| v1789_1(void) = EnterFunction : +# 1789| mu1789_2(unknown) = AliasedDefinition : +# 1789| mu1789_3(unknown) = InitializeNonLocal : +# 1789| r1789_4(glval) = VariableAddress[#this] : +# 1789| mu1789_5(glval) = InitializeParameter[#this] : &:r1789_4 +# 1789| r1789_6(glval) = Load[#this] : &:r1789_4, ~m? +# 1789| mu1789_7(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1789_6 +# 1789| r1789_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1789_5 +# 1789| r1789_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1789| v1789_10(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1789_9, this:r1789_8 +# 1789| mu1789_11(unknown) = ^CallSideEffect : ~m? +# 1789| mu1789_12(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1789_8 +# 1789| r1789_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : mu1789_5 +# 1789| r1789_14(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : +# 1789| v1789_15(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1789_14, this:r1789_13 +# 1789| mu1789_16(unknown) = ^CallSideEffect : ~m? +# 1789| mu1789_17(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1789_13 +# 1789| v1789_18(void) = NoOp : +# 1789| v1789_19(void) = ReturnIndirection[#this] : &:r1789_6, ~m? +# 1789| v1789_20(void) = ReturnVoid : +# 1789| v1789_21(void) = AliasedUse : ~m? +# 1789| v1789_22(void) = ExitFunction : -# 1745| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) -# 1745| Block 0 -# 1745| v1745_1(void) = EnterFunction : -# 1745| mu1745_2(unknown) = AliasedDefinition : -# 1745| mu1745_3(unknown) = InitializeNonLocal : -# 1745| r1745_4(glval) = VariableAddress[#this] : -# 1745| mu1745_5(glval) = InitializeParameter[#this] : &:r1745_4 -# 1745| r1745_6(glval) = Load[#this] : &:r1745_4, ~m? -# 1745| mu1745_7(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1745_6 +# 1792| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) +# 1792| Block 0 +# 1792| v1792_1(void) = EnterFunction : +# 1792| mu1792_2(unknown) = AliasedDefinition : +# 1792| mu1792_3(unknown) = InitializeNonLocal : +# 1792| r1792_4(glval) = VariableAddress[#this] : +# 1792| mu1792_5(glval) = InitializeParameter[#this] : &:r1792_4 +# 1792| r1792_6(glval) = Load[#this] : &:r1792_4, ~m? +# 1792| mu1792_7(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1792_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(CopyConstructorTestVirtualClass &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1745| r1745_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1745_5 -# 1745| r1745_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1745| r1745_10(glval) = VariableAddress[(unnamed parameter 0)] : -# 1745| r1745_11(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r1745_10, ~m? -# 1745| r1745_12(glval) = CopyValue : r1745_11 -# 1745| r1745_13(glval) = ConvertToVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1745_12 -# 1745| r1745_14(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1745_13 -# 1745| v1745_15(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1745_9, this:r1745_8, 0:r1745_14 -# 1745| mu1745_16(unknown) = ^CallSideEffect : ~m? -# 1745| v1745_17(void) = ^BufferReadSideEffect[0] : &:r1745_14, ~m? -# 1745| mu1745_18(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1745_8 -# 1745| v1745_19(void) = NoOp : -# 1745| v1745_20(void) = ReturnIndirection[#this] : &:r1745_6, ~m? +# 1792| r1792_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1792_5 +# 1792| r1792_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1792| r1792_10(glval) = VariableAddress[(unnamed parameter 0)] : +# 1792| r1792_11(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r1792_10, ~m? +# 1792| r1792_12(glval) = CopyValue : r1792_11 +# 1792| r1792_13(glval) = ConvertToVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1792_12 +# 1792| r1792_14(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1792_13 +# 1792| v1792_15(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1792_9, this:r1792_8, 0:r1792_14 +# 1792| mu1792_16(unknown) = ^CallSideEffect : ~m? +# 1792| v1792_17(void) = ^BufferReadSideEffect[0] : &:r1792_14, ~m? +# 1792| mu1792_18(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1792_8 +# 1792| v1792_19(void) = NoOp : +# 1792| v1792_20(void) = ReturnIndirection[#this] : &:r1792_6, ~m? #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 1745| v1745_21(void) = ReturnVoid : -# 1745| v1745_22(void) = AliasedUse : ~m? -# 1745| v1745_23(void) = ExitFunction : +# 1792| v1792_21(void) = ReturnVoid : +# 1792| v1792_22(void) = AliasedUse : ~m? +# 1792| v1792_23(void) = ExitFunction : -# 1749| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass() -# 1749| Block 0 -# 1749| v1749_1(void) = EnterFunction : -# 1749| mu1749_2(unknown) = AliasedDefinition : -# 1749| mu1749_3(unknown) = InitializeNonLocal : -# 1749| r1749_4(glval) = VariableAddress[#this] : -# 1749| mu1749_5(glval) = InitializeParameter[#this] : &:r1749_4 -# 1749| r1749_6(glval) = Load[#this] : &:r1749_4, ~m? -# 1749| mu1749_7(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1749_6 -# 1749| r1749_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1749_5 -# 1749| r1749_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1749| v1749_10(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1749_9, this:r1749_8 -# 1749| mu1749_11(unknown) = ^CallSideEffect : ~m? -# 1749| mu1749_12(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1749_8 -# 1749| r1749_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : mu1749_5 -# 1749| r1749_14(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : -# 1749| v1749_15(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1749_14, this:r1749_13 -# 1749| mu1749_16(unknown) = ^CallSideEffect : ~m? -# 1749| mu1749_17(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1749_13 -# 1749| v1749_18(void) = NoOp : -# 1749| v1749_19(void) = ReturnIndirection[#this] : &:r1749_6, ~m? -# 1749| v1749_20(void) = ReturnVoid : -# 1749| v1749_21(void) = AliasedUse : ~m? -# 1749| v1749_22(void) = ExitFunction : +# 1796| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass() +# 1796| Block 0 +# 1796| v1796_1(void) = EnterFunction : +# 1796| mu1796_2(unknown) = AliasedDefinition : +# 1796| mu1796_3(unknown) = InitializeNonLocal : +# 1796| r1796_4(glval) = VariableAddress[#this] : +# 1796| mu1796_5(glval) = InitializeParameter[#this] : &:r1796_4 +# 1796| r1796_6(glval) = Load[#this] : &:r1796_4, ~m? +# 1796| mu1796_7(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1796_6 +# 1796| r1796_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1796_5 +# 1796| r1796_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1796| v1796_10(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1796_9, this:r1796_8 +# 1796| mu1796_11(unknown) = ^CallSideEffect : ~m? +# 1796| mu1796_12(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1796_8 +# 1796| r1796_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : mu1796_5 +# 1796| r1796_14(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : +# 1796| v1796_15(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1796_14, this:r1796_13 +# 1796| mu1796_16(unknown) = ^CallSideEffect : ~m? +# 1796| mu1796_17(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1796_13 +# 1796| v1796_18(void) = NoOp : +# 1796| v1796_19(void) = ReturnIndirection[#this] : &:r1796_6, ~m? +# 1796| v1796_20(void) = ReturnVoid : +# 1796| v1796_21(void) = AliasedUse : ~m? +# 1796| v1796_22(void) = ExitFunction : -# 1752| int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) -# 1752| Block 0 -# 1752| v1752_1(void) = EnterFunction : -# 1752| mu1752_2(unknown) = AliasedDefinition : -# 1752| mu1752_3(unknown) = InitializeNonLocal : -# 1753| r1753_1(glval) = VariableAddress[x] : -# 1753| mu1753_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[x] : &:r1753_1 -# 1753| r1753_3(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1753_1, ~m? -# 1753| mu1753_4(unknown) = InitializeIndirection[x] : &:r1753_3 -# 1754| r1754_1(glval) = VariableAddress[y] : -# 1754| mu1754_2(CopyConstructorTestVirtualClass &) = InitializeParameter[y] : &:r1754_1 -# 1754| r1754_3(CopyConstructorTestVirtualClass &) = Load[y] : &:r1754_1, ~m? -# 1754| mu1754_4(unknown) = InitializeIndirection[y] : &:r1754_3 -# 1755| r1755_1(glval) = VariableAddress[cx] : -# 1755| mu1755_2(CopyConstructorTestNonVirtualClass) = Uninitialized[cx] : &:r1755_1 -# 1755| r1755_3(glval) = FunctionAddress[CopyConstructorTestNonVirtualClass] : -# 1755| r1755_4(glval) = VariableAddress[x] : -# 1755| r1755_5(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1755_4, ~m? -# 1755| r1755_6(glval) = CopyValue : r1755_5 -# 1755| r1755_7(CopyConstructorTestNonVirtualClass &) = CopyValue : r1755_6 -# 1755| v1755_8(void) = Call[CopyConstructorTestNonVirtualClass] : func:r1755_3, this:r1755_1, 0:r1755_7 -# 1755| mu1755_9(unknown) = ^CallSideEffect : ~m? -# 1755| v1755_10(void) = ^BufferReadSideEffect[0] : &:r1755_7, ~m? -# 1755| mu1755_11(CopyConstructorTestNonVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1755_1 -# 1756| r1756_1(glval) = VariableAddress[cy] : -# 1756| mu1756_2(CopyConstructorTestVirtualClass) = Uninitialized[cy] : &:r1756_1 -# 1756| r1756_3(glval) = FunctionAddress[CopyConstructorTestVirtualClass] : -# 1756| r1756_4(glval) = VariableAddress[y] : -# 1756| r1756_5(CopyConstructorTestVirtualClass &) = Load[y] : &:r1756_4, ~m? -# 1756| r1756_6(glval) = CopyValue : r1756_5 -# 1756| r1756_7(CopyConstructorTestVirtualClass &) = CopyValue : r1756_6 -# 1756| v1756_8(void) = Call[CopyConstructorTestVirtualClass] : func:r1756_3, this:r1756_1, 0:r1756_7 -# 1756| mu1756_9(unknown) = ^CallSideEffect : ~m? -# 1756| v1756_10(void) = ^BufferReadSideEffect[0] : &:r1756_7, ~m? -# 1756| mu1756_11(CopyConstructorTestVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1756_1 -# 1757| r1757_1(glval) = VariableAddress[#return] : -# 1757| mu1757_2(int) = Uninitialized[#return] : &:r1757_1 -# 1753| v1753_5(void) = ReturnIndirection[x] : &:r1753_3, ~m? -# 1754| v1754_5(void) = ReturnIndirection[y] : &:r1754_3, ~m? -# 1752| r1752_4(glval) = VariableAddress[#return] : -# 1752| v1752_5(void) = ReturnValue : &:r1752_4, ~m? -# 1752| v1752_6(void) = AliasedUse : ~m? -# 1752| v1752_7(void) = ExitFunction : +# 1799| int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) +# 1799| Block 0 +# 1799| v1799_1(void) = EnterFunction : +# 1799| mu1799_2(unknown) = AliasedDefinition : +# 1799| mu1799_3(unknown) = InitializeNonLocal : +# 1800| r1800_1(glval) = VariableAddress[x] : +# 1800| mu1800_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[x] : &:r1800_1 +# 1800| r1800_3(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1800_1, ~m? +# 1800| mu1800_4(unknown) = InitializeIndirection[x] : &:r1800_3 +# 1801| r1801_1(glval) = VariableAddress[y] : +# 1801| mu1801_2(CopyConstructorTestVirtualClass &) = InitializeParameter[y] : &:r1801_1 +# 1801| r1801_3(CopyConstructorTestVirtualClass &) = Load[y] : &:r1801_1, ~m? +# 1801| mu1801_4(unknown) = InitializeIndirection[y] : &:r1801_3 +# 1802| r1802_1(glval) = VariableAddress[cx] : +# 1802| mu1802_2(CopyConstructorTestNonVirtualClass) = Uninitialized[cx] : &:r1802_1 +# 1802| r1802_3(glval) = FunctionAddress[CopyConstructorTestNonVirtualClass] : +# 1802| r1802_4(glval) = VariableAddress[x] : +# 1802| r1802_5(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1802_4, ~m? +# 1802| r1802_6(glval) = CopyValue : r1802_5 +# 1802| r1802_7(CopyConstructorTestNonVirtualClass &) = CopyValue : r1802_6 +# 1802| v1802_8(void) = Call[CopyConstructorTestNonVirtualClass] : func:r1802_3, this:r1802_1, 0:r1802_7 +# 1802| mu1802_9(unknown) = ^CallSideEffect : ~m? +# 1802| v1802_10(void) = ^BufferReadSideEffect[0] : &:r1802_7, ~m? +# 1802| mu1802_11(CopyConstructorTestNonVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1802_1 +# 1803| r1803_1(glval) = VariableAddress[cy] : +# 1803| mu1803_2(CopyConstructorTestVirtualClass) = Uninitialized[cy] : &:r1803_1 +# 1803| r1803_3(glval) = FunctionAddress[CopyConstructorTestVirtualClass] : +# 1803| r1803_4(glval) = VariableAddress[y] : +# 1803| r1803_5(CopyConstructorTestVirtualClass &) = Load[y] : &:r1803_4, ~m? +# 1803| r1803_6(glval) = CopyValue : r1803_5 +# 1803| r1803_7(CopyConstructorTestVirtualClass &) = CopyValue : r1803_6 +# 1803| v1803_8(void) = Call[CopyConstructorTestVirtualClass] : func:r1803_3, this:r1803_1, 0:r1803_7 +# 1803| mu1803_9(unknown) = ^CallSideEffect : ~m? +# 1803| v1803_10(void) = ^BufferReadSideEffect[0] : &:r1803_7, ~m? +# 1803| mu1803_11(CopyConstructorTestVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1803_1 +# 1804| r1804_1(glval) = VariableAddress[#return] : +# 1804| mu1804_2(int) = Uninitialized[#return] : &:r1804_1 +# 1800| v1800_5(void) = ReturnIndirection[x] : &:r1800_3, ~m? +# 1801| v1801_5(void) = ReturnIndirection[y] : &:r1801_3, ~m? +# 1799| r1799_4(glval) = VariableAddress[#return] : +# 1799| v1799_5(void) = ReturnValue : &:r1799_4, ~m? +# 1799| v1799_6(void) = AliasedUse : ~m? +# 1799| v1799_7(void) = ExitFunction : -# 1759| void if_initialization(int) -# 1759| Block 0 -# 1759| v1759_1(void) = EnterFunction : -# 1759| mu1759_2(unknown) = AliasedDefinition : -# 1759| mu1759_3(unknown) = InitializeNonLocal : -# 1759| r1759_4(glval) = VariableAddress[x] : -# 1759| mu1759_5(int) = InitializeParameter[x] : &:r1759_4 -# 1760| r1760_1(glval) = VariableAddress[y] : -# 1760| r1760_2(glval) = VariableAddress[x] : -# 1760| r1760_3(int) = Load[x] : &:r1760_2, ~m? -# 1760| mu1760_4(int) = Store[y] : &:r1760_1, r1760_3 -# 1760| r1760_5(glval) = VariableAddress[x] : -# 1760| r1760_6(int) = Load[x] : &:r1760_5, ~m? -# 1760| r1760_7(int) = Constant[1] : -# 1760| r1760_8(int) = Add : r1760_6, r1760_7 -# 1760| r1760_9(int) = Constant[0] : -# 1760| r1760_10(bool) = CompareNE : r1760_8, r1760_9 -# 1760| v1760_11(void) = ConditionalBranch : r1760_10 +# 1806| void if_initialization(int) +# 1806| Block 0 +# 1806| v1806_1(void) = EnterFunction : +# 1806| mu1806_2(unknown) = AliasedDefinition : +# 1806| mu1806_3(unknown) = InitializeNonLocal : +# 1806| r1806_4(glval) = VariableAddress[x] : +# 1806| mu1806_5(int) = InitializeParameter[x] : &:r1806_4 +# 1807| r1807_1(glval) = VariableAddress[y] : +# 1807| r1807_2(glval) = VariableAddress[x] : +# 1807| r1807_3(int) = Load[x] : &:r1807_2, ~m? +# 1807| mu1807_4(int) = Store[y] : &:r1807_1, r1807_3 +# 1807| r1807_5(glval) = VariableAddress[x] : +# 1807| r1807_6(int) = Load[x] : &:r1807_5, ~m? +# 1807| r1807_7(int) = Constant[1] : +# 1807| r1807_8(int) = Add : r1807_6, r1807_7 +# 1807| r1807_9(int) = Constant[0] : +# 1807| r1807_10(bool) = CompareNE : r1807_8, r1807_9 +# 1807| v1807_11(void) = ConditionalBranch : r1807_10 #-----| False -> Block 2 #-----| True -> Block 1 -# 1761| Block 1 -# 1761| r1761_1(glval) = VariableAddress[x] : -# 1761| r1761_2(int) = Load[x] : &:r1761_1, ~m? -# 1761| r1761_3(glval) = VariableAddress[y] : -# 1761| r1761_4(int) = Load[y] : &:r1761_3, ~m? -# 1761| r1761_5(int) = Add : r1761_2, r1761_4 -# 1761| r1761_6(glval) = VariableAddress[x] : -# 1761| mu1761_7(int) = Store[x] : &:r1761_6, r1761_5 +# 1808| Block 1 +# 1808| r1808_1(glval) = VariableAddress[x] : +# 1808| r1808_2(int) = Load[x] : &:r1808_1, ~m? +# 1808| r1808_3(glval) = VariableAddress[y] : +# 1808| r1808_4(int) = Load[y] : &:r1808_3, ~m? +# 1808| r1808_5(int) = Add : r1808_2, r1808_4 +# 1808| r1808_6(glval) = VariableAddress[x] : +# 1808| mu1808_7(int) = Store[x] : &:r1808_6, r1808_5 #-----| Goto -> Block 2 -# 1764| Block 2 -# 1764| r1764_1(glval) = VariableAddress[w] : -# 1764| mu1764_2(int) = Uninitialized[w] : &:r1764_1 -# 1765| r1765_1(glval) = VariableAddress[x] : -# 1765| r1765_2(int) = Load[x] : &:r1765_1, ~m? -# 1765| r1765_3(glval) = VariableAddress[w] : -# 1765| mu1765_4(int) = Store[w] : &:r1765_3, r1765_2 -# 1765| r1765_5(glval) = VariableAddress[x] : -# 1765| r1765_6(int) = Load[x] : &:r1765_5, ~m? -# 1765| r1765_7(int) = Constant[1] : -# 1765| r1765_8(int) = Add : r1765_6, r1765_7 -# 1765| r1765_9(int) = Constant[0] : -# 1765| r1765_10(bool) = CompareNE : r1765_8, r1765_9 -# 1765| v1765_11(void) = ConditionalBranch : r1765_10 +# 1811| Block 2 +# 1811| r1811_1(glval) = VariableAddress[w] : +# 1811| mu1811_2(int) = Uninitialized[w] : &:r1811_1 +# 1812| r1812_1(glval) = VariableAddress[x] : +# 1812| r1812_2(int) = Load[x] : &:r1812_1, ~m? +# 1812| r1812_3(glval) = VariableAddress[w] : +# 1812| mu1812_4(int) = Store[w] : &:r1812_3, r1812_2 +# 1812| r1812_5(glval) = VariableAddress[x] : +# 1812| r1812_6(int) = Load[x] : &:r1812_5, ~m? +# 1812| r1812_7(int) = Constant[1] : +# 1812| r1812_8(int) = Add : r1812_6, r1812_7 +# 1812| r1812_9(int) = Constant[0] : +# 1812| r1812_10(bool) = CompareNE : r1812_8, r1812_9 +# 1812| v1812_11(void) = ConditionalBranch : r1812_10 #-----| False -> Block 4 #-----| True -> Block 3 -# 1766| Block 3 -# 1766| r1766_1(glval) = VariableAddress[x] : -# 1766| r1766_2(int) = Load[x] : &:r1766_1, ~m? -# 1766| r1766_3(glval) = VariableAddress[w] : -# 1766| r1766_4(int) = Load[w] : &:r1766_3, ~m? -# 1766| r1766_5(int) = Add : r1766_2, r1766_4 -# 1766| r1766_6(glval) = VariableAddress[x] : -# 1766| mu1766_7(int) = Store[x] : &:r1766_6, r1766_5 +# 1813| Block 3 +# 1813| r1813_1(glval) = VariableAddress[x] : +# 1813| r1813_2(int) = Load[x] : &:r1813_1, ~m? +# 1813| r1813_3(glval) = VariableAddress[w] : +# 1813| r1813_4(int) = Load[w] : &:r1813_3, ~m? +# 1813| r1813_5(int) = Add : r1813_2, r1813_4 +# 1813| r1813_6(glval) = VariableAddress[x] : +# 1813| mu1813_7(int) = Store[x] : &:r1813_6, r1813_5 #-----| Goto -> Block 4 -# 1769| Block 4 -# 1769| r1769_1(glval) = VariableAddress[x] : -# 1769| r1769_2(int) = Load[x] : &:r1769_1, ~m? -# 1769| r1769_3(glval) = VariableAddress[w] : -# 1769| mu1769_4(int) = Store[w] : &:r1769_3, r1769_2 -# 1769| r1769_5(glval) = VariableAddress[w2] : -# 1769| r1769_6(glval) = VariableAddress[w] : -# 1769| r1769_7(int) = Load[w] : &:r1769_6, ~m? -# 1769| mu1769_8(int) = Store[w2] : &:r1769_5, r1769_7 -# 1769| r1769_9(glval) = VariableAddress[w2] : -# 1769| r1769_10(int) = Load[w2] : &:r1769_9, ~m? -# 1769| r1769_11(int) = Constant[0] : -# 1769| r1769_12(bool) = CompareNE : r1769_10, r1769_11 -# 1769| r1769_13(bool) = CopyValue : r1769_12 -# 1769| v1769_14(void) = ConditionalBranch : r1769_13 +# 1816| Block 4 +# 1816| r1816_1(glval) = VariableAddress[x] : +# 1816| r1816_2(int) = Load[x] : &:r1816_1, ~m? +# 1816| r1816_3(glval) = VariableAddress[w] : +# 1816| mu1816_4(int) = Store[w] : &:r1816_3, r1816_2 +# 1816| r1816_5(glval) = VariableAddress[w2] : +# 1816| r1816_6(glval) = VariableAddress[w] : +# 1816| r1816_7(int) = Load[w] : &:r1816_6, ~m? +# 1816| mu1816_8(int) = Store[w2] : &:r1816_5, r1816_7 +# 1816| r1816_9(glval) = VariableAddress[w2] : +# 1816| r1816_10(int) = Load[w2] : &:r1816_9, ~m? +# 1816| r1816_11(int) = Constant[0] : +# 1816| r1816_12(bool) = CompareNE : r1816_10, r1816_11 +# 1816| r1816_13(bool) = CopyValue : r1816_12 +# 1816| v1816_14(void) = ConditionalBranch : r1816_13 #-----| False -> Block 6 #-----| True -> Block 5 -# 1770| Block 5 -# 1770| r1770_1(glval) = VariableAddress[x] : -# 1770| r1770_2(int) = Load[x] : &:r1770_1, ~m? -# 1770| r1770_3(glval) = VariableAddress[w] : -# 1770| r1770_4(int) = Load[w] : &:r1770_3, ~m? -# 1770| r1770_5(int) = Add : r1770_2, r1770_4 -# 1770| r1770_6(glval) = VariableAddress[x] : -# 1770| mu1770_7(int) = Store[x] : &:r1770_6, r1770_5 +# 1817| Block 5 +# 1817| r1817_1(glval) = VariableAddress[x] : +# 1817| r1817_2(int) = Load[x] : &:r1817_1, ~m? +# 1817| r1817_3(glval) = VariableAddress[w] : +# 1817| r1817_4(int) = Load[w] : &:r1817_3, ~m? +# 1817| r1817_5(int) = Add : r1817_2, r1817_4 +# 1817| r1817_6(glval) = VariableAddress[x] : +# 1817| mu1817_7(int) = Store[x] : &:r1817_6, r1817_5 #-----| Goto -> Block 6 -# 1773| Block 6 -# 1773| r1773_1(glval) = VariableAddress[v] : -# 1773| r1773_2(glval) = VariableAddress[x] : -# 1773| r1773_3(int) = Load[x] : &:r1773_2, ~m? -# 1773| mu1773_4(int) = Store[v] : &:r1773_1, r1773_3 -# 1773| r1773_5(glval) = VariableAddress[v2] : -# 1773| r1773_6(glval) = VariableAddress[v] : -# 1773| r1773_7(int) = Load[v] : &:r1773_6, ~m? -# 1773| mu1773_8(int) = Store[v2] : &:r1773_5, r1773_7 -# 1773| r1773_9(glval) = VariableAddress[v2] : -# 1773| r1773_10(int) = Load[v2] : &:r1773_9, ~m? -# 1773| r1773_11(int) = Constant[0] : -# 1773| r1773_12(bool) = CompareNE : r1773_10, r1773_11 -# 1773| r1773_13(bool) = CopyValue : r1773_12 -# 1773| v1773_14(void) = ConditionalBranch : r1773_13 +# 1820| Block 6 +# 1820| r1820_1(glval) = VariableAddress[v] : +# 1820| r1820_2(glval) = VariableAddress[x] : +# 1820| r1820_3(int) = Load[x] : &:r1820_2, ~m? +# 1820| mu1820_4(int) = Store[v] : &:r1820_1, r1820_3 +# 1820| r1820_5(glval) = VariableAddress[v2] : +# 1820| r1820_6(glval) = VariableAddress[v] : +# 1820| r1820_7(int) = Load[v] : &:r1820_6, ~m? +# 1820| mu1820_8(int) = Store[v2] : &:r1820_5, r1820_7 +# 1820| r1820_9(glval) = VariableAddress[v2] : +# 1820| r1820_10(int) = Load[v2] : &:r1820_9, ~m? +# 1820| r1820_11(int) = Constant[0] : +# 1820| r1820_12(bool) = CompareNE : r1820_10, r1820_11 +# 1820| r1820_13(bool) = CopyValue : r1820_12 +# 1820| v1820_14(void) = ConditionalBranch : r1820_13 #-----| False -> Block 8 #-----| True -> Block 7 -# 1774| Block 7 -# 1774| r1774_1(glval) = VariableAddress[x] : -# 1774| r1774_2(int) = Load[x] : &:r1774_1, ~m? -# 1774| r1774_3(glval) = VariableAddress[v] : -# 1774| r1774_4(int) = Load[v] : &:r1774_3, ~m? -# 1774| r1774_5(int) = Add : r1774_2, r1774_4 -# 1774| r1774_6(glval) = VariableAddress[x] : -# 1774| mu1774_7(int) = Store[x] : &:r1774_6, r1774_5 +# 1821| Block 7 +# 1821| r1821_1(glval) = VariableAddress[x] : +# 1821| r1821_2(int) = Load[x] : &:r1821_1, ~m? +# 1821| r1821_3(glval) = VariableAddress[v] : +# 1821| r1821_4(int) = Load[v] : &:r1821_3, ~m? +# 1821| r1821_5(int) = Add : r1821_2, r1821_4 +# 1821| r1821_6(glval) = VariableAddress[x] : +# 1821| mu1821_7(int) = Store[x] : &:r1821_6, r1821_5 #-----| Goto -> Block 8 -# 1777| Block 8 -# 1777| r1777_1(glval) = VariableAddress[z] : -# 1777| r1777_2(glval) = VariableAddress[x] : -# 1777| r1777_3(int) = Load[x] : &:r1777_2, ~m? -# 1777| mu1777_4(int) = Store[z] : &:r1777_1, r1777_3 -# 1778| r1778_1(glval) = VariableAddress[z] : -# 1778| r1778_2(int) = Load[z] : &:r1778_1, ~m? -# 1778| r1778_3(int) = Constant[0] : -# 1778| r1778_4(bool) = CompareNE : r1778_2, r1778_3 -# 1778| v1778_5(void) = ConditionalBranch : r1778_4 +# 1824| Block 8 +# 1824| r1824_1(glval) = VariableAddress[z] : +# 1824| r1824_2(glval) = VariableAddress[x] : +# 1824| r1824_3(int) = Load[x] : &:r1824_2, ~m? +# 1824| mu1824_4(int) = Store[z] : &:r1824_1, r1824_3 +# 1825| r1825_1(glval) = VariableAddress[z] : +# 1825| r1825_2(int) = Load[z] : &:r1825_1, ~m? +# 1825| r1825_3(int) = Constant[0] : +# 1825| r1825_4(bool) = CompareNE : r1825_2, r1825_3 +# 1825| v1825_5(void) = ConditionalBranch : r1825_4 #-----| False -> Block 10 #-----| True -> Block 9 -# 1779| Block 9 -# 1779| r1779_1(glval) = VariableAddress[x] : -# 1779| r1779_2(int) = Load[x] : &:r1779_1, ~m? -# 1779| r1779_3(glval) = VariableAddress[z] : -# 1779| r1779_4(int) = Load[z] : &:r1779_3, ~m? -# 1779| r1779_5(int) = Add : r1779_2, r1779_4 -# 1779| r1779_6(glval) = VariableAddress[x] : -# 1779| mu1779_7(int) = Store[x] : &:r1779_6, r1779_5 +# 1826| Block 9 +# 1826| r1826_1(glval) = VariableAddress[x] : +# 1826| r1826_2(int) = Load[x] : &:r1826_1, ~m? +# 1826| r1826_3(glval) = VariableAddress[z] : +# 1826| r1826_4(int) = Load[z] : &:r1826_3, ~m? +# 1826| r1826_5(int) = Add : r1826_2, r1826_4 +# 1826| r1826_6(glval) = VariableAddress[x] : +# 1826| mu1826_7(int) = Store[x] : &:r1826_6, r1826_5 #-----| Goto -> Block 10 -# 1782| Block 10 -# 1782| r1782_1(glval) = VariableAddress[z2] : -# 1782| r1782_2(glval) = VariableAddress[z] : -# 1782| r1782_3(int) = Load[z] : &:r1782_2, ~m? -# 1782| mu1782_4(int) = Store[z2] : &:r1782_1, r1782_3 -# 1782| r1782_5(glval) = VariableAddress[z2] : -# 1782| r1782_6(int) = Load[z2] : &:r1782_5, ~m? -# 1782| r1782_7(int) = Constant[0] : -# 1782| r1782_8(bool) = CompareNE : r1782_6, r1782_7 -# 1782| r1782_9(bool) = CopyValue : r1782_8 -# 1782| v1782_10(void) = ConditionalBranch : r1782_9 +# 1829| Block 10 +# 1829| r1829_1(glval) = VariableAddress[z2] : +# 1829| r1829_2(glval) = VariableAddress[z] : +# 1829| r1829_3(int) = Load[z] : &:r1829_2, ~m? +# 1829| mu1829_4(int) = Store[z2] : &:r1829_1, r1829_3 +# 1829| r1829_5(glval) = VariableAddress[z2] : +# 1829| r1829_6(int) = Load[z2] : &:r1829_5, ~m? +# 1829| r1829_7(int) = Constant[0] : +# 1829| r1829_8(bool) = CompareNE : r1829_6, r1829_7 +# 1829| r1829_9(bool) = CopyValue : r1829_8 +# 1829| v1829_10(void) = ConditionalBranch : r1829_9 #-----| False -> Block 12 #-----| True -> Block 11 -# 1783| Block 11 -# 1783| r1783_1(glval) = VariableAddress[z2] : -# 1783| r1783_2(int) = Load[z2] : &:r1783_1, ~m? -# 1783| r1783_3(glval) = VariableAddress[x] : -# 1783| r1783_4(int) = Load[x] : &:r1783_3, ~m? -# 1783| r1783_5(int) = Add : r1783_4, r1783_2 -# 1783| mu1783_6(int) = Store[x] : &:r1783_3, r1783_5 +# 1830| Block 11 +# 1830| r1830_1(glval) = VariableAddress[z2] : +# 1830| r1830_2(int) = Load[z2] : &:r1830_1, ~m? +# 1830| r1830_3(glval) = VariableAddress[x] : +# 1830| r1830_4(int) = Load[x] : &:r1830_3, ~m? +# 1830| r1830_5(int) = Add : r1830_4, r1830_2 +# 1830| mu1830_6(int) = Store[x] : &:r1830_3, r1830_5 #-----| Goto -> Block 12 -# 1785| Block 12 -# 1785| v1785_1(void) = NoOp : -# 1759| v1759_6(void) = ReturnVoid : -# 1759| v1759_7(void) = AliasedUse : ~m? -# 1759| v1759_8(void) = ExitFunction : +# 1832| Block 12 +# 1832| v1832_1(void) = NoOp : +# 1806| v1806_6(void) = ReturnVoid : +# 1806| v1806_7(void) = AliasedUse : ~m? +# 1806| v1806_8(void) = ExitFunction : -# 1787| void switch_initialization(int) -# 1787| Block 0 -# 1787| v1787_1(void) = EnterFunction : -# 1787| mu1787_2(unknown) = AliasedDefinition : -# 1787| mu1787_3(unknown) = InitializeNonLocal : -# 1787| r1787_4(glval) = VariableAddress[x] : -# 1787| mu1787_5(int) = InitializeParameter[x] : &:r1787_4 -# 1788| r1788_1(glval) = VariableAddress[y] : -# 1788| r1788_2(glval) = VariableAddress[x] : -# 1788| r1788_3(int) = Load[x] : &:r1788_2, ~m? -# 1788| mu1788_4(int) = Store[y] : &:r1788_1, r1788_3 -# 1788| r1788_5(glval) = VariableAddress[x] : -# 1788| r1788_6(int) = Load[x] : &:r1788_5, ~m? -# 1788| r1788_7(int) = Constant[1] : -# 1788| r1788_8(int) = Add : r1788_6, r1788_7 -# 1788| v1788_9(void) = Switch : r1788_8 +# 1834| void switch_initialization(int) +# 1834| Block 0 +# 1834| v1834_1(void) = EnterFunction : +# 1834| mu1834_2(unknown) = AliasedDefinition : +# 1834| mu1834_3(unknown) = InitializeNonLocal : +# 1834| r1834_4(glval) = VariableAddress[x] : +# 1834| mu1834_5(int) = InitializeParameter[x] : &:r1834_4 +# 1835| r1835_1(glval) = VariableAddress[y] : +# 1835| r1835_2(glval) = VariableAddress[x] : +# 1835| r1835_3(int) = Load[x] : &:r1835_2, ~m? +# 1835| mu1835_4(int) = Store[y] : &:r1835_1, r1835_3 +# 1835| r1835_5(glval) = VariableAddress[x] : +# 1835| r1835_6(int) = Load[x] : &:r1835_5, ~m? +# 1835| r1835_7(int) = Constant[1] : +# 1835| r1835_8(int) = Add : r1835_6, r1835_7 +# 1835| v1835_9(void) = Switch : r1835_8 #-----| Default -> Block 1 -# 1789| Block 1 -# 1789| v1789_1(void) = NoOp : -# 1790| r1790_1(glval) = VariableAddress[x] : -# 1790| r1790_2(int) = Load[x] : &:r1790_1, ~m? -# 1790| r1790_3(glval) = VariableAddress[y] : -# 1790| r1790_4(int) = Load[y] : &:r1790_3, ~m? -# 1790| r1790_5(int) = Add : r1790_2, r1790_4 -# 1790| r1790_6(glval) = VariableAddress[x] : -# 1790| mu1790_7(int) = Store[x] : &:r1790_6, r1790_5 -# 1793| r1793_1(glval) = VariableAddress[w] : -# 1793| mu1793_2(int) = Uninitialized[w] : &:r1793_1 -# 1794| r1794_1(glval) = VariableAddress[x] : -# 1794| r1794_2(int) = Load[x] : &:r1794_1, ~m? -# 1794| r1794_3(glval) = VariableAddress[w] : -# 1794| mu1794_4(int) = Store[w] : &:r1794_3, r1794_2 -# 1794| r1794_5(glval) = VariableAddress[x] : -# 1794| r1794_6(int) = Load[x] : &:r1794_5, ~m? -# 1794| r1794_7(int) = Constant[1] : -# 1794| r1794_8(int) = Add : r1794_6, r1794_7 -# 1794| v1794_9(void) = Switch : r1794_8 +# 1836| Block 1 +# 1836| v1836_1(void) = NoOp : +# 1837| r1837_1(glval) = VariableAddress[x] : +# 1837| r1837_2(int) = Load[x] : &:r1837_1, ~m? +# 1837| r1837_3(glval) = VariableAddress[y] : +# 1837| r1837_4(int) = Load[y] : &:r1837_3, ~m? +# 1837| r1837_5(int) = Add : r1837_2, r1837_4 +# 1837| r1837_6(glval) = VariableAddress[x] : +# 1837| mu1837_7(int) = Store[x] : &:r1837_6, r1837_5 +# 1840| r1840_1(glval) = VariableAddress[w] : +# 1840| mu1840_2(int) = Uninitialized[w] : &:r1840_1 +# 1841| r1841_1(glval) = VariableAddress[x] : +# 1841| r1841_2(int) = Load[x] : &:r1841_1, ~m? +# 1841| r1841_3(glval) = VariableAddress[w] : +# 1841| mu1841_4(int) = Store[w] : &:r1841_3, r1841_2 +# 1841| r1841_5(glval) = VariableAddress[x] : +# 1841| r1841_6(int) = Load[x] : &:r1841_5, ~m? +# 1841| r1841_7(int) = Constant[1] : +# 1841| r1841_8(int) = Add : r1841_6, r1841_7 +# 1841| v1841_9(void) = Switch : r1841_8 #-----| Default -> Block 2 -# 1795| Block 2 -# 1795| v1795_1(void) = NoOp : -# 1796| r1796_1(glval) = VariableAddress[x] : -# 1796| r1796_2(int) = Load[x] : &:r1796_1, ~m? -# 1796| r1796_3(glval) = VariableAddress[w] : -# 1796| r1796_4(int) = Load[w] : &:r1796_3, ~m? -# 1796| r1796_5(int) = Add : r1796_2, r1796_4 -# 1796| r1796_6(glval) = VariableAddress[x] : -# 1796| mu1796_7(int) = Store[x] : &:r1796_6, r1796_5 -# 1799| r1799_1(glval) = VariableAddress[x] : -# 1799| r1799_2(int) = Load[x] : &:r1799_1, ~m? -# 1799| r1799_3(glval) = VariableAddress[w] : -# 1799| mu1799_4(int) = Store[w] : &:r1799_3, r1799_2 -# 1799| r1799_5(glval) = VariableAddress[w2] : -# 1799| r1799_6(glval) = VariableAddress[w] : -# 1799| r1799_7(int) = Load[w] : &:r1799_6, ~m? -# 1799| mu1799_8(int) = Store[w2] : &:r1799_5, r1799_7 -# 1799| r1799_9(glval) = VariableAddress[w2] : -# 1799| r1799_10(int) = Load[w2] : &:r1799_9, ~m? -# 1799| r1799_11(int) = CopyValue : r1799_10 -# 1799| v1799_12(void) = Switch : r1799_11 +# 1842| Block 2 +# 1842| v1842_1(void) = NoOp : +# 1843| r1843_1(glval) = VariableAddress[x] : +# 1843| r1843_2(int) = Load[x] : &:r1843_1, ~m? +# 1843| r1843_3(glval) = VariableAddress[w] : +# 1843| r1843_4(int) = Load[w] : &:r1843_3, ~m? +# 1843| r1843_5(int) = Add : r1843_2, r1843_4 +# 1843| r1843_6(glval) = VariableAddress[x] : +# 1843| mu1843_7(int) = Store[x] : &:r1843_6, r1843_5 +# 1846| r1846_1(glval) = VariableAddress[x] : +# 1846| r1846_2(int) = Load[x] : &:r1846_1, ~m? +# 1846| r1846_3(glval) = VariableAddress[w] : +# 1846| mu1846_4(int) = Store[w] : &:r1846_3, r1846_2 +# 1846| r1846_5(glval) = VariableAddress[w2] : +# 1846| r1846_6(glval) = VariableAddress[w] : +# 1846| r1846_7(int) = Load[w] : &:r1846_6, ~m? +# 1846| mu1846_8(int) = Store[w2] : &:r1846_5, r1846_7 +# 1846| r1846_9(glval) = VariableAddress[w2] : +# 1846| r1846_10(int) = Load[w2] : &:r1846_9, ~m? +# 1846| r1846_11(int) = CopyValue : r1846_10 +# 1846| v1846_12(void) = Switch : r1846_11 #-----| Default -> Block 3 -# 1800| Block 3 -# 1800| v1800_1(void) = NoOp : -# 1801| r1801_1(glval) = VariableAddress[x] : -# 1801| r1801_2(int) = Load[x] : &:r1801_1, ~m? -# 1801| r1801_3(glval) = VariableAddress[w] : -# 1801| r1801_4(int) = Load[w] : &:r1801_3, ~m? -# 1801| r1801_5(int) = Add : r1801_2, r1801_4 -# 1801| r1801_6(glval) = VariableAddress[x] : -# 1801| mu1801_7(int) = Store[x] : &:r1801_6, r1801_5 -# 1804| r1804_1(glval) = VariableAddress[v] : -# 1804| r1804_2(glval) = VariableAddress[x] : -# 1804| r1804_3(int) = Load[x] : &:r1804_2, ~m? -# 1804| mu1804_4(int) = Store[v] : &:r1804_1, r1804_3 -# 1804| r1804_5(glval) = VariableAddress[v2] : -# 1804| r1804_6(glval) = VariableAddress[v] : -# 1804| r1804_7(int) = Load[v] : &:r1804_6, ~m? -# 1804| mu1804_8(int) = Store[v2] : &:r1804_5, r1804_7 -# 1804| r1804_9(glval) = VariableAddress[v2] : -# 1804| r1804_10(int) = Load[v2] : &:r1804_9, ~m? -# 1804| r1804_11(int) = CopyValue : r1804_10 -# 1804| v1804_12(void) = Switch : r1804_11 +# 1847| Block 3 +# 1847| v1847_1(void) = NoOp : +# 1848| r1848_1(glval) = VariableAddress[x] : +# 1848| r1848_2(int) = Load[x] : &:r1848_1, ~m? +# 1848| r1848_3(glval) = VariableAddress[w] : +# 1848| r1848_4(int) = Load[w] : &:r1848_3, ~m? +# 1848| r1848_5(int) = Add : r1848_2, r1848_4 +# 1848| r1848_6(glval) = VariableAddress[x] : +# 1848| mu1848_7(int) = Store[x] : &:r1848_6, r1848_5 +# 1851| r1851_1(glval) = VariableAddress[v] : +# 1851| r1851_2(glval) = VariableAddress[x] : +# 1851| r1851_3(int) = Load[x] : &:r1851_2, ~m? +# 1851| mu1851_4(int) = Store[v] : &:r1851_1, r1851_3 +# 1851| r1851_5(glval) = VariableAddress[v2] : +# 1851| r1851_6(glval) = VariableAddress[v] : +# 1851| r1851_7(int) = Load[v] : &:r1851_6, ~m? +# 1851| mu1851_8(int) = Store[v2] : &:r1851_5, r1851_7 +# 1851| r1851_9(glval) = VariableAddress[v2] : +# 1851| r1851_10(int) = Load[v2] : &:r1851_9, ~m? +# 1851| r1851_11(int) = CopyValue : r1851_10 +# 1851| v1851_12(void) = Switch : r1851_11 #-----| Default -> Block 4 -# 1805| Block 4 -# 1805| v1805_1(void) = NoOp : -# 1806| r1806_1(glval) = VariableAddress[x] : -# 1806| r1806_2(int) = Load[x] : &:r1806_1, ~m? -# 1806| r1806_3(glval) = VariableAddress[v] : -# 1806| r1806_4(int) = Load[v] : &:r1806_3, ~m? -# 1806| r1806_5(int) = Add : r1806_2, r1806_4 -# 1806| r1806_6(glval) = VariableAddress[x] : -# 1806| mu1806_7(int) = Store[x] : &:r1806_6, r1806_5 -# 1809| r1809_1(glval) = VariableAddress[z] : -# 1809| r1809_2(glval) = VariableAddress[x] : -# 1809| r1809_3(int) = Load[x] : &:r1809_2, ~m? -# 1809| mu1809_4(int) = Store[z] : &:r1809_1, r1809_3 -# 1810| r1810_1(glval) = VariableAddress[z] : -# 1810| r1810_2(int) = Load[z] : &:r1810_1, ~m? -# 1810| v1810_3(void) = Switch : r1810_2 +# 1852| Block 4 +# 1852| v1852_1(void) = NoOp : +# 1853| r1853_1(glval) = VariableAddress[x] : +# 1853| r1853_2(int) = Load[x] : &:r1853_1, ~m? +# 1853| r1853_3(glval) = VariableAddress[v] : +# 1853| r1853_4(int) = Load[v] : &:r1853_3, ~m? +# 1853| r1853_5(int) = Add : r1853_2, r1853_4 +# 1853| r1853_6(glval) = VariableAddress[x] : +# 1853| mu1853_7(int) = Store[x] : &:r1853_6, r1853_5 +# 1856| r1856_1(glval) = VariableAddress[z] : +# 1856| r1856_2(glval) = VariableAddress[x] : +# 1856| r1856_3(int) = Load[x] : &:r1856_2, ~m? +# 1856| mu1856_4(int) = Store[z] : &:r1856_1, r1856_3 +# 1857| r1857_1(glval) = VariableAddress[z] : +# 1857| r1857_2(int) = Load[z] : &:r1857_1, ~m? +# 1857| v1857_3(void) = Switch : r1857_2 #-----| Default -> Block 5 -# 1811| Block 5 -# 1811| v1811_1(void) = NoOp : -# 1812| r1812_1(glval) = VariableAddress[x] : -# 1812| r1812_2(int) = Load[x] : &:r1812_1, ~m? -# 1812| r1812_3(glval) = VariableAddress[z] : -# 1812| r1812_4(int) = Load[z] : &:r1812_3, ~m? -# 1812| r1812_5(int) = Add : r1812_2, r1812_4 -# 1812| r1812_6(glval) = VariableAddress[x] : -# 1812| mu1812_7(int) = Store[x] : &:r1812_6, r1812_5 -# 1815| r1815_1(glval) = VariableAddress[z2] : -# 1815| r1815_2(glval) = VariableAddress[z] : -# 1815| r1815_3(int) = Load[z] : &:r1815_2, ~m? -# 1815| mu1815_4(int) = Store[z2] : &:r1815_1, r1815_3 -# 1815| r1815_5(glval) = VariableAddress[z2] : -# 1815| r1815_6(int) = Load[z2] : &:r1815_5, ~m? -# 1815| r1815_7(int) = CopyValue : r1815_6 -# 1815| v1815_8(void) = Switch : r1815_7 +# 1858| Block 5 +# 1858| v1858_1(void) = NoOp : +# 1859| r1859_1(glval) = VariableAddress[x] : +# 1859| r1859_2(int) = Load[x] : &:r1859_1, ~m? +# 1859| r1859_3(glval) = VariableAddress[z] : +# 1859| r1859_4(int) = Load[z] : &:r1859_3, ~m? +# 1859| r1859_5(int) = Add : r1859_2, r1859_4 +# 1859| r1859_6(glval) = VariableAddress[x] : +# 1859| mu1859_7(int) = Store[x] : &:r1859_6, r1859_5 +# 1862| r1862_1(glval) = VariableAddress[z2] : +# 1862| r1862_2(glval) = VariableAddress[z] : +# 1862| r1862_3(int) = Load[z] : &:r1862_2, ~m? +# 1862| mu1862_4(int) = Store[z2] : &:r1862_1, r1862_3 +# 1862| r1862_5(glval) = VariableAddress[z2] : +# 1862| r1862_6(int) = Load[z2] : &:r1862_5, ~m? +# 1862| r1862_7(int) = CopyValue : r1862_6 +# 1862| v1862_8(void) = Switch : r1862_7 #-----| Default -> Block 6 -# 1816| Block 6 -# 1816| v1816_1(void) = NoOp : -# 1817| r1817_1(glval) = VariableAddress[z2] : -# 1817| r1817_2(int) = Load[z2] : &:r1817_1, ~m? -# 1817| r1817_3(glval) = VariableAddress[x] : -# 1817| r1817_4(int) = Load[x] : &:r1817_3, ~m? -# 1817| r1817_5(int) = Add : r1817_4, r1817_2 -# 1817| mu1817_6(int) = Store[x] : &:r1817_3, r1817_5 -# 1819| v1819_1(void) = NoOp : -# 1787| v1787_6(void) = ReturnVoid : -# 1787| v1787_7(void) = AliasedUse : ~m? -# 1787| v1787_8(void) = ExitFunction : +# 1863| Block 6 +# 1863| v1863_1(void) = NoOp : +# 1864| r1864_1(glval) = VariableAddress[z2] : +# 1864| r1864_2(int) = Load[z2] : &:r1864_1, ~m? +# 1864| r1864_3(glval) = VariableAddress[x] : +# 1864| r1864_4(int) = Load[x] : &:r1864_3, ~m? +# 1864| r1864_5(int) = Add : r1864_4, r1864_2 +# 1864| mu1864_6(int) = Store[x] : &:r1864_3, r1864_5 +# 1866| v1866_1(void) = NoOp : +# 1834| v1834_6(void) = ReturnVoid : +# 1834| v1834_7(void) = AliasedUse : ~m? +# 1834| v1834_8(void) = ExitFunction : -# 1823| int global_2 -# 1823| Block 0 -# 1823| v1823_1(void) = EnterFunction : -# 1823| mu1823_2(unknown) = AliasedDefinition : -# 1823| r1823_3(glval) = VariableAddress[global_2] : -# 1823| r1823_4(int) = Constant[1] : -# 1823| mu1823_5(int) = Store[global_2] : &:r1823_3, r1823_4 -# 1823| v1823_6(void) = ReturnVoid : -# 1823| v1823_7(void) = AliasedUse : ~m? -# 1823| v1823_8(void) = ExitFunction : +# 1870| int global_2 +# 1870| Block 0 +# 1870| v1870_1(void) = EnterFunction : +# 1870| mu1870_2(unknown) = AliasedDefinition : +# 1870| r1870_3(glval) = VariableAddress[global_2] : +# 1870| r1870_4(int) = Constant[1] : +# 1870| mu1870_5(int) = Store[global_2] : &:r1870_3, r1870_4 +# 1870| v1870_6(void) = ReturnVoid : +# 1870| v1870_7(void) = AliasedUse : ~m? +# 1870| v1870_8(void) = ExitFunction : -# 1827| constructor_only global_4 -# 1827| Block 0 -# 1827| v1827_1(void) = EnterFunction : -# 1827| mu1827_2(unknown) = AliasedDefinition : -# 1827| r1827_3(glval) = VariableAddress[global_4] : -# 1827| r1827_4(glval) = FunctionAddress[constructor_only] : -# 1827| r1827_5(int) = Constant[1] : -# 1827| v1827_6(void) = Call[constructor_only] : func:r1827_4, this:r1827_3, 0:r1827_5 -# 1827| mu1827_7(unknown) = ^CallSideEffect : ~m? -# 1827| mu1827_8(constructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1827_3 -# 1827| v1827_9(void) = ReturnVoid : -# 1827| v1827_10(void) = AliasedUse : ~m? -# 1827| v1827_11(void) = ExitFunction : +# 1874| constructor_only global_4 +# 1874| Block 0 +# 1874| v1874_1(void) = EnterFunction : +# 1874| mu1874_2(unknown) = AliasedDefinition : +# 1874| r1874_3(glval) = VariableAddress[global_4] : +# 1874| r1874_4(glval) = FunctionAddress[constructor_only] : +# 1874| r1874_5(int) = Constant[1] : +# 1874| v1874_6(void) = Call[constructor_only] : func:r1874_4, this:r1874_3, 0:r1874_5 +# 1874| mu1874_7(unknown) = ^CallSideEffect : ~m? +# 1874| mu1874_8(constructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1874_3 +# 1874| v1874_9(void) = ReturnVoid : +# 1874| v1874_10(void) = AliasedUse : ~m? +# 1874| v1874_11(void) = ExitFunction : -# 1829| constructor_only global_5 -# 1829| Block 0 -# 1829| v1829_1(void) = EnterFunction : -# 1829| mu1829_2(unknown) = AliasedDefinition : -# 1829| r1829_3(glval) = VariableAddress[global_5] : -# 1829| r1829_4(glval) = FunctionAddress[constructor_only] : -# 1829| r1829_5(int) = Constant[2] : -# 1829| v1829_6(void) = Call[constructor_only] : func:r1829_4, this:r1829_3, 0:r1829_5 -# 1829| mu1829_7(unknown) = ^CallSideEffect : ~m? -# 1829| mu1829_8(constructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1829_3 -# 1829| v1829_9(void) = ReturnVoid : -# 1829| v1829_10(void) = AliasedUse : ~m? -# 1829| v1829_11(void) = ExitFunction : +# 1876| constructor_only global_5 +# 1876| Block 0 +# 1876| v1876_1(void) = EnterFunction : +# 1876| mu1876_2(unknown) = AliasedDefinition : +# 1876| r1876_3(glval) = VariableAddress[global_5] : +# 1876| r1876_4(glval) = FunctionAddress[constructor_only] : +# 1876| r1876_5(int) = Constant[2] : +# 1876| v1876_6(void) = Call[constructor_only] : func:r1876_4, this:r1876_3, 0:r1876_5 +# 1876| mu1876_7(unknown) = ^CallSideEffect : ~m? +# 1876| mu1876_8(constructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1876_3 +# 1876| v1876_9(void) = ReturnVoid : +# 1876| v1876_10(void) = AliasedUse : ~m? +# 1876| v1876_11(void) = ExitFunction : -# 1831| char* global_string -# 1831| Block 0 -# 1831| v1831_1(void) = EnterFunction : -# 1831| mu1831_2(unknown) = AliasedDefinition : -# 1831| r1831_3(glval) = VariableAddress[global_string] : -# 1831| r1831_4(glval) = StringConstant["global string"] : -# 1831| r1831_5(char *) = Convert : r1831_4 -# 1831| r1831_6(char *) = Convert : r1831_5 -# 1831| mu1831_7(char *) = Store[global_string] : &:r1831_3, r1831_6 -# 1831| v1831_8(void) = ReturnVoid : -# 1831| v1831_9(void) = AliasedUse : ~m? -# 1831| v1831_10(void) = ExitFunction : +# 1878| char* global_string +# 1878| Block 0 +# 1878| v1878_1(void) = EnterFunction : +# 1878| mu1878_2(unknown) = AliasedDefinition : +# 1878| r1878_3(glval) = VariableAddress[global_string] : +# 1878| r1878_4(glval) = StringConstant["global string"] : +# 1878| r1878_5(char *) = Convert : r1878_4 +# 1878| r1878_6(char *) = Convert : r1878_5 +# 1878| mu1878_7(char *) = Store[global_string] : &:r1878_3, r1878_6 +# 1878| v1878_8(void) = ReturnVoid : +# 1878| v1878_9(void) = AliasedUse : ~m? +# 1878| v1878_10(void) = ExitFunction : -# 1833| int global_6 -# 1833| Block 0 -# 1833| v1833_1(void) = EnterFunction : -# 1833| mu1833_2(unknown) = AliasedDefinition : -# 1833| r1833_3(glval) = VariableAddress[global_6] : -# 1833| r1833_4(glval) = VariableAddress[global_2] : -# 1833| r1833_5(int) = Load[global_2] : &:r1833_4, ~m? -# 1833| mu1833_6(int) = Store[global_6] : &:r1833_3, r1833_5 -# 1833| v1833_7(void) = ReturnVoid : -# 1833| v1833_8(void) = AliasedUse : ~m? -# 1833| v1833_9(void) = ExitFunction : +# 1880| int global_6 +# 1880| Block 0 +# 1880| v1880_1(void) = EnterFunction : +# 1880| mu1880_2(unknown) = AliasedDefinition : +# 1880| r1880_3(glval) = VariableAddress[global_6] : +# 1880| r1880_4(glval) = VariableAddress[global_2] : +# 1880| r1880_5(int) = Load[global_2] : &:r1880_4, ~m? +# 1880| mu1880_6(int) = Store[global_6] : &:r1880_3, r1880_5 +# 1880| v1880_7(void) = ReturnVoid : +# 1880| v1880_8(void) = AliasedUse : ~m? +# 1880| v1880_9(void) = ExitFunction : -# 1836| block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) -# 1836| Block 0 -# 1836| v1836_1(void) = EnterFunction : -# 1836| mu1836_2(unknown) = AliasedDefinition : -# 1836| mu1836_3(unknown) = InitializeNonLocal : -# 1836| r1836_4(glval) = VariableAddress[#this] : -# 1836| mu1836_5(glval) = InitializeParameter[#this] : &:r1836_4 -# 1836| r1836_6(glval) = Load[#this] : &:r1836_4, ~m? -# 1836| mu1836_7(A) = InitializeIndirection[#this] : &:r1836_6 +# 1883| block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) +# 1883| Block 0 +# 1883| v1883_1(void) = EnterFunction : +# 1883| mu1883_2(unknown) = AliasedDefinition : +# 1883| mu1883_3(unknown) = InitializeNonLocal : +# 1883| r1883_4(glval) = VariableAddress[#this] : +# 1883| mu1883_5(glval) = InitializeParameter[#this] : &:r1883_4 +# 1883| r1883_6(glval) = Load[#this] : &:r1883_4, ~m? +# 1883| mu1883_7(A) = InitializeIndirection[#this] : &:r1883_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(A &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(A &&) = Load[(unnamed parameter 0)] : &:r0_1, ~m? @@ -10141,896 +10569,896 @@ ir.cpp: #-----| r0_17(glval) = CopyValue : r0_16 #-----| r0_18(A &) = CopyValue : r0_17 #-----| mu0_19(A &) = Store[#return] : &:r0_14, r0_18 -# 1836| v1836_8(void) = ReturnIndirection[#this] : &:r1836_6, ~m? +# 1883| v1883_8(void) = ReturnIndirection[#this] : &:r1883_6, ~m? #-----| v0_20(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 1836| r1836_9(glval) = VariableAddress[#return] : -# 1836| v1836_10(void) = ReturnValue : &:r1836_9, ~m? -# 1836| v1836_11(void) = AliasedUse : ~m? -# 1836| v1836_12(void) = ExitFunction : +# 1883| r1883_9(glval) = VariableAddress[#return] : +# 1883| v1883_10(void) = ReturnValue : &:r1883_9, ~m? +# 1883| v1883_11(void) = AliasedUse : ~m? +# 1883| v1883_12(void) = ExitFunction : -# 1841| block_assignment::B& block_assignment::B::operator=(block_assignment::B&&) -# 1841| Block 0 -# 1841| v1841_1(void) = EnterFunction : -# 1841| mu1841_2(unknown) = AliasedDefinition : -# 1841| mu1841_3(unknown) = InitializeNonLocal : -# 1841| r1841_4(glval) = VariableAddress[#this] : -# 1841| mu1841_5(glval) = InitializeParameter[#this] : &:r1841_4 -# 1841| r1841_6(glval) = Load[#this] : &:r1841_4, ~m? -# 1841| mu1841_7(B) = InitializeIndirection[#this] : &:r1841_6 +# 1888| block_assignment::B& block_assignment::B::operator=(block_assignment::B&&) +# 1888| Block 0 +# 1888| v1888_1(void) = EnterFunction : +# 1888| mu1888_2(unknown) = AliasedDefinition : +# 1888| mu1888_3(unknown) = InitializeNonLocal : +# 1888| r1888_4(glval) = VariableAddress[#this] : +# 1888| mu1888_5(glval) = InitializeParameter[#this] : &:r1888_4 +# 1888| r1888_6(glval) = Load[#this] : &:r1888_4, ~m? +# 1888| mu1888_7(B) = InitializeIndirection[#this] : &:r1888_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(B &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(B &&) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1841| r1841_8(glval) = VariableAddress[#this] : -# 1841| r1841_9(B *) = Load[#this] : &:r1841_8, ~m? -#-----| r0_5(A *) = ConvertToNonVirtualBase[B : A] : r1841_9 -# 1841| r1841_10(glval) = FunctionAddress[operator=] : -# 1841| r1841_11(glval) = VariableAddress[(unnamed parameter 0)] : -# 1841| r1841_12(B &&) = Load[(unnamed parameter 0)] : &:r1841_11, ~m? -#-----| r0_6(glval) = CopyValue : r1841_12 -# 1841| r1841_13(B *) = CopyValue : r0_6 -#-----| r0_7(A *) = ConvertToNonVirtualBase[B : A] : r1841_13 -# 1841| r1841_14(glval) = CopyValue : r0_7 -#-----| r0_8(A &) = CopyValue : r1841_14 -# 1841| r1841_15(A &) = Call[operator=] : func:r1841_10, this:r0_5, 0:r0_8 -# 1841| mu1841_16(unknown) = ^CallSideEffect : ~m? +# 1888| r1888_8(glval) = VariableAddress[#this] : +# 1888| r1888_9(B *) = Load[#this] : &:r1888_8, ~m? +#-----| r0_5(A *) = ConvertToNonVirtualBase[B : A] : r1888_9 +# 1888| r1888_10(glval) = FunctionAddress[operator=] : +# 1888| r1888_11(glval) = VariableAddress[(unnamed parameter 0)] : +# 1888| r1888_12(B &&) = Load[(unnamed parameter 0)] : &:r1888_11, ~m? +#-----| r0_6(glval) = CopyValue : r1888_12 +# 1888| r1888_13(B *) = CopyValue : r0_6 +#-----| r0_7(A *) = ConvertToNonVirtualBase[B : A] : r1888_13 +# 1888| r1888_14(glval) = CopyValue : r0_7 +#-----| r0_8(A &) = CopyValue : r1888_14 +# 1888| r1888_15(A &) = Call[operator=] : func:r1888_10, this:r0_5, 0:r0_8 +# 1888| mu1888_16(unknown) = ^CallSideEffect : ~m? #-----| v0_9(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? #-----| v0_10(void) = ^BufferReadSideEffect[0] : &:r0_8, ~m? #-----| mu0_11(A) = ^IndirectMayWriteSideEffect[-1] : &:r0_5 #-----| mu0_12(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_8 -#-----| r0_13(glval) = CopyValue : r1841_15 +#-----| r0_13(glval) = CopyValue : r1888_15 #-----| r0_14(glval) = VariableAddress[#return] : #-----| r0_15(glval) = VariableAddress[#this] : #-----| r0_16(B *) = Load[#this] : &:r0_15, ~m? #-----| r0_17(glval) = CopyValue : r0_16 #-----| r0_18(B &) = CopyValue : r0_17 #-----| mu0_19(B &) = Store[#return] : &:r0_14, r0_18 -# 1841| v1841_17(void) = ReturnIndirection[#this] : &:r1841_6, ~m? +# 1888| v1888_17(void) = ReturnIndirection[#this] : &:r1888_6, ~m? #-----| v0_20(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 1841| r1841_18(glval) = VariableAddress[#return] : -# 1841| v1841_19(void) = ReturnValue : &:r1841_18, ~m? -# 1841| v1841_20(void) = AliasedUse : ~m? -# 1841| v1841_21(void) = ExitFunction : +# 1888| r1888_18(glval) = VariableAddress[#return] : +# 1888| v1888_19(void) = ReturnValue : &:r1888_18, ~m? +# 1888| v1888_20(void) = AliasedUse : ~m? +# 1888| v1888_21(void) = ExitFunction : -# 1845| void block_assignment::foo() -# 1845| Block 0 -# 1845| v1845_1(void) = EnterFunction : -# 1845| mu1845_2(unknown) = AliasedDefinition : -# 1845| mu1845_3(unknown) = InitializeNonLocal : -# 1846| r1846_1(glval) = VariableAddress[v] : -# 1846| mu1846_2(B) = Uninitialized[v] : &:r1846_1 -# 1846| r1846_3(glval) = FunctionAddress[B] : -# 1846| r1846_4(A *) = Constant[0] : -# 1846| v1846_5(void) = Call[B] : func:r1846_3, this:r1846_1, 0:r1846_4 -# 1846| mu1846_6(unknown) = ^CallSideEffect : ~m? -# 1846| v1846_7(void) = ^BufferReadSideEffect[0] : &:r1846_4, ~m? -# 1846| mu1846_8(B) = ^IndirectMayWriteSideEffect[-1] : &:r1846_1 -# 1846| mu1846_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1846_4 -# 1847| r1847_1(glval) = VariableAddress[v] : -# 1847| r1847_2(glval) = FunctionAddress[operator=] : -# 1847| r1847_3(glval) = VariableAddress[#temp1847:13] : -# 1847| mu1847_4(B) = Uninitialized[#temp1847:13] : &:r1847_3 -# 1847| r1847_5(glval) = FunctionAddress[B] : -# 1847| r1847_6(A *) = Constant[0] : -# 1847| v1847_7(void) = Call[B] : func:r1847_5, this:r1847_3, 0:r1847_6 -# 1847| mu1847_8(unknown) = ^CallSideEffect : ~m? -# 1847| v1847_9(void) = ^BufferReadSideEffect[0] : &:r1847_6, ~m? -# 1847| mu1847_10(B) = ^IndirectMayWriteSideEffect[-1] : &:r1847_3 -# 1847| mu1847_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1847_6 -# 1847| r1847_12(B &) = CopyValue : r1847_3 -# 1847| r1847_13(B &) = Call[operator=] : func:r1847_2, this:r1847_1, 0:r1847_12 -# 1847| mu1847_14(unknown) = ^CallSideEffect : ~m? -# 1847| v1847_15(void) = ^IndirectReadSideEffect[-1] : &:r1847_1, ~m? -# 1847| v1847_16(void) = ^BufferReadSideEffect[0] : &:r1847_12, ~m? -# 1847| mu1847_17(B) = ^IndirectMayWriteSideEffect[-1] : &:r1847_1 -# 1847| mu1847_18(unknown) = ^BufferMayWriteSideEffect[0] : &:r1847_12 -# 1847| r1847_19(glval) = CopyValue : r1847_13 -# 1848| v1848_1(void) = NoOp : -# 1845| v1845_4(void) = ReturnVoid : -# 1845| v1845_5(void) = AliasedUse : ~m? -# 1845| v1845_6(void) = ExitFunction : +# 1892| void block_assignment::foo() +# 1892| Block 0 +# 1892| v1892_1(void) = EnterFunction : +# 1892| mu1892_2(unknown) = AliasedDefinition : +# 1892| mu1892_3(unknown) = InitializeNonLocal : +# 1893| r1893_1(glval) = VariableAddress[v] : +# 1893| mu1893_2(B) = Uninitialized[v] : &:r1893_1 +# 1893| r1893_3(glval) = FunctionAddress[B] : +# 1893| r1893_4(A *) = Constant[0] : +# 1893| v1893_5(void) = Call[B] : func:r1893_3, this:r1893_1, 0:r1893_4 +# 1893| mu1893_6(unknown) = ^CallSideEffect : ~m? +# 1893| v1893_7(void) = ^BufferReadSideEffect[0] : &:r1893_4, ~m? +# 1893| mu1893_8(B) = ^IndirectMayWriteSideEffect[-1] : &:r1893_1 +# 1893| mu1893_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1893_4 +# 1894| r1894_1(glval) = VariableAddress[v] : +# 1894| r1894_2(glval) = FunctionAddress[operator=] : +# 1894| r1894_3(glval) = VariableAddress[#temp1894:13] : +# 1894| mu1894_4(B) = Uninitialized[#temp1894:13] : &:r1894_3 +# 1894| r1894_5(glval) = FunctionAddress[B] : +# 1894| r1894_6(A *) = Constant[0] : +# 1894| v1894_7(void) = Call[B] : func:r1894_5, this:r1894_3, 0:r1894_6 +# 1894| mu1894_8(unknown) = ^CallSideEffect : ~m? +# 1894| v1894_9(void) = ^BufferReadSideEffect[0] : &:r1894_6, ~m? +# 1894| mu1894_10(B) = ^IndirectMayWriteSideEffect[-1] : &:r1894_3 +# 1894| mu1894_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1894_6 +# 1894| r1894_12(B &) = CopyValue : r1894_3 +# 1894| r1894_13(B &) = Call[operator=] : func:r1894_2, this:r1894_1, 0:r1894_12 +# 1894| mu1894_14(unknown) = ^CallSideEffect : ~m? +# 1894| v1894_15(void) = ^IndirectReadSideEffect[-1] : &:r1894_1, ~m? +# 1894| v1894_16(void) = ^BufferReadSideEffect[0] : &:r1894_12, ~m? +# 1894| mu1894_17(B) = ^IndirectMayWriteSideEffect[-1] : &:r1894_1 +# 1894| mu1894_18(unknown) = ^BufferMayWriteSideEffect[0] : &:r1894_12 +# 1894| r1894_19(glval) = CopyValue : r1894_13 +# 1895| v1895_1(void) = NoOp : +# 1892| v1892_4(void) = ReturnVoid : +# 1892| v1892_5(void) = AliasedUse : ~m? +# 1892| v1892_6(void) = ExitFunction : -# 1851| void magicvars() -# 1851| Block 0 -# 1851| v1851_1(void) = EnterFunction : -# 1851| mu1851_2(unknown) = AliasedDefinition : -# 1851| mu1851_3(unknown) = InitializeNonLocal : -# 1852| r1852_1(glval) = VariableAddress[pf] : -# 1852| r1852_2(glval) = VariableAddress[__PRETTY_FUNCTION__] : -# 1852| r1852_3(char *) = Convert : r1852_2 -# 1852| mu1852_4(char *) = Store[pf] : &:r1852_1, r1852_3 -# 1853| r1853_1(glval) = VariableAddress[strfunc] : -# 1853| r1853_2(glval) = VariableAddress[__func__] : -# 1853| r1853_3(char *) = Convert : r1853_2 -# 1853| mu1853_4(char *) = Store[strfunc] : &:r1853_1, r1853_3 -# 1854| v1854_1(void) = NoOp : -# 1851| v1851_4(void) = ReturnVoid : -# 1851| v1851_5(void) = AliasedUse : ~m? -# 1851| v1851_6(void) = ExitFunction : +# 1898| void magicvars() +# 1898| Block 0 +# 1898| v1898_1(void) = EnterFunction : +# 1898| mu1898_2(unknown) = AliasedDefinition : +# 1898| mu1898_3(unknown) = InitializeNonLocal : +# 1899| r1899_1(glval) = VariableAddress[pf] : +# 1899| r1899_2(glval) = VariableAddress[__PRETTY_FUNCTION__] : +# 1899| r1899_3(char *) = Convert : r1899_2 +# 1899| mu1899_4(char *) = Store[pf] : &:r1899_1, r1899_3 +# 1900| r1900_1(glval) = VariableAddress[strfunc] : +# 1900| r1900_2(glval) = VariableAddress[__func__] : +# 1900| r1900_3(char *) = Convert : r1900_2 +# 1900| mu1900_4(char *) = Store[strfunc] : &:r1900_1, r1900_3 +# 1901| v1901_1(void) = NoOp : +# 1898| v1898_4(void) = ReturnVoid : +# 1898| v1898_5(void) = AliasedUse : ~m? +# 1898| v1898_6(void) = ExitFunction : -# 1864| void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) -# 1864| Block 0 -# 1864| v1864_1(void) = EnterFunction : -# 1864| mu1864_2(unknown) = AliasedDefinition : -# 1864| mu1864_3(unknown) = InitializeNonLocal : -# 1864| r1864_4(glval) = VariableAddress[#this] : -# 1864| mu1864_5(glval>) = InitializeParameter[#this] : &:r1864_4 -# 1864| r1864_6(glval>) = Load[#this] : &:r1864_4, ~m? -# 1864| mu1864_7(Bar1) = InitializeIndirection[#this] : &:r1864_6 -# 1864| r1864_8(glval) = VariableAddress[p] : -# 1864| mu1864_9(S *) = InitializeParameter[p] : &:r1864_8 -# 1864| r1864_10(S *) = Load[p] : &:r1864_8, ~m? -# 1864| mu1864_11(unknown) = InitializeIndirection[p] : &:r1864_10 -# 1866| r1866_1(glval) = VariableAddress[#return] : -# 1866| r1866_2(glval) = VariableAddress[p] : -# 1866| r1866_3(S *) = Load[p] : &:r1866_2, ~m? -# 1866| r1866_4(void *) = Convert : r1866_3 -# 1866| mu1866_5(void *) = Store[#return] : &:r1866_1, r1866_4 -# 1864| v1864_12(void) = ReturnIndirection[#this] : &:r1864_6, ~m? -# 1864| v1864_13(void) = ReturnIndirection[p] : &:r1864_10, ~m? -# 1864| r1864_14(glval) = VariableAddress[#return] : -# 1864| v1864_15(void) = ReturnValue : &:r1864_14, ~m? -# 1864| v1864_16(void) = AliasedUse : ~m? -# 1864| v1864_17(void) = ExitFunction : +# 1911| void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) +# 1911| Block 0 +# 1911| v1911_1(void) = EnterFunction : +# 1911| mu1911_2(unknown) = AliasedDefinition : +# 1911| mu1911_3(unknown) = InitializeNonLocal : +# 1911| r1911_4(glval) = VariableAddress[#this] : +# 1911| mu1911_5(glval>) = InitializeParameter[#this] : &:r1911_4 +# 1911| r1911_6(glval>) = Load[#this] : &:r1911_4, ~m? +# 1911| mu1911_7(Bar1) = InitializeIndirection[#this] : &:r1911_6 +# 1911| r1911_8(glval) = VariableAddress[p] : +# 1911| mu1911_9(S *) = InitializeParameter[p] : &:r1911_8 +# 1911| r1911_10(S *) = Load[p] : &:r1911_8, ~m? +# 1911| mu1911_11(unknown) = InitializeIndirection[p] : &:r1911_10 +# 1913| r1913_1(glval) = VariableAddress[#return] : +# 1913| r1913_2(glval) = VariableAddress[p] : +# 1913| r1913_3(S *) = Load[p] : &:r1913_2, ~m? +# 1913| r1913_4(void *) = Convert : r1913_3 +# 1913| mu1913_5(void *) = Store[#return] : &:r1913_1, r1913_4 +# 1911| v1911_12(void) = ReturnIndirection[#this] : &:r1911_6, ~m? +# 1911| v1911_13(void) = ReturnIndirection[p] : &:r1911_10, ~m? +# 1911| r1911_14(glval) = VariableAddress[#return] : +# 1911| v1911_15(void) = ReturnValue : &:r1911_14, ~m? +# 1911| v1911_16(void) = AliasedUse : ~m? +# 1911| v1911_17(void) = ExitFunction : -# 1870| void missing_declaration_entries::test1() -# 1870| Block 0 -# 1870| v1870_1(void) = EnterFunction : -# 1870| mu1870_2(unknown) = AliasedDefinition : -# 1870| mu1870_3(unknown) = InitializeNonLocal : -# 1871| r1871_1(glval>) = VariableAddress[b] : -# 1871| mu1871_2(Bar1) = Uninitialized[b] : &:r1871_1 -# 1872| r1872_1(glval>) = VariableAddress[b] : -# 1872| r1872_2(glval) = FunctionAddress[missing_type_decl_entry] : -# 1872| r1872_3(S *) = Constant[0] : -# 1872| r1872_4(void *) = Call[missing_type_decl_entry] : func:r1872_2, this:r1872_1, 0:r1872_3 -# 1872| mu1872_5(unknown) = ^CallSideEffect : ~m? -# 1872| v1872_6(void) = ^IndirectReadSideEffect[-1] : &:r1872_1, ~m? -# 1872| v1872_7(void) = ^BufferReadSideEffect[0] : &:r1872_3, ~m? -# 1872| mu1872_8(Bar1) = ^IndirectMayWriteSideEffect[-1] : &:r1872_1 -# 1872| mu1872_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1872_3 -# 1873| v1873_1(void) = NoOp : -# 1870| v1870_4(void) = ReturnVoid : -# 1870| v1870_5(void) = AliasedUse : ~m? -# 1870| v1870_6(void) = ExitFunction : +# 1917| void missing_declaration_entries::test1() +# 1917| Block 0 +# 1917| v1917_1(void) = EnterFunction : +# 1917| mu1917_2(unknown) = AliasedDefinition : +# 1917| mu1917_3(unknown) = InitializeNonLocal : +# 1918| r1918_1(glval>) = VariableAddress[b] : +# 1918| mu1918_2(Bar1) = Uninitialized[b] : &:r1918_1 +# 1919| r1919_1(glval>) = VariableAddress[b] : +# 1919| r1919_2(glval) = FunctionAddress[missing_type_decl_entry] : +# 1919| r1919_3(S *) = Constant[0] : +# 1919| r1919_4(void *) = Call[missing_type_decl_entry] : func:r1919_2, this:r1919_1, 0:r1919_3 +# 1919| mu1919_5(unknown) = ^CallSideEffect : ~m? +# 1919| v1919_6(void) = ^IndirectReadSideEffect[-1] : &:r1919_1, ~m? +# 1919| v1919_7(void) = ^BufferReadSideEffect[0] : &:r1919_3, ~m? +# 1919| mu1919_8(Bar1) = ^IndirectMayWriteSideEffect[-1] : &:r1919_1 +# 1919| mu1919_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1919_3 +# 1920| v1920_1(void) = NoOp : +# 1917| v1917_4(void) = ReturnVoid : +# 1917| v1917_5(void) = AliasedUse : ~m? +# 1917| v1917_6(void) = ExitFunction : -# 1877| int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() -# 1877| Block 0 -# 1877| v1877_1(void) = EnterFunction : -# 1877| mu1877_2(unknown) = AliasedDefinition : -# 1877| mu1877_3(unknown) = InitializeNonLocal : -# 1877| r1877_4(glval) = VariableAddress[#this] : -# 1877| mu1877_5(glval>) = InitializeParameter[#this] : &:r1877_4 -# 1877| r1877_6(glval>) = Load[#this] : &:r1877_4, ~m? -# 1877| mu1877_7(Bar2) = InitializeIndirection[#this] : &:r1877_6 -# 1878| r1878_1(glval) = VariableAddress[x] : -# 1878| mu1878_2(int[10]) = Uninitialized[x] : &:r1878_1 -# 1878| r1878_3(glval) = VariableAddress[y] : -# 1878| mu1878_4(int[10]) = Uninitialized[y] : &:r1878_3 -# 1879| r1879_1(int) = Constant[10] : -# 1879| r1879_2(glval) = VariableAddress[x] : -# 1879| r1879_3(int *) = Convert : r1879_2 -# 1879| r1879_4(glval) = CopyValue : r1879_3 -# 1879| mu1879_5(int) = Store[?] : &:r1879_4, r1879_1 -# 1880| r1880_1(int) = Constant[10] : -# 1880| r1880_2(glval) = VariableAddress[y] : -# 1880| r1880_3(int *) = Convert : r1880_2 -# 1880| r1880_4(glval) = CopyValue : r1880_3 -# 1880| mu1880_5(int) = Store[?] : &:r1880_4, r1880_1 -# 1881| r1881_1(glval) = VariableAddress[#return] : -# 1881| r1881_2(glval) = VariableAddress[x] : -# 1881| r1881_3(int *) = Convert : r1881_2 -# 1881| r1881_4(int) = Load[?] : &:r1881_3, ~m? -# 1881| r1881_5(glval) = VariableAddress[y] : -# 1881| r1881_6(int *) = Convert : r1881_5 -# 1881| r1881_7(int) = Load[?] : &:r1881_6, ~m? -# 1881| r1881_8(int) = Add : r1881_4, r1881_7 -# 1881| mu1881_9(int) = Store[#return] : &:r1881_1, r1881_8 -# 1877| v1877_8(void) = ReturnIndirection[#this] : &:r1877_6, ~m? -# 1877| r1877_9(glval) = VariableAddress[#return] : -# 1877| v1877_10(void) = ReturnValue : &:r1877_9, ~m? -# 1877| v1877_11(void) = AliasedUse : ~m? -# 1877| v1877_12(void) = ExitFunction : +# 1924| int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() +# 1924| Block 0 +# 1924| v1924_1(void) = EnterFunction : +# 1924| mu1924_2(unknown) = AliasedDefinition : +# 1924| mu1924_3(unknown) = InitializeNonLocal : +# 1924| r1924_4(glval) = VariableAddress[#this] : +# 1924| mu1924_5(glval>) = InitializeParameter[#this] : &:r1924_4 +# 1924| r1924_6(glval>) = Load[#this] : &:r1924_4, ~m? +# 1924| mu1924_7(Bar2) = InitializeIndirection[#this] : &:r1924_6 +# 1925| r1925_1(glval) = VariableAddress[x] : +# 1925| mu1925_2(int[10]) = Uninitialized[x] : &:r1925_1 +# 1925| r1925_3(glval) = VariableAddress[y] : +# 1925| mu1925_4(int[10]) = Uninitialized[y] : &:r1925_3 +# 1926| r1926_1(int) = Constant[10] : +# 1926| r1926_2(glval) = VariableAddress[x] : +# 1926| r1926_3(int *) = Convert : r1926_2 +# 1926| r1926_4(glval) = CopyValue : r1926_3 +# 1926| mu1926_5(int) = Store[?] : &:r1926_4, r1926_1 +# 1927| r1927_1(int) = Constant[10] : +# 1927| r1927_2(glval) = VariableAddress[y] : +# 1927| r1927_3(int *) = Convert : r1927_2 +# 1927| r1927_4(glval) = CopyValue : r1927_3 +# 1927| mu1927_5(int) = Store[?] : &:r1927_4, r1927_1 +# 1928| r1928_1(glval) = VariableAddress[#return] : +# 1928| r1928_2(glval) = VariableAddress[x] : +# 1928| r1928_3(int *) = Convert : r1928_2 +# 1928| r1928_4(int) = Load[?] : &:r1928_3, ~m? +# 1928| r1928_5(glval) = VariableAddress[y] : +# 1928| r1928_6(int *) = Convert : r1928_5 +# 1928| r1928_7(int) = Load[?] : &:r1928_6, ~m? +# 1928| r1928_8(int) = Add : r1928_4, r1928_7 +# 1928| mu1928_9(int) = Store[#return] : &:r1928_1, r1928_8 +# 1924| v1924_8(void) = ReturnIndirection[#this] : &:r1924_6, ~m? +# 1924| r1924_9(glval) = VariableAddress[#return] : +# 1924| v1924_10(void) = ReturnValue : &:r1924_9, ~m? +# 1924| v1924_11(void) = AliasedUse : ~m? +# 1924| v1924_12(void) = ExitFunction : -# 1885| void missing_declaration_entries::test2() -# 1885| Block 0 -# 1885| v1885_1(void) = EnterFunction : -# 1885| mu1885_2(unknown) = AliasedDefinition : -# 1885| mu1885_3(unknown) = InitializeNonLocal : -# 1886| r1886_1(glval>) = VariableAddress[b] : -# 1886| mu1886_2(Bar2) = Uninitialized[b] : &:r1886_1 -# 1887| r1887_1(glval>) = VariableAddress[b] : -# 1887| r1887_2(glval) = FunctionAddress[two_missing_variable_declaration_entries] : -# 1887| r1887_3(int) = Call[two_missing_variable_declaration_entries] : func:r1887_2, this:r1887_1 -# 1887| mu1887_4(unknown) = ^CallSideEffect : ~m? -# 1887| v1887_5(void) = ^IndirectReadSideEffect[-1] : &:r1887_1, ~m? -# 1887| mu1887_6(Bar2) = ^IndirectMayWriteSideEffect[-1] : &:r1887_1 -# 1888| v1888_1(void) = NoOp : -# 1885| v1885_4(void) = ReturnVoid : -# 1885| v1885_5(void) = AliasedUse : ~m? -# 1885| v1885_6(void) = ExitFunction : +# 1932| void missing_declaration_entries::test2() +# 1932| Block 0 +# 1932| v1932_1(void) = EnterFunction : +# 1932| mu1932_2(unknown) = AliasedDefinition : +# 1932| mu1932_3(unknown) = InitializeNonLocal : +# 1933| r1933_1(glval>) = VariableAddress[b] : +# 1933| mu1933_2(Bar2) = Uninitialized[b] : &:r1933_1 +# 1934| r1934_1(glval>) = VariableAddress[b] : +# 1934| r1934_2(glval) = FunctionAddress[two_missing_variable_declaration_entries] : +# 1934| r1934_3(int) = Call[two_missing_variable_declaration_entries] : func:r1934_2, this:r1934_1 +# 1934| mu1934_4(unknown) = ^CallSideEffect : ~m? +# 1934| v1934_5(void) = ^IndirectReadSideEffect[-1] : &:r1934_1, ~m? +# 1934| mu1934_6(Bar2) = ^IndirectMayWriteSideEffect[-1] : &:r1934_1 +# 1935| v1935_1(void) = NoOp : +# 1932| v1932_4(void) = ReturnVoid : +# 1932| v1932_5(void) = AliasedUse : ~m? +# 1932| v1932_6(void) = ExitFunction : -# 1891| char global_template -# 1891| Block 0 -# 1891| v1891_1(void) = EnterFunction : -# 1891| mu1891_2(unknown) = AliasedDefinition : -# 1891| r1891_3(glval) = VariableAddress[global_template] : -# 1891| r1891_4(char) = Constant[42] : -# 1891| mu1891_5(char) = Store[global_template] : &:r1891_3, r1891_4 -# 1891| v1891_6(void) = ReturnVoid : -# 1891| v1891_7(void) = AliasedUse : ~m? -# 1891| v1891_8(void) = ExitFunction : +# 1938| char global_template +# 1938| Block 0 +# 1938| v1938_1(void) = EnterFunction : +# 1938| mu1938_2(unknown) = AliasedDefinition : +# 1938| r1938_3(glval) = VariableAddress[global_template] : +# 1938| r1938_4(char) = Constant[42] : +# 1938| mu1938_5(char) = Store[global_template] : &:r1938_3, r1938_4 +# 1938| v1938_6(void) = ReturnVoid : +# 1938| v1938_7(void) = AliasedUse : ~m? +# 1938| v1938_8(void) = ExitFunction : -# 1891| int global_template -# 1891| Block 0 -# 1891| v1891_1(void) = EnterFunction : -# 1891| mu1891_2(unknown) = AliasedDefinition : -# 1891| r1891_3(glval) = VariableAddress[global_template] : -# 1891| r1891_4(int) = Constant[42] : -# 1891| mu1891_5(int) = Store[global_template] : &:r1891_3, r1891_4 -# 1891| v1891_6(void) = ReturnVoid : -# 1891| v1891_7(void) = AliasedUse : ~m? -# 1891| v1891_8(void) = ExitFunction : +# 1938| int global_template +# 1938| Block 0 +# 1938| v1938_1(void) = EnterFunction : +# 1938| mu1938_2(unknown) = AliasedDefinition : +# 1938| r1938_3(glval) = VariableAddress[global_template] : +# 1938| r1938_4(int) = Constant[42] : +# 1938| mu1938_5(int) = Store[global_template] : &:r1938_3, r1938_4 +# 1938| v1938_6(void) = ReturnVoid : +# 1938| v1938_7(void) = AliasedUse : ~m? +# 1938| v1938_8(void) = ExitFunction : -# 1893| int test_global_template_int() -# 1893| Block 0 -# 1893| v1893_1(void) = EnterFunction : -# 1893| mu1893_2(unknown) = AliasedDefinition : -# 1893| mu1893_3(unknown) = InitializeNonLocal : -# 1894| r1894_1(glval) = VariableAddress[local_int] : -# 1894| r1894_2(glval) = VariableAddress[global_template] : -# 1894| r1894_3(int) = Load[global_template] : &:r1894_2, ~m? -# 1894| mu1894_4(int) = Store[local_int] : &:r1894_1, r1894_3 -# 1895| r1895_1(glval) = VariableAddress[local_char] : -# 1895| r1895_2(glval) = VariableAddress[global_template] : -# 1895| r1895_3(char) = Load[global_template] : &:r1895_2, ~m? -# 1895| mu1895_4(char) = Store[local_char] : &:r1895_1, r1895_3 -# 1896| r1896_1(glval) = VariableAddress[#return] : -# 1896| r1896_2(glval) = VariableAddress[local_int] : -# 1896| r1896_3(int) = Load[local_int] : &:r1896_2, ~m? -# 1896| r1896_4(glval) = VariableAddress[local_char] : -# 1896| r1896_5(char) = Load[local_char] : &:r1896_4, ~m? -# 1896| r1896_6(int) = Convert : r1896_5 -# 1896| r1896_7(int) = Add : r1896_3, r1896_6 -# 1896| mu1896_8(int) = Store[#return] : &:r1896_1, r1896_7 -# 1893| r1893_4(glval) = VariableAddress[#return] : -# 1893| v1893_5(void) = ReturnValue : &:r1893_4, ~m? -# 1893| v1893_6(void) = AliasedUse : ~m? -# 1893| v1893_7(void) = ExitFunction : +# 1940| int test_global_template_int() +# 1940| Block 0 +# 1940| v1940_1(void) = EnterFunction : +# 1940| mu1940_2(unknown) = AliasedDefinition : +# 1940| mu1940_3(unknown) = InitializeNonLocal : +# 1941| r1941_1(glval) = VariableAddress[local_int] : +# 1941| r1941_2(glval) = VariableAddress[global_template] : +# 1941| r1941_3(int) = Load[global_template] : &:r1941_2, ~m? +# 1941| mu1941_4(int) = Store[local_int] : &:r1941_1, r1941_3 +# 1942| r1942_1(glval) = VariableAddress[local_char] : +# 1942| r1942_2(glval) = VariableAddress[global_template] : +# 1942| r1942_3(char) = Load[global_template] : &:r1942_2, ~m? +# 1942| mu1942_4(char) = Store[local_char] : &:r1942_1, r1942_3 +# 1943| r1943_1(glval) = VariableAddress[#return] : +# 1943| r1943_2(glval) = VariableAddress[local_int] : +# 1943| r1943_3(int) = Load[local_int] : &:r1943_2, ~m? +# 1943| r1943_4(glval) = VariableAddress[local_char] : +# 1943| r1943_5(char) = Load[local_char] : &:r1943_4, ~m? +# 1943| r1943_6(int) = Convert : r1943_5 +# 1943| r1943_7(int) = Add : r1943_3, r1943_6 +# 1943| mu1943_8(int) = Store[#return] : &:r1943_1, r1943_7 +# 1940| r1940_4(glval) = VariableAddress[#return] : +# 1940| v1940_5(void) = ReturnValue : &:r1940_4, ~m? +# 1940| v1940_6(void) = AliasedUse : ~m? +# 1940| v1940_7(void) = ExitFunction : -# 1901| int noreturnTest(int) -# 1901| Block 0 -# 1901| v1901_1(void) = EnterFunction : -# 1901| mu1901_2(unknown) = AliasedDefinition : -# 1901| mu1901_3(unknown) = InitializeNonLocal : -# 1901| r1901_4(glval) = VariableAddress[x] : -# 1901| mu1901_5(int) = InitializeParameter[x] : &:r1901_4 -# 1902| r1902_1(glval) = VariableAddress[x] : -# 1902| r1902_2(int) = Load[x] : &:r1902_1, ~m? -# 1902| r1902_3(int) = Constant[10] : -# 1902| r1902_4(bool) = CompareLT : r1902_2, r1902_3 -# 1902| v1902_5(void) = ConditionalBranch : r1902_4 +# 1948| int noreturnTest(int) +# 1948| Block 0 +# 1948| v1948_1(void) = EnterFunction : +# 1948| mu1948_2(unknown) = AliasedDefinition : +# 1948| mu1948_3(unknown) = InitializeNonLocal : +# 1948| r1948_4(glval) = VariableAddress[x] : +# 1948| mu1948_5(int) = InitializeParameter[x] : &:r1948_4 +# 1949| r1949_1(glval) = VariableAddress[x] : +# 1949| r1949_2(int) = Load[x] : &:r1949_1, ~m? +# 1949| r1949_3(int) = Constant[10] : +# 1949| r1949_4(bool) = CompareLT : r1949_2, r1949_3 +# 1949| v1949_5(void) = ConditionalBranch : r1949_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 1901| Block 1 -# 1901| r1901_6(glval) = VariableAddress[#return] : -# 1901| v1901_7(void) = ReturnValue : &:r1901_6, ~m? -# 1901| v1901_8(void) = AliasedUse : ~m? -# 1901| v1901_9(void) = ExitFunction : +# 1948| Block 1 +# 1948| r1948_6(glval) = VariableAddress[#return] : +# 1948| v1948_7(void) = ReturnValue : &:r1948_6, ~m? +# 1948| v1948_8(void) = AliasedUse : ~m? +# 1948| v1948_9(void) = ExitFunction : -# 1903| Block 2 -# 1903| r1903_1(glval) = VariableAddress[#return] : -# 1903| r1903_2(glval) = VariableAddress[x] : -# 1903| r1903_3(int) = Load[x] : &:r1903_2, ~m? -# 1903| mu1903_4(int) = Store[#return] : &:r1903_1, r1903_3 +# 1950| Block 2 +# 1950| r1950_1(glval) = VariableAddress[#return] : +# 1950| r1950_2(glval) = VariableAddress[x] : +# 1950| r1950_3(int) = Load[x] : &:r1950_2, ~m? +# 1950| mu1950_4(int) = Store[#return] : &:r1950_1, r1950_3 #-----| Goto -> Block 1 -# 1905| Block 3 -# 1905| r1905_1(glval) = FunctionAddress[noreturnFunc] : -# 1905| v1905_2(void) = Call[noreturnFunc] : func:r1905_1 -# 1905| mu1905_3(unknown) = ^CallSideEffect : ~m? -# 1901| v1901_10(void) = Unreached : +# 1952| Block 3 +# 1952| r1952_1(glval) = FunctionAddress[noreturnFunc] : +# 1952| v1952_2(void) = Call[noreturnFunc] : func:r1952_1 +# 1952| mu1952_3(unknown) = ^CallSideEffect : ~m? +# 1948| v1948_10(void) = Unreached : -# 1907| Block 4 -# 1907| r1907_1(glval) = VariableAddress[#return] : -# 1907| mu1907_2(int) = Uninitialized[#return] : &:r1907_1 +# 1954| Block 4 +# 1954| r1954_1(glval) = VariableAddress[#return] : +# 1954| mu1954_2(int) = Uninitialized[#return] : &:r1954_1 #-----| Goto -> Block 1 -# 1909| int noreturnTest2(int) -# 1909| Block 0 -# 1909| v1909_1(void) = EnterFunction : -# 1909| mu1909_2(unknown) = AliasedDefinition : -# 1909| mu1909_3(unknown) = InitializeNonLocal : -# 1909| r1909_4(glval) = VariableAddress[x] : -# 1909| mu1909_5(int) = InitializeParameter[x] : &:r1909_4 -# 1910| r1910_1(glval) = VariableAddress[x] : -# 1910| r1910_2(int) = Load[x] : &:r1910_1, ~m? -# 1910| r1910_3(int) = Constant[10] : -# 1910| r1910_4(bool) = CompareLT : r1910_2, r1910_3 -# 1910| v1910_5(void) = ConditionalBranch : r1910_4 +# 1956| int noreturnTest2(int) +# 1956| Block 0 +# 1956| v1956_1(void) = EnterFunction : +# 1956| mu1956_2(unknown) = AliasedDefinition : +# 1956| mu1956_3(unknown) = InitializeNonLocal : +# 1956| r1956_4(glval) = VariableAddress[x] : +# 1956| mu1956_5(int) = InitializeParameter[x] : &:r1956_4 +# 1957| r1957_1(glval) = VariableAddress[x] : +# 1957| r1957_2(int) = Load[x] : &:r1957_1, ~m? +# 1957| r1957_3(int) = Constant[10] : +# 1957| r1957_4(bool) = CompareLT : r1957_2, r1957_3 +# 1957| v1957_5(void) = ConditionalBranch : r1957_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 1911| Block 1 -# 1911| r1911_1(glval) = FunctionAddress[noreturnFunc] : -# 1911| v1911_2(void) = Call[noreturnFunc] : func:r1911_1 -# 1911| mu1911_3(unknown) = ^CallSideEffect : ~m? -# 1909| v1909_6(void) = Unreached : +# 1958| Block 1 +# 1958| r1958_1(glval) = FunctionAddress[noreturnFunc] : +# 1958| v1958_2(void) = Call[noreturnFunc] : func:r1958_1 +# 1958| mu1958_3(unknown) = ^CallSideEffect : ~m? +# 1956| v1956_6(void) = Unreached : -# 1913| Block 2 -# 1913| r1913_1(glval) = VariableAddress[#return] : -# 1913| r1913_2(glval) = VariableAddress[x] : -# 1913| r1913_3(int) = Load[x] : &:r1913_2, ~m? -# 1913| mu1913_4(int) = Store[#return] : &:r1913_1, r1913_3 -# 1909| r1909_7(glval) = VariableAddress[#return] : -# 1909| v1909_8(void) = ReturnValue : &:r1909_7, ~m? -# 1909| v1909_9(void) = AliasedUse : ~m? -# 1909| v1909_10(void) = ExitFunction : +# 1960| Block 2 +# 1960| r1960_1(glval) = VariableAddress[#return] : +# 1960| r1960_2(glval) = VariableAddress[x] : +# 1960| r1960_3(int) = Load[x] : &:r1960_2, ~m? +# 1960| mu1960_4(int) = Store[#return] : &:r1960_1, r1960_3 +# 1956| r1956_7(glval) = VariableAddress[#return] : +# 1956| v1956_8(void) = ReturnValue : &:r1956_7, ~m? +# 1956| v1956_9(void) = AliasedUse : ~m? +# 1956| v1956_10(void) = ExitFunction : -# 1916| int static_function(int) -# 1916| Block 0 -# 1916| v1916_1(void) = EnterFunction : -# 1916| mu1916_2(unknown) = AliasedDefinition : -# 1916| mu1916_3(unknown) = InitializeNonLocal : -# 1916| r1916_4(glval) = VariableAddress[x] : -# 1916| mu1916_5(int) = InitializeParameter[x] : &:r1916_4 -# 1917| r1917_1(glval) = VariableAddress[#return] : -# 1917| r1917_2(glval) = VariableAddress[x] : -# 1917| r1917_3(int) = Load[x] : &:r1917_2, ~m? -# 1917| mu1917_4(int) = Store[#return] : &:r1917_1, r1917_3 -# 1916| r1916_6(glval) = VariableAddress[#return] : -# 1916| v1916_7(void) = ReturnValue : &:r1916_6, ~m? -# 1916| v1916_8(void) = AliasedUse : ~m? -# 1916| v1916_9(void) = ExitFunction : +# 1963| int static_function(int) +# 1963| Block 0 +# 1963| v1963_1(void) = EnterFunction : +# 1963| mu1963_2(unknown) = AliasedDefinition : +# 1963| mu1963_3(unknown) = InitializeNonLocal : +# 1963| r1963_4(glval) = VariableAddress[x] : +# 1963| mu1963_5(int) = InitializeParameter[x] : &:r1963_4 +# 1964| r1964_1(glval) = VariableAddress[#return] : +# 1964| r1964_2(glval) = VariableAddress[x] : +# 1964| r1964_3(int) = Load[x] : &:r1964_2, ~m? +# 1964| mu1964_4(int) = Store[#return] : &:r1964_1, r1964_3 +# 1963| r1963_6(glval) = VariableAddress[#return] : +# 1963| v1963_7(void) = ReturnValue : &:r1963_6, ~m? +# 1963| v1963_8(void) = AliasedUse : ~m? +# 1963| v1963_9(void) = ExitFunction : -# 1920| void test_static_functions_with_assignments() -# 1920| Block 0 -# 1920| v1920_1(void) = EnterFunction : -# 1920| mu1920_2(unknown) = AliasedDefinition : -# 1920| mu1920_3(unknown) = InitializeNonLocal : -# 1921| r1921_1(glval) = VariableAddress[c] : -# 1921| mu1921_2(C) = Uninitialized[c] : &:r1921_1 -# 1921| r1921_3(glval) = FunctionAddress[C] : -# 1921| v1921_4(void) = Call[C] : func:r1921_3, this:r1921_1 -# 1921| mu1921_5(unknown) = ^CallSideEffect : ~m? -# 1921| mu1921_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1921_1 -# 1922| r1922_1(glval) = VariableAddress[x] : -# 1922| mu1922_2(int) = Uninitialized[x] : &:r1922_1 -# 1923| r1923_1(glval) = VariableAddress[c] : -# 1923| r1923_2(glval) = FunctionAddress[StaticMemberFunction] : -# 1923| r1923_3(int) = Constant[10] : -# 1923| r1923_4(int) = Call[StaticMemberFunction] : func:r1923_2, 0:r1923_3 -# 1923| mu1923_5(unknown) = ^CallSideEffect : ~m? -# 1923| r1923_6(glval) = VariableAddress[x] : -# 1923| mu1923_7(int) = Store[x] : &:r1923_6, r1923_4 -# 1924| r1924_1(glval) = VariableAddress[y] : -# 1924| mu1924_2(int) = Uninitialized[y] : &:r1924_1 -# 1925| r1925_1(glval) = FunctionAddress[StaticMemberFunction] : -# 1925| r1925_2(int) = Constant[10] : -# 1925| r1925_3(int) = Call[StaticMemberFunction] : func:r1925_1, 0:r1925_2 -# 1925| mu1925_4(unknown) = ^CallSideEffect : ~m? -# 1925| r1925_5(glval) = VariableAddress[y] : -# 1925| mu1925_6(int) = Store[y] : &:r1925_5, r1925_3 -# 1926| r1926_1(glval) = VariableAddress[z] : -# 1926| mu1926_2(int) = Uninitialized[z] : &:r1926_1 -# 1927| r1927_1(glval) = FunctionAddress[static_function] : -# 1927| r1927_2(int) = Constant[10] : -# 1927| r1927_3(int) = Call[static_function] : func:r1927_1, 0:r1927_2 -# 1927| mu1927_4(unknown) = ^CallSideEffect : ~m? -# 1927| r1927_5(glval) = VariableAddress[z] : -# 1927| mu1927_6(int) = Store[z] : &:r1927_5, r1927_3 -# 1928| v1928_1(void) = NoOp : -# 1928| r1928_2(glval) = VariableAddress[c] : -# 1928| r1928_3(glval) = FunctionAddress[~C] : -# 1928| v1928_4(void) = Call[~C] : func:r1928_3, this:r1928_2 -# 1928| mu1928_5(unknown) = ^CallSideEffect : ~m? -# 1928| v1928_6(void) = ^IndirectReadSideEffect[-1] : &:r1928_2, ~m? -# 1928| mu1928_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1928_2 -# 1920| v1920_4(void) = ReturnVoid : -# 1920| v1920_5(void) = AliasedUse : ~m? -# 1920| v1920_6(void) = ExitFunction : +# 1967| void test_static_functions_with_assignments() +# 1967| Block 0 +# 1967| v1967_1(void) = EnterFunction : +# 1967| mu1967_2(unknown) = AliasedDefinition : +# 1967| mu1967_3(unknown) = InitializeNonLocal : +# 1968| r1968_1(glval) = VariableAddress[c] : +# 1968| mu1968_2(C) = Uninitialized[c] : &:r1968_1 +# 1968| r1968_3(glval) = FunctionAddress[C] : +# 1968| v1968_4(void) = Call[C] : func:r1968_3, this:r1968_1 +# 1968| mu1968_5(unknown) = ^CallSideEffect : ~m? +# 1968| mu1968_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1968_1 +# 1969| r1969_1(glval) = VariableAddress[x] : +# 1969| mu1969_2(int) = Uninitialized[x] : &:r1969_1 +# 1970| r1970_1(glval) = VariableAddress[c] : +# 1970| r1970_2(glval) = FunctionAddress[StaticMemberFunction] : +# 1970| r1970_3(int) = Constant[10] : +# 1970| r1970_4(int) = Call[StaticMemberFunction] : func:r1970_2, 0:r1970_3 +# 1970| mu1970_5(unknown) = ^CallSideEffect : ~m? +# 1970| r1970_6(glval) = VariableAddress[x] : +# 1970| mu1970_7(int) = Store[x] : &:r1970_6, r1970_4 +# 1971| r1971_1(glval) = VariableAddress[y] : +# 1971| mu1971_2(int) = Uninitialized[y] : &:r1971_1 +# 1972| r1972_1(glval) = FunctionAddress[StaticMemberFunction] : +# 1972| r1972_2(int) = Constant[10] : +# 1972| r1972_3(int) = Call[StaticMemberFunction] : func:r1972_1, 0:r1972_2 +# 1972| mu1972_4(unknown) = ^CallSideEffect : ~m? +# 1972| r1972_5(glval) = VariableAddress[y] : +# 1972| mu1972_6(int) = Store[y] : &:r1972_5, r1972_3 +# 1973| r1973_1(glval) = VariableAddress[z] : +# 1973| mu1973_2(int) = Uninitialized[z] : &:r1973_1 +# 1974| r1974_1(glval) = FunctionAddress[static_function] : +# 1974| r1974_2(int) = Constant[10] : +# 1974| r1974_3(int) = Call[static_function] : func:r1974_1, 0:r1974_2 +# 1974| mu1974_4(unknown) = ^CallSideEffect : ~m? +# 1974| r1974_5(glval) = VariableAddress[z] : +# 1974| mu1974_6(int) = Store[z] : &:r1974_5, r1974_3 +# 1975| v1975_1(void) = NoOp : +# 1975| r1975_2(glval) = VariableAddress[c] : +# 1975| r1975_3(glval) = FunctionAddress[~C] : +# 1975| v1975_4(void) = Call[~C] : func:r1975_3, this:r1975_2 +# 1975| mu1975_5(unknown) = ^CallSideEffect : ~m? +# 1975| v1975_6(void) = ^IndirectReadSideEffect[-1] : &:r1975_2, ~m? +# 1975| mu1975_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1975_2 +# 1967| v1967_4(void) = ReturnVoid : +# 1967| v1967_5(void) = AliasedUse : ~m? +# 1967| v1967_6(void) = ExitFunction : -# 1930| void test_double_assign() -# 1930| Block 0 -# 1930| v1930_1(void) = EnterFunction : -# 1930| mu1930_2(unknown) = AliasedDefinition : -# 1930| mu1930_3(unknown) = InitializeNonLocal : -# 1931| r1931_1(glval) = VariableAddress[i] : -# 1931| mu1931_2(int) = Uninitialized[i] : &:r1931_1 -# 1931| r1931_3(glval) = VariableAddress[j] : -# 1931| mu1931_4(int) = Uninitialized[j] : &:r1931_3 -# 1932| r1932_1(int) = Constant[40] : -# 1932| r1932_2(glval) = VariableAddress[j] : -# 1932| mu1932_3(int) = Store[j] : &:r1932_2, r1932_1 -# 1932| r1932_4(int) = Load[j] : &:r1932_2, ~m? -# 1932| r1932_5(glval) = VariableAddress[i] : -# 1932| mu1932_6(int) = Store[i] : &:r1932_5, r1932_4 -# 1933| v1933_1(void) = NoOp : -# 1930| v1930_4(void) = ReturnVoid : -# 1930| v1930_5(void) = AliasedUse : ~m? -# 1930| v1930_6(void) = ExitFunction : +# 1977| void test_double_assign() +# 1977| Block 0 +# 1977| v1977_1(void) = EnterFunction : +# 1977| mu1977_2(unknown) = AliasedDefinition : +# 1977| mu1977_3(unknown) = InitializeNonLocal : +# 1978| r1978_1(glval) = VariableAddress[i] : +# 1978| mu1978_2(int) = Uninitialized[i] : &:r1978_1 +# 1978| r1978_3(glval) = VariableAddress[j] : +# 1978| mu1978_4(int) = Uninitialized[j] : &:r1978_3 +# 1979| r1979_1(int) = Constant[40] : +# 1979| r1979_2(glval) = VariableAddress[j] : +# 1979| mu1979_3(int) = Store[j] : &:r1979_2, r1979_1 +# 1979| r1979_4(int) = Load[j] : &:r1979_2, ~m? +# 1979| r1979_5(glval) = VariableAddress[i] : +# 1979| mu1979_6(int) = Store[i] : &:r1979_5, r1979_4 +# 1980| v1980_1(void) = NoOp : +# 1977| v1977_4(void) = ReturnVoid : +# 1977| v1977_5(void) = AliasedUse : ~m? +# 1977| v1977_6(void) = ExitFunction : -# 1935| void test_assign_with_assign_operation() -# 1935| Block 0 -# 1935| v1935_1(void) = EnterFunction : -# 1935| mu1935_2(unknown) = AliasedDefinition : -# 1935| mu1935_3(unknown) = InitializeNonLocal : -# 1936| r1936_1(glval) = VariableAddress[i] : -# 1936| mu1936_2(int) = Uninitialized[i] : &:r1936_1 -# 1936| r1936_3(glval) = VariableAddress[j] : -# 1936| r1936_4(int) = Constant[0] : -# 1936| mu1936_5(int) = Store[j] : &:r1936_3, r1936_4 -# 1937| r1937_1(int) = Constant[40] : -# 1937| r1937_2(glval) = VariableAddress[j] : -# 1937| r1937_3(int) = Load[j] : &:r1937_2, ~m? -# 1937| r1937_4(int) = Add : r1937_3, r1937_1 -# 1937| mu1937_5(int) = Store[j] : &:r1937_2, r1937_4 -# 1937| r1937_6(int) = Load[j] : &:r1937_2, ~m? -# 1937| r1937_7(glval) = VariableAddress[i] : -# 1937| mu1937_8(int) = Store[i] : &:r1937_7, r1937_6 -# 1938| v1938_1(void) = NoOp : -# 1935| v1935_4(void) = ReturnVoid : -# 1935| v1935_5(void) = AliasedUse : ~m? -# 1935| v1935_6(void) = ExitFunction : +# 1982| void test_assign_with_assign_operation() +# 1982| Block 0 +# 1982| v1982_1(void) = EnterFunction : +# 1982| mu1982_2(unknown) = AliasedDefinition : +# 1982| mu1982_3(unknown) = InitializeNonLocal : +# 1983| r1983_1(glval) = VariableAddress[i] : +# 1983| mu1983_2(int) = Uninitialized[i] : &:r1983_1 +# 1983| r1983_3(glval) = VariableAddress[j] : +# 1983| r1983_4(int) = Constant[0] : +# 1983| mu1983_5(int) = Store[j] : &:r1983_3, r1983_4 +# 1984| r1984_1(int) = Constant[40] : +# 1984| r1984_2(glval) = VariableAddress[j] : +# 1984| r1984_3(int) = Load[j] : &:r1984_2, ~m? +# 1984| r1984_4(int) = Add : r1984_3, r1984_1 +# 1984| mu1984_5(int) = Store[j] : &:r1984_2, r1984_4 +# 1984| r1984_6(int) = Load[j] : &:r1984_2, ~m? +# 1984| r1984_7(glval) = VariableAddress[i] : +# 1984| mu1984_8(int) = Store[i] : &:r1984_7, r1984_6 +# 1985| v1985_1(void) = NoOp : +# 1982| v1982_4(void) = ReturnVoid : +# 1982| v1982_5(void) = AliasedUse : ~m? +# 1982| v1982_6(void) = ExitFunction : -# 1944| D& D::ReferenceStaticMemberFunction() -# 1944| Block 0 -# 1944| v1944_1(void) = EnterFunction : -# 1944| mu1944_2(unknown) = AliasedDefinition : -# 1944| mu1944_3(unknown) = InitializeNonLocal : -# 1945| r1945_1(glval) = VariableAddress[#return] : -# 1945| r1945_2(glval) = VariableAddress[x] : -# 1945| r1945_3(D &) = CopyValue : r1945_2 -# 1945| mu1945_4(D &) = Store[#return] : &:r1945_1, r1945_3 -# 1944| r1944_4(glval) = VariableAddress[#return] : -# 1944| v1944_5(void) = ReturnValue : &:r1944_4, ~m? -# 1944| v1944_6(void) = AliasedUse : ~m? -# 1944| v1944_7(void) = ExitFunction : +# 1991| D& D::ReferenceStaticMemberFunction() +# 1991| Block 0 +# 1991| v1991_1(void) = EnterFunction : +# 1991| mu1991_2(unknown) = AliasedDefinition : +# 1991| mu1991_3(unknown) = InitializeNonLocal : +# 1992| r1992_1(glval) = VariableAddress[#return] : +# 1992| r1992_2(glval) = VariableAddress[x] : +# 1992| r1992_3(D &) = CopyValue : r1992_2 +# 1992| mu1992_4(D &) = Store[#return] : &:r1992_1, r1992_3 +# 1991| r1991_4(glval) = VariableAddress[#return] : +# 1991| v1991_5(void) = ReturnValue : &:r1991_4, ~m? +# 1991| v1991_6(void) = AliasedUse : ~m? +# 1991| v1991_7(void) = ExitFunction : -# 1947| D D::ObjectStaticMemberFunction() -# 1947| Block 0 -# 1947| v1947_1(void) = EnterFunction : -# 1947| mu1947_2(unknown) = AliasedDefinition : -# 1947| mu1947_3(unknown) = InitializeNonLocal : -# 1948| r1948_1(glval) = VariableAddress[#return] : -# 1948| r1948_2(glval) = VariableAddress[x] : -# 1948| r1948_3(D) = Load[x] : &:r1948_2, ~m? -# 1948| mu1948_4(D) = Store[#return] : &:r1948_1, r1948_3 -# 1947| r1947_4(glval) = VariableAddress[#return] : -# 1947| v1947_5(void) = ReturnValue : &:r1947_4, ~m? -# 1947| v1947_6(void) = AliasedUse : ~m? -# 1947| v1947_7(void) = ExitFunction : +# 1994| D D::ObjectStaticMemberFunction() +# 1994| Block 0 +# 1994| v1994_1(void) = EnterFunction : +# 1994| mu1994_2(unknown) = AliasedDefinition : +# 1994| mu1994_3(unknown) = InitializeNonLocal : +# 1995| r1995_1(glval) = VariableAddress[#return] : +# 1995| r1995_2(glval) = VariableAddress[x] : +# 1995| r1995_3(D) = Load[x] : &:r1995_2, ~m? +# 1995| mu1995_4(D) = Store[#return] : &:r1995_1, r1995_3 +# 1994| r1994_4(glval) = VariableAddress[#return] : +# 1994| v1994_5(void) = ReturnValue : &:r1994_4, ~m? +# 1994| v1994_6(void) = AliasedUse : ~m? +# 1994| v1994_7(void) = ExitFunction : -# 1952| void test_static_member_functions_with_reference_return() -# 1952| Block 0 -# 1952| v1952_1(void) = EnterFunction : -# 1952| mu1952_2(unknown) = AliasedDefinition : -# 1952| mu1952_3(unknown) = InitializeNonLocal : -# 1953| r1953_1(glval) = VariableAddress[d] : -# 1953| mu1953_2(D) = Uninitialized[d] : &:r1953_1 -# 1955| r1955_1(glval) = VariableAddress[d] : -# 1955| r1955_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1955| r1955_3(D &) = Call[ReferenceStaticMemberFunction] : func:r1955_2 -# 1955| mu1955_4(unknown) = ^CallSideEffect : ~m? -# 1955| r1955_5(glval) = CopyValue : r1955_3 -# 1956| r1956_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1956| r1956_2(D &) = Call[ReferenceStaticMemberFunction] : func:r1956_1 -# 1956| mu1956_3(unknown) = ^CallSideEffect : ~m? -# 1956| r1956_4(glval) = CopyValue : r1956_2 -# 1957| r1957_1(glval) = VariableAddress[d] : -# 1957| r1957_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1957| r1957_3(D) = Call[ObjectStaticMemberFunction] : func:r1957_2 -# 1957| mu1957_4(unknown) = ^CallSideEffect : ~m? -# 1958| r1958_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1958| r1958_2(D) = Call[ObjectStaticMemberFunction] : func:r1958_1 -# 1958| mu1958_3(unknown) = ^CallSideEffect : ~m? -# 1960| r1960_1(glval) = VariableAddress[x] : -# 1960| mu1960_2(D) = Uninitialized[x] : &:r1960_1 -# 1961| r1961_1(glval) = VariableAddress[d] : -# 1961| r1961_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1961| r1961_3(D &) = Call[ReferenceStaticMemberFunction] : func:r1961_2 -# 1961| mu1961_4(unknown) = ^CallSideEffect : ~m? -# 1961| r1961_5(D) = Load[?] : &:r1961_3, ~m? -# 1961| r1961_6(glval) = VariableAddress[x] : -# 1961| mu1961_7(D) = Store[x] : &:r1961_6, r1961_5 -# 1962| r1962_1(glval) = VariableAddress[y] : -# 1962| mu1962_2(D) = Uninitialized[y] : &:r1962_1 -# 1963| r1963_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1963| r1963_2(D &) = Call[ReferenceStaticMemberFunction] : func:r1963_1 -# 1963| mu1963_3(unknown) = ^CallSideEffect : ~m? -# 1963| r1963_4(D) = Load[?] : &:r1963_2, ~m? -# 1963| r1963_5(glval) = VariableAddress[y] : -# 1963| mu1963_6(D) = Store[y] : &:r1963_5, r1963_4 -# 1964| r1964_1(glval) = VariableAddress[j] : -# 1964| mu1964_2(D) = Uninitialized[j] : &:r1964_1 -# 1965| r1965_1(glval) = VariableAddress[d] : -# 1965| r1965_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1965| r1965_3(D) = Call[ObjectStaticMemberFunction] : func:r1965_2 -# 1965| mu1965_4(unknown) = ^CallSideEffect : ~m? -# 1965| r1965_5(glval) = VariableAddress[j] : -# 1965| mu1965_6(D) = Store[j] : &:r1965_5, r1965_3 -# 1966| r1966_1(glval) = VariableAddress[k] : -# 1966| mu1966_2(D) = Uninitialized[k] : &:r1966_1 -# 1967| r1967_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1967| r1967_2(D) = Call[ObjectStaticMemberFunction] : func:r1967_1 -# 1967| mu1967_3(unknown) = ^CallSideEffect : ~m? -# 1967| r1967_4(glval) = VariableAddress[k] : -# 1967| mu1967_5(D) = Store[k] : &:r1967_4, r1967_2 -# 1968| v1968_1(void) = NoOp : -# 1952| v1952_4(void) = ReturnVoid : -# 1952| v1952_5(void) = AliasedUse : ~m? -# 1952| v1952_6(void) = ExitFunction : +# 1999| void test_static_member_functions_with_reference_return() +# 1999| Block 0 +# 1999| v1999_1(void) = EnterFunction : +# 1999| mu1999_2(unknown) = AliasedDefinition : +# 1999| mu1999_3(unknown) = InitializeNonLocal : +# 2000| r2000_1(glval) = VariableAddress[d] : +# 2000| mu2000_2(D) = Uninitialized[d] : &:r2000_1 +# 2002| r2002_1(glval) = VariableAddress[d] : +# 2002| r2002_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2002| r2002_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2002_2 +# 2002| mu2002_4(unknown) = ^CallSideEffect : ~m? +# 2002| r2002_5(glval) = CopyValue : r2002_3 +# 2003| r2003_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2003| r2003_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2003_1 +# 2003| mu2003_3(unknown) = ^CallSideEffect : ~m? +# 2003| r2003_4(glval) = CopyValue : r2003_2 +# 2004| r2004_1(glval) = VariableAddress[d] : +# 2004| r2004_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2004| r2004_3(D) = Call[ObjectStaticMemberFunction] : func:r2004_2 +# 2004| mu2004_4(unknown) = ^CallSideEffect : ~m? +# 2005| r2005_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2005| r2005_2(D) = Call[ObjectStaticMemberFunction] : func:r2005_1 +# 2005| mu2005_3(unknown) = ^CallSideEffect : ~m? +# 2007| r2007_1(glval) = VariableAddress[x] : +# 2007| mu2007_2(D) = Uninitialized[x] : &:r2007_1 +# 2008| r2008_1(glval) = VariableAddress[d] : +# 2008| r2008_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2008| r2008_3(D &) = Call[ReferenceStaticMemberFunction] : func:r2008_2 +# 2008| mu2008_4(unknown) = ^CallSideEffect : ~m? +# 2008| r2008_5(D) = Load[?] : &:r2008_3, ~m? +# 2008| r2008_6(glval) = VariableAddress[x] : +# 2008| mu2008_7(D) = Store[x] : &:r2008_6, r2008_5 +# 2009| r2009_1(glval) = VariableAddress[y] : +# 2009| mu2009_2(D) = Uninitialized[y] : &:r2009_1 +# 2010| r2010_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 2010| r2010_2(D &) = Call[ReferenceStaticMemberFunction] : func:r2010_1 +# 2010| mu2010_3(unknown) = ^CallSideEffect : ~m? +# 2010| r2010_4(D) = Load[?] : &:r2010_2, ~m? +# 2010| r2010_5(glval) = VariableAddress[y] : +# 2010| mu2010_6(D) = Store[y] : &:r2010_5, r2010_4 +# 2011| r2011_1(glval) = VariableAddress[j] : +# 2011| mu2011_2(D) = Uninitialized[j] : &:r2011_1 +# 2012| r2012_1(glval) = VariableAddress[d] : +# 2012| r2012_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2012| r2012_3(D) = Call[ObjectStaticMemberFunction] : func:r2012_2 +# 2012| mu2012_4(unknown) = ^CallSideEffect : ~m? +# 2012| r2012_5(glval) = VariableAddress[j] : +# 2012| mu2012_6(D) = Store[j] : &:r2012_5, r2012_3 +# 2013| r2013_1(glval) = VariableAddress[k] : +# 2013| mu2013_2(D) = Uninitialized[k] : &:r2013_1 +# 2014| r2014_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 2014| r2014_2(D) = Call[ObjectStaticMemberFunction] : func:r2014_1 +# 2014| mu2014_3(unknown) = ^CallSideEffect : ~m? +# 2014| r2014_4(glval) = VariableAddress[k] : +# 2014| mu2014_5(D) = Store[k] : &:r2014_4, r2014_2 +# 2015| v2015_1(void) = NoOp : +# 1999| v1999_4(void) = ReturnVoid : +# 1999| v1999_5(void) = AliasedUse : ~m? +# 1999| v1999_6(void) = ExitFunction : -# 1970| void test_volatile() -# 1970| Block 0 -# 1970| v1970_1(void) = EnterFunction : -# 1970| mu1970_2(unknown) = AliasedDefinition : -# 1970| mu1970_3(unknown) = InitializeNonLocal : -# 1971| r1971_1(glval) = VariableAddress[x] : -# 1971| mu1971_2(int) = Uninitialized[x] : &:r1971_1 -# 1972| r1972_1(glval) = VariableAddress[x] : -# 1972| r1972_2(int) = Load[x] : &:r1972_1, ~m? -# 1973| v1973_1(void) = NoOp : -# 1970| v1970_4(void) = ReturnVoid : -# 1970| v1970_5(void) = AliasedUse : ~m? -# 1970| v1970_6(void) = ExitFunction : +# 2017| void test_volatile() +# 2017| Block 0 +# 2017| v2017_1(void) = EnterFunction : +# 2017| mu2017_2(unknown) = AliasedDefinition : +# 2017| mu2017_3(unknown) = InitializeNonLocal : +# 2018| r2018_1(glval) = VariableAddress[x] : +# 2018| mu2018_2(int) = Uninitialized[x] : &:r2018_1 +# 2019| r2019_1(glval) = VariableAddress[x] : +# 2019| r2019_2(int) = Load[x] : &:r2019_1, ~m? +# 2020| v2020_1(void) = NoOp : +# 2017| v2017_4(void) = ReturnVoid : +# 2017| v2017_5(void) = AliasedUse : ~m? +# 2017| v2017_6(void) = ExitFunction : -# 1981| void value_category_test() -# 1981| Block 0 -# 1981| v1981_1(void) = EnterFunction : -# 1981| mu1981_2(unknown) = AliasedDefinition : -# 1981| mu1981_3(unknown) = InitializeNonLocal : -# 1982| r1982_1(glval) = VariableAddress[c] : -# 1982| mu1982_2(ValCat) = Uninitialized[c] : &:r1982_1 +# 2028| void value_category_test() +# 2028| Block 0 +# 2028| v2028_1(void) = EnterFunction : +# 2028| mu2028_2(unknown) = AliasedDefinition : +# 2028| mu2028_3(unknown) = InitializeNonLocal : +# 2029| r2029_1(glval) = VariableAddress[c] : +# 2029| mu2029_2(ValCat) = Uninitialized[c] : &:r2029_1 #-----| r0_1(glval) = VariableAddress[#temp0:0] : #-----| mu0_2(ValCat) = Uninitialized[#temp0:0] : &:r0_1 #-----| r0_3(ValCat) = Load[#temp0:0] : &:r0_1, ~m? -# 1984| r1984_1(glval) = VariableAddress[c] : -# 1984| r1984_2(glval) = FunctionAddress[lvalue] : -# 1984| r1984_3(ValCat &) = Call[lvalue] : func:r1984_2 -# 1984| mu1984_4(unknown) = ^CallSideEffect : ~m? -# 1984| r1984_5(glval) = CopyValue : r1984_3 -# 1984| mu1984_6(ValCat) = Store[?] : &:r1984_5, r0_3 +# 2031| r2031_1(glval) = VariableAddress[c] : +# 2031| r2031_2(glval) = FunctionAddress[lvalue] : +# 2031| r2031_3(ValCat &) = Call[lvalue] : func:r2031_2 +# 2031| mu2031_4(unknown) = ^CallSideEffect : ~m? +# 2031| r2031_5(glval) = CopyValue : r2031_3 +# 2031| mu2031_6(ValCat) = Store[?] : &:r2031_5, r0_3 #-----| r0_4(glval) = VariableAddress[#temp0:0] : #-----| mu0_5(ValCat) = Uninitialized[#temp0:0] : &:r0_4 #-----| r0_6(ValCat) = Load[#temp0:0] : &:r0_4, ~m? -# 1985| r1985_1(glval) = VariableAddress[c] : -# 1985| r1985_2(glval) = FunctionAddress[xvalue] : -# 1985| r1985_3(ValCat &&) = Call[xvalue] : func:r1985_2 -# 1985| mu1985_4(unknown) = ^CallSideEffect : ~m? -# 1985| r1985_5(glval) = CopyValue : r1985_3 -# 1985| mu1985_6(ValCat) = Store[?] : &:r1985_5, r0_6 +# 2032| r2032_1(glval) = VariableAddress[c] : +# 2032| r2032_2(glval) = FunctionAddress[xvalue] : +# 2032| r2032_3(ValCat &&) = Call[xvalue] : func:r2032_2 +# 2032| mu2032_4(unknown) = ^CallSideEffect : ~m? +# 2032| r2032_5(glval) = CopyValue : r2032_3 +# 2032| mu2032_6(ValCat) = Store[?] : &:r2032_5, r0_6 #-----| r0_7(glval) = VariableAddress[#temp0:0] : #-----| mu0_8(ValCat) = Uninitialized[#temp0:0] : &:r0_7 #-----| r0_9(ValCat) = Load[#temp0:0] : &:r0_7, ~m? -# 1986| r1986_1(glval) = VariableAddress[#temp1986:5] : -# 1986| r1986_2(glval) = VariableAddress[c] : -# 1986| r1986_3(glval) = FunctionAddress[prvalue] : -# 1986| r1986_4(ValCat) = Call[prvalue] : func:r1986_3 -# 1986| mu1986_5(unknown) = ^CallSideEffect : ~m? -# 1986| mu1986_6(ValCat) = Store[#temp1986:5] : &:r1986_1, r1986_4 -# 1986| mu1986_7(ValCat) = Store[#temp1986:5] : &:r1986_1, r0_9 +# 2033| r2033_1(glval) = VariableAddress[#temp2033:5] : +# 2033| r2033_2(glval) = VariableAddress[c] : +# 2033| r2033_3(glval) = FunctionAddress[prvalue] : +# 2033| r2033_4(ValCat) = Call[prvalue] : func:r2033_3 +# 2033| mu2033_5(unknown) = ^CallSideEffect : ~m? +# 2033| mu2033_6(ValCat) = Store[#temp2033:5] : &:r2033_1, r2033_4 +# 2033| mu2033_7(ValCat) = Store[#temp2033:5] : &:r2033_1, r0_9 #-----| r0_10(glval) = VariableAddress[#temp0:0] : #-----| mu0_11(ValCat) = Uninitialized[#temp0:0] : &:r0_10 #-----| r0_12(ValCat) = Load[#temp0:0] : &:r0_10, ~m? -# 1987| r1987_1(glval) = FunctionAddress[lvalue] : -# 1987| r1987_2(ValCat &) = Call[lvalue] : func:r1987_1 -# 1987| mu1987_3(unknown) = ^CallSideEffect : ~m? -# 1987| r1987_4(glval) = CopyValue : r1987_2 -# 1987| mu1987_5(ValCat) = Store[?] : &:r1987_4, r0_12 +# 2034| r2034_1(glval) = FunctionAddress[lvalue] : +# 2034| r2034_2(ValCat &) = Call[lvalue] : func:r2034_1 +# 2034| mu2034_3(unknown) = ^CallSideEffect : ~m? +# 2034| r2034_4(glval) = CopyValue : r2034_2 +# 2034| mu2034_5(ValCat) = Store[?] : &:r2034_4, r0_12 #-----| r0_13(glval) = VariableAddress[#temp0:0] : #-----| mu0_14(ValCat) = Uninitialized[#temp0:0] : &:r0_13 #-----| r0_15(ValCat) = Load[#temp0:0] : &:r0_13, ~m? -# 1988| r1988_1(glval) = FunctionAddress[xvalue] : -# 1988| r1988_2(ValCat &&) = Call[xvalue] : func:r1988_1 -# 1988| mu1988_3(unknown) = ^CallSideEffect : ~m? -# 1988| r1988_4(glval) = CopyValue : r1988_2 -# 1988| mu1988_5(ValCat) = Store[?] : &:r1988_4, r0_15 +# 2035| r2035_1(glval) = FunctionAddress[xvalue] : +# 2035| r2035_2(ValCat &&) = Call[xvalue] : func:r2035_1 +# 2035| mu2035_3(unknown) = ^CallSideEffect : ~m? +# 2035| r2035_4(glval) = CopyValue : r2035_2 +# 2035| mu2035_5(ValCat) = Store[?] : &:r2035_4, r0_15 #-----| r0_16(glval) = VariableAddress[#temp0:0] : #-----| mu0_17(ValCat) = Uninitialized[#temp0:0] : &:r0_16 #-----| r0_18(ValCat) = Load[#temp0:0] : &:r0_16, ~m? -# 1989| r1989_1(glval) = VariableAddress[#temp1989:5] : -# 1989| r1989_2(glval) = FunctionAddress[prvalue] : -# 1989| r1989_3(ValCat) = Call[prvalue] : func:r1989_2 -# 1989| mu1989_4(unknown) = ^CallSideEffect : ~m? -# 1989| mu1989_5(ValCat) = Store[#temp1989:5] : &:r1989_1, r1989_3 -# 1989| mu1989_6(ValCat) = Store[#temp1989:5] : &:r1989_1, r0_18 -# 1990| v1990_1(void) = NoOp : -# 1981| v1981_4(void) = ReturnVoid : -# 1981| v1981_5(void) = AliasedUse : ~m? -# 1981| v1981_6(void) = ExitFunction : +# 2036| r2036_1(glval) = VariableAddress[#temp2036:5] : +# 2036| r2036_2(glval) = FunctionAddress[prvalue] : +# 2036| r2036_3(ValCat) = Call[prvalue] : func:r2036_2 +# 2036| mu2036_4(unknown) = ^CallSideEffect : ~m? +# 2036| mu2036_5(ValCat) = Store[#temp2036:5] : &:r2036_1, r2036_3 +# 2036| mu2036_6(ValCat) = Store[#temp2036:5] : &:r2036_1, r0_18 +# 2037| v2037_1(void) = NoOp : +# 2028| v2028_4(void) = ReturnVoid : +# 2028| v2028_5(void) = AliasedUse : ~m? +# 2028| v2028_6(void) = ExitFunction : -# 1992| void SetStaticFuncPtr() -# 1992| Block 0 -# 1992| v1992_1(void) = EnterFunction : -# 1992| mu1992_2(unknown) = AliasedDefinition : -# 1992| mu1992_3(unknown) = InitializeNonLocal : -# 1993| r1993_1(glval) = VariableAddress[c] : -# 1993| mu1993_2(C) = Uninitialized[c] : &:r1993_1 -# 1993| r1993_3(glval) = FunctionAddress[C] : -# 1993| v1993_4(void) = Call[C] : func:r1993_3, this:r1993_1 -# 1993| mu1993_5(unknown) = ^CallSideEffect : ~m? -# 1993| mu1993_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1993_1 -# 1994| r1994_1(glval<..(*)(..)>) = VariableAddress[pfn] : -# 1994| r1994_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : -# 1994| mu1994_3(..(*)(..)) = Store[pfn] : &:r1994_1, r1994_2 -# 1995| r1995_1(glval) = VariableAddress[c] : -# 1995| r1995_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : -# 1995| r1995_3(glval<..(*)(..)>) = VariableAddress[pfn] : -# 1995| mu1995_4(..(*)(..)) = Store[pfn] : &:r1995_3, r1995_2 -# 1996| v1996_1(void) = NoOp : -# 1996| r1996_2(glval) = VariableAddress[c] : -# 1996| r1996_3(glval) = FunctionAddress[~C] : -# 1996| v1996_4(void) = Call[~C] : func:r1996_3, this:r1996_2 -# 1996| mu1996_5(unknown) = ^CallSideEffect : ~m? -# 1996| v1996_6(void) = ^IndirectReadSideEffect[-1] : &:r1996_2, ~m? -# 1996| mu1996_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1996_2 -# 1992| v1992_4(void) = ReturnVoid : -# 1992| v1992_5(void) = AliasedUse : ~m? -# 1992| v1992_6(void) = ExitFunction : +# 2039| void SetStaticFuncPtr() +# 2039| Block 0 +# 2039| v2039_1(void) = EnterFunction : +# 2039| mu2039_2(unknown) = AliasedDefinition : +# 2039| mu2039_3(unknown) = InitializeNonLocal : +# 2040| r2040_1(glval) = VariableAddress[c] : +# 2040| mu2040_2(C) = Uninitialized[c] : &:r2040_1 +# 2040| r2040_3(glval) = FunctionAddress[C] : +# 2040| v2040_4(void) = Call[C] : func:r2040_3, this:r2040_1 +# 2040| mu2040_5(unknown) = ^CallSideEffect : ~m? +# 2040| mu2040_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r2040_1 +# 2041| r2041_1(glval<..(*)(..)>) = VariableAddress[pfn] : +# 2041| r2041_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : +# 2041| mu2041_3(..(*)(..)) = Store[pfn] : &:r2041_1, r2041_2 +# 2042| r2042_1(glval) = VariableAddress[c] : +# 2042| r2042_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : +# 2042| r2042_3(glval<..(*)(..)>) = VariableAddress[pfn] : +# 2042| mu2042_4(..(*)(..)) = Store[pfn] : &:r2042_3, r2042_2 +# 2043| v2043_1(void) = NoOp : +# 2043| r2043_2(glval) = VariableAddress[c] : +# 2043| r2043_3(glval) = FunctionAddress[~C] : +# 2043| v2043_4(void) = Call[~C] : func:r2043_3, this:r2043_2 +# 2043| mu2043_5(unknown) = ^CallSideEffect : ~m? +# 2043| v2043_6(void) = ^IndirectReadSideEffect[-1] : &:r2043_2, ~m? +# 2043| mu2043_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r2043_2 +# 2039| v2039_4(void) = ReturnVoid : +# 2039| v2039_5(void) = AliasedUse : ~m? +# 2039| v2039_6(void) = ExitFunction : -# 1998| void TernaryTestInt(bool, int, int, int) -# 1998| Block 0 -# 1998| v1998_1(void) = EnterFunction : -# 1998| mu1998_2(unknown) = AliasedDefinition : -# 1998| mu1998_3(unknown) = InitializeNonLocal : -# 1998| r1998_4(glval) = VariableAddress[a] : -# 1998| mu1998_5(bool) = InitializeParameter[a] : &:r1998_4 -# 1998| r1998_6(glval) = VariableAddress[x] : -# 1998| mu1998_7(int) = InitializeParameter[x] : &:r1998_6 -# 1998| r1998_8(glval) = VariableAddress[y] : -# 1998| mu1998_9(int) = InitializeParameter[y] : &:r1998_8 -# 1998| r1998_10(glval) = VariableAddress[z] : -# 1998| mu1998_11(int) = InitializeParameter[z] : &:r1998_10 -# 1999| r1999_1(glval) = VariableAddress[a] : -# 1999| r1999_2(bool) = Load[a] : &:r1999_1, ~m? -# 1999| v1999_3(void) = ConditionalBranch : r1999_2 +# 2045| void TernaryTestInt(bool, int, int, int) +# 2045| Block 0 +# 2045| v2045_1(void) = EnterFunction : +# 2045| mu2045_2(unknown) = AliasedDefinition : +# 2045| mu2045_3(unknown) = InitializeNonLocal : +# 2045| r2045_4(glval) = VariableAddress[a] : +# 2045| mu2045_5(bool) = InitializeParameter[a] : &:r2045_4 +# 2045| r2045_6(glval) = VariableAddress[x] : +# 2045| mu2045_7(int) = InitializeParameter[x] : &:r2045_6 +# 2045| r2045_8(glval) = VariableAddress[y] : +# 2045| mu2045_9(int) = InitializeParameter[y] : &:r2045_8 +# 2045| r2045_10(glval) = VariableAddress[z] : +# 2045| mu2045_11(int) = InitializeParameter[z] : &:r2045_10 +# 2046| r2046_1(glval) = VariableAddress[a] : +# 2046| r2046_2(bool) = Load[a] : &:r2046_1, ~m? +# 2046| v2046_3(void) = ConditionalBranch : r2046_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 1999| Block 1 -# 1999| r1999_4(glval) = VariableAddress[#temp1999:9] : -# 1999| r1999_5(int) = Load[#temp1999:9] : &:r1999_4, ~m? -# 1999| r1999_6(glval) = VariableAddress[z] : -# 1999| mu1999_7(int) = Store[z] : &:r1999_6, r1999_5 -# 2000| r2000_1(glval) = VariableAddress[a] : -# 2000| r2000_2(bool) = Load[a] : &:r2000_1, ~m? -# 2000| v2000_3(void) = ConditionalBranch : r2000_2 +# 2046| Block 1 +# 2046| r2046_4(glval) = VariableAddress[#temp2046:9] : +# 2046| r2046_5(int) = Load[#temp2046:9] : &:r2046_4, ~m? +# 2046| r2046_6(glval) = VariableAddress[z] : +# 2046| mu2046_7(int) = Store[z] : &:r2046_6, r2046_5 +# 2047| r2047_1(glval) = VariableAddress[a] : +# 2047| r2047_2(bool) = Load[a] : &:r2047_1, ~m? +# 2047| v2047_3(void) = ConditionalBranch : r2047_2 #-----| False -> Block 6 #-----| True -> Block 5 -# 1999| Block 2 -# 1999| r1999_8(glval) = VariableAddress[x] : -# 1999| r1999_9(int) = Load[x] : &:r1999_8, ~m? -# 1999| r1999_10(glval) = VariableAddress[#temp1999:9] : -# 1999| mu1999_11(int) = Store[#temp1999:9] : &:r1999_10, r1999_9 +# 2046| Block 2 +# 2046| r2046_8(glval) = VariableAddress[x] : +# 2046| r2046_9(int) = Load[x] : &:r2046_8, ~m? +# 2046| r2046_10(glval) = VariableAddress[#temp2046:9] : +# 2046| mu2046_11(int) = Store[#temp2046:9] : &:r2046_10, r2046_9 #-----| Goto -> Block 1 -# 1999| Block 3 -# 1999| r1999_12(glval) = VariableAddress[y] : -# 1999| r1999_13(int) = Load[y] : &:r1999_12, ~m? -# 1999| r1999_14(glval) = VariableAddress[#temp1999:9] : -# 1999| mu1999_15(int) = Store[#temp1999:9] : &:r1999_14, r1999_13 +# 2046| Block 3 +# 2046| r2046_12(glval) = VariableAddress[y] : +# 2046| r2046_13(int) = Load[y] : &:r2046_12, ~m? +# 2046| r2046_14(glval) = VariableAddress[#temp2046:9] : +# 2046| mu2046_15(int) = Store[#temp2046:9] : &:r2046_14, r2046_13 #-----| Goto -> Block 1 -# 2000| Block 4 -# 2000| r2000_4(glval) = VariableAddress[#temp2000:9] : -# 2000| r2000_5(int) = Load[#temp2000:9] : &:r2000_4, ~m? -# 2000| r2000_6(glval) = VariableAddress[z] : -# 2000| mu2000_7(int) = Store[z] : &:r2000_6, r2000_5 -# 2001| r2001_1(glval) = VariableAddress[a] : -# 2001| r2001_2(bool) = Load[a] : &:r2001_1, ~m? -# 2001| v2001_3(void) = ConditionalBranch : r2001_2 +# 2047| Block 4 +# 2047| r2047_4(glval) = VariableAddress[#temp2047:9] : +# 2047| r2047_5(int) = Load[#temp2047:9] : &:r2047_4, ~m? +# 2047| r2047_6(glval) = VariableAddress[z] : +# 2047| mu2047_7(int) = Store[z] : &:r2047_6, r2047_5 +# 2048| r2048_1(glval) = VariableAddress[a] : +# 2048| r2048_2(bool) = Load[a] : &:r2048_1, ~m? +# 2048| v2048_3(void) = ConditionalBranch : r2048_2 #-----| False -> Block 9 #-----| True -> Block 8 -# 2000| Block 5 -# 2000| r2000_8(glval) = VariableAddress[x] : -# 2000| r2000_9(int) = Load[x] : &:r2000_8, ~m? -# 2000| r2000_10(glval) = VariableAddress[#temp2000:9] : -# 2000| mu2000_11(int) = Store[#temp2000:9] : &:r2000_10, r2000_9 +# 2047| Block 5 +# 2047| r2047_8(glval) = VariableAddress[x] : +# 2047| r2047_9(int) = Load[x] : &:r2047_8, ~m? +# 2047| r2047_10(glval) = VariableAddress[#temp2047:9] : +# 2047| mu2047_11(int) = Store[#temp2047:9] : &:r2047_10, r2047_9 #-----| Goto -> Block 4 -# 2000| Block 6 -# 2000| r2000_12(int) = Constant[5] : -# 2000| r2000_13(glval) = VariableAddress[#temp2000:9] : -# 2000| mu2000_14(int) = Store[#temp2000:9] : &:r2000_13, r2000_12 +# 2047| Block 6 +# 2047| r2047_12(int) = Constant[5] : +# 2047| r2047_13(glval) = VariableAddress[#temp2047:9] : +# 2047| mu2047_14(int) = Store[#temp2047:9] : &:r2047_13, r2047_12 #-----| Goto -> Block 4 -# 2001| Block 7 -# 2001| r2001_4(glval) = VariableAddress[#temp2001:9] : -# 2001| r2001_5(int) = Load[#temp2001:9] : &:r2001_4, ~m? -# 2001| r2001_6(glval) = VariableAddress[z] : -# 2001| mu2001_7(int) = Store[z] : &:r2001_6, r2001_5 -# 2002| r2002_1(int) = Constant[7] : -# 2002| r2002_2(glval) = VariableAddress[a] : -# 2002| r2002_3(bool) = Load[a] : &:r2002_2, ~m? -# 2002| v2002_4(void) = ConditionalBranch : r2002_3 +# 2048| Block 7 +# 2048| r2048_4(glval) = VariableAddress[#temp2048:9] : +# 2048| r2048_5(int) = Load[#temp2048:9] : &:r2048_4, ~m? +# 2048| r2048_6(glval) = VariableAddress[z] : +# 2048| mu2048_7(int) = Store[z] : &:r2048_6, r2048_5 +# 2049| r2049_1(int) = Constant[7] : +# 2049| r2049_2(glval) = VariableAddress[a] : +# 2049| r2049_3(bool) = Load[a] : &:r2049_2, ~m? +# 2049| v2049_4(void) = ConditionalBranch : r2049_3 #-----| False -> Block 12 #-----| True -> Block 11 -# 2001| Block 8 -# 2001| r2001_8(int) = Constant[3] : -# 2001| r2001_9(glval) = VariableAddress[#temp2001:9] : -# 2001| mu2001_10(int) = Store[#temp2001:9] : &:r2001_9, r2001_8 +# 2048| Block 8 +# 2048| r2048_8(int) = Constant[3] : +# 2048| r2048_9(glval) = VariableAddress[#temp2048:9] : +# 2048| mu2048_10(int) = Store[#temp2048:9] : &:r2048_9, r2048_8 #-----| Goto -> Block 7 -# 2001| Block 9 -# 2001| r2001_11(int) = Constant[5] : -# 2001| r2001_12(glval) = VariableAddress[#temp2001:9] : -# 2001| mu2001_13(int) = Store[#temp2001:9] : &:r2001_12, r2001_11 +# 2048| Block 9 +# 2048| r2048_11(int) = Constant[5] : +# 2048| r2048_12(glval) = VariableAddress[#temp2048:9] : +# 2048| mu2048_13(int) = Store[#temp2048:9] : &:r2048_12, r2048_11 #-----| Goto -> Block 7 -# 2002| Block 10 -# 2002| r2002_5(glval) = VariableAddress[#temp2002:6] : -# 2002| r2002_6(glval) = Load[#temp2002:6] : &:r2002_5, ~m? -# 2002| mu2002_7(int) = Store[?] : &:r2002_6, r2002_1 -# 2003| v2003_1(void) = NoOp : -# 1998| v1998_12(void) = ReturnVoid : -# 1998| v1998_13(void) = AliasedUse : ~m? -# 1998| v1998_14(void) = ExitFunction : +# 2049| Block 10 +# 2049| r2049_5(glval) = VariableAddress[#temp2049:6] : +# 2049| r2049_6(glval) = Load[#temp2049:6] : &:r2049_5, ~m? +# 2049| mu2049_7(int) = Store[?] : &:r2049_6, r2049_1 +# 2050| v2050_1(void) = NoOp : +# 2045| v2045_12(void) = ReturnVoid : +# 2045| v2045_13(void) = AliasedUse : ~m? +# 2045| v2045_14(void) = ExitFunction : -# 2002| Block 11 -# 2002| r2002_8(glval) = VariableAddress[x] : -# 2002| r2002_9(glval) = VariableAddress[#temp2002:6] : -# 2002| mu2002_10(glval) = Store[#temp2002:6] : &:r2002_9, r2002_8 +# 2049| Block 11 +# 2049| r2049_8(glval) = VariableAddress[x] : +# 2049| r2049_9(glval) = VariableAddress[#temp2049:6] : +# 2049| mu2049_10(glval) = Store[#temp2049:6] : &:r2049_9, r2049_8 #-----| Goto -> Block 10 -# 2002| Block 12 -# 2002| r2002_11(glval) = VariableAddress[y] : -# 2002| r2002_12(glval) = VariableAddress[#temp2002:6] : -# 2002| mu2002_13(glval) = Store[#temp2002:6] : &:r2002_12, r2002_11 +# 2049| Block 12 +# 2049| r2049_11(glval) = VariableAddress[y] : +# 2049| r2049_12(glval) = VariableAddress[#temp2049:6] : +# 2049| mu2049_13(glval) = Store[#temp2049:6] : &:r2049_12, r2049_11 #-----| Goto -> Block 10 -# 2008| void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) -# 2008| Block 0 -# 2008| v2008_1(void) = EnterFunction : -# 2008| mu2008_2(unknown) = AliasedDefinition : -# 2008| mu2008_3(unknown) = InitializeNonLocal : -# 2008| r2008_4(glval) = VariableAddress[a] : -# 2008| mu2008_5(bool) = InitializeParameter[a] : &:r2008_4 -# 2008| r2008_6(glval) = VariableAddress[x] : -# 2008| mu2008_7(TernaryPodObj) = InitializeParameter[x] : &:r2008_6 -# 2008| r2008_8(glval) = VariableAddress[y] : -# 2008| mu2008_9(TernaryPodObj) = InitializeParameter[y] : &:r2008_8 -# 2008| r2008_10(glval) = VariableAddress[z] : -# 2008| mu2008_11(TernaryPodObj) = InitializeParameter[z] : &:r2008_10 -# 2009| r2009_1(glval) = VariableAddress[a] : -# 2009| r2009_2(bool) = Load[a] : &:r2009_1, ~m? -# 2009| v2009_3(void) = ConditionalBranch : r2009_2 +# 2055| void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) +# 2055| Block 0 +# 2055| v2055_1(void) = EnterFunction : +# 2055| mu2055_2(unknown) = AliasedDefinition : +# 2055| mu2055_3(unknown) = InitializeNonLocal : +# 2055| r2055_4(glval) = VariableAddress[a] : +# 2055| mu2055_5(bool) = InitializeParameter[a] : &:r2055_4 +# 2055| r2055_6(glval) = VariableAddress[x] : +# 2055| mu2055_7(TernaryPodObj) = InitializeParameter[x] : &:r2055_6 +# 2055| r2055_8(glval) = VariableAddress[y] : +# 2055| mu2055_9(TernaryPodObj) = InitializeParameter[y] : &:r2055_8 +# 2055| r2055_10(glval) = VariableAddress[z] : +# 2055| mu2055_11(TernaryPodObj) = InitializeParameter[z] : &:r2055_10 +# 2056| r2056_1(glval) = VariableAddress[a] : +# 2056| r2056_2(bool) = Load[a] : &:r2056_1, ~m? +# 2056| v2056_3(void) = ConditionalBranch : r2056_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 2009| Block 1 -# 2009| r2009_4(glval) = VariableAddress[#temp2009:9] : -# 2009| r2009_5(TernaryPodObj) = Load[#temp2009:9] : &:r2009_4, ~m? -# 2009| r2009_6(glval) = VariableAddress[z] : -# 2009| mu2009_7(TernaryPodObj) = Store[z] : &:r2009_6, r2009_5 -# 2010| r2010_1(glval) = VariableAddress[#temp2010:9] : -# 2010| r2010_2(glval) = VariableAddress[a] : -# 2010| r2010_3(bool) = Load[a] : &:r2010_2, ~m? -# 2010| v2010_4(void) = ConditionalBranch : r2010_3 +# 2056| Block 1 +# 2056| r2056_4(glval) = VariableAddress[#temp2056:9] : +# 2056| r2056_5(TernaryPodObj) = Load[#temp2056:9] : &:r2056_4, ~m? +# 2056| r2056_6(glval) = VariableAddress[z] : +# 2056| mu2056_7(TernaryPodObj) = Store[z] : &:r2056_6, r2056_5 +# 2057| r2057_1(glval) = VariableAddress[#temp2057:9] : +# 2057| r2057_2(glval) = VariableAddress[a] : +# 2057| r2057_3(bool) = Load[a] : &:r2057_2, ~m? +# 2057| v2057_4(void) = ConditionalBranch : r2057_3 #-----| False -> Block 6 #-----| True -> Block 5 -# 2009| Block 2 -# 2009| r2009_8(glval) = VariableAddress[x] : -# 2009| r2009_9(TernaryPodObj) = Load[x] : &:r2009_8, ~m? -# 2009| r2009_10(glval) = VariableAddress[#temp2009:9] : -# 2009| mu2009_11(TernaryPodObj) = Store[#temp2009:9] : &:r2009_10, r2009_9 +# 2056| Block 2 +# 2056| r2056_8(glval) = VariableAddress[x] : +# 2056| r2056_9(TernaryPodObj) = Load[x] : &:r2056_8, ~m? +# 2056| r2056_10(glval) = VariableAddress[#temp2056:9] : +# 2056| mu2056_11(TernaryPodObj) = Store[#temp2056:9] : &:r2056_10, r2056_9 #-----| Goto -> Block 1 -# 2009| Block 3 -# 2009| r2009_12(glval) = VariableAddress[y] : -# 2009| r2009_13(TernaryPodObj) = Load[y] : &:r2009_12, ~m? -# 2009| r2009_14(glval) = VariableAddress[#temp2009:9] : -# 2009| mu2009_15(TernaryPodObj) = Store[#temp2009:9] : &:r2009_14, r2009_13 +# 2056| Block 3 +# 2056| r2056_12(glval) = VariableAddress[y] : +# 2056| r2056_13(TernaryPodObj) = Load[y] : &:r2056_12, ~m? +# 2056| r2056_14(glval) = VariableAddress[#temp2056:9] : +# 2056| mu2056_15(TernaryPodObj) = Store[#temp2056:9] : &:r2056_14, r2056_13 #-----| Goto -> Block 1 -# 2010| Block 4 -# 2010| r2010_5(glval) = VariableAddress[#temp2010:9] : -# 2010| r2010_6(TernaryPodObj) = Load[#temp2010:9] : &:r2010_5, ~m? -# 2010| mu2010_7(TernaryPodObj) = Store[#temp2010:9] : &:r2010_1, r2010_6 -# 2010| r2010_8(TernaryPodObj) = Load[#temp2010:9] : &:r2010_1, ~m? -# 2010| r2010_9(glval) = VariableAddress[z] : -# 2010| mu2010_10(TernaryPodObj) = Store[z] : &:r2010_9, r2010_8 -# 2011| r2011_1(glval) = VariableAddress[#temp2011:9] : -# 2011| r2011_2(glval) = VariableAddress[a] : -# 2011| r2011_3(bool) = Load[a] : &:r2011_2, ~m? -# 2011| v2011_4(void) = ConditionalBranch : r2011_3 +# 2057| Block 4 +# 2057| r2057_5(glval) = VariableAddress[#temp2057:9] : +# 2057| r2057_6(TernaryPodObj) = Load[#temp2057:9] : &:r2057_5, ~m? +# 2057| mu2057_7(TernaryPodObj) = Store[#temp2057:9] : &:r2057_1, r2057_6 +# 2057| r2057_8(TernaryPodObj) = Load[#temp2057:9] : &:r2057_1, ~m? +# 2057| r2057_9(glval) = VariableAddress[z] : +# 2057| mu2057_10(TernaryPodObj) = Store[z] : &:r2057_9, r2057_8 +# 2058| r2058_1(glval) = VariableAddress[#temp2058:9] : +# 2058| r2058_2(glval) = VariableAddress[a] : +# 2058| r2058_3(bool) = Load[a] : &:r2058_2, ~m? +# 2058| v2058_4(void) = ConditionalBranch : r2058_3 #-----| False -> Block 9 #-----| True -> Block 8 -# 2010| Block 5 -# 2010| r2010_11(glval) = VariableAddress[#temp2010:13] : -# 2010| r2010_12(glval) = VariableAddress[x] : -# 2010| r2010_13(TernaryPodObj) = Load[x] : &:r2010_12, ~m? -# 2010| mu2010_14(TernaryPodObj) = Store[#temp2010:13] : &:r2010_11, r2010_13 -# 2010| r2010_15(TernaryPodObj) = Load[#temp2010:13] : &:r2010_11, ~m? -# 2010| r2010_16(glval) = VariableAddress[#temp2010:9] : -# 2010| mu2010_17(TernaryPodObj) = Store[#temp2010:9] : &:r2010_16, r2010_15 +# 2057| Block 5 +# 2057| r2057_11(glval) = VariableAddress[#temp2057:13] : +# 2057| r2057_12(glval) = VariableAddress[x] : +# 2057| r2057_13(TernaryPodObj) = Load[x] : &:r2057_12, ~m? +# 2057| mu2057_14(TernaryPodObj) = Store[#temp2057:13] : &:r2057_11, r2057_13 +# 2057| r2057_15(TernaryPodObj) = Load[#temp2057:13] : &:r2057_11, ~m? +# 2057| r2057_16(glval) = VariableAddress[#temp2057:9] : +# 2057| mu2057_17(TernaryPodObj) = Store[#temp2057:9] : &:r2057_16, r2057_15 #-----| Goto -> Block 4 -# 2010| Block 6 -# 2010| r2010_18(glval) = VariableAddress[#temp2010:17] : -# 2010| r2010_19(TernaryPodObj) = Constant[0] : -# 2010| mu2010_20(TernaryPodObj) = Store[#temp2010:17] : &:r2010_18, r2010_19 -# 2010| r2010_21(TernaryPodObj) = Load[#temp2010:17] : &:r2010_18, ~m? -# 2010| r2010_22(glval) = VariableAddress[#temp2010:9] : -# 2010| mu2010_23(TernaryPodObj) = Store[#temp2010:9] : &:r2010_22, r2010_21 +# 2057| Block 6 +# 2057| r2057_18(glval) = VariableAddress[#temp2057:17] : +# 2057| r2057_19(TernaryPodObj) = Constant[0] : +# 2057| mu2057_20(TernaryPodObj) = Store[#temp2057:17] : &:r2057_18, r2057_19 +# 2057| r2057_21(TernaryPodObj) = Load[#temp2057:17] : &:r2057_18, ~m? +# 2057| r2057_22(glval) = VariableAddress[#temp2057:9] : +# 2057| mu2057_23(TernaryPodObj) = Store[#temp2057:9] : &:r2057_22, r2057_21 #-----| Goto -> Block 4 -# 2011| Block 7 -# 2011| r2011_5(glval) = VariableAddress[#temp2011:9] : -# 2011| r2011_6(TernaryPodObj) = Load[#temp2011:9] : &:r2011_5, ~m? -# 2011| mu2011_7(TernaryPodObj) = Store[#temp2011:9] : &:r2011_1, r2011_6 -# 2011| r2011_8(TernaryPodObj) = Load[#temp2011:9] : &:r2011_1, ~m? -# 2011| r2011_9(glval) = VariableAddress[z] : -# 2011| mu2011_10(TernaryPodObj) = Store[z] : &:r2011_9, r2011_8 -# 2012| r2012_1(glval) = VariableAddress[#temp2012:23] : -# 2012| r2012_2(TernaryPodObj) = Constant[0] : -# 2012| mu2012_3(TernaryPodObj) = Store[#temp2012:23] : &:r2012_1, r2012_2 -# 2012| r2012_4(TernaryPodObj) = Load[#temp2012:23] : &:r2012_1, ~m? -# 2012| r2012_5(glval) = VariableAddress[a] : -# 2012| r2012_6(bool) = Load[a] : &:r2012_5, ~m? -# 2012| v2012_7(void) = ConditionalBranch : r2012_6 +# 2058| Block 7 +# 2058| r2058_5(glval) = VariableAddress[#temp2058:9] : +# 2058| r2058_6(TernaryPodObj) = Load[#temp2058:9] : &:r2058_5, ~m? +# 2058| mu2058_7(TernaryPodObj) = Store[#temp2058:9] : &:r2058_1, r2058_6 +# 2058| r2058_8(TernaryPodObj) = Load[#temp2058:9] : &:r2058_1, ~m? +# 2058| r2058_9(glval) = VariableAddress[z] : +# 2058| mu2058_10(TernaryPodObj) = Store[z] : &:r2058_9, r2058_8 +# 2059| r2059_1(glval) = VariableAddress[#temp2059:23] : +# 2059| r2059_2(TernaryPodObj) = Constant[0] : +# 2059| mu2059_3(TernaryPodObj) = Store[#temp2059:23] : &:r2059_1, r2059_2 +# 2059| r2059_4(TernaryPodObj) = Load[#temp2059:23] : &:r2059_1, ~m? +# 2059| r2059_5(glval) = VariableAddress[a] : +# 2059| r2059_6(bool) = Load[a] : &:r2059_5, ~m? +# 2059| v2059_7(void) = ConditionalBranch : r2059_6 #-----| False -> Block 12 #-----| True -> Block 11 -# 2011| Block 8 -# 2011| r2011_11(glval) = VariableAddress[#temp2011:13] : -# 2011| r2011_12(TernaryPodObj) = Constant[0] : -# 2011| mu2011_13(TernaryPodObj) = Store[#temp2011:13] : &:r2011_11, r2011_12 -# 2011| r2011_14(TernaryPodObj) = Load[#temp2011:13] : &:r2011_11, ~m? -# 2011| r2011_15(glval) = VariableAddress[#temp2011:9] : -# 2011| mu2011_16(TernaryPodObj) = Store[#temp2011:9] : &:r2011_15, r2011_14 +# 2058| Block 8 +# 2058| r2058_11(glval) = VariableAddress[#temp2058:13] : +# 2058| r2058_12(TernaryPodObj) = Constant[0] : +# 2058| mu2058_13(TernaryPodObj) = Store[#temp2058:13] : &:r2058_11, r2058_12 +# 2058| r2058_14(TernaryPodObj) = Load[#temp2058:13] : &:r2058_11, ~m? +# 2058| r2058_15(glval) = VariableAddress[#temp2058:9] : +# 2058| mu2058_16(TernaryPodObj) = Store[#temp2058:9] : &:r2058_15, r2058_14 #-----| Goto -> Block 7 -# 2011| Block 9 -# 2011| r2011_17(glval) = VariableAddress[#temp2011:31] : -# 2011| r2011_18(TernaryPodObj) = Constant[0] : -# 2011| mu2011_19(TernaryPodObj) = Store[#temp2011:31] : &:r2011_17, r2011_18 -# 2011| r2011_20(TernaryPodObj) = Load[#temp2011:31] : &:r2011_17, ~m? -# 2011| r2011_21(glval) = VariableAddress[#temp2011:9] : -# 2011| mu2011_22(TernaryPodObj) = Store[#temp2011:9] : &:r2011_21, r2011_20 +# 2058| Block 9 +# 2058| r2058_17(glval) = VariableAddress[#temp2058:31] : +# 2058| r2058_18(TernaryPodObj) = Constant[0] : +# 2058| mu2058_19(TernaryPodObj) = Store[#temp2058:31] : &:r2058_17, r2058_18 +# 2058| r2058_20(TernaryPodObj) = Load[#temp2058:31] : &:r2058_17, ~m? +# 2058| r2058_21(glval) = VariableAddress[#temp2058:9] : +# 2058| mu2058_22(TernaryPodObj) = Store[#temp2058:9] : &:r2058_21, r2058_20 #-----| Goto -> Block 7 -# 2012| Block 10 -# 2012| r2012_8(glval) = VariableAddress[#temp2012:10] : -# 2012| r2012_9(TernaryPodObj) = Load[#temp2012:10] : &:r2012_8, ~m? -# 2012| r2012_10(glval) = VariableAddress[z] : -# 2012| mu2012_11(TernaryPodObj) = Store[z] : &:r2012_10, r2012_9 -# 2012| r2012_12(glval) = CopyValue : r2012_10 -# 2012| mu2012_13(TernaryPodObj) = Store[?] : &:r2012_12, r2012_4 -# 2013| v2013_1(void) = NoOp : -# 2008| v2008_12(void) = ReturnVoid : -# 2008| v2008_13(void) = AliasedUse : ~m? -# 2008| v2008_14(void) = ExitFunction : +# 2059| Block 10 +# 2059| r2059_8(glval) = VariableAddress[#temp2059:10] : +# 2059| r2059_9(TernaryPodObj) = Load[#temp2059:10] : &:r2059_8, ~m? +# 2059| r2059_10(glval) = VariableAddress[z] : +# 2059| mu2059_11(TernaryPodObj) = Store[z] : &:r2059_10, r2059_9 +# 2059| r2059_12(glval) = CopyValue : r2059_10 +# 2059| mu2059_13(TernaryPodObj) = Store[?] : &:r2059_12, r2059_4 +# 2060| v2060_1(void) = NoOp : +# 2055| v2055_12(void) = ReturnVoid : +# 2055| v2055_13(void) = AliasedUse : ~m? +# 2055| v2055_14(void) = ExitFunction : -# 2012| Block 11 -# 2012| r2012_14(glval) = VariableAddress[x] : -# 2012| r2012_15(TernaryPodObj) = Load[x] : &:r2012_14, ~m? -# 2012| r2012_16(glval) = VariableAddress[#temp2012:10] : -# 2012| mu2012_17(TernaryPodObj) = Store[#temp2012:10] : &:r2012_16, r2012_15 +# 2059| Block 11 +# 2059| r2059_14(glval) = VariableAddress[x] : +# 2059| r2059_15(TernaryPodObj) = Load[x] : &:r2059_14, ~m? +# 2059| r2059_16(glval) = VariableAddress[#temp2059:10] : +# 2059| mu2059_17(TernaryPodObj) = Store[#temp2059:10] : &:r2059_16, r2059_15 #-----| Goto -> Block 10 -# 2012| Block 12 -# 2012| r2012_18(glval) = VariableAddress[y] : -# 2012| r2012_19(TernaryPodObj) = Load[y] : &:r2012_18, ~m? -# 2012| r2012_20(glval) = VariableAddress[#temp2012:10] : -# 2012| mu2012_21(TernaryPodObj) = Store[#temp2012:10] : &:r2012_20, r2012_19 +# 2059| Block 12 +# 2059| r2059_18(glval) = VariableAddress[y] : +# 2059| r2059_19(TernaryPodObj) = Load[y] : &:r2059_18, ~m? +# 2059| r2059_20(glval) = VariableAddress[#temp2059:10] : +# 2059| mu2059_21(TernaryPodObj) = Store[#temp2059:10] : &:r2059_20, r2059_19 #-----| Goto -> Block 10 -# 2015| TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) -# 2015| Block 0 -# 2015| v2015_1(void) = EnterFunction : -# 2015| mu2015_2(unknown) = AliasedDefinition : -# 2015| mu2015_3(unknown) = InitializeNonLocal : -# 2015| r2015_4(glval) = VariableAddress[#this] : -# 2015| mu2015_5(glval) = InitializeParameter[#this] : &:r2015_4 -# 2015| r2015_6(glval) = Load[#this] : &:r2015_4, ~m? -# 2015| mu2015_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2015_6 +# 2062| TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) +# 2062| Block 0 +# 2062| v2062_1(void) = EnterFunction : +# 2062| mu2062_2(unknown) = AliasedDefinition : +# 2062| mu2062_3(unknown) = InitializeNonLocal : +# 2062| r2062_4(glval) = VariableAddress[#this] : +# 2062| mu2062_5(glval) = InitializeParameter[#this] : &:r2062_4 +# 2062| r2062_6(glval) = Load[#this] : &:r2062_4, ~m? +# 2062| mu2062_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2062_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? @@ -11041,2487 +11469,2513 @@ ir.cpp: #-----| r0_8(glval) = CopyValue : r0_7 #-----| r0_9(TernaryNonPodObj &) = CopyValue : r0_8 #-----| mu0_10(TernaryNonPodObj &) = Store[#return] : &:r0_5, r0_9 -# 2015| v2015_8(void) = ReturnIndirection[#this] : &:r2015_6, ~m? +# 2062| v2062_8(void) = ReturnIndirection[#this] : &:r2062_6, ~m? #-----| v0_11(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 2015| r2015_9(glval) = VariableAddress[#return] : -# 2015| v2015_10(void) = ReturnValue : &:r2015_9, ~m? -# 2015| v2015_11(void) = AliasedUse : ~m? -# 2015| v2015_12(void) = ExitFunction : +# 2062| r2062_9(glval) = VariableAddress[#return] : +# 2062| v2062_10(void) = ReturnValue : &:r2062_9, ~m? +# 2062| v2062_11(void) = AliasedUse : ~m? +# 2062| v2062_12(void) = ExitFunction : -# 2015| void TernaryNonPodObj::TernaryNonPodObj() -# 2015| Block 0 -# 2015| v2015_1(void) = EnterFunction : -# 2015| mu2015_2(unknown) = AliasedDefinition : -# 2015| mu2015_3(unknown) = InitializeNonLocal : -# 2015| r2015_4(glval) = VariableAddress[#this] : -# 2015| mu2015_5(glval) = InitializeParameter[#this] : &:r2015_4 -# 2015| r2015_6(glval) = Load[#this] : &:r2015_4, ~m? -# 2015| mu2015_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2015_6 -# 2015| v2015_8(void) = NoOp : -# 2015| v2015_9(void) = ReturnIndirection[#this] : &:r2015_6, ~m? -# 2015| v2015_10(void) = ReturnVoid : -# 2015| v2015_11(void) = AliasedUse : ~m? -# 2015| v2015_12(void) = ExitFunction : +# 2062| void TernaryNonPodObj::TernaryNonPodObj() +# 2062| Block 0 +# 2062| v2062_1(void) = EnterFunction : +# 2062| mu2062_2(unknown) = AliasedDefinition : +# 2062| mu2062_3(unknown) = InitializeNonLocal : +# 2062| r2062_4(glval) = VariableAddress[#this] : +# 2062| mu2062_5(glval) = InitializeParameter[#this] : &:r2062_4 +# 2062| r2062_6(glval) = Load[#this] : &:r2062_4, ~m? +# 2062| mu2062_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2062_6 +# 2062| v2062_8(void) = NoOp : +# 2062| v2062_9(void) = ReturnIndirection[#this] : &:r2062_6, ~m? +# 2062| v2062_10(void) = ReturnVoid : +# 2062| v2062_11(void) = AliasedUse : ~m? +# 2062| v2062_12(void) = ExitFunction : -# 2015| void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) -# 2015| Block 0 -# 2015| v2015_1(void) = EnterFunction : -# 2015| mu2015_2(unknown) = AliasedDefinition : -# 2015| mu2015_3(unknown) = InitializeNonLocal : -# 2015| r2015_4(glval) = VariableAddress[#this] : -# 2015| mu2015_5(glval) = InitializeParameter[#this] : &:r2015_4 -# 2015| r2015_6(glval) = Load[#this] : &:r2015_4, ~m? -# 2015| mu2015_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2015_6 +# 2062| void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) +# 2062| Block 0 +# 2062| v2062_1(void) = EnterFunction : +# 2062| mu2062_2(unknown) = AliasedDefinition : +# 2062| mu2062_3(unknown) = InitializeNonLocal : +# 2062| r2062_4(glval) = VariableAddress[#this] : +# 2062| mu2062_5(glval) = InitializeParameter[#this] : &:r2062_4 +# 2062| r2062_6(glval) = Load[#this] : &:r2062_4, ~m? +# 2062| mu2062_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2062_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 2015| v2015_8(void) = NoOp : -# 2015| v2015_9(void) = ReturnIndirection[#this] : &:r2015_6, ~m? +# 2062| v2062_8(void) = NoOp : +# 2062| v2062_9(void) = ReturnIndirection[#this] : &:r2062_6, ~m? #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 2015| v2015_10(void) = ReturnVoid : -# 2015| v2015_11(void) = AliasedUse : ~m? -# 2015| v2015_12(void) = ExitFunction : +# 2062| v2062_10(void) = ReturnVoid : +# 2062| v2062_11(void) = AliasedUse : ~m? +# 2062| v2062_12(void) = ExitFunction : -# 2016| void TernaryNonPodObj::~TernaryNonPodObj() -# 2016| Block 0 -# 2016| v2016_1(void) = EnterFunction : -# 2016| mu2016_2(unknown) = AliasedDefinition : -# 2016| mu2016_3(unknown) = InitializeNonLocal : -# 2016| r2016_4(glval) = VariableAddress[#this] : -# 2016| mu2016_5(glval) = InitializeParameter[#this] : &:r2016_4 -# 2016| r2016_6(glval) = Load[#this] : &:r2016_4, ~m? -# 2016| mu2016_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2016_6 -# 2016| v2016_8(void) = NoOp : -# 2016| v2016_9(void) = ReturnIndirection[#this] : &:r2016_6, ~m? -# 2016| v2016_10(void) = ReturnVoid : -# 2016| v2016_11(void) = AliasedUse : ~m? -# 2016| v2016_12(void) = ExitFunction : +# 2063| void TernaryNonPodObj::~TernaryNonPodObj() +# 2063| Block 0 +# 2063| v2063_1(void) = EnterFunction : +# 2063| mu2063_2(unknown) = AliasedDefinition : +# 2063| mu2063_3(unknown) = InitializeNonLocal : +# 2063| r2063_4(glval) = VariableAddress[#this] : +# 2063| mu2063_5(glval) = InitializeParameter[#this] : &:r2063_4 +# 2063| r2063_6(glval) = Load[#this] : &:r2063_4, ~m? +# 2063| mu2063_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2063_6 +# 2063| v2063_8(void) = NoOp : +# 2063| v2063_9(void) = ReturnIndirection[#this] : &:r2063_6, ~m? +# 2063| v2063_10(void) = ReturnVoid : +# 2063| v2063_11(void) = AliasedUse : ~m? +# 2063| v2063_12(void) = ExitFunction : -# 2019| void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) -# 2019| Block 0 -# 2019| v2019_1(void) = EnterFunction : -# 2019| mu2019_2(unknown) = AliasedDefinition : -# 2019| mu2019_3(unknown) = InitializeNonLocal : -# 2019| r2019_4(glval) = VariableAddress[a] : -# 2019| mu2019_5(bool) = InitializeParameter[a] : &:r2019_4 -# 2019| r2019_6(glval) = VariableAddress[x] : -# 2019| mu2019_7(TernaryNonPodObj) = InitializeParameter[x] : &:r2019_6 -# 2019| r2019_8(glval) = VariableAddress[y] : -# 2019| mu2019_9(TernaryNonPodObj) = InitializeParameter[y] : &:r2019_8 -# 2019| r2019_10(glval) = VariableAddress[z] : -# 2019| mu2019_11(TernaryNonPodObj) = InitializeParameter[z] : &:r2019_10 -# 2020| r2020_1(glval) = VariableAddress[z] : -# 2020| r2020_2(glval) = FunctionAddress[operator=] : -# 2020| r2020_3(glval) = VariableAddress[a] : -# 2020| r2020_4(bool) = Load[a] : &:r2020_3, ~m? -# 2020| v2020_5(void) = ConditionalBranch : r2020_4 +# 2066| void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) +# 2066| Block 0 +# 2066| v2066_1(void) = EnterFunction : +# 2066| mu2066_2(unknown) = AliasedDefinition : +# 2066| mu2066_3(unknown) = InitializeNonLocal : +# 2066| r2066_4(glval) = VariableAddress[a] : +# 2066| mu2066_5(bool) = InitializeParameter[a] : &:r2066_4 +# 2066| r2066_6(glval) = VariableAddress[x] : +# 2066| mu2066_7(TernaryNonPodObj) = InitializeParameter[x] : &:r2066_6 +# 2066| r2066_8(glval) = VariableAddress[y] : +# 2066| mu2066_9(TernaryNonPodObj) = InitializeParameter[y] : &:r2066_8 +# 2066| r2066_10(glval) = VariableAddress[z] : +# 2066| mu2066_11(TernaryNonPodObj) = InitializeParameter[z] : &:r2066_10 +# 2067| r2067_1(glval) = VariableAddress[z] : +# 2067| r2067_2(glval) = FunctionAddress[operator=] : +# 2067| r2067_3(glval) = VariableAddress[a] : +# 2067| r2067_4(bool) = Load[a] : &:r2067_3, ~m? +# 2067| v2067_5(void) = ConditionalBranch : r2067_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 2020| Block 1 -# 2020| r2020_6(glval) = VariableAddress[#temp2020:9] : -# 2020| r2020_7(glval) = Load[#temp2020:9] : &:r2020_6, ~m? -# 2020| r2020_8(glval) = Convert : r2020_7 -# 2020| r2020_9(TernaryNonPodObj &) = CopyValue : r2020_8 -# 2020| r2020_10(TernaryNonPodObj &) = Call[operator=] : func:r2020_2, this:r2020_1, 0:r2020_9 -# 2020| mu2020_11(unknown) = ^CallSideEffect : ~m? -# 2020| v2020_12(void) = ^IndirectReadSideEffect[-1] : &:r2020_1, ~m? -# 2020| v2020_13(void) = ^BufferReadSideEffect[0] : &:r2020_9, ~m? -# 2020| mu2020_14(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2020_1 -# 2020| r2020_15(glval) = CopyValue : r2020_10 -# 2021| r2021_1(glval) = VariableAddress[z] : -# 2021| r2021_2(glval) = FunctionAddress[operator=] : -# 2021| r2021_3(glval) = VariableAddress[#temp2021:9] : -# 2021| r2021_4(glval) = VariableAddress[a] : -# 2021| r2021_5(bool) = Load[a] : &:r2021_4, ~m? -# 2021| v2021_6(void) = ConditionalBranch : r2021_5 +# 2067| Block 1 +# 2067| r2067_6(glval) = VariableAddress[#temp2067:9] : +# 2067| r2067_7(glval) = Load[#temp2067:9] : &:r2067_6, ~m? +# 2067| r2067_8(glval) = Convert : r2067_7 +# 2067| r2067_9(TernaryNonPodObj &) = CopyValue : r2067_8 +# 2067| r2067_10(TernaryNonPodObj &) = Call[operator=] : func:r2067_2, this:r2067_1, 0:r2067_9 +# 2067| mu2067_11(unknown) = ^CallSideEffect : ~m? +# 2067| v2067_12(void) = ^IndirectReadSideEffect[-1] : &:r2067_1, ~m? +# 2067| v2067_13(void) = ^BufferReadSideEffect[0] : &:r2067_9, ~m? +# 2067| mu2067_14(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2067_1 +# 2067| r2067_15(glval) = CopyValue : r2067_10 +# 2068| r2068_1(glval) = VariableAddress[z] : +# 2068| r2068_2(glval) = FunctionAddress[operator=] : +# 2068| r2068_3(glval) = VariableAddress[#temp2068:9] : +# 2068| r2068_4(glval) = VariableAddress[a] : +# 2068| r2068_5(bool) = Load[a] : &:r2068_4, ~m? +# 2068| v2068_6(void) = ConditionalBranch : r2068_5 #-----| False -> Block 6 #-----| True -> Block 5 -# 2020| Block 2 -# 2020| r2020_16(glval) = VariableAddress[x] : -# 2020| r2020_17(glval) = VariableAddress[#temp2020:9] : -# 2020| mu2020_18(glval) = Store[#temp2020:9] : &:r2020_17, r2020_16 +# 2067| Block 2 +# 2067| r2067_16(glval) = VariableAddress[x] : +# 2067| r2067_17(glval) = VariableAddress[#temp2067:9] : +# 2067| mu2067_18(glval) = Store[#temp2067:9] : &:r2067_17, r2067_16 #-----| Goto -> Block 1 -# 2020| Block 3 -# 2020| r2020_19(glval) = VariableAddress[y] : -# 2020| r2020_20(glval) = VariableAddress[#temp2020:9] : -# 2020| mu2020_21(glval) = Store[#temp2020:9] : &:r2020_20, r2020_19 +# 2067| Block 3 +# 2067| r2067_19(glval) = VariableAddress[y] : +# 2067| r2067_20(glval) = VariableAddress[#temp2067:9] : +# 2067| mu2067_21(glval) = Store[#temp2067:9] : &:r2067_20, r2067_19 #-----| Goto -> Block 1 -# 2021| Block 4 -# 2021| r2021_7(glval) = VariableAddress[#temp2021:9] : -# 2021| r2021_8(TernaryNonPodObj) = Load[#temp2021:9] : &:r2021_7, ~m? -# 2021| mu2021_9(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_3, r2021_8 -# 2021| r2021_10(glval) = Convert : r2021_3 -# 2021| r2021_11(TernaryNonPodObj &) = CopyValue : r2021_10 -# 2021| r2021_12(TernaryNonPodObj &) = Call[operator=] : func:r2021_2, this:r2021_1, 0:r2021_11 -# 2021| mu2021_13(unknown) = ^CallSideEffect : ~m? -# 2021| v2021_14(void) = ^IndirectReadSideEffect[-1] : &:r2021_1, ~m? -# 2021| v2021_15(void) = ^BufferReadSideEffect[0] : &:r2021_11, ~m? -# 2021| mu2021_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_1 -# 2021| r2021_17(glval) = CopyValue : r2021_12 -# 2022| r2022_1(glval) = VariableAddress[z] : -# 2022| r2022_2(glval) = FunctionAddress[operator=] : -# 2022| r2022_3(glval) = VariableAddress[#temp2022:9] : -# 2022| r2022_4(glval) = VariableAddress[a] : -# 2022| r2022_5(bool) = Load[a] : &:r2022_4, ~m? -# 2022| v2022_6(void) = ConditionalBranch : r2022_5 +# 2068| Block 4 +# 2068| r2068_7(glval) = VariableAddress[#temp2068:9] : +# 2068| r2068_8(TernaryNonPodObj) = Load[#temp2068:9] : &:r2068_7, ~m? +# 2068| mu2068_9(TernaryNonPodObj) = Store[#temp2068:9] : &:r2068_3, r2068_8 +# 2068| r2068_10(glval) = Convert : r2068_3 +# 2068| r2068_11(TernaryNonPodObj &) = CopyValue : r2068_10 +# 2068| r2068_12(TernaryNonPodObj &) = Call[operator=] : func:r2068_2, this:r2068_1, 0:r2068_11 +# 2068| mu2068_13(unknown) = ^CallSideEffect : ~m? +# 2068| v2068_14(void) = ^IndirectReadSideEffect[-1] : &:r2068_1, ~m? +# 2068| v2068_15(void) = ^BufferReadSideEffect[0] : &:r2068_11, ~m? +# 2068| mu2068_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2068_1 +# 2068| r2068_17(glval) = CopyValue : r2068_12 +# 2069| r2069_1(glval) = VariableAddress[z] : +# 2069| r2069_2(glval) = FunctionAddress[operator=] : +# 2069| r2069_3(glval) = VariableAddress[#temp2069:9] : +# 2069| r2069_4(glval) = VariableAddress[a] : +# 2069| r2069_5(bool) = Load[a] : &:r2069_4, ~m? +# 2069| v2069_6(void) = ConditionalBranch : r2069_5 #-----| False -> Block 9 #-----| True -> Block 8 -# 2021| Block 5 -# 2021| r2021_18(glval) = VariableAddress[#temp2021:13] : -# 2021| mu2021_19(TernaryNonPodObj) = Uninitialized[#temp2021:13] : &:r2021_18 -# 2021| r2021_20(glval) = FunctionAddress[TernaryNonPodObj] : -# 2021| r2021_21(glval) = VariableAddress[x] : -# 2021| r2021_22(glval) = Convert : r2021_21 -# 2021| r2021_23(TernaryNonPodObj &) = CopyValue : r2021_22 -# 2021| v2021_24(void) = Call[TernaryNonPodObj] : func:r2021_20, this:r2021_18, 0:r2021_23 -# 2021| mu2021_25(unknown) = ^CallSideEffect : ~m? -# 2021| v2021_26(void) = ^BufferReadSideEffect[0] : &:r2021_23, ~m? -# 2021| mu2021_27(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_18 -# 2021| r2021_28(TernaryNonPodObj) = Load[#temp2021:13] : &:r2021_18, ~m? -# 2021| r2021_29(glval) = VariableAddress[#temp2021:9] : -# 2021| mu2021_30(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_29, r2021_28 +# 2068| Block 5 +# 2068| r2068_18(glval) = VariableAddress[#temp2068:13] : +# 2068| mu2068_19(TernaryNonPodObj) = Uninitialized[#temp2068:13] : &:r2068_18 +# 2068| r2068_20(glval) = FunctionAddress[TernaryNonPodObj] : +# 2068| r2068_21(glval) = VariableAddress[x] : +# 2068| r2068_22(glval) = Convert : r2068_21 +# 2068| r2068_23(TernaryNonPodObj &) = CopyValue : r2068_22 +# 2068| v2068_24(void) = Call[TernaryNonPodObj] : func:r2068_20, this:r2068_18, 0:r2068_23 +# 2068| mu2068_25(unknown) = ^CallSideEffect : ~m? +# 2068| v2068_26(void) = ^BufferReadSideEffect[0] : &:r2068_23, ~m? +# 2068| mu2068_27(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2068_18 +# 2068| r2068_28(TernaryNonPodObj) = Load[#temp2068:13] : &:r2068_18, ~m? +# 2068| r2068_29(glval) = VariableAddress[#temp2068:9] : +# 2068| mu2068_30(TernaryNonPodObj) = Store[#temp2068:9] : &:r2068_29, r2068_28 #-----| Goto -> Block 4 -# 2021| Block 6 -# 2021| r2021_31(glval) = VariableAddress[#temp2021:17] : -# 2021| mu2021_32(TernaryNonPodObj) = Uninitialized[#temp2021:17] : &:r2021_31 -# 2021| r2021_33(glval) = FunctionAddress[TernaryNonPodObj] : -# 2021| v2021_34(void) = Call[TernaryNonPodObj] : func:r2021_33, this:r2021_31 -# 2021| mu2021_35(unknown) = ^CallSideEffect : ~m? -# 2021| mu2021_36(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_31 -# 2021| r2021_37(TernaryNonPodObj) = Load[#temp2021:17] : &:r2021_31, ~m? -# 2021| r2021_38(glval) = VariableAddress[#temp2021:9] : -# 2021| mu2021_39(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_38, r2021_37 +# 2068| Block 6 +# 2068| r2068_31(glval) = VariableAddress[#temp2068:17] : +# 2068| mu2068_32(TernaryNonPodObj) = Uninitialized[#temp2068:17] : &:r2068_31 +# 2068| r2068_33(glval) = FunctionAddress[TernaryNonPodObj] : +# 2068| v2068_34(void) = Call[TernaryNonPodObj] : func:r2068_33, this:r2068_31 +# 2068| mu2068_35(unknown) = ^CallSideEffect : ~m? +# 2068| mu2068_36(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2068_31 +# 2068| r2068_37(TernaryNonPodObj) = Load[#temp2068:17] : &:r2068_31, ~m? +# 2068| r2068_38(glval) = VariableAddress[#temp2068:9] : +# 2068| mu2068_39(TernaryNonPodObj) = Store[#temp2068:9] : &:r2068_38, r2068_37 #-----| Goto -> Block 4 -# 2022| Block 7 -# 2022| r2022_7(glval) = VariableAddress[#temp2022:9] : -# 2022| r2022_8(TernaryNonPodObj) = Load[#temp2022:9] : &:r2022_7, ~m? -# 2022| mu2022_9(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_3, r2022_8 -# 2022| r2022_10(glval) = Convert : r2022_3 -# 2022| r2022_11(TernaryNonPodObj &) = CopyValue : r2022_10 -# 2022| r2022_12(TernaryNonPodObj &) = Call[operator=] : func:r2022_2, this:r2022_1, 0:r2022_11 -# 2022| mu2022_13(unknown) = ^CallSideEffect : ~m? -# 2022| v2022_14(void) = ^IndirectReadSideEffect[-1] : &:r2022_1, ~m? -# 2022| v2022_15(void) = ^BufferReadSideEffect[0] : &:r2022_11, ~m? -# 2022| mu2022_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_1 -# 2022| r2022_17(glval) = CopyValue : r2022_12 -# 2023| r2023_1(glval) = VariableAddress[z] : -# 2023| r2023_2(glval) = FunctionAddress[operator=] : -# 2023| r2023_3(glval) = VariableAddress[a] : -# 2023| r2023_4(bool) = Load[a] : &:r2023_3, ~m? -# 2023| v2023_5(void) = ConditionalBranch : r2023_4 +# 2069| Block 7 +# 2069| r2069_7(glval) = VariableAddress[#temp2069:9] : +# 2069| r2069_8(TernaryNonPodObj) = Load[#temp2069:9] : &:r2069_7, ~m? +# 2069| mu2069_9(TernaryNonPodObj) = Store[#temp2069:9] : &:r2069_3, r2069_8 +# 2069| r2069_10(glval) = Convert : r2069_3 +# 2069| r2069_11(TernaryNonPodObj &) = CopyValue : r2069_10 +# 2069| r2069_12(TernaryNonPodObj &) = Call[operator=] : func:r2069_2, this:r2069_1, 0:r2069_11 +# 2069| mu2069_13(unknown) = ^CallSideEffect : ~m? +# 2069| v2069_14(void) = ^IndirectReadSideEffect[-1] : &:r2069_1, ~m? +# 2069| v2069_15(void) = ^BufferReadSideEffect[0] : &:r2069_11, ~m? +# 2069| mu2069_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2069_1 +# 2069| r2069_17(glval) = CopyValue : r2069_12 +# 2070| r2070_1(glval) = VariableAddress[z] : +# 2070| r2070_2(glval) = FunctionAddress[operator=] : +# 2070| r2070_3(glval) = VariableAddress[a] : +# 2070| r2070_4(bool) = Load[a] : &:r2070_3, ~m? +# 2070| v2070_5(void) = ConditionalBranch : r2070_4 #-----| False -> Block 12 #-----| True -> Block 11 -# 2022| Block 8 -# 2022| r2022_18(glval) = VariableAddress[#temp2022:13] : -# 2022| mu2022_19(TernaryNonPodObj) = Uninitialized[#temp2022:13] : &:r2022_18 -# 2022| r2022_20(glval) = FunctionAddress[TernaryNonPodObj] : -# 2022| v2022_21(void) = Call[TernaryNonPodObj] : func:r2022_20, this:r2022_18 -# 2022| mu2022_22(unknown) = ^CallSideEffect : ~m? -# 2022| mu2022_23(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_18 -# 2022| r2022_24(TernaryNonPodObj) = Load[#temp2022:13] : &:r2022_18, ~m? -# 2022| r2022_25(glval) = VariableAddress[#temp2022:9] : -# 2022| mu2022_26(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_25, r2022_24 +# 2069| Block 8 +# 2069| r2069_18(glval) = VariableAddress[#temp2069:13] : +# 2069| mu2069_19(TernaryNonPodObj) = Uninitialized[#temp2069:13] : &:r2069_18 +# 2069| r2069_20(glval) = FunctionAddress[TernaryNonPodObj] : +# 2069| v2069_21(void) = Call[TernaryNonPodObj] : func:r2069_20, this:r2069_18 +# 2069| mu2069_22(unknown) = ^CallSideEffect : ~m? +# 2069| mu2069_23(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2069_18 +# 2069| r2069_24(TernaryNonPodObj) = Load[#temp2069:13] : &:r2069_18, ~m? +# 2069| r2069_25(glval) = VariableAddress[#temp2069:9] : +# 2069| mu2069_26(TernaryNonPodObj) = Store[#temp2069:9] : &:r2069_25, r2069_24 #-----| Goto -> Block 7 -# 2022| Block 9 -# 2022| r2022_27(glval) = VariableAddress[#temp2022:34] : -# 2022| mu2022_28(TernaryNonPodObj) = Uninitialized[#temp2022:34] : &:r2022_27 -# 2022| r2022_29(glval) = FunctionAddress[TernaryNonPodObj] : -# 2022| v2022_30(void) = Call[TernaryNonPodObj] : func:r2022_29, this:r2022_27 -# 2022| mu2022_31(unknown) = ^CallSideEffect : ~m? -# 2022| mu2022_32(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_27 -# 2022| r2022_33(TernaryNonPodObj) = Load[#temp2022:34] : &:r2022_27, ~m? -# 2022| r2022_34(glval) = VariableAddress[#temp2022:9] : -# 2022| mu2022_35(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_34, r2022_33 +# 2069| Block 9 +# 2069| r2069_27(glval) = VariableAddress[#temp2069:34] : +# 2069| mu2069_28(TernaryNonPodObj) = Uninitialized[#temp2069:34] : &:r2069_27 +# 2069| r2069_29(glval) = FunctionAddress[TernaryNonPodObj] : +# 2069| v2069_30(void) = Call[TernaryNonPodObj] : func:r2069_29, this:r2069_27 +# 2069| mu2069_31(unknown) = ^CallSideEffect : ~m? +# 2069| mu2069_32(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2069_27 +# 2069| r2069_33(TernaryNonPodObj) = Load[#temp2069:34] : &:r2069_27, ~m? +# 2069| r2069_34(glval) = VariableAddress[#temp2069:9] : +# 2069| mu2069_35(TernaryNonPodObj) = Store[#temp2069:9] : &:r2069_34, r2069_33 #-----| Goto -> Block 7 -# 2023| Block 10 -# 2023| r2023_6(glval) = VariableAddress[#temp2023:10] : -# 2023| r2023_7(glval) = Load[#temp2023:10] : &:r2023_6, ~m? -# 2023| r2023_8(glval) = Convert : r2023_7 -# 2023| r2023_9(TernaryNonPodObj &) = CopyValue : r2023_8 -# 2023| r2023_10(TernaryNonPodObj &) = Call[operator=] : func:r2023_2, this:r2023_1, 0:r2023_9 -# 2023| mu2023_11(unknown) = ^CallSideEffect : ~m? -# 2023| v2023_12(void) = ^IndirectReadSideEffect[-1] : &:r2023_1, ~m? -# 2023| v2023_13(void) = ^BufferReadSideEffect[0] : &:r2023_9, ~m? -# 2023| mu2023_14(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_1 -# 2023| r2023_15(glval) = CopyValue : r2023_10 -# 2023| r2023_16(glval) = FunctionAddress[operator=] : -# 2023| r2023_17(glval) = VariableAddress[#temp2023:23] : -# 2023| mu2023_18(TernaryNonPodObj) = Uninitialized[#temp2023:23] : &:r2023_17 -# 2023| r2023_19(glval) = FunctionAddress[TernaryNonPodObj] : -# 2023| v2023_20(void) = Call[TernaryNonPodObj] : func:r2023_19, this:r2023_17 -# 2023| mu2023_21(unknown) = ^CallSideEffect : ~m? -# 2023| mu2023_22(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_17 -# 2023| r2023_23(glval) = Convert : r2023_17 -# 2023| r2023_24(TernaryNonPodObj &) = CopyValue : r2023_23 -# 2023| r2023_25(TernaryNonPodObj &) = Call[operator=] : func:r2023_16, this:r2023_15, 0:r2023_24 -# 2023| mu2023_26(unknown) = ^CallSideEffect : ~m? -# 2023| v2023_27(void) = ^IndirectReadSideEffect[-1] : &:r2023_15, ~m? -# 2023| v2023_28(void) = ^BufferReadSideEffect[0] : &:r2023_24, ~m? -# 2023| mu2023_29(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_15 -# 2023| r2023_30(glval) = CopyValue : r2023_25 -# 2024| v2024_1(void) = NoOp : -# 2019| v2019_12(void) = ReturnVoid : -# 2019| v2019_13(void) = AliasedUse : ~m? -# 2019| v2019_14(void) = ExitFunction : +# 2070| Block 10 +# 2070| r2070_6(glval) = VariableAddress[#temp2070:10] : +# 2070| r2070_7(glval) = Load[#temp2070:10] : &:r2070_6, ~m? +# 2070| r2070_8(glval) = Convert : r2070_7 +# 2070| r2070_9(TernaryNonPodObj &) = CopyValue : r2070_8 +# 2070| r2070_10(TernaryNonPodObj &) = Call[operator=] : func:r2070_2, this:r2070_1, 0:r2070_9 +# 2070| mu2070_11(unknown) = ^CallSideEffect : ~m? +# 2070| v2070_12(void) = ^IndirectReadSideEffect[-1] : &:r2070_1, ~m? +# 2070| v2070_13(void) = ^BufferReadSideEffect[0] : &:r2070_9, ~m? +# 2070| mu2070_14(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2070_1 +# 2070| r2070_15(glval) = CopyValue : r2070_10 +# 2070| r2070_16(glval) = FunctionAddress[operator=] : +# 2070| r2070_17(glval) = VariableAddress[#temp2070:23] : +# 2070| mu2070_18(TernaryNonPodObj) = Uninitialized[#temp2070:23] : &:r2070_17 +# 2070| r2070_19(glval) = FunctionAddress[TernaryNonPodObj] : +# 2070| v2070_20(void) = Call[TernaryNonPodObj] : func:r2070_19, this:r2070_17 +# 2070| mu2070_21(unknown) = ^CallSideEffect : ~m? +# 2070| mu2070_22(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2070_17 +# 2070| r2070_23(glval) = Convert : r2070_17 +# 2070| r2070_24(TernaryNonPodObj &) = CopyValue : r2070_23 +# 2070| r2070_25(TernaryNonPodObj &) = Call[operator=] : func:r2070_16, this:r2070_15, 0:r2070_24 +# 2070| mu2070_26(unknown) = ^CallSideEffect : ~m? +# 2070| v2070_27(void) = ^IndirectReadSideEffect[-1] : &:r2070_15, ~m? +# 2070| v2070_28(void) = ^BufferReadSideEffect[0] : &:r2070_24, ~m? +# 2070| mu2070_29(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2070_15 +# 2070| r2070_30(glval) = CopyValue : r2070_25 +# 2071| v2071_1(void) = NoOp : +# 2066| v2066_12(void) = ReturnVoid : +# 2066| v2066_13(void) = AliasedUse : ~m? +# 2066| v2066_14(void) = ExitFunction : -# 2023| Block 11 -# 2023| r2023_31(glval) = VariableAddress[x] : -# 2023| r2023_32(glval) = VariableAddress[#temp2023:10] : -# 2023| mu2023_33(glval) = Store[#temp2023:10] : &:r2023_32, r2023_31 +# 2070| Block 11 +# 2070| r2070_31(glval) = VariableAddress[x] : +# 2070| r2070_32(glval) = VariableAddress[#temp2070:10] : +# 2070| mu2070_33(glval) = Store[#temp2070:10] : &:r2070_32, r2070_31 #-----| Goto -> Block 10 -# 2023| Block 12 -# 2023| r2023_34(glval) = VariableAddress[y] : -# 2023| r2023_35(glval) = VariableAddress[#temp2023:10] : -# 2023| mu2023_36(glval) = Store[#temp2023:10] : &:r2023_35, r2023_34 +# 2070| Block 12 +# 2070| r2070_34(glval) = VariableAddress[y] : +# 2070| r2070_35(glval) = VariableAddress[#temp2070:10] : +# 2070| mu2070_36(glval) = Store[#temp2070:10] : &:r2070_35, r2070_34 #-----| Goto -> Block 10 -# 2028| unsigned int CommaTest(unsigned int) -# 2028| Block 0 -# 2028| v2028_1(void) = EnterFunction : -# 2028| mu2028_2(unknown) = AliasedDefinition : -# 2028| mu2028_3(unknown) = InitializeNonLocal : -# 2028| r2028_4(glval) = VariableAddress[x] : -# 2028| mu2028_5(unsigned int) = InitializeParameter[x] : &:r2028_4 -# 2029| r2029_1(glval) = VariableAddress[y] : -# 2029| mu2029_2(unsigned int) = Uninitialized[y] : &:r2029_1 -# 2030| r2030_1(glval) = VariableAddress[x] : -# 2030| r2030_2(unsigned int) = Load[x] : &:r2030_1, ~m? -# 2030| r2030_3(unsigned int) = Constant[100] : -# 2030| r2030_4(bool) = CompareLT : r2030_2, r2030_3 -# 2030| v2030_5(void) = ConditionalBranch : r2030_4 +# 2075| unsigned int CommaTest(unsigned int) +# 2075| Block 0 +# 2075| v2075_1(void) = EnterFunction : +# 2075| mu2075_2(unknown) = AliasedDefinition : +# 2075| mu2075_3(unknown) = InitializeNonLocal : +# 2075| r2075_4(glval) = VariableAddress[x] : +# 2075| mu2075_5(unsigned int) = InitializeParameter[x] : &:r2075_4 +# 2076| r2076_1(glval) = VariableAddress[y] : +# 2076| mu2076_2(unsigned int) = Uninitialized[y] : &:r2076_1 +# 2077| r2077_1(glval) = VariableAddress[x] : +# 2077| r2077_2(unsigned int) = Load[x] : &:r2077_1, ~m? +# 2077| r2077_3(unsigned int) = Constant[100] : +# 2077| r2077_4(bool) = CompareLT : r2077_2, r2077_3 +# 2077| v2077_5(void) = ConditionalBranch : r2077_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 2030| Block 1 -# 2030| r2030_6(glval) = VariableAddress[#temp2030:7] : -# 2030| r2030_7(unsigned int) = Load[#temp2030:7] : &:r2030_6, ~m? -# 2030| r2030_8(glval) = VariableAddress[y] : -# 2030| mu2030_9(unsigned int) = Store[y] : &:r2030_8, r2030_7 -# 2033| r2033_1(glval) = VariableAddress[#return] : -# 2033| mu2033_2(unsigned int) = Uninitialized[#return] : &:r2033_1 -# 2028| r2028_6(glval) = VariableAddress[#return] : -# 2028| v2028_7(void) = ReturnValue : &:r2028_6, ~m? -# 2028| v2028_8(void) = AliasedUse : ~m? -# 2028| v2028_9(void) = ExitFunction : +# 2077| Block 1 +# 2077| r2077_6(glval) = VariableAddress[#temp2077:7] : +# 2077| r2077_7(unsigned int) = Load[#temp2077:7] : &:r2077_6, ~m? +# 2077| r2077_8(glval) = VariableAddress[y] : +# 2077| mu2077_9(unsigned int) = Store[y] : &:r2077_8, r2077_7 +# 2080| r2080_1(glval) = VariableAddress[#return] : +# 2080| mu2080_2(unsigned int) = Uninitialized[#return] : &:r2080_1 +# 2075| r2075_6(glval) = VariableAddress[#return] : +# 2075| v2075_7(void) = ReturnValue : &:r2075_6, ~m? +# 2075| v2075_8(void) = AliasedUse : ~m? +# 2075| v2075_9(void) = ExitFunction : -# 2031| Block 2 -# 2031| r2031_1(glval) = FunctionAddress[CommaTestHelper] : -# 2031| r2031_2(glval) = VariableAddress[x] : -# 2031| r2031_3(unsigned int) = Load[x] : &:r2031_2, ~m? -# 2031| v2031_4(void) = Call[CommaTestHelper] : func:r2031_1, 0:r2031_3 -# 2031| mu2031_5(unknown) = ^CallSideEffect : ~m? -# 2031| r2031_6(glval) = VariableAddress[x] : -# 2031| r2031_7(unsigned int) = Load[x] : &:r2031_6, ~m? -# 2031| r2031_8(unsigned int) = CopyValue : r2031_7 -# 2030| r2030_10(glval) = VariableAddress[#temp2030:7] : -# 2030| mu2030_11(unsigned int) = Store[#temp2030:7] : &:r2030_10, r2031_8 +# 2078| Block 2 +# 2078| r2078_1(glval) = FunctionAddress[CommaTestHelper] : +# 2078| r2078_2(glval) = VariableAddress[x] : +# 2078| r2078_3(unsigned int) = Load[x] : &:r2078_2, ~m? +# 2078| v2078_4(void) = Call[CommaTestHelper] : func:r2078_1, 0:r2078_3 +# 2078| mu2078_5(unknown) = ^CallSideEffect : ~m? +# 2078| r2078_6(glval) = VariableAddress[x] : +# 2078| r2078_7(unsigned int) = Load[x] : &:r2078_6, ~m? +# 2078| r2078_8(unsigned int) = CopyValue : r2078_7 +# 2077| r2077_10(glval) = VariableAddress[#temp2077:7] : +# 2077| mu2077_11(unsigned int) = Store[#temp2077:7] : &:r2077_10, r2078_8 #-----| Goto -> Block 1 -# 2032| Block 3 -# 2032| r2032_1(glval) = FunctionAddress[CommaTestHelper] : -# 2032| r2032_2(glval) = VariableAddress[x] : -# 2032| r2032_3(unsigned int) = Load[x] : &:r2032_2, ~m? -# 2032| v2032_4(void) = Call[CommaTestHelper] : func:r2032_1, 0:r2032_3 -# 2032| mu2032_5(unknown) = ^CallSideEffect : ~m? -# 2032| r2032_6(int) = Constant[10] : -# 2032| r2032_7(int) = CopyValue : r2032_6 -# 2032| r2032_8(unsigned int) = Convert : r2032_7 -# 2030| r2030_12(glval) = VariableAddress[#temp2030:7] : -# 2030| mu2030_13(unsigned int) = Store[#temp2030:7] : &:r2030_12, r2032_8 +# 2079| Block 3 +# 2079| r2079_1(glval) = FunctionAddress[CommaTestHelper] : +# 2079| r2079_2(glval) = VariableAddress[x] : +# 2079| r2079_3(unsigned int) = Load[x] : &:r2079_2, ~m? +# 2079| v2079_4(void) = Call[CommaTestHelper] : func:r2079_1, 0:r2079_3 +# 2079| mu2079_5(unknown) = ^CallSideEffect : ~m? +# 2079| r2079_6(int) = Constant[10] : +# 2079| r2079_7(int) = CopyValue : r2079_6 +# 2079| r2079_8(unsigned int) = Convert : r2079_7 +# 2077| r2077_12(glval) = VariableAddress[#temp2077:7] : +# 2077| mu2077_13(unsigned int) = Store[#temp2077:7] : &:r2077_12, r2079_8 #-----| Goto -> Block 1 -# 2035| void NewDeleteMem() -# 2035| Block 0 -# 2035| v2035_1(void) = EnterFunction : -# 2035| mu2035_2(unknown) = AliasedDefinition : -# 2035| mu2035_3(unknown) = InitializeNonLocal : -# 2036| r2036_1(glval) = VariableAddress[x] : -# 2036| r2036_2(glval) = FunctionAddress[operator new] : -# 2036| r2036_3(unsigned long) = Constant[4] : -# 2036| r2036_4(void *) = Call[operator new] : func:r2036_2, 0:r2036_3 -# 2036| mu2036_5(unknown) = ^CallSideEffect : ~m? -# 2036| mu2036_6(unknown) = ^InitializeDynamicAllocation : &:r2036_4 -# 2036| r2036_7(int *) = Convert : r2036_4 -# 2036| mu2036_8(int *) = Store[x] : &:r2036_1, r2036_7 -# 2037| r2037_1(int) = Constant[6] : -# 2037| r2037_2(glval) = VariableAddress[x] : -# 2037| r2037_3(int *) = Load[x] : &:r2037_2, ~m? -# 2037| r2037_4(glval) = CopyValue : r2037_3 -# 2037| mu2037_5(int) = Store[?] : &:r2037_4, r2037_1 -# 2038| r2038_1(glval) = FunctionAddress[operator delete] : -# 2038| r2038_2(glval) = VariableAddress[x] : -# 2038| r2038_3(int *) = Load[x] : &:r2038_2, ~m? -# 2038| v2038_4(void) = Call[operator delete] : func:r2038_1, 0:r2038_3 -# 2038| mu2038_5(unknown) = ^CallSideEffect : ~m? -# 2039| v2039_1(void) = NoOp : -# 2035| v2035_4(void) = ReturnVoid : -# 2035| v2035_5(void) = AliasedUse : ~m? -# 2035| v2035_6(void) = ExitFunction : +# 2082| void NewDeleteMem() +# 2082| Block 0 +# 2082| v2082_1(void) = EnterFunction : +# 2082| mu2082_2(unknown) = AliasedDefinition : +# 2082| mu2082_3(unknown) = InitializeNonLocal : +# 2083| r2083_1(glval) = VariableAddress[x] : +# 2083| r2083_2(glval) = FunctionAddress[operator new] : +# 2083| r2083_3(unsigned long) = Constant[4] : +# 2083| r2083_4(void *) = Call[operator new] : func:r2083_2, 0:r2083_3 +# 2083| mu2083_5(unknown) = ^CallSideEffect : ~m? +# 2083| mu2083_6(unknown) = ^InitializeDynamicAllocation : &:r2083_4 +# 2083| r2083_7(int *) = Convert : r2083_4 +# 2083| mu2083_8(int *) = Store[x] : &:r2083_1, r2083_7 +# 2084| r2084_1(int) = Constant[6] : +# 2084| r2084_2(glval) = VariableAddress[x] : +# 2084| r2084_3(int *) = Load[x] : &:r2084_2, ~m? +# 2084| r2084_4(glval) = CopyValue : r2084_3 +# 2084| mu2084_5(int) = Store[?] : &:r2084_4, r2084_1 +# 2085| r2085_1(glval) = FunctionAddress[operator delete] : +# 2085| r2085_2(glval) = VariableAddress[x] : +# 2085| r2085_3(int *) = Load[x] : &:r2085_2, ~m? +# 2085| v2085_4(void) = Call[operator delete] : func:r2085_1, 0:r2085_3 +# 2085| mu2085_5(unknown) = ^CallSideEffect : ~m? +# 2086| v2086_1(void) = NoOp : +# 2082| v2082_4(void) = ReturnVoid : +# 2082| v2082_5(void) = AliasedUse : ~m? +# 2082| v2082_6(void) = ExitFunction : -# 2041| void Base2::Base2() -# 2041| Block 0 -# 2041| v2041_1(void) = EnterFunction : -# 2041| mu2041_2(unknown) = AliasedDefinition : -# 2041| mu2041_3(unknown) = InitializeNonLocal : -# 2041| r2041_4(glval) = VariableAddress[#this] : -# 2041| mu2041_5(glval) = InitializeParameter[#this] : &:r2041_4 -# 2041| r2041_6(glval) = Load[#this] : &:r2041_4, ~m? -# 2041| mu2041_7(Base2) = InitializeIndirection[#this] : &:r2041_6 -# 2041| v2041_8(void) = NoOp : -# 2041| v2041_9(void) = ReturnIndirection[#this] : &:r2041_6, ~m? -# 2041| v2041_10(void) = ReturnVoid : -# 2041| v2041_11(void) = AliasedUse : ~m? -# 2041| v2041_12(void) = ExitFunction : +# 2088| void Base2::Base2() +# 2088| Block 0 +# 2088| v2088_1(void) = EnterFunction : +# 2088| mu2088_2(unknown) = AliasedDefinition : +# 2088| mu2088_3(unknown) = InitializeNonLocal : +# 2088| r2088_4(glval) = VariableAddress[#this] : +# 2088| mu2088_5(glval) = InitializeParameter[#this] : &:r2088_4 +# 2088| r2088_6(glval) = Load[#this] : &:r2088_4, ~m? +# 2088| mu2088_7(Base2) = InitializeIndirection[#this] : &:r2088_6 +# 2088| v2088_8(void) = NoOp : +# 2088| v2088_9(void) = ReturnIndirection[#this] : &:r2088_6, ~m? +# 2088| v2088_10(void) = ReturnVoid : +# 2088| v2088_11(void) = AliasedUse : ~m? +# 2088| v2088_12(void) = ExitFunction : -# 2043| void Base2::operator delete(void*) -# 2043| Block 0 -# 2043| v2043_1(void) = EnterFunction : -# 2043| mu2043_2(unknown) = AliasedDefinition : -# 2043| mu2043_3(unknown) = InitializeNonLocal : -# 2043| r2043_4(glval) = VariableAddress[p] : -# 2043| mu2043_5(void *) = InitializeParameter[p] : &:r2043_4 -# 2043| r2043_6(void *) = Load[p] : &:r2043_4, ~m? -# 2043| mu2043_7(unknown) = InitializeIndirection[p] : &:r2043_6 -# 2044| v2044_1(void) = NoOp : -# 2043| v2043_8(void) = ReturnIndirection[p] : &:r2043_6, ~m? -# 2043| v2043_9(void) = ReturnVoid : -# 2043| v2043_10(void) = AliasedUse : ~m? -# 2043| v2043_11(void) = ExitFunction : +# 2090| void Base2::operator delete(void*) +# 2090| Block 0 +# 2090| v2090_1(void) = EnterFunction : +# 2090| mu2090_2(unknown) = AliasedDefinition : +# 2090| mu2090_3(unknown) = InitializeNonLocal : +# 2090| r2090_4(glval) = VariableAddress[p] : +# 2090| mu2090_5(void *) = InitializeParameter[p] : &:r2090_4 +# 2090| r2090_6(void *) = Load[p] : &:r2090_4, ~m? +# 2090| mu2090_7(unknown) = InitializeIndirection[p] : &:r2090_6 +# 2091| v2091_1(void) = NoOp : +# 2090| v2090_8(void) = ReturnIndirection[p] : &:r2090_6, ~m? +# 2090| v2090_9(void) = ReturnVoid : +# 2090| v2090_10(void) = AliasedUse : ~m? +# 2090| v2090_11(void) = ExitFunction : -# 2045| void Base2::~Base2() -# 2045| Block 0 -# 2045| v2045_1(void) = EnterFunction : -# 2045| mu2045_2(unknown) = AliasedDefinition : -# 2045| mu2045_3(unknown) = InitializeNonLocal : -# 2045| r2045_4(glval) = VariableAddress[#this] : -# 2045| mu2045_5(glval) = InitializeParameter[#this] : &:r2045_4 -# 2045| r2045_6(glval) = Load[#this] : &:r2045_4, ~m? -# 2045| mu2045_7(Base2) = InitializeIndirection[#this] : &:r2045_6 -# 2045| v2045_8(void) = NoOp : -# 2045| v2045_9(void) = ReturnIndirection[#this] : &:r2045_6, ~m? -# 2045| v2045_10(void) = ReturnVoid : -# 2045| v2045_11(void) = AliasedUse : ~m? -# 2045| v2045_12(void) = ExitFunction : - -# 2048| void Derived2::Derived2() -# 2048| Block 0 -# 2048| v2048_1(void) = EnterFunction : -# 2048| mu2048_2(unknown) = AliasedDefinition : -# 2048| mu2048_3(unknown) = InitializeNonLocal : -# 2048| r2048_4(glval) = VariableAddress[#this] : -# 2048| mu2048_5(glval) = InitializeParameter[#this] : &:r2048_4 -# 2048| r2048_6(glval) = Load[#this] : &:r2048_4, ~m? -# 2048| mu2048_7(Derived2) = InitializeIndirection[#this] : &:r2048_6 -# 2048| r2048_8(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2048_5 -# 2048| r2048_9(glval) = FunctionAddress[Base2] : -# 2048| v2048_10(void) = Call[Base2] : func:r2048_9, this:r2048_8 -# 2048| mu2048_11(unknown) = ^CallSideEffect : ~m? -# 2048| mu2048_12(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2048_8 -# 2048| v2048_13(void) = NoOp : -# 2048| v2048_14(void) = ReturnIndirection[#this] : &:r2048_6, ~m? -# 2048| v2048_15(void) = ReturnVoid : -# 2048| v2048_16(void) = AliasedUse : ~m? -# 2048| v2048_17(void) = ExitFunction : - -# 2051| void Derived2::~Derived2() -# 2051| Block 0 -# 2051| v2051_1(void) = EnterFunction : -# 2051| mu2051_2(unknown) = AliasedDefinition : -# 2051| mu2051_3(unknown) = InitializeNonLocal : -# 2051| r2051_4(glval) = VariableAddress[#this] : -# 2051| mu2051_5(glval) = InitializeParameter[#this] : &:r2051_4 -# 2051| r2051_6(glval) = Load[#this] : &:r2051_4, ~m? -# 2051| mu2051_7(Derived2) = InitializeIndirection[#this] : &:r2051_6 -# 2051| v2051_8(void) = NoOp : -# 2051| r2051_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2051_5 -# 2051| r2051_10(glval) = FunctionAddress[~Base2] : -# 2051| v2051_11(void) = Call[~Base2] : func:r2051_10, this:r2051_9 -# 2051| mu2051_12(unknown) = ^CallSideEffect : ~m? -# 2051| v2051_13(void) = ReturnIndirection[#this] : &:r2051_6, ~m? -# 2051| v2051_14(void) = ReturnVoid : -# 2051| v2051_15(void) = AliasedUse : ~m? -# 2051| v2051_16(void) = ExitFunction : - -# 2053| void Derived2::operator delete(void*) -# 2053| Block 0 -# 2053| v2053_1(void) = EnterFunction : -# 2053| mu2053_2(unknown) = AliasedDefinition : -# 2053| mu2053_3(unknown) = InitializeNonLocal : -# 2053| r2053_4(glval) = VariableAddress[p] : -# 2053| mu2053_5(void *) = InitializeParameter[p] : &:r2053_4 -# 2053| r2053_6(void *) = Load[p] : &:r2053_4, ~m? -# 2053| mu2053_7(unknown) = InitializeIndirection[p] : &:r2053_6 -# 2054| v2054_1(void) = NoOp : -# 2053| v2053_8(void) = ReturnIndirection[p] : &:r2053_6, ~m? -# 2053| v2053_9(void) = ReturnVoid : -# 2053| v2053_10(void) = AliasedUse : ~m? -# 2053| v2053_11(void) = ExitFunction : - -# 2058| int virtual_delete() -# 2058| Block 0 -# 2058| v2058_1(void) = EnterFunction : -# 2058| mu2058_2(unknown) = AliasedDefinition : -# 2058| mu2058_3(unknown) = InitializeNonLocal : -# 2060| r2060_1(glval) = VariableAddress[b1] : -# 2060| r2060_2(glval) = FunctionAddress[operator new] : -# 2060| r2060_3(unsigned long) = Constant[8] : -# 2060| r2060_4(void *) = Call[operator new] : func:r2060_2, 0:r2060_3 -# 2060| mu2060_5(unknown) = ^CallSideEffect : ~m? -# 2060| mu2060_6(unknown) = ^InitializeDynamicAllocation : &:r2060_4 -# 2060| r2060_7(Base2 *) = Convert : r2060_4 -# 2060| r2060_8(glval) = FunctionAddress[Base2] : -# 2060| v2060_9(void) = Call[Base2] : func:r2060_8, this:r2060_7 -# 2060| mu2060_10(unknown) = ^CallSideEffect : ~m? -# 2060| mu2060_11(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2060_7 -# 2060| mu2060_12(Base2 *) = Store[b1] : &:r2060_1, r2060_7 -# 2061| r2061_1(glval) = VirtualDeleteFunctionAddress : -# 2061| r2061_2(glval) = VariableAddress[b1] : -# 2061| r2061_3(Base2 *) = Load[b1] : &:r2061_2, ~m? -# 2061| v2061_4(void) = Call[?] : func:r2061_1, 0:r2061_3 -# 2061| mu2061_5(unknown) = ^CallSideEffect : ~m? -# 2063| r2063_1(glval) = VariableAddress[b2] : -# 2063| r2063_2(glval) = FunctionAddress[operator new] : -# 2063| r2063_3(unsigned long) = Constant[16] : -# 2063| r2063_4(void *) = Call[operator new] : func:r2063_2, 0:r2063_3 -# 2063| mu2063_5(unknown) = ^CallSideEffect : ~m? -# 2063| mu2063_6(unknown) = ^InitializeDynamicAllocation : &:r2063_4 -# 2063| r2063_7(Derived2 *) = Convert : r2063_4 -# 2063| r2063_8(glval) = FunctionAddress[Derived2] : -# 2063| v2063_9(void) = Call[Derived2] : func:r2063_8, this:r2063_7 -# 2063| mu2063_10(unknown) = ^CallSideEffect : ~m? -# 2063| mu2063_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2063_7 -# 2063| r2063_12(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2063_7 -# 2063| mu2063_13(Base2 *) = Store[b2] : &:r2063_1, r2063_12 -# 2064| r2064_1(glval) = VirtualDeleteFunctionAddress : -# 2064| r2064_2(glval) = VariableAddress[b2] : -# 2064| r2064_3(Base2 *) = Load[b2] : &:r2064_2, ~m? -# 2064| v2064_4(void) = Call[?] : func:r2064_1, 0:r2064_3 -# 2064| mu2064_5(unknown) = ^CallSideEffect : ~m? -# 2066| r2066_1(glval) = VariableAddress[d] : -# 2066| r2066_2(glval) = FunctionAddress[operator new] : -# 2066| r2066_3(unsigned long) = Constant[16] : -# 2066| r2066_4(void *) = Call[operator new] : func:r2066_2, 0:r2066_3 -# 2066| mu2066_5(unknown) = ^CallSideEffect : ~m? -# 2066| mu2066_6(unknown) = ^InitializeDynamicAllocation : &:r2066_4 -# 2066| r2066_7(Derived2 *) = Convert : r2066_4 -# 2066| r2066_8(glval) = FunctionAddress[Derived2] : -# 2066| v2066_9(void) = Call[Derived2] : func:r2066_8, this:r2066_7 -# 2066| mu2066_10(unknown) = ^CallSideEffect : ~m? -# 2066| mu2066_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2066_7 -# 2066| mu2066_12(Derived2 *) = Store[d] : &:r2066_1, r2066_7 -# 2067| r2067_1(glval) = VirtualDeleteFunctionAddress : -# 2067| r2067_2(glval) = VariableAddress[d] : -# 2067| r2067_3(Derived2 *) = Load[d] : &:r2067_2, ~m? -# 2067| v2067_4(void) = Call[?] : func:r2067_1, 0:r2067_3 -# 2067| mu2067_5(unknown) = ^CallSideEffect : ~m? -# 2068| r2068_1(glval) = VariableAddress[#return] : -# 2068| mu2068_2(int) = Uninitialized[#return] : &:r2068_1 -# 2058| r2058_4(glval) = VariableAddress[#return] : -# 2058| v2058_5(void) = ReturnValue : &:r2058_4, ~m? -# 2058| v2058_6(void) = AliasedUse : ~m? -# 2058| v2058_7(void) = ExitFunction : - -# 2072| void test_constant_folding() -# 2072| Block 0 -# 2072| v2072_1(void) = EnterFunction : -# 2072| mu2072_2(unknown) = AliasedDefinition : -# 2072| mu2072_3(unknown) = InitializeNonLocal : -# 2073| r2073_1(glval) = VariableAddress[x] : -# 2073| r2073_2(int) = Constant[116] : -# 2073| mu2073_3(int) = Store[x] : &:r2073_1, r2073_2 -# 2074| r2074_1(glval) = FunctionAddress[test_constant_folding_use] : -# 2074| r2074_2(int) = Constant[116] : -# 2074| v2074_3(void) = Call[test_constant_folding_use] : func:r2074_1, 0:r2074_2 -# 2074| mu2074_4(unknown) = ^CallSideEffect : ~m? -# 2075| v2075_1(void) = NoOp : -# 2072| v2072_4(void) = ReturnVoid : -# 2072| v2072_5(void) = AliasedUse : ~m? -# 2072| v2072_6(void) = ExitFunction : - -# 2079| int NonExit() -# 2079| Block 0 -# 2079| v2079_1(void) = EnterFunction : -# 2079| mu2079_2(unknown) = AliasedDefinition : -# 2079| mu2079_3(unknown) = InitializeNonLocal : -# 2080| r2080_1(glval) = VariableAddress[x] : -# 2080| r2080_2(glval) = FunctionAddress[Add] : -# 2080| r2080_3(int) = Constant[3] : -# 2080| r2080_4(int) = Constant[4] : -# 2080| r2080_5(int) = Call[Add] : func:r2080_2, 0:r2080_3, 1:r2080_4 -# 2080| mu2080_6(unknown) = ^CallSideEffect : ~m? -# 2080| mu2080_7(int) = Store[x] : &:r2080_1, r2080_5 -# 2081| r2081_1(glval) = VariableAddress[x] : -# 2081| r2081_2(int) = Load[x] : &:r2081_1, ~m? -# 2081| r2081_3(int) = Constant[7] : -# 2081| r2081_4(bool) = CompareEQ : r2081_2, r2081_3 -# 2081| v2081_5(void) = ConditionalBranch : r2081_4 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 2082| Block 1 -# 2082| r2082_1(glval) = FunctionAddress[exit] : -# 2082| r2082_2(int) = Constant[3] : -# 2082| v2082_3(void) = Call[exit] : func:r2082_1, 0:r2082_2 -# 2082| mu2082_4(unknown) = ^CallSideEffect : ~m? -# 2079| v2079_4(void) = Unreached : - -# 2083| Block 2 -# 2083| r2083_1(glval) = FunctionAddress[VoidFunc] : -# 2083| v2083_2(void) = Call[VoidFunc] : func:r2083_1 -# 2083| mu2083_3(unknown) = ^CallSideEffect : ~m? -# 2084| r2084_1(glval) = VariableAddress[#return] : -# 2084| r2084_2(glval) = VariableAddress[x] : -# 2084| r2084_3(int) = Load[x] : &:r2084_2, ~m? -# 2084| mu2084_4(int) = Store[#return] : &:r2084_1, r2084_3 -# 2079| r2079_5(glval) = VariableAddress[#return] : -# 2079| v2079_6(void) = ReturnValue : &:r2079_5, ~m? -# 2079| v2079_7(void) = AliasedUse : ~m? -# 2079| v2079_8(void) = ExitFunction : - -# 2087| void CallsNonExit() -# 2087| Block 0 -# 2087| v2087_1(void) = EnterFunction : -# 2087| mu2087_2(unknown) = AliasedDefinition : -# 2087| mu2087_3(unknown) = InitializeNonLocal : -# 2088| r2088_1(glval) = FunctionAddress[VoidFunc] : -# 2088| v2088_2(void) = Call[VoidFunc] : func:r2088_1 -# 2088| mu2088_3(unknown) = ^CallSideEffect : ~m? -# 2089| r2089_1(glval) = FunctionAddress[exit] : -# 2089| r2089_2(int) = Constant[3] : -# 2089| v2089_3(void) = Call[exit] : func:r2089_1, 0:r2089_2 -# 2089| mu2089_4(unknown) = ^CallSideEffect : ~m? -# 2087| v2087_4(void) = Unreached : - -# 2090| Block 1 -# 2090| v2090_1(void) = NoOp : -# 2087| v2087_5(void) = ReturnVoid : -# 2087| v2087_6(void) = AliasedUse : ~m? -# 2087| v2087_7(void) = ExitFunction : - -# 2092| int TransNonExit() +# 2092| void Base2::~Base2() # 2092| Block 0 -# 2092| v2092_1(void) = EnterFunction : -# 2092| mu2092_2(unknown) = AliasedDefinition : -# 2092| mu2092_3(unknown) = InitializeNonLocal : -# 2093| r2093_1(glval) = VariableAddress[x] : -# 2093| r2093_2(glval) = FunctionAddress[Add] : -# 2093| r2093_3(int) = Constant[3] : -# 2093| r2093_4(int) = Constant[4] : -# 2093| r2093_5(int) = Call[Add] : func:r2093_2, 0:r2093_3, 1:r2093_4 -# 2093| mu2093_6(unknown) = ^CallSideEffect : ~m? -# 2093| mu2093_7(int) = Store[x] : &:r2093_1, r2093_5 -# 2094| r2094_1(glval) = VariableAddress[x] : -# 2094| r2094_2(int) = Load[x] : &:r2094_1, ~m? -# 2094| r2094_3(int) = Constant[7] : -# 2094| r2094_4(bool) = CompareEQ : r2094_2, r2094_3 -# 2094| v2094_5(void) = ConditionalBranch : r2094_4 -#-----| False -> Block 2 -#-----| True -> Block 1 +# 2092| v2092_1(void) = EnterFunction : +# 2092| mu2092_2(unknown) = AliasedDefinition : +# 2092| mu2092_3(unknown) = InitializeNonLocal : +# 2092| r2092_4(glval) = VariableAddress[#this] : +# 2092| mu2092_5(glval) = InitializeParameter[#this] : &:r2092_4 +# 2092| r2092_6(glval) = Load[#this] : &:r2092_4, ~m? +# 2092| mu2092_7(Base2) = InitializeIndirection[#this] : &:r2092_6 +# 2092| v2092_8(void) = NoOp : +# 2092| v2092_9(void) = ReturnIndirection[#this] : &:r2092_6, ~m? +# 2092| v2092_10(void) = ReturnVoid : +# 2092| v2092_11(void) = AliasedUse : ~m? +# 2092| v2092_12(void) = ExitFunction : -# 2095| Block 1 -# 2095| r2095_1(glval) = FunctionAddress[CallsNonExit] : -# 2095| v2095_2(void) = Call[CallsNonExit] : func:r2095_1 -# 2095| mu2095_3(unknown) = ^CallSideEffect : ~m? -#-----| Goto -> Block 2 +# 2095| void Derived2::Derived2() +# 2095| Block 0 +# 2095| v2095_1(void) = EnterFunction : +# 2095| mu2095_2(unknown) = AliasedDefinition : +# 2095| mu2095_3(unknown) = InitializeNonLocal : +# 2095| r2095_4(glval) = VariableAddress[#this] : +# 2095| mu2095_5(glval) = InitializeParameter[#this] : &:r2095_4 +# 2095| r2095_6(glval) = Load[#this] : &:r2095_4, ~m? +# 2095| mu2095_7(Derived2) = InitializeIndirection[#this] : &:r2095_6 +# 2095| r2095_8(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2095_5 +# 2095| r2095_9(glval) = FunctionAddress[Base2] : +# 2095| v2095_10(void) = Call[Base2] : func:r2095_9, this:r2095_8 +# 2095| mu2095_11(unknown) = ^CallSideEffect : ~m? +# 2095| mu2095_12(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2095_8 +# 2095| v2095_13(void) = NoOp : +# 2095| v2095_14(void) = ReturnIndirection[#this] : &:r2095_6, ~m? +# 2095| v2095_15(void) = ReturnVoid : +# 2095| v2095_16(void) = AliasedUse : ~m? +# 2095| v2095_17(void) = ExitFunction : -# 2096| Block 2 -# 2096| r2096_1(glval) = FunctionAddress[VoidFunc] : -# 2096| v2096_2(void) = Call[VoidFunc] : func:r2096_1 -# 2096| mu2096_3(unknown) = ^CallSideEffect : ~m? -# 2097| r2097_1(glval) = VariableAddress[#return] : -# 2097| r2097_2(glval) = VariableAddress[x] : -# 2097| r2097_3(int) = Load[x] : &:r2097_2, ~m? -# 2097| mu2097_4(int) = Store[#return] : &:r2097_1, r2097_3 -# 2092| r2092_4(glval) = VariableAddress[#return] : -# 2092| v2092_5(void) = ReturnValue : &:r2092_4, ~m? -# 2092| v2092_6(void) = AliasedUse : ~m? -# 2092| v2092_7(void) = ExitFunction : +# 2098| void Derived2::~Derived2() +# 2098| Block 0 +# 2098| v2098_1(void) = EnterFunction : +# 2098| mu2098_2(unknown) = AliasedDefinition : +# 2098| mu2098_3(unknown) = InitializeNonLocal : +# 2098| r2098_4(glval) = VariableAddress[#this] : +# 2098| mu2098_5(glval) = InitializeParameter[#this] : &:r2098_4 +# 2098| r2098_6(glval) = Load[#this] : &:r2098_4, ~m? +# 2098| mu2098_7(Derived2) = InitializeIndirection[#this] : &:r2098_6 +# 2098| v2098_8(void) = NoOp : +# 2098| r2098_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2098_5 +# 2098| r2098_10(glval) = FunctionAddress[~Base2] : +# 2098| v2098_11(void) = Call[~Base2] : func:r2098_10, this:r2098_9 +# 2098| mu2098_12(unknown) = ^CallSideEffect : ~m? +# 2098| v2098_13(void) = ReturnIndirection[#this] : &:r2098_6, ~m? +# 2098| v2098_14(void) = ReturnVoid : +# 2098| v2098_15(void) = AliasedUse : ~m? +# 2098| v2098_16(void) = ExitFunction : -# 2100| void newArrayCorrectType(size_t) +# 2100| void Derived2::operator delete(void*) # 2100| Block 0 -# 2100| v2100_1(void) = EnterFunction : -# 2100| mu2100_2(unknown) = AliasedDefinition : -# 2100| mu2100_3(unknown) = InitializeNonLocal : -# 2100| r2100_4(glval) = VariableAddress[n] : -# 2100| mu2100_5(unsigned long) = InitializeParameter[n] : &:r2100_4 -# 2101| r2101_1(glval) = FunctionAddress[operator new[]] : -# 2101| r2101_2(glval) = VariableAddress[n] : -# 2101| r2101_3(unsigned long) = Load[n] : &:r2101_2, ~m? -# 2101| r2101_4(unsigned long) = Constant[4] : -# 2101| r2101_5(unsigned long) = Mul : r2101_3, r2101_4 -# 2101| r2101_6(void *) = Call[operator new[]] : func:r2101_1, 0:r2101_5 -# 2101| mu2101_7(unknown) = ^CallSideEffect : ~m? -# 2101| mu2101_8(unknown) = ^InitializeDynamicAllocation : &:r2101_6 -# 2101| r2101_9(int *) = Convert : r2101_6 -# 2102| r2102_1(glval) = FunctionAddress[operator new[]] : -# 2102| r2102_2(glval) = VariableAddress[n] : -# 2102| r2102_3(unsigned long) = Load[n] : &:r2102_2, ~m? -# 2102| r2102_4(unsigned long) = Constant[4] : -# 2102| r2102_5(unsigned long) = Mul : r2102_3, r2102_4 -# 2102| r2102_6(float) = Constant[1.0] : -# 2102| r2102_7(void *) = Call[operator new[]] : func:r2102_1, 0:r2102_5, 1:r2102_6 -# 2102| mu2102_8(unknown) = ^CallSideEffect : ~m? -# 2102| mu2102_9(unknown) = ^InitializeDynamicAllocation : &:r2102_7 -# 2102| r2102_10(int *) = Convert : r2102_7 -# 2103| r2103_1(glval) = FunctionAddress[operator new[]] : -# 2103| r2103_2(glval) = VariableAddress[n] : -# 2103| r2103_3(unsigned long) = Load[n] : &:r2103_2, ~m? -# 2103| r2103_4(unsigned long) = Constant[8] : -# 2103| r2103_5(unsigned long) = Mul : r2103_3, r2103_4 -# 2103| r2103_6(void *) = Call[operator new[]] : func:r2103_1, 0:r2103_5 -# 2103| mu2103_7(unknown) = ^CallSideEffect : ~m? -# 2103| mu2103_8(unknown) = ^InitializeDynamicAllocation : &:r2103_6 -# 2103| r2103_9(String *) = Convert : r2103_6 -# 2104| r2104_1(glval) = FunctionAddress[operator new[]] : -# 2104| r2104_2(glval) = VariableAddress[n] : -# 2104| r2104_3(unsigned long) = Load[n] : &:r2104_2, ~m? -# 2104| r2104_4(unsigned long) = Constant[256] : -# 2104| r2104_5(unsigned long) = Mul : r2104_3, r2104_4 -# 2104| r2104_6(align_val_t) = Constant[128] : -# 2104| r2104_7(void *) = Call[operator new[]] : func:r2104_1, 0:r2104_5, 1:r2104_6 -# 2104| mu2104_8(unknown) = ^CallSideEffect : ~m? -# 2104| mu2104_9(unknown) = ^InitializeDynamicAllocation : &:r2104_7 -# 2104| r2104_10(Overaligned *) = Convert : r2104_7 -# 2105| r2105_1(glval) = FunctionAddress[operator new[]] : -# 2105| r2105_2(glval) = VariableAddress[n] : -# 2105| r2105_3(unsigned long) = Load[n] : &:r2105_2, ~m? -# 2105| r2105_4(unsigned long) = Constant[1] : -# 2105| r2105_5(unsigned long) = Mul : r2105_3, r2105_4 -# 2105| r2105_6(void *) = Call[operator new[]] : func:r2105_1, 0:r2105_5 -# 2105| mu2105_7(unknown) = ^CallSideEffect : ~m? -# 2105| mu2105_8(unknown) = ^InitializeDynamicAllocation : &:r2105_6 -# 2105| r2105_9(DefaultCtorWithDefaultParam *) = Convert : r2105_6 -# 2106| r2106_1(glval) = FunctionAddress[operator new[]] : -# 2106| r2106_2(glval) = VariableAddress[n] : -# 2106| r2106_3(unsigned long) = Load[n] : &:r2106_2, ~m? -# 2106| r2106_4(unsigned long) = Constant[4] : -# 2106| r2106_5(unsigned long) = Mul : r2106_3, r2106_4 -# 2106| r2106_6(void *) = Call[operator new[]] : func:r2106_1, 0:r2106_5 -# 2106| mu2106_7(unknown) = ^CallSideEffect : ~m? -# 2106| mu2106_8(unknown) = ^InitializeDynamicAllocation : &:r2106_6 -# 2106| r2106_9(int *) = Convert : r2106_6 -# 2107| v2107_1(void) = NoOp : -# 2100| v2100_6(void) = ReturnVoid : -# 2100| v2100_7(void) = AliasedUse : ~m? -# 2100| v2100_8(void) = ExitFunction : +# 2100| v2100_1(void) = EnterFunction : +# 2100| mu2100_2(unknown) = AliasedDefinition : +# 2100| mu2100_3(unknown) = InitializeNonLocal : +# 2100| r2100_4(glval) = VariableAddress[p] : +# 2100| mu2100_5(void *) = InitializeParameter[p] : &:r2100_4 +# 2100| r2100_6(void *) = Load[p] : &:r2100_4, ~m? +# 2100| mu2100_7(unknown) = InitializeIndirection[p] : &:r2100_6 +# 2101| v2101_1(void) = NoOp : +# 2100| v2100_8(void) = ReturnIndirection[p] : &:r2100_6, ~m? +# 2100| v2100_9(void) = ReturnVoid : +# 2100| v2100_10(void) = AliasedUse : ~m? +# 2100| v2100_11(void) = ExitFunction : -# 2111| char* test_strtod(char*) -# 2111| Block 0 -# 2111| v2111_1(void) = EnterFunction : -# 2111| mu2111_2(unknown) = AliasedDefinition : -# 2111| mu2111_3(unknown) = InitializeNonLocal : -# 2111| r2111_4(glval) = VariableAddress[s] : -# 2111| mu2111_5(char *) = InitializeParameter[s] : &:r2111_4 -# 2111| r2111_6(char *) = Load[s] : &:r2111_4, ~m? -# 2111| mu2111_7(unknown) = InitializeIndirection[s] : &:r2111_6 -# 2112| r2112_1(glval) = VariableAddress[end] : -# 2112| mu2112_2(char *) = Uninitialized[end] : &:r2112_1 -# 2113| r2113_1(glval) = VariableAddress[d] : -# 2113| r2113_2(glval) = FunctionAddress[strtod] : -# 2113| r2113_3(glval) = VariableAddress[s] : -# 2113| r2113_4(char *) = Load[s] : &:r2113_3, ~m? -# 2113| r2113_5(char *) = Convert : r2113_4 -# 2113| r2113_6(glval) = VariableAddress[end] : -# 2113| r2113_7(char **) = CopyValue : r2113_6 -# 2113| r2113_8(double) = Call[strtod] : func:r2113_2, 0:r2113_5, 1:r2113_7 -# 2113| v2113_9(void) = ^BufferReadSideEffect[0] : &:r2113_5, ~m? -# 2113| mu2113_10(char *) = ^IndirectMayWriteSideEffect[1] : &:r2113_7 -# 2113| mu2113_11(double) = Store[d] : &:r2113_1, r2113_8 -# 2114| r2114_1(glval) = VariableAddress[#return] : -# 2114| r2114_2(glval) = VariableAddress[end] : -# 2114| r2114_3(char *) = Load[end] : &:r2114_2, ~m? -# 2114| mu2114_4(char *) = Store[#return] : &:r2114_1, r2114_3 -# 2111| v2111_8(void) = ReturnIndirection[s] : &:r2111_6, ~m? -# 2111| r2111_9(glval) = VariableAddress[#return] : -# 2111| v2111_10(void) = ReturnValue : &:r2111_9, ~m? -# 2111| v2111_11(void) = AliasedUse : ~m? -# 2111| v2111_12(void) = ExitFunction : +# 2105| int virtual_delete() +# 2105| Block 0 +# 2105| v2105_1(void) = EnterFunction : +# 2105| mu2105_2(unknown) = AliasedDefinition : +# 2105| mu2105_3(unknown) = InitializeNonLocal : +# 2107| r2107_1(glval) = VariableAddress[b1] : +# 2107| r2107_2(glval) = FunctionAddress[operator new] : +# 2107| r2107_3(unsigned long) = Constant[8] : +# 2107| r2107_4(void *) = Call[operator new] : func:r2107_2, 0:r2107_3 +# 2107| mu2107_5(unknown) = ^CallSideEffect : ~m? +# 2107| mu2107_6(unknown) = ^InitializeDynamicAllocation : &:r2107_4 +# 2107| r2107_7(Base2 *) = Convert : r2107_4 +# 2107| r2107_8(glval) = FunctionAddress[Base2] : +# 2107| v2107_9(void) = Call[Base2] : func:r2107_8, this:r2107_7 +# 2107| mu2107_10(unknown) = ^CallSideEffect : ~m? +# 2107| mu2107_11(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2107_7 +# 2107| mu2107_12(Base2 *) = Store[b1] : &:r2107_1, r2107_7 +# 2108| r2108_1(glval) = VirtualDeleteFunctionAddress : +# 2108| r2108_2(glval) = VariableAddress[b1] : +# 2108| r2108_3(Base2 *) = Load[b1] : &:r2108_2, ~m? +# 2108| v2108_4(void) = Call[?] : func:r2108_1, 0:r2108_3 +# 2108| mu2108_5(unknown) = ^CallSideEffect : ~m? +# 2110| r2110_1(glval) = VariableAddress[b2] : +# 2110| r2110_2(glval) = FunctionAddress[operator new] : +# 2110| r2110_3(unsigned long) = Constant[16] : +# 2110| r2110_4(void *) = Call[operator new] : func:r2110_2, 0:r2110_3 +# 2110| mu2110_5(unknown) = ^CallSideEffect : ~m? +# 2110| mu2110_6(unknown) = ^InitializeDynamicAllocation : &:r2110_4 +# 2110| r2110_7(Derived2 *) = Convert : r2110_4 +# 2110| r2110_8(glval) = FunctionAddress[Derived2] : +# 2110| v2110_9(void) = Call[Derived2] : func:r2110_8, this:r2110_7 +# 2110| mu2110_10(unknown) = ^CallSideEffect : ~m? +# 2110| mu2110_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2110_7 +# 2110| r2110_12(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2110_7 +# 2110| mu2110_13(Base2 *) = Store[b2] : &:r2110_1, r2110_12 +# 2111| r2111_1(glval) = VirtualDeleteFunctionAddress : +# 2111| r2111_2(glval) = VariableAddress[b2] : +# 2111| r2111_3(Base2 *) = Load[b2] : &:r2111_2, ~m? +# 2111| v2111_4(void) = Call[?] : func:r2111_1, 0:r2111_3 +# 2111| mu2111_5(unknown) = ^CallSideEffect : ~m? +# 2113| r2113_1(glval) = VariableAddress[d] : +# 2113| r2113_2(glval) = FunctionAddress[operator new] : +# 2113| r2113_3(unsigned long) = Constant[16] : +# 2113| r2113_4(void *) = Call[operator new] : func:r2113_2, 0:r2113_3 +# 2113| mu2113_5(unknown) = ^CallSideEffect : ~m? +# 2113| mu2113_6(unknown) = ^InitializeDynamicAllocation : &:r2113_4 +# 2113| r2113_7(Derived2 *) = Convert : r2113_4 +# 2113| r2113_8(glval) = FunctionAddress[Derived2] : +# 2113| v2113_9(void) = Call[Derived2] : func:r2113_8, this:r2113_7 +# 2113| mu2113_10(unknown) = ^CallSideEffect : ~m? +# 2113| mu2113_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2113_7 +# 2113| mu2113_12(Derived2 *) = Store[d] : &:r2113_1, r2113_7 +# 2114| r2114_1(glval) = VirtualDeleteFunctionAddress : +# 2114| r2114_2(glval) = VariableAddress[d] : +# 2114| r2114_3(Derived2 *) = Load[d] : &:r2114_2, ~m? +# 2114| v2114_4(void) = Call[?] : func:r2114_1, 0:r2114_3 +# 2114| mu2114_5(unknown) = ^CallSideEffect : ~m? +# 2115| r2115_1(glval) = VariableAddress[#return] : +# 2115| mu2115_2(int) = Uninitialized[#return] : &:r2115_1 +# 2105| r2105_4(glval) = VariableAddress[#return] : +# 2105| v2105_5(void) = ReturnValue : &:r2105_4, ~m? +# 2105| v2105_6(void) = AliasedUse : ~m? +# 2105| v2105_7(void) = ExitFunction : -# 2121| void call_as_child_of_ConditionDeclExpr() -# 2121| Block 0 -# 2121| v2121_1(void) = EnterFunction : -# 2121| mu2121_2(unknown) = AliasedDefinition : -# 2121| mu2121_3(unknown) = InitializeNonLocal : -# 2122| r2122_1(glval) = VariableAddress[b] : -# 2122| r2122_2(HasOperatorBool) = Constant[0] : -# 2122| mu2122_3(HasOperatorBool) = Store[b] : &:r2122_1, r2122_2 -# 2122| r2122_4(glval) = VariableAddress[b] : -# 2122| r2122_5(glval) = FunctionAddress[operator bool] : -# 2122| r2122_6(bool) = Call[operator bool] : func:r2122_5, this:r2122_4 -# 2122| mu2122_7(unknown) = ^CallSideEffect : ~m? -# 2122| v2122_8(void) = ^IndirectReadSideEffect[-1] : &:r2122_4, ~m? -# 2122| mu2122_9(HasOperatorBool) = ^IndirectMayWriteSideEffect[-1] : &:r2122_4 -# 2122| r2122_10(bool) = CopyValue : r2122_6 -# 2122| v2122_11(void) = ConditionalBranch : r2122_10 +# 2119| void test_constant_folding() +# 2119| Block 0 +# 2119| v2119_1(void) = EnterFunction : +# 2119| mu2119_2(unknown) = AliasedDefinition : +# 2119| mu2119_3(unknown) = InitializeNonLocal : +# 2120| r2120_1(glval) = VariableAddress[x] : +# 2120| r2120_2(int) = Constant[116] : +# 2120| mu2120_3(int) = Store[x] : &:r2120_1, r2120_2 +# 2121| r2121_1(glval) = FunctionAddress[test_constant_folding_use] : +# 2121| r2121_2(int) = Constant[116] : +# 2121| v2121_3(void) = Call[test_constant_folding_use] : func:r2121_1, 0:r2121_2 +# 2121| mu2121_4(unknown) = ^CallSideEffect : ~m? +# 2122| v2122_1(void) = NoOp : +# 2119| v2119_4(void) = ReturnVoid : +# 2119| v2119_5(void) = AliasedUse : ~m? +# 2119| v2119_6(void) = ExitFunction : + +# 2126| int NonExit() +# 2126| Block 0 +# 2126| v2126_1(void) = EnterFunction : +# 2126| mu2126_2(unknown) = AliasedDefinition : +# 2126| mu2126_3(unknown) = InitializeNonLocal : +# 2127| r2127_1(glval) = VariableAddress[x] : +# 2127| r2127_2(glval) = FunctionAddress[Add] : +# 2127| r2127_3(int) = Constant[3] : +# 2127| r2127_4(int) = Constant[4] : +# 2127| r2127_5(int) = Call[Add] : func:r2127_2, 0:r2127_3, 1:r2127_4 +# 2127| mu2127_6(unknown) = ^CallSideEffect : ~m? +# 2127| mu2127_7(int) = Store[x] : &:r2127_1, r2127_5 +# 2128| r2128_1(glval) = VariableAddress[x] : +# 2128| r2128_2(int) = Load[x] : &:r2128_1, ~m? +# 2128| r2128_3(int) = Constant[7] : +# 2128| r2128_4(bool) = CompareEQ : r2128_2, r2128_3 +# 2128| v2128_5(void) = ConditionalBranch : r2128_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 2122| Block 1 -# 2122| v2122_12(void) = NoOp : +# 2129| Block 1 +# 2129| r2129_1(glval) = FunctionAddress[exit] : +# 2129| r2129_2(int) = Constant[3] : +# 2129| v2129_3(void) = Call[exit] : func:r2129_1, 0:r2129_2 +# 2129| mu2129_4(unknown) = ^CallSideEffect : ~m? +# 2126| v2126_4(void) = Unreached : + +# 2130| Block 2 +# 2130| r2130_1(glval) = FunctionAddress[VoidFunc] : +# 2130| v2130_2(void) = Call[VoidFunc] : func:r2130_1 +# 2130| mu2130_3(unknown) = ^CallSideEffect : ~m? +# 2131| r2131_1(glval) = VariableAddress[#return] : +# 2131| r2131_2(glval) = VariableAddress[x] : +# 2131| r2131_3(int) = Load[x] : &:r2131_2, ~m? +# 2131| mu2131_4(int) = Store[#return] : &:r2131_1, r2131_3 +# 2126| r2126_5(glval) = VariableAddress[#return] : +# 2126| v2126_6(void) = ReturnValue : &:r2126_5, ~m? +# 2126| v2126_7(void) = AliasedUse : ~m? +# 2126| v2126_8(void) = ExitFunction : + +# 2134| void CallsNonExit() +# 2134| Block 0 +# 2134| v2134_1(void) = EnterFunction : +# 2134| mu2134_2(unknown) = AliasedDefinition : +# 2134| mu2134_3(unknown) = InitializeNonLocal : +# 2135| r2135_1(glval) = FunctionAddress[VoidFunc] : +# 2135| v2135_2(void) = Call[VoidFunc] : func:r2135_1 +# 2135| mu2135_3(unknown) = ^CallSideEffect : ~m? +# 2136| r2136_1(glval) = FunctionAddress[exit] : +# 2136| r2136_2(int) = Constant[3] : +# 2136| v2136_3(void) = Call[exit] : func:r2136_1, 0:r2136_2 +# 2136| mu2136_4(unknown) = ^CallSideEffect : ~m? +# 2134| v2134_4(void) = Unreached : + +# 2137| Block 1 +# 2137| v2137_1(void) = NoOp : +# 2134| v2134_5(void) = ReturnVoid : +# 2134| v2134_6(void) = AliasedUse : ~m? +# 2134| v2134_7(void) = ExitFunction : + +# 2139| int TransNonExit() +# 2139| Block 0 +# 2139| v2139_1(void) = EnterFunction : +# 2139| mu2139_2(unknown) = AliasedDefinition : +# 2139| mu2139_3(unknown) = InitializeNonLocal : +# 2140| r2140_1(glval) = VariableAddress[x] : +# 2140| r2140_2(glval) = FunctionAddress[Add] : +# 2140| r2140_3(int) = Constant[3] : +# 2140| r2140_4(int) = Constant[4] : +# 2140| r2140_5(int) = Call[Add] : func:r2140_2, 0:r2140_3, 1:r2140_4 +# 2140| mu2140_6(unknown) = ^CallSideEffect : ~m? +# 2140| mu2140_7(int) = Store[x] : &:r2140_1, r2140_5 +# 2141| r2141_1(glval) = VariableAddress[x] : +# 2141| r2141_2(int) = Load[x] : &:r2141_1, ~m? +# 2141| r2141_3(int) = Constant[7] : +# 2141| r2141_4(bool) = CompareEQ : r2141_2, r2141_3 +# 2141| v2141_5(void) = ConditionalBranch : r2141_4 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2142| Block 1 +# 2142| r2142_1(glval) = FunctionAddress[CallsNonExit] : +# 2142| v2142_2(void) = Call[CallsNonExit] : func:r2142_1 +# 2142| mu2142_3(unknown) = ^CallSideEffect : ~m? #-----| Goto -> Block 2 -# 2123| Block 2 -# 2123| v2123_1(void) = NoOp : -# 2121| v2121_4(void) = ReturnVoid : -# 2121| v2121_5(void) = AliasedUse : ~m? -# 2121| v2121_6(void) = ExitFunction : +# 2143| Block 2 +# 2143| r2143_1(glval) = FunctionAddress[VoidFunc] : +# 2143| v2143_2(void) = Call[VoidFunc] : func:r2143_1 +# 2143| mu2143_3(unknown) = ^CallSideEffect : ~m? +# 2144| r2144_1(glval) = VariableAddress[#return] : +# 2144| r2144_2(glval) = VariableAddress[x] : +# 2144| r2144_3(int) = Load[x] : &:r2144_2, ~m? +# 2144| mu2144_4(int) = Store[#return] : &:r2144_1, r2144_3 +# 2139| r2139_4(glval) = VariableAddress[#return] : +# 2139| v2139_5(void) = ReturnValue : &:r2139_4, ~m? +# 2139| v2139_6(void) = AliasedUse : ~m? +# 2139| v2139_7(void) = ExitFunction : -# 2125| void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) -# 2125| Block 0 -# 2125| v2125_1(void) = EnterFunction : -# 2125| mu2125_2(unknown) = AliasedDefinition : -# 2125| mu2125_3(unknown) = InitializeNonLocal : -# 2125| r2125_4(glval) = VariableAddress[#this] : -# 2125| mu2125_5(glval) = InitializeParameter[#this] : &:r2125_4 -# 2125| r2125_6(glval) = Load[#this] : &:r2125_4, ~m? -# 2125| mu2125_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2125_6 +# 2147| void newArrayCorrectType(size_t) +# 2147| Block 0 +# 2147| v2147_1(void) = EnterFunction : +# 2147| mu2147_2(unknown) = AliasedDefinition : +# 2147| mu2147_3(unknown) = InitializeNonLocal : +# 2147| r2147_4(glval) = VariableAddress[n] : +# 2147| mu2147_5(unsigned long) = InitializeParameter[n] : &:r2147_4 +# 2148| r2148_1(glval) = FunctionAddress[operator new[]] : +# 2148| r2148_2(glval) = VariableAddress[n] : +# 2148| r2148_3(unsigned long) = Load[n] : &:r2148_2, ~m? +# 2148| r2148_4(unsigned long) = Constant[4] : +# 2148| r2148_5(unsigned long) = Mul : r2148_3, r2148_4 +# 2148| r2148_6(void *) = Call[operator new[]] : func:r2148_1, 0:r2148_5 +# 2148| mu2148_7(unknown) = ^CallSideEffect : ~m? +# 2148| mu2148_8(unknown) = ^InitializeDynamicAllocation : &:r2148_6 +# 2148| r2148_9(int *) = Convert : r2148_6 +# 2149| r2149_1(glval) = FunctionAddress[operator new[]] : +# 2149| r2149_2(glval) = VariableAddress[n] : +# 2149| r2149_3(unsigned long) = Load[n] : &:r2149_2, ~m? +# 2149| r2149_4(unsigned long) = Constant[4] : +# 2149| r2149_5(unsigned long) = Mul : r2149_3, r2149_4 +# 2149| r2149_6(float) = Constant[1.0] : +# 2149| r2149_7(void *) = Call[operator new[]] : func:r2149_1, 0:r2149_5, 1:r2149_6 +# 2149| mu2149_8(unknown) = ^CallSideEffect : ~m? +# 2149| mu2149_9(unknown) = ^InitializeDynamicAllocation : &:r2149_7 +# 2149| r2149_10(int *) = Convert : r2149_7 +# 2150| r2150_1(glval) = FunctionAddress[operator new[]] : +# 2150| r2150_2(glval) = VariableAddress[n] : +# 2150| r2150_3(unsigned long) = Load[n] : &:r2150_2, ~m? +# 2150| r2150_4(unsigned long) = Constant[8] : +# 2150| r2150_5(unsigned long) = Mul : r2150_3, r2150_4 +# 2150| r2150_6(void *) = Call[operator new[]] : func:r2150_1, 0:r2150_5 +# 2150| mu2150_7(unknown) = ^CallSideEffect : ~m? +# 2150| mu2150_8(unknown) = ^InitializeDynamicAllocation : &:r2150_6 +# 2150| r2150_9(String *) = Convert : r2150_6 +# 2151| r2151_1(glval) = FunctionAddress[operator new[]] : +# 2151| r2151_2(glval) = VariableAddress[n] : +# 2151| r2151_3(unsigned long) = Load[n] : &:r2151_2, ~m? +# 2151| r2151_4(unsigned long) = Constant[256] : +# 2151| r2151_5(unsigned long) = Mul : r2151_3, r2151_4 +# 2151| r2151_6(align_val_t) = Constant[128] : +# 2151| r2151_7(void *) = Call[operator new[]] : func:r2151_1, 0:r2151_5, 1:r2151_6 +# 2151| mu2151_8(unknown) = ^CallSideEffect : ~m? +# 2151| mu2151_9(unknown) = ^InitializeDynamicAllocation : &:r2151_7 +# 2151| r2151_10(Overaligned *) = Convert : r2151_7 +# 2152| r2152_1(glval) = FunctionAddress[operator new[]] : +# 2152| r2152_2(glval) = VariableAddress[n] : +# 2152| r2152_3(unsigned long) = Load[n] : &:r2152_2, ~m? +# 2152| r2152_4(unsigned long) = Constant[1] : +# 2152| r2152_5(unsigned long) = Mul : r2152_3, r2152_4 +# 2152| r2152_6(void *) = Call[operator new[]] : func:r2152_1, 0:r2152_5 +# 2152| mu2152_7(unknown) = ^CallSideEffect : ~m? +# 2152| mu2152_8(unknown) = ^InitializeDynamicAllocation : &:r2152_6 +# 2152| r2152_9(DefaultCtorWithDefaultParam *) = Convert : r2152_6 +# 2153| r2153_1(glval) = FunctionAddress[operator new[]] : +# 2153| r2153_2(glval) = VariableAddress[n] : +# 2153| r2153_3(unsigned long) = Load[n] : &:r2153_2, ~m? +# 2153| r2153_4(unsigned long) = Constant[4] : +# 2153| r2153_5(unsigned long) = Mul : r2153_3, r2153_4 +# 2153| r2153_6(void *) = Call[operator new[]] : func:r2153_1, 0:r2153_5 +# 2153| mu2153_7(unknown) = ^CallSideEffect : ~m? +# 2153| mu2153_8(unknown) = ^InitializeDynamicAllocation : &:r2153_6 +# 2153| r2153_9(int *) = Convert : r2153_6 +# 2154| v2154_1(void) = NoOp : +# 2147| v2147_6(void) = ReturnVoid : +# 2147| v2147_7(void) = AliasedUse : ~m? +# 2147| v2147_8(void) = ExitFunction : + +# 2158| char* test_strtod(char*) +# 2158| Block 0 +# 2158| v2158_1(void) = EnterFunction : +# 2158| mu2158_2(unknown) = AliasedDefinition : +# 2158| mu2158_3(unknown) = InitializeNonLocal : +# 2158| r2158_4(glval) = VariableAddress[s] : +# 2158| mu2158_5(char *) = InitializeParameter[s] : &:r2158_4 +# 2158| r2158_6(char *) = Load[s] : &:r2158_4, ~m? +# 2158| mu2158_7(unknown) = InitializeIndirection[s] : &:r2158_6 +# 2159| r2159_1(glval) = VariableAddress[end] : +# 2159| mu2159_2(char *) = Uninitialized[end] : &:r2159_1 +# 2160| r2160_1(glval) = VariableAddress[d] : +# 2160| r2160_2(glval) = FunctionAddress[strtod] : +# 2160| r2160_3(glval) = VariableAddress[s] : +# 2160| r2160_4(char *) = Load[s] : &:r2160_3, ~m? +# 2160| r2160_5(char *) = Convert : r2160_4 +# 2160| r2160_6(glval) = VariableAddress[end] : +# 2160| r2160_7(char **) = CopyValue : r2160_6 +# 2160| r2160_8(double) = Call[strtod] : func:r2160_2, 0:r2160_5, 1:r2160_7 +# 2160| v2160_9(void) = ^BufferReadSideEffect[0] : &:r2160_5, ~m? +# 2160| mu2160_10(char *) = ^IndirectMayWriteSideEffect[1] : &:r2160_7 +# 2160| mu2160_11(double) = Store[d] : &:r2160_1, r2160_8 +# 2161| r2161_1(glval) = VariableAddress[#return] : +# 2161| r2161_2(glval) = VariableAddress[end] : +# 2161| r2161_3(char *) = Load[end] : &:r2161_2, ~m? +# 2161| mu2161_4(char *) = Store[#return] : &:r2161_1, r2161_3 +# 2158| v2158_8(void) = ReturnIndirection[s] : &:r2158_6, ~m? +# 2158| r2158_9(glval) = VariableAddress[#return] : +# 2158| v2158_10(void) = ReturnValue : &:r2158_9, ~m? +# 2158| v2158_11(void) = AliasedUse : ~m? +# 2158| v2158_12(void) = ExitFunction : + +# 2168| void call_as_child_of_ConditionDeclExpr() +# 2168| Block 0 +# 2168| v2168_1(void) = EnterFunction : +# 2168| mu2168_2(unknown) = AliasedDefinition : +# 2168| mu2168_3(unknown) = InitializeNonLocal : +# 2169| r2169_1(glval) = VariableAddress[b] : +# 2169| r2169_2(HasOperatorBool) = Constant[0] : +# 2169| mu2169_3(HasOperatorBool) = Store[b] : &:r2169_1, r2169_2 +# 2169| r2169_4(glval) = VariableAddress[b] : +# 2169| r2169_5(glval) = FunctionAddress[operator bool] : +# 2169| r2169_6(bool) = Call[operator bool] : func:r2169_5, this:r2169_4 +# 2169| mu2169_7(unknown) = ^CallSideEffect : ~m? +# 2169| v2169_8(void) = ^IndirectReadSideEffect[-1] : &:r2169_4, ~m? +# 2169| mu2169_9(HasOperatorBool) = ^IndirectMayWriteSideEffect[-1] : &:r2169_4 +# 2169| r2169_10(bool) = CopyValue : r2169_6 +# 2169| v2169_11(void) = ConditionalBranch : r2169_10 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2169| Block 1 +# 2169| v2169_12(void) = NoOp : +#-----| Goto -> Block 2 + +# 2170| Block 2 +# 2170| v2170_1(void) = NoOp : +# 2168| v2168_4(void) = ReturnVoid : +# 2168| v2168_5(void) = AliasedUse : ~m? +# 2168| v2168_6(void) = ExitFunction : + +# 2172| void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) +# 2172| Block 0 +# 2172| v2172_1(void) = EnterFunction : +# 2172| mu2172_2(unknown) = AliasedDefinition : +# 2172| mu2172_3(unknown) = InitializeNonLocal : +# 2172| r2172_4(glval) = VariableAddress[#this] : +# 2172| mu2172_5(glval) = InitializeParameter[#this] : &:r2172_4 +# 2172| r2172_6(glval) = Load[#this] : &:r2172_4, ~m? +# 2172| mu2172_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2172_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(ClassWithDestructor &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 2125| r2125_8(glval) = FieldAddress[x] : mu2125_5 -# 2125| r2125_9(glval) = VariableAddress[(unnamed parameter 0)] : -# 2125| r2125_10(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2125_9, ~m? -# 2125| r2125_11(glval) = CopyValue : r2125_10 -# 2125| r2125_12(glval) = FieldAddress[x] : r2125_11 -# 2125| r2125_13(char *) = Load[?] : &:r2125_12, ~m? -# 2125| mu2125_14(char *) = Store[?] : &:r2125_8, r2125_13 -# 2125| v2125_15(void) = NoOp : -# 2125| v2125_16(void) = ReturnIndirection[#this] : &:r2125_6, ~m? +# 2172| r2172_8(glval) = FieldAddress[x] : mu2172_5 +# 2172| r2172_9(glval) = VariableAddress[(unnamed parameter 0)] : +# 2172| r2172_10(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2172_9, ~m? +# 2172| r2172_11(glval) = CopyValue : r2172_10 +# 2172| r2172_12(glval) = FieldAddress[x] : r2172_11 +# 2172| r2172_13(char *) = Load[?] : &:r2172_12, ~m? +# 2172| mu2172_14(char *) = Store[?] : &:r2172_8, r2172_13 +# 2172| v2172_15(void) = NoOp : +# 2172| v2172_16(void) = ReturnIndirection[#this] : &:r2172_6, ~m? #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 2125| v2125_17(void) = ReturnVoid : -# 2125| v2125_18(void) = AliasedUse : ~m? -# 2125| v2125_19(void) = ExitFunction : +# 2172| v2172_17(void) = ReturnVoid : +# 2172| v2172_18(void) = AliasedUse : ~m? +# 2172| v2172_19(void) = ExitFunction : -# 2128| void ClassWithDestructor::ClassWithDestructor() -# 2128| Block 0 -# 2128| v2128_1(void) = EnterFunction : -# 2128| mu2128_2(unknown) = AliasedDefinition : -# 2128| mu2128_3(unknown) = InitializeNonLocal : -# 2128| r2128_4(glval) = VariableAddress[#this] : -# 2128| mu2128_5(glval) = InitializeParameter[#this] : &:r2128_4 -# 2128| r2128_6(glval) = Load[#this] : &:r2128_4, ~m? -# 2128| mu2128_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2128_6 -# 2128| r2128_8(glval) = FunctionAddress[operator new] : -# 2128| r2128_9(unsigned long) = Constant[1] : -# 2128| r2128_10(void *) = Call[operator new] : func:r2128_8, 0:r2128_9 -# 2128| mu2128_11(unknown) = ^CallSideEffect : ~m? -# 2128| mu2128_12(unknown) = ^InitializeDynamicAllocation : &:r2128_10 -# 2128| r2128_13(char *) = Convert : r2128_10 -# 2128| r2128_14(glval) = VariableAddress[#this] : -# 2128| r2128_15(ClassWithDestructor *) = Load[#this] : &:r2128_14, ~m? -# 2128| r2128_16(glval) = FieldAddress[x] : r2128_15 -# 2128| mu2128_17(char *) = Store[?] : &:r2128_16, r2128_13 -# 2128| v2128_18(void) = NoOp : -# 2128| v2128_19(void) = ReturnIndirection[#this] : &:r2128_6, ~m? -# 2128| v2128_20(void) = ReturnVoid : -# 2128| v2128_21(void) = AliasedUse : ~m? -# 2128| v2128_22(void) = ExitFunction : +# 2175| void ClassWithDestructor::ClassWithDestructor() +# 2175| Block 0 +# 2175| v2175_1(void) = EnterFunction : +# 2175| mu2175_2(unknown) = AliasedDefinition : +# 2175| mu2175_3(unknown) = InitializeNonLocal : +# 2175| r2175_4(glval) = VariableAddress[#this] : +# 2175| mu2175_5(glval) = InitializeParameter[#this] : &:r2175_4 +# 2175| r2175_6(glval) = Load[#this] : &:r2175_4, ~m? +# 2175| mu2175_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2175_6 +# 2175| r2175_8(glval) = FunctionAddress[operator new] : +# 2175| r2175_9(unsigned long) = Constant[1] : +# 2175| r2175_10(void *) = Call[operator new] : func:r2175_8, 0:r2175_9 +# 2175| mu2175_11(unknown) = ^CallSideEffect : ~m? +# 2175| mu2175_12(unknown) = ^InitializeDynamicAllocation : &:r2175_10 +# 2175| r2175_13(char *) = Convert : r2175_10 +# 2175| r2175_14(glval) = VariableAddress[#this] : +# 2175| r2175_15(ClassWithDestructor *) = Load[#this] : &:r2175_14, ~m? +# 2175| r2175_16(glval) = FieldAddress[x] : r2175_15 +# 2175| mu2175_17(char *) = Store[?] : &:r2175_16, r2175_13 +# 2175| v2175_18(void) = NoOp : +# 2175| v2175_19(void) = ReturnIndirection[#this] : &:r2175_6, ~m? +# 2175| v2175_20(void) = ReturnVoid : +# 2175| v2175_21(void) = AliasedUse : ~m? +# 2175| v2175_22(void) = ExitFunction : -# 2129| void ClassWithDestructor::~ClassWithDestructor() -# 2129| Block 0 -# 2129| v2129_1(void) = EnterFunction : -# 2129| mu2129_2(unknown) = AliasedDefinition : -# 2129| mu2129_3(unknown) = InitializeNonLocal : -# 2129| r2129_4(glval) = VariableAddress[#this] : -# 2129| mu2129_5(glval) = InitializeParameter[#this] : &:r2129_4 -# 2129| r2129_6(glval) = Load[#this] : &:r2129_4, ~m? -# 2129| mu2129_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2129_6 -# 2129| r2129_8(glval) = FunctionAddress[operator delete] : -# 2129| r2129_9(glval) = VariableAddress[#this] : -# 2129| r2129_10(ClassWithDestructor *) = Load[#this] : &:r2129_9, ~m? -# 2129| r2129_11(glval) = FieldAddress[x] : r2129_10 -# 2129| r2129_12(char *) = Load[?] : &:r2129_11, ~m? -# 2129| v2129_13(void) = Call[operator delete] : func:r2129_8, 0:r2129_12 -# 2129| mu2129_14(unknown) = ^CallSideEffect : ~m? -# 2129| v2129_15(void) = NoOp : -# 2129| v2129_16(void) = ReturnIndirection[#this] : &:r2129_6, ~m? -# 2129| v2129_17(void) = ReturnVoid : -# 2129| v2129_18(void) = AliasedUse : ~m? -# 2129| v2129_19(void) = ExitFunction : +# 2176| void ClassWithDestructor::~ClassWithDestructor() +# 2176| Block 0 +# 2176| v2176_1(void) = EnterFunction : +# 2176| mu2176_2(unknown) = AliasedDefinition : +# 2176| mu2176_3(unknown) = InitializeNonLocal : +# 2176| r2176_4(glval) = VariableAddress[#this] : +# 2176| mu2176_5(glval) = InitializeParameter[#this] : &:r2176_4 +# 2176| r2176_6(glval) = Load[#this] : &:r2176_4, ~m? +# 2176| mu2176_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2176_6 +# 2176| r2176_8(glval) = FunctionAddress[operator delete] : +# 2176| r2176_9(glval) = VariableAddress[#this] : +# 2176| r2176_10(ClassWithDestructor *) = Load[#this] : &:r2176_9, ~m? +# 2176| r2176_11(glval) = FieldAddress[x] : r2176_10 +# 2176| r2176_12(char *) = Load[?] : &:r2176_11, ~m? +# 2176| v2176_13(void) = Call[operator delete] : func:r2176_8, 0:r2176_12 +# 2176| mu2176_14(unknown) = ^CallSideEffect : ~m? +# 2176| v2176_15(void) = NoOp : +# 2176| v2176_16(void) = ReturnIndirection[#this] : &:r2176_6, ~m? +# 2176| v2176_17(void) = ReturnVoid : +# 2176| v2176_18(void) = AliasedUse : ~m? +# 2176| v2176_19(void) = ExitFunction : -# 2131| void ClassWithDestructor::set_x(char) -# 2131| Block 0 -# 2131| v2131_1(void) = EnterFunction : -# 2131| mu2131_2(unknown) = AliasedDefinition : -# 2131| mu2131_3(unknown) = InitializeNonLocal : -# 2131| r2131_4(glval) = VariableAddress[#this] : -# 2131| mu2131_5(glval) = InitializeParameter[#this] : &:r2131_4 -# 2131| r2131_6(glval) = Load[#this] : &:r2131_4, ~m? -# 2131| mu2131_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2131_6 -# 2131| r2131_8(glval) = VariableAddress[y] : -# 2131| mu2131_9(char) = InitializeParameter[y] : &:r2131_8 -# 2131| r2131_10(glval) = VariableAddress[y] : -# 2131| r2131_11(char) = Load[y] : &:r2131_10, ~m? -# 2131| r2131_12(glval) = VariableAddress[#this] : -# 2131| r2131_13(ClassWithDestructor *) = Load[#this] : &:r2131_12, ~m? -# 2131| r2131_14(glval) = FieldAddress[x] : r2131_13 -# 2131| r2131_15(char *) = Load[?] : &:r2131_14, ~m? -# 2131| r2131_16(glval) = CopyValue : r2131_15 -# 2131| mu2131_17(char) = Store[?] : &:r2131_16, r2131_11 -# 2131| v2131_18(void) = NoOp : -# 2131| v2131_19(void) = ReturnIndirection[#this] : &:r2131_6, ~m? -# 2131| v2131_20(void) = ReturnVoid : -# 2131| v2131_21(void) = AliasedUse : ~m? -# 2131| v2131_22(void) = ExitFunction : +# 2178| void ClassWithDestructor::set_x(char) +# 2178| Block 0 +# 2178| v2178_1(void) = EnterFunction : +# 2178| mu2178_2(unknown) = AliasedDefinition : +# 2178| mu2178_3(unknown) = InitializeNonLocal : +# 2178| r2178_4(glval) = VariableAddress[#this] : +# 2178| mu2178_5(glval) = InitializeParameter[#this] : &:r2178_4 +# 2178| r2178_6(glval) = Load[#this] : &:r2178_4, ~m? +# 2178| mu2178_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2178_6 +# 2178| r2178_8(glval) = VariableAddress[y] : +# 2178| mu2178_9(char) = InitializeParameter[y] : &:r2178_8 +# 2178| r2178_10(glval) = VariableAddress[y] : +# 2178| r2178_11(char) = Load[y] : &:r2178_10, ~m? +# 2178| r2178_12(glval) = VariableAddress[#this] : +# 2178| r2178_13(ClassWithDestructor *) = Load[#this] : &:r2178_12, ~m? +# 2178| r2178_14(glval) = FieldAddress[x] : r2178_13 +# 2178| r2178_15(char *) = Load[?] : &:r2178_14, ~m? +# 2178| r2178_16(glval) = CopyValue : r2178_15 +# 2178| mu2178_17(char) = Store[?] : &:r2178_16, r2178_11 +# 2178| v2178_18(void) = NoOp : +# 2178| v2178_19(void) = ReturnIndirection[#this] : &:r2178_6, ~m? +# 2178| v2178_20(void) = ReturnVoid : +# 2178| v2178_21(void) = AliasedUse : ~m? +# 2178| v2178_22(void) = ExitFunction : -# 2132| char ClassWithDestructor::get_x() -# 2132| Block 0 -# 2132| v2132_1(void) = EnterFunction : -# 2132| mu2132_2(unknown) = AliasedDefinition : -# 2132| mu2132_3(unknown) = InitializeNonLocal : -# 2132| r2132_4(glval) = VariableAddress[#this] : -# 2132| mu2132_5(glval) = InitializeParameter[#this] : &:r2132_4 -# 2132| r2132_6(glval) = Load[#this] : &:r2132_4, ~m? -# 2132| mu2132_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2132_6 -# 2132| r2132_8(glval) = VariableAddress[#return] : -# 2132| r2132_9(glval) = VariableAddress[#this] : -# 2132| r2132_10(ClassWithDestructor *) = Load[#this] : &:r2132_9, ~m? -# 2132| r2132_11(glval) = FieldAddress[x] : r2132_10 -# 2132| r2132_12(char *) = Load[?] : &:r2132_11, ~m? -# 2132| r2132_13(char) = Load[?] : &:r2132_12, ~m? -# 2132| mu2132_14(char) = Store[#return] : &:r2132_8, r2132_13 -# 2132| v2132_15(void) = ReturnIndirection[#this] : &:r2132_6, ~m? -# 2132| r2132_16(glval) = VariableAddress[#return] : -# 2132| v2132_17(void) = ReturnValue : &:r2132_16, ~m? -# 2132| v2132_18(void) = AliasedUse : ~m? -# 2132| v2132_19(void) = ExitFunction : - -# 2135| bool initialization_with_destructor_bool -# 2135| Block 0 -# 2135| v2135_1(void) = EnterFunction : -# 2135| mu2135_2(unknown) = AliasedDefinition : -# 2135| r2135_3(glval) = VariableAddress[initialization_with_destructor_bool] : -# 2135| r2135_4(bool) = Constant[1] : -# 2135| mu2135_5(bool) = Store[initialization_with_destructor_bool] : &:r2135_3, r2135_4 -# 2135| v2135_6(void) = ReturnVoid : -# 2135| v2135_7(void) = AliasedUse : ~m? -# 2135| v2135_8(void) = ExitFunction : - -# 2137| void initialization_with_destructor(bool, char) -# 2137| Block 0 -# 2137| v2137_1(void) = EnterFunction : -# 2137| mu2137_2(unknown) = AliasedDefinition : -# 2137| mu2137_3(unknown) = InitializeNonLocal : -# 2137| r2137_4(glval) = VariableAddress[b] : -# 2137| mu2137_5(bool) = InitializeParameter[b] : &:r2137_4 -# 2137| r2137_6(glval) = VariableAddress[c] : -# 2137| mu2137_7(char) = InitializeParameter[c] : &:r2137_6 -# 2138| r2138_1(glval) = VariableAddress[x] : -# 2138| mu2138_2(ClassWithDestructor) = Uninitialized[x] : &:r2138_1 -# 2138| r2138_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2138| v2138_4(void) = Call[ClassWithDestructor] : func:r2138_3, this:r2138_1 -# 2138| mu2138_5(unknown) = ^CallSideEffect : ~m? -# 2138| mu2138_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2138_1 -# 2138| r2138_7(glval) = VariableAddress[b] : -# 2138| r2138_8(bool) = Load[b] : &:r2138_7, ~m? -# 2138| v2138_9(void) = ConditionalBranch : r2138_8 -#-----| False -> Block 3 -#-----| True -> Block 2 - -# 2137| Block 1 -# 2137| v2137_8(void) = ReturnVoid : -# 2137| v2137_9(void) = AliasedUse : ~m? -# 2137| v2137_10(void) = ExitFunction : - -# 2139| Block 2 -# 2139| r2139_1(glval) = VariableAddress[x] : -# 2139| r2139_2(glval) = FunctionAddress[set_x] : -# 2139| r2139_3(char) = Constant[97] : -# 2139| v2139_4(void) = Call[set_x] : func:r2139_2, this:r2139_1, 0:r2139_3 -# 2139| mu2139_5(unknown) = ^CallSideEffect : ~m? -# 2139| v2139_6(void) = ^IndirectReadSideEffect[-1] : &:r2139_1, ~m? -# 2139| mu2139_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2139_1 -# 2139| r2139_8(glval) = VariableAddress[x] : -# 2139| r2139_9(glval) = FunctionAddress[~ClassWithDestructor] : -# 2139| v2139_10(void) = Call[~ClassWithDestructor] : func:r2139_9, this:r2139_8 -# 2139| mu2139_11(unknown) = ^CallSideEffect : ~m? -# 2139| v2139_12(void) = ^IndirectReadSideEffect[-1] : &:r2139_8, ~m? -# 2139| mu2139_13(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2139_8 -#-----| Goto -> Block 3 - -# 2141| Block 3 -# 2141| r2141_1(glval) = VariableAddress[x] : -# 2141| mu2141_2(ClassWithDestructor) = Uninitialized[x] : &:r2141_1 -# 2141| r2141_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2141| v2141_4(void) = Call[ClassWithDestructor] : func:r2141_3, this:r2141_1 -# 2141| mu2141_5(unknown) = ^CallSideEffect : ~m? -# 2141| mu2141_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2141_1 -# 2141| r2141_7(bool) = Constant[1] : -# 2141| v2141_8(void) = ConditionalBranch : r2141_7 -#-----| False -> Block 6 -#-----| True -> Block 4 - -# 2142| Block 4 -# 2142| r2142_1(glval) = VariableAddress[x] : -# 2142| r2142_2(glval) = FunctionAddress[set_x] : -# 2142| r2142_3(char) = Constant[97] : -# 2142| v2142_4(void) = Call[set_x] : func:r2142_2, this:r2142_1, 0:r2142_3 -# 2142| mu2142_5(unknown) = ^CallSideEffect : ~m? -# 2142| v2142_6(void) = ^IndirectReadSideEffect[-1] : &:r2142_1, ~m? -# 2142| mu2142_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2142_1 -#-----| Goto -> Block 6 - -# 2142| Block 5 -# 2142| r2142_8(glval) = VariableAddress[x] : -# 2142| r2142_9(glval) = FunctionAddress[~ClassWithDestructor] : -# 2142| v2142_10(void) = Call[~ClassWithDestructor] : func:r2142_9, this:r2142_8 -# 2142| mu2142_11(unknown) = ^CallSideEffect : ~m? -# 2142| v2142_12(void) = ^IndirectReadSideEffect[-1] : &:r2142_8, ~m? -# 2142| mu2142_13(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2142_8 -#-----| Goto -> Block 6 - -# 2144| Block 6 -# 2144| r2144_1(glval) = VariableAddress[x] : -# 2144| mu2144_2(ClassWithDestructor) = Uninitialized[x] : &:r2144_1 -# 2144| r2144_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2144| v2144_4(void) = Call[ClassWithDestructor] : func:r2144_3, this:r2144_1 -# 2144| mu2144_5(unknown) = ^CallSideEffect : ~m? -# 2144| mu2144_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2144_1 -# 2144| r2144_7(glval) = VariableAddress[c] : -# 2144| r2144_8(char) = Load[c] : &:r2144_7, ~m? -# 2144| r2144_9(int) = Convert : r2144_8 -# 2144| v2144_10(void) = Switch : r2144_9 -#-----| Case[97] -> Block 7 -#-----| Default -> Block 8 - -# 2145| Block 7 -# 2145| v2145_1(void) = NoOp : -# 2146| r2146_1(glval) = VariableAddress[x] : -# 2146| r2146_2(glval) = FunctionAddress[set_x] : -# 2146| r2146_3(char) = Constant[97] : -# 2146| v2146_4(void) = Call[set_x] : func:r2146_2, this:r2146_1, 0:r2146_3 -# 2146| mu2146_5(unknown) = ^CallSideEffect : ~m? -# 2146| v2146_6(void) = ^IndirectReadSideEffect[-1] : &:r2146_1, ~m? -# 2146| mu2146_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2146_1 -# 2147| v2147_1(void) = NoOp : -#-----| Goto -> Block 10 - -# 2148| Block 8 -# 2148| v2148_1(void) = NoOp : -# 2149| r2149_1(glval) = VariableAddress[x] : -# 2149| r2149_2(glval) = FunctionAddress[set_x] : -# 2149| r2149_3(char) = Constant[98] : -# 2149| v2149_4(void) = Call[set_x] : func:r2149_2, this:r2149_1, 0:r2149_3 -# 2149| mu2149_5(unknown) = ^CallSideEffect : ~m? -# 2149| v2149_6(void) = ^IndirectReadSideEffect[-1] : &:r2149_1, ~m? -# 2149| mu2149_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2149_1 -# 2150| v2150_1(void) = NoOp : -#-----| Goto -> Block 10 - -# 2151| Block 9 -# 2151| r2151_1(glval) = VariableAddress[x] : -# 2151| r2151_2(glval) = FunctionAddress[~ClassWithDestructor] : -# 2151| v2151_3(void) = Call[~ClassWithDestructor] : func:r2151_2, this:r2151_1 -# 2151| mu2151_4(unknown) = ^CallSideEffect : ~m? -# 2151| v2151_5(void) = ^IndirectReadSideEffect[-1] : &:r2151_1, ~m? -# 2151| mu2151_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2151_1 -#-----| Goto -> Block 10 - -# 2151| Block 10 -# 2151| v2151_7(void) = NoOp : -# 2153| r2153_1(glval) = VariableAddress[x] : -# 2153| mu2153_2(ClassWithDestructor) = Uninitialized[x] : &:r2153_1 -# 2153| r2153_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2153| v2153_4(void) = Call[ClassWithDestructor] : func:r2153_3, this:r2153_1 -# 2153| mu2153_5(unknown) = ^CallSideEffect : ~m? -# 2153| mu2153_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2153_1 -# 2154| r2154_1(glval>) = VariableAddress[ys] : -# 2154| mu2154_2(vector) = Uninitialized[ys] : &:r2154_1 -# 2154| r2154_3(glval) = FunctionAddress[vector] : -# 2154| r2154_4(glval) = VariableAddress[#temp2154:40] : -# 2154| r2154_5(glval) = VariableAddress[x] : -# 2154| r2154_6(ClassWithDestructor) = Load[x] : &:r2154_5, ~m? -# 2154| mu2154_7(ClassWithDestructor) = Store[#temp2154:40] : &:r2154_4, r2154_6 -# 2154| r2154_8(ClassWithDestructor) = Load[#temp2154:40] : &:r2154_4, ~m? -# 2154| v2154_9(void) = Call[vector] : func:r2154_3, this:r2154_1, 0:r2154_8 -# 2154| mu2154_10(unknown) = ^CallSideEffect : ~m? -# 2154| mu2154_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2154_1 -# 2154| r2154_12(glval &>) = VariableAddress[(__range)] : -# 2154| r2154_13(glval>) = VariableAddress[ys] : -# 2154| r2154_14(vector &) = CopyValue : r2154_13 -# 2154| mu2154_15(vector &) = Store[(__range)] : &:r2154_12, r2154_14 -# 2154| r2154_16(glval) = VariableAddress[(__begin)] : -# 2154| r2154_17(glval &>) = VariableAddress[(__range)] : -# 2154| r2154_18(vector &) = Load[(__range)] : &:r2154_17, ~m? -#-----| r0_1(glval>) = CopyValue : r2154_18 -#-----| r0_2(glval>) = Convert : r0_1 -# 2154| r2154_19(glval) = FunctionAddress[begin] : -# 2154| r2154_20(iterator) = Call[begin] : func:r2154_19, this:r0_2 -# 2154| mu2154_21(unknown) = ^CallSideEffect : ~m? -#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? -# 2154| mu2154_22(iterator) = Store[(__begin)] : &:r2154_16, r2154_20 -# 2154| r2154_23(glval) = VariableAddress[(__end)] : -# 2154| r2154_24(glval &>) = VariableAddress[(__range)] : -# 2154| r2154_25(vector &) = Load[(__range)] : &:r2154_24, ~m? -#-----| r0_4(glval>) = CopyValue : r2154_25 -#-----| r0_5(glval>) = Convert : r0_4 -# 2154| r2154_26(glval) = FunctionAddress[end] : -# 2154| r2154_27(iterator) = Call[end] : func:r2154_26, this:r0_5 -# 2154| mu2154_28(unknown) = ^CallSideEffect : ~m? -#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? -# 2154| mu2154_29(iterator) = Store[(__end)] : &:r2154_23, r2154_27 -#-----| Goto -> Block 11 - -# 2154| Block 11 -# 2154| r2154_30(glval) = VariableAddress[(__begin)] : -#-----| r0_7(glval) = Convert : r2154_30 -# 2154| r2154_31(glval) = FunctionAddress[operator!=] : -# 2154| r2154_32(glval) = VariableAddress[(__end)] : -# 2154| r2154_33(iterator) = Load[(__end)] : &:r2154_32, ~m? -# 2154| r2154_34(bool) = Call[operator!=] : func:r2154_31, this:r0_7, 0:r2154_33 -# 2154| mu2154_35(unknown) = ^CallSideEffect : ~m? -#-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? -# 2154| v2154_36(void) = ConditionalBranch : r2154_34 -#-----| False -> Block 14 -#-----| True -> Block 12 - -# 2154| Block 12 -# 2154| r2154_37(glval) = VariableAddress[y] : -# 2154| r2154_38(glval) = VariableAddress[(__begin)] : -#-----| r0_9(glval) = Convert : r2154_38 -# 2154| r2154_39(glval) = FunctionAddress[operator*] : -# 2154| r2154_40(ClassWithDestructor &) = Call[operator*] : func:r2154_39, this:r0_9 -# 2154| mu2154_41(unknown) = ^CallSideEffect : ~m? -#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, ~m? -# 2154| r2154_42(ClassWithDestructor) = Load[?] : &:r2154_40, ~m? -# 2154| mu2154_43(ClassWithDestructor) = Store[y] : &:r2154_37, r2154_42 -# 2155| r2155_1(glval) = VariableAddress[y] : -# 2155| r2155_2(glval) = FunctionAddress[set_x] : -# 2155| r2155_3(char) = Constant[97] : -# 2155| v2155_4(void) = Call[set_x] : func:r2155_2, this:r2155_1, 0:r2155_3 -# 2155| mu2155_5(unknown) = ^CallSideEffect : ~m? -# 2155| v2155_6(void) = ^IndirectReadSideEffect[-1] : &:r2155_1, ~m? -# 2155| mu2155_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2155_1 -# 2154| r2154_44(glval) = VariableAddress[y] : -# 2154| r2154_45(glval) = FunctionAddress[~ClassWithDestructor] : -# 2154| v2154_46(void) = Call[~ClassWithDestructor] : func:r2154_45, this:r2154_44 -# 2154| mu2154_47(unknown) = ^CallSideEffect : ~m? -# 2154| v2154_48(void) = ^IndirectReadSideEffect[-1] : &:r2154_44, ~m? -# 2154| mu2154_49(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2154_44 -# 2154| r2154_50(glval) = VariableAddress[(__begin)] : -# 2154| r2154_51(glval) = FunctionAddress[operator++] : -# 2154| r2154_52(iterator &) = Call[operator++] : func:r2154_51, this:r2154_50 -# 2154| mu2154_53(unknown) = ^CallSideEffect : ~m? -# 2154| v2154_54(void) = ^IndirectReadSideEffect[-1] : &:r2154_50, ~m? -# 2154| mu2154_55(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2154_50 -# 2154| r2154_56(glval) = CopyValue : r2154_52 -#-----| Goto (back edge) -> Block 11 - -# 2154| Block 13 -# 2154| r2154_57(glval>) = VariableAddress[ys] : -# 2154| r2154_58(glval) = FunctionAddress[~vector] : -# 2154| v2154_59(void) = Call[~vector] : func:r2154_58, this:r2154_57 -# 2154| mu2154_60(unknown) = ^CallSideEffect : ~m? -# 2154| v2154_61(void) = ^IndirectReadSideEffect[-1] : &:r2154_57, ~m? -# 2154| mu2154_62(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2154_57 -#-----| Goto -> Block 14 - -# 2157| Block 14 -# 2157| r2157_1(glval>) = VariableAddress[ys] : -# 2157| mu2157_2(vector) = Uninitialized[ys] : &:r2157_1 -# 2157| r2157_3(glval) = FunctionAddress[vector] : -# 2157| r2157_4(glval) = VariableAddress[#temp2157:40] : -# 2157| r2157_5(glval) = VariableAddress[x] : -# 2157| r2157_6(ClassWithDestructor) = Load[x] : &:r2157_5, ~m? -# 2157| mu2157_7(ClassWithDestructor) = Store[#temp2157:40] : &:r2157_4, r2157_6 -# 2157| r2157_8(ClassWithDestructor) = Load[#temp2157:40] : &:r2157_4, ~m? -# 2157| v2157_9(void) = Call[vector] : func:r2157_3, this:r2157_1, 0:r2157_8 -# 2157| mu2157_10(unknown) = ^CallSideEffect : ~m? -# 2157| mu2157_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2157_1 -# 2157| r2157_12(glval &>) = VariableAddress[(__range)] : -# 2157| r2157_13(glval>) = VariableAddress[ys] : -# 2157| r2157_14(vector &) = CopyValue : r2157_13 -# 2157| mu2157_15(vector &) = Store[(__range)] : &:r2157_12, r2157_14 -# 2157| r2157_16(glval) = VariableAddress[(__begin)] : -# 2157| r2157_17(glval &>) = VariableAddress[(__range)] : -# 2157| r2157_18(vector &) = Load[(__range)] : &:r2157_17, ~m? -#-----| r0_11(glval>) = CopyValue : r2157_18 -#-----| r0_12(glval>) = Convert : r0_11 -# 2157| r2157_19(glval) = FunctionAddress[begin] : -# 2157| r2157_20(iterator) = Call[begin] : func:r2157_19, this:r0_12 -# 2157| mu2157_21(unknown) = ^CallSideEffect : ~m? -#-----| v0_13(void) = ^IndirectReadSideEffect[-1] : &:r0_12, ~m? -# 2157| mu2157_22(iterator) = Store[(__begin)] : &:r2157_16, r2157_20 -# 2157| r2157_23(glval) = VariableAddress[(__end)] : -# 2157| r2157_24(glval &>) = VariableAddress[(__range)] : -# 2157| r2157_25(vector &) = Load[(__range)] : &:r2157_24, ~m? -#-----| r0_14(glval>) = CopyValue : r2157_25 -#-----| r0_15(glval>) = Convert : r0_14 -# 2157| r2157_26(glval) = FunctionAddress[end] : -# 2157| r2157_27(iterator) = Call[end] : func:r2157_26, this:r0_15 -# 2157| mu2157_28(unknown) = ^CallSideEffect : ~m? -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? -# 2157| mu2157_29(iterator) = Store[(__end)] : &:r2157_23, r2157_27 -#-----| Goto -> Block 15 - -# 2157| Block 15 -# 2157| r2157_30(glval) = VariableAddress[(__begin)] : -#-----| r0_17(glval) = Convert : r2157_30 -# 2157| r2157_31(glval) = FunctionAddress[operator!=] : -# 2157| r2157_32(glval) = VariableAddress[(__end)] : -# 2157| r2157_33(iterator) = Load[(__end)] : &:r2157_32, ~m? -# 2157| r2157_34(bool) = Call[operator!=] : func:r2157_31, this:r0_17, 0:r2157_33 -# 2157| mu2157_35(unknown) = ^CallSideEffect : ~m? -#-----| v0_18(void) = ^IndirectReadSideEffect[-1] : &:r0_17, ~m? -# 2157| v2157_36(void) = ConditionalBranch : r2157_34 -#-----| False -> Block 20 -#-----| True -> Block 16 - -# 2157| Block 16 -# 2157| r2157_37(glval) = VariableAddress[y] : -# 2157| r2157_38(glval) = VariableAddress[(__begin)] : -#-----| r0_19(glval) = Convert : r2157_38 -# 2157| r2157_39(glval) = FunctionAddress[operator*] : -# 2157| r2157_40(ClassWithDestructor &) = Call[operator*] : func:r2157_39, this:r0_19 -# 2157| mu2157_41(unknown) = ^CallSideEffect : ~m? -#-----| v0_20(void) = ^IndirectReadSideEffect[-1] : &:r0_19, ~m? -# 2157| r2157_42(ClassWithDestructor) = Load[?] : &:r2157_40, ~m? -# 2157| mu2157_43(ClassWithDestructor) = Store[y] : &:r2157_37, r2157_42 -# 2158| r2158_1(glval) = VariableAddress[y] : -# 2158| r2158_2(glval) = FunctionAddress[set_x] : -# 2158| r2158_3(char) = Constant[97] : -# 2158| v2158_4(void) = Call[set_x] : func:r2158_2, this:r2158_1, 0:r2158_3 -# 2158| mu2158_5(unknown) = ^CallSideEffect : ~m? -# 2158| v2158_6(void) = ^IndirectReadSideEffect[-1] : &:r2158_1, ~m? -# 2158| mu2158_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2158_1 -# 2159| r2159_1(glval) = VariableAddress[y] : -# 2159| r2159_2(glval) = FunctionAddress[get_x] : -# 2159| r2159_3(char) = Call[get_x] : func:r2159_2, this:r2159_1 -# 2159| mu2159_4(unknown) = ^CallSideEffect : ~m? -# 2159| v2159_5(void) = ^IndirectReadSideEffect[-1] : &:r2159_1, ~m? -# 2159| mu2159_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2159_1 -# 2159| r2159_7(int) = Convert : r2159_3 -# 2159| r2159_8(int) = Constant[98] : -# 2159| r2159_9(bool) = CompareEQ : r2159_7, r2159_8 -# 2159| v2159_10(void) = ConditionalBranch : r2159_9 -#-----| False -> Block 18 -#-----| True -> Block 17 - -# 2160| Block 17 -# 2160| v2160_1(void) = NoOp : -# 2157| r2157_44(glval) = VariableAddress[y] : -# 2157| r2157_45(glval) = FunctionAddress[~ClassWithDestructor] : -# 2157| v2157_46(void) = Call[~ClassWithDestructor] : func:r2157_45, this:r2157_44 -# 2157| mu2157_47(unknown) = ^CallSideEffect : ~m? -# 2157| v2157_48(void) = ^IndirectReadSideEffect[-1] : &:r2157_44, ~m? -# 2157| mu2157_49(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2157_44 -# 2157| r2157_50(glval>) = VariableAddress[ys] : -# 2157| r2157_51(glval) = FunctionAddress[~vector] : -# 2157| v2157_52(void) = Call[~vector] : func:r2157_51, this:r2157_50 -# 2157| mu2157_53(unknown) = ^CallSideEffect : ~m? -# 2157| v2157_54(void) = ^IndirectReadSideEffect[-1] : &:r2157_50, ~m? -# 2157| mu2157_55(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2157_50 -# 2172| r2172_1(glval) = VariableAddress[x] : -# 2172| r2172_2(glval) = FunctionAddress[~ClassWithDestructor] : -# 2172| v2172_3(void) = Call[~ClassWithDestructor] : func:r2172_2, this:r2172_1 -# 2172| mu2172_4(unknown) = ^CallSideEffect : ~m? -# 2172| v2172_5(void) = ^IndirectReadSideEffect[-1] : &:r2172_1, ~m? -# 2172| mu2172_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2172_1 -#-----| Goto -> Block 1 - -# 2157| Block 18 -# 2157| r2157_56(glval) = VariableAddress[y] : -# 2157| r2157_57(glval) = FunctionAddress[~ClassWithDestructor] : -# 2157| v2157_58(void) = Call[~ClassWithDestructor] : func:r2157_57, this:r2157_56 -# 2157| mu2157_59(unknown) = ^CallSideEffect : ~m? -# 2157| v2157_60(void) = ^IndirectReadSideEffect[-1] : &:r2157_56, ~m? -# 2157| mu2157_61(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2157_56 -# 2157| r2157_62(glval) = VariableAddress[(__begin)] : -# 2157| r2157_63(glval) = FunctionAddress[operator++] : -# 2157| r2157_64(iterator &) = Call[operator++] : func:r2157_63, this:r2157_62 -# 2157| mu2157_65(unknown) = ^CallSideEffect : ~m? -# 2157| v2157_66(void) = ^IndirectReadSideEffect[-1] : &:r2157_62, ~m? -# 2157| mu2157_67(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2157_62 -# 2157| r2157_68(glval) = CopyValue : r2157_64 -#-----| Goto (back edge) -> Block 15 - -# 2157| Block 19 -# 2157| r2157_69(glval>) = VariableAddress[ys] : -# 2157| r2157_70(glval) = FunctionAddress[~vector] : -# 2157| v2157_71(void) = Call[~vector] : func:r2157_70, this:r2157_69 -# 2157| mu2157_72(unknown) = ^CallSideEffect : ~m? -# 2157| v2157_73(void) = ^IndirectReadSideEffect[-1] : &:r2157_69, ~m? -# 2157| mu2157_74(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2157_69 -#-----| Goto -> Block 20 - -# 2163| Block 20 -# 2163| r2163_1(glval>) = VariableAddress[ys] : -# 2163| mu2163_2(vector) = Uninitialized[ys] : &:r2163_1 -# 2163| r2163_3(glval) = FunctionAddress[vector] : -# 2163| r2163_4(int) = Constant[1] : -# 2163| v2163_5(void) = Call[vector] : func:r2163_3, this:r2163_1, 0:r2163_4 -# 2163| mu2163_6(unknown) = ^CallSideEffect : ~m? -# 2163| mu2163_7(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2163_1 -# 2163| r2163_8(glval &>) = VariableAddress[(__range)] : -# 2163| r2163_9(glval>) = VariableAddress[ys] : -# 2163| r2163_10(vector &) = CopyValue : r2163_9 -# 2163| mu2163_11(vector &) = Store[(__range)] : &:r2163_8, r2163_10 -# 2163| r2163_12(glval) = VariableAddress[(__begin)] : -# 2163| r2163_13(glval &>) = VariableAddress[(__range)] : -# 2163| r2163_14(vector &) = Load[(__range)] : &:r2163_13, ~m? -#-----| r0_21(glval>) = CopyValue : r2163_14 -#-----| r0_22(glval>) = Convert : r0_21 -# 2163| r2163_15(glval) = FunctionAddress[begin] : -# 2163| r2163_16(iterator) = Call[begin] : func:r2163_15, this:r0_22 -# 2163| mu2163_17(unknown) = ^CallSideEffect : ~m? -#-----| v0_23(void) = ^IndirectReadSideEffect[-1] : &:r0_22, ~m? -# 2163| mu2163_18(iterator) = Store[(__begin)] : &:r2163_12, r2163_16 -# 2163| r2163_19(glval) = VariableAddress[(__end)] : -# 2163| r2163_20(glval &>) = VariableAddress[(__range)] : -# 2163| r2163_21(vector &) = Load[(__range)] : &:r2163_20, ~m? -#-----| r0_24(glval>) = CopyValue : r2163_21 -#-----| r0_25(glval>) = Convert : r0_24 -# 2163| r2163_22(glval) = FunctionAddress[end] : -# 2163| r2163_23(iterator) = Call[end] : func:r2163_22, this:r0_25 -# 2163| mu2163_24(unknown) = ^CallSideEffect : ~m? -#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_25, ~m? -# 2163| mu2163_25(iterator) = Store[(__end)] : &:r2163_19, r2163_23 -#-----| Goto -> Block 21 - -# 2163| Block 21 -# 2163| r2163_26(glval) = VariableAddress[(__begin)] : -#-----| r0_27(glval) = Convert : r2163_26 -# 2163| r2163_27(glval) = FunctionAddress[operator!=] : -# 2163| r2163_28(glval) = VariableAddress[(__end)] : -# 2163| r2163_29(iterator) = Load[(__end)] : &:r2163_28, ~m? -# 2163| r2163_30(bool) = Call[operator!=] : func:r2163_27, this:r0_27, 0:r2163_29 -# 2163| mu2163_31(unknown) = ^CallSideEffect : ~m? -#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, ~m? -# 2163| v2163_32(void) = ConditionalBranch : r2163_30 -#-----| False -> Block 26 -#-----| True -> Block 23 - -# 2163| Block 22 -# 2163| r2163_33(glval) = VariableAddress[(__begin)] : -# 2163| r2163_34(glval) = FunctionAddress[operator++] : -# 2163| r2163_35(iterator &) = Call[operator++] : func:r2163_34, this:r2163_33 -# 2163| mu2163_36(unknown) = ^CallSideEffect : ~m? -# 2163| v2163_37(void) = ^IndirectReadSideEffect[-1] : &:r2163_33, ~m? -# 2163| mu2163_38(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2163_33 -# 2163| r2163_39(glval) = CopyValue : r2163_35 -#-----| Goto (back edge) -> Block 21 - -# 2163| Block 23 -# 2163| r2163_40(glval) = VariableAddress[y] : -# 2163| r2163_41(glval) = VariableAddress[(__begin)] : -#-----| r0_29(glval) = Convert : r2163_41 -# 2163| r2163_42(glval) = FunctionAddress[operator*] : -# 2163| r2163_43(int &) = Call[operator*] : func:r2163_42, this:r0_29 -# 2163| mu2163_44(unknown) = ^CallSideEffect : ~m? -#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_29, ~m? -# 2163| r2163_45(int) = Load[?] : &:r2163_43, ~m? -# 2163| mu2163_46(int) = Store[y] : &:r2163_40, r2163_45 -# 2164| r2164_1(glval) = VariableAddress[y] : -# 2164| r2164_2(int) = Load[y] : &:r2164_1, ~m? -# 2164| r2164_3(int) = Constant[1] : -# 2164| r2164_4(bool) = CompareEQ : r2164_2, r2164_3 -# 2164| v2164_5(void) = ConditionalBranch : r2164_4 -#-----| False -> Block 22 -#-----| True -> Block 24 - -# 2165| Block 24 -# 2165| v2165_1(void) = NoOp : -# 2163| r2163_47(glval>) = VariableAddress[ys] : -# 2163| r2163_48(glval) = FunctionAddress[~vector] : -# 2163| v2163_49(void) = Call[~vector] : func:r2163_48, this:r2163_47 -# 2163| mu2163_50(unknown) = ^CallSideEffect : ~m? -# 2163| v2163_51(void) = ^IndirectReadSideEffect[-1] : &:r2163_47, ~m? -# 2163| mu2163_52(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2163_47 -# 2172| r2172_7(glval) = VariableAddress[x] : -# 2172| r2172_8(glval) = FunctionAddress[~ClassWithDestructor] : -# 2172| v2172_9(void) = Call[~ClassWithDestructor] : func:r2172_8, this:r2172_7 -# 2172| mu2172_10(unknown) = ^CallSideEffect : ~m? -# 2172| v2172_11(void) = ^IndirectReadSideEffect[-1] : &:r2172_7, ~m? -# 2172| mu2172_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2172_7 -#-----| Goto -> Block 1 - -# 2163| Block 25 -# 2163| r2163_53(glval>) = VariableAddress[ys] : -# 2163| r2163_54(glval) = FunctionAddress[~vector] : -# 2163| v2163_55(void) = Call[~vector] : func:r2163_54, this:r2163_53 -# 2163| mu2163_56(unknown) = ^CallSideEffect : ~m? -# 2163| v2163_57(void) = ^IndirectReadSideEffect[-1] : &:r2163_53, ~m? -# 2163| mu2163_58(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2163_53 -#-----| Goto -> Block 26 - -# 2168| Block 26 -# 2168| r2168_1(glval>) = VariableAddress[ys] : -# 2168| mu2168_2(vector) = Uninitialized[ys] : &:r2168_1 -# 2168| r2168_3(glval) = FunctionAddress[vector] : -# 2168| r2168_4(glval) = VariableAddress[#temp2168:40] : -# 2168| r2168_5(glval) = VariableAddress[x] : -# 2168| r2168_6(ClassWithDestructor) = Load[x] : &:r2168_5, ~m? -# 2168| mu2168_7(ClassWithDestructor) = Store[#temp2168:40] : &:r2168_4, r2168_6 -# 2168| r2168_8(ClassWithDestructor) = Load[#temp2168:40] : &:r2168_4, ~m? -# 2168| v2168_9(void) = Call[vector] : func:r2168_3, this:r2168_1, 0:r2168_8 -# 2168| mu2168_10(unknown) = ^CallSideEffect : ~m? -# 2168| mu2168_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2168_1 -# 2168| r2168_12(glval &>) = VariableAddress[(__range)] : -# 2168| r2168_13(glval>) = VariableAddress[ys] : -# 2168| r2168_14(vector &) = CopyValue : r2168_13 -# 2168| mu2168_15(vector &) = Store[(__range)] : &:r2168_12, r2168_14 -# 2168| r2168_16(glval) = VariableAddress[(__begin)] : -# 2168| r2168_17(glval &>) = VariableAddress[(__range)] : -# 2168| r2168_18(vector &) = Load[(__range)] : &:r2168_17, ~m? -#-----| r0_31(glval>) = CopyValue : r2168_18 -#-----| r0_32(glval>) = Convert : r0_31 -# 2168| r2168_19(glval) = FunctionAddress[begin] : -# 2168| r2168_20(iterator) = Call[begin] : func:r2168_19, this:r0_32 -# 2168| mu2168_21(unknown) = ^CallSideEffect : ~m? -#-----| v0_33(void) = ^IndirectReadSideEffect[-1] : &:r0_32, ~m? -# 2168| mu2168_22(iterator) = Store[(__begin)] : &:r2168_16, r2168_20 -# 2168| r2168_23(glval) = VariableAddress[(__end)] : -# 2168| r2168_24(glval &>) = VariableAddress[(__range)] : -# 2168| r2168_25(vector &) = Load[(__range)] : &:r2168_24, ~m? -#-----| r0_34(glval>) = CopyValue : r2168_25 -#-----| r0_35(glval>) = Convert : r0_34 -# 2168| r2168_26(glval) = FunctionAddress[end] : -# 2168| r2168_27(iterator) = Call[end] : func:r2168_26, this:r0_35 -# 2168| mu2168_28(unknown) = ^CallSideEffect : ~m? -#-----| v0_36(void) = ^IndirectReadSideEffect[-1] : &:r0_35, ~m? -# 2168| mu2168_29(iterator) = Store[(__end)] : &:r2168_23, r2168_27 -#-----| Goto -> Block 27 - -# 2168| Block 27 -# 2168| r2168_30(glval) = VariableAddress[(__begin)] : -#-----| r0_37(glval) = Convert : r2168_30 -# 2168| r2168_31(glval) = FunctionAddress[operator!=] : -# 2168| r2168_32(glval) = VariableAddress[(__end)] : -# 2168| r2168_33(iterator) = Load[(__end)] : &:r2168_32, ~m? -# 2168| r2168_34(bool) = Call[operator!=] : func:r2168_31, this:r0_37, 0:r2168_33 -# 2168| mu2168_35(unknown) = ^CallSideEffect : ~m? -#-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, ~m? -# 2168| v2168_36(void) = ConditionalBranch : r2168_34 -#-----| False -> Block 30 -#-----| True -> Block 28 - -# 2168| Block 28 -# 2168| r2168_37(glval) = VariableAddress[y] : -# 2168| r2168_38(glval) = VariableAddress[(__begin)] : -#-----| r0_39(glval) = Convert : r2168_38 -# 2168| r2168_39(glval) = FunctionAddress[operator*] : -# 2168| r2168_40(ClassWithDestructor &) = Call[operator*] : func:r2168_39, this:r0_39 -# 2168| mu2168_41(unknown) = ^CallSideEffect : ~m? -#-----| v0_40(void) = ^IndirectReadSideEffect[-1] : &:r0_39, ~m? -# 2168| r2168_42(ClassWithDestructor) = Load[?] : &:r2168_40, ~m? -# 2168| mu2168_43(ClassWithDestructor) = Store[y] : &:r2168_37, r2168_42 -# 2169| r2169_1(glval) = VariableAddress[z1] : -# 2169| mu2169_2(ClassWithDestructor) = Uninitialized[z1] : &:r2169_1 -# 2169| r2169_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2169| v2169_4(void) = Call[ClassWithDestructor] : func:r2169_3, this:r2169_1 -# 2169| mu2169_5(unknown) = ^CallSideEffect : ~m? -# 2169| mu2169_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2169_1 -# 2170| r2170_1(glval) = VariableAddress[z2] : -# 2170| mu2170_2(ClassWithDestructor) = Uninitialized[z2] : &:r2170_1 -# 2170| r2170_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2170| v2170_4(void) = Call[ClassWithDestructor] : func:r2170_3, this:r2170_1 -# 2170| mu2170_5(unknown) = ^CallSideEffect : ~m? -# 2170| mu2170_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2170_1 -# 2171| r2171_1(glval) = VariableAddress[z2] : -# 2171| r2171_2(glval) = FunctionAddress[~ClassWithDestructor] : -# 2171| v2171_3(void) = Call[~ClassWithDestructor] : func:r2171_2, this:r2171_1 -# 2171| mu2171_4(unknown) = ^CallSideEffect : ~m? -# 2171| v2171_5(void) = ^IndirectReadSideEffect[-1] : &:r2171_1, ~m? -# 2171| mu2171_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2171_1 -# 2171| r2171_7(glval) = VariableAddress[z1] : -# 2171| r2171_8(glval) = FunctionAddress[~ClassWithDestructor] : -# 2171| v2171_9(void) = Call[~ClassWithDestructor] : func:r2171_8, this:r2171_7 -# 2171| mu2171_10(unknown) = ^CallSideEffect : ~m? -# 2171| v2171_11(void) = ^IndirectReadSideEffect[-1] : &:r2171_7, ~m? -# 2171| mu2171_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2171_7 -# 2168| r2168_44(glval) = VariableAddress[y] : -# 2168| r2168_45(glval) = FunctionAddress[~ClassWithDestructor] : -# 2168| v2168_46(void) = Call[~ClassWithDestructor] : func:r2168_45, this:r2168_44 -# 2168| mu2168_47(unknown) = ^CallSideEffect : ~m? -# 2168| v2168_48(void) = ^IndirectReadSideEffect[-1] : &:r2168_44, ~m? -# 2168| mu2168_49(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2168_44 -# 2168| r2168_50(glval) = VariableAddress[(__begin)] : -# 2168| r2168_51(glval) = FunctionAddress[operator++] : -# 2168| r2168_52(iterator &) = Call[operator++] : func:r2168_51, this:r2168_50 -# 2168| mu2168_53(unknown) = ^CallSideEffect : ~m? -# 2168| v2168_54(void) = ^IndirectReadSideEffect[-1] : &:r2168_50, ~m? -# 2168| mu2168_55(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2168_50 -# 2168| r2168_56(glval) = CopyValue : r2168_52 -#-----| Goto (back edge) -> Block 27 - -# 2168| Block 29 -# 2168| r2168_57(glval>) = VariableAddress[ys] : -# 2168| r2168_58(glval) = FunctionAddress[~vector] : -# 2168| v2168_59(void) = Call[~vector] : func:r2168_58, this:r2168_57 -# 2168| mu2168_60(unknown) = ^CallSideEffect : ~m? -# 2168| v2168_61(void) = ^IndirectReadSideEffect[-1] : &:r2168_57, ~m? -# 2168| mu2168_62(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2168_57 -#-----| Goto -> Block 30 - -# 2172| Block 30 -# 2172| v2172_13(void) = NoOp : -# 2172| r2172_14(glval) = VariableAddress[x] : -# 2172| r2172_15(glval) = FunctionAddress[~ClassWithDestructor] : -# 2172| v2172_16(void) = Call[~ClassWithDestructor] : func:r2172_15, this:r2172_14 -# 2172| mu2172_17(unknown) = ^CallSideEffect : ~m? -# 2172| v2172_18(void) = ^IndirectReadSideEffect[-1] : &:r2172_14, ~m? -# 2172| mu2172_19(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2172_14 -#-----| Goto -> Block 1 - -# 2174| void static_variable_with_destructor_1() -# 2174| Block 0 -# 2174| v2174_1(void) = EnterFunction : -# 2174| mu2174_2(unknown) = AliasedDefinition : -# 2174| mu2174_3(unknown) = InitializeNonLocal : -# 2175| r2175_1(glval) = VariableAddress[a] : -# 2175| mu2175_2(ClassWithDestructor) = Uninitialized[a] : &:r2175_1 -# 2175| r2175_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2175| v2175_4(void) = Call[ClassWithDestructor] : func:r2175_3, this:r2175_1 -# 2175| mu2175_5(unknown) = ^CallSideEffect : ~m? -# 2175| mu2175_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2175_1 -# 2176| r2176_1(glval) = VariableAddress[b#init] : -# 2176| r2176_2(bool) = Load[b#init] : &:r2176_1, ~m? -# 2176| v2176_3(void) = ConditionalBranch : r2176_2 -#-----| False -> Block 1 -#-----| True -> Block 2 - -# 2176| Block 1 -# 2176| r2176_4(glval) = VariableAddress[b] : -#-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : -#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2176_4 -#-----| mu0_3(unknown) = ^CallSideEffect : ~m? -#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2176_4 -# 2176| r2176_5(bool) = Constant[1] : -# 2176| mu2176_6(bool) = Store[b#init] : &:r2176_1, r2176_5 -#-----| Goto -> Block 2 - -# 2177| Block 2 -# 2177| v2177_1(void) = NoOp : -# 2177| r2177_2(glval) = VariableAddress[a] : -# 2177| r2177_3(glval) = FunctionAddress[~ClassWithDestructor] : -# 2177| v2177_4(void) = Call[~ClassWithDestructor] : func:r2177_3, this:r2177_2 -# 2177| mu2177_5(unknown) = ^CallSideEffect : ~m? -# 2177| v2177_6(void) = ^IndirectReadSideEffect[-1] : &:r2177_2, ~m? -# 2177| mu2177_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2177_2 -# 2174| v2174_4(void) = ReturnVoid : -# 2174| v2174_5(void) = AliasedUse : ~m? -# 2174| v2174_6(void) = ExitFunction : - -# 2179| void static_variable_with_destructor_2() +# 2179| char ClassWithDestructor::get_x() # 2179| Block 0 -# 2179| v2179_1(void) = EnterFunction : -# 2179| mu2179_2(unknown) = AliasedDefinition : -# 2179| mu2179_3(unknown) = InitializeNonLocal : -# 2180| r2180_1(glval) = VariableAddress[a#init] : -# 2180| r2180_2(bool) = Load[a#init] : &:r2180_1, ~m? -# 2180| v2180_3(void) = ConditionalBranch : r2180_2 -#-----| False -> Block 1 -#-----| True -> Block 2 +# 2179| v2179_1(void) = EnterFunction : +# 2179| mu2179_2(unknown) = AliasedDefinition : +# 2179| mu2179_3(unknown) = InitializeNonLocal : +# 2179| r2179_4(glval) = VariableAddress[#this] : +# 2179| mu2179_5(glval) = InitializeParameter[#this] : &:r2179_4 +# 2179| r2179_6(glval) = Load[#this] : &:r2179_4, ~m? +# 2179| mu2179_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2179_6 +# 2179| r2179_8(glval) = VariableAddress[#return] : +# 2179| r2179_9(glval) = VariableAddress[#this] : +# 2179| r2179_10(ClassWithDestructor *) = Load[#this] : &:r2179_9, ~m? +# 2179| r2179_11(glval) = FieldAddress[x] : r2179_10 +# 2179| r2179_12(char *) = Load[?] : &:r2179_11, ~m? +# 2179| r2179_13(char) = Load[?] : &:r2179_12, ~m? +# 2179| mu2179_14(char) = Store[#return] : &:r2179_8, r2179_13 +# 2179| v2179_15(void) = ReturnIndirection[#this] : &:r2179_6, ~m? +# 2179| r2179_16(glval) = VariableAddress[#return] : +# 2179| v2179_17(void) = ReturnValue : &:r2179_16, ~m? +# 2179| v2179_18(void) = AliasedUse : ~m? +# 2179| v2179_19(void) = ExitFunction : -# 2180| Block 1 -# 2180| r2180_4(glval) = VariableAddress[a] : -#-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : -#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2180_4 -#-----| mu0_3(unknown) = ^CallSideEffect : ~m? -#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2180_4 -# 2180| r2180_5(bool) = Constant[1] : -# 2180| mu2180_6(bool) = Store[a#init] : &:r2180_1, r2180_5 -#-----| Goto -> Block 2 +# 2182| bool initialization_with_destructor_bool +# 2182| Block 0 +# 2182| v2182_1(void) = EnterFunction : +# 2182| mu2182_2(unknown) = AliasedDefinition : +# 2182| r2182_3(glval) = VariableAddress[initialization_with_destructor_bool] : +# 2182| r2182_4(bool) = Constant[1] : +# 2182| mu2182_5(bool) = Store[initialization_with_destructor_bool] : &:r2182_3, r2182_4 +# 2182| v2182_6(void) = ReturnVoid : +# 2182| v2182_7(void) = AliasedUse : ~m? +# 2182| v2182_8(void) = ExitFunction : -# 2181| Block 2 -# 2181| r2181_1(glval) = VariableAddress[b] : -# 2181| mu2181_2(ClassWithDestructor) = Uninitialized[b] : &:r2181_1 -# 2181| r2181_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2181| v2181_4(void) = Call[ClassWithDestructor] : func:r2181_3, this:r2181_1 -# 2181| mu2181_5(unknown) = ^CallSideEffect : ~m? -# 2181| mu2181_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2181_1 -# 2182| v2182_1(void) = NoOp : -# 2182| r2182_2(glval) = VariableAddress[b] : -# 2182| r2182_3(glval) = FunctionAddress[~ClassWithDestructor] : -# 2182| v2182_4(void) = Call[~ClassWithDestructor] : func:r2182_3, this:r2182_2 -# 2182| mu2182_5(unknown) = ^CallSideEffect : ~m? -# 2182| v2182_6(void) = ^IndirectReadSideEffect[-1] : &:r2182_2, ~m? -# 2182| mu2182_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2182_2 -# 2179| v2179_4(void) = ReturnVoid : -# 2179| v2179_5(void) = AliasedUse : ~m? -# 2179| v2179_6(void) = ExitFunction : - -# 2184| void static_variable_with_destructor_3() +# 2184| void initialization_with_destructor(bool, char) # 2184| Block 0 # 2184| v2184_1(void) = EnterFunction : # 2184| mu2184_2(unknown) = AliasedDefinition : # 2184| mu2184_3(unknown) = InitializeNonLocal : -# 2185| r2185_1(glval) = VariableAddress[a] : -# 2185| mu2185_2(ClassWithDestructor) = Uninitialized[a] : &:r2185_1 +# 2184| r2184_4(glval) = VariableAddress[b] : +# 2184| mu2184_5(bool) = InitializeParameter[b] : &:r2184_4 +# 2184| r2184_6(glval) = VariableAddress[c] : +# 2184| mu2184_7(char) = InitializeParameter[c] : &:r2184_6 +# 2185| r2185_1(glval) = VariableAddress[x] : +# 2185| mu2185_2(ClassWithDestructor) = Uninitialized[x] : &:r2185_1 # 2185| r2185_3(glval) = FunctionAddress[ClassWithDestructor] : # 2185| v2185_4(void) = Call[ClassWithDestructor] : func:r2185_3, this:r2185_1 # 2185| mu2185_5(unknown) = ^CallSideEffect : ~m? # 2185| mu2185_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2185_1 -# 2186| r2186_1(glval) = VariableAddress[b] : -# 2186| mu2186_2(ClassWithDestructor) = Uninitialized[b] : &:r2186_1 -# 2186| r2186_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2186| v2186_4(void) = Call[ClassWithDestructor] : func:r2186_3, this:r2186_1 -# 2186| mu2186_5(unknown) = ^CallSideEffect : ~m? -# 2186| mu2186_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2186_1 -# 2187| r2187_1(glval) = VariableAddress[c#init] : -# 2187| r2187_2(bool) = Load[c#init] : &:r2187_1, ~m? -# 2187| v2187_3(void) = ConditionalBranch : r2187_2 -#-----| False -> Block 1 -#-----| True -> Block 2 - -# 2187| Block 1 -# 2187| r2187_4(glval) = VariableAddress[c] : -#-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : -#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2187_4 -#-----| mu0_3(unknown) = ^CallSideEffect : ~m? -#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2187_4 -# 2187| r2187_5(bool) = Constant[1] : -# 2187| mu2187_6(bool) = Store[c#init] : &:r2187_1, r2187_5 -#-----| Goto -> Block 2 - -# 2188| Block 2 -# 2188| v2188_1(void) = NoOp : -# 2188| r2188_2(glval) = VariableAddress[b] : -# 2188| r2188_3(glval) = FunctionAddress[~ClassWithDestructor] : -# 2188| v2188_4(void) = Call[~ClassWithDestructor] : func:r2188_3, this:r2188_2 -# 2188| mu2188_5(unknown) = ^CallSideEffect : ~m? -# 2188| v2188_6(void) = ^IndirectReadSideEffect[-1] : &:r2188_2, ~m? -# 2188| mu2188_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2188_2 -# 2188| r2188_8(glval) = VariableAddress[a] : -# 2188| r2188_9(glval) = FunctionAddress[~ClassWithDestructor] : -# 2188| v2188_10(void) = Call[~ClassWithDestructor] : func:r2188_9, this:r2188_8 -# 2188| mu2188_11(unknown) = ^CallSideEffect : ~m? -# 2188| v2188_12(void) = ^IndirectReadSideEffect[-1] : &:r2188_8, ~m? -# 2188| mu2188_13(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2188_8 -# 2184| v2184_4(void) = ReturnVoid : -# 2184| v2184_5(void) = AliasedUse : ~m? -# 2184| v2184_6(void) = ExitFunction : - -# 2190| ClassWithDestructor global_class_with_destructor -# 2190| Block 0 -# 2190| v2190_1(void) = EnterFunction : -# 2190| mu2190_2(unknown) = AliasedDefinition : -# 2190| r2190_3(glval) = VariableAddress[global_class_with_destructor] : -# 2190| r2190_4(glval) = FunctionAddress[ClassWithDestructor] : -# 2190| v2190_5(void) = Call[ClassWithDestructor] : func:r2190_4, this:r2190_3 -# 2190| mu2190_6(unknown) = ^CallSideEffect : ~m? -# 2190| mu2190_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2190_3 -# 2190| v2190_8(void) = ReturnVoid : -# 2190| v2190_9(void) = AliasedUse : ~m? -# 2190| v2190_10(void) = ExitFunction : - -# 2194| ClassWithDestructor& vacuous_destructor_call::get(ClassWithDestructor&) -# 2194| Block 0 -# 2194| v2194_1(void) = EnterFunction : -# 2194| mu2194_2(unknown) = AliasedDefinition : -# 2194| mu2194_3(unknown) = InitializeNonLocal : -# 2194| r2194_4(glval) = VariableAddress[t] : -# 2194| mu2194_5(ClassWithDestructor &) = InitializeParameter[t] : &:r2194_4 -# 2194| r2194_6(ClassWithDestructor &) = Load[t] : &:r2194_4, ~m? -# 2194| mu2194_7(unknown) = InitializeIndirection[t] : &:r2194_6 -# 2194| r2194_8(glval) = VariableAddress[#return] : -# 2194| r2194_9(glval) = VariableAddress[t] : -# 2194| r2194_10(ClassWithDestructor &) = Load[t] : &:r2194_9, ~m? -# 2194| r2194_11(glval) = CopyValue : r2194_10 -# 2194| r2194_12(ClassWithDestructor &) = CopyValue : r2194_11 -# 2194| mu2194_13(ClassWithDestructor &) = Store[#return] : &:r2194_8, r2194_12 -# 2194| v2194_14(void) = ReturnIndirection[t] : &:r2194_6, ~m? -# 2194| r2194_15(glval) = VariableAddress[#return] : -# 2194| v2194_16(void) = ReturnValue : &:r2194_15, ~m? -# 2194| v2194_17(void) = AliasedUse : ~m? -# 2194| v2194_18(void) = ExitFunction : - -# 2194| int& vacuous_destructor_call::get(int&) -# 2194| Block 0 -# 2194| v2194_1(void) = EnterFunction : -# 2194| mu2194_2(unknown) = AliasedDefinition : -# 2194| mu2194_3(unknown) = InitializeNonLocal : -# 2194| r2194_4(glval) = VariableAddress[t] : -# 2194| mu2194_5(int &) = InitializeParameter[t] : &:r2194_4 -# 2194| r2194_6(int &) = Load[t] : &:r2194_4, ~m? -# 2194| mu2194_7(unknown) = InitializeIndirection[t] : &:r2194_6 -# 2194| r2194_8(glval) = VariableAddress[#return] : -# 2194| r2194_9(glval) = VariableAddress[t] : -# 2194| r2194_10(int &) = Load[t] : &:r2194_9, ~m? -# 2194| r2194_11(glval) = CopyValue : r2194_10 -# 2194| r2194_12(int &) = CopyValue : r2194_11 -# 2194| mu2194_13(int &) = Store[#return] : &:r2194_8, r2194_12 -# 2194| v2194_14(void) = ReturnIndirection[t] : &:r2194_6, ~m? -# 2194| r2194_15(glval) = VariableAddress[#return] : -# 2194| v2194_16(void) = ReturnValue : &:r2194_15, ~m? -# 2194| v2194_17(void) = AliasedUse : ~m? -# 2194| v2194_18(void) = ExitFunction : - -# 2197| void vacuous_destructor_call::call_destructor(ClassWithDestructor&) -# 2197| Block 0 -# 2197| v2197_1(void) = EnterFunction : -# 2197| mu2197_2(unknown) = AliasedDefinition : -# 2197| mu2197_3(unknown) = InitializeNonLocal : -# 2197| r2197_4(glval) = VariableAddress[t] : -# 2197| mu2197_5(ClassWithDestructor &) = InitializeParameter[t] : &:r2197_4 -# 2197| r2197_6(ClassWithDestructor &) = Load[t] : &:r2197_4, ~m? -# 2197| mu2197_7(unknown) = InitializeIndirection[t] : &:r2197_6 -# 2198| r2198_1(glval) = FunctionAddress[get] : -# 2198| r2198_2(glval) = VariableAddress[t] : -# 2198| r2198_3(ClassWithDestructor &) = Load[t] : &:r2198_2, ~m? -# 2198| r2198_4(glval) = CopyValue : r2198_3 -# 2198| r2198_5(ClassWithDestructor &) = CopyValue : r2198_4 -# 2198| r2198_6(ClassWithDestructor &) = Call[get] : func:r2198_1, 0:r2198_5 -# 2198| mu2198_7(unknown) = ^CallSideEffect : ~m? -# 2198| v2198_8(void) = ^BufferReadSideEffect[0] : &:r2198_5, ~m? -# 2198| mu2198_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r2198_5 -# 2198| r2198_10(glval) = CopyValue : r2198_6 -# 2198| r2198_11(glval) = FunctionAddress[~ClassWithDestructor] : -# 2198| v2198_12(void) = Call[~ClassWithDestructor] : func:r2198_11 -# 2198| mu2198_13(unknown) = ^CallSideEffect : ~m? -# 2198| v2198_14(void) = ^IndirectReadSideEffect[-1] : &:r2198_10, ~m? -# 2198| mu2198_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2198_10 -# 2199| v2199_1(void) = NoOp : -# 2197| v2197_8(void) = ReturnIndirection[t] : &:r2197_6, ~m? -# 2197| v2197_9(void) = ReturnVoid : -# 2197| v2197_10(void) = AliasedUse : ~m? -# 2197| v2197_11(void) = ExitFunction : - -# 2197| void vacuous_destructor_call::call_destructor(int&) -# 2197| Block 0 -# 2197| v2197_1(void) = EnterFunction : -# 2197| mu2197_2(unknown) = AliasedDefinition : -# 2197| mu2197_3(unknown) = InitializeNonLocal : -# 2197| r2197_4(glval) = VariableAddress[t] : -# 2197| mu2197_5(int &) = InitializeParameter[t] : &:r2197_4 -# 2197| r2197_6(int &) = Load[t] : &:r2197_4, ~m? -# 2197| mu2197_7(unknown) = InitializeIndirection[t] : &:r2197_6 -# 2198| r2198_1(glval) = FunctionAddress[get] : -# 2198| r2198_2(glval) = VariableAddress[t] : -# 2198| r2198_3(int &) = Load[t] : &:r2198_2, ~m? -# 2198| r2198_4(glval) = CopyValue : r2198_3 -# 2198| r2198_5(int &) = CopyValue : r2198_4 -# 2198| r2198_6(int &) = Call[get] : func:r2198_1, 0:r2198_5 -# 2198| mu2198_7(unknown) = ^CallSideEffect : ~m? -# 2198| v2198_8(void) = ^BufferReadSideEffect[0] : &:r2198_5, ~m? -# 2198| mu2198_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r2198_5 -# 2198| r2198_10(glval) = CopyValue : r2198_6 -# 2199| v2199_1(void) = NoOp : -# 2197| v2197_8(void) = ReturnIndirection[t] : &:r2197_6, ~m? -# 2197| v2197_9(void) = ReturnVoid : -# 2197| v2197_10(void) = AliasedUse : ~m? -# 2197| v2197_11(void) = ExitFunction : - -# 2201| void vacuous_destructor_call::non_vacuous_destructor_call() -# 2201| Block 0 -# 2201| v2201_1(void) = EnterFunction : -# 2201| mu2201_2(unknown) = AliasedDefinition : -# 2201| mu2201_3(unknown) = InitializeNonLocal : -# 2202| r2202_1(glval) = VariableAddress[c] : -# 2202| mu2202_2(ClassWithDestructor) = Uninitialized[c] : &:r2202_1 -# 2202| r2202_3(glval) = FunctionAddress[ClassWithDestructor] : -# 2202| v2202_4(void) = Call[ClassWithDestructor] : func:r2202_3, this:r2202_1 -# 2202| mu2202_5(unknown) = ^CallSideEffect : ~m? -# 2202| mu2202_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2202_1 -# 2203| r2203_1(glval) = FunctionAddress[call_destructor] : -# 2203| r2203_2(glval) = VariableAddress[c] : -# 2203| r2203_3(ClassWithDestructor &) = CopyValue : r2203_2 -# 2203| v2203_4(void) = Call[call_destructor] : func:r2203_1, 0:r2203_3 -# 2203| mu2203_5(unknown) = ^CallSideEffect : ~m? -# 2203| v2203_6(void) = ^BufferReadSideEffect[0] : &:r2203_3, ~m? -# 2203| mu2203_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r2203_3 -# 2204| v2204_1(void) = NoOp : -# 2204| r2204_2(glval) = VariableAddress[c] : -# 2204| r2204_3(glval) = FunctionAddress[~ClassWithDestructor] : -# 2204| v2204_4(void) = Call[~ClassWithDestructor] : func:r2204_3, this:r2204_2 -# 2204| mu2204_5(unknown) = ^CallSideEffect : ~m? -# 2204| v2204_6(void) = ^IndirectReadSideEffect[-1] : &:r2204_2, ~m? -# 2204| mu2204_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2204_2 -# 2201| v2201_4(void) = ReturnVoid : -# 2201| v2201_5(void) = AliasedUse : ~m? -# 2201| v2201_6(void) = ExitFunction : - -# 2206| void vacuous_destructor_call::vacuous_destructor_call() -# 2206| Block 0 -# 2206| v2206_1(void) = EnterFunction : -# 2206| mu2206_2(unknown) = AliasedDefinition : -# 2206| mu2206_3(unknown) = InitializeNonLocal : -# 2207| r2207_1(glval) = VariableAddress[i] : -# 2207| mu2207_2(int) = Uninitialized[i] : &:r2207_1 -# 2208| r2208_1(glval) = FunctionAddress[call_destructor] : -# 2208| r2208_2(glval) = VariableAddress[i] : -# 2208| r2208_3(int &) = CopyValue : r2208_2 -# 2208| v2208_4(void) = Call[call_destructor] : func:r2208_1, 0:r2208_3 -# 2208| mu2208_5(unknown) = ^CallSideEffect : ~m? -# 2208| v2208_6(void) = ^BufferReadSideEffect[0] : &:r2208_3, ~m? -# 2208| mu2208_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r2208_3 -# 2209| v2209_1(void) = NoOp : -# 2206| v2206_4(void) = ReturnVoid : -# 2206| v2206_5(void) = AliasedUse : ~m? -# 2206| v2206_6(void) = ExitFunction : - -# 2212| void TryCatchDestructors(bool) -# 2212| Block 0 -# 2212| v2212_1(void) = EnterFunction : -# 2212| mu2212_2(unknown) = AliasedDefinition : -# 2212| mu2212_3(unknown) = InitializeNonLocal : -# 2212| r2212_4(glval) = VariableAddress[b] : -# 2212| mu2212_5(bool) = InitializeParameter[b] : &:r2212_4 -# 2214| r2214_1(glval) = VariableAddress[s] : -# 2214| mu2214_2(String) = Uninitialized[s] : &:r2214_1 -# 2214| r2214_3(glval) = FunctionAddress[String] : -# 2214| v2214_4(void) = Call[String] : func:r2214_3, this:r2214_1 -# 2214| mu2214_5(unknown) = ^CallSideEffect : ~m? -# 2214| mu2214_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2214_1 -# 2215| r2215_1(glval) = VariableAddress[b] : -# 2215| r2215_2(bool) = Load[b] : &:r2215_1, ~m? -# 2215| v2215_3(void) = ConditionalBranch : r2215_2 -#-----| False -> Block 5 -#-----| True -> Block 3 - -# 2212| Block 1 -# 2212| v2212_6(void) = AliasedUse : ~m? -# 2212| v2212_7(void) = ExitFunction : - -# 2212| Block 2 -# 2212| v2212_8(void) = Unwind : -#-----| Goto -> Block 1 - -# 2216| Block 3 -# 2216| r2216_1(glval) = VariableAddress[#throw2216:7] : -# 2216| r2216_2(glval) = StringConstant["string literal"] : -# 2216| r2216_3(char *) = Convert : r2216_2 -# 2216| mu2216_4(char *) = Store[#throw2216:7] : &:r2216_1, r2216_3 -# 2216| v2216_5(void) = ThrowValue : &:r2216_1, ~m? -#-----| Exception -> Block 6 - -# 2219| Block 4 -# 2219| r2219_1(glval) = VariableAddress[s] : -# 2219| r2219_2(glval) = FunctionAddress[~String] : -# 2219| v2219_3(void) = Call[~String] : func:r2219_2, this:r2219_1 -# 2219| mu2219_4(unknown) = ^CallSideEffect : ~m? -# 2219| v2219_5(void) = ^IndirectReadSideEffect[-1] : &:r2219_1, ~m? -# 2219| mu2219_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2219_1 -#-----| Goto -> Block 5 - -# 2218| Block 5 -# 2218| r2218_1(glval) = VariableAddress[s2] : -# 2218| mu2218_2(String) = Uninitialized[s2] : &:r2218_1 -# 2218| r2218_3(glval) = FunctionAddress[String] : -# 2218| v2218_4(void) = Call[String] : func:r2218_3, this:r2218_1 -# 2218| mu2218_5(unknown) = ^CallSideEffect : ~m? -# 2218| mu2218_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2218_1 -# 2219| r2219_7(glval) = VariableAddress[s2] : -# 2219| r2219_8(glval) = FunctionAddress[~String] : -# 2219| v2219_9(void) = Call[~String] : func:r2219_8, this:r2219_7 -# 2219| mu2219_10(unknown) = ^CallSideEffect : ~m? -# 2219| v2219_11(void) = ^IndirectReadSideEffect[-1] : &:r2219_7, ~m? -# 2219| mu2219_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2219_7 -# 2219| r2219_13(glval) = VariableAddress[s] : -# 2219| r2219_14(glval) = FunctionAddress[~String] : -# 2219| v2219_15(void) = Call[~String] : func:r2219_14, this:r2219_13 -# 2219| mu2219_16(unknown) = ^CallSideEffect : ~m? -# 2219| v2219_17(void) = ^IndirectReadSideEffect[-1] : &:r2219_13, ~m? -# 2219| mu2219_18(String) = ^IndirectMayWriteSideEffect[-1] : &:r2219_13 -#-----| Goto -> Block 11 - -# 2220| Block 6 -# 2220| v2220_1(void) = CatchByType[const char *] : -#-----| Exception -> Block 8 -#-----| Goto -> Block 7 - -# 2220| Block 7 -# 2220| r2220_2(glval) = VariableAddress[s] : -# 2220| mu2220_3(char *) = InitializeParameter[s] : &:r2220_2 -# 2220| r2220_4(char *) = Load[s] : &:r2220_2, ~m? -# 2220| mu2220_5(unknown) = InitializeIndirection[s] : &:r2220_4 -# 2221| r2221_1(glval) = VariableAddress[#throw2221:5] : -# 2221| mu2221_2(String) = Uninitialized[#throw2221:5] : &:r2221_1 -# 2221| r2221_3(glval) = FunctionAddress[String] : -# 2221| r2221_4(glval) = VariableAddress[s] : -# 2221| r2221_5(char *) = Load[s] : &:r2221_4, ~m? -# 2221| v2221_6(void) = Call[String] : func:r2221_3, this:r2221_1, 0:r2221_5 -# 2221| mu2221_7(unknown) = ^CallSideEffect : ~m? -# 2221| v2221_8(void) = ^BufferReadSideEffect[0] : &:r2221_5, ~m? -# 2221| mu2221_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2221_1 -# 2221| v2221_10(void) = ThrowValue : &:r2221_1, ~m? -#-----| Exception -> Block 2 - -# 2223| Block 8 -# 2223| v2223_1(void) = CatchByType[const String &] : -#-----| Exception -> Block 10 -#-----| Goto -> Block 9 - -# 2223| Block 9 -# 2223| r2223_2(glval) = VariableAddress[e] : -# 2223| mu2223_3(String &) = InitializeParameter[e] : &:r2223_2 -# 2223| r2223_4(String &) = Load[e] : &:r2223_2, ~m? -# 2223| mu2223_5(unknown) = InitializeIndirection[e] : &:r2223_4 -# 2223| v2223_6(void) = NoOp : -#-----| Goto -> Block 11 - -# 2225| Block 10 -# 2225| v2225_1(void) = CatchAny : -# 2226| v2226_1(void) = ReThrow : -#-----| Exception -> Block 2 - -# 2228| Block 11 -# 2228| v2228_1(void) = NoOp : -# 2212| v2212_9(void) = ReturnVoid : -#-----| Goto -> Block 1 - -# 2230| void IfDestructors(bool) -# 2230| Block 0 -# 2230| v2230_1(void) = EnterFunction : -# 2230| mu2230_2(unknown) = AliasedDefinition : -# 2230| mu2230_3(unknown) = InitializeNonLocal : -# 2230| r2230_4(glval) = VariableAddress[b] : -# 2230| mu2230_5(bool) = InitializeParameter[b] : &:r2230_4 -# 2231| r2231_1(glval) = VariableAddress[s1] : -# 2231| mu2231_2(String) = Uninitialized[s1] : &:r2231_1 -# 2231| r2231_3(glval) = FunctionAddress[String] : -# 2231| v2231_4(void) = Call[String] : func:r2231_3, this:r2231_1 -# 2231| mu2231_5(unknown) = ^CallSideEffect : ~m? -# 2231| mu2231_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2231_1 -# 2232| r2232_1(glval) = VariableAddress[b] : -# 2232| r2232_2(bool) = Load[b] : &:r2232_1, ~m? -# 2232| v2232_3(void) = ConditionalBranch : r2232_2 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 2233| Block 1 -# 2233| r2233_1(glval) = VariableAddress[s2] : -# 2233| mu2233_2(String) = Uninitialized[s2] : &:r2233_1 -# 2233| r2233_3(glval) = FunctionAddress[String] : -# 2233| v2233_4(void) = Call[String] : func:r2233_3, this:r2233_1 -# 2233| mu2233_5(unknown) = ^CallSideEffect : ~m? -# 2233| mu2233_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2233_1 -# 2234| r2234_1(glval) = VariableAddress[s2] : -# 2234| r2234_2(glval) = FunctionAddress[~String] : -# 2234| v2234_3(void) = Call[~String] : func:r2234_2, this:r2234_1 -# 2234| mu2234_4(unknown) = ^CallSideEffect : ~m? -# 2234| v2234_5(void) = ^IndirectReadSideEffect[-1] : &:r2234_1, ~m? -# 2234| mu2234_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2234_1 -#-----| Goto -> Block 3 - -# 2235| Block 2 -# 2235| r2235_1(glval) = VariableAddress[s3] : -# 2235| mu2235_2(String) = Uninitialized[s3] : &:r2235_1 -# 2235| r2235_3(glval) = FunctionAddress[String] : -# 2235| v2235_4(void) = Call[String] : func:r2235_3, this:r2235_1 -# 2235| mu2235_5(unknown) = ^CallSideEffect : ~m? -# 2235| mu2235_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2235_1 -# 2236| r2236_1(glval) = VariableAddress[s3] : -# 2236| r2236_2(glval) = FunctionAddress[~String] : -# 2236| v2236_3(void) = Call[~String] : func:r2236_2, this:r2236_1 -# 2236| mu2236_4(unknown) = ^CallSideEffect : ~m? -# 2236| v2236_5(void) = ^IndirectReadSideEffect[-1] : &:r2236_1, ~m? -# 2236| mu2236_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2236_1 -#-----| Goto -> Block 3 - -# 2237| Block 3 -# 2237| r2237_1(glval) = VariableAddress[s4] : -# 2237| mu2237_2(String) = Uninitialized[s4] : &:r2237_1 -# 2237| r2237_3(glval) = FunctionAddress[String] : -# 2237| v2237_4(void) = Call[String] : func:r2237_3, this:r2237_1 -# 2237| mu2237_5(unknown) = ^CallSideEffect : ~m? -# 2237| mu2237_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2237_1 -# 2238| v2238_1(void) = NoOp : -# 2238| r2238_2(glval) = VariableAddress[s4] : -# 2238| r2238_3(glval) = FunctionAddress[~String] : -# 2238| v2238_4(void) = Call[~String] : func:r2238_3, this:r2238_2 -# 2238| mu2238_5(unknown) = ^CallSideEffect : ~m? -# 2238| v2238_6(void) = ^IndirectReadSideEffect[-1] : &:r2238_2, ~m? -# 2238| mu2238_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2238_2 -# 2238| r2238_8(glval) = VariableAddress[s1] : -# 2238| r2238_9(glval) = FunctionAddress[~String] : -# 2238| v2238_10(void) = Call[~String] : func:r2238_9, this:r2238_8 -# 2238| mu2238_11(unknown) = ^CallSideEffect : ~m? -# 2238| v2238_12(void) = ^IndirectReadSideEffect[-1] : &:r2238_8, ~m? -# 2238| mu2238_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r2238_8 -# 2230| v2230_6(void) = ReturnVoid : -# 2230| v2230_7(void) = AliasedUse : ~m? -# 2230| v2230_8(void) = ExitFunction : - -# 2240| void ForDestructors() -# 2240| Block 0 -# 2240| v2240_1(void) = EnterFunction : -# 2240| mu2240_2(unknown) = AliasedDefinition : -# 2240| mu2240_3(unknown) = InitializeNonLocal : -# 2241| r2241_1(glval) = VariableAddress[c] : -# 2241| r2241_2(char) = Constant[97] : -# 2241| mu2241_3(char) = Store[c] : &:r2241_1, r2241_2 -# 2242| r2242_1(glval) = VariableAddress[s] : -# 2242| mu2242_2(String) = Uninitialized[s] : &:r2242_1 -# 2242| r2242_3(glval) = FunctionAddress[String] : -# 2242| r2242_4(glval) = StringConstant["hello"] : -# 2242| r2242_5(char *) = Convert : r2242_4 -# 2242| v2242_6(void) = Call[String] : func:r2242_3, this:r2242_1, 0:r2242_5 -# 2242| mu2242_7(unknown) = ^CallSideEffect : ~m? -# 2242| v2242_8(void) = ^BufferReadSideEffect[0] : &:r2242_5, ~m? -# 2242| mu2242_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2242_1 -#-----| Goto -> Block 1 - -# 2242| Block 1 -# 2242| r2242_10(glval) = VariableAddress[c] : -# 2242| r2242_11(char) = Load[c] : &:r2242_10, ~m? -# 2242| r2242_12(int) = Convert : r2242_11 -# 2242| r2242_13(int) = Constant[0] : -# 2242| r2242_14(bool) = CompareNE : r2242_12, r2242_13 -# 2242| v2242_15(void) = ConditionalBranch : r2242_14 +# 2185| r2185_7(glval) = VariableAddress[b] : +# 2185| r2185_8(bool) = Load[b] : &:r2185_7, ~m? +# 2185| v2185_9(void) = ConditionalBranch : r2185_8 #-----| False -> Block 3 #-----| True -> Block 2 -# 2243| Block 2 -# 2243| r2243_1(glval) = VariableAddress[s2] : -# 2243| mu2243_2(String) = Uninitialized[s2] : &:r2243_1 -# 2243| r2243_3(glval) = FunctionAddress[String] : -# 2243| v2243_4(void) = Call[String] : func:r2243_3, this:r2243_1 -# 2243| mu2243_5(unknown) = ^CallSideEffect : ~m? -# 2243| mu2243_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2243_1 -# 2244| r2244_1(glval) = VariableAddress[s2] : -# 2244| r2244_2(glval) = FunctionAddress[~String] : -# 2244| v2244_3(void) = Call[~String] : func:r2244_2, this:r2244_1 -# 2244| mu2244_4(unknown) = ^CallSideEffect : ~m? -# 2244| v2244_5(void) = ^IndirectReadSideEffect[-1] : &:r2244_1, ~m? -# 2244| mu2244_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2244_1 -# 2242| r2242_16(glval) = VariableAddress[s] : -# 2242| r2242_17(glval) = FunctionAddress[pop_back] : -# 2242| r2242_18(char) = Call[pop_back] : func:r2242_17, this:r2242_16 -# 2242| mu2242_19(unknown) = ^CallSideEffect : ~m? -# 2242| v2242_20(void) = ^IndirectReadSideEffect[-1] : &:r2242_16, ~m? -# 2242| mu2242_21(String) = ^IndirectMayWriteSideEffect[-1] : &:r2242_16 -# 2242| r2242_22(glval) = VariableAddress[c] : -# 2242| mu2242_23(char) = Store[c] : &:r2242_22, r2242_18 -#-----| Goto (back edge) -> Block 1 +# 2184| Block 1 +# 2184| v2184_8(void) = ReturnVoid : +# 2184| v2184_9(void) = AliasedUse : ~m? +# 2184| v2184_10(void) = ExitFunction : -# 2242| Block 3 -# 2242| r2242_24(glval) = VariableAddress[s] : -# 2242| r2242_25(glval) = FunctionAddress[~String] : -# 2242| v2242_26(void) = Call[~String] : func:r2242_25, this:r2242_24 -# 2242| mu2242_27(unknown) = ^CallSideEffect : ~m? -# 2242| v2242_28(void) = ^IndirectReadSideEffect[-1] : &:r2242_24, ~m? -# 2242| mu2242_29(String) = ^IndirectMayWriteSideEffect[-1] : &:r2242_24 -# 2246| r2246_1(glval &&>) = VariableAddress[(__range)] : -# 2246| r2246_2(glval>) = VariableAddress[#temp2246:20] : -# 2246| mu2246_3(vector) = Uninitialized[#temp2246:20] : &:r2246_2 -# 2246| r2246_4(glval) = FunctionAddress[vector] : -# 2246| r2246_5(glval) = VariableAddress[#temp2246:35] : -# 2246| mu2246_6(String) = Uninitialized[#temp2246:35] : &:r2246_5 -# 2246| r2246_7(glval) = FunctionAddress[String] : -# 2246| r2246_8(glval) = StringConstant["hello"] : -# 2246| r2246_9(char *) = Convert : r2246_8 -# 2246| v2246_10(void) = Call[String] : func:r2246_7, this:r2246_5, 0:r2246_9 -# 2246| mu2246_11(unknown) = ^CallSideEffect : ~m? -# 2246| v2246_12(void) = ^BufferReadSideEffect[0] : &:r2246_9, ~m? -# 2246| mu2246_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r2246_5 -# 2246| r2246_14(String) = Load[#temp2246:35] : &:r2246_5, ~m? -# 2246| v2246_15(void) = Call[vector] : func:r2246_4, this:r2246_2, 0:r2246_14 -# 2246| mu2246_16(unknown) = ^CallSideEffect : ~m? -# 2246| mu2246_17(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2246_2 -# 2246| r2246_18(vector &) = CopyValue : r2246_2 -# 2246| mu2246_19(vector &&) = Store[(__range)] : &:r2246_1, r2246_18 -# 2246| r2246_20(glval) = VariableAddress[(__begin)] : -# 2246| r2246_21(glval &&>) = VariableAddress[(__range)] : -# 2246| r2246_22(vector &&) = Load[(__range)] : &:r2246_21, ~m? -#-----| r0_1(glval>) = CopyValue : r2246_22 -#-----| r0_2(glval>) = Convert : r0_1 -# 2246| r2246_23(glval) = FunctionAddress[begin] : -# 2246| r2246_24(iterator) = Call[begin] : func:r2246_23, this:r0_2 -# 2246| mu2246_25(unknown) = ^CallSideEffect : ~m? -#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? -# 2246| mu2246_26(iterator) = Store[(__begin)] : &:r2246_20, r2246_24 -# 2246| r2246_27(glval) = VariableAddress[(__end)] : -# 2246| r2246_28(glval &&>) = VariableAddress[(__range)] : -# 2246| r2246_29(vector &&) = Load[(__range)] : &:r2246_28, ~m? -#-----| r0_4(glval>) = CopyValue : r2246_29 -#-----| r0_5(glval>) = Convert : r0_4 -# 2246| r2246_30(glval) = FunctionAddress[end] : -# 2246| r2246_31(iterator) = Call[end] : func:r2246_30, this:r0_5 -# 2246| mu2246_32(unknown) = ^CallSideEffect : ~m? -#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? -# 2246| mu2246_33(iterator) = Store[(__end)] : &:r2246_27, r2246_31 -#-----| Goto -> Block 4 - -# 2246| Block 4 -# 2246| r2246_34(glval) = VariableAddress[(__begin)] : -#-----| r0_7(glval) = Convert : r2246_34 -# 2246| r2246_35(glval) = FunctionAddress[operator!=] : -# 2246| r2246_36(glval) = VariableAddress[(__end)] : -# 2246| r2246_37(iterator) = Load[(__end)] : &:r2246_36, ~m? -# 2246| r2246_38(bool) = Call[operator!=] : func:r2246_35, this:r0_7, 0:r2246_37 -# 2246| mu2246_39(unknown) = ^CallSideEffect : ~m? -#-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? -# 2246| v2246_40(void) = ConditionalBranch : r2246_38 -#-----| False -> Block 6 -#-----| True -> Block 5 - -# 2246| Block 5 -# 2246| r2246_41(glval) = VariableAddress[s] : -# 2246| mu2246_42(String) = Uninitialized[s] : &:r2246_41 -# 2246| r2246_43(glval) = FunctionAddress[String] : -# 2246| r2246_44(glval) = VariableAddress[(__begin)] : -#-----| r0_9(glval) = Convert : r2246_44 -# 2246| r2246_45(glval) = FunctionAddress[operator*] : -# 2246| r2246_46(String &) = Call[operator*] : func:r2246_45, this:r0_9 -# 2246| mu2246_47(unknown) = ^CallSideEffect : ~m? -#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, ~m? -# 2246| r2246_48(glval) = CopyValue : r2246_46 -# 2246| r2246_49(glval) = Convert : r2246_48 -# 2246| r2246_50(String &) = CopyValue : r2246_49 -# 2246| v2246_51(void) = Call[String] : func:r2246_43, this:r2246_41, 0:r2246_50 -# 2246| mu2246_52(unknown) = ^CallSideEffect : ~m? -# 2246| v2246_53(void) = ^BufferReadSideEffect[0] : &:r2246_50, ~m? -# 2246| mu2246_54(String) = ^IndirectMayWriteSideEffect[-1] : &:r2246_41 -# 2247| r2247_1(glval) = VariableAddress[s2] : -# 2247| mu2247_2(String) = Uninitialized[s2] : &:r2247_1 -# 2247| r2247_3(glval) = FunctionAddress[String] : -# 2247| v2247_4(void) = Call[String] : func:r2247_3, this:r2247_1 -# 2247| mu2247_5(unknown) = ^CallSideEffect : ~m? -# 2247| mu2247_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2247_1 -# 2248| r2248_1(glval) = VariableAddress[s2] : -# 2248| r2248_2(glval) = FunctionAddress[~String] : -# 2248| v2248_3(void) = Call[~String] : func:r2248_2, this:r2248_1 -# 2248| mu2248_4(unknown) = ^CallSideEffect : ~m? -# 2248| v2248_5(void) = ^IndirectReadSideEffect[-1] : &:r2248_1, ~m? -# 2248| mu2248_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2248_1 -# 2246| r2246_55(glval) = VariableAddress[s] : -# 2246| r2246_56(glval) = FunctionAddress[~String] : -# 2246| v2246_57(void) = Call[~String] : func:r2246_56, this:r2246_55 -# 2246| mu2246_58(unknown) = ^CallSideEffect : ~m? -# 2246| v2246_59(void) = ^IndirectReadSideEffect[-1] : &:r2246_55, ~m? -# 2246| mu2246_60(String) = ^IndirectMayWriteSideEffect[-1] : &:r2246_55 -# 2246| r2246_61(glval) = VariableAddress[(__begin)] : -# 2246| r2246_62(glval) = FunctionAddress[operator++] : -# 2246| r2246_63(iterator &) = Call[operator++] : func:r2246_62, this:r2246_61 -# 2246| mu2246_64(unknown) = ^CallSideEffect : ~m? -# 2246| v2246_65(void) = ^IndirectReadSideEffect[-1] : &:r2246_61, ~m? -# 2246| mu2246_66(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2246_61 -# 2246| r2246_67(glval) = CopyValue : r2246_63 -#-----| Goto (back edge) -> Block 4 - -# 2250| Block 6 -# 2250| r2250_1(glval) = VariableAddress[s] : -# 2250| mu2250_2(String) = Uninitialized[s] : &:r2250_1 -# 2250| r2250_3(glval) = FunctionAddress[String] : -# 2250| r2250_4(glval) = StringConstant["hello"] : -# 2250| r2250_5(char *) = Convert : r2250_4 -# 2250| v2250_6(void) = Call[String] : func:r2250_3, this:r2250_1, 0:r2250_5 -# 2250| mu2250_7(unknown) = ^CallSideEffect : ~m? -# 2250| v2250_8(void) = ^BufferReadSideEffect[0] : &:r2250_5, ~m? -# 2250| mu2250_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2250_1 -# 2250| r2250_10(glval) = VariableAddress[s2] : -# 2250| mu2250_11(String) = Uninitialized[s2] : &:r2250_10 -# 2250| r2250_12(glval) = FunctionAddress[String] : -# 2250| r2250_13(glval) = StringConstant["world"] : -# 2250| r2250_14(char *) = Convert : r2250_13 -# 2250| v2250_15(void) = Call[String] : func:r2250_12, this:r2250_10, 0:r2250_14 -# 2250| mu2250_16(unknown) = ^CallSideEffect : ~m? -# 2250| v2250_17(void) = ^BufferReadSideEffect[0] : &:r2250_14, ~m? -# 2250| mu2250_18(String) = ^IndirectMayWriteSideEffect[-1] : &:r2250_10 -#-----| Goto -> Block 7 - -# 2250| Block 7 -# 2250| r2250_19(glval) = VariableAddress[c] : -# 2250| r2250_20(char) = Load[c] : &:r2250_19, ~m? -# 2250| r2250_21(int) = Convert : r2250_20 -# 2250| r2250_22(int) = Constant[0] : -# 2250| r2250_23(bool) = CompareNE : r2250_21, r2250_22 -# 2250| v2250_24(void) = ConditionalBranch : r2250_23 -#-----| False -> Block 9 -#-----| True -> Block 8 - -# 2251| Block 8 -# 2251| r2251_1(char) = Constant[0] : -# 2251| r2251_2(glval) = VariableAddress[c] : -# 2251| mu2251_3(char) = Store[c] : &:r2251_2, r2251_1 -# 2250| r2250_25(glval) = VariableAddress[s] : -# 2250| r2250_26(glval) = FunctionAddress[pop_back] : -# 2250| r2250_27(char) = Call[pop_back] : func:r2250_26, this:r2250_25 -# 2250| mu2250_28(unknown) = ^CallSideEffect : ~m? -# 2250| v2250_29(void) = ^IndirectReadSideEffect[-1] : &:r2250_25, ~m? -# 2250| mu2250_30(String) = ^IndirectMayWriteSideEffect[-1] : &:r2250_25 -# 2250| r2250_31(glval) = VariableAddress[c] : -# 2250| mu2250_32(char) = Store[c] : &:r2250_31, r2250_27 -#-----| Goto (back edge) -> Block 7 - -# 2250| Block 9 -# 2250| r2250_33(glval) = VariableAddress[s2] : -# 2250| r2250_34(glval) = FunctionAddress[~String] : -# 2250| v2250_35(void) = Call[~String] : func:r2250_34, this:r2250_33 -# 2250| mu2250_36(unknown) = ^CallSideEffect : ~m? -# 2250| v2250_37(void) = ^IndirectReadSideEffect[-1] : &:r2250_33, ~m? -# 2250| mu2250_38(String) = ^IndirectMayWriteSideEffect[-1] : &:r2250_33 -# 2250| r2250_39(glval) = VariableAddress[s] : -# 2250| r2250_40(glval) = FunctionAddress[~String] : -# 2250| v2250_41(void) = Call[~String] : func:r2250_40, this:r2250_39 -# 2250| mu2250_42(unknown) = ^CallSideEffect : ~m? -# 2250| v2250_43(void) = ^IndirectReadSideEffect[-1] : &:r2250_39, ~m? -# 2250| mu2250_44(String) = ^IndirectMayWriteSideEffect[-1] : &:r2250_39 -# 2253| v2253_1(void) = NoOp : -# 2240| v2240_4(void) = ReturnVoid : -# 2240| v2240_5(void) = AliasedUse : ~m? -# 2240| v2240_6(void) = ExitFunction : - -# 2255| void IfDestructors2(bool) -# 2255| Block 0 -# 2255| v2255_1(void) = EnterFunction : -# 2255| mu2255_2(unknown) = AliasedDefinition : -# 2255| mu2255_3(unknown) = InitializeNonLocal : -# 2255| r2255_4(glval) = VariableAddress[b] : -# 2255| mu2255_5(bool) = InitializeParameter[b] : &:r2255_4 -# 2256| r2256_1(glval) = VariableAddress[s] : -# 2256| mu2256_2(String) = Uninitialized[s] : &:r2256_1 -# 2256| r2256_3(glval) = FunctionAddress[String] : -# 2256| r2256_4(glval) = StringConstant["hello"] : -# 2256| r2256_5(char *) = Convert : r2256_4 -# 2256| v2256_6(void) = Call[String] : func:r2256_3, this:r2256_1, 0:r2256_5 -# 2256| mu2256_7(unknown) = ^CallSideEffect : ~m? -# 2256| v2256_8(void) = ^BufferReadSideEffect[0] : &:r2256_5, ~m? -# 2256| mu2256_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2256_1 -# 2256| r2256_10(glval) = VariableAddress[b] : -# 2256| r2256_11(bool) = Load[b] : &:r2256_10, ~m? -# 2256| v2256_12(void) = ConditionalBranch : r2256_11 -#-----| False -> Block 2 -#-----| True -> Block 1 - -# 2257| Block 1 -# 2257| r2257_1(glval) = VariableAddress[x] : -# 2257| r2257_2(int) = Constant[0] : -# 2257| mu2257_3(int) = Store[x] : &:r2257_1, r2257_2 +# 2186| Block 2 +# 2186| r2186_1(glval) = VariableAddress[x] : +# 2186| r2186_2(glval) = FunctionAddress[set_x] : +# 2186| r2186_3(char) = Constant[97] : +# 2186| v2186_4(void) = Call[set_x] : func:r2186_2, this:r2186_1, 0:r2186_3 +# 2186| mu2186_5(unknown) = ^CallSideEffect : ~m? +# 2186| v2186_6(void) = ^IndirectReadSideEffect[-1] : &:r2186_1, ~m? +# 2186| mu2186_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2186_1 +# 2186| r2186_8(glval) = VariableAddress[x] : +# 2186| r2186_9(glval) = FunctionAddress[~ClassWithDestructor] : +# 2186| v2186_10(void) = Call[~ClassWithDestructor] : func:r2186_9, this:r2186_8 +# 2186| mu2186_11(unknown) = ^CallSideEffect : ~m? +# 2186| v2186_12(void) = ^IndirectReadSideEffect[-1] : &:r2186_8, ~m? +# 2186| mu2186_13(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2186_8 #-----| Goto -> Block 3 +# 2188| Block 3 +# 2188| r2188_1(glval) = VariableAddress[x] : +# 2188| mu2188_2(ClassWithDestructor) = Uninitialized[x] : &:r2188_1 +# 2188| r2188_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2188| v2188_4(void) = Call[ClassWithDestructor] : func:r2188_3, this:r2188_1 +# 2188| mu2188_5(unknown) = ^CallSideEffect : ~m? +# 2188| mu2188_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2188_1 +# 2188| r2188_7(bool) = Constant[1] : +# 2188| v2188_8(void) = ConditionalBranch : r2188_7 +#-----| False -> Block 6 +#-----| True -> Block 4 + +# 2189| Block 4 +# 2189| r2189_1(glval) = VariableAddress[x] : +# 2189| r2189_2(glval) = FunctionAddress[set_x] : +# 2189| r2189_3(char) = Constant[97] : +# 2189| v2189_4(void) = Call[set_x] : func:r2189_2, this:r2189_1, 0:r2189_3 +# 2189| mu2189_5(unknown) = ^CallSideEffect : ~m? +# 2189| v2189_6(void) = ^IndirectReadSideEffect[-1] : &:r2189_1, ~m? +# 2189| mu2189_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2189_1 +#-----| Goto -> Block 6 + +# 2189| Block 5 +# 2189| r2189_8(glval) = VariableAddress[x] : +# 2189| r2189_9(glval) = FunctionAddress[~ClassWithDestructor] : +# 2189| v2189_10(void) = Call[~ClassWithDestructor] : func:r2189_9, this:r2189_8 +# 2189| mu2189_11(unknown) = ^CallSideEffect : ~m? +# 2189| v2189_12(void) = ^IndirectReadSideEffect[-1] : &:r2189_8, ~m? +# 2189| mu2189_13(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2189_8 +#-----| Goto -> Block 6 + +# 2191| Block 6 +# 2191| r2191_1(glval) = VariableAddress[x] : +# 2191| mu2191_2(ClassWithDestructor) = Uninitialized[x] : &:r2191_1 +# 2191| r2191_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2191| v2191_4(void) = Call[ClassWithDestructor] : func:r2191_3, this:r2191_1 +# 2191| mu2191_5(unknown) = ^CallSideEffect : ~m? +# 2191| mu2191_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2191_1 +# 2191| r2191_7(glval) = VariableAddress[c] : +# 2191| r2191_8(char) = Load[c] : &:r2191_7, ~m? +# 2191| r2191_9(int) = Convert : r2191_8 +# 2191| v2191_10(void) = Switch : r2191_9 +#-----| Case[97] -> Block 7 +#-----| Default -> Block 8 + +# 2192| Block 7 +# 2192| v2192_1(void) = NoOp : +# 2193| r2193_1(glval) = VariableAddress[x] : +# 2193| r2193_2(glval) = FunctionAddress[set_x] : +# 2193| r2193_3(char) = Constant[97] : +# 2193| v2193_4(void) = Call[set_x] : func:r2193_2, this:r2193_1, 0:r2193_3 +# 2193| mu2193_5(unknown) = ^CallSideEffect : ~m? +# 2193| v2193_6(void) = ^IndirectReadSideEffect[-1] : &:r2193_1, ~m? +# 2193| mu2193_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2193_1 +# 2194| v2194_1(void) = NoOp : +#-----| Goto -> Block 10 + +# 2195| Block 8 +# 2195| v2195_1(void) = NoOp : +# 2196| r2196_1(glval) = VariableAddress[x] : +# 2196| r2196_2(glval) = FunctionAddress[set_x] : +# 2196| r2196_3(char) = Constant[98] : +# 2196| v2196_4(void) = Call[set_x] : func:r2196_2, this:r2196_1, 0:r2196_3 +# 2196| mu2196_5(unknown) = ^CallSideEffect : ~m? +# 2196| v2196_6(void) = ^IndirectReadSideEffect[-1] : &:r2196_1, ~m? +# 2196| mu2196_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2196_1 +# 2197| v2197_1(void) = NoOp : +#-----| Goto -> Block 10 + +# 2198| Block 9 +# 2198| r2198_1(glval) = VariableAddress[x] : +# 2198| r2198_2(glval) = FunctionAddress[~ClassWithDestructor] : +# 2198| v2198_3(void) = Call[~ClassWithDestructor] : func:r2198_2, this:r2198_1 +# 2198| mu2198_4(unknown) = ^CallSideEffect : ~m? +# 2198| v2198_5(void) = ^IndirectReadSideEffect[-1] : &:r2198_1, ~m? +# 2198| mu2198_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2198_1 +#-----| Goto -> Block 10 + +# 2198| Block 10 +# 2198| v2198_7(void) = NoOp : +# 2200| r2200_1(glval) = VariableAddress[x] : +# 2200| mu2200_2(ClassWithDestructor) = Uninitialized[x] : &:r2200_1 +# 2200| r2200_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2200| v2200_4(void) = Call[ClassWithDestructor] : func:r2200_3, this:r2200_1 +# 2200| mu2200_5(unknown) = ^CallSideEffect : ~m? +# 2200| mu2200_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2200_1 +# 2201| r2201_1(glval>) = VariableAddress[ys] : +# 2201| mu2201_2(vector) = Uninitialized[ys] : &:r2201_1 +# 2201| r2201_3(glval) = FunctionAddress[vector] : +# 2201| r2201_4(glval) = VariableAddress[#temp2201:45] : +# 2201| r2201_5(glval) = VariableAddress[x] : +# 2201| r2201_6(ClassWithDestructor) = Load[x] : &:r2201_5, ~m? +# 2201| mu2201_7(ClassWithDestructor) = Store[#temp2201:45] : &:r2201_4, r2201_6 +# 2201| r2201_8(ClassWithDestructor) = Load[#temp2201:45] : &:r2201_4, ~m? +# 2201| v2201_9(void) = Call[vector] : func:r2201_3, this:r2201_1, 0:r2201_8 +# 2201| mu2201_10(unknown) = ^CallSideEffect : ~m? +# 2201| mu2201_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2201_1 +# 2201| r2201_12(glval &>) = VariableAddress[(__range)] : +# 2201| r2201_13(glval>) = VariableAddress[ys] : +# 2201| r2201_14(vector &) = CopyValue : r2201_13 +# 2201| mu2201_15(vector &) = Store[(__range)] : &:r2201_12, r2201_14 +# 2201| r2201_16(glval>) = VariableAddress[(__begin)] : +# 2201| r2201_17(glval &>) = VariableAddress[(__range)] : +# 2201| r2201_18(vector &) = Load[(__range)] : &:r2201_17, ~m? +#-----| r0_1(glval>) = CopyValue : r2201_18 +#-----| r0_2(glval>) = Convert : r0_1 +# 2201| r2201_19(glval) = FunctionAddress[begin] : +# 2201| r2201_20(iterator) = Call[begin] : func:r2201_19, this:r0_2 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? +# 2201| mu2201_21(iterator) = Store[(__begin)] : &:r2201_16, r2201_20 +# 2201| r2201_22(glval>) = VariableAddress[(__end)] : +# 2201| r2201_23(glval &>) = VariableAddress[(__range)] : +# 2201| r2201_24(vector &) = Load[(__range)] : &:r2201_23, ~m? +#-----| r0_4(glval>) = CopyValue : r2201_24 +#-----| r0_5(glval>) = Convert : r0_4 +# 2201| r2201_25(glval) = FunctionAddress[end] : +# 2201| r2201_26(iterator) = Call[end] : func:r2201_25, this:r0_5 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? +# 2201| mu2201_27(iterator) = Store[(__end)] : &:r2201_22, r2201_26 +#-----| Goto -> Block 11 + +# 2201| Block 11 +# 2201| r2201_28(glval>) = VariableAddress[(__begin)] : +#-----| r0_7(glval>) = Convert : r2201_28 +# 2201| r2201_29(glval) = FunctionAddress[operator!=] : +#-----| r0_8(glval>) = VariableAddress[#temp0:0] : +#-----| mu0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 +# 2201| r2201_30(glval) = FunctionAddress[iterator] : +# 2201| r2201_31(glval>) = VariableAddress[(__end)] : +#-----| r0_10(glval>) = Convert : r2201_31 +#-----| r0_11(iterator &) = CopyValue : r0_10 +# 2201| v2201_32(void) = Call[iterator] : func:r2201_30, this:r0_8, 0:r0_11 +# 2201| mu2201_33(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m? +# 2201| mu2201_34(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, ~m? +# 2201| r2201_35(bool) = Call[operator!=] : func:r2201_29, this:r0_7, 0:r0_13 +# 2201| mu2201_36(unknown) = ^CallSideEffect : ~m? +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? +# 2201| v2201_37(void) = ConditionalBranch : r2201_35 +#-----| False -> Block 14 +#-----| True -> Block 12 + +# 2201| Block 12 +# 2201| r2201_38(glval) = VariableAddress[y] : +# 2201| r2201_39(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2201_39 +# 2201| r2201_40(glval) = FunctionAddress[operator*] : +# 2201| r2201_41(ClassWithDestructor &) = Call[operator*] : func:r2201_40, this:r0_15 +# 2201| mu2201_42(unknown) = ^CallSideEffect : ~m? +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? +# 2201| r2201_43(ClassWithDestructor) = Load[?] : &:r2201_41, ~m? +# 2201| mu2201_44(ClassWithDestructor) = Store[y] : &:r2201_38, r2201_43 +# 2202| r2202_1(glval) = VariableAddress[y] : +# 2202| r2202_2(glval) = FunctionAddress[set_x] : +# 2202| r2202_3(char) = Constant[97] : +# 2202| v2202_4(void) = Call[set_x] : func:r2202_2, this:r2202_1, 0:r2202_3 +# 2202| mu2202_5(unknown) = ^CallSideEffect : ~m? +# 2202| v2202_6(void) = ^IndirectReadSideEffect[-1] : &:r2202_1, ~m? +# 2202| mu2202_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2202_1 +# 2201| r2201_45(glval) = VariableAddress[y] : +# 2201| r2201_46(glval) = FunctionAddress[~ClassWithDestructor] : +# 2201| v2201_47(void) = Call[~ClassWithDestructor] : func:r2201_46, this:r2201_45 +# 2201| mu2201_48(unknown) = ^CallSideEffect : ~m? +# 2201| v2201_49(void) = ^IndirectReadSideEffect[-1] : &:r2201_45, ~m? +# 2201| mu2201_50(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2201_45 +# 2201| r2201_51(glval>) = VariableAddress[(__begin)] : +# 2201| r2201_52(glval) = FunctionAddress[operator++] : +# 2201| r2201_53(iterator &) = Call[operator++] : func:r2201_52, this:r2201_51 +# 2201| mu2201_54(unknown) = ^CallSideEffect : ~m? +# 2201| v2201_55(void) = ^IndirectReadSideEffect[-1] : &:r2201_51, ~m? +# 2201| mu2201_56(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2201_51 +# 2201| r2201_57(glval>) = CopyValue : r2201_53 +#-----| Goto (back edge) -> Block 11 + +# 2201| Block 13 +# 2201| r2201_58(glval>) = VariableAddress[ys] : +# 2201| r2201_59(glval) = FunctionAddress[~vector] : +# 2201| v2201_60(void) = Call[~vector] : func:r2201_59, this:r2201_58 +# 2201| mu2201_61(unknown) = ^CallSideEffect : ~m? +# 2201| v2201_62(void) = ^IndirectReadSideEffect[-1] : &:r2201_58, ~m? +# 2201| mu2201_63(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2201_58 +#-----| Goto -> Block 14 + +# 2204| Block 14 +# 2204| r2204_1(glval>) = VariableAddress[ys] : +# 2204| mu2204_2(vector) = Uninitialized[ys] : &:r2204_1 +# 2204| r2204_3(glval) = FunctionAddress[vector] : +# 2204| r2204_4(glval) = VariableAddress[#temp2204:45] : +# 2204| r2204_5(glval) = VariableAddress[x] : +# 2204| r2204_6(ClassWithDestructor) = Load[x] : &:r2204_5, ~m? +# 2204| mu2204_7(ClassWithDestructor) = Store[#temp2204:45] : &:r2204_4, r2204_6 +# 2204| r2204_8(ClassWithDestructor) = Load[#temp2204:45] : &:r2204_4, ~m? +# 2204| v2204_9(void) = Call[vector] : func:r2204_3, this:r2204_1, 0:r2204_8 +# 2204| mu2204_10(unknown) = ^CallSideEffect : ~m? +# 2204| mu2204_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2204_1 +# 2204| r2204_12(glval &>) = VariableAddress[(__range)] : +# 2204| r2204_13(glval>) = VariableAddress[ys] : +# 2204| r2204_14(vector &) = CopyValue : r2204_13 +# 2204| mu2204_15(vector &) = Store[(__range)] : &:r2204_12, r2204_14 +# 2204| r2204_16(glval>) = VariableAddress[(__begin)] : +# 2204| r2204_17(glval &>) = VariableAddress[(__range)] : +# 2204| r2204_18(vector &) = Load[(__range)] : &:r2204_17, ~m? +#-----| r0_17(glval>) = CopyValue : r2204_18 +#-----| r0_18(glval>) = Convert : r0_17 +# 2204| r2204_19(glval) = FunctionAddress[begin] : +# 2204| r2204_20(iterator) = Call[begin] : func:r2204_19, this:r0_18 +#-----| v0_19(void) = ^IndirectReadSideEffect[-1] : &:r0_18, ~m? +# 2204| mu2204_21(iterator) = Store[(__begin)] : &:r2204_16, r2204_20 +# 2204| r2204_22(glval>) = VariableAddress[(__end)] : +# 2204| r2204_23(glval &>) = VariableAddress[(__range)] : +# 2204| r2204_24(vector &) = Load[(__range)] : &:r2204_23, ~m? +#-----| r0_20(glval>) = CopyValue : r2204_24 +#-----| r0_21(glval>) = Convert : r0_20 +# 2204| r2204_25(glval) = FunctionAddress[end] : +# 2204| r2204_26(iterator) = Call[end] : func:r2204_25, this:r0_21 +#-----| v0_22(void) = ^IndirectReadSideEffect[-1] : &:r0_21, ~m? +# 2204| mu2204_27(iterator) = Store[(__end)] : &:r2204_22, r2204_26 +#-----| Goto -> Block 15 + +# 2204| Block 15 +# 2204| r2204_28(glval>) = VariableAddress[(__begin)] : +#-----| r0_23(glval>) = Convert : r2204_28 +# 2204| r2204_29(glval) = FunctionAddress[operator!=] : +#-----| r0_24(glval>) = VariableAddress[#temp0:0] : +#-----| mu0_25(iterator) = Uninitialized[#temp0:0] : &:r0_24 +# 2204| r2204_30(glval) = FunctionAddress[iterator] : +# 2204| r2204_31(glval>) = VariableAddress[(__end)] : +#-----| r0_26(glval>) = Convert : r2204_31 +#-----| r0_27(iterator &) = CopyValue : r0_26 +# 2204| v2204_32(void) = Call[iterator] : func:r2204_30, this:r0_24, 0:r0_27 +# 2204| mu2204_33(unknown) = ^CallSideEffect : ~m? +#-----| v0_28(void) = ^BufferReadSideEffect[0] : &:r0_27, ~m? +# 2204| mu2204_34(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_24 +#-----| r0_29(iterator) = Load[#temp0:0] : &:r0_24, ~m? +# 2204| r2204_35(bool) = Call[operator!=] : func:r2204_29, this:r0_23, 0:r0_29 +# 2204| mu2204_36(unknown) = ^CallSideEffect : ~m? +#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_23, ~m? +# 2204| v2204_37(void) = ConditionalBranch : r2204_35 +#-----| False -> Block 20 +#-----| True -> Block 16 + +# 2204| Block 16 +# 2204| r2204_38(glval) = VariableAddress[y] : +# 2204| r2204_39(glval>) = VariableAddress[(__begin)] : +#-----| r0_31(glval>) = Convert : r2204_39 +# 2204| r2204_40(glval) = FunctionAddress[operator*] : +# 2204| r2204_41(ClassWithDestructor &) = Call[operator*] : func:r2204_40, this:r0_31 +# 2204| mu2204_42(unknown) = ^CallSideEffect : ~m? +#-----| v0_32(void) = ^IndirectReadSideEffect[-1] : &:r0_31, ~m? +# 2204| r2204_43(ClassWithDestructor) = Load[?] : &:r2204_41, ~m? +# 2204| mu2204_44(ClassWithDestructor) = Store[y] : &:r2204_38, r2204_43 +# 2205| r2205_1(glval) = VariableAddress[y] : +# 2205| r2205_2(glval) = FunctionAddress[set_x] : +# 2205| r2205_3(char) = Constant[97] : +# 2205| v2205_4(void) = Call[set_x] : func:r2205_2, this:r2205_1, 0:r2205_3 +# 2205| mu2205_5(unknown) = ^CallSideEffect : ~m? +# 2205| v2205_6(void) = ^IndirectReadSideEffect[-1] : &:r2205_1, ~m? +# 2205| mu2205_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2205_1 +# 2206| r2206_1(glval) = VariableAddress[y] : +# 2206| r2206_2(glval) = FunctionAddress[get_x] : +# 2206| r2206_3(char) = Call[get_x] : func:r2206_2, this:r2206_1 +# 2206| mu2206_4(unknown) = ^CallSideEffect : ~m? +# 2206| v2206_5(void) = ^IndirectReadSideEffect[-1] : &:r2206_1, ~m? +# 2206| mu2206_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2206_1 +# 2206| r2206_7(int) = Convert : r2206_3 +# 2206| r2206_8(int) = Constant[98] : +# 2206| r2206_9(bool) = CompareEQ : r2206_7, r2206_8 +# 2206| v2206_10(void) = ConditionalBranch : r2206_9 +#-----| False -> Block 18 +#-----| True -> Block 17 + +# 2207| Block 17 +# 2207| v2207_1(void) = NoOp : +# 2204| r2204_45(glval) = VariableAddress[y] : +# 2204| r2204_46(glval) = FunctionAddress[~ClassWithDestructor] : +# 2204| v2204_47(void) = Call[~ClassWithDestructor] : func:r2204_46, this:r2204_45 +# 2204| mu2204_48(unknown) = ^CallSideEffect : ~m? +# 2204| v2204_49(void) = ^IndirectReadSideEffect[-1] : &:r2204_45, ~m? +# 2204| mu2204_50(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2204_45 +# 2204| r2204_51(glval>) = VariableAddress[ys] : +# 2204| r2204_52(glval) = FunctionAddress[~vector] : +# 2204| v2204_53(void) = Call[~vector] : func:r2204_52, this:r2204_51 +# 2204| mu2204_54(unknown) = ^CallSideEffect : ~m? +# 2204| v2204_55(void) = ^IndirectReadSideEffect[-1] : &:r2204_51, ~m? +# 2204| mu2204_56(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2204_51 +# 2219| r2219_1(glval) = VariableAddress[x] : +# 2219| r2219_2(glval) = FunctionAddress[~ClassWithDestructor] : +# 2219| v2219_3(void) = Call[~ClassWithDestructor] : func:r2219_2, this:r2219_1 +# 2219| mu2219_4(unknown) = ^CallSideEffect : ~m? +# 2219| v2219_5(void) = ^IndirectReadSideEffect[-1] : &:r2219_1, ~m? +# 2219| mu2219_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_1 +#-----| Goto -> Block 1 + +# 2204| Block 18 +# 2204| r2204_57(glval) = VariableAddress[y] : +# 2204| r2204_58(glval) = FunctionAddress[~ClassWithDestructor] : +# 2204| v2204_59(void) = Call[~ClassWithDestructor] : func:r2204_58, this:r2204_57 +# 2204| mu2204_60(unknown) = ^CallSideEffect : ~m? +# 2204| v2204_61(void) = ^IndirectReadSideEffect[-1] : &:r2204_57, ~m? +# 2204| mu2204_62(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2204_57 +# 2204| r2204_63(glval>) = VariableAddress[(__begin)] : +# 2204| r2204_64(glval) = FunctionAddress[operator++] : +# 2204| r2204_65(iterator &) = Call[operator++] : func:r2204_64, this:r2204_63 +# 2204| mu2204_66(unknown) = ^CallSideEffect : ~m? +# 2204| v2204_67(void) = ^IndirectReadSideEffect[-1] : &:r2204_63, ~m? +# 2204| mu2204_68(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2204_63 +# 2204| r2204_69(glval>) = CopyValue : r2204_65 +#-----| Goto (back edge) -> Block 15 + +# 2204| Block 19 +# 2204| r2204_70(glval>) = VariableAddress[ys] : +# 2204| r2204_71(glval) = FunctionAddress[~vector] : +# 2204| v2204_72(void) = Call[~vector] : func:r2204_71, this:r2204_70 +# 2204| mu2204_73(unknown) = ^CallSideEffect : ~m? +# 2204| v2204_74(void) = ^IndirectReadSideEffect[-1] : &:r2204_70, ~m? +# 2204| mu2204_75(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2204_70 +#-----| Goto -> Block 20 + +# 2210| Block 20 +# 2210| r2210_1(glval>) = VariableAddress[ys] : +# 2210| mu2210_2(vector) = Uninitialized[ys] : &:r2210_1 +# 2210| r2210_3(glval) = FunctionAddress[vector] : +# 2210| r2210_4(int) = Constant[1] : +# 2210| v2210_5(void) = Call[vector] : func:r2210_3, this:r2210_1, 0:r2210_4 +# 2210| mu2210_6(unknown) = ^CallSideEffect : ~m? +# 2210| mu2210_7(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2210_1 +# 2210| r2210_8(glval &>) = VariableAddress[(__range)] : +# 2210| r2210_9(glval>) = VariableAddress[ys] : +# 2210| r2210_10(vector &) = CopyValue : r2210_9 +# 2210| mu2210_11(vector &) = Store[(__range)] : &:r2210_8, r2210_10 +# 2210| r2210_12(glval>) = VariableAddress[(__begin)] : +# 2210| r2210_13(glval &>) = VariableAddress[(__range)] : +# 2210| r2210_14(vector &) = Load[(__range)] : &:r2210_13, ~m? +#-----| r0_33(glval>) = CopyValue : r2210_14 +#-----| r0_34(glval>) = Convert : r0_33 +# 2210| r2210_15(glval) = FunctionAddress[begin] : +# 2210| r2210_16(iterator) = Call[begin] : func:r2210_15, this:r0_34 +#-----| v0_35(void) = ^IndirectReadSideEffect[-1] : &:r0_34, ~m? +# 2210| mu2210_17(iterator) = Store[(__begin)] : &:r2210_12, r2210_16 +# 2210| r2210_18(glval>) = VariableAddress[(__end)] : +# 2210| r2210_19(glval &>) = VariableAddress[(__range)] : +# 2210| r2210_20(vector &) = Load[(__range)] : &:r2210_19, ~m? +#-----| r0_36(glval>) = CopyValue : r2210_20 +#-----| r0_37(glval>) = Convert : r0_36 +# 2210| r2210_21(glval) = FunctionAddress[end] : +# 2210| r2210_22(iterator) = Call[end] : func:r2210_21, this:r0_37 +#-----| v0_38(void) = ^IndirectReadSideEffect[-1] : &:r0_37, ~m? +# 2210| mu2210_23(iterator) = Store[(__end)] : &:r2210_18, r2210_22 +#-----| Goto -> Block 21 + +# 2210| Block 21 +# 2210| r2210_24(glval>) = VariableAddress[(__begin)] : +#-----| r0_39(glval>) = Convert : r2210_24 +# 2210| r2210_25(glval) = FunctionAddress[operator!=] : +#-----| r0_40(glval>) = VariableAddress[#temp0:0] : +#-----| mu0_41(iterator) = Uninitialized[#temp0:0] : &:r0_40 +# 2210| r2210_26(glval) = FunctionAddress[iterator] : +# 2210| r2210_27(glval>) = VariableAddress[(__end)] : +#-----| r0_42(glval>) = Convert : r2210_27 +#-----| r0_43(iterator &) = CopyValue : r0_42 +# 2210| v2210_28(void) = Call[iterator] : func:r2210_26, this:r0_40, 0:r0_43 +# 2210| mu2210_29(unknown) = ^CallSideEffect : ~m? +#-----| v0_44(void) = ^BufferReadSideEffect[0] : &:r0_43, ~m? +# 2210| mu2210_30(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_40 +#-----| r0_45(iterator) = Load[#temp0:0] : &:r0_40, ~m? +# 2210| r2210_31(bool) = Call[operator!=] : func:r2210_25, this:r0_39, 0:r0_45 +# 2210| mu2210_32(unknown) = ^CallSideEffect : ~m? +#-----| v0_46(void) = ^IndirectReadSideEffect[-1] : &:r0_39, ~m? +# 2210| v2210_33(void) = ConditionalBranch : r2210_31 +#-----| False -> Block 26 +#-----| True -> Block 23 + +# 2210| Block 22 +# 2210| r2210_34(glval>) = VariableAddress[(__begin)] : +# 2210| r2210_35(glval) = FunctionAddress[operator++] : +# 2210| r2210_36(iterator &) = Call[operator++] : func:r2210_35, this:r2210_34 +# 2210| mu2210_37(unknown) = ^CallSideEffect : ~m? +# 2210| v2210_38(void) = ^IndirectReadSideEffect[-1] : &:r2210_34, ~m? +# 2210| mu2210_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2210_34 +# 2210| r2210_40(glval>) = CopyValue : r2210_36 +#-----| Goto (back edge) -> Block 21 + +# 2210| Block 23 +# 2210| r2210_41(glval) = VariableAddress[y] : +# 2210| r2210_42(glval>) = VariableAddress[(__begin)] : +#-----| r0_47(glval>) = Convert : r2210_42 +# 2210| r2210_43(glval) = FunctionAddress[operator*] : +# 2210| r2210_44(int &) = Call[operator*] : func:r2210_43, this:r0_47 +# 2210| mu2210_45(unknown) = ^CallSideEffect : ~m? +#-----| v0_48(void) = ^IndirectReadSideEffect[-1] : &:r0_47, ~m? +# 2210| r2210_46(int) = Load[?] : &:r2210_44, ~m? +# 2210| mu2210_47(int) = Store[y] : &:r2210_41, r2210_46 +# 2211| r2211_1(glval) = VariableAddress[y] : +# 2211| r2211_2(int) = Load[y] : &:r2211_1, ~m? +# 2211| r2211_3(int) = Constant[1] : +# 2211| r2211_4(bool) = CompareEQ : r2211_2, r2211_3 +# 2211| v2211_5(void) = ConditionalBranch : r2211_4 +#-----| False -> Block 22 +#-----| True -> Block 24 + +# 2212| Block 24 +# 2212| v2212_1(void) = NoOp : +# 2210| r2210_48(glval>) = VariableAddress[ys] : +# 2210| r2210_49(glval) = FunctionAddress[~vector] : +# 2210| v2210_50(void) = Call[~vector] : func:r2210_49, this:r2210_48 +# 2210| mu2210_51(unknown) = ^CallSideEffect : ~m? +# 2210| v2210_52(void) = ^IndirectReadSideEffect[-1] : &:r2210_48, ~m? +# 2210| mu2210_53(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2210_48 +# 2219| r2219_7(glval) = VariableAddress[x] : +# 2219| r2219_8(glval) = FunctionAddress[~ClassWithDestructor] : +# 2219| v2219_9(void) = Call[~ClassWithDestructor] : func:r2219_8, this:r2219_7 +# 2219| mu2219_10(unknown) = ^CallSideEffect : ~m? +# 2219| v2219_11(void) = ^IndirectReadSideEffect[-1] : &:r2219_7, ~m? +# 2219| mu2219_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_7 +#-----| Goto -> Block 1 + +# 2210| Block 25 +# 2210| r2210_54(glval>) = VariableAddress[ys] : +# 2210| r2210_55(glval) = FunctionAddress[~vector] : +# 2210| v2210_56(void) = Call[~vector] : func:r2210_55, this:r2210_54 +# 2210| mu2210_57(unknown) = ^CallSideEffect : ~m? +# 2210| v2210_58(void) = ^IndirectReadSideEffect[-1] : &:r2210_54, ~m? +# 2210| mu2210_59(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2210_54 +#-----| Goto -> Block 26 + +# 2215| Block 26 +# 2215| r2215_1(glval>) = VariableAddress[ys] : +# 2215| mu2215_2(vector) = Uninitialized[ys] : &:r2215_1 +# 2215| r2215_3(glval) = FunctionAddress[vector] : +# 2215| r2215_4(glval) = VariableAddress[#temp2215:45] : +# 2215| r2215_5(glval) = VariableAddress[x] : +# 2215| r2215_6(ClassWithDestructor) = Load[x] : &:r2215_5, ~m? +# 2215| mu2215_7(ClassWithDestructor) = Store[#temp2215:45] : &:r2215_4, r2215_6 +# 2215| r2215_8(ClassWithDestructor) = Load[#temp2215:45] : &:r2215_4, ~m? +# 2215| v2215_9(void) = Call[vector] : func:r2215_3, this:r2215_1, 0:r2215_8 +# 2215| mu2215_10(unknown) = ^CallSideEffect : ~m? +# 2215| mu2215_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2215_1 +# 2215| r2215_12(glval &>) = VariableAddress[(__range)] : +# 2215| r2215_13(glval>) = VariableAddress[ys] : +# 2215| r2215_14(vector &) = CopyValue : r2215_13 +# 2215| mu2215_15(vector &) = Store[(__range)] : &:r2215_12, r2215_14 +# 2215| r2215_16(glval>) = VariableAddress[(__begin)] : +# 2215| r2215_17(glval &>) = VariableAddress[(__range)] : +# 2215| r2215_18(vector &) = Load[(__range)] : &:r2215_17, ~m? +#-----| r0_49(glval>) = CopyValue : r2215_18 +#-----| r0_50(glval>) = Convert : r0_49 +# 2215| r2215_19(glval) = FunctionAddress[begin] : +# 2215| r2215_20(iterator) = Call[begin] : func:r2215_19, this:r0_50 +#-----| v0_51(void) = ^IndirectReadSideEffect[-1] : &:r0_50, ~m? +# 2215| mu2215_21(iterator) = Store[(__begin)] : &:r2215_16, r2215_20 +# 2215| r2215_22(glval>) = VariableAddress[(__end)] : +# 2215| r2215_23(glval &>) = VariableAddress[(__range)] : +# 2215| r2215_24(vector &) = Load[(__range)] : &:r2215_23, ~m? +#-----| r0_52(glval>) = CopyValue : r2215_24 +#-----| r0_53(glval>) = Convert : r0_52 +# 2215| r2215_25(glval) = FunctionAddress[end] : +# 2215| r2215_26(iterator) = Call[end] : func:r2215_25, this:r0_53 +#-----| v0_54(void) = ^IndirectReadSideEffect[-1] : &:r0_53, ~m? +# 2215| mu2215_27(iterator) = Store[(__end)] : &:r2215_22, r2215_26 +#-----| Goto -> Block 27 + +# 2215| Block 27 +# 2215| r2215_28(glval>) = VariableAddress[(__begin)] : +#-----| r0_55(glval>) = Convert : r2215_28 +# 2215| r2215_29(glval) = FunctionAddress[operator!=] : +#-----| r0_56(glval>) = VariableAddress[#temp0:0] : +#-----| mu0_57(iterator) = Uninitialized[#temp0:0] : &:r0_56 +# 2215| r2215_30(glval) = FunctionAddress[iterator] : +# 2215| r2215_31(glval>) = VariableAddress[(__end)] : +#-----| r0_58(glval>) = Convert : r2215_31 +#-----| r0_59(iterator &) = CopyValue : r0_58 +# 2215| v2215_32(void) = Call[iterator] : func:r2215_30, this:r0_56, 0:r0_59 +# 2215| mu2215_33(unknown) = ^CallSideEffect : ~m? +#-----| v0_60(void) = ^BufferReadSideEffect[0] : &:r0_59, ~m? +# 2215| mu2215_34(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_56 +#-----| r0_61(iterator) = Load[#temp0:0] : &:r0_56, ~m? +# 2215| r2215_35(bool) = Call[operator!=] : func:r2215_29, this:r0_55, 0:r0_61 +# 2215| mu2215_36(unknown) = ^CallSideEffect : ~m? +#-----| v0_62(void) = ^IndirectReadSideEffect[-1] : &:r0_55, ~m? +# 2215| v2215_37(void) = ConditionalBranch : r2215_35 +#-----| False -> Block 30 +#-----| True -> Block 28 + +# 2215| Block 28 +# 2215| r2215_38(glval) = VariableAddress[y] : +# 2215| r2215_39(glval>) = VariableAddress[(__begin)] : +#-----| r0_63(glval>) = Convert : r2215_39 +# 2215| r2215_40(glval) = FunctionAddress[operator*] : +# 2215| r2215_41(ClassWithDestructor &) = Call[operator*] : func:r2215_40, this:r0_63 +# 2215| mu2215_42(unknown) = ^CallSideEffect : ~m? +#-----| v0_64(void) = ^IndirectReadSideEffect[-1] : &:r0_63, ~m? +# 2215| r2215_43(ClassWithDestructor) = Load[?] : &:r2215_41, ~m? +# 2215| mu2215_44(ClassWithDestructor) = Store[y] : &:r2215_38, r2215_43 +# 2216| r2216_1(glval) = VariableAddress[z1] : +# 2216| mu2216_2(ClassWithDestructor) = Uninitialized[z1] : &:r2216_1 +# 2216| r2216_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2216| v2216_4(void) = Call[ClassWithDestructor] : func:r2216_3, this:r2216_1 +# 2216| mu2216_5(unknown) = ^CallSideEffect : ~m? +# 2216| mu2216_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2216_1 +# 2217| r2217_1(glval) = VariableAddress[z2] : +# 2217| mu2217_2(ClassWithDestructor) = Uninitialized[z2] : &:r2217_1 +# 2217| r2217_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2217| v2217_4(void) = Call[ClassWithDestructor] : func:r2217_3, this:r2217_1 +# 2217| mu2217_5(unknown) = ^CallSideEffect : ~m? +# 2217| mu2217_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2217_1 +# 2218| r2218_1(glval) = VariableAddress[z2] : +# 2218| r2218_2(glval) = FunctionAddress[~ClassWithDestructor] : +# 2218| v2218_3(void) = Call[~ClassWithDestructor] : func:r2218_2, this:r2218_1 +# 2218| mu2218_4(unknown) = ^CallSideEffect : ~m? +# 2218| v2218_5(void) = ^IndirectReadSideEffect[-1] : &:r2218_1, ~m? +# 2218| mu2218_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_1 +# 2218| r2218_7(glval) = VariableAddress[z1] : +# 2218| r2218_8(glval) = FunctionAddress[~ClassWithDestructor] : +# 2218| v2218_9(void) = Call[~ClassWithDestructor] : func:r2218_8, this:r2218_7 +# 2218| mu2218_10(unknown) = ^CallSideEffect : ~m? +# 2218| v2218_11(void) = ^IndirectReadSideEffect[-1] : &:r2218_7, ~m? +# 2218| mu2218_12(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2218_7 +# 2215| r2215_45(glval) = VariableAddress[y] : +# 2215| r2215_46(glval) = FunctionAddress[~ClassWithDestructor] : +# 2215| v2215_47(void) = Call[~ClassWithDestructor] : func:r2215_46, this:r2215_45 +# 2215| mu2215_48(unknown) = ^CallSideEffect : ~m? +# 2215| v2215_49(void) = ^IndirectReadSideEffect[-1] : &:r2215_45, ~m? +# 2215| mu2215_50(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2215_45 +# 2215| r2215_51(glval>) = VariableAddress[(__begin)] : +# 2215| r2215_52(glval) = FunctionAddress[operator++] : +# 2215| r2215_53(iterator &) = Call[operator++] : func:r2215_52, this:r2215_51 +# 2215| mu2215_54(unknown) = ^CallSideEffect : ~m? +# 2215| v2215_55(void) = ^IndirectReadSideEffect[-1] : &:r2215_51, ~m? +# 2215| mu2215_56(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2215_51 +# 2215| r2215_57(glval>) = CopyValue : r2215_53 +#-----| Goto (back edge) -> Block 27 + +# 2215| Block 29 +# 2215| r2215_58(glval>) = VariableAddress[ys] : +# 2215| r2215_59(glval) = FunctionAddress[~vector] : +# 2215| v2215_60(void) = Call[~vector] : func:r2215_59, this:r2215_58 +# 2215| mu2215_61(unknown) = ^CallSideEffect : ~m? +# 2215| v2215_62(void) = ^IndirectReadSideEffect[-1] : &:r2215_58, ~m? +# 2215| mu2215_63(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2215_58 +#-----| Goto -> Block 30 + +# 2219| Block 30 +# 2219| v2219_13(void) = NoOp : +# 2219| r2219_14(glval) = VariableAddress[x] : +# 2219| r2219_15(glval) = FunctionAddress[~ClassWithDestructor] : +# 2219| v2219_16(void) = Call[~ClassWithDestructor] : func:r2219_15, this:r2219_14 +# 2219| mu2219_17(unknown) = ^CallSideEffect : ~m? +# 2219| v2219_18(void) = ^IndirectReadSideEffect[-1] : &:r2219_14, ~m? +# 2219| mu2219_19(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2219_14 +#-----| Goto -> Block 1 + +# 2221| void static_variable_with_destructor_1() +# 2221| Block 0 +# 2221| v2221_1(void) = EnterFunction : +# 2221| mu2221_2(unknown) = AliasedDefinition : +# 2221| mu2221_3(unknown) = InitializeNonLocal : +# 2222| r2222_1(glval) = VariableAddress[a] : +# 2222| mu2222_2(ClassWithDestructor) = Uninitialized[a] : &:r2222_1 +# 2222| r2222_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2222| v2222_4(void) = Call[ClassWithDestructor] : func:r2222_3, this:r2222_1 +# 2222| mu2222_5(unknown) = ^CallSideEffect : ~m? +# 2222| mu2222_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2222_1 +# 2223| r2223_1(glval) = VariableAddress[b#init] : +# 2223| r2223_2(bool) = Load[b#init] : &:r2223_1, ~m? +# 2223| v2223_3(void) = ConditionalBranch : r2223_2 +#-----| False -> Block 1 +#-----| True -> Block 2 + +# 2223| Block 1 +# 2223| r2223_4(glval) = VariableAddress[b] : +#-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : +#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2223_4 +#-----| mu0_3(unknown) = ^CallSideEffect : ~m? +#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2223_4 +# 2223| r2223_5(bool) = Constant[1] : +# 2223| mu2223_6(bool) = Store[b#init] : &:r2223_1, r2223_5 +#-----| Goto -> Block 2 + +# 2224| Block 2 +# 2224| v2224_1(void) = NoOp : +# 2224| r2224_2(glval) = VariableAddress[a] : +# 2224| r2224_3(glval) = FunctionAddress[~ClassWithDestructor] : +# 2224| v2224_4(void) = Call[~ClassWithDestructor] : func:r2224_3, this:r2224_2 +# 2224| mu2224_5(unknown) = ^CallSideEffect : ~m? +# 2224| v2224_6(void) = ^IndirectReadSideEffect[-1] : &:r2224_2, ~m? +# 2224| mu2224_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2224_2 +# 2221| v2221_4(void) = ReturnVoid : +# 2221| v2221_5(void) = AliasedUse : ~m? +# 2221| v2221_6(void) = ExitFunction : + +# 2226| void static_variable_with_destructor_2() +# 2226| Block 0 +# 2226| v2226_1(void) = EnterFunction : +# 2226| mu2226_2(unknown) = AliasedDefinition : +# 2226| mu2226_3(unknown) = InitializeNonLocal : +# 2227| r2227_1(glval) = VariableAddress[a#init] : +# 2227| r2227_2(bool) = Load[a#init] : &:r2227_1, ~m? +# 2227| v2227_3(void) = ConditionalBranch : r2227_2 +#-----| False -> Block 1 +#-----| True -> Block 2 + +# 2227| Block 1 +# 2227| r2227_4(glval) = VariableAddress[a] : +#-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : +#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2227_4 +#-----| mu0_3(unknown) = ^CallSideEffect : ~m? +#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2227_4 +# 2227| r2227_5(bool) = Constant[1] : +# 2227| mu2227_6(bool) = Store[a#init] : &:r2227_1, r2227_5 +#-----| Goto -> Block 2 + +# 2228| Block 2 +# 2228| r2228_1(glval) = VariableAddress[b] : +# 2228| mu2228_2(ClassWithDestructor) = Uninitialized[b] : &:r2228_1 +# 2228| r2228_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2228| v2228_4(void) = Call[ClassWithDestructor] : func:r2228_3, this:r2228_1 +# 2228| mu2228_5(unknown) = ^CallSideEffect : ~m? +# 2228| mu2228_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2228_1 +# 2229| v2229_1(void) = NoOp : +# 2229| r2229_2(glval) = VariableAddress[b] : +# 2229| r2229_3(glval) = FunctionAddress[~ClassWithDestructor] : +# 2229| v2229_4(void) = Call[~ClassWithDestructor] : func:r2229_3, this:r2229_2 +# 2229| mu2229_5(unknown) = ^CallSideEffect : ~m? +# 2229| v2229_6(void) = ^IndirectReadSideEffect[-1] : &:r2229_2, ~m? +# 2229| mu2229_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2229_2 +# 2226| v2226_4(void) = ReturnVoid : +# 2226| v2226_5(void) = AliasedUse : ~m? +# 2226| v2226_6(void) = ExitFunction : + +# 2231| void static_variable_with_destructor_3() +# 2231| Block 0 +# 2231| v2231_1(void) = EnterFunction : +# 2231| mu2231_2(unknown) = AliasedDefinition : +# 2231| mu2231_3(unknown) = InitializeNonLocal : +# 2232| r2232_1(glval) = VariableAddress[a] : +# 2232| mu2232_2(ClassWithDestructor) = Uninitialized[a] : &:r2232_1 +# 2232| r2232_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2232| v2232_4(void) = Call[ClassWithDestructor] : func:r2232_3, this:r2232_1 +# 2232| mu2232_5(unknown) = ^CallSideEffect : ~m? +# 2232| mu2232_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2232_1 +# 2233| r2233_1(glval) = VariableAddress[b] : +# 2233| mu2233_2(ClassWithDestructor) = Uninitialized[b] : &:r2233_1 +# 2233| r2233_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2233| v2233_4(void) = Call[ClassWithDestructor] : func:r2233_3, this:r2233_1 +# 2233| mu2233_5(unknown) = ^CallSideEffect : ~m? +# 2233| mu2233_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2233_1 +# 2234| r2234_1(glval) = VariableAddress[c#init] : +# 2234| r2234_2(bool) = Load[c#init] : &:r2234_1, ~m? +# 2234| v2234_3(void) = ConditionalBranch : r2234_2 +#-----| False -> Block 1 +#-----| True -> Block 2 + +# 2234| Block 1 +# 2234| r2234_4(glval) = VariableAddress[c] : +#-----| r0_1(glval) = FunctionAddress[ClassWithDestructor] : +#-----| v0_2(void) = Call[ClassWithDestructor] : func:r0_1, this:r2234_4 +#-----| mu0_3(unknown) = ^CallSideEffect : ~m? +#-----| mu0_4(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2234_4 +# 2234| r2234_5(bool) = Constant[1] : +# 2234| mu2234_6(bool) = Store[c#init] : &:r2234_1, r2234_5 +#-----| Goto -> Block 2 + +# 2235| Block 2 +# 2235| v2235_1(void) = NoOp : +# 2235| r2235_2(glval) = VariableAddress[b] : +# 2235| r2235_3(glval) = FunctionAddress[~ClassWithDestructor] : +# 2235| v2235_4(void) = Call[~ClassWithDestructor] : func:r2235_3, this:r2235_2 +# 2235| mu2235_5(unknown) = ^CallSideEffect : ~m? +# 2235| v2235_6(void) = ^IndirectReadSideEffect[-1] : &:r2235_2, ~m? +# 2235| mu2235_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2235_2 +# 2235| r2235_8(glval) = VariableAddress[a] : +# 2235| r2235_9(glval) = FunctionAddress[~ClassWithDestructor] : +# 2235| v2235_10(void) = Call[~ClassWithDestructor] : func:r2235_9, this:r2235_8 +# 2235| mu2235_11(unknown) = ^CallSideEffect : ~m? +# 2235| v2235_12(void) = ^IndirectReadSideEffect[-1] : &:r2235_8, ~m? +# 2235| mu2235_13(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2235_8 +# 2231| v2231_4(void) = ReturnVoid : +# 2231| v2231_5(void) = AliasedUse : ~m? +# 2231| v2231_6(void) = ExitFunction : + +# 2237| ClassWithDestructor global_class_with_destructor +# 2237| Block 0 +# 2237| v2237_1(void) = EnterFunction : +# 2237| mu2237_2(unknown) = AliasedDefinition : +# 2237| r2237_3(glval) = VariableAddress[global_class_with_destructor] : +# 2237| r2237_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2237| v2237_5(void) = Call[ClassWithDestructor] : func:r2237_4, this:r2237_3 +# 2237| mu2237_6(unknown) = ^CallSideEffect : ~m? +# 2237| mu2237_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2237_3 +# 2237| v2237_8(void) = ReturnVoid : +# 2237| v2237_9(void) = AliasedUse : ~m? +# 2237| v2237_10(void) = ExitFunction : + +# 2241| ClassWithDestructor& vacuous_destructor_call::get(ClassWithDestructor&) +# 2241| Block 0 +# 2241| v2241_1(void) = EnterFunction : +# 2241| mu2241_2(unknown) = AliasedDefinition : +# 2241| mu2241_3(unknown) = InitializeNonLocal : +# 2241| r2241_4(glval) = VariableAddress[t] : +# 2241| mu2241_5(ClassWithDestructor &) = InitializeParameter[t] : &:r2241_4 +# 2241| r2241_6(ClassWithDestructor &) = Load[t] : &:r2241_4, ~m? +# 2241| mu2241_7(unknown) = InitializeIndirection[t] : &:r2241_6 +# 2241| r2241_8(glval) = VariableAddress[#return] : +# 2241| r2241_9(glval) = VariableAddress[t] : +# 2241| r2241_10(ClassWithDestructor &) = Load[t] : &:r2241_9, ~m? +# 2241| r2241_11(glval) = CopyValue : r2241_10 +# 2241| r2241_12(ClassWithDestructor &) = CopyValue : r2241_11 +# 2241| mu2241_13(ClassWithDestructor &) = Store[#return] : &:r2241_8, r2241_12 +# 2241| v2241_14(void) = ReturnIndirection[t] : &:r2241_6, ~m? +# 2241| r2241_15(glval) = VariableAddress[#return] : +# 2241| v2241_16(void) = ReturnValue : &:r2241_15, ~m? +# 2241| v2241_17(void) = AliasedUse : ~m? +# 2241| v2241_18(void) = ExitFunction : + +# 2241| int& vacuous_destructor_call::get(int&) +# 2241| Block 0 +# 2241| v2241_1(void) = EnterFunction : +# 2241| mu2241_2(unknown) = AliasedDefinition : +# 2241| mu2241_3(unknown) = InitializeNonLocal : +# 2241| r2241_4(glval) = VariableAddress[t] : +# 2241| mu2241_5(int &) = InitializeParameter[t] : &:r2241_4 +# 2241| r2241_6(int &) = Load[t] : &:r2241_4, ~m? +# 2241| mu2241_7(unknown) = InitializeIndirection[t] : &:r2241_6 +# 2241| r2241_8(glval) = VariableAddress[#return] : +# 2241| r2241_9(glval) = VariableAddress[t] : +# 2241| r2241_10(int &) = Load[t] : &:r2241_9, ~m? +# 2241| r2241_11(glval) = CopyValue : r2241_10 +# 2241| r2241_12(int &) = CopyValue : r2241_11 +# 2241| mu2241_13(int &) = Store[#return] : &:r2241_8, r2241_12 +# 2241| v2241_14(void) = ReturnIndirection[t] : &:r2241_6, ~m? +# 2241| r2241_15(glval) = VariableAddress[#return] : +# 2241| v2241_16(void) = ReturnValue : &:r2241_15, ~m? +# 2241| v2241_17(void) = AliasedUse : ~m? +# 2241| v2241_18(void) = ExitFunction : + +# 2244| void vacuous_destructor_call::call_destructor(ClassWithDestructor&) +# 2244| Block 0 +# 2244| v2244_1(void) = EnterFunction : +# 2244| mu2244_2(unknown) = AliasedDefinition : +# 2244| mu2244_3(unknown) = InitializeNonLocal : +# 2244| r2244_4(glval) = VariableAddress[t] : +# 2244| mu2244_5(ClassWithDestructor &) = InitializeParameter[t] : &:r2244_4 +# 2244| r2244_6(ClassWithDestructor &) = Load[t] : &:r2244_4, ~m? +# 2244| mu2244_7(unknown) = InitializeIndirection[t] : &:r2244_6 +# 2245| r2245_1(glval) = FunctionAddress[get] : +# 2245| r2245_2(glval) = VariableAddress[t] : +# 2245| r2245_3(ClassWithDestructor &) = Load[t] : &:r2245_2, ~m? +# 2245| r2245_4(glval) = CopyValue : r2245_3 +# 2245| r2245_5(ClassWithDestructor &) = CopyValue : r2245_4 +# 2245| r2245_6(ClassWithDestructor &) = Call[get] : func:r2245_1, 0:r2245_5 +# 2245| mu2245_7(unknown) = ^CallSideEffect : ~m? +# 2245| v2245_8(void) = ^BufferReadSideEffect[0] : &:r2245_5, ~m? +# 2245| mu2245_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r2245_5 +# 2245| r2245_10(glval) = CopyValue : r2245_6 +# 2245| r2245_11(glval) = FunctionAddress[~ClassWithDestructor] : +# 2245| v2245_12(void) = Call[~ClassWithDestructor] : func:r2245_11 +# 2245| mu2245_13(unknown) = ^CallSideEffect : ~m? +# 2245| v2245_14(void) = ^IndirectReadSideEffect[-1] : &:r2245_10, ~m? +# 2245| mu2245_15(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2245_10 +# 2246| v2246_1(void) = NoOp : +# 2244| v2244_8(void) = ReturnIndirection[t] : &:r2244_6, ~m? +# 2244| v2244_9(void) = ReturnVoid : +# 2244| v2244_10(void) = AliasedUse : ~m? +# 2244| v2244_11(void) = ExitFunction : + +# 2244| void vacuous_destructor_call::call_destructor(int&) +# 2244| Block 0 +# 2244| v2244_1(void) = EnterFunction : +# 2244| mu2244_2(unknown) = AliasedDefinition : +# 2244| mu2244_3(unknown) = InitializeNonLocal : +# 2244| r2244_4(glval) = VariableAddress[t] : +# 2244| mu2244_5(int &) = InitializeParameter[t] : &:r2244_4 +# 2244| r2244_6(int &) = Load[t] : &:r2244_4, ~m? +# 2244| mu2244_7(unknown) = InitializeIndirection[t] : &:r2244_6 +# 2245| r2245_1(glval) = FunctionAddress[get] : +# 2245| r2245_2(glval) = VariableAddress[t] : +# 2245| r2245_3(int &) = Load[t] : &:r2245_2, ~m? +# 2245| r2245_4(glval) = CopyValue : r2245_3 +# 2245| r2245_5(int &) = CopyValue : r2245_4 +# 2245| r2245_6(int &) = Call[get] : func:r2245_1, 0:r2245_5 +# 2245| mu2245_7(unknown) = ^CallSideEffect : ~m? +# 2245| v2245_8(void) = ^BufferReadSideEffect[0] : &:r2245_5, ~m? +# 2245| mu2245_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r2245_5 +# 2245| r2245_10(glval) = CopyValue : r2245_6 +# 2246| v2246_1(void) = NoOp : +# 2244| v2244_8(void) = ReturnIndirection[t] : &:r2244_6, ~m? +# 2244| v2244_9(void) = ReturnVoid : +# 2244| v2244_10(void) = AliasedUse : ~m? +# 2244| v2244_11(void) = ExitFunction : + +# 2248| void vacuous_destructor_call::non_vacuous_destructor_call() +# 2248| Block 0 +# 2248| v2248_1(void) = EnterFunction : +# 2248| mu2248_2(unknown) = AliasedDefinition : +# 2248| mu2248_3(unknown) = InitializeNonLocal : +# 2249| r2249_1(glval) = VariableAddress[c] : +# 2249| mu2249_2(ClassWithDestructor) = Uninitialized[c] : &:r2249_1 +# 2249| r2249_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2249| v2249_4(void) = Call[ClassWithDestructor] : func:r2249_3, this:r2249_1 +# 2249| mu2249_5(unknown) = ^CallSideEffect : ~m? +# 2249| mu2249_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2249_1 +# 2250| r2250_1(glval) = FunctionAddress[call_destructor] : +# 2250| r2250_2(glval) = VariableAddress[c] : +# 2250| r2250_3(ClassWithDestructor &) = CopyValue : r2250_2 +# 2250| v2250_4(void) = Call[call_destructor] : func:r2250_1, 0:r2250_3 +# 2250| mu2250_5(unknown) = ^CallSideEffect : ~m? +# 2250| v2250_6(void) = ^BufferReadSideEffect[0] : &:r2250_3, ~m? +# 2250| mu2250_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r2250_3 +# 2251| v2251_1(void) = NoOp : +# 2251| r2251_2(glval) = VariableAddress[c] : +# 2251| r2251_3(glval) = FunctionAddress[~ClassWithDestructor] : +# 2251| v2251_4(void) = Call[~ClassWithDestructor] : func:r2251_3, this:r2251_2 +# 2251| mu2251_5(unknown) = ^CallSideEffect : ~m? +# 2251| v2251_6(void) = ^IndirectReadSideEffect[-1] : &:r2251_2, ~m? +# 2251| mu2251_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2251_2 +# 2248| v2248_4(void) = ReturnVoid : +# 2248| v2248_5(void) = AliasedUse : ~m? +# 2248| v2248_6(void) = ExitFunction : + +# 2253| void vacuous_destructor_call::vacuous_destructor_call() +# 2253| Block 0 +# 2253| v2253_1(void) = EnterFunction : +# 2253| mu2253_2(unknown) = AliasedDefinition : +# 2253| mu2253_3(unknown) = InitializeNonLocal : +# 2254| r2254_1(glval) = VariableAddress[i] : +# 2254| mu2254_2(int) = Uninitialized[i] : &:r2254_1 +# 2255| r2255_1(glval) = FunctionAddress[call_destructor] : +# 2255| r2255_2(glval) = VariableAddress[i] : +# 2255| r2255_3(int &) = CopyValue : r2255_2 +# 2255| v2255_4(void) = Call[call_destructor] : func:r2255_1, 0:r2255_3 +# 2255| mu2255_5(unknown) = ^CallSideEffect : ~m? +# 2255| v2255_6(void) = ^BufferReadSideEffect[0] : &:r2255_3, ~m? +# 2255| mu2255_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r2255_3 +# 2256| v2256_1(void) = NoOp : +# 2253| v2253_4(void) = ReturnVoid : +# 2253| v2253_5(void) = AliasedUse : ~m? +# 2253| v2253_6(void) = ExitFunction : + +# 2259| void TryCatchDestructors(bool) +# 2259| Block 0 +# 2259| v2259_1(void) = EnterFunction : +# 2259| mu2259_2(unknown) = AliasedDefinition : +# 2259| mu2259_3(unknown) = InitializeNonLocal : +# 2259| r2259_4(glval) = VariableAddress[b] : +# 2259| mu2259_5(bool) = InitializeParameter[b] : &:r2259_4 +# 2261| r2261_1(glval) = VariableAddress[s] : +# 2261| mu2261_2(String) = Uninitialized[s] : &:r2261_1 +# 2261| r2261_3(glval) = FunctionAddress[String] : +# 2261| v2261_4(void) = Call[String] : func:r2261_3, this:r2261_1 +# 2261| mu2261_5(unknown) = ^CallSideEffect : ~m? +# 2261| mu2261_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2261_1 +# 2262| r2262_1(glval) = VariableAddress[b] : +# 2262| r2262_2(bool) = Load[b] : &:r2262_1, ~m? +# 2262| v2262_3(void) = ConditionalBranch : r2262_2 +#-----| False -> Block 4 +#-----| True -> Block 3 + +# 2259| Block 1 +# 2259| v2259_6(void) = AliasedUse : ~m? +# 2259| v2259_7(void) = ExitFunction : + # 2259| Block 2 -# 2259| r2259_1(glval) = VariableAddress[y] : -# 2259| r2259_2(int) = Constant[0] : -# 2259| mu2259_3(int) = Store[y] : &:r2259_1, r2259_2 -#-----| Goto -> Block 3 +# 2259| v2259_8(void) = Unwind : +#-----| Goto -> Block 1 -# 2260| Block 3 -# 2260| r2260_1(glval) = VariableAddress[s] : -# 2260| r2260_2(glval) = FunctionAddress[~String] : -# 2260| v2260_3(void) = Call[~String] : func:r2260_2, this:r2260_1 -# 2260| mu2260_4(unknown) = ^CallSideEffect : ~m? -# 2260| v2260_5(void) = ^IndirectReadSideEffect[-1] : &:r2260_1, ~m? -# 2260| mu2260_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2260_1 -# 2261| v2261_1(void) = NoOp : -# 2255| v2255_6(void) = ReturnVoid : -# 2255| v2255_7(void) = AliasedUse : ~m? -# 2255| v2255_8(void) = ExitFunction : +# 2263| Block 3 +# 2263| r2263_1(glval) = VariableAddress[#throw2263:7] : +# 2263| r2263_2(glval) = StringConstant["string literal"] : +# 2263| r2263_3(char *) = Convert : r2263_2 +# 2263| mu2263_4(char *) = Store[#throw2263:7] : &:r2263_1, r2263_3 +# 2263| v2263_5(void) = ThrowValue : &:r2263_1, ~m? +#-----| Exception -> Block 5 -# 2270| void IfDestructors3(bool) -# 2270| Block 0 -# 2270| v2270_1(void) = EnterFunction : -# 2270| mu2270_2(unknown) = AliasedDefinition : -# 2270| mu2270_3(unknown) = InitializeNonLocal : -# 2270| r2270_4(glval) = VariableAddress[b] : -# 2270| mu2270_5(bool) = InitializeParameter[b] : &:r2270_4 -# 2271| r2271_1(glval) = VariableAddress[B] : -# 2271| mu2271_2(Bool) = Uninitialized[B] : &:r2271_1 -# 2271| r2271_3(glval) = FunctionAddress[Bool] : -# 2271| r2271_4(glval) = VariableAddress[b] : -# 2271| r2271_5(bool) = Load[b] : &:r2271_4, ~m? -# 2271| v2271_6(void) = Call[Bool] : func:r2271_3, this:r2271_1, 0:r2271_5 -# 2271| mu2271_7(unknown) = ^CallSideEffect : ~m? -# 2271| mu2271_8(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2271_1 -# 2271| r2271_9(glval) = VariableAddress[B] : -# 2271| r2271_10(glval) = FunctionAddress[operator bool] : -# 2271| r2271_11(bool) = Call[operator bool] : func:r2271_10, this:r2271_9 -# 2271| mu2271_12(unknown) = ^CallSideEffect : ~m? -# 2271| v2271_13(void) = ^IndirectReadSideEffect[-1] : &:r2271_9, ~m? -# 2271| mu2271_14(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2271_9 -# 2271| r2271_15(bool) = CopyValue : r2271_11 -# 2271| v2271_16(void) = ConditionalBranch : r2271_15 +# 2265| Block 4 +# 2265| r2265_1(glval) = VariableAddress[s2] : +# 2265| mu2265_2(String) = Uninitialized[s2] : &:r2265_1 +# 2265| r2265_3(glval) = FunctionAddress[String] : +# 2265| v2265_4(void) = Call[String] : func:r2265_3, this:r2265_1 +# 2265| mu2265_5(unknown) = ^CallSideEffect : ~m? +# 2265| mu2265_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2265_1 +# 2266| r2266_1(glval) = VariableAddress[s2] : +# 2266| r2266_2(glval) = FunctionAddress[~String] : +# 2266| v2266_3(void) = Call[~String] : func:r2266_2, this:r2266_1 +# 2266| mu2266_4(unknown) = ^CallSideEffect : ~m? +# 2266| v2266_5(void) = ^IndirectReadSideEffect[-1] : &:r2266_1, ~m? +# 2266| mu2266_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2266_1 +# 2266| r2266_7(glval) = VariableAddress[s] : +# 2266| r2266_8(glval) = FunctionAddress[~String] : +# 2266| v2266_9(void) = Call[~String] : func:r2266_8, this:r2266_7 +# 2266| mu2266_10(unknown) = ^CallSideEffect : ~m? +# 2266| v2266_11(void) = ^IndirectReadSideEffect[-1] : &:r2266_7, ~m? +# 2266| mu2266_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2266_7 +#-----| Goto -> Block 10 + +# 2267| Block 5 +# 2267| v2267_1(void) = CatchByType[const char *] : +#-----| Exception -> Block 7 +#-----| Goto -> Block 6 + +# 2267| Block 6 +# 2267| r2267_2(glval) = VariableAddress[s] : +# 2267| mu2267_3(char *) = InitializeParameter[s] : &:r2267_2 +# 2267| r2267_4(char *) = Load[s] : &:r2267_2, ~m? +# 2267| mu2267_5(unknown) = InitializeIndirection[s] : &:r2267_4 +# 2268| r2268_1(glval) = VariableAddress[#throw2268:5] : +# 2268| mu2268_2(String) = Uninitialized[#throw2268:5] : &:r2268_1 +# 2268| r2268_3(glval) = FunctionAddress[String] : +# 2268| r2268_4(glval) = VariableAddress[s] : +# 2268| r2268_5(char *) = Load[s] : &:r2268_4, ~m? +# 2268| v2268_6(void) = Call[String] : func:r2268_3, this:r2268_1, 0:r2268_5 +# 2268| mu2268_7(unknown) = ^CallSideEffect : ~m? +# 2268| v2268_8(void) = ^BufferReadSideEffect[0] : &:r2268_5, ~m? +# 2268| mu2268_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2268_1 +# 2268| v2268_10(void) = ThrowValue : &:r2268_1, ~m? +#-----| Exception -> Block 2 + +# 2270| Block 7 +# 2270| v2270_1(void) = CatchByType[const String &] : +#-----| Exception -> Block 9 +#-----| Goto -> Block 8 + +# 2270| Block 8 +# 2270| r2270_2(glval) = VariableAddress[e] : +# 2270| mu2270_3(String &) = InitializeParameter[e] : &:r2270_2 +# 2270| r2270_4(String &) = Load[e] : &:r2270_2, ~m? +# 2270| mu2270_5(unknown) = InitializeIndirection[e] : &:r2270_4 +# 2270| v2270_6(void) = NoOp : +#-----| Goto -> Block 10 + +# 2272| Block 9 +# 2272| v2272_1(void) = CatchAny : +# 2273| v2273_1(void) = ReThrow : +#-----| Exception -> Block 2 + +# 2275| Block 10 +# 2275| v2275_1(void) = NoOp : +# 2259| v2259_9(void) = ReturnVoid : +#-----| Goto -> Block 1 + +# 2277| void IfDestructors(bool) +# 2277| Block 0 +# 2277| v2277_1(void) = EnterFunction : +# 2277| mu2277_2(unknown) = AliasedDefinition : +# 2277| mu2277_3(unknown) = InitializeNonLocal : +# 2277| r2277_4(glval) = VariableAddress[b] : +# 2277| mu2277_5(bool) = InitializeParameter[b] : &:r2277_4 +# 2278| r2278_1(glval) = VariableAddress[s1] : +# 2278| mu2278_2(String) = Uninitialized[s1] : &:r2278_1 +# 2278| r2278_3(glval) = FunctionAddress[String] : +# 2278| v2278_4(void) = Call[String] : func:r2278_3, this:r2278_1 +# 2278| mu2278_5(unknown) = ^CallSideEffect : ~m? +# 2278| mu2278_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2278_1 +# 2279| r2279_1(glval) = VariableAddress[b] : +# 2279| r2279_2(bool) = Load[b] : &:r2279_1, ~m? +# 2279| v2279_3(void) = ConditionalBranch : r2279_2 #-----| False -> Block 2 #-----| True -> Block 1 -# 2272| Block 1 -# 2272| r2272_1(glval) = VariableAddress[s1] : -# 2272| mu2272_2(String) = Uninitialized[s1] : &:r2272_1 -# 2272| r2272_3(glval) = FunctionAddress[String] : -# 2272| v2272_4(void) = Call[String] : func:r2272_3, this:r2272_1 -# 2272| mu2272_5(unknown) = ^CallSideEffect : ~m? -# 2272| mu2272_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2272_1 -# 2273| r2273_1(glval) = VariableAddress[s1] : -# 2273| r2273_2(glval) = FunctionAddress[~String] : -# 2273| v2273_3(void) = Call[~String] : func:r2273_2, this:r2273_1 -# 2273| mu2273_4(unknown) = ^CallSideEffect : ~m? -# 2273| v2273_5(void) = ^IndirectReadSideEffect[-1] : &:r2273_1, ~m? -# 2273| mu2273_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2273_1 -#-----| Goto -> Block 3 - -# 2274| Block 2 -# 2274| r2274_1(glval) = VariableAddress[s2] : -# 2274| mu2274_2(String) = Uninitialized[s2] : &:r2274_1 -# 2274| r2274_3(glval) = FunctionAddress[String] : -# 2274| v2274_4(void) = Call[String] : func:r2274_3, this:r2274_1 -# 2274| mu2274_5(unknown) = ^CallSideEffect : ~m? -# 2274| mu2274_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2274_1 -# 2275| r2275_1(glval) = VariableAddress[s2] : -# 2275| r2275_2(glval) = FunctionAddress[~String] : -# 2275| v2275_3(void) = Call[~String] : func:r2275_2, this:r2275_1 -# 2275| mu2275_4(unknown) = ^CallSideEffect : ~m? -# 2275| v2275_5(void) = ^IndirectReadSideEffect[-1] : &:r2275_1, ~m? -# 2275| mu2275_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2275_1 -#-----| Goto -> Block 3 - -# 2275| Block 3 -# 2275| r2275_7(glval) = VariableAddress[B] : -# 2275| r2275_8(glval) = FunctionAddress[~Bool] : -# 2275| v2275_9(void) = Call[~Bool] : func:r2275_8, this:r2275_7 -# 2275| mu2275_10(unknown) = ^CallSideEffect : ~m? -# 2275| v2275_11(void) = ^IndirectReadSideEffect[-1] : &:r2275_7, ~m? -# 2275| mu2275_12(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2275_7 -# 2276| v2276_1(void) = NoOp : -# 2270| v2270_6(void) = ReturnVoid : -# 2270| v2270_7(void) = AliasedUse : ~m? -# 2270| v2270_8(void) = ExitFunction : - -# 2278| void WhileLoopDestructors(bool) -# 2278| Block 0 -# 2278| v2278_1(void) = EnterFunction : -# 2278| mu2278_2(unknown) = AliasedDefinition : -# 2278| mu2278_3(unknown) = InitializeNonLocal : -# 2278| r2278_4(glval) = VariableAddress[b] : -# 2278| mu2278_5(bool) = InitializeParameter[b] : &:r2278_4 -# 2280| r2280_1(glval) = VariableAddress[s] : -# 2280| mu2280_2(String) = Uninitialized[s] : &:r2280_1 +# 2280| Block 1 +# 2280| r2280_1(glval) = VariableAddress[s2] : +# 2280| mu2280_2(String) = Uninitialized[s2] : &:r2280_1 # 2280| r2280_3(glval) = FunctionAddress[String] : # 2280| v2280_4(void) = Call[String] : func:r2280_3, this:r2280_1 # 2280| mu2280_5(unknown) = ^CallSideEffect : ~m? # 2280| mu2280_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2280_1 +# 2281| r2281_1(glval) = VariableAddress[s2] : +# 2281| r2281_2(glval) = FunctionAddress[~String] : +# 2281| v2281_3(void) = Call[~String] : func:r2281_2, this:r2281_1 +# 2281| mu2281_4(unknown) = ^CallSideEffect : ~m? +# 2281| v2281_5(void) = ^IndirectReadSideEffect[-1] : &:r2281_1, ~m? +# 2281| mu2281_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2281_1 +#-----| Goto -> Block 3 + +# 2282| Block 2 +# 2282| r2282_1(glval) = VariableAddress[s3] : +# 2282| mu2282_2(String) = Uninitialized[s3] : &:r2282_1 +# 2282| r2282_3(glval) = FunctionAddress[String] : +# 2282| v2282_4(void) = Call[String] : func:r2282_3, this:r2282_1 +# 2282| mu2282_5(unknown) = ^CallSideEffect : ~m? +# 2282| mu2282_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2282_1 +# 2283| r2283_1(glval) = VariableAddress[s3] : +# 2283| r2283_2(glval) = FunctionAddress[~String] : +# 2283| v2283_3(void) = Call[~String] : func:r2283_2, this:r2283_1 +# 2283| mu2283_4(unknown) = ^CallSideEffect : ~m? +# 2283| v2283_5(void) = ^IndirectReadSideEffect[-1] : &:r2283_1, ~m? +# 2283| mu2283_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2283_1 +#-----| Goto -> Block 3 + +# 2284| Block 3 +# 2284| r2284_1(glval) = VariableAddress[s4] : +# 2284| mu2284_2(String) = Uninitialized[s4] : &:r2284_1 +# 2284| r2284_3(glval) = FunctionAddress[String] : +# 2284| v2284_4(void) = Call[String] : func:r2284_3, this:r2284_1 +# 2284| mu2284_5(unknown) = ^CallSideEffect : ~m? +# 2284| mu2284_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2284_1 +# 2285| v2285_1(void) = NoOp : +# 2285| r2285_2(glval) = VariableAddress[s4] : +# 2285| r2285_3(glval) = FunctionAddress[~String] : +# 2285| v2285_4(void) = Call[~String] : func:r2285_3, this:r2285_2 +# 2285| mu2285_5(unknown) = ^CallSideEffect : ~m? +# 2285| v2285_6(void) = ^IndirectReadSideEffect[-1] : &:r2285_2, ~m? +# 2285| mu2285_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r2285_2 +# 2285| r2285_8(glval) = VariableAddress[s1] : +# 2285| r2285_9(glval) = FunctionAddress[~String] : +# 2285| v2285_10(void) = Call[~String] : func:r2285_9, this:r2285_8 +# 2285| mu2285_11(unknown) = ^CallSideEffect : ~m? +# 2285| v2285_12(void) = ^IndirectReadSideEffect[-1] : &:r2285_8, ~m? +# 2285| mu2285_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r2285_8 +# 2277| v2277_6(void) = ReturnVoid : +# 2277| v2277_7(void) = AliasedUse : ~m? +# 2277| v2277_8(void) = ExitFunction : + +# 2287| void ForDestructors() +# 2287| Block 0 +# 2287| v2287_1(void) = EnterFunction : +# 2287| mu2287_2(unknown) = AliasedDefinition : +# 2287| mu2287_3(unknown) = InitializeNonLocal : +# 2288| r2288_1(glval) = VariableAddress[c] : +# 2288| r2288_2(char) = Constant[97] : +# 2288| mu2288_3(char) = Store[c] : &:r2288_1, r2288_2 +# 2289| r2289_1(glval) = VariableAddress[s] : +# 2289| mu2289_2(String) = Uninitialized[s] : &:r2289_1 +# 2289| r2289_3(glval) = FunctionAddress[String] : +# 2289| r2289_4(glval) = StringConstant["hello"] : +# 2289| r2289_5(char *) = Convert : r2289_4 +# 2289| v2289_6(void) = Call[String] : func:r2289_3, this:r2289_1, 0:r2289_5 +# 2289| mu2289_7(unknown) = ^CallSideEffect : ~m? +# 2289| v2289_8(void) = ^BufferReadSideEffect[0] : &:r2289_5, ~m? +# 2289| mu2289_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2289_1 #-----| Goto -> Block 1 -# 2281| Block 1 -# 2281| r2281_1(glval) = VariableAddress[b] : -# 2281| r2281_2(bool) = Load[b] : &:r2281_1, ~m? -# 2281| v2281_3(void) = ConditionalBranch : r2281_2 +# 2289| Block 1 +# 2289| r2289_10(glval) = VariableAddress[c] : +# 2289| r2289_11(char) = Load[c] : &:r2289_10, ~m? +# 2289| r2289_12(int) = Convert : r2289_11 +# 2289| r2289_13(int) = Constant[0] : +# 2289| r2289_14(bool) = CompareNE : r2289_12, r2289_13 +# 2289| v2289_15(void) = ConditionalBranch : r2289_14 #-----| False -> Block 3 #-----| True -> Block 2 -# 2282| Block 2 -# 2282| r2282_1(bool) = Constant[0] : -# 2282| r2282_2(glval) = VariableAddress[b] : -# 2282| mu2282_3(bool) = Store[b] : &:r2282_2, r2282_1 +# 2290| Block 2 +# 2290| r2290_1(glval) = VariableAddress[s2] : +# 2290| mu2290_2(String) = Uninitialized[s2] : &:r2290_1 +# 2290| r2290_3(glval) = FunctionAddress[String] : +# 2290| v2290_4(void) = Call[String] : func:r2290_3, this:r2290_1 +# 2290| mu2290_5(unknown) = ^CallSideEffect : ~m? +# 2290| mu2290_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2290_1 +# 2291| r2291_1(glval) = VariableAddress[s2] : +# 2291| r2291_2(glval) = FunctionAddress[~String] : +# 2291| v2291_3(void) = Call[~String] : func:r2291_2, this:r2291_1 +# 2291| mu2291_4(unknown) = ^CallSideEffect : ~m? +# 2291| v2291_5(void) = ^IndirectReadSideEffect[-1] : &:r2291_1, ~m? +# 2291| mu2291_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2291_1 +# 2289| r2289_16(glval) = VariableAddress[s] : +# 2289| r2289_17(glval) = FunctionAddress[pop_back] : +# 2289| r2289_18(char) = Call[pop_back] : func:r2289_17, this:r2289_16 +# 2289| mu2289_19(unknown) = ^CallSideEffect : ~m? +# 2289| v2289_20(void) = ^IndirectReadSideEffect[-1] : &:r2289_16, ~m? +# 2289| mu2289_21(String) = ^IndirectMayWriteSideEffect[-1] : &:r2289_16 +# 2289| r2289_22(glval) = VariableAddress[c] : +# 2289| mu2289_23(char) = Store[c] : &:r2289_22, r2289_18 #-----| Goto (back edge) -> Block 1 -# 2284| Block 3 -# 2284| r2284_1(glval) = VariableAddress[s] : -# 2284| r2284_2(glval) = FunctionAddress[~String] : -# 2284| v2284_3(void) = Call[~String] : func:r2284_2, this:r2284_1 -# 2284| mu2284_4(unknown) = ^CallSideEffect : ~m? -# 2284| v2284_5(void) = ^IndirectReadSideEffect[-1] : &:r2284_1, ~m? -# 2284| mu2284_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2284_1 +# 2289| Block 3 +# 2289| r2289_24(glval) = VariableAddress[s] : +# 2289| r2289_25(glval) = FunctionAddress[~String] : +# 2289| v2289_26(void) = Call[~String] : func:r2289_25, this:r2289_24 +# 2289| mu2289_27(unknown) = ^CallSideEffect : ~m? +# 2289| v2289_28(void) = ^IndirectReadSideEffect[-1] : &:r2289_24, ~m? +# 2289| mu2289_29(String) = ^IndirectMayWriteSideEffect[-1] : &:r2289_24 +# 2293| r2293_1(glval &&>) = VariableAddress[(__range)] : +# 2293| r2293_2(glval>) = VariableAddress[#temp2293:20] : +# 2293| mu2293_3(vector) = Uninitialized[#temp2293:20] : &:r2293_2 +# 2293| r2293_4(glval) = FunctionAddress[vector] : +# 2293| r2293_5(glval) = VariableAddress[#temp2293:40] : +# 2293| mu2293_6(String) = Uninitialized[#temp2293:40] : &:r2293_5 +# 2293| r2293_7(glval) = FunctionAddress[String] : +# 2293| r2293_8(glval) = StringConstant["hello"] : +# 2293| r2293_9(char *) = Convert : r2293_8 +# 2293| v2293_10(void) = Call[String] : func:r2293_7, this:r2293_5, 0:r2293_9 +# 2293| mu2293_11(unknown) = ^CallSideEffect : ~m? +# 2293| v2293_12(void) = ^BufferReadSideEffect[0] : &:r2293_9, ~m? +# 2293| mu2293_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_5 +# 2293| r2293_14(String) = Load[#temp2293:40] : &:r2293_5, ~m? +# 2293| v2293_15(void) = Call[vector] : func:r2293_4, this:r2293_2, 0:r2293_14 +# 2293| mu2293_16(unknown) = ^CallSideEffect : ~m? +# 2293| mu2293_17(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2293_2 +# 2293| r2293_18(vector &) = CopyValue : r2293_2 +# 2293| mu2293_19(vector &&) = Store[(__range)] : &:r2293_1, r2293_18 +# 2293| r2293_20(glval>) = VariableAddress[(__begin)] : +# 2293| r2293_21(glval &&>) = VariableAddress[(__range)] : +# 2293| r2293_22(vector &&) = Load[(__range)] : &:r2293_21, ~m? +#-----| r0_1(glval>) = CopyValue : r2293_22 +#-----| r0_2(glval>) = Convert : r0_1 +# 2293| r2293_23(glval) = FunctionAddress[begin] : +# 2293| r2293_24(iterator) = Call[begin] : func:r2293_23, this:r0_2 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? +# 2293| mu2293_25(iterator) = Store[(__begin)] : &:r2293_20, r2293_24 +# 2293| r2293_26(glval>) = VariableAddress[(__end)] : +# 2293| r2293_27(glval &&>) = VariableAddress[(__range)] : +# 2293| r2293_28(vector &&) = Load[(__range)] : &:r2293_27, ~m? +#-----| r0_4(glval>) = CopyValue : r2293_28 +#-----| r0_5(glval>) = Convert : r0_4 +# 2293| r2293_29(glval) = FunctionAddress[end] : +# 2293| r2293_30(iterator) = Call[end] : func:r2293_29, this:r0_5 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? +# 2293| mu2293_31(iterator) = Store[(__end)] : &:r2293_26, r2293_30 #-----| Goto -> Block 4 -# 2287| Block 4 -# 2287| r2287_1(glval) = VariableAddress[B] : -# 2287| mu2287_2(Bool) = Uninitialized[B] : &:r2287_1 -# 2287| r2287_3(glval) = FunctionAddress[Bool] : -# 2287| r2287_4(glval) = VariableAddress[b] : -# 2287| r2287_5(bool) = Load[b] : &:r2287_4, ~m? -# 2287| v2287_6(void) = Call[Bool] : func:r2287_3, this:r2287_1, 0:r2287_5 -# 2287| mu2287_7(unknown) = ^CallSideEffect : ~m? -# 2287| mu2287_8(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2287_1 -# 2287| r2287_9(glval) = VariableAddress[B] : -# 2287| r2287_10(glval) = FunctionAddress[operator bool] : -# 2287| r2287_11(bool) = Call[operator bool] : func:r2287_10, this:r2287_9 -# 2287| mu2287_12(unknown) = ^CallSideEffect : ~m? -# 2287| v2287_13(void) = ^IndirectReadSideEffect[-1] : &:r2287_9, ~m? -# 2287| mu2287_14(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2287_9 -# 2287| r2287_15(bool) = CopyValue : r2287_11 -# 2287| v2287_16(void) = ConditionalBranch : r2287_15 +# 2293| Block 4 +# 2293| r2293_32(glval>) = VariableAddress[(__begin)] : +#-----| r0_7(glval>) = Convert : r2293_32 +# 2293| r2293_33(glval) = FunctionAddress[operator!=] : +#-----| r0_8(glval>) = VariableAddress[#temp0:0] : +#-----| mu0_9(iterator) = Uninitialized[#temp0:0] : &:r0_8 +# 2293| r2293_34(glval) = FunctionAddress[iterator] : +# 2293| r2293_35(glval>) = VariableAddress[(__end)] : +#-----| r0_10(glval>) = Convert : r2293_35 +#-----| r0_11(iterator &) = CopyValue : r0_10 +# 2293| v2293_36(void) = Call[iterator] : func:r2293_34, this:r0_8, 0:r0_11 +# 2293| mu2293_37(unknown) = ^CallSideEffect : ~m? +#-----| v0_12(void) = ^BufferReadSideEffect[0] : &:r0_11, ~m? +# 2293| mu2293_38(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r0_8 +#-----| r0_13(iterator) = Load[#temp0:0] : &:r0_8, ~m? +# 2293| r2293_39(bool) = Call[operator!=] : func:r2293_33, this:r0_7, 0:r0_13 +# 2293| mu2293_40(unknown) = ^CallSideEffect : ~m? +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? +# 2293| v2293_41(void) = ConditionalBranch : r2293_39 #-----| False -> Block 6 #-----| True -> Block 5 -# 2288| Block 5 -# 2288| r2288_1(bool) = Constant[0] : -# 2288| r2288_2(glval) = VariableAddress[b] : -# 2288| mu2288_3(bool) = Store[b] : &:r2288_2, r2288_1 -# 2289| r2289_1(glval) = VariableAddress[B] : -# 2289| r2289_2(glval) = FunctionAddress[~Bool] : -# 2289| v2289_3(void) = Call[~Bool] : func:r2289_2, this:r2289_1 -# 2289| mu2289_4(unknown) = ^CallSideEffect : ~m? -# 2289| v2289_5(void) = ^IndirectReadSideEffect[-1] : &:r2289_1, ~m? -# 2289| mu2289_6(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2289_1 +# 2293| Block 5 +# 2293| r2293_42(glval) = VariableAddress[s] : +# 2293| mu2293_43(String) = Uninitialized[s] : &:r2293_42 +# 2293| r2293_44(glval) = FunctionAddress[String] : +# 2293| r2293_45(glval>) = VariableAddress[(__begin)] : +#-----| r0_15(glval>) = Convert : r2293_45 +# 2293| r2293_46(glval) = FunctionAddress[operator*] : +# 2293| r2293_47(String &) = Call[operator*] : func:r2293_46, this:r0_15 +# 2293| mu2293_48(unknown) = ^CallSideEffect : ~m? +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? +# 2293| r2293_49(glval) = CopyValue : r2293_47 +# 2293| r2293_50(glval) = Convert : r2293_49 +# 2293| r2293_51(String &) = CopyValue : r2293_50 +# 2293| v2293_52(void) = Call[String] : func:r2293_44, this:r2293_42, 0:r2293_51 +# 2293| mu2293_53(unknown) = ^CallSideEffect : ~m? +# 2293| v2293_54(void) = ^BufferReadSideEffect[0] : &:r2293_51, ~m? +# 2293| mu2293_55(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_42 +# 2294| r2294_1(glval) = VariableAddress[s2] : +# 2294| mu2294_2(String) = Uninitialized[s2] : &:r2294_1 +# 2294| r2294_3(glval) = FunctionAddress[String] : +# 2294| v2294_4(void) = Call[String] : func:r2294_3, this:r2294_1 +# 2294| mu2294_5(unknown) = ^CallSideEffect : ~m? +# 2294| mu2294_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2294_1 +# 2295| r2295_1(glval) = VariableAddress[s2] : +# 2295| r2295_2(glval) = FunctionAddress[~String] : +# 2295| v2295_3(void) = Call[~String] : func:r2295_2, this:r2295_1 +# 2295| mu2295_4(unknown) = ^CallSideEffect : ~m? +# 2295| v2295_5(void) = ^IndirectReadSideEffect[-1] : &:r2295_1, ~m? +# 2295| mu2295_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2295_1 +# 2293| r2293_56(glval) = VariableAddress[s] : +# 2293| r2293_57(glval) = FunctionAddress[~String] : +# 2293| v2293_58(void) = Call[~String] : func:r2293_57, this:r2293_56 +# 2293| mu2293_59(unknown) = ^CallSideEffect : ~m? +# 2293| v2293_60(void) = ^IndirectReadSideEffect[-1] : &:r2293_56, ~m? +# 2293| mu2293_61(String) = ^IndirectMayWriteSideEffect[-1] : &:r2293_56 +# 2293| r2293_62(glval>) = VariableAddress[(__begin)] : +# 2293| r2293_63(glval) = FunctionAddress[operator++] : +# 2293| r2293_64(iterator &) = Call[operator++] : func:r2293_63, this:r2293_62 +# 2293| mu2293_65(unknown) = ^CallSideEffect : ~m? +# 2293| v2293_66(void) = ^IndirectReadSideEffect[-1] : &:r2293_62, ~m? +# 2293| mu2293_67(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2293_62 +# 2293| r2293_68(glval>) = CopyValue : r2293_64 #-----| Goto (back edge) -> Block 4 -# 2289| Block 6 -# 2289| r2289_7(glval) = VariableAddress[B] : -# 2289| r2289_8(glval) = FunctionAddress[~Bool] : -# 2289| v2289_9(void) = Call[~Bool] : func:r2289_8, this:r2289_7 -# 2289| mu2289_10(unknown) = ^CallSideEffect : ~m? -# 2289| v2289_11(void) = ^IndirectReadSideEffect[-1] : &:r2289_7, ~m? -# 2289| mu2289_12(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2289_7 -# 2291| v2291_1(void) = NoOp : -# 2278| v2278_6(void) = ReturnVoid : -# 2278| v2278_7(void) = AliasedUse : ~m? -# 2278| v2278_8(void) = ExitFunction : +# 2297| Block 6 +# 2297| r2297_1(glval) = VariableAddress[s] : +# 2297| mu2297_2(String) = Uninitialized[s] : &:r2297_1 +# 2297| r2297_3(glval) = FunctionAddress[String] : +# 2297| r2297_4(glval) = StringConstant["hello"] : +# 2297| r2297_5(char *) = Convert : r2297_4 +# 2297| v2297_6(void) = Call[String] : func:r2297_3, this:r2297_1, 0:r2297_5 +# 2297| mu2297_7(unknown) = ^CallSideEffect : ~m? +# 2297| v2297_8(void) = ^BufferReadSideEffect[0] : &:r2297_5, ~m? +# 2297| mu2297_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_1 +# 2297| r2297_10(glval) = VariableAddress[s2] : +# 2297| mu2297_11(String) = Uninitialized[s2] : &:r2297_10 +# 2297| r2297_12(glval) = FunctionAddress[String] : +# 2297| r2297_13(glval) = StringConstant["world"] : +# 2297| r2297_14(char *) = Convert : r2297_13 +# 2297| v2297_15(void) = Call[String] : func:r2297_12, this:r2297_10, 0:r2297_14 +# 2297| mu2297_16(unknown) = ^CallSideEffect : ~m? +# 2297| v2297_17(void) = ^BufferReadSideEffect[0] : &:r2297_14, ~m? +# 2297| mu2297_18(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_10 +#-----| Goto -> Block 7 -# 2293| void VoidFunc() -# 2293| Block 0 -# 2293| v2293_1(void) = EnterFunction : -# 2293| mu2293_2(unknown) = AliasedDefinition : -# 2293| mu2293_3(unknown) = InitializeNonLocal : -# 2293| v2293_4(void) = NoOp : -# 2293| v2293_5(void) = ReturnVoid : -# 2293| v2293_6(void) = AliasedUse : ~m? -# 2293| v2293_7(void) = ExitFunction : +# 2297| Block 7 +# 2297| r2297_19(glval) = VariableAddress[c] : +# 2297| r2297_20(char) = Load[c] : &:r2297_19, ~m? +# 2297| r2297_21(int) = Convert : r2297_20 +# 2297| r2297_22(int) = Constant[0] : +# 2297| r2297_23(bool) = CompareNE : r2297_21, r2297_22 +# 2297| v2297_24(void) = ConditionalBranch : r2297_23 +#-----| False -> Block 9 +#-----| True -> Block 8 -# 2295| void IfReturnDestructors(bool) -# 2295| Block 0 -# 2295| v2295_1(void) = EnterFunction : -# 2295| mu2295_2(unknown) = AliasedDefinition : -# 2295| mu2295_3(unknown) = InitializeNonLocal : -# 2295| r2295_4(glval) = VariableAddress[b] : -# 2295| mu2295_5(bool) = InitializeParameter[b] : &:r2295_4 -# 2296| r2296_1(glval) = VariableAddress[s] : -# 2296| mu2296_2(String) = Uninitialized[s] : &:r2296_1 -# 2296| r2296_3(glval) = FunctionAddress[String] : -# 2296| v2296_4(void) = Call[String] : func:r2296_3, this:r2296_1 -# 2296| mu2296_5(unknown) = ^CallSideEffect : ~m? -# 2296| mu2296_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2296_1 -# 2297| r2297_1(glval) = VariableAddress[b] : -# 2297| r2297_2(bool) = Load[b] : &:r2297_1, ~m? -# 2297| v2297_3(void) = ConditionalBranch : r2297_2 +# 2298| Block 8 +# 2298| r2298_1(char) = Constant[0] : +# 2298| r2298_2(glval) = VariableAddress[c] : +# 2298| mu2298_3(char) = Store[c] : &:r2298_2, r2298_1 +# 2297| r2297_25(glval) = VariableAddress[s] : +# 2297| r2297_26(glval) = FunctionAddress[pop_back] : +# 2297| r2297_27(char) = Call[pop_back] : func:r2297_26, this:r2297_25 +# 2297| mu2297_28(unknown) = ^CallSideEffect : ~m? +# 2297| v2297_29(void) = ^IndirectReadSideEffect[-1] : &:r2297_25, ~m? +# 2297| mu2297_30(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_25 +# 2297| r2297_31(glval) = VariableAddress[c] : +# 2297| mu2297_32(char) = Store[c] : &:r2297_31, r2297_27 +#-----| Goto (back edge) -> Block 7 + +# 2297| Block 9 +# 2297| r2297_33(glval) = VariableAddress[s2] : +# 2297| r2297_34(glval) = FunctionAddress[~String] : +# 2297| v2297_35(void) = Call[~String] : func:r2297_34, this:r2297_33 +# 2297| mu2297_36(unknown) = ^CallSideEffect : ~m? +# 2297| v2297_37(void) = ^IndirectReadSideEffect[-1] : &:r2297_33, ~m? +# 2297| mu2297_38(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_33 +# 2297| r2297_39(glval) = VariableAddress[s] : +# 2297| r2297_40(glval) = FunctionAddress[~String] : +# 2297| v2297_41(void) = Call[~String] : func:r2297_40, this:r2297_39 +# 2297| mu2297_42(unknown) = ^CallSideEffect : ~m? +# 2297| v2297_43(void) = ^IndirectReadSideEffect[-1] : &:r2297_39, ~m? +# 2297| mu2297_44(String) = ^IndirectMayWriteSideEffect[-1] : &:r2297_39 +# 2300| v2300_1(void) = NoOp : +# 2287| v2287_4(void) = ReturnVoid : +# 2287| v2287_5(void) = AliasedUse : ~m? +# 2287| v2287_6(void) = ExitFunction : + +# 2302| void IfDestructors2(bool) +# 2302| Block 0 +# 2302| v2302_1(void) = EnterFunction : +# 2302| mu2302_2(unknown) = AliasedDefinition : +# 2302| mu2302_3(unknown) = InitializeNonLocal : +# 2302| r2302_4(glval) = VariableAddress[b] : +# 2302| mu2302_5(bool) = InitializeParameter[b] : &:r2302_4 +# 2303| r2303_1(glval) = VariableAddress[s] : +# 2303| mu2303_2(String) = Uninitialized[s] : &:r2303_1 +# 2303| r2303_3(glval) = FunctionAddress[String] : +# 2303| r2303_4(glval) = StringConstant["hello"] : +# 2303| r2303_5(char *) = Convert : r2303_4 +# 2303| v2303_6(void) = Call[String] : func:r2303_3, this:r2303_1, 0:r2303_5 +# 2303| mu2303_7(unknown) = ^CallSideEffect : ~m? +# 2303| v2303_8(void) = ^BufferReadSideEffect[0] : &:r2303_5, ~m? +# 2303| mu2303_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r2303_1 +# 2303| r2303_10(glval) = VariableAddress[b] : +# 2303| r2303_11(bool) = Load[b] : &:r2303_10, ~m? +# 2303| v2303_12(void) = ConditionalBranch : r2303_11 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2304| Block 1 +# 2304| r2304_1(glval) = VariableAddress[x] : +# 2304| r2304_2(int) = Constant[0] : +# 2304| mu2304_3(int) = Store[x] : &:r2304_1, r2304_2 +#-----| Goto -> Block 3 + +# 2306| Block 2 +# 2306| r2306_1(glval) = VariableAddress[y] : +# 2306| r2306_2(int) = Constant[0] : +# 2306| mu2306_3(int) = Store[y] : &:r2306_1, r2306_2 +#-----| Goto -> Block 3 + +# 2307| Block 3 +# 2307| r2307_1(glval) = VariableAddress[s] : +# 2307| r2307_2(glval) = FunctionAddress[~String] : +# 2307| v2307_3(void) = Call[~String] : func:r2307_2, this:r2307_1 +# 2307| mu2307_4(unknown) = ^CallSideEffect : ~m? +# 2307| v2307_5(void) = ^IndirectReadSideEffect[-1] : &:r2307_1, ~m? +# 2307| mu2307_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_1 +# 2308| v2308_1(void) = NoOp : +# 2302| v2302_6(void) = ReturnVoid : +# 2302| v2302_7(void) = AliasedUse : ~m? +# 2302| v2302_8(void) = ExitFunction : + +# 2317| void IfDestructors3(bool) +# 2317| Block 0 +# 2317| v2317_1(void) = EnterFunction : +# 2317| mu2317_2(unknown) = AliasedDefinition : +# 2317| mu2317_3(unknown) = InitializeNonLocal : +# 2317| r2317_4(glval) = VariableAddress[b] : +# 2317| mu2317_5(bool) = InitializeParameter[b] : &:r2317_4 +# 2318| r2318_1(glval) = VariableAddress[B] : +# 2318| mu2318_2(Bool) = Uninitialized[B] : &:r2318_1 +# 2318| r2318_3(glval) = FunctionAddress[Bool] : +# 2318| r2318_4(glval) = VariableAddress[b] : +# 2318| r2318_5(bool) = Load[b] : &:r2318_4, ~m? +# 2318| v2318_6(void) = Call[Bool] : func:r2318_3, this:r2318_1, 0:r2318_5 +# 2318| mu2318_7(unknown) = ^CallSideEffect : ~m? +# 2318| mu2318_8(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2318_1 +# 2318| r2318_9(glval) = VariableAddress[B] : +# 2318| r2318_10(glval) = FunctionAddress[operator bool] : +# 2318| r2318_11(bool) = Call[operator bool] : func:r2318_10, this:r2318_9 +# 2318| mu2318_12(unknown) = ^CallSideEffect : ~m? +# 2318| v2318_13(void) = ^IndirectReadSideEffect[-1] : &:r2318_9, ~m? +# 2318| mu2318_14(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2318_9 +# 2318| r2318_15(bool) = CopyValue : r2318_11 +# 2318| v2318_16(void) = ConditionalBranch : r2318_15 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2319| Block 1 +# 2319| r2319_1(glval) = VariableAddress[s1] : +# 2319| mu2319_2(String) = Uninitialized[s1] : &:r2319_1 +# 2319| r2319_3(glval) = FunctionAddress[String] : +# 2319| v2319_4(void) = Call[String] : func:r2319_3, this:r2319_1 +# 2319| mu2319_5(unknown) = ^CallSideEffect : ~m? +# 2319| mu2319_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2319_1 +# 2320| r2320_1(glval) = VariableAddress[s1] : +# 2320| r2320_2(glval) = FunctionAddress[~String] : +# 2320| v2320_3(void) = Call[~String] : func:r2320_2, this:r2320_1 +# 2320| mu2320_4(unknown) = ^CallSideEffect : ~m? +# 2320| v2320_5(void) = ^IndirectReadSideEffect[-1] : &:r2320_1, ~m? +# 2320| mu2320_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2320_1 +#-----| Goto -> Block 3 + +# 2321| Block 2 +# 2321| r2321_1(glval) = VariableAddress[s2] : +# 2321| mu2321_2(String) = Uninitialized[s2] : &:r2321_1 +# 2321| r2321_3(glval) = FunctionAddress[String] : +# 2321| v2321_4(void) = Call[String] : func:r2321_3, this:r2321_1 +# 2321| mu2321_5(unknown) = ^CallSideEffect : ~m? +# 2321| mu2321_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2321_1 +# 2322| r2322_1(glval) = VariableAddress[s2] : +# 2322| r2322_2(glval) = FunctionAddress[~String] : +# 2322| v2322_3(void) = Call[~String] : func:r2322_2, this:r2322_1 +# 2322| mu2322_4(unknown) = ^CallSideEffect : ~m? +# 2322| v2322_5(void) = ^IndirectReadSideEffect[-1] : &:r2322_1, ~m? +# 2322| mu2322_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2322_1 +#-----| Goto -> Block 3 + +# 2322| Block 3 +# 2322| r2322_7(glval) = VariableAddress[B] : +# 2322| r2322_8(glval) = FunctionAddress[~Bool] : +# 2322| v2322_9(void) = Call[~Bool] : func:r2322_8, this:r2322_7 +# 2322| mu2322_10(unknown) = ^CallSideEffect : ~m? +# 2322| v2322_11(void) = ^IndirectReadSideEffect[-1] : &:r2322_7, ~m? +# 2322| mu2322_12(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2322_7 +# 2323| v2323_1(void) = NoOp : +# 2317| v2317_6(void) = ReturnVoid : +# 2317| v2317_7(void) = AliasedUse : ~m? +# 2317| v2317_8(void) = ExitFunction : + +# 2325| void WhileLoopDestructors(bool) +# 2325| Block 0 +# 2325| v2325_1(void) = EnterFunction : +# 2325| mu2325_2(unknown) = AliasedDefinition : +# 2325| mu2325_3(unknown) = InitializeNonLocal : +# 2325| r2325_4(glval) = VariableAddress[b] : +# 2325| mu2325_5(bool) = InitializeParameter[b] : &:r2325_4 +# 2327| r2327_1(glval) = VariableAddress[s] : +# 2327| mu2327_2(String) = Uninitialized[s] : &:r2327_1 +# 2327| r2327_3(glval) = FunctionAddress[String] : +# 2327| v2327_4(void) = Call[String] : func:r2327_3, this:r2327_1 +# 2327| mu2327_5(unknown) = ^CallSideEffect : ~m? +# 2327| mu2327_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2327_1 +#-----| Goto -> Block 1 + +# 2328| Block 1 +# 2328| r2328_1(glval) = VariableAddress[b] : +# 2328| r2328_2(bool) = Load[b] : &:r2328_1, ~m? +# 2328| v2328_3(void) = ConditionalBranch : r2328_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 2295| Block 1 -# 2295| v2295_6(void) = ReturnVoid : -# 2295| v2295_7(void) = AliasedUse : ~m? -# 2295| v2295_8(void) = ExitFunction : +# 2329| Block 2 +# 2329| r2329_1(bool) = Constant[0] : +# 2329| r2329_2(glval) = VariableAddress[b] : +# 2329| mu2329_3(bool) = Store[b] : &:r2329_2, r2329_1 +#-----| Goto (back edge) -> Block 1 -# 2298| Block 2 -# 2298| v2298_1(void) = NoOp : -# 2304| r2304_1(glval) = VariableAddress[s] : -# 2304| r2304_2(glval) = FunctionAddress[~String] : -# 2304| v2304_3(void) = Call[~String] : func:r2304_2, this:r2304_1 -# 2304| mu2304_4(unknown) = ^CallSideEffect : ~m? -# 2304| v2304_5(void) = ^IndirectReadSideEffect[-1] : &:r2304_1, ~m? -# 2304| mu2304_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2304_1 +# 2331| Block 3 +# 2331| r2331_1(glval) = VariableAddress[s] : +# 2331| r2331_2(glval) = FunctionAddress[~String] : +# 2331| v2331_3(void) = Call[~String] : func:r2331_2, this:r2331_1 +# 2331| mu2331_4(unknown) = ^CallSideEffect : ~m? +# 2331| v2331_5(void) = ^IndirectReadSideEffect[-1] : &:r2331_1, ~m? +# 2331| mu2331_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2331_1 +#-----| Goto -> Block 4 + +# 2334| Block 4 +# 2334| r2334_1(glval) = VariableAddress[B] : +# 2334| mu2334_2(Bool) = Uninitialized[B] : &:r2334_1 +# 2334| r2334_3(glval) = FunctionAddress[Bool] : +# 2334| r2334_4(glval) = VariableAddress[b] : +# 2334| r2334_5(bool) = Load[b] : &:r2334_4, ~m? +# 2334| v2334_6(void) = Call[Bool] : func:r2334_3, this:r2334_1, 0:r2334_5 +# 2334| mu2334_7(unknown) = ^CallSideEffect : ~m? +# 2334| mu2334_8(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2334_1 +# 2334| r2334_9(glval) = VariableAddress[B] : +# 2334| r2334_10(glval) = FunctionAddress[operator bool] : +# 2334| r2334_11(bool) = Call[operator bool] : func:r2334_10, this:r2334_9 +# 2334| mu2334_12(unknown) = ^CallSideEffect : ~m? +# 2334| v2334_13(void) = ^IndirectReadSideEffect[-1] : &:r2334_9, ~m? +# 2334| mu2334_14(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2334_9 +# 2334| r2334_15(bool) = CopyValue : r2334_11 +# 2334| v2334_16(void) = ConditionalBranch : r2334_15 +#-----| False -> Block 6 +#-----| True -> Block 5 + +# 2335| Block 5 +# 2335| r2335_1(bool) = Constant[0] : +# 2335| r2335_2(glval) = VariableAddress[b] : +# 2335| mu2335_3(bool) = Store[b] : &:r2335_2, r2335_1 +# 2336| r2336_1(glval) = VariableAddress[B] : +# 2336| r2336_2(glval) = FunctionAddress[~Bool] : +# 2336| v2336_3(void) = Call[~Bool] : func:r2336_2, this:r2336_1 +# 2336| mu2336_4(unknown) = ^CallSideEffect : ~m? +# 2336| v2336_5(void) = ^IndirectReadSideEffect[-1] : &:r2336_1, ~m? +# 2336| mu2336_6(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2336_1 +#-----| Goto (back edge) -> Block 4 + +# 2336| Block 6 +# 2336| r2336_7(glval) = VariableAddress[B] : +# 2336| r2336_8(glval) = FunctionAddress[~Bool] : +# 2336| v2336_9(void) = Call[~Bool] : func:r2336_8, this:r2336_7 +# 2336| mu2336_10(unknown) = ^CallSideEffect : ~m? +# 2336| v2336_11(void) = ^IndirectReadSideEffect[-1] : &:r2336_7, ~m? +# 2336| mu2336_12(Bool) = ^IndirectMayWriteSideEffect[-1] : &:r2336_7 +# 2338| v2338_1(void) = NoOp : +# 2325| v2325_6(void) = ReturnVoid : +# 2325| v2325_7(void) = AliasedUse : ~m? +# 2325| v2325_8(void) = ExitFunction : + +# 2340| void VoidFunc() +# 2340| Block 0 +# 2340| v2340_1(void) = EnterFunction : +# 2340| mu2340_2(unknown) = AliasedDefinition : +# 2340| mu2340_3(unknown) = InitializeNonLocal : +# 2340| v2340_4(void) = NoOp : +# 2340| v2340_5(void) = ReturnVoid : +# 2340| v2340_6(void) = AliasedUse : ~m? +# 2340| v2340_7(void) = ExitFunction : + +# 2342| void IfReturnDestructors(bool) +# 2342| Block 0 +# 2342| v2342_1(void) = EnterFunction : +# 2342| mu2342_2(unknown) = AliasedDefinition : +# 2342| mu2342_3(unknown) = InitializeNonLocal : +# 2342| r2342_4(glval) = VariableAddress[b] : +# 2342| mu2342_5(bool) = InitializeParameter[b] : &:r2342_4 +# 2343| r2343_1(glval) = VariableAddress[s] : +# 2343| mu2343_2(String) = Uninitialized[s] : &:r2343_1 +# 2343| r2343_3(glval) = FunctionAddress[String] : +# 2343| v2343_4(void) = Call[String] : func:r2343_3, this:r2343_1 +# 2343| mu2343_5(unknown) = ^CallSideEffect : ~m? +# 2343| mu2343_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2343_1 +# 2344| r2344_1(glval) = VariableAddress[b] : +# 2344| r2344_2(bool) = Load[b] : &:r2344_1, ~m? +# 2344| v2344_3(void) = ConditionalBranch : r2344_2 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2342| Block 1 +# 2342| v2342_6(void) = ReturnVoid : +# 2342| v2342_7(void) = AliasedUse : ~m? +# 2342| v2342_8(void) = ExitFunction : + +# 2345| Block 2 +# 2345| v2345_1(void) = NoOp : +# 2351| r2351_1(glval) = VariableAddress[s] : +# 2351| r2351_2(glval) = FunctionAddress[~String] : +# 2351| v2351_3(void) = Call[~String] : func:r2351_2, this:r2351_1 +# 2351| mu2351_4(unknown) = ^CallSideEffect : ~m? +# 2351| v2351_5(void) = ^IndirectReadSideEffect[-1] : &:r2351_1, ~m? +# 2351| mu2351_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2351_1 #-----| Goto -> Block 1 -# 2300| Block 3 -# 2300| r2300_1(glval) = VariableAddress[b] : -# 2300| r2300_2(bool) = Load[b] : &:r2300_1, ~m? -# 2300| v2300_3(void) = ConditionalBranch : r2300_2 +# 2347| Block 3 +# 2347| r2347_1(glval) = VariableAddress[b] : +# 2347| r2347_2(bool) = Load[b] : &:r2347_1, ~m? +# 2347| v2347_3(void) = ConditionalBranch : r2347_2 #-----| False -> Block 5 #-----| True -> Block 4 -# 2301| Block 4 -# 2301| r2301_1(glval) = FunctionAddress[VoidFunc] : -# 2301| v2301_2(void) = Call[VoidFunc] : func:r2301_1 -# 2301| mu2301_3(unknown) = ^CallSideEffect : ~m? -# 2301| v2301_4(void) = NoOp : -# 2304| r2304_7(glval) = VariableAddress[s] : -# 2304| r2304_8(glval) = FunctionAddress[~String] : -# 2304| v2304_9(void) = Call[~String] : func:r2304_8, this:r2304_7 -# 2304| mu2304_10(unknown) = ^CallSideEffect : ~m? -# 2304| v2304_11(void) = ^IndirectReadSideEffect[-1] : &:r2304_7, ~m? -# 2304| mu2304_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2304_7 +# 2348| Block 4 +# 2348| r2348_1(glval) = FunctionAddress[VoidFunc] : +# 2348| v2348_2(void) = Call[VoidFunc] : func:r2348_1 +# 2348| mu2348_3(unknown) = ^CallSideEffect : ~m? +# 2348| v2348_4(void) = NoOp : +# 2351| r2351_7(glval) = VariableAddress[s] : +# 2351| r2351_8(glval) = FunctionAddress[~String] : +# 2351| v2351_9(void) = Call[~String] : func:r2351_8, this:r2351_7 +# 2351| mu2351_10(unknown) = ^CallSideEffect : ~m? +# 2351| v2351_11(void) = ^IndirectReadSideEffect[-1] : &:r2351_7, ~m? +# 2351| mu2351_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2351_7 #-----| Goto -> Block 1 -# 2303| Block 5 -# 2303| r2303_1(glval) = VariableAddress[s] : -# 2304| v2304_13(void) = NoOp : -# 2304| r2304_14(glval) = VariableAddress[s] : -# 2304| r2304_15(glval) = FunctionAddress[~String] : -# 2304| v2304_16(void) = Call[~String] : func:r2304_15, this:r2304_14 -# 2304| mu2304_17(unknown) = ^CallSideEffect : ~m? -# 2304| v2304_18(void) = ^IndirectReadSideEffect[-1] : &:r2304_14, ~m? -# 2304| mu2304_19(String) = ^IndirectMayWriteSideEffect[-1] : &:r2304_14 +# 2350| Block 5 +# 2350| r2350_1(glval) = VariableAddress[s] : +# 2351| v2351_13(void) = NoOp : +# 2351| r2351_14(glval) = VariableAddress[s] : +# 2351| r2351_15(glval) = FunctionAddress[~String] : +# 2351| v2351_16(void) = Call[~String] : func:r2351_15, this:r2351_14 +# 2351| mu2351_17(unknown) = ^CallSideEffect : ~m? +# 2351| v2351_18(void) = ^IndirectReadSideEffect[-1] : &:r2351_14, ~m? +# 2351| mu2351_19(String) = ^IndirectMayWriteSideEffect[-1] : &:r2351_14 #-----| Goto -> Block 1 -# 2306| int IfReturnDestructors3(bool) -# 2306| Block 0 -# 2306| v2306_1(void) = EnterFunction : -# 2306| mu2306_2(unknown) = AliasedDefinition : -# 2306| mu2306_3(unknown) = InitializeNonLocal : -# 2306| r2306_4(glval) = VariableAddress[b] : -# 2306| mu2306_5(bool) = InitializeParameter[b] : &:r2306_4 -# 2307| r2307_1(glval) = VariableAddress[s] : -# 2307| mu2307_2(String) = Uninitialized[s] : &:r2307_1 -# 2307| r2307_3(glval) = FunctionAddress[String] : -# 2307| v2307_4(void) = Call[String] : func:r2307_3, this:r2307_1 -# 2307| mu2307_5(unknown) = ^CallSideEffect : ~m? -# 2307| mu2307_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2307_1 -# 2308| r2308_1(glval) = VariableAddress[b] : -# 2308| r2308_2(bool) = Load[b] : &:r2308_1, ~m? -# 2308| v2308_3(void) = ConditionalBranch : r2308_2 +# 2353| int IfReturnDestructors3(bool) +# 2353| Block 0 +# 2353| v2353_1(void) = EnterFunction : +# 2353| mu2353_2(unknown) = AliasedDefinition : +# 2353| mu2353_3(unknown) = InitializeNonLocal : +# 2353| r2353_4(glval) = VariableAddress[b] : +# 2353| mu2353_5(bool) = InitializeParameter[b] : &:r2353_4 +# 2354| r2354_1(glval) = VariableAddress[s] : +# 2354| mu2354_2(String) = Uninitialized[s] : &:r2354_1 +# 2354| r2354_3(glval) = FunctionAddress[String] : +# 2354| v2354_4(void) = Call[String] : func:r2354_3, this:r2354_1 +# 2354| mu2354_5(unknown) = ^CallSideEffect : ~m? +# 2354| mu2354_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2354_1 +# 2355| r2355_1(glval) = VariableAddress[b] : +# 2355| r2355_2(bool) = Load[b] : &:r2355_1, ~m? +# 2355| v2355_3(void) = ConditionalBranch : r2355_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 2306| Block 1 -# 2306| r2306_6(glval) = VariableAddress[#return] : -# 2306| v2306_7(void) = ReturnValue : &:r2306_6, ~m? -# 2306| v2306_8(void) = AliasedUse : ~m? -# 2306| v2306_9(void) = ExitFunction : +# 2353| Block 1 +# 2353| r2353_6(glval) = VariableAddress[#return] : +# 2353| v2353_7(void) = ReturnValue : &:r2353_6, ~m? +# 2353| v2353_8(void) = AliasedUse : ~m? +# 2353| v2353_9(void) = ExitFunction : -# 2309| Block 2 -# 2309| r2309_1(glval) = VariableAddress[#return] : -# 2309| r2309_2(int) = Constant[1] : -# 2309| mu2309_3(int) = Store[#return] : &:r2309_1, r2309_2 -# 2312| r2312_1(glval) = VariableAddress[s] : -# 2312| r2312_2(glval) = FunctionAddress[~String] : -# 2312| v2312_3(void) = Call[~String] : func:r2312_2, this:r2312_1 -# 2312| mu2312_4(unknown) = ^CallSideEffect : ~m? -# 2312| v2312_5(void) = ^IndirectReadSideEffect[-1] : &:r2312_1, ~m? -# 2312| mu2312_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2312_1 +# 2356| Block 2 +# 2356| r2356_1(glval) = VariableAddress[#return] : +# 2356| r2356_2(int) = Constant[1] : +# 2356| mu2356_3(int) = Store[#return] : &:r2356_1, r2356_2 +# 2359| r2359_1(glval) = VariableAddress[s] : +# 2359| r2359_2(glval) = FunctionAddress[~String] : +# 2359| v2359_3(void) = Call[~String] : func:r2359_2, this:r2359_1 +# 2359| mu2359_4(unknown) = ^CallSideEffect : ~m? +# 2359| v2359_5(void) = ^IndirectReadSideEffect[-1] : &:r2359_1, ~m? +# 2359| mu2359_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2359_1 #-----| Goto -> Block 1 -# 2311| Block 3 -# 2311| r2311_1(glval) = VariableAddress[#return] : -# 2311| r2311_2(int) = Constant[0] : -# 2311| mu2311_3(int) = Store[#return] : &:r2311_1, r2311_2 -# 2312| r2312_7(glval) = VariableAddress[s] : -# 2312| r2312_8(glval) = FunctionAddress[~String] : -# 2312| v2312_9(void) = Call[~String] : func:r2312_8, this:r2312_7 -# 2312| mu2312_10(unknown) = ^CallSideEffect : ~m? -# 2312| v2312_11(void) = ^IndirectReadSideEffect[-1] : &:r2312_7, ~m? -# 2312| mu2312_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2312_7 +# 2358| Block 3 +# 2358| r2358_1(glval) = VariableAddress[#return] : +# 2358| r2358_2(int) = Constant[0] : +# 2358| mu2358_3(int) = Store[#return] : &:r2358_1, r2358_2 +# 2359| r2359_7(glval) = VariableAddress[s] : +# 2359| r2359_8(glval) = FunctionAddress[~String] : +# 2359| v2359_9(void) = Call[~String] : func:r2359_8, this:r2359_7 +# 2359| mu2359_10(unknown) = ^CallSideEffect : ~m? +# 2359| v2359_11(void) = ^IndirectReadSideEffect[-1] : &:r2359_7, ~m? +# 2359| mu2359_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r2359_7 #-----| Goto -> Block 1 -# 2314| void VoidReturnDestructors() -# 2314| Block 0 -# 2314| v2314_1(void) = EnterFunction : -# 2314| mu2314_2(unknown) = AliasedDefinition : -# 2314| mu2314_3(unknown) = InitializeNonLocal : -# 2315| r2315_1(glval) = VariableAddress[s] : -# 2315| mu2315_2(String) = Uninitialized[s] : &:r2315_1 -# 2315| r2315_3(glval) = FunctionAddress[String] : -# 2315| v2315_4(void) = Call[String] : func:r2315_3, this:r2315_1 -# 2315| mu2315_5(unknown) = ^CallSideEffect : ~m? -# 2315| mu2315_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2315_1 -# 2316| r2316_1(glval) = FunctionAddress[VoidFunc] : -# 2316| v2316_2(void) = Call[VoidFunc] : func:r2316_1 -# 2316| mu2316_3(unknown) = ^CallSideEffect : ~m? -# 2316| v2316_4(void) = NoOp : -# 2317| r2317_1(glval) = VariableAddress[s] : -# 2317| r2317_2(glval) = FunctionAddress[~String] : -# 2317| v2317_3(void) = Call[~String] : func:r2317_2, this:r2317_1 -# 2317| mu2317_4(unknown) = ^CallSideEffect : ~m? -# 2317| v2317_5(void) = ^IndirectReadSideEffect[-1] : &:r2317_1, ~m? -# 2317| mu2317_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2317_1 -# 2314| v2314_4(void) = ReturnVoid : -# 2314| v2314_5(void) = AliasedUse : ~m? -# 2314| v2314_6(void) = ExitFunction : +# 2361| void VoidReturnDestructors() +# 2361| Block 0 +# 2361| v2361_1(void) = EnterFunction : +# 2361| mu2361_2(unknown) = AliasedDefinition : +# 2361| mu2361_3(unknown) = InitializeNonLocal : +# 2362| r2362_1(glval) = VariableAddress[s] : +# 2362| mu2362_2(String) = Uninitialized[s] : &:r2362_1 +# 2362| r2362_3(glval) = FunctionAddress[String] : +# 2362| v2362_4(void) = Call[String] : func:r2362_3, this:r2362_1 +# 2362| mu2362_5(unknown) = ^CallSideEffect : ~m? +# 2362| mu2362_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2362_1 +# 2363| r2363_1(glval) = FunctionAddress[VoidFunc] : +# 2363| v2363_2(void) = Call[VoidFunc] : func:r2363_1 +# 2363| mu2363_3(unknown) = ^CallSideEffect : ~m? +# 2363| v2363_4(void) = NoOp : +# 2364| r2364_1(glval) = VariableAddress[s] : +# 2364| r2364_2(glval) = FunctionAddress[~String] : +# 2364| v2364_3(void) = Call[~String] : func:r2364_2, this:r2364_1 +# 2364| mu2364_4(unknown) = ^CallSideEffect : ~m? +# 2364| v2364_5(void) = ^IndirectReadSideEffect[-1] : &:r2364_1, ~m? +# 2364| mu2364_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r2364_1 +# 2361| v2361_4(void) = ReturnVoid : +# 2361| v2361_5(void) = AliasedUse : ~m? +# 2361| v2361_6(void) = ExitFunction : -# 2327| return_routine_type::VoidToIntMemberFunc return_routine_type::GetVoidToIntFunc() -# 2327| Block 0 -# 2327| v2327_1(void) = EnterFunction : -# 2327| mu2327_2(unknown) = AliasedDefinition : -# 2327| mu2327_3(unknown) = InitializeNonLocal : -# 2329| r2329_1(glval<..:: *>) = VariableAddress[#return] : -# 2329| r2329_2(..()(..)) = FunctionAddress[VoidToInt] : -# 2329| mu2329_3(..:: *) = Store[#return] : &:r2329_1, r2329_2 -# 2327| r2327_4(glval<..:: *>) = VariableAddress[#return] : -# 2327| v2327_5(void) = ReturnValue : &:r2327_4, ~m? -# 2327| v2327_6(void) = AliasedUse : ~m? -# 2327| v2327_7(void) = ExitFunction : +# 2374| return_routine_type::VoidToIntMemberFunc return_routine_type::GetVoidToIntFunc() +# 2374| Block 0 +# 2374| v2374_1(void) = EnterFunction : +# 2374| mu2374_2(unknown) = AliasedDefinition : +# 2374| mu2374_3(unknown) = InitializeNonLocal : +# 2376| r2376_1(glval<..:: *>) = VariableAddress[#return] : +# 2376| r2376_2(..()(..)) = FunctionAddress[VoidToInt] : +# 2376| mu2376_3(..:: *) = Store[#return] : &:r2376_1, r2376_2 +# 2374| r2374_4(glval<..:: *>) = VariableAddress[#return] : +# 2374| v2374_5(void) = ReturnValue : &:r2374_4, ~m? +# 2374| v2374_6(void) = AliasedUse : ~m? +# 2374| v2374_7(void) = ExitFunction : perf-regression.cpp: # 6| void Big::Big() diff --git a/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_consistency.expected b/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_consistency.expected index b2b0a6bf736..48f73fa8d87 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_consistency.expected @@ -9,7 +9,6 @@ sideEffectWithoutPrimary instructionWithoutSuccessor | ms_try_mix.cpp:35:13:35:19 | ThrowValue: throw ... | Instruction 'ThrowValue: throw ...' has no successors in function '$@'. | ms_try_mix.cpp:29:6:29:19 | void ms_finally_mix(int) | void ms_finally_mix(int) | | ms_try_mix.cpp:53:5:53:11 | ThrowValue: throw ... | Instruction 'ThrowValue: throw ...' has no successors in function '$@'. | ms_try_mix.cpp:49:6:49:28 | void ms_empty_finally_at_end() | void ms_empty_finally_at_end() | -| statements.cpp:25:5:25:9 | ReThrow: re-throw exception | Instruction 'ReThrow: re-throw exception ' has no successors in function '$@'. | statements.cpp:21:6:21:16 | void early_throw(int) | void early_throw(int) | | stmt_expr.cpp:27:5:27:15 | Store: ... = ... | Instruction 'Store: ... = ...' has no successors in function '$@'. | stmt_expr.cpp:21:13:21:13 | void stmtexpr::g(int) | void stmtexpr::g(int) | ambiguousSuccessors unexplainedLoop diff --git a/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected b/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected index a3dae8f8a36..9c9cad3aefb 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected @@ -10,9 +10,6 @@ sideEffectWithoutPrimary instructionWithoutSuccessor | ms_try_mix.cpp:35:13:35:19 | ThrowValue: throw ... | Instruction 'ThrowValue: throw ...' has no successors in function '$@'. | ms_try_mix.cpp:29:6:29:19 | void ms_finally_mix(int) | void ms_finally_mix(int) | | ms_try_mix.cpp:53:5:53:11 | ThrowValue: throw ... | Instruction 'ThrowValue: throw ...' has no successors in function '$@'. | ms_try_mix.cpp:49:6:49:28 | void ms_empty_finally_at_end() | void ms_empty_finally_at_end() | -| statements.cpp:25:5:25:9 | ReThrow: re-throw exception | Instruction 'ReThrow: re-throw exception ' has no successors in function '$@'. | statements.cpp:21:6:21:16 | void early_throw(int) | void early_throw(int) | -| statements.cpp:26:3:26:3 | IndirectMayWriteSideEffect: inner | Instruction 'IndirectMayWriteSideEffect: inner' has no successors in function '$@'. | statements.cpp:21:6:21:16 | void early_throw(int) | void early_throw(int) | -| statements.cpp:28:1:28:1 | IndirectMayWriteSideEffect: before | Instruction 'IndirectMayWriteSideEffect: before' has no successors in function '$@'. | statements.cpp:21:6:21:16 | void early_throw(int) | void early_throw(int) | | stmt_expr.cpp:27:5:27:15 | Store: ... = ... | Instruction 'Store: ... = ...' has no successors in function '$@'. | stmt_expr.cpp:21:13:21:13 | void stmtexpr::g(int) | void stmtexpr::g(int) | | stmt_expr.cpp:29:11:32:11 | CopyValue: (statement expression) | Instruction 'CopyValue: (statement expression)' has no successors in function '$@'. | stmt_expr.cpp:21:13:21:13 | void stmtexpr::g(int) | void stmtexpr::g(int) | | stmt_in_type.cpp:5:53:5:53 | Constant: 1 | Instruction 'Constant: 1' has no successors in function '$@'. | stmt_in_type.cpp:2:6:2:12 | void cpp_fun() | void cpp_fun() | diff --git a/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_consistency.expected b/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_consistency.expected index b2b0a6bf736..48f73fa8d87 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_consistency.expected @@ -9,7 +9,6 @@ sideEffectWithoutPrimary instructionWithoutSuccessor | ms_try_mix.cpp:35:13:35:19 | ThrowValue: throw ... | Instruction 'ThrowValue: throw ...' has no successors in function '$@'. | ms_try_mix.cpp:29:6:29:19 | void ms_finally_mix(int) | void ms_finally_mix(int) | | ms_try_mix.cpp:53:5:53:11 | ThrowValue: throw ... | Instruction 'ThrowValue: throw ...' has no successors in function '$@'. | ms_try_mix.cpp:49:6:49:28 | void ms_empty_finally_at_end() | void ms_empty_finally_at_end() | -| statements.cpp:25:5:25:9 | ReThrow: re-throw exception | Instruction 'ReThrow: re-throw exception ' has no successors in function '$@'. | statements.cpp:21:6:21:16 | void early_throw(int) | void early_throw(int) | | stmt_expr.cpp:27:5:27:15 | Store: ... = ... | Instruction 'Store: ... = ...' has no successors in function '$@'. | stmt_expr.cpp:21:13:21:13 | void stmtexpr::g(int) | void stmtexpr::g(int) | ambiguousSuccessors unexplainedLoop diff --git a/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected b/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected index b9ac7f0a2d5..bd886810284 100644 --- a/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected +++ b/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected @@ -11,6 +11,7 @@ edges | test_free.cpp:128:10:128:11 | pointer to free output argument | test_free.cpp:129:10:129:11 | * ... | provenance | | | test_free.cpp:152:27:152:27 | pointer to free output argument | test_free.cpp:154:10:154:10 | a | provenance | | | test_free.cpp:207:10:207:10 | pointer to free output argument | test_free.cpp:209:10:209:10 | a | provenance | | +| test_free.cpp:301:12:301:14 | pointer to g_free output argument | test_free.cpp:302:12:302:14 | buf | provenance | | nodes | test_free.cpp:11:10:11:10 | pointer to free output argument | semmle.label | pointer to free output argument | | test_free.cpp:14:10:14:10 | a | semmle.label | a | @@ -36,6 +37,8 @@ nodes | test_free.cpp:154:10:154:10 | a | semmle.label | a | | test_free.cpp:207:10:207:10 | pointer to free output argument | semmle.label | pointer to free output argument | | test_free.cpp:209:10:209:10 | a | semmle.label | a | +| test_free.cpp:301:12:301:14 | pointer to g_free output argument | semmle.label | pointer to g_free output argument | +| test_free.cpp:302:12:302:14 | buf | semmle.label | buf | subpaths #select | test_free.cpp:14:10:14:10 | a | test_free.cpp:11:10:11:10 | pointer to free output argument | test_free.cpp:14:10:14:10 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:11:5:11:8 | call to free | call to free | @@ -50,3 +53,4 @@ subpaths | test_free.cpp:129:10:129:11 | * ... | test_free.cpp:128:10:128:11 | pointer to free output argument | test_free.cpp:129:10:129:11 | * ... | Memory pointed to by '* ...' may already have been freed by $@. | test_free.cpp:128:5:128:8 | call to free | call to free | | test_free.cpp:154:10:154:10 | a | test_free.cpp:152:27:152:27 | pointer to free output argument | test_free.cpp:154:10:154:10 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:152:22:152:25 | call to free | call to free | | test_free.cpp:209:10:209:10 | a | test_free.cpp:207:10:207:10 | pointer to free output argument | test_free.cpp:209:10:209:10 | a | Memory pointed to by 'a' may already have been freed by $@. | test_free.cpp:207:5:207:8 | call to free | call to free | +| test_free.cpp:302:12:302:14 | buf | test_free.cpp:301:12:301:14 | pointer to g_free output argument | test_free.cpp:302:12:302:14 | buf | Memory pointed to by 'buf' may already have been freed by $@. | test_free.cpp:301:5:301:10 | call to g_free | call to g_free | diff --git a/cpp/ql/test/query-tests/Critical/MemoryFreed/MemoryFreed.expected b/cpp/ql/test/query-tests/Critical/MemoryFreed/MemoryFreed.expected index 14b04cc5c2d..2e5f59ae0d2 100644 --- a/cpp/ql/test/query-tests/Critical/MemoryFreed/MemoryFreed.expected +++ b/cpp/ql/test/query-tests/Critical/MemoryFreed/MemoryFreed.expected @@ -102,6 +102,8 @@ | test_free.cpp:282:10:282:12 | buf | | test_free.cpp:288:8:288:10 | buf | | test_free.cpp:293:8:293:10 | buf | +| test_free.cpp:301:12:301:14 | buf | +| test_free.cpp:302:12:302:14 | buf | | virtual.cpp:18:10:18:10 | a | | virtual.cpp:19:10:19:10 | c | | virtual.cpp:38:10:38:10 | b | diff --git a/cpp/ql/test/query-tests/Critical/MemoryFreed/test_free.cpp b/cpp/ql/test/query-tests/Critical/MemoryFreed/test_free.cpp index 24c0fcd922c..8bffcad2856 100644 --- a/cpp/ql/test/query-tests/Critical/MemoryFreed/test_free.cpp +++ b/cpp/ql/test/query-tests/Critical/MemoryFreed/test_free.cpp @@ -293,4 +293,11 @@ void test_free_struct4(char* buf, MyStruct s) { free(buf); s.buf = buf; char c = s.buf[0]; // BAD +} + +void g_free (void*); + +void test_g_free(char* buf) { + g_free(buf); + g_free(buf); // BAD } \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/NonConstantFormat.expected b/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/NonConstantFormat.expected index a512dfbd914..c3c94158da8 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/NonConstantFormat.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/NonConstantFormat.expected @@ -1,21 +1,84 @@ -| NonConstantFormat.c:30:10:30:16 | access to array | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| NonConstantFormat.c:41:9:41:27 | call to any_random_function | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| NonConstantFormat.c:45:9:45:48 | call to gettext | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| nested.cpp:21:23:21:26 | fmt0 | The format string argument to snprintf should be constant to prevent security issues and other potential errors. | -| nested.cpp:79:32:79:38 | call to get_fmt | The format string argument to diagnostic should be constant to prevent security issues and other potential errors. | -| nested.cpp:87:18:87:20 | fmt | The format string argument to diagnostic should be constant to prevent security issues and other potential errors. | -| test.cpp:51:10:51:21 | call to make_message | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:130:20:130:26 | access to array | The format string argument to sprintf should be constant to prevent security issues and other potential errors. | -| test.cpp:157:12:157:15 | data | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:170:12:170:14 | res | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:195:31:195:33 | str | The format string argument to StringCchPrintfW should be constant to prevent security issues and other potential errors. | -| test.cpp:197:11:197:14 | wstr | The format string argument to wprintf should be constant to prevent security issues and other potential errors. | -| test.cpp:205:12:205:20 | ... + ... | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:206:12:206:16 | hello | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:211:12:211:16 | hello | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:217:12:217:16 | hello | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:223:12:223:16 | hello | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:228:12:228:18 | ++ ... | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:235:12:235:16 | hello | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:242:12:242:16 | hello | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:247:12:247:16 | hello | The format string argument to printf should be constant to prevent security issues and other potential errors. | +edges +| NonConstantFormat.c:28:27:28:30 | **argv | NonConstantFormat.c:30:10:30:16 | *access to array | provenance | | +| NonConstantFormat.c:45:11:45:47 | *call to any_random_function | NonConstantFormat.c:45:9:45:48 | *call to gettext | provenance | | +| nested.cpp:19:29:19:32 | *fmt0 | nested.cpp:21:23:21:26 | *fmt0 | provenance | | +| nested.cpp:27:32:27:34 | *fmt | nested.cpp:28:16:28:18 | *fmt | provenance | | +| nested.cpp:28:16:28:18 | *fmt | nested.cpp:19:29:19:32 | *fmt0 | provenance | | +| nested.cpp:34:37:34:39 | *fmt | nested.cpp:35:19:35:21 | *fmt | provenance | | +| nested.cpp:35:19:35:21 | *fmt | nested.cpp:27:32:27:34 | *fmt | provenance | | +| nested.cpp:42:24:42:34 | *call to ext_fmt_str | nested.cpp:34:37:34:39 | *fmt | provenance | | +| nested.cpp:86:19:86:46 | *call to __builtin_alloca | nested.cpp:87:18:87:20 | *fmt | provenance | | +| test.cpp:46:27:46:30 | **argv | test.cpp:130:20:130:26 | *access to array | provenance | | +| test.cpp:167:31:167:34 | *data | test.cpp:170:12:170:14 | *res | provenance | | +| test.cpp:193:32:193:34 | *str | test.cpp:195:31:195:33 | *str | provenance | | +| test.cpp:193:32:193:34 | *str | test.cpp:197:11:197:14 | *wstr | provenance | | +| test.cpp:204:25:204:36 | *call to get_string | test.cpp:205:12:205:20 | *... + ... | provenance | | +| test.cpp:204:25:204:36 | *call to get_string | test.cpp:206:12:206:16 | *hello | provenance | | +| test.cpp:209:25:209:36 | *call to get_string | test.cpp:211:12:211:16 | *hello | provenance | | +| test.cpp:215:25:215:36 | *call to get_string | test.cpp:217:12:217:16 | *hello | provenance | | +| test.cpp:221:25:221:36 | *call to get_string | test.cpp:223:12:223:16 | *hello | provenance | | +| test.cpp:227:25:227:36 | *call to get_string | test.cpp:228:12:228:18 | *++ ... | provenance | | +| test.cpp:232:25:232:36 | *call to get_string | test.cpp:235:12:235:16 | *hello | provenance | | +| test.cpp:239:25:239:36 | *call to get_string | test.cpp:242:12:242:16 | *hello | provenance | | +| test.cpp:245:25:245:36 | *call to get_string | test.cpp:247:12:247:16 | *hello | provenance | | +nodes +| NonConstantFormat.c:28:27:28:30 | **argv | semmle.label | **argv | +| NonConstantFormat.c:30:10:30:16 | *access to array | semmle.label | *access to array | +| NonConstantFormat.c:41:9:41:45 | *call to any_random_function | semmle.label | *call to any_random_function | +| NonConstantFormat.c:45:9:45:48 | *call to gettext | semmle.label | *call to gettext | +| NonConstantFormat.c:45:11:45:47 | *call to any_random_function | semmle.label | *call to any_random_function | +| nested.cpp:19:29:19:32 | *fmt0 | semmle.label | *fmt0 | +| nested.cpp:21:23:21:26 | *fmt0 | semmle.label | *fmt0 | +| nested.cpp:27:32:27:34 | *fmt | semmle.label | *fmt | +| nested.cpp:28:16:28:18 | *fmt | semmle.label | *fmt | +| nested.cpp:34:37:34:39 | *fmt | semmle.label | *fmt | +| nested.cpp:35:19:35:21 | *fmt | semmle.label | *fmt | +| nested.cpp:42:24:42:34 | *call to ext_fmt_str | semmle.label | *call to ext_fmt_str | +| nested.cpp:79:32:79:38 | *call to get_fmt | semmle.label | *call to get_fmt | +| nested.cpp:86:19:86:46 | *call to __builtin_alloca | semmle.label | *call to __builtin_alloca | +| nested.cpp:87:18:87:20 | *fmt | semmle.label | *fmt | +| test.cpp:46:27:46:30 | **argv | semmle.label | **argv | +| test.cpp:130:20:130:26 | *access to array | semmle.label | *access to array | +| test.cpp:167:31:167:34 | *data | semmle.label | *data | +| test.cpp:170:12:170:14 | *res | semmle.label | *res | +| test.cpp:193:32:193:34 | *str | semmle.label | *str | +| test.cpp:195:31:195:33 | *str | semmle.label | *str | +| test.cpp:197:11:197:14 | *wstr | semmle.label | *wstr | +| test.cpp:204:25:204:36 | *call to get_string | semmle.label | *call to get_string | +| test.cpp:205:12:205:20 | *... + ... | semmle.label | *... + ... | +| test.cpp:206:12:206:16 | *hello | semmle.label | *hello | +| test.cpp:209:25:209:36 | *call to get_string | semmle.label | *call to get_string | +| test.cpp:211:12:211:16 | *hello | semmle.label | *hello | +| test.cpp:215:25:215:36 | *call to get_string | semmle.label | *call to get_string | +| test.cpp:217:12:217:16 | *hello | semmle.label | *hello | +| test.cpp:221:25:221:36 | *call to get_string | semmle.label | *call to get_string | +| test.cpp:223:12:223:16 | *hello | semmle.label | *hello | +| test.cpp:227:25:227:36 | *call to get_string | semmle.label | *call to get_string | +| test.cpp:228:12:228:18 | *++ ... | semmle.label | *++ ... | +| test.cpp:232:25:232:36 | *call to get_string | semmle.label | *call to get_string | +| test.cpp:235:12:235:16 | *hello | semmle.label | *hello | +| test.cpp:239:25:239:36 | *call to get_string | semmle.label | *call to get_string | +| test.cpp:242:12:242:16 | *hello | semmle.label | *hello | +| test.cpp:245:25:245:36 | *call to get_string | semmle.label | *call to get_string | +| test.cpp:247:12:247:16 | *hello | semmle.label | *hello | +subpaths +#select +| NonConstantFormat.c:30:10:30:16 | *access to array | NonConstantFormat.c:28:27:28:30 | **argv | NonConstantFormat.c:30:10:30:16 | *access to array | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | NonConstantFormat.c:30:3:30:8 | call to printf | printf | +| NonConstantFormat.c:41:9:41:45 | *call to any_random_function | NonConstantFormat.c:41:9:41:45 | *call to any_random_function | NonConstantFormat.c:41:9:41:45 | *call to any_random_function | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | NonConstantFormat.c:41:2:41:7 | call to printf | printf | +| NonConstantFormat.c:45:9:45:48 | *call to gettext | NonConstantFormat.c:45:11:45:47 | *call to any_random_function | NonConstantFormat.c:45:9:45:48 | *call to gettext | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | NonConstantFormat.c:45:2:45:7 | call to printf | printf | +| nested.cpp:21:23:21:26 | *fmt0 | nested.cpp:42:24:42:34 | *call to ext_fmt_str | nested.cpp:21:23:21:26 | *fmt0 | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | nested.cpp:21:5:21:12 | call to snprintf | snprintf | +| nested.cpp:79:32:79:38 | *call to get_fmt | nested.cpp:79:32:79:38 | *call to get_fmt | nested.cpp:79:32:79:38 | *call to get_fmt | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | nested.cpp:79:5:79:14 | call to diagnostic | diagnostic | +| nested.cpp:87:18:87:20 | *fmt | nested.cpp:86:19:86:46 | *call to __builtin_alloca | nested.cpp:87:18:87:20 | *fmt | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | nested.cpp:87:7:87:16 | call to diagnostic | diagnostic | +| test.cpp:130:20:130:26 | *access to array | test.cpp:46:27:46:30 | **argv | test.cpp:130:20:130:26 | *access to array | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | test.cpp:130:2:130:10 | call to sprintf | sprintf | +| test.cpp:170:12:170:14 | *res | test.cpp:167:31:167:34 | *data | test.cpp:170:12:170:14 | *res | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | test.cpp:170:5:170:10 | call to printf | printf | +| test.cpp:195:31:195:33 | *str | test.cpp:193:32:193:34 | *str | test.cpp:195:31:195:33 | *str | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | test.cpp:195:3:195:18 | call to StringCchPrintfW | StringCchPrintfW | +| test.cpp:197:11:197:14 | *wstr | test.cpp:193:32:193:34 | *str | test.cpp:197:11:197:14 | *wstr | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | test.cpp:197:3:197:9 | call to wprintf | wprintf | +| test.cpp:205:12:205:20 | *... + ... | test.cpp:204:25:204:36 | *call to get_string | test.cpp:205:12:205:20 | *... + ... | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | test.cpp:205:5:205:10 | call to printf | printf | +| test.cpp:206:12:206:16 | *hello | test.cpp:204:25:204:36 | *call to get_string | test.cpp:206:12:206:16 | *hello | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | test.cpp:206:5:206:10 | call to printf | printf | +| test.cpp:211:12:211:16 | *hello | test.cpp:209:25:209:36 | *call to get_string | test.cpp:211:12:211:16 | *hello | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | test.cpp:211:5:211:10 | call to printf | printf | +| test.cpp:217:12:217:16 | *hello | test.cpp:215:25:215:36 | *call to get_string | test.cpp:217:12:217:16 | *hello | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | test.cpp:217:5:217:10 | call to printf | printf | +| test.cpp:223:12:223:16 | *hello | test.cpp:221:25:221:36 | *call to get_string | test.cpp:223:12:223:16 | *hello | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | test.cpp:223:5:223:10 | call to printf | printf | +| test.cpp:228:12:228:18 | *++ ... | test.cpp:227:25:227:36 | *call to get_string | test.cpp:228:12:228:18 | *++ ... | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | test.cpp:228:5:228:10 | call to printf | printf | +| test.cpp:235:12:235:16 | *hello | test.cpp:232:25:232:36 | *call to get_string | test.cpp:235:12:235:16 | *hello | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | test.cpp:235:5:235:10 | call to printf | printf | +| test.cpp:242:12:242:16 | *hello | test.cpp:239:25:239:36 | *call to get_string | test.cpp:242:12:242:16 | *hello | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | test.cpp:242:5:242:10 | call to printf | printf | +| test.cpp:247:12:247:16 | *hello | test.cpp:245:25:245:36 | *call to get_string | test.cpp:247:12:247:16 | *hello | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | test.cpp:247:5:247:10 | call to printf | printf | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/test.cpp b/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/test.cpp index bc8d0c26bbb..e60db94f9b1 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/test.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/test.cpp @@ -48,7 +48,7 @@ int main(int argc, char **argv) { printf(choose_message(argc - 1), argc - 1); // GOOD printf(messages[1]); // GOOD printf(message); // GOOD - printf(make_message(argc - 1)); // BAD + printf(make_message(argc - 1)); // BAD [NOT DETECTED] printf("Hello, World\n"); // GOOD printf(_("Hello, World\n")); // GOOD { @@ -154,7 +154,7 @@ void print_ith_message() { void fmt_via_strcpy(char *data) { strcpy(data, "some string"); - printf(data); // GOOD [FALSE POSITIVE: Due to inaccurate dataflow killers] + printf(data); // GOOD } void fmt_with_assignment() { diff --git a/cpp/ql/test/query-tests/Likely Bugs/Protocols/TlsSettingsMisconfiguration.expected b/cpp/ql/test/query-tests/Likely Bugs/Protocols/TlsSettingsMisconfiguration.expected index 021bf2094b8..f889cb12a68 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Protocols/TlsSettingsMisconfiguration.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Protocols/TlsSettingsMisconfiguration.expected @@ -1,9 +1,4 @@ -| test2.cpp:7:32:7:33 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:6:40:6:72 | sslv23 | sslv23 | test2.cpp:7:32:7:33 | call to context | no_sslv3 has not been set | -| test2.cpp:7:32:7:33 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:6:40:6:72 | sslv23 | sslv23 | test2.cpp:7:32:7:33 | call to context | no_tlsv1 has not been set | -| test2.cpp:7:32:7:33 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:6:40:6:72 | sslv23 | sslv23 | test2.cpp:7:32:7:33 | call to context | no_tlsv1_1 has not been set | | test2.cpp:15:32:15:33 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:14:40:14:72 | sslv23 | sslv23 | test2.cpp:15:32:15:33 | call to context | no_sslv3 has not been set | -| test2.cpp:15:32:15:33 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:14:40:14:72 | sslv23 | sslv23 | test2.cpp:15:32:15:33 | call to context | no_tlsv1 has not been set | -| test2.cpp:15:32:15:33 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:14:40:14:72 | sslv23 | sslv23 | test2.cpp:15:32:15:33 | call to context | no_tlsv1_1 has not been set | | test2.cpp:23:32:23:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:23:32:23:64 | sslv23 | sslv23 | test2.cpp:23:32:23:65 | call to context | no_sslv3 has not been set | | test2.cpp:23:32:23:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:23:32:23:64 | sslv23 | sslv23 | test2.cpp:23:32:23:65 | call to context | no_tlsv1 has not been set | | test2.cpp:23:32:23:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:23:32:23:64 | sslv23 | sslv23 | test2.cpp:23:32:23:65 | call to context | no_tlsv1_1 has not been set | @@ -19,22 +14,11 @@ | test2.cpp:52:32:52:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:52:32:52:64 | sslv23 | sslv23 | test2.cpp:52:32:52:65 | call to context | no_sslv3 has not been set | | test2.cpp:52:32:52:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:52:32:52:64 | sslv23 | sslv23 | test2.cpp:52:32:52:65 | call to context | no_tlsv1 has not been set | | test2.cpp:52:32:52:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test2.cpp:52:32:52:64 | sslv23 | sslv23 | test2.cpp:52:32:52:65 | call to context | no_tlsv1_1 has not been set | -| test3.cpp:7:32:7:62 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test3.cpp:7:32:7:61 | tls | tls | test3.cpp:7:32:7:62 | call to context | no_tlsv1 has not been set | | test3.cpp:7:32:7:62 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test3.cpp:7:32:7:61 | tls | tls | test3.cpp:7:32:7:62 | call to context | no_tlsv1_1 has not been set | -| test3.cpp:15:32:15:62 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test3.cpp:15:32:15:61 | tls | tls | test3.cpp:15:32:15:62 | call to context | no_tlsv1 has not been set | -| test3.cpp:15:32:15:62 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test3.cpp:15:32:15:61 | tls | tls | test3.cpp:15:32:15:62 | call to context | no_tlsv1_1 has not been set | -| test.cpp:11:32:11:69 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test.cpp:11:32:11:68 | tls_client | tls_client | test.cpp:11:32:11:69 | call to context | no_tlsv1 has not been set | -| test.cpp:11:32:11:69 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test.cpp:11:32:11:68 | tls_client | tls_client | test.cpp:11:32:11:69 | call to context | no_tlsv1_1 has not been set | -| test.cpp:17:32:17:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test.cpp:17:32:17:64 | sslv23 | sslv23 | test.cpp:17:32:17:65 | call to context | no_sslv3 has not been set | -| test.cpp:17:32:17:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test.cpp:17:32:17:64 | sslv23 | sslv23 | test.cpp:17:32:17:65 | call to context | no_tlsv1 has not been set | -| test.cpp:17:32:17:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test.cpp:17:32:17:64 | sslv23 | sslv23 | test.cpp:17:32:17:65 | call to context | no_tlsv1_1 has not been set | | test.cpp:25:32:25:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test.cpp:25:32:25:64 | sslv23 | sslv23 | test.cpp:25:32:25:65 | call to context | no_sslv3 has not been set | -| test.cpp:25:32:25:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test.cpp:25:32:25:64 | sslv23 | sslv23 | test.cpp:25:32:25:65 | call to context | no_tlsv1 has not been set | -| test.cpp:25:32:25:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test.cpp:25:32:25:64 | sslv23 | sslv23 | test.cpp:25:32:25:65 | call to context | no_tlsv1_1 has not been set | | test.cpp:31:32:31:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test.cpp:31:32:31:64 | sslv23 | sslv23 | test.cpp:31:32:31:65 | call to context | no_sslv3 has not been set | | test.cpp:31:32:31:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test.cpp:31:32:31:64 | sslv23 | sslv23 | test.cpp:31:32:31:65 | call to context | no_tlsv1 has not been set | | test.cpp:31:32:31:65 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test.cpp:31:32:31:64 | sslv23 | sslv23 | test.cpp:31:32:31:65 | call to context | no_tlsv1_1 has not been set | | test.cpp:36:32:36:62 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test.cpp:36:32:36:61 | tls | tls | test.cpp:36:32:36:62 | call to context | no_tlsv1 has not been set | | test.cpp:36:32:36:62 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test.cpp:36:32:36:61 | tls | tls | test.cpp:36:32:36:62 | call to context | no_tlsv1_1 has not been set | -| test.cpp:41:32:41:62 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test.cpp:41:32:41:61 | tls | tls | test.cpp:41:32:41:62 | call to context | no_tlsv1 has not been set | -| test.cpp:41:32:41:62 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test.cpp:41:32:41:61 | tls | tls | test.cpp:41:32:41:62 | call to context | no_tlsv1_1 has not been set | +| test.cpp:41:32:41:62 | call to context | This usage of 'boost::asio::ssl::context::context' with protocol $@ is not configured correctly: The option $@. | test.cpp:41:32:41:61 | tls | tls | test.cpp:43:6:43:16 | call to set_options | no_tlsv1_2 was set | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Protocols/test.cpp b/cpp/ql/test/query-tests/Likely Bugs/Protocols/test.cpp index 3e04e15fc89..5c2c2d6e357 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Protocols/test.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Protocols/test.cpp @@ -8,13 +8,13 @@ void SetOptionsNoOldTls(boost::asio::ssl::context& ctx) void TestProperConfiguration_inter_CorrectUsage01() { - boost::asio::ssl::context ctx(boost::asio::ssl::context::tls_client); // GOOD [FALSE POSITIVE] + boost::asio::ssl::context ctx(boost::asio::ssl::context::tls_client); // GOOD SetOptionsNoOldTls(ctx); } void TestProperConfiguration_inter_CorrectUsage02() { - boost::asio::ssl::context ctx(boost::asio::ssl::context::sslv23); // GOOD [FALSE POSITIVE] + boost::asio::ssl::context ctx(boost::asio::ssl::context::sslv23); // GOOD ctx.set_options(boost::asio::ssl::context::no_tlsv1 | boost::asio::ssl::context::no_tlsv1_1 | boost::asio::ssl::context::no_sslv3); diff --git a/cpp/ql/test/query-tests/Likely Bugs/Protocols/test2.cpp b/cpp/ql/test/query-tests/Likely Bugs/Protocols/test2.cpp index 40f8acf17ea..e8c802d6902 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Protocols/test2.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Protocols/test2.cpp @@ -2,7 +2,7 @@ void good1() { - // GOOD [FALSE POSITIVE] + // GOOD boost::asio::ssl::context::method m = boost::asio::ssl::context::sslv23; boost::asio::ssl::context ctx(m); ctx.set_options(boost::asio::ssl::context::no_tlsv1 | boost::asio::ssl::context::no_tlsv1_1 | boost::asio::ssl::context::no_sslv3); diff --git a/cpp/ql/test/query-tests/Likely Bugs/Protocols/test3.cpp b/cpp/ql/test/query-tests/Likely Bugs/Protocols/test3.cpp index ebbd0417f3e..c9932b31618 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Protocols/test3.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Protocols/test3.cpp @@ -13,7 +13,7 @@ void useTLS_bad() void useTLS_good() { boost::asio::ssl::context ctx(boost::asio::ssl::context::tls); - ctx.set_options(boost::asio::ssl::context::no_tlsv1 | boost::asio::ssl::context::no_tlsv1_1); // GOOD [FALSE POSITIVE] + ctx.set_options(boost::asio::ssl::context::no_tlsv1 | boost::asio::ssl::context::no_tlsv1_1); // GOOD // ... } diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/consts/NonConstantFormat.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/consts/NonConstantFormat.expected index bc0712a43e0..7889b880374 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/consts/NonConstantFormat.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/consts/NonConstantFormat.expected @@ -1,14 +1,75 @@ -| consts.cpp:86:9:86:10 | v1 | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| consts.cpp:91:9:91:10 | v2 | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| consts.cpp:95:9:95:10 | v3 | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| consts.cpp:100:9:100:10 | v4 | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| consts.cpp:103:9:103:15 | call to varFunc | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| consts.cpp:107:9:107:10 | v5 | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| consts.cpp:112:9:112:10 | v6 | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| consts.cpp:116:9:116:13 | access to array | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| consts.cpp:121:9:121:10 | v8 | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| consts.cpp:126:9:126:27 | call to nonConstFuncToArray | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| consts.cpp:130:9:130:10 | v9 | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| consts.cpp:135:9:135:11 | v10 | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| consts.cpp:140:9:140:11 | v11 | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| consts.cpp:145:9:145:11 | v12 | The format string argument to printf should be constant to prevent security issues and other potential errors. | +edges +| consts.cpp:24:7:24:9 | **gv1 | consts.cpp:24:7:24:9 | **gv1 | provenance | | +| consts.cpp:24:7:24:9 | **gv1 | consts.cpp:29:7:29:25 | **nonConstFuncToArray | provenance | | +| consts.cpp:29:7:29:25 | **nonConstFuncToArray | consts.cpp:126:9:126:30 | *call to nonConstFuncToArray | provenance | | +| consts.cpp:85:7:85:8 | gets output argument | consts.cpp:24:7:24:9 | **gv1 | provenance | | +| consts.cpp:85:7:85:8 | gets output argument | consts.cpp:86:9:86:10 | *v1 | provenance | | +| consts.cpp:85:7:85:8 | gets output argument | consts.cpp:95:9:95:10 | *v3 | provenance | | +| consts.cpp:85:7:85:8 | gets output argument | consts.cpp:100:9:100:10 | *v4 | provenance | | +| consts.cpp:85:7:85:8 | gets output argument | consts.cpp:116:9:116:13 | *access to array | provenance | | +| consts.cpp:85:7:85:8 | gets output argument | consts.cpp:121:9:121:10 | *v8 | provenance | | +| consts.cpp:85:7:85:8 | gets output argument | consts.cpp:130:9:130:10 | *v9 | provenance | | +| consts.cpp:85:7:85:8 | gets output argument | consts.cpp:135:9:135:11 | *v10 | provenance | | +| consts.cpp:90:7:90:10 | *call to gets | consts.cpp:91:9:91:10 | *v2 | provenance | | +| consts.cpp:90:7:90:10 | *call to gets | consts.cpp:116:9:116:13 | *access to array | provenance | | +| consts.cpp:90:7:90:10 | *call to gets | consts.cpp:121:9:121:10 | *v8 | provenance | | +| consts.cpp:90:12:90:13 | gets output argument | consts.cpp:24:7:24:9 | **gv1 | provenance | | +| consts.cpp:90:12:90:13 | gets output argument | consts.cpp:95:9:95:10 | *v3 | provenance | | +| consts.cpp:90:12:90:13 | gets output argument | consts.cpp:100:9:100:10 | *v4 | provenance | | +| consts.cpp:90:12:90:13 | gets output argument | consts.cpp:116:9:116:13 | *access to array | provenance | | +| consts.cpp:90:12:90:13 | gets output argument | consts.cpp:121:9:121:10 | *v8 | provenance | | +| consts.cpp:90:12:90:13 | gets output argument | consts.cpp:130:9:130:10 | *v9 | provenance | | +| consts.cpp:90:12:90:13 | gets output argument | consts.cpp:135:9:135:11 | *v10 | provenance | | +| consts.cpp:106:13:106:19 | *call to varFunc | consts.cpp:107:9:107:10 | *v5 | provenance | | +| consts.cpp:111:7:111:13 | *call to varFunc | consts.cpp:112:9:112:10 | *v6 | provenance | | +| consts.cpp:139:13:139:16 | readString output argument | consts.cpp:140:9:140:11 | *v11 | provenance | | +| consts.cpp:144:16:144:18 | readStringRef output argument | consts.cpp:145:9:145:11 | *v12 | provenance | | +nodes +| consts.cpp:24:7:24:9 | **gv1 | semmle.label | **gv1 | +| consts.cpp:29:7:29:25 | **nonConstFuncToArray | semmle.label | **nonConstFuncToArray | +| consts.cpp:85:7:85:8 | gets output argument | semmle.label | gets output argument | +| consts.cpp:86:9:86:10 | *v1 | semmle.label | *v1 | +| consts.cpp:90:7:90:10 | *call to gets | semmle.label | *call to gets | +| consts.cpp:90:12:90:13 | gets output argument | semmle.label | gets output argument | +| consts.cpp:91:9:91:10 | *v2 | semmle.label | *v2 | +| consts.cpp:95:9:95:10 | *v3 | semmle.label | *v3 | +| consts.cpp:100:9:100:10 | *v4 | semmle.label | *v4 | +| consts.cpp:103:9:103:17 | *call to varFunc | semmle.label | *call to varFunc | +| consts.cpp:106:13:106:19 | *call to varFunc | semmle.label | *call to varFunc | +| consts.cpp:107:9:107:10 | *v5 | semmle.label | *v5 | +| consts.cpp:111:7:111:13 | *call to varFunc | semmle.label | *call to varFunc | +| consts.cpp:112:9:112:10 | *v6 | semmle.label | *v6 | +| consts.cpp:116:9:116:13 | *access to array | semmle.label | *access to array | +| consts.cpp:121:9:121:10 | *v8 | semmle.label | *v8 | +| consts.cpp:126:9:126:30 | *call to nonConstFuncToArray | semmle.label | *call to nonConstFuncToArray | +| consts.cpp:130:9:130:10 | *v9 | semmle.label | *v9 | +| consts.cpp:135:9:135:11 | *v10 | semmle.label | *v10 | +| consts.cpp:139:13:139:16 | readString output argument | semmle.label | readString output argument | +| consts.cpp:140:9:140:11 | *v11 | semmle.label | *v11 | +| consts.cpp:144:16:144:18 | readStringRef output argument | semmle.label | readStringRef output argument | +| consts.cpp:145:9:145:11 | *v12 | semmle.label | *v12 | +subpaths +#select +| consts.cpp:86:9:86:10 | *v1 | consts.cpp:85:7:85:8 | gets output argument | consts.cpp:86:9:86:10 | *v1 | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:86:2:86:7 | call to printf | printf | +| consts.cpp:91:9:91:10 | *v2 | consts.cpp:90:7:90:10 | *call to gets | consts.cpp:91:9:91:10 | *v2 | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:91:2:91:7 | call to printf | printf | +| consts.cpp:95:9:95:10 | *v3 | consts.cpp:85:7:85:8 | gets output argument | consts.cpp:95:9:95:10 | *v3 | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:95:2:95:7 | call to printf | printf | +| consts.cpp:95:9:95:10 | *v3 | consts.cpp:90:12:90:13 | gets output argument | consts.cpp:95:9:95:10 | *v3 | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:95:2:95:7 | call to printf | printf | +| consts.cpp:100:9:100:10 | *v4 | consts.cpp:85:7:85:8 | gets output argument | consts.cpp:100:9:100:10 | *v4 | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:100:2:100:7 | call to printf | printf | +| consts.cpp:100:9:100:10 | *v4 | consts.cpp:90:12:90:13 | gets output argument | consts.cpp:100:9:100:10 | *v4 | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:100:2:100:7 | call to printf | printf | +| consts.cpp:103:9:103:17 | *call to varFunc | consts.cpp:103:9:103:17 | *call to varFunc | consts.cpp:103:9:103:17 | *call to varFunc | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:103:2:103:7 | call to printf | printf | +| consts.cpp:107:9:107:10 | *v5 | consts.cpp:106:13:106:19 | *call to varFunc | consts.cpp:107:9:107:10 | *v5 | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:107:2:107:7 | call to printf | printf | +| consts.cpp:112:9:112:10 | *v6 | consts.cpp:111:7:111:13 | *call to varFunc | consts.cpp:112:9:112:10 | *v6 | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:112:2:112:7 | call to printf | printf | +| consts.cpp:116:9:116:13 | *access to array | consts.cpp:85:7:85:8 | gets output argument | consts.cpp:116:9:116:13 | *access to array | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:116:2:116:7 | call to printf | printf | +| consts.cpp:116:9:116:13 | *access to array | consts.cpp:90:7:90:10 | *call to gets | consts.cpp:116:9:116:13 | *access to array | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:116:2:116:7 | call to printf | printf | +| consts.cpp:116:9:116:13 | *access to array | consts.cpp:90:12:90:13 | gets output argument | consts.cpp:116:9:116:13 | *access to array | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:116:2:116:7 | call to printf | printf | +| consts.cpp:121:9:121:10 | *v8 | consts.cpp:85:7:85:8 | gets output argument | consts.cpp:121:9:121:10 | *v8 | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:121:2:121:7 | call to printf | printf | +| consts.cpp:121:9:121:10 | *v8 | consts.cpp:90:7:90:10 | *call to gets | consts.cpp:121:9:121:10 | *v8 | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:121:2:121:7 | call to printf | printf | +| consts.cpp:121:9:121:10 | *v8 | consts.cpp:90:12:90:13 | gets output argument | consts.cpp:121:9:121:10 | *v8 | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:121:2:121:7 | call to printf | printf | +| consts.cpp:126:9:126:30 | *call to nonConstFuncToArray | consts.cpp:85:7:85:8 | gets output argument | consts.cpp:126:9:126:30 | *call to nonConstFuncToArray | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:126:2:126:7 | call to printf | printf | +| consts.cpp:126:9:126:30 | *call to nonConstFuncToArray | consts.cpp:90:12:90:13 | gets output argument | consts.cpp:126:9:126:30 | *call to nonConstFuncToArray | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:126:2:126:7 | call to printf | printf | +| consts.cpp:130:9:130:10 | *v9 | consts.cpp:85:7:85:8 | gets output argument | consts.cpp:130:9:130:10 | *v9 | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:130:2:130:7 | call to printf | printf | +| consts.cpp:130:9:130:10 | *v9 | consts.cpp:90:12:90:13 | gets output argument | consts.cpp:130:9:130:10 | *v9 | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:130:2:130:7 | call to printf | printf | +| consts.cpp:135:9:135:11 | *v10 | consts.cpp:85:7:85:8 | gets output argument | consts.cpp:135:9:135:11 | *v10 | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:135:2:135:7 | call to printf | printf | +| consts.cpp:135:9:135:11 | *v10 | consts.cpp:90:12:90:13 | gets output argument | consts.cpp:135:9:135:11 | *v10 | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:135:2:135:7 | call to printf | printf | +| consts.cpp:140:9:140:11 | *v11 | consts.cpp:139:13:139:16 | readString output argument | consts.cpp:140:9:140:11 | *v11 | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:140:2:140:7 | call to printf | printf | +| consts.cpp:145:9:145:11 | *v12 | consts.cpp:144:16:144:18 | readStringRef output argument | consts.cpp:145:9:145:11 | *v12 | The format string argument to $@ has a source which cannot be verified to originate from a string literal. | consts.cpp:145:2:145:7 | call to printf | printf | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-193/InvalidPointerDeref.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-193/InvalidPointerDeref.expected index 43e865d894b..b6a9e097127 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-193/InvalidPointerDeref.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-193/InvalidPointerDeref.expected @@ -101,6 +101,10 @@ edges | test.cpp:857:16:857:29 | ... + ... | test.cpp:857:16:857:29 | ... + ... | provenance | | | test.cpp:857:16:857:29 | ... + ... | test.cpp:860:5:860:11 | ... = ... | provenance | | | test.cpp:857:16:857:29 | ... + ... | test.cpp:860:5:860:11 | ... = ... | provenance | | +| test.cpp:868:15:868:35 | call to g_malloc | test.cpp:869:15:869:22 | ... + ... | provenance | | +| test.cpp:869:15:869:22 | ... + ... | test.cpp:869:15:869:22 | ... + ... | provenance | | +| test.cpp:869:15:869:22 | ... + ... | test.cpp:870:14:870:15 | * ... | provenance | | +| test.cpp:869:15:869:22 | ... + ... | test.cpp:870:14:870:15 | * ... | provenance | | nodes | test.cpp:4:15:4:33 | call to malloc | semmle.label | call to malloc | | test.cpp:5:15:5:22 | ... + ... | semmle.label | ... + ... | @@ -198,6 +202,10 @@ nodes | test.cpp:857:16:857:29 | ... + ... | semmle.label | ... + ... | | test.cpp:857:16:857:29 | ... + ... | semmle.label | ... + ... | | test.cpp:860:5:860:11 | ... = ... | semmle.label | ... = ... | +| test.cpp:868:15:868:35 | call to g_malloc | semmle.label | call to g_malloc | +| test.cpp:869:15:869:22 | ... + ... | semmle.label | ... + ... | +| test.cpp:869:15:869:22 | ... + ... | semmle.label | ... + ... | +| test.cpp:870:14:870:15 | * ... | semmle.label | * ... | subpaths #select | test.cpp:6:14:6:15 | * ... | test.cpp:4:15:4:33 | call to malloc | test.cpp:6:14:6:15 | * ... | This read might be out of bounds, as the pointer might be equal to $@ + $@. | test.cpp:4:15:4:33 | call to malloc | call to malloc | test.cpp:5:19:5:22 | size | size | @@ -231,3 +239,4 @@ subpaths | test.cpp:842:3:842:20 | ... = ... | test.cpp:841:18:841:35 | call to malloc | test.cpp:842:3:842:20 | ... = ... | This write might be out of bounds, as the pointer might be equal to $@ + $@. | test.cpp:841:18:841:35 | call to malloc | call to malloc | test.cpp:842:11:842:15 | index | index | | test.cpp:849:5:849:22 | ... = ... | test.cpp:848:20:848:37 | call to malloc | test.cpp:849:5:849:22 | ... = ... | This write might be out of bounds, as the pointer might be equal to $@ + $@. | test.cpp:848:20:848:37 | call to malloc | call to malloc | test.cpp:849:13:849:17 | index | index | | test.cpp:860:5:860:11 | ... = ... | test.cpp:856:12:856:35 | call to malloc | test.cpp:860:5:860:11 | ... = ... | This write might be out of bounds, as the pointer might be equal to $@ + $@. | test.cpp:856:12:856:35 | call to malloc | call to malloc | test.cpp:857:21:857:28 | ... + ... | ... + ... | +| test.cpp:870:14:870:15 | * ... | test.cpp:868:15:868:35 | call to g_malloc | test.cpp:870:14:870:15 | * ... | This read might be out of bounds, as the pointer might be equal to $@ + $@. | test.cpp:868:15:868:35 | call to g_malloc | call to g_malloc | test.cpp:869:19:869:22 | size | size | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-193/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-193/test.cpp index cb9caeaae1b..db1017e233f 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-193/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-193/test.cpp @@ -859,4 +859,13 @@ void test_regression(size_t size) { if(p <= chend) { *p = 42; // $ deref=L857->L860 // BAD } +} + + +void* g_malloc(size_t size); + +void test17(int size) { + char* p = (char*)g_malloc(size); + char* q = p + size; // $ alloc=L868 + char a = *q; // $ deref=L869->L870 // BAD } \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/UninitializedLocal.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/UninitializedLocal.expected index 7b5233f45b4..d27b2c996b3 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/UninitializedLocal.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/UninitializedLocal.expected @@ -1,13 +1,29 @@ -| test.cpp:12:6:12:8 | foo | The variable $@ may not be initialized at this access. | test.cpp:11:6:11:8 | foo | foo | -| test.cpp:113:6:113:8 | foo | The variable $@ may not be initialized at this access. | test.cpp:111:6:111:8 | foo | foo | -| test.cpp:219:3:219:3 | x | The variable $@ may not be initialized at this access. | test.cpp:218:7:218:7 | x | x | -| test.cpp:243:13:243:13 | i | The variable $@ may not be initialized at this access. | test.cpp:241:6:241:6 | i | i | -| test.cpp:336:10:336:10 | a | The variable $@ may not be initialized at this access. | test.cpp:333:7:333:7 | a | a | -| test.cpp:369:10:369:10 | a | The variable $@ may not be initialized at this access. | test.cpp:358:7:358:7 | a | a | -| test.cpp:378:9:378:11 | val | The variable $@ may not be initialized at this access. | test.cpp:359:6:359:8 | val | val | -| test.cpp:417:10:417:10 | j | The variable $@ may not be initialized at this access. | test.cpp:414:9:414:9 | j | j | -| test.cpp:436:9:436:9 | j | The variable $@ may not be initialized at this access. | test.cpp:431:9:431:9 | j | j | -| test.cpp:454:2:454:2 | x | The variable $@ may not be initialized at this access. | test.cpp:452:6:452:6 | x | x | -| test.cpp:460:7:460:7 | x | The variable $@ may not be initialized at this access. | test.cpp:458:6:458:6 | x | x | -| test.cpp:467:2:467:2 | x | The variable $@ may not be initialized at this access. | test.cpp:464:6:464:6 | x | x | -| test.cpp:474:7:474:7 | x | The variable $@ may not be initialized at this access. | test.cpp:471:6:471:6 | x | x | +edges +nodes +| test.cpp:11:6:11:8 | definition of foo | semmle.label | definition of foo | +| test.cpp:111:6:111:8 | definition of foo | semmle.label | definition of foo | +| test.cpp:218:7:218:7 | definition of x | semmle.label | definition of x | +| test.cpp:241:6:241:6 | definition of i | semmle.label | definition of i | +| test.cpp:333:7:333:7 | definition of a | semmle.label | definition of a | +| test.cpp:358:7:358:7 | definition of a | semmle.label | definition of a | +| test.cpp:359:6:359:8 | definition of val | semmle.label | definition of val | +| test.cpp:414:9:414:9 | definition of j | semmle.label | definition of j | +| test.cpp:431:9:431:9 | definition of j | semmle.label | definition of j | +| test.cpp:452:6:452:6 | definition of x | semmle.label | definition of x | +| test.cpp:458:6:458:6 | definition of x | semmle.label | definition of x | +| test.cpp:464:6:464:6 | definition of x | semmle.label | definition of x | +| test.cpp:471:6:471:6 | definition of x | semmle.label | definition of x | +#select +| test.cpp:12:6:12:8 | foo | test.cpp:11:6:11:8 | definition of foo | test.cpp:11:6:11:8 | definition of foo | The variable $@ may not be initialized at this access. | test.cpp:11:6:11:8 | foo | foo | +| test.cpp:113:6:113:8 | foo | test.cpp:111:6:111:8 | definition of foo | test.cpp:111:6:111:8 | definition of foo | The variable $@ may not be initialized at this access. | test.cpp:111:6:111:8 | foo | foo | +| test.cpp:219:3:219:3 | x | test.cpp:218:7:218:7 | definition of x | test.cpp:218:7:218:7 | definition of x | The variable $@ may not be initialized at this access. | test.cpp:218:7:218:7 | x | x | +| test.cpp:243:13:243:13 | i | test.cpp:241:6:241:6 | definition of i | test.cpp:241:6:241:6 | definition of i | The variable $@ may not be initialized at this access. | test.cpp:241:6:241:6 | i | i | +| test.cpp:336:10:336:10 | a | test.cpp:333:7:333:7 | definition of a | test.cpp:333:7:333:7 | definition of a | The variable $@ may not be initialized at this access. | test.cpp:333:7:333:7 | a | a | +| test.cpp:369:10:369:10 | a | test.cpp:358:7:358:7 | definition of a | test.cpp:358:7:358:7 | definition of a | The variable $@ may not be initialized at this access. | test.cpp:358:7:358:7 | a | a | +| test.cpp:378:9:378:11 | val | test.cpp:359:6:359:8 | definition of val | test.cpp:359:6:359:8 | definition of val | The variable $@ may not be initialized at this access. | test.cpp:359:6:359:8 | val | val | +| test.cpp:417:10:417:10 | j | test.cpp:414:9:414:9 | definition of j | test.cpp:414:9:414:9 | definition of j | The variable $@ may not be initialized at this access. | test.cpp:414:9:414:9 | j | j | +| test.cpp:436:9:436:9 | j | test.cpp:431:9:431:9 | definition of j | test.cpp:431:9:431:9 | definition of j | The variable $@ may not be initialized at this access. | test.cpp:431:9:431:9 | j | j | +| test.cpp:454:2:454:2 | x | test.cpp:452:6:452:6 | definition of x | test.cpp:452:6:452:6 | definition of x | The variable $@ may not be initialized at this access. | test.cpp:452:6:452:6 | x | x | +| test.cpp:460:7:460:7 | x | test.cpp:458:6:458:6 | definition of x | test.cpp:458:6:458:6 | definition of x | The variable $@ may not be initialized at this access. | test.cpp:458:6:458:6 | x | x | +| test.cpp:467:2:467:2 | x | test.cpp:464:6:464:6 | definition of x | test.cpp:464:6:464:6 | definition of x | The variable $@ may not be initialized at this access. | test.cpp:464:6:464:6 | x | x | +| test.cpp:474:7:474:7 | x | test.cpp:471:6:471:6 | definition of x | test.cpp:471:6:471:6 | definition of x | The variable $@ may not be initialized at this access. | test.cpp:471:6:471:6 | x | x | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-843/TypeConfusion.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-843/TypeConfusion.expected new file mode 100644 index 00000000000..4cd377e9f5e --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-843/TypeConfusion.expected @@ -0,0 +1,74 @@ +edges +| test.cpp:17:13:17:18 | new | test.cpp:18:21:18:47 | p | provenance | | +| test.cpp:22:13:22:26 | new | test.cpp:23:12:23:30 | p | provenance | | +| test.cpp:27:13:27:18 | new | test.cpp:28:25:28:55 | p | provenance | | +| test.cpp:32:13:32:30 | new | test.cpp:33:12:33:30 | p | provenance | | +| test.cpp:47:21:47:36 | new | test.cpp:48:22:48:55 | p | provenance | | +| test.cpp:66:15:66:21 | new | test.cpp:67:12:67:31 | a | provenance | | +| test.cpp:76:15:76:21 | new | test.cpp:77:12:77:31 | a | provenance | | +| test.cpp:83:9:83:15 | new | test.cpp:88:14:88:33 | a | provenance | | +| test.cpp:85:9:85:15 | new | test.cpp:88:14:88:33 | a | provenance | | +| test.cpp:115:12:115:17 | new | test.cpp:116:20:116:51 | s2 | provenance | | +| test.cpp:127:12:127:17 | new | test.cpp:128:24:128:59 | s2 | provenance | | +| test.cpp:140:12:140:17 | new | test.cpp:141:23:141:57 | s1 | provenance | | +| test.cpp:143:14:143:19 | new | test.cpp:145:28:145:68 | s1_2 | provenance | | +| test.cpp:153:9:153:15 | new | test.cpp:159:14:159:33 | a | provenance | | +| test.cpp:166:9:166:15 | new | test.cpp:171:14:171:33 | a | provenance | | +| test.cpp:168:9:168:15 | new | test.cpp:171:14:171:33 | a | provenance | | +| test.cpp:179:15:179:24 | new | test.cpp:181:15:181:25 | u64 | provenance | | +| test.cpp:187:15:187:24 | new | test.cpp:189:25:189:45 | u64 | provenance | | +| test.cpp:207:14:207:26 | new | test.cpp:209:17:209:28 | si | provenance | | +| test.cpp:217:13:217:18 | new | test.cpp:218:30:218:65 | p | provenance | | +| test.cpp:226:13:226:18 | new | test.cpp:227:29:227:63 | p | provenance | | +nodes +| test.cpp:17:13:17:18 | new | semmle.label | new | +| test.cpp:18:21:18:47 | p | semmle.label | p | +| test.cpp:22:13:22:26 | new | semmle.label | new | +| test.cpp:23:12:23:30 | p | semmle.label | p | +| test.cpp:27:13:27:18 | new | semmle.label | new | +| test.cpp:28:25:28:55 | p | semmle.label | p | +| test.cpp:32:13:32:30 | new | semmle.label | new | +| test.cpp:33:12:33:30 | p | semmle.label | p | +| test.cpp:47:21:47:36 | new | semmle.label | new | +| test.cpp:48:22:48:55 | p | semmle.label | p | +| test.cpp:66:15:66:21 | new | semmle.label | new | +| test.cpp:67:12:67:31 | a | semmle.label | a | +| test.cpp:76:15:76:21 | new | semmle.label | new | +| test.cpp:77:12:77:31 | a | semmle.label | a | +| test.cpp:83:9:83:15 | new | semmle.label | new | +| test.cpp:85:9:85:15 | new | semmle.label | new | +| test.cpp:88:14:88:33 | a | semmle.label | a | +| test.cpp:115:12:115:17 | new | semmle.label | new | +| test.cpp:116:20:116:51 | s2 | semmle.label | s2 | +| test.cpp:127:12:127:17 | new | semmle.label | new | +| test.cpp:128:24:128:59 | s2 | semmle.label | s2 | +| test.cpp:140:12:140:17 | new | semmle.label | new | +| test.cpp:141:23:141:57 | s1 | semmle.label | s1 | +| test.cpp:143:14:143:19 | new | semmle.label | new | +| test.cpp:145:28:145:68 | s1_2 | semmle.label | s1_2 | +| test.cpp:153:9:153:15 | new | semmle.label | new | +| test.cpp:159:14:159:33 | a | semmle.label | a | +| test.cpp:166:9:166:15 | new | semmle.label | new | +| test.cpp:168:9:168:15 | new | semmle.label | new | +| test.cpp:171:14:171:33 | a | semmle.label | a | +| test.cpp:179:15:179:24 | new | semmle.label | new | +| test.cpp:181:15:181:25 | u64 | semmle.label | u64 | +| test.cpp:187:15:187:24 | new | semmle.label | new | +| test.cpp:189:25:189:45 | u64 | semmle.label | u64 | +| test.cpp:207:14:207:26 | new | semmle.label | new | +| test.cpp:209:17:209:28 | si | semmle.label | si | +| test.cpp:217:13:217:18 | new | semmle.label | new | +| test.cpp:218:30:218:65 | p | semmle.label | p | +| test.cpp:226:13:226:18 | new | semmle.label | new | +| test.cpp:227:29:227:63 | p | semmle.label | p | +subpaths +#select +| test.cpp:28:25:28:55 | p | test.cpp:27:13:27:18 | new | test.cpp:28:25:28:55 | p | Conversion from $@ to $@ is invalid. | test.cpp:1:8:1:9 | S1 | S1 | test.cpp:11:8:11:21 | Not_S1_wrapper | Not_S1_wrapper | +| test.cpp:33:12:33:30 | p | test.cpp:32:13:32:30 | new | test.cpp:33:12:33:30 | p | Conversion from $@ to $@ is invalid. | test.cpp:11:8:11:21 | Not_S1_wrapper | Not_S1_wrapper | test.cpp:1:8:1:9 | S1 | S1 | +| test.cpp:67:12:67:31 | a | test.cpp:66:15:66:21 | new | test.cpp:67:12:67:31 | a | Conversion from $@ to $@ is invalid. | test.cpp:55:8:55:10 | Cat | Cat | test.cpp:60:8:60:10 | Dog | Dog | +| test.cpp:128:24:128:59 | s2 | test.cpp:127:12:127:17 | new | test.cpp:128:24:128:59 | s2 | Conversion from $@ to $@ is invalid. | test.cpp:102:8:102:9 | S2 | S2 | test.cpp:119:8:119:20 | Not_S2_prefix | Not_S2_prefix | +| test.cpp:145:28:145:68 | s1_2 | test.cpp:143:14:143:19 | new | test.cpp:145:28:145:68 | s1_2 | Conversion from $@ to $@ is invalid. | test.cpp:1:8:1:9 | S1 | S1 | test.cpp:131:8:131:23 | HasSomeBitFields | HasSomeBitFields | +| test.cpp:159:14:159:33 | a | test.cpp:153:9:153:15 | new | test.cpp:159:14:159:33 | a | Conversion from $@ to $@ is invalid. | test.cpp:60:8:60:10 | Dog | Dog | test.cpp:55:8:55:10 | Cat | Cat | +| test.cpp:189:25:189:45 | u64 | test.cpp:187:15:187:24 | new | test.cpp:189:25:189:45 | u64 | Conversion from $@ to $@ is invalid. | test.cpp:175:8:175:13 | UInt64 | UInt64 | test.cpp:184:8:184:22 | UInt8_with_more | UInt8_with_more | +| test.cpp:218:30:218:65 | p | test.cpp:217:13:217:18 | new | test.cpp:218:30:218:65 | p | Conversion from $@ to $@ is invalid. | test.cpp:1:8:1:9 | S1 | S1 | test.cpp:212:8:212:26 | UnrelatedStructSize | UnrelatedStructSize | +| test.cpp:227:29:227:63 | p | test.cpp:226:13:226:18 | new | test.cpp:227:29:227:63 | p | Conversion from $@ to $@ is invalid. | test.cpp:1:8:1:9 | S1 | S1 | test.cpp:221:8:221:25 | TooLargeBufferSize | TooLargeBufferSize | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-843/TypeConfusion.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-843/TypeConfusion.qlref new file mode 100644 index 00000000000..53b17f1e1fd --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-843/TypeConfusion.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-843/TypeConfusion.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-843/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-843/test.cpp new file mode 100644 index 00000000000..982496218ff --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-843/test.cpp @@ -0,0 +1,230 @@ +struct S1 { + int a; + void* b; + unsigned char c; +}; + +struct S1_wrapper { + S1 s1; +}; + +struct Not_S1_wrapper { + unsigned char x; + S1 s1; +}; + +void test1() { + void* p = new S1; + S1_wrapper* s1w = static_cast(p); // GOOD +} + +void test2() { + void* p = new S1_wrapper; + S1* s1 = static_cast(p); // GOOD +} + +void test3() { + void* p = new S1; + Not_S1_wrapper* s1w = static_cast(p); // BAD +} + +void test4() { + void* p = new Not_S1_wrapper; + S1* s1 = static_cast(p); // BAD +} + +struct HasBitFields { + int x : 16; + int y : 16; + int z : 32; +}; + +struct BufferStruct { + unsigned char buffer[sizeof(HasBitFields)]; +}; + +void test5() { + HasBitFields* p = new HasBitFields; + BufferStruct* bs = reinterpret_cast(p); // GOOD +} + +struct Animal { + virtual ~Animal(); +}; + +struct Cat : public Animal { + Cat(); + ~Cat(); +}; + +struct Dog : public Animal { + Dog(); + ~Dog(); +}; + +void test6() { + Animal* a = new Cat; + Dog* d = static_cast(a); // BAD +} + +void test7() { + Animal* a = new Cat; + Dog* d = dynamic_cast(a); // GOOD +} + +void test8() { + Animal* a = new Cat; + Cat* d = static_cast(a); // GOOD +} + +void test9(bool b) { + Animal* a; + if(b) { + a = new Cat; + } else { + a = new Dog; + } + if(b) { + Cat* d = static_cast(a); // GOOD + } +} + +/** + * The layout of S2 is: + * 0: int + * 8: void* + * 16: unsigned char + * 16 + pad: unsigned char + * 32 + pad: int + * 40 + pad: void* + * 48 + pad: unsigned char +*/ +struct S2 { + S1 s1; + unsigned char buffer[16]; + S1 s1_2; +}; + +struct S2_prefix { + int a; + void* p; + unsigned char c; +}; + +void test10() { + S2* s2 = new S2; + S2_prefix* s2p = reinterpret_cast(s2); // GOOD +} + +struct Not_S2_prefix { + int a; + void* p; + void* p2; + unsigned char c; +}; + +void test11() { + S2* s2 = new S2; + Not_S2_prefix* s2p = reinterpret_cast(s2); // BAD +} + +struct HasSomeBitFields { + int x : 16; + int y; + int z : 32; +}; + +void test12() { + // This has doesn't have any non-bitfield member, so we don't detect + // the problem here since the query currently ignores bitfields. + S1* s1 = new S1; + HasBitFields* hbf = reinterpret_cast(s1); // BAD [NOT DETECTED] + + S1* s1_2 = new S1; + // This one has a non-bitfield members. So we detect the problem + HasSomeBitFields* hbf2 = reinterpret_cast(s1_2); // BAD +} + +void test13(bool b, Cat* c) { + Animal* a; + if(b) { + a = c; + } else { + a = new Dog; + } + // This FP happens despite the `not GoodFlow::flowTo(sinkNode)` condition in the query + // because we don't find a flow path from `a = c` to `static_cast(a)` because + // the "source" (i.e., `a = c`) doesn't have an allocation. + if(b) { + Cat* d = static_cast(a); // GOOD [FALSE POSITIVE] + } +} + +void test14(bool b) { + Animal* a; + if(b) { + a = new Cat; + } else { + a = new Dog; + } + if(!b) { + Cat* d = static_cast(a); // BAD [NOT DETECTED] + } +} + +struct UInt64 { unsigned long u64; }; +struct UInt8 { unsigned char u8; }; + +void test14() { + void* u64 = new UInt64; + // ... + UInt8* u8 = (UInt8*)u64; // GOOD +} + +struct UInt8_with_more { UInt8 u8; void* p; }; + +void test15() { + void* u64 = new UInt64; + // ... + UInt8_with_more* u8 = (UInt8_with_more*)u64; // BAD +} + +struct SingleInt { + int i; +} __attribute__((packed));; + +struct PairInts { + int x, y; +} __attribute__((packed));; + +union MyUnion +{ + PairInts p; + unsigned long long foo; +} __attribute__((packed)); + +void test16() { + void* si = new SingleInt; + // ... + MyUnion* mu = (MyUnion*)si; // BAD [NOT DETECTED] +} + +struct UnrelatedStructSize { + unsigned char buffer[1024]; +}; + +void test17() { + void* p = new S1; + UnrelatedStructSize* uss = static_cast(p); // BAD +} + +struct TooLargeBufferSize { + unsigned char buffer[sizeof(S1) + 1]; +}; + +void test18() { + void* p = new S1; + TooLargeBufferSize* uss = static_cast(p); // BAD +} + +// semmle-extractor-options: --gcc -std=c++11 \ No newline at end of file diff --git a/csharp/.editorconfig b/csharp/.editorconfig index 3705b7144e3..2602206b037 100644 --- a/csharp/.editorconfig +++ b/csharp/.editorconfig @@ -268,6 +268,5 @@ csharp_style_var_elsewhere = true:suggestion # [extractor/Semmle.Extraction/Tuples.cs, - extractor/Semmle.Extraction.CSharp/Tuples.cs, - extractor/Semmle.Extraction.CIL/Tuples.cs] -dotnet_naming_rule.members_should_be_pascal_case.severity = none \ No newline at end of file + extractor/Semmle.Extraction.CSharp/Tuples.cs] +dotnet_naming_rule.members_should_be_pascal_case.severity = none diff --git a/csharp/CSharp.sln b/csharp/CSharp.sln index 3c9f3ef4e4f..0578b5b8810 100644 --- a/csharp/CSharp.sln +++ b/csharp/CSharp.sln @@ -8,8 +8,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semmle.Extraction", "extrac EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semmle.Extraction.CSharp", "extractor\Semmle.Extraction.CSharp\Semmle.Extraction.CSharp.csproj", "{C4D62DA0-B64B-440B-86DC-AB52318CB8BF}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semmle.Extraction.CIL", "extractor\Semmle.Extraction.CIL\Semmle.Extraction.CIL.csproj", "{399A1579-68F0-40F4-9A23-F241BA697F9C}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semmle.Extraction.CSharp.DependencyFetching", "extractor\Semmle.Extraction.CSharp.DependencyFetching\Semmle.Extraction.CSharp.DependencyFetching.csproj", "{541D1AC5-E42C-4AB2-A1A4-C2355CE2A2EF}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semmle.Extraction.CSharp.Standalone", "extractor\Semmle.Extraction.CSharp.Standalone\Semmle.Extraction.CSharp.Standalone.csproj", "{D00E7D25-0FA0-48EC-B048-CD60CE1B30D8}" @@ -18,8 +16,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semmle.Extraction.CSharp.St EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semmle.Extraction.CSharp.Util", "extractor\Semmle.Extraction.CSharp.Util\Semmle.Extraction.CSharp.Util.csproj", "{998A0D4C-8BFC-4513-A28D-4816AFB89882}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semmle.Extraction.CIL.Driver", "extractor\Semmle.Extraction.CIL.Driver\Semmle.Extraction.CIL.Driver.csproj", "{EFA400B3-C1CE-446F-A4E2-8B44E61EF47C}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semmle.Extraction.CSharp.Driver", "extractor\Semmle.Extraction.CSharp.Driver\Semmle.Extraction.CSharp.Driver.csproj", "{C36453BF-0C82-448A-B15D-26947503A2D3}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semmle.Extraction.Tests", "extractor\Semmle.Extraction.Tests\Semmle.Extraction.Tests.csproj", "{CD8D3F90-AD2E-4BB5-8E82-B94AA293864A}" @@ -34,6 +30,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Semmle.Autobuild.CSharp.Tes EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Semmle.Extraction.CSharp.DependencyStubGenerator", "extractor\Semmle.Extraction.CSharp.DependencyStubGenerator\Semmle.Extraction.CSharp.DependencyStubGenerator.csproj", "{0EDA21A3-ADD8-4C10-B494-58B12B526B76}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Semmle.Autobuild.Cpp", "..\cpp\autobuilder\Semmle.Autobuild.Cpp\Semmle.Autobuild.Cpp.csproj", "{125C4FB7-34DA-442A-9095-3EA1514270CD}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Semmle.Autobuild.Cpp.Tests", "..\cpp\autobuilder\Semmle.Autobuild.Cpp.Tests\Semmle.Autobuild.Cpp.Tests.csproj", "{72F369B7-0707-401A-802F-D526F272F9EE}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -102,6 +102,14 @@ Global {0EDA21A3-ADD8-4C10-B494-58B12B526B76}.Debug|Any CPU.Build.0 = Debug|Any CPU {0EDA21A3-ADD8-4C10-B494-58B12B526B76}.Release|Any CPU.ActiveCfg = Release|Any CPU {0EDA21A3-ADD8-4C10-B494-58B12B526B76}.Release|Any CPU.Build.0 = Release|Any CPU + {125C4FB7-34DA-442A-9095-3EA1514270CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {125C4FB7-34DA-442A-9095-3EA1514270CD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {125C4FB7-34DA-442A-9095-3EA1514270CD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {125C4FB7-34DA-442A-9095-3EA1514270CD}.Release|Any CPU.Build.0 = Release|Any CPU + {72F369B7-0707-401A-802F-D526F272F9EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {72F369B7-0707-401A-802F-D526F272F9EE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {72F369B7-0707-401A-802F-D526F272F9EE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {72F369B7-0707-401A-802F-D526F272F9EE}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs index 9f5a4b74c2e..da2e3c36c9b 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs @@ -558,8 +558,6 @@ namespace Semmle.Autobuild.CSharp.Tests [Fact] public void TestLinuxBuildlessExtractionSuccess() { - actions.RunProcess["dotnet --list-sdks"] = 0; - actions.RunProcessOut["dotnet --list-sdks"] = "any version"; actions.RunProcess[@"C:\codeql\csharp/tools/linux64/Semmle.Extraction.CSharp.Standalone"] = 0; actions.FileExists["csharp.log"] = true; actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = ""; @@ -569,14 +567,12 @@ namespace Semmle.Autobuild.CSharp.Tests actions.EnumerateDirectories[@"C:\Project"] = ""; var autobuilder = CreateAutoBuilder(false, buildless: "true"); - TestAutobuilderScript(autobuilder, 0, 2); + TestAutobuilderScript(autobuilder, 0, 1); } [Fact] public void TestLinuxBuildlessExtractionFailed() { - actions.RunProcess["dotnet --list-sdks"] = 0; - actions.RunProcessOut["dotnet --list-sdks"] = "any version"; actions.RunProcess[@"C:\codeql\csharp/tools/linux64/Semmle.Extraction.CSharp.Standalone"] = 10; actions.FileExists["csharp.log"] = true; actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = ""; @@ -586,14 +582,12 @@ namespace Semmle.Autobuild.CSharp.Tests actions.EnumerateDirectories[@"C:\Project"] = ""; var autobuilder = CreateAutoBuilder(false, buildless: "true"); - TestAutobuilderScript(autobuilder, 10, 2); + TestAutobuilderScript(autobuilder, 10, 1); } [Fact] public void TestLinuxBuildlessExtractionSolution() { - actions.RunProcess["dotnet --list-sdks"] = 0; - actions.RunProcessOut["dotnet --list-sdks"] = "any version"; actions.RunProcess[@"C:\codeql\csharp/tools/linux64/Semmle.Extraction.CSharp.Standalone"] = 0; actions.FileExists["csharp.log"] = true; actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = ""; @@ -603,28 +597,7 @@ namespace Semmle.Autobuild.CSharp.Tests actions.EnumerateDirectories[@"C:\Project"] = ""; var autobuilder = CreateAutoBuilder(false, buildless: "true"); - TestAutobuilderScript(autobuilder, 0, 2); - } - - [Fact] - public void TestLinuxBuildlessExtractionNoDotnet() - { - actions.RunProcess["dotnet --list-sdks"] = 1; - actions.RunProcessOut["dotnet --list-sdks"] = ""; - actions.RunProcess[@"chmod u+x scratch/.dotnet/dotnet-install.sh"] = 0; - actions.RunProcess[@"scratch/.dotnet/dotnet-install.sh --channel release --version 8.0.101 --install-dir scratch/.dotnet"] = 0; - actions.RunProcess[@"C:\codeql\csharp/tools/linux64/Semmle.Extraction.CSharp.Standalone --dotnet scratch/.dotnet"] = 0; - actions.FileExists["csharp.log"] = true; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR"] = ""; - actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SCRATCH_DIR"] = "scratch"; - actions.EnumerateFiles[@"C:\Project"] = "foo.cs\ntest.sln"; - actions.EnumerateDirectories[@"C:\Project"] = ""; - actions.DownloadFiles.Add(("https://dot.net/v1/dotnet-install.sh", "scratch/.dotnet/dotnet-install.sh")); - actions.CreateDirectories.Add(@"scratch/.dotnet"); - - var autobuilder = CreateAutoBuilder(false, buildless: "true"); - TestAutobuilderScript(autobuilder, 0, 4); + TestAutobuilderScript(autobuilder, 0, 1); } private void SkipVsWhere() @@ -915,8 +888,6 @@ namespace Semmle.Autobuild.CSharp.Tests [Fact] public void TestSkipNugetBuildless() { - actions.RunProcess["dotnet --list-sdks"] = 0; - actions.RunProcessOut["dotnet --list-sdks"] = "any version"; actions.RunProcess[@"C:\codeql\csharp/tools/linux64/Semmle.Extraction.CSharp.Standalone"] = 0; actions.FileExists["csharp.log"] = true; actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = ""; @@ -926,7 +897,7 @@ namespace Semmle.Autobuild.CSharp.Tests actions.EnumerateDirectories[@"C:\Project"] = ""; var autobuilder = CreateAutoBuilder(false, buildless: "true"); - TestAutobuilderScript(autobuilder, 0, 2); + TestAutobuilderScript(autobuilder, 0, 1); } @@ -999,12 +970,10 @@ namespace Semmle.Autobuild.CSharp.Tests actions.RunProcess["dotnet --list-sdks"] = 0; actions.RunProcessOut["dotnet --list-sdks"] = @"2.1.3 [C:\Program Files\dotnet\sdks] 2.1.4 [C:\Program Files\dotnet\sdks]"; - actions.RunProcess[@"chmod u+x scratch/.dotnet/dotnet-install.sh"] = 0; - actions.RunProcess[@"scratch/.dotnet/dotnet-install.sh --channel release --version 2.1.3 --install-dir scratch/.dotnet"] = 0; - actions.RunProcess[@"scratch/.dotnet/dotnet --info"] = 0; - actions.RunProcess[@"scratch/.dotnet/dotnet clean C:\Project/test.csproj"] = 0; - actions.RunProcess[@"scratch/.dotnet/dotnet restore C:\Project/test.csproj"] = 0; - actions.RunProcess[@"scratch/.dotnet/dotnet build --no-incremental C:\Project/test.csproj"] = 0; + actions.RunProcess[@"dotnet --info"] = 0; + actions.RunProcess[@"dotnet clean C:\Project/test.csproj"] = 0; + actions.RunProcess[@"dotnet restore C:\Project/test.csproj"] = 0; + actions.RunProcess[@"dotnet build --no-incremental C:\Project/test.csproj"] = 0; actions.FileExists["csharp.log"] = true; actions.FileExists["test.csproj"] = true; actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = ""; @@ -1022,17 +991,15 @@ namespace Semmle.Autobuild.CSharp.Tests "); actions.LoadXml[@"C:\Project/test.csproj"] = xml; - actions.DownloadFiles.Add(("https://dot.net/v1/dotnet-install.sh", "scratch/.dotnet/dotnet-install.sh")); - actions.CreateDirectories.Add(@"scratch/.dotnet"); var autobuilder = CreateAutoBuilder(false, dotnetVersion: "2.1.3"); - TestAutobuilderScript(autobuilder, 0, 7); + TestAutobuilderScript(autobuilder, 0, 5); } private void TestDotnetVersionWindows(Action action, int commandsRun) { actions.RunProcess["cmd.exe /C dotnet --list-sdks"] = 0; - actions.RunProcessOut["cmd.exe /C dotnet --list-sdks"] = "2.1.3 [C:\\Program Files\\dotnet\\sdks]\n2.1.4 [C:\\Program Files\\dotnet\\sdks]"; + actions.RunProcessOut["cmd.exe /C dotnet --list-sdks"] = "2.1.4 [C:\\Program Files\\dotnet\\sdks]"; action(); actions.RunProcess[@"cmd.exe /C scratch\.dotnet\dotnet --info"] = 0; actions.RunProcess[@"cmd.exe /C scratch\.dotnet\dotnet clean C:\Project\test.csproj"] = 0; diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/AutoBuildRule.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp/AutoBuildRule.cs index cd138d62af5..e58c8ddccd9 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp/AutoBuildRule.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/AutoBuildRule.cs @@ -1,5 +1,6 @@ using Semmle.Autobuild.Shared; using Semmle.Extraction.CSharp; +using Semmle.Util; namespace Semmle.Autobuild.CSharp { diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs index 859029eee32..aad91541064 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs @@ -50,11 +50,8 @@ namespace Semmle.Autobuild.CSharp attempt = new BuildCommandRule(DotNetRule.WithDotNet).Analyse(this, false) & CheckExtractorRun(true); break; case CSharpBuildStrategy.Buildless: - attempt = DotNetRule.WithDotNet(this, ensureDotNetAvailable: true, (dotNetPath, env) => - { - // No need to check that the extractor has been executed in buildless mode - return new StandaloneBuildRule(dotNetPath).Analyse(this, false); - }); + // No need to check that the extractor has been executed in buildless mode + attempt = new StandaloneBuildRule().Analyse(this, false); break; case CSharpBuildStrategy.MSBuild: attempt = new MsBuildRule().Analyse(this, false) & CheckExtractorRun(true); @@ -84,7 +81,7 @@ namespace Semmle.Autobuild.CSharp return 0; if (warnOnFailure) - Log(Severity.Error, "No C# code detected during build."); + Logger.LogError("No C# code detected during build."); return 1; }); diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/Constants.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp/Constants.cs deleted file mode 100644 index 6e0f0ded7a4..00000000000 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp/Constants.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Semmle.Autobuild.CSharp -{ - internal static class Constants - { - // The version number should be kept in sync with the version .NET version used for building the application. - public const string LatestDotNetSdkVersion = "8.0.101"; - } -} diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs index f5e519b1f90..cd25055da1a 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/DotNetRule.cs @@ -5,7 +5,7 @@ using System.Linq; using Semmle.Util; using Semmle.Util.Logging; using Semmle.Autobuild.Shared; -using Newtonsoft.Json.Linq; +using Semmle.Extraction.CSharp.DependencyFetching; namespace Semmle.Autobuild.CSharp { @@ -39,11 +39,11 @@ namespace Semmle.Autobuild.CSharp if (notDotNetProject is not null) { - builder.Log(Severity.Info, "Not using .NET Core because of incompatible project {0}", notDotNetProject); + builder.Logger.Log(Severity.Info, "Not using .NET Core because of incompatible project {0}", notDotNetProject); return BuildScript.Failure; } - builder.Log(Severity.Info, "Attempting to build using .NET Core"); + builder.Logger.LogInfo("Attempting to build using .NET Core"); } return WithDotNet(builder, ensureDotNetAvailable: false, (dotNetPath, environment) => @@ -81,29 +81,22 @@ namespace Semmle.Autobuild.CSharp /// public static BuildScript WithDotNet(IAutobuilder builder, bool ensureDotNetAvailable, Func?, BuildScript> f) { - var installDir = builder.Actions.PathCombine(FileUtils.GetTemporaryWorkingDirectory(builder.Actions.GetEnvironmentVariable, builder.Options.Language.UpperCaseName, out var _), ".dotnet"); - var installScript = DownloadDotNet(builder, installDir, ensureDotNetAvailable); - return BuildScript.Bind(installScript, installed => + var temp = FileUtils.GetTemporaryWorkingDirectory(builder.Actions.GetEnvironmentVariable, builder.Options.Language.UpperCaseName, out var shouldCleanUp); + return DotNet.WithDotNet(builder.Actions, builder.Logger, builder.Paths.Select(x => x.Item1), temp, shouldCleanUp, ensureDotNetAvailable, builder.Options.DotNetVersion, installDir => { var env = new Dictionary { { "DOTNET_SKIP_FIRST_TIME_EXPERIENCE", "true" }, { "MSBUILDDISABLENODEREUSE", "1" } }; - if (installed == 0) + if (installDir is not null) { - // The installation succeeded, so use the newly installed .NET Core + // The installation succeeded, so use the newly installed .NET var path = builder.Actions.GetEnvironmentVariable("PATH"); var delim = builder.Actions.IsWindows() ? ";" : ":"; - env.Add("DOTNET_MULTILEVEL_LOOKUP", "false"); // prevent look up of other .NET Core SDKs + env.Add("DOTNET_MULTILEVEL_LOOKUP", "false"); // prevent look up of other .NET SDKs env.Add("PATH", installDir + delim + path); } - else - { - // The .NET SDK was not installed, either because the installation failed or because it was already installed. - installDir = null; - } - return f(installDir, env); }); } @@ -119,146 +112,6 @@ namespace Semmle.Autobuild.CSharp public static BuildScript WithDotNet(IAutobuilder builder, Func?, BuildScript> f) => WithDotNet(builder, ensureDotNetAvailable: false, (_, env) => f(env)); - /// - /// Returns a script for downloading relevant versions of the - /// .NET Core SDK. The SDK(s) will be installed at installDir - /// (provided that the script succeeds). - /// - private static BuildScript DownloadDotNet(IAutobuilder builder, string installDir, bool ensureDotNetAvailable) - { - if (!string.IsNullOrEmpty(builder.Options.DotNetVersion)) - // Specific version supplied in configuration: always use that - return DownloadDotNetVersion(builder, installDir, builder.Options.DotNetVersion); - - // Download versions mentioned in `global.json` files - // See https://docs.microsoft.com/en-us/dotnet/core/tools/global-json - var installScript = BuildScript.Success; - var validGlobalJson = false; - foreach (var path in builder.Paths.Select(p => p.Item1).Where(p => p.EndsWith("global.json", StringComparison.Ordinal))) - { - string version; - try - { - var o = JObject.Parse(File.ReadAllText(path)); - version = (string)(o?["sdk"]?["version"]!); - } - catch // lgtm[cs/catch-of-all-exceptions] - { - // not a valid global.json file - continue; - } - - installScript &= DownloadDotNetVersion(builder, installDir, version); - validGlobalJson = true; - } - - if (validGlobalJson) - { - return installScript; - } - - if (ensureDotNetAvailable) - { - return DownloadDotNetVersion(builder, installDir, Constants.LatestDotNetSdkVersion, needExactVersion: false); - } - - return BuildScript.Failure; - } - - /// - /// Returns a script for downloading a specific .NET Core SDK version, if the - /// version is not already installed. - /// - /// See https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-install-script. - /// - private static BuildScript DownloadDotNetVersion(IAutobuilder builder, string path, string version, bool needExactVersion = true) - { - return BuildScript.Bind(GetInstalledSdksScript(builder.Actions), (sdks, sdksRet) => - { - if (needExactVersion && sdksRet == 0 && sdks.Count == 1 && sdks[0].StartsWith(version + " ", StringComparison.Ordinal)) - { - // The requested SDK is already installed (and no other SDKs are installed), so - // no need to reinstall - return BuildScript.Failure; - } - else if (!needExactVersion && sdksRet == 0 && sdks.Count > 0) - { - // there's at least one SDK installed, so no need to reinstall - return BuildScript.Failure; - } - else if (!needExactVersion && sdksRet != 0) - { - builder.Log(Severity.Info, "No .NET Core SDK found."); - } - - builder.Log(Severity.Info, "Attempting to download .NET Core {0}", version); - - if (builder.Actions.IsWindows()) - { - - var psCommand = $"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; &([scriptblock]::Create((Invoke-WebRequest -UseBasicParsing 'https://dot.net/v1/dotnet-install.ps1'))) -Version {version} -InstallDir {path}"; - - BuildScript GetInstall(string pwsh) => - new CommandBuilder(builder.Actions). - RunCommand(pwsh). - Argument("-NoProfile"). - Argument("-ExecutionPolicy"). - Argument("unrestricted"). - Argument("-Command"). - Argument("\"" + psCommand + "\""). - Script; - - return GetInstall("pwsh") | GetInstall("powershell"); - } - else - { - var dotnetInstallPath = builder.Actions.PathCombine(FileUtils.GetTemporaryWorkingDirectory( - builder.Actions.GetEnvironmentVariable, - builder.Options.Language.UpperCaseName, - out var shouldCleanUp), ".dotnet", "dotnet-install.sh"); - - var downloadDotNetInstallSh = BuildScript.DownloadFile( - "https://dot.net/v1/dotnet-install.sh", - dotnetInstallPath, - e => builder.Log(Severity.Warning, $"Failed to download 'dotnet-install.sh': {e.Message}")); - - var chmod = new CommandBuilder(builder.Actions). - RunCommand("chmod"). - Argument("u+x"). - Argument(dotnetInstallPath); - - var install = new CommandBuilder(builder.Actions). - RunCommand(dotnetInstallPath). - Argument("--channel"). - Argument("release"). - Argument("--version"). - Argument(version). - Argument("--install-dir"). - Argument(path); - - var buildScript = downloadDotNetInstallSh & chmod.Script & install.Script; - - if (shouldCleanUp) - { - var removeScript = new CommandBuilder(builder.Actions). - RunCommand("rm"). - Argument(dotnetInstallPath); - buildScript &= removeScript.Script; - } - - return buildScript; - } - }); - } - - private static BuildScript GetInstalledSdksScript(IBuildActions actions) - { - var listSdks = new CommandBuilder(actions, silent: true). - RunCommand("dotnet"). - Argument("--list-sdks"); - return listSdks.Script; - } - private static string DotNetCommand(IBuildActions actions, string? dotNetPath) => dotNetPath is not null ? actions.PathCombine(dotNetPath, "dotnet") : "dotnet"; diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/Program.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp/Program.cs index 479625c76e3..71289148916 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp/Program.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/Program.cs @@ -1,5 +1,7 @@ using System; + using Semmle.Autobuild.Shared; +using Semmle.Util; namespace Semmle.Autobuild.CSharp { diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/Semmle.Autobuild.CSharp.csproj b/csharp/autobuilder/Semmle.Autobuild.CSharp/Semmle.Autobuild.CSharp.csproj index dbbe8c80471..911e71bfdc9 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp/Semmle.Autobuild.CSharp.csproj +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/Semmle.Autobuild.CSharp.csproj @@ -20,6 +20,7 @@ + diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/StandaloneBuildRule.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp/StandaloneBuildRule.cs index 0279c6af01c..c202a029674 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp/StandaloneBuildRule.cs +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/StandaloneBuildRule.cs @@ -1,4 +1,5 @@ using Semmle.Autobuild.Shared; +using Semmle.Util; namespace Semmle.Autobuild.CSharp { @@ -7,13 +8,6 @@ namespace Semmle.Autobuild.CSharp /// internal class StandaloneBuildRule : IBuildRule { - private readonly string? dotNetPath; - - internal StandaloneBuildRule(string? dotNetPath) - { - this.dotNetPath = dotNetPath; - } - public BuildScript Analyse(IAutobuilder builder, bool auto) { if (builder.CodeQLExtractorLangRoot is null @@ -26,12 +20,6 @@ namespace Semmle.Autobuild.CSharp var cmd = new CommandBuilder(builder.Actions); cmd.RunCommand(standalone); - if (!string.IsNullOrEmpty(this.dotNetPath)) - { - cmd.Argument("--dotnet"); - cmd.QuoteArgument(this.dotNetPath); - } - return cmd.Script; } } diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs index d6757418875..a23d29d2979 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs @@ -70,11 +70,9 @@ namespace Semmle.Autobuild.Shared IBuildActions Actions { get; } /// - /// Log a given build event to the console. + /// A logger. /// - /// The format string. - /// Inserts to the format string. - void Log(Severity severity, string format, params object[] args); + ILogger Logger { get; } /// /// Value of CODEQL_EXTRACTOR__ROOT environment variable. @@ -135,21 +133,7 @@ namespace Semmle.Autobuild.Shared /// True iff the path was found. public bool HasPath(string path) => Paths.Any(p => path == p.Item1); - private void FindFiles(string dir, int depth, int maxDepth, IList<(string, int)> results) - { - foreach (var f in Actions.EnumerateFiles(dir)) - { - results.Add((f, depth)); - } - if (depth < maxDepth) - { - foreach (var d in Actions.EnumerateDirectories(dir)) - { - FindFiles(d, depth + 1, maxDepth, results); - } - } - } /// /// The root of the source directory. @@ -196,12 +180,7 @@ namespace Semmle.Autobuild.Shared Options = options; DiagnosticClassifier = diagnosticClassifier; - pathsLazy = new Lazy>(() => - { - var files = new List<(string, int)>(); - FindFiles(options.RootDirectory, 0, options.SearchDepth, files); - return files.OrderBy(f => f.Item2).ToArray(); - }); + pathsLazy = new Lazy>(() => Actions.FindFiles(options.RootDirectory, options.SearchDepth)); projectsOrSolutionsToBuildLazy = new Lazy>(() => { @@ -214,7 +193,7 @@ namespace Semmle.Autobuild.Shared if (actions.FileExists(solution)) ret.Add(new Solution(this, solution, true)); else - Log(Severity.Error, $"The specified project or solution file {solution} was not found"); + logger.LogError($"The specified project or solution file {solution} was not found"); } return ret; } @@ -273,6 +252,8 @@ namespace Semmle.Autobuild.Shared logThreadId: false) ?? Verbosity.Info, logThreadId: false); + public ILogger Logger => logger; + private readonly IDiagnosticsWriter diagnostics; /// @@ -285,16 +266,6 @@ namespace Semmle.Autobuild.Shared return Path.GetRelativePath(this.RootDirectory, path); } - /// - /// Log a given build event to the console. - /// - /// The format string. - /// Inserts to the format string. - public void Log(Severity severity, string format, params object[] args) - { - logger.Log(severity, format, args); - } - /// /// Write to the diagnostics file. /// @@ -310,7 +281,7 @@ namespace Semmle.Autobuild.Shared /// The exit code, 0 for success and non-zero for failures. public int AttemptBuild() { - Log(Severity.Info, $"Working directory: {Options.RootDirectory}"); + logger.LogInfo($"Working directory: {Options.RootDirectory}"); var script = GetBuildScript(); @@ -319,12 +290,12 @@ namespace Semmle.Autobuild.Shared void startCallback(string s, bool silent) { - Log(silent ? Severity.Debug : Severity.Info, $"\nRunning {s}"); + logger.Log(silent ? Severity.Debug : Severity.Info, $"\nRunning {s}"); } void exitCallback(int ret, string msg, bool silent) { - Log(silent ? Severity.Debug : Severity.Info, $"Exit code {ret}{(string.IsNullOrEmpty(msg) ? "" : $": {msg}")}"); + logger.Log(silent ? Severity.Debug : Severity.Info, $"Exit code {ret}{(string.IsNullOrEmpty(msg) ? "" : $": {msg}")}"); } var onOutput = BuildOutputHandler(Console.Out); @@ -374,7 +345,7 @@ namespace Semmle.Autobuild.Shared protected BuildScript AutobuildFailure() => BuildScript.Create(actions => { - Log(Severity.Error, "Could not auto-detect a suitable build method"); + logger.LogError("Could not auto-detect a suitable build method"); AutobuildFailureDiagnostic(); diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandAutoRule.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandAutoRule.cs index c0990a75ae1..d754b3c3134 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandAutoRule.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandAutoRule.cs @@ -1,5 +1,7 @@ using System.Collections.Generic; using System.Linq; + +using Semmle.Util; using Semmle.Util.Logging; namespace Semmle.Autobuild.Shared @@ -53,7 +55,7 @@ namespace Semmle.Autobuild.Shared public BuildScript Analyse(IAutobuilder builder, bool auto) { - builder.Log(Severity.Info, "Attempting to locate build script"); + builder.Logger.LogInfo("Attempting to locate build script"); // a list of extensions for files that we consider to be scripts on the current platform var extensions = builder.Actions.IsWindows() ? winExtensions : linuxExtensions; diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandRule.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandRule.cs index 54d406c9dac..9aaefe1a1da 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandRule.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/BuildCommandRule.cs @@ -1,4 +1,6 @@ -namespace Semmle.Autobuild.Shared +using Semmle.Util; + +namespace Semmle.Autobuild.Shared { /// /// Execute the build_command rule. diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/BuildTools.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/BuildTools.cs index a0079ca8bb9..0e910b68d48 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/BuildTools.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/BuildTools.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Linq; +using Semmle.Util; namespace Semmle.Autobuild.Shared { diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/MsBuildRule.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/MsBuildRule.cs index 3099449a1fb..bff10532abf 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/MsBuildRule.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/MsBuildRule.cs @@ -40,7 +40,7 @@ namespace Semmle.Autobuild.Shared return BuildScript.Failure; if (auto) - builder.Log(Severity.Info, "Attempting to build using MSBuild"); + builder.Logger.LogInfo("Attempting to build using MSBuild"); var vsTools = GetVcVarsBatFile(builder); @@ -54,7 +54,7 @@ namespace Semmle.Autobuild.Shared if (vsTools is null && builder.Actions.IsWindows()) { - builder.Log(Severity.Warning, "Could not find a suitable version of VsDevCmd.bat/vcvarsall.bat"); + builder.Logger.LogWarning("Could not find a suitable version of VsDevCmd.bat/vcvarsall.bat"); } // Use `nuget.exe` from source code repo, if present, otherwise first attempt with global @@ -165,18 +165,18 @@ namespace Semmle.Autobuild.Shared { foreach (var b in BuildTools.VcVarsAllBatFiles(builder.Actions)) { - builder.Log(Severity.Info, "Found {0} version {1}", b.Path, b.ToolsVersion); + builder.Logger.Log(Severity.Info, "Found {0} version {1}", b.Path, b.ToolsVersion); } vsTools = BuildTools.FindCompatibleVcVars(builder.Actions, msToolsVersion); if (vsTools is null) - builder.Log(Severity.Warning, "Could not find build tools matching version {0}", msToolsVersion); + builder.Logger.LogWarning("Could not find build tools matching version {0}", msToolsVersion); else - builder.Log(Severity.Info, "Setting Visual Studio tools to {0}", vsTools.Path); + builder.Logger.Log(Severity.Info, "Setting Visual Studio tools to {0}", vsTools.Path); } else { - builder.Log(Severity.Error, "The format of vstools_version is incorrect. Please specify an integer."); + builder.Logger.LogError("The format of vstools_version is incorrect. Please specify an integer."); } } @@ -189,18 +189,18 @@ namespace Semmle.Autobuild.Shared private static BuildScript DownloadNugetExe(IAutobuilder builder, string path) where TAutobuildOptions : AutobuildOptionsShared => BuildScript.Create(_ => { - builder.Log(Severity.Info, "Attempting to download nuget.exe"); + builder.Logger.LogInfo("Attempting to download nuget.exe"); return 0; }) & BuildScript.DownloadFile( FileUtils.NugetExeUrl, path, - e => builder.Log(Severity.Warning, $"Failed to download 'nuget.exe': {e.Message}")) + e => builder.Logger.LogWarning($"Failed to download 'nuget.exe': {e.Message}")) & BuildScript.Create(_ => { - builder.Log(Severity.Info, $"Successfully downloaded {path}"); + builder.Logger.LogInfo($"Successfully downloaded {path}"); return 0; }); } diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/Project.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/Project.cs index 71522859871..5979b11e8fc 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/Project.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/Project.cs @@ -41,7 +41,7 @@ namespace Semmle.Autobuild.Shared } catch (Exception ex) when (ex is XmlException || ex is FileNotFoundException) { - builder.Log(Severity.Info, $"Unable to read project file {path}."); + builder.Logger.LogInfo($"Unable to read project file {path}."); return; } @@ -66,7 +66,7 @@ namespace Semmle.Autobuild.Shared catch // lgtm[cs/catch-of-all-exceptions] // Generic catch clause - Version constructor throws about 5 different exceptions. { - builder.Log(Severity.Warning, "Project {0} has invalid tools version {1}", path, toolsVersion); + builder.Logger.Log(Severity.Warning, "Project {0} has invalid tools version {1}", path, toolsVersion); } } diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/Solution.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/Solution.cs index d48cfa15913..7a98a01de25 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/Solution.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/Solution.cs @@ -73,7 +73,7 @@ namespace Semmle.Autobuild.Shared return; } - builder.Log(Severity.Info, $"Unable to read solution file {path}."); + builder.Logger.LogInfo($"Unable to read solution file {path}."); includedProjects = Array.Empty>(); return; } diff --git a/csharp/codeql-extractor.yml b/csharp/codeql-extractor.yml index 0f65d9bc2e5..6c3285c412b 100644 --- a/csharp/codeql-extractor.yml +++ b/csharp/codeql-extractor.yml @@ -9,6 +9,7 @@ extra_env_vars: build_modes: - autobuild - manual + - none github_api_languages: - C# scc_languages: @@ -33,8 +34,10 @@ options: type: string pattern: "^(none|gzip|brotli)$" buildless: - title: Whether to use buildless (standalone) extraction. + title: DEPRECATED - Whether to use buildless (standalone) extraction. description: > + DEPRECATED: Use `--build-mode none` instead. + A value indicating, which type of extraction the autobuilder should perform. If 'true', then the standalone extractor will be used, otherwise tracing extraction will be performed. @@ -44,13 +47,6 @@ options: the code (for example if it uses inaccessible dependencies). type: string pattern: "^(false|true)$" - cil: - title: Whether to enable CIL extraction. - description: > - A value indicating, whether CIL extraction should be enabled. - The default is 'true'. - type: string - pattern: "^(false|true)$" logging: title: Options pertaining to logging. type: object diff --git a/csharp/documentation/library-coverage/coverage.csv b/csharp/documentation/library-coverage/coverage.csv index 43681e0a264..6da4acdabe6 100644 --- a/csharp/documentation/library-coverage/coverage.csv +++ b/csharp/documentation/library-coverage/coverage.csv @@ -1,44 +1,44 @@ -package,sink,source,summary,sink:code-injection,sink:encryption-decryptor,sink:encryption-encryptor,sink:encryption-keyprop,sink:encryption-symmetrickey,sink:file-content-store,sink:html-injection,sink:js-injection,sink:log-injection,sink:sql-injection,source:file,source:file-write,source:local,source:remote,summary:taint,summary:value -Amazon.Lambda.APIGatewayEvents,,6,,,,,,,,,,,,,,,6,, -Amazon.Lambda.Core,10,,,,,,,,,,,10,,,,,,, -Dapper,55,,,,,,,,,,,,55,,,,,, -ILCompiler,,,81,,,,,,,,,,,,,,,81, -ILLink.RoslynAnalyzer,,,63,,,,,,,,,,,,,,,63, -ILLink.Shared,,,32,,,,,,,,,,,,,,,29,3 -ILLink.Tasks,,,5,,,,,,,,,,,,,,,5, -Internal.IL,,,69,,,,,,,,,,,,,,,67,2 -Internal.Pgo,,,9,,,,,,,,,,,,,,,8,1 -Internal.TypeSystem,,,367,,,,,,,,,,,,,,,331,36 -JsonToItemsTaskFactory,,,7,,,,,,,,,,,,,,,7, -Microsoft.Android.Build,,,14,,,,,,,,,,,,,,,14, -Microsoft.Apple.Build,,,7,,,,,,,,,,,,,,,7, -Microsoft.ApplicationBlocks.Data,28,,,,,,,,,,,,28,,,,,, -Microsoft.CSharp,,,24,,,,,,,,,,,,,,,24, -Microsoft.Diagnostics.Tools.Pgo,,,13,,,,,,,,,,,,,,,13, -Microsoft.EntityFrameworkCore,6,,12,,,,,,,,,,6,,,,,,12 -Microsoft.Extensions.Caching.Distributed,,,15,,,,,,,,,,,,,,,15, -Microsoft.Extensions.Caching.Memory,,,38,,,,,,,,,,,,,,,37,1 -Microsoft.Extensions.Configuration,,,83,,,,,,,,,,,,,,,80,3 -Microsoft.Extensions.DependencyInjection,,,120,,,,,,,,,,,,,,,120, -Microsoft.Extensions.DependencyModel,,,12,,,,,,,,,,,,,,,12, -Microsoft.Extensions.Diagnostics.Metrics,,,13,,,,,,,,,,,,,,,13, -Microsoft.Extensions.FileProviders,,,15,,,,,,,,,,,,,,,15, -Microsoft.Extensions.FileSystemGlobbing,,,16,,,,,,,,,,,,,,,14,2 -Microsoft.Extensions.Hosting,,,23,,,,,,,,,,,,,,,22,1 -Microsoft.Extensions.Http,,,10,,,,,,,,,,,,,,,10, -Microsoft.Extensions.Logging,,,60,,,,,,,,,,,,,,,59,1 -Microsoft.Extensions.Options,,,8,,,,,,,,,,,,,,,8, -Microsoft.Extensions.Primitives,,,64,,,,,,,,,,,,,,,64, -Microsoft.Interop,,,78,,,,,,,,,,,,,,,78, -Microsoft.NET.Build.Tasks,,,1,,,,,,,,,,,,,,,1, -Microsoft.NET.WebAssembly.Webcil,,,7,,,,,,,,,,,,,,,7, -Microsoft.VisualBasic,,,10,,,,,,,,,,,,,,,5,5 -Microsoft.WebAssembly.Build.Tasks,,,3,,,,,,,,,,,,,,,3, -Microsoft.Win32.SafeHandles,,,4,,,,,,,,,,,,,,,4, -Mono.Linker,,,163,,,,,,,,,,,,,,,163, -MySql.Data.MySqlClient,48,,,,,,,,,,,,48,,,,,, -Newtonsoft.Json,,,91,,,,,,,,,,,,,,,73,18 -ServiceStack,194,,7,27,,,,,75,,,,92,,,,,7, -SourceGenerators,,,4,,,,,,,,,,,,,,,4, -System,67,25,11862,,8,8,9,,,4,5,,33,1,17,3,4,9896,1966 -Windows.Security.Cryptography.Core,1,,,,,,,1,,,,,,,,,,, +package,sink,source,summary,sink:code-injection,sink:encryption-decryptor,sink:encryption-encryptor,sink:encryption-keyprop,sink:encryption-symmetrickey,sink:file-content-store,sink:html-injection,sink:js-injection,sink:log-injection,sink:sql-injection,source:commandargs,source:environment,source:file,source:file-write,source:local,source:remote,source:windows-registry,summary:taint,summary:value +Amazon.Lambda.APIGatewayEvents,,6,,,,,,,,,,,,,,,,,6,,, +Amazon.Lambda.Core,10,,,,,,,,,,,10,,,,,,,,,, +Dapper,55,,,,,,,,,,,,55,,,,,,,,, +ILCompiler,,,81,,,,,,,,,,,,,,,,,,81, +ILLink.RoslynAnalyzer,,,63,,,,,,,,,,,,,,,,,,63, +ILLink.Shared,,,32,,,,,,,,,,,,,,,,,,29,3 +ILLink.Tasks,,,5,,,,,,,,,,,,,,,,,,5, +Internal.IL,,,69,,,,,,,,,,,,,,,,,,67,2 +Internal.Pgo,,,9,,,,,,,,,,,,,,,,,,8,1 +Internal.TypeSystem,,,367,,,,,,,,,,,,,,,,,,331,36 +JsonToItemsTaskFactory,,,7,,,,,,,,,,,,,,,,,,7, +Microsoft.Android.Build,,,14,,,,,,,,,,,,,,,,,,14, +Microsoft.Apple.Build,,,7,,,,,,,,,,,,,,,,,,7, +Microsoft.ApplicationBlocks.Data,28,,,,,,,,,,,,28,,,,,,,,, +Microsoft.CSharp,,,24,,,,,,,,,,,,,,,,,,24, +Microsoft.Diagnostics.Tools.Pgo,,,13,,,,,,,,,,,,,,,,,,13, +Microsoft.EntityFrameworkCore,6,,12,,,,,,,,,,6,,,,,,,,,12 +Microsoft.Extensions.Caching.Distributed,,,15,,,,,,,,,,,,,,,,,,15, +Microsoft.Extensions.Caching.Memory,,,38,,,,,,,,,,,,,,,,,,37,1 +Microsoft.Extensions.Configuration,,2,89,,,,,,,,,,,,2,,,,,,86,3 +Microsoft.Extensions.DependencyInjection,,,120,,,,,,,,,,,,,,,,,,120, +Microsoft.Extensions.DependencyModel,,,12,,,,,,,,,,,,,,,,,,12, +Microsoft.Extensions.Diagnostics.Metrics,,,13,,,,,,,,,,,,,,,,,,13, +Microsoft.Extensions.FileProviders,,,15,,,,,,,,,,,,,,,,,,15, +Microsoft.Extensions.FileSystemGlobbing,,,16,,,,,,,,,,,,,,,,,,14,2 +Microsoft.Extensions.Hosting,,,23,,,,,,,,,,,,,,,,,,22,1 +Microsoft.Extensions.Http,,,10,,,,,,,,,,,,,,,,,,10, +Microsoft.Extensions.Logging,,,60,,,,,,,,,,,,,,,,,,59,1 +Microsoft.Extensions.Options,,,8,,,,,,,,,,,,,,,,,,8, +Microsoft.Extensions.Primitives,,,64,,,,,,,,,,,,,,,,,,64, +Microsoft.Interop,,,78,,,,,,,,,,,,,,,,,,78, +Microsoft.NET.Build.Tasks,,,1,,,,,,,,,,,,,,,,,,1, +Microsoft.NET.WebAssembly.Webcil,,,7,,,,,,,,,,,,,,,,,,7, +Microsoft.VisualBasic,,,10,,,,,,,,,,,,,,,,,,5,5 +Microsoft.WebAssembly.Build.Tasks,,,3,,,,,,,,,,,,,,,,,,3, +Microsoft.Win32,,4,4,,,,,,,,,,,,,,,,,4,4, +Mono.Linker,,,163,,,,,,,,,,,,,,,,,,163, +MySql.Data.MySqlClient,48,,,,,,,,,,,,48,,,,,,,,, +Newtonsoft.Json,,,91,,,,,,,,,,,,,,,,,,73,18 +ServiceStack,194,,7,27,,,,,75,,,,92,,,,,,,,7, +SourceGenerators,,,4,,,,,,,,,,,,,,,,,,4, +System,67,30,11864,,8,8,9,,,4,5,,33,2,3,1,17,3,4,,9898,1966 +Windows.Security.Cryptography.Core,1,,,,,,,1,,,,,,,,,,,,,, diff --git a/csharp/documentation/library-coverage/coverage.rst b/csharp/documentation/library-coverage/coverage.rst index 9219a2a663f..0b11da25d91 100644 --- a/csharp/documentation/library-coverage/coverage.rst +++ b/csharp/documentation/library-coverage/coverage.rst @@ -8,7 +8,7 @@ C# framework & library support Framework / library,Package,Flow sources,Taint & value steps,Sinks (total),`CWE-079` :sub:`Cross-site scripting` `ServiceStack `_,"``ServiceStack.*``, ``ServiceStack``",,7,194, - System,"``System.*``, ``System``",25,11862,67,9 - Others,"``Amazon.Lambda.APIGatewayEvents``, ``Amazon.Lambda.Core``, ``Dapper``, ``ILCompiler``, ``ILLink.RoslynAnalyzer``, ``ILLink.Shared``, ``ILLink.Tasks``, ``Internal.IL``, ``Internal.Pgo``, ``Internal.TypeSystem``, ``JsonToItemsTaskFactory``, ``Microsoft.Android.Build``, ``Microsoft.Apple.Build``, ``Microsoft.ApplicationBlocks.Data``, ``Microsoft.CSharp``, ``Microsoft.Diagnostics.Tools.Pgo``, ``Microsoft.EntityFrameworkCore``, ``Microsoft.Extensions.Caching.Distributed``, ``Microsoft.Extensions.Caching.Memory``, ``Microsoft.Extensions.Configuration``, ``Microsoft.Extensions.DependencyInjection``, ``Microsoft.Extensions.DependencyModel``, ``Microsoft.Extensions.Diagnostics.Metrics``, ``Microsoft.Extensions.FileProviders``, ``Microsoft.Extensions.FileSystemGlobbing``, ``Microsoft.Extensions.Hosting``, ``Microsoft.Extensions.Http``, ``Microsoft.Extensions.Logging``, ``Microsoft.Extensions.Options``, ``Microsoft.Extensions.Primitives``, ``Microsoft.Interop``, ``Microsoft.NET.Build.Tasks``, ``Microsoft.NET.WebAssembly.Webcil``, ``Microsoft.VisualBasic``, ``Microsoft.WebAssembly.Build.Tasks``, ``Microsoft.Win32.SafeHandles``, ``Mono.Linker``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``, ``SourceGenerators``, ``Windows.Security.Cryptography.Core``",6,1541,148, - Totals,,31,13410,409,9 + System,"``System.*``, ``System``",30,11864,67,9 + Others,"``Amazon.Lambda.APIGatewayEvents``, ``Amazon.Lambda.Core``, ``Dapper``, ``ILCompiler``, ``ILLink.RoslynAnalyzer``, ``ILLink.Shared``, ``ILLink.Tasks``, ``Internal.IL``, ``Internal.Pgo``, ``Internal.TypeSystem``, ``JsonToItemsTaskFactory``, ``Microsoft.Android.Build``, ``Microsoft.Apple.Build``, ``Microsoft.ApplicationBlocks.Data``, ``Microsoft.CSharp``, ``Microsoft.Diagnostics.Tools.Pgo``, ``Microsoft.EntityFrameworkCore``, ``Microsoft.Extensions.Caching.Distributed``, ``Microsoft.Extensions.Caching.Memory``, ``Microsoft.Extensions.Configuration``, ``Microsoft.Extensions.DependencyInjection``, ``Microsoft.Extensions.DependencyModel``, ``Microsoft.Extensions.Diagnostics.Metrics``, ``Microsoft.Extensions.FileProviders``, ``Microsoft.Extensions.FileSystemGlobbing``, ``Microsoft.Extensions.Hosting``, ``Microsoft.Extensions.Http``, ``Microsoft.Extensions.Logging``, ``Microsoft.Extensions.Options``, ``Microsoft.Extensions.Primitives``, ``Microsoft.Interop``, ``Microsoft.NET.Build.Tasks``, ``Microsoft.NET.WebAssembly.Webcil``, ``Microsoft.VisualBasic``, ``Microsoft.WebAssembly.Build.Tasks``, ``Microsoft.Win32``, ``Mono.Linker``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``, ``SourceGenerators``, ``Windows.Security.Cryptography.Core``",12,1547,148, + Totals,,42,13418,409,9 diff --git a/csharp/downgrades/fd04e45710e1988076801608abffdfa013b680fc/old.dbscheme b/csharp/downgrades/fd04e45710e1988076801608abffdfa013b680fc/old.dbscheme new file mode 100644 index 00000000000..fd04e45710e --- /dev/null +++ b/csharp/downgrades/fd04e45710e1988076801608abffdfa013b680fc/old.dbscheme @@ -0,0 +1,2099 @@ +/* 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 +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: 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 expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_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 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 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 +| 34 = @inline_array_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 | @void_type | @inline_array_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); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +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, params/array = 3, this = 4, in = 5, ref readonly = 6 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** 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 = @utf16_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 +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_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; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_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_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); + +/* Compiler generated */ + +compiler_generated(unique int id: @element 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_field | @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; + +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/downgrades/fd04e45710e1988076801608abffdfa013b680fc/params.ql b/csharp/downgrades/fd04e45710e1988076801608abffdfa013b680fc/params.ql new file mode 100644 index 00000000000..a4f2c61b65f --- /dev/null +++ b/csharp/downgrades/fd04e45710e1988076801608abffdfa013b680fc/params.ql @@ -0,0 +1,19 @@ +class Parameter extends @parameter { + string toString() { none() } +} + +class TypeOrRef extends @type_or_ref { + string toString() { none() } +} + +class Parameterizable extends @parameterizable { + string toString() { none() } +} + +from + Parameter p, string name, TypeOrRef typeId, int index, int mode, Parameterizable parentId, + Parameter unboundId, int updatedMode +where + params(p, name, typeId, index, mode, parentId, unboundId) and + if mode = 6 then updatedMode = 0 else updatedMode = mode +select p, name, typeId, index, updatedMode, parentId, unboundId diff --git a/csharp/downgrades/fd04e45710e1988076801608abffdfa013b680fc/semmlecode.csharp.dbscheme b/csharp/downgrades/fd04e45710e1988076801608abffdfa013b680fc/semmlecode.csharp.dbscheme new file mode 100644 index 00000000000..21ede72308c --- /dev/null +++ b/csharp/downgrades/fd04e45710e1988076801608abffdfa013b680fc/semmlecode.csharp.dbscheme @@ -0,0 +1,2099 @@ +/* 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 +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: 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 expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_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 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 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 +| 34 = @inline_array_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 | @void_type | @inline_array_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); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +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); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** 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 = @utf16_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 +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_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; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_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_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); + +/* Compiler generated */ + +compiler_generated(unique int id: @element 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_field | @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; + +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/downgrades/fd04e45710e1988076801608abffdfa013b680fc/upgrade.properties b/csharp/downgrades/fd04e45710e1988076801608abffdfa013b680fc/upgrade.properties new file mode 100644 index 00000000000..d17d64146a7 --- /dev/null +++ b/csharp/downgrades/fd04e45710e1988076801608abffdfa013b680fc/upgrade.properties @@ -0,0 +1,3 @@ +description: Extract `ref readonly` parameters as having `mode` 0 in the params table. +compatibility: full +params.rel: run params.qlo diff --git a/csharp/extractor/Semmle.Extraction.CIL.Driver/ExtractorOptions.cs b/csharp/extractor/Semmle.Extraction.CIL.Driver/ExtractorOptions.cs deleted file mode 100644 index e371bf59517..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL.Driver/ExtractorOptions.cs +++ /dev/null @@ -1,250 +0,0 @@ -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Reflection.Metadata; -using System.Reflection.PortableExecutable; -using System.Runtime.InteropServices; -using Semmle.Util; - -namespace Semmle.Extraction.CIL.Driver -{ - /// - /// Information about a single assembly. - /// In particular, provides references between assemblies. - /// - internal class AssemblyInfo - { - public override string ToString() => Filename; - - private static AssemblyName CreateAssemblyName(MetadataReader mdReader, StringHandle name, System.Version version, StringHandle culture) - { - var cultureString = mdReader.GetString(culture); - - var assemblyName = new AssemblyName() - { - Name = mdReader.GetString(name), - Version = version - }; - - if (cultureString != "neutral") - assemblyName.CultureInfo = CultureInfo.GetCultureInfo(cultureString); - - return assemblyName; - } - - private static AssemblyName CreateAssemblyName(MetadataReader mdReader, AssemblyReference ar) - { - var an = CreateAssemblyName(mdReader, ar.Name, ar.Version, ar.Culture); - if (!ar.PublicKeyOrToken.IsNil) - an.SetPublicKeyToken(mdReader.GetBlobBytes(ar.PublicKeyOrToken)); - return an; - } - - private static AssemblyName CreateAssemblyName(MetadataReader mdReader, AssemblyDefinition ad) - { - var an = CreateAssemblyName(mdReader, ad.Name, ad.Version, ad.Culture); - if (!ad.PublicKey.IsNil) - an.SetPublicKey(mdReader.GetBlobBytes(ad.PublicKey)); - return an; - } - - /// - /// Initializes a new instance of the class. - /// - /// Path of the assembly. - /// - /// Thrown when the input file is not a valid assembly. - /// - public AssemblyInfo(string path) - { - Filename = path; - - // Attempt to open the file and see if it's a valid assembly. - using var stream = File.OpenRead(path); - using var peReader = new PEReader(stream); - try - { - if (!peReader.HasMetadata) - throw new InvalidAssemblyException(); - - var mdReader = peReader.GetMetadataReader(); - - if (!mdReader.IsAssembly) - throw new InvalidAssemblyException(); - - // Get our own assembly name - Name = CreateAssemblyName(mdReader, mdReader.GetAssemblyDefinition()); - - References = mdReader.AssemblyReferences - .Select(r => mdReader.GetAssemblyReference(r)) - .Select(ar => CreateAssemblyName(mdReader, ar)) - .ToArray(); - } - catch (System.BadImageFormatException) - { - // This failed on one of the Roslyn tests that includes - // a deliberately malformed assembly. - // In this case, we just skip the extraction of this assembly. - throw new InvalidAssemblyException(); - } - } - - public AssemblyName Name { get; } - public string Filename { get; } - public bool Extract { get; set; } - public AssemblyName[] References { get; } - } - - /// - /// Helper to manage a collection of assemblies. - /// Resolves references between assemblies and determines which - /// additional assemblies need to be extracted. - /// - internal class AssemblyList - { - private class AssemblyNameComparer : IEqualityComparer - { - bool IEqualityComparer.Equals(AssemblyName? x, AssemblyName? y) => - object.ReferenceEquals(x, y) || - x?.Name == y?.Name && x?.Version == y?.Version; - - int IEqualityComparer.GetHashCode(AssemblyName obj) => - (obj.Name, obj.Version).GetHashCode(); - } - - private readonly Dictionary assembliesRead = new Dictionary(new AssemblyNameComparer()); - - public void AddFile(string assemblyPath, bool extractAll) - { - if (!filesAnalyzed.Contains(assemblyPath)) - { - filesAnalyzed.Add(assemblyPath); - try - { - var info = new AssemblyInfo(assemblyPath) - { - Extract = extractAll - }; - if (!assembliesRead.ContainsKey(info.Name)) - assembliesRead.Add(info.Name, info); - } - catch (InvalidAssemblyException) - { } - } - } - - public IEnumerable AssembliesToExtract => assembliesRead.Values.Where(info => info.Extract); - - private IEnumerable AssembliesToReference => AssembliesToExtract.SelectMany(info => info.References); - - public void ResolveReferences() - { - var assembliesToReference = new Stack(AssembliesToReference); - - while (assembliesToReference.Any()) - { - var item = assembliesToReference.Pop(); - if (assembliesRead.TryGetValue(item, out var info)) - { - if (!info.Extract) - { - info.Extract = true; - foreach (var reference in info.References) - assembliesToReference.Push(reference); - } - } - else - { - MissingReferences.Add(item); - } - } - } - - private readonly HashSet filesAnalyzed = new HashSet(); - public HashSet MissingReferences { get; } = new HashSet(); - } - - /// - /// Parses the command line and collates a list of DLLs/EXEs to extract. - /// - internal class ExtractorOptions : CommonOptions - { - private readonly AssemblyList assemblyList = new AssemblyList(); - - public ExtractorOptions(string[] args) - { - this.ParseArguments(args.Append("--pdb").ToArray()); - - AddFrameworkDirectories(false); - - assemblyList.ResolveReferences(); - AssembliesToExtract = assemblyList.AssembliesToExtract.ToArray(); - } - - public void AddDirectory(string directory, bool extractAll) - { - foreach (var file in - Directory.EnumerateFiles(directory, "*.dll", SearchOption.AllDirectories). - Concat(Directory.EnumerateFiles(directory, "*.exe", SearchOption.AllDirectories))) - { - assemblyList.AddFile(file, extractAll); - } - } - - private void AddFrameworkDirectories(bool extractAll) - { - AddDirectory(RuntimeEnvironment.GetRuntimeDirectory(), extractAll); - } - - private void AddFileOrDirectory(string path) - { - path = Path.GetFullPath(path); - if (File.Exists(path)) - { - assemblyList.AddFile(path, true); - var directory = Path.GetDirectoryName(path); - if (directory is null) - { - throw new InternalError($"Directory of path '{path}' is null"); - } - AddDirectory(directory, false); - } - else if (Directory.Exists(path)) - { - AddDirectory(path, true); - } - } - - public IEnumerable AssembliesToExtract { get; } - - /// - /// Gets the assemblies that were referenced but were not available to be - /// extracted. This is not an error, it just means that the database is not - /// as complete as it could be. - /// - public IEnumerable MissingReferences => assemblyList.MissingReferences; - - public override bool HandleFlag(string flag, bool value) - { - switch (flag) - { - case "dotnet": - if (value) - AddFrameworkDirectories(true); - return true; - default: - return base.HandleFlag(flag, value); - } - } - - public override bool HandleArgument(string argument) - { - AddFileOrDirectory(argument); - return true; - } - - public override void InvalidArgument(string argument) { } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL.Driver/InvalidAssemblyException.cs b/csharp/extractor/Semmle.Extraction.CIL.Driver/InvalidAssemblyException.cs deleted file mode 100644 index 2686442a08d..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL.Driver/InvalidAssemblyException.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System; - -namespace Semmle.Extraction.CIL.Driver -{ - public class InvalidAssemblyException : Exception - { } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL.Driver/Program.cs b/csharp/extractor/Semmle.Extraction.CIL.Driver/Program.cs deleted file mode 100644 index 8fcc6fefcb3..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL.Driver/Program.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; -using System.Diagnostics; -using System.Linq; -using System.Threading.Tasks; -using Semmle.Util.Logging; - -namespace Semmle.Extraction.CIL.Driver -{ - public static class Program - { - private static void DisplayHelp() - { - Console.WriteLine("CIL command line extractor"); - Console.WriteLine(); - Console.WriteLine("Usage: Semmle.Extraction.CIL.Driver.exe [options] path ..."); - Console.WriteLine(" --verbose Turn on verbose output"); - Console.WriteLine(" --dotnet Extract the .Net Framework"); - Console.WriteLine(" --nocache Overwrite existing trap files"); - Console.WriteLine(" --no-pdb Do not extract PDB files"); - Console.WriteLine(" path A directory/dll/exe to analyze"); - } - - private static void ExtractAssembly(string assemblyPath, ILogger logger, CommonOptions options) - { - var sw = new Stopwatch(); - sw.Start(); - Analyser.ExtractCIL(assemblyPath, logger, options, out _, out _); - sw.Stop(); - logger.Log(Severity.Info, " {0} ({1})", assemblyPath, sw.Elapsed); - } - - public static void Main(string[] args) - { - if (args.Length == 0) - { - DisplayHelp(); - return; - } - - var options = new ExtractorOptions(args); - using ILogger logger = new ConsoleLogger(options.Verbosity, logThreadId: false); - - var actions = options.AssembliesToExtract - .Select(asm => asm.Filename) - .Select(filename => () => ExtractAssembly(filename, logger, options)) - .ToArray(); - - foreach (var missingRef in options.MissingReferences) - logger.Log(Severity.Info, " Missing assembly " + missingRef); - - var sw = new Stopwatch(); - sw.Start(); - var piOptions = new ParallelOptions - { - MaxDegreeOfParallelism = options.Threads - }; - - Parallel.Invoke(piOptions, actions); - - sw.Stop(); - logger.Log(Severity.Info, "Extraction completed in {0}", sw.Elapsed); - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL.Driver/Properties/AssemblyInfo.cs b/csharp/extractor/Semmle.Extraction.CIL.Driver/Properties/AssemblyInfo.cs deleted file mode 100644 index 56f7f94c143..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL.Driver/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Semmle.Extraction.CIL.Driver")] -[assembly: AssemblyDescription("Semmle CIL extractor")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Semmle Ltd")] -[assembly: AssemblyProduct("Semmle.Extraction.CIL.Driver")] -[assembly: AssemblyCopyright("Copyright © Semmle 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("5642ae68-9c26-43c9-bd3c-49923dddf02d")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/csharp/extractor/Semmle.Extraction.CIL.Driver/Semmle.Extraction.CIL.Driver.csproj b/csharp/extractor/Semmle.Extraction.CIL.Driver/Semmle.Extraction.CIL.Driver.csproj deleted file mode 100644 index b0a27245ac2..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL.Driver/Semmle.Extraction.CIL.Driver.csproj +++ /dev/null @@ -1,23 +0,0 @@ - - - - Exe - net8.0 - Semmle.Extraction.CIL.Driver - Semmle.Extraction.CIL.Driver - false - win-x64;linux-x64;osx-x64 - enable - - - - - - - - - - - - - diff --git a/csharp/extractor/Semmle.Extraction.CIL/Analyser.cs b/csharp/extractor/Semmle.Extraction.CIL/Analyser.cs deleted file mode 100644 index 4d7fa77c548..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Analyser.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using Semmle.Util; -using Semmle.Util.Logging; -using Semmle.Extraction.CIL.Entities; - -namespace Semmle.Extraction.CIL -{ - public static class Analyser - { - private static void ExtractCIL(TracingExtractor extractor, TrapWriter trapWriter, bool extractPdbs) - { - using var cilContext = new Context(extractor, trapWriter, extractor.OutputPath, extractPdbs); - cilContext.Populate(new Assembly(cilContext)); - cilContext.PopulateAll(); - } - - /// - /// Main entry point to the CIL extractor. - /// Call this to extract a given assembly. - /// - /// The trap layout. - /// The full path of the assembly to extract. - /// The logger. - /// True to overwrite existing trap file. - /// Whether to extract PDBs. - /// The path of the trap file. - /// Whether the file was extracted (false=cached). - public static void ExtractCIL(string assemblyPath, ILogger logger, CommonOptions options, out string trapFile, out bool extracted) - { - trapFile = ""; - extracted = false; - try - { - var canonicalPathCache = CanonicalPathCache.Create(logger, 1000); - var pathTransformer = new PathTransformer(canonicalPathCache); - var extractor = new TracingExtractor(assemblyPath, logger, pathTransformer, options); - var transformedAssemblyPath = pathTransformer.Transform(assemblyPath); - using var trapWriter = transformedAssemblyPath.WithSuffix(".cil").CreateTrapWriter(logger, options.TrapCompression, discardDuplicates: true); - trapFile = trapWriter.TrapFile; - if (!options.Cache || !System.IO.File.Exists(trapFile)) - { - ExtractCIL(extractor, trapWriter, options.PDB); - extracted = true; - } - } - catch (Exception ex) // lgtm[cs/catch-of-all-exceptions] - { - logger.Log(Severity.Error, string.Format("Exception extracting {0}: {1}", assemblyPath, ex)); - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/CachedFunction.cs b/csharp/extractor/Semmle.Extraction.CIL/CachedFunction.cs deleted file mode 100644 index 4f7ce5a7ef1..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/CachedFunction.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Semmle.Extraction.CIL -{ - /// - /// A factory and a cache for mapping source entities to target entities. - /// Could be considered as a memoizer. - /// - /// The type of the source. - /// The type of the generated object. - public class CachedFunction where TSrc : notnull - { - private readonly Func generator; - private readonly Dictionary cache; - - /// - /// Initializes the factory with a given mapping. - /// - /// The mapping. - public CachedFunction(Func g) - { - generator = g; - cache = new Dictionary(); - } - - /// - /// Gets the target for a given source. - /// Create it if it does not exist. - /// - /// The source object. - /// The created object. - public TTarget this[TSrc src] - { - get - { - if (!cache.TryGetValue(src, out var result)) - { - result = generator(src); - cache[src] = result; - } - return result; - } - } - } - - /// - /// A factory for mapping a pair of source entities to a target entity. - /// - /// Source entity type 1. - /// Source entity type 2. - /// The target type. - public class CachedFunction - { - private readonly CachedFunction<(TSrcEntity1, TSrcEntity2), TTarget> factory; - - /// - /// Initializes the factory with a given mapping. - /// - /// The mapping. - public CachedFunction(Func g) - { - factory = new CachedFunction<(TSrcEntity1, TSrcEntity2), TTarget>(p => g(p.Item1, p.Item2)); - } - - public TTarget this[TSrcEntity1 s1, TSrcEntity2 s2] => factory[(s1, s2)]; - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Context.Factories.cs b/csharp/extractor/Semmle.Extraction.CIL/Context.Factories.cs deleted file mode 100644 index 1c90e693a5f..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Context.Factories.cs +++ /dev/null @@ -1,253 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Reflection.Metadata; -using Semmle.Extraction.CIL.Entities; - -namespace Semmle.Extraction.CIL -{ - /// - /// Provides methods for creating and caching various entities. - /// - internal sealed partial class Context - { - private readonly Dictionary ids = new Dictionary(); - - internal T Populate(T e) where T : IExtractedEntity - { - if (e.Label.Valid) - { - return e; // Already populated - } - - if (ids.TryGetValue(e, out var existing)) - { - // It exists already - e.Label = existing; - } - else - { - e.Label = GetNewLabel(); - DefineLabel(e); - ids.Add(e, e.Label); - PopulateLater(() => - { - foreach (var c in e.Contents) - c.Extract(this); - }); -#if DEBUG_LABELS - using var writer = new EscapingTextWriter(); - e.WriteId(writer); - var id = writer.ToString(); - - if (debugLabels.TryGetValue(id, out var previousEntity)) - { - Extractor.Message(new Message("Duplicate trap ID", id, null, severity: Util.Logging.Severity.Warning)); - } - else - { - debugLabels.Add(id, e); - } -#endif - } - return e; - } - -#if DEBUG_LABELS - private readonly Dictionary debugLabels = new Dictionary(); -#endif - - public IExtractedEntity Create(Handle h) - { - var entity = CreateGeneric(defaultGenericContext, h); - return entity; - } - - // Lazily cache primitive types. - private readonly PrimitiveType[] primitiveTypes = new PrimitiveType[(int)PrimitiveTypeCode.Object + 1]; - - public PrimitiveType Create(PrimitiveTypeCode code) - { - var e = primitiveTypes[(int)code]; - - if (e is null) - { - e = new PrimitiveType(this, code) - { - Label = GetNewLabel() - }; - DefineLabel(e); - primitiveTypes[(int)code] = e; - } - - return e; - } - - /// - /// Creates an entity from a Handle in a GenericContext. - /// The type of the returned entity depends on the type of the handle. - /// The GenericContext is needed because some handles are generics which - /// need to be expanded in terms of the current instantiation. If this sounds - /// complex, you are right. - /// - /// The pair (h,genericContext) is cached in case it is needed again. - /// - /// The handle of the entity. - /// The generic context. - /// - public IExtractedEntity CreateGeneric(IGenericContext genericContext, Handle h) => genericHandleFactory[genericContext, h]; - - private readonly IGenericContext defaultGenericContext; - - private IExtractedEntity CreateGenericHandle(IGenericContext gc, Handle handle) - { - IExtractedEntity entity; - switch (handle.Kind) - { - case HandleKind.MethodDefinition: - entity = new DefinitionMethod(gc, (MethodDefinitionHandle)handle); - break; - case HandleKind.MemberReference: - entity = Create(gc, (MemberReferenceHandle)handle); - break; - case HandleKind.MethodSpecification: - entity = new MethodSpecificationMethod(gc, (MethodSpecificationHandle)handle); - break; - case HandleKind.FieldDefinition: - entity = new DefinitionField(gc.Context, (FieldDefinitionHandle)handle); - break; - case HandleKind.TypeReference: - var tr = new TypeReferenceType(this, (TypeReferenceHandle)handle); - if (tr.TryGetPrimitiveType(out var pt)) - // Map special names like `System.Int32` to `int` - return pt; - entity = tr; - break; - case HandleKind.TypeSpecification: - return Entities.Type.DecodeType(gc, (TypeSpecificationHandle)handle); - case HandleKind.TypeDefinition: - entity = new TypeDefinitionType(this, (TypeDefinitionHandle)handle); - break; - case HandleKind.StandaloneSignature: - var signature = MdReader.GetStandaloneSignature((StandaloneSignatureHandle)handle); - var method = signature.DecodeMethodSignature(gc.Context.TypeSignatureDecoder, gc); - entity = new FunctionPointerType(this, method); - break; - default: - throw new InternalError("Unhandled handle kind " + handle.Kind); - } - - Populate(entity); - return entity; - } - - private IExtractedEntity Create(IGenericContext gc, MemberReferenceHandle handle) - { - var mr = MdReader.GetMemberReference(handle); - switch (mr.GetKind()) - { - case MemberReferenceKind.Method: - return new MemberReferenceMethod(gc, handle); - case MemberReferenceKind.Field: - return new MemberReferenceField(gc, handle); - default: - throw new InternalError("Unhandled member reference handle"); - } - } - - /// - /// Gets the string for a string handle. - /// - /// The string handle. - /// The string. - public string GetString(StringHandle h) => MdReader.GetString(h); - - #region Namespaces - - private readonly CachedFunction namespaceFactory; - - public Namespace CreateNamespace(StringHandle fqn) => namespaceFactory[fqn]; - - private readonly Lazy globalNamespace, systemNamespace; - - /// - /// The entity representing the global namespace. - /// - public Namespace GlobalNamespace => globalNamespace.Value; - - /// - /// The entity representing the System namespace. - /// - public Namespace SystemNamespace => systemNamespace.Value; - - /// - /// Creates a namespace from a fully-qualified name. - /// - /// The fully-qualified namespace name. - /// The namespace entity. - private Namespace CreateNamespace(string fqn) => Populate(new Namespace(this, fqn)); - - private readonly CachedFunction namespaceDefinitionFactory; - - /// - /// Creates a namespace from a namespace handle. - /// - /// The handle of the namespace. - /// The namespace entity. - public Namespace Create(NamespaceDefinitionHandle handle) => namespaceDefinitionFactory[handle]; - - private Namespace CreateNamespace(NamespaceDefinitionHandle handle) - { - if (handle.IsNil) - return GlobalNamespace; - var nd = MdReader.GetNamespaceDefinition(handle); - return Populate(new Namespace(this, GetString(nd.Name), Create(nd.Parent))); - } - #endregion - - #region Locations - private readonly CachedFunction sourceFiles; - private readonly CachedFunction folders; - private readonly CachedFunction sourceLocations; - - /// - /// Creates a source file entity from a PDB source file. - /// - /// The PDB source file. - /// A source file entity. - public PdbSourceFile CreateSourceFile(PDB.ISourceFile file) => sourceFiles[file]; - - /// - /// Creates a folder entity with the given path. - /// - /// The path of the folder. - /// A folder entity. - public Folder CreateFolder(PathTransformer.ITransformedPath path) => folders[path]; - - /// - /// Creates a source location. - /// - /// The source location from PDB. - /// A source location entity. - public PdbSourceLocation CreateSourceLocation(PDB.Location loc) => sourceLocations[loc]; - - #endregion - - private readonly CachedFunction genericHandleFactory; - - /// - /// Gets the short name of a member, without the preceding interface qualifier. - /// - /// The handle of the name. - /// The short name. - public string ShortName(StringHandle handle) - { - var str = MdReader.GetString(handle); - if (str.EndsWith(".ctor")) - return ".ctor"; - if (str.EndsWith(".cctor")) - return ".cctor"; - var dot = str.LastIndexOf('.'); - return dot == -1 ? str : str.Substring(dot + 1); - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Context.cs b/csharp/extractor/Semmle.Extraction.CIL/Context.cs deleted file mode 100644 index 9aa1917dd3e..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Context.cs +++ /dev/null @@ -1,115 +0,0 @@ -using System; -using System.IO; -using System.Reflection.Metadata; -using System.Reflection.PortableExecutable; - -namespace Semmle.Extraction.CIL -{ - /// - /// Extraction context for CIL extraction. - /// Adds additional context that is specific for CIL extraction. - /// One context = one DLL/EXE. - /// - internal sealed partial class Context : Extraction.Context, IDisposable - { - private readonly FileStream stream; - private Entities.Assembly? assemblyNull; - public MetadataReader MdReader { get; } - public PEReader PeReader { get; } - public string AssemblyPath { get; } - public Entities.Assembly Assembly - { - get { return assemblyNull!; } - set { assemblyNull = value; } - } - public PDB.IPdb? Pdb { get; } - - public Context(Extractor extractor, TrapWriter trapWriter, string assemblyPath, bool extractPdbs) - : base(extractor, trapWriter) - { - this.AssemblyPath = assemblyPath; - stream = File.OpenRead(assemblyPath); - PeReader = new PEReader(stream, PEStreamOptions.PrefetchEntireImage); - MdReader = PeReader.GetMetadataReader(); - TypeSignatureDecoder = new Entities.TypeSignatureDecoder(this); - - globalNamespace = new Lazy(() => Populate(new Entities.Namespace(this, "", null))); - systemNamespace = new Lazy(() => Populate(new Entities.Namespace(this, "System"))); - genericHandleFactory = new CachedFunction(CreateGenericHandle); - namespaceFactory = new CachedFunction(n => CreateNamespace(MdReader.GetString(n))); - namespaceDefinitionFactory = new CachedFunction(CreateNamespace); - sourceFiles = new CachedFunction(path => new Entities.PdbSourceFile(this, path)); - folders = new CachedFunction(path => new Entities.Folder(this, path)); - sourceLocations = new CachedFunction(location => new Entities.PdbSourceLocation(this, location)); - - defaultGenericContext = new EmptyContext(this); - - if (extractPdbs) - { - Pdb = PDB.PdbReader.Create(assemblyPath, PeReader); - if (Pdb is not null) - { - Extractor.Logger.Log(Util.Logging.Severity.Info, string.Format("Found PDB information for {0}", assemblyPath)); - } - } - } - - public void Dispose() - { - if (Pdb is not null) - Pdb.Dispose(); - PeReader.Dispose(); - stream.Dispose(); - } - - /// - /// Extract the contents of a given entity. - /// - /// The entity to extract. - public void Extract(IExtractedEntity entity) - { - foreach (var content in entity.Contents) - { - content.Extract(this); - } - } - - public void WriteAssemblyPrefix(TextWriter trapFile) - { - var def = MdReader.GetAssemblyDefinition(); - trapFile.Write(GetString(def.Name)); - trapFile.Write('_'); - trapFile.Write(def.Version.ToString()); - trapFile.Write(Entities.Type.AssemblyTypeNameSeparator); - } - - public Entities.TypeSignatureDecoder TypeSignatureDecoder { get; } - - /// - /// A type used to signify something we can't handle yet. - /// Specifically, function pointers (used in C++). - /// - public Entities.Type ErrorType - { - get - { - var errorType = new Entities.ErrorType(this); - Populate(errorType); - return errorType; - } - } - - /// - /// Attempt to locate debugging information for a particular method. - /// - /// Returns null on failure, for example if there was no PDB information found for the - /// DLL, or if the particular method is compiler generated or doesn't come from source code. - /// - /// The handle of the method. - /// The debugging information, or null if the information could not be located. - public PDB.Method? GetMethodDebugInformation(MethodDefinitionHandle handle) - { - return Pdb?.GetMethod(handle.ToDebugInformationHandle()); - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/EmptyContext.cs b/csharp/extractor/Semmle.Extraction.CIL/EmptyContext.cs deleted file mode 100644 index 8404bc26545..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/EmptyContext.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Collections.Generic; - -namespace Semmle.Extraction.CIL -{ - /// - /// A generic context which does not contain any type parameters. - /// - internal class EmptyContext : IGenericContext - { - public EmptyContext(Context cx) - { - Context = cx; - } - - public Context Context { get; } - - public IEnumerable TypeParameters { get { yield break; } } - - public IEnumerable MethodParameters { get { yield break; } } - - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/ArrayType.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/ArrayType.cs deleted file mode 100644 index 0f4138e20c5..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/ArrayType.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// An array type. - /// - internal sealed class ArrayType : Type - { - private readonly Type elementType; - private readonly int rank; - - public ArrayType(Context cx, Type elementType, int rank) : base(cx) - { - this.rank = rank; - this.elementType = elementType; - } - - public ArrayType(Context cx, Type elementType) : this(cx, elementType, 1) - { - } - - public override bool Equals(object? obj) - { - return obj is ArrayType array && elementType.Equals(array.elementType) && rank == array.rank; - } - - public override int GetHashCode() => HashCode.Combine(elementType, rank); - - public override void WriteId(EscapingTextWriter trapFile, bool inContext) - { - elementType.WriteId(trapFile, inContext); - trapFile.Write('['); - for (var i = 1; i < rank; ++i) - { - trapFile.Write(','); - } - trapFile.Write(']'); - } - - public override string Name => elementType.Name + "[]"; - - public override Namespace ContainingNamespace => Context.SystemNamespace; - - public override Type? ContainingType => null; - - public override int ThisTypeParameterCount => elementType.ThisTypeParameterCount; - - public override CilTypeKind Kind => CilTypeKind.Array; - - public override Type Construct(IEnumerable typeArguments) => Context.Populate(new ArrayType(Context, elementType.Construct(typeArguments))); - - public override Type SourceDeclaration => Context.Populate(new ArrayType(Context, elementType.SourceDeclaration)); - - public override IEnumerable Contents - { - get - { - foreach (var c in base.Contents) - yield return c; - - yield return Tuples.cil_array_type(this, elementType, rank); - } - } - - public override void WriteAssemblyPrefix(TextWriter trapFile) => elementType.WriteAssemblyPrefix(trapFile); - - public override IEnumerable GenericArguments => elementType.GenericArguments; - - public override IEnumerable TypeParameters => elementType.TypeParameters; - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/Assembly.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/Assembly.cs deleted file mode 100644 index 5350f010311..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/Assembly.cs +++ /dev/null @@ -1,101 +0,0 @@ -using System.Collections.Generic; -using System.Globalization; -using System.Reflection; -using Semmle.Extraction.Entities; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// An assembly to extract. - /// - internal class Assembly : LabelledEntity, ILocation - { - private readonly File file; - private readonly AssemblyName assemblyName; - - public Assembly(Context cx) : base(cx) - { - cx.Assembly = this; - var def = cx.MdReader.GetAssemblyDefinition(); - - assemblyName = new AssemblyName - { - Name = cx.MdReader.GetString(def.Name), - Version = def.Version, - CultureInfo = new CultureInfo(cx.MdReader.GetString(def.Culture)) - }; - - if (!def.PublicKey.IsNil) - assemblyName.SetPublicKey(cx.MdReader.GetBlobBytes(def.PublicKey)); - - file = new File(cx, cx.AssemblyPath); - } - - public override void WriteId(EscapingTextWriter trapFile) - { - trapFile.Write(FullName); - trapFile.Write("#file:///"); - trapFile.Write(Context.AssemblyPath.Replace("\\", "/")); - trapFile.Write(";assembly"); - } - - public override bool Equals(object? obj) - { - return GetType() == obj?.GetType() && Equals(file, ((Assembly)obj).file); - } - - public override int GetHashCode() => 7 * file.GetHashCode(); - - private string FullName => assemblyName.GetPublicKey() is null ? assemblyName.FullName + ", PublicKeyToken=null" : assemblyName.FullName; - - public override IEnumerable Contents - { - get - { - yield return file; - yield return Tuples.assemblies(this, file, FullName, assemblyName.Name ?? string.Empty, assemblyName.Version?.ToString() ?? string.Empty); - - if (Context.Pdb is not null) - { - foreach (var f in Context.Pdb.SourceFiles) - { - yield return Context.CreateSourceFile(f); - } - } - - foreach (var handle in Context.MdReader.TypeDefinitions) - { - IExtractionProduct? product = null; - try - { - product = Context.Create(handle); - } - catch (InternalError e) - { - Context.ExtractionError("Error processing type definition", e.Message, GeneratedLocation.Create(Context), e.StackTrace); - } - - // Limitation of C#: Cannot yield return inside a try-catch. - if (product is not null) - yield return product; - } - - foreach (var handle in Context.MdReader.MethodDefinitions) - { - IExtractionProduct? product = null; - try - { - product = Context.Create(handle); - } - catch (InternalError e) - { - Context.ExtractionError("Error processing bytecode", e.Message, GeneratedLocation.Create(Context), e.StackTrace); - } - - if (product is not null) - yield return product; - } - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/Attribute.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/Attribute.cs deleted file mode 100644 index a42594d35aa..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/Attribute.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Reflection.Metadata; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// Entity representing a CIL attribute. - /// - internal sealed class Attribute : UnlabelledEntity - { - private readonly CustomAttributeHandle handle; - private readonly CustomAttribute attrib; - private readonly IExtractedEntity @object; - - public Attribute(Context cx, IExtractedEntity @object, CustomAttributeHandle handle) : base(cx) - { - attrib = cx.MdReader.GetCustomAttribute(handle); - this.handle = handle; - this.@object = @object; - } - - public override bool Equals(object? obj) - { - return obj is Attribute attribute && handle.Equals(attribute.handle); - } - - public override int GetHashCode() => handle.GetHashCode(); - - public override IEnumerable Contents - { - get - { - var constructor = (Method)Context.Create(attrib.Constructor); - yield return constructor; - - yield return Tuples.cil_attribute(this, @object, constructor); - - CustomAttributeValue decoded; - - try - { - decoded = attrib.DecodeValue(new CustomAttributeDecoder(Context)); - } - catch - { - Context.Extractor.Logger.Log(Util.Logging.Severity.Info, - $"Attribute decoding is partial. Decoding attribute {constructor.DeclaringType.GetQualifiedName()} failed on {@object}."); - yield break; - } - - for (var index = 0; index < decoded.FixedArguments.Length; ++index) - { - var stringValue = GetStringValue(decoded.FixedArguments[index].Type, decoded.FixedArguments[index].Value); - yield return Tuples.cil_attribute_positional_argument(this, index, stringValue); - } - - foreach (var p in decoded.NamedArguments) - { - var stringValue = GetStringValue(p.Type, p.Value); - yield return Tuples.cil_attribute_named_argument(this, p.Name!, stringValue); - } - } - } - - private static string GetStringValue(Type type, object? value) - { - if (value is System.Collections.Immutable.ImmutableArray> values) - { - return "[" + string.Join(",", values.Select(v => GetStringValue(v.Type, v.Value))) + "]"; - } - - if (type.GetQualifiedName() == "System.Type" && - value is Type t) - { - return t.GetQualifiedName(); - } - - return value?.ToString() ?? "null"; - } - - public static IEnumerable Populate(Context cx, IExtractedEntity @object, CustomAttributeHandleCollection attributes) - { - foreach (var attrib in attributes) - { - yield return new Attribute(cx, @object, attrib); - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/Base/IExtractedEntity.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/Base/IExtractedEntity.cs deleted file mode 100644 index d94b94df8a8..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/Base/IExtractedEntity.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Collections.Generic; - -namespace Semmle.Extraction.CIL -{ - /// - /// A CIL entity which has been extracted. - /// - internal interface IExtractedEntity : IExtractionProduct, IEntity - { - /// - /// The contents of the entity. - /// - - IEnumerable Contents { get; } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/Base/IExtractionProduct.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/Base/IExtractionProduct.cs deleted file mode 100644 index 231a311a78c..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/Base/IExtractionProduct.cs +++ /dev/null @@ -1,24 +0,0 @@ -namespace Semmle.Extraction.CIL -{ - /// - /// Something that is extracted from an entity. - /// - /// - /// - /// The extraction algorithm proceeds as follows: - /// - Construct entity - /// - Call Extract() - /// - IExtractedEntity check if already extracted - /// - Enumerate Contents to produce more extraction products - /// - Extract these until there is nothing left to extract - /// - internal interface IExtractionProduct - { - /// - /// Perform further extraction/population of this item as necessary. - /// - /// - /// The extraction context. - void Extract(Context cx); - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/Base/IGenericContext.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/Base/IGenericContext.cs deleted file mode 100644 index babe0bdfd65..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/Base/IGenericContext.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Collections.Generic; - -namespace Semmle.Extraction.CIL -{ - /// - /// When we decode a type/method signature, we need access to - /// generic parameters. - /// - internal interface IGenericContext - { - Context Context { get; } - - /// - /// The list of generic type parameters/arguments, including type parameters/arguments of - /// containing types. - /// - IEnumerable TypeParameters { get; } - - /// - /// The list of generic method parameters/arguments. - /// - IEnumerable MethodParameters { get; } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/Base/LabelledEntity.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/Base/LabelledEntity.cs deleted file mode 100644 index 4c872f33240..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/Base/LabelledEntity.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Semmle.Extraction.CIL -{ - /// - /// An entity that needs to be populated during extraction. - /// This assigns a key and optionally extracts its contents. - /// - internal abstract class LabelledEntity : Extraction.LabelledEntity, IExtractedEntity - { - public override Context Context => (Context)base.Context; - - protected LabelledEntity(Context cx) : base(cx) - { - } - - public override Microsoft.CodeAnalysis.Location ReportingLocation => throw new NotImplementedException(); - - public void Extract(Context cx2) - { - cx2.Populate(this); - } - - public override string ToString() - { - using var writer = new EscapingTextWriter(); - WriteQuotedId(writer); - return writer.ToString(); - } - - public override TrapStackBehaviour TrapStackBehaviour => TrapStackBehaviour.NoLabel; - - public abstract IEnumerable Contents { get; } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/Base/Tuple.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/Base/Tuple.cs deleted file mode 100644 index 58c15dd21f6..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/Base/Tuple.cs +++ /dev/null @@ -1,22 +0,0 @@ -namespace Semmle.Extraction.CIL -{ - /// - /// A tuple that is an extraction product. - /// - internal class Tuple : IExtractionProduct - { - private readonly Extraction.Tuple tuple; - - public Tuple(string name, params object[] args) - { - tuple = new Extraction.Tuple(name, args); - } - - public void Extract(Context cx) - { - cx.TrapWriter.Emit(tuple); - } - - public override string ToString() => tuple.ToString(); - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/Base/UnlabelledEntity.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/Base/UnlabelledEntity.cs deleted file mode 100644 index de563080d4b..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/Base/UnlabelledEntity.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Semmle.Extraction.CIL -{ - /// - /// An entity that has contents to extract. There is no need to populate - /// a key as it's done in the constructor. - /// - internal abstract class UnlabelledEntity : Extraction.UnlabelledEntity, IExtractedEntity - { - public override Context Context => (Context)base.Context; - - protected UnlabelledEntity(Context cx) : base(cx) - { - } - - public override Microsoft.CodeAnalysis.Location ReportingLocation => throw new NotImplementedException(); - - public void Extract(Context cx2) - { - cx2.Extract(this); - } - - public override TrapStackBehaviour TrapStackBehaviour => TrapStackBehaviour.NoLabel; - - public abstract IEnumerable Contents { get; } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/ByRefType.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/ByRefType.cs deleted file mode 100644 index 5b9ae9fd1aa..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/ByRefType.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// Types that are passed by reference are not written directly to trap files. Instead, the annotation is stored on - /// the entity. - /// - internal sealed class ByRefType : Type - { - public ByRefType(Context cx, Type elementType) : base(cx) - { - ElementType = elementType; - } - - public override CilTypeKind Kind => throw new NotImplementedException(); - - public override Namespace? ContainingNamespace => throw new NotImplementedException(); - - public override Type? ContainingType => throw new NotImplementedException(); - - public override int ThisTypeParameterCount => throw new NotImplementedException(); - - public override IEnumerable TypeParameters => throw new NotImplementedException(); - - public override Type Construct(IEnumerable typeArguments) => throw new NotImplementedException(); - - public override string Name => $"{ElementType.Name}&"; - - public Type ElementType { get; } - - public override void WriteAssemblyPrefix(TextWriter trapFile) => throw new NotImplementedException(); - - public override void WriteId(EscapingTextWriter trapFile, bool inContext) - { - ElementType.WriteId(trapFile, inContext); - trapFile.Write('&'); - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/CilTypeKind.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/CilTypeKind.cs deleted file mode 100644 index e95fe0e28c0..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/CilTypeKind.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// The CIL database type-kind. - /// - public enum CilTypeKind - { - ValueOrRefType, - TypeParameter, - Array, - Pointer, - FunctionPointer - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/ConstructedType.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/ConstructedType.cs deleted file mode 100644 index 089d7855dfc..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/ConstructedType.cs +++ /dev/null @@ -1,118 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using Semmle.Util; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// A constructed type. - /// - internal sealed class ConstructedType : Type - { - private readonly Type unboundGenericType; - - // Either null or notEmpty - private readonly Type[]? thisTypeArguments; - - private readonly Type? containingType; - private readonly NamedTypeIdWriter idWriter; - - public ConstructedType(Context cx, Type unboundType, IEnumerable typeArguments) : base(cx) - { - idWriter = new NamedTypeIdWriter(this); - var suppliedArgs = typeArguments.Count(); - if (suppliedArgs != unboundType.TotalTypeParametersCount) - throw new InternalError("Unexpected number of type arguments in ConstructedType"); - - unboundGenericType = unboundType; - var thisParams = unboundType.ThisTypeParameterCount; - - if (typeArguments.Count() == thisParams) - { - containingType = unboundType.ContainingType; - thisTypeArguments = typeArguments.ToArray(); - } - else if (thisParams == 0) - { - // all type arguments belong to containing type - containingType = unboundType.ContainingType!.Construct(typeArguments); - } - else - { - // some type arguments belong to containing type - var parentParams = suppliedArgs - thisParams; - containingType = unboundType.ContainingType!.Construct(typeArguments.Take(parentParams)); - thisTypeArguments = typeArguments.Skip(parentParams).ToArray(); - } - } - - public override bool Equals(object? obj) - { - if (obj is ConstructedType t && Equals(unboundGenericType, t.unboundGenericType) && Equals(containingType, t.containingType)) - { - if (thisTypeArguments is null) - return t.thisTypeArguments is null; - if (!(t.thisTypeArguments is null)) - return thisTypeArguments.SequenceEqual(t.thisTypeArguments); - } - return false; - } - - public override int GetHashCode() - { - var h = unboundGenericType.GetHashCode(); - h = 13 * h + (containingType is null ? 0 : containingType.GetHashCode()); - if (!(thisTypeArguments is null)) - h = h * 13 + thisTypeArguments.SequenceHash(); - return h; - } - - public override IEnumerable Contents - { - get - { - foreach (var c in base.Contents) - yield return c; - - var i = 0; - foreach (var type in ThisTypeArguments) - { - yield return type; - yield return Tuples.cil_type_argument(this, i++, type); - } - } - } - - public override Type SourceDeclaration => unboundGenericType; - - public override Type? ContainingType => containingType; - - public override string Name => unboundGenericType.Name; - - public override Namespace ContainingNamespace => unboundGenericType.ContainingNamespace!; - - public override CilTypeKind Kind => unboundGenericType.Kind; - - public override Type Construct(IEnumerable typeArguments) - { - throw new NotImplementedException(); - } - - public override void WriteId(EscapingTextWriter trapFile, bool inContext) - { - idWriter.WriteId(trapFile, inContext); - } - - public override void WriteAssemblyPrefix(TextWriter trapFile) => unboundGenericType.WriteAssemblyPrefix(trapFile); - - public override int ThisTypeParameterCount => thisTypeArguments?.Length ?? 0; - - public override IEnumerable TypeParameters => GenericArguments; - - public override IEnumerable ThisTypeArguments => thisTypeArguments.EnumerateNull(); - - public override IEnumerable ThisGenericArguments => thisTypeArguments.EnumerateNull(); - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/CustomAttributeDecoder.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/CustomAttributeDecoder.cs deleted file mode 100644 index 184e37a1adf..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/CustomAttributeDecoder.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Reflection.Metadata; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// Helper class to decode the attribute structure. - /// Note that there are some unhandled cases that should be fixed in due course. - /// - internal class CustomAttributeDecoder : ICustomAttributeTypeProvider - { - private readonly Context cx; - public CustomAttributeDecoder(Context cx) { this.cx = cx; } - - public Type GetPrimitiveType(PrimitiveTypeCode typeCode) => cx.Create(typeCode); - - public Type GetSystemType() => new NoMetadataHandleType(cx, "System.Type"); - - public Type GetSZArrayType(Type elementType) => - cx.Populate(new ArrayType(cx, elementType)); - - public Type GetTypeFromDefinition(MetadataReader reader, TypeDefinitionHandle handle, byte rawTypeKind) => - (Type)cx.Create(handle); - - public Type GetTypeFromReference(MetadataReader reader, TypeReferenceHandle handle, byte rawTypeKind) => - (Type)cx.Create(handle); - - public Type GetTypeFromSerializedName(string name) => new NoMetadataHandleType(cx, name); - - public PrimitiveTypeCode GetUnderlyingEnumType(Type type) - { - if (type is TypeDefinitionType tdt && - tdt.GetUnderlyingEnumType() is PrimitiveTypeCode underlying) - { - return underlying; - } - - var name = type.GetQualifiedName(); - - if (wellKnownEnums.TryGetValue(name, out var code)) - { - cx.Extractor.Logger.Log(Util.Logging.Severity.Debug, $"Using hard coded underlying enum type for {name}"); - return code; - } - - cx.Extractor.Logger.Log(Util.Logging.Severity.Info, $"Couldn't get underlying enum type for {name}"); - - // We can't fall back to Int32, because the type returned here defines how many bytes are read from the - // stream and how those bytes are interpreted. - throw new NotImplementedException(); - } - - public bool IsSystemType(Type type) => type.GetQualifiedName() == "System.Type"; - - private static readonly Dictionary wellKnownEnums = new Dictionary - { - { "System.AttributeTargets", PrimitiveTypeCode.Int32 }, - { "System.ComponentModel.EditorBrowsableState", PrimitiveTypeCode.Int32 }, - { "System.Diagnostics.DebuggerBrowsableState", PrimitiveTypeCode.Int32 } - }; - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/DefinitionField.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/DefinitionField.cs deleted file mode 100644 index c299ac19d57..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/DefinitionField.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Reflection; -using System.Reflection.Metadata; -using System.Reflection.Metadata.Ecma335; - -namespace Semmle.Extraction.CIL.Entities -{ - internal sealed class DefinitionField : Field - { - private readonly Handle handle; - private readonly FieldDefinition fd; - - public DefinitionField(Context cx, FieldDefinitionHandle handle) : base(cx) - { - this.handle = handle; - fd = Context.MdReader.GetFieldDefinition(handle); - } - - public override bool Equals(object? obj) - { - return obj is DefinitionField field && handle.Equals(field.handle); - } - - public override int GetHashCode() => handle.GetHashCode(); - - public override IEnumerable Contents - { - get - { - yield return Tuples.metadata_handle(this, Context.Assembly, MetadataTokens.GetToken(handle)); - - foreach (var c in base.Contents) - yield return c; - - if (fd.Attributes.HasFlag(FieldAttributes.Private)) - yield return Tuples.cil_private(this); - - if (fd.Attributes.HasFlag(FieldAttributes.Public)) - yield return Tuples.cil_public(this); - - if (fd.Attributes.HasFlag(FieldAttributes.Family)) - yield return Tuples.cil_protected(this); - - if (fd.Attributes.HasFlag(FieldAttributes.Static)) - yield return Tuples.cil_static(this); - - if (fd.Attributes.HasFlag(FieldAttributes.Assembly)) - yield return Tuples.cil_internal(this); - - foreach (var c in Attribute.Populate(Context, this, fd.GetCustomAttributes())) - yield return c; - } - } - - public override string Name => Context.GetString(fd.Name); - - public override Type DeclaringType => (Type)Context.Create(fd.GetDeclaringType()); - - public override Type Type => fd.DecodeSignature(Context.TypeSignatureDecoder, DeclaringType); - - public override IEnumerable TypeParameters => throw new NotImplementedException(); - - public override IEnumerable MethodParameters => throw new NotImplementedException(); - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/DefinitionMethod.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/DefinitionMethod.cs deleted file mode 100644 index f75a6ee5e7b..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/DefinitionMethod.cs +++ /dev/null @@ -1,299 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Reflection.Metadata; -using System.Reflection.Metadata.Ecma335; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// A definition method - a method defined in the current assembly. - /// - internal sealed class DefinitionMethod : Method - { - private readonly Handle handle; - private readonly MethodDefinition md; - private readonly PDB.Method? methodDebugInformation; - private readonly Type declaringType; - - private readonly string name; - private LocalVariable[]? locals; - - public MethodImplementation? Implementation { get; private set; } - - public override IList? LocalVariables => locals; - - public DefinitionMethod(IGenericContext gc, MethodDefinitionHandle handle) : base(gc) - { - md = Context.MdReader.GetMethodDefinition(handle); - this.gc = gc; - this.handle = handle; - name = Context.GetString(md.Name); - - declaringType = (Type)Context.CreateGeneric(this, md.GetDeclaringType()); - - signature = md.DecodeSignature(new SignatureDecoder(), this); - - methodDebugInformation = Context.GetMethodDebugInformation(handle); - } - - public override bool Equals(object? obj) - { - return obj is DefinitionMethod method && handle.Equals(method.handle); - } - - public override int GetHashCode() => handle.GetHashCode(); - - public override bool IsStatic => !signature.Header.IsInstance; - - public override Type DeclaringType => declaringType; - - public override string Name => Context.ShortName(md.Name); - - public override string NameLabel => name; - - /// - /// Holds if this method has bytecode. - /// - public bool HasBytecode => md.ImplAttributes == MethodImplAttributes.IL && md.RelativeVirtualAddress != 0; - - public override IEnumerable Contents - { - get - { - if (md.GetGenericParameters().Any()) - { - // We need to perform a 2-phase population because some type parameters can - // depend on other type parameters (as a constraint). - genericParams = new MethodTypeParameter[md.GetGenericParameters().Count]; - for (var i = 0; i < genericParams.Length; ++i) - genericParams[i] = Context.Populate(new MethodTypeParameter(this, this, i)); - for (var i = 0; i < genericParams.Length; ++i) - genericParams[i].PopulateHandle(md.GetGenericParameters()[i]); - foreach (var p in genericParams) - yield return p; - } - - var typeSignature = md.DecodeSignature(Context.TypeSignatureDecoder, this); - - var parameters = GetParameterExtractionProducts(typeSignature.ParameterTypes).ToArray(); - Parameters = parameters.OfType().ToArray(); - - foreach (var c in parameters) - yield return c; - - foreach (var c in PopulateFlags) - yield return c; - - foreach (var p in md.GetParameters().Select(h => Context.MdReader.GetParameter(h)).Where(p => p.SequenceNumber > 0)) - { - var pe = Parameters[IsStatic ? p.SequenceNumber - 1 : p.SequenceNumber]; - if (p.Attributes.HasFlag(ParameterAttributes.Out)) - yield return Tuples.cil_parameter_out(pe); - if (p.Attributes.HasFlag(ParameterAttributes.In)) - yield return Tuples.cil_parameter_in(pe); - foreach (var c in Attribute.Populate(Context, pe, p.GetCustomAttributes())) - yield return c; - } - - yield return Tuples.metadata_handle(this, Context.Assembly, MetadataTokens.GetToken(handle)); - - foreach (var m in GetMethodExtractionProducts(Name, declaringType, typeSignature.ReturnType)) - { - yield return m; - } - - yield return Tuples.cil_method_source_declaration(this, this); - yield return Tuples.cil_method_location(this, Context.Assembly); - - if (HasBytecode) - { - Implementation = new MethodImplementation(this); - yield return Implementation; - - var body = Context.PeReader.GetMethodBody(md.RelativeVirtualAddress); - - if (!body.LocalSignature.IsNil) - { - var localVariableTypes = System.Collections.Immutable.ImmutableArray.Empty; - var hasError = false; - try - { - var locals = Context.MdReader.GetStandaloneSignature(body.LocalSignature); - localVariableTypes = locals.DecodeLocalSignature(Context.TypeSignatureDecoder, this); - } - catch (System.BadImageFormatException exc) - { - Context.Extractor.Logger.Log(Util.Logging.Severity.Info, - $"Could not decode locals in method {declaringType.GetQualifiedName()}.{name}. {exc}"); - hasError = true; - } - - if (!hasError) - { - this.locals = new LocalVariable[localVariableTypes.Length]; - - for (var l = 0; l < this.locals.Length; ++l) - { - var t = localVariableTypes[l]; - if (t is ByRefType brt) - { - t = brt.ElementType; - this.locals[l] = Context.Populate(new LocalVariable(Context, Implementation, l, t)); - yield return this.locals[l]; - yield return Tuples.cil_type_annotation(this.locals[l], TypeAnnotation.Ref); - } - else - { - this.locals[l] = Context.Populate(new LocalVariable(Context, Implementation, l, t)); - yield return this.locals[l]; - } - } - } - } - - var jump_table = new Dictionary(); - - foreach (var c in Decode(body.GetILBytes(), jump_table)) - yield return c; - - var filter_index = 0; - foreach (var region in body.ExceptionRegions) - { - yield return new ExceptionRegion(this, Implementation, filter_index++, region, jump_table); - } - - yield return Tuples.cil_method_stack_size(Implementation, body.MaxStack); - - if (methodDebugInformation is not null) - { - var sourceLocation = Context.CreateSourceLocation(methodDebugInformation.Location); - yield return sourceLocation; - yield return Tuples.cil_method_location(this, sourceLocation); - } - } - - // Flags - - if (md.Attributes.HasFlag(MethodAttributes.Private)) - yield return Tuples.cil_private(this); - - if (md.Attributes.HasFlag(MethodAttributes.Public)) - yield return Tuples.cil_public(this); - - if (md.Attributes.HasFlag(MethodAttributes.Family)) - yield return Tuples.cil_protected(this); - - if (md.Attributes.HasFlag(MethodAttributes.Final)) - yield return Tuples.cil_sealed(this); - - if (md.Attributes.HasFlag(MethodAttributes.Virtual)) - yield return Tuples.cil_virtual(this); - - if (md.Attributes.HasFlag(MethodAttributes.Abstract)) - yield return Tuples.cil_abstract(this); - - if (md.Attributes.HasFlag(MethodAttributes.HasSecurity)) - yield return Tuples.cil_security(this); - - if (md.Attributes.HasFlag(MethodAttributes.RequireSecObject)) - yield return Tuples.cil_requiresecobject(this); - - if (md.Attributes.HasFlag(MethodAttributes.SpecialName)) - yield return Tuples.cil_specialname(this); - - if (md.Attributes.HasFlag(MethodAttributes.NewSlot)) - yield return Tuples.cil_newslot(this); - - // Populate attributes - foreach (var c in Attribute.Populate(Context, this, md.GetCustomAttributes())) - yield return c; - } - } - - private IEnumerable Decode(byte[]? ilbytes, Dictionary jump_table) - { - // Sequence points are stored in order of offset. - // We use an enumerator to locate the correct sequence point for each instruction. - // The sequence point gives the location of each instruction. - // The location of an instruction is given by the sequence point *after* the - // instruction. - IEnumerator? nextSequencePoint = null; - PdbSourceLocation? instructionLocation = null; - - if (methodDebugInformation is not null) - { - nextSequencePoint = methodDebugInformation.SequencePoints.GetEnumerator(); - if (nextSequencePoint.MoveNext()) - { - instructionLocation = Context.CreateSourceLocation(nextSequencePoint.Current.Location); - yield return instructionLocation; - } - else - { - nextSequencePoint = null; - } - } - - var child = 0; - for (var offset = 0; offset < (ilbytes?.Length ?? 0);) - { - var instruction = new Instruction(Context, this, ilbytes!, offset, child++); - yield return instruction; - - if (nextSequencePoint is not null && offset >= nextSequencePoint.Current.Offset) - { - instructionLocation = Context.CreateSourceLocation(nextSequencePoint.Current.Location); - yield return instructionLocation; - if (!nextSequencePoint.MoveNext()) - nextSequencePoint = null; - } - - if (instructionLocation is not null) - yield return Tuples.cil_instruction_location(instruction, instructionLocation); - - jump_table.Add(instruction.Offset, instruction); - offset += instruction.Width; - } - - foreach (var i in jump_table) - { - foreach (var t in i.Value.JumpContents(jump_table)) - yield return t; - } - } - - /// - /// Display the instructions in the method in the debugger. - /// This is only used for debugging, not in the code itself. - /// - public IEnumerable DebugInstructions - { - get - { - if (md.ImplAttributes == MethodImplAttributes.IL && md.RelativeVirtualAddress != 0) - { - var body = Context.PeReader.GetMethodBody(md.RelativeVirtualAddress); - - var ilbytes = body.GetILBytes(); - - var child = 0; - for (var offset = 0; offset < (ilbytes?.Length ?? 0);) - { - Instruction decoded; - try - { - decoded = new Instruction(Context, this, ilbytes!, offset, child++); - offset += decoded.Width; - } - catch // lgtm[cs/catch-of-all-exceptions] - { - yield break; - } - yield return decoded; - } - } - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/ErrorType.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/ErrorType.cs deleted file mode 100644 index 41b5810ba27..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/ErrorType.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; - -namespace Semmle.Extraction.CIL.Entities -{ - internal sealed class ErrorType : Type - { - public ErrorType(Context cx) : base(cx) - { - } - - public override void WriteId(EscapingTextWriter trapFile, bool inContext) => trapFile.Write(""); - - public override CilTypeKind Kind => CilTypeKind.ValueOrRefType; - - public override string Name => "!error"; - - public override Namespace ContainingNamespace => Context.GlobalNamespace; - - public override Type? ContainingType => null; - - public override int ThisTypeParameterCount => 0; - - public override void WriteAssemblyPrefix(TextWriter trapFile) => throw new NotImplementedException(); - - public override IEnumerable TypeParameters => throw new NotImplementedException(); - - public override Type Construct(IEnumerable typeArguments) => throw new NotImplementedException(); - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/Event.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/Event.cs deleted file mode 100644 index 0ff273789c1..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/Event.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System.Collections.Generic; -using System.Reflection.Metadata; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// An event entity. - /// - internal sealed class Event : LabelledEntity - { - private readonly EventDefinitionHandle handle; - private readonly Type parent; - private readonly EventDefinition ed; - - public Event(Context cx, Type parent, EventDefinitionHandle handle) : base(cx) - { - this.handle = handle; - this.parent = parent; - ed = cx.MdReader.GetEventDefinition(handle); - } - - public override void WriteId(EscapingTextWriter trapFile) - { - parent.WriteId(trapFile); - trapFile.Write('.'); - trapFile.Write(Context.ShortName(ed.Name)); - trapFile.Write(";cil-event"); - } - - public override bool Equals(object? obj) - { - return obj is Event e && handle.Equals(e.handle); - } - - public override int GetHashCode() => handle.GetHashCode(); - - public override IEnumerable Contents - { - get - { - var signature = (Type)Context.CreateGeneric(parent, ed.Type); - yield return signature; - - yield return Tuples.cil_event(this, parent, Context.ShortName(ed.Name), signature); - - var accessors = ed.GetAccessors(); - if (!accessors.Adder.IsNil) - { - var adder = (Method)Context.CreateGeneric(parent, accessors.Adder); - yield return adder; - yield return Tuples.cil_adder(this, adder); - } - - if (!accessors.Remover.IsNil) - { - var remover = (Method)Context.CreateGeneric(parent, accessors.Remover); - yield return remover; - yield return Tuples.cil_remover(this, remover); - } - - if (!accessors.Raiser.IsNil) - { - var raiser = (Method)Context.CreateGeneric(parent, accessors.Raiser); - yield return raiser; - yield return Tuples.cil_raiser(this, raiser); - } - - foreach (var c in Attribute.Populate(Context, this, ed.GetCustomAttributes())) - yield return c; - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/ExceptionRegion.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/ExceptionRegion.cs deleted file mode 100644 index 5e49c10f533..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/ExceptionRegion.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System.Collections.Generic; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// An exception region entity. - /// - internal class ExceptionRegion : UnlabelledEntity - { - private readonly IGenericContext gc; - private readonly MethodImplementation method; - private readonly int index; - private readonly System.Reflection.Metadata.ExceptionRegion r; - private readonly Dictionary jump_table; - - public ExceptionRegion(IGenericContext gc, MethodImplementation method, int index, System.Reflection.Metadata.ExceptionRegion r, Dictionary jump_table) : base(gc.Context) - { - this.gc = gc; - this.method = method; - this.index = index; - this.r = r; - this.jump_table = jump_table; - } - - public override IEnumerable Contents - { - get - { - - if (!jump_table.TryGetValue(r.TryOffset, out var try_start)) - throw new InternalError("Failed to retrieve handler"); - if (!jump_table.TryGetValue(r.TryOffset + r.TryLength, out var try_end)) - throw new InternalError("Failed to retrieve handler"); - if (!jump_table.TryGetValue(r.HandlerOffset, out var handler_start)) - throw new InternalError("Failed to retrieve handler"); - - yield return Tuples.cil_handler(this, method, index, (int)r.Kind, try_start, try_end, handler_start); - - if (r.FilterOffset != -1) - { - if (!jump_table.TryGetValue(r.FilterOffset, out var filter_start)) - throw new InternalError("ExceptionRegion filter clause"); - - yield return Tuples.cil_handler_filter(this, filter_start); - } - - if (!r.CatchType.IsNil) - { - var catchType = (Type)Context.CreateGeneric(gc, r.CatchType); - yield return catchType; - yield return Tuples.cil_handler_type(this, catchType); - } - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/Field.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/Field.cs deleted file mode 100644 index a42fdab0b1f..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/Field.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System.Collections.Generic; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// An entity representing a field. - /// - internal abstract class Field : LabelledEntity, IGenericContext, IMember, ICustomModifierReceiver - { - protected Field(Context cx) : base(cx) - { - } - - public override void WriteId(EscapingTextWriter trapFile) - { - trapFile.WriteSubId(DeclaringType); - trapFile.Write('.'); - trapFile.Write(Name); - trapFile.Write(";cil-field"); - } - - public abstract string Name { get; } - - public abstract Type DeclaringType { get; } - - public abstract Type Type { get; } - - public override IEnumerable Contents - { - get - { - var t = Type; - if (t is ModifiedType mt) - { - t = mt.Unmodified; - yield return Tuples.cil_custom_modifiers(this, mt.Modifier, mt.IsRequired); - } - if (t is ByRefType brt) - { - t = brt.ElementType; - yield return Tuples.cil_type_annotation(this, TypeAnnotation.Ref); - } - yield return Tuples.cil_field(this, DeclaringType, Name, t); - } - } - - public abstract IEnumerable TypeParameters { get; } - - public abstract IEnumerable MethodParameters { get; } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/File.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/File.cs deleted file mode 100644 index f7ae53af56a..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/File.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System.Collections.Generic; - -namespace Semmle.Extraction.CIL.Entities -{ - internal class File : LabelledEntity, IFileOrFolder - { - protected string OriginalPath { get; } - protected PathTransformer.ITransformedPath TransformedPath { get; } - - public File(Context cx, string path) : base(cx) - { - this.OriginalPath = path; - TransformedPath = Context.Extractor.PathTransformer.Transform(OriginalPath); - } - - public override void WriteId(EscapingTextWriter trapFile) - { - trapFile.Write(TransformedPath.DatabaseId); - trapFile.Write(";sourcefile"); - } - - public override bool Equals(object? obj) - { - return GetType() == obj?.GetType() && OriginalPath == ((File)obj).OriginalPath; - } - - public override int GetHashCode() => 11 * OriginalPath.GetHashCode(); - - public override IEnumerable Contents - { - get - { - if (TransformedPath.ParentDirectory is PathTransformer.ITransformedPath dir) - { - var parent = Context.CreateFolder(dir); - yield return parent; - yield return Tuples.containerparent(parent, this); - } - yield return Tuples.files(this, TransformedPath.Value); - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/Folder.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/Folder.cs deleted file mode 100644 index 3023ea6db91..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/Folder.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System.Collections.Generic; - -namespace Semmle.Extraction.CIL.Entities -{ - internal sealed class Folder : LabelledEntity, IFileOrFolder - { - private readonly PathTransformer.ITransformedPath transformedPath; - - public Folder(Context cx, PathTransformer.ITransformedPath path) : base(cx) - { - this.transformedPath = path; - } - - public override void WriteId(EscapingTextWriter trapFile) - { - trapFile.Write(transformedPath.DatabaseId); - trapFile.Write(";folder"); - } - - public override IEnumerable Contents - { - get - { - if (transformedPath.ParentDirectory is PathTransformer.ITransformedPath parent) - { - var parentFolder = Context.CreateFolder(parent); - yield return parentFolder; - yield return Tuples.containerparent(parentFolder, this); - } - yield return Tuples.folders(this, transformedPath.Value); - } - } - - public override bool Equals(object? obj) - { - return obj is Folder folder && transformedPath == folder.transformedPath; - } - - public override int GetHashCode() => transformedPath.GetHashCode(); - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/FunctionPointerType.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/FunctionPointerType.cs deleted file mode 100644 index 511826e003c..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/FunctionPointerType.cs +++ /dev/null @@ -1,114 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Reflection.Metadata; - -namespace Semmle.Extraction.CIL.Entities -{ - internal sealed class FunctionPointerType : Type, IParameterizable, ICustomModifierReceiver - { - private readonly MethodSignature signature; - - public FunctionPointerType(Context cx, MethodSignature signature) : base(cx) - { - this.signature = signature; - } - - public override CilTypeKind Kind => CilTypeKind.FunctionPointer; - - public override string Name - { - get - { - using var id = new StringWriter(); - WriteName( - id.Write, - t => id.Write(t.Name), - signature - ); - return id.ToString(); - } - } - - public override Namespace? ContainingNamespace => Context.GlobalNamespace; - - public override Type? ContainingType => null; - - public override int ThisTypeParameterCount => throw new System.NotImplementedException(); - - public override IEnumerable TypeParameters => throw new System.NotImplementedException(); - - public override Type Construct(IEnumerable typeArguments) => throw new System.NotImplementedException(); - - public override void WriteAssemblyPrefix(TextWriter trapFile) { } - - public override void WriteId(EscapingTextWriter trapFile, bool inContext) - { - WriteName( - trapFile.Write, - t => t.WriteId(trapFile, inContext), - signature - ); - } - - internal static void WriteName(Action write, Action writeType, MethodSignature signature) - { - write("delegate* "); - write(GetCallingConvention(signature.Header.CallingConvention)); - write("<"); - foreach (var pt in signature.ParameterTypes) - { - writeType(pt); - write(","); - } - writeType(signature.ReturnType); - write(">"); - } - - internal static string GetCallingConvention(SignatureCallingConvention callingConvention) - { - if (callingConvention == SignatureCallingConvention.Default) - { - return "managed"; - } - - if (callingConvention == SignatureCallingConvention.Unmanaged) - { - return "unmanaged"; - } - - return $"unmanaged[{callingConvention}]"; - } - - public override IEnumerable Contents - { - get - { - foreach (var c in base.Contents) - { - yield return c; - } - - var retType = signature.ReturnType; - if (retType is ModifiedType mt) - { - retType = mt.Unmodified; - yield return Tuples.cil_custom_modifiers(this, mt.Modifier, mt.IsRequired); - } - if (retType is ByRefType byRefType) - { - retType = byRefType.ElementType; - yield return Tuples.cil_type_annotation(this, TypeAnnotation.Ref); - } - yield return Tuples.cil_function_pointer_return_type(this, retType); - - yield return Tuples.cil_function_pointer_calling_conventions(this, signature.Header.CallingConvention); - - foreach (var p in Method.GetParameterExtractionProducts(signature.ParameterTypes, this, this, Context, 0)) - { - yield return p; - } - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/GenericsHelper.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/GenericsHelper.cs deleted file mode 100644 index dd3657c0e0d..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/GenericsHelper.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System.Collections.Generic; -using System.Reflection.Metadata; - -namespace Semmle.Extraction.CIL.Entities -{ - internal static class GenericsHelper - { - public static TypeTypeParameter[] MakeTypeParameters(Type container, int count) - { - var newTypeParams = new TypeTypeParameter[count]; - for (var i = 0; i < newTypeParams.Length; ++i) - { - newTypeParams[i] = new TypeTypeParameter(container, i); - } - return newTypeParams; - } - - public static string GetNonGenericName(StringHandle name, MetadataReader reader) - { - var n = reader.GetString(name); - return GetNonGenericName(n); - } - - public static string GetNonGenericName(string name) - { - var tick = name.LastIndexOf('`'); - return tick == -1 - ? name - : name.Substring(0, tick); - } - - public static int GetGenericTypeParameterCount(StringHandle name, MetadataReader reader) - { - var n = reader.GetString(name); - return GetGenericTypeParameterCount(n); - } - - public static int GetGenericTypeParameterCount(string name) - { - var tick = name.LastIndexOf('`'); - return tick == -1 - ? 0 - : int.Parse(name.Substring(tick + 1)); - } - - public static IEnumerable GetAllTypeParameters(Type? container, IEnumerable thisTypeParameters) - { - if (container is not null) - { - foreach (var t in container.TypeParameters) - yield return t; - } - - foreach (var t in thisTypeParameters) - yield return t; - - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/IFileOrFolder.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/IFileOrFolder.cs deleted file mode 100644 index 321bb842ccc..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/IFileOrFolder.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Semmle.Extraction.CIL.Entities -{ - internal interface IFileOrFolder : IEntity - { - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/ILocation.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/ILocation.cs deleted file mode 100644 index 69498223625..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/ILocation.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Semmle.Extraction.CIL.Entities -{ - public interface ILocation : IEntity - { - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/IMember.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/IMember.cs deleted file mode 100644 index 37c0af7702b..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/IMember.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// An entity representing a member. - /// Used to type tuples correctly. - /// - internal interface IMember : IExtractedEntity - { - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/IParameterizable.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/IParameterizable.cs deleted file mode 100644 index ad9347848e4..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/IParameterizable.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Semmle.Extraction.CIL.Entities -{ - internal interface IParameterizable : IEntity - { - - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/ITypeSignature.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/ITypeSignature.cs deleted file mode 100644 index 377035c7e70..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/ITypeSignature.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Semmle.Extraction.CIL.Entities -{ - internal interface ITypeSignature - { - void WriteId(EscapingTextWriter trapFile, IGenericContext gc); - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/Instruction.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/Instruction.cs deleted file mode 100644 index cf7e8fee0b5..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/Instruction.cs +++ /dev/null @@ -1,508 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Reflection.Metadata; -using System.Reflection.Metadata.Ecma335; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// A CIL instruction. - /// - internal class Instruction : UnlabelledEntity - { - /// - /// The additional data following the opcode, if any. - /// - public enum Payload - { - None, TypeTok, Field, Target8, Class, - Method, Arg8, Local8, Target32, Int8, - Int16, Int32, Int64, Float32, Float64, - CallSiteDesc, Switch, String, Constructor, ValueType, - Type, Arg16, Ignore8, Token, Local16, MethodRef - } - - /// - /// For each Payload, how many additional bytes in the bytestream need to be read. - /// - private static readonly int[] payloadSizes = { - 0, 4, 4, 1, 4, - 4, 1, 1, 4, 1, - 2, 4, 8, 4, 8, - 4, -1, 4, 4, 4, - 4, 2, 1, 4, 2, 4 }; - - // Maps opcodes to payloads for each instruction. - private static readonly Dictionary opPayload = new Dictionary() - { - { ILOpCode.Nop, Payload.None }, - { ILOpCode.Break, Payload.None }, - { ILOpCode.Ldarg_0, Payload.None }, - { ILOpCode.Ldarg_1, Payload.None }, - { ILOpCode.Ldarg_2, Payload.None }, - { ILOpCode.Ldarg_3, Payload.None }, - { ILOpCode.Ldloc_0, Payload.None }, - { ILOpCode.Ldloc_1, Payload.None }, - { ILOpCode.Ldloc_2, Payload.None }, - { ILOpCode.Ldloc_3, Payload.None }, - { ILOpCode.Stloc_0, Payload.None }, - { ILOpCode.Stloc_1, Payload.None }, - { ILOpCode.Stloc_2, Payload.None }, - { ILOpCode.Stloc_3, Payload.None }, - { ILOpCode.Ldarg_s, Payload.Arg8 }, - { ILOpCode.Ldarga_s, Payload.Arg8 }, - { ILOpCode.Starg_s, Payload.Arg8 }, - { ILOpCode.Ldloc_s, Payload.Local8 }, - { ILOpCode.Ldloca_s, Payload.Local8 }, - { ILOpCode.Stloc_s, Payload.Local8 }, - { ILOpCode.Ldnull, Payload.None }, - { ILOpCode.Ldc_i4_m1, Payload.None }, - { ILOpCode.Ldc_i4_0, Payload.None }, - { ILOpCode.Ldc_i4_1, Payload.None }, - { ILOpCode.Ldc_i4_2, Payload.None }, - { ILOpCode.Ldc_i4_3, Payload.None }, - { ILOpCode.Ldc_i4_4, Payload.None }, - { ILOpCode.Ldc_i4_5, Payload.None }, - { ILOpCode.Ldc_i4_6, Payload.None }, - { ILOpCode.Ldc_i4_7, Payload.None }, - { ILOpCode.Ldc_i4_8, Payload.None }, - { ILOpCode.Ldc_i4_s, Payload.Int8 }, - { ILOpCode.Ldc_i4, Payload.Int32 }, - { ILOpCode.Ldc_i8, Payload.Int64 }, - { ILOpCode.Ldc_r4, Payload.Float32 }, - { ILOpCode.Ldc_r8, Payload.Float64 }, - { ILOpCode.Dup, Payload.None }, - { ILOpCode.Pop, Payload.None }, - { ILOpCode.Jmp, Payload.Method }, - { ILOpCode.Call, Payload.Method }, - { ILOpCode.Calli, Payload.CallSiteDesc }, - { ILOpCode.Ret, Payload.None }, - { ILOpCode.Br_s, Payload.Target8 }, - { ILOpCode.Brfalse_s, Payload.Target8 }, - { ILOpCode.Brtrue_s, Payload.Target8 }, - { ILOpCode.Beq_s, Payload.Target8 }, - { ILOpCode.Bge_s, Payload.Target8 }, - { ILOpCode.Bgt_s, Payload.Target8 }, - { ILOpCode.Ble_s, Payload.Target8 }, - { ILOpCode.Blt_s, Payload.Target8 }, - { ILOpCode.Bne_un_s, Payload.Target8 }, - { ILOpCode.Bge_un_s, Payload.Target8 }, - { ILOpCode.Bgt_un_s, Payload.Target8 }, - { ILOpCode.Ble_un_s, Payload.Target8 }, - { ILOpCode.Blt_un_s, Payload.Target8 }, - { ILOpCode.Br, Payload.Target32 }, - { ILOpCode.Brfalse, Payload.Target32 }, - { ILOpCode.Brtrue, Payload.Target32 }, - { ILOpCode.Beq, Payload.Target32 }, - { ILOpCode.Bge, Payload.Target32 }, - { ILOpCode.Bgt, Payload.Target32 }, - { ILOpCode.Ble, Payload.Target32 }, - { ILOpCode.Blt, Payload.Target32 }, - { ILOpCode.Bne_un, Payload.Target32 }, - { ILOpCode.Bge_un, Payload.Target32 }, - { ILOpCode.Bgt_un, Payload.Target32 }, - { ILOpCode.Ble_un, Payload.Target32 }, - { ILOpCode.Blt_un, Payload.Target32 }, - { ILOpCode.Switch, Payload.Switch }, - { ILOpCode.Ldind_i1, Payload.None }, - { ILOpCode.Ldind_u1, Payload.None }, - { ILOpCode.Ldind_i2, Payload.None }, - { ILOpCode.Ldind_u2, Payload.None }, - { ILOpCode.Ldind_i4, Payload.None }, - { ILOpCode.Ldind_u4, Payload.None }, - { ILOpCode.Ldind_i8, Payload.None }, - { ILOpCode.Ldind_i, Payload.None }, - { ILOpCode.Ldind_r4, Payload.None }, - { ILOpCode.Ldind_r8, Payload.None }, - { ILOpCode.Ldind_ref, Payload.None }, - { ILOpCode.Stind_ref, Payload.None }, - { ILOpCode.Stind_i1, Payload.None }, - { ILOpCode.Stind_i2, Payload.None }, - { ILOpCode.Stind_i4, Payload.None }, - { ILOpCode.Stind_i8, Payload.None }, - { ILOpCode.Stind_r4, Payload.None }, - { ILOpCode.Stind_r8, Payload.None }, - { ILOpCode.Add, Payload.None }, - { ILOpCode.Sub, Payload.None }, - { ILOpCode.Mul, Payload.None }, - { ILOpCode.Div, Payload.None }, - { ILOpCode.Div_un, Payload.None }, - { ILOpCode.Rem, Payload.None }, - { ILOpCode.Rem_un, Payload.None }, - { ILOpCode.And, Payload.None }, - { ILOpCode.Or, Payload.None }, - { ILOpCode.Xor, Payload.None }, - { ILOpCode.Shl, Payload.None }, - { ILOpCode.Shr, Payload.None }, - { ILOpCode.Shr_un, Payload.None }, - { ILOpCode.Neg, Payload.None }, - { ILOpCode.Not, Payload.None }, - { ILOpCode.Conv_i1, Payload.None }, - { ILOpCode.Conv_i2, Payload.None }, - { ILOpCode.Conv_i4, Payload.None }, - { ILOpCode.Conv_i8, Payload.None }, - { ILOpCode.Conv_r4, Payload.None }, - { ILOpCode.Conv_r8, Payload.None }, - { ILOpCode.Conv_u4, Payload.None }, - { ILOpCode.Conv_u8, Payload.None }, - { ILOpCode.Callvirt, Payload.MethodRef }, - { ILOpCode.Cpobj, Payload.TypeTok }, - { ILOpCode.Ldobj, Payload.TypeTok }, - { ILOpCode.Ldstr, Payload.String }, - { ILOpCode.Newobj, Payload.Constructor }, - { ILOpCode.Castclass, Payload.Class }, - { ILOpCode.Isinst, Payload.Class }, - { ILOpCode.Conv_r_un, Payload.None }, - { ILOpCode.Unbox, Payload.ValueType }, - { ILOpCode.Throw, Payload.None }, - { ILOpCode.Ldfld, Payload.Field }, - { ILOpCode.Ldflda, Payload.Field }, - { ILOpCode.Stfld, Payload.Field }, - { ILOpCode.Ldsfld, Payload.Field }, - { ILOpCode.Ldsflda, Payload.Field }, - { ILOpCode.Stsfld, Payload.Field }, - { ILOpCode.Stobj, Payload.Field }, - { ILOpCode.Conv_ovf_i1_un, Payload.None }, - { ILOpCode.Conv_ovf_i2_un, Payload.None }, - { ILOpCode.Conv_ovf_i4_un, Payload.None }, - { ILOpCode.Conv_ovf_i8_un, Payload.None }, - { ILOpCode.Conv_ovf_u1_un, Payload.None }, - { ILOpCode.Conv_ovf_u2_un, Payload.None }, - { ILOpCode.Conv_ovf_u4_un, Payload.None }, - { ILOpCode.Conv_ovf_u8_un, Payload.None }, - { ILOpCode.Conv_ovf_i_un, Payload.None }, - { ILOpCode.Conv_ovf_u_un, Payload.None }, - { ILOpCode.Box, Payload.TypeTok }, - { ILOpCode.Newarr, Payload.TypeTok }, - { ILOpCode.Ldlen, Payload.None }, - { ILOpCode.Ldelema, Payload.Class }, - { ILOpCode.Ldelem_i1, Payload.None }, - { ILOpCode.Ldelem_u1, Payload.None }, - { ILOpCode.Ldelem_i2, Payload.None }, - { ILOpCode.Ldelem_u2, Payload.None }, - { ILOpCode.Ldelem_i4, Payload.None }, - { ILOpCode.Ldelem_u4, Payload.None }, - { ILOpCode.Ldelem_i8, Payload.None }, - { ILOpCode.Ldelem_i, Payload.None }, - { ILOpCode.Ldelem_r4, Payload.None }, - { ILOpCode.Ldelem_r8, Payload.None }, - { ILOpCode.Ldelem_ref, Payload.None }, - { ILOpCode.Stelem_i, Payload.None }, - { ILOpCode.Stelem_i1, Payload.None }, - { ILOpCode.Stelem_i2, Payload.None }, - { ILOpCode.Stelem_i4, Payload.None }, - { ILOpCode.Stelem_i8, Payload.None }, - { ILOpCode.Stelem_r4, Payload.None }, - { ILOpCode.Stelem_r8, Payload.None }, - { ILOpCode.Stelem_ref, Payload.None }, - { ILOpCode.Ldelem, Payload.TypeTok }, - { ILOpCode.Stelem, Payload.TypeTok }, - { ILOpCode.Unbox_any, Payload.TypeTok }, - { ILOpCode.Conv_ovf_i1, Payload.None }, - { ILOpCode.Conv_ovf_u1, Payload.None }, - { ILOpCode.Conv_ovf_i2, Payload.None }, - { ILOpCode.Conv_ovf_u2, Payload.None }, - { ILOpCode.Conv_ovf_i4, Payload.None }, - { ILOpCode.Conv_ovf_u4, Payload.None }, - { ILOpCode.Conv_ovf_i8, Payload.None }, - { ILOpCode.Conv_ovf_u8, Payload.None }, - { ILOpCode.Refanyval, Payload.Type }, - { ILOpCode.Ckfinite, Payload.None }, - { ILOpCode.Mkrefany, Payload.Class }, - { ILOpCode.Ldtoken, Payload.Token }, - { ILOpCode.Conv_u2, Payload.None }, - { ILOpCode.Conv_u1, Payload.None }, - { ILOpCode.Conv_i, Payload.None }, - { ILOpCode.Conv_ovf_i, Payload.None }, - { ILOpCode.Conv_ovf_u, Payload.None }, - { ILOpCode.Add_ovf, Payload.None }, - { ILOpCode.Add_ovf_un, Payload.None }, - { ILOpCode.Mul_ovf, Payload.None }, - { ILOpCode.Mul_ovf_un, Payload.None }, - { ILOpCode.Sub_ovf, Payload.None }, - { ILOpCode.Sub_ovf_un, Payload.None }, - { ILOpCode.Endfinally, Payload.None }, - { ILOpCode.Leave, Payload.Target32 }, - { ILOpCode.Leave_s, Payload.Target8 }, - { ILOpCode.Stind_i, Payload.None }, - { ILOpCode.Conv_u, Payload.None }, - { ILOpCode.Arglist, Payload.None }, - { ILOpCode.Ceq, Payload.None }, - { ILOpCode.Cgt, Payload.None }, - { ILOpCode.Cgt_un, Payload.None }, - { ILOpCode.Clt, Payload.None }, - { ILOpCode.Clt_un, Payload.None }, - { ILOpCode.Ldftn, Payload.Method }, - { ILOpCode.Ldvirtftn, Payload.Method }, - { ILOpCode.Ldarg, Payload.Arg16 }, - { ILOpCode.Ldarga, Payload.Arg16 }, - { ILOpCode.Starg, Payload.Arg16 }, - { ILOpCode.Ldloc, Payload.Local16 }, - { ILOpCode.Ldloca, Payload.Local16 }, - { ILOpCode.Stloc, Payload.Local16 }, - { ILOpCode.Localloc, Payload.None }, - { ILOpCode.Endfilter, Payload.None }, - { ILOpCode.Unaligned, Payload.Ignore8 }, - { ILOpCode.Volatile, Payload.None }, - { ILOpCode.Tail, Payload.None }, - { ILOpCode.Initobj, Payload.TypeTok }, - { ILOpCode.Constrained, Payload.Type }, - { ILOpCode.Cpblk, Payload.None }, - { ILOpCode.Initblk, Payload.None }, - { ILOpCode.Rethrow, Payload.None }, - { ILOpCode.Sizeof, Payload.TypeTok }, - { ILOpCode.Refanytype, Payload.None }, - { ILOpCode.Readonly, Payload.None } - }; - - public DefinitionMethod Method { get; } - public ILOpCode OpCode { get; } - public int Offset { get; } - public int Index { get; } - private readonly int payloadValue; - private readonly uint unsignedPayloadValue; - - public Payload PayloadType - { - get - { - if (!opPayload.TryGetValue(OpCode, out var result)) - throw new InternalError("Unknown op code " + OpCode); - return result; - } - } - - public override string ToString() => Index + ": " + OpCode; - - /// - /// The number of bytes of this instruction, - /// including the payload (if any). - /// - public int Width - { - get - { - if (OpCode == ILOpCode.Switch) - return 5 + 4 * payloadValue; - - return ((int)OpCode > 255 ? 2 : 1) + PayloadSize; - } - } - - private readonly byte[] data; - - private int PayloadSize => payloadSizes[(int)PayloadType]; - - /// - /// Reads the instruction from a byte stream. - /// - /// The byte stream. - /// The offset of the instruction. - /// The index of this instruction in the callable. - public Instruction(Context cx, DefinitionMethod method, byte[] data, int offset, int index) : base(cx) - { - Method = method; - Offset = offset; - Index = index; - this.data = data; - int opcode = data[offset]; - ++offset; - - /* - * An opcode is either 1 or 2 bytes, followed by an optional payload depending on the instruction. - * Instructions where the first byte is 0xfe are 2-byte instructions. - */ - if (opcode == 0xfe) - opcode = opcode << 8 | data[offset++]; - OpCode = (ILOpCode)opcode; - - switch (PayloadSize) - { - case 0: - payloadValue = 0; - break; - case 1: - payloadValue = (sbyte)data[offset]; - unsignedPayloadValue = data[offset]; - break; - case 2: - payloadValue = BitConverter.ToInt16(data, offset); - unsignedPayloadValue = BitConverter.ToUInt16(data, offset); - break; - case -1: // Switch - case 4: - payloadValue = BitConverter.ToInt32(data, offset); - break; - case 8: // Not handled here. - break; - default: - throw new InternalError("Unhandled CIL instruction Payload"); - } - } - - public override IEnumerable Contents - { - get - { - var offset = Offset; - - if (Method.Implementation is null) - { - yield break; - } - - yield return Tuples.cil_instruction(this, (int)OpCode, Index, Method.Implementation); - - switch (PayloadType) - { - case Payload.String: - yield return Tuples.cil_value(this, Context.MdReader.GetUserString(MetadataTokens.UserStringHandle(payloadValue))); - break; - case Payload.Float32: - yield return Tuples.cil_value(this, BitConverter.ToSingle(data, offset).ToString()); - break; - case Payload.Float64: - yield return Tuples.cil_value(this, BitConverter.ToDouble(data, offset).ToString()); - break; - case Payload.Int8: - yield return Tuples.cil_value(this, data[offset].ToString()); - break; - case Payload.Int16: - yield return Tuples.cil_value(this, BitConverter.ToInt16(data, offset).ToString()); - break; - case Payload.Int32: - yield return Tuples.cil_value(this, BitConverter.ToInt32(data, offset).ToString()); - break; - case Payload.Int64: - yield return Tuples.cil_value(this, BitConverter.ToInt64(data, offset).ToString()); - break; - case Payload.Constructor: - case Payload.Method: - case Payload.MethodRef: - case Payload.Class: - case Payload.TypeTok: - case Payload.Token: - case Payload.Type: - case Payload.Field: - case Payload.ValueType: - { - // A generic EntityHandle. - var handle = MetadataTokens.EntityHandle(payloadValue); - var target = Context.CreateGeneric(Method, handle); - yield return target; - if (target is not null) - { - yield return Tuples.cil_access(this, target); - } - else - { - throw new InternalError($"Unable to create payload type {PayloadType} for opcode {OpCode}"); - } - break; - } - case Payload.Arg8: - case Payload.Arg16: - if (Method.Parameters is not null) - { - yield return Tuples.cil_access(this, Method.Parameters[(int)unsignedPayloadValue]); - } - break; - case Payload.Local8: - case Payload.Local16: - if (Method.LocalVariables is not null) - { - yield return Tuples.cil_access(this, Method.LocalVariables[(int)unsignedPayloadValue]); - } - break; - case Payload.None: - case Payload.Target8: - case Payload.Target32: - case Payload.Switch: - case Payload.Ignore8: - // These are not handled here. - // Some of these are handled by JumpContents(). - break; - case Payload.CallSiteDesc: - { - var handle = MetadataTokens.EntityHandle(payloadValue); - IExtractedEntity? target = null; - try - { - target = Context.CreateGeneric(Method, handle); - } - catch (Exception exc) - { - Context.Extractor.Logger.Log(Util.Logging.Severity.Warning, $"Couldn't interpret payload of payload type {PayloadType} as a function pointer type. {exc.Message} {exc.StackTrace}"); - } - - if (target is not null) - { - yield return target; - yield return Tuples.cil_access(this, target); - } - else - { - throw new InternalError($"Unable to create payload type {PayloadType} for opcode {OpCode}"); - } - break; - } - default: - throw new InternalError($"Unhandled payload type {PayloadType}"); - } - } - } - - // Called to populate the jumps in each instruction. - public IEnumerable JumpContents(Dictionary jump_table) - { - int target; - Instruction? inst; - - switch (PayloadType) - { - case Payload.Target8: - target = Offset + payloadValue + 2; - break; - case Payload.Target32: - target = Offset + payloadValue + 5; - break; - case Payload.Switch: - var end = Offset + Width; - - var offset = Offset + 5; - - for (var b = 0; b < payloadValue; ++b, offset += 4) - { - target = BitConverter.ToInt32(data, offset) + end; - if (jump_table.TryGetValue(target, out inst)) - { - yield return Tuples.cil_switch(this, b, inst); - } - else - { - throw new InternalError("Invalid jump target"); - } - } - - yield break; - default: - // Not a jump - yield break; - } - - - if (jump_table.TryGetValue(target, out inst)) - { - yield return Tuples.cil_jump(this, inst); - } - else - { - // Sometimes instructions can jump outside the current method. - // TODO: Find a solution to this. - - // For now, just log the error - Context.ExtractionError("A CIL instruction jumps outside the current method", null, Extraction.Entities.GeneratedLocation.Create(Context), "", Util.Logging.Severity.Warning); - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/LocalVariable.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/LocalVariable.cs deleted file mode 100644 index ec14e364f87..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/LocalVariable.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Collections.Generic; - -namespace Semmle.Extraction.CIL.Entities -{ - internal class LocalVariable : LabelledEntity - { - private readonly MethodImplementation method; - private readonly int index; - private readonly Type type; - - public LocalVariable(Context cx, MethodImplementation m, int i, Type t) : base(cx) - { - method = m; - index = i; - type = t; - } - - public override void WriteId(EscapingTextWriter trapFile) - { - trapFile.WriteSubId(method); - trapFile.Write('_'); - trapFile.Write(index); - trapFile.Write(";cil-local"); - } - - public override IEnumerable Contents - { - get - { - yield return type; - yield return Tuples.cil_local_variable(this, method, index, type); - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/MemberReferenceField.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/MemberReferenceField.cs deleted file mode 100644 index 6a198052018..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/MemberReferenceField.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Reflection.Metadata; - -namespace Semmle.Extraction.CIL.Entities -{ - internal sealed class MemberReferenceField : Field - { - private readonly MemberReferenceHandle handle; - private readonly MemberReference mr; - private readonly IGenericContext gc; - private readonly Type declType; - - public MemberReferenceField(IGenericContext gc, MemberReferenceHandle handle) : base(gc.Context) - { - this.handle = handle; - this.gc = gc; - mr = Context.MdReader.GetMemberReference(handle); - declType = (Type)Context.CreateGeneric(gc, mr.Parent); - } - - public override bool Equals(object? obj) - { - return obj is MemberReferenceField field && handle.Equals(field.handle); - } - - public override int GetHashCode() - { - return handle.GetHashCode(); - } - - public override string Name => Context.GetString(mr.Name); - - public override Type DeclaringType => declType; - - public override Type Type => mr.DecodeFieldSignature(Context.TypeSignatureDecoder, this); - - public override IEnumerable TypeParameters => gc.TypeParameters.Concat(declType.TypeParameters); - - public override IEnumerable MethodParameters => gc.MethodParameters.Concat(declType.MethodParameters); - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/MemberReferenceMethod.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/MemberReferenceMethod.cs deleted file mode 100644 index 1a7942936d6..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/MemberReferenceMethod.cs +++ /dev/null @@ -1,95 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Reflection.Metadata; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// This is a late-bound reference to a method. - /// - internal sealed class MemberReferenceMethod : Method - { - private readonly MemberReferenceHandle handle; - private readonly MemberReference mr; - private readonly Type declaringType; - private readonly IGenericContext parent; - private readonly Method? sourceDeclaration; - - public MemberReferenceMethod(IGenericContext gc, MemberReferenceHandle handle) : base(gc) - { - this.handle = handle; - this.gc = gc; - mr = Context.MdReader.GetMemberReference(handle); - - signature = mr.DecodeMethodSignature(new SignatureDecoder(), gc); - - parent = (IGenericContext)Context.CreateGeneric(gc, mr.Parent); - - var declType = parent is Method parentMethod - ? parentMethod.DeclaringType - : parent as Type; - - if (declType is null) - throw new InternalError("Parent context of method is not a type"); - - declaringType = declType; - nameLabel = Context.GetString(mr.Name); - - var typeSourceDeclaration = declaringType.SourceDeclaration; - sourceDeclaration = typeSourceDeclaration == declaringType ? (Method)this : typeSourceDeclaration.LookupMethod(mr.Name, mr.Signature); - } - - private readonly string nameLabel; - - public override string NameLabel => nameLabel; - - public override bool Equals(object? obj) - { - return obj is MemberReferenceMethod method && handle.Equals(method.handle); - } - - public override int GetHashCode() - { - return handle.GetHashCode(); - } - - public override Method? SourceDeclaration => sourceDeclaration; - - public override bool IsStatic => !signature.Header.IsInstance; - - public override Type DeclaringType => declaringType; - - public override string Name => Context.ShortName(mr.Name); - - public override IEnumerable TypeParameters => parent.TypeParameters.Concat(gc.TypeParameters); - - public override IEnumerable Contents - { - get - { - genericParams = new MethodTypeParameter[signature.GenericParameterCount]; - for (var p = 0; p < genericParams.Length; ++p) - genericParams[p] = Context.Populate(new MethodTypeParameter(this, this, p)); - - foreach (var p in genericParams) - yield return p; - - var typeSignature = mr.DecodeMethodSignature(Context.TypeSignatureDecoder, this); - - var parameters = GetParameterExtractionProducts(typeSignature.ParameterTypes).ToArray(); - Parameters = parameters.OfType().ToArray(); - foreach (var p in parameters) yield return p; - - foreach (var f in PopulateFlags) yield return f; - - foreach (var m in GetMethodExtractionProducts(Name, DeclaringType, typeSignature.ReturnType)) - { - yield return m; - } - - if (SourceDeclaration is not null) - yield return Tuples.cil_method_source_declaration(this, SourceDeclaration); - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/Method.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/Method.cs deleted file mode 100644 index b5d58affd6e..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/Method.cs +++ /dev/null @@ -1,131 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection.Metadata; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// A method entity. - /// - internal abstract class Method : TypeContainer, IMember, ICustomModifierReceiver, IParameterizable - { - protected MethodTypeParameter[]? genericParams; - protected IGenericContext gc; - protected MethodSignature signature; - - protected Method(IGenericContext gc) : base(gc.Context) - { - this.gc = gc; - } - - public ITypeSignature ReturnType => signature.ReturnType; - - public override IEnumerable TypeParameters => gc.TypeParameters.Concat(DeclaringType.TypeParameters); - - public override IEnumerable MethodParameters => - genericParams is null ? gc.MethodParameters : gc.MethodParameters.Concat(genericParams); - - public int GenericParameterCount => signature.GenericParameterCount; - - public virtual Method? SourceDeclaration => this; - - public abstract Type DeclaringType { get; } - public abstract string Name { get; } - - public virtual IList? LocalVariables => throw new NotImplementedException(); - public IList? Parameters { get; protected set; } - - public abstract string NameLabel { get; } - - public override void WriteId(EscapingTextWriter trapFile) - { - signature.ReturnType.WriteId(trapFile, this); - trapFile.Write(' '); - DeclaringType.WriteId(trapFile); - trapFile.Write('.'); - trapFile.Write(NameLabel); - - if (signature.GenericParameterCount > 0) - { - trapFile.Write('`'); - trapFile.Write(signature.GenericParameterCount); - } - trapFile.Write('('); - var index = 0; - foreach (var param in signature.ParameterTypes) - { - trapFile.WriteSeparator(",", ref index); - param.WriteId(trapFile, this); - } - trapFile.Write(");cil-method"); - } - - protected IEnumerable PopulateFlags - { - get - { - if (IsStatic) - yield return Tuples.cil_static(this); - } - } - - public abstract bool IsStatic { get; } - - protected IEnumerable GetParameterExtractionProducts(IEnumerable parameterTypes) - { - var i = 0; - - if (!IsStatic) - { - yield return Context.Populate(new Parameter(Context, this, i++, DeclaringType)); - } - - foreach (var p in GetParameterExtractionProducts(parameterTypes, this, this, Context, i)) - { - yield return p; - } - } - - internal static IEnumerable GetParameterExtractionProducts(IEnumerable parameterTypes, IParameterizable parameterizable, ICustomModifierReceiver receiver, Context cx, int firstChildIndex) - { - var i = firstChildIndex; - foreach (var p in parameterTypes) - { - var t = p; - if (t is ModifiedType mt) - { - t = mt.Unmodified; - yield return Tuples.cil_custom_modifiers(receiver, mt.Modifier, mt.IsRequired); - } - if (t is ByRefType brt) - { - t = brt.ElementType; - var parameter = cx.Populate(new Parameter(cx, parameterizable, i++, t)); - yield return parameter; - yield return Tuples.cil_type_annotation(parameter, TypeAnnotation.Ref); - } - else - { - yield return cx.Populate(new Parameter(cx, parameterizable, i++, t)); - } - } - } - - protected IEnumerable GetMethodExtractionProducts(string name, Type declaringType, Type returnType) - { - var t = returnType; - if (t is ModifiedType mt) - { - t = mt.Unmodified; - yield return Tuples.cil_custom_modifiers(this, mt.Modifier, mt.IsRequired); - } - if (t is ByRefType brt) - { - t = brt.ElementType; - yield return Tuples.cil_type_annotation(this, TypeAnnotation.Ref); - } - yield return Tuples.cil_method(this, name, declaringType, t); - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/MethodImplementation.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/MethodImplementation.cs deleted file mode 100644 index eb31e2813ee..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/MethodImplementation.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections.Generic; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// A method implementation entity. - /// In the database, the same method could in principle have multiple implementations. - /// - internal class MethodImplementation : UnlabelledEntity - { - private readonly Method m; - - public MethodImplementation(Method m) : base(m.Context) - { - this.m = m; - } - - public override IEnumerable Contents - { - get - { - yield return Tuples.cil_method_implementation(this, m, Context.Assembly); - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/MethodSpecificationMethod.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/MethodSpecificationMethod.cs deleted file mode 100644 index 9d149d9dc58..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/MethodSpecificationMethod.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Reflection.Metadata; -using Semmle.Util; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// A constructed method. - /// - internal sealed class MethodSpecificationMethod : Method - { - private readonly MethodSpecificationHandle handle; - private readonly MethodSpecification ms; - private readonly Method unboundMethod; - private readonly ImmutableArray typeParams; - - public MethodSpecificationMethod(IGenericContext gc, MethodSpecificationHandle handle) : base(gc) - { - this.handle = handle; - ms = Context.MdReader.GetMethodSpecification(handle); - typeParams = ms.DecodeSignature(Context.TypeSignatureDecoder, gc); - unboundMethod = (Method)Context.CreateGeneric(gc, ms.Method); - } - - public override void WriteId(EscapingTextWriter trapFile) - { - unboundMethod.WriteId(trapFile); - trapFile.Write('<'); - var index = 0; - foreach (var param in typeParams) - { - trapFile.WriteSeparator(",", ref index); - trapFile.WriteSubId(param); - } - trapFile.Write('>'); - } - - public override string NameLabel => throw new NotImplementedException(); - - public override bool Equals(object? obj) - { - return obj is MethodSpecificationMethod method && handle.Equals(method.handle) && typeParams.SequenceEqual(method.typeParams); - } - - public override int GetHashCode() => handle.GetHashCode() * 11 + typeParams.SequenceHash(); - - public override Method SourceDeclaration => unboundMethod; - - public override Type DeclaringType => unboundMethod.DeclaringType; - - public override string Name => unboundMethod.Name; - - public override bool IsStatic => unboundMethod.IsStatic; - - public override IEnumerable MethodParameters => typeParams; - - public override IEnumerable Contents - { - get - { - MethodSignature constructedTypeSignature; - switch (ms.Method.Kind) - { - case HandleKind.MemberReference: - var mr = Context.MdReader.GetMemberReference((MemberReferenceHandle)ms.Method); - constructedTypeSignature = mr.DecodeMethodSignature(Context.TypeSignatureDecoder, this); - break; - case HandleKind.MethodDefinition: - var md = Context.MdReader.GetMethodDefinition((MethodDefinitionHandle)ms.Method); - constructedTypeSignature = md.DecodeSignature(Context.TypeSignatureDecoder, this); - break; - default: - throw new InternalError($"Unexpected constructed method handle kind {ms.Method.Kind}"); - } - - var parameters = GetParameterExtractionProducts(constructedTypeSignature.ParameterTypes).ToArray(); - Parameters = parameters.OfType().ToArray(); - foreach (var p in parameters) - yield return p; - - foreach (var f in PopulateFlags) - yield return f; - - foreach (var m in GetMethodExtractionProducts(Name, DeclaringType, constructedTypeSignature.ReturnType)) - { - yield return m; - } - - yield return Tuples.cil_method_source_declaration(this, SourceDeclaration); - - if (typeParams.Length != unboundMethod.GenericParameterCount) - throw new InternalError("Method type parameter mismatch"); - - for (var p = 0; p < typeParams.Length; ++p) - { - yield return Tuples.cil_type_argument(this, p, typeParams[p]); - } - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/MethodTypeParameter.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/MethodTypeParameter.cs deleted file mode 100644 index 94752623313..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/MethodTypeParameter.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Semmle.Extraction.CIL.Entities -{ - internal sealed class MethodTypeParameter : TypeParameter - { - private readonly Method method; - private readonly int index; - - public override void WriteId(EscapingTextWriter trapFile, bool inContext) - { - if (!(inContext && method == gc)) - { - trapFile.WriteSubId(method); - } - trapFile.Write("!"); - trapFile.Write(index); - } - - public override string Name => "!" + index; - - public MethodTypeParameter(IGenericContext gc, Method m, int index) : base(gc) - { - method = m; - this.index = index; - } - - public override bool Equals(object? obj) - { - return obj is MethodTypeParameter tp && method.Equals(tp.method) && index == tp.index; - } - - public override int GetHashCode() - { - return method.GetHashCode() * 29 + index; - } - - public override TypeContainer Parent => method; - - public override IEnumerable TypeParameters => throw new NotImplementedException(); - - public override IEnumerable Contents - { - get - { - yield return Tuples.cil_type(this, Name, Kind, method, SourceDeclaration); - yield return Tuples.cil_type_parameter(method, index, this); - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/ModifiedType.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/ModifiedType.cs deleted file mode 100644 index 36e08a2e594..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/ModifiedType.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// Modified types are not written directly to trap files. Instead, the modifiers are stored - /// on the modifiable entity (field type, property/method/function pointer parameter or return types). - /// - internal sealed class ModifiedType : Type - { - public ModifiedType(Context cx, Type unmodified, Type modifier, bool isRequired) : base(cx) - { - Unmodified = unmodified; - Modifier = modifier; - IsRequired = isRequired; - } - - public Type Unmodified { get; } - public Type Modifier { get; } - public bool IsRequired { get; } - - public override CilTypeKind Kind => throw new NotImplementedException(); - - public override Namespace? ContainingNamespace => throw new NotImplementedException(); - - public override Type? ContainingType => throw new NotImplementedException(); - - public override IEnumerable TypeParameters => throw new NotImplementedException(); - - public override int ThisTypeParameterCount => throw new NotImplementedException(); - - public override Type Construct(IEnumerable typeArguments) => throw new NotImplementedException(); - - public override string Name => $"{Unmodified.Name} {(IsRequired ? "modreq" : "modopt")}({Modifier.Name})"; - - public override void WriteAssemblyPrefix(TextWriter trapFile) => throw new NotImplementedException(); - - public override void WriteId(EscapingTextWriter trapFile, bool inContext) - { - Unmodified.WriteId(trapFile, inContext); - trapFile.Write(IsRequired ? " modreq" : " modopt"); - trapFile.Write("("); - Modifier.WriteId(trapFile, inContext); - trapFile.Write(")"); - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/NamedTypeIdWriter.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/NamedTypeIdWriter.cs deleted file mode 100644 index f78aba27a12..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/NamedTypeIdWriter.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System.Linq; - -namespace Semmle.Extraction.CIL.Entities -{ - internal class NamedTypeIdWriter - { - private readonly Type type; - - public NamedTypeIdWriter(Type type) - { - this.type = type; - } - - public void WriteId(EscapingTextWriter trapFile, bool inContext) - { - if (type.IsPrimitiveType) - { - Type.WritePrimitiveTypeId(trapFile, type.Name); - return; - } - - var ct = type.ContainingType; - if (ct is not null) - { - ct.WriteId(trapFile, inContext); - trapFile.Write('.'); - } - else - { - type.WriteAssemblyPrefix(trapFile); - - var ns = type.ContainingNamespace!; - if (!ns.IsGlobalNamespace) - { - ns.WriteId(trapFile); - trapFile.Write('.'); - } - } - - trapFile.Write(type.Name); - - var thisTypeArguments = type.ThisTypeArguments; - if (thisTypeArguments is not null && thisTypeArguments.Any()) - { - trapFile.Write('<'); - var index = 0; - foreach (var t in thisTypeArguments) - { - trapFile.WriteSeparator(",", ref index); - t.WriteId(trapFile); - } - trapFile.Write('>'); - } - else if (type.ThisTypeParameterCount > 0) - { - trapFile.Write('`'); - trapFile.Write(type.ThisTypeParameterCount); - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/Namespace.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/Namespace.cs deleted file mode 100644 index 2ab143b3733..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/Namespace.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// A namespace. - /// - internal sealed class Namespace : TypeContainer - { - public Namespace? ParentNamespace { get; } - public string Name { get; } - - public bool IsGlobalNamespace => ParentNamespace is null; - - public override void WriteId(EscapingTextWriter trapFile) - { - if (ParentNamespace is not null && !ParentNamespace.IsGlobalNamespace) - { - ParentNamespace.WriteId(trapFile); - trapFile.Write('.'); - } - trapFile.Write(Name); - trapFile.Write(";namespace"); - } - - public override bool Equals(object? obj) - { - if (obj is Namespace ns && Name == ns.Name) - { - if (ParentNamespace is null) - return ns.ParentNamespace is null; - if (!(ns.ParentNamespace is null)) - return ParentNamespace.Equals(ns.ParentNamespace); - } - return false; - } - - public override int GetHashCode() - { - var h = ParentNamespace is null ? 19 : ParentNamespace.GetHashCode(); - return 13 * h + Name.GetHashCode(); - } - - public override IEnumerable TypeParameters => throw new NotImplementedException(); - - public override IEnumerable MethodParameters => throw new NotImplementedException(); - - private static string parseNamespaceName(string fqn) - { - var i = fqn.LastIndexOf('.'); - return i == -1 ? fqn : fqn.Substring(i + 1); - } - - private static Namespace? createParentNamespace(Context cx, string fqn) - { - if (fqn.Length == 0) - return null; - var i = fqn.LastIndexOf('.'); - return i == -1 ? cx.GlobalNamespace : cx.Populate(new Namespace(cx, fqn.Substring(0, i))); - } - - public Namespace(Context cx, string fqn) : this(cx, parseNamespaceName(fqn), createParentNamespace(cx, fqn)) - { - } - - public Namespace(Context cx, string name, Namespace? parent) : base(cx) - { - Name = name; - ParentNamespace = parent; - } - - public override IEnumerable Contents - { - get - { - yield return Tuples.namespaces(this, Name); - if (ParentNamespace is not null) - yield return Tuples.parent_namespace(this, ParentNamespace); - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/NoMetadataHandleType.FullyQualifiedNameParser.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/NoMetadataHandleType.FullyQualifiedNameParser.cs deleted file mode 100644 index ab1aedab3c3..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/NoMetadataHandleType.FullyQualifiedNameParser.cs +++ /dev/null @@ -1,162 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using Semmle.Util; - -namespace Semmle.Extraction.CIL.Entities -{ - internal sealed partial class NoMetadataHandleType - { - /// - /// Parser to split a fully qualified name into short name, namespace or declaring type name, assembly name, and - /// type argument names. Names are in the following format: - /// N1.N2.T1`2+T2`2[T3,[T4, A1, Version=...],T5,T6], A2, Version=... - /// - /// - /// typeof(System.Collections.Generic.List.Enumerator) - /// -> System.Collections.Generic.List`1+Enumerator[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e - /// typeof(System.Collections.Generic.List<>.Enumerator) - /// -> System.Collections.Generic.List`1+Enumerator, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e - /// - /// - private class FullyQualifiedNameParser - { - public string ShortName { get; internal set; } - public string? AssemblyName { get; private set; } - public IEnumerable? TypeArguments { get; internal set; } - public string? UnboundGenericTypeName { get; internal set; } - public string ContainerName { get; internal set; } - public bool IsContainerNamespace { get; internal set; } - - private string AssemblySuffix => string.IsNullOrWhiteSpace(AssemblyName) ? "" : $", {AssemblyName}"; - - public FullyQualifiedNameParser(string name) - { - ExtractAssemblyName(ref name, out var lastBracketIndex); - ExtractTypeArguments(ref name, lastBracketIndex, out var containerTypeArguments); - ContainerName = ExtractContainer(ref name, containerTypeArguments); - - ShortName = name; - } - - private void ExtractTypeArguments(ref string name, int lastBracketIndex, out string containerTypeArguments) - { - var firstBracketIndex = name.IndexOf('['); - if (firstBracketIndex < 0) - { - // not generic or non-constructed generic - TypeArguments = null; - containerTypeArguments = ""; - UnboundGenericTypeName = null; - return; - } - - // "T3,[T4, Assembly1, Version=...],T5,T6" - string typeArgs; - (name, _, typeArgs, _) = name.Split(firstBracketIndex, firstBracketIndex + 1, lastBracketIndex); - - var thisTypeArgCount = GenericsHelper.GetGenericTypeParameterCount(name); - if (thisTypeArgCount == 0) - { - // not generic or non-constructed generic; container is constructed - TypeArguments = null; - containerTypeArguments = $"[{typeArgs}]"; - UnboundGenericTypeName = null; - return; - } - - // constructed generic - // "T3,[T4, Assembly1, Version=...]", ["T5", "T6"] - var (containerTypeArgs, thisTypeArgs) = ParseTypeArgumentStrings(typeArgs, thisTypeArgCount); - - TypeArguments = thisTypeArgs; - - containerTypeArguments = string.IsNullOrWhiteSpace(containerTypeArgs) - ? "" // containing type is not constructed generics - : $"[{containerTypeArgs}]"; // "T3,[T4, Assembly1, Version=...],,]" - - UnboundGenericTypeName = $"{name}{AssemblySuffix}"; - } - - private string ExtractContainer(ref string name, string containerTypeArguments) - { - var lastPlusIndex = name.LastIndexOf('+'); - IsContainerNamespace = lastPlusIndex < 0; - if (IsContainerNamespace) - { - return ExtractContainerNamespace(ref name); - } - - return ExtractContainerType(ref name, containerTypeArguments, lastPlusIndex); - } - - private static string ExtractContainerNamespace(ref string name) - { - var lastDotIndex = name.LastIndexOf('.'); - if (lastDotIndex >= 0) - { - string containerName; - (containerName, _, name) = name.Split(lastDotIndex, lastDotIndex + 1); - return containerName; - } - - return ""; // global namespace name - } - - private string ExtractContainerType(ref string name, string containerTypeArguments, int lastPlusIndex) - { - string containerName; - (containerName, _, name) = name.Split(lastPlusIndex, lastPlusIndex + 1); - return $"{containerName}{containerTypeArguments}{AssemblySuffix}"; - } - - private void ExtractAssemblyName(ref string name, out int lastBracketIndex) - { - lastBracketIndex = name.LastIndexOf(']'); - var assemblyCommaIndex = name.IndexOf(',', lastBracketIndex < 0 ? 0 : lastBracketIndex); - if (assemblyCommaIndex >= 0) - { - // "Assembly2, Version=..." - (name, _, AssemblyName) = name.Split(assemblyCommaIndex, assemblyCommaIndex + 2); - } - } - - private static (string, IEnumerable) ParseTypeArgumentStrings(string typeArgs, int thisTypeArgCount) - { - var thisTypeArgs = new Stack(thisTypeArgCount); - while (typeArgs.Length > 0 && thisTypeArgCount > 0) - { - int startCurrentType; - if (typeArgs[^1] != ']') - { - startCurrentType = typeArgs.LastIndexOf(',') + 1; - thisTypeArgs.Push(typeArgs.Substring(startCurrentType)); - } - else - { - var bracketCount = 1; - for (startCurrentType = typeArgs.Length - 2; startCurrentType >= 0 && bracketCount > 0; startCurrentType--) - { - if (typeArgs[startCurrentType] == ']') - { - bracketCount++; - } - else if (typeArgs[startCurrentType] == '[') - { - bracketCount--; - } - } - startCurrentType++; - thisTypeArgs.Push(typeArgs[(startCurrentType + 1)..^1]); - } - - typeArgs = startCurrentType != 0 - ? typeArgs.Substring(0, startCurrentType - 1) - : ""; - - thisTypeArgCount--; - } - return (typeArgs, thisTypeArgs.ToList()); - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/NoMetadataHandleType.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/NoMetadataHandleType.cs deleted file mode 100644 index 41a28e32bf1..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/NoMetadataHandleType.cs +++ /dev/null @@ -1,161 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; - -namespace Semmle.Extraction.CIL.Entities -{ - internal sealed partial class NoMetadataHandleType : Type - { - private readonly string originalName; - private readonly string name; - private readonly string? assemblyName; - private readonly string containerName; - private readonly bool isContainerNamespace; - - private readonly Lazy? typeParams; - - // Either null or notEmpty - private readonly Type[]? thisTypeArguments; - private readonly Type unboundGenericType; - private readonly Type? containingType; - private readonly Namespace? containingNamespace; - - private readonly NamedTypeIdWriter idWriter; - - public NoMetadataHandleType(Context cx, string originalName) : base(cx) - { - this.originalName = originalName; - this.idWriter = new NamedTypeIdWriter(this); - - var nameParser = new FullyQualifiedNameParser(originalName); - - name = nameParser.ShortName; - assemblyName = nameParser.AssemblyName; - isContainerNamespace = nameParser.IsContainerNamespace; - containerName = nameParser.ContainerName; - - unboundGenericType = nameParser.UnboundGenericTypeName is null - ? this - : new NoMetadataHandleType(Context, nameParser.UnboundGenericTypeName); - - if (nameParser.TypeArguments is not null) - { - thisTypeArguments = nameParser.TypeArguments.Select(t => new NoMetadataHandleType(Context, t)).ToArray(); - } - else - { - typeParams = new Lazy(GenericsHelper.MakeTypeParameters(this, ThisTypeParameterCount)); - } - - containingType = isContainerNamespace - ? null - : new NoMetadataHandleType(Context, containerName); - - containingNamespace = isContainerNamespace - ? containerName == Context.GlobalNamespace.Name - ? Context.GlobalNamespace - : containerName == Context.SystemNamespace.Name - ? Context.SystemNamespace - : new Namespace(Context, containerName) - : null; - - Populate(); - } - - private void Populate() - { - if (ContainingNamespace is not null) - { - Context.Populate(ContainingNamespace); - } - - Context.Populate(this); - } - - public override bool Equals(object? obj) - { - return obj is NoMetadataHandleType t && originalName.Equals(t.originalName, StringComparison.Ordinal); - } - - public override int GetHashCode() - { - return originalName.GetHashCode(StringComparison.Ordinal); - } - - public override IEnumerable Contents - { - get - { - foreach (var tp in typeParams?.Value ?? Array.Empty()) - yield return tp; - - foreach (var c in base.Contents) - yield return c; - - var i = 0; - foreach (var type in ThisTypeArguments) - { - yield return type; - yield return Tuples.cil_type_argument(this, i++, type); - } - } - } - - public override CilTypeKind Kind => CilTypeKind.ValueOrRefType; - - public override string Name => GenericsHelper.GetNonGenericName(name); - - public override Namespace? ContainingNamespace => containingNamespace; - - public override Type? ContainingType => containingType; - - public override Type SourceDeclaration => unboundGenericType; - - public override Type Construct(IEnumerable typeArguments) - { - if (TotalTypeParametersCount != typeArguments.Count()) - throw new InternalError("Mismatched type arguments"); - - return Context.Populate(new ConstructedType(Context, this, typeArguments)); - } - - public override void WriteAssemblyPrefix(TextWriter trapFile) - { - if (!string.IsNullOrWhiteSpace(assemblyName)) - { - var an = new AssemblyName(assemblyName); - trapFile.Write(an.Name); - trapFile.Write('_'); - trapFile.Write((an.Version ?? new Version(0, 0, 0, 0)).ToString()); - trapFile.Write(Type.AssemblyTypeNameSeparator); - } - else - { - Context.WriteAssemblyPrefix(trapFile); - } - } - - public override void WriteId(EscapingTextWriter trapFile, bool inContext) - { - idWriter.WriteId(trapFile, inContext); - } - - public override int ThisTypeParameterCount => unboundGenericType == this - ? GenericsHelper.GetGenericTypeParameterCount(name) - : thisTypeArguments!.Length; - - public override IEnumerable TypeParameters => unboundGenericType == this - ? GenericsHelper.GetAllTypeParameters(containingType, typeParams!.Value) - : GenericArguments; - - public override IEnumerable ThisTypeArguments => unboundGenericType == this - ? base.ThisTypeArguments - : thisTypeArguments!; - - public override IEnumerable ThisGenericArguments => unboundGenericType == this - ? typeParams!.Value - : thisTypeArguments!; - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/Parameter.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/Parameter.cs deleted file mode 100644 index cc26c2f4023..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/Parameter.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System.Collections.Generic; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// A parameter entity. - /// - internal sealed class Parameter : LabelledEntity - { - private readonly IParameterizable parameterizable; - private readonly int index; - private readonly Type type; - - public Parameter(Context cx, IParameterizable p, int i, Type t) : base(cx) - { - parameterizable = p; - index = i; - type = t; - } - - public override void WriteId(EscapingTextWriter trapFile) - { - trapFile.WriteSubId(parameterizable); - trapFile.Write('_'); - trapFile.Write(index); - trapFile.Write(";cil-parameter"); - } - - public override bool Equals(object? obj) - { - return obj is Parameter param && parameterizable.Equals(param.parameterizable) && index == param.index; - } - - public override int GetHashCode() - { - return 23 * parameterizable.GetHashCode() + index; - } - - public override IEnumerable Contents - { - get - { - yield return Tuples.cil_parameter(this, parameterizable, index, type); - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/PdbSourceFile.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/PdbSourceFile.cs deleted file mode 100644 index 29eb7d118ff..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/PdbSourceFile.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Collections.Generic; - -namespace Semmle.Extraction.CIL.Entities -{ - internal class PdbSourceFile : File - { - private readonly PDB.ISourceFile file; - - public PdbSourceFile(Context cx, PDB.ISourceFile file) : base(cx, file.Path) - { - this.file = file; - } - - public override IEnumerable Contents - { - get - { - foreach (var c in base.Contents) - yield return c; - - var text = file.Contents; - - if (text is null) - Context.Extractor.Logger.Log(Util.Logging.Severity.Warning, string.Format("PDB source file {0} could not be found", OriginalPath)); - else - Context.TrapWriter.Archive(TransformedPath, text); - - yield return Tuples.file_extraction_mode(this, Context.Extractor.Mode | ExtractorMode.Pdb); - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/PointerType.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/PointerType.cs deleted file mode 100644 index 9ce05b4a054..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/PointerType.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; - -namespace Semmle.Extraction.CIL.Entities -{ - internal sealed class PointerType : Type - { - private readonly Type pointee; - - public PointerType(Context cx, Type pointee) : base(cx) - { - this.pointee = pointee; - - if (pointee is ModifiedType mt) - { - cx.Extractor.Logger.Log( - Util.Logging.Severity.Info, - $"Pointer to modified type {pointee.GetQualifiedName()} is changed to {mt.Unmodified.GetQualifiedName()}"); - this.pointee = mt.Unmodified; - } - } - - public override bool Equals(object? obj) - { - return obj is PointerType pt && pointee.Equals(pt.pointee); - } - - public override int GetHashCode() => HashCode.Combine(pointee, nameof(PointerType)); - - public override void WriteId(EscapingTextWriter trapFile, bool inContext) - { - pointee.WriteId(trapFile, inContext); - trapFile.Write('*'); - } - - public override string Name => pointee.Name + "*"; - - public override Namespace? ContainingNamespace => pointee.ContainingNamespace; - - public override Type? ContainingType => pointee.ContainingType; - - public override TypeContainer Parent => pointee.Parent; - - public override int ThisTypeParameterCount => 0; - - public override CilTypeKind Kind => CilTypeKind.Pointer; - - public override void WriteAssemblyPrefix(TextWriter trapFile) => pointee.WriteAssemblyPrefix(trapFile); - - public override IEnumerable TypeParameters => throw new NotImplementedException(); - - public override Type Construct(IEnumerable typeArguments) => throw new NotImplementedException(); - - public override IEnumerable Contents - { - get - { - foreach (var c in base.Contents) yield return c; - yield return Tuples.cil_pointer_type(this, pointee); - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/PrimitiveType.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/PrimitiveType.cs deleted file mode 100644 index 4d95e4ca9e2..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/PrimitiveType.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Reflection.Metadata; - -namespace Semmle.Extraction.CIL.Entities -{ - internal sealed class PrimitiveType : Type - { - private readonly PrimitiveTypeCode typeCode; - public PrimitiveType(Context cx, PrimitiveTypeCode tc) : base(cx) - { - typeCode = tc; - } - - public override bool Equals(object? obj) - { - return obj is PrimitiveType pt && typeCode == pt.typeCode; - } - - public override int GetHashCode() => typeCode.GetHashCode(); - - public override void WriteId(EscapingTextWriter trapFile, bool inContext) - { - Type.WritePrimitiveTypeId(trapFile, Name); - } - - public override string Name => typeCode.Id(); - - public override Namespace ContainingNamespace => Context.SystemNamespace; - - public override Type? ContainingType => null; - - public override int ThisTypeParameterCount => 0; - - public override CilTypeKind Kind => CilTypeKind.ValueOrRefType; - - public override void WriteAssemblyPrefix(TextWriter trapFile) { } - - public override IEnumerable TypeParameters => throw new NotImplementedException(); - - public override Type Construct(IEnumerable typeArguments) => throw new NotImplementedException(); - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/Property.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/Property.cs deleted file mode 100644 index 3e7db7b36d6..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/Property.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System.Collections.Generic; -using System.Reflection.Metadata; -using System.Reflection.Metadata.Ecma335; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// A property. - /// - internal sealed class Property : LabelledEntity, ICustomModifierReceiver - { - private readonly Handle handle; - private readonly Type type; - private readonly PropertyDefinition pd; - private readonly IGenericContext gc; - - public Property(IGenericContext gc, Type type, PropertyDefinitionHandle handle) : base(gc.Context) - { - this.gc = gc; - this.handle = handle; - pd = Context.MdReader.GetPropertyDefinition(handle); - this.type = type; - } - - public override void WriteId(EscapingTextWriter trapFile) - { - trapFile.WriteSubId(type); - trapFile.Write('.'); - trapFile.Write(Context.GetString(pd.Name)); - trapFile.Write("("); - var index = 0; - var signature = pd.DecodeSignature(new SignatureDecoder(), gc); - foreach (var param in signature.ParameterTypes) - { - trapFile.WriteSeparator(",", ref index); - param.WriteId(trapFile, gc); - } - trapFile.Write(")"); - trapFile.Write(";cil-property"); - } - - public override bool Equals(object? obj) - { - return obj is Property property && Equals(handle, property.handle); - } - - public override int GetHashCode() => handle.GetHashCode(); - - public override IEnumerable Contents - { - get - { - yield return Tuples.metadata_handle(this, Context.Assembly, MetadataTokens.GetToken(handle)); - var sig = pd.DecodeSignature(Context.TypeSignatureDecoder, type); - - var name = Context.ShortName(pd.Name); - - var t = sig.ReturnType; - if (t is ModifiedType mt) - { - t = mt.Unmodified; - yield return Tuples.cil_custom_modifiers(this, mt.Modifier, mt.IsRequired); - } - if (t is ByRefType brt) - { - t = brt.ElementType; - yield return Tuples.cil_type_annotation(this, TypeAnnotation.Ref); - } - yield return Tuples.cil_property(this, type, name, t); - - var accessors = pd.GetAccessors(); - if (!accessors.Getter.IsNil) - { - var getter = (Method)Context.CreateGeneric(type, accessors.Getter); - yield return getter; - yield return Tuples.cil_getter(this, getter); - } - - if (!accessors.Setter.IsNil) - { - var setter = (Method)Context.CreateGeneric(type, accessors.Setter); - yield return setter; - yield return Tuples.cil_setter(this, setter); - } - - foreach (var c in Attribute.Populate(Context, this, pd.GetCustomAttributes())) - yield return c; - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/SignatureDecoder.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/SignatureDecoder.cs deleted file mode 100644 index 5a767b7575c..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/SignatureDecoder.cs +++ /dev/null @@ -1,289 +0,0 @@ -using System.Collections.Immutable; -using System.Reflection.Metadata; - -namespace Semmle.Extraction.CIL.Entities -{ - public class SignatureDecoder : ISignatureTypeProvider - { - private struct Array : ITypeSignature - { - private readonly ITypeSignature elementType; - private readonly ArrayShape shape; - - public Array(ITypeSignature elementType, ArrayShape shape) : this() - { - this.elementType = elementType; - this.shape = shape; - } - - public void WriteId(EscapingTextWriter trapFile, IGenericContext gc) - { - elementType.WriteId(trapFile, gc); - trapFile.Write('['); - for (var i = 1; i < shape.Rank; ++i) - { - trapFile.Write(','); - } - trapFile.Write(']'); - } - } - - private struct ByRef : ITypeSignature - { - private readonly ITypeSignature elementType; - - public ByRef(ITypeSignature elementType) - { - this.elementType = elementType; - } - - public void WriteId(EscapingTextWriter trapFile, IGenericContext gc) - { - elementType.WriteId(trapFile, gc); - trapFile.Write('&'); - } - } - - private struct FnPtr : ITypeSignature - { - private readonly MethodSignature signature; - - public FnPtr(MethodSignature signature) - { - this.signature = signature; - } - - public void WriteId(EscapingTextWriter trapFile, IGenericContext gc) - { - FunctionPointerType.WriteName( - trapFile.Write, - t => t.WriteId(trapFile, gc), - signature - ); - } - } - - ITypeSignature IConstructedTypeProvider.GetArrayType(ITypeSignature elementType, ArrayShape shape) => - new Array(elementType, shape); - - ITypeSignature IConstructedTypeProvider.GetByReferenceType(ITypeSignature elementType) => - new ByRef(elementType); - - ITypeSignature ISignatureTypeProvider.GetFunctionPointerType(MethodSignature signature) => - new FnPtr(signature); - - private class Instantiation : ITypeSignature - { - private readonly ITypeSignature genericType; - private readonly ImmutableArray typeArguments; - - public Instantiation(ITypeSignature genericType, ImmutableArray typeArguments) - { - this.genericType = genericType; - this.typeArguments = typeArguments; - } - - public void WriteId(EscapingTextWriter trapFile, IGenericContext gc) - { - genericType.WriteId(trapFile, gc); - trapFile.Write('<'); - var index = 0; - foreach (var arg in typeArguments) - { - trapFile.WriteSeparator(",", ref index); - arg.WriteId(trapFile, gc); - } - trapFile.Write('>'); - } - } - - ITypeSignature IConstructedTypeProvider.GetGenericInstantiation(ITypeSignature genericType, ImmutableArray typeArguments) => - new Instantiation(genericType, typeArguments); - - private class GenericMethodParameter : ITypeSignature - { - private readonly object innerGc; - private readonly int index; - - public GenericMethodParameter(object innerGc, int index) - { - this.innerGc = innerGc; - this.index = index; - } - - public void WriteId(EscapingTextWriter trapFile, IGenericContext outerGc) - { - if (!ReferenceEquals(innerGc, outerGc) && innerGc is Method method) - { - trapFile.WriteSubId(method); - } - trapFile.Write("M!"); - trapFile.Write(index); - } - } - - private class GenericTypeParameter : ITypeSignature - { - private readonly int index; - - public GenericTypeParameter(int index) - { - this.index = index; - } - - public void WriteId(EscapingTextWriter trapFile, IGenericContext gc) - { - trapFile.Write("T!"); - trapFile.Write(index); - } - } - - ITypeSignature ISignatureTypeProvider.GetGenericMethodParameter(object genericContext, int index) => - new GenericMethodParameter(genericContext, index); - - ITypeSignature ISignatureTypeProvider.GetGenericTypeParameter(object genericContext, int index) => - new GenericTypeParameter(index); - - private class Modified : ITypeSignature - { - private readonly ITypeSignature unmodifiedType; - private readonly ITypeSignature modifier; - private readonly bool isRequired; - - public Modified(ITypeSignature unmodifiedType, ITypeSignature modifier, bool isRequired) - { - this.unmodifiedType = unmodifiedType; - this.modifier = modifier; - this.isRequired = isRequired; - } - - public void WriteId(EscapingTextWriter trapFile, IGenericContext gc) - { - unmodifiedType.WriteId(trapFile, gc); - trapFile.Write(isRequired ? " modreq(" : " modopt("); - modifier.WriteId(trapFile, gc); - trapFile.Write(")"); - } - } - - ITypeSignature ISignatureTypeProvider.GetModifiedType(ITypeSignature modifier, ITypeSignature unmodifiedType, bool isRequired) - { - return new Modified(unmodifiedType, modifier, isRequired); - } - - ITypeSignature ISignatureTypeProvider.GetPinnedType(ITypeSignature elementType) - { - return elementType; - } - - private class PointerType : ITypeSignature - { - private readonly ITypeSignature elementType; - - public PointerType(ITypeSignature elementType) - { - this.elementType = elementType; - } - - public void WriteId(EscapingTextWriter trapFile, IGenericContext gc) - { - elementType.WriteId(trapFile, gc); - trapFile.Write('*'); - } - } - - ITypeSignature IConstructedTypeProvider.GetPointerType(ITypeSignature elementType) - { - return new PointerType(elementType); - } - - private class Primitive : ITypeSignature - { - private readonly PrimitiveTypeCode typeCode; - - public Primitive(PrimitiveTypeCode typeCode) - { - this.typeCode = typeCode; - } - - public void WriteId(EscapingTextWriter trapFile, IGenericContext gc) - { - trapFile.Write(typeCode.Id()); - } - } - - ITypeSignature ISimpleTypeProvider.GetPrimitiveType(PrimitiveTypeCode typeCode) - { - return new Primitive(typeCode); - } - - private class SzArrayType : ITypeSignature - { - private readonly ITypeSignature elementType; - - public SzArrayType(ITypeSignature elementType) - { - this.elementType = elementType; - } - - public void WriteId(EscapingTextWriter trapFile, IGenericContext gc) - { - elementType.WriteId(trapFile, gc); - trapFile.Write("[]"); - } - } - - ITypeSignature ISZArrayTypeProvider.GetSZArrayType(ITypeSignature elementType) - { - return new SzArrayType(elementType); - } - - private class TypeDefinition : ITypeSignature - { - private readonly TypeDefinitionHandle handle; - - public TypeDefinition(TypeDefinitionHandle handle) - { - this.handle = handle; - } - - public void WriteId(EscapingTextWriter trapFile, IGenericContext gc) - { - var type = (Type)gc.Context.Create(handle); - type.WriteId(trapFile); - } - } - - ITypeSignature ISimpleTypeProvider.GetTypeFromDefinition(MetadataReader reader, TypeDefinitionHandle handle, byte rawTypeKind) - { - return new TypeDefinition(handle); - } - - private class TypeReference : ITypeSignature - { - private readonly TypeReferenceHandle handle; - - public TypeReference(TypeReferenceHandle handle) - { - this.handle = handle; - } - - public void WriteId(EscapingTextWriter trapFile, IGenericContext gc) - { - var type = (Type)gc.Context.Create(handle); - type.WriteId(trapFile); - } - } - - ITypeSignature ISimpleTypeProvider.GetTypeFromReference(MetadataReader reader, TypeReferenceHandle handle, byte rawTypeKind) - { - return new TypeReference(handle); - } - - ITypeSignature ISignatureTypeProvider.GetTypeFromSpecification(MetadataReader reader, object genericContext, TypeSpecificationHandle handle, byte rawTypeKind) - { - var ts = reader.GetTypeSpecification(handle); - return ts.DecodeSignature(this, genericContext); - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/SourceLocation.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/SourceLocation.cs deleted file mode 100644 index 9b7b4d583a1..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/SourceLocation.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System.Collections.Generic; -using Semmle.Extraction.PDB; - -namespace Semmle.Extraction.CIL.Entities -{ - internal sealed class PdbSourceLocation : LabelledEntity, ILocation - { - private readonly Location location; - private readonly PdbSourceFile file; - - public PdbSourceLocation(Context cx, PDB.Location location) : base(cx) - { - this.location = location; - file = cx.CreateSourceFile(location.File); - } - - public override void WriteId(EscapingTextWriter trapFile) - { - file.WriteId(trapFile); - trapFile.Write(','); - trapFile.Write(location.StartLine); - trapFile.Write(','); - trapFile.Write(location.StartColumn); - trapFile.Write(','); - trapFile.Write(location.EndLine); - trapFile.Write(','); - trapFile.Write(location.EndColumn); - trapFile.Write(";sourcelocation"); - } - - public override bool Equals(object? obj) - { - return obj is PdbSourceLocation l && location.Equals(l.location); - } - - public override int GetHashCode() => location.GetHashCode(); - - public override IEnumerable Contents - { - get - { - yield return file; - yield return Tuples.locations_default(this, file, location.StartLine, location.StartColumn, location.EndLine, location.EndColumn); - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/Type.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/Type.cs deleted file mode 100644 index 335a6c89c30..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/Type.cs +++ /dev/null @@ -1,209 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Linq; -using System.Reflection.Metadata; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// A type. - /// - internal abstract class Type : TypeContainer, IMember - { - internal const string AssemblyTypeNameSeparator = "::"; - internal const string PrimitiveTypePrefix = "builtin" + AssemblyTypeNameSeparator + "System."; - - protected Type(Context cx) : base(cx) { } - - /// - /// Find the method in this type matching the name and signature. - /// - /// The handle to the name. - /// - /// The handle to the signature. Note that comparing handles is a valid - /// shortcut to comparing the signature bytes since handles are unique. - /// - /// The method, or 'null' if not found or not supported. - internal virtual Method? LookupMethod(StringHandle methodName, BlobHandle signature) - { - return null; - } - - /// - /// Writes the assembly identifier of this type. - /// - public abstract void WriteAssemblyPrefix(TextWriter trapFile); - - /// - /// Writes the ID part to be used in a method ID. - /// - /// - /// Whether we should output the context prefix of type parameters. - /// (This is to avoid infinite recursion generating a method ID that returns a - /// type parameter.) - /// - public abstract void WriteId(EscapingTextWriter trapFile, bool inContext); - - public sealed override void WriteId(EscapingTextWriter trapFile) - { - WriteId(trapFile, false); - trapFile.Write(";cil-type"); - } - - /// - /// Returns the friendly qualified name of types, such as - /// ``"System.Collection.Generic.List`1"`` or - /// ``"System.Collection.Generic.List"``. - /// - /// Note that method/type generic type parameters never show up in the returned name. - /// - public string GetQualifiedName() - { - using var writer = new EscapingTextWriter(); - WriteId(writer, false); - var name = writer.ToString(); - return name.Substring(name.IndexOf(AssemblyTypeNameSeparator) + 2). - Replace(";namespace", ""). - Replace(";cil-type", ""); - } - - public abstract CilTypeKind Kind { get; } - - public override IEnumerable Contents - { - get - { - yield return Tuples.cil_type(this, Name, Kind, Parent, SourceDeclaration); - } - } - - public abstract string Name { get; } - - public abstract Namespace? ContainingNamespace { get; } - - public abstract Type? ContainingType { get; } - - public virtual TypeContainer Parent => (TypeContainer?)ContainingType ?? ContainingNamespace!; - - public abstract Type Construct(IEnumerable typeArguments); - - /// - /// Returns the type arguments of constructed types. For non-constructed types it returns an - /// empty collection. - /// - public virtual IEnumerable ThisTypeArguments - { - get - { - yield break; - } - } - - /// - /// The number of type parameters for non-constructed generic types, the number of type arguments - /// for constructed types, or 0. - /// - public abstract int ThisTypeParameterCount { get; } - - /// - /// The total number of type parameters/type arguments (including parent types). - /// This is used for internal consistency checking only. - /// - public int TotalTypeParametersCount => - ThisTypeParameterCount + (ContainingType?.TotalTypeParametersCount ?? 0); - - /// - /// Returns all bound/unbound generic arguments of a constructed/unbound generic type. - /// - public virtual IEnumerable ThisGenericArguments - { - get - { - yield break; - } - } - - public virtual IEnumerable GenericArguments - { - get - { - if (ContainingType is not null) - { - foreach (var t in ContainingType.GenericArguments) - yield return t; - } - - foreach (var t in ThisGenericArguments) - yield return t; - } - } - - public virtual Type SourceDeclaration => this; - - public static void WritePrimitiveTypeId(TextWriter trapFile, string name) - { - trapFile.Write(PrimitiveTypePrefix); - trapFile.Write(name); - } - - private static readonly Dictionary primitiveTypeCodeMapping = new Dictionary - { - {"Boolean", PrimitiveTypeCode.Boolean}, - {"Object", PrimitiveTypeCode.Object}, - {"Byte", PrimitiveTypeCode.Byte}, - {"SByte", PrimitiveTypeCode.SByte}, - {"Int16", PrimitiveTypeCode.Int16}, - {"UInt16", PrimitiveTypeCode.UInt16}, - {"Int32", PrimitiveTypeCode.Int32}, - {"UInt32", PrimitiveTypeCode.UInt32}, - {"Int64", PrimitiveTypeCode.Int64}, - {"UInt64", PrimitiveTypeCode.UInt64}, - {"Single", PrimitiveTypeCode.Single}, - {"Double", PrimitiveTypeCode.Double}, - {"String", PrimitiveTypeCode.String}, - {"Void", PrimitiveTypeCode.Void}, - {"IntPtr", PrimitiveTypeCode.IntPtr}, - {"UIntPtr", PrimitiveTypeCode.UIntPtr}, - {"Char", PrimitiveTypeCode.Char}, - {"TypedReference", PrimitiveTypeCode.TypedReference} - }; - - /// - /// Gets the primitive type corresponding to this type, if possible. - /// - /// The resulting primitive type, or null. - /// True if this type is a primitive type. - public bool TryGetPrimitiveType([NotNullWhen(true)] out PrimitiveType? t) - { - if (TryGetPrimitiveTypeCode(out var code)) - { - t = Context.Create(code); - return true; - } - - t = null; - return false; - } - - private bool TryGetPrimitiveTypeCode(out PrimitiveTypeCode code) - { - if (ContainingType is null && - ContainingNamespace?.Name == Context.SystemNamespace.Name && - primitiveTypeCodeMapping.TryGetValue(Name, out code)) - { - return true; - } - - code = default; - return false; - } - - protected internal bool IsPrimitiveType => TryGetPrimitiveTypeCode(out _); - - public sealed override IEnumerable MethodParameters => Enumerable.Empty(); - - public static Type DecodeType(IGenericContext gc, TypeSpecificationHandle handle) => - gc.Context.MdReader.GetTypeSpecification(handle).DecodeSignature(gc.Context.TypeSignatureDecoder, gc); - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/TypeAnnotation.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/TypeAnnotation.cs deleted file mode 100644 index fe005326b95..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/TypeAnnotation.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; - -namespace Semmle.Extraction.CIL.Entities -{ - [Flags] - public enum TypeAnnotation - { - None = 0, - Ref = 32 - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/TypeContainer.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/TypeContainer.cs deleted file mode 100644 index 463f2c963a3..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/TypeContainer.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Collections.Generic; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// Base class for all type containers (namespaces, types, methods). - /// - internal abstract class TypeContainer : LabelledEntity, IGenericContext - { - protected TypeContainer(Context cx) : base(cx) - { - } - - public abstract IEnumerable MethodParameters { get; } - public abstract IEnumerable TypeParameters { get; } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/TypeDefinitionType.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/TypeDefinitionType.cs deleted file mode 100644 index f9cec6a4133..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/TypeDefinitionType.cs +++ /dev/null @@ -1,263 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Reflection.Metadata; -using System.Reflection.Metadata.Ecma335; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// A type defined in the current assembly. - /// - internal sealed class TypeDefinitionType : Type - { - private readonly TypeDefinitionHandle handle; - private readonly TypeDefinition td; - private readonly Lazy> typeParams; - private readonly Type? declType; - private readonly NamedTypeIdWriter idWriter; - - public TypeDefinitionType(Context cx, TypeDefinitionHandle handle) : base(cx) - { - idWriter = new NamedTypeIdWriter(this); - td = cx.MdReader.GetTypeDefinition(handle); - this.handle = handle; - - declType = - td.GetDeclaringType().IsNil ? null : - (Type)cx.Create(td.GetDeclaringType()); - - // Lazy because should happen during population. - typeParams = new Lazy>(MakeTypeParameters); - } - - public override bool Equals(object? obj) - { - return obj is TypeDefinitionType t && handle.Equals(t.handle); - } - - public override int GetHashCode() => handle.GetHashCode(); - - public override void WriteId(EscapingTextWriter trapFile, bool inContext) - { - idWriter.WriteId(trapFile, inContext); - } - - public override string Name => GenericsHelper.GetNonGenericName(td.Name, Context.MdReader); - - public override Namespace ContainingNamespace => Context.Create(td.NamespaceDefinition); - - public override Type? ContainingType => declType; - - public override CilTypeKind Kind => CilTypeKind.ValueOrRefType; - - public override Type Construct(IEnumerable typeArguments) - { - if (TotalTypeParametersCount != typeArguments.Count()) - throw new InternalError("Mismatched type arguments"); - - return Context.Populate(new ConstructedType(Context, this, typeArguments)); - } - - public override void WriteAssemblyPrefix(TextWriter trapFile) - { - var ct = ContainingType; - if (ct is null) - Context.WriteAssemblyPrefix(trapFile); - else if (IsPrimitiveType) - trapFile.Write(Type.PrimitiveTypePrefix); - else - ct.WriteAssemblyPrefix(trapFile); - } - - private IEnumerable MakeTypeParameters() - { - if (ThisTypeParameterCount == 0) - return Enumerable.Empty(); - - var newTypeParams = new TypeTypeParameter[ThisTypeParameterCount]; - var genericParams = td.GetGenericParameters(); - var toSkip = genericParams.Count - newTypeParams.Length; - - // Two-phase population because type parameters can be mutually dependent - for (var i = 0; i < newTypeParams.Length; ++i) - newTypeParams[i] = Context.Populate(new TypeTypeParameter(this, i)); - for (var i = 0; i < newTypeParams.Length; ++i) - newTypeParams[i].PopulateHandle(genericParams[i + toSkip]); - return newTypeParams; - } - - public override int ThisTypeParameterCount - { - get - { - var containingType = td.GetDeclaringType(); - var parentTypeParameters = containingType.IsNil - ? 0 - : Context.MdReader.GetTypeDefinition(containingType).GetGenericParameters().Count; - - return td.GetGenericParameters().Count - parentTypeParameters; - } - } - - public override IEnumerable TypeParameters => GenericsHelper.GetAllTypeParameters(declType, typeParams!.Value); - - public override IEnumerable ThisGenericArguments => typeParams.Value; - - public override IEnumerable Contents - { - get - { - yield return Tuples.metadata_handle(this, Context.Assembly, MetadataTokens.GetToken(handle)); - - foreach (var c in base.Contents) yield return c; - - MakeTypeParameters(); - - foreach (var f in td.GetFields()) - { - // Populate field if needed - yield return Context.CreateGeneric(this, f); - } - - foreach (var prop in td.GetProperties()) - { - yield return new Property(this, this, prop); - } - - foreach (var @event in td.GetEvents()) - { - yield return new Event(Context, this, @event); - } - - foreach (var a in Attribute.Populate(Context, this, td.GetCustomAttributes())) - yield return a; - - foreach (var impl in td.GetMethodImplementations().Select(i => Context.MdReader.GetMethodImplementation(i))) - { - var m = (Method)Context.CreateGeneric(this, impl.MethodBody); - var decl = (Method)Context.CreateGeneric(this, impl.MethodDeclaration); - - yield return m; - yield return decl; - yield return Tuples.cil_implements(m, decl); - } - - if (td.Attributes.HasFlag(TypeAttributes.Abstract)) - yield return Tuples.cil_abstract(this); - - if (td.Attributes.HasFlag(TypeAttributes.Interface)) - yield return Tuples.cil_interface(this); - else - yield return Tuples.cil_class(this); - - if (td.Attributes.HasFlag(TypeAttributes.Public)) - yield return Tuples.cil_public(this); - - if (td.Attributes.HasFlag(TypeAttributes.Sealed)) - yield return Tuples.cil_sealed(this); - - if (td.Attributes.HasFlag(TypeAttributes.HasSecurity)) - yield return Tuples.cil_security(this); - - // Base types - - if (!td.BaseType.IsNil) - { - var @base = (Type)Context.CreateGeneric(this, td.BaseType); - yield return @base; - yield return Tuples.cil_base_class(this, @base); - - if (IsSystemEnum(td.BaseType) && - GetUnderlyingEnumType() is var underlying && - underlying.HasValue) - { - var underlyingType = Context.Create(underlying.Value); - yield return underlyingType; - yield return Tuples.cil_enum_underlying_type(this, underlyingType); - } - } - - foreach (var @interface in td.GetInterfaceImplementations().Select(i => Context.MdReader.GetInterfaceImplementation(i))) - { - var t = (Type)Context.CreateGeneric(this, @interface.Interface); - yield return t; - yield return Tuples.cil_base_interface(this, t); - } - - // Only type definitions have locations. - yield return Tuples.cil_type_location(this, Context.Assembly); - } - } - - private bool IsSystemEnum(EntityHandle baseType) - { - return baseType.Kind switch - { - HandleKind.TypeReference => IsSystemEnum((TypeReferenceHandle)baseType), - HandleKind.TypeDefinition => IsSystemEnum((TypeDefinitionHandle)baseType), - _ => false, - }; - } - - private bool IsSystemEnum(TypeReferenceHandle baseType) - { - var baseTypeReference = Context.MdReader.GetTypeReference(baseType); - - return IsSystemEnum(baseTypeReference.Name, baseTypeReference.Namespace); - } - - private bool IsSystemEnum(TypeDefinitionHandle baseType) - { - var baseTypeDefinition = Context.MdReader.GetTypeDefinition(baseType); - - return IsSystemEnum(baseTypeDefinition.Name, baseTypeDefinition.Namespace); - } - - private bool IsSystemEnum(StringHandle typeName, StringHandle namespaceName) - { - return Context.MdReader.StringComparer.Equals(typeName, "Enum") && - !namespaceName.IsNil && - Context.MdReader.StringComparer.Equals(namespaceName, "System"); - } - - internal PrimitiveTypeCode? GetUnderlyingEnumType() - { - foreach (var handle in td.GetFields()) - { - var field = Context.MdReader.GetFieldDefinition(handle); - if (field.Attributes.HasFlag(FieldAttributes.Static)) - { - continue; - } - - var blob = Context.MdReader.GetBlobReader(field.Signature); - if (blob.ReadSignatureHeader().Kind != SignatureKind.Field) - { - break; - } - - return (PrimitiveTypeCode)blob.ReadByte(); - } - - return null; - } - - internal override Method LookupMethod(StringHandle name, BlobHandle signature) - { - foreach (var h in td.GetMethods()) - { - var md = Context.MdReader.GetMethodDefinition(h); - - if (md.Name == name && md.Signature == signature) - { - return (Method)Context.Create(h); - } - } - - throw new InternalError("Couldn't locate method in type"); - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/TypeParameter.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/TypeParameter.cs deleted file mode 100644 index 5db8b7fb6a3..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/TypeParameter.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Reflection.Metadata; - -namespace Semmle.Extraction.CIL.Entities -{ - internal abstract class TypeParameter : Type - { - protected readonly IGenericContext gc; - - protected TypeParameter(IGenericContext gc) : base(gc.Context) - { - this.gc = gc; - } - - public override Namespace? ContainingNamespace => null; - - public override Type? ContainingType => null; - - public override int ThisTypeParameterCount => 0; - - public override CilTypeKind Kind => CilTypeKind.TypeParameter; - - public override void WriteAssemblyPrefix(TextWriter trapFile) => throw new NotImplementedException(); - - public override Type Construct(IEnumerable typeArguments) => throw new InternalError("Attempt to construct a type parameter"); - - public IEnumerable PopulateHandle(GenericParameterHandle parameterHandle) - { - if (!parameterHandle.IsNil) - { - var tp = Context.MdReader.GetGenericParameter(parameterHandle); - - if (tp.Attributes.HasFlag(GenericParameterAttributes.Contravariant)) - yield return Tuples.cil_typeparam_contravariant(this); - if (tp.Attributes.HasFlag(GenericParameterAttributes.Covariant)) - yield return Tuples.cil_typeparam_covariant(this); - if (tp.Attributes.HasFlag(GenericParameterAttributes.DefaultConstructorConstraint)) - yield return Tuples.cil_typeparam_new(this); - if (tp.Attributes.HasFlag(GenericParameterAttributes.ReferenceTypeConstraint)) - yield return Tuples.cil_typeparam_class(this); - if (tp.Attributes.HasFlag(GenericParameterAttributes.NotNullableValueTypeConstraint)) - yield return Tuples.cil_typeparam_struct(this); - - foreach (var constraint in tp.GetConstraints().Select(h => Context.MdReader.GetGenericParameterConstraint(h))) - { - var t = (Type)Context.CreateGeneric(this.gc, constraint.Type); - yield return t; - yield return Tuples.cil_typeparam_constraint(this, t); - } - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/TypeReferenceType.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/TypeReferenceType.cs deleted file mode 100644 index f1c10fe836e..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/TypeReferenceType.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection.Metadata; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// A type reference, to a type in a referenced assembly. - /// - internal sealed class TypeReferenceType : Type - { - private readonly TypeReferenceHandle handle; - private readonly TypeReference tr; - private readonly Lazy typeParams; - private readonly NamedTypeIdWriter idWriter; - - public TypeReferenceType(Context cx, TypeReferenceHandle handle) : base(cx) - { - this.idWriter = new NamedTypeIdWriter(this); - this.handle = handle; - this.tr = cx.MdReader.GetTypeReference(handle); - this.typeParams = new Lazy(GenericsHelper.MakeTypeParameters(this, ThisTypeParameterCount)); - } - - public override bool Equals(object? obj) - { - return obj is TypeReferenceType t && handle.Equals(t.handle); - } - - public override int GetHashCode() - { - return handle.GetHashCode(); - } - - public override IEnumerable Contents - { - get - { - foreach (var tp in typeParams.Value) - yield return tp; - - foreach (var c in base.Contents) - yield return c; - } - } - - public override string Name => GenericsHelper.GetNonGenericName(tr.Name, Context.MdReader); - - public override Namespace ContainingNamespace => Context.CreateNamespace(tr.Namespace); - - public override Type? ContainingType - { - get - { - return tr.ResolutionScope.Kind == HandleKind.TypeReference - ? (Type)Context.Create((TypeReferenceHandle)tr.ResolutionScope) - : null; - } - } - - public override CilTypeKind Kind => CilTypeKind.ValueOrRefType; - - public override void WriteAssemblyPrefix(TextWriter trapFile) - { - switch (tr.ResolutionScope.Kind) - { - case HandleKind.TypeReference: - ContainingType!.WriteAssemblyPrefix(trapFile); - break; - case HandleKind.AssemblyReference: - var assemblyDef = Context.MdReader.GetAssemblyReference((AssemblyReferenceHandle)tr.ResolutionScope); - trapFile.Write(Context.GetString(assemblyDef.Name)); - trapFile.Write('_'); - trapFile.Write(assemblyDef.Version.ToString()); - trapFile.Write(Entities.Type.AssemblyTypeNameSeparator); - break; - default: - Context.WriteAssemblyPrefix(trapFile); - break; - } - } - - public override int ThisTypeParameterCount => GenericsHelper.GetGenericTypeParameterCount(tr.Name, Context.MdReader); - - public override IEnumerable TypeParameters => GenericsHelper.GetAllTypeParameters(ContainingType, typeParams!.Value); - - public override IEnumerable ThisGenericArguments => typeParams.Value; - - public override void WriteId(EscapingTextWriter trapFile, bool inContext) - { - idWriter.WriteId(trapFile, inContext); - } - - public override Type Construct(IEnumerable typeArguments) - { - if (TotalTypeParametersCount != typeArguments.Count()) - throw new InternalError("Mismatched type arguments"); - - return Context.Populate(new ConstructedType(Context, this, typeArguments)); - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/TypeSignatureDecoder.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/TypeSignatureDecoder.cs deleted file mode 100644 index bcd34c76e41..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/TypeSignatureDecoder.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using System.Collections.Immutable; -using System.Linq; -using System.Reflection.Metadata; - -namespace Semmle.Extraction.CIL.Entities -{ - /// - /// Decodes a type signature and produces a Type, for use by DecodeSignature() and friends. - /// - internal class TypeSignatureDecoder : ISignatureTypeProvider - { - private readonly Context cx; - - public TypeSignatureDecoder(Context cx) - { - this.cx = cx; - } - - Type IConstructedTypeProvider.GetArrayType(Type elementType, ArrayShape shape) => - cx.Populate(new ArrayType(cx, elementType, shape.Rank)); - - Type IConstructedTypeProvider.GetByReferenceType(Type elementType) => - new ByRefType(cx, elementType); - - Type ISignatureTypeProvider.GetFunctionPointerType(MethodSignature signature) => - cx.Populate(new FunctionPointerType(cx, signature)); - - Type IConstructedTypeProvider.GetGenericInstantiation(Type genericType, ImmutableArray typeArguments) => - genericType.Construct(typeArguments); - - Type ISignatureTypeProvider.GetGenericMethodParameter(IGenericContext genericContext, int index) => - genericContext.MethodParameters.ElementAt(index); - - Type ISignatureTypeProvider.GetGenericTypeParameter(IGenericContext genericContext, int index) => - genericContext.TypeParameters.ElementAt(index); - - Type ISignatureTypeProvider.GetModifiedType(Type modifier, Type unmodifiedType, bool isRequired) => - new ModifiedType(cx, unmodifiedType, modifier, isRequired); - - Type ISignatureTypeProvider.GetPinnedType(Type elementType) => elementType; - - Type IConstructedTypeProvider.GetPointerType(Type elementType) => - cx.Populate(new PointerType(cx, elementType)); - - Type ISimpleTypeProvider.GetPrimitiveType(PrimitiveTypeCode typeCode) => cx.Create(typeCode); - - Type ISZArrayTypeProvider.GetSZArrayType(Type elementType) => - cx.Populate(new ArrayType(cx, elementType)); - - Type ISimpleTypeProvider.GetTypeFromDefinition(MetadataReader reader, TypeDefinitionHandle handle, byte rawTypeKind) => - (Type)cx.Create(handle); - - Type ISimpleTypeProvider.GetTypeFromReference(MetadataReader reader, TypeReferenceHandle handle, byte rawTypeKind) => - (Type)cx.Create(handle); - - Type ISignatureTypeProvider.GetTypeFromSpecification(MetadataReader reader, IGenericContext genericContext, TypeSpecificationHandle handle, byte rawTypeKind) => - throw new NotImplementedException(); - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Entities/TypeTypeParameter.cs b/csharp/extractor/Semmle.Extraction.CIL/Entities/TypeTypeParameter.cs deleted file mode 100644 index ba4ec79fb78..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Entities/TypeTypeParameter.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System.Collections.Generic; -using System.Linq; - -namespace Semmle.Extraction.CIL.Entities -{ - internal sealed class TypeTypeParameter : TypeParameter - { - private readonly Type type; - private readonly int index; - - public TypeTypeParameter(Type t, int i) : base(t) - { - index = i; - type = t; - } - - public override bool Equals(object? obj) - { - return obj is TypeTypeParameter tp && type.Equals(tp.type) && index == tp.index; - } - - public override int GetHashCode() - { - return type.GetHashCode() * 13 + index; - } - - public override void WriteId(EscapingTextWriter trapFile, bool inContext) - { - type.WriteId(trapFile, inContext); - trapFile.Write('!'); - trapFile.Write(index); - } - - public override TypeContainer Parent => type; - public override string Name => "!" + index; - - public override IEnumerable TypeParameters => Enumerable.Empty(); - - public override IEnumerable Contents - { - get - { - yield return Tuples.cil_type(this, Name, Kind, type, SourceDeclaration); - yield return Tuples.cil_type_parameter(type, index, this); - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/ICustomModifierReceiver.cs b/csharp/extractor/Semmle.Extraction.CIL/ICustomModifierReceiver.cs deleted file mode 100644 index 24d2c057b2e..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/ICustomModifierReceiver.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Semmle.Extraction.CIL -{ - internal interface ICustomModifierReceiver - { - } -} \ No newline at end of file diff --git a/csharp/extractor/Semmle.Extraction.CIL/Id.cs b/csharp/extractor/Semmle.Extraction.CIL/Id.cs deleted file mode 100644 index 8d9a78f76d3..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Id.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Reflection.Metadata; - -namespace Semmle.Extraction.CIL -{ - public static class IdUtils - { - public static string Id(this PrimitiveTypeCode typeCode) - { - switch (typeCode) - { - case PrimitiveTypeCode.Boolean: return "Boolean"; - case PrimitiveTypeCode.Byte: return "Byte"; - case PrimitiveTypeCode.Char: return "Char"; - case PrimitiveTypeCode.Double: return "Double"; - case PrimitiveTypeCode.Int16: return "Int16"; - case PrimitiveTypeCode.Int32: return "Int32"; - case PrimitiveTypeCode.Int64: return "Int64"; - case PrimitiveTypeCode.IntPtr: return "IntPtr"; - case PrimitiveTypeCode.Object: return "Object"; - case PrimitiveTypeCode.SByte: return "SByte"; - case PrimitiveTypeCode.Single: return "Single"; - case PrimitiveTypeCode.String: return "String"; - case PrimitiveTypeCode.UInt16: return "UInt16"; - case PrimitiveTypeCode.UInt32: return "UInt32"; - case PrimitiveTypeCode.UInt64: return "UInt64"; - case PrimitiveTypeCode.UIntPtr: return "UIntPtr"; - case PrimitiveTypeCode.Void: return "Void"; - case PrimitiveTypeCode.TypedReference: return "TypedReference"; - default: throw new InternalError($"Unhandled type code {typeCode}"); - } - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/PDB/IPdb.cs b/csharp/extractor/Semmle.Extraction.CIL/PDB/IPdb.cs deleted file mode 100644 index 46c11440dc5..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/PDB/IPdb.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Reflection.Metadata; - -namespace Semmle.Extraction.PDB -{ - /// - /// Wrapper for reading PDB files. - /// This is needed because there are different libraries for dealing with - /// different types of PDB file, even though they share the same file extension. - /// - public interface IPdb : IDisposable - { - /// - /// Gets all source files in this PDB. - /// - IEnumerable SourceFiles { get; } - - /// - /// Look up a method from a given handle. - /// - /// The handle to query. - /// The method information, or null if the method does not have debug information. - Method? GetMethod(MethodDebugInformationHandle methodHandle); - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/PDB/ISourceFile.cs b/csharp/extractor/Semmle.Extraction.CIL/PDB/ISourceFile.cs deleted file mode 100644 index 48e1de708f2..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/PDB/ISourceFile.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace Semmle.Extraction.PDB -{ - /// - /// A source file reference in a PDB file. - /// - public interface ISourceFile - { - string Path { get; } - - /// - /// The contents of the file. - /// This property is needed in case the contents - /// of the file are embedded in the PDB instead of being on the filesystem. - /// - /// null if the contents are unavailable. - /// E.g. if the PDB file exists but the corresponding source files are missing. - /// - string? Contents { get; } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/PDB/Location.cs b/csharp/extractor/Semmle.Extraction.CIL/PDB/Location.cs deleted file mode 100644 index ccf95f8e7d9..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/PDB/Location.cs +++ /dev/null @@ -1,63 +0,0 @@ -namespace Semmle.Extraction.PDB -{ - /// - /// A location in source code. - /// - public sealed class Location - { - /// - /// The file containing the code. - /// - public ISourceFile File { get; } - - /// - /// The start line of text within the source file. - /// - public int StartLine { get; } - - /// - /// The start column of text within the source file. - /// - public int StartColumn { get; } - - /// - /// The end line of text within the source file. - /// - public int EndLine { get; } - - /// - /// The end column of text within the source file. - /// - public int EndColumn { get; } - - public override string ToString() - { - return string.Format("({0},{1})-({2},{3})", StartLine, StartColumn, EndLine, EndColumn); - } - - public override bool Equals(object? obj) - { - return obj is Location otherLocation && - File.Equals(otherLocation.File) && - StartLine == otherLocation.StartLine && - StartColumn == otherLocation.StartColumn && - EndLine == otherLocation.EndLine && - EndColumn == otherLocation.EndColumn; - } - - public override int GetHashCode() - { - var h1 = StartLine + 37 * (StartColumn + 51 * (EndLine + 97 * EndColumn)); - return File.GetHashCode() + 17 * h1; - } - - public Location(ISourceFile file, int startLine, int startCol, int endLine, int endCol) - { - File = file; - StartLine = startLine; - StartColumn = startCol; - EndLine = endLine; - EndColumn = endCol; - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/PDB/MdProvider.cs b/csharp/extractor/Semmle.Extraction.CIL/PDB/MdProvider.cs deleted file mode 100644 index 90b953ac0e7..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/PDB/MdProvider.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Reflection; -using Microsoft.DiaSymReader; - -#pragma warning disable IDE0060, CA1822 - -namespace Semmle.Extraction.PDB -{ - /// - /// This is not used but is seemingly needed in order to use DiaSymReader. - /// - internal class MdProvider : ISymReaderMetadataProvider - { - public MdProvider() - { - } - - public object? GetMetadataImport() => null; - - public unsafe bool TryGetStandaloneSignature(int standaloneSignatureToken, out byte* signature, out int length) => - throw new NotImplementedException(); - - public bool TryGetTypeDefinitionInfo(int typeDefinitionToken, out string namespaceName, out string typeName, out TypeAttributes attributes, out int baseTypeToken) => - throw new NotImplementedException(); - - public bool TryGetTypeDefinitionInfo(int typeDefinitionToken, out string namespaceName, out string typeName, out TypeAttributes attributes) => - throw new NotImplementedException(); - - public bool TryGetTypeReferenceInfo(int typeReferenceToken, out string namespaceName, out string typeName, out int resolutionScopeToken) => - throw new NotImplementedException(); - - public bool TryGetTypeReferenceInfo(int typeReferenceToken, out string namespaceName, out string typeName) => - throw new NotImplementedException(); - } -} - -#pragma warning restore diff --git a/csharp/extractor/Semmle.Extraction.CIL/PDB/MetadataPdbReader.cs b/csharp/extractor/Semmle.Extraction.CIL/PDB/MetadataPdbReader.cs deleted file mode 100644 index fa7a1d0e8ca..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/PDB/MetadataPdbReader.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection.Metadata; -using System.Reflection.PortableExecutable; - -namespace Semmle.Extraction.PDB -{ - /// - /// A reader of PDB information using System.Reflection.Metadata. - /// This is cross platform, and the future of PDB. - /// - /// PDB information can be in a separate PDB file, or embedded in the DLL. - /// - internal sealed class MetadataPdbReader : IPdb - { - private class SourceFile : ISourceFile - { - public SourceFile(MetadataReader reader, DocumentHandle handle) - { - var doc = reader.GetDocument(handle); - Path = reader.GetString(doc.Name); - } - - public string Path { get; private set; } - - public string? Contents => File.Exists(Path) ? File.ReadAllText(Path, System.Text.Encoding.Default) : null; - } - - // Turns out to be very important to keep the MetadataReaderProvider live - // or the reader will crash. - private readonly MetadataReaderProvider provider; - private readonly MetadataReader reader; - - public MetadataPdbReader(MetadataReaderProvider provider) - { - this.provider = provider; - reader = provider.GetMetadataReader(); - } - - public IEnumerable SourceFiles => reader.Documents.Select(handle => new SourceFile(reader, handle)); - - public Method? GetMethod(MethodDebugInformationHandle handle) - { - var debugInfo = reader.GetMethodDebugInformation(handle); - - var sequencePoints = debugInfo.GetSequencePoints() - .Where(p => !p.Document.IsNil && !p.IsHidden) - .Select(p => new SequencePoint(p.Offset, new Location( - new SourceFile(reader, p.Document), p.StartLine, p.StartColumn, p.EndLine, p.EndColumn))) - .Where(p => p.Location.File.Path is not null) - .ToArray(); - - return sequencePoints.Any() ? new Method(sequencePoints) : null; - } - - public static MetadataPdbReader? CreateFromAssembly(string assemblyPath, PEReader peReader) - { - var provider = peReader - .ReadDebugDirectory() - .Where(d => d.Type == DebugDirectoryEntryType.EmbeddedPortablePdb) - .Select(dirEntry => peReader.ReadEmbeddedPortablePdbDebugDirectoryData(dirEntry)) - .FirstOrDefault(); - - if (provider is not null) - { - return new MetadataPdbReader(provider); - } - - try - { - if (peReader.TryOpenAssociatedPortablePdb( - assemblyPath, - s => new FileStream(s, FileMode.Open, FileAccess.Read, FileShare.Read), - out provider, - out _)) - { - return new MetadataPdbReader(provider!); - } - } - - catch (BadImageFormatException) - { - // Something is wrong with the file. - } - catch (FileNotFoundException) - { - // The PDB file was not found. - } - return null; - } - - public void Dispose() - { - provider.Dispose(); - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/PDB/Method.cs b/csharp/extractor/Semmle.Extraction.CIL/PDB/Method.cs deleted file mode 100644 index 6a534a4dd20..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/PDB/Method.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Collections.Generic; -using System.Linq; - -namespace Semmle.Extraction.PDB -{ - public class Method - { - public IEnumerable SequencePoints { get; } - - public Method(IEnumerable sequencePoints) - { - SequencePoints = sequencePoints; - } - - public Location Location => SequencePoints.First().Location; - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/PDB/NativePdbReader.cs b/csharp/extractor/Semmle.Extraction.CIL/PDB/NativePdbReader.cs deleted file mode 100644 index c6db472411e..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/PDB/NativePdbReader.cs +++ /dev/null @@ -1,116 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection.Metadata; -using System.Reflection.Metadata.Ecma335; -using System.Reflection.PortableExecutable; -using Microsoft.DiaSymReader; - -namespace Semmle.Extraction.PDB -{ - /// - /// A PDB reader using Microsoft.DiaSymReader.Native. - /// This is an unmanaged Windows DLL, which therefore only works on Windows. - /// - internal sealed class NativePdbReader : IPdb - { - private sealed class Document : ISourceFile - { - private readonly ISymUnmanagedDocument document; - - public Document(ISymUnmanagedDocument doc) - { - document = doc; - contents = new Lazy(() => - { - if (document.HasEmbeddedSource(out var isEmbedded) == 0 && isEmbedded) - { - var rawContents = document.GetEmbeddedSource().ToArray(); - return System.Text.Encoding.Default.GetString(rawContents); - } - - return File.Exists(Path) - ? File.ReadAllText(Path) - : null; - - }); - } - - public override bool Equals(object? obj) - { - return obj is Document otherDoc && Path.Equals(otherDoc.Path); - } - - public override int GetHashCode() => Path.GetHashCode(); - - public string Path => document.GetName(); - - public override string ToString() => Path; - - private readonly Lazy contents; - - public string? Contents => contents.Value; - } - - public IEnumerable SourceFiles => reader.GetDocuments().Select(d => new Document(d)); - - public Method? GetMethod(MethodDebugInformationHandle h) - { - var methodToken = MetadataTokens.GetToken(h.ToDefinitionHandle()); - var method = reader.GetMethod(methodToken); - if (method is not null) - { - if (method.GetSequencePointCount(out var count) != 0 || count == 0) - return null; - - var s = method.GetSequencePoints() - .Where(sp => !sp.IsHidden) - .Select(sp => new SequencePoint(sp.Offset, new Location( - new Document(sp.Document), sp.StartLine, sp.StartColumn, sp.EndLine, sp.EndColumn))) - .ToArray(); - - return s.Any() ? new Method(s) : null; - } - return null; - } - - private NativePdbReader(string path) - { - pdbStream = new FileStream(path, FileMode.Open); - var metadataProvider = new MdProvider(); - reader = SymUnmanagedReaderFactory.CreateReader(pdbStream, metadataProvider); - } - - private readonly ISymUnmanagedReader5 reader; - private readonly FileStream pdbStream; - - public static NativePdbReader? CreateFromAssembly(PEReader peReader) - { - // The Native PDB reader uses an unmanaged Windows DLL - // so only works on Windows. - if (!Semmle.Util.Win32.IsWindows()) - return null; - - var debugDirectory = peReader.ReadDebugDirectory(); - - var path = debugDirectory - .Where(d => d.Type == DebugDirectoryEntryType.CodeView) - .Select(peReader.ReadCodeViewDebugDirectoryData) - .Select(cv => cv.Path) - .FirstOrDefault(File.Exists); - - if (path is not null) - { - return new NativePdbReader(path); - } - - return null; - } - - public void Dispose() - { - pdbStream.Dispose(); - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/PDB/PdbReader.cs b/csharp/extractor/Semmle.Extraction.CIL/PDB/PdbReader.cs deleted file mode 100644 index 1f0f1b455dc..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/PDB/PdbReader.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Reflection.PortableExecutable; - -namespace Semmle.Extraction.PDB -{ - internal static class PdbReader - { - /// - /// Returns the PDB information associated with an assembly. - /// - /// The path to the assembly. - /// The PE reader for the assembly. - /// A PdbReader, or null if no PDB information is available. - public static IPdb? Create(string assemblyPath, PEReader peReader) - { - return (IPdb?)MetadataPdbReader.CreateFromAssembly(assemblyPath, peReader) ?? - NativePdbReader.CreateFromAssembly(peReader); - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/PDB/SequencePoint.cs b/csharp/extractor/Semmle.Extraction.CIL/PDB/SequencePoint.cs deleted file mode 100644 index 2cea6e54768..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/PDB/SequencePoint.cs +++ /dev/null @@ -1,30 +0,0 @@ -namespace Semmle.Extraction.PDB -{ - /// - /// A sequencepoint is a marker in the source code where you can put a breakpoint, and - /// maps instructions to source code. - /// - public struct SequencePoint - { - /// - /// The byte-offset of the instruction. - /// - public int Offset { get; } - - /// - /// The source location of the instruction. - /// - public Location Location { get; } - - public override string ToString() - { - return string.Format("{0} = {1}", Offset, Location); - } - - public SequencePoint(int offset, Location location) - { - Offset = offset; - Location = location; - } - } -} diff --git a/csharp/extractor/Semmle.Extraction.CIL/Properties/AssemblyInfo.cs b/csharp/extractor/Semmle.Extraction.CIL/Properties/AssemblyInfo.cs deleted file mode 100644 index 110feb8de0d..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Semmle.Extraction.CIL")] -[assembly: AssemblyDescription("Semme CIL extractor.")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Semmle.Extraction.CIL")] -[assembly: AssemblyCopyright("Copyright © Semmle 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("a23d9ec2-8aae-43da-97cb-579f640b89cd")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/csharp/extractor/Semmle.Extraction.CIL/Semmle.Extraction.CIL.csproj b/csharp/extractor/Semmle.Extraction.CIL/Semmle.Extraction.CIL.csproj deleted file mode 100644 index a952ea2d3dd..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Semmle.Extraction.CIL.csproj +++ /dev/null @@ -1,34 +0,0 @@ - - - - net8.0 - Semmle.Extraction.CIL - Semmle.Extraction.CIL - false - true - win-x64;linux-x64;osx-x64 - enable - - - - DEBUG;DEBUG_LABELS - - - - - - - - - - - - - - - runtime; build; native; contentfiles; analyzers; buildtransitive -all - - - - diff --git a/csharp/extractor/Semmle.Extraction.CIL/Tuples.cs b/csharp/extractor/Semmle.Extraction.CIL/Tuples.cs deleted file mode 100644 index 44519f45468..00000000000 --- a/csharp/extractor/Semmle.Extraction.CIL/Tuples.cs +++ /dev/null @@ -1,227 +0,0 @@ -using Semmle.Extraction.CIL.Entities; - -namespace Semmle.Extraction.CIL -{ - - internal static class Tuples - { - internal static Tuple assemblies(Assembly assembly, File file, string identifier, string name, string version) => - new Tuple("assemblies", assembly, file, identifier, name, version); - - internal static Tuple cil_abstract(IMember method) => - new Tuple("cil_abstract", method); - - internal static Tuple cil_adder(Event member, Method method) => - new Tuple("cil_adder", member, method); - - internal static Tuple cil_access(Instruction i, IExtractedEntity m) => - new Tuple("cil_access", i, m); - - internal static Tuple cil_attribute(Attribute attribute, IExtractedEntity @object, Method constructor) => - new Tuple("cil_attribute", attribute, @object, constructor); - - internal static Tuple cil_attribute_named_argument(Attribute attribute, string name, string value) => - new Tuple("cil_attribute_named_argument", attribute, name, value); - - internal static Tuple cil_attribute_positional_argument(Attribute attribute, int index, string value) => - new Tuple("cil_attribute_positional_argument", attribute, index, value); - - internal static Tuple cil_array_type(ArrayType array, Type element, int rank) => - new Tuple("cil_array_type", array, element, rank); - - internal static Tuple cil_base_class(Type t, Type @base) => - new Tuple("cil_base_class", t, @base); - - internal static Tuple cil_enum_underlying_type(Type t, PrimitiveType underlying) => - new Tuple("cil_enum_underlying_type", t, underlying); - - internal static Tuple cil_base_interface(Type t, Type @base) => - new Tuple("cil_base_interface", t, @base); - - internal static Tuple cil_class(TypeDefinitionType type) => - new Tuple("cil_class", type); - - internal static Tuple cil_event(Event e, Type parent, string name, Type type) => - new Tuple("cil_event", e, parent, name, type); - - internal static Tuple cil_field(Field field, Type parent, string name, Type fieldType) => - new Tuple("cil_field", field, parent, name, fieldType); - - internal static Tuple cil_getter(Property member, Method method) => - new Tuple("cil_getter", member, method); - - internal static Tuple cil_handler(ExceptionRegion region, MethodImplementation method, int index, int kind, - Instruction region_start, - Instruction region_end, - Instruction handler_start) => - new Tuple("cil_handler", region, method, index, kind, region_start, region_end, handler_start); - - internal static Tuple cil_handler_filter(ExceptionRegion region, Instruction filter_start) => - new Tuple("cil_handler_filter", region, filter_start); - - internal static Tuple cil_handler_type(ExceptionRegion region, Type t) => - new Tuple("cil_handler_type", region, t); - - internal static Tuple cil_implements(Method derived, Method declaration) => - new Tuple("cil_implements", derived, declaration); - - internal static Tuple cil_instruction(Instruction instruction, int opcode, int index, MethodImplementation parent) => - new Tuple("cil_instruction", instruction, opcode, index, parent); - - internal static Tuple cil_instruction_location(Instruction i, PdbSourceLocation loc) => - new Tuple("cil_instruction_location", i, loc); - - internal static Tuple cil_interface(TypeDefinitionType type) => - new Tuple("cil_interface", type); - - internal static Tuple cil_internal(DefinitionField field) => - new Tuple("cil_internal", field); - - internal static Tuple cil_jump(Instruction from, Instruction to) => - new Tuple("cil_jump", from, to); - - internal static Tuple cil_local_variable(LocalVariable l, MethodImplementation m, int i, Type t) => - new Tuple("cil_local_variable", l, m, i, t); - - internal static Tuple cil_method(Method method, string name, Type declType, Type returnType) => - new Tuple("cil_method", method, name, declType, returnType); - - internal static Tuple cil_function_pointer_return_type(FunctionPointerType fnptr, Type returnType) => - new Tuple("cil_function_pointer_return_type", fnptr, returnType); - - internal static Tuple cil_function_pointer_calling_conventions(FunctionPointerType fnptr, System.Reflection.Metadata.SignatureCallingConvention callingConvention) => - new Tuple("cil_function_pointer_calling_conventions", fnptr, (int)callingConvention); - - internal static Tuple cil_method_implementation(MethodImplementation impl, Method method, Assembly assembly) => - new Tuple("cil_method_implementation", impl, method, assembly); - - internal static Tuple cil_method_location(Method m, ILocation a) => - new Tuple("cil_method_location", m, a); - - internal static Tuple cil_method_source_declaration(Method method, Method sourceDecl) => - new Tuple("cil_method_source_declaration", method, sourceDecl); - - internal static Tuple cil_method_stack_size(MethodImplementation method, int stackSize) => - new Tuple("cil_method_stack_size", method, stackSize); - - internal static Tuple cil_newslot(Method method) => - new Tuple("cil_newslot", method); - - internal static Tuple cil_parameter(Parameter p, IParameterizable m, int i, Type t) => - new Tuple("cil_parameter", p, m, i, t); - - internal static Tuple cil_parameter_in(Parameter p) => - new Tuple("cil_parameter_in", p); - - internal static Tuple cil_parameter_out(Parameter p) => - new Tuple("cil_parameter_out", p); - - internal static Tuple cil_pointer_type(PointerType t, Type pointee) => - new Tuple("cil_pointer_type", t, pointee); - - internal static Tuple cil_private(IMember modifiable) => - new Tuple("cil_private", modifiable); - - internal static Tuple cil_protected(IMember modifiable) => - new Tuple("cil_protected", modifiable); - - internal static Tuple cil_property(Property p, Type parent, string name, Type propType) => - new Tuple("cil_property", p, parent, name, propType); - - internal static Tuple cil_public(IMember modifiable) => - new Tuple("cil_public", modifiable); - - internal static Tuple cil_raiser(Event member, Method method) => - new Tuple("cil_raiser", member, method); - - internal static Tuple cil_requiresecobject(Method method) => - new Tuple("cil_requiresecobject", method); - - internal static Tuple cil_remover(Event member, Method method) => - new Tuple("cil_remover", member, method); - - internal static Tuple cil_sealed(IMember modifiable) => - new Tuple("cil_sealed", modifiable); - - internal static Tuple cil_security(IMember method) => - new Tuple("cil_security", method); - - internal static Tuple cil_setter(Property member, Method method) => - new Tuple("cil_setter", member, method); - - internal static Tuple cil_specialname(Method method) => - new Tuple("cil_specialname", method); - - internal static Tuple cil_static(IMember modifiable) => - new Tuple("cil_static", modifiable); - - internal static Tuple cil_switch(Instruction from, int index, Instruction to) => - new Tuple("cil_switch", from, index, to); - - internal static Tuple cil_type(Type t, string name, CilTypeKind kind, TypeContainer parent, Type sourceDecl) => - new Tuple("cil_type", t, name, (int)kind, parent, sourceDecl); - - internal static Tuple cil_type_argument(TypeContainer constructedTypeOrMethod, int index, Type argument) => - new Tuple("cil_type_argument", constructedTypeOrMethod, index, argument); - - internal static Tuple cil_type_location(Type t, Assembly a) => - new Tuple("cil_type_location", t, a); - - internal static Tuple cil_type_parameter(TypeContainer unboundTypeOrMethod, int index, TypeParameter parameter) => - new Tuple("cil_type_parameter", unboundTypeOrMethod, index, parameter); - - internal static Tuple cil_typeparam_covariant(TypeParameter p) => - new Tuple("cil_typeparam_covariant", p); - - internal static Tuple cil_typeparam_contravariant(TypeParameter p) => - new Tuple("cil_typeparam_contravariant", p); - - internal static Tuple cil_typeparam_class(TypeParameter p) => - new Tuple("cil_typeparam_class", p); - - internal static Tuple cil_typeparam_constraint(TypeParameter p, Type constraint) => - new Tuple("cil_typeparam_constraint", p, constraint); - - internal static Tuple cil_typeparam_new(TypeParameter p) => - new Tuple("cil_typeparam_new", p); - - internal static Tuple cil_typeparam_struct(TypeParameter p) => - new Tuple("cil_typeparam_struct", p); - - internal static Tuple cil_value(Instruction i, string value) => - new Tuple("cil_value", i, value); - - internal static Tuple cil_virtual(Method method) => - new Tuple("cil_virtual", method); - - internal static Tuple cil_custom_modifiers(ICustomModifierReceiver receiver, Type modifier, bool isRequired) => - new Tuple("cil_custom_modifiers", receiver, modifier, isRequired ? 1 : 0); - - internal static Tuple cil_type_annotation(IExtractedEntity receiver, TypeAnnotation annotation) => - new Tuple("cil_type_annotation", receiver, (int)annotation); - - internal static Tuple containerparent(Folder parent, IFileOrFolder child) => - new Tuple("containerparent", parent, child); - - internal static Tuple files(File file, string fullName) => - new Tuple("files", file, fullName); - - internal static Tuple file_extraction_mode(File file, ExtractorMode mode) => - new Tuple("file_extraction_mode", file, mode); - - internal static Tuple folders(Folder folder, string path) => - new Tuple("folders", folder, path); - - internal static Tuple locations_default(PdbSourceLocation label, File file, int startLine, int startCol, int endLine, int endCol) => - new Tuple("locations_default", label, file, startLine, startCol, endLine, endCol); - - internal static Tuple metadata_handle(IExtractedEntity entity, Assembly assembly, int handleValue) => - new Tuple("metadata_handle", entity, assembly, handleValue); - - internal static Tuple namespaces(Namespace ns, string name) => - new Tuple("namespaces", ns, name); - - internal static Tuple parent_namespace(TypeContainer child, Namespace parent) => - new Tuple("parent_namespace", child, parent); - } -} diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index e3c64d468c1..c4c901a3cc4 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -7,6 +7,7 @@ using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; + using Semmle.Util; using Semmle.Util.Logging; @@ -27,8 +28,8 @@ namespace Semmle.Extraction.CSharp.DependencyFetching private readonly List generatedSources; private int dotnetFrameworkVersionVariantCount = 0; private int conflictedReferences = 0; - private readonly IDependencyOptions options; private readonly DirectoryInfo sourceDir; + private string? dotnetPath; private readonly IDotNet dotnet; private readonly FileContent fileContent; private readonly TemporaryDirectory packageDirectory; @@ -39,17 +40,17 @@ namespace Semmle.Extraction.CSharp.DependencyFetching private readonly Lazy runtimeLazy; private Runtime Runtime => runtimeLazy.Value; + private readonly int threads = EnvironmentVariables.GetDefaultNumberOfThreads(); /// /// Performs C# dependency fetching. /// /// Dependency fetching options /// Logger for dependency fetching progress. - public DependencyManager(string srcDir, IDependencyOptions options, ILogger logger) + public DependencyManager(string srcDir, ILogger logger) { var startTime = DateTime.Now; - this.options = options; this.logger = logger; this.sourceDir = new DirectoryInfo(srcDir); @@ -59,23 +60,12 @@ namespace Semmle.Extraction.CSharp.DependencyFetching tempWorkingDirectory = new TemporaryDirectory(FileUtils.GetTemporaryWorkingDirectory(out cleanupTempWorkingDirectory)); - try - { - this.dotnet = DotNet.Make(options, logger, tempWorkingDirectory); - runtimeLazy = new Lazy(() => new Runtime(dotnet, logger)); - } - catch - { - logger.LogError("Missing dotnet CLI"); - throw; - } - logger.LogInfo($"Finding files in {srcDir}..."); var allFiles = GetAllFiles().ToList(); var binaryFileExtensions = new HashSet(new[] { ".dll", ".exe" }); // TODO: add more binary file extensions. var allNonBinaryFiles = allFiles.Where(f => !binaryFileExtensions.Contains(f.Extension.ToLowerInvariant())).ToList(); - var smallNonBinaryFiles = allNonBinaryFiles.SelectSmallFiles(logger).SelectFileNames(); + var smallNonBinaryFiles = allNonBinaryFiles.SelectSmallFiles(logger).SelectFileNames().ToList(); this.fileContent = new FileContent(logger, smallNonBinaryFiles); this.nonGeneratedSources = allNonBinaryFiles.SelectFileNamesByExtension(".cs").ToList(); this.generatedSources = new(); @@ -85,6 +75,33 @@ namespace Semmle.Extraction.CSharp.DependencyFetching logger.LogInfo($"Found {allFiles.Count} files, {nonGeneratedSources.Count} source files, {allProjects.Count} project files, {allSolutions.Count} solution files, {dllPaths.Count} DLLs."); + void startCallback(string s, bool silent) + { + logger.Log(silent ? Severity.Debug : Severity.Info, $"\nRunning {s}"); + } + + void exitCallback(int ret, string msg, bool silent) + { + logger.Log(silent ? Severity.Debug : Severity.Info, $"Exit code {ret}{(string.IsNullOrEmpty(msg) ? "" : $": {msg}")}"); + } + + DotNet.WithDotNet(SystemBuildActions.Instance, logger, smallNonBinaryFiles, tempWorkingDirectory.ToString(), shouldCleanUp: false, ensureDotNetAvailable: true, version: null, installDir => + { + this.dotnetPath = installDir; + return BuildScript.Success; + }).Run(SystemBuildActions.Instance, startCallback, exitCallback); + + try + { + this.dotnet = DotNet.Make(logger, dotnetPath, tempWorkingDirectory); + runtimeLazy = new Lazy(() => new Runtime(dotnet)); + } + catch + { + logger.LogError("Missing dotnet CLI"); + throw; + } + RestoreNugetPackages(allNonBinaryFiles, allProjects, allSolutions, dllPaths); // Find DLLs in the .Net / Asp.Net Framework // This needs to come after the nuget restore, because the nuget restore might fetch the .NET Core/Framework reference assemblies. @@ -570,15 +587,13 @@ namespace Semmle.Extraction.CSharp.DependencyFetching } } - public DependencyManager(string srcDir) : this(srcDir, DependencyOptions.Default, new ConsoleLogger(Verbosity.Info, logThreadId: true)) { } - private IEnumerable GetAllFiles() { IEnumerable files = sourceDir.GetFiles("*.*", new EnumerationOptions { RecurseSubdirectories = true }); - if (options.DotNetPath != null) + if (dotnetPath != null) { - files = files.Where(f => !f.FullName.StartsWith(options.DotNetPath, StringComparison.OrdinalIgnoreCase)); + files = files.Where(f => !f.FullName.StartsWith(dotnetPath, StringComparison.OrdinalIgnoreCase)); } files = files.Where(f => @@ -590,12 +605,12 @@ namespace Semmle.Extraction.CSharp.DependencyFetching return true; } - logger.Log(Severity.Warning, $"File {f.FullName} could not be processed."); + logger.LogWarning($"File {f.FullName} could not be processed."); return false; } catch (Exception ex) { - logger.Log(Severity.Warning, $"File {f.FullName} could not be processed: {ex.Message}"); + logger.LogWarning($"File {f.FullName} could not be processed: {ex.Message}"); return false; } }); @@ -651,7 +666,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching } catch (AssemblyLoadException) { - logger.Log(Severity.Warning, $"Could not load assembly information from {usedReference.Key}"); + logger.LogWarning($"Could not load assembly information from {usedReference.Key}"); } } @@ -738,7 +753,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching private void AnalyseSolutions(IEnumerable solutions) { - Parallel.ForEach(solutions, new ParallelOptions { MaxDegreeOfParallelism = options.Threads }, solutionFile => + Parallel.ForEach(solutions, new ParallelOptions { MaxDegreeOfParallelism = threads }, solutionFile => { try { @@ -799,6 +814,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching private IEnumerable RestoreSolutions(IEnumerable solutions, out IEnumerable assets) { var successCount = 0; + var nugetSourceFailures = 0; var assetFiles = new List(); var projects = solutions.SelectMany(solution => { @@ -808,11 +824,16 @@ namespace Semmle.Extraction.CSharp.DependencyFetching { successCount++; } + if (res.HasNugetPackageSourceError) + { + nugetSourceFailures++; + } assetFiles.AddRange(res.AssetsFilePaths); return res.RestoredProjects; }).ToList(); assets = assetFiles; CompilationInfos.Add(("Successfully restored solution files", successCount.ToString())); + CompilationInfos.Add(("Failed solution restore with package source error", nugetSourceFailures.ToString())); CompilationInfos.Add(("Restored projects through solution files", projects.Count.ToString())); return projects; } @@ -826,9 +847,10 @@ namespace Semmle.Extraction.CSharp.DependencyFetching private void RestoreProjects(IEnumerable projects, out IEnumerable assets) { var successCount = 0; + var nugetSourceFailures = 0; var assetFiles = new List(); var sync = new object(); - Parallel.ForEach(projects, new ParallelOptions { MaxDegreeOfParallelism = options.Threads }, project => + Parallel.ForEach(projects, new ParallelOptions { MaxDegreeOfParallelism = threads }, project => { logger.LogInfo($"Restoring project {project}..."); var res = dotnet.Restore(new(project, packageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: true)); @@ -838,11 +860,16 @@ namespace Semmle.Extraction.CSharp.DependencyFetching { successCount++; } + if (res.HasNugetPackageSourceError) + { + nugetSourceFailures++; + } assetFiles.AddRange(res.AssetsFilePaths); } }); assets = assetFiles; CompilationInfos.Add(("Successfully restored project files", successCount.ToString())); + CompilationInfos.Add(("Failed project restore with package source error", nugetSourceFailures.ToString())); } [GeneratedRegex(@"^(.+)\.(\d+\.\d+\.\d+(-(.+))?)$", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] @@ -897,6 +924,18 @@ namespace Semmle.Extraction.CSharp.DependencyFetching return; } + var multipleVersions = notYetDownloadedPackages + .GroupBy(p => p.Name) + .Where(g => g.Count() > 1) + .Select(g => g.Key) + .ToList(); + + foreach (var package in multipleVersions) + { + logger.LogWarning($"Found multiple not yet restored packages with name '{package}'."); + notYetDownloadedPackages.Remove(new(package, PackageReferenceSource.PackagesConfig)); + } + logger.LogInfo($"Found {notYetDownloadedPackages.Count} packages that are not yet restored"); var nugetConfigs = allFiles.SelectFileNamesByName("nuget.config").ToArray(); @@ -928,7 +967,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching var successCount = 0; var sync = new object(); - Parallel.ForEach(notYetDownloadedPackages, new ParallelOptions { MaxDegreeOfParallelism = options.Threads }, package => + Parallel.ForEach(notYetDownloadedPackages, new ParallelOptions { MaxDegreeOfParallelism = threads }, package => { var success = TryRestorePackageManually(package.Name, nugetConfig, package.PackageReferenceSource); if (!success) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyOptions.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyOptions.cs deleted file mode 100644 index 59e5c54097c..00000000000 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyOptions.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using System.Linq; -using System.Collections.Generic; -using Semmle.Util; - -namespace Semmle.Extraction.CSharp.DependencyFetching -{ - /// - /// Dependency fetching related options. - /// - public interface IDependencyOptions - { - /// - /// The number of threads to use. - /// - int Threads { get; } - - /// - /// The path to the local ".dotnet" directory, if any. - /// - string? DotNetPath { get; } - } - - public class DependencyOptions : IDependencyOptions - { - public static IDependencyOptions Default => new DependencyOptions(); - - public int Threads { get; set; } = EnvironmentVariables.GetDefaultNumberOfThreads(); - - public string? DotNetPath { get; set; } = null; - } -} diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs index 37c028920a8..41a117ed5d8 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs @@ -2,7 +2,9 @@ using System.Collections.Generic; using System.IO; using System.Linq; -using System.Text.RegularExpressions; + +using Newtonsoft.Json.Linq; + using Semmle.Util; using Semmle.Util.Logging; @@ -11,29 +13,26 @@ namespace Semmle.Extraction.CSharp.DependencyFetching /// /// Utilities to run the "dotnet" command. /// - internal partial class DotNet : IDotNet + public partial class DotNet : IDotNet { private readonly IDotNetCliInvoker dotnetCliInvoker; - private readonly ILogger logger; private readonly TemporaryDirectory? tempWorkingDirectory; private DotNet(IDotNetCliInvoker dotnetCliInvoker, ILogger logger, TemporaryDirectory? tempWorkingDirectory = null) { - this.logger = logger; this.tempWorkingDirectory = tempWorkingDirectory; this.dotnetCliInvoker = dotnetCliInvoker; Info(); } - private DotNet(IDependencyOptions options, ILogger logger, TemporaryDirectory tempWorkingDirectory) : this(new DotNetCliInvoker(logger, Path.Combine(options.DotNetPath ?? string.Empty, "dotnet")), logger, tempWorkingDirectory) { } + private DotNet(ILogger logger, string? dotNetPath, TemporaryDirectory tempWorkingDirectory) : this(new DotNetCliInvoker(logger, Path.Combine(dotNetPath ?? string.Empty, "dotnet")), logger, tempWorkingDirectory) { } internal static IDotNet Make(IDotNetCliInvoker dotnetCliInvoker, ILogger logger) => new DotNet(dotnetCliInvoker, logger); - public static IDotNet Make(IDependencyOptions options, ILogger logger, TemporaryDirectory tempWorkingDirectory) => new DotNet(options, logger, tempWorkingDirectory); + public static IDotNet Make(ILogger logger, string? dotNetPath, TemporaryDirectory tempWorkingDirectory) => new DotNet(logger, dotNetPath, tempWorkingDirectory); private void Info() { - // TODO: make sure the below `dotnet` version is matching the one specified in global.json var res = dotnetCliInvoker.RunCommand("--info"); if (!res) { @@ -108,5 +107,196 @@ namespace Semmle.Extraction.CSharp.DependencyFetching var args = $"exec {execArgs}"; return dotnetCliInvoker.RunCommand(args); } + + // The version number should be kept in sync with the version .NET version used for building the application. + public const string LatestDotNetSdkVersion = "8.0.101"; + + /// + /// Returns a script for downloading relevant versions of the + /// .NET SDK. The SDK(s) will be installed at installDir + /// (provided that the script succeeds). + /// + private static BuildScript DownloadDotNet(IBuildActions actions, ILogger logger, IEnumerable files, string tempWorkingDirectory, bool shouldCleanUp, string installDir, string? version, bool ensureDotNetAvailable) + { + if (!string.IsNullOrEmpty(version)) + // Specific version requested + return DownloadDotNetVersion(actions, logger, tempWorkingDirectory, shouldCleanUp, installDir, [version]); + + // Download versions mentioned in `global.json` files + // See https://docs.microsoft.com/en-us/dotnet/core/tools/global-json + var versions = new List(); + + foreach (var path in files.Where(p => p.EndsWith("global.json", StringComparison.Ordinal))) + { + try + { + var o = JObject.Parse(File.ReadAllText(path)); + var v = (string?)o?["sdk"]?["version"]; + if (v is not null) + { + versions.Add(v); + } + } + catch + { + // not a valid `global.json` file + logger.LogInfo($"Couldn't find .NET SDK version in '{path}'."); + continue; + } + } + + if (versions.Count > 0) + { + return DownloadDotNetVersion(actions, logger, tempWorkingDirectory, shouldCleanUp, installDir, versions); + } + + if (ensureDotNetAvailable) + { + return DownloadDotNetVersion(actions, logger, tempWorkingDirectory, shouldCleanUp, installDir, [LatestDotNetSdkVersion], needExactVersion: false); + } + + return BuildScript.Failure; + } + + /// + /// Returns a script for downloading specific .NET SDK versions, if the + /// versions are not already installed. + /// + /// See https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-install-script. + /// + private static BuildScript DownloadDotNetVersion(IBuildActions actions, ILogger logger, string tempWorkingDirectory, bool shouldCleanUp, string path, IEnumerable versions, bool needExactVersion = true) + { + if (!versions.Any()) + { + logger.LogInfo("No .NET SDK versions requested."); + return BuildScript.Failure; + } + + return BuildScript.Bind(GetInstalledSdksScript(actions), (sdks, sdksRet) => + { + if ( + needExactVersion && + sdksRet == 0 && + // quadratic; should be OK, given that both `version` and `sdks` are expected to be small + versions.All(version => sdks.Any(sdk => sdk.StartsWith(version + " ", StringComparison.Ordinal)))) + { + // The requested SDKs are already installed, so no need to reinstall + return BuildScript.Failure; + } + else if (!needExactVersion && sdksRet == 0 && sdks.Count > 0) + { + // there's at least one SDK installed, so no need to reinstall + return BuildScript.Failure; + } + else if (!needExactVersion && sdksRet != 0) + { + logger.LogInfo("No .NET SDK found."); + } + + BuildScript prelude; + BuildScript postlude; + Func getInstall; + + if (actions.IsWindows()) + { + prelude = BuildScript.Success; + postlude = BuildScript.Success; + + getInstall = version => + { + var psCommand = $"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; &([scriptblock]::Create((Invoke-WebRequest -UseBasicParsing 'https://dot.net/v1/dotnet-install.ps1'))) -Version {version} -InstallDir {path}"; + + BuildScript GetInstall(string pwsh) => + new CommandBuilder(actions). + RunCommand(pwsh). + Argument("-NoProfile"). + Argument("-ExecutionPolicy"). + Argument("unrestricted"). + Argument("-Command"). + Argument("\"" + psCommand + "\""). + Script; + + return GetInstall("pwsh") | GetInstall("powershell"); + }; + } + else + { + var dotnetInstallPath = actions.PathCombine(tempWorkingDirectory, ".dotnet", "dotnet-install.sh"); + + var downloadDotNetInstallSh = BuildScript.DownloadFile( + "https://dot.net/v1/dotnet-install.sh", + dotnetInstallPath, + e => logger.LogWarning($"Failed to download 'dotnet-install.sh': {e.Message}")); + + var chmod = new CommandBuilder(actions). + RunCommand("chmod"). + Argument("u+x"). + Argument(dotnetInstallPath); + + prelude = downloadDotNetInstallSh & chmod.Script; + postlude = shouldCleanUp ? BuildScript.DeleteFile(dotnetInstallPath) : BuildScript.Success; + + getInstall = version => new CommandBuilder(actions). + RunCommand(dotnetInstallPath). + Argument("--channel"). + Argument("release"). + Argument("--version"). + Argument(version). + Argument("--install-dir"). + Argument(path).Script; + } + + var installScript = prelude & BuildScript.Failure; + + var attempted = new HashSet(); + foreach (var version in versions) + { + if (!attempted.Add(version)) + continue; + + installScript = BuildScript.Bind(installScript, combinedExit => + { + logger.LogInfo($"Attempting to download .NET {version}"); + + // When there are multiple versions requested, we want to try to fetch them all, reporting + // a successful exit code when at least one of them succeeds + return combinedExit != 0 ? getInstall(version) : BuildScript.Bind(getInstall(version), _ => BuildScript.Success); + }); + } + + return installScript & postlude; + }); + } + + private static BuildScript GetInstalledSdksScript(IBuildActions actions) + { + var listSdks = new CommandBuilder(actions, silent: true). + RunCommand("dotnet"). + Argument("--list-sdks"); + return listSdks.Script; + } + + /// + /// Returns a script that attempts to download relevant version(s) of the + /// .NET SDK, followed by running the script generated by . + /// + /// The argument to is the path to the directory in which the + /// .NET SDK(s) were installed. + /// + public static BuildScript WithDotNet(IBuildActions actions, ILogger logger, IEnumerable files, string tempWorkingDirectory, bool shouldCleanUp, bool ensureDotNetAvailable, string? version, Func f) + { + var installDir = actions.PathCombine(tempWorkingDirectory, ".dotnet"); + var installScript = DownloadDotNet(actions, logger, files, tempWorkingDirectory, shouldCleanUp, installDir, version, ensureDotNetAvailable); + return BuildScript.Bind(installScript, installed => + { + if (installed != 0) + { + // The .NET SDK was not installed, either because the installation failed or because it was already installed. + installDir = null; + } + + return f(installDir); + }); + } } -} +} \ No newline at end of file diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FilePathFilter.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FilePathFilter.cs index d1a3ed011d4..1a1e9934e8c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FilePathFilter.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FilePathFilter.cs @@ -55,12 +55,12 @@ namespace Semmle.Extraction.CSharp.DependencyFetching } else { - logger.Log(Severity.Info, $"Invalid filter: {filter}"); + logger.LogInfo($"Invalid filter: {filter}"); continue; } var regex = new FilePattern(filterText).RegexPattern; - logger.Log(Severity.Info, $"Filtering {(include ? "in" : "out")} files matching '{regex}'. Original glob filter: '{filter}'"); + logger.LogInfo($"Filtering {(include ? "in" : "out")} files matching '{regex}'. Original glob filter: '{filter}'"); pathFilters.Add(new PathFilter(new Regex(regex, RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline), include)); } @@ -91,7 +91,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching if (!include) { - logger.Log(Severity.Info, $"Excluding '{f.FileInfo.FullName}'"); + logger.LogInfo($"Excluding '{f.FileInfo.FullName}'"); } return include; diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNet.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNet.cs index 5904248b34f..d66135c1644 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNet.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNet.cs @@ -5,7 +5,7 @@ using System.Text.RegularExpressions; namespace Semmle.Extraction.CSharp.DependencyFetching { - internal interface IDotNet + public interface IDotNet { RestoreResult Restore(RestoreSettings restoreSettings); bool New(string folder); @@ -15,9 +15,9 @@ namespace Semmle.Extraction.CSharp.DependencyFetching bool Exec(string execArgs); } - internal record class RestoreSettings(string File, string PackageDirectory, bool ForceDotnetRefAssemblyFetching, string? PathToNugetConfig = null, bool ForceReevaluation = false); + public record class RestoreSettings(string File, string PackageDirectory, bool ForceDotnetRefAssemblyFetching, string? PathToNugetConfig = null, bool ForceReevaluation = false); - internal partial record class RestoreResult(bool Success, IList Output) + public partial record class RestoreResult(bool Success, IList Output) { private readonly Lazy> assetsFilePaths = new(() => GetFirstGroupOnMatch(AssetsFileRegex(), Output)); public IEnumerable AssetsFilePaths => Success ? assetsFilePaths.Value : Array.Empty(); diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs index 90c4af2c4d3..a489ec504c4 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs @@ -18,14 +18,12 @@ namespace Semmle.Extraction.CSharp.DependencyFetching private const string aspNetCoreApp = "Microsoft.AspNetCore.App"; private readonly IDotNet dotNet; - private readonly ILogger logger; private readonly Lazy> newestRuntimes; private Dictionary NewestRuntimes => newestRuntimes.Value; - public Runtime(IDotNet dotNet, ILogger logger) + public Runtime(IDotNet dotNet) { this.dotNet = dotNet; - this.logger = logger; this.newestRuntimes = new(GetNewestRuntimes); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyStubGenerator/Program.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyStubGenerator/Program.cs index 8160bfdd3ae..12f06a58fd4 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyStubGenerator/Program.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyStubGenerator/Program.cs @@ -3,7 +3,7 @@ using Semmle.Extraction.CSharp.StubGenerator; using Semmle.Util.Logging; var logger = new ConsoleLogger(Verbosity.Info, logThreadId: false); -using var dependencyManager = new DependencyManager(".", DependencyOptions.Default, logger); +using var dependencyManager = new DependencyManager(".", logger); StubGenerator.GenerateStubs(logger, dependencyManager.ReferenceFiles, "codeql_csharp_stubs"); return 0; diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs index 115a8d418b6..d868768e350 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs @@ -60,10 +60,9 @@ namespace Semmle.Extraction.CSharp.Standalone { try { - FileUtils.TryDelete(output.FullName); if (shouldCleanUpContainingFolder) { - output.Directory?.Delete(true); + FileUtils.TryDelete(output.FullName); } } catch @@ -105,12 +104,19 @@ namespace Semmle.Extraction.CSharp.Standalone public void Analysed(int item, int total, string source, string output, TimeSpan time, AnalysisAction action) { - logger.Log(Severity.Info, "[{0}/{1}] {2} ({3})", item, total, source, - action == AnalysisAction.Extracted - ? time.ToString() - : action == AnalysisAction.Excluded - ? "excluded" - : "up to date"); + var extra = action switch + { + AnalysisAction.Extracted => time.ToString(), + AnalysisAction.Excluded => "excluded", + AnalysisAction.UpToDate => "up to date", + _ => "unknown action" + }; + logger.LogInfo($"[{item}/{total}] {source} ({extra})"); + } + + public void Started(int item, int total, string source) + { + logger.LogInfo($"[{item}/{total}] {source} (processing started)"); } public void MissingType(string type) @@ -138,7 +144,7 @@ namespace Semmle.Extraction.CSharp.Standalone using var logger = new ConsoleLogger(options.Verbosity, logThreadId: true); logger.Log(Severity.Info, "Extracting C# in buildless mode"); - using var dependencyManager = new DependencyManager(options.SrcDir, options.Dependencies, logger); + using var dependencyManager = new DependencyManager(options.SrcDir, logger); if (!dependencyManager.AllSourceFiles.Any()) { diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Options.cs b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Options.cs index f6e21b32bbd..39c363a7753 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Options.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Options.cs @@ -23,18 +23,6 @@ namespace Semmle.Extraction.CSharp.Standalone } } - public override bool HandleOption(string key, string value) - { - switch (key) - { - case "dotnet": - dependencies.DotNetPath = value; - return true; - default: - return base.HandleOption(key, value); - } - } - public override bool HandleArgument(string arg) { return true; @@ -51,12 +39,6 @@ namespace Semmle.Extraction.CSharp.Standalone /// public string SrcDir { get; } = Directory.GetCurrentDirectory(); - private readonly DependencyOptions dependencies = new DependencyOptions(); - /// - /// Dependency fetching related options. - /// - public IDependencyOptions Dependencies => dependencies; - /// /// Whether errors were encountered parsing the arguments. /// @@ -76,7 +58,6 @@ namespace Semmle.Extraction.CSharp.Standalone output.WriteLine("Additional options:\n"); output.WriteLine(" --threads:nnn Specify number of threads (default=CPU cores)"); output.WriteLine(" --verbose Produce more output"); - output.WriteLine(" --pdb Cross-reference information from PDBs where available"); } private Options() diff --git a/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/StubGenerator.cs b/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/StubGenerator.cs index 32ae6d25161..0f8347eb0bc 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/StubGenerator.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/StubGenerator.cs @@ -36,7 +36,7 @@ public static class StubGenerator references.Add((reference, path)); }); - logger.Log(Severity.Info, $"Generating stubs for {references.Count} assemblies."); + logger.LogInfo($"Generating stubs for {references.Count} assemblies."); var compilation = CSharpCompilation.Create( "stubgenerator.dll", @@ -50,7 +50,7 @@ public static class StubGenerator }); stopWatch.Stop(); - logger.Log(Severity.Info, $"Stub generation took {stopWatch.Elapsed}."); + logger.LogInfo($"Stub generation took {stopWatch.Elapsed}."); return stubPaths.ToArray(); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Assembly.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Assembly.cs index a997b7129df..a826aa5e02c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Assembly.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Assembly.cs @@ -9,19 +9,20 @@ namespace Semmle.Extraction.CSharp.Entities private readonly string assemblyPath; private readonly IAssemblySymbol assembly; + private readonly bool isOutputAssembly; private Assembly(Context cx, Microsoft.CodeAnalysis.Location? init) : base(cx, init) { - if (init is null) + isOutputAssembly = init is null; + if (isOutputAssembly) { - // This is the output assembly assemblyPath = cx.Extractor.OutputPath; assembly = cx.Compilation.Assembly; } else { - assembly = init.MetadataModule!.ContainingAssembly; + assembly = init!.MetadataModule!.ContainingAssembly; var identity = assembly.Identity; var idString = identity.Name + " " + identity.Version; assemblyPath = cx.Extractor.GetAssemblyFile(idString); @@ -32,8 +33,13 @@ namespace Semmle.Extraction.CSharp.Entities { if (assemblyPath is not null) { - trapFile.assemblies(this, File.Create(Context, assemblyPath), assembly.ToString() ?? "", - assembly.Identity.Name, assembly.Identity.Version.ToString()); + var isBuildlessOutputAssembly = isOutputAssembly && Context.Extractor.Mode.HasFlag(ExtractorMode.Standalone); + var identifier = isBuildlessOutputAssembly + ? "" + : assembly.ToString() ?? ""; + var name = isBuildlessOutputAssembly ? "" : assembly.Identity.Name; + var version = isBuildlessOutputAssembly ? "" : assembly.Identity.Version.ToString(); + trapFile.assemblies(this, File.Create(Context, assemblyPath), identifier, name, version); } } @@ -68,8 +74,16 @@ namespace Semmle.Extraction.CSharp.Entities public override void WriteId(EscapingTextWriter trapFile) { - trapFile.Write(assembly.ToString()); - if (!(assemblyPath is null)) + if (isOutputAssembly && Context.Extractor.Mode.HasFlag(ExtractorMode.Standalone)) + { + trapFile.Write("buildlessOutputAssembly"); + } + else + { + trapFile.Write(assembly.ToString()); + } + + if (assemblyPath is not null) { trapFile.Write("#file:///"); trapFile.Write(assemblyPath.Replace("\\", "/")); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/CachedSymbol.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/CachedSymbol.cs index cc8357ee4ca..5c72aa4d90e 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/CachedSymbol.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/CachedSymbol.cs @@ -53,6 +53,7 @@ namespace Semmle.Extraction.CSharp.Entities trapFile.type_annotation(this, Kinds.TypeAnnotation.Ref); break; case RefKind.RefReadOnly: + case RefKind.RefReadOnlyParameter: trapFile.type_annotation(this, Kinds.TypeAnnotation.ReadonlyRef); break; } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/NamespaceDeclaration.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/NamespaceDeclaration.cs index f90bf5355e3..12684c304a4 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/NamespaceDeclaration.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/NamespaceDeclaration.cs @@ -27,7 +27,12 @@ namespace Semmle.Extraction.CSharp.Entities public override void Populate(TextWriter trapFile) { - var @namespace = (INamespaceSymbol)Context.GetModel(node).GetSymbolInfo(node.Name).Symbol!; + var @namespace = (INamespaceSymbol?)Context.GetModel(node).GetSymbolInfo(node.Name).Symbol; + if (@namespace is null) + { + throw new InternalError(node, "Namespace symbol not found"); + } + var ns = Namespace.Create(Context, @namespace); trapFile.namespace_declarations(this, ns); trapFile.namespace_declaration_location(this, Context.CreateLocation(node.Name.GetLocation())); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Parameter.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Parameter.cs index b0ef221e5e3..5843418255c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Parameter.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Parameter.cs @@ -24,7 +24,13 @@ namespace Semmle.Extraction.CSharp.Entities public enum Kind { - None, Ref, Out, Params, This, In + None = 0, + Ref = 1, + Out = 2, + Params = 3, + This = 4, + In = 5, + RefReadOnly = 6 } protected virtual int Ordinal => Symbol.Ordinal; @@ -41,6 +47,8 @@ namespace Semmle.Extraction.CSharp.Entities return Kind.Ref; case RefKind.In: return Kind.In; + case RefKind.RefReadOnlyParameter: + return Kind.RefReadOnly; default: if (Symbol.IsParams) return Kind.Params; diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs index 2f56bbfa3cc..57ce2f7827c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; +using System.Threading; using System.Threading.Tasks; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; @@ -23,8 +24,6 @@ namespace Semmle.Extraction.CSharp private protected Entities.Compilation? compilationEntity; private IDisposable? compilationTrapFile; - private readonly object progressMutex = new object(); - // The bulk of the extraction work, potentially executed in parallel. protected readonly List extractionTasks = new List(); private int taskCount = 0; @@ -67,9 +66,6 @@ namespace Semmle.Extraction.CSharp { foreach (var assembly in compilation.References.OfType()) { - // CIL first - it takes longer. - if (options.CIL) - extractionTasks.Add(() => DoExtractCIL(assembly)); extractionTasks.Add(() => DoAnalyseReferenceAssembly(assembly)); } } @@ -131,6 +127,9 @@ namespace Semmle.Extraction.CSharp var skipExtraction = options.Cache && File.Exists(trapWriter.TrapFile); + var currentTaskId = IncrementTaskCount(); + ReportProgressTaskStarted(currentTaskId, assemblyPath); + if (!skipExtraction) { /* Note on parallel builds: @@ -167,7 +166,7 @@ namespace Semmle.Extraction.CSharp } } - ReportProgress(assemblyPath, trapWriter.TrapFile, stopwatch.Elapsed, skipExtraction ? AnalysisAction.UpToDate : AnalysisAction.Extracted); + ReportProgressTaskDone(currentTaskId, assemblyPath, trapWriter.TrapFile, stopwatch.Elapsed, skipExtraction ? AnalysisAction.UpToDate : AnalysisAction.Extracted); } catch (Exception ex) // lgtm[cs/catch-of-all-exceptions] { @@ -175,15 +174,6 @@ namespace Semmle.Extraction.CSharp } } - private void DoExtractCIL(PortableExecutableReference r) - { - var stopwatch = new Stopwatch(); - stopwatch.Start(); - CIL.Analyser.ExtractCIL(r.FilePath!, Logger, options, out var trapFile, out var extracted); - stopwatch.Stop(); - ReportProgress(r.FilePath, trapFile, stopwatch.Elapsed, extracted ? AnalysisAction.Extracted : AnalysisAction.UpToDate); - } - private void DoExtractTree(SyntaxTree tree) { try @@ -201,6 +191,9 @@ namespace Semmle.Extraction.CSharp upToDate = options.Fast && FileIsUpToDate(sourcePath, trapWriter.TrapFile); + var currentTaskId = IncrementTaskCount(); + ReportProgressTaskStarted(currentTaskId, sourcePath); + if (!upToDate) { var cx = new Context(extractor, compilation.Clone(), trapWriter, new SourceScope(tree), addAssemblyTrapPrefix); @@ -221,7 +214,7 @@ namespace Semmle.Extraction.CSharp cx.PopulateAll(); } - ReportProgress(sourcePath, trapPath, stopwatch.Elapsed, upToDate ? AnalysisAction.UpToDate : AnalysisAction.Extracted); + ReportProgressTaskDone(currentTaskId, sourcePath, trapPath, stopwatch.Elapsed, upToDate ? AnalysisAction.UpToDate : AnalysisAction.Extracted); } catch (Exception ex) // lgtm[cs/catch-of-all-exceptions] { @@ -234,6 +227,11 @@ namespace Semmle.Extraction.CSharp try { var assemblyPath = extractor.OutputPath; + var stopwatch = new Stopwatch(); + stopwatch.Start(); + var currentTaskId = IncrementTaskCount(); + ReportProgressTaskStarted(currentTaskId, assemblyPath); + var transformedAssemblyPath = PathTransformer.Transform(assemblyPath); var assembly = compilation.Assembly; var trapWriter = transformedAssemblyPath.CreateTrapWriter(Logger, options.TrapCompression, discardDuplicates: false); @@ -243,6 +241,8 @@ namespace Semmle.Extraction.CSharp compilationEntity = Entities.Compilation.Create(cx); extractor.CompilationInfos.ForEach(ci => trapWriter.Writer.compilation_info(compilationEntity, ci.key, ci.value)); + + ReportProgressTaskDone(currentTaskId, assemblyPath, trapWriter.TrapFile, stopwatch.Elapsed, AnalysisAction.Extracted); } catch (Exception ex) // lgtm[cs/catch-of-all-exceptions] { @@ -279,10 +279,19 @@ namespace Semmle.Extraction.CSharp } } - private void ReportProgress(string src, string output, TimeSpan time, AnalysisAction action) + private int IncrementTaskCount() { - lock (progressMutex) - progressMonitor.Analysed(++taskCount, extractionTasks.Count, src, output, time, action); + return Interlocked.Increment(ref taskCount); + } + + private void ReportProgressTaskStarted(int currentCount, string src) + { + progressMonitor.Started(currentCount, extractionTasks.Count, src); + } + + private void ReportProgressTaskDone(int currentCount, string src, string output, TimeSpan time, AnalysisAction action) + { + progressMonitor.Analysed(currentCount, extractionTasks.Count, src, output, time, action); } /// diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs index 86677f68620..22a55849a02 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs @@ -47,6 +47,8 @@ namespace Semmle.Extraction.CSharp } } + public void Started(int item, int total, string source) { } + public void MissingNamespace(string @namespace) { } public void MissingSummary(int types, int namespaces) { } @@ -282,9 +284,14 @@ namespace Semmle.Extraction.CSharp try { using var file = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read); - var st = CSharpSyntaxTree.ParseText(SourceText.From(file, encoding), parseOptions, path); + analyser.Logger.Log(Severity.Trace, $"Parsing source file: '{path}'"); + var tree = CSharpSyntaxTree.ParseText(SourceText.From(file, encoding), parseOptions, path); + analyser.Logger.Log(Severity.Trace, $"Source file parsed: '{path}'"); + lock (ret) - ret.Add(st); + { + ret.Add(tree); + } } catch (IOException ex) { diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/IProgressMonitor.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/IProgressMonitor.cs index 8f0fdb1adc0..3fc1e16c843 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/IProgressMonitor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/IProgressMonitor.cs @@ -19,6 +19,11 @@ namespace Semmle.Extraction.CSharp /// What action was taken for the file. void Analysed(int item, int total, string source, string output, TimeSpan time, AnalysisAction action); + /// + /// Callback that processing of a particular item has been started. + /// + void Started(int item, int total, string source); + /// /// A "using namespace" directive was seen but the given /// namespace could not be found. diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Semmle.Extraction.CSharp.csproj b/csharp/extractor/Semmle.Extraction.CSharp/Semmle.Extraction.CSharp.csproj index 17943c6e21b..2a59f3716ce 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Semmle.Extraction.CSharp.csproj +++ b/csharp/extractor/Semmle.Extraction.CSharp/Semmle.Extraction.CSharp.csproj @@ -9,7 +9,6 @@ enable - diff --git a/csharp/extractor/Semmle.Extraction.Tests/Options.cs b/csharp/extractor/Semmle.Extraction.Tests/Options.cs index 492d5ce5f5e..a20788cd244 100644 --- a/csharp/extractor/Semmle.Extraction.Tests/Options.cs +++ b/csharp/extractor/Semmle.Extraction.Tests/Options.cs @@ -22,14 +22,12 @@ namespace Semmle.Extraction.Tests { options = CSharp.Options.CreateWithEnvironment(Array.Empty()); Assert.True(options.Cache); - Assert.False(options.CIL); Assert.Null(options.Framework); Assert.Null(options.CompilerName); Assert.Empty(options.CompilerArguments); Assert.True(options.Threads >= 1); Assert.Equal(Verbosity.Info, options.LegacyVerbosity); Assert.False(options.Console); - Assert.False(options.PDB); Assert.False(options.Fast); Assert.Equal(TrapWriter.CompressionMode.Brotli, options.TrapCompression); } @@ -48,25 +46,6 @@ namespace Semmle.Extraction.Tests Assert.False(options.Cache); } - [Fact] - public void CIL() - { - options = CSharp.Options.CreateWithEnvironment(Array.Empty()); - Assert.False(options.CIL); - - Environment.SetEnvironmentVariable("CODEQL_EXTRACTOR_CSHARP_OPTION_CIL", "false"); - options = CSharp.Options.CreateWithEnvironment(Array.Empty()); - Assert.False(options.CIL); - - Environment.SetEnvironmentVariable("CODEQL_EXTRACTOR_CSHARP_OPTION_CIL", "true"); - options = CSharp.Options.CreateWithEnvironment(Array.Empty()); - Assert.True(options.CIL); - - Environment.SetEnvironmentVariable("CODEQL_EXTRACTOR_CSHARP_OPTION_CIL", null); - options = CSharp.Options.CreateWithEnvironment(Array.Empty()); - Assert.False(options.CIL); - } - [Fact] public void CompilerArguments() { @@ -141,13 +120,6 @@ namespace Semmle.Extraction.Tests Assert.True(options.Console); } - [Fact] - public void PDB() - { - options = CSharp.Options.CreateWithEnvironment(new string[] { "--pdb" }); - Assert.True(options.PDB); - } - [Fact] public void Compiler() { diff --git a/csharp/extractor/Semmle.Extraction.Tests/Runtime.cs b/csharp/extractor/Semmle.Extraction.Tests/Runtime.cs index 0d4ed6c4b92..17bc477bde8 100644 --- a/csharp/extractor/Semmle.Extraction.Tests/Runtime.cs +++ b/csharp/extractor/Semmle.Extraction.Tests/Runtime.cs @@ -47,7 +47,7 @@ namespace Semmle.Extraction.Tests "Microsoft.NETCore.App 7.0.2 [/path/dotnet/shared/Microsoft.NETCore.App]" }; var dotnet = new DotNetStub(listedRuntimes, null!); - var runtime = new Runtime(dotnet, new LoggerStub()); + var runtime = new Runtime(dotnet); // Execute var runtimes = runtime.GetNewestRuntimes(); @@ -73,7 +73,7 @@ namespace Semmle.Extraction.Tests "Microsoft.NETCore.App 8.0.0-preview.5.23280.8 [/path/dotnet/shared/Microsoft.NETCore.App]" }; var dotnet = new DotNetStub(listedRuntimes, null!); - var runtime = new Runtime(dotnet, new LoggerStub()); + var runtime = new Runtime(dotnet); // Execute var runtimes = runtime.GetNewestRuntimes(); @@ -96,7 +96,7 @@ namespace Semmle.Extraction.Tests "Microsoft.NETCore.App 8.0.0-preview.5.23280.8 [/path/dotnet/shared/Microsoft.NETCore.App]" }; var dotnet = new DotNetStub(listedRuntimes, null!); - var runtime = new Runtime(dotnet, new LoggerStub()); + var runtime = new Runtime(dotnet); // Execute var runtimes = runtime.GetNewestRuntimes(); @@ -125,7 +125,7 @@ namespace Semmle.Extraction.Tests @"Microsoft.WindowsDesktop.App 7.0.4 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]" }; var dotnet = new DotNetStub(listedRuntimes, null!); - var runtime = new Runtime(dotnet, new LoggerStub()); + var runtime = new Runtime(dotnet); // Execute var runtimes = runtime.GetNewestRuntimes(); diff --git a/csharp/extractor/Semmle.Extraction/Extractor/Extractor.cs b/csharp/extractor/Semmle.Extraction/Extractor/Extractor.cs index 362b7910c56..db0b30fb2b8 100644 --- a/csharp/extractor/Semmle.Extraction/Extractor/Extractor.cs +++ b/csharp/extractor/Semmle.Extraction/Extractor/Extractor.cs @@ -43,7 +43,7 @@ namespace Semmle.Extraction ++Errors; if (Errors == maxErrors) { - Logger.Log(Severity.Info, " Stopping logging after {0} errors", Errors); + Logger.LogInfo(" Stopping logging after {0} errors", Errors); } } diff --git a/csharp/extractor/Semmle.Extraction/Options.cs b/csharp/extractor/Semmle.Extraction/Options.cs index 576d7a4762e..3aa704e60c5 100644 --- a/csharp/extractor/Semmle.Extraction/Options.cs +++ b/csharp/extractor/Semmle.Extraction/Options.cs @@ -55,21 +55,11 @@ namespace Semmle.Extraction /// public bool Console { get; private set; } = false; - /// - /// Holds if CIL should be extracted. - /// - public bool CIL { get; private set; } = false; - /// /// Holds if assemblies shouldn't be extracted twice. /// public bool Cache { get; private set; } = true; - /// - /// Whether to extract PDB information. - /// - public bool PDB { get; private set; } = false; - /// /// Whether "fast extraction mode" has been enabled. /// @@ -102,9 +92,6 @@ namespace Semmle.Extraction return true; } return false; - case "cil": - CIL = Boolean.Parse(value); - return true; default: return false; } @@ -128,12 +115,7 @@ namespace Semmle.Extraction case "cache": Cache = value; return true; - case "pdb": - PDB = value; - CIL = true; - return true; case "fast": - CIL = !value; Fast = value; return true; case "qltest": diff --git a/csharp/extractor/Semmle.Extraction/TrapWriter.cs b/csharp/extractor/Semmle.Extraction/TrapWriter.cs index 7f2c38466c0..aff9983dd7c 100644 --- a/csharp/extractor/Semmle.Extraction/TrapWriter.cs +++ b/csharp/extractor/Semmle.Extraction/TrapWriter.cs @@ -227,7 +227,7 @@ namespace Semmle.Extraction { // If this happened, it was probably because the same file was compiled multiple times. // In any case, this is not a fatal error. - logger.Log(Severity.Warning, "Problem archiving " + dest + ": " + ex); + logger.LogWarning("Problem archiving " + dest + ": " + ex); } } diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/BuildActions.cs b/csharp/extractor/Semmle.Util/BuildActions.cs similarity index 92% rename from csharp/autobuilder/Semmle.Autobuild.Shared/BuildActions.cs rename to csharp/extractor/Semmle.Util/BuildActions.cs index 1788f525367..e3a4e7ecafe 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/BuildActions.cs +++ b/csharp/extractor/Semmle.Util/BuildActions.cs @@ -8,7 +8,7 @@ using System.Runtime.InteropServices; using System.Xml; using Semmle.Util; -namespace Semmle.Autobuild.Shared +namespace Semmle.Util { public delegate void BuildOutputHandler(string? data); @@ -287,4 +287,30 @@ namespace Semmle.Autobuild.Shared public static IBuildActions Instance { get; } = new SystemBuildActions(); } + + public static class BuildActionExtensions + { + private static void FindFiles(this IBuildActions actions, string dir, int depth, int? maxDepth, IList<(string, int)> results) + { + foreach (var f in actions.EnumerateFiles(dir)) + { + results.Add((f, depth)); + } + + if (depth < maxDepth) + { + foreach (var d in actions.EnumerateDirectories(dir)) + { + actions.FindFiles(d, depth + 1, maxDepth, results); + } + } + } + + public static (string path, int depth)[] FindFiles(this IBuildActions actions, string dir, int? maxDepth) + { + var results = new List<(string, int)>(); + actions.FindFiles(dir, 0, maxDepth, results); + return results.OrderBy(f => f.Item2).ToArray(); + } + } } diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/BuildScript.cs b/csharp/extractor/Semmle.Util/BuildScript.cs similarity index 99% rename from csharp/autobuilder/Semmle.Autobuild.Shared/BuildScript.cs rename to csharp/extractor/Semmle.Util/BuildScript.cs index 573c6f3043b..9092463afda 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/BuildScript.cs +++ b/csharp/extractor/Semmle.Util/BuildScript.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.IO; -namespace Semmle.Autobuild.Shared +namespace Semmle.Util { /// /// A build script. diff --git a/csharp/extractor/Semmle.Util/CanonicalPathCache.cs b/csharp/extractor/Semmle.Util/CanonicalPathCache.cs index 87fcb3717bd..e7e4c07c36e 100644 --- a/csharp/extractor/Semmle.Util/CanonicalPathCache.cs +++ b/csharp/extractor/Semmle.Util/CanonicalPathCache.cs @@ -268,7 +268,7 @@ namespace Semmle.Util catch // lgtm[cs/catch-of-all-exceptions] { // Failed to late-bind a suitable library. - logger.Log(Severity.Warning, "Preserving symlinks in canonical paths"); + logger.LogWarning("Preserving symlinks in canonical paths"); pathStrategy = new QueryDirectoryStrategy(); } break; diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/CommandBuilder.cs b/csharp/extractor/Semmle.Util/CommandBuilder.cs similarity index 99% rename from csharp/autobuilder/Semmle.Autobuild.Shared/CommandBuilder.cs rename to csharp/extractor/Semmle.Util/CommandBuilder.cs index 263f35f2fff..3d8f907f866 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/CommandBuilder.cs +++ b/csharp/extractor/Semmle.Util/CommandBuilder.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; -namespace Semmle.Autobuild.Shared +namespace Semmle.Util { /// /// Utility to construct a build command. diff --git a/csharp/extractor/Semmle.Util/CommandLineOptions.cs b/csharp/extractor/Semmle.Util/CommandLineOptions.cs index 8dfd4ea5479..f2cf332e07f 100644 --- a/csharp/extractor/Semmle.Util/CommandLineOptions.cs +++ b/csharp/extractor/Semmle.Util/CommandLineOptions.cs @@ -40,7 +40,7 @@ namespace Semmle.Util public static class OptionsExtensions { - private static readonly string[] ExtractorOptions = new[] { "trap_compression", "cil" }; + private static readonly string[] ExtractorOptions = ["trap_compression"]; private static List GetExtractorOptions() { var extractorOptions = new List(); diff --git a/csharp/extractor/Semmle.Util/FileUtils.cs b/csharp/extractor/Semmle.Util/FileUtils.cs index 09269e37e8b..094c4da3338 100644 --- a/csharp/extractor/Semmle.Util/FileUtils.cs +++ b/csharp/extractor/Semmle.Util/FileUtils.cs @@ -133,14 +133,14 @@ namespace Semmle.Util var directoryName = Path.GetDirectoryName(nested); if (directoryName is null) { - logger.Log(Severity.Warning, "Failed to get directory name from path '" + nested + "'."); + logger.LogWarning("Failed to get directory name from path '" + nested + "'."); throw new InvalidOperationException(); } Directory.CreateDirectory(directoryName); } catch (PathTooLongException) { - logger.Log(Severity.Warning, "Failed to create parent directory of '" + nested + "': Path too long."); + logger.LogWarning("Failed to create parent directory of '" + nested + "': Path too long."); throw; } return nested; diff --git a/csharp/ql/consistency-queries/DataFlowConsistency.ql b/csharp/ql/consistency-queries/DataFlowConsistency.ql index 59e5953f31f..2f34368b669 100644 --- a/csharp/ql/consistency-queries/DataFlowConsistency.ql +++ b/csharp/ql/consistency-queries/DataFlowConsistency.ql @@ -1,11 +1,10 @@ import csharp -import cil private import semmle.code.csharp.controlflow.internal.ControlFlowGraphImpl as ControlFlowGraphImpl private import semmle.code.csharp.dataflow.internal.DataFlowImplSpecific private import semmle.code.csharp.dataflow.internal.TaintTrackingImplSpecific private import codeql.dataflow.internal.DataFlowImplConsistency -private module Input implements InputSig { +private module Input implements InputSig { private import CsharpDataFlow private predicate isStaticAssignable(Assignable a) { a.(Modifiable).isStatic() } @@ -31,11 +30,6 @@ private module Input implements InputSig { n instanceof FlowInsensitiveFieldNode } - predicate missingLocationExclude(Node n) { - // Some CIL methods are missing locations - n.asParameter() instanceof CIL::Parameter - } - predicate postWithInFlowExclude(Node n) { n instanceof FlowSummaryNode or @@ -48,8 +42,6 @@ private module Input implements InputSig { not exists(LocalFlow::getAPostUpdateNodeForArg(n.getControlFlowNode())) or n instanceof ParamsArgumentNode - or - n.asExpr() instanceof CIL::Expr } predicate postHasUniquePreExclude(PostUpdateNode n) { @@ -107,4 +99,4 @@ private module Input implements InputSig { } } -import MakeConsistency +import MakeConsistency diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone/test.py b/csharp/ql/integration-tests/all-platforms/cshtml_standalone/test.py index b1f535c1727..64b9f13b36b 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone/test.py +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone/test.py @@ -1,4 +1,4 @@ import os from create_database_utils import * -run_codeql_database_create(lang="csharp", extra_args=["--extractor-option=buildless=true"]) +run_codeql_database_create(lang="csharp", extra_args=["--build-mode=none"]) diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/test.py b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/test.py index 0b433134e5a..3e00c972b00 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/test.py +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/test.py @@ -2,4 +2,4 @@ import os from create_database_utils import * os.environ['CODEQL_EXTRACTOR_CSHARP_BUILDLESS_EXTRACT_WEB_VIEWS'] = 'false' -run_codeql_database_create(lang="csharp", extra_args=["--extractor-option=buildless=true"]) +run_codeql_database_create(lang="csharp", extra_args=["--build-mode=none"]) diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/test.py b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/test.py index b1f535c1727..64b9f13b36b 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/test.py +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/test.py @@ -1,4 +1,4 @@ import os from create_database_utils import * -run_codeql_database_create(lang="csharp", extra_args=["--extractor-option=buildless=true"]) +run_codeql_database_create(lang="csharp", extra_args=["--build-mode=none"]) diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/test.py b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/test.py index b1f535c1727..64b9f13b36b 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/test.py +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/test.py @@ -1,4 +1,4 @@ import os from create_database_utils import * -run_codeql_database_create(lang="csharp", extra_args=["--extractor-option=buildless=true"]) +run_codeql_database_create(lang="csharp", extra_args=["--build-mode=none"]) diff --git a/csharp/ql/integration-tests/all-platforms/dotnet_build/Program.cs b/csharp/ql/integration-tests/all-platforms/dotnet_build/Program.cs index e9708d0b5d2..bd44629f7e2 100644 --- a/csharp/ql/integration-tests/all-platforms/dotnet_build/Program.cs +++ b/csharp/ql/integration-tests/all-platforms/dotnet_build/Program.cs @@ -1 +1 @@ -Console.WriteLine(args[0]); +Console.WriteLine($"{string.Join(",", args)}"); diff --git a/csharp/ql/integration-tests/all-platforms/dotnet_build/test.py b/csharp/ql/integration-tests/all-platforms/dotnet_build/test.py index 8bc8d33ba1d..6680a708e70 100644 --- a/csharp/ql/integration-tests/all-platforms/dotnet_build/test.py +++ b/csharp/ql/integration-tests/all-platforms/dotnet_build/test.py @@ -1,5 +1,16 @@ from create_database_utils import * from diagnostics_test_utils import * -run_codeql_database_create(['dotnet build'], db=None, lang="csharp") -check_diagnostics() +def check_build_out(msg, s): + if "[build-stdout] " + msg not in s: + raise Exception("The C# tracer did not interpret the dotnet path-to-application command correctly.") + +run_codeql_database_create(['dotnet build'], test_db="test1-db", lang="csharp") +check_diagnostics(test_db="test1-db") + +# This test checks that we don't inject any flags when running the application using `dotnet` +my_dir = "my_program" +my_abs_path = os.path.abspath(f"{my_dir}/dotnet_build.dll") +s = run_codeql_database_create_stdout(['dotnet clean', 'rm -rf test1-db', 'dotnet build -o my_program', f'dotnet {my_abs_path} build is not a subcommand'], "test2-db", "csharp") +check_build_out("build,is,not,a,subcommand", s) +check_diagnostics(test_db="test2-db") diff --git a/csharp/ql/integration-tests/all-platforms/dotnet_run/test.py b/csharp/ql/integration-tests/all-platforms/dotnet_run/test.py index ef306b1842b..d1a44bdb1fe 100644 --- a/csharp/ql/integration-tests/all-platforms/dotnet_run/test.py +++ b/csharp/ql/integration-tests/all-platforms/dotnet_run/test.py @@ -1,65 +1,57 @@ from create_database_utils import * from diagnostics_test_utils import * -def run_codeql_database_create_stdout(args, dbname): - stdout = open(dbname + "file.txt", 'w+') - run_codeql_database_create(args, test_db=dbname, db=None, stdout=stdout, lang="csharp") - stdout.seek(0) - s = stdout.read() - stdout.close() - return s - def check_build_out(msg, s): if "[build-stdout] " + msg not in s: - raise Exception("The C# extractor did not interpret the 'dotnet run' command correctly") + raise Exception("The C# tracer did not interpret the 'dotnet run' command correctly") # no arguments -s = run_codeql_database_create_stdout(['dotnet run'], "test-db") +s = run_codeql_database_create_stdout(['dotnet run'], "test-db", "csharp") check_build_out("Default reply", s) check_diagnostics() # no arguments, but `--` -s = run_codeql_database_create_stdout(['dotnet clean', 'rm -rf test-db', 'dotnet run --'], "test2-db") +s = run_codeql_database_create_stdout(['dotnet clean', 'rm -rf test-db', 'dotnet run --'], "test2-db", "csharp") check_build_out("Default reply", s) check_diagnostics(test_db="test2-db") # one argument, no `--` -s = run_codeql_database_create_stdout(['dotnet clean', 'rm -rf test2-db', 'dotnet run hello'], "test3-db") +s = run_codeql_database_create_stdout(['dotnet clean', 'rm -rf test2-db', 'dotnet run hello'], "test3-db", "csharp") check_build_out("Default reply", s) check_diagnostics(test_db="test3-db") # one argument, but `--` -s = run_codeql_database_create_stdout(['dotnet clean', 'rm -rf test3-db', 'dotnet run -- hello'], "test4-db") +s = run_codeql_database_create_stdout(['dotnet clean', 'rm -rf test3-db', 'dotnet run -- hello'], "test4-db", "csharp") check_build_out("Default reply", s) check_diagnostics(test_db="test4-db") # two arguments, no `--` -s = run_codeql_database_create_stdout(['dotnet clean', 'rm -rf test4-db', 'dotnet run hello world'], "test5-db") +s = run_codeql_database_create_stdout(['dotnet clean', 'rm -rf test4-db', 'dotnet run hello world'], "test5-db", "csharp") check_build_out("hello, world", s) check_diagnostics(test_db="test5-db") # two arguments, and `--` -s = run_codeql_database_create_stdout(['dotnet clean', 'rm -rf test5-db', 'dotnet run -- hello world'], "test6-db") +s = run_codeql_database_create_stdout(['dotnet clean', 'rm -rf test5-db', 'dotnet run -- hello world'], "test6-db", "csharp") check_build_out("hello, world", s) check_diagnostics(test_db="test6-db") # shared compilation enabled; tracer should override by changing the command # to `dotnet run -p:UseSharedCompilation=true -p:UseSharedCompilation=false -- hello world` -s = run_codeql_database_create_stdout(['dotnet clean', 'rm -rf test6-db', 'dotnet run -p:UseSharedCompilation=true -- hello world'], "test7-db") +s = run_codeql_database_create_stdout(['dotnet clean', 'rm -rf test6-db', 'dotnet run -p:UseSharedCompilation=true -- hello world'], "test7-db", "csharp") check_build_out("hello, world", s) check_diagnostics(test_db="test7-db") # option passed into `dotnet run` -s = run_codeql_database_create_stdout(['dotnet clean', 'rm -rf test7-db', 'dotnet build', 'dotnet run --no-build hello world'], "test8-db") +s = run_codeql_database_create_stdout(['dotnet clean', 'rm -rf test7-db', 'dotnet build', 'dotnet run --no-build hello world'], "test8-db", "csharp") check_build_out("hello, world", s) check_diagnostics(test_db="test8-db") # two arguments, no '--' (first argument quoted) -s = run_codeql_database_create_stdout(['dotnet clean', 'rm -rf test8-db', 'dotnet run "hello world part1" part2'], "test9-db") +s = run_codeql_database_create_stdout(['dotnet clean', 'rm -rf test8-db', 'dotnet run "hello world part1" part2'], "test9-db", "csharp") check_build_out("hello world part1, part2", s) check_diagnostics(test_db="test9-db") # two arguments, no '--' (second argument quoted) and using dotnet to execute dotnet -s = run_codeql_database_create_stdout(['dotnet clean', 'rm -rf test9-db', 'dotnet dotnet run part1 "hello world part2"'], "test10-db") +s = run_codeql_database_create_stdout(['dotnet clean', 'rm -rf test9-db', 'dotnet dotnet run part1 "hello world part2"'], "test10-db", "csharp") check_build_out("part1, hello world part2", s) check_diagnostics(test_db="test10-db") diff --git a/csharp/ql/integration-tests/all-platforms/standalone/test.py b/csharp/ql/integration-tests/all-platforms/standalone/test.py index 72f47e38d22..a17966e148a 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone/test.py +++ b/csharp/ql/integration-tests/all-platforms/standalone/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) +run_codeql_database_create([], lang="csharp", extra_args=["--build-mode=none"]) diff --git a/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/test.py b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/test.py index 72f47e38d22..a17966e148a 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/test.py +++ b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) +run_codeql_database_create([], lang="csharp", extra_args=["--build-mode=none"]) diff --git a/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/test.py b/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/test.py index 7173ed4c6c2..c372671b20b 100644 --- a/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/test.py +++ b/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/test.py @@ -5,4 +5,4 @@ path = b'\xd2abcd.cs' with open(path, 'w') as file: file.write('class X { }\n') -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) +run_codeql_database_create([], lang="csharp", extra_args=["--build-mode=none"]) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies/test.py index 72f47e38d22..a17966e148a 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies/test.py +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) +run_codeql_database_create([], lang="csharp", extra_args=["--build-mode=none"]) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/test.py index 72f47e38d22..a17966e148a 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/test.py +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) +run_codeql_database_create([], lang="csharp", extra_args=["--build-mode=none"]) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/test.py index ddd46a7f1e2..277f7d92160 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/test.py +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_no_framework/test.py @@ -2,4 +2,4 @@ from create_database_utils import * import os os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_DOTNET_FRAMEWORK_REFERENCES"] = "/non-existent-path" -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) +run_codeql_database_create([], lang="csharp", extra_args=["--build-mode=none"]) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/test.py index 72f47e38d22..a17966e148a 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/test.py +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) +run_codeql_database_create([], lang="csharp", extra_args=["--build-mode=none"]) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.expected new file mode 100644 index 00000000000..fad4c55aca5 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.expected @@ -0,0 +1,17 @@ +| Failed project restore with package source error | 1.0 | +| Failed solution restore with package source error | 0.0 | +| Fallback nuget restore | 1.0 | +| Project files on filesystem | 1.0 | +| Resolved assembly conflicts | 7.0 | +| Restored .NET framework variants | 0.0 | +| Restored projects through solution files | 0.0 | +| Solution files on filesystem | 1.0 | +| Source files generated | 0.0 | +| Source files on filesystem | 1.0 | +| Successfully ran fallback nuget restore | 1.0 | +| Successfully restored project files | 0.0 | +| Successfully restored solution files | 1.0 | +| Unresolved references | 0.0 | +| UseWPF set | 0.0 | +| UseWindowsForms set | 0.0 | +| WebView extraction enabled | 1.0 | diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.ql new file mode 100644 index 00000000000..87a9e20f027 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.ql @@ -0,0 +1,14 @@ +import csharp +import semmle.code.csharp.commons.Diagnostics + +query predicate compilationInfo(string key, float value) { + key != "Resolved references" and + exists(Compilation c, string infoKey, string infoValue | infoValue = c.getInfo(infoKey) | + key = infoKey and + value = infoValue.toFloat() + or + not exists(infoValue.toFloat()) and + key = infoKey + ": " + infoValue and + value = 1 + ) +} diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/test.py index 72f47e38d22..a17966e148a 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/test.py +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) +run_codeql_database_create([], lang="csharp", extra_args=["--build-mode=none"]) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/test.py index 9142835c65f..ff2e3ba7d3b 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/test.py +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], source="proj", lang="csharp", extra_args=["--extractor-option=buildless=true"]) +run_codeql_database_create([], source="proj", lang="csharp", extra_args=["--build-mode=none"]) diff --git a/csharp/ql/integration-tests/windows-only/standalone_dependencies/test.py b/csharp/ql/integration-tests/windows-only/standalone_dependencies/test.py index 72f47e38d22..a17966e148a 100644 --- a/csharp/ql/integration-tests/windows-only/standalone_dependencies/test.py +++ b/csharp/ql/integration-tests/windows-only/standalone_dependencies/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) +run_codeql_database_create([], lang="csharp", extra_args=["--build-mode=none"]) diff --git a/csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md b/csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md new file mode 100644 index 00000000000..586b5341d29 --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-02-28-refreadonly-parameter.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* C# 12: Add extractor and QL library support for `ref readonly` parameters. diff --git a/csharp/ql/lib/change-notes/2024-03-04-deprecate-dotnet-and-cil.md b/csharp/ql/lib/change-notes/2024-03-04-deprecate-dotnet-and-cil.md new file mode 100644 index 00000000000..fea31bb8bbb --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-03-04-deprecate-dotnet-and-cil.md @@ -0,0 +1,4 @@ +--- +category: breaking +--- +* The QL library C# classes no longer extend their corresponding `DotNet` classes. Furthermore, CIL related data flow functionality has been deleted and all `DotNet` and `CIL` related classes have been deprecated. This effectively means that it no longer has any effect to enable CIL extraction. diff --git a/csharp/ql/lib/change-notes/2024-03-04-fixed-system.io.textreader-models.md b/csharp/ql/lib/change-notes/2024-03-04-fixed-system.io.textreader-models.md new file mode 100644 index 00000000000..a32f8a7c22c --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-03-04-fixed-system.io.textreader-models.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The models for `System.IO.TextReader` have been modified to better model the flow of tainted text from a `TextReader`. diff --git a/csharp/ql/lib/change-notes/2024-03-05-new-commandargs-and-environment-models.md b/csharp/ql/lib/change-notes/2024-03-05-new-commandargs-and-environment-models.md new file mode 100644 index 00000000000..0bee733157c --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-03-05-new-commandargs-and-environment-models.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* The .NET standard libraries APIs for accessing command line arguments and environment variables have been modeled using the `commandargs` and `environment` threat models. +* The `cs/assembly-path-injection` query has been modified so that it's sources rely on `ThreatModelFlowSource`. In order to restore results from command line arguments, you should enable the `commandargs` threat model. diff --git a/csharp/ql/lib/change-notes/2024-03-07-remove-cil-extractor.md b/csharp/ql/lib/change-notes/2024-03-07-remove-cil-extractor.md new file mode 100644 index 00000000000..36be2372b4e --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-03-07-remove-cil-extractor.md @@ -0,0 +1,4 @@ +--- +category: breaking +--- +* The CIL extractor has been deleted and the corresponding extractor option `cil` has been removed. It is no longer possible to do CIL extraction. diff --git a/csharp/ql/lib/change-notes/2024-03-07-update-system.net.http.httprequestmessage-models.md b/csharp/ql/lib/change-notes/2024-03-07-update-system.net.http.httprequestmessage-models.md new file mode 100644 index 00000000000..2ac3a1059c6 --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-03-07-update-system.net.http.httprequestmessage-models.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The models for `System.Net.Http.HttpRequestMessage` have been modified to better model the flow of tainted URIs. \ No newline at end of file diff --git a/csharp/ql/lib/change-notes/2024-03-11-csharp12-dotnet8.md b/csharp/ql/lib/change-notes/2024-03-11-csharp12-dotnet8.md new file mode 100644 index 00000000000..7111e8966d6 --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-03-11-csharp12-dotnet8.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Support for C# 12 / .NET8. diff --git a/csharp/ql/lib/change-notes/2024-03-11-registry-sources.md b/csharp/ql/lib/change-notes/2024-03-11-registry-sources.md new file mode 100644 index 00000000000..1d105049185 --- /dev/null +++ b/csharp/ql/lib/change-notes/2024-03-11-registry-sources.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added the `windows-registry` source kind and threat model to represent values which come from the registry on Windows. diff --git a/csharp/ql/lib/dotnet.qll b/csharp/ql/lib/dotnet.qll index b583edda18a..2814ac41fc1 100644 --- a/csharp/ql/lib/dotnet.qll +++ b/csharp/ql/lib/dotnet.qll @@ -2,4 +2,4 @@ * The default QL library for modeling .NET definitions for both C# and CIL code. */ -import semmle.code.dotnet.DotNet as DotNet +deprecated import semmle.code.dotnet.DotNet as DotNet diff --git a/csharp/ql/lib/ext/Microsoft.Extensions.Configuration.model.yml b/csharp/ql/lib/ext/Microsoft.Extensions.Configuration.model.yml new file mode 100644 index 00000000000..e07c669b5bd --- /dev/null +++ b/csharp/ql/lib/ext/Microsoft.Extensions.Configuration.model.yml @@ -0,0 +1,17 @@ +extensions: + - addsTo: + pack: codeql/csharp-all + extensible: sourceModel + data: + - ["Microsoft.Extensions.Configuration", "EnvironmentVariablesExtensions", False, "AddEnvironmentVariables", "", "", "Argument[0]", "environment", "manual"] + - ["Microsoft.Extensions.Configuration", "EnvironmentVariablesExtensions", False, "AddEnvironmentVariables", "", "", "ReturnValue", "environment", "manual"] + - addsTo: + pack: codeql/csharp-all + extensible: summaryModel + data: + - ["Microsoft.Extensions.Configuration", "IConfiguration", True, "get_Item", "(System.String)", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["Microsoft.Extensions.Configuration", "IConfigurationBuilder", True, "Build", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["Microsoft.Extensions.Configuration", "CommandLineConfigurationExtensions", False, "AddCommandLine", "", "", "Argument[1]", "Argument[0]", "taint", "manual"] + - ["Microsoft.Extensions.Configuration", "CommandLineConfigurationExtensions", False, "AddCommandLine", "(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[],System.Collections.Generic.IDictionary)", "", "Argument[2]", "Argument[0]", "taint", "manual"] + - ["Microsoft.Extensions.Configuration", "CommandLineConfigurationExtensions", False, "AddCommandLine", "", "", "Argument[1]", "ReturnValue", "taint", "manual"] + - ["Microsoft.Extensions.Configuration", "CommandLineConfigurationExtensions", False, "AddCommandLine", "(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[],System.Collections.Generic.IDictionary)", "", "Argument[2]", "ReturnValue", "taint", "manual"] \ No newline at end of file diff --git a/csharp/ql/lib/ext/Microsoft.Win32.model.yml b/csharp/ql/lib/ext/Microsoft.Win32.model.yml new file mode 100644 index 00000000000..c7e439f2910 --- /dev/null +++ b/csharp/ql/lib/ext/Microsoft.Win32.model.yml @@ -0,0 +1,9 @@ +extensions: + - addsTo: + pack: codeql/csharp-all + extensible: sourceModel + data: + - ["Microsoft.Win32", "Registry", False, "GetValue", "(System.String,System.String,System.Object)", "", "ReturnValue", "windows-registry", "manual"] + - ["Microsoft.Win32", "RegistryKey", False, "GetSubKeyNames", "()", "", "ReturnValue", "windows-registry", "manual"] + - ["Microsoft.Win32", "RegistryKey", False, "GetValue", "", "", "ReturnValue", "windows-registry", "manual"] + - ["Microsoft.Win32", "RegistryKey", False, "GetValueNames", "()", "", "ReturnValue", "windows-registry", "manual"] \ No newline at end of file diff --git a/csharp/ql/lib/ext/System.IO.model.yml b/csharp/ql/lib/ext/System.IO.model.yml index b03d68535de..e1120d5684e 100644 --- a/csharp/ql/lib/ext/System.IO.model.yml +++ b/csharp/ql/lib/ext/System.IO.model.yml @@ -89,14 +89,16 @@ extensions: - ["System.IO", "StreamReader", False, "StreamReader", "(System.String,System.Text.Encoding,System.Boolean,System.Int32)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["System.IO", "StringReader", False, "StringReader", "(System.String)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["System.IO", "TextReader", True, "Read", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - - ["System.IO", "TextReader", True, "Read", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "manual"] - - ["System.IO", "TextReader", True, "Read", "(System.Span)", "", "Argument[this]", "ReturnValue", "taint", "manual"] - - ["System.IO", "TextReader", True, "ReadAsync", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "manual"] - - ["System.IO", "TextReader", True, "ReadAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "ReturnValue", "taint", "manual"] - - ["System.IO", "TextReader", True, "ReadBlock", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "manual"] - - ["System.IO", "TextReader", True, "ReadBlock", "(System.Span)", "", "Argument[this]", "ReturnValue", "taint", "manual"] - - ["System.IO", "TextReader", True, "ReadBlockAsync", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "manual"] - - ["System.IO", "TextReader", True, "ReadBlockAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System.IO", "TextReader", True, "Read", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + - ["System.IO", "TextReader", True, "Read", "(System.Span)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + - ["System.IO", "TextReader", True, "ReadAsync", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + # Post-update nodes for `Memory` are currently unsupported. This model is provided for completeness + - ["System.IO", "TextReader", True, "ReadAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + - ["System.IO", "TextReader", True, "ReadBlock", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + - ["System.IO", "TextReader", True, "ReadBlock", "(System.Span)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + - ["System.IO", "TextReader", True, "ReadBlockAsync", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + # Post-update nodes for `Memory` are currently unsupported. This model is provided for completeness + - ["System.IO", "TextReader", True, "ReadBlockAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - ["System.IO", "TextReader", True, "ReadLine", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["System.IO", "TextReader", True, "ReadLineAsync", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["System.IO", "TextReader", True, "ReadToEnd", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] diff --git a/csharp/ql/lib/ext/System.Net.Http.model.yml b/csharp/ql/lib/ext/System.Net.Http.model.yml index 058718d30ac..7d4fbf87a57 100644 --- a/csharp/ql/lib/ext/System.Net.Http.model.yml +++ b/csharp/ql/lib/ext/System.Net.Http.model.yml @@ -8,6 +8,8 @@ extensions: pack: codeql/csharp-all extensible: summaryModel data: + - ["System.Net.Http", "HttpRequestMessage", False, "HttpRequestMessage", "(System.Net.Http.HttpMethod,System.String)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Net.Http", "HttpRequestMessage", False, "HttpRequestMessage", "(System.Net.Http.HttpMethod,System.String)", "", "Argument[1]", "Argument[this]", "taint", "manual"] - ["System.Net.Http", "HttpRequestOptions", False, "Add", "(System.Collections.Generic.KeyValuePair)", "", "Argument[0].Property[System.Collections.Generic.KeyValuePair`2.Key]", "Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key]", "value", "manual"] - ["System.Net.Http", "HttpRequestOptions", False, "Add", "(System.Collections.Generic.KeyValuePair)", "", "Argument[0].Property[System.Collections.Generic.KeyValuePair`2.Value]", "Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value]", "value", "manual"] - ["System.Net.Http", "MultipartContent", False, "Add", "(System.Net.Http.HttpContent)", "", "Argument[0]", "Argument[this].Element", "value", "manual"] diff --git a/csharp/ql/lib/ext/System.model.yml b/csharp/ql/lib/ext/System.model.yml index 36ce30e0ecb..7e37f7a48a9 100644 --- a/csharp/ql/lib/ext/System.model.yml +++ b/csharp/ql/lib/ext/System.model.yml @@ -6,6 +6,11 @@ extensions: - ["System", "Console", False, "Read", "", "", "ReturnValue", "local", "manual"] - ["System", "Console", False, "ReadKey", "", "", "ReturnValue", "local", "manual"] - ["System", "Console", False, "ReadLine", "", "", "ReturnValue", "local", "manual"] + - ["System", "Environment", False, "ExpandEnvironmentVariables", "(System.String)", "", "ReturnValue", "environment", "manual"] + - ["System", "Environment", False, "GetCommandLineArgs", "()", "", "ReturnValue", "commandargs", "manual"] + - ["System", "Environment", False, "get_CommandLine", "()", "", "ReturnValue", "commandargs", "manual"] + - ["System", "Environment", False, "GetEnvironmentVariable", "", "", "ReturnValue", "environment", "manual"] + - ["System", "Environment", False, "GetEnvironmentVariables", "", "", "ReturnValue", "environment", "manual"] - addsTo: pack: codeql/csharp-all extensible: summaryModel diff --git a/csharp/ql/lib/semmle/code/cil/Access.qll b/csharp/ql/lib/semmle/code/cil/Access.qll index 5fecd8acb10..9c23976543b 100644 --- a/csharp/ql/lib/semmle/code/cil/Access.qll +++ b/csharp/ql/lib/semmle/code/cil/Access.qll @@ -7,7 +7,7 @@ private import CIL /** An instruction that accesses a variable. */ -class Access extends Instruction, @cil_access { +deprecated class Access extends Instruction, @cil_access { /** Gets the declaration referenced by this instruction. */ Variable getTarget() { cil_access(this, result) } } @@ -16,59 +16,59 @@ class Access extends Instruction, @cil_access { * An instruction that accesses a variable. * This class is provided for consistency with the C# data model. */ -class VariableAccess extends Access, @cil_access { } +deprecated class VariableAccess extends Access, @cil_access { } /** An instruction that reads a variable. */ -class ReadAccess extends VariableAccess, Expr, @cil_read_access { +deprecated class ReadAccess extends VariableAccess, Expr, @cil_read_access { override Type getType() { result = this.getTarget().getType() } } /** An instruction yielding an address. */ -class ReadRef extends Expr, @cil_read_ref { } +deprecated class ReadRef extends Expr, @cil_read_ref { } /** An instruction that reads the address of a variable. */ -class ReadRefAccess extends ReadAccess, ReadRef { } +deprecated class ReadRefAccess extends ReadAccess, ReadRef { } /** An instruction that writes a variable. */ -class WriteAccess extends VariableAccess, @cil_write_access { +deprecated class WriteAccess extends VariableAccess, @cil_write_access { /** Gets the expression whose value is used in this variable write. */ Expr getExpr() { none() } } /** An instruction that accesses a parameter. */ -class ParameterAccess extends StackVariableAccess, @cil_arg_access { +deprecated class ParameterAccess extends StackVariableAccess, @cil_arg_access { override MethodParameter getTarget() { result = StackVariableAccess.super.getTarget() } } /** An instruction that reads a parameter. */ -class ParameterReadAccess extends ParameterAccess, ReadAccess { +deprecated class ParameterReadAccess extends ParameterAccess, ReadAccess { override int getPopCount() { result = 0 } } /** An instruction that writes to a parameter. */ -class ParameterWriteAccess extends ParameterAccess, WriteAccess { +deprecated class ParameterWriteAccess extends ParameterAccess, WriteAccess { override int getPopCount() { result = 1 } override Expr getExpr() { result = this.getOperand(0) } } /** An access to the `this` parameter. */ -class ThisAccess extends ParameterReadAccess { +deprecated class ThisAccess extends ParameterReadAccess { ThisAccess() { this.getTarget() instanceof ThisParameter } } /** An instruction that accesses a stack variable. */ -class StackVariableAccess extends VariableAccess, @cil_stack_access { +deprecated class StackVariableAccess extends VariableAccess, @cil_stack_access { override StackVariable getTarget() { result = VariableAccess.super.getTarget() } } /** An instruction that accesses a local variable. */ -class LocalVariableAccess extends StackVariableAccess, @cil_local_access { +deprecated class LocalVariableAccess extends StackVariableAccess, @cil_local_access { override LocalVariable getTarget() { result = StackVariableAccess.super.getTarget() } } /** An instruction that writes to a local variable. */ -class LocalVariableWriteAccess extends LocalVariableAccess, WriteAccess { +deprecated class LocalVariableWriteAccess extends LocalVariableAccess, WriteAccess { override int getPopCount() { result = 1 } override Expr getExpr() { result = this.getOperand(0) } @@ -77,12 +77,12 @@ class LocalVariableWriteAccess extends LocalVariableAccess, WriteAccess { } /** An instruction that reads a local variable. */ -class LocalVariableReadAccess extends LocalVariableAccess, ReadAccess { +deprecated class LocalVariableReadAccess extends LocalVariableAccess, ReadAccess { override int getPopCount() { result = 0 } } /** An instruction that accesses a field. */ -class FieldAccess extends VariableAccess, @cil_field_access { +deprecated class FieldAccess extends VariableAccess, @cil_field_access { override Field getTarget() { result = VariableAccess.super.getTarget() } override string getExtra() { result = this.getTarget().getName() } @@ -92,7 +92,7 @@ class FieldAccess extends VariableAccess, @cil_field_access { } /** An instruction that reads a field. */ -abstract class FieldReadAccess extends FieldAccess, ReadAccess { } +abstract deprecated class FieldReadAccess extends FieldAccess, ReadAccess { } /** An instruction that writes a field. */ -abstract class FieldWriteAccess extends FieldAccess, WriteAccess { } +abstract deprecated class FieldWriteAccess extends FieldAccess, WriteAccess { } diff --git a/csharp/ql/lib/semmle/code/cil/Attribute.qll b/csharp/ql/lib/semmle/code/cil/Attribute.qll index 1ec53603463..431438fb5e9 100644 --- a/csharp/ql/lib/semmle/code/cil/Attribute.qll +++ b/csharp/ql/lib/semmle/code/cil/Attribute.qll @@ -4,7 +4,7 @@ private import CIL private import semmle.code.csharp.Location as CS /** An attribute to a declaration, such as a method, field, type or parameter. */ -class Attribute extends Element, @cil_attribute { +deprecated class Attribute extends Element, @cil_attribute { /** Gets the declaration this attribute is attached to. */ Declaration getDeclaration() { cil_attribute(this, result, _) } @@ -29,7 +29,7 @@ class Attribute extends Element, @cil_attribute { } /** A generic attribute to a declaration. */ -class GenericAttribute extends Attribute { +deprecated class GenericAttribute extends Attribute { private ConstructedType type; GenericAttribute() { type = this.getType() } diff --git a/csharp/ql/lib/semmle/code/cil/BasicBlock.qll b/csharp/ql/lib/semmle/code/cil/BasicBlock.qll index 2680cb0a769..94126193bcc 100644 --- a/csharp/ql/lib/semmle/code/cil/BasicBlock.qll +++ b/csharp/ql/lib/semmle/code/cil/BasicBlock.qll @@ -8,7 +8,7 @@ private import CIL * A basic block, that is, a maximal straight-line sequence of control flow nodes * without branches or joins. */ -class BasicBlock extends Cached::TBasicBlockStart { +deprecated class BasicBlock extends Cached::TBasicBlockStart { /** Gets an immediate successor of this basic block, if any. */ BasicBlock getASuccessor() { result.getFirstNode() = this.getLastNode().getASuccessor() } @@ -249,7 +249,7 @@ class BasicBlock extends Cached::TBasicBlockStart { * Internal implementation details. */ cached -private module Cached { +deprecated private module Cached { /** Internal representation of basic blocks. */ cached newtype TBasicBlock = TBasicBlockStart(ControlFlowNode cfn) { startsBB(cfn) } @@ -287,49 +287,54 @@ private module Cached { * Holds if the first node of basic block `succ` is a control flow * successor of the last node of basic block `pred`. */ -private predicate succBB(BasicBlock pred, BasicBlock succ) { succ = pred.getASuccessor() } +deprecated private predicate succBB(BasicBlock pred, BasicBlock succ) { + succ = pred.getASuccessor() +} /** Holds if `dom` is an immediate dominator of `bb`. */ -predicate bbIDominates(BasicBlock dom, BasicBlock bb) = idominance(entryBB/1, succBB/2)(_, dom, bb) +deprecated predicate bbIDominates(BasicBlock dom, BasicBlock bb) = + idominance(entryBB/1, succBB/2)(_, dom, bb) /** Holds if `pred` is a basic block predecessor of `succ`. */ -private predicate predBB(BasicBlock succ, BasicBlock pred) { succBB(pred, succ) } +deprecated private predicate predBB(BasicBlock succ, BasicBlock pred) { succBB(pred, succ) } /** Holds if `dom` is an immediate post-dominator of `bb`. */ -predicate bbIPostDominates(BasicBlock dom, BasicBlock bb) = +deprecated predicate bbIPostDominates(BasicBlock dom, BasicBlock bb) = idominance(exitBB/1, predBB/2)(_, dom, bb) /** * An entry basic block, that is, a basic block whose first node is * the entry node of a callable. */ -class EntryBasicBlock extends BasicBlock { +deprecated class EntryBasicBlock extends BasicBlock { EntryBasicBlock() { entryBB(this) } } /** Holds if `bb` is an entry basic block. */ -private predicate entryBB(BasicBlock bb) { bb.getFirstNode() instanceof MethodImplementation } +deprecated private predicate entryBB(BasicBlock bb) { + bb.getFirstNode() instanceof MethodImplementation +} /** * An exit basic block, that is, a basic block whose last node is * an exit node. */ -class ExitBasicBlock extends BasicBlock { +deprecated class ExitBasicBlock extends BasicBlock { ExitBasicBlock() { exitBB(this) } } /** Holds if `bb` is an exit basic block. */ -private predicate exitBB(BasicBlock bb) { not exists(bb.getLastNode().getASuccessor()) } +deprecated private predicate exitBB(BasicBlock bb) { not exists(bb.getLastNode().getASuccessor()) } /** * A basic block with more than one predecessor. */ -class JoinBlock extends BasicBlock { +deprecated class JoinBlock extends BasicBlock { JoinBlock() { this.getFirstNode().isJoin() } } /** A basic block that terminates in a condition, splitting the subsequent control flow. */ -class ConditionBlock extends BasicBlock { +deprecated class ConditionBlock extends BasicBlock { ConditionBlock() { exists(BasicBlock succ | succ = this.getATrueSuccessor() diff --git a/csharp/ql/lib/semmle/code/cil/CallableReturns.qll b/csharp/ql/lib/semmle/code/cil/CallableReturns.qll index 4cd46c10941..4fc49adcf44 100644 --- a/csharp/ql/lib/semmle/code/cil/CallableReturns.qll +++ b/csharp/ql/lib/semmle/code/cil/CallableReturns.qll @@ -8,22 +8,26 @@ cached private module Cached { /** Holds if method `m` always returns null. */ cached - predicate alwaysNullMethod(Method m) { forex(Expr e | m.canReturn(e) | alwaysNullExpr(e)) } + deprecated predicate alwaysNullMethod(Method m) { + forex(Expr e | m.canReturn(e) | alwaysNullExpr(e)) + } /** Holds if method `m` always returns non-null. */ cached - predicate alwaysNotNullMethod(Method m) { forex(Expr e | m.canReturn(e) | alwaysNotNullExpr(e)) } + deprecated predicate alwaysNotNullMethod(Method m) { + forex(Expr e | m.canReturn(e) | alwaysNotNullExpr(e)) + } /** Holds if method `m` always throws an exception. */ cached - predicate alwaysThrowsMethod(Method m) { + deprecated predicate alwaysThrowsMethod(Method m) { m.hasBody() and not exists(m.getImplementation().getAnInstruction().(Return)) } /** Holds if method `m` always throws an exception of type `t`. */ cached - predicate alwaysThrowsException(Method m, Type t) { + deprecated predicate alwaysThrowsException(Method m, Type t) { alwaysThrowsMethod(m) and forex(Throw ex | ex = m.getImplementation().getAnInstruction() | t = ex.getExceptionType()) } @@ -32,12 +36,12 @@ private module Cached { import Cached pragma[noinline] -private predicate alwaysNullVariableUpdate(VariableUpdate vu) { +deprecated private predicate alwaysNullVariableUpdate(VariableUpdate vu) { forex(Expr src | src = vu.getSource() | alwaysNullExpr(src)) } /** Holds if expression `expr` always evaluates to `null`. */ -private predicate alwaysNullExpr(Expr expr) { +deprecated private predicate alwaysNullExpr(Expr expr) { expr instanceof NullLiteral or alwaysNullMethod(expr.(StaticCall).getTarget()) @@ -50,12 +54,12 @@ private predicate alwaysNullExpr(Expr expr) { } pragma[noinline] -private predicate alwaysNotNullVariableUpdate(VariableUpdate vu) { +deprecated private predicate alwaysNotNullVariableUpdate(VariableUpdate vu) { forex(Expr src | src = vu.getSource() | alwaysNotNullExpr(src)) } /** Holds if expression `expr` always evaluates to non-null. */ -private predicate alwaysNotNullExpr(Expr expr) { +deprecated private predicate alwaysNotNullExpr(Expr expr) { expr instanceof Opcodes::NewObj or expr instanceof Literal and not expr instanceof NullLiteral diff --git a/csharp/ql/lib/semmle/code/cil/ConsistencyChecks.qll b/csharp/ql/lib/semmle/code/cil/ConsistencyChecks.qll index ffb84dc2100..612e94711a2 100644 --- a/csharp/ql/lib/semmle/code/cil/ConsistencyChecks.qll +++ b/csharp/ql/lib/semmle/code/cil/ConsistencyChecks.qll @@ -8,15 +8,15 @@ private import semmle.code.csharp.commons.QualifiedName private newtype ConsistencyCheck = MissingEntityCheck() or - TypeCheck(Type t) or - CfgCheck(ControlFlowNode n) or - DeclarationCheck(Declaration d) or + deprecated TypeCheck(Type t) or + deprecated CfgCheck(ControlFlowNode n) or + deprecated DeclarationCheck(Declaration d) or MissingCSharpCheck(CS::Declaration d) /** * A consistency violation in the database or data model. */ -abstract class ConsistencyViolation extends ConsistencyCheck { +abstract deprecated class ConsistencyViolation extends ConsistencyCheck { abstract string toString(); abstract string getMessage(); @@ -25,14 +25,14 @@ abstract class ConsistencyViolation extends ConsistencyCheck { /** * A check that is deliberately disabled. */ -abstract class DisabledCheck extends ConsistencyViolation { +abstract deprecated class DisabledCheck extends ConsistencyViolation { DisabledCheck() { none() } } /** * A consistency violation on a control flow node. */ -abstract class CfgViolation extends ConsistencyViolation, CfgCheck { +abstract deprecated class CfgViolation extends ConsistencyViolation, CfgCheck { ControlFlowNode node; CfgViolation() { this = CfgCheck(node) } @@ -43,7 +43,7 @@ abstract class CfgViolation extends ConsistencyViolation, CfgCheck { /** * A consistency violation in a specific instruction. */ -abstract class InstructionViolation extends CfgViolation, CfgCheck { +abstract deprecated class InstructionViolation extends CfgViolation, CfgCheck { Instruction instruction; InstructionViolation() { this = CfgCheck(instruction) } @@ -70,7 +70,7 @@ abstract class InstructionViolation extends CfgViolation, CfgCheck { /** * A literal that does not have exactly one `getValue()`. */ -class MissingValue extends InstructionViolation { +deprecated class MissingValue extends InstructionViolation { MissingValue() { exists(Literal l | l = instruction | count(l.getValue()) != 1) } override string getMessage() { result = "Literal has invalid getValue()" } @@ -79,7 +79,7 @@ class MissingValue extends InstructionViolation { /** * A call that does not have exactly one `getTarget()`. */ -class MissingCallTarget extends InstructionViolation { +deprecated class MissingCallTarget extends InstructionViolation { MissingCallTarget() { exists(Call c | c = instruction | count(c.getTarget()) != 1 and not c instanceof Opcodes::Calli @@ -94,7 +94,7 @@ class MissingCallTarget extends InstructionViolation { /** * An instruction that has not been assigned a specific QL class. */ -class MissingOpCode extends InstructionViolation { +deprecated class MissingOpCode extends InstructionViolation { MissingOpCode() { not exists(instruction.getOpcodeName()) } override string getMessage() { @@ -114,7 +114,7 @@ class MissingOpCode extends InstructionViolation { * It could also mean that the target of a call has failed and has not determined the * correct number of arguments. */ -class MissingOperand extends InstructionViolation { +deprecated class MissingOperand extends InstructionViolation { MissingOperand() { exists(int op | op in [0 .. instruction.getPopCount() - 1] | not exists(instruction.getOperand(op)) and not instruction instanceof DeadInstruction @@ -136,7 +136,7 @@ class MissingOperand extends InstructionViolation { * These should not exist, however it turns out that the Mono compiler sometimes * emits them. */ -class DeadInstruction extends Instruction { +deprecated class DeadInstruction extends Instruction { DeadInstruction() { not exists(EntryPoint e | e.getASuccessor+() = this) } } @@ -146,20 +146,20 @@ class DeadInstruction extends Instruction { * If this fails, it means that the calculation of the call graph is incorrect. * Disabled, because Mono compiler sometimes emits dead instructions. */ -class DeadInstructionViolation extends InstructionViolation, DisabledCheck { +deprecated class DeadInstructionViolation extends InstructionViolation, DisabledCheck { DeadInstructionViolation() { instruction instanceof DeadInstruction } override string getMessage() { result = "This instruction is not reachable" } } -class YesNoBranch extends ConditionalBranch { +deprecated class YesNoBranch extends ConditionalBranch { YesNoBranch() { not this instanceof Opcodes::Switch } } /** * A branch instruction that does not have exactly 2 successors. */ -class InvalidBranchSuccessors extends InstructionViolation { +deprecated class InvalidBranchSuccessors extends InstructionViolation { InvalidBranchSuccessors() { // Mono compiler sometimes generates branches to the next instruction, which is just wrong. // However it is valid CIL. @@ -174,7 +174,7 @@ class InvalidBranchSuccessors extends InstructionViolation { /** * An instruction that has a true/false successor but is not a branch. */ -class OnlyYesNoBranchHasTrueFalseSuccessors extends InstructionViolation { +deprecated class OnlyYesNoBranchHasTrueFalseSuccessors extends InstructionViolation { OnlyYesNoBranchHasTrueFalseSuccessors() { (exists(instruction.getTrueSuccessor()) or exists(instruction.getFalseSuccessor())) and not instruction instanceof YesNoBranch @@ -186,7 +186,7 @@ class OnlyYesNoBranchHasTrueFalseSuccessors extends InstructionViolation { /** * An unconditional branch instruction that has more than one successor. */ -class UnconditionalBranchSuccessors extends InstructionViolation { +deprecated class UnconditionalBranchSuccessors extends InstructionViolation { UnconditionalBranchSuccessors() { exists(UnconditionalBranch i | i = instruction | count(i.getASuccessor()) != 1) } @@ -199,7 +199,7 @@ class UnconditionalBranchSuccessors extends InstructionViolation { /** * A branch instruction that does not have a true successor. */ -class NoTrueSuccessor extends InstructionViolation { +deprecated class NoTrueSuccessor extends InstructionViolation { NoTrueSuccessor() { exists(YesNoBranch i | i = instruction | not exists(i.getTrueSuccessor())) } override string getMessage() { result = "Missing a true successor" } @@ -208,7 +208,7 @@ class NoTrueSuccessor extends InstructionViolation { /** * A branch instruction that does not have a false successor. */ -class NoFalseSuccessor extends InstructionViolation { +deprecated class NoFalseSuccessor extends InstructionViolation { NoFalseSuccessor() { exists(YesNoBranch i | i = instruction | not exists(i.getFalseSuccessor())) } override string getMessage() { result = "Missing a false successor" } @@ -217,7 +217,7 @@ class NoFalseSuccessor extends InstructionViolation { /** * An instruction whose true successor is not a successor. */ -class TrueSuccessorIsSuccessor extends InstructionViolation { +deprecated class TrueSuccessorIsSuccessor extends InstructionViolation { TrueSuccessorIsSuccessor() { exists(instruction.getTrueSuccessor()) and not instruction.getTrueSuccessor() = instruction.getASuccessor() @@ -229,7 +229,7 @@ class TrueSuccessorIsSuccessor extends InstructionViolation { /** * An instruction whose false successor is not a successor. */ -class FalseSuccessorIsSuccessor extends InstructionViolation { +deprecated class FalseSuccessorIsSuccessor extends InstructionViolation { FalseSuccessorIsSuccessor() { exists(instruction.getFalseSuccessor()) and not instruction.getFalseSuccessor() = instruction.getASuccessor() @@ -241,7 +241,7 @@ class FalseSuccessorIsSuccessor extends InstructionViolation { /** * An access that does not have exactly one target. */ -class AccessMissingTarget extends InstructionViolation { +deprecated class AccessMissingTarget extends InstructionViolation { AccessMissingTarget() { exists(Access i | i = instruction | count(i.getTarget()) != 1) } override string getMessage() { result = "Access has invalid getTarget()" } @@ -250,7 +250,7 @@ class AccessMissingTarget extends InstructionViolation { /** * A catch handler that doesn't have a caught exception type. */ -class CatchHandlerMissingType extends CfgViolation { +deprecated class CatchHandlerMissingType extends CfgViolation { CatchHandlerMissingType() { exists(CatchHandler h | h = node | not exists(h.getCaughtType())) } override string getMessage() { result = "Catch handler missing caught type" } @@ -259,7 +259,7 @@ class CatchHandlerMissingType extends CfgViolation { /** * A CFG node that does not have a stack size. */ -class MissingStackSize extends CfgViolation { +deprecated class MissingStackSize extends CfgViolation { MissingStackSize() { ( not exists(node.getStackSizeAfter()) or @@ -275,7 +275,7 @@ class MissingStackSize extends CfgViolation { * A CFG node that does not have exactly one stack size. * Disabled because inconsistent stack sizes have been observed. */ -class InvalidStackSize extends CfgViolation, DisabledCheck { +deprecated class InvalidStackSize extends CfgViolation, DisabledCheck { InvalidStackSize() { ( count(node.getStackSizeAfter()) != 1 or @@ -294,7 +294,7 @@ class InvalidStackSize extends CfgViolation, DisabledCheck { /** * A CFG node that does not have exactly 1 `getPopCount()`. */ -class InconsistentPopCount extends CfgViolation { +deprecated class InconsistentPopCount extends CfgViolation { InconsistentPopCount() { count(node.getPopCount()) != 1 } override string getMessage() { @@ -305,7 +305,7 @@ class InconsistentPopCount extends CfgViolation { /** * A CFG node that does not have exactly one `getPushCount()`. */ -class InconsistentPushCount extends CfgViolation { +deprecated class InconsistentPushCount extends CfgViolation { InconsistentPushCount() { count(node.getPushCount()) != 1 } override string getMessage() { @@ -316,7 +316,7 @@ class InconsistentPushCount extends CfgViolation { /** * A return instruction that does not have a stack size of 0 after it. */ -class InvalidReturn extends InstructionViolation { +deprecated class InvalidReturn extends InstructionViolation { InvalidReturn() { instruction instanceof Return and instruction.getStackSizeAfter() != 0 } override string getMessage() { result = "Return has invalid stack size" } @@ -325,7 +325,7 @@ class InvalidReturn extends InstructionViolation { /** * A throw instruction that does not have a stack size of 0 after it. */ -class InvalidThrow extends InstructionViolation, DisabledCheck { +deprecated class InvalidThrow extends InstructionViolation, DisabledCheck { InvalidThrow() { instruction instanceof Throw and instruction.getStackSizeAfter() != 0 } override string getMessage() { @@ -336,7 +336,7 @@ class InvalidThrow extends InstructionViolation, DisabledCheck { /** * A field access where the field is "static" but the instruction is "instance". */ -class StaticFieldTarget extends InstructionViolation { +deprecated class StaticFieldTarget extends InstructionViolation { StaticFieldTarget() { exists(FieldAccess i | i = instruction | (i instanceof Opcodes::Stfld or i instanceof Opcodes::Stfld) and @@ -350,7 +350,7 @@ class StaticFieldTarget extends InstructionViolation { /** * A branch without a target. */ -class BranchWithoutTarget extends InstructionViolation { +deprecated class BranchWithoutTarget extends InstructionViolation { BranchWithoutTarget() { instruction = any(Branch b | not exists(b.getTarget()) and not b instanceof Opcodes::Switch) } @@ -361,7 +361,7 @@ class BranchWithoutTarget extends InstructionViolation { /** * A consistency violation in a type. */ -class TypeViolation extends ConsistencyViolation, TypeCheck { +deprecated class TypeViolation extends ConsistencyViolation, TypeCheck { /** Gets the type containing the violation. */ Type getType() { this = TypeCheck(result) } @@ -373,7 +373,7 @@ class TypeViolation extends ConsistencyViolation, TypeCheck { /** * A type that has both type arguments and type parameters. */ -class TypeIsBothConstructedAndUnbound extends TypeViolation { +deprecated class TypeIsBothConstructedAndUnbound extends TypeViolation { TypeIsBothConstructedAndUnbound() { this.getType() instanceof ConstructedGeneric and this.getType() instanceof UnboundGeneric } @@ -385,7 +385,7 @@ class TypeIsBothConstructedAndUnbound extends TypeViolation { * The location of a constructed generic type should be the same * as the location of its unbound generic type. */ -class InconsistentTypeLocation extends TypeViolation { +deprecated class InconsistentTypeLocation extends TypeViolation { InconsistentTypeLocation() { this.getType().getLocation() != this.getType().getUnboundDeclaration().getLocation() } @@ -396,7 +396,7 @@ class InconsistentTypeLocation extends TypeViolation { /** * A constructed type that does not match its unbound generic type. */ -class TypeParameterMismatch extends TypeViolation { +deprecated class TypeParameterMismatch extends TypeViolation { TypeParameterMismatch() { this.getType().(ConstructedGeneric).getNumberOfTypeArguments() != this.getType().getUnboundType().(UnboundGeneric).getNumberOfTypeParameters() @@ -415,7 +415,7 @@ class TypeParameterMismatch extends TypeViolation { /** * A consistency violation in a method. */ -class MethodViolation extends ConsistencyViolation, DeclarationCheck { +deprecated class MethodViolation extends ConsistencyViolation, DeclarationCheck { /** Gets the method containing the violation. */ Method getMethod() { this = DeclarationCheck(result) } @@ -428,7 +428,7 @@ class MethodViolation extends ConsistencyViolation, DeclarationCheck { * The location of a constructed method should be equal to the * location of its unbound generic. */ -class InconsistentMethodLocation extends MethodViolation { +deprecated class InconsistentMethodLocation extends MethodViolation { InconsistentMethodLocation() { this.getMethod().getLocation() != this.getMethod().getUnboundDeclaration().getLocation() } @@ -439,7 +439,7 @@ class InconsistentMethodLocation extends MethodViolation { /** * A constructed method that does not match its unbound method. */ -class ConstructedMethodTypeParams extends MethodViolation { +deprecated class ConstructedMethodTypeParams extends MethodViolation { ConstructedMethodTypeParams() { this.getMethod().(ConstructedGeneric).getNumberOfTypeArguments() != this.getMethod().getUnboundDeclaration().(UnboundGeneric).getNumberOfTypeParameters() @@ -456,14 +456,14 @@ class ConstructedMethodTypeParams extends MethodViolation { /** * A violation marking an entity that should be present but is not. */ -abstract class MissingEntityViolation extends ConsistencyViolation, MissingEntityCheck { +abstract deprecated class MissingEntityViolation extends ConsistencyViolation, MissingEntityCheck { override string toString() { result = "Missing entity" } } /** * The type `object` is missing from the database. */ -class MissingObjectViolation extends MissingEntityViolation { +deprecated class MissingObjectViolation extends MissingEntityViolation { MissingObjectViolation() { exists(this) and not exists(ObjectType o) @@ -475,7 +475,7 @@ class MissingObjectViolation extends MissingEntityViolation { /** * An override that is invalid because the overridden method is not in a base class. */ -class InvalidOverride extends MethodViolation { +deprecated class InvalidOverride extends MethodViolation { private Method base; InvalidOverride() { @@ -497,7 +497,7 @@ class InvalidOverride extends MethodViolation { /** * A pointer type that does not have a pointee type. */ -class InvalidPointerType extends TypeViolation { +deprecated class InvalidPointerType extends TypeViolation { InvalidPointerType() { exists(PointerType p | p = this.getType() | count(p.getReferentType()) != 1) } @@ -508,7 +508,7 @@ class InvalidPointerType extends TypeViolation { /** * An array with an invalid `getElementType`. */ -class ArrayTypeMissingElement extends TypeViolation { +deprecated class ArrayTypeMissingElement extends TypeViolation { ArrayTypeMissingElement() { exists(ArrayType t | t = this.getType() | count(t.getElementType()) != 1) } @@ -519,7 +519,7 @@ class ArrayTypeMissingElement extends TypeViolation { /** * An array with an invalid `getRank`. */ -class ArrayTypeInvalidRank extends TypeViolation { +deprecated class ArrayTypeInvalidRank extends TypeViolation { ArrayTypeInvalidRank() { exists(ArrayType t | t = this.getType() | not t.getRank() > 0) } override string getMessage() { result = "Invalid ArrayType.getRank()" } @@ -529,7 +529,7 @@ class ArrayTypeInvalidRank extends TypeViolation { * A type should have at most one kind, except for missing referenced types * where the interface/class is unknown. */ -class KindViolation extends TypeViolation { +deprecated class KindViolation extends TypeViolation { KindViolation() { count(typeKind(this.getType())) != 1 and exists(this.getType().getLocation()) @@ -544,7 +544,7 @@ class KindViolation extends TypeViolation { * The type of a kind must be consistent between a constructed generic and its * unbound generic. */ -class InconsistentKind extends TypeViolation { +deprecated class InconsistentKind extends TypeViolation { InconsistentKind() { typeKind(this.getType()) != typeKind(this.getType().getUnboundDeclaration()) } @@ -552,7 +552,7 @@ class InconsistentKind extends TypeViolation { override string getMessage() { result = "Inconsistent type kind of source declaration" } } -private string typeKind(Type t) { +deprecated private string typeKind(Type t) { t instanceof Interface and result = "interface" or t instanceof Class and result = "class" @@ -567,7 +567,7 @@ private string typeKind(Type t) { /** * A violation in a `Member`. */ -abstract class DeclarationViolation extends ConsistencyViolation, DeclarationCheck { +abstract deprecated class DeclarationViolation extends ConsistencyViolation, DeclarationCheck { abstract override string getMessage(); /** Gets the member containing the potential violation. */ @@ -579,7 +579,7 @@ abstract class DeclarationViolation extends ConsistencyViolation, DeclarationChe /** * Properties that have no accessors. */ -class PropertyWithNoAccessors extends DeclarationViolation { +deprecated class PropertyWithNoAccessors extends DeclarationViolation { PropertyWithNoAccessors() { exists(Property p | p = this.getDeclaration() | not exists(p.getAnAccessor())) } @@ -590,7 +590,7 @@ class PropertyWithNoAccessors extends DeclarationViolation { /** * An expression that have an unexpected push count. */ -class ExprPushCount extends InstructionViolation { +deprecated class ExprPushCount extends InstructionViolation { ExprPushCount() { instruction instanceof Expr and not instruction instanceof Opcodes::Dup and @@ -608,7 +608,7 @@ class ExprPushCount extends InstructionViolation { * An expression that does not have exactly one type. * Note that calls with no return have type `System.Void`. */ -class ExprMissingType extends InstructionViolation { +deprecated class ExprMissingType extends InstructionViolation { ExprMissingType() { // Don't have types for the following op codes: not instruction instanceof Opcodes::Ldftn and @@ -632,7 +632,7 @@ class ExprMissingType extends InstructionViolation { /** * An instruction that has a push count of 0, yet is still used as an operand */ -class InvalidExpressionViolation extends InstructionViolation { +deprecated class InvalidExpressionViolation extends InstructionViolation { InvalidExpressionViolation() { instruction.getPushCount() = 0 and exists(Instruction expr | instruction = expr.getAnOperand()) @@ -647,7 +647,7 @@ class InvalidExpressionViolation extends InstructionViolation { * A type that has multiple entities with the same qualified name in `System`. * .NET Core does sometimes duplicate types, so this check is disabled. */ -class TypeMultiplyDefined extends TypeViolation, DisabledCheck { +deprecated class TypeMultiplyDefined extends TypeViolation, DisabledCheck { TypeMultiplyDefined() { this.getType().getParent().getName() = "System" and not this.getType() instanceof ConstructedGeneric and @@ -672,7 +672,7 @@ class TypeMultiplyDefined extends TypeViolation, DisabledCheck { /** * A C# declaration which is expected to have a corresponding CIL declaration, but for some reason does not. */ -class MissingCilDeclaration extends ConsistencyViolation, MissingCSharpCheck { +deprecated class MissingCilDeclaration extends ConsistencyViolation, MissingCSharpCheck { MissingCilDeclaration() { exists(CS::Declaration decl | this = MissingCSharpCheck(decl) | expectedCilDeclaration(decl) and @@ -694,7 +694,7 @@ class MissingCilDeclaration extends ConsistencyViolation, MissingCSharpCheck { /** * Holds if the C# declaration is expected to have a CIl declaration. */ -private predicate expectedCilDeclaration(CS::Declaration decl) { +deprecated private predicate expectedCilDeclaration(CS::Declaration decl) { decl = decl.getUnboundDeclaration() and not decl instanceof CS::ArrayType and decl.getALocation() instanceof CS::Assembly and @@ -730,7 +730,7 @@ private predicate expectedCilDeclaration(CS::Declaration decl) { } /** A member with an invalid name. */ -class MemberWithInvalidName extends DeclarationViolation { +deprecated class MemberWithInvalidName extends DeclarationViolation { MemberWithInvalidName() { exists(string name | name = this.getDeclaration().(Member).getName() | exists(name.indexOf(".")) and @@ -744,7 +744,7 @@ class MemberWithInvalidName extends DeclarationViolation { } } -class ConstructedSourceDeclarationMethod extends MethodViolation { +deprecated class ConstructedSourceDeclarationMethod extends MethodViolation { Method method; ConstructedSourceDeclarationMethod() { @@ -762,7 +762,7 @@ class ConstructedSourceDeclarationMethod extends MethodViolation { } /** A declaration with multiple labels. */ -class DeclarationWithMultipleLabels extends DeclarationViolation { +deprecated class DeclarationWithMultipleLabels extends DeclarationViolation { DeclarationWithMultipleLabels() { exists(Declaration d | this = DeclarationCheck(d) | strictcount(d.getLabel()) > 1) } @@ -773,7 +773,7 @@ class DeclarationWithMultipleLabels extends DeclarationViolation { } /** A declaration without a label. */ -class DeclarationWithoutLabel extends DeclarationViolation { +deprecated class DeclarationWithoutLabel extends DeclarationViolation { DeclarationWithoutLabel() { exists(Declaration d | this = DeclarationCheck(d) | d.isUnboundDeclaration() and diff --git a/csharp/ql/lib/semmle/code/cil/ControlFlow.qll b/csharp/ql/lib/semmle/code/cil/ControlFlow.qll index ec72dea4bc7..a2f5fcffa67 100644 --- a/csharp/ql/lib/semmle/code/cil/ControlFlow.qll +++ b/csharp/ql/lib/semmle/code/cil/ControlFlow.qll @@ -5,7 +5,7 @@ private import CIL /** A node in the control flow graph. */ -class ControlFlowNode extends @cil_controlflow_node { +deprecated class ControlFlowNode extends @cil_controlflow_node { /** Gets a textual representation of this control flow node. */ string toString() { none() } @@ -149,31 +149,31 @@ class ControlFlowNode extends @cil_controlflow_node { * * Handlers are control flow nodes because they push the handled exception onto the stack. */ -class EntryPoint extends ControlFlowNode, @cil_entry_point { +deprecated class EntryPoint extends ControlFlowNode, @cil_entry_point { override int getStackSizeBefore() { result = 0 } } -private newtype TFlowType = +deprecated private newtype TFlowType = TNormalFlow() or TTrueFlow() or TFalseFlow() /** A type of control flow. Either normal flow (`NormalFlow`), true flow (`TrueFlow`) or false flow (`FalseFlow`). */ -abstract class FlowType extends TFlowType { +abstract deprecated class FlowType extends TFlowType { abstract string toString(); } /** Normal control flow. */ -class NormalFlow extends FlowType, TNormalFlow { +deprecated class NormalFlow extends FlowType, TNormalFlow { override string toString() { result = "" } } /** True control flow. */ -class TrueFlow extends FlowType, TTrueFlow { +deprecated class TrueFlow extends FlowType, TTrueFlow { override string toString() { result = "true" } } /** False control flow. */ -class FalseFlow extends FlowType, TFalseFlow { +deprecated class FalseFlow extends FlowType, TFalseFlow { override string toString() { result = "false" } } diff --git a/csharp/ql/lib/semmle/code/cil/CustomModifierReceiver.qll b/csharp/ql/lib/semmle/code/cil/CustomModifierReceiver.qll index 40e121416c7..b18a51702cf 100644 --- a/csharp/ql/lib/semmle/code/cil/CustomModifierReceiver.qll +++ b/csharp/ql/lib/semmle/code/cil/CustomModifierReceiver.qll @@ -12,7 +12,7 @@ private import dotnet * - the type of parameters. * A `CustomModifierReceiver` is therefore either a `Field`, `Property`, `Method`, or `Parameter`. */ -class CustomModifierReceiver extends Declaration, @cil_custom_modifier_receiver { +deprecated class CustomModifierReceiver extends Declaration, @cil_custom_modifier_receiver { /** Holds if this targeted type has `modifier` applied as `modreq`. */ predicate hasRequiredCustomModifier(Type modifier) { cil_custom_modifiers(this, modifier, 1) } diff --git a/csharp/ql/lib/semmle/code/cil/DataFlow.qll b/csharp/ql/lib/semmle/code/cil/DataFlow.qll index 9b0e4556958..9da00db0ade 100644 --- a/csharp/ql/lib/semmle/code/cil/DataFlow.qll +++ b/csharp/ql/lib/semmle/code/cil/DataFlow.qll @@ -9,7 +9,7 @@ private import CIL * * Either an instruction (`Instruction`), a method return (`Method`), or a variable (`Variable`). */ -class DataFlowNode extends @cil_dataflow_node { +deprecated class DataFlowNode extends @cil_dataflow_node { /** Gets a textual representation of this data flow node. */ abstract string toString(); @@ -24,7 +24,7 @@ class DataFlowNode extends @cil_dataflow_node { } /** A node that updates a variable. */ -abstract class VariableUpdate extends DataFlowNode { +abstract deprecated class VariableUpdate extends DataFlowNode { /** Gets the value assigned, if any. */ abstract DataFlowNode getSource(); @@ -35,7 +35,7 @@ abstract class VariableUpdate extends DataFlowNode { abstract predicate updatesAt(BasicBlock bb, int i); } -private class MethodParameterDef extends VariableUpdate, MethodParameter { +deprecated private class MethodParameterDef extends VariableUpdate, MethodParameter { override MethodParameter getSource() { result = this } override MethodParameter getVariable() { result = this } @@ -46,7 +46,7 @@ private class MethodParameterDef extends VariableUpdate, MethodParameter { } } -private class VariableWrite extends VariableUpdate, WriteAccess { +deprecated private class VariableWrite extends VariableUpdate, WriteAccess { override Expr getSource() { result = this.getExpr() } override Variable getVariable() { result = this.getTarget() } @@ -54,7 +54,7 @@ private class VariableWrite extends VariableUpdate, WriteAccess { override predicate updatesAt(BasicBlock bb, int i) { this = bb.getNode(i) } } -private class MethodOutOrRefTarget extends VariableUpdate, Call { +deprecated private class MethodOutOrRefTarget extends VariableUpdate, Call { int parameterIndex; MethodOutOrRefTarget() { this.getTarget().getRawParameter(parameterIndex).hasOutFlag() } diff --git a/csharp/ql/lib/semmle/code/cil/Declaration.qll b/csharp/ql/lib/semmle/code/cil/Declaration.qll index 55c4ab8b578..9c0343fb34c 100644 --- a/csharp/ql/lib/semmle/code/cil/Declaration.qll +++ b/csharp/ql/lib/semmle/code/cil/Declaration.qll @@ -10,7 +10,7 @@ private import semmle.code.csharp.commons.QualifiedName /** * A declaration. Either a member (`Member`) or a variable (`Variable`). */ -class Declaration extends DotNet::Declaration, Element, @cil_declaration { +deprecated class Declaration extends DotNet::Declaration, Element, @cil_declaration { /** Gets an attribute (for example `[Obsolete]`) of this declaration, if any. */ Attribute getAnAttribute() { result.getDeclaration() = this } @@ -42,14 +42,18 @@ class Declaration extends DotNet::Declaration, Element, @cil_declaration { } } -private CS::Declaration toCSharpNonTypeParameter(Declaration d) { result.matchesHandle(d) } +deprecated private CS::Declaration toCSharpNonTypeParameter(Declaration d) { + result.(DotNet::Declaration).matchesHandle(d) +} -private CS::TypeParameter toCSharpTypeParameter(TypeParameter tp) { +deprecated private CS::TypeParameter toCSharpTypeParameter(TypeParameter tp) { toCSharpTypeParameterJoin(tp, result.getIndex(), result.getGeneric()) } pragma[nomagic] -private predicate toCSharpTypeParameterJoin(TypeParameter tp, int i, CS::UnboundGeneric ug) { +deprecated private predicate toCSharpTypeParameterJoin( + TypeParameter tp, int i, CS::UnboundGeneric ug +) { exists(TypeContainer tc | tp.getIndex() = i and tc = tp.getGeneric() and @@ -60,7 +64,7 @@ private predicate toCSharpTypeParameterJoin(TypeParameter tp, int i, CS::Unbound /** * A member of a type. Either a type (`Type`), a method (`Method`), a property (`Property`), or an event (`Event`). */ -class Member extends DotNet::Member, Declaration, @cil_member { +deprecated class Member extends DotNet::Member, Declaration, @cil_member { override predicate isPublic() { cil_public(this) } override predicate isProtected() { cil_protected(this) } @@ -82,7 +86,7 @@ class Member extends DotNet::Member, Declaration, @cil_member { } /** A property. */ -class Property extends DotNet::Property, Member, CustomModifierReceiver, @cil_property { +deprecated class Property extends DotNet::Property, Member, CustomModifierReceiver, @cil_property { override string getName() { cil_property(this, _, result, _) } /** Gets the type of this property. */ @@ -109,7 +113,7 @@ class Property extends DotNet::Property, Member, CustomModifierReceiver, @cil_pr } /** A property that is trivial (wraps a field). */ -class TrivialProperty extends Property { +deprecated class TrivialProperty extends Property { TrivialProperty() { this.getGetter().(TrivialGetter).getField() = this.getSetter().(TrivialSetter).getField() } @@ -119,7 +123,7 @@ class TrivialProperty extends Property { } /** An event. */ -class Event extends DotNet::Event, Member, @cil_event { +deprecated class Event extends DotNet::Event, Member, @cil_event { override string getName() { cil_event(this, _, result, _) } /** Gets the type of this event. */ diff --git a/csharp/ql/lib/semmle/code/cil/Element.qll b/csharp/ql/lib/semmle/code/cil/Element.qll index 0499c429dd0..58e6a76b315 100644 --- a/csharp/ql/lib/semmle/code/cil/Element.qll +++ b/csharp/ql/lib/semmle/code/cil/Element.qll @@ -4,12 +4,12 @@ private import dotnet import semmle.code.csharp.Location /** An element. */ -class Element extends DotNet::Element, @cil_element { +deprecated class Element extends DotNet::Element, @cil_element { override Location getLocation() { result = bestLocation(this) } } cached -private Location bestLocation(Element e) { +deprecated private Location bestLocation(Element e) { result = e.getALocation() and (e.getALocation().getFile().isPdbSourceFile() implies result.getFile().isPdbSourceFile()) } diff --git a/csharp/ql/lib/semmle/code/cil/Generics.qll b/csharp/ql/lib/semmle/code/cil/Generics.qll index faacc2745ae..0a929e8dc6d 100644 --- a/csharp/ql/lib/semmle/code/cil/Generics.qll +++ b/csharp/ql/lib/semmle/code/cil/Generics.qll @@ -7,7 +7,7 @@ private import dotnet * A generic declaration. Either an unbound generic (`UnboundGeneric`) or a * constructed generic (`ConstructedGeneric`). */ -class Generic extends DotNet::Generic, Declaration, TypeContainer { +deprecated class Generic extends DotNet::Generic, Declaration, TypeContainer { Generic() { cil_type_parameter(this, _, _) or cil_type_argument(this, _, _) @@ -15,14 +15,14 @@ class Generic extends DotNet::Generic, Declaration, TypeContainer { } /** An unbound generic type or method. */ -class UnboundGeneric extends Generic, DotNet::UnboundGeneric { +deprecated class UnboundGeneric extends Generic, DotNet::UnboundGeneric { UnboundGeneric() { cil_type_parameter(this, _, _) } final override TypeParameter getTypeParameter(int n) { cil_type_parameter(this, n, result) } } /** A constructed generic type or method. */ -class ConstructedGeneric extends Generic, DotNet::ConstructedGeneric { +deprecated class ConstructedGeneric extends Generic, DotNet::ConstructedGeneric { ConstructedGeneric() { cil_type_argument(this, _, _) } final override Type getTypeArgument(int n) { cil_type_argument(this, n, result) } @@ -30,18 +30,18 @@ class ConstructedGeneric extends Generic, DotNet::ConstructedGeneric { /** Gets the concatenation of the `getName()` of type arguments. */ language[monotonicAggregates] -private string getTypeArgumentsNames(ConstructedGeneric cg) { +deprecated private string getTypeArgumentsNames(ConstructedGeneric cg) { result = strictconcat(Type t, int i | t = cg.getTypeArgument(i) | t.getName(), "," order by i) } /** An unbound generic type. */ -class UnboundGenericType extends UnboundGeneric, Type { } +deprecated class UnboundGenericType extends UnboundGeneric, Type { } /** An unbound generic method. */ -class UnboundGenericMethod extends UnboundGeneric, Method { } +deprecated class UnboundGenericMethod extends UnboundGeneric, Method { } /** A constructed generic type. */ -class ConstructedType extends ConstructedGeneric, Type { +deprecated class ConstructedType extends ConstructedGeneric, Type { final override UnboundGenericType getUnboundGeneric() { result = this.getUnboundType() } override predicate isInterface() { this.getUnboundType().isInterface() } @@ -54,6 +54,6 @@ class ConstructedType extends ConstructedGeneric, Type { } /** A constructed generic method. */ -class ConstructedMethod extends ConstructedGeneric, Method { +deprecated class ConstructedMethod extends ConstructedGeneric, Method { final override UnboundGenericMethod getUnboundGeneric() { result = this.getUnboundMethod() } } diff --git a/csharp/ql/lib/semmle/code/cil/Handler.qll b/csharp/ql/lib/semmle/code/cil/Handler.qll index f0661ccf35e..b408222742d 100644 --- a/csharp/ql/lib/semmle/code/cil/Handler.qll +++ b/csharp/ql/lib/semmle/code/cil/Handler.qll @@ -19,7 +19,7 @@ private import CIL * Either a finally handler (`FinallyHandler`), filter handler (`FilterHandler`), * catch handler (`CatchHandler`), or a fault handler (`FaultHandler`). */ -class Handler extends Element, EntryPoint, @cil_handler { +deprecated class Handler extends Element, EntryPoint, @cil_handler { override MethodImplementation getImplementation() { cil_handler(this, result, _, _, _, _, _) } /** Gets the 0-based index of this handler. Handlers are evaluated in this sequence. */ @@ -56,12 +56,12 @@ class Handler extends Element, EntryPoint, @cil_handler { } /** A handler corresponding to a `finally` block. */ -class FinallyHandler extends Handler, @cil_finally_handler { +deprecated class FinallyHandler extends Handler, @cil_finally_handler { override string toString() { result = "finally {...}" } } /** A handler corresponding to a `where()` clause. */ -class FilterHandler extends Handler, @cil_filter_handler { +deprecated class FilterHandler extends Handler, @cil_filter_handler { override string toString() { result = "where (...)" } /** Gets the filter clause - the start of a sequence of instructions to evaluate the filter function. */ @@ -71,13 +71,13 @@ class FilterHandler extends Handler, @cil_filter_handler { } /** A handler corresponding to a `catch` clause. */ -class CatchHandler extends Handler, @cil_catch_handler { +deprecated class CatchHandler extends Handler, @cil_catch_handler { override string toString() { result = "catch(" + this.getCaughtType().getName() + ") {...}" } override int getPushCount() { result = 1 } } /** A handler for memory faults. */ -class FaultHandler extends Handler, @cil_fault_handler { +deprecated class FaultHandler extends Handler, @cil_fault_handler { override string toString() { result = "fault {...}" } } diff --git a/csharp/ql/lib/semmle/code/cil/Instruction.qll b/csharp/ql/lib/semmle/code/cil/Instruction.qll index fa9753e1f0c..5edba5a15ce 100644 --- a/csharp/ql/lib/semmle/code/cil/Instruction.qll +++ b/csharp/ql/lib/semmle/code/cil/Instruction.qll @@ -3,7 +3,7 @@ private import CIL /** An instruction. */ -class Instruction extends Element, ControlFlowNode, DataFlowNode, @cil_instruction { +deprecated class Instruction extends Element, ControlFlowNode, DataFlowNode, @cil_instruction { override string toString() { result = this.getOpcodeName() } /** Gets a more verbose textual representation of this instruction. */ diff --git a/csharp/ql/lib/semmle/code/cil/InstructionGroups.qll b/csharp/ql/lib/semmle/code/cil/InstructionGroups.qll index 3c2a1646f42..c43c06b72b4 100644 --- a/csharp/ql/lib/semmle/code/cil/InstructionGroups.qll +++ b/csharp/ql/lib/semmle/code/cil/InstructionGroups.qll @@ -9,7 +9,7 @@ private import dotnet /** * An instruction that pushes a value onto the stack. */ -class Expr extends DotNet::Expr, Instruction, @cil_expr { +deprecated class Expr extends DotNet::Expr, Instruction, @cil_expr { override int getPushCount() { result = 1 } override Type getType() { result = Instruction.super.getType() } @@ -24,7 +24,7 @@ class Expr extends DotNet::Expr, Instruction, @cil_expr { } /** An instruction that changes control flow. */ -class Branch extends Instruction, @cil_jump { +deprecated class Branch extends Instruction, @cil_jump { /** Gets the instruction that is jumped to. */ Instruction getTarget() { cil_jump(this, result) } @@ -32,7 +32,7 @@ class Branch extends Instruction, @cil_jump { } /** An instruction that unconditionally jumps to another instruction. */ -class UnconditionalBranch extends Branch, @cil_unconditional_jump { +deprecated class UnconditionalBranch extends Branch, @cil_unconditional_jump { override Instruction getASuccessorType(FlowType t) { t instanceof NormalFlow and result = this.getTarget() } @@ -41,7 +41,7 @@ class UnconditionalBranch extends Branch, @cil_unconditional_jump { } /** An instruction that jumps to a target based on a condition. */ -class ConditionalBranch extends Branch, @cil_conditional_jump { +deprecated class ConditionalBranch extends Branch, @cil_conditional_jump { override Instruction getASuccessorType(FlowType t) { t instanceof TrueFlow and result = this.getTarget() or @@ -52,12 +52,12 @@ class ConditionalBranch extends Branch, @cil_conditional_jump { } /** An expression with two operands. */ -class BinaryExpr extends Expr, @cil_binary_expr { +deprecated class BinaryExpr extends Expr, @cil_binary_expr { override int getPopCount() { result = 2 } } /** An expression with one operand. */ -class UnaryExpr extends Expr, @cil_unary_expr { +deprecated class UnaryExpr extends Expr, @cil_unary_expr { override int getPopCount() { result = 1 } /** Gets the operand of this unary expression. */ @@ -65,12 +65,12 @@ class UnaryExpr extends Expr, @cil_unary_expr { } /** A binary expression that compares two values. */ -class ComparisonOperation extends BinaryExpr, @cil_comparison_operation { +deprecated class ComparisonOperation extends BinaryExpr, @cil_comparison_operation { override BoolType getType() { exists(result) } } /** A binary arithmetic expression. */ -class BinaryArithmeticExpr extends BinaryExpr, @cil_binary_arithmetic_operation { +deprecated class BinaryArithmeticExpr extends BinaryExpr, @cil_binary_arithmetic_operation { override Type getType() { exists(Type t0, Type t1 | t0 = this.getOperandType(0).getUnderlyingType() and @@ -86,28 +86,28 @@ class BinaryArithmeticExpr extends BinaryExpr, @cil_binary_arithmetic_operation } /** A binary bitwise expression. */ -class BinaryBitwiseOperation extends BinaryExpr, @cil_binary_bitwise_operation { +deprecated class BinaryBitwiseOperation extends BinaryExpr, @cil_binary_bitwise_operation { // This is wrong but efficient - should depend on the types of the operands. override IntType getType() { exists(result) } } /** A unary bitwise expression. */ -class UnaryBitwiseOperation extends UnaryExpr, @cil_unary_bitwise_operation { +deprecated class UnaryBitwiseOperation extends UnaryExpr, @cil_unary_bitwise_operation { // This is wrong but efficient - should depend on the types of the operands. override IntType getType() { exists(result) } } /** A unary expression that converts a value from one primitive type to another. */ -class Conversion extends UnaryExpr, @cil_conversion_operation { +deprecated class Conversion extends UnaryExpr, @cil_conversion_operation { /** Gets the expression being converted. */ Expr getExpr() { result = this.getOperand(0) } } /** A branch that leaves the scope of a `Handler`. */ -class Leave extends UnconditionalBranch, @cil_leave_any { } +deprecated class Leave extends UnconditionalBranch, @cil_leave_any { } /** An expression that pushes a literal value onto the stack. */ -class Literal extends DotNet::Literal, Expr, @cil_literal { +deprecated class Literal extends DotNet::Literal, Expr, @cil_literal { /** Gets the pushed value. */ override string getValue() { cil_value(this, result) } @@ -115,37 +115,37 @@ class Literal extends DotNet::Literal, Expr, @cil_literal { } /** An integer literal. */ -class IntLiteral extends Literal, @cil_ldc_i { +deprecated class IntLiteral extends Literal, @cil_ldc_i { override string getExtra() { none() } override IntType getType() { exists(result) } } /** An expression that pushes a `float`/`Single`. */ -class FloatLiteral extends Literal, @cil_ldc_r { } +deprecated class FloatLiteral extends Literal, @cil_ldc_r { } /** An expression that pushes a `null` value onto the stack. */ -class NullLiteral extends Literal, @cil_ldnull { } +deprecated class NullLiteral extends Literal, @cil_ldnull { } /** An expression that pushes a string onto the stack. */ -class StringLiteral extends Literal, @cil_ldstr { } +deprecated class StringLiteral extends Literal, @cil_ldstr { } /** A branch with one operand. */ -class UnaryBranch extends ConditionalBranch, @cil_unary_jump { +deprecated class UnaryBranch extends ConditionalBranch, @cil_unary_jump { override int getPopCount() { result = 1 } override int getPushCount() { result = 0 } } /** A branch with two operands. */ -class BinaryBranch extends ConditionalBranch, @cil_binary_jump { +deprecated class BinaryBranch extends ConditionalBranch, @cil_binary_jump { override int getPopCount() { result = 2 } override int getPushCount() { result = 0 } } /** A call. */ -class Call extends Expr, DotNet::Call, @cil_call_any { +deprecated class Call extends Expr, DotNet::Call, @cil_call_any { /** Gets the method that is called. */ override Method getTarget() { cil_access(this, result) } @@ -198,24 +198,24 @@ class Call extends Expr, DotNet::Call, @cil_call_any { } /** A tail call. */ -class TailCall extends Call { +deprecated class TailCall extends Call { TailCall() { this.isTailCall() } override predicate canFlowNext() { none() } } /** A call to a static target. */ -class StaticCall extends Call { +deprecated class StaticCall extends Call { StaticCall() { not this.isVirtual() } } /** A call to a virtual target. */ -class VirtualCall extends Call { +deprecated class VirtualCall extends Call { VirtualCall() { this.isVirtual() } } /** A read of an array element. */ -class ReadArrayElement extends BinaryExpr, @cil_read_array { +deprecated class ReadArrayElement extends BinaryExpr, @cil_read_array { /** Gets the array being read. */ Expr getArray() { result = this.getOperand(1) } @@ -224,14 +224,14 @@ class ReadArrayElement extends BinaryExpr, @cil_read_array { } /** A write of an array element. */ -class WriteArrayElement extends Instruction, @cil_write_array { +deprecated class WriteArrayElement extends Instruction, @cil_write_array { override int getPushCount() { result = 0 } override int getPopCount() { result = 3 } } /** A `return` statement. */ -class Return extends Instruction, @cil_ret { +deprecated class Return extends Instruction, @cil_ret { /** Gets the expression being returned, if any. */ Expr getExpr() { result = this.getOperand(0) } @@ -239,7 +239,7 @@ class Return extends Instruction, @cil_ret { } /** A `throw` statement. */ -class Throw extends Instruction, DotNet::Throw, @cil_throw_any { +deprecated class Throw extends Instruction, DotNet::Throw, @cil_throw_any { override Expr getExpr() { result = this.getOperand(0) } /** Gets the type of the exception being thrown. */ @@ -249,7 +249,7 @@ class Throw extends Instruction, DotNet::Throw, @cil_throw_any { } /** Stores a value at an address/location. */ -class StoreIndirect extends Instruction, @cil_stind { +deprecated class StoreIndirect extends Instruction, @cil_stind { override int getPopCount() { result = 2 } /** Gets the location to store the value at. */ @@ -260,4 +260,4 @@ class StoreIndirect extends Instruction, @cil_stind { } /** Loads a value from an address/location. */ -class LoadIndirect extends UnaryExpr, @cil_ldind { } +deprecated class LoadIndirect extends UnaryExpr, @cil_ldind { } diff --git a/csharp/ql/lib/semmle/code/cil/Instructions.qll b/csharp/ql/lib/semmle/code/cil/Instructions.qll index 8828e8e4e42..6de4e718416 100644 --- a/csharp/ql/lib/semmle/code/cil/Instructions.qll +++ b/csharp/ql/lib/semmle/code/cil/Instructions.qll @@ -8,7 +8,7 @@ private import CIL private import semmle.code.dotnet.Variable as DotNet -module Opcodes { +deprecated module Opcodes { /** An `ldc.i4.m1` instruction. */ class Ldc_i4_m1 extends IntLiteral, @cil_ldc_i4_m1 { override string getOpcodeName() { result = "ldc.i4.m1" } diff --git a/csharp/ql/lib/semmle/code/cil/Method.qll b/csharp/ql/lib/semmle/code/cil/Method.qll index b2e40ce70ca..cfc38f58202 100644 --- a/csharp/ql/lib/semmle/code/cil/Method.qll +++ b/csharp/ql/lib/semmle/code/cil/Method.qll @@ -12,7 +12,7 @@ private import dotnet /** * An implementation of a method in an assembly. */ -class MethodImplementation extends EntryPoint, @cil_method_implementation { +deprecated class MethodImplementation extends EntryPoint, @cil_method_implementation { /** Gets the method of this implementation. */ Method getMethod() { cil_method_implementation(this, result, _) } @@ -66,7 +66,7 @@ class MethodImplementation extends EntryPoint, @cil_method_implementation { * A method, which corresponds to any callable in C#, including constructors, * destructors, operators, accessors and so on. */ -class Method extends DotNet::Callable, Element, Member, TypeContainer, DataFlowNode, +deprecated class Method extends DotNet::Callable, Element, Member, TypeContainer, DataFlowNode, CustomModifierReceiver, Parameterizable, @cil_method { /** @@ -191,27 +191,27 @@ class Method extends DotNet::Callable, Element, Member, TypeContainer, DataFlowN } /** A destructor/finalizer. */ -class Destructor extends Method, DotNet::Destructor { +deprecated class Destructor extends Method, DotNet::Destructor { Destructor() { this.isFinalizer() } } /** A constructor. */ -class Constructor extends Method, DotNet::Constructor { +deprecated class Constructor extends Method, DotNet::Constructor { Constructor() { this.isConstructor() } } /** A static/class constructor. */ -class StaticConstructor extends Constructor { +deprecated class StaticConstructor extends Constructor { StaticConstructor() { this.isStaticConstructor() } } /** An instance constructor. */ -class InstanceConstructor extends Constructor { +deprecated class InstanceConstructor extends Constructor { InstanceConstructor() { this.isInstanceConstructor() } } /** A method that always returns the `this` parameter. */ -class ChainingMethod extends Method { +deprecated class ChainingMethod extends Method { ChainingMethod() { forex(Return ret | ret = this.getImplementation().getAnInstruction() | ret.getExpr() instanceof ThisAccess @@ -220,13 +220,13 @@ class ChainingMethod extends Method { } /** An accessor. */ -abstract class Accessor extends Method { +abstract deprecated class Accessor extends Method { /** Gets the property declaring this accessor. */ abstract Property getProperty(); } /** A getter. */ -class Getter extends Accessor { +deprecated class Getter extends Accessor { Getter() { cil_getter(_, this) } override Property getProperty() { cil_getter(result, this) } @@ -236,7 +236,7 @@ class Getter extends Accessor { * A method that does nothing but retrieve a field. * Note that this is not necessarily a property getter. */ -class TrivialGetter extends Method { +deprecated class TrivialGetter extends Method { TrivialGetter() { exists(MethodImplementation impl | impl = this.getAnImplementation() | impl.getInstruction(0) instanceof ThisAccess and @@ -252,7 +252,7 @@ class TrivialGetter extends Method { } /** A setter. */ -class Setter extends Accessor { +deprecated class Setter extends Accessor { Setter() { cil_setter(_, this) } override Property getProperty() { cil_setter(result, this) } @@ -269,7 +269,7 @@ class Setter extends Accessor { * A method that does nothing but set a field. * This is not necessarily a property setter. */ -class TrivialSetter extends Method { +deprecated class TrivialSetter extends Method { TrivialSetter() { exists(MethodImplementation impl | impl = this.getAnImplementation() | impl.getInstruction(0) instanceof ThisAccess and @@ -285,10 +285,10 @@ class TrivialSetter extends Method { } /** An alias for `Method` for compatibility with the C# data model. */ -class Callable = Method; +deprecated class Callable = Method; /** An operator. */ -class Operator extends Method { +deprecated class Operator extends Method { Operator() { this.isOperator() } /** Gets the name of the implementing method (for compatibility with C# data model). */ diff --git a/csharp/ql/lib/semmle/code/cil/Parameterizable.qll b/csharp/ql/lib/semmle/code/cil/Parameterizable.qll index 77b16aba025..5c4ef2fb51d 100644 --- a/csharp/ql/lib/semmle/code/cil/Parameterizable.qll +++ b/csharp/ql/lib/semmle/code/cil/Parameterizable.qll @@ -8,7 +8,7 @@ private import dotnet /** * A parameterizable entity, such as `FunctionPointerType` or `Method`. */ -class Parameterizable extends DotNet::Parameterizable, Element, @cil_parameterizable { +deprecated class Parameterizable extends DotNet::Parameterizable, Element, @cil_parameterizable { override Parameter getRawParameter(int n) { cil_parameter(result, this, n, _) } override Parameter getParameter(int n) { cil_parameter(result, this, n, _) } diff --git a/csharp/ql/lib/semmle/code/cil/Ssa.qll b/csharp/ql/lib/semmle/code/cil/Ssa.qll index b9c56763a3d..c1dcad4fef5 100644 --- a/csharp/ql/lib/semmle/code/cil/Ssa.qll +++ b/csharp/ql/lib/semmle/code/cil/Ssa.qll @@ -7,7 +7,7 @@ private import CIL /** * Provides classes for working with static single assignment (SSA) form. */ -module Ssa { +deprecated module Ssa { private import internal.SsaImpl as SsaImpl /** An SSA definition. */ diff --git a/csharp/ql/lib/semmle/code/cil/Stubs.qll b/csharp/ql/lib/semmle/code/cil/Stubs.qll index 7617119e617..45bad86cfb8 100644 --- a/csharp/ql/lib/semmle/code/cil/Stubs.qll +++ b/csharp/ql/lib/semmle/code/cil/Stubs.qll @@ -8,7 +8,7 @@ import CIL * The average number of instructions per method, * below which an assembly is probably a stub. */ -private float stubInstructionThreshold() { result = 5.1 } +deprecated private float stubInstructionThreshold() { result = 5.1 } cached private module Cached { @@ -18,7 +18,7 @@ private module Cached { * Look at the average number of instructions per method. */ cached - predicate assemblyIsStubImpl(Assembly asm) { + deprecated predicate assemblyIsStubImpl(Assembly asm) { exists(int totalInstructions, int totalImplementations | totalInstructions = count(Instruction i | i.getImplementation().getLocation() = asm) and totalImplementations = @@ -28,7 +28,7 @@ private module Cached { } cached - predicate bestImplementation(MethodImplementation mi) { + deprecated predicate bestImplementation(MethodImplementation mi) { exists(Assembly asm | asm = mi.getLocation() and (assemblyIsStubImpl(asm) implies asm.getFile().extractedQlTest()) and @@ -45,13 +45,13 @@ private module Cached { private import Cached -predicate assemblyIsStub = assemblyIsStubImpl/1; +deprecated predicate assemblyIsStub = assemblyIsStubImpl/1; /** * A method implementation that is the "best" one for a particular method, * if there are several potential implementations to choose between, and * excludes implementations that are probably from stub/reference assemblies. */ -class BestImplementation extends MethodImplementation { +deprecated class BestImplementation extends MethodImplementation { BestImplementation() { bestImplementation(this) } } diff --git a/csharp/ql/lib/semmle/code/cil/Type.qll b/csharp/ql/lib/semmle/code/cil/Type.qll index 32337e127e7..370a1437c8c 100644 --- a/csharp/ql/lib/semmle/code/cil/Type.qll +++ b/csharp/ql/lib/semmle/code/cil/Type.qll @@ -11,7 +11,7 @@ private import semmle.code.csharp.commons.QualifiedName * * Either a type (`Type`), a method(`Method`), or a namespace (`Namespace`). */ -class TypeContainer extends DotNet::NamedElement, @cil_type_container { +deprecated class TypeContainer extends DotNet::NamedElement, @cil_type_container { /** Gets the parent of this type container, if any. */ TypeContainer getParent() { none() } @@ -19,7 +19,7 @@ class TypeContainer extends DotNet::NamedElement, @cil_type_container { } /** A namespace. */ -class Namespace extends DotNet::Namespace, TypeContainer, @namespace { +deprecated class Namespace extends DotNet::Namespace, TypeContainer, @namespace { override string toString() { result = this.getFullName() } override Namespace getParent() { result = this.getParentNamespace() } @@ -32,7 +32,7 @@ class Namespace extends DotNet::Namespace, TypeContainer, @namespace { /** * A type. */ -class Type extends DotNet::Type, Declaration, TypeContainer, @cil_type { +deprecated class Type extends DotNet::Type, Declaration, TypeContainer, @cil_type { override TypeContainer getParent() { cil_type(this, _, _, result, _) } override string getName() { cil_type(this, result, _, _, _) } diff --git a/csharp/ql/lib/semmle/code/cil/Types.qll b/csharp/ql/lib/semmle/code/cil/Types.qll index 2cfc09daf99..184bbd21c30 100644 --- a/csharp/ql/lib/semmle/code/cil/Types.qll +++ b/csharp/ql/lib/semmle/code/cil/Types.qll @@ -6,7 +6,7 @@ private import CIL private import dotnet /** A type parameter. */ -class TypeParameter extends DotNet::TypeParameter, Type, @cil_typeparameter { +deprecated class TypeParameter extends DotNet::TypeParameter, Type, @cil_typeparameter { override int getIndex() { cil_type_parameter(_, result, this) } /** Gets the generic type/method declaring this type parameter. */ @@ -33,7 +33,7 @@ class TypeParameter extends DotNet::TypeParameter, Type, @cil_typeparameter { } /** A value or reference type. */ -class ValueOrRefType extends DotNet::ValueOrRefType, Type, @cil_valueorreftype { +deprecated class ValueOrRefType extends DotNet::ValueOrRefType, Type, @cil_valueorreftype { override ValueOrRefType getDeclaringType() { result = this.getParent() } override string getUndecoratedName() { cil_type(this, result, _, _, _) } @@ -44,7 +44,7 @@ class ValueOrRefType extends DotNet::ValueOrRefType, Type, @cil_valueorreftype { } /** An `enum`. */ -class Enum extends ValueOrRefType { +deprecated class Enum extends ValueOrRefType { Enum() { this.isEnum() } override IntegralType getUnderlyingType() { @@ -56,17 +56,17 @@ class Enum extends ValueOrRefType { } /** A `class`. */ -class Class extends ValueOrRefType { +deprecated class Class extends ValueOrRefType { Class() { this.isClass() } } /** An `interface`. */ -class Interface extends ValueOrRefType { +deprecated class Interface extends ValueOrRefType { Interface() { this.isInterface() } } /** An array. */ -class ArrayType extends DotNet::ArrayType, Type, @cil_array_type { +deprecated class ArrayType extends DotNet::ArrayType, Type, @cil_array_type { override Type getElementType() { cil_array_type(this, result, _) } /** Gets the rank of this array. */ @@ -80,7 +80,7 @@ class ArrayType extends DotNet::ArrayType, Type, @cil_array_type { } /** A pointer type. */ -class PointerType extends DotNet::PointerType, PrimitiveType, @cil_pointer_type { +deprecated class PointerType extends DotNet::PointerType, PrimitiveType, @cil_pointer_type { override Type getReferentType() { cil_pointer_type(this, result) } override IntType getUnderlyingType() { any() } @@ -95,31 +95,31 @@ class PointerType extends DotNet::PointerType, PrimitiveType, @cil_pointer_type } /** A primitive type, built into the runtime. */ -abstract class PrimitiveType extends Type { } +abstract deprecated class PrimitiveType extends Type { } /** * A primitive numeric type. * Either an integral type (`IntegralType`) or a floating point type (`FloatingPointType`). */ -abstract class NumericType extends PrimitiveType, ValueOrRefType { } +abstract deprecated class NumericType extends PrimitiveType, ValueOrRefType { } /** A floating point type. Either single precision (`FloatType`) or double precision (`DoubleType`). */ -abstract class FloatingPointType extends NumericType { } +abstract deprecated class FloatingPointType extends NumericType { } /** * An integral numeric type. Either a signed integral type (`SignedIntegralType`) * or an unsigned integral type (`UnsignedIntegralType`). */ -abstract class IntegralType extends NumericType { } +abstract deprecated class IntegralType extends NumericType { } /** A signed integral type. */ -abstract class SignedIntegralType extends IntegralType { } +abstract deprecated class SignedIntegralType extends IntegralType { } /** An unsigned integral type. */ -abstract class UnsignedIntegralType extends IntegralType { } +abstract deprecated class UnsignedIntegralType extends IntegralType { } /** The `void` type, `System.Void`. */ -class VoidType extends PrimitiveType { +deprecated class VoidType extends PrimitiveType { VoidType() { this.isSystemType("Void") } override string toString() { result = "void" } @@ -128,7 +128,7 @@ class VoidType extends PrimitiveType { } /** The type `System.Int32`. */ -class IntType extends SignedIntegralType { +deprecated class IntType extends SignedIntegralType { IntType() { this.isSystemType("Int32") } override string toStringWithTypes() { result = "int" } @@ -139,21 +139,21 @@ class IntType extends SignedIntegralType { } /** The type `System.IntPtr`. */ -class IntPtrType extends PrimitiveType { +deprecated class IntPtrType extends PrimitiveType { IntPtrType() { this.isSystemType("IntPtr") } override IntType getUnderlyingType() { any() } } /** The type `System.UIntPtr`. */ -class UIntPtrType extends PrimitiveType { +deprecated class UIntPtrType extends PrimitiveType { UIntPtrType() { this.isSystemType("UIntPtr") } override IntType getUnderlyingType() { any() } } /** The type `System.UInt32`. */ -class UIntType extends UnsignedIntegralType { +deprecated class UIntType extends UnsignedIntegralType { UIntType() { this.isSystemType("UInt32") } override string toStringWithTypes() { result = "uint" } @@ -164,7 +164,7 @@ class UIntType extends UnsignedIntegralType { } /** The type `System.SByte`. */ -class SByteType extends SignedIntegralType { +deprecated class SByteType extends SignedIntegralType { SByteType() { this.isSystemType("SByte") } override string toStringWithTypes() { result = "sbyte" } @@ -173,7 +173,7 @@ class SByteType extends SignedIntegralType { } /** The type `System.Byte`. */ -class ByteType extends UnsignedIntegralType { +deprecated class ByteType extends UnsignedIntegralType { ByteType() { this.isSystemType("Byte") } override string toStringWithTypes() { result = "byte" } @@ -184,7 +184,7 @@ class ByteType extends UnsignedIntegralType { } /** The type `System.Int16`. */ -class ShortType extends SignedIntegralType { +deprecated class ShortType extends SignedIntegralType { ShortType() { this.isSystemType("Int16") } override string toStringWithTypes() { result = "short" } @@ -193,7 +193,7 @@ class ShortType extends SignedIntegralType { } /** The type `System.UInt16`. */ -class UShortType extends UnsignedIntegralType { +deprecated class UShortType extends UnsignedIntegralType { UShortType() { this.isSystemType("UInt16") } override string toStringWithTypes() { result = "ushort" } @@ -204,7 +204,7 @@ class UShortType extends UnsignedIntegralType { } /** The type `System.Int64`. */ -class LongType extends SignedIntegralType { +deprecated class LongType extends SignedIntegralType { LongType() { this.isSystemType("Int64") } override string toStringWithTypes() { result = "long" } @@ -213,7 +213,7 @@ class LongType extends SignedIntegralType { } /** The type `System.UInt64`. */ -class ULongType extends UnsignedIntegralType { +deprecated class ULongType extends UnsignedIntegralType { ULongType() { this.isSystemType("UInt64") } override string toStringWithTypes() { result = "ulong" } @@ -224,7 +224,7 @@ class ULongType extends UnsignedIntegralType { } /** The type `System.Decimal`. */ -class DecimalType extends SignedIntegralType { +deprecated class DecimalType extends SignedIntegralType { DecimalType() { this.isSystemType("Decimal") } override string toStringWithTypes() { result = "decimal" } @@ -233,21 +233,21 @@ class DecimalType extends SignedIntegralType { } /** The type `System.String`. */ -class StringType extends PrimitiveType, ValueOrRefType { +deprecated class StringType extends PrimitiveType, ValueOrRefType { StringType() { this.isSystemType("String") } override string toStringWithTypes() { result = "string" } } /** The type `System.Object`. */ -class ObjectType extends ValueOrRefType { +deprecated class ObjectType extends ValueOrRefType { ObjectType() { this.isSystemType("Object") } override string toStringWithTypes() { result = "object" } } /** The type `System.Boolean`. */ -class BoolType extends PrimitiveType, ValueOrRefType { +deprecated class BoolType extends PrimitiveType, ValueOrRefType { BoolType() { this.isSystemType("Boolean") } override string toStringWithTypes() { result = "bool" } @@ -256,7 +256,7 @@ class BoolType extends PrimitiveType, ValueOrRefType { } /** The type `System.Double`. */ -class DoubleType extends FloatingPointType { +deprecated class DoubleType extends FloatingPointType { DoubleType() { this.isSystemType("Double") } override string toStringWithTypes() { result = "double" } @@ -265,7 +265,7 @@ class DoubleType extends FloatingPointType { } /** The type `System.Single`. */ -class FloatType extends FloatingPointType { +deprecated class FloatType extends FloatingPointType { FloatType() { this.isSystemType("Single") } override string toStringWithTypes() { result = "float" } @@ -274,7 +274,7 @@ class FloatType extends FloatingPointType { } /** The type `System.Char`. */ -class CharType extends IntegralType { +deprecated class CharType extends IntegralType { CharType() { this.isSystemType("Char") } override string toStringWithTypes() { result = "char" } @@ -285,7 +285,7 @@ class CharType extends IntegralType { } /** The type `System.Type`. */ -class SystemType extends ValueOrRefType { +deprecated class SystemType extends ValueOrRefType { SystemType() { this.isSystemType("Type") } } @@ -296,7 +296,7 @@ class SystemType extends ValueOrRefType { * delegate* * ``` */ -class FunctionPointerType extends Type, CustomModifierReceiver, Parameterizable, +deprecated class FunctionPointerType extends Type, CustomModifierReceiver, Parameterizable, @cil_function_pointer_type { /** Gets the return type of this function pointer. */ diff --git a/csharp/ql/lib/semmle/code/cil/Variable.qll b/csharp/ql/lib/semmle/code/cil/Variable.qll index 7ad9b37c024..99c3d049700 100644 --- a/csharp/ql/lib/semmle/code/cil/Variable.qll +++ b/csharp/ql/lib/semmle/code/cil/Variable.qll @@ -6,7 +6,7 @@ private import CIL private import dotnet /** A variable. Either a stack variable (`StackVariable`) or a field (`Field`). */ -class Variable extends DotNet::Variable, Declaration, DataFlowNode, @cil_variable { +deprecated class Variable extends DotNet::Variable, Declaration, DataFlowNode, @cil_variable { /** Gets the type of this variable. */ override Type getType() { none() } @@ -28,7 +28,7 @@ class Variable extends DotNet::Variable, Declaration, DataFlowNode, @cil_variabl } /** A stack variable. Either a local variable (`LocalVariable`) or a parameter (`Parameter`). */ -class StackVariable extends Variable, @cil_stack_variable { +deprecated class StackVariable extends Variable, @cil_stack_variable { deprecated override predicate hasQualifiedName(string qualifier, string name) { none() } override predicate hasFullyQualifiedName(string qualifier, string name) { none() } @@ -39,7 +39,7 @@ class StackVariable extends Variable, @cil_stack_variable { * * Each method in CIL has a number of typed local variables, in addition to the evaluation stack. */ -class LocalVariable extends StackVariable, @cil_local_variable { +deprecated class LocalVariable extends StackVariable, @cil_local_variable { override string toString() { result = "Local variable " + this.getIndex() + " of method " + @@ -60,7 +60,7 @@ class LocalVariable extends StackVariable, @cil_local_variable { } /** A parameter of a `Method` or `FunctionPointerType`. */ -class Parameter extends DotNet::Parameter, CustomModifierReceiver, @cil_parameter { +deprecated class Parameter extends DotNet::Parameter, CustomModifierReceiver, @cil_parameter { override Parameterizable getDeclaringElement() { cil_parameter(this, result, _, _) } /** Gets the index of this parameter. */ @@ -107,7 +107,7 @@ class Parameter extends DotNet::Parameter, CustomModifierReceiver, @cil_paramete } /** A method parameter. */ -class MethodParameter extends Parameter, StackVariable { +deprecated class MethodParameter extends Parameter, StackVariable { /** Gets the method declaring this parameter. */ override Method getMethod() { this = result.getARawParameter() } @@ -132,7 +132,7 @@ class MethodParameter extends Parameter, StackVariable { } /** A parameter corresponding to `this`. */ -class ThisParameter extends MethodParameter { +deprecated class ThisParameter extends MethodParameter { ThisParameter() { not this.getMethod().isStatic() and this.getIndex() = 0 @@ -140,7 +140,7 @@ class ThisParameter extends MethodParameter { } /** A field. */ -class Field extends DotNet::Field, Variable, Member, CustomModifierReceiver, @cil_field { +deprecated class Field extends DotNet::Field, Variable, Member, CustomModifierReceiver, @cil_field { override string toString() { result = this.getName() } override string toStringWithTypes() { diff --git a/csharp/ql/lib/semmle/code/cil/internal/SsaImpl.qll b/csharp/ql/lib/semmle/code/cil/internal/SsaImpl.qll index 460b40ac227..70e77c66ddb 100644 --- a/csharp/ql/lib/semmle/code/cil/internal/SsaImpl.qll +++ b/csharp/ql/lib/semmle/code/cil/internal/SsaImpl.qll @@ -1,7 +1,7 @@ private import cil private import codeql.ssa.Ssa as SsaImplCommon -private module SsaInput implements SsaImplCommon::InputSig { +deprecated private module SsaInput implements SsaImplCommon::InputSig { class BasicBlock = CIL::BasicBlock; BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { result = bb.getImmediateDominator() } @@ -29,17 +29,17 @@ private module SsaInput implements SsaImplCommon::InputSig { } } -import SsaImplCommon::Make +deprecated import SsaImplCommon::Make cached private module Cached { private import CIL cached - predicate forceCachingInSameStage() { any() } + deprecated predicate forceCachingInSameStage() { any() } cached - ReadAccess getARead(Definition def) { + deprecated ReadAccess getARead(Definition def) { exists(BasicBlock bb, int i | ssaDefReachesRead(_, def, bb, i) and result = bb.getNode(i) @@ -47,7 +47,7 @@ private module Cached { } cached - ReadAccess getAFirstReadExt(DefinitionExt def) { + deprecated ReadAccess getAFirstReadExt(DefinitionExt def) { exists(BasicBlock bb1, int i1, BasicBlock bb2, int i2 | def.definesAt(_, bb1, i1, _) and adjacentDefReadExt(def, _, bb1, i1, bb2, i2) and @@ -56,7 +56,7 @@ private module Cached { } cached - predicate hasAdjacentReadsExt(DefinitionExt def, ReadAccess first, ReadAccess second) { + deprecated predicate hasAdjacentReadsExt(DefinitionExt def, ReadAccess first, ReadAccess second) { exists(BasicBlock bb1, int i1, BasicBlock bb2, int i2 | first = bb1.getNode(i1) and adjacentDefReadExt(def, _, bb1, i1, bb2, i2) and @@ -65,10 +65,12 @@ private module Cached { } cached - Definition getAPhiInput(PhiNode phi) { phiHasInputFromBlock(phi, result, _) } + deprecated Definition getAPhiInput(PhiNode phi) { phiHasInputFromBlock(phi, result, _) } cached - predicate lastRefBeforeRedefExt(DefinitionExt def, BasicBlock bb, int i, DefinitionExt next) { + deprecated predicate lastRefBeforeRedefExt( + DefinitionExt def, BasicBlock bb, int i, DefinitionExt next + ) { lastRefRedefExt(def, _, bb, i, next) } } diff --git a/csharp/ql/lib/semmle/code/csharp/Callable.qll b/csharp/ql/lib/semmle/code/csharp/Callable.qll index 89f29458cc9..9cd365c2ecd 100644 --- a/csharp/ql/lib/semmle/code/csharp/Callable.qll +++ b/csharp/ql/lib/semmle/code/csharp/Callable.qll @@ -8,7 +8,6 @@ import Stmt import Type import exprs.Call private import commons.QualifiedName -private import dotnet private import semmle.code.csharp.ExprOrStmtParent private import semmle.code.csharp.metrics.Complexity private import TypeRef @@ -21,8 +20,73 @@ private import TypeRef * an anonymous function (`AnonymousFunctionExpr`), or a local function * (`LocalFunction`). */ -class Callable extends DotNet::Callable, Parameterizable, ExprOrStmtParent, @callable { - override Type getReturnType() { none() } +class Callable extends Parameterizable, ExprOrStmtParent, @callable { + pragma[noinline] + deprecated private string getDeclaringTypeLabel() { result = this.getDeclaringType().getLabel() } + + pragma[noinline] + deprecated private string getParameterTypeLabelNonGeneric(int p) { + not this instanceof Generic and + result = this.getParameter(p).getType().getLabel() + } + + language[monotonicAggregates] + pragma[nomagic] + deprecated private string getMethodParamListNonGeneric() { + result = + concat(int p | + p in [0 .. this.getNumberOfParameters() - 1] + | + this.getParameterTypeLabelNonGeneric(p), "," order by p + ) + } + + pragma[noinline] + deprecated private string getParameterTypeLabelGeneric(int p) { + this instanceof Generic and + result = this.getParameter(p).getType().getLabel() + } + + language[monotonicAggregates] + pragma[nomagic] + deprecated private string getMethodParamListGeneric() { + result = + concat(int p | + p in [0 .. this.getNumberOfParameters() - 1] + | + this.getParameterTypeLabelGeneric(p), "," order by p + ) + } + + pragma[noinline] + deprecated private string getLabelNonGeneric() { + not this instanceof Generic and + result = + this.getReturnTypeLabel() + " " + this.getDeclaringTypeLabel() + "." + + this.getUndecoratedName() + "(" + this.getMethodParamListNonGeneric() + ")" + } + + pragma[noinline] + deprecated private string getLabelGeneric() { + result = + this.getReturnTypeLabel() + " " + this.getDeclaringTypeLabel() + "." + + this.getUndecoratedName() + getGenericsLabel(this) + "(" + this.getMethodParamListGeneric() + + ")" + } + + deprecated final override string getLabel() { + result = this.getLabelNonGeneric() or + result = this.getLabelGeneric() + } + + deprecated private string getReturnTypeLabel() { + result = this.getReturnType().getLabel() + or + not exists(this.getReturnType()) and result = "System.Void" + } + + /** Gets the return type of this callable. */ + Type getReturnType() { none() } /** Gets the annotated return type of this callable. */ final AnnotatedType getAnnotatedReturnType() { result.appliesTo(this) } @@ -65,7 +129,8 @@ class Callable extends DotNet::Callable, Parameterizable, ExprOrStmtParent, @cal result = this.getExpressionBody() } - override predicate hasBody() { exists(this.getBody()) } + /** Holds if this callable has a body or an implementation. */ + predicate hasBody() { exists(this.getBody()) } /** * Holds if this callable has a non-empty body. That is, either it has @@ -196,7 +261,8 @@ class Callable extends DotNet::Callable, Parameterizable, ExprOrStmtParent, @cal ) } - override predicate canReturn(DotNet::Expr e) { + /** Holds if this callable can return expression `e`. */ + predicate canReturn(Expr e) { exists(ReturnStmt ret | ret.getEnclosingCallable() = this | e = ret.getExpr()) or e = this.getExpressionBody() and @@ -218,8 +284,6 @@ class Callable extends DotNet::Callable, Parameterizable, ExprOrStmtParent, @cal /** Gets a `Call` that has this callable as a target. */ Call getACall() { this = result.getTarget() } - - override Parameter getAParameter() { result = Parameterizable.super.getAParameter() } } /** @@ -325,7 +389,7 @@ class ExtensionMethod extends Method { * } * ``` */ -class Constructor extends DotNet::Constructor, Callable, Member, Attributable, @constructor { +class Constructor extends Callable, Member, Attributable, @constructor { override string getName() { constructors(this, result, _, _) } override Type getReturnType() { @@ -435,7 +499,7 @@ class PrimaryConstructor extends Constructor { * } * ``` */ -class Destructor extends DotNet::Destructor, Callable, Member, Attributable, @destructor { +class Destructor extends Callable, Member, Attributable, @destructor { override string getName() { destructors(this, result, _, _) } override Type getReturnType() { @@ -497,10 +561,33 @@ class Operator extends Callable, Member, Attributable, Overridable, @operator { override Parameter getRawParameter(int i) { result = this.getParameter(i) } } +pragma[nomagic] +private ValueOrRefType getARecordBaseType(ValueOrRefType t) { + exists(Callable c | + c.hasName("$") and + c.getNumberOfParameters() = 0 and + t = c.getDeclaringType() and + result = t + ) + or + result = getARecordBaseType(t).getABaseType() +} + /** A clone method on a record. */ -class RecordCloneMethod extends Method, DotNet::RecordCloneCallable { - override Constructor getConstructor() { - result = DotNet::RecordCloneCallable.super.getConstructor() +class RecordCloneMethod extends Method { + RecordCloneMethod() { + this.hasName("$") and + this.getNumberOfParameters() = 0 and + this.getReturnType() = getARecordBaseType(this.getDeclaringType()) and + this.isPublic() and + not this.isStatic() + } + + /** Gets the constructor that this clone method calls. */ + Constructor getConstructor() { + result.getDeclaringType() = this.getDeclaringType() and + result.getNumberOfParameters() = 1 and + result.getParameter(0).getType() = this.getDeclaringType() } } diff --git a/csharp/ql/lib/semmle/code/csharp/Element.qll b/csharp/ql/lib/semmle/code/csharp/Element.qll index e2f14379472..2c69912c993 100644 --- a/csharp/ql/lib/semmle/code/csharp/Element.qll +++ b/csharp/ql/lib/semmle/code/csharp/Element.qll @@ -4,7 +4,6 @@ import Location private import semmle.code.csharp.ExprOrStmtParent -private import dotnet private import commons.QualifiedName /** @@ -14,18 +13,64 @@ private import commons.QualifiedName * (`NamespaceDeclaration`), a `using` directive (`UsingDirective`), or type * parameter constraints (`TypeParameterConstraints`). */ -class Element extends DotNet::Element, @element { - override string toStringWithTypes() { result = this.toString() } +class Element extends @element { + /** Gets a textual representation of this element. */ + cached + string toString() { none() } + + /** Gets the file containing this element. */ + final File getFile() { result = this.getLocation().getFile() } + + /** Holds if this element is from source code. */ + predicate fromSource() { this.getFile().fromSource() } + + /** Holds if this element is from an assembly. */ + predicate fromLibrary() { this.getFile().fromLibrary() } + + /** + * Gets the "language" of this program element, as defined by the extension of the filename. + * For example, C# has language "cs", and Visual Basic has language "vb". + */ + deprecated final string getLanguage() { result = this.getLocation().getFile().getExtension() } + + /** + * Gets a comma-separated list of the names of the primary CodeQL classes to which this element belongs. + * + * If no primary class can be determined, the result is `"???"`. + */ + final string getPrimaryQlClasses() { + result = strictconcat(this.getAPrimaryQlClass(), ",") + or + not exists(this.getAPrimaryQlClass()) and + result = "???" + } + + /** + * Gets the name of a primary CodeQL class to which this element belongs. + * + * For most elements, this is simply the most precise syntactic category to + * which they belong; for example, `AddExpr` is a primary class, but + * `BinaryOperation` is not. + * + * If no primary classes match, this predicate has no result. If multiple + * primary classes match, this predicate can have multiple results. + * + * See also `getPrimaryQlClasses`, which is better to use in most cases. + */ + string getAPrimaryQlClass() { none() } + + /** Gets the full textual representation of this element, including type information. */ + string toStringWithTypes() { result = this.toString() } /** * Gets the location of this element. Where an element has locations in * source and assemblies, choose the source location. If there are multiple * assembly locations, choose only one. */ - final override Location getLocation() { result = bestLocation(this) } + final Location getLocation() { result = bestLocation(this) } /** Gets a location of this element, including sources and assemblies. */ - override Location getALocation() { none() } + Location getALocation() { none() } /** Gets the parent of this element, if any. */ Element getParent() { result.getAChild() = this } @@ -46,3 +91,96 @@ class Element extends DotNet::Element, @element { */ int getIndex() { exists(Element parent | parent.getChild(result) = this) } } + +/** An element that has a name. */ +class NamedElement extends Element, @named_element { + /** Gets the name of this element. */ + cached + string getName() { none() } + + /** Holds if this element has name 'name'. */ + final predicate hasName(string name) { name = this.getName() } + + /** + * Gets the fully qualified name of this element, for example the + * fully qualified name of `M` on line 3 is `N.C.M` in + * + * ```csharp + * namespace N { + * class C { + * void M(int i, string s) { } + * } + * } + * ``` + */ + cached + deprecated final string getQualifiedName() { + exists(string qualifier, string name | this.hasQualifiedName(qualifier, name) | + if qualifier = "" then result = name else result = qualifier + "." + name + ) + } + + /** + * Gets the fully qualified name of this element, for example the + * fully qualified name of `M` on line 3 is `N.C.M` in + * + * ```csharp + * namespace N { + * class C { + * void M(int i, string s) { } + * } + * } + * ``` + * + * Unbound generic types, such as `IList`, are represented as + * ``System.Collections.Generic.IList`1``. + */ + cached + final string getFullyQualifiedName() { + exists(string qualifier, string name | this.hasFullyQualifiedName(qualifier, name) | + if qualifier = "" then result = name else result = qualifier + "." + name + ) + } + + /** + * DEPRECATED: Use `hasFullyQualifiedName` instead. + * + * Holds if this element has the qualified name `qualifier`.`name`. + */ + cached + deprecated predicate hasQualifiedName(string qualifier, string name) { + qualifier = "" and name = this.getName() + } + + /** Holds if this element has the fully qualified name `qualifier`.`name`. */ + cached + predicate hasFullyQualifiedName(string qualifier, string name) { + qualifier = "" and name = this.getName() + } + + /** Gets a unique string label for this element. */ + cached + deprecated string getLabel() { none() } + + /** Holds if `other` has the same metadata handle in the same assembly. */ + deprecated predicate matchesHandle(NamedElement other) { + exists(Assembly asm, int handle | + metadata_handle(this, asm, handle) and + metadata_handle(other, asm, handle) + ) + } + + /** + * Holds if this element was compiled from source code that is also present in the + * database. That is, this element corresponds to another element from source. + */ + deprecated predicate compiledFromSource() { + not this.fromSource() and + exists(NamedElement other | other != this | + this.matchesHandle(other) and + other.fromSource() + ) + } + + override string toString() { result = this.getName() } +} diff --git a/csharp/ql/lib/semmle/code/csharp/Generics.qll b/csharp/ql/lib/semmle/code/csharp/Generics.qll index c4c2363f1d1..dd60ed0b0de 100644 --- a/csharp/ql/lib/semmle/code/csharp/Generics.qll +++ b/csharp/ql/lib/semmle/code/csharp/Generics.qll @@ -16,14 +16,13 @@ import Location import Namespace private import commons.QualifiedName -private import dotnet private import TypeRef /** * A generic declaration. Either an unbound generic (`UnboundGeneric`) or a * constructed generic (`ConstructedGeneric`). */ -class Generic extends DotNet::Generic, Declaration, @generic { +class Generic extends Declaration, @generic { Generic() { type_parameters(_, _, this, _) or type_arguments(_, _, this) or @@ -37,16 +36,23 @@ class Generic extends DotNet::Generic, Declaration, @generic { * Either an unbound generic type (`UnboundGenericType`) or an unbound generic method * (`UnboundGenericMethod`). */ -class UnboundGeneric extends DotNet::UnboundGeneric, Generic { +class UnboundGeneric extends Generic { UnboundGeneric() { type_parameters(_, _, this, _) } - final override TypeParameter getTypeParameter(int n) { type_parameters(result, n, this, _) } + /** Gets the `i`th type parameter, if any. */ + final TypeParameter getTypeParameter(int n) { type_parameters(result, n, this, _) } - override ConstructedGeneric getAConstructedGeneric() { result.getUnboundGeneric() = this } + /** Gets a type parameter. */ + TypeParameter getATypeParameter() { result = this.getTypeParameter(_) } - override TypeParameter getATypeParameter() { - result = DotNet::UnboundGeneric.super.getATypeParameter() - } + /** + * Gets one of the constructed versions of this declaration, + * which has been bound to a specific set of types. + */ + ConstructedGeneric getAConstructedGeneric() { result.getUnboundGeneric() = this } + + /** Gets the total number of type parameters. */ + int getNumberOfTypeParameters() { result = count(int i | exists(this.getTypeParameter(i))) } } /** Gets the type parameters as a comma-separated string. */ @@ -67,25 +73,61 @@ private string getTypeParameterBacktick(UnboundGeneric ug) { * Either a constructed generic type (`ConstructedType`) or a constructed * generic method (`ConstructedMethod`). */ -class ConstructedGeneric extends DotNet::ConstructedGeneric, Generic { +class ConstructedGeneric extends Generic { ConstructedGeneric() { type_arguments(_, _, this) or nullable_underlying_type(this, _) } - override UnboundGeneric getUnboundGeneric() { constructed_generic(this, result) } + /** + * Gets the unbound generic declaration from which this declaration was + * constructed. + */ + UnboundGeneric getUnboundGeneric() { constructed_generic(this, result) } override UnboundGeneric getUnboundDeclaration() { result = this.getUnboundGeneric().getUnboundDeclaration() } - override Type getTypeArgument(int i) { none() } + /** Gets the `i`th type argument, if any. */ + Type getTypeArgument(int i) { none() } - override Type getATypeArgument() { result = this.getTypeArgument(_) } + /** Gets a type argument. */ + Type getATypeArgument() { result = this.getTypeArgument(_) } /** Gets the annotated type of type argument `i`. */ final AnnotatedType getAnnotatedTypeArgument(int i) { result.appliesToTypeArgument(this, i) } + + /** Gets the total number of type arguments. */ + final int getNumberOfTypeArguments() { result = count(int i | exists(this.getTypeArgument(i))) } +} + +/** + * INTERNAL: Do not use. + * + * Constructs the label suffix for a generic method or type. + */ +deprecated string getGenericsLabel(Generic g) { + result = "`" + g.(UnboundGeneric).getNumberOfTypeParameters() + or + result = "<" + typeArgs(g) + ">" +} + +pragma[noinline] +deprecated private string getTypeArgumentLabel(ConstructedGeneric generic, int p) { + result = generic.getTypeArgument(p).getLabel() +} + +language[monotonicAggregates] +pragma[nomagic] +deprecated private string typeArgs(ConstructedGeneric generic) { + result = + concat(int p | + p in [0 .. generic.getNumberOfTypeArguments() - 1] + | + getTypeArgumentLabel(generic, p), "," + ) } /** Gets the type arguments as a comma-separated string. */ @@ -160,7 +202,10 @@ class UnboundGenericType extends ValueOrRefType, UnboundGeneric { /** * A type parameter, for example `T` in `List`. */ -class TypeParameter extends DotNet::TypeParameter, Type, @type_parameter { +class TypeParameter extends Type, @type_parameter { + /** Gets the generic type or method declaring this type parameter. */ + UnboundGeneric getDeclaringGeneric() { this = result.getATypeParameter() } + /** Gets the constraints on this type parameter, if any. */ TypeParameterConstraints getConstraints() { result.getTypeParameter() = this } @@ -216,8 +261,13 @@ class TypeParameter extends DotNet::TypeParameter, Type, @type_parameter { result = this.getASuppliedType().(TypeParameter).getAnUltimatelySuppliedType() } + /** Gets the index of this type parameter. For example the index of `U` in `Func` is 1. */ override int getIndex() { type_parameters(this, result, _, _) } + deprecated final override string getLabel() { result = "!" + this.getIndex() } + + override string getUndecoratedName() { result = "!" + this.getIndex() } + /** Gets the generic that defines this type parameter. */ UnboundGeneric getGeneric() { type_parameters(this, _, result, _) } diff --git a/csharp/ql/lib/semmle/code/csharp/Member.qll b/csharp/ql/lib/semmle/code/csharp/Member.qll index 13b8d1ca4bd..1be091170e3 100644 --- a/csharp/ql/lib/semmle/code/csharp/Member.qll +++ b/csharp/ql/lib/semmle/code/csharp/Member.qll @@ -4,7 +4,6 @@ import Callable import Element import Modifier import Variable -private import dotnet private import Implements private import TypeRef private import commons.QualifiedName @@ -26,8 +25,46 @@ private module FullyQualifiedNameInput implements QualifiedNameInputSig { * * Either a modifiable (`Modifiable`) or an assignable (`Assignable`). */ -class Declaration extends DotNet::Declaration, Element, @declaration { - override ValueOrRefType getDeclaringType() { none() } +class Declaration extends NamedElement, @declaration { + /** Gets the name of this declaration, without additional decoration such as `<...>`. */ + string getUndecoratedName() { none() } + + /** Holds if this element has undecorated name 'name'. */ + final predicate hasUndecoratedName(string name) { name = this.getUndecoratedName() } + + /** + * Gets the unbound version of this declaration, that is, the declaration where + * all type arguments have been removed. For example, in + * + * ```csharp + * class C + * { + * class Nested + * { + * } + * + * void Method() { } + * } + * ``` + * + * we have the following + * + * | Declaration | Unbound declaration | + * |-------------------------|---------------------| + * | `C` | ``C`1`` | + * | ``C`1.Nested`` | ``C`1.Nested`` | + * | `C.Nested` | ``C`1.Nested`` | + * | ``C`1.Method`1`` | ``C`1.Method`1`` | + * | ``C.Method`1`` | ``C`1.Method`1`` | + * | `C.Method` | ``C`1.Method`1`` | + */ + Declaration getUnboundDeclaration() { result = this } + + /** Holds if this declaration is unbound. */ + final predicate isUnboundDeclaration() { this.getUnboundDeclaration() = this } + + /** Gets the type containing this declaration, if any. */ + ValueOrRefType getDeclaringType() { none() } /** Holds if this declaration is unconstructed and in source code. */ final predicate isSourceDeclaration() { this.fromSource() and this.isUnboundDeclaration() } @@ -222,33 +259,27 @@ class Modifiable extends Declaration, @modifiable { } /** A declaration that is a member of a type. */ -class Member extends DotNet::Member, Modifiable, @member { +class Member extends Modifiable, @member { /** Gets an access to this member. */ MemberAccess getAnAccess() { result.getTarget() = this } - override predicate isPublic() { Modifiable.super.isPublic() } - - override predicate isProtected() { Modifiable.super.isProtected() } - - override predicate isPrivate() { Modifiable.super.isPrivate() } - - override predicate isInternal() { Modifiable.super.isInternal() } - - override predicate isSealed() { Modifiable.super.isSealed() } - - override predicate isAbstract() { Modifiable.super.isAbstract() } - - override predicate isStatic() { Modifiable.super.isStatic() } - - override predicate isRequired() { Modifiable.super.isRequired() } - - override predicate isFile() { Modifiable.super.isFile() } - - deprecated final override predicate hasQualifiedName(string namespace, string type, string name) { + /** + * DEPRECATED: Use `hasFullyQualifiedName` instead. + * + * Holds if this member has name `name` and is defined in type `type` + * with namespace `namespace`. + */ + cached + deprecated final predicate hasQualifiedName(string namespace, string type, string name) { QualifiedName::hasQualifiedName(this, namespace, type, name) } - final override predicate hasFullyQualifiedName(string namespace, string type, string name) { + /** + * Holds if this member has name `name` and is defined in type `type` + * with namespace `namespace`. + */ + cached + final predicate hasFullyQualifiedName(string namespace, string type, string name) { QualifiedName::hasQualifiedName(this, namespace, type, name) } } @@ -477,10 +508,24 @@ class Virtualizable extends Overridable, Member, @virtualizable { * A parameterizable declaration. Either a callable (`Callable`), a delegate * type (`DelegateType`), or an indexer (`Indexer`). */ -class Parameterizable extends DotNet::Parameterizable, Declaration, @parameterizable { - override Parameter getRawParameter(int i) { params(result, _, _, i, _, this, _) } +class Parameterizable extends Declaration, @parameterizable { + /** Gets raw parameter `i`, including the `this` parameter at index 0. */ + Parameter getRawParameter(int i) { params(result, _, _, i, _, this, _) } - override Parameter getParameter(int i) { params(result, _, _, i, _, this, _) } + /** Gets the `i`th parameter, excluding the `this` parameter. */ + Parameter getParameter(int i) { params(result, _, _, i, _, this, _) } + + /** Gets the number of parameters of this callable. */ + int getNumberOfParameters() { result = count(this.getAParameter()) } + + /** Holds if this declaration has no parameters. */ + predicate hasNoParameters() { not exists(this.getAParameter()) } + + /** Gets a parameter, if any. */ + Parameter getAParameter() { result = this.getParameter(_) } + + /** Gets a raw parameter (including the qualifier), if any. */ + final Parameter getARawParameter() { result = this.getRawParameter(_) } /** * Gets the type of the parameter, possibly prefixed diff --git a/csharp/ql/lib/semmle/code/csharp/Namespace.qll b/csharp/ql/lib/semmle/code/csharp/Namespace.qll index dddb59af119..002ce444b3f 100644 --- a/csharp/ql/lib/semmle/code/csharp/Namespace.qll +++ b/csharp/ql/lib/semmle/code/csharp/Namespace.qll @@ -1,8 +1,8 @@ /** Provides classes for namespaces. */ +private import semmle.code.csharp.commons.QualifiedName import Element import Type -private import dotnet /** * A type container. Either a namespace (`Namespace`) or a type (`Type`). @@ -18,24 +18,44 @@ class TypeContainer extends Declaration, @type_container { } * } * ``` */ -class Namespace extends DotNet::Namespace, TypeContainer, Declaration, @namespace { +class Namespace extends TypeContainer, Declaration, @namespace { override Namespace getParent() { result = this.getParentNamespace() } - override Namespace getParentNamespace() { parent_namespace(this, result) } + /** + * Gets the parent namespace, if any. For example the parent namespace of `System.IO` + * is `System`. The parent namespace of `System` is the global namespace. + */ + Namespace getParentNamespace() { parent_namespace(this, result) } - override Namespace getAChildNamespace() { parent_namespace(result, this) } + /** + * Gets a child namespace, if any. For example `System.IO` is a child in + * the namespace `System`. + */ + Namespace getAChildNamespace() { parent_namespace(result, this) } override TypeContainer getChild(int i) { i = 0 and parent_namespace(result, this) } + /** + * Holds if this namespace has the qualified name `qualifier`.`name`. + * + * For example if the qualified name is `System.Collections.Generic`, then + * `qualifier`=`System.Collections` and `name`=`Generic`. + */ deprecated override predicate hasQualifiedName(string qualifier, string name) { - DotNet::Namespace.super.hasQualifiedName(qualifier, name) + namespaceHasQualifiedName(this, qualifier, name) } + /** + * Holds if this namespace has the qualified name `qualifier`.`name`. + * + * For example if the qualified name is `System.Collections.Generic`, then + * `qualifier`=`System.Collections` and `name`=`Generic`. + */ override predicate hasFullyQualifiedName(string qualifier, string name) { - DotNet::Namespace.super.hasFullyQualifiedName(qualifier, name) + namespaceHasQualifiedName(this, qualifier, name) } /** @@ -123,7 +143,28 @@ class Namespace extends DotNet::Namespace, TypeContainer, Declaration, @namespac override Location getALocation() { result = this.getADeclaration().getALocation() } - override string toString() { result = DotNet::Namespace.super.toString() } + /** Gets a textual representation of this namespace. */ + override string toString() { result = this.getFullName() } + + /** Holds if this is the global namespace. */ + final predicate isGlobalNamespace() { this.getName() = "" } + + /** Gets the simple name of this namespace, for example `IO` in `System.IO`. */ + final override string getName() { namespaces(this, result) } + + final override string getUndecoratedName() { namespaces(this, result) } + + override string getAPrimaryQlClass() { result = "Namespace" } + + /** + * Get the fully qualified name of this namespace. + */ + string getFullName() { + exists(string namespace, string name | + namespaceHasQualifiedName(this, namespace, name) and + result = getQualifiedName(namespace, name) + ) + } } /** diff --git a/csharp/ql/lib/semmle/code/csharp/Property.qll b/csharp/ql/lib/semmle/code/csharp/Property.qll index bdeb9832d3f..60ea83c3011 100644 --- a/csharp/ql/lib/semmle/code/csharp/Property.qll +++ b/csharp/ql/lib/semmle/code/csharp/Property.qll @@ -5,8 +5,6 @@ import Member import Stmt import Type -private import cil -private import dotnet private import semmle.code.csharp.ExprOrStmtParent private import TypeRef @@ -113,7 +111,7 @@ class DeclarationWithGetSetAccessors extends DeclarationWithAccessors, TopLevelE * } * ``` */ -class Property extends DotNet::Property, DeclarationWithGetSetAccessors, @property { +class Property extends DeclarationWithGetSetAccessors, @property { override string getName() { properties(this, result, _, _, _) } override string getUndecoratedName() { properties(this, result, _, _, _) } @@ -558,8 +556,6 @@ class TrivialProperty extends Property { this.isAutoImplemented() or this.getGetter().trivialGetterField() = this.getSetter().trivialSetterField() - or - exists(CIL::TrivialProperty prop | this.matchesHandle(prop)) } } diff --git a/csharp/ql/lib/semmle/code/csharp/Type.qll b/csharp/ql/lib/semmle/code/csharp/Type.qll index 00a805c0858..1fd8e41642b 100644 --- a/csharp/ql/lib/semmle/code/csharp/Type.qll +++ b/csharp/ql/lib/semmle/code/csharp/Type.qll @@ -7,7 +7,6 @@ import Location import Namespace import Property private import Conversion -private import dotnet private import semmle.code.csharp.metrics.Coupling private import TypeRef private import semmle.code.csharp.frameworks.System @@ -20,7 +19,10 @@ private import semmle.code.csharp.frameworks.system.runtime.CompilerServices * a pointer type (`PointerType`), the arglist type (`ArglistType`), an unknown * type (`UnknownType`), or a type parameter (`TypeParameter`). */ -class Type extends DotNet::Type, Member, TypeContainer, @type { +class Type extends Member, TypeContainer, @type { + /** Gets the name of this type without additional syntax such as `[]` or `*`. */ + override string getUndecoratedName() { none() } + override string getName() { types(this, _, result) } override Type getUnboundDeclaration() { result = this } @@ -56,7 +58,7 @@ private predicate isObjectClass(Class c) { c instanceof ObjectType } * * Either a value type (`ValueType`) or a reference type (`RefType`). */ -class ValueOrRefType extends DotNet::ValueOrRefType, Type, Attributable, @value_or_ref_type { +class ValueOrRefType extends Type, Attributable, @value_or_ref_type { /** Gets the namespace containing this type. */ Namespace getNamespace() { if exists(this.getDeclaringType()) @@ -64,7 +66,8 @@ class ValueOrRefType extends DotNet::ValueOrRefType, Type, Attributable, @value_ else result.getATypeDeclaration() = this } - override Namespace getDeclaringNamespace() { this = result.getATypeDeclaration() } + /** Gets the namespace declaring this type, if any. */ + Namespace getDeclaringNamespace() { this = result.getATypeDeclaration() } override ValueOrRefType getDeclaringType() { none() } @@ -73,6 +76,30 @@ class ValueOrRefType extends DotNet::ValueOrRefType, Type, Attributable, @value_ /** Gets a nested child type, if any. */ NestedType getAChildType() { nested_types(result, this, _) } + deprecated private string getPrefixWithTypes() { + result = this.getDeclaringType().getLabel() + "." + or + if this.getDeclaringNamespace().isGlobalNamespace() + then result = "" + else result = this.getDeclaringNamespace().getFullName() + "." + } + + pragma[noinline] + deprecated private string getLabelNonGeneric() { + not this instanceof Generic and + result = this.getPrefixWithTypes() + this.getUndecoratedName() + } + + pragma[noinline] + deprecated private string getLabelGeneric() { + result = this.getPrefixWithTypes() + this.getUndecoratedName() + getGenericsLabel(this) + } + + deprecated override string getLabel() { + result = this.getLabelNonGeneric() or + result = this.getLabelGeneric() + } + /** * Gets the source namespace declaration in which this type is declared, if any. * This only holds for non-nested types. @@ -120,7 +147,7 @@ class ValueOrRefType extends DotNet::ValueOrRefType, Type, Attributable, @value_ } /** Gets an immediate base type of this type, if any. */ - override ValueOrRefType getABaseType() { + ValueOrRefType getABaseType() { result = this.getBaseClass() or result = this.getABaseInterface() } @@ -360,7 +387,8 @@ class ValueOrRefType extends DotNet::ValueOrRefType, Type, Attributable, @value_ nested_types(this, _, result) } - override predicate isRecord() { this.hasModifier("record") } + /** Holds if this type is a `record`. */ + predicate isRecord() { this.hasModifier("record") } override string toString() { result = Type.super.toString() } } @@ -969,7 +997,7 @@ class FunctionPointerType extends Type, Parameterizable, @function_pointer_type override string getAPrimaryQlClass() { result = "FunctionPointerType" } - override string getLabel() { result = this.getName() } + deprecated override string getLabel() { result = this.getName() } } /** @@ -1064,7 +1092,7 @@ class InlineArrayType extends ValueType, @inline_array_type { /** * An array type, for example `int[]`. */ -class ArrayType extends DotNet::ArrayType, RefType, @array_type { +class ArrayType extends RefType, @array_type { /** * Gets the dimension of this array type. For example `int[][]` is of * dimension 2, while `int[]` is of dimension 1. @@ -1081,13 +1109,15 @@ class ArrayType extends DotNet::ArrayType, RefType, @array_type { predicate isMultiDimensional() { this.getRank() > 1 } /** Gets the element type of this array, for example `int` in `int[]`. */ - override Type getElementType() { + Type getElementType() { array_element_type(this, _, _, result) or not array_element_type(this, _, _, any(Type t)) and array_element_type(this, _, _, getTypeRef(result)) } + deprecated final override string getLabel() { result = this.getElementType().getLabel() + "[]" } + /** Holds if this array type has the same shape (dimension and rank) as `that` array type. */ predicate hasSameShapeAs(ArrayType that) { this.getDimension() = that.getDimension() and @@ -1128,33 +1158,36 @@ class ArrayType extends DotNet::ArrayType, RefType, @array_type { not type_location(this, _) and result = this.getElementType().getALocation() } + + override string getAPrimaryQlClass() { result = "ArrayType" } } /** * A pointer type, for example `char*`. */ -class PointerType extends DotNet::PointerType, Type, @pointer_type { - override Type getReferentType() { +class PointerType extends Type, @pointer_type { + /** Gets the type referred by this pointer type, for example `char` in `char*`. */ + Type getReferentType() { pointer_referent_type(this, result) or not pointer_referent_type(this, any(Type t)) and pointer_referent_type(this, getTypeRef(result)) } - override string toStringWithTypes() { result = DotNet::PointerType.super.toStringWithTypes() } + override string toStringWithTypes() { result = this.getReferentType().toStringWithTypes() + "*" } override Type getChild(int n) { result = this.getReferentType() and n = 0 } final override string getName() { types(this, _, result) } + deprecated final override string getLabel() { result = this.getReferentType().getLabel() + "*" } + final override string getUndecoratedName() { result = this.getReferentType().getUndecoratedName() } override Location getALocation() { result = this.getReferentType().getALocation() } - override string toString() { result = DotNet::PointerType.super.toString() } - override string getAPrimaryQlClass() { result = "PointerType" } } @@ -1238,7 +1271,7 @@ class TupleType extends ValueType, @tuple_type { ")" } - override string getLabel() { result = this.getUnderlyingType().getLabel() } + deprecated override string getLabel() { result = this.getUnderlyingType().getLabel() } override Type getChild(int i) { result = this.getUnderlyingType().getChild(i) } diff --git a/csharp/ql/lib/semmle/code/csharp/Variable.qll b/csharp/ql/lib/semmle/code/csharp/Variable.qll index be52bcbadaf..4bef47056ef 100644 --- a/csharp/ql/lib/semmle/code/csharp/Variable.qll +++ b/csharp/ql/lib/semmle/code/csharp/Variable.qll @@ -7,18 +7,18 @@ import Assignable import Callable import Element import Type -private import dotnet private import semmle.code.csharp.ExprOrStmtParent private import TypeRef /** * A variable. Either a variable with local scope (`LocalScopeVariable`) or a field (`Field`). */ -class Variable extends Assignable, DotNet::Variable, @variable { +class Variable extends Assignable, @variable { override Variable getUnboundDeclaration() { result = this } override VariableAccess getAnAccess() { result.getTarget() = this } + /** Gets the type of this variable. */ override Type getType() { none() } /** Gets the expression used to initialise this variable, if any. */ @@ -87,9 +87,10 @@ class LocalScopeVariable extends Variable, @local_scope_variable { * } * ``` */ -class Parameter extends DotNet::Parameter, LocalScopeVariable, Attributable, TopLevelExprParent, - @parameter -{ +class Parameter extends LocalScopeVariable, Attributable, TopLevelExprParent, @parameter { + /** Gets the raw position of this parameter, including the `this` parameter at index 0. */ + final int getRawPosition() { this = this.getDeclaringElement().getRawParameter(result) } + /** * Gets the position of this parameter. For example, the position of `x` is * 0 and the position of `y` is 1 in @@ -100,7 +101,7 @@ class Parameter extends DotNet::Parameter, LocalScopeVariable, Attributable, Top * } * ``` */ - override int getPosition() { params(this, _, _, result, _, _, _) } + int getPosition() { params(this, _, _, result, _, _, _) } override int getIndex() { result = this.getPosition() } @@ -138,7 +139,7 @@ class Parameter extends DotNet::Parameter, LocalScopeVariable, Attributable, Top * } * ``` */ - override predicate isOut() { params(this, _, _, _, 2, _, _) } + predicate isOut() { params(this, _, _, _, 2, _, _) } /** * Holds if this parameter is a value type that is passed in by reference. @@ -167,6 +168,18 @@ class Parameter extends DotNet::Parameter, LocalScopeVariable, Attributable, Top */ predicate isParams() { params(this, _, _, _, 3, _, _) } + /** + * Holds if this parameter if a ref readonly parameter. + * For example, `p` is a ref readonly parameter in + * + * ```csharp + * void M(ref readonly int p) { + * ... + * } + * ``` + */ + predicate isReadonlyRef() { params(this, _, _, _, 6, _, _) } + /** * Holds this parameter is the first parameter of an extension method. * For example, `list` is the first parameter of the extension method @@ -181,7 +194,7 @@ class Parameter extends DotNet::Parameter, LocalScopeVariable, Attributable, Top predicate hasExtensionMethodModifier() { params(this, _, _, _, 4, _, _) } /** Gets the declaring element of this parameter. */ - override Parameterizable getDeclaringElement() { params(this, _, _, _, _, result, _) } + Parameterizable getDeclaringElement() { params(this, _, _, _, _, result, _) } override Parameter getUnboundDeclaration() { params(this, _, _, _, _, _, result) } @@ -384,9 +397,7 @@ class LocalConstant extends LocalVariable, @local_constant { * } * ``` */ -class Field extends Variable, AssignableMember, Attributable, TopLevelExprParent, DotNet::Field, - @field -{ +class Field extends Variable, AssignableMember, Attributable, TopLevelExprParent, @field { /** * Gets the initial value of this field, if any. For example, the initial * value of `F` on line 2 is `20` in diff --git a/csharp/ql/lib/semmle/code/csharp/commons/Disposal.qll b/csharp/ql/lib/semmle/code/csharp/commons/Disposal.qll index f3c1c7a3c78..5315aa751ea 100644 --- a/csharp/ql/lib/semmle/code/csharp/commons/Disposal.qll +++ b/csharp/ql/lib/semmle/code/csharp/commons/Disposal.qll @@ -3,56 +3,13 @@ */ import csharp -private import cil -private import dotnet -private predicate isDisposeMethod(DotNet::Callable method) { +private predicate isDisposeMethod(Callable method) { method.getName() = "Dispose" and method.getNumberOfParameters() = 0 } -private predicate cilVariableReadFlowsToNode(CIL::Variable variable, DataFlow::Node n) { - n.asExpr() = variable.getARead() - or - exists(DataFlow::Node mid | - cilVariableReadFlowsToNode(variable, mid) and - DataFlow::localFlowStep(mid, n) - ) -} - -private predicate cilVariableReadFlowsTo(CIL::Variable variable, CIL::DataFlowNode n) { - cilVariableReadFlowsToNode(variable, DataFlow::exprNode(n)) -} - -private predicate disposedCilVariable(CIL::Variable variable) { - // `variable` is the `this` parameter on a dispose method. - isDisposeMethod(variable.(CIL::ThisParameter).getMethod()) - or - // `variable` is passed to a method that disposes it. - exists(CIL::Call call, CIL::Parameter param | - cilVariableReadFlowsTo(variable, call.getArgumentForParameter(param)) and - disposedCilVariable(param) - ) - or - // A parameter is disposed if its source declaration is disposed - disposedCilVariable(variable.(CIL::Parameter).getUnboundDeclaration()) - or - // A variable is disposed if it's assigned to another variable - // that may be disposed. - exists(CIL::WriteAccess write | - cilVariableReadFlowsTo(variable, write.getExpr()) and - disposedCilVariable(write.getTarget()) - ) -} - private predicate disposedCSharpVariable(Variable variable) { - // A C# parameter is disposed if its corresponding CIL parameter is disposed - exists(CIL::Method m, CIL::Parameter p, int i | - disposedCilVariable(p) and p = m.getRawParameter(i) - | - variable = any(Callable c2 | c2.matchesHandle(m)).getRawParameter(i) - ) - or // Call to a method that disposes it exists(Call call, int arg, VariableRead read | read.getTarget() = variable and @@ -83,7 +40,4 @@ private predicate disposedCSharpVariable(Variable variable) { * Hold if `variable` might be disposed. * This is a conservative overestimate. */ -predicate mayBeDisposed(DotNet::Variable variable) { - disposedCSharpVariable(variable) or - disposedCilVariable(variable) -} +predicate mayBeDisposed(Variable variable) { disposedCSharpVariable(variable) } diff --git a/csharp/ql/lib/semmle/code/csharp/commons/QualifiedName.qll b/csharp/ql/lib/semmle/code/csharp/commons/QualifiedName.qll index e67c46f5de8..eba0fb10c7c 100644 --- a/csharp/ql/lib/semmle/code/csharp/commons/QualifiedName.qll +++ b/csharp/ql/lib/semmle/code/csharp/commons/QualifiedName.qll @@ -1,7 +1,6 @@ /** Provides predicates for working with fully qualified names. */ private import csharp -private import dotnet /** * Holds if namespace `n` has the qualified name `qualifier`.`name`. @@ -9,8 +8,8 @@ private import dotnet * For example if the qualified name is `System.Collections.Generic`, then * `qualifier`=`System.Collections` and `name`=`Generic`. */ -predicate namespaceHasQualifiedName(DotNet::Namespace n, string qualifier, string name) { - if n instanceof DotNet::GlobalNamespace +predicate namespaceHasQualifiedName(Namespace n, string qualifier, string name) { + if n instanceof GlobalNamespace then qualifier = "" and name = "" else ( exists(string pqualifier, string pname | diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll index 1e6a06f1fe3..313fabc0235 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll @@ -3,8 +3,6 @@ */ import csharp -private import cil -private import dotnet private import ControlFlow::SuccessorTypes private import semmle.code.csharp.commons.Assertions private import semmle.code.csharp.commons.ComparisonTest @@ -844,8 +842,6 @@ class NullGuardedDataFlowNode extends GuardedDataFlowNode { /** INTERNAL: Do not use. */ module Internal { - private import semmle.code.cil.CallableReturns - newtype TAbstractValue = TBooleanValue(boolean b) { b = true or b = false } or TIntegerValue(int i) { i = any(Expr e).getValue().toInt() } or @@ -856,20 +852,11 @@ module Internal { } or TEmptyCollectionValue(boolean b) { b = true or b = false } - /** A callable that always returns a `null` value. */ - private class NullCallable extends Callable { - NullCallable() { - exists(CIL::Method m | m.matchesHandle(this) | alwaysNullMethod(m) and not m.isVirtual()) - } - } - /** Holds if expression `e` is a `null` value. */ predicate nullValue(Expr e) { e instanceof NullLiteral or e instanceof DefaultValueExpr and e.getType().isRefType() - or - e.(Call).getTarget().getUnboundDeclaration() instanceof NullCallable } /** Holds if expression `e2` is a `null` value whenever `e1` is. */ @@ -890,11 +877,7 @@ module Internal { /** A callable that always returns a non-`null` value. */ private class NonNullCallable extends Callable { - NonNullCallable() { - exists(CIL::Method m | m.matchesHandle(this) | alwaysNotNullMethod(m) and not m.isVirtual()) - or - this = any(SystemObjectClass c).getGetTypeMethod() - } + NonNullCallable() { this = any(SystemObjectClass c).getGetTypeMethod() } } /** Holds if expression `e` is a non-`null` value. */ diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/NonReturning.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/NonReturning.qll index 16d806e72f7..10f92d882b7 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/NonReturning.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/NonReturning.qll @@ -6,8 +6,6 @@ */ import csharp -private import cil -private import semmle.code.cil.CallableReturns private import semmle.code.csharp.ExprOrStmtParent private import semmle.code.csharp.commons.Assertions private import semmle.code.csharp.frameworks.System @@ -39,15 +37,6 @@ private class ThrowingCall extends NonReturningCall { or this.(FailingAssertion).getAssertionFailure().isException(c.getExceptionClass()) or - exists(Callable target, CIL::Method m, CIL::Type ex | - target = this.getTarget() and - not target.hasBody() and - target.matchesHandle(m) and - alwaysThrowsException(m, ex) and - c.getExceptionClass().matchesHandle(ex) and - not m.isVirtual() - ) - or this = any(MethodCall mc | mc.getTarget() diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/DataFlow.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/DataFlow.qll index 17e698dce2d..0fc12debaa8 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/DataFlow.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/DataFlow.qll @@ -8,6 +8,6 @@ import csharp module DataFlow { private import semmle.code.csharp.dataflow.internal.DataFlowImplSpecific private import codeql.dataflow.DataFlow - import DataFlowMake + import DataFlowMake import semmle.code.csharp.dataflow.internal.DataFlowImpl1 } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/TaintTracking.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/TaintTracking.qll index 7243d36b05d..fb39294ed23 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/TaintTracking.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/TaintTracking.qll @@ -10,6 +10,6 @@ module TaintTracking { private import semmle.code.csharp.dataflow.internal.DataFlowImplSpecific private import semmle.code.csharp.dataflow.internal.TaintTrackingImplSpecific private import codeql.dataflow.TaintTracking - import TaintFlowMake + import TaintFlowMake import semmle.code.csharp.dataflow.internal.tainttracking1.TaintTrackingImpl } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/CallableReturns.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/CallableReturns.qll index 6adb1e376b0..52008bf6c01 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/CallableReturns.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/CallableReturns.qll @@ -3,9 +3,7 @@ */ import csharp -private import cil private import semmle.code.csharp.dataflow.Nullness -private import semmle.code.cil.CallableReturns as CR private predicate finalCallable(Callable c) { not c.(Virtualizable).isVirtual() and @@ -15,19 +13,11 @@ private predicate finalCallable(Callable c) { /** Holds if callable `c` always returns null. */ predicate alwaysNullCallable(Callable c) { finalCallable(c) and - ( - exists(CIL::Method m | m.matchesHandle(c) | CR::alwaysNullMethod(m)) - or - forex(Expr e | c.canReturn(e) | e instanceof AlwaysNullExpr) - ) + forex(Expr e | c.canReturn(e) | e instanceof AlwaysNullExpr) } /** Holds if callable `c` always returns a non-null value. */ predicate alwaysNotNullCallable(Callable c) { finalCallable(c) and - ( - exists(CIL::Method m | m.matchesHandle(c) | CR::alwaysNotNullMethod(m)) - or - forex(Expr e | c.canReturn(e) | e instanceof NonNullExpr) - ) + forex(Expr e | c.canReturn(e) | e instanceof NonNullExpr) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ContentDataFlow.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ContentDataFlow.qll index e9cd7373975..76936549051 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ContentDataFlow.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ContentDataFlow.qll @@ -109,6 +109,8 @@ module Global { DataFlow::FlowFeature getAFeature() { result = ContentConfig::getAFeature() } + predicate accessPathLimit = ContentConfig::accessPathLimit/0; + // needed to record reads/stores inside summarized callables predicate includeHiddenNodes() { any() } } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll index c4b3b3261d4..4ff4722cfcc 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll @@ -1,6 +1,4 @@ private import csharp -private import cil -private import dotnet private import DataFlowImplCommon as DataFlowImplCommon private import DataFlowPublic private import DataFlowPrivate @@ -14,30 +12,11 @@ private import semmle.code.csharp.frameworks.system.collections.Generic /** * Gets a source declaration of callable `c` that has a body or has * a flow summary. - * - * If the callable has both CIL and source code, return only the source - * code version. */ -DotNet::Callable getCallableForDataFlow(DotNet::Callable c) { - exists(DotNet::Callable unboundDecl | unboundDecl = c.getUnboundDeclaration() | - result.hasBody() and - if unboundDecl.getFile().fromSource() - then - // C# callable with C# implementation in the database - result = unboundDecl - else - if unboundDecl instanceof CIL::Callable - then - // CIL callable with C# implementation in the database - unboundDecl.matchesHandle(result.(Callable)) - or - // CIL callable without C# implementation in the database - not unboundDecl.matchesHandle(any(Callable k | k.hasBody())) and - result = unboundDecl - else - // C# callable without C# implementation in the database - unboundDecl.matchesHandle(result.(CIL::Callable)) - ) +Callable getCallableForDataFlow(Callable c) { + result = c.getUnboundDeclaration() and + result.hasBody() and + result.getFile().fromSource() } newtype TReturnKind = @@ -67,7 +46,7 @@ private module Cached { */ cached newtype TDataFlowCallable = - TDotNetCallable(DotNet::Callable c) { c.isUnboundDeclaration() } or + TCallable(Callable c) { c.isUnboundDeclaration() } or TSummarizedCallable(DataFlowSummarizedCallable sc) or TFieldOrPropertyCallable(FieldOrProperty f) or TCapturedVariableCallable(LocalScopeVariable v) { v.isCaptured() } @@ -81,10 +60,6 @@ private module Cached { TExplicitDelegateLikeCall(ControlFlow::Nodes::ElementNode cfn, DelegateLikeCall dc) { cfn.getAstNode() = dc } or - TCilCall(CIL::Call call) { - // No need to include calls that are compiled from source - not call.getImplementation().getMethod().compiledFromSource() - } or TSummaryCall(FlowSummary::SummarizedCallable c, FlowSummaryImpl::Private::SummaryNode receiver) { FlowSummaryImpl::Private::summaryCallbackRange(c, receiver) } @@ -197,7 +172,7 @@ class RefReturnKind extends OutRefReturnKind, TRefReturnKind { /** A callable used for data flow. */ class DataFlowCallable extends TDataFlowCallable { /** Gets the underlying source code callable, if any. */ - DotNet::Callable asCallable() { this = TDotNetCallable(result) } + Callable asCallable() { this = TCallable(result) } /** Gets the underlying summarized callable, if any. */ FlowSummary::SummarizedCallable asSummarizedCallable() { this = TSummarizedCallable(result) } @@ -208,7 +183,7 @@ class DataFlowCallable extends TDataFlowCallable { LocalScopeVariable asCapturedVariable() { this = TCapturedVariableCallable(result) } /** Gets the underlying callable. */ - DotNet::Callable getUnderlyingCallable() { + Callable getUnderlyingCallable() { result = this.asCallable() or result = this.asSummarizedCallable() } @@ -235,8 +210,7 @@ class DataFlowCallable extends TDataFlowCallable { abstract class DataFlowCall extends TDataFlowCall { /** * Gets a run-time target of this call. A target is always a source - * declaration, and if the callable has both CIL and source code, only - * the source code version is returned. + * declaration. */ abstract DataFlowCallable getARuntimeTarget(); @@ -250,7 +224,7 @@ abstract class DataFlowCall extends TDataFlowCall { abstract DataFlowCallable getEnclosingCallable(); /** Gets the underlying expression, if any. */ - final DotNet::Expr getExpr() { result = this.getNode().asExpr() } + final Expr getExpr() { result = this.getNode().asExpr() } /** Gets the argument at position `pos` of this call. */ final ArgumentNode getArgument(ArgumentPosition pos) { result.argumentOf(this, pos) } @@ -348,33 +322,6 @@ class ExplicitDelegateLikeDataFlowCall extends DelegateDataFlowCall, TExplicitDe override Location getLocation() { result = cfn.getLocation() } } -/** A CIL call relevant for data flow. */ -class CilDataFlowCall extends DataFlowCall, TCilCall { - private CIL::Call call; - - CilDataFlowCall() { this = TCilCall(call) } - - /** Gets the underlying CIL call. */ - CIL::Call getCilCall() { result = call } - - override DataFlowCallable getARuntimeTarget() { - // There is no dispatch library for CIL, so do not consider overrides for now - result.getUnderlyingCallable() = getCallableForDataFlow(call.getTarget()) - } - - override ControlFlow::Nodes::ElementNode getControlFlowNode() { none() } - - override DataFlow::ExprNode getNode() { result.getExpr() = call } - - override DataFlowCallable getEnclosingCallable() { - result.asCallable() = call.getEnclosingCallable() - } - - override string toString() { result = call.toString() } - - override Location getLocation() { result = call.getLocation() } -} - /** * A synthesized call inside a callable with a flow summary. * diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll index 4cf39afc812..09e47bdd831 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll @@ -1,3 +1,4 @@ +private import semmle.code.csharp.Location private import DataFlowImplSpecific private import codeql.dataflow.internal.DataFlowImpl -import MakeImpl +import MakeImpl diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl1.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl1.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl1.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl1.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll index 55829d7d059..72ccd3152da 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll @@ -1,3 +1,4 @@ +private import semmle.code.csharp.Location private import DataFlowImplSpecific private import codeql.dataflow.internal.DataFlowImplCommon -import MakeImplCommon +import MakeImplCommon diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplSpecific.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplSpecific.qll index 774dc6bd86a..af104d777b8 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplSpecific.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplSpecific.qll @@ -2,6 +2,7 @@ * Provides C#-specific definitions for use in the data flow library. */ +private import semmle.code.csharp.Location private import codeql.dataflow.DataFlow module Private { @@ -13,7 +14,7 @@ module Public { import DataFlowPublic } -module CsharpDataFlow implements InputSig { +module CsharpDataFlow implements InputSig { import Private import Public diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index 64274defca3..f4aba4fdfd0 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -1,6 +1,4 @@ private import csharp -private import cil -private import dotnet private import DataFlowPublic private import DataFlowDispatch private import DataFlowImplCommon @@ -18,8 +16,6 @@ private import semmle.code.csharp.frameworks.NHibernate private import semmle.code.csharp.frameworks.Razor private import semmle.code.csharp.frameworks.system.Collections private import semmle.code.csharp.frameworks.system.threading.Tasks -private import semmle.code.cil.Ssa::Ssa as CilSsa -private import semmle.code.cil.internal.SsaImpl as CilSsaImpl private import codeql.util.Unit private import codeql.util.Boolean @@ -57,15 +53,15 @@ abstract class NodeImpl extends Node { /** Do not call: use `getType()` instead. */ cached - abstract DotNet::Type getTypeImpl(); + abstract Type getTypeImpl(); /** Gets the type of this node used for type pruning. */ DataFlowType getDataFlowType() { forceCachingInSameStage() and exists(Type t0 | result.asGvnType() = Gvn::getGlobalValueNumber(t0) | - t0 = getCSharpType(this.getType()) + t0 = this.getType() or - not exists(getCSharpType(this.getType())) and + not exists(this.getType()) and t0 instanceof ObjectType ) } @@ -96,16 +92,12 @@ private DataFlowCallable getEnclosingStaticFieldOrProperty(Expr e) { private class ExprNodeImpl extends ExprNode, NodeImpl { override DataFlowCallable getEnclosingCallableImpl() { - result.asCallable() = - [ - this.getExpr().(CIL::Expr).getEnclosingCallable().(DotNet::Callable), - this.getControlFlowNodeImpl().getEnclosingCallable() - ] + result.asCallable() = this.getControlFlowNodeImpl().getEnclosingCallable() or result = getEnclosingStaticFieldOrProperty(this.asExpr()) } - override DotNet::Type getTypeImpl() { + override Type getTypeImpl() { forceCachingInSameStage() and result = this.getExpr().getType() } @@ -121,11 +113,6 @@ private class ExprNodeImpl extends ExprNode, NodeImpl { override string toStringImpl() { forceCachingInSameStage() and result = this.getControlFlowNodeImpl().toString() - or - exists(CIL::Expr e | - this = TCilExprNode(e) and - result = e.toString() - ) } } @@ -148,7 +135,7 @@ abstract private class LocalFunctionCreationNode extends NodeImpl, TLocalFunctio LocalFunction getFunction() { result = function } ExprNode getAnAccess(boolean inSameCallable) { - result.getExpr().(LocalFunctionAccess).getTarget() = this.getFunction() and + isLocalFunctionCallReceiver(_, result.getExpr(), this.getFunction()) and if result.getEnclosingCallable() = this.getEnclosingCallable() then inSameCallable = true else inSameCallable = false @@ -260,12 +247,6 @@ predicate hasNodePath(ControlFlowReachabilityConfiguration conf, ExprNode n1, No ) } -/** Gets the CIL data-flow node for `node`, if any. */ -CIL::DataFlowNode asCilDataFlowNode(Node node) { - result = node.asParameter() or - result = node.asExpr() -} - /** Provides logic related to captured variables. */ module VariableCapture { private import codeql.dataflow.VariableCapture as Shared @@ -399,7 +380,11 @@ module VariableCapture { predicate hasBody(Callable body) { body = c } - predicate hasAliasedAccess(Expr f) { closureFlowStep+(this, f) and not closureFlowStep(f, _) } + predicate hasAliasedAccess(Expr f) { + closureFlowStep+(this, f) and not closureFlowStep(f, _) + or + isLocalFunctionCallReceiver(_, f.getAstNode(), c) + } } class Callable extends Cs::Callable { @@ -727,79 +712,6 @@ module LocalFlow { ) } - private module CilFlow { - /** - * Holds if `nodeFrom` is a last node referencing SSA definition `def`, which - * can reach `next`. - */ - private predicate localFlowCilSsaInput( - Node nodeFrom, CilSsaImpl::DefinitionExt def, CilSsaImpl::DefinitionExt next - ) { - exists(CIL::BasicBlock bb, int i | CilSsaImpl::lastRefBeforeRedefExt(def, bb, i, next) | - def.definesAt(_, bb, i, _) and - def = nodeFrom.(CilSsaDefinitionExtNode).getDefinition() and - def != next - or - nodeFrom = TCilExprNode(bb.getNode(i).(CIL::ReadAccess)) - ) - } - - /** - * Holds if there is a local flow step from `nodeFrom` to `nodeTo` involving - * CIL SSA definition `def`. - */ - private predicate localCilSsaFlowStep(CilSsaImpl::DefinitionExt def, Node nodeFrom, Node nodeTo) { - // Flow into SSA definition - exists(CIL::VariableUpdate vu | - vu = def.(CilSsa::Definition).getVariableUpdate() and - vu.getSource() = asCilDataFlowNode(nodeFrom) and - def = nodeTo.(CilSsaDefinitionExtNode).getDefinition() - ) - or - // Flow from SSA definition to first read - def = nodeFrom.(CilSsaDefinitionExtNode).getDefinition() and - nodeTo = TCilExprNode(CilSsaImpl::getAFirstReadExt(def)) - or - // Flow from read to next read - exists(CIL::ReadAccess readFrom, CIL::ReadAccess readTo | - CilSsaImpl::hasAdjacentReadsExt(def, readFrom, readTo) and - nodeTo = TCilExprNode(readTo) and - nodeFrom = TCilExprNode(readFrom) and - nodeFrom != nodeTo - ) - or - // Flow into phi (read) node - exists(CilSsaImpl::DefinitionExt phi | - localFlowCilSsaInput(nodeFrom, def, phi) and - phi = nodeTo.(CilSsaDefinitionExtNode).getDefinition() - | - phi instanceof CilSsa::PhiNode - or - phi instanceof CilSsaImpl::PhiReadNode - ) - } - - private predicate localExactStep(CIL::DataFlowNode src, CIL::DataFlowNode sink) { - src = sink.(CIL::Opcodes::Dup).getAnOperand() - or - src = sink.(CIL::Conversion).getExpr() - or - src = sink.(CIL::WriteAccess).getExpr() - or - src = sink.(CIL::Method).getAnImplementation().getAnInstruction().(CIL::Return) - or - src = sink.(CIL::Return).getExpr() - or - src = sink.(CIL::ConditionalBranch).getAnOperand() - } - - predicate localFlowStepCil(Node nodeFrom, Node nodeTo) { - localExactStep(asCilDataFlowNode(nodeFrom), asCilDataFlowNode(nodeTo)) - or - localCilSsaFlowStep(_, nodeFrom, nodeTo) - } - } - predicate localFlowStepCommon(Node nodeFrom, Node nodeTo) { hasNodePath(any(LocalExprStepConfiguration x), nodeFrom, nodeTo) or @@ -808,8 +720,6 @@ module LocalFlow { or ThisFlow::adjacentThisRefs(nodeFrom.(PostUpdateNode).getPreUpdateNode(), nodeTo) or - CilFlow::localFlowStepCil(nodeFrom, nodeTo) - or exists(AssignableDefinition def, ControlFlow::Node cfn, Ssa::ExplicitDefinition ssaDef | ssaDef.getADefinition() = def and ssaDef.getControlFlowNode() = cfn and @@ -881,7 +791,7 @@ module LocalFlow { exists(SsaImpl::getAReadAtNode(def, node2.(ExprNode).getControlFlowNode())) ) or - delegateCreationStep(node1, node2) + node2 = node1.(LocalFunctionCreationNode).getAnAccess(true) or node1 = unique(FlowSummaryNode n1 | @@ -1111,13 +1021,6 @@ private predicate arrayStore(Expr e, Expr src, Expr a, boolean postUpdate) { */ private predicate arrayRead(Expr e1, ArrayRead e2) { e1 = e2.getQualifier() } -private Type getCSharpType(DotNet::Type t) { - result = t - or - not t instanceof Type and - result.matchesHandle(t) -} - private class RelevantGvnType extends Gvn::GvnType { RelevantGvnType() { this = any(NodeImpl n).getDataFlowType().asGvnType() } } @@ -1189,8 +1092,6 @@ private module Cached { cached newtype TNode = TExprNode(ControlFlow::Nodes::ElementNode cfn) { cfn.getAstNode() instanceof Expr } or - TCilExprNode(CIL::Expr e) { e.getImplementation() instanceof CIL::BestImplementation } or - TCilSsaDefinitionExtNode(CilSsaImpl::DefinitionExt def) or TSsaDefinitionExtNode(SsaImpl::DefinitionExt def) { // Handled by `TExplicitParameterNode` below not def.(Ssa::ExplicitDefinition).getADefinition() instanceof @@ -1201,7 +1102,7 @@ private module Cached { // Handled by `TExplicitParameterNode` below not def instanceof AssignableDefinitions::ImplicitParameterDefinition } or - TExplicitParameterNode(DotNet::Parameter p) { + TExplicitParameterNode(Parameter p) { p = any(DataFlowCallable dfc).asCallable().getAParameter() } or TInstanceParameterNode(InstanceCallable c) or @@ -1371,28 +1272,6 @@ predicate nodeIsHidden(Node n) { n instanceof CaptureNode } -/** A CIL SSA definition, viewed as a node in a data flow graph. */ -class CilSsaDefinitionExtNode extends NodeImpl, TCilSsaDefinitionExtNode { - CilSsaImpl::DefinitionExt def; - - CilSsaDefinitionExtNode() { this = TCilSsaDefinitionExtNode(def) } - - /** Gets the underlying SSA definition. */ - CilSsaImpl::DefinitionExt getDefinition() { result = def } - - override DataFlowCallable getEnclosingCallableImpl() { - result.asCallable() = def.getBasicBlock().getFirstNode().getImplementation().getMethod() - } - - override CIL::Type getTypeImpl() { result = def.getSourceVariable().getType() } - - override ControlFlow::Node getControlFlowNodeImpl() { none() } - - override Location getLocationImpl() { result = def.getBasicBlock().getLocation() } - - override string toStringImpl() { result = def.toString() } -} - /** An SSA definition, viewed as a node in a data flow graph. */ class SsaDefinitionExtNode extends NodeImpl, TSsaDefinitionExtNode { SsaImpl::DefinitionExt def; @@ -1464,7 +1343,7 @@ private module ParameterNodes { * flow graph. */ class ExplicitParameterNode extends ParameterNodeImpl, TExplicitParameterNode { - private DotNet::Parameter parameter; + private Parameter parameter; ExplicitParameterNode() { this = TExplicitParameterNode(parameter) } @@ -1482,7 +1361,7 @@ private module ParameterNodes { result.asCallable() = parameter.getCallable() } - override DotNet::Type getTypeImpl() { result = parameter.getType() } + override Type getTypeImpl() { result = parameter.getType() } override ControlFlow::Node getControlFlowNodeImpl() { none() } @@ -1539,7 +1418,7 @@ private module ParameterNodes { override Location getLocationImpl() { result = callable.getLocation() } - override DotNet::Type getTypeImpl() { none() } + override Type getTypeImpl() { none() } override DataFlowType getDataFlowType() { callable = result.asDelegate() } @@ -1608,11 +1487,7 @@ private module ArgumentNodes { /** A data-flow node that represents an explicit call argument. */ class ExplicitArgumentNode extends ArgumentNodeImpl { - ExplicitArgumentNode() { - this.asExpr() instanceof Argument - or - this.asExpr() = any(CilDataFlowCall cc).getCilCall().getAnArgument() - } + ExplicitArgumentNode() { this.asExpr() instanceof Argument } override predicate argumentOf(DataFlowCall call, ArgumentPosition pos) { exists(ArgumentConfiguration x, Expr c, Argument arg | @@ -1621,12 +1496,6 @@ private module ArgumentNodes { arg.isArgumentOf(c, pos) and x.hasExprPath(_, this.getControlFlowNode(), _, call.getControlFlowNode()) ) - or - exists(CIL::Call c, CIL::Expr arg | - arg = this.asExpr() and - c = call.getExpr() and - arg = c.getArgument(pos.getPosition()) - ) } } @@ -1743,7 +1612,7 @@ private module ReturnNodes { */ class ExprReturnNode extends ReturnNode, ExprNode { ExprReturnNode() { - exists(DotNet::Callable c, DotNet::Expr e | e = this.getExpr() | + exists(Callable c, Expr e | e = this.getExpr() | c.canReturn(e) and not c.(Modifiable).isAsync() ) } @@ -1877,17 +1746,13 @@ private module OutNodes { } /** - * A data-flow node that reads a value returned directly by a callable, - * either via a C# call or a CIL call. + * A data-flow node that reads a value returned directly by a callable. */ class ExprOutNode extends OutNode, ExprNode { private DataFlowCall call; ExprOutNode() { - exists(DotNet::Expr e | e = this.getExpr() | - call = csharpCall(e, this.getControlFlowNode()) or - call = TCilCall(e) - ) + exists(Expr e | e = this.getExpr() | call = csharpCall(e, this.getControlFlowNode())) } override DataFlowCall getCall(ReturnKind kind) { @@ -1969,7 +1834,7 @@ class FlowSummaryNode extends NodeImpl, TFlowSummaryNode { result = FlowSummaryImpl::Private::summaryNodeType(this.getSummaryNode()) } - override DotNet::Type getTypeImpl() { none() } + override Type getTypeImpl() { none() } override ControlFlow::Node getControlFlowNodeImpl() { none() } @@ -2130,8 +1995,6 @@ class FieldOrProperty extends Assignable, Modifiable { or p.isAutoImplementedReadOnly() or - p.matchesHandle(any(CIL::TrivialProperty tp)) - or p.getDeclaringType() instanceof AnonymousClass ) ) @@ -2549,9 +2412,10 @@ class DataFlowType extends TDataFlowType { * creations associated with the same type. */ ControlFlowElement getADelegateCreation() { - exists(Callable callable | - lambdaCreationExpr(result, callable) and - this = TDelegateDataFlowType(callable) + exists(Callable callable | this = TDelegateDataFlowType(callable) | + lambdaCreationExpr(result, callable) + or + isLocalFunctionCallReceiver(_, result, callable) ) } @@ -2566,12 +2430,7 @@ class DataFlowType extends TDataFlowType { DataFlowType getNodeType(Node n) { result = n.(NodeImpl).getDataFlowType() and not lambdaCreation(n, _, _) and - not delegateCreationStep(_, n) - or - exists(Node arg | - delegateCreationStep(arg, n) and - result = getNodeType(arg) - ) + not isLocalFunctionCallReceiver(_, n.asExpr(), _) or [ n.asExpr().(ControlFlowElement), @@ -2740,7 +2599,7 @@ module PostUpdateNodes { result = getEnclosingStaticFieldOrProperty(oc) } - override DotNet::Type getTypeImpl() { result = oc.getType() } + override Type getTypeImpl() { result = oc.getType() } override ControlFlow::Nodes::ElementNode getControlFlowNodeImpl() { result = cfn } @@ -2853,7 +2712,7 @@ class CastNode extends Node { } } -class DataFlowExpr = DotNet::Expr; +class DataFlowExpr = Expr; /** Holds if `e` is an expression that always has the same Boolean value `val`. */ private predicate constantBooleanExpr(Expr e, boolean val) { @@ -2896,7 +2755,7 @@ private predicate lambdaCreationExpr(ControlFlowElement creation, Callable c) { c = [ creation.(AnonymousFunctionExpr), - creation.(CallableAccess).getTarget().getUnboundDeclaration(), + creation.(DelegateCreation).getArgument().(CallableAccess).getTarget().getUnboundDeclaration(), creation.(AddressOfExpr).getOperand().(CallableAccess).getTarget().getUnboundDeclaration(), creation.(LocalFunctionStmt).getLocalFunction() ] @@ -2910,6 +2769,13 @@ predicate lambdaCreation(Node creation, LambdaCallKind kind, DataFlowCallable c) exists(kind) } +private predicate isLocalFunctionCallReceiver( + LocalFunctionCall call, LocalFunctionAccess receiver, LocalFunction f +) { + receiver.getParent() = call and + f = receiver.getTarget().getUnboundDeclaration() +} + private class LambdaConfiguration extends ControlFlowReachabilityConfiguration { LambdaConfiguration() { this = "LambdaConfiguration" } @@ -2926,7 +2792,7 @@ private class LambdaConfiguration extends ControlFlowReachabilityConfiguration { scope = e2 and isSuccessor = true or - e1.(LocalFunctionAccess).getParent() = e2.(LocalFunctionCall) and + isLocalFunctionCallReceiver(e2, e1, _) and exactScope = false and scope = e2 and isSuccessor = true diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll index 1f99522b34a..20e3dd8eb7d 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll @@ -1,6 +1,4 @@ private import csharp -private import cil -private import dotnet private import DataFlowDispatch private import DataFlowPrivate private import semmle.code.csharp.controlflow.Guards @@ -12,7 +10,7 @@ private import semmle.code.csharp.Unification */ class Node extends TNode { /** Gets the expression corresponding to this node, if any. */ - DotNet::Expr asExpr() { result = this.(ExprNode).getExpr() } + Expr asExpr() { result = this.(ExprNode).getExpr() } /** * Gets the expression corresponding to this node, at control flow node `cfn`, @@ -23,7 +21,7 @@ class Node extends TNode { } /** Gets the parameter corresponding to this node, if any. */ - DotNet::Parameter asParameter() { result = this.(ParameterNode).getParameter() } + Parameter asParameter() { result = this.(ParameterNode).getParameter() } /** Gets the definition corresponding to this node, if any. */ AssignableDefinition asDefinition() { result = this.asDefinitionAtNode(_) } @@ -37,7 +35,7 @@ class Node extends TNode { } /** Gets the type of this node. */ - final DotNet::Type getType() { result = this.(NodeImpl).getTypeImpl() } + final Type getType() { result = this.(NodeImpl).getTypeImpl() } /** Gets the enclosing callable of this node. */ final Callable getEnclosingCallable() { @@ -60,15 +58,13 @@ class Node extends TNode { * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - predicate hasLocationInfo( + deprecated predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) } } -private class TExprNode_ = TExprNode or TCilExprNode; - /** * An expression, viewed as a node in a data flow graph. * @@ -76,13 +72,9 @@ private class TExprNode_ = TExprNode or TCilExprNode; * to multiple `ExprNode`s, just like it may correspond to multiple * `ControlFlow::Node`s. */ -class ExprNode extends Node, TExprNode_ { +class ExprNode extends Node, TExprNode { /** Gets the expression corresponding to this node. */ - DotNet::Expr getExpr() { - result = this.getExprAtNode(_) - or - this = TCilExprNode(result) - } + Expr getExpr() { result = this.getExprAtNode(_) } /** * Gets the expression corresponding to this node, at control flow node `cfn`, @@ -94,16 +86,22 @@ class ExprNode extends Node, TExprNode_ { } } +pragma[nomagic] +private predicate isParameterOf0(DataFlowCallable c, ParameterPosition ppos, Parameter p) { + p.getCallable() = c.asCallable() and + p.getPosition() = ppos.getPosition() +} + /** * The value of a parameter at function entry, viewed as a node in a data * flow graph. */ class ParameterNode extends Node instanceof ParameterNodeImpl { /** Gets the parameter corresponding to this node, if any. */ - DotNet::Parameter getParameter() { + Parameter getParameter() { exists(DataFlowCallable c, ParameterPosition ppos | super.isParameterOf(c, ppos) and - result = c.asCallable().getParameter(ppos.getPosition()) + isParameterOf0(c, ppos, result) ) } } @@ -120,12 +118,12 @@ class AssignableDefinitionNode extends Node instanceof AssignableDefinitionNodeI } /** Gets a node corresponding to expression `e`. */ -ExprNode exprNode(DotNet::Expr e) { result.getExpr() = e } +ExprNode exprNode(Expr e) { result.getExpr() = e } /** * Gets the node corresponding to the value of parameter `p` at function entry. */ -ParameterNode parameterNode(DotNet::Parameter p) { result.getParameter() = p } +ParameterNode parameterNode(Parameter p) { result.getParameter() = p } /** Gets a node corresponding to the definition `def`. */ AssignableDefinitionNode assignableDefinitionNode(AssignableDefinition def) { @@ -146,7 +144,7 @@ predicate localFlow(Node source, Node sink) { localFlowStep*(source, sink) } * local (intra-procedural) steps. */ pragma[inline] -predicate localExprFlow(DotNet::Expr e1, DotNet::Expr e2) { localFlow(exprNode(e1), exprNode(e2)) } +predicate localExprFlow(Expr e1, Expr e2) { localFlow(exprNode(e1), exprNode(e2)) } /** * A data flow node that jumps between callables. This can be extended in diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll index 19972a86ab6..8c76fc3d1a7 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll @@ -12,7 +12,7 @@ private import DataFlowImplSpecific::Public private import semmle.code.csharp.Unification private import semmle.code.csharp.dataflow.internal.ExternalFlow -module Input implements InputSig { +module Input implements InputSig { class SummarizedCallableBase = UnboundCallable; ArgumentPosition callbackSelfParameterPosition() { result.isDelegateSelf() } @@ -80,7 +80,7 @@ module Input implements InputSig { } } -private import Make as Impl +private import Make as Impl private module TypesInput implements Impl::Private::TypesInputSig { DataFlowType getSyntheticGlobalType(Impl::Private::SyntheticGlobal sg) { @@ -154,7 +154,7 @@ private module StepsInput implements Impl::Private::StepsInputSig { } module SourceSinkInterpretationInput implements - Impl::Private::External::SourceSinkInterpretationInputSig + Impl::Private::External::SourceSinkInterpretationInputSig { private import csharp as Cs @@ -252,7 +252,7 @@ module Private { module External { import Impl::Private::External - import Impl::Private::External::SourceSinkInterpretation + import Impl::Private::External::SourceSinkInterpretation } private module SummaryComponentInternal = Impl::Private::SummaryComponent; diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingImplSpecific.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingImplSpecific.qll index 17a0d2c3c1a..b33d582021f 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingImplSpecific.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingImplSpecific.qll @@ -2,9 +2,10 @@ * Provides C#-specific definitions for use in the taint tracking library. */ +private import semmle.code.csharp.Location private import codeql.dataflow.TaintTracking private import DataFlowImplSpecific -module CsharpTaintTracking implements InputSig { +module CsharpTaintTracking implements InputSig { import TaintTrackingPrivate } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll index ad0d08ef118..d91380a74f5 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll @@ -7,8 +7,6 @@ private import semmle.code.csharp.dataflow.internal.DataFlowPrivate private import semmle.code.csharp.dataflow.internal.ControlFlowReachability private import semmle.code.csharp.dispatch.Dispatch private import semmle.code.csharp.commons.ComparisonTest -private import cil -private import dotnet // import `TaintedMember` definitions from other files to avoid potential reevaluation private import semmle.code.csharp.frameworks.JsonNET private import semmle.code.csharp.frameworks.WCF @@ -33,16 +31,6 @@ predicate defaultTaintSanitizer(DataFlow::Node node) { bindingset[node] predicate defaultImplicitTaintRead(DataFlow::Node node, DataFlow::ContentSet c) { none() } -private predicate localCilTaintStep(CIL::DataFlowNode src, CIL::DataFlowNode sink) { - src = sink.(CIL::BinaryArithmeticExpr).getAnOperand() or - src = sink.(CIL::Opcodes::Neg).getOperand() or - src = sink.(CIL::UnaryBitwiseOperation).getOperand() -} - -private predicate localTaintStepCil(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { - localCilTaintStep(asCilDataFlowNode(nodeFrom), asCilDataFlowNode(nodeTo)) -} - private class LocalTaintExprStepConfiguration extends ControlFlowReachabilityConfiguration { LocalTaintExprStepConfiguration() { this = "LocalTaintExprStepConfiguration" } @@ -106,8 +94,6 @@ private class LocalTaintExprStepConfiguration extends ControlFlowReachabilityCon private predicate localTaintStepCommon(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { hasNodePath(any(LocalTaintExprStepConfiguration x), nodeFrom, nodeTo) - or - localTaintStepCil(nodeFrom, nodeTo) } cached diff --git a/csharp/ql/lib/semmle/code/csharp/dispatch/RuntimeCallable.qll b/csharp/ql/lib/semmle/code/csharp/dispatch/RuntimeCallable.qll index 2e62d94a4ab..a11cbc964c1 100644 --- a/csharp/ql/lib/semmle/code/csharp/dispatch/RuntimeCallable.qll +++ b/csharp/ql/lib/semmle/code/csharp/dispatch/RuntimeCallable.qll @@ -5,14 +5,12 @@ */ import csharp -private import cil -private import dotnet /** * A run-time callable. That is, a callable that is neither abstract * nor defined in an interface. */ -class RuntimeCallable extends DotNet::Callable { +class RuntimeCallable extends Callable { RuntimeCallable() { not this.(Modifiable).isAbstract() and ( @@ -23,15 +21,7 @@ class RuntimeCallable extends DotNet::Callable { } /** A run-time method. */ -class RuntimeMethod extends RuntimeCallable { - RuntimeMethod() { - this instanceof Method or - this instanceof CIL::Method - } - - /** Holds if the method is `static`. */ - predicate isStatic() { this.(Method).isStatic() or this.(CIL::Method).isStatic() } -} +class RuntimeMethod extends RuntimeCallable, Method { } /** A run-time instance method. */ class RuntimeInstanceMethod extends RuntimeMethod { diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll index 169658ad107..7a3cf0ea8d9 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll @@ -8,7 +8,6 @@ import Expr private import semmle.code.csharp.dataflow.internal.DataFlowDispatch private import semmle.code.csharp.dataflow.internal.DataFlowImplCommon private import semmle.code.csharp.dispatch.Dispatch -private import dotnet /** * A call. Either a method call (`MethodCall`), a constructor initializer call @@ -16,7 +15,7 @@ private import dotnet * a delegate call (`DelegateCall`), an accessor call (`AccessorCall`), a * constructor call (`ObjectCreation`), or a local function call (`LocalFunctionCall`). */ -class Call extends DotNet::Call, Expr, @call { +class Call extends Expr, @call { /** * Gets the static (compile-time) target of this call. For example, the * static target of `x.M()` on line 9 is `A.M` in @@ -38,13 +37,19 @@ class Call extends DotNet::Call, Expr, @call { * Use `getARuntimeTarget()` instead to get a potential run-time target (will * include `B.M` in the example above). */ - override Callable getTarget() { none() } + Callable getTarget() { none() } - override Expr getArgument(int i) { result = this.getChild(i) and i >= 0 } + /** Gets the `i`th argument to this call, if any. */ + Expr getArgument(int i) { result = this.getChild(i) and i >= 0 } - override Expr getRawArgument(int i) { result = this.getArgument(i) } + /** + * Gets the `i`th "raw" argument to this call, if any. + * For instance methods, argument 0 is the qualifier. + */ + Expr getRawArgument(int i) { result = this.getArgument(i) } - override Expr getAnArgument() { result = this.getArgument(_) } + /** Gets an argument to this call. */ + Expr getAnArgument() { result = this.getArgument(_) } /** Gets the number of arguments of this call. */ int getNumberOfArguments() { result = count(this.getAnArgument()) } @@ -59,7 +64,7 @@ class Call extends DotNet::Call, Expr, @call { * consider default arguments. */ cached - override Expr getArgumentForParameter(DotNet::Parameter p) { + Expr getArgumentForParameter(Parameter p) { // Appears in the positional part of the call result = this.getImplicitArgument(p) or @@ -69,7 +74,7 @@ class Call extends DotNet::Call, Expr, @call { } pragma[noinline] - private Expr getImplicitArgument(DotNet::Parameter p) { + private Expr getImplicitArgument(Parameter p) { this.getTarget().getAParameter() = p and not exists(result.getExplicitArgumentName()) and ( @@ -144,7 +149,7 @@ class Call extends DotNet::Call, Expr, @call { * - Line 16: There is no static target (delegate call) but the delegate `i => { }` * (line 20) is a run-time target. */ - override Callable getARuntimeTarget() { + Callable getARuntimeTarget() { exists(DispatchCall dc | dc.getCall() = this | result = dc.getADynamicTarget()) } diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll index 98e5b6f340a..0cd3f36467c 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll @@ -18,7 +18,6 @@ import semmle.code.csharp.controlflow.ControlFlowElement import semmle.code.csharp.Location import semmle.code.csharp.Stmt import semmle.code.csharp.Type -private import dotnet private import semmle.code.csharp.ExprOrStmtParent private import semmle.code.csharp.frameworks.System private import semmle.code.csharp.TypeRef @@ -38,11 +37,11 @@ private import semmle.code.csharp.TypeRef * interpolated string (`InterpolatedStringExpr`), a qualifiable expression * (`QualifiableExpr`), or a literal (`Literal`). */ -class Expr extends DotNet::Expr, ControlFlowElement, @expr { +class Expr extends ControlFlowElement, @expr { override Location getALocation() { expr_location(this, result) } /** Gets the type of this expression. */ - override Type getType() { + Type getType() { expressions(this, _, result) or not expressions(this, _, any(Type t)) and @@ -53,7 +52,10 @@ class Expr extends DotNet::Expr, ControlFlowElement, @expr { final AnnotatedType getAnnotatedType() { result.appliesTo(this) } /** Gets the value of this expression, if any */ - override string getValue() { expr_value(this, result) } + string getValue() { expr_value(this, result) } + + /** Holds if this expression has a value. */ + final predicate hasValue() { exists(this.getValue()) } /** Gets the enclosing statement of this expression, if any. */ final Stmt getEnclosingStmt() { enclosingStmt(this, result) } @@ -88,6 +90,10 @@ class Expr extends DotNet::Expr, ControlFlowElement, @expr { */ string getExplicitArgumentName() { expr_argument_name(this, result) } + /** + * Gets the parent of this expression. This is for example the element + * that uses the result of this expression. + */ override Element getParent() { result = ControlFlowElement.super.getParent() } /** Holds if the nullable flow state of this expression is not null. */ @@ -943,13 +949,13 @@ class InterpolatedStringExpr extends Expr, @interpolated_string_expr { * A `throw` element. Either a `throw` expression (`ThrowExpr`) * or a `throw` statement (`ThrowStmt`). */ -class ThrowElement extends ControlFlowElement, DotNet::Throw, @throw_element { +class ThrowElement extends ControlFlowElement, @throw_element { /** * Gets the expression of the exception being thrown, if any. * * For example, `new Exception("Syntax error")` in `throw new Exception("Syntax error");`. */ - override Expr getExpr() { result = this.getChild(0) } + Expr getExpr() { result = this.getChild(0) } /** Gets the type of exception being thrown. */ Class getThrownExceptionType() { diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Literal.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Literal.qll index 34c39d06761..d3258568b92 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/Literal.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/Literal.qll @@ -5,7 +5,6 @@ */ import Expr -private import dotnet /** * A literal. Either a Boolean literal (`BoolLiteral`), a Unicode character @@ -13,7 +12,7 @@ private import dotnet * point literal (`RealLiteral`), a `string` literal (`StringLiteral`), or a * `null` literal (`NullLiteral`). */ -class Literal extends DotNet::Literal, Expr, @literal_expr { +class Literal extends Expr, @literal_expr { override string toString() { result = this.getValue() } } @@ -43,7 +42,7 @@ class CharLiteral extends Literal, @char_literal_expr { * literal (`LongLiteral`), a `uint` literal (`UIntLiteral`), or a `ulong` * literal (`ULongLiteral`). */ -class IntegerLiteral extends DotNet::IntLiteral, Literal, @integer_literal_expr { } +class IntegerLiteral extends Literal, @integer_literal_expr { } /** * An `int` literal, for example `0`. @@ -105,7 +104,7 @@ class DecimalLiteral extends RealLiteral, @decimal_literal_expr { * A `string` literal. Either a `string` literal (`StringLiteralUtf16`), * or a `u8` literal (`StringLiteralUtf8`). */ -class StringLiteral extends DotNet::StringLiteral, Literal, @string_literal_expr { +class StringLiteral extends Literal, @string_literal_expr { override string toString() { result = "\"" + this.getValue().replaceAll("\"", "\\\"") + "\"" } override string getAPrimaryQlClass() { result = "StringLiteral" } @@ -128,6 +127,6 @@ class StringLiteralUtf8 extends StringLiteral, @utf8_string_literal_expr { /** * A `null` literal. */ -class NullLiteral extends DotNet::NullLiteral, Literal, @null_literal_expr { +class NullLiteral extends Literal, @null_literal_expr { override string getAPrimaryQlClass() { result = "NullLiteral" } } diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/EntityFramework.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/EntityFramework.qll index b634aa7d1a5..739546dde46 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/EntityFramework.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/EntityFramework.qll @@ -49,6 +49,8 @@ module EntityFramework { StoredFlowSource() { this.asExpr() = any(PropertyRead read | read.getTarget() instanceof MappedProperty) } + + override string getSourceType() { result = "ORM mapped property" } } private class EFClass extends Class { diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/NHibernate.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/NHibernate.qll index a13c84250c5..74796ccedd1 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/NHibernate.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/NHibernate.qll @@ -91,6 +91,8 @@ module NHibernate { StoredFlowSource() { this.asExpr() = any(PropertyRead read | read.getTarget() instanceof MappedProperty) } + + override string getSourceType() { result = "ORM mapped property" } } /** diff --git a/csharp/ql/lib/semmle/code/csharp/security/auth/InsecureDirectObjectReferenceQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/auth/InsecureDirectObjectReferenceQuery.qll index d4fa6401650..858adcc2268 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/auth/InsecureDirectObjectReferenceQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/auth/InsecureDirectObjectReferenceQuery.qll @@ -1,7 +1,8 @@ /** Definitions for the Insecure Direct Object Reference query */ import csharp -import semmle.code.csharp.dataflow.flowsources.Remote +import semmle.code.csharp.security.dataflow.flowsources.FlowSources +deprecated import semmle.code.csharp.dataflow.flowsources.Remote import ActionMethods /** @@ -17,7 +18,7 @@ private predicate needsChecks(ActionMethod m) { m.isEdit() and not m.isAdmin() } * that may indicate that it's used as the ID for some resource */ private predicate hasIdParameter(ActionMethod m) { - exists(RemoteFlowSource src | src.getEnclosingCallable() = m | + exists(ThreatModelFlowSource src | src.getEnclosingCallable() = m | src.asParameter().getName().toLowerCase().matches(["%id", "%idx"]) or // handle cases like `Request.QueryString["Id"]` diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/CodeInjectionQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/CodeInjectionQuery.qll index d41c6b8f811..1256ae5a7ee 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/CodeInjectionQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/CodeInjectionQuery.qll @@ -3,8 +3,7 @@ */ import csharp -private import semmle.code.csharp.security.dataflow.flowsources.Remote -private import semmle.code.csharp.security.dataflow.flowsources.Local +private import semmle.code.csharp.security.dataflow.flowsources.FlowSources private import semmle.code.csharp.frameworks.system.codedom.Compiler private import semmle.code.csharp.security.Sanitizers private import semmle.code.csharp.dataflow.internal.ExternalFlow @@ -55,11 +54,22 @@ private module CodeInjectionConfig implements DataFlow::ConfigSig { */ module CodeInjection = TaintTracking::Global; -/** A source of remote user input. */ -class RemoteSource extends Source instanceof RemoteFlowSource { } +/** + * DEPRECATED: Use `ThreatModelSource` instead. + * + * A source of remote user input. + */ +deprecated class RemoteSource extends DataFlow::Node instanceof RemoteFlowSource { } -/** A source of local user input. */ -class LocalSource extends Source instanceof LocalFlowSource { } +/** + * DEPRECATED: Use `ThreatModelSource` instead. + * + * A source of local user input. + */ +deprecated class LocalSource extends DataFlow::Node instanceof LocalFlowSource { } + +/** A source supported by the current threat model. */ +class ThreatModelSource extends Source instanceof ThreatModelFlowSource { } private class SimpleTypeSanitizer extends Sanitizer, SimpleTypeSanitizedExpr { } diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/CommandInjectionQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/CommandInjectionQuery.qll index b174405443f..d0b24125ba9 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/CommandInjectionQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/CommandInjectionQuery.qll @@ -3,7 +3,7 @@ */ import csharp -private import semmle.code.csharp.security.dataflow.flowsources.Remote +private import semmle.code.csharp.security.dataflow.flowsources.FlowSources private import semmle.code.csharp.frameworks.system.Diagnostics private import semmle.code.csharp.security.Sanitizers private import semmle.code.csharp.dataflow.internal.ExternalFlow @@ -64,8 +64,15 @@ module CommandInjectionConfig implements DataFlow::ConfigSig { */ module CommandInjection = TaintTracking::Global; -/** A source of remote user input. */ -class RemoteSource extends Source instanceof RemoteFlowSource { } +/** + * DEPRECATED: Use `ThreatModelSource` instead. + * + * A source of remote user input. + */ +deprecated class RemoteSource extends DataFlow::Node instanceof RemoteFlowSource { } + +/** A source supported by the current threat model. */ +class ThreatModelSource extends Source instanceof ThreatModelFlowSource { } /** Command Injection sinks defined through Models as Data. */ private class ExternalCommandInjectionExprSink extends Sink { diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ConditionalBypassQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ConditionalBypassQuery.qll index e919684d751..a8938ecc6c9 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ConditionalBypassQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ConditionalBypassQuery.qll @@ -6,7 +6,7 @@ import csharp private import semmle.code.csharp.controlflow.Guards private import semmle.code.csharp.controlflow.BasicBlocks -private import semmle.code.csharp.security.dataflow.flowsources.Remote +private import semmle.code.csharp.security.dataflow.flowsources.FlowSources private import semmle.code.csharp.frameworks.System private import semmle.code.csharp.frameworks.system.Net private import semmle.code.csharp.security.SensitiveActions @@ -60,8 +60,15 @@ private module ConditionalBypassConfig implements DataFlow::ConfigSig { */ module ConditionalBypass = TaintTracking::Global; -/** A source of remote user input. */ -class RemoteSource extends Source instanceof RemoteFlowSource { } +/** + * DEPRECATED: Use `ThreatModelSource` instead. + * + * A source of remote user input. + */ +deprecated class RemoteSource extends DataFlow::Node instanceof RemoteFlowSource { } + +/** A source supported by the current threat model. */ +class ThreatModelSource extends Source instanceof ThreatModelFlowSource { } /** The result of a reverse dns may be user-controlled. */ class ReverseDnsSource extends Source { diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExposureOfPrivateInformationQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExposureOfPrivateInformationQuery.qll index 0b53d9d1ca6..03db7fadf81 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExposureOfPrivateInformationQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExposureOfPrivateInformationQuery.qll @@ -3,7 +3,7 @@ */ import csharp -private import semmle.code.csharp.security.dataflow.flowsources.Remote +private import semmle.code.csharp.security.dataflow.flowsources.FlowSources private import semmle.code.csharp.security.dataflow.flowsinks.ExternalLocationSink private import semmle.code.csharp.security.PrivateData diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExternalAPIsQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExternalAPIsQuery.qll index e1630503da5..3075fe53a87 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExternalAPIsQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ExternalAPIsQuery.qll @@ -5,7 +5,7 @@ import csharp private import semmle.code.csharp.commons.QualifiedName -private import semmle.code.csharp.dataflow.flowsources.Remote +private import semmle.code.csharp.security.dataflow.flowsources.FlowSources private import semmle.code.csharp.frameworks.System private import semmle.code.csharp.dataflow.FlowSummary @@ -92,19 +92,19 @@ class ExternalApiDataNode extends DataFlow::Node { deprecated class UntrustedDataToExternalApiConfig extends TaintTracking::Configuration { UntrustedDataToExternalApiConfig() { this = "UntrustedDataToExternalAPIConfig" } - override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } + override predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } override predicate isSink(DataFlow::Node sink) { sink instanceof ExternalApiDataNode } } -/** A configuration for tracking flow from `RemoteFlowSource`s to `ExternalApiDataNode`s. */ +/** A configuration for tracking flow from `ThreatModelFlowSource`s to `ExternalApiDataNode`s. */ private module RemoteSourceToExternalApiConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } + predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } predicate isSink(DataFlow::Node sink) { sink instanceof ExternalApiDataNode } } -/** A module for tracking flow from `RemoteFlowSource`s to `ExternalApiDataNode`s. */ +/** A module for tracking flow from `ThreatModelFlowSource`s to `ExternalApiDataNode`s. */ module RemoteSourceToExternalApi = TaintTracking::Global; /** A node representing untrusted data being passed to an external API. */ diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/LDAPInjectionQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/LDAPInjectionQuery.qll index 25134fbcb12..58a34f7604b 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/LDAPInjectionQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/LDAPInjectionQuery.qll @@ -4,7 +4,7 @@ */ import csharp -private import semmle.code.csharp.security.dataflow.flowsources.Remote +private import semmle.code.csharp.security.dataflow.flowsources.FlowSources private import semmle.code.csharp.frameworks.system.DirectoryServices private import semmle.code.csharp.frameworks.system.directoryservices.Protocols private import semmle.code.csharp.security.Sanitizers @@ -66,8 +66,15 @@ module LdapInjectionConfig implements DataFlow::ConfigSig { */ module LdapInjection = TaintTracking::Global; -/** A source of remote user input. */ -class RemoteSource extends Source instanceof RemoteFlowSource { } +/** + * DEPRECATED: Use `ThreadModelSource` instead. + * + * A source of remote user input. + */ +deprecated class RemoteSource extends DataFlow::Node instanceof RemoteFlowSource { } + +/** A source supported by the current threat model. */ +class ThreatModelSource extends Source instanceof ThreatModelFlowSource { } /** LDAP sinks defined through Models as Data. */ private class ExternalLdapExprSink extends Sink { diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll index 800e86457b4..ed6e69f0709 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll @@ -3,7 +3,7 @@ */ import csharp -private import semmle.code.csharp.security.dataflow.flowsources.Remote +private import semmle.code.csharp.security.dataflow.flowsources.FlowSources private import semmle.code.csharp.frameworks.System private import semmle.code.csharp.frameworks.system.text.RegularExpressions private import semmle.code.csharp.security.Sanitizers @@ -57,7 +57,7 @@ private module LogForgingConfig implements DataFlow::ConfigSig { module LogForging = TaintTracking::Global; /** A source of remote user input. */ -private class RemoteSource extends Source instanceof RemoteFlowSource { } +private class ThreatModelSource extends Source instanceof ThreatModelFlowSource { } private class HtmlSanitizer extends Sanitizer { HtmlSanitizer() { this.asExpr() instanceof HtmlSanitizedExpr } diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/MissingXMLValidationQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/MissingXMLValidationQuery.qll index 676b77b8446..914239bf7d5 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/MissingXMLValidationQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/MissingXMLValidationQuery.qll @@ -4,7 +4,7 @@ */ import csharp -private import semmle.code.csharp.security.dataflow.flowsources.Remote +private import semmle.code.csharp.security.dataflow.flowsources.FlowSources private import semmle.code.csharp.frameworks.system.Xml private import semmle.code.csharp.security.Sanitizers @@ -62,8 +62,17 @@ private module MissingXmlValidationConfig implements DataFlow::ConfigSig { */ module MissingXmlValidation = TaintTracking::Global; -/** A source of remote user input. */ -class RemoteSource extends Source instanceof RemoteFlowSource { } +/** + * DEPRECATED: Use `ThreatModelFlowSource` instead. + * + * A source of remote user input. + */ +deprecated class RemoteSource extends DataFlow::Node instanceof RemoteFlowSource { } + +/** + * A source supported by the current threat model. + */ +class ThreatModelSource extends Source instanceof ThreatModelFlowSource { } /** * The input argument to a call to `XmlReader.Create` where the input will not be validated against diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ReDoSQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ReDoSQuery.qll index 27f70a0d4e4..84d12fca0cc 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ReDoSQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ReDoSQuery.qll @@ -5,7 +5,7 @@ import csharp private import semmle.code.csharp.dataflow.DataFlow2 -private import semmle.code.csharp.security.dataflow.flowsources.Remote +private import semmle.code.csharp.security.dataflow.flowsources.FlowSources private import semmle.code.csharp.frameworks.system.text.RegularExpressions private import semmle.code.csharp.security.Sanitizers @@ -55,8 +55,15 @@ private module ReDoSConfig implements DataFlow::ConfigSig { */ module ReDoS = TaintTracking::Global; -/** A source of remote user input. */ -class RemoteSource extends Source instanceof RemoteFlowSource { } +/** + * DEPRECATED: Use `ThreatModelSource` instead. + * + * A source of remote user input. + */ +deprecated class RemoteSource extends DataFlow::Node instanceof RemoteFlowSource { } + +/** A source supported by the current threat model. */ +class ThreatModelSource extends Source instanceof ThreatModelFlowSource { } /** * An expression that represents a regular expression with potential exponential behavior. diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/RegexInjectionQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/RegexInjectionQuery.qll index 89baeda92b6..501ede13f29 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/RegexInjectionQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/RegexInjectionQuery.qll @@ -4,7 +4,7 @@ */ import csharp -private import semmle.code.csharp.security.dataflow.flowsources.Remote +private import semmle.code.csharp.security.dataflow.flowsources.FlowSources private import semmle.code.csharp.frameworks.system.text.RegularExpressions private import semmle.code.csharp.security.Sanitizers @@ -54,8 +54,15 @@ private module RegexInjectionConfig implements DataFlow::ConfigSig { */ module RegexInjection = TaintTracking::Global; -/** A source of remote user input. */ -class RemoteSource extends Source instanceof RemoteFlowSource { } +/** + * DEPRECATED: Use `ThreatModelSource` instead. + * + * A source of remote user input. + */ +deprecated class RemoteSource extends DataFlow::Node instanceof RemoteFlowSource { } + +/** A source supported by the current threat model. */ +class ThreatModelSource extends Source instanceof ThreatModelFlowSource { } /** * A `pattern` argument to a construction of a `Regex`. diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ResourceInjectionQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ResourceInjectionQuery.qll index 336ca17ca75..a66283de02a 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ResourceInjectionQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ResourceInjectionQuery.qll @@ -3,8 +3,7 @@ */ import csharp -private import semmle.code.csharp.security.dataflow.flowsources.Remote -private import semmle.code.csharp.security.dataflow.flowsources.Local +private import semmle.code.csharp.security.dataflow.flowsources.FlowSources private import semmle.code.csharp.frameworks.system.Data private import semmle.code.csharp.security.Sanitizers @@ -54,11 +53,22 @@ private module ResourceInjectionConfig implements DataFlow::ConfigSig { */ module ResourceInjection = TaintTracking::Global; -/** A source of remote user input. */ -class RemoteSource extends Source instanceof RemoteFlowSource { } +/** + * DEPRECATED: Use `ThreatModelSource` instead. + * + * A source of remote user input. + */ +deprecated class RemoteSource extends DataFlow::Node instanceof RemoteFlowSource { } -/** A source of local user input. */ -class LocalSource extends Source instanceof LocalFlowSource { } +/** + * DEPRECATED: Use `ThreatModelSource` instead. + * + * A source of local user input. + */ +deprecated class LocalSource extends DataFlow::Node instanceof LocalFlowSource { } + +/** A source supported by the current threat model. */ +class ThreatModelSource extends Source instanceof ThreatModelFlowSource { } /** An argument to the `ConnectionString` property on a data connection class. */ class SqlConnectionStringSink extends Sink { diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/SqlInjectionQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/SqlInjectionQuery.qll index 7500ac7a994..b7b198bbca0 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/SqlInjectionQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/SqlInjectionQuery.qll @@ -3,8 +3,7 @@ */ import csharp -private import semmle.code.csharp.security.dataflow.flowsources.Remote -private import semmle.code.csharp.security.dataflow.flowsources.Local +private import semmle.code.csharp.security.dataflow.flowsources.FlowSources private import semmle.code.csharp.frameworks.Sql private import semmle.code.csharp.security.Sanitizers private import semmle.code.csharp.dataflow.internal.ExternalFlow @@ -65,11 +64,22 @@ module SqlInjectionConfig implements DataFlow::ConfigSig { */ module SqlInjection = TaintTracking::Global; -/** A source of remote user input. */ -class RemoteSource extends Source instanceof RemoteFlowSource { } +/** + * DEPRECATED: Use `ThreatModelSource` instead. + * + * A source of remote user input. + */ +deprecated class RemoteSource extends DataFlow::Node instanceof RemoteFlowSource { } -/** A source of local user input. */ -class LocalSource extends Source instanceof LocalFlowSource { } +/** + * DEPRECATED: Use `ThreatModelSource` instead. + * + * A source of local user input. + */ +deprecated class LocalSource extends DataFlow::Node instanceof LocalFlowSource { } + +/** A source supported by the current threat model. */ +class ThreatModelSource extends Source instanceof ThreatModelFlowSource { } /** An SQL expression passed to an API call that executes SQL. */ class SqlInjectionExprSink extends Sink { diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/TaintedPathQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/TaintedPathQuery.qll index 005a9e96bfa..bbd32b58353 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/TaintedPathQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/TaintedPathQuery.qll @@ -5,7 +5,7 @@ import csharp private import semmle.code.csharp.controlflow.Guards -private import semmle.code.csharp.security.dataflow.flowsources.Remote +private import semmle.code.csharp.security.dataflow.flowsources.FlowSources private import semmle.code.csharp.frameworks.system.IO private import semmle.code.csharp.frameworks.system.Web private import semmle.code.csharp.security.Sanitizers @@ -56,8 +56,15 @@ private module TaintedPathConfig implements DataFlow::ConfigSig { */ module TaintedPath = TaintTracking::Global; -/** A source of remote user input. */ -class RemoteSource extends Source instanceof RemoteFlowSource { } +/** + * DEPRECATED: Use `ThreatModelSource` instead. + * + * A source of remote user input. + */ +deprecated class RemoteSource extends DataFlow::Node instanceof RemoteFlowSource { } + +/** A source supported by the current threat model. */ +class ThreatModelSource extends Source instanceof ThreatModelFlowSource { } /** * A path argument to a `File` method call. diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UnsafeDeserializationQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UnsafeDeserializationQuery.qll index cf558b62c43..6de1305a11d 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UnsafeDeserializationQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UnsafeDeserializationQuery.qll @@ -6,7 +6,7 @@ import csharp private import semmle.code.csharp.serialization.Deserializers private import semmle.code.csharp.dataflow.TaintTracking2 -private import semmle.code.csharp.security.dataflow.flowsources.Remote +private import semmle.code.csharp.security.dataflow.flowsources.FlowSources /** * A data flow source for unsafe deserialization vulnerabilities. @@ -48,7 +48,7 @@ abstract private class ConstructorOrStaticMethodSink extends Sink { } */ abstract class Sanitizer extends DataFlow::Node { } -private class RemoteSource extends Source instanceof RemoteFlowSource { } +private class ThreatModelSource extends Source instanceof ThreatModelFlowSource { } /** * DEPRECATED: Use `TaintToObjectMethodTracking` instead. diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll index 53b4cceb960..9a5ec46cb37 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll @@ -3,7 +3,7 @@ */ import csharp -private import semmle.code.csharp.security.dataflow.flowsources.Remote +private import semmle.code.csharp.security.dataflow.flowsources.FlowSources private import semmle.code.csharp.controlflow.Guards private import semmle.code.csharp.frameworks.Format private import semmle.code.csharp.frameworks.system.Web @@ -58,8 +58,15 @@ private module UrlRedirectConfig implements DataFlow::ConfigSig { */ module UrlRedirect = TaintTracking::Global; -/** A source of remote user input. */ -class RemoteSource extends Source instanceof RemoteFlowSource { } +/** + * DEPRECATED: Use `ThreatModelSource` instead. + * + * A source of remote user input. + */ +deprecated class RemoteSource extends DataFlow::Node instanceof RemoteFlowSource { } + +/** A source supported by the current threat model. */ +class ThreatModelSource extends Source instanceof ThreatModelFlowSource { } /** URL Redirection sinks defined through Models as Data. */ private class ExternalUrlRedirectExprSink extends Sink { diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/XMLEntityInjectionQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/XMLEntityInjectionQuery.qll index e2d347a2268..7e7fd61fb1c 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/XMLEntityInjectionQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/XMLEntityInjectionQuery.qll @@ -3,7 +3,7 @@ */ import csharp -private import semmle.code.csharp.security.dataflow.flowsources.Remote +private import semmle.code.csharp.security.dataflow.flowsources.FlowSources private import semmle.code.csharp.frameworks.System private import semmle.code.csharp.frameworks.system.text.RegularExpressions private import semmle.code.csharp.security.xml.InsecureXMLQuery as InsecureXml @@ -14,7 +14,7 @@ private import semmle.code.csharp.security.Sanitizers */ abstract class Source extends DataFlow::Node { } -private class RemoteSource extends Source instanceof RemoteFlowSource { } +private class ThreatModelSource extends Source instanceof ThreatModelFlowSource { } /** * A data flow sink for untrusted user input used in XML processing. diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/XPathInjectionQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/XPathInjectionQuery.qll index 57a0d6e9b50..1edddf45f56 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/XPathInjectionQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/XPathInjectionQuery.qll @@ -3,7 +3,7 @@ */ import csharp -private import semmle.code.csharp.security.dataflow.flowsources.Remote +private import semmle.code.csharp.security.dataflow.flowsources.FlowSources private import semmle.code.csharp.frameworks.system.xml.XPath private import semmle.code.csharp.frameworks.system.Xml private import semmle.code.csharp.security.Sanitizers @@ -64,8 +64,15 @@ module XpathInjectionConfig implements DataFlow::ConfigSig { */ module XpathInjection = TaintTracking::Global; -/** A source of remote user input. */ -class RemoteSource extends Source instanceof RemoteFlowSource { } +/** + * DEPRECATED: Use `ThreatModelSource` instead. + * + * A source of remote user input. + */ +deprecated class RemoteSource extends DataFlow::Node instanceof RemoteFlowSource { } + +/** A source supported by the current threat model. */ +class ThreatModelSource extends Source instanceof ThreatModelFlowSource { } /** The `xpath` argument to an `XPathExpression.Compile(..)` call. */ class XPathExpressionCompileSink extends Sink { diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/XSSQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/XSSQuery.qll index 1dea41c8a7c..b9fd47689f9 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/XSSQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/XSSQuery.qll @@ -6,7 +6,7 @@ import csharp private import XSSSinks private import semmle.code.csharp.security.Sanitizers -private import semmle.code.csharp.security.dataflow.flowsources.Remote +private import semmle.code.csharp.security.dataflow.flowsources.FlowSources private import semmle.code.csharp.dataflow.DataFlow2 private import semmle.code.csharp.dataflow.TaintTracking2 @@ -179,8 +179,8 @@ module XssTrackingConfig implements DataFlow::ConfigSig { module XssTracking = TaintTracking::Global; -/** A source of remote user input. */ -private class RemoteSource extends Source instanceof RemoteFlowSource { } +/** A source supported by the current threat model. */ +private class ThreatModelSource extends Source instanceof ThreatModelFlowSource { } private class SimpleTypeSanitizer extends Sanitizer, SimpleTypeSanitizedExpr { } diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/flowsources/FlowSources.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/flowsources/FlowSources.qll index 6da08298fb9..a5ada1cbaf8 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/flowsources/FlowSources.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/flowsources/FlowSources.qll @@ -14,6 +14,9 @@ abstract class SourceNode extends DataFlow::Node { * Gets a string that represents the source kind with respect to threat modeling. */ abstract string getThreatModel(); + + /** Gets a string that describes the type of this flow source. */ + abstract string getSourceType(); } /** diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/flowsources/Local.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/flowsources/Local.qll index 7ee1d4b744c..6261d41f404 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/flowsources/Local.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/flowsources/Local.qll @@ -6,11 +6,11 @@ import csharp private import semmle.code.csharp.frameworks.system.windows.Forms private import semmle.code.csharp.dataflow.internal.ExternalFlow private import semmle.code.csharp.security.dataflow.flowsources.FlowSources +private import semmle.code.csharp.commons.Util /** A data flow source of local data. */ abstract class LocalFlowSource extends SourceNode { - /** Gets a string that describes the type of this local flow source. */ - abstract string getSourceType(); + override string getSourceType() { result = "local flow source" } override string getThreatModel() { result = "local" } } @@ -30,3 +30,49 @@ class TextFieldSource extends LocalUserInputSource { override string getSourceType() { result = "TextBox text" } } + +/** + * A dataflow source that represents the access of an environment variable. + */ +abstract class EnvironmentVariableSource extends LocalFlowSource { + override string getThreatModel() { result = "environment" } + + override string getSourceType() { result = "environment variable" } +} + +private class ExternalEnvironmentVariableSource extends EnvironmentVariableSource { + ExternalEnvironmentVariableSource() { sourceNode(this, "environment") } +} + +/** + * A dataflow source that represents the access of a command line argument. + */ +abstract class CommandLineArgumentSource extends LocalFlowSource { + override string getThreatModel() { result = "commandargs" } + + override string getSourceType() { result = "command line argument" } +} + +private class ExternalCommandLineArgumentSource extends CommandLineArgumentSource { + ExternalCommandLineArgumentSource() { sourceNode(this, "command-line") } +} + +/** + * A data flow source that represents the parameters of the `Main` method of a program. + */ +private class MainMethodArgumentSource extends CommandLineArgumentSource { + MainMethodArgumentSource() { this.asParameter() = any(MainMethod mainMethod).getAParameter() } +} + +/** + * A data flow source that represents the access of a value from the Windows registry. + */ +abstract class WindowsRegistrySource extends LocalFlowSource { + override string getThreatModel() { result = "windows-registry" } + + override string getSourceType() { result = "a value from the Windows registry" } +} + +private class ExternalWindowsRegistrySource extends WindowsRegistrySource { + ExternalWindowsRegistrySource() { sourceNode(this, "windows-registry") } +} diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/flowsources/Remote.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/flowsources/Remote.qll index 07c230c19c2..dc2fb36c47a 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/flowsources/Remote.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/flowsources/Remote.qll @@ -17,8 +17,7 @@ private import semmle.code.csharp.security.dataflow.flowsources.FlowSources /** A data flow source of remote user input. */ abstract class RemoteFlowSource extends SourceNode { - /** Gets a string that describes the type of this remote flow source. */ - abstract string getSourceType(); + override string getSourceType() { result = "remote flow source" } override string getThreatModel() { result = "remote" } } diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/flowsources/Stored.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/flowsources/Stored.qll index 95df5284b1d..5516da547e6 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/flowsources/Stored.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/flowsources/Stored.qll @@ -21,6 +21,8 @@ abstract class StoredFlowSource extends SourceNode { */ abstract class DatabaseInputSource extends StoredFlowSource { override string getThreatModel() { result = "database" } + + override string getSourceType() { result = "database input" } } /** @@ -71,9 +73,15 @@ deprecated class ORMMappedProperty extends DataFlow::Node { } } +private class ExternalDatabaseInputSource extends DatabaseInputSource { + ExternalDatabaseInputSource() { sourceNode(this, "database") } +} + /** A file stream source is considered a stored flow source. */ class FileStreamStoredFlowSource extends StoredFlowSource { FileStreamStoredFlowSource() { sourceNode(this, "file") } override string getThreatModel() { result = "file" } + + override string getSourceType() { result = "file stream" } } diff --git a/csharp/ql/lib/semmle/code/dotnet/Callable.qll b/csharp/ql/lib/semmle/code/dotnet/Callable.qll index 0a63e5c95cd..f3f65c75a5e 100644 --- a/csharp/ql/lib/semmle/code/dotnet/Callable.qll +++ b/csharp/ql/lib/semmle/code/dotnet/Callable.qll @@ -9,7 +9,7 @@ import Expr import Parameterizable /** A .Net callable. */ -class Callable extends Parameterizable, @dotnet_callable { +deprecated class Callable extends Parameterizable, @dotnet_callable { /** Holds if this callable has a body or an implementation. */ predicate hasBody() { none() } @@ -85,13 +85,13 @@ class Callable extends Parameterizable, @dotnet_callable { } /** A constructor. */ -abstract class Constructor extends Callable { } +abstract deprecated class Constructor extends Callable { } /** A destructor/finalizer. */ -abstract class Destructor extends Callable { } +abstract deprecated class Destructor extends Callable { } pragma[nomagic] -private ValueOrRefType getARecordBaseType(ValueOrRefType t) { +deprecated private ValueOrRefType getARecordBaseType(ValueOrRefType t) { exists(Callable c | c.hasName("$") and c.getNumberOfParameters() = 0 and @@ -103,7 +103,7 @@ private ValueOrRefType getARecordBaseType(ValueOrRefType t) { } /** A clone method on a record. */ -class RecordCloneCallable extends Callable { +deprecated class RecordCloneCallable extends Callable { RecordCloneCallable() { this.getDeclaringType() instanceof ValueOrRefType and this.hasName("$") and diff --git a/csharp/ql/lib/semmle/code/dotnet/Declaration.qll b/csharp/ql/lib/semmle/code/dotnet/Declaration.qll index 464eaab630b..b03f8ae4ba5 100644 --- a/csharp/ql/lib/semmle/code/dotnet/Declaration.qll +++ b/csharp/ql/lib/semmle/code/dotnet/Declaration.qll @@ -7,7 +7,7 @@ import Type private import semmle.code.csharp.commons.QualifiedName /** A declaration. */ -class Declaration extends NamedElement, @dotnet_declaration { +deprecated class Declaration extends NamedElement, @dotnet_declaration { /** Gets the name of this declaration, without additional decoration such as `<...>`. */ string getUndecoratedName() { none() } @@ -50,7 +50,7 @@ class Declaration extends NamedElement, @dotnet_declaration { } /** A member of a type. */ -class Member extends Declaration, @dotnet_member { +deprecated class Member extends Declaration, @dotnet_member { /** Holds if this member is declared `public`. */ predicate isPublic() { none() } @@ -102,7 +102,7 @@ class Member extends Declaration, @dotnet_member { } /** A property. */ -class Property extends Member, @dotnet_property { +deprecated class Property extends Member, @dotnet_property { /** Gets the getter of this property, if any. */ Callable getGetter() { none() } @@ -114,7 +114,7 @@ class Property extends Member, @dotnet_property { } /** An event. */ -class Event extends Member, @dotnet_event { +deprecated class Event extends Member, @dotnet_event { /** Gets the adder of this event, if any. */ Callable getAdder() { none() } diff --git a/csharp/ql/lib/semmle/code/dotnet/Element.qll b/csharp/ql/lib/semmle/code/dotnet/Element.qll index d0ebce3f7e4..96ad2ab1edf 100644 --- a/csharp/ql/lib/semmle/code/dotnet/Element.qll +++ b/csharp/ql/lib/semmle/code/dotnet/Element.qll @@ -8,7 +8,7 @@ import semmle.code.csharp.Location /** * A .Net program element. */ -class Element extends @dotnet_element { +deprecated class Element extends @dotnet_element { /** Gets a textual representation of this element. */ cached string toString() { none() } @@ -69,7 +69,7 @@ class Element extends @dotnet_element { } /** An element that has a name. */ -class NamedElement extends Element, @dotnet_named_element { +deprecated class NamedElement extends Element, @dotnet_named_element { /** Gets the name of this element. */ cached string getName() { none() } diff --git a/csharp/ql/lib/semmle/code/dotnet/Expr.qll b/csharp/ql/lib/semmle/code/dotnet/Expr.qll index 15d658f54c2..47e90d02169 100644 --- a/csharp/ql/lib/semmle/code/dotnet/Expr.qll +++ b/csharp/ql/lib/semmle/code/dotnet/Expr.qll @@ -7,7 +7,7 @@ import Type import Callable /** An expression. */ -class Expr extends Element, @dotnet_expr { +deprecated class Expr extends Element, @dotnet_expr { /** Gets the callable containing this expression. */ Callable getEnclosingCallable() { none() } @@ -28,7 +28,7 @@ class Expr extends Element, @dotnet_expr { } /** A call. */ -class Call extends Expr, @dotnet_call { +deprecated class Call extends Expr, @dotnet_call { /** Gets the target of this call. */ Callable getTarget() { none() } @@ -52,13 +52,13 @@ class Call extends Expr, @dotnet_call { } /** A literal expression. */ -class Literal extends Expr, @dotnet_literal { } +deprecated class Literal extends Expr, @dotnet_literal { } /** A string literal expression. */ -class StringLiteral extends Literal, @dotnet_string_literal { } +deprecated class StringLiteral extends Literal, @dotnet_string_literal { } /** An integer literal expression. */ -class IntLiteral extends Literal, @dotnet_int_literal { } +deprecated class IntLiteral extends Literal, @dotnet_int_literal { } /** A `null` literal expression. */ -class NullLiteral extends Literal, @dotnet_null_literal { } +deprecated class NullLiteral extends Literal, @dotnet_null_literal { } diff --git a/csharp/ql/lib/semmle/code/dotnet/Generics.qll b/csharp/ql/lib/semmle/code/dotnet/Generics.qll index 67b8fb2f5d0..7c20578f4b1 100644 --- a/csharp/ql/lib/semmle/code/dotnet/Generics.qll +++ b/csharp/ql/lib/semmle/code/dotnet/Generics.qll @@ -6,10 +6,10 @@ import Declaration * A generic declaration. Either an unbound generic (`UnboundGeneric`) or a * constructed generic (`ConstructedGeneric`). */ -abstract class Generic extends Declaration, @dotnet_generic { } +abstract deprecated class Generic extends Declaration, @dotnet_generic { } /** An unbound generic. */ -abstract class UnboundGeneric extends Generic { +abstract deprecated class UnboundGeneric extends Generic { /** Gets the `i`th type parameter, if any. */ abstract TypeParameter getTypeParameter(int i); @@ -27,7 +27,7 @@ abstract class UnboundGeneric extends Generic { } /** A constructed generic. */ -abstract class ConstructedGeneric extends Generic { +abstract deprecated class ConstructedGeneric extends Generic { /** Gets the `i`th type argument, if any. */ abstract Type getTypeArgument(int i); @@ -49,20 +49,20 @@ abstract class ConstructedGeneric extends Generic { * * Constructs the label suffix for a generic method or type. */ -string getGenericsLabel(Generic g) { +deprecated string getGenericsLabel(Generic g) { result = "`" + g.(UnboundGeneric).getNumberOfTypeParameters() or result = "<" + typeArgs(g) + ">" } pragma[noinline] -private string getTypeArgumentLabel(ConstructedGeneric generic, int p) { +deprecated private string getTypeArgumentLabel(ConstructedGeneric generic, int p) { result = generic.getTypeArgument(p).getLabel() } language[monotonicAggregates] pragma[nomagic] -private string typeArgs(ConstructedGeneric generic) { +deprecated private string typeArgs(ConstructedGeneric generic) { result = concat(int p | p in [0 .. generic.getNumberOfTypeArguments() - 1] diff --git a/csharp/ql/lib/semmle/code/dotnet/Namespace.qll b/csharp/ql/lib/semmle/code/dotnet/Namespace.qll index 6035016c281..1b307407e9f 100644 --- a/csharp/ql/lib/semmle/code/dotnet/Namespace.qll +++ b/csharp/ql/lib/semmle/code/dotnet/Namespace.qll @@ -6,7 +6,7 @@ private import Declaration private import semmle.code.csharp.commons.QualifiedName /** A namespace. */ -class Namespace extends Declaration, @namespace { +deprecated class Namespace extends Declaration, @namespace { /** * Gets the parent namespace, if any. For example the parent namespace of `System.IO` * is `System`. The parent namespace of `System` is the global namespace. @@ -64,6 +64,6 @@ class Namespace extends Declaration, @namespace { } /** The global namespace. */ -class GlobalNamespace extends Namespace { +deprecated class GlobalNamespace extends Namespace { GlobalNamespace() { this.getName() = "" } } diff --git a/csharp/ql/lib/semmle/code/dotnet/Parameterizable.qll b/csharp/ql/lib/semmle/code/dotnet/Parameterizable.qll index 8a1f9c108ca..49aa10510b3 100644 --- a/csharp/ql/lib/semmle/code/dotnet/Parameterizable.qll +++ b/csharp/ql/lib/semmle/code/dotnet/Parameterizable.qll @@ -9,7 +9,7 @@ import Declaration * A general parameterizable entity, such as a callable, delegate type, accessor, * indexer, or function pointer type. */ -class Parameterizable extends Declaration, @dotnet_parameterizable { +deprecated class Parameterizable extends Declaration, @dotnet_parameterizable { /** Gets raw parameter `i`, including the `this` parameter at index 0. */ Parameter getRawParameter(int i) { none() } diff --git a/csharp/ql/lib/semmle/code/dotnet/Type.qll b/csharp/ql/lib/semmle/code/dotnet/Type.qll index 269e9c5c788..7b94fd06b61 100644 --- a/csharp/ql/lib/semmle/code/dotnet/Type.qll +++ b/csharp/ql/lib/semmle/code/dotnet/Type.qll @@ -11,7 +11,7 @@ import Generics * A type. Either a value or reference type (`ValueOrRefType`), a type parameter (`TypeParameter`), * a pointer type (`PointerType`), or an array type (`ArrayType`). */ -class Type extends Declaration, @dotnet_type { +deprecated class Type extends Declaration, @dotnet_type { /** Gets the name of this type without additional syntax such as `[]` or `*`. */ override string getUndecoratedName() { none() } } @@ -19,7 +19,7 @@ class Type extends Declaration, @dotnet_type { /** * A value or reference type. */ -class ValueOrRefType extends Type, @dotnet_valueorreftype { +deprecated class ValueOrRefType extends Type, @dotnet_valueorreftype { /** Gets the namespace declaring this type, if any. */ Namespace getDeclaringNamespace() { none() } @@ -57,7 +57,7 @@ class ValueOrRefType extends Type, @dotnet_valueorreftype { /** * A type parameter, for example `T` in `System.Nullable`. */ -class TypeParameter extends Type, @dotnet_type_parameter { +deprecated class TypeParameter extends Type, @dotnet_type_parameter { /** Gets the generic type or method declaring this type parameter. */ UnboundGeneric getDeclaringGeneric() { this = result.getATypeParameter() } @@ -70,7 +70,7 @@ class TypeParameter extends Type, @dotnet_type_parameter { } /** A pointer type. */ -class PointerType extends Type, @dotnet_pointer_type { +deprecated class PointerType extends Type, @dotnet_pointer_type { /** Gets the type referred by this pointer type, for example `char` in `char*`. */ Type getReferentType() { none() } @@ -82,7 +82,7 @@ class PointerType extends Type, @dotnet_pointer_type { } /** An array type. */ -class ArrayType extends ValueOrRefType, @dotnet_array_type { +deprecated class ArrayType extends ValueOrRefType, @dotnet_array_type { /** Gets the type of the array element. */ Type getElementType() { none() } diff --git a/csharp/ql/lib/semmle/code/dotnet/Utils.qll b/csharp/ql/lib/semmle/code/dotnet/Utils.qll index 42c5b59a5fb..b69993ce97e 100644 --- a/csharp/ql/lib/semmle/code/dotnet/Utils.qll +++ b/csharp/ql/lib/semmle/code/dotnet/Utils.qll @@ -6,7 +6,7 @@ import Element import Expr /** A throw element. */ -class Throw extends Element, @dotnet_throw { +deprecated class Throw extends Element, @dotnet_throw { /** Gets the expression being thrown, if any. */ Expr getExpr() { none() } } diff --git a/csharp/ql/lib/semmle/code/dotnet/Variable.qll b/csharp/ql/lib/semmle/code/dotnet/Variable.qll index bc21f9756ce..a0cea24e7fd 100644 --- a/csharp/ql/lib/semmle/code/dotnet/Variable.qll +++ b/csharp/ql/lib/semmle/code/dotnet/Variable.qll @@ -4,16 +4,16 @@ import Declaration import Callable /** A .Net variable. */ -class Variable extends Declaration, @dotnet_variable { +deprecated class Variable extends Declaration, @dotnet_variable { /** Gets the type of this variable. */ Type getType() { none() } } /** A .Net field. */ -class Field extends Variable, Member, @dotnet_field { } +deprecated class Field extends Variable, Member, @dotnet_field { } /** A parameter to a .Net callable, property or function pointer type. */ -class Parameter extends Variable, @dotnet_parameter { +deprecated class Parameter extends Variable, @dotnet_parameter { /** Gets the raw position of this parameter, including the `this` parameter at index 0. */ final int getRawPosition() { this = this.getDeclaringElement().getRawParameter(result) } diff --git a/csharp/ql/lib/semmlecode.csharp.dbscheme b/csharp/ql/lib/semmlecode.csharp.dbscheme index 21ede72308c..fd04e45710e 100644 --- a/csharp/ql/lib/semmlecode.csharp.dbscheme +++ b/csharp/ql/lib/semmlecode.csharp.dbscheme @@ -888,7 +888,7 @@ params( 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 mode: int ref, /* value = 0, ref = 1, out = 2, params/array = 3, this = 4, in = 5, ref readonly = 6 */ int parent_id: @parameterizable ref, int unbound_id: @parameter ref); diff --git a/csharp/ql/lib/upgrades/21ede72308c41493f19b37720d8259d5eb307f12/old.dbscheme b/csharp/ql/lib/upgrades/21ede72308c41493f19b37720d8259d5eb307f12/old.dbscheme new file mode 100644 index 00000000000..21ede72308c --- /dev/null +++ b/csharp/ql/lib/upgrades/21ede72308c41493f19b37720d8259d5eb307f12/old.dbscheme @@ -0,0 +1,2099 @@ +/* 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 +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: 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 expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_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 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 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 +| 34 = @inline_array_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 | @void_type | @inline_array_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); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +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); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** 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 = @utf16_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 +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_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; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_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_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); + +/* Compiler generated */ + +compiler_generated(unique int id: @element 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_field | @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; + +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/ql/lib/upgrades/21ede72308c41493f19b37720d8259d5eb307f12/semmlecode.csharp.dbscheme b/csharp/ql/lib/upgrades/21ede72308c41493f19b37720d8259d5eb307f12/semmlecode.csharp.dbscheme new file mode 100644 index 00000000000..fd04e45710e --- /dev/null +++ b/csharp/ql/lib/upgrades/21ede72308c41493f19b37720d8259d5eb307f12/semmlecode.csharp.dbscheme @@ -0,0 +1,2099 @@ +/* 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 +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: 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 expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_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 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 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 +| 34 = @inline_array_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 | @void_type | @inline_array_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); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +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, params/array = 3, this = 4, in = 5, ref readonly = 6 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** 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 = @utf16_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 +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_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; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_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_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); + +/* Compiler generated */ + +compiler_generated(unique int id: @element 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_field | @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; + +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/ql/lib/upgrades/21ede72308c41493f19b37720d8259d5eb307f12/upgrade.properties b/csharp/ql/lib/upgrades/21ede72308c41493f19b37720d8259d5eb307f12/upgrade.properties new file mode 100644 index 00000000000..51773d6cc81 --- /dev/null +++ b/csharp/ql/lib/upgrades/21ede72308c41493f19b37720d8259d5eb307f12/upgrade.properties @@ -0,0 +1,2 @@ +description: Extract `ref readonly` parameters as having `mode` 6 in the params table. +compatibility: backwards diff --git a/csharp/ql/src/Security Features/CWE-078/StoredCommandInjection.qhelp b/csharp/ql/src/Security Features/CWE-078/StoredCommandInjection.qhelp deleted file mode 100644 index c9b2874372b..00000000000 --- a/csharp/ql/src/Security Features/CWE-078/StoredCommandInjection.qhelp +++ /dev/null @@ -1,6 +0,0 @@ - - - - diff --git a/csharp/ql/src/Security Features/CWE-078/StoredCommandInjection.ql b/csharp/ql/src/Security Features/CWE-078/StoredCommandInjection.ql deleted file mode 100644 index 5f728db8473..00000000000 --- a/csharp/ql/src/Security Features/CWE-078/StoredCommandInjection.ql +++ /dev/null @@ -1,34 +0,0 @@ -/** - * @name Uncontrolled command line from stored user input - * @description Using externally controlled strings in a command line may allow a malicious - * user to change the meaning of the command. - * @kind path-problem - * @problem.severity error - * @security-severity 9.8 - * @precision medium - * @id cs/stored-command-line-injection - * @tags correctness - * security - * external/cwe/cwe-078 - * external/cwe/cwe-088 - */ - -import csharp -import semmle.code.csharp.security.dataflow.flowsources.Stored -import semmle.code.csharp.security.dataflow.CommandInjectionQuery -import StoredCommandInjection::PathGraph - -module StoredCommandInjectionConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source instanceof StoredFlowSource } - - predicate isSink = CommandInjectionConfig::isSink/1; - - predicate isBarrier = CommandInjectionConfig::isBarrier/1; -} - -module StoredCommandInjection = TaintTracking::Global; - -from StoredCommandInjection::PathNode source, StoredCommandInjection::PathNode sink -where StoredCommandInjection::flowPath(source, sink) -select sink.getNode(), source, sink, "This command line depends on a $@.", source.getNode(), - "stored (potentially user-provided) value" diff --git a/csharp/ql/src/Security Features/CWE-079/StoredXSS.qhelp b/csharp/ql/src/Security Features/CWE-079/StoredXSS.qhelp deleted file mode 100644 index 8bd2e14ef08..00000000000 --- a/csharp/ql/src/Security Features/CWE-079/StoredXSS.qhelp +++ /dev/null @@ -1,6 +0,0 @@ - - - - diff --git a/csharp/ql/src/Security Features/CWE-079/StoredXSS.ql b/csharp/ql/src/Security Features/CWE-079/StoredXSS.ql deleted file mode 100644 index 140dedfec51..00000000000 --- a/csharp/ql/src/Security Features/CWE-079/StoredXSS.ql +++ /dev/null @@ -1,39 +0,0 @@ -/** - * @name Stored cross-site scripting - * @description Writing input from the database directly to a web page indicates a cross-site - * scripting vulnerability if the data was originally user-provided. - * @kind path-problem - * @problem.severity error - * @security-severity 6.1 - * @precision medium - * @id cs/web/stored-xss - * @tags security - * external/cwe/cwe-079 - * external/cwe/cwe-116 - */ - -import csharp -import semmle.code.csharp.security.dataflow.flowsources.Stored -import semmle.code.csharp.security.dataflow.XSSQuery -import semmle.code.csharp.security.dataflow.XSSSinks -import StoredXss::PathGraph - -module StoredXssTrackingConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source instanceof StoredFlowSource } - - predicate isSink = XssTrackingConfig::isSink/1; - - predicate isBarrier = XssTrackingConfig::isBarrier/1; -} - -module StoredXss = TaintTracking::Global; - -from StoredXss::PathNode source, StoredXss::PathNode sink, string explanation -where - StoredXss::flowPath(source, sink) and - if exists(sink.getNode().(Sink).explanation()) - then explanation = " (" + sink.getNode().(Sink).explanation() + ")" - else explanation = "" -select sink.getNode(), source, sink, - "This HTML or JavaScript write" + explanation + " depends on a $@.", source.getNode(), - "stored (potentially user-provided) value" diff --git a/csharp/ql/src/Security Features/CWE-089/SecondOrderSqlInjection.qhelp b/csharp/ql/src/Security Features/CWE-089/SecondOrderSqlInjection.qhelp deleted file mode 100644 index 83ec163ed78..00000000000 --- a/csharp/ql/src/Security Features/CWE-089/SecondOrderSqlInjection.qhelp +++ /dev/null @@ -1,6 +0,0 @@ - - - - diff --git a/csharp/ql/src/Security Features/CWE-089/SecondOrderSqlInjection.ql b/csharp/ql/src/Security Features/CWE-089/SecondOrderSqlInjection.ql deleted file mode 100644 index 33c2479147d..00000000000 --- a/csharp/ql/src/Security Features/CWE-089/SecondOrderSqlInjection.ql +++ /dev/null @@ -1,32 +0,0 @@ -/** - * @name SQL query built from stored user-controlled sources - * @description Building a SQL query from stored user-controlled sources is vulnerable to insertion - * of malicious SQL code by the user. - * @kind path-problem - * @problem.severity error - * @security-severity 8.8 - * @precision medium - * @id cs/second-order-sql-injection - * @tags security - * external/cwe/cwe-089 - */ - -import csharp -import semmle.code.csharp.security.dataflow.SqlInjectionQuery -import semmle.code.csharp.security.dataflow.flowsources.Stored -import StoredSqlInjection::PathGraph - -module StoredSqlInjectionConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source instanceof StoredFlowSource } - - predicate isSink = SqlInjectionConfig::isSink/1; - - predicate isBarrier = SqlInjectionConfig::isBarrier/1; -} - -module StoredSqlInjection = TaintTracking::Global; - -from StoredSqlInjection::PathNode source, StoredSqlInjection::PathNode sink -where StoredSqlInjection::flowPath(source, sink) -select sink.getNode(), source, sink, "This SQL query depends on a $@.", source.getNode(), - "stored user-provided value" diff --git a/csharp/ql/src/Security Features/CWE-089/SqlInjection.ql b/csharp/ql/src/Security Features/CWE-089/SqlInjection.ql index e3fa7f80bd7..d4d1287561f 100644 --- a/csharp/ql/src/Security Features/CWE-089/SqlInjection.ql +++ b/csharp/ql/src/Security Features/CWE-089/SqlInjection.ql @@ -14,14 +14,9 @@ import csharp import semmle.code.csharp.security.dataflow.SqlInjectionQuery import SqlInjection::PathGraph -import semmle.code.csharp.security.dataflow.flowsources.Remote -import semmle.code.csharp.security.dataflow.flowsources.Local +import semmle.code.csharp.security.dataflow.flowsources.FlowSources -string getSourceType(DataFlow::Node node) { - result = node.(RemoteFlowSource).getSourceType() - or - result = node.(LocalFlowSource).getSourceType() -} +string getSourceType(DataFlow::Node node) { result = node.(SourceNode).getSourceType() } from SqlInjection::PathNode source, SqlInjection::PathNode sink where SqlInjection::flowPath(source, sink) diff --git a/csharp/ql/src/Security Features/CWE-090/StoredLDAPInjection.qhelp b/csharp/ql/src/Security Features/CWE-090/StoredLDAPInjection.qhelp deleted file mode 100644 index f547d512fbc..00000000000 --- a/csharp/ql/src/Security Features/CWE-090/StoredLDAPInjection.qhelp +++ /dev/null @@ -1,6 +0,0 @@ - - - - diff --git a/csharp/ql/src/Security Features/CWE-090/StoredLDAPInjection.ql b/csharp/ql/src/Security Features/CWE-090/StoredLDAPInjection.ql deleted file mode 100644 index e5015892fc4..00000000000 --- a/csharp/ql/src/Security Features/CWE-090/StoredLDAPInjection.ql +++ /dev/null @@ -1,32 +0,0 @@ -/** - * @name LDAP query built from stored user-controlled sources - * @description Building an LDAP query from stored user-controlled sources is vulnerable to - * insertion of malicious LDAP code by the user. - * @kind path-problem - * @problem.severity error - * @security-severity 9.8 - * @precision medium - * @id cs/stored-ldap-injection - * @tags security - * external/cwe/cwe-090 - */ - -import csharp -import semmle.code.csharp.security.dataflow.LDAPInjectionQuery -import semmle.code.csharp.security.dataflow.flowsources.Stored -import StoredLdapInjection::PathGraph - -module StoredLdapInjectionConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source instanceof StoredFlowSource } - - predicate isSink = LdapInjectionConfig::isSink/1; - - predicate isBarrier = LdapInjectionConfig::isBarrier/1; -} - -module StoredLdapInjection = TaintTracking::Global; - -from StoredLdapInjection::PathNode source, StoredLdapInjection::PathNode sink -where StoredLdapInjection::flowPath(source, sink) -select sink.getNode(), source, sink, "This LDAP query depends on a $@.", source.getNode(), - "stored (potentially user-provided) value" diff --git a/csharp/ql/src/Security Features/CWE-091/XMLInjection.ql b/csharp/ql/src/Security Features/CWE-091/XMLInjection.ql index 7402a45edde..042e2aa9f17 100644 --- a/csharp/ql/src/Security Features/CWE-091/XMLInjection.ql +++ b/csharp/ql/src/Security Features/CWE-091/XMLInjection.ql @@ -12,7 +12,7 @@ */ import csharp -import semmle.code.csharp.security.dataflow.flowsources.Remote +import semmle.code.csharp.security.dataflow.flowsources.FlowSources import semmle.code.csharp.frameworks.system.Xml import XmlInjection::PathGraph @@ -20,7 +20,7 @@ import XmlInjection::PathGraph * A taint-tracking configuration for untrusted user input used in XML. */ module XmlInjectionConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } + predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } predicate isSink(DataFlow::Node sink) { exists(MethodCall mc | diff --git a/csharp/ql/src/Security Features/CWE-114/AssemblyPathInjection.ql b/csharp/ql/src/Security Features/CWE-114/AssemblyPathInjection.ql index daaaba7517d..9d30366af8f 100644 --- a/csharp/ql/src/Security Features/CWE-114/AssemblyPathInjection.ql +++ b/csharp/ql/src/Security Features/CWE-114/AssemblyPathInjection.ql @@ -13,7 +13,7 @@ */ import csharp -import semmle.code.csharp.security.dataflow.flowsources.Remote +import semmle.code.csharp.security.dataflow.flowsources.FlowSources import semmle.code.csharp.commons.Util import AssemblyPathInjection::PathGraph @@ -21,10 +21,7 @@ import AssemblyPathInjection::PathGraph * A taint-tracking configuration for untrusted user input used to load a DLL. */ module AssemblyPathInjectionConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - source instanceof RemoteFlowSource or - source.asExpr() = any(MainMethod main).getParameter(0).getAnAccess() - } + predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } predicate isSink(DataFlow::Node sink) { exists(MethodCall mc, string name, int arg | diff --git a/csharp/ql/src/Security Features/CWE-134/UncontrolledFormatString.ql b/csharp/ql/src/Security Features/CWE-134/UncontrolledFormatString.ql index e8b9aa0a53f..7eec0bb90c6 100644 --- a/csharp/ql/src/Security Features/CWE-134/UncontrolledFormatString.ql +++ b/csharp/ql/src/Security Features/CWE-134/UncontrolledFormatString.ql @@ -12,17 +12,12 @@ */ import csharp -import semmle.code.csharp.security.dataflow.flowsources.Remote -import semmle.code.csharp.security.dataflow.flowsources.Local +import semmle.code.csharp.security.dataflow.flowsources.FlowSources import semmle.code.csharp.frameworks.Format import FormatString::PathGraph module FormatStringConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - source instanceof RemoteFlowSource - or - source instanceof LocalFlowSource - } + predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } predicate isSink(DataFlow::Node sink) { sink.asExpr() = any(FormatCall call | call.hasInsertions()).getFormatExpr() @@ -31,11 +26,7 @@ module FormatStringConfig implements DataFlow::ConfigSig { module FormatString = TaintTracking::Global; -string getSourceType(DataFlow::Node node) { - result = node.(RemoteFlowSource).getSourceType() - or - result = node.(LocalFlowSource).getSourceType() -} +string getSourceType(DataFlow::Node node) { result = node.(SourceNode).getSourceType() } from FormatString::PathNode source, FormatString::PathNode sink where FormatString::flowPath(source, sink) diff --git a/csharp/ql/src/Security Features/CWE-601/UrlRedirect.qhelp b/csharp/ql/src/Security Features/CWE-601/UrlRedirect.qhelp index c9a1b692b81..80873b1bc1c 100644 --- a/csharp/ql/src/Security Features/CWE-601/UrlRedirect.qhelp +++ b/csharp/ql/src/Security Features/CWE-601/UrlRedirect.qhelp @@ -57,7 +57,7 @@ which is harmless but perhaps not intended. You can substitute your own domain (
  • diff --git a/csharp/ql/src/Security Features/CWE-643/StoredXPathInjection.qhelp b/csharp/ql/src/Security Features/CWE-643/StoredXPathInjection.qhelp deleted file mode 100644 index f705e0bbde9..00000000000 --- a/csharp/ql/src/Security Features/CWE-643/StoredXPathInjection.qhelp +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/csharp/ql/src/Security Features/CWE-643/StoredXPathInjection.ql b/csharp/ql/src/Security Features/CWE-643/StoredXPathInjection.ql deleted file mode 100644 index 3042997ec7a..00000000000 --- a/csharp/ql/src/Security Features/CWE-643/StoredXPathInjection.ql +++ /dev/null @@ -1,32 +0,0 @@ -/** - * @name Stored XPath injection - * @description Building an XPath expression from stored data which may have been provided by the - * user is vulnerable to insertion of malicious code by the user. - * @kind path-problem - * @problem.severity error - * @security-severity 9.8 - * @precision medium - * @id cs/xml/stored-xpath-injection - * @tags security - * external/cwe/cwe-643 - */ - -import csharp -import semmle.code.csharp.security.dataflow.flowsources.Stored -import semmle.code.csharp.security.dataflow.XPathInjectionQuery -import StoredXpathInjection::PathGraph - -module StoredXpathInjectionConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source instanceof StoredFlowSource } - - predicate isSink = XpathInjectionConfig::isSink/1; - - predicate isBarrier = XpathInjectionConfig::isBarrier/1; -} - -module StoredXpathInjection = TaintTracking::Global; - -from StoredXpathInjection::PathNode source, StoredXpathInjection::PathNode sink -where StoredXpathInjection::flowPath(source, sink) -select sink.getNode(), source, sink, "This XPath expression depends on a $@.", source.getNode(), - "stored (potentially user-provided) value" diff --git a/csharp/ql/src/Telemetry/TestLibrary.qll b/csharp/ql/src/Telemetry/TestLibrary.qll index deca6d79bec..f157dd27f92 100644 --- a/csharp/ql/src/Telemetry/TestLibrary.qll +++ b/csharp/ql/src/Telemetry/TestLibrary.qll @@ -1,5 +1,4 @@ private import csharp -private import dotnet pragma[nomagic] private predicate isTestNamespace(Namespace ns) { diff --git a/csharp/ql/src/change-notes/2024-02-06-threat-models.md b/csharp/ql/src/change-notes/2024-02-06-threat-models.md new file mode 100644 index 00000000000..69ac4e4dc17 --- /dev/null +++ b/csharp/ql/src/change-notes/2024-02-06-threat-models.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Most data flow queries that track flow from *remote* flow sources now use the current *threat model* configuration instead. This doesn't lead to any changes in the produced alerts (as the default configuration is *remote* flow sources) unless the threat model configuration is changed. The changed queries are `cs/code-injection`, `cs/command-line-injection`, `cs/user-controlled-bypass`, `cs/count-untrusted-data-external-api`, `cs/untrusted-data-to-external-api`, `cs/ldap-injection`, `cs/log-forging`, `cs/xml/missing-validation`, `cs/redos`, `cs/regex-injection`, `cs/resource-injection`, `cs/sql-injection`, `cs/path-injection`, `cs/unsafe-deserialization-untrusted-input`, `cs/web/unvalidated-url-redirection`, `cs/xml/insecure-dtd-handling`, `cs/xml/xpath-injection`, `cs/web/xss`, and `cs/uncontrolled-format-string`. \ No newline at end of file diff --git a/csharp/ql/src/change-notes/2024-03-06-remove-default-local-sources.md b/csharp/ql/src/change-notes/2024-03-06-remove-default-local-sources.md new file mode 100644 index 00000000000..19494571ad1 --- /dev/null +++ b/csharp/ql/src/change-notes/2024-03-06-remove-default-local-sources.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* Data flow queries that track flow from *local* flow sources now use the current *threat model* configuration instead. This may lead to changes in the produced alerts if the threat model configuration only uses *remote* flow sources. The changed queries are `cs/code-injection`, `cs/resource-injection`, `cs/sql-injection`, and `cs/uncontrolled-format-string`. + diff --git a/csharp/ql/src/change-notes/2024-03-11-remove-stored-query-variants.md b/csharp/ql/src/change-notes/2024-03-11-remove-stored-query-variants.md new file mode 100644 index 00000000000..3ca0b14f7b2 --- /dev/null +++ b/csharp/ql/src/change-notes/2024-03-11-remove-stored-query-variants.md @@ -0,0 +1,5 @@ +--- +category: majorAnalysis +--- +* The `Stored` variants of some queries (`cs/stored-command-line-injection`, `cs/web/stored-xss`, `cs/stored-ldap-injection`, `cs/xml/stored-xpath-injection`, `cs/second-order-sql-injection`) have been removed. If you were using these queries, their results can be restored by enabling the `file` and `database` threat models in your threat model configuration. + diff --git a/csharp/ql/src/experimental/CWE-099/TaintedWebClientLib.qll b/csharp/ql/src/experimental/CWE-099/TaintedWebClientLib.qll index 3810ff6f76a..e3459dfb1ac 100644 --- a/csharp/ql/src/experimental/CWE-099/TaintedWebClientLib.qll +++ b/csharp/ql/src/experimental/CWE-099/TaintedWebClientLib.qll @@ -1,7 +1,7 @@ import csharp import semmle.code.csharp.frameworks.system.Net import semmle.code.csharp.frameworks.System -import semmle.code.csharp.security.dataflow.flowsources.Remote +import semmle.code.csharp.security.dataflow.flowsources.FlowSources import semmle.code.csharp.security.Sanitizers //If this leaves experimental this should probably go in semmle.code.csharp.frameworks.system.Net @@ -68,8 +68,15 @@ private module TaintedWebClientConfig implements DataFlow::ConfigSig { */ module TaintedWebClient = TaintTracking::Global; -/** A source of remote user input. */ -class RemoteSource extends Source instanceof RemoteFlowSource { } +/** + * DEPRECATED: Use `ThreatModelSource` instead. + * + * A source of remote user input. + */ +deprecated class RemoteSource extends DataFlow::Node instanceof RemoteFlowSource { } + +/** A source supported by the current threat model. */ +class ThreatModelSource extends Source instanceof ThreatModelFlowSource { } /** * A path argument to a `WebClient` method call that has an address argument. diff --git a/csharp/ql/src/experimental/CWE-918/RequestForgery.qll b/csharp/ql/src/experimental/CWE-918/RequestForgery.qll index 29d4fa9094b..e1c6875d952 100644 --- a/csharp/ql/src/experimental/CWE-918/RequestForgery.qll +++ b/csharp/ql/src/experimental/CWE-918/RequestForgery.qll @@ -5,7 +5,7 @@ module RequestForgery { import semmle.code.csharp.frameworks.System import semmle.code.csharp.frameworks.system.Web import semmle.code.csharp.frameworks.Format - import semmle.code.csharp.security.dataflow.flowsources.Remote + import semmle.code.csharp.security.dataflow.flowsources.FlowSources /** * A data flow source for server side request forgery vulnerabilities. @@ -91,10 +91,9 @@ module RequestForgery { module RequestForgeryFlow = DataFlow::Global; /** - * A remote data flow source taken as a source - * for Server Side Request Forgery(SSRF) Vulnerabilities. + * A dataflow source for Server Side Request Forgery(SSRF) Vulnerabilities. */ - private class RemoteFlowSourceAsSource extends Source instanceof RemoteFlowSource { } + private class ThreatModelSource extends Source instanceof ThreatModelFlowSource { } /** * An url argument to a `HttpRequestMessage` constructor call diff --git a/csharp/ql/src/experimental/ir/IR.qll b/csharp/ql/src/experimental/ir/IR.qll deleted file mode 100644 index 24eaa1efd85..00000000000 --- a/csharp/ql/src/experimental/ir/IR.qll +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Most queries should operate on the aliased SSA IR, so that's what we expose - * publicly as the "IR". - */ - -import implementation.unaliased_ssa.IR diff --git a/csharp/ql/src/experimental/ir/IRConfiguration.qll b/csharp/ql/src/experimental/ir/IRConfiguration.qll deleted file mode 100644 index b5b7d7de7c2..00000000000 --- a/csharp/ql/src/experimental/ir/IRConfiguration.qll +++ /dev/null @@ -1 +0,0 @@ -import implementation.IRConfiguration diff --git a/csharp/ql/src/experimental/ir/IRConsistency.ql b/csharp/ql/src/experimental/ir/IRConsistency.ql deleted file mode 100644 index 6344b237dfd..00000000000 --- a/csharp/ql/src/experimental/ir/IRConsistency.ql +++ /dev/null @@ -1,8 +0,0 @@ -/** - * @name IR Consistency Check - * @description Performs consistency checks on the Intermediate Representation. This query should have no results. - * @kind table - * @id cs/ir-consistency-check - */ - -import implementation.raw.IRConsistency diff --git a/csharp/ql/src/experimental/ir/PrintIR.ql b/csharp/ql/src/experimental/ir/PrintIR.ql deleted file mode 100644 index 3bc50831fd2..00000000000 --- a/csharp/ql/src/experimental/ir/PrintIR.ql +++ /dev/null @@ -1,8 +0,0 @@ -/** - * @name Print IR - * @description Outputs a representation of the IR graph - * @id cs/print-ir - * @kind graph - */ - -import implementation.unaliased_ssa.PrintIR diff --git a/csharp/ql/src/experimental/ir/PrintIR.qll b/csharp/ql/src/experimental/ir/PrintIR.qll deleted file mode 100644 index 711c134210c..00000000000 --- a/csharp/ql/src/experimental/ir/PrintIR.qll +++ /dev/null @@ -1 +0,0 @@ -import implementation.unaliased_ssa.PrintIR diff --git a/csharp/ql/src/experimental/ir/Util.qll b/csharp/ql/src/experimental/ir/Util.qll deleted file mode 100644 index 77280f5046f..00000000000 --- a/csharp/ql/src/experimental/ir/Util.qll +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Temporary file that has stubs for various functionalities in the IR conversion. - */ - -import csharp - -class ArrayInitWithMod extends ArrayInitializer { - predicate isInitialized(int entry) { entry in [0 .. this.getNumberOfElements() - 1] } - - predicate isValueInitialized(int elementIndex) { - this.isInitialized(elementIndex) and - not exists(this.getElement(elementIndex)) - } -} - -class ObjectInitializerMod extends ObjectInitializer { - private predicate isInitialized(Field field) { - not field.isReadOnly() and // TODO: Is this the only instance whena field can not be init? - this.getAMemberInitializer().getTargetVariable() = field - } - - predicate isValueInitialized(Field field) { - this.isInitialized(field) and - not field = this.getAMemberInitializer().getInitializedMember() - } -} - -// TODO: See if we need to adapt this for C# -abstract class SideEffectFunction extends Callable { - /** - * Holds if the function never reads from memory that was defined before entry to the function. - * This memory could be from global variables, or from other memory that was reachable from a - * pointer that was passed into the function. - */ - abstract predicate neverReadsMemory(); - - /** - * Holds if the function never writes to memory that remains allocated after the function - * returns. This memory could be from global variables, or from other memory that was reachable - * from a pointer that was passed into the function. - */ - abstract predicate neverWritesMemory(); -} diff --git a/csharp/ql/src/experimental/ir/ValueNumbering.qll b/csharp/ql/src/experimental/ir/ValueNumbering.qll deleted file mode 100644 index f6cdc912a12..00000000000 --- a/csharp/ql/src/experimental/ir/ValueNumbering.qll +++ /dev/null @@ -1 +0,0 @@ -import implementation.unaliased_ssa.gvn.ValueNumbering diff --git a/csharp/ql/src/experimental/ir/implementation/EdgeKind.qll b/csharp/ql/src/experimental/ir/implementation/EdgeKind.qll deleted file mode 100644 index 91e1fe03e23..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/EdgeKind.qll +++ /dev/null @@ -1,139 +0,0 @@ -/** - * Provides classes that specify the conditions under which control flows along a given edge. - */ - -private import internal.EdgeKindInternal - -private newtype TEdgeKind = - TGotoEdge() or // Single successor (including fall-through) - TTrueEdge() or // 'true' edge of conditional branch - TFalseEdge() or // 'false' edge of conditional branch - TExceptionEdge() or // Thrown exception - TDefaultEdge() or // 'default' label of switch - TCaseEdge(string minValue, string maxValue) { - // Case label of switch - Language::hasCaseEdge(minValue, maxValue) - } - -/** - * Represents the kind of an edge in the IR control flow graph. Each - * `Instruction` or `IRBlock` has at most one successor of any single - * `EdgeKind`. - */ -abstract class EdgeKind extends TEdgeKind { - /** Gets a textual representation of this edge kind. */ - abstract string toString(); -} - -/** - * A "goto" edge, representing the unconditional successor of an `Instruction` - * or `IRBlock`. - */ -class GotoEdge extends EdgeKind, TGotoEdge { - final override string toString() { result = "Goto" } -} - -/** - * A "true" edge, representing the successor of a conditional branch when the - * condition is non-zero. - */ -class TrueEdge extends EdgeKind, TTrueEdge { - final override string toString() { result = "True" } -} - -/** - * A "false" edge, representing the successor of a conditional branch when the - * condition is zero. - */ -class FalseEdge extends EdgeKind, TFalseEdge { - final override string toString() { result = "False" } -} - -/** - * An "exception" edge, representing the successor of an instruction when that - * instruction's evaluation throws an exception. - */ -class ExceptionEdge extends EdgeKind, TExceptionEdge { - final override string toString() { result = "Exception" } -} - -/** - * A "default" edge, representing the successor of a `Switch` instruction when - * none of the case values matches the condition value. - */ -class DefaultEdge extends EdgeKind, TDefaultEdge { - final override string toString() { result = "Default" } -} - -/** - * A "case" edge, representing the successor of a `Switch` instruction when the - * the condition value matches a corresponding `case` label. - */ -class CaseEdge extends EdgeKind, TCaseEdge { - string minValue; - string maxValue; - - CaseEdge() { this = TCaseEdge(minValue, maxValue) } - - final override string toString() { - if minValue = maxValue - then result = "Case[" + minValue + "]" - else result = "Case[" + minValue + ".." + maxValue + "]" - } - - /** - * Gets the smallest value of the switch expression for which control will flow along this edge. - */ - final string getMinValue() { result = minValue } - - /** - * Gets the largest value of the switch expression for which control will flow along this edge. - */ - final string getMaxValue() { result = maxValue } -} - -/** - * Predicates to access the single instance of each `EdgeKind` class. - */ -module EdgeKind { - /** - * Gets the single instance of the `GotoEdge` class. - */ - GotoEdge gotoEdge() { result = TGotoEdge() } - - /** - * Gets the single instance of the `TrueEdge` class. - */ - TrueEdge trueEdge() { result = TTrueEdge() } - - /** - * Gets the single instance of the `FalseEdge` class. - */ - FalseEdge falseEdge() { result = TFalseEdge() } - - /** - * Gets the single instance of the `ExceptionEdge` class. - */ - ExceptionEdge exceptionEdge() { result = TExceptionEdge() } - - /** - * Gets the single instance of the `DefaultEdge` class. - */ - DefaultEdge defaultEdge() { result = TDefaultEdge() } - - /** - * Gets the `CaseEdge` representing a `case` label with the specified lower and upper bounds. - * For example: - * ``` - * switch (x) { - * case 1: // Edge kind is `caseEdge("1", "1")` - * return x; - * case 2...8: // Edge kind is `caseEdge("2", "8")` - * return x - 1; - * default: // Edge kind is `defaultEdge()` - * return 0; - * } - * ``` - */ - CaseEdge caseEdge(string minValue, string maxValue) { result = TCaseEdge(minValue, maxValue) } -} diff --git a/csharp/ql/src/experimental/ir/implementation/IRConfiguration.qll b/csharp/ql/src/experimental/ir/implementation/IRConfiguration.qll deleted file mode 100644 index 90cdb9e0f5f..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/IRConfiguration.qll +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Module used to configure the IR generation process. - */ - -private import internal.IRConfigurationInternal - -private newtype TIRConfiguration = MkIRConfiguration() - -/** - * The query can extend this class to control which functions have IR generated for them. - */ -class IRConfiguration extends TIRConfiguration { - /** Gets a textual representation of this element. */ - string toString() { result = "IRConfiguration" } - - /** - * Holds if IR should be created for function `func`. By default, holds for all functions. - */ - predicate shouldCreateIRForFunction(Language::Declaration func) { any() } - - /** - * Holds if the strings used as part of an IR dump should be generated for function `func`. - * - * This predicate is overridden in `PrintIR.qll` to avoid the expense of generating a large number - * of debug strings for IR that will not be dumped. We still generate the actual IR for these - * functions, however, to preserve the results of any interprocedural analysis. - */ - predicate shouldEvaluateDebugStringsForFunction(Language::Declaration func) { any() } -} - -private newtype TIREscapeAnalysisConfiguration = MkIREscapeAnalysisConfiguration() - -/** - * The query can extend this class to control what escape analysis is used when generating SSA. - */ -class IREscapeAnalysisConfiguration extends TIREscapeAnalysisConfiguration { - /** Gets a textual representation of this element. */ - string toString() { result = "IREscapeAnalysisConfiguration" } - - /** - * Holds if the escape analysis done by SSA construction should be sound. By default, the SSA is - * built assuming that no variable's address ever escapes. - */ - predicate useSoundEscapeAnalysis() { none() } -} diff --git a/csharp/ql/src/experimental/ir/implementation/IRType.qll b/csharp/ql/src/experimental/ir/implementation/IRType.qll deleted file mode 100644 index 9fbcf8c4a3b..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/IRType.qll +++ /dev/null @@ -1,349 +0,0 @@ -/** - * Minimal, language-neutral type system for the IR. - */ - -private import internal.IRTypeInternal - -cached -private newtype TIRType = - TIRVoidType() or - TIRUnknownType() or - TIRErrorType() { Language::hasErrorType() } or - TIRBooleanType(int byteSize) { Language::hasBooleanType(byteSize) } or - TIRSignedIntegerType(int byteSize) { Language::hasSignedIntegerType(byteSize) } or - TIRUnsignedIntegerType(int byteSize) { Language::hasUnsignedIntegerType(byteSize) } or - TIRFloatingPointType(int byteSize, int base, Language::TypeDomain domain) { - Language::hasFloatingPointType(byteSize, base, domain) - } or - TIRAddressType(int byteSize) { Language::hasAddressType(byteSize) } or - TIRFunctionAddressType(int byteSize) { Language::hasFunctionAddressType(byteSize) } or - TIROpaqueType(Language::OpaqueTypeTag tag, int byteSize) { - Language::hasOpaqueType(tag, byteSize) - } - -/** - * The language-neutral type of an IR `Instruction`, `Operand`, or `IRVariable`. - * The interface to `IRType` and its subclasses is the same across all languages for which the IR - * is supported, so analyses that expect to be used for multiple languages should generally use - * `IRType` rather than a language-specific type. - * - * Many types from the language-specific type system will map to a single canonical `IRType`. Two - * types that map to the same `IRType` are considered equivalent by the IR. As an example, in C++, - * all pointer types map to the same instance of `IRAddressType`. - */ -class IRType extends TIRType { - /** Gets a textual representation of this type. */ - string toString() { none() } - - /** - * Gets a string that uniquely identifies this `IRType`. This string is often the same as the - * result of `IRType.toString()`, but for some types it may be more verbose to ensure uniqueness. - */ - string getIdentityString() { result = this.toString() } - - /** - * Gets the size of the type, in bytes, if known. - * - * This will hold for all `IRType` objects except `IRUnknownType`. - */ - // This predicate is overridden with `pragma[noinline]` in every leaf subclass. - // This allows callers to ask for things like _the_ floating-point type of - // size 4 without getting a join that first finds all types of size 4 and - // _then_ restricts them to floating-point types. - int getByteSize() { none() } - - /** - * Gets a single instance of `LanguageType` that maps to this `IRType`. - */ - Language::LanguageType getCanonicalLanguageType() { none() } -} - -/** - * An unknown type. Generally used to represent results and operands that access an unknown set of - * memory locations, such as the side effects of a function call. - */ -class IRUnknownType extends IRType, TIRUnknownType { - final override string toString() { result = "unknown" } - - final override int getByteSize() { none() } - - final override Language::LanguageType getCanonicalLanguageType() { - result = Language::getCanonicalUnknownType() - } -} - -/** - * A void type, which has no values. Used to represent the result type of an instruction that does - * not produce a result. - */ -class IRVoidType extends IRType, TIRVoidType { - final override string toString() { result = "void" } - - final override int getByteSize() { result = 0 } - - final override Language::LanguageType getCanonicalLanguageType() { - result = Language::getCanonicalVoidType() - } -} - -/** - * An error type. Used when an error in the source code prevents the extractor from determining the - * proper type. - */ -class IRErrorType extends IRType, TIRErrorType { - final override string toString() { result = "error" } - - final override int getByteSize() { result = 0 } - - final override Language::LanguageType getCanonicalLanguageType() { - result = Language::getCanonicalErrorType() - } -} - -private class IRSizedType extends IRType { - int byteSize; - - IRSizedType() { - this = TIRBooleanType(byteSize) or - this = TIRSignedIntegerType(byteSize) or - this = TIRUnsignedIntegerType(byteSize) or - this = TIRFloatingPointType(byteSize, _, _) or - this = TIRAddressType(byteSize) or - this = TIRFunctionAddressType(byteSize) or - this = TIROpaqueType(_, byteSize) - } - // Don't override `getByteSize()` here. The optimizer seems to generate better code when this is - // overridden only in the leaf classes. -} - -/** - * A Boolean type, which can hold the values `true` (non-zero) or `false` (zero). - */ -class IRBooleanType extends IRSizedType, TIRBooleanType { - final override string toString() { result = "bool" + byteSize.toString() } - - final override Language::LanguageType getCanonicalLanguageType() { - result = Language::getCanonicalBooleanType(byteSize) - } - - pragma[noinline] - final override int getByteSize() { result = byteSize } -} - -/** - * A numeric type. This includes `IRSignedIntegerType`, `IRUnsignedIntegerType`, and - * `IRFloatingPointType`. - */ -class IRNumericType extends IRSizedType { - IRNumericType() { - this = TIRSignedIntegerType(byteSize) or - this = TIRUnsignedIntegerType(byteSize) or - this = TIRFloatingPointType(byteSize, _, _) - } - // Don't override `getByteSize()` here. The optimizer seems to generate better code when this is - // overridden only in the leaf classes. -} - -/** - * An integer type. This includes `IRSignedIntegerType` and `IRUnsignedIntegerType`. - */ -class IRIntegerType extends IRNumericType { - IRIntegerType() { - this = TIRSignedIntegerType(byteSize) or - this = TIRUnsignedIntegerType(byteSize) - } - - /** Holds if this integer type is signed. */ - predicate isSigned() { none() } - - /** Holds if this integer type is unsigned. */ - predicate isUnsigned() { none() } - // Don't override `getByteSize()` here. The optimizer seems to generate better code when this is - // overridden only in the leaf classes. -} - -/** - * A signed two's-complement integer. Also used to represent enums whose underlying type is a signed - * integer, as well as character types whose representation is signed. - */ -class IRSignedIntegerType extends IRIntegerType, TIRSignedIntegerType { - final override string toString() { result = "int" + byteSize.toString() } - - final override Language::LanguageType getCanonicalLanguageType() { - result = Language::getCanonicalSignedIntegerType(byteSize) - } - - pragma[noinline] - final override int getByteSize() { result = byteSize } - - override predicate isSigned() { any() } -} - -/** - * An unsigned two's-complement integer. Also used to represent enums whose underlying type is an - * unsigned integer, as well as character types whose representation is unsigned. - */ -class IRUnsignedIntegerType extends IRIntegerType, TIRUnsignedIntegerType { - final override string toString() { result = "uint" + byteSize.toString() } - - final override Language::LanguageType getCanonicalLanguageType() { - result = Language::getCanonicalUnsignedIntegerType(byteSize) - } - - pragma[noinline] - final override int getByteSize() { result = byteSize } - - override predicate isUnsigned() { any() } -} - -/** - * A floating-point type. - */ -class IRFloatingPointType extends IRNumericType, TIRFloatingPointType { - final private int base; - final private Language::TypeDomain domain; - - IRFloatingPointType() { this = TIRFloatingPointType(_, base, domain) } - - final override string toString() { - result = this.getDomainPrefix() + this.getBaseString() + byteSize.toString() - } - - final override Language::LanguageType getCanonicalLanguageType() { - result = Language::getCanonicalFloatingPointType(byteSize, base, domain) - } - - pragma[noinline] - final override int getByteSize() { result = byteSize } - - /** Gets the numeric base of the type. Can be either 2 (binary) or 10 (decimal). */ - final int getBase() { result = base } - - /** - * Gets the type domain of the type. Can be `RealDomain`, `ComplexDomain`, or `ImaginaryDomain`. - */ - final Language::TypeDomain getDomain() { result = domain } - - private string getBaseString() { - base = 2 and result = "float" - or - base = 10 and result = "decimal" - } - - private string getDomainPrefix() { - domain instanceof Language::RealDomain and result = "" - or - domain instanceof Language::ComplexDomain and result = "c" - or - domain instanceof Language::ImaginaryDomain and result = "i" - } -} - -/** - * An address type, representing the memory address of data. Used to represent pointers, references, - * and lvalues, include those that are garbage collected. - * - * The address of a function is represented by the separate `IRFunctionAddressType`. - */ -class IRAddressType extends IRSizedType, TIRAddressType { - final override string toString() { result = "addr" + byteSize.toString() } - - final override Language::LanguageType getCanonicalLanguageType() { - result = Language::getCanonicalAddressType(byteSize) - } - - pragma[noinline] - final override int getByteSize() { result = byteSize } -} - -/** - * An address type, representing the memory address of code. Used to represent function pointers, - * function references, and the target of a direct function call. - */ -class IRFunctionAddressType extends IRSizedType, TIRFunctionAddressType { - final override string toString() { result = "func" + byteSize.toString() } - - final override Language::LanguageType getCanonicalLanguageType() { - result = Language::getCanonicalFunctionAddressType(byteSize) - } - - pragma[noinline] - final override int getByteSize() { result = byteSize } -} - -/** - * A type with known size that does not fit any of the other kinds of type. Used to represent - * classes, structs, unions, fixed-size arrays, pointers-to-member, and more. - */ -class IROpaqueType extends IRSizedType, TIROpaqueType { - Language::OpaqueTypeTag tag; - - IROpaqueType() { this = TIROpaqueType(tag, byteSize) } - - final override string toString() { - result = "opaque" + byteSize.toString() + "{" + tag.toString() + "}" - } - - final override string getIdentityString() { - result = "opaque" + byteSize.toString() + "{" + Language::getOpaqueTagIdentityString(tag) + "}" - } - - final override Language::LanguageType getCanonicalLanguageType() { - result = Language::getCanonicalOpaqueType(tag, byteSize) - } - - /** - * Gets the "tag" that differentiates this type from other incompatible opaque types that have the - * same size. - */ - final Language::OpaqueTypeTag getTag() { result = tag } - - pragma[noinline] - final override int getByteSize() { result = byteSize } -} - -/** - * INTERNAL: Do not use. - * Query predicates used to check invariants that should hold for all `IRType` objects. To run all - * consistency queries for the IR, including the ones below, run - * "semmle/code/cpp/IR/IRConsistency.ql". - */ -module IRTypeConsistency { - /** - * Holds if the type has no result for `IRType.getCanonicalLanguageType()`. - */ - query predicate missingCanonicalLanguageType(IRType type, string message) { - not exists(type.getCanonicalLanguageType()) and - message = "Type does not have a canonical `LanguageType`" - } - - /** - * Holds if the type has more than one result for `IRType.getCanonicalLanguageType()`. - */ - query predicate multipleCanonicalLanguageTypes(IRType type, string message) { - strictcount(type.getCanonicalLanguageType()) > 1 and - message = - "Type has multiple canonical `LanguageType`s: " + - concat(type.getCanonicalLanguageType().toString(), ", ") - } - - /** - * Holds if the type has no result for `LanguageType.getIRType()`. - */ - query predicate missingIRType(Language::LanguageType type, string message) { - not exists(type.getIRType()) and - message = "`LanguageType` does not have a corresponding `IRType`." - } - - /** - * Holds if the type has more than one result for `LanguageType.getIRType()`. - */ - query predicate multipleIRTypes(Language::LanguageType type, string message) { - strictcount(type.getIRType()) > 1 and - message = - "`LanguageType` " + type + " has multiple `IRType`s: " + - concat(type.getIRType().toString(), ", ") - } - - import Language::LanguageTypeConsistency -} diff --git a/csharp/ql/src/experimental/ir/implementation/MemoryAccessKind.qll b/csharp/ql/src/experimental/ir/implementation/MemoryAccessKind.qll deleted file mode 100644 index 5e11a310e2f..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/MemoryAccessKind.qll +++ /dev/null @@ -1,101 +0,0 @@ -/** - * Provides classes that describe how a particular `Instruction` or its operands access memory. - */ - -private import IRConfiguration - -private newtype TMemoryAccessKind = - TIndirectMemoryAccess() or - TBufferMemoryAccess() or - TEntireAllocationMemoryAccess() or - TEscapedMemoryAccess() or - TNonLocalMemoryAccess() or - TPhiMemoryAccess() or - TUnmodeledMemoryAccess() or - TChiTotalMemoryAccess() or - TChiPartialMemoryAccess() - -/** - * Describes the set of memory locations memory accessed by a memory operand or - * memory result. - */ -class MemoryAccessKind extends TMemoryAccessKind { - /** Gets a textual representation of this access kind. */ - string toString() { none() } - - /** - * Holds if the operand or result accesses memory pointed to by the `AddressOperand` on the - * same instruction. - */ - predicate usesAddressOperand() { none() } -} - -/** - * The operand or result accesses memory at the address specified by the `AddressOperand` on the - * same instruction. - */ -class IndirectMemoryAccess extends MemoryAccessKind, TIndirectMemoryAccess { - override string toString() { result = "indirect" } - - final override predicate usesAddressOperand() { any() } -} - -/** - * The operand or result accesses memory starting at the address specified by the `AddressOperand` - * on the same instruction, accessing a number of consecutive elements given by the - * `BufferSizeOperand`. - */ -class BufferMemoryAccess extends MemoryAccessKind, TBufferMemoryAccess { - override string toString() { result = "buffer" } - - final override predicate usesAddressOperand() { any() } -} - -/** - * The operand or results accesses all memory in the contiguous allocation that contains the address - * specified by the `AddressOperand` on the same instruction. - */ -class EntireAllocationMemoryAccess extends MemoryAccessKind, TEntireAllocationMemoryAccess { - override string toString() { result = "alloc" } - - final override predicate usesAddressOperand() { any() } -} - -/** - * The operand or result accesses all memory whose address has escaped. - */ -class EscapedMemoryAccess extends MemoryAccessKind, TEscapedMemoryAccess { - override string toString() { result = "escaped" } -} - -/** - * The operand or result access all memory whose address has escaped, other than data on the stack - * frame of the current function. - */ -class NonLocalMemoryAccess extends MemoryAccessKind, TNonLocalMemoryAccess { - override string toString() { result = "nonlocal" } -} - -/** - * The operand is a Phi operand, which accesses the same memory as its - * definition. - */ -class PhiMemoryAccess extends MemoryAccessKind, TPhiMemoryAccess { - override string toString() { result = "phi" } -} - -/** - * The operand is a ChiTotal operand, which accesses the same memory as its - * definition. - */ -class ChiTotalMemoryAccess extends MemoryAccessKind, TChiTotalMemoryAccess { - override string toString() { result = "chi(total)" } -} - -/** - * The operand is a ChiPartial operand, which accesses the same memory as its - * definition. - */ -class ChiPartialMemoryAccess extends MemoryAccessKind, TChiPartialMemoryAccess { - override string toString() { result = "chi(partial)" } -} diff --git a/csharp/ql/src/experimental/ir/implementation/Opcode.qll b/csharp/ql/src/experimental/ir/implementation/Opcode.qll deleted file mode 100644 index c473969467d..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/Opcode.qll +++ /dev/null @@ -1,1272 +0,0 @@ -/** - * Provides `Opcode`s that specify the operation performed by an `Instruction`, as well as metadata - * about those opcodes, such as operand kinds and memory accesses. - */ - -private import internal.OpcodeImports as Imports -private import internal.OperandTag -import Imports::MemoryAccessKind - -private newtype TOpcode = - TNoOp() or - TUninitialized() or - TError() or - TInitializeParameter() or - TInitializeIndirection() or - TInitializeThis() or - TEnterFunction() or - TExitFunction() or - TReturnValue() or - TReturnVoid() or - TReturnIndirection() or - TCopyValue() or - TLoad() or - TStore() or - TAdd() or - TSub() or - TMul() or - TDiv() or - TRem() or - TNegate() or - TShiftLeft() or - TShiftRight() or - TUnsignedShiftRight() or - TBitAnd() or - TBitOr() or - TBitXor() or - TBitComplement() or - TLogicalNot() or - TCompareEQ() or - TCompareNE() or - TCompareLT() or - TCompareGT() or - TCompareLE() or - TCompareGE() or - TPointerAdd() or - TPointerSub() or - TPointerDiff() or - TConvert() or - TConvertToNonVirtualBase() or - TConvertToVirtualBase() or - TConvertToDerived() or - TCheckedConvertOrNull() or - TCheckedConvertOrThrow() or - TCompleteObjectAddress() or - TVariableAddress() or - TFieldAddress() or - TFunctionAddress() or - TVirtualDeleteFunctionAddress() or - TElementsAddress() or - TConstant() or - TStringConstant() or - TConditionalBranch() or - TSwitch() or - TCall() or - TCatchByType() or - TCatchAny() or - TThrowValue() or - TReThrow() or - TUnwind() or - TAliasedDefinition() or - TInitializeNonLocal() or - TAliasedUse() or - TPhi() or - TBuiltIn() or - TVarArgsStart() or - TVarArgsEnd() or - TVarArg() or - TNextVarArg() or - TCallSideEffect() or - TCallReadSideEffect() or - TIndirectReadSideEffect() or - TIndirectMustWriteSideEffect() or - TIndirectMayWriteSideEffect() or - TBufferReadSideEffect() or - TBufferMustWriteSideEffect() or - TBufferMayWriteSideEffect() or - TSizedBufferReadSideEffect() or - TSizedBufferMustWriteSideEffect() or - TSizedBufferMayWriteSideEffect() or - TInitializeDynamicAllocation() or - TChi() or - TInlineAsm() or - TUnreached() or - TNewObj() - -/** - * An opcode that specifies the operation performed by an `Instruction`. - */ -class Opcode extends TOpcode { - /** Gets a textual representation of this element. */ - string toString() { result = "UnknownOpcode" } - - /** - * Gets the kind of memory access performed by this instruction's result. - * Holds only for opcodes with a memory result. - */ - MemoryAccessKind getWriteMemoryAccess() { none() } - - /** - * Gets the kind of memory access performed by this instruction's `MemoryOperand`. Holds only for - * opcodes that read from memory. - */ - MemoryAccessKind getReadMemoryAccess() { none() } - - /** - * Holds if the instruction has an `AddressOperand`. - */ - predicate hasAddressOperand() { none() } - - /** - * Holds if the instruction has a `BufferSizeOperand`. - */ - predicate hasBufferSizeOperand() { none() } - - /** - * Holds if the instruction's write memory access is a `may` write, as opposed to a `must` write. - */ - predicate hasMayWriteMemoryAccess() { none() } - - /** - * Holds if the instruction's read memory access is a `may` read, as opposed to a `must` read. - */ - predicate hasMayReadMemoryAccess() { none() } - - /** - * Holds if the instruction must have an operand with the specified `OperandTag`. - */ - final predicate hasOperand(OperandTag tag) { - this.hasOperandInternal(tag) - or - this.hasAddressOperand() and tag instanceof AddressOperandTag - or - this.hasBufferSizeOperand() and tag instanceof BufferSizeOperandTag - } - - /** - * Holds if the instruction must have an operand with the specified `OperandTag`, ignoring - * `AddressOperandTag` and `BufferSizeOperandTag`. - */ - predicate hasOperandInternal(OperandTag tag) { none() } -} - -/** - * The `Opcode` for a `UnaryInstruction`. - * - * See the `UnaryInstruction` documentation for more details. - */ -abstract class UnaryOpcode extends Opcode { - final override predicate hasOperandInternal(OperandTag tag) { tag instanceof UnaryOperandTag } -} - -/** - * The `Opcode` for a `BinaryInstruction`. - * - * See the `BinaryInstruction` documentation for more details. - */ -abstract class BinaryOpcode extends Opcode { - final override predicate hasOperandInternal(OperandTag tag) { - tag instanceof LeftOperandTag or - tag instanceof RightOperandTag - } -} - -/** - * The `Opcode` for a `PointerArithmeticInstruction`. - * - * See the `PointerArithmeticInstruction` documentation for more details. - */ -abstract class PointerArithmeticOpcode extends BinaryOpcode { } - -/** - * The `Opcode` for a `PointerOffsetInstruction`. - * - * See the `PointerOffsetInstruction` documentation for more details. - */ -abstract class PointerOffsetOpcode extends PointerArithmeticOpcode { } - -/** - * The `Opcode` for an `ArithmeticInstruction`. - * - * See the `ArithmeticInstruction` documentation for more details. - */ -abstract class ArithmeticOpcode extends Opcode { } - -/** - * The `Opcode` for a `BinaryArithmeticInstruction`. - * - * See the `BinaryArithmeticInstruction` documentation for more details. - */ -abstract class BinaryArithmeticOpcode extends BinaryOpcode, ArithmeticOpcode { } - -/** - * The `Opcode` for a `UnaryArithmeticInstruction`. - * - * See the `UnaryArithmeticInstruction` documentation for more details. - */ -abstract class UnaryArithmeticOpcode extends UnaryOpcode, ArithmeticOpcode { } - -/** - * The `Opcode` for a `BitwiseInstruction`. - * - * See the `BitwiseInstruction` documentation for more details. - */ -abstract class BitwiseOpcode extends Opcode { } - -/** - * The `Opcode` for a `BinaryBitwiseInstruction`. - * - * See the `BinaryBitwiseInstruction` documentation for more details. - */ -abstract class BinaryBitwiseOpcode extends BinaryOpcode, BitwiseOpcode { } - -/** - * The `Opcode` for a `UnaryBitwiseInstruction`. - * - * See the `UnaryBitwiseInstruction` documentation for more details. - */ -abstract class UnaryBitwiseOpcode extends UnaryOpcode, BitwiseOpcode { } - -/** - * The `Opcode` for a `CompareInstruction`. - * - * See the `CompareInstruction` documentation for more details. - */ -abstract class CompareOpcode extends BinaryOpcode { } - -/** - * The `Opcode` for a `RelationalInstruction`. - * - * See the `RelationalInstruction` documentation for more details. - */ -abstract class RelationalOpcode extends CompareOpcode { } - -/** - * The `Opcode` for a `CopyInstruction`. - * - * See the `CopyInstruction` documentation for more details. - */ -abstract class CopyOpcode extends Opcode { } - -/** - * The `Opcode` for a `ConvertToBaseInstruction`. - * - * See the `ConvertToBaseInstruction` documentation for more details. - */ -abstract class ConvertToBaseOpcode extends UnaryOpcode { } - -/** - * The `Opcode` for a `ReturnInstruction`. - * - * See the `ReturnInstruction` documentation for more details. - */ -abstract class ReturnOpcode extends Opcode { } - -/** - * The `Opcode` for a `ThrowInstruction`. - * - * See the `ThrowInstruction` documentation for more details. - */ -abstract class ThrowOpcode extends Opcode { } - -/** - * The `Opcode` for a `CatchInstruction`. - * - * See the `CatchInstruction` documentation for more details. - */ -abstract class CatchOpcode extends Opcode { } - -abstract private class OpcodeWithCondition extends Opcode { - final override predicate hasOperandInternal(OperandTag tag) { tag instanceof ConditionOperandTag } -} - -/** - * The `Opcode` for a `BuiltInOperationInstruction`. - * - * See the `BuiltInOperationInstruction` documentation for more details. - */ -abstract class BuiltInOperationOpcode extends Opcode { } - -/** - * The `Opcode` for a `SideEffectInstruction`. - * - * See the `SideEffectInstruction` documentation for more details. - */ -abstract class SideEffectOpcode extends Opcode { } - -/** - * An opcode that accesses a single memory location via an `AddressOperand`. - */ -abstract class IndirectMemoryAccessOpcode extends Opcode { - final override predicate hasAddressOperand() { any() } -} - -/** - * An opcode that writes to a single memory location via an `AddressOperand`. - */ -abstract class IndirectWriteOpcode extends IndirectMemoryAccessOpcode { - final override MemoryAccessKind getWriteMemoryAccess() { result instanceof IndirectMemoryAccess } -} - -/** - * An opcode that reads from a single memory location via an `AddressOperand`. - */ -abstract class IndirectReadOpcode extends IndirectMemoryAccessOpcode { - final override MemoryAccessKind getReadMemoryAccess() { result instanceof IndirectMemoryAccess } -} - -/** - * An opcode that accesses a memory buffer. - */ -abstract class BufferAccessOpcode extends Opcode { - final override predicate hasAddressOperand() { any() } -} - -/** - * An opcode that accesses a memory buffer of unknown size. - */ -abstract class UnsizedBufferAccessOpcode extends BufferAccessOpcode { } - -/** - * An opcode that writes to a memory buffer of unknown size. - */ -abstract class UnsizedBufferWriteOpcode extends UnsizedBufferAccessOpcode { - final override MemoryAccessKind getWriteMemoryAccess() { result instanceof BufferMemoryAccess } -} - -/** - * An opcode that reads from a memory buffer of unknown size. - */ -abstract class UnsizedBufferReadOpcode extends UnsizedBufferAccessOpcode { - final override MemoryAccessKind getReadMemoryAccess() { result instanceof BufferMemoryAccess } -} - -/** - * An opcode that access an entire memory allocation. - */ -abstract class EntireAllocationAccessOpcode extends Opcode { - final override predicate hasAddressOperand() { any() } -} - -/** - * An opcode that write to an entire memory allocation. - */ -abstract class EntireAllocationWriteOpcode extends EntireAllocationAccessOpcode { - final override MemoryAccessKind getWriteMemoryAccess() { - result instanceof EntireAllocationMemoryAccess - } -} - -/** - * An opcode that reads from an entire memory allocation. - */ -abstract class EntireAllocationReadOpcode extends EntireAllocationAccessOpcode { - final override MemoryAccessKind getReadMemoryAccess() { - result instanceof EntireAllocationMemoryAccess - } -} - -/** - * An opcode that accesses a memory buffer whose size is determined by a `BufferSizeOperand`. - */ -abstract class SizedBufferAccessOpcode extends BufferAccessOpcode { - final override predicate hasBufferSizeOperand() { any() } -} - -/** - * An opcode that writes to a memory buffer whose size is determined by a `BufferSizeOperand`. - */ -abstract class SizedBufferWriteOpcode extends SizedBufferAccessOpcode { - final override MemoryAccessKind getWriteMemoryAccess() { - result instanceof BufferMemoryAccess //TODO: SizedBufferMemoryAccess - } -} - -/** - * An opcode that reads from a memory buffer whose size is determined by a `BufferSizeOperand`. - */ -abstract class SizedBufferReadOpcode extends SizedBufferAccessOpcode { - final override MemoryAccessKind getReadMemoryAccess() { - result instanceof BufferMemoryAccess //TODO: SizedBufferMemoryAccess - } -} - -/** - * An opcode that might write to any escaped memory location. - */ -abstract class EscapedWriteOpcode extends Opcode { - final override MemoryAccessKind getWriteMemoryAccess() { result instanceof EscapedMemoryAccess } -} - -/** - * An opcode that might read from any escaped memory location. - */ -abstract class EscapedReadOpcode extends Opcode { - final override MemoryAccessKind getReadMemoryAccess() { result instanceof EscapedMemoryAccess } -} - -/** - * An opcode whose write memory access is a `may` write, as opposed to a `must` write. - */ -abstract class MayWriteOpcode extends Opcode { - final override predicate hasMayWriteMemoryAccess() { any() } -} - -/** - * An opcode whose read memory access is a `may` read, as opposed to a `must` read. - */ -abstract class MayReadOpcode extends Opcode { - final override predicate hasMayReadMemoryAccess() { any() } -} - -/** - * An opcode that reads a value from memory. - */ -abstract class OpcodeWithLoad extends IndirectReadOpcode { - final override predicate hasOperandInternal(OperandTag tag) { tag instanceof LoadOperandTag } -} - -/** - * The `Opcode` for a `ReadSideEffectInstruction`. - * - * See the `ReadSideEffectInstruction` documentation for more details. - */ -abstract class ReadSideEffectOpcode extends SideEffectOpcode { - final override predicate hasOperandInternal(OperandTag tag) { - tag instanceof SideEffectOperandTag - } -} - -/** - * The `Opcode` for a `WriteSideEffectInstruction`. - * - * See the `WriteSideEffectInstruction` documentation for more details. - */ -abstract class WriteSideEffectOpcode extends SideEffectOpcode { } - -/** - * Provides `Opcode`s that specify the operation performed by an `Instruction`. - */ -module Opcode { - /** - * The `Opcode` for a `NoOpInstruction`. - * - * See the `NoOpInstruction` documentation for more details. - */ - class NoOp extends Opcode, TNoOp { - final override string toString() { result = "NoOp" } - } - - /** - * The `Opcode` for an `UninitializedInstruction`. - * - * See the `UninitializedInstruction` documentation for more details. - */ - class Uninitialized extends IndirectWriteOpcode, TUninitialized { - final override string toString() { result = "Uninitialized" } - } - - /** - * The `Opcode` for an `ErrorInstruction`. - * - * See the `ErrorInstruction` documentation for more details. - */ - class Error extends Opcode, TError { - final override string toString() { result = "Error" } - } - - /** - * The `Opcode` for an `InitializeParameterInstruction`. - * - * See the `InitializeParameterInstruction` documentation for more details. - */ - class InitializeParameter extends IndirectWriteOpcode, TInitializeParameter { - final override string toString() { result = "InitializeParameter" } - } - - /** - * The `Opcode` for an `InitializeIndirectionInstruction`. - * - * See the `InitializeIndirectionInstruction` documentation for more details. - */ - class InitializeIndirection extends EntireAllocationWriteOpcode, TInitializeIndirection { - final override string toString() { result = "InitializeIndirection" } - } - - /** - * The `Opcode` for an `InitializeThisInstruction`. - * - * See the `InitializeThisInstruction` documentation for more details. - */ - class InitializeThis extends Opcode, TInitializeThis { - final override string toString() { result = "InitializeThis" } - } - - /** - * The `Opcode` for an `EnterFunctionInstruction`. - * - * See the `EnterFunctionInstruction` documentation for more details. - */ - class EnterFunction extends Opcode, TEnterFunction { - final override string toString() { result = "EnterFunction" } - } - - /** - * The `Opcode` for an `ExitFunctionInstruction`. - * - * See the `ExitFunctionInstruction` documentation for more details. - */ - class ExitFunction extends Opcode, TExitFunction { - final override string toString() { result = "ExitFunction" } - } - - /** - * The `Opcode` for a `ReturnValueInstruction`. - * - * See the `ReturnValueInstruction` documentation for more details. - */ - class ReturnValue extends ReturnOpcode, OpcodeWithLoad, TReturnValue { - final override string toString() { result = "ReturnValue" } - } - - /** - * The `Opcode` for a `ReturnVoidInstruction`. - * - * See the `ReturnVoidInstruction` documentation for more details. - */ - class ReturnVoid extends ReturnOpcode, TReturnVoid { - final override string toString() { result = "ReturnVoid" } - } - - /** - * The `Opcode` for a `ReturnIndirectionInstruction`. - * - * See the `ReturnIndirectionInstruction` documentation for more details. - */ - class ReturnIndirection extends EntireAllocationReadOpcode, TReturnIndirection { - final override string toString() { result = "ReturnIndirection" } - - final override predicate hasOperandInternal(OperandTag tag) { - tag instanceof SideEffectOperandTag - } - } - - /** - * The `Opcode` for a `CopyValueInstruction`. - * - * See the `CopyValueInstruction` documentation for more details. - */ - class CopyValue extends UnaryOpcode, CopyOpcode, TCopyValue { - final override string toString() { result = "CopyValue" } - } - - /** - * The `Opcode` for a `LoadInstruction`. - * - * See the `LoadInstruction` documentation for more details. - */ - class Load extends CopyOpcode, OpcodeWithLoad, TLoad { - final override string toString() { result = "Load" } - } - - /** - * The `Opcode` for a `StoreInstruction`. - * - * See the `StoreInstruction` documentation for more details. - */ - class Store extends CopyOpcode, IndirectWriteOpcode, TStore { - final override string toString() { result = "Store" } - - final override predicate hasOperandInternal(OperandTag tag) { - tag instanceof StoreValueOperandTag - } - } - - /** - * The `Opcode` for an `AddInstruction`. - * - * See the `AddInstruction` documentation for more details. - */ - class Add extends BinaryArithmeticOpcode, TAdd { - final override string toString() { result = "Add" } - } - - /** - * The `Opcode` for a `SubInstruction`. - * - * See the `SubInstruction` documentation for more details. - */ - class Sub extends BinaryArithmeticOpcode, TSub { - final override string toString() { result = "Sub" } - } - - /** - * The `Opcode` for a `MulInstruction`. - * - * See the `MulInstruction` documentation for more details. - */ - class Mul extends BinaryArithmeticOpcode, TMul { - final override string toString() { result = "Mul" } - } - - /** - * The `Opcode` for a `DivInstruction`. - * - * See the `DivInstruction` documentation for more details. - */ - class Div extends BinaryArithmeticOpcode, TDiv { - final override string toString() { result = "Div" } - } - - /** - * The `Opcode` for a `RemInstruction`. - * - * See the `RemInstruction` documentation for more details. - */ - class Rem extends BinaryArithmeticOpcode, TRem { - final override string toString() { result = "Rem" } - } - - /** - * The `Opcode` for a `NegateInstruction`. - * - * See the `NegateInstruction` documentation for more details. - */ - class Negate extends UnaryArithmeticOpcode, TNegate { - final override string toString() { result = "Negate" } - } - - /** - * The `Opcode` for a `ShiftLeftInstruction`. - * - * See the `ShiftLeftInstruction` documentation for more details. - */ - class ShiftLeft extends BinaryBitwiseOpcode, TShiftLeft { - final override string toString() { result = "ShiftLeft" } - } - - /** - * The `Opcode` for a `ShiftRightInstruction`. - * - * See the `ShiftRightInstruction` documentation for more details. - */ - class ShiftRight extends BinaryBitwiseOpcode, TShiftRight { - 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`. - * - * See the `BitAndInstruction` documentation for more details. - */ - class BitAnd extends BinaryBitwiseOpcode, TBitAnd { - final override string toString() { result = "BitAnd" } - } - - /** - * The `Opcode` for a `BitOrInstruction`. - * - * See the `BitOrInstruction` documentation for more details. - */ - class BitOr extends BinaryBitwiseOpcode, TBitOr { - final override string toString() { result = "BitOr" } - } - - /** - * The `Opcode` for a `BitXorInstruction`. - * - * See the `BitXorInstruction` documentation for more details. - */ - class BitXor extends BinaryBitwiseOpcode, TBitXor { - final override string toString() { result = "BitXor" } - } - - /** - * The `Opcode` for a `BitComplementInstruction`. - * - * See the `BitComplementInstruction` documentation for more details. - */ - class BitComplement extends UnaryBitwiseOpcode, TBitComplement { - final override string toString() { result = "BitComplement" } - } - - /** - * The `Opcode` for a `LogicalNotInstruction`. - * - * See the `LogicalNotInstruction` documentation for more details. - */ - class LogicalNot extends UnaryOpcode, TLogicalNot { - final override string toString() { result = "LogicalNot" } - } - - /** - * The `Opcode` for a `CompareEQInstruction`. - * - * See the `CompareEQInstruction` documentation for more details. - */ - class CompareEQ extends CompareOpcode, TCompareEQ { - final override string toString() { result = "CompareEQ" } - } - - /** - * The `Opcode` for a `CompareNEInstruction`. - * - * See the `CompareNEInstruction` documentation for more details. - */ - class CompareNE extends CompareOpcode, TCompareNE { - final override string toString() { result = "CompareNE" } - } - - /** - * The `Opcode` for a `CompareLTInstruction`. - * - * See the `CompareLTInstruction` documentation for more details. - */ - class CompareLT extends RelationalOpcode, TCompareLT { - final override string toString() { result = "CompareLT" } - } - - /** - * The `Opcode` for a `CompareGTInstruction`. - * - * See the `CompareGTInstruction` documentation for more details. - */ - class CompareGT extends RelationalOpcode, TCompareGT { - final override string toString() { result = "CompareGT" } - } - - /** - * The `Opcode` for a `CompareLEInstruction`. - * - * See the `CompareLEInstruction` documentation for more details. - */ - class CompareLE extends RelationalOpcode, TCompareLE { - final override string toString() { result = "CompareLE" } - } - - /** - * The `Opcode` for a `CompareGEInstruction`. - * - * See the `CompareGEInstruction` documentation for more details. - */ - class CompareGE extends RelationalOpcode, TCompareGE { - final override string toString() { result = "CompareGE" } - } - - /** - * The `Opcode` for a `PointerAddInstruction`. - * - * See the `PointerAddInstruction` documentation for more details. - */ - class PointerAdd extends PointerOffsetOpcode, TPointerAdd { - final override string toString() { result = "PointerAdd" } - } - - /** - * The `Opcode` for a `PointerSubInstruction`. - * - * See the `PointerSubInstruction` documentation for more details. - */ - class PointerSub extends PointerOffsetOpcode, TPointerSub { - final override string toString() { result = "PointerSub" } - } - - /** - * The `Opcode` for a `PointerDiffInstruction`. - * - * See the `PointerDiffInstruction` documentation for more details. - */ - class PointerDiff extends PointerArithmeticOpcode, TPointerDiff { - final override string toString() { result = "PointerDiff" } - } - - /** - * The `Opcode` for a `ConvertInstruction`. - * - * See the `ConvertInstruction` documentation for more details. - */ - class Convert extends UnaryOpcode, TConvert { - final override string toString() { result = "Convert" } - } - - /** - * The `Opcode` for a `ConvertToNonVirtualBaseInstruction`. - * - * See the `ConvertToNonVirtualBaseInstruction` documentation for more details. - */ - class ConvertToNonVirtualBase extends ConvertToBaseOpcode, TConvertToNonVirtualBase { - final override string toString() { result = "ConvertToNonVirtualBase" } - } - - /** - * The `Opcode` for a `ConvertToVirtualBaseInstruction`. - * - * See the `ConvertToVirtualBaseInstruction` documentation for more details. - */ - class ConvertToVirtualBase extends ConvertToBaseOpcode, TConvertToVirtualBase { - final override string toString() { result = "ConvertToVirtualBase" } - } - - /** - * The `Opcode` for a `ConvertToDerivedInstruction`. - * - * See the `ConvertToDerivedInstruction` documentation for more details. - */ - class ConvertToDerived extends UnaryOpcode, TConvertToDerived { - final override string toString() { result = "ConvertToDerived" } - } - - /** - * The `Opcode` for a `CheckedConvertOrNullInstruction`. - * - * See the `CheckedConvertOrNullInstruction` documentation for more details. - */ - class CheckedConvertOrNull extends UnaryOpcode, TCheckedConvertOrNull { - final override string toString() { result = "CheckedConvertOrNull" } - } - - /** - * The `Opcode` for a `CheckedConvertOrThrowInstruction`. - * - * See the `CheckedConvertOrThrowInstruction` documentation for more details. - */ - class CheckedConvertOrThrow extends UnaryOpcode, TCheckedConvertOrThrow { - final override string toString() { result = "CheckedConvertOrThrow" } - } - - /** - * The `Opcode` for a `CompleteObjectAddressInstruction`. - * - * See the `CompleteObjectAddressInstruction` documentation for more details. - */ - class CompleteObjectAddress extends UnaryOpcode, TCompleteObjectAddress { - final override string toString() { result = "CompleteObjectAddress" } - } - - /** - * The `Opcode` for a `VariableAddressInstruction`. - * - * See the `VariableAddressInstruction` documentation for more details. - */ - class VariableAddress extends Opcode, TVariableAddress { - final override string toString() { result = "VariableAddress" } - } - - /** - * The `Opcode` for a `FieldAddressInstruction`. - * - * See the `FieldAddressInstruction` documentation for more details. - */ - class FieldAddress extends UnaryOpcode, TFieldAddress { - final override string toString() { result = "FieldAddress" } - } - - /** - * The `Opcode` for an `ElementsAddressInstruction`. - * - * See the `ElementsAddressInstruction` documentation for more details. - */ - class ElementsAddress extends UnaryOpcode, TElementsAddress { - final override string toString() { result = "ElementsAddress" } - } - - /** - * The `Opcode` for a `FunctionAddressInstruction`. - * - * See the `FunctionAddressInstruction` documentation for more details. - */ - class FunctionAddress extends Opcode, TFunctionAddress { - final override string toString() { result = "FunctionAddress" } - } - - /** - * The `Opcode` for a `VirtualDeleteFunctionAddress`. - * - * See the `VirtualDeleteFunctionAddressInstruction` documentation for more details. - */ - class VirtualDeleteFunctionAddress extends Opcode, TVirtualDeleteFunctionAddress { - final override string toString() { result = "VirtualDeleteFunctionAddress" } - } - - /** - * The `Opcode` for a `ConstantInstruction`. - * - * See the `ConstantInstruction` documentation for more details. - */ - class Constant extends Opcode, TConstant { - final override string toString() { result = "Constant" } - } - - /** - * The `Opcode` for a `StringConstantInstruction`. - * - * See the `StringConstantInstruction` documentation for more details. - */ - class StringConstant extends Opcode, TStringConstant { - final override string toString() { result = "StringConstant" } - } - - /** - * The `Opcode` for a `ConditionalBranchInstruction`. - * - * See the `ConditionalBranchInstruction` documentation for more details. - */ - class ConditionalBranch extends OpcodeWithCondition, TConditionalBranch { - final override string toString() { result = "ConditionalBranch" } - } - - /** - * The `Opcode` for a `SwitchInstruction`. - * - * See the `SwitchInstruction` documentation for more details. - */ - class Switch extends OpcodeWithCondition, TSwitch { - final override string toString() { result = "Switch" } - } - - /** - * The `Opcode` for a `CallInstruction`. - * - * See the `CallInstruction` documentation for more details. - */ - class Call extends Opcode, TCall { - final override string toString() { result = "Call" } - - final override predicate hasOperandInternal(OperandTag tag) { - tag instanceof CallTargetOperandTag - } - } - - /** - * The `Opcode` for a `CatchByTypeInstruction`. - * - * See the `CatchByTypeInstruction` documentation for more details. - */ - class CatchByType extends CatchOpcode, TCatchByType { - final override string toString() { result = "CatchByType" } - } - - /** - * The `Opcode` for a `CatchAnyInstruction`. - * - * See the `CatchAnyInstruction` documentation for more details. - */ - class CatchAny extends CatchOpcode, TCatchAny { - final override string toString() { result = "CatchAny" } - } - - /** - * The `Opcode` for a `ThrowValueInstruction`. - * - * See the `ThrowValueInstruction` documentation for more details. - */ - class ThrowValue extends ThrowOpcode, OpcodeWithLoad, TThrowValue { - final override string toString() { result = "ThrowValue" } - } - - /** - * The `Opcode` for a `ReThrowInstruction`. - * - * See the `ReThrowInstruction` documentation for more details. - */ - class ReThrow extends ThrowOpcode, TReThrow { - final override string toString() { result = "ReThrow" } - } - - /** - * The `Opcode` for an `UnwindInstruction`. - * - * See the `UnwindInstruction` documentation for more details. - */ - class Unwind extends Opcode, TUnwind { - final override string toString() { result = "Unwind" } - } - - /** - * The `Opcode` for an `AliasedDefinitionInstruction`. - * - * See the `AliasedDefinitionInstruction` documentation for more details. - */ - class AliasedDefinition extends Opcode, TAliasedDefinition { - final override string toString() { result = "AliasedDefinition" } - - final override MemoryAccessKind getWriteMemoryAccess() { result instanceof EscapedMemoryAccess } - } - - /** - * The `Opcode` for an `InitializeNonLocalInstruction`. - * - * See the `InitializeNonLocalInstruction` documentation for more details. - */ - class InitializeNonLocal extends Opcode, TInitializeNonLocal { - final override string toString() { result = "InitializeNonLocal" } - - final override MemoryAccessKind getWriteMemoryAccess() { - result instanceof NonLocalMemoryAccess - } - } - - /** - * The `Opcode` for an `AliasedUseInstruction`. - * - * See the `AliasedUseInstruction` documentation for more details. - */ - class AliasedUse extends Opcode, TAliasedUse { - final override string toString() { result = "AliasedUse" } - - final override MemoryAccessKind getReadMemoryAccess() { result instanceof NonLocalMemoryAccess } - - final override predicate hasOperandInternal(OperandTag tag) { - tag instanceof SideEffectOperandTag - } - } - - /** - * The `Opcode` for a `PhiInstruction`. - * - * See the `PhiInstruction` documentation for more details. - */ - class Phi extends Opcode, TPhi { - final override string toString() { result = "Phi" } - - final override MemoryAccessKind getWriteMemoryAccess() { result instanceof PhiMemoryAccess } - } - - /** - * The `Opcode` for a `BuiltInInstruction`. - * - * See the `BuiltInInstruction` documentation for more details. - */ - class BuiltIn extends BuiltInOperationOpcode, TBuiltIn { - final override string toString() { result = "BuiltIn" } - } - - /** - * The `Opcode` for a `VarArgsStartInstruction`. - * - * See the `VarArgsStartInstruction` documentation for more details. - */ - class VarArgsStart extends UnaryOpcode, TVarArgsStart { - final override string toString() { result = "VarArgsStart" } - } - - /** - * The `Opcode` for a `VarArgsEndInstruction`. - * - * See the `VarArgsEndInstruction` documentation for more details. - */ - class VarArgsEnd extends UnaryOpcode, TVarArgsEnd { - final override string toString() { result = "VarArgsEnd" } - } - - /** - * The `Opcode` for a `VarArgInstruction`. - * - * See the `VarArgInstruction` documentation for more details. - */ - class VarArg extends UnaryOpcode, TVarArg { - final override string toString() { result = "VarArg" } - } - - /** - * The `Opcode` for a `NextVarArgInstruction`. - * - * See the `NextVarArgInstruction` documentation for more details. - */ - class NextVarArg extends UnaryOpcode, TNextVarArg { - final override string toString() { result = "NextVarArg" } - } - - /** - * The `Opcode` for a `CallSideEffectInstruction`. - * - * See the `CallSideEffectInstruction` documentation for more details. - */ - class CallSideEffect extends WriteSideEffectOpcode, EscapedWriteOpcode, MayWriteOpcode, - ReadSideEffectOpcode, EscapedReadOpcode, MayReadOpcode, TCallSideEffect - { - final override string toString() { result = "CallSideEffect" } - } - - /** - * The `Opcode` for a `CallReadSideEffectInstruction`. - * - * See the `CallReadSideEffectInstruction` documentation for more details. - */ - class CallReadSideEffect extends ReadSideEffectOpcode, EscapedReadOpcode, MayReadOpcode, - TCallReadSideEffect - { - final override string toString() { result = "CallReadSideEffect" } - } - - /** - * The `Opcode` for an `IndirectReadSideEffectInstruction`. - * - * See the `IndirectReadSideEffectInstruction` documentation for more details. - */ - class IndirectReadSideEffect extends ReadSideEffectOpcode, IndirectReadOpcode, - TIndirectReadSideEffect - { - final override string toString() { result = "IndirectReadSideEffect" } - } - - /** - * The `Opcode` for an `IndirectMustWriteSideEffectInstruction`. - * - * See the `IndirectMustWriteSideEffectInstruction` documentation for more details. - */ - class IndirectMustWriteSideEffect extends WriteSideEffectOpcode, IndirectWriteOpcode, - TIndirectMustWriteSideEffect - { - final override string toString() { result = "IndirectMustWriteSideEffect" } - } - - /** - * The `Opcode` for an `IndirectMayWriteSideEffectInstruction`. - * - * See the `IndirectMayWriteSideEffectInstruction` documentation for more details. - */ - class IndirectMayWriteSideEffect extends WriteSideEffectOpcode, IndirectWriteOpcode, - MayWriteOpcode, TIndirectMayWriteSideEffect - { - final override string toString() { result = "IndirectMayWriteSideEffect" } - } - - /** - * The `Opcode` for a `BufferReadSideEffectInstruction`. - * - * See the `BufferReadSideEffectInstruction` documentation for more details. - */ - class BufferReadSideEffect extends ReadSideEffectOpcode, UnsizedBufferReadOpcode, - TBufferReadSideEffect - { - final override string toString() { result = "BufferReadSideEffect" } - } - - /** - * The `Opcode` for a `BufferMustWriteSideEffectInstruction`. - * - * See the `BufferMustWriteSideEffectInstruction` documentation for more details. - */ - class BufferMustWriteSideEffect extends WriteSideEffectOpcode, UnsizedBufferWriteOpcode, - TBufferMustWriteSideEffect - { - final override string toString() { result = "BufferMustWriteSideEffect" } - } - - /** - * The `Opcode` for a `BufferMayWriteSideEffectInstruction`. - * - * See the `BufferMayWriteSideEffectInstruction` documentation for more details. - */ - class BufferMayWriteSideEffect extends WriteSideEffectOpcode, UnsizedBufferWriteOpcode, - MayWriteOpcode, TBufferMayWriteSideEffect - { - final override string toString() { result = "BufferMayWriteSideEffect" } - } - - /** - * The `Opcode` for a `SizedBufferReadSideEffectInstruction`. - * - * See the `SizedBufferReadSideEffectInstruction` documentation for more details. - */ - class SizedBufferReadSideEffect extends ReadSideEffectOpcode, SizedBufferReadOpcode, - TSizedBufferReadSideEffect - { - final override string toString() { result = "SizedBufferReadSideEffect" } - } - - /** - * The `Opcode` for a `SizedBufferMustWriteSideEffectInstruction`. - * - * See the `SizedBufferMustWriteSideEffectInstruction` documentation for more details. - */ - class SizedBufferMustWriteSideEffect extends WriteSideEffectOpcode, SizedBufferWriteOpcode, - TSizedBufferMustWriteSideEffect - { - final override string toString() { result = "SizedBufferMustWriteSideEffect" } - } - - /** - * The `Opcode` for a `SizedBufferMayWriteSideEffectInstruction`. - * - * See the `SizedBufferMayWriteSideEffectInstruction` documentation for more details. - */ - class SizedBufferMayWriteSideEffect extends WriteSideEffectOpcode, SizedBufferWriteOpcode, - MayWriteOpcode, TSizedBufferMayWriteSideEffect - { - final override string toString() { result = "SizedBufferMayWriteSideEffect" } - } - - /** - * The `Opcode` for an `InitializeDynamicAllocationInstruction`. - * - * See the `InitializeDynamicAllocationInstruction` documentation for more details. - */ - class InitializeDynamicAllocation extends SideEffectOpcode, EntireAllocationWriteOpcode, - TInitializeDynamicAllocation - { - final override string toString() { result = "InitializeDynamicAllocation" } - } - - /** - * The `Opcode` for a `ChiInstruction`. - * - * See the `ChiInstruction` documentation for more details. - */ - class Chi extends Opcode, TChi { - final override string toString() { result = "Chi" } - - final override predicate hasOperandInternal(OperandTag tag) { - tag instanceof ChiTotalOperandTag - or - tag instanceof ChiPartialOperandTag - } - - final override MemoryAccessKind getWriteMemoryAccess() { - result instanceof ChiTotalMemoryAccess - } - } - - /** - * The `Opcode` for an `InlineAsmInstruction`. - * - * See the `InlineAsmInstruction` documentation for more details. - */ - class InlineAsm extends Opcode, EscapedWriteOpcode, MayWriteOpcode, EscapedReadOpcode, - MayReadOpcode, TInlineAsm - { - final override string toString() { result = "InlineAsm" } - - final override predicate hasOperandInternal(OperandTag tag) { - tag instanceof SideEffectOperandTag - } - } - - /** - * The `Opcode` for an `UnreachedInstruction`. - * - * See the `UnreachedInstruction` documentation for more details. - */ - class Unreached extends Opcode, TUnreached { - final override string toString() { result = "Unreached" } - } - - /** - * The `Opcode` for a `NewObjInstruction`. - * - * See the `NewObjInstruction` documentation for more details. - */ - class NewObj extends Opcode, TNewObj { - final override string toString() { result = "NewObj" } - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/TempVariableTag.qll b/csharp/ql/src/experimental/ir/implementation/TempVariableTag.qll deleted file mode 100644 index 5f230de560d..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/TempVariableTag.qll +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Defines the public interface to temporary variable tags, which describe the reason a particular - * `IRTempVariable` was generated. - */ - -private import internal.TempVariableTagInternal -private import Imports::TempVariableTag - -/** - * A reason that a particular IR temporary variable was generated. For example, it could be - * generated to hold the return value of a function, or to hold the result of a `?:` operator - * computed on each branch. The set of possible `TempVariableTag`s is language-dependent. - */ -class TempVariableTag extends TTempVariableTag { - /** Gets a textual representation of this tag. */ - string toString() { result = getTempVariableTagId(this) } -} diff --git a/csharp/ql/src/experimental/ir/implementation/UseSoundEscapeAnalysis.qll b/csharp/ql/src/experimental/ir/implementation/UseSoundEscapeAnalysis.qll deleted file mode 100644 index b9b1dc243b1..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/UseSoundEscapeAnalysis.qll +++ /dev/null @@ -1,9 +0,0 @@ -import IRConfiguration - -/** - * Overrides the default IR configuration to use sound escape analysis, instead of assuming that - * variable addresses never escape. - */ -class SoundEscapeAnalysisConfiguration extends IREscapeAnalysisConfiguration { - override predicate useSoundEscapeAnalysis() { any() } -} diff --git a/csharp/ql/src/experimental/ir/implementation/internal/AliasedSSAStub.qll b/csharp/ql/src/experimental/ir/implementation/internal/AliasedSSAStub.qll deleted file mode 100644 index 1efb7137147..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/internal/AliasedSSAStub.qll +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Provides a stub implementation of the required aliased SSA interface until we implement aliased - * SSA construction for C#. - */ - -private import IRFunctionBase -private import TInstruction - -module Ssa { - class MemoryLocation = boolean; - - predicate hasPhiInstruction(TRawInstruction blockStartInstr, MemoryLocation memoryLocation) { - none() - } - - predicate hasChiInstruction(TRawInstruction primaryInstruction) { none() } - - predicate hasUnreachedInstruction(IRFunctionBase irFunc) { none() } -} diff --git a/csharp/ql/src/experimental/ir/implementation/internal/EdgeKindInternal.qll b/csharp/ql/src/experimental/ir/implementation/internal/EdgeKindInternal.qll deleted file mode 100644 index ebcc9573bce..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/internal/EdgeKindInternal.qll +++ /dev/null @@ -1 +0,0 @@ -import experimental.ir.internal.IRCSharpLanguage as Language diff --git a/csharp/ql/src/experimental/ir/implementation/internal/IRConfigurationInternal.qll b/csharp/ql/src/experimental/ir/implementation/internal/IRConfigurationInternal.qll deleted file mode 100644 index ebcc9573bce..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/internal/IRConfigurationInternal.qll +++ /dev/null @@ -1 +0,0 @@ -import experimental.ir.internal.IRCSharpLanguage as Language diff --git a/csharp/ql/src/experimental/ir/implementation/internal/IRFunctionBase.qll b/csharp/ql/src/experimental/ir/implementation/internal/IRFunctionBase.qll deleted file mode 100644 index 571b0a12f49..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/internal/IRFunctionBase.qll +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Provides a base class, `IRFunctionBase`, for the stage-independent portions of `IRFunction`. - */ - -private import IRFunctionBaseInternal - -private newtype TIRFunction = - TFunctionIRFunction(Language::Function func) { IRConstruction::Raw::functionHasIR(func) } or - TVarInitIRFunction(Language::Variable var) { IRConstruction::Raw::varHasIRFunc(var) } - -/** - * The IR for a function. This base class contains only the predicates that are the same between all - * phases of the IR. Each instantiation of `IRFunction` extends this class. - */ -class IRFunctionBase extends TIRFunction { - Language::Declaration decl; - - IRFunctionBase() { - this = TFunctionIRFunction(decl) - or - this = TVarInitIRFunction(decl) - } - - /** Gets a textual representation of this element. */ - final string toString() { result = "IR: " + decl.toString() } - - /** Gets the function whose IR is represented. */ - final Language::Declaration getFunction() { result = decl } - - /** Gets the location of the function. */ - final Language::Location getLocation() { result = decl.getLocation() } -} diff --git a/csharp/ql/src/experimental/ir/implementation/internal/IRFunctionBaseInternal.qll b/csharp/ql/src/experimental/ir/implementation/internal/IRFunctionBaseInternal.qll deleted file mode 100644 index f2da59bbb1d..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/internal/IRFunctionBaseInternal.qll +++ /dev/null @@ -1,2 +0,0 @@ -import experimental.ir.internal.IRCSharpLanguage as Language -import experimental.ir.implementation.raw.internal.IRConstruction as IRConstruction diff --git a/csharp/ql/src/experimental/ir/implementation/internal/IRTypeInternal.qll b/csharp/ql/src/experimental/ir/implementation/internal/IRTypeInternal.qll deleted file mode 100644 index ebcc9573bce..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/internal/IRTypeInternal.qll +++ /dev/null @@ -1 +0,0 @@ -import experimental.ir.internal.IRCSharpLanguage as Language diff --git a/csharp/ql/src/experimental/ir/implementation/internal/OpcodeImports.qll b/csharp/ql/src/experimental/ir/implementation/internal/OpcodeImports.qll deleted file mode 100644 index 8bacf51d8a2..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/internal/OpcodeImports.qll +++ /dev/null @@ -1 +0,0 @@ -import experimental.ir.implementation.MemoryAccessKind as MemoryAccessKind diff --git a/csharp/ql/src/experimental/ir/implementation/internal/OperandTag.qll b/csharp/ql/src/experimental/ir/implementation/internal/OperandTag.qll deleted file mode 100644 index f2e23b01a13..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/internal/OperandTag.qll +++ /dev/null @@ -1,300 +0,0 @@ -/** - * Defines the set of possible `OperandTag`s, which are used to identify the role each `Operand` - * plays in the evaluation of its `Instruction`. - */ - -private import OperandTagInternal - -private newtype TOperandTag = - TAddressOperand() or - TBufferSizeOperand() or - TSideEffectOperand() or - TLoadOperand() or - TStoreValueOperand() or - TUnaryOperand() or - TLeftOperand() or - TRightOperand() or - TConditionOperand() or - TCallTargetOperand() or - TThisArgumentOperand() or - TPositionalArgumentOperand(int argIndex) { Language::hasPositionalArgIndex(argIndex) } or - TChiTotalOperand() or - TChiPartialOperand() or - TAsmOperand(int index) { Language::hasAsmOperandIndex(index) } - -/** - * Identifies the kind of operand on an instruction. Each `Instruction` has at - * most one operand of any single `OperandTag`. The set of `OperandTag`s used by - * an `Instruction` is determined by the instruction's opcode. - */ -abstract class OperandTag extends TOperandTag { - /** Gets a textual representation of this operand tag */ - abstract string toString(); - - /** - * Gets an integer that represents where this this operand will appear in the operand list of an - * instruction when the IR is printed. - */ - abstract int getSortOrder(); - - /** - * Gets a label that will appear before the operand when the IR is printed. - */ - final string getLabel() { - if this.alwaysPrintLabel() then result = this.getId() + ":" else result = "" - } - - /** - * Gets an identifier that uniquely identifies this operand within its instruction. - */ - abstract string getId(); - - /** - * Holds if the operand should always be prefixed with its label in the dump of its instruction. - */ - predicate alwaysPrintLabel() { none() } -} - -/** - * An operand that consumes a memory result (e.g. the `LoadOperand` on a `Load` instruction). - */ -abstract class MemoryOperandTag extends OperandTag { } - -/** - * An operand that consumes a register (non-memory) result. - */ -abstract class RegisterOperandTag extends OperandTag { } - -/** - * A memory operand whose type may be different from the result type of its definition instruction. - */ -abstract class TypedOperandTag extends MemoryOperandTag { } - -// Note: individual subtypes are listed in the order that the operands should -// appear in the operand list of the instruction when the IR is printed. -/** - * The address operand of an instruction that loads or stores a value from - * memory (e.g. `Load`, `Store`, `InitializeParameter`, `IndirectReadSideEffect`). - */ -class AddressOperandTag extends RegisterOperandTag, TAddressOperand { - final override string toString() { result = "Address" } - - final override int getSortOrder() { result = 0 } - - final override predicate alwaysPrintLabel() { any() } - - final override string getId() { result = "&" } -} - -AddressOperandTag addressOperand() { result = TAddressOperand() } - -/** - * The buffer size operand of an instruction that represents a read or write of - * a buffer. - */ -class BufferSizeOperandTag extends RegisterOperandTag, TBufferSizeOperand { - final override string toString() { result = "BufferSize" } - - final override int getSortOrder() { result = 1 } - - final override string getId() { result = "size" } -} - -BufferSizeOperandTag bufferSizeOperand() { result = TBufferSizeOperand() } - -/** - * The operand representing the read side effect of a `SideEffectInstruction`. - */ -class SideEffectOperandTag extends TypedOperandTag, TSideEffectOperand { - final override string toString() { result = "SideEffect" } - - final override int getSortOrder() { result = 2 } - - final override string getId() { result = "side_effect" } -} - -SideEffectOperandTag sideEffectOperand() { result = TSideEffectOperand() } - -/** - * The source value operand of an instruction that loads a value from memory (e.g. `Load`, - * `ReturnValue`, `ThrowValue`). - */ -class LoadOperandTag extends TypedOperandTag, TLoadOperand { - final override string toString() { result = "Load" } - - final override int getSortOrder() { result = 3 } - - final override string getId() { result = "load" } -} - -LoadOperandTag loadOperand() { result = TLoadOperand() } - -/** - * The source value operand of a `Store` instruction. - */ -class StoreValueOperandTag extends RegisterOperandTag, TStoreValueOperand { - final override string toString() { result = "StoreValue" } - - final override int getSortOrder() { result = 4 } - - final override string getId() { result = "store" } -} - -StoreValueOperandTag storeValueOperand() { result = TStoreValueOperand() } - -/** - * The sole operand of a unary instruction (e.g. `Convert`, `Negate`, `Copy`). - */ -class UnaryOperandTag extends RegisterOperandTag, TUnaryOperand { - final override string toString() { result = "Unary" } - - final override int getSortOrder() { result = 5 } - - final override string getId() { result = "unary" } -} - -UnaryOperandTag unaryOperand() { result = TUnaryOperand() } - -/** - * The left operand of a binary instruction (e.g. `Add`, `CompareEQ`). - */ -class LeftOperandTag extends RegisterOperandTag, TLeftOperand { - final override string toString() { result = "Left" } - - final override int getSortOrder() { result = 6 } - - final override string getId() { result = "left" } -} - -LeftOperandTag leftOperand() { result = TLeftOperand() } - -/** - * The right operand of a binary instruction (e.g. `Add`, `CompareEQ`). - */ -class RightOperandTag extends RegisterOperandTag, TRightOperand { - final override string toString() { result = "Right" } - - final override int getSortOrder() { result = 7 } - - final override string getId() { result = "right" } -} - -RightOperandTag rightOperand() { result = TRightOperand() } - -/** - * The condition operand of a `ConditionalBranch` or `Switch` instruction. - */ -class ConditionOperandTag extends RegisterOperandTag, TConditionOperand { - final override string toString() { result = "Condition" } - - final override int getSortOrder() { result = 8 } - - final override string getId() { result = "cond" } -} - -ConditionOperandTag conditionOperand() { result = TConditionOperand() } - -/** - * The operand representing the target function of an `Call` instruction. - */ -class CallTargetOperandTag extends RegisterOperandTag, TCallTargetOperand { - final override string toString() { result = "CallTarget" } - - final override int getSortOrder() { result = 10 } - - final override predicate alwaysPrintLabel() { any() } - - final override string getId() { result = "func" } -} - -CallTargetOperandTag callTargetOperand() { result = TCallTargetOperand() } - -/** - * An operand representing an argument to a function call. This includes both - * positional arguments (represented by `PositionalArgumentOperand`) and the - * implicit `this` argument, if any (represented by `ThisArgumentOperand`). - */ -abstract class ArgumentOperandTag extends RegisterOperandTag { } - -/** - * An operand representing the implicit 'this' argument to a member function - * call. - */ -class ThisArgumentOperandTag extends ArgumentOperandTag, TThisArgumentOperand { - ThisArgumentOperandTag() { this = TThisArgumentOperand() } - - final override string toString() { result = "Arg(this)" } - - final override int getSortOrder() { result = 11 } - - final override predicate alwaysPrintLabel() { any() } - - final override string getId() { result = "this" } -} - -ThisArgumentOperandTag thisArgumentOperand() { result = TThisArgumentOperand() } - -/** - * An operand representing an argument to a function call. - */ -class PositionalArgumentOperandTag extends ArgumentOperandTag, TPositionalArgumentOperand { - int argIndex; - - PositionalArgumentOperandTag() { this = TPositionalArgumentOperand(argIndex) } - - final override string toString() { result = "Arg(" + argIndex + ")" } - - final override int getSortOrder() { result = 12 + argIndex } - - final override predicate alwaysPrintLabel() { any() } - - final int getArgIndex() { result = argIndex } - - final override string getId() { result = argIndex.toString() } -} - -PositionalArgumentOperandTag positionalArgumentOperand(int argIndex) { - result = TPositionalArgumentOperand(argIndex) -} - -abstract class ChiOperandTag extends MemoryOperandTag { } - -class ChiTotalOperandTag extends ChiOperandTag, TChiTotalOperand { - final override string toString() { result = "ChiTotal" } - - final override int getSortOrder() { result = 13 } - - final override predicate alwaysPrintLabel() { any() } - - final override string getId() { result = "total" } -} - -ChiTotalOperandTag chiTotalOperand() { result = TChiTotalOperand() } - -class ChiPartialOperandTag extends ChiOperandTag, TChiPartialOperand { - final override string toString() { result = "ChiPartial" } - - final override int getSortOrder() { result = 14 } - - final override predicate alwaysPrintLabel() { any() } - - final override string getId() { result = "partial" } -} - -ChiPartialOperandTag chiPartialOperand() { result = TChiPartialOperand() } - -class AsmOperandTag extends RegisterOperandTag, TAsmOperand { - int index; - - AsmOperandTag() { this = TAsmOperand(index) } - - final override string toString() { result = "AsmOperand(" + index + ")" } - - final override int getSortOrder() { result = 15 + index } - - final override predicate alwaysPrintLabel() { any() } - - final override string getId() { result = index.toString() } -} - -AsmOperandTag asmOperand(int index) { result = TAsmOperand(index) } diff --git a/csharp/ql/src/experimental/ir/implementation/internal/OperandTagInternal.qll b/csharp/ql/src/experimental/ir/implementation/internal/OperandTagInternal.qll deleted file mode 100644 index ebcc9573bce..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/internal/OperandTagInternal.qll +++ /dev/null @@ -1 +0,0 @@ -import experimental.ir.internal.IRCSharpLanguage as Language diff --git a/csharp/ql/src/experimental/ir/implementation/internal/TIRVariable.qll b/csharp/ql/src/experimental/ir/implementation/internal/TIRVariable.qll deleted file mode 100644 index fe72263249f..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/internal/TIRVariable.qll +++ /dev/null @@ -1,23 +0,0 @@ -private import TIRVariableInternal -private import Imports::TempVariableTag - -newtype TIRVariable = - TIRUserVariable(Language::Variable var, Language::LanguageType type, Language::Declaration func) { - Construction::hasUserVariable(func, var, type) - } or - TIRTempVariable( - Language::Declaration func, Language::AST ast, TempVariableTag tag, Language::LanguageType type - ) { - Construction::hasTempVariable(func, ast, tag, type) - } or - TIRDynamicInitializationFlag( - Language::Declaration func, Language::Variable var, Language::LanguageType type - ) { - Construction::hasDynamicInitializationFlag(func, var, type) - } or - TIRStringLiteral( - Language::Declaration func, Language::AST ast, Language::LanguageType type, - Language::StringLiteral literal - ) { - Construction::hasStringLiteral(func, ast, type, literal) - } diff --git a/csharp/ql/src/experimental/ir/implementation/internal/TIRVariableInternal.qll b/csharp/ql/src/experimental/ir/implementation/internal/TIRVariableInternal.qll deleted file mode 100644 index e2b2c408a4f..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/internal/TIRVariableInternal.qll +++ /dev/null @@ -1,7 +0,0 @@ -import experimental.ir.internal.IRCSharpLanguage as Language -import experimental.ir.implementation.raw.internal.IRConstruction::Raw as Construction -private import experimental.ir.implementation.TempVariableTag as TempVariableTag_ - -module Imports { - module TempVariableTag = TempVariableTag_; -} diff --git a/csharp/ql/src/experimental/ir/implementation/internal/TInstruction.qll b/csharp/ql/src/experimental/ir/implementation/internal/TInstruction.qll deleted file mode 100644 index bb3eb683653..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/internal/TInstruction.qll +++ /dev/null @@ -1,106 +0,0 @@ -private import TInstructionInternal -private import IRFunctionBase -private import TInstructionImports as Imports -private import Imports::IRType -private import Imports::Opcode - -/** - * An IR instruction. `TInstruction` is shared across all phases of the IR. There are individual - * branches of this type for instructions created directly from the AST (`TRawInstruction`) and for - * instructions added by each stage of SSA construction (`T*PhiInstruction`, `T*ChiInstruction`, - * `T*UnreachedInstruction`). Each stage then defines a `TStageInstruction` type that is a union of - * all of the branches that can appear in that particular stage. The public `Instruction` class for - * each phase extends the `TStageInstruction` type for that stage. - */ -cached -newtype TInstruction = - TRawInstruction( - IRConstruction::Raw::InstructionTag1 tag1, IRConstruction::Raw::InstructionTag2 tag2 - ) { - IRConstruction::Raw::hasInstruction(tag1, tag2) - } or - TRawUnreachedInstruction(IRFunctionBase irFunc) { - IRConstruction::hasUnreachedInstruction(irFunc) - } or - TUnaliasedSsaPhiInstruction( - TRawInstruction blockStartInstr, UnaliasedSsa::Ssa::MemoryLocation memoryLocation - ) { - UnaliasedSsa::Ssa::hasPhiInstruction(blockStartInstr, memoryLocation) - } or - TUnaliasedSsaChiInstruction(TRawInstruction primaryInstruction) { none() } or - TUnaliasedSsaUnreachedInstruction(IRFunctionBase irFunc) { - UnaliasedSsa::Ssa::hasUnreachedInstruction(irFunc) - } or - TAliasedSsaPhiInstruction( - TRawInstruction blockStartInstr, AliasedSsa::Ssa::MemoryLocation memoryLocation - ) { - AliasedSsa::Ssa::hasPhiInstruction(blockStartInstr, memoryLocation) - } or - TAliasedSsaChiInstruction(TRawInstruction primaryInstruction) { - AliasedSsa::Ssa::hasChiInstruction(primaryInstruction) - } or - TAliasedSsaUnreachedInstruction(IRFunctionBase irFunc) { - AliasedSsa::Ssa::hasUnreachedInstruction(irFunc) - } - -/** - * Provides wrappers for the constructors of each branch of `TInstruction` that is used by the - * unaliased SSA stage. - * These wrappers are not parameterized because it is not possible to invoke an IPA constructor via - * a class alias. - */ -module UnaliasedSsaInstructions { - class TPhiInstruction = TUnaliasedSsaPhiInstruction; - - TPhiInstruction phiInstruction( - TRawInstruction blockStartInstr, UnaliasedSsa::Ssa::MemoryLocation memoryLocation - ) { - result = TUnaliasedSsaPhiInstruction(blockStartInstr, memoryLocation) - } - - TRawInstruction reusedPhiInstruction(TRawInstruction blockStartInstr) { none() } - - class TChiInstruction = TUnaliasedSsaChiInstruction; - - TChiInstruction chiInstruction(TRawInstruction primaryInstruction) { - result = TUnaliasedSsaChiInstruction(primaryInstruction) - } - - class TUnreachedInstruction = TUnaliasedSsaUnreachedInstruction; - - TUnreachedInstruction unreachedInstruction(IRFunctionBase irFunc) { - result = TUnaliasedSsaUnreachedInstruction(irFunc) - } -} - -/** - * Provides wrappers for the constructors of each branch of `TInstruction` that is used by the - * aliased SSA stage. - * These wrappers are not parameterized because it is not possible to invoke an IPA constructor via - * a class alias. - */ -module AliasedSsaInstructions { - class TPhiInstruction = TAliasedSsaPhiInstruction or TUnaliasedSsaPhiInstruction; - - TPhiInstruction phiInstruction( - TRawInstruction blockStartInstr, AliasedSsa::Ssa::MemoryLocation memoryLocation - ) { - result = TAliasedSsaPhiInstruction(blockStartInstr, memoryLocation) - } - - TPhiInstruction reusedPhiInstruction(TRawInstruction blockStartInstr) { - result = TUnaliasedSsaPhiInstruction(blockStartInstr, _) - } - - class TChiInstruction = TAliasedSsaChiInstruction; - - TChiInstruction chiInstruction(TRawInstruction primaryInstruction) { - result = TAliasedSsaChiInstruction(primaryInstruction) - } - - class TUnreachedInstruction = TAliasedSsaUnreachedInstruction; - - TUnreachedInstruction unreachedInstruction(IRFunctionBase irFunc) { - result = TAliasedSsaUnreachedInstruction(irFunc) - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/internal/TInstructionImports.qll b/csharp/ql/src/experimental/ir/implementation/internal/TInstructionImports.qll deleted file mode 100644 index 6200f2a2796..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/internal/TInstructionImports.qll +++ /dev/null @@ -1,2 +0,0 @@ -import experimental.ir.implementation.IRType as IRType -import experimental.ir.implementation.Opcode as Opcode diff --git a/csharp/ql/src/experimental/ir/implementation/internal/TInstructionInternal.qll b/csharp/ql/src/experimental/ir/implementation/internal/TInstructionInternal.qll deleted file mode 100644 index 3778e532cef..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/internal/TInstructionInternal.qll +++ /dev/null @@ -1,4 +0,0 @@ -import experimental.ir.internal.IRCSharpLanguage as Language -import experimental.ir.implementation.raw.internal.IRConstruction as IRConstruction -import experimental.ir.implementation.unaliased_ssa.internal.SSAConstruction as UnaliasedSsa -import AliasedSSAStub as AliasedSsa diff --git a/csharp/ql/src/experimental/ir/implementation/internal/TOperand.qll b/csharp/ql/src/experimental/ir/implementation/internal/TOperand.qll deleted file mode 100644 index cf8a6a9b7b1..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/internal/TOperand.qll +++ /dev/null @@ -1,150 +0,0 @@ -private import TInstruction -private import OperandTag -private import experimental.ir.implementation.raw.internal.IRConstruction as RawConstruction -private import experimental.ir.implementation.unaliased_ssa.internal.SSAConstruction as UnaliasedConstruction -private import experimental.ir.implementation.raw.IR as Raw -private import experimental.ir.implementation.unaliased_ssa.IR as Unaliased -private import experimental.ir.internal.Overlap - -/** - * Provides the newtype used to represent operands across all phases of the IR. - */ -private module Internal { - /** - * An IR operand. `TOperand` is shared across all phases of the IR. There are branches of this - * type for operands created directly from the AST (`TRegisterOperand` and `TNonSSAMemoryOperand`), - * for operands computed by each stage of SSA construction (`T*PhiOperand` and - * `TAliasedChiOperand`), and a placehold branch for operands that do not exist in a given - * stage of IR construction (`TNoOperand`). - */ - cached - newtype TOperand = - // RAW - TRegisterOperand(TRawInstruction useInstr, RegisterOperandTag tag, TRawInstruction defInstr) { - defInstr = RawConstruction::getRegisterOperandDefinition(useInstr, tag) and - not RawConstruction::isInCycle(useInstr) and - strictcount(RawConstruction::getRegisterOperandDefinition(useInstr, tag)) = 1 - } or - // Placeholder for Phi and Chi operands in stages that don't have the corresponding instructions - TNoOperand() { none() } or - // Can be "removed" later when there's unreachable code - // These operands can be reused across all three stages. They just get different defs. - TNonSsaMemoryOperand(Raw::Instruction useInstr, MemoryOperandTag tag) { - // Has no definition in raw but will get definitions later - useInstr.getOpcode().hasOperand(tag) - } or - TUnaliasedPhiOperand( - Unaliased::PhiInstruction useInstr, Unaliased::Instruction defInstr, - Unaliased::IRBlock predecessorBlock, Overlap overlap - ) { - defInstr = UnaliasedConstruction::getPhiOperandDefinition(useInstr, predecessorBlock, overlap) - } -} - -/** - * Reexports some branches from `TOperand` so they can be used in stage modules without importing - * `TOperand` itself. - */ -private module Shared { - class TRegisterOperand = Internal::TRegisterOperand; - - /** - * Returns the register operand with the specified parameters. - */ - TRegisterOperand registerOperand( - TRawInstruction useInstr, RegisterOperandTag tag, TRawInstruction defInstr - ) { - result = Internal::TRegisterOperand(useInstr, tag, defInstr) - } - - class TNonSsaMemoryOperand = Internal::TNonSsaMemoryOperand; - - /** - * Returns the non-Phi memory operand with the specified parameters. - */ - TNonSsaMemoryOperand nonSsaMemoryOperand(TRawInstruction useInstr, MemoryOperandTag tag) { - result = Internal::TNonSsaMemoryOperand(useInstr, tag) - } -} - -/** - * Provides wrappers for the constructors of each branch of `TOperand` that is used by the - * raw IR stage. - * These wrappers are not parameterized because it is not possible to invoke an IPA constructor via - * a class alias. - */ -module RawOperands { - import Shared - - class TPhiOperand = Internal::TNoOperand; - - class TChiOperand = Internal::TNoOperand; - - class TNonPhiMemoryOperand = TNonSsaMemoryOperand or TChiOperand; - - /** - * Returns the Phi operand with the specified parameters. - */ - TPhiOperand phiOperand( - Raw::PhiInstruction useInstr, Raw::Instruction defInstr, Raw::IRBlock predecessorBlock, - Overlap overlap - ) { - none() - } - - /** - * Returns the Phi operand with the specified parameters. - */ - TPhiOperand reusedPhiOperand( - Raw::PhiInstruction useInstr, Raw::Instruction defInstr, Raw::IRBlock predecessorBlock, - Overlap overlap - ) { - none() - } - - /** - * Returns the Chi operand with the specified parameters. - */ - TChiOperand chiOperand(Raw::Instruction useInstr, ChiOperandTag tag) { none() } -} - -/** - * Provides wrappers for the constructors of each branch of `TOperand` that is used by the - * unaliased SSA stage. - * These wrappers are not parameterized because it is not possible to invoke an IPA constructor via - * a class alias. - */ -module UnaliasedSsaOperands { - import Shared - - class TPhiOperand = Internal::TUnaliasedPhiOperand; - - class TChiOperand = Internal::TNoOperand; - - class TNonPhiMemoryOperand = TNonSsaMemoryOperand or TChiOperand; - - /** - * Returns the Phi operand with the specified parameters. - */ - TPhiOperand phiOperand( - Unaliased::PhiInstruction useInstr, Unaliased::Instruction defInstr, - Unaliased::IRBlock predecessorBlock, Overlap overlap - ) { - result = Internal::TUnaliasedPhiOperand(useInstr, defInstr, predecessorBlock, overlap) - } - - /** - * Returns the Phi operand with the specified parameters. - */ - TPhiOperand reusedPhiOperand( - Unaliased::PhiInstruction useInstr, Unaliased::Instruction defInstr, - Unaliased::IRBlock predecessorBlock, Overlap overlap - ) { - none() - } - - /** - * Returns the Chi operand with the specified parameters. - */ - TChiOperand chiOperand(Unaliased::Instruction useInstr, ChiOperandTag tag) { none() } -} diff --git a/csharp/ql/src/experimental/ir/implementation/internal/TempVariableTagInternal.qll b/csharp/ql/src/experimental/ir/implementation/internal/TempVariableTagInternal.qll deleted file mode 100644 index 6d9f3e1e2db..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/internal/TempVariableTagInternal.qll +++ /dev/null @@ -1,6 +0,0 @@ -import experimental.ir.internal.IRCSharpLanguage as Language -private import experimental.ir.internal.TempVariableTag as TempVariableTag_ - -module Imports { - module TempVariableTag = TempVariableTag_; -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/IR.qll b/csharp/ql/src/experimental/ir/implementation/raw/IR.qll deleted file mode 100644 index 79873d8366e..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/IR.qll +++ /dev/null @@ -1,92 +0,0 @@ -/** - * Provides classes that describe the Intermediate Representation (IR) of the program. - * - * The IR is a representation of the semantics of the program, with very little dependence on the - * syntax that was used to write the program. For example, in C++, the statements `i += 1;`, `i++`, - * and `++i` all have the same semantic effect, but appear in the AST as three different types of - * `Expr` node. In the IR, all three statements are broken down into a sequence of fundamental - * operations similar to: - * - * ``` - * r1(int*) = VariableAddress[i] // Compute the address of variable `i` - * r2(int) = Load &:r1, m0 // Load the value of `i` - * r3(int) = Constant[1] // An integer constant with the value `1` - * r4(int) = Add r2, r3 // Add `1` to the value of `i` - * r5(int) = Store &r1, r4 // Store the new value back into the variable `i` - * ``` - * - * This allows IR-based analysis to focus on the fundamental operations, rather than having to be - * concerned with the various ways of expressing those operations in source code. - * - * The key classes in the IR are: - * - * - `IRFunction` - Contains the IR for an entire function definition, including all of that - * function's `Instruction`s, `IRBlock`s, and `IRVariables`. - * - `Instruction` - A single operation in the IR. An instruction specifies the operation to be - * performed, the operands that produce the inputs to that operation, and the type of the result - * of the operation. Control flows from an `Instruction` to one of a set of successor - * `Instruction`s. - * - `Operand` - An input value of an `Instruction`. All inputs of an `Instruction` are explicitly - * represented as `Operand`s, even if the input was implicit in the source code. An `Operand` has - * a link to the `Instruction` that consumes its value (its "use") and a link to the `Instruction` - * that produces its value (its "definition"). - * - `IRVariable` - A variable accessed by the IR for a particular function. An `IRVariable` is - * created for each variable directly accessed by the function. In addition, `IRVariable`s are - * created to represent certain temporary storage locations that do not have explicitly declared - * variables in the source code, such as the return value of the function. - * - `IRBlock` - A "basic block" in the control flow graph of a function. An `IRBlock` contains a - * sequence of instructions such that control flow can only enter the block at the first - * instruction, and can only leave the block from the last instruction. - * - `IRType` - The type of a value accessed in the IR. Unlike the `Type` class in the AST, `IRType` - * is language-neutral. For example, in C++, `unsigned int`, `char32_t`, and `wchar_t` might all - * be represented as the `IRType` `uint4`, a four-byte unsigned integer. - */ - -import IRFunction -import Instruction -import IRBlock -import IRVariable -import Operand -private import internal.IRImports as Imports -import Imports::EdgeKind -import Imports::IRType -import Imports::MemoryAccessKind - -private newtype TIRPropertyProvider = MkIRPropertyProvider() - -/** - * A class that provides additional properties to be dumped for IR instructions and blocks when using - * the PrintIR module. Libraries that compute additional facts about IR elements can extend the - * single instance of this class to specify the additional properties computed by the library. - */ -class IRPropertyProvider extends TIRPropertyProvider { - /** Gets a textual representation of this element. */ - string toString() { result = "IRPropertyProvider" } - - /** - * Gets the value of the property named `key` for the specified instruction. - */ - string getInstructionProperty(Instruction instruction, string key) { none() } - - /** - * Gets the value of the property named `key` for the specified block. - */ - string getBlockProperty(IRBlock block, string key) { none() } - - /** - * Gets the value of the property named `key` for the specified operand. - */ - string getOperandProperty(Operand operand, string key) { none() } - - /** - * Holds if the instruction `instr` should be included when printing - * the IR instructions. - */ - predicate shouldPrintInstruction(Instruction instr) { any() } - - /** - * Holds if the operand `operand` should be included when printing the an - * instruction's operand list. - */ - predicate shouldPrintOperand(Operand operand) { any() } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/IRBlock.qll b/csharp/ql/src/experimental/ir/implementation/raw/IRBlock.qll deleted file mode 100644 index 50395db47e7..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/IRBlock.qll +++ /dev/null @@ -1,356 +0,0 @@ -/** - * Provides classes describing basic blocks in the IR of a function. - */ - -private import internal.IRInternal -import Instruction -private import internal.IRBlockImports as Imports -import Imports::EdgeKind -private import Cached - -/** - * Holds if `block` is a block in `func` and `sortOverride`, `sortKey1`, and `sortKey2` are the - * sort keys of the block (derived from its first instruction) - */ -pragma[nomagic] -private predicate blockSortKeys( - IRFunction func, IRBlockBase block, int sortOverride, int sortKey1, int sortKey2 -) { - block.getEnclosingIRFunction() = func and - block.getFirstInstruction().hasSortKeys(sortKey1, sortKey2) and - // Ensure that the block containing `EnterFunction` always comes first. - if block.getFirstInstruction() instanceof EnterFunctionInstruction - then sortOverride = 0 - else sortOverride = 1 -} - -/** - * A basic block in the IR. A basic block consists of a sequence of `Instructions` with the only - * incoming edges at the beginning of the sequence and the only outgoing edges at the end of the - * sequence. - * - * This class does not contain any members that query the predecessor or successor edges of the - * block. This allows different classes that extend `IRBlockBase` to expose different subsets of - * edges (e.g. ignoring unreachable edges). - * - * Most consumers should use the class `IRBlock`. - */ -class IRBlockBase extends TIRBlock { - /** Gets a textual representation of this block. */ - final string toString() { result = getFirstInstruction(this).toString() } - - /** Gets the source location of the first non-`Phi` instruction in this block. */ - final Language::Location getLocation() { result = this.getFirstInstruction().getLocation() } - - /** - * INTERNAL: Do not use. - * - * Gets the zero-based index of the block within its function. - * - * This predicate is used by debugging and printing code only. - */ - int getDisplayIndex() { - exists(IRConfiguration::IRConfiguration config | - config.shouldEvaluateDebugStringsForFunction(this.getEnclosingFunction()) - ) and - exists(IRFunction func | - this = - rank[result + 1](IRBlock funcBlock, int sortOverride, int sortKey1, int sortKey2 | - blockSortKeys(func, funcBlock, sortOverride, sortKey1, sortKey2) - | - funcBlock order by sortOverride, sortKey1, sortKey2 - ) - ) - } - - /** - * Gets the `index`th non-`Phi` instruction in this block. - */ - final Instruction getInstruction(int index) { result = getInstruction(this, index) } - - /** - * Get the `Phi` instructions that appear at the start of this block. - */ - final PhiInstruction getAPhiInstruction() { - Construction::getPhiInstructionBlockStart(result) = this.getFirstInstruction() - } - - /** - * Gets an instruction in this block. This includes `Phi` instructions. - */ - final Instruction getAnInstruction() { - result = this.getInstruction(_) or - result = this.getAPhiInstruction() - } - - /** - * Gets the first non-`Phi` instruction in this block. - */ - final Instruction getFirstInstruction() { result = getFirstInstruction(this) } - - /** - * Gets the last instruction in this block. - */ - final Instruction getLastInstruction() { - result = this.getInstruction(this.getInstructionCount() - 1) - } - - /** - * Gets the number of non-`Phi` instructions in this block. - */ - final int getInstructionCount() { result = getInstructionCount(this) } - - /** - * Gets the `IRFunction` that contains this block. - */ - final IRFunction getEnclosingIRFunction() { - result = getFirstInstruction(this).getEnclosingIRFunction() - } - - /** - * Gets the `Function` that contains this block. - */ - final Language::Declaration getEnclosingFunction() { - result = getFirstInstruction(this).getEnclosingFunction() - } -} - -/** - * A basic block with additional information about its predecessor and successor edges. Each edge - * corresponds to the control flow between the last instruction of one block and the first - * instruction of another block. - */ -class IRBlock extends IRBlockBase { - /** - * Gets a block to which control flows directly from this block. - */ - final IRBlock getASuccessor() { blockSuccessor(this, result) } - - /** - * Gets a block from which control flows directly to this block. - */ - final IRBlock getAPredecessor() { blockSuccessor(result, this) } - - /** - * Gets the block to which control flows directly from this block along an edge of kind `kind`. - */ - final IRBlock getSuccessor(EdgeKind kind) { blockSuccessor(this, result, kind) } - - /** - * Gets the block to which control flows directly from this block along a back edge of kind - * `kind`. - */ - final IRBlock getBackEdgeSuccessor(EdgeKind kind) { backEdgeSuccessor(this, result, kind) } - - /** - * Holds if this block immediately dominates `block`. - * - * Block `A` immediate dominates block `B` if block `A` strictly dominates block `B` and block `B` - * is a direct successor of block `A`. - */ - final predicate immediatelyDominates(IRBlock block) { blockImmediatelyDominates(this, block) } - - /** - * Holds if this block strictly dominates `block`. - * - * Block `A` strictly dominates block `B` if block `A` dominates block `B` and blocks `A` and `B` - * are not the same block. - */ - final predicate strictlyDominates(IRBlock block) { blockImmediatelyDominates+(this, block) } - - /** - * Holds if this block dominates `block`. - * - * Block `A` dominates block `B` if any control flow path from the entry block of the function to - * block `B` must pass through block `A`. A block always dominates itself. - */ - final predicate dominates(IRBlock block) { this.strictlyDominates(block) or this = block } - - /** - * Gets a block on the dominance frontier of this block. - * - * The dominance frontier of block `A` is the set of blocks `B` such that block `A` does not - * dominate block `B`, but block `A` does dominate an immediate predecessor of block `B`. - */ - pragma[noinline] - final IRBlock dominanceFrontier() { - this.getASuccessor() = result and - not this.immediatelyDominates(result) - or - exists(IRBlock prev | result = prev.dominanceFrontier() | - this.immediatelyDominates(prev) and - not this.immediatelyDominates(result) - ) - } - - /** - * Holds if this block immediately post-dominates `block`. - * - * Block `A` immediate post-dominates block `B` if block `A` strictly post-dominates block `B` and - * block `B` is a direct successor of block `A`. - */ - final predicate immediatelyPostDominates(IRBlock block) { - blockImmediatelyPostDominates(this, block) - } - - /** - * Holds if this block strictly post-dominates `block`. - * - * Block `A` strictly post-dominates block `B` if block `A` post-dominates block `B` and blocks `A` - * and `B` are not the same block. - */ - final predicate strictlyPostDominates(IRBlock block) { - blockImmediatelyPostDominates+(this, block) - } - - /** - * Holds if this block is a post-dominator of `block`. - * - * Block `A` post-dominates block `B` if any control flow path from `B` to the exit block of the - * function must pass through block `A`. A block always post-dominates itself. - */ - final predicate postDominates(IRBlock block) { this.strictlyPostDominates(block) or this = block } - - /** - * Gets a block on the post-dominance frontier of this block. - * - * The post-dominance frontier of block `A` is the set of blocks `B` such that block `A` does not - * post-dominate block `B`, but block `A` does post-dominate an immediate successor of block `B`. - */ - pragma[noinline] - final IRBlock postDominanceFrontier() { - this.getAPredecessor() = result and - not this.immediatelyPostDominates(result) - or - exists(IRBlock prev | result = prev.postDominanceFrontier() | - this.immediatelyPostDominates(prev) and - not this.immediatelyPostDominates(result) - ) - } - - /** - * Holds if this block is reachable from the entry block of its function. - */ - final predicate isReachableFromFunctionEntry() { - this = this.getEnclosingIRFunction().getEntryBlock() or - this.getAPredecessor().isReachableFromFunctionEntry() - } -} - -private predicate startsBasicBlock(Instruction instr) { - not instr instanceof PhiInstruction and - not adjacentInBlock(_, instr) -} - -/** Holds if `i2` follows `i1` in a `IRBlock`. */ -private predicate adjacentInBlock(Instruction i1, Instruction i2) { - // - i2 must be the only successor of i1 - i2 = unique(Instruction i | i = i1.getASuccessor()) and - // - i1 must be the only predecessor of i2 - i1 = unique(Instruction i | i.getASuccessor() = i2) and - // - The edge between the two must be a GotoEdge. We just check that one - // exists since we've already checked that it's unique. - exists(GotoEdge edgeKind | exists(i1.getSuccessor(edgeKind))) and - // - The edge must not be a back edge. This means we get the same back edges - // in the basic-block graph as we do in the raw CFG. - not exists(Construction::getInstructionBackEdgeSuccessor(i1, _)) - // This predicate could be simplified to remove one of the `unique`s if we - // were willing to rely on the CFG being well-formed and thus never having - // more than one successor to an instruction that has a `GotoEdge` out of it. -} - -private predicate isEntryBlock(TIRBlock block) { - block = MkIRBlock(any(EnterFunctionInstruction enter)) -} - -cached -private module Cached { - cached - newtype TIRBlock = MkIRBlock(Instruction firstInstr) { startsBasicBlock(firstInstr) } - - /** Holds if `i` is the `index`th instruction the block starting with `first`. */ - private Instruction getInstructionFromFirst(Instruction first, int index) = - shortestDistances(startsBasicBlock/1, adjacentInBlock/2)(first, result, index) - - /** Holds if `i` is the `index`th instruction in `block`. */ - cached - Instruction getInstruction(TIRBlock block, int index) { - result = getInstructionFromFirst(getFirstInstruction(block), index) - } - - cached - int getInstructionCount(TIRBlock block) { result = strictcount(getInstruction(block, _)) } - - cached - predicate blockSuccessor(TIRBlock pred, TIRBlock succ, EdgeKind kind) { - exists(Instruction predLast, Instruction succFirst | - predLast = getInstruction(pred, getInstructionCount(pred) - 1) and - succFirst = predLast.getSuccessor(kind) and - succ = MkIRBlock(succFirst) - ) - } - - pragma[noinline] - private predicate blockIdentity(TIRBlock b1, TIRBlock b2) { b1 = b2 } - - pragma[noopt] - cached - predicate backEdgeSuccessor(TIRBlock pred, TIRBlock succ, EdgeKind kind) { - backEdgeSuccessorRaw(pred, succ, kind) - or - // See the QLDoc on `backEdgeSuccessorRaw`. - exists(TIRBlock pred2 | - // Joining with `blockIdentity` is a performance trick to get - // `forwardEdgeRaw` on the RHS of a join, where it's fast. - blockIdentity(pred, pred2) and - forwardEdgeRaw+(pred, pred2) - ) and - blockSuccessor(pred, succ, kind) - } - - /** - * Holds if there is an edge from `pred` to `succ` that is not a back edge. - */ - private predicate forwardEdgeRaw(TIRBlock pred, TIRBlock succ) { - exists(EdgeKind kind | - blockSuccessor(pred, succ, kind) and - not backEdgeSuccessorRaw(pred, succ, kind) - ) - } - - /** - * Holds if the `kind`-edge from `pred` to `succ` is a back edge according to - * `Construction`. - * - * There could be loops of non-back-edges if there is a flaw in the IR - * construction or back-edge detection, and this could cause non-termination - * of subsequent analysis. To prevent that, a subsequent predicate further - * classifies all edges as back edges if they are involved in a loop of - * non-back-edges. - */ - private predicate backEdgeSuccessorRaw(TIRBlock pred, TIRBlock succ, EdgeKind kind) { - exists(Instruction predLast, Instruction succFirst | - predLast = getInstruction(pred, getInstructionCount(pred) - 1) and - succFirst = Construction::getInstructionBackEdgeSuccessor(predLast, kind) and - succ = MkIRBlock(succFirst) - ) - } - - cached - predicate blockSuccessor(TIRBlock pred, TIRBlock succ) { blockSuccessor(pred, succ, _) } - - cached - predicate blockImmediatelyDominates(TIRBlock dominator, TIRBlock block) = - idominance(isEntryBlock/1, blockSuccessor/2)(_, dominator, block) -} - -private Instruction getFirstInstruction(TIRBlock block) { block = MkIRBlock(result) } - -private predicate blockFunctionExit(IRBlock exit) { - exit.getLastInstruction() instanceof ExitFunctionInstruction -} - -private predicate blockPredecessor(IRBlock src, IRBlock pred) { src.getAPredecessor() = pred } - -private predicate blockImmediatelyPostDominates(IRBlock postDominator, IRBlock block) = - idominance(blockFunctionExit/1, blockPredecessor/2)(_, postDominator, block) diff --git a/csharp/ql/src/experimental/ir/implementation/raw/IRConsistency.ql b/csharp/ql/src/experimental/ir/implementation/raw/IRConsistency.ql deleted file mode 100644 index 342e84a2b5e..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/IRConsistency.ql +++ /dev/null @@ -1,8 +0,0 @@ -/** - * @name Raw IR Consistency Check - * @description Performs consistency checks on the Intermediate Representation. This query should have no results. - * @kind table - * @id cs/raw-ir-consistency-check - */ - -import IRConsistency diff --git a/csharp/ql/src/experimental/ir/implementation/raw/IRConsistency.qll b/csharp/ql/src/experimental/ir/implementation/raw/IRConsistency.qll deleted file mode 100644 index edc785dfabe..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/IRConsistency.qll +++ /dev/null @@ -1,549 +0,0 @@ -private import IR -import InstructionConsistency // module is below -import IRTypeConsistency // module is in IRType.qll -import internal.IRConsistencyImports - -module InstructionConsistency { - private import internal.InstructionImports as Imports - private import Imports::OperandTag - private import Imports::Overlap - private import internal.IRInternal - - private newtype TOptionalIRFunction = - TPresentIRFunction(IRFunction irFunc) or - TMissingIRFunction() - - /** - * An `IRFunction` that might not exist. This is used so that we can produce consistency failures - * for IR that also incorrectly lacks a `getEnclosingIRFunction()`. - */ - abstract private class OptionalIRFunction extends TOptionalIRFunction { - abstract string toString(); - - abstract Language::Location getLocation(); - } - - class PresentIRFunction extends OptionalIRFunction, TPresentIRFunction { - private IRFunction irFunc; - - PresentIRFunction() { this = TPresentIRFunction(irFunc) } - - override string toString() { - result = concat(LanguageDebug::getIdentityString(irFunc.getFunction()), "; ") - } - - override Language::Location getLocation() { - // To avoid an overwhelming number of results when the extractor merges functions with the - // same name, just pick a single location. - result = - min(Language::Location loc | loc = irFunc.getLocation() | loc order by loc.toString()) - } - - IRFunction getIRFunction() { result = irFunc } - } - - private class MissingIRFunction extends OptionalIRFunction, TMissingIRFunction { - override string toString() { result = "" } - - override Language::Location getLocation() { result instanceof Language::UnknownDefaultLocation } - } - - private OptionalIRFunction getInstructionIRFunction(Instruction instr) { - result = TPresentIRFunction(instr.getEnclosingIRFunction()) - or - not exists(instr.getEnclosingIRFunction()) and result = TMissingIRFunction() - } - - pragma[inline] - private OptionalIRFunction getInstructionIRFunction(Instruction instr, string irFuncText) { - result = getInstructionIRFunction(instr) and - irFuncText = result.toString() - } - - private OptionalIRFunction getOperandIRFunction(Operand operand) { - result = TPresentIRFunction(operand.getEnclosingIRFunction()) - or - not exists(operand.getEnclosingIRFunction()) and result = TMissingIRFunction() - } - - pragma[inline] - private OptionalIRFunction getOperandIRFunction(Operand operand, string irFuncText) { - result = getOperandIRFunction(operand) and - irFuncText = result.toString() - } - - private OptionalIRFunction getBlockIRFunction(IRBlock block) { - result = TPresentIRFunction(block.getEnclosingIRFunction()) - or - not exists(block.getEnclosingIRFunction()) and result = TMissingIRFunction() - } - - /** - * Holds if instruction `instr` is missing an expected operand with tag `tag`. - */ - query predicate missingOperand( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(OperandTag tag | - instr.getOpcode().hasOperand(tag) and - not exists(NonPhiOperand operand | - operand = instr.getAnOperand() and - operand.getOperandTag() = tag - ) and - message = - "Instruction '" + instr.getOpcode().toString() + - "' is missing an expected operand with tag '" + tag.toString() + "' in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - /** - * Holds if instruction `instr` has an unexpected operand with tag `tag`. - */ - query predicate unexpectedOperand( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(OperandTag tag | - exists(NonPhiOperand operand | - operand = instr.getAnOperand() and - operand.getOperandTag() = tag - ) and - not instr.getOpcode().hasOperand(tag) and - not (instr instanceof CallInstruction and tag instanceof ArgumentOperandTag) and - not ( - instr instanceof BuiltInOperationInstruction and tag instanceof PositionalArgumentOperandTag - ) and - not (instr instanceof InlineAsmInstruction and tag instanceof AsmOperandTag) and - message = - "Instruction '" + instr.toString() + "' has unexpected operand '" + tag.toString() + - "' in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - /** - * Holds if instruction `instr` has multiple operands with tag `tag`. - */ - query predicate duplicateOperand( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(OperandTag tag, int operandCount | - operandCount = - strictcount(NonPhiOperand operand | - operand = instr.getAnOperand() and - operand.getOperandTag() = tag - ) and - operandCount > 1 and - message = - "Instruction has " + operandCount + " operands with tag '" + tag.toString() + "'" + - " in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - /** - * Holds if `Phi` instruction `instr` is missing an operand corresponding to - * the predecessor block `pred`. - */ - query predicate missingPhiOperand( - PhiInstruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(IRBlock pred | - pred = instr.getBlock().getAPredecessor() and - not exists(PhiInputOperand operand | - operand = instr.getAnOperand() and - operand.getPredecessorBlock() = pred - ) and - message = - "Instruction '" + instr.toString() + "' is missing an operand for predecessor block '" + - pred.toString() + "' in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - query predicate missingOperandType( - Operand operand, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(Instruction use | - not exists(operand.getType()) and - use = operand.getUse() and - message = - "Operand '" + operand.toString() + "' of instruction '" + use.getOpcode().toString() + - "' is missing a type in function '$@'." and - irFunc = getOperandIRFunction(operand, irFuncText) - ) - } - - query predicate duplicateChiOperand( - ChiInstruction chi, string message, OptionalIRFunction irFunc, string irFuncText - ) { - chi.getTotal() = chi.getPartial() and - message = - "Chi instruction for " + chi.getPartial().toString() + - " has duplicate operands in function '$@'." and - irFunc = getInstructionIRFunction(chi, irFuncText) - } - - query predicate sideEffectWithoutPrimary( - SideEffectInstruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - not exists(instr.getPrimaryInstruction()) and - message = - "Side effect instruction '" + instr + "' is missing a primary instruction in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - } - - /** - * Holds if an instruction, other than `ExitFunction`, has no successors. - */ - query predicate instructionWithoutSuccessor( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - not exists(instr.getASuccessor()) and - not instr instanceof ExitFunctionInstruction and - // Phi instructions aren't linked into the instruction-level flow graph. - not instr instanceof PhiInstruction and - not instr instanceof UnreachedInstruction and - message = "Instruction '" + instr.toString() + "' has no successors in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - } - - /** - * Holds if there are multiple edges of the same kind from `source`. - */ - query predicate ambiguousSuccessors( - Instruction source, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(EdgeKind kind, int n | - n = strictcount(Instruction t | source.getSuccessor(kind) = t) and - n > 1 and - message = - "Instruction '" + source.toString() + "' has " + n.toString() + " successors of kind '" + - kind.toString() + "' in function '$@'." and - irFunc = getInstructionIRFunction(source, irFuncText) - ) - } - - /** - * Holds if `instr` is part of a loop even though the AST of `instr`'s enclosing function - * contains no element that can cause loops. - */ - query predicate unexplainedLoop( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(Language::Function f | - exists(IRBlock block | - instr.getBlock() = block and - block.getEnclosingFunction() = f and - block.getASuccessor+() = block - ) and - not Language::hasPotentialLoop(f) and - message = - "Instruction '" + instr.toString() + "' is part of an unexplained loop in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - /** - * Holds if a `Phi` instruction is present in a block with fewer than two - * predecessors. - */ - query predicate unnecessaryPhiInstruction( - PhiInstruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(int n | - n = count(instr.getBlock().getAPredecessor()) and - n < 2 and - message = - "Instruction '" + instr.toString() + "' is in a block with only " + n.toString() + - " predecessors in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - /** - * Holds if a memory operand is connected to a definition with an unmodeled result. - */ - query predicate memoryOperandDefinitionIsUnmodeled( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(MemoryOperand operand, Instruction def | - operand = instr.getAnOperand() and - def = operand.getAnyDef() and - not def.isResultModeled() and - message = - "Memory operand definition on instruction '" + instr.toString() + - "' has unmodeled result in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - /** - * Holds if operand `operand` consumes a value that was defined in - * a different function. - */ - query predicate operandAcrossFunctions( - Operand operand, string message, OptionalIRFunction useIRFunc, string useIRFuncText, - OptionalIRFunction defIRFunc, string defIRFuncText - ) { - exists(Instruction useInstr, Instruction defInstr | - operand.getUse() = useInstr and - operand.getAnyDef() = defInstr and - useIRFunc = getInstructionIRFunction(useInstr, useIRFuncText) and - defIRFunc = getInstructionIRFunction(defInstr, defIRFuncText) and - useIRFunc != defIRFunc and - message = - "Operand '" + operand.toString() + "' is used on instruction '" + useInstr.toString() + - "' in function '$@', but is defined on instruction '" + defInstr.toString() + - "' in function '$@'." - ) - } - - /** - * Holds if instruction `instr` is not in exactly one block. - */ - query predicate instructionWithoutUniqueBlock( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(int blockCount | - blockCount = count(instr.getBlock()) and - blockCount != 1 and - message = - "Instruction '" + instr.toString() + "' is a member of " + blockCount.toString() + - " blocks in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - private predicate forwardEdge(IRBlock b1, IRBlock b2) { - b1.getASuccessor() = b2 and - not b1.getBackEdgeSuccessor(_) = b2 - } - - /** - * Holds if `f` contains a loop in which no edge is a back edge. - * - * This check ensures we don't have too _few_ back edges. - */ - query predicate containsLoopOfForwardEdges(IRFunction f, string message) { - exists(IRBlock block | - forwardEdge+(block, block) and - block.getEnclosingIRFunction() = f and - message = "Function contains a loop consisting of only forward edges." - ) - } - - /** - * Holds if `block` is reachable from its function entry point but would not - * be reachable by traversing only forward edges. This check is skipped for - * functions containing `goto` statements as the property does not generally - * hold there. - * - * This check ensures we don't have too _many_ back edges. - */ - query predicate lostReachability( - IRBlock block, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(IRFunction f, IRBlock entry | - entry = f.getEntryBlock() and - entry.getASuccessor+() = block and - not forwardEdge+(entry, block) and - not Language::hasGoto(f.getFunction()) and - message = - "Block '" + block.toString() + - "' is not reachable by traversing only forward edges in function '$@'." and - irFunc = TPresentIRFunction(f) and - irFuncText = irFunc.toString() - ) - } - - /** - * Holds if the number of back edges differs between the `Instruction` graph - * and the `IRBlock` graph. - */ - query predicate backEdgeCountMismatch(OptionalIRFunction irFunc, string message) { - exists(int fromInstr, int fromBlock | - fromInstr = - count(Instruction i1, Instruction i2 | - getInstructionIRFunction(i1) = irFunc and i1.getBackEdgeSuccessor(_) = i2 - ) and - fromBlock = - count(IRBlock b1, IRBlock b2 | - getBlockIRFunction(b1) = irFunc and b1.getBackEdgeSuccessor(_) = b2 - ) and - fromInstr != fromBlock and - message = - "The instruction graph for function '" + irFunc.toString() + "' contains " + - fromInstr.toString() + " back edges, but the block graph contains " + fromBlock.toString() - + " back edges." - ) - } - - /** - * Gets the point in the function at which the specified operand is evaluated. For most operands, - * this is at the instruction that consumes the use. For a `PhiInputOperand`, the effective point - * of evaluation is at the end of the corresponding predecessor block. - */ - private predicate pointOfEvaluation(Operand operand, IRBlock block, int index) { - block = operand.(PhiInputOperand).getPredecessorBlock() and - index = block.getInstructionCount() - or - exists(Instruction use | - use = operand.(NonPhiOperand).getUse() and - block.getInstruction(index) = use - ) - } - - /** - * Holds if `useOperand` has a definition that does not dominate the use. - */ - query predicate useNotDominatedByDefinition( - Operand useOperand, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(IRBlock useBlock, int useIndex, Instruction defInstr, IRBlock defBlock, int defIndex | - pointOfEvaluation(useOperand, useBlock, useIndex) and - defInstr = useOperand.getAnyDef() and - ( - defInstr instanceof PhiInstruction and - defBlock = defInstr.getBlock() and - defIndex = -1 - or - defBlock.getInstruction(defIndex) = defInstr - ) and - not ( - defBlock.strictlyDominates(useBlock) - or - defBlock = useBlock and - defIndex < useIndex - ) and - message = - "Operand '" + useOperand.toString() + - "' is not dominated by its definition in function '$@'." and - irFunc = getOperandIRFunction(useOperand, irFuncText) - ) - } - - query predicate switchInstructionWithoutDefaultEdge( - SwitchInstruction switchInstr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - not exists(switchInstr.getDefaultSuccessor()) and - message = - "SwitchInstruction " + switchInstr.toString() + " without a DefaultEdge in function '$@'." and - irFunc = getInstructionIRFunction(switchInstr, irFuncText) - } - - /** - * Holds if `instr` is on the chain of chi/phi instructions for all aliased - * memory. - */ - private predicate isOnAliasedDefinitionChain(Instruction instr) { - instr instanceof AliasedDefinitionInstruction - or - isOnAliasedDefinitionChain(instr.(ChiInstruction).getTotal()) - or - isOnAliasedDefinitionChain(instr.(PhiInstruction).getAnInputOperand().getAnyDef()) - } - - private predicate shouldBeConflated(Instruction instr) { - isOnAliasedDefinitionChain(instr) - or - instr.getOpcode() instanceof Opcode::InitializeNonLocal - } - - query predicate notMarkedAsConflated( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - shouldBeConflated(instr) and - not instr.isResultConflated() and - message = - "Instruction '" + instr.toString() + - "' should be marked as having a conflated result in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - } - - query predicate wronglyMarkedAsConflated( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - instr.isResultConflated() and - not shouldBeConflated(instr) and - message = - "Instruction '" + instr.toString() + - "' should not be marked as having a conflated result in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - } - - query predicate invalidOverlap( - MemoryOperand useOperand, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(Overlap overlap | - overlap = useOperand.getDefinitionOverlap() and - overlap instanceof MayPartiallyOverlap and - message = - "MemoryOperand '" + useOperand.toString() + "' has a `getDefinitionOverlap()` of '" + - overlap.toString() + "'." and - irFunc = getOperandIRFunction(useOperand, irFuncText) - ) - } - - query predicate nonUniqueEnclosingIRFunction( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(int irFuncCount | - irFuncCount = count(instr.getEnclosingIRFunction()) and - irFuncCount != 1 and - message = - "Instruction '" + instr.toString() + "' has " + irFuncCount.toString() + - " results for `getEnclosingIRFunction()` in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - /** - * Holds if the object address operand for the given `FieldAddress` instruction does not have an - * address type. - */ - query predicate fieldAddressOnNonPointer( - FieldAddressInstruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - not instr.getObjectAddressOperand().getIRType() instanceof IRAddressType and - message = - "FieldAddress instruction '" + instr.toString() + - "' has an object address operand that is not an address, in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - } - - /** - * Holds if the `this` argument operand for the given `Call` instruction does not have an address - * type. - */ - query predicate thisArgumentIsNonPointer( - CallInstruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(ThisArgumentOperand thisOperand | thisOperand = instr.getThisArgumentOperand() | - not thisOperand.getIRType() instanceof IRAddressType - ) and - message = - "Call instruction '" + instr.toString() + - "' has a `this` argument operand that is not an address, in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - } - - query predicate nonUniqueIRVariable( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(VariableInstruction vi, IRVariable v1, IRVariable v2 | - instr = vi and vi.getIRVariable() = v1 and vi.getIRVariable() = v2 and v1 != v2 - ) and - message = - "Variable instruction '" + instr.toString() + - "' has multiple associated variables, in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - or - instr.getOpcode() instanceof Opcode::VariableAddress and - not instr instanceof VariableInstruction and - message = - "Variable address instruction '" + instr.toString() + - "' has no associated variable, in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/IRFunction.qll b/csharp/ql/src/experimental/ir/implementation/raw/IRFunction.qll deleted file mode 100644 index 354ba41e3d1..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/IRFunction.qll +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Provides the class `IRFunction`, which represents the Intermediate Representation for the - * definition of a function. - */ - -private import internal.IRInternal -private import internal.IRFunctionImports as Imports -import Imports::IRFunctionBase -import Instruction - -/** - * The IR for a function. - */ -class IRFunction extends IRFunctionBase { - /** - * Gets the entry point for this function. - */ - pragma[noinline] - final EnterFunctionInstruction getEnterFunctionInstruction() { - result.getEnclosingIRFunction() = this - } - - /** - * Gets the exit point for this function. - */ - pragma[noinline] - final ExitFunctionInstruction getExitFunctionInstruction() { - result.getEnclosingIRFunction() = this - } - - /** - * Gets the single return instruction for this function. - */ - pragma[noinline] - final ReturnInstruction getReturnInstruction() { result.getEnclosingIRFunction() = this } - - /** - * Gets the variable used to hold the return value of this function. If this - * function does not return a value, this predicate does not hold. - */ - pragma[noinline] - final IRReturnVariable getReturnVariable() { result.getEnclosingIRFunction() = this } - - /** - * Gets the block containing the entry point of this function. - */ - pragma[noinline] - final IRBlock getEntryBlock() { - result.getFirstInstruction() = this.getEnterFunctionInstruction() - } - - /** - * Gets all instructions in this function. - */ - final Instruction getAnInstruction() { result.getEnclosingIRFunction() = this } - - /** - * Gets all blocks in this function. - */ - final IRBlock getABlock() { result.getEnclosingIRFunction() = this } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/IRVariable.qll b/csharp/ql/src/experimental/ir/implementation/raw/IRVariable.qll deleted file mode 100644 index b31c7898ba7..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/IRVariable.qll +++ /dev/null @@ -1,337 +0,0 @@ -/** - * Provides classes that represent variables accessed by the IR. - */ - -private import internal.IRInternal -import IRFunction -private import internal.IRVariableImports as Imports -import Imports::TempVariableTag -private import Imports::IRUtilities -private import Imports::TTempVariableTag -private import Imports::TIRVariable -private import Imports::IRType - -/** - * A variable referenced by the IR for a function. - * - * The variable may be a user-declared variable (`IRUserVariable`) or a temporary variable generated - * by the AST-to-IR translation (`IRTempVariable`). - */ -class IRVariable extends TIRVariable { - Language::Declaration func; - - IRVariable() { - this = TIRUserVariable(_, _, func) or - this = TIRTempVariable(func, _, _, _) or - this = TIRStringLiteral(func, _, _, _) or - this = TIRDynamicInitializationFlag(func, _, _) - } - - /** Gets a textual representation of this element. */ - string toString() { none() } - - /** - * Holds if this variable's value cannot be changed within a function. Currently used for string - * literals, but could also apply to `const` global and static variables. - */ - predicate isReadOnly() { none() } - - /** - * Gets the type of the variable. - */ - final Language::Type getType() { this.getLanguageType().hasType(result, false) } - - /** - * Gets the language-neutral type of the variable. - */ - final IRType getIRType() { result = this.getLanguageType().getIRType() } - - /** - * Gets the type of the variable. - */ - Language::LanguageType getLanguageType() { none() } - - /** - * Gets the AST node that declared this variable, or that introduced this - * variable as part of the AST-to-IR translation. - */ - Language::AST getAst() { none() } - - /** DEPRECATED: Alias for getAst */ - deprecated Language::AST getAST() { result = this.getAst() } - - /** - * Gets an identifier string for the variable. This identifier is unique - * within the function. - */ - string getUniqueId() { none() } - - /** - * Gets the source location of this variable. - */ - final Language::Location getLocation() { result = this.getAst().getLocation() } - - /** - * Gets the IR for the function that references this variable. - */ - final IRFunction getEnclosingIRFunction() { result.getFunction() = func } - - /** - * Gets the function that references this variable. - */ - final Language::Declaration getEnclosingFunction() { result = func } -} - -/** - * A user-declared variable referenced by the IR for a function. - */ -class IRUserVariable extends IRVariable, TIRUserVariable { - Language::Variable var; - Language::LanguageType type; - - IRUserVariable() { this = TIRUserVariable(var, type, func) } - - final override string toString() { result = this.getVariable().toString() } - - final override Language::AST getAst() { result = var } - - /** DEPRECATED: Alias for getAst */ - deprecated override Language::AST getAST() { result = this.getAst() } - - final override string getUniqueId() { - result = this.getVariable().toString() + " " + this.getVariable().getLocation().toString() - } - - final override Language::LanguageType getLanguageType() { result = type } - - /** - * Gets the original user-declared variable. - */ - Language::Variable getVariable() { result = var } -} - -/** - * A variable (user-declared or temporary) that is allocated on the stack. This includes all - * parameters, non-static local variables, and temporary variables. - */ -class IRAutomaticVariable extends IRVariable { - IRAutomaticVariable() { - exists(Language::Variable var | - this = TIRUserVariable(var, _, func) and - Language::isVariableAutomatic(var) - ) - or - this = TIRTempVariable(func, _, _, _) - } -} - -/** - * A user-declared variable that is allocated on the stack. This includes all parameters and - * non-static local variables. - */ -class IRAutomaticUserVariable extends IRUserVariable, IRAutomaticVariable { - override Language::AutomaticVariable var; - - final override Language::AutomaticVariable getVariable() { result = var } -} - -/** - * A user-declared variable that is not allocated on the stack. This includes all global variables, - * namespace-scope variables, static fields, and static local variables. - */ -class IRStaticUserVariable extends IRUserVariable { - override Language::StaticVariable var; - - IRStaticUserVariable() { not Language::isVariableAutomatic(var) } - - final override Language::StaticVariable getVariable() { result = var } -} - -/** - * A variable that is not user-declared. This includes temporary variables generated as part of IR - * construction, as well as string literals. - */ -class IRGeneratedVariable extends IRVariable { - Language::AST ast; - Language::LanguageType type; - - IRGeneratedVariable() { - this = TIRTempVariable(func, ast, _, type) or - this = TIRStringLiteral(func, ast, type, _) or - this = TIRDynamicInitializationFlag(func, ast, type) - } - - final override Language::LanguageType getLanguageType() { result = type } - - final override Language::AST getAst() { result = ast } - - /** DEPRECATED: Alias for getAst */ - deprecated override Language::AST getAST() { result = this.getAst() } - - override string toString() { result = this.getBaseString() + this.getLocationString() } - - override string getUniqueId() { none() } - - /** - * INTERNAL: Do not use. - * - * Gets a string containing the source code location of the AST that generated this variable. - * - * This is used by debugging and printing code only. - */ - final string getLocationString() { - result = - ast.getLocation().getStartLine().toString() + ":" + - ast.getLocation().getStartColumn().toString() - } - - /** - * INTERNAL: Do not use. - * - * Gets the string that is combined with the location of the variable to generate the string - * representation of this variable. - * - * This is used by debugging and printing code only. - */ - string getBaseString() { none() } -} - -/** - * A temporary variable introduced by IR construction. The most common examples are the variable - * generated to hold the return value of a function, or the variable generated to hold the result of - * a condition operator (`a ? b : c`). - */ -class IRTempVariable extends IRGeneratedVariable, IRAutomaticVariable, TIRTempVariable { - TempVariableTag tag; - - IRTempVariable() { this = TIRTempVariable(func, ast, tag, type) } - - final override string getUniqueId() { - result = "Temp: " + Construction::getTempVariableUniqueId(this) - } - - /** - * Gets the "tag" object that differentiates this temporary variable from other temporary - * variables generated for the same AST. - */ - final TempVariableTag getTag() { result = tag } - - override string getBaseString() { result = "#temp" } -} - -/** - * A temporary variable generated to hold the return value of a function. - */ -class IRReturnVariable extends IRTempVariable { - IRReturnVariable() { tag = ReturnValueTempVar() } - - final override string toString() { result = "#return" } -} - -/** - * A temporary variable generated to hold the exception thrown by a `ThrowValue` instruction. - */ -class IRThrowVariable extends IRTempVariable { - IRThrowVariable() { tag = ThrowTempVar() } - - final override string getBaseString() { result = "#throw" } -} - -/** - * A temporary variable generated to hold the contents of all arguments passed to the `...` of a - * function that accepts a variable number of arguments. - */ -class IREllipsisVariable extends IRTempVariable, IRParameter { - IREllipsisVariable() { tag = EllipsisTempVar() } - - final override string toString() { result = "#ellipsis" } - - final override int getIndex() { result = func.(Language::Function).getNumberOfParameters() } -} - -/** - * A temporary variable generated to hold the `this` pointer. - */ -class IRThisVariable extends IRTempVariable, IRParameter { - IRThisVariable() { tag = ThisTempVar() } - - final override string toString() { result = "#this" } - - final override int getIndex() { result = -1 } -} - -/** - * A variable generated to represent the contents of a string literal. This variable acts much like - * a read-only global variable. - */ -class IRStringLiteral extends IRGeneratedVariable, TIRStringLiteral { - Language::StringLiteral literal; - - IRStringLiteral() { this = TIRStringLiteral(func, ast, type, literal) } - - final override predicate isReadOnly() { any() } - - final override string getUniqueId() { - result = "String: " + this.getLocationString() + "=" + Language::getStringLiteralText(literal) - } - - final override string getBaseString() { result = "#string" } - - /** - * Gets the AST of the string literal represented by this `IRStringLiteral`. - */ - final Language::StringLiteral getLiteral() { result = literal } -} - -/** - * A variable generated to track whether a specific non-stack variable has been initialized. This is - * used to model the runtime initialization of static local variables in C++, as well as static - * fields in C#. - */ -class IRDynamicInitializationFlag extends IRGeneratedVariable, TIRDynamicInitializationFlag { - Language::Variable var; - - IRDynamicInitializationFlag() { - this = TIRDynamicInitializationFlag(func, var, type) and ast = var - } - - final override string toString() { result = var.toString() + "#init" } - - /** - * Gets variable whose initialization is guarded by this flag. - */ - final Language::Variable getVariable() { result = var } - - final override string getUniqueId() { - result = - "Init: " + this.getVariable().toString() + " " + this.getVariable().getLocation().toString() - } - - final override string getBaseString() { result = "#init:" + var.toString() + ":" } -} - -/** - * An IR variable which acts like a function parameter, including positional parameters and the - * temporary variables generated for `this` and ellipsis parameters. - */ -class IRParameter extends IRAutomaticVariable { - IRParameter() { - this.(IRAutomaticUserVariable).getVariable() instanceof Language::Parameter - or - this = TIRTempVariable(_, _, ThisTempVar(), _) - or - this = TIRTempVariable(_, _, EllipsisTempVar(), _) - } - - /** - * Gets the zero-based index of this parameter. The `this` parameter has index -1. - */ - int getIndex() { none() } -} - -/** - * An IR variable representing a positional parameter. - */ -class IRPositionalParameter extends IRParameter, IRAutomaticUserVariable { - final override int getIndex() { result = this.getVariable().(Language::Parameter).getIndex() } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll b/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll deleted file mode 100644 index 189ffce2903..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll +++ /dev/null @@ -1,2231 +0,0 @@ -/** - * Provides classes that represent the individual instructions in the IR for a function. - */ - -private import internal.IRInternal -import IRFunction -import IRBlock -import IRVariable -import Operand -private import internal.InstructionImports as Imports -import Imports::EdgeKind -import Imports::IRType -import Imports::MemoryAccessKind -import Imports::Opcode -private import Imports::OperandTag - -/** - * Gets an `Instruction` that is contained in `IRFunction`, and has a location with the specified - * `File` and line number. Used for assigning register names when printing IR. - */ -private Instruction getAnInstructionAtLine(IRFunction irFunc, Language::File file, int line) { - exists(IRConfiguration::IRConfiguration config | - config.shouldEvaluateDebugStringsForFunction(irFunc.getFunction()) - ) and - exists(Language::Location location | - irFunc = result.getEnclosingIRFunction() and - location = result.getLocation() and - file = location.getFile() and - line = location.getStartLine() - ) -} - -/** - * A single instruction in the IR. - */ -class Instruction extends Construction::TStageInstruction { - Instruction() { - // The base `TStageInstruction` type is a superset of the actual instructions appearing in this - // stage. This call lets the stage filter out the ones that are not reused from raw IR. - Construction::hasInstruction(this) - } - - /** Gets a textual representation of this element. */ - final string toString() { result = this.getOpcode().toString() + ": " + this.getAst().toString() } - - /** - * Gets a string showing the result, opcode, and operands of the instruction, equivalent to what - * would be printed by PrintIR.ql. For example: - * - * `mu0_28(int) = Store r0_26, r0_27` - */ - final string getDumpString() { - result = - this.getResultString() + " = " + this.getOperationString() + " " + this.getOperandsString() - } - - private predicate shouldGenerateDumpStrings() { - exists(IRConfiguration::IRConfiguration config | - config.shouldEvaluateDebugStringsForFunction(this.getEnclosingFunction()) - ) - } - - /** - * Gets a string describing the operation of this instruction. This includes - * the opcode and the immediate value, if any. For example: - * - * VariableAddress[x] - */ - final string getOperationString() { - this.shouldGenerateDumpStrings() and - if exists(this.getImmediateString()) - then - result = - this.getOperationPrefix() + this.getOpcode().toString() + "[" + this.getImmediateString() + - "]" - else result = this.getOperationPrefix() + this.getOpcode().toString() - } - - /** - * Gets a string describing the immediate value of this instruction, if any. - */ - string getImmediateString() { none() } - - private string getOperationPrefix() { - this.shouldGenerateDumpStrings() and - if this instanceof SideEffectInstruction then result = "^" else result = "" - } - - private string getResultPrefix() { - this.shouldGenerateDumpStrings() and - if this.getResultIRType() instanceof IRVoidType - then result = "v" - else - if this.hasMemoryResult() - then if this.isResultModeled() then result = "m" else result = "mu" - else result = "r" - } - - /** - * Gets the zero-based index of this instruction within its block. This is - * used by debugging and printing code only. - */ - int getDisplayIndexInBlock() { - this.shouldGenerateDumpStrings() and - exists(IRBlock block | - this = block.getInstruction(result) - or - this = - rank[-result - 1](PhiInstruction phiInstr | - phiInstr = block.getAPhiInstruction() - | - phiInstr order by phiInstr.getUniqueId() - ) - ) - } - - private int getLineRank() { - this.shouldGenerateDumpStrings() and - exists(IRFunction enclosing, Language::File file, int line | - this = - rank[result](Instruction instr | - instr = getAnInstructionAtLine(enclosing, file, line) - | - instr order by instr.getBlock().getDisplayIndex(), instr.getDisplayIndexInBlock() - ) - ) - } - - /** - * Gets a human-readable string that uniquely identifies this instruction - * within the function. This string is used to refer to this instruction when - * printing IR dumps. - * - * Example: `r1_1` - */ - string getResultId() { - this.shouldGenerateDumpStrings() and - result = - this.getResultPrefix() + this.getAst().getLocation().getStartLine() + "_" + this.getLineRank() - } - - /** - * Gets a string describing the result of this instruction, suitable for - * display in IR dumps. This consists of the result ID plus the type of the - * result. - * - * Example: `r1_1(int*)` - */ - final string getResultString() { - this.shouldGenerateDumpStrings() and - result = this.getResultId() + "(" + this.getResultLanguageType().getDumpString() + ")" - } - - /** - * Gets a string describing the operands of this instruction, suitable for - * display in IR dumps. - * - * Example: `func:r3_4, this:r3_5` - */ - string getOperandsString() { - this.shouldGenerateDumpStrings() and - result = - concat(Operand operand | - operand = this.getAnOperand() - | - operand.getDumpString(), ", " order by operand.getDumpSortOrder() - ) - } - - /** - * Gets a string identifier for this function that is unique among all - * instructions in the same function. - * - * This is used for sorting IR output for tests, and is likely to be - * inefficient for any other use. - */ - final string getUniqueId() { result = Construction::getInstructionUniqueId(this) } - - /** - * INTERNAL: Do not use. - * - * Gets two sort keys for this instruction - used to order instructions for printing - * in test outputs. - */ - final predicate hasSortKeys(int key1, int key2) { - Construction::instructionHasSortKeys(this, key1, key2) - } - - /** - * Gets the basic block that contains this instruction. - */ - final IRBlock getBlock() { result.getAnInstruction() = this } - - /** - * Gets the function that contains this instruction. - */ - final Language::Declaration getEnclosingFunction() { - result = this.getEnclosingIRFunction().getFunction() - } - - /** - * Gets the IRFunction object that contains the IR for this instruction. - */ - final IRFunction getEnclosingIRFunction() { - result = Construction::getInstructionEnclosingIRFunction(this) - } - - /** - * Gets the AST that caused this instruction to be generated. - */ - final Language::AST getAst() { result = Construction::getInstructionAst(this) } - - /** - * Gets the location of the source code for this instruction. - */ - final Language::Location getLocation() { result = this.getAst().getLocation() } - - /** - * Gets the `Expr` whose result is computed by this instruction, if any. The `Expr` may be a - * conversion. - */ - final Language::Expr getConvertedResultExpression() { - result = Raw::getInstructionConvertedResultExpression(this) - } - - /** - * Gets the unconverted form of the `Expr` whose result is computed by this instruction, if any. - */ - final Language::Expr getUnconvertedResultExpression() { - result = Raw::getInstructionUnconvertedResultExpression(this) - } - - /** - * Gets the language-specific type of the result produced by this instruction. - * - * Most consumers of the IR should use `getResultIRType()` instead. `getResultIRType()` uses a - * less complex, language-neutral type system in which all semantically equivalent types share the - * same `IRType` instance. For example, in C++, four different `Instruction`s might have three - * different values for `getResultLanguageType()`: `unsigned int`, `char32_t`, and `wchar_t`, - * whereas all four instructions would have the same value for `getResultIRType()`, `uint4`. - */ - final Language::LanguageType getResultLanguageType() { - result = Construction::getInstructionResultType(this) - } - - /** - * Gets the type of the result produced by this instruction. If the instruction does not produce - * a result, its result type will be `IRVoidType`. - */ - cached - final IRType getResultIRType() { result = this.getResultLanguageType().getIRType() } - - /** - * Gets the type of the result produced by this instruction. If the - * instruction does not produce a result, its result type will be `VoidType`. - * - * If `isGLValue()` holds, then the result type of this instruction should be - * thought of as "pointer to `getResultType()`". - */ - final Language::Type getResultType() { - exists(Language::LanguageType resultType | - resultType = this.getResultLanguageType() and - ( - resultType.hasUnspecifiedType(result, _) - or - not resultType.hasUnspecifiedType(_, _) and result instanceof Language::UnknownType - ) - ) - } - - /** - * Holds if the result produced by this instruction is a glvalue. If this - * holds, the result of the instruction represents the address of a location, - * and the type of the location is given by `getResultType()`. If this does - * not hold, the result of the instruction represents a value whose type is - * given by `getResultType()`. - * - * For example, the statement `y = x;` generates the following IR: - * ``` - * r1_0(glval: int) = VariableAddress[x] - * r1_1(int) = Load r1_0, mu0_1 - * r1_2(glval: int) = VariableAddress[y] - * mu1_3(int) = Store r1_2, r1_1 - * ``` - * - * The result of each `VariableAddress` instruction is a glvalue of type - * `int`, representing the address of the corresponding integer variable. The - * result of the `Load` instruction is a prvalue of type `int`, representing - * the integer value loaded from variable `x`. - */ - final predicate isGLValue() { this.getResultLanguageType().hasType(_, true) } - - /** - * Gets the size of the result produced by this instruction, in bytes. If the - * result does not have a known constant size, this predicate does not hold. - * - * If `this.isGLValue()` holds for this instruction, the value of - * `getResultSize()` will always be the size of a pointer. - */ - final int getResultSize() { result = this.getResultLanguageType().getByteSize() } - - /** - * Gets the opcode that specifies the operation performed by this instruction. - */ - pragma[inline] - final Opcode getOpcode() { Construction::getInstructionOpcode(result, this) } - - /** - * Gets all direct uses of the result of this instruction. The result can be - * an `Operand` for which `isDefinitionInexact` holds. - */ - final Operand getAUse() { result.getAnyDef() = this } - - /** - * Gets all of this instruction's operands. - */ - final Operand getAnOperand() { result.getUse() = this } - - /** - * Holds if this instruction produces a memory result. - */ - final predicate hasMemoryResult() { exists(this.getResultMemoryAccess()) } - - /** - * Gets the kind of memory access performed by this instruction's result. - * Holds only for instructions with a memory result. - */ - pragma[inline] - final MemoryAccessKind getResultMemoryAccess() { - result = this.getOpcode().getWriteMemoryAccess() - } - - /** - * Holds if the memory access performed by this instruction's result will not always write to - * every bit in the memory location. This is most commonly used for memory accesses that may or - * may not actually occur depending on runtime state (for example, the write side effect of an - * output parameter that is not written to on all paths), or for accesses where the memory - * location is a conservative estimate of the memory that might actually be accessed at runtime - * (for example, the global side effects of a function call). - */ - pragma[inline] - final predicate hasResultMayMemoryAccess() { this.getOpcode().hasMayWriteMemoryAccess() } - - /** - * Gets the operand that holds the memory address to which this instruction stores its - * result, if any. For example, in `m3 = Store r1, r2`, the result of `getResultAddressOperand()` - * is `r1`. - */ - final AddressOperand getResultAddressOperand() { - this.getResultMemoryAccess().usesAddressOperand() and - result.getUse() = this - } - - /** - * Gets the instruction that holds the exact memory address to which this instruction stores its - * result, if any. For example, in `m3 = Store r1, r2`, the result of `getResultAddressOperand()` - * is the instruction that defines `r1`. - */ - final Instruction getResultAddress() { result = this.getResultAddressOperand().getDef() } - - /** - * Holds if the result of this instruction is precisely modeled in SSA. Always - * holds for a register result. For a memory result, a modeled result is - * connected to its actual uses. An unmodeled result has no uses. - * - * For example: - * ``` - * int x = 1; - * int *p = &x; - * int y = *p; - * ``` - * In non-aliased SSA, `x` will not be modeled because it has its address - * taken. In that case, `isResultModeled()` would not hold for the result of - * the `Store` to `x`. - */ - final predicate isResultModeled() { - // Register results are always in SSA form. - not this.hasMemoryResult() or - Construction::hasModeledMemoryResult(this) - } - - /** - * Holds if this is an instruction with a memory result that represents a - * conflation of more than one memory allocation. - * - * This happens in practice when dereferencing a pointer that cannot be - * tracked back to a single local allocation. Such memory is instead modeled - * as originating on the `AliasedDefinitionInstruction` at the entry of the - * function. - */ - final predicate isResultConflated() { Construction::hasConflatedMemoryResult(this) } - - /** - * Gets the successor of this instruction along the control flow edge - * specified by `kind`. - */ - final Instruction getSuccessor(EdgeKind kind) { - result = Construction::getInstructionSuccessor(this, kind) - } - - /** - * Gets the a _back-edge successor_ of this instruction along the control - * flow edge specified by `kind`. A back edge in the control-flow graph is - * intuitively the edge that goes back around a loop. If all back edges are - * removed from the control-flow graph, it becomes acyclic. - */ - final Instruction getBackEdgeSuccessor(EdgeKind kind) { - // We don't take these edges from - // `Construction::getInstructionBackEdgeSuccessor` since that relation has - // not been treated to remove any loops that might be left over due to - // flaws in the IR construction or back-edge detection. - exists(IRBlock block | - block = this.getBlock() and - this = block.getLastInstruction() and - result = block.getBackEdgeSuccessor(kind).getFirstInstruction() - ) - } - - /** - * Gets all direct successors of this instruction. - */ - final Instruction getASuccessor() { result = this.getSuccessor(_) } - - /** - * Gets a predecessor of this instruction such that the predecessor reaches - * this instruction along the control flow edge specified by `kind`. - */ - final Instruction getPredecessor(EdgeKind kind) { result.getSuccessor(kind) = this } - - /** - * Gets all direct predecessors of this instruction. - */ - final Instruction getAPredecessor() { result = this.getPredecessor(_) } -} - -/** - * An instruction that refers to a variable. - * - * This class is used for any instruction whose operation fundamentally depends on a specific - * variable. For example, it is used for `VariableAddress`, which returns the address of a specific - * variable, and `InitializeParameter`, which returns the value that was passed to the specified - * parameter by the caller. `VariableInstruction` is not used for `Load` or `Store` instructions - * that happen to load from or store to a particular variable; in those cases, the memory location - * being accessed is specified by the `AddressOperand` on the instruction, which may or may not be - * defined by the result of a `VariableAddress` instruction. - */ -class VariableInstruction extends Instruction { - IRVariable var; - - VariableInstruction() { var = Raw::getInstructionVariable(this) } - - override string getImmediateString() { result = var.toString() } - - /** - * Gets the variable that this instruction references. - */ - final IRVariable getIRVariable() { result = var } - - /** - * Gets the AST variable that this instruction's IR variable refers to, if one exists. - */ - final Language::Variable getAstVariable() { result = var.(IRUserVariable).getVariable() } -} - -/** - * An instruction that refers to a field of a class, struct, or union. - * - * This class is used for any instruction whose operation fundamentally depends on a specific - * field. For example, it is used for `FieldAddress`, which computes the address of a specific - * field on an object. `FieldInstruction` is not used for `Load` or `Store` instructions that happen - * to load from or store to a particular field; in those cases, the memory location being accessed - * is specified by the `AddressOperand` on the instruction, which may or may not be defined by the - * result of a `FieldAddress` instruction. - */ -class FieldInstruction extends Instruction { - Language::Field field; - - FieldInstruction() { field = Raw::getInstructionField(this) } - - final override string getImmediateString() { result = field.toString() } - - /** - * Gets the field that this instruction references. - */ - final Language::Field getField() { result = field } -} - -/** - * An instruction that refers to a function. - * - * This class is used for any instruction whose operation fundamentally depends on a specific - * function. For example, it is used for `FunctionAddress`, which returns the address of a specific - * function. `FunctionInstruction` is not used for `Call` instructions that happen to call a - * particular function; in that case, the function being called is specified by the - * `CallTargetOperand` on the instruction, which may or may not be defined by the result of a - * `FunctionAddress` instruction. - */ -class FunctionInstruction extends Instruction { - Language::Function funcSymbol; - - FunctionInstruction() { funcSymbol = Raw::getInstructionFunction(this) } - - final override string getImmediateString() { result = funcSymbol.toString() } - - /** - * Gets the function that this instruction references. - */ - final Language::Function getFunctionSymbol() { result = funcSymbol } -} - -/** - * An instruction whose result is a compile-time constant value. - */ -class ConstantValueInstruction extends Instruction { - string value; - - ConstantValueInstruction() { value = Raw::getInstructionConstantValue(this) } - - final override string getImmediateString() { result = value } - - /** - * Gets the constant value of this instruction's result. - */ - final string getValue() { result = value } -} - -/** - * An instruction that refers to an argument of a `Call` instruction. - * - * This instruction is used for side effects of a `Call` instruction that read or write memory - * pointed to by one of the arguments of the call. - */ -class IndexedInstruction extends Instruction { - int index; - - IndexedInstruction() { index = Raw::getInstructionIndex(this) } - - final override string getImmediateString() { result = index.toString() } - - /** - * Gets the zero-based index of the argument that this instruction references. - */ - final int getIndex() { result = index } -} - -/** - * An instruction representing the entry point to a function. - * - * Each `IRFunction` has exactly one `EnterFunction` instruction. Execution of the function begins - * at this instruction. This instruction has no predecessors. - */ -class EnterFunctionInstruction extends Instruction { - EnterFunctionInstruction() { this.getOpcode() instanceof Opcode::EnterFunction } -} - -/** - * An instruction that returns the address of a variable. - * - * This instruction returns the address of a local variable, parameter, static field, - * namespace-scope variable, or global variable. For the address of a non-static field of a class, - * struct, or union, see `FieldAddressInstruction`. - */ -class VariableAddressInstruction extends VariableInstruction { - VariableAddressInstruction() { this.getOpcode() instanceof Opcode::VariableAddress } -} - -/** - * An instruction that returns the address of a function. - * - * This instruction returns the address of a function, including non-member functions, static member - * functions, and non-static member functions. - * - * The result has an `IRFunctionAddress` type. - */ -class FunctionAddressInstruction extends FunctionInstruction { - FunctionAddressInstruction() { this.getOpcode() instanceof Opcode::FunctionAddress } -} - -/** - * An instruction that returns the address of a "virtual" delete function. - * - * This function, which does not actually exist in the source code, is used to - * delete objects of a class with a virtual destructor. In that case the deacllocation - * function is selected at runtime based on the dynamic type of the object. So this - * function dynamically dispatches to the correct deallocation function. - * It also should pass in the required extra arguments to the deallocation function - * which may differ dynamically depending on the type of the object. - */ -class VirtualDeleteFunctionAddressInstruction extends Instruction { - VirtualDeleteFunctionAddressInstruction() { - this.getOpcode() instanceof Opcode::VirtualDeleteFunctionAddress - } -} - -/** - * An instruction that initializes a parameter of the enclosing function with the value of the - * corresponding argument passed by the caller. - * - * Each parameter of a function will have exactly one `InitializeParameter` instruction that - * initializes that parameter. - */ -class InitializeParameterInstruction extends VariableInstruction { - InitializeParameterInstruction() { this.getOpcode() instanceof Opcode::InitializeParameter } - - /** - * Gets the parameter initialized by this instruction. - */ - final Language::Parameter getParameter() { result = var.(IRUserVariable).getVariable() } - - /** - * Holds if this instruction initializes the parameter with index `index`, or - * if `index` is `-1` and this instruction initializes `this`. - */ - pragma[noinline] - final predicate hasIndex(int index) { - index >= 0 and index = this.getParameter().getIndex() - or - index = -1 and this.getIRVariable() instanceof IRThisVariable - } -} - -/** - * An instruction that initializes all memory that existed before this function was called. - * - * This instruction provides a definition for memory that, because it was actually allocated and - * initialized elsewhere, would not otherwise have a definition in this function. - */ -class InitializeNonLocalInstruction extends Instruction { - InitializeNonLocalInstruction() { this.getOpcode() instanceof Opcode::InitializeNonLocal } -} - -/** - * An instruction that initializes the memory pointed to by a parameter of the enclosing function - * with the value of that memory on entry to the function. - */ -class InitializeIndirectionInstruction extends VariableInstruction { - InitializeIndirectionInstruction() { this.getOpcode() instanceof Opcode::InitializeIndirection } - - /** - * Gets the parameter initialized by this instruction. - */ - final Language::Parameter getParameter() { result = var.(IRUserVariable).getVariable() } - - /** - * Holds if this instruction initializes the memory pointed to by the parameter with - * index `index`, or if `index` is `-1` and this instruction initializes the memory - * pointed to by `this`. - */ - pragma[noinline] - final predicate hasIndex(int index) { - index >= 0 and index = this.getParameter().getIndex() - or - index = -1 and this.getIRVariable() instanceof IRThisVariable - } -} - -/** - * An instruction that initializes the `this` pointer parameter of the enclosing function. - */ -class InitializeThisInstruction extends Instruction { - InitializeThisInstruction() { this.getOpcode() instanceof Opcode::InitializeThis } -} - -/** - * An instruction that computes the address of a non-static field of an object. - */ -class FieldAddressInstruction extends FieldInstruction { - FieldAddressInstruction() { this.getOpcode() instanceof Opcode::FieldAddress } - - /** - * Gets the operand that provides the address of the object containing the field. - */ - final UnaryOperand getObjectAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the address of the object containing the field. - */ - final Instruction getObjectAddress() { result = this.getObjectAddressOperand().getDef() } -} - -/** - * An instruction that computes the address of the first element of a managed array. - * - * This instruction is used for element access to C# arrays. - */ -class ElementsAddressInstruction extends UnaryInstruction { - ElementsAddressInstruction() { this.getOpcode() instanceof Opcode::ElementsAddress } - - /** - * Gets the operand that provides the address of the array object. - */ - final UnaryOperand getArrayObjectAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the address of the array object. - */ - final Instruction getArrayObjectAddress() { - result = this.getArrayObjectAddressOperand().getDef() - } -} - -/** - * An instruction that produces a well-defined but unknown result and has - * unknown side effects, including side effects that are not conservatively - * modeled in the SSA graph. - * - * This type of instruction appears when there is an `ErrorExpr` in the AST, - * meaning that the extractor could not understand the expression and therefore - * produced a partial AST. Queries that give alerts when some action is _not_ - * taken may want to ignore any function that contains an `ErrorInstruction`. - */ -class ErrorInstruction extends Instruction { - ErrorInstruction() { this.getOpcode() instanceof Opcode::Error } -} - -/** - * An instruction that returns an uninitialized value. - * - * This instruction is used to provide an initial definition for a stack variable that does not have - * an initializer, or whose initializer only partially initializes the variable. - */ -class UninitializedInstruction extends VariableInstruction { - UninitializedInstruction() { this.getOpcode() instanceof Opcode::Uninitialized } - - /** - * Gets the variable that is uninitialized. - */ - final Language::Variable getLocalVariable() { result = var.(IRUserVariable).getVariable() } -} - -/** - * An instruction that has no effect. - * - * This instruction is typically inserted to ensure that a particular AST is associated with at - * least one instruction, even when the AST has no semantic effect. - */ -class NoOpInstruction extends Instruction { - NoOpInstruction() { this.getOpcode() instanceof Opcode::NoOp } -} - -/** - * An instruction that returns control to the caller of the function. - * - * This instruction represents the normal (non-exception) return from a function, either from an - * explicit `return` statement or from control flow reaching the end of the function's body. - * - * Each function has exactly one `ReturnInstruction`. Each `return` statement in a function is - * represented as an initialization of the temporary variable that holds the return value, with - * control then flowing to the common `ReturnInstruction` for that function. Exception: A function - * that never returns will not have a `ReturnInstruction`. - * - * The `ReturnInstruction` for a function will have a control-flow successor edge to a block - * containing the `ExitFunction` instruction for that function. - * - * There are two different return instructions: `ReturnValueInstruction`, for returning a value from - * a non-`void`-returning function, and `ReturnVoidInstruction`, for returning from a - * `void`-returning function. - */ -class ReturnInstruction extends Instruction { - ReturnInstruction() { this.getOpcode() instanceof ReturnOpcode } -} - -/** - * An instruction that returns control to the caller of the function, without returning a value. - */ -class ReturnVoidInstruction extends ReturnInstruction { - ReturnVoidInstruction() { this.getOpcode() instanceof Opcode::ReturnVoid } -} - -/** - * An instruction that returns control to the caller of the function, including a return value. - */ -class ReturnValueInstruction extends ReturnInstruction { - ReturnValueInstruction() { this.getOpcode() instanceof Opcode::ReturnValue } - - /** - * Gets the operand that provides the value being returned by the function. - */ - final LoadOperand getReturnValueOperand() { result = this.getAnOperand() } - - /** - * Gets the operand that provides the address of the value being returned by the function. - */ - final AddressOperand getReturnAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the value being returned by the function, if an - * exact definition is available. - */ - final Instruction getReturnValue() { result = this.getReturnValueOperand().getDef() } - - /** - * Gets the instruction whose result provides the address of the value being returned by the function. - */ - final Instruction getReturnAddress() { result = this.getReturnAddressOperand().getDef() } -} - -/** - * An instruction that represents the use of the value pointed to by a parameter of the function - * after the function returns control to its caller. - * - * This instruction does not itself return control to the caller. It merely represents the potential - * for a caller to use the memory pointed to by the parameter sometime after the call returns. This - * is the counterpart to the `InitializeIndirection` instruction, which represents the possibility - * that the caller initialized the memory pointed to by the parameter before the call. - */ -class ReturnIndirectionInstruction extends VariableInstruction { - ReturnIndirectionInstruction() { this.getOpcode() instanceof Opcode::ReturnIndirection } - - /** - * Gets the operand that provides the value of the pointed-to memory. - */ - final SideEffectOperand getSideEffectOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the value of the pointed-to memory, if an exact - * definition is available. - */ - final Instruction getSideEffect() { result = this.getSideEffectOperand().getDef() } - - /** - * Gets the operand that provides the address of the pointed-to memory. - */ - final AddressOperand getSourceAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the address of the pointed-to memory. - */ - final Instruction getSourceAddress() { result = this.getSourceAddressOperand().getDef() } - - /** - * Gets the parameter for which this instruction reads the final pointed-to value within the - * function. - */ - final Language::Parameter getParameter() { result = var.(IRUserVariable).getVariable() } - - /** - * Holds if this instruction is the return indirection for `this`. - */ - final predicate isThisIndirection() { var instanceof IRThisVariable } - - /** - * Holds if this instruction is the return indirection for the parameter with index `index`, or - * if this instruction is the return indirection for `this` and `index` is `-1`. - */ - pragma[noinline] - final predicate hasIndex(int index) { - index >= 0 and index = this.getParameter().getIndex() - or - index = -1 and this.isThisIndirection() - } -} - -/** - * An instruction that returns a copy of its operand. - * - * There are several different copy instructions, depending on the source and destination of the - * copy operation: - * - `CopyValueInstruction` - Copies a register operand to a register result. - * - `LoadInstruction` - Copies a memory operand to a register result. - * - `StoreInstruction` - Copies a register operand to a memory result. - */ -class CopyInstruction extends Instruction { - CopyInstruction() { this.getOpcode() instanceof CopyOpcode } - - /** - * Gets the operand that provides the input value of the copy. - */ - Operand getSourceValueOperand() { none() } - - /** - * Gets the instruction whose result provides the input value of the copy, if an exact definition - * is available. - */ - final Instruction getSourceValue() { result = this.getSourceValueOperand().getDef() } -} - -/** - * An instruction that returns a register result containing a copy of its register operand. - */ -class CopyValueInstruction extends CopyInstruction, UnaryInstruction { - CopyValueInstruction() { this.getOpcode() instanceof Opcode::CopyValue } - - final override UnaryOperand getSourceValueOperand() { result = this.getAnOperand() } -} - -/** - * Gets a string describing the location pointed to by the specified address operand. - */ -private string getAddressOperandDescription(AddressOperand operand) { - result = operand.getDef().(VariableAddressInstruction).getIRVariable().toString() - or - not operand.getDef() instanceof VariableAddressInstruction and - result = "?" -} - -/** - * An instruction that returns a register result containing a copy of its memory operand. - */ -class LoadInstruction extends CopyInstruction { - LoadInstruction() { this.getOpcode() instanceof Opcode::Load } - - final override string getImmediateString() { - result = getAddressOperandDescription(this.getSourceAddressOperand()) - } - - /** - * Gets the operand that provides the address of the value being loaded. - */ - final AddressOperand getSourceAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the address of the value being loaded. - */ - final Instruction getSourceAddress() { result = this.getSourceAddressOperand().getDef() } - - final override LoadOperand getSourceValueOperand() { result = this.getAnOperand() } -} - -/** - * An instruction that returns a memory result containing a copy of its register operand. - */ -class StoreInstruction extends CopyInstruction { - StoreInstruction() { this.getOpcode() instanceof Opcode::Store } - - final override string getImmediateString() { - result = getAddressOperandDescription(this.getDestinationAddressOperand()) - } - - /** - * Gets the operand that provides the address of the location to which the value will be stored. - */ - final AddressOperand getDestinationAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the address of the location to which the value will - * be stored, if an exact definition is available. - */ - final Instruction getDestinationAddress() { - result = this.getDestinationAddressOperand().getDef() - } - - final override StoreValueOperand getSourceValueOperand() { result = this.getAnOperand() } -} - -/** - * An instruction that branches to one of two successor instructions based on the value of a Boolean - * operand. - */ -class ConditionalBranchInstruction extends Instruction { - ConditionalBranchInstruction() { this.getOpcode() instanceof Opcode::ConditionalBranch } - - /** - * Gets the operand that provides the Boolean condition controlling the branch. - */ - final ConditionOperand getConditionOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the Boolean condition controlling the branch. - */ - final Instruction getCondition() { result = this.getConditionOperand().getDef() } - - /** - * Gets the instruction to which control will flow if the condition is true. - */ - final Instruction getTrueSuccessor() { result = this.getSuccessor(EdgeKind::trueEdge()) } - - /** - * Gets the instruction to which control will flow if the condition is false. - */ - final Instruction getFalseSuccessor() { result = this.getSuccessor(EdgeKind::falseEdge()) } -} - -/** - * An instruction representing the exit point of a function. - * - * Each `IRFunction` has exactly one `ExitFunction` instruction, unless the function neither returns - * nor throws an exception. Control flows to the `ExitFunction` instruction from both normal returns - * (`ReturnVoid`, `ReturnValue`) and propagated exceptions (`Unwind`). This instruction has no - * successors. - */ -class ExitFunctionInstruction extends Instruction { - ExitFunctionInstruction() { this.getOpcode() instanceof Opcode::ExitFunction } -} - -/** - * An instruction whose result is a constant value. - */ -class ConstantInstruction extends ConstantValueInstruction { - ConstantInstruction() { this.getOpcode() instanceof Opcode::Constant } -} - -/** - * An instruction whose result is a constant value of integer or Boolean type. - */ -class IntegerConstantInstruction extends ConstantInstruction { - IntegerConstantInstruction() { - exists(IRType resultType | - resultType = this.getResultIRType() and - (resultType instanceof IRIntegerType or resultType instanceof IRBooleanType) - ) - } -} - -/** - * An instruction whose result is a constant value of floating-point type. - */ -class FloatConstantInstruction extends ConstantInstruction { - FloatConstantInstruction() { this.getResultIRType() instanceof IRFloatingPointType } -} - -/** - * An instruction whose result is the address of a string literal. - */ -class StringConstantInstruction extends VariableInstruction { - override IRStringLiteral var; - - final override string getImmediateString() { - result = Language::getStringLiteralText(this.getValue()) - } - - /** - * Gets the string literal whose address is returned by this instruction. - */ - final Language::StringLiteral getValue() { result = var.getLiteral() } -} - -/** - * An instruction whose result is computed from two operands. - */ -class BinaryInstruction extends Instruction { - BinaryInstruction() { this.getOpcode() instanceof BinaryOpcode } - - /** - * Gets the left operand of this binary instruction. - */ - final LeftOperand getLeftOperand() { result = this.getAnOperand() } - - /** - * Gets the right operand of this binary instruction. - */ - final RightOperand getRightOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the value of the left operand of this binary - * instruction. - */ - final Instruction getLeft() { result = this.getLeftOperand().getDef() } - - /** - * Gets the instruction whose result provides the value of the right operand of this binary - * instruction. - */ - final Instruction getRight() { result = this.getRightOperand().getDef() } - - /** - * Holds if this instruction's operands are `op1` and `op2`, in either order. - */ - final predicate hasOperands(Operand op1, Operand op2) { - op1 = this.getLeftOperand() and op2 = this.getRightOperand() - or - op1 = this.getRightOperand() and op2 = this.getLeftOperand() - } -} - -/** - * An instruction that computes the result of an arithmetic operation. - */ -class ArithmeticInstruction extends Instruction { - ArithmeticInstruction() { this.getOpcode() instanceof ArithmeticOpcode } -} - -/** - * An instruction that performs an arithmetic operation on two numeric operands. - */ -class BinaryArithmeticInstruction extends ArithmeticInstruction, BinaryInstruction { } - -/** - * An instruction whose result is computed by performing an arithmetic operation on a single - * numeric operand. - */ -class UnaryArithmeticInstruction extends ArithmeticInstruction, UnaryInstruction { } - -/** - * An instruction that computes the sum of two numeric operands. - * - * Both operands must have the same numeric type, which will also be the result type. The result of - * integer overflow is the infinite-precision result modulo 2^n. Floating-point addition is - * performed according to IEEE-754. - */ -class AddInstruction extends BinaryArithmeticInstruction { - AddInstruction() { this.getOpcode() instanceof Opcode::Add } -} - -/** - * An instruction that computes the difference of two numeric operands. - * - * Both operands must have the same numeric type, which will also be the result type. The result of - * integer overflow is the infinite-precision result modulo 2^n. Floating-point subtraction is performed - * according to IEEE-754. - */ -class SubInstruction extends BinaryArithmeticInstruction { - SubInstruction() { this.getOpcode() instanceof Opcode::Sub } -} - -/** - * An instruction that computes the product of two numeric operands. - * - * Both operands must have the same numeric type, which will also be the result type. The result of - * integer overflow is the infinite-precision result modulo 2^n. Floating-point multiplication is - * performed according to IEEE-754. - */ -class MulInstruction extends BinaryArithmeticInstruction { - MulInstruction() { this.getOpcode() instanceof Opcode::Mul } -} - -/** - * An instruction that computes the quotient of two numeric operands. - * - * Both operands must have the same numeric type, which will also be the result type. The result of - * division by zero or integer overflow is undefined. Floating-point division is performed according - * to IEEE-754. - */ -class DivInstruction extends BinaryArithmeticInstruction { - DivInstruction() { this.getOpcode() instanceof Opcode::Div } -} - -/** - * An instruction that computes the remainder of two integer operands. - * - * Both operands must have the same integer type, which will also be the result type. The result of - * division by zero or integer overflow is undefined. - */ -class RemInstruction extends BinaryArithmeticInstruction { - RemInstruction() { this.getOpcode() instanceof Opcode::Rem } -} - -/** - * An instruction that negates a single numeric operand. - * - * The operand must have a numeric type, which will also be the result type. The result of integer - * negation uses two's complement, and is computed modulo 2^n. The result of floating-point negation - * is performed according to IEEE-754. - */ -class NegateInstruction extends UnaryArithmeticInstruction { - NegateInstruction() { this.getOpcode() instanceof Opcode::Negate } -} - -/** - * An instruction that computes the result of a bitwise operation. - */ -class BitwiseInstruction extends Instruction { - BitwiseInstruction() { this.getOpcode() instanceof BitwiseOpcode } -} - -/** - * An instruction that performs a bitwise operation on two integer operands. - */ -class BinaryBitwiseInstruction extends BitwiseInstruction, BinaryInstruction { } - -/** - * An instruction that performs a bitwise operation on a single integer operand. - */ -class UnaryBitwiseInstruction extends BitwiseInstruction, UnaryInstruction { } - -/** - * An instruction that computes the bitwise "and" of two integer operands. - * - * Both operands must have the same integer type, which will also be the result type. - */ -class BitAndInstruction extends BinaryBitwiseInstruction { - BitAndInstruction() { this.getOpcode() instanceof Opcode::BitAnd } -} - -/** - * An instruction that computes the bitwise "or" of two integer operands. - * - * Both operands must have the same integer type, which will also be the result type. - */ -class BitOrInstruction extends BinaryBitwiseInstruction { - BitOrInstruction() { this.getOpcode() instanceof Opcode::BitOr } -} - -/** - * An instruction that computes the bitwise "xor" of two integer operands. - * - * Both operands must have the same integer type, which will also be the result type. - */ -class BitXorInstruction extends BinaryBitwiseInstruction { - BitXorInstruction() { this.getOpcode() instanceof Opcode::BitXor } -} - -/** - * An instruction that shifts its left operand to the left 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 - * rightmost bits are zero-filled. - */ -class ShiftLeftInstruction extends BinaryBitwiseInstruction { - ShiftLeftInstruction() { this.getOpcode() instanceof Opcode::ShiftLeft } -} - -/** - * 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. If the - * left operand has an unsigned integer type, the leftmost bits are zero-filled. If the left operand - * has a signed integer type, the leftmost bits are filled by duplicating the most significant bit - * of the left operand. - */ -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. - */ -class PointerArithmeticInstruction extends BinaryInstruction { - int elementSize; - - PointerArithmeticInstruction() { - this.getOpcode() instanceof PointerArithmeticOpcode and - elementSize = Raw::getInstructionElementSize(this) - } - - final override string getImmediateString() { result = elementSize.toString() } - - /** - * Gets the size of the elements pointed to by the pointer operands, in bytes. - * - * When adding an integer offset to a pointer (`PointerAddInstruction`) or subtracting an integer - * offset from a pointer (`PointerSubInstruction`), the integer offset is multiplied by the - * element size to compute the actual number of bytes added to or subtracted from the pointer - * address. When computing the integer difference between two pointers (`PointerDiffInstruction`), - * the result is computed by computing the difference between the two pointer byte addresses, then - * dividing that byte count by the element size. - */ - final int getElementSize() { result = elementSize } -} - -/** - * An instruction that adds or subtracts an integer offset from a pointer. - */ -class PointerOffsetInstruction extends PointerArithmeticInstruction { - PointerOffsetInstruction() { this.getOpcode() instanceof PointerOffsetOpcode } -} - -/** - * An instruction that adds an integer offset to a pointer. - * - * The result is the byte address computed by adding the value of the right (integer) operand, - * multiplied by the element size, to the value of the left (pointer) operand. The result of pointer - * overflow is undefined. - */ -class PointerAddInstruction extends PointerOffsetInstruction { - PointerAddInstruction() { this.getOpcode() instanceof Opcode::PointerAdd } -} - -/** - * An instruction that subtracts an integer offset from a pointer. - * - * The result is the byte address computed by subtracting the value of the right (integer) operand, - * multiplied by the element size, from the value of the left (pointer) operand. The result of - * pointer underflow is undefined. - */ -class PointerSubInstruction extends PointerOffsetInstruction { - PointerSubInstruction() { this.getOpcode() instanceof Opcode::PointerSub } -} - -/** - * An instruction that computes the difference between two pointers. - * - * Both operands must have the same pointer type. The result must have an integer type whose size is - * the same as that of the pointer operands. The result is computed by subtracting the byte address - * in the right operand from the byte address in the left operand, and dividing by the element size. - * If the difference in byte addresses is not divisible by the element size, the result is - * undefined. - */ -class PointerDiffInstruction extends PointerArithmeticInstruction { - PointerDiffInstruction() { this.getOpcode() instanceof Opcode::PointerDiff } -} - -/** - * An instruction whose result is computed from a single operand. - */ -class UnaryInstruction extends Instruction { - UnaryInstruction() { this.getOpcode() instanceof UnaryOpcode } - - /** - * Gets the sole operand of this instruction. - */ - final UnaryOperand getUnaryOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the sole operand of this instruction. - */ - final Instruction getUnary() { result = this.getUnaryOperand().getDef() } -} - -/** - * An instruction that converts the value of its operand to a value of a different type. - */ -class ConvertInstruction extends UnaryInstruction { - ConvertInstruction() { this.getOpcode() instanceof Opcode::Convert } -} - -/** - * An instruction that converts the address of a polymorphic object to the address of a different - * subobject of the same polymorphic object, returning a null address if the dynamic type of the - * object is not compatible with the result type. - * - * If the operand holds a null address, the result is a null address. - * - * This instruction is used to represent a C++ `dynamic_cast<>` to a pointer type, or a C# `is` or - * `as` expression. - */ -class CheckedConvertOrNullInstruction extends UnaryInstruction { - CheckedConvertOrNullInstruction() { this.getOpcode() instanceof Opcode::CheckedConvertOrNull } -} - -/** - * An instruction that converts the address of a polymorphic object to the address of a different - * subobject of the same polymorphic object, throwing an exception if the dynamic type of the object - * is not compatible with the result type. - * - * If the operand holds a null address, the result is a null address. - * - * This instruction is used to represent a C++ `dynamic_cast<>` to a reference type, or a C# cast - * expression. - */ -class CheckedConvertOrThrowInstruction extends UnaryInstruction { - CheckedConvertOrThrowInstruction() { this.getOpcode() instanceof Opcode::CheckedConvertOrThrow } -} - -/** - * An instruction that returns the address of the complete object that contains the subobject - * pointed to by its operand. - * - * If the operand holds a null address, the result is a null address. - * - * This instruction is used to represent `dynamic_cast` in C++, which returns the pointer to - * the most-derived object. - */ -class CompleteObjectAddressInstruction extends UnaryInstruction { - CompleteObjectAddressInstruction() { this.getOpcode() instanceof Opcode::CompleteObjectAddress } -} - -/** - * An instruction that converts the address of an object to the address of a different subobject of - * the same object, without any type checking at runtime. - */ -class InheritanceConversionInstruction extends UnaryInstruction { - Language::Class baseClass; - Language::Class derivedClass; - - InheritanceConversionInstruction() { - Raw::getInstructionInheritance(this, baseClass, derivedClass) - } - - final override string getImmediateString() { - result = derivedClass.toString() + " : " + baseClass.toString() - } - - /** - * Gets the `ClassDerivation` for the inheritance relationship between - * the base and derived classes. This predicate does not hold if the - * conversion is to an indirect virtual base class. - */ - final Language::ClassDerivation getDerivation() { - result.getBaseClass() = baseClass and result.getDerivedClass() = derivedClass - } - - /** - * Gets the base class of the conversion. This will be either a direct - * base class of the derived class, or a virtual base class of the - * derived class. - */ - final Language::Class getBaseClass() { result = baseClass } - - /** - * Gets the derived class of the conversion. - */ - final Language::Class getDerivedClass() { result = derivedClass } -} - -/** - * An instruction that converts from the address of a derived class to the address of a base class. - */ -class ConvertToBaseInstruction extends InheritanceConversionInstruction { - ConvertToBaseInstruction() { this.getOpcode() instanceof ConvertToBaseOpcode } -} - -/** - * An instruction that converts from the address of a derived class to the address of a direct - * non-virtual base class. - * - * If the operand holds a null address, the result is a null address. - */ -class ConvertToNonVirtualBaseInstruction extends ConvertToBaseInstruction { - ConvertToNonVirtualBaseInstruction() { - this.getOpcode() instanceof Opcode::ConvertToNonVirtualBase - } -} - -/** - * An instruction that converts from the address of a derived class to the address of a virtual base - * class. - * - * If the operand holds a null address, the result is a null address. - */ -class ConvertToVirtualBaseInstruction extends ConvertToBaseInstruction { - ConvertToVirtualBaseInstruction() { this.getOpcode() instanceof Opcode::ConvertToVirtualBase } -} - -/** - * An instruction that converts from the address of a base class to the address of a direct - * non-virtual derived class. - * - * If the operand holds a null address, the result is a null address. - */ -class ConvertToDerivedInstruction extends InheritanceConversionInstruction { - ConvertToDerivedInstruction() { this.getOpcode() instanceof Opcode::ConvertToDerived } -} - -/** - * An instruction that computes the bitwise complement of its operand. - * - * The operand must have an integer type, which will also be the result type. - */ -class BitComplementInstruction extends UnaryBitwiseInstruction { - BitComplementInstruction() { this.getOpcode() instanceof Opcode::BitComplement } -} - -/** - * An instruction that computes the logical complement of its operand. - * - * The operand must have a Boolean type, which will also be the result type. - */ -class LogicalNotInstruction extends UnaryInstruction { - LogicalNotInstruction() { this.getOpcode() instanceof Opcode::LogicalNot } -} - -/** - * An instruction that compares two numeric operands. - */ -class CompareInstruction extends BinaryInstruction { - CompareInstruction() { this.getOpcode() instanceof CompareOpcode } -} - -/** - * An instruction that returns a `true` result if its operands are equal. - * - * Both operands must have the same numeric or address type. The result must have a Boolean type. - * The result is `true` if `left == right`, and `false` if `left != right` or the two operands are - * unordered. Floating-point comparison is performed according to IEEE-754. - */ -class CompareEQInstruction extends CompareInstruction { - CompareEQInstruction() { this.getOpcode() instanceof Opcode::CompareEQ } -} - -/** - * An instruction that returns a `true` result if its operands are not equal. - * - * Both operands must have the same numeric or address type. The result must have a Boolean type. - * The result is `true` if `left != right` or if the two operands are unordered, and `false` if - * `left == right`. Floating-point comparison is performed according to IEEE-754. - */ -class CompareNEInstruction extends CompareInstruction { - CompareNEInstruction() { this.getOpcode() instanceof Opcode::CompareNE } -} - -/** - * An instruction that does a relative comparison of two values, such as `<` or `>=`. - */ -class RelationalInstruction extends CompareInstruction { - RelationalInstruction() { this.getOpcode() instanceof RelationalOpcode } - - /** - * Gets the operand on the "greater" (or "greater-or-equal") side - * of this relational instruction, that is, the side that is larger - * if the overall instruction evaluates to `true`; for example on - * `x <= 20` this is the `20`, and on `y > 0` it is `y`. - */ - Instruction getGreater() { none() } - - /** - * Gets the operand on the "lesser" (or "lesser-or-equal") side - * of this relational instruction, that is, the side that is smaller - * if the overall instruction evaluates to `true`; for example on - * `x <= 20` this is `x`, and on `y > 0` it is the `0`. - */ - Instruction getLesser() { none() } - - /** - * Holds if this relational instruction is strict (is not an "or-equal" instruction). - */ - predicate isStrict() { none() } -} - -/** - * An instruction that returns a `true` result if its left operand is less than its right operand. - * - * Both operands must have the same numeric or address type. The result must have a Boolean type. - * The result is `true` if the `left < right`, and `false` if `left >= right` or if the two operands - * are unordered. Floating-point comparison is performed according to IEEE-754. - */ -class CompareLTInstruction extends RelationalInstruction { - CompareLTInstruction() { this.getOpcode() instanceof Opcode::CompareLT } - - override Instruction getLesser() { result = this.getLeft() } - - override Instruction getGreater() { result = this.getRight() } - - override predicate isStrict() { any() } -} - -/** - * An instruction that returns a `true` result if its left operand is greater than its right operand. - * - * Both operands must have the same numeric or address type. The result must have a Boolean type. - * The result is `true` if the `left > right`, and `false` if `left <= right` or if the two operands - * are unordered. Floating-point comparison is performed according to IEEE-754. - */ -class CompareGTInstruction extends RelationalInstruction { - CompareGTInstruction() { this.getOpcode() instanceof Opcode::CompareGT } - - override Instruction getLesser() { result = this.getRight() } - - override Instruction getGreater() { result = this.getLeft() } - - override predicate isStrict() { any() } -} - -/** - * An instruction that returns a `true` result if its left operand is less than or equal to its - * right operand. - * - * Both operands must have the same numeric or address type. The result must have a Boolean type. - * The result is `true` if the `left <= right`, and `false` if `left > right` or if the two operands - * are unordered. Floating-point comparison is performed according to IEEE-754. - */ -class CompareLEInstruction extends RelationalInstruction { - CompareLEInstruction() { this.getOpcode() instanceof Opcode::CompareLE } - - override Instruction getLesser() { result = this.getLeft() } - - override Instruction getGreater() { result = this.getRight() } - - override predicate isStrict() { none() } -} - -/** - * An instruction that returns a `true` result if its left operand is greater than or equal to its - * right operand. - * - * Both operands must have the same numeric or address type. The result must have a Boolean type. - * The result is `true` if the `left >= right`, and `false` if `left < right` or if the two operands - * are unordered. Floating-point comparison is performed according to IEEE-754. - */ -class CompareGEInstruction extends RelationalInstruction { - CompareGEInstruction() { this.getOpcode() instanceof Opcode::CompareGE } - - override Instruction getLesser() { result = this.getRight() } - - override Instruction getGreater() { result = this.getLeft() } - - override predicate isStrict() { none() } -} - -/** - * An instruction that branches to one of multiple successor instructions based on the value of an - * integer operand. - * - * This instruction will have zero or more successors whose edge kind is `CaseEdge`, each - * representing the branch that will be taken if the controlling expression is within the range - * specified for that case edge. The range of a case edge must be disjoint from the range of each - * other case edge. - * - * The instruction may optionally have a successor edge whose edge kind is `DefaultEdge`, - * representing the branch that will be taken if the controlling expression is not within the range - * of any case edge. - */ -class SwitchInstruction extends Instruction { - SwitchInstruction() { this.getOpcode() instanceof Opcode::Switch } - - /** Gets the operand that provides the integer value controlling the switch. */ - final ConditionOperand getExpressionOperand() { result = this.getAnOperand() } - - /** Gets the instruction whose result provides the integer value controlling the switch. */ - final Instruction getExpression() { result = this.getExpressionOperand().getDef() } - - /** Gets the successor instructions along the case edges of the switch. */ - final Instruction getACaseSuccessor() { exists(CaseEdge edge | result = this.getSuccessor(edge)) } - - /** Gets the successor instruction along the default edge of the switch, if any. */ - final Instruction getDefaultSuccessor() { result = this.getSuccessor(EdgeKind::defaultEdge()) } -} - -/** - * An instruction that calls a function. - */ -class CallInstruction extends Instruction { - CallInstruction() { this.getOpcode() instanceof Opcode::Call } - - final override string getImmediateString() { - result = this.getStaticCallTarget().toString() - or - not exists(this.getStaticCallTarget()) and result = "?" - } - - /** - * Gets the operand the specifies the target function of the call. - */ - final CallTargetOperand getCallTargetOperand() { result = this.getAnOperand() } - - /** - * Gets the `Instruction` that computes the target function of the call. This is usually a - * `FunctionAddress` instruction, but can also be an arbitrary instruction that produces a - * function pointer. - */ - final Instruction getCallTarget() { result = this.getCallTargetOperand().getDef() } - - /** - * Gets all of the argument operands of the call, including the `this` pointer, if any. - */ - final ArgumentOperand getAnArgumentOperand() { result = this.getAnOperand() } - - /** - * Gets the `Function` that the call targets, if this is statically known. - */ - final Language::Function getStaticCallTarget() { - result = this.getCallTarget().(FunctionAddressInstruction).getFunctionSymbol() - } - - /** - * Gets all of the arguments of the call, including the `this` pointer, if any. - */ - final Instruction getAnArgument() { result = this.getAnArgumentOperand().getDef() } - - /** - * Gets the `this` pointer argument operand of the call, if any. - */ - final ThisArgumentOperand getThisArgumentOperand() { result = this.getAnOperand() } - - /** - * Gets the `this` pointer argument of the call, if any. - */ - final Instruction getThisArgument() { result = this.getThisArgumentOperand().getDef() } - - /** - * Gets the argument operand at the specified index. - */ - pragma[noinline] - final PositionalArgumentOperand getPositionalArgumentOperand(int index) { - result = this.getAnOperand() and - result.getIndex() = index - } - - /** - * Gets the argument at the specified index. - */ - pragma[noinline] - final Instruction getPositionalArgument(int index) { - result = this.getPositionalArgumentOperand(index).getDef() - } - - /** - * Gets the argument operand at the specified index, or `this` if `index` is `-1`. - */ - pragma[noinline] - final ArgumentOperand getArgumentOperand(int index) { - index >= 0 and result = this.getPositionalArgumentOperand(index) - or - index = -1 and result = this.getThisArgumentOperand() - } - - /** - * Gets the argument at the specified index, or `this` if `index` is `-1`. - */ - pragma[noinline] - final Instruction getArgument(int index) { result = this.getArgumentOperand(index).getDef() } - - /** - * Gets the number of arguments of the call, including the `this` pointer, if any. - */ - final int getNumberOfArguments() { result = count(this.getAnArgumentOperand()) } - - /** - * Holds if the result is a side effect for the argument at the specified index, or `this` if - * `index` is `-1`. - * - * This helper predicate makes it easy to join on both of these columns at once, avoiding - * pathological join orders in case the argument index should get joined first. - */ - pragma[noinline] - final SideEffectInstruction getAParameterSideEffect(int index) { - this = result.getPrimaryInstruction() and - index = result.(IndexedInstruction).getIndex() - } -} - -/** - * An instruction representing a side effect of a function call. - */ -class SideEffectInstruction extends Instruction { - SideEffectInstruction() { this.getOpcode() instanceof SideEffectOpcode } - - /** - * Gets the instruction whose execution causes this side effect. - */ - final Instruction getPrimaryInstruction() { - result = Construction::getPrimaryInstructionForSideEffect(this) - } -} - -/** - * An instruction representing the side effect of a function call on any memory that might be - * accessed by that call. - */ -class CallSideEffectInstruction extends SideEffectInstruction { - CallSideEffectInstruction() { this.getOpcode() instanceof Opcode::CallSideEffect } -} - -/** - * An instruction representing the side effect of a function call on any memory - * that might be read by that call. - * - * This instruction is emitted instead of `CallSideEffectInstruction` when it is certain that the - * call target cannot write to escaped memory. - */ -class CallReadSideEffectInstruction extends SideEffectInstruction { - CallReadSideEffectInstruction() { this.getOpcode() instanceof Opcode::CallReadSideEffect } -} - -/** - * An instruction representing a read side effect of a function call on a - * specific parameter. - */ -class ReadSideEffectInstruction extends SideEffectInstruction, IndexedInstruction { - ReadSideEffectInstruction() { this.getOpcode() instanceof ReadSideEffectOpcode } - - /** Gets the operand for the value that will be read from this instruction, if known. */ - final SideEffectOperand getSideEffectOperand() { result = this.getAnOperand() } - - /** Gets the value that will be read from this instruction, if known. */ - final Instruction getSideEffect() { result = this.getSideEffectOperand().getDef() } - - /** Gets the operand for the address from which this instruction may read. */ - final AddressOperand getArgumentOperand() { result = this.getAnOperand() } - - /** Gets the address from which this instruction may read. */ - final Instruction getArgumentDef() { result = this.getArgumentOperand().getDef() } -} - -/** - * An instruction representing the read of an indirect parameter within a function call. - */ -class IndirectReadSideEffectInstruction extends ReadSideEffectInstruction { - IndirectReadSideEffectInstruction() { this.getOpcode() instanceof Opcode::IndirectReadSideEffect } -} - -/** - * An instruction representing the read of an indirect buffer parameter within a function call. - */ -class BufferReadSideEffectInstruction extends ReadSideEffectInstruction { - BufferReadSideEffectInstruction() { this.getOpcode() instanceof Opcode::BufferReadSideEffect } -} - -/** - * An instruction representing the read of an indirect buffer parameter within a function call. - */ -class SizedBufferReadSideEffectInstruction extends ReadSideEffectInstruction { - SizedBufferReadSideEffectInstruction() { - this.getOpcode() instanceof Opcode::SizedBufferReadSideEffect - } - - /** - * Gets the operand that holds the number of bytes read from the buffer. - */ - final BufferSizeOperand getBufferSizeOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the number of bytes read from the buffer. - */ - final Instruction getBufferSize() { result = this.getBufferSizeOperand().getDef() } -} - -/** - * An instruction representing a write side effect of a function call on a - * specific parameter. - */ -class WriteSideEffectInstruction extends SideEffectInstruction, IndexedInstruction { - WriteSideEffectInstruction() { this.getOpcode() instanceof WriteSideEffectOpcode } - - /** - * Get the operand that holds the address of the memory to be written. - */ - final AddressOperand getDestinationAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the address of the memory to be written. - */ - Instruction getDestinationAddress() { result = this.getDestinationAddressOperand().getDef() } -} - -/** - * An instruction representing the write of an indirect parameter within a function call. - */ -class IndirectMustWriteSideEffectInstruction extends WriteSideEffectInstruction { - IndirectMustWriteSideEffectInstruction() { - this.getOpcode() instanceof Opcode::IndirectMustWriteSideEffect - } -} - -/** - * An instruction representing the write of an indirect buffer parameter within a function call. The - * entire buffer is overwritten. - */ -class BufferMustWriteSideEffectInstruction extends WriteSideEffectInstruction { - BufferMustWriteSideEffectInstruction() { - this.getOpcode() instanceof Opcode::BufferMustWriteSideEffect - } -} - -/** - * An instruction representing the write of an indirect buffer parameter within a function call. The - * entire buffer is overwritten. - */ -class SizedBufferMustWriteSideEffectInstruction extends WriteSideEffectInstruction { - SizedBufferMustWriteSideEffectInstruction() { - this.getOpcode() instanceof Opcode::SizedBufferMustWriteSideEffect - } - - /** - * Gets the operand that holds the number of bytes written to the buffer. - */ - final BufferSizeOperand getBufferSizeOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the number of bytes written to the buffer. - */ - final Instruction getBufferSize() { result = this.getBufferSizeOperand().getDef() } -} - -/** - * An instruction representing the potential write of an indirect parameter within a function call. - * - * Unlike `IndirectWriteSideEffectInstruction`, the location might not be completely overwritten. - * written. - */ -class IndirectMayWriteSideEffectInstruction extends WriteSideEffectInstruction { - IndirectMayWriteSideEffectInstruction() { - this.getOpcode() instanceof Opcode::IndirectMayWriteSideEffect - } -} - -/** - * An instruction representing the write of an indirect buffer parameter within a function call. - * - * Unlike `BufferWriteSideEffectInstruction`, the buffer might not be completely overwritten. - */ -class BufferMayWriteSideEffectInstruction extends WriteSideEffectInstruction { - BufferMayWriteSideEffectInstruction() { - this.getOpcode() instanceof Opcode::BufferMayWriteSideEffect - } -} - -/** - * An instruction representing the write of an indirect buffer parameter within a function call. - * - * Unlike `BufferWriteSideEffectInstruction`, the buffer might not be completely overwritten. - */ -class SizedBufferMayWriteSideEffectInstruction extends WriteSideEffectInstruction { - SizedBufferMayWriteSideEffectInstruction() { - this.getOpcode() instanceof Opcode::SizedBufferMayWriteSideEffect - } - - /** - * Gets the operand that holds the number of bytes written to the buffer. - */ - final BufferSizeOperand getBufferSizeOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the number of bytes written to the buffer. - */ - final Instruction getBufferSize() { result = this.getBufferSizeOperand().getDef() } -} - -/** - * An instruction representing the initial value of newly allocated memory, such as the result of a - * call to `malloc`. - */ -class InitializeDynamicAllocationInstruction extends SideEffectInstruction { - InitializeDynamicAllocationInstruction() { - this.getOpcode() instanceof Opcode::InitializeDynamicAllocation - } - - /** - * Gets the operand that represents the address of the allocation this instruction is initializing. - */ - final AddressOperand getAllocationAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the address for the allocation this instruction is initializing. - */ - final Instruction getAllocationAddress() { result = this.getAllocationAddressOperand().getDef() } -} - -/** - * An instruction representing a GNU or MSVC inline assembly statement. - */ -class InlineAsmInstruction extends Instruction { - InlineAsmInstruction() { this.getOpcode() instanceof Opcode::InlineAsm } -} - -/** - * An instruction that throws an exception. - */ -class ThrowInstruction extends Instruction { - ThrowInstruction() { this.getOpcode() instanceof ThrowOpcode } -} - -/** - * An instruction that throws a new exception. - */ -class ThrowValueInstruction extends ThrowInstruction { - ThrowValueInstruction() { this.getOpcode() instanceof Opcode::ThrowValue } - - /** - * Gets the address operand of the exception thrown by this instruction. - */ - final AddressOperand getExceptionAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the address of the exception thrown by this instruction. - */ - final Instruction getExceptionAddress() { result = this.getExceptionAddressOperand().getDef() } - - /** - * Gets the operand for the exception thrown by this instruction. - */ - final LoadOperand getExceptionOperand() { result = this.getAnOperand() } - - /** - * Gets the exception thrown by this instruction. - */ - final Instruction getException() { result = this.getExceptionOperand().getDef() } -} - -/** - * An instruction that re-throws the current exception. - */ -class ReThrowInstruction extends ThrowInstruction { - ReThrowInstruction() { this.getOpcode() instanceof Opcode::ReThrow } -} - -/** - * An instruction that exits the current function by propagating an exception. - */ -class UnwindInstruction extends Instruction { - UnwindInstruction() { this.getOpcode() instanceof Opcode::Unwind } -} - -/** - * An instruction that starts a `catch` handler. - */ -class CatchInstruction extends Instruction { - CatchInstruction() { this.getOpcode() instanceof CatchOpcode } -} - -/** - * An instruction that catches an exception of a specific type. - */ -class CatchByTypeInstruction extends CatchInstruction { - Language::LanguageType exceptionType; - - CatchByTypeInstruction() { - this.getOpcode() instanceof Opcode::CatchByType and - exceptionType = Raw::getInstructionExceptionType(this) - } - - final override string getImmediateString() { result = exceptionType.toString() } - - /** - * Gets the type of exception to be caught. - */ - final Language::LanguageType getExceptionType() { result = exceptionType } -} - -/** - * An instruction that catches any exception. - */ -class CatchAnyInstruction extends CatchInstruction { - CatchAnyInstruction() { this.getOpcode() instanceof Opcode::CatchAny } -} - -/** - * An instruction that initializes all escaped memory. - */ -class AliasedDefinitionInstruction extends Instruction { - AliasedDefinitionInstruction() { this.getOpcode() instanceof Opcode::AliasedDefinition } -} - -/** - * An instruction that consumes all escaped memory on exit from the function. - */ -class AliasedUseInstruction extends Instruction { - AliasedUseInstruction() { this.getOpcode() instanceof Opcode::AliasedUse } -} - -/** - * An instruction representing the choice of one of multiple input values based on control flow. - * - * A `PhiInstruction` is inserted at the beginning of a block whenever two different definitions of - * the same variable reach that block. The `PhiInstruction` will have one operand corresponding to - * each control flow predecessor of the block, with that operand representing the version of the - * variable that flows from that predecessor. The result value of the `PhiInstruction` will be - * a copy of whichever operand corresponds to the actual predecessor that entered the block at - * runtime. - */ -class PhiInstruction extends Instruction { - PhiInstruction() { this.getOpcode() instanceof Opcode::Phi } - - /** - * Gets all of the instruction's `PhiInputOperand`s, representing the values that flow from each predecessor block. - */ - final PhiInputOperand getAnInputOperand() { result = this.getAnOperand() } - - /** - * Gets an instruction that defines the input to one of the operands of this - * instruction. It's possible for more than one operand to have the same - * defining instruction, so this predicate will have the same number of - * results as `getAnInputOperand()` or fewer. - */ - pragma[noinline] - final Instruction getAnInput() { result = this.getAnInputOperand().getDef() } - - /** - * Gets the input operand representing the value that flows from the specified predecessor block. - */ - final PhiInputOperand getInputOperand(IRBlock predecessorBlock) { - result = this.getAnOperand() and - result.getPredecessorBlock() = predecessorBlock - } -} - -/** - * An instruction representing the effect that a write to a memory may have on potential aliases of - * that memory. - * - * A `ChiInstruction` is inserted immediately after an instruction that writes to memory. The - * `ChiInstruction` has two operands. The first operand, given by `getTotalOperand()`, represents - * the previous state of all of the memory that might be aliased by the memory write. The second - * operand, given by `getPartialOperand()`, represents the memory that was actually modified by the - * memory write. The result of the `ChiInstruction` represents the same memory as - * `getTotalOperand()`, updated to include the changes due to the value that was actually stored by - * the memory write. - * - * As an example, suppose that variable `p` and `q` are pointers that may or may not point to the - * same memory: - * ``` - * *p = 5; - * x = *q; - * ``` - * - * The IR would look like: - * ``` - * r1_1 = VariableAddress[p] - * r1_2 = Load r1_1, m0_0 // Load the value of `p` - * r1_3 = Constant[5] - * m1_4 = Store r1_2, r1_3 // Store to `*p` - * m1_5 = ^Chi m0_1, m1_4 // Side effect of the previous Store on aliased memory - * r1_6 = VariableAddress[x] - * r1_7 = VariableAddress[q] - * r1_8 = Load r1_7, m0_2 // Load the value of `q` - * r1_9 = Load r1_8, m1_5 // Load the value of `*q` - * m1_10 = Store r1_6, r1_9 // Store to x - * ``` - * - * Note the `Chi` instruction after the store to `*p`. The indicates that the previous contents of - * aliased memory (`m0_1`) are merged with the new value written by the store (`m1_4`), producing a - * new version of aliased memory (`m1_5`). On the subsequent load from `*q`, the source operand of - * `*q` is `m1_5`, indicating that the store to `*p` may (or may not) have updated the memory - * pointed to by `q`. - * - * For more information about how `Chi` instructions are used to model memory side effects, see - * https://link.springer.com/content/pdf/10.1007%2F3-540-61053-7_66.pdf. - */ -class ChiInstruction extends Instruction { - ChiInstruction() { this.getOpcode() instanceof Opcode::Chi } - - /** - * Gets the operand that represents the previous state of all memory that might be aliased by the - * memory write. - */ - final ChiTotalOperand getTotalOperand() { result = this.getAnOperand() } - - /** - * Gets the operand that represents the previous state of all memory that might be aliased by the - * memory write. - */ - final Instruction getTotal() { result = this.getTotalOperand().getDef() } - - /** - * Gets the operand that represents the new value written by the memory write. - */ - final ChiPartialOperand getPartialOperand() { result = this.getAnOperand() } - - /** - * Gets the operand that represents the new value written by the memory write. - */ - final Instruction getPartial() { result = this.getPartialOperand().getDef() } - - /** - * Holds if the `ChiPartialOperand` totally, but not exactly, overlaps with the `ChiTotalOperand`. - * This means that the `ChiPartialOperand` will not override the entire memory associated with the - * `ChiTotalOperand`. - */ - final predicate isPartialUpdate() { Construction::chiOnlyPartiallyUpdatesLocation(this) } -} - -/** - * An instruction representing unreachable code. - * - * This instruction is inserted in place of the original target instruction of a `ConditionalBranch` - * or `Switch` instruction where that particular edge is infeasible. - */ -class UnreachedInstruction extends Instruction { - UnreachedInstruction() { this.getOpcode() instanceof Opcode::Unreached } -} - -/** - * An instruction representing a built-in operation. - * - * This is used to represent a variety of intrinsic operations provided by the compiler - * implementation, such as vector arithmetic. - */ -class BuiltInOperationInstruction extends Instruction { - Language::BuiltInOperation operation; - - BuiltInOperationInstruction() { - this.getOpcode() instanceof BuiltInOperationOpcode and - operation = Raw::getInstructionBuiltInOperation(this) - } - - /** - * Gets the language-specific `BuiltInOperation` object that specifies the operation that is - * performed by this instruction. - */ - final Language::BuiltInOperation getBuiltInOperation() { result = operation } -} - -/** - * An instruction representing a built-in operation that does not have a specific opcode. The - * actual operation is specified by the `getBuiltInOperation()` predicate. - */ -class BuiltInInstruction extends BuiltInOperationInstruction { - BuiltInInstruction() { this.getOpcode() instanceof Opcode::BuiltIn } - - final override string getImmediateString() { result = this.getBuiltInOperation().toString() } -} - -/** - * An instruction that returns a `va_list` to access the arguments passed to the `...` parameter. - * - * The operand specifies the address of the `IREllipsisVariable` used to represent the `...` - * parameter. The result is a `va_list` that initially refers to the first argument that was passed - * to the `...` parameter. - */ -class VarArgsStartInstruction extends UnaryInstruction { - VarArgsStartInstruction() { this.getOpcode() instanceof Opcode::VarArgsStart } -} - -/** - * An instruction that cleans up a `va_list` after it is no longer in use. - * - * The operand specifies the address of the `va_list` to clean up. This instruction does not return - * a result. - */ -class VarArgsEndInstruction extends UnaryInstruction { - VarArgsEndInstruction() { this.getOpcode() instanceof Opcode::VarArgsEnd } -} - -/** - * An instruction that returns the address of the argument currently pointed to by a `va_list`. - * - * The operand is the `va_list` that points to the argument. The result is the address of the - * argument. - */ -class VarArgInstruction extends UnaryInstruction { - VarArgInstruction() { this.getOpcode() instanceof Opcode::VarArg } -} - -/** - * An instruction that modifies a `va_list` to point to the next argument that was passed to the - * `...` parameter. - * - * The operand is the current `va_list`. The result is an updated `va_list` that points to the next - * argument of the `...` parameter. - */ -class NextVarArgInstruction extends UnaryInstruction { - NextVarArgInstruction() { this.getOpcode() instanceof Opcode::NextVarArg } -} - -/** - * An instruction that allocates a new object on the managed heap. - * - * This instruction is used to represent the allocation of a new object in C# using the `new` - * expression. This instruction does not invoke a constructor for the object. Instead, there will be - * a subsequent `Call` instruction to invoke the appropriate constructor directory, passing the - * result of the `NewObj` as the `this` argument. - * - * The result is the address of the newly allocated object. - */ -class NewObjInstruction extends Instruction { - NewObjInstruction() { this.getOpcode() instanceof Opcode::NewObj } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/Operand.qll b/csharp/ql/src/experimental/ir/implementation/raw/Operand.qll deleted file mode 100644 index c1743acdbae..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/Operand.qll +++ /dev/null @@ -1,499 +0,0 @@ -/** - * Provides classes that represent the input values of IR instructions. - */ - -private import internal.IRInternal -private import Instruction -private import IRBlock -private import internal.OperandImports as Imports -private import Imports::MemoryAccessKind -private import Imports::IRType -private import Imports::Overlap -private import Imports::OperandTag -private import Imports::TOperand -private import internal.OperandInternal - -/** - * An operand of an `Instruction` in this stage of the IR. Implemented as a union of the branches - * of `TOperand` that are used in this stage. - */ -private class TStageOperand = - TRegisterOperand or TNonSsaMemoryOperand or TPhiOperand or TChiOperand; - -/** - * A known location. Testing `loc instanceof KnownLocation` will account for non existing locations, as - * opposed to testing `not loc isntanceof UnknownLocation` - */ -private class KnownLocation extends Language::Location { - KnownLocation() { not this instanceof Language::UnknownLocation } -} - -/** - * An operand of an `Instruction`. The operand represents a use of the result of one instruction - * (the defining instruction) in another instruction (the use instruction) - */ -class Operand extends TStageOperand { - cached - Operand() { - // Ensure that the operand does not refer to instructions from earlier stages that are unreachable here - exists(Instruction use, Instruction def | this = registerOperand(use, _, def)) - or - exists(Instruction use | this = nonSsaMemoryOperand(use, _)) - or - exists(Instruction use, Instruction def, IRBlock predecessorBlock | - this = phiOperand(use, def, predecessorBlock, _) or - this = reusedPhiOperand(use, def, predecessorBlock, _) - ) - or - this = chiOperand(_, _) - } - - /** Gets a textual representation of this element. */ - string toString() { result = "Operand" } - - /** - * Gets the location of the source code for this operand. - * By default this is where the operand is used, but some subclasses may override this - * using `getAnyDef()` if it makes more sense. - */ - Language::Location getLocation() { result = this.getUse().getLocation() } - - /** - * Gets the function that contains this operand. - */ - final IRFunction getEnclosingIRFunction() { result = this.getUse().getEnclosingIRFunction() } - - /** - * Gets the `Instruction` that consumes this operand. - */ - Instruction getUse() { none() } - - /** - * Gets the `Instruction` whose result is the value of the operand. Unlike - * `getDef`, this also has a result when `isDefinitionInexact` holds, which - * means that the resulting instruction may only _partially_ or _potentially_ - * be the value of this operand. - */ - Instruction getAnyDef() { none() } - - /** - * Gets the `Instruction` whose result is the value of the operand. Unlike - * `getAnyDef`, this also has no result when `isDefinitionInexact` holds, - * which means that the resulting instruction must always be exactly the be - * the value of this operand. - */ - final Instruction getDef() { - result = this.getAnyDef() and - this.getDefinitionOverlap() instanceof MustExactlyOverlap - } - - /** - * Gets the overlap relationship between the operand's definition and its use. - */ - Overlap getDefinitionOverlap() { none() } - - /** - * Holds if the result of the definition instruction does not exactly overlap this use. - */ - final predicate isDefinitionInexact() { - not this.getDefinitionOverlap() instanceof MustExactlyOverlap - } - - /** - * Gets a prefix to use when dumping the operand in an operand list. - */ - string getDumpLabel() { result = "" } - - /** - * Gets a string that uniquely identifies this operand on its use instruction. - */ - string getDumpId() { result = "" } - - /** - * Gets a string describing this operand, suitable for display in IR dumps. This consists of the - * result ID of the instruction consumed by the operand, plus a label identifying the operand - * kind. - * - * For example: `this:r3_5` - */ - final string getDumpString() { - result = this.getDumpLabel() + this.getInexactSpecifier() + this.getDefinitionId() - } - - /** - * Gets a string containing the identifier of the definition of this use, or `m?` if the - * definition is not modeled in SSA. - */ - private string getDefinitionId() { - result = this.getAnyDef().getResultId() - or - not exists(this.getAnyDef()) and result = "m?" - } - - /** - * Gets a string prefix to prepend to the operand's definition ID in an IR dump, specifying whether the operand is - * an exact or inexact use of its definition. For an inexact use, the prefix is "~". For an exact use, the prefix is - * the empty string. - */ - private string getInexactSpecifier() { - if this.isDefinitionInexact() then result = "~" else result = "" - } - - /** - * Get the order in which the operand should be sorted in the operand list. - */ - int getDumpSortOrder() { result = -1 } - - /** - * Gets the type of the value consumed by this operand. This is usually the same as the - * result type of the definition instruction consumed by this operand. For register operands, - * this is always the case. For some memory operands, the operand type may be different from - * the definition type, such as in the case of a partial read or a read from a pointer that - * has been cast to a different type. - */ - Language::LanguageType getLanguageType() { result = this.getAnyDef().getResultLanguageType() } - - /** - * Gets the language-neutral type of the value consumed by this operand. This is usually the same - * as the result type of the definition instruction consumed by this operand. For register - * operands, this is always the case. For some memory operands, the operand type may be different - * from the definition type, such as in the case of a partial read or a read from a pointer that - * has been cast to a different type. - */ - final IRType getIRType() { result = this.getLanguageType().getIRType() } - - /** - * Gets the type of the value consumed by this operand. This is usually the same as the - * result type of the definition instruction consumed by this operand. For register operands, - * this is always the case. For some memory operands, the operand type may be different from - * the definition type, such as in the case of a partial read or a read from a pointer that - * has been cast to a different type. - */ - final Language::Type getType() { this.getLanguageType().hasType(result, _) } - - /** - * Holds if the value consumed by this operand is a glvalue. If this - * holds, the value of the operand represents the address of a location, - * and the type of the location is given by `getType()`. If this does - * not hold, the value of the operand represents a value whose type is - * given by `getType()`. - */ - final predicate isGLValue() { this.getLanguageType().hasType(_, true) } - - /** - * Gets the size of the value consumed by this operand, in bytes. If the operand does not have - * a known constant size, this predicate does not hold. - */ - final int getSize() { result = this.getLanguageType().getByteSize() } -} - -/** - * An operand that consumes a memory result (e.g. the `LoadOperand` on a `Load` instruction). - */ -class MemoryOperand extends Operand { - cached - MemoryOperand() { - this instanceof TNonSsaMemoryOperand or - this instanceof TPhiOperand or - this instanceof TChiOperand - } - - /** - * Gets the kind of memory access performed by the operand. - */ - MemoryAccessKind getMemoryAccess() { result = this.getUse().getOpcode().getReadMemoryAccess() } - - /** - * Holds if the memory access performed by this operand will not always read from every bit in the - * memory location. This is most commonly used for memory accesses that may or may not actually - * occur depending on runtime state (for example, the write side effect of an output parameter - * that is not written to on all paths), or for accesses where the memory location is a - * conservative estimate of the memory that might actually be accessed at runtime (for example, - * the global side effects of a function call). - */ - predicate hasMayReadMemoryAccess() { this.getUse().getOpcode().hasMayReadMemoryAccess() } - - /** - * Returns the operand that holds the memory address from which the current operand loads its - * value, if any. For example, in `r3 = Load r1, m2`, the result of `getAddressOperand()` for `m2` - * is `r1`. - */ - final AddressOperand getAddressOperand() { - this.getMemoryAccess().usesAddressOperand() and - result.getUse() = this.getUse() - } -} - -/** - * An operand that is not an operand of a `PhiInstruction`. - */ -class NonPhiOperand extends Operand { - Instruction useInstr; - OperandTag tag; - - NonPhiOperand() { - this = registerOperand(useInstr, tag, _) or - this = nonSsaMemoryOperand(useInstr, tag) or - this = chiOperand(useInstr, tag) - } - - final override Instruction getUse() { result = useInstr } - - final override string getDumpLabel() { result = tag.getLabel() } - - final override string getDumpId() { result = tag.getId() } - - final override int getDumpSortOrder() { result = tag.getSortOrder() } - - /** - * Gets the `OperandTag` that specifies how this operand is used by its `Instruction`. - */ - final OperandTag getOperandTag() { result = tag } -} - -/** - * An operand that consumes a register (non-memory) result. - */ -class RegisterOperand extends NonPhiOperand, TRegisterOperand { - override RegisterOperandTag tag; - Instruction defInstr; - - cached - RegisterOperand() { this = registerOperand(useInstr, tag, defInstr) } - - final override string toString() { result = tag.toString() } - - // most `RegisterOperands` have a more meaningful location at the definition - // the only exception are specific cases of `ThisArgumentOperand` - override Language::Location getLocation() { result = this.getAnyDef().getLocation() } - - final override Instruction getAnyDef() { result = defInstr } - - final override Overlap getDefinitionOverlap() { - // All register results overlap exactly with their uses. - result instanceof MustExactlyOverlap - } -} - -/** - * A memory operand other than the operand of a `Phi` instruction. - */ -class NonPhiMemoryOperand extends NonPhiOperand, MemoryOperand, TNonPhiMemoryOperand { - override MemoryOperandTag tag; - - cached - NonPhiMemoryOperand() { - this = nonSsaMemoryOperand(useInstr, tag) - or - this = chiOperand(useInstr, tag) - } - - final override string toString() { result = tag.toString() } - - final override Instruction getAnyDef() { - result = unique(Instruction defInstr | this.hasDefinition(defInstr, _)) - } - - final override Overlap getDefinitionOverlap() { this.hasDefinition(_, result) } - - pragma[noinline] - private predicate hasDefinition(Instruction defInstr, Overlap overlap) { - defInstr = Construction::getMemoryOperandDefinition(useInstr, tag, overlap) and - not Construction::isInCycle(useInstr) and - strictcount(Construction::getMemoryOperandDefinition(useInstr, tag, _)) = 1 - } - - /** - * Holds if the operand totally overlaps with its definition and consumes the - * bit range `[startBitOffset, endBitOffset)` relative to the start address of the definition. - */ - predicate getUsedInterval(int startBitOffset, int endBitOffset) { - Construction::getUsedInterval(this, startBitOffset, endBitOffset) - } -} - -/** - * A memory operand whose type may be different from the type of the result of its definition. - */ -class TypedOperand extends NonPhiMemoryOperand { - override TypedOperandTag tag; - - final override Language::LanguageType getLanguageType() { - result = Construction::getInstructionOperandType(useInstr, tag) - } -} - -/** - * The address operand of an instruction that loads or stores a value from - * memory (e.g. `Load`, `Store`). - */ -class AddressOperand extends RegisterOperand { - override AddressOperandTag tag; -} - -/** - * The buffer size operand of an instruction that represents a read or write of - * a buffer. - */ -class BufferSizeOperand extends RegisterOperand { - override BufferSizeOperandTag tag; -} - -/** - * The source value operand of an instruction that loads a value from memory (e.g. `Load`, - * `ReturnValue`, `ThrowValue`). - */ -class LoadOperand extends TypedOperand { - override LoadOperandTag tag; -} - -/** - * The source value operand of a `Store` instruction. - */ -class StoreValueOperand extends RegisterOperand { - override StoreValueOperandTag tag; -} - -/** - * The sole operand of a unary instruction (e.g. `Convert`, `Negate`, `Copy`). - */ -class UnaryOperand extends RegisterOperand { - override UnaryOperandTag tag; -} - -/** - * The left operand of a binary instruction (e.g. `Add`, `CompareEQ`). - */ -class LeftOperand extends RegisterOperand { - override LeftOperandTag tag; -} - -/** - * The right operand of a binary instruction (e.g. `Add`, `CompareEQ`). - */ -class RightOperand extends RegisterOperand { - override RightOperandTag tag; -} - -/** - * The condition operand of a `ConditionalBranch` or `Switch` instruction. - */ -class ConditionOperand extends RegisterOperand { - override ConditionOperandTag tag; -} - -/** - * The operand representing the target function of an `Call` instruction. - */ -class CallTargetOperand extends RegisterOperand { - override CallTargetOperandTag tag; -} - -/** - * An operand representing an argument to a function call. This includes both - * positional arguments (represented by `PositionalArgumentOperand`) and the - * implicit `this` argument, if any (represented by `ThisArgumentOperand`). - */ -class ArgumentOperand extends RegisterOperand { - override ArgumentOperandTag tag; - - /** Gets the `CallInstruction` for which this is an argument. */ - CallInstruction getCall() { result.getAnArgumentOperand() = this } -} - -/** - * An operand representing the implicit `this` argument to a member function - * call. - */ -class ThisArgumentOperand extends ArgumentOperand { - override ThisArgumentOperandTag tag; - - // in most cases the def location makes more sense, but in some corner cases it - // has an unknown location: in those cases we fall back to the use location - override Language::Location getLocation() { - if this.getAnyDef().getLocation() instanceof KnownLocation - then result = this.getAnyDef().getLocation() - else result = this.getUse().getLocation() - } -} - -/** - * An operand representing an argument to a function call. - */ -class PositionalArgumentOperand extends ArgumentOperand { - override PositionalArgumentOperandTag tag; - - /** - * Gets the zero-based index of the argument. - */ - final int getIndex() { result = tag.getArgIndex() } -} - -/** - * An operand representing memory read as a side effect of evaluating another instruction. - */ -class SideEffectOperand extends TypedOperand { - override SideEffectOperandTag tag; -} - -/** - * An operand of a `PhiInstruction`. - */ -class PhiInputOperand extends MemoryOperand, TPhiOperand { - PhiInstruction useInstr; - Instruction defInstr; - IRBlock predecessorBlock; - Overlap overlap; - - cached - PhiInputOperand() { - this = phiOperand(useInstr, defInstr, predecessorBlock, overlap) - or - this = reusedPhiOperand(useInstr, defInstr, predecessorBlock, overlap) - } - - override string toString() { result = "Phi" } - - final override PhiInstruction getUse() { result = useInstr } - - final override Instruction getAnyDef() { result = defInstr } - - final override Overlap getDefinitionOverlap() { result = overlap } - - final override int getDumpSortOrder() { - result = 11 + this.getPredecessorBlock().getDisplayIndex() - } - - final override string getDumpLabel() { - result = "from " + this.getPredecessorBlock().getDisplayIndex().toString() + ":" - } - - final override string getDumpId() { - result = this.getPredecessorBlock().getDisplayIndex().toString() - } - - /** - * Gets the predecessor block from which this value comes. - */ - final IRBlock getPredecessorBlock() { result = predecessorBlock } - - final override MemoryAccessKind getMemoryAccess() { result instanceof PhiMemoryAccess } -} - -/** - * The total operand of a Chi node, representing the previous value of the memory. - */ -class ChiTotalOperand extends NonPhiMemoryOperand { - override ChiTotalOperandTag tag; - - final override MemoryAccessKind getMemoryAccess() { result instanceof ChiTotalMemoryAccess } -} - -/** - * The partial operand of a Chi node, representing the value being written to part of the memory. - */ -class ChiPartialOperand extends NonPhiMemoryOperand { - override ChiPartialOperandTag tag; - - final override MemoryAccessKind getMemoryAccess() { result instanceof ChiPartialMemoryAccess } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/PrintIR.ql b/csharp/ql/src/experimental/ir/implementation/raw/PrintIR.ql deleted file mode 100644 index ac77496f283..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/PrintIR.ql +++ /dev/null @@ -1,8 +0,0 @@ -/** - * @name Print Raw IR - * @description Outputs a representation of the Raw IR graph - * @id cs/print-raw-ir - * @kind graph - */ - -import PrintIR diff --git a/csharp/ql/src/experimental/ir/implementation/raw/PrintIR.qll b/csharp/ql/src/experimental/ir/implementation/raw/PrintIR.qll deleted file mode 100644 index c4b18d9cb61..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/PrintIR.qll +++ /dev/null @@ -1,342 +0,0 @@ -/** - * Outputs a representation of the IR as a control flow graph. - * - * This file contains the actual implementation of `PrintIR.ql`. For test cases and very small - * databases, `PrintIR.ql` can be run directly to dump the IR for the entire database. For most - * uses, however, it is better to write a query that imports `PrintIR.qll`, extends - * `PrintIRConfiguration`, and overrides `shouldPrintDeclaration()` to select a subset of declarations - * to dump. - */ - -private import internal.IRInternal -private import IR -private import internal.PrintIRImports as Imports -import Imports::IRConfiguration - -private newtype TPrintIRConfiguration = MkPrintIRConfiguration() - -/** - * The query can extend this class to control which declarations are printed. - */ -class PrintIRConfiguration extends TPrintIRConfiguration { - /** Gets a textual representation of this configuration. */ - string toString() { result = "PrintIRConfiguration" } - - /** - * Holds if the IR for `func` should be printed. By default, holds for all - * functions, global and namespace variables, and static local variables. - */ - predicate shouldPrintDeclaration(Language::Declaration decl) { any() } -} - -/** - * Override of `IRConfiguration` to only evaluate debug strings for the functions that are to be dumped. - */ -private class FilteredIRConfiguration extends IRConfiguration { - override predicate shouldEvaluateDebugStringsForFunction(Language::Declaration func) { - shouldPrintDeclaration(func) - } -} - -private predicate shouldPrintDeclaration(Language::Declaration decl) { - exists(PrintIRConfiguration config | config.shouldPrintDeclaration(decl)) -} - -private predicate shouldPrintInstruction(Instruction i) { - exists(IRPropertyProvider provider | provider.shouldPrintInstruction(i)) -} - -private predicate shouldPrintOperand(Operand operand) { - exists(IRPropertyProvider provider | provider.shouldPrintOperand(operand)) -} - -private string getAdditionalInstructionProperty(Instruction instr, string key) { - exists(IRPropertyProvider provider | result = provider.getInstructionProperty(instr, key)) -} - -private string getAdditionalBlockProperty(IRBlock block, string key) { - exists(IRPropertyProvider provider | result = provider.getBlockProperty(block, key)) -} - -/** - * Gets the properties of an operand from any active property providers. - */ -private string getAdditionalOperandProperty(Operand operand, string key) { - exists(IRPropertyProvider provider | result = provider.getOperandProperty(operand, key)) -} - -/** - * Gets a string listing the properties of the operand and their corresponding values. If the - * operand has no properties, this predicate has no result. - */ -private string getOperandPropertyListString(Operand operand) { - result = - strictconcat(string key, string value | - value = getAdditionalOperandProperty(operand, key) - | - key + ":" + value, ", " - ) -} - -/** - * Gets a string listing the properties of the operand and their corresponding values. The list is - * surrounded by curly braces. If the operand has no properties, this predicate returns an empty - * string. - */ -private string getOperandPropertyString(Operand operand) { - result = "{" + getOperandPropertyListString(operand) + "}" - or - not exists(getOperandPropertyListString(operand)) and result = "" -} - -private newtype TPrintableIRNode = - TPrintableIRFunction(IRFunction irFunc) { shouldPrintDeclaration(irFunc.getFunction()) } or - TPrintableIRBlock(IRBlock block) { shouldPrintDeclaration(block.getEnclosingFunction()) } or - TPrintableInstruction(Instruction instr) { - shouldPrintInstruction(instr) and shouldPrintDeclaration(instr.getEnclosingFunction()) - } - -/** - * A node to be emitted in the IR graph. - */ -abstract private class PrintableIRNode extends TPrintableIRNode { - abstract string toString(); - - /** - * Gets the location to be emitted for the node. - */ - abstract Language::Location getLocation(); - - /** - * Gets the label to be emitted for the node. - */ - abstract string getLabel(); - - /** - * Gets the order in which the node appears in its parent node. - */ - abstract int getOrder(); - - /** - * Gets the parent of this node. - */ - abstract PrintableIRNode getParent(); - - /** - * Gets the kind of graph represented by this node ("graph" or "tree"). - */ - string getGraphKind() { none() } - - /** - * Holds if this node should always be rendered as text, even in a graphical - * viewer. - */ - predicate forceText() { none() } - - /** - * Gets the value of the node property with the specified key. - */ - string getProperty(string key) { - key = "semmle.label" and result = this.getLabel() - or - key = "semmle.order" and result = this.getOrder().toString() - or - key = "semmle.graphKind" and result = this.getGraphKind() - or - key = "semmle.forceText" and this.forceText() and result = "true" - } -} - -/** - * An IR graph node representing a `IRFunction` object. - */ -private class PrintableIRFunction extends PrintableIRNode, TPrintableIRFunction { - IRFunction irFunc; - - PrintableIRFunction() { this = TPrintableIRFunction(irFunc) } - - override string toString() { result = irFunc.toString() } - - override Language::Location getLocation() { result = irFunc.getLocation() } - - override string getLabel() { - result = Imports::LanguageDebug::getIdentityString(irFunc.getFunction()) - } - - override int getOrder() { - this = - rank[result + 1](PrintableIRFunction orderedFunc, Language::Location location | - location = orderedFunc.getIRFunction().getLocation() - | - orderedFunc - order by - location.getFile().getAbsolutePath(), location.getStartLine(), location.getStartColumn(), - orderedFunc.getLabel() - ) - } - - final override PrintableIRNode getParent() { none() } - - final IRFunction getIRFunction() { result = irFunc } -} - -/** - * An IR graph node representing an `IRBlock` object. - */ -private class PrintableIRBlock extends PrintableIRNode, TPrintableIRBlock { - IRBlock block; - - PrintableIRBlock() { this = TPrintableIRBlock(block) } - - override string toString() { result = this.getLabel() } - - override Language::Location getLocation() { result = block.getLocation() } - - override string getLabel() { result = "Block " + block.getDisplayIndex().toString() } - - override int getOrder() { result = block.getDisplayIndex() } - - final override string getGraphKind() { result = "tree" } - - final override predicate forceText() { any() } - - final override PrintableIRFunction getParent() { - result.getIRFunction() = block.getEnclosingIRFunction() - } - - override string getProperty(string key) { - result = PrintableIRNode.super.getProperty(key) or - result = getAdditionalBlockProperty(block, key) - } - - final IRBlock getBlock() { result = block } -} - -/** - * An IR graph node representing an `Instruction`. - */ -private class PrintableInstruction extends PrintableIRNode, TPrintableInstruction { - Instruction instr; - - PrintableInstruction() { this = TPrintableInstruction(instr) } - - override string toString() { result = instr.toString() } - - override Language::Location getLocation() { result = instr.getLocation() } - - override string getLabel() { - exists(IRBlock block | - instr = block.getAnInstruction() and - exists( - string resultString, string operationString, string operandsString, int resultWidth, - int operationWidth - | - resultString = instr.getResultString() and - operationString = instr.getOperationString() and - operandsString = this.getOperandsString() and - columnWidths(block, resultWidth, operationWidth) and - result = - resultString + getPaddingString(resultWidth - resultString.length()) + " = " + - operationString + getPaddingString(operationWidth - operationString.length()) + " : " + - operandsString - ) - ) - } - - override int getOrder() { result = instr.getDisplayIndexInBlock() } - - final override PrintableIRBlock getParent() { result.getBlock() = instr.getBlock() } - - final Instruction getInstruction() { result = instr } - - override string getProperty(string key) { - result = PrintableIRNode.super.getProperty(key) or - result = getAdditionalInstructionProperty(instr, key) - } - - /** - * Gets the string representation of the operand list. This is the same as - * `Instruction::getOperandsString()`, except that each operand is annotated with any properties - * provided by active `IRPropertyProvider` instances. - */ - private string getOperandsString() { - result = - concat(Operand operand | - operand = instr.getAnOperand() and - shouldPrintOperand(operand) - | - operand.getDumpString() + getOperandPropertyString(operand), ", " - order by - operand.getDumpSortOrder() - ) - } -} - -private predicate columnWidths(IRBlock block, int resultWidth, int operationWidth) { - resultWidth = max(Instruction instr | instr.getBlock() = block | instr.getResultString().length()) and - operationWidth = - max(Instruction instr | instr.getBlock() = block | instr.getOperationString().length()) -} - -private int maxColumnWidth() { - result = - max(Instruction instr, int width | - width = instr.getResultString().length() or - width = instr.getOperationString().length() or - width = instr.getOperandsString().length() - | - width - ) -} - -private string getPaddingString(int n) { - n = 0 and result = "" - or - n > 0 and n <= maxColumnWidth() and result = getPaddingString(n - 1) + " " -} - -/** - * Holds if `node` belongs to the output graph, and its property `key` has the given `value`. - */ -query predicate nodes(PrintableIRNode node, string key, string value) { - value = node.getProperty(key) -} - -private int getSuccessorIndex(IRBlock pred, IRBlock succ) { - succ = - rank[result + 1](IRBlock aSucc, EdgeKind kind | - aSucc = pred.getSuccessor(kind) - | - aSucc order by kind.toString() - ) -} - -/** - * Holds if the output graph contains an edge from `pred` to `succ`, and that edge's property `key` - * has the given `value`. - */ -query predicate edges(PrintableIRBlock pred, PrintableIRBlock succ, string key, string value) { - exists(EdgeKind kind, IRBlock predBlock, IRBlock succBlock | - predBlock = pred.getBlock() and - succBlock = succ.getBlock() and - predBlock.getSuccessor(kind) = succBlock and - ( - ( - key = "semmle.label" and - if predBlock.getBackEdgeSuccessor(kind) = succBlock - then value = kind.toString() + " (back edge)" - else value = kind.toString() - ) - or - key = "semmle.order" and - value = getSuccessorIndex(predBlock, succBlock).toString() - ) - ) -} - -/** - * Holds if `parent` is the parent node of `child` in the output graph. - */ -query predicate parents(PrintableIRNode child, PrintableIRNode parent) { - parent = child.getParent() -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/constant/ConstantAnalysis.qll b/csharp/ql/src/experimental/ir/implementation/raw/constant/ConstantAnalysis.qll deleted file mode 100644 index aac2e679a97..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/constant/ConstantAnalysis.qll +++ /dev/null @@ -1,62 +0,0 @@ -private import internal.ConstantAnalysisInternal -private import experimental.ir.internal.IntegerPartial -private import IR - -language[monotonicAggregates] -int getConstantValue(Instruction instr) { - result = instr.(IntegerConstantInstruction).getValue().toInt() - or - result = getBinaryInstructionValue(instr) - or - result = neg(getConstantValue(instr.(NegateInstruction).getUnary())) - or - result = getConstantValue(instr.(CopyInstruction).getSourceValue()) - or - exists(PhiInstruction phi | - phi = instr and - result = max(Instruction def | def = phi.getAnInput() | getConstantValueToPhi(def)) and - result = min(Instruction def | def = phi.getAnInput() | getConstantValueToPhi(def)) - ) -} - -pragma[noinline] -int getConstantValueToPhi(Instruction def) { - exists(PhiInstruction phi | - result = getConstantValue(def) and - def = phi.getAnInput() - ) -} - -pragma[noinline] -private predicate binaryInstructionOperands(BinaryInstruction instr, int left, int right) { - left = getConstantValue(instr.getLeft()) and - right = getConstantValue(instr.getRight()) -} - -pragma[noinline] -private int getBinaryInstructionValue(BinaryInstruction instr) { - exists(int left, int right | - binaryInstructionOperands(instr, left, right) and - ( - instr instanceof AddInstruction and result = add(left, right) - or - instr instanceof SubInstruction and result = sub(left, right) - or - instr instanceof MulInstruction and result = mul(left, right) - or - instr instanceof DivInstruction and result = div(left, right) - or - instr instanceof CompareEQInstruction and result = compareEQ(left, right) - or - instr instanceof CompareNEInstruction and result = compareNE(left, right) - or - instr instanceof CompareLTInstruction and result = compareLT(left, right) - or - instr instanceof CompareGTInstruction and result = compareGT(left, right) - or - instr instanceof CompareLEInstruction and result = compareLE(left, right) - or - instr instanceof CompareGEInstruction and result = compareGE(left, right) - ) - ) -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/constant/PrintConstantAnalysis.qll b/csharp/ql/src/experimental/ir/implementation/raw/constant/PrintConstantAnalysis.qll deleted file mode 100644 index 53f9295be4f..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/constant/PrintConstantAnalysis.qll +++ /dev/null @@ -1,11 +0,0 @@ -private import internal.ConstantAnalysisInternal -private import experimental.ir.internal.IntegerConstant -private import ConstantAnalysis -import IR - -private class ConstantAnalysisPropertyProvider extends IRPropertyProvider { - override string getInstructionProperty(Instruction instr, string key) { - key = "ConstantValue" and - result = getValue(getConstantValue(instr)).toString() - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/constant/internal/ConstantAnalysisInternal.qll b/csharp/ql/src/experimental/ir/implementation/raw/constant/internal/ConstantAnalysisInternal.qll deleted file mode 100644 index 6e2340af7ea..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/constant/internal/ConstantAnalysisInternal.qll +++ /dev/null @@ -1 +0,0 @@ -import experimental.ir.implementation.raw.IR as IR diff --git a/csharp/ql/src/experimental/ir/implementation/raw/gvn/PrintValueNumbering.qll b/csharp/ql/src/experimental/ir/implementation/raw/gvn/PrintValueNumbering.qll deleted file mode 100644 index a7fb1b3c07e..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/gvn/PrintValueNumbering.qll +++ /dev/null @@ -1,17 +0,0 @@ -private import internal.ValueNumberingImports -private import ValueNumbering - -/** - * Provides additional information about value numbering in IR dumps. - */ -class ValueNumberPropertyProvider extends IRPropertyProvider { - override string getInstructionProperty(Instruction instr, string key) { - exists(ValueNumber vn | - vn = valueNumber(instr) and - key = "valnum" and - if strictcount(vn.getAnInstruction()) > 1 - then result = vn.getDebugString() - else result = "unique" - ) - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/gvn/ValueNumbering.qll b/csharp/ql/src/experimental/ir/implementation/raw/gvn/ValueNumbering.qll deleted file mode 100644 index 2a46e16c52f..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/gvn/ValueNumbering.qll +++ /dev/null @@ -1,90 +0,0 @@ -private import internal.ValueNumberingInternal -private import internal.ValueNumberingImports - -/** - * The value number assigned to a particular set of instructions that produce equivalent results. - */ -class ValueNumber extends TValueNumber { - final string toString() { result = "GVN" } - - final string getDebugString() { - result = strictconcat(this.getAnInstruction().getResultId(), ", ") - } - - final Language::Location getLocation() { - if - exists(Instruction i | - i = this.getAnInstruction() and not i.getLocation() instanceof Language::UnknownLocation - ) - then - result = - min(Language::Location l | - l = this.getAnInstruction().getLocation() and not l instanceof Language::UnknownLocation - | - l - order by - l.getFile().getAbsolutePath(), l.getStartLine(), l.getStartColumn(), l.getEndLine(), - l.getEndColumn() - ) - else result instanceof Language::UnknownDefaultLocation - } - - /** - * Gets the instructions that have been assigned this value number. This will always produce at - * least one result. - */ - final Instruction getAnInstruction() { this = valueNumber(result) } - - /** - * Gets one of the instructions that was assigned this value number. The chosen instruction is - * deterministic but arbitrary. Intended for use only in debugging. - */ - final Instruction getExampleInstruction() { - result = - min(Instruction instr | - instr = this.getAnInstruction() - | - instr order by instr.getBlock().getDisplayIndex(), instr.getDisplayIndexInBlock() - ) - } - - /** - * Gets an `Operand` whose definition is exact and has this value number. - */ - final Operand getAUse() { this = valueNumber(result.getDef()) } - - final string getKind() { - this instanceof TVariableAddressValueNumber and result = "VariableAddress" - or - this instanceof TInitializeParameterValueNumber and result = "InitializeParameter" - or - this instanceof TConstantValueNumber and result = "Constant" - or - this instanceof TStringConstantValueNumber and result = "StringConstant" - or - this instanceof TFieldAddressValueNumber and result = "FieldAddress" - or - this instanceof TBinaryValueNumber and result = "Binary" - or - this instanceof TPointerArithmeticValueNumber and result = "PointerArithmetic" - or - this instanceof TUnaryValueNumber and result = "Unary" - or - this instanceof TInheritanceConversionValueNumber and result = "InheritanceConversion" - or - this instanceof TLoadTotalOverlapValueNumber and result = "LoadTotalOverlap" - or - this instanceof TUniqueValueNumber and result = "Unique" - } -} - -/** - * Gets the value number assigned to `instr`, if any. Returns at most one result. - */ -ValueNumber valueNumber(Instruction instr) { result = tvalueNumber(instr) } - -/** - * Gets the value number assigned to the exact definition of `op`, if any. - * Returns at most one result. - */ -ValueNumber valueNumberOfOperand(Operand op) { result = tvalueNumberOfOperand(op) } diff --git a/csharp/ql/src/experimental/ir/implementation/raw/gvn/internal/ValueNumberingImports.qll b/csharp/ql/src/experimental/ir/implementation/raw/gvn/internal/ValueNumberingImports.qll deleted file mode 100644 index 34bd754692d..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/gvn/internal/ValueNumberingImports.qll +++ /dev/null @@ -1,3 +0,0 @@ -import experimental.ir.internal.Overlap -import experimental.ir.internal.IRCSharpLanguage as Language -import experimental.ir.implementation.unaliased_ssa.IR diff --git a/csharp/ql/src/experimental/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll b/csharp/ql/src/experimental/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll deleted file mode 100644 index ec003891774..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll +++ /dev/null @@ -1,356 +0,0 @@ -private import ValueNumberingImports - -newtype TValueNumber = - TVariableAddressValueNumber(IRFunction irFunc, Language::AST ast) { - variableAddressValueNumber(_, irFunc, ast) - } or - TInitializeParameterValueNumber(IRFunction irFunc, Language::AST var) { - initializeParameterValueNumber(_, irFunc, var) - } or - TConstantValueNumber(IRFunction irFunc, IRType type, string value) { - constantValueNumber(_, irFunc, type, value) - } or - TStringConstantValueNumber(IRFunction irFunc, IRType type, string value) { - stringConstantValueNumber(_, irFunc, type, value) - } or - TFieldAddressValueNumber(IRFunction irFunc, Language::Field field, TValueNumber objectAddress) { - fieldAddressValueNumber(_, irFunc, field, objectAddress) - } or - TBinaryValueNumber( - IRFunction irFunc, Opcode opcode, TValueNumber leftOperand, TValueNumber rightOperand - ) { - binaryValueNumber(_, irFunc, opcode, leftOperand, rightOperand) - } or - TPointerArithmeticValueNumber( - IRFunction irFunc, Opcode opcode, int elementSize, TValueNumber leftOperand, - TValueNumber rightOperand - ) { - pointerArithmeticValueNumber(_, irFunc, opcode, elementSize, leftOperand, rightOperand) - } or - TUnaryValueNumber(IRFunction irFunc, Opcode opcode, TValueNumber operand) { - unaryValueNumber(_, irFunc, opcode, operand) - } or - TInheritanceConversionValueNumber( - IRFunction irFunc, Opcode opcode, Language::Class baseClass, Language::Class derivedClass, - TValueNumber operand - ) { - inheritanceConversionValueNumber(_, irFunc, opcode, baseClass, derivedClass, operand) - } or - TLoadTotalOverlapValueNumber( - IRFunction irFunc, IRType type, TValueNumber memOperand, TValueNumber operand - ) { - loadTotalOverlapValueNumber(_, irFunc, type, memOperand, operand) - } or - TUniqueValueNumber(IRFunction irFunc, Instruction instr) { uniqueValueNumber(instr, irFunc) } - -/** - * A `CopyInstruction` whose source operand's value is congruent to the definition of that source - * operand. - * For example: - * ``` - * Point p = { 1, 2 }; - * Point q = p; - * int a = p.x; - * ``` - * The use of `p` on line 2 is linked to the definition of `p` on line 1, and is congruent to that - * definition because it accesses the exact same memory. - * The use of `p.x` on line 3 is linked to the definition of `p` on line 1 as well, but is not - * congruent to that definition because `p.x` accesses only a subset of the memory defined by `p`. - */ -class CongruentCopyInstruction extends CopyInstruction { - CongruentCopyInstruction() { - this.getSourceValueOperand().getDefinitionOverlap() instanceof MustExactlyOverlap - } -} - -class LoadTotalOverlapInstruction extends LoadInstruction { - LoadTotalOverlapInstruction() { - this.getSourceValueOperand().getDefinitionOverlap() instanceof MustTotallyOverlap - } -} - -/** - * Holds if this library knows how to assign a value number to the specified instruction, other than - * a `unique` value number that is never shared by multiple instructions. - */ -private predicate numberableInstruction(Instruction instr) { - instr instanceof VariableAddressInstruction - or - instr instanceof InitializeParameterInstruction - or - instr instanceof ConstantInstruction - or - instr instanceof StringConstantInstruction - or - instr instanceof FieldAddressInstruction - or - instr instanceof BinaryInstruction - or - instr instanceof UnaryInstruction and not instr instanceof CopyInstruction - or - instr instanceof PointerArithmeticInstruction - or - instr instanceof CongruentCopyInstruction - or - instr instanceof LoadTotalOverlapInstruction -} - -private predicate filteredNumberableInstruction(Instruction instr) { - // count rather than strictcount to handle missing AST elements - // separate instanceof and inline casts to avoid failed casts with a count of 0 - instr instanceof VariableAddressInstruction and - count(instr.(VariableAddressInstruction).getIRVariable().getAst()) != 1 - or - instr instanceof ConstantInstruction and - count(instr.getResultIRType()) != 1 - or - instr instanceof FieldAddressInstruction and - count(instr.(FieldAddressInstruction).getField()) != 1 - or - instr instanceof InheritanceConversionInstruction and - ( - count(instr.(InheritanceConversionInstruction).getBaseClass()) != 1 or - count(instr.(InheritanceConversionInstruction).getDerivedClass()) != 1 - ) -} - -private predicate variableAddressValueNumber( - VariableAddressInstruction instr, IRFunction irFunc, Language::AST ast -) { - instr.getEnclosingIRFunction() = irFunc and - // The underlying AST element is used as value-numbering key instead of the - // `IRVariable` to work around a problem where a variable or expression with - // multiple types gives rise to multiple `IRVariable`s. - unique( | | instr.getIRVariable().getAst()) = ast -} - -private predicate initializeParameterValueNumber( - InitializeParameterInstruction instr, IRFunction irFunc, Language::AST var -) { - instr.getEnclosingIRFunction() = irFunc and - // The underlying AST element is used as value-numbering key instead of the - // `IRVariable` to work around a problem where a variable or expression with - // multiple types gives rise to multiple `IRVariable`s. - instr.getIRVariable().getAst() = var -} - -private predicate constantValueNumber( - ConstantInstruction instr, IRFunction irFunc, IRType type, string value -) { - instr.getEnclosingIRFunction() = irFunc and - unique( | | instr.getResultIRType()) = type and - instr.getValue() = value -} - -private predicate stringConstantValueNumber( - StringConstantInstruction instr, IRFunction irFunc, IRType type, string value -) { - instr.getEnclosingIRFunction() = irFunc and - instr.getResultIRType() = type and - instr.getValue().getValue() = value -} - -private predicate fieldAddressValueNumber( - FieldAddressInstruction instr, IRFunction irFunc, Language::Field field, - TValueNumber objectAddress -) { - instr.getEnclosingIRFunction() = irFunc and - unique( | | instr.getField()) = field and - tvalueNumber(instr.getObjectAddress()) = objectAddress -} - -pragma[nomagic] -private predicate binaryValueNumber0( - BinaryInstruction instr, IRFunction irFunc, Opcode opcode, boolean isLeft, - TValueNumber valueNumber -) { - not instr instanceof PointerArithmeticInstruction and - instr.getEnclosingIRFunction() = irFunc and - instr.getOpcode() = opcode and - ( - isLeft = true and - tvalueNumber(instr.getLeft()) = valueNumber - or - isLeft = false and - tvalueNumber(instr.getRight()) = valueNumber - ) -} - -private predicate binaryValueNumber( - BinaryInstruction instr, IRFunction irFunc, Opcode opcode, TValueNumber leftOperand, - TValueNumber rightOperand -) { - binaryValueNumber0(instr, irFunc, opcode, true, leftOperand) and - binaryValueNumber0(instr, irFunc, opcode, false, rightOperand) -} - -pragma[nomagic] -private predicate pointerArithmeticValueNumber0( - PointerArithmeticInstruction instr, IRFunction irFunc, Opcode opcode, int elementSize, - boolean isLeft, TValueNumber valueNumber -) { - instr.getEnclosingIRFunction() = irFunc and - instr.getOpcode() = opcode and - instr.getElementSize() = elementSize and - ( - isLeft = true and - tvalueNumber(instr.getLeft()) = valueNumber - or - isLeft = false and - tvalueNumber(instr.getRight()) = valueNumber - ) -} - -private predicate pointerArithmeticValueNumber( - PointerArithmeticInstruction instr, IRFunction irFunc, Opcode opcode, int elementSize, - TValueNumber leftOperand, TValueNumber rightOperand -) { - pointerArithmeticValueNumber0(instr, irFunc, opcode, elementSize, true, leftOperand) and - pointerArithmeticValueNumber0(instr, irFunc, opcode, elementSize, false, rightOperand) -} - -private predicate unaryValueNumber( - UnaryInstruction instr, IRFunction irFunc, Opcode opcode, TValueNumber operand -) { - instr.getEnclosingIRFunction() = irFunc and - not instr instanceof InheritanceConversionInstruction and - not instr instanceof CopyInstruction and - not instr instanceof FieldAddressInstruction and - instr.getOpcode() = opcode and - tvalueNumber(instr.getUnary()) = operand -} - -private predicate inheritanceConversionValueNumber( - InheritanceConversionInstruction instr, IRFunction irFunc, Opcode opcode, - Language::Class baseClass, Language::Class derivedClass, TValueNumber operand -) { - instr.getEnclosingIRFunction() = irFunc and - instr.getOpcode() = opcode and - tvalueNumber(instr.getUnary()) = operand and - unique( | | instr.getBaseClass()) = baseClass and - unique( | | instr.getDerivedClass()) = derivedClass -} - -pragma[nomagic] -private predicate loadTotalOverlapValueNumber0( - LoadTotalOverlapInstruction instr, IRFunction irFunc, IRType type, TValueNumber valueNumber, - boolean isAddress -) { - instr.getEnclosingIRFunction() = irFunc and - instr.getResultIRType() = type and - ( - isAddress = true and - tvalueNumberOfOperand(instr.getSourceAddressOperand()) = valueNumber - or - isAddress = false and - tvalueNumber(instr.getSourceValueOperand().getAnyDef()) = valueNumber - ) -} - -private predicate loadTotalOverlapValueNumber( - LoadTotalOverlapInstruction instr, IRFunction irFunc, IRType type, TValueNumber memOperand, - TValueNumber operand -) { - loadTotalOverlapValueNumber0(instr, irFunc, type, operand, true) and - loadTotalOverlapValueNumber0(instr, irFunc, type, memOperand, false) -} - -/** - * Holds if `instr` should be assigned a unique value number because this library does not know how - * to determine if two instances of that instruction are equivalent. - */ -private predicate uniqueValueNumber(Instruction instr, IRFunction irFunc) { - instr.getEnclosingIRFunction() = irFunc and - not instr.getResultIRType() instanceof IRVoidType and - ( - not numberableInstruction(instr) - or - filteredNumberableInstruction(instr) - ) -} - -/** - * Gets the value number assigned to `instr`, if any. Returns at most one result. - */ -cached -TValueNumber tvalueNumber(Instruction instr) { - result = nonUniqueValueNumber(instr) - or - exists(IRFunction irFunc | - uniqueValueNumber(instr, irFunc) and - result = TUniqueValueNumber(irFunc, instr) - ) -} - -/** - * Gets the value number assigned to the exact definition of `op`, if any. - * Returns at most one result. - */ -TValueNumber tvalueNumberOfOperand(Operand op) { result = tvalueNumber(op.getDef()) } - -/** - * Gets the value number assigned to `instr`, if any, unless that instruction is assigned a unique - * value number. - */ -private TValueNumber nonUniqueValueNumber(Instruction instr) { - exists(IRFunction irFunc | - irFunc = instr.getEnclosingIRFunction() and - ( - exists(Language::AST ast | - variableAddressValueNumber(instr, irFunc, ast) and - result = TVariableAddressValueNumber(irFunc, ast) - ) - or - exists(Language::AST var | - initializeParameterValueNumber(instr, irFunc, var) and - result = TInitializeParameterValueNumber(irFunc, var) - ) - or - exists(string value, IRType type | - constantValueNumber(instr, irFunc, type, value) and - result = TConstantValueNumber(irFunc, type, value) - ) - or - exists(IRType type, string value | - stringConstantValueNumber(instr, irFunc, type, value) and - result = TStringConstantValueNumber(irFunc, type, value) - ) - or - exists(Language::Field field, TValueNumber objectAddress | - fieldAddressValueNumber(instr, irFunc, field, objectAddress) and - result = TFieldAddressValueNumber(irFunc, field, objectAddress) - ) - or - exists(Opcode opcode, TValueNumber leftOperand, TValueNumber rightOperand | - binaryValueNumber(instr, irFunc, opcode, leftOperand, rightOperand) and - result = TBinaryValueNumber(irFunc, opcode, leftOperand, rightOperand) - ) - or - exists(Opcode opcode, TValueNumber operand | - unaryValueNumber(instr, irFunc, opcode, operand) and - result = TUnaryValueNumber(irFunc, opcode, operand) - ) - or - exists( - Opcode opcode, Language::Class baseClass, Language::Class derivedClass, TValueNumber operand - | - inheritanceConversionValueNumber(instr, irFunc, opcode, baseClass, derivedClass, operand) and - result = TInheritanceConversionValueNumber(irFunc, opcode, baseClass, derivedClass, operand) - ) - or - exists(Opcode opcode, int elementSize, TValueNumber leftOperand, TValueNumber rightOperand | - pointerArithmeticValueNumber(instr, irFunc, opcode, elementSize, leftOperand, rightOperand) and - result = - TPointerArithmeticValueNumber(irFunc, opcode, elementSize, leftOperand, rightOperand) - ) - or - exists(IRType type, TValueNumber memOperand, TValueNumber operand | - loadTotalOverlapValueNumber(instr, irFunc, type, memOperand, operand) and - result = TLoadTotalOverlapValueNumber(irFunc, type, memOperand, operand) - ) - or - // The value number of a copy is just the value number of its source value. - result = tvalueNumber(instr.(CongruentCopyInstruction).getSourceValue()) - ) - ) -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/IRBlockImports.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/IRBlockImports.qll deleted file mode 100644 index c80761a68cf..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/IRBlockImports.qll +++ /dev/null @@ -1 +0,0 @@ -import experimental.ir.implementation.EdgeKind as EdgeKind diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/IRConsistencyImports.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/IRConsistencyImports.qll deleted file mode 100644 index f43546fe76d..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/IRConsistencyImports.qll +++ /dev/null @@ -1 +0,0 @@ -import experimental.ir.internal.IRCSharpLanguageDebug as LanguageDebug diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/IRConstruction.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/IRConstruction.qll deleted file mode 100644 index 5811f2ff946..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/IRConstruction.qll +++ /dev/null @@ -1,435 +0,0 @@ -import csharp -import experimental.ir.implementation.raw.IR -private import experimental.ir.implementation.internal.OperandTag -private import experimental.ir.implementation.internal.IRFunctionBase -private import experimental.ir.implementation.internal.TInstruction -private import experimental.ir.internal.CSharpType -private import experimental.ir.internal.Overlap -private import experimental.ir.internal.TempVariableTag -private import InstructionTag -private import TranslatedCondition -private import TranslatedElement -private import TranslatedExpr -private import TranslatedStmt -private import desugar.Foreach -private import TranslatedFunction -private import experimental.ir.internal.IRCSharpLanguage as Language - -TranslatedElement getInstructionTranslatedElement(Instruction instruction) { - instruction = TRawInstruction(result, _) -} - -InstructionTag getInstructionTag(Instruction instruction) { - instruction = TRawInstruction(_, result) -} - -pragma[noinline] -private predicate instructionOrigin( - Instruction instruction, TranslatedElement element, InstructionTag tag -) { - element = getInstructionTranslatedElement(instruction) and - tag = getInstructionTag(instruction) -} - -class TStageInstruction = TRawInstruction; - -/** - * Provides the portion of the parameterized IR interface that is used to construct the initial - * "raw" stage of the IR. The other stages of the IR do not expose these predicates. - */ -cached -module Raw { - class InstructionTag1 = TranslatedElement; - - class InstructionTag2 = InstructionTag; - - cached - predicate functionHasIR(Callable callable) { exists(getTranslatedFunction(callable)) } - - cached - predicate varHasIRFunc(Field field) { none() } - - cached - predicate hasInstruction(TranslatedElement element, InstructionTag tag) { - element.hasInstruction(_, tag, _) - } - - cached - predicate hasUserVariable(Callable callable, Variable var, CSharpType type) { - getTranslatedFunction(callable).hasUserVariable(var, type) - } - - cached - predicate hasTempVariable( - Callable callable, Language::AST ast, TempVariableTag tag, CSharpType type - ) { - exists(TranslatedElement element | - element.getAst() = ast and - callable = element.getFunction() and - element.hasTempVariable(tag, type) - ) - } - - cached - predicate hasStringLiteral( - Callable callable, Language::AST ast, CSharpType type, StringLiteral literal - ) { - literal = ast and - literal.getEnclosingCallable() = callable and - getTypeForPRValue(literal.getType()) = type - } - - cached - predicate hasDynamicInitializationFlag(Callable callable, Language::Variable var, CSharpType type) { - none() - } - - cached - Expr getInstructionConvertedResultExpression(Instruction instruction) { - exists(TranslatedExpr translatedExpr | - translatedExpr = getTranslatedExpr(result) and - instruction = translatedExpr.getResult() - ) - } - - cached - Expr getInstructionUnconvertedResultExpression(Instruction instruction) { - exists(Expr converted, TranslatedExpr translatedExpr | result = converted.stripCasts() | - translatedExpr = getTranslatedExpr(converted) and - instruction = translatedExpr.getResult() - ) - } - - cached - IRVariable getInstructionVariable(Instruction instruction) { - exists(TranslatedElement element, InstructionTag tag | - element = getInstructionTranslatedElement(instruction) and - tag = getInstructionTag(instruction) and - ( - result = element.getInstructionVariable(tag) or - result.(IRStringLiteral).getAst() = element.getInstructionStringLiteral(tag) - ) - ) - } - - cached - Field getInstructionField(Instruction instruction) { - exists(TranslatedElement element, InstructionTag tag | - instructionOrigin(instruction, element, tag) and - result = element.getInstructionField(tag) - ) - } - - cached - int getInstructionIndex(Instruction instruction) { none() } - - cached - Callable getInstructionFunction(Instruction instruction) { - result = - getInstructionTranslatedElement(instruction) - .getInstructionFunction(getInstructionTag(instruction)) - } - - cached - string getInstructionConstantValue(Instruction instruction) { - result = - getInstructionTranslatedElement(instruction) - .getInstructionConstantValue(getInstructionTag(instruction)) - } - - cached - CSharpType getInstructionExceptionType(Instruction instruction) { - result = - getInstructionTranslatedElement(instruction) - .getInstructionExceptionType(getInstructionTag(instruction)) - } - - cached - predicate getInstructionInheritance(Instruction instruction, Class baseClass, Class derivedClass) { - getInstructionTranslatedElement(instruction) - .getInstructionInheritance(getInstructionTag(instruction), baseClass, derivedClass) - } - - cached - int getInstructionElementSize(Instruction instruction) { - exists(TranslatedElement element, InstructionTag tag | - instructionOrigin(instruction, element, tag) and - result = element.getInstructionElementSize(tag) - ) - } - - cached - Language::BuiltInOperation getInstructionBuiltInOperation(Instruction instr) { none() } -} - -import Cached - -cached -private module Cached { - cached - predicate getInstructionOpcode(Opcode opcode, TRawInstruction instr) { - exists(TranslatedElement element, InstructionTag tag | - instructionOrigin(instr, element, tag) and - element.hasInstruction(opcode, tag, _) - ) - } - - cached - IRFunctionBase getInstructionEnclosingIRFunction(TRawInstruction instr) { - result.getFunction() = getInstructionTranslatedElement(instr).getFunction() - } - - cached - predicate hasInstruction(TRawInstruction instr) { any() } - - cached - predicate hasModeledMemoryResult(Instruction instruction) { none() } - - cached - predicate hasConflatedMemoryResult(Instruction instruction) { - instruction instanceof AliasedDefinitionInstruction - or - instruction.getOpcode() instanceof Opcode::InitializeNonLocal - } - - cached - Instruction getRegisterOperandDefinition(Instruction instruction, RegisterOperandTag tag) { - result = - getInstructionTranslatedElement(instruction) - .getInstructionOperand(getInstructionTag(instruction), tag) - } - - cached - Instruction getMemoryOperandDefinition( - Instruction instruction, MemoryOperandTag tag, Overlap overlap - ) { - overlap instanceof MustTotallyOverlap and - result = - getInstructionTranslatedElement(instruction) - .getInstructionOperand(getInstructionTag(instruction), tag) - } - - /** Gets a non-phi instruction that defines an operand of `instr`. */ - private Instruction getNonPhiOperandDef(Instruction instr) { - result = getRegisterOperandDefinition(instr, _) - or - result = getMemoryOperandDefinition(instr, _, _) - } - - /** - * Holds if the operand totally overlaps with its definition and consumes the - * bit range `[startBitOffset, endBitOffset)`. - */ - cached - predicate getUsedInterval(Operand operand, int startBit, int endBit) { none() } - - cached - predicate chiOnlyPartiallyUpdatesLocation(ChiInstruction chi) { none() } - - /** - * Holds if `instr` is part of a cycle in the operand graph that doesn't go - * through a phi instruction and therefore should be impossible. - * - * If such cycles are present, either due to a programming error in the IR - * generation or due to a malformed database, it can cause infinite loops in - * analyses that assume a cycle-free graph of non-phi operands. Therefore it's - * better to remove these operands than to leave cycles in the operand graph. - */ - pragma[noopt] - cached - predicate isInCycle(Instruction instr) { - instr instanceof Instruction and - getNonPhiOperandDef+(instr) = instr - } - - cached - CSharpType getInstructionOperandType(Instruction instruction, TypedOperandTag tag) { - // For all `LoadInstruction`s, the operand type of the `LoadOperand` is the same as - // the result type of the load. - if instruction instanceof LoadInstruction - then result = instruction.(LoadInstruction).getResultLanguageType() - else - result = - getInstructionTranslatedElement(instruction) - .getInstructionOperandType(getInstructionTag(instruction), tag) - } - - cached - Instruction getPhiOperandDefinition( - PhiInstruction instruction, IRBlock predecessorBlock, Overlap overlap - ) { - none() - } - - cached - Instruction getPhiInstructionBlockStart(PhiInstruction instr) { none() } - - cached - Instruction getInstructionSuccessor(Instruction instruction, EdgeKind kind) { - result = - getInstructionTranslatedElement(instruction) - .getInstructionSuccessor(getInstructionTag(instruction), kind) - } - - // This predicate has pragma[noopt] because otherwise the `getAChild*` calls - // get joined too early. The join order for the loop cases goes like this: - // - Find all loops of that type (tens of thousands). - // - Find all edges into the start of the loop (x 2). - // - Restrict to edges that originate within the loop (/ 2). - pragma[noopt] - cached - Instruction getInstructionBackEdgeSuccessor(Instruction instruction, EdgeKind kind) { - // While loop: - // Any edge from within the body of the loop to the condition of the loop - // is a back edge. This includes edges from `continue` and the fall-through - // edge(s) after the last instruction(s) in the body. - exists(TranslatedWhileStmt s | - s instanceof TranslatedWhileStmt and - result = s.getFirstConditionInstruction() and - exists(TranslatedElement inBody, InstructionTag tag | - result = inBody.getInstructionSuccessor(tag, kind) and - exists(TranslatedElement body | body = s.getBody() | inBody = body.getAChild*()) and - instruction = inBody.getInstruction(tag) - ) - ) - or - // Compiler generated foreach while loop: - // Same as above - exists(TranslatedForeachWhile s | - result = s.getFirstInstruction() and - exists(TranslatedElement inBody, InstructionTag tag | - result = inBody.getInstructionSuccessor(tag, kind) and - exists(TranslatedElement body | body = s.getBody() | inBody = body.getAChild*()) and - instruction = inBody.getInstruction(tag) - ) - ) - or - // Do-while loop: - // The back edge should be the edge(s) from the condition to the - // body. This ensures that it's the back edge that will be pruned in a `do - // { ... } while (0)` statement. Note that all `continue` statements in a - // do-while loop produce forward edges. - exists(TranslatedDoStmt s | - s instanceof TranslatedDoStmt and - exists(TranslatedStmt body | body = s.getBody() | result = body.getFirstInstruction()) and - exists(TranslatedElement inCondition, InstructionTag tag | - result = inCondition.getInstructionSuccessor(tag, kind) and - exists(TranslatedElement condition | condition = s.getCondition() | - inCondition = condition.getAChild*() - ) and - instruction = inCondition.getInstruction(tag) - ) - ) - or - // For loop: - // Any edge from within the body or update of the loop to the condition of - // the loop is a back edge. When there is no loop update expression, this - // includes edges from `continue` and the fall-through edge(s) after the - // last instruction(s) in the body. A for loop may not have a condition, in - // which case `getFirstConditionInstruction` returns the body instead. - exists(TranslatedForStmt s | - s instanceof TranslatedForStmt and - result = s.getFirstConditionInstruction() and - exists(TranslatedElement inLoop, InstructionTag tag | - result = inLoop.getInstructionSuccessor(tag, kind) and - exists(TranslatedElement bodyOrUpdate | - bodyOrUpdate = s.getBody() - or - bodyOrUpdate = s.getUpdate(_) - | - inLoop = bodyOrUpdate.getAChild*() - ) and - instruction = inLoop.getInstruction(tag) - ) - ) - or - // Goto statement: - // As a conservative approximation, any edge out of `goto` is a back edge - // unless it goes strictly forward in the program text. A `goto` whose - // source and target are both inside a macro will be seen as having the - // same location for source and target, so we conservatively assume that - // such a `goto` creates a back edge. - exists(TranslatedElement s, GotoStmt goto | - goto instanceof GotoStmt and - not isStrictlyForwardGoto(goto) and - goto = s.getAst() and - exists(InstructionTag tag | - result = s.getInstructionSuccessor(tag, kind) and - instruction = s.getInstruction(tag) - ) - ) - } - - /** Holds if `goto` jumps strictly forward in the program text. */ - private predicate isStrictlyForwardGoto(GotoLabelStmt goto) { - goto.getLocation().getFile() = goto.getTarget().getLocation().getFile() and - goto.getLocation().getEndLine() < goto.getTarget().getLocation().getStartLine() - } - - cached - Language::AST getInstructionAst(Instruction instruction) { - result = getInstructionTranslatedElement(instruction).getAst() - } - - cached - CSharpType getInstructionResultType(Instruction instruction) { - getInstructionTranslatedElement(instruction) - .hasInstruction(_, getInstructionTag(instruction), result) - } - - cached - ArrayAccess getInstructionArrayAccess(Instruction instruction) { - result = - getInstructionTranslatedElement(instruction) - .getInstructionArrayAccess(getInstructionTag(instruction)) - } - - cached - int getInstructionResultSize(Instruction instruction) { - exists(TranslatedElement element, InstructionTag tag | - instructionOrigin(instruction, element, tag) and - result = element.getInstructionResultSize(tag) - ) - } - - cached - Instruction getPrimaryInstructionForSideEffect(Instruction instruction) { - exists(TranslatedElement element, InstructionTag tag | - instructionOrigin(instruction, element, tag) and - result = element.getPrimaryInstructionForSideEffect(tag) - ) - } -} - -predicate hasUnreachedInstruction(IRFunction func) { none() } - -import CachedForDebugging - -cached -private module CachedForDebugging { - cached - string getTempVariableUniqueId(IRTempVariable var) { - exists(TranslatedElement element | - var = element.getTempVariable(_) and - result = element.getId().toString() + ":" + getTempVariableTagId(var.getTag()) - ) - } - - cached - predicate instructionHasSortKeys(Instruction instruction, int key1, int key2) { - key1 = getInstructionTranslatedElement(instruction).getId() and - getInstructionTag(instruction) = - rank[key2](InstructionTag tag, string tagId | - tagId = getInstructionTagId(tag) - | - tag order by tagId - ) - } - - cached - string getInstructionUniqueId(Instruction instruction) { - result = - getInstructionTranslatedElement(instruction).getId() + ":" + - getInstructionTagId(getInstructionTag(instruction)) - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/IRFunctionImports.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/IRFunctionImports.qll deleted file mode 100644 index 4e9a7d9f3ae..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/IRFunctionImports.qll +++ /dev/null @@ -1 +0,0 @@ -import experimental.ir.implementation.internal.IRFunctionBase as IRFunctionBase diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/IRImports.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/IRImports.qll deleted file mode 100644 index 14dad7400b2..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/IRImports.qll +++ /dev/null @@ -1,3 +0,0 @@ -import experimental.ir.implementation.EdgeKind as EdgeKind -import experimental.ir.implementation.IRType as IRType -import experimental.ir.implementation.MemoryAccessKind as MemoryAccessKind diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/IRInternal.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/IRInternal.qll deleted file mode 100644 index e44184dd76c..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/IRInternal.qll +++ /dev/null @@ -1,4 +0,0 @@ -import experimental.ir.internal.IRCSharpLanguage as Language -import IRConstruction as Construction -import experimental.ir.implementation.IRConfiguration as IRConfiguration -import IRConstruction::Raw as Raw diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/IRVariableImports.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/IRVariableImports.qll deleted file mode 100644 index bdb4377cbdc..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/IRVariableImports.qll +++ /dev/null @@ -1,5 +0,0 @@ -import experimental.ir.implementation.IRType as IRType -import experimental.ir.implementation.TempVariableTag as TempVariableTag -import experimental.ir.internal.IRUtilities as IRUtilities -import experimental.ir.internal.TempVariableTag as TTempVariableTag -import experimental.ir.implementation.internal.TIRVariable as TIRVariable diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/InstructionImports.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/InstructionImports.qll deleted file mode 100644 index 4bcd2e127c1..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/InstructionImports.qll +++ /dev/null @@ -1,6 +0,0 @@ -import experimental.ir.implementation.EdgeKind as EdgeKind -import experimental.ir.implementation.IRType as IRType -import experimental.ir.implementation.MemoryAccessKind as MemoryAccessKind -import experimental.ir.implementation.Opcode as Opcode -import experimental.ir.implementation.internal.OperandTag as OperandTag -import experimental.ir.internal.Overlap as Overlap diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/InstructionTag.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/InstructionTag.qll deleted file mode 100644 index 3ec2d846254..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/InstructionTag.qll +++ /dev/null @@ -1,204 +0,0 @@ -import csharp -import experimental.ir.Util - -private predicate elementIsInitialized(int elementIndex) { - exists(ArrayInitWithMod initList | initList.isInitialized(elementIndex)) -} - -newtype TInstructionTag = - OnlyInstructionTag() or // Single instruction (not including implicit Load) - InitializeThisTag() or - InitializerVariableAddressTag() or - InitializerLoadStringTag() or - InitializerStoreTag() or - ZeroPadStringConstantTag() or - ZeroPadStringElementIndexTag() or - ZeroPadStringElementAddressTag() or - ZeroPadStringStoreTag() or - AssignOperationLoadTag() or - AssignOperationConvertLeftTag() or - AssignOperationOpTag() or - AssignmentConvertRightTag() or - AssignOperationConvertResultTag() or - AssignmentStoreTag() or - CrementLoadTag() or - CrementConstantTag() or - CrementOpTag() or - CrementStoreTag() or - EnterFunctionTag() or - ReturnValueAddressTag() or - ReturnTag() or - ExitFunctionTag() or - AliasedDefinitionTag() or - AliasedUseTag() or - SwitchBranchTag() or - CallTargetTag() or - CallTag() or - CallSideEffectTag() or - AllocationSizeTag() or - AllocationElementSizeTag() or - AllocationExtentConvertTag() or - ValueConditionConditionalBranchTag() or - ConditionValueTrueTempAddressTag() or - ConditionValueTrueConstantTag() or - ConditionValueTrueStoreTag() or - ConditionValueFalseTempAddressTag() or - ConditionValueFalseConstantTag() or - ConditionValueFalseStoreTag() or - ConditionValueResultTempAddressTag() or - ConditionValueResultLoadTag() or - BoolConversionConstantTag() or - BoolConversionCompareTag() or - LoadTag() or // Implicit load due to lvalue-to-rvalue conversion - AddressTag() or - CatchTag() or - ThrowTag() or - UnwindTag() or - InitializerUninitializedTag() or - InitializerElementIndexTag(int elementIndex) { elementIsInitialized(elementIndex) } or - InitializerElementAddressTag(int elementIndex) { elementIsInitialized(elementIndex) } or - InitializerElementDefaultValueTag(int elementIndex) { elementIsInitialized(elementIndex) } or - InitializerElementDefaultValueStoreTag(int elementIndex) { elementIsInitialized(elementIndex) } or - // Added for C# - NewObjTag() or - // TODO: remove the need for indexing - PointerAddTag(int index) { index in [0 .. 255] } or - ElementsAddressTag(int index) { index in [0 .. 255] } or - ConvertTag() or - GeneratedNeqTag() or - GeneratedConstantTag() or - GeneratedBranchTag() - -class InstructionTag extends TInstructionTag { - final string toString() { result = "Tag" } -} - -/** - * Gets a unique string for the instruction tag. Primarily used for generating - * instruction IDs to ensure stable IR dumps. - */ -string getInstructionTagId(TInstructionTag tag) { - tag = OnlyInstructionTag() and result = "Only" // Single instruction (not including implicit Load) - or - tag = InitializerVariableAddressTag() and result = "InitVarAddr" - or - tag = InitializerLoadStringTag() and result = "InitLoadStr" - or - tag = InitializerStoreTag() and result = "InitStore" - or - tag = InitializerUninitializedTag() and result = "InitUninit" - or - tag = ZeroPadStringConstantTag() and result = "ZeroPadConst" - or - tag = ZeroPadStringElementIndexTag() and result = "ZeroPadElemIndex" - or - tag = ZeroPadStringElementAddressTag() and result = "ZeroPadElemAddr" - or - tag = ZeroPadStringStoreTag() and result = "ZeroPadStore" - or - tag = AssignOperationLoadTag() and result = "AssignOpLoad" - or - tag = AssignOperationConvertLeftTag() and result = "AssignOpConvLeft" - or - tag = AssignmentConvertRightTag() and result = "AssignConvRight" - or - tag = AssignOperationOpTag() and result = "AssignOpOp" - or - tag = AssignOperationConvertResultTag() and result = "AssignOpConvRes" - or - tag = AssignmentStoreTag() and result = "AssignStore" - or - tag = CrementLoadTag() and result = "CrementLoad" - or - tag = CrementConstantTag() and result = "CrementConst" - or - tag = CrementOpTag() and result = "CrementOp" - or - tag = CrementStoreTag() and result = "CrementStore" - or - tag = EnterFunctionTag() and result = "EnterFunc" - or - tag = ReturnValueAddressTag() and result = "RetValAddr" - or - tag = ReturnTag() and result = "Ret" - or - tag = ExitFunctionTag() and result = "ExitFunc" - or - tag = AliasedDefinitionTag() and result = "AliasedDef" - or - tag = AliasedUseTag() and result = "AliasedUse" - or - tag = SwitchBranchTag() and result = "SwitchBranch" - or - tag = CallTargetTag() and result = "CallTarget" - or - tag = CallTag() and result = "Call" - or - tag = CallSideEffectTag() and result = "CallSideEffect" - or - tag = AllocationSizeTag() and result = "AllocSize" - or - tag = AllocationElementSizeTag() and result = "AllocElemSize" - or - tag = AllocationExtentConvertTag() and result = "AllocExtConv" - or - tag = ValueConditionConditionalBranchTag() and result = "ValCondCondBranch" - or - tag = ConditionValueTrueTempAddressTag() and result = "CondValTrueTempAddr" - or - tag = ConditionValueTrueConstantTag() and result = "CondValTrueConst" - or - tag = ConditionValueTrueStoreTag() and result = "CondValTrueStore" - or - tag = ConditionValueFalseTempAddressTag() and result = "CondValFalseTempAddr" - or - tag = ConditionValueFalseConstantTag() and result = "CondValFalseConst" - or - tag = ConditionValueFalseStoreTag() and result = "CondValFalseStore" - or - tag = ConditionValueResultTempAddressTag() and result = "CondValResTempAddr" - or - tag = ConditionValueResultLoadTag() and result = "CondValResLoad" - or - tag = BoolConversionConstantTag() and result = "BoolConvConst" - or - tag = BoolConversionCompareTag() and result = "BoolConvComp" - or - tag = LoadTag() and result = "Load" // Implicit load due to lvalue-to-rvalue conversion - or - tag = CatchTag() and result = "Catch" - or - tag = ThrowTag() and result = "Throw" - or - tag = UnwindTag() and result = "Unwind" - or - // Added for C# - tag = NewObjTag() and result = "NewObj" - or - tag = ElementsAddressTag(_) and result = "ElementsAddress" - or - tag = PointerAddTag(_) and result = "PointerAdd" - or - tag = ConvertTag() and result = "Convert" - or - tag = GeneratedNeqTag() and result = "GeneratedNEQTag" - or - tag = GeneratedConstantTag() and result = "GeneratedConstantTag" - or - tag = GeneratedBranchTag() and result = "GeneratedBranchTag" - or - tag = AddressTag() and result = "AddressTag" - or - exists(int index, string tagName | - ( - tag = InitializerElementIndexTag(index) and tagName = "InitElemIndex" - or - tag = InitializerElementAddressTag(index) and tagName = "InitElemAddr" - or - tag = InitializerElementDefaultValueTag(index) and tagName = "InitElemDefVal" - or - tag = InitializerElementDefaultValueStoreTag(index) and tagName = "InitElemDefValStore" - ) and - result = tagName + "(" + index + ")" - ) -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/OperandImports.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/OperandImports.qll deleted file mode 100644 index 65676caf724..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/OperandImports.qll +++ /dev/null @@ -1,5 +0,0 @@ -import experimental.ir.implementation.MemoryAccessKind as MemoryAccessKind -import experimental.ir.implementation.IRType as IRType -import experimental.ir.internal.Overlap as Overlap -import experimental.ir.implementation.internal.OperandTag as OperandTag -import experimental.ir.implementation.internal.TOperand as TOperand diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/OperandInternal.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/OperandInternal.qll deleted file mode 100644 index 771aeb9033c..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/OperandInternal.qll +++ /dev/null @@ -1,2 +0,0 @@ -private import experimental.ir.implementation.internal.TOperand -import RawOperands diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/PrintIRImports.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/PrintIRImports.qll deleted file mode 100644 index 0c5337d57de..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/PrintIRImports.qll +++ /dev/null @@ -1,2 +0,0 @@ -import experimental.ir.IRConfiguration as IRConfiguration -import experimental.ir.internal.IRCSharpLanguageDebug as LanguageDebug diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedCall.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedCall.qll deleted file mode 100644 index e131a26be65..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedCall.qll +++ /dev/null @@ -1,102 +0,0 @@ -import csharp -private import experimental.ir.implementation.Opcode -private import experimental.ir.implementation.internal.OperandTag -private import InstructionTag -private import TranslatedElement -private import TranslatedExpr -private import TranslatedInitialization -private import experimental.ir.implementation.raw.internal.common.TranslatedCallBase -private import experimental.ir.internal.IRCSharpLanguage as Language - -/** - * The IR translation of a call to a function. The function can be a normal function - * (e.g. `MethodCall`) or a constructor call (e.g. `ObjectCreation`). Notice that the - * AST generated translated calls are tied to an expression (unlike compiler generated ones, - * which can be attached to either a statement or an expression). - */ -abstract class TranslatedCall extends TranslatedExpr, TranslatedCallBase { - final override Instruction getResult() { result = TranslatedCallBase.super.getResult() } -} - -/** - * Represents the IR translation of a direct function call. The call can be one of the following: - * `MethodCall`, `LocalFunctionCall`, `AccessorCall`, `OperatorCall`. - * Note that `DelegateCall`s are not treated here since they need to be desugared. - */ -class TranslatedFunctionCall extends TranslatedNonConstantExpr, TranslatedCall { - override Call expr; - - TranslatedFunctionCall() { - expr instanceof MethodCall or - expr instanceof LocalFunctionCall or - expr instanceof AccessorCall or - expr instanceof OperatorCall - } - - override Callable getInstructionFunction(InstructionTag tag) { - tag = CallTargetTag() and result = expr.getTarget() - } - - override TranslatedExpr getArgument(int index) { - result = getTranslatedExpr(expr.getArgument(index)) - } - - override TranslatedExpr getQualifier() { - expr instanceof QualifiableExpr and - result = getTranslatedExpr(expr.(QualifiableExpr).getQualifier()) - } - - override Instruction getQualifierResult() { - // since `ElementInitializer`s do not have a qualifier, the qualifier's result is retrieved - // from the enclosing initialization context - if expr.getParent() instanceof CollectionInitializer - then result = getTranslatedExpr(expr.getParent()).(InitializationContext).getTargetAddress() - else result = this.getQualifier().getResult() - } - - override Type getCallResultType() { result = expr.getTarget().getReturnType() } - - override predicate hasReadSideEffect() { - not expr.getTarget().(SideEffectFunction).neverReadsMemory() - } - - override predicate hasWriteSideEffect() { - not expr.getTarget().(SideEffectFunction).neverWritesMemory() - } -} - -/** - * Represents the IR translation of a call to a constructor or to a constructor initializer. - * The qualifier of the call is obtained from the constructor call context. - * Note that `DelegateCreation` is not present here, since the call to a delegate constructor is - * compiler generated. - */ -class TranslatedConstructorCall extends TranslatedNonConstantExpr, TranslatedCall { - override Call expr; - - TranslatedConstructorCall() { - expr instanceof ObjectCreation or - expr instanceof ConstructorInitializer - } - - override Callable getInstructionFunction(InstructionTag tag) { - tag = CallTargetTag() and result = expr.getTarget() - } - - override TranslatedExpr getArgument(int index) { - result = getTranslatedExpr(expr.getArgument(index)) - } - - // The qualifier for a constructor call has already been generated - // (the `NewObj` instruction) - override TranslatedExpr getQualifier() { none() } - - override Type getCallResultType() { result instanceof VoidType } - - override Instruction getQualifierResult() { - exists(ConstructorCallContext context | - context = this.getParent() and - result = context.getReceiver() - ) - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedCondition.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedCondition.qll deleted file mode 100644 index afe98fdb410..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedCondition.qll +++ /dev/null @@ -1,164 +0,0 @@ -import csharp -private import experimental.ir.implementation.Opcode -private import experimental.ir.implementation.internal.OperandTag -private import experimental.ir.internal.CSharpType -private import InstructionTag -private import TranslatedElement -private import TranslatedExpr -private import common.TranslatedConditionBase -private import experimental.ir.internal.IRCSharpLanguage as Language - -TranslatedCondition getTranslatedCondition(Expr expr) { result.getExpr() = expr } - -abstract class TranslatedCondition extends ConditionBase { - Expr expr; - - final override string toString() { result = expr.toString() } - - final override Language::AST getAst() { result = expr } - - final Expr getExpr() { result = expr } - - final override Callable getFunction() { result = expr.getEnclosingCallable() } - - final Type getResultType() { result = expr.getType() } -} - -abstract class TranslatedFlexibleCondition extends TranslatedCondition, ConditionContext, - TTranslatedFlexibleCondition -{ - TranslatedFlexibleCondition() { this = TTranslatedFlexibleCondition(expr) } - - final override TranslatedElement getChild(int id) { id = 0 and result = this.getOperand() } - - final override Instruction getFirstInstruction() { - result = this.getOperand().getFirstInstruction() - } - - final override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } - - final override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - final override Instruction getChildSuccessor(TranslatedElement child) { none() } - - abstract TranslatedCondition getOperand(); -} - -class TranslatedParenthesisCondition extends TranslatedFlexibleCondition { - override ParenthesizedExpr expr; - - final override Instruction getChildTrueSuccessor(ConditionBase child) { - child = this.getOperand() and - result = this.getConditionContext().getChildTrueSuccessor(this) - } - - final override Instruction getChildFalseSuccessor(ConditionBase child) { - child = this.getOperand() and - result = this.getConditionContext().getChildFalseSuccessor(this) - } - - final override TranslatedCondition getOperand() { - result = getTranslatedCondition(expr.getExpr()) - } -} - -class TranslatedNotCondition extends TranslatedFlexibleCondition { - override LogicalNotExpr expr; - - override Instruction getChildTrueSuccessor(ConditionBase child) { - child = this.getOperand() and - result = this.getConditionContext().getChildFalseSuccessor(this) - } - - override Instruction getChildFalseSuccessor(ConditionBase child) { - child = this.getOperand() and - result = this.getConditionContext().getChildTrueSuccessor(this) - } - - override TranslatedCondition getOperand() { result = getTranslatedCondition(expr.getOperand()) } -} - -abstract class TranslatedNativeCondition extends TranslatedCondition, TTranslatedNativeCondition { - TranslatedNativeCondition() { this = TTranslatedNativeCondition(expr) } - - final override Instruction getChildSuccessor(TranslatedElement child) { none() } -} - -abstract class TranslatedBinaryLogicalOperation extends TranslatedNativeCondition, ConditionContext { - override BinaryLogicalOperation expr; - - final override TranslatedElement getChild(int id) { - id = 0 and result = this.getLeftOperand() - or - id = 1 and result = this.getRightOperand() - } - - final override Instruction getFirstInstruction() { - result = this.getLeftOperand().getFirstInstruction() - } - - final override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } - - final override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - final TranslatedCondition getLeftOperand() { - result = getTranslatedCondition(expr.getLeftOperand()) - } - - final TranslatedCondition getRightOperand() { - result = getTranslatedCondition(expr.getRightOperand()) - } - - final TranslatedCondition getAnOperand() { - result = this.getLeftOperand() or - result = this.getRightOperand() - } -} - -class TranslatedLogicalAndExpr extends TranslatedBinaryLogicalOperation { - TranslatedLogicalAndExpr() { expr instanceof LogicalAndExpr } - - override Instruction getChildTrueSuccessor(ConditionBase child) { - child = this.getLeftOperand() and - result = this.getRightOperand().getFirstInstruction() - or - child = this.getRightOperand() and - result = this.getConditionContext().getChildTrueSuccessor(this) - } - - override Instruction getChildFalseSuccessor(ConditionBase child) { - child = this.getAnOperand() and - result = this.getConditionContext().getChildFalseSuccessor(this) - } -} - -class TranslatedLogicalOrExpr extends TranslatedBinaryLogicalOperation { - override LogicalOrExpr expr; - - override Instruction getChildTrueSuccessor(ConditionBase child) { - child = this.getAnOperand() and - result = this.getConditionContext().getChildTrueSuccessor(this) - } - - override Instruction getChildFalseSuccessor(ConditionBase child) { - child = this.getLeftOperand() and - result = this.getRightOperand().getFirstInstruction() - or - child = this.getRightOperand() and - result = this.getConditionContext().getChildFalseSuccessor(this) - } -} - -class TranslatedValueCondition extends TranslatedCondition, ValueConditionBase, - TTranslatedValueCondition -{ - TranslatedValueCondition() { this = TTranslatedValueCondition(expr) } - - override TranslatedExpr getValueExpr() { result = getTranslatedExpr(expr) } - - override Instruction valueExprResult() { result = this.getValueExpr().getResult() } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedDeclaration.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedDeclaration.qll deleted file mode 100644 index 23242c75c74..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedDeclaration.qll +++ /dev/null @@ -1,76 +0,0 @@ -import csharp -private import experimental.ir.implementation.Opcode -private import experimental.ir.internal.IRUtilities -private import experimental.ir.implementation.internal.OperandTag -private import InstructionTag -private import TranslatedElement -private import TranslatedExpr -private import TranslatedInitialization -private import experimental.ir.internal.IRCSharpLanguage as Language -private import common.TranslatedDeclarationBase - -/** - * Gets the `TranslatedDeclaration` that represents the declaration - * `entry`. - */ -TranslatedLocalDeclaration getTranslatedLocalDeclaration(LocalVariableDeclExpr declExpr) { - result.getAst() = declExpr -} - -/** - * Represents the IR translation of a declaration within the body of a function. - */ -abstract class TranslatedLocalDeclaration extends TranslatedElement, TTranslatedDeclaration { - LocalVariableDeclExpr expr; - - TranslatedLocalDeclaration() { this = TTranslatedDeclaration(expr) } - - final override Callable getFunction() { result = expr.getEnclosingCallable() } - - final override string toString() { result = expr.toString() } - - final override Language::AST getAst() { result = expr } -} - -/** - * Represents the IR translation of the declaration of a local variable, - * including its initialization, if any. - */ -class TranslatedLocalVariableDeclaration extends TranslatedLocalDeclaration, - LocalVariableDeclarationBase, InitializationContext -{ - LocalVariable var; - - TranslatedLocalVariableDeclaration() { var = expr.getVariable() } - - override Instruction getTargetAddress() { - result = this.getInstruction(InitializerVariableAddressTag()) - } - - override LocalVariable getDeclVar() { result = var } - - override Type getVarType() { result = getVariableType(this.getDeclVar()) } - - override Type getTargetType() { result = getVariableType(var) } - - override IRVariable getInstructionVariable(InstructionTag tag) { - ( - tag = InitializerVariableAddressTag() - or - this.hasUninitializedInstruction() and tag = InitializerStoreTag() - ) and - result = getIRUserVariable(this.getFunction(), this.getDeclVar()) - } - - override TranslatedInitialization getInitialization() { - // First complex initializations - if var.getInitializer() instanceof ArrayCreation - then result = getTranslatedInitialization(var.getInitializer().(ArrayCreation).getInitializer()) - else - if var.getInitializer() instanceof ObjectCreation - then result = getTranslatedInitialization(var.getInitializer()) - else - // then the simple variable initialization - result = getTranslatedInitialization(var.getInitializer()) - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedElement.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedElement.qll deleted file mode 100644 index c314d79e3ea..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedElement.qll +++ /dev/null @@ -1,569 +0,0 @@ -import csharp -import experimental.ir.implementation.raw.IR -private import experimental.ir.IRConfiguration -private import experimental.ir.implementation.Opcode -private import experimental.ir.implementation.internal.OperandTag -private import experimental.ir.internal.CSharpType -private import experimental.ir.internal.TempVariableTag -private import InstructionTag -private import TranslatedCondition -private import TranslatedFunction -private import TranslatedStmt -private import IRConstruction -private import experimental.ir.internal.IRCSharpLanguage as Language -private import desugar.Foreach -private import desugar.Delegate -private import desugar.Lock - -ArrayType getArrayOfDim(int dim, Type type) { - result.getRank() = dim and - result.getElementType() = type -} - -IRUserVariable getIRUserVariable(Language::Function func, Language::Variable var) { - result.getVariable() = var and - result.getEnclosingFunction() = func -} - -IRTempVariable getIRTempVariable(Language::AST ast, TempVariableTag tag) { - result.getAst() = ast and - result.getTag() = tag -} - -private predicate canCreateCompilerGeneratedElement(Element generatedBy, int nth) { - generatedBy instanceof ForeachStmt and nth in [0 .. ForeachElements::noGeneratedElements() - 1] - or - generatedBy instanceof LockStmt and nth in [0 .. LockElements::noGeneratedElements() - 1] - or - generatedBy instanceof DelegateCreation and - nth in [0 .. DelegateElements::noGeneratedElements(generatedBy) - 1] - or - generatedBy instanceof DelegateCall and - nth in [0 .. DelegateElements::noGeneratedElements(generatedBy) - 1] -} - -/** - * Gets the "real" parent of `expr`. This predicate treats conversions as if - * they were explicit nodes in the expression tree, rather than as implicit - * nodes as in the regular AST representation. - */ -private Element getRealParent(Expr expr) { result = expr.getParent() } - -/** - * Holds if `expr` is a constant of a type that can be replaced directly with - * its value in the IR. This does not include address constants as we have no - * means to express those as QL values. - */ -predicate isIRConstant(Expr expr) { exists(expr.getValue()) } - -// Pulled out for performance. See -// https://github.com/github/codeql-coreql-team/issues/1044. -private predicate isOrphan(Expr expr) { not exists(getRealParent(expr)) } - -/** - * Holds if `expr` should be ignored for the purposes of IR generation due to - * some property of `expr` or one of its ancestors. - */ -private predicate ignoreExprAndDescendants(Expr expr) { - // Ignore parentless expressions - isOrphan(expr) - or - // Ignore the constants in SwitchCase, since their values are embedded in the - // CaseEdge. - getRealParent(expr) instanceof CaseStmt - or - // Ignore descendants of constant expressions, since we'll just substitute the - // constant value. - isIRConstant(getRealParent(expr)) - or - // Ignore the local declaration done by a `ForeachStmt` - // since we desugar it - expr instanceof LocalVariableDeclExpr and - expr.getParent() instanceof ForeachStmt - or - // recursive case - ignoreExprAndDescendants(getRealParent(expr)) and - // The two children of an `AssignOperation` should not be ignored, but since they are also - // descendants of an orphan node (the expanded form of the `AssignOperation` is also retrieved by - // the extractor, which is rooted in an AST node without parents) they would be - not expr.getParent() instanceof AssignOperation -} - -/** - * Holds if `expr` (not including its descendants) should be ignored for the - * purposes of IR generation. - */ -private predicate ignoreExprOnly(Expr expr) { - not translateFunction(expr.getEnclosingCallable()) - or - // Ignore size of arrays when translating - expr.getParent() instanceof ArrayCreation and expr.hasValue() - or - // Ignore the child expression of a goto case stmt - expr.getParent() instanceof GotoCaseStmt - or - // Ignore the expression (that is not a declaration) - // that appears in a using block - expr.getParent().(UsingBlockStmt).getExpr() = expr - or - // Ignore the `ThisAccess` when it is used as the qualifier for - // a callable access (e.g. when a member callable is passed as a - // parameter for a delegate creation expression) - expr instanceof ThisAccess and - expr.getParent() instanceof CallableAccess -} - -/** - * Holds if `expr` should be ignored for the purposes of IR generation. - */ -private predicate ignoreExpr(Expr expr) { - ignoreExprOnly(expr) or - ignoreExprAndDescendants(expr) -} - -/** - * Holds if `func` should be translated to IR. - */ -private predicate translateFunction(Callable callable) { - // not isInvalidFunction(callable) - exists(callable.getEntryPoint()) and - callable.fromSource() and - exists(IRConfiguration config | config.shouldCreateIRForFunction(callable)) -} - -/** - * Holds if `stmt` should be translated to IR. - */ -private predicate translateStmt(Stmt stmt) { translateFunction(stmt.getEnclosingCallable()) } - -/** - * Holds if `expr` is most naturally evaluated as control flow, rather than as - * a value. - */ -private predicate isNativeCondition(Expr expr) { - expr instanceof BinaryLogicalOperation and - not isIRConstant(expr) -} - -/** - * Holds if `expr` can be evaluated as either a condition or a value expression, - * depending on context. - */ -private predicate isFlexibleCondition(Expr expr) { - ( - expr instanceof ParenthesizedExpr or - expr instanceof LogicalNotExpr - ) and - usedAsCondition(expr) and - not isIRConstant(expr) -} - -/** - * Holds if `expr` is used in a condition context, i.e. the Boolean result of - * the expression is directly used to determine control flow. - */ -private predicate usedAsCondition(Expr expr) { - exists(BinaryLogicalOperation op | - op.getLeftOperand() = expr or - op.getRightOperand() = expr - ) - or - exists(LoopStmt loop | loop.getCondition() = expr) - or - exists(IfStmt ifStmt | ifStmt.getCondition() = expr) - or - exists(ConditionalExpr condExpr | condExpr.getCondition() = expr) - or - exists(LogicalNotExpr notExpr | - notExpr.getOperand() = expr and - usedAsCondition(notExpr) - ) - or - exists(ParenthesizedExpr paren | - paren.getExpr() = expr and - usedAsCondition(paren) - ) -} - -/** - * Holds if we should have a `Load` instruction for `expr` when generating the IR. - */ -private predicate mayNeedLoad(Expr expr) { - expr instanceof AssignableRead - or - // We need an extra load for the `PointerIndirectionExpr` - expr instanceof PointerIndirectionExpr and - // If the dereferencing happens on the lhs of an - // assignment we shouldn't have a load instruction - not exists(Assignment a | a.getLValue() = expr) -} - -predicate needsLoad(Expr expr) { - mayNeedLoad(expr) and - not ignoreLoad(expr) -} - -/** - * Holds if we should ignore the `Load` instruction for `expr` when generating IR. - */ -private predicate ignoreLoad(Expr expr) { - // No load needed for the qualifier of an array access, - // since we use the instruction `ElementsAddress` - // to get the address of the first element in an array - expr = any(ArrayAccess aa).getQualifier() - or - // Indexer calls returns a reference or a value, - // no need to load it - expr instanceof IndexerCall - or - // No load is needed for the lvalue in an assignment such as: - // Eg. `Object obj = oldObj`; - expr = any(Assignment a).getLValue() and - expr.getType() instanceof RefType - or - // Since the loads for a crement operation is handled by the translation - // of the operation, we ignore the load here - expr.getParent() instanceof MutatorOperation - or - // The `&` operator does not need a load, since the - // address is the final value of the expression - expr.getParent() instanceof AddressOfExpr - or - // A property access does not need a load since it is a call - expr instanceof PropertyAccess - or - // If expr is a variable access used as the qualifier for a field access and - // its target variable is a value type variable, - // ignore the load since the address of a variable that is a value type is - // given by a single `VariableAddress` instruction. - expr = any(FieldAccess fa).getQualifier() and - expr = - any(VariableAccess va | - va.getType().isValueType() and - not va.getTarget() = any(Parameter p | p.isOutOrRef() or p.isIn()) - ) - or - // If expr is passed as an `out,`ref` or `in` argument, - // no load should take place since we pass the address, not the - // value of the variable - expr.(AssignableAccess).isOutOrRefArgument() - or - expr.(AssignableAccess).isInArgument() -} - -newtype TTranslatedElement = - // An expression that is not being consumed as a condition - TTranslatedValueExpr(Expr expr) { - not ignoreExpr(expr) and - not isNativeCondition(expr) and - not isFlexibleCondition(expr) - } or - // A creation expression - TTranslatedCreationExpr(Expr expr) { - not ignoreExpr(expr) and - (expr instanceof ObjectCreation or expr instanceof DelegateCreation) - } or - // A separate element to handle the lvalue-to-rvalue conversion step of an - // expression. - TTranslatedLoad(Expr expr) { - not ignoreExpr(expr) and - needsLoad(expr) - } or - // An expression most naturally translated as control flow. - TTranslatedNativeCondition(Expr expr) { - not ignoreExpr(expr) and - isNativeCondition(expr) - } or - // An expression that can best be translated as control flow given the context - // in which it is used. - TTranslatedFlexibleCondition(Expr expr) { - not ignoreExpr(expr) and - isFlexibleCondition(expr) - } or - // An expression that is not naturally translated as control flow, but is - // consumed in a condition context. This element adapts the original element - // to the condition context. - TTranslatedValueCondition(Expr expr) { - not ignoreExpr(expr) and - not isNativeCondition(expr) and - not isFlexibleCondition(expr) and - usedAsCondition(expr) - } or - // An expression that is naturally translated as control flow, but is used in - // a context where a simple value is expected. This element adapts the - // original condition to the value context. - TTranslatedConditionValue(Expr expr) { - not ignoreExpr(expr) and - isNativeCondition(expr) and - not usedAsCondition(expr) - } or - // An expression used as an initializer. - TTranslatedInitialization(Expr expr) { - not ignoreExpr(expr) and - ( - // Because of their implementation in C#, - // we deal with all the types of initialization separately. - // First only simple local variable initialization (ie. `int x = 0`) - exists(LocalVariableDeclAndInitExpr lvInit | lvInit.getInitializer() = expr) - or - // Then treat more complex ones - expr instanceof ArrayInitializer - or - expr instanceof ObjectInitializer - or - expr = any(ThrowElement throwElement).getExpr() - or - expr = any(CollectionInitializer colInit).getAnElementInitializer() - or - expr = any(ReturnStmt returnStmt).getExpr() - or - expr = any(ArrayInitializer arrInit).getAnElement() - ) - } or - // The initialization of an array element via a member of an initializer list. - TTranslatedExplicitElementInitialization(ArrayInitializer initList, int elementIndex) { - not ignoreExpr(initList) and - exists(initList.getElement(elementIndex)) - } or - // The initialization of a base class from within a constructor. - TTranslatedConstructorInitializer(ConstructorInitializer init) { not ignoreExpr(init) } or - // A statement - TTranslatedStmt(Stmt stmt) { translateStmt(stmt) } or - // A function - TTranslatedFunction(Callable callable) { translateFunction(callable) } or - // A function parameter - TTranslatedParameter(Parameter param) { - exists(Callable func | - func = param.getCallable() and - translateFunction(func) - ) - } or - // A local declaration - TTranslatedDeclaration(LocalVariableDeclExpr entry) { - // foreach var decl and init is treated separately, - // because foreach needs desugaring - not ignoreExprAndDescendants(entry) - } or - // A compiler generated element, generated by `generatedBy` during the - // desugaring process - TTranslatedCompilerGeneratedElement(Element generatedBy, int index) { - canCreateCompilerGeneratedElement(generatedBy, index) - } - -/** - * Represents an AST node for which IR needs to be generated. - * - * In most cases, there is a single `TranslatedElement` for each AST node. - * However, when a single AST node performs two separable operations (e.g. - * a `VariableAccess` that is also a load), there may be multiple - * `TranslatedElement` nodes for a single AST node. - */ -abstract class TranslatedElement extends TTranslatedElement { - abstract string toString(); - - /** - * Gets the AST node being translated. - */ - abstract Language::AST getAst(); - - /** - * Get the first instruction to be executed in the evaluation of this element. - */ - abstract Instruction getFirstInstruction(); - - /** - * Get the immediate child elements of this element. - */ - final TranslatedElement getAChild() { result = this.getChild(_) } - - /** - * Gets the immediate child element of this element. The `id` is unique - * among all children of this element, but the values are not necessarily - * consecutive. - */ - abstract TranslatedElement getChild(int id); - - /** - * Gets the an identifier string for the element. This id is unique within - * the scope of the element's function. - */ - int getId() { result = this.getUniqueId() } - - private TranslatedElement getChildByRank(int rankIndex) { - result = - rank[rankIndex + 1](TranslatedElement child, int id | - child = this.getChild(id) - | - child order by id - ) - } - - language[monotonicAggregates] - private int getDescendantCount() { - result = - 1 + sum(TranslatedElement child | child = this.getChildByRank(_) | child.getDescendantCount()) - } - - private int getUniqueId() { - if not exists(this.getParent()) - then result = 0 - else - exists(TranslatedElement parent | - parent = this.getParent() and - if this = parent.getChildByRank(0) - then result = 1 + parent.getUniqueId() - else - exists(int childIndex, TranslatedElement previousChild | - this = parent.getChildByRank(childIndex) and - previousChild = parent.getChildByRank(childIndex - 1) and - result = previousChild.getUniqueId() + previousChild.getDescendantCount() - ) - ) - } - - /** - * Holds if this element generates an instruction with opcode `opcode` and - * result type `resultType`. `tag` must be unique for each instruction - * generated from the same AST node (not just from the same - * `TranslatedElement`). - * If the instruction does not return a result, `resultType` should be - * `VoidType`. - */ - abstract predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType); - - /** - * Gets the `Function` that contains this element. - */ - abstract Callable getFunction(); - - /** - * Gets the successor instruction of the instruction that was generated by - * this element for tag `tag`. The successor edge kind is specified by `kind`. - */ - abstract Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind); - - /** - * Gets the successor instruction to which control should flow after the - * child element specified by `child` has finished execution. - */ - abstract Instruction getChildSuccessor(TranslatedElement child); - - /** - * Gets the instruction to which control should flow if an exception is thrown - * within this element. This will generally return first `catch` block of the - * nearest enclosing `try`, or the `Unwind` instruction for the function if - * there is no enclosing `try`. - */ - Instruction getExceptionSuccessorInstruction() { - result = this.getParent().getExceptionSuccessorInstruction() - } - - /** - * Gets the primary instruction for the side effect instruction that was - * generated by this element for tag `tag`. - */ - Instruction getPrimaryInstructionForSideEffect(InstructionTag tag) { none() } - - /** - * Holds if this element generates a temporary variable with type `type`. - * `tag` must be unique for each variable generated from the same AST node - * (not just from the same `TranslatedElement`). - */ - predicate hasTempVariable(TempVariableTag tag, CSharpType type) { none() } - - /** - * If the instruction specified by `tag` is a `FunctionInstruction`, gets the - * `Function` for that instruction. - */ - Callable getInstructionFunction(InstructionTag tag) { none() } - - /** - * If the instruction specified by `tag` is a `VariableInstruction`, gets the - * `IRVariable` for that instruction. - */ - IRVariable getInstructionVariable(InstructionTag tag) { none() } - - /** - * If the instruction specified by `tag` is a `FieldInstruction`, gets the - * `Field` for that instruction. - */ - Field getInstructionField(InstructionTag tag) { none() } - - /** - * If the instruction specified by `tag` is an `IndexedElementInstruction`, - * gets the `ArrayAccess` of that instruction. - */ - ArrayAccess getInstructionArrayAccess(InstructionTag tag) { none() } - - /** - * If the instruction specified by `tag` is a `ConstantValueInstruction`, gets - * the constant value for that instruction. - */ - string getInstructionConstantValue(InstructionTag tag) { none() } - - /** - * If the instruction specified by `tag` is a `PointerArithmeticInstruction`, - * gets the size of the type pointed to by the pointer. - */ - int getInstructionElementSize(InstructionTag tag) { none() } - - /** - * If the instruction specified by `tag` has a result of type `UnknownType`, - * gets the size of the result in bytes. If the result does not have a known - * constant size, this predicate does not hold. - */ - int getInstructionResultSize(InstructionTag tag) { none() } - - /** - * If the instruction specified by `tag` is a `StringConstantInstruction`, - * gets the `StringLiteral` for that instruction. - */ - StringLiteral getInstructionStringLiteral(InstructionTag tag) { none() } - - /** - * If the instruction specified by `tag` is a `CatchByTypeInstruction`, - * gets the type of the exception to be caught. - */ - CSharpType getInstructionExceptionType(InstructionTag tag) { none() } - - /** - * If the instruction specified by `tag` is an `InheritanceConversionInstruction`, - * gets the inheritance relationship for that instruction. - */ - predicate getInstructionInheritance(InstructionTag tag, Class baseClass, Class derivedClass) { - none() - } - - /** - * Gets the instruction whose result is consumed as an operand of the - * instruction specified by `tag`, with the operand specified by `operandTag`. - */ - Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { none() } - - /** - * Gets the type of the memory operand specified by `operandTag` on the the instruction specified by `tag`. - */ - CSharpType getInstructionOperandType(InstructionTag tag, TypedOperandTag operandTag) { none() } - - /** - * Gets the instruction generated by this element with tag `tag`. - */ - final Instruction getInstruction(InstructionTag tag) { - getInstructionTranslatedElement(result) = this and - getInstructionTag(result) = tag - } - - /** - * Gets the temporary variable generated by this element with tag `tag`. - */ - final IRTempVariable getTempVariable(TempVariableTag tag) { - result.getAst() = this.getAst() and - result.getTag() = tag and - this.hasTempVariable(tag, _) - } - - /** - * Gets the parent element of this element. - */ - final TranslatedElement getParent() { result.getAChild() = this } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedExpr.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedExpr.qll deleted file mode 100644 index 68070261227..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedExpr.qll +++ /dev/null @@ -1,2095 +0,0 @@ -import csharp -private import experimental.ir.implementation.Opcode -private import experimental.ir.implementation.internal.OperandTag -private import experimental.ir.internal.TempVariableTag -private import experimental.ir.internal.CSharpType -private import experimental.ir.internal.IRUtilities -private import InstructionTag -private import TranslatedCondition -private import TranslatedDeclaration -private import TranslatedElement -private import TranslatedFunction -private import TranslatedInitialization -private import common.TranslatedConditionBase -private import common.TranslatedCallBase -private import common.TranslatedExprBase -private import desugar.Delegate -private import desugar.internal.TranslatedCompilerGeneratedCall -import TranslatedCall -private import experimental.ir.internal.IRCSharpLanguage as Language - -/** - * Gets the TranslatedExpr for the specified expression. If `expr` is a load, - * the result is the TranslatedExpr for the load portion. - */ -TranslatedExpr getTranslatedExpr(Expr expr) { - result.getExpr() = expr and - result.producesExprResult() and - // When a constructor call is needed, we fetch it manually. - // This is because of how we translate object creations: the translated expression - // and the translated constructor call are attached to the same element. - (expr instanceof ObjectCreation implies not result instanceof TranslatedConstructorCall) -} - -/** - * The IR translation of some part of an expression. - * A single `Expr` may consist of multiple `TranslatedExpr` objects. Every - * `Expr` has a single `TranslatedCoreExpr`, which produces the result of the - * expression before any implicit lvalue-to-rvalue conversion. Any expression - * with an lvalue-to-rvalue conversion will also have a `TranslatedLoad` to - * perform that conversion on the original result. A few expressions have - * additional `TranslatedExpr` objects that compute intermediate values, such - * as the `TranslatedAllocatorCall` and `TranslatedAllocationSize` within the - * translation of a `NewExpr`. - */ -abstract class TranslatedExpr extends TranslatedExprBase { - Expr expr; - - /** - * Holds if this `TranslatedExpr` produces the final result of the original - * expression from the AST. - * - * For example, in `y = x;`, the TranslatedLoad for the VariableAccess `x` - * produces the result of that VariableAccess expression, but the - * TranslatedVariableAccess for `x` does not. The TranslatedVariableAccess - * for `y` does produce its result, however, because there is no load on `y`. - */ - abstract predicate producesExprResult(); - - /** - * Gets the type of the result produced by this expression. - */ - final Type getResultType() { result = expr.getType() } - - final override Language::AST getAst() { result = expr } - - final override Callable getFunction() { result = expr.getEnclosingCallable() } - - /** - * Gets the expression from which this `TranslatedExpr` is generated. - */ - final Expr getExpr() { result = expr } - - /** - * Gets the `TranslatedFunction` containing this expression. - */ - final TranslatedFunction getEnclosingFunction() { - result = getTranslatedFunction(expr.getEnclosingCallable()) - } -} - -/** - * The IR translation of the "core" part of an expression. This is the part of - * the expression that produces the result value of the expression, before any - * lvalue-to-rvalue conversion on the result. Every expression has a single - * `TranslatedCoreExpr`. - */ -abstract class TranslatedCoreExpr extends TranslatedExpr { - final override string toString() { result = expr.toString() } - - /** - * All exprs produce a final value, apart from reads. They first need an access, - * then a load. - */ - final override predicate producesExprResult() { - // If the expr needs a load, its translation does not produce the final value. - not needsLoad(expr) - } - - final CSharpType getResultCSharpType() { - if this.isResultLValue() = true - then result = getTypeForGLValue(expr.getType()) - else result = getTypeForPRValue(expr.getType()) - } - - /** - * Returns `true` if the result of this `TranslatedExpr` is a lvalue, or - * `false` if the result is a rvalue. - * - * This predicate returns a `boolean` value instead of just a being a plain - * predicate because all of the subclass predicates that call it require a - * `boolean` value. - */ - final boolean isResultLValue() { - if not this.producesExprResult() then result = true else result = false - } -} - -class TranslatedConditionValue extends TranslatedCoreExpr, ConditionContext, - TTranslatedConditionValue -{ - TranslatedConditionValue() { this = TTranslatedConditionValue(expr) } - - override TranslatedElement getChild(int id) { id = 0 and result = this.getCondition() } - - override Instruction getFirstInstruction() { result = this.getCondition().getFirstInstruction() } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - ( - tag = ConditionValueTrueTempAddressTag() or - tag = ConditionValueFalseTempAddressTag() or - tag = ConditionValueResultTempAddressTag() - ) and - opcode instanceof Opcode::VariableAddress and - resultType = getTypeForGLValue(expr.getType()) - or - ( - tag = ConditionValueTrueConstantTag() or - tag = ConditionValueFalseConstantTag() - ) and - opcode instanceof Opcode::Constant and - resultType = this.getResultCSharpType() - or - ( - tag = ConditionValueTrueStoreTag() or - tag = ConditionValueFalseStoreTag() - ) and - opcode instanceof Opcode::Store and - resultType = this.getResultCSharpType() - or - tag = ConditionValueResultLoadTag() and - opcode instanceof Opcode::Load and - resultType = this.getResultCSharpType() - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - kind instanceof GotoEdge and - ( - tag = ConditionValueTrueTempAddressTag() and - result = this.getInstruction(ConditionValueTrueConstantTag()) - or - tag = ConditionValueTrueConstantTag() and - result = this.getInstruction(ConditionValueTrueStoreTag()) - or - tag = ConditionValueTrueStoreTag() and - result = this.getInstruction(ConditionValueResultTempAddressTag()) - or - tag = ConditionValueFalseTempAddressTag() and - result = this.getInstruction(ConditionValueFalseConstantTag()) - or - tag = ConditionValueFalseConstantTag() and - result = this.getInstruction(ConditionValueFalseStoreTag()) - or - tag = ConditionValueFalseStoreTag() and - result = this.getInstruction(ConditionValueResultTempAddressTag()) - or - tag = ConditionValueResultTempAddressTag() and - result = this.getInstruction(ConditionValueResultLoadTag()) - or - tag = ConditionValueResultLoadTag() and - result = this.getParent().getChildSuccessor(this) - ) - } - - override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - tag = ConditionValueTrueStoreTag() and - ( - operandTag instanceof AddressOperandTag and - result = this.getInstruction(ConditionValueTrueTempAddressTag()) - or - operandTag instanceof StoreValueOperandTag and - result = this.getInstruction(ConditionValueTrueConstantTag()) - ) - or - tag = ConditionValueFalseStoreTag() and - ( - operandTag instanceof AddressOperandTag and - result = this.getInstruction(ConditionValueFalseTempAddressTag()) - or - operandTag instanceof StoreValueOperandTag and - result = this.getInstruction(ConditionValueFalseConstantTag()) - ) - or - tag = ConditionValueResultLoadTag() and - operandTag instanceof AddressOperandTag and - result = this.getInstruction(ConditionValueResultTempAddressTag()) - } - - override predicate hasTempVariable(TempVariableTag tag, CSharpType type) { - tag = ConditionValueTempVar() and - type = this.getResultCSharpType() - } - - override IRVariable getInstructionVariable(InstructionTag tag) { - ( - tag = ConditionValueTrueTempAddressTag() or - tag = ConditionValueFalseTempAddressTag() or - tag = ConditionValueResultTempAddressTag() - ) and - result = this.getTempVariable(ConditionValueTempVar()) - } - - override string getInstructionConstantValue(InstructionTag tag) { - tag = ConditionValueTrueConstantTag() and result = "1" - or - tag = ConditionValueFalseConstantTag() and result = "0" - } - - override Instruction getResult() { result = this.getInstruction(ConditionValueResultLoadTag()) } - - override Instruction getChildSuccessor(TranslatedElement child) { none() } - - override Instruction getChildTrueSuccessor(ConditionBase child) { - child = this.getCondition() and - result = this.getInstruction(ConditionValueTrueTempAddressTag()) - } - - override Instruction getChildFalseSuccessor(ConditionBase child) { - child = this.getCondition() and - result = this.getInstruction(ConditionValueFalseTempAddressTag()) - } - - private TranslatedCondition getCondition() { result = getTranslatedCondition(expr) } -} - -/** - * IR translation of an implicit lvalue-to-rvalue conversion on the result of - * an expression. - */ -class TranslatedLoad extends TranslatedExpr, TTranslatedLoad { - TranslatedLoad() { this = TTranslatedLoad(expr) } - - override string toString() { result = "Load of " + expr.toString() } - - override Instruction getFirstInstruction() { result = this.getOperand().getFirstInstruction() } - - override TranslatedElement getChild(int id) { id = 0 and result = this.getOperand() } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = LoadTag() and - opcode instanceof Opcode::Load and - if this.producesExprResult() - then resultType = getTypeForPRValue(expr.getType()) - else resultType = getTypeForGLValue(expr.getType()) - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = LoadTag() and - result = this.getParent().getChildSuccessor(this) and - kind instanceof GotoEdge - } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getOperand() and result = this.getInstruction(LoadTag()) - } - - override Instruction getResult() { result = this.getInstruction(LoadTag()) } - - override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - tag = LoadTag() and - operandTag instanceof AddressOperandTag and - result = this.getOperand().getResult() - } - - final override predicate producesExprResult() { - // A load always produces the result of the expression. - any() - } - - private TranslatedCoreExpr getOperand() { result.getExpr() = expr } -} - -abstract class TranslatedCrementOperation extends TranslatedNonConstantExpr { - override MutatorOperation expr; - - final override TranslatedElement getChild(int id) { id = 0 and result = this.getOperand() } - - final override string getInstructionConstantValue(InstructionTag tag) { - tag = CrementConstantTag() and - exists(Type resultType | - resultType = this.getResultType() and - ( - resultType instanceof IntegralType and result = "1" - or - resultType instanceof FloatingPointType and result = "1.0" - or - resultType instanceof PointerType and result = "1" - ) - ) - } - - private Type getConstantType() { - exists(Type resultType | - resultType = this.getResultType() and - ( - resultType instanceof IntegralType and result = this.getResultType() - or - resultType instanceof FloatingPointType and result = this.getResultType() - or - resultType instanceof PointerType and result = any(IntType t) - ) - ) - } - - final override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = CrementLoadTag() and - opcode instanceof Opcode::Load and - resultType = getTypeForPRValue(expr.getType()) - or - tag = CrementConstantTag() and - opcode instanceof Opcode::Constant and - resultType = getTypeForPRValue(this.getConstantType()) - or - tag = CrementOpTag() and - opcode = this.getOpcode() and - resultType = getTypeForPRValue(expr.getType()) - or - tag = CrementStoreTag() and - opcode instanceof Opcode::Store and - resultType = getTypeForPRValue(expr.getType()) - } - - final override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - tag = CrementLoadTag() and - operandTag instanceof AddressOperandTag and - result = this.getOperand().getResult() - or - tag = CrementOpTag() and - ( - operandTag instanceof LeftOperandTag and - result = this.getInstruction(CrementLoadTag()) - or - operandTag instanceof RightOperandTag and - result = this.getInstruction(CrementConstantTag()) - ) - or - tag = CrementStoreTag() and - ( - operandTag instanceof AddressOperandTag and - result = this.getOperand().getResult() - or - operandTag instanceof StoreValueOperandTag and - result = this.getInstruction(CrementOpTag()) - ) - } - - final override Instruction getFirstInstruction() { - result = this.getOperand().getFirstInstruction() - } - - final override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - kind instanceof GotoEdge and - ( - tag = CrementLoadTag() and - result = this.getInstruction(CrementConstantTag()) - or - tag = CrementConstantTag() and - result = this.getInstruction(CrementOpTag()) - or - tag = CrementOpTag() and - result = this.getInstruction(CrementStoreTag()) - or - tag = CrementStoreTag() and - result = this.getParent().getChildSuccessor(this) - ) - } - - final override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getOperand() and result = this.getInstruction(CrementLoadTag()) - } - - final override int getInstructionElementSize(InstructionTag tag) { - tag = CrementOpTag() and - ( - this.getOpcode() instanceof Opcode::PointerAdd or - this.getOpcode() instanceof Opcode::PointerSub - ) and - result = Language::getTypeSize(this.getResultType().(PointerType).getReferentType()) - } - - final TranslatedExpr getOperand() { result = getTranslatedExpr(expr.getOperand()) } - - final Opcode getOpcode() { - exists(Type resultType | - resultType = this.getResultType() and - ( - ( - expr instanceof IncrementOperation and - if resultType instanceof PointerType - then result instanceof Opcode::PointerAdd - else result instanceof Opcode::Add - ) - or - ( - expr instanceof DecrementOperation and - if resultType instanceof PointerType - then result instanceof Opcode::PointerSub - else result instanceof Opcode::Sub - ) - ) - ) - } -} - -class TranslatedPrefixCrementOperation extends TranslatedCrementOperation { - TranslatedPrefixCrementOperation() { - expr instanceof PreIncrExpr or - expr instanceof PreDecrExpr - } - - override Instruction getResult() { result = this.getInstruction(CrementOpTag()) } -} - -class TranslatedPostfixCrementOperation extends TranslatedCrementOperation { - TranslatedPostfixCrementOperation() { - expr instanceof PostIncrExpr or - expr instanceof PostDecrExpr - } - - override Instruction getResult() { result = this.getInstruction(CrementLoadTag()) } -} - -class TranslatedObjectInitializerExpr extends TranslatedNonConstantExpr, InitializationContext { - override ObjectInitializer expr; - - override Instruction getResult() { none() } - - override Instruction getFirstInstruction() { result = this.getChild(0).getFirstInstruction() } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } - - override TranslatedElement getChild(int id) { - result = getTranslatedExpr(expr.getMemberInitializer(id)) - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - override Instruction getChildSuccessor(TranslatedElement child) { - exists(int index | - child = this.getChild(index) and - if exists(this.getChild(index + 1)) - then result = this.getChild(index + 1).getFirstInstruction() - else result = this.getParent().getChildSuccessor(this) - ) - } - - override Instruction getTargetAddress() { - // The target address is the address of the newly allocated object, - // which can be retrieved from the parent `TranslatedObjectCreation`. - result = this.getParent().getInstruction(NewObjTag()) - } - - override Type getTargetType() { - result = this.getParent().getInstruction(NewObjTag()).getResultType() - } -} - -class TranslatedCollectionInitializer extends TranslatedNonConstantExpr, InitializationContext { - override CollectionInitializer expr; - - override Instruction getResult() { none() } - - override Instruction getFirstInstruction() { result = this.getChild(0).getFirstInstruction() } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } - - override TranslatedElement getChild(int id) { - result = getTranslatedExpr(expr.getElementInitializer(id)) - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - override Instruction getChildSuccessor(TranslatedElement child) { - exists(int index | - child = this.getChild(index) and - ( - result = this.getChild(index + 1).getFirstInstruction() - or - not exists(this.getChild(index + 1)) and - result = this.getParent().getChildSuccessor(this) - ) - ) - } - - override Instruction getTargetAddress() { - // The target address is the address of the newly allocated object, - // which can be retrieved from the parent `TranslatedObjectCreation`. - result = this.getParent().getInstruction(NewObjTag()) - } - - override Type getTargetType() { - result = this.getParent().getInstruction(NewObjTag()).getResultType() - } -} - -/** - * The translation of an array access expression. The `ElementsAddress` - * instruction, given the address of an array, return the address - * of the element at index 0 of that array. To correctly treat the - * multidimensional case, we generate the address incrementally. For example, - * the address of a[1][1] will produce the instructions: - * r0_1(Int32[,]) = VariableAddress[a] : - * r0_2(Int32[,]) = ElementsAddress : r0_1 - * r0_3(Int32) = Constant[1] : - * r0_4(Int32[,]) = PointerAdd[4] : r0_2, r0_3 - * r0_5(Int32[]) = ElementsAddress : r0_4 - * r0_6(Int32) = Constant[1] : - * r0_7(Int32[]) = PointerAdd[4] : r0_5, r0_6 - * - * To support this incremental address calculation, - * the `ElementsAddress` and `PointerAdd` instructions are indexed (so that - * we correctly find the successor of instructions). - */ -class TranslatedArrayAccess extends TranslatedNonConstantExpr { - override ArrayAccess expr; - - override Instruction getFirstInstruction() { - result = this.getBaseOperand().getFirstInstruction() - } - - final override TranslatedElement getChild(int id) { - id = -1 and result = this.getBaseOperand() - or - result = this.getOffsetOperand(id) - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - exists(int index | - this.inBounds(index) and - kind instanceof GotoEdge and - ( - // The successor of a `PointerAdd` is an `ElementsAddress` if - // that `PointerAdd` is not the last `PointerAdd` instruction. - tag = PointerAddTag(index) and - result = this.getInstruction(ElementsAddressTag(index + 1)) - or - // The successor of the last `PointerAdd` instruction is - // the successor of the `TranslatedArrayAccess`. - tag = PointerAddTag(this.getRank() - 1) and - result = this.getParent().getChildSuccessor(this) - or - // The successor of an `ElementsAddress` instruction is - // an offset expression. - tag = ElementsAddressTag(index) and - result = this.getOffsetOperand(index).getFirstInstruction() - ) - ) - } - - override Instruction getChildSuccessor(TranslatedElement child) { - // The base address of the array is followed by the first - // `ElementsAddress` instruction. - child = this.getBaseOperand() and - result = this.getInstruction(ElementsAddressTag(0)) - or - // The successor of an offset expression is a `PointerAdd` expression. - child = this.getOffsetOperand(child.getAst().getIndex()) and - child.getAst().getIndex() >= 0 and - result = this.getInstruction(PointerAddTag(child.getAst().getIndex())) - } - - override Instruction getResult() { - result = this.getInstruction(PointerAddTag(this.getRank() - 1)) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - exists(int index | - this.inBounds(index) and - tag = PointerAddTag(index) and - opcode instanceof Opcode::PointerAdd and - resultType = getTypeForPRValue(getArrayOfDim(this.getRank() - index, expr.getType())) - ) - or - exists(int index | - this.inBounds(index) and - tag = ElementsAddressTag(index) and - opcode instanceof Opcode::ElementsAddress and - resultType = getTypeForPRValue(getArrayOfDim(this.getRank() - index, expr.getType())) - ) - } - - override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - exists(int index | - this.inBounds(index) and - tag = PointerAddTag(index) and - ( - operandTag instanceof LeftOperandTag and - result = this.getInstruction(ElementsAddressTag(index)) - or - operandTag instanceof RightOperandTag and - result = this.getOffsetOperand(index).getResult() - ) - ) - or - tag = ElementsAddressTag(0) and - ( - operandTag instanceof UnaryOperandTag and - result = this.getBaseOperand().getResult() - ) - or - exists(int index | - this.inBounds(index) and - index > 0 and - tag = ElementsAddressTag(index) and - ( - operandTag instanceof UnaryOperandTag and - result = this.getInstruction(PointerAddTag(index - 1)) - ) - ) - } - - override int getInstructionElementSize(InstructionTag tag) { - exists(int index | - this.inBounds(index) and - tag = PointerAddTag(index) and - result = Language::getTypeSize(expr.getQualifier().getType().(ArrayType).getElementType()) - ) - } - - private TranslatedExpr getBaseOperand() { result = getTranslatedExpr(expr.getQualifier()) } - - private TranslatedExpr getOffsetOperand(int index) { - this.inBounds(index) and - result = getTranslatedExpr(expr.getChild(index)) - } - - private predicate inBounds(int index) { index in [0 .. this.getRank() - 1] } - - private int getRank() { result = count(expr.getIndex(_)) } -} - -abstract class TranslatedPointerOps extends TranslatedNonConstantExpr { - override UnaryOperation expr; - - final override Instruction getFirstInstruction() { - result = this.getOperand().getFirstInstruction() - } - - final override TranslatedElement getChild(int id) { id = 0 and result = this.getOperand() } - - final override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - final override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getOperand() and result = this.getParent().getChildSuccessor(this) - } - - final override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } - - final override Instruction getResult() { result = this.getOperand().getResult() } - - final override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - none() - } - - abstract TranslatedExpr getOperand(); -} - -class TranslatedPointerIndirectionExpr extends TranslatedPointerOps { - override PointerIndirectionExpr expr; - - override TranslatedExpr getOperand() { result = getTranslatedExpr(expr.getOperand()) } -} - -class TranslatedAddressExpr extends TranslatedPointerOps { - override AddressOfExpr expr; - - override TranslatedExpr getOperand() { result = getTranslatedExpr(expr.getOperand()) } -} - -class TranslatedThisExpr extends TranslatedNonConstantExpr { - override ThisAccess expr; - - final override TranslatedElement getChild(int id) { none() } - - final override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = OnlyInstructionTag() and - opcode instanceof Opcode::CopyValue and - resultType = getTypeForPRValue(expr.getType()) - } - - final override Instruction getResult() { result = this.getInstruction(OnlyInstructionTag()) } - - final override Instruction getFirstInstruction() { - result = this.getInstruction(OnlyInstructionTag()) - } - - final override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - kind instanceof GotoEdge and - tag = OnlyInstructionTag() and - result = this.getParent().getChildSuccessor(this) - } - - final override Instruction getChildSuccessor(TranslatedElement child) { none() } - - final override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - tag = OnlyInstructionTag() and - operandTag instanceof UnaryOperandTag and - result = this.getInitializeThisInstruction() - } - - private Instruction getInitializeThisInstruction() { - result = getTranslatedFunction(expr.getEnclosingCallable()).getInitializeThisInstruction() - } -} - -abstract class TranslatedVariableAccess extends TranslatedNonConstantExpr { - override VariableAccess expr; - - final override TranslatedElement getChild(int id) { - id = 0 and result = this.getQualifier() // Might not exist - } - - final TranslatedExpr getQualifier() { - expr instanceof QualifiableExpr and - result = getTranslatedExpr(expr.(QualifiableExpr).getQualifier()) - } - - override Instruction getResult() { - if this.needsExtraLoad() - then result = this.getInstruction(LoadTag()) - else result = this.getInstruction(AddressTag()) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - this.needsExtraLoad() and - tag = LoadTag() and - opcode instanceof Opcode::Load and - resultType = getTypeForPRValue(expr.getType()) - } - - final override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = AddressTag() and - ( - if this.needsExtraLoad() - then result = this.getInstruction(LoadTag()) - else result = this.getParent().getChildSuccessor(this) - ) and - kind instanceof GotoEdge - or - this.needsExtraLoad() and - tag = LoadTag() and - kind instanceof GotoEdge and - result = this.getParent().getChildSuccessor(this) - } - - override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - this.needsExtraLoad() and - tag = LoadTag() and - operandTag instanceof AddressOperandTag and - result = this.getInstruction(AddressTag()) - } - - final override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getQualifier() and result = this.getInstruction(AddressTag()) - } - - /** - * Some variable accesses need an extra load, eg. ref parameters, - * out parameters - */ - final private predicate needsExtraLoad() { - ( - expr.getTarget().(Parameter).isOutOrRef() or - expr.getTarget().(Parameter).isIn() - ) and - (expr.getParent() instanceof FieldAccess implies expr.getType().isRefType()) - } -} - -class TranslatedNonFieldVariableAccess extends TranslatedVariableAccess { - TranslatedNonFieldVariableAccess() { - not expr instanceof FieldAccess and - // If the parent expression is a `LocalVariableDeclAndInitExpr`, - // then translate only the variables that are initializers (on the RHS) - // and not the LHS (the address of the LHS is generated during - // the translation of the initialization). - ( - expr.getParent() instanceof LocalVariableDeclAndInitExpr - implies - expr = expr.getParent().(LocalVariableDeclAndInitExpr).getInitializer() - ) - or - // Static field accesses should be modeled as `TranslatedNonFieldAccess` - expr.(FieldAccess).getTarget().isStatic() - } - - override Instruction getFirstInstruction() { - if exists(this.getQualifier()) - then result = this.getQualifier().getFirstInstruction() - else result = this.getInstruction(AddressTag()) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - TranslatedVariableAccess.super.hasInstruction(opcode, tag, resultType) - or - tag = AddressTag() and - opcode instanceof Opcode::VariableAddress and - resultType = getTypeForGLValue(this.getResultType()) - } - - override IRVariable getInstructionVariable(InstructionTag tag) { - tag = AddressTag() and - result = getIRUserVariable(expr.getEnclosingCallable(), expr.getTarget()) - } -} - -class TranslatedFieldAccess extends TranslatedVariableAccess { - override FieldAccess expr; - - TranslatedFieldAccess() { - // Static field accesses should be modeled as `TranslatedNonFieldAccess` - not expr.getTarget().isStatic() - } - - override Instruction getFirstInstruction() { - // If there is a qualifier - if exists(this.getQualifier()) - then result = this.getQualifier().getFirstInstruction() - else - // it means that the access is part of an `ObjectInitializer` expression - // so the instructions for the qualifier have been generated previously. - result = this.getInstruction(AddressTag()) - } - - override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - result = TranslatedVariableAccess.super.getInstructionOperand(tag, operandTag) - or - tag = AddressTag() and - operandTag instanceof UnaryOperandTag and - // A normal field access always has a qualifier - if exists(this.getQualifier()) - then result = this.getQualifier().getResult() - else - // This field access is part of an `ObjectInitializer` - // so the translated element of the initializer - // (which is the parent of the parent of the translated field access), - // being an `InitializationContext`, knows the target address of this field access. - result = this.getParent().getParent().(InitializationContext).getTargetAddress() - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = AddressTag() and - opcode instanceof Opcode::FieldAddress and - resultType = getTypeForGLValue(expr.getType()) - } - - override Field getInstructionField(InstructionTag tag) { - tag = AddressTag() and - result = expr.getTarget() - } -} - -class TranslatedFunctionAccess extends TranslatedNonConstantExpr { - override CallableAccess expr; - - override TranslatedElement getChild(int id) { none() } - - override Instruction getFirstInstruction() { result = this.getInstruction(OnlyInstructionTag()) } - - override Instruction getResult() { result = this.getInstruction(OnlyInstructionTag()) } - - final override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = OnlyInstructionTag() and - result = this.getParent().getChildSuccessor(this) and - kind instanceof GotoEdge - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = OnlyInstructionTag() and - opcode instanceof Opcode::FunctionAddress and - resultType = getTypeForGLValue(expr.getType()) - } - - override Callable getInstructionFunction(InstructionTag tag) { - tag = OnlyInstructionTag() and - result = expr.getTarget() - } - - override Instruction getChildSuccessor(TranslatedElement child) { none() } -} - -/** - * IR translation of an expression whose value is not known at compile time. - */ -abstract class TranslatedNonConstantExpr extends TranslatedCoreExpr, TTranslatedValueExpr { - TranslatedNonConstantExpr() { - this = TTranslatedValueExpr(expr) and - not isIRConstant(expr) - } -} - -/** - * IR translation of an expression with a compile-time constant value. This - * includes not only literals, but also "integral constant expressions" (e.g. - * `1 + 2`). - */ -abstract class TranslatedConstantExpr extends TranslatedCoreExpr, TTranslatedValueExpr { - TranslatedConstantExpr() { - this = TTranslatedValueExpr(expr) and - isIRConstant(expr) - } - - final override Instruction getFirstInstruction() { - result = this.getInstruction(OnlyInstructionTag()) - } - - final override TranslatedElement getChild(int id) { none() } - - final override Instruction getResult() { result = this.getInstruction(OnlyInstructionTag()) } - - final override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - none() - } - - final override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = OnlyInstructionTag() and - opcode = this.getOpcode() and - resultType = getTypeForPRValue(expr.getType()) - } - - final override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = OnlyInstructionTag() and - result = this.getParent().getChildSuccessor(this) and - kind instanceof GotoEdge - } - - final override Instruction getChildSuccessor(TranslatedElement child) { none() } - - abstract Opcode getOpcode(); -} - -class TranslatedArithmeticLiteral extends TranslatedConstantExpr { - TranslatedArithmeticLiteral() { not expr instanceof StringLiteral } - - override string getInstructionConstantValue(InstructionTag tag) { - tag = OnlyInstructionTag() and - result = expr.getValue() - } - - override Opcode getOpcode() { result instanceof Opcode::Constant } -} - -class TranslatedStringLiteral extends TranslatedConstantExpr { - override StringLiteral expr; - - override StringLiteral getInstructionStringLiteral(InstructionTag tag) { - tag = OnlyInstructionTag() and - result = expr - } - - override Opcode getOpcode() { result instanceof Opcode::StringConstant } -} - -/** - * IR translation of an expression that performs a single operation on its - * operands and returns the result. - */ -abstract class TranslatedSingleInstructionExpr extends TranslatedNonConstantExpr { - /** - * Gets the `Opcode` of the operation to be performed. - */ - abstract Opcode getOpcode(); - - final override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - opcode = this.getOpcode() and - tag = OnlyInstructionTag() and - resultType = this.getResultCSharpType() - } - - final override Instruction getResult() { result = this.getInstruction(OnlyInstructionTag()) } -} - -class TranslatedUnaryExpr extends TranslatedSingleInstructionExpr { - TranslatedUnaryExpr() { - expr instanceof LogicalNotExpr or - expr instanceof ComplementExpr or - expr instanceof UnaryPlusExpr or - expr instanceof UnaryMinusExpr - } - - final override Instruction getFirstInstruction() { - result = this.getOperand().getFirstInstruction() - } - - final override TranslatedElement getChild(int id) { id = 0 and result = this.getOperand() } - - final override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = OnlyInstructionTag() and - result = this.getParent().getChildSuccessor(this) and - kind instanceof GotoEdge - } - - final override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getOperand() and result = this.getInstruction(OnlyInstructionTag()) - } - - final override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - tag = OnlyInstructionTag() and - result = this.getOperand().getResult() and - operandTag instanceof UnaryOperandTag - } - - final override Opcode getOpcode() { - expr instanceof LogicalNotExpr and result instanceof Opcode::LogicalNot - or - expr instanceof ComplementExpr and result instanceof Opcode::BitComplement - or - expr instanceof UnaryPlusExpr and result instanceof Opcode::CopyValue - or - expr instanceof UnaryMinusExpr and result instanceof Opcode::Negate - } - - private TranslatedExpr getOperand() { - result = getTranslatedExpr(expr.(UnaryOperation).getOperand()) - } -} - -/** - * Represents the translation of a cast expression that generates a - * single `Convert` instruction. - */ -class TranslatedCast extends TranslatedNonConstantExpr { - override Cast expr; - - override Instruction getFirstInstruction() { result = this.getOperand().getFirstInstruction() } - - final override TranslatedElement getChild(int id) { id = 0 and result = this.getOperand() } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = ConvertTag() and - result = this.getParent().getChildSuccessor(this) and - kind instanceof GotoEdge - } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getOperand() and result = this.getInstruction(ConvertTag()) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - ( - tag = ConvertTag() and - opcode = this.getOpcode() and - resultType = getTypeForPRValue(expr.getType()) - ) - } - - override Instruction getResult() { result = this.getInstruction(ConvertTag()) } - - override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - ( - tag = ConvertTag() and - operandTag instanceof UnaryOperandTag and - result = this.getOperand().getResult() - ) - } - - private TranslatedExpr getOperand() { result = getTranslatedExpr(expr.getExpr()) } - - private Opcode getOpcode() { - expr instanceof CastExpr and result instanceof Opcode::CheckedConvertOrThrow - or - expr instanceof AsExpr and result instanceof Opcode::CheckedConvertOrNull - } -} - -private Opcode binaryBitwiseOpcode(BinaryBitwiseOperation expr) { - expr instanceof LeftShiftExpr and result instanceof Opcode::ShiftLeft - or - 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 - expr instanceof BitwiseOrExpr and result instanceof Opcode::BitOr - or - expr instanceof BitwiseXorExpr and result instanceof Opcode::BitXor -} - -private Opcode binaryArithmeticOpcode(BinaryArithmeticOperation expr) { - expr instanceof AddExpr and result instanceof Opcode::Add - or - expr instanceof SubExpr and result instanceof Opcode::Sub - or - expr instanceof MulExpr and result instanceof Opcode::Mul - or - expr instanceof DivExpr and result instanceof Opcode::Div - or - expr instanceof RemExpr and result instanceof Opcode::Rem -} - -private Opcode comparisonOpcode(ComparisonOperation expr) { - expr instanceof EQExpr and result instanceof Opcode::CompareEQ - or - expr instanceof NEExpr and result instanceof Opcode::CompareNE - or - expr instanceof LTExpr and result instanceof Opcode::CompareLT - or - expr instanceof GTExpr and result instanceof Opcode::CompareGT - or - expr instanceof LEExpr and result instanceof Opcode::CompareLE - or - expr instanceof GEExpr and result instanceof Opcode::CompareGE -} - -/** - * IR translation of a simple binary operation. - */ -class TranslatedBinaryOperation extends TranslatedSingleInstructionExpr { - TranslatedBinaryOperation() { - expr instanceof BinaryArithmeticOperation or - expr instanceof BinaryBitwiseOperation or - expr instanceof ComparisonOperation - } - - override Instruction getFirstInstruction() { - result = this.getLeftOperand().getFirstInstruction() - } - - final override TranslatedElement getChild(int id) { - id = 0 and result = this.getLeftOperand() - or - id = 1 and result = this.getRightOperand() - } - - final override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - tag = OnlyInstructionTag() and - if this.swapOperandsOnOp() - then ( - operandTag instanceof RightOperandTag and - result = this.getLeftOperand().getResult() - or - operandTag instanceof LeftOperandTag and - result = this.getRightOperand().getResult() - ) else ( - operandTag instanceof LeftOperandTag and - result = this.getLeftOperand().getResult() - or - operandTag instanceof RightOperandTag and - result = this.getRightOperand().getResult() - ) - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = OnlyInstructionTag() and - result = this.getParent().getChildSuccessor(this) and - kind instanceof GotoEdge - } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getLeftOperand() and - result = this.getRightOperand().getFirstInstruction() - or - child = this.getRightOperand() and - result = this.getInstruction(OnlyInstructionTag()) - } - - override Opcode getOpcode() { - result = binaryArithmeticOpcode(expr) or - result = binaryBitwiseOpcode(expr) or - result = comparisonOpcode(expr) - } - - override int getInstructionElementSize(InstructionTag tag) { - tag = OnlyInstructionTag() and - exists(Opcode opcode | - opcode = this.getOpcode() and - ( - opcode instanceof Opcode::PointerAdd or - opcode instanceof Opcode::PointerSub or - opcode instanceof Opcode::PointerDiff - ) and - result = Language::getTypeSize(this.getPointerOperand().getResultType()) - ) - } - - private TranslatedExpr getPointerOperand() { - if this.swapOperandsOnOp() - then result = this.getRightOperand() - else result = this.getLeftOperand() - } - - private predicate swapOperandsOnOp() { - // Swap the operands on a pointer add 'i + p', so that the pointer operand - // always comes first. Note that we still evaluate the operands - // left-to-right. - exists(AddExpr ptrAdd, Type rightType | - ptrAdd = expr and - rightType = ptrAdd.getRightOperand().getType() and - rightType instanceof PointerType - ) - } - - private TranslatedExpr getLeftOperand() { - result = getTranslatedExpr(expr.(BinaryOperation).getLeftOperand()) - } - - private TranslatedExpr getRightOperand() { - result = getTranslatedExpr(expr.(BinaryOperation).getRightOperand()) - } -} - -abstract class TranslatedAssignment extends TranslatedNonConstantExpr { - override Assignment expr; - - final override TranslatedElement getChild(int id) { - id = 0 and result = this.getLeftOperand() - or - id = 1 and result = this.getRightOperand() - } - - final override Instruction getFirstInstruction() { - // Evaluation is right-to-left - result = this.getRightOperand().getFirstInstruction() - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - ( - this.needsConversion() and - tag = AssignmentConvertRightTag() and - // For now only use `Opcode::Convert` to - // crudely represent conversions. Could - // be useful to represent the whole chain of conversions - opcode instanceof Opcode::Convert and - resultType = getTypeForPRValue(expr.getLValue().getType()) - ) - } - - final override Instruction getResult() { result = this.getStoredValue() } - - abstract Instruction getStoredValue(); - - final TranslatedExpr getLeftOperand() { result = getTranslatedExpr(expr.getLValue()) } - - final TranslatedExpr getRightOperand() { result = getTranslatedExpr(expr.getRValue()) } - - final predicate needsConversion() { expr.getLValue().getType() != expr.getRValue().getType() } -} - -class TranslatedAssignExpr extends TranslatedAssignment { - TranslatedAssignExpr() { - expr instanceof AssignExpr and - // if the lvalue is an accessor call, ignore assignment - // since the assignment expr is desugared into a function call - not expr.getLValue() instanceof AccessorCall - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = AssignmentStoreTag() and - result = this.getParent().getChildSuccessor(this) and - kind instanceof GotoEdge - or - this.needsConversion() and - tag = AssignmentConvertRightTag() and - result = this.getLeftOperand().getFirstInstruction() and - kind instanceof GotoEdge - } - - override Instruction getChildSuccessor(TranslatedElement child) { - // Operands are evaluated right-to-left. - ( - child = this.getRightOperand() and - if this.needsConversion() - then result = this.getInstruction(AssignmentConvertRightTag()) - else result = this.getLeftOperand().getFirstInstruction() - ) - or - child = this.getLeftOperand() and - result = this.getInstruction(AssignmentStoreTag()) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - TranslatedAssignment.super.hasInstruction(opcode, tag, resultType) - or - tag = AssignmentStoreTag() and - opcode instanceof Opcode::Store and - resultType = getTypeForPRValue(expr.getType()) - } - - override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - tag = AssignmentStoreTag() and - ( - operandTag instanceof AddressOperandTag and - result = this.getLeftOperand().getResult() - or - ( - operandTag instanceof StoreValueOperandTag and - if this.needsConversion() - then result = this.getInstruction(AssignmentConvertRightTag()) - else result = this.getRightOperand().getResult() - ) - ) - or - tag = AssignmentConvertRightTag() and - operandTag instanceof UnaryOperandTag and - result = this.getRightOperand().getResult() - } - - override Instruction getStoredValue() { result = this.getRightOperand().getResult() } -} - -class TranslatedAssignOperation extends TranslatedAssignment { - override AssignOperation expr; - - TranslatedAssignOperation() { - // Assignments to events is handled differently - not expr.getLValue() instanceof EventAccess - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - kind instanceof GotoEdge and - ( - ( - tag = AssignOperationLoadTag() and - if this.leftOperandNeedsConversion() - then result = this.getInstruction(AssignOperationConvertLeftTag()) - else result = this.getInstruction(AssignOperationOpTag()) - ) - or - tag = AssignOperationConvertLeftTag() and - result = this.getInstruction(AssignOperationOpTag()) - or - ( - tag = AssignOperationOpTag() and - if this.leftOperandNeedsConversion() - then result = this.getInstruction(AssignOperationConvertResultTag()) - else result = this.getInstruction(AssignmentStoreTag()) - ) - or - tag = AssignOperationConvertResultTag() and - result = this.getInstruction(AssignmentStoreTag()) - or - tag = AssignmentStoreTag() and - result = this.getParent().getChildSuccessor(this) - ) - } - - override Instruction getChildSuccessor(TranslatedElement child) { - // Operands are evaluated right-to-left. - child = this.getRightOperand() and - result = this.getLeftOperand().getFirstInstruction() - or - child = this.getLeftOperand() and - result = this.getInstruction(AssignOperationLoadTag()) - } - - override Instruction getStoredValue() { - if this.leftOperandNeedsConversion() - then result = this.getInstruction(AssignOperationConvertResultTag()) - else result = this.getInstruction(AssignOperationOpTag()) - } - - private Type getConvertedLeftOperandType() { - if - 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. - result = this.getRightOperand().getResultType() - } - - private predicate leftOperandNeedsConversion() { - this.getConvertedLeftOperandType() != this.getLeftOperand().getResultType() - } - - private Opcode getOpcode() { - expr instanceof AssignAddExpr and - ( - if expr.getRValue().getType() instanceof PointerType - then result instanceof Opcode::PointerAdd - else result instanceof Opcode::Add - ) - or - expr instanceof AssignSubExpr and - ( - if expr.getRValue().getType() instanceof PointerType - then result instanceof Opcode::PointerSub - else result instanceof Opcode::Sub - ) - or - expr instanceof AssignMulExpr and result instanceof Opcode::Mul - or - expr instanceof AssignDivExpr and result instanceof Opcode::Div - or - expr instanceof AssignRemExpr and result instanceof Opcode::Rem - or - expr instanceof AssignAndExpr and result instanceof Opcode::BitAnd - or - expr instanceof AssignOrExpr and result instanceof Opcode::BitOr - or - expr instanceof AssignXorExpr and result instanceof Opcode::BitXor - or - expr instanceof AssignLeftShiftExpr and result instanceof Opcode::ShiftLeft - or - 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) { - tag = AssignOperationLoadTag() and - opcode instanceof Opcode::Load and - resultType = getTypeForPRValue(this.getLeftOperand().getResultType()) - or - tag = AssignOperationOpTag() and - opcode = this.getOpcode() and - resultType = getTypeForPRValue(this.getConvertedLeftOperandType()) - or - tag = AssignmentStoreTag() and - opcode instanceof Opcode::Store and - resultType = getTypeForPRValue(expr.getType()) - or - this.leftOperandNeedsConversion() and - opcode instanceof Opcode::Convert and - ( - tag = AssignOperationConvertLeftTag() and - resultType = getTypeForPRValue(this.getConvertedLeftOperandType()) - or - tag = AssignOperationConvertResultTag() and - resultType = getTypeForPRValue(this.getLeftOperand().getResultType()) - ) - } - - override int getInstructionElementSize(InstructionTag tag) { - tag = AssignOperationOpTag() and - exists(Opcode opcode | - opcode = this.getOpcode() and - ( - opcode instanceof Opcode::PointerAdd or - opcode instanceof Opcode::PointerSub - ) - ) and - result = Language::getTypeSize(this.getResultType().(PointerType).getReferentType()) - } - - override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - tag = AssignOperationLoadTag() and - operandTag instanceof AddressOperandTag and - result = this.getLeftOperand().getResult() - or - this.leftOperandNeedsConversion() and - tag = AssignOperationConvertLeftTag() and - operandTag instanceof UnaryOperandTag and - result = this.getInstruction(AssignOperationLoadTag()) - or - tag = AssignOperationOpTag() and - ( - ( - operandTag instanceof LeftOperandTag and - if this.leftOperandNeedsConversion() - then result = this.getInstruction(AssignOperationConvertLeftTag()) - else result = this.getInstruction(AssignOperationLoadTag()) - ) - or - operandTag instanceof RightOperandTag and - result = this.getRightOperand().getResult() - ) - or - this.leftOperandNeedsConversion() and - tag = AssignOperationConvertResultTag() and - operandTag instanceof UnaryOperandTag and - result = this.getInstruction(AssignOperationOpTag()) - or - tag = AssignmentStoreTag() and - ( - operandTag instanceof AddressOperandTag and - result = this.getLeftOperand().getResult() - or - operandTag instanceof StoreValueOperandTag and - result = this.getStoredValue() - ) - } -} - -/** - * Abstract class implemented by any `TranslatedElement` that has a child - * expression that is a call to a constructor, in order to - * provide a pointer to the object being constructed. - */ -abstract class ConstructorCallContext extends TranslatedElement { - /** - * Gets the instruction whose result value is the address of the object to be - * constructed. - */ - abstract Instruction getReceiver(); -} - -class TranslatedConditionalExpr extends TranslatedNonConstantExpr, ConditionContext { - override ConditionalExpr expr; - - final override TranslatedElement getChild(int id) { - id = 0 and result = this.getCondition() - or - id = 1 and result = this.getThen() - or - id = 2 and result = this.getElse() - } - - override Instruction getFirstInstruction() { result = this.getCondition().getFirstInstruction() } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - not this.resultIsVoid() and - ( - ( - not this.thenIsVoid() and tag = ConditionValueTrueTempAddressTag() - or - not this.elseIsVoid() and tag = ConditionValueFalseTempAddressTag() - or - tag = ConditionValueResultTempAddressTag() - ) and - opcode instanceof Opcode::VariableAddress and - resultType = getTypeForGLValue(this.getResultType()) - or - ( - not this.thenIsVoid() and tag = ConditionValueTrueStoreTag() - or - not this.elseIsVoid() and tag = ConditionValueFalseStoreTag() - ) and - opcode instanceof Opcode::Store and - resultType = getTypeForPRValue(this.getResultType()) - or - tag = ConditionValueResultLoadTag() and - opcode instanceof Opcode::Load and - resultType = this.getResultCSharpType() - ) - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - not this.resultIsVoid() and - kind instanceof GotoEdge and - ( - not this.thenIsVoid() and - ( - tag = ConditionValueTrueTempAddressTag() and - result = this.getInstruction(ConditionValueTrueStoreTag()) - or - tag = ConditionValueTrueStoreTag() and - result = this.getInstruction(ConditionValueResultTempAddressTag()) - ) - or - not this.elseIsVoid() and - ( - tag = ConditionValueFalseTempAddressTag() and - result = this.getInstruction(ConditionValueFalseStoreTag()) - or - tag = ConditionValueFalseStoreTag() and - result = this.getInstruction(ConditionValueResultTempAddressTag()) - ) - or - tag = ConditionValueResultTempAddressTag() and - result = this.getInstruction(ConditionValueResultLoadTag()) - or - tag = ConditionValueResultLoadTag() and - result = this.getParent().getChildSuccessor(this) - ) - } - - override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - not this.resultIsVoid() and - ( - not this.thenIsVoid() and - tag = ConditionValueTrueStoreTag() and - ( - operandTag instanceof AddressOperandTag and - result = this.getInstruction(ConditionValueTrueTempAddressTag()) - or - operandTag instanceof StoreValueOperandTag and - result = this.getThen().getResult() - ) - or - not this.elseIsVoid() and - tag = ConditionValueFalseStoreTag() and - ( - operandTag instanceof AddressOperandTag and - result = this.getInstruction(ConditionValueFalseTempAddressTag()) - or - operandTag instanceof StoreValueOperandTag and - result = this.getElse().getResult() - ) - or - tag = ConditionValueResultLoadTag() and - operandTag instanceof AddressOperandTag and - result = this.getInstruction(ConditionValueResultTempAddressTag()) - ) - } - - override predicate hasTempVariable(TempVariableTag tag, CSharpType type) { - not this.resultIsVoid() and - tag = ConditionValueTempVar() and - type = getTypeForPRValue(this.getResultType()) - } - - override IRVariable getInstructionVariable(InstructionTag tag) { - not this.resultIsVoid() and - ( - tag = ConditionValueTrueTempAddressTag() or - tag = ConditionValueFalseTempAddressTag() or - tag = ConditionValueResultTempAddressTag() - ) and - result = this.getTempVariable(ConditionValueTempVar()) - } - - override Instruction getResult() { - not this.resultIsVoid() and - result = this.getInstruction(ConditionValueResultLoadTag()) - } - - override Instruction getChildSuccessor(TranslatedElement child) { - ( - child = this.getThen() and - if this.thenIsVoid() - then result = this.getParent().getChildSuccessor(this) - else result = this.getInstruction(ConditionValueTrueTempAddressTag()) - ) - or - ( - child = this.getElse() and - if this.elseIsVoid() - then result = this.getParent().getChildSuccessor(this) - else result = this.getInstruction(ConditionValueFalseTempAddressTag()) - ) - } - - override Instruction getChildTrueSuccessor(ConditionBase child) { - child = this.getCondition() and - result = this.getThen().getFirstInstruction() - } - - override Instruction getChildFalseSuccessor(ConditionBase child) { - child = this.getCondition() and - result = this.getElse().getFirstInstruction() - } - - private TranslatedCondition getCondition() { - result = getTranslatedCondition(expr.getCondition()) - } - - private TranslatedExpr getThen() { result = getTranslatedExpr(expr.getThen()) } - - private TranslatedExpr getElse() { result = getTranslatedExpr(expr.getElse()) } - - private predicate thenIsVoid() { - this.getThen().getResultType() instanceof VoidType - or - // A `ThrowExpr.getType()` incorrectly returns the type of exception being - // thrown, rather than `void`. Handle that case here. - expr.getThen() instanceof ThrowExpr - } - - private predicate elseIsVoid() { - this.getElse().getResultType() instanceof VoidType - or - // A `ThrowExpr.getType()` incorrectly returns the type of exception being - // thrown, rather than `void`. Handle that case here. - expr.getElse() instanceof ThrowExpr - } - - private predicate resultIsVoid() { this.getResultType() instanceof VoidType } -} - -/** - * The IR translation of an `IsExpr`. - */ -// TODO: Once `TranslatedInitialization.qll` is refactored, -// get rid of the initialization here. -// TODO: Refactor the generated instructions since it's pretty cluttered. -class TranslatedIsExpr extends TranslatedNonConstantExpr { - override IsExpr expr; - - override Instruction getFirstInstruction() { result = this.getIsExpr().getFirstInstruction() } - - final override TranslatedElement getChild(int id) { - id = 0 and result = this.getIsExpr() - or - id = 1 and result = this.getPatternVarDecl() - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = ConvertTag() and - kind instanceof GotoEdge and - result = this.getInstruction(GeneratedConstantTag()) - or - this.hasVar() and - tag = InitializerStoreTag() and - kind instanceof GotoEdge and - result = this.getParent().getChildSuccessor(this) - or - ( - tag = GeneratedNeqTag() and - kind instanceof GotoEdge and - if this.hasVar() - then result = this.getInstruction(GeneratedBranchTag()) - else result = this.getParent().getChildSuccessor(this) - ) - or - // If a var is declared, we only do the initialization - // if the `IsExpr` is evaluated to `true`. - this.hasVar() and - tag = GeneratedBranchTag() and - ( - kind instanceof TrueEdge and - result = this.getInstruction(InitializerStoreTag()) - or - kind instanceof FalseEdge and - result = this.getParent().getChildSuccessor(this) - ) - or - tag = GeneratedConstantTag() and - kind instanceof GotoEdge and - if this.hasVar() - then result = this.getPatternVarDecl().getFirstInstruction() - else result = this.getInstruction(GeneratedNeqTag()) - } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getIsExpr() and - result = this.getInstruction(ConvertTag()) - or - this.hasVar() and - child = this.getPatternVarDecl() and - result = this.getInstruction(GeneratedNeqTag()) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - this.hasVar() and - tag = InitializerStoreTag() and - opcode instanceof Opcode::Store and - resultType = getTypeForPRValue(expr.getPattern().getType()) - or - tag = ConvertTag() and - opcode instanceof Opcode::CheckedConvertOrNull and - resultType = getTypeForPRValue(expr.getPattern().getType()) - or - tag = GeneratedNeqTag() and - opcode instanceof Opcode::CompareNE and - resultType = getTypeForPRValue(expr.getType()) - or - tag = GeneratedConstantTag() and - opcode instanceof Opcode::Constant and - resultType = getTypeForPRValue(expr.getPattern().getType()) - or - this.hasVar() and - tag = GeneratedBranchTag() and - opcode instanceof Opcode::ConditionalBranch and - resultType = getVoidType() - } - - override string getInstructionConstantValue(InstructionTag tag) { - tag = GeneratedConstantTag() and - // Review: "0" or "null"? - result = "0" - } - - override Instruction getResult() { result = this.getInstruction(GeneratedNeqTag()) } - - override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - tag = ConvertTag() and - operandTag instanceof UnaryOperandTag and - result = this.getIsExpr().getResult() - or - this.hasVar() and - tag = InitializerStoreTag() and - ( - operandTag instanceof StoreValueOperandTag and - result = this.getInstruction(ConvertTag()) - or - operandTag instanceof AddressOperandTag and - result = this.getPatternVarDecl().getTargetAddress() - ) - or - tag = GeneratedNeqTag() and - ( - operandTag instanceof LeftOperandTag and - result = this.getInstruction(ConvertTag()) - or - operandTag instanceof RightOperandTag and - result = this.getInstruction(GeneratedConstantTag()) - ) - or - this.hasVar() and - tag = GeneratedBranchTag() and - operandTag instanceof ConditionOperandTag and - result = this.getInstruction(GeneratedNeqTag()) - } - - private TranslatedExpr getIsExpr() { result = getTranslatedExpr(expr.getExpr()) } - - private predicate hasVar() { exists(this.getPatternVarDecl()) } - - private TranslatedLocalVariableDeclaration getPatternVarDecl() { - result = getTranslatedLocalDeclaration(expr.getPattern()) - } -} - -/** - * The IR translation of a lambda expression. This initializes a temporary variable whose type is that of the lambda, - * using the initializer list that represents the captures of the lambda. - */ -class TranslatedLambdaExpr extends TranslatedNonConstantExpr, InitializationContext { - override LambdaExpr expr; - - final override Instruction getFirstInstruction() { - result = this.getInstruction(InitializerVariableAddressTag()) - } - - final override TranslatedElement getChild(int id) { id = 0 and result = this.getInitialization() } - - override Instruction getResult() { result = this.getInstruction(LoadTag()) } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = InitializerVariableAddressTag() and - kind instanceof GotoEdge and - result = this.getInstruction(InitializerStoreTag()) - or - tag = InitializerStoreTag() and - kind instanceof GotoEdge and - ( - result = this.getInitialization().getFirstInstruction() - or - not this.hasInitializer() and result = this.getInstruction(LoadTag()) - ) - or - tag = LoadTag() and - kind instanceof GotoEdge and - result = this.getParent().getChildSuccessor(this) - } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getInitialization() and - result = this.getInstruction(LoadTag()) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = InitializerVariableAddressTag() and - opcode instanceof Opcode::VariableAddress and - resultType = getTypeForGLValue(expr.getType()) - or - tag = InitializerStoreTag() and - opcode instanceof Opcode::Uninitialized and - resultType = getTypeForPRValue(expr.getType()) - or - tag = LoadTag() and - opcode instanceof Opcode::Load and - resultType = getTypeForPRValue(expr.getType()) - } - - override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - tag = InitializerStoreTag() and - operandTag instanceof AddressOperandTag and - result = this.getInstruction(InitializerVariableAddressTag()) - or - tag = LoadTag() and - operandTag instanceof AddressOperandTag and - result = this.getInstruction(InitializerVariableAddressTag()) - } - - override IRVariable getInstructionVariable(InstructionTag tag) { - ( - tag = InitializerVariableAddressTag() or - tag = InitializerStoreTag() - ) and - result = this.getTempVariable(LambdaTempVar()) - } - - override predicate hasTempVariable(TempVariableTag tag, CSharpType type) { - tag = LambdaTempVar() and - type = getTypeForPRValue(this.getResultType()) - } - - final override Instruction getTargetAddress() { - result = this.getInstruction(InitializerVariableAddressTag()) - } - - final override Type getTargetType() { result = this.getResultType() } - - private predicate hasInitializer() { exists(this.getInitialization()) } - - private TranslatedInitialization getInitialization() { - result = getTranslatedInitialization(expr.getChild(0)) - } -} - -/** - * The translation of a `DelegateCall`. Since this type of call needs - * desugaring, we treat it as a special case. The AST node of the - * call expression will be the parent to a compiler generated call. - */ -class TranslatedDelegateCall extends TranslatedNonConstantExpr { - override DelegateCall expr; - - final override Instruction getFirstInstruction() { - result = this.getInvokeCall().getFirstInstruction() - } - - final override TranslatedElement getChild(int id) { id = 0 and result = this.getInvokeCall() } - - override Instruction getResult() { result = this.getInvokeCall().getResult() } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getInvokeCall() and - result = this.getParent().getChildSuccessor(this) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } - - override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { none() } - - private TranslatedCompilerGeneratedCall getInvokeCall() { - result = DelegateElements::getInvoke(expr) - } -} - -/** - * Represents the IR translation of creation expression. Can be the translation of an - * `ObjectCreation` or a `DelegateCreation`. - * The `NewObj` instruction denotes the fact that during initialization a new - * object is allocated, which is then initialized by the constructor. - */ -abstract class TranslatedCreation extends TranslatedCoreExpr, TTranslatedCreationExpr, - ConstructorCallContext -{ - TranslatedCreation() { this = TTranslatedCreationExpr(expr) } - - override TranslatedElement getChild(int id) { - id = 0 and result = this.getConstructorCall() - or - id = 1 and result = this.getInitializerExpr() - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - // Instruction that allocated space for a new object, - // and returns its address - tag = NewObjTag() and - opcode instanceof Opcode::NewObj and - resultType = getTypeForPRValue(expr.getType()) - or - this.needsLoad() and - tag = LoadTag() and - opcode instanceof Opcode::Load and - resultType = getTypeForPRValue(expr.getType()) - } - - final override Instruction getFirstInstruction() { result = this.getInstruction(NewObjTag()) } - - override Instruction getResult() { - if this.needsLoad() - then result = this.getInstruction(LoadTag()) - else result = this.getInstruction(NewObjTag()) - } - - override Instruction getReceiver() { result = this.getInstruction(NewObjTag()) } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - kind instanceof GotoEdge and - tag = NewObjTag() and - result = this.getConstructorCall().getFirstInstruction() - or - this.needsLoad() and - kind instanceof GotoEdge and - tag = LoadTag() and - result = this.getParent().getChildSuccessor(this) - } - - override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - this.needsLoad() and - tag = LoadTag() and - operandTag instanceof AddressOperandTag and - result = this.getInstruction(NewObjTag()) - } - - override Instruction getChildSuccessor(TranslatedElement child) { - ( - child = this.getConstructorCall() and - if exists(this.getInitializerExpr()) - then result = this.getInitializerExpr().getFirstInstruction() - else result = this.getLoadOrChildSuccessor() - ) - or - child = this.getInitializerExpr() and - result = this.getLoadOrChildSuccessor() - } - - private Instruction getLoadOrChildSuccessor() { - if this.needsLoad() - then result = this.getInstruction(LoadTag()) - else result = this.getParent().getChildSuccessor(this) - } - - abstract TranslatedElement getConstructorCall(); - - abstract TranslatedExpr getInitializerExpr(); - - /** - * If the newly allocated object is a value type, then we need - * to load the newly allocated object before storing it in the variable, - * since `NewObj` returns an address. - */ - abstract predicate needsLoad(); -} - -/** - * Represents the IR translation of an `ObjectCreation`. - */ -class TranslatedObjectCreation extends TranslatedCreation { - override ObjectCreation expr; - - override TranslatedExpr getInitializerExpr() { result = getTranslatedExpr(expr.getInitializer()) } - - override TranslatedConstructorCall getConstructorCall() { - // Since calls are also expressions, we can't - // use the predicate getTranslatedExpr (since that would - // also return `this`). - result.getAst() = this.getAst() - } - - override predicate needsLoad() { expr.getObjectType().isValueType() } -} - -/** - * Represents the IR translation of a `DelegateCreation`. - */ -class TranslatedDelegateCreation extends TranslatedCreation { - override DelegateCreation expr; - - override TranslatedExpr getInitializerExpr() { none() } - - override TranslatedElement getConstructorCall() { - result = DelegateElements::getConstructor(expr) - } - - override predicate needsLoad() { none() } -} - -/** - * Represents the IR translation of an assign operation where the lhs is an event access. - */ -class TranslatedEventAccess extends TranslatedNonConstantExpr { - override AssignOperation expr; - - TranslatedEventAccess() { expr.getLValue() instanceof EventAccess } - - // We only translate the lhs, since the rhs is translated as part of the - // accessor call. - override TranslatedElement getChild(int id) { id = 0 and result = this.getLValue() } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } - - final override Instruction getFirstInstruction() { - result = this.getLValue().getFirstInstruction() - } - - override Instruction getResult() { none() } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getLValue() and - result = this.getParent().getChildSuccessor(this) - } - - private TranslatedExpr getLValue() { result = getTranslatedExpr(expr.getLValue()) } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedFunction.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedFunction.qll deleted file mode 100644 index f0970984d46..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedFunction.qll +++ /dev/null @@ -1,333 +0,0 @@ -import csharp -import experimental.ir.implementation.raw.IR -private import experimental.ir.implementation.Opcode -private import experimental.ir.internal.CSharpType -private import experimental.ir.internal.IRUtilities -private import experimental.ir.implementation.internal.OperandTag -private import experimental.ir.internal.TempVariableTag -private import InstructionTag -private import TranslatedElement -private import TranslatedExpr -private import TranslatedInitialization -private import TranslatedStmt -private import experimental.ir.internal.IRCSharpLanguage as Language - -/** - * Gets the `TranslatedFunction` that represents function `callable`. - */ -TranslatedFunction getTranslatedFunction(Callable callable) { result.getAst() = callable } - -/** - * Represents the IR translation of a function. This is the root element for - * all other elements associated with this function. - */ -class TranslatedFunction extends TranslatedElement, TTranslatedFunction { - Callable callable; - - TranslatedFunction() { this = TTranslatedFunction(callable) } - - final override string toString() { result = callable.toString() } - - final override Language::AST getAst() { result = callable } - - /** - * Gets the function being translated. - */ - final override Callable getFunction() { result = callable } - - final override TranslatedElement getChild(int id) { - id = -2 and result = this.getConstructorInitializer() - or - id = -1 and result = this.getBody() - or - result = this.getParameter(id) - } - - final private TranslatedConstructorInitializer getConstructorInitializer() { - exists(ConstructorInitializer ci | - ci = callable.getAChild() and - result = getTranslatedConstructorInitializer(ci) - ) - } - - final private TranslatedStmt getBody() { result = getTranslatedStmt(callable.getBody()) } - - final private TranslatedParameter getParameter(int index) { - result = getTranslatedParameter(callable.getParameter(index)) - } - - final override Instruction getFirstInstruction() { - result = this.getInstruction(EnterFunctionTag()) - } - - final override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - kind instanceof GotoEdge and - ( - tag = EnterFunctionTag() and - result = this.getInstruction(AliasedDefinitionTag()) - or - ( - tag = AliasedDefinitionTag() and - if exists(this.getThisType()) - then result = this.getInstruction(InitializeThisTag()) - else - if exists(this.getParameter(0)) - then result = this.getParameter(0).getFirstInstruction() - else result = this.getBodyOrReturn() - ) - or - ( - tag = InitializeThisTag() and - if exists(this.getParameter(0)) - then result = this.getParameter(0).getFirstInstruction() - else - if exists(this.getConstructorInitializer()) - then result = this.getConstructorInitializer().getFirstInstruction() - else result = this.getBodyOrReturn() - ) - or - tag = ReturnValueAddressTag() and - result = this.getInstruction(ReturnTag()) - or - tag = ReturnTag() and - result = this.getInstruction(AliasedUseTag()) - or - tag = UnwindTag() and - result = this.getInstruction(AliasedUseTag()) - or - tag = AliasedUseTag() and - result = this.getInstruction(ExitFunctionTag()) - ) - } - - final override Instruction getChildSuccessor(TranslatedElement child) { - exists(int paramIndex | - child = this.getParameter(paramIndex) and - if exists(callable.getParameter(paramIndex + 1)) - then result = this.getParameter(paramIndex + 1).getFirstInstruction() - else - if exists(this.getConstructorInitializer()) - then result = this.getConstructorInitializer().getFirstInstruction() - else result = this.getBodyOrReturn() - ) - or - child = this.getConstructorInitializer() and - result = this.getBodyOrReturn() - or - child = this.getBody() and - result = this.getReturnSuccessorInstruction() - } - - private Instruction getBodyOrReturn() { - if exists(this.getBody()) - then result = this.getBody().getFirstInstruction() - else result = this.getReturnSuccessorInstruction() - } - - final override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - ( - tag = EnterFunctionTag() and - opcode instanceof Opcode::EnterFunction and - resultType = getVoidType() - or - tag = AliasedDefinitionTag() and - opcode instanceof Opcode::AliasedDefinition and - resultType = getUnknownType() - or - tag = InitializeThisTag() and - opcode instanceof Opcode::InitializeThis and - resultType = getTypeForGLValue(this.getThisType()) - or - tag = ReturnValueAddressTag() and - opcode instanceof Opcode::VariableAddress and - not this.getReturnType() instanceof VoidType and - resultType = getTypeForGLValue(this.getReturnType()) - or - ( - tag = ReturnTag() and - resultType = getVoidType() and - if this.getReturnType() instanceof VoidType - then opcode instanceof Opcode::ReturnVoid - else opcode instanceof Opcode::ReturnValue - ) - or - tag = UnwindTag() and - opcode instanceof Opcode::Unwind and - resultType = getVoidType() and - ( - // Only generate the `Unwind` instruction if there is any exception - // handling present in the function (compiler generated or not). - exists(TryStmt try | try.getEnclosingCallable() = callable) or - exists(ThrowStmt throw | throw.getEnclosingCallable() = callable) - ) - or - tag = AliasedUseTag() and - opcode instanceof Opcode::AliasedUse and - resultType = getVoidType() - or - tag = ExitFunctionTag() and - opcode instanceof Opcode::ExitFunction and - resultType = getVoidType() - ) - } - - final override Instruction getExceptionSuccessorInstruction() { - result = this.getInstruction(UnwindTag()) - } - - final override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - tag = ReturnTag() and - not this.getReturnType() instanceof VoidType and - operandTag instanceof AddressOperandTag and - result = this.getInstruction(ReturnValueAddressTag()) - } - - final override CSharpType getInstructionOperandType(InstructionTag tag, TypedOperandTag operandTag) { - tag = ReturnTag() and - not this.getReturnType() instanceof VoidType and - operandTag instanceof LoadOperandTag and - result = getTypeForPRValue(this.getReturnType()) - or - tag = AliasedUseTag() and - operandTag instanceof SideEffectOperandTag and - result = getUnknownType() - } - - final override IRVariable getInstructionVariable(InstructionTag tag) { - tag = ReturnValueAddressTag() and - result = this.getReturnVariable() - } - - final override predicate hasTempVariable(TempVariableTag tag, CSharpType type) { - tag = ReturnValueTempVar() and - type = getTypeForPRValue(this.getReturnType()) and - not this.getReturnType() instanceof VoidType - } - - /** - * Gets the instruction to which control should flow after a `return` - * statement. In C#, this should be the instruction which generates `VariableAddress[#return]`. - */ - final Instruction getReturnSuccessorInstruction() { - if this.getReturnType() instanceof VoidType - then result = this.getInstruction(ReturnTag()) - else result = this.getInstruction(ReturnValueAddressTag()) - } - - /** - * Gets the variable that represents the return value of this function. - */ - final IRReturnVariable getReturnVariable() { - result = getIRTempVariable(callable, ReturnValueTempVar()) - } - - /** - * Gets the single `InitializeThis` instruction for this function. Holds only - * if the function is an instance member function, constructor, or destructor. - */ - final Instruction getInitializeThisInstruction() { - result = this.getInstruction(InitializeThisTag()) - } - - /** - * Gets the type pointed to by the `this` pointer for this function (i.e. `*this`). - * Holds only if the function is an instance member function, constructor, or destructor. - */ - final Type getThisType() { - // `callable` is a user declared member and it is not static - callable instanceof Member and - not callable.(Member).isStatic() and - result = callable.getDeclaringType() - or - // `callable` is a compiler generated accessor - callable instanceof Accessor and - not callable.(Accessor).isStatic() and - result = callable.getDeclaringType() - } - - /** - * Holds if this function defines or accesses variable `var` with type `type`. This includes all - * parameters and local variables, plus any static fields that are directly accessed by the - * function. - */ - final predicate hasUserVariable(Variable var, CSharpType type) { - ( - var.(Member).isStatic() and - exists(VariableAccess access | - access.getTarget() = var and - access.getEnclosingCallable() = callable - ) - or - var.(LocalScopeVariable).getCallable() = callable - ) and - type = getTypeForPRValue(getVariableType(var)) - } - - final private Type getReturnType() { result = callable.getReturnType() } -} - -/** - * Gets the `TranslatedParameter` that represents parameter `param`. - */ -TranslatedParameter getTranslatedParameter(Parameter param) { result.getAst() = param } - -/** - * Represents the IR translation of a function parameter, including the - * initialization of that parameter with the incoming argument. - */ -class TranslatedParameter extends TranslatedElement, TTranslatedParameter { - Parameter param; - - TranslatedParameter() { this = TTranslatedParameter(param) } - - final override string toString() { result = param.toString() } - - final override Language::AST getAst() { result = param } - - final override Callable getFunction() { result = param.getCallable() } - - final override Instruction getFirstInstruction() { - result = this.getInstruction(InitializerVariableAddressTag()) - } - - final override TranslatedElement getChild(int id) { none() } - - final override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - kind instanceof GotoEdge and - ( - tag = InitializerVariableAddressTag() and - result = this.getInstruction(InitializerStoreTag()) - or - tag = InitializerStoreTag() and - result = this.getParent().getChildSuccessor(this) - ) - } - - final override Instruction getChildSuccessor(TranslatedElement child) { none() } - - final override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = InitializerVariableAddressTag() and - opcode instanceof Opcode::VariableAddress and - resultType = getTypeForGLValue(param.getType()) - or - tag = InitializerStoreTag() and - opcode instanceof Opcode::InitializeParameter and - resultType = getTypeForPRValue(param.getType()) - } - - final override IRVariable getInstructionVariable(InstructionTag tag) { - ( - tag = InitializerStoreTag() or - tag = InitializerVariableAddressTag() - ) and - result = getIRUserVariable(this.getFunction(), param) - } - - final override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - tag = InitializerStoreTag() and - ( - operandTag instanceof AddressOperandTag and - result = this.getInstruction(InitializerVariableAddressTag()) - ) - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedInitialization.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedInitialization.qll deleted file mode 100644 index c7cb9232d55..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedInitialization.qll +++ /dev/null @@ -1,388 +0,0 @@ -/** - * Class that deals with variable initializations. - * Separated from `TranslatedExpr` for clarity. - */ - -import csharp -private import experimental.ir.implementation.Opcode -private import experimental.ir.implementation.internal.OperandTag -private import experimental.ir.internal.CSharpType -private import InstructionTag -private import TranslatedElement -private import TranslatedExpr -private import TranslatedFunction -private import IRInternal -private import desugar.Delegate - -/** - * Gets the `TranslatedInitialization` for the expression `expr`. - */ -TranslatedInitialization getTranslatedInitialization(Expr expr) { result.getExpr() = expr } - -/** - * Base class for any `TranslatedElement` that has an initialization as a child. - * Provides the child with the address and type of the location to be - * initialized. - */ -abstract class InitializationContext extends TranslatedElement { - /** - * Gets the instruction that produces the address of the location to be - * initialized. - */ - abstract Instruction getTargetAddress(); - - /** - * Gets the type of the location to be initialized. - */ - abstract Type getTargetType(); -} - -/** - * Represents the IR translation of any initialization, whether from an - * initializer list or from a direct initializer. - */ -abstract class TranslatedInitialization extends TranslatedElement, TTranslatedInitialization { - Expr expr; - - TranslatedInitialization() { this = TTranslatedInitialization(expr) } - - final override string toString() { result = "init: " + expr.toString() } - - final override Callable getFunction() { result = expr.getEnclosingCallable() } - - final override Language::AST getAst() { result = expr } - - /** - * Gets the expression that is doing the initialization. - */ - final Expr getExpr() { result = expr } - - /** - * Gets the initialization context that describes the location being - * initialized. - */ - final InitializationContext getContext() { result = this.getParent() } - - final TranslatedFunction getEnclosingFunction() { - result = getTranslatedFunction(expr.getEnclosingCallable()) - } -} - -/** - * Represents the IR translation of an initialization from an initializer list. - */ -abstract class TranslatedListInitialization extends TranslatedInitialization, InitializationContext { - override Instruction getFirstInstruction() { - result = this.getChild(0).getFirstInstruction() - or - not exists(this.getChild(0)) and result = this.getParent().getChildSuccessor(this) - } - - override Instruction getChildSuccessor(TranslatedElement child) { - exists(int index | - child = this.getChild(index) and - if exists(this.getChild(index + 1)) - then result = this.getChild(index + 1).getFirstInstruction() - else result = this.getParent().getChildSuccessor(this) - ) - } - - final override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } - - final override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - override Instruction getTargetAddress() { result = this.getContext().getTargetAddress() } - - override Type getTargetType() { result = this.getContext().getTargetType() } -} - -/** - * Represents the IR translation of an initialization of an array from an - * initializer list. - */ -class TranslatedArrayListInitialization extends TranslatedListInitialization { - override ArrayInitializer expr; - - override TranslatedElement getChild(int id) { - // The children are in initialization order - result = - rank[id + 1](TranslatedElementInitialization init | - init.getInitList() = expr - | - init order by init.getElementIndex() - ) - } -} - -/** - * Represents the IR translation of an initialization from a single initializer - * expression, where the initialization is performed via bitwise copy. - */ -class TranslatedDirectInitialization extends TranslatedInitialization { - TranslatedDirectInitialization() { - not expr instanceof ArrayInitializer and - not expr instanceof ObjectInitializer and - not expr instanceof CollectionInitializer - } - - override TranslatedElement getChild(int id) { id = 0 and result = this.getInitializer() } - - override Instruction getFirstInstruction() { - result = this.getInitializer().getFirstInstruction() - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = InitializerStoreTag() and - opcode instanceof Opcode::Store and - resultType = getTypeForPRValue(this.getContext().getTargetType()) - or - this.needsConversion() and - tag = AssignmentConvertRightTag() and - // For now only use `Opcode::Convert` to - // crudely represent conversions. Could - // be useful to represent the whole chain of conversions - opcode instanceof Opcode::Convert and - resultType = getTypeForPRValue(this.getContext().getTargetType()) - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = InitializerStoreTag() and - result = this.getParent().getChildSuccessor(this) and - kind instanceof GotoEdge - or - this.needsConversion() and - tag = AssignmentConvertRightTag() and - result = this.getInstruction(InitializerStoreTag()) and - kind instanceof GotoEdge - } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getInitializer() and - if this.needsConversion() - then result = this.getInstruction(AssignmentConvertRightTag()) - else result = this.getInstruction(InitializerStoreTag()) - } - - override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - tag = InitializerStoreTag() and - ( - operandTag instanceof AddressOperandTag and - result = this.getParent().(InitializationContext).getTargetAddress() - or - ( - operandTag instanceof AddressOperandTag and - result = this.getContext().getTargetAddress() - or - operandTag instanceof StoreValueOperandTag and - result = this.getInitializer().getResult() - ) - ) - or - tag = AssignmentConvertRightTag() and - operandTag instanceof UnaryOperandTag and - result = this.getInitializer().getResult() - or - tag = AssignmentConvertRightTag() and - operandTag instanceof UnaryOperandTag and - result = this.getInstruction(NewObjTag()) - } - - TranslatedExpr getInitializer() { result = getTranslatedExpr(expr) } - - private predicate needsConversion() { expr.getType() != this.getContext().getTargetType() } -} - -/** - * Represents the IR translation of the initialization of an array element from - * an element of an initializer list. - */ -abstract class TranslatedElementInitialization extends TranslatedElement { - ArrayInitializer initList; - - final override string toString() { - result = initList.toString() + "[" + this.getElementIndex().toString() + "]" - } - - final override Language::AST getAst() { result = initList } - - final override Callable getFunction() { result = initList.getEnclosingCallable() } - - final override Instruction getFirstInstruction() { - result = this.getInstruction(this.getElementIndexTag()) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = this.getElementIndexTag() and - opcode instanceof Opcode::Constant and - resultType = getIntType() - or - tag = this.getElementAddressTag() and - opcode instanceof Opcode::PointerAdd and - resultType = getTypeForGLValue(this.getElementType()) - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = this.getElementIndexTag() and - result = this.getInstruction(this.getElementAddressTag()) and - kind instanceof GotoEdge - } - - override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - tag = this.getElementAddressTag() and - ( - operandTag instanceof LeftOperandTag and - result = this.getParent().(InitializationContext).getTargetAddress() - or - operandTag instanceof RightOperandTag and - result = this.getInstruction(this.getElementIndexTag()) - ) - } - - override int getInstructionElementSize(InstructionTag tag) { - tag = this.getElementAddressTag() and - result = Language::getTypeSize(this.getElementType()) - } - - override string getInstructionConstantValue(InstructionTag tag) { - tag = this.getElementIndexTag() and - result = this.getElementIndex().toString() - } - - abstract int getElementIndex(); - - final InstructionTag getElementAddressTag() { - result = InitializerElementAddressTag(this.getElementIndex()) - } - - final InstructionTag getElementIndexTag() { - result = InitializerElementIndexTag(this.getElementIndex()) - } - - final ArrayInitializer getInitList() { result = initList } - - final Type getElementType() { result = initList.getAnElement().getType() } -} - -/** - * Represents the IR translation of the initialization of an array element from - * an explicit element in an initializer list. - */ -class TranslatedExplicitElementInitialization extends TranslatedElementInitialization, - TTranslatedExplicitElementInitialization, InitializationContext -{ - int elementIndex; - - TranslatedExplicitElementInitialization() { - this = TTranslatedExplicitElementInitialization(initList, elementIndex) - } - - override Instruction getTargetAddress() { - result = this.getInstruction(this.getElementAddressTag()) - } - - override Type getTargetType() { result = this.getElementType() } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - result = TranslatedElementInitialization.super.getInstructionSuccessor(tag, kind) - or - tag = this.getElementAddressTag() and - result = this.getInitialization().getFirstInstruction() and - kind instanceof GotoEdge - } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getInitialization() and result = this.getParent().getChildSuccessor(this) - } - - override TranslatedElement getChild(int id) { id = 0 and result = this.getInitialization() } - - override int getElementIndex() { result = elementIndex } - - TranslatedInitialization getInitialization() { - result = getTranslatedInitialization(initList.getElement(elementIndex)) - } -} - -// TODO: Possibly refactor into something simpler -abstract class TranslatedConstructorCallFromConstructor extends TranslatedElement, - ConstructorCallContext -{ - Call call; - - final override Language::AST getAst() { result = call } - - final override TranslatedElement getChild(int id) { - id = 0 and result = this.getConstructorCall() - } - - final override Callable getFunction() { result = call.getEnclosingCallable() } - - final override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getConstructorCall() and - result = this.getParent().getChildSuccessor(this) - } - - final TranslatedExpr getConstructorCall() { result = getTranslatedExpr(call) } -} - -TranslatedConstructorInitializer getTranslatedConstructorInitializer(ConstructorInitializer ci) { - result.getAst() = ci -} - -/** - * Represents the IR translation of a call from a constructor to a base class - * constructor or another constructor in same class . - */ -// Review: do we need the conversion instructions in C#? -class TranslatedConstructorInitializer extends TranslatedConstructorCallFromConstructor, - TTranslatedConstructorInitializer -{ - TranslatedConstructorInitializer() { this = TTranslatedConstructorInitializer(call) } - - override string toString() { result = "constructor init: " + call.toString() } - - override Instruction getFirstInstruction() { - if this.needsConversion() - then result = this.getInstruction(OnlyInstructionTag()) - else result = this.getConstructorCall().getFirstInstruction() - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - this.needsConversion() and - tag = OnlyInstructionTag() and - opcode instanceof Opcode::Convert and - resultType = getTypeForGLValue(call.getTarget().getDeclaringType()) - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = OnlyInstructionTag() and - kind instanceof GotoEdge and - result = this.getConstructorCall().getFirstInstruction() - } - - override Instruction getReceiver() { - if this.needsConversion() - then result = this.getInstruction(OnlyInstructionTag()) - else result = getTranslatedFunction(this.getFunction()).getInitializeThisInstruction() - } - - override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - tag = OnlyInstructionTag() and - operandTag instanceof UnaryOperandTag and - result = getTranslatedFunction(this.getFunction()).getInitializeThisInstruction() - } - - predicate needsConversion() { - call.getTarget().getDeclaringType() != this.getFunction().getDeclaringType() - } - - override predicate getInstructionInheritance( - InstructionTag tag, Class baseClass, Class derivedClass - ) { - tag = OnlyInstructionTag() and - baseClass = call.getTarget().getDeclaringType() and - derivedClass = this.getFunction().getDeclaringType() - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedStmt.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedStmt.qll deleted file mode 100644 index 71d8c42e170..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedStmt.qll +++ /dev/null @@ -1,1092 +0,0 @@ -import csharp -private import experimental.ir.internal.CSharpType -private import experimental.ir.internal.TempVariableTag -private import experimental.ir.implementation.internal.OperandTag -private import InstructionTag -private import TranslatedCondition -private import TranslatedDeclaration -private import TranslatedElement -private import TranslatedExpr -private import TranslatedFunction -private import TranslatedInitialization -private import common.TranslatedConditionBase -private import IRInternal -private import experimental.ir.internal.IRUtilities -private import desugar.Foreach -private import desugar.Lock - -TranslatedStmt getTranslatedStmt(Stmt stmt) { result.getAst() = stmt } - -abstract class TranslatedStmt extends TranslatedElement, TTranslatedStmt { - Stmt stmt; - - TranslatedStmt() { this = TTranslatedStmt(stmt) } - - final override string toString() { result = stmt.toString() } - - final override Language::AST getAst() { result = stmt } - - final override Callable getFunction() { result = stmt.getEnclosingCallable() } -} - -class TranslatedEmptyStmt extends TranslatedStmt { - TranslatedEmptyStmt() { - stmt instanceof EmptyStmt or - stmt instanceof LabelStmt or - stmt instanceof CaseStmt - } - - override TranslatedElement getChild(int id) { none() } - - override Instruction getFirstInstruction() { result = this.getInstruction(OnlyInstructionTag()) } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = OnlyInstructionTag() and - opcode instanceof Opcode::NoOp and - resultType = getVoidType() - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = OnlyInstructionTag() and - result = this.getParent().getChildSuccessor(this) and - kind instanceof GotoEdge - } - - override Instruction getChildSuccessor(TranslatedElement child) { none() } -} - -class TranslatedDeclStmt extends TranslatedStmt { - override LocalVariableDeclStmt stmt; - - override TranslatedElement getChild(int id) { result = this.getLocalDeclaration(id) } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } - - override Instruction getFirstInstruction() { - result = this.getLocalDeclaration(0).getFirstInstruction() - } - - private int getChildCount() { result = count(stmt.getAVariableDeclExpr()) } - - private TranslatedLocalDeclaration getLocalDeclaration(int index) { - result = getTranslatedLocalDeclaration(stmt.getVariableDeclExpr(index)) - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - override Instruction getChildSuccessor(TranslatedElement child) { - exists(int index | - child = this.getLocalDeclaration(index) and - if index = (this.getChildCount() - 1) - then result = this.getParent().getChildSuccessor(this) - else result = this.getLocalDeclaration(index + 1).getFirstInstruction() - ) - } -} - -class TranslatedExprStmt extends TranslatedStmt { - override ExprStmt stmt; - - TranslatedExpr getExpr() { result = getTranslatedExpr(stmt.getExpr()) } - - override TranslatedElement getChild(int id) { id = 0 and result = this.getExpr() } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } - - override Instruction getFirstInstruction() { result = this.getExpr().getFirstInstruction() } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getExpr() and - result = this.getParent().getChildSuccessor(this) - } -} - -/** - * Class that deals with an `ExprStmt` whose child is an `AssignExpr` whose - * lvalue is an accessor call. - * Since we desugar such an expression to function call, - * we ignore the assignment and make the only child of the translated statement - * the accessor call. - */ -class TranslatedExprStmtAccessorSet extends TranslatedExprStmt { - override ExprStmt stmt; - - TranslatedExprStmtAccessorSet() { - stmt.getExpr() instanceof AssignExpr and - stmt.getExpr().(AssignExpr).getLValue() instanceof AccessorCall - } - - override TranslatedExpr getExpr() { - result = getTranslatedExpr(stmt.getExpr().(AssignExpr).getLValue()) - } - - override TranslatedElement getChild(int id) { id = 0 and result = this.getExpr() } - - override Instruction getFirstInstruction() { result = this.getExpr().getFirstInstruction() } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getExpr() and - result = this.getParent().getChildSuccessor(this) - } -} - -abstract class TranslatedReturnStmt extends TranslatedStmt { - override ReturnStmt stmt; - - final TranslatedFunction getEnclosingFunction() { - result = getTranslatedFunction(stmt.getEnclosingCallable()) - } -} - -class TranslatedReturnValueStmt extends TranslatedReturnStmt, InitializationContext { - TranslatedReturnValueStmt() { exists(stmt.getExpr()) } - - override TranslatedElement getChild(int id) { id = 0 and result = this.getInitialization() } - - override Instruction getFirstInstruction() { - result = this.getInstruction(InitializerVariableAddressTag()) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = InitializerVariableAddressTag() and - opcode instanceof Opcode::VariableAddress and - resultType = getTypeForGLValue(this.getEnclosingFunction().getFunction().getReturnType()) - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = InitializerVariableAddressTag() and - result = this.getInitialization().getFirstInstruction() and - kind instanceof GotoEdge - } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getInitialization() and - result = this.getEnclosingFunction().getReturnSuccessorInstruction() - } - - override IRVariable getInstructionVariable(InstructionTag tag) { - tag = InitializerVariableAddressTag() and - result = this.getEnclosingFunction().getReturnVariable() - } - - override Instruction getTargetAddress() { - result = this.getInstruction(InitializerVariableAddressTag()) - } - - override Type getTargetType() { - result = this.getEnclosingFunction().getReturnVariable().getType() - } - - TranslatedInitialization getInitialization() { - result = getTranslatedInitialization(stmt.getExpr()) - } -} - -class TranslatedReturnVoidStmt extends TranslatedReturnStmt { - TranslatedReturnVoidStmt() { not exists(stmt.getExpr()) } - - override TranslatedElement getChild(int id) { none() } - - override Instruction getFirstInstruction() { result = this.getInstruction(OnlyInstructionTag()) } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = OnlyInstructionTag() and - opcode instanceof Opcode::NoOp and - resultType = getVoidType() - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = OnlyInstructionTag() and - result = this.getEnclosingFunction().getReturnSuccessorInstruction() and - kind instanceof GotoEdge - } - - override Instruction getChildSuccessor(TranslatedElement child) { none() } -} - -/** - * The IR translation of a C++ `try` statement. - */ -// TODO: Make sure that if the exception is uncaught or rethrown -// finally is still executed. -class TranslatedTryStmt extends TranslatedStmt { - override TryStmt stmt; - - override TranslatedElement getChild(int id) { - id = 0 and result = this.getBody() - or - id = 1 and result = this.getFinally() - or - result = this.getCatchClause(id - 2) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - override Instruction getFirstInstruction() { result = this.getBody().getFirstInstruction() } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getCatchClause(_) and result = this.getFinally().getFirstInstruction() - or - child = this.getBody() and result = this.getFinally().getFirstInstruction() - or - child = this.getFinally() and result = this.getParent().getChildSuccessor(this) - } - - final Instruction getNextHandler(TranslatedClause clause) { - exists(int index | - clause = this.getCatchClause(index) and - result = this.getCatchClause(index + 1).getFirstInstruction() - ) - or - // The last catch clause flows to the exception successor of the parent - // of the `try`, because the exception successor of the `try` itself is - // the first catch clause. - clause = this.getCatchClause(count(stmt.getACatchClause()) - 1) and - result = this.getParent().getExceptionSuccessorInstruction() - } - - final override Instruction getExceptionSuccessorInstruction() { - result = this.getCatchClause(0).getFirstInstruction() - } - - private TranslatedClause getCatchClause(int index) { - result = getTranslatedStmt(stmt.getCatchClause(index)) - } - - private TranslatedStmt getFinally() { result = getTranslatedStmt(stmt.getFinally()) } - - private TranslatedStmt getBody() { result = getTranslatedStmt(stmt.getBlock()) } -} - -class TranslatedBlock extends TranslatedStmt { - override BlockStmt stmt; - - override TranslatedElement getChild(int id) { result = this.getStmt(id) } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - this.isEmpty() and - opcode instanceof Opcode::NoOp and - tag = OnlyInstructionTag() and - resultType = getVoidType() - } - - override Instruction getFirstInstruction() { - if this.isEmpty() - then result = this.getInstruction(OnlyInstructionTag()) - else result = this.getStmt(0).getFirstInstruction() - } - - private predicate isEmpty() { stmt.isEmpty() } - - private TranslatedStmt getStmt(int index) { result = getTranslatedStmt(stmt.getStmt(index)) } - - private int getStmtCount() { result = count(stmt.getAStmt()) } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = OnlyInstructionTag() and - result = this.getParent().getChildSuccessor(this) and - kind instanceof GotoEdge - } - - override Instruction getChildSuccessor(TranslatedElement child) { - exists(int index | - child = this.getStmt(index) and - if index = (this.getStmtCount() - 1) - then result = this.getParent().getChildSuccessor(this) - else result = this.getStmt(index + 1).getFirstInstruction() - ) - } -} - -/** - * The IR translation of a C# `catch` clause. - */ -abstract class TranslatedClause extends TranslatedStmt { - override CatchClause stmt; - - override TranslatedElement getChild(int id) { id = 1 and result = this.getBlock() } - - override Instruction getFirstInstruction() { result = this.getInstruction(CatchTag()) } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getBlock() and result = this.getParent().getChildSuccessor(this) - } - - override Instruction getExceptionSuccessorInstruction() { - // A throw from within a `catch` block flows to the handler for the parent of - // the `try`. - result = this.getParent().getParent().getExceptionSuccessorInstruction() - } - - TranslatedStmt getBlock() { result = getTranslatedStmt(stmt.getBlock()) } -} - -/** - * The IR translation of a C# `catch` block that catches an exception with a - * specific type (e.g. `catch (Exception ex) { ... }`). - */ -class TranslatedCatchByTypeClause extends TranslatedClause { - TranslatedCatchByTypeClause() { stmt instanceof SpecificCatchClause } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = CatchTag() and - opcode instanceof Opcode::CatchByType and - resultType = getVoidType() - } - - override TranslatedElement getChild(int id) { - id = 0 and result = this.getParameter() - or - result = super.getChild(id) - } - - override Instruction getChildSuccessor(TranslatedElement child) { - result = super.getChildSuccessor(child) - or - child = this.getParameter() and result = this.getBlock().getFirstInstruction() - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = CatchTag() and - ( - kind instanceof GotoEdge and - result = this.getParameter().getFirstInstruction() - or - kind instanceof ExceptionEdge and - result = this.getParent().(TranslatedTryStmt).getNextHandler(this) - ) - } - - override CSharpType getInstructionExceptionType(InstructionTag tag) { - tag = CatchTag() and - result = getTypeForPRValue(stmt.(SpecificCatchClause).getVariable().getType()) - } - - private TranslatedLocalDeclaration getParameter() { - result = getTranslatedLocalDeclaration(stmt.(SpecificCatchClause).getVariableDeclExpr()) - } -} - -/** - * The IR translation of catch block with no parameters. - */ -class TranslatedGeneralCatchClause extends TranslatedClause { - TranslatedGeneralCatchClause() { stmt instanceof GeneralCatchClause } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = CatchTag() and - opcode instanceof Opcode::CatchAny and - resultType = getVoidType() - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = CatchTag() and - kind instanceof GotoEdge and - result = this.getBlock().getFirstInstruction() - } -} - -/** - * The IR translation of a throw statement that throws an exception, - * as opposed to just rethrowing one. - */ -class TranslatedThrowExceptionStmt extends TranslatedStmt, InitializationContext { - override ThrowStmt stmt; - - TranslatedThrowExceptionStmt() { - // Must throw an exception - exists(stmt.getExpr()) - } - - override TranslatedElement getChild(int id) { id = 0 and result = this.getInitialization() } - - override Instruction getFirstInstruction() { - result = this.getInstruction(InitializerVariableAddressTag()) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = ThrowTag() and - opcode instanceof Opcode::ThrowValue and - resultType = getVoidType() - or - tag = InitializerVariableAddressTag() and - opcode instanceof Opcode::VariableAddress and - resultType = getTypeForGLValue(this.getExceptionType()) - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = ThrowTag() and - kind instanceof ExceptionEdge and - result = this.getParent().getExceptionSuccessorInstruction() - or - tag = InitializerVariableAddressTag() and - result = this.getInitialization().getFirstInstruction() and - kind instanceof GotoEdge - } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getInitialization() and - result = this.getInstruction(ThrowTag()) - } - - override IRVariable getInstructionVariable(InstructionTag tag) { - tag = InitializerVariableAddressTag() and - result = getIRTempVariable(stmt, ThrowTempVar()) - } - - final override predicate hasTempVariable(TempVariableTag tag, CSharpType type) { - tag = ThrowTempVar() and - type = getTypeForPRValue(this.getExceptionType()) - } - - final override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - tag = ThrowTag() and - operandTag instanceof AddressOperandTag and - result = this.getInstruction(InitializerVariableAddressTag()) - } - - final override CSharpType getInstructionOperandType(InstructionTag tag, TypedOperandTag operandTag) { - tag = ThrowTag() and - operandTag instanceof LoadOperandTag and - result = getTypeForPRValue(this.getExceptionType()) - } - - override Instruction getTargetAddress() { - result = this.getInstruction(InitializerVariableAddressTag()) - } - - override Type getTargetType() { result = this.getExceptionType() } - - TranslatedInitialization getInitialization() { - result = getTranslatedInitialization(stmt.getExpr()) - } - - private Type getExceptionType() { result = stmt.getExpr().getType() } -} - -/** - * The IR translation of a simple throw statement, ie. one that just - * rethrows an exception. - */ -class TranslatedEmptyThrowStmt extends TranslatedStmt { - override ThrowStmt stmt; - - TranslatedEmptyThrowStmt() { not exists(stmt.getExpr()) } - - override TranslatedElement getChild(int id) { none() } - - override Instruction getFirstInstruction() { result = this.getInstruction(ThrowTag()) } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = ThrowTag() and - opcode instanceof Opcode::ReThrow and - resultType = getVoidType() - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = ThrowTag() and - kind instanceof ExceptionEdge and - result = this.getParent().getExceptionSuccessorInstruction() - } - - override Instruction getChildSuccessor(TranslatedElement child) { none() } -} - -class TranslatedIfStmt extends TranslatedStmt, ConditionContext { - override IfStmt stmt; - - override Instruction getFirstInstruction() { result = this.getCondition().getFirstInstruction() } - - override TranslatedElement getChild(int id) { - id = 0 and result = this.getCondition() - or - id = 1 and result = this.getThen() - or - id = 2 and result = this.getElse() - } - - private TranslatedCondition getCondition() { - result = getTranslatedCondition(stmt.getCondition()) - } - - private TranslatedStmt getThen() { result = getTranslatedStmt(stmt.getThen()) } - - private TranslatedStmt getElse() { result = getTranslatedStmt(stmt.getElse()) } - - private predicate hasElse() { exists(stmt.getElse()) } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - override Instruction getChildTrueSuccessor(ConditionBase child) { - child = this.getCondition() and - result = this.getThen().getFirstInstruction() - } - - override Instruction getChildFalseSuccessor(ConditionBase child) { - child = this.getCondition() and - if this.hasElse() - then result = this.getElse().getFirstInstruction() - else result = this.getParent().getChildSuccessor(this) - } - - override Instruction getChildSuccessor(TranslatedElement child) { - (child = this.getThen() or child = this.getElse()) and - result = this.getParent().getChildSuccessor(this) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } -} - -abstract class TranslatedLoop extends TranslatedStmt, ConditionContext { - override LoopStmt stmt; - - final TranslatedCondition getCondition() { result = getTranslatedCondition(stmt.getCondition()) } - - final TranslatedStmt getBody() { result = getTranslatedStmt(stmt.getBody()) } - - final Instruction getFirstConditionInstruction() { - if this.hasCondition() - then result = this.getCondition().getFirstInstruction() - else result = this.getBody().getFirstInstruction() - } - - final predicate hasCondition() { exists(stmt.getCondition()) } - - override TranslatedElement getChild(int id) { - id = 0 and result = this.getCondition() - or - id = 1 and result = this.getBody() - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } - - final override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - final override Instruction getChildTrueSuccessor(ConditionBase child) { - child = this.getCondition() and result = this.getBody().getFirstInstruction() - } - - final override Instruction getChildFalseSuccessor(ConditionBase child) { - child = this.getCondition() and result = this.getParent().getChildSuccessor(this) - } -} - -class TranslatedWhileStmt extends TranslatedLoop { - TranslatedWhileStmt() { stmt instanceof WhileStmt } - - override Instruction getFirstInstruction() { result = this.getFirstConditionInstruction() } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getBody() and result = this.getFirstConditionInstruction() - } -} - -class TranslatedDoStmt extends TranslatedLoop { - TranslatedDoStmt() { stmt instanceof DoStmt } - - override Instruction getFirstInstruction() { result = this.getBody().getFirstInstruction() } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getBody() and result = this.getFirstConditionInstruction() - } -} - -class TranslatedForStmt extends TranslatedLoop { - override ForStmt stmt; - - override TranslatedElement getChild(int id) { - this.initializerIndex(id) and result = this.getDeclAndInit(id) - or - result = this.getUpdate(this.updateIndex(id)) - or - id = this.initializersNo() + this.updatesNo() and result = this.getCondition() - or - id = this.initializersNo() + this.updatesNo() + 1 and result = this.getBody() - } - - private TranslatedElement getDeclAndInit(int index) { - if stmt.getInitializer(index) instanceof LocalVariableDeclExpr - then result = getTranslatedLocalDeclaration(stmt.getInitializer(index)) - else result = getTranslatedExpr(stmt.getInitializer(index)) - } - - private predicate hasInitialization() { exists(stmt.getAnInitializer()) } - - TranslatedExpr getUpdate(int index) { result = getTranslatedExpr(stmt.getUpdate(index)) } - - private predicate hasUpdate() { exists(stmt.getAnUpdate()) } - - private int initializersNo() { result = count(stmt.getAnInitializer()) } - - private int updatesNo() { result = count(stmt.getAnUpdate()) } - - private predicate initializerIndex(int index) { index in [0 .. this.initializersNo() - 1] } - - private int updateIndex(int index) { - result in [0 .. this.updatesNo() - 1] and - index = this.initializersNo() + result - } - - override Instruction getFirstInstruction() { - if this.hasInitialization() - then result = this.getDeclAndInit(0).getFirstInstruction() - else result = this.getFirstConditionInstruction() - } - - override Instruction getChildSuccessor(TranslatedElement child) { - exists(int index | - child = this.getDeclAndInit(index) and - index < this.initializersNo() - 1 and - result = this.getDeclAndInit(index + 1).getFirstInstruction() - ) - or - child = this.getDeclAndInit(this.initializersNo() - 1) and - result = this.getFirstConditionInstruction() - or - ( - child = this.getBody() and - if this.hasUpdate() - then result = this.getUpdate(0).getFirstInstruction() - else result = this.getFirstConditionInstruction() - ) - or - exists(int index | - child = this.getUpdate(index) and - result = this.getUpdate(index + 1).getFirstInstruction() - ) - or - child = this.getUpdate(this.updatesNo() - 1) and - result = this.getFirstConditionInstruction() - } -} - -/** - * Base class for the translation of `BreakStmt`s and `GotoStmt`s. - */ -abstract class TranslatedSpecificJump extends TranslatedStmt { - override Instruction getFirstInstruction() { result = this.getInstruction(OnlyInstructionTag()) } - - override TranslatedElement getChild(int id) { none() } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = OnlyInstructionTag() and - opcode instanceof Opcode::NoOp and - resultType = getVoidType() - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = OnlyInstructionTag() and - kind instanceof GotoEdge and - result = this.getTargetInstruction() - } - - override Instruction getChildSuccessor(TranslatedElement child) { none() } - - /** - * Gets the instruction that is the target of the jump. - */ - abstract Instruction getTargetInstruction(); -} - -class TranslatedBreakStmt extends TranslatedSpecificJump { - override BreakStmt stmt; - - override Instruction getTargetInstruction() { result = getEnclosingLoopOrSwitchNextInstr(stmt) } -} - -private Instruction getEnclosingLoopOrSwitchNextInstr(Stmt crtStmt) { - if crtStmt instanceof LoopStmt or crtStmt instanceof SwitchStmt - then result = getTranslatedStmt(crtStmt).getParent().getChildSuccessor(getTranslatedStmt(crtStmt)) - else result = getEnclosingLoopOrSwitchNextInstr(crtStmt.getParent()) -} - -class TranslatedContinueStmt extends TranslatedSpecificJump { - override ContinueStmt stmt; - - override Instruction getTargetInstruction() { result = getEnclosingLoopTargetInstruction(stmt) } -} - -private Instruction getEnclosingLoopTargetInstruction(Stmt crtStmt) { - if crtStmt instanceof ForStmt - then result = getNextForInstruction(crtStmt) - else - if crtStmt instanceof LoopStmt - then result = getTranslatedStmt(crtStmt).getFirstInstruction() - else result = getEnclosingLoopTargetInstruction(crtStmt.getParent()) -} - -private Instruction getNextForInstruction(ForStmt for) { - if exists(for.getUpdate(0)) - then result = getTranslatedStmt(for).(TranslatedForStmt).getUpdate(0).getFirstInstruction() - else - if exists(for.getCondition()) - then result = getTranslatedStmt(for).(TranslatedForStmt).getCondition().getFirstInstruction() - else result = getTranslatedStmt(for).(TranslatedForStmt).getBody().getFirstInstruction() -} - -class TranslatedGotoLabelStmt extends TranslatedSpecificJump { - override GotoLabelStmt stmt; - - override Instruction getTargetInstruction() { - result = getTranslatedStmt(stmt.getTarget()).getFirstInstruction() - } -} - -class TranslatedGotoCaseStmt extends TranslatedSpecificJump { - override GotoCaseStmt stmt; - - override Instruction getTargetInstruction() { - result = getCase(stmt, stmt.getExpr()).getFirstInstruction() - } -} - -private TranslatedStmt getCase(Stmt crtStmt, Expr expr) { - if crtStmt instanceof SwitchStmt - then - exists(CaseStmt caseStmt | - caseStmt = crtStmt.(SwitchStmt).getACase() and - // We check for the constant value of the expression - // since we can't check for equality between `PatternExpr` and `Expr` - caseStmt.getPattern().getValue() = expr.getValue() and - result = getTranslatedStmt(caseStmt) - ) - else result = getCase(crtStmt.getParent(), expr) -} - -class TranslatedGotoDefaultStmt extends TranslatedSpecificJump { - override GotoDefaultStmt stmt; - - override Instruction getTargetInstruction() { - result = getDefaultCase(stmt).getFirstInstruction() - } -} - -private TranslatedStmt getDefaultCase(Stmt crtStmt) { - if crtStmt instanceof SwitchStmt - then - exists(CaseStmt caseStmt | - caseStmt = crtStmt.(SwitchStmt).getDefaultCase() and - result = getTranslatedStmt(caseStmt) - ) - else result = getDefaultCase(crtStmt.getParent()) -} - -class TranslatedSwitchStmt extends TranslatedStmt { - override SwitchStmt stmt; - - private TranslatedExpr getSwitchExpr() { result = getTranslatedExpr(stmt.getExpr()) } - - override Instruction getFirstInstruction() { result = this.getSwitchExpr().getFirstInstruction() } - - override TranslatedElement getChild(int id) { - if id = -1 - then - // The switch expression. - result = getTranslatedExpr(stmt.getChild(0)) - else - if id = 0 - then - // The first case's body. - result = getTranslatedStmt(stmt.getChild(0)) - else - // The subsequent case's bodies. - result = getTranslatedStmt(stmt.getChild(id)) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = SwitchBranchTag() and - opcode instanceof Opcode::Switch and - resultType = getVoidType() - } - - override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - tag = SwitchBranchTag() and - operandTag instanceof ConditionOperandTag and - result = this.getSwitchExpr().getResult() - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = SwitchBranchTag() and - exists(CaseStmt caseStmt | - caseStmt = stmt.getACase() and - kind = this.getCaseEdge(caseStmt) and - result = getTranslatedStmt(caseStmt).getFirstInstruction() - ) - or - not exists(stmt.getDefaultCase()) and - tag = SwitchBranchTag() and - kind instanceof DefaultEdge and - result = this.getParent().getChildSuccessor(this) - } - - private EdgeKind getCaseEdge(CaseStmt caseStmt) { - if caseStmt instanceof DefaultCase - then result instanceof DefaultEdge - else - exists(CaseEdge edge | - result = edge and - hasCaseEdge(caseStmt, edge.getMinValue(), edge.getMinValue()) - ) - } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getSwitchExpr() and result = this.getInstruction(SwitchBranchTag()) - or - exists(int index, int numStmts | - numStmts = count(stmt.getAChild()) and - child = getTranslatedStmt(stmt.getChild(index)) and - if index = (numStmts - 1) - then result = this.getParent().getChildSuccessor(this) - else result = getTranslatedStmt(stmt.getChild(index + 1)).getFirstInstruction() - ) - } -} - -class TranslatedEnumeratorForeach extends TranslatedLoop { - override ForeachStmt stmt; - - override TranslatedElement getChild(int id) { - id = 0 and result = this.getTempEnumDecl() - or - id = 1 and result = this.getTry() - } - - override Instruction getFirstInstruction() { - result = this.getTempEnumDecl().getFirstInstruction() - } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getTempEnumDecl() and - result = this.getTry().getFirstInstruction() - or - child = this.getTry() and - result = this.getParent().getChildSuccessor(this) - } - - private TranslatedElement getTry() { result = ForeachElements::getTry(stmt) } - - private TranslatedElement getTempEnumDecl() { result = ForeachElements::getEnumDecl(stmt) } -} - -class TranslatedUnsafeStmt extends TranslatedStmt { - override UnsafeStmt stmt; - - override TranslatedElement getChild(int id) { id = 0 and result = this.getBlock() } - - override Instruction getFirstInstruction() { result = this.getBlock().getFirstInstruction() } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getBlock() and - result = this.getParent().getChildSuccessor(this) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - private TranslatedStmt getBlock() { result = getTranslatedStmt(stmt.getBlock()) } -} - -// TODO: does not reflect the fixed part, just treats the stmt -// as some declarations followed by the body -class TranslatedFixedStmt extends TranslatedStmt { - override FixedStmt stmt; - - override TranslatedElement getChild(int id) { - result = this.getDecl(id) - or - id = this.noDecls() and result = this.getBody() - } - - override Instruction getFirstInstruction() { result = this.getDecl(0).getFirstInstruction() } - - override Instruction getChildSuccessor(TranslatedElement child) { - exists(int id | - child = this.getDecl(id) and - id < this.noDecls() - 1 and - result = this.getDecl(id + 1).getFirstInstruction() - ) - or - child = this.getDecl(this.noDecls() - 1) and result = this.getBody().getFirstInstruction() - or - child = this.getBody() and result = this.getParent().getChildSuccessor(this) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - private TranslatedLocalDeclaration getDecl(int id) { - result = getTranslatedLocalDeclaration(stmt.getVariableDeclExpr(id)) - } - - private int noDecls() { result = count(stmt.getAVariableDeclExpr()) } - - private TranslatedStmt getBody() { result = getTranslatedStmt(stmt.getBody()) } -} - -class TranslatedLockStmt extends TranslatedStmt { - override LockStmt stmt; - - override TranslatedElement getChild(int id) { - id = 0 and result = this.getLockedVarDecl() - or - id = 1 and result = this.getLockWasTakenDecl() - or - id = 2 and result = this.getTry() - } - - override Instruction getFirstInstruction() { - result = this.getLockedVarDecl().getFirstInstruction() - } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getLockedVarDecl() and - result = this.getLockWasTakenDecl().getFirstInstruction() - or - child = this.getLockWasTakenDecl() and - result = this.getTry().getFirstInstruction() - or - child = this.getTry() and - result = this.getParent().getChildSuccessor(this) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - private TranslatedElement getTry() { result = LockElements::getTry(stmt) } - - private TranslatedElement getLockedVarDecl() { result = LockElements::getLockedVarDecl(stmt) } - - private TranslatedElement getLockWasTakenDecl() { - result = LockElements::getLockWasTakenDecl(stmt) - } -} - -// TODO: Should be modeled using the desugaring framework for a -// more exact translation. -class TranslatedCheckedUncheckedStmt extends TranslatedStmt { - TranslatedCheckedUncheckedStmt() { - stmt instanceof CheckedStmt or - stmt instanceof UncheckedStmt - } - - override TranslatedElement getChild(int id) { id = 0 and result = this.getBody() } - - override Instruction getFirstInstruction() { result = this.getBody().getFirstInstruction() } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getBody() and - result = this.getParent().getChildSuccessor(this) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - private TranslatedElement getBody() { - result = getTranslatedStmt(stmt.(CheckedStmt).getBlock()) or - result = getTranslatedStmt(stmt.(UncheckedStmt).getBlock()) - } -} - -// TODO: Should be modeled using the desugaring framework for a -// more exact translation. -class TranslatedUsingBlockStmt extends TranslatedStmt { - override UsingBlockStmt stmt; - - override TranslatedElement getChild(int id) { - result = this.getDecl(id) - or - id = this.getNumberOfDecls() and result = this.getBody() - } - - override Instruction getFirstInstruction() { - if this.getNumberOfDecls() > 0 - then result = this.getDecl(0).getFirstInstruction() - else result = this.getBody().getFirstInstruction() - } - - override Instruction getChildSuccessor(TranslatedElement child) { - exists(int id | - child = this.getDecl(id) and - result = this.getDecl(id + 1).getFirstInstruction() - ) - or - child = this.getDecl(this.getNumberOfDecls() - 1) and - result = this.getBody().getFirstInstruction() - or - child = this.getBody() and result = this.getParent().getChildSuccessor(this) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - private TranslatedLocalDeclaration getDecl(int id) { - result = getTranslatedLocalDeclaration(stmt.getVariableDeclExpr(id)) - } - - private int getNumberOfDecls() { result = count(stmt.getAVariableDeclExpr()) } - - private TranslatedStmt getBody() { result = getTranslatedStmt(stmt.getBody()) } -} - -// TODO: Should be modeled using the desugaring framework for a -// more exact translation. -class TranslatedUsingDeclStmt extends TranslatedStmt { - override UsingDeclStmt stmt; - - override TranslatedElement getChild(int id) { result = this.getDecl(id) } - - override Instruction getFirstInstruction() { result = this.getDecl(0).getFirstInstruction() } - - override Instruction getChildSuccessor(TranslatedElement child) { - exists(int id | - child = this.getDecl(id) and - id < this.noDecls() - 1 and - result = this.getDecl(id + 1).getFirstInstruction() - ) - or - child = this.getDecl(this.noDecls() - 1) and result = this.getParent().getChildSuccessor(this) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - private TranslatedLocalDeclaration getDecl(int id) { - result = getTranslatedLocalDeclaration(stmt.getVariableDeclExpr(id)) - } - - private int noDecls() { result = count(stmt.getAVariableDeclExpr()) } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/common/TranslatedCallBase.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/common/TranslatedCallBase.qll deleted file mode 100644 index 6243663f1cc..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/common/TranslatedCallBase.qll +++ /dev/null @@ -1,174 +0,0 @@ -/** - * Contains an abstract class that serves as a Base for classes that deal with the translation of calls - * (both AST generated and compiler generated). - */ - -import csharp -private import experimental.ir.implementation.Opcode -private import experimental.ir.implementation.internal.OperandTag -private import experimental.ir.implementation.raw.internal.InstructionTag -private import experimental.ir.implementation.raw.internal.TranslatedElement -private import experimental.ir.implementation.raw.internal.TranslatedExpr -private import experimental.ir.internal.CSharpType -private import experimental.ir.internal.IRCSharpLanguage as Language -private import TranslatedExprBase - -abstract class TranslatedCallBase extends TranslatedElement { - final override TranslatedElement getChild(int id) { - // We choose the child's id in the order of evaluation. - // Note: some calls do need qualifiers, though instructions for them have already - // been generated; eg. a constructor does not need to generate a qualifier, - // though the `this` argument exists and is the result of the instruction - // that allocated the new object. For those calls, `getQualifier()` should - // be void. - id = -1 and result = this.getQualifier() - or - result = this.getArgument(id) - } - - final override Instruction getFirstInstruction() { - if exists(this.getQualifier()) - then result = this.getQualifier().getFirstInstruction() - else result = this.getInstruction(CallTargetTag()) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = CallTag() and - opcode instanceof Opcode::Call and - resultType = getTypeForPRValue(this.getCallResultType()) - or - this.hasSideEffect() and - tag = CallSideEffectTag() and - ( - if this.hasWriteSideEffect() - then ( - opcode instanceof Opcode::CallSideEffect and - resultType = getUnknownType() - ) else ( - opcode instanceof Opcode::CallReadSideEffect and - resultType = getUnknownType() - ) - ) - or - tag = CallTargetTag() and - opcode instanceof Opcode::FunctionAddress and - // Since the DB does not have a function type, - // we just use the UnknownType - resultType = getFunctionAddressType() - } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getQualifier() and - result = this.getInstruction(CallTargetTag()) - or - exists(int argIndex | - child = this.getArgument(argIndex) and - if exists(this.getArgument(argIndex + 1)) - then result = this.getArgument(argIndex + 1).getFirstInstruction() - else result = this.getInstruction(CallTag()) - ) - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - kind instanceof GotoEdge and - ( - ( - tag = CallTag() and - if this.hasSideEffect() - then result = this.getInstruction(CallSideEffectTag()) - else result = this.getParent().getChildSuccessor(this) - ) - or - this.hasSideEffect() and - tag = CallSideEffectTag() and - result = this.getParent().getChildSuccessor(this) - or - tag = CallTargetTag() and - kind instanceof GotoEdge and - result = this.getFirstArgumentOrCallInstruction() - ) - } - - override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - tag = CallTag() and - ( - operandTag instanceof CallTargetOperandTag and - result = this.getInstruction(CallTargetTag()) - or - operandTag instanceof ThisArgumentOperandTag and - result = this.getQualifierResult() - or - exists(PositionalArgumentOperandTag argTag | - argTag = operandTag and - result = this.getArgument(argTag.getArgIndex()).getResult() - ) - ) - } - - final override CSharpType getInstructionOperandType(InstructionTag tag, TypedOperandTag operandTag) { - tag = CallSideEffectTag() and - this.hasSideEffect() and - operandTag instanceof SideEffectOperandTag and - result = getUnknownType() - } - - Instruction getResult() { result = this.getInstruction(CallTag()) } - - /** - * Gets the result type of the call. - */ - abstract Type getCallResultType(); - - /** - * Holds if the call has a `this` argument. - */ - predicate hasQualifier() { exists(this.getQualifier()) } - - /** - * Gets the expr for the qualifier of the call. - */ - abstract TranslatedExprBase getQualifier(); - - /** - * Gets the instruction whose result value is the `this` argument of the call. - * In general, this is just the result of `getQualifier()`, but it can be - * overridden by a subclass for cases where there is a `this` argument that is - * not computed from a child expression (e.g. a constructor call). - */ - abstract Instruction getQualifierResult(); - - /** - * Gets the argument with the specified `index`. Does not include the `this` - * argument. We use `TranslatedExprBase` so that we can give both `TranslatedExpr` args, - * in the case of AST generated arguments, or `TranslatedCompilerElement` args in the case of - * compiler generated arguments. - */ - abstract TranslatedExprBase getArgument(int index); - - /** - * If there are any arguments, gets the first instruction of the first - * argument. Otherwise, returns the call instruction. - */ - final Instruction getFirstArgumentOrCallInstruction() { - if this.hasArguments() - then result = this.getArgument(0).getFirstInstruction() - else result = this.getInstruction(CallTag()) - } - - /** - * Holds if the call has any arguments, not counting the `this` argument. - */ - final predicate hasArguments() { exists(this.getArgument(0)) } - - predicate hasReadSideEffect() { any() } - - predicate hasWriteSideEffect() { any() } - - private predicate hasSideEffect() { this.hasReadSideEffect() or this.hasWriteSideEffect() } - - override Instruction getPrimaryInstructionForSideEffect(InstructionTag tag) { - this.hasSideEffect() and - tag = CallSideEffectTag() and - result = this.getResult() - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/common/TranslatedConditionBase.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/common/TranslatedConditionBase.qll deleted file mode 100644 index ec12b31f986..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/common/TranslatedConditionBase.qll +++ /dev/null @@ -1,79 +0,0 @@ -/** - * Contains several abstract classes that serve as Bases. - */ - -import csharp -private import experimental.ir.implementation.Opcode -private import experimental.ir.implementation.internal.OperandTag -private import experimental.ir.implementation.raw.internal.InstructionTag -private import experimental.ir.implementation.raw.internal.TranslatedElement -private import experimental.ir.implementation.raw.internal.TranslatedExpr -private import experimental.ir.implementation.raw.internal.TranslatedCondition -private import experimental.ir.internal.CSharpType -private import experimental.ir.internal.IRCSharpLanguage as Language - -/** - * Represents the context of the condition, ie. provides - * information about the instruction that follows a conditional branch. - */ -abstract class ConditionContext extends TranslatedElement { - abstract Instruction getChildTrueSuccessor(ConditionBase child); - - abstract Instruction getChildFalseSuccessor(ConditionBase child); -} - -/** - * Abstract class that serves as a Base for the classes that deal with both the AST generated conditions - * and the compiler generated ones (captures the common patterns). - */ -abstract class ConditionBase extends TranslatedElement { - final ConditionContext getConditionContext() { result = this.getParent() } -} - -/** - * Abstract class that serves as a Base for the classes that deal with both the AST generated _value_ conditions - * and the compiler generated ones (captures the common patterns). - */ -abstract class ValueConditionBase extends ConditionBase { - override TranslatedElement getChild(int id) { id = 0 and result = this.getValueExpr() } - - override Instruction getFirstInstruction() { result = this.getValueExpr().getFirstInstruction() } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = ValueConditionConditionalBranchTag() and - opcode instanceof Opcode::ConditionalBranch and - resultType = getVoidType() - } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getValueExpr() and - result = this.getInstruction(ValueConditionConditionalBranchTag()) - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = ValueConditionConditionalBranchTag() and - ( - kind instanceof TrueEdge and - result = this.getConditionContext().getChildTrueSuccessor(this) - or - kind instanceof FalseEdge and - result = this.getConditionContext().getChildFalseSuccessor(this) - ) - } - - override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - tag = ValueConditionConditionalBranchTag() and - operandTag instanceof ConditionOperandTag and - result = this.valueExprResult() - } - - /** - * Gets the instruction that represents the result of the value expression. - */ - abstract Instruction valueExprResult(); - - /** - * Gets the `TranslatedElements that represents the value expression. - */ - abstract TranslatedElement getValueExpr(); -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/common/TranslatedDeclarationBase.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/common/TranslatedDeclarationBase.qll deleted file mode 100644 index a4e6501d0e4..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/common/TranslatedDeclarationBase.qll +++ /dev/null @@ -1,93 +0,0 @@ -/** - * Contains an abstract class that serves as a Base for the classes that deal with both the AST - * generated declarations and the compiler generated ones (captures the common patterns). - */ - -import csharp -private import experimental.ir.implementation.Opcode -private import experimental.ir.internal.IRUtilities -private import experimental.ir.implementation.internal.OperandTag -private import experimental.ir.implementation.raw.internal.InstructionTag -private import experimental.ir.implementation.raw.internal.TranslatedElement -private import experimental.ir.implementation.raw.internal.TranslatedExpr -private import experimental.ir.implementation.raw.internal.TranslatedInitialization -private import experimental.ir.internal.CSharpType -private import experimental.ir.internal.IRCSharpLanguage as Language - -abstract class LocalVariableDeclarationBase extends TranslatedElement { - override TranslatedElement getChild(int id) { id = 0 and result = this.getInitialization() } - - override Instruction getFirstInstruction() { result = this.getVarAddress() } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = InitializerVariableAddressTag() and - opcode instanceof Opcode::VariableAddress and - resultType = getTypeForGLValue(this.getVarType()) - or - this.hasUninitializedInstruction() and - tag = InitializerStoreTag() and - opcode instanceof Opcode::Uninitialized and - resultType = getTypeForPRValue(this.getVarType()) - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - ( - tag = InitializerVariableAddressTag() and - kind instanceof GotoEdge and - if this.hasUninitializedInstruction() - then result = this.getInstruction(InitializerStoreTag()) - else result = this.getInitialization().getFirstInstruction() - ) - or - this.hasUninitializedInstruction() and - kind instanceof GotoEdge and - tag = InitializerStoreTag() and - ( - result = this.getInitialization().getFirstInstruction() - or - not exists(this.getInitialization()) and result = this.getParent().getChildSuccessor(this) - ) - } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getInitialization() and result = this.getParent().getChildSuccessor(this) - } - - override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - this.hasUninitializedInstruction() and - tag = InitializerStoreTag() and - operandTag instanceof AddressOperandTag and - result = this.getVarAddress() - } - - /** - * Holds if the declaration should have an `Uninitialized` instruction. - * Compiler generated elements should override this predicate and - * make it empty, since we always initialize the vars declared during the - * desugaring process. - */ - predicate hasUninitializedInstruction() { - not exists(this.getInitialization()) or - this.getInitialization() instanceof TranslatedListInitialization - } - - Instruction getVarAddress() { result = this.getInstruction(InitializerVariableAddressTag()) } - - /** - * Gets the declared variable. For compiler generated elements, this - * should be empty (since we treat temp vars differently). - */ - abstract LocalVariable getDeclVar(); - - /** - * Gets the type of the declared variable. - */ - abstract Type getVarType(); - - /** - * Gets the initialization, if there is one. - * For compiler generated elements we don't treat the initialization - * as a different step, but do it during the declaration. - */ - abstract TranslatedElement getInitialization(); -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/common/TranslatedExprBase.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/common/TranslatedExprBase.qll deleted file mode 100644 index ec6a8c0ab00..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/common/TranslatedExprBase.qll +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Contains an abstract class that serves as a Base for classes that deal with the translation of exprs - * (both AST generated and compiler generated). - */ - -private import experimental.ir.implementation.raw.internal.TranslatedElement -private import experimental.ir.internal.IRCSharpLanguage as Language - -abstract class TranslatedExprBase extends TranslatedElement { - /** - * Gets the instruction that produces the result of the expression. - */ - abstract Instruction getResult(); -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Common.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Common.qll deleted file mode 100644 index d9c7910be4c..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Common.qll +++ /dev/null @@ -1,235 +0,0 @@ -/** - * Exposes several patterns for the compiler generated code, so as to improve code sharing between files that - * deal with the desugaring process. - * For example, we expose the `try ... finally` pattern, which is shared by the desugaring of both the - * `ForeachStmt`, `UsingStmt` and `LockStmt`. - */ - -import csharp -private import experimental.ir.implementation.Opcode -private import experimental.ir.implementation.internal.OperandTag -private import experimental.ir.internal.CSharpType -private import experimental.ir.internal.TempVariableTag -private import experimental.ir.implementation.raw.internal.TranslatedElement -private import experimental.ir.implementation.raw.internal.TranslatedFunction -private import experimental.ir.implementation.raw.internal.InstructionTag -private import internal.TranslatedCompilerGeneratedStmt -private import internal.TranslatedCompilerGeneratedExpr -private import internal.TranslatedCompilerGeneratedCondition -private import internal.TranslatedCompilerGeneratedCall -private import internal.TranslatedCompilerGeneratedElement -private import internal.TranslatedCompilerGeneratedDeclaration -private import experimental.ir.implementation.raw.internal.common.TranslatedConditionBase -private import experimental.ir.implementation.raw.internal.common.TranslatedExprBase -private import experimental.ir.internal.IRCSharpLanguage as Language - -/** - * The general form of a compiler generated try stmt. - * The concrete implementation needs to specify the body of the try and the - * finally block. - */ -abstract class TranslatedCompilerGeneratedTry extends TranslatedCompilerGeneratedStmt { - override Stmt generatedBy; - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - override TranslatedElement getChild(int id) { - id = 0 and result = this.getBody() - or - id = 1 and result = this.getFinally() - } - - override Instruction getFirstInstruction() { result = this.getBody().getFirstInstruction() } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getBody() and result = this.getFinally().getFirstInstruction() - or - child = this.getFinally() and result = this.getParent().getChildSuccessor(this) - } - - override Instruction getExceptionSuccessorInstruction() { - result = this.getParent().getExceptionSuccessorInstruction() - } - - /** - * Gets the finally block. - */ - abstract TranslatedElement getFinally(); - - /** - * Gets the body of the try stmt. - */ - abstract TranslatedElement getBody(); -} - -/** - * The general form of a compiler generated constant expression. - * The concrete implementation needs to specify the immediate operand that represents the constant. - */ -abstract class TranslatedCompilerGeneratedConstant extends TranslatedCompilerGeneratedExpr { - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - opcode instanceof Opcode::Constant and - tag = OnlyInstructionTag() and - resultType = getTypeForPRValue(this.getResultType()) - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - tag = OnlyInstructionTag() and - kind instanceof GotoEdge and - result = this.getParent().getChildSuccessor(this) - } - - override Instruction getFirstInstruction() { result = this.getInstruction(OnlyInstructionTag()) } - - override TranslatedElement getChild(int id) { none() } - - override Instruction getChildSuccessor(TranslatedElement child) { none() } -} - -/** - * The general form of a compiler generated block stmt. - * The concrete implementation needs to specify the statements that - * compose the block. - */ -abstract class TranslatedCompilerGeneratedBlock extends TranslatedCompilerGeneratedStmt { - override TranslatedElement getChild(int id) { result = this.getStmt(id) } - - override Instruction getFirstInstruction() { result = this.getStmt(0).getFirstInstruction() } - - abstract TranslatedElement getStmt(int index); - - private int getStmtCount() { result = count(this.getStmt(_)) } - - override Instruction getChildSuccessor(TranslatedElement child) { - exists(int index | - child = this.getStmt(index) and - if index = (this.getStmtCount() - 1) - then result = this.getParent().getChildSuccessor(this) - else result = this.getStmt(index + 1).getFirstInstruction() - ) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } -} - -/** - * The general form of a compiler generated if stmt. - * The concrete implementation needs to specify the condition, - * the body of the `then` and the body of the `else`. - */ -abstract class TranslatedCompilerGeneratedIfStmt extends TranslatedCompilerGeneratedStmt, - ConditionContext -{ - override Instruction getFirstInstruction() { result = this.getCondition().getFirstInstruction() } - - override TranslatedElement getChild(int id) { - id = 0 and result = this.getCondition() - or - id = 1 and result = this.getThen() - or - id = 2 and result = this.getElse() - } - - abstract TranslatedCompilerGeneratedValueCondition getCondition(); - - abstract TranslatedCompilerGeneratedElement getThen(); - - abstract TranslatedCompilerGeneratedElement getElse(); - - private predicate hasElse() { exists(this.getElse()) } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - override Instruction getChildTrueSuccessor(ConditionBase child) { - child = this.getCondition() and - result = this.getThen().getFirstInstruction() - } - - override Instruction getChildFalseSuccessor(ConditionBase child) { - child = this.getCondition() and - if this.hasElse() - then result = this.getElse().getFirstInstruction() - else result = this.getParent().getChildSuccessor(this) - } - - override Instruction getChildSuccessor(TranslatedElement child) { - (child = this.getThen() or child = this.getElse()) and - result = this.getParent().getChildSuccessor(this) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } -} - -/** - * The general form of a compiler generated variable access. - * The concrete implementation needs to specify the immediate - * operand for the `VariableAddress` instruction and if the - * access needs a `Load` instruction or not (eg. `ref` params do not) - */ -abstract class TranslatedCompilerGeneratedVariableAccess extends TranslatedCompilerGeneratedExpr { - override Instruction getFirstInstruction() { result = this.getInstruction(AddressTag()) } - - override TranslatedElement getChild(int id) { none() } - - override Instruction getChildSuccessor(TranslatedElement child) { none() } - - /** - * Returns the type of the accessed variable. Can be overridden when the return - * type is different than the type of the underlying variable. - */ - Type getVariableType() { result = this.getResultType() } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - tag = AddressTag() and - opcode instanceof Opcode::VariableAddress and - resultType = getTypeForGLValue(this.getVariableType()) - or - this.needsLoad() and - tag = LoadTag() and - opcode instanceof Opcode::Load and - resultType = getTypeForPRValue(this.getVariableType()) - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - this.needsLoad() and - tag = LoadTag() and - result = this.getParent().getChildSuccessor(this) and - kind instanceof GotoEdge - or - ( - tag = AddressTag() and - kind instanceof GotoEdge and - if this.needsLoad() - then result = this.getInstruction(LoadTag()) - else result = this.getParent().getChildSuccessor(this) - ) - } - - override Instruction getResult() { - if this.needsLoad() - then result = this.getInstruction(LoadTag()) - else result = this.getInstruction(AddressTag()) - } - - override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - this.needsLoad() and - tag = LoadTag() and - operandTag instanceof AddressOperandTag and - result = this.getInstruction(AddressTag()) - } - - /** - * Holds if the variable access should be followed by a `Load` instruction. - */ - abstract predicate needsLoad(); -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Delegate.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Delegate.qll deleted file mode 100644 index 3f1a1dec646..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Delegate.qll +++ /dev/null @@ -1,109 +0,0 @@ -/** - * File that translates the desugaring of delegate creation and call expressions. - * In particular, in the IR we explicitly allocate a new object and call the delegate's constructor when - * creating a new one. - * For the delegate call, we explicitly call the `Invoke` method. - * More information about the internals: - * https://github.com/dotnet/roslyn/blob/master/src/Compilers/CSharp/Portable/Lowering/LocalRewriter/LocalRewriter_DelegateCreationExpression.cs - * This is a rough approximation which will need further refining. - */ - -import csharp -private import experimental.ir.implementation.Opcode -private import experimental.ir.implementation.internal.OperandTag -private import experimental.ir.internal.TempVariableTag -private import experimental.ir.implementation.raw.internal.InstructionTag -private import experimental.ir.implementation.raw.internal.TranslatedExpr -private import experimental.ir.implementation.raw.internal.TranslatedElement -private import experimental.ir.implementation.raw.internal.TranslatedStmt -private import experimental.ir.implementation.raw.internal.TranslatedCondition -private import experimental.ir.internal.IRCSharpLanguage as Language -private import Common -private import internal.TranslatedCompilerGeneratedCall -private import experimental.ir.implementation.raw.internal.common.TranslatedExprBase - -/** - * Module that exposes the functions needed for the translation of the delegate creation and call expressions. - */ -module DelegateElements { - TranslatedDelegateConstructorCall getConstructor(DelegateCreation generatedBy) { - result.getAst() = generatedBy - } - - TranslatedDelegateInvokeCall getInvoke(DelegateCall generatedBy) { result.getAst() = generatedBy } - - int noGeneratedElements(Element generatedBy) { - ( - generatedBy instanceof DelegateCreation or - generatedBy instanceof DelegateCall - ) and - result = 2 - } -} - -/** - * The translation of the constructor call that happens as part of the delegate creation. - */ -private class TranslatedDelegateConstructorCall extends TranslatedCompilerGeneratedCall, - TTranslatedCompilerGeneratedElement -{ - override DelegateCreation generatedBy; - - TranslatedDelegateConstructorCall() { this = TTranslatedCompilerGeneratedElement(generatedBy, 0) } - - final override Type getCallResultType() { result instanceof VoidType } - - override TranslatedExpr getArgument(int index) { - index = 0 and result = getTranslatedExpr(generatedBy.getArgument()) - } - - override TranslatedExprBase getQualifier() { none() } - - override Instruction getQualifierResult() { - exists(ConstructorCallContext context | - context = this.getParent() and - result = context.getReceiver() - ) - } - - override Callable getInstructionFunction(InstructionTag tag) { - tag = CallTargetTag() and - exists(Callable internal | - internal.getName() = generatedBy.getDelegateType().getName() and - internal.isCompilerGenerated() and - internal.getFile() = generatedBy.getFile() and - result = internal - ) - } -} - -/** - * The translation of the invoke call that happens as part of the desugaring of the delegate call. - */ -private class TranslatedDelegateInvokeCall extends TranslatedCompilerGeneratedCall, - TTranslatedCompilerGeneratedElement -{ - override DelegateCall generatedBy; - - TranslatedDelegateInvokeCall() { this = TTranslatedCompilerGeneratedElement(generatedBy, 1) } - - final override Type getCallResultType() { result instanceof VoidType } - - override Callable getInstructionFunction(InstructionTag tag) { - tag = CallTargetTag() and - exists(Callable internal | - internal.getName() = "Invoke" and - internal.isCompilerGenerated() and - internal.getFile() = generatedBy.getFile() and - result = internal - ) - } - - override TranslatedExprBase getQualifier() { result = getTranslatedExpr(generatedBy.getExpr()) } - - override Instruction getQualifierResult() { result = this.getQualifier().getResult() } - - override TranslatedExpr getArgument(int index) { - result = getTranslatedExpr(generatedBy.getArgument(index)) - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Foreach.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Foreach.qll deleted file mode 100644 index e49f579ecdf..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Foreach.qll +++ /dev/null @@ -1,457 +0,0 @@ -/** - * File that provides the desugaring of a `Foreach` stmt. - * Since Roslyn rewrites it in quite a few ways, - * for now only desugar it to a "canonical" form. - * Also we only deal with foreach stmts where there is only - * one declaration (see below). - * For example the code: - * ```csharp - * foreach(var item in some_enumerable) { - * // body - * } - * ``` - * gets desugared to: - * ```csharp - * Enumerator e = some_enumerable.GetEnumerator(); - * try - * { - * while(e.MoveNext()) - * { - * int current = e.Current; - * //body - * } - * } - * finally - * { - * e.Dispose(); - * } - * ``` - * More info about the desugaring process for `foreach` stmts: - * https://github.com/dotnet/roslyn/blob/master/src/Compilers/CSharp/Portable/Lowering/LocalRewriter/LocalRewriter_ForEachStatement.cs - * A TODO is to not call `Dispose` no matter what, but desugar the `finally` as an `AsExpr` (cast to IDisposable), - * the call to `Dispose` being made only if the result of the `AsExpr` is not null. - * This is a rough approximation which will need further refining. - */ - -import csharp -private import experimental.ir.implementation.Opcode -private import experimental.ir.implementation.internal.OperandTag -private import experimental.ir.internal.CSharpType -private import experimental.ir.internal.TempVariableTag -private import experimental.ir.implementation.raw.internal.InstructionTag -private import experimental.ir.implementation.raw.internal.TranslatedExpr -private import experimental.ir.implementation.raw.internal.TranslatedElement -private import experimental.ir.implementation.raw.internal.TranslatedStmt -private import experimental.ir.implementation.raw.internal.common.TranslatedConditionBase -private import experimental.ir.implementation.raw.internal.common.TranslatedExprBase -private import experimental.ir.internal.IRCSharpLanguage as Language -private import Common -private import internal.TranslatedCompilerGeneratedStmt -private import internal.TranslatedCompilerGeneratedCall -private import internal.TranslatedCompilerGeneratedDeclaration -private import internal.TranslatedCompilerGeneratedCondition -private import internal.TranslatedCompilerGeneratedElement - -/** - * Module that exposes the functions needed for the translation of the `foreach` stmt. - */ -module ForeachElements { - TranslatedForeachTry getTry(ForeachStmt generatedBy) { result.getAst() = generatedBy } - - TranslatedForeachEnumerator getEnumDecl(ForeachStmt generatedBy) { result.getAst() = generatedBy } - - int noGeneratedElements() { result = 13 } -} - -private class TranslatedForeachTry extends TranslatedCompilerGeneratedTry, - TTranslatedCompilerGeneratedElement -{ - override ForeachStmt generatedBy; - - TranslatedForeachTry() { this = TTranslatedCompilerGeneratedElement(generatedBy, 0) } - - override TranslatedElement getFinally() { - exists(TranslatedForeachFinally ff | - ff.getAst() = generatedBy and - result = ff - ) - } - - override TranslatedElement getBody() { - exists(TranslatedForeachWhile fw | - fw.getAst() = generatedBy and - result = fw - ) - } -} - -/** - * The translation of the finally block. - */ -private class TranslatedForeachFinally extends TranslatedCompilerGeneratedBlock, - TTranslatedCompilerGeneratedElement -{ - override ForeachStmt generatedBy; - - TranslatedForeachFinally() { this = TTranslatedCompilerGeneratedElement(generatedBy, 1) } - - override TranslatedElement getStmt(int index) { - index = 0 and - exists(TranslatedForeachDispose fd | - fd.getAst() = generatedBy and - result = fd - ) - } -} - -/** - * The compiler generated while loop. - * Note that this class is not private since it is needed in `IRConstruction.qll`, - * to correctly mark which edges should be back edges. - */ -class TranslatedForeachWhile extends TranslatedCompilerGeneratedStmt, ConditionContext, - TTranslatedCompilerGeneratedElement -{ - override ForeachStmt generatedBy; - - TranslatedForeachWhile() { this = TTranslatedCompilerGeneratedElement(generatedBy, 2) } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - none() - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } - - override Instruction getFirstInstruction() { result = this.getCondition().getFirstInstruction() } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getInit() and result = this.getBody().getFirstInstruction() - or - child = this.getBody() and result = this.getCondition().getFirstInstruction() - } - - override TranslatedElement getChild(int id) { - id = 0 and result = this.getCondition() - or - id = 1 and result = this.getInit() - or - id = 2 and result = this.getBody() - } - - final override Instruction getChildTrueSuccessor(ConditionBase child) { - child = this.getCondition() and result = this.getInit().getFirstInstruction() - } - - final override Instruction getChildFalseSuccessor(ConditionBase child) { - child = this.getCondition() and result = this.getParent().getChildSuccessor(this) - } - - TranslatedStmt getBody() { result = getTranslatedStmt(generatedBy.getBody()) } - - TranslatedElement getInit() { - exists(TranslatedForeachIterVar iv | - iv.getAst() = generatedBy and - result = iv - ) - } - - ValueConditionBase getCondition() { - exists(TranslatedForeachWhileCondition cond | - cond.getAst() = generatedBy and - result = cond - ) - } -} - -/** - * The translation of the call to the `MoveNext` method, used as a condition for the while. - */ -private class TranslatedForeachMoveNext extends TranslatedCompilerGeneratedCall, - TTranslatedCompilerGeneratedElement -{ - override ForeachStmt generatedBy; - - TranslatedForeachMoveNext() { this = TTranslatedCompilerGeneratedElement(generatedBy, 3) } - - override Callable getInstructionFunction(InstructionTag tag) { - tag = CallTargetTag() and - result = generatedBy.getMoveNext() - } - - override Type getCallResultType() { result instanceof BoolType } - - override TranslatedExpr getArgument(int id) { none() } - - override TranslatedExprBase getQualifier() { - exists(TranslatedMoveNextEnumAcc acc | - acc.getAst() = generatedBy and - result = acc - ) - } - - override Instruction getQualifierResult() { result = this.getQualifier().getResult() } -} - -/** - * The translation of the call to retrieve the enumerator. - */ -private class TranslatedForeachGetEnumerator extends TranslatedCompilerGeneratedCall, - TTranslatedCompilerGeneratedElement -{ - override ForeachStmt generatedBy; - - TranslatedForeachGetEnumerator() { this = TTranslatedCompilerGeneratedElement(generatedBy, 4) } - - final override Type getCallResultType() { - result = this.getInstructionFunction(CallTargetTag()).getReturnType() - } - - override Callable getInstructionFunction(InstructionTag tag) { - tag = CallTargetTag() and - result = generatedBy.getGetEnumerator() - } - - override TranslatedExpr getArgument(int id) { none() } - - override TranslatedExprBase getQualifier() { - result = getTranslatedExpr(generatedBy.getIterableExpr()) - } - - override Instruction getQualifierResult() { result = this.getQualifier().getResult() } -} - -/** - * The translation of the call to the getter method of the `Current` property of the enumerator. - */ -private class TranslatedForeachCurrent extends TranslatedCompilerGeneratedCall, - TTranslatedCompilerGeneratedElement -{ - override ForeachStmt generatedBy; - - TranslatedForeachCurrent() { this = TTranslatedCompilerGeneratedElement(generatedBy, 5) } - - override Type getCallResultType() { result = generatedBy.getElementType() } - - override TranslatedExpr getArgument(int id) { none() } - - override TranslatedExprBase getQualifier() { - exists(TranslatedForeachCurrentEnumAcc acc | - acc.getAst() = generatedBy and - result = acc - ) - } - - override Instruction getQualifierResult() { result = this.getQualifier().getResult() } - - override Callable getInstructionFunction(InstructionTag tag) { - tag = CallTargetTag() and - result = generatedBy.getCurrent().getGetter() - } -} - -/** - * The translation of the call to dispose (inside the finally block) - */ -private class TranslatedForeachDispose extends TranslatedCompilerGeneratedCall, - TTranslatedCompilerGeneratedElement -{ - override ForeachStmt generatedBy; - - TranslatedForeachDispose() { this = TTranslatedCompilerGeneratedElement(generatedBy, 6) } - - override Callable getInstructionFunction(InstructionTag tag) { - tag = CallTargetTag() and - result = generatedBy.getDispose() - } - - final override Type getCallResultType() { result instanceof VoidType } - - override TranslatedExpr getArgument(int id) { none() } - - override TranslatedExprBase getQualifier() { - exists(TranslatedForeachDisposeEnumAcc acc | - acc.getAst() = generatedBy and - result = acc - ) - } - - override Instruction getQualifierResult() { result = this.getQualifier().getResult() } -} - -/** - * The condition for the while, ie. a call to MoveNext. - */ -private class TranslatedForeachWhileCondition extends TranslatedCompilerGeneratedValueCondition, - TTranslatedCompilerGeneratedElement -{ - override ForeachStmt generatedBy; - - TranslatedForeachWhileCondition() { this = TTranslatedCompilerGeneratedElement(generatedBy, 7) } - - override TranslatedCompilerGeneratedCall getValueExpr() { - exists(TranslatedForeachMoveNext mn | - mn.getAst() = generatedBy and - result = mn - ) - } - - override Instruction valueExprResult() { result = this.getValueExpr().getResult() } -} - -/** - * Class that represents that translation of the declaration that happens before the `try ... finally` block (the - * declaration of the `temporary` enumerator variable) - */ -private class TranslatedForeachEnumerator extends TranslatedCompilerGeneratedDeclaration, - TTranslatedCompilerGeneratedElement -{ - override ForeachStmt generatedBy; - - TranslatedForeachEnumerator() { this = TTranslatedCompilerGeneratedElement(generatedBy, 8) } - - override predicate hasTempVariable(TempVariableTag tag, CSharpType type) { - tag = ForeachEnumTempVar() and - type = getTypeForPRValue(this.getInitialization().getCallResultType()) - } - - override IRTempVariable getIRVariable() { - result = getIRTempVariable(generatedBy, ForeachEnumTempVar()) - } - - override TranslatedCompilerGeneratedCall getInitialization() { - exists(TranslatedForeachGetEnumerator ge | - ge.getAst() = generatedBy and - result = ge - ) - } - - override Instruction getInitializationResult() { result = this.getInitialization().getResult() } -} - -/** - * Class that represents that translation of the declaration that's happening inside the body of the while. - */ -private class TranslatedForeachIterVar extends TranslatedCompilerGeneratedDeclaration, - TTranslatedCompilerGeneratedElement -{ - override ForeachStmt generatedBy; - - TranslatedForeachIterVar() { this = TTranslatedCompilerGeneratedElement(generatedBy, 9) } - - override IRVariable getInstructionVariable(InstructionTag tag) { - tag = InitializerVariableAddressTag() and - result = this.getIRVariable() - } - - override IRVariable getIRVariable() { - result = getIRUserVariable(this.getFunction(), generatedBy.getAVariable()) - } - - override TranslatedCompilerGeneratedCall getInitialization() { - exists(TranslatedForeachCurrent crtProp | - crtProp.getAst() = generatedBy and - result = crtProp - ) - } - - override Instruction getInitializationResult() { result = this.getInitialization().getResult() } -} - -/** - * Class that represents that translation of access to the temporary enumerator variable. Used as the qualifier - * for the call to `MoveNext`. - */ -private class TranslatedMoveNextEnumAcc extends TTranslatedCompilerGeneratedElement, - TranslatedCompilerGeneratedVariableAccess -{ - override ForeachStmt generatedBy; - - TranslatedMoveNextEnumAcc() { this = TTranslatedCompilerGeneratedElement(generatedBy, 10) } - - override Type getResultType() { result instanceof BoolType } - - override Type getVariableType() { - exists(TranslatedForeachGetEnumerator ge | - ge.getAst() = generatedBy and - result = ge.getCallResultType() - ) - } - - override predicate hasTempVariable(TempVariableTag tag, CSharpType type) { - tag = ForeachEnumTempVar() and - type = getTypeForPRValue(this.getVariableType()) - } - - override IRVariable getInstructionVariable(InstructionTag tag) { - tag = AddressTag() and - result = this.getTempVariable(ForeachEnumTempVar()) - } - - override predicate needsLoad() { any() } -} - -/** - * Class that represents that translation of access to the temporary enumerator variable. Used as the qualifier - * for the call to the getter of the property `Current`. - */ -private class TranslatedForeachCurrentEnumAcc extends TTranslatedCompilerGeneratedElement, - TranslatedCompilerGeneratedVariableAccess -{ - override ForeachStmt generatedBy; - - TranslatedForeachCurrentEnumAcc() { this = TTranslatedCompilerGeneratedElement(generatedBy, 11) } - - override Type getResultType() { result instanceof BoolType } - - override Type getVariableType() { - exists(TranslatedForeachGetEnumerator ge | - ge.getAst() = generatedBy and - result = ge.getCallResultType() - ) - } - - override predicate hasTempVariable(TempVariableTag tag, CSharpType type) { - tag = ForeachEnumTempVar() and - type = getTypeForPRValue(this.getVariableType()) - } - - override IRVariable getInstructionVariable(InstructionTag tag) { - tag = AddressTag() and - result = this.getTempVariable(ForeachEnumTempVar()) - } - - override predicate needsLoad() { any() } -} - -/** - * Class that represents that translation of access to the temporary enumerator variable. Used as the qualifier - * for the call to `Dispose`. - */ -private class TranslatedForeachDisposeEnumAcc extends TTranslatedCompilerGeneratedElement, - TranslatedCompilerGeneratedVariableAccess -{ - override ForeachStmt generatedBy; - - TranslatedForeachDisposeEnumAcc() { this = TTranslatedCompilerGeneratedElement(generatedBy, 12) } - - override Type getResultType() { result instanceof BoolType } - - override Type getVariableType() { - exists(TranslatedForeachGetEnumerator ge | - ge.getAst() = generatedBy and - result = ge.getCallResultType() - ) - } - - override predicate hasTempVariable(TempVariableTag tag, CSharpType type) { - tag = ForeachEnumTempVar() and - type = getTypeForPRValue(this.getVariableType()) - } - - override IRVariable getInstructionVariable(InstructionTag tag) { - tag = AddressTag() and - result = this.getTempVariable(ForeachEnumTempVar()) - } - - override predicate needsLoad() { any() } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Lock.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Lock.qll deleted file mode 100644 index 40ca922b325..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Lock.qll +++ /dev/null @@ -1,426 +0,0 @@ -/** - * File that provides the desugaring of a `lock` stmt. - * The statement: - * ```csharp - * lock (anExpr) ... - * ``` - * gets desugared to: - * ```csharp - * SomeRefType lockedVar = anExpr; - * bool __lockWasTaken = false; - * try { - * System.Threading.Monitor.Enter(lockedVar, ref __lockWasTaken); - * ... - * } - * finally { - * if (__lockWasTaken) System.Threading.Monitor.Exit(lockedVar); - * } - * ``` - */ - -import csharp -private import experimental.ir.implementation.Opcode -private import experimental.ir.implementation.internal.OperandTag -private import experimental.ir.internal.CSharpType -private import experimental.ir.internal.TempVariableTag -private import experimental.ir.implementation.raw.internal.TranslatedExpr -private import experimental.ir.implementation.raw.internal.TranslatedElement -private import experimental.ir.implementation.raw.internal.TranslatedStmt -private import experimental.ir.implementation.raw.internal.common.TranslatedExprBase -private import experimental.ir.implementation.raw.internal.common.TranslatedConditionBase -private import experimental.ir.implementation.raw.internal.InstructionTag -private import experimental.ir.internal.IRCSharpLanguage as Language -private import Common -private import internal.TranslatedCompilerGeneratedStmt -private import internal.TranslatedCompilerGeneratedCall -private import internal.TranslatedCompilerGeneratedDeclaration -private import internal.TranslatedCompilerGeneratedCondition -private import internal.TranslatedCompilerGeneratedElement -private import internal.TranslatedCompilerGeneratedExpr - -/** - * Module that exposes the functions needed for the translation of the `lock` stmt. - */ -module LockElements { - TranslatedLockedVarDecl getLockedVarDecl(LockStmt generatedBy) { result.getAst() = generatedBy } - - TranslatedLockTry getTry(LockStmt generatedBy) { result.getAst() = generatedBy } - - TranslatedLockWasTakenDecl getLockWasTakenDecl(LockStmt generatedBy) { - result.getAst() = generatedBy - } - - int noGeneratedElements() { result = 14 } -} - -/** - * The translation of the `try` stmt. - */ -private class TranslatedLockTry extends TranslatedCompilerGeneratedTry, - TTranslatedCompilerGeneratedElement -{ - override LockStmt generatedBy; - - TranslatedLockTry() { this = TTranslatedCompilerGeneratedElement(generatedBy, 0) } - - override TranslatedElement getFinally() { - exists(TranslatedLockFinally fin | - fin.getAst() = generatedBy and - result = fin - ) - } - - override TranslatedElement getBody() { - exists(TranslatedLockTryBody ltb | - ltb.getAst() = generatedBy and - result = ltb - ) - } -} - -/** - * The translation of the `lock` stmt's body. - */ -private class TranslatedLockTryBody extends TranslatedCompilerGeneratedBlock, - TTranslatedCompilerGeneratedElement -{ - override LockStmt generatedBy; - - TranslatedLockTryBody() { this = TTranslatedCompilerGeneratedElement(generatedBy, 1) } - - override TranslatedElement getStmt(int index) { - index = 0 and - exists(TranslatedMonitorEnter me | - me.getAst() = generatedBy and - result = me - ) - or - index = 1 and - result = getTranslatedStmt(generatedBy.getBlock()) - } -} - -/** - * The translation of the finally block. - */ -private class TranslatedLockFinally extends TranslatedCompilerGeneratedBlock, - TTranslatedCompilerGeneratedElement -{ - override LockStmt generatedBy; - - TranslatedLockFinally() { this = TTranslatedCompilerGeneratedElement(generatedBy, 2) } - - override TranslatedElement getStmt(int index) { - index = 0 and - exists(TranslatedFinallyIf fif | - fif.getAst() = generatedBy and - result = fif - ) - } -} - -/** - * The translation of the call to dispose (inside the finally block) - */ -private class TranslatedMonitorExit extends TranslatedCompilerGeneratedCall, - TTranslatedCompilerGeneratedElement -{ - override LockStmt generatedBy; - - TranslatedMonitorExit() { this = TTranslatedCompilerGeneratedElement(generatedBy, 3) } - - override Callable getInstructionFunction(InstructionTag tag) { - tag = CallTargetTag() and - exists(Callable exit | - exit.hasFullyQualifiedName("System.Threading.Monitor", "Exit") and - result = exit - ) - } - - final override Type getCallResultType() { result instanceof VoidType } - - override TranslatedExprBase getArgument(int id) { - id = 0 and - exists(TranslatedMonitorExitVarAcc var | - var.getAst() = generatedBy and - result = var - ) - } - - override TranslatedExprBase getQualifier() { none() } - - override Instruction getQualifierResult() { none() } -} - -/** - * The translation of the call to dispose (inside the finally block) - */ -private class TranslatedMonitorEnter extends TranslatedCompilerGeneratedCall, - TTranslatedCompilerGeneratedElement -{ - override LockStmt generatedBy; - - TranslatedMonitorEnter() { this = TTranslatedCompilerGeneratedElement(generatedBy, 4) } - - override Callable getInstructionFunction(InstructionTag tag) { - tag = CallTargetTag() and - exists(Callable dispose | - dispose.hasFullyQualifiedName("System.Threading.Monitor", "Enter") and - result = dispose - ) - } - - final override Type getCallResultType() { result instanceof VoidType } - - override TranslatedExprBase getArgument(int id) { - id = 0 and - exists(TranslatedMonitorEnterVarAcc var | - var.getAst() = generatedBy and - result = var - ) - or - id = 1 and - exists(TranslatedLockWasTakenRefArg refArg | - refArg.getAst() = generatedBy and - result = refArg - ) - } - - override TranslatedExprBase getQualifier() { none() } - - override Instruction getQualifierResult() { none() } -} - -/** - * The translation of the condition of the `if` present in the `finally` clause. - */ -private class TranslatedIfCondition extends TranslatedCompilerGeneratedValueCondition, - TTranslatedCompilerGeneratedElement -{ - override LockStmt generatedBy; - - TranslatedIfCondition() { this = TTranslatedCompilerGeneratedElement(generatedBy, 5) } - - override TranslatedCompilerGeneratedExpr getValueExpr() { - exists(TranslatedLockWasTakenCondVarAcc condVar | - condVar.getAst() = generatedBy and - result = condVar - ) - } - - override Instruction valueExprResult() { result = this.getValueExpr().getResult() } -} - -/** - * The translation of the `if` stmt present in the `finally` clause. - */ -private class TranslatedFinallyIf extends TranslatedCompilerGeneratedIfStmt, - TTranslatedCompilerGeneratedElement -{ - override LockStmt generatedBy; - - TranslatedFinallyIf() { this = TTranslatedCompilerGeneratedElement(generatedBy, 6) } - - override TranslatedCompilerGeneratedValueCondition getCondition() { - exists(TranslatedIfCondition cond | - cond.getAst() = generatedBy and - result = cond - ) - } - - override TranslatedCompilerGeneratedCall getThen() { - exists(TranslatedMonitorExit me | - me.getAst() = generatedBy and - result = me - ) - } - - override TranslatedCompilerGeneratedCall getElse() { none() } -} - -/** - * Represents the translation of the constant that is part of the initialization for the - * bool temp variable. - */ -private class TranslatedWasTakenConst extends TranslatedCompilerGeneratedConstant, - TTranslatedCompilerGeneratedElement -{ - override LockStmt generatedBy; - - TranslatedWasTakenConst() { this = TTranslatedCompilerGeneratedElement(generatedBy, 7) } - - override string getInstructionConstantValue(InstructionTag tag) { - tag = OnlyInstructionTag() and - result = "false" - } - - override Instruction getResult() { result = this.getInstruction(OnlyInstructionTag()) } - - override Type getResultType() { result instanceof BoolType } -} - -/** - * Represents the translation of the `lockWasTaken` temp variable declaration. - */ -private class TranslatedLockWasTakenDecl extends TranslatedCompilerGeneratedDeclaration, - TTranslatedCompilerGeneratedElement -{ - override LockStmt generatedBy; - - TranslatedLockWasTakenDecl() { this = TTranslatedCompilerGeneratedElement(generatedBy, 8) } - - override predicate hasTempVariable(TempVariableTag tag, CSharpType type) { - tag = LockWasTakenTemp() and - type = getBoolType() - } - - override IRTempVariable getIRVariable() { - result = getIRTempVariable(generatedBy, LockWasTakenTemp()) - } - - override TranslatedCompilerGeneratedExpr getInitialization() { - exists(TranslatedWasTakenConst const | - const.getAst() = generatedBy and - result = const - ) - } - - override Type getVarType() { result = this.getInitialization().getResultType() } - - override Instruction getInitializationResult() { result = this.getInitialization().getResult() } -} - -/** - * Represents the translation of the declaration of the temp variable that is initialized to the - * expression being locked. - */ -private class TranslatedLockedVarDecl extends TranslatedCompilerGeneratedDeclaration, - TTranslatedCompilerGeneratedElement -{ - override LockStmt generatedBy; - - TranslatedLockedVarDecl() { this = TTranslatedCompilerGeneratedElement(generatedBy, 9) } - - override predicate hasTempVariable(TempVariableTag tag, CSharpType type) { - tag = LockedVarTemp() and - type = getTypeForPRValue(generatedBy.getExpr().getType()) - } - - override IRTempVariable getIRVariable() { - result = getIRTempVariable(generatedBy, LockedVarTemp()) - } - - override TranslatedExprBase getInitialization() { - result = getTranslatedExpr(generatedBy.getExpr()) - } - - override Type getVarType() { result = generatedBy.getExpr().getType() } - - override Instruction getInitializationResult() { result = this.getInitialization().getResult() } -} - -/** - * Represents the translation of access to the temp variable that is initialized to the - * expression being locked. - * Used as an argument for the `MonitorEnter` call. - */ -private class TranslatedMonitorEnterVarAcc extends TTranslatedCompilerGeneratedElement, - TranslatedCompilerGeneratedVariableAccess -{ - override LockStmt generatedBy; - - TranslatedMonitorEnterVarAcc() { this = TTranslatedCompilerGeneratedElement(generatedBy, 10) } - - override Type getResultType() { result = generatedBy.getExpr().getType() } - - override predicate hasTempVariable(TempVariableTag tag, CSharpType type) { - tag = LockedVarTemp() and - type = getTypeForPRValue(this.getResultType()) - } - - override IRVariable getInstructionVariable(InstructionTag tag) { - tag = AddressTag() and - result = this.getTempVariable(LockedVarTemp()) - } - - override predicate needsLoad() { any() } -} - -/** - * Represents the translation of access to the temp variable that is initialized to the - * expression being locked. - * Used as an argument for the `MonitorExit` call. - */ -private class TranslatedMonitorExitVarAcc extends TTranslatedCompilerGeneratedElement, - TranslatedCompilerGeneratedVariableAccess -{ - override LockStmt generatedBy; - - TranslatedMonitorExitVarAcc() { this = TTranslatedCompilerGeneratedElement(generatedBy, 11) } - - override Type getResultType() { result = generatedBy.getExpr().getType() } - - override IRVariable getInstructionVariable(InstructionTag tag) { - tag = AddressTag() and - result = this.getTempVariable(LockedVarTemp()) - } - - override predicate hasTempVariable(TempVariableTag tag, CSharpType type) { - tag = LockedVarTemp() and - type = getTypeForPRValue(this.getResultType()) - } - - override predicate needsLoad() { any() } -} - -/** - * Represents that translation of access to the temporary bool variable. - * Used as an argument for the `MonitorEnter` call. - */ -private class TranslatedLockWasTakenCondVarAcc extends TTranslatedCompilerGeneratedElement, - TranslatedCompilerGeneratedVariableAccess -{ - override LockStmt generatedBy; - - TranslatedLockWasTakenCondVarAcc() { this = TTranslatedCompilerGeneratedElement(generatedBy, 12) } - - override Type getResultType() { result instanceof BoolType } - - override predicate hasTempVariable(TempVariableTag tag, CSharpType type) { - tag = LockWasTakenTemp() and - type = getTypeForPRValue(this.getResultType()) - } - - override IRVariable getInstructionVariable(InstructionTag tag) { - tag = AddressTag() and - result = this.getTempVariable(LockWasTakenTemp()) - } - - override predicate needsLoad() { any() } -} - -/** - * That represents that translation of access to the temporary bool variable. Its value is used - * as the `if` condition in the finally clause. - */ -private class TranslatedLockWasTakenRefArg extends TTranslatedCompilerGeneratedElement, - TranslatedCompilerGeneratedVariableAccess -{ - override LockStmt generatedBy; - - TranslatedLockWasTakenRefArg() { this = TTranslatedCompilerGeneratedElement(generatedBy, 13) } - - override Type getResultType() { result instanceof BoolType } - - override predicate hasTempVariable(TempVariableTag tag, CSharpType type) { - tag = LockWasTakenTemp() and - type = getTypeForPRValue(this.getResultType()) - } - - override IRVariable getInstructionVariable(InstructionTag tag) { - tag = AddressTag() and - result = this.getTempVariable(LockWasTakenTemp()) - } - - override predicate needsLoad() { none() } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Using.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Using.qll deleted file mode 100644 index 8b137891791..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/Using.qll +++ /dev/null @@ -1 +0,0 @@ - diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedCall.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedCall.qll deleted file mode 100644 index d1834f90c1c..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedCall.qll +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Contains an abstract class that is the super class of the classes that deal with compiler generated calls. - */ - -import csharp -private import experimental.ir.implementation.raw.internal.TranslatedElement -private import experimental.ir.implementation.raw.internal.TranslatedFunction -private import experimental.ir.implementation.raw.internal.common.TranslatedCallBase -private import TranslatedCompilerGeneratedElement -private import experimental.ir.internal.IRCSharpLanguage as Language - -abstract class TranslatedCompilerGeneratedCall extends TranslatedCallBase, - TranslatedCompilerGeneratedElement -{ - final override string toString() { - result = "compiler generated call (" + generatedBy.toString() + ")" - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedCondition.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedCondition.qll deleted file mode 100644 index 57fdc12121c..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedCondition.qll +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Contains an abstract class that is the super class of the classes that deal with compiler generated conditions. - */ - -import csharp -private import experimental.ir.implementation.raw.internal.TranslatedElement -private import experimental.ir.implementation.raw.internal.common.TranslatedConditionBase -private import TranslatedCompilerGeneratedElement -private import experimental.ir.internal.IRCSharpLanguage as Language - -abstract class TranslatedCompilerGeneratedValueCondition extends TranslatedCompilerGeneratedElement, - ValueConditionBase -{ - final override string toString() { - result = "compiler generated condition (" + generatedBy.toString() + ")" - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedDeclaration.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedDeclaration.qll deleted file mode 100644 index 2a3ace143c8..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedDeclaration.qll +++ /dev/null @@ -1,81 +0,0 @@ -/** - * Contains an abstract class, which is the super class of all the classes that represent compiler - * generated declarations. It extends the Base for declarations by incorporating a `Store` instruction, since - * we treat the initialization as part of the declaration for compiler generated declarations. - */ - -import csharp -private import experimental.ir.implementation.Opcode -private import experimental.ir.implementation.internal.OperandTag -private import experimental.ir.implementation.raw.internal.InstructionTag -private import experimental.ir.implementation.raw.internal.TranslatedElement -private import experimental.ir.implementation.raw.internal.TranslatedFunction -private import experimental.ir.implementation.raw.internal.common.TranslatedDeclarationBase -private import TranslatedCompilerGeneratedElement -private import experimental.ir.internal.CSharpType -private import experimental.ir.internal.IRCSharpLanguage as Language - -abstract class TranslatedCompilerGeneratedDeclaration extends LocalVariableDeclarationBase, - TranslatedCompilerGeneratedElement -{ - final override string toString() { - result = "compiler generated declaration (" + generatedBy.toString() + ")" - } - - override Instruction getChildSuccessor(TranslatedElement child) { - child = this.getInitialization() and result = this.getInstruction(InitializerStoreTag()) - } - - override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) { - LocalVariableDeclarationBase.super.hasInstruction(opcode, tag, resultType) - or - // we can reuse the initializer store tag - // since compiler generated declarations - // do not have the `Uninitialized` instruction - tag = InitializerStoreTag() and - opcode instanceof Opcode::Store and - resultType = getTypeForPRValue(this.getVarType()) - } - - override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { - result = LocalVariableDeclarationBase.super.getInstructionSuccessor(tag, kind) - or - tag = InitializerStoreTag() and - result = this.getParent().getChildSuccessor(this) and - kind instanceof GotoEdge - } - - override Instruction getInstructionOperand(InstructionTag tag, OperandTag operandTag) { - result = LocalVariableDeclarationBase.super.getInstructionOperand(tag, operandTag) - or - tag = InitializerStoreTag() and - ( - operandTag instanceof AddressOperandTag and - result = this.getInstruction(InitializerVariableAddressTag()) - or - operandTag instanceof StoreValueOperandTag and - result = this.getInitializationResult() - ) - } - - override IRVariable getInstructionVariable(InstructionTag tag) { - tag = InitializerVariableAddressTag() and - result = this.getIRVariable() - } - - // A compiler generated declaration does not have an associated `LocalVariable` - // element - override LocalVariable getDeclVar() { none() } - - override Type getVarType() { result = this.getIRVariable().getType() } - - /** - * Gets the IR variable that corresponds to the declaration. - */ - abstract IRVariable getIRVariable(); - - /** - * Gets result (instruction) of the initialization expression. - */ - abstract Instruction getInitializationResult(); -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedElement.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedElement.qll deleted file mode 100644 index 2e5908b8194..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedElement.qll +++ /dev/null @@ -1,23 +0,0 @@ -/** - * The abstract super class of every `TranslatedCompilerX` class. It has one member field, `generatedBy`, - * which represents the element that generated the compiler generated element. - */ - -private import experimental.ir.implementation.raw.internal.TranslatedElement -private import experimental.ir.internal.IRCSharpLanguage as Language - -abstract class TranslatedCompilerGeneratedElement extends TranslatedElement, - TTranslatedCompilerGeneratedElement -{ - // The element that generates generated the compiler element can - // only be a stmt or an expr - ControlFlowElement generatedBy; - - override string toString() { - result = "compiler generated element (" + generatedBy.toString() + ")" - } - - final override Callable getFunction() { result = generatedBy.getEnclosingCallable() } - - final override Language::AST getAst() { result = generatedBy } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedExpr.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedExpr.qll deleted file mode 100644 index 3c5a60cf812..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedExpr.qll +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Contains an abstract class, which is the super class of all the classes that represent compiler - * generated expressions. - */ - -import csharp -private import TranslatedCompilerGeneratedElement -private import experimental.ir.implementation.raw.Instruction -private import experimental.ir.implementation.raw.internal.common.TranslatedExprBase -private import experimental.ir.internal.IRCSharpLanguage as Language - -abstract class TranslatedCompilerGeneratedExpr extends TranslatedCompilerGeneratedElement, - TranslatedExprBase -{ - override string toString() { result = "compiler generated expr (" + generatedBy.toString() + ")" } - - abstract Type getResultType(); -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedStmt.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedStmt.qll deleted file mode 100644 index 70955e02c9b..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/desugar/internal/TranslatedCompilerGeneratedStmt.qll +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Contains an abstract class, which is the super class of all the classes that represent compiler - * generated statements. - */ - -import csharp -private import TranslatedCompilerGeneratedElement -private import experimental.ir.internal.IRCSharpLanguage as Language - -abstract class TranslatedCompilerGeneratedStmt extends TranslatedCompilerGeneratedElement { - final override string toString() { - result = "compiler generated stmt (" + generatedBy.toString() + ")" - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/Dominance.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/Dominance.qll deleted file mode 100644 index cddc3e23d7e..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/Dominance.qll +++ /dev/null @@ -1,22 +0,0 @@ -private import DominanceInternal - -predicate blockImmediatelyDominates(Graph::Block dominator, Graph::Block block) = - idominance(Graph::isEntryBlock/1, Graph::blockSuccessor/2)(_, dominator, block) - -predicate blockStrictlyDominates(Graph::Block dominator, Graph::Block block) { - blockImmediatelyDominates+(dominator, block) -} - -predicate blockDominates(Graph::Block dominator, Graph::Block block) { - blockStrictlyDominates(dominator, block) or dominator = block -} - -Graph::Block getDominanceFrontier(Graph::Block dominator) { - Graph::blockSuccessor(dominator, result) and - not blockImmediatelyDominates(dominator, result) - or - exists(Graph::Block prev | result = getDominanceFrontier(prev) | - blockImmediatelyDominates(dominator, prev) and - not blockImmediatelyDominates(dominator, result) - ) -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/DominanceInternal.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/DominanceInternal.qll deleted file mode 100644 index aaa4cc7bd53..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/DominanceInternal.qll +++ /dev/null @@ -1,7 +0,0 @@ -private import ReachableBlock as Reachability - -module Graph { - import Reachability::Graph - - class Block = Reachability::ReachableBlock; -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/PrintDominance.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/PrintDominance.qll deleted file mode 100644 index f26565bc278..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/PrintDominance.qll +++ /dev/null @@ -1,22 +0,0 @@ -private import DominanceInternal -private import ReachableBlockInternal -private import Dominance -import IR - -private class DominancePropertyProvider extends IRPropertyProvider { - override string getBlockProperty(IRBlock block, string key) { - exists(IRBlock dominator | - blockImmediatelyDominates(dominator, block) and - key = "ImmediateDominator" and - result = "Block " + dominator.getDisplayIndex().toString() - ) - or - key = "DominanceFrontier" and - result = - strictconcat(IRBlock frontierBlock | - frontierBlock = getDominanceFrontier(block) - | - frontierBlock.getDisplayIndex().toString(), ", " order by frontierBlock.getDisplayIndex() - ) - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/PrintReachableBlock.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/PrintReachableBlock.qll deleted file mode 100644 index 6befad72336..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/PrintReachableBlock.qll +++ /dev/null @@ -1,17 +0,0 @@ -private import ReachableBlockInternal -private import ReachableBlock -import IR - -private class ReachableBlockPropertyProvider extends IRPropertyProvider { - override string getBlockProperty(IRBlock block, string key) { - not block instanceof ReachableBlock and - key = "Unreachable" and - result = "true" - or - exists(EdgeKind kind | - isInfeasibleEdge(block, kind) and - key = "Infeasible(" + kind.toString() + ")" and - result = "true" - ) - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/ReachableBlock.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/ReachableBlock.qll deleted file mode 100644 index 25a53bbefe8..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/ReachableBlock.qll +++ /dev/null @@ -1,53 +0,0 @@ -private import ReachableBlockInternal -private import IR -private import ConstantAnalysis - -predicate isInfeasibleInstructionSuccessor(Instruction instr, EdgeKind kind) { - exists(int conditionValue | - conditionValue = getConstantValue(instr.(ConditionalBranchInstruction).getCondition()) and - if conditionValue = 0 then kind instanceof TrueEdge else kind instanceof FalseEdge - ) -} - -pragma[noinline] -predicate isInfeasibleEdge(IRBlockBase block, EdgeKind kind) { - isInfeasibleInstructionSuccessor(block.getLastInstruction(), kind) -} - -private IRBlock getAFeasiblePredecessorBlock(IRBlock successor) { - exists(EdgeKind kind | - result.getSuccessor(kind) = successor and - not isInfeasibleEdge(result, kind) - ) -} - -private predicate isBlockReachable(IRBlock block) { - exists(IRFunction f | getAFeasiblePredecessorBlock*(block) = f.getEntryBlock()) -} - -/** - * An IR block that is reachable from the entry block of the function, considering only feasible - * edges. - */ -class ReachableBlock extends IRBlockBase { - ReachableBlock() { isBlockReachable(this) } - - final ReachableBlock getAFeasiblePredecessor() { result = getAFeasiblePredecessorBlock(this) } - - final ReachableBlock getAFeasibleSuccessor() { this = getAFeasiblePredecessorBlock(result) } -} - -/** - * An instruction that is contained in a reachable block. - */ -class ReachableInstruction extends Instruction { - ReachableInstruction() { this.getBlock() instanceof ReachableBlock } -} - -module Graph { - predicate isEntryBlock(ReachableBlock block) { exists(IRFunction f | block = f.getEntryBlock()) } - - predicate blockSuccessor(ReachableBlock pred, ReachableBlock succ) { - succ = pred.getAFeasibleSuccessor() - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/ReachableBlockInternal.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/ReachableBlockInternal.qll deleted file mode 100644 index 93131e2abb5..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/reachability/ReachableBlockInternal.qll +++ /dev/null @@ -1,2 +0,0 @@ -import experimental.ir.implementation.raw.IR as IR -import experimental.ir.implementation.raw.constant.ConstantAnalysis as ConstantAnalysis diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IR.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IR.qll deleted file mode 100644 index 79873d8366e..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IR.qll +++ /dev/null @@ -1,92 +0,0 @@ -/** - * Provides classes that describe the Intermediate Representation (IR) of the program. - * - * The IR is a representation of the semantics of the program, with very little dependence on the - * syntax that was used to write the program. For example, in C++, the statements `i += 1;`, `i++`, - * and `++i` all have the same semantic effect, but appear in the AST as three different types of - * `Expr` node. In the IR, all three statements are broken down into a sequence of fundamental - * operations similar to: - * - * ``` - * r1(int*) = VariableAddress[i] // Compute the address of variable `i` - * r2(int) = Load &:r1, m0 // Load the value of `i` - * r3(int) = Constant[1] // An integer constant with the value `1` - * r4(int) = Add r2, r3 // Add `1` to the value of `i` - * r5(int) = Store &r1, r4 // Store the new value back into the variable `i` - * ``` - * - * This allows IR-based analysis to focus on the fundamental operations, rather than having to be - * concerned with the various ways of expressing those operations in source code. - * - * The key classes in the IR are: - * - * - `IRFunction` - Contains the IR for an entire function definition, including all of that - * function's `Instruction`s, `IRBlock`s, and `IRVariables`. - * - `Instruction` - A single operation in the IR. An instruction specifies the operation to be - * performed, the operands that produce the inputs to that operation, and the type of the result - * of the operation. Control flows from an `Instruction` to one of a set of successor - * `Instruction`s. - * - `Operand` - An input value of an `Instruction`. All inputs of an `Instruction` are explicitly - * represented as `Operand`s, even if the input was implicit in the source code. An `Operand` has - * a link to the `Instruction` that consumes its value (its "use") and a link to the `Instruction` - * that produces its value (its "definition"). - * - `IRVariable` - A variable accessed by the IR for a particular function. An `IRVariable` is - * created for each variable directly accessed by the function. In addition, `IRVariable`s are - * created to represent certain temporary storage locations that do not have explicitly declared - * variables in the source code, such as the return value of the function. - * - `IRBlock` - A "basic block" in the control flow graph of a function. An `IRBlock` contains a - * sequence of instructions such that control flow can only enter the block at the first - * instruction, and can only leave the block from the last instruction. - * - `IRType` - The type of a value accessed in the IR. Unlike the `Type` class in the AST, `IRType` - * is language-neutral. For example, in C++, `unsigned int`, `char32_t`, and `wchar_t` might all - * be represented as the `IRType` `uint4`, a four-byte unsigned integer. - */ - -import IRFunction -import Instruction -import IRBlock -import IRVariable -import Operand -private import internal.IRImports as Imports -import Imports::EdgeKind -import Imports::IRType -import Imports::MemoryAccessKind - -private newtype TIRPropertyProvider = MkIRPropertyProvider() - -/** - * A class that provides additional properties to be dumped for IR instructions and blocks when using - * the PrintIR module. Libraries that compute additional facts about IR elements can extend the - * single instance of this class to specify the additional properties computed by the library. - */ -class IRPropertyProvider extends TIRPropertyProvider { - /** Gets a textual representation of this element. */ - string toString() { result = "IRPropertyProvider" } - - /** - * Gets the value of the property named `key` for the specified instruction. - */ - string getInstructionProperty(Instruction instruction, string key) { none() } - - /** - * Gets the value of the property named `key` for the specified block. - */ - string getBlockProperty(IRBlock block, string key) { none() } - - /** - * Gets the value of the property named `key` for the specified operand. - */ - string getOperandProperty(Operand operand, string key) { none() } - - /** - * Holds if the instruction `instr` should be included when printing - * the IR instructions. - */ - predicate shouldPrintInstruction(Instruction instr) { any() } - - /** - * Holds if the operand `operand` should be included when printing the an - * instruction's operand list. - */ - predicate shouldPrintOperand(Operand operand) { any() } -} diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRBlock.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRBlock.qll deleted file mode 100644 index 50395db47e7..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRBlock.qll +++ /dev/null @@ -1,356 +0,0 @@ -/** - * Provides classes describing basic blocks in the IR of a function. - */ - -private import internal.IRInternal -import Instruction -private import internal.IRBlockImports as Imports -import Imports::EdgeKind -private import Cached - -/** - * Holds if `block` is a block in `func` and `sortOverride`, `sortKey1`, and `sortKey2` are the - * sort keys of the block (derived from its first instruction) - */ -pragma[nomagic] -private predicate blockSortKeys( - IRFunction func, IRBlockBase block, int sortOverride, int sortKey1, int sortKey2 -) { - block.getEnclosingIRFunction() = func and - block.getFirstInstruction().hasSortKeys(sortKey1, sortKey2) and - // Ensure that the block containing `EnterFunction` always comes first. - if block.getFirstInstruction() instanceof EnterFunctionInstruction - then sortOverride = 0 - else sortOverride = 1 -} - -/** - * A basic block in the IR. A basic block consists of a sequence of `Instructions` with the only - * incoming edges at the beginning of the sequence and the only outgoing edges at the end of the - * sequence. - * - * This class does not contain any members that query the predecessor or successor edges of the - * block. This allows different classes that extend `IRBlockBase` to expose different subsets of - * edges (e.g. ignoring unreachable edges). - * - * Most consumers should use the class `IRBlock`. - */ -class IRBlockBase extends TIRBlock { - /** Gets a textual representation of this block. */ - final string toString() { result = getFirstInstruction(this).toString() } - - /** Gets the source location of the first non-`Phi` instruction in this block. */ - final Language::Location getLocation() { result = this.getFirstInstruction().getLocation() } - - /** - * INTERNAL: Do not use. - * - * Gets the zero-based index of the block within its function. - * - * This predicate is used by debugging and printing code only. - */ - int getDisplayIndex() { - exists(IRConfiguration::IRConfiguration config | - config.shouldEvaluateDebugStringsForFunction(this.getEnclosingFunction()) - ) and - exists(IRFunction func | - this = - rank[result + 1](IRBlock funcBlock, int sortOverride, int sortKey1, int sortKey2 | - blockSortKeys(func, funcBlock, sortOverride, sortKey1, sortKey2) - | - funcBlock order by sortOverride, sortKey1, sortKey2 - ) - ) - } - - /** - * Gets the `index`th non-`Phi` instruction in this block. - */ - final Instruction getInstruction(int index) { result = getInstruction(this, index) } - - /** - * Get the `Phi` instructions that appear at the start of this block. - */ - final PhiInstruction getAPhiInstruction() { - Construction::getPhiInstructionBlockStart(result) = this.getFirstInstruction() - } - - /** - * Gets an instruction in this block. This includes `Phi` instructions. - */ - final Instruction getAnInstruction() { - result = this.getInstruction(_) or - result = this.getAPhiInstruction() - } - - /** - * Gets the first non-`Phi` instruction in this block. - */ - final Instruction getFirstInstruction() { result = getFirstInstruction(this) } - - /** - * Gets the last instruction in this block. - */ - final Instruction getLastInstruction() { - result = this.getInstruction(this.getInstructionCount() - 1) - } - - /** - * Gets the number of non-`Phi` instructions in this block. - */ - final int getInstructionCount() { result = getInstructionCount(this) } - - /** - * Gets the `IRFunction` that contains this block. - */ - final IRFunction getEnclosingIRFunction() { - result = getFirstInstruction(this).getEnclosingIRFunction() - } - - /** - * Gets the `Function` that contains this block. - */ - final Language::Declaration getEnclosingFunction() { - result = getFirstInstruction(this).getEnclosingFunction() - } -} - -/** - * A basic block with additional information about its predecessor and successor edges. Each edge - * corresponds to the control flow between the last instruction of one block and the first - * instruction of another block. - */ -class IRBlock extends IRBlockBase { - /** - * Gets a block to which control flows directly from this block. - */ - final IRBlock getASuccessor() { blockSuccessor(this, result) } - - /** - * Gets a block from which control flows directly to this block. - */ - final IRBlock getAPredecessor() { blockSuccessor(result, this) } - - /** - * Gets the block to which control flows directly from this block along an edge of kind `kind`. - */ - final IRBlock getSuccessor(EdgeKind kind) { blockSuccessor(this, result, kind) } - - /** - * Gets the block to which control flows directly from this block along a back edge of kind - * `kind`. - */ - final IRBlock getBackEdgeSuccessor(EdgeKind kind) { backEdgeSuccessor(this, result, kind) } - - /** - * Holds if this block immediately dominates `block`. - * - * Block `A` immediate dominates block `B` if block `A` strictly dominates block `B` and block `B` - * is a direct successor of block `A`. - */ - final predicate immediatelyDominates(IRBlock block) { blockImmediatelyDominates(this, block) } - - /** - * Holds if this block strictly dominates `block`. - * - * Block `A` strictly dominates block `B` if block `A` dominates block `B` and blocks `A` and `B` - * are not the same block. - */ - final predicate strictlyDominates(IRBlock block) { blockImmediatelyDominates+(this, block) } - - /** - * Holds if this block dominates `block`. - * - * Block `A` dominates block `B` if any control flow path from the entry block of the function to - * block `B` must pass through block `A`. A block always dominates itself. - */ - final predicate dominates(IRBlock block) { this.strictlyDominates(block) or this = block } - - /** - * Gets a block on the dominance frontier of this block. - * - * The dominance frontier of block `A` is the set of blocks `B` such that block `A` does not - * dominate block `B`, but block `A` does dominate an immediate predecessor of block `B`. - */ - pragma[noinline] - final IRBlock dominanceFrontier() { - this.getASuccessor() = result and - not this.immediatelyDominates(result) - or - exists(IRBlock prev | result = prev.dominanceFrontier() | - this.immediatelyDominates(prev) and - not this.immediatelyDominates(result) - ) - } - - /** - * Holds if this block immediately post-dominates `block`. - * - * Block `A` immediate post-dominates block `B` if block `A` strictly post-dominates block `B` and - * block `B` is a direct successor of block `A`. - */ - final predicate immediatelyPostDominates(IRBlock block) { - blockImmediatelyPostDominates(this, block) - } - - /** - * Holds if this block strictly post-dominates `block`. - * - * Block `A` strictly post-dominates block `B` if block `A` post-dominates block `B` and blocks `A` - * and `B` are not the same block. - */ - final predicate strictlyPostDominates(IRBlock block) { - blockImmediatelyPostDominates+(this, block) - } - - /** - * Holds if this block is a post-dominator of `block`. - * - * Block `A` post-dominates block `B` if any control flow path from `B` to the exit block of the - * function must pass through block `A`. A block always post-dominates itself. - */ - final predicate postDominates(IRBlock block) { this.strictlyPostDominates(block) or this = block } - - /** - * Gets a block on the post-dominance frontier of this block. - * - * The post-dominance frontier of block `A` is the set of blocks `B` such that block `A` does not - * post-dominate block `B`, but block `A` does post-dominate an immediate successor of block `B`. - */ - pragma[noinline] - final IRBlock postDominanceFrontier() { - this.getAPredecessor() = result and - not this.immediatelyPostDominates(result) - or - exists(IRBlock prev | result = prev.postDominanceFrontier() | - this.immediatelyPostDominates(prev) and - not this.immediatelyPostDominates(result) - ) - } - - /** - * Holds if this block is reachable from the entry block of its function. - */ - final predicate isReachableFromFunctionEntry() { - this = this.getEnclosingIRFunction().getEntryBlock() or - this.getAPredecessor().isReachableFromFunctionEntry() - } -} - -private predicate startsBasicBlock(Instruction instr) { - not instr instanceof PhiInstruction and - not adjacentInBlock(_, instr) -} - -/** Holds if `i2` follows `i1` in a `IRBlock`. */ -private predicate adjacentInBlock(Instruction i1, Instruction i2) { - // - i2 must be the only successor of i1 - i2 = unique(Instruction i | i = i1.getASuccessor()) and - // - i1 must be the only predecessor of i2 - i1 = unique(Instruction i | i.getASuccessor() = i2) and - // - The edge between the two must be a GotoEdge. We just check that one - // exists since we've already checked that it's unique. - exists(GotoEdge edgeKind | exists(i1.getSuccessor(edgeKind))) and - // - The edge must not be a back edge. This means we get the same back edges - // in the basic-block graph as we do in the raw CFG. - not exists(Construction::getInstructionBackEdgeSuccessor(i1, _)) - // This predicate could be simplified to remove one of the `unique`s if we - // were willing to rely on the CFG being well-formed and thus never having - // more than one successor to an instruction that has a `GotoEdge` out of it. -} - -private predicate isEntryBlock(TIRBlock block) { - block = MkIRBlock(any(EnterFunctionInstruction enter)) -} - -cached -private module Cached { - cached - newtype TIRBlock = MkIRBlock(Instruction firstInstr) { startsBasicBlock(firstInstr) } - - /** Holds if `i` is the `index`th instruction the block starting with `first`. */ - private Instruction getInstructionFromFirst(Instruction first, int index) = - shortestDistances(startsBasicBlock/1, adjacentInBlock/2)(first, result, index) - - /** Holds if `i` is the `index`th instruction in `block`. */ - cached - Instruction getInstruction(TIRBlock block, int index) { - result = getInstructionFromFirst(getFirstInstruction(block), index) - } - - cached - int getInstructionCount(TIRBlock block) { result = strictcount(getInstruction(block, _)) } - - cached - predicate blockSuccessor(TIRBlock pred, TIRBlock succ, EdgeKind kind) { - exists(Instruction predLast, Instruction succFirst | - predLast = getInstruction(pred, getInstructionCount(pred) - 1) and - succFirst = predLast.getSuccessor(kind) and - succ = MkIRBlock(succFirst) - ) - } - - pragma[noinline] - private predicate blockIdentity(TIRBlock b1, TIRBlock b2) { b1 = b2 } - - pragma[noopt] - cached - predicate backEdgeSuccessor(TIRBlock pred, TIRBlock succ, EdgeKind kind) { - backEdgeSuccessorRaw(pred, succ, kind) - or - // See the QLDoc on `backEdgeSuccessorRaw`. - exists(TIRBlock pred2 | - // Joining with `blockIdentity` is a performance trick to get - // `forwardEdgeRaw` on the RHS of a join, where it's fast. - blockIdentity(pred, pred2) and - forwardEdgeRaw+(pred, pred2) - ) and - blockSuccessor(pred, succ, kind) - } - - /** - * Holds if there is an edge from `pred` to `succ` that is not a back edge. - */ - private predicate forwardEdgeRaw(TIRBlock pred, TIRBlock succ) { - exists(EdgeKind kind | - blockSuccessor(pred, succ, kind) and - not backEdgeSuccessorRaw(pred, succ, kind) - ) - } - - /** - * Holds if the `kind`-edge from `pred` to `succ` is a back edge according to - * `Construction`. - * - * There could be loops of non-back-edges if there is a flaw in the IR - * construction or back-edge detection, and this could cause non-termination - * of subsequent analysis. To prevent that, a subsequent predicate further - * classifies all edges as back edges if they are involved in a loop of - * non-back-edges. - */ - private predicate backEdgeSuccessorRaw(TIRBlock pred, TIRBlock succ, EdgeKind kind) { - exists(Instruction predLast, Instruction succFirst | - predLast = getInstruction(pred, getInstructionCount(pred) - 1) and - succFirst = Construction::getInstructionBackEdgeSuccessor(predLast, kind) and - succ = MkIRBlock(succFirst) - ) - } - - cached - predicate blockSuccessor(TIRBlock pred, TIRBlock succ) { blockSuccessor(pred, succ, _) } - - cached - predicate blockImmediatelyDominates(TIRBlock dominator, TIRBlock block) = - idominance(isEntryBlock/1, blockSuccessor/2)(_, dominator, block) -} - -private Instruction getFirstInstruction(TIRBlock block) { block = MkIRBlock(result) } - -private predicate blockFunctionExit(IRBlock exit) { - exit.getLastInstruction() instanceof ExitFunctionInstruction -} - -private predicate blockPredecessor(IRBlock src, IRBlock pred) { src.getAPredecessor() = pred } - -private predicate blockImmediatelyPostDominates(IRBlock postDominator, IRBlock block) = - idominance(blockFunctionExit/1, blockPredecessor/2)(_, postDominator, block) diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRConsistency.ql b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRConsistency.ql deleted file mode 100644 index 909a7a5fc24..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRConsistency.ql +++ /dev/null @@ -1,8 +0,0 @@ -/** - * @name SSA IR Consistency Check - * @description Performs consistency checks on the Intermediate Representation. This query should have no results. - * @kind table - * @id cpp/ssa-ir-consistency-check - */ - -import IRConsistency diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRConsistency.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRConsistency.qll deleted file mode 100644 index edc785dfabe..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRConsistency.qll +++ /dev/null @@ -1,549 +0,0 @@ -private import IR -import InstructionConsistency // module is below -import IRTypeConsistency // module is in IRType.qll -import internal.IRConsistencyImports - -module InstructionConsistency { - private import internal.InstructionImports as Imports - private import Imports::OperandTag - private import Imports::Overlap - private import internal.IRInternal - - private newtype TOptionalIRFunction = - TPresentIRFunction(IRFunction irFunc) or - TMissingIRFunction() - - /** - * An `IRFunction` that might not exist. This is used so that we can produce consistency failures - * for IR that also incorrectly lacks a `getEnclosingIRFunction()`. - */ - abstract private class OptionalIRFunction extends TOptionalIRFunction { - abstract string toString(); - - abstract Language::Location getLocation(); - } - - class PresentIRFunction extends OptionalIRFunction, TPresentIRFunction { - private IRFunction irFunc; - - PresentIRFunction() { this = TPresentIRFunction(irFunc) } - - override string toString() { - result = concat(LanguageDebug::getIdentityString(irFunc.getFunction()), "; ") - } - - override Language::Location getLocation() { - // To avoid an overwhelming number of results when the extractor merges functions with the - // same name, just pick a single location. - result = - min(Language::Location loc | loc = irFunc.getLocation() | loc order by loc.toString()) - } - - IRFunction getIRFunction() { result = irFunc } - } - - private class MissingIRFunction extends OptionalIRFunction, TMissingIRFunction { - override string toString() { result = "" } - - override Language::Location getLocation() { result instanceof Language::UnknownDefaultLocation } - } - - private OptionalIRFunction getInstructionIRFunction(Instruction instr) { - result = TPresentIRFunction(instr.getEnclosingIRFunction()) - or - not exists(instr.getEnclosingIRFunction()) and result = TMissingIRFunction() - } - - pragma[inline] - private OptionalIRFunction getInstructionIRFunction(Instruction instr, string irFuncText) { - result = getInstructionIRFunction(instr) and - irFuncText = result.toString() - } - - private OptionalIRFunction getOperandIRFunction(Operand operand) { - result = TPresentIRFunction(operand.getEnclosingIRFunction()) - or - not exists(operand.getEnclosingIRFunction()) and result = TMissingIRFunction() - } - - pragma[inline] - private OptionalIRFunction getOperandIRFunction(Operand operand, string irFuncText) { - result = getOperandIRFunction(operand) and - irFuncText = result.toString() - } - - private OptionalIRFunction getBlockIRFunction(IRBlock block) { - result = TPresentIRFunction(block.getEnclosingIRFunction()) - or - not exists(block.getEnclosingIRFunction()) and result = TMissingIRFunction() - } - - /** - * Holds if instruction `instr` is missing an expected operand with tag `tag`. - */ - query predicate missingOperand( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(OperandTag tag | - instr.getOpcode().hasOperand(tag) and - not exists(NonPhiOperand operand | - operand = instr.getAnOperand() and - operand.getOperandTag() = tag - ) and - message = - "Instruction '" + instr.getOpcode().toString() + - "' is missing an expected operand with tag '" + tag.toString() + "' in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - /** - * Holds if instruction `instr` has an unexpected operand with tag `tag`. - */ - query predicate unexpectedOperand( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(OperandTag tag | - exists(NonPhiOperand operand | - operand = instr.getAnOperand() and - operand.getOperandTag() = tag - ) and - not instr.getOpcode().hasOperand(tag) and - not (instr instanceof CallInstruction and tag instanceof ArgumentOperandTag) and - not ( - instr instanceof BuiltInOperationInstruction and tag instanceof PositionalArgumentOperandTag - ) and - not (instr instanceof InlineAsmInstruction and tag instanceof AsmOperandTag) and - message = - "Instruction '" + instr.toString() + "' has unexpected operand '" + tag.toString() + - "' in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - /** - * Holds if instruction `instr` has multiple operands with tag `tag`. - */ - query predicate duplicateOperand( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(OperandTag tag, int operandCount | - operandCount = - strictcount(NonPhiOperand operand | - operand = instr.getAnOperand() and - operand.getOperandTag() = tag - ) and - operandCount > 1 and - message = - "Instruction has " + operandCount + " operands with tag '" + tag.toString() + "'" + - " in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - /** - * Holds if `Phi` instruction `instr` is missing an operand corresponding to - * the predecessor block `pred`. - */ - query predicate missingPhiOperand( - PhiInstruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(IRBlock pred | - pred = instr.getBlock().getAPredecessor() and - not exists(PhiInputOperand operand | - operand = instr.getAnOperand() and - operand.getPredecessorBlock() = pred - ) and - message = - "Instruction '" + instr.toString() + "' is missing an operand for predecessor block '" + - pred.toString() + "' in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - query predicate missingOperandType( - Operand operand, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(Instruction use | - not exists(operand.getType()) and - use = operand.getUse() and - message = - "Operand '" + operand.toString() + "' of instruction '" + use.getOpcode().toString() + - "' is missing a type in function '$@'." and - irFunc = getOperandIRFunction(operand, irFuncText) - ) - } - - query predicate duplicateChiOperand( - ChiInstruction chi, string message, OptionalIRFunction irFunc, string irFuncText - ) { - chi.getTotal() = chi.getPartial() and - message = - "Chi instruction for " + chi.getPartial().toString() + - " has duplicate operands in function '$@'." and - irFunc = getInstructionIRFunction(chi, irFuncText) - } - - query predicate sideEffectWithoutPrimary( - SideEffectInstruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - not exists(instr.getPrimaryInstruction()) and - message = - "Side effect instruction '" + instr + "' is missing a primary instruction in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - } - - /** - * Holds if an instruction, other than `ExitFunction`, has no successors. - */ - query predicate instructionWithoutSuccessor( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - not exists(instr.getASuccessor()) and - not instr instanceof ExitFunctionInstruction and - // Phi instructions aren't linked into the instruction-level flow graph. - not instr instanceof PhiInstruction and - not instr instanceof UnreachedInstruction and - message = "Instruction '" + instr.toString() + "' has no successors in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - } - - /** - * Holds if there are multiple edges of the same kind from `source`. - */ - query predicate ambiguousSuccessors( - Instruction source, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(EdgeKind kind, int n | - n = strictcount(Instruction t | source.getSuccessor(kind) = t) and - n > 1 and - message = - "Instruction '" + source.toString() + "' has " + n.toString() + " successors of kind '" + - kind.toString() + "' in function '$@'." and - irFunc = getInstructionIRFunction(source, irFuncText) - ) - } - - /** - * Holds if `instr` is part of a loop even though the AST of `instr`'s enclosing function - * contains no element that can cause loops. - */ - query predicate unexplainedLoop( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(Language::Function f | - exists(IRBlock block | - instr.getBlock() = block and - block.getEnclosingFunction() = f and - block.getASuccessor+() = block - ) and - not Language::hasPotentialLoop(f) and - message = - "Instruction '" + instr.toString() + "' is part of an unexplained loop in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - /** - * Holds if a `Phi` instruction is present in a block with fewer than two - * predecessors. - */ - query predicate unnecessaryPhiInstruction( - PhiInstruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(int n | - n = count(instr.getBlock().getAPredecessor()) and - n < 2 and - message = - "Instruction '" + instr.toString() + "' is in a block with only " + n.toString() + - " predecessors in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - /** - * Holds if a memory operand is connected to a definition with an unmodeled result. - */ - query predicate memoryOperandDefinitionIsUnmodeled( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(MemoryOperand operand, Instruction def | - operand = instr.getAnOperand() and - def = operand.getAnyDef() and - not def.isResultModeled() and - message = - "Memory operand definition on instruction '" + instr.toString() + - "' has unmodeled result in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - /** - * Holds if operand `operand` consumes a value that was defined in - * a different function. - */ - query predicate operandAcrossFunctions( - Operand operand, string message, OptionalIRFunction useIRFunc, string useIRFuncText, - OptionalIRFunction defIRFunc, string defIRFuncText - ) { - exists(Instruction useInstr, Instruction defInstr | - operand.getUse() = useInstr and - operand.getAnyDef() = defInstr and - useIRFunc = getInstructionIRFunction(useInstr, useIRFuncText) and - defIRFunc = getInstructionIRFunction(defInstr, defIRFuncText) and - useIRFunc != defIRFunc and - message = - "Operand '" + operand.toString() + "' is used on instruction '" + useInstr.toString() + - "' in function '$@', but is defined on instruction '" + defInstr.toString() + - "' in function '$@'." - ) - } - - /** - * Holds if instruction `instr` is not in exactly one block. - */ - query predicate instructionWithoutUniqueBlock( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(int blockCount | - blockCount = count(instr.getBlock()) and - blockCount != 1 and - message = - "Instruction '" + instr.toString() + "' is a member of " + blockCount.toString() + - " blocks in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - private predicate forwardEdge(IRBlock b1, IRBlock b2) { - b1.getASuccessor() = b2 and - not b1.getBackEdgeSuccessor(_) = b2 - } - - /** - * Holds if `f` contains a loop in which no edge is a back edge. - * - * This check ensures we don't have too _few_ back edges. - */ - query predicate containsLoopOfForwardEdges(IRFunction f, string message) { - exists(IRBlock block | - forwardEdge+(block, block) and - block.getEnclosingIRFunction() = f and - message = "Function contains a loop consisting of only forward edges." - ) - } - - /** - * Holds if `block` is reachable from its function entry point but would not - * be reachable by traversing only forward edges. This check is skipped for - * functions containing `goto` statements as the property does not generally - * hold there. - * - * This check ensures we don't have too _many_ back edges. - */ - query predicate lostReachability( - IRBlock block, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(IRFunction f, IRBlock entry | - entry = f.getEntryBlock() and - entry.getASuccessor+() = block and - not forwardEdge+(entry, block) and - not Language::hasGoto(f.getFunction()) and - message = - "Block '" + block.toString() + - "' is not reachable by traversing only forward edges in function '$@'." and - irFunc = TPresentIRFunction(f) and - irFuncText = irFunc.toString() - ) - } - - /** - * Holds if the number of back edges differs between the `Instruction` graph - * and the `IRBlock` graph. - */ - query predicate backEdgeCountMismatch(OptionalIRFunction irFunc, string message) { - exists(int fromInstr, int fromBlock | - fromInstr = - count(Instruction i1, Instruction i2 | - getInstructionIRFunction(i1) = irFunc and i1.getBackEdgeSuccessor(_) = i2 - ) and - fromBlock = - count(IRBlock b1, IRBlock b2 | - getBlockIRFunction(b1) = irFunc and b1.getBackEdgeSuccessor(_) = b2 - ) and - fromInstr != fromBlock and - message = - "The instruction graph for function '" + irFunc.toString() + "' contains " + - fromInstr.toString() + " back edges, but the block graph contains " + fromBlock.toString() - + " back edges." - ) - } - - /** - * Gets the point in the function at which the specified operand is evaluated. For most operands, - * this is at the instruction that consumes the use. For a `PhiInputOperand`, the effective point - * of evaluation is at the end of the corresponding predecessor block. - */ - private predicate pointOfEvaluation(Operand operand, IRBlock block, int index) { - block = operand.(PhiInputOperand).getPredecessorBlock() and - index = block.getInstructionCount() - or - exists(Instruction use | - use = operand.(NonPhiOperand).getUse() and - block.getInstruction(index) = use - ) - } - - /** - * Holds if `useOperand` has a definition that does not dominate the use. - */ - query predicate useNotDominatedByDefinition( - Operand useOperand, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(IRBlock useBlock, int useIndex, Instruction defInstr, IRBlock defBlock, int defIndex | - pointOfEvaluation(useOperand, useBlock, useIndex) and - defInstr = useOperand.getAnyDef() and - ( - defInstr instanceof PhiInstruction and - defBlock = defInstr.getBlock() and - defIndex = -1 - or - defBlock.getInstruction(defIndex) = defInstr - ) and - not ( - defBlock.strictlyDominates(useBlock) - or - defBlock = useBlock and - defIndex < useIndex - ) and - message = - "Operand '" + useOperand.toString() + - "' is not dominated by its definition in function '$@'." and - irFunc = getOperandIRFunction(useOperand, irFuncText) - ) - } - - query predicate switchInstructionWithoutDefaultEdge( - SwitchInstruction switchInstr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - not exists(switchInstr.getDefaultSuccessor()) and - message = - "SwitchInstruction " + switchInstr.toString() + " without a DefaultEdge in function '$@'." and - irFunc = getInstructionIRFunction(switchInstr, irFuncText) - } - - /** - * Holds if `instr` is on the chain of chi/phi instructions for all aliased - * memory. - */ - private predicate isOnAliasedDefinitionChain(Instruction instr) { - instr instanceof AliasedDefinitionInstruction - or - isOnAliasedDefinitionChain(instr.(ChiInstruction).getTotal()) - or - isOnAliasedDefinitionChain(instr.(PhiInstruction).getAnInputOperand().getAnyDef()) - } - - private predicate shouldBeConflated(Instruction instr) { - isOnAliasedDefinitionChain(instr) - or - instr.getOpcode() instanceof Opcode::InitializeNonLocal - } - - query predicate notMarkedAsConflated( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - shouldBeConflated(instr) and - not instr.isResultConflated() and - message = - "Instruction '" + instr.toString() + - "' should be marked as having a conflated result in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - } - - query predicate wronglyMarkedAsConflated( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - instr.isResultConflated() and - not shouldBeConflated(instr) and - message = - "Instruction '" + instr.toString() + - "' should not be marked as having a conflated result in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - } - - query predicate invalidOverlap( - MemoryOperand useOperand, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(Overlap overlap | - overlap = useOperand.getDefinitionOverlap() and - overlap instanceof MayPartiallyOverlap and - message = - "MemoryOperand '" + useOperand.toString() + "' has a `getDefinitionOverlap()` of '" + - overlap.toString() + "'." and - irFunc = getOperandIRFunction(useOperand, irFuncText) - ) - } - - query predicate nonUniqueEnclosingIRFunction( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(int irFuncCount | - irFuncCount = count(instr.getEnclosingIRFunction()) and - irFuncCount != 1 and - message = - "Instruction '" + instr.toString() + "' has " + irFuncCount.toString() + - " results for `getEnclosingIRFunction()` in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - ) - } - - /** - * Holds if the object address operand for the given `FieldAddress` instruction does not have an - * address type. - */ - query predicate fieldAddressOnNonPointer( - FieldAddressInstruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - not instr.getObjectAddressOperand().getIRType() instanceof IRAddressType and - message = - "FieldAddress instruction '" + instr.toString() + - "' has an object address operand that is not an address, in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - } - - /** - * Holds if the `this` argument operand for the given `Call` instruction does not have an address - * type. - */ - query predicate thisArgumentIsNonPointer( - CallInstruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(ThisArgumentOperand thisOperand | thisOperand = instr.getThisArgumentOperand() | - not thisOperand.getIRType() instanceof IRAddressType - ) and - message = - "Call instruction '" + instr.toString() + - "' has a `this` argument operand that is not an address, in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - } - - query predicate nonUniqueIRVariable( - Instruction instr, string message, OptionalIRFunction irFunc, string irFuncText - ) { - exists(VariableInstruction vi, IRVariable v1, IRVariable v2 | - instr = vi and vi.getIRVariable() = v1 and vi.getIRVariable() = v2 and v1 != v2 - ) and - message = - "Variable instruction '" + instr.toString() + - "' has multiple associated variables, in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - or - instr.getOpcode() instanceof Opcode::VariableAddress and - not instr instanceof VariableInstruction and - message = - "Variable address instruction '" + instr.toString() + - "' has no associated variable, in function '$@'." and - irFunc = getInstructionIRFunction(instr, irFuncText) - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRFunction.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRFunction.qll deleted file mode 100644 index 354ba41e3d1..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRFunction.qll +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Provides the class `IRFunction`, which represents the Intermediate Representation for the - * definition of a function. - */ - -private import internal.IRInternal -private import internal.IRFunctionImports as Imports -import Imports::IRFunctionBase -import Instruction - -/** - * The IR for a function. - */ -class IRFunction extends IRFunctionBase { - /** - * Gets the entry point for this function. - */ - pragma[noinline] - final EnterFunctionInstruction getEnterFunctionInstruction() { - result.getEnclosingIRFunction() = this - } - - /** - * Gets the exit point for this function. - */ - pragma[noinline] - final ExitFunctionInstruction getExitFunctionInstruction() { - result.getEnclosingIRFunction() = this - } - - /** - * Gets the single return instruction for this function. - */ - pragma[noinline] - final ReturnInstruction getReturnInstruction() { result.getEnclosingIRFunction() = this } - - /** - * Gets the variable used to hold the return value of this function. If this - * function does not return a value, this predicate does not hold. - */ - pragma[noinline] - final IRReturnVariable getReturnVariable() { result.getEnclosingIRFunction() = this } - - /** - * Gets the block containing the entry point of this function. - */ - pragma[noinline] - final IRBlock getEntryBlock() { - result.getFirstInstruction() = this.getEnterFunctionInstruction() - } - - /** - * Gets all instructions in this function. - */ - final Instruction getAnInstruction() { result.getEnclosingIRFunction() = this } - - /** - * Gets all blocks in this function. - */ - final IRBlock getABlock() { result.getEnclosingIRFunction() = this } -} diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRVariable.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRVariable.qll deleted file mode 100644 index b31c7898ba7..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/IRVariable.qll +++ /dev/null @@ -1,337 +0,0 @@ -/** - * Provides classes that represent variables accessed by the IR. - */ - -private import internal.IRInternal -import IRFunction -private import internal.IRVariableImports as Imports -import Imports::TempVariableTag -private import Imports::IRUtilities -private import Imports::TTempVariableTag -private import Imports::TIRVariable -private import Imports::IRType - -/** - * A variable referenced by the IR for a function. - * - * The variable may be a user-declared variable (`IRUserVariable`) or a temporary variable generated - * by the AST-to-IR translation (`IRTempVariable`). - */ -class IRVariable extends TIRVariable { - Language::Declaration func; - - IRVariable() { - this = TIRUserVariable(_, _, func) or - this = TIRTempVariable(func, _, _, _) or - this = TIRStringLiteral(func, _, _, _) or - this = TIRDynamicInitializationFlag(func, _, _) - } - - /** Gets a textual representation of this element. */ - string toString() { none() } - - /** - * Holds if this variable's value cannot be changed within a function. Currently used for string - * literals, but could also apply to `const` global and static variables. - */ - predicate isReadOnly() { none() } - - /** - * Gets the type of the variable. - */ - final Language::Type getType() { this.getLanguageType().hasType(result, false) } - - /** - * Gets the language-neutral type of the variable. - */ - final IRType getIRType() { result = this.getLanguageType().getIRType() } - - /** - * Gets the type of the variable. - */ - Language::LanguageType getLanguageType() { none() } - - /** - * Gets the AST node that declared this variable, or that introduced this - * variable as part of the AST-to-IR translation. - */ - Language::AST getAst() { none() } - - /** DEPRECATED: Alias for getAst */ - deprecated Language::AST getAST() { result = this.getAst() } - - /** - * Gets an identifier string for the variable. This identifier is unique - * within the function. - */ - string getUniqueId() { none() } - - /** - * Gets the source location of this variable. - */ - final Language::Location getLocation() { result = this.getAst().getLocation() } - - /** - * Gets the IR for the function that references this variable. - */ - final IRFunction getEnclosingIRFunction() { result.getFunction() = func } - - /** - * Gets the function that references this variable. - */ - final Language::Declaration getEnclosingFunction() { result = func } -} - -/** - * A user-declared variable referenced by the IR for a function. - */ -class IRUserVariable extends IRVariable, TIRUserVariable { - Language::Variable var; - Language::LanguageType type; - - IRUserVariable() { this = TIRUserVariable(var, type, func) } - - final override string toString() { result = this.getVariable().toString() } - - final override Language::AST getAst() { result = var } - - /** DEPRECATED: Alias for getAst */ - deprecated override Language::AST getAST() { result = this.getAst() } - - final override string getUniqueId() { - result = this.getVariable().toString() + " " + this.getVariable().getLocation().toString() - } - - final override Language::LanguageType getLanguageType() { result = type } - - /** - * Gets the original user-declared variable. - */ - Language::Variable getVariable() { result = var } -} - -/** - * A variable (user-declared or temporary) that is allocated on the stack. This includes all - * parameters, non-static local variables, and temporary variables. - */ -class IRAutomaticVariable extends IRVariable { - IRAutomaticVariable() { - exists(Language::Variable var | - this = TIRUserVariable(var, _, func) and - Language::isVariableAutomatic(var) - ) - or - this = TIRTempVariable(func, _, _, _) - } -} - -/** - * A user-declared variable that is allocated on the stack. This includes all parameters and - * non-static local variables. - */ -class IRAutomaticUserVariable extends IRUserVariable, IRAutomaticVariable { - override Language::AutomaticVariable var; - - final override Language::AutomaticVariable getVariable() { result = var } -} - -/** - * A user-declared variable that is not allocated on the stack. This includes all global variables, - * namespace-scope variables, static fields, and static local variables. - */ -class IRStaticUserVariable extends IRUserVariable { - override Language::StaticVariable var; - - IRStaticUserVariable() { not Language::isVariableAutomatic(var) } - - final override Language::StaticVariable getVariable() { result = var } -} - -/** - * A variable that is not user-declared. This includes temporary variables generated as part of IR - * construction, as well as string literals. - */ -class IRGeneratedVariable extends IRVariable { - Language::AST ast; - Language::LanguageType type; - - IRGeneratedVariable() { - this = TIRTempVariable(func, ast, _, type) or - this = TIRStringLiteral(func, ast, type, _) or - this = TIRDynamicInitializationFlag(func, ast, type) - } - - final override Language::LanguageType getLanguageType() { result = type } - - final override Language::AST getAst() { result = ast } - - /** DEPRECATED: Alias for getAst */ - deprecated override Language::AST getAST() { result = this.getAst() } - - override string toString() { result = this.getBaseString() + this.getLocationString() } - - override string getUniqueId() { none() } - - /** - * INTERNAL: Do not use. - * - * Gets a string containing the source code location of the AST that generated this variable. - * - * This is used by debugging and printing code only. - */ - final string getLocationString() { - result = - ast.getLocation().getStartLine().toString() + ":" + - ast.getLocation().getStartColumn().toString() - } - - /** - * INTERNAL: Do not use. - * - * Gets the string that is combined with the location of the variable to generate the string - * representation of this variable. - * - * This is used by debugging and printing code only. - */ - string getBaseString() { none() } -} - -/** - * A temporary variable introduced by IR construction. The most common examples are the variable - * generated to hold the return value of a function, or the variable generated to hold the result of - * a condition operator (`a ? b : c`). - */ -class IRTempVariable extends IRGeneratedVariable, IRAutomaticVariable, TIRTempVariable { - TempVariableTag tag; - - IRTempVariable() { this = TIRTempVariable(func, ast, tag, type) } - - final override string getUniqueId() { - result = "Temp: " + Construction::getTempVariableUniqueId(this) - } - - /** - * Gets the "tag" object that differentiates this temporary variable from other temporary - * variables generated for the same AST. - */ - final TempVariableTag getTag() { result = tag } - - override string getBaseString() { result = "#temp" } -} - -/** - * A temporary variable generated to hold the return value of a function. - */ -class IRReturnVariable extends IRTempVariable { - IRReturnVariable() { tag = ReturnValueTempVar() } - - final override string toString() { result = "#return" } -} - -/** - * A temporary variable generated to hold the exception thrown by a `ThrowValue` instruction. - */ -class IRThrowVariable extends IRTempVariable { - IRThrowVariable() { tag = ThrowTempVar() } - - final override string getBaseString() { result = "#throw" } -} - -/** - * A temporary variable generated to hold the contents of all arguments passed to the `...` of a - * function that accepts a variable number of arguments. - */ -class IREllipsisVariable extends IRTempVariable, IRParameter { - IREllipsisVariable() { tag = EllipsisTempVar() } - - final override string toString() { result = "#ellipsis" } - - final override int getIndex() { result = func.(Language::Function).getNumberOfParameters() } -} - -/** - * A temporary variable generated to hold the `this` pointer. - */ -class IRThisVariable extends IRTempVariable, IRParameter { - IRThisVariable() { tag = ThisTempVar() } - - final override string toString() { result = "#this" } - - final override int getIndex() { result = -1 } -} - -/** - * A variable generated to represent the contents of a string literal. This variable acts much like - * a read-only global variable. - */ -class IRStringLiteral extends IRGeneratedVariable, TIRStringLiteral { - Language::StringLiteral literal; - - IRStringLiteral() { this = TIRStringLiteral(func, ast, type, literal) } - - final override predicate isReadOnly() { any() } - - final override string getUniqueId() { - result = "String: " + this.getLocationString() + "=" + Language::getStringLiteralText(literal) - } - - final override string getBaseString() { result = "#string" } - - /** - * Gets the AST of the string literal represented by this `IRStringLiteral`. - */ - final Language::StringLiteral getLiteral() { result = literal } -} - -/** - * A variable generated to track whether a specific non-stack variable has been initialized. This is - * used to model the runtime initialization of static local variables in C++, as well as static - * fields in C#. - */ -class IRDynamicInitializationFlag extends IRGeneratedVariable, TIRDynamicInitializationFlag { - Language::Variable var; - - IRDynamicInitializationFlag() { - this = TIRDynamicInitializationFlag(func, var, type) and ast = var - } - - final override string toString() { result = var.toString() + "#init" } - - /** - * Gets variable whose initialization is guarded by this flag. - */ - final Language::Variable getVariable() { result = var } - - final override string getUniqueId() { - result = - "Init: " + this.getVariable().toString() + " " + this.getVariable().getLocation().toString() - } - - final override string getBaseString() { result = "#init:" + var.toString() + ":" } -} - -/** - * An IR variable which acts like a function parameter, including positional parameters and the - * temporary variables generated for `this` and ellipsis parameters. - */ -class IRParameter extends IRAutomaticVariable { - IRParameter() { - this.(IRAutomaticUserVariable).getVariable() instanceof Language::Parameter - or - this = TIRTempVariable(_, _, ThisTempVar(), _) - or - this = TIRTempVariable(_, _, EllipsisTempVar(), _) - } - - /** - * Gets the zero-based index of this parameter. The `this` parameter has index -1. - */ - int getIndex() { none() } -} - -/** - * An IR variable representing a positional parameter. - */ -class IRPositionalParameter extends IRParameter, IRAutomaticUserVariable { - final override int getIndex() { result = this.getVariable().(Language::Parameter).getIndex() } -} diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll deleted file mode 100644 index 189ffce2903..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll +++ /dev/null @@ -1,2231 +0,0 @@ -/** - * Provides classes that represent the individual instructions in the IR for a function. - */ - -private import internal.IRInternal -import IRFunction -import IRBlock -import IRVariable -import Operand -private import internal.InstructionImports as Imports -import Imports::EdgeKind -import Imports::IRType -import Imports::MemoryAccessKind -import Imports::Opcode -private import Imports::OperandTag - -/** - * Gets an `Instruction` that is contained in `IRFunction`, and has a location with the specified - * `File` and line number. Used for assigning register names when printing IR. - */ -private Instruction getAnInstructionAtLine(IRFunction irFunc, Language::File file, int line) { - exists(IRConfiguration::IRConfiguration config | - config.shouldEvaluateDebugStringsForFunction(irFunc.getFunction()) - ) and - exists(Language::Location location | - irFunc = result.getEnclosingIRFunction() and - location = result.getLocation() and - file = location.getFile() and - line = location.getStartLine() - ) -} - -/** - * A single instruction in the IR. - */ -class Instruction extends Construction::TStageInstruction { - Instruction() { - // The base `TStageInstruction` type is a superset of the actual instructions appearing in this - // stage. This call lets the stage filter out the ones that are not reused from raw IR. - Construction::hasInstruction(this) - } - - /** Gets a textual representation of this element. */ - final string toString() { result = this.getOpcode().toString() + ": " + this.getAst().toString() } - - /** - * Gets a string showing the result, opcode, and operands of the instruction, equivalent to what - * would be printed by PrintIR.ql. For example: - * - * `mu0_28(int) = Store r0_26, r0_27` - */ - final string getDumpString() { - result = - this.getResultString() + " = " + this.getOperationString() + " " + this.getOperandsString() - } - - private predicate shouldGenerateDumpStrings() { - exists(IRConfiguration::IRConfiguration config | - config.shouldEvaluateDebugStringsForFunction(this.getEnclosingFunction()) - ) - } - - /** - * Gets a string describing the operation of this instruction. This includes - * the opcode and the immediate value, if any. For example: - * - * VariableAddress[x] - */ - final string getOperationString() { - this.shouldGenerateDumpStrings() and - if exists(this.getImmediateString()) - then - result = - this.getOperationPrefix() + this.getOpcode().toString() + "[" + this.getImmediateString() + - "]" - else result = this.getOperationPrefix() + this.getOpcode().toString() - } - - /** - * Gets a string describing the immediate value of this instruction, if any. - */ - string getImmediateString() { none() } - - private string getOperationPrefix() { - this.shouldGenerateDumpStrings() and - if this instanceof SideEffectInstruction then result = "^" else result = "" - } - - private string getResultPrefix() { - this.shouldGenerateDumpStrings() and - if this.getResultIRType() instanceof IRVoidType - then result = "v" - else - if this.hasMemoryResult() - then if this.isResultModeled() then result = "m" else result = "mu" - else result = "r" - } - - /** - * Gets the zero-based index of this instruction within its block. This is - * used by debugging and printing code only. - */ - int getDisplayIndexInBlock() { - this.shouldGenerateDumpStrings() and - exists(IRBlock block | - this = block.getInstruction(result) - or - this = - rank[-result - 1](PhiInstruction phiInstr | - phiInstr = block.getAPhiInstruction() - | - phiInstr order by phiInstr.getUniqueId() - ) - ) - } - - private int getLineRank() { - this.shouldGenerateDumpStrings() and - exists(IRFunction enclosing, Language::File file, int line | - this = - rank[result](Instruction instr | - instr = getAnInstructionAtLine(enclosing, file, line) - | - instr order by instr.getBlock().getDisplayIndex(), instr.getDisplayIndexInBlock() - ) - ) - } - - /** - * Gets a human-readable string that uniquely identifies this instruction - * within the function. This string is used to refer to this instruction when - * printing IR dumps. - * - * Example: `r1_1` - */ - string getResultId() { - this.shouldGenerateDumpStrings() and - result = - this.getResultPrefix() + this.getAst().getLocation().getStartLine() + "_" + this.getLineRank() - } - - /** - * Gets a string describing the result of this instruction, suitable for - * display in IR dumps. This consists of the result ID plus the type of the - * result. - * - * Example: `r1_1(int*)` - */ - final string getResultString() { - this.shouldGenerateDumpStrings() and - result = this.getResultId() + "(" + this.getResultLanguageType().getDumpString() + ")" - } - - /** - * Gets a string describing the operands of this instruction, suitable for - * display in IR dumps. - * - * Example: `func:r3_4, this:r3_5` - */ - string getOperandsString() { - this.shouldGenerateDumpStrings() and - result = - concat(Operand operand | - operand = this.getAnOperand() - | - operand.getDumpString(), ", " order by operand.getDumpSortOrder() - ) - } - - /** - * Gets a string identifier for this function that is unique among all - * instructions in the same function. - * - * This is used for sorting IR output for tests, and is likely to be - * inefficient for any other use. - */ - final string getUniqueId() { result = Construction::getInstructionUniqueId(this) } - - /** - * INTERNAL: Do not use. - * - * Gets two sort keys for this instruction - used to order instructions for printing - * in test outputs. - */ - final predicate hasSortKeys(int key1, int key2) { - Construction::instructionHasSortKeys(this, key1, key2) - } - - /** - * Gets the basic block that contains this instruction. - */ - final IRBlock getBlock() { result.getAnInstruction() = this } - - /** - * Gets the function that contains this instruction. - */ - final Language::Declaration getEnclosingFunction() { - result = this.getEnclosingIRFunction().getFunction() - } - - /** - * Gets the IRFunction object that contains the IR for this instruction. - */ - final IRFunction getEnclosingIRFunction() { - result = Construction::getInstructionEnclosingIRFunction(this) - } - - /** - * Gets the AST that caused this instruction to be generated. - */ - final Language::AST getAst() { result = Construction::getInstructionAst(this) } - - /** - * Gets the location of the source code for this instruction. - */ - final Language::Location getLocation() { result = this.getAst().getLocation() } - - /** - * Gets the `Expr` whose result is computed by this instruction, if any. The `Expr` may be a - * conversion. - */ - final Language::Expr getConvertedResultExpression() { - result = Raw::getInstructionConvertedResultExpression(this) - } - - /** - * Gets the unconverted form of the `Expr` whose result is computed by this instruction, if any. - */ - final Language::Expr getUnconvertedResultExpression() { - result = Raw::getInstructionUnconvertedResultExpression(this) - } - - /** - * Gets the language-specific type of the result produced by this instruction. - * - * Most consumers of the IR should use `getResultIRType()` instead. `getResultIRType()` uses a - * less complex, language-neutral type system in which all semantically equivalent types share the - * same `IRType` instance. For example, in C++, four different `Instruction`s might have three - * different values for `getResultLanguageType()`: `unsigned int`, `char32_t`, and `wchar_t`, - * whereas all four instructions would have the same value for `getResultIRType()`, `uint4`. - */ - final Language::LanguageType getResultLanguageType() { - result = Construction::getInstructionResultType(this) - } - - /** - * Gets the type of the result produced by this instruction. If the instruction does not produce - * a result, its result type will be `IRVoidType`. - */ - cached - final IRType getResultIRType() { result = this.getResultLanguageType().getIRType() } - - /** - * Gets the type of the result produced by this instruction. If the - * instruction does not produce a result, its result type will be `VoidType`. - * - * If `isGLValue()` holds, then the result type of this instruction should be - * thought of as "pointer to `getResultType()`". - */ - final Language::Type getResultType() { - exists(Language::LanguageType resultType | - resultType = this.getResultLanguageType() and - ( - resultType.hasUnspecifiedType(result, _) - or - not resultType.hasUnspecifiedType(_, _) and result instanceof Language::UnknownType - ) - ) - } - - /** - * Holds if the result produced by this instruction is a glvalue. If this - * holds, the result of the instruction represents the address of a location, - * and the type of the location is given by `getResultType()`. If this does - * not hold, the result of the instruction represents a value whose type is - * given by `getResultType()`. - * - * For example, the statement `y = x;` generates the following IR: - * ``` - * r1_0(glval: int) = VariableAddress[x] - * r1_1(int) = Load r1_0, mu0_1 - * r1_2(glval: int) = VariableAddress[y] - * mu1_3(int) = Store r1_2, r1_1 - * ``` - * - * The result of each `VariableAddress` instruction is a glvalue of type - * `int`, representing the address of the corresponding integer variable. The - * result of the `Load` instruction is a prvalue of type `int`, representing - * the integer value loaded from variable `x`. - */ - final predicate isGLValue() { this.getResultLanguageType().hasType(_, true) } - - /** - * Gets the size of the result produced by this instruction, in bytes. If the - * result does not have a known constant size, this predicate does not hold. - * - * If `this.isGLValue()` holds for this instruction, the value of - * `getResultSize()` will always be the size of a pointer. - */ - final int getResultSize() { result = this.getResultLanguageType().getByteSize() } - - /** - * Gets the opcode that specifies the operation performed by this instruction. - */ - pragma[inline] - final Opcode getOpcode() { Construction::getInstructionOpcode(result, this) } - - /** - * Gets all direct uses of the result of this instruction. The result can be - * an `Operand` for which `isDefinitionInexact` holds. - */ - final Operand getAUse() { result.getAnyDef() = this } - - /** - * Gets all of this instruction's operands. - */ - final Operand getAnOperand() { result.getUse() = this } - - /** - * Holds if this instruction produces a memory result. - */ - final predicate hasMemoryResult() { exists(this.getResultMemoryAccess()) } - - /** - * Gets the kind of memory access performed by this instruction's result. - * Holds only for instructions with a memory result. - */ - pragma[inline] - final MemoryAccessKind getResultMemoryAccess() { - result = this.getOpcode().getWriteMemoryAccess() - } - - /** - * Holds if the memory access performed by this instruction's result will not always write to - * every bit in the memory location. This is most commonly used for memory accesses that may or - * may not actually occur depending on runtime state (for example, the write side effect of an - * output parameter that is not written to on all paths), or for accesses where the memory - * location is a conservative estimate of the memory that might actually be accessed at runtime - * (for example, the global side effects of a function call). - */ - pragma[inline] - final predicate hasResultMayMemoryAccess() { this.getOpcode().hasMayWriteMemoryAccess() } - - /** - * Gets the operand that holds the memory address to which this instruction stores its - * result, if any. For example, in `m3 = Store r1, r2`, the result of `getResultAddressOperand()` - * is `r1`. - */ - final AddressOperand getResultAddressOperand() { - this.getResultMemoryAccess().usesAddressOperand() and - result.getUse() = this - } - - /** - * Gets the instruction that holds the exact memory address to which this instruction stores its - * result, if any. For example, in `m3 = Store r1, r2`, the result of `getResultAddressOperand()` - * is the instruction that defines `r1`. - */ - final Instruction getResultAddress() { result = this.getResultAddressOperand().getDef() } - - /** - * Holds if the result of this instruction is precisely modeled in SSA. Always - * holds for a register result. For a memory result, a modeled result is - * connected to its actual uses. An unmodeled result has no uses. - * - * For example: - * ``` - * int x = 1; - * int *p = &x; - * int y = *p; - * ``` - * In non-aliased SSA, `x` will not be modeled because it has its address - * taken. In that case, `isResultModeled()` would not hold for the result of - * the `Store` to `x`. - */ - final predicate isResultModeled() { - // Register results are always in SSA form. - not this.hasMemoryResult() or - Construction::hasModeledMemoryResult(this) - } - - /** - * Holds if this is an instruction with a memory result that represents a - * conflation of more than one memory allocation. - * - * This happens in practice when dereferencing a pointer that cannot be - * tracked back to a single local allocation. Such memory is instead modeled - * as originating on the `AliasedDefinitionInstruction` at the entry of the - * function. - */ - final predicate isResultConflated() { Construction::hasConflatedMemoryResult(this) } - - /** - * Gets the successor of this instruction along the control flow edge - * specified by `kind`. - */ - final Instruction getSuccessor(EdgeKind kind) { - result = Construction::getInstructionSuccessor(this, kind) - } - - /** - * Gets the a _back-edge successor_ of this instruction along the control - * flow edge specified by `kind`. A back edge in the control-flow graph is - * intuitively the edge that goes back around a loop. If all back edges are - * removed from the control-flow graph, it becomes acyclic. - */ - final Instruction getBackEdgeSuccessor(EdgeKind kind) { - // We don't take these edges from - // `Construction::getInstructionBackEdgeSuccessor` since that relation has - // not been treated to remove any loops that might be left over due to - // flaws in the IR construction or back-edge detection. - exists(IRBlock block | - block = this.getBlock() and - this = block.getLastInstruction() and - result = block.getBackEdgeSuccessor(kind).getFirstInstruction() - ) - } - - /** - * Gets all direct successors of this instruction. - */ - final Instruction getASuccessor() { result = this.getSuccessor(_) } - - /** - * Gets a predecessor of this instruction such that the predecessor reaches - * this instruction along the control flow edge specified by `kind`. - */ - final Instruction getPredecessor(EdgeKind kind) { result.getSuccessor(kind) = this } - - /** - * Gets all direct predecessors of this instruction. - */ - final Instruction getAPredecessor() { result = this.getPredecessor(_) } -} - -/** - * An instruction that refers to a variable. - * - * This class is used for any instruction whose operation fundamentally depends on a specific - * variable. For example, it is used for `VariableAddress`, which returns the address of a specific - * variable, and `InitializeParameter`, which returns the value that was passed to the specified - * parameter by the caller. `VariableInstruction` is not used for `Load` or `Store` instructions - * that happen to load from or store to a particular variable; in those cases, the memory location - * being accessed is specified by the `AddressOperand` on the instruction, which may or may not be - * defined by the result of a `VariableAddress` instruction. - */ -class VariableInstruction extends Instruction { - IRVariable var; - - VariableInstruction() { var = Raw::getInstructionVariable(this) } - - override string getImmediateString() { result = var.toString() } - - /** - * Gets the variable that this instruction references. - */ - final IRVariable getIRVariable() { result = var } - - /** - * Gets the AST variable that this instruction's IR variable refers to, if one exists. - */ - final Language::Variable getAstVariable() { result = var.(IRUserVariable).getVariable() } -} - -/** - * An instruction that refers to a field of a class, struct, or union. - * - * This class is used for any instruction whose operation fundamentally depends on a specific - * field. For example, it is used for `FieldAddress`, which computes the address of a specific - * field on an object. `FieldInstruction` is not used for `Load` or `Store` instructions that happen - * to load from or store to a particular field; in those cases, the memory location being accessed - * is specified by the `AddressOperand` on the instruction, which may or may not be defined by the - * result of a `FieldAddress` instruction. - */ -class FieldInstruction extends Instruction { - Language::Field field; - - FieldInstruction() { field = Raw::getInstructionField(this) } - - final override string getImmediateString() { result = field.toString() } - - /** - * Gets the field that this instruction references. - */ - final Language::Field getField() { result = field } -} - -/** - * An instruction that refers to a function. - * - * This class is used for any instruction whose operation fundamentally depends on a specific - * function. For example, it is used for `FunctionAddress`, which returns the address of a specific - * function. `FunctionInstruction` is not used for `Call` instructions that happen to call a - * particular function; in that case, the function being called is specified by the - * `CallTargetOperand` on the instruction, which may or may not be defined by the result of a - * `FunctionAddress` instruction. - */ -class FunctionInstruction extends Instruction { - Language::Function funcSymbol; - - FunctionInstruction() { funcSymbol = Raw::getInstructionFunction(this) } - - final override string getImmediateString() { result = funcSymbol.toString() } - - /** - * Gets the function that this instruction references. - */ - final Language::Function getFunctionSymbol() { result = funcSymbol } -} - -/** - * An instruction whose result is a compile-time constant value. - */ -class ConstantValueInstruction extends Instruction { - string value; - - ConstantValueInstruction() { value = Raw::getInstructionConstantValue(this) } - - final override string getImmediateString() { result = value } - - /** - * Gets the constant value of this instruction's result. - */ - final string getValue() { result = value } -} - -/** - * An instruction that refers to an argument of a `Call` instruction. - * - * This instruction is used for side effects of a `Call` instruction that read or write memory - * pointed to by one of the arguments of the call. - */ -class IndexedInstruction extends Instruction { - int index; - - IndexedInstruction() { index = Raw::getInstructionIndex(this) } - - final override string getImmediateString() { result = index.toString() } - - /** - * Gets the zero-based index of the argument that this instruction references. - */ - final int getIndex() { result = index } -} - -/** - * An instruction representing the entry point to a function. - * - * Each `IRFunction` has exactly one `EnterFunction` instruction. Execution of the function begins - * at this instruction. This instruction has no predecessors. - */ -class EnterFunctionInstruction extends Instruction { - EnterFunctionInstruction() { this.getOpcode() instanceof Opcode::EnterFunction } -} - -/** - * An instruction that returns the address of a variable. - * - * This instruction returns the address of a local variable, parameter, static field, - * namespace-scope variable, or global variable. For the address of a non-static field of a class, - * struct, or union, see `FieldAddressInstruction`. - */ -class VariableAddressInstruction extends VariableInstruction { - VariableAddressInstruction() { this.getOpcode() instanceof Opcode::VariableAddress } -} - -/** - * An instruction that returns the address of a function. - * - * This instruction returns the address of a function, including non-member functions, static member - * functions, and non-static member functions. - * - * The result has an `IRFunctionAddress` type. - */ -class FunctionAddressInstruction extends FunctionInstruction { - FunctionAddressInstruction() { this.getOpcode() instanceof Opcode::FunctionAddress } -} - -/** - * An instruction that returns the address of a "virtual" delete function. - * - * This function, which does not actually exist in the source code, is used to - * delete objects of a class with a virtual destructor. In that case the deacllocation - * function is selected at runtime based on the dynamic type of the object. So this - * function dynamically dispatches to the correct deallocation function. - * It also should pass in the required extra arguments to the deallocation function - * which may differ dynamically depending on the type of the object. - */ -class VirtualDeleteFunctionAddressInstruction extends Instruction { - VirtualDeleteFunctionAddressInstruction() { - this.getOpcode() instanceof Opcode::VirtualDeleteFunctionAddress - } -} - -/** - * An instruction that initializes a parameter of the enclosing function with the value of the - * corresponding argument passed by the caller. - * - * Each parameter of a function will have exactly one `InitializeParameter` instruction that - * initializes that parameter. - */ -class InitializeParameterInstruction extends VariableInstruction { - InitializeParameterInstruction() { this.getOpcode() instanceof Opcode::InitializeParameter } - - /** - * Gets the parameter initialized by this instruction. - */ - final Language::Parameter getParameter() { result = var.(IRUserVariable).getVariable() } - - /** - * Holds if this instruction initializes the parameter with index `index`, or - * if `index` is `-1` and this instruction initializes `this`. - */ - pragma[noinline] - final predicate hasIndex(int index) { - index >= 0 and index = this.getParameter().getIndex() - or - index = -1 and this.getIRVariable() instanceof IRThisVariable - } -} - -/** - * An instruction that initializes all memory that existed before this function was called. - * - * This instruction provides a definition for memory that, because it was actually allocated and - * initialized elsewhere, would not otherwise have a definition in this function. - */ -class InitializeNonLocalInstruction extends Instruction { - InitializeNonLocalInstruction() { this.getOpcode() instanceof Opcode::InitializeNonLocal } -} - -/** - * An instruction that initializes the memory pointed to by a parameter of the enclosing function - * with the value of that memory on entry to the function. - */ -class InitializeIndirectionInstruction extends VariableInstruction { - InitializeIndirectionInstruction() { this.getOpcode() instanceof Opcode::InitializeIndirection } - - /** - * Gets the parameter initialized by this instruction. - */ - final Language::Parameter getParameter() { result = var.(IRUserVariable).getVariable() } - - /** - * Holds if this instruction initializes the memory pointed to by the parameter with - * index `index`, or if `index` is `-1` and this instruction initializes the memory - * pointed to by `this`. - */ - pragma[noinline] - final predicate hasIndex(int index) { - index >= 0 and index = this.getParameter().getIndex() - or - index = -1 and this.getIRVariable() instanceof IRThisVariable - } -} - -/** - * An instruction that initializes the `this` pointer parameter of the enclosing function. - */ -class InitializeThisInstruction extends Instruction { - InitializeThisInstruction() { this.getOpcode() instanceof Opcode::InitializeThis } -} - -/** - * An instruction that computes the address of a non-static field of an object. - */ -class FieldAddressInstruction extends FieldInstruction { - FieldAddressInstruction() { this.getOpcode() instanceof Opcode::FieldAddress } - - /** - * Gets the operand that provides the address of the object containing the field. - */ - final UnaryOperand getObjectAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the address of the object containing the field. - */ - final Instruction getObjectAddress() { result = this.getObjectAddressOperand().getDef() } -} - -/** - * An instruction that computes the address of the first element of a managed array. - * - * This instruction is used for element access to C# arrays. - */ -class ElementsAddressInstruction extends UnaryInstruction { - ElementsAddressInstruction() { this.getOpcode() instanceof Opcode::ElementsAddress } - - /** - * Gets the operand that provides the address of the array object. - */ - final UnaryOperand getArrayObjectAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the address of the array object. - */ - final Instruction getArrayObjectAddress() { - result = this.getArrayObjectAddressOperand().getDef() - } -} - -/** - * An instruction that produces a well-defined but unknown result and has - * unknown side effects, including side effects that are not conservatively - * modeled in the SSA graph. - * - * This type of instruction appears when there is an `ErrorExpr` in the AST, - * meaning that the extractor could not understand the expression and therefore - * produced a partial AST. Queries that give alerts when some action is _not_ - * taken may want to ignore any function that contains an `ErrorInstruction`. - */ -class ErrorInstruction extends Instruction { - ErrorInstruction() { this.getOpcode() instanceof Opcode::Error } -} - -/** - * An instruction that returns an uninitialized value. - * - * This instruction is used to provide an initial definition for a stack variable that does not have - * an initializer, or whose initializer only partially initializes the variable. - */ -class UninitializedInstruction extends VariableInstruction { - UninitializedInstruction() { this.getOpcode() instanceof Opcode::Uninitialized } - - /** - * Gets the variable that is uninitialized. - */ - final Language::Variable getLocalVariable() { result = var.(IRUserVariable).getVariable() } -} - -/** - * An instruction that has no effect. - * - * This instruction is typically inserted to ensure that a particular AST is associated with at - * least one instruction, even when the AST has no semantic effect. - */ -class NoOpInstruction extends Instruction { - NoOpInstruction() { this.getOpcode() instanceof Opcode::NoOp } -} - -/** - * An instruction that returns control to the caller of the function. - * - * This instruction represents the normal (non-exception) return from a function, either from an - * explicit `return` statement or from control flow reaching the end of the function's body. - * - * Each function has exactly one `ReturnInstruction`. Each `return` statement in a function is - * represented as an initialization of the temporary variable that holds the return value, with - * control then flowing to the common `ReturnInstruction` for that function. Exception: A function - * that never returns will not have a `ReturnInstruction`. - * - * The `ReturnInstruction` for a function will have a control-flow successor edge to a block - * containing the `ExitFunction` instruction for that function. - * - * There are two different return instructions: `ReturnValueInstruction`, for returning a value from - * a non-`void`-returning function, and `ReturnVoidInstruction`, for returning from a - * `void`-returning function. - */ -class ReturnInstruction extends Instruction { - ReturnInstruction() { this.getOpcode() instanceof ReturnOpcode } -} - -/** - * An instruction that returns control to the caller of the function, without returning a value. - */ -class ReturnVoidInstruction extends ReturnInstruction { - ReturnVoidInstruction() { this.getOpcode() instanceof Opcode::ReturnVoid } -} - -/** - * An instruction that returns control to the caller of the function, including a return value. - */ -class ReturnValueInstruction extends ReturnInstruction { - ReturnValueInstruction() { this.getOpcode() instanceof Opcode::ReturnValue } - - /** - * Gets the operand that provides the value being returned by the function. - */ - final LoadOperand getReturnValueOperand() { result = this.getAnOperand() } - - /** - * Gets the operand that provides the address of the value being returned by the function. - */ - final AddressOperand getReturnAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the value being returned by the function, if an - * exact definition is available. - */ - final Instruction getReturnValue() { result = this.getReturnValueOperand().getDef() } - - /** - * Gets the instruction whose result provides the address of the value being returned by the function. - */ - final Instruction getReturnAddress() { result = this.getReturnAddressOperand().getDef() } -} - -/** - * An instruction that represents the use of the value pointed to by a parameter of the function - * after the function returns control to its caller. - * - * This instruction does not itself return control to the caller. It merely represents the potential - * for a caller to use the memory pointed to by the parameter sometime after the call returns. This - * is the counterpart to the `InitializeIndirection` instruction, which represents the possibility - * that the caller initialized the memory pointed to by the parameter before the call. - */ -class ReturnIndirectionInstruction extends VariableInstruction { - ReturnIndirectionInstruction() { this.getOpcode() instanceof Opcode::ReturnIndirection } - - /** - * Gets the operand that provides the value of the pointed-to memory. - */ - final SideEffectOperand getSideEffectOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the value of the pointed-to memory, if an exact - * definition is available. - */ - final Instruction getSideEffect() { result = this.getSideEffectOperand().getDef() } - - /** - * Gets the operand that provides the address of the pointed-to memory. - */ - final AddressOperand getSourceAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the address of the pointed-to memory. - */ - final Instruction getSourceAddress() { result = this.getSourceAddressOperand().getDef() } - - /** - * Gets the parameter for which this instruction reads the final pointed-to value within the - * function. - */ - final Language::Parameter getParameter() { result = var.(IRUserVariable).getVariable() } - - /** - * Holds if this instruction is the return indirection for `this`. - */ - final predicate isThisIndirection() { var instanceof IRThisVariable } - - /** - * Holds if this instruction is the return indirection for the parameter with index `index`, or - * if this instruction is the return indirection for `this` and `index` is `-1`. - */ - pragma[noinline] - final predicate hasIndex(int index) { - index >= 0 and index = this.getParameter().getIndex() - or - index = -1 and this.isThisIndirection() - } -} - -/** - * An instruction that returns a copy of its operand. - * - * There are several different copy instructions, depending on the source and destination of the - * copy operation: - * - `CopyValueInstruction` - Copies a register operand to a register result. - * - `LoadInstruction` - Copies a memory operand to a register result. - * - `StoreInstruction` - Copies a register operand to a memory result. - */ -class CopyInstruction extends Instruction { - CopyInstruction() { this.getOpcode() instanceof CopyOpcode } - - /** - * Gets the operand that provides the input value of the copy. - */ - Operand getSourceValueOperand() { none() } - - /** - * Gets the instruction whose result provides the input value of the copy, if an exact definition - * is available. - */ - final Instruction getSourceValue() { result = this.getSourceValueOperand().getDef() } -} - -/** - * An instruction that returns a register result containing a copy of its register operand. - */ -class CopyValueInstruction extends CopyInstruction, UnaryInstruction { - CopyValueInstruction() { this.getOpcode() instanceof Opcode::CopyValue } - - final override UnaryOperand getSourceValueOperand() { result = this.getAnOperand() } -} - -/** - * Gets a string describing the location pointed to by the specified address operand. - */ -private string getAddressOperandDescription(AddressOperand operand) { - result = operand.getDef().(VariableAddressInstruction).getIRVariable().toString() - or - not operand.getDef() instanceof VariableAddressInstruction and - result = "?" -} - -/** - * An instruction that returns a register result containing a copy of its memory operand. - */ -class LoadInstruction extends CopyInstruction { - LoadInstruction() { this.getOpcode() instanceof Opcode::Load } - - final override string getImmediateString() { - result = getAddressOperandDescription(this.getSourceAddressOperand()) - } - - /** - * Gets the operand that provides the address of the value being loaded. - */ - final AddressOperand getSourceAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the address of the value being loaded. - */ - final Instruction getSourceAddress() { result = this.getSourceAddressOperand().getDef() } - - final override LoadOperand getSourceValueOperand() { result = this.getAnOperand() } -} - -/** - * An instruction that returns a memory result containing a copy of its register operand. - */ -class StoreInstruction extends CopyInstruction { - StoreInstruction() { this.getOpcode() instanceof Opcode::Store } - - final override string getImmediateString() { - result = getAddressOperandDescription(this.getDestinationAddressOperand()) - } - - /** - * Gets the operand that provides the address of the location to which the value will be stored. - */ - final AddressOperand getDestinationAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the address of the location to which the value will - * be stored, if an exact definition is available. - */ - final Instruction getDestinationAddress() { - result = this.getDestinationAddressOperand().getDef() - } - - final override StoreValueOperand getSourceValueOperand() { result = this.getAnOperand() } -} - -/** - * An instruction that branches to one of two successor instructions based on the value of a Boolean - * operand. - */ -class ConditionalBranchInstruction extends Instruction { - ConditionalBranchInstruction() { this.getOpcode() instanceof Opcode::ConditionalBranch } - - /** - * Gets the operand that provides the Boolean condition controlling the branch. - */ - final ConditionOperand getConditionOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the Boolean condition controlling the branch. - */ - final Instruction getCondition() { result = this.getConditionOperand().getDef() } - - /** - * Gets the instruction to which control will flow if the condition is true. - */ - final Instruction getTrueSuccessor() { result = this.getSuccessor(EdgeKind::trueEdge()) } - - /** - * Gets the instruction to which control will flow if the condition is false. - */ - final Instruction getFalseSuccessor() { result = this.getSuccessor(EdgeKind::falseEdge()) } -} - -/** - * An instruction representing the exit point of a function. - * - * Each `IRFunction` has exactly one `ExitFunction` instruction, unless the function neither returns - * nor throws an exception. Control flows to the `ExitFunction` instruction from both normal returns - * (`ReturnVoid`, `ReturnValue`) and propagated exceptions (`Unwind`). This instruction has no - * successors. - */ -class ExitFunctionInstruction extends Instruction { - ExitFunctionInstruction() { this.getOpcode() instanceof Opcode::ExitFunction } -} - -/** - * An instruction whose result is a constant value. - */ -class ConstantInstruction extends ConstantValueInstruction { - ConstantInstruction() { this.getOpcode() instanceof Opcode::Constant } -} - -/** - * An instruction whose result is a constant value of integer or Boolean type. - */ -class IntegerConstantInstruction extends ConstantInstruction { - IntegerConstantInstruction() { - exists(IRType resultType | - resultType = this.getResultIRType() and - (resultType instanceof IRIntegerType or resultType instanceof IRBooleanType) - ) - } -} - -/** - * An instruction whose result is a constant value of floating-point type. - */ -class FloatConstantInstruction extends ConstantInstruction { - FloatConstantInstruction() { this.getResultIRType() instanceof IRFloatingPointType } -} - -/** - * An instruction whose result is the address of a string literal. - */ -class StringConstantInstruction extends VariableInstruction { - override IRStringLiteral var; - - final override string getImmediateString() { - result = Language::getStringLiteralText(this.getValue()) - } - - /** - * Gets the string literal whose address is returned by this instruction. - */ - final Language::StringLiteral getValue() { result = var.getLiteral() } -} - -/** - * An instruction whose result is computed from two operands. - */ -class BinaryInstruction extends Instruction { - BinaryInstruction() { this.getOpcode() instanceof BinaryOpcode } - - /** - * Gets the left operand of this binary instruction. - */ - final LeftOperand getLeftOperand() { result = this.getAnOperand() } - - /** - * Gets the right operand of this binary instruction. - */ - final RightOperand getRightOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the value of the left operand of this binary - * instruction. - */ - final Instruction getLeft() { result = this.getLeftOperand().getDef() } - - /** - * Gets the instruction whose result provides the value of the right operand of this binary - * instruction. - */ - final Instruction getRight() { result = this.getRightOperand().getDef() } - - /** - * Holds if this instruction's operands are `op1` and `op2`, in either order. - */ - final predicate hasOperands(Operand op1, Operand op2) { - op1 = this.getLeftOperand() and op2 = this.getRightOperand() - or - op1 = this.getRightOperand() and op2 = this.getLeftOperand() - } -} - -/** - * An instruction that computes the result of an arithmetic operation. - */ -class ArithmeticInstruction extends Instruction { - ArithmeticInstruction() { this.getOpcode() instanceof ArithmeticOpcode } -} - -/** - * An instruction that performs an arithmetic operation on two numeric operands. - */ -class BinaryArithmeticInstruction extends ArithmeticInstruction, BinaryInstruction { } - -/** - * An instruction whose result is computed by performing an arithmetic operation on a single - * numeric operand. - */ -class UnaryArithmeticInstruction extends ArithmeticInstruction, UnaryInstruction { } - -/** - * An instruction that computes the sum of two numeric operands. - * - * Both operands must have the same numeric type, which will also be the result type. The result of - * integer overflow is the infinite-precision result modulo 2^n. Floating-point addition is - * performed according to IEEE-754. - */ -class AddInstruction extends BinaryArithmeticInstruction { - AddInstruction() { this.getOpcode() instanceof Opcode::Add } -} - -/** - * An instruction that computes the difference of two numeric operands. - * - * Both operands must have the same numeric type, which will also be the result type. The result of - * integer overflow is the infinite-precision result modulo 2^n. Floating-point subtraction is performed - * according to IEEE-754. - */ -class SubInstruction extends BinaryArithmeticInstruction { - SubInstruction() { this.getOpcode() instanceof Opcode::Sub } -} - -/** - * An instruction that computes the product of two numeric operands. - * - * Both operands must have the same numeric type, which will also be the result type. The result of - * integer overflow is the infinite-precision result modulo 2^n. Floating-point multiplication is - * performed according to IEEE-754. - */ -class MulInstruction extends BinaryArithmeticInstruction { - MulInstruction() { this.getOpcode() instanceof Opcode::Mul } -} - -/** - * An instruction that computes the quotient of two numeric operands. - * - * Both operands must have the same numeric type, which will also be the result type. The result of - * division by zero or integer overflow is undefined. Floating-point division is performed according - * to IEEE-754. - */ -class DivInstruction extends BinaryArithmeticInstruction { - DivInstruction() { this.getOpcode() instanceof Opcode::Div } -} - -/** - * An instruction that computes the remainder of two integer operands. - * - * Both operands must have the same integer type, which will also be the result type. The result of - * division by zero or integer overflow is undefined. - */ -class RemInstruction extends BinaryArithmeticInstruction { - RemInstruction() { this.getOpcode() instanceof Opcode::Rem } -} - -/** - * An instruction that negates a single numeric operand. - * - * The operand must have a numeric type, which will also be the result type. The result of integer - * negation uses two's complement, and is computed modulo 2^n. The result of floating-point negation - * is performed according to IEEE-754. - */ -class NegateInstruction extends UnaryArithmeticInstruction { - NegateInstruction() { this.getOpcode() instanceof Opcode::Negate } -} - -/** - * An instruction that computes the result of a bitwise operation. - */ -class BitwiseInstruction extends Instruction { - BitwiseInstruction() { this.getOpcode() instanceof BitwiseOpcode } -} - -/** - * An instruction that performs a bitwise operation on two integer operands. - */ -class BinaryBitwiseInstruction extends BitwiseInstruction, BinaryInstruction { } - -/** - * An instruction that performs a bitwise operation on a single integer operand. - */ -class UnaryBitwiseInstruction extends BitwiseInstruction, UnaryInstruction { } - -/** - * An instruction that computes the bitwise "and" of two integer operands. - * - * Both operands must have the same integer type, which will also be the result type. - */ -class BitAndInstruction extends BinaryBitwiseInstruction { - BitAndInstruction() { this.getOpcode() instanceof Opcode::BitAnd } -} - -/** - * An instruction that computes the bitwise "or" of two integer operands. - * - * Both operands must have the same integer type, which will also be the result type. - */ -class BitOrInstruction extends BinaryBitwiseInstruction { - BitOrInstruction() { this.getOpcode() instanceof Opcode::BitOr } -} - -/** - * An instruction that computes the bitwise "xor" of two integer operands. - * - * Both operands must have the same integer type, which will also be the result type. - */ -class BitXorInstruction extends BinaryBitwiseInstruction { - BitXorInstruction() { this.getOpcode() instanceof Opcode::BitXor } -} - -/** - * An instruction that shifts its left operand to the left 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 - * rightmost bits are zero-filled. - */ -class ShiftLeftInstruction extends BinaryBitwiseInstruction { - ShiftLeftInstruction() { this.getOpcode() instanceof Opcode::ShiftLeft } -} - -/** - * 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. If the - * left operand has an unsigned integer type, the leftmost bits are zero-filled. If the left operand - * has a signed integer type, the leftmost bits are filled by duplicating the most significant bit - * of the left operand. - */ -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. - */ -class PointerArithmeticInstruction extends BinaryInstruction { - int elementSize; - - PointerArithmeticInstruction() { - this.getOpcode() instanceof PointerArithmeticOpcode and - elementSize = Raw::getInstructionElementSize(this) - } - - final override string getImmediateString() { result = elementSize.toString() } - - /** - * Gets the size of the elements pointed to by the pointer operands, in bytes. - * - * When adding an integer offset to a pointer (`PointerAddInstruction`) or subtracting an integer - * offset from a pointer (`PointerSubInstruction`), the integer offset is multiplied by the - * element size to compute the actual number of bytes added to or subtracted from the pointer - * address. When computing the integer difference between two pointers (`PointerDiffInstruction`), - * the result is computed by computing the difference between the two pointer byte addresses, then - * dividing that byte count by the element size. - */ - final int getElementSize() { result = elementSize } -} - -/** - * An instruction that adds or subtracts an integer offset from a pointer. - */ -class PointerOffsetInstruction extends PointerArithmeticInstruction { - PointerOffsetInstruction() { this.getOpcode() instanceof PointerOffsetOpcode } -} - -/** - * An instruction that adds an integer offset to a pointer. - * - * The result is the byte address computed by adding the value of the right (integer) operand, - * multiplied by the element size, to the value of the left (pointer) operand. The result of pointer - * overflow is undefined. - */ -class PointerAddInstruction extends PointerOffsetInstruction { - PointerAddInstruction() { this.getOpcode() instanceof Opcode::PointerAdd } -} - -/** - * An instruction that subtracts an integer offset from a pointer. - * - * The result is the byte address computed by subtracting the value of the right (integer) operand, - * multiplied by the element size, from the value of the left (pointer) operand. The result of - * pointer underflow is undefined. - */ -class PointerSubInstruction extends PointerOffsetInstruction { - PointerSubInstruction() { this.getOpcode() instanceof Opcode::PointerSub } -} - -/** - * An instruction that computes the difference between two pointers. - * - * Both operands must have the same pointer type. The result must have an integer type whose size is - * the same as that of the pointer operands. The result is computed by subtracting the byte address - * in the right operand from the byte address in the left operand, and dividing by the element size. - * If the difference in byte addresses is not divisible by the element size, the result is - * undefined. - */ -class PointerDiffInstruction extends PointerArithmeticInstruction { - PointerDiffInstruction() { this.getOpcode() instanceof Opcode::PointerDiff } -} - -/** - * An instruction whose result is computed from a single operand. - */ -class UnaryInstruction extends Instruction { - UnaryInstruction() { this.getOpcode() instanceof UnaryOpcode } - - /** - * Gets the sole operand of this instruction. - */ - final UnaryOperand getUnaryOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the sole operand of this instruction. - */ - final Instruction getUnary() { result = this.getUnaryOperand().getDef() } -} - -/** - * An instruction that converts the value of its operand to a value of a different type. - */ -class ConvertInstruction extends UnaryInstruction { - ConvertInstruction() { this.getOpcode() instanceof Opcode::Convert } -} - -/** - * An instruction that converts the address of a polymorphic object to the address of a different - * subobject of the same polymorphic object, returning a null address if the dynamic type of the - * object is not compatible with the result type. - * - * If the operand holds a null address, the result is a null address. - * - * This instruction is used to represent a C++ `dynamic_cast<>` to a pointer type, or a C# `is` or - * `as` expression. - */ -class CheckedConvertOrNullInstruction extends UnaryInstruction { - CheckedConvertOrNullInstruction() { this.getOpcode() instanceof Opcode::CheckedConvertOrNull } -} - -/** - * An instruction that converts the address of a polymorphic object to the address of a different - * subobject of the same polymorphic object, throwing an exception if the dynamic type of the object - * is not compatible with the result type. - * - * If the operand holds a null address, the result is a null address. - * - * This instruction is used to represent a C++ `dynamic_cast<>` to a reference type, or a C# cast - * expression. - */ -class CheckedConvertOrThrowInstruction extends UnaryInstruction { - CheckedConvertOrThrowInstruction() { this.getOpcode() instanceof Opcode::CheckedConvertOrThrow } -} - -/** - * An instruction that returns the address of the complete object that contains the subobject - * pointed to by its operand. - * - * If the operand holds a null address, the result is a null address. - * - * This instruction is used to represent `dynamic_cast` in C++, which returns the pointer to - * the most-derived object. - */ -class CompleteObjectAddressInstruction extends UnaryInstruction { - CompleteObjectAddressInstruction() { this.getOpcode() instanceof Opcode::CompleteObjectAddress } -} - -/** - * An instruction that converts the address of an object to the address of a different subobject of - * the same object, without any type checking at runtime. - */ -class InheritanceConversionInstruction extends UnaryInstruction { - Language::Class baseClass; - Language::Class derivedClass; - - InheritanceConversionInstruction() { - Raw::getInstructionInheritance(this, baseClass, derivedClass) - } - - final override string getImmediateString() { - result = derivedClass.toString() + " : " + baseClass.toString() - } - - /** - * Gets the `ClassDerivation` for the inheritance relationship between - * the base and derived classes. This predicate does not hold if the - * conversion is to an indirect virtual base class. - */ - final Language::ClassDerivation getDerivation() { - result.getBaseClass() = baseClass and result.getDerivedClass() = derivedClass - } - - /** - * Gets the base class of the conversion. This will be either a direct - * base class of the derived class, or a virtual base class of the - * derived class. - */ - final Language::Class getBaseClass() { result = baseClass } - - /** - * Gets the derived class of the conversion. - */ - final Language::Class getDerivedClass() { result = derivedClass } -} - -/** - * An instruction that converts from the address of a derived class to the address of a base class. - */ -class ConvertToBaseInstruction extends InheritanceConversionInstruction { - ConvertToBaseInstruction() { this.getOpcode() instanceof ConvertToBaseOpcode } -} - -/** - * An instruction that converts from the address of a derived class to the address of a direct - * non-virtual base class. - * - * If the operand holds a null address, the result is a null address. - */ -class ConvertToNonVirtualBaseInstruction extends ConvertToBaseInstruction { - ConvertToNonVirtualBaseInstruction() { - this.getOpcode() instanceof Opcode::ConvertToNonVirtualBase - } -} - -/** - * An instruction that converts from the address of a derived class to the address of a virtual base - * class. - * - * If the operand holds a null address, the result is a null address. - */ -class ConvertToVirtualBaseInstruction extends ConvertToBaseInstruction { - ConvertToVirtualBaseInstruction() { this.getOpcode() instanceof Opcode::ConvertToVirtualBase } -} - -/** - * An instruction that converts from the address of a base class to the address of a direct - * non-virtual derived class. - * - * If the operand holds a null address, the result is a null address. - */ -class ConvertToDerivedInstruction extends InheritanceConversionInstruction { - ConvertToDerivedInstruction() { this.getOpcode() instanceof Opcode::ConvertToDerived } -} - -/** - * An instruction that computes the bitwise complement of its operand. - * - * The operand must have an integer type, which will also be the result type. - */ -class BitComplementInstruction extends UnaryBitwiseInstruction { - BitComplementInstruction() { this.getOpcode() instanceof Opcode::BitComplement } -} - -/** - * An instruction that computes the logical complement of its operand. - * - * The operand must have a Boolean type, which will also be the result type. - */ -class LogicalNotInstruction extends UnaryInstruction { - LogicalNotInstruction() { this.getOpcode() instanceof Opcode::LogicalNot } -} - -/** - * An instruction that compares two numeric operands. - */ -class CompareInstruction extends BinaryInstruction { - CompareInstruction() { this.getOpcode() instanceof CompareOpcode } -} - -/** - * An instruction that returns a `true` result if its operands are equal. - * - * Both operands must have the same numeric or address type. The result must have a Boolean type. - * The result is `true` if `left == right`, and `false` if `left != right` or the two operands are - * unordered. Floating-point comparison is performed according to IEEE-754. - */ -class CompareEQInstruction extends CompareInstruction { - CompareEQInstruction() { this.getOpcode() instanceof Opcode::CompareEQ } -} - -/** - * An instruction that returns a `true` result if its operands are not equal. - * - * Both operands must have the same numeric or address type. The result must have a Boolean type. - * The result is `true` if `left != right` or if the two operands are unordered, and `false` if - * `left == right`. Floating-point comparison is performed according to IEEE-754. - */ -class CompareNEInstruction extends CompareInstruction { - CompareNEInstruction() { this.getOpcode() instanceof Opcode::CompareNE } -} - -/** - * An instruction that does a relative comparison of two values, such as `<` or `>=`. - */ -class RelationalInstruction extends CompareInstruction { - RelationalInstruction() { this.getOpcode() instanceof RelationalOpcode } - - /** - * Gets the operand on the "greater" (or "greater-or-equal") side - * of this relational instruction, that is, the side that is larger - * if the overall instruction evaluates to `true`; for example on - * `x <= 20` this is the `20`, and on `y > 0` it is `y`. - */ - Instruction getGreater() { none() } - - /** - * Gets the operand on the "lesser" (or "lesser-or-equal") side - * of this relational instruction, that is, the side that is smaller - * if the overall instruction evaluates to `true`; for example on - * `x <= 20` this is `x`, and on `y > 0` it is the `0`. - */ - Instruction getLesser() { none() } - - /** - * Holds if this relational instruction is strict (is not an "or-equal" instruction). - */ - predicate isStrict() { none() } -} - -/** - * An instruction that returns a `true` result if its left operand is less than its right operand. - * - * Both operands must have the same numeric or address type. The result must have a Boolean type. - * The result is `true` if the `left < right`, and `false` if `left >= right` or if the two operands - * are unordered. Floating-point comparison is performed according to IEEE-754. - */ -class CompareLTInstruction extends RelationalInstruction { - CompareLTInstruction() { this.getOpcode() instanceof Opcode::CompareLT } - - override Instruction getLesser() { result = this.getLeft() } - - override Instruction getGreater() { result = this.getRight() } - - override predicate isStrict() { any() } -} - -/** - * An instruction that returns a `true` result if its left operand is greater than its right operand. - * - * Both operands must have the same numeric or address type. The result must have a Boolean type. - * The result is `true` if the `left > right`, and `false` if `left <= right` or if the two operands - * are unordered. Floating-point comparison is performed according to IEEE-754. - */ -class CompareGTInstruction extends RelationalInstruction { - CompareGTInstruction() { this.getOpcode() instanceof Opcode::CompareGT } - - override Instruction getLesser() { result = this.getRight() } - - override Instruction getGreater() { result = this.getLeft() } - - override predicate isStrict() { any() } -} - -/** - * An instruction that returns a `true` result if its left operand is less than or equal to its - * right operand. - * - * Both operands must have the same numeric or address type. The result must have a Boolean type. - * The result is `true` if the `left <= right`, and `false` if `left > right` or if the two operands - * are unordered. Floating-point comparison is performed according to IEEE-754. - */ -class CompareLEInstruction extends RelationalInstruction { - CompareLEInstruction() { this.getOpcode() instanceof Opcode::CompareLE } - - override Instruction getLesser() { result = this.getLeft() } - - override Instruction getGreater() { result = this.getRight() } - - override predicate isStrict() { none() } -} - -/** - * An instruction that returns a `true` result if its left operand is greater than or equal to its - * right operand. - * - * Both operands must have the same numeric or address type. The result must have a Boolean type. - * The result is `true` if the `left >= right`, and `false` if `left < right` or if the two operands - * are unordered. Floating-point comparison is performed according to IEEE-754. - */ -class CompareGEInstruction extends RelationalInstruction { - CompareGEInstruction() { this.getOpcode() instanceof Opcode::CompareGE } - - override Instruction getLesser() { result = this.getRight() } - - override Instruction getGreater() { result = this.getLeft() } - - override predicate isStrict() { none() } -} - -/** - * An instruction that branches to one of multiple successor instructions based on the value of an - * integer operand. - * - * This instruction will have zero or more successors whose edge kind is `CaseEdge`, each - * representing the branch that will be taken if the controlling expression is within the range - * specified for that case edge. The range of a case edge must be disjoint from the range of each - * other case edge. - * - * The instruction may optionally have a successor edge whose edge kind is `DefaultEdge`, - * representing the branch that will be taken if the controlling expression is not within the range - * of any case edge. - */ -class SwitchInstruction extends Instruction { - SwitchInstruction() { this.getOpcode() instanceof Opcode::Switch } - - /** Gets the operand that provides the integer value controlling the switch. */ - final ConditionOperand getExpressionOperand() { result = this.getAnOperand() } - - /** Gets the instruction whose result provides the integer value controlling the switch. */ - final Instruction getExpression() { result = this.getExpressionOperand().getDef() } - - /** Gets the successor instructions along the case edges of the switch. */ - final Instruction getACaseSuccessor() { exists(CaseEdge edge | result = this.getSuccessor(edge)) } - - /** Gets the successor instruction along the default edge of the switch, if any. */ - final Instruction getDefaultSuccessor() { result = this.getSuccessor(EdgeKind::defaultEdge()) } -} - -/** - * An instruction that calls a function. - */ -class CallInstruction extends Instruction { - CallInstruction() { this.getOpcode() instanceof Opcode::Call } - - final override string getImmediateString() { - result = this.getStaticCallTarget().toString() - or - not exists(this.getStaticCallTarget()) and result = "?" - } - - /** - * Gets the operand the specifies the target function of the call. - */ - final CallTargetOperand getCallTargetOperand() { result = this.getAnOperand() } - - /** - * Gets the `Instruction` that computes the target function of the call. This is usually a - * `FunctionAddress` instruction, but can also be an arbitrary instruction that produces a - * function pointer. - */ - final Instruction getCallTarget() { result = this.getCallTargetOperand().getDef() } - - /** - * Gets all of the argument operands of the call, including the `this` pointer, if any. - */ - final ArgumentOperand getAnArgumentOperand() { result = this.getAnOperand() } - - /** - * Gets the `Function` that the call targets, if this is statically known. - */ - final Language::Function getStaticCallTarget() { - result = this.getCallTarget().(FunctionAddressInstruction).getFunctionSymbol() - } - - /** - * Gets all of the arguments of the call, including the `this` pointer, if any. - */ - final Instruction getAnArgument() { result = this.getAnArgumentOperand().getDef() } - - /** - * Gets the `this` pointer argument operand of the call, if any. - */ - final ThisArgumentOperand getThisArgumentOperand() { result = this.getAnOperand() } - - /** - * Gets the `this` pointer argument of the call, if any. - */ - final Instruction getThisArgument() { result = this.getThisArgumentOperand().getDef() } - - /** - * Gets the argument operand at the specified index. - */ - pragma[noinline] - final PositionalArgumentOperand getPositionalArgumentOperand(int index) { - result = this.getAnOperand() and - result.getIndex() = index - } - - /** - * Gets the argument at the specified index. - */ - pragma[noinline] - final Instruction getPositionalArgument(int index) { - result = this.getPositionalArgumentOperand(index).getDef() - } - - /** - * Gets the argument operand at the specified index, or `this` if `index` is `-1`. - */ - pragma[noinline] - final ArgumentOperand getArgumentOperand(int index) { - index >= 0 and result = this.getPositionalArgumentOperand(index) - or - index = -1 and result = this.getThisArgumentOperand() - } - - /** - * Gets the argument at the specified index, or `this` if `index` is `-1`. - */ - pragma[noinline] - final Instruction getArgument(int index) { result = this.getArgumentOperand(index).getDef() } - - /** - * Gets the number of arguments of the call, including the `this` pointer, if any. - */ - final int getNumberOfArguments() { result = count(this.getAnArgumentOperand()) } - - /** - * Holds if the result is a side effect for the argument at the specified index, or `this` if - * `index` is `-1`. - * - * This helper predicate makes it easy to join on both of these columns at once, avoiding - * pathological join orders in case the argument index should get joined first. - */ - pragma[noinline] - final SideEffectInstruction getAParameterSideEffect(int index) { - this = result.getPrimaryInstruction() and - index = result.(IndexedInstruction).getIndex() - } -} - -/** - * An instruction representing a side effect of a function call. - */ -class SideEffectInstruction extends Instruction { - SideEffectInstruction() { this.getOpcode() instanceof SideEffectOpcode } - - /** - * Gets the instruction whose execution causes this side effect. - */ - final Instruction getPrimaryInstruction() { - result = Construction::getPrimaryInstructionForSideEffect(this) - } -} - -/** - * An instruction representing the side effect of a function call on any memory that might be - * accessed by that call. - */ -class CallSideEffectInstruction extends SideEffectInstruction { - CallSideEffectInstruction() { this.getOpcode() instanceof Opcode::CallSideEffect } -} - -/** - * An instruction representing the side effect of a function call on any memory - * that might be read by that call. - * - * This instruction is emitted instead of `CallSideEffectInstruction` when it is certain that the - * call target cannot write to escaped memory. - */ -class CallReadSideEffectInstruction extends SideEffectInstruction { - CallReadSideEffectInstruction() { this.getOpcode() instanceof Opcode::CallReadSideEffect } -} - -/** - * An instruction representing a read side effect of a function call on a - * specific parameter. - */ -class ReadSideEffectInstruction extends SideEffectInstruction, IndexedInstruction { - ReadSideEffectInstruction() { this.getOpcode() instanceof ReadSideEffectOpcode } - - /** Gets the operand for the value that will be read from this instruction, if known. */ - final SideEffectOperand getSideEffectOperand() { result = this.getAnOperand() } - - /** Gets the value that will be read from this instruction, if known. */ - final Instruction getSideEffect() { result = this.getSideEffectOperand().getDef() } - - /** Gets the operand for the address from which this instruction may read. */ - final AddressOperand getArgumentOperand() { result = this.getAnOperand() } - - /** Gets the address from which this instruction may read. */ - final Instruction getArgumentDef() { result = this.getArgumentOperand().getDef() } -} - -/** - * An instruction representing the read of an indirect parameter within a function call. - */ -class IndirectReadSideEffectInstruction extends ReadSideEffectInstruction { - IndirectReadSideEffectInstruction() { this.getOpcode() instanceof Opcode::IndirectReadSideEffect } -} - -/** - * An instruction representing the read of an indirect buffer parameter within a function call. - */ -class BufferReadSideEffectInstruction extends ReadSideEffectInstruction { - BufferReadSideEffectInstruction() { this.getOpcode() instanceof Opcode::BufferReadSideEffect } -} - -/** - * An instruction representing the read of an indirect buffer parameter within a function call. - */ -class SizedBufferReadSideEffectInstruction extends ReadSideEffectInstruction { - SizedBufferReadSideEffectInstruction() { - this.getOpcode() instanceof Opcode::SizedBufferReadSideEffect - } - - /** - * Gets the operand that holds the number of bytes read from the buffer. - */ - final BufferSizeOperand getBufferSizeOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the number of bytes read from the buffer. - */ - final Instruction getBufferSize() { result = this.getBufferSizeOperand().getDef() } -} - -/** - * An instruction representing a write side effect of a function call on a - * specific parameter. - */ -class WriteSideEffectInstruction extends SideEffectInstruction, IndexedInstruction { - WriteSideEffectInstruction() { this.getOpcode() instanceof WriteSideEffectOpcode } - - /** - * Get the operand that holds the address of the memory to be written. - */ - final AddressOperand getDestinationAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the address of the memory to be written. - */ - Instruction getDestinationAddress() { result = this.getDestinationAddressOperand().getDef() } -} - -/** - * An instruction representing the write of an indirect parameter within a function call. - */ -class IndirectMustWriteSideEffectInstruction extends WriteSideEffectInstruction { - IndirectMustWriteSideEffectInstruction() { - this.getOpcode() instanceof Opcode::IndirectMustWriteSideEffect - } -} - -/** - * An instruction representing the write of an indirect buffer parameter within a function call. The - * entire buffer is overwritten. - */ -class BufferMustWriteSideEffectInstruction extends WriteSideEffectInstruction { - BufferMustWriteSideEffectInstruction() { - this.getOpcode() instanceof Opcode::BufferMustWriteSideEffect - } -} - -/** - * An instruction representing the write of an indirect buffer parameter within a function call. The - * entire buffer is overwritten. - */ -class SizedBufferMustWriteSideEffectInstruction extends WriteSideEffectInstruction { - SizedBufferMustWriteSideEffectInstruction() { - this.getOpcode() instanceof Opcode::SizedBufferMustWriteSideEffect - } - - /** - * Gets the operand that holds the number of bytes written to the buffer. - */ - final BufferSizeOperand getBufferSizeOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the number of bytes written to the buffer. - */ - final Instruction getBufferSize() { result = this.getBufferSizeOperand().getDef() } -} - -/** - * An instruction representing the potential write of an indirect parameter within a function call. - * - * Unlike `IndirectWriteSideEffectInstruction`, the location might not be completely overwritten. - * written. - */ -class IndirectMayWriteSideEffectInstruction extends WriteSideEffectInstruction { - IndirectMayWriteSideEffectInstruction() { - this.getOpcode() instanceof Opcode::IndirectMayWriteSideEffect - } -} - -/** - * An instruction representing the write of an indirect buffer parameter within a function call. - * - * Unlike `BufferWriteSideEffectInstruction`, the buffer might not be completely overwritten. - */ -class BufferMayWriteSideEffectInstruction extends WriteSideEffectInstruction { - BufferMayWriteSideEffectInstruction() { - this.getOpcode() instanceof Opcode::BufferMayWriteSideEffect - } -} - -/** - * An instruction representing the write of an indirect buffer parameter within a function call. - * - * Unlike `BufferWriteSideEffectInstruction`, the buffer might not be completely overwritten. - */ -class SizedBufferMayWriteSideEffectInstruction extends WriteSideEffectInstruction { - SizedBufferMayWriteSideEffectInstruction() { - this.getOpcode() instanceof Opcode::SizedBufferMayWriteSideEffect - } - - /** - * Gets the operand that holds the number of bytes written to the buffer. - */ - final BufferSizeOperand getBufferSizeOperand() { result = this.getAnOperand() } - - /** - * Gets the instruction whose result provides the number of bytes written to the buffer. - */ - final Instruction getBufferSize() { result = this.getBufferSizeOperand().getDef() } -} - -/** - * An instruction representing the initial value of newly allocated memory, such as the result of a - * call to `malloc`. - */ -class InitializeDynamicAllocationInstruction extends SideEffectInstruction { - InitializeDynamicAllocationInstruction() { - this.getOpcode() instanceof Opcode::InitializeDynamicAllocation - } - - /** - * Gets the operand that represents the address of the allocation this instruction is initializing. - */ - final AddressOperand getAllocationAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the address for the allocation this instruction is initializing. - */ - final Instruction getAllocationAddress() { result = this.getAllocationAddressOperand().getDef() } -} - -/** - * An instruction representing a GNU or MSVC inline assembly statement. - */ -class InlineAsmInstruction extends Instruction { - InlineAsmInstruction() { this.getOpcode() instanceof Opcode::InlineAsm } -} - -/** - * An instruction that throws an exception. - */ -class ThrowInstruction extends Instruction { - ThrowInstruction() { this.getOpcode() instanceof ThrowOpcode } -} - -/** - * An instruction that throws a new exception. - */ -class ThrowValueInstruction extends ThrowInstruction { - ThrowValueInstruction() { this.getOpcode() instanceof Opcode::ThrowValue } - - /** - * Gets the address operand of the exception thrown by this instruction. - */ - final AddressOperand getExceptionAddressOperand() { result = this.getAnOperand() } - - /** - * Gets the address of the exception thrown by this instruction. - */ - final Instruction getExceptionAddress() { result = this.getExceptionAddressOperand().getDef() } - - /** - * Gets the operand for the exception thrown by this instruction. - */ - final LoadOperand getExceptionOperand() { result = this.getAnOperand() } - - /** - * Gets the exception thrown by this instruction. - */ - final Instruction getException() { result = this.getExceptionOperand().getDef() } -} - -/** - * An instruction that re-throws the current exception. - */ -class ReThrowInstruction extends ThrowInstruction { - ReThrowInstruction() { this.getOpcode() instanceof Opcode::ReThrow } -} - -/** - * An instruction that exits the current function by propagating an exception. - */ -class UnwindInstruction extends Instruction { - UnwindInstruction() { this.getOpcode() instanceof Opcode::Unwind } -} - -/** - * An instruction that starts a `catch` handler. - */ -class CatchInstruction extends Instruction { - CatchInstruction() { this.getOpcode() instanceof CatchOpcode } -} - -/** - * An instruction that catches an exception of a specific type. - */ -class CatchByTypeInstruction extends CatchInstruction { - Language::LanguageType exceptionType; - - CatchByTypeInstruction() { - this.getOpcode() instanceof Opcode::CatchByType and - exceptionType = Raw::getInstructionExceptionType(this) - } - - final override string getImmediateString() { result = exceptionType.toString() } - - /** - * Gets the type of exception to be caught. - */ - final Language::LanguageType getExceptionType() { result = exceptionType } -} - -/** - * An instruction that catches any exception. - */ -class CatchAnyInstruction extends CatchInstruction { - CatchAnyInstruction() { this.getOpcode() instanceof Opcode::CatchAny } -} - -/** - * An instruction that initializes all escaped memory. - */ -class AliasedDefinitionInstruction extends Instruction { - AliasedDefinitionInstruction() { this.getOpcode() instanceof Opcode::AliasedDefinition } -} - -/** - * An instruction that consumes all escaped memory on exit from the function. - */ -class AliasedUseInstruction extends Instruction { - AliasedUseInstruction() { this.getOpcode() instanceof Opcode::AliasedUse } -} - -/** - * An instruction representing the choice of one of multiple input values based on control flow. - * - * A `PhiInstruction` is inserted at the beginning of a block whenever two different definitions of - * the same variable reach that block. The `PhiInstruction` will have one operand corresponding to - * each control flow predecessor of the block, with that operand representing the version of the - * variable that flows from that predecessor. The result value of the `PhiInstruction` will be - * a copy of whichever operand corresponds to the actual predecessor that entered the block at - * runtime. - */ -class PhiInstruction extends Instruction { - PhiInstruction() { this.getOpcode() instanceof Opcode::Phi } - - /** - * Gets all of the instruction's `PhiInputOperand`s, representing the values that flow from each predecessor block. - */ - final PhiInputOperand getAnInputOperand() { result = this.getAnOperand() } - - /** - * Gets an instruction that defines the input to one of the operands of this - * instruction. It's possible for more than one operand to have the same - * defining instruction, so this predicate will have the same number of - * results as `getAnInputOperand()` or fewer. - */ - pragma[noinline] - final Instruction getAnInput() { result = this.getAnInputOperand().getDef() } - - /** - * Gets the input operand representing the value that flows from the specified predecessor block. - */ - final PhiInputOperand getInputOperand(IRBlock predecessorBlock) { - result = this.getAnOperand() and - result.getPredecessorBlock() = predecessorBlock - } -} - -/** - * An instruction representing the effect that a write to a memory may have on potential aliases of - * that memory. - * - * A `ChiInstruction` is inserted immediately after an instruction that writes to memory. The - * `ChiInstruction` has two operands. The first operand, given by `getTotalOperand()`, represents - * the previous state of all of the memory that might be aliased by the memory write. The second - * operand, given by `getPartialOperand()`, represents the memory that was actually modified by the - * memory write. The result of the `ChiInstruction` represents the same memory as - * `getTotalOperand()`, updated to include the changes due to the value that was actually stored by - * the memory write. - * - * As an example, suppose that variable `p` and `q` are pointers that may or may not point to the - * same memory: - * ``` - * *p = 5; - * x = *q; - * ``` - * - * The IR would look like: - * ``` - * r1_1 = VariableAddress[p] - * r1_2 = Load r1_1, m0_0 // Load the value of `p` - * r1_3 = Constant[5] - * m1_4 = Store r1_2, r1_3 // Store to `*p` - * m1_5 = ^Chi m0_1, m1_4 // Side effect of the previous Store on aliased memory - * r1_6 = VariableAddress[x] - * r1_7 = VariableAddress[q] - * r1_8 = Load r1_7, m0_2 // Load the value of `q` - * r1_9 = Load r1_8, m1_5 // Load the value of `*q` - * m1_10 = Store r1_6, r1_9 // Store to x - * ``` - * - * Note the `Chi` instruction after the store to `*p`. The indicates that the previous contents of - * aliased memory (`m0_1`) are merged with the new value written by the store (`m1_4`), producing a - * new version of aliased memory (`m1_5`). On the subsequent load from `*q`, the source operand of - * `*q` is `m1_5`, indicating that the store to `*p` may (or may not) have updated the memory - * pointed to by `q`. - * - * For more information about how `Chi` instructions are used to model memory side effects, see - * https://link.springer.com/content/pdf/10.1007%2F3-540-61053-7_66.pdf. - */ -class ChiInstruction extends Instruction { - ChiInstruction() { this.getOpcode() instanceof Opcode::Chi } - - /** - * Gets the operand that represents the previous state of all memory that might be aliased by the - * memory write. - */ - final ChiTotalOperand getTotalOperand() { result = this.getAnOperand() } - - /** - * Gets the operand that represents the previous state of all memory that might be aliased by the - * memory write. - */ - final Instruction getTotal() { result = this.getTotalOperand().getDef() } - - /** - * Gets the operand that represents the new value written by the memory write. - */ - final ChiPartialOperand getPartialOperand() { result = this.getAnOperand() } - - /** - * Gets the operand that represents the new value written by the memory write. - */ - final Instruction getPartial() { result = this.getPartialOperand().getDef() } - - /** - * Holds if the `ChiPartialOperand` totally, but not exactly, overlaps with the `ChiTotalOperand`. - * This means that the `ChiPartialOperand` will not override the entire memory associated with the - * `ChiTotalOperand`. - */ - final predicate isPartialUpdate() { Construction::chiOnlyPartiallyUpdatesLocation(this) } -} - -/** - * An instruction representing unreachable code. - * - * This instruction is inserted in place of the original target instruction of a `ConditionalBranch` - * or `Switch` instruction where that particular edge is infeasible. - */ -class UnreachedInstruction extends Instruction { - UnreachedInstruction() { this.getOpcode() instanceof Opcode::Unreached } -} - -/** - * An instruction representing a built-in operation. - * - * This is used to represent a variety of intrinsic operations provided by the compiler - * implementation, such as vector arithmetic. - */ -class BuiltInOperationInstruction extends Instruction { - Language::BuiltInOperation operation; - - BuiltInOperationInstruction() { - this.getOpcode() instanceof BuiltInOperationOpcode and - operation = Raw::getInstructionBuiltInOperation(this) - } - - /** - * Gets the language-specific `BuiltInOperation` object that specifies the operation that is - * performed by this instruction. - */ - final Language::BuiltInOperation getBuiltInOperation() { result = operation } -} - -/** - * An instruction representing a built-in operation that does not have a specific opcode. The - * actual operation is specified by the `getBuiltInOperation()` predicate. - */ -class BuiltInInstruction extends BuiltInOperationInstruction { - BuiltInInstruction() { this.getOpcode() instanceof Opcode::BuiltIn } - - final override string getImmediateString() { result = this.getBuiltInOperation().toString() } -} - -/** - * An instruction that returns a `va_list` to access the arguments passed to the `...` parameter. - * - * The operand specifies the address of the `IREllipsisVariable` used to represent the `...` - * parameter. The result is a `va_list` that initially refers to the first argument that was passed - * to the `...` parameter. - */ -class VarArgsStartInstruction extends UnaryInstruction { - VarArgsStartInstruction() { this.getOpcode() instanceof Opcode::VarArgsStart } -} - -/** - * An instruction that cleans up a `va_list` after it is no longer in use. - * - * The operand specifies the address of the `va_list` to clean up. This instruction does not return - * a result. - */ -class VarArgsEndInstruction extends UnaryInstruction { - VarArgsEndInstruction() { this.getOpcode() instanceof Opcode::VarArgsEnd } -} - -/** - * An instruction that returns the address of the argument currently pointed to by a `va_list`. - * - * The operand is the `va_list` that points to the argument. The result is the address of the - * argument. - */ -class VarArgInstruction extends UnaryInstruction { - VarArgInstruction() { this.getOpcode() instanceof Opcode::VarArg } -} - -/** - * An instruction that modifies a `va_list` to point to the next argument that was passed to the - * `...` parameter. - * - * The operand is the current `va_list`. The result is an updated `va_list` that points to the next - * argument of the `...` parameter. - */ -class NextVarArgInstruction extends UnaryInstruction { - NextVarArgInstruction() { this.getOpcode() instanceof Opcode::NextVarArg } -} - -/** - * An instruction that allocates a new object on the managed heap. - * - * This instruction is used to represent the allocation of a new object in C# using the `new` - * expression. This instruction does not invoke a constructor for the object. Instead, there will be - * a subsequent `Call` instruction to invoke the appropriate constructor directory, passing the - * result of the `NewObj` as the `this` argument. - * - * The result is the address of the newly allocated object. - */ -class NewObjInstruction extends Instruction { - NewObjInstruction() { this.getOpcode() instanceof Opcode::NewObj } -} diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Operand.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Operand.qll deleted file mode 100644 index c1743acdbae..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Operand.qll +++ /dev/null @@ -1,499 +0,0 @@ -/** - * Provides classes that represent the input values of IR instructions. - */ - -private import internal.IRInternal -private import Instruction -private import IRBlock -private import internal.OperandImports as Imports -private import Imports::MemoryAccessKind -private import Imports::IRType -private import Imports::Overlap -private import Imports::OperandTag -private import Imports::TOperand -private import internal.OperandInternal - -/** - * An operand of an `Instruction` in this stage of the IR. Implemented as a union of the branches - * of `TOperand` that are used in this stage. - */ -private class TStageOperand = - TRegisterOperand or TNonSsaMemoryOperand or TPhiOperand or TChiOperand; - -/** - * A known location. Testing `loc instanceof KnownLocation` will account for non existing locations, as - * opposed to testing `not loc isntanceof UnknownLocation` - */ -private class KnownLocation extends Language::Location { - KnownLocation() { not this instanceof Language::UnknownLocation } -} - -/** - * An operand of an `Instruction`. The operand represents a use of the result of one instruction - * (the defining instruction) in another instruction (the use instruction) - */ -class Operand extends TStageOperand { - cached - Operand() { - // Ensure that the operand does not refer to instructions from earlier stages that are unreachable here - exists(Instruction use, Instruction def | this = registerOperand(use, _, def)) - or - exists(Instruction use | this = nonSsaMemoryOperand(use, _)) - or - exists(Instruction use, Instruction def, IRBlock predecessorBlock | - this = phiOperand(use, def, predecessorBlock, _) or - this = reusedPhiOperand(use, def, predecessorBlock, _) - ) - or - this = chiOperand(_, _) - } - - /** Gets a textual representation of this element. */ - string toString() { result = "Operand" } - - /** - * Gets the location of the source code for this operand. - * By default this is where the operand is used, but some subclasses may override this - * using `getAnyDef()` if it makes more sense. - */ - Language::Location getLocation() { result = this.getUse().getLocation() } - - /** - * Gets the function that contains this operand. - */ - final IRFunction getEnclosingIRFunction() { result = this.getUse().getEnclosingIRFunction() } - - /** - * Gets the `Instruction` that consumes this operand. - */ - Instruction getUse() { none() } - - /** - * Gets the `Instruction` whose result is the value of the operand. Unlike - * `getDef`, this also has a result when `isDefinitionInexact` holds, which - * means that the resulting instruction may only _partially_ or _potentially_ - * be the value of this operand. - */ - Instruction getAnyDef() { none() } - - /** - * Gets the `Instruction` whose result is the value of the operand. Unlike - * `getAnyDef`, this also has no result when `isDefinitionInexact` holds, - * which means that the resulting instruction must always be exactly the be - * the value of this operand. - */ - final Instruction getDef() { - result = this.getAnyDef() and - this.getDefinitionOverlap() instanceof MustExactlyOverlap - } - - /** - * Gets the overlap relationship between the operand's definition and its use. - */ - Overlap getDefinitionOverlap() { none() } - - /** - * Holds if the result of the definition instruction does not exactly overlap this use. - */ - final predicate isDefinitionInexact() { - not this.getDefinitionOverlap() instanceof MustExactlyOverlap - } - - /** - * Gets a prefix to use when dumping the operand in an operand list. - */ - string getDumpLabel() { result = "" } - - /** - * Gets a string that uniquely identifies this operand on its use instruction. - */ - string getDumpId() { result = "" } - - /** - * Gets a string describing this operand, suitable for display in IR dumps. This consists of the - * result ID of the instruction consumed by the operand, plus a label identifying the operand - * kind. - * - * For example: `this:r3_5` - */ - final string getDumpString() { - result = this.getDumpLabel() + this.getInexactSpecifier() + this.getDefinitionId() - } - - /** - * Gets a string containing the identifier of the definition of this use, or `m?` if the - * definition is not modeled in SSA. - */ - private string getDefinitionId() { - result = this.getAnyDef().getResultId() - or - not exists(this.getAnyDef()) and result = "m?" - } - - /** - * Gets a string prefix to prepend to the operand's definition ID in an IR dump, specifying whether the operand is - * an exact or inexact use of its definition. For an inexact use, the prefix is "~". For an exact use, the prefix is - * the empty string. - */ - private string getInexactSpecifier() { - if this.isDefinitionInexact() then result = "~" else result = "" - } - - /** - * Get the order in which the operand should be sorted in the operand list. - */ - int getDumpSortOrder() { result = -1 } - - /** - * Gets the type of the value consumed by this operand. This is usually the same as the - * result type of the definition instruction consumed by this operand. For register operands, - * this is always the case. For some memory operands, the operand type may be different from - * the definition type, such as in the case of a partial read or a read from a pointer that - * has been cast to a different type. - */ - Language::LanguageType getLanguageType() { result = this.getAnyDef().getResultLanguageType() } - - /** - * Gets the language-neutral type of the value consumed by this operand. This is usually the same - * as the result type of the definition instruction consumed by this operand. For register - * operands, this is always the case. For some memory operands, the operand type may be different - * from the definition type, such as in the case of a partial read or a read from a pointer that - * has been cast to a different type. - */ - final IRType getIRType() { result = this.getLanguageType().getIRType() } - - /** - * Gets the type of the value consumed by this operand. This is usually the same as the - * result type of the definition instruction consumed by this operand. For register operands, - * this is always the case. For some memory operands, the operand type may be different from - * the definition type, such as in the case of a partial read or a read from a pointer that - * has been cast to a different type. - */ - final Language::Type getType() { this.getLanguageType().hasType(result, _) } - - /** - * Holds if the value consumed by this operand is a glvalue. If this - * holds, the value of the operand represents the address of a location, - * and the type of the location is given by `getType()`. If this does - * not hold, the value of the operand represents a value whose type is - * given by `getType()`. - */ - final predicate isGLValue() { this.getLanguageType().hasType(_, true) } - - /** - * Gets the size of the value consumed by this operand, in bytes. If the operand does not have - * a known constant size, this predicate does not hold. - */ - final int getSize() { result = this.getLanguageType().getByteSize() } -} - -/** - * An operand that consumes a memory result (e.g. the `LoadOperand` on a `Load` instruction). - */ -class MemoryOperand extends Operand { - cached - MemoryOperand() { - this instanceof TNonSsaMemoryOperand or - this instanceof TPhiOperand or - this instanceof TChiOperand - } - - /** - * Gets the kind of memory access performed by the operand. - */ - MemoryAccessKind getMemoryAccess() { result = this.getUse().getOpcode().getReadMemoryAccess() } - - /** - * Holds if the memory access performed by this operand will not always read from every bit in the - * memory location. This is most commonly used for memory accesses that may or may not actually - * occur depending on runtime state (for example, the write side effect of an output parameter - * that is not written to on all paths), or for accesses where the memory location is a - * conservative estimate of the memory that might actually be accessed at runtime (for example, - * the global side effects of a function call). - */ - predicate hasMayReadMemoryAccess() { this.getUse().getOpcode().hasMayReadMemoryAccess() } - - /** - * Returns the operand that holds the memory address from which the current operand loads its - * value, if any. For example, in `r3 = Load r1, m2`, the result of `getAddressOperand()` for `m2` - * is `r1`. - */ - final AddressOperand getAddressOperand() { - this.getMemoryAccess().usesAddressOperand() and - result.getUse() = this.getUse() - } -} - -/** - * An operand that is not an operand of a `PhiInstruction`. - */ -class NonPhiOperand extends Operand { - Instruction useInstr; - OperandTag tag; - - NonPhiOperand() { - this = registerOperand(useInstr, tag, _) or - this = nonSsaMemoryOperand(useInstr, tag) or - this = chiOperand(useInstr, tag) - } - - final override Instruction getUse() { result = useInstr } - - final override string getDumpLabel() { result = tag.getLabel() } - - final override string getDumpId() { result = tag.getId() } - - final override int getDumpSortOrder() { result = tag.getSortOrder() } - - /** - * Gets the `OperandTag` that specifies how this operand is used by its `Instruction`. - */ - final OperandTag getOperandTag() { result = tag } -} - -/** - * An operand that consumes a register (non-memory) result. - */ -class RegisterOperand extends NonPhiOperand, TRegisterOperand { - override RegisterOperandTag tag; - Instruction defInstr; - - cached - RegisterOperand() { this = registerOperand(useInstr, tag, defInstr) } - - final override string toString() { result = tag.toString() } - - // most `RegisterOperands` have a more meaningful location at the definition - // the only exception are specific cases of `ThisArgumentOperand` - override Language::Location getLocation() { result = this.getAnyDef().getLocation() } - - final override Instruction getAnyDef() { result = defInstr } - - final override Overlap getDefinitionOverlap() { - // All register results overlap exactly with their uses. - result instanceof MustExactlyOverlap - } -} - -/** - * A memory operand other than the operand of a `Phi` instruction. - */ -class NonPhiMemoryOperand extends NonPhiOperand, MemoryOperand, TNonPhiMemoryOperand { - override MemoryOperandTag tag; - - cached - NonPhiMemoryOperand() { - this = nonSsaMemoryOperand(useInstr, tag) - or - this = chiOperand(useInstr, tag) - } - - final override string toString() { result = tag.toString() } - - final override Instruction getAnyDef() { - result = unique(Instruction defInstr | this.hasDefinition(defInstr, _)) - } - - final override Overlap getDefinitionOverlap() { this.hasDefinition(_, result) } - - pragma[noinline] - private predicate hasDefinition(Instruction defInstr, Overlap overlap) { - defInstr = Construction::getMemoryOperandDefinition(useInstr, tag, overlap) and - not Construction::isInCycle(useInstr) and - strictcount(Construction::getMemoryOperandDefinition(useInstr, tag, _)) = 1 - } - - /** - * Holds if the operand totally overlaps with its definition and consumes the - * bit range `[startBitOffset, endBitOffset)` relative to the start address of the definition. - */ - predicate getUsedInterval(int startBitOffset, int endBitOffset) { - Construction::getUsedInterval(this, startBitOffset, endBitOffset) - } -} - -/** - * A memory operand whose type may be different from the type of the result of its definition. - */ -class TypedOperand extends NonPhiMemoryOperand { - override TypedOperandTag tag; - - final override Language::LanguageType getLanguageType() { - result = Construction::getInstructionOperandType(useInstr, tag) - } -} - -/** - * The address operand of an instruction that loads or stores a value from - * memory (e.g. `Load`, `Store`). - */ -class AddressOperand extends RegisterOperand { - override AddressOperandTag tag; -} - -/** - * The buffer size operand of an instruction that represents a read or write of - * a buffer. - */ -class BufferSizeOperand extends RegisterOperand { - override BufferSizeOperandTag tag; -} - -/** - * The source value operand of an instruction that loads a value from memory (e.g. `Load`, - * `ReturnValue`, `ThrowValue`). - */ -class LoadOperand extends TypedOperand { - override LoadOperandTag tag; -} - -/** - * The source value operand of a `Store` instruction. - */ -class StoreValueOperand extends RegisterOperand { - override StoreValueOperandTag tag; -} - -/** - * The sole operand of a unary instruction (e.g. `Convert`, `Negate`, `Copy`). - */ -class UnaryOperand extends RegisterOperand { - override UnaryOperandTag tag; -} - -/** - * The left operand of a binary instruction (e.g. `Add`, `CompareEQ`). - */ -class LeftOperand extends RegisterOperand { - override LeftOperandTag tag; -} - -/** - * The right operand of a binary instruction (e.g. `Add`, `CompareEQ`). - */ -class RightOperand extends RegisterOperand { - override RightOperandTag tag; -} - -/** - * The condition operand of a `ConditionalBranch` or `Switch` instruction. - */ -class ConditionOperand extends RegisterOperand { - override ConditionOperandTag tag; -} - -/** - * The operand representing the target function of an `Call` instruction. - */ -class CallTargetOperand extends RegisterOperand { - override CallTargetOperandTag tag; -} - -/** - * An operand representing an argument to a function call. This includes both - * positional arguments (represented by `PositionalArgumentOperand`) and the - * implicit `this` argument, if any (represented by `ThisArgumentOperand`). - */ -class ArgumentOperand extends RegisterOperand { - override ArgumentOperandTag tag; - - /** Gets the `CallInstruction` for which this is an argument. */ - CallInstruction getCall() { result.getAnArgumentOperand() = this } -} - -/** - * An operand representing the implicit `this` argument to a member function - * call. - */ -class ThisArgumentOperand extends ArgumentOperand { - override ThisArgumentOperandTag tag; - - // in most cases the def location makes more sense, but in some corner cases it - // has an unknown location: in those cases we fall back to the use location - override Language::Location getLocation() { - if this.getAnyDef().getLocation() instanceof KnownLocation - then result = this.getAnyDef().getLocation() - else result = this.getUse().getLocation() - } -} - -/** - * An operand representing an argument to a function call. - */ -class PositionalArgumentOperand extends ArgumentOperand { - override PositionalArgumentOperandTag tag; - - /** - * Gets the zero-based index of the argument. - */ - final int getIndex() { result = tag.getArgIndex() } -} - -/** - * An operand representing memory read as a side effect of evaluating another instruction. - */ -class SideEffectOperand extends TypedOperand { - override SideEffectOperandTag tag; -} - -/** - * An operand of a `PhiInstruction`. - */ -class PhiInputOperand extends MemoryOperand, TPhiOperand { - PhiInstruction useInstr; - Instruction defInstr; - IRBlock predecessorBlock; - Overlap overlap; - - cached - PhiInputOperand() { - this = phiOperand(useInstr, defInstr, predecessorBlock, overlap) - or - this = reusedPhiOperand(useInstr, defInstr, predecessorBlock, overlap) - } - - override string toString() { result = "Phi" } - - final override PhiInstruction getUse() { result = useInstr } - - final override Instruction getAnyDef() { result = defInstr } - - final override Overlap getDefinitionOverlap() { result = overlap } - - final override int getDumpSortOrder() { - result = 11 + this.getPredecessorBlock().getDisplayIndex() - } - - final override string getDumpLabel() { - result = "from " + this.getPredecessorBlock().getDisplayIndex().toString() + ":" - } - - final override string getDumpId() { - result = this.getPredecessorBlock().getDisplayIndex().toString() - } - - /** - * Gets the predecessor block from which this value comes. - */ - final IRBlock getPredecessorBlock() { result = predecessorBlock } - - final override MemoryAccessKind getMemoryAccess() { result instanceof PhiMemoryAccess } -} - -/** - * The total operand of a Chi node, representing the previous value of the memory. - */ -class ChiTotalOperand extends NonPhiMemoryOperand { - override ChiTotalOperandTag tag; - - final override MemoryAccessKind getMemoryAccess() { result instanceof ChiTotalMemoryAccess } -} - -/** - * The partial operand of a Chi node, representing the value being written to part of the memory. - */ -class ChiPartialOperand extends NonPhiMemoryOperand { - override ChiPartialOperandTag tag; - - final override MemoryAccessKind getMemoryAccess() { result instanceof ChiPartialMemoryAccess } -} diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/PrintIR.ql b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/PrintIR.ql deleted file mode 100644 index 83e2e37234b..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/PrintIR.ql +++ /dev/null @@ -1,8 +0,0 @@ -/** - * @name Print SSA IR - * @description Outputs a representation of the SSA IR graph - * @id cpp/print-ssa-ir - * @kind graph - */ - -import PrintIR diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/PrintIR.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/PrintIR.qll deleted file mode 100644 index c4b18d9cb61..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/PrintIR.qll +++ /dev/null @@ -1,342 +0,0 @@ -/** - * Outputs a representation of the IR as a control flow graph. - * - * This file contains the actual implementation of `PrintIR.ql`. For test cases and very small - * databases, `PrintIR.ql` can be run directly to dump the IR for the entire database. For most - * uses, however, it is better to write a query that imports `PrintIR.qll`, extends - * `PrintIRConfiguration`, and overrides `shouldPrintDeclaration()` to select a subset of declarations - * to dump. - */ - -private import internal.IRInternal -private import IR -private import internal.PrintIRImports as Imports -import Imports::IRConfiguration - -private newtype TPrintIRConfiguration = MkPrintIRConfiguration() - -/** - * The query can extend this class to control which declarations are printed. - */ -class PrintIRConfiguration extends TPrintIRConfiguration { - /** Gets a textual representation of this configuration. */ - string toString() { result = "PrintIRConfiguration" } - - /** - * Holds if the IR for `func` should be printed. By default, holds for all - * functions, global and namespace variables, and static local variables. - */ - predicate shouldPrintDeclaration(Language::Declaration decl) { any() } -} - -/** - * Override of `IRConfiguration` to only evaluate debug strings for the functions that are to be dumped. - */ -private class FilteredIRConfiguration extends IRConfiguration { - override predicate shouldEvaluateDebugStringsForFunction(Language::Declaration func) { - shouldPrintDeclaration(func) - } -} - -private predicate shouldPrintDeclaration(Language::Declaration decl) { - exists(PrintIRConfiguration config | config.shouldPrintDeclaration(decl)) -} - -private predicate shouldPrintInstruction(Instruction i) { - exists(IRPropertyProvider provider | provider.shouldPrintInstruction(i)) -} - -private predicate shouldPrintOperand(Operand operand) { - exists(IRPropertyProvider provider | provider.shouldPrintOperand(operand)) -} - -private string getAdditionalInstructionProperty(Instruction instr, string key) { - exists(IRPropertyProvider provider | result = provider.getInstructionProperty(instr, key)) -} - -private string getAdditionalBlockProperty(IRBlock block, string key) { - exists(IRPropertyProvider provider | result = provider.getBlockProperty(block, key)) -} - -/** - * Gets the properties of an operand from any active property providers. - */ -private string getAdditionalOperandProperty(Operand operand, string key) { - exists(IRPropertyProvider provider | result = provider.getOperandProperty(operand, key)) -} - -/** - * Gets a string listing the properties of the operand and their corresponding values. If the - * operand has no properties, this predicate has no result. - */ -private string getOperandPropertyListString(Operand operand) { - result = - strictconcat(string key, string value | - value = getAdditionalOperandProperty(operand, key) - | - key + ":" + value, ", " - ) -} - -/** - * Gets a string listing the properties of the operand and their corresponding values. The list is - * surrounded by curly braces. If the operand has no properties, this predicate returns an empty - * string. - */ -private string getOperandPropertyString(Operand operand) { - result = "{" + getOperandPropertyListString(operand) + "}" - or - not exists(getOperandPropertyListString(operand)) and result = "" -} - -private newtype TPrintableIRNode = - TPrintableIRFunction(IRFunction irFunc) { shouldPrintDeclaration(irFunc.getFunction()) } or - TPrintableIRBlock(IRBlock block) { shouldPrintDeclaration(block.getEnclosingFunction()) } or - TPrintableInstruction(Instruction instr) { - shouldPrintInstruction(instr) and shouldPrintDeclaration(instr.getEnclosingFunction()) - } - -/** - * A node to be emitted in the IR graph. - */ -abstract private class PrintableIRNode extends TPrintableIRNode { - abstract string toString(); - - /** - * Gets the location to be emitted for the node. - */ - abstract Language::Location getLocation(); - - /** - * Gets the label to be emitted for the node. - */ - abstract string getLabel(); - - /** - * Gets the order in which the node appears in its parent node. - */ - abstract int getOrder(); - - /** - * Gets the parent of this node. - */ - abstract PrintableIRNode getParent(); - - /** - * Gets the kind of graph represented by this node ("graph" or "tree"). - */ - string getGraphKind() { none() } - - /** - * Holds if this node should always be rendered as text, even in a graphical - * viewer. - */ - predicate forceText() { none() } - - /** - * Gets the value of the node property with the specified key. - */ - string getProperty(string key) { - key = "semmle.label" and result = this.getLabel() - or - key = "semmle.order" and result = this.getOrder().toString() - or - key = "semmle.graphKind" and result = this.getGraphKind() - or - key = "semmle.forceText" and this.forceText() and result = "true" - } -} - -/** - * An IR graph node representing a `IRFunction` object. - */ -private class PrintableIRFunction extends PrintableIRNode, TPrintableIRFunction { - IRFunction irFunc; - - PrintableIRFunction() { this = TPrintableIRFunction(irFunc) } - - override string toString() { result = irFunc.toString() } - - override Language::Location getLocation() { result = irFunc.getLocation() } - - override string getLabel() { - result = Imports::LanguageDebug::getIdentityString(irFunc.getFunction()) - } - - override int getOrder() { - this = - rank[result + 1](PrintableIRFunction orderedFunc, Language::Location location | - location = orderedFunc.getIRFunction().getLocation() - | - orderedFunc - order by - location.getFile().getAbsolutePath(), location.getStartLine(), location.getStartColumn(), - orderedFunc.getLabel() - ) - } - - final override PrintableIRNode getParent() { none() } - - final IRFunction getIRFunction() { result = irFunc } -} - -/** - * An IR graph node representing an `IRBlock` object. - */ -private class PrintableIRBlock extends PrintableIRNode, TPrintableIRBlock { - IRBlock block; - - PrintableIRBlock() { this = TPrintableIRBlock(block) } - - override string toString() { result = this.getLabel() } - - override Language::Location getLocation() { result = block.getLocation() } - - override string getLabel() { result = "Block " + block.getDisplayIndex().toString() } - - override int getOrder() { result = block.getDisplayIndex() } - - final override string getGraphKind() { result = "tree" } - - final override predicate forceText() { any() } - - final override PrintableIRFunction getParent() { - result.getIRFunction() = block.getEnclosingIRFunction() - } - - override string getProperty(string key) { - result = PrintableIRNode.super.getProperty(key) or - result = getAdditionalBlockProperty(block, key) - } - - final IRBlock getBlock() { result = block } -} - -/** - * An IR graph node representing an `Instruction`. - */ -private class PrintableInstruction extends PrintableIRNode, TPrintableInstruction { - Instruction instr; - - PrintableInstruction() { this = TPrintableInstruction(instr) } - - override string toString() { result = instr.toString() } - - override Language::Location getLocation() { result = instr.getLocation() } - - override string getLabel() { - exists(IRBlock block | - instr = block.getAnInstruction() and - exists( - string resultString, string operationString, string operandsString, int resultWidth, - int operationWidth - | - resultString = instr.getResultString() and - operationString = instr.getOperationString() and - operandsString = this.getOperandsString() and - columnWidths(block, resultWidth, operationWidth) and - result = - resultString + getPaddingString(resultWidth - resultString.length()) + " = " + - operationString + getPaddingString(operationWidth - operationString.length()) + " : " + - operandsString - ) - ) - } - - override int getOrder() { result = instr.getDisplayIndexInBlock() } - - final override PrintableIRBlock getParent() { result.getBlock() = instr.getBlock() } - - final Instruction getInstruction() { result = instr } - - override string getProperty(string key) { - result = PrintableIRNode.super.getProperty(key) or - result = getAdditionalInstructionProperty(instr, key) - } - - /** - * Gets the string representation of the operand list. This is the same as - * `Instruction::getOperandsString()`, except that each operand is annotated with any properties - * provided by active `IRPropertyProvider` instances. - */ - private string getOperandsString() { - result = - concat(Operand operand | - operand = instr.getAnOperand() and - shouldPrintOperand(operand) - | - operand.getDumpString() + getOperandPropertyString(operand), ", " - order by - operand.getDumpSortOrder() - ) - } -} - -private predicate columnWidths(IRBlock block, int resultWidth, int operationWidth) { - resultWidth = max(Instruction instr | instr.getBlock() = block | instr.getResultString().length()) and - operationWidth = - max(Instruction instr | instr.getBlock() = block | instr.getOperationString().length()) -} - -private int maxColumnWidth() { - result = - max(Instruction instr, int width | - width = instr.getResultString().length() or - width = instr.getOperationString().length() or - width = instr.getOperandsString().length() - | - width - ) -} - -private string getPaddingString(int n) { - n = 0 and result = "" - or - n > 0 and n <= maxColumnWidth() and result = getPaddingString(n - 1) + " " -} - -/** - * Holds if `node` belongs to the output graph, and its property `key` has the given `value`. - */ -query predicate nodes(PrintableIRNode node, string key, string value) { - value = node.getProperty(key) -} - -private int getSuccessorIndex(IRBlock pred, IRBlock succ) { - succ = - rank[result + 1](IRBlock aSucc, EdgeKind kind | - aSucc = pred.getSuccessor(kind) - | - aSucc order by kind.toString() - ) -} - -/** - * Holds if the output graph contains an edge from `pred` to `succ`, and that edge's property `key` - * has the given `value`. - */ -query predicate edges(PrintableIRBlock pred, PrintableIRBlock succ, string key, string value) { - exists(EdgeKind kind, IRBlock predBlock, IRBlock succBlock | - predBlock = pred.getBlock() and - succBlock = succ.getBlock() and - predBlock.getSuccessor(kind) = succBlock and - ( - ( - key = "semmle.label" and - if predBlock.getBackEdgeSuccessor(kind) = succBlock - then value = kind.toString() + " (back edge)" - else value = kind.toString() - ) - or - key = "semmle.order" and - value = getSuccessorIndex(predBlock, succBlock).toString() - ) - ) -} - -/** - * Holds if `parent` is the parent node of `child` in the output graph. - */ -query predicate parents(PrintableIRNode child, PrintableIRNode parent) { - parent = child.getParent() -} diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/constant/ConstantAnalysis.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/constant/ConstantAnalysis.qll deleted file mode 100644 index c50e8385c99..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/constant/ConstantAnalysis.qll +++ /dev/null @@ -1,54 +0,0 @@ -private import internal.ConstantAnalysisInternal -private import experimental.ir.internal.IntegerPartial -private import IR - -language[monotonicAggregates] -int getConstantValue(Instruction instr) { - result = instr.(IntegerConstantInstruction).getValue().toInt() - or - result = getBinaryInstructionValue(instr) - or - result = neg(getConstantValue(instr.(NegateInstruction).getUnary())) - or - result = getConstantValue(instr.(CopyInstruction).getSourceValue()) - or - exists(PhiInstruction phi | - phi = instr and - result = max(Operand op | op = phi.getAnInputOperand() | getConstantValue(op.getDef())) and - result = min(Operand op | op = phi.getAnInputOperand() | getConstantValue(op.getDef())) - ) -} - -pragma[noinline] -private predicate binaryInstructionOperands(BinaryInstruction instr, int left, int right) { - left = getConstantValue(instr.getLeft()) and - right = getConstantValue(instr.getRight()) -} - -pragma[noinline] -private int getBinaryInstructionValue(BinaryInstruction instr) { - exists(int left, int right | - binaryInstructionOperands(instr, left, right) and - ( - instr instanceof AddInstruction and result = add(left, right) - or - instr instanceof SubInstruction and result = sub(left, right) - or - instr instanceof MulInstruction and result = mul(left, right) - or - instr instanceof DivInstruction and result = div(left, right) - or - instr instanceof CompareEQInstruction and result = compareEQ(left, right) - or - instr instanceof CompareNEInstruction and result = compareNE(left, right) - or - instr instanceof CompareLTInstruction and result = compareLT(left, right) - or - instr instanceof CompareGTInstruction and result = compareGT(left, right) - or - instr instanceof CompareLEInstruction and result = compareLE(left, right) - or - instr instanceof CompareGEInstruction and result = compareGE(left, right) - ) - ) -} diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/constant/PrintConstantAnalysis.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/constant/PrintConstantAnalysis.qll deleted file mode 100644 index 53f9295be4f..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/constant/PrintConstantAnalysis.qll +++ /dev/null @@ -1,11 +0,0 @@ -private import internal.ConstantAnalysisInternal -private import experimental.ir.internal.IntegerConstant -private import ConstantAnalysis -import IR - -private class ConstantAnalysisPropertyProvider extends IRPropertyProvider { - override string getInstructionProperty(Instruction instr, string key) { - key = "ConstantValue" and - result = getValue(getConstantValue(instr)).toString() - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/constant/internal/ConstantAnalysisInternal.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/constant/internal/ConstantAnalysisInternal.qll deleted file mode 100644 index c70b240fe42..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/constant/internal/ConstantAnalysisInternal.qll +++ /dev/null @@ -1 +0,0 @@ -import experimental.ir.implementation.unaliased_ssa.IR as IR diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/PrintValueNumbering.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/PrintValueNumbering.qll deleted file mode 100644 index a7fb1b3c07e..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/PrintValueNumbering.qll +++ /dev/null @@ -1,17 +0,0 @@ -private import internal.ValueNumberingImports -private import ValueNumbering - -/** - * Provides additional information about value numbering in IR dumps. - */ -class ValueNumberPropertyProvider extends IRPropertyProvider { - override string getInstructionProperty(Instruction instr, string key) { - exists(ValueNumber vn | - vn = valueNumber(instr) and - key = "valnum" and - if strictcount(vn.getAnInstruction()) > 1 - then result = vn.getDebugString() - else result = "unique" - ) - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll deleted file mode 100644 index 2a46e16c52f..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll +++ /dev/null @@ -1,90 +0,0 @@ -private import internal.ValueNumberingInternal -private import internal.ValueNumberingImports - -/** - * The value number assigned to a particular set of instructions that produce equivalent results. - */ -class ValueNumber extends TValueNumber { - final string toString() { result = "GVN" } - - final string getDebugString() { - result = strictconcat(this.getAnInstruction().getResultId(), ", ") - } - - final Language::Location getLocation() { - if - exists(Instruction i | - i = this.getAnInstruction() and not i.getLocation() instanceof Language::UnknownLocation - ) - then - result = - min(Language::Location l | - l = this.getAnInstruction().getLocation() and not l instanceof Language::UnknownLocation - | - l - order by - l.getFile().getAbsolutePath(), l.getStartLine(), l.getStartColumn(), l.getEndLine(), - l.getEndColumn() - ) - else result instanceof Language::UnknownDefaultLocation - } - - /** - * Gets the instructions that have been assigned this value number. This will always produce at - * least one result. - */ - final Instruction getAnInstruction() { this = valueNumber(result) } - - /** - * Gets one of the instructions that was assigned this value number. The chosen instruction is - * deterministic but arbitrary. Intended for use only in debugging. - */ - final Instruction getExampleInstruction() { - result = - min(Instruction instr | - instr = this.getAnInstruction() - | - instr order by instr.getBlock().getDisplayIndex(), instr.getDisplayIndexInBlock() - ) - } - - /** - * Gets an `Operand` whose definition is exact and has this value number. - */ - final Operand getAUse() { this = valueNumber(result.getDef()) } - - final string getKind() { - this instanceof TVariableAddressValueNumber and result = "VariableAddress" - or - this instanceof TInitializeParameterValueNumber and result = "InitializeParameter" - or - this instanceof TConstantValueNumber and result = "Constant" - or - this instanceof TStringConstantValueNumber and result = "StringConstant" - or - this instanceof TFieldAddressValueNumber and result = "FieldAddress" - or - this instanceof TBinaryValueNumber and result = "Binary" - or - this instanceof TPointerArithmeticValueNumber and result = "PointerArithmetic" - or - this instanceof TUnaryValueNumber and result = "Unary" - or - this instanceof TInheritanceConversionValueNumber and result = "InheritanceConversion" - or - this instanceof TLoadTotalOverlapValueNumber and result = "LoadTotalOverlap" - or - this instanceof TUniqueValueNumber and result = "Unique" - } -} - -/** - * Gets the value number assigned to `instr`, if any. Returns at most one result. - */ -ValueNumber valueNumber(Instruction instr) { result = tvalueNumber(instr) } - -/** - * Gets the value number assigned to the exact definition of `op`, if any. - * Returns at most one result. - */ -ValueNumber valueNumberOfOperand(Operand op) { result = tvalueNumberOfOperand(op) } diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingImports.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingImports.qll deleted file mode 100644 index 34bd754692d..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingImports.qll +++ /dev/null @@ -1,3 +0,0 @@ -import experimental.ir.internal.Overlap -import experimental.ir.internal.IRCSharpLanguage as Language -import experimental.ir.implementation.unaliased_ssa.IR diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll deleted file mode 100644 index ec003891774..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll +++ /dev/null @@ -1,356 +0,0 @@ -private import ValueNumberingImports - -newtype TValueNumber = - TVariableAddressValueNumber(IRFunction irFunc, Language::AST ast) { - variableAddressValueNumber(_, irFunc, ast) - } or - TInitializeParameterValueNumber(IRFunction irFunc, Language::AST var) { - initializeParameterValueNumber(_, irFunc, var) - } or - TConstantValueNumber(IRFunction irFunc, IRType type, string value) { - constantValueNumber(_, irFunc, type, value) - } or - TStringConstantValueNumber(IRFunction irFunc, IRType type, string value) { - stringConstantValueNumber(_, irFunc, type, value) - } or - TFieldAddressValueNumber(IRFunction irFunc, Language::Field field, TValueNumber objectAddress) { - fieldAddressValueNumber(_, irFunc, field, objectAddress) - } or - TBinaryValueNumber( - IRFunction irFunc, Opcode opcode, TValueNumber leftOperand, TValueNumber rightOperand - ) { - binaryValueNumber(_, irFunc, opcode, leftOperand, rightOperand) - } or - TPointerArithmeticValueNumber( - IRFunction irFunc, Opcode opcode, int elementSize, TValueNumber leftOperand, - TValueNumber rightOperand - ) { - pointerArithmeticValueNumber(_, irFunc, opcode, elementSize, leftOperand, rightOperand) - } or - TUnaryValueNumber(IRFunction irFunc, Opcode opcode, TValueNumber operand) { - unaryValueNumber(_, irFunc, opcode, operand) - } or - TInheritanceConversionValueNumber( - IRFunction irFunc, Opcode opcode, Language::Class baseClass, Language::Class derivedClass, - TValueNumber operand - ) { - inheritanceConversionValueNumber(_, irFunc, opcode, baseClass, derivedClass, operand) - } or - TLoadTotalOverlapValueNumber( - IRFunction irFunc, IRType type, TValueNumber memOperand, TValueNumber operand - ) { - loadTotalOverlapValueNumber(_, irFunc, type, memOperand, operand) - } or - TUniqueValueNumber(IRFunction irFunc, Instruction instr) { uniqueValueNumber(instr, irFunc) } - -/** - * A `CopyInstruction` whose source operand's value is congruent to the definition of that source - * operand. - * For example: - * ``` - * Point p = { 1, 2 }; - * Point q = p; - * int a = p.x; - * ``` - * The use of `p` on line 2 is linked to the definition of `p` on line 1, and is congruent to that - * definition because it accesses the exact same memory. - * The use of `p.x` on line 3 is linked to the definition of `p` on line 1 as well, but is not - * congruent to that definition because `p.x` accesses only a subset of the memory defined by `p`. - */ -class CongruentCopyInstruction extends CopyInstruction { - CongruentCopyInstruction() { - this.getSourceValueOperand().getDefinitionOverlap() instanceof MustExactlyOverlap - } -} - -class LoadTotalOverlapInstruction extends LoadInstruction { - LoadTotalOverlapInstruction() { - this.getSourceValueOperand().getDefinitionOverlap() instanceof MustTotallyOverlap - } -} - -/** - * Holds if this library knows how to assign a value number to the specified instruction, other than - * a `unique` value number that is never shared by multiple instructions. - */ -private predicate numberableInstruction(Instruction instr) { - instr instanceof VariableAddressInstruction - or - instr instanceof InitializeParameterInstruction - or - instr instanceof ConstantInstruction - or - instr instanceof StringConstantInstruction - or - instr instanceof FieldAddressInstruction - or - instr instanceof BinaryInstruction - or - instr instanceof UnaryInstruction and not instr instanceof CopyInstruction - or - instr instanceof PointerArithmeticInstruction - or - instr instanceof CongruentCopyInstruction - or - instr instanceof LoadTotalOverlapInstruction -} - -private predicate filteredNumberableInstruction(Instruction instr) { - // count rather than strictcount to handle missing AST elements - // separate instanceof and inline casts to avoid failed casts with a count of 0 - instr instanceof VariableAddressInstruction and - count(instr.(VariableAddressInstruction).getIRVariable().getAst()) != 1 - or - instr instanceof ConstantInstruction and - count(instr.getResultIRType()) != 1 - or - instr instanceof FieldAddressInstruction and - count(instr.(FieldAddressInstruction).getField()) != 1 - or - instr instanceof InheritanceConversionInstruction and - ( - count(instr.(InheritanceConversionInstruction).getBaseClass()) != 1 or - count(instr.(InheritanceConversionInstruction).getDerivedClass()) != 1 - ) -} - -private predicate variableAddressValueNumber( - VariableAddressInstruction instr, IRFunction irFunc, Language::AST ast -) { - instr.getEnclosingIRFunction() = irFunc and - // The underlying AST element is used as value-numbering key instead of the - // `IRVariable` to work around a problem where a variable or expression with - // multiple types gives rise to multiple `IRVariable`s. - unique( | | instr.getIRVariable().getAst()) = ast -} - -private predicate initializeParameterValueNumber( - InitializeParameterInstruction instr, IRFunction irFunc, Language::AST var -) { - instr.getEnclosingIRFunction() = irFunc and - // The underlying AST element is used as value-numbering key instead of the - // `IRVariable` to work around a problem where a variable or expression with - // multiple types gives rise to multiple `IRVariable`s. - instr.getIRVariable().getAst() = var -} - -private predicate constantValueNumber( - ConstantInstruction instr, IRFunction irFunc, IRType type, string value -) { - instr.getEnclosingIRFunction() = irFunc and - unique( | | instr.getResultIRType()) = type and - instr.getValue() = value -} - -private predicate stringConstantValueNumber( - StringConstantInstruction instr, IRFunction irFunc, IRType type, string value -) { - instr.getEnclosingIRFunction() = irFunc and - instr.getResultIRType() = type and - instr.getValue().getValue() = value -} - -private predicate fieldAddressValueNumber( - FieldAddressInstruction instr, IRFunction irFunc, Language::Field field, - TValueNumber objectAddress -) { - instr.getEnclosingIRFunction() = irFunc and - unique( | | instr.getField()) = field and - tvalueNumber(instr.getObjectAddress()) = objectAddress -} - -pragma[nomagic] -private predicate binaryValueNumber0( - BinaryInstruction instr, IRFunction irFunc, Opcode opcode, boolean isLeft, - TValueNumber valueNumber -) { - not instr instanceof PointerArithmeticInstruction and - instr.getEnclosingIRFunction() = irFunc and - instr.getOpcode() = opcode and - ( - isLeft = true and - tvalueNumber(instr.getLeft()) = valueNumber - or - isLeft = false and - tvalueNumber(instr.getRight()) = valueNumber - ) -} - -private predicate binaryValueNumber( - BinaryInstruction instr, IRFunction irFunc, Opcode opcode, TValueNumber leftOperand, - TValueNumber rightOperand -) { - binaryValueNumber0(instr, irFunc, opcode, true, leftOperand) and - binaryValueNumber0(instr, irFunc, opcode, false, rightOperand) -} - -pragma[nomagic] -private predicate pointerArithmeticValueNumber0( - PointerArithmeticInstruction instr, IRFunction irFunc, Opcode opcode, int elementSize, - boolean isLeft, TValueNumber valueNumber -) { - instr.getEnclosingIRFunction() = irFunc and - instr.getOpcode() = opcode and - instr.getElementSize() = elementSize and - ( - isLeft = true and - tvalueNumber(instr.getLeft()) = valueNumber - or - isLeft = false and - tvalueNumber(instr.getRight()) = valueNumber - ) -} - -private predicate pointerArithmeticValueNumber( - PointerArithmeticInstruction instr, IRFunction irFunc, Opcode opcode, int elementSize, - TValueNumber leftOperand, TValueNumber rightOperand -) { - pointerArithmeticValueNumber0(instr, irFunc, opcode, elementSize, true, leftOperand) and - pointerArithmeticValueNumber0(instr, irFunc, opcode, elementSize, false, rightOperand) -} - -private predicate unaryValueNumber( - UnaryInstruction instr, IRFunction irFunc, Opcode opcode, TValueNumber operand -) { - instr.getEnclosingIRFunction() = irFunc and - not instr instanceof InheritanceConversionInstruction and - not instr instanceof CopyInstruction and - not instr instanceof FieldAddressInstruction and - instr.getOpcode() = opcode and - tvalueNumber(instr.getUnary()) = operand -} - -private predicate inheritanceConversionValueNumber( - InheritanceConversionInstruction instr, IRFunction irFunc, Opcode opcode, - Language::Class baseClass, Language::Class derivedClass, TValueNumber operand -) { - instr.getEnclosingIRFunction() = irFunc and - instr.getOpcode() = opcode and - tvalueNumber(instr.getUnary()) = operand and - unique( | | instr.getBaseClass()) = baseClass and - unique( | | instr.getDerivedClass()) = derivedClass -} - -pragma[nomagic] -private predicate loadTotalOverlapValueNumber0( - LoadTotalOverlapInstruction instr, IRFunction irFunc, IRType type, TValueNumber valueNumber, - boolean isAddress -) { - instr.getEnclosingIRFunction() = irFunc and - instr.getResultIRType() = type and - ( - isAddress = true and - tvalueNumberOfOperand(instr.getSourceAddressOperand()) = valueNumber - or - isAddress = false and - tvalueNumber(instr.getSourceValueOperand().getAnyDef()) = valueNumber - ) -} - -private predicate loadTotalOverlapValueNumber( - LoadTotalOverlapInstruction instr, IRFunction irFunc, IRType type, TValueNumber memOperand, - TValueNumber operand -) { - loadTotalOverlapValueNumber0(instr, irFunc, type, operand, true) and - loadTotalOverlapValueNumber0(instr, irFunc, type, memOperand, false) -} - -/** - * Holds if `instr` should be assigned a unique value number because this library does not know how - * to determine if two instances of that instruction are equivalent. - */ -private predicate uniqueValueNumber(Instruction instr, IRFunction irFunc) { - instr.getEnclosingIRFunction() = irFunc and - not instr.getResultIRType() instanceof IRVoidType and - ( - not numberableInstruction(instr) - or - filteredNumberableInstruction(instr) - ) -} - -/** - * Gets the value number assigned to `instr`, if any. Returns at most one result. - */ -cached -TValueNumber tvalueNumber(Instruction instr) { - result = nonUniqueValueNumber(instr) - or - exists(IRFunction irFunc | - uniqueValueNumber(instr, irFunc) and - result = TUniqueValueNumber(irFunc, instr) - ) -} - -/** - * Gets the value number assigned to the exact definition of `op`, if any. - * Returns at most one result. - */ -TValueNumber tvalueNumberOfOperand(Operand op) { result = tvalueNumber(op.getDef()) } - -/** - * Gets the value number assigned to `instr`, if any, unless that instruction is assigned a unique - * value number. - */ -private TValueNumber nonUniqueValueNumber(Instruction instr) { - exists(IRFunction irFunc | - irFunc = instr.getEnclosingIRFunction() and - ( - exists(Language::AST ast | - variableAddressValueNumber(instr, irFunc, ast) and - result = TVariableAddressValueNumber(irFunc, ast) - ) - or - exists(Language::AST var | - initializeParameterValueNumber(instr, irFunc, var) and - result = TInitializeParameterValueNumber(irFunc, var) - ) - or - exists(string value, IRType type | - constantValueNumber(instr, irFunc, type, value) and - result = TConstantValueNumber(irFunc, type, value) - ) - or - exists(IRType type, string value | - stringConstantValueNumber(instr, irFunc, type, value) and - result = TStringConstantValueNumber(irFunc, type, value) - ) - or - exists(Language::Field field, TValueNumber objectAddress | - fieldAddressValueNumber(instr, irFunc, field, objectAddress) and - result = TFieldAddressValueNumber(irFunc, field, objectAddress) - ) - or - exists(Opcode opcode, TValueNumber leftOperand, TValueNumber rightOperand | - binaryValueNumber(instr, irFunc, opcode, leftOperand, rightOperand) and - result = TBinaryValueNumber(irFunc, opcode, leftOperand, rightOperand) - ) - or - exists(Opcode opcode, TValueNumber operand | - unaryValueNumber(instr, irFunc, opcode, operand) and - result = TUnaryValueNumber(irFunc, opcode, operand) - ) - or - exists( - Opcode opcode, Language::Class baseClass, Language::Class derivedClass, TValueNumber operand - | - inheritanceConversionValueNumber(instr, irFunc, opcode, baseClass, derivedClass, operand) and - result = TInheritanceConversionValueNumber(irFunc, opcode, baseClass, derivedClass, operand) - ) - or - exists(Opcode opcode, int elementSize, TValueNumber leftOperand, TValueNumber rightOperand | - pointerArithmeticValueNumber(instr, irFunc, opcode, elementSize, leftOperand, rightOperand) and - result = - TPointerArithmeticValueNumber(irFunc, opcode, elementSize, leftOperand, rightOperand) - ) - or - exists(IRType type, TValueNumber memOperand, TValueNumber operand | - loadTotalOverlapValueNumber(instr, irFunc, type, memOperand, operand) and - result = TLoadTotalOverlapValueNumber(irFunc, type, memOperand, operand) - ) - or - // The value number of a copy is just the value number of its source value. - result = tvalueNumber(instr.(CongruentCopyInstruction).getSourceValue()) - ) - ) -} diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasAnalysis.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasAnalysis.qll deleted file mode 100644 index 23a7c1e77fd..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasAnalysis.qll +++ /dev/null @@ -1,474 +0,0 @@ -private import AliasAnalysisInternal -private import InputIR -private import AliasAnalysisImports - -private class IntValue = Ints::IntValue; - -/** - * If `instr` is a `SideEffectInstruction`, gets the primary `CallInstruction` that caused the side - * effect. If `instr` is a `CallInstruction`, gets that same `CallInstruction`. - */ -private CallInstruction getPrimaryCall(Instruction instr) { - result = instr - or - result = instr.(SideEffectInstruction).getPrimaryInstruction() -} - -/** - * Holds if `operand` serves as an input argument (or indirection) to `call`, in the position - * specified by `input`. - */ -private predicate isCallInput( - CallInstruction call, Operand operand, AliasModels::FunctionInput input -) { - call = getPrimaryCall(operand.getUse()) and - ( - exists(int index | - input.isParameterOrQualifierAddress(index) and - operand = call.getArgumentOperand(index) - ) - or - exists(int index, ReadSideEffectInstruction read | - input.isParameterDerefOrQualifierObject(index) and - read = call.getAParameterSideEffect(index) and - operand = read.getSideEffectOperand() - ) - ) -} - -/** - * Holds if `instr` serves as a return value or output argument indirection for `call`, in the - * position specified by `output`. - */ -private predicate isCallOutput( - CallInstruction call, Instruction instr, AliasModels::FunctionOutput output -) { - call = getPrimaryCall(instr) and - ( - output.isReturnValue() and instr = call - or - exists(int index, WriteSideEffectInstruction write | - output.isParameterDerefOrQualifierObject(index) and - write = call.getAParameterSideEffect(index) and - instr = write - ) - ) -} - -/** - * Holds if the address in `operand` flows directly to the result of `resultInstr` due to modeled - * address flow through a function call. - */ -private predicate hasAddressFlowThroughCall(Operand operand, Instruction resultInstr) { - exists( - CallInstruction call, AliasModels::FunctionInput input, AliasModels::FunctionOutput output - | - call.getStaticCallTarget().(AliasModels::AliasFunction).hasAddressFlow(input, output) and - isCallInput(call, operand, input) and - isCallOutput(call, resultInstr, output) - ) -} - -/** - * Holds if the operand `tag` of instruction `instr` is used in a way that does - * not result in any address held in that operand from escaping beyond the - * instruction. - */ -private predicate operandIsConsumedWithoutEscaping(Operand operand) { - // The source/destination address of a Load/Store does not escape (but the - // loaded/stored value could). - operand instanceof AddressOperand - or - exists(Instruction instr | - instr = operand.getUse() and - ( - // Neither operand of a Compare escapes. - instr instanceof CompareInstruction - or - // Neither operand of a PointerDiff escapes. - instr instanceof PointerDiffInstruction - or - // Converting an address to a `bool` does not escape the address. - instr.(ConvertInstruction).getResultIRType() instanceof IRBooleanType - or - instr instanceof CallInstruction and - not exists(IREscapeAnalysisConfiguration config | config.useSoundEscapeAnalysis()) - ) - ) - or - // Some standard function arguments never escape - isNeverEscapesArgument(operand) -} - -private predicate operandEscapesDomain(Operand operand) { - not operandIsConsumedWithoutEscaping(operand) and - not operandIsPropagated(operand, _, _) and - not isArgumentForParameter(_, operand, _) and - not isOnlyEscapesViaReturnArgument(operand) and - not operand.getUse() instanceof ReturnValueInstruction and - not operand.getUse() instanceof ReturnIndirectionInstruction and - not operand instanceof PhiInputOperand -} - -/** - * If the result of instruction `instr` is an integer constant, returns the - * value of that constant. Otherwise, returns unknown. - */ -IntValue getConstantValue(Instruction instr) { - if instr instanceof IntegerConstantInstruction - then result = instr.(IntegerConstantInstruction).getValue().toInt() - else result = Ints::unknown() -} - -/** - * Computes the offset, in bits, by which the result of `instr` differs from the - * pointer argument to `instr`, if that offset is a constant. Otherwise, returns - * unknown. - */ -IntValue getPointerBitOffset(PointerOffsetInstruction instr) { - exists(IntValue bitOffset | - bitOffset = Ints::mul(Ints::mul(getConstantValue(instr.getRight()), instr.getElementSize()), 8) and - ( - instr instanceof PointerAddInstruction and result = bitOffset - or - instr instanceof PointerSubInstruction and result = Ints::neg(bitOffset) - ) - ) -} - -/** - * Holds if any address held in operand `operand` is propagated to the result of `instr`, offset by - * the number of bits in `bitOffset`. If the address is propagated, but the offset is not known to - * be a constant, then `bitOffset` is `unknown()`. - */ -private predicate operandIsPropagated(Operand operand, IntValue bitOffset, Instruction instr) { - // Some functions are known to propagate an argument - hasAddressFlowThroughCall(operand, instr) and - bitOffset = 0 - or - instr = operand.getUse() and - ( - // Converting to a non-virtual base class adds the offset of the base class. - exists(ConvertToNonVirtualBaseInstruction convert | - convert = instr and - bitOffset = Ints::mul(convert.getDerivation().getByteOffset(), 8) - ) - or - // Conversion using dynamic_cast results in an unknown offset - instr instanceof CheckedConvertOrNullInstruction and - bitOffset = Ints::unknown() - or - // Converting to a derived class subtracts the offset of the base class. - exists(ConvertToDerivedInstruction convert | - convert = instr and - bitOffset = Ints::neg(Ints::mul(convert.getDerivation().getByteOffset(), 8)) - ) - or - // Converting to a virtual base class adds an unknown offset. - instr instanceof ConvertToVirtualBaseInstruction and - bitOffset = Ints::unknown() - or - // Conversion to another pointer type propagates the source address. - exists(ConvertInstruction convert, IRType resultType | - convert = instr and - resultType = convert.getResultIRType() and - resultType instanceof IRAddressType and - bitOffset = 0 - ) - or - // Adding an integer to or subtracting an integer from a pointer propagates - // the address with an offset. - exists(PointerOffsetInstruction ptrOffset | - ptrOffset = instr and - operand = ptrOffset.getLeftOperand() and - bitOffset = getPointerBitOffset(ptrOffset) - ) - or - // Computing a field address from a pointer propagates the address plus the - // offset of the field. - bitOffset = Language::getFieldBitOffset(instr.(FieldAddressInstruction).getField()) - or - // A copy propagates the source value. - operand = instr.(CopyInstruction).getSourceValueOperand() and bitOffset = 0 - ) -} - -private predicate operandEscapesNonReturn(Operand operand) { - exists(Instruction instr | - // The address is propagated to the result of the instruction, and that result itself is returned - operandIsPropagated(operand, _, instr) and resultEscapesNonReturn(instr) - ) - or - // The operand is used in a function call which returns it, and the return value is then returned - exists(CallInstruction ci, Instruction init | - isArgumentForParameter(ci, operand, init) and - ( - resultMayReachReturn(init) and - resultEscapesNonReturn(ci) - or - resultEscapesNonReturn(init) - ) - ) - or - isOnlyEscapesViaReturnArgument(operand) and resultEscapesNonReturn(operand.getUse()) - or - operand instanceof PhiInputOperand and - resultEscapesNonReturn(operand.getUse()) - or - operandEscapesDomain(operand) -} - -private predicate operandMayReachReturn(Operand operand) { - exists(Instruction instr | - // The address is propagated to the result of the instruction, and that result itself is returned - operandIsPropagated(operand, _, instr) and - resultMayReachReturn(instr) - ) - or - // The operand is used in a function call which returns it, and the return value is then returned - exists(CallInstruction ci, Instruction init | - isArgumentForParameter(ci, operand, init) and - resultMayReachReturn(init) and - resultMayReachReturn(ci) - ) - or - // The address is returned - operand.getUse() instanceof ReturnValueInstruction - or - isOnlyEscapesViaReturnArgument(operand) and resultMayReachReturn(operand.getUse()) - or - operand instanceof PhiInputOperand and - resultMayReachReturn(operand.getUse()) -} - -private predicate operandReturned(Operand operand, IntValue bitOffset) { - // The address is propagated to the result of the instruction, and that result itself is returned - exists(Instruction instr, IntValue bitOffset1, IntValue bitOffset2 | - operandIsPropagated(operand, bitOffset1, instr) and - resultReturned(instr, bitOffset2) and - bitOffset = Ints::add(bitOffset1, bitOffset2) - ) - or - // The operand is used in a function call which returns it, and the return value is then returned - exists(CallInstruction ci, Instruction init, IntValue bitOffset1, IntValue bitOffset2 | - isArgumentForParameter(ci, operand, init) and - resultReturned(init, bitOffset1) and - resultReturned(ci, bitOffset2) and - bitOffset = Ints::add(bitOffset1, bitOffset2) - ) - or - // The address is returned - operand.getUse() instanceof ReturnValueInstruction and - bitOffset = 0 - or - isOnlyEscapesViaReturnArgument(operand) and - resultReturned(operand.getUse(), _) and - bitOffset = Ints::unknown() -} - -pragma[nomagic] -private predicate initializeParameterInstructionHasVariable( - IRVariable var, InitializeParameterInstruction init -) { - init.getIRVariable() = var -} - -private predicate instructionInitializesThisInFunction( - Language::Function f, InitializeParameterInstruction init -) { - initializeParameterInstructionHasVariable(any(IRThisVariable var), pragma[only_bind_into](init)) and - init.getEnclosingFunction() = f -} - -private predicate isArgumentForParameter( - CallInstruction ci, Operand operand, InitializeParameterInstruction init -) { - exists(Language::Function f | - ci = operand.getUse() and - f = ci.getStaticCallTarget() and - ( - init.getParameter() = f.getParameter(operand.(PositionalArgumentOperand).getIndex()) - or - instructionInitializesThisInFunction(f, init) and - operand instanceof ThisArgumentOperand - ) and - not Language::isFunctionVirtual(f) and - not f instanceof AliasModels::AliasFunction - ) -} - -private predicate isOnlyEscapesViaReturnArgument(Operand operand) { - exists(AliasModels::AliasFunction f | - f = operand.getUse().(CallInstruction).getStaticCallTarget() and - ( - f.parameterEscapesOnlyViaReturn(operand.(PositionalArgumentOperand).getIndex()) - or - f.parameterEscapesOnlyViaReturn(-1) and - operand instanceof ThisArgumentOperand - ) - ) -} - -private predicate isNeverEscapesArgument(Operand operand) { - exists(AliasModels::AliasFunction f | - f = operand.getUse().(CallInstruction).getStaticCallTarget() and - ( - f.parameterNeverEscapes(operand.(PositionalArgumentOperand).getIndex()) - or - f.parameterNeverEscapes(-1) and - operand instanceof ThisArgumentOperand - ) - ) -} - -private predicate resultReturned(Instruction instr, IntValue bitOffset) { - operandReturned(instr.getAUse(), bitOffset) -} - -private predicate resultMayReachReturn(Instruction instr) { operandMayReachReturn(instr.getAUse()) } - -/** - * Holds if any address held in the result of instruction `instr` escapes - * outside the domain of the analysis. - */ -private predicate resultEscapesNonReturn(Instruction instr) { - // The result escapes if it has at least one use that escapes. - operandEscapesNonReturn(instr.getAUse()) - or - // The result also escapes if it is not modeled in SSA, because we do not know where it might be - // used. - not instr.isResultModeled() -} - -/** - * Holds if the address of `allocation` escapes outside the domain of the analysis. This can occur - * either because the allocation's address is taken within the function and escapes, or because the - * allocation is marked as always escaping via `alwaysEscapes()`. - */ -predicate allocationEscapes(Configuration::Allocation allocation) { - allocation.alwaysEscapes() - or - exists(IREscapeAnalysisConfiguration config | - config.useSoundEscapeAnalysis() and resultEscapesNonReturn(allocation.getABaseInstruction()) - ) - or - Configuration::phaseNeedsSoundEscapeAnalysis() and - resultEscapesNonReturn(allocation.getABaseInstruction()) -} - -/** - * Equivalent to `operandIsPropagated()`, but includes interprocedural propagation. - */ -private predicate operandIsPropagatedIncludingByCall( - Operand operand, IntValue bitOffset, Instruction instr -) { - operandIsPropagated(operand, bitOffset, instr) - or - exists(CallInstruction call, Instruction init | - isArgumentForParameter(call, operand, init) and - resultReturned(init, bitOffset) and - instr = call - ) -} - -/** - * Holds if `addrOperand` is at offset `bitOffset` from the value of instruction `base`. The offset - * may be `unknown()`. - */ -private predicate hasBaseAndOffset(AddressOperand addrOperand, Instruction base, IntValue bitOffset) { - base = addrOperand.getDef() and bitOffset = 0 // Base case - or - exists( - Instruction middle, int previousBitOffset, Operand middleOperand, IntValue additionalBitOffset - | - // We already have an offset from `middle`. - hasBaseAndOffset(addrOperand, middle, previousBitOffset) and - // `middle` is propagated from `base`. - operandIsPropagatedIncludingByCall(middleOperand, additionalBitOffset, middle) and - base = middleOperand.getDef() and - bitOffset = Ints::add(previousBitOffset, additionalBitOffset) - ) -} - -/** - * Holds if `addrOperand` is at constant offset `bitOffset` from the value of instruction `base`. - * Only holds for the `base` with the longest chain of propagation to `addrOperand`. - */ -predicate addressOperandBaseAndConstantOffset( - AddressOperand addrOperand, Instruction base, int bitOffset -) { - hasBaseAndOffset(addrOperand, base, bitOffset) and - Ints::hasValue(bitOffset) and - not exists(Instruction previousBase, int previousBitOffset | - hasBaseAndOffset(addrOperand, previousBase, previousBitOffset) and - previousBase = base.getAnOperand().getDef() and - Ints::hasValue(previousBitOffset) - ) -} - -/** - * Gets the allocation into which `addrOperand` points, if known. - */ -Configuration::Allocation getAddressOperandAllocation(AddressOperand addrOperand) { - addressOperandAllocationAndOffset(addrOperand, result, _) -} - -/** - * Holds if `addrOperand` is at offset `bitOffset` from a base instruction of `allocation`. The - * offset may be `unknown()`. - */ -predicate addressOperandAllocationAndOffset( - AddressOperand addrOperand, Configuration::Allocation allocation, IntValue bitOffset -) { - exists(Instruction base | - allocation.getABaseInstruction() = base and - hasBaseAndOffset(addrOperand, base, bitOffset) and - not exists(Instruction previousBase | - hasBaseAndOffset(addrOperand, pragma[only_bind_out](previousBase), _) and - previousBase = base.getAnOperand().getDef() - ) - ) -} - -/** - * Predicates used only for printing annotated IR dumps. These should not be used in production - * queries. - */ -module Print { - string getOperandProperty(Operand operand, string key) { - key = "alloc" and - result = - strictconcat(Configuration::Allocation allocation, IntValue bitOffset | - addressOperandAllocationAndOffset(operand, allocation, bitOffset) - | - allocation.toString() + Ints::getBitOffsetString(bitOffset), ", " - ) - or - key = "prop" and - result = - strictconcat(Instruction destInstr, IntValue bitOffset, string value | - operandIsPropagatedIncludingByCall(operand, bitOffset, destInstr) and - if destInstr = operand.getUse() - then value = "@" + Ints::getBitOffsetString(bitOffset) + "->result" - else value = "@" + Ints::getBitOffsetString(bitOffset) + "->" + destInstr.getResultId() - | - value, ", " - ) - } - - string getInstructionProperty(Instruction instr, string key) { - key = "prop" and - result = - strictconcat(IntValue bitOffset, Operand sourceOperand, string value | - operandIsPropagatedIncludingByCall(sourceOperand, bitOffset, instr) and - if instr = sourceOperand.getUse() - then value = sourceOperand.getDumpId() + Ints::getBitOffsetString(bitOffset) + "->@" - else - value = - sourceOperand.getUse().getResultId() + "." + sourceOperand.getDumpId() + - Ints::getBitOffsetString(bitOffset) + "->@" - | - value, ", " - ) - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasAnalysisImports.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasAnalysisImports.qll deleted file mode 100644 index 78dcdc95af0..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasAnalysisImports.qll +++ /dev/null @@ -1,269 +0,0 @@ -private import csharp -import experimental.ir.implementation.IRConfiguration -import experimental.ir.internal.IntegerConstant as Ints - -module AliasModels { - class ParameterIndex = int; - - /** - * An input to a function. This can be: - * - The value of one of the function's parameters - * - The value pointed to by one of function's pointer or reference parameters - * - The value of the function's `this` pointer - * - The value pointed to by the function's `this` pointer - */ - abstract class FunctionInput extends string { - FunctionInput() { none() } - - /** - * Holds if this is the input value of the parameter with index `index`. - * - * Example: - * ``` - * void func(int n, char* p, float& r); - * ``` - * - `isParameter(0)` holds for the `FunctionInput` that represents the value of `n` (with type - * `int`) on entry to the function. - * - `isParameter(1)` holds for the `FunctionInput` that represents the value of `p` (with type - * `char*`) on entry to the function. - * - `isParameter(2)` holds for the `FunctionInput` that represents the "value" of the reference - * `r` (with type `float&`) on entry to the function, _not_ the value of the referred-to - * `float`. - */ - predicate isParameter(ParameterIndex index) { none() } - - /** - * Holds if this is the input value pointed to by a pointer parameter to a function, or the input - * value referred to by a reference parameter to a function, where the parameter has index - * `index`. - * - * Example: - * ``` - * void func(int n, char* p, float& r); - * ``` - * - `isParameterDeref(1)` holds for the `FunctionInput` that represents the value of `*p` (with - * type `char`) on entry to the function. - * - `isParameterDeref(2)` holds for the `FunctionInput` that represents the value of `r` (with type - * `float`) on entry to the function. - * - There is no `FunctionInput` for which `isParameterDeref(0)` holds, because `n` is neither a - * pointer nor a reference. - */ - predicate isParameterDeref(ParameterIndex index) { none() } - - /** - * Holds if this is the input value pointed to by the `this` pointer of an instance member - * function. - * - * Example: - * ``` - * struct C { - * void mfunc(int n, char* p, float& r) const; - * }; - * ``` - * - `isQualifierObject()` holds for the `FunctionInput` that represents the value of `*this` - * (with type `C const`) on entry to the function. - */ - predicate isQualifierObject() { none() } - - /** - * Holds if this is the input value of the `this` pointer of an instance member function. - * - * Example: - * ``` - * struct C { - * void mfunc(int n, char* p, float& r) const; - * }; - * ``` - * - `isQualifierAddress()` holds for the `FunctionInput` that represents the value of `this` - * (with type `C const *`) on entry to the function. - */ - predicate isQualifierAddress() { none() } - - /** - * Holds if `i >= 0` and `isParameter(i)` holds for this value, or - * if `i = -1` and `isQualifierAddress()` holds for this value. - */ - final predicate isParameterOrQualifierAddress(ParameterIndex i) { - i >= 0 and this.isParameter(i) - or - i = -1 and this.isQualifierAddress() - } - - /** - * Holds if this is the input value pointed to by the return value of a - * function, if the function returns a pointer, or the input value referred - * to by the return value of a function, if the function returns a reference. - * - * Example: - * ``` - * char* getPointer(); - * float& getReference(); - * int getInt(); - * ``` - * - `isReturnValueDeref()` holds for the `FunctionInput` that represents the - * value of `*getPointer()` (with type `char`). - * - `isReturnValueDeref()` holds for the `FunctionInput` that represents the - * value of `getReference()` (with type `float`). - * - There is no `FunctionInput` of `getInt()` for which - * `isReturnValueDeref()` holds because the return type of `getInt()` is - * neither a pointer nor a reference. - * - * Note that data flows in through function return values are relatively - * rare, but they do occur when a function returns a reference to itself, - * part of itself, or one of its other inputs. - */ - predicate isReturnValueDeref() { none() } - - /** - * Holds if `i >= 0` and `isParameterDeref(i)` holds for this value, or - * if `i = -1` and `isQualifierObject()` holds for this value. - */ - final predicate isParameterDerefOrQualifierObject(ParameterIndex i) { - i >= 0 and this.isParameterDeref(i) - or - i = -1 and this.isQualifierObject() - } - } - - /** - * An output from a function. This can be: - * - The value pointed to by one of function's pointer or reference parameters - * - The value pointed to by the function's `this` pointer - * - The function's return value - * - The value pointed to by the function's return value, if the return value is a pointer or - * reference - */ - abstract class FunctionOutput extends string { - FunctionOutput() { none() } - - /** - * Holds if this is the output value pointed to by a pointer parameter to a function, or the - * output value referred to by a reference parameter to a function, where the parameter has - * index `index`. - * - * Example: - * ``` - * void func(int n, char* p, float& r); - * ``` - * - `isParameterDeref(1)` holds for the `FunctionOutput` that represents the value of `*p` (with - * type `char`) on return from the function. - * - `isParameterDeref(2)` holds for the `FunctionOutput` that represents the value of `r` (with - * type `float`) on return from the function. - * - There is no `FunctionOutput` for which `isParameterDeref(0)` holds, because `n` is neither a - * pointer nor a reference. - */ - predicate isParameterDeref(ParameterIndex index) { none() } - - /** - * Holds if this is the output value pointed to by the `this` pointer of an instance member - * function. - * - * Example: - * ``` - * struct C { - * void mfunc(int n, char* p, float& r); - * }; - * ``` - * - `isQualifierObject()` holds for the `FunctionOutput` that represents the value of `*this` - * (with type `C`) on return from the function. - */ - predicate isQualifierObject() { none() } - - /** - * Holds if this is the value returned by a function. - * - * Example: - * ``` - * int getInt(); - * char* getPointer(); - * float& getReference(); - * ``` - * - `isReturnValue()` holds for the `FunctionOutput` that represents the value returned by - * `getInt()` (with type `int`). - * - `isReturnValue()` holds for the `FunctionOutput` that represents the value returned by - * `getPointer()` (with type `char*`). - * - `isReturnValue()` holds for the `FunctionOutput` that represents the "value" of the reference - * returned by `getReference()` (with type `float&`), _not_ the value of the referred-to - * `float`. - */ - predicate isReturnValue() { none() } - - /** - * Holds if this is the output value pointed to by the return value of a function, if the function - * returns a pointer, or the output value referred to by the return value of a function, if the - * function returns a reference. - * - * Example: - * ``` - * char* getPointer(); - * float& getReference(); - * int getInt(); - * ``` - * - `isReturnValueDeref()` holds for the `FunctionOutput` that represents the value of - * `*getPointer()` (with type `char`). - * - `isReturnValueDeref()` holds for the `FunctionOutput` that represents the value of - * `getReference()` (with type `float`). - * - There is no `FunctionOutput` of `getInt()` for which `isReturnValueDeref()` holds because the - * return type of `getInt()` is neither a pointer nor a reference. - */ - predicate isReturnValueDeref() { none() } - - /** - * Holds if `i >= 0` and `isParameterDeref(i)` holds for this is the value, or - * if `i = -1` and `isQualifierObject()` holds for this value. - */ - final predicate isParameterDerefOrQualifierObject(ParameterIndex i) { - i >= 0 and this.isParameterDeref(i) - or - i = -1 and this.isQualifierObject() - } - } - - /** - * Models the aliasing behavior of a library function. - */ - abstract class AliasFunction extends Callable { - /** - * Holds if the address passed to the parameter at the specified index is never retained after - * the function returns. - * - * Example: - * ```csharp - * int* g; - * int* func(int* p, int* q, int* r, int* s, int n) { - * *s = 1; // `s` does not escape. - * g = p; // Stored in global. `p` escapes. - * if (rand()) { - * return q; // `q` escapes via the return value. - * } - * else { - * return r + n; // `r` escapes via the return value, even though an offset has been added. - * } - * } - * ``` - * - * For the above function, the following terms hold: - * - `parameterEscapesOnlyViaReturn(1)` - * - `parameterEscapesOnlyViaReturn(2)` - * - `parameterNeverEscapes(3)` - */ - abstract predicate parameterNeverEscapes(int index); - - /** - * Holds if the address passed to the parameter at the specified index escapes via the return - * value of the function, but does not otherwise escape. See the comment for - * `parameterNeverEscapes` for an example. - */ - abstract predicate parameterEscapesOnlyViaReturn(int index); - - /** - * Holds if the function always returns the value of the parameter at the specified index. - */ - abstract predicate parameterIsAlwaysReturned(int index); - - /** - * Holds if the address passed in via `input` is always propagated to `output`. - */ - abstract predicate hasAddressFlow(FunctionInput input, FunctionOutput output); - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasAnalysisInternal.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasAnalysisInternal.qll deleted file mode 100644 index f3f2d14ab43..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasAnalysisInternal.qll +++ /dev/null @@ -1,3 +0,0 @@ -import experimental.ir.internal.IRCSharpLanguage as Language -import experimental.ir.implementation.raw.IR as InputIR -import AliasConfiguration as Configuration diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasConfiguration.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasConfiguration.qll deleted file mode 100644 index 110e673e1d2..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasConfiguration.qll +++ /dev/null @@ -1,18 +0,0 @@ -private import AliasConfigurationImports - -/** - * A memory allocation that can be tracked by the SimpleSSA alias analysis. - * All automatic variables are tracked. - */ -class Allocation extends IRAutomaticVariable { - VariableAddressInstruction getABaseInstruction() { result.getIRVariable() = this } - - final string getAllocationString() { result = this.toString() } - - predicate alwaysEscapes() { - // An automatic variable only escapes if its address is taken and escapes. - none() - } -} - -predicate phaseNeedsSoundEscapeAnalysis() { any() } diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasConfigurationImports.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasConfigurationImports.qll deleted file mode 100644 index fc29c0d77dd..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/AliasConfigurationImports.qll +++ /dev/null @@ -1 +0,0 @@ -import experimental.ir.implementation.raw.IR diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRBlockImports.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRBlockImports.qll deleted file mode 100644 index c80761a68cf..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRBlockImports.qll +++ /dev/null @@ -1 +0,0 @@ -import experimental.ir.implementation.EdgeKind as EdgeKind diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRConsistencyImports.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRConsistencyImports.qll deleted file mode 100644 index f43546fe76d..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRConsistencyImports.qll +++ /dev/null @@ -1 +0,0 @@ -import experimental.ir.internal.IRCSharpLanguageDebug as LanguageDebug diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRFunctionImports.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRFunctionImports.qll deleted file mode 100644 index 4e9a7d9f3ae..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRFunctionImports.qll +++ /dev/null @@ -1 +0,0 @@ -import experimental.ir.implementation.internal.IRFunctionBase as IRFunctionBase diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRImports.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRImports.qll deleted file mode 100644 index 14dad7400b2..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRImports.qll +++ /dev/null @@ -1,3 +0,0 @@ -import experimental.ir.implementation.EdgeKind as EdgeKind -import experimental.ir.implementation.IRType as IRType -import experimental.ir.implementation.MemoryAccessKind as MemoryAccessKind diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRInternal.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRInternal.qll deleted file mode 100644 index eaf33e0800f..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRInternal.qll +++ /dev/null @@ -1,4 +0,0 @@ -import experimental.ir.internal.IRCSharpLanguage as Language -import SSAConstruction as Construction -import experimental.ir.implementation.IRConfiguration as IRConfiguration -import experimental.ir.implementation.raw.internal.IRConstruction::Raw as Raw diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRVariableImports.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRVariableImports.qll deleted file mode 100644 index bdb4377cbdc..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/IRVariableImports.qll +++ /dev/null @@ -1,5 +0,0 @@ -import experimental.ir.implementation.IRType as IRType -import experimental.ir.implementation.TempVariableTag as TempVariableTag -import experimental.ir.internal.IRUtilities as IRUtilities -import experimental.ir.internal.TempVariableTag as TTempVariableTag -import experimental.ir.implementation.internal.TIRVariable as TIRVariable diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/InstructionImports.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/InstructionImports.qll deleted file mode 100644 index 4bcd2e127c1..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/InstructionImports.qll +++ /dev/null @@ -1,6 +0,0 @@ -import experimental.ir.implementation.EdgeKind as EdgeKind -import experimental.ir.implementation.IRType as IRType -import experimental.ir.implementation.MemoryAccessKind as MemoryAccessKind -import experimental.ir.implementation.Opcode as Opcode -import experimental.ir.implementation.internal.OperandTag as OperandTag -import experimental.ir.internal.Overlap as Overlap diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/OperandImports.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/OperandImports.qll deleted file mode 100644 index 65676caf724..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/OperandImports.qll +++ /dev/null @@ -1,5 +0,0 @@ -import experimental.ir.implementation.MemoryAccessKind as MemoryAccessKind -import experimental.ir.implementation.IRType as IRType -import experimental.ir.internal.Overlap as Overlap -import experimental.ir.implementation.internal.OperandTag as OperandTag -import experimental.ir.implementation.internal.TOperand as TOperand diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/OperandInternal.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/OperandInternal.qll deleted file mode 100644 index e522599abe9..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/OperandInternal.qll +++ /dev/null @@ -1,2 +0,0 @@ -private import experimental.ir.implementation.internal.TOperand -import UnaliasedSsaOperands diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/PrintIRImports.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/PrintIRImports.qll deleted file mode 100644 index 0c5337d57de..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/PrintIRImports.qll +++ /dev/null @@ -1,2 +0,0 @@ -import experimental.ir.IRConfiguration as IRConfiguration -import experimental.ir.internal.IRCSharpLanguageDebug as LanguageDebug diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/PrintSSA.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/PrintSSA.qll deleted file mode 100644 index c7487872512..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/PrintSSA.qll +++ /dev/null @@ -1,157 +0,0 @@ -private import SSAConstructionInternal -private import OldIR -private import Alias -private import SSAConstruction -private import DebugSsa - -bindingset[offset] -private string getKeySuffixForOffset(int offset) { - offset >= 0 and - if offset % 2 = 0 then result = "" else result = "_Chi" -} - -bindingset[offset] -private int getIndexForOffset(int offset) { offset >= 0 and result = offset / 2 } - -/** - * Property provide that dumps the memory access of each result. Useful for debugging SSA - * construction. - */ -class PropertyProvider extends IRPropertyProvider { - override string getInstructionProperty(Instruction instruction, string key) { - key = "ResultMemoryLocation" and - result = - strictconcat(MemoryLocation loc | - loc = getResultMemoryLocation(instruction) - | - loc.toString(), "," - ) - or - key = "ResultVirtualVariable" and - result = - strictconcat(MemoryLocation loc | - loc = getResultMemoryLocation(instruction) - | - loc.getVirtualVariable().toString(), "," - ) - or - key = "OperandMemoryLocation" and - result = - strictconcat(MemoryLocation loc | - loc = getOperandMemoryLocation(instruction.getAnOperand()) - | - loc.toString(), "," - ) - or - key = "OperandVirtualVariable" and - result = - strictconcat(MemoryLocation loc | - loc = getOperandMemoryLocation(instruction.getAnOperand()) - | - loc.getVirtualVariable().toString(), "," - ) - or - exists(MemoryLocation useLocation, IRBlock defBlock, int defRank, int defOffset | - hasDefinitionAtRank(useLocation, _, defBlock, defRank, defOffset) and - defBlock.getInstruction(getIndexForOffset(defOffset)) = instruction and - key = "DefinitionRank" + getKeySuffixForOffset(defOffset) + "[" + useLocation.toString() + "]" and - result = defRank.toString() - ) - or - exists(MemoryLocation useLocation, IRBlock useBlock, int useRank | - hasUseAtRank(useLocation, useBlock, useRank, instruction) and - key = "UseRank[" + useLocation.toString() + "]" and - result = useRank.toString() - ) - or - exists(MemoryLocation useLocation, IRBlock defBlock, int defRank, int defOffset | - hasDefinitionAtRank(useLocation, _, defBlock, defRank, defOffset) and - defBlock.getInstruction(getIndexForOffset(defOffset)) = instruction and - key = - "DefinitionReachesUse" + getKeySuffixForOffset(defOffset) + "[" + useLocation.toString() + - "]" and - result = - strictconcat(IRBlock useBlock, int useRank, int useIndex | - exists(Instruction useInstruction | - hasUseAtRank(useLocation, useBlock, useRank, useInstruction) and - useBlock.getInstruction(useIndex) = useInstruction and - definitionReachesUse(useLocation, defBlock, defRank, useBlock, useRank) - ) - | - useBlock.getDisplayIndex().toString() + "_" + useIndex, ", " - order by - useBlock.getDisplayIndex(), useIndex - ) - ) - } - - override string getBlockProperty(IRBlock block, string key) { - exists(MemoryLocation useLocation, int defRank, int defIndex | - hasDefinitionAtRank(useLocation, _, block, defRank, defIndex) and - defIndex = -1 and - key = "DefinitionRank(Phi)[" + useLocation.toString() + "]" and - result = defRank.toString() - ) - or - exists(MemoryLocation useLocation, MemoryLocation defLocation, int defRank, int defIndex | - hasDefinitionAtRank(useLocation, defLocation, block, defRank, defIndex) and - defIndex = -1 and - key = "DefinitionReachesUse(Phi)[" + useLocation.toString() + "]" and - result = - strictconcat(IRBlock useBlock, int useRank, int useIndex | - exists(Instruction useInstruction | - hasUseAtRank(useLocation, useBlock, useRank, useInstruction) and - useBlock.getInstruction(useIndex) = useInstruction and - definitionReachesUse(useLocation, block, defRank, useBlock, useRank) and - exists(getOverlap(defLocation, useLocation)) - ) - | - useBlock.getDisplayIndex().toString() + "_" + useIndex, ", " - order by - useBlock.getDisplayIndex(), useIndex - ) - ) - or - exists( - MemoryLocation useLocation, IRBlock predBlock, IRBlock defBlock, int defIndex, Overlap overlap - | - hasPhiOperandDefinition(_, useLocation, block, predBlock, defBlock, defIndex) and - key = - "PhiUse[" + useLocation.toString() + " from " + predBlock.getDisplayIndex().toString() + "]" and - result = - defBlock.getDisplayIndex().toString() + "_" + defIndex + " (" + overlap.toString() + ")" - ) - or - key = "LiveOnEntry" and - result = - strictconcat(MemoryLocation useLocation | - locationLiveOnEntryToBlock(useLocation, block) - | - useLocation.toString(), ", " order by useLocation.toString() - ) - or - key = "LiveOnExit" and - result = - strictconcat(MemoryLocation useLocation | - locationLiveOnExitFromBlock(useLocation, block) - | - useLocation.toString(), ", " order by useLocation.toString() - ) - or - key = "DefsLiveOnEntry" and - result = - strictconcat(MemoryLocation defLocation | - definitionLiveOnEntryToBlock(defLocation, block) - | - defLocation.toString(), ", " order by defLocation.toString() - ) - or - key = "DefsLiveOnExit" and - result = - strictconcat(MemoryLocation defLocation | - definitionLiveOnExitFromBlock(defLocation, block) - | - defLocation.toString(), ", " order by defLocation.toString() - ) - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConsistency.ql b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConsistency.ql deleted file mode 100644 index d4d8e29fb31..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConsistency.ql +++ /dev/null @@ -1,8 +0,0 @@ -/** - * @name Unaliased SSA Consistency Check - * @description Performs consistency checks on the SSA construction. This query should have no results. - * @kind table - * @id cs/unaliased-ssa-consistency-check - */ - -import SSAConsistency diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConsistency.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConsistency.qll deleted file mode 100644 index 0fb108f0b56..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConsistency.qll +++ /dev/null @@ -1,55 +0,0 @@ -import SsaConsistency -import SSAConsistencyImports - -module SsaConsistency { - /** - * Holds if a `MemoryOperand` has more than one `MemoryLocation` assigned by alias analysis. - */ - query predicate multipleOperandMemoryLocations( - OldIR::MemoryOperand operand, string message, OldIR::IRFunction func, string funcText - ) { - exists(int locationCount | - locationCount = strictcount(Alias::getOperandMemoryLocation(operand)) and - locationCount > 1 and - func = operand.getEnclosingIRFunction() and - funcText = LanguageDebug::getIdentityString(func.getFunction()) and - message = - operand.getUse().toString() + " " + "Operand has " + locationCount.toString() + - " memory accesses in function '$@': " + - strictconcat(Alias::getOperandMemoryLocation(operand).toString(), ", ") - ) - } - - /** - * Holds if a `MemoryLocation` does not have an associated `VirtualVariable`. - */ - query predicate missingVirtualVariableForMemoryLocation( - Alias::MemoryLocation location, string message, OldIR::IRFunction func, string funcText - ) { - not exists(location.getVirtualVariable()) and - func = location.getIRFunction() and - funcText = LanguageDebug::getIdentityString(func.getFunction()) and - message = "Memory location has no virtual variable in function '$@'." - } - - /** - * Holds if a `MemoryLocation` is a member of more than one `VirtualVariable`. - */ - query predicate multipleVirtualVariablesForMemoryLocation( - Alias::MemoryLocation location, string message, OldIR::IRFunction func, string funcText - ) { - exists(int vvarCount | - vvarCount = strictcount(location.getVirtualVariable()) and - vvarCount > 1 and - func = location.getIRFunction() and - funcText = LanguageDebug::getIdentityString(func.getFunction()) and - message = - "Memory location has " + vvarCount.toString() + " virtual variables in function '$@': (" + - concat(Alias::VirtualVariable vvar | - vvar = location.getVirtualVariable() - | - vvar.toString(), ", " - ) + ")." - ) - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConsistencyImports.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConsistencyImports.qll deleted file mode 100644 index 70b803a818e..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConsistencyImports.qll +++ /dev/null @@ -1,3 +0,0 @@ -import experimental.ir.implementation.raw.IR as OldIR -import SimpleSSA as Alias -import experimental.ir.internal.IRCSharpLanguageDebug as LanguageDebug diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll deleted file mode 100644 index 209c42726b7..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll +++ /dev/null @@ -1,1056 +0,0 @@ -import SSAConstructionInternal -private import SSAConstructionImports as Imports -private import Imports::Opcode -private import Imports::OperandTag -private import Imports::Overlap -private import Imports::TInstruction -private import Imports::RawIR as RawIR -private import SsaInstructions -private import SsaOperands -private import NewIR - -private class OldBlock = Reachability::ReachableBlock; - -private class OldInstruction = Reachability::ReachableInstruction; - -import Cached - -cached -private module Cached { - cached - predicate hasPhiInstructionCached( - OldInstruction blockStartInstr, Alias::MemoryLocation defLocation - ) { - exists(OldBlock oldBlock | - definitionHasPhiNode(defLocation, oldBlock) and - blockStartInstr = oldBlock.getFirstInstruction() - ) - } - - cached - predicate hasChiInstructionCached(OldInstruction primaryInstruction) { - hasChiNode(_, primaryInstruction) - } - - cached - predicate hasUnreachedInstructionCached(IRFunction irFunc) { - exists(OldIR::Instruction oldInstruction | - irFunc = oldInstruction.getEnclosingIRFunction() and - ( - Reachability::isInfeasibleInstructionSuccessor(oldInstruction, _) - or - oldInstruction.getOpcode() instanceof Opcode::Unreached - ) - ) - } - - class TStageInstruction = - TRawInstruction or TPhiInstruction or TChiInstruction or TUnreachedInstruction; - - /** - * If `oldInstruction` is a `Phi` instruction that has exactly one reachable predecessor block, - * this predicate returns the `PhiInputOperand` corresponding to that predecessor block. - * Otherwise, this predicate does not hold. - */ - private OldIR::PhiInputOperand getDegeneratePhiOperand(OldInstruction oldInstruction) { - result = - unique(OldIR::PhiInputOperand operand | - operand = oldInstruction.(OldIR::PhiInstruction).getAnInputOperand() and - operand.getPredecessorBlock() instanceof OldBlock - ) - } - - cached - predicate hasInstruction(TStageInstruction instr) { - instr instanceof TRawInstruction and instr instanceof OldInstruction - or - instr = phiInstruction(_, _) - or - instr = reusedPhiInstruction(_) and - // Check that the phi instruction is *not* degenerate, but we can't use - // getDegeneratePhiOperand in the first stage with phi instructions - not exists( - unique(OldIR::PhiInputOperand operand | - operand = instr.(OldIR::PhiInstruction).getAnInputOperand() and - operand.getPredecessorBlock() instanceof OldBlock - ) - ) - or - instr instanceof TChiInstruction - or - instr instanceof TUnreachedInstruction - } - - cached - IRBlock getNewBlock(OldBlock oldBlock) { - exists(Instruction newEnd, OldIR::Instruction oldEnd | - ( - result.getLastInstruction() = newEnd and - not newEnd instanceof ChiInstruction - or - newEnd = result.getLastInstruction().(ChiInstruction).getAPredecessor() // does this work? - ) and - ( - oldBlock.getLastInstruction() = oldEnd and - not oldEnd instanceof OldIR::ChiInstruction - or - oldEnd = oldBlock.getLastInstruction().(OldIR::ChiInstruction).getAPredecessor() // does this work? - ) and - oldEnd = getNewInstruction(newEnd) - ) - } - - /** - * Gets the block from the old IR that corresponds to `newBlock`. - */ - private OldBlock getOldBlock(IRBlock newBlock) { getNewBlock(result) = newBlock } - - /** - * Holds if this iteration of SSA can model the def/use information for the result of - * `oldInstruction`, either because alias analysis has determined a memory location for that - * result, or because a previous iteration of the IR already computed that def/use information - * completely. - */ - private predicate canModelResultForOldInstruction(OldInstruction oldInstruction) { - // We're modeling the result's memory location ourselves. - exists(Alias::getResultMemoryLocation(oldInstruction)) - or - // This result was already modeled by a previous iteration of SSA. - Alias::canReuseSsaForOldResult(oldInstruction) - } - - cached - predicate hasModeledMemoryResult(Instruction instruction) { - canModelResultForOldInstruction(getOldInstruction(instruction)) or - instruction instanceof PhiInstruction or // Phis always have modeled results - instruction instanceof ChiInstruction // Chis always have modeled results - } - - cached - predicate hasConflatedMemoryResult(Instruction instruction) { - instruction instanceof AliasedDefinitionInstruction - or - instruction.getOpcode() instanceof Opcode::InitializeNonLocal - or - // Chi instructions track virtual variables, and therefore a chi instruction is - // conflated if it's associated with the aliased virtual variable. - exists(OldInstruction oldInstruction | instruction = getChi(oldInstruction) | - Alias::getResultMemoryLocation(oldInstruction).getVirtualVariable() instanceof - Alias::AliasedVirtualVariable - ) - or - // Phi instructions track locations, and therefore a phi instruction is - // conflated if it's associated with a conflated location. - exists(Alias::MemoryLocation location | - instruction = getPhi(_, location) and - not exists(location.getAllocation()) - ) - } - - pragma[noopt] - private predicate hasMemoryOperandDefinition( - OldInstruction oldInstruction, OldIR::NonPhiMemoryOperand oldOperand, Overlap overlap, - Instruction instr - ) { - oldOperand = oldInstruction.getAnOperand() and - oldOperand instanceof OldIR::NonPhiMemoryOperand and - exists( - OldBlock useBlock, int useRank, Alias::MemoryLocation useLocation, - Alias::MemoryLocation defLocation, OldBlock defBlock, int defRank, int defOffset, - Alias::MemoryLocation actualDefLocation - | - useLocation = Alias::getOperandMemoryLocation(oldOperand) and - hasUseAtRank(useLocation, useBlock, useRank, oldInstruction) and - definitionReachesUse(useLocation, defBlock, defRank, useBlock, useRank) and - hasDefinitionAtRank(useLocation, defLocation, defBlock, defRank, defOffset) and - instr = getDefinitionOrChiInstruction(defBlock, defOffset, defLocation, actualDefLocation) and - overlap = Alias::getOverlap(actualDefLocation, useLocation) - ) - } - - /** - * Gets the new definition instruction for `oldOperand` based on `oldOperand`'s definition in the - * old IR. Usually, this will just get the old definition of `oldOperand` and map it to the - * corresponding new instruction. However, if the old definition of `oldOperand` is a `Phi` - * instruction that is now degenerate due all but one of its predecessor branches being - * unreachable, this predicate will recurse through any degenerate `Phi` instructions to find the - * true definition. - */ - private Instruction getNewDefinitionFromOldSsa(OldIR::MemoryOperand oldOperand, Overlap overlap) { - exists(Overlap originalOverlap | - originalOverlap = oldOperand.getDefinitionOverlap() and - ( - result = getNewInstruction(oldOperand.getAnyDef()) and - overlap = originalOverlap - or - exists(OldIR::PhiInputOperand phiOperand, Overlap phiOperandOverlap | - phiOperand = getDegeneratePhiOperand(oldOperand.getAnyDef()) and - result = getNewDefinitionFromOldSsa(phiOperand, phiOperandOverlap) and - overlap = - combineOverlap(pragma[only_bind_out](phiOperandOverlap), - pragma[only_bind_out](originalOverlap)) - ) - ) - ) - } - - cached - private Instruction getMemoryOperandDefinition0( - Instruction instruction, MemoryOperandTag tag, Overlap overlap - ) { - exists(OldInstruction oldInstruction, OldIR::NonPhiMemoryOperand oldOperand | - oldInstruction = getOldInstruction(instruction) and - oldOperand = oldInstruction.getAnOperand() and - tag = oldOperand.getOperandTag() and - hasMemoryOperandDefinition(oldInstruction, oldOperand, overlap, result) - ) - or - instruction = getChi(getOldInstruction(result)) and - tag instanceof ChiPartialOperandTag and - overlap instanceof MustExactlyOverlap - or - tag instanceof ChiTotalOperandTag and - result = getChiInstructionTotalOperand(instruction) and - overlap instanceof MustExactlyOverlap - } - - cached - Instruction getMemoryOperandDefinition( - Instruction instruction, MemoryOperandTag tag, Overlap overlap - ) { - // getMemoryOperandDefinition0 currently has a bug where it can match with multiple overlaps. - // This predicate ensures that the chosen overlap is the most conservative if there's any doubt. - result = getMemoryOperandDefinition0(instruction, tag, overlap) and - not ( - overlap instanceof MustExactlyOverlap and - exists(MustTotallyOverlap o | exists(getMemoryOperandDefinition0(instruction, tag, o))) - ) - or - exists(OldIR::NonPhiMemoryOperand oldOperand | - result = getNewDefinitionFromOldSsa(oldOperand, overlap) and - oldOperand.getUse() = instruction and - tag = oldOperand.getOperandTag() - ) - } - - /** - * Holds if `operand` totally overlaps with its definition and consumes the bit range - * `[startBitOffset, endBitOffset)`. - */ - cached - predicate getUsedInterval(NonPhiMemoryOperand operand, int startBitOffset, int endBitOffset) { - exists(Alias::MemoryLocation location, OldIR::NonPhiMemoryOperand oldOperand | - oldOperand = operand.getUse().(OldInstruction).getAnOperand() and - location = Alias::getOperandMemoryLocation(oldOperand) and - startBitOffset = Alias::getStartBitOffset(location) and - endBitOffset = Alias::getEndBitOffset(location) - ) - } - - /** - * Holds if the `ChiPartialOperand` only partially overlaps with the `ChiTotalOperand`. - * This means that the `ChiPartialOperand` will not override the entire memory associated - * with the `ChiTotalOperand`. - */ - cached - predicate chiOnlyPartiallyUpdatesLocation(ChiInstruction chi) { - exists(Alias::MemoryLocation location, OldInstruction oldInstruction | - oldInstruction = getOldInstruction(chi.getPartial()) and - location = Alias::getResultMemoryLocation(oldInstruction) - | - Alias::getStartBitOffset(location) != 0 or - Alias::getEndBitOffset(location) != 8 * location.getType().getByteSize() - ) - } - - /** - * Holds if `instr` is part of a cycle in the operand graph that doesn't go - * through a phi instruction and therefore should be impossible. - * - * For performance reasons, this predicate is not implemented (never holds) - * for the SSA stages of the IR. - */ - cached - predicate isInCycle(Instruction instr) { none() } - - cached - Language::LanguageType getInstructionOperandType(Instruction instr, TypedOperandTag tag) { - exists(OldInstruction oldInstruction, OldIR::TypedOperand oldOperand | - oldInstruction = getOldInstruction(instr) and - oldOperand = oldInstruction.getAnOperand() and - tag = oldOperand.getOperandTag() and - result = oldOperand.getLanguageType() - ) - } - - /** - * Gets the new definition instruction for the operand of `instr` that flows from the block - * `newPredecessorBlock`, based on that operand's definition in the old IR. - */ - private Instruction getNewPhiOperandDefinitionFromOldSsa( - Instruction instr, IRBlock newPredecessorBlock, Overlap overlap - ) { - exists(OldIR::PhiInstruction oldPhi, OldIR::PhiInputOperand oldOperand | - oldPhi = getOldInstruction(instr) and - oldOperand = oldPhi.getInputOperand(getOldBlock(newPredecessorBlock)) and - result = getNewDefinitionFromOldSsa(oldOperand, overlap) - ) - } - - pragma[noopt] - cached - Instruction getPhiOperandDefinition( - Instruction instr, IRBlock newPredecessorBlock, Overlap overlap - ) { - exists( - Alias::MemoryLocation defLocation, Alias::MemoryLocation useLocation, OldBlock phiBlock, - OldBlock predBlock, OldBlock defBlock, int defOffset, Alias::MemoryLocation actualDefLocation - | - hasPhiOperandDefinition(defLocation, useLocation, phiBlock, predBlock, defBlock, defOffset) and - instr = getPhi(phiBlock, useLocation) and - newPredecessorBlock = getNewBlock(predBlock) and - result = getDefinitionOrChiInstruction(defBlock, defOffset, defLocation, actualDefLocation) and - overlap = Alias::getOverlap(actualDefLocation, useLocation) - ) - or - result = getNewPhiOperandDefinitionFromOldSsa(instr, newPredecessorBlock, overlap) - } - - cached - Instruction getChiInstructionTotalOperand(ChiInstruction chiInstr) { - exists( - Alias::VirtualVariable vvar, OldInstruction oldInstr, OldBlock defBlock, int defRank, - int defOffset, OldBlock useBlock, int useRank - | - chiInstr = getChi(oldInstr) and - vvar = Alias::getResultMemoryLocation(oldInstr).getVirtualVariable() and - hasDefinitionAtRank(vvar, _, defBlock, defRank, defOffset) and - hasUseAtRank(vvar, useBlock, useRank, oldInstr) and - definitionReachesUse(vvar, defBlock, defRank, useBlock, useRank) and - result = getDefinitionOrChiInstruction(defBlock, defOffset, vvar, _) - ) - } - - cached - Instruction getPhiInstructionBlockStart(PhiInstruction instr) { - exists(OldBlock oldBlock | - ( - instr = getPhi(oldBlock, _) - or - // Any `Phi` that we propagated from the previous iteration stays in the same block. - getOldInstruction(instr).getBlock() = oldBlock - ) and - result = getNewInstruction(oldBlock.getFirstInstruction()) - ) - } - - /* - * This adds Chi nodes to the instruction successor relation; if an instruction has a Chi node, - * that node is its successor in the new successor relation, and the Chi node's successors are - * the new instructions generated from the successors of the old instruction - */ - - cached - Instruction getInstructionSuccessor(Instruction instruction, EdgeKind kind) { - if hasChiNode(_, getOldInstruction(instruction)) - then - result = getChi(getOldInstruction(instruction)) and - kind instanceof GotoEdge - else - exists(OldInstruction oldInstruction | - ( - oldInstruction = getOldInstruction(instruction) - or - instruction = getChi(oldInstruction) - ) and - ( - if Reachability::isInfeasibleInstructionSuccessor(oldInstruction, kind) - then result = unreachedInstruction(instruction.getEnclosingIRFunction()) - else result = getNewInstruction(oldInstruction.getSuccessor(kind)) - ) - ) - } - - cached - Instruction getInstructionBackEdgeSuccessor(Instruction instruction, EdgeKind kind) { - exists(OldInstruction oldInstruction | - not Reachability::isInfeasibleInstructionSuccessor(oldInstruction, kind) and - // There is only one case for the translation into `result` because the - // SSA construction never inserts extra instructions _before_ an existing - // instruction. - getOldInstruction(result) = oldInstruction.getBackEdgeSuccessor(kind) and - // There are two cases for the translation into `instruction` because the - // SSA construction might have inserted a chi node _after_ - // `oldInstruction`, in which case the back edge should come out of the - // chi node instead. - if hasChiNode(_, oldInstruction) - then instruction = getChi(oldInstruction) - else instruction = getNewInstruction(oldInstruction) - ) - } - - cached - Language::AST getInstructionAst(Instruction instr) { - result = getOldInstruction(instr).getAst() - or - exists(RawIR::Instruction blockStartInstr | - instr = phiInstruction(blockStartInstr, _) and - result = blockStartInstr.getAst() - ) - or - exists(RawIR::Instruction primaryInstr | - instr = chiInstruction(primaryInstr) and - result = primaryInstr.getAst() - ) - or - exists(IRFunctionBase irFunc | - instr = unreachedInstruction(irFunc) and result = irFunc.getFunction() - ) - } - - cached - Language::LanguageType getInstructionResultType(Instruction instr) { - result = instr.(RawIR::Instruction).getResultLanguageType() - or - exists(Alias::MemoryLocation defLocation | - instr = phiInstruction(_, defLocation) and - result = defLocation.getType() - ) - or - exists(Instruction primaryInstr, Alias::VirtualVariable vvar | - instr = chiInstruction(primaryInstr) and - hasChiNode(vvar, primaryInstr) and - result = vvar.getType() - ) - or - instr = reusedPhiInstruction(_) and - result = instr.(OldInstruction).getResultLanguageType() - or - instr = unreachedInstruction(_) and result = Language::getVoidType() - } - - /** - * Holds if `opcode` is the opcode that specifies the operation performed by `instr`. - * - * The parameters are ordered such that they produce a clean join (with no need for reordering) - * in the characteristic predicates of the `Instruction` subclasses. - */ - cached - predicate getInstructionOpcode(Opcode opcode, Instruction instr) { - opcode = getOldInstruction(instr).getOpcode() - or - instr = phiInstruction(_, _) and opcode instanceof Opcode::Phi - or - instr = chiInstruction(_) and opcode instanceof Opcode::Chi - or - instr = unreachedInstruction(_) and opcode instanceof Opcode::Unreached - } - - cached - IRFunctionBase getInstructionEnclosingIRFunction(Instruction instr) { - result = getOldInstruction(instr).getEnclosingIRFunction() - or - exists(OldInstruction blockStartInstr | - instr = phiInstruction(blockStartInstr, _) and - result = blockStartInstr.getEnclosingIRFunction() - ) - or - exists(OldInstruction primaryInstr | - instr = chiInstruction(primaryInstr) and result = primaryInstr.getEnclosingIRFunction() - ) - or - instr = unreachedInstruction(result) - } - - cached - Instruction getPrimaryInstructionForSideEffect(Instruction instruction) { - exists(OldIR::SideEffectInstruction oldInstruction | - oldInstruction = getOldInstruction(instruction) and - result = getNewInstruction(oldInstruction.getPrimaryInstruction()) - ) - or - exists(OldIR::Instruction oldInstruction | - instruction = getChi(oldInstruction) and - result = getNewInstruction(oldInstruction) - ) - } -} - -private Instruction getNewInstruction(OldInstruction instr) { getOldInstruction(result) = instr } - -private OldInstruction getOldInstruction(Instruction instr) { instr = result } - -private ChiInstruction getChi(OldInstruction primaryInstr) { result = chiInstruction(primaryInstr) } - -private PhiInstruction getPhi(OldBlock defBlock, Alias::MemoryLocation defLocation) { - result = phiInstruction(defBlock.getFirstInstruction(), defLocation) -} - -/** - * Holds if instruction `def` needs to have a `Chi` instruction inserted after it, to account for a partial definition - * of a virtual variable. The `Chi` instruction provides a definition of the entire virtual variable of which the - * original definition location is a member. - */ -private predicate hasChiNode(Alias::VirtualVariable vvar, OldInstruction def) { - exists(Alias::MemoryLocation defLocation | - defLocation = Alias::getResultMemoryLocation(def) and - defLocation.getVirtualVariable() = vvar and - // If the definition totally (or exactly) overlaps the virtual variable, then there's no need for a `Chi` - // instruction. - Alias::getOverlap(defLocation, vvar) instanceof MayPartiallyOverlap - ) -} - -private import PhiInsertion - -/** - * Module to handle insertion of `Phi` instructions at the correct blocks. We insert a `Phi` instruction at the - * beginning of a block for a given location when that block is on the dominance frontier of a definition of the - * location and there is a use of that location reachable from that block without an intervening definition of the - * location. - * Within the approach outlined above, we treat a location slightly differently depending on whether or not it is a - * virtual variable. For a virtual variable, we will insert a `Phi` instruction on the dominance frontier if there is - * a use of any member location of that virtual variable that is reachable from the `Phi` instruction. For a location - * that is not a virtual variable, we insert a `Phi` instruction only if there is an exactly-overlapping use of the - * location reachable from the `Phi` instruction. This ensures that we insert a `Phi` instruction for a non-virtual - * variable only if doing so would allow dataflow analysis to get a more precise result than if we just used a `Phi` - * instruction for the virtual variable as a whole. - */ -private module PhiInsertion { - /** - * Holds if `phiBlock` is a block in the dominance frontier of a block that has a definition of the - * memory location `defLocation`. - */ - pragma[noinline] - private predicate dominanceFrontierOfDefinition( - Alias::MemoryLocation defLocation, OldBlock phiBlock - ) { - exists(OldBlock defBlock | - phiBlock = Dominance::getDominanceFrontier(defBlock) and - definitionHasDefinitionInBlock(defLocation, defBlock) - ) - } - - /** - * Holds if a `Phi` instruction needs to be inserted for location `defLocation` at the beginning of block `phiBlock`. - */ - predicate definitionHasPhiNode(Alias::MemoryLocation defLocation, OldBlock phiBlock) { - dominanceFrontierOfDefinition(defLocation, phiBlock) and - /* We can also eliminate those nodes where the definition is not live on any incoming edge */ - definitionLiveOnEntryToBlock(defLocation, phiBlock) - } - - /** - * Holds if the memory location `defLocation` has a definition in block `block`, either because of an existing - * instruction, a `Phi` node, or a `Chi` node. - */ - private predicate definitionHasDefinitionInBlock(Alias::MemoryLocation defLocation, OldBlock block) { - definitionHasPhiNode(defLocation, block) - or - exists(OldInstruction def, Alias::MemoryLocation resultLocation | - def.getBlock() = block and - resultLocation = Alias::getResultMemoryLocation(def) and - ( - defLocation = resultLocation - or - // For a virtual variable, any definition of a member location will either generate a `Chi` node that defines - // the virtual variable, or will totally overlap the virtual variable. Either way, treat this as a definition of - // the virtual variable. - defLocation = resultLocation.getVirtualVariable() - ) - ) - } - - /** - * Holds if there is a use at (`block`, `index`) that could consume the result of a `Phi` instruction for - * `defLocation`. - */ - private predicate definitionHasUse(Alias::MemoryLocation defLocation, OldBlock block, int index) { - exists(OldInstruction use | - block.getInstruction(index) = use and - if defLocation instanceof Alias::VirtualVariable - then ( - exists(Alias::MemoryLocation useLocation | - // For a virtual variable, any use of a location that is a member of the virtual variable counts as a use. - useLocation = Alias::getOperandMemoryLocation(use.getAnOperand()) and - defLocation = useLocation.getVirtualVariable() - ) - or - // A `Chi` instruction consumes the enclosing virtual variable of its use location. - hasChiNode(defLocation, use) - ) else ( - // For other locations, only an exactly-overlapping use of the same location counts as a use. - defLocation = Alias::getOperandMemoryLocation(use.getAnOperand()) and - Alias::getOverlap(defLocation, defLocation) instanceof MustExactlyOverlap - ) - ) - } - - /** - * Holds if the location `defLocation` is redefined at (`block`, `index`). A location is considered "redefined" if - * there is a definition that would prevent a previous definition of `defLocation` from being consumed as the operand - * of a `Phi` node that occurs after the redefinition. - */ - private predicate definitionHasRedefinition( - Alias::MemoryLocation defLocation, OldBlock block, int index - ) { - exists(OldInstruction redef, Alias::MemoryLocation redefLocation | - block.getInstruction(index) = redef and - redefLocation = Alias::getResultMemoryLocation(redef) and - if defLocation instanceof Alias::VirtualVariable - then - // For a virtual variable, the definition may be consumed by any use of a location that is a member of the - // virtual variable. Thus, the definition is live until a subsequent redefinition of the entire virtual - // variable. - exists(Overlap overlap | - overlap = Alias::getOverlap(redefLocation, defLocation) and - not overlap instanceof MayPartiallyOverlap - ) - else - // For other locations, the definition may only be consumed by an exactly-overlapping use of the same location. - // Thus, the definition is live until a subsequent definition of any location that may overlap the original - // definition location. - exists(Alias::getOverlap(redefLocation, defLocation)) - ) - } - - /** - * Holds if the definition `defLocation` is live on entry to block `block`. The definition is live if there is at - * least one use of that definition before any intervening instruction that redefines the definition location. - */ - predicate definitionLiveOnEntryToBlock(Alias::MemoryLocation defLocation, OldBlock block) { - exists(int firstAccess | - definitionHasUse(defLocation, block, firstAccess) and - firstAccess = - min(int index | - definitionHasUse(defLocation, block, index) - or - definitionHasRedefinition(defLocation, block, index) - ) - ) - or - definitionLiveOnExitFromBlock(defLocation, block) and - not definitionHasRedefinition(defLocation, block, _) - } - - /** - * Holds if the definition `defLocation` is live on exit from block `block`. The definition is live on exit if it is - * live on entry to any of the successors of `block`. - */ - pragma[noinline] - predicate definitionLiveOnExitFromBlock(Alias::MemoryLocation defLocation, OldBlock block) { - definitionLiveOnEntryToBlock(defLocation, block.getAFeasibleSuccessor()) - } -} - -private import DefUse - -/** - * Module containing the predicates that connect uses to their reaching definition. The reaching definitions are - * computed separately for each unique use `MemoryLocation`. An instruction is treated as a definition of a use location - * if the defined location overlaps the use location in any way. Thus, a single instruction may serve as a definition - * for multiple use locations, since a single definition location may overlap many use locations. - * - * Definitions and uses are identified by a block and an integer "offset". An offset of -1 indicates the definition - * from a `Phi` instruction at the beginning of the block. An offset of 2*i indicates a definition or use on the - * instruction at index `i` in the block. An offset of 2*i+1 indicates a definition or use on the `Chi` instruction that - * will be inserted immediately after the instruction at index `i` in the block. - * - * For a given use location, each definition and use is also assigned a "rank" within its block. The rank is simply the - * one-based index of that definition or use within the list of definitions and uses of that location within the block, - * ordered by offset. The rank allows the various reachability predicates to be computed more efficiently than they - * would if based solely on offset, since the set of possible ranks is dense while the set of possible offsets is - * potentially very sparse. - */ -module DefUse { - /** - * Gets the `Instruction` for the definition at offset `defOffset` in block `defBlock`. - */ - Instruction getDefinitionOrChiInstruction( - OldBlock defBlock, int defOffset, Alias::MemoryLocation defLocation, - Alias::MemoryLocation actualDefLocation - ) { - exists(OldInstruction oldInstr, int oldOffset | - oldInstr = defBlock.getInstruction(oldOffset) and - oldOffset >= 0 - | - // An odd offset corresponds to the `Chi` instruction. - defOffset = oldOffset * 2 + 1 and - result = getChi(oldInstr) and - ( - defLocation = Alias::getResultMemoryLocation(oldInstr) or - defLocation = Alias::getResultMemoryLocation(oldInstr).getVirtualVariable() - ) and - actualDefLocation = defLocation.getVirtualVariable() - or - // An even offset corresponds to the original instruction. - defOffset = oldOffset * 2 and - result = getNewInstruction(oldInstr) and - ( - defLocation = Alias::getResultMemoryLocation(oldInstr) or - defLocation = Alias::getResultMemoryLocation(oldInstr).getVirtualVariable() - ) and - actualDefLocation = defLocation - ) - or - defOffset = -1 and - hasDefinition(_, defLocation, defBlock, defOffset) and - result = getPhi(defBlock, defLocation) and - actualDefLocation = defLocation - } - - /** - * Gets the rank index of a hypothetical use one instruction past the end of - * the block. This index can be used to determine if a definition reaches the - * end of the block, even if the definition is the last instruction in the - * block. - */ - private int exitRank(Alias::MemoryLocation useLocation, OldBlock block) { - result = max(int rankIndex | defUseRank(useLocation, block, rankIndex, _)) + 1 - } - - /** - * Holds if a definition that overlaps `useLocation` at (`defBlock`, `defRank`) reaches the use of `useLocation` at - * (`useBlock`, `useRank`) without any intervening definitions that overlap `useLocation`, where `defBlock` and - * `useBlock` are the same block. - */ - private predicate definitionReachesUseWithinBlock( - Alias::MemoryLocation useLocation, OldBlock defBlock, int defRank, OldBlock useBlock, - int useRank - ) { - defBlock = useBlock and - hasDefinitionAtRank(useLocation, _, defBlock, defRank, _) and - hasUseAtRank(useLocation, useBlock, useRank, _) and - definitionReachesRank(useLocation, defBlock, defRank, useRank) - } - - /** - * Holds if a definition that overlaps `useLocation` at (`defBlock`, `defRank`) reaches the use of `useLocation` at - * (`useBlock`, `useRank`) without any intervening definitions that overlap `useLocation`. - */ - predicate definitionReachesUse( - Alias::MemoryLocation useLocation, OldBlock defBlock, int defRank, OldBlock useBlock, - int useRank - ) { - hasUseAtRank(useLocation, useBlock, useRank, _) and - ( - definitionReachesUseWithinBlock(useLocation, defBlock, defRank, useBlock, useRank) - or - definitionReachesEndOfBlock(useLocation, defBlock, defRank, useBlock.getAFeasiblePredecessor()) and - not definitionReachesUseWithinBlock(useLocation, useBlock, _, useBlock, useRank) - ) - } - - /** - * Holds if the definition that overlaps `useLocation` at `(block, defRank)` reaches the rank - * index `reachesRank` in block `block`. - */ - private predicate definitionReachesRank( - Alias::MemoryLocation useLocation, OldBlock block, int defRank, int reachesRank - ) { - // The def always reaches the next use, even if there is also a def on the - // use instruction. - hasDefinitionAtRank(useLocation, _, block, defRank, _) and - reachesRank = defRank + 1 - or - // If the def reached the previous rank, it also reaches the current rank, - // unless there was another def at the previous rank. - exists(int prevRank | - reachesRank = prevRank + 1 and - definitionReachesRank(useLocation, block, defRank, prevRank) and - not prevRank = exitRank(useLocation, block) and - not hasDefinitionAtRank(useLocation, _, block, prevRank, _) - ) - } - - /** - * Holds if the definition that overlaps `useLocation` at `(defBlock, defRank)` reaches the end of - * block `block` without any intervening definitions that overlap `useLocation`. - */ - predicate definitionReachesEndOfBlock( - Alias::MemoryLocation useLocation, OldBlock defBlock, int defRank, OldBlock block - ) { - hasDefinitionAtRank(useLocation, _, defBlock, defRank, _) and - ( - // If we're looking at the def's own block, just see if it reaches the exit - // rank of the block. - block = defBlock and - locationLiveOnExitFromBlock(useLocation, defBlock) and - definitionReachesRank(useLocation, defBlock, defRank, exitRank(useLocation, defBlock)) - or - exists(OldBlock idom | - definitionReachesEndOfBlock(useLocation, defBlock, defRank, idom) and - noDefinitionsSinceIDominator(useLocation, idom, block) - ) - ) - } - - pragma[noinline] - private predicate noDefinitionsSinceIDominator( - Alias::MemoryLocation useLocation, OldBlock idom, OldBlock block - ) { - Dominance::blockImmediatelyDominates(idom, block) and // It is sufficient to traverse the dominator graph, cf. discussion above. - locationLiveOnExitFromBlock(useLocation, block) and - not hasDefinition(useLocation, _, block, _) - } - - /** - * Holds if the specified `useLocation` is live on entry to `block`. This holds if there is a use of `useLocation` - * that is reachable from the start of `block` without passing through a definition that overlaps `useLocation`. - * Note that even a partially-overlapping definition blocks liveness, because such a definition will insert a `Chi` - * instruction whose result totally overlaps the location. - */ - predicate locationLiveOnEntryToBlock(Alias::MemoryLocation useLocation, OldBlock block) { - definitionHasPhiNode(useLocation, block) - or - exists(int firstAccess | - hasUse(useLocation, block, firstAccess, _) and - firstAccess = - min(int offset | - hasUse(useLocation, block, offset, _) - or - hasNonPhiDefinition(useLocation, _, block, offset) - ) - ) - or - locationLiveOnExitFromBlock(useLocation, block) and - not hasNonPhiDefinition(useLocation, _, block, _) - } - - /** - * Holds if the specified `useLocation` is live on exit from `block`. - */ - pragma[noinline] - predicate locationLiveOnExitFromBlock(Alias::MemoryLocation useLocation, OldBlock block) { - locationLiveOnEntryToBlock(useLocation, block.getAFeasibleSuccessor()) - } - - /** - * Holds if there is a definition at offset `offset` in block `block` that overlaps memory location `useLocation`. - * This predicate does not include definitions for Phi nodes. - */ - private predicate hasNonPhiDefinition( - Alias::MemoryLocation useLocation, Alias::MemoryLocation defLocation, OldBlock block, int offset - ) { - exists(OldInstruction def, Overlap overlap, int index | - defLocation = Alias::getResultMemoryLocation(def) and - block.getInstruction(index) = def and - overlap = Alias::getOverlap(defLocation, useLocation) and - if overlap instanceof MayPartiallyOverlap - then offset = (index * 2) + 1 // The use will be connected to the definition on the `Chi` instruction. - else offset = index * 2 // The use will be connected to the definition on the original instruction. - ) - } - - /** - * Holds if there is a definition at offset `offset` in block `block` that overlaps memory location `useLocation`. - * This predicate includes definitions for Phi nodes (at offset -1). - */ - private predicate hasDefinition( - Alias::MemoryLocation useLocation, Alias::MemoryLocation defLocation, OldBlock block, int offset - ) { - ( - // If there is a Phi node for the use location itself, treat that as a definition at offset -1. - offset = -1 and - if definitionHasPhiNode(useLocation, block) - then defLocation = useLocation - else ( - definitionHasPhiNode(defLocation, block) and - defLocation = useLocation.getVirtualVariable() and - // Handle the unusual case where a virtual variable does not overlap one of its member - // locations. For example, a definition of the virtual variable representing all aliased - // memory does not overlap a use of a string literal, because the contents of a string - // literal can never be redefined. The string literal's location could still be a member of - // the `AliasedVirtualVariable` due to something like: - // ``` - // char s[10]; - // strcpy(s, p); - // const char* p = b ? "SomeLiteral" : s; - // return p[3]; - // ``` - // In the above example, `p[3]` may access either the string literal or the local variable - // `s`, so both of those locations must be members of the `AliasedVirtualVariable`. - exists(Alias::getOverlap(defLocation, useLocation)) - ) - ) - or - hasNonPhiDefinition(useLocation, defLocation, block, offset) - } - - /** - * Holds if there is a definition at offset `offset` in block `block` that overlaps memory location `useLocation`. - * `rankIndex` is the rank of the definition as computed by `defUseRank()`. - */ - predicate hasDefinitionAtRank( - Alias::MemoryLocation useLocation, Alias::MemoryLocation defLocation, OldBlock block, - int rankIndex, int offset - ) { - hasDefinition(useLocation, defLocation, block, offset) and - defUseRank(useLocation, block, rankIndex, offset) - } - - /** - * Holds if there is a use of `useLocation` on instruction `use` at offset `offset` in block `block`. - */ - private predicate hasUse( - Alias::MemoryLocation useLocation, OldBlock block, int offset, OldInstruction use - ) { - exists(int index | - block.getInstruction(index) = use and - ( - // A direct use of the location. - useLocation = Alias::getOperandMemoryLocation(use.getAnOperand()) and offset = index * 2 - or - // A `Chi` instruction will include a use of the virtual variable. - hasChiNode(useLocation, use) and offset = (index * 2) + 1 - ) - ) - } - - /** - * Holds if there is a use of memory location `useLocation` on instruction `use` in block `block`. `rankIndex` is the - * rank of the use use as computed by `defUseRank`. - */ - predicate hasUseAtRank( - Alias::MemoryLocation useLocation, OldBlock block, int rankIndex, OldInstruction use - ) { - exists(int offset | - hasUse(useLocation, block, offset, use) and - defUseRank(useLocation, block, rankIndex, offset) - ) - } - - /** - * Holds if there is a definition at offset `offset` in block `block` that overlaps memory location `useLocation`, or - * a use of `useLocation` at offset `offset` in block `block`. `rankIndex` is the sequence number of the definition - * or use within `block`, counting only uses of `useLocation` and definitions that overlap `useLocation`. - */ - private predicate defUseRank( - Alias::MemoryLocation useLocation, OldBlock block, int rankIndex, int offset - ) { - offset = - rank[rankIndex](int j | - hasDefinition(useLocation, _, block, j) or hasUse(useLocation, block, j, _) - ) - } - - /** - * Holds if the `Phi` instruction for location `useLocation` at the beginning of block `phiBlock` has an operand along - * the incoming edge from `predBlock`, where that operand's definition is at offset `defOffset` in block `defBlock`. - */ - pragma[noopt] - predicate hasPhiOperandDefinition( - Alias::MemoryLocation defLocation, Alias::MemoryLocation useLocation, OldBlock phiBlock, - OldBlock predBlock, OldBlock defBlock, int defOffset - ) { - exists(int defRank | - definitionHasPhiNode(useLocation, phiBlock) and - predBlock = phiBlock.getAFeasiblePredecessor() and - definitionReachesEndOfBlock(useLocation, defBlock, defRank, predBlock) and - hasDefinitionAtRank(useLocation, defLocation, defBlock, defRank, defOffset) and - exists(Alias::getOverlap(defLocation, useLocation)) - ) - } -} - -predicate canReuseSsaForMemoryResult(Instruction instruction) { - exists(OldInstruction oldInstruction | - oldInstruction = getOldInstruction(instruction) and - ( - // The previous iteration said it was reusable, so we should mark it as reusable as well. - Alias::canReuseSsaForOldResult(oldInstruction) - or - // The current alias analysis says it is reusable. - Alias::getResultMemoryLocation(oldInstruction).canReuseSsa() - ) - ) - or - exists(Alias::MemoryLocation defLocation | - // This is a `Phi` for a reusable location, so the result of the `Phi` is reusable as well. - instruction = phiInstruction(_, defLocation) and - defLocation.canReuseSsa() - ) - // We don't support reusing SSA for any location that could create a `Chi` instruction. -} - -/** - * Expose some of the internal predicates to PrintSSA.qll. We do this by publicly importing those modules in the - * `DebugSsa` module, which is then imported by PrintSSA. - */ -module DebugSsa { - import PhiInsertion - import DefUse -} - -import CachedForDebugging - -cached -private module CachedForDebugging { - cached - string getTempVariableUniqueId(IRTempVariable var) { - result = getOldTempVariable(var).getUniqueId() - } - - cached - string getInstructionUniqueId(Instruction instr) { - exists(OldInstruction oldInstr | - oldInstr = getOldInstruction(instr) and - result = "NonSSA: " + oldInstr.getUniqueId() - ) - or - exists(Alias::MemoryLocation location, OldBlock phiBlock, string specificity | - instr = getPhi(phiBlock, location) and - result = - "Phi Block(" + phiBlock.getFirstInstruction().getUniqueId() + ")[" + specificity + "]: " + - location.getUniqueId() and - if location instanceof Alias::VirtualVariable - then - // Sort Phi nodes for virtual variables before Phi nodes for member locations. - specificity = "g" - else specificity = "s" - ) - or - instr = unreachedInstruction(_) and - result = "Unreached" - } - - private OldIR::IRTempVariable getOldTempVariable(IRTempVariable var) { - result.getEnclosingFunction() = var.getEnclosingFunction() and - result.getAst() = var.getAst() and - result.getTag() = var.getTag() - } - - cached - predicate instructionHasSortKeys(Instruction instr, int key1, int key2) { - exists(OldInstruction oldInstr | - oldInstr = getOldInstruction(instr) and - oldInstr.hasSortKeys(key1, key2) - ) - or - instr instanceof TUnreachedInstruction and - key1 = maxValue() and - key2 = maxValue() - } - - /** - * Returns the value of the maximum representable integer. - */ - cached - int maxValue() { result = 2147483647 } -} - -/** - * Provides the portion of the parameterized IR interface that is used to construct the SSA stages - * of the IR. The raw stage of the IR does not expose these predicates. - * These predicates are all just aliases for predicates defined in the `Cached` module. This ensures - * that all of SSA construction will be evaluated in the same stage. - */ -module Ssa { - class MemoryLocation = Alias::MemoryLocation; - - predicate hasPhiInstruction = Cached::hasPhiInstructionCached/2; - - predicate hasChiInstruction = Cached::hasChiInstructionCached/1; - - predicate hasUnreachedInstruction = Cached::hasUnreachedInstructionCached/1; -} diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConstructionImports.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConstructionImports.qll deleted file mode 100644 index bf9b18d0b17..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConstructionImports.qll +++ /dev/null @@ -1,5 +0,0 @@ -import experimental.ir.implementation.Opcode as Opcode -import experimental.ir.implementation.internal.OperandTag as OperandTag -import experimental.ir.internal.Overlap as Overlap -import experimental.ir.implementation.internal.TInstruction as TInstruction -import experimental.ir.implementation.raw.IR as RawIR diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConstructionInternal.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConstructionInternal.qll deleted file mode 100644 index cad1a3dd2de..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConstructionInternal.qll +++ /dev/null @@ -1,9 +0,0 @@ -import experimental.ir.implementation.raw.IR as OldIR -import experimental.ir.implementation.raw.internal.reachability.ReachableBlock as Reachability -import experimental.ir.implementation.raw.internal.reachability.Dominance as Dominance -import experimental.ir.implementation.unaliased_ssa.IR as NewIR -import experimental.ir.implementation.raw.internal.IRConstruction as RawStage -import experimental.ir.implementation.internal.TInstruction::UnaliasedSsaInstructions as SsaInstructions -import experimental.ir.internal.IRCSharpLanguage as Language -import SimpleSSA as Alias -import experimental.ir.implementation.internal.TOperand::UnaliasedSsaOperands as SsaOperands diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SimpleSSA.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SimpleSSA.qll deleted file mode 100644 index 5c33ecf5f99..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SimpleSSA.qll +++ /dev/null @@ -1,111 +0,0 @@ -import AliasAnalysis -private import SimpleSSAImports -import SimpleSSAPublicImports -private import AliasConfiguration - -private predicate isTotalAccess(Allocation var, AddressOperand addrOperand, IRType type) { - exists(Instruction constantBase, int bitOffset | - addressOperandBaseAndConstantOffset(addrOperand, constantBase, bitOffset) and - bitOffset = 0 and - constantBase = var.getABaseInstruction() and - type = var.getIRType() - ) -} - -/** - * Holds if the specified variable should be modeled in SSA form. For unaliased SSA, we only model a - * variable if its address never escapes and all reads and writes of that variable access the entire - * variable using the original type of the variable. - */ -predicate isVariableModeled(Allocation var) { - not allocationEscapes(var) and - forall(Instruction instr, AddressOperand addrOperand, IRType type | - addrOperand = instr.getResultAddressOperand() and - type = instr.getResultIRType() and - var = getAddressOperandAllocation(addrOperand) - | - isTotalAccess(var, addrOperand, type) and not instr.hasResultMayMemoryAccess() - ) and - forall(MemoryOperand memOperand, AddressOperand addrOperand, IRType type | - addrOperand = memOperand.getAddressOperand() and - type = memOperand.getIRType() and - var = getAddressOperandAllocation(addrOperand) - | - isTotalAccess(var, addrOperand, type) and not memOperand.hasMayReadMemoryAccess() - ) -} - -/** - * Holds if the SSA use/def chain for the specified variable can be safely reused by later - * iterations of SSA construction. This will hold only if we modeled the variable soundly, so that - * subsequent iterations will recompute SSA for any variable that we assumed did not escape, but - * actually would have escaped if we had used a sound escape analysis. - */ -predicate canReuseSsaForVariable(IRAutomaticVariable var) { - isVariableModeled(var) and - not allocationEscapes(var) -} - -private newtype TMemoryLocation = MkMemoryLocation(Allocation var) { isVariableModeled(var) } - -private MemoryLocation getMemoryLocation(Allocation var) { result.getAllocation() = var } - -class MemoryLocation extends TMemoryLocation { - Allocation var; - - MemoryLocation() { this = MkMemoryLocation(var) } - - final string toString() { result = var.getAllocationString() } - - final Allocation getAllocation() { result = var } - - final Language::Location getLocation() { result = var.getLocation() } - - final IRFunction getIRFunction() { result = var.getEnclosingIRFunction() } - - final VirtualVariable getVirtualVariable() { result = this } - - final Language::LanguageType getType() { result = var.getLanguageType() } - - final string getUniqueId() { result = var.getUniqueId() } - - final predicate canReuseSsa() { canReuseSsaForVariable(var) } - - /** DEPRECATED: Alias for canReuseSsa */ - deprecated predicate canReuseSSA() { this.canReuseSsa() } -} - -predicate canReuseSsaForOldResult(Instruction instr) { none() } - -/** - * Represents a set of `MemoryLocation`s that cannot overlap with - * `MemoryLocation`s outside of the set. The `VirtualVariable` will be - * represented by a `MemoryLocation` that totally overlaps all other - * `MemoryLocations` in the set. - */ -class VirtualVariable extends MemoryLocation { } - -/** A virtual variable that groups all escaped memory within a function. */ -class AliasedVirtualVariable extends VirtualVariable { - AliasedVirtualVariable() { none() } -} - -Overlap getOverlap(MemoryLocation def, MemoryLocation use) { - def = use and result instanceof MustExactlyOverlap - or - none() // Avoid compiler error in SSAConstruction -} - -MemoryLocation getResultMemoryLocation(Instruction instr) { - result = getMemoryLocation(getAddressOperandAllocation(instr.getResultAddressOperand())) -} - -MemoryLocation getOperandMemoryLocation(MemoryOperand operand) { - result = getMemoryLocation(getAddressOperandAllocation(operand.getAddressOperand())) -} - -/** Gets the start bit offset of a `MemoryLocation`, if any. */ -int getStartBitOffset(MemoryLocation location) { none() } - -/** Gets the end bit offset of a `MemoryLocation`, if any. */ -int getEndBitOffset(MemoryLocation location) { none() } diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SimpleSSAImports.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SimpleSSAImports.qll deleted file mode 100644 index 80a1c7c36fd..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SimpleSSAImports.qll +++ /dev/null @@ -1,4 +0,0 @@ -import experimental.ir.implementation.raw.IR -import experimental.ir.internal.IntegerConstant as Ints -import experimental.ir.implementation.internal.OperandTag -import experimental.ir.internal.IRCSharpLanguage as Language diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SimpleSSAPublicImports.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SimpleSSAPublicImports.qll deleted file mode 100644 index 047d4923039..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SimpleSSAPublicImports.qll +++ /dev/null @@ -1 +0,0 @@ -import experimental.ir.internal.Overlap diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/Dominance.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/Dominance.qll deleted file mode 100644 index cddc3e23d7e..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/Dominance.qll +++ /dev/null @@ -1,22 +0,0 @@ -private import DominanceInternal - -predicate blockImmediatelyDominates(Graph::Block dominator, Graph::Block block) = - idominance(Graph::isEntryBlock/1, Graph::blockSuccessor/2)(_, dominator, block) - -predicate blockStrictlyDominates(Graph::Block dominator, Graph::Block block) { - blockImmediatelyDominates+(dominator, block) -} - -predicate blockDominates(Graph::Block dominator, Graph::Block block) { - blockStrictlyDominates(dominator, block) or dominator = block -} - -Graph::Block getDominanceFrontier(Graph::Block dominator) { - Graph::blockSuccessor(dominator, result) and - not blockImmediatelyDominates(dominator, result) - or - exists(Graph::Block prev | result = getDominanceFrontier(prev) | - blockImmediatelyDominates(dominator, prev) and - not blockImmediatelyDominates(dominator, result) - ) -} diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/DominanceInternal.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/DominanceInternal.qll deleted file mode 100644 index aaa4cc7bd53..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/DominanceInternal.qll +++ /dev/null @@ -1,7 +0,0 @@ -private import ReachableBlock as Reachability - -module Graph { - import Reachability::Graph - - class Block = Reachability::ReachableBlock; -} diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/PrintDominance.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/PrintDominance.qll deleted file mode 100644 index f26565bc278..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/PrintDominance.qll +++ /dev/null @@ -1,22 +0,0 @@ -private import DominanceInternal -private import ReachableBlockInternal -private import Dominance -import IR - -private class DominancePropertyProvider extends IRPropertyProvider { - override string getBlockProperty(IRBlock block, string key) { - exists(IRBlock dominator | - blockImmediatelyDominates(dominator, block) and - key = "ImmediateDominator" and - result = "Block " + dominator.getDisplayIndex().toString() - ) - or - key = "DominanceFrontier" and - result = - strictconcat(IRBlock frontierBlock | - frontierBlock = getDominanceFrontier(block) - | - frontierBlock.getDisplayIndex().toString(), ", " order by frontierBlock.getDisplayIndex() - ) - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/PrintReachableBlock.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/PrintReachableBlock.qll deleted file mode 100644 index 6befad72336..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/PrintReachableBlock.qll +++ /dev/null @@ -1,17 +0,0 @@ -private import ReachableBlockInternal -private import ReachableBlock -import IR - -private class ReachableBlockPropertyProvider extends IRPropertyProvider { - override string getBlockProperty(IRBlock block, string key) { - not block instanceof ReachableBlock and - key = "Unreachable" and - result = "true" - or - exists(EdgeKind kind | - isInfeasibleEdge(block, kind) and - key = "Infeasible(" + kind.toString() + ")" and - result = "true" - ) - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/ReachableBlock.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/ReachableBlock.qll deleted file mode 100644 index 25a53bbefe8..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/ReachableBlock.qll +++ /dev/null @@ -1,53 +0,0 @@ -private import ReachableBlockInternal -private import IR -private import ConstantAnalysis - -predicate isInfeasibleInstructionSuccessor(Instruction instr, EdgeKind kind) { - exists(int conditionValue | - conditionValue = getConstantValue(instr.(ConditionalBranchInstruction).getCondition()) and - if conditionValue = 0 then kind instanceof TrueEdge else kind instanceof FalseEdge - ) -} - -pragma[noinline] -predicate isInfeasibleEdge(IRBlockBase block, EdgeKind kind) { - isInfeasibleInstructionSuccessor(block.getLastInstruction(), kind) -} - -private IRBlock getAFeasiblePredecessorBlock(IRBlock successor) { - exists(EdgeKind kind | - result.getSuccessor(kind) = successor and - not isInfeasibleEdge(result, kind) - ) -} - -private predicate isBlockReachable(IRBlock block) { - exists(IRFunction f | getAFeasiblePredecessorBlock*(block) = f.getEntryBlock()) -} - -/** - * An IR block that is reachable from the entry block of the function, considering only feasible - * edges. - */ -class ReachableBlock extends IRBlockBase { - ReachableBlock() { isBlockReachable(this) } - - final ReachableBlock getAFeasiblePredecessor() { result = getAFeasiblePredecessorBlock(this) } - - final ReachableBlock getAFeasibleSuccessor() { this = getAFeasiblePredecessorBlock(result) } -} - -/** - * An instruction that is contained in a reachable block. - */ -class ReachableInstruction extends Instruction { - ReachableInstruction() { this.getBlock() instanceof ReachableBlock } -} - -module Graph { - predicate isEntryBlock(ReachableBlock block) { exists(IRFunction f | block = f.getEntryBlock()) } - - predicate blockSuccessor(ReachableBlock pred, ReachableBlock succ) { - succ = pred.getAFeasibleSuccessor() - } -} diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/ReachableBlockInternal.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/ReachableBlockInternal.qll deleted file mode 100644 index e435289cbfc..00000000000 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/reachability/ReachableBlockInternal.qll +++ /dev/null @@ -1,2 +0,0 @@ -import experimental.ir.implementation.unaliased_ssa.IR as IR -import experimental.ir.implementation.unaliased_ssa.constant.ConstantAnalysis as ConstantAnalysis diff --git a/csharp/ql/src/experimental/ir/internal/CSharpType.qll b/csharp/ql/src/experimental/ir/internal/CSharpType.qll deleted file mode 100644 index 1cf87b8fbbb..00000000000 --- a/csharp/ql/src/experimental/ir/internal/CSharpType.qll +++ /dev/null @@ -1,365 +0,0 @@ -private import csharp -private import experimental.ir.implementation.IRType -private import IRCSharpLanguage as Language - -int getTypeSize(Type type) { - // REVIEW: Is this complete? - result = type.(SimpleType).getSize() - or - result = getTypeSize(type.(Enum).getUnderlyingType()) - or - // TODO: Generate a reasonable size - type instanceof Struct and result = 16 - or - type instanceof RefType and result = getPointerSize() - or - type instanceof PointerType and result = getPointerSize() - or - result = getTypeSize(type.(TupleType).getUnderlyingType()) - or - // TODO: Add room for extra field - result = getTypeSize(type.(NullableType).getUnderlyingType()) - or - type instanceof VoidType and result = 0 -} - -int getPointerSize() { result = 8 } - -/** - * Holds if an `IRErrorType` should exist. - */ -predicate hasErrorType() { exists(UnknownType t) } - -/** - * Holds if an `IRBooleanType` with the specified `byteSize` should exist. - */ -predicate hasBooleanType(int byteSize) { byteSize = getTypeSize(any(BoolType type)) } - -private predicate isSignedIntegerType(ValueType type) { - type instanceof SignedIntegralType or - type.(Enum).getUnderlyingType() instanceof SignedIntegralType -} - -private predicate isUnsignedIntegerType(ValueType type) { - type instanceof UnsignedIntegralType or - type instanceof CharType or - type.(Enum).getUnderlyingType() instanceof UnsignedIntegralType -} - -/** - * Holds if an `IRSignedIntegerType` with the specified `byteSize` should exist. - */ -predicate hasSignedIntegerType(int byteSize) { - byteSize = getTypeSize(any(ValueType type | isSignedIntegerType(type))) -} - -/** - * Holds if an `IRUnsignedIntegerType` with the specified `byteSize` should exist. - */ -predicate hasUnsignedIntegerType(int byteSize) { - byteSize = getTypeSize(any(ValueType type | isUnsignedIntegerType(type))) -} - -/** - * Holds if an `IRFloatingPointType` with the specified size, base, and type domain should exist. - */ -predicate hasFloatingPointType(int byteSize, int base, Language::TypeDomain domain) { - byteSize = any(FloatingPointType type).getSize() and - base = 2 and - domain instanceof Language::RealDomain -} - -private predicate isPointerIshType(Type type) { - type instanceof PointerType or - type instanceof RefType -} - -/** - * Holds if an `IRAddressType` with the specified `byteSize` should exist. - */ -predicate hasAddressType(int byteSize) { - // This covers all pointers, all references, and because it also looks at `NullType`, it - // should always return a result that makes sense for arbitrary glvalues as well. - byteSize = getTypeSize(any(Type type | isPointerIshType(type))) -} - -/** - * Holds if an `IRFunctionAddressType` with the specified `byteSize` should exist. - */ -predicate hasFunctionAddressType(int byteSize) { byteSize = getTypeSize(any(NullType type)) } - -private predicate isOpaqueType(ValueOrRefType type) { - type instanceof Struct or - type instanceof NullableType or - type instanceof DecimalType -} - -/** - * Holds if an `IROpaqueType` with the specified `tag` and `byteSize` should exist. - */ -predicate hasOpaqueType(Type tag, int byteSize) { - isOpaqueType(tag) and byteSize = getTypeSize(tag) -} - -private Type getRepresentationType(Type type) { - result = type.(Enum).getUnderlyingType() - or - result = type.(TupleType).getUnderlyingType() - or - not type instanceof Enum and not type instanceof TupleType and result = type -} - -/** - * Gets the `IRType` that represents a prvalue of the specified `Type`. - */ -private IRType getIRTypeForPRValue(Type type) { - exists(Type repType | repType = getRepresentationType(type) | - exists(IROpaqueType opaqueType | opaqueType = result | - opaqueType.getByteSize() = getTypeSize(repType) and - opaqueType.getTag() = repType - ) - or - result.(IRBooleanType).getByteSize() = repType.(BoolType).getSize() - or - isSignedIntegerType(repType) and - result.(IRSignedIntegerType).getByteSize() = getTypeSize(repType) - or - isUnsignedIntegerType(repType) and - result.(IRUnsignedIntegerType).getByteSize() = getTypeSize(repType) - or - result.(IRFloatingPointType).getByteSize() = repType.(FloatingPointType).getSize() - or - isPointerIshType(repType) and result.(IRAddressType).getByteSize() = getTypeSize(repType) - or - repType instanceof VoidType and result instanceof IRVoidType - or - repType instanceof UnknownType and result instanceof IRErrorType - ) -} - -string getOpaqueTagIdentityString(Type tag) { result = tag.getFullyQualifiedName() } - -cached -private newtype TCSharpType = - TPRValueType(Type type) { exists(getIRTypeForPRValue(type)) } or - TGLValueAddressType(Type type) { any() } or - TFunctionAddressType() or - TUnknownType() - -class CSharpType extends TCSharpType { - abstract string toString(); - - /** Gets a string used in IR dumps */ - string getDumpString() { result = this.toString() } - - /** Gets the size of the type in bytes, if known. */ - final int getByteSize() { result = this.getIRType().getByteSize() } - - /** - * Gets the `IRType` that represents this `CSharpType`. Many different `CSharpType`s can map to a - * single `IRType`. - */ - cached - abstract IRType getIRType(); - - /** - * Holds if the `CSharpType` represents a prvalue of type `Type` (if `isGLValue` is `false`), or - * if it represents a glvalue of type `Type` (if `isGLValue` is `true`). - */ - abstract predicate hasType(Type type, boolean isGLValue); - - final predicate hasUnspecifiedType(Type type, boolean isGLValue) { this.hasType(type, isGLValue) } -} - -/** - * A `CSharpType` that wraps an existing `Type` (either as a prvalue or a glvalue). - */ -private class CSharpWrappedType extends CSharpType { - Type cstype; - - CSharpWrappedType() { - this = TPRValueType(cstype) or - this = TGLValueAddressType(cstype) - } - - abstract override string toString(); - - abstract override IRType getIRType(); - - abstract override predicate hasType(Type type, boolean isGLValue); -} - -/** - * A `CSharpType` that represents a prvalue of an existing `Type`. - */ -private class CSharpPRValueType extends CSharpWrappedType, TPRValueType { - final override string toString() { result = cstype.toString() } - - final override IRType getIRType() { result = getIRTypeForPRValue(cstype) } - - final override predicate hasType(Type type, boolean isGLValue) { - type = cstype and - isGLValue = false - } -} - -/** - * A `CSharpType` that represents a glvalue of an existing `Type`. - */ -private class CSharpGLValueAddressType extends CSharpWrappedType, TGLValueAddressType { - final override string toString() { result = "glval<" + cstype.toString() + ">" } - - final override IRAddressType getIRType() { result.getByteSize() = getPointerSize() } - - final override predicate hasType(Type type, boolean isGLValue) { - type = cstype and - isGLValue = true - } -} - -/** - * A `CSharpType` that represents a function address. - */ -private class CSharpFunctionAddressType extends CSharpType, TFunctionAddressType { - final override string toString() { result = "" } - - final override IRFunctionAddressType getIRType() { result.getByteSize() = getPointerSize() } - - final override predicate hasType(Type type, boolean isGLValue) { - type instanceof VoidType and isGLValue = true - } -} - -/** - * A `CSharpType` that represents an unknown type. - */ -private class CSharpUnknownType extends CSharpType, TUnknownType { - final override string toString() { result = "" } - - final override IRUnknownType getIRType() { any() } - - final override predicate hasType(Type type, boolean isGLValue) { - type instanceof VoidType and isGLValue = false - } -} - -/** - * Gets the single instance of `CSharpUnknownType`. - */ -CSharpUnknownType getUnknownType() { any() } - -/** - * Gets the `CSharpType` that represents a prvalue of type `void`. - */ -CSharpPRValueType getVoidType() { exists(VoidType voidType | result.hasType(voidType, false)) } - -/** - * Gets the `CSharpType` that represents a prvalue of type `type`. - */ -CSharpPRValueType getTypeForPRValue(Type type) { result.hasType(type, false) } - -/** - * Gets the `CSharpType` that represents a glvalue of type `type`. - */ -CSharpGLValueAddressType getTypeForGLValue(Type type) { result.hasType(type, true) } - -/** - * Gets the `CSharpType` that represents a prvalue of type `int`. - */ -CSharpPRValueType getIntType() { result.hasType(any(IntType t), false) } - -/** - * Gets the `CSharpType` that represents a prvalue of type `bool`. - */ -CSharpPRValueType getBoolType() { result.hasType(any(BoolType t), false) } - -/** - * Gets the `CSharpType` that represents a prvalue of `NullType`. - */ -CSharpPRValueType getNullType() { result.hasType(any(NullType t), false) } - -/** - * Gets the `CSharpType` that represents a function address. - */ -CSharpFunctionAddressType getFunctionAddressType() { any() } - -/** - * Gets the `CSharpType` that is the canonical type for an `IRBooleanType` with the specified - * `byteSize`. - */ -CSharpPRValueType getCanonicalBooleanType(int byteSize) { - exists(BoolType type | result = TPRValueType(type) and byteSize = type.getSize()) -} - -/** - * Gets the `CSharpType` that is the canonical type for an `IRSignedIntegerType` with the specified - * `byteSize`. - */ -CSharpPRValueType getCanonicalSignedIntegerType(int byteSize) { - result = TPRValueType(any(SignedIntegralType t | t.getSize() = byteSize)) -} - -/** - * Gets the `CSharpType` that is the canonical type for an `IRUnsignedIntegerType` with the specified - * `byteSize`. - */ -CSharpPRValueType getCanonicalUnsignedIntegerType(int byteSize) { - result = TPRValueType(any(UnsignedIntegralType t | t.getSize() = byteSize)) -} - -/** - * Gets the `CSharpType` that is the canonical type for an `IRFloatingPointType` with the specified - * size, base, and type domain. - */ -CSharpPRValueType getCanonicalFloatingPointType(int byteSize, int base, Language::TypeDomain domain) { - base = 2 and - domain instanceof Language::RealDomain and - result = TPRValueType(any(FloatingPointType type | type.getSize() = byteSize)) -} - -/** - * Gets the `CSharpType` that is the canonical type for an `IRAddressType` with the specified - * `byteSize`. - */ -CSharpPRValueType getCanonicalAddressType(int byteSize) { - // We just use `NullType`, since it should be unique. - result = TPRValueType(any(NullType type | getTypeSize(type) = byteSize)) -} - -/** - * Gets the `CSharpType` that is the canonical type for an `IRFunctionAddressType` with the specified - * `byteSize`. - */ -CSharpFunctionAddressType getCanonicalFunctionAddressType(int byteSize) { - result.getByteSize() = byteSize -} - -/** - * Gets the `CSharpType` that is the canonical type for `IRErrorType`. - */ -CSharpPRValueType getCanonicalErrorType() { result = TPRValueType(any(UnknownType type)) } - -/** - * Gets the `CSharpType` that is the canonical type for `IRUnknownType`. - */ -CSharpUnknownType getCanonicalUnknownType() { any() } - -/** - * Gets the `CSharpType` that is the canonical type for `IRVoidType`. - */ -CSharpPRValueType getCanonicalVoidType() { result = TPRValueType(any(VoidType type)) } - -/** - * Gets the `CSharpType` that is the canonical type for an `IROpaqueType` with the specified `tag` and - * `byteSize`. - */ -CSharpPRValueType getCanonicalOpaqueType(Type tag, int byteSize) { - isOpaqueType(tag) and - result = TPRValueType(tag) and - getTypeSize(tag) = byteSize -} - -module LanguageTypeConsistency { - // Nothing interesting here for C# yet, but the module still has to exist because it is imported - // by `IRTypeConsistency`. -} diff --git a/csharp/ql/src/experimental/ir/internal/IRCSharpLanguage.qll b/csharp/ql/src/experimental/ir/internal/IRCSharpLanguage.qll deleted file mode 100644 index f0137b9b5ce..00000000000 --- a/csharp/ql/src/experimental/ir/internal/IRCSharpLanguage.qll +++ /dev/null @@ -1,162 +0,0 @@ -private import csharp as CSharp -private import IRUtilities -import CSharpType - -class LanguageType = CSharpType; - -class OpaqueTypeTag = CSharp::ValueOrRefType; - -class Function = CSharp::Callable; - -class GlobalVariable extends CSharp::Field { - GlobalVariable() { this.isStatic() } -} - -class Declaration = CSharp::Declaration; - -class Location = CSharp::Location; - -class UnknownLocation = CSharp::EmptyLocation; - -class UnknownDefaultLocation = CSharp::EmptyLocation; - -class File = CSharp::File; - -class AST = CSharp::Element; - -class Type = CSharp::Type; - -class UnknownType = CSharp::NullType; - -class VoidType = CSharp::VoidType; - -class IntegralType = CSharp::IntegralType; - -class FloatingPointType = CSharp::FloatingPointType; - -private newtype TTypeDomain = TRealDomain() - -/** - * The type domain of a floating-point type. One of `RealDomain`, `ComplexDomain`, or - * `ImaginaryDomain`. - */ -class TypeDomain extends TTypeDomain { - /** Gets a textual representation of this type domain. */ - string toString() { none() } -} - -/** - * The type domain of a floating-point type that represents a real number. - */ -class RealDomain extends TypeDomain, TRealDomain { - final override string toString() { result = "real" } -} - -/** - * The type domain of a floating-point type that represents a complex number. Not currently used in - * C#. - */ -class ComplexDomain extends TypeDomain { - ComplexDomain() { none() } - - final override string toString() { result = "complex" } -} - -/** - * The type domain of a floating-point type that represents an imaginary number. Not currently used - * in C#. - */ -class ImaginaryDomain extends TypeDomain { - ImaginaryDomain() { none() } - - final override string toString() { result = "imaginary" } -} - -private newtype TClassDerivation = - // Note that this is the `Class` type exported from this module, not CSharp::Class. - MkClassDerivation(Class base, Class derived) { derived.getABaseType() = base } - -private newtype TBuiltInOperation = NoOp() - -class BuiltInOperation extends TBuiltInOperation { - string toString() { result = "BuiltInOp" } -} - -class ClassDerivation extends MkClassDerivation { - Class baseClass; - Class derivedClass; - - ClassDerivation() { this = MkClassDerivation(baseClass, derivedClass) } - - string toString() { result = "ClassDerivation" } - - final Class getBaseClass() { result = baseClass } - - final Class getDerivedClass() { result = derivedClass } - - final int getByteOffset() { - // Inheritance never requires adjusting the `this` pointer in C#. - result = 0 - } -} - -class StringLiteral = CSharp::StringLiteral; - -class Variable = CSharp::Variable; - -class AutomaticVariable = CSharp::LocalScopeVariable; - -class StaticVariable = CSharp::Variable; - -class Parameter = CSharp::Parameter; - -class Field = CSharp::Field; - -// TODO: Remove necessity for these. -class Expr = CSharp::Expr; - -class Class = CSharp::ValueOrRefType; // Used for inheritance conversions - -predicate hasCaseEdge(string minValue, string maxValue) { - // TODO: Need to handle pattern matching - hasCaseEdge(_, minValue, maxValue) -} - -predicate hasPositionalArgIndex(int argIndex) { - exists(CSharp::MethodCall call | exists(call.getArgument(argIndex))) - or - // Quick fix so that generated calls (`Invoke` etc) will have the - // correct number of parameters; it is an overestimation, - // since we don't care about all the callables, so it - // should be restricted more - argIndex in [0 .. any(CSharp::Callable c).getNumberOfParameters() - 1] -} - -predicate hasAsmOperandIndex(int operandIndex) { none() } - -predicate isVariableAutomatic(Variable var) { var instanceof CSharp::LocalScopeVariable } - -string getStringLiteralText(StringLiteral s) { - // REVIEW: Is this the right escaping? - result = s.toString() -} - -predicate hasPotentialLoop(Function f) { - exists(CSharp::LoopStmt l | l.getEnclosingCallable() = f) or - exists(CSharp::GotoStmt s | s.getEnclosingCallable() = f) -} - -predicate hasGoto(Function f) { exists(CSharp::GotoStmt s | s.getEnclosingCallable() = f) } - -/** - * Gets the offset of field `field` in bits. - */ -int getFieldBitOffset(Field f) { - //REVIEW: Implement this once layout has been synthesized. - none() -} - -/** - * Holds if the specified `Function` can be overridden in a derived class. - */ -predicate isFunctionVirtual(Function f) { f.(CSharp::Overridable).isOverridableOrImplementable() } diff --git a/csharp/ql/src/experimental/ir/internal/IRCSharpLanguageDebug.qll b/csharp/ql/src/experimental/ir/internal/IRCSharpLanguageDebug.qll deleted file mode 100644 index 3ee0328dd90..00000000000 --- a/csharp/ql/src/experimental/ir/internal/IRCSharpLanguageDebug.qll +++ /dev/null @@ -1,5 +0,0 @@ -private import csharp as CSharp - -class Function = CSharp::Callable; - -string getIdentityString(Function func) { result = func.getLabel() } diff --git a/csharp/ql/src/experimental/ir/internal/IRGuards.qll b/csharp/ql/src/experimental/ir/internal/IRGuards.qll deleted file mode 100644 index 91e2208c6f7..00000000000 --- a/csharp/ql/src/experimental/ir/internal/IRGuards.qll +++ /dev/null @@ -1,670 +0,0 @@ -import csharp -import semmle.code.csharp.controlflow.BasicBlocks -import experimental.ir.IR - -/** - * Holds if `block` consists of an `UnreachedInstruction`. - * - * We avoiding reporting an unreached block as being controlled by a guard. The unreached block - * has the AST for the `Function` itself, which tends to confuse mapping between the AST `BasicBlock` - * and the `IRBlock`. - */ -private predicate isUnreachedBlock(IRBlock block) { - block.getFirstInstruction() instanceof UnreachedInstruction -} - -/** - * A Boolean condition in the AST that guards one or more basic blocks. This includes - * operands of logical operators but not switch statements. - */ -cached -class GuardCondition extends Expr { - cached - GuardCondition() { - exists(IRGuardCondition ir | this = ir.getUnconvertedResultExpression()) - or - // no binary operators in the IR - this.(BinaryLogicalOperation).getAnOperand() instanceof GuardCondition - or - // the IR short-circuits if(!x) - // don't produce a guard condition for `y = !x` and other non-short-circuited cases - not exists(Instruction inst | this = inst.getAst()) and - exists(IRGuardCondition ir | this.(LogicalNotExpr).getOperand() = ir.getAst()) - } - - /** - * Holds if this condition controls `block`, meaning that `block` is only - * entered if the value of this condition is `testIsTrue`. - * - * Illustration: - * - * ``` - * [ (testIsTrue) ] - * [ this ----------------succ ---- controlled ] - * [ | | ] - * [ (testIsFalse) | ------ ... ] - * [ other ] - * ``` - * - * The predicate holds if all paths to `controlled` go via the `testIsTrue` - * edge of the control-flow graph. In other words, the `testIsTrue` edge - * must dominate `controlled`. This means that `controlled` must be - * dominated by both `this` and `succ` (the target of the `testIsTrue` - * edge). It also means that any other edge into `succ` must be a back-edge - * from a node which is dominated by `succ`. - * - * The short-circuit boolean operations have slightly surprising behavior - * here: because the operation itself only dominates one branch (due to - * being short-circuited) then it will only control blocks dominated by the - * true (for `&&`) or false (for `||`) branch. - */ - cached - predicate controls(BasicBlock controlled, boolean testIsTrue) { none() } - - /** Holds if (determined by this guard) `left < right + k` evaluates to `isLessThan` if this expression evaluates to `testIsTrue`. */ - cached - predicate comparesLt(Expr left, Expr right, int k, boolean isLessThan, boolean testIsTrue) { - none() - } - - /** - * Holds if (determined by this guard) `left < right + k` must be `isLessThan` in `block`. - * If `isLessThan = false` then this implies `left >= right + k`. - */ - cached - predicate ensuresLt(Expr left, Expr right, int k, BasicBlock block, boolean isLessThan) { none() } - - /** Holds if (determined by this guard) `left == right + k` evaluates to `areEqual` if this expression evaluates to `testIsTrue`. */ - cached - predicate comparesEq(Expr left, Expr right, int k, boolean areEqual, boolean testIsTrue) { - none() - } - - /** - * Holds if (determined by this guard) `left == right + k` must be `areEqual` in `block`. - * If `areEqual = false` then this implies `left != right + k`. - */ - cached - predicate ensuresEq(Expr left, Expr right, int k, BasicBlock block, boolean areEqual) { none() } -} - -/** - * Holds if the truth of the binary logical expression `blo` having value `wholeIsTrue` - * implies that the truth of the child expression `part` has truth value `partIsTrue`. - * - * For example if the binary operation: - * ```csharp - * x && y - * ``` - * is true, `x` and `y` must also be true, so `impliesValue(x, true, true)` and - * `impliesValue(y, true, true)` hold. - */ -private predicate impliesValue( - BinaryLogicalOperation blo, Expr part, boolean partIsTrue, boolean wholeIsTrue -) { - blo instanceof LogicalAndExpr and - ( - wholeIsTrue = true and partIsTrue = true and part = blo.getAnOperand() - or - wholeIsTrue = true and - impliesValue(blo.getAnOperand(), part, partIsTrue, true) - ) - or - blo instanceof LogicalOrExpr and - ( - wholeIsTrue = false and partIsTrue = false and part = blo.getAnOperand() - or - wholeIsTrue = false and - impliesValue(blo.getAnOperand(), part, partIsTrue, false) - ) -} - -/** - * A binary logical operator in the AST that guards one or more basic blocks. - */ -private class GuardConditionFromBinaryLogicalOperator extends GuardCondition { - GuardConditionFromBinaryLogicalOperator() { - this.(BinaryLogicalOperation).getAnOperand() instanceof GuardCondition - } - - override predicate controls(BasicBlock controlled, boolean testIsTrue) { - exists(BinaryLogicalOperation binop, GuardCondition lhs, GuardCondition rhs | - this = binop and - lhs = binop.getLeftOperand() and - rhs = binop.getRightOperand() and - lhs.controls(controlled, testIsTrue) and - rhs.controls(controlled, testIsTrue) - ) - } - - override predicate comparesLt(Expr left, Expr right, int k, boolean isLessThan, boolean testIsTrue) { - exists(boolean partIsTrue, GuardCondition part | - impliesValue(this, part, partIsTrue, testIsTrue) - | - part.comparesLt(left, right, k, isLessThan, partIsTrue) - ) - } - - override predicate ensuresLt(Expr left, Expr right, int k, BasicBlock block, boolean isLessThan) { - exists(boolean testIsTrue | - this.comparesLt(left, right, k, isLessThan, testIsTrue) and this.controls(block, testIsTrue) - ) - } - - override predicate comparesEq(Expr left, Expr right, int k, boolean areEqual, boolean testIsTrue) { - exists(boolean partIsTrue, GuardCondition part | - impliesValue(this, part, partIsTrue, testIsTrue) - | - part.comparesEq(left, right, k, areEqual, partIsTrue) - ) - } - - override predicate ensuresEq(Expr left, Expr right, int k, BasicBlock block, boolean areEqual) { - exists(boolean testIsTrue | - this.comparesEq(left, right, k, areEqual, testIsTrue) and this.controls(block, testIsTrue) - ) - } -} - -/** - * A `!` operator in the AST that guards one or more basic blocks, and does not have a corresponding - * IR instruction. - */ -private class GuardConditionFromShortCircuitNot extends GuardCondition, LogicalNotExpr { - GuardConditionFromShortCircuitNot() { - not exists(Instruction inst | this = inst.getAst()) and - exists(IRGuardCondition ir | this.getOperand() = ir.getAst()) - } - - override predicate controls(BasicBlock controlled, boolean testIsTrue) { - this.getOperand().(GuardCondition).controls(controlled, testIsTrue.booleanNot()) - } - - override predicate comparesLt(Expr left, Expr right, int k, boolean isLessThan, boolean testIsTrue) { - this.getOperand() - .(GuardCondition) - .comparesLt(left, right, k, isLessThan, testIsTrue.booleanNot()) - } - - override predicate ensuresLt(Expr left, Expr right, int k, BasicBlock block, boolean isLessThan) { - this.getOperand().(GuardCondition).ensuresLt(left, right, k, block, isLessThan.booleanNot()) - } - - override predicate comparesEq(Expr left, Expr right, int k, boolean areEqual, boolean testIsTrue) { - this.getOperand().(GuardCondition).comparesEq(left, right, k, areEqual, testIsTrue.booleanNot()) - } - - override predicate ensuresEq(Expr left, Expr right, int k, BasicBlock block, boolean areEqual) { - this.getOperand().(GuardCondition).ensuresEq(left, right, k, block, areEqual.booleanNot()) - } -} - -/** - * A Boolean condition in the AST that guards one or more basic blocks and has a corresponding IR - * instruction. - */ -private class GuardConditionFromIR extends GuardCondition { - IRGuardCondition ir; - - GuardConditionFromIR() { this = ir.getUnconvertedResultExpression() } - - override predicate controls(BasicBlock controlled, boolean testIsTrue) { - // This condition must determine the flow of control; that is, this - // node must be a top-level condition. - this.controlsBlock1(controlled, testIsTrue) - } - - /** Holds if (determined by this guard) `left < right + k` evaluates to `isLessThan` if this expression evaluates to `testIsTrue`. */ - override predicate comparesLt(Expr left, Expr right, int k, boolean isLessThan, boolean testIsTrue) { - exists(Instruction li, Instruction ri | - li.getUnconvertedResultExpression() = left and - ri.getUnconvertedResultExpression() = right and - ir.comparesLt(li.getAUse(), ri.getAUse(), k, isLessThan, testIsTrue) - ) - } - - /** - * Holds if (determined by this guard) `left < right + k` must be `isLessThan` in `block`. - * If `isLessThan = false` then this implies `left >= right + k`. - */ - override predicate ensuresLt(Expr left, Expr right, int k, BasicBlock block, boolean isLessThan) { - exists(Instruction li, Instruction ri, boolean testIsTrue | - li.getUnconvertedResultExpression() = left and - ri.getUnconvertedResultExpression() = right and - ir.comparesLt(li.getAUse(), ri.getAUse(), k, isLessThan, testIsTrue) and - this.controls(block, testIsTrue) - ) - } - - /** Holds if (determined by this guard) `left == right + k` evaluates to `areEqual` if this expression evaluates to `testIsTrue`. */ - override predicate comparesEq(Expr left, Expr right, int k, boolean areEqual, boolean testIsTrue) { - exists(Instruction li, Instruction ri | - li.getUnconvertedResultExpression() = left and - ri.getUnconvertedResultExpression() = right and - ir.comparesEq(li.getAUse(), ri.getAUse(), k, areEqual, testIsTrue) - ) - } - - /** - * Holds if (determined by this guard) `left == right + k` must be `areEqual` in `block`. - * If `areEqual = false` then this implies `left != right + k`. - */ - override predicate ensuresEq(Expr left, Expr right, int k, BasicBlock block, boolean areEqual) { - exists(Instruction li, Instruction ri, boolean testIsTrue | - li.getUnconvertedResultExpression() = left and - ri.getUnconvertedResultExpression() = right and - ir.comparesEq(li.getAUse(), ri.getAUse(), k, areEqual, testIsTrue) and - this.controls(block, testIsTrue) - ) - } - - /** - * Holds if this condition controls `block`, meaning that `block` is only - * entered if the value of this condition is `testIsTrue`. This helper - * predicate does not necessarily hold for binary logical operations like - * `&&` and `||`. See the detailed explanation on predicate `controls`. - */ - private predicate controlsBlock1(BasicBlock controlled, boolean testIsTrue) { - exists(IRBlock irb | - forex(IRGuardCondition inst | inst = ir | inst.controls(irb, testIsTrue)) and - irb.getAnInstruction().getAst().(ControlFlowElement).getAControlFlowNode().getBasicBlock() = - controlled and - not isUnreachedBlock(irb) - ) - } -} - -/** - * A Boolean condition in the IR that guards one or more basic blocks. This includes - * operands of logical operators but not switch statements. Note that `&&` and `||` - * don't have an explicit representation in the IR, and therefore will not appear as - * IRGuardConditions. - */ -cached -class IRGuardCondition extends Instruction { - ConditionalBranchInstruction branch; - - cached - IRGuardCondition() { branch = get_branch_for_condition(this) } - - /** - * Holds if this condition controls `block`, meaning that `block` is only - * entered if the value of this condition is `testIsTrue`. - * - * Illustration: - * - * ``` - * [ (testIsTrue) ] - * [ this ----------------succ ---- controlled ] - * [ | | ] - * [ (testIsFalse) | ------ ... ] - * [ other ] - * ``` - * - * The predicate holds if all paths to `controlled` go via the `testIsTrue` - * edge of the control-flow graph. In other words, the `testIsTrue` edge - * must dominate `controlled`. This means that `controlled` must be - * dominated by both `this` and `succ` (the target of the `testIsTrue` - * edge). It also means that any other edge into `succ` must be a back-edge - * from a node which is dominated by `succ`. - * - * The short-circuit boolean operations have slightly surprising behavior - * here: because the operation itself only dominates one branch (due to - * being short-circuited) then it will only control blocks dominated by the - * true (for `&&`) or false (for `||`) branch. - */ - cached - predicate controls(IRBlock controlled, boolean testIsTrue) { - // This condition must determine the flow of control; that is, this - // node must be a top-level condition. - this.controlsBlock(controlled, testIsTrue) - or - exists(IRGuardCondition ne | - this = ne.(LogicalNotInstruction).getUnary() and - ne.controls(controlled, testIsTrue.booleanNot()) - ) - } - - cached - predicate controlsEdge(IRBlock pred, IRBlock succ, boolean testIsTrue) { - pred.getASuccessor() = succ and - this.controls(pred, testIsTrue) - or - this.hasBranchEdge(succ, testIsTrue) and - branch.getCondition() = this and - branch.getBlock() = pred - } - - /** - * Holds if `branch` jumps directly to `succ` when this condition is `testIsTrue`. - * - * This predicate is intended to help with situations in which an inference can only be made - * based on an edge between a block with multiple successors and a block with multiple - * predecessors. For example, in the following situation, an inference can be made about the - * value of `x` at the end of the `if` statement, but there is no block which is controlled by - * the `if` statement when `x >= y`. - * ```csharp - * if (x < y) { - * x = y; - * } - * return x; - * ``` - */ - private predicate hasBranchEdge(IRBlock succ, boolean testIsTrue) { - branch.getCondition() = this and - ( - testIsTrue = true and - succ.getFirstInstruction() = branch.getTrueSuccessor() - or - testIsTrue = false and - succ.getFirstInstruction() = branch.getFalseSuccessor() - ) - } - - /** Holds if (determined by this guard) `left < right + k` evaluates to `isLessThan` if this expression evaluates to `testIsTrue`. */ - cached - predicate comparesLt(Operand left, Operand right, int k, boolean isLessThan, boolean testIsTrue) { - compares_lt(this, left, right, k, isLessThan, testIsTrue) - } - - /** - * Holds if (determined by this guard) `left < right + k` must be `isLessThan` in `block`. - * If `isLessThan = false` then this implies `left >= right + k`. - */ - cached - predicate ensuresLt(Operand left, Operand right, int k, IRBlock block, boolean isLessThan) { - exists(boolean testIsTrue | - compares_lt(this, left, right, k, isLessThan, testIsTrue) and this.controls(block, testIsTrue) - ) - } - - /** - * Holds if (determined by this guard) `left < right + k` must be `isLessThan` on the edge from - * `pred` to `succ`. If `isLessThan = false` then this implies `left >= right + k`. - */ - cached - predicate ensuresLtEdge( - Operand left, Operand right, int k, IRBlock pred, IRBlock succ, boolean isLessThan - ) { - exists(boolean testIsTrue | - compares_lt(this, left, right, k, isLessThan, testIsTrue) and - this.controlsEdge(pred, succ, testIsTrue) - ) - } - - /** Holds if (determined by this guard) `left == right + k` evaluates to `areEqual` if this expression evaluates to `testIsTrue`. */ - cached - predicate comparesEq(Operand left, Operand right, int k, boolean areEqual, boolean testIsTrue) { - compares_eq(this, left, right, k, areEqual, testIsTrue) - } - - /** - * Holds if (determined by this guard) `left == right + k` must be `areEqual` in `block`. - * If `areEqual = false` then this implies `left != right + k`. - */ - cached - predicate ensuresEq(Operand left, Operand right, int k, IRBlock block, boolean areEqual) { - exists(boolean testIsTrue | - compares_eq(this, left, right, k, areEqual, testIsTrue) and this.controls(block, testIsTrue) - ) - } - - /** - * Holds if (determined by this guard) `left == right + k` must be `areEqual` on the edge from - * `pred` to `succ`. If `areEqual = false` then this implies `left != right + k`. - */ - cached - predicate ensuresEqEdge( - Operand left, Operand right, int k, IRBlock pred, IRBlock succ, boolean areEqual - ) { - exists(boolean testIsTrue | - compares_eq(this, left, right, k, areEqual, testIsTrue) and - this.controlsEdge(pred, succ, testIsTrue) - ) - } - - /** - * Holds if this condition controls `block`, meaning that `block` is only - * entered if the value of this condition is `testIsTrue`. This helper - * predicate does not necessarily hold for binary logical operations like - * `&&` and `||`. See the detailed explanation on predicate `controls`. - */ - private predicate controlsBlock(IRBlock controlled, boolean testIsTrue) { - not isUnreachedBlock(controlled) and - exists(IRBlock branchBlock | branchBlock.getAnInstruction() = branch | - exists(IRBlock succ | - testIsTrue = true and succ.getFirstInstruction() = branch.getTrueSuccessor() - or - testIsTrue = false and succ.getFirstInstruction() = branch.getFalseSuccessor() - | - branch.getCondition() = this and - succ.dominates(controlled) and - forall(IRBlock pred | pred.getASuccessor() = succ | - pred = branchBlock or succ.dominates(pred) or not pred.isReachableFromFunctionEntry() - ) - ) - ) - } -} - -private ConditionalBranchInstruction get_branch_for_condition(Instruction guard) { - result.getCondition() = guard - or - exists(LogicalNotInstruction cond | - result = get_branch_for_condition(cond) and cond.getUnary() = guard - ) -} - -/** - * Holds if `left == right + k` is `areEqual` given that test is `testIsTrue`. - * - * Beware making mistaken logical implications here relating `areEqual` and `testIsTrue`. - */ -private predicate compares_eq( - Instruction test, Operand left, Operand right, int k, boolean areEqual, boolean testIsTrue -) { - /* The simple case where the test *is* the comparison so areEqual = testIsTrue xor eq. */ - exists(boolean eq | simple_comparison_eq(test, left, right, k, eq) | - areEqual = true and testIsTrue = eq - or - areEqual = false and testIsTrue = eq.booleanNot() - ) - or - // I think this is handled by forwarding in controlsBlock. - //or - //logical_comparison_eq(test, left, right, k, areEqual, testIsTrue) - /* a == b + k => b == a - k */ - exists(int mk | k = -mk | compares_eq(test, right, left, mk, areEqual, testIsTrue)) - or - complex_eq(test, left, right, k, areEqual, testIsTrue) - or - /* (x is true => (left == right + k)) => (!x is false => (left == right + k)) */ - exists(boolean isFalse | testIsTrue = isFalse.booleanNot() | - compares_eq(test.(LogicalNotInstruction).getUnary(), left, right, k, areEqual, isFalse) - ) -} - -/** Rearrange various simple comparisons into `left == right + k` form. */ -private predicate simple_comparison_eq( - CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual -) { - left = cmp.getLeftOperand() and - cmp instanceof CompareEQInstruction and - right = cmp.getRightOperand() and - k = 0 and - areEqual = true - or - left = cmp.getLeftOperand() and - cmp instanceof CompareNEInstruction and - right = cmp.getRightOperand() and - k = 0 and - areEqual = false -} - -private predicate complex_eq( - CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, boolean testIsTrue -) { - sub_eq(cmp, left, right, k, areEqual, testIsTrue) - or - add_eq(cmp, left, right, k, areEqual, testIsTrue) -} - -/* - * Simplification of inequality expressions - * Simplify conditions in the source to the canonical form l < r + k. - */ - -/** Holds if `left < right + k` evaluates to `isLt` given that test is `testIsTrue`. */ -private predicate compares_lt( - Instruction test, Operand left, Operand right, int k, boolean isLt, boolean testIsTrue -) { - /* In the simple case, the test is the comparison, so isLt = testIsTrue */ - simple_comparison_lt(test, left, right, k) and isLt = true and testIsTrue = true - or - simple_comparison_lt(test, left, right, k) and isLt = false and testIsTrue = false - or - complex_lt(test, left, right, k, isLt, testIsTrue) - or - /* (not (left < right + k)) => (left >= right + k) */ - exists(boolean isGe | isLt = isGe.booleanNot() | - compares_ge(test, left, right, k, isGe, testIsTrue) - ) - or - /* (x is true => (left < right + k)) => (!x is false => (left < right + k)) */ - exists(boolean isFalse | testIsTrue = isFalse.booleanNot() | - compares_lt(test.(LogicalNotInstruction).getUnary(), left, right, k, isLt, isFalse) - ) -} - -/** `(a < b + k) => (b > a - k) => (b >= a + (1-k))` */ -private predicate compares_ge( - Instruction test, Operand left, Operand right, int k, boolean isGe, boolean testIsTrue -) { - exists(int onemk | k = 1 - onemk | compares_lt(test, right, left, onemk, isGe, testIsTrue)) -} - -/** Rearrange various simple comparisons into `left < right + k` form. */ -private predicate simple_comparison_lt(CompareInstruction cmp, Operand left, Operand right, int k) { - left = cmp.getLeftOperand() and - cmp instanceof CompareLTInstruction and - right = cmp.getRightOperand() and - k = 0 - or - left = cmp.getLeftOperand() and - cmp instanceof CompareLEInstruction and - right = cmp.getRightOperand() and - k = 1 - or - right = cmp.getLeftOperand() and - cmp instanceof CompareGTInstruction and - left = cmp.getRightOperand() and - k = 0 - or - right = cmp.getLeftOperand() and - cmp instanceof CompareGEInstruction and - left = cmp.getRightOperand() and - k = 1 -} - -private predicate complex_lt( - CompareInstruction cmp, Operand left, Operand right, int k, boolean isLt, boolean testIsTrue -) { - sub_lt(cmp, left, right, k, isLt, testIsTrue) - or - add_lt(cmp, left, right, k, isLt, testIsTrue) -} - -// left - x < right + c => left < right + (c+x) -// left < (right - x) + c => left < right + (c-x) -private predicate sub_lt( - CompareInstruction cmp, Operand left, Operand right, int k, boolean isLt, boolean testIsTrue -) { - exists(SubInstruction lhs, int c, int x | - compares_lt(cmp, lhs.getAUse(), right, c, isLt, testIsTrue) and - left = lhs.getLeftOperand() and - x = int_value(lhs.getRight()) and - k = c + x - ) - or - exists(SubInstruction rhs, int c, int x | - compares_lt(cmp, left, rhs.getAUse(), c, isLt, testIsTrue) and - right = rhs.getLeftOperand() and - x = int_value(rhs.getRight()) and - k = c - x - ) -} - -// left + x < right + c => left < right + (c-x) -// left < (right + x) + c => left < right + (c+x) -private predicate add_lt( - CompareInstruction cmp, Operand left, Operand right, int k, boolean isLt, boolean testIsTrue -) { - exists(AddInstruction lhs, int c, int x | - compares_lt(cmp, lhs.getAUse(), right, c, isLt, testIsTrue) and - ( - left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) - or - left = lhs.getRightOperand() and x = int_value(lhs.getLeft()) - ) and - k = c - x - ) - or - exists(AddInstruction rhs, int c, int x | - compares_lt(cmp, left, rhs.getAUse(), c, isLt, testIsTrue) and - ( - right = rhs.getLeftOperand() and x = int_value(rhs.getRight()) - or - right = rhs.getRightOperand() and x = int_value(rhs.getLeft()) - ) and - k = c + x - ) -} - -// left - x == right + c => left == right + (c+x) -// left == (right - x) + c => left == right + (c-x) -private predicate sub_eq( - CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, boolean testIsTrue -) { - exists(SubInstruction lhs, int c, int x | - compares_eq(cmp, lhs.getAUse(), right, c, areEqual, testIsTrue) and - left = lhs.getLeftOperand() and - x = int_value(lhs.getRight()) and - k = c + x - ) - or - exists(SubInstruction rhs, int c, int x | - compares_eq(cmp, left, rhs.getAUse(), c, areEqual, testIsTrue) and - right = rhs.getLeftOperand() and - x = int_value(rhs.getRight()) and - k = c - x - ) -} - -// left + x == right + c => left == right + (c-x) -// left == (right + x) + c => left == right + (c+x) -private predicate add_eq( - CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, boolean testIsTrue -) { - exists(AddInstruction lhs, int c, int x | - compares_eq(cmp, lhs.getAUse(), right, c, areEqual, testIsTrue) and - ( - left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) - or - left = lhs.getRightOperand() and x = int_value(lhs.getLeft()) - ) and - k = c - x - ) - or - exists(AddInstruction rhs, int c, int x | - compares_eq(cmp, left, rhs.getAUse(), c, areEqual, testIsTrue) and - ( - right = rhs.getLeftOperand() and x = int_value(rhs.getRight()) - or - right = rhs.getRightOperand() and x = int_value(rhs.getLeft()) - ) and - k = c + x - ) -} - -/** The int value of integer constant expression. */ -private int int_value(Instruction i) { result = i.(IntegerConstantInstruction).getValue().toInt() } diff --git a/csharp/ql/src/experimental/ir/internal/IRUtilities.qll b/csharp/ql/src/experimental/ir/internal/IRUtilities.qll deleted file mode 100644 index 1aeace91377..00000000000 --- a/csharp/ql/src/experimental/ir/internal/IRUtilities.qll +++ /dev/null @@ -1,16 +0,0 @@ -private import csharp - -/** - * Get the actual type of the specified variable, as opposed to the declared - * type. - */ -Type getVariableType(Variable v) { - // C# doesn't seem to have any cases where the variable's actual type differs - // from its declared type. - result = v.getType() -} - -predicate hasCaseEdge(CaseStmt caseStmt, string minValue, string maxValue) { - minValue = caseStmt.getPattern().getValue() and - maxValue = minValue -} diff --git a/csharp/ql/src/experimental/ir/internal/IntegerConstant.qll b/csharp/ql/src/experimental/ir/internal/IntegerConstant.qll deleted file mode 100644 index 4af31745ab2..00000000000 --- a/csharp/ql/src/experimental/ir/internal/IntegerConstant.qll +++ /dev/null @@ -1,236 +0,0 @@ -/** - * Provides predicates for manipulating integer constants that are tracked by constant folding and - * similar analyses. - */ - -/** - * An alias used to represent the constant value of an integer, if one can be determined. If no - * single constant value can be determined, or if the constant value is out of the representable - * range, it will be represented as the special value `unknown()`. This allows `IntValue` to be used - * in contexts where there must always be a value for the `IntValue`, even if no constant value is - * known. - */ -class IntValue = int; - -/** - * Returns the value of the maximum representable integer. - */ -int maxValue() { result = 2147483647 } - -/** - * Returns the value of the minimum representable integer. - */ -int minValue() { result = -2147483647 } - -/** - * Returns a value representing an unknown integer. - */ -IntValue unknown() { result = -2147483648 } - -/** - * Holds if `n` has a known value. - */ -bindingset[n] -predicate hasValue(IntValue n) { n != unknown() } - -/** - * Returns a string representation of `n`. If `n` does not have a known value, the result is "??". - */ -bindingset[n] -string intValueToString(IntValue n) { if hasValue(n) then result = n.toString() else result = "??" } - -/** - * Holds if the value `f` is within the range of representable integers. - */ -bindingset[f] -pragma[inline] -private predicate isRepresentable(float f) { f >= minValue() and f <= maxValue() } - -/** - * Gets the value of `n`. Holds only if `n` has a known value. - */ -bindingset[n] -int getValue(IntValue n) { hasValue(n) and result = n } - -/** - * Returns `a + b`. If either input is unknown, or if the addition overflows, - * the result is unknown. - */ -bindingset[a, b] -IntValue add(IntValue a, IntValue b) { - if hasValue(a) and hasValue(b) and isRepresentable(a.(float) + b.(float)) - then result = a + b - else result = unknown() -} - -/** - * Returns `a - b`. If either input is unknown, or if the subtraction overflows, - * the result is unknown. - */ -bindingset[a, b] -IntValue sub(IntValue a, IntValue b) { - if hasValue(a) and hasValue(b) and isRepresentable(a.(float) - b.(float)) - then result = a - b - else result = unknown() -} - -/** - * Returns `a * b`. If the multiplication overflows, the result is unknown. If - * either input is unknown and the other input is non-zero, the result is - * unknown. - */ -bindingset[a, b] -IntValue mul(IntValue a, IntValue b) { - if a = 0 or b = 0 - then result = 0 - else - if hasValue(a) and hasValue(b) and isRepresentable(a.(float) * b.(float)) - then result = a * b - else result = unknown() -} - -/** - * Returns `a / b`. If either input is unknown, or if `b` is zero, the result is - * unknown. - */ -bindingset[a, b] -IntValue div(IntValue a, IntValue b) { - // Normally, integer division has to worry about overflow for INT_MIN/-1. - // However, since we use INT_MIN to represent an unknown value anyway, we only - // have to worry about division by zero. - if hasValue(a) and hasValue(b) and b != 0 then result = a / b else result = unknown() -} - -/** - * Returns `a == b`. If either input is unknown, the result is unknown. - */ -bindingset[a, b] -IntValue compareEQ(IntValue a, IntValue b) { - if hasValue(a) and hasValue(b) - then if a = b then result = 1 else result = 0 - else result = unknown() -} - -/** - * Returns `a != b`. If either input is unknown, the result is unknown. - */ -bindingset[a, b] -IntValue compareNE(IntValue a, IntValue b) { - if hasValue(a) and hasValue(b) - then if a != b then result = 1 else result = 0 - else result = unknown() -} - -/** - * Returns `a < b`. If either input is unknown, the result is unknown. - */ -bindingset[a, b] -IntValue compareLT(IntValue a, IntValue b) { - if hasValue(a) and hasValue(b) - then if a < b then result = 1 else result = 0 - else result = unknown() -} - -/** - * Returns `a > b`. If either input is unknown, the result is unknown. - */ -bindingset[a, b] -IntValue compareGT(IntValue a, IntValue b) { - if hasValue(a) and hasValue(b) - then if a > b then result = 1 else result = 0 - else result = unknown() -} - -/** - * Returns `a <= b`. If either input is unknown, the result is unknown. - */ -bindingset[a, b] -IntValue compareLE(IntValue a, IntValue b) { - if hasValue(a) and hasValue(b) - then if a <= b then result = 1 else result = 0 - else result = unknown() -} - -/** - * Returns `a >= b`. If either input is unknown, the result is unknown. - */ -bindingset[a, b] -IntValue compareGE(IntValue a, IntValue b) { - if hasValue(a) and hasValue(b) - then if a >= b then result = 1 else result = 0 - else result = unknown() -} - -/** - * Return `-a`. If `a` is unknown, the result is unknown. - */ -bindingset[a] -IntValue neg(IntValue a) { - result = -a // -INT_MIN = INT_MIN, so this preserves unknown -} - -/** - * Holds if `a` is equal to `b`. Does not hold if either `a` or `b` is unknown. - */ -bindingset[a, b] -predicate isEQ(IntValue a, IntValue b) { hasValue(a) and hasValue(b) and a = b } - -/** - * Holds if `a` is not equal to `b`. Does not hold if either `a` or `b` is unknown. - */ -bindingset[a, b] -predicate isNE(IntValue a, IntValue b) { hasValue(a) and hasValue(b) and a != b } - -/** - * Holds if `a` is less than `b`. Does not hold if either `a` or `b` is unknown. - */ -bindingset[a, b] -predicate isLT(IntValue a, IntValue b) { hasValue(a) and hasValue(b) and a < b } - -/** - * Holds if `a` is less than or equal to `b`. Does not hold if either `a` or `b` is unknown. - */ -bindingset[a, b] -predicate isLE(IntValue a, IntValue b) { hasValue(a) and hasValue(b) and a <= b } - -/** - * Holds if `a` is greater than `b`. Does not hold if either `a` or `b` is unknown. - */ -bindingset[a, b] -predicate isGT(IntValue a, IntValue b) { hasValue(a) and hasValue(b) and a > b } - -/** - * Holds if `a` is greater than or equal to `b`. Does not hold if either `a` or `b` is unknown. - */ -bindingset[a, b] -predicate isGE(IntValue a, IntValue b) { hasValue(a) and hasValue(b) and a >= b } - -/** - * Converts the bit count in `bits` to a byte count and a bit count in the form - * "bytes:bits". If `bits` represents an integer number of bytes, the ":bits" section is omitted. - * If `bits` does not have a known value, the result is "?". - */ -bindingset[bits] -string bitsToBytesAndBits(IntValue bits) { - exists(int bytes, int leftoverBits | - hasValue(bits) and - bytes = bits / 8 and - leftoverBits = bits % 8 and - if leftoverBits = 0 then result = bytes.toString() else result = bytes + ":" + leftoverBits - ) - or - not hasValue(bits) and result = "?" -} - -/** - * Gets a printable string for a bit offset with possibly unknown value. - */ -bindingset[bitOffset] -string getBitOffsetString(IntValue bitOffset) { - if hasValue(bitOffset) - then - if bitOffset >= 0 - then result = "+" + bitsToBytesAndBits(bitOffset) - else result = "-" + bitsToBytesAndBits(neg(bitOffset)) - else result = "+?" -} diff --git a/csharp/ql/src/experimental/ir/internal/IntegerInterval.qll b/csharp/ql/src/experimental/ir/internal/IntegerInterval.qll deleted file mode 100644 index 4f8f4b4e672..00000000000 --- a/csharp/ql/src/experimental/ir/internal/IntegerInterval.qll +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Support for integer intervals. - * An interval is represented as by its inclusive lower bound, `start`, and its exclusive upper bound, `end`. - * Either or both of `start` and `end` may have an unknown value. - */ - -import Overlap -private import IntegerConstant - -/** - * Gets the overlap relationship between the definition interval [`defStart`, `defEnd`) and the use interval - * [`useStart`, `useEnd`). - */ -bindingset[defStart, defEnd, useStart, useEnd] -Overlap getOverlap(IntValue defStart, IntValue defEnd, IntValue useStart, IntValue useEnd) { - if isEQ(defStart, useStart) and isEQ(defEnd, useEnd) - then result instanceof MustExactlyOverlap - else - if isLE(defStart, useStart) and isGE(defEnd, useEnd) - then result instanceof MustTotallyOverlap - else ( - not isLE(defEnd, useStart) and - not isGE(defStart, useEnd) and - result instanceof MayPartiallyOverlap - ) -} - -/** - * Gets a string representation of the interval [`start`, `end`). - */ -bindingset[start, end] -string getIntervalString(IntValue start, IntValue end) { - // We represent an interval has half-open, so print it as "[start..end)". - result = "[" + bitsToBytesAndBits(start) + ".." + bitsToBytesAndBits(end) + ")" -} diff --git a/csharp/ql/src/experimental/ir/internal/IntegerPartial.qll b/csharp/ql/src/experimental/ir/internal/IntegerPartial.qll deleted file mode 100644 index 0e24f283b17..00000000000 --- a/csharp/ql/src/experimental/ir/internal/IntegerPartial.qll +++ /dev/null @@ -1,99 +0,0 @@ -/** - * Provides basic arithmetic operations that have no result if their result - * would overflow a 32-bit two's complement integer. - */ - -/** - * Gets the value of the maximum representable integer. - */ -int maxValue() { result = 2147483647 } - -/** - * Gets the value of the minimum representable integer. - */ -int minValue() { result = -2147483648 } - -/** - * Holds if the value `f` is within the range of representable integers. - */ -bindingset[f] -pragma[inline] -private predicate isRepresentable(float f) { f >= minValue() and f <= maxValue() } - -/** - * Returns `a + b`. If the addition overflows, there is no result. - */ -bindingset[a, b] -int add(int a, int b) { - isRepresentable(a.(float) + b.(float)) and - result = a + b -} - -/** - * Returns `a - b`. If the subtraction overflows, there is no result. - */ -bindingset[a, b] -int sub(int a, int b) { - isRepresentable(a.(float) - b.(float)) and - result = a - b -} - -/** - * Returns `a * b`. If the multiplication overflows, there is no result. If - * either input is not given, and the other input is non-zero, there is no - * result. - */ -bindingset[a, b] -int mul(int a, int b) { - a = 0 and - result = 0 - or - b = 0 and - result = 0 - or - isRepresentable(a.(float) * b.(float)) and - result = a * b -} - -/** - * Returns `a / b`. If the division overflows, there is no result. - */ -bindingset[a, b] -int div(int a, int b) { - b != 0 and - (a != minValue() or b != -1) and - result = a / b -} - -/** Returns `a == b`. */ -bindingset[a, b] -int compareEQ(int a, int b) { if a = b then result = 1 else result = 0 } - -/** Returns `a != b`. */ -bindingset[a, b] -int compareNE(int a, int b) { if a != b then result = 1 else result = 0 } - -/** Returns `a < b`. */ -bindingset[a, b] -int compareLT(int a, int b) { if a < b then result = 1 else result = 0 } - -/** Returns `a > b`. */ -bindingset[a, b] -int compareGT(int a, int b) { if a > b then result = 1 else result = 0 } - -/** Returns `a <= b`. */ -bindingset[a, b] -int compareLE(int a, int b) { if a <= b then result = 1 else result = 0 } - -/** Returns `a >= b`. */ -bindingset[a, b] -int compareGE(int a, int b) { if a >= b then result = 1 else result = 0 } - -/** - * Returns `-a`. If the negation would overflow, there is no result. - */ -bindingset[a] -int neg(int a) { - a != minValue() and - result = -a -} diff --git a/csharp/ql/src/experimental/ir/internal/Overlap.qll b/csharp/ql/src/experimental/ir/internal/Overlap.qll deleted file mode 100644 index ca643b56cbb..00000000000 --- a/csharp/ql/src/experimental/ir/internal/Overlap.qll +++ /dev/null @@ -1,70 +0,0 @@ -private newtype TOverlap = - TMayPartiallyOverlap() or - TMustTotallyOverlap() or - TMustExactlyOverlap() - -/** - * Represents a possible overlap between two memory ranges. - */ -abstract class Overlap extends TOverlap { - abstract string toString(); - - /** - * Gets a value representing how precise this overlap is. The higher the value, the more precise - * the overlap. The precision values are ordered as - * follows, from most to least precise: - * `MustExactlyOverlap` - * `MustTotallyOverlap` - * `MayPartiallyOverlap` - */ - abstract int getPrecision(); -} - -/** - * Represents a partial overlap between two memory ranges, which may or may not - * actually occur in practice. - */ -class MayPartiallyOverlap extends Overlap, TMayPartiallyOverlap { - final override string toString() { result = "MayPartiallyOverlap" } - - final override int getPrecision() { result = 0 } -} - -/** - * Represents an overlap in which the first memory range is known to include all - * bits of the second memory range, but may be larger or have a different type. - */ -class MustTotallyOverlap extends Overlap, TMustTotallyOverlap { - final override string toString() { result = "MustTotallyOverlap" } - - final override int getPrecision() { result = 1 } -} - -/** - * Represents an overlap between two memory ranges that have the same extent and - * the same type. - */ -class MustExactlyOverlap extends Overlap, TMustExactlyOverlap { - final override string toString() { result = "MustExactlyOverlap" } - - final override int getPrecision() { result = 2 } -} - -/** - * Gets the `Overlap` that best represents the relationship between two memory locations `a` and - * `c`, where `getOverlap(a, b) = previousOverlap` and `getOverlap(b, c) = newOverlap`, for some - * intermediate memory location `b`. - */ -Overlap combineOverlap(Overlap previousOverlap, Overlap newOverlap) { - // Note that it's possible that two less precise overlaps could combine to result in a more - // precise overlap. For example, both `previousOverlap` and `newOverlap` could be - // `MustTotallyOverlap` even though the actual relationship between `a` and `c` is - // `MustExactlyOverlap`. We will still return `MustTotallyOverlap` as the best conservative - // approximation we can make without additional input information. - result = - min(Overlap overlap | - overlap = [previousOverlap, newOverlap] - | - overlap order by overlap.getPrecision() - ) -} diff --git a/csharp/ql/src/experimental/ir/internal/TempVariableTag.qll b/csharp/ql/src/experimental/ir/internal/TempVariableTag.qll deleted file mode 100644 index 8950c2cd8a8..00000000000 --- a/csharp/ql/src/experimental/ir/internal/TempVariableTag.qll +++ /dev/null @@ -1,32 +0,0 @@ -import csharp - -newtype TTempVariableTag = - ConditionValueTempVar() or - ReturnValueTempVar() or - ThrowTempVar() or - LambdaTempVar() or - ForeachEnumTempVar() or - LockedVarTemp() or - LockWasTakenTemp() or - EllipsisTempVar() or - ThisTempVar() - -string getTempVariableTagId(TTempVariableTag tag) { - tag = ConditionValueTempVar() and result = "CondVal" - or - tag = ReturnValueTempVar() and result = "Ret" - or - tag = ThrowTempVar() and result = "Throw" - or - tag = LambdaTempVar() and result = "Lambda" - or - tag = ForeachEnumTempVar() and result = "ForeachEnum" - or - tag = LockedVarTemp() and result = "LockedVarTemp" - or - tag = LockWasTakenTemp() and result = "LockWasTakenTemp" - or - tag = EllipsisTempVar() and result = "Ellipsis" - or - tag = ThisTempVar() and result = "This" -} diff --git a/csharp/ql/src/experimental/ir/rangeanalysis/Bound.qll b/csharp/ql/src/experimental/ir/rangeanalysis/Bound.qll deleted file mode 100644 index 295c76a025d..00000000000 --- a/csharp/ql/src/experimental/ir/rangeanalysis/Bound.qll +++ /dev/null @@ -1,79 +0,0 @@ -import csharp -private import experimental.ir.IR -private import experimental.ir.ValueNumbering - -private newtype TBound = - TBoundZero() or - TBoundValueNumber(ValueNumber vn) { - exists(Instruction i | - vn.getAnInstruction() = i and - ( - i.getResultType() instanceof IntegralType or - i.getResultType() instanceof PointerType - ) and - not vn.getAnInstruction() instanceof ConstantInstruction - | - i instanceof PhiInstruction - or - i instanceof InitializeParameterInstruction - or - i instanceof CallInstruction - or - i instanceof VariableAddressInstruction - or - i instanceof FieldAddressInstruction - or - i.(LoadInstruction).getSourceAddress() instanceof VariableAddressInstruction - or - i.(LoadInstruction).getSourceAddress() instanceof FieldAddressInstruction - or - i.getAUse() instanceof ArgumentOperand - ) - } - -/** - * A bound that may be inferred for an expression plus/minus an integer delta. - */ -abstract class Bound extends TBound { - abstract string toString(); - - /** Gets an expression that equals this bound plus `delta`. */ - abstract Instruction getInstruction(int delta); - - /** Gets an expression that equals this bound. */ - Instruction getInstruction() { result = this.getInstruction(0) } - - abstract Location getLocation(); -} - -/** - * The bound that corresponds to the integer 0. This is used to represent all - * integer bounds as bounds are always accompanied by an added integer delta. - */ -class ZeroBound extends Bound, TBoundZero { - override string toString() { result = "0" } - - override Instruction getInstruction(int delta) { - result.(ConstantValueInstruction).getValue().toInt() = delta - } - - override Location getLocation() { result instanceof EmptyLocation } -} - -/** - * A bound corresponding to the value of an `Instruction`. - */ -class ValueNumberBound extends Bound, TBoundValueNumber { - ValueNumber vn; - - ValueNumberBound() { this = TBoundValueNumber(vn) } - - /** Gets the SSA variable that equals this bound. */ - override Instruction getInstruction(int delta) { - this = TBoundValueNumber(valueNumber(result)) and delta = 0 - } - - override string toString() { result = vn.getExampleInstruction().toString() } - - override Location getLocation() { result = vn.getLocation() } -} diff --git a/csharp/ql/src/experimental/ir/rangeanalysis/RangeAnalysis.qll b/csharp/ql/src/experimental/ir/rangeanalysis/RangeAnalysis.qll deleted file mode 100644 index 1febf611652..00000000000 --- a/csharp/ql/src/experimental/ir/rangeanalysis/RangeAnalysis.qll +++ /dev/null @@ -1,633 +0,0 @@ -/** - * Provides classes and predicates for range analysis. - * - * An inferred bound can either be a specific integer or a `ValueNumber` - * representing the abstract value of a set of `Instruction`s. - * - * If an inferred bound relies directly on a condition, then this condition is - * reported as the reason for the bound. - */ - -/* - * This library tackles range analysis as a flow problem. Consider e.g.: - * ```csharp - * len = arr.length; - * if (x < len) { ... y = x-1; ... y ... } - * ``` - * In this case we would like to infer `y <= arr.length - 2`, and this is - * accomplished by tracking the bound through a sequence of steps: - * ``` - * arr.length --> len = .. --> x < len --> x-1 --> y = .. --> y - * ``` - * - * In its simplest form the step relation `I1 --> I2` relates two `Instruction`s - * such that `I1 <= B` implies `I2 <= B` for any `B` (with a second separate - * step relation handling lower bounds). Examples of such steps include - * assignments `I2 = I1` and conditions `x <= I1` where `I2` is a use of `x` - * guarded by the condition. - * - * In order to handle subtractions and additions with constants, and strict - * comparisons, the step relation is augmented with an integer delta. With this - * generalization `I1 --(delta)--> I2` relates two `Instruction`s and an integer - * such that `I1 <= B` implies `I2 <= B + delta` for any `B`. This corresponds - * to the predicate `boundFlowStep`. - * - * The complete range analysis is then implemented as the transitive closure of - * the step relation summing the deltas along the way. If `I1` transitively - * steps to `I2`, `delta` is the sum of deltas along the path, and `B` is an - * interesting bound equal to the value of `I1` then `I2 <= B + delta`. This - * corresponds to the predicate `boundedInstruction`. - * - * Bounds come in two forms: either they are relative to zero (and thus provide - * a constant bound), or they are relative to some program value. This value is - * represented by the `ValueNumber` class, each instance of which represents a - * set of `Instructions` that must have the same value. - * - * Phi nodes need a little bit of extra handling. Consider `x0 = phi(x1, x2)`. - * There are essentially two cases: - * - If `x1 <= B + d1` and `x2 <= B + d2` then `x0 <= B + max(d1,d2)`. - * - If `x1 <= B + d1` and `x2 <= x0 + d2` with `d2 <= 0` then `x0 <= B + d1`. - * The first case is for whenever a bound can be proven without taking looping - * into account. The second case is relevant when `x2` comes from a back-edge - * where we can prove that the variable has been non-increasing through the - * loop-iteration as this means that any upper bound that holds prior to the - * loop also holds for the variable during the loop. - * This generalizes to a phi node with `n` inputs, so if - * `x0 = phi(x1, ..., xn)` and `xi <= B + delta` for one of the inputs, then we - * also have `x0 <= B + delta` if we can prove either: - * - `xj <= B + d` with `d <= delta` or - * - `xj <= x0 + d` with `d <= 0` - * for each input `xj`. - * - * As all inferred bounds can be related directly to a path in the source code - * the only source of non-termination is if successive redundant (and thereby - * increasingly worse) bounds are calculated along a loop in the source code. - * We prevent this by weakening the bound to a small finite set of bounds when - * a path follows a second back-edge (we postpone weakening till the second - * back-edge as a precise bound might require traversing a loop once). - */ - -import csharp -private import experimental.ir.IR -private import experimental.ir.internal.IRGuards -private import experimental.ir.ValueNumbering -private import RangeUtils -private import SignAnalysis -import Bound - -cached -private module RangeAnalysisCache { - cached - module RangeAnalysisPublic { - /** - * Holds if `b + delta` is a valid bound for `i`. - * - `upper = true` : `i <= b + delta` - * - `upper = false` : `i >= b + delta` - * - * The reason for the bound is given by `reason` and may be either a condition - * or `NoReason` if the bound was proven directly without the use of a bounding - * condition. - */ - cached - predicate boundedInstruction(Instruction i, Bound b, int delta, boolean upper, Reason reason) { - boundedInstruction(i, b, delta, upper, _, _, reason) - } - - /** - * Holds if `b + delta` is a valid bound for `op`. - * - `upper = true` : `op <= b + delta` - * - `upper = false` : `op >= b + delta` - * - * The reason for the bound is given by `reason` and may be either a condition - * or `NoReason` if the bound was proven directly without the use of a bounding - * condition. - */ - cached - predicate boundedOperand(Operand op, Bound b, int delta, boolean upper, Reason reason) { - boundedNonPhiOperand(op, b, delta, upper, _, _, reason) - or - boundedPhiOperand(op, b, delta, upper, _, _, reason) - } - } - - /** - * Holds if `guard = boundFlowCond(_, _, _, _, _) or guard = eqFlowCond(_, _, _, _, _)`. - */ - cached - predicate possibleReason(IRGuardCondition guard) { - guard = boundFlowCond(_, _, _, _, _) - or - guard = eqFlowCond(_, _, _, _, _) - } -} - -private import RangeAnalysisCache -import RangeAnalysisPublic - -/** - * Gets a condition that tests whether `vn` equals `bound + delta`. - * - * If the condition evaluates to `testIsTrue`: - * - `isEq = true` : `vn == bound + delta` - * - `isEq = false` : `vn != bound + delta` - */ -private IRGuardCondition eqFlowCond( - ValueNumber vn, Operand bound, int delta, boolean isEq, boolean testIsTrue -) { - result.comparesEq(vn.getAUse(), bound, delta, isEq, testIsTrue) -} - -/** - * Holds if `op1 + delta` is a valid bound for `op2`. - * - `upper = true` : `op2 <= op1 + delta` - * - `upper = false` : `op2 >= op1 + delta` - */ -private predicate boundFlowStepSsa( - NonPhiOperand op2, Operand op1, int delta, boolean upper, Reason reason -) { - exists(IRGuardCondition guard, boolean testIsTrue | - guard = boundFlowCond(valueNumberOfOperand(op2), op1, delta, upper, testIsTrue) and - guard.controls(op2.getUse().getBlock(), testIsTrue) and - reason = TCondReason(guard) - ) -} - -/** - * Gets a condition that tests whether `vn` is bounded by `bound + delta`. - * - * If the condition evaluates to `testIsTrue`: - * - `upper = true` : `vn <= bound + delta` - * - `upper = false` : `vn >= bound + delta` - */ -private IRGuardCondition boundFlowCond( - ValueNumber vn, NonPhiOperand bound, int delta, boolean upper, boolean testIsTrue -) { - exists(int d | - result.comparesLt(vn.getAUse(), bound, d, upper, testIsTrue) and - // `comparesLt` provides bounds of the form `x < y + k` or `x >= y + k`, but we need - // `x <= y + k` so we strengthen here. `testIsTrue` has the same semantics in `comparesLt` as - // it does here, so we don't need to account for it. - if upper = true then delta = d - 1 else delta = d - ) - or - result = eqFlowCond(vn, bound, delta, true, testIsTrue) and - (upper = true or upper = false) -} - -private newtype TReason = - TNoReason() or - TCondReason(IRGuardCondition guard) { possibleReason(guard) } - -/** - * A reason for an inferred bound. This can either be `CondReason` if the bound - * is due to a specific condition, or `NoReason` if the bound is inferred - * without going through a bounding condition. - */ -abstract class Reason extends TReason { - abstract string toString(); -} - -class NoReason extends Reason, TNoReason { - override string toString() { result = "NoReason" } -} - -class CondReason extends Reason, TCondReason { - IRGuardCondition getCond() { this = TCondReason(result) } - - override string toString() { result = this.getCond().toString() } -} - -/** - * Holds if a cast from `fromtyp` to `totyp` can be ignored for the purpose of - * range analysis. - */ -pragma[inline] -private predicate safeCast(IntegralType fromtyp, IntegralType totyp) { - fromtyp.getSize() < totyp.getSize() and - ( - fromtyp instanceof UnsignedIntegralType - or - totyp instanceof SignedIntegralType - ) - or - fromtyp.getSize() <= totyp.getSize() and - ( - fromtyp instanceof SignedIntegralType and - totyp instanceof SignedIntegralType - or - fromtyp instanceof UnsignedIntegralType and - totyp instanceof UnsignedIntegralType - ) -} - -private class SafeCastInstruction extends ConvertInstruction { - SafeCastInstruction() { - safeCast(this.getResultType(), this.getUnary().getResultType()) - or - this.getResultType() instanceof PointerType and - this.getUnary().getResultType() instanceof PointerType - } -} - -/** - * Holds if `typ` is a small integral type with the given lower and upper bounds. - */ -private predicate typeBound(IntegralType typ, int lowerbound, int upperbound) { - typ instanceof SignedIntegralType and - typ.getSize() = 1 and - lowerbound = typ.minValue() and - upperbound = typ.maxValue() - or - typ instanceof UnsignedIntegralType and - typ.getSize() = 1 and - lowerbound = typ.minValue() and - upperbound = typ.maxValue() - or - typ instanceof SignedIntegralType and - typ.getSize() = 2 and - lowerbound = typ.minValue() and - upperbound = typ.maxValue() - or - typ instanceof UnsignedIntegralType and - typ.getSize() = 2 and - lowerbound = typ.minValue() and - upperbound = typ.maxValue() -} - -/** - * A cast to a small integral type that may overflow or underflow. - */ -private class NarrowingCastInstruction extends ConvertInstruction { - NarrowingCastInstruction() { - not this instanceof SafeCastInstruction and - typeBound(this.getResultType(), _, _) - } - - /** Gets the lower bound of the resulting type. */ - int getLowerBound() { typeBound(this.getResultType(), result, _) } - - /** Gets the upper bound of the resulting type. */ - int getUpperBound() { typeBound(this.getResultType(), _, result) } -} - -/** - * Holds if `op + delta` is a valid bound for `i`. - * - `upper = true` : `i <= op + delta` - * - `upper = false` : `i >= op + delta` - */ -private predicate boundFlowStep(Instruction i, NonPhiOperand op, int delta, boolean upper) { - valueFlowStep(i, op, delta) and - (upper = true or upper = false) - or - i.(SafeCastInstruction).getAnOperand() = op and - delta = 0 and - (upper = true or upper = false) - or - exists(Operand x | - i.(AddInstruction).getAnOperand() = op and - i.(AddInstruction).getAnOperand() = x and - op != x - | - not exists(getValue(getConstantValue(op.getUse()))) and - not exists(getValue(getConstantValue(x.getUse()))) and - if strictlyPositive(x) - then upper = false and delta = 1 - else - if positive(x) - then upper = false and delta = 0 - else - if strictlyNegative(x) - then upper = true and delta = -1 - else - if negative(x) - then upper = true and delta = 0 - else none() - ) - or - exists(Operand x | - exists(SubInstruction sub | - i = sub and - sub.getLeftOperand() = op and - sub.getRightOperand() = x - ) - | - // `x` with constant value is covered by valueFlowStep - not exists(getValue(getConstantValue(x.getUse()))) and - if strictlyPositive(x) - then upper = true and delta = -1 - else - if positive(x) - then upper = true and delta = 0 - else - if strictlyNegative(x) - then upper = false and delta = 1 - else - if negative(x) - then upper = false and delta = 0 - else none() - ) - or - i.(RemInstruction).getRightOperand() = op and positive(op) and delta = -1 and upper = true - or - i.(RemInstruction).getLeftOperand() = op and positive(op) and delta = 0 and upper = true - or - i.(BitAndInstruction).getAnOperand() = op and positive(op) and delta = 0 and upper = true - or - i.(BitOrInstruction).getAnOperand() = op and - positiveInstruction(i) and - delta = 0 and - upper = false - // TODO: min, max, rand -} - -private predicate boundFlowStepMul(Instruction i1, Operand op, int factor) { - exists(Instruction c, int k | k = getValue(getConstantValue(c)) and k > 0 | - i1.(MulInstruction).hasOperands(op, c.getAUse()) and factor = k - or - exists(ShiftLeftInstruction i | - i = i1 and i.getLeftOperand() = op and i.getRightOperand() = c.getAUse() and factor = 2.pow(k) - ) - ) -} - -private predicate boundFlowStepDiv(Instruction i1, Operand op, int factor) { - exists(Instruction c, int k | k = getValue(getConstantValue(c)) and k > 0 | - exists(DivInstruction i | - i = i1 and i.getLeftOperand() = op and i.getRight() = c and factor = k - ) - or - exists(ShiftRightInstruction i | - i = i1 and i.getLeftOperand() = op and i.getRight() = c and factor = 2.pow(k) - ) - ) -} - -/** - * Holds if `b` is a valid bound for `op` - */ -pragma[noinline] -private predicate boundedNonPhiOperand( - NonPhiOperand op, Bound b, int delta, boolean upper, boolean fromBackEdge, int origdelta, - Reason reason -) { - exists(NonPhiOperand op2, int d1, int d2 | - boundFlowStepSsa(op, op2, d1, upper, reason) and - boundedNonPhiOperand(op2, b, d2, upper, fromBackEdge, origdelta, _) and - delta = d1 + d2 - ) - or - boundedInstruction(op.getDef(), b, delta, upper, fromBackEdge, origdelta, reason) - or - exists(int d, Reason r1, Reason r2 | - boundedNonPhiOperand(op, b, d, upper, fromBackEdge, origdelta, r2) - | - unequalOperand(op, b, d, r1) and - ( - upper = true and delta = d - 1 - or - upper = false and delta = d + 1 - ) and - ( - reason = r1 - or - reason = r2 and not r2 instanceof NoReason - ) - ) -} - -/** - * Holds if `op1 + delta` is a valid bound for `op2`. - * - `upper = true` : `op2 <= op1 + delta` - * - `upper = false` : `op2 >= op1 + delta` - */ -private predicate boundFlowStepPhi( - PhiInputOperand op2, Operand op1, int delta, boolean upper, Reason reason -) { - op2.getDef().(CopyInstruction).getSourceValueOperand() = op1 and - (upper = true or upper = false) and - reason = TNoReason() and - delta = 0 - or - exists(IRGuardCondition guard, boolean testIsTrue | - guard = boundFlowCond(valueNumberOfOperand(op2), op1, delta, upper, testIsTrue) and - guard.controlsEdge(op2.getPredecessorBlock(), op2.getUse().getBlock(), testIsTrue) and - reason = TCondReason(guard) - ) -} - -private predicate boundedPhiOperand( - PhiInputOperand op, Bound b, int delta, boolean upper, boolean fromBackEdge, int origdelta, - Reason reason -) { - exists(NonPhiOperand op2, int d1, int d2, Reason r1, Reason r2 | - boundFlowStepPhi(op, op2, d1, upper, r1) and - boundedNonPhiOperand(op2, b, d2, upper, fromBackEdge, origdelta, r2) and - delta = d1 + d2 and - (if r1 instanceof NoReason then reason = r2 else reason = r1) - ) - or - boundedInstruction(op.getDef(), b, delta, upper, fromBackEdge, origdelta, reason) - or - exists(int d, Reason r1, Reason r2 | - boundedInstruction(op.getDef(), b, d, upper, fromBackEdge, origdelta, r2) - | - unequalOperand(op, b, d, r1) and - ( - upper = true and delta = d - 1 - or - upper = false and delta = d + 1 - ) and - ( - reason = r1 - or - reason = r2 and not r2 instanceof NoReason - ) - ) -} - -/** Holds if `op2 != op1 + delta` at `pos`. */ -private predicate unequalFlowStep(Operand op2, Operand op1, int delta, Reason reason) { - exists(IRGuardCondition guard, boolean testIsTrue | - guard = eqFlowCond(valueNumberOfOperand(op2), op1, delta, false, testIsTrue) and - guard.controls(op2.getUse().getBlock(), testIsTrue) and - reason = TCondReason(guard) - ) -} - -/** - * Holds if `op != b + delta` at `pos`. - */ -private predicate unequalOperand(Operand op, Bound b, int delta, Reason reason) { - exists(Operand op2, int d1, int d2 | - unequalFlowStep(op, op2, d1, reason) and - boundedNonPhiOperand(op2, b, d2, true, _, _, _) and - boundedNonPhiOperand(op2, b, d2, false, _, _, _) and - delta = d1 + d2 - ) -} - -private predicate boundedPhiCandValidForEdge( - PhiInstruction phi, Bound b, int delta, boolean upper, boolean fromBackEdge, int origdelta, - Reason reason, PhiInputOperand op -) { - boundedPhiCand(phi, upper, b, delta, fromBackEdge, origdelta, reason) and - ( - exists(int d | boundedPhiInp1(phi, op, b, d, upper) | upper = true and d <= delta) - or - exists(int d | boundedPhiInp1(phi, op, b, d, upper) | upper = false and d >= delta) - or - selfBoundedPhiInp(phi, op, upper) - ) -} - -/** Weakens a delta to lie in the range `[-1..1]`. */ -bindingset[delta, upper] -private int weakenDelta(boolean upper, int delta) { - delta in [-1 .. 1] and result = delta - or - upper = true and result = -1 and delta < -1 - or - upper = false and result = 1 and delta > 1 -} - -private predicate boundedPhiInp( - PhiInstruction phi, PhiInputOperand op, Bound b, int delta, boolean upper, boolean fromBackEdge, - int origdelta, Reason reason -) { - phi.getAnOperand() = op and - exists(int d, boolean fromBackEdge0 | - boundedPhiOperand(op, b, d, upper, fromBackEdge0, origdelta, reason) - or - b.(ValueNumberBound).getInstruction() = op.getDef() and - d = 0 and - (upper = true or upper = false) and - fromBackEdge0 = false and - origdelta = 0 and - reason = TNoReason() - | - if backEdge(phi, op) - then - fromBackEdge = true and - ( - fromBackEdge0 = true and delta = weakenDelta(upper, d - origdelta) + origdelta - or - fromBackEdge0 = false and delta = d - ) - else ( - delta = d and fromBackEdge = fromBackEdge0 - ) - ) -} - -pragma[noinline] -private predicate boundedPhiInp1( - PhiInstruction phi, PhiInputOperand op, Bound b, int delta, boolean upper -) { - boundedPhiInp(phi, op, b, delta, upper, _, _, _) -} - -private predicate selfBoundedPhiInp(PhiInstruction phi, PhiInputOperand op, boolean upper) { - exists(int d, ValueNumberBound phibound | - phibound.getInstruction() = phi and - boundedPhiInp(phi, op, phibound, d, upper, _, _, _) and - ( - upper = true and d <= 0 - or - upper = false and d >= 0 - ) - ) -} - -pragma[noinline] -private predicate boundedPhiCand( - PhiInstruction phi, boolean upper, Bound b, int delta, boolean fromBackEdge, int origdelta, - Reason reason -) { - boundedPhiInp(phi, _, b, delta, upper, fromBackEdge, origdelta, reason) -} - -/** - * Holds if the value being cast has an upper (for `upper = true`) or lower - * (for `upper = false`) bound within the bounds of the resulting type. - * For `upper = true` this means that the cast will not overflow and for - * `upper = false` this means that the cast will not underflow. - */ -private predicate safeNarrowingCast(NarrowingCastInstruction cast, boolean upper) { - exists(int bound | - boundedNonPhiOperand(cast.getAnOperand(), any(ZeroBound zb), bound, upper, _, _, _) - | - upper = true and bound <= cast.getUpperBound() - or - upper = false and bound >= cast.getLowerBound() - ) -} - -pragma[noinline] -private predicate boundedCastExpr( - NarrowingCastInstruction cast, Bound b, int delta, boolean upper, boolean fromBackEdge, - int origdelta, Reason reason -) { - boundedNonPhiOperand(cast.getAnOperand(), b, delta, upper, fromBackEdge, origdelta, reason) -} - -/** - * Holds if `b + delta` is a valid bound for `i`. - * - `upper = true` : `i <= b + delta` - * - `upper = false` : `i >= b + delta` - */ -private predicate boundedInstruction( - Instruction i, Bound b, int delta, boolean upper, boolean fromBackEdge, int origdelta, - Reason reason -) { - i instanceof PhiInstruction and - forex(PhiInputOperand op | op = i.getAnOperand() | - boundedPhiCandValidForEdge(i, b, delta, upper, fromBackEdge, origdelta, reason, op) - ) - or - i = b.getInstruction(delta) and - (upper = true or upper = false) and - fromBackEdge = false and - origdelta = delta and - reason = TNoReason() - or - exists(Operand mid, int d1, int d2 | - boundFlowStep(i, mid, d1, upper) and - boundedNonPhiOperand(mid, b, d2, upper, fromBackEdge, origdelta, reason) and - delta = d1 + d2 and - not exists(getValue(getConstantValue(i))) - ) - or - exists(Operand mid, int factor, int d | - boundFlowStepMul(i, mid, factor) and - boundedNonPhiOperand(mid, b, d, upper, fromBackEdge, origdelta, reason) and - b instanceof ZeroBound and - delta = d * factor and - not exists(getValue(getConstantValue(i))) - ) - or - exists(Operand mid, int factor, int d | - boundFlowStepDiv(i, mid, factor) and - boundedNonPhiOperand(mid, b, d, upper, fromBackEdge, origdelta, reason) and - d >= 0 and - b instanceof ZeroBound and - delta = d / factor and - not exists(getValue(getConstantValue(i))) - ) - or - exists(NarrowingCastInstruction cast | - cast = i and - safeNarrowingCast(cast, upper.booleanNot()) and - boundedCastExpr(cast, b, delta, upper, fromBackEdge, origdelta, reason) - ) - or - exists(PropertyAccess pa | - i.(CallInstruction).getAst() = pa and - pa.getProperty().getName() = "Length" and - b instanceof ZeroBound and - delta = origdelta and - (upper = true or upper = false) and - fromBackEdge = false and - delta = getArrayDim(pa.getQualifier().(VariableAccess).getTarget()) and - reason = TNoReason() - ) -} diff --git a/csharp/ql/src/experimental/ir/rangeanalysis/RangeUtils.qll b/csharp/ql/src/experimental/ir/rangeanalysis/RangeUtils.qll deleted file mode 100644 index b7fdfc3546f..00000000000 --- a/csharp/ql/src/experimental/ir/rangeanalysis/RangeUtils.qll +++ /dev/null @@ -1,96 +0,0 @@ -import csharp -private import experimental.ir.IR -// TODO: move this dependency -import experimental.ir.internal.IntegerConstant - -// TODO: move this out of test code -language[monotonicAggregates] -IntValue getConstantValue(Instruction instr) { - result = instr.(IntegerConstantInstruction).getValue().toInt() - or - exists(BinaryInstruction binInstr, IntValue left, IntValue right | - binInstr = instr and - left = getConstantValue(binInstr.getLeft()) and - right = getConstantValue(binInstr.getRight()) and - ( - binInstr instanceof AddInstruction and result = add(left, right) - or - binInstr instanceof SubInstruction and result = sub(left, right) - or - binInstr instanceof MulInstruction and result = mul(left, right) - or - binInstr instanceof DivInstruction and result = div(left, right) - ) - ) - or - result = getConstantValue(instr.(CopyInstruction).getSourceValue()) - or - exists(PhiInstruction phi | - phi = instr and - result = - max(PhiInputOperand operand | - operand = phi.getAnOperand() - | - getConstantValue(operand.getDef()) - ) and - result = - min(PhiInputOperand operand | - operand = phi.getAnOperand() - | - getConstantValue(operand.getDef()) - ) - ) -} - -/** - * Gets the dimension of the array (either the declared size, or the - * size of the initializer); if no size is declared and no initializer used, - * the predicate does not hold. - */ -IntValue getArrayDim(Variable arr) { - exists(ArrayCreation ac | - arr.getInitializer() = ac and - if exists(ac.getLengthArgument(0)) - then result = ac.getLengthArgument(0).getValue().toInt() - else result = ac.getInitializer().getNumberOfElements() - ) -} - -predicate valueFlowStep(Instruction i, Operand op, int delta) { - i.(CopyInstruction).getSourceValueOperand() = op and delta = 0 - or - exists(Operand x | - i.(AddInstruction).getAnOperand() = op and - i.(AddInstruction).getAnOperand() = x and - op != x - | - delta = getValue(getConstantValue(x.getDef())) - ) - or - exists(Operand x | - i.(SubInstruction).getLeftOperand() = op and - i.(SubInstruction).getRightOperand() = x - | - delta = -getValue(getConstantValue(x.getDef())) - ) - or - exists(Operand x | - i.(PointerAddInstruction).getAnOperand() = op and - i.(PointerAddInstruction).getAnOperand() = x and - op != x - | - delta = i.(PointerAddInstruction).getElementSize() * getValue(getConstantValue(x.getDef())) - ) - or - exists(Operand x | - i.(PointerSubInstruction).getLeftOperand() = op and - i.(PointerSubInstruction).getRightOperand() = x - | - delta = i.(PointerSubInstruction).getElementSize() * -getValue(getConstantValue(x.getDef())) - ) -} - -predicate backEdge(PhiInstruction phi, PhiInputOperand op) { - phi.getAnOperand() = op and - phi.getBlock() = op.getPredecessorBlock().getBackEdgeSuccessor(_) -} diff --git a/csharp/ql/src/experimental/ir/rangeanalysis/SignAnalysis.qll b/csharp/ql/src/experimental/ir/rangeanalysis/SignAnalysis.qll deleted file mode 100644 index b74f7c90db5..00000000000 --- a/csharp/ql/src/experimental/ir/rangeanalysis/SignAnalysis.qll +++ /dev/null @@ -1,585 +0,0 @@ -/** - * Provides sign analysis to determine whether expression are always positive - * or negative. - * - * The analysis is implemented as an abstract interpretation over the - * three-valued domain `{negative, zero, positive}`. - */ - -import csharp -private import experimental.ir.IR -private import experimental.ir.internal.IRGuards -private import experimental.ir.ValueNumbering -private import SignAnalysisCached - -private newtype TSign = - TNeg() or - TZero() or - TPos() - -private class Sign extends TSign { - string toString() { - result = "-" and this = TNeg() - or - result = "0" and this = TZero() - or - result = "+" and this = TPos() - } - - Sign inc() { - this = TNeg() and result = TNeg() - or - this = TNeg() and result = TZero() - or - this = TZero() and result = TPos() - or - this = TPos() and result = TPos() - } - - Sign dec() { result.inc() = this } - - Sign neg() { - this = TNeg() and result = TPos() - or - this = TZero() and result = TZero() - or - this = TPos() and result = TNeg() - } - - Sign bitnot() { - this = TNeg() and result = TPos() - or - this = TNeg() and result = TZero() - or - this = TZero() and result = TNeg() - or - this = TPos() and result = TNeg() - } - - Sign add(Sign s) { - this = TZero() and result = s - or - s = TZero() and result = this - or - this = s and this = result - or - this = TPos() and s = TNeg() - or - this = TNeg() and s = TPos() - } - - Sign mul(Sign s) { - result = TZero() and this = TZero() - or - result = TZero() and s = TZero() - or - result = TNeg() and this = TPos() and s = TNeg() - or - result = TNeg() and this = TNeg() and s = TPos() - or - result = TPos() and this = TPos() and s = TPos() - or - result = TPos() and this = TNeg() and s = TNeg() - } - - Sign div(Sign s) { - result = TZero() and s = TNeg() - or - result = TZero() and s = TPos() - or - result = TNeg() and this = TPos() and s = TNeg() - or - result = TNeg() and this = TNeg() and s = TPos() - or - result = TPos() and this = TPos() and s = TPos() - or - result = TPos() and this = TNeg() and s = TNeg() - } - - Sign rem(Sign s) { - result = TZero() and s = TNeg() - or - result = TZero() and s = TPos() - or - result = this and s = TNeg() - or - result = this and s = TPos() - } - - Sign bitand(Sign s) { - result = TZero() and this = TZero() - or - result = TZero() and s = TZero() - or - result = TZero() and this = TPos() - or - result = TZero() and s = TPos() - or - result = TNeg() and this = TNeg() and s = TNeg() - or - result = TPos() and this = TNeg() and s = TPos() - or - result = TPos() and this = TPos() and s = TNeg() - or - result = TPos() and this = TPos() and s = TPos() - } - - Sign bitor(Sign s) { - result = TZero() and this = TZero() and s = TZero() - or - result = TNeg() and this = TNeg() - or - result = TNeg() and s = TNeg() - or - result = TPos() and this = TPos() and s = TZero() - or - result = TPos() and this = TZero() and s = TPos() - or - result = TPos() and this = TPos() and s = TPos() - } - - Sign bitxor(Sign s) { - result = TZero() and this = s - or - result = this and s = TZero() - or - result = s and this = TZero() - or - result = TPos() and this = TPos() and s = TPos() - or - result = TNeg() and this = TNeg() and s = TPos() - or - result = TNeg() and this = TPos() and s = TNeg() - or - result = TPos() and this = TNeg() and s = TNeg() - } - - Sign lshift(Sign s) { - result = TZero() and this = TZero() - or - result = this and s = TZero() - or - this != TZero() and s != TZero() - } - - Sign rshift(Sign s) { - result = TZero() and this = TZero() - or - result = this and s = TZero() - or - result = TNeg() and this = TNeg() - or - result != TNeg() and this = TPos() and s != TZero() - } - - Sign urshift(Sign s) { - result = TZero() and this = TZero() - or - result = this and s = TZero() - or - result != TZero() and this = TNeg() and s != TZero() - or - result != TNeg() and this = TPos() and s != TZero() - } -} - -private Sign certainInstructionSign(Instruction inst) { - exists(int i | inst.(IntegerConstantInstruction).getValue().toInt() = i | - i < 0 and result = TNeg() - or - i = 0 and result = TZero() - or - i > 0 and result = TPos() - ) - or - exists(float f | f = inst.(FloatConstantInstruction).getValue().toFloat() | - f < 0 and result = TNeg() - or - f = 0 and result = TZero() - or - f > 0 and result = TPos() - ) -} - -private newtype CastKind = - TWiden() or - TSame() or - TNarrow() - -private CastKind getCastKind(ConvertInstruction ci) { - exists(int fromSize, int toSize | - toSize = ci.getResultSize() and - fromSize = ci.getUnary().getResultSize() - | - fromSize < toSize and - result = TWiden() - or - fromSize = toSize and - result = TSame() - or - fromSize > toSize and - result = TNarrow() - ) -} - -private predicate bindBool(boolean bool) { - bool = true or - bool = false -} - -private Sign castSign(Sign s, boolean fromSigned, boolean toSigned, CastKind ck) { - result = TZero() and - ( - bindBool(fromSigned) and - bindBool(toSigned) and - s = TZero() - or - bindBool(fromSigned) and - bindBool(toSigned) and - ck = TNarrow() - ) - or - result = TPos() and - ( - bindBool(fromSigned) and - bindBool(toSigned) and - s = TPos() - or - bindBool(fromSigned) and - bindBool(toSigned) and - s = TNeg() and - ck = TNarrow() - or - fromSigned = true and - toSigned = false and - s = TNeg() - ) - or - result = TNeg() and - ( - fromSigned = true and - toSigned = true and - s = TNeg() - or - fromSigned = false and - toSigned = true and - s = TPos() and - ck != TWiden() - ) -} - -/** Holds if the sign of `e` is too complicated to determine. */ -private predicate unknownSign(Instruction i) { - // REVIEW: This should probably be a list of the instructions that we _do_ understand, rather than - // the ones we don't understand. Currently, if we try to compute the sign of an instruction that - // we don't understand, and it isn't on this list, we incorrectly compute the sign as "none" - // instead of "+,0,-". - // Even better, we could track the state of each instruction as a power set of {non-negative, - // non-positive, non-zero}, which would mean that the representation of the sign of an unknown - // value would be the empty set. - ( - i instanceof UninitializedInstruction - or - i instanceof InitializeParameterInstruction - or - i instanceof BuiltInOperationInstruction - or - i instanceof CallInstruction - or - i instanceof ChiInstruction - ) -} - -/** - * Holds if `lowerbound` is a lower bound for `bounded`. This is restricted - * to only include bounds for which we might determine a sign. - */ -private predicate lowerBound( - IRGuardCondition comp, Operand lowerbound, Operand bounded, boolean isStrict -) { - exists(int adjustment, Operand compared | - valueNumberOfOperand(bounded) = valueNumberOfOperand(compared) and - ( - isStrict = true and - adjustment = 0 - or - isStrict = false and - adjustment = 1 - ) and - comp.ensuresLt(lowerbound, compared, adjustment, bounded.getUse().getBlock(), true) - ) -} - -/** - * Holds if `upperbound` is an upper bound for `bounded` at `pos`. This is restricted - * to only include bounds for which we might determine a sign. - */ -private predicate upperBound( - IRGuardCondition comp, Operand upperbound, Operand bounded, boolean isStrict -) { - exists(int adjustment, Operand compared | - valueNumberOfOperand(bounded) = valueNumberOfOperand(compared) and - ( - isStrict = true and - adjustment = 0 - or - isStrict = false and - adjustment = 1 - ) and - comp.ensuresLt(compared, upperbound, adjustment, bounded.getUse().getBlock(), true) - ) -} - -/** - * Holds if `eqbound` is an equality/inequality for `bounded` at `pos`. This is - * restricted to only include bounds for which we might determine a sign. The - * boolean `isEq` gives the polarity: - * - `isEq = true` : `bounded = eqbound` - * - `isEq = false` : `bounded != eqbound` - */ -private predicate eqBound(IRGuardCondition guard, Operand eqbound, Operand bounded, boolean isEq) { - exists(Operand compared | - valueNumberOfOperand(bounded) = valueNumberOfOperand(compared) and - guard.ensuresEq(compared, eqbound, 0, bounded.getUse().getBlock(), isEq) - ) -} - -/** - * Holds if `bound` is a bound for `v` at `pos` that needs to be positive in - * order for `v` to be positive. - */ -private predicate posBound(IRGuardCondition comp, Operand bound, Operand op) { - upperBound(comp, bound, op, _) or - eqBound(comp, bound, op, true) -} - -/** - * Holds if `bound` is a bound for `v` at `pos` that needs to be negative in - * order for `v` to be negative. - */ -private predicate negBound(IRGuardCondition comp, Operand bound, Operand op) { - lowerBound(comp, bound, op, _) or - eqBound(comp, bound, op, true) -} - -/** - * Holds if `bound` is a bound for `v` at `pos` that can restrict whether `v` - * can be zero. - */ -private predicate zeroBound(IRGuardCondition comp, Operand bound, Operand op) { - lowerBound(comp, bound, op, _) or - upperBound(comp, bound, op, _) or - eqBound(comp, bound, op, _) -} - -/** Holds if `bound` allows `v` to be positive at `pos`. */ -private predicate posBoundOk(IRGuardCondition comp, Operand bound, Operand op) { - posBound(comp, bound, op) and TPos() = operandSign(bound) -} - -/** Holds if `bound` allows `v` to be negative at `pos`. */ -private predicate negBoundOk(IRGuardCondition comp, Operand bound, Operand op) { - negBound(comp, bound, op) and TNeg() = operandSign(bound) -} - -/** Holds if `bound` allows `v` to be zero at `pos`. */ -private predicate zeroBoundOk(IRGuardCondition comp, Operand bound, Operand op) { - lowerBound(comp, bound, op, _) and TNeg() = operandSign(bound) - or - lowerBound(comp, bound, op, false) and TZero() = operandSign(bound) - or - upperBound(comp, bound, op, _) and TPos() = operandSign(bound) - or - upperBound(comp, bound, op, false) and TZero() = operandSign(bound) - or - eqBound(comp, bound, op, true) and TZero() = operandSign(bound) - or - eqBound(comp, bound, op, false) and TZero() != operandSign(bound) -} - -private Sign binaryOpLhsSign(BinaryInstruction i) { result = operandSign(i.getLeftOperand()) } - -private Sign binaryOpRhsSign(BinaryInstruction i) { result = operandSign(i.getRightOperand()) } - -pragma[noinline] -private predicate binaryOpSigns(BinaryInstruction i, Sign lhs, Sign rhs) { - lhs = binaryOpLhsSign(i) and - rhs = binaryOpRhsSign(i) -} - -private Sign unguardedOperandSign(Operand operand) { - result = instructionSign(operand.getDef()) and - not hasGuard(operand, result) -} - -private Sign guardedOperandSign(Operand operand) { - result = instructionSign(operand.getDef()) and - hasGuard(operand, result) -} - -private Sign guardedOperandSignOk(Operand operand) { - result = TPos() and - forex(IRGuardCondition guard, Operand bound | posBound(guard, bound, operand) | - posBoundOk(guard, bound, operand) - ) - or - result = TNeg() and - forex(IRGuardCondition guard, Operand bound | negBound(guard, bound, operand) | - negBoundOk(guard, bound, operand) - ) - or - result = TZero() and - forex(IRGuardCondition guard, Operand bound | zeroBound(guard, bound, operand) | - zeroBoundOk(guard, bound, operand) - ) -} - -/** - * Holds if there is a bound that might restrict whether `v` has the sign `s` - * at `pos`. - */ -private predicate hasGuard(Operand op, Sign s) { - s = TPos() and posBound(_, _, op) - or - s = TNeg() and negBound(_, _, op) - or - s = TZero() and zeroBound(_, _, op) -} - -cached -module SignAnalysisCached { - /** - * Gets a sign that `operand` may have at `pos`, taking guards into account. - */ - cached - Sign operandSign(Operand operand) { - result = unguardedOperandSign(operand) - or - result = guardedOperandSign(operand) and - result = guardedOperandSignOk(operand) - or - // `result` is unconstrained if the definition is inexact. Then any sign is possible. - operand.isDefinitionInexact() - } - - cached - Sign instructionSign(Instruction i) { - result = certainInstructionSign(i) - or - not exists(certainInstructionSign(i)) and - not ( - result = TNeg() and - i.getResultType() instanceof UnsignedIntegralType - ) and - ( - unknownSign(i) - or - exists(ConvertInstruction ci, Instruction prior, boolean fromSigned, boolean toSigned | - i = ci and - prior = ci.getUnary() and - ( - if ci.getResultType() instanceof SignedIntegralType - then toSigned = true - else toSigned = false - ) and - ( - if prior.getResultType() instanceof SignedIntegralType - then fromSigned = true - else fromSigned = false - ) and - result = castSign(operandSign(ci.getAnOperand()), fromSigned, toSigned, getCastKind(ci)) - ) - or - result = operandSign(i.(CopyInstruction).getSourceValueOperand()) - or - result = operandSign(i.(BitComplementInstruction).getAnOperand()).bitnot() - or - result = operandSign(i.(NegateInstruction).getAnOperand()).neg() - or - exists(Sign s1, Sign s2 | binaryOpSigns(i, s1, s2) | - i instanceof AddInstruction and result = s1.add(s2) - or - i instanceof SubInstruction and result = s1.add(s2.neg()) - or - i instanceof MulInstruction and result = s1.mul(s2) - or - i instanceof DivInstruction and result = s1.div(s2) - or - i instanceof RemInstruction and result = s1.rem(s2) - or - i instanceof BitAndInstruction and result = s1.bitand(s2) - or - i instanceof BitOrInstruction and result = s1.bitor(s2) - or - i instanceof BitXorInstruction and result = s1.bitxor(s2) - or - i instanceof ShiftLeftInstruction and result = s1.lshift(s2) - or - i instanceof ShiftRightInstruction and - i.getResultType().(IntegralType) instanceof SignedIntegralType and - result = s1.rshift(s2) - or - 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? - result = operandSign(i.(PhiInstruction).getAnOperand()) - ) - } -} - -/** Holds if `i` can be positive and cannot be negative. */ -predicate positiveInstruction(Instruction i) { - instructionSign(i) = TPos() and - not instructionSign(i) = TNeg() -} - -/** Holds if `i` at `pos` can be positive at and cannot be negative. */ -predicate positive(Operand op) { - operandSign(op) = TPos() and - not operandSign(op) = TNeg() -} - -/** Holds if `i` can be negative and cannot be positive. */ -predicate negativeInstruction(Instruction i) { - instructionSign(i) = TNeg() and - not instructionSign(i) = TPos() -} - -/** Holds if `i` at `pos` can be negative and cannot be positive. */ -predicate negative(Operand op) { - operandSign(op) = TNeg() and - not operandSign(op) = TPos() -} - -/** Holds if `i` is strictly positive. */ -predicate strictlyPositiveInstruction(Instruction i) { - instructionSign(i) = TPos() and - not instructionSign(i) = TNeg() and - not instructionSign(i) = TZero() -} - -/** Holds if `i` is strictly positive at `pos`. */ -predicate strictlyPositive(Operand op) { - operandSign(op) = TPos() and - not operandSign(op) = TNeg() and - not operandSign(op) = TZero() -} - -/** Holds if `i` is strictly negative. */ -predicate strictlyNegativeInstruction(Instruction i) { - instructionSign(i) = TNeg() and - not instructionSign(i) = TPos() and - not instructionSign(i) = TZero() -} - -/** Holds if `i` is strictly negative at `pos`. */ -predicate strictlyNegative(Operand op) { - operandSign(op) = TNeg() and - not operandSign(op) = TPos() and - not operandSign(op) = TZero() -} diff --git a/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll b/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll index 9c19e5b9cbb..0a22178d108 100644 --- a/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll +++ b/csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll @@ -72,11 +72,11 @@ string captureQualifierFlow(TargetApiSpecific api) { result = ModelPrinting::asValueModel(api, qualifierString(), "ReturnValue") } -private int accessPathLimit() { result = 2 } +private int accessPathLimit0() { result = 2 } private newtype TTaintState = - TTaintRead(int n) { n in [0 .. accessPathLimit()] } or - TTaintStore(int n) { n in [1 .. accessPathLimit()] } + TTaintRead(int n) { n in [0 .. accessPathLimit0()] } or + TTaintStore(int n) { n in [1 .. accessPathLimit0()] } abstract private class TaintState extends TTaintState { abstract string toString(); diff --git a/csharp/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll b/csharp/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll index 618cd114171..bc994491d6e 100644 --- a/csharp/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll +++ b/csharp/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll @@ -3,7 +3,6 @@ */ private import csharp as CS -private import dotnet private import semmle.code.csharp.commons.Util as Util private import semmle.code.csharp.commons.Collections as Collections private import semmle.code.csharp.dataflow.internal.DataFlowDispatch @@ -62,7 +61,7 @@ predicate isRelevantForTypeBasedFlowModels = isRelevantForModels/1; * In the Standard library and 3rd party libraries it the callables that can be called * from outside the library itself. */ -class TargetApiSpecific extends DotNet::Callable { +class TargetApiSpecific extends CS::Callable { TargetApiSpecific() { this.fromSource() and this.isUnboundDeclaration() diff --git a/csharp/ql/src/utils/modelgenerator/internal/CaptureTypeBasedSummaryModels.qll b/csharp/ql/src/utils/modelgenerator/internal/CaptureTypeBasedSummaryModels.qll index bfc654a839b..dfb4c210edc 100644 --- a/csharp/ql/src/utils/modelgenerator/internal/CaptureTypeBasedSummaryModels.qll +++ b/csharp/ql/src/utils/modelgenerator/internal/CaptureTypeBasedSummaryModels.qll @@ -1,5 +1,4 @@ private import csharp -private import dotnet private import semmle.code.csharp.frameworks.system.collections.Generic as GenericCollections private import semmle.code.csharp.dataflow.internal.DataFlowPrivate private import semmle.code.csharp.frameworks.system.linq.Expressions @@ -21,14 +20,14 @@ private predicate genericCollectionType(ValueOrRefType t, TypeParameter tp) { /** * Holds if `tp` is a type parameter of the immediate type declaring `callable`. */ -private predicate classTypeParameter(DotNet::Callable callable, TypeParameter tp) { +private predicate classTypeParameter(Callable callable, TypeParameter tp) { callable.getDeclaringType().(UnboundGeneric).getATypeParameter() = tp } /** * Holds if `tp` is type parameter of `callable` or the type declaring `callable`. */ -private predicate localTypeParameter(DotNet::Callable callable, TypeParameter tp) { +private predicate localTypeParameter(Callable callable, TypeParameter tp) { classTypeParameter(callable, tp) or callable.(UnboundGeneric).getATypeParameter() = tp } @@ -37,7 +36,7 @@ private predicate localTypeParameter(DotNet::Callable callable, TypeParameter tp * Holds if `callable` has a parameter of type `tp` * or collection parameterized over type `tp`. */ -private predicate parameter(DotNet::Callable callable, string input, TypeParameter tp) { +private predicate parameter(Callable callable, string input, TypeParameter tp) { exists(Parameter p | input = Specific::parameterAccess(p) and p = callable.getAParameter() and @@ -62,7 +61,7 @@ private string getSyntheticField(TypeParameter tp) { * Gets a models as data string representation of, how a value of type `tp` * can be read or stored implicitly in relation to `callable`. */ -private string implicit(DotNet::Callable callable, TypeParameter tp) { +private string implicit(Callable callable, TypeParameter tp) { classTypeParameter(callable, tp) and not callable.(Modifiable).isStatic() and exists(string access | @@ -77,7 +76,7 @@ private string implicit(DotNet::Callable callable, TypeParameter tp) { /** * Holds if `callable` has a delegate parameter `dt` at parameter position `position`. */ -private predicate delegate(DotNet::Callable callable, DelegateType dt, int position) { +private predicate delegate(Callable callable, DelegateType dt, int position) { exists(Parameter p | p = callable.getAParameter() and dt = p.getType().(SystemLinqExpressions::DelegateExtType).getDelegateType() and @@ -93,7 +92,7 @@ private predicate delegate(DotNet::Callable callable, DelegateType dt, int posit * in every disjunction. */ bindingset[callable] -private string getAccess(DotNet::Callable callable, Type return, TypeParameter tp) { +private string getAccess(Callable callable, Type return, TypeParameter tp) { return = tp and result = "" or genericCollectionType(return, tp) and result = ".Element" @@ -111,7 +110,7 @@ private string getAccess(DotNet::Callable callable, Type return, TypeParameter t * Holds if `input` is a models as data string representation of, how a value of type `tp` * (or a generic parameterized over `tp`) can be generated by a delegate parameter of `callable`. */ -private predicate delegateSource(DotNet::Callable callable, string input, TypeParameter tp) { +private predicate delegateSource(Callable callable, string input, TypeParameter tp) { exists(DelegateType dt, int position, Type return, string access | delegate(callable, dt, position) and return = dt.getReturnType() and @@ -129,7 +128,7 @@ private predicate delegateSource(DotNet::Callable callable, string input, TypePa * (2) The parameters of `callable`. * (3) Any delegate parameters of `callable`. */ -private predicate input(DotNet::Callable callable, string input, TypeParameter tp) { +private predicate input(Callable callable, string input, TypeParameter tp) { input = implicit(callable, tp) or parameter(callable, input, tp) @@ -141,7 +140,7 @@ private predicate input(DotNet::Callable callable, string input, TypeParameter t * Holds if `callable` returns a value of type `tp` (or a generic parameterized over `tp`) and `output` * is a models as data string representation of, how data is routed to the return. */ -private predicate returns(DotNet::Callable callable, TypeParameter tp, string output) { +private predicate returns(Callable callable, TypeParameter tp, string output) { exists(Type return, string access | return = callable.getReturnType() | access = getAccess(callable, return, tp) and output = "ReturnValue" + access @@ -153,7 +152,7 @@ private predicate returns(DotNet::Callable callable, TypeParameter tp, string ou * and `output` is the models as data string representation of, how data is routed to * the delegate parameter. */ -private predicate delegateSink(DotNet::Callable callable, TypeParameter tp, string output) { +private predicate delegateSink(Callable callable, TypeParameter tp, string output) { exists(DelegateType dt, int position, Parameter p | delegate(callable, dt, position) and p = dt.getAParameter() and @@ -170,7 +169,7 @@ private predicate delegateSink(DotNet::Callable callable, TypeParameter tp, stri * (2) The return of `callable`. * (3) Any delegate parameters of `callable`. */ -private predicate output(DotNet::Callable callable, TypeParameter tp, string output) { +private predicate output(Callable callable, TypeParameter tp, string output) { output = implicit(callable, tp) or returns(callable, tp, output) diff --git a/csharp/ql/test/TestUtilities/InlineFlowTest.qll b/csharp/ql/test/TestUtilities/InlineFlowTest.qll index b7d7226e812..bf7463535e1 100644 --- a/csharp/ql/test/TestUtilities/InlineFlowTest.qll +++ b/csharp/ql/test/TestUtilities/InlineFlowTest.qll @@ -9,7 +9,7 @@ private import semmle.code.csharp.dataflow.internal.DataFlowImplSpecific private import semmle.code.csharp.dataflow.internal.TaintTrackingImplSpecific private import internal.InlineExpectationsTestImpl -private module FlowTestImpl implements InputSig { +private module FlowTestImpl implements InputSig { predicate defaultSource(DataFlow::Node source) { source.asExpr().(MethodCall).getTarget().getUndecoratedName() = ["Source", "Taint"] } @@ -35,4 +35,4 @@ private module FlowTestImpl implements InputSig { } } -import InlineFlowTestMake +import InlineFlowTestMake diff --git a/csharp/ql/test/experimental/ir/ir/PrintAst.expected b/csharp/ql/test/experimental/ir/ir/PrintAst.expected deleted file mode 100644 index 242dd277135..00000000000 --- a/csharp/ql/test/experimental/ir/ir/PrintAst.expected +++ /dev/null @@ -1,1379 +0,0 @@ -array.cs: -# 1| [Class] ArrayTest -# 2| 5: [Method] one_dim_init_acc -# 2| -1: [TypeMention] Void -# 3| 4: [BlockStmt] {...} -# 4| 0: [LocalVariableDeclStmt] ... ...; -# 4| 0: [LocalVariableDeclAndInitExpr] Int32[] one_dim = ... -# 4| -1: [TypeMention] Int32[] -# 4| 1: [TypeMention] int -# 4| 0: [LocalVariableAccess] access to local variable one_dim -# 4| 1: [ArrayCreation] array creation of type Int32[] -# 4| -1: [ArrayInitializer] { ..., ... } -# 4| 0: [IntLiteral] 100 -# 4| 1: [IntLiteral] 101 -# 4| 2: [IntLiteral] 102 -# 5| 1: [ExprStmt] ...; -# 5| 0: [AssignExpr] ... = ... -# 5| 0: [ArrayAccess] access to array element -# 5| -1: [LocalVariableAccess] access to local variable one_dim -# 5| 0: [IntLiteral] 0 -# 5| 1: [IntLiteral] 1000 -# 6| 2: [ExprStmt] ...; -# 6| 0: [AssignExpr] ... = ... -# 6| 0: [ArrayAccess] access to array element -# 6| -1: [LocalVariableAccess] access to local variable one_dim -# 6| 0: [IntLiteral] 1 -# 6| 1: [ArrayAccess] access to array element -# 6| -1: [LocalVariableAccess] access to local variable one_dim -# 6| 0: [IntLiteral] 0 -# 7| 3: [ExprStmt] ...; -# 7| 0: [AssignExpr] ... = ... -# 7| 0: [ArrayAccess] access to array element -# 7| -1: [LocalVariableAccess] access to local variable one_dim -# 7| 0: [IntLiteral] 1 -# 7| 1: [IntLiteral] 1003 -# 9| 4: [LocalVariableDeclStmt] ... ...; -# 9| 0: [LocalVariableDeclAndInitExpr] Int32 i = ... -# 9| -1: [TypeMention] int -# 9| 0: [LocalVariableAccess] access to local variable i -# 9| 1: [IntLiteral] 0 -# 10| 5: [ExprStmt] ...; -# 10| 0: [AssignExpr] ... = ... -# 10| 0: [ArrayAccess] access to array element -# 10| -1: [LocalVariableAccess] access to local variable one_dim -# 10| 0: [LocalVariableAccess] access to local variable i -# 10| 1: [IntLiteral] 0 -# 13| 6: [Method] twod_and_init_acc -# 13| -1: [TypeMention] Void -# 14| 4: [BlockStmt] {...} -# 15| 0: [LocalVariableDeclStmt] ... ...; -# 15| 0: [LocalVariableDeclAndInitExpr] Int32[,] a = ... -# 15| -1: [TypeMention] Int32[,] -# 15| 1: [TypeMention] int -# 15| 0: [LocalVariableAccess] access to local variable a -# 15| 1: [ArrayCreation] array creation of type Int32[,] -# 15| -1: [ArrayInitializer] { ..., ... } -# 15| 0: [ArrayInitializer] { ..., ... } -# 15| 0: [IntLiteral] 100 -# 15| 1: [IntLiteral] 101 -# 15| 1: [ArrayInitializer] { ..., ... } -# 15| 0: [IntLiteral] 102 -# 15| 1: [IntLiteral] 103 -# 16| 1: [LocalVariableDeclStmt] ... ...; -# 16| 0: [LocalVariableDeclAndInitExpr] Int32[,] b = ... -# 16| -1: [TypeMention] Int32[,] -# 16| 1: [TypeMention] int -# 16| 0: [LocalVariableAccess] access to local variable b -# 16| 1: [ArrayCreation] array creation of type Int32[,] -# 16| -1: [TypeMention] Int32[,] -# 16| 1: [TypeMention] int -# 16| 0: [IntLiteral] 5 -# 16| 1: [IntLiteral] 5 -# 17| 2: [LocalVariableDeclStmt] ... ...; -# 17| 0: [LocalVariableDeclAndInitExpr] Int32[,] c = ... -# 17| -1: [TypeMention] Int32[,] -# 17| 1: [TypeMention] int -# 17| 0: [LocalVariableAccess] access to local variable c -# 17| 1: [ArrayCreation] array creation of type Int32[,] -# 17| -2: [TypeMention] Int32[,] -# 17| 1: [TypeMention] int -# 17| -1: [ArrayInitializer] { ..., ... } -# 17| 0: [ArrayInitializer] { ..., ... } -# 17| 0: [IntLiteral] 100 -# 17| 1: [IntLiteral] 101 -# 17| 1: [ArrayInitializer] { ..., ... } -# 17| 0: [IntLiteral] 102 -# 17| 1: [IntLiteral] 103 -# 17| 0: [IntLiteral] 2 -# 17| 1: [IntLiteral] 2 -# 18| 3: [LocalVariableDeclStmt] ... ...; -# 18| 0: [LocalVariableDeclAndInitExpr] Int32[,] d = ... -# 18| -1: [TypeMention] Int32[,] -# 18| 1: [TypeMention] int -# 18| 0: [LocalVariableAccess] access to local variable d -# 18| 1: [ArrayCreation] array creation of type Int32[,] -# 18| -2: [TypeMention] Int32[,] -# 18| 1: [TypeMention] int -# 18| -1: [ArrayInitializer] { ..., ... } -# 18| 0: [ArrayInitializer] { ..., ... } -# 18| 0: [IntLiteral] 100 -# 18| 1: [IntLiteral] 101 -# 18| 1: [ArrayInitializer] { ..., ... } -# 18| 0: [IntLiteral] 102 -# 18| 1: [IntLiteral] 103 -# 19| 4: [LocalVariableDeclStmt] ... ...; -# 19| 0: [LocalVariableDeclAndInitExpr] Int32[,] e = ... -# 19| -1: [TypeMention] Int32[,] -# 19| 1: [TypeMention] int -# 19| 0: [LocalVariableAccess] access to local variable e -# 19| 1: [LocalVariableAccess] access to local variable a -# 20| 5: [ExprStmt] ...; -# 20| 0: [AssignExpr] ... = ... -# 20| 0: [ArrayAccess] access to array element -# 20| -1: [LocalVariableAccess] access to local variable e -# 20| 0: [IntLiteral] 1 -# 20| 1: [IntLiteral] 1 -# 20| 1: [UnaryMinusExpr] -... -# 20| 0: [IntLiteral] 1 -assignop.cs: -# 3| [Class] AssignOp -# 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: [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| 3: [ExprStmt] ...; -# 11| 0: [AssignSubExpr] ... -= ... -# 11| 0: [LocalVariableAccess] access to local variable c -# 11| 1: [LocalVariableAccess] access to local variable a -# 12| 4: [ExprStmt] ...; -# 12| 0: [AssignMulExpr] ... *= ... -# 12| 0: [LocalVariableAccess] access to local variable c -# 12| 1: [LocalVariableAccess] access to local variable a -# 13| 5: [ExprStmt] ...; -# 13| 0: [AssignDivExpr] ... /= ... -# 13| 0: [LocalVariableAccess] access to local variable c -# 13| 1: [LocalVariableAccess] access to local variable a -# 14| 6: [ExprStmt] ...; -# 14| 0: [AssignRemExpr] ... %= ... -# 14| 0: [LocalVariableAccess] access to local variable c -# 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| 8: [ExprStmt] ...; -# 16| 0: [AssignRightShiftExpr] ... >>= ... -# 16| 0: [LocalVariableAccess] access to local variable c -# 16| 1: [IntLiteral] 2 -# 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 -#-----| 3: (Base types) -# 5| 0: [TypeMention] Casts_A -# 9| [Class] Casts -# 11| 5: [Method] Main -# 11| -1: [TypeMention] Void -# 12| 4: [BlockStmt] {...} -# 13| 0: [LocalVariableDeclStmt] ... ...; -# 13| 0: [LocalVariableDeclAndInitExpr] Casts_A Aobj = ... -# 13| -1: [TypeMention] Casts_A -# 13| 0: [LocalVariableAccess] access to local variable Aobj -# 13| 1: [ObjectCreation] object creation of type Casts_A -# 13| 0: [TypeMention] Casts_A -# 14| 1: [LocalVariableDeclStmt] ... ...; -# 14| 0: [LocalVariableDeclAndInitExpr] Casts_B bobjCE = ... -# 14| -1: [TypeMention] Casts_B -# 14| 0: [LocalVariableAccess] access to local variable bobjCE -# 14| 1: [CastExpr] (...) ... -# 14| 0: [TypeAccess] access to type Casts_B -# 14| 0: [TypeMention] Casts_B -# 14| 1: [LocalVariableAccess] access to local variable Aobj -# 15| 2: [LocalVariableDeclStmt] ... ...; -# 15| 0: [LocalVariableDeclAndInitExpr] Casts_B bobjAS = ... -# 15| -1: [TypeMention] Casts_B -# 15| 0: [LocalVariableAccess] access to local variable bobjAS -# 15| 1: [AsExpr] ... as ... -# 15| 0: [LocalVariableAccess] access to local variable Aobj -# 15| 1: [TypeAccess] access to type Casts_B -# 15| 0: [TypeMention] Casts_B -collections.cs: -# 3| [Class] Collections -# 5| 5: [Class] MyClass -# 7| 5: [Field] a -# 7| -1: [TypeMention] string -# 8| 6: [Field] b -# 8| -1: [TypeMention] string -# 11| 6: [Method] Main -# 11| -1: [TypeMention] Void -# 12| 4: [BlockStmt] {...} -# 13| 0: [LocalVariableDeclStmt] ... ...; -# 13| 0: [LocalVariableDeclAndInitExpr] Dictionary dict = ... -# 13| -1: [TypeMention] Dictionary -# 13| 0: [LocalVariableAccess] access to local variable dict -# 13| 1: [ObjectCreation] object creation of type Dictionary -# 13| -2: [TypeMention] Dictionary -# 13| 1: [TypeMention] int -# 13| 2: [TypeMention] MyClass -# 14| -1: [CollectionInitializer] { ..., ... } -# 15| 0: [ElementInitializer] call to method Add -# 15| 0: [IntLiteral] 0 -# 15| 1: [ObjectCreation] object creation of type MyClass -# 15| -2: [TypeMention] MyClass -# 15| -1: [ObjectInitializer] { ..., ... } -# 15| 0: [MemberInitializer] ... = ... -# 15| 0: [FieldAccess] access to field a -# 15| 1: [StringLiteralUtf16] "Hello" -# 15| 1: [MemberInitializer] ... = ... -# 15| 0: [FieldAccess] access to field b -# 15| 1: [StringLiteralUtf16] "World" -# 16| 1: [ElementInitializer] call to method Add -# 16| 0: [IntLiteral] 1 -# 16| 1: [ObjectCreation] object creation of type MyClass -# 16| -2: [TypeMention] MyClass -# 16| -1: [ObjectInitializer] { ..., ... } -# 16| 0: [MemberInitializer] ... = ... -# 16| 0: [FieldAccess] access to field a -# 16| 1: [StringLiteralUtf16] "Foo" -# 16| 1: [MemberInitializer] ... = ... -# 16| 0: [FieldAccess] access to field b -# 16| 1: [StringLiteralUtf16] "Bar" -constructor_init.cs: -# 1| [Class] BaseClass -# 3| 4: [Field] num -# 3| -1: [TypeMention] int -# 5| 5: [InstanceConstructor] BaseClass -# 6| 4: [BlockStmt] {...} -# 9| 6: [InstanceConstructor] BaseClass -#-----| 2: (Parameters) -# 9| 0: [Parameter] i -# 9| -1: [TypeMention] int -# 10| 4: [BlockStmt] {...} -# 11| 0: [ExprStmt] ...; -# 11| 0: [AssignExpr] ... = ... -# 11| 0: [FieldAccess] access to field num -# 11| 1: [ParameterAccess] access to parameter i -# 15| [Class] DerivedClass -#-----| 3: (Base types) -# 15| 0: [TypeMention] BaseClass -# 17| 4: [InstanceConstructor] DerivedClass -# 17| 3: [ConstructorInitializer] call to constructor BaseClass -# 18| 4: [BlockStmt] {...} -# 21| 5: [InstanceConstructor] DerivedClass -#-----| 2: (Parameters) -# 21| 0: [Parameter] i -# 21| -1: [TypeMention] int -# 21| 3: [ConstructorInitializer] call to constructor BaseClass -# 21| 0: [ParameterAccess] access to parameter i -# 22| 4: [BlockStmt] {...} -# 25| 6: [InstanceConstructor] DerivedClass -#-----| 2: (Parameters) -# 25| 0: [Parameter] i -# 25| -1: [TypeMention] int -# 25| 1: [Parameter] j -# 25| -1: [TypeMention] int -# 25| 3: [ConstructorInitializer] call to constructor DerivedClass -# 25| 0: [ParameterAccess] access to parameter i -# 26| 4: [BlockStmt] {...} -# 29| 7: [Method] Main -# 29| -1: [TypeMention] Void -# 30| 4: [BlockStmt] {...} -# 31| 0: [LocalVariableDeclStmt] ... ...; -# 31| 0: [LocalVariableDeclAndInitExpr] DerivedClass obj1 = ... -# 31| -1: [TypeMention] DerivedClass -# 31| 0: [LocalVariableAccess] access to local variable obj1 -# 31| 1: [ObjectCreation] object creation of type DerivedClass -# 31| 0: [TypeMention] DerivedClass -# 32| 1: [LocalVariableDeclStmt] ... ...; -# 32| 0: [LocalVariableDeclAndInitExpr] DerivedClass obj2 = ... -# 32| -1: [TypeMention] DerivedClass -# 32| 0: [LocalVariableAccess] access to local variable obj2 -# 32| 1: [ObjectCreation] object creation of type DerivedClass -# 32| -1: [TypeMention] DerivedClass -# 32| 0: [IntLiteral] 1 -# 33| 2: [LocalVariableDeclStmt] ... ...; -# 33| 0: [LocalVariableDeclAndInitExpr] DerivedClass obj3 = ... -# 33| -1: [TypeMention] DerivedClass -# 33| 0: [LocalVariableAccess] access to local variable obj3 -# 33| 1: [ObjectCreation] object creation of type DerivedClass -# 33| -1: [TypeMention] DerivedClass -# 33| 0: [IntLiteral] 1 -# 33| 1: [IntLiteral] 2 -crement.cs: -# 1| [Class] CrementOpsTest -# 3| 5: [Method] Main -# 3| -1: [TypeMention] Void -# 4| 4: [BlockStmt] {...} -# 5| 0: [LocalVariableDeclStmt] ... ...; -# 5| 0: [LocalVariableDeclAndInitExpr] Int32 x = ... -# 5| -1: [TypeMention] int -# 5| 0: [LocalVariableAccess] access to local variable x -# 5| 1: [IntLiteral] 10 -# 6| 1: [LocalVariableDeclStmt] ... ...; -# 6| 0: [LocalVariableDeclAndInitExpr] Int32 a = ... -# 6| -1: [TypeMention] int -# 6| 0: [LocalVariableAccess] access to local variable a -# 6| 1: [PostIncrExpr] ...++ -# 6| 0: [LocalVariableAccess] access to local variable x -# 7| 2: [LocalVariableDeclStmt] ... ...; -# 7| 0: [LocalVariableDeclAndInitExpr] Int32 b = ... -# 7| -1: [TypeMention] int -# 7| 0: [LocalVariableAccess] access to local variable b -# 7| 1: [PreDecrExpr] --... -# 7| 0: [LocalVariableAccess] access to local variable x -# 8| 3: [LocalVariableDeclStmt] ... ...; -# 8| 0: [LocalVariableDeclAndInitExpr] Int32 c = ... -# 8| -1: [TypeMention] int -# 8| 0: [LocalVariableAccess] access to local variable c -# 8| 1: [PreIncrExpr] ++... -# 8| 0: [LocalVariableAccess] access to local variable x -# 9| 4: [ExprStmt] ...; -# 9| 0: [AssignExpr] ... = ... -# 9| 0: [LocalVariableAccess] access to local variable x -# 9| 1: [PostDecrExpr] ...-- -# 9| 0: [LocalVariableAccess] access to local variable x -delegates.cs: -# 3| [Class] Delegates -# 4| 5: [DelegateType] Del -#-----| 2: (Parameters) -# 4| 0: [Parameter] num -# 4| -1: [TypeMention] int -# 6| 6: [Method] returns -# 6| -1: [TypeMention] int -#-----| 2: (Parameters) -# 6| 0: [Parameter] ret -# 6| -1: [TypeMention] int -# 7| 4: [BlockStmt] {...} -# 8| 0: [ReturnStmt] return ...; -# 8| 0: [ParameterAccess] access to parameter ret -# 11| 7: [Method] Main -# 11| -1: [TypeMention] Void -# 11| 4: [BlockStmt] {...} -# 12| 0: [LocalVariableDeclStmt] ... ...; -# 12| 0: [LocalVariableDeclAndInitExpr] Del del1 = ... -# 12| -1: [TypeMention] Del -# 12| 0: [LocalVariableAccess] access to local variable del1 -# 12| 1: [ExplicitDelegateCreation] delegate creation of type Del -# 12| -1: [TypeMention] Del -# 12| 0: [MethodAccess] access to method returns -# 13| 1: [ExprStmt] ...; -# 13| 0: [DelegateCall] delegate call -# 13| -1: [LocalVariableAccess] access to local variable del1 -# 13| 0: [IntLiteral] 5 -events.cs: -# 1| [Class] Events -# 3| 4: [DelegateType] MyDel -#-----| 2: (Parameters) -# 3| 0: [Parameter] str -# 3| -1: [TypeMention] string -# 4| 5: [Field] Inst -# 4| -1: [TypeMention] MyDel -# 6| 6: [Event] MyEvent -# 6| -1: [TypeMention] MyDel -# 6| 3: [AddEventAccessor] add_MyEvent -#-----| 2: (Parameters) -# 6| 0: [Parameter] value -# 6| 4: [RemoveEventAccessor] remove_MyEvent -#-----| 2: (Parameters) -# 6| 0: [Parameter] value -# 8| 7: [InstanceConstructor] Events -# 9| 4: [BlockStmt] {...} -# 10| 0: [ExprStmt] ...; -# 10| 0: [AssignExpr] ... = ... -# 10| 0: [FieldAccess] access to field Inst -# 10| -1: [ThisAccess] this access -# 10| 1: [ExplicitDelegateCreation] delegate creation of type MyDel -# 10| -1: [TypeMention] MyDel -# 10| 0: [MethodAccess] access to method Fun -# 10| -1: [ThisAccess] this access -# 13| 8: [Method] AddEvent -# 13| -1: [TypeMention] Void -# 14| 4: [BlockStmt] {...} -# 15| 0: [ExprStmt] ...; -# 15| 0: [AddEventExpr] ... += ... -# 15| 0: [EventAccess,EventCall] access to event MyEvent -# 15| -1: [ThisAccess] this access -# 15| 1: [FieldAccess] access to field Inst -# 15| -1: [ThisAccess] this access -# 18| 9: [Method] RemoveEvent -# 18| -1: [TypeMention] Void -# 19| 4: [BlockStmt] {...} -# 20| 0: [ExprStmt] ...; -# 20| 0: [RemoveEventExpr] ... -= ... -# 20| 0: [EventAccess,EventCall] access to event MyEvent -# 20| -1: [ThisAccess] this access -# 20| 1: [FieldAccess] access to field Inst -# 20| -1: [ThisAccess] this access -# 23| 10: [Method] Fun -# 23| -1: [TypeMention] string -#-----| 2: (Parameters) -# 23| 0: [Parameter] str -# 23| -1: [TypeMention] string -# 24| 4: [BlockStmt] {...} -# 25| 0: [ReturnStmt] return ...; -# 25| 0: [ParameterAccess] access to parameter str -# 28| 11: [Method] Main -# 28| -1: [TypeMention] Void -#-----| 2: (Parameters) -# 28| 0: [Parameter] args -# 28| -1: [TypeMention] String[] -# 28| 1: [TypeMention] string -# 29| 4: [BlockStmt] {...} -# 30| 0: [LocalVariableDeclStmt] ... ...; -# 30| 0: [LocalVariableDeclAndInitExpr] Events obj = ... -# 30| -1: [TypeMention] Events -# 30| 0: [LocalVariableAccess] access to local variable obj -# 30| 1: [ObjectCreation] object creation of type Events -# 30| 0: [TypeMention] Events -# 31| 1: [ExprStmt] ...; -# 31| 0: [MethodCall] call to method AddEvent -# 31| -1: [LocalVariableAccess] access to local variable obj -# 32| 2: [LocalVariableDeclStmt] ... ...; -# 32| 0: [LocalVariableDeclAndInitExpr] String result = ... -# 32| -1: [TypeMention] string -# 32| 0: [LocalVariableAccess] access to local variable result -# 32| 1: [DelegateCall] delegate call -# 32| -1: [LocalVariableAccess] access to local variable obj -# 32| 0: [StringLiteralUtf16] "string" -# 33| 3: [ExprStmt] ...; -# 33| 0: [MethodCall] call to method RemoveEvent -# 33| -1: [LocalVariableAccess] access to local variable obj -foreach.cs: -# 3| [Class] ForEach -# 4| 5: [Method] Main -# 4| -1: [TypeMention] Void -# 4| 4: [BlockStmt] {...} -# 5| 0: [LocalVariableDeclStmt] ... ...; -# 5| 0: [LocalVariableDeclAndInitExpr] Int32[] a_array = ... -# 5| -1: [TypeMention] Int32[] -# 5| 1: [TypeMention] int -# 5| 0: [LocalVariableAccess] access to local variable a_array -# 5| 1: [ArrayCreation] array creation of type Int32[] -# 5| -2: [TypeMention] Int32[] -# 5| 1: [TypeMention] int -# 5| -1: [ArrayInitializer] { ..., ... } -# 5| 0: [IntLiteral] 1 -# 5| 1: [IntLiteral] 2 -# 5| 2: [IntLiteral] 3 -# 5| 3: [IntLiteral] 4 -# 5| 4: [IntLiteral] 5 -# 5| 5: [IntLiteral] 6 -# 5| 6: [IntLiteral] 7 -# 7| 1: [ForeachStmt] foreach (... ... in ...) ... -# 7| 0: [LocalVariableDeclExpr] Int32 items -# 7| 0: [TypeMention] int -# 7| 1: [LocalVariableAccess] access to local variable a_array -# 8| 2: [BlockStmt] {...} -# 9| 0: [LocalVariableDeclStmt] ... ...; -# 9| 0: [LocalVariableDeclAndInitExpr] Int32 x = ... -# 9| -1: [TypeMention] int -# 9| 0: [LocalVariableAccess] access to local variable x -# 9| 1: [LocalVariableAccess] access to local variable items -func_with_param_call.cs: -# 3| [Class] test_call_with_param -# 5| 5: [Method] f -# 5| -1: [TypeMention] int -#-----| 2: (Parameters) -# 5| 0: [Parameter] x -# 5| -1: [TypeMention] int -# 5| 1: [Parameter] y -# 5| -1: [TypeMention] int -# 6| 4: [BlockStmt] {...} -# 7| 0: [ReturnStmt] return ...; -# 7| 0: [AddExpr] ... + ... -# 7| 0: [ParameterAccess] access to parameter x -# 7| 1: [ParameterAccess] access to parameter y -# 10| 6: [Method] g -# 10| -1: [TypeMention] int -# 11| 4: [BlockStmt] {...} -# 12| 0: [ReturnStmt] return ...; -# 12| 0: [MethodCall] call to method f -# 12| 0: [IntLiteral] 2 -# 12| 1: [IntLiteral] 3 -indexers.cs: -# 1| [Class] Indexers -# 3| 5: [Class] MyClass -# 5| 5: [Field] address -# 5| -1: [TypeMention] String[] -# 5| 1: [TypeMention] string -# 5| 1: [AssignExpr] ... = ... -# 5| 0: [FieldAccess] access to field address -# 5| 1: [ArrayCreation] array creation of type String[] -# 5| -1: [TypeMention] String[] -# 5| 1: [TypeMention] string -# 5| 0: [IntLiteral] 2 -# 6| 6: [Indexer] Item -# 6| -1: [TypeMention] string -#-----| 1: (Parameters) -# 6| 0: [Parameter] index -# 6| -1: [TypeMention] int -# 8| 3: [Getter] get_Item -#-----| 2: (Parameters) -# 6| 0: [Parameter] index -# 9| 4: [BlockStmt] {...} -# 10| 0: [ReturnStmt] return ...; -# 10| 0: [ArrayAccess] access to array element -# 10| -1: [FieldAccess] access to field address -# 10| 0: [ParameterAccess] access to parameter index -# 12| 4: [Setter] set_Item -#-----| 2: (Parameters) -# 6| 0: [Parameter] index -# 12| 1: [Parameter] value -# 13| 4: [BlockStmt] {...} -# 14| 0: [ExprStmt] ...; -# 14| 0: [AssignExpr] ... = ... -# 14| 0: [ArrayAccess] access to array element -# 14| -1: [FieldAccess] access to field address -# 14| 0: [ParameterAccess] access to parameter index -# 14| 1: [ParameterAccess] access to parameter value -# 19| 6: [Method] Main -# 19| -1: [TypeMention] Void -# 20| 4: [BlockStmt] {...} -# 21| 0: [LocalVariableDeclStmt] ... ...; -# 21| 0: [LocalVariableDeclAndInitExpr] MyClass inst = ... -# 21| -1: [TypeMention] MyClass -# 21| 0: [LocalVariableAccess] access to local variable inst -# 21| 1: [ObjectCreation] object creation of type MyClass -# 21| 0: [TypeMention] MyClass -# 22| 1: [ExprStmt] ...; -# 22| 0: [AssignExpr] ... = ... -# 22| 0: [IndexerCall] access to indexer -# 22| -1: [LocalVariableAccess] access to local variable inst -# 22| 0: [IntLiteral] 0 -# 22| 1: [StringLiteralUtf16] "str1" -# 23| 2: [ExprStmt] ...; -# 23| 0: [AssignExpr] ... = ... -# 23| 0: [IndexerCall] access to indexer -# 23| -1: [LocalVariableAccess] access to local variable inst -# 23| 0: [IntLiteral] 1 -# 23| 1: [StringLiteralUtf16] "str1" -# 24| 3: [ExprStmt] ...; -# 24| 0: [AssignExpr] ... = ... -# 24| 0: [IndexerCall] access to indexer -# 24| -1: [LocalVariableAccess] access to local variable inst -# 24| 0: [IntLiteral] 1 -# 24| 1: [IndexerCall] access to indexer -# 24| -1: [LocalVariableAccess] access to local variable inst -# 24| 0: [IntLiteral] 0 -inheritance_polymorphism.cs: -# 1| [Class] A -# 3| 5: [Method] function -# 3| -1: [TypeMention] int -# 4| 4: [BlockStmt] {...} -# 5| 0: [ReturnStmt] return ...; -# 5| 0: [IntLiteral] 0 -# 9| [Class] B -#-----| 3: (Base types) -# 9| 0: [TypeMention] A -# 13| [Class] C -#-----| 3: (Base types) -# 13| 0: [TypeMention] B -# 15| 5: [Method] function -# 15| -1: [TypeMention] int -# 16| 4: [BlockStmt] {...} -# 17| 0: [ReturnStmt] return ...; -# 17| 0: [IntLiteral] 1 -# 21| [Class] Program -# 23| 5: [Method] Main -# 23| -1: [TypeMention] Void -# 24| 4: [BlockStmt] {...} -# 25| 0: [LocalVariableDeclStmt] ... ...; -# 25| 0: [LocalVariableDeclAndInitExpr] B objB = ... -# 25| -1: [TypeMention] B -# 25| 0: [LocalVariableAccess] access to local variable objB -# 25| 1: [ObjectCreation] object creation of type B -# 25| 0: [TypeMention] B -# 26| 1: [ExprStmt] ...; -# 26| 0: [MethodCall] call to method function -# 26| -1: [LocalVariableAccess] access to local variable objB -# 29| 2: [LocalVariableDeclStmt] ... ...; -# 29| 0: [LocalVariableDeclExpr] A objA -# 29| 0: [TypeMention] A -# 30| 3: [ExprStmt] ...; -# 30| 0: [AssignExpr] ... = ... -# 30| 0: [LocalVariableAccess] access to local variable objA -# 30| 1: [LocalVariableAccess] access to local variable objB -# 31| 4: [ExprStmt] ...; -# 31| 0: [MethodCall] call to method function -# 31| -1: [LocalVariableAccess] access to local variable objA -# 33| 5: [LocalVariableDeclStmt] ... ...; -# 33| 0: [LocalVariableDeclAndInitExpr] A objC = ... -# 33| -1: [TypeMention] A -# 33| 0: [LocalVariableAccess] access to local variable objC -# 33| 1: [ObjectCreation] object creation of type C -# 33| 0: [TypeMention] C -# 34| 6: [ExprStmt] ...; -# 34| 0: [MethodCall] call to method function -# 34| -1: [LocalVariableAccess] access to local variable objC -inoutref.cs: -# 1| [Class] MyClass -# 2| 5: [Field] fld -# 2| -1: [TypeMention] int -# 5| [Struct] MyStruct -# 6| 5: [Field] fld -# 6| -1: [TypeMention] int -# 9| [Class] InOutRef -# 11| 5: [Method] set -# 11| -1: [TypeMention] Void -#-----| 2: (Parameters) -# 11| 0: [Parameter] o1 -# 11| -1: [TypeMention] MyClass -# 11| 1: [Parameter] o2 -# 11| -1: [TypeMention] MyClass -# 12| 4: [BlockStmt] {...} -# 13| 0: [ExprStmt] ...; -# 13| 0: [AssignExpr] ... = ... -# 13| 0: [ParameterAccess] access to parameter o1 -# 13| 1: [ParameterAccess] access to parameter o2 -# 16| 6: [Method] F -# 16| -1: [TypeMention] Void -#-----| 2: (Parameters) -# 16| 0: [Parameter] a -# 16| -1: [TypeMention] int -# 16| 1: [Parameter] b -# 16| -1: [TypeMention] MyStruct -# 16| 2: [Parameter] b1 -# 16| -1: [TypeMention] MyStruct -# 16| 3: [Parameter] c -# 16| -1: [TypeMention] MyClass -# 16| 4: [Parameter] c1 -# 16| -1: [TypeMention] MyClass -# 17| 4: [BlockStmt] {...} -# 18| 0: [ExprStmt] ...; -# 18| 0: [AssignExpr] ... = ... -# 18| 0: [FieldAccess] access to field fld -# 18| -1: [ParameterAccess] access to parameter b -# 18| 1: [IntLiteral] 0 -# 19| 1: [ExprStmt] ...; -# 19| 0: [AssignExpr] ... = ... -# 19| 0: [ParameterAccess] access to parameter a -# 19| 1: [FieldAccess] access to field fld -# 19| -1: [ParameterAccess] access to parameter b -# 21| 2: [ExprStmt] ...; -# 21| 0: [AssignExpr] ... = ... -# 21| 0: [FieldAccess] access to field fld -# 21| -1: [ParameterAccess] access to parameter c -# 21| 1: [IntLiteral] 10 -# 22| 3: [ExprStmt] ...; -# 22| 0: [AssignExpr] ... = ... -# 22| 0: [ParameterAccess] access to parameter a -# 22| 1: [FieldAccess] access to field fld -# 22| -1: [ParameterAccess] access to parameter c -# 24| 4: [ExprStmt] ...; -# 24| 0: [AssignExpr] ... = ... -# 24| 0: [ParameterAccess] access to parameter b -# 24| 1: [ParameterAccess] access to parameter b1 -# 26| 5: [ExprStmt] ...; -# 26| 0: [MethodCall] call to method set -# 26| 0: [ParameterAccess] access to parameter c -# 26| 1: [ParameterAccess] access to parameter c1 -# 29| 7: [Method] Main -# 29| -1: [TypeMention] Void -# 30| 4: [BlockStmt] {...} -# 31| 0: [LocalVariableDeclStmt] ... ...; -# 31| 0: [LocalVariableDeclAndInitExpr] Int32 a = ... -# 31| -1: [TypeMention] int -# 31| 0: [LocalVariableAccess] access to local variable a -# 31| 1: [IntLiteral] 0 -# 32| 1: [LocalVariableDeclStmt] ... ...; -# 32| 0: [LocalVariableDeclAndInitExpr] MyStruct b = ... -# 32| -1: [TypeMention] MyStruct -# 32| 0: [LocalVariableAccess] access to local variable b -# 32| 1: [ObjectCreation] object creation of type MyStruct -# 32| 0: [TypeMention] MyStruct -# 33| 2: [LocalVariableDeclStmt] ... ...; -# 33| 0: [LocalVariableDeclAndInitExpr] MyClass c = ... -# 33| -1: [TypeMention] MyClass -# 33| 0: [LocalVariableAccess] access to local variable c -# 33| 1: [ObjectCreation] object creation of type MyClass -# 33| 0: [TypeMention] MyClass -# 34| 3: [ExprStmt] ...; -# 34| 0: [MethodCall] call to method F -# 34| 0: [LocalVariableAccess] access to local variable a -# 34| 1: [LocalVariableAccess] access to local variable b -# 34| 2: [LocalVariableAccess] access to local variable b -# 34| 3: [LocalVariableAccess] access to local variable c -# 34| 4: [LocalVariableAccess] access to local variable c -# 36| 4: [LocalVariableDeclStmt] ... ...; -# 36| 0: [LocalVariableDeclAndInitExpr] Int32 x = ... -# 36| -1: [TypeMention] int -# 36| 0: [LocalVariableAccess] access to local variable x -# 36| 1: [FieldAccess] access to field fld -# 36| -1: [LocalVariableAccess] access to local variable b -isexpr.cs: -# 1| [Class] Is_A -# 3| 5: [Field] x -# 3| -1: [TypeMention] int -# 6| [Class] IsExpr -# 8| 5: [Method] Main -# 8| -1: [TypeMention] Void -# 9| 4: [BlockStmt] {...} -# 10| 0: [LocalVariableDeclStmt] ... ...; -# 10| 0: [LocalVariableDeclAndInitExpr] Is_A obj = ... -# 10| -1: [TypeMention] Is_A -# 10| 0: [LocalVariableAccess] access to local variable obj -# 10| 1: [NullLiteral] null -# 12| 1: [LocalVariableDeclStmt] ... ...; -# 12| 0: [LocalVariableDeclAndInitExpr] Object o = ... -# 12| -1: [TypeMention] object -# 12| 0: [LocalVariableAccess] access to local variable o -# 12| 1: [LocalVariableAccess] access to local variable obj -# 13| 2: [IfStmt] if (...) ... -# 13| 0: [IsExpr] ... is ... -# 13| 0: [LocalVariableAccess] access to local variable o -# 13| 1: [VariablePatternExpr] Is_A tmp -# 13| 0: [TypeMention] Is_A -# 14| 1: [BlockStmt] {...} -# 15| 0: [LocalVariableDeclStmt] ... ...; -# 15| 0: [LocalVariableDeclAndInitExpr] Int32 res = ... -# 15| -1: [TypeMention] int -# 15| 0: [LocalVariableAccess] access to local variable res -# 15| 1: [FieldAccess] access to field x -# 15| -1: [LocalVariableAccess] access to local variable tmp -# 17| 3: [IfStmt] if (...) ... -# 17| 0: [IsExpr] ... is ... -# 17| 0: [LocalVariableAccess] access to local variable o -# 17| 1: [TypeAccessPatternExpr] access to type Is_A -# 17| 0: [TypeMention] Is_A -# 18| 1: [BlockStmt] {...} -jumps.cs: -# 3| [Class] Jumps -# 5| 5: [Method] Main -# 5| -1: [TypeMention] Void -# 6| 4: [BlockStmt] {...} -# 7| 0: [ForStmt] for (...;...;...) ... -# 7| -1: [LocalVariableDeclAndInitExpr] Int32 i = ... -# 7| -1: [TypeMention] int -# 7| 0: [LocalVariableAccess] access to local variable i -# 7| 1: [IntLiteral] 1 -# 7| 0: [LEExpr] ... <= ... -# 7| 0: [LocalVariableAccess] access to local variable i -# 7| 1: [IntLiteral] 10 -# 7| 1: [PostIncrExpr] ...++ -# 7| 0: [LocalVariableAccess] access to local variable i -# 8| 2: [BlockStmt] {...} -# 9| 0: [IfStmt] if (...) ... -# 9| 0: [EQExpr] ... == ... -# 9| 0: [LocalVariableAccess] access to local variable i -# 9| 1: [IntLiteral] 3 -# 10| 1: [ContinueStmt] continue; -# 11| 2: [IfStmt] if (...) ... -# 11| 0: [EQExpr] ... == ... -# 11| 0: [LocalVariableAccess] access to local variable i -# 11| 1: [IntLiteral] 5 -# 12| 1: [BreakStmt] break; -# 13| 1: [ExprStmt] ...; -# 13| 0: [MethodCall] call to method WriteLine -# 13| -1: [TypeAccess] access to type Console -# 13| 0: [TypeMention] Console -# 13| 0: [StringLiteralUtf16] "BreakAndContinue" -# 16| 1: [ForStmt] for (...;...;...) ... -# 16| -1: [LocalVariableDeclAndInitExpr] Int32 i = ... -# 16| -1: [TypeMention] int -# 16| 0: [LocalVariableAccess] access to local variable i -# 16| 1: [IntLiteral] 0 -# 16| 0: [LTExpr] ... < ... -# 16| 0: [LocalVariableAccess] access to local variable i -# 16| 1: [IntLiteral] 10 -# 17| 1: [BlockStmt] {...} -# 18| 0: [ExprStmt] ...; -# 18| 0: [PostIncrExpr] ...++ -# 18| 0: [LocalVariableAccess] access to local variable i -# 19| 1: [ContinueStmt] continue; -# 22| 2: [LocalVariableDeclStmt] ... ...; -# 22| 0: [LocalVariableDeclAndInitExpr] Int32 a = ... -# 22| -1: [TypeMention] int -# 22| 0: [LocalVariableAccess] access to local variable a -# 22| 1: [IntLiteral] 0 -# 23| 3: [WhileStmt] while (...) ... -# 23| 0: [BoolLiteral] true -# 24| 1: [BlockStmt] {...} -# 25| 0: [ExprStmt] ...; -# 25| 0: [PostIncrExpr] ...++ -# 25| 0: [LocalVariableAccess] access to local variable a -# 26| 1: [IfStmt] if (...) ... -# 26| 0: [EQExpr] ... == ... -# 26| 0: [LocalVariableAccess] access to local variable a -# 26| 1: [IntLiteral] 5 -# 27| 1: [ContinueStmt] continue; -# 28| 2: [IfStmt] if (...) ... -# 28| 0: [EQExpr] ... == ... -# 28| 0: [LocalVariableAccess] access to local variable a -# 28| 1: [IntLiteral] 10 -# 29| 1: [BreakStmt] break; -# 32| 4: [ForStmt] for (...;...;...) ... -# 32| -1: [LocalVariableDeclAndInitExpr] Int32 i = ... -# 32| -1: [TypeMention] int -# 32| 0: [LocalVariableAccess] access to local variable i -# 32| 1: [IntLiteral] 1 -# 32| 0: [LEExpr] ... <= ... -# 32| 0: [LocalVariableAccess] access to local variable i -# 32| 1: [IntLiteral] 10 -# 32| 1: [PostIncrExpr] ...++ -# 32| 0: [LocalVariableAccess] access to local variable i -# 33| 2: [BlockStmt] {...} -# 34| 0: [IfStmt] if (...) ... -# 34| 0: [EQExpr] ... == ... -# 34| 0: [LocalVariableAccess] access to local variable i -# 34| 1: [IntLiteral] 5 -# 35| 1: [GotoLabelStmt] goto ...; -# 37| 5: [LabelStmt] done: -# 38| 6: [ExprStmt] ...; -# 38| 0: [MethodCall] call to method WriteLine -# 38| -1: [TypeAccess] access to type Console -# 38| 0: [TypeMention] Console -# 38| 0: [StringLiteralUtf16] "Done" -lock.cs: -# 3| [Class] LockTest -# 5| 5: [Method] A -# 5| -1: [TypeMention] Void -# 6| 4: [BlockStmt] {...} -# 7| 0: [LocalVariableDeclStmt] ... ...; -# 7| 0: [LocalVariableDeclAndInitExpr] Object object = ... -# 7| -1: [TypeMention] object -# 7| 0: [LocalVariableAccess] access to local variable object -# 7| 1: [ObjectCreation] object creation of type Object -# 7| 0: [TypeMention] object -# 8| 1: [LockStmt] lock (...) {...} -# 8| 0: [LocalVariableAccess] access to local variable object -# 9| 1: [BlockStmt] {...} -# 10| 0: [ExprStmt] ...; -# 10| 0: [MethodCall] call to method WriteLine -# 10| -1: [TypeAccess] access to type Console -# 10| 0: [TypeMention] Console -# 10| 0: [MethodCall] call to method ToString -# 10| -1: [LocalVariableAccess] access to local variable object -obj_creation.cs: -# 1| [Class] ObjCreation -# 3| 5: [Class] MyClass -# 5| 4: [Field] x -# 5| -1: [TypeMention] int -# 7| 5: [InstanceConstructor] MyClass -# 8| 4: [BlockStmt] {...} -# 11| 6: [InstanceConstructor] MyClass -#-----| 2: (Parameters) -# 11| 0: [Parameter] _x -# 11| -1: [TypeMention] int -# 12| 4: [BlockStmt] {...} -# 13| 0: [ExprStmt] ...; -# 13| 0: [AssignExpr] ... = ... -# 13| 0: [FieldAccess] access to field x -# 13| 1: [ParameterAccess] access to parameter _x -# 17| 6: [Method] SomeFun -# 17| -1: [TypeMention] Void -#-----| 2: (Parameters) -# 17| 0: [Parameter] x -# 17| -1: [TypeMention] MyClass -# 18| 4: [BlockStmt] {...} -# 21| 7: [Method] Main -# 21| -1: [TypeMention] Void -# 22| 4: [BlockStmt] {...} -# 23| 0: [LocalVariableDeclStmt] ... ...; -# 23| 0: [LocalVariableDeclAndInitExpr] MyClass obj = ... -# 23| -1: [TypeMention] MyClass -# 23| 0: [LocalVariableAccess] access to local variable obj -# 23| 1: [ObjectCreation] object creation of type MyClass -# 23| -1: [TypeMention] MyClass -# 23| 0: [IntLiteral] 100 -# 24| 1: [LocalVariableDeclStmt] ... ...; -# 24| 0: [LocalVariableDeclAndInitExpr] MyClass obj_initlist = ... -# 24| -1: [TypeMention] MyClass -# 24| 0: [LocalVariableAccess] access to local variable obj_initlist -# 24| 1: [ObjectCreation] object creation of type MyClass -# 24| -2: [TypeMention] MyClass -# 24| -1: [ObjectInitializer] { ..., ... } -# 24| 0: [MemberInitializer] ... = ... -# 24| 0: [FieldAccess] access to field x -# 24| 1: [IntLiteral] 101 -# 25| 2: [LocalVariableDeclStmt] ... ...; -# 25| 0: [LocalVariableDeclAndInitExpr] Int32 a = ... -# 25| -1: [TypeMention] int -# 25| 0: [LocalVariableAccess] access to local variable a -# 25| 1: [FieldAccess] access to field x -# 25| -1: [LocalVariableAccess] access to local variable obj -# 27| 3: [ExprStmt] ...; -# 27| 0: [MethodCall] call to method SomeFun -# 27| 0: [ObjectCreation] object creation of type MyClass -# 27| -1: [TypeMention] MyClass -# 27| 0: [IntLiteral] 100 -pointers.cs: -# 1| [Class] Pointers -# 3| 5: [Method] addone -# 3| -1: [TypeMention] Void -#-----| 2: (Parameters) -# 3| 0: [Parameter] arr -# 3| -1: [TypeMention] Int32[] -# 3| 1: [TypeMention] int -# 4| 4: [BlockStmt] {...} -# 5| 0: [LocalVariableDeclStmt] ... ...; -# 5| 0: [LocalVariableDeclAndInitExpr] Int32 length = ... -# 5| -1: [TypeMention] int -# 5| 0: [LocalVariableAccess] access to local variable length -# 5| 1: [PropertyCall] access to property Length -# 5| -1: [ParameterAccess] access to parameter arr -# 6| 1: [FixedStmt] fixed(...) { ... } -# 6| -1: [LocalVariableDeclAndInitExpr] Int32* b = ... -# 6| -1: [TypeMention] int* -# 6| 1: [TypeMention] int -# 6| 0: [LocalVariableAccess] access to local variable b -# 6| 1: [CastExpr] (...) ... -# 6| 1: [ParameterAccess] access to parameter arr -# 7| 0: [BlockStmt] {...} -# 8| 0: [LocalVariableDeclStmt] ... ...; -# 8| 0: [LocalVariableDeclAndInitExpr] Int32* p = ... -# 8| -1: [TypeMention] int* -# 8| 1: [TypeMention] int -# 8| 0: [LocalVariableAccess] access to local variable p -# 8| 1: [LocalVariableAccess] access to local variable b -# 9| 1: [ForStmt] for (...;...;...) ... -# 9| -1: [LocalVariableDeclAndInitExpr] Int32 i = ... -# 9| -1: [TypeMention] int -# 9| 0: [LocalVariableAccess] access to local variable i -# 9| 1: [IntLiteral] 0 -# 9| 0: [LTExpr] ... < ... -# 9| 0: [LocalVariableAccess] access to local variable i -# 9| 1: [LocalVariableAccess] access to local variable length -# 9| 1: [PostIncrExpr] ...++ -# 9| 0: [LocalVariableAccess] access to local variable i -# 10| 2: [ExprStmt] ...; -# 10| 0: [AssignAddExpr] ... += ... -# 10| 0: [PointerIndirectionExpr] *... -# 10| 0: [PostIncrExpr] ...++ -# 10| 0: [LocalVariableAccess] access to local variable p -# 10| 1: [IntLiteral] 1 -# 14| 6: [Class] MyClass -# 16| 5: [Field] fld1 -# 16| -1: [TypeMention] int -# 17| 6: [Field] fld2 -# 17| -1: [TypeMention] int -# 20| 7: [Struct] MyStruct -# 22| 5: [Field] fld -# 22| -1: [TypeMention] int -# 25| 8: [Method] Main -# 25| -1: [TypeMention] Void -# 25| 4: [BlockStmt] {...} -# 26| 0: [LocalVariableDeclStmt] ... ...; -# 26| 0: [LocalVariableDeclAndInitExpr] MyClass o = ... -# 26| -1: [TypeMention] MyClass -# 26| 0: [LocalVariableAccess] access to local variable o -# 26| 1: [ObjectCreation] object creation of type MyClass -# 26| 0: [TypeMention] MyClass -# 27| 1: [LocalVariableDeclStmt] ... ...; -# 27| 0: [LocalVariableDeclAndInitExpr] MyStruct s = ... -# 27| -1: [TypeMention] MyStruct -# 27| 0: [LocalVariableAccess] access to local variable s -# 27| 1: [ObjectCreation] object creation of type MyStruct -# 27| 0: [TypeMention] MyStruct -# 28| 2: [UnsafeStmt] unsafe {...} -# 29| 0: [BlockStmt] {...} -# 30| 0: [FixedStmt] fixed(...) { ... } -# 30| -2: [LocalVariableDeclAndInitExpr] Int32* q = ... -# 30| -1: [TypeMention] int* -# 30| 1: [TypeMention] int -# 30| 0: [LocalVariableAccess] access to local variable q -# 30| 1: [AddressOfExpr] &... -# 30| 0: [FieldAccess] access to field fld2 -# 30| -1: [LocalVariableAccess] access to local variable o -# 30| -1: [LocalVariableDeclAndInitExpr] Int32* p = ... -# 30| -1: [TypeMention] int* -# 30| 1: [TypeMention] int -# 30| 0: [LocalVariableAccess] access to local variable p -# 30| 1: [AddressOfExpr] &... -# 30| 0: [FieldAccess] access to field fld1 -# 30| -1: [LocalVariableAccess] access to local variable o -# 31| 0: [BlockStmt] {...} -# 32| 0: [ExprStmt] ...; -# 32| 0: [AssignExpr] ... = ... -# 32| 0: [PointerIndirectionExpr] *... -# 32| 0: [LocalVariableAccess] access to local variable p -# 32| 1: [IntLiteral] 0 -# 33| 1: [ExprStmt] ...; -# 33| 0: [AssignExpr] ... = ... -# 33| 0: [PointerIndirectionExpr] *... -# 33| 0: [LocalVariableAccess] access to local variable q -# 33| 1: [IntLiteral] 0 -# 34| 2: [LocalVariableDeclStmt] ... ...; -# 34| 0: [LocalVariableDeclAndInitExpr] MyStruct* r = ... -# 34| -1: [TypeMention] MyStruct* -# 34| 1: [TypeMention] MyStruct -# 34| 0: [LocalVariableAccess] access to local variable r -# 34| 1: [AddressOfExpr] &... -# 34| 0: [LocalVariableAccess] access to local variable s -# 35| 3: [ExprStmt] ...; -# 35| 0: [AssignExpr] ... = ... -# 35| 0: [FieldAccess] access to field fld -# 35| -1: [PointerIndirectionExpr] *... -# 35| 0: [LocalVariableAccess] access to local variable r -# 35| 1: [IntLiteral] 0 -# 39| 3: [LocalVariableDeclStmt] ... ...; -# 39| 0: [LocalVariableDeclAndInitExpr] Int32[] arr = ... -# 39| -1: [TypeMention] Int32[] -# 39| 1: [TypeMention] int -# 39| 0: [LocalVariableAccess] access to local variable arr -# 39| 1: [ArrayCreation] array creation of type Int32[] -# 39| -1: [ArrayInitializer] { ..., ... } -# 39| 0: [IntLiteral] 1 -# 39| 1: [IntLiteral] 2 -# 39| 2: [IntLiteral] 3 -# 40| 4: [ExprStmt] ...; -# 40| 0: [MethodCall] call to method addone -# 40| 0: [LocalVariableAccess] access to local variable arr -prop.cs: -# 1| [Class] PropClass -# 3| 5: [Field] prop -# 3| -1: [TypeMention] int -# 5| 6: [Property] Prop -# 5| -1: [TypeMention] int -# 7| 3: [Getter] get_Prop -# 8| 4: [BlockStmt] {...} -# 9| 0: [ReturnStmt] return ...; -# 9| 0: [MethodCall] call to method func -# 12| 4: [Setter] set_Prop -#-----| 2: (Parameters) -# 12| 0: [Parameter] value -# 13| 4: [BlockStmt] {...} -# 14| 0: [ExprStmt] ...; -# 14| 0: [AssignExpr] ... = ... -# 14| 0: [FieldAccess] access to field prop -# 14| 1: [ParameterAccess] access to parameter value -# 18| 7: [Method] func -# 18| -1: [TypeMention] int -# 19| 4: [BlockStmt] {...} -# 20| 0: [ReturnStmt] return ...; -# 20| 0: [IntLiteral] 0 -# 24| [Class] Prog -# 26| 5: [Method] Main -# 26| -1: [TypeMention] Void -# 27| 4: [BlockStmt] {...} -# 28| 0: [LocalVariableDeclStmt] ... ...; -# 28| 0: [LocalVariableDeclAndInitExpr] PropClass obj = ... -# 28| -1: [TypeMention] PropClass -# 28| 0: [LocalVariableAccess] access to local variable obj -# 28| 1: [ObjectCreation] object creation of type PropClass -# 28| 0: [TypeMention] PropClass -# 29| 1: [ExprStmt] ...; -# 29| 0: [AssignExpr] ... = ... -# 29| 0: [PropertyCall] access to property Prop -# 29| -1: [LocalVariableAccess] access to local variable obj -# 29| 1: [IntLiteral] 5 -# 30| 2: [LocalVariableDeclStmt] ... ...; -# 30| 0: [LocalVariableDeclAndInitExpr] Int32 x = ... -# 30| -1: [TypeMention] int -# 30| 0: [LocalVariableAccess] access to local variable x -# 30| 1: [PropertyCall] access to property Prop -# 30| -1: [LocalVariableAccess] access to local variable obj -simple_call.cs: -# 3| [Class] test_simple_call -# 5| 5: [Method] f -# 5| -1: [TypeMention] int -# 6| 4: [BlockStmt] {...} -# 7| 0: [ReturnStmt] return ...; -# 7| 0: [IntLiteral] 0 -# 10| 6: [Method] g -# 10| -1: [TypeMention] int -# 11| 4: [BlockStmt] {...} -# 12| 0: [ReturnStmt] return ...; -# 12| 0: [MethodCall] call to method f -simple_function.cs: -# 3| [Class] test_simple_function -# 5| 5: [Method] f -# 5| -1: [TypeMention] int -# 6| 4: [BlockStmt] {...} -# 7| 0: [ReturnStmt] return ...; -# 7| 0: [IntLiteral] 0 -stmts.cs: -# 3| [Class] test_stmts -# 5| 5: [Method] ifStmt -# 5| -1: [TypeMention] int -#-----| 2: (Parameters) -# 5| 0: [Parameter] x -# 5| -1: [TypeMention] int -# 6| 4: [BlockStmt] {...} -# 7| 0: [IfStmt] if (...) ... -# 7| 0: [EQExpr] ... == ... -# 7| 0: [ParameterAccess] access to parameter x -# 7| 1: [IntLiteral] 5 -# 8| 1: [ReturnStmt] return ...; -# 8| 0: [IntLiteral] 0 -# 10| 2: [ReturnStmt] return ...; -# 10| 0: [IntLiteral] 1 -# 13| 6: [Method] whileStmt -# 13| -1: [TypeMention] Void -#-----| 2: (Parameters) -# 13| 0: [Parameter] x -# 13| -1: [TypeMention] int -# 14| 4: [BlockStmt] {...} -# 15| 0: [LocalVariableDeclStmt] ... ...; -# 15| 0: [LocalVariableDeclAndInitExpr] Int32 i = ... -# 15| -1: [TypeMention] int -# 15| 0: [LocalVariableAccess] access to local variable i -# 15| 1: [IntLiteral] 0 -# 16| 1: [WhileStmt] while (...) ... -# 16| 0: [LTExpr] ... < ... -# 16| 0: [LocalVariableAccess] access to local variable i -# 16| 1: [IntLiteral] 10 -# 17| 1: [BlockStmt] {...} -# 18| 0: [ExprStmt] ...; -# 18| 0: [AssignExpr] ... = ... -# 18| 0: [ParameterAccess] access to parameter x -# 18| 1: [AddExpr] ... + ... -# 18| 0: [ParameterAccess] access to parameter x -# 18| 1: [IntLiteral] 1 -# 22| 7: [Method] switchStmt -# 22| -1: [TypeMention] int -# 23| 4: [BlockStmt] {...} -# 24| 0: [LocalVariableDeclStmt] ... ...; -# 24| 0: [LocalVariableDeclAndInitExpr] Object caseSwitch = ... -# 24| -1: [TypeMention] object -# 24| 0: [LocalVariableAccess] access to local variable caseSwitch -# 24| 1: [ObjectCreation] object creation of type Object -# 24| 0: [TypeMention] object -# 25| 1: [LocalVariableDeclStmt] ... ...; -# 25| 0: [LocalVariableDeclAndInitExpr] Int32 select = ... -# 25| -1: [TypeMention] int -# 25| 0: [LocalVariableAccess] access to local variable select -# 25| 1: [IntLiteral] 0 -# 27| 2: [SwitchStmt] switch (...) {...} -# 27| 0: [LocalVariableAccess] access to local variable caseSwitch -# 29| 0: [ConstCase] case ...: -# 29| 0: [ConstantPatternExpr,UnaryMinusExpr] -... -# 29| 0: [IntLiteral] 1 -# 30| 1: [GotoCaseStmt] goto case ...; -# 30| 0: [BoolLiteral] true -# 31| 2: [ConstCase] case ...: -# 31| 0: [ConstantPatternExpr,IntLiteral] 0 -# 32| 3: [GotoCaseStmt] goto case ...; -# 32| 0: [StringLiteralUtf16] "123" -# 33| 4: [ConstCase] case ...: -# 33| 0: [ConstantPatternExpr,StringLiteralUtf16] "123" -# 34| 5: [ExprStmt] ...; -# 34| 0: [AssignExpr] ... = ... -# 34| 0: [LocalVariableAccess] access to local variable select -# 34| 1: [IntLiteral] 100 -# 35| 6: [BreakStmt] break; -# 36| 7: [ConstCase] case ...: -# 36| 0: [BoolLiteral,ConstantPatternExpr] true -# 37| 8: [ExprStmt] ...; -# 37| 0: [AssignExpr] ... = ... -# 37| 0: [LocalVariableAccess] access to local variable select -# 37| 1: [IntLiteral] 101 -# 38| 9: [GotoDefaultStmt] goto default; -# 39| 10: [DefaultCase] default: -# 40| 11: [ReturnStmt] return ...; -# 40| 0: [LocalVariableAccess] access to local variable select -# 42| 3: [ReturnStmt] return ...; -# 42| 0: [IntLiteral] 0 -# 45| 8: [Method] tryCatchFinally -# 45| -1: [TypeMention] Void -# 46| 4: [BlockStmt] {...} -# 47| 0: [LocalVariableDeclStmt] ... ...; -# 47| 0: [LocalVariableDeclAndInitExpr] Int32 x = ... -# 47| -1: [TypeMention] int -# 47| 0: [LocalVariableAccess] access to local variable x -# 47| 1: [IntLiteral] 5 -# 48| 1: [TryStmt] try {...} ... -# 63| -1: [BlockStmt] {...} -# 64| 0: [ExprStmt] ...; -# 64| 0: [AssignExpr] ... = ... -# 64| 0: [LocalVariableAccess] access to local variable x -# 64| 1: [IntLiteral] 2 -# 49| 0: [BlockStmt] {...} -# 50| 0: [IfStmt] if (...) ... -# 50| 0: [NEExpr] ... != ... -# 50| 0: [LocalVariableAccess] access to local variable x -# 50| 1: [IntLiteral] 0 -# 51| 1: [ThrowStmt] throw ...; -# 51| 0: [ObjectCreation] object creation of type Exception -# 51| 0: [TypeMention] Exception -# 52| 1: [ExprStmt] ...; -# 52| 0: [AssignExpr] ... = ... -# 52| 0: [LocalVariableAccess] access to local variable x -# 52| 1: [IntLiteral] 0 -# 54| 1: [SpecificCatchClause] catch (...) {...} -# 54| 0: [LocalVariableDeclExpr] Exception ex -# 54| 0: [TypeMention] Exception -# 55| 1: [BlockStmt] {...} -# 56| 0: [ExprStmt] ...; -# 56| 0: [AssignExpr] ... = ... -# 56| 0: [LocalVariableAccess] access to local variable x -# 56| 1: [IntLiteral] 1 -# 58| 2: [GeneralCatchClause] catch {...} -# 59| 1: [BlockStmt] {...} -# 60| 0: [ThrowStmt] throw ...; -# 68| 9: [Method] forStmt -# 68| -1: [TypeMention] Void -# 69| 4: [BlockStmt] {...} -# 70| 0: [LocalVariableDeclStmt] ... ...; -# 70| 0: [LocalVariableDeclAndInitExpr] Int32 x = ... -# 70| -1: [TypeMention] int -# 70| 0: [LocalVariableAccess] access to local variable x -# 70| 1: [IntLiteral] 0 -# 71| 1: [ForStmt] for (...;...;...) ... -# 71| -2: [LocalVariableDeclAndInitExpr] Int32 j = ... -# 71| -1: [TypeMention] int -# 71| 0: [LocalVariableAccess] access to local variable j -# 71| 1: [IntLiteral] 10 -# 71| -1: [LocalVariableDeclAndInitExpr] Int32 i = ... -# 71| -1: [TypeMention] int -# 71| 0: [LocalVariableAccess] access to local variable i -# 71| 1: [IntLiteral] 0 -# 71| 0: [LTExpr] ... < ... -# 71| 0: [LocalVariableAccess] access to local variable i -# 71| 1: [LocalVariableAccess] access to local variable j -# 71| 1: [PostIncrExpr] ...++ -# 71| 0: [LocalVariableAccess] access to local variable i -# 71| 2: [PostDecrExpr] ...-- -# 71| 0: [LocalVariableAccess] access to local variable j -# 72| 3: [BlockStmt] {...} -# 73| 0: [ExprStmt] ...; -# 73| 0: [AssignExpr] ... = ... -# 73| 0: [LocalVariableAccess] access to local variable x -# 73| 1: [SubExpr] ... - ... -# 73| 0: [LocalVariableAccess] access to local variable x -# 73| 1: [IntLiteral] 1 -# 76| 2: [LocalVariableDeclStmt] ... ...; -# 76| 0: [LocalVariableDeclExpr] Int32 a -# 76| 0: [TypeMention] int -# 76| 1: [LocalVariableDeclAndInitExpr] Int32 b = ... -# 76| -1: [TypeMention] int -# 76| 0: [LocalVariableAccess] access to local variable b -# 76| 1: [IntLiteral] 10 -# 77| 3: [ForStmt] for (...;...;...) ... -# 77| -1: [AssignExpr] ... = ... -# 77| 0: [LocalVariableAccess] access to local variable a -# 77| 1: [IntLiteral] 0 -# 77| 0: [LTExpr] ... < ... -# 77| 0: [LocalVariableAccess] access to local variable a -# 77| 1: [LocalVariableAccess] access to local variable b -# 78| 1: [BlockStmt] {...} -# 79| 0: [ExprStmt] ...; -# 79| 0: [PostIncrExpr] ...++ -# 79| 0: [LocalVariableAccess] access to local variable a -# 82| 4: [ForStmt] for (...;...;...) ... -# 83| 1: [BlockStmt] {...} -# 88| 10: [Method] doWhile -# 88| -1: [TypeMention] Void -# 89| 4: [BlockStmt] {...} -# 90| 0: [LocalVariableDeclStmt] ... ...; -# 90| 0: [LocalVariableDeclAndInitExpr] Int32 x = ... -# 90| -1: [TypeMention] int -# 90| 0: [LocalVariableAccess] access to local variable x -# 90| 1: [IntLiteral] 0 -# 91| 1: [DoStmt] do ... while (...); -# 95| 0: [LTExpr] ... < ... -# 95| 0: [LocalVariableAccess] access to local variable x -# 95| 1: [IntLiteral] 10 -# 92| 1: [BlockStmt] {...} -# 93| 0: [ExprStmt] ...; -# 93| 0: [AssignExpr] ... = ... -# 93| 0: [LocalVariableAccess] access to local variable x -# 93| 1: [AddExpr] ... + ... -# 93| 0: [LocalVariableAccess] access to local variable x -# 93| 1: [IntLiteral] 1 -# 98| 11: [Method] checkedUnchecked -# 98| -1: [TypeMention] Void -# 99| 4: [BlockStmt] {...} -# 100| 0: [LocalVariableDeclStmt] ... ...; -# 100| 0: [LocalVariableDeclAndInitExpr] Int32 num = ... -# 100| -1: [TypeMention] int -# 100| 0: [LocalVariableAccess] access to local variable num -# 100| 1: [MemberConstantAccess] access to constant MaxValue -# 100| -1: [TypeAccess] access to type Int32 -# 100| 0: [TypeMention] int -# 101| 1: [UncheckedStmt] unchecked {...} -# 102| 0: [BlockStmt] {...} -# 103| 0: [ExprStmt] ...; -# 103| 0: [AssignExpr] ... = ... -# 103| 0: [LocalVariableAccess] access to local variable num -# 103| 1: [AddExpr] ... + ... -# 103| 0: [LocalVariableAccess] access to local variable num -# 103| 1: [IntLiteral] 1 -# 105| 2: [CheckedStmt] checked {...} -# 106| 0: [BlockStmt] {...} -# 107| 0: [ExprStmt] ...; -# 107| 0: [AssignExpr] ... = ... -# 107| 0: [LocalVariableAccess] access to local variable num -# 107| 1: [AddExpr] ... + ... -# 107| 0: [LocalVariableAccess] access to local variable num -# 107| 1: [IntLiteral] 1 -using.cs: -# 3| [Class] UsingStmt -# 5| 5: [Class] MyDisposable -#-----| 3: (Base types) -# 5| 1: [TypeMention] IDisposable -# 7| 4: [InstanceConstructor] MyDisposable -# 7| 4: [BlockStmt] {...} -# 8| 5: [Method] DoSomething -# 8| -1: [TypeMention] Void -# 8| 4: [BlockStmt] {...} -# 9| 6: [Method] Dispose -# 9| -1: [TypeMention] Void -# 9| 4: [BlockStmt] {...} -# 12| 6: [Method] Main -# 12| -1: [TypeMention] Void -# 13| 4: [BlockStmt] {...} -# 14| 0: [UsingBlockStmt] using (...) {...} -# 14| -1: [LocalVariableDeclAndInitExpr] MyDisposable o1 = ... -# 14| -1: [TypeMention] MyDisposable -# 14| 0: [LocalVariableAccess] access to local variable o1 -# 14| 1: [ObjectCreation] object creation of type MyDisposable -# 14| 0: [TypeMention] MyDisposable -# 15| 1: [BlockStmt] {...} -# 16| 0: [ExprStmt] ...; -# 16| 0: [MethodCall] call to method DoSomething -# 16| -1: [LocalVariableAccess] access to local variable o1 -# 19| 1: [LocalVariableDeclStmt] ... ...; -# 19| 0: [LocalVariableDeclAndInitExpr] MyDisposable o2 = ... -# 19| -1: [TypeMention] MyDisposable -# 19| 0: [LocalVariableAccess] access to local variable o2 -# 19| 1: [ObjectCreation] object creation of type MyDisposable -# 19| 0: [TypeMention] MyDisposable -# 20| 2: [UsingBlockStmt] using (...) {...} -# 20| 0: [LocalVariableAccess] access to local variable o2 -# 21| 1: [BlockStmt] {...} -# 22| 0: [ExprStmt] ...; -# 22| 0: [MethodCall] call to method DoSomething -# 22| -1: [LocalVariableAccess] access to local variable o2 -# 25| 3: [UsingDeclStmt] using ... ...; -# 25| 0: [LocalVariableDeclAndInitExpr] MyDisposable o3 = ... -# 25| -1: [TypeMention] MyDisposable -# 25| 0: [LocalVariableAccess] access to local variable o3 -# 25| 1: [ObjectCreation] object creation of type MyDisposable -# 25| 0: [TypeMention] MyDisposable -# 26| 4: [ExprStmt] ...; -# 26| 0: [MethodCall] call to method DoSomething -# 26| -1: [LocalVariableAccess] access to local variable o3 -variables.cs: -# 3| [Class] test_variables -# 5| 5: [Method] f -# 5| -1: [TypeMention] Void -# 6| 4: [BlockStmt] {...} -# 7| 0: [LocalVariableDeclStmt] ... ...; -# 7| 0: [LocalVariableDeclExpr] Int32 x -# 7| 0: [TypeMention] int -# 7| 1: [LocalVariableDeclAndInitExpr] Int32 y = ... -# 7| -1: [TypeMention] int -# 7| 0: [LocalVariableAccess] access to local variable y -# 7| 1: [IntLiteral] 5 -# 8| 1: [ExprStmt] ...; -# 8| 0: [AssignExpr] ... = ... -# 8| 0: [LocalVariableAccess] access to local variable x -# 8| 1: [IntLiteral] 4 -# 9| 2: [ExprStmt] ...; -# 9| 0: [AssignExpr] ... = ... -# 9| 0: [LocalVariableAccess] access to local variable x -# 9| 1: [LocalVariableAccess] access to local variable y -# 10| 3: [LocalVariableDeclStmt] ... ...; -# 10| 0: [LocalVariableDeclAndInitExpr] Int32 z = ... -# 10| -1: [TypeMention] int -# 10| 0: [LocalVariableAccess] access to local variable z -# 10| 1: [LocalVariableAccess] access to local variable y diff --git a/csharp/ql/test/experimental/ir/ir/PrintAst.qlref b/csharp/ql/test/experimental/ir/ir/PrintAst.qlref deleted file mode 100644 index f867dd01f9f..00000000000 --- a/csharp/ql/test/experimental/ir/ir/PrintAst.qlref +++ /dev/null @@ -1 +0,0 @@ -shared/PrintAst.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/ir/ir/array.cs b/csharp/ql/test/experimental/ir/ir/array.cs deleted file mode 100644 index d53a828ff54..00000000000 --- a/csharp/ql/test/experimental/ir/ir/array.cs +++ /dev/null @@ -1,22 +0,0 @@ -public class ArrayTest { - public void one_dim_init_acc() - { - int[] one_dim = {100, 101, 102}; - one_dim[0] = 1000; - one_dim[1] = one_dim[0]; - one_dim[1] = 1003; - - int i = 0; - one_dim[i] = 0; - } - - public void twod_and_init_acc() - { - int[,] a = { {100, 101}, {102, 103} }; - int[,] b = new int[5, 5]; - int[,] c = new int[2, 2] { {100, 101}, {102, 103} }; - int[,] d = new int[,] { {100, 101}, {102, 103} }; - int[,] e = a; - e[1, 1] = -1; - } -} diff --git a/csharp/ql/test/experimental/ir/ir/assignop.cs b/csharp/ql/test/experimental/ir/ir/assignop.cs deleted file mode 100644 index 21fdfccbcf9..00000000000 --- a/csharp/ql/test/experimental/ir/ir/assignop.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; - -class AssignOp -{ - static void Main() - { - int a = 1; - int c = 1; - - c += a; - c -= a; - c *= a; - c /= a; - c %= a; - c <<= 2; - c >>= 2; - c &= 2; - c ^= 2; - c |= 2; - c >>>= 2; - } -} diff --git a/csharp/ql/test/experimental/ir/ir/casts.cs b/csharp/ql/test/experimental/ir/ir/casts.cs deleted file mode 100644 index cd885ce30f2..00000000000 --- a/csharp/ql/test/experimental/ir/ir/casts.cs +++ /dev/null @@ -1,17 +0,0 @@ -public class Casts_A -{ -} - -public class Casts_B : Casts_A -{ -} - -public class Casts -{ - public static void Main() - { - Casts_A Aobj = new Casts_A(); - Casts_B bobjCE = (Casts_B) Aobj; - Casts_B bobjAS = Aobj as Casts_B; - } -} diff --git a/csharp/ql/test/experimental/ir/ir/collections.cs b/csharp/ql/test/experimental/ir/ir/collections.cs deleted file mode 100644 index b8f6c56dd50..00000000000 --- a/csharp/ql/test/experimental/ir/ir/collections.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Collections.Generic; - -public class Collections -{ - class MyClass - { - public string a; - public string b; - } - - public static void Main() - { - var dict = new Dictionary() - { - { 0, new MyClass { a="Hello", b="World" } }, - { 1, new MyClass { a="Foo", b="Bar" } } - }; - } -} diff --git a/csharp/ql/test/experimental/ir/ir/constructor_init.cs b/csharp/ql/test/experimental/ir/ir/constructor_init.cs deleted file mode 100644 index 25d1c20660e..00000000000 --- a/csharp/ql/test/experimental/ir/ir/constructor_init.cs +++ /dev/null @@ -1,35 +0,0 @@ -public class BaseClass -{ - int num; - - public BaseClass() - { - } - - public BaseClass(int i) - { - num = i; - } -} - -public class DerivedClass : BaseClass -{ - public DerivedClass() : base() - { - } - - public DerivedClass(int i) : base(i) - { - } - - public DerivedClass(int i, int j): this(i) - { - } - - static void Main() - { - DerivedClass obj1 = new DerivedClass(); - DerivedClass obj2 = new DerivedClass(1); - DerivedClass obj3 = new DerivedClass(1, 2); - } -} diff --git a/csharp/ql/test/experimental/ir/ir/crement.cs b/csharp/ql/test/experimental/ir/ir/crement.cs deleted file mode 100644 index 857b2fd804d..00000000000 --- a/csharp/ql/test/experimental/ir/ir/crement.cs +++ /dev/null @@ -1,11 +0,0 @@ -class CrementOpsTest -{ - public static void Main() - { - int x = 10; - int a = x++; - int b = --x; - int c = ++x; - x = x--; - } -} diff --git a/csharp/ql/test/experimental/ir/ir/delegates.cs b/csharp/ql/test/experimental/ir/ir/delegates.cs deleted file mode 100644 index 5f9def1260a..00000000000 --- a/csharp/ql/test/experimental/ir/ir/delegates.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Collections.Generic; - -public class Delegates { - delegate int Del(int num); - - static int returns(int ret) - { - return ret; - } - - public static void Main() { - Del del1 = new Del(returns); - del1(5); - } -} diff --git a/csharp/ql/test/experimental/ir/ir/events.cs b/csharp/ql/test/experimental/ir/ir/events.cs deleted file mode 100644 index 7364b0069f9..00000000000 --- a/csharp/ql/test/experimental/ir/ir/events.cs +++ /dev/null @@ -1,35 +0,0 @@ -class Events -{ - public delegate string MyDel(string str); - public MyDel Inst; - - event MyDel MyEvent; - - public Events() - { - this.Inst = new MyDel(this.Fun); - } - - public void AddEvent() - { - this.MyEvent += this.Inst; - } - - public void RemoveEvent() - { - this.MyEvent -= this.Inst; - } - - public string Fun(string str) - { - return str; - } - - static void Main(string[] args) - { - Events obj = new Events(); - obj.AddEvent(); - string result = obj.MyEvent("string"); - obj.RemoveEvent(); - } -} diff --git a/csharp/ql/test/experimental/ir/ir/foreach.cs b/csharp/ql/test/experimental/ir/ir/foreach.cs deleted file mode 100644 index 2ddf2fa1b1d..00000000000 --- a/csharp/ql/test/experimental/ir/ir/foreach.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Collections.Generic; - -class ForEach { - public static void Main() { - int[] a_array = new int[] { 1, 2, 3, 4, 5, 6, 7 }; - - foreach(int items in a_array) - { - int x = items; - } - } -} diff --git a/csharp/ql/test/experimental/ir/ir/func_with_param_call.cs b/csharp/ql/test/experimental/ir/ir/func_with_param_call.cs deleted file mode 100644 index 7bf64c02482..00000000000 --- a/csharp/ql/test/experimental/ir/ir/func_with_param_call.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; - -public class test_call_with_param -{ - public static int f(int x, int y) - { - return x + y; - } - - public static int g() - { - return f(2, 3); - } -} diff --git a/csharp/ql/test/experimental/ir/ir/indexers.cs b/csharp/ql/test/experimental/ir/ir/indexers.cs deleted file mode 100644 index dfe9c5fa21e..00000000000 --- a/csharp/ql/test/experimental/ir/ir/indexers.cs +++ /dev/null @@ -1,26 +0,0 @@ -class Indexers -{ - public class MyClass - { - private string[] address = new string[2]; - public string this[int index] - { - get - { - return address[index]; - } - set - { - address[index] = value; - } - } - } - - public static void Main() - { - MyClass inst = new MyClass(); - inst[0] = "str1"; - inst[1] = "str1"; - inst[1] = inst[0]; - } -} diff --git a/csharp/ql/test/experimental/ir/ir/inheritance_polymorphism.cs b/csharp/ql/test/experimental/ir/ir/inheritance_polymorphism.cs deleted file mode 100644 index 37fad70eaec..00000000000 --- a/csharp/ql/test/experimental/ir/ir/inheritance_polymorphism.cs +++ /dev/null @@ -1,37 +0,0 @@ -public class A -{ - public virtual int function() - { - return 0; - } -} - -class B : A -{ -} - -class C : B -{ - public override int function() - { - return 1; - } -} - -class Program -{ - static void Main() - { - B objB = new B(); - objB.function(); - - // Check conversion works - A objA; - objA = objB; - objA.function(); - - A objC = new C(); - objC.function(); - } - -} diff --git a/csharp/ql/test/experimental/ir/ir/inoutref.cs b/csharp/ql/test/experimental/ir/ir/inoutref.cs deleted file mode 100644 index 604337da1de..00000000000 --- a/csharp/ql/test/experimental/ir/ir/inoutref.cs +++ /dev/null @@ -1,38 +0,0 @@ -class MyClass { - public int fld; -} - -struct MyStruct { - public int fld; -} - -class InOutRef -{ - static void set(ref MyClass o1, MyClass o2) - { - o1 = o2; - } - - static void F(ref int a, ref MyStruct b, in MyStruct b1, ref MyClass c, in MyClass c1) - { - b.fld = 0; - a = b.fld; - - c.fld = 10; - a = c.fld; - - b = b1; - - set(ref c, c1); - } - - static void Main() - { - int a = 0; - MyStruct b = new MyStruct(); - MyClass c = new MyClass(); - F(ref a, ref b, in b, ref c, in c); - - int x = b.fld; - } -} diff --git a/csharp/ql/test/experimental/ir/ir/isexpr.cs b/csharp/ql/test/experimental/ir/ir/isexpr.cs deleted file mode 100644 index d00a4f9d07f..00000000000 --- a/csharp/ql/test/experimental/ir/ir/isexpr.cs +++ /dev/null @@ -1,22 +0,0 @@ -public class Is_A -{ - public int x; -} - -public class IsExpr -{ - public static void Main() - { - Is_A obj = null; - - object o = obj; - if (o is Is_A tmp) - { - int res = tmp.x; - } - if (o is Is_A) - { - - } - } -} diff --git a/csharp/ql/test/experimental/ir/ir/jumps.cs b/csharp/ql/test/experimental/ir/ir/jumps.cs deleted file mode 100644 index 52b0ba9439e..00000000000 --- a/csharp/ql/test/experimental/ir/ir/jumps.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; - -class Jumps -{ - public static void Main() - { - for (int i = 1; i <= 10; i++) - { - if (i == 3) - continue; - else if (i == 5) - break; - Console.WriteLine("BreakAndContinue"); - } - - for (int i = 0 ; i < 10 ; ) - { - i++; - continue; - } - - int a = 0; - while (true) - { - a++; - if (a == 5) - continue; - if (a == 10) - break; - } - - for (int i = 1; i <= 10; i++) - { - if (i == 5) - goto done; - } - done: - Console.WriteLine("Done"); - } -} diff --git a/csharp/ql/test/experimental/ir/ir/lock.cs b/csharp/ql/test/experimental/ir/ir/lock.cs deleted file mode 100644 index affc9f3f981..00000000000 --- a/csharp/ql/test/experimental/ir/ir/lock.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; - -class LockTest -{ - static void A() - { - object @object = new object(); - lock (@object) - { - Console.WriteLine(@object.ToString()); - } - } -} diff --git a/csharp/ql/test/experimental/ir/ir/obj_creation.cs b/csharp/ql/test/experimental/ir/ir/obj_creation.cs deleted file mode 100644 index d045f44ed88..00000000000 --- a/csharp/ql/test/experimental/ir/ir/obj_creation.cs +++ /dev/null @@ -1,29 +0,0 @@ -public class ObjCreation -{ - public class MyClass - { - public int x; - - public MyClass() - { - } - - public MyClass(int _x) - { - x = _x; - } - } - - public static void SomeFun(MyClass x) - { - } - - public static void Main() - { - MyClass obj = new MyClass(100); - MyClass obj_initlist = new MyClass { x = 101 }; - int a = obj.x; - - SomeFun(new MyClass(100)); - } -} diff --git a/csharp/ql/test/experimental/ir/ir/options b/csharp/ql/test/experimental/ir/ir/options deleted file mode 100644 index c943386b4b8..00000000000 --- a/csharp/ql/test/experimental/ir/ir/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: /langversion:preview diff --git a/csharp/ql/test/experimental/ir/ir/pointers.cs b/csharp/ql/test/experimental/ir/ir/pointers.cs deleted file mode 100644 index c15cbc45176..00000000000 --- a/csharp/ql/test/experimental/ir/ir/pointers.cs +++ /dev/null @@ -1,42 +0,0 @@ -class Pointers -{ - unsafe static void addone(int[] arr) - { - int length = arr.Length; - fixed (int* b = arr) - { - int* p = b; - for(int i = 0; i < length; i++) - *p++ += 1; - } - } - - class MyClass - { - public int fld1; - public int fld2; - } - - struct MyStruct - { - public int fld; - } - - static void Main() { - MyClass o = new MyClass(); - MyStruct s = new MyStruct(); - unsafe - { - fixed(int* p = &o.fld1, q = &o.fld2) - { - *p = 0; - *q = 0; - MyStruct* r = &s; - (*r).fld = 0; - } - } - - int[] arr = {1, 2, 3}; - addone(arr); - } -} diff --git a/csharp/ql/test/experimental/ir/ir/prop.cs b/csharp/ql/test/experimental/ir/ir/prop.cs deleted file mode 100644 index a075703d875..00000000000 --- a/csharp/ql/test/experimental/ir/ir/prop.cs +++ /dev/null @@ -1,32 +0,0 @@ -class PropClass -{ - private static int prop; - - public int Prop - { - get - { - return func(); - } - - set - { - prop = value; - } - } - - private int func() - { - return 0; - } -} - -class Prog -{ - public static void Main() - { - PropClass obj = new PropClass(); - obj.Prop = 5; - int x = obj.Prop; - } -} diff --git a/csharp/ql/test/experimental/ir/ir/raw_ir.expected b/csharp/ql/test/experimental/ir/ir/raw_ir.expected deleted file mode 100644 index 2461e6602b9..00000000000 --- a/csharp/ql/test/experimental/ir/ir/raw_ir.expected +++ /dev/null @@ -1,2008 +0,0 @@ -array.cs: -# 2| System.Void ArrayTest.one_dim_init_acc() -# 2| Block 0 -# 2| v2_1(Void) = EnterFunction : -# 2| mu2_2() = AliasedDefinition : -# 2| r2_3(glval) = InitializeThis : -# 4| r4_1(glval) = VariableAddress[one_dim] : -# 4| mu4_2(Int32[]) = Uninitialized[one_dim] : &:r4_1 -# 4| r4_3(Int32) = Constant[0] : -# 4| r4_4(glval) = PointerAdd[4] : r4_1, r4_3 -# 4| r4_5(Int32) = Constant[100] : -# 4| mu4_6(Int32) = Store[?] : &:r4_4, r4_5 -# 4| r4_7(Int32) = Constant[1] : -# 4| r4_8(glval) = PointerAdd[4] : r4_1, r4_7 -# 4| r4_9(Int32) = Constant[101] : -# 4| mu4_10(Int32) = Store[?] : &:r4_8, r4_9 -# 4| r4_11(Int32) = Constant[2] : -# 4| r4_12(glval) = PointerAdd[4] : r4_1, r4_11 -# 4| r4_13(Int32) = Constant[102] : -# 4| mu4_14(Int32) = Store[?] : &:r4_12, r4_13 -# 5| r5_1(Int32) = Constant[1000] : -# 5| r5_2(glval) = VariableAddress[one_dim] : -# 5| r5_3(Int32[]) = ElementsAddress : r5_2 -# 5| r5_4(Int32) = Constant[0] : -# 5| r5_5(Int32[]) = PointerAdd[4] : r5_3, r5_4 -# 5| mu5_6(Int32) = Store[?] : &:r5_5, r5_1 -# 6| r6_1(glval) = VariableAddress[one_dim] : -# 6| r6_2(Int32[]) = ElementsAddress : r6_1 -# 6| r6_3(Int32) = Constant[0] : -# 6| r6_4(Int32[]) = PointerAdd[4] : r6_2, r6_3 -# 6| r6_5(Int32) = Load[?] : &:r6_4, ~m? -# 6| r6_6(glval) = VariableAddress[one_dim] : -# 6| r6_7(Int32[]) = ElementsAddress : r6_6 -# 6| r6_8(Int32) = Constant[1] : -# 6| r6_9(Int32[]) = PointerAdd[4] : r6_7, r6_8 -# 6| mu6_10(Int32) = Store[?] : &:r6_9, r6_5 -# 7| r7_1(Int32) = Constant[1003] : -# 7| r7_2(glval) = VariableAddress[one_dim] : -# 7| r7_3(Int32[]) = ElementsAddress : r7_2 -# 7| r7_4(Int32) = Constant[1] : -# 7| r7_5(Int32[]) = PointerAdd[4] : r7_3, r7_4 -# 7| mu7_6(Int32) = Store[?] : &:r7_5, r7_1 -# 9| r9_1(glval) = VariableAddress[i] : -# 9| r9_2(Int32) = Constant[0] : -# 9| mu9_3(Int32) = Store[i] : &:r9_1, r9_2 -# 10| r10_1(Int32) = Constant[0] : -# 10| r10_2(glval) = VariableAddress[one_dim] : -# 10| r10_3(Int32[]) = ElementsAddress : r10_2 -# 10| r10_4(glval) = VariableAddress[i] : -# 10| r10_5(Int32) = Load[i] : &:r10_4, ~m? -# 10| r10_6(Int32[]) = PointerAdd[4] : r10_3, r10_5 -# 10| mu10_7(Int32) = Store[?] : &:r10_6, r10_1 -# 2| v2_4(Void) = ReturnVoid : -# 2| v2_5(Void) = AliasedUse : ~m? -# 2| v2_6(Void) = ExitFunction : - -# 13| System.Void ArrayTest.twod_and_init_acc() -# 13| Block 0 -# 13| v13_1(Void) = EnterFunction : -# 13| mu13_2() = AliasedDefinition : -# 13| r13_3(glval) = InitializeThis : -# 15| r15_1(glval) = VariableAddress[a] : -# 15| mu15_2(Int32[,]) = Uninitialized[a] : &:r15_1 -# 15| r15_3(Int32) = Constant[0] : -# 15| r15_4(glval) = PointerAdd[8] : r15_1, r15_3 -# 15| r15_5(Int32) = Constant[0] : -# 15| r15_6(glval) = PointerAdd[4] : r15_4, r15_5 -# 15| r15_7(Int32) = Constant[100] : -# 15| mu15_8(Int32) = Store[?] : &:r15_6, r15_7 -# 15| r15_9(Int32) = Constant[1] : -# 15| r15_10(glval) = PointerAdd[4] : r15_4, r15_9 -# 15| r15_11(Int32) = Constant[101] : -# 15| mu15_12(Int32) = Store[?] : &:r15_10, r15_11 -# 15| r15_13(Int32) = Constant[1] : -# 15| r15_14(glval) = PointerAdd[8] : r15_1, r15_13 -# 15| r15_15(Int32) = Constant[0] : -# 15| r15_16(glval) = PointerAdd[4] : r15_14, r15_15 -# 15| r15_17(Int32) = Constant[102] : -# 15| mu15_18(Int32) = Store[?] : &:r15_16, r15_17 -# 15| r15_19(Int32) = Constant[1] : -# 15| r15_20(glval) = PointerAdd[4] : r15_14, r15_19 -# 15| r15_21(Int32) = Constant[103] : -# 15| mu15_22(Int32) = Store[?] : &:r15_20, r15_21 -# 16| r16_1(glval) = VariableAddress[b] : -# 16| mu16_2(Int32[,]) = Uninitialized[b] : &:r16_1 -# 17| r17_1(glval) = VariableAddress[c] : -# 17| mu17_2(Int32[,]) = Uninitialized[c] : &:r17_1 -# 17| r17_3(Int32) = Constant[0] : -# 17| r17_4(glval) = PointerAdd[8] : r17_1, r17_3 -# 17| r17_5(Int32) = Constant[0] : -# 17| r17_6(glval) = PointerAdd[4] : r17_4, r17_5 -# 17| r17_7(Int32) = Constant[100] : -# 17| mu17_8(Int32) = Store[?] : &:r17_6, r17_7 -# 17| r17_9(Int32) = Constant[1] : -# 17| r17_10(glval) = PointerAdd[4] : r17_4, r17_9 -# 17| r17_11(Int32) = Constant[101] : -# 17| mu17_12(Int32) = Store[?] : &:r17_10, r17_11 -# 17| r17_13(Int32) = Constant[1] : -# 17| r17_14(glval) = PointerAdd[8] : r17_1, r17_13 -# 17| r17_15(Int32) = Constant[0] : -# 17| r17_16(glval) = PointerAdd[4] : r17_14, r17_15 -# 17| r17_17(Int32) = Constant[102] : -# 17| mu17_18(Int32) = Store[?] : &:r17_16, r17_17 -# 17| r17_19(Int32) = Constant[1] : -# 17| r17_20(glval) = PointerAdd[4] : r17_14, r17_19 -# 17| r17_21(Int32) = Constant[103] : -# 17| mu17_22(Int32) = Store[?] : &:r17_20, r17_21 -# 18| r18_1(glval) = VariableAddress[d] : -# 18| mu18_2(Int32[,]) = Uninitialized[d] : &:r18_1 -# 18| r18_3(Int32) = Constant[0] : -# 18| r18_4(glval) = PointerAdd[8] : r18_1, r18_3 -# 18| r18_5(Int32) = Constant[0] : -# 18| r18_6(glval) = PointerAdd[4] : r18_4, r18_5 -# 18| r18_7(Int32) = Constant[100] : -# 18| mu18_8(Int32) = Store[?] : &:r18_6, r18_7 -# 18| r18_9(Int32) = Constant[1] : -# 18| r18_10(glval) = PointerAdd[4] : r18_4, r18_9 -# 18| r18_11(Int32) = Constant[101] : -# 18| mu18_12(Int32) = Store[?] : &:r18_10, r18_11 -# 18| r18_13(Int32) = Constant[1] : -# 18| r18_14(glval) = PointerAdd[8] : r18_1, r18_13 -# 18| r18_15(Int32) = Constant[0] : -# 18| r18_16(glval) = PointerAdd[4] : r18_14, r18_15 -# 18| r18_17(Int32) = Constant[102] : -# 18| mu18_18(Int32) = Store[?] : &:r18_16, r18_17 -# 18| r18_19(Int32) = Constant[1] : -# 18| r18_20(glval) = PointerAdd[4] : r18_14, r18_19 -# 18| r18_21(Int32) = Constant[103] : -# 18| mu18_22(Int32) = Store[?] : &:r18_20, r18_21 -# 19| r19_1(glval) = VariableAddress[e] : -# 19| r19_2(glval) = VariableAddress[a] : -# 19| r19_3(Int32[,]) = Load[a] : &:r19_2, ~m? -# 19| mu19_4(Int32[,]) = Store[e] : &:r19_1, r19_3 -# 20| r20_1(Int32) = Constant[-1] : -# 20| r20_2(glval) = VariableAddress[e] : -# 20| r20_3(Int32[,]) = ElementsAddress : r20_2 -# 20| r20_4(Int32) = Constant[1] : -# 20| r20_5(Int32[,]) = PointerAdd[4] : r20_3, r20_4 -# 20| r20_6(Int32[]) = ElementsAddress : r20_5 -# 20| r20_7(Int32) = Constant[1] : -# 20| r20_8(Int32[]) = PointerAdd[4] : r20_6, r20_7 -# 20| mu20_9(Int32) = Store[?] : &:r20_8, r20_1 -# 13| v13_4(Void) = ReturnVoid : -# 13| v13_5(Void) = AliasedUse : ~m? -# 13| v13_6(Void) = ExitFunction : - -assignop.cs: -# 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) = 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) = 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) = Mul : r12_4, r12_2 -# 12| mu12_6(Int32) = Store[c] : &:r12_3, r12_5 -# 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) = 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) = 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) = BitAnd : r17_3, r17_1 -# 17| mu17_5(Int32) = Store[c] : &:r17_2, r17_4 -# 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() -# 11| Block 0 -# 11| v11_1(Void) = EnterFunction : -# 11| mu11_2() = AliasedDefinition : -# 13| r13_1(glval) = VariableAddress[Aobj] : -# 13| r13_2(Casts_A) = NewObj : -# 13| r13_3() = FunctionAddress[Casts_A] : -# 13| v13_4(Void) = Call[Casts_A] : func:r13_3, this:r13_2 -# 13| mu13_5() = ^CallSideEffect : ~m? -# 13| mu13_6(Casts_A) = Store[Aobj] : &:r13_1, r13_2 -# 14| r14_1(glval) = VariableAddress[bobjCE] : -# 14| r14_2(glval) = VariableAddress[Aobj] : -# 14| r14_3(Casts_A) = Load[Aobj] : &:r14_2, ~m? -# 14| r14_4(Casts_B) = CheckedConvertOrThrow : r14_3 -# 14| mu14_5(Casts_B) = Store[bobjCE] : &:r14_1, r14_4 -# 15| r15_1(glval) = VariableAddress[bobjAS] : -# 15| r15_2(glval) = VariableAddress[Aobj] : -# 15| r15_3(Casts_A) = Load[Aobj] : &:r15_2, ~m? -# 15| r15_4(Casts_B) = CheckedConvertOrNull : r15_3 -# 15| mu15_5(Casts_B) = Store[bobjAS] : &:r15_1, r15_4 -# 11| v11_3(Void) = ReturnVoid : -# 11| v11_4(Void) = AliasedUse : ~m? -# 11| v11_5(Void) = ExitFunction : - -collections.cs: -# 11| System.Void Collections.Main() -# 11| Block 0 -# 11| v11_1(Void) = EnterFunction : -# 11| mu11_2() = AliasedDefinition : -# 13| r13_1(glval>) = VariableAddress[dict] : -# 13| r13_2(Dictionary) = NewObj : -# 13| r13_3() = FunctionAddress[Dictionary] : -# 13| v13_4(Void) = Call[Dictionary] : func:r13_3, this:r13_2 -# 13| mu13_5() = ^CallSideEffect : ~m? -# 15| r15_1() = FunctionAddress[Add] : -# 15| r15_2(Int32) = Constant[0] : -# 15| r15_3(MyClass) = NewObj : -# 15| r15_4() = FunctionAddress[MyClass] : -# 15| v15_5(Void) = Call[MyClass] : func:r15_4, this:r15_3 -# 15| mu15_6() = ^CallSideEffect : ~m? -# 15| r15_7(String) = StringConstant["Hello"] : -# 15| r15_8(glval) = FieldAddress[a] : r15_3 -# 15| mu15_9(String) = Store[?] : &:r15_8, r15_7 -# 15| r15_10(String) = StringConstant["World"] : -# 15| r15_11(glval) = FieldAddress[b] : r15_3 -# 15| mu15_12(String) = Store[?] : &:r15_11, r15_10 -# 15| v15_13(Void) = Call[Add] : func:r15_1, this:r13_2, 0:r15_2, 1:r15_3 -# 15| mu15_14() = ^CallSideEffect : ~m? -# 16| r16_1() = FunctionAddress[Add] : -# 16| r16_2(Int32) = Constant[1] : -# 16| r16_3(MyClass) = NewObj : -# 16| r16_4() = FunctionAddress[MyClass] : -# 16| v16_5(Void) = Call[MyClass] : func:r16_4, this:r16_3 -# 16| mu16_6() = ^CallSideEffect : ~m? -# 16| r16_7(String) = StringConstant["Foo"] : -# 16| r16_8(glval) = FieldAddress[a] : r16_3 -# 16| mu16_9(String) = Store[?] : &:r16_8, r16_7 -# 16| r16_10(String) = StringConstant["Bar"] : -# 16| r16_11(glval) = FieldAddress[b] : r16_3 -# 16| mu16_12(String) = Store[?] : &:r16_11, r16_10 -# 16| v16_13(Void) = Call[Add] : func:r16_1, this:r13_2, 0:r16_2, 1:r16_3 -# 16| mu16_14() = ^CallSideEffect : ~m? -# 13| mu13_6(Dictionary) = Store[dict] : &:r13_1, r13_2 -# 11| v11_3(Void) = ReturnVoid : -# 11| v11_4(Void) = AliasedUse : ~m? -# 11| v11_5(Void) = ExitFunction : - -constructor_init.cs: -# 5| System.Void BaseClass..ctor() -# 5| Block 0 -# 5| v5_1(Void) = EnterFunction : -# 5| mu5_2() = AliasedDefinition : -# 5| r5_3(glval) = InitializeThis : -# 5| r5_4(glval) = Convert[BaseClass : Object] : r5_3 -# 5| r5_5() = FunctionAddress[Object] : -# 5| v5_6(Void) = Call[Object] : func:r5_5, this:r5_4 -# 5| mu5_7() = ^CallSideEffect : ~m? -# 6| v6_1(Void) = NoOp : -# 5| v5_8(Void) = ReturnVoid : -# 5| v5_9(Void) = AliasedUse : ~m? -# 5| v5_10(Void) = ExitFunction : - -# 9| System.Void BaseClass..ctor(System.Int32) -# 9| Block 0 -# 9| v9_1(Void) = EnterFunction : -# 9| mu9_2() = AliasedDefinition : -# 9| r9_3(glval) = InitializeThis : -# 9| r9_4(glval) = VariableAddress[i] : -# 9| mu9_5(Int32) = InitializeParameter[i] : &:r9_4 -# 9| r9_6(glval) = Convert[BaseClass : Object] : r9_3 -# 9| r9_7() = FunctionAddress[Object] : -# 9| v9_8(Void) = Call[Object] : func:r9_7, this:r9_6 -# 9| mu9_9() = ^CallSideEffect : ~m? -# 11| r11_1(glval) = VariableAddress[i] : -# 11| r11_2(Int32) = Load[i] : &:r11_1, ~m? -# 11| r11_3(BaseClass) = CopyValue : r9_3 -# 11| r11_4(glval) = FieldAddress[num] : r11_3 -# 11| mu11_5(Int32) = Store[?] : &:r11_4, r11_2 -# 9| v9_10(Void) = ReturnVoid : -# 9| v9_11(Void) = AliasedUse : ~m? -# 9| v9_12(Void) = ExitFunction : - -# 17| System.Void DerivedClass..ctor() -# 17| Block 0 -# 17| v17_1(Void) = EnterFunction : -# 17| mu17_2() = AliasedDefinition : -# 17| r17_3(glval) = InitializeThis : -# 17| r17_4(glval) = Convert[DerivedClass : BaseClass] : r17_3 -# 17| r17_5() = FunctionAddress[BaseClass] : -# 17| v17_6(Void) = Call[BaseClass] : func:r17_5, this:r17_4 -# 17| mu17_7() = ^CallSideEffect : ~m? -# 18| v18_1(Void) = NoOp : -# 17| v17_8(Void) = ReturnVoid : -# 17| v17_9(Void) = AliasedUse : ~m? -# 17| v17_10(Void) = ExitFunction : - -# 21| System.Void DerivedClass..ctor(System.Int32) -# 21| Block 0 -# 21| v21_1(Void) = EnterFunction : -# 21| mu21_2() = AliasedDefinition : -# 21| r21_3(glval) = InitializeThis : -# 21| r21_4(glval) = VariableAddress[i] : -# 21| mu21_5(Int32) = InitializeParameter[i] : &:r21_4 -# 21| r21_6(glval) = Convert[DerivedClass : BaseClass] : r21_3 -# 21| r21_7() = FunctionAddress[BaseClass] : -# 21| r21_8(glval) = VariableAddress[i] : -# 21| r21_9(Int32) = Load[i] : &:r21_8, ~m? -# 21| v21_10(Void) = Call[BaseClass] : func:r21_7, this:r21_6, 0:r21_9 -# 21| mu21_11() = ^CallSideEffect : ~m? -# 22| v22_1(Void) = NoOp : -# 21| v21_12(Void) = ReturnVoid : -# 21| v21_13(Void) = AliasedUse : ~m? -# 21| v21_14(Void) = ExitFunction : - -# 25| System.Void DerivedClass..ctor(System.Int32,System.Int32) -# 25| Block 0 -# 25| v25_1(Void) = EnterFunction : -# 25| mu25_2() = AliasedDefinition : -# 25| r25_3(glval) = InitializeThis : -# 25| r25_4(glval) = VariableAddress[i] : -# 25| mu25_5(Int32) = InitializeParameter[i] : &:r25_4 -# 25| r25_6(glval) = VariableAddress[j] : -# 25| mu25_7(Int32) = InitializeParameter[j] : &:r25_6 -# 25| r25_8() = FunctionAddress[DerivedClass] : -# 25| r25_9(glval) = VariableAddress[i] : -# 25| r25_10(Int32) = Load[i] : &:r25_9, ~m? -# 25| v25_11(Void) = Call[DerivedClass] : func:r25_8, this:r25_3, 0:r25_10 -# 25| mu25_12() = ^CallSideEffect : ~m? -# 26| v26_1(Void) = NoOp : -# 25| v25_13(Void) = ReturnVoid : -# 25| v25_14(Void) = AliasedUse : ~m? -# 25| v25_15(Void) = ExitFunction : - -# 29| System.Void DerivedClass.Main() -# 29| Block 0 -# 29| v29_1(Void) = EnterFunction : -# 29| mu29_2() = AliasedDefinition : -# 31| r31_1(glval) = VariableAddress[obj1] : -# 31| r31_2(DerivedClass) = NewObj : -# 31| r31_3() = FunctionAddress[DerivedClass] : -# 31| v31_4(Void) = Call[DerivedClass] : func:r31_3, this:r31_2 -# 31| mu31_5() = ^CallSideEffect : ~m? -# 31| mu31_6(DerivedClass) = Store[obj1] : &:r31_1, r31_2 -# 32| r32_1(glval) = VariableAddress[obj2] : -# 32| r32_2(DerivedClass) = NewObj : -# 32| r32_3() = FunctionAddress[DerivedClass] : -# 32| r32_4(Int32) = Constant[1] : -# 32| v32_5(Void) = Call[DerivedClass] : func:r32_3, this:r32_2, 0:r32_4 -# 32| mu32_6() = ^CallSideEffect : ~m? -# 32| mu32_7(DerivedClass) = Store[obj2] : &:r32_1, r32_2 -# 33| r33_1(glval) = VariableAddress[obj3] : -# 33| r33_2(DerivedClass) = NewObj : -# 33| r33_3() = FunctionAddress[DerivedClass] : -# 33| r33_4(Int32) = Constant[1] : -# 33| r33_5(Int32) = Constant[2] : -# 33| v33_6(Void) = Call[DerivedClass] : func:r33_3, this:r33_2, 0:r33_4, 1:r33_5 -# 33| mu33_7() = ^CallSideEffect : ~m? -# 33| mu33_8(DerivedClass) = Store[obj3] : &:r33_1, r33_2 -# 29| v29_3(Void) = ReturnVoid : -# 29| v29_4(Void) = AliasedUse : ~m? -# 29| v29_5(Void) = ExitFunction : - -crement.cs: -# 3| System.Void CrementOpsTest.Main() -# 3| Block 0 -# 3| v3_1(Void) = EnterFunction : -# 3| mu3_2() = AliasedDefinition : -# 5| r5_1(glval) = VariableAddress[x] : -# 5| r5_2(Int32) = Constant[10] : -# 5| mu5_3(Int32) = Store[x] : &:r5_1, r5_2 -# 6| r6_1(glval) = VariableAddress[a] : -# 6| r6_2(glval) = VariableAddress[x] : -# 6| r6_3(Int32) = Load[x] : &:r6_2, ~m? -# 6| r6_4(Int32) = Constant[1] : -# 6| r6_5(Int32) = Add : r6_3, r6_4 -# 6| mu6_6(Int32) = Store[x] : &:r6_2, r6_5 -# 6| mu6_7(Int32) = Store[a] : &:r6_1, r6_3 -# 7| r7_1(glval) = VariableAddress[b] : -# 7| r7_2(glval) = VariableAddress[x] : -# 7| r7_3(Int32) = Load[x] : &:r7_2, ~m? -# 7| r7_4(Int32) = Constant[1] : -# 7| r7_5(Int32) = Sub : r7_3, r7_4 -# 7| mu7_6(Int32) = Store[x] : &:r7_2, r7_5 -# 7| mu7_7(Int32) = Store[b] : &:r7_1, r7_5 -# 8| r8_1(glval) = VariableAddress[c] : -# 8| r8_2(glval) = VariableAddress[x] : -# 8| r8_3(Int32) = Load[x] : &:r8_2, ~m? -# 8| r8_4(Int32) = Constant[1] : -# 8| r8_5(Int32) = Add : r8_3, r8_4 -# 8| mu8_6(Int32) = Store[x] : &:r8_2, r8_5 -# 8| mu8_7(Int32) = Store[c] : &:r8_1, r8_5 -# 9| r9_1(glval) = VariableAddress[x] : -# 9| r9_2(Int32) = Load[x] : &:r9_1, ~m? -# 9| r9_3(Int32) = Constant[1] : -# 9| r9_4(Int32) = Sub : r9_2, r9_3 -# 9| mu9_5(Int32) = Store[x] : &:r9_1, r9_4 -# 9| r9_6(glval) = VariableAddress[x] : -# 9| mu9_7(Int32) = Store[x] : &:r9_6, r9_2 -# 3| v3_3(Void) = ReturnVoid : -# 3| v3_4(Void) = AliasedUse : ~m? -# 3| v3_5(Void) = ExitFunction : - -delegates.cs: -# 6| System.Int32 Delegates.returns(System.Int32) -# 6| Block 0 -# 6| v6_1(Void) = EnterFunction : -# 6| mu6_2() = AliasedDefinition : -# 6| r6_3(glval) = VariableAddress[ret] : -# 6| mu6_4(Int32) = InitializeParameter[ret] : &:r6_3 -# 8| r8_1(glval) = VariableAddress[#return] : -# 8| r8_2(glval) = VariableAddress[ret] : -# 8| r8_3(Int32) = Load[ret] : &:r8_2, ~m? -# 8| mu8_4(Int32) = Store[#return] : &:r8_1, r8_3 -# 6| r6_5(glval) = VariableAddress[#return] : -# 6| v6_6(Void) = ReturnValue : &:r6_5, ~m? -# 6| v6_7(Void) = AliasedUse : ~m? -# 6| v6_8(Void) = ExitFunction : - -# 11| System.Void Delegates.Main() -# 11| Block 0 -# 11| v11_1(Void) = EnterFunction : -# 11| mu11_2() = AliasedDefinition : -# 12| r12_1(glval) = VariableAddress[del1] : -# 12| r12_2(Del) = NewObj : -# 12| r12_3() = FunctionAddress[Del] : -# 12| r12_4(glval) = FunctionAddress[returns] : -# 12| v12_5(Void) = Call[Del] : func:r12_3, this:r12_2, 0:r12_4 -# 12| mu12_6() = ^CallSideEffect : ~m? -# 12| mu12_7(Del) = Store[del1] : &:r12_1, r12_2 -# 13| r13_1(glval) = VariableAddress[del1] : -# 13| r13_2(Del) = Load[del1] : &:r13_1, ~m? -# 13| r13_3() = FunctionAddress[Invoke] : -# 13| r13_4(Int32) = Constant[5] : -# 13| v13_5(Void) = Call[Invoke] : func:r13_3, this:r13_2, 0:r13_4 -# 13| mu13_6() = ^CallSideEffect : ~m? -# 11| v11_3(Void) = ReturnVoid : -# 11| v11_4(Void) = AliasedUse : ~m? -# 11| v11_5(Void) = ExitFunction : - -events.cs: -# 8| System.Void Events..ctor() -# 8| Block 0 -# 8| v8_1(Void) = EnterFunction : -# 8| mu8_2() = AliasedDefinition : -# 8| r8_3(glval) = InitializeThis : -# 8| r8_4(glval) = Convert[Events : Object] : r8_3 -# 8| r8_5() = FunctionAddress[Object] : -# 8| v8_6(Void) = Call[Object] : func:r8_5, this:r8_4 -# 8| mu8_7() = ^CallSideEffect : ~m? -# 10| r10_1(MyDel) = NewObj : -# 10| r10_2() = FunctionAddress[MyDel] : -# 10| r10_3(glval) = FunctionAddress[Fun] : -# 10| v10_4(Void) = Call[MyDel] : func:r10_2, this:r10_1, 0:r10_3 -# 10| mu10_5() = ^CallSideEffect : ~m? -# 10| r10_6(Events) = CopyValue : r8_3 -# 10| r10_7(glval) = FieldAddress[Inst] : r10_6 -# 10| mu10_8(MyDel) = Store[?] : &:r10_7, r10_1 -# 8| v8_8(Void) = ReturnVoid : -# 8| v8_9(Void) = AliasedUse : ~m? -# 8| v8_10(Void) = ExitFunction : - -# 13| System.Void Events.AddEvent() -# 13| Block 0 -# 13| v13_1(Void) = EnterFunction : -# 13| mu13_2() = AliasedDefinition : -# 13| r13_3(glval) = InitializeThis : -# 15| r15_1(Events) = CopyValue : r13_3 -# 15| r15_2() = FunctionAddress[add_MyEvent] : -# 15| r15_3(Events) = CopyValue : r13_3 -# 15| r15_4(glval) = FieldAddress[Inst] : r15_3 -# 15| r15_5(MyDel) = Load[?] : &:r15_4, ~m? -# 15| v15_6(Void) = Call[add_MyEvent] : func:r15_2, this:r15_1, 0:r15_5 -# 15| mu15_7() = ^CallSideEffect : ~m? -# 13| v13_4(Void) = ReturnVoid : -# 13| v13_5(Void) = AliasedUse : ~m? -# 13| v13_6(Void) = ExitFunction : - -# 18| System.Void Events.RemoveEvent() -# 18| Block 0 -# 18| v18_1(Void) = EnterFunction : -# 18| mu18_2() = AliasedDefinition : -# 18| r18_3(glval) = InitializeThis : -# 20| r20_1(Events) = CopyValue : r18_3 -# 20| r20_2() = FunctionAddress[remove_MyEvent] : -# 20| r20_3(Events) = CopyValue : r18_3 -# 20| r20_4(glval) = FieldAddress[Inst] : r20_3 -# 20| r20_5(MyDel) = Load[?] : &:r20_4, ~m? -# 20| v20_6(Void) = Call[remove_MyEvent] : func:r20_2, this:r20_1, 0:r20_5 -# 20| mu20_7() = ^CallSideEffect : ~m? -# 18| v18_4(Void) = ReturnVoid : -# 18| v18_5(Void) = AliasedUse : ~m? -# 18| v18_6(Void) = ExitFunction : - -# 23| System.String Events.Fun(System.String) -# 23| Block 0 -# 23| v23_1(Void) = EnterFunction : -# 23| mu23_2() = AliasedDefinition : -# 23| r23_3(glval) = InitializeThis : -# 23| r23_4(glval) = VariableAddress[str] : -# 23| mu23_5(String) = InitializeParameter[str] : &:r23_4 -# 25| r25_1(glval) = VariableAddress[#return] : -# 25| r25_2(glval) = VariableAddress[str] : -# 25| r25_3(String) = Load[str] : &:r25_2, ~m? -# 25| mu25_4(String) = Store[#return] : &:r25_1, r25_3 -# 23| r23_6(glval) = VariableAddress[#return] : -# 23| v23_7(Void) = ReturnValue : &:r23_6, ~m? -# 23| v23_8(Void) = AliasedUse : ~m? -# 23| v23_9(Void) = ExitFunction : - -# 28| System.Void Events.Main(System.String[]) -# 28| Block 0 -# 28| v28_1(Void) = EnterFunction : -# 28| mu28_2() = AliasedDefinition : -# 28| r28_3(glval) = VariableAddress[args] : -# 28| mu28_4(String[]) = InitializeParameter[args] : &:r28_3 -# 30| r30_1(glval) = VariableAddress[obj] : -# 30| r30_2(Events) = NewObj : -# 30| r30_3() = FunctionAddress[Events] : -# 30| v30_4(Void) = Call[Events] : func:r30_3, this:r30_2 -# 30| mu30_5() = ^CallSideEffect : ~m? -# 30| mu30_6(Events) = Store[obj] : &:r30_1, r30_2 -# 31| r31_1(glval) = VariableAddress[obj] : -# 31| r31_2(Events) = Load[obj] : &:r31_1, ~m? -# 31| r31_3() = FunctionAddress[AddEvent] : -# 31| v31_4(Void) = Call[AddEvent] : func:r31_3, this:r31_2 -# 31| mu31_5() = ^CallSideEffect : ~m? -# 32| r32_1(glval) = VariableAddress[result] : -# 32| r32_2(glval) = VariableAddress[obj] : -# 32| r32_3(Events) = Load[obj] : &:r32_2, ~m? -# 32| r32_4() = FunctionAddress[Invoke] : -# 32| r32_5(String) = StringConstant["string"] : -# 32| v32_6(Void) = Call[Invoke] : func:r32_4, this:r32_3, 0:r32_5 -# 32| mu32_7() = ^CallSideEffect : ~m? -# 32| mu32_8(String) = Store[result] : &:r32_1, v32_6 -# 33| r33_1(glval) = VariableAddress[obj] : -# 33| r33_2(Events) = Load[obj] : &:r33_1, ~m? -# 33| r33_3() = FunctionAddress[RemoveEvent] : -# 33| v33_4(Void) = Call[RemoveEvent] : func:r33_3, this:r33_2 -# 33| mu33_5() = ^CallSideEffect : ~m? -# 28| v28_5(Void) = ReturnVoid : -# 28| v28_6(Void) = AliasedUse : ~m? -# 28| v28_7(Void) = ExitFunction : - -foreach.cs: -# 4| System.Void ForEach.Main() -# 4| Block 0 -# 4| v4_1(Void) = EnterFunction : -# 4| mu4_2() = AliasedDefinition : -# 5| r5_1(glval) = VariableAddress[a_array] : -# 5| mu5_2(Int32[]) = Uninitialized[a_array] : &:r5_1 -# 5| r5_3(Int32) = Constant[0] : -# 5| r5_4(glval) = PointerAdd[4] : r5_1, r5_3 -# 5| r5_5(Int32) = Constant[1] : -# 5| mu5_6(Int32) = Store[?] : &:r5_4, r5_5 -# 5| r5_7(Int32) = Constant[1] : -# 5| r5_8(glval) = PointerAdd[4] : r5_1, r5_7 -# 5| r5_9(Int32) = Constant[2] : -# 5| mu5_10(Int32) = Store[?] : &:r5_8, r5_9 -# 5| r5_11(Int32) = Constant[2] : -# 5| r5_12(glval) = PointerAdd[4] : r5_1, r5_11 -# 5| r5_13(Int32) = Constant[3] : -# 5| mu5_14(Int32) = Store[?] : &:r5_12, r5_13 -# 5| r5_15(Int32) = Constant[3] : -# 5| r5_16(glval) = PointerAdd[4] : r5_1, r5_15 -# 5| r5_17(Int32) = Constant[4] : -# 5| mu5_18(Int32) = Store[?] : &:r5_16, r5_17 -# 5| r5_19(Int32) = Constant[4] : -# 5| r5_20(glval) = PointerAdd[4] : r5_1, r5_19 -# 5| r5_21(Int32) = Constant[5] : -# 5| mu5_22(Int32) = Store[?] : &:r5_20, r5_21 -# 5| r5_23(Int32) = Constant[5] : -# 5| r5_24(glval) = PointerAdd[4] : r5_1, r5_23 -# 5| r5_25(Int32) = Constant[6] : -# 5| mu5_26(Int32) = Store[?] : &:r5_24, r5_25 -# 5| r5_27(Int32) = Constant[6] : -# 5| r5_28(glval) = PointerAdd[4] : r5_1, r5_27 -# 5| r5_29(Int32) = Constant[7] : -# 5| mu5_30(Int32) = Store[?] : &:r5_28, r5_29 -# 7| r7_1(glval) = VariableAddress[#temp7:9] : -# 7| r7_2(glval) = VariableAddress[a_array] : -# 7| r7_3(Int32[]) = Load[a_array] : &:r7_2, ~m? -# 7| r7_4() = FunctionAddress[GetEnumerator] : -# 7| r7_5(IEnumerator) = Call[GetEnumerator] : func:r7_4, this:r7_3 -# 7| mu7_6() = ^CallSideEffect : ~m? -# 7| mu7_7(IEnumerator) = Store[#temp7:9] : &:r7_1, r7_5 -#-----| Goto -> Block 1 - -# 7| Block 1 -# 7| r7_8(glval) = VariableAddress[#temp7:9] : -# 7| r7_9(IEnumerator) = Load[#temp7:9] : &:r7_8, ~m? -# 7| r7_10() = FunctionAddress[MoveNext] : -# 7| r7_11(Boolean) = Call[MoveNext] : func:r7_10, this:r7_9 -# 7| mu7_12() = ^CallSideEffect : ~m? -# 7| v7_13(Void) = ConditionalBranch : r7_11 -#-----| False -> Block 3 -#-----| True -> Block 2 - -# 7| Block 2 -# 7| r7_14(glval) = VariableAddress[items] : -# 7| r7_15(glval) = VariableAddress[#temp7:9] : -# 7| r7_16(IEnumerator) = Load[#temp7:9] : &:r7_15, ~m? -# 7| r7_17() = FunctionAddress[get_Current] : -# 7| r7_18(Int32) = Call[get_Current] : func:r7_17, this:r7_16 -# 7| mu7_19() = ^CallSideEffect : ~m? -# 7| mu7_20(Int32) = Store[items] : &:r7_14, r7_18 -# 9| r9_1(glval) = VariableAddress[x] : -# 9| r9_2(glval) = VariableAddress[items] : -# 9| r9_3(Int32) = Load[items] : &:r9_2, ~m? -# 9| mu9_4(Int32) = Store[x] : &:r9_1, r9_3 -#-----| Goto (back edge) -> Block 1 - -# 7| Block 3 -# 7| r7_21(glval) = VariableAddress[#temp7:9] : -# 7| r7_22(IEnumerator) = Load[#temp7:9] : &:r7_21, ~m? -# 7| r7_23() = FunctionAddress[Dispose] : -# 7| v7_24(Void) = Call[Dispose] : func:r7_23, this:r7_22 -# 7| mu7_25() = ^CallSideEffect : ~m? -# 4| v4_3(Void) = ReturnVoid : -# 4| v4_4(Void) = AliasedUse : ~m? -# 4| v4_5(Void) = ExitFunction : - -func_with_param_call.cs: -# 5| System.Int32 test_call_with_param.f(System.Int32,System.Int32) -# 5| Block 0 -# 5| v5_1(Void) = EnterFunction : -# 5| mu5_2() = AliasedDefinition : -# 5| r5_3(glval) = VariableAddress[x] : -# 5| mu5_4(Int32) = InitializeParameter[x] : &:r5_3 -# 5| r5_5(glval) = VariableAddress[y] : -# 5| mu5_6(Int32) = InitializeParameter[y] : &:r5_5 -# 7| r7_1(glval) = VariableAddress[#return] : -# 7| r7_2(glval) = VariableAddress[x] : -# 7| r7_3(Int32) = Load[x] : &:r7_2, ~m? -# 7| r7_4(glval) = VariableAddress[y] : -# 7| r7_5(Int32) = Load[y] : &:r7_4, ~m? -# 7| r7_6(Int32) = Add : r7_3, r7_5 -# 7| mu7_7(Int32) = Store[#return] : &:r7_1, r7_6 -# 5| r5_7(glval) = VariableAddress[#return] : -# 5| v5_8(Void) = ReturnValue : &:r5_7, ~m? -# 5| v5_9(Void) = AliasedUse : ~m? -# 5| v5_10(Void) = ExitFunction : - -# 10| System.Int32 test_call_with_param.g() -# 10| Block 0 -# 10| v10_1(Void) = EnterFunction : -# 10| mu10_2() = AliasedDefinition : -# 12| r12_1(glval) = VariableAddress[#return] : -# 12| r12_2() = FunctionAddress[f] : -# 12| r12_3(Int32) = Constant[2] : -# 12| r12_4(Int32) = Constant[3] : -# 12| r12_5(Int32) = Call[f] : func:r12_2, 0:r12_3, 1:r12_4 -# 12| mu12_6() = ^CallSideEffect : ~m? -# 12| mu12_7(Int32) = Store[#return] : &:r12_1, r12_5 -# 10| r10_3(glval) = VariableAddress[#return] : -# 10| v10_4(Void) = ReturnValue : &:r10_3, ~m? -# 10| v10_5(Void) = AliasedUse : ~m? -# 10| v10_6(Void) = ExitFunction : - -indexers.cs: -# 8| System.String Indexers.MyClass.get_Item(System.Int32) -# 8| Block 0 -# 8| v8_1(Void) = EnterFunction : -# 8| mu8_2() = AliasedDefinition : -# 8| r8_3(glval) = InitializeThis : -# 6| r6_1(glval) = VariableAddress[index] : -# 6| mu6_2(Int32) = InitializeParameter[index] : &:r6_1 -# 10| r10_1(glval) = VariableAddress[#return] : -# 10| r10_2(MyClass) = CopyValue : r8_3 -# 10| r10_3(glval) = FieldAddress[address] : r10_2 -# 10| r10_4(String[]) = ElementsAddress : r10_3 -# 10| r10_5(glval) = VariableAddress[index] : -# 10| r10_6(Int32) = Load[index] : &:r10_5, ~m? -# 10| r10_7(String[]) = PointerAdd[8] : r10_4, r10_6 -# 10| r10_8(String) = Load[?] : &:r10_7, ~m? -# 10| mu10_9(String) = Store[#return] : &:r10_1, r10_8 -# 8| r8_4(glval) = VariableAddress[#return] : -# 8| v8_5(Void) = ReturnValue : &:r8_4, ~m? -# 8| v8_6(Void) = AliasedUse : ~m? -# 8| v8_7(Void) = ExitFunction : - -# 12| System.Void Indexers.MyClass.set_Item(System.Int32,System.String) -# 12| Block 0 -# 12| v12_1(Void) = EnterFunction : -# 12| mu12_2() = AliasedDefinition : -# 12| r12_3(glval) = InitializeThis : -# 6| r6_1(glval) = VariableAddress[index] : -# 6| mu6_2(Int32) = InitializeParameter[index] : &:r6_1 -# 12| r12_4(glval) = VariableAddress[value] : -# 12| mu12_5(String) = InitializeParameter[value] : &:r12_4 -# 14| r14_1(glval) = VariableAddress[value] : -# 14| r14_2(String) = Load[value] : &:r14_1, ~m? -# 14| r14_3(MyClass) = CopyValue : r12_3 -# 14| r14_4(glval) = FieldAddress[address] : r14_3 -# 14| r14_5(String[]) = ElementsAddress : r14_4 -# 14| r14_6(glval) = VariableAddress[index] : -# 14| r14_7(Int32) = Load[index] : &:r14_6, ~m? -# 14| r14_8(String[]) = PointerAdd[8] : r14_5, r14_7 -# 14| mu14_9(String) = Store[?] : &:r14_8, r14_2 -# 12| v12_6(Void) = ReturnVoid : -# 12| v12_7(Void) = AliasedUse : ~m? -# 12| v12_8(Void) = ExitFunction : - -# 19| System.Void Indexers.Main() -# 19| Block 0 -# 19| v19_1(Void) = EnterFunction : -# 19| mu19_2() = AliasedDefinition : -# 21| r21_1(glval) = VariableAddress[inst] : -# 21| r21_2(MyClass) = NewObj : -# 21| r21_3() = FunctionAddress[MyClass] : -# 21| v21_4(Void) = Call[MyClass] : func:r21_3, this:r21_2 -# 21| mu21_5() = ^CallSideEffect : ~m? -# 21| mu21_6(MyClass) = Store[inst] : &:r21_1, r21_2 -# 22| r22_1(glval) = VariableAddress[inst] : -# 22| r22_2(MyClass) = Load[inst] : &:r22_1, ~m? -# 22| r22_3() = FunctionAddress[set_Item] : -# 22| r22_4(Int32) = Constant[0] : -# 22| r22_5(String) = StringConstant["str1"] : -# 22| v22_6(Void) = Call[set_Item] : func:r22_3, this:r22_2, 0:r22_4, 1:r22_5 -# 22| mu22_7() = ^CallSideEffect : ~m? -# 23| r23_1(glval) = VariableAddress[inst] : -# 23| r23_2(MyClass) = Load[inst] : &:r23_1, ~m? -# 23| r23_3() = FunctionAddress[set_Item] : -# 23| r23_4(Int32) = Constant[1] : -# 23| r23_5(String) = StringConstant["str1"] : -# 23| v23_6(Void) = Call[set_Item] : func:r23_3, this:r23_2, 0:r23_4, 1:r23_5 -# 23| mu23_7() = ^CallSideEffect : ~m? -# 24| r24_1(glval) = VariableAddress[inst] : -# 24| r24_2(MyClass) = Load[inst] : &:r24_1, ~m? -# 24| r24_3() = FunctionAddress[set_Item] : -# 24| r24_4(Int32) = Constant[1] : -# 24| r24_5(glval) = VariableAddress[inst] : -# 24| r24_6(MyClass) = Load[inst] : &:r24_5, ~m? -# 24| r24_7() = FunctionAddress[get_Item] : -# 24| r24_8(Int32) = Constant[0] : -# 24| r24_9(String) = Call[get_Item] : func:r24_7, this:r24_6, 0:r24_8 -# 24| mu24_10() = ^CallSideEffect : ~m? -# 24| v24_11(Void) = Call[set_Item] : func:r24_3, this:r24_2, 0:r24_4, 1:r24_9 -# 24| mu24_12() = ^CallSideEffect : ~m? -# 19| v19_3(Void) = ReturnVoid : -# 19| v19_4(Void) = AliasedUse : ~m? -# 19| v19_5(Void) = ExitFunction : - -inheritance_polymorphism.cs: -# 3| System.Int32 A.function() -# 3| Block 0 -# 3| v3_1(Void) = EnterFunction : -# 3| mu3_2() = AliasedDefinition : -# 3| r3_3(glval) = InitializeThis : -# 5| r5_1(glval) = VariableAddress[#return] : -# 5| r5_2(Int32) = Constant[0] : -# 5| mu5_3(Int32) = Store[#return] : &:r5_1, r5_2 -# 3| r3_4(glval) = VariableAddress[#return] : -# 3| v3_5(Void) = ReturnValue : &:r3_4, ~m? -# 3| v3_6(Void) = AliasedUse : ~m? -# 3| v3_7(Void) = ExitFunction : - -# 15| System.Int32 C.function() -# 15| Block 0 -# 15| v15_1(Void) = EnterFunction : -# 15| mu15_2() = AliasedDefinition : -# 15| r15_3(glval) = InitializeThis : -# 17| r17_1(glval) = VariableAddress[#return] : -# 17| r17_2(Int32) = Constant[1] : -# 17| mu17_3(Int32) = Store[#return] : &:r17_1, r17_2 -# 15| r15_4(glval) = VariableAddress[#return] : -# 15| v15_5(Void) = ReturnValue : &:r15_4, ~m? -# 15| v15_6(Void) = AliasedUse : ~m? -# 15| v15_7(Void) = ExitFunction : - -# 23| System.Void Program.Main() -# 23| Block 0 -# 23| v23_1(Void) = EnterFunction : -# 23| mu23_2() = AliasedDefinition : -# 25| r25_1(glval) = VariableAddress[objB] : -# 25| r25_2(B) = NewObj : -# 25| r25_3() = FunctionAddress[B] : -# 25| v25_4(Void) = Call[B] : func:r25_3, this:r25_2 -# 25| mu25_5() = ^CallSideEffect : ~m? -# 25| mu25_6(B) = Store[objB] : &:r25_1, r25_2 -# 26| r26_1(glval) = VariableAddress[objB] : -# 26| r26_2(B) = Load[objB] : &:r26_1, ~m? -# 26| r26_3() = FunctionAddress[function] : -# 26| r26_4(Int32) = Call[function] : func:r26_3, this:r26_2 -# 26| mu26_5() = ^CallSideEffect : ~m? -# 29| r29_1(glval) = VariableAddress[objA] : -# 29| mu29_2(A) = Uninitialized[objA] : &:r29_1 -# 30| r30_1(glval) = VariableAddress[objB] : -# 30| r30_2(B) = Load[objB] : &:r30_1, ~m? -# 30| r30_3(A) = Convert : r30_2 -# 30| r30_4(glval) = VariableAddress[objA] : -# 30| mu30_5(A) = Store[objA] : &:r30_4, r30_3 -# 31| r31_1(glval) = VariableAddress[objA] : -# 31| r31_2(A) = Load[objA] : &:r31_1, ~m? -# 31| r31_3() = FunctionAddress[function] : -# 31| r31_4(Int32) = Call[function] : func:r31_3, this:r31_2 -# 31| mu31_5() = ^CallSideEffect : ~m? -# 33| r33_1(glval) = VariableAddress[objC] : -# 33| r33_2(C) = NewObj : -# 33| r33_3() = FunctionAddress[C] : -# 33| v33_4(Void) = Call[C] : func:r33_3, this:r33_2 -# 33| mu33_5() = ^CallSideEffect : ~m? -# 33| r33_6(A) = Convert : r33_2 -# 33| mu33_7(A) = Store[objC] : &:r33_1, r33_2 -# 34| r34_1(glval) = VariableAddress[objC] : -# 34| r34_2(A) = Load[objC] : &:r34_1, ~m? -# 34| r34_3() = FunctionAddress[function] : -# 34| r34_4(Int32) = Call[function] : func:r34_3, this:r34_2 -# 34| mu34_5() = ^CallSideEffect : ~m? -# 23| v23_3(Void) = ReturnVoid : -# 23| v23_4(Void) = AliasedUse : ~m? -# 23| v23_5(Void) = ExitFunction : - -inoutref.cs: -# 11| System.Void InOutRef.set(MyClass,MyClass) -# 11| Block 0 -# 11| v11_1(Void) = EnterFunction : -# 11| mu11_2() = AliasedDefinition : -# 11| r11_3(glval) = VariableAddress[o1] : -# 11| mu11_4(MyClass) = InitializeParameter[o1] : &:r11_3 -# 11| r11_5(glval) = VariableAddress[o2] : -# 11| mu11_6(MyClass) = InitializeParameter[o2] : &:r11_5 -# 13| r13_1(glval) = VariableAddress[o2] : -# 13| r13_2(MyClass) = Load[o2] : &:r13_1, ~m? -# 13| r13_3(glval) = VariableAddress[o1] : -# 13| r13_4(MyClass) = Load[o1] : &:r13_3, ~m? -# 13| mu13_5(MyClass) = Store[?] : &:r13_4, r13_2 -# 11| v11_7(Void) = ReturnVoid : -# 11| v11_8(Void) = AliasedUse : ~m? -# 11| v11_9(Void) = ExitFunction : - -# 16| System.Void InOutRef.F(System.Int32,MyStruct,MyStruct,MyClass,MyClass) -# 16| Block 0 -# 16| v16_1(Void) = EnterFunction : -# 16| mu16_2() = AliasedDefinition : -# 16| r16_3(glval) = VariableAddress[a] : -# 16| mu16_4(Int32) = InitializeParameter[a] : &:r16_3 -# 16| r16_5(glval) = VariableAddress[b] : -# 16| mu16_6(MyStruct) = InitializeParameter[b] : &:r16_5 -# 16| r16_7(glval) = VariableAddress[b1] : -# 16| mu16_8(MyStruct) = InitializeParameter[b1] : &:r16_7 -# 16| r16_9(glval) = VariableAddress[c] : -# 16| mu16_10(MyClass) = InitializeParameter[c] : &:r16_9 -# 16| r16_11(glval) = VariableAddress[c1] : -# 16| mu16_12(MyClass) = InitializeParameter[c1] : &:r16_11 -# 18| r18_1(Int32) = Constant[0] : -# 18| r18_2(glval) = VariableAddress[b] : -# 18| r18_3(MyStruct) = Load[b] : &:r18_2, ~m? -# 18| r18_4(glval) = FieldAddress[fld] : r18_3 -# 18| mu18_5(Int32) = Store[?] : &:r18_4, r18_1 -# 19| r19_1(glval) = VariableAddress[b] : -# 19| r19_2(MyStruct) = Load[b] : &:r19_1, ~m? -# 19| r19_3(glval) = FieldAddress[fld] : r19_2 -# 19| r19_4(Int32) = Load[?] : &:r19_3, ~m? -# 19| r19_5(glval) = VariableAddress[a] : -# 19| r19_6(Int32) = Load[a] : &:r19_5, ~m? -# 19| mu19_7(Int32) = Store[?] : &:r19_6, r19_4 -# 21| r21_1(Int32) = Constant[10] : -# 21| r21_2(glval) = VariableAddress[c] : -# 21| r21_3(MyClass) = Load[c] : &:r21_2, ~m? -# 21| r21_4(MyClass) = Load[?] : &:r21_3, ~m? -# 21| r21_5(glval) = FieldAddress[fld] : r21_4 -# 21| mu21_6(Int32) = Store[?] : &:r21_5, r21_1 -# 22| r22_1(glval) = VariableAddress[c] : -# 22| r22_2(MyClass) = Load[c] : &:r22_1, ~m? -# 22| r22_3(MyClass) = Load[?] : &:r22_2, ~m? -# 22| r22_4(glval) = FieldAddress[fld] : r22_3 -# 22| r22_5(Int32) = Load[?] : &:r22_4, ~m? -# 22| r22_6(glval) = VariableAddress[a] : -# 22| r22_7(Int32) = Load[a] : &:r22_6, ~m? -# 22| mu22_8(Int32) = Store[?] : &:r22_7, r22_5 -# 24| r24_1(glval) = VariableAddress[b1] : -# 24| r24_2(MyStruct) = Load[b1] : &:r24_1, ~m? -# 24| r24_3(MyStruct) = Load[?] : &:r24_2, ~m? -# 24| r24_4(glval) = VariableAddress[b] : -# 24| r24_5(MyStruct) = Load[b] : &:r24_4, ~m? -# 24| mu24_6(MyStruct) = Store[?] : &:r24_5, r24_3 -# 26| r26_1() = FunctionAddress[set] : -# 26| r26_2(glval) = VariableAddress[c] : -# 26| r26_3(MyClass) = Load[c] : &:r26_2, ~m? -# 26| r26_4(glval) = VariableAddress[c1] : -# 26| r26_5(MyClass) = Load[c1] : &:r26_4, ~m? -# 26| r26_6(MyClass) = Load[?] : &:r26_5, ~m? -# 26| v26_7(Void) = Call[set] : func:r26_1, 0:r26_3, 1:r26_6 -# 26| mu26_8() = ^CallSideEffect : ~m? -# 16| v16_13(Void) = ReturnVoid : -# 16| v16_14(Void) = AliasedUse : ~m? -# 16| v16_15(Void) = ExitFunction : - -# 29| System.Void InOutRef.Main() -# 29| Block 0 -# 29| v29_1(Void) = EnterFunction : -# 29| mu29_2() = AliasedDefinition : -# 31| r31_1(glval) = VariableAddress[a] : -# 31| r31_2(Int32) = Constant[0] : -# 31| mu31_3(Int32) = Store[a] : &:r31_1, r31_2 -# 32| r32_1(glval) = VariableAddress[b] : -# 32| r32_2(MyStruct) = NewObj : -# 32| r32_3() = FunctionAddress[MyStruct] : -# 32| v32_4(Void) = Call[MyStruct] : func:r32_3, this:r32_2 -# 32| mu32_5() = ^CallSideEffect : ~m? -# 32| r32_6(MyStruct) = Load[?] : &:r32_2, ~m? -# 32| mu32_7(MyStruct) = Store[b] : &:r32_1, r32_6 -# 33| r33_1(glval) = VariableAddress[c] : -# 33| r33_2(MyClass) = NewObj : -# 33| r33_3() = FunctionAddress[MyClass] : -# 33| v33_4(Void) = Call[MyClass] : func:r33_3, this:r33_2 -# 33| mu33_5() = ^CallSideEffect : ~m? -# 33| mu33_6(MyClass) = Store[c] : &:r33_1, r33_2 -# 34| r34_1() = FunctionAddress[F] : -# 34| r34_2(glval) = VariableAddress[a] : -# 34| r34_3(glval) = VariableAddress[b] : -# 34| r34_4(glval) = VariableAddress[b] : -# 34| r34_5(glval) = VariableAddress[c] : -# 34| r34_6(glval) = VariableAddress[c] : -# 34| v34_7(Void) = Call[F] : func:r34_1, 0:r34_2, 1:r34_3, 2:r34_4, 3:r34_5, 4:r34_6 -# 34| mu34_8() = ^CallSideEffect : ~m? -# 36| r36_1(glval) = VariableAddress[x] : -# 36| r36_2(glval) = VariableAddress[b] : -# 36| r36_3(glval) = FieldAddress[fld] : r36_2 -# 36| r36_4(Int32) = Load[?] : &:r36_3, ~m? -# 36| mu36_5(Int32) = Store[x] : &:r36_1, r36_4 -# 29| v29_3(Void) = ReturnVoid : -# 29| v29_4(Void) = AliasedUse : ~m? -# 29| v29_5(Void) = ExitFunction : - -isexpr.cs: -# 8| System.Void IsExpr.Main() -# 8| Block 0 -# 8| v8_1(Void) = EnterFunction : -# 8| mu8_2() = AliasedDefinition : -# 10| r10_1(glval) = VariableAddress[obj] : -# 10| r10_2(null) = Constant[null] : -# 10| r10_3(Is_A) = Convert : r10_2 -# 10| mu10_4(Is_A) = Store[obj] : &:r10_1, r10_2 -# 12| r12_1(glval) = VariableAddress[o] : -# 12| r12_2(glval) = VariableAddress[obj] : -# 12| r12_3(Is_A) = Load[obj] : &:r12_2, ~m? -# 12| r12_4(Object) = Convert : r12_3 -# 12| mu12_5(Object) = Store[o] : &:r12_1, r12_3 -# 13| r13_1(glval) = VariableAddress[o] : -# 13| r13_2(Object) = Load[o] : &:r13_1, ~m? -# 13| r13_3(Is_A) = CheckedConvertOrNull : r13_2 -# 13| r13_4(Is_A) = Constant[0] : -# 13| r13_5(glval) = VariableAddress[tmp] : -# 13| mu13_6(Is_A) = Uninitialized[tmp] : &:r13_5 -# 13| r13_7(Boolean) = CompareNE : r13_3, r13_4 -# 13| v13_8(Void) = ConditionalBranch : r13_7 -#-----| False -> Block 2 -#-----| True -> Block 3 - -# 8| Block 1 -# 8| v8_3(Void) = ReturnVoid : -# 8| v8_4(Void) = AliasedUse : ~m? -# 8| v8_5(Void) = ExitFunction : - -# 13| Block 2 -# 13| v13_9(Void) = ConditionalBranch : r13_7 -#-----| False -> Block 5 -#-----| True -> Block 4 - -# 13| Block 3 -# 13| mu13_10(Is_A) = Store[tmp] : &:r13_5, r13_3 -#-----| Goto -> Block 2 - -# 15| Block 4 -# 15| r15_1(glval) = VariableAddress[res] : -# 15| r15_2(glval) = VariableAddress[tmp] : -# 15| r15_3(Is_A) = Load[tmp] : &:r15_2, ~m? -# 15| r15_4(glval) = FieldAddress[x] : r15_3 -# 15| r15_5(Int32) = Load[?] : &:r15_4, ~m? -# 15| mu15_6(Int32) = Store[res] : &:r15_1, r15_5 -#-----| Goto -> Block 5 - -# 17| Block 5 -# 17| r17_1(glval) = VariableAddress[o] : -# 17| r17_2(Object) = Load[o] : &:r17_1, ~m? -# 17| r17_3(Is_A) = CheckedConvertOrNull : r17_2 -# 17| r17_4(Is_A) = Constant[0] : -# 17| r17_5(Boolean) = CompareNE : r17_3, r17_4 -# 17| v17_6(Void) = ConditionalBranch : r17_5 -#-----| False -> Block 1 -#-----| True -> Block 6 - -# 18| Block 6 -# 18| v18_1(Void) = NoOp : -#-----| Goto -> Block 1 - -jumps.cs: -# 5| System.Void Jumps.Main() -# 5| Block 0 -# 5| v5_1(Void) = EnterFunction : -# 5| mu5_2() = AliasedDefinition : -# 7| r7_1(glval) = VariableAddress[i] : -# 7| r7_2(Int32) = Constant[1] : -# 7| mu7_3(Int32) = Store[i] : &:r7_1, r7_2 -#-----| Goto -> Block 2 - -# 7| Block 1 -# 7| r7_4(glval) = VariableAddress[i] : -# 7| r7_5(Int32) = Load[i] : &:r7_4, ~m? -# 7| r7_6(Int32) = Constant[1] : -# 7| r7_7(Int32) = Add : r7_5, r7_6 -# 7| mu7_8(Int32) = Store[i] : &:r7_4, r7_7 -#-----| Goto (back edge) -> Block 2 - -# 7| Block 2 -# 7| r7_9(glval) = VariableAddress[i] : -# 7| r7_10(Int32) = Load[i] : &:r7_9, ~m? -# 7| r7_11(Int32) = Constant[10] : -# 7| r7_12(Boolean) = CompareLE : r7_10, r7_11 -# 7| v7_13(Void) = ConditionalBranch : r7_12 -#-----| False -> Block 8 -#-----| True -> Block 3 - -# 9| Block 3 -# 9| r9_1(glval) = VariableAddress[i] : -# 9| r9_2(Int32) = Load[i] : &:r9_1, ~m? -# 9| r9_3(Int32) = Constant[3] : -# 9| r9_4(Boolean) = CompareEQ : r9_2, r9_3 -# 9| v9_5(Void) = ConditionalBranch : r9_4 -#-----| False -> Block 5 -#-----| True -> Block 4 - -# 10| Block 4 -# 10| v10_1(Void) = NoOp : -#-----| Goto -> Block 1 - -# 11| Block 5 -# 11| r11_1(glval) = VariableAddress[i] : -# 11| r11_2(Int32) = Load[i] : &:r11_1, ~m? -# 11| r11_3(Int32) = Constant[5] : -# 11| r11_4(Boolean) = CompareEQ : r11_2, r11_3 -# 11| v11_5(Void) = ConditionalBranch : r11_4 -#-----| False -> Block 7 -#-----| True -> Block 6 - -# 12| Block 6 -# 12| v12_1(Void) = NoOp : -#-----| Goto -> Block 8 - -# 13| Block 7 -# 13| r13_1() = FunctionAddress[WriteLine] : -# 13| r13_2(String) = StringConstant["BreakAndContinue"] : -# 13| v13_3(Void) = Call[WriteLine] : func:r13_1, 0:r13_2 -# 13| mu13_4() = ^CallSideEffect : ~m? -#-----| Goto -> Block 1 - -# 16| Block 8 -# 16| r16_1(glval) = VariableAddress[i] : -# 16| r16_2(Int32) = Constant[0] : -# 16| mu16_3(Int32) = Store[i] : &:r16_1, r16_2 -#-----| Goto -> Block 9 - -# 16| Block 9 -# 16| r16_4(glval) = VariableAddress[i] : -# 16| r16_5(Int32) = Load[i] : &:r16_4, ~m? -# 16| r16_6(Int32) = Constant[10] : -# 16| r16_7(Boolean) = CompareLT : r16_5, r16_6 -# 16| v16_8(Void) = ConditionalBranch : r16_7 -#-----| False -> Block 11 -#-----| True -> Block 10 - -# 18| Block 10 -# 18| r18_1(glval) = VariableAddress[i] : -# 18| r18_2(Int32) = Load[i] : &:r18_1, ~m? -# 18| r18_3(Int32) = Constant[1] : -# 18| r18_4(Int32) = Add : r18_2, r18_3 -# 18| mu18_5(Int32) = Store[i] : &:r18_1, r18_4 -# 19| v19_1(Void) = NoOp : -#-----| Goto (back edge) -> Block 9 - -# 22| Block 11 -# 22| r22_1(glval) = VariableAddress[a] : -# 22| r22_2(Int32) = Constant[0] : -# 22| mu22_3(Int32) = Store[a] : &:r22_1, r22_2 -#-----| Goto -> Block 12 - -# 23| Block 12 -# 23| r23_1(Boolean) = Constant[true] : -# 23| v23_2(Void) = ConditionalBranch : r23_1 -#-----| False -> Block 17 -#-----| True -> Block 13 - -# 25| Block 13 -# 25| r25_1(glval) = VariableAddress[a] : -# 25| r25_2(Int32) = Load[a] : &:r25_1, ~m? -# 25| r25_3(Int32) = Constant[1] : -# 25| r25_4(Int32) = Add : r25_2, r25_3 -# 25| mu25_5(Int32) = Store[a] : &:r25_1, r25_4 -# 26| r26_1(glval) = VariableAddress[a] : -# 26| r26_2(Int32) = Load[a] : &:r26_1, ~m? -# 26| r26_3(Int32) = Constant[5] : -# 26| r26_4(Boolean) = CompareEQ : r26_2, r26_3 -# 26| v26_5(Void) = ConditionalBranch : r26_4 -#-----| False -> Block 15 -#-----| True -> Block 14 - -# 27| Block 14 -# 27| v27_1(Void) = NoOp : -#-----| Goto (back edge) -> Block 12 - -# 28| Block 15 -# 28| r28_1(glval) = VariableAddress[a] : -# 28| r28_2(Int32) = Load[a] : &:r28_1, ~m? -# 28| r28_3(Int32) = Constant[10] : -# 28| r28_4(Boolean) = CompareEQ : r28_2, r28_3 -# 28| v28_5(Void) = ConditionalBranch : r28_4 -#-----| False (back edge) -> Block 12 -#-----| True -> Block 16 - -# 29| Block 16 -# 29| v29_1(Void) = NoOp : -#-----| Goto -> Block 17 - -# 32| Block 17 -# 32| r32_1(glval) = VariableAddress[i] : -# 32| r32_2(Int32) = Constant[1] : -# 32| mu32_3(Int32) = Store[i] : &:r32_1, r32_2 -#-----| Goto -> Block 19 - -# 32| Block 18 -# 32| r32_4(glval) = VariableAddress[i] : -# 32| r32_5(Int32) = Load[i] : &:r32_4, ~m? -# 32| r32_6(Int32) = Constant[1] : -# 32| r32_7(Int32) = Add : r32_5, r32_6 -# 32| mu32_8(Int32) = Store[i] : &:r32_4, r32_7 -#-----| Goto (back edge) -> Block 19 - -# 32| Block 19 -# 32| r32_9(glval) = VariableAddress[i] : -# 32| r32_10(Int32) = Load[i] : &:r32_9, ~m? -# 32| r32_11(Int32) = Constant[10] : -# 32| r32_12(Boolean) = CompareLE : r32_10, r32_11 -# 32| v32_13(Void) = ConditionalBranch : r32_12 -#-----| False -> Block 22 -#-----| True -> Block 20 - -# 34| Block 20 -# 34| r34_1(glval) = VariableAddress[i] : -# 34| r34_2(Int32) = Load[i] : &:r34_1, ~m? -# 34| r34_3(Int32) = Constant[5] : -# 34| r34_4(Boolean) = CompareEQ : r34_2, r34_3 -# 34| v34_5(Void) = ConditionalBranch : r34_4 -#-----| False -> Block 18 -#-----| True -> Block 21 - -# 35| Block 21 -# 35| v35_1(Void) = NoOp : -#-----| Goto -> Block 22 - -# 37| Block 22 -# 37| v37_1(Void) = NoOp : -# 38| r38_1() = FunctionAddress[WriteLine] : -# 38| r38_2(String) = StringConstant["Done"] : -# 38| v38_3(Void) = Call[WriteLine] : func:r38_1, 0:r38_2 -# 38| mu38_4() = ^CallSideEffect : ~m? -# 5| v5_3(Void) = ReturnVoid : -# 5| v5_4(Void) = AliasedUse : ~m? -# 5| v5_5(Void) = ExitFunction : - -lock.cs: -# 5| System.Void LockTest.A() -# 5| Block 0 -# 5| v5_1(Void) = EnterFunction : -# 5| mu5_2() = AliasedDefinition : -# 7| r7_1(glval) = VariableAddress[object] : -# 7| r7_2(Object) = NewObj : -# 7| r7_3() = FunctionAddress[Object] : -# 7| v7_4(Void) = Call[Object] : func:r7_3, this:r7_2 -# 7| mu7_5() = ^CallSideEffect : ~m? -# 7| mu7_6(Object) = Store[object] : &:r7_1, r7_2 -# 8| r8_1(glval) = VariableAddress[#temp8:9] : -# 8| r8_2(glval) = VariableAddress[object] : -# 8| r8_3(Object) = Load[object] : &:r8_2, ~m? -# 8| mu8_4(Object) = Store[#temp8:9] : &:r8_1, r8_3 -# 8| r8_5(glval) = VariableAddress[#temp8:9] : -# 8| r8_6(Boolean) = Constant[false] : -# 8| mu8_7(Boolean) = Store[#temp8:9] : &:r8_5, r8_6 -# 8| r8_8() = FunctionAddress[Enter] : -# 8| r8_9(glval) = VariableAddress[#temp8:9] : -# 8| r8_10(Object) = Load[#temp8:9] : &:r8_9, ~m? -# 8| r8_11(glval) = VariableAddress[#temp8:9] : -# 8| v8_12(Void) = Call[Enter] : func:r8_8, 0:r8_10, 1:r8_11 -# 8| mu8_13() = ^CallSideEffect : ~m? -# 10| r10_1() = FunctionAddress[WriteLine] : -# 10| r10_2(glval) = VariableAddress[object] : -# 10| r10_3(Object) = Load[object] : &:r10_2, ~m? -# 10| r10_4() = FunctionAddress[ToString] : -# 10| r10_5(String) = Call[ToString] : func:r10_4, this:r10_3 -# 10| mu10_6() = ^CallSideEffect : ~m? -# 10| v10_7(Void) = Call[WriteLine] : func:r10_1, 0:r10_5 -# 10| mu10_8() = ^CallSideEffect : ~m? -# 8| r8_14(glval) = VariableAddress[#temp8:9] : -# 8| r8_15(Boolean) = Load[#temp8:9] : &:r8_14, ~m? -# 8| v8_16(Void) = ConditionalBranch : r8_15 -#-----| False -> Block 1 -#-----| True -> Block 2 - -# 5| Block 1 -# 5| v5_3(Void) = ReturnVoid : -# 5| v5_4(Void) = AliasedUse : ~m? -# 5| v5_5(Void) = ExitFunction : - -# 8| Block 2 -# 8| r8_17() = FunctionAddress[Exit] : -# 8| r8_18(glval) = VariableAddress[#temp8:9] : -# 8| r8_19(Object) = Load[#temp8:9] : &:r8_18, ~m? -# 8| v8_20(Void) = Call[Exit] : func:r8_17, 0:r8_19 -# 8| mu8_21() = ^CallSideEffect : ~m? -#-----| Goto -> Block 1 - -obj_creation.cs: -# 7| System.Void ObjCreation.MyClass..ctor() -# 7| Block 0 -# 7| v7_1(Void) = EnterFunction : -# 7| mu7_2() = AliasedDefinition : -# 7| r7_3(glval) = InitializeThis : -# 7| r7_4(glval) = Convert[MyClass : Object] : r7_3 -# 7| r7_5() = FunctionAddress[Object] : -# 7| v7_6(Void) = Call[Object] : func:r7_5, this:r7_4 -# 7| mu7_7() = ^CallSideEffect : ~m? -# 8| v8_1(Void) = NoOp : -# 7| v7_8(Void) = ReturnVoid : -# 7| v7_9(Void) = AliasedUse : ~m? -# 7| v7_10(Void) = ExitFunction : - -# 11| System.Void ObjCreation.MyClass..ctor(System.Int32) -# 11| Block 0 -# 11| v11_1(Void) = EnterFunction : -# 11| mu11_2() = AliasedDefinition : -# 11| r11_3(glval) = InitializeThis : -# 11| r11_4(glval) = VariableAddress[_x] : -# 11| mu11_5(Int32) = InitializeParameter[_x] : &:r11_4 -# 11| r11_6(glval) = Convert[MyClass : Object] : r11_3 -# 11| r11_7() = FunctionAddress[Object] : -# 11| v11_8(Void) = Call[Object] : func:r11_7, this:r11_6 -# 11| mu11_9() = ^CallSideEffect : ~m? -# 13| r13_1(glval) = VariableAddress[_x] : -# 13| r13_2(Int32) = Load[_x] : &:r13_1, ~m? -# 13| r13_3(MyClass) = CopyValue : r11_3 -# 13| r13_4(glval) = FieldAddress[x] : r13_3 -# 13| mu13_5(Int32) = Store[?] : &:r13_4, r13_2 -# 11| v11_10(Void) = ReturnVoid : -# 11| v11_11(Void) = AliasedUse : ~m? -# 11| v11_12(Void) = ExitFunction : - -# 17| System.Void ObjCreation.SomeFun(ObjCreation.MyClass) -# 17| Block 0 -# 17| v17_1(Void) = EnterFunction : -# 17| mu17_2() = AliasedDefinition : -# 17| r17_3(glval) = VariableAddress[x] : -# 17| mu17_4(MyClass) = InitializeParameter[x] : &:r17_3 -# 18| v18_1(Void) = NoOp : -# 17| v17_5(Void) = ReturnVoid : -# 17| v17_6(Void) = AliasedUse : ~m? -# 17| v17_7(Void) = ExitFunction : - -# 21| System.Void ObjCreation.Main() -# 21| Block 0 -# 21| v21_1(Void) = EnterFunction : -# 21| mu21_2() = AliasedDefinition : -# 23| r23_1(glval) = VariableAddress[obj] : -# 23| r23_2(MyClass) = NewObj : -# 23| r23_3() = FunctionAddress[MyClass] : -# 23| r23_4(Int32) = Constant[100] : -# 23| v23_5(Void) = Call[MyClass] : func:r23_3, this:r23_2, 0:r23_4 -# 23| mu23_6() = ^CallSideEffect : ~m? -# 23| mu23_7(MyClass) = Store[obj] : &:r23_1, r23_2 -# 24| r24_1(glval) = VariableAddress[obj_initlist] : -# 24| r24_2(MyClass) = NewObj : -# 24| r24_3() = FunctionAddress[MyClass] : -# 24| v24_4(Void) = Call[MyClass] : func:r24_3, this:r24_2 -# 24| mu24_5() = ^CallSideEffect : ~m? -# 24| r24_6(Int32) = Constant[101] : -# 24| r24_7(glval) = FieldAddress[x] : r24_2 -# 24| mu24_8(Int32) = Store[?] : &:r24_7, r24_6 -# 24| mu24_9(MyClass) = Store[obj_initlist] : &:r24_1, r24_2 -# 25| r25_1(glval) = VariableAddress[a] : -# 25| r25_2(glval) = VariableAddress[obj] : -# 25| r25_3(MyClass) = Load[obj] : &:r25_2, ~m? -# 25| r25_4(glval) = FieldAddress[x] : r25_3 -# 25| r25_5(Int32) = Load[?] : &:r25_4, ~m? -# 25| mu25_6(Int32) = Store[a] : &:r25_1, r25_5 -# 27| r27_1() = FunctionAddress[SomeFun] : -# 27| r27_2(MyClass) = NewObj : -# 27| r27_3() = FunctionAddress[MyClass] : -# 27| r27_4(Int32) = Constant[100] : -# 27| v27_5(Void) = Call[MyClass] : func:r27_3, this:r27_2, 0:r27_4 -# 27| mu27_6() = ^CallSideEffect : ~m? -# 27| v27_7(Void) = Call[SomeFun] : func:r27_1, 0:r27_2 -# 27| mu27_8() = ^CallSideEffect : ~m? -# 21| v21_3(Void) = ReturnVoid : -# 21| v21_4(Void) = AliasedUse : ~m? -# 21| v21_5(Void) = ExitFunction : - -pointers.cs: -# 3| System.Void Pointers.addone(System.Int32[]) -# 3| Block 0 -# 3| v3_1(Void) = EnterFunction : -# 3| mu3_2() = AliasedDefinition : -# 3| r3_3(glval) = VariableAddress[arr] : -# 3| mu3_4(Int32[]) = InitializeParameter[arr] : &:r3_3 -# 5| r5_1(glval) = VariableAddress[length] : -# 5| r5_2(glval) = VariableAddress[arr] : -# 5| r5_3(Int32[]) = Load[arr] : &:r5_2, ~m? -# 5| r5_4() = FunctionAddress[get_Length] : -# 5| r5_5(Int32) = Call[get_Length] : func:r5_4, this:r5_3 -# 5| mu5_6() = ^CallSideEffect : ~m? -# 5| mu5_7(Int32) = Store[length] : &:r5_1, r5_5 -# 6| r6_1(glval) = VariableAddress[b] : -# 6| r6_2(glval) = VariableAddress[arr] : -# 6| r6_3(Int32[]) = Load[arr] : &:r6_2, ~m? -# 6| r6_4(Int32*) = CheckedConvertOrThrow : r6_3 -# 6| mu6_5(Int32*) = Store[b] : &:r6_1, r6_4 -# 8| r8_1(glval) = VariableAddress[p] : -# 8| r8_2(glval) = VariableAddress[b] : -# 8| r8_3(Int32*) = Load[b] : &:r8_2, ~m? -# 8| mu8_4(Int32*) = Store[p] : &:r8_1, r8_3 -# 9| r9_1(glval) = VariableAddress[i] : -# 9| r9_2(Int32) = Constant[0] : -# 9| mu9_3(Int32) = Store[i] : &:r9_1, r9_2 -#-----| Goto -> Block 2 - -# 3| Block 1 -# 3| v3_5(Void) = ReturnVoid : -# 3| v3_6(Void) = AliasedUse : ~m? -# 3| v3_7(Void) = ExitFunction : - -# 9| Block 2 -# 9| r9_4(glval) = VariableAddress[i] : -# 9| r9_5(Int32) = Load[i] : &:r9_4, ~m? -# 9| r9_6(glval) = VariableAddress[length] : -# 9| r9_7(Int32) = Load[length] : &:r9_6, ~m? -# 9| r9_8(Boolean) = CompareLT : r9_5, r9_7 -# 9| v9_9(Void) = ConditionalBranch : r9_8 -#-----| False -> Block 1 -#-----| True -> Block 3 - -# 10| Block 3 -# 10| r10_1(Int32) = Constant[1] : -# 10| r10_2(glval) = VariableAddress[p] : -# 10| r10_3(Int32*) = Load[p] : &:r10_2, ~m? -# 10| r10_4(Int32) = Constant[1] : -# 10| r10_5(Int32*) = PointerAdd[4] : r10_3, r10_4 -# 10| mu10_6(Int32*) = Store[p] : &:r10_2, r10_5 -# 10| r10_7(Int32) = Load[?] : &:r10_3, ~m? -# 10| r10_8(Int32) = Add : r10_7, r10_1 -# 10| mu10_9(Int32) = Store[?] : &:r10_3, r10_8 -# 9| r9_10(glval) = VariableAddress[i] : -# 9| r9_11(Int32) = Load[i] : &:r9_10, ~m? -# 9| r9_12(Int32) = Constant[1] : -# 9| r9_13(Int32) = Add : r9_11, r9_12 -# 9| mu9_14(Int32) = Store[i] : &:r9_10, r9_13 -#-----| Goto (back edge) -> Block 2 - -# 25| System.Void Pointers.Main() -# 25| Block 0 -# 25| v25_1(Void) = EnterFunction : -# 25| mu25_2() = AliasedDefinition : -# 26| r26_1(glval) = VariableAddress[o] : -# 26| r26_2(MyClass) = NewObj : -# 26| r26_3() = FunctionAddress[MyClass] : -# 26| v26_4(Void) = Call[MyClass] : func:r26_3, this:r26_2 -# 26| mu26_5() = ^CallSideEffect : ~m? -# 26| mu26_6(MyClass) = Store[o] : &:r26_1, r26_2 -# 27| r27_1(glval) = VariableAddress[s] : -# 27| r27_2(MyStruct) = NewObj : -# 27| r27_3() = FunctionAddress[MyStruct] : -# 27| v27_4(Void) = Call[MyStruct] : func:r27_3, this:r27_2 -# 27| mu27_5() = ^CallSideEffect : ~m? -# 27| r27_6(MyStruct) = Load[?] : &:r27_2, ~m? -# 27| mu27_7(MyStruct) = Store[s] : &:r27_1, r27_6 -# 30| r30_1(glval) = VariableAddress[p] : -# 30| r30_2(glval) = VariableAddress[o] : -# 30| r30_3(MyClass) = Load[o] : &:r30_2, ~m? -# 30| r30_4(glval) = FieldAddress[fld1] : r30_3 -# 30| mu30_5(Int32*) = Store[p] : &:r30_1, r30_4 -# 30| r30_6(glval) = VariableAddress[q] : -# 30| r30_7(glval) = VariableAddress[o] : -# 30| r30_8(MyClass) = Load[o] : &:r30_7, ~m? -# 30| r30_9(glval) = FieldAddress[fld2] : r30_8 -# 30| mu30_10(Int32*) = Store[q] : &:r30_6, r30_9 -# 32| r32_1(Int32) = Constant[0] : -# 32| r32_2(glval) = VariableAddress[p] : -# 32| r32_3(Int32*) = Load[p] : &:r32_2, ~m? -# 32| mu32_4(Int32) = Store[?] : &:r32_3, r32_1 -# 33| r33_1(Int32) = Constant[0] : -# 33| r33_2(glval) = VariableAddress[q] : -# 33| r33_3(Int32*) = Load[q] : &:r33_2, ~m? -# 33| mu33_4(Int32) = Store[?] : &:r33_3, r33_1 -# 34| r34_1(glval) = VariableAddress[r] : -# 34| r34_2(glval) = VariableAddress[s] : -# 34| mu34_3(MyStruct*) = Store[r] : &:r34_1, r34_2 -# 35| r35_1(Int32) = Constant[0] : -# 35| r35_2(glval) = VariableAddress[r] : -# 35| r35_3(MyStruct*) = Load[r] : &:r35_2, ~m? -# 35| r35_4(MyStruct) = Load[?] : &:r35_3, ~m? -# 35| r35_5(glval) = FieldAddress[fld] : r35_4 -# 35| mu35_6(Int32) = Store[?] : &:r35_5, r35_1 -# 39| r39_1(glval) = VariableAddress[arr] : -# 39| mu39_2(Int32[]) = Uninitialized[arr] : &:r39_1 -# 39| r39_3(Int32) = Constant[0] : -# 39| r39_4(glval) = PointerAdd[4] : r39_1, r39_3 -# 39| r39_5(Int32) = Constant[1] : -# 39| mu39_6(Int32) = Store[?] : &:r39_4, r39_5 -# 39| r39_7(Int32) = Constant[1] : -# 39| r39_8(glval) = PointerAdd[4] : r39_1, r39_7 -# 39| r39_9(Int32) = Constant[2] : -# 39| mu39_10(Int32) = Store[?] : &:r39_8, r39_9 -# 39| r39_11(Int32) = Constant[2] : -# 39| r39_12(glval) = PointerAdd[4] : r39_1, r39_11 -# 39| r39_13(Int32) = Constant[3] : -# 39| mu39_14(Int32) = Store[?] : &:r39_12, r39_13 -# 40| r40_1() = FunctionAddress[addone] : -# 40| r40_2(glval) = VariableAddress[arr] : -# 40| r40_3(Int32[]) = Load[arr] : &:r40_2, ~m? -# 40| v40_4(Void) = Call[addone] : func:r40_1, 0:r40_3 -# 40| mu40_5() = ^CallSideEffect : ~m? -# 25| v25_3(Void) = ReturnVoid : -# 25| v25_4(Void) = AliasedUse : ~m? -# 25| v25_5(Void) = ExitFunction : - -prop.cs: -# 7| System.Int32 PropClass.get_Prop() -# 7| Block 0 -# 7| v7_1(Void) = EnterFunction : -# 7| mu7_2() = AliasedDefinition : -# 7| r7_3(glval) = InitializeThis : -# 9| r9_1(glval) = VariableAddress[#return] : -# 9| r9_2(PropClass) = CopyValue : r7_3 -# 9| r9_3() = FunctionAddress[func] : -# 9| r9_4(Int32) = Call[func] : func:r9_3, this:r9_2 -# 9| mu9_5() = ^CallSideEffect : ~m? -# 9| mu9_6(Int32) = Store[#return] : &:r9_1, r9_4 -# 7| r7_4(glval) = VariableAddress[#return] : -# 7| v7_5(Void) = ReturnValue : &:r7_4, ~m? -# 7| v7_6(Void) = AliasedUse : ~m? -# 7| v7_7(Void) = ExitFunction : - -# 12| System.Void PropClass.set_Prop(System.Int32) -# 12| Block 0 -# 12| v12_1(Void) = EnterFunction : -# 12| mu12_2() = AliasedDefinition : -# 12| r12_3(glval) = InitializeThis : -# 12| r12_4(glval) = VariableAddress[value] : -# 12| mu12_5(Int32) = InitializeParameter[value] : &:r12_4 -# 14| r14_1(glval) = VariableAddress[value] : -# 14| r14_2(Int32) = Load[value] : &:r14_1, ~m? -# 14| r14_3(glval) = VariableAddress[prop] : -# 14| mu14_4(Int32) = Store[prop] : &:r14_3, r14_2 -# 12| v12_6(Void) = ReturnVoid : -# 12| v12_7(Void) = AliasedUse : ~m? -# 12| v12_8(Void) = ExitFunction : - -# 18| System.Int32 PropClass.func() -# 18| Block 0 -# 18| v18_1(Void) = EnterFunction : -# 18| mu18_2() = AliasedDefinition : -# 18| r18_3(glval) = InitializeThis : -# 20| r20_1(glval) = VariableAddress[#return] : -# 20| r20_2(Int32) = Constant[0] : -# 20| mu20_3(Int32) = Store[#return] : &:r20_1, r20_2 -# 18| r18_4(glval) = VariableAddress[#return] : -# 18| v18_5(Void) = ReturnValue : &:r18_4, ~m? -# 18| v18_6(Void) = AliasedUse : ~m? -# 18| v18_7(Void) = ExitFunction : - -# 26| System.Void Prog.Main() -# 26| Block 0 -# 26| v26_1(Void) = EnterFunction : -# 26| mu26_2() = AliasedDefinition : -# 28| r28_1(glval) = VariableAddress[obj] : -# 28| r28_2(PropClass) = NewObj : -# 28| r28_3() = FunctionAddress[PropClass] : -# 28| v28_4(Void) = Call[PropClass] : func:r28_3, this:r28_2 -# 28| mu28_5() = ^CallSideEffect : ~m? -# 28| mu28_6(PropClass) = Store[obj] : &:r28_1, r28_2 -# 29| r29_1(glval) = VariableAddress[obj] : -# 29| r29_2(PropClass) = Load[obj] : &:r29_1, ~m? -# 29| r29_3() = FunctionAddress[set_Prop] : -# 29| r29_4(Int32) = Constant[5] : -# 29| v29_5(Void) = Call[set_Prop] : func:r29_3, this:r29_2, 0:r29_4 -# 29| mu29_6() = ^CallSideEffect : ~m? -# 30| r30_1(glval) = VariableAddress[x] : -# 30| r30_2(glval) = VariableAddress[obj] : -# 30| r30_3(PropClass) = Load[obj] : &:r30_2, ~m? -# 30| r30_4() = FunctionAddress[get_Prop] : -# 30| r30_5(Int32) = Call[get_Prop] : func:r30_4, this:r30_3 -# 30| mu30_6() = ^CallSideEffect : ~m? -# 30| mu30_7(Int32) = Store[x] : &:r30_1, r30_5 -# 26| v26_3(Void) = ReturnVoid : -# 26| v26_4(Void) = AliasedUse : ~m? -# 26| v26_5(Void) = ExitFunction : - -simple_call.cs: -# 5| System.Int32 test_simple_call.f() -# 5| Block 0 -# 5| v5_1(Void) = EnterFunction : -# 5| mu5_2() = AliasedDefinition : -# 7| r7_1(glval) = VariableAddress[#return] : -# 7| r7_2(Int32) = Constant[0] : -# 7| mu7_3(Int32) = Store[#return] : &:r7_1, r7_2 -# 5| r5_3(glval) = VariableAddress[#return] : -# 5| v5_4(Void) = ReturnValue : &:r5_3, ~m? -# 5| v5_5(Void) = AliasedUse : ~m? -# 5| v5_6(Void) = ExitFunction : - -# 10| System.Int32 test_simple_call.g() -# 10| Block 0 -# 10| v10_1(Void) = EnterFunction : -# 10| mu10_2() = AliasedDefinition : -# 10| r10_3(glval) = InitializeThis : -# 12| r12_1(glval) = VariableAddress[#return] : -# 12| r12_2() = FunctionAddress[f] : -# 12| r12_3(Int32) = Call[f] : func:r12_2 -# 12| mu12_4() = ^CallSideEffect : ~m? -# 12| mu12_5(Int32) = Store[#return] : &:r12_1, r12_3 -# 10| r10_4(glval) = VariableAddress[#return] : -# 10| v10_5(Void) = ReturnValue : &:r10_4, ~m? -# 10| v10_6(Void) = AliasedUse : ~m? -# 10| v10_7(Void) = ExitFunction : - -simple_function.cs: -# 5| System.Int32 test_simple_function.f() -# 5| Block 0 -# 5| v5_1(Void) = EnterFunction : -# 5| mu5_2() = AliasedDefinition : -# 7| r7_1(glval) = VariableAddress[#return] : -# 7| r7_2(Int32) = Constant[0] : -# 7| mu7_3(Int32) = Store[#return] : &:r7_1, r7_2 -# 5| r5_3(glval) = VariableAddress[#return] : -# 5| v5_4(Void) = ReturnValue : &:r5_3, ~m? -# 5| v5_5(Void) = AliasedUse : ~m? -# 5| v5_6(Void) = ExitFunction : - -stmts.cs: -# 5| System.Int32 test_stmts.ifStmt(System.Int32) -# 5| Block 0 -# 5| v5_1(Void) = EnterFunction : -# 5| mu5_2() = AliasedDefinition : -# 5| r5_3(glval) = VariableAddress[x] : -# 5| mu5_4(Int32) = InitializeParameter[x] : &:r5_3 -# 7| r7_1(glval) = VariableAddress[x] : -# 7| r7_2(Int32) = Load[x] : &:r7_1, ~m? -# 7| r7_3(Int32) = Constant[5] : -# 7| r7_4(Boolean) = CompareEQ : r7_2, r7_3 -# 7| v7_5(Void) = ConditionalBranch : r7_4 -#-----| False -> Block 3 -#-----| True -> Block 2 - -# 5| Block 1 -# 5| r5_5(glval) = VariableAddress[#return] : -# 5| v5_6(Void) = ReturnValue : &:r5_5, ~m? -# 5| v5_7(Void) = AliasedUse : ~m? -# 5| v5_8(Void) = ExitFunction : - -# 8| Block 2 -# 8| r8_1(glval) = VariableAddress[#return] : -# 8| r8_2(Int32) = Constant[0] : -# 8| mu8_3(Int32) = Store[#return] : &:r8_1, r8_2 -#-----| Goto -> Block 1 - -# 10| Block 3 -# 10| r10_1(glval) = VariableAddress[#return] : -# 10| r10_2(Int32) = Constant[1] : -# 10| mu10_3(Int32) = Store[#return] : &:r10_1, r10_2 -#-----| Goto -> Block 1 - -# 13| System.Void test_stmts.whileStmt(System.Int32) -# 13| Block 0 -# 13| v13_1(Void) = EnterFunction : -# 13| mu13_2() = AliasedDefinition : -# 13| r13_3(glval) = VariableAddress[x] : -# 13| mu13_4(Int32) = InitializeParameter[x] : &:r13_3 -# 15| r15_1(glval) = VariableAddress[i] : -# 15| r15_2(Int32) = Constant[0] : -# 15| mu15_3(Int32) = Store[i] : &:r15_1, r15_2 -#-----| Goto -> Block 2 - -# 13| Block 1 -# 13| v13_5(Void) = ReturnVoid : -# 13| v13_6(Void) = AliasedUse : ~m? -# 13| v13_7(Void) = ExitFunction : - -# 16| Block 2 -# 16| r16_1(glval) = VariableAddress[i] : -# 16| r16_2(Int32) = Load[i] : &:r16_1, ~m? -# 16| r16_3(Int32) = Constant[10] : -# 16| r16_4(Boolean) = CompareLT : r16_2, r16_3 -# 16| v16_5(Void) = ConditionalBranch : r16_4 -#-----| False -> Block 1 -#-----| True -> Block 3 - -# 18| Block 3 -# 18| r18_1(glval) = VariableAddress[x] : -# 18| r18_2(Int32) = Load[x] : &:r18_1, ~m? -# 18| r18_3(Int32) = Constant[1] : -# 18| r18_4(Int32) = Add : r18_2, r18_3 -# 18| r18_5(glval) = VariableAddress[x] : -# 18| mu18_6(Int32) = Store[x] : &:r18_5, r18_4 -#-----| Goto (back edge) -> Block 2 - -# 22| System.Int32 test_stmts.switchStmt() -# 22| Block 0 -# 22| v22_1(Void) = EnterFunction : -# 22| mu22_2() = AliasedDefinition : -# 24| r24_1(glval) = VariableAddress[caseSwitch] : -# 24| r24_2(Object) = NewObj : -# 24| r24_3() = FunctionAddress[Object] : -# 24| v24_4(Void) = Call[Object] : func:r24_3, this:r24_2 -# 24| mu24_5() = ^CallSideEffect : ~m? -# 24| mu24_6(Object) = Store[caseSwitch] : &:r24_1, r24_2 -# 25| r25_1(glval) = VariableAddress[select] : -# 25| r25_2(Int32) = Constant[0] : -# 25| mu25_3(Int32) = Store[select] : &:r25_1, r25_2 -# 27| r27_1(glval) = VariableAddress[caseSwitch] : -# 27| r27_2(Object) = Load[caseSwitch] : &:r27_1, ~m? -# 27| v27_3(Void) = Switch : r27_2 -#-----| Case[-1] -> Block 2 -#-----| Case[0] -> Block 3 -#-----| Case[123] -> Block 4 -#-----| Case[true] -> Block 5 -#-----| Default -> Block 6 - -# 22| Block 1 -# 22| r22_3(glval) = VariableAddress[#return] : -# 22| v22_4(Void) = ReturnValue : &:r22_3, ~m? -# 22| v22_5(Void) = AliasedUse : ~m? -# 22| v22_6(Void) = ExitFunction : - -# 29| Block 2 -# 29| v29_1(Void) = NoOp : -# 30| v30_1(Void) = NoOp : -#-----| Goto (back edge) -> Block 5 - -# 31| Block 3 -# 31| v31_1(Void) = NoOp : -# 32| v32_1(Void) = NoOp : -#-----| Goto (back edge) -> Block 4 - -# 33| Block 4 -# 33| v33_1(Void) = NoOp : -# 34| r34_1(Int32) = Constant[100] : -# 34| r34_2(glval) = VariableAddress[select] : -# 34| mu34_3(Int32) = Store[select] : &:r34_2, r34_1 -# 35| v35_1(Void) = NoOp : -# 42| r42_1(glval) = VariableAddress[#return] : -# 42| r42_2(Int32) = Constant[0] : -# 42| mu42_3(Int32) = Store[#return] : &:r42_1, r42_2 -#-----| Goto -> Block 1 - -# 36| Block 5 -# 36| v36_1(Void) = NoOp : -# 37| r37_1(Int32) = Constant[101] : -# 37| r37_2(glval) = VariableAddress[select] : -# 37| mu37_3(Int32) = Store[select] : &:r37_2, r37_1 -# 38| v38_1(Void) = NoOp : -#-----| Goto (back edge) -> Block 6 - -# 39| Block 6 -# 39| v39_1(Void) = NoOp : -# 40| r40_1(glval) = VariableAddress[#return] : -# 40| r40_2(glval) = VariableAddress[select] : -# 40| r40_3(Int32) = Load[select] : &:r40_2, ~m? -# 40| mu40_4(Int32) = Store[#return] : &:r40_1, r40_3 -#-----| Goto -> Block 1 - -# 45| System.Void test_stmts.tryCatchFinally() -# 45| Block 0 -# 45| v45_1(Void) = EnterFunction : -# 45| mu45_2() = AliasedDefinition : -# 47| r47_1(glval) = VariableAddress[x] : -# 47| r47_2(Int32) = Constant[5] : -# 47| mu47_3(Int32) = Store[x] : &:r47_1, r47_2 -# 50| r50_1(glval) = VariableAddress[x] : -# 50| r50_2(Int32) = Load[x] : &:r50_1, ~m? -# 50| r50_3(Int32) = Constant[0] : -# 50| r50_4(Boolean) = CompareNE : r50_2, r50_3 -# 50| v50_5(Void) = ConditionalBranch : r50_4 -#-----| False -> Block 4 -#-----| True -> Block 3 - -# 45| Block 1 -# 45| v45_3(Void) = AliasedUse : ~m? -# 45| v45_4(Void) = ExitFunction : - -# 45| Block 2 -# 45| v45_5(Void) = Unwind : -#-----| Goto -> Block 1 - -# 51| Block 3 -# 51| r51_1(glval) = VariableAddress[#throw51:17] : -# 51| r51_2(Exception) = NewObj : -# 51| r51_3() = FunctionAddress[Exception] : -# 51| v51_4(Void) = Call[Exception] : func:r51_3, this:r51_2 -# 51| mu51_5() = ^CallSideEffect : ~m? -# 51| mu51_6(Exception) = Store[#throw51:17] : &:r51_1, r51_2 -# 51| v51_7(Void) = ThrowValue : &:r51_1, ~m? -#-----| Exception -> Block 6 - -# 52| Block 4 -# 52| r52_1(Int32) = Constant[0] : -# 52| r52_2(glval) = VariableAddress[x] : -# 52| mu52_3(Int32) = Store[x] : &:r52_2, r52_1 -#-----| Goto -> Block 5 - -# 64| Block 5 -# 64| r64_1(Int32) = Constant[2] : -# 64| r64_2(glval) = VariableAddress[x] : -# 64| mu64_3(Int32) = Store[x] : &:r64_2, r64_1 -# 45| v45_6(Void) = ReturnVoid : -#-----| Goto -> Block 1 - -# 54| Block 6 -# 54| v54_1(Void) = CatchByType[Exception] : -#-----| Exception -> Block 8 -#-----| Goto -> Block 7 - -# 54| Block 7 -# 54| r54_2(glval) = VariableAddress[ex] : -# 54| mu54_3(Exception) = Uninitialized[ex] : &:r54_2 -# 56| r56_1(Int32) = Constant[1] : -# 56| r56_2(glval) = VariableAddress[x] : -# 56| mu56_3(Int32) = Store[x] : &:r56_2, r56_1 -#-----| Goto -> Block 5 - -# 58| Block 8 -# 58| v58_1(Void) = CatchAny : -# 60| v60_1(Void) = ReThrow : -#-----| Exception -> Block 2 - -# 68| System.Void test_stmts.forStmt() -# 68| Block 0 -# 68| v68_1(Void) = EnterFunction : -# 68| mu68_2() = AliasedDefinition : -# 70| r70_1(glval) = VariableAddress[x] : -# 70| r70_2(Int32) = Constant[0] : -# 70| mu70_3(Int32) = Store[x] : &:r70_1, r70_2 -# 71| r71_1(glval) = VariableAddress[i] : -# 71| r71_2(Int32) = Constant[0] : -# 71| mu71_3(Int32) = Store[i] : &:r71_1, r71_2 -# 71| r71_4(glval) = VariableAddress[j] : -# 71| r71_5(Int32) = Constant[10] : -# 71| mu71_6(Int32) = Store[j] : &:r71_4, r71_5 -#-----| Goto -> Block 2 - -# 68| Block 1 -# 68| v68_3(Void) = ReturnVoid : -# 68| v68_4(Void) = AliasedUse : ~m? -# 68| v68_5(Void) = ExitFunction : - -# 71| Block 2 -# 71| r71_7(glval) = VariableAddress[i] : -# 71| r71_8(Int32) = Load[i] : &:r71_7, ~m? -# 71| r71_9(glval) = VariableAddress[j] : -# 71| r71_10(Int32) = Load[j] : &:r71_9, ~m? -# 71| r71_11(Boolean) = CompareLT : r71_8, r71_10 -# 71| v71_12(Void) = ConditionalBranch : r71_11 -#-----| False -> Block 4 -#-----| True -> Block 3 - -# 73| Block 3 -# 73| r73_1(glval) = VariableAddress[x] : -# 73| r73_2(Int32) = Load[x] : &:r73_1, ~m? -# 73| r73_3(Int32) = Constant[1] : -# 73| r73_4(Int32) = Sub : r73_2, r73_3 -# 73| r73_5(glval) = VariableAddress[x] : -# 73| mu73_6(Int32) = Store[x] : &:r73_5, r73_4 -# 71| r71_13(glval) = VariableAddress[i] : -# 71| r71_14(Int32) = Load[i] : &:r71_13, ~m? -# 71| r71_15(Int32) = Constant[1] : -# 71| r71_16(Int32) = Add : r71_14, r71_15 -# 71| mu71_17(Int32) = Store[i] : &:r71_13, r71_16 -# 71| r71_18(glval) = VariableAddress[j] : -# 71| r71_19(Int32) = Load[j] : &:r71_18, ~m? -# 71| r71_20(Int32) = Constant[1] : -# 71| r71_21(Int32) = Sub : r71_19, r71_20 -# 71| mu71_22(Int32) = Store[j] : &:r71_18, r71_21 -#-----| Goto (back edge) -> Block 2 - -# 76| Block 4 -# 76| r76_1(glval) = VariableAddress[a] : -# 76| mu76_2(Int32) = Uninitialized[a] : &:r76_1 -# 76| r76_3(glval) = VariableAddress[b] : -# 76| r76_4(Int32) = Constant[10] : -# 76| mu76_5(Int32) = Store[b] : &:r76_3, r76_4 -# 77| r77_1(Int32) = Constant[0] : -# 77| r77_2(glval) = VariableAddress[a] : -# 77| mu77_3(Int32) = Store[a] : &:r77_2, r77_1 -#-----| Goto -> Block 5 - -# 77| Block 5 -# 77| r77_4(glval) = VariableAddress[a] : -# 77| r77_5(Int32) = Load[a] : &:r77_4, ~m? -# 77| r77_6(glval) = VariableAddress[b] : -# 77| r77_7(Int32) = Load[b] : &:r77_6, ~m? -# 77| r77_8(Boolean) = CompareLT : r77_5, r77_7 -# 77| v77_9(Void) = ConditionalBranch : r77_8 -#-----| False -> Block 7 -#-----| True -> Block 6 - -# 79| Block 6 -# 79| r79_1(glval) = VariableAddress[a] : -# 79| r79_2(Int32) = Load[a] : &:r79_1, ~m? -# 79| r79_3(Int32) = Constant[1] : -# 79| r79_4(Int32) = Add : r79_2, r79_3 -# 79| mu79_5(Int32) = Store[a] : &:r79_1, r79_4 -#-----| Goto (back edge) -> Block 5 - -# 83| Block 7 -# 83| v83_1(Void) = NoOp : -#-----| Goto (back edge) -> Block 7 - -# 88| System.Void test_stmts.doWhile() -# 88| Block 0 -# 88| v88_1(Void) = EnterFunction : -# 88| mu88_2() = AliasedDefinition : -# 90| r90_1(glval) = VariableAddress[x] : -# 90| r90_2(Int32) = Constant[0] : -# 90| mu90_3(Int32) = Store[x] : &:r90_1, r90_2 -#-----| Goto -> Block 2 - -# 88| Block 1 -# 88| v88_3(Void) = ReturnVoid : -# 88| v88_4(Void) = AliasedUse : ~m? -# 88| v88_5(Void) = ExitFunction : - -# 93| Block 2 -# 93| r93_1(glval) = VariableAddress[x] : -# 93| r93_2(Int32) = Load[x] : &:r93_1, ~m? -# 93| r93_3(Int32) = Constant[1] : -# 93| r93_4(Int32) = Add : r93_2, r93_3 -# 93| r93_5(glval) = VariableAddress[x] : -# 93| mu93_6(Int32) = Store[x] : &:r93_5, r93_4 -# 95| r95_1(glval) = VariableAddress[x] : -# 95| r95_2(Int32) = Load[x] : &:r95_1, ~m? -# 95| r95_3(Int32) = Constant[10] : -# 95| r95_4(Boolean) = CompareLT : r95_2, r95_3 -# 95| v95_5(Void) = ConditionalBranch : r95_4 -#-----| False -> Block 1 -#-----| True (back edge) -> Block 2 - -# 98| System.Void test_stmts.checkedUnchecked() -# 98| Block 0 -# 98| v98_1(Void) = EnterFunction : -# 98| mu98_2() = AliasedDefinition : -# 100| r100_1(glval) = VariableAddress[num] : -# 100| r100_2(Int32) = Constant[2147483647] : -# 100| r100_3(Int32) = Load[?] : &:r100_2, ~m? -# 100| mu100_4(Int32) = Store[num] : &:r100_1, r100_3 -# 103| r103_1(glval) = VariableAddress[num] : -# 103| r103_2(Int32) = Load[num] : &:r103_1, ~m? -# 103| r103_3(Int32) = Constant[1] : -# 103| r103_4(Int32) = Add : r103_2, r103_3 -# 103| r103_5(glval) = VariableAddress[num] : -# 103| mu103_6(Int32) = Store[num] : &:r103_5, r103_4 -# 107| r107_1(glval) = VariableAddress[num] : -# 107| r107_2(Int32) = Load[num] : &:r107_1, ~m? -# 107| r107_3(Int32) = Constant[1] : -# 107| r107_4(Int32) = Add : r107_2, r107_3 -# 107| r107_5(glval) = VariableAddress[num] : -# 107| mu107_6(Int32) = Store[num] : &:r107_5, r107_4 -# 98| v98_3(Void) = ReturnVoid : -# 98| v98_4(Void) = AliasedUse : ~m? -# 98| v98_5(Void) = ExitFunction : - -using.cs: -# 7| System.Void UsingStmt.MyDisposable..ctor() -# 7| Block 0 -# 7| v7_1(Void) = EnterFunction : -# 7| mu7_2() = AliasedDefinition : -# 7| r7_3(glval) = InitializeThis : -# 7| r7_4(glval) = Convert[MyDisposable : Object] : r7_3 -# 7| r7_5() = FunctionAddress[Object] : -# 7| v7_6(Void) = Call[Object] : func:r7_5, this:r7_4 -# 7| mu7_7() = ^CallSideEffect : ~m? -# 7| v7_8(Void) = NoOp : -# 7| v7_9(Void) = ReturnVoid : -# 7| v7_10(Void) = AliasedUse : ~m? -# 7| v7_11(Void) = ExitFunction : - -# 8| System.Void UsingStmt.MyDisposable.DoSomething() -# 8| Block 0 -# 8| v8_1(Void) = EnterFunction : -# 8| mu8_2() = AliasedDefinition : -# 8| r8_3(glval) = InitializeThis : -# 8| v8_4(Void) = NoOp : -# 8| v8_5(Void) = ReturnVoid : -# 8| v8_6(Void) = AliasedUse : ~m? -# 8| v8_7(Void) = ExitFunction : - -# 9| System.Void UsingStmt.MyDisposable.Dispose() -# 9| Block 0 -# 9| v9_1(Void) = EnterFunction : -# 9| mu9_2() = AliasedDefinition : -# 9| r9_3(glval) = InitializeThis : -# 9| v9_4(Void) = NoOp : -# 9| v9_5(Void) = ReturnVoid : -# 9| v9_6(Void) = AliasedUse : ~m? -# 9| v9_7(Void) = ExitFunction : - -# 12| System.Void UsingStmt.Main() -# 12| Block 0 -# 12| v12_1(Void) = EnterFunction : -# 12| mu12_2() = AliasedDefinition : -# 14| r14_1(glval) = VariableAddress[o1] : -# 14| r14_2(MyDisposable) = NewObj : -# 14| r14_3() = FunctionAddress[MyDisposable] : -# 14| v14_4(Void) = Call[MyDisposable] : func:r14_3, this:r14_2 -# 14| mu14_5() = ^CallSideEffect : ~m? -# 14| mu14_6(MyDisposable) = Store[o1] : &:r14_1, r14_2 -# 16| r16_1(glval) = VariableAddress[o1] : -# 16| r16_2(MyDisposable) = Load[o1] : &:r16_1, ~m? -# 16| r16_3() = FunctionAddress[DoSomething] : -# 16| v16_4(Void) = Call[DoSomething] : func:r16_3, this:r16_2 -# 16| mu16_5() = ^CallSideEffect : ~m? -# 19| r19_1(glval) = VariableAddress[o2] : -# 19| r19_2(MyDisposable) = NewObj : -# 19| r19_3() = FunctionAddress[MyDisposable] : -# 19| v19_4(Void) = Call[MyDisposable] : func:r19_3, this:r19_2 -# 19| mu19_5() = ^CallSideEffect : ~m? -# 19| mu19_6(MyDisposable) = Store[o2] : &:r19_1, r19_2 -# 22| r22_1(glval) = VariableAddress[o2] : -# 22| r22_2(MyDisposable) = Load[o2] : &:r22_1, ~m? -# 22| r22_3() = FunctionAddress[DoSomething] : -# 22| v22_4(Void) = Call[DoSomething] : func:r22_3, this:r22_2 -# 22| mu22_5() = ^CallSideEffect : ~m? -# 25| r25_1(glval) = VariableAddress[o3] : -# 25| r25_2(MyDisposable) = NewObj : -# 25| r25_3() = FunctionAddress[MyDisposable] : -# 25| v25_4(Void) = Call[MyDisposable] : func:r25_3, this:r25_2 -# 25| mu25_5() = ^CallSideEffect : ~m? -# 25| mu25_6(MyDisposable) = Store[o3] : &:r25_1, r25_2 -# 26| r26_1(glval) = VariableAddress[o3] : -# 26| r26_2(MyDisposable) = Load[o3] : &:r26_1, ~m? -# 26| r26_3() = FunctionAddress[DoSomething] : -# 26| v26_4(Void) = Call[DoSomething] : func:r26_3, this:r26_2 -# 26| mu26_5() = ^CallSideEffect : ~m? -# 12| v12_3(Void) = ReturnVoid : -# 12| v12_4(Void) = AliasedUse : ~m? -# 12| v12_5(Void) = ExitFunction : - -variables.cs: -# 5| System.Void test_variables.f() -# 5| Block 0 -# 5| v5_1(Void) = EnterFunction : -# 5| mu5_2() = AliasedDefinition : -# 7| r7_1(glval) = VariableAddress[x] : -# 7| mu7_2(Int32) = Uninitialized[x] : &:r7_1 -# 7| r7_3(glval) = VariableAddress[y] : -# 7| r7_4(Int32) = Constant[5] : -# 7| mu7_5(Int32) = Store[y] : &:r7_3, r7_4 -# 8| r8_1(Int32) = Constant[4] : -# 8| r8_2(glval) = VariableAddress[x] : -# 8| mu8_3(Int32) = Store[x] : &:r8_2, r8_1 -# 9| r9_1(glval) = VariableAddress[y] : -# 9| r9_2(Int32) = Load[y] : &:r9_1, ~m? -# 9| r9_3(glval) = VariableAddress[x] : -# 9| mu9_4(Int32) = Store[x] : &:r9_3, r9_2 -# 10| r10_1(glval) = VariableAddress[z] : -# 10| r10_2(glval) = VariableAddress[y] : -# 10| r10_3(Int32) = Load[y] : &:r10_2, ~m? -# 10| mu10_4(Int32) = Store[z] : &:r10_1, r10_3 -# 5| v5_3(Void) = ReturnVoid : -# 5| v5_4(Void) = AliasedUse : ~m? -# 5| v5_5(Void) = ExitFunction : diff --git a/csharp/ql/test/experimental/ir/ir/raw_ir.qlref b/csharp/ql/test/experimental/ir/ir/raw_ir.qlref deleted file mode 100644 index 336afc397f5..00000000000 --- a/csharp/ql/test/experimental/ir/ir/raw_ir.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/ir/implementation/raw/PrintIR.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/ir/ir/raw_ir_consistency.expected b/csharp/ql/test/experimental/ir/ir/raw_ir_consistency.expected deleted file mode 100644 index 05ab9037c87..00000000000 --- a/csharp/ql/test/experimental/ir/ir/raw_ir_consistency.expected +++ /dev/null @@ -1,35 +0,0 @@ -missingOperand -unexpectedOperand -duplicateOperand -missingPhiOperand -missingOperandType -duplicateChiOperand -sideEffectWithoutPrimary -instructionWithoutSuccessor -ambiguousSuccessors -unexplainedLoop -unnecessaryPhiInstruction -memoryOperandDefinitionIsUnmodeled -operandAcrossFunctions -instructionWithoutUniqueBlock -containsLoopOfForwardEdges -lostReachability -backEdgeCountMismatch -useNotDominatedByDefinition -switchInstructionWithoutDefaultEdge -notMarkedAsConflated -wronglyMarkedAsConflated -invalidOverlap -nonUniqueEnclosingIRFunction -fieldAddressOnNonPointer -| inoutref.cs:18:9:18:13 | FieldAddress: access to field fld | FieldAddress instruction 'FieldAddress: access to field fld' has an object address operand that is not an address, in function '$@'. | inoutref.cs:16:17:16:17 | System.Void InOutRef.F(System.Int32,MyStruct,MyStruct,MyClass,MyClass) | System.Void InOutRef.F(System.Int32,MyStruct,MyStruct,MyClass,MyClass) | -| inoutref.cs:19:13:19:17 | FieldAddress: access to field fld | FieldAddress instruction 'FieldAddress: access to field fld' has an object address operand that is not an address, in function '$@'. | inoutref.cs:16:17:16:17 | System.Void InOutRef.F(System.Int32,MyStruct,MyStruct,MyClass,MyClass) | System.Void InOutRef.F(System.Int32,MyStruct,MyStruct,MyClass,MyClass) | -| pointers.cs:35:17:35:24 | FieldAddress: access to field fld | FieldAddress instruction 'FieldAddress: access to field fld' has an object address operand that is not an address, in function '$@'. | pointers.cs:25:17:25:20 | System.Void Pointers.Main() | System.Void Pointers.Main() | -thisArgumentIsNonPointer -| inoutref.cs:32:22:32:35 | Call: object creation of type MyStruct | Call instruction 'Call: object creation of type MyStruct' has a `this` argument operand that is not an address, in function '$@'. | inoutref.cs:29:17:29:20 | System.Void InOutRef.Main() | System.Void InOutRef.Main() | -| pointers.cs:27:22:27:35 | Call: object creation of type MyStruct | Call instruction 'Call: object creation of type MyStruct' has a `this` argument operand that is not an address, in function '$@'. | pointers.cs:25:17:25:20 | System.Void Pointers.Main() | System.Void Pointers.Main() | -nonUniqueIRVariable -missingCanonicalLanguageType -multipleCanonicalLanguageTypes -missingIRType -multipleIRTypes diff --git a/csharp/ql/test/experimental/ir/ir/raw_ir_consistency.qlref b/csharp/ql/test/experimental/ir/ir/raw_ir_consistency.qlref deleted file mode 100644 index 3059c9b7b77..00000000000 --- a/csharp/ql/test/experimental/ir/ir/raw_ir_consistency.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/ir/implementation/raw/IRConsistency.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/ir/ir/simple_call.cs b/csharp/ql/test/experimental/ir/ir/simple_call.cs deleted file mode 100644 index 7505bd8001c..00000000000 --- a/csharp/ql/test/experimental/ir/ir/simple_call.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; - -public class test_simple_call -{ - public static int f() - { - return 0; - } - - public int g() - { - return f(); - } -} diff --git a/csharp/ql/test/experimental/ir/ir/simple_function.cs b/csharp/ql/test/experimental/ir/ir/simple_function.cs deleted file mode 100644 index 76dade38fb6..00000000000 --- a/csharp/ql/test/experimental/ir/ir/simple_function.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; - -public class test_simple_function -{ - public static int f() - { - return 0; - } -} diff --git a/csharp/ql/test/experimental/ir/ir/stmts.cs b/csharp/ql/test/experimental/ir/ir/stmts.cs deleted file mode 100644 index db0b523a434..00000000000 --- a/csharp/ql/test/experimental/ir/ir/stmts.cs +++ /dev/null @@ -1,110 +0,0 @@ -using System; - -public class test_stmts -{ - public static int ifStmt(int x) - { - if (x == 5) - return 0; - else - return 1; - } - - public static void whileStmt(int x) - { - int i = 0; - while (i < 10) - { - x = x + 1; - } - } - - public static int switchStmt() - { - object caseSwitch = new object(); - int select = 0; - - switch (caseSwitch) - { - case -1: - goto case true; - case 0: - goto case "123"; - case "123": - select = 100; - break; - case true: - select = 101; - goto default; - default: - return select; - } - return 0; - } - - public static void tryCatchFinally() - { - int x = 5; - try - { - if (x != 0) - throw (new System.Exception()); - x = 0; - } - catch(System.Exception ex) - { - x = 1; - } - catch - { - throw; - } - finally - { - x = 2; - } - } - - public static void forStmt() - { - int x = 0; - for (int i = 0, j = 10; i < j; i++, j--) - { - x = x - 1; - } - - int a, b = 10; - for (a = 0; a < b; ) - { - a++; - } - - for( ; ; ) - { - - } - } - - public static void doWhile() - { - int x = 0; - do - { - x = x + 1; - } - while (x < 10); - } - - public static void checkedUnchecked() - { - int num = Int32.MaxValue; - unchecked - { - num = num + 1; - } - checked - { - num = num + 1; - } - } -} diff --git a/csharp/ql/test/experimental/ir/ir/unaliased_ssa_consistency.expected b/csharp/ql/test/experimental/ir/ir/unaliased_ssa_consistency.expected deleted file mode 100644 index 05ab9037c87..00000000000 --- a/csharp/ql/test/experimental/ir/ir/unaliased_ssa_consistency.expected +++ /dev/null @@ -1,35 +0,0 @@ -missingOperand -unexpectedOperand -duplicateOperand -missingPhiOperand -missingOperandType -duplicateChiOperand -sideEffectWithoutPrimary -instructionWithoutSuccessor -ambiguousSuccessors -unexplainedLoop -unnecessaryPhiInstruction -memoryOperandDefinitionIsUnmodeled -operandAcrossFunctions -instructionWithoutUniqueBlock -containsLoopOfForwardEdges -lostReachability -backEdgeCountMismatch -useNotDominatedByDefinition -switchInstructionWithoutDefaultEdge -notMarkedAsConflated -wronglyMarkedAsConflated -invalidOverlap -nonUniqueEnclosingIRFunction -fieldAddressOnNonPointer -| inoutref.cs:18:9:18:13 | FieldAddress: access to field fld | FieldAddress instruction 'FieldAddress: access to field fld' has an object address operand that is not an address, in function '$@'. | inoutref.cs:16:17:16:17 | System.Void InOutRef.F(System.Int32,MyStruct,MyStruct,MyClass,MyClass) | System.Void InOutRef.F(System.Int32,MyStruct,MyStruct,MyClass,MyClass) | -| inoutref.cs:19:13:19:17 | FieldAddress: access to field fld | FieldAddress instruction 'FieldAddress: access to field fld' has an object address operand that is not an address, in function '$@'. | inoutref.cs:16:17:16:17 | System.Void InOutRef.F(System.Int32,MyStruct,MyStruct,MyClass,MyClass) | System.Void InOutRef.F(System.Int32,MyStruct,MyStruct,MyClass,MyClass) | -| pointers.cs:35:17:35:24 | FieldAddress: access to field fld | FieldAddress instruction 'FieldAddress: access to field fld' has an object address operand that is not an address, in function '$@'. | pointers.cs:25:17:25:20 | System.Void Pointers.Main() | System.Void Pointers.Main() | -thisArgumentIsNonPointer -| inoutref.cs:32:22:32:35 | Call: object creation of type MyStruct | Call instruction 'Call: object creation of type MyStruct' has a `this` argument operand that is not an address, in function '$@'. | inoutref.cs:29:17:29:20 | System.Void InOutRef.Main() | System.Void InOutRef.Main() | -| pointers.cs:27:22:27:35 | Call: object creation of type MyStruct | Call instruction 'Call: object creation of type MyStruct' has a `this` argument operand that is not an address, in function '$@'. | pointers.cs:25:17:25:20 | System.Void Pointers.Main() | System.Void Pointers.Main() | -nonUniqueIRVariable -missingCanonicalLanguageType -multipleCanonicalLanguageTypes -missingIRType -multipleIRTypes diff --git a/csharp/ql/test/experimental/ir/ir/unaliased_ssa_consistency.qlref b/csharp/ql/test/experimental/ir/ir/unaliased_ssa_consistency.qlref deleted file mode 100644 index 65c39482529..00000000000 --- a/csharp/ql/test/experimental/ir/ir/unaliased_ssa_consistency.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/ir/implementation/unaliased_ssa/IRConsistency.ql diff --git a/csharp/ql/test/experimental/ir/ir/unaliased_ssa_ssa_consistency.expected b/csharp/ql/test/experimental/ir/ir/unaliased_ssa_ssa_consistency.expected deleted file mode 100644 index 21782bd5ef1..00000000000 --- a/csharp/ql/test/experimental/ir/ir/unaliased_ssa_ssa_consistency.expected +++ /dev/null @@ -1,3 +0,0 @@ -multipleOperandMemoryLocations -missingVirtualVariableForMemoryLocation -multipleVirtualVariablesForMemoryLocation diff --git a/csharp/ql/test/experimental/ir/ir/unaliased_ssa_ssa_consistency.qlref b/csharp/ql/test/experimental/ir/ir/unaliased_ssa_ssa_consistency.qlref deleted file mode 100644 index 8d24936ecea..00000000000 --- a/csharp/ql/test/experimental/ir/ir/unaliased_ssa_ssa_consistency.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/ir/implementation/unaliased_ssa/internal/SSAConsistency.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/ir/ir/using.cs b/csharp/ql/test/experimental/ir/ir/using.cs deleted file mode 100644 index f81b2f128f1..00000000000 --- a/csharp/ql/test/experimental/ir/ir/using.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; - -class UsingStmt -{ - public class MyDisposable : IDisposable - { - public MyDisposable() { } - public void DoSomething() { } - public void Dispose() { } - } - - static void Main() - { - using (var o1 = new MyDisposable()) - { - o1.DoSomething(); - } - - var o2 = new MyDisposable(); - using (o2) - { - o2.DoSomething(); - } - - using var o3 = new MyDisposable(); - o3.DoSomething(); - } -} diff --git a/csharp/ql/test/experimental/ir/ir/variables.cs b/csharp/ql/test/experimental/ir/ir/variables.cs deleted file mode 100644 index 1855f287190..00000000000 --- a/csharp/ql/test/experimental/ir/ir/variables.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; - -public class test_variables -{ - public static void f() - { - int x, y = 5; - x = 4; - x = y; - int z = y; - } -} diff --git a/csharp/ql/test/experimental/ir/offbyone/OffByOneRA.expected b/csharp/ql/test/experimental/ir/offbyone/OffByOneRA.expected deleted file mode 100644 index 0c16c9ff134..00000000000 --- a/csharp/ql/test/experimental/ir/offbyone/OffByOneRA.expected +++ /dev/null @@ -1,5 +0,0 @@ -| test.cs:21:17:21:21 | Test2 | test.cs:34:41:34:51 | access to array element | This array access might be out of bounds, as the index might be equal to the array length | -| test.cs:56:17:56:21 | Test4 | test.cs:67:41:67:51 | access to array element | This array access might be out of bounds, as the index might be equal to the array length | -| test.cs:71:17:71:21 | Test5 | test.cs:77:22:77:27 | access to indexer | This array access might be out of bounds, as the index might be equal to the array length | -| test.cs:81:17:81:21 | Test6 | test.cs:90:41:90:55 | access to array element | This array access might be out of bounds, as the index might be equal to the array length | -| test.cs:94:17:94:21 | Test7 | test.cs:104:41:104:50 | access to array element | This array access might be out of bounds, as the index might be equal to the array length + 1 | diff --git a/csharp/ql/test/experimental/ir/offbyone/OffByOneRA.ql b/csharp/ql/test/experimental/ir/offbyone/OffByOneRA.ql deleted file mode 100644 index 38386d47568..00000000000 --- a/csharp/ql/test/experimental/ir/offbyone/OffByOneRA.ql +++ /dev/null @@ -1,50 +0,0 @@ -import csharp -import experimental.ir.IR -import experimental.ir.rangeanalysis.RangeAnalysis -import experimental.ir.rangeanalysis.RangeUtils - -/** - * Holds if the index expression of `aa` is less than or equal to the array length plus `k`. - */ -predicate boundedArrayAccess(ElementAccess aa, int k) { - exists(Instruction index, Instruction usage, Bound b, int delta | - ( - // indexer access - usage.(CallInstruction).getAst() = aa - or - // array access - usage.(PointerAddInstruction).getAst() = aa - ) and - usage.getAnOperand().getDef() = index and - boundedInstruction(index, b, delta, true, _) - | - exists(PropertyAccess pa | - k = delta and - b.getInstruction().getAst() = pa and - pa.getProperty().getName() = "Length" and - pa.(QualifiableExpr).getQualifier().(VariableAccess).getTarget() = - aa.getQualifier().(VariableAccess).getTarget() - ) - or - b instanceof ZeroBound and - k = delta - getArrayDim(aa.getQualifier().(VariableAccess).getTarget()) - ) -} - -/** - * Holds if the index expression is less than or equal to the array length plus `k`, - * but not necessarily less than or equal to the array length plus `k-1`. - */ -predicate bestArrayAccessBound(ElementAccess aa, int k) { - k = min(int k0 | boundedArrayAccess(aa, k0)) -} - -from ElementAccess aa, int k, string msg, string add -where - bestArrayAccessBound(aa, k) and - k >= 0 and - (if k = 0 then add = "" else add = " + " + k) and - msg = - "This array access might be out of bounds, as the index might be equal to the array length" + - add -select aa.getEnclosingCallable(), aa, msg diff --git a/csharp/ql/test/experimental/ir/offbyone/null.cs b/csharp/ql/test/experimental/ir/offbyone/null.cs deleted file mode 100644 index a1d7adf1511..00000000000 --- a/csharp/ql/test/experimental/ir/offbyone/null.cs +++ /dev/null @@ -1,5 +0,0 @@ -class Null { - public static void Main() { - object o = null; - } -} diff --git a/csharp/ql/test/experimental/ir/offbyone/test.cs b/csharp/ql/test/experimental/ir/offbyone/test.cs deleted file mode 100644 index 74bf155420f..00000000000 --- a/csharp/ql/test/experimental/ir/offbyone/test.cs +++ /dev/null @@ -1,107 +0,0 @@ -class ContainerLengthOffByOne -{ - public int[] arr; - public string str; - - public static void Fun(int elem) - { - } - - public void Test1() - { - int len1 = this.arr.Length; - int len2 = len1 + 1; - // OK - for(int i = 0; i < len2 - 1; i++) - { - ContainerLengthOffByOne.Fun(this.arr[i]); - } - } - - public void Test2() - { - int len1 = this.arr.Length; - - int len2; - if (len1 % 2 == 0) - len2 = len1 + 1; - else - len2 = len1; - // Not OK, PHI node where the upper bound - // exceeds the size of the array. - for(int i = 0; i < len2; i++) - { - ContainerLengthOffByOne.Fun(this.arr[i]); - } - } - - public void Test3() - { - int len1 = this.arr.Length; - int len2 = len1 - 1; - - int len3; - if (len2 % 2 == 0) - len3 = len2 + 1; - else - len3 = len2; - // OK, PHI node has bounds that ensure - // we don't get an off by one error. - for(int i = 0; i < len3; i++) - { - ContainerLengthOffByOne.Fun(this.arr[i]); - } - } - - public void Test4() - { - int len1 = this.arr.Length; - - int len2 = len1 + 1; - int len3 = len2 - 1; - int len4 = len3 + 2; - int len5 = len4 - 1; - // Not OK, len5 is off by one. - for(int i = 0; i < len5; i++) - { - ContainerLengthOffByOne.Fun(this.arr[i]); - } - } - - public void Test5() - { - int len = this.str.Length; - // Not OK; test for indexers - for (int i = 0; i <= len; i++) - { - char c = str[i]; - } - } - - public void Test6() - { - int len = this.arr.Length - 2; - int len1 = len + 3; - int len2 = len1 - 1; - // Not OK, off by one - // The test shows that more complex expressions are treated correctly - for (int i = 0; i < len2; i++) - { - ContainerLengthOffByOne.Fun(this.arr[i + 1]); - } - } - - public void Test7() - { - int[] arrInit = { 1, 2, 3 }; - int len = (arrInit.Length * 2 + 2) / 2 * 2; - int len1 = len / 2 - 3 + 4; - // Not OK, len1 == this.arrInit + 1 - // This test shows that array initializer's length - // are used in bounds - for (int i = 0; i < len1; i++) - { - ContainerLengthOffByOne.Fun(arrInit[i]); - } - } -} diff --git a/csharp/ql/test/experimental/ir/rangeanalysis/RangeAnalysis.expected b/csharp/ql/test/experimental/ir/rangeanalysis/RangeAnalysis.expected deleted file mode 100644 index 329bbd3bff0..00000000000 --- a/csharp/ql/test/experimental/ir/rangeanalysis/RangeAnalysis.expected +++ /dev/null @@ -1,18 +0,0 @@ -| test.cs:22:12:22:12 | Store: access to parameter x | test.cs:16:24:16:24 | InitializeParameter: x | 0 | false | NoReason | file://:0:0:0:0 | :0:0:0:0 | -| test.cs:22:12:22:12 | Store: access to parameter x | test.cs:16:31:16:31 | InitializeParameter: y | 0 | false | CompareLT: ... < ... | test.cs:18:9:18:13 | test.cs:18:9:18:13 | -| test.cs:22:12:22:12 | Store: access to parameter x | test.cs:16:31:16:31 | InitializeParameter: y | 0 | false | NoReason | file://:0:0:0:0 | :0:0:0:0 | -| test.cs:36:12:36:12 | Store: access to parameter x | test.cs:26:24:26:24 | InitializeParameter: x | -2 | false | NoReason | file://:0:0:0:0 | :0:0:0:0 | -| test.cs:36:12:36:12 | Store: access to parameter x | test.cs:26:31:26:31 | InitializeParameter: y | -2 | false | CompareLT: ... < ... | test.cs:28:9:28:13 | test.cs:28:9:28:13 | -| test.cs:45:12:45:12 | Load: access to local variable i | file://:0:0:0:0 | 0 | 0 | false | NoReason | file://:0:0:0:0 | :0:0:0:0 | -| test.cs:45:12:45:12 | Load: access to local variable i | test.cs:40:25:40:25 | InitializeParameter: x | -1 | true | CompareLT: ... < ... | test.cs:43:20:43:24 | test.cs:43:20:43:24 | -| test.cs:49:12:49:12 | Load: access to local variable i | file://:0:0:0:0 | 0 | 1 | false | CompareGT: ... > ... | test.cs:47:20:47:24 | test.cs:47:20:47:24 | -| test.cs:49:12:49:12 | Load: access to local variable i | test.cs:40:25:40:25 | InitializeParameter: x | 0 | true | NoReason | file://:0:0:0:0 | :0:0:0:0 | -| test.cs:49:12:49:12 | Load: access to local variable i | test.cs:43:20:43:20 | Phi: access to local variable i | 0 | true | CompareLT: ... < ... | test.cs:43:20:43:24 | test.cs:43:20:43:24 | -| test.cs:53:12:53:12 | Load: access to local variable i | file://:0:0:0:0 | 0 | 0 | false | NoReason | file://:0:0:0:0 | :0:0:0:0 | -| test.cs:53:12:53:12 | Load: access to local variable i | test.cs:40:25:40:25 | InitializeParameter: x | 1 | true | CompareLT: ... < ... | test.cs:51:20:51:28 | test.cs:51:20:51:28 | -| test.cs:53:12:53:12 | Load: access to local variable i | test.cs:43:20:43:20 | Phi: access to local variable i | 1 | true | CompareLT: ... < ... | test.cs:51:20:51:28 | test.cs:51:20:51:28 | -| test.cs:53:12:53:12 | Load: access to local variable i | test.cs:47:20:47:20 | Phi: access to local variable i | 0 | false | CompareGT: ... > ... | test.cs:47:20:47:24 | test.cs:47:20:47:24 | -| test.cs:62:13:62:17 | Load: access to parameter begin | test.cs:58:33:58:37 | InitializeParameter: begin | 0 | false | NoReason | file://:0:0:0:0 | :0:0:0:0 | -| test.cs:74:14:74:14 | Load: access to parameter x | test.cs:68:32:68:32 | InitializeParameter: y | -1 | true | CompareLT: ... < ... | test.cs:72:11:72:15 | test.cs:72:11:72:15 | -| test.cs:74:14:74:14 | Load: access to parameter x | test.cs:68:39:68:39 | InitializeParameter: z | -2 | true | CompareLT: ... < ... | test.cs:72:11:72:15 | test.cs:72:11:72:15 | -| test.cs:81:14:81:14 | Load: access to parameter x | test.cs:68:32:68:32 | InitializeParameter: y | -1 | true | CompareLT: ... < ... | test.cs:77:9:77:13 | test.cs:77:9:77:13 | diff --git a/csharp/ql/test/experimental/ir/rangeanalysis/RangeAnalysis.ql b/csharp/ql/test/experimental/ir/rangeanalysis/RangeAnalysis.ql deleted file mode 100644 index ab62db5e5ff..00000000000 --- a/csharp/ql/test/experimental/ir/rangeanalysis/RangeAnalysis.ql +++ /dev/null @@ -1,25 +0,0 @@ -import experimental.ir.rangeanalysis.RangeAnalysis -import experimental.ir.IR -import experimental.ir.internal.IRGuards -import experimental.ir.ValueNumbering - -query predicate instructionBounds( - Instruction i, Bound b, int delta, boolean upper, Reason reason, Location reasonLoc -) { - ( - i.getAUse() instanceof ArgumentOperand - or - exists(ReturnValueInstruction retInstr | retInstr.getReturnValueOperand() = i.getAUse()) - ) and - ( - upper = true and - delta = min(int d | boundedInstruction(i, b, d, upper, reason)) - or - upper = false and - delta = max(int d | boundedInstruction(i, b, d, upper, reason)) - ) and - not valueNumber(b.getInstruction()) = valueNumber(i) and - if reason instanceof CondReason - then reasonLoc = reason.(CondReason).getCond().getLocation() - else reasonLoc instanceof EmptyLocation -} diff --git a/csharp/ql/test/experimental/ir/rangeanalysis/null.cs b/csharp/ql/test/experimental/ir/rangeanalysis/null.cs deleted file mode 100644 index a1d7adf1511..00000000000 --- a/csharp/ql/test/experimental/ir/rangeanalysis/null.cs +++ /dev/null @@ -1,5 +0,0 @@ -class Null { - public static void Main() { - object o = null; - } -} diff --git a/csharp/ql/test/experimental/ir/rangeanalysis/test.cs b/csharp/ql/test/experimental/ir/rangeanalysis/test.cs deleted file mode 100644 index 018d7b76a59..00000000000 --- a/csharp/ql/test/experimental/ir/rangeanalysis/test.cs +++ /dev/null @@ -1,85 +0,0 @@ -class RangeAnalysis { - static void Sink(int val) - { - } - - static unsafe void Sinkp(int* p) - { - } - - static int Source() - { - return 0; - } - - // Guards, inference, critical edges - static int Test1(int x, int y) - { - if (x < y) - { - x = y; - } - return x; - } - - // Bounds mergers at phi nodes - static int Test2(int x, int y) - { - if (x < y) - { - x = y; - } - else - { - x = x - 2; - } - return x; - } - - // for loops - static void Test3(int x) - { - int y = x; - for(int i = 0; i < x; i++) - { - Sink(i); - } - for(int i = y; i > 0; i--) - { - Sink(i); - } - for(int i = 0; i < y + 2; i++) - { - Sink(i); - } - } - - // pointer bounds - unsafe static void Test4(int *begin, int *end) - { - while (begin < end) - { - Sinkp(begin); - begin++; - } - } - - // bound propagation through conditionals - static void Test5(int x, int y, int z) - { - if (y < z) - { - if (x < y) - { - Sink(x); - } - } - if (x < y) - { - if (y < z) - { - Sink(x); // x < z is not inferred here - } - } - } -} diff --git a/csharp/ql/test/library-tests/cil/attributes/Test.cs b/csharp/ql/test/library-tests/cil/attributes/Test.cs deleted file mode 100644 index 2dfba697682..00000000000 --- a/csharp/ql/test/library-tests/cil/attributes/Test.cs +++ /dev/null @@ -1,5 +0,0 @@ -using System; - -class Test -{ -} diff --git a/csharp/ql/test/library-tests/cil/attributes/attribute.expected b/csharp/ql/test/library-tests/cil/attributes/attribute.expected deleted file mode 100644 index 0be9130404a..00000000000 --- a/csharp/ql/test/library-tests/cil/attributes/attribute.expected +++ /dev/null @@ -1,14750 +0,0 @@ -attrNoArg -| !0 | [AllowNullAttribute(...)] | -| !0 | [DisallowNullAttribute(...)] | -| !0 | [IsReadOnlyAttribute(...)] | -| !0 | [NotNullAttribute(...)] | -| !0 | [RequiresLocationAttribute(...)] | -| !0 | [ScopedRefAttribute(...)] | -| !0 System.Activator.CreateInstance`1() | [IntrinsicAttribute(...)] | -| !0 System.Collections.Concurrent.ConcurrentQueue`1.d__26.get_Current() | [DebuggerHiddenAttribute(...)] | -| !0 System.Collections.Concurrent.SingleProducerSingleConsumerQueue`1.d__15.get_Current() | [DebuggerHiddenAttribute(...)] | -| !0 System.Nullable`1.GetValueOrDefault(!0) | [IsReadOnlyAttribute(...)] | -| !0 System.Nullable`1.GetValueOrDefault(!0) | [NonVersionableAttribute(...)] | -| !0 System.Nullable`1.GetValueOrDefault() | [IsReadOnlyAttribute(...)] | -| !0 System.Nullable`1.GetValueOrDefault() | [NonVersionableAttribute(...)] | -| !0 System.Nullable`1.get_Value() | [IsReadOnlyAttribute(...)] | -| !0 System.Nullable`1.op_Explicit(System.Nullable) | [NonVersionableAttribute(...)] | -| !0 System.Numerics.Vector.Dot`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| !0 System.Numerics.Vector.GetElementUnsafe`1(System.Numerics.Vector,System.Int32) | [ExtensionAttribute(...)] | -| !0 System.Numerics.Vector.GetElement`1(System.Numerics.Vector,System.Int32) | [ExtensionAttribute(...)] | -| !0 System.Numerics.Vector.GetElement`1(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| !0 System.Numerics.Vector.Sum`1(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| !0 System.Numerics.Vector.ToScalar`1(System.Numerics.Vector) | [ExtensionAttribute(...)] | -| !0 System.Numerics.Vector.ToScalar`1(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| !0 System.Numerics.Vector`1.get_Item(System.Int32) | [IntrinsicAttribute(...)] | -| !0 System.ReadOnlySpan`1.Enumerator.Current | [IsReadOnlyAttribute(...)] | -| !0 System.ReadOnlySpan`1.Item | [IsReadOnlyAttribute(...)] | -| !0 System.ReadOnlySpan`1.get_Item(System.Int32) | [IntrinsicAttribute(...)] | -| !0 System.ReadOnlySpan`1.get_Item(System.Int32) | [NonVersionableAttribute(...)] | -| !0 System.Reflection.CustomAttributeExtensions.GetCustomAttribute`1(System.Reflection.Assembly) | [ExtensionAttribute(...)] | -| !0 System.Reflection.CustomAttributeExtensions.GetCustomAttribute`1(System.Reflection.MemberInfo) | [ExtensionAttribute(...)] | -| !0 System.Reflection.CustomAttributeExtensions.GetCustomAttribute`1(System.Reflection.MemberInfo,System.Boolean) | [ExtensionAttribute(...)] | -| !0 System.Reflection.CustomAttributeExtensions.GetCustomAttribute`1(System.Reflection.Module) | [ExtensionAttribute(...)] | -| !0 System.Reflection.CustomAttributeExtensions.GetCustomAttribute`1(System.Reflection.ParameterInfo) | [ExtensionAttribute(...)] | -| !0 System.Reflection.CustomAttributeExtensions.GetCustomAttribute`1(System.Reflection.ParameterInfo,System.Boolean) | [ExtensionAttribute(...)] | -| !0 System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult() | [StackTraceHiddenAttribute(...)] | -| !0 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() | [StackTraceHiddenAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.AddByteOffset`1(!0,System.IntPtr) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.AddByteOffset`1(!0,System.IntPtr) | [NonVersionableAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.AddByteOffset`1(!0,System.UIntPtr) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.AddByteOffset`1(!0,System.UIntPtr) | [NonVersionableAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.Add`1(!0,System.Int32) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.Add`1(!0,System.Int32) | [NonVersionableAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.Add`1(!0,System.IntPtr) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.Add`1(!0,System.IntPtr) | [NonVersionableAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.Add`1(!0,System.UIntPtr) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.Add`1(!0,System.UIntPtr) | [NonVersionableAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.AsRef`1(!0) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.AsRef`1(!0) | [NonVersionableAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.AsRef`1(System.Void*) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.AsRef`1(System.Void*) | [NonVersionableAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.As`1(System.Object) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.As`1(System.Object) | [NonVersionableAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.NullRef`1() | [IntrinsicAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.NullRef`1() | [NonVersionableAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.ReadUnaligned`1(System.Byte) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.ReadUnaligned`1(System.Byte) | [NonVersionableAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.ReadUnaligned`1(System.Void*) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.ReadUnaligned`1(System.Void*) | [NonVersionableAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.Read`1(System.Void*) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.Read`1(System.Void*) | [NonVersionableAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.SubtractByteOffset`1(!0,System.IntPtr) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.SubtractByteOffset`1(!0,System.IntPtr) | [NonVersionableAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.SubtractByteOffset`1(!0,System.UIntPtr) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.SubtractByteOffset`1(!0,System.UIntPtr) | [NonVersionableAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.Subtract`1(!0,System.Int32) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.Subtract`1(!0,System.Int32) | [NonVersionableAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.Subtract`1(!0,System.IntPtr) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.Subtract`1(!0,System.IntPtr) | [NonVersionableAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.Subtract`1(!0,System.UIntPtr) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.Subtract`1(!0,System.UIntPtr) | [NonVersionableAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.Unbox`1(System.Object) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.CompilerServices.Unsafe.Unbox`1(System.Object) | [NonVersionableAttribute(...)] | -| !0 System.Runtime.InteropServices.MemoryMarshal.<g__FromArray\|18_2>d`1.get_Current() | [DebuggerHiddenAttribute(...)] | -| !0 System.Runtime.InteropServices.MemoryMarshal.<g__FromMemoryManager\|18_1>d`1.get_Current() | [DebuggerHiddenAttribute(...)] | -| !0 System.Runtime.InteropServices.MemoryMarshal.GetArrayDataReference`1(!0[]) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.InteropServices.MemoryMarshal.GetArrayDataReference`1(!0[]) | [NonVersionableAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector64.Dot`1(System.Runtime.Intrinsics.Vector64,System.Runtime.Intrinsics.Vector64) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector64.GetElementUnsafe`1(System.Runtime.Intrinsics.Vector64,System.Int32) | [ExtensionAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector64.GetElement`1(System.Runtime.Intrinsics.Vector64,System.Int32) | [ExtensionAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector64.GetElement`1(System.Runtime.Intrinsics.Vector64,System.Int32) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector64.Sum`1(System.Runtime.Intrinsics.Vector64) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector64.ToScalar`1(System.Runtime.Intrinsics.Vector64) | [ExtensionAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector64.ToScalar`1(System.Runtime.Intrinsics.Vector64) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector128.Dot`1(System.Runtime.Intrinsics.Vector128,System.Runtime.Intrinsics.Vector128) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector128.GetElementUnsafe`1(System.Runtime.Intrinsics.Vector128,System.Int32) | [ExtensionAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector128.GetElement`1(System.Runtime.Intrinsics.Vector128,System.Int32) | [ExtensionAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector128.GetElement`1(System.Runtime.Intrinsics.Vector128,System.Int32) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector128.Sum`1(System.Runtime.Intrinsics.Vector128) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector128.ToScalar`1(System.Runtime.Intrinsics.Vector128) | [ExtensionAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector128.ToScalar`1(System.Runtime.Intrinsics.Vector128) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector256.Dot`1(System.Runtime.Intrinsics.Vector256,System.Runtime.Intrinsics.Vector256) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector256.GetElementUnsafe`1(System.Runtime.Intrinsics.Vector256,System.Int32) | [ExtensionAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector256.GetElement`1(System.Runtime.Intrinsics.Vector256,System.Int32) | [ExtensionAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector256.GetElement`1(System.Runtime.Intrinsics.Vector256,System.Int32) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector256.Sum`1(System.Runtime.Intrinsics.Vector256) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector256.ToScalar`1(System.Runtime.Intrinsics.Vector256) | [ExtensionAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector256.ToScalar`1(System.Runtime.Intrinsics.Vector256) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector512.Dot`1(System.Runtime.Intrinsics.Vector512,System.Runtime.Intrinsics.Vector512) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector512.GetElementUnsafe`1(System.Runtime.Intrinsics.Vector512,System.Int32) | [ExtensionAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector512.GetElement`1(System.Runtime.Intrinsics.Vector512,System.Int32) | [ExtensionAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector512.GetElement`1(System.Runtime.Intrinsics.Vector512,System.Int32) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector512.Sum`1(System.Runtime.Intrinsics.Vector512) | [IntrinsicAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector512.ToScalar`1(System.Runtime.Intrinsics.Vector512) | [ExtensionAttribute(...)] | -| !0 System.Runtime.Intrinsics.Vector512.ToScalar`1(System.Runtime.Intrinsics.Vector512) | [IntrinsicAttribute(...)] | -| !0 System.Span`1.get_Item(System.Int32) | [IntrinsicAttribute(...)] | -| !0 System.Span`1.get_Item(System.Int32) | [NonVersionableAttribute(...)] | -| !0 System.Threading.AsyncLocalValueChangedArgs`1.get_CurrentValue() | [CompilerGeneratedAttribute(...)] | -| !0 System.Threading.AsyncLocalValueChangedArgs`1.get_PreviousValue() | [CompilerGeneratedAttribute(...)] | -| !0 System.Threading.Interlocked.CompareExchange`1(!0,!0,!0) | [IntrinsicAttribute(...)] | -| !0 System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1.GetResult(System.Int16) | [StackTraceHiddenAttribute(...)] | -| !0 System.Threading.Tasks.TaskAsyncEnumerableExtensions.d__3`1.get_Current() | [DebuggerHiddenAttribute(...)] | -| !0 System.Threading.Volatile.Read`1(!0) | [IntrinsicAttribute(...)] | -| !0 System.Threading.Volatile.Read`1(!0) | [NonVersionableAttribute(...)] | -| !0* | [ScopedRefAttribute(...)] | -| !0[] | [NotNullAttribute(...)] | -| !1 System.Collections.Generic.CollectionExtensions.GetValueOrDefault`2(System.Collections.Generic.IReadOnlyDictionary,!0) | [ExtensionAttribute(...)] | -| !1 System.Collections.Generic.CollectionExtensions.GetValueOrDefault`2(System.Collections.Generic.IReadOnlyDictionary,!0,!1) | [ExtensionAttribute(...)] | -| !1 System.Runtime.CompilerServices.Unsafe.As`2(!0) | [IntrinsicAttribute(...)] | -| !1 System.Runtime.CompilerServices.Unsafe.As`2(!0) | [NonVersionableAttribute(...)] | -| !1 System.Runtime.CompilerServices.Unsafe.BitCast`2(!0) | [IntrinsicAttribute(...)] | -| !1 System.Runtime.CompilerServices.Unsafe.BitCast`2(!0) | [NonVersionableAttribute(...)] | -| | [CompilerGeneratedAttribute(...)] | -| Internal.PaddingFor32 | [IsReadOnlyAttribute(...)] | -| Internal.Runtime.InteropServices.ComponentActivator.<>c__DisplayClass15_0 | [CompilerGeneratedAttribute(...)] | -| Internal.Runtime.InteropServices.ComponentActivator.k__BackingField | [CompilerGeneratedAttribute(...)] | -| Interop.ErrorInfo InteropErrorExtensions.Info(Interop.Error) | [ExtensionAttribute(...)] | -| Interop.Globalization.ResultCode Interop.Globalization.g____PInvoke\|1_0(System.UInt16*,System.Globalization.CalendarId,System.Globalization.CalendarDataType,System.Char*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| Interop.Globalization.ResultCode Interop.Globalization.g____PInvoke\|10_0(System.Byte*,System.IntPtr*) | [CompilerGeneratedAttribute(...)] | -| Interop.Globalization.ResultCode Interop.Globalization.g____PInvoke\|41_0(System.UInt16*,System.UInt16*,Interop.Globalization.TimeZoneDisplayNameType,System.Char*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| Interop.Globalization.ResultCode Interop.Globalization.GetCalendarInfo(System.String,System.Globalization.CalendarId,System.Globalization.CalendarDataType,System.Char*,System.Int32) | [LibraryImportAttribute(...)] | -| Interop.Globalization.ResultCode Interop.Globalization.GetSortHandle(System.String,System.IntPtr) | [LibraryImportAttribute(...)] | -| Interop.Globalization.ResultCode Interop.Globalization.GetTimeZoneDisplayName(System.String,System.String,Interop.Globalization.TimeZoneDisplayNameType,System.Char*,System.Int32) | [LibraryImportAttribute(...)] | -| Interop.PollEvents | [FlagsAttribute(...)] | -| Interop.Sys.WinSize | [IsReadOnlyAttribute(...)] | -| InteropErrorExtensions | [ExtensionAttribute(...)] | -| Microsoft.Win32.SafeHandles.SafeFileHandle.k__BackingField | [CompilerGeneratedAttribute(...)] | -| Microsoft.Win32.SafeHandles.SafeFileHandle.k__BackingField | [CompilerGeneratedAttribute(...)] | -| Microsoft.Win32.SafeHandles.SafeFileHandle.ThreadPoolValueTaskSource.<>c | [CompilerGeneratedAttribute(...)] | -| Microsoft.Win32.SafeHandles.SafeFileHandle.t_lastCloseErrorInfo | [ThreadStaticAttribute(...)] | -| Microsoft.Win32.SafeHandles.SafeWaitHandle | [AllowNullAttribute(...)] | -| Microsoft.Win32.SafeHandles.SafeWaitHandle Interop.Kernel32.CreateEventEx(System.IntPtr,System.String,System.UInt32,System.UInt32) | [LibraryImportAttribute(...)] | -| Microsoft.Win32.SafeHandles.SafeWaitHandle Interop.Kernel32.CreateMutexEx(System.IntPtr,System.String,System.UInt32,System.UInt32) | [LibraryImportAttribute(...)] | -| Microsoft.Win32.SafeHandles.SafeWaitHandle Interop.Kernel32.CreateSemaphoreEx(System.IntPtr,System.Int32,System.Int32,System.String,System.UInt32,System.UInt32) | [LibraryImportAttribute(...)] | -| Microsoft.Win32.SafeHandles.SafeWaitHandle Interop.Kernel32.OpenMutex(System.UInt32,System.Boolean,System.String) | [LibraryImportAttribute(...)] | -| Microsoft.Win32.SafeHandles.SafeWaitHandle System.Threading.RegisteredWaitHandle.get_UserUnregisterWaitHandle() | [CompilerGeneratedAttribute(...)] | -| Microsoft.Win32.SafeHandles.SafeWaitHandle System.Threading.WaitHandleExtensions.GetSafeWaitHandle(System.Threading.WaitHandle) | [ExtensionAttribute(...)] | -| System.Action System.Runtime.InteropServices.PosixSignalRegistration.Token.get_Handler() | [CompilerGeneratedAttribute(...)] | -| System.AppContext.FirstChanceException | [CompilerGeneratedAttribute(...)] | -| System.AppContext.ProcessExit | [CompilerGeneratedAttribute(...)] | -| System.AppContext.UnhandledException | [CompilerGeneratedAttribute(...)] | -| System.AppDomain.DomainUnload | [CompilerGeneratedAttribute(...)] | -| System.AppDomain.ReflectionOnlyAssemblyResolve | [CompilerGeneratedAttribute(...)] | -| System.ApplicationId.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.ApplicationId.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.ApplicationId.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.ApplicationId.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.ArgIterator | [IsByRefLikeAttribute(...)] | -| System.Array.SorterGenericArray | [IsReadOnlyAttribute(...)] | -| System.Array.SorterObjectArray | [IsReadOnlyAttribute(...)] | -| System.ArraySegment System.ArraySegment`1.get_Empty() | [CompilerGeneratedAttribute(...)] | -| System.ArraySegment`1 | [IsReadOnlyAttribute(...)] | -| System.ArraySegment`1.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.AssemblyLoadEventArgs.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Attribute System.Reflection.CustomAttributeExtensions.GetCustomAttribute(System.Reflection.Assembly,System.Type) | [ExtensionAttribute(...)] | -| System.Attribute System.Reflection.CustomAttributeExtensions.GetCustomAttribute(System.Reflection.MemberInfo,System.Type) | [ExtensionAttribute(...)] | -| System.Attribute System.Reflection.CustomAttributeExtensions.GetCustomAttribute(System.Reflection.MemberInfo,System.Type,System.Boolean) | [ExtensionAttribute(...)] | -| System.Attribute System.Reflection.CustomAttributeExtensions.GetCustomAttribute(System.Reflection.Module,System.Type) | [ExtensionAttribute(...)] | -| System.Attribute System.Reflection.CustomAttributeExtensions.GetCustomAttribute(System.Reflection.ParameterInfo,System.Type) | [ExtensionAttribute(...)] | -| System.Attribute System.Reflection.CustomAttributeExtensions.GetCustomAttribute(System.Reflection.ParameterInfo,System.Type,System.Boolean) | [ExtensionAttribute(...)] | -| System.AttributeTargets | [FlagsAttribute(...)] | -| System.Base64FormattingOptions | [FlagsAttribute(...)] | -| System.BitConverter.IsLittleEndian | [IntrinsicAttribute(...)] | -| System.Boolean Internal.Runtime.InteropServices.ComponentActivator.get_IsSupported() | [CompilerGeneratedAttribute(...)] | -| System.Boolean Interop.g__ParentDirectoryExists\|11_0(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Boolean Interop.g__ParentDirectoryExists\|19_0(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Boolean Interop.Globalization.EndsWith(System.IntPtr,System.Char*,System.Int32,System.Char*,System.Int32,System.Globalization.CompareOptions,System.Int32*) | [LibraryImportAttribute(...)] | -| System.Boolean Interop.Globalization.EnumCalendarInfo(System.IntPtr,System.String,System.Globalization.CalendarId,System.Globalization.CalendarDataType,System.IntPtr) | [LibraryImportAttribute(...)] | -| System.Boolean Interop.Globalization.GetDefaultLocaleName(System.Char*,System.Int32) | [LibraryImportAttribute(...)] | -| System.Boolean Interop.Globalization.GetLocaleInfoGroupingSizes(System.String,System.UInt32,System.Int32,System.Int32) | [LibraryImportAttribute(...)] | -| System.Boolean Interop.Globalization.GetLocaleInfoInt(System.String,System.UInt32,System.Int32) | [LibraryImportAttribute(...)] | -| System.Boolean Interop.Globalization.GetLocaleInfoString(System.String,System.UInt32,System.Char*,System.Int32,System.String) | [LibraryImportAttribute(...)] | -| System.Boolean Interop.Globalization.GetLocaleName(System.String,System.Char*,System.Int32) | [LibraryImportAttribute(...)] | -| System.Boolean Interop.Globalization.GetLocaleTimeFormat(System.String,System.Boolean,System.Char*,System.Int32) | [LibraryImportAttribute(...)] | -| System.Boolean Interop.Globalization.IsPredefinedLocale(System.String) | [LibraryImportAttribute(...)] | -| System.Boolean Interop.Globalization.StartsWith(System.IntPtr,System.Char*,System.Int32,System.Char*,System.Int32,System.Globalization.CompareOptions,System.Int32*) | [LibraryImportAttribute(...)] | -| System.Boolean Interop.Kernel32.SetEnvironmentVariable(System.String,System.String) | [LibraryImportAttribute(...)] | -| System.Boolean Microsoft.Win32.SafeHandles.SafeFileHandle.get_DisableFileLocking() | [CompilerGeneratedAttribute(...)] | -| System.Boolean Microsoft.Win32.SafeHandles.SafeFileHandle.get_IsAsync() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Boolean.g__TryParseUncommon\|20_0(System.ReadOnlySpan,System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Boolean.Equals(System.Boolean) | [NonVersionableAttribute(...)] | -| System.Boolean System.Buffers.BitVector256.Contains128(System.Char) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Buffers.BitVector256.Contains256(System.Char) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Buffers.BitVector256.Contains(System.Byte) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Buffers.BitVector256.ContainsUnchecked(System.Int32) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Buffers.Text.ParserHelpers.TryParseThrowFormatException`1(System.ReadOnlySpan,!0,System.Int32) | [DoesNotReturnAttribute(...)] | -| System.Boolean System.Buffers.Text.ParserHelpers.TryParseThrowFormatException`1(System.ReadOnlySpan,!0,System.Int32) | [StackTraceHiddenAttribute(...)] | -| System.Boolean System.Byte.Equals(System.Byte) | [NonVersionableAttribute(...)] | -| System.Boolean System.Char.Equals(System.Char) | [NonVersionableAttribute(...)] | -| System.Boolean System.Collections.Generic.CollectionExtensions.Remove`2(System.Collections.Generic.IDictionary,!0,!1) | [ExtensionAttribute(...)] | -| System.Boolean System.Collections.Generic.CollectionExtensions.TryAdd`2(System.Collections.Generic.IDictionary,!0,!1) | [ExtensionAttribute(...)] | -| System.Boolean System.ComponentModel.DefaultValueAttribute.ctor>g__TryConvertFromInvariantString\|2_0(System.Type,System.String,System.Object) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.ConsoleCancelEventArgs.get_Cancel() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.ConsolePal.g__AppendToStdInReaderUntil\|82_2(System.Byte,System.IO.StdInReader,System.Span,System.Int32,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.ConsolePal.g__BufferUntil\|82_1(System.Byte,System.Span,System.Int32,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Convert.IsSpace(System.Char) | [ExtensionAttribute(...)] | -| System.Boolean System.Diagnostics.CodeAnalysis.DoesNotReturnIfAttribute.get_ParameterValue() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute.get_ReturnValue() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute.get_ReturnValue() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Diagnostics.CodeAnalysis.NotNullWhenAttribute.get_ReturnValue() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Diagnostics.StackFrameExtensions.HasILOffset(System.Diagnostics.StackFrame) | [ExtensionAttribute(...)] | -| System.Boolean System.Diagnostics.StackFrameExtensions.HasMethod(System.Diagnostics.StackFrame) | [ExtensionAttribute(...)] | -| System.Boolean System.Diagnostics.StackFrameExtensions.HasNativeImage(System.Diagnostics.StackFrame) | [ExtensionAttribute(...)] | -| System.Boolean System.Diagnostics.StackFrameExtensions.HasSource(System.Diagnostics.StackFrame) | [ExtensionAttribute(...)] | -| System.Boolean System.Diagnostics.Tracing.EventChannelAttribute.get_Enabled() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Diagnostics.Tracing.EventSource.get_IsSupported() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Double.IsFinite(System.Double) | [NonVersionableAttribute(...)] | -| System.Boolean System.Double.IsInfinity(System.Double) | [NonVersionableAttribute(...)] | -| System.Boolean System.Double.IsNaN(System.Double) | [NonVersionableAttribute(...)] | -| System.Boolean System.Double.IsNegative(System.Double) | [NonVersionableAttribute(...)] | -| System.Boolean System.Double.IsNegativeInfinity(System.Double) | [NonVersionableAttribute(...)] | -| System.Boolean System.Double.IsNormal(System.Double) | [NonVersionableAttribute(...)] | -| System.Boolean System.Double.IsPositiveInfinity(System.Double) | [NonVersionableAttribute(...)] | -| System.Boolean System.Double.IsSubnormal(System.Double) | [NonVersionableAttribute(...)] | -| System.Boolean System.Double.op_Equality(System.Double,System.Double) | [NonVersionableAttribute(...)] | -| System.Boolean System.Double.op_GreaterThan(System.Double,System.Double) | [NonVersionableAttribute(...)] | -| System.Boolean System.Double.op_GreaterThanOrEqual(System.Double,System.Double) | [NonVersionableAttribute(...)] | -| System.Boolean System.Double.op_Inequality(System.Double,System.Double) | [NonVersionableAttribute(...)] | -| System.Boolean System.Double.op_LessThan(System.Double,System.Double) | [NonVersionableAttribute(...)] | -| System.Boolean System.Double.op_LessThanOrEqual(System.Double,System.Double) | [NonVersionableAttribute(...)] | -| System.Boolean System.Enum.g__TryParseRareTypes\|41_0(System.RuntimeType,System.ReadOnlySpan,System.Boolean,System.Boolean,System.Int64) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Enum.HasFlag(System.Enum) | [IntrinsicAttribute(...)] | -| System.Boolean System.Globalization.CalendarData.g__AreEraNamesEmpty\|24_0() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Globalization.GlobalizationMode.Settings.get_Invariant() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Globalization.GlobalizationMode.Settings.get_PredefinedCulturesOnly() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Guid.g__TryCompatParsing\|33_0(System.ReadOnlySpan,System.Guid.GuidResult) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.IO.Enumeration.FileSystemEnumerator`1.g__ShouldSkip\|36_0(System.IO.FileAttributes) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.IO.EnumerationOptions.get_IgnoreInaccessible() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.IO.EnumerationOptions.get_RecurseSubdirectories() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.IO.EnumerationOptions.get_ReturnSpecialDirectories() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.IO.File.d__110.GetResult(System.Int16) | [DebuggerHiddenAttribute(...)] | -| System.Boolean System.IO.KeyParser.g__IsRxvtModifier\|7_5(System.Char) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.IO.KeyParser.g__IsSequenceEndTag\|7_4(System.Char) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.IO.Strategies.FileStreamStrategy.get_IsDerived() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.IO.Stream.HasOverriddenBeginEndRead() | [IntrinsicAttribute(...)] | -| System.Boolean System.IO.Stream.HasOverriddenBeginEndWrite() | [IntrinsicAttribute(...)] | -| System.Boolean System.IO.StreamReader.g__IsPreambleWorker\|57_0() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Int16.Equals(System.Int16) | [NonVersionableAttribute(...)] | -| System.Boolean System.Int32.Equals(System.Int32) | [NonVersionableAttribute(...)] | -| System.Boolean System.Int64.Equals(System.Int64) | [NonVersionableAttribute(...)] | -| System.Boolean System.IntPtr.Equals(System.IntPtr) | [NonVersionableAttribute(...)] | -| System.Boolean System.IntPtr.op_Equality(System.IntPtr,System.IntPtr) | [NonVersionableAttribute(...)] | -| System.Boolean System.IntPtr.op_Inequality(System.IntPtr,System.IntPtr) | [NonVersionableAttribute(...)] | -| System.Boolean System.MemoryExtensions.Contains(System.ReadOnlySpan,System.ReadOnlySpan,System.StringComparison) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.ContainsAnyExceptInRange`1(System.ReadOnlySpan,!0,!0) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.ContainsAnyExceptInRange`1(System.Span,!0,!0) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.ContainsAnyExcept`1(System.ReadOnlySpan,!0) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.ContainsAnyExcept`1(System.ReadOnlySpan,!0,!0) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.ContainsAnyExcept`1(System.ReadOnlySpan,!0,!0,!0) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.ContainsAnyExcept`1(System.ReadOnlySpan,System.Buffers.SearchValues) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.ContainsAnyExcept`1(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.ContainsAnyExcept`1(System.Span,!0) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.ContainsAnyExcept`1(System.Span,!0,!0) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.ContainsAnyExcept`1(System.Span,!0,!0,!0) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.ContainsAnyExcept`1(System.Span,System.Buffers.SearchValues) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.ContainsAnyExcept`1(System.Span,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.ContainsAnyInRange`1(System.ReadOnlySpan,!0,!0) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.ContainsAnyInRange`1(System.Span,!0,!0) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.ContainsAny`1(System.ReadOnlySpan,!0,!0) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.ContainsAny`1(System.ReadOnlySpan,!0,!0,!0) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.ContainsAny`1(System.ReadOnlySpan,System.Buffers.SearchValues) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.ContainsAny`1(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.ContainsAny`1(System.Span,!0,!0) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.ContainsAny`1(System.Span,!0,!0,!0) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.ContainsAny`1(System.Span,System.Buffers.SearchValues) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.ContainsAny`1(System.Span,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.Contains`1(System.ReadOnlySpan,!0) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.Contains`1(System.Span,!0) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.EndsWith(System.ReadOnlySpan,System.ReadOnlySpan,System.StringComparison) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.EndsWithOrdinalIgnoreCase(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.EndsWith`1(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.EndsWith`1(System.Span,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.Equals(System.ReadOnlySpan,System.ReadOnlySpan,System.StringComparison) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.Equals(System.ReadOnlySpan,System.ReadOnlySpan,System.StringComparison) | [IntrinsicAttribute(...)] | -| System.Boolean System.MemoryExtensions.EqualsOrdinal(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.EqualsOrdinalIgnoreCase(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.EqualsOrdinalIgnoreCaseUtf8(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.IsWhiteSpace(System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.Overlaps`1(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.Overlaps`1(System.ReadOnlySpan,System.ReadOnlySpan,System.Int32) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.Overlaps`1(System.Span,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.Overlaps`1(System.Span,System.ReadOnlySpan,System.Int32) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.SequenceEqual`1(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.SequenceEqual`1(System.ReadOnlySpan,System.ReadOnlySpan) | [IntrinsicAttribute(...)] | -| System.Boolean System.MemoryExtensions.SequenceEqual`1(System.ReadOnlySpan,System.ReadOnlySpan,System.Collections.Generic.IEqualityComparer) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.SequenceEqual`1(System.Span,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.SequenceEqual`1(System.Span,System.ReadOnlySpan) | [IntrinsicAttribute(...)] | -| System.Boolean System.MemoryExtensions.SequenceEqual`1(System.Span,System.ReadOnlySpan,System.Collections.Generic.IEqualityComparer) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.StartsWith(System.ReadOnlySpan,System.ReadOnlySpan,System.StringComparison) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.StartsWith(System.ReadOnlySpan,System.ReadOnlySpan,System.StringComparison) | [IntrinsicAttribute(...)] | -| System.Boolean System.MemoryExtensions.StartsWithOrdinalIgnoreCase(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.StartsWithOrdinalIgnoreCaseUtf8(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.StartsWithUtf8(System.ReadOnlySpan,System.ReadOnlySpan,System.StringComparison) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.StartsWith`1(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.StartsWith`1(System.ReadOnlySpan,System.ReadOnlySpan) | [IntrinsicAttribute(...)] | -| System.Boolean System.MemoryExtensions.StartsWith`1(System.Span,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.StartsWith`1(System.Span,System.ReadOnlySpan) | [IntrinsicAttribute(...)] | -| System.Boolean System.MemoryExtensions.TryWrite(System.Span,System.IFormatProvider,System.MemoryExtensions.TryWriteInterpolatedStringHandler,System.Int32) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.TryWrite(System.Span,System.IFormatProvider,System.Text.CompositeFormat,System.Int32,System.Object[]) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.TryWrite(System.Span,System.IFormatProvider,System.Text.CompositeFormat,System.Int32,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.TryWrite(System.Span,System.MemoryExtensions.TryWriteInterpolatedStringHandler,System.Int32) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.TryWrite`1(System.Span,System.IFormatProvider,System.Text.CompositeFormat,System.Int32,!0) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.TryWrite`2(System.Span,System.IFormatProvider,System.Text.CompositeFormat,System.Int32,!0,!1) | [ExtensionAttribute(...)] | -| System.Boolean System.MemoryExtensions.TryWrite`3(System.Span,System.IFormatProvider,System.Text.CompositeFormat,System.Int32,!0,!1,!2) | [ExtensionAttribute(...)] | -| System.Boolean System.Nullable`1.get_HasValue() | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Nullable`1.get_HasValue() | [NonVersionableAttribute(...)] | -| System.Boolean System.Number.g__ShouldRoundUp\|121_0(System.Byte*,System.Int32,System.Number.NumberBufferKind,System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Number.g__TryFormatInt32Slow\|42_0`1(System.Int32,System.Int32,System.ReadOnlySpan,System.IFormatProvider,System.Span,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Number.g__TryFormatInt64Slow\|46_0`1(System.Int64,System.ReadOnlySpan,System.IFormatProvider,System.Span,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Number.g__TryFormatInt128Slow\|50_0`1(System.Int128,System.ReadOnlySpan,System.IFormatProvider,System.Span,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Number.g__TryFormatUInt32Slow\|44_0`1(System.UInt32,System.ReadOnlySpan,System.IFormatProvider,System.Span,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Number.g__TryFormatUInt64Slow\|48_0`1(System.UInt64,System.ReadOnlySpan,System.IFormatProvider,System.Span,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Number.g__TryFormatUInt128Slow\|52_0`1(System.UInt128,System.ReadOnlySpan,System.IFormatProvider,System.Span,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Numerics.Matrix3x2.Equals(System.Numerics.Matrix3x2) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Matrix3x2.Equals(System.Object) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Matrix3x2.Impl.Equals(System.Numerics.Matrix3x2.Impl) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Matrix3x2.Impl.Equals(System.Object) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Matrix3x2.Impl.get_IsIdentity() | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Matrix3x2.get_IsIdentity() | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Matrix4x4.Equals(System.Numerics.Matrix4x4) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Matrix4x4.Equals(System.Object) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Matrix4x4.Impl.g__SoftwareFallback\|64_2(System.Numerics.Matrix4x4.Impl,System.Numerics.Matrix4x4.Impl) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Numerics.Matrix4x4.Impl.g__SseImpl\|64_0(System.Numerics.Matrix4x4.Impl,System.Numerics.Matrix4x4.Impl) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Numerics.Matrix4x4.Impl.Equals(System.Numerics.Matrix4x4.Impl) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Matrix4x4.Impl.Equals(System.Object) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Matrix4x4.Impl.get_IsIdentity() | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Matrix4x4.get_IsIdentity() | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Plane.g__SoftwareFallback\|16_0(System.Numerics.Plane,System.Numerics.Plane) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Numerics.Plane.Equals(System.Numerics.Plane) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Plane.Equals(System.Object) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Plane.op_Equality(System.Numerics.Plane,System.Numerics.Plane) | [IntrinsicAttribute(...)] | -| System.Boolean System.Numerics.Plane.op_Inequality(System.Numerics.Plane,System.Numerics.Plane) | [IntrinsicAttribute(...)] | -| System.Boolean System.Numerics.Quaternion.g__SoftwareFallback\|44_0(System.Numerics.Quaternion,System.Numerics.Quaternion) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Numerics.Quaternion.Equals(System.Numerics.Quaternion) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Quaternion.Equals(System.Object) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Quaternion.get_IsIdentity() | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Quaternion.op_Equality(System.Numerics.Quaternion,System.Numerics.Quaternion) | [IntrinsicAttribute(...)] | -| System.Boolean System.Numerics.Quaternion.op_Inequality(System.Numerics.Quaternion,System.Numerics.Quaternion) | [IntrinsicAttribute(...)] | -| System.Boolean System.Numerics.Vector2.g__SoftwareFallback\|59_0(System.Numerics.Vector2,System.Numerics.Vector2) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Numerics.Vector2.Equals(System.Numerics.Vector2) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Vector2.Equals(System.Object) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Vector2.TryCopyTo(System.Span) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Vector2.op_Equality(System.Numerics.Vector2,System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Boolean System.Numerics.Vector2.op_Inequality(System.Numerics.Vector2,System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Boolean System.Numerics.Vector3.g__SoftwareFallback\|60_0(System.Numerics.Vector3,System.Numerics.Vector3) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Numerics.Vector3.Equals(System.Numerics.Vector3) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Vector3.Equals(System.Object) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Vector3.TryCopyTo(System.Span) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Vector3.op_Equality(System.Numerics.Vector3,System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Boolean System.Numerics.Vector3.op_Inequality(System.Numerics.Vector3,System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Boolean System.Numerics.Vector4.g__SoftwareFallback\|66_0(System.Numerics.Vector4,System.Numerics.Vector4) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Numerics.Vector4.Equals(System.Numerics.Vector4) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Vector4.Equals(System.Object) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Vector4.TryCopyTo(System.Span) | [IsReadOnlyAttribute(...)] | -| System.Boolean System.Numerics.Vector4.op_Equality(System.Numerics.Vector4,System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Boolean System.Numerics.Vector4.op_Inequality(System.Numerics.Vector4,System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Boolean System.Numerics.Vector.EqualsAll`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Boolean System.Numerics.Vector.EqualsAny`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Boolean System.Numerics.Vector.GreaterThanAll`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Boolean System.Numerics.Vector.GreaterThanAny`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Boolean System.Numerics.Vector.GreaterThanOrEqualAll`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Boolean System.Numerics.Vector.GreaterThanOrEqualAny`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Boolean System.Numerics.Vector.LessThanAll`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Boolean System.Numerics.Vector.LessThanAny`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Boolean System.Numerics.Vector.LessThanOrEqualAll`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Boolean System.Numerics.Vector.LessThanOrEqualAny`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Boolean System.Numerics.Vector.get_IsHardwareAccelerated() | [IntrinsicAttribute(...)] | -| System.Boolean System.Numerics.Vector`1.g__SoftwareFallback\|57_0(System.Numerics.Vector,System.Numerics.Vector) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Numerics.Vector`1.op_Equality(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Boolean System.Numerics.Vector`1.op_Inequality(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Boolean System.Object.ReferenceEquals(System.Object,System.Object) | [NonVersionableAttribute(...)] | -| System.Boolean System.ObsoleteAttribute.get_IsError() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.OperatingSystem.IsAndroid() | [NonVersionableAttribute(...)] | -| System.Boolean System.OperatingSystem.IsBrowser() | [NonVersionableAttribute(...)] | -| System.Boolean System.OperatingSystem.IsFreeBSD() | [NonVersionableAttribute(...)] | -| System.Boolean System.OperatingSystem.IsIOS() | [NonVersionableAttribute(...)] | -| System.Boolean System.OperatingSystem.IsIOSVersionAtLeast(System.Int32,System.Int32,System.Int32) | [NonVersionableAttribute(...)] | -| System.Boolean System.OperatingSystem.IsLinux() | [NonVersionableAttribute(...)] | -| System.Boolean System.OperatingSystem.IsMacCatalyst() | [NonVersionableAttribute(...)] | -| System.Boolean System.OperatingSystem.IsMacOS() | [NonVersionableAttribute(...)] | -| System.Boolean System.OperatingSystem.IsTvOS() | [NonVersionableAttribute(...)] | -| System.Boolean System.OperatingSystem.IsWasi() | [NonVersionableAttribute(...)] | -| System.Boolean System.OperatingSystem.IsWatchOS() | [NonVersionableAttribute(...)] | -| System.Boolean System.OperatingSystem.IsWindows() | [NonVersionableAttribute(...)] | -| System.Boolean System.ReadOnlySpan`1.get_IsEmpty() | [NonVersionableAttribute(...)] | -| System.Boolean System.Reflection.AssemblyDelaySignAttribute.get_DelaySign() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Reflection.CustomAttributeExtensions.IsDefined(System.Reflection.Assembly,System.Type) | [ExtensionAttribute(...)] | -| System.Boolean System.Reflection.CustomAttributeExtensions.IsDefined(System.Reflection.MemberInfo,System.Type) | [ExtensionAttribute(...)] | -| System.Boolean System.Reflection.CustomAttributeExtensions.IsDefined(System.Reflection.MemberInfo,System.Type,System.Boolean) | [ExtensionAttribute(...)] | -| System.Boolean System.Reflection.CustomAttributeExtensions.IsDefined(System.Reflection.Module,System.Type) | [ExtensionAttribute(...)] | -| System.Boolean System.Reflection.CustomAttributeExtensions.IsDefined(System.Reflection.ParameterInfo,System.Type) | [ExtensionAttribute(...)] | -| System.Boolean System.Reflection.CustomAttributeExtensions.IsDefined(System.Reflection.ParameterInfo,System.Type,System.Boolean) | [ExtensionAttribute(...)] | -| System.Boolean System.Reflection.Metadata.AssemblyExtensions.TryGetRawMetadata(System.Reflection.Assembly,System.Byte*,System.Int32) | [ExtensionAttribute(...)] | -| System.Boolean System.Reflection.Metadata.MetadataUpdater.get_IsSupported() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Reflection.NullabilityInfoContext.get_IsSupported() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Reflection.ObfuscateAssemblyAttribute.get_AssemblyIsPrivate() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Reflection.ObfuscateAssemblyAttribute.get_StripAfterObfuscation() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Reflection.ObfuscationAttribute.get_ApplyToMembers() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Reflection.ObfuscationAttribute.get_Exclude() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Reflection.ObfuscationAttribute.get_StripAfterObfuscation() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Reflection.RuntimeMethodInfo.g__IsDisallowedByRefType\|97_0(System.Type) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Reflection.SignatureTypeExtensions.MatchesExactly(System.Reflection.SignatureType,System.Type) | [ExtensionAttribute(...)] | -| System.Boolean System.Reflection.SignatureTypeExtensions.MatchesParameterTypeExactly(System.Type,System.Reflection.ParameterInfo) | [ExtensionAttribute(...)] | -| System.Boolean System.Resources.ResourceReader.g__InitializeBinaryFormatterLocal\|5_0() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Resources.ResourceReader.get_AllowCustomResourceTypes() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute.get_IsOptional() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Runtime.CompilerServices.InternalsVisibleToAttribute.get_AllInternalsVisible() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Runtime.CompilerServices.RuntimeCompatibilityAttribute.get_WrapNonExceptionThrows() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Runtime.CompilerServices.RuntimeFeature.get_IsDynamicCodeSupported() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Runtime.CompilerServices.RuntimeHelpers.EnumEquals`1(!0,!0) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.CompilerServices.RuntimeHelpers.IsBitwiseEquatable`1() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.CompilerServices.RuntimeHelpers.IsKnownConstant(System.Char) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.CompilerServices.RuntimeHelpers.IsKnownConstant(System.Int32) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.CompilerServices.RuntimeHelpers.IsKnownConstant(System.Type) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.CompilerServices.RuntimeHelpers.IsPrimitiveType(System.Reflection.CorElementType) | [ExtensionAttribute(...)] | -| System.Boolean System.Runtime.CompilerServices.RuntimeHelpers.IsReferenceOrContainsReferences`1() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.CompilerServices.Unsafe.AreSame`1(!0,!0) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.CompilerServices.Unsafe.AreSame`1(!0,!0) | [NonVersionableAttribute(...)] | -| System.Boolean System.Runtime.CompilerServices.Unsafe.IsAddressGreaterThan`1(!0,!0) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.CompilerServices.Unsafe.IsAddressGreaterThan`1(!0,!0) | [NonVersionableAttribute(...)] | -| System.Boolean System.Runtime.CompilerServices.Unsafe.IsAddressLessThan`1(!0,!0) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.CompilerServices.Unsafe.IsAddressLessThan`1(!0,!0) | [NonVersionableAttribute(...)] | -| System.Boolean System.Runtime.CompilerServices.Unsafe.IsNullRef`1(!0) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.CompilerServices.Unsafe.IsNullRef`1(!0) | [NonVersionableAttribute(...)] | -| System.Boolean System.Runtime.InteropServices.BestFitMappingAttribute.get_BestFitMapping() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Runtime.InteropServices.ComVisibleAttribute.get_Value() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Runtime.InteropServices.DynamicInterfaceCastableHelpers.IsInterfaceImplemented(System.Runtime.InteropServices.IDynamicInterfaceCastable,System.RuntimeType,System.Boolean) | [StackTraceHiddenAttribute(...)] | -| System.Boolean System.Runtime.InteropServices.LibraryImportAttribute.get_SetLastError() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Runtime.InteropServices.NFloat.IsFinite(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Boolean System.Runtime.InteropServices.NFloat.IsInfinity(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Boolean System.Runtime.InteropServices.NFloat.IsNaN(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Boolean System.Runtime.InteropServices.NFloat.IsNegative(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Boolean System.Runtime.InteropServices.NFloat.IsNegativeInfinity(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Boolean System.Runtime.InteropServices.NFloat.IsNormal(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Boolean System.Runtime.InteropServices.NFloat.IsPositiveInfinity(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Boolean System.Runtime.InteropServices.NFloat.IsSubnormal(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Boolean System.Runtime.InteropServices.NFloat.op_Equality(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Boolean System.Runtime.InteropServices.NFloat.op_GreaterThan(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Boolean System.Runtime.InteropServices.NFloat.op_GreaterThanOrEqual(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Boolean System.Runtime.InteropServices.NFloat.op_Inequality(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Boolean System.Runtime.InteropServices.NFloat.op_LessThan(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Boolean System.Runtime.InteropServices.NFloat.op_LessThanOrEqual(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Boolean System.Runtime.InteropServices.PosixSignalContext.get_Cancel() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Arm.AdvSimd.Arm64.get_IsSupported() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Arm.AdvSimd.get_IsSupported() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Arm.Aes.Arm64.get_IsSupported() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Arm.Aes.get_IsSupported() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Arm.ArmBase.Arm64.get_IsSupported() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Arm.ArmBase.get_IsSupported() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Arm.Crc32.Arm64.get_IsSupported() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Arm.Crc32.get_IsSupported() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Arm.Dp.Arm64.get_IsSupported() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Arm.Dp.get_IsSupported() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Arm.Rdm.Arm64.get_IsSupported() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Arm.Rdm.get_IsSupported() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Arm.Sha1.Arm64.get_IsSupported() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Arm.Sha1.get_IsSupported() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Arm.Sha256.Arm64.get_IsSupported() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Arm.Sha256.get_IsSupported() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector64.EqualsAll`1(System.Runtime.Intrinsics.Vector64,System.Runtime.Intrinsics.Vector64) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector64.EqualsAny`1(System.Runtime.Intrinsics.Vector64,System.Runtime.Intrinsics.Vector64) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector64.GreaterThanAll`1(System.Runtime.Intrinsics.Vector64,System.Runtime.Intrinsics.Vector64) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector64.GreaterThanAny`1(System.Runtime.Intrinsics.Vector64,System.Runtime.Intrinsics.Vector64) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector64.GreaterThanOrEqualAll`1(System.Runtime.Intrinsics.Vector64,System.Runtime.Intrinsics.Vector64) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector64.GreaterThanOrEqualAny`1(System.Runtime.Intrinsics.Vector64,System.Runtime.Intrinsics.Vector64) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector64.LessThanAll`1(System.Runtime.Intrinsics.Vector64,System.Runtime.Intrinsics.Vector64) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector64.LessThanAny`1(System.Runtime.Intrinsics.Vector64,System.Runtime.Intrinsics.Vector64) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector64.LessThanOrEqualAll`1(System.Runtime.Intrinsics.Vector64,System.Runtime.Intrinsics.Vector64) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector64.LessThanOrEqualAny`1(System.Runtime.Intrinsics.Vector64,System.Runtime.Intrinsics.Vector64) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector64.TryCopyTo`1(System.Runtime.Intrinsics.Vector64,System.Span) | [ExtensionAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector64.get_IsHardwareAccelerated() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector64`1.g__SoftwareFallback\|34_0(System.Runtime.Intrinsics.Vector64,System.Runtime.Intrinsics.Vector64) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector64`1.get_IsSupported() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector64`1.op_Equality(System.Runtime.Intrinsics.Vector64,System.Runtime.Intrinsics.Vector64) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector64`1.op_Inequality(System.Runtime.Intrinsics.Vector64,System.Runtime.Intrinsics.Vector64) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector128.EqualsAll`1(System.Runtime.Intrinsics.Vector128,System.Runtime.Intrinsics.Vector128) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector128.EqualsAny`1(System.Runtime.Intrinsics.Vector128,System.Runtime.Intrinsics.Vector128) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector128.GreaterThanAll`1(System.Runtime.Intrinsics.Vector128,System.Runtime.Intrinsics.Vector128) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector128.GreaterThanAny`1(System.Runtime.Intrinsics.Vector128,System.Runtime.Intrinsics.Vector128) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector128.GreaterThanOrEqualAll`1(System.Runtime.Intrinsics.Vector128,System.Runtime.Intrinsics.Vector128) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector128.GreaterThanOrEqualAny`1(System.Runtime.Intrinsics.Vector128,System.Runtime.Intrinsics.Vector128) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector128.LessThanAll`1(System.Runtime.Intrinsics.Vector128,System.Runtime.Intrinsics.Vector128) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector128.LessThanAny`1(System.Runtime.Intrinsics.Vector128,System.Runtime.Intrinsics.Vector128) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector128.LessThanOrEqualAll`1(System.Runtime.Intrinsics.Vector128,System.Runtime.Intrinsics.Vector128) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector128.LessThanOrEqualAny`1(System.Runtime.Intrinsics.Vector128,System.Runtime.Intrinsics.Vector128) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector128.TryCopyTo`1(System.Runtime.Intrinsics.Vector128,System.Span) | [ExtensionAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector128.get_IsHardwareAccelerated() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector128`1.EqualsFloatingPoint(System.Runtime.Intrinsics.Vector128,System.Runtime.Intrinsics.Vector128) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector128`1.get_IsSupported() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector128`1.op_Equality(System.Runtime.Intrinsics.Vector128,System.Runtime.Intrinsics.Vector128) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector128`1.op_Inequality(System.Runtime.Intrinsics.Vector128,System.Runtime.Intrinsics.Vector128) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector256.EqualsAll`1(System.Runtime.Intrinsics.Vector256,System.Runtime.Intrinsics.Vector256) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector256.EqualsAny`1(System.Runtime.Intrinsics.Vector256,System.Runtime.Intrinsics.Vector256) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector256.GreaterThanAll`1(System.Runtime.Intrinsics.Vector256,System.Runtime.Intrinsics.Vector256) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector256.GreaterThanAny`1(System.Runtime.Intrinsics.Vector256,System.Runtime.Intrinsics.Vector256) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector256.GreaterThanOrEqualAll`1(System.Runtime.Intrinsics.Vector256,System.Runtime.Intrinsics.Vector256) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector256.GreaterThanOrEqualAny`1(System.Runtime.Intrinsics.Vector256,System.Runtime.Intrinsics.Vector256) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector256.LessThanAll`1(System.Runtime.Intrinsics.Vector256,System.Runtime.Intrinsics.Vector256) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector256.LessThanAny`1(System.Runtime.Intrinsics.Vector256,System.Runtime.Intrinsics.Vector256) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector256.LessThanOrEqualAll`1(System.Runtime.Intrinsics.Vector256,System.Runtime.Intrinsics.Vector256) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector256.LessThanOrEqualAny`1(System.Runtime.Intrinsics.Vector256,System.Runtime.Intrinsics.Vector256) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector256.TryCopyTo`1(System.Runtime.Intrinsics.Vector256,System.Span) | [ExtensionAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector256.get_IsHardwareAccelerated() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector256`1.get_IsSupported() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector256`1.op_Equality(System.Runtime.Intrinsics.Vector256,System.Runtime.Intrinsics.Vector256) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector256`1.op_Inequality(System.Runtime.Intrinsics.Vector256,System.Runtime.Intrinsics.Vector256) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector512.EqualsAll`1(System.Runtime.Intrinsics.Vector512,System.Runtime.Intrinsics.Vector512) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector512.EqualsAny`1(System.Runtime.Intrinsics.Vector512,System.Runtime.Intrinsics.Vector512) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector512.GreaterThanAll`1(System.Runtime.Intrinsics.Vector512,System.Runtime.Intrinsics.Vector512) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector512.GreaterThanAny`1(System.Runtime.Intrinsics.Vector512,System.Runtime.Intrinsics.Vector512) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector512.GreaterThanOrEqualAll`1(System.Runtime.Intrinsics.Vector512,System.Runtime.Intrinsics.Vector512) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector512.GreaterThanOrEqualAny`1(System.Runtime.Intrinsics.Vector512,System.Runtime.Intrinsics.Vector512) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector512.LessThanAll`1(System.Runtime.Intrinsics.Vector512,System.Runtime.Intrinsics.Vector512) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector512.LessThanAny`1(System.Runtime.Intrinsics.Vector512,System.Runtime.Intrinsics.Vector512) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector512.LessThanOrEqualAll`1(System.Runtime.Intrinsics.Vector512,System.Runtime.Intrinsics.Vector512) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector512.LessThanOrEqualAny`1(System.Runtime.Intrinsics.Vector512,System.Runtime.Intrinsics.Vector512) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector512.TryCopyTo`1(System.Runtime.Intrinsics.Vector512,System.Span) | [ExtensionAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector512.get_IsHardwareAccelerated() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector512`1.get_IsSupported() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector512`1.op_Equality(System.Runtime.Intrinsics.Vector512,System.Runtime.Intrinsics.Vector512) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Vector512`1.op_Inequality(System.Runtime.Intrinsics.Vector512,System.Runtime.Intrinsics.Vector512) | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Intrinsics.Wasm.PackedSimd.get_IsSupported() | [IntrinsicAttribute(...)] | -| System.Boolean System.Runtime.Loader.AssemblyLoadContext.TraceAssemblyLoadFromResolveHandlerInvoked(System.String,System.Boolean,System.String,System.String) | [LibraryImportAttribute(...)] | -| System.Boolean System.Runtime.Loader.AssemblyLoadContext.TraceAssemblyResolveHandlerInvoked(System.String,System.String,System.String,System.String) | [LibraryImportAttribute(...)] | -| System.Boolean System.Runtime.Loader.AssemblyLoadContext.TraceResolvingHandlerInvoked(System.String,System.String,System.String,System.String,System.String) | [LibraryImportAttribute(...)] | -| System.Boolean System.Runtime.Loader.AssemblyLoadContext.TraceSatelliteSubdirectoryPathProbed(System.String,System.Int32) | [LibraryImportAttribute(...)] | -| System.Boolean System.Runtime.Serialization.DeserializationTracker.get_DeserializationInProgress() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Runtime.Serialization.SerializationInfo.get_IsAssemblyNameSetExplicit() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Runtime.Serialization.SerializationInfo.get_IsFullTypeNameSetExplicit() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.RuntimeType.get_IsActualEnum() | [IntrinsicAttribute(...)] | -| System.Boolean System.SByte.Equals(System.SByte) | [NonVersionableAttribute(...)] | -| System.Boolean System.Security.Permissions.SecurityAttribute.get_Unrestricted() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Security.Permissions.SecurityPermissionAttribute.get_Assertion() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Security.Permissions.SecurityPermissionAttribute.get_BindingRedirects() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Security.Permissions.SecurityPermissionAttribute.get_ControlAppDomain() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Security.Permissions.SecurityPermissionAttribute.get_ControlDomainPolicy() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Security.Permissions.SecurityPermissionAttribute.get_ControlEvidence() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Security.Permissions.SecurityPermissionAttribute.get_ControlPolicy() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Security.Permissions.SecurityPermissionAttribute.get_ControlPrincipal() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Security.Permissions.SecurityPermissionAttribute.get_ControlThread() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Security.Permissions.SecurityPermissionAttribute.get_Execution() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Security.Permissions.SecurityPermissionAttribute.get_Infrastructure() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Security.Permissions.SecurityPermissionAttribute.get_RemotingConfiguration() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Security.Permissions.SecurityPermissionAttribute.get_SerializationFormatter() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Security.Permissions.SecurityPermissionAttribute.get_SkipVerification() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Security.Permissions.SecurityPermissionAttribute.get_UnmanagedCode() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Security.SecurityRulesAttribute.get_SkipVerificationInFullTrust() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Single.IsFinite(System.Single) | [NonVersionableAttribute(...)] | -| System.Boolean System.Single.IsInfinity(System.Single) | [NonVersionableAttribute(...)] | -| System.Boolean System.Single.IsNaN(System.Single) | [NonVersionableAttribute(...)] | -| System.Boolean System.Single.IsNegative(System.Single) | [NonVersionableAttribute(...)] | -| System.Boolean System.Single.IsNegativeInfinity(System.Single) | [NonVersionableAttribute(...)] | -| System.Boolean System.Single.IsNormal(System.Single) | [NonVersionableAttribute(...)] | -| System.Boolean System.Single.IsPositiveInfinity(System.Single) | [NonVersionableAttribute(...)] | -| System.Boolean System.Single.IsSubnormal(System.Single) | [NonVersionableAttribute(...)] | -| System.Boolean System.Single.op_Equality(System.Single,System.Single) | [NonVersionableAttribute(...)] | -| System.Boolean System.Single.op_GreaterThan(System.Single,System.Single) | [NonVersionableAttribute(...)] | -| System.Boolean System.Single.op_GreaterThanOrEqual(System.Single,System.Single) | [NonVersionableAttribute(...)] | -| System.Boolean System.Single.op_Inequality(System.Single,System.Single) | [NonVersionableAttribute(...)] | -| System.Boolean System.Single.op_LessThan(System.Single,System.Single) | [NonVersionableAttribute(...)] | -| System.Boolean System.Single.op_LessThanOrEqual(System.Single,System.Single) | [NonVersionableAttribute(...)] | -| System.Boolean System.SpanHelpers.SequenceEqual(System.Byte,System.Byte,System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Boolean System.Span`1.get_IsEmpty() | [NonVersionableAttribute(...)] | -| System.Boolean System.String.Equals(System.String) | [IntrinsicAttribute(...)] | -| System.Boolean System.String.Equals(System.String,System.String) | [IntrinsicAttribute(...)] | -| System.Boolean System.String.Equals(System.String,System.String,System.StringComparison) | [IntrinsicAttribute(...)] | -| System.Boolean System.String.Equals(System.String,System.StringComparison) | [IntrinsicAttribute(...)] | -| System.Boolean System.String.StartsWith(System.String,System.StringComparison) | [IntrinsicAttribute(...)] | -| System.Boolean System.StringNormalizationExtensions.IsNormalized(System.String) | [ExtensionAttribute(...)] | -| System.Boolean System.StringNormalizationExtensions.IsNormalized(System.String,System.Text.NormalizationForm) | [ExtensionAttribute(...)] | -| System.Boolean System.Text.CompositeFormat.g__TryMoveNext\|12_0(System.ReadOnlySpan,System.Int32,System.Char) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler.g__GrowAndAppendFormatted\|21_0`1(System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler,!0,System.Int32,System.Int32,System.String) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler.g__GrowAndAppendFormatted\|20_0`1(System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler,!0,System.Int32,System.Int32,System.String) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Threading.AsyncLocalValueChangedArgs`1.get_ThreadContextChanged() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Threading.Tasks.TaskToAsyncResult.TaskAsyncResult.get_CompletedSynchronously() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Threading.Volatile.Read(System.Boolean) | [IntrinsicAttribute(...)] | -| System.Boolean System.Threading.Volatile.Read(System.Boolean) | [NonVersionableAttribute(...)] | -| System.Boolean System.TimeZoneInfo.get_HasIanaId() | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.Type.IsAssignableFrom(System.Type) | [IntrinsicAttribute(...)] | -| System.Boolean System.Type.IsAssignableTo(System.Type) | [IntrinsicAttribute(...)] | -| System.Boolean System.Type.get_IsByRefLike() | [IntrinsicAttribute(...)] | -| System.Boolean System.Type.get_IsEnum() | [IntrinsicAttribute(...)] | -| System.Boolean System.Type.get_IsValueType() | [IntrinsicAttribute(...)] | -| System.Boolean System.Type.op_Equality(System.Type,System.Type) | [IntrinsicAttribute(...)] | -| System.Boolean System.Type.op_Inequality(System.Type,System.Type) | [IntrinsicAttribute(...)] | -| System.Boolean System.UInt16.Equals(System.UInt16) | [NonVersionableAttribute(...)] | -| System.Boolean System.UInt32.Equals(System.UInt32) | [NonVersionableAttribute(...)] | -| System.Boolean System.UInt64.Equals(System.UInt64) | [NonVersionableAttribute(...)] | -| System.Boolean System.UInt128.g__DivideGuessTooBig\|110_1(System.UInt64,System.UInt64,System.UInt32,System.UInt32,System.UInt32) | [CompilerGeneratedAttribute(...)] | -| System.Boolean System.UIntPtr.Equals(System.UIntPtr) | [NonVersionableAttribute(...)] | -| System.Boolean System.UIntPtr.op_Equality(System.UIntPtr,System.UIntPtr) | [NonVersionableAttribute(...)] | -| System.Boolean System.UIntPtr.op_Inequality(System.UIntPtr,System.UIntPtr) | [NonVersionableAttribute(...)] | -| System.Buffers.Binary.BinaryPrimitives.Int16EndiannessReverser | [IsReadOnlyAttribute(...)] | -| System.Buffers.Binary.BinaryPrimitives.Int32EndiannessReverser | [IsReadOnlyAttribute(...)] | -| System.Buffers.Binary.BinaryPrimitives.Int64EndiannessReverser | [IsReadOnlyAttribute(...)] | -| System.Buffers.BitVector256.<_values>e__FixedBuffer | [CompilerGeneratedAttribute(...)] | -| System.Buffers.BitVector256.<_values>e__FixedBuffer | [UnsafeValueTypeAttribute(...)] | -| System.Buffers.IndexOfAnyAsciiSearcher.Default | [IsReadOnlyAttribute(...)] | -| System.Buffers.IndexOfAnyAsciiSearcher.DontNegate | [IsReadOnlyAttribute(...)] | -| System.Buffers.IndexOfAnyAsciiSearcher.Negate | [IsReadOnlyAttribute(...)] | -| System.Buffers.IndexOfAnyAsciiSearcher.Ssse3AndWasmHandleZeroInNeedle | [IsReadOnlyAttribute(...)] | -| System.Buffers.OperationStatus System.Buffers.Text.Base64.g__InvalidDataFallback\|15_0(System.ReadOnlySpan,System.Span,System.Int32,System.Int32,System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Buffers.ProbabilisticMap | [IsReadOnlyAttribute(...)] | -| System.Buffers.SearchValues.FalseConst | [IsReadOnlyAttribute(...)] | -| System.Buffers.SearchValues.TrueConst | [IsReadOnlyAttribute(...)] | -| System.Buffers.SharedArrayPool`1.<>c | [CompilerGeneratedAttribute(...)] | -| System.Buffers.SharedArrayPool`1.t_tlsBuckets | [ThreadStaticAttribute(...)] | -| System.Buffers.StandardFormat | [IsReadOnlyAttribute(...)] | -| System.Buffers.Text.Base64.Base64ByteValidatable | [IsReadOnlyAttribute(...)] | -| System.Buffers.Text.Base64.Base64CharValidatable | [IsReadOnlyAttribute(...)] | -| System.Buffers.Text.Utf8Parser.ParseNumberOptions | [FlagsAttribute(...)] | -| System.ByReference | [IsByRefLikeAttribute(...)] | -| System.ByReference | [IsReadOnlyAttribute(...)] | -| System.ByReference | [NonVersionableAttribute(...)] | -| System.Byte System.Diagnostics.Tracing.EventAttribute.get_Version() | [CompilerGeneratedAttribute(...)] | -| System.Byte System.Math.Max(System.Byte,System.Byte) | [NonVersionableAttribute(...)] | -| System.Byte System.Math.Min(System.Byte,System.Byte) | [NonVersionableAttribute(...)] | -| System.Byte System.Runtime.CompilerServices.CastHelpers.Unbox(System.Void*,System.Object) | [DebuggerHiddenAttribute(...)] | -| System.Byte System.Runtime.CompilerServices.CastHelpers.Unbox(System.Void*,System.Object) | [DebuggerStepThroughAttribute(...)] | -| System.Byte System.Runtime.CompilerServices.CastHelpers.Unbox(System.Void*,System.Object) | [StackTraceHiddenAttribute(...)] | -| System.Byte System.Runtime.CompilerServices.RuntimeHelpers.GetRawData(System.Object) | [ExtensionAttribute(...)] | -| System.Byte System.Runtime.InteropServices.MemoryMarshal.GetArrayDataReference(System.Array) | [IntrinsicAttribute(...)] | -| System.Byte System.Runtime.InteropServices.NFloat.op_CheckedExplicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Byte System.Runtime.InteropServices.NFloat.op_Explicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Byte System.Threading.Volatile.Read(System.Byte) | [IntrinsicAttribute(...)] | -| System.Byte System.Threading.Volatile.Read(System.Byte) | [NonVersionableAttribute(...)] | -| System.Byte* System.Reflection.RuntimeAssembly.g____PInvoke\|37_0(System.Runtime.CompilerServices.QCallAssembly,System.UInt16*,System.UInt32*) | [CompilerGeneratedAttribute(...)] | -| System.Byte* System.Reflection.RuntimeAssembly.GetResource(System.Runtime.CompilerServices.QCallAssembly,System.String,System.UInt32) | [LibraryImportAttribute(...)] | -| System.Byte[] System.Buffers.BitVector256.GetByteValues() | [IsReadOnlyAttribute(...)] | -| System.Byte[] System.Security.PermissionSet.ConvertPermissionSet(System.String,System.Byte[],System.String) | [ObsoleteAttribute(...)] | -| System.Char System.Runtime.InteropServices.MemoryMarshal.<g__FromString\|18_0>d`1.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Char System.Runtime.InteropServices.NFloat.op_CheckedExplicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Char System.Runtime.InteropServices.NFloat.op_Explicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Char System.String.GetPinnableReference() | [NonVersionableAttribute(...)] | -| System.Char System.String.get_Chars(System.Int32) | [IntrinsicAttribute(...)] | -| System.Char System.Text.StringBuilder.g__MoveNext\|116_0(System.String,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Char System.Text.ValueStringBuilder.g__MoveNext\|0_0(System.String,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Char[] System.Buffers.BitVector256.GetCharValues() | [IsReadOnlyAttribute(...)] | -| System.CodeDom.Compiler.IndentedTextWriter.d__23 | [CompilerGeneratedAttribute(...)] | -| System.CodeDom.Compiler.IndentedTextWriter.d__37 | [CompilerGeneratedAttribute(...)] | -| System.CodeDom.Compiler.IndentedTextWriter.d__38 | [CompilerGeneratedAttribute(...)] | -| System.CodeDom.Compiler.IndentedTextWriter.d__39 | [CompilerGeneratedAttribute(...)] | -| System.CodeDom.Compiler.IndentedTextWriter.d__40 | [CompilerGeneratedAttribute(...)] | -| System.CodeDom.Compiler.IndentedTextWriter.d__41 | [CompilerGeneratedAttribute(...)] | -| System.CodeDom.Compiler.IndentedTextWriter.d__59 | [CompilerGeneratedAttribute(...)] | -| System.CodeDom.Compiler.IndentedTextWriter.d__60 | [CompilerGeneratedAttribute(...)] | -| System.CodeDom.Compiler.IndentedTextWriter.d__61 | [CompilerGeneratedAttribute(...)] | -| System.CodeDom.Compiler.IndentedTextWriter.d__62 | [CompilerGeneratedAttribute(...)] | -| System.CodeDom.Compiler.IndentedTextWriter.d__63 | [CompilerGeneratedAttribute(...)] | -| System.CodeDom.Compiler.IndentedTextWriter.d__64 | [CompilerGeneratedAttribute(...)] | -| System.Collections.Concurrent.ConcurrentQueue`1.d__26 | [CompilerGeneratedAttribute(...)] | -| System.Collections.Concurrent.SingleProducerSingleConsumerQueue`1.d__15 | [CompilerGeneratedAttribute(...)] | -| System.Collections.Generic.BitHelper | [IsByRefLikeAttribute(...)] | -| System.Collections.Generic.CollectionExtensions | [ExtensionAttribute(...)] | -| System.Collections.Generic.Comparer System.Collections.Generic.Comparer`1.get_Default() | [CompilerGeneratedAttribute(...)] | -| System.Collections.Generic.Comparer System.Collections.Generic.Comparer`1.get_Default() | [IntrinsicAttribute(...)] | -| System.Collections.Generic.Comparer`1.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Collections.Generic.EqualityComparer System.Collections.Generic.EqualityComparer`1.get_Default() | [CompilerGeneratedAttribute(...)] | -| System.Collections.Generic.EqualityComparer System.Collections.Generic.EqualityComparer`1.get_Default() | [IntrinsicAttribute(...)] | -| System.Collections.Generic.EqualityComparer`1.<>c | [CompilerGeneratedAttribute(...)] | -| System.Collections.Generic.EqualityComparer`1.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Collections.Generic.IAsyncEnumerator System.IO.File.d__110.GetAsyncEnumerator(System.Threading.CancellationToken) | [DebuggerHiddenAttribute(...)] | -| System.Collections.Generic.IDictionary System.Diagnostics.Tracing.EventCommandEventArgs.get_Arguments() | [CompilerGeneratedAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Reflection.CustomAttributeExtensions.GetCustomAttributes`1(System.Reflection.Assembly) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Reflection.CustomAttributeExtensions.GetCustomAttributes`1(System.Reflection.MemberInfo) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Reflection.CustomAttributeExtensions.GetCustomAttributes`1(System.Reflection.MemberInfo,System.Boolean) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Reflection.CustomAttributeExtensions.GetCustomAttributes`1(System.Reflection.Module) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Reflection.CustomAttributeExtensions.GetCustomAttributes`1(System.Reflection.ParameterInfo) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Reflection.CustomAttributeExtensions.GetCustomAttributes`1(System.Reflection.ParameterInfo,System.Boolean) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Runtime.InteropServices.MemoryMarshal.g__FromArray\|18_2`1(!0[],System.Int32,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Runtime.InteropServices.MemoryMarshal.g__FromMemoryManager\|18_1`1(System.ReadOnlyMemory) | [CompilerGeneratedAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Threading.Tasks.TaskAsyncEnumerableExtensions.ToBlockingEnumerable`1(System.Collections.Generic.IAsyncEnumerable,System.Threading.CancellationToken) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Reflection.CustomAttributeExtensions.GetCustomAttributes(System.Reflection.Assembly) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Reflection.CustomAttributeExtensions.GetCustomAttributes(System.Reflection.Assembly,System.Type) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Reflection.CustomAttributeExtensions.GetCustomAttributes(System.Reflection.MemberInfo) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Reflection.CustomAttributeExtensions.GetCustomAttributes(System.Reflection.MemberInfo,System.Boolean) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Reflection.CustomAttributeExtensions.GetCustomAttributes(System.Reflection.MemberInfo,System.Type) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Reflection.CustomAttributeExtensions.GetCustomAttributes(System.Reflection.MemberInfo,System.Type,System.Boolean) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Reflection.CustomAttributeExtensions.GetCustomAttributes(System.Reflection.Module) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Reflection.CustomAttributeExtensions.GetCustomAttributes(System.Reflection.Module,System.Type) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Reflection.CustomAttributeExtensions.GetCustomAttributes(System.Reflection.ParameterInfo) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Reflection.CustomAttributeExtensions.GetCustomAttributes(System.Reflection.ParameterInfo,System.Boolean) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Reflection.CustomAttributeExtensions.GetCustomAttributes(System.Reflection.ParameterInfo,System.Type) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Reflection.CustomAttributeExtensions.GetCustomAttributes(System.Reflection.ParameterInfo,System.Type,System.Boolean) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Runtime.InteropServices.MemoryMarshal.g__FromString\|18_0`1(System.String,System.Int32,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Reflection.RuntimeReflectionExtensions.GetRuntimeEvents(System.Type) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Reflection.RuntimeReflectionExtensions.GetRuntimeFields(System.Type) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Reflection.RuntimeReflectionExtensions.GetRuntimeMethods(System.Type) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerable System.Reflection.RuntimeReflectionExtensions.GetRuntimeProperties(System.Type) | [ExtensionAttribute(...)] | -| System.Collections.Generic.IEnumerator System.Runtime.InteropServices.MemoryMarshal.<g__FromArray\|18_2>d`1.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.Generic.IEnumerator System.Runtime.InteropServices.MemoryMarshal.<g__FromMemoryManager\|18_1>d`1.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.Generic.IEnumerator System.Threading.Tasks.TaskAsyncEnumerableExtensions.d__3`1.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.Generic.IEnumerator System.Runtime.InteropServices.MemoryMarshal.<g__FromString\|18_0>d`1.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.Generic.IEnumerator> System.Diagnostics.Tracing.CounterPayload.d__51.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.Generic.IEnumerator> System.Diagnostics.Tracing.IncrementingCounterPayload.d__39.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.Generic.IEnumerator System.Threading.ThreadPool.d__26.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.Generic.IEnumerator System.Runtime.Loader.AssemblyLoadContext.d__55.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.Generic.IEnumerator System.Reflection.TypeInfo.d__10.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.Generic.IEnumerator System.Reflection.TypeInfo.d__22.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.Generic.IEnumerator System.Runtime.Loader.AssemblyLoadContext.d__85.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.Generic.IEnumerator System.Runtime.Loader.LibraryNameVariation.d__5.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.Generic.IEnumerator System.Threading.Tasks.ThreadPoolTaskScheduler.d__6.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.Generic.IEnumerator System.Threading.TimerQueue.d__7.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.Generic.KeyValuePair System.Diagnostics.Tracing.CounterPayload.d__51.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Collections.Generic.KeyValuePair System.Diagnostics.Tracing.EventPayload.d__17.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Collections.Generic.KeyValuePair System.Diagnostics.Tracing.IncrementingCounterPayload.d__39.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Collections.Generic.KeyValuePair`2 | [IsReadOnlyAttribute(...)] | -| System.Collections.Generic.ReferenceEqualityComparer System.Collections.Generic.ReferenceEqualityComparer.get_Instance() | [CompilerGeneratedAttribute(...)] | -| System.Collections.Generic.ReferenceEqualityComparer.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Collections.Generic.ValueListBuilder`1 | [IsByRefLikeAttribute(...)] | -| System.Collections.IEnumerator System.Diagnostics.Tracing.CounterPayload.d__51.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.IEnumerator System.Diagnostics.Tracing.IncrementingCounterPayload.d__39.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.IEnumerator System.Reflection.TypeInfo.d__10.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.IEnumerator System.Reflection.TypeInfo.d__22.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.IEnumerator System.Runtime.InteropServices.MemoryMarshal.<g__FromArray\|18_2>d`1.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.IEnumerator System.Runtime.InteropServices.MemoryMarshal.<g__FromMemoryManager\|18_1>d`1.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.IEnumerator System.Runtime.InteropServices.MemoryMarshal.<g__FromString\|18_0>d`1.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.IEnumerator System.Runtime.Loader.AssemblyLoadContext.d__85.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.IEnumerator System.Runtime.Loader.AssemblyLoadContext.d__55.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.IEnumerator System.Runtime.Loader.LibraryNameVariation.d__5.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.IEnumerator System.Threading.Tasks.TaskAsyncEnumerableExtensions.d__3`1.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.IEnumerator System.Threading.Tasks.ThreadPoolTaskScheduler.d__6.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.IEnumerator System.Threading.ThreadPool.d__26.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.IEnumerator System.Threading.TimerQueue.d__7.GetEnumerator() | [DebuggerHiddenAttribute(...)] | -| System.Collections.ObjectModel.ReadOnlyCollection System.Collections.Generic.CollectionExtensions.AsReadOnly`1(System.Collections.Generic.IList) | [ExtensionAttribute(...)] | -| System.Collections.ObjectModel.ReadOnlyCollection System.Collections.ObjectModel.ReadOnlyCollection`1.get_Empty() | [CompilerGeneratedAttribute(...)] | -| System.Collections.ObjectModel.ReadOnlyCollection System.Diagnostics.Tracing.EventWrittenEventArgs.get_Payload() | [CompilerGeneratedAttribute(...)] | -| System.Collections.ObjectModel.ReadOnlyCollection`1.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Collections.ObjectModel.ReadOnlyDictionary System.Collections.Generic.CollectionExtensions.AsReadOnly`2(System.Collections.Generic.IDictionary) | [ExtensionAttribute(...)] | -| System.Collections.ObjectModel.ReadOnlyDictionary System.Collections.ObjectModel.ReadOnlyDictionary`2.get_Empty() | [CompilerGeneratedAttribute(...)] | -| System.Collections.ObjectModel.ReadOnlyDictionary`2.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.ComponentModel.EditorBrowsableAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.ComponentModel.EditorBrowsableState System.ComponentModel.EditorBrowsableAttribute.get_State() | [CompilerGeneratedAttribute(...)] | -| System.ComponentModel.Win32Exception.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Console.<>O | [CompilerGeneratedAttribute(...)] | -| System.ConsoleCancelEventArgs.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.ConsoleKey System.IO.KeyParser.g__ControlAndDigitPressed\|8_2(System.Char,System.Char,System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.ConsoleKey System.IO.KeyParser.g__ControlAndLetterPressed\|8_1(System.Char,System.Boolean,System.Char,System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.ConsoleKey System.IO.KeyParser.g__UppercaseCharacter\|8_0(System.Char,System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.ConsoleKey System.IO.KeyParser.g__MapEscapeSequenceNumber\|7_2(System.Byte) | [CompilerGeneratedAttribute(...)] | -| System.ConsoleKeyInfo | [IsReadOnlyAttribute(...)] | -| System.ConsoleKeyInfo System.IO.KeyParser.g__Create\|7_7(System.Char,System.ConsoleKey,System.ConsoleModifiers) | [CompilerGeneratedAttribute(...)] | -| System.ConsoleModifiers | [FlagsAttribute(...)] | -| System.ConsoleModifiers System.IO.KeyParser.g__MapRxvtModifiers\|7_6(System.Char) | [CompilerGeneratedAttribute(...)] | -| System.ConsoleModifiers System.IO.KeyParser.g__MapXtermModifiers\|7_3(System.Char) | [CompilerGeneratedAttribute(...)] | -| System.ConsolePal.<>c | [CompilerGeneratedAttribute(...)] | -| System.Convert | [ExtensionAttribute(...)] | -| System.DTSubString | [IsByRefLikeAttribute(...)] | -| System.DateOnly | [IsReadOnlyAttribute(...)] | -| System.DateOnly.<>c | [CompilerGeneratedAttribute(...)] | -| System.DateTime | [IsReadOnlyAttribute(...)] | -| System.DateTime System.Diagnostics.Tracing.EventWrittenEventArgs.get_TimeStamp() | [CompilerGeneratedAttribute(...)] | -| System.DateTimeOffset | [IsReadOnlyAttribute(...)] | -| System.DateTimeParse.TM | [ScopedRefAttribute(...)] | -| System.DateTimeRawInfo | [ScopedRefAttribute(...)] | -| System.DateTimeResult | [IsByRefLikeAttribute(...)] | -| System.DateTimeResult | [ScopedRefAttribute(...)] | -| System.DateTimeToken | [ScopedRefAttribute(...)] | -| System.Decimal System.Runtime.InteropServices.CurrencyWrapper.get_WrappedObject() | [CompilerGeneratedAttribute(...)] | -| System.Decimal System.Runtime.InteropServices.NFloat.op_Explicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Decimal.DecCalc.PowerOvfl | [IsReadOnlyAttribute(...)] | -| System.DefaultBinder.Primitives | [FlagsAttribute(...)] | -| System.Delegate[] | [ParamArrayAttribute(...)] | -| System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.DoesNotReturnIfAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes | [FlagsAttribute(...)] | -| System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.get_MemberTypes() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute.get_MemberTypes() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.ExperimentalAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.ExperimentalAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.MemberNotNullAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.NotNullWhenAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.RequiresAssemblyFilesAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.RequiresAssemblyFilesAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.StringSyntaxAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.StringSyntaxAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.SuppressMessageAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.SuppressMessageAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.SuppressMessageAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.SuppressMessageAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.SuppressMessageAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.SuppressMessageAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.ConditionalAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Debug.AssertInterpolatedStringHandler | [InterpolatedStringHandlerAttribute(...)] | -| System.Diagnostics.Debug.WriteIfInterpolatedStringHandler | [InterpolatedStringHandlerAttribute(...)] | -| System.Diagnostics.Debug.t_indentLevel | [ThreadStaticAttribute(...)] | -| System.Diagnostics.DebuggableAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.DebuggableAttribute.DebuggingModes | [FlagsAttribute(...)] | -| System.Diagnostics.DebuggableAttribute.DebuggingModes System.Diagnostics.DebuggableAttribute.get_DebuggingFlags() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.DebuggerBrowsableAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.DebuggerBrowsableState System.Diagnostics.DebuggerBrowsableAttribute.get_State() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.DebuggerDisplayAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.DebuggerDisplayAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.DebuggerDisplayAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.DebuggerDisplayAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.DebuggerTypeProxyAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.DebuggerTypeProxyAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.DebuggerVisualizerAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.DebuggerVisualizerAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.DebuggerVisualizerAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.DebuggerVisualizerAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.StackFrameExtensions | [ExtensionAttribute(...)] | -| System.Diagnostics.StackFrameHelper.t_reentrancy | [ThreadStaticAttribute(...)] | -| System.Diagnostics.Tracing.CounterGroup.<>O | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.CounterPayload | [EventDataAttribute(...)] | -| System.Diagnostics.Tracing.CounterPayload System.Diagnostics.Tracing.CounterPayloadType.get_Payload() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.CounterPayload System.Diagnostics.Tracing.PollingPayloadType.get_Payload() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.CounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.CounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.CounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.CounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.CounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.CounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.CounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.CounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.CounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.CounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.CounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.CounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.CounterPayload.d__51 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.CounterPayloadType | [EventDataAttribute(...)] | -| System.Diagnostics.Tracing.CounterPayloadType.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.DataCollector.ThreadInstance | [ThreadStaticAttribute(...)] | -| System.Diagnostics.Tracing.DiagnosticCounter.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.DiagnosticCounter.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EmptyStruct | [IsReadOnlyAttribute(...)] | -| System.Diagnostics.Tracing.EventActivityOptions | [FlagsAttribute(...)] | -| System.Diagnostics.Tracing.EventActivityOptions System.Diagnostics.Tracing.EventAttribute.get_ActivityOptions() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventChannel System.Diagnostics.Tracing.EventAttribute.get_Channel() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventChannelAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventChannelAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventChannelType System.Diagnostics.Tracing.EventChannelAttribute.get_EventChannelType() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventCommand System.Diagnostics.Tracing.EventCommandEventArgs.get_Command() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventCommandEventArgs.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventCommandEventArgs.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventDataAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventDataAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventDataAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventDescriptor | [IsReadOnlyAttribute(...)] | -| System.Diagnostics.Tracing.EventFieldAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventFieldAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventFieldAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventFieldFormat System.Diagnostics.Tracing.EventFieldAttribute.get_Format() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventFieldTags | [FlagsAttribute(...)] | -| System.Diagnostics.Tracing.EventFieldTags System.Diagnostics.Tracing.EventFieldAttribute.get_Tags() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventFieldTags System.Diagnostics.Tracing.TraceLoggingMetadataCollector.get_Tags() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventKeywords | [FlagsAttribute(...)] | -| System.Diagnostics.Tracing.EventKeywords System.Diagnostics.Tracing.EventAttribute.get_Keywords() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventKeywords System.Diagnostics.Tracing.EventDataAttribute.get_Keywords() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventKeywords System.Diagnostics.Tracing.EventPipeEventDispatcher.EventListenerSubscription.get_MatchAnyKeywords() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventLevel System.Diagnostics.Tracing.EventAttribute.get_Level() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventLevel System.Diagnostics.Tracing.EventPipeEventDispatcher.EventListenerSubscription.get_Level() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventListener.<>c | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventListener.EventWritten | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventListener._EventSourceCreated | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventManifestOptions | [FlagsAttribute(...)] | -| System.Diagnostics.Tracing.EventPayload.d__17 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventPipeEventDispatcher.<>c__DisplayClass12_0 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventPipeEventDispatcher.EventListenerSubscription.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventPipeEventDispatcher.EventListenerSubscription.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventProvider.s_returnCode | [ThreadStaticAttribute(...)] | -| System.Diagnostics.Tracing.EventSource System.Diagnostics.Tracing.DiagnosticCounter.get_EventSource() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventSource System.Diagnostics.Tracing.EventSourceCreatedEventArgs.get_EventSource() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventSource System.Diagnostics.Tracing.EventWrittenEventArgs.get_EventSource() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventSource.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventSource.EventMetadata[] | [NotNullAttribute(...)] | -| System.Diagnostics.Tracing.EventSource.EventSourcePrimitive | [IsReadOnlyAttribute(...)] | -| System.Diagnostics.Tracing.EventSource.EventSourcePrimitive[] | [ParamArrayAttribute(...)] | -| System.Diagnostics.Tracing.EventSource.m_EventSourceExceptionRecurenceCount | [ThreadStaticAttribute(...)] | -| System.Diagnostics.Tracing.EventSourceAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventSourceAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventSourceAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventSourceCreatedEventArgs.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventSourceSettings | [FlagsAttribute(...)] | -| System.Diagnostics.Tracing.EventTags | [FlagsAttribute(...)] | -| System.Diagnostics.Tracing.EventTags System.Diagnostics.Tracing.EventAttribute.get_Tags() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventTags System.Diagnostics.Tracing.EventDataAttribute.get_Tags() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventTask System.Diagnostics.Tracing.EventAttribute.get_Task() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventWrittenEventArgs.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventWrittenEventArgs.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventWrittenEventArgs.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventWrittenEventArgs.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.IncrementingCounterPayload | [EventDataAttribute(...)] | -| System.Diagnostics.Tracing.IncrementingCounterPayload System.Diagnostics.Tracing.IncrementingEventCounterPayloadType.get_Payload() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.IncrementingCounterPayload System.Diagnostics.Tracing.IncrementingPollingCounterPayloadType.get_Payload() | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.IncrementingCounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.IncrementingCounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.IncrementingCounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.IncrementingCounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.IncrementingCounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.IncrementingCounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.IncrementingCounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.IncrementingCounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.IncrementingCounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.IncrementingCounterPayload.d__39 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.IncrementingEventCounter.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.IncrementingEventCounterPayloadType | [EventDataAttribute(...)] | -| System.Diagnostics.Tracing.IncrementingEventCounterPayloadType.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.IncrementingPollingCounter.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.IncrementingPollingCounterPayloadType | [EventDataAttribute(...)] | -| System.Diagnostics.Tracing.IncrementingPollingCounterPayloadType.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.ManifestBuilder.<>c | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PollingPayloadType | [EventDataAttribute(...)] | -| System.Diagnostics.Tracing.PollingPayloadType.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue | [IsReadOnlyAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.<>c | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.<>c__DisplayClass33_0 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass1_0 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass1_1 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass1_2 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass1_3 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass1_4 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass1_5 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass1_6 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass1_7 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass1_8 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass1_9 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass1_10 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass1_11 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass1_12 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass1_13 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass1_14 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass1_15 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass1_16 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass1_17 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass1_18 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass1_19 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass1_20 | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.RuntimeEventSource.<>O | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.RuntimeEventSource.<>c | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.Statics.<>O | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.TraceLoggingMetadataCollector.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.TraceLoggingTypeInfo.threadCache | [ThreadStaticAttribute(...)] | -| System.Diagnostics.Tracing.TraceLoggingTypeInfo[] | [ParamArrayAttribute(...)] | -| System.Double System.BitConverter.Int64BitsToDouble(System.Int64) | [IntrinsicAttribute(...)] | -| System.Double System.BitConverter.UInt64BitsToDouble(System.UInt64) | [IntrinsicAttribute(...)] | -| System.Double System.Diagnostics.Tracing.CounterPayload.get_Max() | [CompilerGeneratedAttribute(...)] | -| System.Double System.Diagnostics.Tracing.CounterPayload.get_Mean() | [CompilerGeneratedAttribute(...)] | -| System.Double System.Diagnostics.Tracing.CounterPayload.get_Min() | [CompilerGeneratedAttribute(...)] | -| System.Double System.Diagnostics.Tracing.CounterPayload.get_StandardDeviation() | [CompilerGeneratedAttribute(...)] | -| System.Double System.Diagnostics.Tracing.IncrementingCounterPayload.get_Increment() | [CompilerGeneratedAttribute(...)] | -| System.Double System.Double.g__NegativeN\|219_1(System.Double,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Double System.Double.g__PositiveN\|219_0(System.Double,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Double System.Double.Abs(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Acos(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Acosh(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Asin(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Asinh(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Atan2(System.Double,System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Atan(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Atanh(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Cbrt(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Ceiling(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Cos(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Cosh(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Exp(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Floor(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.FusedMultiplyAdd(System.Double,System.Double,System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Log2(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Log10(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Log(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Max(System.Double,System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.MaxMagnitude(System.Double,System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.MaxMagnitudeNumber(System.Double,System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.MaxNumber(System.Double,System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Min(System.Double,System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.MinMagnitude(System.Double,System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.MinMagnitudeNumber(System.Double,System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.MinNumber(System.Double,System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Pow(System.Double,System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Round(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Sin(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Sinh(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Sqrt(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Tan(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Tanh(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Double.Truncate(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.g__SoftwareFallback\|53_0(System.Double,System.Double) | [CompilerGeneratedAttribute(...)] | -| System.Double System.Math.Abs(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Acos(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Acosh(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Asin(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Asinh(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Atan2(System.Double,System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Atan(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Atanh(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Cbrt(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Ceiling(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Cos(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Cosh(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Exp(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Floor(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.FusedMultiplyAdd(System.Double,System.Double,System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Log2(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Log10(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Log(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Max(System.Double,System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.MaxMagnitude(System.Double,System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Min(System.Double,System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.MinMagnitude(System.Double,System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Pow(System.Double,System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Round(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Sin(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Sinh(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Sqrt(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Tan(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Tanh(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Math.Truncate(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Runtime.InteropServices.NFloat.get_Value() | [NonVersionableAttribute(...)] | -| System.Double System.Threading.PortableThreadPool.HillClimbing.Complex.get_Imaginary() | [CompilerGeneratedAttribute(...)] | -| System.Double System.Threading.PortableThreadPool.HillClimbing.Complex.get_Real() | [CompilerGeneratedAttribute(...)] | -| System.Double System.Threading.Volatile.Read(System.Double) | [IntrinsicAttribute(...)] | -| System.Double System.Threading.Volatile.Read(System.Double) | [NonVersionableAttribute(...)] | -| System.Enum.<>c__63`1 | [CompilerGeneratedAttribute(...)] | -| System.Enum.EnumInfo System.Enum.g__InitializeEnumInfo\|7_0`1(System.RuntimeType,System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Environment.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Exception System.Runtime.ExceptionServices.ExceptionDispatchInfo.SetCurrentStackTrace(System.Exception) | [StackTraceHiddenAttribute(...)] | -| System.Exception System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs.get_Exception() | [CompilerGeneratedAttribute(...)] | -| System.Exception.DispatchState | [IsReadOnlyAttribute(...)] | -| System.Exception[] | [ParamArrayAttribute(...)] | -| System.Exception[] System.Reflection.ReflectionTypeLoadException.get_LoaderExceptions() | [CompilerGeneratedAttribute(...)] | -| System.GCGenerationInfo | [IsReadOnlyAttribute(...)] | -| System.GCGenerationInfo.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.GCGenerationInfo.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.GCGenerationInfo.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.GCGenerationInfo.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.GCMemoryInfo | [IsReadOnlyAttribute(...)] | -| System.Globalization.Calendar | [ScopedRefAttribute(...)] | -| System.Globalization.CalendarData.<>c | [CompilerGeneratedAttribute(...)] | -| System.Globalization.CalendricalCalculationsHelper.EphemerisCorrectionAlgorithmMap | [IsReadOnlyAttribute(...)] | -| System.Globalization.CompareOptions | [FlagsAttribute(...)] | -| System.Globalization.CultureInfo System.Resources.ResourceFallbackManager.d__5.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Globalization.CultureInfo.<>O | [CompilerGeneratedAttribute(...)] | -| System.Globalization.CultureInfo.s_currentThreadCulture | [ThreadStaticAttribute(...)] | -| System.Globalization.CultureInfo.s_currentThreadUICulture | [ThreadStaticAttribute(...)] | -| System.Globalization.CultureTypes | [FlagsAttribute(...)] | -| System.Globalization.DateTimeFormatFlags | [FlagsAttribute(...)] | -| System.Globalization.DateTimeFormatInfo | [ScopedRefAttribute(...)] | -| System.Globalization.DateTimeStyles | [FlagsAttribute(...)] | -| System.Globalization.DateTimeStyles | [ScopedRefAttribute(...)] | -| System.Globalization.DaylightTimeStruct | [IsReadOnlyAttribute(...)] | -| System.Globalization.GlobalizationExtensions | [ExtensionAttribute(...)] | -| System.Globalization.GlobalizationMode.Settings.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Globalization.GlobalizationMode.Settings.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Globalization.HebrewNumber.HebrewValue | [IsReadOnlyAttribute(...)] | -| System.Globalization.MonthNameStyles | [FlagsAttribute(...)] | -| System.Globalization.NumberFormatInfo System.Globalization.NumberFormatInfo.g__GetProviderNonNull\|58_0(System.IFormatProvider) | [CompilerGeneratedAttribute(...)] | -| System.Globalization.NumberStyles | [FlagsAttribute(...)] | -| System.Globalization.OrdinalCasing | [ExtensionAttribute(...)] | -| System.Globalization.TextInfo.ToLowerConversion | [IsReadOnlyAttribute(...)] | -| System.Globalization.TextInfo.ToUpperConversion | [IsReadOnlyAttribute(...)] | -| System.Globalization.TimeSpanParse.StringParser | [IsByRefLikeAttribute(...)] | -| System.Globalization.TimeSpanParse.TimeSpanRawInfo | [IsByRefLikeAttribute(...)] | -| System.Globalization.TimeSpanParse.TimeSpanResult | [IsByRefLikeAttribute(...)] | -| System.Globalization.TimeSpanParse.TimeSpanStandardStyles | [FlagsAttribute(...)] | -| System.Globalization.TimeSpanParse.TimeSpanToken | [IsByRefLikeAttribute(...)] | -| System.Globalization.TimeSpanParse.TimeSpanTokenizer | [IsByRefLikeAttribute(...)] | -| System.Globalization.TimeSpanStyles | [FlagsAttribute(...)] | -| System.Globalization.UmAlQuraCalendar.DateMapping | [IsReadOnlyAttribute(...)] | -| System.Guid | [IsReadOnlyAttribute(...)] | -| System.Guid | [NonVersionableAttribute(...)] | -| System.Guid | [RequiresLocationAttribute(...)] | -| System.Guid System.Guid.GuidResult.ToGuid() | [IsReadOnlyAttribute(...)] | -| System.Half | [IsReadOnlyAttribute(...)] | -| System.Half System.Runtime.InteropServices.NFloat.op_Explicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.HexConverter.<>c | [CompilerGeneratedAttribute(...)] | -| System.IO.BufferedStream.d__68 | [CompilerGeneratedAttribute(...)] | -| System.IO.BufferedStream.d__33 | [CompilerGeneratedAttribute(...)] | -| System.IO.BufferedStream.d__36 | [CompilerGeneratedAttribute(...)] | -| System.IO.BufferedStream.d__40 | [CompilerGeneratedAttribute(...)] | -| System.IO.BufferedStream.d__48 | [CompilerGeneratedAttribute(...)] | -| System.IO.BufferedStream.d__59 | [CompilerGeneratedAttribute(...)] | -| System.IO.Enumeration.FileSystemEntry | [IsByRefLikeAttribute(...)] | -| System.IO.Enumeration.FileSystemEntry.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.IO.Enumeration.FileSystemEntry.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.IO.Enumeration.FileSystemEntry.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.IO.Enumeration.FileSystemEntry.FileNameBuffer.<_buffer>e__FixedBuffer | [CompilerGeneratedAttribute(...)] | -| System.IO.Enumeration.FileSystemEntry.FileNameBuffer.<_buffer>e__FixedBuffer | [UnsafeValueTypeAttribute(...)] | -| System.IO.Enumeration.FileSystemEnumerable.FindPredicate System.IO.Enumeration.FileSystemEnumerable`1.get_ShouldIncludePredicate() | [CompilerGeneratedAttribute(...)] | -| System.IO.Enumeration.FileSystemEnumerable.FindPredicate System.IO.Enumeration.FileSystemEnumerable`1.get_ShouldRecursePredicate() | [CompilerGeneratedAttribute(...)] | -| System.IO.Enumeration.FileSystemEnumerableFactory.<>c | [CompilerGeneratedAttribute(...)] | -| System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass2_0 | [CompilerGeneratedAttribute(...)] | -| System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass3_0 | [CompilerGeneratedAttribute(...)] | -| System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass4_0 | [CompilerGeneratedAttribute(...)] | -| System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass5_0 | [CompilerGeneratedAttribute(...)] | -| System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass6_0 | [CompilerGeneratedAttribute(...)] | -| System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass7_0 | [CompilerGeneratedAttribute(...)] | -| System.IO.Enumeration.FileSystemEnumerable`1.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.IO.Enumeration.FileSystemEnumerable`1.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.IO.EnumerationOptions System.IO.EnumerationOptions.get_Compatible() | [CompilerGeneratedAttribute(...)] | -| System.IO.EnumerationOptions System.IO.EnumerationOptions.get_CompatibleRecursive() | [CompilerGeneratedAttribute(...)] | -| System.IO.EnumerationOptions System.IO.EnumerationOptions.get_Default() | [CompilerGeneratedAttribute(...)] | -| System.IO.EnumerationOptions.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.IO.EnumerationOptions.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.IO.EnumerationOptions.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.IO.EnumerationOptions.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.IO.EnumerationOptions.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.IO.EnumerationOptions.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.IO.EnumerationOptions.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.IO.EnumerationOptions.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.IO.EnumerationOptions.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.IO.EnumerationOptions.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.IO.File.<g__Core\|92_0>d | [CompilerGeneratedAttribute(...)] | -| System.IO.File.d__90 | [CompilerGeneratedAttribute(...)] | -| System.IO.File.d__91 | [CompilerGeneratedAttribute(...)] | -| System.IO.File.d__95 | [CompilerGeneratedAttribute(...)] | -| System.IO.File.d__86 | [CompilerGeneratedAttribute(...)] | -| System.IO.File.d__98 | [CompilerGeneratedAttribute(...)] | -| System.IO.File.d__110 | [CompilerGeneratedAttribute(...)] | -| System.IO.File.d__108 | [CompilerGeneratedAttribute(...)] | -| System.IO.FileAccess | [FlagsAttribute(...)] | -| System.IO.FileAttributes | [FlagsAttribute(...)] | -| System.IO.FileAttributes System.IO.EnumerationOptions.get_AttributesToSkip() | [CompilerGeneratedAttribute(...)] | -| System.IO.FileLoadException.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.IO.FileLoadException.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.IO.FileNotFoundException.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.IO.FileNotFoundException.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.IO.FileOptions | [FlagsAttribute(...)] | -| System.IO.FileShare | [FlagsAttribute(...)] | -| System.IO.FileStream.d__57 | [CompilerGeneratedAttribute(...)] | -| System.IO.FileSystem.<>O | [CompilerGeneratedAttribute(...)] | -| System.IO.FileSystem.<>c | [CompilerGeneratedAttribute(...)] | -| System.IO.MatchCasing System.IO.EnumerationOptions.get_MatchCasing() | [CompilerGeneratedAttribute(...)] | -| System.IO.MatchType System.IO.EnumerationOptions.get_MatchType() | [CompilerGeneratedAttribute(...)] | -| System.IO.Path.<>c | [CompilerGeneratedAttribute(...)] | -| System.IO.Strategies.BufferedFileStreamStrategy.d__57 | [CompilerGeneratedAttribute(...)] | -| System.IO.Strategies.BufferedFileStreamStrategy.d__27 | [CompilerGeneratedAttribute(...)] | -| System.IO.Strategies.BufferedFileStreamStrategy.d__55 | [CompilerGeneratedAttribute(...)] | -| System.IO.Strategies.BufferedFileStreamStrategy.d__37 | [CompilerGeneratedAttribute(...)] | -| System.IO.Strategies.BufferedFileStreamStrategy.d__36 | [CompilerGeneratedAttribute(...)] | -| System.IO.Strategies.BufferedFileStreamStrategy.d__48 | [CompilerGeneratedAttribute(...)] | -| System.IO.Strategies.BufferedFileStreamStrategy.d__47 | [CompilerGeneratedAttribute(...)] | -| System.IO.Strategies.FileStreamStrategy.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.IO.Stream.<g__Core\|27_0>d | [CompilerGeneratedAttribute(...)] | -| System.IO.Stream.<g__FinishReadAsync\|42_0>d | [CompilerGeneratedAttribute(...)] | -| System.IO.Stream.<>c | [CompilerGeneratedAttribute(...)] | -| System.IO.Stream.d__61 | [CompilerGeneratedAttribute(...)] | -| System.IO.Stream.d__46 | [CompilerGeneratedAttribute(...)] | -| System.IO.Stream.ReadWriteTask.<>O | [CompilerGeneratedAttribute(...)] | -| System.IO.StreamReader.d__69 | [CompilerGeneratedAttribute(...)] | -| System.IO.StreamReader.d__72 | [CompilerGeneratedAttribute(...)] | -| System.IO.StreamReader.d__63 | [CompilerGeneratedAttribute(...)] | -| System.IO.StreamReader.d__66 | [CompilerGeneratedAttribute(...)] | -| System.IO.StreamWriter.<g__Core\|76_0>d | [CompilerGeneratedAttribute(...)] | -| System.IO.StreamWriter.d__36 | [CompilerGeneratedAttribute(...)] | -| System.IO.StreamWriter.d__64 | [CompilerGeneratedAttribute(...)] | -| System.IO.StreamWriter.d__68 | [CompilerGeneratedAttribute(...)] | -| System.IO.SyncTextReader System.ConsolePal.g__EnsureInitialized\|19_0() | [CompilerGeneratedAttribute(...)] | -| System.IO.TextReader System.Console.g__EnsureInitialized\|14_0() | [CompilerGeneratedAttribute(...)] | -| System.IO.TextReader.<>c | [CompilerGeneratedAttribute(...)] | -| System.IO.TextReader.d__23 | [CompilerGeneratedAttribute(...)] | -| System.IO.TextReader.d__17 | [CompilerGeneratedAttribute(...)] | -| System.IO.TextWriter System.Console.g__EnsureInitialized\|28_0() | [CompilerGeneratedAttribute(...)] | -| System.IO.TextWriter System.Console.g__EnsureInitialized\|26_0() | [CompilerGeneratedAttribute(...)] | -| System.IO.TextWriter.<g__WriteAsyncCore\|60_0>d | [CompilerGeneratedAttribute(...)] | -| System.IO.TextWriter.<g__WriteLineAsyncCore\|66_0>d | [CompilerGeneratedAttribute(...)] | -| System.IO.TextWriter.<>c | [CompilerGeneratedAttribute(...)] | -| System.IO.UnixFileMode | [FlagsAttribute(...)] | -| System.Index | [IsReadOnlyAttribute(...)] | -| System.Index System.Range.get_End() | [CompilerGeneratedAttribute(...)] | -| System.Index System.Range.get_Start() | [CompilerGeneratedAttribute(...)] | -| System.Int16 System.Buffers.Binary.BinaryPrimitives.ReverseEndianness(System.Int16) | [IntrinsicAttribute(...)] | -| System.Int16 System.Math.Max(System.Int16,System.Int16) | [NonVersionableAttribute(...)] | -| System.Int16 System.Math.Min(System.Int16,System.Int16) | [NonVersionableAttribute(...)] | -| System.Int16 System.Runtime.InteropServices.NFloat.op_CheckedExplicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Int16 System.Runtime.InteropServices.NFloat.op_Explicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Int16 System.Threading.Volatile.Read(System.Int16) | [IntrinsicAttribute(...)] | -| System.Int16 System.Threading.Volatile.Read(System.Int16) | [NonVersionableAttribute(...)] | -| System.Int32 Internal.Runtime.InteropServices.ComActivator.GetClassFactoryForTypeInternal(Internal.Runtime.InteropServices.ComActivationContextInternal*) | [UnmanagedCallersOnlyAttribute(...)] | -| System.Int32 Internal.Runtime.InteropServices.ComActivator.RegisterClassForTypeInternal(Internal.Runtime.InteropServices.ComActivationContextInternal*) | [UnmanagedCallersOnlyAttribute(...)] | -| System.Int32 Internal.Runtime.InteropServices.ComActivator.UnregisterClassForTypeInternal(Internal.Runtime.InteropServices.ComActivationContextInternal*) | [UnmanagedCallersOnlyAttribute(...)] | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.GetFunctionPointer(System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr) | [UnmanagedCallersOnlyAttribute(...)] | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssembly(System.IntPtr,System.IntPtr,System.IntPtr) | [UnmanagedCallersOnlyAttribute(...)] | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyAndGetFunctionPointer(System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr) | [UnmanagedCallersOnlyAttribute(...)] | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyBytes(System.Byte*,System.IntPtr,System.Byte*,System.IntPtr,System.IntPtr,System.IntPtr) | [UnmanagedCallersOnlyAttribute(...)] | -| System.Int32 Interop.Globalization.g____PInvoke\|16_0(System.IntPtr,System.Char*,System.Int32,System.Char*,System.Int32,System.Globalization.CompareOptions,System.Int32*) | [CompilerGeneratedAttribute(...)] | -| System.Int32 Interop.Globalization.g____PInvoke\|3_0(System.IntPtr,System.UInt16*,System.Globalization.CalendarId,System.Globalization.CalendarDataType,System.IntPtr) | [CompilerGeneratedAttribute(...)] | -| System.Int32 Interop.Globalization.g____PInvoke\|0_0(System.UInt16*,System.Globalization.CalendarId*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 Interop.Globalization.g____PInvoke\|31_0(System.Char*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 Interop.Globalization.g____PInvoke\|5_0(System.Int32,System.Int32*,System.Int32*,System.Int32*) | [CompilerGeneratedAttribute(...)] | -| System.Int32 Interop.Globalization.g____PInvoke\|35_0(System.UInt16*,System.UInt32,System.Int32*,System.Int32*) | [CompilerGeneratedAttribute(...)] | -| System.Int32 Interop.Globalization.g____PInvoke\|34_0(System.UInt16*,System.UInt32,System.Int32*) | [CompilerGeneratedAttribute(...)] | -| System.Int32 Interop.Globalization.g____PInvoke\|30_0(System.UInt16*,System.UInt32,System.Char*,System.Int32,System.UInt16*) | [CompilerGeneratedAttribute(...)] | -| System.Int32 Interop.Globalization.g____PInvoke\|29_0(System.UInt16*,System.Char*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 Interop.Globalization.g____PInvoke\|33_0(System.UInt16*,System.Int32,System.Char*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 Interop.Globalization.g____PInvoke\|36_0(System.Char*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 Interop.Globalization.g____PInvoke\|43_0(System.UInt16*,System.Char*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 Interop.Globalization.g____PInvoke\|32_0(System.UInt16*) | [CompilerGeneratedAttribute(...)] | -| System.Int32 Interop.Globalization.g____PInvoke\|15_0(System.IntPtr,System.Char*,System.Int32,System.Char*,System.Int32,System.Globalization.CompareOptions,System.Int32*) | [CompilerGeneratedAttribute(...)] | -| System.Int32 Interop.Globalization.g____PInvoke\|42_0(System.UInt16*,System.IntPtr,System.Char*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 Interop.Globalization.CompareString(System.IntPtr,System.Char*,System.Int32,System.Char*,System.Int32,System.Globalization.CompareOptions) | [LibraryImportAttribute(...)] | -| System.Int32 Interop.Globalization.GetCalendars(System.String,System.Globalization.CalendarId[],System.Int32) | [LibraryImportAttribute(...)] | -| System.Int32 Interop.Globalization.GetLocales(System.Char[],System.Int32) | [LibraryImportAttribute(...)] | -| System.Int32 Interop.Globalization.GetSortKey(System.IntPtr,System.Char*,System.Int32,System.Byte*,System.Int32,System.Globalization.CompareOptions) | [LibraryImportAttribute(...)] | -| System.Int32 Interop.Globalization.IanaIdToWindowsId(System.String,System.Char*,System.Int32) | [LibraryImportAttribute(...)] | -| System.Int32 Interop.Globalization.IndexOf(System.IntPtr,System.Char*,System.Int32,System.Char*,System.Int32,System.Globalization.CompareOptions,System.Int32*) | [LibraryImportAttribute(...)] | -| System.Int32 Interop.Globalization.IsNormalized(System.Text.NormalizationForm,System.Char*,System.Int32) | [LibraryImportAttribute(...)] | -| System.Int32 Interop.Globalization.LastIndexOf(System.IntPtr,System.Char*,System.Int32,System.Char*,System.Int32,System.Globalization.CompareOptions,System.Int32*) | [LibraryImportAttribute(...)] | -| System.Int32 Interop.Globalization.NormalizeString(System.Text.NormalizationForm,System.Char*,System.Int32,System.Char*,System.Int32) | [LibraryImportAttribute(...)] | -| System.Int32 Interop.Globalization.ToAscii(System.UInt32,System.Char*,System.Int32,System.Char*,System.Int32) | [LibraryImportAttribute(...)] | -| System.Int32 Interop.Globalization.ToUnicode(System.UInt32,System.Char*,System.Int32,System.Char*,System.Int32) | [LibraryImportAttribute(...)] | -| System.Int32 Interop.Globalization.WindowsIdToIanaId(System.String,System.IntPtr,System.Char*,System.Int32) | [LibraryImportAttribute(...)] | -| System.Int32 Interop.HostPolicy.g____PInvoke\|2_0(System.Byte*,System.IntPtr) | [CompilerGeneratedAttribute(...)] | -| System.Int32 Interop.HostPolicy.corehost_resolve_component_dependencies(System.String,Interop.HostPolicy.corehost_resolve_component_dependencies_result_fn) | [LibraryImportAttribute(...)] | -| System.Int32 Interop.Kernel32.g____PInvoke\|46_0(System.IntPtr) | [CompilerGeneratedAttribute(...)] | -| System.Int32 Interop.Kernel32.g____PInvoke\|70_0(System.Int32,System.IntPtr,System.UInt32,System.Int32,System.Void*,System.Int32,System.IntPtr) | [CompilerGeneratedAttribute(...)] | -| System.Int32 Interop.Kernel32.g____PInvoke\|77_0(System.IntPtr) | [CompilerGeneratedAttribute(...)] | -| System.Int32 Interop.Kernel32.g____PInvoke\|80_0(System.IntPtr,System.Int32,System.Int32*) | [CompilerGeneratedAttribute(...)] | -| System.Int32 Interop.Kernel32.g____PInvoke\|58_0(System.IntPtr) | [CompilerGeneratedAttribute(...)] | -| System.Int32 Interop.Kernel32.g____PInvoke\|81_0(System.UInt16*,System.UInt16*) | [CompilerGeneratedAttribute(...)] | -| System.Int32 Interop.Kernel32.g____PInvoke\|57_0(System.IntPtr) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Array.g__GenericBinarySearch\|85_0`1(System.Array,System.Int32,System.Int32,System.Object) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Array.g__GenericIndexOf\|110_0`1(System.Array,System.Object,System.Int32,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Array.g__GenericLastIndexOf\|116_0`1(System.Array,System.Object,System.Int32,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Array.GetLength(System.Int32) | [IntrinsicAttribute(...)] | -| System.Int32 System.Array.GetLowerBound(System.Int32) | [IntrinsicAttribute(...)] | -| System.Int32 System.Array.GetUpperBound(System.Int32) | [IntrinsicAttribute(...)] | -| System.Int32 System.BitConverter.SingleToInt32Bits(System.Single) | [IntrinsicAttribute(...)] | -| System.Int32 System.Buffers.Binary.BinaryPrimitives.ReverseEndianness(System.Int32) | [IntrinsicAttribute(...)] | -| System.Int32 System.ComponentModel.Win32Exception.get_NativeErrorCode() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Diagnostics.Debugger.g____PInvoke\|6_0() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Diagnostics.Tracing.CounterPayload.get_Count() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Diagnostics.Tracing.EventAttribute.get_EventId() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Diagnostics.Tracing.EventPipeInternal.g____PInvoke\|6_0(System.UInt32,System.Guid*) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Diagnostics.Tracing.EventPipeInternal.g____PInvoke\|9_0(System.UInt64,System.Diagnostics.Tracing.EventPipeEventInstanceData*) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Diagnostics.Tracing.EventPipeInternal.g____PInvoke\|8_0(System.UInt64,System.Diagnostics.Tracing.EventPipeSessionInfo*) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Diagnostics.Tracing.EventPipeInternal.g____PInvoke\|10_0(System.UInt64) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Diagnostics.Tracing.EventPipeInternal.g____PInvoke\|11_0(System.UInt64,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Diagnostics.Tracing.EventWrittenEventArgs.get_EventId() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Environment.get_ProcessorCount() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.GC.<_StartNoGCRegion>g____PInvoke\|3_0(System.Int64,System.Int32,System.Int64,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Globalization.ISOWeek.g__P\|8_0(System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Globalization.IcuLocaleData.g__ResolveDigitListSeparator\|25_1(System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Globalization.IcuLocaleData.g__ResolveIndex\|25_0(System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.IO.EnumerationOptions.get_BufferSize() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Int32.LeadingZeroCount(System.Int32) | [IntrinsicAttribute(...)] | -| System.Int32 System.Int32.Log2(System.Int32) | [IntrinsicAttribute(...)] | -| System.Int32 System.Int32.PopCount(System.Int32) | [IntrinsicAttribute(...)] | -| System.Int32 System.Int32.RotateLeft(System.Int32,System.Int32) | [IntrinsicAttribute(...)] | -| System.Int32 System.Int32.RotateRight(System.Int32,System.Int32) | [IntrinsicAttribute(...)] | -| System.Int32 System.Int32.TrailingZeroCount(System.Int32) | [IntrinsicAttribute(...)] | -| System.Int32 System.IntPtr.ToInt32() | [NonVersionableAttribute(...)] | -| System.Int32 System.IntPtr.get_Size() | [NonVersionableAttribute(...)] | -| System.Int32 System.IntPtr.op_Explicit(System.IntPtr) | [NonVersionableAttribute(...)] | -| System.Int32 System.Math.Max(System.Int32,System.Int32) | [NonVersionableAttribute(...)] | -| System.Int32 System.Math.Min(System.Int32,System.Int32) | [NonVersionableAttribute(...)] | -| System.Int32 System.MdUtf8String.g____PInvoke\|0_0(System.Void*,System.Void*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.MemoryExtensions.BinarySearch`1(System.ReadOnlySpan,System.IComparable) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.BinarySearch`1(System.Span,System.IComparable) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.BinarySearch`2(System.ReadOnlySpan,!0,!1) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.BinarySearch`2(System.ReadOnlySpan,!1) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.BinarySearch`2(System.Span,!0,!1) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.BinarySearch`2(System.Span,!1) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.CommonPrefixLength`1(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.CommonPrefixLength`1(System.ReadOnlySpan,System.ReadOnlySpan,System.Collections.Generic.IEqualityComparer) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.CommonPrefixLength`1(System.Span,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.CommonPrefixLength`1(System.Span,System.ReadOnlySpan,System.Collections.Generic.IEqualityComparer) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.CompareTo(System.ReadOnlySpan,System.ReadOnlySpan,System.StringComparison) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.Count`1(System.ReadOnlySpan,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.Count`1(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.Count`1(System.Span,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.Count`1(System.Span,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOf(System.ReadOnlySpan,System.ReadOnlySpan,System.StringComparison) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAnyExceptInRange`1(System.ReadOnlySpan,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAnyExceptInRange`1(System.Span,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAnyExcept`1(System.ReadOnlySpan,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAnyExcept`1(System.ReadOnlySpan,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAnyExcept`1(System.ReadOnlySpan,!0,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAnyExcept`1(System.ReadOnlySpan,!0,!0,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAnyExcept`1(System.ReadOnlySpan,System.Buffers.SearchValues) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAnyExcept`1(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAnyExcept`1(System.Span,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAnyExcept`1(System.Span,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAnyExcept`1(System.Span,!0,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAnyExcept`1(System.Span,System.Buffers.SearchValues) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAnyExcept`1(System.Span,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAnyInRange`1(System.ReadOnlySpan,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAnyInRange`1(System.Span,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAny`1(System.ReadOnlySpan,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAny`1(System.ReadOnlySpan,!0,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAny`1(System.ReadOnlySpan,System.Buffers.SearchValues) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAny`1(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAny`1(System.Span,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAny`1(System.Span,!0,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAny`1(System.Span,System.Buffers.SearchValues) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOfAny`1(System.Span,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOf`1(System.ReadOnlySpan,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOf`1(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOf`1(System.Span,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.IndexOf`1(System.Span,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOf(System.ReadOnlySpan,System.ReadOnlySpan,System.StringComparison) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyExceptInRange`1(System.ReadOnlySpan,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyExceptInRange`1(System.Span,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyExcept`1(System.ReadOnlySpan,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyExcept`1(System.ReadOnlySpan,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyExcept`1(System.ReadOnlySpan,!0,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyExcept`1(System.ReadOnlySpan,!0,!0,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyExcept`1(System.ReadOnlySpan,System.Buffers.SearchValues) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyExcept`1(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyExcept`1(System.Span,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyExcept`1(System.Span,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyExcept`1(System.Span,!0,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyExcept`1(System.Span,System.Buffers.SearchValues) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyExcept`1(System.Span,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyInRange`1(System.ReadOnlySpan,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyInRange`1(System.Span,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAny`1(System.ReadOnlySpan,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAny`1(System.ReadOnlySpan,!0,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAny`1(System.ReadOnlySpan,System.Buffers.SearchValues) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAny`1(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAny`1(System.Span,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAny`1(System.Span,!0,!0,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAny`1(System.Span,System.Buffers.SearchValues) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOfAny`1(System.Span,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOf`1(System.ReadOnlySpan,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOf`1(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOf`1(System.Span,!0) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.LastIndexOf`1(System.Span,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.SequenceCompareTo`1(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.SequenceCompareTo`1(System.Span,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.Split(System.ReadOnlySpan,System.Span,System.Char,System.StringSplitOptions) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.Split(System.ReadOnlySpan,System.Span,System.ReadOnlySpan,System.StringSplitOptions) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.SplitAny(System.ReadOnlySpan,System.Span,System.ReadOnlySpan,System.StringSplitOptions) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.SplitAny(System.ReadOnlySpan,System.Span,System.ReadOnlySpan,System.StringSplitOptions) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.ToLower(System.ReadOnlySpan,System.Span,System.Globalization.CultureInfo) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.ToLowerInvariant(System.ReadOnlySpan,System.Span) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.ToUpper(System.ReadOnlySpan,System.Span,System.Globalization.CultureInfo) | [ExtensionAttribute(...)] | -| System.Int32 System.MemoryExtensions.ToUpperInvariant(System.ReadOnlySpan,System.Span) | [ExtensionAttribute(...)] | -| System.Int32 System.Numerics.BitOperations.g__SoftwareFallback\|24_0(System.UInt32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Numerics.BitOperations.g__SoftwareFallback\|25_0(System.UInt64) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Numerics.BitOperations.LeadingZeroCount(System.UInt32) | [IntrinsicAttribute(...)] | -| System.Int32 System.Numerics.BitOperations.LeadingZeroCount(System.UInt64) | [IntrinsicAttribute(...)] | -| System.Int32 System.Numerics.BitOperations.LeadingZeroCount(System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Int32 System.Numerics.BitOperations.Log2(System.UInt32) | [IntrinsicAttribute(...)] | -| System.Int32 System.Numerics.BitOperations.Log2(System.UInt64) | [IntrinsicAttribute(...)] | -| System.Int32 System.Numerics.BitOperations.Log2(System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Int32 System.Numerics.BitOperations.PopCount(System.UInt32) | [IntrinsicAttribute(...)] | -| System.Int32 System.Numerics.BitOperations.PopCount(System.UInt64) | [IntrinsicAttribute(...)] | -| System.Int32 System.Numerics.BitOperations.PopCount(System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Int32 System.Numerics.BitOperations.TrailingZeroCount(System.Int64) | [IntrinsicAttribute(...)] | -| System.Int32 System.Numerics.BitOperations.TrailingZeroCount(System.IntPtr) | [IntrinsicAttribute(...)] | -| System.Int32 System.Numerics.BitOperations.TrailingZeroCount(System.UInt32) | [IntrinsicAttribute(...)] | -| System.Int32 System.Numerics.BitOperations.TrailingZeroCount(System.UInt64) | [IntrinsicAttribute(...)] | -| System.Int32 System.Numerics.BitOperations.TrailingZeroCount(System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Int32 System.Numerics.Matrix3x2.GetHashCode() | [IsReadOnlyAttribute(...)] | -| System.Int32 System.Numerics.Matrix3x2.Impl.GetHashCode() | [IsReadOnlyAttribute(...)] | -| System.Int32 System.Numerics.Matrix4x4.GetHashCode() | [IsReadOnlyAttribute(...)] | -| System.Int32 System.Numerics.Matrix4x4.Impl.GetHashCode() | [IsReadOnlyAttribute(...)] | -| System.Int32 System.Numerics.Plane.GetHashCode() | [IsReadOnlyAttribute(...)] | -| System.Int32 System.Numerics.Quaternion.GetHashCode() | [IsReadOnlyAttribute(...)] | -| System.Int32 System.Numerics.TotalOrderIeee754Comparer`1.g__CompareGeneric\|0_1(!0,!0) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Numerics.TotalOrderIeee754Comparer`1.g__CompareIntegerSemantic\|0_0`1(!0,!0) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Numerics.TotalOrderIeee754Comparer`1.g__CompareSignificand\|0_2(!0,!0) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Numerics.Vector2.GetHashCode() | [IsReadOnlyAttribute(...)] | -| System.Int32 System.Numerics.Vector3.GetHashCode() | [IsReadOnlyAttribute(...)] | -| System.Int32 System.Numerics.Vector4.GetHashCode() | [IsReadOnlyAttribute(...)] | -| System.Int32 System.Numerics.Vector`1.get_Count() | [IntrinsicAttribute(...)] | -| System.Int32 System.ReadOnlySpan`1.get_Length() | [IntrinsicAttribute(...)] | -| System.Int32 System.ReadOnlySpan`1.get_Length() | [NonVersionableAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.g____PInvoke\|25_0(System.Runtime.CompilerServices.QCallModule,System.Int32,System.UInt16*,System.Byte*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.g____PInvoke\|16_0(System.Runtime.CompilerServices.QCallModule,System.Int32,System.UInt16*,System.Byte*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.g____PInvoke\|26_0(System.Runtime.CompilerServices.QCallModule,System.UInt16*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.g____PInvoke\|23_0(System.Runtime.CompilerServices.QCallModule,System.Byte*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.g____PInvoke\|13_0(System.Runtime.CompilerServices.QCallModule,System.UInt16*,System.Runtime.CompilerServices.QCallModule,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.GetArrayMethodToken(System.Runtime.CompilerServices.QCallModule,System.Int32,System.String,System.Byte[],System.Int32) | [LibraryImportAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.GetMemberRefFromSignature(System.Runtime.CompilerServices.QCallModule,System.Int32,System.String,System.Byte[],System.Int32) | [LibraryImportAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.GetStringConstant(System.Runtime.CompilerServices.QCallModule,System.String,System.Int32) | [LibraryImportAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.GetTypeRef(System.Runtime.CompilerServices.QCallModule,System.String,System.Runtime.CompilerServices.QCallModule,System.Int32) | [LibraryImportAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.g____PInvoke\|11_0(System.Runtime.CompilerServices.QCallModule,System.Int32,System.UInt16*,System.Reflection.EventAttributes,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.g____PInvoke\|6_0(System.Runtime.CompilerServices.QCallModule,System.Int32,System.UInt16*,System.Byte*,System.Int32,System.Reflection.FieldAttributes) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.g____PInvoke\|56_0(System.Runtime.CompilerServices.QCallModule,System.UInt16*,System.Int32,System.Reflection.GenericParameterAttributes,System.Int32,System.Int32*) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.g____PInvoke\|4_0(System.Runtime.CompilerServices.QCallModule,System.Int32,System.UInt16*,System.Byte*,System.Int32,System.Reflection.MethodAttributes) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.g____PInvoke\|5_0(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Byte*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.g____PInvoke\|10_0(System.Runtime.CompilerServices.QCallModule,System.Int32,System.UInt16*,System.Reflection.PropertyAttributes,System.Byte*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.g____PInvoke\|55_0(System.Runtime.CompilerServices.QCallModule,System.UInt16*,System.Int32,System.Reflection.TypeAttributes,System.Int32,System.Int32*) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.g____PInvoke\|16_0(System.Runtime.CompilerServices.QCallModule,System.Byte*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.g____PInvoke\|15_0(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Int32,System.Reflection.ParameterAttributes,System.UInt16*) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.DefineEvent(System.Runtime.CompilerServices.QCallModule,System.Int32,System.String,System.Reflection.EventAttributes,System.Int32) | [LibraryImportAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.DefineField(System.Runtime.CompilerServices.QCallModule,System.Int32,System.String,System.Byte[],System.Int32,System.Reflection.FieldAttributes) | [LibraryImportAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.DefineGenericParam(System.Runtime.CompilerServices.QCallModule,System.String,System.Int32,System.Reflection.GenericParameterAttributes,System.Int32,System.Int32[]) | [LibraryImportAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.DefineMethod(System.Runtime.CompilerServices.QCallModule,System.Int32,System.String,System.Byte[],System.Int32,System.Reflection.MethodAttributes) | [LibraryImportAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.DefineProperty(System.Runtime.CompilerServices.QCallModule,System.Int32,System.String,System.Reflection.PropertyAttributes,System.Byte[],System.Int32) | [LibraryImportAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.DefineType(System.Runtime.CompilerServices.QCallModule,System.String,System.Int32,System.Reflection.TypeAttributes,System.Int32,System.Int32[]) | [LibraryImportAttribute(...)] | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.SetParamInfo(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Int32,System.Reflection.ParameterAttributes,System.String) | [LibraryImportAttribute(...)] | -| System.Int32 System.Reflection.LoaderAllocatorScout.g____PInvoke\|1_0(System.IntPtr) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Reflection.Metadata.AssemblyExtensions.g____PInvoke\|0_0(System.Runtime.CompilerServices.QCallAssembly,System.Byte**,System.Int32*) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Reflection.Metadata.MetadataUpdater.g____PInvoke\|1_0() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Reflection.NullabilityInfoContext.g__CountNullabilityStates\|28_0(System.Type) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Reflection.RuntimeAssembly.g____PInvoke\|14_0(System.Runtime.CompilerServices.QCallAssembly,System.Runtime.CompilerServices.StringHandleOnStack) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Reflection.RuntimeAssembly.g____PInvoke\|60_0(System.Runtime.CompilerServices.QCallAssembly,System.UInt16*,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.CompilerServices.StringHandleOnStack) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Reflection.RuntimeAssembly.GetManifestResourceInfo(System.Runtime.CompilerServices.QCallAssembly,System.String,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | -| System.Int32 System.Reflection.RuntimeParameterInfo.g__GetConstructorArgument\|32_0(System.Collections.Generic.IList,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Resources.ResourceLocator.get_DataPosition() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.CompilerServices.CompilationRelaxationsAttribute.get_CompilationRelaxations() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.CompilerServices.FixedBufferAttribute.get_Length() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.CompilerServices.InlineArrayAttribute.get_Length() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.CompilerServices.RefSafetyRulesAttribute.get_Version() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.CompilerServices.RuntimeHelpers.g____PInvoke\|34_0(System.Runtime.CompilerServices.MethodTable*,System.Runtime.CompilerServices.MethodTable*) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.CompilerServices.RuntimeHelpers.EnumCompareTo`1(!0,!0) | [IntrinsicAttribute(...)] | -| System.Int32 System.Runtime.CompilerServices.RuntimeHelpers.get_OffsetToStringData() | [NonVersionableAttribute(...)] | -| System.Int32 System.Runtime.CompilerServices.Unsafe.SizeOf`1() | [IntrinsicAttribute(...)] | -| System.Int32 System.Runtime.CompilerServices.Unsafe.SizeOf`1() | [NonVersionableAttribute(...)] | -| System.Int32 System.Runtime.InteropServices.ComWrappers.g____PInvoke\|1_0(System.Runtime.CompilerServices.ObjectHandleOnStack,System.IntPtr*) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.InteropServices.ComWrappers.g____PInvoke\|3_0(System.IntPtr,System.Runtime.CompilerServices.ObjectHandleOnStack) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.InteropServices.ComWrappers.g____PInvoke\|11_0(System.Runtime.CompilerServices.ObjectHandleOnStack,System.Int64,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.InteropServices.CreateComInterfaceFlags,System.IntPtr*) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.InteropServices.ComWrappers.g____PInvoke\|18_0(System.Runtime.CompilerServices.ObjectHandleOnStack,System.Int64,System.IntPtr,System.IntPtr,System.Runtime.InteropServices.CreateObjectFlags,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.CompilerServices.ObjectHandleOnStack) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.InteropServices.DispIdAttribute.get_Value() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.InteropServices.ErrorWrapper.get_ErrorCode() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.InteropServices.FieldOffsetAttribute.get_Value() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.InteropServices.LCIDConversionAttribute.get_Value() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2.ManagedToUnmanagedIn.get_BufferSize() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.InteropServices.Marshalling.MarshalUsingAttribute.get_ConstantElementCount() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.InteropServices.Marshalling.MarshalUsingAttribute.get_ElementIndirectionDepth() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.InteropServices.Marshalling.ReadOnlySpanMarshaller`2.ManagedToUnmanagedIn.get_BufferSize() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.InteropServices.Marshalling.SpanMarshaller`2.ManagedToUnmanagedIn.get_BufferSize() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.InteropServices.NFloat.get_Size() | [NonVersionableAttribute(...)] | -| System.Int32 System.Runtime.InteropServices.NFloat.op_CheckedExplicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Int32 System.Runtime.InteropServices.NFloat.op_Explicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Int32 System.Runtime.InteropServices.PosixSignalRegistration.OnPosixSignal(System.Int32,System.Runtime.InteropServices.PosixSignal) | [UnmanagedCallersOnlyAttribute(...)] | -| System.Int32 System.Runtime.InteropServices.PosixSignalRegistration.Token.get_SigNo() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.Intrinsics.Vector64`1.get_Count() | [IntrinsicAttribute(...)] | -| System.Int32 System.Runtime.Intrinsics.Vector128`1.get_Count() | [IntrinsicAttribute(...)] | -| System.Int32 System.Runtime.Intrinsics.Vector256`1.get_Count() | [IntrinsicAttribute(...)] | -| System.Int32 System.Runtime.Intrinsics.Vector512`1.get_Count() | [IntrinsicAttribute(...)] | -| System.Int32 System.Runtime.Loader.AssemblyLoadContext.g____PInvoke\|10_0(System.UInt16*,System.Int32,System.UInt16*,System.UInt16*) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.Loader.AssemblyLoadContext.g____PInvoke\|9_0(System.UInt16*,System.UInt16*,System.UInt16*,System.UInt16*) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.Loader.AssemblyLoadContext.g____PInvoke\|8_0(System.UInt16*,System.UInt16*,System.UInt16*,System.UInt16*,System.UInt16*) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Runtime.Loader.AssemblyLoadContext.g____PInvoke\|11_0(System.UInt16*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.RuntimeTypeHandle.<_IsVisible>g____PInvoke\|66_0(System.Runtime.CompilerServices.QCallTypeHandle) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.SpanHelpers.BinarySearch`2(System.ReadOnlySpan,!1) | [ExtensionAttribute(...)] | -| System.Int32 System.Span`1.get_Length() | [IntrinsicAttribute(...)] | -| System.Int32 System.Span`1.get_Length() | [NonVersionableAttribute(...)] | -| System.Int32 System.String.g__GetNonRandomizedHashCodeOrdinalIgnoreCaseSlow\|47_0(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.String.get_Length() | [IntrinsicAttribute(...)] | -| System.Int32 System.Text.CodePageDataItem.get_UIFamilyCodePage() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Text.EncodingInfo.get_CodePage() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Text.UTF8Encoding.UTF8EncodingSealed.ReadUtf8(System.Char,System.Int32,System.Byte,System.Int32) | [IntrinsicAttribute(...)] | -| System.Int32 System.Text.Unicode.TextSegmentationUtility.Processor`1.get_CurrentCodeUnitOffset() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Text.Unicode.TextSegmentationUtility.Processor`1.get_CurrentCodeUnitOffset() | [IsReadOnlyAttribute(...)] | -| System.Int32 System.Threading.Interlocked.And(System.Int32,System.Int32) | [IntrinsicAttribute(...)] | -| System.Int32 System.Threading.Interlocked.CompareExchange(System.Int32,System.Int32,System.Int32) | [IntrinsicAttribute(...)] | -| System.Int32 System.Threading.Interlocked.Exchange(System.Int32,System.Int32) | [IntrinsicAttribute(...)] | -| System.Int32 System.Threading.Interlocked.ExchangeAdd(System.Int32,System.Int32) | [IntrinsicAttribute(...)] | -| System.Int32 System.Threading.Interlocked.Or(System.Int32,System.Int32) | [IntrinsicAttribute(...)] | -| System.Int32 System.Threading.LowLevelLifoSemaphore.g____PInvoke\|3_0(System.IntPtr,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Threading.RegisteredWaitHandle.get_TimeoutTimeMs() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Threading.Thread.get_ManagedThreadId() | [IntrinsicAttribute(...)] | -| System.Int32 System.Threading.Thread.get_OptimalMaxSpinWaitsPerSpinIteration() | [CompilerGeneratedAttribute(...)] | -| System.Int32 System.Threading.Volatile.Read(System.Int32) | [IntrinsicAttribute(...)] | -| System.Int32 System.Threading.Volatile.Read(System.Int32) | [NonVersionableAttribute(...)] | -| System.Int32 System.UIntPtr.get_Size() | [NonVersionableAttribute(...)] | -| System.Int64 System.BitConverter.DoubleToInt64Bits(System.Double) | [IntrinsicAttribute(...)] | -| System.Int64 System.Buffers.Binary.BinaryPrimitives.ReverseEndianness(System.Int64) | [IntrinsicAttribute(...)] | -| System.Int64 System.GCGenerationInfo.get_FragmentationAfterBytes() | [CompilerGeneratedAttribute(...)] | -| System.Int64 System.GCGenerationInfo.get_FragmentationBeforeBytes() | [CompilerGeneratedAttribute(...)] | -| System.Int64 System.GCGenerationInfo.get_SizeAfterBytes() | [CompilerGeneratedAttribute(...)] | -| System.Int64 System.GCGenerationInfo.get_SizeBeforeBytes() | [CompilerGeneratedAttribute(...)] | -| System.Int64 System.Int64.LeadingZeroCount(System.Int64) | [IntrinsicAttribute(...)] | -| System.Int64 System.Int64.Log2(System.Int64) | [IntrinsicAttribute(...)] | -| System.Int64 System.Int64.PopCount(System.Int64) | [IntrinsicAttribute(...)] | -| System.Int64 System.Int64.RotateLeft(System.Int64,System.Int32) | [IntrinsicAttribute(...)] | -| System.Int64 System.Int64.RotateRight(System.Int64,System.Int32) | [IntrinsicAttribute(...)] | -| System.Int64 System.Int64.TrailingZeroCount(System.Int64) | [IntrinsicAttribute(...)] | -| System.Int64 System.IntPtr.ToInt64() | [NonVersionableAttribute(...)] | -| System.Int64 System.IntPtr.op_Explicit(System.IntPtr) | [NonVersionableAttribute(...)] | -| System.Int64 System.Math.Max(System.Int64,System.Int64) | [NonVersionableAttribute(...)] | -| System.Int64 System.Math.Min(System.Int64,System.Int64) | [NonVersionableAttribute(...)] | -| System.Int64 System.Runtime.InteropServices.NFloat.op_CheckedExplicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Int64 System.Runtime.InteropServices.NFloat.op_Explicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Int64 System.Threading.Interlocked.And(System.Int64,System.Int64) | [IntrinsicAttribute(...)] | -| System.Int64 System.Threading.Interlocked.CompareExchange(System.Int64,System.Int64,System.Int64) | [IntrinsicAttribute(...)] | -| System.Int64 System.Threading.Interlocked.Exchange(System.Int64,System.Int64) | [IntrinsicAttribute(...)] | -| System.Int64 System.Threading.Interlocked.ExchangeAdd(System.Int64,System.Int64) | [IntrinsicAttribute(...)] | -| System.Int64 System.Threading.Interlocked.Or(System.Int64,System.Int64) | [IntrinsicAttribute(...)] | -| System.Int64 System.Threading.TimerQueue.get_ActiveCount() | [CompilerGeneratedAttribute(...)] | -| System.Int64 System.Threading.Volatile.Read(System.Int64) | [IntrinsicAttribute(...)] | -| System.Int64 System.Threading.Volatile.Read(System.Int64) | [NonVersionableAttribute(...)] | -| System.Int128 | [IntrinsicAttribute(...)] | -| System.Int128 | [IsReadOnlyAttribute(...)] | -| System.Int128 System.Runtime.InteropServices.NFloat.op_CheckedExplicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Int128 System.Runtime.InteropServices.NFloat.op_Explicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.IntPtr | [IsReadOnlyAttribute(...)] | -| System.IntPtr | [RequiresLocationAttribute(...)] | -| System.IntPtr Interop.Kernel32.g____PInvoke\|59_0(System.IntPtr,System.UInt16*,System.UInt32,System.UInt32) | [CompilerGeneratedAttribute(...)] | -| System.IntPtr Interop.Kernel32.g____PInvoke\|76_0(System.IntPtr,System.UInt16*,System.UInt32,System.UInt32) | [CompilerGeneratedAttribute(...)] | -| System.IntPtr Interop.Kernel32.g____PInvoke\|79_0(System.IntPtr,System.Int32,System.Int32,System.UInt16*,System.UInt32,System.UInt32) | [CompilerGeneratedAttribute(...)] | -| System.IntPtr Interop.Kernel32.g____PInvoke\|75_0(System.UInt32,System.Int32,System.UInt16*) | [CompilerGeneratedAttribute(...)] | -| System.IntPtr System.ComAwareWeakReference.g____PInvoke\|4_0(System.Runtime.CompilerServices.ObjectHandleOnStack,System.Int64*) | [CompilerGeneratedAttribute(...)] | -| System.IntPtr System.Diagnostics.StackFrameExtensions.GetNativeIP(System.Diagnostics.StackFrame) | [ExtensionAttribute(...)] | -| System.IntPtr System.Diagnostics.StackFrameExtensions.GetNativeImageBase(System.Diagnostics.StackFrame) | [ExtensionAttribute(...)] | -| System.IntPtr System.Diagnostics.Tracing.EventPipeInternal.g____PInvoke\|2_0(System.UInt16*,delegate* unmanaged,System.Void*) | [CompilerGeneratedAttribute(...)] | -| System.IntPtr System.Diagnostics.Tracing.EventPipeInternal.g____PInvoke\|4_0(System.UInt16*) | [CompilerGeneratedAttribute(...)] | -| System.IntPtr System.Diagnostics.Tracing.EventPipeInternal.CreateProvider(System.String,delegate* unmanaged,System.Void*) | [LibraryImportAttribute(...)] | -| System.IntPtr System.Diagnostics.Tracing.EventPipeInternal.GetProvider(System.String) | [LibraryImportAttribute(...)] | -| System.IntPtr System.IntPtr.Add(System.IntPtr,System.Int32) | [NonVersionableAttribute(...)] | -| System.IntPtr System.IntPtr.LeadingZeroCount(System.IntPtr) | [IntrinsicAttribute(...)] | -| System.IntPtr System.IntPtr.Log2(System.IntPtr) | [IntrinsicAttribute(...)] | -| System.IntPtr System.IntPtr.PopCount(System.IntPtr) | [IntrinsicAttribute(...)] | -| System.IntPtr System.IntPtr.RotateLeft(System.IntPtr,System.Int32) | [IntrinsicAttribute(...)] | -| System.IntPtr System.IntPtr.RotateRight(System.IntPtr,System.Int32) | [IntrinsicAttribute(...)] | -| System.IntPtr System.IntPtr.Subtract(System.IntPtr,System.Int32) | [NonVersionableAttribute(...)] | -| System.IntPtr System.IntPtr.TrailingZeroCount(System.IntPtr) | [IntrinsicAttribute(...)] | -| System.IntPtr System.IntPtr.get_MaxValue() | [NonVersionableAttribute(...)] | -| System.IntPtr System.IntPtr.get_MinValue() | [NonVersionableAttribute(...)] | -| System.IntPtr System.IntPtr.op_Addition(System.IntPtr,System.Int32) | [NonVersionableAttribute(...)] | -| System.IntPtr System.IntPtr.op_Explicit(System.Int32) | [NonVersionableAttribute(...)] | -| System.IntPtr System.IntPtr.op_Explicit(System.Int64) | [NonVersionableAttribute(...)] | -| System.IntPtr System.IntPtr.op_Explicit(System.Void*) | [NonVersionableAttribute(...)] | -| System.IntPtr System.IntPtr.op_Subtraction(System.IntPtr,System.Int32) | [NonVersionableAttribute(...)] | -| System.IntPtr System.Math.Max(System.IntPtr,System.IntPtr) | [NonVersionableAttribute(...)] | -| System.IntPtr System.Math.Min(System.IntPtr,System.IntPtr) | [NonVersionableAttribute(...)] | -| System.IntPtr System.Runtime.CompilerServices.Unsafe.ByteOffset`1(!0,!0) | [IntrinsicAttribute(...)] | -| System.IntPtr System.Runtime.CompilerServices.Unsafe.ByteOffset`1(!0,!0) | [NonVersionableAttribute(...)] | -| System.IntPtr System.Runtime.InteropServices.NFloat.op_CheckedExplicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.IntPtr System.Runtime.InteropServices.NFloat.op_Explicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.IntPtr System.Runtime.InteropServices.NativeLibrary.g____PInvoke\|4_0(System.IntPtr,System.UInt16*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.IntPtr System.Runtime.InteropServices.NativeLibrary.g____PInvoke\|2_0(System.UInt16*,System.Runtime.CompilerServices.QCallAssembly,System.Int32,System.UInt32,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.IntPtr System.Runtime.InteropServices.NativeLibrary.g____PInvoke\|1_0(System.UInt16*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.IntPtr System.Runtime.InteropServices.NativeLibrary.GetSymbol(System.IntPtr,System.String,System.Boolean) | [LibraryImportAttribute(...)] | -| System.IntPtr System.Runtime.InteropServices.NativeLibrary.LoadByName(System.String,System.Runtime.CompilerServices.QCallAssembly,System.Boolean,System.UInt32,System.Boolean) | [LibraryImportAttribute(...)] | -| System.IntPtr System.Runtime.InteropServices.NativeLibrary.LoadFromPath(System.String,System.Boolean) | [LibraryImportAttribute(...)] | -| System.IntPtr System.Runtime.Loader.AssemblyLoadContext.g____PInvoke\|0_0(System.IntPtr,System.Int32,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.IntPtr System.RuntimeTypeHandle.ToIntPtr(System.RuntimeTypeHandle) | [IntrinsicAttribute(...)] | -| System.IntPtr System.StubHelpers.StubHelpers.GetStubContext() | [IntrinsicAttribute(...)] | -| System.IntPtr System.StubHelpers.StubHelpers.NextCallReturnAddress() | [IntrinsicAttribute(...)] | -| System.IntPtr System.Threading.RegisteredWaitHandle.get_UserUnregisterWaitHandleValue() | [CompilerGeneratedAttribute(...)] | -| System.IntPtr System.Threading.Volatile.Read(System.IntPtr) | [IntrinsicAttribute(...)] | -| System.IntPtr System.Threading.Volatile.Read(System.IntPtr) | [NonVersionableAttribute(...)] | -| System.IntPtr.Zero | [IntrinsicAttribute(...)] | -| System.LazyHelper.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.LazyState System.LazyHelper.get_State() | [CompilerGeneratedAttribute(...)] | -| System.LocalDataStoreSlot.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Marvin.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.MdUtf8String | [IsReadOnlyAttribute(...)] | -| System.Memory System.MemoryExtensions.AsMemory`1(!0[]) | [ExtensionAttribute(...)] | -| System.Memory System.MemoryExtensions.AsMemory`1(!0[],System.Index) | [ExtensionAttribute(...)] | -| System.Memory System.MemoryExtensions.AsMemory`1(!0[],System.Int32) | [ExtensionAttribute(...)] | -| System.Memory System.MemoryExtensions.AsMemory`1(!0[],System.Int32,System.Int32) | [ExtensionAttribute(...)] | -| System.Memory System.MemoryExtensions.AsMemory`1(!0[],System.Range) | [ExtensionAttribute(...)] | -| System.Memory System.MemoryExtensions.AsMemory`1(System.ArraySegment) | [ExtensionAttribute(...)] | -| System.Memory System.MemoryExtensions.AsMemory`1(System.ArraySegment,System.Int32) | [ExtensionAttribute(...)] | -| System.Memory System.MemoryExtensions.AsMemory`1(System.ArraySegment,System.Int32,System.Int32) | [ExtensionAttribute(...)] | -| System.Memory System.MemoryExtensions.TrimEnd`1(System.Memory,!0) | [ExtensionAttribute(...)] | -| System.Memory System.MemoryExtensions.TrimEnd`1(System.Memory,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Memory System.MemoryExtensions.TrimStart`1(System.Memory,!0) | [ExtensionAttribute(...)] | -| System.Memory System.MemoryExtensions.TrimStart`1(System.Memory,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Memory System.MemoryExtensions.Trim`1(System.Memory,!0) | [ExtensionAttribute(...)] | -| System.Memory System.MemoryExtensions.Trim`1(System.Memory,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.Memory System.MemoryExtensions.Trim(System.Memory) | [ExtensionAttribute(...)] | -| System.Memory System.MemoryExtensions.TrimEnd(System.Memory) | [ExtensionAttribute(...)] | -| System.Memory System.MemoryExtensions.TrimStart(System.Memory) | [ExtensionAttribute(...)] | -| System.MemoryExtensions | [ExtensionAttribute(...)] | -| System.MemoryExtensions.TryWriteInterpolatedStringHandler | [InterpolatedStringHandlerAttribute(...)] | -| System.MemoryExtensions.TryWriteInterpolatedStringHandler | [IsByRefLikeAttribute(...)] | -| System.Memory`1 | [IsReadOnlyAttribute(...)] | -| System.Nullable | [RequiresLocationAttribute(...)] | -| System.Nullable System.Nullable`1.op_Implicit(!0) | [NonVersionableAttribute(...)] | -| System.Nullable`1 | [NonVersionableAttribute(...)] | -| System.Number.BigInteger | [IsByRefLikeAttribute(...)] | -| System.Number.BigInteger | [ScopedRefAttribute(...)] | -| System.Number.BigInteger.<_blocks>e__FixedBuffer | [CompilerGeneratedAttribute(...)] | -| System.Number.BigInteger.<_blocks>e__FixedBuffer | [UnsafeValueTypeAttribute(...)] | -| System.Number.BinaryParser`1 | [IsReadOnlyAttribute(...)] | -| System.Number.DiyFp | [IsByRefLikeAttribute(...)] | -| System.Number.DiyFp | [IsReadOnlyAttribute(...)] | -| System.Number.HexParser`1 | [IsReadOnlyAttribute(...)] | -| System.Number.NumberBuffer | [IsByRefLikeAttribute(...)] | -| System.Number.NumberBuffer | [ScopedRefAttribute(...)] | -| System.Numerics.Matrix3x2 | [IntrinsicAttribute(...)] | -| System.Numerics.Matrix3x2 System.Numerics.Matrix3x2.Impl.AsM3x2() | [UnscopedRefAttribute(...)] | -| System.Numerics.Matrix3x2.Impl | [IsReadOnlyAttribute(...)] | -| System.Numerics.Matrix3x2.Impl System.Numerics.Matrix3x2.AsImpl() | [UnscopedRefAttribute(...)] | -| System.Numerics.Matrix3x2.Impl System.Numerics.Matrix3x2.AsROImpl() | [IsReadOnlyAttribute(...)] | -| System.Numerics.Matrix3x2.Impl System.Numerics.Matrix3x2.AsROImpl() | [UnscopedRefAttribute(...)] | -| System.Numerics.Matrix4x4 | [IntrinsicAttribute(...)] | -| System.Numerics.Matrix4x4 System.Numerics.Matrix4x4.Impl.AsM4x4() | [UnscopedRefAttribute(...)] | -| System.Numerics.Matrix4x4.Impl | [IsReadOnlyAttribute(...)] | -| System.Numerics.Matrix4x4.Impl System.Numerics.Matrix4x4.AsImpl() | [UnscopedRefAttribute(...)] | -| System.Numerics.Matrix4x4.Impl System.Numerics.Matrix4x4.AsROImpl() | [IsReadOnlyAttribute(...)] | -| System.Numerics.Matrix4x4.Impl System.Numerics.Matrix4x4.AsROImpl() | [UnscopedRefAttribute(...)] | -| System.Numerics.Plane | [IntrinsicAttribute(...)] | -| System.Numerics.Plane | [IsReadOnlyAttribute(...)] | -| System.Numerics.Quaternion | [IntrinsicAttribute(...)] | -| System.Numerics.Quaternion | [IsReadOnlyAttribute(...)] | -| System.Numerics.Quaternion System.Numerics.Quaternion.Add(System.Numerics.Quaternion,System.Numerics.Quaternion) | [IntrinsicAttribute(...)] | -| System.Numerics.Quaternion System.Numerics.Quaternion.Conjugate(System.Numerics.Quaternion) | [IntrinsicAttribute(...)] | -| System.Numerics.Quaternion System.Numerics.Quaternion.Divide(System.Numerics.Quaternion,System.Single) | [IntrinsicAttribute(...)] | -| System.Numerics.Quaternion System.Numerics.Quaternion.Inverse(System.Numerics.Quaternion) | [IntrinsicAttribute(...)] | -| System.Numerics.Quaternion System.Numerics.Quaternion.Multiply(System.Numerics.Quaternion,System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Numerics.Quaternion System.Numerics.Quaternion.Multiply(System.Numerics.Quaternion,System.Single) | [IntrinsicAttribute(...)] | -| System.Numerics.Quaternion System.Numerics.Quaternion.Negate(System.Numerics.Quaternion) | [IntrinsicAttribute(...)] | -| System.Numerics.Quaternion System.Numerics.Quaternion.Normalize(System.Numerics.Quaternion) | [IntrinsicAttribute(...)] | -| System.Numerics.Quaternion System.Numerics.Quaternion.Subtract(System.Numerics.Quaternion,System.Numerics.Quaternion) | [IntrinsicAttribute(...)] | -| System.Numerics.Quaternion System.Numerics.Quaternion.get_Identity() | [IntrinsicAttribute(...)] | -| System.Numerics.Quaternion System.Numerics.Quaternion.get_Zero() | [IntrinsicAttribute(...)] | -| System.Numerics.Quaternion System.Numerics.Quaternion.op_Addition(System.Numerics.Quaternion,System.Numerics.Quaternion) | [IntrinsicAttribute(...)] | -| System.Numerics.Quaternion System.Numerics.Quaternion.op_Multiply(System.Numerics.Quaternion,System.Single) | [IntrinsicAttribute(...)] | -| System.Numerics.Quaternion System.Numerics.Quaternion.op_Subtraction(System.Numerics.Quaternion,System.Numerics.Quaternion) | [IntrinsicAttribute(...)] | -| System.Numerics.Quaternion System.Numerics.Quaternion.op_UnaryNegation(System.Numerics.Quaternion) | [IntrinsicAttribute(...)] | -| System.Numerics.Quaternion System.Numerics.Vector.WithElement(System.Numerics.Quaternion,System.Int32,System.Single) | [ExtensionAttribute(...)] | -| System.Numerics.Quaternion System.Numerics.Vector.WithElement(System.Numerics.Quaternion,System.Int32,System.Single) | [IntrinsicAttribute(...)] | -| System.Numerics.TotalOrderIeee754Comparer`1 | [IsReadOnlyAttribute(...)] | -| System.Numerics.Vector | [ExtensionAttribute(...)] | -| System.Numerics.Vector | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 | [IsReadOnlyAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Matrix3x2.Impl.get_Translation() | [IsReadOnlyAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Matrix3x2.get_Translation() | [IsReadOnlyAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.Abs(System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.Add(System.Numerics.Vector2,System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.Clamp(System.Numerics.Vector2,System.Numerics.Vector2,System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.Divide(System.Numerics.Vector2,System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.Divide(System.Numerics.Vector2,System.Single) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.Lerp(System.Numerics.Vector2,System.Numerics.Vector2,System.Single) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.Max(System.Numerics.Vector2,System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.Min(System.Numerics.Vector2,System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.Multiply(System.Numerics.Vector2,System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.Multiply(System.Numerics.Vector2,System.Single) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.Multiply(System.Single,System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.Negate(System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.Normalize(System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.SquareRoot(System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.Subtract(System.Numerics.Vector2,System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.get_One() | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.get_UnitX() | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.get_UnitY() | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.get_Zero() | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.op_Addition(System.Numerics.Vector2,System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.op_Division(System.Numerics.Vector2,System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.op_Division(System.Numerics.Vector2,System.Single) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.op_Multiply(System.Numerics.Vector2,System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.op_Multiply(System.Numerics.Vector2,System.Single) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.op_Multiply(System.Single,System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.op_Subtraction(System.Numerics.Vector2,System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector2.op_UnaryNegation(System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector.WithElement(System.Numerics.Vector2,System.Int32,System.Single) | [ExtensionAttribute(...)] | -| System.Numerics.Vector2 System.Numerics.Vector.WithElement(System.Numerics.Vector2,System.Int32,System.Single) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector2 System.Runtime.Intrinsics.Vector128.AsVector2(System.Runtime.Intrinsics.Vector128) | [ExtensionAttribute(...)] | -| System.Numerics.Vector2 System.Runtime.Intrinsics.Vector128.AsVector2(System.Runtime.Intrinsics.Vector128) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 | [IsReadOnlyAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Matrix4x4.Impl.get_Translation() | [IsReadOnlyAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Matrix4x4.get_Translation() | [IsReadOnlyAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.Abs(System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.Add(System.Numerics.Vector3,System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.Clamp(System.Numerics.Vector3,System.Numerics.Vector3,System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.Divide(System.Numerics.Vector3,System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.Divide(System.Numerics.Vector3,System.Single) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.Lerp(System.Numerics.Vector3,System.Numerics.Vector3,System.Single) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.Max(System.Numerics.Vector3,System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.Min(System.Numerics.Vector3,System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.Multiply(System.Numerics.Vector3,System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.Multiply(System.Numerics.Vector3,System.Single) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.Multiply(System.Single,System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.Negate(System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.Normalize(System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.SquareRoot(System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.Subtract(System.Numerics.Vector3,System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.get_One() | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.get_UnitX() | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.get_UnitY() | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.get_UnitZ() | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.get_Zero() | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.op_Addition(System.Numerics.Vector3,System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.op_Division(System.Numerics.Vector3,System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.op_Division(System.Numerics.Vector3,System.Single) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.op_Multiply(System.Numerics.Vector3,System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.op_Multiply(System.Numerics.Vector3,System.Single) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.op_Multiply(System.Single,System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.op_Subtraction(System.Numerics.Vector3,System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector3.op_UnaryNegation(System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector.WithElement(System.Numerics.Vector3,System.Int32,System.Single) | [ExtensionAttribute(...)] | -| System.Numerics.Vector3 System.Numerics.Vector.WithElement(System.Numerics.Vector3,System.Int32,System.Single) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector3 System.Runtime.Intrinsics.Vector128.AsVector3(System.Runtime.Intrinsics.Vector128) | [ExtensionAttribute(...)] | -| System.Numerics.Vector3 System.Runtime.Intrinsics.Vector128.AsVector3(System.Runtime.Intrinsics.Vector128) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 | [IsReadOnlyAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.Abs(System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.Add(System.Numerics.Vector4,System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.Clamp(System.Numerics.Vector4,System.Numerics.Vector4,System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.Divide(System.Numerics.Vector4,System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.Divide(System.Numerics.Vector4,System.Single) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.Lerp(System.Numerics.Vector4,System.Numerics.Vector4,System.Single) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.Max(System.Numerics.Vector4,System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.Min(System.Numerics.Vector4,System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.Multiply(System.Numerics.Vector4,System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.Multiply(System.Numerics.Vector4,System.Single) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.Multiply(System.Single,System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.Negate(System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.Normalize(System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.SquareRoot(System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.Subtract(System.Numerics.Vector4,System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.get_One() | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.get_UnitW() | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.get_UnitX() | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.get_UnitY() | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.get_UnitZ() | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.get_Zero() | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.op_Addition(System.Numerics.Vector4,System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.op_Division(System.Numerics.Vector4,System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.op_Division(System.Numerics.Vector4,System.Single) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.op_Multiply(System.Numerics.Vector4,System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.op_Multiply(System.Numerics.Vector4,System.Single) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.op_Multiply(System.Single,System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.op_Subtraction(System.Numerics.Vector4,System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector4.op_UnaryNegation(System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector.WithElement(System.Numerics.Vector4,System.Int32,System.Single) | [ExtensionAttribute(...)] | -| System.Numerics.Vector4 System.Numerics.Vector.WithElement(System.Numerics.Vector4,System.Int32,System.Single) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector4 System.Runtime.Intrinsics.Vector128.AsVector4(System.Runtime.Intrinsics.Vector128) | [ExtensionAttribute(...)] | -| System.Numerics.Vector4 System.Runtime.Intrinsics.Vector128.AsVector4(System.Runtime.Intrinsics.Vector128) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector | [IsReadOnlyAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Abs`1(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Add`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.AndNot`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.BitwiseAnd`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.BitwiseOr`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ConditionalSelect`1(System.Numerics.Vector,System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Divide`1(System.Numerics.Vector,!0) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Divide`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Equals`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.GreaterThanOrEqual`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.GreaterThan`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.LessThanOrEqual`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.LessThan`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.LoadAlignedNonTemporal`1(!0*) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.LoadAligned`1(!0*) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.LoadUnsafe`1(!0) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.LoadUnsafe`1(!0,System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Load`1(!0*) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Max`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Min`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Multiply`1(!0,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Multiply`1(System.Numerics.Vector,!0) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Multiply`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Negate`1(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.OnesComplement`1(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.SquareRoot`1(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Subtract`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.WithElement`1(System.Numerics.Vector,System.Int32,!0) | [ExtensionAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Xor`1(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.get_AllBitsSet() | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.get_One() | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.get_Zero() | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_Addition(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_BitwiseAnd(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_BitwiseOr(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_Division(System.Numerics.Vector,!0) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_Division(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_ExclusiveOr(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_LeftShift(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_Multiply(!0,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_Multiply(System.Numerics.Vector,!0) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_Multiply(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_OnesComplement(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_RightShift(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_Subtraction(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_UnaryNegation(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_UnaryPlus(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_UnsignedRightShift(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Runtime.Intrinsics.Vector128.AsVector`1(System.Runtime.Intrinsics.Vector128) | [ExtensionAttribute(...)] | -| System.Numerics.Vector System.Runtime.Intrinsics.Vector128.AsVector`1(System.Runtime.Intrinsics.Vector128) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Runtime.Intrinsics.Vector256.AsVector`1(System.Runtime.Intrinsics.Vector256) | [ExtensionAttribute(...)] | -| System.Numerics.Vector System.Runtime.Intrinsics.Vector256.AsVector`1(System.Runtime.Intrinsics.Vector256) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Runtime.Intrinsics.Vector512.AsVector`1(System.Runtime.Intrinsics.Vector512) | [ExtensionAttribute(...)] | -| System.Numerics.Vector System.Runtime.Intrinsics.Vector512.AsVector`1(System.Runtime.Intrinsics.Vector512) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.As`2(System.Numerics.Vector) | [ExtensionAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.As`2(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.AsVectorByte`1(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Narrow(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftLeft(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftRightLogical(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_Explicit(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.AsVectorDouble`1(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Ceiling(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ConditionalSelect(System.Numerics.Vector,System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ConvertToDouble(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ConvertToDouble(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Floor(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.WidenLower(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.WidenUpper(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_Explicit(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.AsVectorInt16`1(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Narrow(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftLeft(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftRightArithmetic(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftRightLogical(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.WidenLower(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.WidenUpper(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_Explicit(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.AsVectorInt32`1(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ConvertToInt32(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Equals(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Equals(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.GreaterThan(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.GreaterThan(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.GreaterThanOrEqual(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.GreaterThanOrEqual(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.LessThan(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.LessThan(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.LessThanOrEqual(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.LessThanOrEqual(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Narrow(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftLeft(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftRightArithmetic(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftRightLogical(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.WidenLower(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.WidenUpper(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_Explicit(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.AsVectorInt64`1(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ConvertToInt64(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Equals(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Equals(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.GreaterThan(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.GreaterThanOrEqual(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.GreaterThanOrEqual(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.LessThan(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.LessThan(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.LessThanOrEqual(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.LessThanOrEqual(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftLeft(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftRightArithmetic(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftRightLogical(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.WidenLower(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.WidenUpper(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_Explicit(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.AsVectorNInt`1(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftLeft(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftRightArithmetic(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftRightLogical(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_Explicit(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.AsVectorSByte`1(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Narrow(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftLeft(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftRightArithmetic(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftRightLogical(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_Explicit(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.AsVectorSingle`1(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Ceiling(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ConditionalSelect(System.Numerics.Vector,System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ConvertToSingle(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ConvertToSingle(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Floor(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Narrow(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_Explicit(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.AsVectorUInt16`1(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Narrow(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftLeft(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftRightLogical(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.WidenLower(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.WidenUpper(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_Explicit(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.AsVectorUInt32`1(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ConvertToUInt32(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.Narrow(System.Numerics.Vector,System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftLeft(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftRightLogical(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.WidenLower(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.WidenUpper(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_Explicit(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.AsVectorUInt64`1(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ConvertToUInt64(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftLeft(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftRightLogical(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.WidenLower(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.WidenUpper(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_Explicit(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.AsVectorNUInt`1(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftLeft(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector.ShiftRightLogical(System.Numerics.Vector,System.Int32) | [IntrinsicAttribute(...)] | -| System.Numerics.Vector System.Numerics.Vector`1.op_Explicit(System.Numerics.Vector) | [IntrinsicAttribute(...)] | -| System.Numerics.VectorDebugView`1 | [IsReadOnlyAttribute(...)] | -| System.Numerics.Vector`1 | [IntrinsicAttribute(...)] | -| System.Numerics.Vector`1 | [IsReadOnlyAttribute(...)] | -| System.Object System.Activator.CreateInstance(System.Type) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Activator.CreateInstance(System.Type) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Activator.CreateInstance(System.Type,System.Object[]) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Activator.CreateInstance(System.Type,System.Object[]) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Activator.CreateInstance(System.Type,System.Object[],System.Object[]) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Activator.CreateInstance(System.Type,System.Object[],System.Object[]) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Activator.CreateInstance(System.Type,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Activator.CreateInstance(System.Type,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Array.Clone() | [IntrinsicAttribute(...)] | -| System.Object System.Collections.Concurrent.ConcurrentQueue`1.d__26.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Object System.Collections.Concurrent.SingleProducerSingleConsumerQueue`1.d__15.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Object System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute.get_Max() | [CompilerGeneratedAttribute(...)] | -| System.Object System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute.get_Min() | [CompilerGeneratedAttribute(...)] | -| System.Object System.Diagnostics.Tracing.CounterPayload.d__51.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Object System.Diagnostics.Tracing.EventPayload.d__17.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Object System.Diagnostics.Tracing.IncrementingCounterPayload.d__39.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Object System.Object.MemberwiseClone() | [IntrinsicAttribute(...)] | -| System.Object System.Reflection.ConstructorInfo.Invoke(System.Object[]) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Reflection.ConstructorInfo.Invoke(System.Object[]) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Reflection.MdFieldInfo.GetValue(System.Object) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Reflection.MdFieldInfo.GetValue(System.Object) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Reflection.MdFieldInfo.GetValueDirect(System.TypedReference) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Reflection.MdFieldInfo.GetValueDirect(System.TypedReference) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Reflection.MethodBase.Invoke(System.Object,System.Object[]) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Reflection.MethodBase.Invoke(System.Object,System.Object[]) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Reflection.PropertyInfo.GetValue(System.Object) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Reflection.PropertyInfo.GetValue(System.Object) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Reflection.PropertyInfo.GetValue(System.Object,System.Object[]) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Reflection.PropertyInfo.GetValue(System.Object,System.Object[]) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Reflection.RtFieldInfo.GetValue(System.Object) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Reflection.RtFieldInfo.GetValue(System.Object) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Reflection.RtFieldInfo.GetValueDirect(System.TypedReference) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Reflection.RtFieldInfo.GetValueDirect(System.TypedReference) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Reflection.RuntimeConstructorInfo.Invoke(System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Reflection.RuntimeConstructorInfo.Invoke(System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Reflection.RuntimeConstructorInfo.Invoke(System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Reflection.RuntimeConstructorInfo.Invoke(System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Reflection.RuntimeMethodInfo.Invoke(System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Reflection.RuntimeMethodInfo.Invoke(System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Reflection.RuntimePropertyInfo.GetValue(System.Object,System.Object[]) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Reflection.RuntimePropertyInfo.GetValue(System.Object,System.Object[]) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Reflection.RuntimePropertyInfo.GetValue(System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Reflection.RuntimePropertyInfo.GetValue(System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Reflection.TypeInfo.d__10.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Object System.Reflection.TypeInfo.d__22.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Object System.Resources.ResourceFallbackManager.d__5.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Object System.Resources.ResourceLocator.get_Value() | [CompilerGeneratedAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.ChkCastAny(System.Void*,System.Object) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.ChkCastAny(System.Void*,System.Object) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.ChkCastAny(System.Void*,System.Object) | [StackTraceHiddenAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.ChkCastClass(System.Void*,System.Object) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.ChkCastClass(System.Void*,System.Object) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.ChkCastClass(System.Void*,System.Object) | [StackTraceHiddenAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.ChkCastClassSpecial(System.Void*,System.Object) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.ChkCastClassSpecial(System.Void*,System.Object) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.ChkCastClassSpecial(System.Void*,System.Object) | [StackTraceHiddenAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(System.Void*,System.Object) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(System.Void*,System.Object) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.ChkCastInterface(System.Void*,System.Object) | [StackTraceHiddenAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.ChkCast_Helper(System.Void*,System.Object) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.ChkCast_Helper(System.Void*,System.Object) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.ChkCast_Helper(System.Void*,System.Object) | [StackTraceHiddenAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(System.Void*,System.Object) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(System.Void*,System.Object) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.IsInstanceOfAny(System.Void*,System.Object) | [StackTraceHiddenAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(System.Void*,System.Object) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(System.Void*,System.Object) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(System.Void*,System.Object) | [StackTraceHiddenAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(System.Void*,System.Object) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(System.Void*,System.Object) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.IsInstanceOfInterface(System.Void*,System.Object) | [StackTraceHiddenAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.IsInstance_Helper(System.Void*,System.Object) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.IsInstance_Helper(System.Void*,System.Object) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.IsInstance_Helper(System.Void*,System.Object) | [StackTraceHiddenAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.LdelemaRef(System.Array,System.IntPtr,System.Void*) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.LdelemaRef(System.Array,System.IntPtr,System.Void*) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.LdelemaRef(System.Array,System.IntPtr,System.Void*) | [StackTraceHiddenAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.ThrowArrayMismatchException() | [DebuggerHiddenAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.ThrowArrayMismatchException() | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Runtime.CompilerServices.CastHelpers.ThrowArrayMismatchException() | [StackTraceHiddenAttribute(...)] | -| System.Object System.Runtime.CompilerServices.SwitchExpressionException.get_UnmatchedValue() | [CompilerGeneratedAttribute(...)] | -| System.Object System.Runtime.InteropServices.DefaultParameterValueAttribute.get_Value() | [CompilerGeneratedAttribute(...)] | -| System.Object System.Runtime.InteropServices.DispatchWrapper.get_WrappedObject() | [CompilerGeneratedAttribute(...)] | -| System.Object System.Runtime.InteropServices.MemoryMarshal.<g__FromArray\|18_2>d`1.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Object System.Runtime.InteropServices.MemoryMarshal.<g__FromMemoryManager\|18_1>d`1.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Object System.Runtime.InteropServices.MemoryMarshal.<g__FromString\|18_0>d`1.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Object System.Runtime.InteropServices.UnknownWrapper.get_WrappedObject() | [CompilerGeneratedAttribute(...)] | -| System.Object System.Runtime.InteropServices.VariantWrapper.get_WrappedObject() | [CompilerGeneratedAttribute(...)] | -| System.Object System.Runtime.Loader.AssemblyLoadContext.d__85.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Object System.Runtime.Loader.AssemblyLoadContext.d__55.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Object System.Runtime.Loader.LibraryNameVariation.d__5.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Object System.RuntimeMethodHandle.InvokeMethod(System.Object,System.Void**,System.Signature,System.Boolean) | [DebuggerHiddenAttribute(...)] | -| System.Object System.RuntimeMethodHandle.InvokeMethod(System.Object,System.Void**,System.Signature,System.Boolean) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.RuntimeType.g__CreateInstanceLocal\|145_0(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Object System.RuntimeType.ActivatorCache.ctor>g__ReturnNull\|4_0(System.Void*) | [CompilerGeneratedAttribute(...)] | -| System.Object System.RuntimeType.CreateInstanceDefaultCtor(System.Boolean,System.Boolean) | [DebuggerHiddenAttribute(...)] | -| System.Object System.RuntimeType.CreateInstanceDefaultCtor(System.Boolean,System.Boolean) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.RuntimeType.CreateInstanceOfT() | [DebuggerHiddenAttribute(...)] | -| System.Object System.RuntimeType.CreateInstanceOfT() | [DebuggerStepThroughAttribute(...)] | -| System.Object System.RuntimeType.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]) | [DebuggerHiddenAttribute(...)] | -| System.Object System.RuntimeType.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Security.SecurityException.get_Demanded() | [CompilerGeneratedAttribute(...)] | -| System.Object System.Security.SecurityException.get_DenySetInstance() | [CompilerGeneratedAttribute(...)] | -| System.Object System.Security.SecurityException.get_PermitOnlySetInstance() | [CompilerGeneratedAttribute(...)] | -| System.Object System.Threading.Interlocked.CompareExchange(System.Object,System.Object,System.Object) | [IntrinsicAttribute(...)] | -| System.Object System.Threading.Interlocked.Exchange(System.Object,System.Object) | [IntrinsicAttribute(...)] | -| System.Object System.Threading.Tasks.TaskAsyncEnumerableExtensions.d__3`1.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Object System.Threading.Tasks.TaskToAsyncResult.TaskAsyncResult.get_AsyncState() | [CompilerGeneratedAttribute(...)] | -| System.Object System.Threading.Tasks.ThreadPoolTaskScheduler.d__6.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Object System.Threading.ThreadPool.d__26.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Object System.Threading.TimerQueue.d__7.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Object System.Type.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[]) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Type.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[]) | [DebuggerStepThroughAttribute(...)] | -| System.Object System.Type.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Globalization.CultureInfo) | [DebuggerHiddenAttribute(...)] | -| System.Object System.Type.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Globalization.CultureInfo) | [DebuggerStepThroughAttribute(...)] | -| System.Object[] System.Diagnostics.CodeAnalysis.StringSyntaxAttribute.get_Arguments() | [CompilerGeneratedAttribute(...)] | -| System.ObsoleteAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.ObsoleteAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.ObsoleteAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.ObsoleteAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.ParseFlags | [FlagsAttribute(...)] | -| System.ParsingInfo | [ScopedRefAttribute(...)] | -| System.Progress`1.ProgressChanged | [CompilerGeneratedAttribute(...)] | -| System.Random System.Random.get_Shared() | [CompilerGeneratedAttribute(...)] | -| System.Random.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Random.ThreadSafeRandom.t_random | [ThreadStaticAttribute(...)] | -| System.Range | [IsReadOnlyAttribute(...)] | -| System.Range.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Range.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.ReadOnlyMemory System.MemoryExtensions.TrimEnd`1(System.ReadOnlyMemory,!0) | [ExtensionAttribute(...)] | -| System.ReadOnlyMemory System.MemoryExtensions.TrimEnd`1(System.ReadOnlyMemory,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.ReadOnlyMemory System.MemoryExtensions.TrimStart`1(System.ReadOnlyMemory,!0) | [ExtensionAttribute(...)] | -| System.ReadOnlyMemory System.MemoryExtensions.TrimStart`1(System.ReadOnlyMemory,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.ReadOnlyMemory System.MemoryExtensions.Trim`1(System.ReadOnlyMemory,!0) | [ExtensionAttribute(...)] | -| System.ReadOnlyMemory System.MemoryExtensions.Trim`1(System.ReadOnlyMemory,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.ReadOnlyMemory System.MemoryExtensions.AsMemory(System.String) | [ExtensionAttribute(...)] | -| System.ReadOnlyMemory System.MemoryExtensions.AsMemory(System.String,System.Index) | [ExtensionAttribute(...)] | -| System.ReadOnlyMemory System.MemoryExtensions.AsMemory(System.String,System.Int32) | [ExtensionAttribute(...)] | -| System.ReadOnlyMemory System.MemoryExtensions.AsMemory(System.String,System.Int32,System.Int32) | [ExtensionAttribute(...)] | -| System.ReadOnlyMemory System.MemoryExtensions.AsMemory(System.String,System.Range) | [ExtensionAttribute(...)] | -| System.ReadOnlyMemory System.MemoryExtensions.Trim(System.ReadOnlyMemory) | [ExtensionAttribute(...)] | -| System.ReadOnlyMemory System.MemoryExtensions.TrimEnd(System.ReadOnlyMemory) | [ExtensionAttribute(...)] | -| System.ReadOnlyMemory System.MemoryExtensions.TrimStart(System.ReadOnlyMemory) | [ExtensionAttribute(...)] | -| System.ReadOnlyMemory`1 | [IsReadOnlyAttribute(...)] | -| System.ReadOnlySpan | [ScopedRefAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.TrimEnd`1(System.ReadOnlySpan,!0) | [ExtensionAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.TrimEnd`1(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.TrimStart`1(System.ReadOnlySpan,!0) | [ExtensionAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.TrimStart`1(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.Trim`1(System.ReadOnlySpan,!0) | [ExtensionAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.Trim`1(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.ReadOnlySpan System.Runtime.CompilerServices.RuntimeHelpers.CreateSpan`1(System.RuntimeFieldHandle) | [IntrinsicAttribute(...)] | -| System.ReadOnlySpan | [ScopedRefAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.g__TrimFallback\|233_0(System.ReadOnlySpan) | [CompilerGeneratedAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.TrimUtf8(System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.ReadOnlySpan System.Runtime.Loader.AssemblyLoadContext.g__ReadAllBytes\|92_0(System.IO.Stream) | [CompilerGeneratedAttribute(...)] | -| System.ReadOnlySpan | [ScopedRefAttribute(...)] | -| System.ReadOnlySpan System.IO.Enumeration.FileSystemEntry.get_Directory() | [CompilerGeneratedAttribute(...)] | -| System.ReadOnlySpan System.IO.Enumeration.FileSystemEntry.get_Directory() | [IsReadOnlyAttribute(...)] | -| System.ReadOnlySpan System.IO.Enumeration.FileSystemEntry.get_OriginalRootDirectory() | [CompilerGeneratedAttribute(...)] | -| System.ReadOnlySpan System.IO.Enumeration.FileSystemEntry.get_OriginalRootDirectory() | [IsReadOnlyAttribute(...)] | -| System.ReadOnlySpan System.IO.Enumeration.FileSystemEntry.get_RootDirectory() | [CompilerGeneratedAttribute(...)] | -| System.ReadOnlySpan System.IO.Enumeration.FileSystemEntry.get_RootDirectory() | [IsReadOnlyAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.g__TrimFallback\|219_0(System.ReadOnlySpan) | [CompilerGeneratedAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.AsSpan(System.String) | [ExtensionAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.AsSpan(System.String) | [IntrinsicAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.AsSpan(System.String,System.Index) | [ExtensionAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.AsSpan(System.String,System.Int32) | [ExtensionAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.AsSpan(System.String,System.Int32,System.Int32) | [ExtensionAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.AsSpan(System.String,System.Range) | [ExtensionAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.Trim(System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.Trim(System.ReadOnlySpan,System.Char) | [ExtensionAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.Trim(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.TrimEnd(System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.TrimEnd(System.ReadOnlySpan,System.Char) | [ExtensionAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.TrimEnd(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.TrimStart(System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.TrimStart(System.ReadOnlySpan,System.Char) | [ExtensionAttribute(...)] | -| System.ReadOnlySpan System.MemoryExtensions.TrimStart(System.ReadOnlySpan,System.ReadOnlySpan) | [ExtensionAttribute(...)] | -| System.ReadOnlySpan System.String.op_Implicit(System.String) | [IntrinsicAttribute(...)] | -| System.ReadOnlySpan`1 | [IsByRefLikeAttribute(...)] | -| System.ReadOnlySpan`1 | [IsReadOnlyAttribute(...)] | -| System.ReadOnlySpan`1 | [NonVersionableAttribute(...)] | -| System.ReadOnlySpan`1.Enumerator | [IsByRefLikeAttribute(...)] | -| System.Reflection.Assembly System.AssemblyLoadEventArgs.get_LoadedAssembly() | [CompilerGeneratedAttribute(...)] | -| System.Reflection.Assembly System.Reflection.ManifestResourceInfo.get_ReferencedAssembly() | [CompilerGeneratedAttribute(...)] | -| System.Reflection.Assembly System.ResolveEventArgs.get_RequestingAssembly() | [CompilerGeneratedAttribute(...)] | -| System.Reflection.Assembly System.Runtime.Loader.AssemblyLoadContext.d__55.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Reflection.Assembly.<>O | [CompilerGeneratedAttribute(...)] | -| System.Reflection.AssemblyAlgorithmIdAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.AssemblyCompanyAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.AssemblyConfigurationAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.AssemblyCopyrightAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.AssemblyCultureAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.AssemblyDefaultAliasAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.AssemblyDelaySignAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.AssemblyDescriptionAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.AssemblyFileVersionAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.AssemblyInformationalVersionAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.AssemblyKeyFileAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.AssemblyKeyNameAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.AssemblyMetadataAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.AssemblyMetadataAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.AssemblyName System.Security.SecurityException.get_FailedAssemblyInfo() | [CompilerGeneratedAttribute(...)] | -| System.Reflection.AssemblyNameFlags | [FlagsAttribute(...)] | -| System.Reflection.AssemblyNameFormatter | [ExtensionAttribute(...)] | -| System.Reflection.AssemblyNameParser | [IsByRefLikeAttribute(...)] | -| System.Reflection.AssemblyNameParser.AssemblyNameParts | [IsReadOnlyAttribute(...)] | -| System.Reflection.AssemblyNameParser.AttributeKind | [ScopedRefAttribute(...)] | -| System.Reflection.AssemblyProductAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.AssemblySignatureKeyAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.AssemblySignatureKeyAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.AssemblyTitleAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.AssemblyTrademarkAttribute.<Trademark>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.AssemblyVersionAttribute.<Version>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.Associates.Attributes | [FlagsAttribute(...)] | -| System.Reflection.BindingFlags | [FlagsAttribute(...)] | -| System.Reflection.CallingConventions | [FlagsAttribute(...)] | -| System.Reflection.ConstArray | [IsReadOnlyAttribute(...)] | -| System.Reflection.CustomAttributeCtorParameter | [IsReadOnlyAttribute(...)] | -| System.Reflection.CustomAttributeEncodedArgument | [IsReadOnlyAttribute(...)] | -| System.Reflection.CustomAttributeExtensions | [ExtensionAttribute(...)] | -| System.Reflection.CustomAttributeNamedArgument | [IsReadOnlyAttribute(...)] | -| System.Reflection.CustomAttributeNamedParameter | [IsReadOnlyAttribute(...)] | -| System.Reflection.CustomAttributeType | [IsReadOnlyAttribute(...)] | -| System.Reflection.CustomAttributeTypedArgument | [IsReadOnlyAttribute(...)] | -| System.Reflection.DefaultMemberAttribute.<MemberName>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.Emit.AssemblyBuilder.t_allowDynamicCode | [ThreadStaticAttribute(...)] | -| System.Reflection.Emit.AssemblyBuilderAccess | [FlagsAttribute(...)] | -| System.Reflection.Emit.DynamicResolver.SecurityControlFlags | [FlagsAttribute(...)] | -| System.Reflection.Emit.ExceptionHandler | [IsReadOnlyAttribute(...)] | -| System.Reflection.Emit.Label | [IsReadOnlyAttribute(...)] | -| System.Reflection.Emit.OpCode | [IsReadOnlyAttribute(...)] | -| System.Reflection.EventAttributes | [FlagsAttribute(...)] | -| System.Reflection.EventInfo System.Reflection.RuntimeReflectionExtensions.GetRuntimeEvent(System.Type,System.String) | [ExtensionAttribute(...)] | -| System.Reflection.ExceptionHandlingClauseOptions | [FlagsAttribute(...)] | -| System.Reflection.FieldAttributes | [FlagsAttribute(...)] | -| System.Reflection.FieldInfo System.Reflection.RuntimeReflectionExtensions.GetRuntimeField(System.Type,System.String) | [ExtensionAttribute(...)] | -| System.Reflection.FieldInfo[] System.Diagnostics.Tracing.ManifestBuilder.<CreateManifestString>g__GetEnumFields\|19_0(System.Type) | [CompilerGeneratedAttribute(...)] | -| System.Reflection.GenericParameterAttributes | [FlagsAttribute(...)] | -| System.Reflection.InterfaceMapping System.Reflection.RuntimeReflectionExtensions.GetRuntimeInterfaceMap(System.Reflection.TypeInfo,System.Type) | [ExtensionAttribute(...)] | -| System.Reflection.IntrospectionExtensions | [ExtensionAttribute(...)] | -| System.Reflection.InvocationFlags | [FlagsAttribute(...)] | -| System.Reflection.ManifestResourceInfo.<FileName>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.ManifestResourceInfo.<ReferencedAssembly>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.ManifestResourceInfo.<ResourceLocation>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.MdSigCallingConvention | [FlagsAttribute(...)] | -| System.Reflection.MemberTypes | [FlagsAttribute(...)] | -| System.Reflection.Metadata.AssemblyExtensions | [ExtensionAttribute(...)] | -| System.Reflection.Metadata.MetadataUpdateHandlerAttribute.<HandlerType>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.Metadata.MetadataUpdater.<IsSupported>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.MetadataEnumResult.<smallResult>e__FixedBuffer | [CompilerGeneratedAttribute(...)] | -| System.Reflection.MetadataEnumResult.<smallResult>e__FixedBuffer | [UnsafeValueTypeAttribute(...)] | -| System.Reflection.MetadataImport | [IsReadOnlyAttribute(...)] | -| System.Reflection.MethodAttributes | [FlagsAttribute(...)] | -| System.Reflection.MethodBase.InvokerArgFlags | [FlagsAttribute(...)] | -| System.Reflection.MethodBase.InvokerStrategy | [FlagsAttribute(...)] | -| System.Reflection.MethodBase.StackAllocatedArguments | [IsByRefLikeAttribute(...)] | -| System.Reflection.MethodBase.StackAllocatedArgumentsWithCopyBack | [IsByRefLikeAttribute(...)] | -| System.Reflection.MethodBase.StackAllocatedByRefs | [IsByRefLikeAttribute(...)] | -| System.Reflection.MethodInfo System.Reflection.RuntimeReflectionExtensions.GetMethodInfo(System.Delegate) | [ExtensionAttribute(...)] | -| System.Reflection.MethodInfo System.Reflection.RuntimeReflectionExtensions.GetRuntimeBaseDefinition(System.Reflection.MethodInfo) | [ExtensionAttribute(...)] | -| System.Reflection.MethodInfo System.Reflection.RuntimeReflectionExtensions.GetRuntimeMethod(System.Type,System.String,System.Type[]) | [ExtensionAttribute(...)] | -| System.Reflection.MethodInfo System.Reflection.TypeInfo.<GetDeclaredMethods>d__10.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Reflection.MethodInfo System.Security.SecurityException.get_Method() | [CompilerGeneratedAttribute(...)] | -| System.Reflection.MethodInfo[] System.Diagnostics.StackTrace.<TryResolveStateMachineMethod>g__GetDeclaredMethods\|28_0(System.Type) | [CompilerGeneratedAttribute(...)] | -| System.Reflection.MethodInfo[] System.Reflection.TypeInfo.<GetDeclaredMethods>g__GetDeclaredOnlyMethods\|10_0(System.Type) | [CompilerGeneratedAttribute(...)] | -| System.Reflection.MethodSemanticsAttributes | [FlagsAttribute(...)] | -| System.Reflection.Module.<>c | [CompilerGeneratedAttribute(...)] | -| System.Reflection.NullabilityInfo System.Reflection.NullabilityInfo.get_ElementType() | [CompilerGeneratedAttribute(...)] | -| System.Reflection.NullabilityInfo.<ElementType>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.NullabilityInfo.<GenericTypeArguments>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.NullabilityInfo.<ReadState>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.NullabilityInfo.<Type>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.NullabilityInfo.<WriteState>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.NullabilityInfoContext.<IsSupported>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.NullabilityInfoContext.NotAnnotatedStatus | [FlagsAttribute(...)] | -| System.Reflection.NullabilityInfoContext.NullableAttributeStateParser | [IsReadOnlyAttribute(...)] | -| System.Reflection.NullabilityInfo[] System.Reflection.NullabilityInfo.get_GenericTypeArguments() | [CompilerGeneratedAttribute(...)] | -| System.Reflection.NullabilityState System.Reflection.NullabilityInfo.get_ReadState() | [CompilerGeneratedAttribute(...)] | -| System.Reflection.NullabilityState System.Reflection.NullabilityInfo.get_WriteState() | [CompilerGeneratedAttribute(...)] | -| System.Reflection.ObfuscateAssemblyAttribute.<AssemblyIsPrivate>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.ObfuscateAssemblyAttribute.<StripAfterObfuscation>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.ObfuscationAttribute.<ApplyToMembers>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.ObfuscationAttribute.<Exclude>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.ObfuscationAttribute.<Feature>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.ObfuscationAttribute.<StripAfterObfuscation>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.PInvokeAttributes | [FlagsAttribute(...)] | -| System.Reflection.ParameterAttributes | [FlagsAttribute(...)] | -| System.Reflection.ParameterModifier | [IsReadOnlyAttribute(...)] | -| System.Reflection.PortableExecutableKinds | [FlagsAttribute(...)] | -| System.Reflection.PropertyAttributes | [FlagsAttribute(...)] | -| System.Reflection.PropertyInfo System.Reflection.RuntimeReflectionExtensions.GetRuntimeProperty(System.Type,System.String) | [ExtensionAttribute(...)] | -| System.Reflection.ReflectionTypeLoadException.<LoaderExceptions>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.ReflectionTypeLoadException.<Types>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.ResourceAttributes | [FlagsAttribute(...)] | -| System.Reflection.ResourceLocation | [FlagsAttribute(...)] | -| System.Reflection.ResourceLocation System.Reflection.ManifestResourceInfo.get_ResourceLocation() | [CompilerGeneratedAttribute(...)] | -| System.Reflection.RuntimeAssembly._ModuleResolve | [CompilerGeneratedAttribute(...)] | -| System.Reflection.RuntimeMethodInfo System.Reflection.RuntimePropertyInfo.GetGetMethod(System.Boolean) | [PreserveBaseOverridesAttribute(...)] | -| System.Reflection.RuntimeMethodInfo System.Reflection.RuntimePropertyInfo.GetSetMethod(System.Boolean) | [PreserveBaseOverridesAttribute(...)] | -| System.Reflection.RuntimeReflectionExtensions | [ExtensionAttribute(...)] | -| System.Reflection.SignatureTypeExtensions | [ExtensionAttribute(...)] | -| System.Reflection.TypeAttributes | [FlagsAttribute(...)] | -| System.Reflection.TypeInfo System.Reflection.IntrospectionExtensions.GetTypeInfo(System.Type) | [ExtensionAttribute(...)] | -| System.Reflection.TypeInfo System.Reflection.TypeInfo.<get_DeclaredNestedTypes>d__22.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Reflection.TypeInfo.<GetDeclaredMethods>d__10 | [CompilerGeneratedAttribute(...)] | -| System.Reflection.TypeInfo.<get_DeclaredNestedTypes>d__22 | [CompilerGeneratedAttribute(...)] | -| System.Reflection.TypeNameParser | [IsByRefLikeAttribute(...)] | -| System.ResolveEventArgs.<Name>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.ResolveEventArgs.<RequestingAssembly>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Resources.NeutralResourcesLanguageAttribute.<CultureName>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Resources.NeutralResourcesLanguageAttribute.<Location>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Resources.ResourceFallbackManager.<GetEnumerator>d__5 | [CompilerGeneratedAttribute(...)] | -| System.Resources.ResourceLocator | [IsReadOnlyAttribute(...)] | -| System.Resources.ResourceLocator.<DataPosition>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Resources.ResourceLocator.<Value>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Resources.ResourceReader.<>c__DisplayClass7_0`1 | [CompilerGeneratedAttribute(...)] | -| System.Resources.ResourceReader.<AllowCustomResourceTypes>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Resources.SatelliteContractVersionAttribute.<Version>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Resources.UltimateResourceFallbackLocation System.Resources.NeutralResourcesLanguageAttribute.get_Location() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.AssemblyTargetedPatchBandAttribute.<TargetedPatchBand>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.AccessedThroughPropertyAttribute.<PropertyName>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.AsyncMethodBuilderAttribute.<BuilderType>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.CallerArgumentExpressionAttribute.<ParameterName>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.CollectionBuilderAttribute.<BuilderType>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.CollectionBuilderAttribute.<MethodName>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.CompExactlyDependsOnAttribute.<IntrinsicsTypeUsedInHelperFunction>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.CompilationRelaxations | [FlagsAttribute(...)] | -| System.Runtime.CompilerServices.CompilationRelaxationsAttribute.<CompilationRelaxations>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute.<FeatureName>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute.<IsOptional>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.ConditionalWeakTable`2.<>c | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.ConfiguredAsyncDisposable | [IsReadOnlyAttribute(...)] | -| System.Runtime.CompilerServices.ConfiguredAsyncDisposable System.Threading.Tasks.TaskAsyncEnumerableExtensions.ConfigureAwait(System.IAsyncDisposable,System.Boolean) | [ExtensionAttribute(...)] | -| System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable<!0> System.Threading.Tasks.TaskAsyncEnumerableExtensions.ConfigureAwait`1(System.Collections.Generic.IAsyncEnumerable<!0>,System.Boolean) | [ExtensionAttribute(...)] | -| System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable<!0> System.Threading.Tasks.TaskAsyncEnumerableExtensions.WithCancellation`1(System.Collections.Generic.IAsyncEnumerable<!0>,System.Threading.CancellationToken) | [ExtensionAttribute(...)] | -| System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable`1 | [IsReadOnlyAttribute(...)] | -| System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable`1.Enumerator | [IsReadOnlyAttribute(...)] | -| System.Runtime.CompilerServices.ConfiguredTaskAwaitable | [IsReadOnlyAttribute(...)] | -| System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter | [IsReadOnlyAttribute(...)] | -| System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1 | [IsReadOnlyAttribute(...)] | -| System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter | [IsReadOnlyAttribute(...)] | -| System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable | [IsReadOnlyAttribute(...)] | -| System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable.ConfiguredValueTaskAwaiter | [IsReadOnlyAttribute(...)] | -| System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1 | [IsReadOnlyAttribute(...)] | -| System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter | [IsReadOnlyAttribute(...)] | -| System.Runtime.CompilerServices.ContractHelper.InternalContractFailed | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.DefaultDependencyAttribute.<LoadHint>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.DefaultInterpolatedStringHandler | [InterpolatedStringHandlerAttribute(...)] | -| System.Runtime.CompilerServices.DefaultInterpolatedStringHandler | [IsByRefLikeAttribute(...)] | -| System.Runtime.CompilerServices.DependencyAttribute.<DependentAssembly>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.DependencyAttribute.<LoadHint>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.FixedBufferAttribute.<ElementType>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.FixedBufferAttribute.<Length>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.InlineArrayAttribute.<Length>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.InternalsVisibleToAttribute.<AllInternalsVisible>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.InternalsVisibleToAttribute.<AssemblyName>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.InterpolatedStringHandlerArgumentAttribute.<Arguments>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.LoadHint System.Runtime.CompilerServices.DefaultDependencyAttribute.get_LoadHint() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.LoadHint System.Runtime.CompilerServices.DependencyAttribute.get_LoadHint() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.MetadataUpdateOriginalTypeAttribute.<OriginalType>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.MethodImplAttribute.<Value>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.MethodImplOptions | [FlagsAttribute(...)] | -| System.Runtime.CompilerServices.MethodImplOptions System.Runtime.CompilerServices.MethodImplAttribute.get_Value() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.MethodTable* System.Runtime.CompilerServices.RuntimeHelpers.GetMethodTable(System.Object) | [IntrinsicAttribute(...)] | -| System.Runtime.CompilerServices.ObjectHandleOnStack | [IsByRefLikeAttribute(...)] | -| System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder<!0>.StateMachineBox | [NotNullAttribute(...)] | -| System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1.t_tlsCache | [ThreadStaticAttribute(...)] | -| System.Runtime.CompilerServices.QCallAssembly | [IsByRefLikeAttribute(...)] | -| System.Runtime.CompilerServices.QCallModule | [IsByRefLikeAttribute(...)] | -| System.Runtime.CompilerServices.QCallTypeHandle | [IsByRefLikeAttribute(...)] | -| System.Runtime.CompilerServices.RawArrayData | [NonVersionableAttribute(...)] | -| System.Runtime.CompilerServices.RawData | [NonVersionableAttribute(...)] | -| System.Runtime.CompilerServices.RefSafetyRulesAttribute.<Version>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.ReferenceAssemblyAttribute.<Description>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.RuntimeCompatibilityAttribute.<WrapNonExceptionThrows>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.RuntimeFeature.<IsDynamicCodeSupported>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.RuntimeHelpers | [ExtensionAttribute(...)] | -| System.Runtime.CompilerServices.StackCrawlMarkHandle | [IsByRefLikeAttribute(...)] | -| System.Runtime.CompilerServices.StateMachineAttribute.<StateMachineType>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.StringHandleOnStack | [IsByRefLikeAttribute(...)] | -| System.Runtime.CompilerServices.StrongBox<System.Boolean> System.Console.<get_IsErrorRedirected>g__EnsureInitialized\|38_0() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.StrongBox<System.Boolean> System.Console.<get_IsInputRedirected>g__EnsureInitialized\|34_0() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.StrongBox<System.Boolean> System.Console.<get_IsOutputRedirected>g__EnsureInitialized\|36_0() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.StrongBox`1.Value | [MaybeNullAttribute(...)] | -| System.Runtime.CompilerServices.SwitchExpressionException.<UnmatchedValue>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.TaskAwaiter | [IsReadOnlyAttribute(...)] | -| System.Runtime.CompilerServices.TaskAwaiter.<>c | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.TaskAwaiter`1 | [IsReadOnlyAttribute(...)] | -| System.Runtime.CompilerServices.TypeForwardedFromAttribute.<AssemblyFullName>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.TypeForwardedToAttribute.<Destination>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.UnsafeAccessorAttribute.<Kind>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.UnsafeAccessorAttribute.<Name>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.UnsafeAccessorKind System.Runtime.CompilerServices.UnsafeAccessorAttribute.get_Kind() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.ValueTaskAwaiter | [IsReadOnlyAttribute(...)] | -| System.Runtime.CompilerServices.ValueTaskAwaiter.<>c | [CompilerGeneratedAttribute(...)] | -| System.Runtime.CompilerServices.ValueTaskAwaiter`1 | [IsReadOnlyAttribute(...)] | -| System.Runtime.CompilerServices.YieldAwaitable | [IsReadOnlyAttribute(...)] | -| System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter | [IsReadOnlyAttribute(...)] | -| System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter.<>c | [CompilerGeneratedAttribute(...)] | -| System.Runtime.ConstrainedExecution.Cer System.Runtime.ConstrainedExecution.ReliabilityContractAttribute.get_Cer() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.ConstrainedExecution.Consistency System.Runtime.ConstrainedExecution.ReliabilityContractAttribute.get_ConsistencyGuarantee() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.ConstrainedExecution.ReliabilityContractAttribute.<Cer>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.ConstrainedExecution.ReliabilityContractAttribute.<ConsistencyGuarantee>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.ControlledExecution.<>c | [CompilerGeneratedAttribute(...)] | -| System.Runtime.ControlledExecution.t_executing | [ThreadStaticAttribute(...)] | -| System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs.<Exception>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.ArrayWithOffset | [IsReadOnlyAttribute(...)] | -| System.Runtime.InteropServices.BStrWrapper.<WrappedObject>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.BestFitMappingAttribute.<BestFitMapping>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.CLong | [IntrinsicAttribute(...)] | -| System.Runtime.InteropServices.CLong | [IsReadOnlyAttribute(...)] | -| System.Runtime.InteropServices.CULong | [IntrinsicAttribute(...)] | -| System.Runtime.InteropServices.CULong | [IsReadOnlyAttribute(...)] | -| System.Runtime.InteropServices.CallingConvention System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute.get_CallingConvention() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.CharSet System.Runtime.InteropServices.DefaultCharSetAttribute.get_CharSet() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.ClassInterfaceAttribute.<Value>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.ClassInterfaceType System.Runtime.InteropServices.ClassInterfaceAttribute.get_Value() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.CoClassAttribute.<CoClass>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.ComDefaultInterfaceAttribute.<Value>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.ComEventInterfaceAttribute.<EventProvider>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.ComEventInterfaceAttribute.<SourceInterface>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.ComInterfaceType System.Runtime.InteropServices.InterfaceTypeAttribute.get_Value() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.ComSourceInterfacesAttribute.<Value>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.ComTypes.FUNCFLAGS | [FlagsAttribute(...)] | -| System.Runtime.InteropServices.ComTypes.IDLFLAG | [FlagsAttribute(...)] | -| System.Runtime.InteropServices.ComTypes.IMPLTYPEFLAGS | [FlagsAttribute(...)] | -| System.Runtime.InteropServices.ComTypes.INVOKEKIND | [FlagsAttribute(...)] | -| System.Runtime.InteropServices.ComTypes.LIBFLAGS | [FlagsAttribute(...)] | -| System.Runtime.InteropServices.ComTypes.PARAMFLAG | [FlagsAttribute(...)] | -| System.Runtime.InteropServices.ComTypes.TYPEFLAGS | [FlagsAttribute(...)] | -| System.Runtime.InteropServices.ComTypes.VARFLAGS | [FlagsAttribute(...)] | -| System.Runtime.InteropServices.ComVisibleAttribute.<Value>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.CreateComInterfaceFlags | [FlagsAttribute(...)] | -| System.Runtime.InteropServices.CreateObjectFlags | [FlagsAttribute(...)] | -| System.Runtime.InteropServices.CurrencyWrapper.<WrappedObject>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.DefaultCharSetAttribute.<CharSet>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.DefaultDllImportSearchPathsAttribute.<Paths>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.DefaultParameterValueAttribute.<Value>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.DispIdAttribute.<Value>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.DispatchWrapper.<WrappedObject>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.DllImportAttribute.<Value>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.DllImportSearchPath | [FlagsAttribute(...)] | -| System.Runtime.InteropServices.DllImportSearchPath System.Runtime.InteropServices.DefaultDllImportSearchPathsAttribute.get_Paths() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.ErrorWrapper.<ErrorCode>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.FieldOffsetAttribute.<Value>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.GuidAttribute.<Value>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.HandleRef | [IsReadOnlyAttribute(...)] | -| System.Runtime.InteropServices.InterfaceTypeAttribute.<Value>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.LCIDConversionAttribute.<Value>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.LayoutKind System.Runtime.InteropServices.StructLayoutAttribute.get_Value() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.LibraryImportAttribute.<EntryPoint>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.LibraryImportAttribute.<LibraryName>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.LibraryImportAttribute.<SetLastError>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.LibraryImportAttribute.<StringMarshalling>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.LibraryImportAttribute.<StringMarshallingCustomType>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.Marshal.<>O | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.MarshalAsAttribute.<Value>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.AnsiStringMarshaller.ManagedToUnmanagedIn | [IsByRefLikeAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2 | [ContiguousCollectionMarshallerAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2.ManagedToUnmanagedIn | [IsByRefLikeAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2.ManagedToUnmanagedIn.<BufferSize>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.BStrStringMarshaller.ManagedToUnmanagedIn | [IsByRefLikeAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.CustomMarshallerAttribute.<ManagedType>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.CustomMarshallerAttribute.<MarshalMode>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.CustomMarshallerAttribute.<MarshallerType>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.MarshalMode System.Runtime.InteropServices.Marshalling.CustomMarshallerAttribute.get_MarshalMode() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.MarshalUsingAttribute.<ConstantElementCount>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.MarshalUsingAttribute.<CountElementName>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.MarshalUsingAttribute.<ElementIndirectionDepth>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.MarshalUsingAttribute.<NativeType>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.NativeMarshallingAttribute.<NativeType>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2 | [ContiguousCollectionMarshallerAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2.ManagedToUnmanagedIn | [IsByRefLikeAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.ReadOnlySpanMarshaller`2 | [ContiguousCollectionMarshallerAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.ReadOnlySpanMarshaller`2.ManagedToUnmanagedIn | [IsByRefLikeAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.ReadOnlySpanMarshaller`2.ManagedToUnmanagedIn.<BufferSize>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.SpanMarshaller`2 | [ContiguousCollectionMarshallerAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.SpanMarshaller`2.ManagedToUnmanagedIn | [IsByRefLikeAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.SpanMarshaller`2.ManagedToUnmanagedIn.<BufferSize>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.Marshalling.Utf8StringMarshaller.ManagedToUnmanagedIn | [IsByRefLikeAttribute(...)] | -| System.Runtime.InteropServices.MemoryMarshal.<<ToEnumerable>g__FromArray\|18_2>d`1 | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.MemoryMarshal.<<ToEnumerable>g__FromMemoryManager\|18_1>d`1 | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.MemoryMarshal.<<ToEnumerable>g__FromString\|18_0>d`1 | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.NFloat | [IntrinsicAttribute(...)] | -| System.Runtime.InteropServices.NFloat | [IsReadOnlyAttribute(...)] | -| System.Runtime.InteropServices.NFloat | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.get_AllBitsSet() | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.get_Epsilon() | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.get_MaxValue() | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.get_MinValue() | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.get_NaN() | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.get_NegativeInfinity() | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.get_PositiveInfinity() | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Addition(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Decrement(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Division(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Explicit(System.Decimal) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Explicit(System.Double) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Explicit(System.Int128) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Explicit(System.UInt128) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Implicit(System.Byte) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Implicit(System.Char) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Implicit(System.Half) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Implicit(System.Int16) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Implicit(System.Int32) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Implicit(System.Int64) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Implicit(System.IntPtr) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Implicit(System.SByte) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Implicit(System.Single) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Implicit(System.UInt16) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Implicit(System.UInt32) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Implicit(System.UInt64) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Implicit(System.UIntPtr) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Increment(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Modulus(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Multiply(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Subtraction(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_UnaryNegation(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_UnaryPlus(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Runtime.InteropServices.OSPlatform | [IsReadOnlyAttribute(...)] | -| System.Runtime.InteropServices.OSPlatform System.Runtime.InteropServices.OSPlatform.get_FreeBSD() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.OSPlatform System.Runtime.InteropServices.OSPlatform.get_Linux() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.OSPlatform System.Runtime.InteropServices.OSPlatform.get_OSX() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.OSPlatform System.Runtime.InteropServices.OSPlatform.get_Windows() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.OSPlatform.<FreeBSD>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.OSPlatform.<Linux>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.OSPlatform.<Name>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.OSPlatform.<OSX>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.OSPlatform.<Windows>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.PosixSignal System.Runtime.InteropServices.PosixSignalContext.get_Signal() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.PosixSignal System.Runtime.InteropServices.PosixSignalRegistration.Token.get_Signal() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.PosixSignalContext.<Cancel>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.PosixSignalContext.<Signal>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.PosixSignalRegistration.<>O | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.PosixSignalRegistration.Token.<Handler>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.PosixSignalRegistration.Token.<SigNo>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.PosixSignalRegistration.Token.<Signal>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.ProgIdAttribute.<Value>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.StringMarshalling System.Runtime.InteropServices.LibraryImportAttribute.get_StringMarshalling() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.StructLayoutAttribute.<Value>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.TypeIdentifierAttribute.<Identifier>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.TypeIdentifierAttribute.<Scope>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.UnknownWrapper.<WrappedObject>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute.<CallingConvention>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.UnmanagedType System.Runtime.InteropServices.MarshalAsAttribute.get_Value() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.VariantWrapper.<WrappedObject>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Intrinsics.Vector64 | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> | [IsReadOnlyAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Abs`1(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Add`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.AndNot`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.BitwiseAnd`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.BitwiseOr`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.ConditionalSelect`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.CreateScalarUnsafe`1(!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.CreateScalar`1(!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Create`1(!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Divide`1(System.Runtime.Intrinsics.Vector64<!0>,!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Divide`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Equals`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.GreaterThanOrEqual`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.GreaterThan`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.LessThanOrEqual`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.LessThan`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.LoadAlignedNonTemporal`1(!0*) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.LoadAligned`1(!0*) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.LoadUnsafe`1(!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.LoadUnsafe`1(!0,System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Load`1(!0*) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Max`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Min`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Multiply`1(!0,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Multiply`1(System.Runtime.Intrinsics.Vector64<!0>,!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Multiply`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Negate`1(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.OnesComplement`1(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Sqrt`1(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Subtract`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.WithElement`1(System.Runtime.Intrinsics.Vector64<!0>,System.Int32,!0) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.WithElement`1(System.Runtime.Intrinsics.Vector64<!0>,System.Int32,!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Xor`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64`1.get_AllBitsSet() | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64`1.get_One() | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64`1.get_Zero() | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64`1.op_Addition(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64`1.op_BitwiseAnd(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64`1.op_BitwiseOr(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64`1.op_Division(System.Runtime.Intrinsics.Vector64<!0>,!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64`1.op_Division(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64`1.op_ExclusiveOr(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64`1.op_LeftShift(System.Runtime.Intrinsics.Vector64<!0>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64`1.op_Multiply(!0,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64`1.op_Multiply(System.Runtime.Intrinsics.Vector64<!0>,!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64`1.op_Multiply(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64`1.op_OnesComplement(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64`1.op_RightShift(System.Runtime.Intrinsics.Vector64<!0>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64`1.op_Subtraction(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64`1.op_UnaryNegation(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64`1.op_UnaryPlus(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64`1.op_UnsignedRightShift(System.Runtime.Intrinsics.Vector64<!0>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector128.GetLower`1(System.Runtime.Intrinsics.Vector128<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector128.GetLower`1(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector128.GetUpper`1(System.Runtime.Intrinsics.Vector128<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector128.GetUpper`1(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!1> System.Runtime.Intrinsics.Vector64.As`2(System.Runtime.Intrinsics.Vector64<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<!1> System.Runtime.Intrinsics.Vector64.As`2(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Byte> System.Runtime.Intrinsics.Vector64.AsByte`1(System.Runtime.Intrinsics.Vector64<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Byte> System.Runtime.Intrinsics.Vector64.AsByte`1(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Byte> System.Runtime.Intrinsics.Vector64.Create(System.Byte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Byte> System.Runtime.Intrinsics.Vector64.Create(System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Byte> System.Runtime.Intrinsics.Vector64.CreateScalar(System.Byte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Byte> System.Runtime.Intrinsics.Vector64.CreateScalarUnsafe(System.Byte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Byte> System.Runtime.Intrinsics.Vector64.Narrow(System.Runtime.Intrinsics.Vector64<System.UInt16>,System.Runtime.Intrinsics.Vector64<System.UInt16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Byte> System.Runtime.Intrinsics.Vector64.ShiftLeft(System.Runtime.Intrinsics.Vector64<System.Byte>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Byte> System.Runtime.Intrinsics.Vector64.ShiftRightLogical(System.Runtime.Intrinsics.Vector64<System.Byte>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Byte> System.Runtime.Intrinsics.Vector64.Shuffle(System.Runtime.Intrinsics.Vector64<System.Byte>,System.Runtime.Intrinsics.Vector64<System.Byte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Double> System.Runtime.Intrinsics.Vector64.AsDouble`1(System.Runtime.Intrinsics.Vector64<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Double> System.Runtime.Intrinsics.Vector64.AsDouble`1(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Double> System.Runtime.Intrinsics.Vector64.Ceiling(System.Runtime.Intrinsics.Vector64<System.Double>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Double> System.Runtime.Intrinsics.Vector64.ConvertToDouble(System.Runtime.Intrinsics.Vector64<System.Int64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Double> System.Runtime.Intrinsics.Vector64.ConvertToDouble(System.Runtime.Intrinsics.Vector64<System.UInt64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Double> System.Runtime.Intrinsics.Vector64.Create(System.Double) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Double> System.Runtime.Intrinsics.Vector64.CreateScalar(System.Double) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Double> System.Runtime.Intrinsics.Vector64.CreateScalarUnsafe(System.Double) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Double> System.Runtime.Intrinsics.Vector64.Floor(System.Runtime.Intrinsics.Vector64<System.Double>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Double> System.Runtime.Intrinsics.Vector64.WidenLower(System.Runtime.Intrinsics.Vector64<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Double> System.Runtime.Intrinsics.Vector64.WidenUpper(System.Runtime.Intrinsics.Vector64<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int16> System.Runtime.Intrinsics.Vector64.AsInt16`1(System.Runtime.Intrinsics.Vector64<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int16> System.Runtime.Intrinsics.Vector64.AsInt16`1(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int16> System.Runtime.Intrinsics.Vector64.Create(System.Int16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int16> System.Runtime.Intrinsics.Vector64.Create(System.Int16,System.Int16,System.Int16,System.Int16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int16> System.Runtime.Intrinsics.Vector64.CreateScalar(System.Int16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int16> System.Runtime.Intrinsics.Vector64.CreateScalarUnsafe(System.Int16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int16> System.Runtime.Intrinsics.Vector64.Narrow(System.Runtime.Intrinsics.Vector64<System.Int32>,System.Runtime.Intrinsics.Vector64<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int16> System.Runtime.Intrinsics.Vector64.ShiftLeft(System.Runtime.Intrinsics.Vector64<System.Int16>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int16> System.Runtime.Intrinsics.Vector64.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector64<System.Int16>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int16> System.Runtime.Intrinsics.Vector64.ShiftRightLogical(System.Runtime.Intrinsics.Vector64<System.Int16>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int16> System.Runtime.Intrinsics.Vector64.Shuffle(System.Runtime.Intrinsics.Vector64<System.Int16>,System.Runtime.Intrinsics.Vector64<System.Int16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int16> System.Runtime.Intrinsics.Vector64.WidenLower(System.Runtime.Intrinsics.Vector64<System.SByte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int16> System.Runtime.Intrinsics.Vector64.WidenUpper(System.Runtime.Intrinsics.Vector64<System.SByte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int32> System.Runtime.Intrinsics.Vector64.AsInt32`1(System.Runtime.Intrinsics.Vector64<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int32> System.Runtime.Intrinsics.Vector64.AsInt32`1(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int32> System.Runtime.Intrinsics.Vector64.ConvertToInt32(System.Runtime.Intrinsics.Vector64<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int32> System.Runtime.Intrinsics.Vector64.Create(System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int32> System.Runtime.Intrinsics.Vector64.Create(System.Int32,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int32> System.Runtime.Intrinsics.Vector64.CreateScalar(System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int32> System.Runtime.Intrinsics.Vector64.CreateScalarUnsafe(System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int32> System.Runtime.Intrinsics.Vector64.Narrow(System.Runtime.Intrinsics.Vector64<System.Int64>,System.Runtime.Intrinsics.Vector64<System.Int64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int32> System.Runtime.Intrinsics.Vector64.ShiftLeft(System.Runtime.Intrinsics.Vector64<System.Int32>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int32> System.Runtime.Intrinsics.Vector64.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector64<System.Int32>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int32> System.Runtime.Intrinsics.Vector64.ShiftRightLogical(System.Runtime.Intrinsics.Vector64<System.Int32>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int32> System.Runtime.Intrinsics.Vector64.Shuffle(System.Runtime.Intrinsics.Vector64<System.Int32>,System.Runtime.Intrinsics.Vector64<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int32> System.Runtime.Intrinsics.Vector64.WidenLower(System.Runtime.Intrinsics.Vector64<System.Int16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int32> System.Runtime.Intrinsics.Vector64.WidenUpper(System.Runtime.Intrinsics.Vector64<System.Int16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int64> System.Runtime.Intrinsics.Vector64.AsInt64`1(System.Runtime.Intrinsics.Vector64<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int64> System.Runtime.Intrinsics.Vector64.AsInt64`1(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int64> System.Runtime.Intrinsics.Vector64.ConvertToInt64(System.Runtime.Intrinsics.Vector64<System.Double>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int64> System.Runtime.Intrinsics.Vector64.Create(System.Int64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int64> System.Runtime.Intrinsics.Vector64.CreateScalar(System.Int64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int64> System.Runtime.Intrinsics.Vector64.CreateScalarUnsafe(System.Int64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int64> System.Runtime.Intrinsics.Vector64.ShiftLeft(System.Runtime.Intrinsics.Vector64<System.Int64>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int64> System.Runtime.Intrinsics.Vector64.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector64<System.Int64>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int64> System.Runtime.Intrinsics.Vector64.ShiftRightLogical(System.Runtime.Intrinsics.Vector64<System.Int64>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int64> System.Runtime.Intrinsics.Vector64.WidenLower(System.Runtime.Intrinsics.Vector64<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Int64> System.Runtime.Intrinsics.Vector64.WidenUpper(System.Runtime.Intrinsics.Vector64<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.IntPtr> System.Runtime.Intrinsics.Vector64.AsNInt`1(System.Runtime.Intrinsics.Vector64<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.IntPtr> System.Runtime.Intrinsics.Vector64.AsNInt`1(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.IntPtr> System.Runtime.Intrinsics.Vector64.Create(System.IntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.IntPtr> System.Runtime.Intrinsics.Vector64.CreateScalar(System.IntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.IntPtr> System.Runtime.Intrinsics.Vector64.CreateScalarUnsafe(System.IntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.IntPtr> System.Runtime.Intrinsics.Vector64.ShiftLeft(System.Runtime.Intrinsics.Vector64<System.IntPtr>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.IntPtr> System.Runtime.Intrinsics.Vector64.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector64<System.IntPtr>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.IntPtr> System.Runtime.Intrinsics.Vector64.ShiftRightLogical(System.Runtime.Intrinsics.Vector64<System.IntPtr>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.SByte> System.Runtime.Intrinsics.Vector64.AsSByte`1(System.Runtime.Intrinsics.Vector64<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.SByte> System.Runtime.Intrinsics.Vector64.AsSByte`1(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.SByte> System.Runtime.Intrinsics.Vector64.Create(System.SByte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.SByte> System.Runtime.Intrinsics.Vector64.Create(System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.SByte> System.Runtime.Intrinsics.Vector64.CreateScalar(System.SByte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.SByte> System.Runtime.Intrinsics.Vector64.CreateScalarUnsafe(System.SByte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.SByte> System.Runtime.Intrinsics.Vector64.Narrow(System.Runtime.Intrinsics.Vector64<System.Int16>,System.Runtime.Intrinsics.Vector64<System.Int16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.SByte> System.Runtime.Intrinsics.Vector64.ShiftLeft(System.Runtime.Intrinsics.Vector64<System.SByte>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.SByte> System.Runtime.Intrinsics.Vector64.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector64<System.SByte>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.SByte> System.Runtime.Intrinsics.Vector64.ShiftRightLogical(System.Runtime.Intrinsics.Vector64<System.SByte>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.SByte> System.Runtime.Intrinsics.Vector64.Shuffle(System.Runtime.Intrinsics.Vector64<System.SByte>,System.Runtime.Intrinsics.Vector64<System.SByte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Single> System.Runtime.Intrinsics.Vector64.AsSingle`1(System.Runtime.Intrinsics.Vector64<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Single> System.Runtime.Intrinsics.Vector64.AsSingle`1(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Single> System.Runtime.Intrinsics.Vector64.Ceiling(System.Runtime.Intrinsics.Vector64<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Single> System.Runtime.Intrinsics.Vector64.ConvertToSingle(System.Runtime.Intrinsics.Vector64<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Single> System.Runtime.Intrinsics.Vector64.ConvertToSingle(System.Runtime.Intrinsics.Vector64<System.UInt32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Single> System.Runtime.Intrinsics.Vector64.Create(System.Single) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Single> System.Runtime.Intrinsics.Vector64.Create(System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Single> System.Runtime.Intrinsics.Vector64.CreateScalar(System.Single) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Single> System.Runtime.Intrinsics.Vector64.CreateScalarUnsafe(System.Single) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Single> System.Runtime.Intrinsics.Vector64.Floor(System.Runtime.Intrinsics.Vector64<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Single> System.Runtime.Intrinsics.Vector64.Narrow(System.Runtime.Intrinsics.Vector64<System.Double>,System.Runtime.Intrinsics.Vector64<System.Double>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.Single> System.Runtime.Intrinsics.Vector64.Shuffle(System.Runtime.Intrinsics.Vector64<System.Single>,System.Runtime.Intrinsics.Vector64<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.AsUInt16`1(System.Runtime.Intrinsics.Vector64<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.AsUInt16`1(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.Create(System.UInt16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.Create(System.UInt16,System.UInt16,System.UInt16,System.UInt16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.CreateScalar(System.UInt16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.CreateScalarUnsafe(System.UInt16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.Narrow(System.Runtime.Intrinsics.Vector64<System.UInt32>,System.Runtime.Intrinsics.Vector64<System.UInt32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.ShiftLeft(System.Runtime.Intrinsics.Vector64<System.UInt16>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.ShiftRightLogical(System.Runtime.Intrinsics.Vector64<System.UInt16>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.Shuffle(System.Runtime.Intrinsics.Vector64<System.UInt16>,System.Runtime.Intrinsics.Vector64<System.UInt16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.WidenLower(System.Runtime.Intrinsics.Vector64<System.Byte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.WidenUpper(System.Runtime.Intrinsics.Vector64<System.Byte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.AsUInt32`1(System.Runtime.Intrinsics.Vector64<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.AsUInt32`1(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.ConvertToUInt32(System.Runtime.Intrinsics.Vector64<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.Create(System.UInt32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.Create(System.UInt32,System.UInt32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.CreateScalar(System.UInt32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.CreateScalarUnsafe(System.UInt32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.Narrow(System.Runtime.Intrinsics.Vector64<System.UInt64>,System.Runtime.Intrinsics.Vector64<System.UInt64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.ShiftLeft(System.Runtime.Intrinsics.Vector64<System.UInt32>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.ShiftRightLogical(System.Runtime.Intrinsics.Vector64<System.UInt32>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.Shuffle(System.Runtime.Intrinsics.Vector64<System.UInt32>,System.Runtime.Intrinsics.Vector64<System.UInt32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.WidenLower(System.Runtime.Intrinsics.Vector64<System.UInt16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.WidenUpper(System.Runtime.Intrinsics.Vector64<System.UInt16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt64> System.Runtime.Intrinsics.Vector64.AsUInt64`1(System.Runtime.Intrinsics.Vector64<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt64> System.Runtime.Intrinsics.Vector64.AsUInt64`1(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt64> System.Runtime.Intrinsics.Vector64.ConvertToUInt64(System.Runtime.Intrinsics.Vector64<System.Double>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt64> System.Runtime.Intrinsics.Vector64.Create(System.UInt64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt64> System.Runtime.Intrinsics.Vector64.CreateScalar(System.UInt64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt64> System.Runtime.Intrinsics.Vector64.CreateScalarUnsafe(System.UInt64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt64> System.Runtime.Intrinsics.Vector64.ShiftLeft(System.Runtime.Intrinsics.Vector64<System.UInt64>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt64> System.Runtime.Intrinsics.Vector64.ShiftRightLogical(System.Runtime.Intrinsics.Vector64<System.UInt64>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt64> System.Runtime.Intrinsics.Vector64.WidenLower(System.Runtime.Intrinsics.Vector64<System.UInt32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UInt64> System.Runtime.Intrinsics.Vector64.WidenUpper(System.Runtime.Intrinsics.Vector64<System.UInt32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UIntPtr> System.Runtime.Intrinsics.Vector64.AsNUInt`1(System.Runtime.Intrinsics.Vector64<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UIntPtr> System.Runtime.Intrinsics.Vector64.AsNUInt`1(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UIntPtr> System.Runtime.Intrinsics.Vector64.Create(System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UIntPtr> System.Runtime.Intrinsics.Vector64.CreateScalar(System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UIntPtr> System.Runtime.Intrinsics.Vector64.CreateScalarUnsafe(System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UIntPtr> System.Runtime.Intrinsics.Vector64.ShiftLeft(System.Runtime.Intrinsics.Vector64<System.UIntPtr>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64<System.UIntPtr> System.Runtime.Intrinsics.Vector64.ShiftRightLogical(System.Runtime.Intrinsics.Vector64<System.UIntPtr>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64DebugView`1 | [IsReadOnlyAttribute(...)] | -| System.Runtime.Intrinsics.Vector64`1 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector64`1 | [IsReadOnlyAttribute(...)] | -| System.Runtime.Intrinsics.Vector128 | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> | [IsReadOnlyAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector64.ToVector128Unsafe`1(System.Runtime.Intrinsics.Vector64<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector64.ToVector128Unsafe`1(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector64.ToVector128`1(System.Runtime.Intrinsics.Vector64<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector64.ToVector128`1(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Abs`1(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Add`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.AndNot`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.AsVector128`1(System.Numerics.Vector<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.AsVector128`1(System.Numerics.Vector<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.BitwiseAnd`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.BitwiseOr`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.ConditionalSelect`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.CreateScalarUnsafe`1(!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.CreateScalar`1(!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Create`1(!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Divide`1(System.Runtime.Intrinsics.Vector128<!0>,!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Divide`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Equals`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.GreaterThanOrEqual`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.GreaterThan`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.LessThanOrEqual`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.LessThan`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.LoadAlignedNonTemporal`1(!0*) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.LoadAligned`1(!0*) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.LoadUnsafe`1(!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.LoadUnsafe`1(!0,System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Load`1(!0*) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Max`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Min`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Multiply`1(!0,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Multiply`1(System.Runtime.Intrinsics.Vector128<!0>,!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Multiply`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Negate`1(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.OnesComplement`1(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Sqrt`1(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Subtract`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.WithElement`1(System.Runtime.Intrinsics.Vector128<!0>,System.Int32,!0) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.WithElement`1(System.Runtime.Intrinsics.Vector128<!0>,System.Int32,!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.WithLower`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.WithLower`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.WithUpper`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.WithUpper`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Xor`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128`1.get_AllBitsSet() | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128`1.get_One() | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128`1.get_Zero() | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128`1.op_Addition(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128`1.op_BitwiseAnd(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128`1.op_BitwiseOr(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128`1.op_Division(System.Runtime.Intrinsics.Vector128<!0>,!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128`1.op_Division(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128`1.op_ExclusiveOr(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128`1.op_LeftShift(System.Runtime.Intrinsics.Vector128<!0>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128`1.op_Multiply(!0,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128`1.op_Multiply(System.Runtime.Intrinsics.Vector128<!0>,!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128`1.op_Multiply(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128`1.op_OnesComplement(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128`1.op_RightShift(System.Runtime.Intrinsics.Vector128<!0>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128`1.op_Subtraction(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128`1.op_UnaryNegation(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128`1.op_UnaryPlus(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128`1.op_UnsignedRightShift(System.Runtime.Intrinsics.Vector128<!0>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector256.GetLower`1(System.Runtime.Intrinsics.Vector256<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector256.GetLower`1(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector256.GetUpper`1(System.Runtime.Intrinsics.Vector256<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector256.GetUpper`1(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!1> System.Runtime.Intrinsics.Vector128.As`2(System.Runtime.Intrinsics.Vector128<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<!1> System.Runtime.Intrinsics.Vector128.As`2(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.AsByte`1(System.Runtime.Intrinsics.Vector128<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.AsByte`1(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.Create(System.Byte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.Create(System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.CreateScalar(System.Byte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.CreateScalarUnsafe(System.Byte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.Narrow(System.Runtime.Intrinsics.Vector128<System.UInt16>,System.Runtime.Intrinsics.Vector128<System.UInt16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.ShiftLeft(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.ShiftRightLogical(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.Shuffle(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Double> System.Runtime.Intrinsics.Vector128.AsDouble`1(System.Runtime.Intrinsics.Vector128<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Double> System.Runtime.Intrinsics.Vector128.AsDouble`1(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Double> System.Runtime.Intrinsics.Vector128.Ceiling(System.Runtime.Intrinsics.Vector128<System.Double>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Double> System.Runtime.Intrinsics.Vector128.ConvertToDouble(System.Runtime.Intrinsics.Vector128<System.Int64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Double> System.Runtime.Intrinsics.Vector128.ConvertToDouble(System.Runtime.Intrinsics.Vector128<System.UInt64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Double> System.Runtime.Intrinsics.Vector128.Create(System.Double) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Double> System.Runtime.Intrinsics.Vector128.Create(System.Double,System.Double) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Double> System.Runtime.Intrinsics.Vector128.CreateScalar(System.Double) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Double> System.Runtime.Intrinsics.Vector128.CreateScalarUnsafe(System.Double) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Double> System.Runtime.Intrinsics.Vector128.Floor(System.Runtime.Intrinsics.Vector128<System.Double>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Double> System.Runtime.Intrinsics.Vector128.Shuffle(System.Runtime.Intrinsics.Vector128<System.Double>,System.Runtime.Intrinsics.Vector128<System.Int64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Double> System.Runtime.Intrinsics.Vector128.WidenLower(System.Runtime.Intrinsics.Vector128<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Double> System.Runtime.Intrinsics.Vector128.WidenUpper(System.Runtime.Intrinsics.Vector128<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int16> System.Runtime.Intrinsics.Vector128.AsInt16`1(System.Runtime.Intrinsics.Vector128<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int16> System.Runtime.Intrinsics.Vector128.AsInt16`1(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int16> System.Runtime.Intrinsics.Vector128.Create(System.Int16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int16> System.Runtime.Intrinsics.Vector128.Create(System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int16> System.Runtime.Intrinsics.Vector128.CreateScalar(System.Int16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int16> System.Runtime.Intrinsics.Vector128.CreateScalarUnsafe(System.Int16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int16> System.Runtime.Intrinsics.Vector128.Narrow(System.Runtime.Intrinsics.Vector128<System.Int32>,System.Runtime.Intrinsics.Vector128<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int16> System.Runtime.Intrinsics.Vector128.ShiftLeft(System.Runtime.Intrinsics.Vector128<System.Int16>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int16> System.Runtime.Intrinsics.Vector128.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector128<System.Int16>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int16> System.Runtime.Intrinsics.Vector128.ShiftRightLogical(System.Runtime.Intrinsics.Vector128<System.Int16>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int16> System.Runtime.Intrinsics.Vector128.Shuffle(System.Runtime.Intrinsics.Vector128<System.Int16>,System.Runtime.Intrinsics.Vector128<System.Int16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int16> System.Runtime.Intrinsics.Vector128.WidenLower(System.Runtime.Intrinsics.Vector128<System.SByte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int16> System.Runtime.Intrinsics.Vector128.WidenUpper(System.Runtime.Intrinsics.Vector128<System.SByte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int32> System.Runtime.Intrinsics.Vector128.AsInt32`1(System.Runtime.Intrinsics.Vector128<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int32> System.Runtime.Intrinsics.Vector128.AsInt32`1(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int32> System.Runtime.Intrinsics.Vector128.ConvertToInt32(System.Runtime.Intrinsics.Vector128<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int32> System.Runtime.Intrinsics.Vector128.Create(System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int32> System.Runtime.Intrinsics.Vector128.Create(System.Int32,System.Int32,System.Int32,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int32> System.Runtime.Intrinsics.Vector128.CreateScalar(System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int32> System.Runtime.Intrinsics.Vector128.CreateScalarUnsafe(System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int32> System.Runtime.Intrinsics.Vector128.Narrow(System.Runtime.Intrinsics.Vector128<System.Int64>,System.Runtime.Intrinsics.Vector128<System.Int64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int32> System.Runtime.Intrinsics.Vector128.ShiftLeft(System.Runtime.Intrinsics.Vector128<System.Int32>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int32> System.Runtime.Intrinsics.Vector128.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector128<System.Int32>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int32> System.Runtime.Intrinsics.Vector128.ShiftRightLogical(System.Runtime.Intrinsics.Vector128<System.Int32>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int32> System.Runtime.Intrinsics.Vector128.Shuffle(System.Runtime.Intrinsics.Vector128<System.Int32>,System.Runtime.Intrinsics.Vector128<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int32> System.Runtime.Intrinsics.Vector128.WidenLower(System.Runtime.Intrinsics.Vector128<System.Int16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int32> System.Runtime.Intrinsics.Vector128.WidenUpper(System.Runtime.Intrinsics.Vector128<System.Int16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int64> System.Runtime.Intrinsics.Vector128.AsInt64`1(System.Runtime.Intrinsics.Vector128<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int64> System.Runtime.Intrinsics.Vector128.AsInt64`1(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int64> System.Runtime.Intrinsics.Vector128.ConvertToInt64(System.Runtime.Intrinsics.Vector128<System.Double>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int64> System.Runtime.Intrinsics.Vector128.Create(System.Int64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int64> System.Runtime.Intrinsics.Vector128.Create(System.Int64,System.Int64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int64> System.Runtime.Intrinsics.Vector128.CreateScalar(System.Int64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int64> System.Runtime.Intrinsics.Vector128.CreateScalarUnsafe(System.Int64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int64> System.Runtime.Intrinsics.Vector128.ShiftLeft(System.Runtime.Intrinsics.Vector128<System.Int64>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int64> System.Runtime.Intrinsics.Vector128.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector128<System.Int64>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int64> System.Runtime.Intrinsics.Vector128.ShiftRightLogical(System.Runtime.Intrinsics.Vector128<System.Int64>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int64> System.Runtime.Intrinsics.Vector128.Shuffle(System.Runtime.Intrinsics.Vector128<System.Int64>,System.Runtime.Intrinsics.Vector128<System.Int64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int64> System.Runtime.Intrinsics.Vector128.WidenLower(System.Runtime.Intrinsics.Vector128<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Int64> System.Runtime.Intrinsics.Vector128.WidenUpper(System.Runtime.Intrinsics.Vector128<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.IntPtr> System.Runtime.Intrinsics.Vector128.AsNInt`1(System.Runtime.Intrinsics.Vector128<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.IntPtr> System.Runtime.Intrinsics.Vector128.AsNInt`1(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.IntPtr> System.Runtime.Intrinsics.Vector128.Create(System.IntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.IntPtr> System.Runtime.Intrinsics.Vector128.CreateScalar(System.IntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.IntPtr> System.Runtime.Intrinsics.Vector128.CreateScalarUnsafe(System.IntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.IntPtr> System.Runtime.Intrinsics.Vector128.ShiftLeft(System.Runtime.Intrinsics.Vector128<System.IntPtr>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.IntPtr> System.Runtime.Intrinsics.Vector128.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector128<System.IntPtr>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.IntPtr> System.Runtime.Intrinsics.Vector128.ShiftRightLogical(System.Runtime.Intrinsics.Vector128<System.IntPtr>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.SByte> System.Runtime.Intrinsics.Vector128.AsSByte`1(System.Runtime.Intrinsics.Vector128<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.SByte> System.Runtime.Intrinsics.Vector128.AsSByte`1(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.SByte> System.Runtime.Intrinsics.Vector128.Create(System.SByte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.SByte> System.Runtime.Intrinsics.Vector128.Create(System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.SByte> System.Runtime.Intrinsics.Vector128.CreateScalar(System.SByte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.SByte> System.Runtime.Intrinsics.Vector128.CreateScalarUnsafe(System.SByte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.SByte> System.Runtime.Intrinsics.Vector128.Narrow(System.Runtime.Intrinsics.Vector128<System.Int16>,System.Runtime.Intrinsics.Vector128<System.Int16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.SByte> System.Runtime.Intrinsics.Vector128.ShiftLeft(System.Runtime.Intrinsics.Vector128<System.SByte>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.SByte> System.Runtime.Intrinsics.Vector128.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector128<System.SByte>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.SByte> System.Runtime.Intrinsics.Vector128.ShiftRightLogical(System.Runtime.Intrinsics.Vector128<System.SByte>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.SByte> System.Runtime.Intrinsics.Vector128.Shuffle(System.Runtime.Intrinsics.Vector128<System.SByte>,System.Runtime.Intrinsics.Vector128<System.SByte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Numerics.Matrix4x4.Impl.<Invert>g__Permute\|64_1(System.Runtime.Intrinsics.Vector128<System.Single>,System.Byte) | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.<ConvertToSingle>g__SoftwareFallback\|40_0(System.Runtime.Intrinsics.Vector128<System.UInt32>) | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.AsSingle`1(System.Runtime.Intrinsics.Vector128<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.AsSingle`1(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.AsVector128(System.Numerics.Plane) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.AsVector128(System.Numerics.Plane) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.AsVector128(System.Numerics.Quaternion) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.AsVector128(System.Numerics.Quaternion) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.AsVector128(System.Numerics.Vector2) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.AsVector128(System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.AsVector128(System.Numerics.Vector3) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.AsVector128(System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.AsVector128(System.Numerics.Vector4) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.AsVector128(System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.Ceiling(System.Runtime.Intrinsics.Vector128<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.ConvertToSingle(System.Runtime.Intrinsics.Vector128<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.ConvertToSingle(System.Runtime.Intrinsics.Vector128<System.UInt32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.Create(System.Single) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.Create(System.Single,System.Single,System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.CreateScalar(System.Single) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.CreateScalarUnsafe(System.Single) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.Floor(System.Runtime.Intrinsics.Vector128<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.Narrow(System.Runtime.Intrinsics.Vector128<System.Double>,System.Runtime.Intrinsics.Vector128<System.Double>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.Shuffle(System.Runtime.Intrinsics.Vector128<System.Single>,System.Runtime.Intrinsics.Vector128<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.AsUInt16`1(System.Runtime.Intrinsics.Vector128<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.AsUInt16`1(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.Create(System.UInt16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.Create(System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.CreateScalar(System.UInt16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.CreateScalarUnsafe(System.UInt16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.Narrow(System.Runtime.Intrinsics.Vector128<System.UInt32>,System.Runtime.Intrinsics.Vector128<System.UInt32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.ShiftLeft(System.Runtime.Intrinsics.Vector128<System.UInt16>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.ShiftRightLogical(System.Runtime.Intrinsics.Vector128<System.UInt16>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.Shuffle(System.Runtime.Intrinsics.Vector128<System.UInt16>,System.Runtime.Intrinsics.Vector128<System.UInt16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.WidenLower(System.Runtime.Intrinsics.Vector128<System.Byte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.WidenUpper(System.Runtime.Intrinsics.Vector128<System.Byte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.AsUInt32`1(System.Runtime.Intrinsics.Vector128<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.AsUInt32`1(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.ConvertToUInt32(System.Runtime.Intrinsics.Vector128<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.Create(System.UInt32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.Create(System.UInt32,System.UInt32,System.UInt32,System.UInt32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.CreateScalar(System.UInt32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.CreateScalarUnsafe(System.UInt32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.Narrow(System.Runtime.Intrinsics.Vector128<System.UInt64>,System.Runtime.Intrinsics.Vector128<System.UInt64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.ShiftLeft(System.Runtime.Intrinsics.Vector128<System.UInt32>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.ShiftRightLogical(System.Runtime.Intrinsics.Vector128<System.UInt32>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.Shuffle(System.Runtime.Intrinsics.Vector128<System.UInt32>,System.Runtime.Intrinsics.Vector128<System.UInt32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.WidenLower(System.Runtime.Intrinsics.Vector128<System.UInt16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.WidenUpper(System.Runtime.Intrinsics.Vector128<System.UInt16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.AsUInt64`1(System.Runtime.Intrinsics.Vector128<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.AsUInt64`1(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.ConvertToUInt64(System.Runtime.Intrinsics.Vector128<System.Double>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.Create(System.UInt64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.Create(System.UInt64,System.UInt64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.CreateScalar(System.UInt64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.CreateScalarUnsafe(System.UInt64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.ShiftLeft(System.Runtime.Intrinsics.Vector128<System.UInt64>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.ShiftRightLogical(System.Runtime.Intrinsics.Vector128<System.UInt64>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.Shuffle(System.Runtime.Intrinsics.Vector128<System.UInt64>,System.Runtime.Intrinsics.Vector128<System.UInt64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.WidenLower(System.Runtime.Intrinsics.Vector128<System.UInt32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.WidenUpper(System.Runtime.Intrinsics.Vector128<System.UInt32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UIntPtr> System.Runtime.Intrinsics.Vector128.AsNUInt`1(System.Runtime.Intrinsics.Vector128<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UIntPtr> System.Runtime.Intrinsics.Vector128.AsNUInt`1(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UIntPtr> System.Runtime.Intrinsics.Vector128.Create(System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UIntPtr> System.Runtime.Intrinsics.Vector128.CreateScalar(System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UIntPtr> System.Runtime.Intrinsics.Vector128.CreateScalarUnsafe(System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UIntPtr> System.Runtime.Intrinsics.Vector128.ShiftLeft(System.Runtime.Intrinsics.Vector128<System.UIntPtr>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128<System.UIntPtr> System.Runtime.Intrinsics.Vector128.ShiftRightLogical(System.Runtime.Intrinsics.Vector128<System.UIntPtr>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128DebugView`1 | [IsReadOnlyAttribute(...)] | -| System.Runtime.Intrinsics.Vector128`1 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector128`1 | [IsReadOnlyAttribute(...)] | -| System.Runtime.Intrinsics.Vector256 | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> | [IsReadOnlyAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector128.ToVector256Unsafe`1(System.Runtime.Intrinsics.Vector128<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector128.ToVector256Unsafe`1(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector128.ToVector256`1(System.Runtime.Intrinsics.Vector128<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector128.ToVector256`1(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Abs`1(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Add`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.AndNot`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.AsVector256`1(System.Numerics.Vector<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.AsVector256`1(System.Numerics.Vector<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.BitwiseAnd`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.BitwiseOr`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.ConditionalSelect`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.CreateScalarUnsafe`1(!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.CreateScalar`1(!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Create`1(!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Divide`1(System.Runtime.Intrinsics.Vector256<!0>,!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Divide`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Equals`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.GreaterThanOrEqual`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.GreaterThan`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.LessThanOrEqual`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.LessThan`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.LoadAlignedNonTemporal`1(!0*) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.LoadAligned`1(!0*) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.LoadUnsafe`1(!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.LoadUnsafe`1(!0,System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Load`1(!0*) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Max`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Min`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Multiply`1(!0,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Multiply`1(System.Runtime.Intrinsics.Vector256<!0>,!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Multiply`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Negate`1(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.OnesComplement`1(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Sqrt`1(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Subtract`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.WithElement`1(System.Runtime.Intrinsics.Vector256<!0>,System.Int32,!0) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.WithElement`1(System.Runtime.Intrinsics.Vector256<!0>,System.Int32,!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.WithLower`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.WithLower`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.WithUpper`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.WithUpper`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Xor`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256`1.get_AllBitsSet() | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256`1.get_One() | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256`1.get_Zero() | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256`1.op_Addition(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256`1.op_BitwiseAnd(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256`1.op_BitwiseOr(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256`1.op_Division(System.Runtime.Intrinsics.Vector256<!0>,!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256`1.op_Division(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256`1.op_ExclusiveOr(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256`1.op_LeftShift(System.Runtime.Intrinsics.Vector256<!0>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256`1.op_Multiply(!0,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256`1.op_Multiply(System.Runtime.Intrinsics.Vector256<!0>,!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256`1.op_Multiply(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256`1.op_OnesComplement(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256`1.op_RightShift(System.Runtime.Intrinsics.Vector256<!0>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256`1.op_Subtraction(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256`1.op_UnaryNegation(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256`1.op_UnaryPlus(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256`1.op_UnsignedRightShift(System.Runtime.Intrinsics.Vector256<!0>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector512.GetLower`1(System.Runtime.Intrinsics.Vector512<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector512.GetLower`1(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector512.GetUpper`1(System.Runtime.Intrinsics.Vector512<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector512.GetUpper`1(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!1> System.Runtime.Intrinsics.Vector256.As`2(System.Runtime.Intrinsics.Vector256<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<!1> System.Runtime.Intrinsics.Vector256.As`2(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Byte> System.Runtime.Intrinsics.Vector256.AsByte`1(System.Runtime.Intrinsics.Vector256<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Byte> System.Runtime.Intrinsics.Vector256.AsByte`1(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Byte> System.Runtime.Intrinsics.Vector256.Create(System.Byte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Byte> System.Runtime.Intrinsics.Vector256.Create(System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Byte> System.Runtime.Intrinsics.Vector256.CreateScalar(System.Byte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Byte> System.Runtime.Intrinsics.Vector256.CreateScalarUnsafe(System.Byte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Byte> System.Runtime.Intrinsics.Vector256.Narrow(System.Runtime.Intrinsics.Vector256<System.UInt16>,System.Runtime.Intrinsics.Vector256<System.UInt16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Byte> System.Runtime.Intrinsics.Vector256.ShiftLeft(System.Runtime.Intrinsics.Vector256<System.Byte>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Byte> System.Runtime.Intrinsics.Vector256.ShiftRightLogical(System.Runtime.Intrinsics.Vector256<System.Byte>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Byte> System.Runtime.Intrinsics.Vector256.Shuffle(System.Runtime.Intrinsics.Vector256<System.Byte>,System.Runtime.Intrinsics.Vector256<System.Byte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Double> System.Runtime.Intrinsics.Vector256.AsDouble`1(System.Runtime.Intrinsics.Vector256<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Double> System.Runtime.Intrinsics.Vector256.AsDouble`1(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Double> System.Runtime.Intrinsics.Vector256.Ceiling(System.Runtime.Intrinsics.Vector256<System.Double>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Double> System.Runtime.Intrinsics.Vector256.ConvertToDouble(System.Runtime.Intrinsics.Vector256<System.Int64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Double> System.Runtime.Intrinsics.Vector256.ConvertToDouble(System.Runtime.Intrinsics.Vector256<System.UInt64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Double> System.Runtime.Intrinsics.Vector256.Create(System.Double) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Double> System.Runtime.Intrinsics.Vector256.Create(System.Double,System.Double,System.Double,System.Double) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Double> System.Runtime.Intrinsics.Vector256.CreateScalar(System.Double) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Double> System.Runtime.Intrinsics.Vector256.CreateScalarUnsafe(System.Double) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Double> System.Runtime.Intrinsics.Vector256.Floor(System.Runtime.Intrinsics.Vector256<System.Double>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Double> System.Runtime.Intrinsics.Vector256.Shuffle(System.Runtime.Intrinsics.Vector256<System.Double>,System.Runtime.Intrinsics.Vector256<System.Int64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Double> System.Runtime.Intrinsics.Vector256.WidenLower(System.Runtime.Intrinsics.Vector256<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Double> System.Runtime.Intrinsics.Vector256.WidenUpper(System.Runtime.Intrinsics.Vector256<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int16> System.Runtime.Intrinsics.Vector256.AsInt16`1(System.Runtime.Intrinsics.Vector256<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int16> System.Runtime.Intrinsics.Vector256.AsInt16`1(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int16> System.Runtime.Intrinsics.Vector256.Create(System.Int16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int16> System.Runtime.Intrinsics.Vector256.Create(System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int16> System.Runtime.Intrinsics.Vector256.CreateScalar(System.Int16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int16> System.Runtime.Intrinsics.Vector256.CreateScalarUnsafe(System.Int16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int16> System.Runtime.Intrinsics.Vector256.Narrow(System.Runtime.Intrinsics.Vector256<System.Int32>,System.Runtime.Intrinsics.Vector256<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int16> System.Runtime.Intrinsics.Vector256.ShiftLeft(System.Runtime.Intrinsics.Vector256<System.Int16>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int16> System.Runtime.Intrinsics.Vector256.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector256<System.Int16>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int16> System.Runtime.Intrinsics.Vector256.ShiftRightLogical(System.Runtime.Intrinsics.Vector256<System.Int16>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int16> System.Runtime.Intrinsics.Vector256.Shuffle(System.Runtime.Intrinsics.Vector256<System.Int16>,System.Runtime.Intrinsics.Vector256<System.Int16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int16> System.Runtime.Intrinsics.Vector256.WidenLower(System.Runtime.Intrinsics.Vector256<System.SByte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int16> System.Runtime.Intrinsics.Vector256.WidenUpper(System.Runtime.Intrinsics.Vector256<System.SByte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int32> System.Runtime.Intrinsics.Vector256.AsInt32`1(System.Runtime.Intrinsics.Vector256<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int32> System.Runtime.Intrinsics.Vector256.AsInt32`1(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int32> System.Runtime.Intrinsics.Vector256.ConvertToInt32(System.Runtime.Intrinsics.Vector256<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int32> System.Runtime.Intrinsics.Vector256.Create(System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int32> System.Runtime.Intrinsics.Vector256.Create(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int32> System.Runtime.Intrinsics.Vector256.CreateScalar(System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int32> System.Runtime.Intrinsics.Vector256.CreateScalarUnsafe(System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int32> System.Runtime.Intrinsics.Vector256.Narrow(System.Runtime.Intrinsics.Vector256<System.Int64>,System.Runtime.Intrinsics.Vector256<System.Int64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int32> System.Runtime.Intrinsics.Vector256.ShiftLeft(System.Runtime.Intrinsics.Vector256<System.Int32>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int32> System.Runtime.Intrinsics.Vector256.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector256<System.Int32>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int32> System.Runtime.Intrinsics.Vector256.ShiftRightLogical(System.Runtime.Intrinsics.Vector256<System.Int32>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int32> System.Runtime.Intrinsics.Vector256.Shuffle(System.Runtime.Intrinsics.Vector256<System.Int32>,System.Runtime.Intrinsics.Vector256<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int32> System.Runtime.Intrinsics.Vector256.WidenLower(System.Runtime.Intrinsics.Vector256<System.Int16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int32> System.Runtime.Intrinsics.Vector256.WidenUpper(System.Runtime.Intrinsics.Vector256<System.Int16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int64> System.Runtime.Intrinsics.Vector256.AsInt64`1(System.Runtime.Intrinsics.Vector256<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int64> System.Runtime.Intrinsics.Vector256.AsInt64`1(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int64> System.Runtime.Intrinsics.Vector256.ConvertToInt64(System.Runtime.Intrinsics.Vector256<System.Double>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int64> System.Runtime.Intrinsics.Vector256.Create(System.Int64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int64> System.Runtime.Intrinsics.Vector256.Create(System.Int64,System.Int64,System.Int64,System.Int64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int64> System.Runtime.Intrinsics.Vector256.CreateScalar(System.Int64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int64> System.Runtime.Intrinsics.Vector256.CreateScalarUnsafe(System.Int64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int64> System.Runtime.Intrinsics.Vector256.ShiftLeft(System.Runtime.Intrinsics.Vector256<System.Int64>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int64> System.Runtime.Intrinsics.Vector256.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector256<System.Int64>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int64> System.Runtime.Intrinsics.Vector256.ShiftRightLogical(System.Runtime.Intrinsics.Vector256<System.Int64>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int64> System.Runtime.Intrinsics.Vector256.Shuffle(System.Runtime.Intrinsics.Vector256<System.Int64>,System.Runtime.Intrinsics.Vector256<System.Int64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int64> System.Runtime.Intrinsics.Vector256.WidenLower(System.Runtime.Intrinsics.Vector256<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Int64> System.Runtime.Intrinsics.Vector256.WidenUpper(System.Runtime.Intrinsics.Vector256<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.IntPtr> System.Runtime.Intrinsics.Vector256.AsNInt`1(System.Runtime.Intrinsics.Vector256<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.IntPtr> System.Runtime.Intrinsics.Vector256.AsNInt`1(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.IntPtr> System.Runtime.Intrinsics.Vector256.Create(System.IntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.IntPtr> System.Runtime.Intrinsics.Vector256.CreateScalar(System.IntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.IntPtr> System.Runtime.Intrinsics.Vector256.CreateScalarUnsafe(System.IntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.IntPtr> System.Runtime.Intrinsics.Vector256.ShiftLeft(System.Runtime.Intrinsics.Vector256<System.IntPtr>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.IntPtr> System.Runtime.Intrinsics.Vector256.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector256<System.IntPtr>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.IntPtr> System.Runtime.Intrinsics.Vector256.ShiftRightLogical(System.Runtime.Intrinsics.Vector256<System.IntPtr>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.SByte> System.Runtime.Intrinsics.Vector256.AsSByte`1(System.Runtime.Intrinsics.Vector256<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.SByte> System.Runtime.Intrinsics.Vector256.AsSByte`1(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.SByte> System.Runtime.Intrinsics.Vector256.Create(System.SByte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.SByte> System.Runtime.Intrinsics.Vector256.Create(System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.SByte> System.Runtime.Intrinsics.Vector256.CreateScalar(System.SByte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.SByte> System.Runtime.Intrinsics.Vector256.CreateScalarUnsafe(System.SByte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.SByte> System.Runtime.Intrinsics.Vector256.Narrow(System.Runtime.Intrinsics.Vector256<System.Int16>,System.Runtime.Intrinsics.Vector256<System.Int16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.SByte> System.Runtime.Intrinsics.Vector256.ShiftLeft(System.Runtime.Intrinsics.Vector256<System.SByte>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.SByte> System.Runtime.Intrinsics.Vector256.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector256<System.SByte>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.SByte> System.Runtime.Intrinsics.Vector256.ShiftRightLogical(System.Runtime.Intrinsics.Vector256<System.SByte>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.SByte> System.Runtime.Intrinsics.Vector256.Shuffle(System.Runtime.Intrinsics.Vector256<System.SByte>,System.Runtime.Intrinsics.Vector256<System.SByte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Single> System.Runtime.Intrinsics.Vector256.AsSingle`1(System.Runtime.Intrinsics.Vector256<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Single> System.Runtime.Intrinsics.Vector256.AsSingle`1(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Single> System.Runtime.Intrinsics.Vector256.Ceiling(System.Runtime.Intrinsics.Vector256<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Single> System.Runtime.Intrinsics.Vector256.ConvertToSingle(System.Runtime.Intrinsics.Vector256<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Single> System.Runtime.Intrinsics.Vector256.ConvertToSingle(System.Runtime.Intrinsics.Vector256<System.UInt32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Single> System.Runtime.Intrinsics.Vector256.Create(System.Single) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Single> System.Runtime.Intrinsics.Vector256.Create(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Single> System.Runtime.Intrinsics.Vector256.CreateScalar(System.Single) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Single> System.Runtime.Intrinsics.Vector256.CreateScalarUnsafe(System.Single) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Single> System.Runtime.Intrinsics.Vector256.Floor(System.Runtime.Intrinsics.Vector256<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Single> System.Runtime.Intrinsics.Vector256.Narrow(System.Runtime.Intrinsics.Vector256<System.Double>,System.Runtime.Intrinsics.Vector256<System.Double>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.Single> System.Runtime.Intrinsics.Vector256.Shuffle(System.Runtime.Intrinsics.Vector256<System.Single>,System.Runtime.Intrinsics.Vector256<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.AsUInt16`1(System.Runtime.Intrinsics.Vector256<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.AsUInt16`1(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.Create(System.UInt16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.Create(System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.CreateScalar(System.UInt16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.CreateScalarUnsafe(System.UInt16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.Narrow(System.Runtime.Intrinsics.Vector256<System.UInt32>,System.Runtime.Intrinsics.Vector256<System.UInt32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.ShiftLeft(System.Runtime.Intrinsics.Vector256<System.UInt16>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.ShiftRightLogical(System.Runtime.Intrinsics.Vector256<System.UInt16>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.Shuffle(System.Runtime.Intrinsics.Vector256<System.UInt16>,System.Runtime.Intrinsics.Vector256<System.UInt16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.WidenLower(System.Runtime.Intrinsics.Vector256<System.Byte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.WidenUpper(System.Runtime.Intrinsics.Vector256<System.Byte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.AsUInt32`1(System.Runtime.Intrinsics.Vector256<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.AsUInt32`1(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.ConvertToUInt32(System.Runtime.Intrinsics.Vector256<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.Create(System.UInt32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.Create(System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.CreateScalar(System.UInt32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.CreateScalarUnsafe(System.UInt32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.Narrow(System.Runtime.Intrinsics.Vector256<System.UInt64>,System.Runtime.Intrinsics.Vector256<System.UInt64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.ShiftLeft(System.Runtime.Intrinsics.Vector256<System.UInt32>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.ShiftRightLogical(System.Runtime.Intrinsics.Vector256<System.UInt32>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.Shuffle(System.Runtime.Intrinsics.Vector256<System.UInt32>,System.Runtime.Intrinsics.Vector256<System.UInt32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.WidenLower(System.Runtime.Intrinsics.Vector256<System.UInt16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.WidenUpper(System.Runtime.Intrinsics.Vector256<System.UInt16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.AsUInt64`1(System.Runtime.Intrinsics.Vector256<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.AsUInt64`1(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.ConvertToUInt64(System.Runtime.Intrinsics.Vector256<System.Double>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.Create(System.UInt64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.Create(System.UInt64,System.UInt64,System.UInt64,System.UInt64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.CreateScalar(System.UInt64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.CreateScalarUnsafe(System.UInt64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.ShiftLeft(System.Runtime.Intrinsics.Vector256<System.UInt64>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.ShiftRightLogical(System.Runtime.Intrinsics.Vector256<System.UInt64>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.Shuffle(System.Runtime.Intrinsics.Vector256<System.UInt64>,System.Runtime.Intrinsics.Vector256<System.UInt64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.WidenLower(System.Runtime.Intrinsics.Vector256<System.UInt32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.WidenUpper(System.Runtime.Intrinsics.Vector256<System.UInt32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UIntPtr> System.Runtime.Intrinsics.Vector256.AsNUInt`1(System.Runtime.Intrinsics.Vector256<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UIntPtr> System.Runtime.Intrinsics.Vector256.AsNUInt`1(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UIntPtr> System.Runtime.Intrinsics.Vector256.Create(System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UIntPtr> System.Runtime.Intrinsics.Vector256.CreateScalar(System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UIntPtr> System.Runtime.Intrinsics.Vector256.CreateScalarUnsafe(System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UIntPtr> System.Runtime.Intrinsics.Vector256.ShiftLeft(System.Runtime.Intrinsics.Vector256<System.UIntPtr>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256<System.UIntPtr> System.Runtime.Intrinsics.Vector256.ShiftRightLogical(System.Runtime.Intrinsics.Vector256<System.UIntPtr>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256DebugView`1 | [IsReadOnlyAttribute(...)] | -| System.Runtime.Intrinsics.Vector256`1 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector256`1 | [IsReadOnlyAttribute(...)] | -| System.Runtime.Intrinsics.Vector512 | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> | [IsReadOnlyAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector256.ToVector512Unsafe`1(System.Runtime.Intrinsics.Vector256<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector256.ToVector512Unsafe`1(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector256.ToVector512`1(System.Runtime.Intrinsics.Vector256<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector256.ToVector512`1(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Abs`1(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Add`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.AndNot`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.AsVector512`1(System.Numerics.Vector<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.AsVector512`1(System.Numerics.Vector<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.BitwiseAnd`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.BitwiseOr`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.ConditionalSelect`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.CreateScalarUnsafe`1(!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Create`1(!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Divide`1(System.Runtime.Intrinsics.Vector512<!0>,!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Divide`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Equals`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.GreaterThanOrEqual`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.GreaterThan`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.LessThanOrEqual`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.LessThan`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.LoadAlignedNonTemporal`1(!0*) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.LoadAligned`1(!0*) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.LoadUnsafe`1(!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.LoadUnsafe`1(!0,System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Load`1(!0*) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Max`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Min`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Multiply`1(!0,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Multiply`1(System.Runtime.Intrinsics.Vector512<!0>,!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Multiply`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Negate`1(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.OnesComplement`1(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Sqrt`1(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Subtract`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.WithElement`1(System.Runtime.Intrinsics.Vector512<!0>,System.Int32,!0) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.WithElement`1(System.Runtime.Intrinsics.Vector512<!0>,System.Int32,!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.WithLower`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.WithLower`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.WithUpper`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.WithUpper`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Xor`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512`1.get_AllBitsSet() | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512`1.get_One() | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512`1.get_Zero() | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512`1.op_Addition(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512`1.op_BitwiseAnd(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512`1.op_BitwiseOr(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512`1.op_Division(System.Runtime.Intrinsics.Vector512<!0>,!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512`1.op_Division(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512`1.op_ExclusiveOr(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512`1.op_LeftShift(System.Runtime.Intrinsics.Vector512<!0>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512`1.op_Multiply(!0,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512`1.op_Multiply(System.Runtime.Intrinsics.Vector512<!0>,!0) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512`1.op_Multiply(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512`1.op_OnesComplement(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512`1.op_RightShift(System.Runtime.Intrinsics.Vector512<!0>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512`1.op_Subtraction(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512`1.op_UnaryNegation(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512`1.op_UnaryPlus(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512`1.op_UnsignedRightShift(System.Runtime.Intrinsics.Vector512<!0>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!1> System.Runtime.Intrinsics.Vector512.As`2(System.Runtime.Intrinsics.Vector512<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<!1> System.Runtime.Intrinsics.Vector512.As`2(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Byte> System.Runtime.Intrinsics.Vector512.AsByte`1(System.Runtime.Intrinsics.Vector512<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Byte> System.Runtime.Intrinsics.Vector512.AsByte`1(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Byte> System.Runtime.Intrinsics.Vector512.Create(System.Byte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Byte> System.Runtime.Intrinsics.Vector512.Create(System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Byte> System.Runtime.Intrinsics.Vector512.CreateScalarUnsafe(System.Byte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Byte> System.Runtime.Intrinsics.Vector512.Narrow(System.Runtime.Intrinsics.Vector512<System.UInt16>,System.Runtime.Intrinsics.Vector512<System.UInt16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Byte> System.Runtime.Intrinsics.Vector512.ShiftLeft(System.Runtime.Intrinsics.Vector512<System.Byte>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Byte> System.Runtime.Intrinsics.Vector512.ShiftRightLogical(System.Runtime.Intrinsics.Vector512<System.Byte>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Byte> System.Runtime.Intrinsics.Vector512.Shuffle(System.Runtime.Intrinsics.Vector512<System.Byte>,System.Runtime.Intrinsics.Vector512<System.Byte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Double> System.Runtime.Intrinsics.Vector512.AsDouble`1(System.Runtime.Intrinsics.Vector512<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Double> System.Runtime.Intrinsics.Vector512.AsDouble`1(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Double> System.Runtime.Intrinsics.Vector512.Ceiling(System.Runtime.Intrinsics.Vector512<System.Double>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Double> System.Runtime.Intrinsics.Vector512.ConvertToDouble(System.Runtime.Intrinsics.Vector512<System.Int64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Double> System.Runtime.Intrinsics.Vector512.ConvertToDouble(System.Runtime.Intrinsics.Vector512<System.UInt64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Double> System.Runtime.Intrinsics.Vector512.Create(System.Double) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Double> System.Runtime.Intrinsics.Vector512.Create(System.Double,System.Double,System.Double,System.Double,System.Double,System.Double,System.Double,System.Double) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Double> System.Runtime.Intrinsics.Vector512.CreateScalarUnsafe(System.Double) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Double> System.Runtime.Intrinsics.Vector512.Floor(System.Runtime.Intrinsics.Vector512<System.Double>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Double> System.Runtime.Intrinsics.Vector512.Shuffle(System.Runtime.Intrinsics.Vector512<System.Double>,System.Runtime.Intrinsics.Vector512<System.Int64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Double> System.Runtime.Intrinsics.Vector512.WidenLower(System.Runtime.Intrinsics.Vector512<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Double> System.Runtime.Intrinsics.Vector512.WidenUpper(System.Runtime.Intrinsics.Vector512<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int16> System.Runtime.Intrinsics.Vector512.AsInt16`1(System.Runtime.Intrinsics.Vector512<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int16> System.Runtime.Intrinsics.Vector512.AsInt16`1(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int16> System.Runtime.Intrinsics.Vector512.Create(System.Int16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int16> System.Runtime.Intrinsics.Vector512.Create(System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16,System.Int16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int16> System.Runtime.Intrinsics.Vector512.CreateScalarUnsafe(System.Int16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int16> System.Runtime.Intrinsics.Vector512.Narrow(System.Runtime.Intrinsics.Vector512<System.Int32>,System.Runtime.Intrinsics.Vector512<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int16> System.Runtime.Intrinsics.Vector512.ShiftLeft(System.Runtime.Intrinsics.Vector512<System.Int16>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int16> System.Runtime.Intrinsics.Vector512.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector512<System.Int16>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int16> System.Runtime.Intrinsics.Vector512.ShiftRightLogical(System.Runtime.Intrinsics.Vector512<System.Int16>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int16> System.Runtime.Intrinsics.Vector512.Shuffle(System.Runtime.Intrinsics.Vector512<System.Int16>,System.Runtime.Intrinsics.Vector512<System.Int16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int16> System.Runtime.Intrinsics.Vector512.WidenLower(System.Runtime.Intrinsics.Vector512<System.SByte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int16> System.Runtime.Intrinsics.Vector512.WidenUpper(System.Runtime.Intrinsics.Vector512<System.SByte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int32> System.Runtime.Intrinsics.Vector512.AsInt32`1(System.Runtime.Intrinsics.Vector512<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int32> System.Runtime.Intrinsics.Vector512.AsInt32`1(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int32> System.Runtime.Intrinsics.Vector512.ConvertToInt32(System.Runtime.Intrinsics.Vector512<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int32> System.Runtime.Intrinsics.Vector512.Create(System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int32> System.Runtime.Intrinsics.Vector512.Create(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int32> System.Runtime.Intrinsics.Vector512.CreateScalarUnsafe(System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int32> System.Runtime.Intrinsics.Vector512.Narrow(System.Runtime.Intrinsics.Vector512<System.Int64>,System.Runtime.Intrinsics.Vector512<System.Int64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int32> System.Runtime.Intrinsics.Vector512.ShiftLeft(System.Runtime.Intrinsics.Vector512<System.Int32>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int32> System.Runtime.Intrinsics.Vector512.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector512<System.Int32>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int32> System.Runtime.Intrinsics.Vector512.ShiftRightLogical(System.Runtime.Intrinsics.Vector512<System.Int32>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int32> System.Runtime.Intrinsics.Vector512.Shuffle(System.Runtime.Intrinsics.Vector512<System.Int32>,System.Runtime.Intrinsics.Vector512<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int32> System.Runtime.Intrinsics.Vector512.WidenLower(System.Runtime.Intrinsics.Vector512<System.Int16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int32> System.Runtime.Intrinsics.Vector512.WidenUpper(System.Runtime.Intrinsics.Vector512<System.Int16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int64> System.Runtime.Intrinsics.Vector512.AsInt64`1(System.Runtime.Intrinsics.Vector512<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int64> System.Runtime.Intrinsics.Vector512.AsInt64`1(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int64> System.Runtime.Intrinsics.Vector512.ConvertToInt64(System.Runtime.Intrinsics.Vector512<System.Double>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int64> System.Runtime.Intrinsics.Vector512.Create(System.Int64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int64> System.Runtime.Intrinsics.Vector512.Create(System.Int64,System.Int64,System.Int64,System.Int64,System.Int64,System.Int64,System.Int64,System.Int64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int64> System.Runtime.Intrinsics.Vector512.CreateScalarUnsafe(System.Int64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int64> System.Runtime.Intrinsics.Vector512.ShiftLeft(System.Runtime.Intrinsics.Vector512<System.Int64>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int64> System.Runtime.Intrinsics.Vector512.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector512<System.Int64>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int64> System.Runtime.Intrinsics.Vector512.ShiftRightLogical(System.Runtime.Intrinsics.Vector512<System.Int64>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int64> System.Runtime.Intrinsics.Vector512.Shuffle(System.Runtime.Intrinsics.Vector512<System.Int64>,System.Runtime.Intrinsics.Vector512<System.Int64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int64> System.Runtime.Intrinsics.Vector512.WidenLower(System.Runtime.Intrinsics.Vector512<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Int64> System.Runtime.Intrinsics.Vector512.WidenUpper(System.Runtime.Intrinsics.Vector512<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.IntPtr> System.Runtime.Intrinsics.Vector512.AsNInt`1(System.Runtime.Intrinsics.Vector512<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.IntPtr> System.Runtime.Intrinsics.Vector512.AsNInt`1(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.IntPtr> System.Runtime.Intrinsics.Vector512.Create(System.IntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.IntPtr> System.Runtime.Intrinsics.Vector512.CreateScalarUnsafe(System.IntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.IntPtr> System.Runtime.Intrinsics.Vector512.ShiftLeft(System.Runtime.Intrinsics.Vector512<System.IntPtr>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.IntPtr> System.Runtime.Intrinsics.Vector512.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector512<System.IntPtr>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.IntPtr> System.Runtime.Intrinsics.Vector512.ShiftRightLogical(System.Runtime.Intrinsics.Vector512<System.IntPtr>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.SByte> System.Runtime.Intrinsics.Vector512.AsSByte`1(System.Runtime.Intrinsics.Vector512<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.SByte> System.Runtime.Intrinsics.Vector512.AsSByte`1(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.SByte> System.Runtime.Intrinsics.Vector512.Create(System.SByte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.SByte> System.Runtime.Intrinsics.Vector512.Create(System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.SByte> System.Runtime.Intrinsics.Vector512.CreateScalarUnsafe(System.SByte) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.SByte> System.Runtime.Intrinsics.Vector512.Narrow(System.Runtime.Intrinsics.Vector512<System.Int16>,System.Runtime.Intrinsics.Vector512<System.Int16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.SByte> System.Runtime.Intrinsics.Vector512.ShiftLeft(System.Runtime.Intrinsics.Vector512<System.SByte>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.SByte> System.Runtime.Intrinsics.Vector512.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector512<System.SByte>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.SByte> System.Runtime.Intrinsics.Vector512.ShiftRightLogical(System.Runtime.Intrinsics.Vector512<System.SByte>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.SByte> System.Runtime.Intrinsics.Vector512.Shuffle(System.Runtime.Intrinsics.Vector512<System.SByte>,System.Runtime.Intrinsics.Vector512<System.SByte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Single> System.Runtime.Intrinsics.Vector512.AsSingle`1(System.Runtime.Intrinsics.Vector512<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Single> System.Runtime.Intrinsics.Vector512.AsSingle`1(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Single> System.Runtime.Intrinsics.Vector512.Ceiling(System.Runtime.Intrinsics.Vector512<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Single> System.Runtime.Intrinsics.Vector512.ConvertToSingle(System.Runtime.Intrinsics.Vector512<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Single> System.Runtime.Intrinsics.Vector512.ConvertToSingle(System.Runtime.Intrinsics.Vector512<System.UInt32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Single> System.Runtime.Intrinsics.Vector512.Create(System.Single) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Single> System.Runtime.Intrinsics.Vector512.Create(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Single> System.Runtime.Intrinsics.Vector512.CreateScalarUnsafe(System.Single) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Single> System.Runtime.Intrinsics.Vector512.Floor(System.Runtime.Intrinsics.Vector512<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Single> System.Runtime.Intrinsics.Vector512.Narrow(System.Runtime.Intrinsics.Vector512<System.Double>,System.Runtime.Intrinsics.Vector512<System.Double>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.Single> System.Runtime.Intrinsics.Vector512.Shuffle(System.Runtime.Intrinsics.Vector512<System.Single>,System.Runtime.Intrinsics.Vector512<System.Int32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.AsUInt16`1(System.Runtime.Intrinsics.Vector512<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.AsUInt16`1(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.Create(System.UInt16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.Create(System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.CreateScalarUnsafe(System.UInt16) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.Narrow(System.Runtime.Intrinsics.Vector512<System.UInt32>,System.Runtime.Intrinsics.Vector512<System.UInt32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.ShiftLeft(System.Runtime.Intrinsics.Vector512<System.UInt16>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.ShiftRightLogical(System.Runtime.Intrinsics.Vector512<System.UInt16>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.Shuffle(System.Runtime.Intrinsics.Vector512<System.UInt16>,System.Runtime.Intrinsics.Vector512<System.UInt16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.WidenLower(System.Runtime.Intrinsics.Vector512<System.Byte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.WidenUpper(System.Runtime.Intrinsics.Vector512<System.Byte>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.AsUInt32`1(System.Runtime.Intrinsics.Vector512<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.AsUInt32`1(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.ConvertToUInt32(System.Runtime.Intrinsics.Vector512<System.Single>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.Create(System.UInt32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.Create(System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.CreateScalarUnsafe(System.UInt32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.Narrow(System.Runtime.Intrinsics.Vector512<System.UInt64>,System.Runtime.Intrinsics.Vector512<System.UInt64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.ShiftLeft(System.Runtime.Intrinsics.Vector512<System.UInt32>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.ShiftRightLogical(System.Runtime.Intrinsics.Vector512<System.UInt32>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.Shuffle(System.Runtime.Intrinsics.Vector512<System.UInt32>,System.Runtime.Intrinsics.Vector512<System.UInt32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.WidenLower(System.Runtime.Intrinsics.Vector512<System.UInt16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.WidenUpper(System.Runtime.Intrinsics.Vector512<System.UInt16>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.AsUInt64`1(System.Runtime.Intrinsics.Vector512<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.AsUInt64`1(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.ConvertToUInt64(System.Runtime.Intrinsics.Vector512<System.Double>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.Create(System.UInt64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.Create(System.UInt64,System.UInt64,System.UInt64,System.UInt64,System.UInt64,System.UInt64,System.UInt64,System.UInt64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.CreateScalarUnsafe(System.UInt64) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.ShiftLeft(System.Runtime.Intrinsics.Vector512<System.UInt64>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.ShiftRightLogical(System.Runtime.Intrinsics.Vector512<System.UInt64>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.Shuffle(System.Runtime.Intrinsics.Vector512<System.UInt64>,System.Runtime.Intrinsics.Vector512<System.UInt64>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.WidenLower(System.Runtime.Intrinsics.Vector512<System.UInt32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.WidenUpper(System.Runtime.Intrinsics.Vector512<System.UInt32>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UIntPtr> System.Runtime.Intrinsics.Vector512.AsNUInt`1(System.Runtime.Intrinsics.Vector512<!0>) | [ExtensionAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UIntPtr> System.Runtime.Intrinsics.Vector512.AsNUInt`1(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UIntPtr> System.Runtime.Intrinsics.Vector512.Create(System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UIntPtr> System.Runtime.Intrinsics.Vector512.CreateScalarUnsafe(System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UIntPtr> System.Runtime.Intrinsics.Vector512.ShiftLeft(System.Runtime.Intrinsics.Vector512<System.UIntPtr>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512<System.UIntPtr> System.Runtime.Intrinsics.Vector512.ShiftRightLogical(System.Runtime.Intrinsics.Vector512<System.UIntPtr>,System.Int32) | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512DebugView`1 | [IsReadOnlyAttribute(...)] | -| System.Runtime.Intrinsics.Vector512`1 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.Vector512`1 | [IsReadOnlyAttribute(...)] | -| System.Runtime.Intrinsics.X86.Aes | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Aes.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Avx | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Avx2 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Avx2.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Avx512BW | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Avx512BW.VL | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Avx512BW.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Avx512CD | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Avx512CD.VL | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Avx512CD.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Avx512DQ | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Avx512DQ.VL | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Avx512DQ.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Avx512F | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Avx512F.VL | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Avx512F.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Avx512Vbmi | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Avx512Vbmi.VL | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Avx512Vbmi.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Avx.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.AvxVnni | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.AvxVnni.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Bmi1 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Bmi1.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Bmi2 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Bmi2.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.FloatComparisonMode | [ConstantExpectedAttribute(...)] | -| System.Runtime.Intrinsics.X86.Fma | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Fma.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Lzcnt | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Lzcnt.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Pclmulqdq | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Pclmulqdq.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Popcnt | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Popcnt.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Sse | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Sse2 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Sse2.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Sse3 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Sse3.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Sse41 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Sse41.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Sse42 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Sse42.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Sse.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Ssse3 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.Ssse3.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.X86Base | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.X86Base.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.X86Serialize | [IntrinsicAttribute(...)] | -| System.Runtime.Intrinsics.X86.X86Serialize.X64 | [IntrinsicAttribute(...)] | -| System.Runtime.Loader.AssemblyDependencyResolver.<>c__DisplayClass6_0 | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Loader.AssemblyLoadContext System.Runtime.Loader.AssemblyLoadContext.<get_All>d__85.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Runtime.Loader.AssemblyLoadContext.<get_All>d__85 | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Loader.AssemblyLoadContext.<get_Assemblies>d__55 | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Loader.AssemblyLoadContext.AssemblyLoad | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Loader.AssemblyLoadContext.AssemblyResolve | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Loader.AssemblyLoadContext.ResourceResolve | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Loader.AssemblyLoadContext.TypeResolve | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Loader.AssemblyLoadContext._resolving | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Loader.AssemblyLoadContext._resolvingUnmanagedDll | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Loader.AssemblyLoadContext._unloading | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Loader.LibraryNameVariation System.Runtime.Loader.LibraryNameVariation.<DetermineLibraryNameVariations>d__5.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Runtime.Loader.LibraryNameVariation.<DetermineLibraryNameVariations>d__5 | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Serialization.DeserializationToken | [IsReadOnlyAttribute(...)] | -| System.Runtime.Serialization.DeserializationTracker.<DeserializationInProgress>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Serialization.SafeSerializationEventArgs.<StreamingContext>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Serialization.SerializationEntry | [IsReadOnlyAttribute(...)] | -| System.Runtime.Serialization.SerializationInfo.<AsyncDeserializationInProgress>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Serialization.SerializationInfo.<IsAssemblyNameSetExplicit>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Serialization.SerializationInfo.<IsFullTypeNameSetExplicit>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Serialization.SerializationInfo.t_deserializationTracker | [ThreadStaticAttribute(...)] | -| System.Runtime.Serialization.StreamingContext | [IsReadOnlyAttribute(...)] | -| System.Runtime.Serialization.StreamingContext System.Runtime.Serialization.SafeSerializationEventArgs.get_StreamingContext() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Serialization.StreamingContextStates | [FlagsAttribute(...)] | -| System.Runtime.TargetedPatchingOptOutAttribute.<Reason>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Versioning.ComponentGuaranteesAttribute.<Guarantees>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Versioning.ComponentGuaranteesOptions | [FlagsAttribute(...)] | -| System.Runtime.Versioning.ComponentGuaranteesOptions System.Runtime.Versioning.ComponentGuaranteesAttribute.get_Guarantees() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Versioning.OSPlatformAttribute.<PlatformName>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Versioning.ObsoletedOSPlatformAttribute.<Message>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Versioning.ObsoletedOSPlatformAttribute.<Url>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Versioning.RequiresPreviewFeaturesAttribute.<Message>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Versioning.RequiresPreviewFeaturesAttribute.<Url>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Versioning.ResourceConsumptionAttribute.<ConsumptionScope>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Versioning.ResourceConsumptionAttribute.<ResourceScope>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Versioning.ResourceExposureAttribute.<ResourceExposureLevel>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Versioning.ResourceScope | [FlagsAttribute(...)] | -| System.Runtime.Versioning.ResourceScope System.Runtime.Versioning.ResourceConsumptionAttribute.get_ConsumptionScope() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Versioning.ResourceScope System.Runtime.Versioning.ResourceConsumptionAttribute.get_ResourceScope() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Versioning.ResourceScope System.Runtime.Versioning.ResourceExposureAttribute.get_ResourceExposureLevel() | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Versioning.SxSRequirements | [FlagsAttribute(...)] | -| System.Runtime.Versioning.UnsupportedOSPlatformAttribute.<Message>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.RuntimeArgumentHandle | [IsByRefLikeAttribute(...)] | -| System.RuntimeFieldHandle | [NonVersionableAttribute(...)] | -| System.RuntimeMethodHandle | [NonVersionableAttribute(...)] | -| System.RuntimeType System.Runtime.InteropServices.DynamicInterfaceCastableHelpers.GetInterfaceImplementation(System.Runtime.InteropServices.IDynamicInterfaceCastable,System.RuntimeType) | [StackTraceHiddenAttribute(...)] | -| System.RuntimeType System.RuntimeType.RuntimeTypeCache.<GetGenericTypeDefinition>g__CacheGenericDefinition\|50_0() | [CompilerGeneratedAttribute(...)] | -| System.RuntimeType.RuntimeTypeCache.Filter | [IsReadOnlyAttribute(...)] | -| System.RuntimeTypeHandle | [NonVersionableAttribute(...)] | -| System.RuntimeTypeHandle System.RuntimeType.get_TypeHandle() | [IntrinsicAttribute(...)] | -| System.RuntimeTypeHandle System.Type.get_TypeHandle() | [IntrinsicAttribute(...)] | -| System.SByte System.Math.Max(System.SByte,System.SByte) | [NonVersionableAttribute(...)] | -| System.SByte System.Math.Min(System.SByte,System.SByte) | [NonVersionableAttribute(...)] | -| System.SByte System.Runtime.InteropServices.NFloat.op_CheckedExplicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.SByte System.Runtime.InteropServices.NFloat.op_Explicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.SByte System.Threading.Volatile.Read(System.SByte) | [IntrinsicAttribute(...)] | -| System.SByte System.Threading.Volatile.Read(System.SByte) | [NonVersionableAttribute(...)] | -| System.Security.AllowPartiallyTrustedCallersAttribute.<PartialTrustVisibilityLevel>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.PartialTrustVisibilityLevel System.Security.AllowPartiallyTrustedCallersAttribute.get_PartialTrustVisibilityLevel() | [CompilerGeneratedAttribute(...)] | -| System.Security.Permissions.SecurityAction System.Security.Permissions.SecurityAttribute.get_Action() | [CompilerGeneratedAttribute(...)] | -| System.Security.Permissions.SecurityAttribute.<Action>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.Permissions.SecurityAttribute.<Unrestricted>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.Permissions.SecurityPermissionAttribute.<Assertion>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.Permissions.SecurityPermissionAttribute.<BindingRedirects>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.Permissions.SecurityPermissionAttribute.<ControlAppDomain>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.Permissions.SecurityPermissionAttribute.<ControlDomainPolicy>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.Permissions.SecurityPermissionAttribute.<ControlEvidence>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.Permissions.SecurityPermissionAttribute.<ControlPolicy>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.Permissions.SecurityPermissionAttribute.<ControlPrincipal>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.Permissions.SecurityPermissionAttribute.<ControlThread>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.Permissions.SecurityPermissionAttribute.<Execution>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.Permissions.SecurityPermissionAttribute.<Flags>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.Permissions.SecurityPermissionAttribute.<Infrastructure>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.Permissions.SecurityPermissionAttribute.<RemotingConfiguration>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.Permissions.SecurityPermissionAttribute.<SerializationFormatter>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.Permissions.SecurityPermissionAttribute.<SkipVerification>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.Permissions.SecurityPermissionAttribute.<UnmanagedCode>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.Permissions.SecurityPermissionFlag | [FlagsAttribute(...)] | -| System.Security.Permissions.SecurityPermissionFlag System.Security.Permissions.SecurityPermissionAttribute.get_Flags() | [CompilerGeneratedAttribute(...)] | -| System.Security.SecurityCriticalAttribute.<Scope>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.SecurityCriticalScope System.Security.SecurityCriticalAttribute.get_Scope() | [CompilerGeneratedAttribute(...)] | -| System.Security.SecurityElement.<>c | [CompilerGeneratedAttribute(...)] | -| System.Security.SecurityException.<Demanded>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.SecurityException.<DenySetInstance>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.SecurityException.<FailedAssemblyInfo>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.SecurityException.<GrantedSet>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.SecurityException.<Method>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.SecurityException.<PermissionState>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.SecurityException.<PermissionType>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.SecurityException.<PermitOnlySetInstance>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.SecurityException.<RefusedSet>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.SecurityException.<Url>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.SecurityRuleSet System.Security.SecurityRulesAttribute.get_RuleSet() | [CompilerGeneratedAttribute(...)] | -| System.Security.SecurityRulesAttribute.<RuleSet>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Security.SecurityRulesAttribute.<SkipVerificationInFullTrust>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Signature System.Reflection.Emit.DynamicMethod.<get_Signature>g__LazyCreateSignature\|23_0() | [CompilerGeneratedAttribute(...)] | -| System.Signature System.Reflection.RuntimeConstructorInfo.<get_Signature>g__LazyCreateSignature\|21_0() | [CompilerGeneratedAttribute(...)] | -| System.Signature System.Reflection.RuntimeMethodInfo.<get_Signature>g__LazyCreateSignature\|25_0() | [CompilerGeneratedAttribute(...)] | -| System.Single System.BitConverter.Int32BitsToSingle(System.Int32) | [IntrinsicAttribute(...)] | -| System.Single System.BitConverter.UInt32BitsToSingle(System.UInt32) | [IntrinsicAttribute(...)] | -| System.Single System.Diagnostics.Tracing.CounterPayload.get_IntervalSec() | [CompilerGeneratedAttribute(...)] | -| System.Single System.Diagnostics.Tracing.IncrementingCounterPayload.get_IntervalSec() | [CompilerGeneratedAttribute(...)] | -| System.Single System.Math.Abs(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Math.Max(System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Math.Min(System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.<CopySign>g__SoftwareFallback\|42_0(System.Single,System.Single) | [CompilerGeneratedAttribute(...)] | -| System.Single System.MathF.Abs(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Acos(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Acosh(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Asin(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Asinh(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Atan2(System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Atan(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Atanh(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Cbrt(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Ceiling(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Cos(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Cosh(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Exp(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Floor(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.FusedMultiplyAdd(System.Single,System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Log2(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Log10(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Log(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Max(System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.MaxMagnitude(System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Min(System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.MinMagnitude(System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Pow(System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Round(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Sin(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Sinh(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Sqrt(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Tan(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Tanh(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.MathF.Truncate(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Matrix3x2.GetDeterminant() | [IsReadOnlyAttribute(...)] | -| System.Single System.Numerics.Matrix3x2.Impl.GetDeterminant() | [IsReadOnlyAttribute(...)] | -| System.Single System.Numerics.Matrix3x2.Impl.get_Item(System.Int32,System.Int32) | [IsReadOnlyAttribute(...)] | -| System.Single System.Numerics.Matrix3x2.get_Item(System.Int32,System.Int32) | [IsReadOnlyAttribute(...)] | -| System.Single System.Numerics.Matrix4x4.GetDeterminant() | [IsReadOnlyAttribute(...)] | -| System.Single System.Numerics.Matrix4x4.Impl.GetDeterminant() | [IsReadOnlyAttribute(...)] | -| System.Single System.Numerics.Matrix4x4.Impl.get_Item(System.Int32,System.Int32) | [IsReadOnlyAttribute(...)] | -| System.Single System.Numerics.Matrix4x4.get_Item(System.Int32,System.Int32) | [IsReadOnlyAttribute(...)] | -| System.Single System.Numerics.Plane.Dot(System.Numerics.Plane,System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Quaternion.Dot(System.Numerics.Quaternion,System.Numerics.Quaternion) | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Quaternion.Length() | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Quaternion.Length() | [IsReadOnlyAttribute(...)] | -| System.Single System.Numerics.Quaternion.LengthSquared() | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Quaternion.LengthSquared() | [IsReadOnlyAttribute(...)] | -| System.Single System.Numerics.Quaternion.get_Item(System.Int32) | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Quaternion.get_Item(System.Int32) | [IsReadOnlyAttribute(...)] | -| System.Single System.Numerics.Vector2.Distance(System.Numerics.Vector2,System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Vector2.DistanceSquared(System.Numerics.Vector2,System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Vector2.Dot(System.Numerics.Vector2,System.Numerics.Vector2) | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Vector2.Length() | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Vector2.Length() | [IsReadOnlyAttribute(...)] | -| System.Single System.Numerics.Vector2.LengthSquared() | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Vector2.LengthSquared() | [IsReadOnlyAttribute(...)] | -| System.Single System.Numerics.Vector2.get_Item(System.Int32) | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Vector2.get_Item(System.Int32) | [IsReadOnlyAttribute(...)] | -| System.Single System.Numerics.Vector3.Distance(System.Numerics.Vector3,System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Vector3.DistanceSquared(System.Numerics.Vector3,System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Vector3.Dot(System.Numerics.Vector3,System.Numerics.Vector3) | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Vector3.Length() | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Vector3.Length() | [IsReadOnlyAttribute(...)] | -| System.Single System.Numerics.Vector3.LengthSquared() | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Vector3.LengthSquared() | [IsReadOnlyAttribute(...)] | -| System.Single System.Numerics.Vector3.get_Item(System.Int32) | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Vector3.get_Item(System.Int32) | [IsReadOnlyAttribute(...)] | -| System.Single System.Numerics.Vector4.Distance(System.Numerics.Vector4,System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Vector4.DistanceSquared(System.Numerics.Vector4,System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Vector4.Dot(System.Numerics.Vector4,System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Vector4.Length() | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Vector4.Length() | [IsReadOnlyAttribute(...)] | -| System.Single System.Numerics.Vector4.LengthSquared() | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Vector4.LengthSquared() | [IsReadOnlyAttribute(...)] | -| System.Single System.Numerics.Vector4.get_Item(System.Int32) | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Vector4.get_Item(System.Int32) | [IsReadOnlyAttribute(...)] | -| System.Single System.Numerics.Vector.GetElement(System.Numerics.Quaternion,System.Int32) | [ExtensionAttribute(...)] | -| System.Single System.Numerics.Vector.GetElement(System.Numerics.Quaternion,System.Int32) | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Vector.GetElement(System.Numerics.Vector2,System.Int32) | [ExtensionAttribute(...)] | -| System.Single System.Numerics.Vector.GetElement(System.Numerics.Vector2,System.Int32) | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Vector.GetElement(System.Numerics.Vector3,System.Int32) | [ExtensionAttribute(...)] | -| System.Single System.Numerics.Vector.GetElement(System.Numerics.Vector3,System.Int32) | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Vector.GetElement(System.Numerics.Vector4,System.Int32) | [ExtensionAttribute(...)] | -| System.Single System.Numerics.Vector.GetElement(System.Numerics.Vector4,System.Int32) | [IntrinsicAttribute(...)] | -| System.Single System.Numerics.Vector.GetElementUnsafe(System.Numerics.Quaternion,System.Int32) | [ExtensionAttribute(...)] | -| System.Single System.Numerics.Vector.GetElementUnsafe(System.Numerics.Vector2,System.Int32) | [ExtensionAttribute(...)] | -| System.Single System.Numerics.Vector.GetElementUnsafe(System.Numerics.Vector3,System.Int32) | [ExtensionAttribute(...)] | -| System.Single System.Numerics.Vector.GetElementUnsafe(System.Numerics.Vector4,System.Int32) | [ExtensionAttribute(...)] | -| System.Single System.Runtime.InteropServices.NFloat.op_Explicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.Single System.Single.<RootN>g__NegativeN\|219_1(System.Single,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Single System.Single.<RootN>g__PositiveN\|219_0(System.Single,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Single System.Single.Abs(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Acos(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Acosh(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Asin(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Asinh(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Atan2(System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Atan(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Atanh(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Cbrt(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Ceiling(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Cos(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Cosh(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Exp(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Floor(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.FusedMultiplyAdd(System.Single,System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Log2(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Log10(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Log(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Max(System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.MaxMagnitude(System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.MaxMagnitudeNumber(System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.MaxNumber(System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Min(System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.MinMagnitude(System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.MinMagnitudeNumber(System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.MinNumber(System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Pow(System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Round(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Sin(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Sinh(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Sqrt(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Tan(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Tanh(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Single.Truncate(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Threading.Volatile.Read(System.Single) | [IntrinsicAttribute(...)] | -| System.Single System.Threading.Volatile.Read(System.Single) | [NonVersionableAttribute(...)] | -| System.Span<!0> System.MemoryExtensions.AsSpan`1(!0[]) | [ExtensionAttribute(...)] | -| System.Span<!0> System.MemoryExtensions.AsSpan`1(!0[],System.Index) | [ExtensionAttribute(...)] | -| System.Span<!0> System.MemoryExtensions.AsSpan`1(!0[],System.Int32) | [ExtensionAttribute(...)] | -| System.Span<!0> System.MemoryExtensions.AsSpan`1(!0[],System.Int32,System.Int32) | [ExtensionAttribute(...)] | -| System.Span<!0> System.MemoryExtensions.AsSpan`1(!0[],System.Range) | [ExtensionAttribute(...)] | -| System.Span<!0> System.MemoryExtensions.AsSpan`1(System.ArraySegment<!0>) | [ExtensionAttribute(...)] | -| System.Span<!0> System.MemoryExtensions.AsSpan`1(System.ArraySegment<!0>,System.Index) | [ExtensionAttribute(...)] | -| System.Span<!0> System.MemoryExtensions.AsSpan`1(System.ArraySegment<!0>,System.Int32) | [ExtensionAttribute(...)] | -| System.Span<!0> System.MemoryExtensions.AsSpan`1(System.ArraySegment<!0>,System.Int32,System.Int32) | [ExtensionAttribute(...)] | -| System.Span<!0> System.MemoryExtensions.AsSpan`1(System.ArraySegment<!0>,System.Range) | [ExtensionAttribute(...)] | -| System.Span<!0> System.MemoryExtensions.TrimEnd`1(System.Span<!0>,!0) | [ExtensionAttribute(...)] | -| System.Span<!0> System.MemoryExtensions.TrimEnd`1(System.Span<!0>,System.ReadOnlySpan<!0>) | [ExtensionAttribute(...)] | -| System.Span<!0> System.MemoryExtensions.TrimStart`1(System.Span<!0>,!0) | [ExtensionAttribute(...)] | -| System.Span<!0> System.MemoryExtensions.TrimStart`1(System.Span<!0>,System.ReadOnlySpan<!0>) | [ExtensionAttribute(...)] | -| System.Span<!0> System.MemoryExtensions.Trim`1(System.Span<!0>,!0) | [ExtensionAttribute(...)] | -| System.Span<!0> System.MemoryExtensions.Trim`1(System.Span<!0>,System.ReadOnlySpan<!0>) | [ExtensionAttribute(...)] | -| System.Span<!0> System.Reflection.MethodBase.ArgumentData`1.AsSpan(System.Int32) | [UnscopedRefAttribute(...)] | -| System.Span<System.Char> System.MemoryExtensions.<Trim>g__TrimFallback\|228_0(System.Span<System.Char>) | [CompilerGeneratedAttribute(...)] | -| System.Span<System.Char> System.MemoryExtensions.Trim(System.Span<System.Char>) | [ExtensionAttribute(...)] | -| System.Span<System.Char> System.MemoryExtensions.TrimEnd(System.Span<System.Char>) | [ExtensionAttribute(...)] | -| System.Span<System.Char> System.MemoryExtensions.TrimStart(System.Span<System.Char>) | [ExtensionAttribute(...)] | -| System.SpanHelpers | [ExtensionAttribute(...)] | -| System.SpanHelpers.ComparerComparable`2 | [IsReadOnlyAttribute(...)] | -| System.SpanHelpers.DontNegate`1 | [IsReadOnlyAttribute(...)] | -| System.SpanHelpers.Negate`1 | [IsReadOnlyAttribute(...)] | -| System.Span`1 | [IsByRefLikeAttribute(...)] | -| System.Span`1 | [IsReadOnlyAttribute(...)] | -| System.Span`1 | [NonVersionableAttribute(...)] | -| System.Span`1.Enumerator | [IsByRefLikeAttribute(...)] | -| System.String System.ApplicationId.get_Culture() | [CompilerGeneratedAttribute(...)] | -| System.String System.ApplicationId.get_Name() | [CompilerGeneratedAttribute(...)] | -| System.String System.ApplicationId.get_ProcessorArchitecture() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.get_AssemblyName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.get_Condition() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.get_MemberSignature() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.get_TypeName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute.get_Justification() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.ExperimentalAttribute.get_DiagnosticId() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.ExperimentalAttribute.get_UrlFormat() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute.get_ParameterName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.RequiresAssemblyFilesAttribute.get_Message() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.RequiresAssemblyFilesAttribute.get_Url() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute.get_Message() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute.get_Url() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute.get_Message() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute.get_Url() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.StringSyntaxAttribute.get_Syntax() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.SuppressMessageAttribute.get_Category() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.SuppressMessageAttribute.get_CheckId() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.SuppressMessageAttribute.get_Justification() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.SuppressMessageAttribute.get_MessageId() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.SuppressMessageAttribute.get_Scope() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.SuppressMessageAttribute.get_Target() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.get_Category() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.get_CheckId() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.get_Justification() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.get_MessageId() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.get_Scope() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.get_Target() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.ConditionalAttribute.get_ConditionString() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.DebuggerDisplayAttribute.get_Name() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.DebuggerDisplayAttribute.get_TargetTypeName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.DebuggerDisplayAttribute.get_Type() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.DebuggerDisplayAttribute.get_Value() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.DebuggerTypeProxyAttribute.get_ProxyTypeName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.DebuggerTypeProxyAttribute.get_TargetTypeName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.DebuggerVisualizerAttribute.get_Description() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.DebuggerVisualizerAttribute.get_TargetTypeName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.DebuggerVisualizerAttribute.get_VisualizerObjectSourceTypeName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.DebuggerVisualizerAttribute.get_VisualizerTypeName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.Tracing.CounterPayload.get_CounterType() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.Tracing.CounterPayload.get_DisplayName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.Tracing.CounterPayload.get_DisplayUnits() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.Tracing.CounterPayload.get_Metadata() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.Tracing.CounterPayload.get_Name() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.Tracing.CounterPayload.get_Series() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.Tracing.DiagnosticCounter.get_Name() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.Tracing.EventAttribute.get_Message() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.Tracing.EventDataAttribute.get_Name() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.Tracing.EventFieldAttribute.get_Name() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.Tracing.EventSourceAttribute.get_Guid() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.Tracing.EventSourceAttribute.get_LocalizationResources() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.Tracing.EventSourceAttribute.get_Name() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.Tracing.IncrementingCounterPayload.get_CounterType() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.Tracing.IncrementingCounterPayload.get_DisplayName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.Tracing.IncrementingCounterPayload.get_DisplayRateTimeScale() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.Tracing.IncrementingCounterPayload.get_DisplayUnits() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.Tracing.IncrementingCounterPayload.get_Metadata() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.Tracing.IncrementingCounterPayload.get_Name() | [CompilerGeneratedAttribute(...)] | -| System.String System.Diagnostics.Tracing.IncrementingCounterPayload.get_Series() | [CompilerGeneratedAttribute(...)] | -| System.String System.Enum.<ToString>g__HandleRareTypes\|55_0(System.RuntimeType,System.Byte) | [CompilerGeneratedAttribute(...)] | -| System.String System.Enum.<ToString>g__HandleRareTypes\|56_0(System.RuntimeType,System.Char,System.Byte) | [CompilerGeneratedAttribute(...)] | -| System.String System.IO.File.<IterateFileLinesAsync>d__110.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.String System.IO.FileLoadException.get_FileName() | [CompilerGeneratedAttribute(...)] | -| System.String System.IO.FileLoadException.get_FusionLog() | [CompilerGeneratedAttribute(...)] | -| System.String System.IO.FileNotFoundException.get_FileName() | [CompilerGeneratedAttribute(...)] | -| System.String System.IO.FileNotFoundException.get_FusionLog() | [CompilerGeneratedAttribute(...)] | -| System.String System.IO.Win32Marshal.<GetExceptionForWin32Error>g__GetPInvokeErrorMessage\|1_0(System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.String System.Number.<FormatInt32>g__FormatInt32Slow\|41_0(System.Int32,System.Int32,System.String,System.IFormatProvider) | [CompilerGeneratedAttribute(...)] | -| System.String System.Number.<FormatInt64>g__FormatInt64Slow\|45_0(System.Int64,System.String,System.IFormatProvider) | [CompilerGeneratedAttribute(...)] | -| System.String System.Number.<FormatInt128>g__FormatInt128Slow\|49_0(System.Int128,System.String,System.IFormatProvider) | [CompilerGeneratedAttribute(...)] | -| System.String System.Number.<FormatUInt32>g__FormatUInt32Slow\|43_0(System.UInt32,System.String,System.IFormatProvider) | [CompilerGeneratedAttribute(...)] | -| System.String System.Number.<FormatUInt64>g__FormatUInt64Slow\|47_0(System.UInt64,System.String,System.IFormatProvider) | [CompilerGeneratedAttribute(...)] | -| System.String System.Number.<FormatUInt128>g__FormatUInt128Slow\|51_0(System.UInt128,System.String,System.IFormatProvider) | [CompilerGeneratedAttribute(...)] | -| System.String System.Number.<UInt32ToDecStrForKnownSmallNumber>g__CreateAndCacheString\|70_0(System.UInt32) | [CompilerGeneratedAttribute(...)] | -| System.String System.Numerics.Matrix3x2.ToString() | [IsReadOnlyAttribute(...)] | -| System.String System.Numerics.Matrix4x4.ToString() | [IsReadOnlyAttribute(...)] | -| System.String System.Numerics.Plane.ToString() | [IsReadOnlyAttribute(...)] | -| System.String System.Numerics.Quaternion.ToString() | [IsReadOnlyAttribute(...)] | -| System.String System.Numerics.Vector2.ToString() | [IsReadOnlyAttribute(...)] | -| System.String System.Numerics.Vector2.ToString(System.String) | [IsReadOnlyAttribute(...)] | -| System.String System.Numerics.Vector2.ToString(System.String,System.IFormatProvider) | [IsReadOnlyAttribute(...)] | -| System.String System.Numerics.Vector3.ToString() | [IsReadOnlyAttribute(...)] | -| System.String System.Numerics.Vector3.ToString(System.String) | [IsReadOnlyAttribute(...)] | -| System.String System.Numerics.Vector3.ToString(System.String,System.IFormatProvider) | [IsReadOnlyAttribute(...)] | -| System.String System.Numerics.Vector4.ToString() | [IsReadOnlyAttribute(...)] | -| System.String System.Numerics.Vector4.ToString(System.String) | [IsReadOnlyAttribute(...)] | -| System.String System.Numerics.Vector4.ToString(System.String,System.IFormatProvider) | [IsReadOnlyAttribute(...)] | -| System.String System.ObsoleteAttribute.get_DiagnosticId() | [CompilerGeneratedAttribute(...)] | -| System.String System.ObsoleteAttribute.get_Message() | [CompilerGeneratedAttribute(...)] | -| System.String System.ObsoleteAttribute.get_UrlFormat() | [CompilerGeneratedAttribute(...)] | -| System.String System.Reflection.AssemblyCompanyAttribute.get_Company() | [CompilerGeneratedAttribute(...)] | -| System.String System.Reflection.AssemblyConfigurationAttribute.get_Configuration() | [CompilerGeneratedAttribute(...)] | -| System.String System.Reflection.AssemblyCopyrightAttribute.get_Copyright() | [CompilerGeneratedAttribute(...)] | -| System.String System.Reflection.AssemblyCultureAttribute.get_Culture() | [CompilerGeneratedAttribute(...)] | -| System.String System.Reflection.AssemblyDefaultAliasAttribute.get_DefaultAlias() | [CompilerGeneratedAttribute(...)] | -| System.String System.Reflection.AssemblyDescriptionAttribute.get_Description() | [CompilerGeneratedAttribute(...)] | -| System.String System.Reflection.AssemblyFileVersionAttribute.get_Version() | [CompilerGeneratedAttribute(...)] | -| System.String System.Reflection.AssemblyInformationalVersionAttribute.get_InformationalVersion() | [CompilerGeneratedAttribute(...)] | -| System.String System.Reflection.AssemblyKeyFileAttribute.get_KeyFile() | [CompilerGeneratedAttribute(...)] | -| System.String System.Reflection.AssemblyKeyNameAttribute.get_KeyName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Reflection.AssemblyMetadataAttribute.get_Key() | [CompilerGeneratedAttribute(...)] | -| System.String System.Reflection.AssemblyMetadataAttribute.get_Value() | [CompilerGeneratedAttribute(...)] | -| System.String System.Reflection.AssemblyProductAttribute.get_Product() | [CompilerGeneratedAttribute(...)] | -| System.String System.Reflection.AssemblySignatureKeyAttribute.get_Countersignature() | [CompilerGeneratedAttribute(...)] | -| System.String System.Reflection.AssemblySignatureKeyAttribute.get_PublicKey() | [CompilerGeneratedAttribute(...)] | -| System.String System.Reflection.AssemblyTitleAttribute.get_Title() | [CompilerGeneratedAttribute(...)] | -| System.String System.Reflection.AssemblyTrademarkAttribute.get_Trademark() | [CompilerGeneratedAttribute(...)] | -| System.String System.Reflection.AssemblyVersionAttribute.get_Version() | [CompilerGeneratedAttribute(...)] | -| System.String System.Reflection.DefaultMemberAttribute.get_MemberName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Reflection.ManifestResourceInfo.get_FileName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Reflection.ObfuscationAttribute.get_Feature() | [CompilerGeneratedAttribute(...)] | -| System.String System.Reflection.TypeNameParser.<ParseNamedTypeName>g__ApplyLeadingDotCompatQuirk\|25_0(System.String) | [CompilerGeneratedAttribute(...)] | -| System.String System.ResolveEventArgs.get_Name() | [CompilerGeneratedAttribute(...)] | -| System.String System.Resources.NeutralResourcesLanguageAttribute.get_CultureName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Resources.SatelliteContractVersionAttribute.get_Version() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.AssemblyTargetedPatchBandAttribute.get_TargetedPatchBand() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.CompilerServices.AccessedThroughPropertyAttribute.get_PropertyName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.CompilerServices.CallerArgumentExpressionAttribute.get_ParameterName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.CompilerServices.CollectionBuilderAttribute.get_MethodName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute.get_FeatureName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.CompilerServices.ContractHelper.RaiseContractFailedEvent(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.Exception) | [DebuggerNonUserCodeAttribute(...)] | -| System.String System.Runtime.CompilerServices.DependencyAttribute.get_DependentAssembly() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.CompilerServices.InternalsVisibleToAttribute.get_AssemblyName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.CompilerServices.ReferenceAssemblyAttribute.get_Description() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.CompilerServices.TypeForwardedFromAttribute.get_AssemblyFullName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.CompilerServices.UnsafeAccessorAttribute.get_Name() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.InteropServices.BStrWrapper.get_WrappedObject() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.InteropServices.ComSourceInterfacesAttribute.get_Value() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.InteropServices.DllImportAttribute.get_Value() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.InteropServices.GuidAttribute.get_Value() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.InteropServices.LibraryImportAttribute.get_EntryPoint() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.InteropServices.LibraryImportAttribute.get_LibraryName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.InteropServices.Marshalling.MarshalUsingAttribute.get_CountElementName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.InteropServices.OSPlatform.get_Name() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.InteropServices.ProgIdAttribute.get_Value() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.InteropServices.TypeIdentifierAttribute.get_Identifier() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.InteropServices.TypeIdentifierAttribute.get_Scope() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.TargetedPatchingOptOutAttribute.get_Reason() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.Versioning.OSPlatformAttribute.get_PlatformName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.Versioning.ObsoletedOSPlatformAttribute.get_Message() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.Versioning.ObsoletedOSPlatformAttribute.get_Url() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.Versioning.RequiresPreviewFeaturesAttribute.get_Message() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.Versioning.RequiresPreviewFeaturesAttribute.get_Url() | [CompilerGeneratedAttribute(...)] | -| System.String System.Runtime.Versioning.UnsupportedOSPlatformAttribute.get_Message() | [CompilerGeneratedAttribute(...)] | -| System.String System.Security.SecurityException.get_GrantedSet() | [CompilerGeneratedAttribute(...)] | -| System.String System.Security.SecurityException.get_PermissionState() | [CompilerGeneratedAttribute(...)] | -| System.String System.Security.SecurityException.get_RefusedSet() | [CompilerGeneratedAttribute(...)] | -| System.String System.Security.SecurityException.get_Url() | [CompilerGeneratedAttribute(...)] | -| System.String System.StringNormalizationExtensions.Normalize(System.String) | [ExtensionAttribute(...)] | -| System.String System.StringNormalizationExtensions.Normalize(System.String,System.Text.NormalizationForm) | [ExtensionAttribute(...)] | -| System.String System.Text.CodePageDataItem.get_BodyName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Text.CodePageDataItem.get_DisplayName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Text.CodePageDataItem.get_HeaderName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Text.CodePageDataItem.get_WebName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Text.CompositeFormat.get_Format() | [CompilerGeneratedAttribute(...)] | -| System.String System.Text.EncodingInfo.get_DisplayName() | [CompilerGeneratedAttribute(...)] | -| System.String System.Text.EncodingInfo.get_Name() | [CompilerGeneratedAttribute(...)] | -| System.StringComparer System.Globalization.GlobalizationExtensions.GetStringComparer(System.Globalization.CompareInfo,System.Globalization.CompareOptions) | [ExtensionAttribute(...)] | -| System.StringNormalizationExtensions | [ExtensionAttribute(...)] | -| System.StringSplitOptions | [FlagsAttribute(...)] | -| System.String[] System.Diagnostics.CodeAnalysis.MemberNotNullAttribute.get_Members() | [CompilerGeneratedAttribute(...)] | -| System.String[] System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute.get_Members() | [CompilerGeneratedAttribute(...)] | -| System.String[] System.Runtime.CompilerServices.InterpolatedStringHandlerArgumentAttribute.get_Arguments() | [CompilerGeneratedAttribute(...)] | -| System.StubHelpers.StubHelpers.s_pendingExceptionObject | [ThreadStaticAttribute(...)] | -| System.TermInfo.ParameterizedStrings.FormatParam | [IsReadOnlyAttribute(...)] | -| System.TermInfo.ParameterizedStrings.FormatParam[] | [ParamArrayAttribute(...)] | -| System.TermInfo.ParameterizedStrings.t_cachedOneElementArgsArray | [ThreadStaticAttribute(...)] | -| System.TermInfo.ParameterizedStrings.t_cachedStack | [ThreadStaticAttribute(...)] | -| System.TermInfo.ParameterizedStrings.t_cachedTwoElementArgsArray | [ThreadStaticAttribute(...)] | -| System.Text.Ascii.PlainLoader`1 | [IsReadOnlyAttribute(...)] | -| System.Text.Ascii.WideningLoader | [IsReadOnlyAttribute(...)] | -| System.Text.CodePageDataItem.<BodyName>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Text.CodePageDataItem.<DisplayName>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Text.CodePageDataItem.<Flags>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Text.CodePageDataItem.<HeaderName>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Text.CodePageDataItem.<UIFamilyCodePage>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Text.CodePageDataItem.<WebName>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Text.CompositeFormat.<Format>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Text.Encoding System.Text.EncodingExtensions.RemovePreamble(System.Text.Encoding) | [ExtensionAttribute(...)] | -| System.Text.EncodingExtensions | [ExtensionAttribute(...)] | -| System.Text.EncodingInfo.<CodePage>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Text.EncodingInfo.<DisplayName>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Text.EncodingInfo.<Name>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Text.EncodingInfo.<Provider>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Text.EncodingProvider System.Text.EncodingInfo.get_Provider() | [CompilerGeneratedAttribute(...)] | -| System.Text.Rune | [IsReadOnlyAttribute(...)] | -| System.Text.SpanLineEnumerator | [IsByRefLikeAttribute(...)] | -| System.Text.SpanLineEnumerator System.MemoryExtensions.EnumerateLines(System.ReadOnlySpan<System.Char>) | [ExtensionAttribute(...)] | -| System.Text.SpanLineEnumerator System.MemoryExtensions.EnumerateLines(System.Span<System.Char>) | [ExtensionAttribute(...)] | -| System.Text.SpanRuneEnumerator | [IsByRefLikeAttribute(...)] | -| System.Text.SpanRuneEnumerator System.MemoryExtensions.EnumerateRunes(System.ReadOnlySpan<System.Char>) | [ExtensionAttribute(...)] | -| System.Text.SpanRuneEnumerator System.MemoryExtensions.EnumerateRunes(System.Span<System.Char>) | [ExtensionAttribute(...)] | -| System.Text.StringBuilder | [NotNullAttribute(...)] | -| System.Text.StringBuilder.AppendInterpolatedStringHandler | [InterpolatedStringHandlerAttribute(...)] | -| System.Text.StringBuilderCache.t_cachedInstance | [ThreadStaticAttribute(...)] | -| System.Text.TranscodingStream.<<DisposeAsync>g__DisposeAsyncCore\|30_0>d | [CompilerGeneratedAttribute(...)] | -| System.Text.TranscodingStream.<<ReadAsync>g__ReadAsyncCore\|41_0>d | [CompilerGeneratedAttribute(...)] | -| System.Text.TranscodingStream.<<WriteAsync>g__WriteAsyncCore\|50_0>d | [CompilerGeneratedAttribute(...)] | -| System.Text.TrimType | [FlagsAttribute(...)] | -| System.Text.Unicode.GraphemeClusterBreakType System.Text.Unicode.TextSegmentationUtility.Processor`1.get_CurrentType() | [CompilerGeneratedAttribute(...)] | -| System.Text.Unicode.GraphemeClusterBreakType System.Text.Unicode.TextSegmentationUtility.Processor`1.get_CurrentType() | [IsReadOnlyAttribute(...)] | -| System.Text.Unicode.TextSegmentationUtility.Processor`1 | [IsByRefLikeAttribute(...)] | -| System.Text.Unicode.TextSegmentationUtility.Processor`1.<CurrentCodeUnitOffset>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Text.Unicode.TextSegmentationUtility.Processor`1.<CurrentType>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler | [InterpolatedStringHandlerAttribute(...)] | -| System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler | [IsByRefLikeAttribute(...)] | -| System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler | [ScopedRefAttribute(...)] | -| System.Text.ValueStringBuilder | [IsByRefLikeAttribute(...)] | -| System.Text.ValueUtf8Converter | [IsByRefLikeAttribute(...)] | -| System.Threading.AsyncLocal<System.Boolean> System.Runtime.Serialization.SerializationInfo.get_AsyncDeserializationInProgress() | [CompilerGeneratedAttribute(...)] | -| System.Threading.AsyncLocalValueChangedArgs`1 | [IsReadOnlyAttribute(...)] | -| System.Threading.AsyncLocalValueChangedArgs`1.<CurrentValue>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Threading.AsyncLocalValueChangedArgs`1.<PreviousValue>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Threading.AsyncLocalValueChangedArgs`1.<ThreadContextChanged>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Threading.AsyncLocalValueMap.<Empty>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Threading.CancellationToken | [EnumeratorCancellationAttribute(...)] | -| System.Threading.CancellationToken | [IsReadOnlyAttribute(...)] | -| System.Threading.CancellationToken.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.CancellationTokenRegistration | [IsReadOnlyAttribute(...)] | -| System.Threading.CancellationTokenSource.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.CancellationTokenSource.CallbackNode.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.CancellationTokenSource.LinkedNCancellationTokenSource.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.CancellationTokenSource.Registrations.<WaitForCallbackToCompleteAsync>d__12 | [CompilerGeneratedAttribute(...)] | -| System.Threading.CancellationToken[] | [ParamArrayAttribute(...)] | -| System.Threading.EventWaitHandle | [NotNullAttribute(...)] | -| System.Threading.IAsyncLocalValueMap System.Threading.AsyncLocalValueMap.get_Empty() | [CompilerGeneratedAttribute(...)] | -| System.Threading.PeriodicTimer.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.PeriodicTimer.State.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.PortableThreadPool.GateThread.<>O | [CompilerGeneratedAttribute(...)] | -| System.Threading.PortableThreadPool.HillClimbing.Complex | [IsReadOnlyAttribute(...)] | -| System.Threading.PortableThreadPool.HillClimbing.Complex.<Imaginary>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Threading.PortableThreadPool.HillClimbing.Complex.<Real>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Threading.PortableThreadPool.WaitThread System.Threading.PortableThreadPool.WaitThreadNode.get_Thread() | [CompilerGeneratedAttribute(...)] | -| System.Threading.PortableThreadPool.WaitThread System.Threading.RegisteredWaitHandle.get_WaitThread() | [CompilerGeneratedAttribute(...)] | -| System.Threading.PortableThreadPool.WaitThreadNode System.Threading.PortableThreadPool.WaitThreadNode.get_Next() | [CompilerGeneratedAttribute(...)] | -| System.Threading.PortableThreadPool.WaitThreadNode.<Next>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Threading.PortableThreadPool.WaitThreadNode.<Thread>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Threading.PortableThreadPool.WorkerThread.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.PortableThreadPool.t_completionCountObject | [ThreadStaticAttribute(...)] | -| System.Threading.ProcessorIdCache.t_currentProcessorIdCache | [ThreadStaticAttribute(...)] | -| System.Threading.QueueUserWorkItemCallback.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.ReaderWriterLockSlim.WaiterStates | [FlagsAttribute(...)] | -| System.Threading.ReaderWriterLockSlim.t_rwc | [ThreadStaticAttribute(...)] | -| System.Threading.RegisteredWaitHandle.<TimeoutTimeMs>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Threading.RegisteredWaitHandle.<UserUnregisterWaitHandle>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Threading.RegisteredWaitHandle.<UserUnregisterWaitHandleValue>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Threading.RegisteredWaitHandle.<WaitThread>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Threading.SemaphoreSlim.<WaitUntilCountOrTimeoutAsync>d__31 | [CompilerGeneratedAttribute(...)] | -| System.Threading.SynchronizationContext.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.AwaitTaskContinuation.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.ConcurrentExclusiveSchedulerPair.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.ConcurrentExclusiveSchedulerPair.CompletionState System.Threading.Tasks.ConcurrentExclusiveSchedulerPair.<EnsureCompletionStateInitialized>g__InitializeCompletionState\|23_0() | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.ConcurrentExclusiveSchedulerPair.ConcurrentExclusiveTaskScheduler.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.ConcurrentExclusiveSchedulerPair.ProcessingMode | [FlagsAttribute(...)] | -| System.Threading.Tasks.ConfigureAwaitOptions | [FlagsAttribute(...)] | -| System.Threading.Tasks.InternalTaskOptions | [FlagsAttribute(...)] | -| System.Threading.Tasks.Sources.ValueTaskSourceOnCompletedFlags | [FlagsAttribute(...)] | -| System.Threading.Tasks.Sources.ValueTaskSourceStatus System.IO.File.<IterateFileLinesAsync>d__110.GetStatus(System.Int16) | [DebuggerHiddenAttribute(...)] | -| System.Threading.Tasks.SynchronizationContextAwaitTaskContinuation.<>O | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.SynchronizationContextAwaitTaskContinuation.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.SynchronizationContextAwaitTaskContinuation.<>c__DisplayClass6_0 | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.SynchronizationContextTaskScheduler.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.Task System.IO.File.<WriteAllBytesAsync>g__Core\|92_0(System.String,System.Byte[],System.Threading.CancellationToken) | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.Task System.IO.Stream.<CopyToAsync>g__Core\|27_0(System.IO.Stream,System.IO.Stream,System.Int32,System.Threading.CancellationToken) | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.Task System.IO.StreamWriter.<FlushAsyncInternal>g__Core\|76_0(System.Boolean,System.Boolean,System.Threading.CancellationToken) | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.Task System.IO.TextWriter.<WriteAsync>g__WriteAsyncCore\|60_0(System.Text.StringBuilder,System.Threading.CancellationToken) | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.Task System.IO.TextWriter.<WriteLineAsync>g__WriteLineAsyncCore\|66_0(System.Text.StringBuilder,System.Threading.CancellationToken) | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.Task System.Threading.Tasks.TaskExtensions.Unwrap(System.Threading.Tasks.Task<System.Threading.Tasks.Task>) | [ExtensionAttribute(...)] | -| System.Threading.Tasks.Task System.Threading.Tasks.ThreadPoolTaskScheduler.<FilterTasksFromWorkItems>d__6.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Threading.Tasks.Task.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.Task.<Factory>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.Task.CancellationPromise`1.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.Task.ContingentProperties System.Threading.Tasks.Task.<EnsureContingentPropertiesInitialized>g__InitializeContingentProperties\|81_0() | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.Task.DelayPromiseWithCancellation.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.Task.TaskStateFlags | [FlagsAttribute(...)] | -| System.Threading.Tasks.Task.WhenAllPromise.<>c__DisplayClass3_0 | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.Task.t_currentTask | [ThreadStaticAttribute(...)] | -| System.Threading.Tasks.Task<!0> | [NotNullAttribute(...)] | -| System.Threading.Tasks.Task<!0> System.Threading.Tasks.TaskExtensions.Unwrap`1(System.Threading.Tasks.Task<System.Threading.Tasks.Task<!0>>) | [ExtensionAttribute(...)] | -| System.Threading.Tasks.Task<!0>[] | [ParamArrayAttribute(...)] | -| System.Threading.Tasks.TaskAsyncEnumerableExtensions | [ExtensionAttribute(...)] | -| System.Threading.Tasks.TaskAsyncEnumerableExtensions.<ToBlockingEnumerable>d__3`1 | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.TaskContinuationOptions | [FlagsAttribute(...)] | -| System.Threading.Tasks.TaskCreationOptions | [FlagsAttribute(...)] | -| System.Threading.Tasks.TaskExtensions | [ExtensionAttribute(...)] | -| System.Threading.Tasks.TaskFactory System.Threading.Tasks.Task.get_Factory() | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.TaskFactory`1.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.TaskFactory`1.<>c__56`1 | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.TaskFactory`1.<>c__67`1 | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.TaskFactory`1.<>c__DisplayClass32_0 | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.TaskFactory`1.<>c__DisplayClass35_0 | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.TaskFactory`1.<>c__DisplayClass38_0`1 | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.TaskFactory`1.<>c__DisplayClass41_0`2 | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.TaskFactory`1.<>c__DisplayClass44_0`3 | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.TaskScheduler.UnobservedTaskException | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.TaskSchedulerAwaitTaskContinuation.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.TaskToAsyncResult.TaskAsyncResult.<AsyncState>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.TaskToAsyncResult.TaskAsyncResult.<CompletedSynchronously>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.Task[] | [ParamArrayAttribute(...)] | -| System.Threading.Tasks.ThreadPoolTaskScheduler.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.ThreadPoolTaskScheduler.<FilterTasksFromWorkItems>d__6 | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.UnwrapPromise`1.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.ValueTask | [IsReadOnlyAttribute(...)] | -| System.Threading.Tasks.ValueTask System.IO.File.<IterateFileLinesAsync>d__110.DisposeAsync() | [DebuggerHiddenAttribute(...)] | -| System.Threading.Tasks.ValueTask System.Text.TranscodingStream.<DisposeAsync>g__DisposeAsyncCore\|30_0(System.ArraySegment<System.Byte>) | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.ValueTask System.Text.TranscodingStream.<WriteAsync>g__WriteAsyncCore\|50_0(System.ReadOnlyMemory<System.Byte>,System.Threading.CancellationToken) | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.ValueTask System.Threading.CancellationTokenRegistration.<DisposeAsync>g__WaitForCallbackIfNecessaryAsync\|4_0(System.Int64,System.Threading.CancellationTokenSource.CallbackNode) | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.ValueTask.ValueTaskSourceAsTask.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.ValueTask<!0> | [IsReadOnlyAttribute(...)] | -| System.Threading.Tasks.ValueTask<System.Boolean> System.IO.File.<IterateFileLinesAsync>d__110.MoveNextAsync() | [DebuggerHiddenAttribute(...)] | -| System.Threading.Tasks.ValueTask<System.Int32> System.IO.Stream.<ReadAsync>g__FinishReadAsync\|42_0(System.Threading.Tasks.Task<System.Int32>,System.Byte[],System.Memory<System.Byte>) | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.ValueTask<System.Int32> System.Text.TranscodingStream.<ReadAsync>g__ReadAsyncCore\|41_0(System.Memory<System.Byte>,System.Threading.CancellationToken) | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.ValueTask`1 | [IsReadOnlyAttribute(...)] | -| System.Threading.Tasks.ValueTask`1.ValueTaskSourceAsTask.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.VoidTaskResult | [IsReadOnlyAttribute(...)] | -| System.Threading.Thread System.Threading.Thread.get_CurrentThread() | [IntrinsicAttribute(...)] | -| System.Threading.Thread.<OptimalMaxSpinWaitsPerSpinIteration>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Threading.Thread.t_currentThread | [ThreadStaticAttribute(...)] | -| System.Threading.ThreadHandle | [IsReadOnlyAttribute(...)] | -| System.Threading.ThreadInt64PersistentCounter.t_nodeFinalizationHelpers | [ThreadStaticAttribute(...)] | -| System.Threading.ThreadLocal<System.Object> System.LocalDataStoreSlot.get_Data() | [CompilerGeneratedAttribute(...)] | -| System.Threading.ThreadLocal`1.ts_finalizationHelper | [ThreadStaticAttribute(...)] | -| System.Threading.ThreadLocal`1.ts_slotArray | [ThreadStaticAttribute(...)] | -| System.Threading.ThreadPool.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.ThreadPool.<GetQueuedWorkItems>d__26 | [CompilerGeneratedAttribute(...)] | -| System.Threading.ThreadPoolWorkQueueThreadLocals.threadLocals | [ThreadStaticAttribute(...)] | -| System.Threading.ThreadState | [FlagsAttribute(...)] | -| System.Threading.Timer.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.TimerQueue.<>O | [CompilerGeneratedAttribute(...)] | -| System.Threading.TimerQueue.<ActiveCount>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Threading.TimerQueue.<GetTimersForDebugger>d__7 | [CompilerGeneratedAttribute(...)] | -| System.Threading.TimerQueue.<Instances>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Threading.TimerQueueTimer System.Threading.TimerQueue.<GetTimersForDebugger>d__7.get_Current() | [DebuggerHiddenAttribute(...)] | -| System.Threading.TimerQueueTimer.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.TimerQueue[] System.Threading.TimerQueue.get_Instances() | [CompilerGeneratedAttribute(...)] | -| System.Threading.WaitHandle.t_safeWaitHandlesForRent | [ThreadStaticAttribute(...)] | -| System.Threading.WaitHandleExtensions | [ExtensionAttribute(...)] | -| System.ThrowHelper | [StackTraceHiddenAttribute(...)] | -| System.TimeOnly | [IsReadOnlyAttribute(...)] | -| System.TimeOnly.<>c | [CompilerGeneratedAttribute(...)] | -| System.TimeProvider System.TimeProvider.get_System() | [CompilerGeneratedAttribute(...)] | -| System.TimeProvider.<System>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.TimeSpan | [IsReadOnlyAttribute(...)] | -| System.TimeSpan | [ScopedRefAttribute(...)] | -| System.TimeSpan System.Diagnostics.Tracing.IncrementingEventCounter.get_DisplayRateTimeScale() | [CompilerGeneratedAttribute(...)] | -| System.TimeSpan System.Diagnostics.Tracing.IncrementingPollingCounter.get_DisplayRateTimeScale() | [CompilerGeneratedAttribute(...)] | -| System.TimeZoneInfo.<>c | [CompilerGeneratedAttribute(...)] | -| System.TimeZoneInfo.<>c__DisplayClass187_0 | [CompilerGeneratedAttribute(...)] | -| System.TimeZoneInfo.<HasIanaId>k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.TimeZoneInfo.AdjustmentRule | [NotNullAttribute(...)] | -| System.TimeZoneInfo.TZifHead | [IsReadOnlyAttribute(...)] | -| System.TimeZoneInfo.TZifType | [IsReadOnlyAttribute(...)] | -| System.TimeZoneInfo.TransitionTime | [IsReadOnlyAttribute(...)] | -| System.TimeZoneInfoOptions | [FlagsAttribute(...)] | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!7,!8,!9>> System.TupleExtensions.ToTuple`10(System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!7,!8,!9>>) | [ExtensionAttribute(...)] | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!7,!8>> System.TupleExtensions.ToTuple`9(System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!7,!8>>) | [ExtensionAttribute(...)] | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!7>> System.TupleExtensions.ToTuple`8(System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!7>>) | [ExtensionAttribute(...)] | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!7,!8,!9>> System.TupleExtensions.ToTuple`11(System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!7,!8,!9>>) | [ExtensionAttribute(...)] | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!7,!8,!9>> System.TupleExtensions.ToTuple`12(System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!7,!8,!9>>) | [ExtensionAttribute(...)] | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!7,!8,!9>> System.TupleExtensions.ToTuple`13(System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!7,!8,!9>>) | [ExtensionAttribute(...)] | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17,!18,!19,!20>>> System.TupleExtensions.ToTuple`21(System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9,System.ValueTuple<!14,!15,!16,!17,!18,!19,!20>>>) | [ExtensionAttribute(...)] | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17,!18,!19>>> System.TupleExtensions.ToTuple`20(System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9,System.ValueTuple<!14,!15,!16,!17,!18,!19>>>) | [ExtensionAttribute(...)] | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17,!18>>> System.TupleExtensions.ToTuple`19(System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9,System.ValueTuple<!14,!15,!16,!17,!18>>>) | [ExtensionAttribute(...)] | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17>>> System.TupleExtensions.ToTuple`18(System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9,System.ValueTuple<!14,!15,!16,!17>>>) | [ExtensionAttribute(...)] | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16>>> System.TupleExtensions.ToTuple`17(System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9,System.ValueTuple<!14,!15,!16>>>) | [ExtensionAttribute(...)] | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15>>> System.TupleExtensions.ToTuple`16(System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9,System.ValueTuple<!14,!15>>>) | [ExtensionAttribute(...)] | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14>>> System.TupleExtensions.ToTuple`15(System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9,System.ValueTuple<!14>>>) | [ExtensionAttribute(...)] | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9>> System.TupleExtensions.ToTuple`14(System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9>>) | [ExtensionAttribute(...)] | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6> System.TupleExtensions.ToTuple`7(System.ValueTuple<!0,!1,!2,!3,!4,!5,!6>) | [ExtensionAttribute(...)] | -| System.Tuple<!0,!1,!2,!3,!4,!5> System.TupleExtensions.ToTuple`6(System.ValueTuple<!0,!1,!2,!3,!4,!5>) | [ExtensionAttribute(...)] | -| System.Tuple<!0,!1,!2,!3,!4> System.TupleExtensions.ToTuple`5(System.ValueTuple<!0,!1,!2,!3,!4>) | [ExtensionAttribute(...)] | -| System.Tuple<!0,!1,!2,!3> System.TupleExtensions.ToTuple`4(System.ValueTuple<!0,!1,!2,!3>) | [ExtensionAttribute(...)] | -| System.Tuple<!0,!1,!2> System.TupleExtensions.ToTuple`3(System.ValueTuple<!0,!1,!2>) | [ExtensionAttribute(...)] | -| System.Tuple<!0,!1> System.TupleExtensions.ToTuple`2(System.ValueTuple<!0,!1>) | [ExtensionAttribute(...)] | -| System.Tuple<!0> System.TupleExtensions.ToTuple`1(System.ValueTuple<!0>) | [ExtensionAttribute(...)] | -| System.TupleExtensions | [ExtensionAttribute(...)] | -| System.Type System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.get_Type() | [CompilerGeneratedAttribute(...)] | -| System.Type System.Object.GetType() | [IntrinsicAttribute(...)] | -| System.Type System.Reflection.Metadata.MetadataUpdateHandlerAttribute.get_HandlerType() | [CompilerGeneratedAttribute(...)] | -| System.Type System.Reflection.ModifiedFunctionPointerType.<GetFunctionPointerReturnType>g__Initialize\|4_0() | [CompilerGeneratedAttribute(...)] | -| System.Type System.Reflection.ModifiedHasElementType.<GetElementType>g__Initialize\|2_0() | [CompilerGeneratedAttribute(...)] | -| System.Type System.Reflection.NullabilityInfo.get_Type() | [CompilerGeneratedAttribute(...)] | -| System.Type System.Reflection.SignatureTypeExtensions.TryMakeArrayType(System.Type) | [ExtensionAttribute(...)] | -| System.Type System.Reflection.SignatureTypeExtensions.TryMakeArrayType(System.Type,System.Int32) | [ExtensionAttribute(...)] | -| System.Type System.Reflection.SignatureTypeExtensions.TryMakeByRefType(System.Type) | [ExtensionAttribute(...)] | -| System.Type System.Reflection.SignatureTypeExtensions.TryMakeGenericType(System.Type,System.Type[]) | [ExtensionAttribute(...)] | -| System.Type System.Reflection.SignatureTypeExtensions.TryMakePointerType(System.Type) | [ExtensionAttribute(...)] | -| System.Type System.Reflection.SignatureTypeExtensions.TryResolve(System.Reflection.SignatureType,System.Type[]) | [ExtensionAttribute(...)] | -| System.Type System.Reflection.SignatureTypeExtensions.TryResolveAgainstGenericMethod(System.Reflection.SignatureType,System.Reflection.MethodInfo) | [ExtensionAttribute(...)] | -| System.Type System.Resources.ResourceReader.<FindType>g__UseReflectionToGetTypeLocal\|52_0(System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Type System.Runtime.CompilerServices.AsyncMethodBuilderAttribute.get_BuilderType() | [CompilerGeneratedAttribute(...)] | -| System.Type System.Runtime.CompilerServices.CollectionBuilderAttribute.get_BuilderType() | [CompilerGeneratedAttribute(...)] | -| System.Type System.Runtime.CompilerServices.FixedBufferAttribute.get_ElementType() | [CompilerGeneratedAttribute(...)] | -| System.Type System.Runtime.CompilerServices.MetadataUpdateOriginalTypeAttribute.get_OriginalType() | [CompilerGeneratedAttribute(...)] | -| System.Type System.Runtime.CompilerServices.StateMachineAttribute.get_StateMachineType() | [CompilerGeneratedAttribute(...)] | -| System.Type System.Runtime.CompilerServices.TypeForwardedToAttribute.get_Destination() | [CompilerGeneratedAttribute(...)] | -| System.Type System.Runtime.InteropServices.CoClassAttribute.get_CoClass() | [CompilerGeneratedAttribute(...)] | -| System.Type System.Runtime.InteropServices.ComDefaultInterfaceAttribute.get_Value() | [CompilerGeneratedAttribute(...)] | -| System.Type System.Runtime.InteropServices.ComEventInterfaceAttribute.get_EventProvider() | [CompilerGeneratedAttribute(...)] | -| System.Type System.Runtime.InteropServices.ComEventInterfaceAttribute.get_SourceInterface() | [CompilerGeneratedAttribute(...)] | -| System.Type System.Runtime.InteropServices.LibraryImportAttribute.get_StringMarshallingCustomType() | [CompilerGeneratedAttribute(...)] | -| System.Type System.Runtime.InteropServices.Marshalling.CustomMarshallerAttribute.get_ManagedType() | [CompilerGeneratedAttribute(...)] | -| System.Type System.Runtime.InteropServices.Marshalling.CustomMarshallerAttribute.get_MarshallerType() | [CompilerGeneratedAttribute(...)] | -| System.Type System.Runtime.InteropServices.Marshalling.MarshalUsingAttribute.get_NativeType() | [CompilerGeneratedAttribute(...)] | -| System.Type System.Runtime.InteropServices.Marshalling.NativeMarshallingAttribute.get_NativeType() | [CompilerGeneratedAttribute(...)] | -| System.Type System.Security.SecurityException.get_PermissionType() | [CompilerGeneratedAttribute(...)] | -| System.Type System.Type.GetEnumUnderlyingType() | [IntrinsicAttribute(...)] | -| System.Type System.Type.GetTypeFromHandle(System.RuntimeTypeHandle) | [IntrinsicAttribute(...)] | -| System.Type.<>c | [CompilerGeneratedAttribute(...)] | -| System.Type[] | [ParamArrayAttribute(...)] | -| System.Type[] System.Diagnostics.Tracing.EventSource.EventMetadata.<get_ParameterTypes>g__GetParameterTypes\|22_0(System.Reflection.ParameterInfo[]) | [CompilerGeneratedAttribute(...)] | -| System.Type[] System.Reflection.ModifiedFunctionPointerType.<GetFunctionPointerParameterTypes>g__Initialize\|5_0() | [CompilerGeneratedAttribute(...)] | -| System.Type[] System.Reflection.ModifiedGenericType.<GetGenericArguments>g__Initialize\|2_0() | [CompilerGeneratedAttribute(...)] | -| System.Type[] System.Reflection.ReflectionTypeLoadException.get_Types() | [CompilerGeneratedAttribute(...)] | -| System.Type[] System.Reflection.TypeInfo.<get_DeclaredNestedTypes>g__GetDeclaredOnlyNestedTypes\|22_0(System.Type) | [CompilerGeneratedAttribute(...)] | -| System.TypedReference | [IsByRefLikeAttribute(...)] | -| System.TypedReference | [NonVersionableAttribute(...)] | -| System.UInt16 System.Buffers.Binary.BinaryPrimitives.ReverseEndianness(System.UInt16) | [IntrinsicAttribute(...)] | -| System.UInt16 System.Math.Max(System.UInt16,System.UInt16) | [NonVersionableAttribute(...)] | -| System.UInt16 System.Math.Min(System.UInt16,System.UInt16) | [NonVersionableAttribute(...)] | -| System.UInt16 System.Runtime.CompilerServices.RuntimeHelpers.GetElementSize(System.Array) | [ExtensionAttribute(...)] | -| System.UInt16 System.Runtime.InteropServices.NFloat.op_CheckedExplicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.UInt16 System.Runtime.InteropServices.NFloat.op_Explicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.UInt16 System.Threading.Volatile.Read(System.UInt16) | [IntrinsicAttribute(...)] | -| System.UInt16 System.Threading.Volatile.Read(System.UInt16) | [NonVersionableAttribute(...)] | -| System.UInt32 Interop.Kernel32.<GetEnvironmentVariable>g____PInvoke\|61_0(System.UInt16*,System.Char*,System.UInt32) | [CompilerGeneratedAttribute(...)] | -| System.UInt32 Interop.Kernel32.GetEnvironmentVariable(System.String,System.Char,System.UInt32) | [LibraryImportAttribute(...)] | -| System.UInt32 System.BitConverter.SingleToUInt32Bits(System.Single) | [IntrinsicAttribute(...)] | -| System.UInt32 System.Buffers.Binary.BinaryPrimitives.ReverseEndianness(System.UInt32) | [IntrinsicAttribute(...)] | -| System.UInt32 System.Math.Max(System.UInt32,System.UInt32) | [NonVersionableAttribute(...)] | -| System.UInt32 System.Math.Min(System.UInt32,System.UInt32) | [NonVersionableAttribute(...)] | -| System.UInt32 System.Numerics.BitOperations.Crc32C(System.UInt32,System.Byte) | [IntrinsicAttribute(...)] | -| System.UInt32 System.Numerics.BitOperations.Crc32C(System.UInt32,System.UInt16) | [IntrinsicAttribute(...)] | -| System.UInt32 System.Numerics.BitOperations.Crc32C(System.UInt32,System.UInt32) | [IntrinsicAttribute(...)] | -| System.UInt32 System.Numerics.BitOperations.Crc32C(System.UInt32,System.UInt64) | [IntrinsicAttribute(...)] | -| System.UInt32 System.Numerics.BitOperations.RotateLeft(System.UInt32,System.Int32) | [IntrinsicAttribute(...)] | -| System.UInt32 System.Numerics.BitOperations.RotateRight(System.UInt32,System.Int32) | [IntrinsicAttribute(...)] | -| System.UInt32 System.Reflection.Assembly.GetAssemblyCount() | [SuppressGCTransitionAttribute(...)] | -| System.UInt32 System.Reflection.AssemblyAlgorithmIdAttribute.get_AlgorithmId() | [CompilerGeneratedAttribute(...)] | -| System.UInt32 System.Runtime.InteropServices.NFloat.op_CheckedExplicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.UInt32 System.Runtime.InteropServices.NFloat.op_Explicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.UInt32 System.Runtime.Intrinsics.Vector64.ExtractMostSignificantBits`1(System.Runtime.Intrinsics.Vector64<!0>) | [ExtensionAttribute(...)] | -| System.UInt32 System.Runtime.Intrinsics.Vector64.ExtractMostSignificantBits`1(System.Runtime.Intrinsics.Vector64<!0>) | [IntrinsicAttribute(...)] | -| System.UInt32 System.Runtime.Intrinsics.Vector128.ExtractMostSignificantBits`1(System.Runtime.Intrinsics.Vector128<!0>) | [ExtensionAttribute(...)] | -| System.UInt32 System.Runtime.Intrinsics.Vector128.ExtractMostSignificantBits`1(System.Runtime.Intrinsics.Vector128<!0>) | [IntrinsicAttribute(...)] | -| System.UInt32 System.Runtime.Intrinsics.Vector256.ExtractMostSignificantBits`1(System.Runtime.Intrinsics.Vector256<!0>) | [ExtensionAttribute(...)] | -| System.UInt32 System.Runtime.Intrinsics.Vector256.ExtractMostSignificantBits`1(System.Runtime.Intrinsics.Vector256<!0>) | [IntrinsicAttribute(...)] | -| System.UInt32 System.Text.CodePageDataItem.get_Flags() | [CompilerGeneratedAttribute(...)] | -| System.UInt32 System.Threading.Volatile.Read(System.UInt32) | [IntrinsicAttribute(...)] | -| System.UInt32 System.Threading.Volatile.Read(System.UInt32) | [NonVersionableAttribute(...)] | -| System.UInt32 System.UInt32.LeadingZeroCount(System.UInt32) | [IntrinsicAttribute(...)] | -| System.UInt32 System.UInt32.Log2(System.UInt32) | [IntrinsicAttribute(...)] | -| System.UInt32 System.UInt32.PopCount(System.UInt32) | [IntrinsicAttribute(...)] | -| System.UInt32 System.UInt32.RotateLeft(System.UInt32,System.Int32) | [IntrinsicAttribute(...)] | -| System.UInt32 System.UInt32.RotateRight(System.UInt32,System.Int32) | [IntrinsicAttribute(...)] | -| System.UInt32 System.UInt32.TrailingZeroCount(System.UInt32) | [IntrinsicAttribute(...)] | -| System.UInt32 System.UInt128.<op_Division>g__AddDivisor\|110_0(System.Span<System.UInt32>,System.ReadOnlySpan<System.UInt32>) | [CompilerGeneratedAttribute(...)] | -| System.UInt32 System.UInt128.<op_Division>g__SubtractDivisor\|110_3(System.Span<System.UInt32>,System.ReadOnlySpan<System.UInt32>,System.UInt64) | [CompilerGeneratedAttribute(...)] | -| System.UInt32 System.UIntPtr.ToUInt32() | [NonVersionableAttribute(...)] | -| System.UInt32 System.UIntPtr.op_Explicit(System.UIntPtr) | [NonVersionableAttribute(...)] | -| System.UInt64 System.BitConverter.DoubleToUInt64Bits(System.Double) | [IntrinsicAttribute(...)] | -| System.UInt64 System.Buffers.Binary.BinaryPrimitives.ReverseEndianness(System.UInt64) | [IntrinsicAttribute(...)] | -| System.UInt64 System.Marvin.get_DefaultSeed() | [CompilerGeneratedAttribute(...)] | -| System.UInt64 System.Math.<BigMul>g__SoftwareFallback\|49_0(System.UInt64,System.UInt64,System.UInt64) | [CompilerGeneratedAttribute(...)] | -| System.UInt64 System.Math.Max(System.UInt64,System.UInt64) | [NonVersionableAttribute(...)] | -| System.UInt64 System.Math.Min(System.UInt64,System.UInt64) | [NonVersionableAttribute(...)] | -| System.UInt64 System.Numerics.BitOperations.RotateLeft(System.UInt64,System.Int32) | [IntrinsicAttribute(...)] | -| System.UInt64 System.Numerics.BitOperations.RotateRight(System.UInt64,System.Int32) | [IntrinsicAttribute(...)] | -| System.UInt64 System.Runtime.InteropServices.NFloat.op_CheckedExplicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.UInt64 System.Runtime.InteropServices.NFloat.op_Explicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.UInt64 System.Runtime.Intrinsics.Vector512.ExtractMostSignificantBits`1(System.Runtime.Intrinsics.Vector512<!0>) | [ExtensionAttribute(...)] | -| System.UInt64 System.Runtime.Intrinsics.Vector512.ExtractMostSignificantBits`1(System.Runtime.Intrinsics.Vector512<!0>) | [IntrinsicAttribute(...)] | -| System.UInt64 System.Threading.Volatile.Read(System.UInt64) | [IntrinsicAttribute(...)] | -| System.UInt64 System.Threading.Volatile.Read(System.UInt64) | [NonVersionableAttribute(...)] | -| System.UInt64 System.UInt64.LeadingZeroCount(System.UInt64) | [IntrinsicAttribute(...)] | -| System.UInt64 System.UInt64.Log2(System.UInt64) | [IntrinsicAttribute(...)] | -| System.UInt64 System.UInt64.PopCount(System.UInt64) | [IntrinsicAttribute(...)] | -| System.UInt64 System.UInt64.RotateLeft(System.UInt64,System.Int32) | [IntrinsicAttribute(...)] | -| System.UInt64 System.UInt64.RotateRight(System.UInt64,System.Int32) | [IntrinsicAttribute(...)] | -| System.UInt64 System.UInt64.TrailingZeroCount(System.UInt64) | [IntrinsicAttribute(...)] | -| System.UInt64 System.UIntPtr.ToUInt64() | [NonVersionableAttribute(...)] | -| System.UInt64 System.UIntPtr.op_Explicit(System.UIntPtr) | [NonVersionableAttribute(...)] | -| System.UInt128 | [IntrinsicAttribute(...)] | -| System.UInt128 | [IsReadOnlyAttribute(...)] | -| System.UInt128 System.Runtime.InteropServices.NFloat.op_CheckedExplicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.UInt128 System.Runtime.InteropServices.NFloat.op_Explicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.UInt128 System.UInt128.<op_Division>g__DivideSlow\|110_2(System.UInt128,System.UInt128) | [CompilerGeneratedAttribute(...)] | -| System.UIntPtr | [IsReadOnlyAttribute(...)] | -| System.UIntPtr | [RequiresLocationAttribute(...)] | -| System.UIntPtr System.Math.Max(System.UIntPtr,System.UIntPtr) | [NonVersionableAttribute(...)] | -| System.UIntPtr System.Math.Min(System.UIntPtr,System.UIntPtr) | [NonVersionableAttribute(...)] | -| System.UIntPtr System.Numerics.BitOperations.RotateLeft(System.UIntPtr,System.Int32) | [IntrinsicAttribute(...)] | -| System.UIntPtr System.Numerics.BitOperations.RotateRight(System.UIntPtr,System.Int32) | [IntrinsicAttribute(...)] | -| System.UIntPtr System.Runtime.InteropServices.NFloat.op_CheckedExplicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.UIntPtr System.Runtime.InteropServices.NFloat.op_Explicit(System.Runtime.InteropServices.NFloat) | [NonVersionableAttribute(...)] | -| System.UIntPtr System.Threading.Volatile.Read(System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.UIntPtr System.Threading.Volatile.Read(System.UIntPtr) | [NonVersionableAttribute(...)] | -| System.UIntPtr System.UIntPtr.Add(System.UIntPtr,System.Int32) | [NonVersionableAttribute(...)] | -| System.UIntPtr System.UIntPtr.LeadingZeroCount(System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.UIntPtr System.UIntPtr.Log2(System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.UIntPtr System.UIntPtr.PopCount(System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.UIntPtr System.UIntPtr.RotateLeft(System.UIntPtr,System.Int32) | [IntrinsicAttribute(...)] | -| System.UIntPtr System.UIntPtr.RotateRight(System.UIntPtr,System.Int32) | [IntrinsicAttribute(...)] | -| System.UIntPtr System.UIntPtr.Subtract(System.UIntPtr,System.Int32) | [NonVersionableAttribute(...)] | -| System.UIntPtr System.UIntPtr.TrailingZeroCount(System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.UIntPtr System.UIntPtr.get_AllBitsSet() | [NonVersionableAttribute(...)] | -| System.UIntPtr System.UIntPtr.get_MaxValue() | [NonVersionableAttribute(...)] | -| System.UIntPtr System.UIntPtr.get_MinValue() | [NonVersionableAttribute(...)] | -| System.UIntPtr System.UIntPtr.op_Addition(System.UIntPtr,System.Int32) | [NonVersionableAttribute(...)] | -| System.UIntPtr System.UIntPtr.op_Explicit(System.UInt32) | [NonVersionableAttribute(...)] | -| System.UIntPtr System.UIntPtr.op_Explicit(System.UInt64) | [NonVersionableAttribute(...)] | -| System.UIntPtr System.UIntPtr.op_Explicit(System.Void*) | [NonVersionableAttribute(...)] | -| System.UIntPtr System.UIntPtr.op_Subtraction(System.UIntPtr,System.Int32) | [NonVersionableAttribute(...)] | -| System.UIntPtr.Zero | [IntrinsicAttribute(...)] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!7,!8,!9>> System.TupleExtensions.ToValueTuple`10(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!7,!8,!9>>) | [ExtensionAttribute(...)] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!7,!8>> System.TupleExtensions.ToValueTuple`9(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!7,!8>>) | [ExtensionAttribute(...)] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!7>> System.TupleExtensions.ToValueTuple`8(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!7>>) | [ExtensionAttribute(...)] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!7,!8,!9>> System.TupleExtensions.ToValueTuple`11(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!7,!8,!9>>) | [ExtensionAttribute(...)] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!7,!8,!9>> System.TupleExtensions.ToValueTuple`12(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!7,!8,!9>>) | [ExtensionAttribute(...)] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!7,!8,!9>> System.TupleExtensions.ToValueTuple`13(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!7,!8,!9>>) | [ExtensionAttribute(...)] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9,System.ValueTuple<!14,!15,!16,!17,!18,!19,!20>>> System.TupleExtensions.ToValueTuple`21(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17,!18,!19,!20>>>) | [ExtensionAttribute(...)] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9,System.ValueTuple<!14,!15,!16,!17,!18,!19>>> System.TupleExtensions.ToValueTuple`20(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17,!18,!19>>>) | [ExtensionAttribute(...)] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9,System.ValueTuple<!14,!15,!16,!17,!18>>> System.TupleExtensions.ToValueTuple`19(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17,!18>>>) | [ExtensionAttribute(...)] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9,System.ValueTuple<!14,!15,!16,!17>>> System.TupleExtensions.ToValueTuple`18(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17>>>) | [ExtensionAttribute(...)] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9,System.ValueTuple<!14,!15,!16>>> System.TupleExtensions.ToValueTuple`17(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16>>>) | [ExtensionAttribute(...)] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9,System.ValueTuple<!14,!15>>> System.TupleExtensions.ToValueTuple`16(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15>>>) | [ExtensionAttribute(...)] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9,System.ValueTuple<!14>>> System.TupleExtensions.ToValueTuple`15(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14>>>) | [ExtensionAttribute(...)] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9>> System.TupleExtensions.ToValueTuple`14(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9>>) | [ExtensionAttribute(...)] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6> System.TupleExtensions.ToValueTuple`7(System.Tuple<!0,!1,!2,!3,!4,!5,!6>) | [ExtensionAttribute(...)] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5> System.TupleExtensions.ToValueTuple`6(System.Tuple<!0,!1,!2,!3,!4,!5>) | [ExtensionAttribute(...)] | -| System.ValueTuple<!0,!1,!2,!3,!4> System.TupleExtensions.ToValueTuple`5(System.Tuple<!0,!1,!2,!3,!4>) | [ExtensionAttribute(...)] | -| System.ValueTuple<!0,!1,!2,!3> System.TupleExtensions.ToValueTuple`4(System.Tuple<!0,!1,!2,!3>) | [ExtensionAttribute(...)] | -| System.ValueTuple<!0,!1,!2> System.TupleExtensions.ToValueTuple`3(System.Tuple<!0,!1,!2>) | [ExtensionAttribute(...)] | -| System.ValueTuple<!0,!1> System.TupleExtensions.ToValueTuple`2(System.Tuple<!0,!1>) | [ExtensionAttribute(...)] | -| System.ValueTuple<!0> System.TupleExtensions.ToValueTuple`1(System.Tuple<!0>) | [ExtensionAttribute(...)] | -| System.ValueTuple<System.Byte,System.Byte> System.Math.DivRem(System.Byte,System.Byte) | [NonVersionableAttribute(...)] | -| System.ValueTuple<System.ConsoleKey,System.ConsoleModifiers> System.IO.KeyParser.<TryParseTerminalInputSequence>g__MapKeyIdOXterm\|7_0(System.Char,System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.ValueTuple<System.ConsoleKey,System.ConsoleModifiers> System.IO.KeyParser.<TryParseTerminalInputSequence>g__MapSCO\|7_1(System.Char) | [CompilerGeneratedAttribute(...)] | -| System.ValueTuple<System.Int16,System.Int16> System.Math.DivRem(System.Int16,System.Int16) | [NonVersionableAttribute(...)] | -| System.ValueTuple<System.Int32,System.Int32> System.Math.DivRem(System.Int32,System.Int32) | [NonVersionableAttribute(...)] | -| System.ValueTuple<System.Int64,System.Int64> System.Math.DivRem(System.Int64,System.Int64) | [NonVersionableAttribute(...)] | -| System.ValueTuple<System.IntPtr,System.IntPtr> System.Math.DivRem(System.IntPtr,System.IntPtr) | [NonVersionableAttribute(...)] | -| System.ValueTuple<System.SByte,System.SByte> System.Math.DivRem(System.SByte,System.SByte) | [NonVersionableAttribute(...)] | -| System.ValueTuple<System.UInt16,System.UInt16> System.Math.DivRem(System.UInt16,System.UInt16) | [NonVersionableAttribute(...)] | -| System.ValueTuple<System.UInt32,System.UInt32> System.Math.DivRem(System.UInt32,System.UInt32) | [NonVersionableAttribute(...)] | -| System.ValueTuple<System.UInt64,System.UInt64> System.Math.DivRem(System.UInt64,System.UInt64) | [NonVersionableAttribute(...)] | -| System.ValueTuple<System.UIntPtr,System.UIntPtr> System.Math.DivRem(System.UIntPtr,System.UIntPtr) | [NonVersionableAttribute(...)] | -| System.Version System.ApplicationId.get_Version() | [CompilerGeneratedAttribute(...)] | -| System.Void Internal.Runtime.InteropServices.ComponentActivator.<LoadAssembly>g__LoadAssemblyLocal\|14_0(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void Internal.Runtime.InteropServices.ComponentActivator.<LoadAssemblyBytes>g__LoadAssemblyBytesLocal\|16_0(System.ReadOnlySpan<System.Byte>,System.ReadOnlySpan<System.Byte>) | [CompilerGeneratedAttribute(...)] | -| System.Void Interop.Globalization.<ChangeCase>g____PInvoke\|6_0(System.Char*,System.Int32,System.Char*,System.Int32,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Void Interop.Globalization.<ChangeCaseInvariant>g____PInvoke\|7_0(System.Char*,System.Int32,System.Char*,System.Int32,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Void Interop.Globalization.<ChangeCaseTurkish>g____PInvoke\|8_0(System.Char*,System.Int32,System.Char*,System.Int32,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Void Interop.Globalization.<InitICUFunctions>g____PInvoke\|23_0(System.IntPtr,System.IntPtr,System.Byte*,System.Byte*) | [CompilerGeneratedAttribute(...)] | -| System.Void Interop.Globalization.ChangeCase(System.Char*,System.Int32,System.Char*,System.Int32,System.Boolean) | [LibraryImportAttribute(...)] | -| System.Void Interop.Globalization.ChangeCaseInvariant(System.Char*,System.Int32,System.Char*,System.Int32,System.Boolean) | [LibraryImportAttribute(...)] | -| System.Void Interop.Globalization.ChangeCaseTurkish(System.Char*,System.Int32,System.Char*,System.Int32,System.Boolean) | [LibraryImportAttribute(...)] | -| System.Void Interop.Globalization.InitICUFunctions(System.IntPtr,System.IntPtr,System.String,System.String) | [LibraryImportAttribute(...)] | -| System.Void Interop.Globalization.InitOrdinalCasingPage(System.Int32,System.Char*) | [LibraryImportAttribute(...)] | -| System.Void Microsoft.Win32.SafeHandles.SafeFileHandle.set_IsAsync(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.AppContext.<LogSwitchValues>g__LogDataStore\|23_0(System.Diagnostics.Tracing.RuntimeEventSource,System.Collections.Generic.Dictionary<System.Boolean,System.String>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.AppContext.add_FirstChanceException(System.EventHandler<System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.AppContext.add_ProcessExit(System.EventHandler) | [CompilerGeneratedAttribute(...)] | -| System.Void System.AppContext.add_UnhandledException(System.UnhandledExceptionEventHandler) | [CompilerGeneratedAttribute(...)] | -| System.Void System.AppContext.remove_FirstChanceException(System.EventHandler<System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.AppContext.remove_ProcessExit(System.EventHandler) | [CompilerGeneratedAttribute(...)] | -| System.Void System.AppContext.remove_UnhandledException(System.UnhandledExceptionEventHandler) | [CompilerGeneratedAttribute(...)] | -| System.Void System.AppDomain.add_DomainUnload(System.EventHandler) | [CompilerGeneratedAttribute(...)] | -| System.Void System.AppDomain.add_ReflectionOnlyAssemblyResolve(System.ResolveEventHandler) | [CompilerGeneratedAttribute(...)] | -| System.Void System.AppDomain.remove_DomainUnload(System.EventHandler) | [CompilerGeneratedAttribute(...)] | -| System.Void System.AppDomain.remove_ReflectionOnlyAssemblyResolve(System.ResolveEventHandler) | [CompilerGeneratedAttribute(...)] | -| System.Void System.ArgumentException.ThrowNullOrEmptyException(System.String,System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.ArgumentException.ThrowNullOrWhiteSpaceException(System.String,System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.ArgumentNullException.Throw(System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.ArgumentOutOfRangeException.ThrowEqual`1(!0,!0,System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.ArgumentOutOfRangeException.ThrowGreaterEqual`1(!0,!0,System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.ArgumentOutOfRangeException.ThrowGreater`1(!0,!0,System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.ArgumentOutOfRangeException.ThrowLessEqual`1(!0,!0,System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.ArgumentOutOfRangeException.ThrowLess`1(!0,!0,System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.ArgumentOutOfRangeException.ThrowNegativeOrZero`1(!0,System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.ArgumentOutOfRangeException.ThrowNegative`1(!0,System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.ArgumentOutOfRangeException.ThrowNotEqual`1(!0,!0,System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.ArgumentOutOfRangeException.ThrowZero`1(!0,System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.Array.<Sort>g__GenericSort\|131_0`1(System.Array,System.Array,System.Int32,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Buffer.Memmove(System.Byte,System.Byte,System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Void System.Buffer.Memmove`1(!0,!0,System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Void System.Buffers.ArrayPoolEventSource.BufferAllocated(System.Int32,System.Int32,System.Int32,System.Int32,System.Buffers.ArrayPoolEventSource.BufferAllocatedReason) | [EventAttribute(...)] | -| System.Void System.Buffers.ArrayPoolEventSource.BufferDropped(System.Int32,System.Int32,System.Int32,System.Int32,System.Buffers.ArrayPoolEventSource.BufferDroppedReason) | [EventAttribute(...)] | -| System.Void System.Buffers.ArrayPoolEventSource.BufferRented(System.Int32,System.Int32,System.Int32,System.Int32) | [EventAttribute(...)] | -| System.Void System.Buffers.ArrayPoolEventSource.BufferReturned(System.Int32,System.Int32,System.Int32) | [EventAttribute(...)] | -| System.Void System.Buffers.ArrayPoolEventSource.BufferTrimPoll(System.Int32,System.Int32) | [EventAttribute(...)] | -| System.Void System.Buffers.ArrayPoolEventSource.BufferTrimmed(System.Int32,System.Int32,System.Int32) | [EventAttribute(...)] | -| System.Void System.Buffers.Binary.BinaryPrimitives.ThrowDestinationTooSmall() | [DoesNotReturnAttribute(...)] | -| System.Void System.Char.ConvertToUtf32_ThrowInvalidArgs(System.UInt32) | [StackTraceHiddenAttribute(...)] | -| System.Void System.CodeDom.Compiler.IndentedTextWriter.<OutputTabsAsync>d__23.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.CodeDom.Compiler.IndentedTextWriter.<WriteAsync>d__37.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.CodeDom.Compiler.IndentedTextWriter.<WriteAsync>d__38.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.CodeDom.Compiler.IndentedTextWriter.<WriteAsync>d__39.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.CodeDom.Compiler.IndentedTextWriter.<WriteAsync>d__40.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.CodeDom.Compiler.IndentedTextWriter.<WriteAsync>d__41.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.CodeDom.Compiler.IndentedTextWriter.<WriteLineAsync>d__59.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.CodeDom.Compiler.IndentedTextWriter.<WriteLineAsync>d__60.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.CodeDom.Compiler.IndentedTextWriter.<WriteLineAsync>d__61.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.CodeDom.Compiler.IndentedTextWriter.<WriteLineAsync>d__62.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.CodeDom.Compiler.IndentedTextWriter.<WriteLineAsync>d__63.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.CodeDom.Compiler.IndentedTextWriter.<WriteLineAsync>d__64.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Collections.Concurrent.ConcurrentQueue`1.<Enumerate>d__26..ctor(System.Int32) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Collections.Concurrent.ConcurrentQueue`1.<Enumerate>d__26.Dispose() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Collections.Concurrent.ConcurrentQueue`1.<Enumerate>d__26.Reset() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Collections.Concurrent.SingleProducerSingleConsumerQueue`1.<GetEnumerator>d__15..ctor(System.Int32) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Collections.Concurrent.SingleProducerSingleConsumerQueue`1.<GetEnumerator>d__15.Dispose() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Collections.Concurrent.SingleProducerSingleConsumerQueue`1.<GetEnumerator>d__15.Reset() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Collections.Generic.CollectionExtensions.AddRange`1(System.Collections.Generic.List<!0>,System.ReadOnlySpan<!0>) | [ExtensionAttribute(...)] | -| System.Void System.Collections.Generic.CollectionExtensions.CopyTo`1(System.Collections.Generic.List<!0>,System.Span<!0>) | [ExtensionAttribute(...)] | -| System.Void System.Collections.Generic.CollectionExtensions.InsertRange`1(System.Collections.Generic.List<!0>,System.Int32,System.ReadOnlySpan<!0>) | [ExtensionAttribute(...)] | -| System.Void System.ConsoleCancelEventArgs.set_Cancel(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.ConsolePal.<TryGetCursorPosition>g__ReadRowOrCol\|82_3(System.Int32,System.Int32,System.IO.StdInReader,System.ReadOnlySpan<System.Byte>,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Void System.ConsolePal.<TryGetCursorPosition>g__TransferBytes\|82_0(System.ReadOnlySpan<System.Byte>,System.IO.StdInReader) | [CompilerGeneratedAttribute(...)] | -| System.Void System.ConsolePal.InvalidateTerminalSettings() | [UnmanagedCallersOnlyAttribute(...)] | -| System.Void System.Convert.ThrowByteOverflowException() | [DoesNotReturnAttribute(...)] | -| System.Void System.Convert.ThrowCharOverflowException() | [DoesNotReturnAttribute(...)] | -| System.Void System.Convert.ThrowInt16OverflowException() | [DoesNotReturnAttribute(...)] | -| System.Void System.Convert.ThrowInt32OverflowException() | [DoesNotReturnAttribute(...)] | -| System.Void System.Convert.ThrowInt64OverflowException() | [DoesNotReturnAttribute(...)] | -| System.Void System.Convert.ThrowSByteOverflowException() | [DoesNotReturnAttribute(...)] | -| System.Void System.Convert.ThrowUInt16OverflowException() | [DoesNotReturnAttribute(...)] | -| System.Void System.Convert.ThrowUInt32OverflowException() | [DoesNotReturnAttribute(...)] | -| System.Void System.Convert.ThrowUInt64OverflowException() | [DoesNotReturnAttribute(...)] | -| System.Void System.DateOnly.<AddDays>g__ThrowOutOfRange\|25_0() | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute.set_Max(System.Object) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute.set_Min(System.Object) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.set_Condition(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute.set_Justification(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.CodeAnalysis.ExperimentalAttribute.set_UrlFormat(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.CodeAnalysis.RequiresAssemblyFilesAttribute.set_Url(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute.set_Url(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute.set_Url(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.CodeAnalysis.SuppressMessageAttribute.set_Justification(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.CodeAnalysis.SuppressMessageAttribute.set_MessageId(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.CodeAnalysis.SuppressMessageAttribute.set_Scope(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.CodeAnalysis.SuppressMessageAttribute.set_Target(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.set_Justification(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.set_MessageId(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.set_Scope(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.set_Target(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Contracts.Contract.ReportFailure(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.Exception) | [DebuggerNonUserCodeAttribute(...)] | -| System.Void System.Diagnostics.Debug.Fail(System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.Diagnostics.Debug.Fail(System.String,System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.Diagnostics.DebugProvider.Fail(System.String,System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.Diagnostics.Debugger.<LogInternal>g____PInvoke\|11_0(System.Int32,System.UInt16*,System.UInt16*) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Debugger.LogInternal(System.Int32,System.String,System.String) | [LibraryImportAttribute(...)] | -| System.Void System.Diagnostics.DebuggerDisplayAttribute.set_Name(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.DebuggerDisplayAttribute.set_TargetTypeName(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.DebuggerDisplayAttribute.set_Type(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.DebuggerTypeProxyAttribute.set_TargetTypeName(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.DebuggerVisualizerAttribute.set_Description(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.DebuggerVisualizerAttribute.set_TargetTypeName(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.CounterPayload.<get_ForEnumeration>d__51..ctor(System.Int32) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Diagnostics.Tracing.CounterPayload.<get_ForEnumeration>d__51.Dispose() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Diagnostics.Tracing.CounterPayload.<get_ForEnumeration>d__51.Reset() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Diagnostics.Tracing.CounterPayload.set_Count(System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.CounterPayload.set_CounterType(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.CounterPayload.set_DisplayName(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.CounterPayload.set_DisplayUnits(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.CounterPayload.set_IntervalSec(System.Single) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.CounterPayload.set_Max(System.Double) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.CounterPayload.set_Mean(System.Double) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.CounterPayload.set_Metadata(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.CounterPayload.set_Min(System.Double) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.CounterPayload.set_Name(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.CounterPayload.set_Series(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.CounterPayload.set_StandardDeviation(System.Double) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.CounterPayloadType.set_Payload(System.Diagnostics.Tracing.CounterPayload) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventAttribute.set_ActivityOptions(System.Diagnostics.Tracing.EventActivityOptions) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventAttribute.set_Channel(System.Diagnostics.Tracing.EventChannel) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventAttribute.set_EventId(System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventAttribute.set_Keywords(System.Diagnostics.Tracing.EventKeywords) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventAttribute.set_Level(System.Diagnostics.Tracing.EventLevel) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventAttribute.set_Message(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventAttribute.set_Tags(System.Diagnostics.Tracing.EventTags) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventAttribute.set_Task(System.Diagnostics.Tracing.EventTask) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventAttribute.set_Version(System.Byte) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventChannelAttribute.set_Enabled(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventChannelAttribute.set_EventChannelType(System.Diagnostics.Tracing.EventChannelType) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventCommandEventArgs.set_Arguments(System.Collections.Generic.IDictionary<System.String,System.String>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventCommandEventArgs.set_Command(System.Diagnostics.Tracing.EventCommand) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventDataAttribute.set_Name(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventFieldAttribute.set_Format(System.Diagnostics.Tracing.EventFieldFormat) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventFieldAttribute.set_Tags(System.Diagnostics.Tracing.EventFieldTags) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventListener.add_EventWritten(System.EventHandler<System.Diagnostics.Tracing.EventWrittenEventArgs>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventListener.remove_EventWritten(System.EventHandler<System.Diagnostics.Tracing.EventWrittenEventArgs>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventPayload.<GetEnumerator>d__17..ctor(System.Int32) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventPayload.<GetEnumerator>d__17.Dispose() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventPayload.<GetEnumerator>d__17.Reset() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventPipeEventDispatcher.EventListenerSubscription.set_Level(System.Diagnostics.Tracing.EventLevel) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventPipeEventDispatcher.EventListenerSubscription.set_MatchAnyKeywords(System.Diagnostics.Tracing.EventKeywords) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventPipeEventProvider.Callback(System.Byte*,System.Int32,System.Byte,System.Int64,System.Int64,Interop.Advapi32.EVENT_FILTER_DESCRIPTOR*,System.Void*) | [UnmanagedCallersOnlyAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventSource.WriteCleanup(System.Runtime.InteropServices.GCHandle*,System.Int32) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventSourceAttribute.set_Guid(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventSourceAttribute.set_LocalizationResources(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventSourceAttribute.set_Name(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventSourceCreatedEventArgs.set_EventSource(System.Diagnostics.Tracing.EventSource) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventWrittenEventArgs.set_Payload(System.Collections.ObjectModel.ReadOnlyCollection<System.Object>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.EventWrittenEventArgs.set_TimeStamp(System.DateTime) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.FrameworkEventSource.ThreadPoolDequeueWork(System.Int64) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.FrameworkEventSource.ThreadPoolDequeueWorkObject(System.Object) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.FrameworkEventSource.ThreadPoolEnqueueWork(System.Int64) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.FrameworkEventSource.ThreadPoolEnqueueWorkObject(System.Object) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.FrameworkEventSource.ThreadTransferReceive(System.Int64,System.Int32,System.String) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.FrameworkEventSource.ThreadTransferReceiveObj(System.Object,System.Int32,System.String) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.FrameworkEventSource.ThreadTransferSend(System.Int64,System.Int32,System.String,System.Boolean,System.Int32,System.Int32) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.FrameworkEventSource.ThreadTransferSendObj(System.Object,System.Int32,System.String,System.Boolean,System.Int32,System.Int32) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.FrameworkEventSource.WriteEvent(System.Int32,System.Int64,System.Int32,System.String) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.FrameworkEventSource.WriteEvent(System.Int32,System.Int64,System.Int32,System.String,System.Boolean,System.Int32,System.Int32) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.IncrementingCounterPayload.<get_ForEnumeration>d__39..ctor(System.Int32) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Diagnostics.Tracing.IncrementingCounterPayload.<get_ForEnumeration>d__39.Dispose() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Diagnostics.Tracing.IncrementingCounterPayload.<get_ForEnumeration>d__39.Reset() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Diagnostics.Tracing.IncrementingCounterPayload.set_CounterType(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.IncrementingCounterPayload.set_DisplayName(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.IncrementingCounterPayload.set_DisplayRateTimeScale(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.IncrementingCounterPayload.set_DisplayUnits(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.IncrementingCounterPayload.set_Increment(System.Double) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.IncrementingCounterPayload.set_IntervalSec(System.Single) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.IncrementingCounterPayload.set_Metadata(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.IncrementingCounterPayload.set_Name(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.IncrementingCounterPayload.set_Series(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.IncrementingEventCounter.set_DisplayRateTimeScale(System.TimeSpan) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.IncrementingEventCounterPayloadType.set_Payload(System.Diagnostics.Tracing.IncrementingCounterPayload) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.IncrementingPollingCounter.set_DisplayRateTimeScale(System.TimeSpan) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.IncrementingPollingCounterPayloadType.set_Payload(System.Diagnostics.Tracing.IncrementingCounterPayload) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.<LogThreadPoolIOEnqueue>g____PInvoke\|10_0(System.IntPtr,System.IntPtr,System.Int32,System.UInt16) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.AppDomainAssemblyResolveHandlerInvoked(System.UInt16,System.String,System.String,System.String,System.String) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.AppDomainLoad_V1(System.UInt64,System.UInt32,System.String,System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.AppDomainMemAllocated(System.UInt64,System.UInt64,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.AppDomainMemSurvived(System.UInt64,System.UInt64,System.UInt64,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.AppDomainUnload_V1(System.UInt64,System.UInt32,System.String,System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.AssemblyLoadContextResolvingHandlerInvoked(System.UInt16,System.String,System.String,System.String,System.String,System.String) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.AssemblyLoadFromResolveHandlerInvoked(System.UInt16,System.String,System.Boolean,System.String,System.String) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.AssemblyLoadStart(System.UInt16,System.String,System.String,System.String,System.String,System.String) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.AssemblyLoadStop(System.UInt16,System.String,System.String,System.String,System.String,System.String,System.Boolean,System.String,System.String,System.Boolean) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.AssemblyLoad_V1(System.UInt64,System.UInt64,System.UInt64,System.UInt32,System.String,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.AssemblyUnload_V1(System.UInt64,System.UInt64,System.UInt64,System.UInt32,System.String,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.AuthenticodeVerificationStart_V1(System.UInt32,System.UInt32,System.String,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.AuthenticodeVerificationStop_V1(System.UInt32,System.UInt32,System.String,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.BulkType(System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.CLRStackWalk(System.UInt16,System.Byte,System.Byte,System.UInt32) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.CodeSymbols(System.UInt64,System.UInt16,System.UInt16,System.UInt32) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ContentionLockCreated(System.IntPtr,System.IntPtr,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ContentionStart(System.Diagnostics.Tracing.NativeRuntimeEventSource.ContentionFlagsMap,System.UInt16,System.IntPtr,System.IntPtr,System.UInt64) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ContentionStop(System.Diagnostics.Tracing.NativeRuntimeEventSource.ContentionFlagsMap,System.UInt16,System.Double) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ContentionStop(System.Double) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.DCEndCompleteV2() | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.DCStartCompleteV2() | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.DebugExceptionProcessingEnd() | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.DebugExceptionProcessingStart() | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.DebugIPCEventEnd() | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.DebugIPCEventStart() | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.DecreaseMemoryPressure(System.UInt64,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.DestroyGCHandle(System.IntPtr,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.DomainModuleLoad_V1(System.UInt64,System.UInt64,System.UInt64,System.UInt32,System.UInt32,System.String,System.String,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.EventSource(System.Int32,System.String,System.String,System.String) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ExceptionCatchStart(System.UInt64,System.UInt64,System.String,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ExceptionCatchStop() | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ExceptionFilterStart(System.UInt64,System.UInt64,System.String,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ExceptionFilterStop() | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ExceptionFinallyStart(System.UInt64,System.UInt64,System.String,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ExceptionFinallyStop() | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ExceptionThrownStop() | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ExceptionThrown_V1(System.String,System.String,System.IntPtr,System.UInt32,System.UInt16,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ExecutionCheckpoint(System.UInt16,System.String,System.Int64) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.FinalizeObject(System.IntPtr,System.IntPtr,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCAllocationTick_V4(System.UInt32,System.UInt32,System.UInt16,System.UInt64,System.IntPtr,System.String,System.UInt32,System.IntPtr,System.UInt64) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCBulkEdge(System.UInt32,System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCBulkMovedObjectRanges(System.UInt32,System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCBulkNode(System.UInt32,System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCBulkRCW(System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCBulkRootCCW(System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCBulkRootConditionalWeakTableElementEdge(System.UInt32,System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCBulkRootEdge(System.UInt32,System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCBulkRootStaticVar(System.UInt32,System.UInt64,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCBulkSurvivingObjectRanges(System.UInt32,System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCCreateConcurrentThread_V1(System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCCreateSegment_V1(System.UInt64,System.UInt64,System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCDynamicEvent(System.String,System.UInt32) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCEnd_V1(System.UInt32,System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCFinalizersBegin_V1(System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCFinalizersEnd_V1(System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCFitBucketInfo(System.UInt16,System.UInt16,System.UInt64,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCFreeSegment_V1(System.UInt64,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCGenerationRange(System.Byte,System.IntPtr,System.UInt64,System.UInt64,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCGlobalHeapHistory_V4(System.UInt64,System.Int32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt16,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCHeapStats_V2(System.UInt64,System.UInt64,System.UInt64,System.UInt64,System.UInt64,System.UInt64,System.UInt64,System.UInt64,System.UInt64,System.UInt64,System.UInt32,System.UInt32,System.UInt32,System.UInt16,System.UInt64,System.UInt64) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCJoin_V2(System.UInt32,System.UInt32,System.UInt32,System.UInt16,System.UInt32) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCLOHCompact(System.UInt16,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCMarkFinalizeQueueRoots(System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCMarkHandles(System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCMarkOlderGenerationRoots(System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCMarkStackRoots(System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCMarkWithType(System.UInt32,System.UInt16,System.UInt32,System.UInt64) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCPerHeapHistory_V3(System.UInt16,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.IntPtr,System.UInt32) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCRestartEEBegin_V1(System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCRestartEEEnd_V1(System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCSampledObjectAllocationHigh(System.IntPtr,System.IntPtr,System.UInt32,System.UInt64,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCSampledObjectAllocationLow(System.IntPtr,System.IntPtr,System.UInt32,System.UInt64,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCStart_V2(System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt16,System.UInt64) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCSuspendEEBegin_V1(System.UInt32,System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCSuspendEEEnd_V1(System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCTerminateConcurrentThread_V1(System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GCTriggered(System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GenAwareBegin(System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.GenAwareEnd(System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ILStubCacheHit(System.UInt16,System.UInt64,System.UInt64,System.UInt32,System.String,System.String,System.String) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ILStubGenerated(System.UInt16,System.UInt64,System.UInt64,System.UInt32,System.UInt32,System.String,System.String,System.String,System.String,System.String,System.String) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.IOThreadCreate_V1(System.UInt32,System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.IOThreadRetire_V1(System.UInt32,System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.IOThreadTerminate_V1(System.UInt32,System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.IOThreadUnretire_V1(System.UInt32,System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.IncreaseMemoryPressure(System.UInt64,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.JitInstrumentationData(System.UInt16,System.UInt32,System.UInt32,System.UInt64) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.JitInstrumentationDataVerbose(System.UInt16,System.UInt32,System.UInt32,System.UInt64,System.UInt64,System.UInt32,System.String,System.String,System.String) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.KnownPathProbed(System.UInt16,System.String,System.UInt16,System.Int32) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogContentionLockCreated(System.IntPtr,System.IntPtr,System.UInt16) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogContentionStart(System.Diagnostics.Tracing.NativeRuntimeEventSource.ContentionFlagsMap,System.UInt16,System.IntPtr,System.IntPtr,System.UInt64) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogContentionStop(System.Diagnostics.Tracing.NativeRuntimeEventSource.ContentionFlagsMap,System.UInt16,System.Double) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolIODequeue(System.IntPtr,System.IntPtr,System.UInt16) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolIOEnqueue(System.IntPtr,System.IntPtr,System.Boolean,System.UInt16) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolIOPack(System.IntPtr,System.IntPtr,System.UInt16) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolMinMaxThreads(System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolWorkerThreadAdjustmentAdjustment(System.Double,System.UInt32,System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadAdjustmentReasonMap,System.UInt16) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolWorkerThreadAdjustmentSample(System.Double,System.UInt16) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolWorkerThreadAdjustmentStats(System.Double,System.Double,System.Double,System.Double,System.Double,System.Double,System.Double,System.Double,System.Double,System.UInt16,System.UInt16) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolWorkerThreadStart(System.UInt32,System.UInt32,System.UInt16) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolWorkerThreadStop(System.UInt32,System.UInt32,System.UInt16) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolWorkerThreadWait(System.UInt32,System.UInt32,System.UInt16) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolWorkingThreadCount(System.UInt32,System.UInt16) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.MethodDCEndV2(System.UInt64,System.UInt64,System.UInt64,System.UInt32,System.UInt32,System.UInt32) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.MethodDCEndVerboseV2(System.UInt64,System.UInt64,System.UInt64,System.UInt32,System.UInt32,System.UInt32,System.String,System.String,System.String) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.MethodDCStartV2(System.UInt64,System.UInt64,System.UInt64,System.UInt32,System.UInt32,System.UInt32) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.MethodDCStartVerboseV2(System.UInt64,System.UInt64,System.UInt64,System.UInt32,System.UInt32,System.UInt32,System.String,System.String,System.String) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.MethodDetails(System.UInt64,System.UInt64,System.UInt32,System.UInt32,System.UInt64) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.MethodILToNativeMap_V1(System.UInt64,System.UInt64,System.Byte,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.MethodJitInliningFailed(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.Boolean,System.String,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.MethodJitInliningFailedAnsi(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.Boolean) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.MethodJitInliningSucceeded(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.MethodJitMemoryAllocatedForCode(System.UInt64,System.UInt64,System.UInt64,System.UInt64,System.UInt64,System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.MethodJitTailCallFailed(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.Boolean,System.String,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.MethodJitTailCallFailedAnsi(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.Boolean) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.MethodJitTailCallSucceeded(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.Boolean,System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.MethodJittingStarted_V1(System.UInt64,System.UInt64,System.UInt32,System.UInt32,System.String,System.String,System.String,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.MethodLoadVerbose_V2(System.UInt64,System.UInt64,System.UInt64,System.UInt32,System.UInt32,System.UInt32,System.String,System.String,System.String,System.UInt16,System.UInt64) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.MethodLoad_V2(System.UInt64,System.UInt64,System.UInt64,System.UInt32,System.UInt32,System.UInt32,System.UInt16,System.UInt64) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.MethodUnloadVerbose_V2(System.UInt64,System.UInt64,System.UInt64,System.UInt32,System.UInt32,System.UInt32,System.String,System.String,System.String,System.UInt16,System.UInt64) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.MethodUnload_V2(System.UInt64,System.UInt64,System.UInt64,System.UInt32,System.UInt32,System.UInt32,System.UInt16,System.UInt64) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ModuleDCEndV2(System.UInt64,System.UInt64,System.UInt32,System.UInt32,System.String,System.String) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ModuleDCStartV2(System.UInt64,System.UInt64,System.UInt32,System.UInt32,System.String,System.String) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ModuleLoad_V2(System.UInt64,System.UInt64,System.UInt32,System.UInt32,System.String,System.String,System.UInt16,System.Guid,System.UInt32,System.String,System.Guid,System.UInt32,System.String) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ModuleRangeLoad(System.UInt16,System.UInt64,System.UInt32,System.UInt32,System.Byte) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ModuleUnload_V2(System.UInt64,System.UInt64,System.UInt32,System.UInt32,System.String,System.String,System.UInt16,System.Guid,System.UInt32,System.String,System.Guid,System.UInt32,System.String) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.PinObjectAtGCTime(System.IntPtr,System.IntPtr,System.UInt64,System.String,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ProcessEvent(System.UInt32,System.UInt32,System.DateTime,System.Guid,System.Guid,System.ReadOnlySpan<System.Byte>) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ProfilerMessage(System.UInt16,System.String) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.R2RGetEntryPoint(System.UInt64,System.String,System.String,System.String,System.UInt64,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.R2RGetEntryPointStart(System.UInt64,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ResolutionAttempted(System.UInt16,System.String,System.UInt16,System.String,System.UInt16,System.String,System.String,System.String) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.RuntimeInformationStart(System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt32,System.Byte,System.String,System.Guid,System.String) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.SetGCHandle(System.IntPtr,System.IntPtr,System.UInt32,System.UInt32,System.UInt64,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.StrongNameVerificationStart_V1(System.UInt32,System.UInt32,System.String,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.StrongNameVerificationStop_V1(System.UInt32,System.UInt32,System.String,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadCreated(System.UInt64,System.UInt64,System.UInt32,System.UInt32,System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadCreating(System.IntPtr,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadDomainEnter(System.UInt64,System.UInt64,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadPoolIODequeue(System.IntPtr,System.IntPtr,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadPoolIODequeue(System.Threading.NativeOverlapped*) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadPoolIODequeue(System.Threading.RegisteredWaitHandle) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadPoolIOEnqueue(System.IntPtr,System.IntPtr,System.Boolean,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadPoolIOEnqueue(System.Threading.NativeOverlapped*) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadPoolIOEnqueue(System.Threading.RegisteredWaitHandle) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadPoolIOPack(System.IntPtr,System.IntPtr,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadPoolIOPack(System.Threading.NativeOverlapped*) | [NonEventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadPoolMinMaxThreads(System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadPoolWorkerThreadAdjustmentAdjustment(System.Double,System.UInt32,System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadAdjustmentReasonMap,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadPoolWorkerThreadAdjustmentSample(System.Double,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadPoolWorkerThreadAdjustmentStats(System.Double,System.Double,System.Double,System.Double,System.Double,System.Double,System.Double,System.Double,System.Double,System.UInt16,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadPoolWorkerThreadStart(System.UInt32,System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadPoolWorkerThreadStop(System.UInt32,System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadPoolWorkerThreadWait(System.UInt32,System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadPoolWorkingThreadCount(System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadRunning(System.IntPtr,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadTerminated(System.UInt64,System.UInt64,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadpoolSuspensionResumeThread(System.UInt32,System.UInt32) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadpoolSuspensionSuspendThread(System.UInt32,System.UInt32) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.TieredCompilationBackgroundJitStart(System.UInt16,System.UInt32) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.TieredCompilationBackgroundJitStop(System.UInt16,System.UInt32,System.UInt32) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.TieredCompilationPause(System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.TieredCompilationResume(System.UInt16,System.UInt32) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.TieredCompilationSettings(System.UInt16,System.UInt32) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.TypeLoadStart(System.UInt32,System.UInt16) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.TypeLoadStop(System.UInt32,System.UInt16,System.UInt16,System.UInt64,System.String) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.WorkerThreadCreate(System.UInt32,System.UInt32) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.WorkerThreadRetire(System.UInt32,System.UInt32) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.WorkerThreadTerminate(System.UInt32,System.UInt32) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.WorkerThreadUnretire(System.UInt32,System.UInt32) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.YieldProcessorMeasurement(System.UInt16,System.Double,System.Double) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.PollingPayloadType.set_Payload(System.Diagnostics.Tracing.CounterPayload) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Diagnostics.Tracing.RuntimeEventSource.LogAppContextSwitch(System.String,System.Int32) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.RuntimeEventSource.ProcessorCount(System.Int32) | [EventAttribute(...)] | -| System.Void System.Diagnostics.Tracing.TraceLoggingMetadataCollector.set_Tags(System.Diagnostics.Tracing.EventFieldTags) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Enum.ThrowInvalidRuntimeType(System.Type) | [DoesNotReturnAttribute(...)] | -| System.Void System.Environment.Exit(System.Int32) | [DoesNotReturnAttribute(...)] | -| System.Void System.Environment.FailFast(System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.Environment.FailFast(System.String,System.Exception) | [DoesNotReturnAttribute(...)] | -| System.Void System.Environment.FailFast(System.String,System.Exception,System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.Environment._Exit(System.Int32) | [DoesNotReturnAttribute(...)] | -| System.Void System.Exception.<ToString>g__Write\|60_0(System.String,System.Span<System.Char>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Exception.OnDeserialized(System.Runtime.Serialization.StreamingContext) | [OnDeserializedAttribute(...)] | -| System.Void System.Exception.SetCurrentStackTrace() | [StackTraceHiddenAttribute(...)] | -| System.Void System.GC.<RegisterNoGCRegionCallback>g__Callback\|67_0(System.GC.NoGCRegionCallbackFinalizerWorkItem*) | [CompilerGeneratedAttribute(...)] | -| System.Void System.GC.<RegisterNoGCRegionCallback>g__Callback\|67_0(System.GC.NoGCRegionCallbackFinalizerWorkItem*) | [UnmanagedCallersOnlyAttribute(...)] | -| System.Void System.GC.<RegisterNoGCRegionCallback>g__Free\|67_1(System.GC.NoGCRegionCallbackFinalizerWorkItem*) | [CompilerGeneratedAttribute(...)] | -| System.Void System.GC.ConfigCallback(System.Void*,System.Void*,System.Void*,System.GC.GCConfigurationType,System.Int64) | [UnmanagedCallersOnlyAttribute(...)] | -| System.Void System.GC.KeepAlive(System.Object) | [IntrinsicAttribute(...)] | -| System.Void System.Globalization.CalendarData.EnumCalendarInfoCallback(System.Char*,System.IntPtr) | [UnmanagedCallersOnlyAttribute(...)] | -| System.Void System.Globalization.CompareInfo.CheckCompareOptionsForCompare(System.Globalization.CompareOptions) | [StackTraceHiddenAttribute(...)] | -| System.Void System.Globalization.CompareInfo.OnDeserialized(System.Runtime.Serialization.StreamingContext) | [OnDeserializedAttribute(...)] | -| System.Void System.Globalization.CompareInfo.OnDeserializing(System.Runtime.Serialization.StreamingContext) | [OnDeserializingAttribute(...)] | -| System.Void System.Globalization.CompareInfo.OnSerializing(System.Runtime.Serialization.StreamingContext) | [OnSerializingAttribute(...)] | -| System.Void System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions) | [DoesNotReturnAttribute(...)] | -| System.Void System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions) | [StackTraceHiddenAttribute(...)] | -| System.Void System.Globalization.DateTimeFormatInfo.<ValidateStyles>g__ThrowInvalid\|229_0(System.Globalization.DateTimeStyles,System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Globalization.NumberFormatInfo.<ValidateParseStyleFloatingPoint>g__ThrowInvalid\|166_0(System.Globalization.NumberStyles) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Globalization.NumberFormatInfo.<ValidateParseStyleInteger>g__ThrowInvalid\|165_0(System.Globalization.NumberStyles) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Guid.GuidResult.SetFailure(System.Guid.ParseFailure) | [IsReadOnlyAttribute(...)] | -| System.Void System.Guid.ThrowBadGuidFormatSpecification() | [DoesNotReturnAttribute(...)] | -| System.Void System.Guid.ThrowGuidArrayCtorArgumentException() | [DoesNotReturnAttribute(...)] | -| System.Void System.Guid.ThrowGuidArrayCtorArgumentException() | [StackTraceHiddenAttribute(...)] | -| System.Void System.IO.BinaryWriter.<WriteCharsCommonWithoutLengthPrefix>g__WriteToOutStream\|39_0(System.Byte[],System.Int32,System.Int32,System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.IO.BufferedStream.<CopyToAsyncCore>d__68.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.BufferedStream.<DisposeAsync>d__33.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.BufferedStream.<FlushAsyncInternal>d__36.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.BufferedStream.<FlushWriteAsync>d__40.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.BufferedStream.<ReadFromUnderlyingStreamAsync>d__48.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.BufferedStream.<WriteToUnderlyingStreamAsync>d__59.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.Enumeration.FileSystemEntry.set_Directory(System.ReadOnlySpan<System.Char>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.IO.Enumeration.FileSystemEntry.set_OriginalRootDirectory(System.ReadOnlySpan<System.Char>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.IO.Enumeration.FileSystemEntry.set_RootDirectory(System.ReadOnlySpan<System.Char>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.IO.Enumeration.FileSystemEnumerable`1.set_ShouldIncludePredicate(System.IO.Enumeration.FileSystemEnumerable<!0>.FindPredicate) | [CompilerGeneratedAttribute(...)] | -| System.Void System.IO.Enumeration.FileSystemEnumerable`1.set_ShouldRecursePredicate(System.IO.Enumeration.FileSystemEnumerable<!0>.FindPredicate) | [CompilerGeneratedAttribute(...)] | -| System.Void System.IO.EnumerationOptions.set_AttributesToSkip(System.IO.FileAttributes) | [CompilerGeneratedAttribute(...)] | -| System.Void System.IO.EnumerationOptions.set_BufferSize(System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Void System.IO.EnumerationOptions.set_IgnoreInaccessible(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.IO.EnumerationOptions.set_MatchCasing(System.IO.MatchCasing) | [CompilerGeneratedAttribute(...)] | -| System.Void System.IO.EnumerationOptions.set_MatchType(System.IO.MatchType) | [CompilerGeneratedAttribute(...)] | -| System.Void System.IO.EnumerationOptions.set_RecurseSubdirectories(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.IO.EnumerationOptions.set_ReturnSpecialDirectories(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.IO.File.<<WriteAllBytesAsync>g__Core\|92_0>d.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.File.<InternalReadAllBytesAsync>d__90.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.File.<InternalReadAllBytesUnknownLengthAsync>d__91.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.File.<InternalReadAllLinesAsync>d__95.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.File.<InternalReadAllTextAsync>d__86.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.File.<InternalWriteAllLinesAsync>d__98.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.File.<IterateFileLinesAsync>d__110..ctor(System.Int32) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.File.<IterateFileLinesAsync>d__110.GetResult(System.Int16) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.File.<IterateFileLinesAsync>d__110.OnCompleted(System.Action<System.Object>,System.Object,System.Int16,System.Threading.Tasks.Sources.ValueTaskSourceOnCompletedFlags) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.File.<IterateFileLinesAsync>d__110.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.File.<WriteToFileAsync>d__108.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.FileStream.<DisposeAsync>d__57.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.FileSystem.<ResolveLinkTarget>g__GetLinkTargetFullPath\|46_0(System.Text.ValueStringBuilder,System.ReadOnlySpan<System.Char>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.IO.Strategies.BufferedFileStreamStrategy.<CopyToAsyncCore>d__57.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.Strategies.BufferedFileStreamStrategy.<DisposeAsync>d__27.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.Strategies.BufferedFileStreamStrategy.<FlushAsyncInternal>d__55.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.Strategies.BufferedFileStreamStrategy.<ReadAsyncSlowPath>d__37.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.Strategies.BufferedFileStreamStrategy.<ReadFromNonSeekableAsync>d__36.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.Strategies.BufferedFileStreamStrategy.<WriteAsyncSlowPath>d__48.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.Strategies.BufferedFileStreamStrategy.<WriteToNonSeekableAsync>d__47.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.Strategies.FileStreamStrategy.set_IsDerived(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.IO.Stream.<<CopyToAsync>g__Core\|27_0>d.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.Stream.<<ReadAsync>g__FinishReadAsync\|42_0>d.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.Stream.<FinishWriteAsync>d__61.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.Stream.<ReadAtLeastAsyncCore>d__46.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.StreamReader.<ReadAsyncInternal>d__69.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.StreamReader.<ReadBufferAsync>d__72.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.StreamReader.<ReadLineAsyncInternal>d__63.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.StreamReader.<ReadToEndAsyncInternal>d__66.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.StreamReader.<ThrowIfDisposed>g__ThrowObjectDisposedException\|73_0() | [CompilerGeneratedAttribute(...)] | -| System.Void System.IO.StreamReader.ThrowAsyncIOInProgress() | [DoesNotReturnAttribute(...)] | -| System.Void System.IO.StreamWriter.<<FlushAsyncInternal>g__Core\|76_0>d.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.StreamWriter.<DisposeAsyncCore>d__36.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.StreamWriter.<ThrowIfDisposed>g__ThrowObjectDisposedException\|77_0() | [CompilerGeneratedAttribute(...)] | -| System.Void System.IO.StreamWriter.<WriteAsyncInternal>d__64.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.StreamWriter.<WriteAsyncInternal>d__68.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.StreamWriter.ThrowAsyncIOInProgress() | [DoesNotReturnAttribute(...)] | -| System.Void System.IO.StringReader.ThrowObjectDisposedException_ReaderClosed() | [DoesNotReturnAttribute(...)] | -| System.Void System.IO.TextReader.<ReadBlockAsyncInternal>d__23.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.TextReader.<ReadToEndAsync>d__17.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.TextWriter.<<WriteAsync>g__WriteAsyncCore\|60_0>d.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IO.TextWriter.<<WriteLineAsync>g__WriteLineAsyncCore\|66_0>d.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.IntPtr..ctor(System.Int32) | [NonVersionableAttribute(...)] | -| System.Void System.IntPtr..ctor(System.Int64) | [NonVersionableAttribute(...)] | -| System.Void System.IntPtr..ctor(System.Void*) | [NonVersionableAttribute(...)] | -| System.Void System.LazyHelper.ThrowException() | [DoesNotReturnAttribute(...)] | -| System.Void System.LocalDataStoreSlot.set_Data(System.Threading.ThreadLocal<System.Object>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Math.ThrowMinMaxException`1(!0,!0) | [DoesNotReturnAttribute(...)] | -| System.Void System.Math.ThrowNegateTwosCompOverflow() | [DoesNotReturnAttribute(...)] | -| System.Void System.Math.ThrowNegateTwosCompOverflow() | [StackTraceHiddenAttribute(...)] | -| System.Void System.MemoryExtensions.CopyTo`1(!0[],System.Memory<!0>) | [ExtensionAttribute(...)] | -| System.Void System.MemoryExtensions.CopyTo`1(!0[],System.Span<!0>) | [ExtensionAttribute(...)] | -| System.Void System.MemoryExtensions.Replace`1(System.ReadOnlySpan<!0>,System.Span<!0>,!0,!0) | [ExtensionAttribute(...)] | -| System.Void System.MemoryExtensions.Replace`1(System.Span<!0>,!0,!0) | [ExtensionAttribute(...)] | -| System.Void System.MemoryExtensions.Reverse`1(System.Span<!0>) | [ExtensionAttribute(...)] | -| System.Void System.MemoryExtensions.Sort`1(System.Span<!0>) | [ExtensionAttribute(...)] | -| System.Void System.MemoryExtensions.Sort`1(System.Span<!0>,System.Comparison<!0>) | [ExtensionAttribute(...)] | -| System.Void System.MemoryExtensions.Sort`2(System.Span<!0>,!1) | [ExtensionAttribute(...)] | -| System.Void System.MemoryExtensions.Sort`2(System.Span<!0>,System.Span<!1>) | [ExtensionAttribute(...)] | -| System.Void System.MemoryExtensions.Sort`2(System.Span<!0>,System.Span<!1>,System.Comparison<!0>) | [ExtensionAttribute(...)] | -| System.Void System.MemoryExtensions.Sort`3(System.Span<!0>,System.Span<!1>,!2) | [ExtensionAttribute(...)] | -| System.Void System.MemoryExtensions.ThrowNullLowHighInclusive`1(!0,!0) | [DoesNotReturnAttribute(...)] | -| System.Void System.ModuleHandle.<ValidateModulePointer>g__ThrowInvalidOperationException\|11_0() | [CompilerGeneratedAttribute(...)] | -| System.Void System.ModuleHandle.<ValidateModulePointer>g__ThrowInvalidOperationException\|11_0() | [DoesNotReturnAttribute(...)] | -| System.Void System.ModuleHandle.<ValidateModulePointer>g__ThrowInvalidOperationException\|11_0() | [StackTraceHiddenAttribute(...)] | -| System.Void System.MulticastDelegate.CtorClosed(System.Object,System.IntPtr) | [DebuggerNonUserCodeAttribute(...)] | -| System.Void System.MulticastDelegate.CtorClosed(System.Object,System.IntPtr) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.MulticastDelegate.CtorClosedStatic(System.Object,System.IntPtr) | [DebuggerNonUserCodeAttribute(...)] | -| System.Void System.MulticastDelegate.CtorClosedStatic(System.Object,System.IntPtr) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.MulticastDelegate.CtorCollectibleClosedStatic(System.Object,System.IntPtr,System.IntPtr) | [DebuggerNonUserCodeAttribute(...)] | -| System.Void System.MulticastDelegate.CtorCollectibleClosedStatic(System.Object,System.IntPtr,System.IntPtr) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.MulticastDelegate.CtorCollectibleOpened(System.Object,System.IntPtr,System.IntPtr,System.IntPtr) | [DebuggerNonUserCodeAttribute(...)] | -| System.Void System.MulticastDelegate.CtorCollectibleOpened(System.Object,System.IntPtr,System.IntPtr,System.IntPtr) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.MulticastDelegate.CtorCollectibleVirtualDispatch(System.Object,System.IntPtr,System.IntPtr,System.IntPtr) | [DebuggerNonUserCodeAttribute(...)] | -| System.Void System.MulticastDelegate.CtorCollectibleVirtualDispatch(System.Object,System.IntPtr,System.IntPtr,System.IntPtr) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.MulticastDelegate.CtorOpened(System.Object,System.IntPtr,System.IntPtr) | [DebuggerNonUserCodeAttribute(...)] | -| System.Void System.MulticastDelegate.CtorOpened(System.Object,System.IntPtr,System.IntPtr) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.MulticastDelegate.CtorRTClosed(System.Object,System.IntPtr) | [DebuggerNonUserCodeAttribute(...)] | -| System.Void System.MulticastDelegate.CtorRTClosed(System.Object,System.IntPtr) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.MulticastDelegate.CtorVirtualDispatch(System.Object,System.IntPtr,System.IntPtr) | [DebuggerNonUserCodeAttribute(...)] | -| System.Void System.MulticastDelegate.CtorVirtualDispatch(System.Object,System.IntPtr,System.IntPtr) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.MulticastDelegate.ThrowNullThisInDelegateToInstance() | [DebuggerNonUserCodeAttribute(...)] | -| System.Void System.MulticastDelegate.ThrowNullThisInDelegateToInstance() | [DoesNotReturnAttribute(...)] | -| System.Void System.Nullable`1..ctor(!0) | [NonVersionableAttribute(...)] | -| System.Void System.Number.<AppendUnknownChar>g__AppendNonAsciiBytes\|115_0`1(System.Collections.Generic.ValueListBuilder<!0>,System.Char) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Number.ThrowFormatException`1(System.ReadOnlySpan<!0>) | [DoesNotReturnAttribute(...)] | -| System.Void System.Number.ThrowOverflowException(System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.Number.ThrowOverflowException`1() | [DoesNotReturnAttribute(...)] | -| System.Void System.Number.ThrowOverflowOrFormatException`2(System.Number.ParsingStatus,System.ReadOnlySpan<!0>) | [DoesNotReturnAttribute(...)] | -| System.Void System.Numerics.Plane..ctor(System.Numerics.Vector3,System.Single) | [IntrinsicAttribute(...)] | -| System.Void System.Numerics.Plane..ctor(System.Numerics.Vector4) | [IntrinsicAttribute(...)] | -| System.Void System.Numerics.Plane..ctor(System.Single,System.Single,System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Void System.Numerics.Quaternion..ctor(System.Numerics.Vector3,System.Single) | [IntrinsicAttribute(...)] | -| System.Void System.Numerics.Quaternion..ctor(System.Single,System.Single,System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Void System.Numerics.Vector2..ctor(System.Single) | [IntrinsicAttribute(...)] | -| System.Void System.Numerics.Vector2..ctor(System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Void System.Numerics.Vector2.CopyTo(System.Single[]) | [IsReadOnlyAttribute(...)] | -| System.Void System.Numerics.Vector2.CopyTo(System.Single[],System.Int32) | [IsReadOnlyAttribute(...)] | -| System.Void System.Numerics.Vector2.CopyTo(System.Span<System.Single>) | [IsReadOnlyAttribute(...)] | -| System.Void System.Numerics.Vector3..ctor(System.Numerics.Vector2,System.Single) | [IntrinsicAttribute(...)] | -| System.Void System.Numerics.Vector3..ctor(System.Single) | [IntrinsicAttribute(...)] | -| System.Void System.Numerics.Vector3..ctor(System.Single,System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Void System.Numerics.Vector3.CopyTo(System.Single[]) | [IsReadOnlyAttribute(...)] | -| System.Void System.Numerics.Vector3.CopyTo(System.Single[],System.Int32) | [IsReadOnlyAttribute(...)] | -| System.Void System.Numerics.Vector3.CopyTo(System.Span<System.Single>) | [IsReadOnlyAttribute(...)] | -| System.Void System.Numerics.Vector4..ctor(System.Numerics.Vector2,System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Void System.Numerics.Vector4..ctor(System.Numerics.Vector3,System.Single) | [IntrinsicAttribute(...)] | -| System.Void System.Numerics.Vector4..ctor(System.Single) | [IntrinsicAttribute(...)] | -| System.Void System.Numerics.Vector4..ctor(System.Single,System.Single,System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Void System.Numerics.Vector4.CopyTo(System.Single[]) | [IsReadOnlyAttribute(...)] | -| System.Void System.Numerics.Vector4.CopyTo(System.Single[],System.Int32) | [IsReadOnlyAttribute(...)] | -| System.Void System.Numerics.Vector4.CopyTo(System.Span<System.Single>) | [IsReadOnlyAttribute(...)] | -| System.Void System.Numerics.Vector.SetElementUnsafe(System.Numerics.Quaternion,System.Int32,System.Single) | [ExtensionAttribute(...)] | -| System.Void System.Numerics.Vector.SetElementUnsafe(System.Numerics.Vector2,System.Int32,System.Single) | [ExtensionAttribute(...)] | -| System.Void System.Numerics.Vector.SetElementUnsafe(System.Numerics.Vector3,System.Int32,System.Single) | [ExtensionAttribute(...)] | -| System.Void System.Numerics.Vector.SetElementUnsafe(System.Numerics.Vector4,System.Int32,System.Single) | [ExtensionAttribute(...)] | -| System.Void System.Numerics.Vector.SetElementUnsafe`1(System.Numerics.Vector<!0>,System.Int32,!0) | [ExtensionAttribute(...)] | -| System.Void System.Numerics.Vector.StoreAlignedNonTemporal`1(System.Numerics.Vector<!0>,!0*) | [ExtensionAttribute(...)] | -| System.Void System.Numerics.Vector.StoreAlignedNonTemporal`1(System.Numerics.Vector<!0>,!0*) | [IntrinsicAttribute(...)] | -| System.Void System.Numerics.Vector.StoreAligned`1(System.Numerics.Vector<!0>,!0*) | [ExtensionAttribute(...)] | -| System.Void System.Numerics.Vector.StoreAligned`1(System.Numerics.Vector<!0>,!0*) | [IntrinsicAttribute(...)] | -| System.Void System.Numerics.Vector.StoreUnsafe`1(System.Numerics.Vector<!0>,!0) | [ExtensionAttribute(...)] | -| System.Void System.Numerics.Vector.StoreUnsafe`1(System.Numerics.Vector<!0>,!0) | [IntrinsicAttribute(...)] | -| System.Void System.Numerics.Vector.StoreUnsafe`1(System.Numerics.Vector<!0>,!0,System.UIntPtr) | [ExtensionAttribute(...)] | -| System.Void System.Numerics.Vector.StoreUnsafe`1(System.Numerics.Vector<!0>,!0,System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Void System.Numerics.Vector.Store`1(System.Numerics.Vector<!0>,!0*) | [ExtensionAttribute(...)] | -| System.Void System.Numerics.Vector.Store`1(System.Numerics.Vector<!0>,!0*) | [IntrinsicAttribute(...)] | -| System.Void System.Numerics.Vector`1..ctor(!0) | [IntrinsicAttribute(...)] | -| System.Void System.Object..ctor() | [NonVersionableAttribute(...)] | -| System.Void System.Object.Finalize() | [NonVersionableAttribute(...)] | -| System.Void System.ObjectDisposedException.ThrowIf(System.Boolean,System.Object) | [StackTraceHiddenAttribute(...)] | -| System.Void System.ObjectDisposedException.ThrowIf(System.Boolean,System.Type) | [StackTraceHiddenAttribute(...)] | -| System.Void System.ObsoleteAttribute.set_DiagnosticId(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.ObsoleteAttribute.set_UrlFormat(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Progress`1.add_ProgressChanged(System.EventHandler<!0>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Progress`1.remove_ProgressChanged(System.EventHandler<!0>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Reflection.AssemblyNameFormatter.AppendQuoted(System.Text.ValueStringBuilder,System.String) | [ExtensionAttribute(...)] | -| System.Void System.Reflection.AssemblyNameParser.ThrowInvalidAssemblyName() | [DoesNotReturnAttribute(...)] | -| System.Void System.Reflection.Emit.RuntimeModuleBuilder.<SetFieldRVAContent>g____PInvoke\|27_0(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Byte*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.<DefineCustomAttribute>g____PInvoke\|8_0(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Int32,System.Byte*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.<SetMethodIL>g____PInvoke\|7_0(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Int32,System.Byte*,System.Int32,System.Byte*,System.Int32,System.Int32,System.Reflection.Emit.ExceptionHandler*,System.Int32,System.Int32*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.<SetPInvokeData>g____PInvoke\|20_0(System.Runtime.CompilerServices.QCallModule,System.UInt16*,System.UInt16*,System.Int32,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.SetPInvokeData(System.Runtime.CompilerServices.QCallModule,System.String,System.String,System.Int32,System.Int32) | [LibraryImportAttribute(...)] | -| System.Void System.Reflection.EventInfo.AddEventHandler(System.Object,System.Delegate) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Reflection.EventInfo.AddEventHandler(System.Object,System.Delegate) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.Reflection.EventInfo.RemoveEventHandler(System.Object,System.Delegate) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Reflection.EventInfo.RemoveEventHandler(System.Object,System.Delegate) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.Reflection.FieldInfo.SetValue(System.Object,System.Object) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Reflection.FieldInfo.SetValue(System.Object,System.Object) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.Reflection.MdFieldInfo.SetValue(System.Object,System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Globalization.CultureInfo) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Reflection.MdFieldInfo.SetValue(System.Object,System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Globalization.CultureInfo) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.Reflection.MdFieldInfo.SetValueDirect(System.TypedReference,System.Object) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Reflection.MdFieldInfo.SetValueDirect(System.TypedReference,System.Object) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.Reflection.MethodBaseInvoker.ThrowTargetParameterCountException() | [DoesNotReturnAttribute(...)] | -| System.Void System.Reflection.NullabilityInfo.set_ReadState(System.Reflection.NullabilityState) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Reflection.NullabilityInfo.set_WriteState(System.Reflection.NullabilityState) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Reflection.ObfuscateAssemblyAttribute.set_StripAfterObfuscation(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Reflection.ObfuscationAttribute.set_ApplyToMembers(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Reflection.ObfuscationAttribute.set_Exclude(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Reflection.ObfuscationAttribute.set_Feature(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Reflection.ObfuscationAttribute.set_StripAfterObfuscation(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Reflection.PropertyInfo.SetValue(System.Object,System.Object) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Reflection.PropertyInfo.SetValue(System.Object,System.Object) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.Reflection.PropertyInfo.SetValue(System.Object,System.Object,System.Object[]) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Reflection.PropertyInfo.SetValue(System.Object,System.Object,System.Object[]) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.Reflection.RtFieldInfo.SetValue(System.Object,System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Globalization.CultureInfo) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Reflection.RtFieldInfo.SetValue(System.Object,System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Globalization.CultureInfo) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.Reflection.RtFieldInfo.SetValueDirect(System.TypedReference,System.Object) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Reflection.RtFieldInfo.SetValueDirect(System.TypedReference,System.Object) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.Reflection.RuntimeAssembly.<GetModule>g____PInvoke\|52_0(System.Runtime.CompilerServices.QCallAssembly,System.UInt16*,System.Runtime.CompilerServices.ObjectHandleOnStack) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Reflection.RuntimeAssembly.<GetModules>g____PInvoke\|90_0(System.Runtime.CompilerServices.QCallAssembly,System.Int32,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Reflection.RuntimeAssembly.<GetTypeCore>g____PInvoke\|26_0(System.Runtime.CompilerServices.QCallAssembly,System.Byte*,System.IntPtr*,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Reflection.RuntimeAssembly.<GetTypeCoreIgnoreCase>g____PInvoke\|27_0(System.Runtime.CompilerServices.QCallAssembly,System.UInt16*,System.IntPtr*,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Reflection.RuntimeAssembly.<GetVersion>g____PInvoke\|72_0(System.Runtime.CompilerServices.QCallAssembly,System.Int32*,System.Int32*,System.Int32*,System.Int32*) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Reflection.RuntimeAssembly.<InternalLoad>g____PInvoke\|49_0(System.Reflection.NativeAssemblyNameParts*,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.CompilerServices.StackCrawlMarkHandle,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.CompilerServices.ObjectHandleOnStack) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Reflection.RuntimeAssembly.GetModule(System.Runtime.CompilerServices.QCallAssembly,System.String,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | -| System.Void System.Reflection.RuntimeAssembly.GetTypeCore(System.Runtime.CompilerServices.QCallAssembly,System.String,System.ReadOnlySpan<System.String>,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | -| System.Void System.Reflection.RuntimeAssembly.GetTypeCoreIgnoreCase(System.Runtime.CompilerServices.QCallAssembly,System.String,System.ReadOnlySpan<System.String>,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | -| System.Void System.Reflection.RuntimeAssembly.add__ModuleResolve(System.Reflection.ModuleResolveEventHandler) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Reflection.RuntimeAssembly.remove__ModuleResolve(System.Reflection.ModuleResolveEventHandler) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Reflection.RuntimeConstructorInfo.ThrowNoInvokeException() | [DoesNotReturnAttribute(...)] | -| System.Void System.Reflection.RuntimeMethodInfo.InvokePropertySetter(System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Globalization.CultureInfo) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Reflection.RuntimeMethodInfo.InvokePropertySetter(System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Globalization.CultureInfo) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.Reflection.RuntimeMethodInfo.ThrowNoInvokeException() | [DoesNotReturnAttribute(...)] | -| System.Void System.Reflection.RuntimePropertyInfo.SetValue(System.Object,System.Object,System.Object[]) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Reflection.RuntimePropertyInfo.SetValue(System.Object,System.Object,System.Object[]) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.Reflection.RuntimePropertyInfo.SetValue(System.Object,System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Reflection.RuntimePropertyInfo.SetValue(System.Object,System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.Reflection.TypeInfo.<GetDeclaredMethods>d__10..ctor(System.Int32) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Reflection.TypeInfo.<GetDeclaredMethods>d__10.Dispose() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Reflection.TypeInfo.<GetDeclaredMethods>d__10.Reset() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Reflection.TypeInfo.<get_DeclaredNestedTypes>d__22..ctor(System.Int32) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Reflection.TypeInfo.<get_DeclaredNestedTypes>d__22.Dispose() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Reflection.TypeInfo.<get_DeclaredNestedTypes>d__22.Reset() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Resources.ResourceFallbackManager.<GetEnumerator>d__5..ctor(System.Int32) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Resources.ResourceFallbackManager.<GetEnumerator>d__5.Dispose() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Resources.ResourceFallbackManager.<GetEnumerator>d__5.Reset() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start`1(!0) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start`1(!0) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.Start`1(!0) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.Runtime.CompilerServices.AsyncVoidMethodBuilder.Start`1(!0) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.Runtime.CompilerServices.CastHelpers.StelemRef(System.Array,System.IntPtr,System.Object) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Runtime.CompilerServices.CastHelpers.StelemRef(System.Array,System.IntPtr,System.Object) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.Runtime.CompilerServices.CastHelpers.StelemRef(System.Array,System.IntPtr,System.Object) | [StackTraceHiddenAttribute(...)] | -| System.Void System.Runtime.CompilerServices.CastHelpers.StelemRef_Helper(System.Object,System.Void*,System.Object) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Runtime.CompilerServices.CastHelpers.StelemRef_Helper(System.Object,System.Void*,System.Object) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.Runtime.CompilerServices.CastHelpers.StelemRef_Helper(System.Object,System.Void*,System.Object) | [StackTraceHiddenAttribute(...)] | -| System.Void System.Runtime.CompilerServices.CastHelpers.StelemRef_Helper_NoCacheLookup(System.Object,System.Void*,System.Object) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Runtime.CompilerServices.CastHelpers.StelemRef_Helper_NoCacheLookup(System.Object,System.Void*,System.Object) | [DebuggerStepThroughAttribute(...)] | -| System.Void System.Runtime.CompilerServices.CastHelpers.StelemRef_Helper_NoCacheLookup(System.Object,System.Void*,System.Object) | [StackTraceHiddenAttribute(...)] | -| System.Void System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute.set_IsOptional(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.GetResult() | [StackTraceHiddenAttribute(...)] | -| System.Void System.Runtime.CompilerServices.ContractHelper.TriggerFailure(System.Diagnostics.Contracts.ContractFailureKind,System.String,System.String,System.String,System.Exception) | [DebuggerNonUserCodeAttribute(...)] | -| System.Void System.Runtime.CompilerServices.ContractHelper.add_InternalContractFailed(System.EventHandler<System.Diagnostics.Contracts.ContractFailedEventArgs>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.CompilerServices.ContractHelper.remove_InternalContractFailed(System.EventHandler<System.Diagnostics.Contracts.ContractFailedEventArgs>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.CompilerServices.InternalsVisibleToAttribute.set_AllInternalsVisible(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.CompilerServices.RuntimeCompatibilityAttribute.set_WrapNonExceptionThrows(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.DispatchTailCalls(System.IntPtr,delegate* managed<IntPtr,Byte&,PortableTailCallFrame*,Void>,System.Byte) | [StackTraceHiddenAttribute(...)] | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.InitializeArray(System.Array,System.RuntimeFieldHandle) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.CompilerServices.TaskAwaiter.GetResult() | [StackTraceHiddenAttribute(...)] | -| System.Void System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task,System.Threading.Tasks.ConfigureAwaitOptions) | [StackTraceHiddenAttribute(...)] | -| System.Void System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task) | [StackTraceHiddenAttribute(...)] | -| System.Void System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(System.Threading.Tasks.Task,System.Threading.Tasks.ConfigureAwaitOptions) | [StackTraceHiddenAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.CopyBlock(System.Byte,System.Byte,System.UInt32) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.CopyBlock(System.Byte,System.Byte,System.UInt32) | [NonVersionableAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.CopyBlock(System.Void*,System.Void*,System.UInt32) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.CopyBlock(System.Void*,System.Void*,System.UInt32) | [NonVersionableAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.CopyBlockUnaligned(System.Byte,System.Byte,System.UInt32) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.CopyBlockUnaligned(System.Byte,System.Byte,System.UInt32) | [NonVersionableAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.CopyBlockUnaligned(System.Void*,System.Void*,System.UInt32) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.CopyBlockUnaligned(System.Void*,System.Void*,System.UInt32) | [NonVersionableAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.Copy`1(!0,System.Void*) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.Copy`1(!0,System.Void*) | [NonVersionableAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.Copy`1(System.Void*,!0) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.Copy`1(System.Void*,!0) | [NonVersionableAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.InitBlock(System.Byte,System.Byte,System.UInt32) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.InitBlock(System.Byte,System.Byte,System.UInt32) | [NonVersionableAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.InitBlock(System.Void*,System.Byte,System.UInt32) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.InitBlock(System.Void*,System.Byte,System.UInt32) | [NonVersionableAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.InitBlockUnaligned(System.Byte,System.Byte,System.UInt32) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.InitBlockUnaligned(System.Byte,System.Byte,System.UInt32) | [NonVersionableAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.InitBlockUnaligned(System.Void*,System.Byte,System.UInt32) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.InitBlockUnaligned(System.Void*,System.Byte,System.UInt32) | [NonVersionableAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.SkipInit`1(!0) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.SkipInit`1(!0) | [NonVersionableAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.WriteUnaligned`1(System.Byte,!0) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.WriteUnaligned`1(System.Byte,!0) | [NonVersionableAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.WriteUnaligned`1(System.Void*,!0) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.WriteUnaligned`1(System.Void*,!0) | [NonVersionableAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.Write`1(System.Void*,!0) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.CompilerServices.Unsafe.Write`1(System.Void*,!0) | [NonVersionableAttribute(...)] | -| System.Void System.Runtime.CompilerServices.UnsafeAccessorAttribute.set_Name(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.ControlledExecution.ResetAbortThread() | [SuppressGCTransitionAttribute(...)] | -| System.Void System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() | [DoesNotReturnAttribute(...)] | -| System.Void System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() | [StackTraceHiddenAttribute(...)] | -| System.Void System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw(System.Exception) | [DoesNotReturnAttribute(...)] | -| System.Void System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw(System.Exception) | [StackTraceHiddenAttribute(...)] | -| System.Void System.Runtime.InteropServices.ComWrappers.<GetIUnknownImplInternal>g____PInvoke\|25_0(System.IntPtr*,System.IntPtr*,System.IntPtr*) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.InteropServices.ComWrappers.SetGlobalInstanceRegisteredForMarshalling(System.Int64) | [SuppressGCTransitionAttribute(...)] | -| System.Void System.Runtime.InteropServices.ComWrappers.SetGlobalInstanceRegisteredForTrackerSupport(System.Int64) | [SuppressGCTransitionAttribute(...)] | -| System.Void System.Runtime.InteropServices.LibraryImportAttribute.set_EntryPoint(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.InteropServices.LibraryImportAttribute.set_SetLastError(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.InteropServices.LibraryImportAttribute.set_StringMarshalling(System.Runtime.InteropServices.StringMarshalling) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.InteropServices.LibraryImportAttribute.set_StringMarshallingCustomType(System.Type) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.InteropServices.Marshalling.MarshalUsingAttribute.set_ConstantElementCount(System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.InteropServices.Marshalling.MarshalUsingAttribute.set_CountElementName(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.InteropServices.Marshalling.MarshalUsingAttribute.set_ElementIndirectionDepth(System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.InteropServices.MemoryMarshal.<<ToEnumerable>g__FromArray\|18_2>d`1..ctor(System.Int32) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Runtime.InteropServices.MemoryMarshal.<<ToEnumerable>g__FromArray\|18_2>d`1.Dispose() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Runtime.InteropServices.MemoryMarshal.<<ToEnumerable>g__FromArray\|18_2>d`1.Reset() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Runtime.InteropServices.MemoryMarshal.<<ToEnumerable>g__FromMemoryManager\|18_1>d`1..ctor(System.Int32) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Runtime.InteropServices.MemoryMarshal.<<ToEnumerable>g__FromMemoryManager\|18_1>d`1.Dispose() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Runtime.InteropServices.MemoryMarshal.<<ToEnumerable>g__FromMemoryManager\|18_1>d`1.Reset() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Runtime.InteropServices.MemoryMarshal.<<ToEnumerable>g__FromString\|18_0>d`1..ctor(System.Int32) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Runtime.InteropServices.MemoryMarshal.<<ToEnumerable>g__FromString\|18_0>d`1.Dispose() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Runtime.InteropServices.MemoryMarshal.<<ToEnumerable>g__FromString\|18_0>d`1.Reset() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Runtime.InteropServices.NFloat..ctor(System.Double) | [NonVersionableAttribute(...)] | -| System.Void System.Runtime.InteropServices.NFloat..ctor(System.Single) | [NonVersionableAttribute(...)] | -| System.Void System.Runtime.InteropServices.PosixSignalContext.set_Cancel(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.InteropServices.PosixSignalContext.set_Signal(System.Runtime.InteropServices.PosixSignal) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.InteropServices.PosixSignalRegistration.<OnPosixSignal>g__HandleSignal\|10_0(System.Object) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector64.CopyTo`1(System.Runtime.Intrinsics.Vector64<!0>,!0[]) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector64.CopyTo`1(System.Runtime.Intrinsics.Vector64<!0>,!0[],System.Int32) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector64.CopyTo`1(System.Runtime.Intrinsics.Vector64<!0>,System.Span<!0>) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector64.SetElementUnsafe`1(System.Runtime.Intrinsics.Vector64<!0>,System.Int32,!0) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector64.StoreAlignedNonTemporal`1(System.Runtime.Intrinsics.Vector64<!0>,!0*) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector64.StoreAlignedNonTemporal`1(System.Runtime.Intrinsics.Vector64<!0>,!0*) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector64.StoreAligned`1(System.Runtime.Intrinsics.Vector64<!0>,!0*) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector64.StoreAligned`1(System.Runtime.Intrinsics.Vector64<!0>,!0*) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector64.StoreUnsafe`1(System.Runtime.Intrinsics.Vector64<!0>,!0) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector64.StoreUnsafe`1(System.Runtime.Intrinsics.Vector64<!0>,!0) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector64.StoreUnsafe`1(System.Runtime.Intrinsics.Vector64<!0>,!0,System.UIntPtr) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector64.StoreUnsafe`1(System.Runtime.Intrinsics.Vector64<!0>,!0,System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector64.Store`1(System.Runtime.Intrinsics.Vector64<!0>,!0*) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector64.Store`1(System.Runtime.Intrinsics.Vector64<!0>,!0*) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector128.CopyTo`1(System.Runtime.Intrinsics.Vector128<!0>,!0[]) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector128.CopyTo`1(System.Runtime.Intrinsics.Vector128<!0>,!0[],System.Int32) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector128.CopyTo`1(System.Runtime.Intrinsics.Vector128<!0>,System.Span<!0>) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector128.SetElementUnsafe`1(System.Runtime.Intrinsics.Vector128<!0>,System.Int32,!0) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector128.SetLowerUnsafe`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector128.SetUpperUnsafe`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector128.StoreAlignedNonTemporal`1(System.Runtime.Intrinsics.Vector128<!0>,!0*) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector128.StoreAlignedNonTemporal`1(System.Runtime.Intrinsics.Vector128<!0>,!0*) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector128.StoreAligned`1(System.Runtime.Intrinsics.Vector128<!0>,!0*) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector128.StoreAligned`1(System.Runtime.Intrinsics.Vector128<!0>,!0*) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector128.StoreLowerUnsafe`1(System.Runtime.Intrinsics.Vector128<!0>,!0,System.UIntPtr) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector128.StoreUnsafe`1(System.Runtime.Intrinsics.Vector128<!0>,!0) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector128.StoreUnsafe`1(System.Runtime.Intrinsics.Vector128<!0>,!0) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector128.StoreUnsafe`1(System.Runtime.Intrinsics.Vector128<!0>,!0,System.UIntPtr) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector128.StoreUnsafe`1(System.Runtime.Intrinsics.Vector128<!0>,!0,System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector128.Store`1(System.Runtime.Intrinsics.Vector128<!0>,!0*) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector128.Store`1(System.Runtime.Intrinsics.Vector128<!0>,!0*) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector256.CopyTo`1(System.Runtime.Intrinsics.Vector256<!0>,!0[]) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector256.CopyTo`1(System.Runtime.Intrinsics.Vector256<!0>,!0[],System.Int32) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector256.CopyTo`1(System.Runtime.Intrinsics.Vector256<!0>,System.Span<!0>) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector256.SetElementUnsafe`1(System.Runtime.Intrinsics.Vector256<!0>,System.Int32,!0) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector256.SetLowerUnsafe`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector256.SetUpperUnsafe`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector256.StoreAlignedNonTemporal`1(System.Runtime.Intrinsics.Vector256<!0>,!0*) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector256.StoreAlignedNonTemporal`1(System.Runtime.Intrinsics.Vector256<!0>,!0*) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector256.StoreAligned`1(System.Runtime.Intrinsics.Vector256<!0>,!0*) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector256.StoreAligned`1(System.Runtime.Intrinsics.Vector256<!0>,!0*) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector256.StoreUnsafe`1(System.Runtime.Intrinsics.Vector256<!0>,!0) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector256.StoreUnsafe`1(System.Runtime.Intrinsics.Vector256<!0>,!0) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector256.StoreUnsafe`1(System.Runtime.Intrinsics.Vector256<!0>,!0,System.UIntPtr) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector256.StoreUnsafe`1(System.Runtime.Intrinsics.Vector256<!0>,!0,System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector256.Store`1(System.Runtime.Intrinsics.Vector256<!0>,!0*) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector256.Store`1(System.Runtime.Intrinsics.Vector256<!0>,!0*) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector512.CopyTo`1(System.Runtime.Intrinsics.Vector512<!0>,!0[]) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector512.CopyTo`1(System.Runtime.Intrinsics.Vector512<!0>,!0[],System.Int32) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector512.CopyTo`1(System.Runtime.Intrinsics.Vector512<!0>,System.Span<!0>) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector512.SetElementUnsafe`1(System.Runtime.Intrinsics.Vector512<!0>,System.Int32,!0) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector512.SetLowerUnsafe`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector512.SetUpperUnsafe`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector512.StoreAlignedNonTemporal`1(System.Runtime.Intrinsics.Vector512<!0>,!0*) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector512.StoreAlignedNonTemporal`1(System.Runtime.Intrinsics.Vector512<!0>,!0*) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector512.StoreAligned`1(System.Runtime.Intrinsics.Vector512<!0>,!0*) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector512.StoreAligned`1(System.Runtime.Intrinsics.Vector512<!0>,!0*) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector512.StoreUnsafe`1(System.Runtime.Intrinsics.Vector512<!0>,!0) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector512.StoreUnsafe`1(System.Runtime.Intrinsics.Vector512<!0>,!0) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector512.StoreUnsafe`1(System.Runtime.Intrinsics.Vector512<!0>,!0,System.UIntPtr) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector512.StoreUnsafe`1(System.Runtime.Intrinsics.Vector512<!0>,!0,System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector512.Store`1(System.Runtime.Intrinsics.Vector512<!0>,!0*) | [ExtensionAttribute(...)] | -| System.Void System.Runtime.Intrinsics.Vector512.Store`1(System.Runtime.Intrinsics.Vector512<!0>,!0*) | [IntrinsicAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.<InternalSetProfileRoot>g____PInvoke\|3_0(System.UInt16*) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.<InternalStartProfile>g____PInvoke\|4_0(System.UInt16*,System.IntPtr) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.<LoadFromPath>g____PInvoke\|5_0(System.IntPtr,System.UInt16*,System.UInt16*,System.Runtime.CompilerServices.ObjectHandleOnStack) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.<get_All>d__85..ctor(System.Int32) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.<get_All>d__85.Dispose() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.<get_All>d__85.Reset() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.<get_Assemblies>d__55..ctor(System.Int32) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.<get_Assemblies>d__55.Dispose() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.<get_Assemblies>d__55.Reset() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.InternalSetProfileRoot(System.String) | [LibraryImportAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.InternalStartProfile(System.String,System.IntPtr) | [LibraryImportAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.LoadFromPath(System.IntPtr,System.String,System.String,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.add_AssemblyLoad(System.AssemblyLoadEventHandler) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.add_AssemblyResolve(System.ResolveEventHandler) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.add_ResourceResolve(System.ResolveEventHandler) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.add_TypeResolve(System.ResolveEventHandler) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.add__resolving(System.Func<System.Reflection.Assembly,System.Reflection.AssemblyName,System.Runtime.Loader.AssemblyLoadContext>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.add__resolvingUnmanagedDll(System.Func<System.IntPtr,System.Reflection.Assembly,System.String>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.add__unloading(System.Action<System.Runtime.Loader.AssemblyLoadContext>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.remove_AssemblyLoad(System.AssemblyLoadEventHandler) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.remove_AssemblyResolve(System.ResolveEventHandler) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.remove_ResourceResolve(System.ResolveEventHandler) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.remove_TypeResolve(System.ResolveEventHandler) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.remove__resolving(System.Func<System.Reflection.Assembly,System.Reflection.AssemblyName,System.Runtime.Loader.AssemblyLoadContext>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.remove__resolvingUnmanagedDll(System.Func<System.IntPtr,System.Reflection.Assembly,System.String>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.Loader.AssemblyLoadContext.remove__unloading(System.Action<System.Runtime.Loader.AssemblyLoadContext>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.Loader.LibraryNameVariation.<DetermineLibraryNameVariations>d__5..ctor(System.Int32) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Runtime.Loader.LibraryNameVariation.<DetermineLibraryNameVariations>d__5.Dispose() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Runtime.Loader.LibraryNameVariation.<DetermineLibraryNameVariations>d__5.Reset() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Runtime.Serialization.DeserializationTracker.set_DeserializationInProgress(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.Serialization.SerializationInfo.set_IsAssemblyNameSetExplicit(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.Serialization.SerializationInfo.set_IsFullTypeNameSetExplicit(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.Versioning.ObsoletedOSPlatformAttribute.set_Url(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Runtime.Versioning.RequiresPreviewFeaturesAttribute.set_Url(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.RuntimeType.ActivatorCache.ctor>g__CtorNoopStub\|4_1(System.Object) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.AllowPartiallyTrustedCallersAttribute.set_PartialTrustVisibilityLevel(System.Security.PartialTrustVisibilityLevel) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.PermissionSet.Deny() | [ObsoleteAttribute(...)] | -| System.Void System.Security.Permissions.SecurityAttribute.set_Action(System.Security.Permissions.SecurityAction) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.Permissions.SecurityAttribute.set_Unrestricted(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.Permissions.SecurityPermissionAttribute.set_Assertion(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.Permissions.SecurityPermissionAttribute.set_BindingRedirects(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.Permissions.SecurityPermissionAttribute.set_ControlAppDomain(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.Permissions.SecurityPermissionAttribute.set_ControlDomainPolicy(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.Permissions.SecurityPermissionAttribute.set_ControlEvidence(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.Permissions.SecurityPermissionAttribute.set_ControlPolicy(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.Permissions.SecurityPermissionAttribute.set_ControlPrincipal(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.Permissions.SecurityPermissionAttribute.set_ControlThread(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.Permissions.SecurityPermissionAttribute.set_Execution(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.Permissions.SecurityPermissionAttribute.set_Flags(System.Security.Permissions.SecurityPermissionFlag) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.Permissions.SecurityPermissionAttribute.set_Infrastructure(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.Permissions.SecurityPermissionAttribute.set_RemotingConfiguration(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.Permissions.SecurityPermissionAttribute.set_SerializationFormatter(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.Permissions.SecurityPermissionAttribute.set_SkipVerification(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.Permissions.SecurityPermissionAttribute.set_UnmanagedCode(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.SecurityException.set_Demanded(System.Object) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.SecurityException.set_DenySetInstance(System.Object) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.SecurityException.set_FailedAssemblyInfo(System.Reflection.AssemblyName) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.SecurityException.set_GrantedSet(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.SecurityException.set_Method(System.Reflection.MethodInfo) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.SecurityException.set_PermissionState(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.SecurityException.set_PermissionType(System.Type) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.SecurityException.set_PermitOnlySetInstance(System.Object) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.SecurityException.set_RefusedSet(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.SecurityException.set_Url(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Security.SecurityRulesAttribute.set_SkipVerificationInFullTrust(System.Boolean) | [CompilerGeneratedAttribute(...)] | -| System.Void System.SpanHelpers.ThrowMustBeNullTerminatedString() | [DoesNotReturnAttribute(...)] | -| System.Void System.String.ThrowSubstringArgumentOutOfRange(System.Int32,System.Int32) | [DoesNotReturnAttribute(...)] | -| System.Void System.Text.DecoderExceptionFallbackBuffer.Throw(System.Byte[],System.Int32) | [DoesNotReturnAttribute(...)] | -| System.Void System.Text.DecoderFallbackBuffer.ThrowLastBytesRecursive(System.Byte[]) | [DoesNotReturnAttribute(...)] | -| System.Void System.Text.EncoderFallbackBuffer.ThrowLastCharRecursive(System.Int32) | [DoesNotReturnAttribute(...)] | -| System.Void System.Text.Encoding.ThrowBytesOverflow() | [DoesNotReturnAttribute(...)] | -| System.Void System.Text.Encoding.ThrowCharsOverflow() | [DoesNotReturnAttribute(...)] | -| System.Void System.Text.Encoding.ThrowCharsOverflow() | [StackTraceHiddenAttribute(...)] | -| System.Void System.Text.Encoding.ThrowConversionOverflow() | [DoesNotReturnAttribute(...)] | -| System.Void System.Text.Encoding.ThrowConversionOverflow() | [StackTraceHiddenAttribute(...)] | -| System.Void System.Text.TranscodingStream.<<DisposeAsync>g__DisposeAsyncCore\|30_0>d.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Text.TranscodingStream.<<ReadAsync>g__ReadAsyncCore\|41_0>d.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Text.TranscodingStream.<<WriteAsync>g__WriteAsyncCore\|50_0>d.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Text.TranscodingStream.<EnsurePreReadConditions>g__InitializeReadDataStructures\|33_0() | [CompilerGeneratedAttribute(...)] | -| System.Void System.Text.TranscodingStream.<EnsurePreWriteConditions>g__InitializeReadDataStructures\|34_0() | [CompilerGeneratedAttribute(...)] | -| System.Void System.Text.TranscodingStream.ThrowIfDisposed() | [StackTraceHiddenAttribute(...)] | -| System.Void System.Text.TranscodingStream.ThrowObjectDisposedException() | [DoesNotReturnAttribute(...)] | -| System.Void System.Text.TranscodingStream.ThrowObjectDisposedException() | [StackTraceHiddenAttribute(...)] | -| System.Void System.Text.UTF8Encoding.UTF8EncodingSealed.<GetMaxByteCount>g__ThrowArgumentException\|7_0(System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Text.UTF8Encoding.UTF8EncodingSealed.<GetMaxCharCount>g__ThrowArgumentException\|8_0(System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Text.Unicode.TextSegmentationUtility.Processor`1.set_CurrentCodeUnitOffset(System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Text.Unicode.TextSegmentationUtility.Processor`1.set_CurrentType(System.Text.Unicode.GraphemeClusterBreakType) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Threading.CancellationToken.ThrowOperationCanceledException() | [DoesNotReturnAttribute(...)] | -| System.Void System.Threading.CancellationTokenRegistration.<Dispose>g__WaitForCallbackIfNecessary\|3_0(System.Int64,System.Threading.CancellationTokenSource.CallbackNode) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Threading.CancellationTokenSource.Registrations.<EnterLock>g__Contention\|13_0(System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Threading.CancellationTokenSource.Registrations.<WaitForCallbackToCompleteAsync>d__12.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Threading.ExecutionContext.ThrowNullContext() | [DoesNotReturnAttribute(...)] | -| System.Void System.Threading.ExecutionContext.ThrowNullContext() | [StackTraceHiddenAttribute(...)] | -| System.Void System.Threading.Interlocked.MemoryBarrier() | [IntrinsicAttribute(...)] | -| System.Void System.Threading.Interlocked.ReadMemoryBarrier() | [IntrinsicAttribute(...)] | -| System.Void System.Threading.Monitor.ThrowLockTakenException() | [DoesNotReturnAttribute(...)] | -| System.Void System.Threading.PortableThreadPool.WaitThreadNode.set_Next(System.Threading.PortableThreadPool.WaitThreadNode) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Threading.RegisteredWaitHandle.set_TimeoutTimeMs(System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Threading.RegisteredWaitHandle.set_UserUnregisterWaitHandle(Microsoft.Win32.SafeHandles.SafeWaitHandle) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Threading.RegisteredWaitHandle.set_UserUnregisterWaitHandleValue(System.IntPtr) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Threading.RegisteredWaitHandle.set_WaitThread(System.Threading.PortableThreadPool.WaitThread) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Threading.SemaphoreSlim.<WaitUntilCountOrTimeoutAsync>d__31.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Threading.Tasks.Sources.ManualResetValueTaskSourceCoreShared.<ScheduleCapturedContext>g__ScheduleSynchronizationContext\|2_0(System.Threading.SynchronizationContext,System.Action<System.Object>,System.Object) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Threading.Tasks.Sources.ManualResetValueTaskSourceCoreShared.<ScheduleCapturedContext>g__ScheduleTaskScheduler\|2_1(System.Threading.Tasks.TaskScheduler,System.Action<System.Object>,System.Object) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1.ThrowForFailedGetResult() | [StackTraceHiddenAttribute(...)] | -| System.Void System.Threading.Tasks.Task.WhenAllPromise.<Invoke>g__HandleTask\|3_0(System.Threading.Tasks.Task,System.Threading.Tasks.Task.WhenAllPromise.<>c__DisplayClass3_0) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Threading.Tasks.TaskAsyncEnumerableExtensions.<ToBlockingEnumerable>d__3`1..ctor(System.Int32) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Threading.Tasks.TaskAsyncEnumerableExtensions.<ToBlockingEnumerable>d__3`1.Dispose() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Threading.Tasks.TaskAsyncEnumerableExtensions.<ToBlockingEnumerable>d__3`1.Reset() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Threading.Tasks.TaskScheduler.add_UnobservedTaskException(System.EventHandler<System.Threading.Tasks.UnobservedTaskExceptionEventArgs>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Threading.Tasks.TaskScheduler.remove_UnobservedTaskException(System.EventHandler<System.Threading.Tasks.UnobservedTaskExceptionEventArgs>) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Threading.Tasks.TaskToAsyncResult.TaskAsyncResult.ctor>b__2_0() | [CompilerGeneratedAttribute(...)] | -| System.Void System.Threading.Tasks.Task`1.<ConfigureAwait>g__ThrowForInvalidOptions\|36_0(System.Threading.Tasks.ConfigureAwaitOptions) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Threading.Tasks.ThreadPoolTaskScheduler.<FilterTasksFromWorkItems>d__6..ctor(System.Int32) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Threading.Tasks.ThreadPoolTaskScheduler.<FilterTasksFromWorkItems>d__6.Dispose() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Threading.Tasks.ThreadPoolTaskScheduler.<FilterTasksFromWorkItems>d__6.Reset() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.AwaitTaskContinuationScheduled(System.Int32,System.Int32,System.Int32) | [EventAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.DebugFacilityMessage1(System.String,System.String,System.String) | [EventAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.DebugFacilityMessage(System.String,System.String) | [EventAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.IncompleteAsyncMethod(System.Runtime.CompilerServices.IAsyncStateMachineBox) | [NonEventAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.IncompleteAsyncMethod(System.String) | [EventAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.NewID(System.Int32) | [EventAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.RunningContinuation(System.Int32,System.Int64) | [EventAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.RunningContinuation(System.Int32,System.Object) | [NonEventAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.RunningContinuationList(System.Int32,System.Int32,System.Int64) | [EventAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.RunningContinuationList(System.Int32,System.Int32,System.Object) | [NonEventAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.SetActivityId(System.Guid) | [EventAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.TaskCompleted(System.Int32,System.Int32,System.Int32,System.Boolean) | [EventAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.TaskScheduled(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32) | [EventAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.TaskStarted(System.Int32,System.Int32,System.Int32) | [EventAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.TaskWaitBegin(System.Int32,System.Int32,System.Int32,System.Threading.Tasks.TplEventSource.TaskWaitBehavior,System.Int32) | [EventAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.TaskWaitContinuationComplete(System.Int32) | [EventAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.TaskWaitContinuationStarted(System.Int32) | [EventAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.TaskWaitEnd(System.Int32,System.Int32,System.Int32) | [EventAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.TraceOperationBegin(System.Int32,System.String,System.Int64) | [EventAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.TraceOperationEnd(System.Int32,System.Threading.Tasks.AsyncCausalityStatus) | [EventAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.TraceOperationRelation(System.Int32,System.Threading.Tasks.CausalityRelation) | [EventAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.TraceSynchronousWorkBegin(System.Int32,System.Threading.Tasks.CausalitySynchronousWork) | [EventAttribute(...)] | -| System.Void System.Threading.Tasks.TplEventSource.TraceSynchronousWorkEnd(System.Threading.Tasks.CausalitySynchronousWork) | [EventAttribute(...)] | -| System.Void System.Threading.Tasks.ValueTask.ValueTaskSourceAsTask.cctor>g__ThrowUnexpectedStateForKnownCallback\|4_1(System.Object) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Threading.Tasks.ValueTask`1.ValueTaskSourceAsTask.cctor>g__ThrowUnexpectedStateForKnownCallback\|4_1(System.Object) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Threading.Thread.<InformThreadNameChange>g____PInvoke\|26_0(System.Threading.ThreadHandle,System.UInt16*,System.Int32) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Threading.Thread.InformThreadNameChange(System.Threading.ThreadHandle,System.String,System.Int32) | [LibraryImportAttribute(...)] | -| System.Void System.Threading.ThreadPool.<GetQueuedWorkItems>d__26..ctor(System.Int32) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Threading.ThreadPool.<GetQueuedWorkItems>d__26.Dispose() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Threading.ThreadPool.<GetQueuedWorkItems>d__26.Reset() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Threading.TimerQueue.<GetTimersForDebugger>d__7..ctor(System.Int32) | [DebuggerHiddenAttribute(...)] | -| System.Void System.Threading.TimerQueue.<GetTimersForDebugger>d__7.Dispose() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Threading.TimerQueue.<GetTimersForDebugger>d__7.Reset() | [DebuggerHiddenAttribute(...)] | -| System.Void System.Threading.TimerQueue.set_ActiveCount(System.Int64) | [CompilerGeneratedAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.Boolean,System.Boolean) | [IntrinsicAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.Boolean,System.Boolean) | [NonVersionableAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.Byte,System.Byte) | [IntrinsicAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.Byte,System.Byte) | [NonVersionableAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.Double,System.Double) | [IntrinsicAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.Double,System.Double) | [NonVersionableAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.Int16,System.Int16) | [IntrinsicAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.Int16,System.Int16) | [NonVersionableAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.Int32,System.Int32) | [IntrinsicAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.Int32,System.Int32) | [NonVersionableAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.Int64,System.Int64) | [IntrinsicAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.Int64,System.Int64) | [NonVersionableAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.IntPtr,System.IntPtr) | [IntrinsicAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.IntPtr,System.IntPtr) | [NonVersionableAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.SByte,System.SByte) | [IntrinsicAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.SByte,System.SByte) | [NonVersionableAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.Single,System.Single) | [IntrinsicAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.Single,System.Single) | [NonVersionableAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.UInt16,System.UInt16) | [IntrinsicAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.UInt16,System.UInt16) | [NonVersionableAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.UInt32,System.UInt32) | [IntrinsicAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.UInt32,System.UInt32) | [NonVersionableAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.UInt64,System.UInt64) | [IntrinsicAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.UInt64,System.UInt64) | [NonVersionableAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.UIntPtr,System.UIntPtr) | [IntrinsicAttribute(...)] | -| System.Void System.Threading.Volatile.Write(System.UIntPtr,System.UIntPtr) | [NonVersionableAttribute(...)] | -| System.Void System.Threading.Volatile.Write`1(!0,!0) | [IntrinsicAttribute(...)] | -| System.Void System.Threading.Volatile.Write`1(!0,!0) | [NonVersionableAttribute(...)] | -| System.Void System.Threading.WaitHandleExtensions.SetSafeWaitHandle(System.Threading.WaitHandle,Microsoft.Win32.SafeHandles.SafeWaitHandle) | [ExtensionAttribute(...)] | -| System.Void System.ThrowHelper.ArgumentOutOfRangeException_Enum_Value() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowAccessViolationException() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowAddingDuplicateWithKeyArgumentException`1(!0) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowAggregateException(System.Collections.Generic.List<System.Exception>) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentException(System.ExceptionResource) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentException(System.ExceptionResource,System.ExceptionArgument) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentException_Arg_CannotBeNaN() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentException_ArgumentNull_TypedRefType() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentException_Argument_IncompatibleArrayType() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentException_BadComparer(System.Object) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentException_CannotExtractScalar(System.ExceptionArgument) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentException_DestinationTooShort() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentException_HandleNotAsync(System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentException_HandleNotSync(System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentException_InvalidHandle(System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentException_OverlapAlignmentMismatch() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentException_TupleIncorrectType(System.Object) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentNullException(System.ExceptionArgument) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentNullException(System.ExceptionArgument,System.ExceptionResource) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRangeException() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRangeException(System.ExceptionArgument) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRangeException(System.ExceptionArgument,System.ExceptionResource) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRangeException(System.ExceptionArgument,System.Int32,System.ExceptionResource) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRangeException_NeedNonNegNum(System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRangeException_PrecisionTooLarge() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRangeException_SymbolDoesNotFit() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRange_BadHourMinuteSecond() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRange_BadYearMonthDay() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRange_DayNumber(System.Int32) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRange_IndexMustBeLessException() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRange_IndexMustBeLessOrEqualException() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRange_Month(System.Int32) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRange_Range`1(System.String,!0,!0,!0) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRange_TimeSpanTooLong() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRange_Year() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArraySegmentCtorValidationFailedExceptions(System.Array,System.Int32,System.Int32) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowArrayTypeMismatchException() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowCountArgumentOutOfRange_ArgumentOutOfRange_Count() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowEndOfFileException() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowFormatException_BadBoolean(System.ReadOnlySpan<System.Char>) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowFormatException_BadFormatSpecifier() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowFormatException_NeedSingleChar() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowFormatIndexOutOfRange() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowFormatInvalidString() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowFormatInvalidString(System.Int32,System.ExceptionResource) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowIndexArgumentOutOfRange_NeedNonNegNumException() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowIndexOutOfRangeException() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowInvalidOperationException() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowInvalidOperationException(System.ExceptionResource) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowInvalidOperationException(System.ExceptionResource,System.Exception) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowInvalidOperationException_ConcurrentOperationsNotSupported() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowInvalidOperationException_EnumCurrent(System.Int32) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowInvalidOperationException_HandleIsNotInitialized() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowInvalidOperationException_HandleIsNotPinned() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumEnded() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumNotStarted() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumOpCantHappen() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowInvalidOperationException_InvalidOperation_NoValue() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowInvalidOperationException_InvalidUtf8() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowInvalidTypeWithPointersNotSupported(System.Type) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowKeyNotFoundException`1(!0) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowLengthArgumentOutOfRange_ArgumentOutOfRange_NeedNonNegNum() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowNotSupportedException() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowNotSupportedException(System.ExceptionResource) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowNotSupportedException_UnreadableStream() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowNotSupportedException_UnseekableStream() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowNotSupportedException_UnwritableStream() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowObjectDisposedException(System.ExceptionResource) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowObjectDisposedException(System.Object) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowObjectDisposedException(System.Type) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowObjectDisposedException_FileClosed() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowObjectDisposedException_StreamClosed(System.String) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowOutOfMemoryException() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowOutOfMemoryException_StringTooLong() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowOverflowException() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowOverflowException_TimeSpanTooLong() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowRankException(System.ExceptionResource) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowSerializationException(System.ExceptionResource) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_IndexMustBeLess() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_IndexMustBeLessOrEqual() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowUnexpectedStateForKnownCallback(System.Object) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowValueArgumentOutOfRange_NeedNonNegNumException() | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowWrongKeyTypeArgumentException`1(!0,System.Type) | [DoesNotReturnAttribute(...)] | -| System.Void System.ThrowHelper.ThrowWrongValueTypeArgumentException`1(!0,System.Type) | [DoesNotReturnAttribute(...)] | -| System.Void System.TupleExtensions.Deconstruct`1(System.Tuple<!0>,!0) | [ExtensionAttribute(...)] | -| System.Void System.TupleExtensions.Deconstruct`2(System.Tuple<!0,!1>,!0,!1) | [ExtensionAttribute(...)] | -| System.Void System.TupleExtensions.Deconstruct`3(System.Tuple<!0,!1,!2>,!0,!1,!2) | [ExtensionAttribute(...)] | -| System.Void System.TupleExtensions.Deconstruct`4(System.Tuple<!0,!1,!2,!3>,!0,!1,!2,!3) | [ExtensionAttribute(...)] | -| System.Void System.TupleExtensions.Deconstruct`5(System.Tuple<!0,!1,!2,!3,!4>,!0,!1,!2,!3,!4) | [ExtensionAttribute(...)] | -| System.Void System.TupleExtensions.Deconstruct`6(System.Tuple<!0,!1,!2,!3,!4,!5>,!0,!1,!2,!3,!4,!5) | [ExtensionAttribute(...)] | -| System.Void System.TupleExtensions.Deconstruct`7(System.Tuple<!0,!1,!2,!3,!4,!5,!6>,!0,!1,!2,!3,!4,!5,!6) | [ExtensionAttribute(...)] | -| System.Void System.TupleExtensions.Deconstruct`8(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!7>>,!0,!1,!2,!3,!4,!5,!6,!7) | [ExtensionAttribute(...)] | -| System.Void System.TupleExtensions.Deconstruct`9(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!7,!8>>,!0,!1,!2,!3,!4,!5,!6,!7,!8) | [ExtensionAttribute(...)] | -| System.Void System.TupleExtensions.Deconstruct`10(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!7,!8,!9>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9) | [ExtensionAttribute(...)] | -| System.Void System.TupleExtensions.Deconstruct`11(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!7,!8,!9>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10) | [ExtensionAttribute(...)] | -| System.Void System.TupleExtensions.Deconstruct`12(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!7,!8,!9>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11) | [ExtensionAttribute(...)] | -| System.Void System.TupleExtensions.Deconstruct`13(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!7,!8,!9>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12) | [ExtensionAttribute(...)] | -| System.Void System.TupleExtensions.Deconstruct`14(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13) | [ExtensionAttribute(...)] | -| System.Void System.TupleExtensions.Deconstruct`15(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14>>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14) | [ExtensionAttribute(...)] | -| System.Void System.TupleExtensions.Deconstruct`16(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15>>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,!15) | [ExtensionAttribute(...)] | -| System.Void System.TupleExtensions.Deconstruct`17(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16>>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,!15,!16) | [ExtensionAttribute(...)] | -| System.Void System.TupleExtensions.Deconstruct`18(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17>>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,!15,!16,!17) | [ExtensionAttribute(...)] | -| System.Void System.TupleExtensions.Deconstruct`19(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17,!18>>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,!15,!16,!17,!18) | [ExtensionAttribute(...)] | -| System.Void System.TupleExtensions.Deconstruct`20(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17,!18,!19>>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,!15,!16,!17,!18,!19) | [ExtensionAttribute(...)] | -| System.Void System.TupleExtensions.Deconstruct`21(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17,!18,!19,!20>>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,!15,!16,!17,!18,!19,!20) | [ExtensionAttribute(...)] | -| System.Void System.UIntPtr..ctor(System.UInt32) | [NonVersionableAttribute(...)] | -| System.Void System.UIntPtr..ctor(System.UInt64) | [NonVersionableAttribute(...)] | -| System.Void System.UIntPtr..ctor(System.Void*) | [NonVersionableAttribute(...)] | -| System.Void System.Version.<TryFormatCore>g__ThrowArgumentException\|35_0`1(System.String) | [CompilerGeneratedAttribute(...)] | -| System.Void* System.IntPtr.ToPointer() | [NonVersionableAttribute(...)] | -| System.Void* System.IntPtr.op_Explicit(System.IntPtr) | [NonVersionableAttribute(...)] | -| System.Void* System.Runtime.CompilerServices.Unsafe.Add`1(System.Void*,System.Int32) | [IntrinsicAttribute(...)] | -| System.Void* System.Runtime.CompilerServices.Unsafe.Add`1(System.Void*,System.Int32) | [NonVersionableAttribute(...)] | -| System.Void* System.Runtime.CompilerServices.Unsafe.AsPointer`1(!0) | [IntrinsicAttribute(...)] | -| System.Void* System.Runtime.CompilerServices.Unsafe.AsPointer`1(!0) | [NonVersionableAttribute(...)] | -| System.Void* System.Runtime.CompilerServices.Unsafe.Subtract`1(System.Void*,System.Int32) | [IntrinsicAttribute(...)] | -| System.Void* System.Runtime.CompilerServices.Unsafe.Subtract`1(System.Void*,System.Int32) | [NonVersionableAttribute(...)] | -| System.Void* System.UIntPtr.ToPointer() | [NonVersionableAttribute(...)] | -| System.Void* System.UIntPtr.op_Explicit(System.UIntPtr) | [NonVersionableAttribute(...)] | -| System.__DTString | [IsByRefLikeAttribute(...)] | -| bool | [IsReadOnlyAttribute(...)] | -| bool | [RequiresLocationAttribute(...)] | -| bool | [ScopedRefAttribute(...)] | -| byte | [ConstantExpectedAttribute(...)] | -| byte | [IsReadOnlyAttribute(...)] | -| byte | [RequiresLocationAttribute(...)] | -| char | [IsReadOnlyAttribute(...)] | -| char[] | [ParamArrayAttribute(...)] | -| decimal | [IsReadOnlyAttribute(...)] | -| decimal | [NonVersionableAttribute(...)] | -| decimal | [ScopedRefAttribute(...)] | -| double | [IsReadOnlyAttribute(...)] | -| double | [RequiresLocationAttribute(...)] | -| double | [ScopedRefAttribute(...)] | -| float | [IsReadOnlyAttribute(...)] | -| float | [RequiresLocationAttribute(...)] | -| int | [IsReadOnlyAttribute(...)] | -| int | [RequiresLocationAttribute(...)] | -| int | [ScopedRefAttribute(...)] | -| int[] | [ParamArrayAttribute(...)] | -| long | [IsReadOnlyAttribute(...)] | -| long | [RequiresLocationAttribute(...)] | -| long[] | [ParamArrayAttribute(...)] | -| object | [NotNullAttribute(...)] | -| object[] | [ParamArrayAttribute(...)] | -| sbyte | [IsReadOnlyAttribute(...)] | -| sbyte | [RequiresLocationAttribute(...)] | -| short | [IsReadOnlyAttribute(...)] | -| short | [RequiresLocationAttribute(...)] | -| string | [AllowNullAttribute(...)] | -| string | [ConstantExpectedAttribute(...)] | -| string | [DisallowNullAttribute(...)] | -| string | [NonVersionableAttribute(...)] | -| string | [NotNullAttribute(...)] | -| string.Empty | [IntrinsicAttribute(...)] | -| string[] | [ParamArrayAttribute(...)] | -| uint | [IsReadOnlyAttribute(...)] | -| uint | [RequiresLocationAttribute(...)] | -| ulong | [IsReadOnlyAttribute(...)] | -| ulong | [RequiresLocationAttribute(...)] | -| ushort | [IsReadOnlyAttribute(...)] | -| ushort | [RequiresLocationAttribute(...)] | -| void* | [NotNullAttribute(...)] | -attrArgNamed -| Internal.Runtime.InteropServices.IsolatedComponentLoadContext Internal.Runtime.InteropServices.ComponentActivator.GetIsolatedComponentLoadContext(System.String) | [RequiresUnreferencedCodeAttribute(...)] | Url | https://aka.ms/dotnet-illink/nativehost | -| Interop.BOOL System.Reflection.RuntimeAssembly.GetIsCollectible(System.Runtime.CompilerServices.QCallAssembly) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_GetIsCollectible | -| Interop.BOOL System.RuntimeMethodHandle.GetIsCollectible(System.RuntimeMethodHandleInternal) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeMethodHandle_GetIsCollectible | -| Interop.BOOL System.RuntimeMethodHandle.IsCAVisibleFromDecoratedType(System.Runtime.CompilerServices.QCallTypeHandle,System.RuntimeMethodHandleInternal,System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.QCallModule) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeMethodHandle_IsCAVisibleFromDecoratedType | -| Interop.BOOL System.RuntimeTypeHandle.IsCollectible(System.Runtime.CompilerServices.QCallTypeHandle) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeTypeHandle_IsCollectible | -| Interop.BOOL System.Threading.Thread.YieldInternal() | [LibraryImportAttribute(...)] | EntryPoint | ThreadNative_YieldThread | -| System.AppDomain System.AppDomain.CreateDomain(System.String) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0024 | -| System.AppDomain System.AppDomain.CreateDomain(System.String) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Array System.Array.CreateInstance(System.Type,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | Justification | MDArrays of Rank != 1 can be created because they don't implement generic interfaces. | -| System.Array System.Array.CreateInstance(System.Type,System.Int32,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | Justification | MDArrays of Rank != 1 can be created because they don't implement generic interfaces. | -| System.Attribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Attribute | [AttributeUsageAttribute(...)] | Inherited | True | -| System.Attribute System.Diagnostics.Tracing.EventSource.GetCustomAttributeHelper(System.Reflection.MemberInfo,System.Type,System.Diagnostics.Tracing.EventManifestOptions) | [UnconditionalSuppressMessageAttribute(...)] | Justification | EnsureDescriptorsInitialized's use of GetType preserves this method which has dynamically accessed members requirements, but EnsureDescriptorsInitialized does not access this member and is safe to call. | -| System.AttributeUsageAttribute | [AttributeUsageAttribute(...)] | Inherited | True | -| System.AttributeUsageAttribute System.Reflection.CustomAttribute.GetAttributeUsage(System.RuntimeType) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Module.ResolveType is marked as RequiresUnreferencedCode because it relies on tokenswhich are not guaranteed to be stable across trimming. So if somebody hardcodes a token it could break.The usage here is not like that as all these tokens come from existing metadata loaded from some ILand so trimming has no effect (the tokens are read AFTER trimming occurred). | -| System.Boolean Interop.Globalization.GetJapaneseEraStartDate(System.Int32,System.Int32,System.Int32,System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | GlobalizationNative_GetJapaneseEraStartDate | -| System.Boolean Interop.Kernel32.CloseHandle(System.IntPtr) | [LibraryImportAttribute(...)] | SetLastError | True | -| System.Boolean Interop.Kernel32.ReleaseMutex(Microsoft.Win32.SafeHandles.SafeWaitHandle) | [LibraryImportAttribute(...)] | SetLastError | True | -| System.Boolean Interop.Kernel32.ReleaseSemaphore(Microsoft.Win32.SafeHandles.SafeWaitHandle,System.Int32,System.Int32) | [LibraryImportAttribute(...)] | SetLastError | True | -| System.Boolean Interop.Kernel32.ResetEvent(Microsoft.Win32.SafeHandles.SafeWaitHandle) | [LibraryImportAttribute(...)] | SetLastError | True | -| System.Boolean Interop.Kernel32.SetEvent(Microsoft.Win32.SafeHandles.SafeWaitHandle) | [LibraryImportAttribute(...)] | SetLastError | True | -| System.Boolean System.Attribute.Equals(System.Object) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Unused fields don't make a difference for equality | -| System.Boolean System.Diagnostics.Debugger.LaunchInternal() | [LibraryImportAttribute(...)] | EntryPoint | DebugDebugger_Launch | -| System.Boolean System.Diagnostics.StackFrameExtensions.HasMethod(System.Diagnostics.StackFrame) | [UnconditionalSuppressMessageAttribute(...)] | Justification | StackFrame.GetMethod is used to establish if method is available. | -| System.Boolean System.Diagnostics.Tracing.EventPipeInternal.GetNextEvent(System.UInt64,System.Diagnostics.Tracing.EventPipeEventInstanceData*) | [LibraryImportAttribute(...)] | EntryPoint | EventPipeInternal_GetNextEvent | -| System.Boolean System.Diagnostics.Tracing.EventPipeInternal.GetSessionInfo(System.UInt64,System.Diagnostics.Tracing.EventPipeSessionInfo*) | [LibraryImportAttribute(...)] | EntryPoint | EventPipeInternal_GetSessionInfo | -| System.Boolean System.Diagnostics.Tracing.EventPipeInternal.SignalSession(System.UInt64) | [LibraryImportAttribute(...)] | EntryPoint | EventPipeInternal_SignalSession | -| System.Boolean System.Diagnostics.Tracing.EventPipeInternal.WaitForSessionSignal(System.UInt64,System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | EventPipeInternal_WaitForSessionSignal | -| System.Boolean System.MdUtf8String.EqualsCaseInsensitive(System.Void*,System.Void*,System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | MdUtf8String_EqualsCaseInsensitive | -| System.Boolean System.Reflection.CustomAttribute.FilterCustomAttributeRecord(System.Reflection.MetadataToken,System.Reflection.MetadataImport,System.Reflection.RuntimeModule,System.Reflection.MetadataToken,System.RuntimeType,System.Boolean,System.RuntimeType.ListBuilder<System.Object>,System.RuntimeType,System.IRuntimeMethodInfo,System.Boolean) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Module.ResolveMethod and Module.ResolveType are marked as RequiresUnreferencedCode because they rely on tokenswhich are not guaranteed to be stable across trimming. So if somebody hardcodes a token it could break.The usage here is not like that as all these tokens come from existing metadata loaded from some ILand so trimming has no effect (the tokens are read AFTER trimming occurred). | -| System.Boolean System.Reflection.Emit.RuntimeTypeBuilder.IsAssignableFrom(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | Justification | The GetInterfaces technically requires all interfaces to be preservedBut in this case it acts only on TypeBuilder which is never trimmed (as it's runtime created). | -| System.Boolean System.Reflection.LoaderAllocatorScout.Destroy(System.IntPtr) | [LibraryImportAttribute(...)] | EntryPoint | LoaderAllocator_Destroy | -| System.Boolean System.Reflection.Metadata.AssemblyExtensions.InternalTryGetRawMetadata(System.Runtime.CompilerServices.QCallAssembly,System.Byte*,System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_InternalTryGetRawMetadata | -| System.Boolean System.Reflection.Metadata.MetadataUpdater.IsApplyUpdateSupported() | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_IsApplyUpdateSupported | -| System.Boolean System.Reflection.RuntimeAssembly.GetCodeBase(System.Runtime.CompilerServices.QCallAssembly,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_GetCodeBase | -| System.Boolean System.Resources.ResourceReader.<DeserializeObject>g__InitializeBinaryFormatterLocal\|5_0() | [UnconditionalSuppressMessageAttribute(...)] | Justification | InitializeBinaryFormatter will get trimmed out when AllowCustomResourceTypes is set to false. When set to true, we will already throw a warning for this feature switch, so we suppress this one in order forthe user to only get one error. | -| System.Boolean System.Runtime.CompilerServices.RuntimeHelpers.AreTypesEquivalent(System.Runtime.CompilerServices.MethodTable*,System.Runtime.CompilerServices.MethodTable*) | [LibraryImportAttribute(...)] | EntryPoint | MethodTable_AreTypesEquivalent | -| System.Boolean System.Runtime.InteropServices.ComWrappers.TryGetComInstanceInternal(System.Runtime.CompilerServices.ObjectHandleOnStack,System.IntPtr) | [LibraryImportAttribute(...)] | EntryPoint | ComWrappers_TryGetComInstance | -| System.Boolean System.Runtime.InteropServices.ComWrappers.TryGetObjectInternal(System.IntPtr,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | ComWrappers_TryGetObject | -| System.Boolean System.Runtime.InteropServices.ComWrappers.TryGetOrCreateComInterfaceForObjectInternal(System.Runtime.CompilerServices.ObjectHandleOnStack,System.Int64,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.InteropServices.CreateComInterfaceFlags,System.IntPtr) | [LibraryImportAttribute(...)] | EntryPoint | ComWrappers_TryGetOrCreateComInterfaceForObject | -| System.Boolean System.Runtime.InteropServices.ComWrappers.TryGetOrCreateObjectForComInstanceInternal(System.Runtime.CompilerServices.ObjectHandleOnStack,System.Int64,System.IntPtr,System.IntPtr,System.Runtime.InteropServices.CreateObjectFlags,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | ComWrappers_TryGetOrCreateObjectForComInstance | -| System.Boolean System.RuntimeTypeHandle._IsVisible(System.Runtime.CompilerServices.QCallTypeHandle) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeTypeHandle_IsVisible | -| System.Boolean System.Type.ImplementInterface(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | Justification | The GetInterfaces technically requires all interfaces to be preservedBut this method only compares the result against the passed in ifaceType.So if ifaceType exists, then trimming should have kept it implemented on any type. | -| System.Boolean System.ValueType.Equals(System.Object) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Trimmed fields don't make a difference for equality | -| System.Buffers.ArrayPoolEventSource | [EventSourceAttribute(...)] | Guid | 0866B2B8-5CEF-5DB9-2612-0C0FFD814A44 | -| System.Buffers.ArrayPoolEventSource | [EventSourceAttribute(...)] | Name | System.Buffers.ArrayPoolEventSource | -| System.Byte[] System.Diagnostics.Tracing.EventSource.CreateManifestAndDescriptors(System.Type,System.String,System.Diagnostics.Tracing.EventSource,System.Diagnostics.Tracing.EventManifestOptions) | [UnconditionalSuppressMessageAttribute(...)] | Justification | EnsureDescriptorsInitialized's use of GetType preserves this method which has dynamically accessed members requirements, but its use of this method satisfies these requirements because it passes in the result of GetType with the same annotations. | -| System.CLSCompliantAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.CLSCompliantAttribute | [AttributeUsageAttribute(...)] | Inherited | True | -| System.CodeDom.Compiler.GeneratedCodeAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.CodeDom.Compiler.GeneratedCodeAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Collections.KeyValuePairs | [DebuggerDisplayAttribute(...)] | Name | [{_key}] | -| System.Configuration.Assemblies.AssemblyHashAlgorithm System.Reflection.AssemblyName.HashAlgorithm | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0037 | -| System.Configuration.Assemblies.AssemblyHashAlgorithm System.Reflection.AssemblyName.HashAlgorithm | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Configuration.Assemblies.AssemblyHashAlgorithm System.Reflection.RuntimeAssembly.GetHashAlgorithm(System.Runtime.CompilerServices.QCallAssembly) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_GetHashAlgorithm | -| System.Configuration.Assemblies.AssemblyVersionCompatibility System.Reflection.AssemblyName.VersionCompatibility | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0037 | -| System.Configuration.Assemblies.AssemblyVersionCompatibility System.Reflection.AssemblyName.VersionCompatibility | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.ContextStaticAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Delegate System.Diagnostics.Tracing.PropertyValue.TypeHelper.GetGetMethod(System.Reflection.PropertyInfo,System.Type) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Instantiation over a reference type. See comments above. | -| System.Diagnostics.CodeAnalysis.AllowNullAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.DisallowNullAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.DoesNotReturnAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.DoesNotReturnIfAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.ExperimentalAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.MaybeNullAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.MemberNotNullAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Diagnostics.CodeAnalysis.MemberNotNullAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.NotNullAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.NotNullWhenAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.RequiresAssemblyFilesAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Diagnostics.CodeAnalysis.RequiresAssemblyFilesAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.StringSyntaxAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Diagnostics.CodeAnalysis.StringSyntaxAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.SuppressMessageAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Diagnostics.CodeAnalysis.SuppressMessageAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.CodeAnalysis.UnscopedRefAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Diagnostics.CodeAnalysis.UnscopedRefAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.ConditionalAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Diagnostics.Contracts.ContractAbbreviatorAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Diagnostics.Contracts.ContractArgumentValidatorAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Diagnostics.Contracts.ContractClassAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Diagnostics.Contracts.ContractClassAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.Contracts.ContractClassForAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Diagnostics.Contracts.ContractClassForAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.Contracts.ContractInvariantMethodAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Diagnostics.Contracts.ContractInvariantMethodAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.Contracts.ContractOptionAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Diagnostics.Contracts.ContractOptionAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.Contracts.ContractRuntimeIgnoredAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Diagnostics.Contracts.ContractRuntimeIgnoredAttribute | [AttributeUsageAttribute(...)] | Inherited | True | -| System.Diagnostics.Contracts.PureAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Diagnostics.Contracts.PureAttribute | [AttributeUsageAttribute(...)] | Inherited | True | -| System.Diagnostics.DebuggableAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Diagnostics.DebuggerBrowsableAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Diagnostics.DebuggerDisplayAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Diagnostics.DebuggerHiddenAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.DebuggerNonUserCodeAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.DebuggerStepThroughAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.DebuggerStepperBoundaryAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.DebuggerTypeProxyAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Diagnostics.DebuggerVisualizerAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Diagnostics.StackTraceHiddenAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.Tracing.EventDataAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Diagnostics.Tracing.FrameworkEventSource | [EventSourceAttribute(...)] | Guid | 8E9F5090-2D75-4d03-8A81-E5AFBF85DAF1 | -| System.Diagnostics.Tracing.FrameworkEventSource | [EventSourceAttribute(...)] | Name | System.Diagnostics.Eventing.FrameworkEventSource | -| System.Diagnostics.Tracing.NativeRuntimeEventSource | [EventSourceAttribute(...)] | Guid | E13C0D23-CCBC-4E12-931B-D9CC2EEE27E4 | -| System.Diagnostics.Tracing.NativeRuntimeEventSource | [EventSourceAttribute(...)] | Name | Microsoft-Windows-DotNETRuntime | -| System.Diagnostics.Tracing.RuntimeEventSource | [EventSourceAttribute(...)] | Guid | 49592C0F-5A05-516D-AA4B-A64E02026C89 | -| System.Diagnostics.Tracing.RuntimeEventSource | [EventSourceAttribute(...)] | Name | System.Runtime | -| System.Diagnostics.Tracing.TraceLoggingEventTypes System.Diagnostics.Tracing.EventSource.EventMetadata.get_TraceLoggingEventTypes() | [UnconditionalSuppressMessageAttribute(...)] | Justification | EnsureDescriptorsInitialized's use of GetType preserves this method which requires unreferenced code, but EnsureDescriptorsInitialized does not access this member and is safe to call. | -| System.Exception.SerializeObjectState | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0011 | -| System.Exception.SerializeObjectState | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.FlagsAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Func<System.Diagnostics.Tracing.PropertyValue,System.Diagnostics.Tracing.PropertyValue> System.Diagnostics.Tracing.PropertyValue.GetReferenceTypePropertyGetter(System.Reflection.PropertyInfo) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Instantiation over a reference type. See comments above. | -| System.GC.EnableNoGCRegionCallbackStatus System.GC._EnableNoGCRegionCallback(System.GC.NoGCRegionCallbackFinalizerWorkItem*,System.Int64) | [LibraryImportAttribute(...)] | EntryPoint | GCInterface_EnableNoGCRegionCallback | -| System.Globalization.CompareInfo.m_SortVersion | [OptionalFieldAttribute(...)] | VersionAdded | 3 | -| System.Globalization.CompareInfo.m_name | [OptionalFieldAttribute(...)] | VersionAdded | 2 | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyAndGetFunctionPointer(System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr) | [RequiresUnreferencedCodeAttribute(...)] | Url | https://aka.ms/dotnet-illink/nativehost | -| System.Int32 Interop.Globalization.GetICUVersion() | [LibraryImportAttribute(...)] | EntryPoint | GlobalizationNative_GetICUVersion | -| System.Int32 Interop.Globalization.GetLatestJapaneseEra() | [LibraryImportAttribute(...)] | EntryPoint | GlobalizationNative_GetLatestJapaneseEra | -| System.Int32 Interop.Globalization.GetSortVersion(System.IntPtr) | [LibraryImportAttribute(...)] | EntryPoint | GlobalizationNative_GetSortVersion | -| System.Int32 Interop.Globalization.LoadICU() | [LibraryImportAttribute(...)] | EntryPoint | GlobalizationNative_LoadICU | -| System.Int32 Interop.HostPolicy.<corehost_resolve_component_dependencies>g____PInvoke\|2_0(System.Byte*,System.IntPtr) | [UnmanagedCallConvAttribute(...)] | CallConvs | [System.Runtime.CompilerServices.CallConvCdecl] | -| System.Int32 Interop.HostPolicy.corehost_resolve_component_dependencies(System.String,Interop.HostPolicy.corehost_resolve_component_dependencies_result_fn) | [UnmanagedCallConvAttribute(...)] | CallConvs | [System.Runtime.CompilerServices.CallConvCdecl] | -| System.Int32 Interop.Kernel32.FormatMessage(System.Int32,System.IntPtr,System.UInt32,System.Int32,System.Void*,System.Int32,System.IntPtr) | [LibraryImportAttribute(...)] | EntryPoint | FormatMessageW | -| System.Int32 Interop.Kernel32.FormatMessage(System.Int32,System.IntPtr,System.UInt32,System.Int32,System.Void*,System.Int32,System.IntPtr) | [LibraryImportAttribute(...)] | SetLastError | True | -| System.Int32 System.AppDomain.ExecuteAssembly(System.String,System.String[],System.Byte[],System.Configuration.Assemblies.AssemblyHashAlgorithm) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0003 | -| System.Int32 System.AppDomain.ExecuteAssembly(System.String,System.String[],System.Byte[],System.Configuration.Assemblies.AssemblyHashAlgorithm) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Int32 System.Attribute.GetHashCode() | [UnconditionalSuppressMessageAttribute(...)] | Justification | Unused fields don't make a difference for hashcode quality | -| System.Int32 System.Diagnostics.Tracing.EventPipeInternal.EventActivityIdControl(System.UInt32,System.Guid) | [LibraryImportAttribute(...)] | EntryPoint | EventPipeInternal_EventActivityIdControl | -| System.Int32 System.Diagnostics.Tracing.EventSource.GetHelperCallFirstArg(System.Reflection.MethodInfo) | [UnconditionalSuppressMessageAttribute(...)] | Justification | The method calls MethodBase.GetMethodBody. Trimming application can change IL of various methodswhich can lead to change of behavior. This method only uses this to validate usage of event source APIs.In the worst case it will not be able to determine the value it's looking for and will not performany validation. | -| System.Int32 System.Environment.GetProcessorCount() | [LibraryImportAttribute(...)] | EntryPoint | Environment_GetProcessorCount | -| System.Int32 System.GC._EndNoGCRegion() | [LibraryImportAttribute(...)] | EntryPoint | GCInterface_EndNoGCRegion | -| System.Int32 System.GC._RefreshMemoryLimit(System.GC.GCHeapHardLimitInfo) | [LibraryImportAttribute(...)] | EntryPoint | GCInterface_RefreshMemoryLimit | -| System.Int32 System.GC._StartNoGCRegion(System.Int64,System.Boolean,System.Int64,System.Boolean) | [LibraryImportAttribute(...)] | EntryPoint | GCInterface_StartNoGCRegion | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.GetMemberRef(System.Runtime.CompilerServices.QCallModule,System.Runtime.CompilerServices.QCallModule,System.Int32,System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | ModuleBuilder_GetMemberRef | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.GetMemberRefOfFieldInfo(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Runtime.CompilerServices.QCallTypeHandle,System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | ModuleBuilder_GetMemberRefOfFieldInfo | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.GetMemberRefOfMethodInfo(System.Runtime.CompilerServices.QCallModule,System.Int32,System.RuntimeMethodHandleInternal) | [LibraryImportAttribute(...)] | EntryPoint | ModuleBuilder_GetMemberRefOfMethodInfo | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.GetTokenFromTypeSpec(System.Runtime.CompilerServices.QCallModule,System.Byte[],System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | ModuleBuilder_GetTokenFromTypeSpec | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.DefineMethodSpec(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Byte[],System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | TypeBuilder_DefineMethodSpec | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.GetTokenFromSig(System.Runtime.CompilerServices.QCallModule,System.Byte[],System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | TypeBuilder_GetTokenFromSig | -| System.Int32 System.Threading.LowLevelLifoSemaphore.WaitNative(Microsoft.Win32.SafeHandles.SafeWaitHandle,System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | WaitHandle_CorWaitOnePrioritizedNative | -| System.Int64 System.GC.GetTotalMemory() | [LibraryImportAttribute(...)] | EntryPoint | GCInterface_GetTotalMemory | -| System.Int64 System.GC._GetGenerationBudget(System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | GCInterface_GetGenerationBudget | -| System.Int64 System.Threading.Monitor.GetLockContentionCount() | [LibraryImportAttribute(...)] | EntryPoint | ObjectNative_GetMonitorLockContentionCount | -| System.IntPtr Internal.Runtime.InteropServices.ComponentActivator.InternalGetFunctionPointer(System.Runtime.Loader.AssemblyLoadContext,System.String,System.String,System.IntPtr) | [RequiresUnreferencedCodeAttribute(...)] | Url | https://aka.ms/dotnet-illink/nativehost | -| System.IntPtr Interop.HostPolicy.corehost_set_error_writer(System.IntPtr) | [UnmanagedCallConvAttribute(...)] | CallConvs | [System.Runtime.CompilerServices.CallConvCdecl] | -| System.IntPtr System.ComAwareWeakReference.ObjectToComWeakRef(System.Runtime.CompilerServices.ObjectHandleOnStack,System.Int64) | [LibraryImportAttribute(...)] | EntryPoint | ObjectToComWeakRef | -| System.IntPtr System.Diagnostics.Tracing.EventPipeInternal.DefineEvent(System.IntPtr,System.UInt32,System.Int64,System.UInt32,System.UInt32,System.Void*,System.UInt32) | [LibraryImportAttribute(...)] | EntryPoint | EventPipeInternal_DefineEvent | -| System.IntPtr System.GC._RegisterFrozenSegment(System.IntPtr,System.IntPtr) | [LibraryImportAttribute(...)] | EntryPoint | GCInterface_RegisterFrozenSegment | -| System.IntPtr System.Runtime.CompilerServices.RuntimeHelpers.AllocateTypeAssociatedMemory(System.Runtime.CompilerServices.QCallTypeHandle,System.UInt32) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeTypeHandle_AllocateTypeAssociatedMemory | -| System.IntPtr System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate`1(!0) | [UnconditionalSuppressMessageAttribute(...)] | Justification | AOT compilers can see the T. | -| System.IntPtr System.Runtime.InteropServices.Marshal.OffsetOf(System.Type,System.String) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Trimming doesn't affect types eligible for marshalling. Different exception for invalid inputs doesn't matter. | -| System.IntPtr System.Runtime.Loader.AssemblyLoadContext.GetLoadContextForAssembly(System.Runtime.CompilerServices.QCallAssembly) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_GetLoadContextForAssembly | -| System.IntPtr System.Runtime.Loader.AssemblyLoadContext.InitializeAssemblyLoadContext(System.IntPtr,System.Boolean,System.Boolean) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_InitializeAssemblyLoadContext | -| System.IntPtr System.RuntimeMethodHandle.GetFunctionPointer(System.RuntimeMethodHandleInternal) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeMethodHandle_GetFunctionPointer | -| System.IntPtr System.RuntimeTypeHandle.FreeGCHandle(System.Runtime.CompilerServices.QCallTypeHandle,System.IntPtr) | [LibraryImportAttribute(...)] | EntryPoint | QCall_FreeGCHandleForTypeHandle | -| System.IntPtr System.RuntimeTypeHandle.GetGCHandle(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.InteropServices.GCHandleType) | [LibraryImportAttribute(...)] | EntryPoint | QCall_GetGCHandleForTypeHandle | -| System.NonSerializedAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Object System.MarshalByRefObject.GetLifetimeService() | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0010 | -| System.Object System.MarshalByRefObject.GetLifetimeService() | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Object System.MarshalByRefObject.InitializeLifetimeService() | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0010 | -| System.Object System.MarshalByRefObject.InitializeLifetimeService() | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Object System.Reflection.ParameterInfo.GetRealObject(System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Object System.Reflection.ParameterInfo.GetRealObject(System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Object System.Runtime.InteropServices.Marshal.BindToMoniker(System.String) | [RequiresUnreferencedCodeAttribute(...)] | Url | https://aka.ms/dotnet-illink/com | -| System.Object System.RuntimeType.<CreateInstanceImpl>g__CreateInstanceLocal\|145_0(System.Boolean) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Implementation detail of Activator that linker intrinsically recognizes | -| System.Object System.RuntimeTypeHandle.CreateInstanceForAnotherGenericParameter(System.RuntimeType,System.RuntimeType) | [UnconditionalSuppressMessageAttribute(...)] | Justification | The parameter 'type' is passed by ref to QCallTypeHandle which only instantiatesthe type using the public parameterless constructor and doesn't modify it | -| System.Object System.RuntimeTypeHandle.CreateInstanceForAnotherGenericParameter(System.RuntimeType,System.RuntimeType,System.RuntimeType) | [UnconditionalSuppressMessageAttribute(...)] | Justification | The parameter 'type' is passed by ref to QCallTypeHandle which only instantiatesthe type using the public parameterless constructor and doesn't modify it | -| System.Object[] System.Diagnostics.Tracing.EventSource.SerializeEventArgs(System.Int32,System.Object[]) | [UnconditionalSuppressMessageAttribute(...)] | Justification | EnsureDescriptorsInitialized's use of GetType preserves this method which requires unreferenced code, but EnsureDescriptorsInitialized does not access this member and is safe to call. | -| System.ObsoleteAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.ParamArrayAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.ParamArrayAttribute | [AttributeUsageAttribute(...)] | Inherited | True | -| System.Reflection.Assembly Internal.Runtime.InteropServices.IsolatedComponentLoadContext.Load(System.Reflection.AssemblyName) | [UnconditionalSuppressMessageAttribute(...)] | Justification | The trimmer warning is added to the constructor of this class since this method is a virtual one. | -| System.Reflection.Assembly System.Reflection.Assembly.LoadFromResolveHandler(System.Object,System.ResolveEventArgs) | [UnconditionalSuppressMessageAttribute(...)] | Justification | The assembly is loaded by specifying a path outside of the single-file bundle, the location of the path will not be empty if the path exist, otherwise it will be handled as null | -| System.Reflection.Assembly System.Reflection.Assembly.ReflectionOnlyLoad(System.Byte[]) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0018 | -| System.Reflection.Assembly System.Reflection.Assembly.ReflectionOnlyLoad(System.Byte[]) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Reflection.Assembly System.Reflection.Assembly.ReflectionOnlyLoad(System.String) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0018 | -| System.Reflection.Assembly System.Reflection.Assembly.ReflectionOnlyLoad(System.String) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Reflection.Assembly System.Reflection.Assembly.ReflectionOnlyLoadFrom(System.String) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0018 | -| System.Reflection.Assembly System.Reflection.Assembly.ReflectionOnlyLoadFrom(System.String) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Reflection.Assembly System.Runtime.Loader.AssemblyLoadContext.GetFirstResolvedAssemblyFromResolvingEvent(System.Reflection.AssemblyName) | [UnconditionalSuppressMessageAttribute(...)] | Justification | The code handles the Assembly.Location equals null | -| System.Reflection.Assembly System.Runtime.Loader.AssemblyLoadContext.ResolveSatelliteAssembly(System.Reflection.AssemblyName) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Satellite assemblies have no code in them and loading is not a problem | -| System.Reflection.Assembly System.Runtime.Loader.AssemblyLoadContext.ResolveSatelliteAssembly(System.Reflection.AssemblyName) | [UnconditionalSuppressMessageAttribute(...)] | Justification | This call is fine because native call runs before this and checks BindSatelliteResourceFromBundle | -| System.Reflection.AssemblyAlgorithmIdAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Reflection.AssemblyCompanyAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Reflection.AssemblyConfigurationAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Reflection.AssemblyCopyrightAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Reflection.AssemblyCultureAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Reflection.AssemblyDefaultAliasAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Reflection.AssemblyDelaySignAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Reflection.AssemblyDescriptionAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Reflection.AssemblyFileVersionAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Reflection.AssemblyFlagsAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Reflection.AssemblyInformationalVersionAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Reflection.AssemblyKeyFileAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Reflection.AssemblyKeyNameAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Reflection.AssemblyMetadataAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Reflection.AssemblyMetadataAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Reflection.AssemblyNameFlags System.Reflection.RuntimeAssembly.GetFlags(System.Runtime.CompilerServices.QCallAssembly) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_GetFlags | -| System.Reflection.AssemblyProductAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Reflection.AssemblySignatureKeyAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Reflection.AssemblySignatureKeyAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Reflection.AssemblyTitleAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Reflection.AssemblyTrademarkAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Reflection.AssemblyVersionAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Reflection.ConstructorInfo System.Reflection.Emit.TypeBuilder.GetConstructor(System.Type,System.Reflection.ConstructorInfo) | [UnconditionalSuppressMessageAttribute(...)] | Justification | MakeGenericType is only called on a TypeBuilder which is not subject to trimming | -| System.Reflection.Emit.ConstructorBuilder System.Reflection.Emit.RuntimeTypeBuilder.DefineConstructorNoLock(System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type[],System.Type[][],System.Type[][]) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Reflection.Emit is not subject to trimming | -| System.Reflection.Emit.ConstructorBuilder System.Reflection.Emit.RuntimeTypeBuilder.DefineTypeInitializerCore() | [UnconditionalSuppressMessageAttribute(...)] | Justification | Reflection.Emit is not subject to trimming | -| System.Reflection.Emit.MethodBuilder System.Reflection.Emit.RuntimeTypeBuilder.DefineMethodCore(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Reflection.Emit is not subject to trimming | -| System.Reflection.Emit.RuntimeConstructorBuilder System.Reflection.Emit.RuntimeTypeBuilder.DefineDefaultConstructorNoLock(System.Reflection.MethodAttributes) | [UnconditionalSuppressMessageAttribute(...)] | Justification | GetConstructor is only called on a TypeBuilderInstantiation which is not subject to trimming | -| System.Reflection.Emit.RuntimeConstructorBuilder System.Reflection.Emit.RuntimeTypeBuilder.DefineDefaultConstructorNoLock(System.Reflection.MethodAttributes) | [UnconditionalSuppressMessageAttribute(...)] | Justification | MakeGenericType is only called on a TypeBuilderInstantiation which is not subject to trimming | -| System.Reflection.EventInfo System.Attribute.GetParentDefinition(System.Reflection.EventInfo) | [UnconditionalSuppressMessageAttribute(...)] | Justification | rtAdd.DeclaringType is guaranteed to have the specified event because rtAdd.GetParentDefinition() returned a non-null MethodInfo. | -| System.Reflection.FieldAttributes.NotSerialized | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0050 | -| System.Reflection.FieldAttributes.NotSerialized | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Reflection.FieldInfo System.Reflection.Emit.TypeBuilder.GetField(System.Type,System.Reflection.FieldInfo) | [UnconditionalSuppressMessageAttribute(...)] | Justification | MakeGenericType is only called on a TypeBuilder which is not subject to trimming | -| System.Reflection.FieldInfo[] System.Diagnostics.Tracing.ManifestBuilder.<CreateManifestString>g__GetEnumFields\|19_0(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Trimmer does not trim enums | -| System.Reflection.MemberInfo System.Type.GetMemberWithSameMetadataDefinitionAs(System.Reflection.MemberInfo) | [UnconditionalSuppressMessageAttribute(...)] | Justification | This is finding the MemberInfo with the same MetadataToken as specified MemberInfo. If the specified MemberInfo exists and wasn't trimmed, then the current Type's MemberInfo couldn't have been trimmed. | -| System.Reflection.Metadata.MetadataUpdateHandlerAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Reflection.MethodBase System.DefaultBinder.BindToMethod(System.Reflection.BindingFlags,System.Reflection.MethodBase[],System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],System.Object) | [UnconditionalSuppressMessageAttribute(...)] | Justification | AOT compiler ensures params arrays are created for reflection-invokable methods | -| System.Reflection.MethodBase System.Reflection.Emit.RuntimeModuleBuilder.GetGenericMethodBaseDefinition(System.Reflection.MethodBase) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Module.ResolveMethod is marked as RequiresUnreferencedCode because it relies on tokens which are not guaranteed to be stable across trimming. So if somebody hardcodes a token it could break. The usage here is not like that as all these tokens come from existing metadata loaded from some IL and so trimming has no effect (the tokens are read AFTER trimming occurred). | -| System.Reflection.MethodBase System.RuntimeType.GetMethodBase(System.RuntimeType,System.RuntimeMethodHandleInternal) | [UnconditionalSuppressMessageAttribute(...)] | Justification | The code in this method looks up the method by name, but it always starts with a method handle.To get here something somewhere had to get the method handle and thus the method must exist. | -| System.Reflection.MethodInfo System.Reflection.Emit.TypeBuilder.GetMethod(System.Type,System.Reflection.MethodInfo) | [UnconditionalSuppressMessageAttribute(...)] | Justification | MakeGenericType is only called on a TypeBuilder which is not subject to trimming | -| System.Reflection.MethodInfo[] System.Diagnostics.StackTrace.<TryResolveStateMachineMethod>g__GetDeclaredMethods\|28_0(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Using Reflection to find the state machine's corresponding method is safe because the corresponding method is the only caller of the state machine. If the state machine is present, the corresponding method will be, too. | -| System.Reflection.MethodInfo[] System.Reflection.TypeInfo.<GetDeclaredMethods>g__GetDeclaredOnlyMethods\|10_0(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | Justification | The yield return state machine doesn't propagate annotations | -| System.Reflection.ObfuscateAssemblyAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Reflection.ObfuscateAssemblyAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Reflection.ObfuscationAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Reflection.ObfuscationAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Reflection.ProcessorArchitecture System.Reflection.AssemblyName.ProcessorArchitecture | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0037 | -| System.Reflection.ProcessorArchitecture System.Reflection.AssemblyName.ProcessorArchitecture | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Reflection.PropertyInfo System.Attribute.GetParentDefinition(System.Reflection.PropertyInfo,System.Type[]) | [UnconditionalSuppressMessageAttribute(...)] | Justification | rtPropAccessor.DeclaringType is guaranteed to have the specified property because rtPropAccessor.GetParentDefinition() returned a non-null MethodInfo. | -| System.Reflection.PropertyInfo System.Type.GetProperty(System.String,System.Type) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Linker doesn't recognize GetPropertyImpl(BindingFlags.Public) but this is what the body is doing | -| System.Reflection.RuntimeAssembly System.Runtime.Loader.AssemblyLoadContext.InvokeResolveEvent(System.ResolveEventHandler,System.Reflection.RuntimeAssembly,System.String) | [UnconditionalSuppressMessageAttribute(...)] | Justification | The code handles the Assembly.Location equals null | -| System.Reflection.RuntimeFieldInfo[] System.RuntimeType.RuntimeTypeCache.MemberInfoCache`1.PopulateFields(System.RuntimeType.RuntimeTypeCache.Filter) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Calls to GetInterfaces technically require all interfaces on ReflectedTypeBut this is not a public API to enumerate reflection items, all the public APIs which do thatshould be annotated accordingly. | -| System.Reflection.RuntimeMethodInfo System.Reflection.Associates.AssignAssociates(System.Int32,System.RuntimeType,System.RuntimeType) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Module.ResolveMethod is marked as RequiresUnreferencedCode because it relies on tokenswhich are not guaranteed to be stable across trimming. So if somebody hardcodes a token it could break.The usage here is not like that as all these tokens come from existing metadata loaded from some ILand so trimming has no effect (the tokens are read AFTER trimming occurred). | -| System.Reflection.StrongNameKeyPair | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0017 | -| System.Reflection.StrongNameKeyPair | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Reflection.StrongNameKeyPair System.Reflection.AssemblyName.KeyPair | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0017 | -| System.Reflection.StrongNameKeyPair System.Reflection.AssemblyName.KeyPair | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Reflection.TypeAttributes.Serializable | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0050 | -| System.Reflection.TypeAttributes.Serializable | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Reflection.TypeInfo System.Reflection.Emit.RuntimeTypeBuilder.CreateTypeNoLock() | [UnconditionalSuppressMessageAttribute(...)] | Justification | Reflection.Emit is not subject to trimming | -| System.Resources.NeutralResourcesLanguageAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Resources.SatelliteContractVersionAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.AssemblyTargetedPatchBandAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.AsyncIteratorStateMachineAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.CompilerServices.AsyncIteratorStateMachineAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.AsyncMethodBuilderAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.CompilerServices.AsyncMethodBuilderAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.AsyncStateMachineAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.CompilerServices.AsyncStateMachineAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.CallerArgumentExpressionAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.CompilerServices.CallerArgumentExpressionAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.CallerFilePathAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.CallerLineNumberAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.CallerMemberNameAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.CollectionBuilderAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.CompExactlyDependsOnAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Runtime.CompilerServices.CompExactlyDependsOnAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.CompilerGeneratedAttribute | [AttributeUsageAttribute(...)] | Inherited | True | -| System.Runtime.CompilerServices.CreateNewOnMetadataUpdateAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.CompilerServices.CustomConstantAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.DateTimeConstantAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.DecimalConstantAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.DependencyAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Runtime.CompilerServices.DisablePrivateReflectionAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.CompilerServices.DisablePrivateReflectionAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.DisablePrivateReflectionAttribute | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0015 | -| System.Runtime.CompilerServices.DisablePrivateReflectionAttribute | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Runtime.CompilerServices.DisableRuntimeMarshallingAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.CompilerServices.DisableRuntimeMarshallingAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.EnumeratorCancellationAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.FixedBufferAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.IndexerNameAttribute | [AttributeUsageAttribute(...)] | Inherited | True | -| System.Runtime.CompilerServices.InlineArrayAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.CompilerServices.InternalsVisibleToAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Runtime.CompilerServices.InternalsVisibleToAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.InterpolatedStringHandlerArgumentAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.CompilerServices.InterpolatedStringHandlerArgumentAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.InterpolatedStringHandlerAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.CompilerServices.InterpolatedStringHandlerAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.IntrinsicAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.IsReadOnlyAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.IteratorStateMachineAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.CompilerServices.IteratorStateMachineAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.MetadataUpdateOriginalTypeAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.CompilerServices.MetadataUpdateOriginalTypeAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.MethodImplAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.ModuleInitializerAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.NullableAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.NullableContextAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.NullablePublicOnlyAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.PreserveBaseOverridesAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.CompilerServices.PreserveBaseOverridesAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.RefSafetyRulesAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.ReferenceAssemblyAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.CompilerServices.RequiredMemberAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.CompilerServices.RequiredMemberAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.RequiresLocationAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.RuntimeCompatibilityAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.CompilerServices.RuntimeCompatibilityAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.ScopedRefAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.SkipLocalsInitAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.StateMachineAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.CompilerServices.StateMachineAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.StringFreezingAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.SuppressIldasmAttribute | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0025 | -| System.Runtime.CompilerServices.SuppressIldasmAttribute | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Runtime.CompilerServices.TypeForwardedFromAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.CompilerServices.TypeForwardedFromAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.TypeForwardedToAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Runtime.CompilerServices.TypeForwardedToAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.CompilerServices.UnsafeAccessorAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.CompilerServices.UnsafeAccessorAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.ConstrainedExecution.Cer | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0004 | -| System.Runtime.ConstrainedExecution.Cer | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Runtime.ConstrainedExecution.Consistency | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0004 | -| System.Runtime.ConstrainedExecution.Consistency | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Runtime.ConstrainedExecution.PrePrepareMethodAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.ConstrainedExecution.PrePrepareMethodAttribute | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0004 | -| System.Runtime.ConstrainedExecution.PrePrepareMethodAttribute | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Runtime.ConstrainedExecution.ReliabilityContractAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.ConstrainedExecution.ReliabilityContractAttribute | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0004 | -| System.Runtime.ConstrainedExecution.ReliabilityContractAttribute | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0032 | -| System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Runtime.InteropServices.AllowReversePInvokeCallsAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.InteropServices.AllowReversePInvokeCallsAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.AllowReversePInvokeCallsAttribute | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0003 | -| System.Runtime.InteropServices.AllowReversePInvokeCallsAttribute | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Runtime.InteropServices.BestFitMappingAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.ClassInterfaceAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.CoClassAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.ComDefaultInterfaceAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.ComEventInterfaceAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.ComImportAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.ComSourceInterfacesAttribute | [AttributeUsageAttribute(...)] | Inherited | True | -| System.Runtime.InteropServices.ComVisibleAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.DefaultCharSetAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.DefaultDllImportSearchPathsAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.InteropServices.DispIdAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.DllImportAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.DynamicInterfaceCastableImplementationAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.InteropServices.DynamicInterfaceCastableImplementationAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.FieldOffsetAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.GuidAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.InAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.InterfaceTypeAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.LCIDConversionAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.LibraryImportAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.InteropServices.LibraryImportAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.MarshalAsAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.Marshalling.CustomMarshallerAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Runtime.InteropServices.Marshalling.MarshalUsingAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Runtime.InteropServices.ObjectiveC.ObjectiveCTrackedTypeAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.InteropServices.ObjectiveC.ObjectiveCTrackedTypeAttribute | [AttributeUsageAttribute(...)] | Inherited | True | -| System.Runtime.InteropServices.OptionalAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.OutAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.PreserveSigAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.ProgIdAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.StructLayoutAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.SuppressGCTransitionAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.TypeIdentifierAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.InteropServices.TypeIdentifierAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.UnmanagedCallConvAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.InteropServices.UnmanagedCallConvAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.Remoting.ObjectHandle System.Activator.CreateInstanceInternal(System.String,System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[],System.Threading.StackCrawlMark) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Implementation detail of Activator that linker intrinsically recognizes | -| System.Runtime.Serialization.IFormatterConverter | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0050 | -| System.Runtime.Serialization.IFormatterConverter | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Runtime.Serialization.IObjectReference | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0050 | -| System.Runtime.Serialization.IObjectReference | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Runtime.Serialization.ISafeSerializationData | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0050 | -| System.Runtime.Serialization.ISafeSerializationData | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Runtime.Serialization.OnDeserializedAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.Serialization.OnDeserializingAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.Serialization.OnSerializedAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.Serialization.OnSerializingAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.Serialization.OptionalFieldAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.Serialization.SafeSerializationEventArgs | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0050 | -| System.Runtime.Serialization.SafeSerializationEventArgs | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Runtime.Serialization.StreamingContext._state | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0050 | -| System.Runtime.Serialization.StreamingContext._state | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Runtime.Serialization.StreamingContextStates | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0050 | -| System.Runtime.Serialization.StreamingContextStates | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Runtime.Serialization.StreamingContextStates System.Runtime.Serialization.StreamingContext.State | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0050 | -| System.Runtime.Serialization.StreamingContextStates System.Runtime.Serialization.StreamingContext.State | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Runtime.TargetedPatchingOptOutAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.TargetedPatchingOptOutAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.Versioning.ComponentGuaranteesAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.Versioning.ComponentGuaranteesAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.Versioning.NonVersionableAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.Versioning.NonVersionableAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.Versioning.ObsoletedOSPlatformAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Runtime.Versioning.ObsoletedOSPlatformAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.Versioning.RequiresPreviewFeaturesAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.Versioning.ResourceConsumptionAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.Versioning.ResourceExposureAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.Versioning.SupportedOSPlatformAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Runtime.Versioning.SupportedOSPlatformAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.Versioning.SupportedOSPlatformGuardAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Runtime.Versioning.SupportedOSPlatformGuardAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.Versioning.TargetFrameworkAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.Versioning.TargetFrameworkAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.Versioning.TargetPlatformAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Runtime.Versioning.TargetPlatformAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.Versioning.UnsupportedOSPlatformAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Runtime.Versioning.UnsupportedOSPlatformAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Runtime.Versioning.UnsupportedOSPlatformGuardAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Runtime.Versioning.UnsupportedOSPlatformGuardAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.RuntimeMethodHandleInternal System.Diagnostics.StackFrame.GetMethodDescFromNativeIP(System.IntPtr) | [LibraryImportAttribute(...)] | EntryPoint | StackFrame_GetMethodDescFromNativeIP | -| System.RuntimeMethodHandleInternal System.ModuleHandle.ResolveMethod(System.Runtime.CompilerServices.QCallModule,System.Int32,System.IntPtr*,System.Int32,System.IntPtr*,System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | ModuleHandle_ResolveMethod | -| System.RuntimeMethodHandleInternal System.RuntimeTypeHandle.GetInterfaceMethodImplementation(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.QCallTypeHandle,System.RuntimeMethodHandleInternal) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeTypeHandle_GetInterfaceMethodImplementation | -| System.RuntimeType[] System.RuntimeType.RuntimeTypeCache.MemberInfoCache`1.PopulateInterfaces(System.RuntimeType.RuntimeTypeCache.Filter) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Calls to GetInterfaces technically require all interfaces on ReflectedTypeBut this is not a public API to enumerate reflection items, all the public APIs which do thatshould be annotated accordingly. | -| System.RuntimeType[] System.RuntimeType.RuntimeTypeCache.MemberInfoCache`1.PopulateNestedClasses(System.RuntimeType.RuntimeTypeCache.Filter) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Calls to ResolveTypeHandle technically require all types to be kept But this is not a public API to enumerate reflection items, all the public APIs which do that should be annotated accordingly. | -| System.Security.AllowPartiallyTrustedCallersAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Security.AllowPartiallyTrustedCallersAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Security.IPermission | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0003 | -| System.Security.IPermission | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Security.IStackWalk | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0003 | -| System.Security.IStackWalk | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Security.PermissionSet | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0003 | -| System.Security.PermissionSet | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Security.PermissionSet System.AppDomain.PermissionSet | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0003 | -| System.Security.PermissionSet System.AppDomain.PermissionSet | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Security.Permissions.CodeAccessSecurityAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Security.Permissions.CodeAccessSecurityAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Security.Permissions.CodeAccessSecurityAttribute | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0003 | -| System.Security.Permissions.CodeAccessSecurityAttribute | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Security.Permissions.PermissionState | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0003 | -| System.Security.Permissions.PermissionState | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Security.Permissions.SecurityAction | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0003 | -| System.Security.Permissions.SecurityAction | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Security.Permissions.SecurityAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Security.Permissions.SecurityAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Security.Permissions.SecurityAttribute | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0003 | -| System.Security.Permissions.SecurityAttribute | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Security.Permissions.SecurityPermissionAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Security.Permissions.SecurityPermissionAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Security.Permissions.SecurityPermissionAttribute | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0003 | -| System.Security.Permissions.SecurityPermissionAttribute | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Security.Permissions.SecurityPermissionFlag | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0003 | -| System.Security.Permissions.SecurityPermissionFlag | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Security.SecurityCriticalAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Security.SecurityCriticalAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Security.SecurityRulesAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Security.SecuritySafeCriticalAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Security.SecuritySafeCriticalAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Security.SecurityTransparentAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Security.SecurityTransparentAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Security.SecurityTreatAsSafeAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | -| System.Security.SecurityTreatAsSafeAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Security.SuppressUnmanagedCodeSecurityAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Security.SuppressUnmanagedCodeSecurityAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Security.UnverifiableCodeAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | -| System.Security.UnverifiableCodeAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.SerializableAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.String System.AppContext.GetBaseDirectoryCore() | [UnconditionalSuppressMessageAttribute(...)] | Justification | Single File apps should always set APP_CONTEXT_BASE_DIRECTORY therefore code handles Assembly.Location equals null | -| System.String System.Diagnostics.Tracing.EventSource.GenerateManifest(System.Type,System.String) | [UnconditionalSuppressMessageAttribute(...)] | Justification | EnsureDescriptorsInitialized's use of GetType preserves this method which has dynamically accessed members requirements, but EnsureDescriptorsInitialized does not access this member and is safe to call. | -| System.String System.Diagnostics.Tracing.EventSource.GenerateManifest(System.Type,System.String,System.Diagnostics.Tracing.EventManifestOptions) | [UnconditionalSuppressMessageAttribute(...)] | Justification | EnsureDescriptorsInitialized's use of GetType preserves this method which has dynamically accessed members requirements, but EnsureDescriptorsInitialized does not access this member and is safe to call. | -| System.String System.Exception.get_Source() | [UnconditionalSuppressMessageAttribute(...)] | Justification | The API will return <unknown> if the metadata for current method cannot be established. | -| System.String System.Runtime.CompilerServices.AsyncMethodBuilderCore.GetAsyncStateMachineDescription(System.Runtime.CompilerServices.IAsyncStateMachine) | [UnconditionalSuppressMessageAttribute(...)] | Justification | It's okay if unused fields disappear from debug views | -| System.Text.Encoding System.Text.Encoding.UTF7 | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0001 | -| System.Text.Encoding System.Text.Encoding.UTF7 | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Text.Encoding._isReadOnly | [OptionalFieldAttribute(...)] | VersionAdded | 2 | -| System.ThreadStaticAttribute | [AttributeUsageAttribute(...)] | Inherited | False | -| System.Threading.CompressedStack System.Threading.Thread.GetCompressedStack() | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0003 | -| System.Threading.CompressedStack System.Threading.Thread.GetCompressedStack() | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Threading.Tasks.TplEventSource | [EventSourceAttribute(...)] | Guid | 2e5dba47-a3d2-4d16-8ee0-6671ffdcd7b5 | -| System.Threading.Tasks.TplEventSource | [EventSourceAttribute(...)] | Name | System.Threading.Tasks.TplEventSource | -| System.Type System.Reflection.Emit.TypeBuilderInstantiation.Substitute(System.Type[]) | [UnconditionalSuppressMessageAttribute(...)] | Justification | The entire TypeBuilderInstantiation is serving the MakeGenericType implementation. Currently this is not supported by linker. Once it is supported the outercall (Type.MakeGenericType)will validate that the types fulfill the necessary requirements of annotations on type parameters.As such the actual internals of the implementation are not interesting. | -| System.Type System.Reflection.RuntimeExceptionHandlingClause.get_CatchType() | [UnconditionalSuppressMessageAttribute(...)] | Justification | Module.ResolveType is marked as RequiresUnreferencedCode because it relies on tokenswhich are not guaranteed to be stable across trimming. So if somebody hardcodes a token it could break.The usage here is not like that as all these tokens come from existing metadata loaded from some ILand so trimming has no effect (the tokens are read AFTER trimming occurred). | -| System.Type System.Reflection.SignatureTypeExtensions.TryMakeArrayType(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Used to find matching method overloads. Only used for assignability checks. | -| System.Type System.Reflection.SignatureTypeExtensions.TryMakeArrayType(System.Type,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Used to find matching method overloads. Only used for assignability checks. | -| System.Type System.Reflection.SignatureTypeExtensions.TryResolve(System.Reflection.SignatureType,System.Type[]) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Used to find matching method overloads. Only used for assignability checks. | -| System.Type System.Reflection.TypeNameParser.GenericTypeName.ResolveType(System.Reflection.TypeNameParser,System.String) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Used to implement resolving types from strings. | -| System.Type System.Reflection.TypeNameParser.GetType(System.String,System.ReadOnlySpan<System.String>,System.String) | [UnconditionalSuppressMessageAttribute(...)] | Justification | TypeNameParser.GetType is marked as RequiresUnreferencedCode. | -| System.Type System.Reflection.TypeNameParser.ModifierTypeName.ResolveType(System.Reflection.TypeNameParser,System.String) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Used to implement resolving types from strings. | -| System.Type System.Resources.ResourceReader.<FindType>g__UseReflectionToGetTypeLocal\|52_0(System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | Justification | UseReflectionToGetType will get trimmed out when AllowCustomResourceTypes is set to false. When set to true, we will already throw a warning for this feature switch, so we suppress this one in order forthe user to only get one error. | -| System.Type System.RuntimeType.GetInterface(System.String,System.Boolean) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Trimming makes sure that interfaces are fully preserved, so the Interfaces annotation is transitive.The cache doesn't carry the necessary annotation since it returns an array type,so the analysis complains that the returned value doesn't have the necessary annotation. | -| System.Type System.Type.GetEnumUnderlyingType() | [UnconditionalSuppressMessageAttribute(...)] | Justification | The single instance field on enum types is never trimmed | -| System.Type System.Type.ReflectionOnlyGetType(System.String,System.Boolean,System.Boolean) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0018 | -| System.Type System.Type.ReflectionOnlyGetType(System.String,System.Boolean,System.Boolean) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Type[] System.Reflection.TypeInfo.<get_DeclaredNestedTypes>g__GetDeclaredOnlyNestedTypes\|22_0(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | Justification | The yield return state machine doesn't propagate annotations | -| System.UInt32 System.Reflection.Assembly.GetAssemblyCount() | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_GetAssemblyCount | -| System.UInt64 System.Diagnostics.Tracing.EventPipeInternal.Enable(System.Char*,System.Diagnostics.Tracing.EventPipeSerializationFormat,System.UInt32,System.Diagnostics.Tracing.EventPipeInternal.EventPipeProviderConfigurationNative*,System.UInt32) | [LibraryImportAttribute(...)] | EntryPoint | EventPipeInternal_Enable | -| System.UInt64 System.Threading.Thread.GetCurrentOSThreadId() | [LibraryImportAttribute(...)] | EntryPoint | ThreadNative_GetCurrentOSThreadId | -| System.UnitySerializationHolder | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0050 | -| System.UnitySerializationHolder | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void Internal.Runtime.InteropServices.ComponentActivator.<LoadAssembly>g__LoadAssemblyLocal\|14_0(System.String) | [UnconditionalSuppressMessageAttribute(...)] | Justification | The same feature switch applies to GetFunctionPointer and this function. We rely on the warning from GetFunctionPointer. | -| System.Void Internal.Runtime.InteropServices.ComponentActivator.<LoadAssemblyBytes>g__LoadAssemblyBytesLocal\|16_0(System.ReadOnlySpan<System.Byte>,System.ReadOnlySpan<System.Byte>) | [UnconditionalSuppressMessageAttribute(...)] | Justification | The same feature switch applies to GetFunctionPointer and this function. We rely on the warning from GetFunctionPointer. | -| System.Void Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyImpl(System.String) | [RequiresUnreferencedCodeAttribute(...)] | Url | https://aka.ms/dotnet-illink/nativehost | -| System.Void Internal.Runtime.InteropServices.IsolatedComponentLoadContext..ctor(System.String) | [RequiresUnreferencedCodeAttribute(...)] | Url | https://aka.ms/dotnet-illink/nativehost | -| System.Void Interop.Globalization.CloseSortHandle(System.IntPtr) | [LibraryImportAttribute(...)] | EntryPoint | GlobalizationNative_CloseSortHandle | -| System.Void System.AccessViolationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.AccessViolationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.AggregateException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.AggregateException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.AggregateException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.AggregateException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.AppDomain.Unload(System.AppDomain) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0024 | -| System.Void System.AppDomain.Unload(System.AppDomain) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.AppDomainUnloadedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.AppDomainUnloadedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.ApplicationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.ApplicationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.ArgumentException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.ArgumentException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.ArgumentException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.ArgumentException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.ArgumentNullException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.ArgumentNullException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.ArgumentOutOfRangeException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.ArgumentOutOfRangeException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.ArgumentOutOfRangeException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.ArgumentOutOfRangeException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.ArithmeticException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.ArithmeticException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.ArrayTypeMismatchException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.ArrayTypeMismatchException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.BadImageFormatException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.BadImageFormatException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.BadImageFormatException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.BadImageFormatException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Buffer.__Memmove(System.Byte*,System.Byte*,System.UIntPtr) | [LibraryImportAttribute(...)] | EntryPoint | Buffer_MemMove | -| System.Void System.Buffer.__ZeroMemory(System.Void*,System.UIntPtr) | [LibraryImportAttribute(...)] | EntryPoint | Buffer_Clear | -| System.Void System.Buffers.ArrayPoolEventSource.BufferAllocated(System.Int32,System.Int32,System.Int32,System.Int32,System.Buffers.ArrayPoolEventSource.BufferAllocatedReason) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Buffers.ArrayPoolEventSource.BufferDropped(System.Int32,System.Int32,System.Int32,System.Int32,System.Buffers.ArrayPoolEventSource.BufferDroppedReason) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Buffers.ArrayPoolEventSource.BufferRented(System.Int32,System.Int32,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.CannotUnloadAppDomainException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.CannotUnloadAppDomainException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Collections.Comparer.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Collections.Comparer.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Collections.Generic.Dictionary`2..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Collections.Generic.Dictionary`2..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Collections.Generic.Dictionary`2.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Collections.Generic.Dictionary`2.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Collections.Generic.HashSet`1..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Collections.Generic.HashSet`1..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Collections.Generic.HashSet`1.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Collections.Generic.HashSet`1.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Collections.Generic.KeyNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Collections.Generic.KeyNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Collections.Generic.NonRandomizedStringEqualityComparer..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Collections.Generic.NonRandomizedStringEqualityComparer..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Collections.Hashtable..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Collections.Hashtable..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Collections.Hashtable.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Collections.Hashtable.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Collections.Hashtable.SyncHashtable.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Collections.Hashtable.SyncHashtable.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.ComAwareWeakReference.ComWeakRefToObject(System.IntPtr,System.Int64,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | ComWeakRefToObject | -| System.Void System.ComponentModel.Win32Exception..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.ComponentModel.Win32Exception..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.ComponentModel.Win32Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.ComponentModel.Win32Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.ContextMarshalException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.ContextMarshalException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.DBNull.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.DBNull.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.DataMisalignedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.DataMisalignedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Delegate.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Delegate.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Diagnostics.Contracts.Contract.AssertMustUseRewriter(System.Diagnostics.Contracts.ContractFailureKind,System.String) | [UnconditionalSuppressMessageAttribute(...)] | Justification | StackFrame.GetMethod is only used to help diagnosing incorrect use of contracts. It handles missing or incomplete metadata. | -| System.Void System.Diagnostics.Contracts.ContractException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Diagnostics.Contracts.ContractException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Diagnostics.Contracts.ContractException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Diagnostics.Contracts.ContractException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Diagnostics.StackTrace.ToString(System.Diagnostics.StackTrace.TraceFormat,System.Text.StringBuilder) | [UnconditionalSuppressMessageAttribute(...)] | Justification | ToString is best effort when it comes to available information. | -| System.Void System.Diagnostics.Tracing.EventCounter.WritePayload(System.Single,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | Justification | The DynamicDependency will preserve the properties of CounterPayload | -| System.Void System.Diagnostics.Tracing.EventPipeInternal.DeleteProvider(System.IntPtr) | [LibraryImportAttribute(...)] | EntryPoint | EventPipeInternal_DeleteProvider | -| System.Void System.Diagnostics.Tracing.EventPipeInternal.Disable(System.UInt64) | [LibraryImportAttribute(...)] | EntryPoint | EventPipeInternal_Disable | -| System.Void System.Diagnostics.Tracing.EventPipeInternal.WriteEventData(System.IntPtr,System.Diagnostics.Tracing.EventProvider.EventData*,System.UInt32,System.Guid*,System.Guid*) | [LibraryImportAttribute(...)] | EntryPoint | EventPipeInternal_WriteEventData | -| System.Void System.Diagnostics.Tracing.EventSource.Write(System.String) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Diagnostics.Tracing.EventSource.Write(System.String,System.Diagnostics.Tracing.EventSourceOptions) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Byte[]) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Diagnostics.Tracing.EventSource.EventSourcePrimitive[]) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int32,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int32,System.String) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int64) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int64,System.Byte[]) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int64,System.Int64) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int64,System.Int64,System.Int64) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int64,System.String) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Object[]) | [UnconditionalSuppressMessageAttribute(...)] | Justification | EnsureDescriptorsInitialized's use of GetType preserves this method which requires unreferenced code, but EnsureDescriptorsInitialized does not access this member and is safe to call. | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.String) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.String,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.String,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.String,System.Int64) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.String,System.String) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.String,System.String,System.String) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEventCore(System.Int32,System.Int32,System.Diagnostics.Tracing.EventSource.EventData*) | [UnconditionalSuppressMessageAttribute(...)] | Justification | EnsureDescriptorsInitialized's use of GetType preserves this method which requires unreferenced code, but EnsureDescriptorsInitialized does not access this member and is safe to call. | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEventVarargs(System.Int32,System.Guid*,System.Object[]) | [UnconditionalSuppressMessageAttribute(...)] | Justification | EnsureDescriptorsInitialized's use of GetType preserves this method which requires unreferenced code, but EnsureDescriptorsInitialized does not access this member and is safe to call. | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEventWithRelatedActivityId(System.Int32,System.Guid,System.Object[]) | [UnconditionalSuppressMessageAttribute(...)] | Justification | EnsureDescriptorsInitialized's use of GetType preserves this method which requires unreferenced code, but EnsureDescriptorsInitialized does not access this member and is safe to call. | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEventWithRelatedActivityIdCore(System.Int32,System.Guid*,System.Int32,System.Diagnostics.Tracing.EventSource.EventData*) | [UnconditionalSuppressMessageAttribute(...)] | Justification | EnsureDescriptorsInitialized's use of GetType preserves this method which requires unreferenced code, but EnsureDescriptorsInitialized does not access this member and is safe to call. | -| System.Void System.Diagnostics.Tracing.EventSource.Write`1(System.String,!0) | [UnconditionalSuppressMessageAttribute(...)] | Justification | EnsureDescriptorsInitialized's use of GetType preserves this method which requires unreferenced code, but EnsureDescriptorsInitialized does not access this member and is safe to call. | -| System.Void System.Diagnostics.Tracing.EventSource.Write`1(System.String,System.Diagnostics.Tracing.EventSourceOptions,!0) | [UnconditionalSuppressMessageAttribute(...)] | Justification | EnsureDescriptorsInitialized's use of GetType preserves this method which requires unreferenced code, but EnsureDescriptorsInitialized does not access this member and is safe to call. | -| System.Void System.Diagnostics.Tracing.EventSource.Write`1(System.String,System.Diagnostics.Tracing.EventSourceOptions,System.Guid,System.Guid,!0) | [UnconditionalSuppressMessageAttribute(...)] | Justification | EnsureDescriptorsInitialized's use of GetType preserves this method which requires unreferenced code, but EnsureDescriptorsInitialized does not access this member and is safe to call. | -| System.Void System.Diagnostics.Tracing.EventSourceException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Diagnostics.Tracing.EventSourceException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Diagnostics.Tracing.FrameworkEventSource.WriteEvent(System.Int32,System.Int64,System.Int32,System.String) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Diagnostics.Tracing.FrameworkEventSource.WriteEvent(System.Int32,System.Int64,System.Int32,System.String,System.Boolean,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Diagnostics.Tracing.IncrementingEventCounter.WritePayload(System.Single,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | Justification | The DynamicDependency will preserve the properties of IncrementingCounterPayload | -| System.Void System.Diagnostics.Tracing.IncrementingPollingCounter.WritePayload(System.Single,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | Justification | The DynamicDependency will preserve the properties of IncrementingCounterPayload | -| System.Void System.Diagnostics.Tracing.NullableTypeInfo.WriteData(System.Diagnostics.Tracing.PropertyValue) | [UnconditionalSuppressMessageAttribute(...)] | Justification | The underlying type of Nullable<T> must be defaultable | -| System.Void System.Diagnostics.Tracing.PollingCounter.WritePayload(System.Single,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | Justification | The DynamicDependency will preserve the properties of CounterPayload | -| System.Void System.DivideByZeroException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.DivideByZeroException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.DllNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.DllNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.DuplicateWaitObjectException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.DuplicateWaitObjectException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.EntryPointNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.EntryPointNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Enum.GetEnumValuesAndNames(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.CompilerServices.ObjectHandleOnStack,Interop.BOOL) | [LibraryImportAttribute(...)] | EntryPoint | Enum_GetValuesAndNames | -| System.Void System.Environment._Exit(System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | Environment_Exit | -| System.Void System.Exception..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Exception..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Exception.GetMessageFromNativeResources(System.Exception.ExceptionMessageKind,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | ExceptionNative_GetMessageFromNativeResources | -| System.Void System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.FieldAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.FieldAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.FormatException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.FormatException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.GC._AddMemoryPressure(System.UInt64) | [LibraryImportAttribute(...)] | EntryPoint | GCInterface_AddMemoryPressure | -| System.Void System.GC._Collect(System.Int32,System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | GCInterface_Collect | -| System.Void System.GC._EnumerateConfigurationValues(System.Void*,delegate* unmanaged<Void*,Void*,Void*,GCConfigurationType,Int64,Void>) | [LibraryImportAttribute(...)] | EntryPoint | GCInterface_EnumerateConfigurationValues | -| System.Void System.GC._RemoveMemoryPressure(System.UInt64) | [LibraryImportAttribute(...)] | EntryPoint | GCInterface_RemoveMemoryPressure | -| System.Void System.GC._UnregisterFrozenSegment(System.IntPtr) | [LibraryImportAttribute(...)] | EntryPoint | GCInterface_UnregisterFrozenSegment | -| System.Void System.GC._WaitForPendingFinalizers() | [LibraryImportAttribute(...)] | EntryPoint | GCInterface_WaitForPendingFinalizers | -| System.Void System.Globalization.CultureNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Globalization.CultureNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Globalization.CultureNotFoundException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Globalization.CultureNotFoundException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.IO.DirectoryNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.IO.DirectoryNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.IO.EndOfStreamException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.IO.EndOfStreamException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.IO.FileLoadException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.IO.FileLoadException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.IO.FileLoadException.GetMessageForHR(System.Int32,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | FileLoadException_GetMessageForHR | -| System.Void System.IO.FileLoadException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.IO.FileLoadException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.IO.FileNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.IO.FileNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.IO.FileNotFoundException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.IO.FileNotFoundException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.IO.FileSystemInfo..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.IO.FileSystemInfo..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.IO.FileSystemInfo.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.IO.FileSystemInfo.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.IO.IOException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.IO.IOException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.IO.InvalidDataException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.IO.InvalidDataException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.IO.PathTooLongException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.IO.PathTooLongException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.IndexOutOfRangeException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.IndexOutOfRangeException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.InsufficientExecutionStackException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.InsufficientExecutionStackException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.InsufficientMemoryException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.InsufficientMemoryException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.InvalidCastException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.InvalidCastException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.InvalidOperationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.InvalidOperationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.InvalidProgramException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.InvalidProgramException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.InvalidTimeZoneException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.InvalidTimeZoneException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.MemberAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.MemberAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.MethodAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.MethodAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.MissingFieldException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.MissingFieldException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.MissingMemberException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.MissingMemberException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.MissingMemberException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.MissingMemberException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.MissingMethodException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.MissingMethodException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.ModuleHandle.GetModuleType(System.Runtime.CompilerServices.QCallModule,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | ModuleHandle_GetModuleType | -| System.Void System.ModuleHandle.GetPEKind(System.Runtime.CompilerServices.QCallModule,System.Int32*,System.Int32*) | [LibraryImportAttribute(...)] | EntryPoint | ModuleHandle_GetPEKind | -| System.Void System.ModuleHandle.ResolveField(System.Runtime.CompilerServices.QCallModule,System.Int32,System.IntPtr*,System.Int32,System.IntPtr*,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | ModuleHandle_ResolveField | -| System.Void System.ModuleHandle.ResolveType(System.Runtime.CompilerServices.QCallModule,System.Int32,System.IntPtr*,System.Int32,System.IntPtr*,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | ModuleHandle_ResolveType | -| System.Void System.MulticastDelegate.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.MulticastDelegate.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.MulticastNotSupportedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.MulticastNotSupportedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.NotFiniteNumberException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.NotFiniteNumberException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.NotFiniteNumberException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.NotFiniteNumberException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.NotImplementedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.NotImplementedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.NotSupportedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.NotSupportedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.NullReferenceException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.NullReferenceException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.ObjectDisposedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.ObjectDisposedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.ObjectDisposedException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.ObjectDisposedException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.OperatingSystem.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.OperatingSystem.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.OperationCanceledException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.OperationCanceledException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.OutOfMemoryException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.OutOfMemoryException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.OverflowException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.OverflowException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.PlatformNotSupportedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.PlatformNotSupportedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.RankException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.RankException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Reflection.AmbiguousMatchException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Reflection.AmbiguousMatchException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Reflection.Assembly.GetEntryAssemblyNative(System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_GetEntryAssembly | -| System.Void System.Reflection.Assembly.GetExecutingAssemblyNative(System.Runtime.CompilerServices.StackCrawlMarkHandle,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_GetExecutingAssembly | -| System.Void System.Reflection.Assembly.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Reflection.Assembly.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Reflection.AssemblyName.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Reflection.AssemblyName.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Reflection.AssemblyName.InitializeAssemblySpec(System.Reflection.NativeAssemblyNameParts*,System.Void*) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyName_InitializeAssemblySpec | -| System.Void System.Reflection.CustomAttribute.AddCustomAttributes(System.RuntimeType.ListBuilder<System.Object>,System.Reflection.RuntimeModule,System.Int32,System.RuntimeType,System.Boolean,System.RuntimeType.ListBuilder<System.Object>) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Linker guarantees presence of all the constructor parameters, property setters and fields which are accessed by any attribute instantiation which is present in the code linker has analyzed.As such the reflection usage in this method will never fail as those methods/fields will be present. | -| System.Void System.Reflection.CustomAttributeFormatException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Reflection.CustomAttributeFormatException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Reflection.Emit.RuntimeAssemblyBuilder.CreateDynamicAssembly(System.Runtime.CompilerServices.ObjectHandleOnStack,System.Reflection.NativeAssemblyNameParts*,System.Configuration.Assemblies.AssemblyHashAlgorithm,System.Reflection.Emit.AssemblyBuilderAccess,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | AppDomain_CreateDynamicAssembly | -| System.Void System.Reflection.Emit.RuntimeEnumBuilder..ctor(System.String,System.Type,System.Reflection.TypeAttributes,System.Reflection.Emit.RuntimeModuleBuilder) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Reflection.Emit is not subject to trimming | -| System.Void System.Reflection.Emit.RuntimeModuleBuilder.SetFieldRVAContent(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Byte[],System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | ModuleBuilder_SetFieldRVAContent | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.AddInterfaceImpl(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | TypeBuilder_AddInterfaceImpl | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.DefineCustomAttribute(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Int32,System.ReadOnlySpan<System.Byte>,System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | TypeBuilder_DefineCustomAttribute | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.DefineMethodImpl(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Int32,System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | TypeBuilder_DefineMethodImpl | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.DefineMethodSemantics(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Reflection.MethodSemanticsAttributes,System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | TypeBuilder_DefineMethodSemantics | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.SetClassLayout(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Reflection.Emit.PackingSize,System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | TypeBuilder_SetClassLayout | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.SetConstantValue(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Int32,System.Void*) | [LibraryImportAttribute(...)] | EntryPoint | TypeBuilder_SetConstantValue | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.SetFieldLayoutOffset(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | TypeBuilder_SetFieldLayoutOffset | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.SetMethodIL(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Boolean,System.Byte[],System.Int32,System.Byte[],System.Int32,System.Int32,System.Reflection.Emit.ExceptionHandler[],System.Int32,System.Int32[],System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | TypeBuilder_SetMethodIL | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.SetMethodImpl(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Reflection.MethodImplAttributes) | [LibraryImportAttribute(...)] | EntryPoint | TypeBuilder_SetMethodImpl | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.SetParentType(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | TypeBuilder_SetParentType | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.TermCreateClass(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | TypeBuilder_TermCreateClass | -| System.Void System.Reflection.InvalidFilterCriteriaException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Reflection.InvalidFilterCriteriaException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Reflection.Metadata.MetadataUpdater.ApplyUpdate(System.Runtime.CompilerServices.QCallAssembly,System.Byte*,System.Int32,System.Byte*,System.Int32,System.Byte*,System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_ApplyUpdate | -| System.Void System.Reflection.Metadata.RuntimeTypeMetadataUpdateHandler.ClearCache(System.Type[]) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Clearing the caches on a Type isn't affected if a Type is trimmed, or has any of its members trimmed. | -| System.Void System.Reflection.Module.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Reflection.Module.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Reflection.ReflectionTypeLoadException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Reflection.ReflectionTypeLoadException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Reflection.ReflectionTypeLoadException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Reflection.ReflectionTypeLoadException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Reflection.RuntimeAssembly.GetEntryPoint(System.Runtime.CompilerServices.QCallAssembly,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_GetEntryPoint | -| System.Void System.Reflection.RuntimeAssembly.GetExportedTypes(System.Runtime.CompilerServices.QCallAssembly,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_GetExportedTypes | -| System.Void System.Reflection.RuntimeAssembly.GetForwardedType(System.Runtime.CompilerServices.QCallAssembly,System.Reflection.MetadataToken,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_GetForwardedType | -| System.Void System.Reflection.RuntimeAssembly.GetFullName(System.Runtime.CompilerServices.QCallAssembly,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_GetFullName | -| System.Void System.Reflection.RuntimeAssembly.GetImageRuntimeVersion(System.Runtime.CompilerServices.QCallAssembly,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_GetImageRuntimeVersion | -| System.Void System.Reflection.RuntimeAssembly.GetLocale(System.Runtime.CompilerServices.QCallAssembly,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_GetLocale | -| System.Void System.Reflection.RuntimeAssembly.GetLocation(System.Runtime.CompilerServices.QCallAssembly,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_GetLocation | -| System.Void System.Reflection.RuntimeAssembly.GetModules(System.Runtime.CompilerServices.QCallAssembly,System.Boolean,System.Boolean,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_GetModules | -| System.Void System.Reflection.RuntimeAssembly.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Reflection.RuntimeAssembly.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Reflection.RuntimeAssembly.GetPublicKey(System.Runtime.CompilerServices.QCallAssembly,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_GetPublicKey | -| System.Void System.Reflection.RuntimeAssembly.GetSimpleName(System.Runtime.CompilerServices.QCallAssembly,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_GetSimpleName | -| System.Void System.Reflection.RuntimeAssembly.GetVersion(System.Runtime.CompilerServices.QCallAssembly,System.Int32,System.Int32,System.Int32,System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_GetVersion | -| System.Void System.Reflection.RuntimeAssembly.InternalLoad(System.Reflection.NativeAssemblyNameParts*,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.CompilerServices.StackCrawlMarkHandle,System.Boolean,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_InternalLoad | -| System.Void System.Reflection.RuntimeConstructorInfo.InvokeClassConstructor() | [UnconditionalSuppressMessageAttribute(...)] | Justification | This ConstructorInfo instance represents the static constructor itself, so if this object was created, the static constructor exists. | -| System.Void System.Reflection.RuntimeCustomAttributeData..ctor(System.Reflection.RuntimeModule,System.Reflection.MetadataToken,System.Reflection.ConstArray) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Property setters and fields which are accessed by any attribute instantiation which is present in the code linker has analyzed.As such enumerating all fields and properties may return different results after trimmingbut all those which are needed to actually have data will be there. | -| System.Void System.Reflection.RuntimeCustomAttributeData..ctor(System.Reflection.RuntimeModule,System.Reflection.MetadataToken,System.Reflection.ConstArray) | [UnconditionalSuppressMessageAttribute(...)] | Justification | We're getting a MethodBase of a constructor that we found in the metadata. The attribute constructor won't be trimmed. | -| System.Void System.Reflection.RuntimeCustomAttributeData.Init(System.Object) | [UnconditionalSuppressMessageAttribute(...)] | Justification | The pca object had to be created by the single ctor on the Type. So the ctor couldn't have been trimmed. | -| System.Void System.Reflection.RuntimeModule.GetFullyQualifiedName(System.Runtime.CompilerServices.QCallModule,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeModule_GetFullyQualifiedName | -| System.Void System.Reflection.RuntimeModule.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Reflection.RuntimeModule.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Reflection.RuntimeModule.GetScopeName(System.Runtime.CompilerServices.QCallModule,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeModule_GetScopeName | -| System.Void System.Reflection.StrongNameKeyPair..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Reflection.StrongNameKeyPair..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Reflection.TargetException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Reflection.TargetException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Reflection.TargetInvocationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Reflection.TargetInvocationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Reflection.TargetParameterCountException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Reflection.TargetParameterCountException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Resources.MissingManifestResourceException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Resources.MissingManifestResourceException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Resources.MissingSatelliteAssemblyException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Resources.MissingSatelliteAssemblyException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.AmbiguousImplementationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Runtime.AmbiguousImplementationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.CompileMethod(System.RuntimeMethodHandleInternal) | [LibraryImportAttribute(...)] | EntryPoint | ReflectionInvocation_CompileMethod | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(System.Runtime.CompilerServices.RuntimeHelpers.TryCode,System.Runtime.CompilerServices.RuntimeHelpers.CleanupCode,System.Object) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0004 | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(System.Runtime.CompilerServices.RuntimeHelpers.TryCode,System.Runtime.CompilerServices.RuntimeHelpers.CleanupCode,System.Object) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.GetUninitializedObject(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | ReflectionSerialization_GetUninitializedObject | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.PrepareConstrainedRegions() | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0004 | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.PrepareConstrainedRegions() | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.PrepareConstrainedRegionsNoOP() | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0004 | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.PrepareConstrainedRegionsNoOP() | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.PrepareContractedDelegate(System.Delegate) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0004 | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.PrepareContractedDelegate(System.Delegate) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.PrepareMethod(System.RuntimeMethodHandleInternal,System.IntPtr*,System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | ReflectionInvocation_PrepareMethod | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.ProbeForSufficientStack() | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0004 | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.ProbeForSufficientStack() | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(System.Runtime.CompilerServices.QCallTypeHandle) | [LibraryImportAttribute(...)] | EntryPoint | ReflectionInvocation_RunClassConstructor | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.RunModuleConstructor(System.Runtime.CompilerServices.QCallModule) | [LibraryImportAttribute(...)] | EntryPoint | ReflectionInvocation_RunModuleConstructor | -| System.Void System.Runtime.CompilerServices.RuntimeWrappedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Runtime.CompilerServices.RuntimeWrappedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.CompilerServices.RuntimeWrappedException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Runtime.CompilerServices.RuntimeWrappedException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.CompilerServices.SwitchExpressionException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Runtime.CompilerServices.SwitchExpressionException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.CompilerServices.SwitchExpressionException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Runtime.CompilerServices.SwitchExpressionException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.ControlledExecution.AbortThread(System.Threading.ThreadHandle) | [LibraryImportAttribute(...)] | EntryPoint | ThreadNative_Abort | -| System.Void System.Runtime.ControlledExecution.ResetAbortThread() | [LibraryImportAttribute(...)] | EntryPoint | ThreadNative_ResetAbort | -| System.Void System.Runtime.ControlledExecution.Run(System.Action,System.Threading.CancellationToken) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0046 | -| System.Void System.Runtime.ControlledExecution.Run(System.Action,System.Threading.CancellationToken) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.InteropServices.COMException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Runtime.InteropServices.COMException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.InteropServices.ComWrappers.GetIUnknownImplInternal(System.IntPtr,System.IntPtr,System.IntPtr) | [LibraryImportAttribute(...)] | EntryPoint | ComWrappers_GetIUnknownImpl | -| System.Void System.Runtime.InteropServices.ComWrappers.SetGlobalInstanceRegisteredForMarshalling(System.Int64) | [LibraryImportAttribute(...)] | EntryPoint | ComWrappers_SetGlobalInstanceRegisteredForMarshalling | -| System.Void System.Runtime.InteropServices.ComWrappers.SetGlobalInstanceRegisteredForTrackerSupport(System.Int64) | [LibraryImportAttribute(...)] | EntryPoint | ComWrappers_SetGlobalInstanceRegisteredForTrackerSupport | -| System.Void System.Runtime.InteropServices.ExternalException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Runtime.InteropServices.ExternalException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.InteropServices.InvalidComObjectException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Runtime.InteropServices.InvalidComObjectException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.InteropServices.InvalidOleVariantTypeException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Runtime.InteropServices.InvalidOleVariantTypeException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.InteropServices.Marshal.DestroyStructure`1(System.IntPtr) | [UnconditionalSuppressMessageAttribute(...)] | Justification | AOT compilers can see the T. | -| System.Void System.Runtime.InteropServices.Marshal.InternalPrelink(System.RuntimeMethodHandleInternal) | [LibraryImportAttribute(...)] | EntryPoint | MarshalNative_Prelink | -| System.Void System.Runtime.InteropServices.Marshal.PrelinkAll(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | Justification | This only needs to prelink methods that are actually used | -| System.Void System.Runtime.InteropServices.Marshal.StructureToPtr`1(!0,System.IntPtr,System.Boolean) | [UnconditionalSuppressMessageAttribute(...)] | Justification | AOT compilers can see the T. | -| System.Void System.Runtime.InteropServices.MarshalDirectiveException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Runtime.InteropServices.MarshalDirectiveException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.InteropServices.NativeLibrary.FreeLib(System.IntPtr) | [LibraryImportAttribute(...)] | EntryPoint | NativeLibrary_FreeLib | -| System.Void System.Runtime.InteropServices.SEHException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Runtime.InteropServices.SEHException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.InteropServices.SafeArrayRankMismatchException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Runtime.InteropServices.SafeArrayRankMismatchException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.InteropServices.SafeArrayTypeMismatchException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Runtime.InteropServices.SafeArrayTypeMismatchException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.Intrinsics.X86.X86Base.__cpuidex(System.Int32*,System.Int32,System.Int32) | [LibraryImportAttribute(...)] | EntryPoint | X86BaseCpuId | -| System.Void System.Runtime.Loader.AssemblyLoadContext.LoadFromStream(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_LoadFromStream | -| System.Void System.Runtime.Loader.AssemblyLoadContext.PrepareForAssemblyLoadContextRelease(System.IntPtr,System.IntPtr) | [LibraryImportAttribute(...)] | EntryPoint | AssemblyNative_PrepareForAssemblyLoadContextRelease | -| System.Void System.Runtime.Serialization.ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0050 | -| System.Void System.Runtime.Serialization.ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.Serialization.SerializationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Runtime.Serialization.SerializationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.Serialization.SerializationInfo..ctor(System.Type,System.Runtime.Serialization.IFormatterConverter) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0050 | -| System.Void System.Runtime.Serialization.SerializationInfo..ctor(System.Type,System.Runtime.Serialization.IFormatterConverter) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.Serialization.SerializationInfo..ctor(System.Type,System.Runtime.Serialization.IFormatterConverter,System.Boolean) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0050 | -| System.Void System.Runtime.Serialization.SerializationInfo..ctor(System.Type,System.Runtime.Serialization.IFormatterConverter,System.Boolean) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.Serialization.StreamingContext..ctor(System.Runtime.Serialization.StreamingContextStates) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0050 | -| System.Void System.Runtime.Serialization.StreamingContext..ctor(System.Runtime.Serialization.StreamingContextStates) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Runtime.Serialization.StreamingContext..ctor(System.Runtime.Serialization.StreamingContextStates,System.Object) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0050 | -| System.Void System.Runtime.Serialization.StreamingContext..ctor(System.Runtime.Serialization.StreamingContextStates,System.Object) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.RuntimeFieldHandle.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.RuntimeFieldHandle.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.RuntimeMethodHandle.ConstructInstantiation(System.RuntimeMethodHandleInternal,System.TypeNameFormatFlags,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeMethodHandle_ConstructInstantiation | -| System.Void System.RuntimeMethodHandle.Destroy(System.RuntimeMethodHandleInternal) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeMethodHandle_Destroy | -| System.Void System.RuntimeMethodHandle.GetMethodInstantiation(System.RuntimeMethodHandleInternal,System.Runtime.CompilerServices.ObjectHandleOnStack,Interop.BOOL) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeMethodHandle_GetMethodInstantiation | -| System.Void System.RuntimeMethodHandle.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.RuntimeMethodHandle.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.RuntimeMethodHandle.GetTypicalMethodDefinition(System.RuntimeMethodHandleInternal,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeMethodHandle_GetTypicalMethodDefinition | -| System.Void System.RuntimeMethodHandle.StripMethodInstantiation(System.RuntimeMethodHandleInternal,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeMethodHandle_StripMethodInstantiation | -| System.Void System.RuntimeTypeHandle.ConstructName(System.Runtime.CompilerServices.QCallTypeHandle,System.TypeNameFormatFlags,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeTypeHandle_ConstructName | -| System.Void System.RuntimeTypeHandle.CreateInstanceForAnotherGenericParameter(System.Runtime.CompilerServices.QCallTypeHandle,System.IntPtr*,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeTypeHandle_CreateInstanceForAnotherGenericParameter | -| System.Void System.RuntimeTypeHandle.GetActivationInfo(System.Runtime.CompilerServices.ObjectHandleOnStack,delegate* managed<Void*,Object>*,System.Void**,delegate* managed<Object,Void>*,Interop.BOOL*) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeTypeHandle_GetActivationInfo | -| System.Void System.RuntimeTypeHandle.GetConstraints(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeTypeHandle_GetConstraints | -| System.Void System.RuntimeTypeHandle.GetGenericTypeDefinition(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeTypeHandle_GetGenericTypeDefinition | -| System.Void System.RuntimeTypeHandle.GetInstantiation(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack,Interop.BOOL) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeTypeHandle_GetInstantiation | -| System.Void System.RuntimeTypeHandle.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.RuntimeTypeHandle.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.RuntimeTypeHandle.Instantiate(System.Runtime.CompilerServices.QCallTypeHandle,System.IntPtr*,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeTypeHandle_Instantiate | -| System.Void System.RuntimeTypeHandle.MakeArray(System.Runtime.CompilerServices.QCallTypeHandle,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeTypeHandle_MakeArray | -| System.Void System.RuntimeTypeHandle.MakeByRef(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeTypeHandle_MakeByRef | -| System.Void System.RuntimeTypeHandle.MakePointer(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeTypeHandle_MakePointer | -| System.Void System.RuntimeTypeHandle.MakeSZArray(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeTypeHandle_MakeSZArray | -| System.Void System.RuntimeTypeHandle.RegisterCollectibleTypeDependency(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.QCallAssembly) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeTypeHandle_RegisterCollectibleTypeDependency | -| System.Void System.RuntimeTypeHandle.VerifyInterfaceIsImplemented(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.QCallTypeHandle) | [LibraryImportAttribute(...)] | EntryPoint | RuntimeTypeHandle_VerifyInterfaceIsImplemented | -| System.Void System.Security.Cryptography.CryptographicException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Security.Cryptography.CryptographicException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Security.SecurityException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Security.SecurityException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Security.SecurityException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Security.SecurityException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Security.VerificationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Security.VerificationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.StackOverflowException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.StackOverflowException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.StartupHookProvider.CallStartupHook(System.Char*) | [UnconditionalSuppressMessageAttribute(...)] | Justification | An ILLink warning when trimming an app with System.StartupHookProvider.IsSupported=true already exists for ProcessStartupHooks. | -| System.Void System.SystemException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.SystemException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Text.DecoderFallbackException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Text.DecoderFallbackException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Text.EncoderFallbackException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Text.EncoderFallbackException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Text.UTF7Encoding..ctor() | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0001 | -| System.Void System.Text.UTF7Encoding..ctor() | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Text.UTF7Encoding..ctor(System.Boolean) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0001 | -| System.Void System.Text.UTF7Encoding..ctor(System.Boolean) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Threading.AbandonedMutexException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Threading.AbandonedMutexException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Threading.CompressedStack.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Threading.CompressedStack.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Threading.ExecutionContext.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Threading.ExecutionContext.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Threading.Interlocked._MemoryBarrierProcessWide() | [LibraryImportAttribute(...)] | EntryPoint | Interlocked_MemoryBarrierProcessWide | -| System.Void System.Threading.LockRecursionException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Threading.LockRecursionException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Threading.SemaphoreFullException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Threading.SemaphoreFullException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Threading.SynchronizationLockException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Threading.SynchronizationLockException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Threading.Tasks.TaskCanceledException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Threading.Tasks.TaskCanceledException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Threading.Tasks.TaskSchedulerException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Threading.Tasks.TaskSchedulerException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Threading.Tasks.TplEventSource.AwaitTaskContinuationScheduled(System.Int32,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Threading.Tasks.TplEventSource.TaskCompleted(System.Int32,System.Int32,System.Int32,System.Boolean) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Threading.Tasks.TplEventSource.TaskScheduled(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Threading.Tasks.TplEventSource.TaskWaitBegin(System.Int32,System.Int32,System.Int32,System.Threading.Tasks.TplEventSource.TaskWaitBehavior,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Threading.Tasks.TplEventSource.TraceOperationBegin(System.Int32,System.String,System.Int64) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Threading.Tasks.TplEventSource.TraceSynchronousWorkEnd(System.Threading.Tasks.CausalitySynchronousWork) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Parameters to this method are primitive and are trimmer safe | -| System.Void System.Threading.Thread.Abort() | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0006 | -| System.Void System.Threading.Thread.Abort() | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Threading.Thread.Abort(System.Object) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0006 | -| System.Void System.Threading.Thread.Abort(System.Object) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Threading.Thread.ResetAbort() | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0006 | -| System.Void System.Threading.Thread.ResetAbort() | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Threading.Thread.SetCompressedStack(System.Threading.CompressedStack) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0003 | -| System.Void System.Threading.Thread.SetCompressedStack(System.Threading.CompressedStack) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Threading.Thread.StartInternal(System.Threading.ThreadHandle,System.Int32,System.Int32,System.Char*) | [LibraryImportAttribute(...)] | EntryPoint | ThreadNative_Start | -| System.Void System.Threading.ThreadAbortException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Threading.ThreadAbortException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Threading.ThreadInterruptedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Threading.ThreadInterruptedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Threading.ThreadStartException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Threading.ThreadStartException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Threading.ThreadStateException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Threading.ThreadStateException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Threading.WaitHandleCannotBeOpenedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.Threading.WaitHandleCannotBeOpenedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.TimeZoneNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.TimeZoneNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.TimeoutException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.TimeoutException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.Type.GetEnumData(System.String[],System.Array) | [UnconditionalSuppressMessageAttribute(...)] | Justification | Literal fields on enums can never be trimmed | -| System.Void System.TypeAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.TypeAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.TypeInitializationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.TypeInitializationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.TypeInitializationException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.TypeInitializationException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.TypeLoadException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.TypeLoadException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.TypeLoadException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.TypeLoadException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.TypeUnloadedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.TypeUnloadedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.UnauthorizedAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.UnauthorizedAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.WeakReference..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.WeakReference..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.WeakReference.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.WeakReference.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| System.Void System.WeakReference`1.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0051 | -| System.Void System.WeakReference`1.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| bool System.Reflection.Assembly.GlobalAssemblyCache | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0005 | -| bool System.Reflection.Assembly.GlobalAssemblyCache | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| bool System.Reflection.FieldInfo.IsNotSerialized | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0050 | -| bool System.Reflection.FieldInfo.IsNotSerialized | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| bool System.Reflection.RuntimeAssembly.GlobalAssemblyCache | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0005 | -| bool System.Reflection.RuntimeAssembly.GlobalAssemblyCache | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| bool System.Reflection.SignatureType.IsSerializable | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0050 | -| bool System.Reflection.SignatureType.IsSerializable | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| bool System.Type.IsSerializable | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0050 | -| bool System.Type.IsSerializable | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| byte | [ConstantExpectedAttribute(...)] | Max | 1 | -| byte | [ConstantExpectedAttribute(...)] | Max | 3 | -| byte | [ConstantExpectedAttribute(...)] | Max | 7 | -| byte | [ConstantExpectedAttribute(...)] | Max | 8 | -| byte | [ConstantExpectedAttribute(...)] | Max | 15 | -| byte | [ConstantExpectedAttribute(...)] | Max | 16 | -| byte | [ConstantExpectedAttribute(...)] | Max | 31 | -| byte | [ConstantExpectedAttribute(...)] | Max | 32 | -| byte | [ConstantExpectedAttribute(...)] | Max | 63 | -| byte | [ConstantExpectedAttribute(...)] | Max | 64 | -| byte | [ConstantExpectedAttribute(...)] | Max | 127 | -| byte | [ConstantExpectedAttribute(...)] | Max | 128 | -| byte | [ConstantExpectedAttribute(...)] | Min | 1 | -| delegate* managed<Byte&,Void> System.Array.ArrayInitializeCache.GetElementConstructorEntrypoint(System.Runtime.CompilerServices.QCallTypeHandle) | [LibraryImportAttribute(...)] | EntryPoint | Array_GetElementConstructorEntrypoint | -| string System.Reflection.Assembly.CodeBase | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0012 | -| string System.Reflection.Assembly.CodeBase | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| string System.Reflection.Assembly.EscapedCodeBase | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0012 | -| string System.Reflection.Assembly.EscapedCodeBase | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| string System.Reflection.AssemblyName.CodeBase | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0044 | -| string System.Reflection.AssemblyName.CodeBase | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| string System.Reflection.AssemblyName.EscapedCodeBase | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0044 | -| string System.Reflection.AssemblyName.EscapedCodeBase | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| string System.Reflection.Emit.AssemblyBuilder.CodeBase | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0012 | -| string System.Reflection.Emit.AssemblyBuilder.CodeBase | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| string System.Reflection.RuntimeAssembly.CodeBase | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0012 | -| string System.Reflection.RuntimeAssembly.CodeBase | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -attrArgPositional -| !0 | [NotNullIfNotNullAttribute(...)] | 0 | location | -| !0 | [NotNullIfNotNullAttribute(...)] | 0 | value | -| !0 | [NullableAttribute(...)] | 0 | 1 | -| !0 | [NullableAttribute(...)] | 0 | 2 | -| !0 System.ArraySegment`1.Enumerator.Current | [NullableAttribute(...)] | 0 | 1 | -| !0 System.ArraySegment`1.Enumerator.get_Current() | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Collections.Generic.Dictionary`2.KeyCollection.Enumerator.Current | [NullableAttribute(...)] | 0 | 1 | -| !0 System.Collections.Generic.Dictionary`2.KeyCollection.Enumerator.get_Current() | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Collections.Generic.HashSet`1.Enumerator.Current | [NullableAttribute(...)] | 0 | 1 | -| !0 System.Collections.Generic.HashSet`1.Enumerator.get_Current() | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Collections.Generic.IAsyncEnumerator`1.Current | [NullableAttribute(...)] | 0 | 1 | -| !0 System.Collections.Generic.IAsyncEnumerator`1.get_Current() | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Collections.Generic.IEnumerator`1.Current | [NullableAttribute(...)] | 0 | 1 | -| !0 System.Collections.Generic.IEnumerator`1.get_Current() | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Collections.Generic.List`1.Enumerator.Current | [NullableAttribute(...)] | 0 | 1 | -| !0 System.Collections.Generic.List`1.Enumerator.get_Current() | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Collections.Generic.Queue`1.Enumerator.Current | [NullableAttribute(...)] | 0 | 1 | -| !0 System.Collections.Generic.Queue`1.Enumerator.get_Current() | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Enum.Parse`1(System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| !0 System.Enum.Parse`1(System.ReadOnlySpan<System.Char>,System.Boolean) | [NullableContextAttribute(...)] | 0 | 0 | -| !0 System.Enum.Parse`1(System.String) | [NullableContextAttribute(...)] | 0 | 0 | -| !0 System.Enum.Parse`1(System.String,System.Boolean) | [NullableContextAttribute(...)] | 0 | 0 | -| !0 System.Func`1.Invoke() | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.IO.Enumeration.FileSystemEnumerable`1.FindTransform.Invoke(System.IO.Enumeration.FileSystemEntry) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.IO.Enumeration.FileSystemEnumerator`1.Current | [NullableAttribute(...)] | 0 | 1 | -| !0 System.IO.Enumeration.FileSystemEnumerator`1.TransformEntry(System.IO.Enumeration.FileSystemEntry) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.IO.Enumeration.FileSystemEnumerator`1.get_Current() | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.IParsable`1.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Lazy`1.Value | [DebuggerBrowsableAttribute(...)] | 0 | 0 | -| !0 System.Lazy`1.ValueForDebugDisplay | [NullableAttribute(...)] | 0 | 2 | -| !0 System.Numerics.IBinaryInteger`1.ReadBigEndian(System.ReadOnlySpan<System.Byte>,System.Boolean) | [NullableContextAttribute(...)] | 0 | 0 | -| !0 System.Numerics.IBinaryInteger`1.ReadLittleEndian(System.ReadOnlySpan<System.Byte>,System.Boolean) | [NullableContextAttribute(...)] | 0 | 0 | -| !0 System.Numerics.IBinaryNumber`1.AllBitsSet | [NullableAttribute(...)] | 0 | 1 | -| !0 System.Numerics.IBinaryNumber`1.Log2(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Numerics.IBinaryNumber`1.get_AllBitsSet() | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Numerics.INumberBase`1.CreateChecked`1(!0) | [NullableContextAttribute(...)] | 0 | 0 | -| !0 System.Numerics.INumberBase`1.CreateSaturating`1(!0) | [NullableContextAttribute(...)] | 0 | 0 | -| !0 System.Numerics.INumberBase`1.CreateTruncating`1(!0) | [NullableContextAttribute(...)] | 0 | 0 | -| !0 System.Numerics.INumberBase`1.Parse(System.ReadOnlySpan<System.Byte>,System.Globalization.NumberStyles,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 0 | -| !0 System.Numerics.INumberBase`1.Parse(System.ReadOnlySpan<System.Char>,System.Globalization.NumberStyles,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 0 | -| !0 System.Numerics.IPowerFunctions`1.Pow(!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Numerics.IRootFunctions`1.Cbrt(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Numerics.IRootFunctions`1.Hypot(!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Numerics.IRootFunctions`1.RootN(!0,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Numerics.IRootFunctions`1.Sqrt(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Numerics.ISignedNumber`1.NegativeOne | [NullableAttribute(...)] | 0 | 1 | -| !0 System.Numerics.ISignedNumber`1.get_NegativeOne() | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Numerics.Vector.Dot`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Numerics.Vector.GetElement`1(System.Numerics.Vector<!0>,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Numerics.Vector.Sum`1(System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Numerics.Vector.ToScalar`1(System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Numerics.Vector`1.Item | [NullableAttribute(...)] | 0 | 1 | -| !0 System.Numerics.Vector`1.get_Item(System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.ReadOnlySpan`1.GetPinnableReference() | [EditorBrowsableAttribute(...)] | 0 | 1 | -| !0 System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable`1.Enumerator.Current | [NullableAttribute(...)] | 0 | 1 | -| !0 System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable`1.Enumerator.get_Current() | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult() | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter.GetResult() | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.CompilerServices.Unsafe.AddByteOffset`1(!0,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| !0 System.Runtime.CompilerServices.Unsafe.Add`1(!0,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| !0 System.Runtime.CompilerServices.Unsafe.AsRef`1(System.Void*) | [CLSCompliantAttribute(...)] | 0 | False | -| !0 System.Runtime.CompilerServices.Unsafe.AsRef`1(System.Void*) | [NullableContextAttribute(...)] | 0 | 0 | -| !0 System.Runtime.CompilerServices.Unsafe.As`1(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| !0 System.Runtime.CompilerServices.Unsafe.ReadUnaligned`1(System.Void*) | [CLSCompliantAttribute(...)] | 0 | False | -| !0 System.Runtime.CompilerServices.Unsafe.ReadUnaligned`1(System.Void*) | [NullableContextAttribute(...)] | 0 | 0 | -| !0 System.Runtime.CompilerServices.Unsafe.Read`1(System.Void*) | [CLSCompliantAttribute(...)] | 0 | False | -| !0 System.Runtime.CompilerServices.Unsafe.Read`1(System.Void*) | [NullableContextAttribute(...)] | 0 | 0 | -| !0 System.Runtime.CompilerServices.Unsafe.SubtractByteOffset`1(!0,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| !0 System.Runtime.CompilerServices.Unsafe.Subtract`1(!0,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| !0 System.Runtime.CompilerServices.Unsafe.Unbox`1(System.Object) | [NullableContextAttribute(...)] | 0 | 0 | -| !0 System.Runtime.CompilerServices.ValueTaskAwaiter`1.GetResult() | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.InteropServices.ComWrappers.ComInterfaceDispatch.GetInstance`1(System.Runtime.InteropServices.ComWrappers.ComInterfaceDispatch*) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.InteropServices.Marshal.GetObjectForNativeVariant`1(System.IntPtr) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| !0 System.Runtime.InteropServices.Marshal.GetObjectForNativeVariant`1(System.IntPtr) | [NullableContextAttribute(...)] | 0 | 2 | -| !0 System.Runtime.InteropServices.Marshal.GetObjectForNativeVariant`1(System.IntPtr) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| !0 System.Runtime.InteropServices.Marshal.PtrToStructure`1(System.IntPtr) | [NullableContextAttribute(...)] | 0 | 2 | -| !0 System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2.ManagedToUnmanagedIn.GetPinnableReference(!0[]) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.InteropServices.Marshalling.ReadOnlySpanMarshaller`2.ManagedToUnmanagedIn.GetPinnableReference(System.ReadOnlySpan<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.InteropServices.Marshalling.SafeHandleMarshaller`1.ManagedToUnmanagedOut.ToManaged() | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.InteropServices.Marshalling.SpanMarshaller`2.ManagedToUnmanagedIn.GetPinnableReference(System.Span<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.InteropServices.MemoryMarshal.GetArrayDataReference`1(!0[]) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.InteropServices.MemoryMarshal.GetReference`1(System.ReadOnlySpan<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.InteropServices.MemoryMarshal.GetReference`1(System.Span<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.InteropServices.SafeBuffer.Read`1(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| !0 System.Runtime.Intrinsics.Vector64.Dot`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.Intrinsics.Vector64.GetElement`1(System.Runtime.Intrinsics.Vector64<!0>,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.Intrinsics.Vector64.Sum`1(System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.Intrinsics.Vector64.ToScalar`1(System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.Intrinsics.Vector128.Dot`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.Intrinsics.Vector128.GetElement`1(System.Runtime.Intrinsics.Vector128<!0>,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.Intrinsics.Vector128.Sum`1(System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.Intrinsics.Vector128.ToScalar`1(System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.Intrinsics.Vector256.Dot`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.Intrinsics.Vector256.GetElement`1(System.Runtime.Intrinsics.Vector256<!0>,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.Intrinsics.Vector256.Sum`1(System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.Intrinsics.Vector256.ToScalar`1(System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.Intrinsics.Vector512.Dot`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.Intrinsics.Vector512.GetElement`1(System.Runtime.Intrinsics.Vector512<!0>,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.Intrinsics.Vector512.Sum`1(System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Runtime.Intrinsics.Vector512.ToScalar`1(System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Span`1.GetPinnableReference() | [EditorBrowsableAttribute(...)] | 0 | 1 | -| !0 System.Threading.Tasks.Sources.IValueTaskSource`1.GetResult(System.Int16) | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Threading.Tasks.Task`1.Result | [DebuggerBrowsableAttribute(...)] | 0 | 0 | -| !0 System.Threading.Tasks.ValueTask`1.Result | [DebuggerBrowsableAttribute(...)] | 0 | 0 | -| !0 System.Threading.ThreadLocal`1.Value | [DebuggerBrowsableAttribute(...)] | 0 | 0 | -| !0 System.Threading.ThreadLocal`1.ValueForDebugDisplay | [NullableAttribute(...)] | 0 | 2 | -| !0 System.Tuple`1.Item1 | [NullableAttribute(...)] | 0 | 1 | -| !0 System.Tuple`1.get_Item1() | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.Tuple`2.Item1 | [NullableAttribute(...)] | 0 | 1 | -| !0 System.Tuple`2.get_Item1() | [NullableContextAttribute(...)] | 0 | 1 | -| !0 System.WeakReference`1.Target | [NullableAttribute(...)] | 0 | 2 | -| !0* | [NullableAttribute(...)] | 0 | [0,1] | -| !0*[] | [NullableAttribute(...)] | 0 | [2,0,0] | -| !0[] | [NullableAttribute(...)] | 0 | 1 | -| !0[] | [NullableAttribute(...)] | 0 | [1,0] | -| !0[] | [NullableAttribute(...)] | 0 | [2,1] | -| !0[] System.ArraySegment`1.Array | [NullableAttribute(...)] | 0 | [2,1] | -| !0[] System.Buffers.SearchValuesDebugView`1.Values | [DebuggerBrowsableAttribute(...)] | 0 | 3 | -| !0[] System.Collections.Concurrent.IProducerConsumerCollectionDebugView`1.Items | [DebuggerBrowsableAttribute(...)] | 0 | 3 | -| !0[] System.Collections.Concurrent.SingleProducerSingleConsumerQueue`1.SingleProducerSingleConsumerQueue_DebugView.Items | [DebuggerBrowsableAttribute(...)] | 0 | 3 | -| !0[] System.Collections.Generic.DictionaryKeyCollectionDebugView`2.Items | [DebuggerBrowsableAttribute(...)] | 0 | 3 | -| !0[] System.Collections.Generic.ICollectionDebugView`1.Items | [DebuggerBrowsableAttribute(...)] | 0 | 3 | -| !0[] System.Collections.Generic.QueueDebugView`1.Items | [DebuggerBrowsableAttribute(...)] | 0 | 3 | -| !0[] System.Enum.GetValues`1() | [NullableContextAttribute(...)] | 0 | 0 | -| !0[] System.MemoryDebugView`1.Items | [DebuggerBrowsableAttribute(...)] | 0 | 3 | -| !0[] System.Runtime.InteropServices.Marshal.GetObjectsForNativeVariants`1(System.IntPtr,System.Int32) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| !0[] System.Runtime.InteropServices.Marshal.GetObjectsForNativeVariants`1(System.IntPtr,System.Int32) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| !0[] System.SpanDebugView`1.Items | [DebuggerBrowsableAttribute(...)] | 0 | 3 | -| !1 | [NullableAttribute(...)] | 0 | 1 | -| !1 System.Collections.Generic.CollectionExtensions.GetValueOrDefault`2(System.Collections.Generic.IReadOnlyDictionary<!0,!1>,!0) | [NullableContextAttribute(...)] | 0 | 2 | -| !1 System.Collections.Generic.Dictionary`2.ValueCollection.Enumerator.Current | [NullableAttribute(...)] | 0 | 1 | -| !1 System.Collections.Generic.Dictionary`2.ValueCollection.Enumerator.get_Current() | [NullableContextAttribute(...)] | 0 | 1 | -| !1 System.Converter`2.Invoke(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| !1 System.Func`2.Invoke(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| !1 System.Numerics.IUnaryPlusOperators`2.op_UnaryPlus(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| !1 System.Runtime.CompilerServices.ConditionalWeakTable`2.CreateValueCallback.Invoke(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| !1 System.Runtime.CompilerServices.Unsafe.BitCast`2(!0) | [NullableContextAttribute(...)] | 0 | 0 | -| !1 System.Runtime.InteropServices.Marshal.CreateWrapperOfType`2(!0) | [NullableContextAttribute(...)] | 0 | 2 | -| !1 System.Runtime.InteropServices.Marshal.CreateWrapperOfType`2(!0) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| !1 System.Tuple`2.Item2 | [NullableAttribute(...)] | 0 | 1 | -| !1 System.Tuple`2.get_Item2() | [NullableContextAttribute(...)] | 0 | 1 | -| !1[] | [NullableAttribute(...)] | 0 | [2,1] | -| !1[] System.Collections.Generic.DictionaryValueCollectionDebugView`2.Items | [DebuggerBrowsableAttribute(...)] | 0 | 3 | -| !2 | [NullableAttribute(...)] | 0 | 1 | -| !2 System.Func`3.Invoke(!0,!1) | [NullableContextAttribute(...)] | 0 | 1 | -| !2 System.Numerics.IModulusOperators`3.op_Modulus(!0,!1) | [NullableContextAttribute(...)] | 0 | 1 | -| !3 System.Func`4.Invoke(!0,!1,!2) | [NullableContextAttribute(...)] | 0 | 1 | -| !4 System.Func`5.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| !4 System.Func`5.Invoke(!0,!1,!2,!3) | [NullableContextAttribute(...)] | 0 | 1 | -| !5 System.Func`6.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| !5 System.Func`6.Invoke(!0,!1,!2,!3,!4) | [NullableContextAttribute(...)] | 0 | 1 | -| !6 System.Func`7.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| !6 System.Func`7.Invoke(!0,!1,!2,!3,!4,!5) | [NullableContextAttribute(...)] | 0 | 1 | -| !7 | [NullableAttribute(...)] | 0 | 0 | -| !7 System.Func`8.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| !7 System.Func`8.Invoke(!0,!1,!2,!3,!4,!5,!6) | [NullableContextAttribute(...)] | 0 | 1 | -| !8 System.Func`9.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| !8 System.Func`9.Invoke(!0,!1,!2,!3,!4,!5,!6,!7) | [NullableContextAttribute(...)] | 0 | 1 | -| !9 System.Func`10.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| !9 System.Func`10.Invoke(!0,!1,!2,!3,!4,!5,!6,!7,!8) | [NullableContextAttribute(...)] | 0 | 1 | -| !10 System.Func`11.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| !10 System.Func`11.Invoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9) | [NullableContextAttribute(...)] | 0 | 1 | -| !11 System.Func`12.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| !11 System.Func`12.Invoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10) | [NullableContextAttribute(...)] | 0 | 1 | -| !12 System.Func`13.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| !12 System.Func`13.Invoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11) | [NullableContextAttribute(...)] | 0 | 1 | -| !13 System.Func`14.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| !13 System.Func`14.Invoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12) | [NullableContextAttribute(...)] | 0 | 1 | -| !14 System.Func`15.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| !14 System.Func`15.Invoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13) | [NullableContextAttribute(...)] | 0 | 1 | -| !15 System.Func`16.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| !15 System.Func`16.Invoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14) | [NullableContextAttribute(...)] | 0 | 1 | -| !16 System.Func`17.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| !16 System.Func`17.Invoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,!15) | [NullableContextAttribute(...)] | 0 | 1 | -| Internal.Runtime.InteropServices.ComponentActivator.s_assemblyLoadContexts | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| Internal.Runtime.InteropServices.ComponentActivator.s_assemblyLoadContexts | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| Internal.Runtime.InteropServices.ComponentActivator.s_assemblyLoadContexts | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| Internal.Runtime.InteropServices.ComponentActivator.s_assemblyLoadContexts | [UnsupportedOSPlatformAttribute(...)] | 0 | maccatalyst | -| Internal.Runtime.InteropServices.ComponentActivator.s_assemblyLoadContexts | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| Internal.Runtime.InteropServices.IsolatedComponentLoadContext | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| Internal.Runtime.InteropServices.IsolatedComponentLoadContext | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| Internal.Runtime.InteropServices.IsolatedComponentLoadContext | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| Internal.Runtime.InteropServices.IsolatedComponentLoadContext | [UnsupportedOSPlatformAttribute(...)] | 0 | maccatalyst | -| Internal.Runtime.InteropServices.IsolatedComponentLoadContext | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| Internal.Runtime.InteropServices.IsolatedComponentLoadContext Internal.Runtime.InteropServices.ComponentActivator.GetIsolatedComponentLoadContext(System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Native hosting is not trim compatible and this warning will be seen if trimming is enabled. | -| Internal.Runtime.InteropServices.IsolatedComponentLoadContext Internal.Runtime.InteropServices.ComponentActivator.GetIsolatedComponentLoadContext(System.String) | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| Internal.Runtime.InteropServices.IsolatedComponentLoadContext Internal.Runtime.InteropServices.ComponentActivator.GetIsolatedComponentLoadContext(System.String) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| Internal.Runtime.InteropServices.IsolatedComponentLoadContext Internal.Runtime.InteropServices.ComponentActivator.GetIsolatedComponentLoadContext(System.String) | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| Internal.Runtime.InteropServices.IsolatedComponentLoadContext Internal.Runtime.InteropServices.ComponentActivator.GetIsolatedComponentLoadContext(System.String) | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| Interop.BOOL Interop.Kernel32.FreeEnvironmentStringsW(System.Char*) | [LibraryImportAttribute(...)] | 0 | QCall | -| Interop.BOOL System.Reflection.RuntimeAssembly.GetIsCollectible(System.Runtime.CompilerServices.QCallAssembly) | [LibraryImportAttribute(...)] | 0 | QCall | -| Interop.BOOL System.RuntimeMethodHandle.GetIsCollectible(System.RuntimeMethodHandleInternal) | [LibraryImportAttribute(...)] | 0 | QCall | -| Interop.BOOL System.RuntimeMethodHandle.IsCAVisibleFromDecoratedType(System.Runtime.CompilerServices.QCallTypeHandle,System.RuntimeMethodHandleInternal,System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.QCallModule) | [LibraryImportAttribute(...)] | 0 | QCall | -| Interop.BOOL System.RuntimeTypeHandle.IsCollectible(System.Runtime.CompilerServices.QCallTypeHandle) | [LibraryImportAttribute(...)] | 0 | QCall | -| Interop.BOOL System.Threading.Thread.YieldInternal() | [LibraryImportAttribute(...)] | 0 | QCall | -| Interop.Globalization.ResultCode Interop.Globalization.GetCalendarInfo(System.String,System.Globalization.CalendarId,System.Globalization.CalendarDataType,System.Char*,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| Interop.Globalization.ResultCode Interop.Globalization.GetCalendarInfo(System.String,System.Globalization.CalendarId,System.Globalization.CalendarDataType,System.Char*,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| Interop.Globalization.ResultCode Interop.Globalization.GetSortHandle(System.String,System.IntPtr) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| Interop.Globalization.ResultCode Interop.Globalization.GetSortHandle(System.String,System.IntPtr) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| Interop.Globalization.ResultCode Interop.Globalization.GetTimeZoneDisplayName(System.String,System.String,Interop.Globalization.TimeZoneDisplayNameType,System.Char*,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| Interop.Globalization.ResultCode Interop.Globalization.GetTimeZoneDisplayName(System.String,System.String,Interop.Globalization.TimeZoneDisplayNameType,System.Char*,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| Interop.HostPolicy.corehost_error_writer_fn | [UnmanagedFunctionPointerAttribute(...)] | 0 | 2 | -| Interop.HostPolicy.corehost_resolve_component_dependencies_result_fn | [UnmanagedFunctionPointerAttribute(...)] | 0 | 2 | -| Microsoft.Win32.SafeHandles.SafeFileHandle | [NullableAttribute(...)] | 0 | 0 | -| Microsoft.Win32.SafeHandles.SafeFileHandle | [NullableAttribute(...)] | 0 | 1 | -| Microsoft.Win32.SafeHandles.SafeFileHandle | [NullableContextAttribute(...)] | 0 | 2 | -| Microsoft.Win32.SafeHandles.SafeWaitHandle | [NullableAttribute(...)] | 0 | 2 | -| Microsoft.Win32.SafeHandles.SafeWaitHandle Interop.Kernel32.CreateEventEx(System.IntPtr,System.String,System.UInt32,System.UInt32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| Microsoft.Win32.SafeHandles.SafeWaitHandle Interop.Kernel32.CreateEventEx(System.IntPtr,System.String,System.UInt32,System.UInt32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| Microsoft.Win32.SafeHandles.SafeWaitHandle Interop.Kernel32.CreateMutexEx(System.IntPtr,System.String,System.UInt32,System.UInt32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| Microsoft.Win32.SafeHandles.SafeWaitHandle Interop.Kernel32.CreateMutexEx(System.IntPtr,System.String,System.UInt32,System.UInt32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| Microsoft.Win32.SafeHandles.SafeWaitHandle Interop.Kernel32.CreateSemaphoreEx(System.IntPtr,System.Int32,System.Int32,System.String,System.UInt32,System.UInt32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| Microsoft.Win32.SafeHandles.SafeWaitHandle Interop.Kernel32.CreateSemaphoreEx(System.IntPtr,System.Int32,System.Int32,System.String,System.UInt32,System.UInt32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| Microsoft.Win32.SafeHandles.SafeWaitHandle Interop.Kernel32.OpenMutex(System.UInt32,System.Boolean,System.String) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| Microsoft.Win32.SafeHandles.SafeWaitHandle Interop.Kernel32.OpenMutex(System.UInt32,System.Boolean,System.String) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| Microsoft.Win32.SafeHandles.SafeWaitHandle System.Threading.RegisteredWaitHandle.Handle | [NullableAttribute(...)] | 0 | 1 | -| System.AccessViolationException | [NullableAttribute(...)] | 0 | 0 | -| System.AccessViolationException | [NullableContextAttribute(...)] | 0 | 2 | -| System.AccessViolationException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Action<System.Object,System.Threading.CancellationToken> | [NullableAttribute(...)] | 0 | [1,2] | -| System.Action<System.Object,System.Threading.Tasks.Task<!0>> | [NullableAttribute(...)] | 0 | [1,1,1,2] | -| System.Action<System.Object,System.Threading.Tasks.Task> | [NullableAttribute(...)] | 0 | [1,1,2] | -| System.Action<System.Object> | [NullableAttribute(...)] | 0 | [1,2] | -| System.Action<System.Runtime.Loader.AssemblyLoadContext> | [NullableAttribute(...)] | 0 | [2,1] | -| System.Action<System.Threading.AsyncLocalValueChangedArgs<!0>> | [NullableAttribute(...)] | 0 | [2,0,1] | -| System.Action`4 | [NullableAttribute(...)] | 0 | 0 | -| System.Action`4 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Action`5 | [NullableAttribute(...)] | 0 | 0 | -| System.Action`5 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Action`6 | [NullableAttribute(...)] | 0 | 0 | -| System.Action`6 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Action`7 | [NullableAttribute(...)] | 0 | 0 | -| System.Action`7 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Action`8 | [NullableAttribute(...)] | 0 | 0 | -| System.Action`8 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Action`9 | [NullableAttribute(...)] | 0 | 0 | -| System.Action`9 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Action`10 | [NullableAttribute(...)] | 0 | 0 | -| System.Action`10 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Action`11 | [NullableAttribute(...)] | 0 | 0 | -| System.Action`11 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Action`12 | [NullableAttribute(...)] | 0 | 0 | -| System.Action`12 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Action`13 | [NullableAttribute(...)] | 0 | 0 | -| System.Action`13 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Action`14 | [NullableAttribute(...)] | 0 | 0 | -| System.Action`14 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Action`15 | [NullableAttribute(...)] | 0 | 0 | -| System.Action`15 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Action`16 | [NullableAttribute(...)] | 0 | 0 | -| System.Action`16 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Activator | [NullableAttribute(...)] | 0 | 0 | -| System.Activator | [NullableContextAttribute(...)] | 0 | 1 | -| System.AggregateException | [DebuggerDisplayAttribute(...)] | 0 | Count = {InnerExceptionCount} | -| System.AggregateException | [NullableAttribute(...)] | 0 | 0 | -| System.AggregateException | [NullableContextAttribute(...)] | 0 | 1 | -| System.AggregateException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.AggregateException System.Threading.Tasks.Task.Exception | [NullableAttribute(...)] | 0 | 2 | -| System.AggregateException System.Threading.Tasks.Task.get_Exception() | [NullableContextAttribute(...)] | 0 | 2 | -| System.AppContext | [NullableAttribute(...)] | 0 | 0 | -| System.AppContext | [NullableContextAttribute(...)] | 0 | 1 | -| System.AppContext.FirstChanceException | [NullableAttribute(...)] | 0 | [2,1] | -| System.AppContext.ProcessExit | [NullableAttribute(...)] | 0 | 2 | -| System.AppContext.UnhandledException | [NullableAttribute(...)] | 0 | 2 | -| System.AppDomain | [NullableAttribute(...)] | 0 | 0 | -| System.AppDomain | [NullableContextAttribute(...)] | 0 | 1 | -| System.AppDomain System.AppDomain.CreateDomain(System.String) | [ObsoleteAttribute(...)] | 0 | Creating and unloading AppDomains is not supported and throws an exception. | -| System.AppDomain.AssemblyLoad | [NullableAttribute(...)] | 0 | 2 | -| System.AppDomain.AssemblyResolve | [NullableAttribute(...)] | 0 | 2 | -| System.AppDomain.DomainUnload | [NullableAttribute(...)] | 0 | 2 | -| System.AppDomain.FirstChanceException | [NullableAttribute(...)] | 0 | [2,1] | -| System.AppDomain.ProcessExit | [NullableAttribute(...)] | 0 | 2 | -| System.AppDomain.ReflectionOnlyAssemblyResolve | [NullableAttribute(...)] | 0 | 2 | -| System.AppDomain.ResourceResolve | [NullableAttribute(...)] | 0 | 2 | -| System.AppDomain.TypeResolve | [NullableAttribute(...)] | 0 | 2 | -| System.AppDomain.UnhandledException | [NullableAttribute(...)] | 0 | 2 | -| System.AppDomainSetup | [NullableAttribute(...)] | 0 | 0 | -| System.AppDomainSetup | [NullableContextAttribute(...)] | 0 | 2 | -| System.AppDomainUnloadedException | [NullableAttribute(...)] | 0 | 0 | -| System.AppDomainUnloadedException | [NullableContextAttribute(...)] | 0 | 2 | -| System.AppDomainUnloadedException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.ApplicationException | [NullableAttribute(...)] | 0 | 0 | -| System.ApplicationException | [NullableContextAttribute(...)] | 0 | 2 | -| System.ApplicationException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.ApplicationId | [NullableAttribute(...)] | 0 | 0 | -| System.ApplicationId | [NullableContextAttribute(...)] | 0 | 1 | -| System.ArgumentException | [NullableAttribute(...)] | 0 | 0 | -| System.ArgumentException | [NullableContextAttribute(...)] | 0 | 2 | -| System.ArgumentException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.ArgumentNullException | [NullableAttribute(...)] | 0 | 0 | -| System.ArgumentNullException | [NullableContextAttribute(...)] | 0 | 2 | -| System.ArgumentNullException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.ArgumentOutOfRangeException | [NullableAttribute(...)] | 0 | 0 | -| System.ArgumentOutOfRangeException | [NullableContextAttribute(...)] | 0 | 1 | -| System.ArgumentOutOfRangeException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.ArithmeticException | [NullableAttribute(...)] | 0 | 0 | -| System.ArithmeticException | [NullableContextAttribute(...)] | 0 | 2 | -| System.ArithmeticException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Array | [NullableAttribute(...)] | 0 | 0 | -| System.Array | [NullableAttribute(...)] | 0 | 1 | -| System.Array | [NullableAttribute(...)] | 0 | 2 | -| System.Array | [NullableContextAttribute(...)] | 0 | 1 | -| System.Array | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Array System.Array.CreateInstance(System.Type,System.Int32) | [RequiresDynamicCodeAttribute(...)] | 0 | The code for an array of the specified type might not be available. | -| System.Array System.Array.CreateInstance(System.Type,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 0 | AotAnalysis | -| System.Array System.Array.CreateInstance(System.Type,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL3050:RequiresDynamicCode | -| System.Array System.Array.CreateInstance(System.Type,System.Int32,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 0 | AotAnalysis | -| System.Array System.Array.CreateInstance(System.Type,System.Int32,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL3050:RequiresDynamicCode | -| System.Array System.Array.CreateInstance(System.Type,System.Int32[]) | [RequiresDynamicCodeAttribute(...)] | 0 | The code for an array of the specified type might not be available. | -| System.Array System.Array.CreateInstance(System.Type,System.Int32[],System.Int32[]) | [RequiresDynamicCodeAttribute(...)] | 0 | The code for an array of the specified type might not be available. | -| System.Array System.Array.CreateInstance(System.Type,System.Int64[]) | [RequiresDynamicCodeAttribute(...)] | 0 | The code for an array of the specified type might not be available. | -| System.Array System.Collections.ArrayList.FixedSizeArrayList.ToArray(System.Type) | [RequiresDynamicCodeAttribute(...)] | 0 | The code for an array of the specified type might not be available. | -| System.Array System.Collections.ArrayList.IListWrapper.ToArray(System.Type) | [RequiresDynamicCodeAttribute(...)] | 0 | The code for an array of the specified type might not be available. | -| System.Array System.Collections.ArrayList.Range.ToArray(System.Type) | [RequiresDynamicCodeAttribute(...)] | 0 | The code for an array of the specified type might not be available. | -| System.Array System.Collections.ArrayList.ReadOnlyArrayList.ToArray(System.Type) | [RequiresDynamicCodeAttribute(...)] | 0 | The code for an array of the specified type might not be available. | -| System.Array System.Collections.ArrayList.SyncArrayList.ToArray(System.Type) | [RequiresDynamicCodeAttribute(...)] | 0 | The code for an array of the specified type might not be available. | -| System.Array System.Collections.ArrayList.ToArray(System.Type) | [RequiresDynamicCodeAttribute(...)] | 0 | The code for an array of the specified type might not be available. | -| System.Array System.Enum.GetValues(System.Type) | [RequiresDynamicCodeAttribute(...)] | 0 | It might not be possible to create an array of the enum type at runtime. Use the GetValues<TEnum> overload or the GetValuesAsUnderlyingType method instead. | -| System.Array System.Reflection.SignatureType.GetEnumValues() | [RequiresDynamicCodeAttribute(...)] | 0 | It might not be possible to create an array of the enum type at runtime. Use Enum.GetValues<T> or the GetEnumValuesAsUnderlyingType method instead. | -| System.Array System.RuntimeType.GetEnumValues() | [RequiresDynamicCodeAttribute(...)] | 0 | It might not be possible to create an array of the enum type at runtime. Use Enum.GetValues<T> or the GetEnumValuesAsUnderlyingType method instead. | -| System.Array System.Type.GetEnumValues() | [RequiresDynamicCodeAttribute(...)] | 0 | It might not be possible to create an array of the enum type at runtime. Use Enum.GetValues<T> or the GetEnumValuesAsUnderlyingType method instead. | -| System.ArraySegment<!0> | [NullableAttribute(...)] | 0 | [0,1] | -| System.ArraySegment<!0> System.ArraySegment`1.Empty | [NullableAttribute(...)] | 0 | [0,1] | -| System.ArraySegment<!0>.Enumerator System.ArraySegment`1.GetEnumerator() | [NullableContextAttribute(...)] | 0 | 0 | -| System.ArraySegment`1 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.ArraySegment`1 | [NullableAttribute(...)] | 0 | 0 | -| System.ArraySegment`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.ArraySegment`1 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.ArraySegment`1.Enumerator | [NullableContextAttribute(...)] | 0 | 0 | -| System.ArrayTypeMismatchException | [NullableAttribute(...)] | 0 | 0 | -| System.ArrayTypeMismatchException | [NullableContextAttribute(...)] | 0 | 2 | -| System.ArrayTypeMismatchException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.AssemblyLoadEventArgs | [NullableAttribute(...)] | 0 | 0 | -| System.AssemblyLoadEventArgs | [NullableAttribute(...)] | 0 | 1 | -| System.AssemblyLoadEventArgs | [NullableContextAttribute(...)] | 0 | 1 | -| System.AsyncCallback | [NullableAttribute(...)] | 0 | 0 | -| System.AsyncCallback | [NullableAttribute(...)] | 0 | 2 | -| System.Attribute | [AttributeUsageAttribute(...)] | 0 | 32767 | -| System.Attribute | [NullableAttribute(...)] | 0 | 0 | -| System.Attribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Attribute | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Attribute System.Diagnostics.Tracing.EventSource.GetCustomAttributeHelper(System.Reflection.MemberInfo,System.Type,System.Diagnostics.Tracing.EventManifestOptions) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Attribute System.Diagnostics.Tracing.EventSource.GetCustomAttributeHelper(System.Reflection.MemberInfo,System.Type,System.Diagnostics.Tracing.EventManifestOptions) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2114:ReflectionToDynamicallyAccessedMembers | -| System.AttributeUsageAttribute | [AttributeUsageAttribute(...)] | 0 | 4 | -| System.AttributeUsageAttribute System.Reflection.CustomAttribute.GetAttributeUsage(System.RuntimeType) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.AttributeUsageAttribute System.Reflection.CustomAttribute.GetAttributeUsage(System.RuntimeType) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.BadImageFormatException | [NullableAttribute(...)] | 0 | 0 | -| System.BadImageFormatException | [NullableContextAttribute(...)] | 0 | 2 | -| System.BadImageFormatException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.BitConverter | [NullableAttribute(...)] | 0 | 0 | -| System.BitConverter | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean Interop.Globalization.EndsWith(System.IntPtr,System.Char*,System.Int32,System.Char*,System.Int32,System.Globalization.CompareOptions,System.Int32*) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean Interop.Globalization.EndsWith(System.IntPtr,System.Char*,System.Int32,System.Char*,System.Int32,System.Globalization.CompareOptions,System.Int32*) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean Interop.Globalization.EnumCalendarInfo(System.IntPtr,System.String,System.Globalization.CalendarId,System.Globalization.CalendarDataType,System.IntPtr) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean Interop.Globalization.EnumCalendarInfo(System.IntPtr,System.String,System.Globalization.CalendarId,System.Globalization.CalendarDataType,System.IntPtr) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean Interop.Globalization.GetDefaultLocaleName(System.Char*,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean Interop.Globalization.GetDefaultLocaleName(System.Char*,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean Interop.Globalization.GetJapaneseEraStartDate(System.Int32,System.Int32,System.Int32,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean Interop.Globalization.GetJapaneseEraStartDate(System.Int32,System.Int32,System.Int32,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean Interop.Globalization.GetJapaneseEraStartDate(System.Int32,System.Int32,System.Int32,System.Int32) | [LibraryImportAttribute(...)] | 0 | libSystem.Globalization.Native | -| System.Boolean Interop.Globalization.GetLocaleInfoGroupingSizes(System.String,System.UInt32,System.Int32,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean Interop.Globalization.GetLocaleInfoGroupingSizes(System.String,System.UInt32,System.Int32,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean Interop.Globalization.GetLocaleInfoInt(System.String,System.UInt32,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean Interop.Globalization.GetLocaleInfoInt(System.String,System.UInt32,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean Interop.Globalization.GetLocaleInfoString(System.String,System.UInt32,System.Char*,System.Int32,System.String) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean Interop.Globalization.GetLocaleInfoString(System.String,System.UInt32,System.Char*,System.Int32,System.String) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean Interop.Globalization.GetLocaleName(System.String,System.Char*,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean Interop.Globalization.GetLocaleName(System.String,System.Char*,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean Interop.Globalization.GetLocaleTimeFormat(System.String,System.Boolean,System.Char*,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean Interop.Globalization.GetLocaleTimeFormat(System.String,System.Boolean,System.Char*,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean Interop.Globalization.IsPredefinedLocale(System.String) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean Interop.Globalization.IsPredefinedLocale(System.String) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean Interop.Globalization.StartsWith(System.IntPtr,System.Char*,System.Int32,System.Char*,System.Int32,System.Globalization.CompareOptions,System.Int32*) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean Interop.Globalization.StartsWith(System.IntPtr,System.Char*,System.Int32,System.Char*,System.Int32,System.Globalization.CompareOptions,System.Int32*) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean Interop.Kernel32.CloseHandle(System.IntPtr) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean Interop.Kernel32.CloseHandle(System.IntPtr) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean Interop.Kernel32.CloseHandle(System.IntPtr) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Boolean Interop.Kernel32.ReleaseMutex(Microsoft.Win32.SafeHandles.SafeWaitHandle) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean Interop.Kernel32.ReleaseMutex(Microsoft.Win32.SafeHandles.SafeWaitHandle) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean Interop.Kernel32.ReleaseMutex(Microsoft.Win32.SafeHandles.SafeWaitHandle) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Boolean Interop.Kernel32.ReleaseSemaphore(Microsoft.Win32.SafeHandles.SafeWaitHandle,System.Int32,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean Interop.Kernel32.ReleaseSemaphore(Microsoft.Win32.SafeHandles.SafeWaitHandle,System.Int32,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean Interop.Kernel32.ReleaseSemaphore(Microsoft.Win32.SafeHandles.SafeWaitHandle,System.Int32,System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Boolean Interop.Kernel32.ResetEvent(Microsoft.Win32.SafeHandles.SafeWaitHandle) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean Interop.Kernel32.ResetEvent(Microsoft.Win32.SafeHandles.SafeWaitHandle) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean Interop.Kernel32.ResetEvent(Microsoft.Win32.SafeHandles.SafeWaitHandle) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Boolean Interop.Kernel32.SetEnvironmentVariable(System.String,System.String) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean Interop.Kernel32.SetEnvironmentVariable(System.String,System.String) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean Interop.Kernel32.SetEvent(Microsoft.Win32.SafeHandles.SafeWaitHandle) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean Interop.Kernel32.SetEvent(Microsoft.Win32.SafeHandles.SafeWaitHandle) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean Interop.Kernel32.SetEvent(Microsoft.Win32.SafeHandles.SafeWaitHandle) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Boolean System.ApplicationId.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.ArgIterator.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.ArraySegment`1.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Attribute.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Attribute.Equals(System.Object) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Boolean System.Attribute.Equals(System.Object) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2075:UnrecognizedReflectionPattern | -| System.Boolean System.Attribute.Match(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.BitConverter.ToBoolean(System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.BitConverter.TryWriteBytes(System.Span<System.Byte>,System.Boolean) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.BitConverter.TryWriteBytes(System.Span<System.Byte>,System.Char) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.BitConverter.TryWriteBytes(System.Span<System.Byte>,System.Double) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.BitConverter.TryWriteBytes(System.Span<System.Byte>,System.Half) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.BitConverter.TryWriteBytes(System.Span<System.Byte>,System.Int16) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.BitConverter.TryWriteBytes(System.Span<System.Byte>,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.BitConverter.TryWriteBytes(System.Span<System.Byte>,System.Int64) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.BitConverter.TryWriteBytes(System.Span<System.Byte>,System.Single) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.BitConverter.TryWriteBytes(System.Span<System.Byte>,System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.BitConverter.TryWriteBytes(System.Span<System.Byte>,System.UInt16) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.BitConverter.TryWriteBytes(System.Span<System.Byte>,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.BitConverter.TryWriteBytes(System.Span<System.Byte>,System.UInt32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.BitConverter.TryWriteBytes(System.Span<System.Byte>,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.BitConverter.TryWriteBytes(System.Span<System.Byte>,System.UInt64) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Boolean.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Boolean.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Boolean.TryParse(System.String,System.Boolean) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Buffers.Binary.BinaryPrimitives.TryReadUInt16BigEndian(System.ReadOnlySpan<System.Byte>,System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Binary.BinaryPrimitives.TryReadUInt16LittleEndian(System.ReadOnlySpan<System.Byte>,System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Binary.BinaryPrimitives.TryReadUInt32BigEndian(System.ReadOnlySpan<System.Byte>,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Binary.BinaryPrimitives.TryReadUInt32LittleEndian(System.ReadOnlySpan<System.Byte>,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Binary.BinaryPrimitives.TryReadUInt64BigEndian(System.ReadOnlySpan<System.Byte>,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Binary.BinaryPrimitives.TryReadUInt64LittleEndian(System.ReadOnlySpan<System.Byte>,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Binary.BinaryPrimitives.TryReadUInt128BigEndian(System.ReadOnlySpan<System.Byte>,System.UInt128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Binary.BinaryPrimitives.TryReadUInt128LittleEndian(System.ReadOnlySpan<System.Byte>,System.UInt128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Binary.BinaryPrimitives.TryReadUIntPtrBigEndian(System.ReadOnlySpan<System.Byte>,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Binary.BinaryPrimitives.TryReadUIntPtrLittleEndian(System.ReadOnlySpan<System.Byte>,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Binary.BinaryPrimitives.TryWriteUInt16BigEndian(System.Span<System.Byte>,System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Binary.BinaryPrimitives.TryWriteUInt16LittleEndian(System.Span<System.Byte>,System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Binary.BinaryPrimitives.TryWriteUInt32BigEndian(System.Span<System.Byte>,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Binary.BinaryPrimitives.TryWriteUInt32LittleEndian(System.Span<System.Byte>,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Binary.BinaryPrimitives.TryWriteUInt64BigEndian(System.Span<System.Byte>,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Binary.BinaryPrimitives.TryWriteUInt64LittleEndian(System.Span<System.Byte>,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Binary.BinaryPrimitives.TryWriteUInt128BigEndian(System.Span<System.Byte>,System.UInt128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Binary.BinaryPrimitives.TryWriteUInt128LittleEndian(System.Span<System.Byte>,System.UInt128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Binary.BinaryPrimitives.TryWriteUIntPtrBigEndian(System.Span<System.Byte>,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Binary.BinaryPrimitives.TryWriteUIntPtrLittleEndian(System.Span<System.Byte>,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.SearchValues`1.Contains(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Buffers.StandardFormat.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Buffers.Text.Utf8Formatter.TryFormat(System.SByte,System.Span<System.Byte>,System.Int32,System.Buffers.StandardFormat) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Text.Utf8Formatter.TryFormat(System.UInt16,System.Span<System.Byte>,System.Int32,System.Buffers.StandardFormat) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Text.Utf8Formatter.TryFormat(System.UInt32,System.Span<System.Byte>,System.Int32,System.Buffers.StandardFormat) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Text.Utf8Formatter.TryFormat(System.UInt64,System.Span<System.Byte>,System.Int32,System.Buffers.StandardFormat) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Text.Utf8Parser.TryParse(System.ReadOnlySpan<System.Byte>,System.SByte,System.Int32,System.Char) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Text.Utf8Parser.TryParse(System.ReadOnlySpan<System.Byte>,System.UInt16,System.Int32,System.Char) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Text.Utf8Parser.TryParse(System.ReadOnlySpan<System.Byte>,System.UInt32,System.Int32,System.Char) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Buffers.Text.Utf8Parser.TryParse(System.ReadOnlySpan<System.Byte>,System.UInt64,System.Int32,System.Char) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Byte.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Byte.TryParse(System.String,System.Byte) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Byte.TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.Byte) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Byte.TryParse(System.String,System.IFormatProvider,System.Byte) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Char.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Char.IsControl(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Char.IsDigit(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Char.IsHighSurrogate(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Char.IsLetter(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Char.IsLetterOrDigit(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Char.IsLowSurrogate(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Char.IsLower(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Char.IsNumber(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Char.IsPunctuation(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Char.IsSeparator(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Char.IsSurrogate(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Char.IsSurrogatePair(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Char.IsSymbol(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Char.IsUpper(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Char.IsWhiteSpace(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Char.TryParse(System.String,System.Char) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Collections.ArrayList.Contains(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Collections.Generic.ByteEqualityComparer.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Collections.Generic.Dictionary`2.KeyCollection.Contains(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Collections.Generic.EnumEqualityComparer`1.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Collections.Generic.EqualityComparer`1.Equals(!0,!0) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Collections.Generic.NonRandomizedStringEqualityComparer.Equals(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Collections.Generic.NullableComparer`1.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Collections.Generic.NullableEqualityComparer`1.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Collections.Generic.ReferenceEqualityComparer.Equals(System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Collections.Hashtable.ContainsValue(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Collections.IEqualityComparer.Equals(System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.ComponentModel.DefaultValueAttribute.ctor>g__TryConvertFromInvariantString\|2_0(System.Type,System.String,System.Object) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Generic TypeConverters may require the generic types to be annotated. For example, NullableConverter requires the underlying type to be DynamicallyAccessedMembers All. | -| System.Boolean System.ComponentModel.EditorBrowsableAttribute.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Console.get_CursorVisible() | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Boolean System.ConsoleKeyInfo.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Convert.ToBoolean(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Convert.ToBoolean(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Convert.ToBoolean(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Convert.ToBoolean(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Convert.TryFromBase64Chars(System.ReadOnlySpan<System.Char>,System.Span<System.Byte>,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Convert.TryFromBase64String(System.String,System.Span<System.Byte>,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Convert.TryToBase64Chars(System.ReadOnlySpan<System.Byte>,System.Span<System.Char>,System.Int32,System.Base64FormattingOptions) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.DateOnly.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.DateOnly.TryParse(System.String,System.DateOnly) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.DateOnly.TryParse(System.String,System.IFormatProvider,System.DateOnly) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.DateOnly.TryParse(System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateOnly) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.DateOnly.TryParseExact(System.ReadOnlySpan<System.Char>,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateOnly) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.DateOnly.TryParseExact(System.String,System.String,System.DateOnly) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.DateOnly.TryParseExact(System.String,System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateOnly) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.DateOnly.TryParseExact(System.String,System.String[],System.DateOnly) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.DateOnly.TryParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateOnly) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.DateTime.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.DateTime.TryParse(System.String,System.DateTime) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.DateTime.TryParse(System.String,System.IFormatProvider,System.DateTime) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.DateTime.TryParse(System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.DateTime.TryParseExact(System.ReadOnlySpan<System.Char>,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.DateTime.TryParseExact(System.String,System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.DateTime.TryParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTime) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.DateTimeOffset.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.DateTimeOffset.TryParse(System.String,System.DateTimeOffset) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.DateTimeOffset.TryParse(System.String,System.IFormatProvider,System.DateTimeOffset) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.DateTimeOffset.TryParse(System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTimeOffset) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.DateTimeOffset.TryParseExact(System.ReadOnlySpan<System.Char>,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTimeOffset) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.DateTimeOffset.TryParseExact(System.String,System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTimeOffset) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.DateTimeOffset.TryParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.DateTimeOffset) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Decimal.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Decimal.TryParse(System.String,System.Decimal) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Decimal.TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.Decimal) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Decimal.TryParse(System.String,System.IFormatProvider,System.Decimal) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Delegate.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Delegate.op_Equality(System.Delegate,System.Delegate) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Delegate.op_Inequality(System.Delegate,System.Delegate) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Diagnostics.Debugger.LaunchInternal() | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean System.Diagnostics.Debugger.LaunchInternal() | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean System.Diagnostics.Debugger.LaunchInternal() | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Boolean System.Diagnostics.StackFrameExtensions.HasMethod(System.Diagnostics.StackFrame) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Boolean System.Diagnostics.StackFrameExtensions.HasMethod(System.Diagnostics.StackFrame) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Boolean System.Diagnostics.Tracing.EventPipeInternal.GetNextEvent(System.UInt64,System.Diagnostics.Tracing.EventPipeEventInstanceData*) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean System.Diagnostics.Tracing.EventPipeInternal.GetNextEvent(System.UInt64,System.Diagnostics.Tracing.EventPipeEventInstanceData*) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean System.Diagnostics.Tracing.EventPipeInternal.GetNextEvent(System.UInt64,System.Diagnostics.Tracing.EventPipeEventInstanceData*) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Boolean System.Diagnostics.Tracing.EventPipeInternal.GetSessionInfo(System.UInt64,System.Diagnostics.Tracing.EventPipeSessionInfo*) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean System.Diagnostics.Tracing.EventPipeInternal.GetSessionInfo(System.UInt64,System.Diagnostics.Tracing.EventPipeSessionInfo*) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean System.Diagnostics.Tracing.EventPipeInternal.GetSessionInfo(System.UInt64,System.Diagnostics.Tracing.EventPipeSessionInfo*) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Boolean System.Diagnostics.Tracing.EventPipeInternal.SignalSession(System.UInt64) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean System.Diagnostics.Tracing.EventPipeInternal.SignalSession(System.UInt64) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean System.Diagnostics.Tracing.EventPipeInternal.SignalSession(System.UInt64) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Boolean System.Diagnostics.Tracing.EventPipeInternal.WaitForSessionSignal(System.UInt64,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean System.Diagnostics.Tracing.EventPipeInternal.WaitForSessionSignal(System.UInt64,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean System.Diagnostics.Tracing.EventPipeInternal.WaitForSessionSignal(System.UInt64,System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Boolean System.Double.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Double.TryParse(System.String,System.Double) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Double.TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.Double) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Double.TryParse(System.String,System.IFormatProvider,System.Double) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Enum.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Enum.IsDefined`1(!0) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Enum.TryFormat`1(!0,System.Span<System.Char>,System.Int32,System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Enum.TryParse(System.Type,System.ReadOnlySpan<System.Char>,System.Boolean,System.Object) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Enum.TryParse(System.Type,System.ReadOnlySpan<System.Char>,System.Object) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Enum.TryParse(System.Type,System.String,System.Boolean,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Enum.TryParse(System.Type,System.String,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Enum.TryParse`1(System.ReadOnlySpan<System.Char>,!0) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Enum.TryParse`1(System.ReadOnlySpan<System.Char>,System.Boolean,!0) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Enum.TryParse`1(System.String,!0) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Enum.TryParse`1(System.String,System.Boolean,!0) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Globalization.CompareInfo.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Globalization.CompareInfo.IsPrefix(System.ReadOnlySpan<System.Char>,System.ReadOnlySpan<System.Char>,System.Globalization.CompareOptions) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Globalization.CompareInfo.IsPrefix(System.ReadOnlySpan<System.Char>,System.ReadOnlySpan<System.Char>,System.Globalization.CompareOptions,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Globalization.CompareInfo.IsSortable(System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Globalization.CompareInfo.IsSuffix(System.ReadOnlySpan<System.Char>,System.ReadOnlySpan<System.Char>,System.Globalization.CompareOptions) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Globalization.CompareInfo.IsSuffix(System.ReadOnlySpan<System.Char>,System.ReadOnlySpan<System.Char>,System.Globalization.CompareOptions,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Globalization.CultureInfo.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Globalization.IdnMapping.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Globalization.RegionInfo.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Globalization.SortKey.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Globalization.StringInfo.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Globalization.TextInfo.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Guid.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Guid.TryParse(System.String,System.Guid) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Guid.TryParse(System.String,System.IFormatProvider,System.Guid) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Guid.TryParseExact(System.String,System.String,System.Guid) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Half.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Half.TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.Half) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Half.TryParse(System.String,System.Half) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Half.TryParse(System.String,System.IFormatProvider,System.Half) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.HashCode.Equals(System.Object) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Boolean System.HashCode.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.HashCode.Equals(System.Object) | [ObsoleteAttribute(...)] | 0 | HashCode is a mutable struct and should not be compared with other HashCodes. | -| System.Boolean System.HashCode.Equals(System.Object) | [ObsoleteAttribute(...)] | 1 | True | -| System.Boolean System.HexConverter.TryDecodeFromUtf16_Vector128(System.ReadOnlySpan<System.Char>,System.Span<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd.Arm64 | -| System.Boolean System.HexConverter.TryDecodeFromUtf16_Vector128(System.ReadOnlySpan<System.Char>,System.Span<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Ssse3 | -| System.Boolean System.IO.Directory.Exists(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.IO.File.Exists(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.IO.MemoryStream.TryGetBuffer(System.ArraySegment<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.IO.Path.EndsInDirectorySeparator(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.IO.Path.Exists(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.IO.Path.HasExtension(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.IO.Path.IsPathFullyQualified(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.IO.Path.IsPathRooted(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.IParsable`1.TryParse(System.String,System.IFormatProvider,!0) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Index.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Int16.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Int16.TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.Int16) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Int16.TryParse(System.String,System.IFormatProvider,System.Int16) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Int16.TryParse(System.String,System.Int16) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Int32.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Int32.TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Int32.TryParse(System.String,System.IFormatProvider,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Int32.TryParse(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Int64.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Int64.TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.Int64) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Int64.TryParse(System.String,System.IFormatProvider,System.Int64) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Int64.TryParse(System.String,System.Int64) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Int128.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Int128.TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.Int128) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Int128.TryParse(System.String,System.IFormatProvider,System.Int128) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Int128.TryParse(System.String,System.Int128) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.IntPtr.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.IntPtr.TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.IntPtr.TryParse(System.String,System.IFormatProvider,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.IntPtr.TryParse(System.String,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.MdUtf8String.EqualsCaseInsensitive(System.Void*,System.Void*,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean System.MdUtf8String.EqualsCaseInsensitive(System.Void*,System.Void*,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean System.MdUtf8String.EqualsCaseInsensitive(System.Void*,System.Void*,System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Boolean System.MemoryExtensions.ContainsAnyExceptInRange`1(System.ReadOnlySpan<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.MemoryExtensions.ContainsAnyExceptInRange`1(System.Span<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.MemoryExtensions.ContainsAnyExcept`1(System.ReadOnlySpan<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.MemoryExtensions.ContainsAnyExcept`1(System.ReadOnlySpan<!0>,!0,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.MemoryExtensions.ContainsAnyExcept`1(System.Span<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.MemoryExtensions.ContainsAnyExcept`1(System.Span<!0>,!0,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.MemoryExtensions.ContainsAnyInRange`1(System.ReadOnlySpan<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.MemoryExtensions.ContainsAnyInRange`1(System.Span<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.MemoryExtensions.ContainsAny`1(System.ReadOnlySpan<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.MemoryExtensions.ContainsAny`1(System.ReadOnlySpan<!0>,!0,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.MemoryExtensions.ContainsAny`1(System.Span<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.MemoryExtensions.ContainsAny`1(System.Span<!0>,!0,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.MemoryExtensions.Overlaps`1(System.ReadOnlySpan<!0>,System.ReadOnlySpan<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.MemoryExtensions.Overlaps`1(System.ReadOnlySpan<!0>,System.ReadOnlySpan<!0>,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.MemoryExtensions.Overlaps`1(System.Span<!0>,System.ReadOnlySpan<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.MemoryExtensions.Overlaps`1(System.Span<!0>,System.ReadOnlySpan<!0>,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.MemoryExtensions.SequenceEqual`1(System.ReadOnlySpan<!0>,System.ReadOnlySpan<!0>,System.Collections.Generic.IEqualityComparer<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.MemoryExtensions.SequenceEqual`1(System.Span<!0>,System.ReadOnlySpan<!0>,System.Collections.Generic.IEqualityComparer<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.MemoryExtensions.TryWriteInterpolatedStringHandler.AppendFormatted(System.Object,System.Int32,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.MemoryExtensions.TryWriteInterpolatedStringHandler.AppendFormatted(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.MemoryExtensions.TryWriteInterpolatedStringHandler.AppendFormatted(System.String,System.Int32,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.MemoryExtensions.TryWriteInterpolatedStringHandler.AppendFormatted`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.MemoryExtensions.TryWriteInterpolatedStringHandler.AppendFormatted`1(!0,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.MemoryExtensions.TryWriteInterpolatedStringHandler.AppendFormatted`1(!0,System.Int32,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.MemoryExtensions.TryWriteInterpolatedStringHandler.AppendFormatted`1(!0,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.MemoryExtensions.TryWriteInterpolatedStringHandler.AppendLiteral(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.MemoryExtensions.TryWrite`1(System.Span<System.Char>,System.IFormatProvider,System.Text.CompositeFormat,System.Int32,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.MemoryExtensions.TryWrite`2(System.Span<System.Char>,System.IFormatProvider,System.Text.CompositeFormat,System.Int32,!0,!1) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.MemoryExtensions.TryWrite`3(System.Span<System.Char>,System.IFormatProvider,System.Text.CompositeFormat,System.Int32,!0,!1,!2) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Memory`1.Equals(System.Object) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Boolean System.Memory`1.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.MulticastDelegate.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.MulticastDelegate.op_Equality(System.MulticastDelegate,System.MulticastDelegate) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.MulticastDelegate.op_Inequality(System.MulticastDelegate,System.MulticastDelegate) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Nullable`1.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Numerics.BitOperations.IsPow2(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Numerics.BitOperations.IsPow2(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Numerics.BitOperations.IsPow2(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Numerics.IBinaryInteger`1.TryReadBigEndian(System.ReadOnlySpan<System.Byte>,System.Boolean,!0) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Numerics.IBinaryInteger`1.TryReadLittleEndian(System.ReadOnlySpan<System.Byte>,System.Boolean,!0) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Numerics.IBinaryInteger`1.TryWriteBigEndian(System.Span<System.Byte>,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Numerics.IBinaryInteger`1.TryWriteLittleEndian(System.Span<System.Byte>,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Numerics.IBinaryNumber`1.IsPow2(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Numerics.IFloatingPoint`1.TryWriteExponentBigEndian(System.Span<System.Byte>,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Numerics.IFloatingPoint`1.TryWriteExponentLittleEndian(System.Span<System.Byte>,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Numerics.IFloatingPoint`1.TryWriteSignificandBigEndian(System.Span<System.Byte>,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Numerics.IFloatingPoint`1.TryWriteSignificandLittleEndian(System.Span<System.Byte>,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Numerics.INumberBase`1.TryConvertFromChecked`1(!0,!0) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Numerics.INumberBase`1.TryConvertFromSaturating`1(!0,!0) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Numerics.INumberBase`1.TryConvertFromTruncating`1(!0,!0) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Numerics.INumberBase`1.TryConvertToChecked`1(!0,!0) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Numerics.INumberBase`1.TryConvertToSaturating`1(!0,!0) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Numerics.INumberBase`1.TryConvertToTruncating`1(!0,!0) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Numerics.INumberBase`1.TryParse(System.ReadOnlySpan<System.Byte>,System.Globalization.NumberStyles,System.IFormatProvider,!0) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Numerics.INumberBase`1.TryParse(System.ReadOnlySpan<System.Char>,System.Globalization.NumberStyles,System.IFormatProvider,!0) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Numerics.INumberBase`1.TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,!0) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Numerics.Matrix3x2.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Numerics.Matrix4x4.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Numerics.Matrix4x4.Impl.<Invert>g__SseImpl\|64_0(System.Numerics.Matrix4x4.Impl,System.Numerics.Matrix4x4.Impl) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse | -| System.Boolean System.Numerics.Plane.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Numerics.Quaternion.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Numerics.Vector2.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Numerics.Vector3.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Numerics.Vector4.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Numerics.Vector.EqualsAll`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Numerics.Vector.EqualsAny`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Numerics.Vector.GreaterThanAll`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Numerics.Vector.GreaterThanAny`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Numerics.Vector.GreaterThanOrEqualAll`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Numerics.Vector.GreaterThanOrEqualAny`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Numerics.Vector.LessThanAll`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Numerics.Vector.LessThanAny`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Numerics.Vector.LessThanOrEqualAll`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Numerics.Vector.LessThanOrEqualAny`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Numerics.Vector`1.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.OperatingSystem.IsIOS() | [SupportedOSPlatformGuardAttribute(...)] | 0 | maccatalyst | -| System.Boolean System.OperatingSystem.IsIOSVersionAtLeast(System.Int32,System.Int32,System.Int32) | [SupportedOSPlatformGuardAttribute(...)] | 0 | maccatalyst | -| System.Boolean System.PackedSpanHelpers.Contains(System.Int16,System.Int16,System.Int32) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Boolean System.Predicate`1.Invoke(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Range.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.ReadOnlyMemory`1.Equals(System.Object) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Boolean System.ReadOnlyMemory`1.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.ReadOnlySpan`1.Equals(System.Object) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Boolean System.ReadOnlySpan`1.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.ReadOnlySpan`1.Equals(System.Object) | [ObsoleteAttribute(...)] | 0 | Equals() on ReadOnlySpan will always throw an exception. Use the equality operator instead. | -| System.Boolean System.Reflection.Assembly.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Reflection.Assembly.op_Equality(System.Reflection.Assembly,System.Reflection.Assembly) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Reflection.Assembly.op_Inequality(System.Reflection.Assembly,System.Reflection.Assembly) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Reflection.CustomAttribute.FilterCustomAttributeRecord(System.Reflection.MetadataToken,System.Reflection.MetadataImport,System.Reflection.RuntimeModule,System.Reflection.MetadataToken,System.RuntimeType,System.Boolean,System.RuntimeType.ListBuilder<System.Object>,System.RuntimeType,System.IRuntimeMethodInfo,System.Boolean) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Boolean System.Reflection.CustomAttribute.FilterCustomAttributeRecord(System.Reflection.MetadataToken,System.Reflection.MetadataImport,System.Reflection.RuntimeModule,System.Reflection.MetadataToken,System.RuntimeType,System.Boolean,System.RuntimeType.ListBuilder<System.Object>,System.RuntimeType,System.IRuntimeMethodInfo,System.Boolean) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Boolean System.Reflection.CustomAttributeData.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Reflection.CustomAttributeNamedArgument.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Reflection.CustomAttributeTypedArgument.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Reflection.Emit.Label.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Reflection.Emit.RuntimeTypeBuilder.IsAssignableFrom(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Boolean System.Reflection.Emit.RuntimeTypeBuilder.IsAssignableFrom(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2070:UnrecognizedReflectionPattern | -| System.Boolean System.Reflection.Emit.SignatureHelper.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Reflection.FieldInfo.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Reflection.FieldInfo.op_Equality(System.Reflection.FieldInfo,System.Reflection.FieldInfo) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Reflection.FieldInfo.op_Inequality(System.Reflection.FieldInfo,System.Reflection.FieldInfo) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Reflection.LoaderAllocatorScout.Destroy(System.IntPtr) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean System.Reflection.LoaderAllocatorScout.Destroy(System.IntPtr) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean System.Reflection.LoaderAllocatorScout.Destroy(System.IntPtr) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Boolean System.Reflection.MemberFilter.Invoke(System.Reflection.MemberInfo,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Reflection.MemberInfo.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Reflection.MemberInfo.op_Equality(System.Reflection.MemberInfo,System.Reflection.MemberInfo) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Reflection.MemberInfo.op_Inequality(System.Reflection.MemberInfo,System.Reflection.MemberInfo) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Reflection.Metadata.AssemblyExtensions.InternalTryGetRawMetadata(System.Runtime.CompilerServices.QCallAssembly,System.Byte*,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean System.Reflection.Metadata.AssemblyExtensions.InternalTryGetRawMetadata(System.Runtime.CompilerServices.QCallAssembly,System.Byte*,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean System.Reflection.Metadata.AssemblyExtensions.InternalTryGetRawMetadata(System.Runtime.CompilerServices.QCallAssembly,System.Byte*,System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Boolean System.Reflection.Metadata.AssemblyExtensions.TryGetRawMetadata(System.Reflection.Assembly,System.Byte*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Reflection.Metadata.MetadataUpdater.IsApplyUpdateSupported() | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean System.Reflection.Metadata.MetadataUpdater.IsApplyUpdateSupported() | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean System.Reflection.Metadata.MetadataUpdater.IsApplyUpdateSupported() | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Boolean System.Reflection.MethodInfo.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Reflection.MethodInfo.op_Equality(System.Reflection.MethodInfo,System.Reflection.MethodInfo) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Reflection.MethodInfo.op_Inequality(System.Reflection.MethodInfo,System.Reflection.MethodInfo) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Reflection.Module.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Reflection.Module.op_Equality(System.Reflection.Module,System.Reflection.Module) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Reflection.Module.op_Inequality(System.Reflection.Module,System.Reflection.Module) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Reflection.Pointer.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Reflection.RuntimeAssembly.GetCodeBase(System.Runtime.CompilerServices.QCallAssembly,System.Runtime.CompilerServices.StringHandleOnStack) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean System.Reflection.RuntimeAssembly.GetCodeBase(System.Runtime.CompilerServices.QCallAssembly,System.Runtime.CompilerServices.StringHandleOnStack) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean System.Reflection.RuntimeAssembly.GetCodeBase(System.Runtime.CompilerServices.QCallAssembly,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Boolean System.Reflection.TypeDelegator.IsAssignableFrom(System.Reflection.TypeInfo) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Reflection.TypeFilter.Invoke(System.Type,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Reflection.TypeInfo.IsAssignableFrom(System.Reflection.TypeInfo) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Resources.ResourceReader.<DeserializeObject>g__InitializeBinaryFormatterLocal\|5_0() | [UnconditionalSuppressMessageAttribute(...)] | 0 | AotAnalysis | -| System.Boolean System.Resources.ResourceReader.<DeserializeObject>g__InitializeBinaryFormatterLocal\|5_0() | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Boolean System.Resources.ResourceReader.<DeserializeObject>g__InitializeBinaryFormatterLocal\|5_0() | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Boolean System.Resources.ResourceReader.<DeserializeObject>g__InitializeBinaryFormatterLocal\|5_0() | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL3050:RequiresDynamicCode | -| System.Boolean System.Resources.ResourceReader.InitializeBinaryFormatter() | [RequiresDynamicCodeAttribute(...)] | 0 | The native code for this instantiation might not be available at runtime. | -| System.Boolean System.Resources.ResourceReader.InitializeBinaryFormatter() | [RequiresUnreferencedCodeAttribute(...)] | 0 | The CustomResourceTypesSupport feature switch has been enabled for this app which is being trimmed. Custom readers as well as custom objects on the resources file are not observable by the trimmer and so required assemblies, types and members may be removed. | -| System.Boolean System.Runtime.CompilerServices.RuntimeHelpers.AreTypesEquivalent(System.Runtime.CompilerServices.MethodTable*,System.Runtime.CompilerServices.MethodTable*) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean System.Runtime.CompilerServices.RuntimeHelpers.AreTypesEquivalent(System.Runtime.CompilerServices.MethodTable*,System.Runtime.CompilerServices.MethodTable*) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean System.Runtime.CompilerServices.RuntimeHelpers.AreTypesEquivalent(System.Runtime.CompilerServices.MethodTable*,System.Runtime.CompilerServices.MethodTable*) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Boolean System.Runtime.CompilerServices.RuntimeHelpers.Equals(System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.CompilerServices.RuntimeHelpers.IsReferenceOrContainsReferences`1() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.InteropServices.CLong.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.InteropServices.CULong.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.InteropServices.ComWrappers.TryGetComInstanceInternal(System.Runtime.CompilerServices.ObjectHandleOnStack,System.IntPtr) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean System.Runtime.InteropServices.ComWrappers.TryGetComInstanceInternal(System.Runtime.CompilerServices.ObjectHandleOnStack,System.IntPtr) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean System.Runtime.InteropServices.ComWrappers.TryGetComInstanceInternal(System.Runtime.CompilerServices.ObjectHandleOnStack,System.IntPtr) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Boolean System.Runtime.InteropServices.ComWrappers.TryGetObject(System.IntPtr,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.InteropServices.ComWrappers.TryGetObjectInternal(System.IntPtr,System.Runtime.CompilerServices.ObjectHandleOnStack) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean System.Runtime.InteropServices.ComWrappers.TryGetObjectInternal(System.IntPtr,System.Runtime.CompilerServices.ObjectHandleOnStack) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean System.Runtime.InteropServices.ComWrappers.TryGetObjectInternal(System.IntPtr,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Boolean System.Runtime.InteropServices.ComWrappers.TryGetOrCreateComInterfaceForObjectInternal(System.Runtime.CompilerServices.ObjectHandleOnStack,System.Int64,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.InteropServices.CreateComInterfaceFlags,System.IntPtr) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean System.Runtime.InteropServices.ComWrappers.TryGetOrCreateComInterfaceForObjectInternal(System.Runtime.CompilerServices.ObjectHandleOnStack,System.Int64,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.InteropServices.CreateComInterfaceFlags,System.IntPtr) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean System.Runtime.InteropServices.ComWrappers.TryGetOrCreateComInterfaceForObjectInternal(System.Runtime.CompilerServices.ObjectHandleOnStack,System.Int64,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.InteropServices.CreateComInterfaceFlags,System.IntPtr) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Boolean System.Runtime.InteropServices.ComWrappers.TryGetOrCreateObjectForComInstanceInternal(System.Runtime.CompilerServices.ObjectHandleOnStack,System.Int64,System.IntPtr,System.IntPtr,System.Runtime.InteropServices.CreateObjectFlags,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.CompilerServices.ObjectHandleOnStack) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean System.Runtime.InteropServices.ComWrappers.TryGetOrCreateObjectForComInstanceInternal(System.Runtime.CompilerServices.ObjectHandleOnStack,System.Int64,System.IntPtr,System.IntPtr,System.Runtime.InteropServices.CreateObjectFlags,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.CompilerServices.ObjectHandleOnStack) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean System.Runtime.InteropServices.ComWrappers.TryGetOrCreateObjectForComInstanceInternal(System.Runtime.CompilerServices.ObjectHandleOnStack,System.Int64,System.IntPtr,System.IntPtr,System.Runtime.InteropServices.CreateObjectFlags,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Boolean System.Runtime.InteropServices.Marshal.SetComObjectData(System.Object,System.Object,System.Object) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Boolean System.Runtime.InteropServices.MemoryMarshal.TryGetArray`1(System.ReadOnlyMemory<!0>,System.ArraySegment<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.InteropServices.MemoryMarshal.TryGetMemoryManager`2(System.ReadOnlyMemory<!0>,!1) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.InteropServices.MemoryMarshal.TryGetMemoryManager`2(System.ReadOnlyMemory<!0>,!1,System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.InteropServices.NFloat.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.InteropServices.NFloat.TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.Runtime.InteropServices.NFloat) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.InteropServices.NFloat.TryParse(System.String,System.IFormatProvider,System.Runtime.InteropServices.NFloat) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.InteropServices.NFloat.TryParse(System.String,System.Runtime.InteropServices.NFloat) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.InteropServices.OSPlatform.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector64.EqualsAll`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector64.EqualsAny`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector64.GreaterThanAll`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector64.GreaterThanAny`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector64.GreaterThanOrEqualAll`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector64.GreaterThanOrEqualAny`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector64.LessThanAll`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector64.LessThanAny`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector64.LessThanOrEqualAll`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector64.LessThanOrEqualAny`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector64.TryCopyTo`1(System.Runtime.Intrinsics.Vector64<!0>,System.Span<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector64`1.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector128.EqualsAll`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector128.EqualsAny`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector128.GreaterThanAll`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector128.GreaterThanAny`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector128.GreaterThanOrEqualAll`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector128.GreaterThanOrEqualAny`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector128.LessThanAll`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector128.LessThanAny`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector128.LessThanOrEqualAll`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector128.LessThanOrEqualAny`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector128.TryCopyTo`1(System.Runtime.Intrinsics.Vector128<!0>,System.Span<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector128`1.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector256.EqualsAll`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector256.EqualsAny`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector256.GreaterThanAll`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector256.GreaterThanAny`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector256.GreaterThanOrEqualAll`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector256.GreaterThanOrEqualAny`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector256.LessThanAll`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector256.LessThanAny`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector256.LessThanOrEqualAll`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector256.LessThanOrEqualAny`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector256.TryCopyTo`1(System.Runtime.Intrinsics.Vector256<!0>,System.Span<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector256`1.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector512.EqualsAll`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector512.EqualsAny`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector512.GreaterThanAll`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector512.GreaterThanAny`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector512.GreaterThanOrEqualAll`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector512.GreaterThanOrEqualAny`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector512.LessThanAll`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector512.LessThanAny`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector512.LessThanOrEqualAll`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector512.LessThanOrEqualAny`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector512.TryCopyTo`1(System.Runtime.Intrinsics.Vector512<!0>,System.Span<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Intrinsics.Vector512`1.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Loader.AssemblyLoadContext.TraceAssemblyLoadFromResolveHandlerInvoked(System.String,System.Boolean,System.String,System.String) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean System.Runtime.Loader.AssemblyLoadContext.TraceAssemblyLoadFromResolveHandlerInvoked(System.String,System.Boolean,System.String,System.String) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean System.Runtime.Loader.AssemblyLoadContext.TraceAssemblyResolveHandlerInvoked(System.String,System.String,System.String,System.String) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean System.Runtime.Loader.AssemblyLoadContext.TraceAssemblyResolveHandlerInvoked(System.String,System.String,System.String,System.String) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean System.Runtime.Loader.AssemblyLoadContext.TraceResolvingHandlerInvoked(System.String,System.String,System.String,System.String,System.String) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean System.Runtime.Loader.AssemblyLoadContext.TraceResolvingHandlerInvoked(System.String,System.String,System.String,System.String,System.String) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean System.Runtime.Loader.AssemblyLoadContext.TraceSatelliteSubdirectoryPathProbed(System.String,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean System.Runtime.Loader.AssemblyLoadContext.TraceSatelliteSubdirectoryPathProbed(System.String,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean System.Runtime.Versioning.FrameworkName.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Versioning.FrameworkName.Equals(System.Runtime.Versioning.FrameworkName) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Versioning.FrameworkName.op_Equality(System.Runtime.Versioning.FrameworkName,System.Runtime.Versioning.FrameworkName) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Runtime.Versioning.FrameworkName.op_Inequality(System.Runtime.Versioning.FrameworkName,System.Runtime.Versioning.FrameworkName) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.RuntimeFieldHandle.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.RuntimeMethodHandle.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.RuntimeTypeHandle._IsVisible(System.Runtime.CompilerServices.QCallTypeHandle) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Boolean System.RuntimeTypeHandle._IsVisible(System.Runtime.CompilerServices.QCallTypeHandle) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Boolean System.RuntimeTypeHandle._IsVisible(System.Runtime.CompilerServices.QCallTypeHandle) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Boolean System.SByte.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.SByte.TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.SByte) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.SByte.TryParse(System.String,System.IFormatProvider,System.SByte) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.SByte.TryParse(System.String,System.SByte) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Security.Principal.IPrincipal.IsInRole(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Single.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Single.TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.Single) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Single.TryParse(System.String,System.IFormatProvider,System.Single) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Single.TryParse(System.String,System.Single) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Span`1.Equals(System.Object) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Boolean System.Span`1.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Span`1.Equals(System.Object) | [ObsoleteAttribute(...)] | 0 | Equals() on Span will always throw an exception. Use the equality operator instead. | -| System.Boolean System.String.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.String.Equals(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.String.Equals(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.String.Equals(System.String,System.String,System.StringComparison) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.String.Equals(System.String,System.StringComparison) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.String.IsNullOrEmpty(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.String.IsNullOrWhiteSpace(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.String.TryCopyTo(System.Span<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.String.op_Equality(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.String.op_Inequality(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.StringComparer.Equals(System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.StringComparer.Equals(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.StringComparer.IsWellKnownCultureAwareComparer(System.Collections.Generic.IEqualityComparer<System.String>,System.Globalization.CompareInfo,System.Globalization.CompareOptions) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.StringComparer.IsWellKnownOrdinalComparer(System.Collections.Generic.IEqualityComparer<System.String>,System.Boolean) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Text.Ascii.AllCharsInVectorAreAscii`1(System.Runtime.Intrinsics.Vector256<!0>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx | -| System.Boolean System.Text.Ascii.PlainLoader`1.EqualAndAscii256(!0,!0) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx | -| System.Boolean System.Text.Ascii.WideningLoader.EqualAndAscii256(System.Byte,System.UInt16) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx | -| System.Boolean System.Text.DecoderExceptionFallback.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Text.DecoderExceptionFallbackBuffer.Fallback(System.Byte[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Text.DecoderFallbackBuffer.Fallback(System.Byte[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Text.DecoderReplacementFallback.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Text.EncoderExceptionFallback.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Text.EncoderReplacementFallback.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Text.Encoding.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Text.Encoding.TryGetBytes(System.ReadOnlySpan<System.Char>,System.Span<System.Byte>,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Text.Encoding.TryGetChars(System.ReadOnlySpan<System.Byte>,System.Span<System.Char>,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Text.EncodingInfo.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Text.Rune.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Text.Rune.IsValid(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Text.Rune.TryCreate(System.UInt32,System.Text.Rune) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Text.Rune.TryGetRuneAt(System.String,System.Int32,System.Text.Rune) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Text.StringBuilder.Equals(System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Text.StringBuilder.Equals(System.Text.StringBuilder) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Text.UTF7Encoding.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Text.UTF8Encoding.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Text.UTF32Encoding.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler.AppendFormatted(System.Object,System.Int32,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler.AppendFormatted(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler.AppendFormatted(System.String,System.Int32,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler.AppendFormatted`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler.AppendFormatted`1(!0,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler.AppendFormatted`1(!0,System.Int32,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler.AppendFormatted`1(!0,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler.AppendLiteral(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Text.UnicodeEncoding.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Threading.AsyncFlowControl.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Threading.CancellationTokenRegistration.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Threading.EventWaitHandle.TryOpenExisting(System.String,System.Threading.EventWaitHandle) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Boolean System.Threading.ManualResetEventSlim.Wait(System.Int32) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Boolean System.Threading.ManualResetEventSlim.Wait(System.Int32,System.Threading.CancellationToken) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Boolean System.Threading.ManualResetEventSlim.Wait(System.TimeSpan) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Boolean System.Threading.ManualResetEventSlim.Wait(System.TimeSpan,System.Threading.CancellationToken) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Boolean System.Threading.Monitor.Wait(System.Object) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Boolean System.Threading.Monitor.Wait(System.Object,System.Int32) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Boolean System.Threading.Monitor.Wait(System.Object,System.Int32,System.Boolean) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Boolean System.Threading.Monitor.Wait(System.Object,System.TimeSpan) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Boolean System.Threading.Monitor.Wait(System.Object,System.TimeSpan,System.Boolean) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Boolean System.Threading.RegisteredWaitHandle.Unregister(System.Threading.WaitHandle) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Boolean System.Threading.Semaphore.TryOpenExisting(System.String,System.Threading.Semaphore) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Boolean System.Threading.SemaphoreSlim.Wait(System.Int32) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Boolean System.Threading.SemaphoreSlim.Wait(System.Int32,System.Threading.CancellationToken) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Boolean System.Threading.SemaphoreSlim.Wait(System.TimeSpan) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Boolean System.Threading.SemaphoreSlim.Wait(System.TimeSpan,System.Threading.CancellationToken) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Boolean System.Threading.SemaphoreSlim.WaitUntilCountOrTimeout(System.Int32,System.UInt32,System.Threading.CancellationToken) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Boolean System.Threading.Tasks.Task.WaitAll(System.Threading.Tasks.Task[],System.Int32) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Boolean System.Threading.Tasks.Task.WaitAll(System.Threading.Tasks.Task[],System.Int32,System.Threading.CancellationToken) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Boolean System.Threading.Tasks.Task.WaitAll(System.Threading.Tasks.Task[],System.TimeSpan) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Boolean System.Threading.Tasks.Task.WaitAllBlockingCore(System.Collections.Generic.List<System.Threading.Tasks.Task>,System.Int32,System.Threading.CancellationToken) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Boolean System.Threading.Tasks.Task.WaitAllCore(System.Threading.Tasks.Task[],System.Int32,System.Threading.CancellationToken) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Boolean System.Threading.Tasks.Task.get_IsFaulted() | [MemberNotNullWhenAttribute(...)] | 0 | True | -| System.Boolean System.Threading.Tasks.Task.get_IsFaulted() | [MemberNotNullWhenAttribute(...)] | 1 | Exception | -| System.Boolean System.Threading.Tasks.ValueTask.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Threading.Tasks.ValueTask`1.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Threading.ThreadPool.BindHandle(System.IntPtr) | [ObsoleteAttribute(...)] | 0 | ThreadPool.BindHandle(IntPtr) has been deprecated. Use ThreadPool.BindHandle(SafeHandle) instead. | -| System.Boolean System.Threading.ThreadPool.BindHandle(System.IntPtr) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Boolean System.Threading.ThreadPool.BindHandle(System.Runtime.InteropServices.SafeHandle) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Boolean System.Threading.ThreadPool.UnsafeQueueNativeOverlapped(System.Threading.NativeOverlapped*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.Threading.ThreadPool.UnsafeQueueNativeOverlapped(System.Threading.NativeOverlapped*) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Boolean System.Threading.ThreadPool.UnsafeQueueNativeOverlapped(System.Threading.NativeOverlapped*) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Boolean System.Threading.Timer.Change(System.UInt32,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Boolean System.TimeOnly.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeOnly.TryParse(System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.TimeOnly) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeOnly.TryParse(System.String,System.IFormatProvider,System.TimeOnly) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeOnly.TryParse(System.String,System.TimeOnly) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeOnly.TryParseExact(System.ReadOnlySpan<System.Char>,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.TimeOnly) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeOnly.TryParseExact(System.String,System.String,System.IFormatProvider,System.Globalization.DateTimeStyles,System.TimeOnly) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeOnly.TryParseExact(System.String,System.String,System.TimeOnly) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeOnly.TryParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles,System.TimeOnly) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeOnly.TryParseExact(System.String,System.String[],System.TimeOnly) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeSpan.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeSpan.TryParse(System.String,System.IFormatProvider,System.TimeSpan) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeSpan.TryParse(System.String,System.TimeSpan) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeSpan.TryParseExact(System.ReadOnlySpan<System.Char>,System.String[],System.IFormatProvider,System.Globalization.TimeSpanStyles,System.TimeSpan) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeSpan.TryParseExact(System.ReadOnlySpan<System.Char>,System.String[],System.IFormatProvider,System.TimeSpan) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeSpan.TryParseExact(System.String,System.String,System.IFormatProvider,System.Globalization.TimeSpanStyles,System.TimeSpan) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeSpan.TryParseExact(System.String,System.String,System.IFormatProvider,System.TimeSpan) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeSpan.TryParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.TimeSpanStyles,System.TimeSpan) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeSpan.TryParseExact(System.String,System.String[],System.IFormatProvider,System.TimeSpan) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeZoneInfo.AdjustmentRule.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeZoneInfo.AdjustmentRule.Equals(System.TimeZoneInfo.AdjustmentRule) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeZoneInfo.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeZoneInfo.Equals(System.TimeZoneInfo) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeZoneInfo.TransitionTime.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.TimeZoneInfo.TryConvertWindowsIdToIanaId(System.String,System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Tuple`1.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Tuple`2.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Tuple`3.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Tuple`4.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Tuple`5.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Tuple`6.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Tuple`7.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Tuple`8.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Type.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Type.Equals(System.Type) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Type.ImplementInterface(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Boolean System.Type.ImplementInterface(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2085:UnrecognizedReflectionPattern | -| System.Boolean System.Type.IsAssignableFrom(System.Type) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Type.IsAssignableTo(System.Type) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Type.IsEquivalentTo(System.Type) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Type.IsInstanceOfType(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Type.op_Equality(System.Type,System.Type) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Type.op_Inequality(System.Type,System.Type) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.UInt16.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.UInt16.TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.UInt16) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.UInt16.TryParse(System.String,System.IFormatProvider,System.UInt16) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.UInt16.TryParse(System.String,System.UInt16) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.UInt32.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.UInt32.TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.UInt32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.UInt32.TryParse(System.String,System.IFormatProvider,System.UInt32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.UInt32.TryParse(System.String,System.UInt32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.UInt64.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.UInt64.TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.UInt64) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.UInt64.TryParse(System.String,System.IFormatProvider,System.UInt64) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.UInt64.TryParse(System.String,System.UInt64) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.UInt128.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.UInt128.TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.UInt128) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.UInt128.TryParse(System.String,System.IFormatProvider,System.UInt128) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.UInt128.TryParse(System.String,System.UInt128) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.UIntPtr.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.UIntPtr.TryParse(System.String,System.Globalization.NumberStyles,System.IFormatProvider,System.UIntPtr) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.UIntPtr.TryParse(System.String,System.IFormatProvider,System.UIntPtr) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.UIntPtr.TryParse(System.String,System.UIntPtr) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.ValueTuple.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.ValueTuple`1.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.ValueTuple`2.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.ValueTuple`3.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.ValueTuple`4.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.ValueTuple`5.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.ValueTuple`6.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.ValueTuple`7.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.ValueTuple`8.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.ValueType.Equals(System.Object) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Boolean System.ValueType.Equals(System.Object) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2075:UnrecognizedReflectionPattern | -| System.Boolean System.Version.Equals(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Version.Equals(System.Version) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Version.TryParse(System.String,System.Version) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Version.op_Equality(System.Version,System.Version) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Version.op_GreaterThan(System.Version,System.Version) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Version.op_GreaterThanOrEqual(System.Version,System.Version) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Version.op_Inequality(System.Version,System.Version) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Version.op_LessThan(System.Version,System.Version) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Boolean System.Version.op_LessThanOrEqual(System.Version,System.Version) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Buffer | [NullableAttribute(...)] | 0 | 0 | -| System.Buffer | [NullableContextAttribute(...)] | 0 | 1 | -| System.Buffers.ArrayPoolEventSource | [GeneratedCodeAttribute(...)] | 0 | System.Private.CoreLib.Generators | -| System.Buffers.ArrayPoolEventSource | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Buffers.ArrayPool`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Buffers.ArrayPool`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Buffers.BitVector256._values | [FixedBufferAttribute(...)] | 0 | System.UInt32 | -| System.Buffers.BitVector256._values | [FixedBufferAttribute(...)] | 1 | 8 | -| System.Buffers.IPinnable | [NullableAttribute(...)] | 0 | 2 | -| System.Buffers.SearchValues<!0> | [NullableAttribute(...)] | 0 | 1 | -| System.Buffers.SearchValues`1 | [DebuggerDisplayAttribute(...)] | 0 | {DebuggerDisplay,nq} | -| System.Buffers.SearchValues`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.Buffers.SearchValuesDebugView`1 | -| System.Buffers.StandardFormat System.Buffers.StandardFormat.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.ByReference | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.ByReference | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.ByReference | [ObsoleteAttribute(...)] | 1 | True | -| System.Byte System.Byte.CreateChecked`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Byte System.Byte.CreateSaturating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Byte System.Byte.CreateTruncating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Byte System.Byte.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Byte System.Byte.Parse(System.String,System.Globalization.NumberStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Byte System.Byte.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Byte System.Byte.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Byte System.Convert.ToByte(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Byte System.Convert.ToByte(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Byte System.Convert.ToByte(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Byte System.Convert.ToByte(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Byte System.Runtime.InteropServices.Marshal.ReadByte(System.Object,System.Int32) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Byte System.Runtime.InteropServices.Marshal.ReadByte(System.Object,System.Int32) | [ObsoleteAttribute(...)] | 0 | ReadByte(Object, Int32) may be unavailable in future releases. | -| System.Byte System.Runtime.InteropServices.Marshal.ReadByte(System.Object,System.Int32) | [RequiresDynamicCodeAttribute(...)] | 0 | Marshalling code for the object might not be available | -| System.Byte System.Runtime.InteropServices.MemoryMarshal.GetArrayDataReference(System.Array) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Byte* System.Reflection.RuntimeAssembly.GetResource(System.Runtime.CompilerServices.QCallAssembly,System.String,System.UInt32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Byte* System.Reflection.RuntimeAssembly.GetResource(System.Runtime.CompilerServices.QCallAssembly,System.String,System.UInt32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Byte[] System.BitConverter.GetBytes(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Byte[] System.BitConverter.GetBytes(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Byte[] System.BitConverter.GetBytes(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Byte[] System.Convert.FromBase64CharArray(System.Char[],System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Byte[] System.Convert.FromBase64String(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Byte[] System.Convert.FromHexString(System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Byte[] System.Convert.FromHexString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Byte[] System.Diagnostics.Tracing.EventSource.CreateManifestAndDescriptors(System.Type,System.String,System.Diagnostics.Tracing.EventSource,System.Diagnostics.Tracing.EventManifestOptions) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Byte[] System.Diagnostics.Tracing.EventSource.CreateManifestAndDescriptors(System.Type,System.String,System.Diagnostics.Tracing.EventSource,System.Diagnostics.Tracing.EventManifestOptions) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2114:ReflectionToDynamicallyAccessedMembers | -| System.Byte[] System.Guid.ToByteArray() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Byte[] System.Guid.ToByteArray(System.Boolean) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Byte[] System.Reflection.Emit.RuntimeModuleBuilder.ResolveSignature(System.Int32) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.Byte[] System.Reflection.MethodBody.GetILAsByteArray() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Byte[] System.Reflection.Module.ResolveSignature(System.Int32) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.Byte[] System.Reflection.RuntimeModule.ResolveSignature(System.Int32) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.Byte[] System.Security.PermissionSet.ConvertPermissionSet(System.String,System.Byte[],System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Byte[] System.Text.UTF8Encoding.GetPreamble() | [NullableContextAttribute(...)] | 0 | 1 | -| System.CLSCompliantAttribute | [AttributeUsageAttribute(...)] | 0 | 32767 | -| System.CannotUnloadAppDomainException | [NullableAttribute(...)] | 0 | 0 | -| System.CannotUnloadAppDomainException | [NullableContextAttribute(...)] | 0 | 2 | -| System.CannotUnloadAppDomainException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Char System.BitConverter.ToChar(System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Char System.Char.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Char System.Char.ToLower(System.Char,System.Globalization.CultureInfo) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Char System.Char.ToUpper(System.Char,System.Globalization.CultureInfo) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Char System.Convert.ToChar(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Char System.Convert.ToChar(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Char System.Convert.ToChar(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Char System.Convert.ToChar(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Char System.Convert.ToChar(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Char System.Convert.ToChar(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Char System.Runtime.InteropServices.Marshalling.Utf16StringMarshaller.GetPinnableReference(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Char System.String.GetPinnableReference() | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Char* Interop.Kernel32.GetEnvironmentStringsW() | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Char[] System.IO.Path.GetInvalidFileNameChars() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Char[] System.IO.Path.GetInvalidPathChars() | [NullableContextAttribute(...)] | 0 | 1 | -| System.CodeDom.Compiler.GeneratedCodeAttribute | [AttributeUsageAttribute(...)] | 0 | 32767 | -| System.CodeDom.Compiler.GeneratedCodeAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.CodeDom.Compiler.GeneratedCodeAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.CodeDom.Compiler.IndentedTextWriter | [NullableAttribute(...)] | 0 | 0 | -| System.CodeDom.Compiler.IndentedTextWriter | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.ArrayList | [DebuggerDisplayAttribute(...)] | 0 | Count = {Count} | -| System.Collections.ArrayList | [DebuggerTypeProxyAttribute(...)] | 0 | System.Collections.ArrayList.ArrayListDebugView | -| System.Collections.ArrayList | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.ArrayList | [NullableAttribute(...)] | 0 | 0 | -| System.Collections.ArrayList | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.ArrayList | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.ArrayList.FixedSizeArrayList | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.ArrayList.FixedSizeList | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.ArrayList.IListWrapper | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.ArrayList.Range | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.ArrayList.ReadOnlyArrayList | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.ArrayList.ReadOnlyList | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.ArrayList.SyncArrayList | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.ArrayList.SyncIList | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.Comparer | [NullableAttribute(...)] | 0 | 0 | -| System.Collections.Comparer | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Comparer | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.Concurrent.ConcurrentQueueSegment`1 | [DebuggerDisplayAttribute(...)] | 0 | Capacity = {Capacity} | -| System.Collections.Concurrent.ConcurrentQueueSegment`1.Slot | [DebuggerDisplayAttribute(...)] | 0 | Item = {Item}, SequenceNumber = {SequenceNumber} | -| System.Collections.Concurrent.ConcurrentQueue`1 | [DebuggerDisplayAttribute(...)] | 0 | Count = {Count} | -| System.Collections.Concurrent.ConcurrentQueue`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.Collections.Concurrent.IProducerConsumerCollectionDebugView`1 | -| System.Collections.Concurrent.ConcurrentQueue`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Collections.Concurrent.ConcurrentQueue`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Concurrent.IProducerConsumerCollection`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Concurrent.MultiProducerMultiConsumerQueue`1 | [DebuggerDisplayAttribute(...)] | 0 | Count = {Count} | -| System.Collections.Concurrent.PaddedHeadAndTail | [DebuggerDisplayAttribute(...)] | 0 | Head = {Head}, Tail = {Tail} | -| System.Collections.Concurrent.SingleProducerSingleConsumerQueue`1 | [DebuggerDisplayAttribute(...)] | 0 | Count = {Count} | -| System.Collections.Concurrent.SingleProducerSingleConsumerQueue`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.Collections.Concurrent.SingleProducerSingleConsumerQueue`1.SingleProducerSingleConsumerQueue_DebugView | -| System.Collections.DictionaryEntry | [NullableAttribute(...)] | 0 | 0 | -| System.Collections.DictionaryEntry | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.DictionaryEntry | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.EmptyReadOnlyDictionaryInternal | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.Generic.ArrayBuilder`1 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.Generic.BitHelper | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Collections.Generic.BitHelper | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Collections.Generic.BitHelper | [ObsoleteAttribute(...)] | 1 | True | -| System.Collections.Generic.ByteEqualityComparer | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.Generic.CollectionExtensions | [NullableAttribute(...)] | 0 | 0 | -| System.Collections.Generic.CollectionExtensions | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.Comparer`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Collections.Generic.Comparer`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.Comparer`1 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.Generic.Dictionary<!0,!1>.Enumerator System.Collections.Generic.Dictionary`2.GetEnumerator() | [NullableContextAttribute(...)] | 0 | 0 | -| System.Collections.Generic.Dictionary<!0,!1>.KeyCollection System.Collections.Generic.Dictionary`2.Keys | [NullableAttribute(...)] | 0 | [1,0,0] | -| System.Collections.Generic.Dictionary<!0,!1>.ValueCollection System.Collections.Generic.Dictionary`2.Values | [NullableAttribute(...)] | 0 | [1,0,0] | -| System.Collections.Generic.Dictionary<System.Int64,System.WeakReference<System.Runtime.Loader.AssemblyLoadContext>> System.Runtime.Loader.AssemblyLoadContext.AllContexts | [MemberNotNullAttribute(...)] | 0 | s_allContexts | -| System.Collections.Generic.Dictionary<System.Int64,System.WeakReference<System.Runtime.Loader.AssemblyLoadContext>> System.Runtime.Loader.AssemblyLoadContext.get_AllContexts() | [MemberNotNullAttribute(...)] | 0 | s_allContexts | -| System.Collections.Generic.Dictionary`2 | [DebuggerDisplayAttribute(...)] | 0 | Count = {Count} | -| System.Collections.Generic.Dictionary`2 | [DebuggerTypeProxyAttribute(...)] | 0 | System.Collections.Generic.IDictionaryDebugView`2 | -| System.Collections.Generic.Dictionary`2 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.Generic.Dictionary`2 | [NullableAttribute(...)] | 0 | 0 | -| System.Collections.Generic.Dictionary`2 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.Dictionary`2 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.Generic.Dictionary`2.Enumerator | [NullableContextAttribute(...)] | 0 | 0 | -| System.Collections.Generic.Dictionary`2.KeyCollection | [DebuggerDisplayAttribute(...)] | 0 | Count = {Count} | -| System.Collections.Generic.Dictionary`2.KeyCollection | [DebuggerTypeProxyAttribute(...)] | 0 | System.Collections.Generic.DictionaryKeyCollectionDebugView`2 | -| System.Collections.Generic.Dictionary`2.KeyCollection | [NullableContextAttribute(...)] | 0 | 0 | -| System.Collections.Generic.Dictionary`2.ValueCollection | [DebuggerDisplayAttribute(...)] | 0 | Count = {Count} | -| System.Collections.Generic.Dictionary`2.ValueCollection | [DebuggerTypeProxyAttribute(...)] | 0 | System.Collections.Generic.DictionaryValueCollectionDebugView`2 | -| System.Collections.Generic.Dictionary`2.ValueCollection | [NullableContextAttribute(...)] | 0 | 0 | -| System.Collections.Generic.EnumEqualityComparer`1 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.Generic.EqualityComparer`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Collections.Generic.EqualityComparer`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.EqualityComparer`1 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.Generic.GenericComparer`1 | [NullableAttribute(...)] | 0 | [0,1] | -| System.Collections.Generic.GenericComparer`1 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Collections.Generic.GenericComparer`1 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.Generic.GenericEqualityComparer`1 | [NullableAttribute(...)] | 0 | [0,1] | -| System.Collections.Generic.GenericEqualityComparer`1 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Collections.Generic.GenericEqualityComparer`1 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.Generic.HashSet<!0>.Enumerator System.Collections.Generic.HashSet`1.GetEnumerator() | [NullableContextAttribute(...)] | 0 | 0 | -| System.Collections.Generic.HashSet`1 | [DebuggerDisplayAttribute(...)] | 0 | Count = {Count} | -| System.Collections.Generic.HashSet`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.Collections.Generic.ICollectionDebugView`1 | -| System.Collections.Generic.HashSet`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Collections.Generic.HashSet`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.HashSet`1 | [TypeForwardedFromAttribute(...)] | 0 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.Generic.HashSet`1.Enumerator | [NullableContextAttribute(...)] | 0 | 0 | -| System.Collections.Generic.IAsyncEnumerable<System.String> System.IO.File.IterateFileLinesAsync(System.IO.StreamReader,System.String,System.Text.Encoding,System.Threading.CancellationToken,System.Threading.CancellationToken) | [AsyncIteratorStateMachineAttribute(...)] | 0 | System.IO.File.<IterateFileLinesAsync>d__110 | -| System.Collections.Generic.IAsyncEnumerable`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.ICollection`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.IComparer<!0> | [NullableAttribute(...)] | 0 | [2,1] | -| System.Collections.Generic.IComparer`1 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Collections.Generic.IDictionary<System.String,System.String> | [NullableAttribute(...)] | 0 | [2,1,2] | -| System.Collections.Generic.IDictionary<System.String,System.String> System.Diagnostics.Tracing.EventCommandEventArgs.Arguments | [NullableAttribute(...)] | 0 | [2,1,2] | -| System.Collections.Generic.IDictionary`2 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.Generic.IDictionary`2 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.IEnumerable<!0> System.Runtime.InteropServices.MemoryMarshal.<ToEnumerable>g__FromArray\|18_2`1(!0[],System.Int32,System.Int32) | [IteratorStateMachineAttribute(...)] | 0 | System.Runtime.InteropServices.MemoryMarshal.<<ToEnumerable>g__FromArray\|18_2>d`1 | -| System.Collections.Generic.IEnumerable<!0> System.Runtime.InteropServices.MemoryMarshal.<ToEnumerable>g__FromMemoryManager\|18_1`1(System.ReadOnlyMemory<!0>) | [IteratorStateMachineAttribute(...)] | 0 | System.Runtime.InteropServices.MemoryMarshal.<<ToEnumerable>g__FromMemoryManager\|18_1>d`1 | -| System.Collections.Generic.IEnumerable<!0> System.Runtime.InteropServices.MemoryMarshal.ToEnumerable`1(System.ReadOnlyMemory<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.IEnumerable<!0> System.Threading.Tasks.TaskAsyncEnumerableExtensions.ToBlockingEnumerable`1(System.Collections.Generic.IAsyncEnumerable<!0>,System.Threading.CancellationToken) | [IteratorStateMachineAttribute(...)] | 0 | System.Threading.Tasks.TaskAsyncEnumerableExtensions.<ToBlockingEnumerable>d__3`1 | -| System.Collections.Generic.IEnumerable<!0> System.Threading.Tasks.TaskAsyncEnumerableExtensions.ToBlockingEnumerable`1(System.Collections.Generic.IAsyncEnumerable<!0>,System.Threading.CancellationToken) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Collections.Generic.IEnumerable<System.Char> System.Runtime.InteropServices.MemoryMarshal.<ToEnumerable>g__FromString\|18_0`1(System.String,System.Int32,System.Int32) | [IteratorStateMachineAttribute(...)] | 0 | System.Runtime.InteropServices.MemoryMarshal.<<ToEnumerable>g__FromString\|18_0>d`1 | -| System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<!0,!1>> | [NullableAttribute(...)] | 0 | [1,0,1,1] | -| System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<System.Object,System.String>> System.Diagnostics.Tracing.CounterPayload.get_ForEnumeration() | [IteratorStateMachineAttribute(...)] | 0 | System.Diagnostics.Tracing.CounterPayload.<get_ForEnumeration>d__51 | -| System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<System.Object,System.String>> System.Diagnostics.Tracing.IncrementingCounterPayload.get_ForEnumeration() | [IteratorStateMachineAttribute(...)] | 0 | System.Diagnostics.Tracing.IncrementingCounterPayload.<get_ForEnumeration>d__39 | -| System.Collections.Generic.IEnumerable<System.Diagnostics.Tracing.EventSource> System.Diagnostics.Tracing.EventSource.GetSources() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.IEnumerable<System.Object> System.Threading.ThreadPool.GetQueuedWorkItems() | [IteratorStateMachineAttribute(...)] | 0 | System.Threading.ThreadPool.<GetQueuedWorkItems>d__26 | -| System.Collections.Generic.IEnumerable<System.Reflection.Assembly> System.Runtime.Loader.AssemblyLoadContext.get_Assemblies() | [IteratorStateMachineAttribute(...)] | 0 | System.Runtime.Loader.AssemblyLoadContext.<get_Assemblies>d__55 | -| System.Collections.Generic.IEnumerable<System.Reflection.ConstructorInfo> System.Reflection.TypeInfo.get_DeclaredConstructors() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Collections.Generic.IEnumerable<System.Reflection.Emit.CustomAttributeBuilder> | [NullableAttribute(...)] | 0 | [2,1] | -| System.Collections.Generic.IEnumerable<System.Reflection.EventInfo> System.Reflection.TypeInfo.get_DeclaredEvents() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Collections.Generic.IEnumerable<System.Reflection.FieldInfo> System.Reflection.TypeInfo.get_DeclaredFields() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Collections.Generic.IEnumerable<System.Reflection.MemberInfo> System.Reflection.TypeInfo.get_DeclaredMembers() | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Collections.Generic.IEnumerable<System.Reflection.MethodInfo> System.Reflection.TypeInfo.GetDeclaredMethods(System.String) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Collections.Generic.IEnumerable<System.Reflection.MethodInfo> System.Reflection.TypeInfo.GetDeclaredMethods(System.String) | [IteratorStateMachineAttribute(...)] | 0 | System.Reflection.TypeInfo.<GetDeclaredMethods>d__10 | -| System.Collections.Generic.IEnumerable<System.Reflection.MethodInfo> System.Reflection.TypeInfo.get_DeclaredMethods() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Collections.Generic.IEnumerable<System.Reflection.PropertyInfo> System.Reflection.TypeInfo.get_DeclaredProperties() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Collections.Generic.IEnumerable<System.Reflection.TypeInfo> System.Reflection.Assembly.get_DefinedTypes() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Collections.Generic.IEnumerable<System.Reflection.TypeInfo> System.Reflection.RuntimeAssembly.get_DefinedTypes() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Collections.Generic.IEnumerable<System.Reflection.TypeInfo> System.Reflection.TypeInfo.get_DeclaredNestedTypes() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 384 | -| System.Collections.Generic.IEnumerable<System.Reflection.TypeInfo> System.Reflection.TypeInfo.get_DeclaredNestedTypes() | [IteratorStateMachineAttribute(...)] | 0 | System.Reflection.TypeInfo.<get_DeclaredNestedTypes>d__22 | -| System.Collections.Generic.IEnumerable<System.Runtime.Loader.AssemblyLoadContext> System.Runtime.Loader.AssemblyLoadContext.get_All() | [IteratorStateMachineAttribute(...)] | 0 | System.Runtime.Loader.AssemblyLoadContext.<get_All>d__85 | -| System.Collections.Generic.IEnumerable<System.Runtime.Loader.LibraryNameVariation> System.Runtime.Loader.LibraryNameVariation.DetermineLibraryNameVariations(System.String,System.Boolean) | [IteratorStateMachineAttribute(...)] | 0 | System.Runtime.Loader.LibraryNameVariation.<DetermineLibraryNameVariations>d__5 | -| System.Collections.Generic.IEnumerable<System.String> | [NullableAttribute(...)] | 0 | [1,2] | -| System.Collections.Generic.IEnumerable<System.Threading.Tasks.Task> System.Threading.Tasks.ThreadPoolTaskScheduler.FilterTasksFromWorkItems(System.Collections.Generic.IEnumerable<System.Object>) | [IteratorStateMachineAttribute(...)] | 0 | System.Threading.Tasks.ThreadPoolTaskScheduler.<FilterTasksFromWorkItems>d__6 | -| System.Collections.Generic.IEnumerable<System.Threading.TimerQueueTimer> System.Threading.TimerQueue.GetTimersForDebugger() | [IteratorStateMachineAttribute(...)] | 0 | System.Threading.TimerQueue.<GetTimersForDebugger>d__7 | -| System.Collections.Generic.IEnumerable<System.Type> System.Reflection.Assembly.get_ExportedTypes() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Collections.Generic.IEnumerable<System.Type> System.Reflection.TypeInfo.get_ImplementedInterfaces() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Collections.Generic.IEnumerator<!0> System.Collections.Concurrent.ConcurrentQueue`1.Enumerate(System.Collections.Concurrent.ConcurrentQueueSegment<!0>,System.Int32,System.Collections.Concurrent.ConcurrentQueueSegment<!0>,System.Int32) | [IteratorStateMachineAttribute(...)] | 0 | System.Collections.Concurrent.ConcurrentQueue`1.<Enumerate>d__26 | -| System.Collections.Generic.IEnumerator<!0> System.Collections.Concurrent.SingleProducerSingleConsumerQueue`1.GetEnumerator() | [IteratorStateMachineAttribute(...)] | 0 | System.Collections.Concurrent.SingleProducerSingleConsumerQueue`1.<GetEnumerator>d__15 | -| System.Collections.Generic.IEnumerator<!0> System.Collections.Generic.IEnumerable`1.GetEnumerator() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.IEnumerator<!0> System.IO.Enumeration.FileSystemEnumerable`1.GetEnumerator() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.IEnumerator<!1> System.Collections.ObjectModel.ReadOnlyDictionary`2.ValueCollection.GetEnumerator() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.IEnumerator<System.Collections.Generic.KeyValuePair<System.Object,System.String>> System.Diagnostics.Tracing.EventPayload.GetEnumerator() | [IteratorStateMachineAttribute(...)] | 0 | System.Diagnostics.Tracing.EventPayload.<GetEnumerator>d__17 | -| System.Collections.Generic.IEnumerator<System.Globalization.CultureInfo> System.Resources.ResourceFallbackManager.GetEnumerator() | [IteratorStateMachineAttribute(...)] | 0 | System.Resources.ResourceFallbackManager.<GetEnumerator>d__5 | -| System.Collections.Generic.IEqualityComparer<!0> | [NullableAttribute(...)] | 0 | [2,1] | -| System.Collections.Generic.IEqualityComparer<System.String> System.Collections.Generic.NonRandomizedStringEqualityComparer.GetStringComparer(System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.IEqualityComparer`1 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Collections.Generic.IList<System.String> System.Runtime.CompilerServices.TupleElementNamesAttribute.TransformNames | [NullableAttribute(...)] | 0 | [1,2] | -| System.Collections.Generic.IList`1 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.Generic.IList`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.IReadOnlyDictionary<!0,!1> | [NullableAttribute(...)] | 0 | 1 | -| System.Collections.Generic.IReadOnlyDictionary`2 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.Generic.IReadOnlyDictionary`2 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.IReadOnlyList<System.Memory<System.Byte>> | [NullableAttribute(...)] | 0 | [1,0] | -| System.Collections.Generic.IReadOnlyList<System.ReadOnlyMemory<System.Byte>> | [NullableAttribute(...)] | 0 | [1,0] | -| System.Collections.Generic.IReadOnlyList`1 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.Generic.IReadOnlyList`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.IReadOnlySet`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.ISet`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.KeyNotFoundException | [NullableAttribute(...)] | 0 | 0 | -| System.Collections.Generic.KeyNotFoundException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Collections.Generic.KeyNotFoundException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.Generic.KeyValuePair<!0,!1> System.Collections.Generic.Dictionary`2.Enumerator.Current | [NullableAttribute(...)] | 0 | [0,1,1] | -| System.Collections.Generic.KeyValuePair<!0,!1> System.Collections.Generic.KeyValuePair.Create`2(!0,!1) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.KeyValuePair<!0,!1>[] System.Collections.Generic.IDictionaryDebugView`2.Items | [DebuggerBrowsableAttribute(...)] | 0 | 3 | -| System.Collections.Generic.KeyValuePair`2 | [NullableAttribute(...)] | 0 | 0 | -| System.Collections.Generic.KeyValuePair`2 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.KeyValuePair`2 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.Generic.KeyValuePair`2.key | [DebuggerBrowsableAttribute(...)] | 0 | 0 | -| System.Collections.Generic.KeyValuePair`2.value | [DebuggerBrowsableAttribute(...)] | 0 | 0 | -| System.Collections.Generic.List<!0> | [NullableAttribute(...)] | 0 | [2,1] | -| System.Collections.Generic.List<!0> System.Threading.ThreadLocal`1.ValuesForDebugDisplay | [NullableAttribute(...)] | 0 | [2,1] | -| System.Collections.Generic.List<!0>.Enumerator System.Collections.Generic.List`1.GetEnumerator() | [NullableContextAttribute(...)] | 0 | 0 | -| System.Collections.Generic.List<System.ValueTuple<System.Int32,System.Int32,System.String,System.String>> | [TupleElementNamesAttribute(...)] | 0 | [Literal,ArgIndex,Alignment,Format] | -| System.Collections.Generic.List`1 | [DebuggerDisplayAttribute(...)] | 0 | Count = {Count} | -| System.Collections.Generic.List`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.Collections.Generic.ICollectionDebugView`1 | -| System.Collections.Generic.List`1 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.Generic.List`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Collections.Generic.List`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.List`1 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.Generic.List`1.Enumerator | [NullableContextAttribute(...)] | 0 | 0 | -| System.Collections.Generic.NullableComparer`1 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.Generic.NullableEqualityComparer`1 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.Generic.ObjectComparer`1 | [NullableAttribute(...)] | 0 | [0,1] | -| System.Collections.Generic.ObjectComparer`1 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Collections.Generic.ObjectComparer`1 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.Generic.ObjectEqualityComparer`1 | [NullableAttribute(...)] | 0 | [0,1] | -| System.Collections.Generic.ObjectEqualityComparer`1 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Collections.Generic.ObjectEqualityComparer`1 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.Generic.Queue<!0>.Enumerator System.Collections.Generic.Queue`1.GetEnumerator() | [NullableContextAttribute(...)] | 0 | 0 | -| System.Collections.Generic.Queue`1 | [DebuggerDisplayAttribute(...)] | 0 | Count = {Count} | -| System.Collections.Generic.Queue`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.Collections.Generic.QueueDebugView`1 | -| System.Collections.Generic.Queue`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Collections.Generic.Queue`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.Queue`1 | [TypeForwardedFromAttribute(...)] | 0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.Generic.Queue`1.Enumerator | [NullableContextAttribute(...)] | 0 | 0 | -| System.Collections.Generic.ReferenceEqualityComparer System.Collections.Generic.ReferenceEqualityComparer.Instance | [NullableAttribute(...)] | 0 | 1 | -| System.Collections.Generic.ReferenceEqualityComparer System.Collections.Generic.ReferenceEqualityComparer.get_Instance() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Generic.ValueListBuilder`1 | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Collections.Generic.ValueListBuilder`1 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.Generic.ValueListBuilder`1 | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Collections.Generic.ValueListBuilder`1 | [ObsoleteAttribute(...)] | 1 | True | -| System.Collections.Hashtable | [DebuggerDisplayAttribute(...)] | 0 | Count = {Count} | -| System.Collections.Hashtable | [DebuggerTypeProxyAttribute(...)] | 0 | System.Collections.Hashtable.HashtableDebugView | -| System.Collections.Hashtable | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.Hashtable | [NullableAttribute(...)] | 0 | 0 | -| System.Collections.Hashtable | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.Hashtable | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.Hashtable.SyncHashtable | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.ICollection | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.IComparer | [NullableAttribute(...)] | 0 | 2 | -| System.Collections.IComparer | [NullableContextAttribute(...)] | 0 | 2 | -| System.Collections.IComparer System.Collections.Hashtable.comparer | [NullableAttribute(...)] | 0 | 2 | -| System.Collections.IComparer System.Collections.Hashtable.comparer | [ObsoleteAttribute(...)] | 0 | Hashtable.comparer has been deprecated. Use the KeyComparer properties instead. | -| System.Collections.IComparer System.Collections.Hashtable.get_comparer() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Collections.IDictionary | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.IDictionary | [NullableAttribute(...)] | 0 | 1 | -| System.Collections.IDictionary | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.IDictionary System.Exception.Data | [NullableAttribute(...)] | 0 | 1 | -| System.Collections.IDictionary System.Exception.get_Data() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.IDictionaryEnumerator | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.IDictionaryEnumerator System.Resources.IResourceReader.GetEnumerator() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.IDictionaryEnumerator System.Resources.ResourceReader.GetEnumerator() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.IEnumerable | [ComVisibleAttribute(...)] | 0 | True | -| System.Collections.IEnumerable | [GuidAttribute(...)] | 0 | 496B0ABE-CDEE-11d3-88E8-00902754C43A | -| System.Collections.IEnumerable | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.IEnumerator System.Runtime.InteropServices.ComTypes.IEnumerable.GetEnumerator() | [DispIdAttribute(...)] | 0 | -4 | -| System.Collections.IEnumerator System.Security.PermissionSet.GetEnumerator() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.IEnumerator System.Security.PermissionSet.GetEnumeratorImpl() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.IEqualityComparer | [NullableAttribute(...)] | 0 | 2 | -| System.Collections.IEqualityComparer | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.IEqualityComparer System.Collections.Hashtable.EqualityComparer | [NullableAttribute(...)] | 0 | 2 | -| System.Collections.IEqualityComparer System.Collections.Hashtable.get_EqualityComparer() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Collections.IHashCodeProvider | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.IHashCodeProvider | [ObsoleteAttribute(...)] | 0 | IHashCodeProvider has been deprecated. Use IEqualityComparer instead. | -| System.Collections.IHashCodeProvider | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.IHashCodeProvider System.Collections.Hashtable.get_hcp() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Collections.IHashCodeProvider System.Collections.Hashtable.hcp | [NullableAttribute(...)] | 0 | 2 | -| System.Collections.IHashCodeProvider System.Collections.Hashtable.hcp | [ObsoleteAttribute(...)] | 0 | Hashtable.hcp has been deprecated. Use the EqualityComparer property instead. | -| System.Collections.IList | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.IList | [NullableContextAttribute(...)] | 0 | 2 | -| System.Collections.IStructuralComparable | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.IStructuralEquatable | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.KeyValuePairs | [DebuggerDisplayAttribute(...)] | 0 | {_value} | -| System.Collections.KeyValuePairs._key | [DebuggerBrowsableAttribute(...)] | 0 | 0 | -| System.Collections.KeyValuePairs._value | [DebuggerBrowsableAttribute(...)] | 0 | 0 | -| System.Collections.KeyValuePairs[] System.Collections.Hashtable.HashtableDebugView.Items | [DebuggerBrowsableAttribute(...)] | 0 | 3 | -| System.Collections.ListDictionaryInternal | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.ListDictionaryInternal | [NullableAttribute(...)] | 0 | 0 | -| System.Collections.ListDictionaryInternal | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.ListDictionaryInternal | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.ObjectModel.Collection`1 | [DebuggerDisplayAttribute(...)] | 0 | Count = {Count} | -| System.Collections.ObjectModel.Collection`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.Collections.Generic.ICollectionDebugView`1 | -| System.Collections.ObjectModel.Collection`1 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.ObjectModel.Collection`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Collections.ObjectModel.Collection`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.ObjectModel.Collection`1 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.ObjectModel.ReadOnlyCollection<System.String> System.Diagnostics.Tracing.EventWrittenEventArgs.PayloadNames | [NullableAttribute(...)] | 0 | [2,1] | -| System.Collections.ObjectModel.ReadOnlyCollection`1 | [DebuggerDisplayAttribute(...)] | 0 | Count = {Count} | -| System.Collections.ObjectModel.ReadOnlyCollection`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.Collections.Generic.ICollectionDebugView`1 | -| System.Collections.ObjectModel.ReadOnlyCollection`1 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.ObjectModel.ReadOnlyCollection`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Collections.ObjectModel.ReadOnlyCollection`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.ObjectModel.ReadOnlyCollection`1 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.ObjectModel.ReadOnlyDictionary<!0,!1>.KeyCollection System.Collections.ObjectModel.ReadOnlyDictionary`2.Keys | [NullableAttribute(...)] | 0 | [1,0,0] | -| System.Collections.ObjectModel.ReadOnlyDictionary<!0,!1>.ValueCollection System.Collections.ObjectModel.ReadOnlyDictionary`2.Values | [NullableAttribute(...)] | 0 | [1,0,0] | -| System.Collections.ObjectModel.ReadOnlyDictionary`2 | [DebuggerDisplayAttribute(...)] | 0 | Count = {Count} | -| System.Collections.ObjectModel.ReadOnlyDictionary`2 | [DebuggerTypeProxyAttribute(...)] | 0 | System.Collections.Generic.IDictionaryDebugView`2 | -| System.Collections.ObjectModel.ReadOnlyDictionary`2 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Collections.ObjectModel.ReadOnlyDictionary`2 | [NullableAttribute(...)] | 0 | 0 | -| System.Collections.ObjectModel.ReadOnlyDictionary`2 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.ObjectModel.ReadOnlyDictionary`2 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Collections.ObjectModel.ReadOnlyDictionary`2.KeyCollection | [DebuggerDisplayAttribute(...)] | 0 | Count = {Count} | -| System.Collections.ObjectModel.ReadOnlyDictionary`2.KeyCollection | [DebuggerTypeProxyAttribute(...)] | 0 | System.Collections.Generic.ICollectionDebugView`1 | -| System.Collections.ObjectModel.ReadOnlyDictionary`2.KeyCollection | [NullableAttribute(...)] | 0 | 0 | -| System.Collections.ObjectModel.ReadOnlyDictionary`2.ValueCollection | [DebuggerDisplayAttribute(...)] | 0 | Count = {Count} | -| System.Collections.ObjectModel.ReadOnlyDictionary`2.ValueCollection | [DebuggerTypeProxyAttribute(...)] | 0 | System.Collections.Generic.ICollectionDebugView`1 | -| System.Collections.ObjectModel.ReadOnlyDictionary`2.ValueCollection | [NullableContextAttribute(...)] | 0 | 0 | -| System.Comparison<!0> | [NullableAttribute(...)] | 0 | 1 | -| System.ComponentModel.DefaultValueAttribute | [AttributeUsageAttribute(...)] | 0 | 32767 | -| System.ComponentModel.DefaultValueAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.ComponentModel.DefaultValueAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.ComponentModel.EditorBrowsableAttribute | [AttributeUsageAttribute(...)] | 0 | 6140 | -| System.ComponentModel.Win32Exception | [NullableAttribute(...)] | 0 | 0 | -| System.ComponentModel.Win32Exception | [NullableContextAttribute(...)] | 0 | 1 | -| System.ComponentModel.Win32Exception | [TypeForwardedFromAttribute(...)] | 0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Configuration.Assemblies.AssemblyHashAlgorithm System.Reflection.AssemblyName.HashAlgorithm | [ObsoleteAttribute(...)] | 0 | AssemblyName members HashAlgorithm, ProcessorArchitecture, and VersionCompatibility are obsolete and not supported. | -| System.Configuration.Assemblies.AssemblyHashAlgorithm System.Reflection.RuntimeAssembly.GetHashAlgorithm(System.Runtime.CompilerServices.QCallAssembly) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Configuration.Assemblies.AssemblyVersionCompatibility System.Reflection.AssemblyName.VersionCompatibility | [ObsoleteAttribute(...)] | 0 | AssemblyName members HashAlgorithm, ProcessorArchitecture, and VersionCompatibility are obsolete and not supported. | -| System.Console | [NullableAttribute(...)] | 0 | 0 | -| System.Console | [NullableContextAttribute(...)] | 0 | 1 | -| System.Console.CancelKeyPress | [NullableAttribute(...)] | 0 | 2 | -| System.Console.CancelKeyPress | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.Console.CancelKeyPress | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Console.CancelKeyPress | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Console.CancelKeyPress | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.ConsoleCancelEventArgs | [NullableAttribute(...)] | 0 | 1 | -| System.ConsoleColor System.Console.BackgroundColor | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.ConsoleColor System.Console.BackgroundColor | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.ConsoleColor System.Console.BackgroundColor | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.ConsoleColor System.Console.BackgroundColor | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.ConsoleColor System.Console.ForegroundColor | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.ConsoleColor System.Console.ForegroundColor | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.ConsoleColor System.Console.ForegroundColor | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.ConsoleColor System.Console.ForegroundColor | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.ConsoleKeyInfo System.Console.ReadKey() | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.ConsoleKeyInfo System.Console.ReadKey() | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.ConsoleKeyInfo System.Console.ReadKey() | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.ConsoleKeyInfo System.Console.ReadKey() | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.ConsoleKeyInfo System.Console.ReadKey(System.Boolean) | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.ConsoleKeyInfo System.Console.ReadKey(System.Boolean) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.ConsoleKeyInfo System.Console.ReadKey(System.Boolean) | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.ConsoleKeyInfo System.Console.ReadKey(System.Boolean) | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.ContextMarshalException | [NullableAttribute(...)] | 0 | 0 | -| System.ContextMarshalException | [NullableContextAttribute(...)] | 0 | 2 | -| System.ContextMarshalException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.ContextStaticAttribute | [AttributeUsageAttribute(...)] | 0 | 256 | -| System.Convert | [NullableAttribute(...)] | 0 | 0 | -| System.Convert | [NullableContextAttribute(...)] | 0 | 2 | -| System.Convert.DBNull | [NullableAttribute(...)] | 0 | 1 | -| System.CultureAwareComparer | [NullableAttribute(...)] | 0 | 0 | -| System.CultureAwareComparer | [NullableContextAttribute(...)] | 0 | 2 | -| System.CultureAwareComparer | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.CurrentSystemTimeZone | [ObsoleteAttribute(...)] | 0 | System.CurrentSystemTimeZone has been deprecated. Investigate the use of System.TimeZoneInfo.Local instead. | -| System.DBNull | [NullableAttribute(...)] | 0 | 0 | -| System.DBNull | [NullableContextAttribute(...)] | 0 | 1 | -| System.DTSubString | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.DTSubString | [DefaultMemberAttribute(...)] | 0 | Item | -| System.DTSubString | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.DTSubString | [ObsoleteAttribute(...)] | 1 | True | -| System.DataMisalignedException | [NullableAttribute(...)] | 0 | 0 | -| System.DataMisalignedException | [NullableContextAttribute(...)] | 0 | 2 | -| System.DataMisalignedException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.DateOnly System.DateOnly.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.DateOnly System.DateOnly.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.DateOnly System.DateOnly.Parse(System.String,System.IFormatProvider,System.Globalization.DateTimeStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.DateOnly System.DateOnly.ParseExact(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.DateOnly System.DateOnly.ParseExact(System.String,System.String,System.IFormatProvider,System.Globalization.DateTimeStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.DateOnly System.DateOnly.ParseExact(System.String,System.String[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.DateOnly System.DateOnly.ParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.DateTime | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.DateTime System.Convert.ToDateTime(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.DateTime System.Convert.ToDateTime(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.DateTime System.Convert.ToDateTime(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.DateTime System.Convert.ToDateTime(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.DateTime System.DateTime.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.DateTime System.DateTime.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.DateTime System.DateTime.Parse(System.String,System.IFormatProvider,System.Globalization.DateTimeStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.DateTime System.DateTime.ParseExact(System.String,System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.DateTime System.DateTime.ParseExact(System.String,System.String,System.IFormatProvider,System.Globalization.DateTimeStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.DateTime System.DateTime.ParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.DateTimeOffset | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.DateTimeOffset System.DateTimeOffset.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.DateTimeOffset System.DateTimeOffset.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.DateTimeOffset System.DateTimeOffset.Parse(System.String,System.IFormatProvider,System.Globalization.DateTimeStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.DateTimeOffset System.DateTimeOffset.ParseExact(System.String,System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.DateTimeOffset System.DateTimeOffset.ParseExact(System.String,System.String,System.IFormatProvider,System.Globalization.DateTimeStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.DateTimeOffset System.DateTimeOffset.ParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.DateTimeResult | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.DateTimeResult | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.DateTimeResult | [ObsoleteAttribute(...)] | 1 | True | -| System.Decimal System.Convert.ToDecimal(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Decimal System.Convert.ToDecimal(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Decimal System.Convert.ToDecimal(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Decimal System.Convert.ToDecimal(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Decimal System.Decimal.CreateChecked`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Decimal System.Decimal.CreateSaturating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Decimal System.Decimal.CreateTruncating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Decimal System.Decimal.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Decimal System.Decimal.Parse(System.String,System.Globalization.NumberStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Decimal System.Decimal.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Decimal System.Decimal.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Decimal System.Decimal.op_Implicit(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Decimal System.Decimal.op_Implicit(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Decimal System.Decimal.op_Implicit(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Decimal System.Decimal.op_Implicit(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Delegate | [ClassInterfaceAttribute(...)] | 0 | 0 | -| System.Delegate | [ComVisibleAttribute(...)] | 0 | True | -| System.Delegate | [NullableAttribute(...)] | 0 | 0 | -| System.Delegate | [NullableAttribute(...)] | 0 | 2 | -| System.Delegate | [NullableContextAttribute(...)] | 0 | 1 | -| System.Delegate System.Delegate.Combine(System.Delegate,System.Delegate) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Delegate System.Delegate.Combine(System.Delegate[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Delegate System.Delegate.CreateDelegate(System.Type,System.Object,System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | The target method might be removed | -| System.Delegate System.Delegate.CreateDelegate(System.Type,System.Object,System.String,System.Boolean) | [RequiresUnreferencedCodeAttribute(...)] | 0 | The target method might be removed | -| System.Delegate System.Delegate.CreateDelegate(System.Type,System.Object,System.String,System.Boolean,System.Boolean) | [RequiresUnreferencedCodeAttribute(...)] | 0 | The target method might be removed | -| System.Delegate System.Delegate.Remove(System.Delegate,System.Delegate) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Delegate System.Delegate.RemoveAll(System.Delegate,System.Delegate) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Delegate System.Diagnostics.Tracing.PropertyValue.TypeHelper.GetGetMethod(System.Reflection.PropertyInfo,System.Type) | [UnconditionalSuppressMessageAttribute(...)] | 0 | AotAnalysis | -| System.Delegate System.Diagnostics.Tracing.PropertyValue.TypeHelper.GetGetMethod(System.Reflection.PropertyInfo,System.Type) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL3050:AotUnfriendlyApi | -| System.Delegate System.Runtime.InteropServices.Marshal.GetDelegateForFunctionPointer(System.IntPtr,System.Type) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Delegate System.Runtime.InteropServices.Marshal.GetDelegateForFunctionPointer(System.IntPtr,System.Type) | [RequiresDynamicCodeAttribute(...)] | 0 | Marshalling code for the delegate might not be available. Use the GetDelegateForFunctionPointer<TDelegate> overload instead. | -| System.Diagnostics.CodeAnalysis.AllowNullAttribute | [AttributeUsageAttribute(...)] | 0 | 2432 | -| System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute | [AttributeUsageAttribute(...)] | 0 | 2048 | -| System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.CodeAnalysis.DisallowNullAttribute | [AttributeUsageAttribute(...)] | 0 | 2432 | -| System.Diagnostics.CodeAnalysis.DoesNotReturnAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Diagnostics.CodeAnalysis.DoesNotReturnIfAttribute | [AttributeUsageAttribute(...)] | 0 | 2048 | -| System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute | [AttributeUsageAttribute(...)] | 0 | 352 | -| System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute | [AttributeUsageAttribute(...)] | 0 | 28108 | -| System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute | [AttributeUsageAttribute(...)] | 0 | 749 | -| System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.CodeAnalysis.ExperimentalAttribute | [AttributeUsageAttribute(...)] | 0 | 6143 | -| System.Diagnostics.CodeAnalysis.ExperimentalAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.CodeAnalysis.ExperimentalAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.CodeAnalysis.MaybeNullAttribute | [AttributeUsageAttribute(...)] | 0 | 10624 | -| System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute | [AttributeUsageAttribute(...)] | 0 | 2048 | -| System.Diagnostics.CodeAnalysis.MemberNotNullAttribute | [AttributeUsageAttribute(...)] | 0 | 192 | -| System.Diagnostics.CodeAnalysis.MemberNotNullAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.CodeAnalysis.MemberNotNullAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute | [AttributeUsageAttribute(...)] | 0 | 192 | -| System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.CodeAnalysis.NotNullAttribute | [AttributeUsageAttribute(...)] | 0 | 10624 | -| System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute | [AttributeUsageAttribute(...)] | 0 | 10368 | -| System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.CodeAnalysis.NotNullWhenAttribute | [AttributeUsageAttribute(...)] | 0 | 2048 | -| System.Diagnostics.CodeAnalysis.RequiresAssemblyFilesAttribute | [AttributeUsageAttribute(...)] | 0 | 736 | -| System.Diagnostics.CodeAnalysis.RequiresAssemblyFilesAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.CodeAnalysis.RequiresAssemblyFilesAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute | [AttributeUsageAttribute(...)] | 0 | 100 | -| System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute | [AttributeUsageAttribute(...)] | 0 | 100 | -| System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute | [AttributeUsageAttribute(...)] | 0 | 32 | -| System.Diagnostics.CodeAnalysis.StringSyntaxAttribute | [AttributeUsageAttribute(...)] | 0 | 2432 | -| System.Diagnostics.CodeAnalysis.StringSyntaxAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.CodeAnalysis.StringSyntaxAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.CodeAnalysis.SuppressMessageAttribute | [AttributeUsageAttribute(...)] | 0 | 32767 | -| System.Diagnostics.CodeAnalysis.SuppressMessageAttribute | [ConditionalAttribute(...)] | 0 | CODE_ANALYSIS | -| System.Diagnostics.CodeAnalysis.SuppressMessageAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.CodeAnalysis.SuppressMessageAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute | [AttributeUsageAttribute(...)] | 0 | 32767 | -| System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.CodeAnalysis.UnscopedRefAttribute | [AttributeUsageAttribute(...)] | 0 | 2240 | -| System.Diagnostics.ConditionalAttribute | [AttributeUsageAttribute(...)] | 0 | 68 | -| System.Diagnostics.ConditionalAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.ConditionalAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.Contracts.Contract | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Contracts.Contract | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.Contracts.Contract.ContractFailed | [NullableAttribute(...)] | 0 | [2,1] | -| System.Diagnostics.Contracts.ContractAbbreviatorAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Diagnostics.Contracts.ContractAbbreviatorAttribute | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Diagnostics.Contracts.ContractArgumentValidatorAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Diagnostics.Contracts.ContractArgumentValidatorAttribute | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Diagnostics.Contracts.ContractClassAttribute | [AttributeUsageAttribute(...)] | 0 | 5124 | -| System.Diagnostics.Contracts.ContractClassAttribute | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Diagnostics.Contracts.ContractClassAttribute | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Diagnostics.Contracts.ContractClassAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Contracts.ContractClassAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.Contracts.ContractClassForAttribute | [AttributeUsageAttribute(...)] | 0 | 4 | -| System.Diagnostics.Contracts.ContractClassForAttribute | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Diagnostics.Contracts.ContractClassForAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Contracts.ContractClassForAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.Contracts.ContractException | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Contracts.ContractException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.Contracts.ContractException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Diagnostics.Contracts.ContractFailedEventArgs | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Contracts.ContractFailedEventArgs | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.Contracts.ContractFailureKind | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Diagnostics.Contracts.ContractInvariantMethodAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Diagnostics.Contracts.ContractInvariantMethodAttribute | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Diagnostics.Contracts.ContractOptionAttribute | [AttributeUsageAttribute(...)] | 0 | 32767 | -| System.Diagnostics.Contracts.ContractOptionAttribute | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Diagnostics.Contracts.ContractOptionAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Contracts.ContractOptionAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.Contracts.ContractPublicPropertyNameAttribute | [AttributeUsageAttribute(...)] | 0 | 256 | -| System.Diagnostics.Contracts.ContractPublicPropertyNameAttribute | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Diagnostics.Contracts.ContractPublicPropertyNameAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Contracts.ContractPublicPropertyNameAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.Contracts.ContractReferenceAssemblyAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Diagnostics.Contracts.ContractRuntimeIgnoredAttribute | [AttributeUsageAttribute(...)] | 0 | 192 | -| System.Diagnostics.Contracts.ContractRuntimeIgnoredAttribute | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Diagnostics.Contracts.ContractVerificationAttribute | [AttributeUsageAttribute(...)] | 0 | 237 | -| System.Diagnostics.Contracts.ContractVerificationAttribute | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Diagnostics.Contracts.PureAttribute | [AttributeUsageAttribute(...)] | 0 | 6884 | -| System.Diagnostics.Contracts.PureAttribute | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Diagnostics.Debug | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Debug | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.Debug.AssertInterpolatedStringHandler | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Diagnostics.Debug.AssertInterpolatedStringHandler | [InterpolatedStringHandlerArgumentAttribute(...)] | 0 | condition | -| System.Diagnostics.Debug.AssertInterpolatedStringHandler | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Debug.WriteIfInterpolatedStringHandler | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Diagnostics.Debug.WriteIfInterpolatedStringHandler | [InterpolatedStringHandlerArgumentAttribute(...)] | 0 | condition | -| System.Diagnostics.Debug.WriteIfInterpolatedStringHandler | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.DebugProvider | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.DebugProvider | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.DebugProvider System.Diagnostics.Debug.SetProvider(System.Diagnostics.DebugProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.DebuggableAttribute | [AttributeUsageAttribute(...)] | 0 | 3 | -| System.Diagnostics.Debugger | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Debugger | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.DebuggerBrowsableAttribute | [AttributeUsageAttribute(...)] | 0 | 384 | -| System.Diagnostics.DebuggerDisplayAttribute | [AttributeUsageAttribute(...)] | 0 | 4509 | -| System.Diagnostics.DebuggerDisplayAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.DebuggerDisplayAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.DebuggerHiddenAttribute | [AttributeUsageAttribute(...)] | 0 | 224 | -| System.Diagnostics.DebuggerNonUserCodeAttribute | [AttributeUsageAttribute(...)] | 0 | 236 | -| System.Diagnostics.DebuggerStepThroughAttribute | [AttributeUsageAttribute(...)] | 0 | 108 | -| System.Diagnostics.DebuggerStepperBoundaryAttribute | [AttributeUsageAttribute(...)] | 0 | 96 | -| System.Diagnostics.DebuggerTypeProxyAttribute | [AttributeUsageAttribute(...)] | 0 | 13 | -| System.Diagnostics.DebuggerTypeProxyAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.DebuggerTypeProxyAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.DebuggerVisualizerAttribute | [AttributeUsageAttribute(...)] | 0 | 13 | -| System.Diagnostics.DebuggerVisualizerAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.DebuggerVisualizerAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.StackFrame | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.StackFrame | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.StackFrame System.Diagnostics.StackTrace.GetFrame(System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.StackFrameExtensions | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.StackFrameExtensions | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.StackTrace | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.StackTrace | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.StackTraceHiddenAttribute | [AttributeUsageAttribute(...)] | 0 | 108 | -| System.Diagnostics.Stopwatch | [DebuggerDisplayAttribute(...)] | 0 | {DebuggerDisplay,nq} | -| System.Diagnostics.Stopwatch | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Stopwatch | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.SymbolStore.ISymbolDocumentWriter | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.Tracing.CounterGroup | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Diagnostics.Tracing.DiagnosticCounter | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Tracing.DiagnosticCounter | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.Tracing.DiagnosticCounter | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Diagnostics.Tracing.EventAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Diagnostics.Tracing.EventAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Tracing.EventAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.Tracing.EventChannelAttribute | [AttributeUsageAttribute(...)] | 0 | 256 | -| System.Diagnostics.Tracing.EventCounter | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Tracing.EventCounter | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.Tracing.EventCounter | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Diagnostics.Tracing.EventDataAttribute | [AttributeUsageAttribute(...)] | 0 | 12 | -| System.Diagnostics.Tracing.EventDataAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Tracing.EventDataAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.Tracing.EventFieldAttribute | [AttributeUsageAttribute(...)] | 0 | 128 | -| System.Diagnostics.Tracing.EventIgnoreAttribute | [AttributeUsageAttribute(...)] | 0 | 128 | -| System.Diagnostics.Tracing.EventListener | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Tracing.EventListener | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.Tracing.EventListener.EventSourceCreated | [NullableAttribute(...)] | 0 | [2,1] | -| System.Diagnostics.Tracing.EventListener.EventWritten | [NullableAttribute(...)] | 0 | [2,1] | -| System.Diagnostics.Tracing.EventPayload | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Diagnostics.Tracing.EventSource | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Diagnostics.Tracing.EventSource | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Tracing.EventSource | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.Tracing.EventSource System.Diagnostics.Tracing.EventWrittenEventArgs.EventSource | [NullableAttribute(...)] | 0 | 1 | -| System.Diagnostics.Tracing.EventSource System.Diagnostics.Tracing.EventWrittenEventArgs.get_EventSource() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.Tracing.EventSource.EventCommandExecuted | [NullableAttribute(...)] | 0 | [2,1] | -| System.Diagnostics.Tracing.EventSource.EventData | [NullableContextAttribute(...)] | 0 | 0 | -| System.Diagnostics.Tracing.EventSource.EventSourcePrimitive | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Tracing.EventSource.EventSourcePrimitive System.Diagnostics.Tracing.EventSource.EventSourcePrimitive.op_Implicit(System.Enum) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.Tracing.EventSource.EventSourcePrimitive System.Diagnostics.Tracing.EventSource.EventSourcePrimitive.op_Implicit(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Diagnostics.Tracing.EventSource.EventSourcePrimitive System.Diagnostics.Tracing.EventSource.EventSourcePrimitive.op_Implicit(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Diagnostics.Tracing.EventSource.EventSourcePrimitive System.Diagnostics.Tracing.EventSource.EventSourcePrimitive.op_Implicit(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Diagnostics.Tracing.EventSource.EventSourcePrimitive System.Diagnostics.Tracing.EventSource.EventSourcePrimitive.op_Implicit(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Diagnostics.Tracing.EventSource.EventSourcePrimitive System.Diagnostics.Tracing.EventSource.EventSourcePrimitive.op_Implicit(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Diagnostics.Tracing.EventSourceAttribute | [AttributeUsageAttribute(...)] | 0 | 4 | -| System.Diagnostics.Tracing.EventSourceAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Tracing.EventSourceAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.Tracing.EventSourceCreatedEventArgs | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Tracing.EventSourceCreatedEventArgs | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.Tracing.EventSourceException | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Tracing.EventSourceException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.Tracing.EventWrittenEventArgs | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Tracing.EventWrittenEventArgs | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.Tracing.EventWrittenEventArgs.MoreEventInfo System.Diagnostics.Tracing.EventWrittenEventArgs.MoreInfo | [NullableAttribute(...)] | 0 | 1 | -| System.Diagnostics.Tracing.FrameworkEventSource | [GeneratedCodeAttribute(...)] | 0 | System.Private.CoreLib.Generators | -| System.Diagnostics.Tracing.FrameworkEventSource | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Diagnostics.Tracing.IncrementingEventCounter | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Tracing.IncrementingEventCounter | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.Tracing.IncrementingEventCounter | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Diagnostics.Tracing.IncrementingPollingCounter | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Tracing.IncrementingPollingCounter | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.Tracing.IncrementingPollingCounter | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Diagnostics.Tracing.NativeRuntimeEventSource | [GeneratedCodeAttribute(...)] | 0 | System.Private.CoreLib.Generators | -| System.Diagnostics.Tracing.NativeRuntimeEventSource | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Diagnostics.Tracing.NonEventAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Diagnostics.Tracing.PollingCounter | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.Tracing.PollingCounter | [NullableContextAttribute(...)] | 0 | 1 | -| System.Diagnostics.Tracing.PollingCounter | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Diagnostics.Tracing.RuntimeEventSource | [GeneratedCodeAttribute(...)] | 0 | System.Private.CoreLib.Generators | -| System.Diagnostics.Tracing.RuntimeEventSource | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Diagnostics.Tracing.SessionMask | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Diagnostics.Tracing.TraceLoggingEventHandleTable | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Diagnostics.Tracing.TraceLoggingEventTypes System.Diagnostics.Tracing.EventSource.EventMetadata.get_TraceLoggingEventTypes() | [RequiresUnreferencedCodeAttribute(...)] | 0 | EventSource will serialize the whole object graph. Trimmer will not safely handle this case because properties may be trimmed. | -| System.Diagnostics.Tracing.TraceLoggingEventTypes System.Diagnostics.Tracing.EventSource.EventMetadata.get_TraceLoggingEventTypes() | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Diagnostics.Tracing.TraceLoggingEventTypes System.Diagnostics.Tracing.EventSource.EventMetadata.get_TraceLoggingEventTypes() | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2112:ReflectionToRequiresUnreferencedCode | -| System.Diagnostics.Tracing.TraceLoggingEventTypes System.Diagnostics.Tracing.SimpleEventTypes`1.InitInstance() | [RequiresUnreferencedCodeAttribute(...)] | 0 | EventSource WriteEvent will serialize the whole object graph. Trimmer will not safely handle this case because properties may be trimmed. This can be suppressed if the object is a primitive type | -| System.Diagnostics.Tracing.TraceLoggingEventTypes System.Diagnostics.Tracing.SimpleEventTypes`1.get_Instance() | [RequiresUnreferencedCodeAttribute(...)] | 0 | EventSource WriteEvent will serialize the whole object graph. Trimmer will not safely handle this case because properties may be trimmed. This can be suppressed if the object is a primitive type | -| System.Diagnostics.Tracing.TraceLoggingTypeInfo System.Diagnostics.Tracing.Statics.CreateDefaultTypeInfo(System.Type,System.Collections.Generic.List<System.Type>) | [RequiresUnreferencedCodeAttribute(...)] | 0 | EventSource WriteEvent will serialize the whole object graph. Trimmer will not safely handle this case because properties may be trimmed. This can be suppressed if the object is a primitive type | -| System.Diagnostics.Tracing.TraceLoggingTypeInfo System.Diagnostics.Tracing.TraceLoggingTypeInfo.GetInstance(System.Type,System.Collections.Generic.List<System.Type>) | [RequiresUnreferencedCodeAttribute(...)] | 0 | EventSource WriteEvent will serialize the whole object graph. Trimmer will not safely handle this case because properties may be trimmed. This can be suppressed if the object is a primitive type | -| System.Diagnostics.Tracing.TraceLoggingTypeInfo[] System.Diagnostics.Tracing.TraceLoggingEventTypes.MakeArray(System.Reflection.ParameterInfo[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | EventSource WriteEvent will serialize the whole object graph. Trimmer will not safely handle this case because properties may be trimmed. This can be suppressed if the object is a primitive type | -| System.Diagnostics.Tracing.TraceLoggingTypeInfo[] System.Diagnostics.Tracing.TraceLoggingEventTypes.MakeArray(System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | EventSource WriteEvent will serialize the whole object graph. Trimmer will not safely handle this case because properties may be trimmed. This can be suppressed if the object is a primitive type | -| System.Diagnostics.UnreachableException | [NullableAttribute(...)] | 0 | 0 | -| System.Diagnostics.UnreachableException | [NullableContextAttribute(...)] | 0 | 2 | -| System.DivideByZeroException | [NullableAttribute(...)] | 0 | 0 | -| System.DivideByZeroException | [NullableContextAttribute(...)] | 0 | 2 | -| System.DivideByZeroException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.DllNotFoundException | [NullableAttribute(...)] | 0 | 0 | -| System.DllNotFoundException | [NullableContextAttribute(...)] | 0 | 2 | -| System.DllNotFoundException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Double System.BitConverter.ToDouble(System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Double System.BitConverter.UInt64BitsToDouble(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Double System.Char.GetNumericValue(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Double System.Convert.ToDouble(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Double System.Convert.ToDouble(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Double System.Convert.ToDouble(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Double System.Convert.ToDouble(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Double System.Double.CreateChecked`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Double System.Double.CreateSaturating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Double System.Double.CreateTruncating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Double System.Double.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Double System.Double.Parse(System.String,System.Globalization.NumberStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Double System.Double.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Double System.Double.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Double System.Globalization.CharUnicodeInfo.GetNumericValue(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.DuplicateWaitObjectException | [NullableAttribute(...)] | 0 | 0 | -| System.DuplicateWaitObjectException | [NullableContextAttribute(...)] | 0 | 2 | -| System.DuplicateWaitObjectException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.EntryPointNotFoundException | [NullableAttribute(...)] | 0 | 0 | -| System.EntryPointNotFoundException | [NullableContextAttribute(...)] | 0 | 2 | -| System.EntryPointNotFoundException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Enum | [NullableAttribute(...)] | 0 | 0 | -| System.Enum | [NullableContextAttribute(...)] | 0 | 1 | -| System.Enum | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Environment | [NullableAttribute(...)] | 0 | 0 | -| System.Environment | [NullableContextAttribute(...)] | 0 | 1 | -| System.Environment.SpecialFolder | [NullableContextAttribute(...)] | 0 | 0 | -| System.Environment.SpecialFolderOption | [NullableContextAttribute(...)] | 0 | 0 | -| System.EventArgs | [NullableAttribute(...)] | 0 | 1 | -| System.EventArgs | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.EventArgs.Empty | [NullableAttribute(...)] | 0 | 1 | -| System.EventHandler<!0> | [NullableAttribute(...)] | 0 | [2,1] | -| System.EventHandler<System.Diagnostics.Contracts.ContractFailedEventArgs> | [NullableAttribute(...)] | 0 | [2,1] | -| System.EventHandler<System.Diagnostics.Tracing.EventCommandEventArgs> | [NullableAttribute(...)] | 0 | [2,1] | -| System.EventHandler<System.Diagnostics.Tracing.EventSourceCreatedEventArgs> | [NullableAttribute(...)] | 0 | [2,1] | -| System.EventHandler<System.Diagnostics.Tracing.EventWrittenEventArgs> | [NullableAttribute(...)] | 0 | [2,1] | -| System.EventHandler<System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs> | [NullableAttribute(...)] | 0 | [2,1] | -| System.EventHandler<System.Runtime.Serialization.SafeSerializationEventArgs> | [NullableAttribute(...)] | 0 | [2,1] | -| System.EventHandler<System.Threading.Tasks.UnobservedTaskExceptionEventArgs> | [NullableAttribute(...)] | 0 | [2,1] | -| System.Exception | [NullableAttribute(...)] | 0 | 0 | -| System.Exception | [NullableAttribute(...)] | 0 | 1 | -| System.Exception | [NullableContextAttribute(...)] | 0 | 2 | -| System.Exception | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Exception System.Exception.GetBaseException() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Exception System.Runtime.InteropServices.Marshal.GetExceptionForHR(System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Exception System.Runtime.InteropServices.Marshal.GetExceptionForHR(System.Int32,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Exception.SerializeObjectState | [NullableAttribute(...)] | 0 | [2,1] | -| System.Exception.SerializeObjectState | [ObsoleteAttribute(...)] | 0 | BinaryFormatter serialization is obsolete and should not be used. See https://aka.ms/binaryformatter for more information. | -| System.Exception[] System.Reflection.ReflectionTypeLoadException.LoaderExceptions | [NullableAttribute(...)] | 0 | [1,2] | -| System.ExecutionEngineException | [NullableAttribute(...)] | 0 | 0 | -| System.ExecutionEngineException | [NullableContextAttribute(...)] | 0 | 2 | -| System.ExecutionEngineException | [ObsoleteAttribute(...)] | 0 | ExecutionEngineException previously indicated an unspecified fatal error in the runtime. The runtime no longer raises this exception so this type is obsolete. | -| System.ExecutionEngineException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.FieldAccessException | [NullableAttribute(...)] | 0 | 0 | -| System.FieldAccessException | [NullableContextAttribute(...)] | 0 | 2 | -| System.FieldAccessException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.FlagsAttribute | [AttributeUsageAttribute(...)] | 0 | 16 | -| System.FormatException | [NullableAttribute(...)] | 0 | 0 | -| System.FormatException | [NullableContextAttribute(...)] | 0 | 2 | -| System.FormatException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.FormattableString | [NullableAttribute(...)] | 0 | 0 | -| System.FormattableString | [NullableContextAttribute(...)] | 0 | 1 | -| System.FormattableString System.Runtime.CompilerServices.FormattableStringFactory.Create(System.String,System.Object[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Func<!0,!0,System.Boolean> | [NullableAttribute(...)] | 0 | [1,2,2] | -| System.Func<!0,!1,!2,System.AsyncCallback,System.IAsyncResult,System.Object> | [NullableAttribute(...)] | 0 | [1,1,1,1,1,2,1] | -| System.Func<!0,!1,System.AsyncCallback,System.IAsyncResult,System.Object> | [NullableAttribute(...)] | 0 | [1,1,1,1,2,1] | -| System.Func<!0,System.AsyncCallback,System.IAsyncResult,System.Object> | [NullableAttribute(...)] | 0 | [1,1,1,2,1] | -| System.Func<!0,System.Int32> | [NullableAttribute(...)] | 0 | [2,1] | -| System.Func<!0,System.Object,System.Threading.Tasks.Task<!0>> | [NullableAttribute(...)] | 0 | [1,1,1,2,1] | -| System.Func<!0,System.Object,System.Threading.Tasks.Task> | [NullableAttribute(...)] | 0 | [1,1,2,1] | -| System.Func<!0,System.Object> | [NullableAttribute(...)] | 0 | [1,2,1] | -| System.Func<System.AsyncCallback,System.IAsyncResult,System.Object> | [NullableAttribute(...)] | 0 | [1,1,2,1] | -| System.Func<System.Boolean,System.Reflection.Assembly,System.String,System.Type> | [NullableAttribute(...)] | 0 | [2,2,1,2] | -| System.Func<System.Diagnostics.Tracing.PropertyValue,System.Diagnostics.Tracing.PropertyValue> System.Diagnostics.Tracing.PropertyValue.GetReferenceTypePropertyGetter(System.Reflection.PropertyInfo) | [UnconditionalSuppressMessageAttribute(...)] | 0 | AotAnalysis | -| System.Func<System.Diagnostics.Tracing.PropertyValue,System.Diagnostics.Tracing.PropertyValue> System.Diagnostics.Tracing.PropertyValue.GetReferenceTypePropertyGetter(System.Reflection.PropertyInfo) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL3050:AotUnfriendlyApi | -| System.Func<System.IntPtr,System.Reflection.Assembly,System.String> | [NullableAttribute(...)] | 0 | [2,1,1] | -| System.Func<System.Reflection.Assembly,System.Reflection.AssemblyName,System.Runtime.Loader.AssemblyLoadContext> | [NullableAttribute(...)] | 0 | [2,1,1,2] | -| System.Func<System.Reflection.Assembly,System.Reflection.AssemblyName> | [NullableAttribute(...)] | 0 | [2,1,2] | -| System.Func<System.Threading.Tasks.Task<!0>> | [NullableAttribute(...)] | 0 | [1,2,1] | -| System.Func<System.Threading.Tasks.Task> | [NullableAttribute(...)] | 0 | [1,2] | -| System.Func`5 | [NullableAttribute(...)] | 0 | 0 | -| System.Func`5 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Func`6 | [NullableAttribute(...)] | 0 | 0 | -| System.Func`6 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Func`7 | [NullableAttribute(...)] | 0 | 0 | -| System.Func`7 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Func`8 | [NullableAttribute(...)] | 0 | 0 | -| System.Func`8 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Func`9 | [NullableAttribute(...)] | 0 | 0 | -| System.Func`9 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Func`10 | [NullableAttribute(...)] | 0 | 0 | -| System.Func`10 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Func`11 | [NullableAttribute(...)] | 0 | 0 | -| System.Func`11 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Func`12 | [NullableAttribute(...)] | 0 | 0 | -| System.Func`12 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Func`13 | [NullableAttribute(...)] | 0 | 0 | -| System.Func`13 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Func`14 | [NullableAttribute(...)] | 0 | 0 | -| System.Func`14 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Func`15 | [NullableAttribute(...)] | 0 | 0 | -| System.Func`15 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Func`16 | [NullableAttribute(...)] | 0 | 0 | -| System.Func`16 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Func`17 | [NullableAttribute(...)] | 0 | 0 | -| System.Func`17 | [NullableContextAttribute(...)] | 0 | 2 | -| System.GC | [NullableAttribute(...)] | 0 | 0 | -| System.GC | [NullableContextAttribute(...)] | 0 | 1 | -| System.GC.EnableNoGCRegionCallbackStatus System.GC._EnableNoGCRegionCallback(System.GC.NoGCRegionCallbackFinalizerWorkItem*,System.Int64) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Globalization.Calendar | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.Calendar | [NullableContextAttribute(...)] | 0 | 1 | -| System.Globalization.ChineseLunisolarCalendar | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.ChineseLunisolarCalendar | [NullableContextAttribute(...)] | 0 | 1 | -| System.Globalization.CompareInfo | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.CompareInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.Globalization.CompareInfo | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Globalization.CultureInfo | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.CultureInfo | [NullableAttribute(...)] | 0 | 2 | -| System.Globalization.CultureInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.Globalization.CultureInfo System.Globalization.CultureInfo.DefaultThreadCurrentCulture | [NullableAttribute(...)] | 0 | 2 | -| System.Globalization.CultureInfo System.Globalization.CultureInfo.DefaultThreadCurrentUICulture | [NullableAttribute(...)] | 0 | 2 | -| System.Globalization.CultureInfo System.Globalization.CultureInfo.get_DefaultThreadCurrentCulture() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Globalization.CultureInfo System.Globalization.CultureInfo.get_DefaultThreadCurrentUICulture() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Globalization.CultureNotFoundException | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.CultureNotFoundException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Globalization.CultureNotFoundException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Globalization.CultureTypes.FrameworkCultures | [ObsoleteAttribute(...)] | 0 | CultureTypes.FrameworkCultures has been deprecated. Use other values in CultureTypes instead. | -| System.Globalization.CultureTypes.WindowsOnlyCultures | [ObsoleteAttribute(...)] | 0 | CultureTypes.WindowsOnlyCultures has been deprecated. Use other values in CultureTypes instead. | -| System.Globalization.DateTimeFormatInfo | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.DateTimeFormatInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.Globalization.EraInfo[] System.Globalization.ChineseLunisolarCalendar.CalEraInfo | [NullableAttribute(...)] | 0 | [2,1] | -| System.Globalization.EraInfo[] System.Globalization.EastAsianLunisolarCalendar.CalEraInfo | [NullableAttribute(...)] | 0 | [2,1] | -| System.Globalization.EraInfo[] System.Globalization.JapaneseLunisolarCalendar.CalEraInfo | [NullableAttribute(...)] | 0 | [2,1] | -| System.Globalization.EraInfo[] System.Globalization.KoreanLunisolarCalendar.CalEraInfo | [NullableAttribute(...)] | 0 | [2,1] | -| System.Globalization.EraInfo[] System.Globalization.TaiwanLunisolarCalendar.CalEraInfo | [NullableAttribute(...)] | 0 | [2,1] | -| System.Globalization.IdnMapping | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.IdnMapping | [NullableContextAttribute(...)] | 0 | 1 | -| System.Globalization.JapaneseCalendar | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.JapaneseCalendar | [NullableContextAttribute(...)] | 0 | 1 | -| System.Globalization.JapaneseLunisolarCalendar | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.JapaneseLunisolarCalendar | [NullableContextAttribute(...)] | 0 | 1 | -| System.Globalization.JulianCalendar | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.JulianCalendar | [NullableContextAttribute(...)] | 0 | 1 | -| System.Globalization.KoreanCalendar | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.KoreanCalendar | [NullableContextAttribute(...)] | 0 | 1 | -| System.Globalization.KoreanLunisolarCalendar | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.KoreanLunisolarCalendar | [NullableContextAttribute(...)] | 0 | 1 | -| System.Globalization.NumberFormatInfo | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.NumberFormatInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.Globalization.RegionInfo | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.RegionInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.Globalization.SortKey | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.SortKey | [NullableContextAttribute(...)] | 0 | 1 | -| System.Globalization.SortVersion | [NotNullWhenAttribute(...)] | 0 | True | -| System.Globalization.SortVersion | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.SortVersion | [NullableContextAttribute(...)] | 0 | 2 | -| System.Globalization.SortVersion | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Globalization.StringInfo | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.StringInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.Globalization.TaiwanCalendar | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.TaiwanCalendar | [NullableContextAttribute(...)] | 0 | 1 | -| System.Globalization.TaiwanLunisolarCalendar | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.TaiwanLunisolarCalendar | [NullableContextAttribute(...)] | 0 | 1 | -| System.Globalization.TextElementEnumerator | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.TextElementEnumerator | [NullableContextAttribute(...)] | 0 | 1 | -| System.Globalization.TextInfo | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.TextInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.Globalization.ThaiBuddhistCalendar | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.ThaiBuddhistCalendar | [NullableContextAttribute(...)] | 0 | 1 | -| System.Globalization.TimeSpanParse.StringParser | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Globalization.TimeSpanParse.StringParser | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Globalization.TimeSpanParse.StringParser | [ObsoleteAttribute(...)] | 1 | True | -| System.Globalization.TimeSpanParse.TimeSpanRawInfo | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Globalization.TimeSpanParse.TimeSpanRawInfo | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Globalization.TimeSpanParse.TimeSpanRawInfo | [ObsoleteAttribute(...)] | 1 | True | -| System.Globalization.TimeSpanParse.TimeSpanResult | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Globalization.TimeSpanParse.TimeSpanResult | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Globalization.TimeSpanParse.TimeSpanResult | [ObsoleteAttribute(...)] | 1 | True | -| System.Globalization.TimeSpanParse.TimeSpanToken | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Globalization.TimeSpanParse.TimeSpanToken | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Globalization.TimeSpanParse.TimeSpanToken | [ObsoleteAttribute(...)] | 1 | True | -| System.Globalization.TimeSpanParse.TimeSpanTokenizer | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Globalization.TimeSpanParse.TimeSpanTokenizer | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Globalization.TimeSpanParse.TimeSpanTokenizer | [ObsoleteAttribute(...)] | 1 | True | -| System.Globalization.UmAlQuraCalendar | [NullableAttribute(...)] | 0 | 0 | -| System.Globalization.UmAlQuraCalendar | [NullableContextAttribute(...)] | 0 | 1 | -| System.Globalization.UnicodeCategory System.Char.GetUnicodeCategory(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Globalization.UnicodeCategory System.Globalization.CharUnicodeInfo.GetUnicodeCategory(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Guid | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Guid System.Diagnostics.Tracing.EventSource.GetGuid(System.Type) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Guid System.Guid.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Guid System.Guid.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Guid System.Guid.ParseExact(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Half System.BitConverter.ToHalf(System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Half System.BitConverter.UInt16BitsToHalf(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Half System.Half.CreateChecked`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Half System.Half.CreateSaturating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Half System.Half.CreateTruncating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Half System.Half.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Half System.Half.Parse(System.String,System.Globalization.NumberStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Half System.Half.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Half System.Half.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Half System.Half.op_Explicit(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Half System.Half.op_Explicit(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Half System.Half.op_Explicit(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Half System.Half.op_Explicit(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Half System.Half.op_Implicit(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.HashCode | [NullableAttribute(...)] | 0 | 0 | -| System.HashCode | [NullableContextAttribute(...)] | 0 | 1 | -| System.HexConverter.<>c.<>9__6_0 | [TupleElementNamesAttribute(...)] | 0 | [RosPtr,casing] | -| System.IAsyncResult | [NullableAttribute(...)] | 0 | 1 | -| System.IAsyncResult | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Action`4.BeginInvoke(!0,!1,!2,!3,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Action`5.BeginInvoke(!0,!1,!2,!3,!4,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Action`6.BeginInvoke(!0,!1,!2,!3,!4,!5,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Action`7.BeginInvoke(!0,!1,!2,!3,!4,!5,!6,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Action`8.BeginInvoke(!0,!1,!2,!3,!4,!5,!6,!7,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Action`9.BeginInvoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Action`10.BeginInvoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Action`11.BeginInvoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Action`12.BeginInvoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Action`13.BeginInvoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Action`14.BeginInvoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Action`15.BeginInvoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Action`16.BeginInvoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,!15,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Func`5.BeginInvoke(!0,!1,!2,!3,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Func`6.BeginInvoke(!0,!1,!2,!3,!4,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Func`7.BeginInvoke(!0,!1,!2,!3,!4,!5,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Func`8.BeginInvoke(!0,!1,!2,!3,!4,!5,!6,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Func`9.BeginInvoke(!0,!1,!2,!3,!4,!5,!6,!7,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Func`10.BeginInvoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Func`11.BeginInvoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Func`12.BeginInvoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Func`13.BeginInvoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Func`14.BeginInvoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Func`15.BeginInvoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Func`16.BeginInvoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Func`17.BeginInvoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,!15,System.AsyncCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Threading.Overlapped.AsyncResult | [NullableAttribute(...)] | 0 | 1 | -| System.IAsyncResult System.Threading.Overlapped.get_AsyncResult() | [NullableContextAttribute(...)] | 0 | 1 | -| System.ICloneable | [NullableContextAttribute(...)] | 0 | 1 | -| System.IComparable | [NullableContextAttribute(...)] | 0 | 2 | -| System.IComparable`1 | [NullableContextAttribute(...)] | 0 | 2 | -| System.IConvertible | [CLSCompliantAttribute(...)] | 0 | False | -| System.IConvertible | [NullableContextAttribute(...)] | 0 | 2 | -| System.ICustomFormatter | [NullableContextAttribute(...)] | 0 | 2 | -| System.IEquatable`1 | [NullableContextAttribute(...)] | 0 | 2 | -| System.IFormatProvider | [NullableAttribute(...)] | 0 | 2 | -| System.IFormatProvider | [NullableContextAttribute(...)] | 0 | 2 | -| System.IFormattable | [NullableContextAttribute(...)] | 0 | 2 | -| System.IO.BinaryReader | [NullableAttribute(...)] | 0 | 0 | -| System.IO.BinaryReader | [NullableContextAttribute(...)] | 0 | 1 | -| System.IO.BinaryWriter | [NullableAttribute(...)] | 0 | 0 | -| System.IO.BinaryWriter | [NullableContextAttribute(...)] | 0 | 1 | -| System.IO.BufferedStream | [NullableAttribute(...)] | 0 | 0 | -| System.IO.BufferedStream | [NullableContextAttribute(...)] | 0 | 1 | -| System.IO.Directory | [NullableAttribute(...)] | 0 | 0 | -| System.IO.Directory | [NullableContextAttribute(...)] | 0 | 1 | -| System.IO.DirectoryInfo | [NullableAttribute(...)] | 0 | 0 | -| System.IO.DirectoryInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.IO.DirectoryInfo System.IO.Directory.CreateDirectory(System.String,System.IO.UnixFileMode) | [UnsupportedOSPlatformAttribute(...)] | 0 | windows | -| System.IO.DirectoryInfo System.IO.DirectoryInfo.Parent | [NullableAttribute(...)] | 0 | 2 | -| System.IO.DirectoryInfo System.IO.DirectoryInfo.get_Parent() | [NullableContextAttribute(...)] | 0 | 2 | -| System.IO.DirectoryInfo System.IO.FileInfo.Directory | [NullableAttribute(...)] | 0 | 2 | -| System.IO.DirectoryInfo System.IO.FileInfo.get_Directory() | [NullableContextAttribute(...)] | 0 | 2 | -| System.IO.DirectoryNotFoundException | [NullableAttribute(...)] | 0 | 0 | -| System.IO.DirectoryNotFoundException | [NullableContextAttribute(...)] | 0 | 2 | -| System.IO.DirectoryNotFoundException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.IO.EndOfStreamException | [NullableAttribute(...)] | 0 | 0 | -| System.IO.EndOfStreamException | [NullableContextAttribute(...)] | 0 | 2 | -| System.IO.EndOfStreamException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.IO.Enumeration.FileSystemEntry | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.IO.Enumeration.FileSystemEntry | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.IO.Enumeration.FileSystemEntry | [ObsoleteAttribute(...)] | 1 | True | -| System.IO.Enumeration.FileSystemEntry.FileNameBuffer._buffer | [FixedBufferAttribute(...)] | 0 | System.Char | -| System.IO.Enumeration.FileSystemEntry.FileNameBuffer._buffer | [FixedBufferAttribute(...)] | 1 | 256 | -| System.IO.Enumeration.FileSystemEnumerable<!0>.FindPredicate | [NullableAttribute(...)] | 0 | [2,0] | -| System.IO.Enumeration.FileSystemEnumerable<!0>.FindPredicate System.IO.Enumeration.FileSystemEnumerable`1.ShouldIncludePredicate | [NullableAttribute(...)] | 0 | [2,0] | -| System.IO.Enumeration.FileSystemEnumerable<!0>.FindPredicate System.IO.Enumeration.FileSystemEnumerable`1.ShouldRecursePredicate | [NullableAttribute(...)] | 0 | [2,0] | -| System.IO.Enumeration.FileSystemEnumerable<!0>.FindTransform | [NullableAttribute(...)] | 0 | [1,0] | -| System.IO.Enumeration.FileSystemEnumerator`1._pending | [TupleElementNamesAttribute(...)] | 0 | [Path,RemainingDepth] | -| System.IO.EnumerationOptions | [NullableAttribute(...)] | 0 | 0 | -| System.IO.EnumerationOptions | [NullableAttribute(...)] | 0 | 2 | -| System.IO.EnumerationOptions | [NullableContextAttribute(...)] | 0 | 1 | -| System.IO.File | [NullableAttribute(...)] | 0 | 0 | -| System.IO.File | [NullableContextAttribute(...)] | 0 | 1 | -| System.IO.FileInfo | [NullableAttribute(...)] | 0 | 0 | -| System.IO.FileInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.IO.FileLoadException | [NullableAttribute(...)] | 0 | 0 | -| System.IO.FileLoadException | [NullableContextAttribute(...)] | 0 | 2 | -| System.IO.FileLoadException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.IO.FileNotFoundException | [NullableAttribute(...)] | 0 | 0 | -| System.IO.FileNotFoundException | [NullableContextAttribute(...)] | 0 | 2 | -| System.IO.FileNotFoundException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.IO.FileStream | [NullableAttribute(...)] | 0 | 0 | -| System.IO.FileStream | [NullableContextAttribute(...)] | 0 | 1 | -| System.IO.FileStream System.Reflection.Assembly.GetFile(System.String) | [RequiresAssemblyFilesAttribute(...)] | 0 | This member throws an exception for assemblies embedded in a single-file app | -| System.IO.FileStream System.Reflection.Emit.AssemblyBuilder.GetFile(System.String) | [RequiresAssemblyFilesAttribute(...)] | 0 | This member throws an exception for assemblies embedded in a single-file app | -| System.IO.FileStream System.Reflection.RuntimeAssembly.GetFile(System.String) | [RequiresAssemblyFilesAttribute(...)] | 0 | This member throws an exception for assemblies embedded in a single-file app | -| System.IO.FileStream[] System.Reflection.Assembly.GetFiles() | [RequiresAssemblyFilesAttribute(...)] | 0 | This member throws an exception for assemblies embedded in a single-file app | -| System.IO.FileStream[] System.Reflection.Assembly.GetFiles(System.Boolean) | [RequiresAssemblyFilesAttribute(...)] | 0 | This member throws an exception for assemblies embedded in a single-file app | -| System.IO.FileStream[] System.Reflection.Emit.AssemblyBuilder.GetFiles(System.Boolean) | [RequiresAssemblyFilesAttribute(...)] | 0 | This member throws an exception for assemblies embedded in a single-file app | -| System.IO.FileStream[] System.Reflection.RuntimeAssembly.GetFiles(System.Boolean) | [RequiresAssemblyFilesAttribute(...)] | 0 | This member throws an exception for assemblies embedded in a single-file app | -| System.IO.FileSystemInfo | [NullableAttribute(...)] | 0 | 0 | -| System.IO.FileSystemInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.IO.FileSystemInfo System.IO.Enumeration.FileSystemEntry.ToFileSystemInfo() | [NullableContextAttribute(...)] | 0 | 1 | -| System.IO.FileSystemInfo System.IO.FileSystemInfo.ResolveLinkTarget(System.Boolean) | [NullableContextAttribute(...)] | 0 | 2 | -| System.IO.IOException | [NullableAttribute(...)] | 0 | 0 | -| System.IO.IOException | [NullableContextAttribute(...)] | 0 | 2 | -| System.IO.IOException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.IO.InvalidDataException | [NullableAttribute(...)] | 0 | 0 | -| System.IO.InvalidDataException | [NullableContextAttribute(...)] | 0 | 2 | -| System.IO.InvalidDataException | [TypeForwardedFromAttribute(...)] | 0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.IO.MemoryStream | [NullableAttribute(...)] | 0 | 0 | -| System.IO.MemoryStream | [NullableContextAttribute(...)] | 0 | 1 | -| System.IO.Path.InvalidPathChars | [NullableAttribute(...)] | 0 | 1 | -| System.IO.Path.InvalidPathChars | [ObsoleteAttribute(...)] | 0 | Path.InvalidPathChars has been deprecated. Use GetInvalidPathChars or GetInvalidFileNameChars instead. | -| System.IO.PathTooLongException | [NullableAttribute(...)] | 0 | 0 | -| System.IO.PathTooLongException | [NullableContextAttribute(...)] | 0 | 2 | -| System.IO.PathTooLongException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.IO.Stream | [NullableAttribute(...)] | 0 | 0 | -| System.IO.Stream | [NullableAttribute(...)] | 0 | 2 | -| System.IO.Stream | [NullableContextAttribute(...)] | 0 | 1 | -| System.IO.Stream System.Console.OpenStandardInput() | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.IO.Stream System.Console.OpenStandardInput() | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.IO.Stream System.Console.OpenStandardInput() | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.IO.Stream System.Console.OpenStandardInput() | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.IO.Stream System.Console.OpenStandardInput(System.Int32) | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.IO.Stream System.Console.OpenStandardInput(System.Int32) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.IO.StreamReader | [NullableAttribute(...)] | 0 | 0 | -| System.IO.StreamReader | [NullableContextAttribute(...)] | 0 | 1 | -| System.IO.StreamWriter | [NullableAttribute(...)] | 0 | 0 | -| System.IO.StreamWriter | [NullableContextAttribute(...)] | 0 | 1 | -| System.IO.StringReader | [NullableAttribute(...)] | 0 | 0 | -| System.IO.StringReader | [NullableContextAttribute(...)] | 0 | 1 | -| System.IO.StringWriter | [NullableAttribute(...)] | 0 | 0 | -| System.IO.StringWriter | [NullableContextAttribute(...)] | 0 | 1 | -| System.IO.TextReader | [NullableAttribute(...)] | 0 | 0 | -| System.IO.TextReader | [NullableContextAttribute(...)] | 0 | 1 | -| System.IO.TextReader System.Console.In | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.IO.TextReader System.Console.In | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.IO.TextReader System.Console.In | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.IO.TextReader System.Console.In | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.IO.TextWriter | [NullableAttribute(...)] | 0 | 0 | -| System.IO.TextWriter | [NullableContextAttribute(...)] | 0 | 1 | -| System.IO.UnixFileMode System.IO.File.GetUnixFileMode(Microsoft.Win32.SafeHandles.SafeFileHandle) | [UnsupportedOSPlatformAttribute(...)] | 0 | windows | -| System.IO.UnixFileMode System.IO.File.GetUnixFileMode(System.String) | [UnsupportedOSPlatformAttribute(...)] | 0 | windows | -| System.IO.UnmanagedMemoryStream System.Resources.ResourceManager.GetStream(System.String,System.Globalization.CultureInfo) | [NullableContextAttribute(...)] | 0 | 2 | -| System.IObservable`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.IObserver`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.IProgress`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.IndexOutOfRangeException | [NullableAttribute(...)] | 0 | 0 | -| System.IndexOutOfRangeException | [NullableContextAttribute(...)] | 0 | 2 | -| System.IndexOutOfRangeException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.InsufficientExecutionStackException | [NullableAttribute(...)] | 0 | 0 | -| System.InsufficientExecutionStackException | [NullableContextAttribute(...)] | 0 | 2 | -| System.InsufficientExecutionStackException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.InsufficientMemoryException | [NullableAttribute(...)] | 0 | 0 | -| System.InsufficientMemoryException | [NullableContextAttribute(...)] | 0 | 2 | -| System.InsufficientMemoryException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Int16 System.BitConverter.ToInt16(System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int16 System.Convert.ToInt16(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int16 System.Convert.ToInt16(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int16 System.Convert.ToInt16(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int16 System.Convert.ToInt16(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int16 System.Int16.CreateChecked`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int16 System.Int16.CreateSaturating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int16 System.Int16.CreateTruncating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int16 System.Int16.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int16 System.Int16.Parse(System.String,System.Globalization.NumberStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int16 System.Int16.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int16 System.Int16.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int16 System.Runtime.InteropServices.Marshal.ReadInt16(System.Object,System.Int32) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Int16 System.Runtime.InteropServices.Marshal.ReadInt16(System.Object,System.Int32) | [ObsoleteAttribute(...)] | 0 | ReadInt16(Object, Int32) may be unavailable in future releases. | -| System.Int16 System.Runtime.InteropServices.Marshal.ReadInt16(System.Object,System.Int32) | [RequiresDynamicCodeAttribute(...)] | 0 | Marshalling code for the object might not be available | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.GetFunctionPointer(System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr) | [RequiresDynamicCodeAttribute(...)] | 0 | The native code for the method requested might not be available at runtime. | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssembly(System.IntPtr,System.IntPtr,System.IntPtr) | [RequiresDynamicCodeAttribute(...)] | 0 | The native code for the method requested might not be available at runtime. | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssembly(System.IntPtr,System.IntPtr,System.IntPtr) | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssembly(System.IntPtr,System.IntPtr,System.IntPtr) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssembly(System.IntPtr,System.IntPtr,System.IntPtr) | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssembly(System.IntPtr,System.IntPtr,System.IntPtr) | [UnsupportedOSPlatformAttribute(...)] | 0 | maccatalyst | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssembly(System.IntPtr,System.IntPtr,System.IntPtr) | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyAndGetFunctionPointer(System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr) | [RequiresDynamicCodeAttribute(...)] | 0 | The native code for the method requested might not be available at runtime. | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyAndGetFunctionPointer(System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Native hosting is not trim compatible and this warning will be seen if trimming is enabled. | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyAndGetFunctionPointer(System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr) | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyAndGetFunctionPointer(System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyAndGetFunctionPointer(System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr) | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyAndGetFunctionPointer(System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr) | [UnsupportedOSPlatformAttribute(...)] | 0 | maccatalyst | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyAndGetFunctionPointer(System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr) | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyBytes(System.Byte*,System.IntPtr,System.Byte*,System.IntPtr,System.IntPtr,System.IntPtr) | [RequiresDynamicCodeAttribute(...)] | 0 | The native code for the method requested might not be available at runtime. | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyBytes(System.Byte*,System.IntPtr,System.Byte*,System.IntPtr,System.IntPtr,System.IntPtr) | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyBytes(System.Byte*,System.IntPtr,System.Byte*,System.IntPtr,System.IntPtr,System.IntPtr) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyBytes(System.Byte*,System.IntPtr,System.Byte*,System.IntPtr,System.IntPtr,System.IntPtr) | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyBytes(System.Byte*,System.IntPtr,System.Byte*,System.IntPtr,System.IntPtr,System.IntPtr) | [UnsupportedOSPlatformAttribute(...)] | 0 | maccatalyst | -| System.Int32 Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyBytes(System.Byte*,System.IntPtr,System.Byte*,System.IntPtr,System.IntPtr,System.IntPtr) | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.Int32 Interop.Globalization.GetCalendars(System.String,System.Globalization.CalendarId[],System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 Interop.Globalization.GetCalendars(System.String,System.Globalization.CalendarId[],System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 Interop.Globalization.GetICUVersion() | [LibraryImportAttribute(...)] | 0 | libSystem.Globalization.Native | -| System.Int32 Interop.Globalization.GetLatestJapaneseEra() | [LibraryImportAttribute(...)] | 0 | libSystem.Globalization.Native | -| System.Int32 Interop.Globalization.GetLocales(System.Char[],System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 Interop.Globalization.GetLocales(System.Char[],System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 Interop.Globalization.GetSortVersion(System.IntPtr) | [LibraryImportAttribute(...)] | 0 | libSystem.Globalization.Native | -| System.Int32 Interop.Globalization.IanaIdToWindowsId(System.String,System.Char*,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 Interop.Globalization.IanaIdToWindowsId(System.String,System.Char*,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 Interop.Globalization.LoadICU() | [LibraryImportAttribute(...)] | 0 | libSystem.Globalization.Native | -| System.Int32 Interop.Globalization.WindowsIdToIanaId(System.String,System.IntPtr,System.Char*,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 Interop.Globalization.WindowsIdToIanaId(System.String,System.IntPtr,System.Char*,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 Interop.HostPolicy.corehost_resolve_component_dependencies(System.String,Interop.HostPolicy.corehost_resolve_component_dependencies_result_fn) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 Interop.HostPolicy.corehost_resolve_component_dependencies(System.String,Interop.HostPolicy.corehost_resolve_component_dependencies_result_fn) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 Interop.Kernel32.FormatMessage(System.Int32,System.IntPtr,System.UInt32,System.Int32,System.Void*,System.Int32,System.IntPtr) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 Interop.Kernel32.FormatMessage(System.Int32,System.IntPtr,System.UInt32,System.Int32,System.Void*,System.Int32,System.IntPtr) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 Interop.Kernel32.FormatMessage(System.Int32,System.IntPtr,System.UInt32,System.Int32,System.Void*,System.Int32,System.IntPtr) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Int32 System.AppDomain.ExecuteAssembly(System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Int32 System.AppDomain.ExecuteAssembly(System.String,System.String[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Int32 System.AppDomain.ExecuteAssembly(System.String,System.String[],System.Byte[],System.Configuration.Assemblies.AssemblyHashAlgorithm) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.AppDomain.ExecuteAssembly(System.String,System.String[],System.Byte[],System.Configuration.Assemblies.AssemblyHashAlgorithm) | [ObsoleteAttribute(...)] | 0 | Code Access Security is not supported or honored by the runtime. | -| System.Int32 System.AppDomain.ExecuteAssembly(System.String,System.String[],System.Byte[],System.Configuration.Assemblies.AssemblyHashAlgorithm) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Int32 System.AppDomain.GetCurrentThreadId() | [ObsoleteAttribute(...)] | 0 | AppDomain.GetCurrentThreadId has been deprecated because it does not provide a stable Id when managed threads are running on fibers (aka lightweight threads). To get a stable identifier for a managed thread, use the ManagedThreadId property on Thread instead. | -| System.Int32 System.Array.BinarySearch(System.Array,System.Int32,System.Int32,System.Object,System.Collections.IComparer) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Array.BinarySearch(System.Array,System.Object,System.Collections.IComparer) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Attribute.GetHashCode() | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Int32 System.Attribute.GetHashCode() | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2075:UnrecognizedReflectionPattern | -| System.Int32 System.BitConverter.ToInt32(System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Boolean.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Buffers.IndexOfAnyAsciiSearcher.ComputeFirstIndexOverlapped`2(!0,!0,!0,System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx2 | -| System.Int32 System.Buffers.IndexOfAnyAsciiSearcher.ComputeFirstIndex`2(!0,!0,System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx2 | -| System.Int32 System.Buffers.IndexOfAnyAsciiSearcher.ComputeLastIndexOverlapped`2(!0,!0,System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx2 | -| System.Int32 System.Buffers.IndexOfAnyAsciiSearcher.ComputeLastIndex`2(!0,!0,System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx2 | -| System.Int32 System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorizedAnyByte`1(System.Byte,System.Int32,System.Runtime.Intrinsics.Vector512<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd | -| System.Int32 System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorizedAnyByte`1(System.Byte,System.Int32,System.Runtime.Intrinsics.Vector512<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Wasm.PackedSimd | -| System.Int32 System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorizedAnyByte`1(System.Byte,System.Int32,System.Runtime.Intrinsics.Vector512<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Ssse3 | -| System.Int32 System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorized`1(System.Byte,System.Int32,System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd | -| System.Int32 System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorized`1(System.Byte,System.Int32,System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Wasm.PackedSimd | -| System.Int32 System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorized`1(System.Byte,System.Int32,System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Ssse3 | -| System.Int32 System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorized`2(System.Int16,System.Int32,System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd | -| System.Int32 System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorized`2(System.Int16,System.Int32,System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Wasm.PackedSimd | -| System.Int32 System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorized`2(System.Int16,System.Int32,System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Ssse3 | -| System.Int32 System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorizedAnyByte`1(System.Byte,System.Int32,System.Runtime.Intrinsics.Vector512<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd | -| System.Int32 System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorizedAnyByte`1(System.Byte,System.Int32,System.Runtime.Intrinsics.Vector512<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Wasm.PackedSimd | -| System.Int32 System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorizedAnyByte`1(System.Byte,System.Int32,System.Runtime.Intrinsics.Vector512<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Ssse3 | -| System.Int32 System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorized`1(System.Byte,System.Int32,System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd | -| System.Int32 System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorized`1(System.Byte,System.Int32,System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Wasm.PackedSimd | -| System.Int32 System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorized`1(System.Byte,System.Int32,System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Ssse3 | -| System.Int32 System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorized`2(System.Int16,System.Int32,System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd | -| System.Int32 System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorized`2(System.Int16,System.Int32,System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Wasm.PackedSimd | -| System.Int32 System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorized`2(System.Int16,System.Int32,System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Ssse3 | -| System.Int32 System.Buffers.ProbabilisticMap.IndexOfAnyVectorized(System.UInt32,System.Char,System.Int32,System.ReadOnlySpan<System.Char>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd.Arm64 | -| System.Int32 System.Buffers.ProbabilisticMap.IndexOfAnyVectorized(System.UInt32,System.Char,System.Int32,System.ReadOnlySpan<System.Char>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse41 | -| System.Int32 System.Byte.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Char.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Char.ConvertToUtf32(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Collections.ArrayList.Add(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Collections.ArrayList.BinarySearch(System.Int32,System.Int32,System.Object,System.Collections.IComparer) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Collections.ArrayList.BinarySearch(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Collections.ArrayList.BinarySearch(System.Object,System.Collections.IComparer) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Collections.ArrayList.IndexOf(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Collections.ArrayList.IndexOf(System.Object,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Collections.ArrayList.IndexOf(System.Object,System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Collections.ArrayList.LastIndexOf(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Collections.ArrayList.LastIndexOf(System.Object,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Collections.ArrayList.LastIndexOf(System.Object,System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Collections.Comparer.Compare(System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Collections.Generic.Comparer`1.Compare(!0,!0) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Collections.Generic.GenericEqualityComparer`1.GetHashCode(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Collections.Generic.IEqualityComparer`1.GetHashCode(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Collections.Generic.NonRandomizedStringEqualityComparer.GetHashCode(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Collections.Generic.ObjectEqualityComparer`1.GetHashCode(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Collections.Generic.ReferenceEqualityComparer.GetHashCode(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Comparison`1.Invoke(!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Console.Read() | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.Int32 System.Console.Read() | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Int32 System.Console.get_BufferHeight() | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.Int32 System.Console.get_BufferHeight() | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Int32 System.Console.get_BufferHeight() | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Int32 System.Console.get_BufferHeight() | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.Int32 System.Console.get_BufferWidth() | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.Int32 System.Console.get_BufferWidth() | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Int32 System.Console.get_BufferWidth() | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Int32 System.Console.get_BufferWidth() | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.Int32 System.Console.get_CursorSize() | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.Int32 System.Console.get_CursorSize() | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Int32 System.Console.get_CursorSize() | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Int32 System.Console.get_CursorSize() | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.Int32 System.Convert.ToBase64CharArray(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Convert.ToBase64CharArray(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Base64FormattingOptions) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Convert.ToInt32(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Convert.ToInt32(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Convert.ToInt32(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Convert.ToInt32(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.CultureAwareComparer.GetHashCode(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.DateOnly.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.DateTime.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Decimal.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Diagnostics.Tracing.EventPipeInternal.EventActivityIdControl(System.UInt32,System.Guid) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 System.Diagnostics.Tracing.EventPipeInternal.EventActivityIdControl(System.UInt32,System.Guid) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 System.Diagnostics.Tracing.EventPipeInternal.EventActivityIdControl(System.UInt32,System.Guid) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Int32 System.Diagnostics.Tracing.EventSource.GetHelperCallFirstArg(System.Reflection.MethodInfo) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Int32 System.Diagnostics.Tracing.EventSource.GetHelperCallFirstArg(System.Reflection.MethodInfo) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Int32 System.Double.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Enum.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Environment.GetProcessorCount() | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Int32 System.GC._EndNoGCRegion() | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Int32 System.GC._RefreshMemoryLimit(System.GC.GCHeapHardLimitInfo) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Int32 System.GC._StartNoGCRegion(System.Int64,System.Boolean,System.Int64,System.Boolean) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 System.GC._StartNoGCRegion(System.Int64,System.Boolean,System.Int64,System.Boolean) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 System.GC._StartNoGCRegion(System.Int64,System.Boolean,System.Int64,System.Boolean) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Int32 System.Globalization.CharUnicodeInfo.GetDecimalDigitValue(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Globalization.CharUnicodeInfo.GetDigitValue(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Globalization.CompareInfo.Compare(System.ReadOnlySpan<System.Char>,System.ReadOnlySpan<System.Char>,System.Globalization.CompareOptions) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Globalization.CompareInfo.Compare(System.String,System.Int32,System.Int32,System.String,System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Globalization.CompareInfo.Compare(System.String,System.Int32,System.Int32,System.String,System.Int32,System.Int32,System.Globalization.CompareOptions) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Globalization.CompareInfo.Compare(System.String,System.Int32,System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Globalization.CompareInfo.Compare(System.String,System.Int32,System.String,System.Int32,System.Globalization.CompareOptions) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Globalization.CompareInfo.Compare(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Globalization.CompareInfo.Compare(System.String,System.String,System.Globalization.CompareOptions) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Globalization.CompareInfo.GetHashCode(System.ReadOnlySpan<System.Char>,System.Globalization.CompareOptions) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Globalization.CompareInfo.GetSortKey(System.ReadOnlySpan<System.Char>,System.Span<System.Byte>,System.Globalization.CompareOptions) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Globalization.CompareInfo.GetSortKeyLength(System.ReadOnlySpan<System.Char>,System.Globalization.CompareOptions) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Globalization.CompareInfo.IndexOf(System.ReadOnlySpan<System.Char>,System.ReadOnlySpan<System.Char>,System.Globalization.CompareOptions) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Globalization.CompareInfo.IndexOf(System.ReadOnlySpan<System.Char>,System.ReadOnlySpan<System.Char>,System.Globalization.CompareOptions,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Globalization.CompareInfo.IndexOf(System.ReadOnlySpan<System.Char>,System.Text.Rune,System.Globalization.CompareOptions) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Globalization.CompareInfo.LastIndexOf(System.ReadOnlySpan<System.Char>,System.ReadOnlySpan<System.Char>,System.Globalization.CompareOptions) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Globalization.CompareInfo.LastIndexOf(System.ReadOnlySpan<System.Char>,System.ReadOnlySpan<System.Char>,System.Globalization.CompareOptions,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Globalization.CompareInfo.LastIndexOf(System.ReadOnlySpan<System.Char>,System.Text.Rune,System.Globalization.CompareOptions) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Globalization.StringInfo.GetNextTextElementLength(System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Guid.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Half.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.HashCode.GetHashCode() | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Int32 System.HashCode.GetHashCode() | [ObsoleteAttribute(...)] | 0 | HashCode is a mutable struct and should not be compared with other HashCodes. Use ToHashCode to retrieve the computed hash code. | -| System.Int32 System.HashCode.GetHashCode() | [ObsoleteAttribute(...)] | 1 | True | -| System.Int32 System.IO.BinaryReader.Read(System.Span<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.IO.BinaryReader.Read(System.Span<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.IO.BufferedStream.Read(System.Span<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.IO.FileStream.Read(System.Span<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.IO.MemoryStream.Read(System.Span<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.IO.Stream.Read(System.Span<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.IO.Stream.ReadAtLeast(System.Span<System.Byte>,System.Int32,System.Boolean) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.IO.StreamReader.Read(System.Span<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.IO.StreamReader.ReadBlock(System.Span<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.IO.StringReader.Read(System.Span<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.IO.StringReader.ReadBlock(System.Span<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.IO.TextReader.Read(System.Span<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.IO.TextReader.ReadBlock(System.Span<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.IO.UnmanagedMemoryStream.Read(System.Byte[],System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Int16.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Int32.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Int32.CreateChecked`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Int32.CreateSaturating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Int32.CreateTruncating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Int32.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Int32.Parse(System.String,System.Globalization.NumberStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Int32.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Int32.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Int64.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Int128.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.IntPtr.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Math.Sign(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.MemoryExtensions.BinarySearch`1(System.ReadOnlySpan<!0>,System.IComparable<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.BinarySearch`1(System.Span<!0>,System.IComparable<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.BinarySearch`2(System.ReadOnlySpan<!0>,!0,!1) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.BinarySearch`2(System.ReadOnlySpan<!0>,!1) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.BinarySearch`2(System.Span<!0>,!0,!1) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.BinarySearch`2(System.Span<!0>,!1) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.CommonPrefixLength`1(System.ReadOnlySpan<!0>,System.ReadOnlySpan<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.MemoryExtensions.CommonPrefixLength`1(System.ReadOnlySpan<!0>,System.ReadOnlySpan<!0>,System.Collections.Generic.IEqualityComparer<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.MemoryExtensions.CommonPrefixLength`1(System.Span<!0>,System.ReadOnlySpan<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.MemoryExtensions.CommonPrefixLength`1(System.Span<!0>,System.ReadOnlySpan<!0>,System.Collections.Generic.IEqualityComparer<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.MemoryExtensions.IndexOfAnyExceptInRange`1(System.ReadOnlySpan<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.IndexOfAnyExceptInRange`1(System.Span<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.IndexOfAnyExcept`1(System.ReadOnlySpan<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.IndexOfAnyExcept`1(System.ReadOnlySpan<!0>,!0,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.IndexOfAnyExcept`1(System.Span<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.IndexOfAnyExcept`1(System.Span<!0>,!0,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.IndexOfAnyInRange`1(System.ReadOnlySpan<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.IndexOfAnyInRange`1(System.Span<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.IndexOfAny`1(System.ReadOnlySpan<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.IndexOfAny`1(System.ReadOnlySpan<!0>,!0,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.IndexOfAny`1(System.Span<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.IndexOfAny`1(System.Span<!0>,!0,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyExceptInRange`1(System.ReadOnlySpan<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyExceptInRange`1(System.Span<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyExcept`1(System.ReadOnlySpan<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyExcept`1(System.ReadOnlySpan<!0>,!0,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyExcept`1(System.Span<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyExcept`1(System.Span<!0>,!0,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyInRange`1(System.ReadOnlySpan<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.LastIndexOfAnyInRange`1(System.Span<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.LastIndexOfAny`1(System.ReadOnlySpan<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.LastIndexOfAny`1(System.ReadOnlySpan<!0>,!0,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.LastIndexOfAny`1(System.Span<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.MemoryExtensions.LastIndexOfAny`1(System.Span<!0>,!0,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Memory`1.GetHashCode() | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Int32 System.Numerics.BitOperations.LeadingZeroCount(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Numerics.BitOperations.LeadingZeroCount(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Numerics.BitOperations.LeadingZeroCount(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Numerics.BitOperations.Log2(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Numerics.BitOperations.Log2(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Numerics.BitOperations.Log2(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Numerics.BitOperations.PopCount(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Numerics.BitOperations.PopCount(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Numerics.BitOperations.PopCount(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Numerics.BitOperations.TrailingZeroCount(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Numerics.BitOperations.TrailingZeroCount(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Numerics.BitOperations.TrailingZeroCount(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Numerics.IBinaryInteger`1.WriteBigEndian(System.Span<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Numerics.IBinaryInteger`1.WriteLittleEndian(System.Span<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Numerics.IFloatingPoint`1.WriteExponentBigEndian(System.Span<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Numerics.IFloatingPoint`1.WriteExponentLittleEndian(System.Span<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Numerics.IFloatingPoint`1.WriteSignificandBigEndian(System.Span<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Numerics.IFloatingPoint`1.WriteSignificandLittleEndian(System.Span<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Numerics.TotalOrderIeee754Comparer`1.GetHashCode(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.OrdinalComparer.GetHashCode(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.PackedSpanHelpers.ComputeFirstIndex(System.Int16,System.Int16,System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx2 | -| System.Int32 System.PackedSpanHelpers.ComputeFirstIndex(System.Int16,System.Int16,System.Runtime.Intrinsics.Vector512<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx512F | -| System.Int32 System.PackedSpanHelpers.ComputeFirstIndexOverlapped(System.Int16,System.Int16,System.Int16,System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx2 | -| System.Int32 System.PackedSpanHelpers.ComputeFirstIndexOverlapped(System.Int16,System.Int16,System.Int16,System.Runtime.Intrinsics.Vector512<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx512F | -| System.Int32 System.PackedSpanHelpers.IndexOf(System.Char,System.Char,System.Int32) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Int32 System.PackedSpanHelpers.IndexOfAny(System.Char,System.Char,System.Char,System.Char,System.Int32) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Int32 System.PackedSpanHelpers.IndexOfAny(System.Char,System.Char,System.Char,System.Int32) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Int32 System.PackedSpanHelpers.IndexOfAnyExcept(System.Char,System.Char,System.Char,System.Char,System.Int32) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Int32 System.PackedSpanHelpers.IndexOfAnyExcept(System.Char,System.Char,System.Char,System.Int32) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Int32 System.PackedSpanHelpers.IndexOfAnyExcept(System.Char,System.Char,System.Int32) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Int32 System.PackedSpanHelpers.IndexOfAnyExceptInRange(System.Char,System.Char,System.Char,System.Int32) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Int32 System.PackedSpanHelpers.IndexOfAnyInRange(System.Char,System.Char,System.Char,System.Int32) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Int32 System.PackedSpanHelpers.IndexOfAnyInRange`1(System.Int16,System.Int16,System.Int16,System.Int32) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Int32 System.PackedSpanHelpers.IndexOfAny`1(System.Int16,System.Int16,System.Int16,System.Int16,System.Int32) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Int32 System.PackedSpanHelpers.IndexOfAny`1(System.Int16,System.Int16,System.Int16,System.Int32) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Int32 System.PackedSpanHelpers.IndexOf`1(System.Int16,System.Int16,System.Int32) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Int32 System.ReadOnlyMemory`1.GetHashCode() | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Int32 System.ReadOnlySpan`1.GetHashCode() | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Int32 System.ReadOnlySpan`1.GetHashCode() | [ObsoleteAttribute(...)] | 0 | GetHashCode() on ReadOnlySpan will always throw an exception. | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.GetArrayMethodToken(System.Runtime.CompilerServices.QCallModule,System.Int32,System.String,System.Byte[],System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.GetArrayMethodToken(System.Runtime.CompilerServices.QCallModule,System.Int32,System.String,System.Byte[],System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.GetMemberRef(System.Runtime.CompilerServices.QCallModule,System.Runtime.CompilerServices.QCallModule,System.Int32,System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.GetMemberRefFromSignature(System.Runtime.CompilerServices.QCallModule,System.Int32,System.String,System.Byte[],System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.GetMemberRefFromSignature(System.Runtime.CompilerServices.QCallModule,System.Int32,System.String,System.Byte[],System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.GetMemberRefOfFieldInfo(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Runtime.CompilerServices.QCallTypeHandle,System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.GetMemberRefOfMethodInfo(System.Runtime.CompilerServices.QCallModule,System.Int32,System.RuntimeMethodHandleInternal) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.GetStringConstant(System.Runtime.CompilerServices.QCallModule,System.String,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.GetStringConstant(System.Runtime.CompilerServices.QCallModule,System.String,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.GetTokenFromTypeSpec(System.Runtime.CompilerServices.QCallModule,System.Byte[],System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.GetTokenFromTypeSpec(System.Runtime.CompilerServices.QCallModule,System.Byte[],System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.GetTokenFromTypeSpec(System.Runtime.CompilerServices.QCallModule,System.Byte[],System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.GetTypeRef(System.Runtime.CompilerServices.QCallModule,System.String,System.Runtime.CompilerServices.QCallModule,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 System.Reflection.Emit.RuntimeModuleBuilder.GetTypeRef(System.Runtime.CompilerServices.QCallModule,System.String,System.Runtime.CompilerServices.QCallModule,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.DefineEvent(System.Runtime.CompilerServices.QCallModule,System.Int32,System.String,System.Reflection.EventAttributes,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.DefineEvent(System.Runtime.CompilerServices.QCallModule,System.Int32,System.String,System.Reflection.EventAttributes,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.DefineField(System.Runtime.CompilerServices.QCallModule,System.Int32,System.String,System.Byte[],System.Int32,System.Reflection.FieldAttributes) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.DefineField(System.Runtime.CompilerServices.QCallModule,System.Int32,System.String,System.Byte[],System.Int32,System.Reflection.FieldAttributes) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.DefineGenericParam(System.Runtime.CompilerServices.QCallModule,System.String,System.Int32,System.Reflection.GenericParameterAttributes,System.Int32,System.Int32[]) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.DefineGenericParam(System.Runtime.CompilerServices.QCallModule,System.String,System.Int32,System.Reflection.GenericParameterAttributes,System.Int32,System.Int32[]) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.DefineMethod(System.Runtime.CompilerServices.QCallModule,System.Int32,System.String,System.Byte[],System.Int32,System.Reflection.MethodAttributes) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.DefineMethod(System.Runtime.CompilerServices.QCallModule,System.Int32,System.String,System.Byte[],System.Int32,System.Reflection.MethodAttributes) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.DefineMethodSpec(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Byte[],System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.DefineMethodSpec(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Byte[],System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.DefineMethodSpec(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Byte[],System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.DefineProperty(System.Runtime.CompilerServices.QCallModule,System.Int32,System.String,System.Reflection.PropertyAttributes,System.Byte[],System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.DefineProperty(System.Runtime.CompilerServices.QCallModule,System.Int32,System.String,System.Reflection.PropertyAttributes,System.Byte[],System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.DefineType(System.Runtime.CompilerServices.QCallModule,System.String,System.Int32,System.Reflection.TypeAttributes,System.Int32,System.Int32[]) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.DefineType(System.Runtime.CompilerServices.QCallModule,System.String,System.Int32,System.Reflection.TypeAttributes,System.Int32,System.Int32[]) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.GetTokenFromSig(System.Runtime.CompilerServices.QCallModule,System.Byte[],System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.GetTokenFromSig(System.Runtime.CompilerServices.QCallModule,System.Byte[],System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.GetTokenFromSig(System.Runtime.CompilerServices.QCallModule,System.Byte[],System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.SetParamInfo(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Int32,System.Reflection.ParameterAttributes,System.String) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 System.Reflection.Emit.RuntimeTypeBuilder.SetParamInfo(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Int32,System.Reflection.ParameterAttributes,System.String) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 System.Reflection.RuntimeAssembly.GetManifestResourceInfo(System.Runtime.CompilerServices.QCallAssembly,System.String,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.CompilerServices.StringHandleOnStack) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 System.Reflection.RuntimeAssembly.GetManifestResourceInfo(System.Runtime.CompilerServices.QCallAssembly,System.String,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.CompilerServices.StringHandleOnStack) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Runtime.CompilerServices.Unsafe.SizeOf`1() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Runtime.InteropServices.ComTypes.IMoniker.IsRunning(System.Runtime.InteropServices.ComTypes.IBindCtx,System.Runtime.InteropServices.ComTypes.IMoniker,System.Runtime.InteropServices.ComTypes.IMoniker) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Runtime.InteropServices.Marshal.FinalReleaseComObject(System.Object) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Int32 System.Runtime.InteropServices.Marshal.GetEndComSlot(System.Type) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Int32 System.Runtime.InteropServices.Marshal.GetExceptionCode() | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Int32 System.Runtime.InteropServices.Marshal.GetExceptionCode() | [ObsoleteAttribute(...)] | 0 | GetExceptionCode() may be unavailable in future releases. | -| System.Int32 System.Runtime.InteropServices.Marshal.GetHRForException(System.Exception) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Runtime.InteropServices.Marshal.GetStartComSlot(System.Type) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Int32 System.Runtime.InteropServices.Marshal.ReadInt32(System.Object,System.Int32) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Int32 System.Runtime.InteropServices.Marshal.ReadInt32(System.Object,System.Int32) | [ObsoleteAttribute(...)] | 0 | ReadInt32(Object, Int32) may be unavailable in future releases. | -| System.Int32 System.Runtime.InteropServices.Marshal.ReadInt32(System.Object,System.Int32) | [RequiresDynamicCodeAttribute(...)] | 0 | Marshalling code for the object might not be available | -| System.Int32 System.Runtime.InteropServices.Marshal.ReleaseComObject(System.Object) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Int32 System.Runtime.InteropServices.Marshal.SizeOf(System.Object) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Int32 System.Runtime.InteropServices.Marshal.SizeOf(System.Object) | [RequiresDynamicCodeAttribute(...)] | 0 | Marshalling code for the object might not be available. Use the SizeOf<T> overload instead. | -| System.Int32 System.Runtime.InteropServices.Marshal.SizeOf(System.Type) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Int32 System.Runtime.InteropServices.Marshal.SizeOf(System.Type) | [RequiresDynamicCodeAttribute(...)] | 0 | Marshalling code for the object might not be available. Use the SizeOf<T> overload instead. | -| System.Int32 System.Runtime.InteropServices.Marshal.SizeOf`1() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Runtime.InteropServices.NFloat.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.SByte.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Single.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Span`1.GetHashCode() | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Int32 System.Span`1.GetHashCode() | [ObsoleteAttribute(...)] | 0 | GetHashCode() on Span will always throw an exception. | -| System.Int32 System.String.Compare(System.String,System.Int32,System.String,System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.String.Compare(System.String,System.Int32,System.String,System.Int32,System.Int32,System.Boolean) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.String.Compare(System.String,System.Int32,System.String,System.Int32,System.Int32,System.Boolean,System.Globalization.CultureInfo) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.String.Compare(System.String,System.Int32,System.String,System.Int32,System.Int32,System.Globalization.CultureInfo,System.Globalization.CompareOptions) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.String.Compare(System.String,System.Int32,System.String,System.Int32,System.Int32,System.StringComparison) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.String.Compare(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.String.Compare(System.String,System.String,System.Boolean) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.String.Compare(System.String,System.String,System.Boolean,System.Globalization.CultureInfo) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.String.Compare(System.String,System.String,System.Globalization.CultureInfo,System.Globalization.CompareOptions) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.String.Compare(System.String,System.String,System.StringComparison) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.String.CompareOrdinal(System.String,System.Int32,System.String,System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.String.CompareOrdinal(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.String.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.String.CompareTo(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.String.GetHashCode(System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.String.GetHashCode(System.ReadOnlySpan<System.Char>,System.StringComparison) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.StringComparer.Compare(System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.StringComparer.Compare(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Text.ASCIIEncoding.GetByteCount(System.Char*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.ASCIIEncoding.GetByteCount(System.Char[],System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Text.ASCIIEncoding.GetByteCount(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Text.ASCIIEncoding.GetBytes(System.Char*,System.Int32,System.Byte*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.ASCIIEncoding.GetBytes(System.Char[],System.Int32,System.Int32,System.Byte[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Text.ASCIIEncoding.GetBytes(System.String,System.Int32,System.Int32,System.Byte[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Text.ASCIIEncoding.GetCharCount(System.Byte*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.ASCIIEncoding.GetCharCount(System.Byte[],System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Text.ASCIIEncoding.GetChars(System.Byte*,System.Int32,System.Char*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.ASCIIEncoding.GetChars(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Text.Decoder.GetCharCount(System.Byte*,System.Int32,System.Boolean) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.Decoder.GetCharCount(System.Byte[],System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Text.Decoder.GetCharCount(System.Byte[],System.Int32,System.Int32,System.Boolean) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Text.Decoder.GetChars(System.Byte*,System.Int32,System.Char*,System.Int32,System.Boolean) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.Decoder.GetChars(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Text.Decoder.GetChars(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Boolean) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Text.Encoder.GetByteCount(System.Char*,System.Int32,System.Boolean) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.Encoder.GetByteCount(System.Char[],System.Int32,System.Int32,System.Boolean) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Text.Encoder.GetBytes(System.Char*,System.Int32,System.Byte*,System.Int32,System.Boolean) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.Encoder.GetBytes(System.Char[],System.Int32,System.Int32,System.Byte[],System.Int32,System.Boolean) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Text.Encoding.GetByteCount(System.Char*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.Encoding.GetByteCount(System.Char*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Text.Encoding.GetByteCount(System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Text.Encoding.GetBytes(System.Char*,System.Int32,System.Byte*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.Encoding.GetBytes(System.Char*,System.Int32,System.Byte*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Text.Encoding.GetBytes(System.ReadOnlySpan<System.Char>,System.Span<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Text.Encoding.GetCharCount(System.Byte*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.Encoding.GetCharCount(System.Byte*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Text.Encoding.GetCharCount(System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Text.Encoding.GetChars(System.Byte*,System.Int32,System.Char*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.Encoding.GetChars(System.Byte*,System.Int32,System.Char*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Text.Encoding.GetChars(System.ReadOnlySpan<System.Byte>,System.Span<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Text.UTF7Encoding.GetByteCount(System.Char*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.UTF7Encoding.GetByteCount(System.Char*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Text.UTF7Encoding.GetBytes(System.Char*,System.Int32,System.Byte*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.UTF7Encoding.GetBytes(System.Char*,System.Int32,System.Byte*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Text.UTF7Encoding.GetCharCount(System.Byte*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.UTF7Encoding.GetCharCount(System.Byte*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Text.UTF7Encoding.GetChars(System.Byte*,System.Int32,System.Char*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.UTF7Encoding.GetChars(System.Byte*,System.Int32,System.Char*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Text.UTF8Encoding.GetByteCount(System.Char*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.UTF8Encoding.GetByteCount(System.Char[],System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Text.UTF8Encoding.GetByteCount(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Text.UTF8Encoding.GetBytes(System.Char*,System.Int32,System.Byte*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.UTF8Encoding.GetBytes(System.Char[],System.Int32,System.Int32,System.Byte[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Text.UTF8Encoding.GetBytes(System.String,System.Int32,System.Int32,System.Byte[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Text.UTF8Encoding.GetCharCount(System.Byte*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.UTF8Encoding.GetCharCount(System.Byte[],System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Text.UTF8Encoding.GetChars(System.Byte*,System.Int32,System.Char*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.UTF8Encoding.GetChars(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32 System.Text.UTF32Encoding.GetByteCount(System.Char*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.UTF32Encoding.GetByteCount(System.Char*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Text.UTF32Encoding.GetBytes(System.Char*,System.Int32,System.Byte*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.UTF32Encoding.GetBytes(System.Char*,System.Int32,System.Byte*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Text.UTF32Encoding.GetCharCount(System.Byte*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.UTF32Encoding.GetCharCount(System.Byte*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Text.UTF32Encoding.GetChars(System.Byte*,System.Int32,System.Char*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.UTF32Encoding.GetChars(System.Byte*,System.Int32,System.Char*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Text.UnicodeEncoding.GetByteCount(System.Char*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.UnicodeEncoding.GetByteCount(System.Char*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Text.UnicodeEncoding.GetBytes(System.Char*,System.Int32,System.Byte*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.UnicodeEncoding.GetBytes(System.Char*,System.Int32,System.Byte*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Text.UnicodeEncoding.GetCharCount(System.Byte*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.UnicodeEncoding.GetCharCount(System.Byte*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Text.UnicodeEncoding.GetChars(System.Byte*,System.Int32,System.Char*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Text.UnicodeEncoding.GetChars(System.Byte*,System.Int32,System.Char*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int32 System.Threading.LowLevelLifoSemaphore.WaitNative(Microsoft.Win32.SafeHandles.SafeWaitHandle,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Int32 System.Threading.LowLevelLifoSemaphore.WaitNative(Microsoft.Win32.SafeHandles.SafeWaitHandle,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Int32 System.Threading.LowLevelLifoSemaphore.WaitNative(Microsoft.Win32.SafeHandles.SafeWaitHandle,System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Int32 System.Threading.SynchronizationContext.Wait(System.IntPtr[],System.Boolean,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.Threading.SynchronizationContext.WaitHelper(System.IntPtr[],System.Boolean,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int32 System.TimeOnly.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.TimeSpan.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.UInt16.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.UInt32.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.UInt64.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.UInt128.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.UIntPtr.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Version.CompareTo(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32 System.Version.CompareTo(System.Version) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Int32[] System.Decimal.GetBits(System.Decimal) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32[] System.Globalization.GregorianCalendar.get_Eras() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32[] System.Globalization.HebrewCalendar.get_Eras() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32[] System.Globalization.HijriCalendar.get_Eras() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int32[] System.Globalization.PersianCalendar.get_Eras() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int64 System.BitConverter.ToInt64(System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Int64 System.Convert.ToInt64(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int64 System.Convert.ToInt64(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int64 System.Convert.ToInt64(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int64 System.Convert.ToInt64(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int64 System.GC.GetTotalMemory() | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Int64 System.GC._GetGenerationBudget(System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Int64 System.IO.RandomAccess.GetLength(Microsoft.Win32.SafeHandles.SafeFileHandle) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int64 System.IO.RandomAccess.Read(Microsoft.Win32.SafeHandles.SafeFileHandle,System.Collections.Generic.IReadOnlyList<System.Memory<System.Byte>>,System.Int64) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int64 System.Int64.CreateChecked`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int64 System.Int64.CreateSaturating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int64 System.Int64.CreateTruncating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int64 System.Int64.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int64 System.Int64.Parse(System.String,System.Globalization.NumberStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int64 System.Int64.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int64 System.Int64.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int64 System.Runtime.InteropServices.Marshal.ReadInt64(System.Object,System.Int32) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Int64 System.Runtime.InteropServices.Marshal.ReadInt64(System.Object,System.Int32) | [ObsoleteAttribute(...)] | 0 | ReadInt64(Object, Int32) may be unavailable in future releases. | -| System.Int64 System.Runtime.InteropServices.Marshal.ReadInt64(System.Object,System.Int32) | [RequiresDynamicCodeAttribute(...)] | 0 | Marshalling code for the object might not be available | -| System.Int64 System.Threading.Monitor.GetLockContentionCount() | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Int128 System.Int128.CreateChecked`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int128 System.Int128.CreateSaturating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int128 System.Int128.CreateTruncating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int128 System.Int128.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int128 System.Int128.Parse(System.String,System.Globalization.NumberStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int128 System.Int128.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int128 System.Int128.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Int128 System.Int128.op_Implicit(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int128 System.Int128.op_Implicit(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int128 System.Int128.op_Implicit(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int128 System.Int128.op_Implicit(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int128 System.Int128.op_Implicit(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int128 System.UInt128.op_CheckedExplicit(System.UInt128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Int128 System.UInt128.op_Explicit(System.UInt128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.IntPtr | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.IntPtr Internal.Runtime.InteropServices.ComponentActivator.InternalGetFunctionPointer(System.Runtime.Loader.AssemblyLoadContext,System.String,System.String,System.IntPtr) | [RequiresDynamicCodeAttribute(...)] | 0 | The native code for the method requested might not be available at runtime. | -| System.IntPtr Internal.Runtime.InteropServices.ComponentActivator.InternalGetFunctionPointer(System.Runtime.Loader.AssemblyLoadContext,System.String,System.String,System.IntPtr) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Native hosting is not trim compatible and this warning will be seen if trimming is enabled. | -| System.IntPtr Interop.HostPolicy.corehost_set_error_writer(System.IntPtr) | [LibraryImportAttribute(...)] | 0 | libhostpolicy | -| System.IntPtr System.ComAwareWeakReference.ObjectToComWeakRef(System.Runtime.CompilerServices.ObjectHandleOnStack,System.Int64) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.IntPtr System.ComAwareWeakReference.ObjectToComWeakRef(System.Runtime.CompilerServices.ObjectHandleOnStack,System.Int64) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.IntPtr System.ComAwareWeakReference.ObjectToComWeakRef(System.Runtime.CompilerServices.ObjectHandleOnStack,System.Int64) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.IntPtr System.Diagnostics.Tracing.EventPipeInternal.CreateProvider(System.String,delegate* unmanaged<Byte*,Int32,Byte,Int64,Int64,EVENT_FILTER_DESCRIPTOR*,Void*,Void>,System.Void*) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.IntPtr System.Diagnostics.Tracing.EventPipeInternal.CreateProvider(System.String,delegate* unmanaged<Byte*,Int32,Byte,Int64,Int64,EVENT_FILTER_DESCRIPTOR*,Void*,Void>,System.Void*) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.IntPtr System.Diagnostics.Tracing.EventPipeInternal.DefineEvent(System.IntPtr,System.UInt32,System.Int64,System.UInt32,System.UInt32,System.Void*,System.UInt32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.IntPtr System.Diagnostics.Tracing.EventPipeInternal.GetProvider(System.String) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.IntPtr System.Diagnostics.Tracing.EventPipeInternal.GetProvider(System.String) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.IntPtr System.GC._RegisterFrozenSegment(System.IntPtr,System.IntPtr) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.IntPtr System.IO.FileStream.Handle | [ObsoleteAttribute(...)] | 0 | FileStream.Handle has been deprecated. Use FileStream's SafeFileHandle property instead. | -| System.IntPtr System.IntPtr.CreateChecked`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IntPtr System.IntPtr.CreateSaturating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IntPtr System.IntPtr.CreateTruncating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IntPtr System.IntPtr.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IntPtr System.IntPtr.Parse(System.String,System.Globalization.NumberStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IntPtr System.IntPtr.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IntPtr System.IntPtr.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IntPtr System.IntPtr.op_Explicit(System.Void*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.IntPtr System.Runtime.CompilerServices.RuntimeHelpers.AllocateTypeAssociatedMemory(System.Runtime.CompilerServices.QCallTypeHandle,System.UInt32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.IntPtr System.Runtime.InteropServices.DllImportResolver.Invoke(System.String,System.Reflection.Assembly,System.Nullable<System.Runtime.InteropServices.DllImportSearchPath>) | [NullableContextAttribute(...)] | 0 | 1 | -| System.IntPtr System.Runtime.InteropServices.Marshal.CreateAggregatedObject(System.IntPtr,System.Object) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.IntPtr System.Runtime.InteropServices.Marshal.CreateAggregatedObject(System.IntPtr,System.Object) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.IntPtr System.Runtime.InteropServices.Marshal.CreateAggregatedObject`1(System.IntPtr,!0) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.IntPtr System.Runtime.InteropServices.Marshal.GetComInterfaceForObject(System.Object,System.Type) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.IntPtr System.Runtime.InteropServices.Marshal.GetComInterfaceForObject(System.Object,System.Type) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.IntPtr System.Runtime.InteropServices.Marshal.GetComInterfaceForObject(System.Object,System.Type,System.Runtime.InteropServices.CustomQueryInterfaceMode) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.IntPtr System.Runtime.InteropServices.Marshal.GetComInterfaceForObject(System.Object,System.Type,System.Runtime.InteropServices.CustomQueryInterfaceMode) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.IntPtr System.Runtime.InteropServices.Marshal.GetComInterfaceForObject`2(!0) | [NullableContextAttribute(...)] | 0 | 2 | -| System.IntPtr System.Runtime.InteropServices.Marshal.GetComInterfaceForObject`2(!0) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.IntPtr System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(System.Delegate) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.IntPtr System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(System.Delegate) | [RequiresDynamicCodeAttribute(...)] | 0 | Marshalling code for the delegate might not be available. Use the GetFunctionPointerForDelegate<TDelegate> overload instead. | -| System.IntPtr System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate`1(!0) | [UnconditionalSuppressMessageAttribute(...)] | 0 | AotAnalysis | -| System.IntPtr System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate`1(!0) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL3050:AotUnfriendlyApi | -| System.IntPtr System.Runtime.InteropServices.Marshal.GetHINSTANCE(System.Reflection.Module) | [RequiresAssemblyFilesAttribute(...)] | 0 | Windows only assigns HINSTANCE to assemblies loaded from disk. This API will return -1 for modules without a file on disk. | -| System.IntPtr System.Runtime.InteropServices.Marshal.GetIDispatchForObject(System.Object) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.IntPtr System.Runtime.InteropServices.Marshal.GetIUnknownForObject(System.Object) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.IntPtr System.Runtime.InteropServices.Marshal.OffsetOf(System.Type,System.String) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.IntPtr System.Runtime.InteropServices.Marshal.OffsetOf(System.Type,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.IntPtr System.Runtime.InteropServices.Marshal.OffsetOf(System.Type,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2070:UnrecognizedReflectionPattern | -| System.IntPtr System.Runtime.InteropServices.Marshal.ReadIntPtr(System.Object,System.Int32) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.IntPtr System.Runtime.InteropServices.Marshal.ReadIntPtr(System.Object,System.Int32) | [ObsoleteAttribute(...)] | 0 | ReadIntPtr(Object, Int32) may be unavailable in future releases. | -| System.IntPtr System.Runtime.InteropServices.Marshal.ReadIntPtr(System.Object,System.Int32) | [RequiresDynamicCodeAttribute(...)] | 0 | Marshalling code for the object might not be available | -| System.IntPtr System.Runtime.InteropServices.Marshal.StringToBSTR(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.IntPtr System.Runtime.InteropServices.Marshal.StringToCoTaskMemAnsi(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.IntPtr System.Runtime.InteropServices.Marshal.StringToCoTaskMemAuto(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.IntPtr System.Runtime.InteropServices.Marshal.StringToCoTaskMemUTF8(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.IntPtr System.Runtime.InteropServices.Marshal.StringToCoTaskMemUni(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.IntPtr System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.IntPtr System.Runtime.InteropServices.Marshal.StringToHGlobalAuto(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.IntPtr System.Runtime.InteropServices.Marshal.StringToHGlobalUni(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.IntPtr System.Runtime.InteropServices.Marshal.UnsafeAddrOfPinnedArrayElement(System.Array,System.Int32) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.IntPtr System.Runtime.InteropServices.NativeLibrary.GetSymbol(System.IntPtr,System.String,System.Boolean) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.IntPtr System.Runtime.InteropServices.NativeLibrary.GetSymbol(System.IntPtr,System.String,System.Boolean) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.IntPtr System.Runtime.InteropServices.NativeLibrary.LoadByName(System.String,System.Runtime.CompilerServices.QCallAssembly,System.Boolean,System.UInt32,System.Boolean) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.IntPtr System.Runtime.InteropServices.NativeLibrary.LoadByName(System.String,System.Runtime.CompilerServices.QCallAssembly,System.Boolean,System.UInt32,System.Boolean) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.IntPtr System.Runtime.InteropServices.NativeLibrary.LoadFromPath(System.String,System.Boolean) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.IntPtr System.Runtime.InteropServices.NativeLibrary.LoadFromPath(System.String,System.Boolean) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.IntPtr System.Runtime.Loader.AssemblyLoadContext.GetLoadContextForAssembly(System.Runtime.CompilerServices.QCallAssembly) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.IntPtr System.Runtime.Loader.AssemblyLoadContext.InitializeAssemblyLoadContext(System.IntPtr,System.Boolean,System.Boolean) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.IntPtr System.Runtime.Loader.AssemblyLoadContext.InitializeAssemblyLoadContext(System.IntPtr,System.Boolean,System.Boolean) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.IntPtr System.Runtime.Loader.AssemblyLoadContext.InitializeAssemblyLoadContext(System.IntPtr,System.Boolean,System.Boolean) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.IntPtr System.RuntimeMethodHandle.GetFunctionPointer(System.RuntimeMethodHandleInternal) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.IntPtr System.RuntimeTypeHandle.FreeGCHandle(System.Runtime.CompilerServices.QCallTypeHandle,System.IntPtr) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.IntPtr System.RuntimeTypeHandle.GetGCHandle(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.InteropServices.GCHandleType) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.IntPtr System.Threading.WaitHandle.Handle | [ObsoleteAttribute(...)] | 0 | WaitHandle.Handle has been deprecated. Use the SafeWaitHandle property instead. | -| System.InvalidCastException | [NullableAttribute(...)] | 0 | 0 | -| System.InvalidCastException | [NullableContextAttribute(...)] | 0 | 2 | -| System.InvalidCastException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.InvalidOperationException | [NullableAttribute(...)] | 0 | 0 | -| System.InvalidOperationException | [NullableContextAttribute(...)] | 0 | 2 | -| System.InvalidOperationException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.InvalidProgramException | [NullableAttribute(...)] | 0 | 0 | -| System.InvalidProgramException | [NullableContextAttribute(...)] | 0 | 2 | -| System.InvalidProgramException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.InvalidTimeZoneException | [NullableAttribute(...)] | 0 | 0 | -| System.InvalidTimeZoneException | [NullableContextAttribute(...)] | 0 | 2 | -| System.InvalidTimeZoneException | [TypeForwardedFromAttribute(...)] | 0 | System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Lazy`1 | [DebuggerDisplayAttribute(...)] | 0 | ThreadSafetyMode = {Mode}, IsValueCreated = {IsValueCreated}, IsValueFaulted = {IsValueFaulted}, Value = {ValueForDebugDisplay} | -| System.Lazy`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.LazyDebugView`1 | -| System.Lazy`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Lazy`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Lazy`2 | [NullableAttribute(...)] | 0 | [0,1] | -| System.Lazy`2 | [NullableContextAttribute(...)] | 0 | 1 | -| System.LoaderOptimization.DisallowBindings | [ObsoleteAttribute(...)] | 0 | LoaderOptimization.DisallowBindings has been deprecated and is not supported. | -| System.LoaderOptimization.DomainMask | [ObsoleteAttribute(...)] | 0 | LoaderOptimization.DomainMask has been deprecated and is not supported. | -| System.LoaderOptimizationAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.MTAThreadAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.MarshalByRefObject | [ClassInterfaceAttribute(...)] | 0 | 1 | -| System.MarshalByRefObject | [ComVisibleAttribute(...)] | 0 | True | -| System.MarshalByRefObject | [NullableAttribute(...)] | 0 | 0 | -| System.MarshalByRefObject | [NullableContextAttribute(...)] | 0 | 1 | -| System.MemberAccessException | [NullableAttribute(...)] | 0 | 0 | -| System.MemberAccessException | [NullableContextAttribute(...)] | 0 | 2 | -| System.MemberAccessException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Memory<!0> | [NullableAttribute(...)] | 0 | [0,1] | -| System.Memory<!0> System.Buffers.IMemoryOwner`1.Memory | [NullableAttribute(...)] | 0 | [0,1] | -| System.Memory<!0> System.Buffers.MemoryManager`1.Memory | [NullableAttribute(...)] | 0 | [0,1] | -| System.Memory<!0> System.MemoryExtensions.AsMemory`1(!0[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Memory<!0> System.MemoryExtensions.AsMemory`1(!0[],System.Index) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Memory<!0> System.MemoryExtensions.AsMemory`1(!0[],System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Memory<!0> System.MemoryExtensions.AsMemory`1(!0[],System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Memory<!0> System.MemoryExtensions.AsMemory`1(!0[],System.Range) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Memory<!0> System.MemoryExtensions.AsMemory`1(System.ArraySegment<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Memory<!0> System.MemoryExtensions.AsMemory`1(System.ArraySegment<!0>,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Memory<!0> System.MemoryExtensions.AsMemory`1(System.ArraySegment<!0>,System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Memory<!0> System.Memory`1.Empty | [NullableAttribute(...)] | 0 | [0,1] | -| System.Memory<!0> System.Runtime.InteropServices.MemoryMarshal.AsMemory`1(System.ReadOnlyMemory<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Memory<!0> System.Runtime.InteropServices.MemoryMarshal.CreateFromPinnedArray`1(!0[],System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.MemoryExtensions.TryWriteInterpolatedStringHandler | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.MemoryExtensions.TryWriteInterpolatedStringHandler | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.MemoryExtensions.TryWriteInterpolatedStringHandler | [InterpolatedStringHandlerArgumentAttribute(...)] | 0 | [destination,provider] | -| System.MemoryExtensions.TryWriteInterpolatedStringHandler | [InterpolatedStringHandlerArgumentAttribute(...)] | 0 | destination | -| System.MemoryExtensions.TryWriteInterpolatedStringHandler | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.MemoryExtensions.TryWriteInterpolatedStringHandler | [ObsoleteAttribute(...)] | 1 | True | -| System.Memory`1 | [DebuggerDisplayAttribute(...)] | 0 | {ToString(),raw} | -| System.Memory`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.MemoryDebugView`1 | -| System.Memory`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Memory`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.MethodAccessException | [NullableAttribute(...)] | 0 | 0 | -| System.MethodAccessException | [NullableContextAttribute(...)] | 0 | 2 | -| System.MethodAccessException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.MissingFieldException | [NullableAttribute(...)] | 0 | 0 | -| System.MissingFieldException | [NullableContextAttribute(...)] | 0 | 1 | -| System.MissingFieldException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.MissingMemberException | [NullableAttribute(...)] | 0 | 0 | -| System.MissingMemberException | [NullableContextAttribute(...)] | 0 | 2 | -| System.MissingMemberException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.MissingMethodException | [NullableAttribute(...)] | 0 | 0 | -| System.MissingMethodException | [NullableContextAttribute(...)] | 0 | 1 | -| System.MissingMethodException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.ModuleHandle | [NullableAttribute(...)] | 0 | 0 | -| System.ModuleHandle | [NullableContextAttribute(...)] | 0 | 2 | -| System.MulticastDelegate | [ClassInterfaceAttribute(...)] | 0 | 0 | -| System.MulticastDelegate | [ComVisibleAttribute(...)] | 0 | True | -| System.MulticastDelegate | [NullableAttribute(...)] | 0 | 0 | -| System.MulticastDelegate | [NullableContextAttribute(...)] | 0 | 1 | -| System.MulticastNotSupportedException | [NullableAttribute(...)] | 0 | 0 | -| System.MulticastNotSupportedException | [NullableContextAttribute(...)] | 0 | 2 | -| System.MulticastNotSupportedException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Net.WebUtility | [NullableAttribute(...)] | 0 | 0 | -| System.Net.WebUtility | [NullableContextAttribute(...)] | 0 | 2 | -| System.NonSerializedAttribute | [AttributeUsageAttribute(...)] | 0 | 256 | -| System.NonSerializedAttribute | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.NotFiniteNumberException | [NullableAttribute(...)] | 0 | 0 | -| System.NotFiniteNumberException | [NullableContextAttribute(...)] | 0 | 2 | -| System.NotFiniteNumberException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.NotImplementedException | [NullableAttribute(...)] | 0 | 0 | -| System.NotImplementedException | [NullableContextAttribute(...)] | 0 | 2 | -| System.NotImplementedException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.NotSupportedException | [NullableAttribute(...)] | 0 | 0 | -| System.NotSupportedException | [NullableContextAttribute(...)] | 0 | 2 | -| System.NotSupportedException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.NullReferenceException | [NullableAttribute(...)] | 0 | 0 | -| System.NullReferenceException | [NullableContextAttribute(...)] | 0 | 2 | -| System.NullReferenceException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Nullable`1 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Number.BigInteger | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Number.BigInteger | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Number.BigInteger | [ObsoleteAttribute(...)] | 1 | True | -| System.Number.BigInteger._blocks | [FixedBufferAttribute(...)] | 0 | System.UInt32 | -| System.Number.BigInteger._blocks | [FixedBufferAttribute(...)] | 1 | 115 | -| System.Number.DiyFp | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Number.DiyFp | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Number.DiyFp | [ObsoleteAttribute(...)] | 1 | True | -| System.Number.NumberBuffer | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Number.NumberBuffer | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Number.NumberBuffer | [ObsoleteAttribute(...)] | 1 | True | -| System.Numerics.IAdditionOperators`3 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.IAdditiveIdentity`2 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.IBinaryInteger`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.IBitwiseOperators`3 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.IComparisonOperators`3 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.IDecrementOperators`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.IDivisionOperators`3 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.IEqualityOperators`3 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.IExponentialFunctions`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.IFloatingPointConstants`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.IFloatingPointIeee754`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.IFloatingPoint`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.IHyperbolicFunctions`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.IIncrementOperators`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.ILogarithmicFunctions`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.IMinMaxValue`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.IModulusOperators`3 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.IMultiplicativeIdentity`2 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.IMultiplyOperators`3 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.INumberBase`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.INumber`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.IShiftOperators`3 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.ISubtractionOperators`3 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.ITrigonometricFunctions`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.IUnaryNegationOperators`2 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.Matrix3x2 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Numerics.Matrix3x2.Impl | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Numerics.Matrix4x4 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Numerics.Matrix4x4.Impl | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Numerics.Quaternion | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Numerics.TotalOrderIeee754Comparer<!0> | [NullableAttribute(...)] | 0 | [0,1] | -| System.Numerics.TotalOrderIeee754Comparer`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Numerics.TotalOrderIeee754Comparer`1 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector2 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Numerics.Vector3 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Numerics.Vector4 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Numerics.Vector<!0> | [NullableAttribute(...)] | 0 | [0,1] | -| System.Numerics.Vector<!0> System.Numerics.Vector.Abs`1(System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector.Add`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector.AndNot`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector.BitwiseAnd`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector.BitwiseOr`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector.ConditionalSelect`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector.Divide`1(System.Numerics.Vector<!0>,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.Vector<!0> System.Numerics.Vector.Divide`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector.Equals`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector.GreaterThanOrEqual`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector.GreaterThan`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector.LessThanOrEqual`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector.LessThan`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector.LoadAlignedNonTemporal`1(!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<!0> System.Numerics.Vector.LoadAlignedNonTemporal`1(!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector.LoadAligned`1(!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<!0> System.Numerics.Vector.LoadAligned`1(!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector.LoadUnsafe`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.Vector<!0> System.Numerics.Vector.LoadUnsafe`1(!0,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<!0> System.Numerics.Vector.LoadUnsafe`1(!0,System.UIntPtr) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.Vector<!0> System.Numerics.Vector.Load`1(!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<!0> System.Numerics.Vector.Load`1(!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector.Max`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector.Min`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector.Multiply`1(!0,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.Vector<!0> System.Numerics.Vector.Multiply`1(System.Numerics.Vector<!0>,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.Vector<!0> System.Numerics.Vector.Multiply`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector.Negate`1(System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector.OnesComplement`1(System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector.SquareRoot`1(System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector.Subtract`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector.WithElement`1(System.Numerics.Vector<!0>,System.Int32,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.Vector<!0> System.Numerics.Vector.Xor`1(System.Numerics.Vector<!0>,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Numerics.Vector`1.AllBitsSet | [NullableAttribute(...)] | 0 | [0,1] | -| System.Numerics.Vector<!0> System.Numerics.Vector`1.One | [NullableAttribute(...)] | 0 | [0,1] | -| System.Numerics.Vector<!0> System.Numerics.Vector`1.Zero | [NullableAttribute(...)] | 0 | [0,1] | -| System.Numerics.Vector<!0> System.Numerics.Vector`1.op_Division(System.Numerics.Vector<!0>,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.Vector<!0> System.Numerics.Vector`1.op_Multiply(!0,System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.Vector<!0> System.Numerics.Vector`1.op_Multiply(System.Numerics.Vector<!0>,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.Vector<!0> System.Runtime.Intrinsics.Vector128.AsVector`1(System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Runtime.Intrinsics.Vector256.AsVector`1(System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!0> System.Runtime.Intrinsics.Vector512.AsVector`1(System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<!1> System.Numerics.Vector.As`2(System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Numerics.Vector<System.Byte> System.Numerics.Vector.Narrow(System.Numerics.Vector<System.UInt16>,System.Numerics.Vector<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.Double> System.Numerics.Vector.ConvertToDouble(System.Numerics.Vector<System.UInt64>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.Int16> System.Numerics.Vector.WidenLower(System.Numerics.Vector<System.SByte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.Int16> System.Numerics.Vector.WidenUpper(System.Numerics.Vector<System.SByte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.SByte> System.Numerics.Vector.AsVectorSByte`1(System.Numerics.Vector<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.SByte> System.Numerics.Vector.Narrow(System.Numerics.Vector<System.Int16>,System.Numerics.Vector<System.Int16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.SByte> System.Numerics.Vector.ShiftLeft(System.Numerics.Vector<System.SByte>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.SByte> System.Numerics.Vector.ShiftRightArithmetic(System.Numerics.Vector<System.SByte>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.SByte> System.Numerics.Vector.ShiftRightLogical(System.Numerics.Vector<System.SByte>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.SByte> System.Numerics.Vector`1.op_Explicit(System.Numerics.Vector<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.Single> System.Numerics.Vector.ConvertToSingle(System.Numerics.Vector<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UInt16> System.Numerics.Vector.AsVectorUInt16`1(System.Numerics.Vector<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UInt16> System.Numerics.Vector.Narrow(System.Numerics.Vector<System.UInt32>,System.Numerics.Vector<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UInt16> System.Numerics.Vector.ShiftLeft(System.Numerics.Vector<System.UInt16>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UInt16> System.Numerics.Vector.ShiftRightLogical(System.Numerics.Vector<System.UInt16>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UInt16> System.Numerics.Vector.WidenLower(System.Numerics.Vector<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UInt16> System.Numerics.Vector.WidenUpper(System.Numerics.Vector<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UInt16> System.Numerics.Vector`1.op_Explicit(System.Numerics.Vector<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UInt32> System.Numerics.Vector.AsVectorUInt32`1(System.Numerics.Vector<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UInt32> System.Numerics.Vector.ConvertToUInt32(System.Numerics.Vector<System.Single>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UInt32> System.Numerics.Vector.Narrow(System.Numerics.Vector<System.UInt64>,System.Numerics.Vector<System.UInt64>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UInt32> System.Numerics.Vector.ShiftLeft(System.Numerics.Vector<System.UInt32>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UInt32> System.Numerics.Vector.ShiftRightLogical(System.Numerics.Vector<System.UInt32>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UInt32> System.Numerics.Vector.WidenLower(System.Numerics.Vector<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UInt32> System.Numerics.Vector.WidenUpper(System.Numerics.Vector<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UInt32> System.Numerics.Vector`1.op_Explicit(System.Numerics.Vector<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UInt64> System.Numerics.Vector.AsVectorUInt64`1(System.Numerics.Vector<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UInt64> System.Numerics.Vector.ConvertToUInt64(System.Numerics.Vector<System.Double>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UInt64> System.Numerics.Vector.ShiftLeft(System.Numerics.Vector<System.UInt64>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UInt64> System.Numerics.Vector.ShiftRightLogical(System.Numerics.Vector<System.UInt64>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UInt64> System.Numerics.Vector.WidenLower(System.Numerics.Vector<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UInt64> System.Numerics.Vector.WidenUpper(System.Numerics.Vector<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UInt64> System.Numerics.Vector`1.op_Explicit(System.Numerics.Vector<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UIntPtr> System.Numerics.Vector.AsVectorNUInt`1(System.Numerics.Vector<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UIntPtr> System.Numerics.Vector.ShiftLeft(System.Numerics.Vector<System.UIntPtr>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UIntPtr> System.Numerics.Vector.ShiftRightLogical(System.Numerics.Vector<System.UIntPtr>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector<System.UIntPtr> System.Numerics.Vector`1.op_Explicit(System.Numerics.Vector<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Numerics.Vector`1 | [DebuggerDisplayAttribute(...)] | 0 | {DisplayString,nq} | -| System.Numerics.Vector`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.Numerics.VectorDebugView`1 | -| System.Numerics.Vector`1 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Object System.Activator.CreateInstance(System.Type,System.Object[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Activator.CreateInstance(System.Type,System.Object[],System.Object[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Activator.CreateInstance(System.Type,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Activator.CreateInstance(System.Type,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.AppDomain.CreateInstanceAndUnwrap(System.String,System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Type and its constructor could be removed | -| System.Object System.AppDomain.CreateInstanceAndUnwrap(System.String,System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.AppDomain.CreateInstanceAndUnwrap(System.String,System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Type and its constructor could be removed | -| System.Object System.AppDomain.CreateInstanceAndUnwrap(System.String,System.String,System.Object[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Type and its constructor could be removed | -| System.Object System.AppDomain.CreateInstanceFromAndUnwrap(System.String,System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Type and its constructor could be removed | -| System.Object System.AppDomain.CreateInstanceFromAndUnwrap(System.String,System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.AppDomain.CreateInstanceFromAndUnwrap(System.String,System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Type and its constructor could be removed | -| System.Object System.AppDomain.CreateInstanceFromAndUnwrap(System.String,System.String,System.Object[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Type and its constructor could be removed | -| System.Object System.ArgumentOutOfRangeException.get_ActualValue() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Array.GetValue(System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Array.GetValue(System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Array.GetValue(System.Int32,System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Array.GetValue(System.Int64) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Array.GetValue(System.Int64,System.Int64) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Array.GetValue(System.Int64,System.Int64,System.Int64) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.CharEnumerator.Clone() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Object System.Collections.ArrayList.get_Item(System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Collections.DictionaryEntry.get_Value() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Collections.IDictionaryEnumerator.get_Value() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Delegate.DynamicInvoke(System.Object[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Delegate.DynamicInvokeImpl(System.Object[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Delegate.get_Target() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Enum.ToObject(System.Type,System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Object System.Enum.ToObject(System.Type,System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Object System.Enum.ToObject(System.Type,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Object System.Enum.ToObject(System.Type,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Object System.FormattableString.GetArgument(System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Globalization.CultureInfo.GetFormat(System.Type) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Globalization.DateTimeFormatInfo.GetFormat(System.Type) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Globalization.NumberFormatInfo.GetFormat(System.Type) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.IAsyncResult.get_AsyncState() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.IConvertible.ToType(System.Type,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Object System.MarshalByRefObject.GetLifetimeService() | [ObsoleteAttribute(...)] | 0 | This Remoting API is not supported and throws PlatformNotSupportedException. | -| System.Object System.MarshalByRefObject.InitializeLifetimeService() | [ObsoleteAttribute(...)] | 0 | This Remoting API is not supported and throws PlatformNotSupportedException. | -| System.Object System.Object.MemberwiseClone() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Object System.Reflection.Assembly.CreateInstance(System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Assembly.CreateInstance is not supported with trimming. Use Type.GetType instead. | -| System.Object System.Reflection.Assembly.CreateInstance(System.String,System.Boolean) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Assembly.CreateInstance is not supported with trimming. Use Type.GetType instead. | -| System.Object System.Reflection.Assembly.CreateInstance(System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Reflection.Assembly.CreateInstance(System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Assembly.CreateInstance is not supported with trimming. Use Type.GetType instead. | -| System.Object System.Reflection.AssemblyName.Clone() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Object System.Reflection.ConstructorInfo.Invoke(System.Object[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Object System.Reflection.ConstructorInvoker.Invoke(System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Reflection.ConstructorInvoker.Invoke(System.Object,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Reflection.ConstructorInvoker.Invoke(System.Object,System.Object,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Reflection.CustomAttributeTypedArgument.get_Value() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Reflection.Emit.DynamicMethod.Invoke(System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Reflection.Emit.RuntimeEnumBuilder.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Object System.Reflection.Emit.RuntimeGenericTypeParameterBuilder.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Object System.Reflection.Emit.RuntimeTypeBuilder.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Object System.Reflection.Emit.SymbolType.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Object System.Reflection.Emit.TypeBuilderInstantiation.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Object System.Reflection.FieldInfo.GetRawConstantValue() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Reflection.FieldInfo.GetValue(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Reflection.FieldInfo.GetValueDirect(System.TypedReference) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Object System.Reflection.FieldInfo.GetValueDirect(System.TypedReference) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Reflection.IReflect.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Object System.Reflection.IReflect.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Reflection.ModifiedType.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Object System.Reflection.ParameterInfo.GetRealObject(System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Object System.Reflection.ParameterInfo.GetRealObject(System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Object System.Reflection.ParameterInfo.get_DefaultValue() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Reflection.ParameterInfo.get_RawDefaultValue() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Reflection.Pointer.Box(System.Void*,System.Type) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Object System.Reflection.SignatureType.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Object System.Reflection.TypeDelegator.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Object System.Reflection.TypeDelegator.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Resources.ResourceManager.GetObject(System.String,System.Globalization.CultureInfo) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Runtime.CompilerServices.RuntimeHelpers.GetObjectValue(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Runtime.InteropServices.ComWrappers.CreateObject(System.IntPtr,System.Runtime.InteropServices.CreateObjectFlags) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Runtime.InteropServices.Marshal.BindToMoniker(System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Built-in COM support is not trim compatible | -| System.Object System.Runtime.InteropServices.Marshal.BindToMoniker(System.String) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Object System.Runtime.InteropServices.Marshal.CreateWrapperOfType(System.Object,System.Type) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Object System.Runtime.InteropServices.Marshal.CreateWrapperOfType(System.Object,System.Type) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Runtime.InteropServices.Marshal.CreateWrapperOfType(System.Object,System.Type) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Object System.Runtime.InteropServices.Marshal.GetComObjectData(System.Object,System.Object) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Object System.Runtime.InteropServices.Marshal.GetObjectForIUnknown(System.IntPtr) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Object System.Runtime.InteropServices.Marshal.GetObjectForNativeVariant(System.IntPtr) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Object System.Runtime.InteropServices.Marshal.GetObjectForNativeVariant(System.IntPtr) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Runtime.InteropServices.Marshal.GetObjectForNativeVariant(System.IntPtr) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Object System.Runtime.InteropServices.Marshal.GetTypedObjectForIUnknown(System.IntPtr,System.Type) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Object System.Runtime.InteropServices.Marshal.GetUniqueObjectForIUnknown(System.IntPtr) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Object System.Runtime.InteropServices.Marshal.PtrToStructure(System.IntPtr,System.Type) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Object System.Runtime.InteropServices.Marshal.PtrToStructure(System.IntPtr,System.Type) | [RequiresDynamicCodeAttribute(...)] | 0 | Marshalling code for the object might not be available | -| System.Object System.Runtime.Serialization.SerializationEntry.get_Value() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Runtime.Serialization.SerializationInfoEnumerator.get_Value() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.RuntimeType.<CreateInstanceImpl>g__CreateInstanceLocal\|145_0(System.Boolean) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Object System.RuntimeType.<CreateInstanceImpl>g__CreateInstanceLocal\|145_0(System.Boolean) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2082:UnrecognizedReflectionPattern | -| System.Object System.RuntimeType.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Object System.RuntimeTypeHandle.CreateInstanceForAnotherGenericParameter(System.RuntimeType,System.RuntimeType) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Object System.RuntimeTypeHandle.CreateInstanceForAnotherGenericParameter(System.RuntimeType,System.RuntimeType) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2067:ParameterDoesntMeetParameterRequirements | -| System.Object System.RuntimeTypeHandle.CreateInstanceForAnotherGenericParameter(System.RuntimeType,System.RuntimeType,System.RuntimeType) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Object System.RuntimeTypeHandle.CreateInstanceForAnotherGenericParameter(System.RuntimeType,System.RuntimeType,System.RuntimeType) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2067:ParameterDoesntMeetParameterRequirements | -| System.Object System.Security.PermissionSet.get_SyncRoot() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Object System.Threading.Interlocked.CompareExchange(System.Object,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Threading.Interlocked.Exchange(System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Threading.Tasks.Task.get_AsyncState() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Threading.Thread.VolatileRead(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Threading.ThreadPoolBoundHandle.GetNativeOverlappedState(System.Threading.NativeOverlapped*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Object System.Type.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Object System.Type.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Type.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Globalization.CultureInfo) | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Object System.Type.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Globalization.CultureInfo) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.Type.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Object System.Type.InvokeMember(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object,System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Object System.UnitySerializationHolder.GetRealObject(System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Object System.Version.Clone() | [NullableContextAttribute(...)] | 0 | 1 | -| System.ObjectDisposedException | [NullableAttribute(...)] | 0 | 0 | -| System.ObjectDisposedException | [NullableContextAttribute(...)] | 0 | 1 | -| System.ObjectDisposedException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Object[] System.Diagnostics.Tracing.EventSource.SerializeEventArgs(System.Int32,System.Object[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | EventSource will serialize the whole object graph. Trimmer will not safely handle this case because properties may be trimmed. | -| System.Object[] System.Diagnostics.Tracing.EventSource.SerializeEventArgs(System.Int32,System.Object[]) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Object[] System.Diagnostics.Tracing.EventSource.SerializeEventArgs(System.Int32,System.Object[]) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2112:ReflectionToRequiresUnreferencedCode | -| System.Object[] System.Runtime.InteropServices.Marshal.GetObjectsForNativeVariants(System.IntPtr,System.Int32) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Object[] System.Runtime.InteropServices.Marshal.GetObjectsForNativeVariants(System.IntPtr,System.Int32) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.ObsoleteAttribute | [AttributeUsageAttribute(...)] | 0 | 6140 | -| System.ObsoleteAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.ObsoleteAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.OperatingSystem | [NullableAttribute(...)] | 0 | 0 | -| System.OperatingSystem | [NullableContextAttribute(...)] | 0 | 1 | -| System.OperationCanceledException | [NullableAttribute(...)] | 0 | 0 | -| System.OperationCanceledException | [NullableContextAttribute(...)] | 0 | 2 | -| System.OperationCanceledException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.OrdinalComparer | [NullableAttribute(...)] | 0 | 0 | -| System.OrdinalComparer | [NullableContextAttribute(...)] | 0 | 2 | -| System.OrdinalComparer | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.OutOfMemoryException | [NullableAttribute(...)] | 0 | 0 | -| System.OutOfMemoryException | [NullableContextAttribute(...)] | 0 | 2 | -| System.OutOfMemoryException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.OverflowException | [NullableAttribute(...)] | 0 | 0 | -| System.OverflowException | [NullableContextAttribute(...)] | 0 | 2 | -| System.OverflowException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.ParamArrayAttribute | [AttributeUsageAttribute(...)] | 0 | 2048 | -| System.PlatformID.MacOSX | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.PlatformID.Win32S | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.PlatformID.Win32Windows | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.PlatformID.WinCE | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.PlatformID.Xbox | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.PlatformNotSupportedException | [NullableAttribute(...)] | 0 | 0 | -| System.PlatformNotSupportedException | [NullableContextAttribute(...)] | 0 | 2 | -| System.PlatformNotSupportedException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Progress`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Progress`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Progress`1.ProgressChanged | [NullableAttribute(...)] | 0 | [2,1] | -| System.Random | [NullableAttribute(...)] | 0 | 0 | -| System.Random | [NullableContextAttribute(...)] | 0 | 1 | -| System.RankException | [NullableAttribute(...)] | 0 | 0 | -| System.RankException | [NullableContextAttribute(...)] | 0 | 2 | -| System.RankException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.ReadOnlyMemory<!0> | [NullableAttribute(...)] | 0 | [0,1] | -| System.ReadOnlyMemory<!0> System.ReadOnlyMemory`1.Empty | [NullableAttribute(...)] | 0 | [0,1] | -| System.ReadOnlyMemory`1 | [DebuggerDisplayAttribute(...)] | 0 | {ToString(),raw} | -| System.ReadOnlyMemory`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.MemoryDebugView`1 | -| System.ReadOnlyMemory`1 | [NullableAttribute(...)] | 0 | 0 | -| System.ReadOnlyMemory`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.ReadOnlySpan<!0> | [NullableAttribute(...)] | 0 | [0,1] | -| System.ReadOnlySpan<!0> System.ReadOnlyMemory`1.Span | [NullableAttribute(...)] | 0 | [0,1] | -| System.ReadOnlySpan<!0> System.ReadOnlySpan`1.Empty | [NullableAttribute(...)] | 0 | [0,1] | -| System.ReadOnlySpan<!0> System.Runtime.CompilerServices.RuntimeHelpers.CreateSpan`1(System.RuntimeFieldHandle) | [NullableContextAttribute(...)] | 0 | 2 | -| System.ReadOnlySpan<!0> System.Runtime.InteropServices.MemoryMarshal.CreateReadOnlySpan`1(!0,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.ReadOnlySpan<!0>.Enumerator System.ReadOnlySpan`1.GetEnumerator() | [NullableContextAttribute(...)] | 0 | 0 | -| System.ReadOnlySpan<System.Boolean> System.Globalization.CompareInfo.HighCharTable | [NullableAttribute(...)] | 0 | 0 | -| System.ReadOnlySpan<System.Byte> System.Diagnostics.Tracing.EventSource.ProviderMetadata | [NullableAttribute(...)] | 0 | 0 | -| System.ReadOnlySpan<System.Byte> System.Runtime.InteropServices.MemoryMarshal.CreateReadOnlySpanFromNullTerminated(System.Byte*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ReadOnlySpan<System.Byte> System.Text.Encoding.Preamble | [NullableAttribute(...)] | 0 | 0 | -| System.ReadOnlySpan<System.Byte> System.Text.Encoding.get_Preamble() | [NullableContextAttribute(...)] | 0 | 0 | -| System.ReadOnlySpan<System.Byte> System.Text.UTF32Encoding.Preamble | [NullableAttribute(...)] | 0 | 0 | -| System.ReadOnlySpan<System.Byte> System.Text.UTF32Encoding.get_Preamble() | [NullableContextAttribute(...)] | 0 | 0 | -| System.ReadOnlySpan<System.Byte> System.Text.UnicodeEncoding.Preamble | [NullableAttribute(...)] | 0 | 0 | -| System.ReadOnlySpan<System.Byte> System.Text.UnicodeEncoding.get_Preamble() | [NullableContextAttribute(...)] | 0 | 0 | -| System.ReadOnlySpan<System.Char> | [NullableAttribute(...)] | 0 | 0 | -| System.ReadOnlySpan<System.Char> | [StringSyntaxAttribute(...)] | 0 | DateOnlyFormat | -| System.ReadOnlySpan<System.Char> | [StringSyntaxAttribute(...)] | 0 | DateTimeFormat | -| System.ReadOnlySpan<System.Char> | [StringSyntaxAttribute(...)] | 0 | EnumFormat | -| System.ReadOnlySpan<System.Char> | [StringSyntaxAttribute(...)] | 0 | GuidFormat | -| System.ReadOnlySpan<System.Char> | [StringSyntaxAttribute(...)] | 0 | NumericFormat | -| System.ReadOnlySpan<System.Char> | [StringSyntaxAttribute(...)] | 0 | TimeOnlyFormat | -| System.ReadOnlySpan<System.Char> | [StringSyntaxAttribute(...)] | 0 | TimeSpanFormat | -| System.ReadOnlySpan<System.Char> System.Runtime.CompilerServices.DefaultInterpolatedStringHandler.Text | [NullableAttribute(...)] | 0 | 0 | -| System.ReadOnlySpan<System.Char> System.Runtime.InteropServices.MemoryMarshal.CreateReadOnlySpanFromNullTerminated(System.Char*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ReadOnlySpan<System.Char> System.String.op_Implicit(System.String) | [NullableContextAttribute(...)] | 0 | 0 | -| System.ReadOnlySpan<System.Object> | [NullableAttribute(...)] | 0 | [0,2] | -| System.ReadOnlySpan<System.SByte> System.Convert.DecodingMap | [NullableAttribute(...)] | 0 | 0 | -| System.ReadOnlySpan<System.String> | [NullableAttribute(...)] | 0 | [0,1] | -| System.ReadOnlySpan`1 | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.ReadOnlySpan`1 | [DebuggerDisplayAttribute(...)] | 0 | {ToString(),raw} | -| System.ReadOnlySpan`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.SpanDebugView`1 | -| System.ReadOnlySpan`1 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.ReadOnlySpan`1 | [NativeMarshallingAttribute(...)] | 0 | System.Runtime.InteropServices.Marshalling.ReadOnlySpanMarshaller`2 | -| System.ReadOnlySpan`1 | [NullableAttribute(...)] | 0 | 0 | -| System.ReadOnlySpan`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.ReadOnlySpan`1 | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.ReadOnlySpan`1 | [ObsoleteAttribute(...)] | 1 | True | -| System.ReadOnlySpan`1.Enumerator | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.ReadOnlySpan`1.Enumerator | [NullableAttribute(...)] | 0 | 0 | -| System.ReadOnlySpan`1.Enumerator | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.ReadOnlySpan`1.Enumerator | [ObsoleteAttribute(...)] | 1 | True | -| System.Reflection.AmbiguousMatchException | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.AmbiguousMatchException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.AmbiguousMatchException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Reflection.Assembly | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.Assembly | [NullableAttribute(...)] | 0 | 1 | -| System.Reflection.Assembly | [NullableAttribute(...)] | 0 | 2 | -| System.Reflection.Assembly | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.Assembly Internal.Runtime.InteropServices.IsolatedComponentLoadContext.Load(System.Reflection.AssemblyName) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Reflection.Assembly Internal.Runtime.InteropServices.IsolatedComponentLoadContext.Load(System.Reflection.AssemblyName) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Reflection.Assembly System.AppDomain.Load(System.Byte[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Reflection.Assembly System.AppDomain.Load(System.Byte[],System.Byte[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Reflection.Assembly System.Reflection.Assembly.GetEntryAssembly() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.Assembly System.Reflection.Assembly.Load(System.Byte[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Reflection.Assembly System.Reflection.Assembly.Load(System.Byte[],System.Byte[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Reflection.Assembly System.Reflection.Assembly.LoadFile(System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Reflection.Assembly System.Reflection.Assembly.LoadFrom(System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Reflection.Assembly System.Reflection.Assembly.LoadFrom(System.String,System.Byte[],System.Configuration.Assemblies.AssemblyHashAlgorithm) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Reflection.Assembly System.Reflection.Assembly.LoadFromResolveHandler(System.Object,System.ResolveEventArgs) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Reflection.Assembly System.Reflection.Assembly.LoadFromResolveHandler(System.Object,System.ResolveEventArgs) | [UnconditionalSuppressMessageAttribute(...)] | 0 | SingleFile | -| System.Reflection.Assembly System.Reflection.Assembly.LoadFromResolveHandler(System.Object,System.ResolveEventArgs) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL3000:Avoid accessing Assembly file path when publishing as a single file | -| System.Reflection.Assembly System.Reflection.Assembly.LoadWithPartialName(System.String) | [ObsoleteAttribute(...)] | 0 | Assembly.LoadWithPartialName has been deprecated. Use Assembly.Load() instead. | -| System.Reflection.Assembly System.Reflection.Assembly.ReflectionOnlyLoad(System.Byte[]) | [ObsoleteAttribute(...)] | 0 | ReflectionOnly loading is not supported and throws PlatformNotSupportedException. | -| System.Reflection.Assembly System.Reflection.Assembly.ReflectionOnlyLoad(System.Byte[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Reflection.Assembly System.Reflection.Assembly.ReflectionOnlyLoad(System.String) | [ObsoleteAttribute(...)] | 0 | ReflectionOnly loading is not supported and throws PlatformNotSupportedException. | -| System.Reflection.Assembly System.Reflection.Assembly.ReflectionOnlyLoad(System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Reflection.Assembly System.Reflection.Assembly.ReflectionOnlyLoadFrom(System.String) | [ObsoleteAttribute(...)] | 0 | ReflectionOnly loading is not supported and throws PlatformNotSupportedException. | -| System.Reflection.Assembly System.Reflection.Assembly.ReflectionOnlyLoadFrom(System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Reflection.Assembly System.Reflection.Assembly.UnsafeLoadFrom(System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Reflection.Assembly System.ResolveEventArgs.RequestingAssembly | [NullableAttribute(...)] | 0 | 2 | -| System.Reflection.Assembly System.ResolveEventArgs.get_RequestingAssembly() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.Assembly System.ResolveEventHandler.Invoke(System.Object,System.ResolveEventArgs) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.Assembly System.Runtime.Loader.AssemblyLoadContext.GetFirstResolvedAssemblyFromResolvingEvent(System.Reflection.AssemblyName) | [UnconditionalSuppressMessageAttribute(...)] | 0 | SingleFile | -| System.Reflection.Assembly System.Runtime.Loader.AssemblyLoadContext.GetFirstResolvedAssemblyFromResolvingEvent(System.Reflection.AssemblyName) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL3000: Avoid accessing Assembly file path when publishing as a single file | -| System.Reflection.Assembly System.Runtime.Loader.AssemblyLoadContext.InternalLoad(System.ReadOnlySpan<System.Byte>,System.ReadOnlySpan<System.Byte>) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Reflection.Assembly System.Runtime.Loader.AssemblyLoadContext.LoadFromAssemblyPath(System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Reflection.Assembly System.Runtime.Loader.AssemblyLoadContext.LoadFromNativeImagePath(System.String,System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Reflection.Assembly System.Runtime.Loader.AssemblyLoadContext.LoadFromStream(System.IO.Stream) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Reflection.Assembly System.Runtime.Loader.AssemblyLoadContext.LoadFromStream(System.IO.Stream,System.IO.Stream) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Reflection.Assembly System.Runtime.Loader.AssemblyLoadContext.ResolveSatelliteAssembly(System.Reflection.AssemblyName) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Reflection.Assembly System.Runtime.Loader.AssemblyLoadContext.ResolveSatelliteAssembly(System.Reflection.AssemblyName) | [UnconditionalSuppressMessageAttribute(...)] | 0 | SingleFile | -| System.Reflection.Assembly System.Runtime.Loader.AssemblyLoadContext.ResolveSatelliteAssembly(System.Reflection.AssemblyName) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Reflection.Assembly System.Runtime.Loader.AssemblyLoadContext.ResolveSatelliteAssembly(System.Reflection.AssemblyName) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL3000: Avoid accessing Assembly file path when publishing as a single file | -| System.Reflection.Assembly.ModuleResolve | [NullableAttribute(...)] | 0 | 2 | -| System.Reflection.AssemblyAlgorithmIdAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyCompanyAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyCompanyAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.AssemblyCompanyAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyConfigurationAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyConfigurationAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.AssemblyConfigurationAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyCopyrightAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyCopyrightAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.AssemblyCopyrightAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyCultureAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyCultureAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.AssemblyCultureAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyDefaultAliasAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyDefaultAliasAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.AssemblyDefaultAliasAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyDelaySignAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyDescriptionAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyDescriptionAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.AssemblyDescriptionAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyFileVersionAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyFileVersionAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.AssemblyFileVersionAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyFlagsAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyInformationalVersionAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyInformationalVersionAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.AssemblyInformationalVersionAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyKeyFileAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyKeyFileAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.AssemblyKeyFileAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyKeyNameAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyKeyNameAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.AssemblyKeyNameAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyMetadataAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyMetadataAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.AssemblyMetadataAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyName | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.AssemblyName | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.AssemblyName System.Reflection.AssemblyName.GetAssemblyName(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyName System.Reflection.AssemblyNameProxy.GetAssemblyName(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyNameFlags System.Reflection.RuntimeAssembly.GetFlags(System.Runtime.CompilerServices.QCallAssembly) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Reflection.AssemblyNameParser | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Reflection.AssemblyNameParser | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Reflection.AssemblyNameParser | [ObsoleteAttribute(...)] | 1 | True | -| System.Reflection.AssemblyName[] System.Reflection.Assembly.GetReferencedAssemblies() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Assembly references might be removed | -| System.Reflection.AssemblyName[] System.Reflection.Emit.RuntimeAssemblyBuilder.GetReferencedAssemblies() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Assembly references might be removed | -| System.Reflection.AssemblyName[] System.Reflection.RuntimeAssembly.GetReferencedAssemblies() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Assembly references might be removed | -| System.Reflection.AssemblyProductAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyProductAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.AssemblyProductAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblySignatureKeyAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblySignatureKeyAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.AssemblySignatureKeyAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyTitleAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyTitleAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.AssemblyTitleAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyTrademarkAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyTrademarkAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.AssemblyTrademarkAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyVersionAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Reflection.AssemblyVersionAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.AssemblyVersionAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.Binder | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.Binder | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.CerHashtable`2 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Reflection.ConstArray | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Reflection.ConstructorInfo | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.ConstructorInfo | [NullableAttribute(...)] | 0 | 1 | -| System.Reflection.ConstructorInfo | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.ConstructorInfo System.Reflection.Emit.RuntimeEnumBuilder.GetConstructorImpl(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo System.Reflection.Emit.RuntimeGenericTypeParameterBuilder.GetConstructorImpl(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo System.Reflection.Emit.RuntimeTypeBuilder.GetConstructorImpl(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo System.Reflection.Emit.SymbolType.GetConstructorImpl(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo System.Reflection.Emit.TypeBuilder.GetConstructor(System.Type,System.Reflection.ConstructorInfo) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Reflection.ConstructorInfo System.Reflection.Emit.TypeBuilder.GetConstructor(System.Type,System.Reflection.ConstructorInfo) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2055:UnrecognizedReflectionPattern | -| System.Reflection.ConstructorInfo System.Reflection.Emit.TypeBuilderInstantiation.GetConstructorImpl(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo System.Reflection.ModifiedType.GetConstructorImpl(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo System.Reflection.SignatureType.GetConstructorImpl(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo System.Reflection.TypeDelegator.GetConstructorImpl(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo System.Reflection.TypeDelegator.GetConstructorImpl(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.ConstructorInfo System.RuntimeType.GetConstructorImpl(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo System.Type.GetConstructor(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo System.Type.GetConstructor(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.ConstructorInfo System.Type.GetConstructor(System.Reflection.BindingFlags,System.Reflection.Binder,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo System.Type.GetConstructor(System.Reflection.BindingFlags,System.Reflection.Binder,System.Type[],System.Reflection.ParameterModifier[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.ConstructorInfo System.Type.GetConstructor(System.Reflection.BindingFlags,System.Type[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo System.Type.GetConstructor(System.Type[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 3 | -| System.Reflection.ConstructorInfo System.Type.GetConstructorImpl(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo System.Type.GetConstructorImpl(System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.ConstructorInfo System.Type.TypeInitializer | [NullableAttribute(...)] | 0 | 2 | -| System.Reflection.ConstructorInfo System.Type.get_TypeInitializer() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo System.Type.get_TypeInitializer() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.ConstructorInfo.ConstructorName | [NullableAttribute(...)] | 0 | 1 | -| System.Reflection.ConstructorInfo.TypeConstructorName | [NullableAttribute(...)] | 0 | 1 | -| System.Reflection.ConstructorInfo[] System.Reflection.Emit.RuntimeEnumBuilder.GetConstructors(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo[] System.Reflection.Emit.RuntimeGenericTypeParameterBuilder.GetConstructors(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo[] System.Reflection.Emit.RuntimeTypeBuilder.GetConstructors(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo[] System.Reflection.Emit.SymbolType.GetConstructors(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo[] System.Reflection.Emit.TypeBuilderInstantiation.GetConstructors(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo[] System.Reflection.ModifiedType.GetConstructors(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo[] System.Reflection.SignatureType.GetConstructors(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo[] System.Reflection.TypeDelegator.GetConstructors(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo[] System.RuntimeType.GetConstructors(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInfo[] System.Type.GetConstructors() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 3 | -| System.Reflection.ConstructorInfo[] System.Type.GetConstructors(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Reflection.ConstructorInvoker | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.ConstructorInvoker | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.CustomAttributeData | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.CustomAttributeData | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.CustomAttributeExtensions | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.CustomAttributeExtensions | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.CustomAttributeFormatException | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.CustomAttributeFormatException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.CustomAttributeFormatException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Reflection.CustomAttributeNamedArgument | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.CustomAttributeNamedArgument | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.CustomAttributeTypedArgument | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.CustomAttributeTypedArgument | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.DefaultMemberAttribute | [AttributeUsageAttribute(...)] | 0 | 1036 | -| System.Reflection.DefaultMemberAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.DefaultMemberAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.Emit.AssemblyBuilder | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.Emit.AssemblyBuilder | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.Emit.AssemblyBuilder System.Reflection.Emit.AssemblyBuilder.DefineDynamicAssembly(System.Reflection.AssemblyName,System.Reflection.Emit.AssemblyBuilderAccess) | [RequiresDynamicCodeAttribute(...)] | 0 | Defining a dynamic assembly requires dynamic code. | -| System.Reflection.Emit.AssemblyBuilder System.Reflection.Emit.AssemblyBuilder.DefineDynamicAssembly(System.Reflection.AssemblyName,System.Reflection.Emit.AssemblyBuilderAccess,System.Collections.Generic.IEnumerable<System.Reflection.Emit.CustomAttributeBuilder>) | [RequiresDynamicCodeAttribute(...)] | 0 | Defining a dynamic assembly requires dynamic code. | -| System.Reflection.Emit.ConstructorBuilder | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.Emit.ConstructorBuilder | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.Emit.ConstructorBuilder System.Reflection.Emit.RuntimeTypeBuilder.DefineConstructorNoLock(System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type[],System.Type[][],System.Type[][]) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Reflection.Emit.ConstructorBuilder System.Reflection.Emit.RuntimeTypeBuilder.DefineConstructorNoLock(System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type[],System.Type[][],System.Type[][]) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2082:UnrecognizedReflectionPattern | -| System.Reflection.Emit.ConstructorBuilder System.Reflection.Emit.RuntimeTypeBuilder.DefineTypeInitializerCore() | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Reflection.Emit.ConstructorBuilder System.Reflection.Emit.RuntimeTypeBuilder.DefineTypeInitializerCore() | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2082:UnrecognizedReflectionPattern | -| System.Reflection.Emit.CustomAttributeBuilder | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.Emit.CustomAttributeBuilder | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.Emit.DynamicILInfo | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.Emit.DynamicILInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.Emit.DynamicMethod | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.Emit.DynamicMethod | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.Emit.DynamicScope | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Reflection.Emit.EnumBuilder | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.Emit.EnumBuilder | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.Emit.EventBuilder | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.Emit.EventBuilder | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.Emit.FlowControl.Phi | [ObsoleteAttribute(...)] | 0 | FlowControl.Phi has been deprecated and is not supported. | -| System.Reflection.Emit.ILGenerator | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.Emit.ILGenerator | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.Emit.LocalBuilder | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.Emit.LocalBuilder | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.Emit.MethodBuilder | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.Emit.MethodBuilder | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.Emit.MethodBuilder System.Reflection.Emit.ModuleBuilder.DefinePInvokeMethod(System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet) | [RequiresUnreferencedCodeAttribute(...)] | 0 | P/Invoke marshalling may dynamically access members that could be trimmed. | -| System.Reflection.Emit.MethodBuilder System.Reflection.Emit.ModuleBuilder.DefinePInvokeMethod(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet) | [RequiresUnreferencedCodeAttribute(...)] | 0 | P/Invoke marshalling may dynamically access members that could be trimmed. | -| System.Reflection.Emit.MethodBuilder System.Reflection.Emit.ModuleBuilder.DefinePInvokeMethodCore(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet) | [RequiresUnreferencedCodeAttribute(...)] | 0 | P/Invoke marshalling may dynamically access members that could be trimmed. | -| System.Reflection.Emit.MethodBuilder System.Reflection.Emit.RuntimeModuleBuilder.DefinePInvokeMethodCore(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet) | [RequiresUnreferencedCodeAttribute(...)] | 0 | P/Invoke marshalling may dynamically access members that could be trimmed. | -| System.Reflection.Emit.MethodBuilder System.Reflection.Emit.RuntimeTypeBuilder.DefineMethodCore(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Reflection.Emit.MethodBuilder System.Reflection.Emit.RuntimeTypeBuilder.DefineMethodCore(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2082:UnrecognizedReflectionPattern | -| System.Reflection.Emit.MethodBuilder System.Reflection.Emit.RuntimeTypeBuilder.DefinePInvokeMethodCore(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet) | [RequiresUnreferencedCodeAttribute(...)] | 0 | P/Invoke marshalling may dynamically access members that could be trimmed. | -| System.Reflection.Emit.MethodBuilder System.Reflection.Emit.TypeBuilder.DefinePInvokeMethod(System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet) | [RequiresUnreferencedCodeAttribute(...)] | 0 | P/Invoke marshalling may dynamically access members that could be trimmed. | -| System.Reflection.Emit.MethodBuilder System.Reflection.Emit.TypeBuilder.DefinePInvokeMethod(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet) | [RequiresUnreferencedCodeAttribute(...)] | 0 | P/Invoke marshalling may dynamically access members that could be trimmed. | -| System.Reflection.Emit.MethodBuilder System.Reflection.Emit.TypeBuilder.DefinePInvokeMethod(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet) | [RequiresUnreferencedCodeAttribute(...)] | 0 | P/Invoke marshalling may dynamically access members that could be trimmed. | -| System.Reflection.Emit.MethodBuilder System.Reflection.Emit.TypeBuilder.DefinePInvokeMethodCore(System.String,System.String,System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][],System.Runtime.InteropServices.CallingConvention,System.Runtime.InteropServices.CharSet) | [RequiresUnreferencedCodeAttribute(...)] | 0 | P/Invoke marshalling may dynamically access members that could be trimmed. | -| System.Reflection.Emit.ModuleBuilder | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.Emit.ModuleBuilder | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.Emit.OpCode | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.Emit.OpCode | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.Emit.OpCodeType.Annotation | [ObsoleteAttribute(...)] | 0 | OpCodeType.Annotation has been deprecated and is not supported. | -| System.Reflection.Emit.OperandType.InlinePhi | [ObsoleteAttribute(...)] | 0 | OperandType.InlinePhi has been deprecated and is not supported. | -| System.Reflection.Emit.ParameterBuilder | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.Emit.ParameterBuilder | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.Emit.ParameterBuilder System.Reflection.Emit.DynamicMethod.DefineParameter(System.Int32,System.Reflection.ParameterAttributes,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.Emit.PropertyBuilder | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.Emit.PropertyBuilder | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.Emit.RuntimeConstructorBuilder System.Reflection.Emit.RuntimeTypeBuilder.DefineDefaultConstructorNoLock(System.Reflection.MethodAttributes) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Reflection.Emit.RuntimeConstructorBuilder System.Reflection.Emit.RuntimeTypeBuilder.DefineDefaultConstructorNoLock(System.Reflection.MethodAttributes) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2055:UnrecognizedReflectionPattern | -| System.Reflection.Emit.RuntimeConstructorBuilder System.Reflection.Emit.RuntimeTypeBuilder.DefineDefaultConstructorNoLock(System.Reflection.MethodAttributes) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2075:UnrecognizedReflectionPattern | -| System.Reflection.Emit.RuntimeEnumBuilder.m_typeBuilder | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Reflection.Emit.RuntimeMethodBuilder.m_containingType | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Reflection.Emit.RuntimeTypeBuilder | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Reflection.Emit.RuntimeTypeBuilder.m_bakedRuntimeType | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Reflection.Emit.RuntimeTypeBuilder.m_typeParent | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Reflection.Emit.SignatureHelper | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.Emit.SignatureHelper | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.Emit.SignatureHelper System.Reflection.Emit.SignatureHelper.GetMethodSigHelper(System.Reflection.Module,System.Reflection.CallingConventions,System.Type) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.Emit.SignatureHelper System.Reflection.Emit.SignatureHelper.GetMethodSigHelper(System.Reflection.Module,System.Type,System.Type[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.Emit.SignatureHelper System.Reflection.Emit.SignatureHelper.GetPropertySigHelper(System.Reflection.Module,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.Emit.SignatureHelper System.Reflection.Emit.SignatureHelper.GetPropertySigHelper(System.Reflection.Module,System.Type,System.Type[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.Emit.SignatureHelper System.Reflection.Emit.SignatureHelper.GetPropertySigHelper(System.Reflection.Module,System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.Emit.TypeBuilder | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.Emit.TypeBuilder | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.EventInfo | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.EventInfo | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.EventInfo System.Attribute.GetParentDefinition(System.Reflection.EventInfo) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Reflection.EventInfo System.Attribute.GetParentDefinition(System.Reflection.EventInfo) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2075:UnrecognizedReflectionPattern | -| System.Reflection.EventInfo System.Reflection.Emit.RuntimeEnumBuilder.GetEvent(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Reflection.EventInfo System.Reflection.Emit.RuntimeGenericTypeParameterBuilder.GetEvent(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Reflection.EventInfo System.Reflection.Emit.RuntimeTypeBuilder.GetEvent(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Reflection.EventInfo System.Reflection.Emit.SymbolType.GetEvent(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Reflection.EventInfo System.Reflection.Emit.TypeBuilderInstantiation.GetEvent(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Reflection.EventInfo System.Reflection.ModifiedType.GetEvent(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Reflection.EventInfo System.Reflection.SignatureType.GetEvent(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Reflection.EventInfo System.Reflection.TypeDelegator.GetEvent(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Reflection.EventInfo System.Reflection.TypeInfo.GetDeclaredEvent(System.String) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Reflection.EventInfo System.RuntimeType.GetEvent(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Reflection.EventInfo System.Type.GetEvent(System.String) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 2048 | -| System.Reflection.EventInfo System.Type.GetEvent(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Reflection.EventInfo[] System.Reflection.Emit.RuntimeEnumBuilder.GetEvents() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 2048 | -| System.Reflection.EventInfo[] System.Reflection.Emit.RuntimeEnumBuilder.GetEvents(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Reflection.EventInfo[] System.Reflection.Emit.RuntimeGenericTypeParameterBuilder.GetEvents() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 2048 | -| System.Reflection.EventInfo[] System.Reflection.Emit.RuntimeGenericTypeParameterBuilder.GetEvents(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Reflection.EventInfo[] System.Reflection.Emit.RuntimeTypeBuilder.GetEvents() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 2048 | -| System.Reflection.EventInfo[] System.Reflection.Emit.RuntimeTypeBuilder.GetEvents(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Reflection.EventInfo[] System.Reflection.Emit.SymbolType.GetEvents() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 2048 | -| System.Reflection.EventInfo[] System.Reflection.Emit.SymbolType.GetEvents(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Reflection.EventInfo[] System.Reflection.Emit.TypeBuilderInstantiation.GetEvents() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 2048 | -| System.Reflection.EventInfo[] System.Reflection.Emit.TypeBuilderInstantiation.GetEvents(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Reflection.EventInfo[] System.Reflection.ModifiedType.GetEvents() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 2048 | -| System.Reflection.EventInfo[] System.Reflection.ModifiedType.GetEvents(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Reflection.EventInfo[] System.Reflection.SignatureType.GetEvents() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 2048 | -| System.Reflection.EventInfo[] System.Reflection.SignatureType.GetEvents(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Reflection.EventInfo[] System.Reflection.TypeDelegator.GetEvents() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 2048 | -| System.Reflection.EventInfo[] System.Reflection.TypeDelegator.GetEvents(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Reflection.EventInfo[] System.RuntimeType.GetEvents(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Reflection.EventInfo[] System.Type.GetEvents() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 2048 | -| System.Reflection.EventInfo[] System.Type.GetEvents(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Reflection.ExceptionHandlingClause | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.ExceptionHandlingClause | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.FieldAttributes.NotSerialized | [ObsoleteAttribute(...)] | 0 | Formatter-based serialization is obsolete and should not be used. | -| System.Reflection.FieldInfo | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.FieldInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.FieldInfo System.Reflection.Emit.RuntimeEnumBuilder.GetField(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.FieldInfo System.Reflection.Emit.RuntimeGenericTypeParameterBuilder.GetField(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.FieldInfo System.Reflection.Emit.RuntimeModuleBuilder.GetField(System.String,System.Reflection.BindingFlags) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Fields might be removed | -| System.Reflection.FieldInfo System.Reflection.Emit.RuntimeModuleBuilder.ResolveField(System.Int32,System.Type[],System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.Reflection.FieldInfo System.Reflection.Emit.RuntimeTypeBuilder.GetField(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.FieldInfo System.Reflection.Emit.SymbolType.GetField(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.FieldInfo System.Reflection.Emit.TypeBuilder.GetField(System.Type,System.Reflection.FieldInfo) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Reflection.FieldInfo System.Reflection.Emit.TypeBuilder.GetField(System.Type,System.Reflection.FieldInfo) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2055:UnrecognizedReflectionPattern | -| System.Reflection.FieldInfo System.Reflection.Emit.TypeBuilderInstantiation.GetField(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.FieldInfo System.Reflection.IReflect.GetField(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.FieldInfo System.Reflection.ModifiedType.GetField(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.FieldInfo System.Reflection.Module.GetField(System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Fields might be removed | -| System.Reflection.FieldInfo System.Reflection.Module.GetField(System.String,System.Reflection.BindingFlags) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Fields might be removed | -| System.Reflection.FieldInfo System.Reflection.Module.ResolveField(System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.FieldInfo System.Reflection.Module.ResolveField(System.Int32) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.Reflection.FieldInfo System.Reflection.Module.ResolveField(System.Int32,System.Type[],System.Type[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.FieldInfo System.Reflection.Module.ResolveField(System.Int32,System.Type[],System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.Reflection.FieldInfo System.Reflection.RuntimeModule.GetField(System.String,System.Reflection.BindingFlags) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Fields might be removed | -| System.Reflection.FieldInfo System.Reflection.RuntimeModule.ResolveField(System.Int32,System.Type[],System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.Reflection.FieldInfo System.Reflection.RuntimeModule.ResolveLiteralField(System.Int32,System.Type[],System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.Reflection.FieldInfo System.Reflection.SignatureType.GetField(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.FieldInfo System.Reflection.TypeDelegator.GetField(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.FieldInfo System.Reflection.TypeInfo.GetDeclaredField(System.String) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.FieldInfo System.RuntimeType.GetField(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.FieldInfo System.Type.GetField(System.String) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 32 | -| System.Reflection.FieldInfo System.Type.GetField(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.FieldInfo[] System.Diagnostics.Tracing.ManifestBuilder.<CreateManifestString>g__GetEnumFields\|19_0(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Reflection.FieldInfo[] System.Diagnostics.Tracing.ManifestBuilder.<CreateManifestString>g__GetEnumFields\|19_0(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2070:UnrecognizedReflectionPattern | -| System.Reflection.FieldInfo[] System.Reflection.Emit.RuntimeEnumBuilder.GetFields(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.FieldInfo[] System.Reflection.Emit.RuntimeGenericTypeParameterBuilder.GetFields(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.FieldInfo[] System.Reflection.Emit.RuntimeModuleBuilder.GetFields(System.Reflection.BindingFlags) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Fields might be removed | -| System.Reflection.FieldInfo[] System.Reflection.Emit.RuntimeTypeBuilder.GetFields(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.FieldInfo[] System.Reflection.Emit.SymbolType.GetFields(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.FieldInfo[] System.Reflection.Emit.TypeBuilderInstantiation.GetFields(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.FieldInfo[] System.Reflection.IReflect.GetFields(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.FieldInfo[] System.Reflection.ModifiedType.GetFields(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.FieldInfo[] System.Reflection.Module.GetFields() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Fields might be removed | -| System.Reflection.FieldInfo[] System.Reflection.Module.GetFields(System.Reflection.BindingFlags) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Fields might be removed | -| System.Reflection.FieldInfo[] System.Reflection.RuntimeModule.GetFields(System.Reflection.BindingFlags) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Fields might be removed | -| System.Reflection.FieldInfo[] System.Reflection.SignatureType.GetFields(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.FieldInfo[] System.Reflection.TypeDelegator.GetFields(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.FieldInfo[] System.RuntimeType.GetFields(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.FieldInfo[] System.Type.GetFields() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 32 | -| System.Reflection.FieldInfo[] System.Type.GetFields(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Reflection.ICustomAttributeProvider | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.IReflect | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.IReflectableType | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.InterfaceMapping | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.InterfaceMapping | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.IntrospectionExtensions | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Reflection.InvalidFilterCriteriaException | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.InvalidFilterCriteriaException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.InvalidFilterCriteriaException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Reflection.LocalVariableInfo | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.LocalVariableInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.ManifestResourceInfo | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.ManifestResourceInfo | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.MemberInfo | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.MemberInfo | [NullableAttribute(...)] | 0 | 1 | -| System.Reflection.MemberInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.MemberInfo System.Reflection.Emit.RuntimeModuleBuilder.ResolveMember(System.Int32,System.Type[],System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.Reflection.MemberInfo System.Reflection.Module.ResolveMember(System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.MemberInfo System.Reflection.Module.ResolveMember(System.Int32) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.Reflection.MemberInfo System.Reflection.Module.ResolveMember(System.Int32,System.Type[],System.Type[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.MemberInfo System.Reflection.Module.ResolveMember(System.Int32,System.Type[],System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.Reflection.MemberInfo System.Reflection.RuntimeModule.ResolveMember(System.Int32,System.Type[],System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.Reflection.MemberInfo System.Type.GetMemberWithSameMetadataDefinitionAs(System.Reflection.MemberInfo) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Reflection.MemberInfo System.Type.GetMemberWithSameMetadataDefinitionAs(System.Reflection.MemberInfo) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2085:UnrecognizedReflectionPattern | -| System.Reflection.MemberInfo[] System.Reflection.Emit.RuntimeEnumBuilder.GetMember(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.Reflection.Emit.RuntimeEnumBuilder.GetMembers(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.Reflection.Emit.RuntimeGenericTypeParameterBuilder.GetMember(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.Reflection.Emit.RuntimeGenericTypeParameterBuilder.GetMembers(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.Reflection.Emit.RuntimeTypeBuilder.GetMember(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.Reflection.Emit.RuntimeTypeBuilder.GetMembers(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.Reflection.Emit.SymbolType.GetMember(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.Reflection.Emit.SymbolType.GetMembers(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.Reflection.Emit.TypeBuilderInstantiation.GetMember(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.Reflection.Emit.TypeBuilderInstantiation.GetMembers(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.Reflection.IReflect.GetMember(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.Reflection.IReflect.GetMembers(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.Reflection.ModifiedType.GetMember(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.Reflection.ModifiedType.GetMembers(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.Reflection.SignatureType.FindMembers(System.Reflection.MemberTypes,System.Reflection.BindingFlags,System.Reflection.MemberFilter,System.Object) | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Reflection.MemberInfo[] System.Reflection.SignatureType.GetDefaultMembers() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 2731 | -| System.Reflection.MemberInfo[] System.Reflection.SignatureType.GetMember(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.Reflection.SignatureType.GetMember(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.Reflection.SignatureType.GetMembers(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.Reflection.TypeDelegator.GetMember(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.Reflection.TypeDelegator.GetMembers(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.RuntimeType.GetDefaultMembers() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 2731 | -| System.Reflection.MemberInfo[] System.RuntimeType.GetMember(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.RuntimeType.GetMembers(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.Type.FindMembers(System.Reflection.MemberTypes,System.Reflection.BindingFlags,System.Reflection.MemberFilter,System.Object) | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Reflection.MemberInfo[] System.Type.FindMembers(System.Reflection.MemberTypes,System.Reflection.BindingFlags,System.Reflection.MemberFilter,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.MemberInfo[] System.Type.GetDefaultMembers() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 2731 | -| System.Reflection.MemberInfo[] System.Type.GetMember(System.String) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 2731 | -| System.Reflection.MemberInfo[] System.Type.GetMember(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.Type.GetMember(System.String,System.Reflection.MemberTypes,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.MemberInfo[] System.Type.GetMembers() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 2731 | -| System.Reflection.MemberInfo[] System.Type.GetMembers(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8191 | -| System.Reflection.Metadata.MetadataUpdateHandlerAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Reflection.Metadata.MetadataUpdateHandlerAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.Metadata.MetadataUpdateHandlerAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.MetadataEnumResult | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Reflection.MetadataEnumResult.smallResult | [FixedBufferAttribute(...)] | 0 | System.Int32 | -| System.Reflection.MetadataEnumResult.smallResult | [FixedBufferAttribute(...)] | 1 | 16 | -| System.Reflection.MethodBase | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.MethodBase | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.MethodBase System.DefaultBinder.BindToMethod(System.Reflection.BindingFlags,System.Reflection.MethodBase[],System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],System.Object) | [UnconditionalSuppressMessageAttribute(...)] | 0 | AotAnalysis | -| System.Reflection.MethodBase System.DefaultBinder.BindToMethod(System.Reflection.BindingFlags,System.Reflection.MethodBase[],System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],System.Object) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL3050:RequiresDynamicCode | -| System.Reflection.MethodBase System.Diagnostics.StackFrame.GetMethod() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Metadata for the method might be incomplete or removed | -| System.Reflection.MethodBase System.Exception.get_TargetSite() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Metadata for the method might be incomplete or removed | -| System.Reflection.MethodBase System.Reflection.Binder.BindToMethod(System.Reflection.BindingFlags,System.Reflection.MethodBase[],System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.MethodBase System.Reflection.Emit.RuntimeModuleBuilder.GetGenericMethodBaseDefinition(System.Reflection.MethodBase) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Reflection.MethodBase System.Reflection.Emit.RuntimeModuleBuilder.GetGenericMethodBaseDefinition(System.Reflection.MethodBase) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Reflection.MethodBase System.Reflection.Emit.RuntimeModuleBuilder.ResolveMethod(System.Int32,System.Type[],System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.Reflection.MethodBase System.Reflection.MethodBase.GetCurrentMethod() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Metadata for the method might be incomplete or removed | -| System.Reflection.MethodBase System.Reflection.Module.ResolveMethod(System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.MethodBase System.Reflection.Module.ResolveMethod(System.Int32) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.Reflection.MethodBase System.Reflection.Module.ResolveMethod(System.Int32,System.Type[],System.Type[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.MethodBase System.Reflection.Module.ResolveMethod(System.Int32,System.Type[],System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.Reflection.MethodBase System.Reflection.RuntimeModule.ResolveMethod(System.Int32,System.Type[],System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.Reflection.MethodBase System.RuntimeType.GetMethodBase(System.Reflection.RuntimeModule,System.Int32) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.Reflection.MethodBase System.RuntimeType.GetMethodBase(System.RuntimeType,System.RuntimeMethodHandleInternal) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Reflection.MethodBase System.RuntimeType.GetMethodBase(System.RuntimeType,System.RuntimeMethodHandleInternal) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2070:UnrecognizedReflectionPattern | -| System.Reflection.MethodBase System.Type.DeclaringMethod | [NullableAttribute(...)] | 0 | 2 | -| System.Reflection.MethodBase System.Type.get_DeclaringMethod() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.MethodBase.ArgumentData`1 | [InlineArrayAttribute(...)] | 0 | 4 | -| System.Reflection.MethodBase.StackAllocatedArguments | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Reflection.MethodBase.StackAllocatedArguments | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Reflection.MethodBase.StackAllocatedArguments | [ObsoleteAttribute(...)] | 1 | True | -| System.Reflection.MethodBase.StackAllocatedArgumentsWithCopyBack | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Reflection.MethodBase.StackAllocatedArgumentsWithCopyBack | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Reflection.MethodBase.StackAllocatedArgumentsWithCopyBack | [ObsoleteAttribute(...)] | 1 | True | -| System.Reflection.MethodBase.StackAllocatedByRefs | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Reflection.MethodBase.StackAllocatedByRefs | [InlineArrayAttribute(...)] | 0 | 4 | -| System.Reflection.MethodBase.StackAllocatedByRefs | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Reflection.MethodBase.StackAllocatedByRefs | [ObsoleteAttribute(...)] | 1 | True | -| System.Reflection.MethodBase[] | [NullableAttribute(...)] | 0 | 1 | -| System.Reflection.MethodBody | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.MethodBody | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.MethodBody System.Reflection.MethodBase.GetMethodBody() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming may change method bodies. For example it can change some instructions, remove branches or local variables. | -| System.Reflection.MethodBody System.Reflection.RuntimeConstructorInfo.GetMethodBody() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming may change method bodies. For example it can change some instructions, remove branches or local variables. | -| System.Reflection.MethodBody System.Reflection.RuntimeMethodInfo.GetMethodBody() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming may change method bodies. For example it can change some instructions, remove branches or local variables. | -| System.Reflection.MethodInfo | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.MethodInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.MethodInfo System.Reflection.Assembly.EntryPoint | [NullableAttribute(...)] | 0 | 2 | -| System.Reflection.MethodInfo System.Reflection.Assembly.get_EntryPoint() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.MethodInfo System.Reflection.Emit.AssemblyBuilder.EntryPoint | [NullableAttribute(...)] | 0 | 2 | -| System.Reflection.MethodInfo System.Reflection.Emit.AssemblyBuilder.get_EntryPoint() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.MethodInfo System.Reflection.Emit.MethodBuilderInstantiation.MakeGenericMethod(System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | If some of the generic arguments are annotated (either with DynamicallyAccessedMembersAttribute, or generic constraints), trimming can't validate that the requirements of those annotations are met. | -| System.Reflection.MethodInfo System.Reflection.Emit.MethodOnTypeBuilderInstantiation.MakeGenericMethod(System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | If some of the generic arguments are annotated (either with DynamicallyAccessedMembersAttribute, or generic constraints), trimming can't validate that the requirements of those annotations are met. | -| System.Reflection.MethodInfo System.Reflection.Emit.RuntimeEnumBuilder.GetMethodImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo System.Reflection.Emit.RuntimeGenericTypeParameterBuilder.GetMethodImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo System.Reflection.Emit.RuntimeMethodBuilder.MakeGenericMethod(System.Type[]) | [RequiresDynamicCodeAttribute(...)] | 0 | The native code for this instantiation might not be available at runtime. | -| System.Reflection.MethodInfo System.Reflection.Emit.RuntimeMethodBuilder.MakeGenericMethod(System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | If some of the generic arguments are annotated (either with DynamicallyAccessedMembersAttribute, or generic constraints), trimming can't validate that the requirements of those annotations are met. | -| System.Reflection.MethodInfo System.Reflection.Emit.RuntimeModuleBuilder.GetMethodImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Methods might be removed | -| System.Reflection.MethodInfo System.Reflection.Emit.RuntimeTypeBuilder.GetMethodImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo System.Reflection.Emit.SymbolType.GetMethodImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo System.Reflection.Emit.TypeBuilder.GetMethod(System.Type,System.Reflection.MethodInfo) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Reflection.MethodInfo System.Reflection.Emit.TypeBuilder.GetMethod(System.Type,System.Reflection.MethodInfo) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2055:UnrecognizedReflectionPattern | -| System.Reflection.MethodInfo System.Reflection.Emit.TypeBuilderInstantiation.GetMethodImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo System.Reflection.IReflect.GetMethod(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo System.Reflection.IReflect.GetMethod(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo System.Reflection.IReflect.GetMethod(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type[],System.Reflection.ParameterModifier[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.MethodInfo System.Reflection.MethodInfo.MakeGenericMethod(System.Type[]) | [RequiresDynamicCodeAttribute(...)] | 0 | The native code for this instantiation might not be available at runtime. | -| System.Reflection.MethodInfo System.Reflection.MethodInfo.MakeGenericMethod(System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | If some of the generic arguments are annotated (either with DynamicallyAccessedMembersAttribute, or generic constraints), trimming can't validate that the requirements of those annotations are met. | -| System.Reflection.MethodInfo System.Reflection.ModifiedType.GetMethodImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo System.Reflection.Module.GetMethod(System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Methods might be removed | -| System.Reflection.MethodInfo System.Reflection.Module.GetMethod(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.MethodInfo System.Reflection.Module.GetMethod(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Methods might be removed | -| System.Reflection.MethodInfo System.Reflection.Module.GetMethod(System.String,System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Methods might be removed | -| System.Reflection.MethodInfo System.Reflection.Module.GetMethodImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.MethodInfo System.Reflection.Module.GetMethodImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Methods might be removed | -| System.Reflection.MethodInfo System.Reflection.RuntimeMethodInfo.MakeGenericMethod(System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | If some of the generic arguments are annotated (either with DynamicallyAccessedMembersAttribute, or generic constraints), trimming can't validate that the requirements of those annotations are met. | -| System.Reflection.MethodInfo System.Reflection.RuntimeModule.GetMethodImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Methods might be removed because Module methods can't currently be annotated for dynamic access. | -| System.Reflection.MethodInfo System.Reflection.RuntimeModule.GetMethodInternal(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Methods might be removed because Module methods can't currently be annotated for dynamic access. | -| System.Reflection.MethodInfo System.Reflection.SignatureType.GetMethodImpl(System.String,System.Int32,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo System.Reflection.SignatureType.GetMethodImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo System.Reflection.TypeDelegator.GetMethodImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo System.Reflection.TypeDelegator.GetMethodImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.MethodInfo System.Reflection.TypeInfo.GetDeclaredMethod(System.String) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo System.RuntimeType.GetMethodImpl(System.String,System.Int32,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo System.RuntimeType.GetMethodImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo System.Type.GetMethod(System.String) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8 | -| System.Reflection.MethodInfo System.Type.GetMethod(System.String,System.Int32,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo System.Type.GetMethod(System.String,System.Int32,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.MethodInfo System.Type.GetMethod(System.String,System.Int32,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo System.Type.GetMethod(System.String,System.Int32,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type[],System.Reflection.ParameterModifier[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.MethodInfo System.Type.GetMethod(System.String,System.Int32,System.Type[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8 | -| System.Reflection.MethodInfo System.Type.GetMethod(System.String,System.Int32,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8 | -| System.Reflection.MethodInfo System.Type.GetMethod(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo System.Type.GetMethod(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo System.Type.GetMethod(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.MethodInfo System.Type.GetMethod(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo System.Type.GetMethod(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type[],System.Reflection.ParameterModifier[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.MethodInfo System.Type.GetMethod(System.String,System.Reflection.BindingFlags,System.Type[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo System.Type.GetMethod(System.String,System.Type[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8 | -| System.Reflection.MethodInfo System.Type.GetMethod(System.String,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8 | -| System.Reflection.MethodInfo System.Type.GetMethodImpl(System.String,System.Int32,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo System.Type.GetMethodImpl(System.String,System.Int32,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.MethodInfo System.Type.GetMethodImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo System.Type.GetMethodImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Reflection.CallingConventions,System.Type[],System.Reflection.ParameterModifier[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.MethodInfo[] System.Diagnostics.StackTrace.<TryResolveStateMachineMethod>g__GetDeclaredMethods\|28_0(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Reflection.MethodInfo[] System.Diagnostics.StackTrace.<TryResolveStateMachineMethod>g__GetDeclaredMethods\|28_0(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2070:UnrecognizedReflectionPattern | -| System.Reflection.MethodInfo[] System.Reflection.Emit.RuntimeEnumBuilder.GetMethods(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo[] System.Reflection.Emit.RuntimeGenericTypeParameterBuilder.GetMethods(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo[] System.Reflection.Emit.RuntimeModuleBuilder.GetMethods(System.Reflection.BindingFlags) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Methods might be removed | -| System.Reflection.MethodInfo[] System.Reflection.Emit.RuntimeTypeBuilder.GetMethods(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo[] System.Reflection.Emit.SymbolType.GetMethods(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo[] System.Reflection.Emit.TypeBuilderInstantiation.GetMethods(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo[] System.Reflection.EventInfo.GetOtherMethods() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.MethodInfo[] System.Reflection.EventInfo.GetOtherMethods(System.Boolean) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.MethodInfo[] System.Reflection.IReflect.GetMethods(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo[] System.Reflection.ModifiedType.GetMethods(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo[] System.Reflection.Module.GetMethods() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Methods might be removed | -| System.Reflection.MethodInfo[] System.Reflection.Module.GetMethods(System.Reflection.BindingFlags) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Methods might be removed | -| System.Reflection.MethodInfo[] System.Reflection.PropertyInfo.GetAccessors() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.MethodInfo[] System.Reflection.PropertyInfo.GetAccessors(System.Boolean) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.MethodInfo[] System.Reflection.RuntimeModule.GetMethods(System.Reflection.BindingFlags) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Methods might be removed | -| System.Reflection.MethodInfo[] System.Reflection.SignatureType.GetMethods(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo[] System.Reflection.TypeDelegator.GetMethods(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo[] System.Reflection.TypeInfo.<GetDeclaredMethods>g__GetDeclaredOnlyMethods\|10_0(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Reflection.MethodInfo[] System.Reflection.TypeInfo.<GetDeclaredMethods>g__GetDeclaredOnlyMethods\|10_0(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2070:UnrecognizedReflectionPattern | -| System.Reflection.MethodInfo[] System.RuntimeType.GetMethods(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInfo[] System.Type.GetMethods() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8 | -| System.Reflection.MethodInfo[] System.Type.GetMethods(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Reflection.MethodInvoker | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.MethodInvoker | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.MethodInvoker System.Reflection.MethodInvoker.Create(System.Reflection.MethodBase) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.Missing.Value | [NullableAttribute(...)] | 0 | 1 | -| System.Reflection.Module | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.Module | [NullableAttribute(...)] | 0 | 2 | -| System.Reflection.Module | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.Module System.Reflection.Assembly.LoadModule(System.String,System.Byte[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded module depends on might be removed | -| System.Reflection.Module System.Reflection.Assembly.LoadModule(System.String,System.Byte[],System.Byte[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded module depends on might be removed | -| System.Reflection.Module System.Reflection.ModuleResolveEventHandler.Invoke(System.Object,System.ResolveEventArgs) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.NullabilityInfo | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.NullabilityInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.NullabilityInfo System.Reflection.NullabilityInfo.ElementType | [NullableAttribute(...)] | 0 | 2 | -| System.Reflection.NullabilityInfo System.Reflection.NullabilityInfo.get_ElementType() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.NullabilityInfoContext | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.NullabilityInfoContext | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.ObfuscateAssemblyAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Reflection.ObfuscationAttribute | [AttributeUsageAttribute(...)] | 0 | 8157 | -| System.Reflection.ObfuscationAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.ObfuscationAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.ParameterInfo | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.ParameterInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.ParameterInfo.ClassImpl | [NullableAttribute(...)] | 0 | 2 | -| System.Reflection.ParameterInfo.DefaultValueImpl | [NullableAttribute(...)] | 0 | 2 | -| System.Reflection.ParameterInfo.NameImpl | [NullableAttribute(...)] | 0 | 2 | -| System.Reflection.ParameterInfo[] System.Reflection.MethodBase.GetParameters() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.ParameterInfo[] System.Reflection.PropertyInfo.GetIndexParameters() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.ParameterModifier | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Reflection.ParameterModifier[] | [NullableAttribute(...)] | 0 | 2 | -| System.Reflection.Pointer | [CLSCompliantAttribute(...)] | 0 | False | -| System.Reflection.ProcessorArchitecture System.Reflection.AssemblyName.ProcessorArchitecture | [ObsoleteAttribute(...)] | 0 | AssemblyName members HashAlgorithm, ProcessorArchitecture, and VersionCompatibility are obsolete and not supported. | -| System.Reflection.PropertyInfo | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.PropertyInfo | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.PropertyInfo System.Attribute.GetParentDefinition(System.Reflection.PropertyInfo,System.Type[]) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Reflection.PropertyInfo System.Attribute.GetParentDefinition(System.Reflection.PropertyInfo,System.Type[]) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2075:UnrecognizedReflectionPattern | -| System.Reflection.PropertyInfo System.Reflection.Binder.SelectProperty(System.Reflection.BindingFlags,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.PropertyInfo System.Reflection.Emit.RuntimeEnumBuilder.GetPropertyImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo System.Reflection.Emit.RuntimeGenericTypeParameterBuilder.GetPropertyImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo System.Reflection.Emit.RuntimeTypeBuilder.GetPropertyImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo System.Reflection.Emit.SymbolType.GetPropertyImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo System.Reflection.Emit.TypeBuilderInstantiation.GetPropertyImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo System.Reflection.IReflect.GetProperty(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo System.Reflection.IReflect.GetProperty(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo System.Reflection.IReflect.GetProperty(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.PropertyInfo System.Reflection.ModifiedType.GetPropertyImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo System.Reflection.SignatureType.GetPropertyImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo System.Reflection.TypeDelegator.GetPropertyImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo System.Reflection.TypeDelegator.GetPropertyImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.PropertyInfo System.Reflection.TypeInfo.GetDeclaredProperty(System.String) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo System.RuntimeType.GetPropertyImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo System.Type.GetProperty(System.String) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 512 | -| System.Reflection.PropertyInfo System.Type.GetProperty(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo System.Type.GetProperty(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo System.Type.GetProperty(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.PropertyInfo System.Type.GetProperty(System.String,System.Type) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 512 | -| System.Reflection.PropertyInfo System.Type.GetProperty(System.String,System.Type) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.PropertyInfo System.Type.GetProperty(System.String,System.Type) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Reflection.PropertyInfo System.Type.GetProperty(System.String,System.Type) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2085:UnrecognizedReflectionPattern | -| System.Reflection.PropertyInfo System.Type.GetProperty(System.String,System.Type,System.Type[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 512 | -| System.Reflection.PropertyInfo System.Type.GetProperty(System.String,System.Type,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 512 | -| System.Reflection.PropertyInfo System.Type.GetProperty(System.String,System.Type,System.Type[],System.Reflection.ParameterModifier[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.PropertyInfo System.Type.GetProperty(System.String,System.Type[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 512 | -| System.Reflection.PropertyInfo System.Type.GetPropertyImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[]) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo System.Type.GetPropertyImpl(System.String,System.Reflection.BindingFlags,System.Reflection.Binder,System.Type,System.Type[],System.Reflection.ParameterModifier[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.PropertyInfo[] | [NullableAttribute(...)] | 0 | 1 | -| System.Reflection.PropertyInfo[] System.Reflection.Emit.RuntimeEnumBuilder.GetProperties(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo[] System.Reflection.Emit.RuntimeGenericTypeParameterBuilder.GetProperties(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo[] System.Reflection.Emit.RuntimeTypeBuilder.GetProperties(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo[] System.Reflection.Emit.SymbolType.GetProperties(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo[] System.Reflection.Emit.TypeBuilderInstantiation.GetProperties(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo[] System.Reflection.IReflect.GetProperties(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo[] System.Reflection.ModifiedType.GetProperties(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo[] System.Reflection.SignatureType.GetProperties(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo[] System.Reflection.TypeDelegator.GetProperties(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo[] System.RuntimeType.GetProperties(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.PropertyInfo[] System.Type.GetProperties() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 512 | -| System.Reflection.PropertyInfo[] System.Type.GetProperties(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Reflection.ReflectionContext | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.ReflectionContext | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.ReflectionTypeLoadException | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.ReflectionTypeLoadException | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.ReflectionTypeLoadException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Reflection.RuntimeAssembly System.Runtime.Loader.AssemblyLoadContext.InternalLoadFromPath(System.String,System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Reflection.RuntimeAssembly System.Runtime.Loader.AssemblyLoadContext.InvokeResolveEvent(System.ResolveEventHandler,System.Reflection.RuntimeAssembly,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 0 | SingleFile | -| System.Reflection.RuntimeAssembly System.Runtime.Loader.AssemblyLoadContext.InvokeResolveEvent(System.ResolveEventHandler,System.Reflection.RuntimeAssembly,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL3000: Avoid accessing Assembly file path when publishing as a single file | -| System.Reflection.RuntimeFieldInfo[] System.RuntimeType.RuntimeTypeCache.MemberInfoCache`1.PopulateFields(System.RuntimeType.RuntimeTypeCache.Filter) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Reflection.RuntimeFieldInfo[] System.RuntimeType.RuntimeTypeCache.MemberInfoCache`1.PopulateFields(System.RuntimeType.RuntimeTypeCache.Filter) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2075:UnrecognizedReflectionPattern | -| System.Reflection.RuntimeMethodInfo System.Reflection.Associates.AssignAssociates(System.Int32,System.RuntimeType,System.RuntimeType) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Reflection.RuntimeMethodInfo System.Reflection.Associates.AssignAssociates(System.Int32,System.RuntimeType,System.RuntimeType) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Reflection.RuntimeReflectionExtensions | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.RuntimeReflectionExtensions | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.StrongNameKeyPair | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.StrongNameKeyPair | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.StrongNameKeyPair | [ObsoleteAttribute(...)] | 0 | Strong name signing is not supported and throws PlatformNotSupportedException. | -| System.Reflection.StrongNameKeyPair System.Reflection.AssemblyName.KeyPair | [ObsoleteAttribute(...)] | 0 | Strong name signing is not supported and throws PlatformNotSupportedException. | -| System.Reflection.TargetException | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.TargetException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.TargetException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Reflection.TargetInvocationException | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.TargetInvocationException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.TargetInvocationException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Reflection.TargetParameterCountException | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.TargetParameterCountException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.TargetParameterCountException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Reflection.TypeAttributes.Serializable | [ObsoleteAttribute(...)] | 0 | Formatter-based serialization is obsolete and should not be used. | -| System.Reflection.TypeDelegator | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.TypeDelegator | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.TypeDelegator.typeImpl | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Reflection.TypeInfo | [NotNullWhenAttribute(...)] | 0 | True | -| System.Reflection.TypeInfo | [NullableAttribute(...)] | 0 | 0 | -| System.Reflection.TypeInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.TypeInfo System.Reflection.Emit.RuntimeTypeBuilder.CreateTypeNoLock() | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Reflection.TypeInfo System.Reflection.Emit.RuntimeTypeBuilder.CreateTypeNoLock() | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2068:UnrecognizedReflectionPattern | -| System.Reflection.TypeInfo System.Reflection.Emit.RuntimeTypeBuilder.CreateTypeNoLock() | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2069:UnrecognizedReflectionPattern | -| System.Reflection.TypeInfo System.Reflection.Emit.RuntimeTypeBuilder.CreateTypeNoLock() | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2083:UnrecognizedReflectionPattern | -| System.Reflection.TypeInfo System.Reflection.IntrospectionExtensions.GetTypeInfo(System.Type) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Reflection.TypeInfo System.Reflection.IntrospectionExtensions.GetTypeInfo(System.Type) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.TypeInfo System.Reflection.TypeInfo.GetDeclaredNestedType(System.String) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 384 | -| System.Reflection.TypeNameParser | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Reflection.TypeNameParser | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Reflection.TypeNameParser | [ObsoleteAttribute(...)] | 1 | True | -| System.ResolveEventArgs | [NullableAttribute(...)] | 0 | 0 | -| System.ResolveEventArgs | [NullableAttribute(...)] | 0 | 1 | -| System.ResolveEventArgs | [NullableContextAttribute(...)] | 0 | 1 | -| System.Resources.MissingManifestResourceException | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Resources.MissingManifestResourceException | [NullableAttribute(...)] | 0 | 0 | -| System.Resources.MissingManifestResourceException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Resources.MissingManifestResourceException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Resources.MissingSatelliteAssemblyException | [NullableAttribute(...)] | 0 | 0 | -| System.Resources.MissingSatelliteAssemblyException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Resources.MissingSatelliteAssemblyException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Resources.NeutralResourcesLanguageAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Resources.NeutralResourcesLanguageAttribute | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Resources.NeutralResourcesLanguageAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Resources.NeutralResourcesLanguageAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Resources.ResourceManager | [NullableAttribute(...)] | 0 | 0 | -| System.Resources.ResourceManager | [NullableContextAttribute(...)] | 0 | 1 | -| System.Resources.ResourceManager.MainAssembly | [NullableAttribute(...)] | 0 | 2 | -| System.Resources.ResourceManager._userResourceSet | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Resources.ResourceReader.s_binaryFormatterType | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1 | -| System.Resources.ResourceSet | [NullableAttribute(...)] | 0 | 0 | -| System.Resources.ResourceSet | [NullableContextAttribute(...)] | 0 | 1 | -| System.Resources.ResourceSet System.Resources.ManifestBasedResourceGroveler.InternalGetResourceSetFromSerializedData(System.IO.Stream,System.String,System.String,System.Resources.ResourceManager.ResourceManagerMediator) | [RequiresUnreferencedCodeAttribute(...)] | 0 | The CustomResourceTypesSupport feature switch has been enabled for this app which is being trimmed. Custom readers as well as custom objects on the resources file are not observable by the trimmer and so required assemblies, types and members may be removed. | -| System.Resources.ResourceSet.Reader | [NullableAttribute(...)] | 0 | 2 | -| System.Resources.SatelliteContractVersionAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Resources.SatelliteContractVersionAttribute | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Resources.SatelliteContractVersionAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Resources.SatelliteContractVersionAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.AmbiguousImplementationException | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.AmbiguousImplementationException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.AmbiguousImplementationException | [TypeForwardedFromAttribute(...)] | 0 | System.Runtime, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| System.Runtime.AssemblyTargetedPatchBandAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Runtime.AssemblyTargetedPatchBandAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.AssemblyTargetedPatchBandAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.AccessedThroughPropertyAttribute | [AttributeUsageAttribute(...)] | 0 | 256 | -| System.Runtime.CompilerServices.AccessedThroughPropertyAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.AccessedThroughPropertyAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.AsyncIteratorMethodBuilder | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.AsyncIteratorMethodBuilder | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.AsyncIteratorStateMachineAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Runtime.CompilerServices.AsyncMethodBuilderAttribute | [AttributeUsageAttribute(...)] | 0 | 5212 | -| System.Runtime.CompilerServices.AsyncMethodBuilderAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.AsyncMethodBuilderAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.AsyncStateMachineAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Runtime.CompilerServices.AsyncTaskMethodBuilder | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.AsyncTaskMethodBuilder | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1 | [DebuggerDisplayAttribute(...)] | 0 | {DebuggerDisplay,nq} | -| System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.AsyncVoidMethodBuilder | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.AsyncVoidMethodBuilder | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.CallerArgumentExpressionAttribute | [AttributeUsageAttribute(...)] | 0 | 2048 | -| System.Runtime.CompilerServices.CallerArgumentExpressionAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.CallerArgumentExpressionAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.CallerFilePathAttribute | [AttributeUsageAttribute(...)] | 0 | 2048 | -| System.Runtime.CompilerServices.CallerLineNumberAttribute | [AttributeUsageAttribute(...)] | 0 | 2048 | -| System.Runtime.CompilerServices.CallerMemberNameAttribute | [AttributeUsageAttribute(...)] | 0 | 2048 | -| System.Runtime.CompilerServices.CollectionBuilderAttribute | [AttributeUsageAttribute(...)] | 0 | 1036 | -| System.Runtime.CompilerServices.CollectionBuilderAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.CollectionBuilderAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.CompExactlyDependsOnAttribute | [AttributeUsageAttribute(...)] | 0 | 96 | -| System.Runtime.CompilerServices.CompilationRelaxationsAttribute | [AttributeUsageAttribute(...)] | 0 | 71 | -| System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute | [AttributeUsageAttribute(...)] | 0 | 32767 | -| System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.CompilerGeneratedAttribute | [AttributeUsageAttribute(...)] | 0 | 32767 | -| System.Runtime.CompilerServices.CompilerGlobalScopeAttribute | [AttributeUsageAttribute(...)] | 0 | 4 | -| System.Runtime.CompilerServices.ConditionalWeakTable<!0,!1>.CreateValueCallback | [NullableAttribute(...)] | 0 | [1,0,0] | -| System.Runtime.CompilerServices.ConditionalWeakTable`2 | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.ConditionalWeakTable`2 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.ConditionalWeakTable`2.CreateValueCallback | [NullableContextAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.ContractHelper | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.ContractHelper | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.CompilerServices.ContractHelper.InternalContractFailed | [NullableAttribute(...)] | 0 | [2,1] | -| System.Runtime.CompilerServices.CreateNewOnMetadataUpdateAttribute | [AttributeUsageAttribute(...)] | 0 | 12 | -| System.Runtime.CompilerServices.CustomConstantAttribute | [AttributeUsageAttribute(...)] | 0 | 2304 | -| System.Runtime.CompilerServices.CustomConstantAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.CustomConstantAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.CompilerServices.DateTimeConstantAttribute | [AttributeUsageAttribute(...)] | 0 | 2304 | -| System.Runtime.CompilerServices.DateTimeConstantAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.DateTimeConstantAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.DecimalConstantAttribute | [AttributeUsageAttribute(...)] | 0 | 2304 | -| System.Runtime.CompilerServices.DefaultDependencyAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.DefaultInterpolatedStringHandler | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Runtime.CompilerServices.DefaultInterpolatedStringHandler | [InterpolatedStringHandlerArgumentAttribute(...)] | 0 | [provider,initialBuffer] | -| System.Runtime.CompilerServices.DefaultInterpolatedStringHandler | [InterpolatedStringHandlerArgumentAttribute(...)] | 0 | provider | -| System.Runtime.CompilerServices.DefaultInterpolatedStringHandler | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.DefaultInterpolatedStringHandler | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.CompilerServices.DefaultInterpolatedStringHandler | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Runtime.CompilerServices.DefaultInterpolatedStringHandler | [ObsoleteAttribute(...)] | 1 | True | -| System.Runtime.CompilerServices.DependencyAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.DependencyAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.DependencyAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.DisablePrivateReflectionAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.DisablePrivateReflectionAttribute | [ObsoleteAttribute(...)] | 0 | DisablePrivateReflectionAttribute has no effect in .NET 6.0+. | -| System.Runtime.CompilerServices.DisableRuntimeMarshallingAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.DiscardableAttribute | [AttributeUsageAttribute(...)] | 0 | 32767 | -| System.Runtime.CompilerServices.EnumeratorCancellationAttribute | [AttributeUsageAttribute(...)] | 0 | 2048 | -| System.Runtime.CompilerServices.ExtensionAttribute | [AttributeUsageAttribute(...)] | 0 | 69 | -| System.Runtime.CompilerServices.FixedAddressValueTypeAttribute | [AttributeUsageAttribute(...)] | 0 | 256 | -| System.Runtime.CompilerServices.FixedBufferAttribute | [AttributeUsageAttribute(...)] | 0 | 256 | -| System.Runtime.CompilerServices.FixedBufferAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.FixedBufferAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.IAsyncStateMachine | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.ICastable | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.CompilerServices.INotifyCompletion | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.IStrongBox | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.CompilerServices.ITuple | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Runtime.CompilerServices.ITuple | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.CompilerServices.IndexerNameAttribute | [AttributeUsageAttribute(...)] | 0 | 128 | -| System.Runtime.CompilerServices.InlineArrayAttribute | [AttributeUsageAttribute(...)] | 0 | 8 | -| System.Runtime.CompilerServices.InternalsVisibleToAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.InternalsVisibleToAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.InternalsVisibleToAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.InterpolatedStringHandlerArgumentAttribute | [AttributeUsageAttribute(...)] | 0 | 2048 | -| System.Runtime.CompilerServices.InterpolatedStringHandlerArgumentAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.InterpolatedStringHandlerArgumentAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.InterpolatedStringHandlerAttribute | [AttributeUsageAttribute(...)] | 0 | 12 | -| System.Runtime.CompilerServices.IntrinsicAttribute | [AttributeUsageAttribute(...)] | 0 | 364 | -| System.Runtime.CompilerServices.IsByRefLikeAttribute | [AttributeUsageAttribute(...)] | 0 | 8 | -| System.Runtime.CompilerServices.IsByRefLikeAttribute | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.IsExternalInit | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.IsReadOnlyAttribute | [AttributeUsageAttribute(...)] | 0 | 32767 | -| System.Runtime.CompilerServices.IsReadOnlyAttribute | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.IsUnmanagedAttribute | [AttributeUsageAttribute(...)] | 0 | 32767 | -| System.Runtime.CompilerServices.IsUnmanagedAttribute | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.IteratorStateMachineAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Runtime.CompilerServices.MetadataUpdateOriginalTypeAttribute | [AttributeUsageAttribute(...)] | 0 | 12 | -| System.Runtime.CompilerServices.MetadataUpdateOriginalTypeAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.MetadataUpdateOriginalTypeAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.MethodImplAttribute | [AttributeUsageAttribute(...)] | 0 | 96 | -| System.Runtime.CompilerServices.ModuleInitializerAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Runtime.CompilerServices.NullableAttribute | [AttributeUsageAttribute(...)] | 0 | 27524 | -| System.Runtime.CompilerServices.NullableAttribute | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.NullableAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.NullableAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.NullableContextAttribute | [AttributeUsageAttribute(...)] | 0 | 5196 | -| System.Runtime.CompilerServices.NullableContextAttribute | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.NullablePublicOnlyAttribute | [AttributeUsageAttribute(...)] | 0 | 2 | -| System.Runtime.CompilerServices.NullablePublicOnlyAttribute | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.ObjectHandleOnStack | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Runtime.CompilerServices.ObjectHandleOnStack | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Runtime.CompilerServices.ObjectHandleOnStack | [ObsoleteAttribute(...)] | 1 | True | -| System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.PreserveBaseOverridesAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Runtime.CompilerServices.QCallAssembly | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Runtime.CompilerServices.QCallAssembly | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Runtime.CompilerServices.QCallAssembly | [ObsoleteAttribute(...)] | 1 | True | -| System.Runtime.CompilerServices.QCallModule | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Runtime.CompilerServices.QCallModule | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Runtime.CompilerServices.QCallModule | [ObsoleteAttribute(...)] | 1 | True | -| System.Runtime.CompilerServices.QCallTypeHandle | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Runtime.CompilerServices.QCallTypeHandle | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Runtime.CompilerServices.QCallTypeHandle | [ObsoleteAttribute(...)] | 1 | True | -| System.Runtime.CompilerServices.RefSafetyRulesAttribute | [AttributeUsageAttribute(...)] | 0 | 2 | -| System.Runtime.CompilerServices.RefSafetyRulesAttribute | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.ReferenceAssemblyAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.ReferenceAssemblyAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.ReferenceAssemblyAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.CompilerServices.RequiredMemberAttribute | [AttributeUsageAttribute(...)] | 0 | 396 | -| System.Runtime.CompilerServices.RequiredMemberAttribute | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.RequiresLocationAttribute | [AttributeUsageAttribute(...)] | 0 | 2048 | -| System.Runtime.CompilerServices.RequiresLocationAttribute | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.RuntimeCompatibilityAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.RuntimeFeature | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.RuntimeFeature | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.RuntimeHelpers | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.RuntimeHelpers | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.RuntimeHelpers.CleanupCode | [NullableContextAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.RuntimeHelpers.TryCode | [NullableContextAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.RuntimeWrappedException | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.RuntimeWrappedException | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.RuntimeWrappedException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Runtime.CompilerServices.ScopedRefAttribute | [AttributeUsageAttribute(...)] | 0 | 2048 | -| System.Runtime.CompilerServices.ScopedRefAttribute | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.SkipLocalsInitAttribute | [AttributeUsageAttribute(...)] | 0 | 1774 | -| System.Runtime.CompilerServices.SpecialNameAttribute | [AttributeUsageAttribute(...)] | 0 | 972 | -| System.Runtime.CompilerServices.StackCrawlMarkHandle | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Runtime.CompilerServices.StackCrawlMarkHandle | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Runtime.CompilerServices.StackCrawlMarkHandle | [ObsoleteAttribute(...)] | 1 | True | -| System.Runtime.CompilerServices.StateMachineAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Runtime.CompilerServices.StateMachineAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.StateMachineAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.StringFreezingAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.StringHandleOnStack | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Runtime.CompilerServices.StringHandleOnStack | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Runtime.CompilerServices.StringHandleOnStack | [ObsoleteAttribute(...)] | 1 | True | -| System.Runtime.CompilerServices.StrongBox`1.Value | [NullableAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.SuppressIldasmAttribute | [AttributeUsageAttribute(...)] | 0 | 3 | -| System.Runtime.CompilerServices.SuppressIldasmAttribute | [ObsoleteAttribute(...)] | 0 | SuppressIldasmAttribute has no effect in .NET 6.0+. | -| System.Runtime.CompilerServices.SwitchExpressionException | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.SwitchExpressionException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.CompilerServices.SwitchExpressionException | [TypeForwardedFromAttribute(...)] | 0 | System.Runtime.Extensions, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| System.Runtime.CompilerServices.TupleElementNamesAttribute | [AttributeUsageAttribute(...)] | 0 | 11148 | -| System.Runtime.CompilerServices.TupleElementNamesAttribute | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.CompilerServices.TypeForwardedFromAttribute | [AttributeUsageAttribute(...)] | 0 | 5148 | -| System.Runtime.CompilerServices.TypeForwardedFromAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.TypeForwardedFromAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.TypeForwardedToAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.TypeForwardedToAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.TypeForwardedToAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.Unsafe | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.Unsafe | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.CompilerServices.UnsafeAccessorAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Runtime.CompilerServices.UnsafeAccessorAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.CompilerServices.UnsafeAccessorAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.CompilerServices.UnsafeValueTypeAttribute | [AttributeUsageAttribute(...)] | 0 | 8 | -| System.Runtime.ConstrainedExecution.Cer | [ObsoleteAttribute(...)] | 0 | The Constrained Execution Region (CER) feature is not supported. | -| System.Runtime.ConstrainedExecution.Consistency | [ObsoleteAttribute(...)] | 0 | The Constrained Execution Region (CER) feature is not supported. | -| System.Runtime.ConstrainedExecution.PrePrepareMethodAttribute | [AttributeUsageAttribute(...)] | 0 | 96 | -| System.Runtime.ConstrainedExecution.PrePrepareMethodAttribute | [ObsoleteAttribute(...)] | 0 | The Constrained Execution Region (CER) feature is not supported. | -| System.Runtime.ConstrainedExecution.ReliabilityContractAttribute | [AttributeUsageAttribute(...)] | 0 | 1133 | -| System.Runtime.ConstrainedExecution.ReliabilityContractAttribute | [ObsoleteAttribute(...)] | 0 | The Constrained Execution Region (CER) feature is not supported. | -| System.Runtime.DependentHandle | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.DependentHandle | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.ExceptionServices.ExceptionDispatchInfo | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.ExceptionServices.ExceptionDispatchInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute | [ObsoleteAttribute(...)] | 0 | Recovery from corrupted process state exceptions is not supported; HandleProcessCorruptedStateExceptionsAttribute is ignored. | -| System.Runtime.InteropServices.AllowReversePInvokeCallsAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Runtime.InteropServices.AllowReversePInvokeCallsAttribute | [ObsoleteAttribute(...)] | 0 | Code Access Security is not supported or honored by the runtime. | -| System.Runtime.InteropServices.ArrayWithOffset | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.ArrayWithOffset | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.BStrWrapper | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.BStrWrapper | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.BStrWrapper | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.BestFitMappingAttribute | [AttributeUsageAttribute(...)] | 0 | 1037 | -| System.Runtime.InteropServices.CLong | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.InteropServices.COMException | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.COMException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.COMException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Runtime.InteropServices.CULong | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.InteropServices.ClassInterfaceAttribute | [AttributeUsageAttribute(...)] | 0 | 5 | -| System.Runtime.InteropServices.CoClassAttribute | [AttributeUsageAttribute(...)] | 0 | 1024 | -| System.Runtime.InteropServices.CoClassAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.CoClassAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.CollectionsMarshal | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.CollectionsMarshal | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComDefaultInterfaceAttribute | [AttributeUsageAttribute(...)] | 0 | 4 | -| System.Runtime.InteropServices.ComDefaultInterfaceAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.ComDefaultInterfaceAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComEventInterfaceAttribute | [AttributeUsageAttribute(...)] | 0 | 1024 | -| System.Runtime.InteropServices.ComEventInterfaceAttribute | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComEventInterfaceAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.ComEventInterfaceAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComEventsHelper | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComEventsHelper | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.ComEventsHelper | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComEventsHelper | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Runtime.InteropServices.ComImportAttribute | [AttributeUsageAttribute(...)] | 0 | 1028 | -| System.Runtime.InteropServices.ComSourceInterfacesAttribute | [AttributeUsageAttribute(...)] | 0 | 4 | -| System.Runtime.InteropServices.ComSourceInterfacesAttribute | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComSourceInterfacesAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.ComSourceInterfacesAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.BINDPTR | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.BIND_OPTS | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.CALLCONV | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.CONNECTDATA | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.CONNECTDATA.pUnk | [NullableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.DESCKIND | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.DISPPARAMS | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.ELEMDESC | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.EXCEPINFO | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.EXCEPINFO | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.ComTypes.EXCEPINFO | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.FILETIME | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.FUNCDESC | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.FUNCFLAGS | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.FUNCKIND | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IBindCtx | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IBindCtx | [GuidAttribute(...)] | 0 | 0000000e-0000-0000-C000-000000000046 | -| System.Runtime.InteropServices.ComTypes.IBindCtx | [InterfaceTypeAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IBindCtx | [NullableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IBindCtx | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IConnectionPoint | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IConnectionPoint | [GuidAttribute(...)] | 0 | B196B286-BAB4-101A-B69C-00AA00341D07 | -| System.Runtime.InteropServices.ComTypes.IConnectionPoint | [InterfaceTypeAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IConnectionPoint | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IConnectionPointContainer | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IConnectionPointContainer | [GuidAttribute(...)] | 0 | B196B284-BAB4-101A-B69C-00AA00341D07 | -| System.Runtime.InteropServices.ComTypes.IConnectionPointContainer | [InterfaceTypeAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IConnectionPointContainer | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IDLDESC | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IDLFLAG | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IEnumConnectionPoints | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IEnumConnectionPoints | [GuidAttribute(...)] | 0 | B196B285-BAB4-101A-B69C-00AA00341D07 | -| System.Runtime.InteropServices.ComTypes.IEnumConnectionPoints | [InterfaceTypeAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IEnumConnectionPoints | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IEnumConnections | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IEnumConnections | [GuidAttribute(...)] | 0 | B196B287-BAB4-101A-B69C-00AA00341D07 | -| System.Runtime.InteropServices.ComTypes.IEnumConnections | [InterfaceTypeAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IEnumConnections | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IEnumMoniker | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IEnumMoniker | [GuidAttribute(...)] | 0 | 00000102-0000-0000-C000-000000000046 | -| System.Runtime.InteropServices.ComTypes.IEnumMoniker | [InterfaceTypeAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IEnumMoniker | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IEnumString | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IEnumString | [GuidAttribute(...)] | 0 | 00000101-0000-0000-C000-000000000046 | -| System.Runtime.InteropServices.ComTypes.IEnumString | [InterfaceTypeAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IEnumString | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IEnumVARIANT | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IEnumVARIANT | [GuidAttribute(...)] | 0 | 00020404-0000-0000-C000-000000000046 | -| System.Runtime.InteropServices.ComTypes.IEnumVARIANT | [InterfaceTypeAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IEnumVARIANT | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IEnumerable | [GuidAttribute(...)] | 0 | 496B0ABE-CDEE-11d3-88E8-00902754C43A | -| System.Runtime.InteropServices.ComTypes.IEnumerator | [GuidAttribute(...)] | 0 | 496B0ABF-CDEE-11d3-88E8-00902754C43A | -| System.Runtime.InteropServices.ComTypes.IMPLTYPEFLAGS | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IMoniker | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IMoniker | [GuidAttribute(...)] | 0 | 0000000f-0000-0000-C000-000000000046 | -| System.Runtime.InteropServices.ComTypes.IMoniker | [InterfaceTypeAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IMoniker | [NullableAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.ComTypes.IMoniker | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.INVOKEKIND | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IPersistFile | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IPersistFile | [GuidAttribute(...)] | 0 | 0000010b-0000-0000-C000-000000000046 | -| System.Runtime.InteropServices.ComTypes.IPersistFile | [InterfaceTypeAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IPersistFile | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IRunningObjectTable | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IRunningObjectTable | [GuidAttribute(...)] | 0 | 00000010-0000-0000-C000-000000000046 | -| System.Runtime.InteropServices.ComTypes.IRunningObjectTable | [InterfaceTypeAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IRunningObjectTable | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IStream | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IStream | [GuidAttribute(...)] | 0 | 0000000c-0000-0000-C000-000000000046 | -| System.Runtime.InteropServices.ComTypes.IStream | [InterfaceTypeAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.IStream | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.ITypeComp | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.ITypeComp | [GuidAttribute(...)] | 0 | 00020403-0000-0000-C000-000000000046 | -| System.Runtime.InteropServices.ComTypes.ITypeComp | [InterfaceTypeAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.ITypeComp | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.ITypeInfo | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.ITypeInfo | [GuidAttribute(...)] | 0 | 00020401-0000-0000-C000-000000000046 | -| System.Runtime.InteropServices.ComTypes.ITypeInfo | [InterfaceTypeAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.ITypeInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.ITypeInfo2 | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.ITypeInfo2 | [GuidAttribute(...)] | 0 | 00020412-0000-0000-C000-000000000046 | -| System.Runtime.InteropServices.ComTypes.ITypeInfo2 | [InterfaceTypeAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.ITypeInfo2 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.ITypeLib | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.ITypeLib | [GuidAttribute(...)] | 0 | 00020402-0000-0000-C000-000000000046 | -| System.Runtime.InteropServices.ComTypes.ITypeLib | [InterfaceTypeAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.ITypeLib | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.ITypeLib2 | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.ITypeLib2 | [GuidAttribute(...)] | 0 | 00020411-0000-0000-C000-000000000046 | -| System.Runtime.InteropServices.ComTypes.ITypeLib2 | [InterfaceTypeAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.ITypeLib2 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.LIBFLAGS | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.PARAMDESC | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.PARAMFLAG | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.STATSTG | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.STATSTG.pwcsName | [NullableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.SYSKIND | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.TYPEATTR | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.TYPEDESC | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.TYPEFLAGS | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.TYPEKIND | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.TYPELIBATTR | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.VARDESC | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.VARDESC.lpstrSchema | [NullableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.VARFLAGS | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComTypes.VARKIND | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComVisibleAttribute | [AttributeUsageAttribute(...)] | 0 | 5597 | -| System.Runtime.InteropServices.ComWrappers | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.InteropServices.ComWrappers | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.ComWrappers | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComWrappers | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.Runtime.InteropServices.ComWrappers | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Runtime.InteropServices.ComWrappers | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Runtime.InteropServices.ComWrappers | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.Runtime.InteropServices.ComWrappers.ComInterfaceDispatch | [NullableContextAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.ComWrappers.ComInterfaceDispatch* | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.ComWrappers.ComInterfaceEntry | [NullableContextAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.ComWrappers.ComInterfaceEntry* System.Runtime.InteropServices.ComWrappers.ComputeVtables(System.Object,System.Runtime.InteropServices.CreateComInterfaceFlags,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.CurrencyWrapper | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.CurrencyWrapper | [ObsoleteAttribute(...)] | 0 | CurrencyWrapper and support for marshalling to the VARIANT type may be unavailable in future releases. | -| System.Runtime.InteropServices.CustomQueryInterfaceMode | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.CustomQueryInterfaceResult | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.DefaultCharSetAttribute | [AttributeUsageAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.DefaultDllImportSearchPathsAttribute | [AttributeUsageAttribute(...)] | 0 | 65 | -| System.Runtime.InteropServices.DefaultParameterValueAttribute | [AttributeUsageAttribute(...)] | 0 | 2048 | -| System.Runtime.InteropServices.DefaultParameterValueAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.DefaultParameterValueAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.DispIdAttribute | [AttributeUsageAttribute(...)] | 0 | 960 | -| System.Runtime.InteropServices.DispatchWrapper | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.DispatchWrapper | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.DispatchWrapper | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.DispatchWrapper | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Runtime.InteropServices.DllImportAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Runtime.InteropServices.DllImportAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.DllImportAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.DllImportAttribute.EntryPoint | [NullableAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.DynamicInterfaceCastableImplementationAttribute | [AttributeUsageAttribute(...)] | 0 | 1024 | -| System.Runtime.InteropServices.ErrorWrapper | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ErrorWrapper | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.ErrorWrapper | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ExternalException | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.ExternalException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.ExternalException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Runtime.InteropServices.FieldOffsetAttribute | [AttributeUsageAttribute(...)] | 0 | 256 | -| System.Runtime.InteropServices.GCHandle | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.GCHandle | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.GuidAttribute | [AttributeUsageAttribute(...)] | 0 | 5149 | -| System.Runtime.InteropServices.GuidAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.GuidAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.HandleRef | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.HandleRef | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.ICustomAdapter | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ICustomAdapter | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ICustomFactory | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ICustomMarshaler | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ICustomQueryInterface | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.InAttribute | [AttributeUsageAttribute(...)] | 0 | 2048 | -| System.Runtime.InteropServices.InterfaceTypeAttribute | [AttributeUsageAttribute(...)] | 0 | 1024 | -| System.Runtime.InteropServices.InvalidComObjectException | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.InvalidComObjectException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.InvalidComObjectException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Runtime.InteropServices.InvalidOleVariantTypeException | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.InvalidOleVariantTypeException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.InvalidOleVariantTypeException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Runtime.InteropServices.LCIDConversionAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Runtime.InteropServices.LibraryImportAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Runtime.InteropServices.LibraryImportAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.LibraryImportAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.Marshal | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.Marshal | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.MarshalAsAttribute | [AttributeUsageAttribute(...)] | 0 | 10496 | -| System.Runtime.InteropServices.MarshalAsAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.MarshalAsAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.MarshalDirectiveException | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.MarshalDirectiveException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.MarshalDirectiveException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Runtime.InteropServices.Marshalling.AnsiStringMarshaller | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.InteropServices.Marshalling.AnsiStringMarshaller | [CustomMarshallerAttribute(...)] | 0 | System.String | -| System.Runtime.InteropServices.Marshalling.AnsiStringMarshaller | [CustomMarshallerAttribute(...)] | 1 | 0 | -| System.Runtime.InteropServices.Marshalling.AnsiStringMarshaller | [CustomMarshallerAttribute(...)] | 1 | 1 | -| System.Runtime.InteropServices.Marshalling.AnsiStringMarshaller | [CustomMarshallerAttribute(...)] | 2 | System.Runtime.InteropServices.Marshalling.AnsiStringMarshaller | -| System.Runtime.InteropServices.Marshalling.AnsiStringMarshaller | [CustomMarshallerAttribute(...)] | 2 | System.Runtime.InteropServices.Marshalling.AnsiStringMarshaller.ManagedToUnmanagedIn | -| System.Runtime.InteropServices.Marshalling.AnsiStringMarshaller.ManagedToUnmanagedIn | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Runtime.InteropServices.Marshalling.AnsiStringMarshaller.ManagedToUnmanagedIn | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Runtime.InteropServices.Marshalling.AnsiStringMarshaller.ManagedToUnmanagedIn | [ObsoleteAttribute(...)] | 1 | True | -| System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2 | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2 | [CustomMarshallerAttribute(...)] | 0 | System.Runtime.InteropServices.Marshalling.CustomMarshallerAttribute.GenericPlaceholder | -| System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2 | [CustomMarshallerAttribute(...)] | 1 | 0 | -| System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2 | [CustomMarshallerAttribute(...)] | 1 | 1 | -| System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2 | [CustomMarshallerAttribute(...)] | 2 | System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2 | -| System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2 | [CustomMarshallerAttribute(...)] | 2 | System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2.ManagedToUnmanagedIn | -| System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2.ManagedToUnmanagedIn | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2.ManagedToUnmanagedIn | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Runtime.InteropServices.Marshalling.ArrayMarshaller`2.ManagedToUnmanagedIn | [ObsoleteAttribute(...)] | 1 | True | -| System.Runtime.InteropServices.Marshalling.BStrStringMarshaller | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.InteropServices.Marshalling.BStrStringMarshaller | [CustomMarshallerAttribute(...)] | 0 | System.String | -| System.Runtime.InteropServices.Marshalling.BStrStringMarshaller | [CustomMarshallerAttribute(...)] | 1 | 0 | -| System.Runtime.InteropServices.Marshalling.BStrStringMarshaller | [CustomMarshallerAttribute(...)] | 1 | 1 | -| System.Runtime.InteropServices.Marshalling.BStrStringMarshaller | [CustomMarshallerAttribute(...)] | 2 | System.Runtime.InteropServices.Marshalling.BStrStringMarshaller | -| System.Runtime.InteropServices.Marshalling.BStrStringMarshaller | [CustomMarshallerAttribute(...)] | 2 | System.Runtime.InteropServices.Marshalling.BStrStringMarshaller.ManagedToUnmanagedIn | -| System.Runtime.InteropServices.Marshalling.BStrStringMarshaller.ManagedToUnmanagedIn | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Runtime.InteropServices.Marshalling.BStrStringMarshaller.ManagedToUnmanagedIn | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Runtime.InteropServices.Marshalling.BStrStringMarshaller.ManagedToUnmanagedIn | [ObsoleteAttribute(...)] | 1 | True | -| System.Runtime.InteropServices.Marshalling.ContiguousCollectionMarshallerAttribute | [AttributeUsageAttribute(...)] | 0 | 12 | -| System.Runtime.InteropServices.Marshalling.CustomMarshallerAttribute | [AttributeUsageAttribute(...)] | 0 | 12 | -| System.Runtime.InteropServices.Marshalling.CustomMarshallerAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.Marshalling.CustomMarshallerAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.Marshalling.CustomMarshallerAttribute.GenericPlaceholder | [NullableContextAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.Marshalling.MarshalUsingAttribute | [AttributeUsageAttribute(...)] | 0 | 10240 | -| System.Runtime.InteropServices.Marshalling.MarshalUsingAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.Marshalling.MarshalUsingAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.Marshalling.NativeMarshallingAttribute | [AttributeUsageAttribute(...)] | 0 | 5148 | -| System.Runtime.InteropServices.Marshalling.NativeMarshallingAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.Marshalling.NativeMarshallingAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2 | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2 | [CustomMarshallerAttribute(...)] | 0 | System.Runtime.InteropServices.Marshalling.CustomMarshallerAttribute.GenericPlaceholder* | -| System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2 | [CustomMarshallerAttribute(...)] | 1 | 0 | -| System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2 | [CustomMarshallerAttribute(...)] | 1 | 1 | -| System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2 | [CustomMarshallerAttribute(...)] | 2 | System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2 | -| System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2 | [CustomMarshallerAttribute(...)] | 2 | System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2.ManagedToUnmanagedIn | -| System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2.ManagedToUnmanagedIn | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2.ManagedToUnmanagedIn | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller`2.ManagedToUnmanagedIn | [ObsoleteAttribute(...)] | 1 | True | -| System.Runtime.InteropServices.Marshalling.ReadOnlySpanMarshaller`2 | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.InteropServices.Marshalling.ReadOnlySpanMarshaller`2 | [CustomMarshallerAttribute(...)] | 0 | System.ReadOnlySpan`1 | -| System.Runtime.InteropServices.Marshalling.ReadOnlySpanMarshaller`2 | [CustomMarshallerAttribute(...)] | 1 | 1 | -| System.Runtime.InteropServices.Marshalling.ReadOnlySpanMarshaller`2 | [CustomMarshallerAttribute(...)] | 1 | 6 | -| System.Runtime.InteropServices.Marshalling.ReadOnlySpanMarshaller`2 | [CustomMarshallerAttribute(...)] | 2 | System.Runtime.InteropServices.Marshalling.ReadOnlySpanMarshaller`2.ManagedToUnmanagedIn | -| System.Runtime.InteropServices.Marshalling.ReadOnlySpanMarshaller`2 | [CustomMarshallerAttribute(...)] | 2 | System.Runtime.InteropServices.Marshalling.ReadOnlySpanMarshaller`2.UnmanagedToManagedOut | -| System.Runtime.InteropServices.Marshalling.ReadOnlySpanMarshaller`2.ManagedToUnmanagedIn | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Runtime.InteropServices.Marshalling.ReadOnlySpanMarshaller`2.ManagedToUnmanagedIn | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Runtime.InteropServices.Marshalling.ReadOnlySpanMarshaller`2.ManagedToUnmanagedIn | [ObsoleteAttribute(...)] | 1 | True | -| System.Runtime.InteropServices.Marshalling.SafeHandleMarshaller`1 | [CustomMarshallerAttribute(...)] | 0 | System.Runtime.InteropServices.Marshalling.CustomMarshallerAttribute.GenericPlaceholder | -| System.Runtime.InteropServices.Marshalling.SafeHandleMarshaller`1 | [CustomMarshallerAttribute(...)] | 1 | 1 | -| System.Runtime.InteropServices.Marshalling.SafeHandleMarshaller`1 | [CustomMarshallerAttribute(...)] | 1 | 2 | -| System.Runtime.InteropServices.Marshalling.SafeHandleMarshaller`1 | [CustomMarshallerAttribute(...)] | 1 | 3 | -| System.Runtime.InteropServices.Marshalling.SafeHandleMarshaller`1 | [CustomMarshallerAttribute(...)] | 2 | System.Runtime.InteropServices.Marshalling.SafeHandleMarshaller`1.ManagedToUnmanagedIn | -| System.Runtime.InteropServices.Marshalling.SafeHandleMarshaller`1 | [CustomMarshallerAttribute(...)] | 2 | System.Runtime.InteropServices.Marshalling.SafeHandleMarshaller`1.ManagedToUnmanagedOut | -| System.Runtime.InteropServices.Marshalling.SafeHandleMarshaller`1 | [CustomMarshallerAttribute(...)] | 2 | System.Runtime.InteropServices.Marshalling.SafeHandleMarshaller`1.ManagedToUnmanagedRef | -| System.Runtime.InteropServices.Marshalling.SafeHandleMarshaller`1.ManagedToUnmanagedRef | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.Marshalling.SafeHandleMarshaller`1.ManagedToUnmanagedRef | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.Marshalling.SpanMarshaller`2 | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.InteropServices.Marshalling.SpanMarshaller`2 | [CustomMarshallerAttribute(...)] | 0 | System.Span`1 | -| System.Runtime.InteropServices.Marshalling.SpanMarshaller`2 | [CustomMarshallerAttribute(...)] | 1 | 0 | -| System.Runtime.InteropServices.Marshalling.SpanMarshaller`2 | [CustomMarshallerAttribute(...)] | 1 | 1 | -| System.Runtime.InteropServices.Marshalling.SpanMarshaller`2 | [CustomMarshallerAttribute(...)] | 2 | System.Runtime.InteropServices.Marshalling.SpanMarshaller`2 | -| System.Runtime.InteropServices.Marshalling.SpanMarshaller`2 | [CustomMarshallerAttribute(...)] | 2 | System.Runtime.InteropServices.Marshalling.SpanMarshaller`2.ManagedToUnmanagedIn | -| System.Runtime.InteropServices.Marshalling.SpanMarshaller`2.ManagedToUnmanagedIn | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Runtime.InteropServices.Marshalling.SpanMarshaller`2.ManagedToUnmanagedIn | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Runtime.InteropServices.Marshalling.SpanMarshaller`2.ManagedToUnmanagedIn | [ObsoleteAttribute(...)] | 1 | True | -| System.Runtime.InteropServices.Marshalling.Utf8StringMarshaller | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.InteropServices.Marshalling.Utf8StringMarshaller | [CustomMarshallerAttribute(...)] | 0 | System.String | -| System.Runtime.InteropServices.Marshalling.Utf8StringMarshaller | [CustomMarshallerAttribute(...)] | 1 | 0 | -| System.Runtime.InteropServices.Marshalling.Utf8StringMarshaller | [CustomMarshallerAttribute(...)] | 1 | 1 | -| System.Runtime.InteropServices.Marshalling.Utf8StringMarshaller | [CustomMarshallerAttribute(...)] | 2 | System.Runtime.InteropServices.Marshalling.Utf8StringMarshaller | -| System.Runtime.InteropServices.Marshalling.Utf8StringMarshaller | [CustomMarshallerAttribute(...)] | 2 | System.Runtime.InteropServices.Marshalling.Utf8StringMarshaller.ManagedToUnmanagedIn | -| System.Runtime.InteropServices.Marshalling.Utf8StringMarshaller.ManagedToUnmanagedIn | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Runtime.InteropServices.Marshalling.Utf8StringMarshaller.ManagedToUnmanagedIn | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Runtime.InteropServices.Marshalling.Utf8StringMarshaller.ManagedToUnmanagedIn | [ObsoleteAttribute(...)] | 1 | True | -| System.Runtime.InteropServices.Marshalling.Utf16StringMarshaller | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.InteropServices.Marshalling.Utf16StringMarshaller | [CustomMarshallerAttribute(...)] | 0 | System.String | -| System.Runtime.InteropServices.Marshalling.Utf16StringMarshaller | [CustomMarshallerAttribute(...)] | 1 | 0 | -| System.Runtime.InteropServices.Marshalling.Utf16StringMarshaller | [CustomMarshallerAttribute(...)] | 2 | System.Runtime.InteropServices.Marshalling.Utf16StringMarshaller | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.CreateChecked`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.CreateSaturating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.CreateTruncating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.Parse(System.String,System.Globalization.NumberStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Explicit(System.UInt128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Implicit(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Implicit(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Implicit(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Implicit(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.InteropServices.NFloat System.Runtime.InteropServices.NFloat.op_Implicit(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.InteropServices.NativeLibrary | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.NativeLibrary | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.OSPlatform | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.OSPlatform | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.UnhandledExceptionPropagationHandler | [NullableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ObjectiveC.ObjectiveCTrackedTypeAttribute | [AttributeUsageAttribute(...)] | 0 | 4 | -| System.Runtime.InteropServices.ObjectiveC.ObjectiveCTrackedTypeAttribute | [SupportedOSPlatformAttribute(...)] | 0 | macos | -| System.Runtime.InteropServices.OptionalAttribute | [AttributeUsageAttribute(...)] | 0 | 2048 | -| System.Runtime.InteropServices.OutAttribute | [AttributeUsageAttribute(...)] | 0 | 2048 | -| System.Runtime.InteropServices.PosixSignal.SIGCHLD | [UnsupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Runtime.InteropServices.PosixSignal.SIGCONT | [UnsupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Runtime.InteropServices.PosixSignal.SIGTSTP | [UnsupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Runtime.InteropServices.PosixSignal.SIGTTIN | [UnsupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Runtime.InteropServices.PosixSignal.SIGTTOU | [UnsupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Runtime.InteropServices.PosixSignal.SIGWINCH | [UnsupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Runtime.InteropServices.PosixSignalRegistration System.Runtime.InteropServices.PosixSignalRegistration.Create(System.Runtime.InteropServices.PosixSignal,System.Action<System.Runtime.InteropServices.PosixSignalContext>) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.PosixSignalRegistration System.Runtime.InteropServices.PosixSignalRegistration.Create(System.Runtime.InteropServices.PosixSignal,System.Action<System.Runtime.InteropServices.PosixSignalContext>) | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.Runtime.InteropServices.PosixSignalRegistration System.Runtime.InteropServices.PosixSignalRegistration.Create(System.Runtime.InteropServices.PosixSignal,System.Action<System.Runtime.InteropServices.PosixSignalContext>) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Runtime.InteropServices.PosixSignalRegistration System.Runtime.InteropServices.PosixSignalRegistration.Create(System.Runtime.InteropServices.PosixSignal,System.Action<System.Runtime.InteropServices.PosixSignalContext>) | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Runtime.InteropServices.PosixSignalRegistration System.Runtime.InteropServices.PosixSignalRegistration.Create(System.Runtime.InteropServices.PosixSignal,System.Action<System.Runtime.InteropServices.PosixSignalContext>) | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.Runtime.InteropServices.PreserveSigAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Runtime.InteropServices.ProgIdAttribute | [AttributeUsageAttribute(...)] | 0 | 4 | -| System.Runtime.InteropServices.ProgIdAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.ProgIdAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.RuntimeInformation | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.RuntimeInformation | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.SEHException | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.SEHException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.SEHException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Runtime.InteropServices.SafeArrayRankMismatchException | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.SafeArrayRankMismatchException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.SafeArrayRankMismatchException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Runtime.InteropServices.SafeArrayTypeMismatchException | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.SafeArrayTypeMismatchException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.SafeArrayTypeMismatchException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Runtime.InteropServices.SafeHandle System.Threading.ThreadPoolBoundHandle.Handle | [NullableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.SafeHandle System.Threading.ThreadPoolBoundHandle.get_Handle() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.StructLayoutAttribute | [AttributeUsageAttribute(...)] | 0 | 12 | -| System.Runtime.InteropServices.StructLayoutAttribute System.Type.StructLayoutAttribute | [NullableAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.StructLayoutAttribute System.Type.get_StructLayoutAttribute() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.SuppressGCTransitionAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Runtime.InteropServices.TypeIdentifierAttribute | [AttributeUsageAttribute(...)] | 0 | 5144 | -| System.Runtime.InteropServices.TypeIdentifierAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.TypeIdentifierAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.UnknownWrapper | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.UnknownWrapper | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.UnknownWrapper | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.UnmanagedCallConvAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Runtime.InteropServices.UnmanagedCallConvAttribute.CallConvs | [NullableAttribute(...)] | 0 | [2,1] | -| System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute.CallConvs | [NullableAttribute(...)] | 0 | [2,1] | -| System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute.EntryPoint | [NullableAttribute(...)] | 0 | 2 | -| System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute | [AttributeUsageAttribute(...)] | 0 | 4096 | -| System.Runtime.InteropServices.UnmanagedType.AnsiBStr | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.UnmanagedType.AnsiBStr | [ObsoleteAttribute(...)] | 0 | Marshalling as AnsiBStr may be unavailable in future releases. | -| System.Runtime.InteropServices.UnmanagedType.AsAny | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.UnmanagedType.AsAny | [ObsoleteAttribute(...)] | 0 | Marshalling arbitrary types may be unavailable in future releases. Specify the type you wish to marshal as. | -| System.Runtime.InteropServices.UnmanagedType.Currency | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.UnmanagedType.Currency | [ObsoleteAttribute(...)] | 0 | Marshalling as Currency may be unavailable in future releases. | -| System.Runtime.InteropServices.UnmanagedType.IDispatch | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.UnmanagedType.SafeArray | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.UnmanagedType.Struct | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.UnmanagedType.TBStr | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.UnmanagedType.TBStr | [ObsoleteAttribute(...)] | 0 | Marshalling as TBstr may be unavailable in future releases. | -| System.Runtime.InteropServices.UnmanagedType.VBByRefStr | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.UnmanagedType.VBByRefStr | [ObsoleteAttribute(...)] | 0 | Marshalling as VBByRefString may be unavailable in future releases. | -| System.Runtime.InteropServices.UnmanagedType.VariantBool | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.VarEnum | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.VariantWrapper | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.VariantWrapper | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.InteropServices.VariantWrapper | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Arm.AdvSimd | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Arm.Aes | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Arm.ArmBase | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Arm.Crc32 | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Arm.Dp | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Arm.Rdm | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Arm.Sha1 | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Arm.Sha256 | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<!0> | [NullableAttribute(...)] | 0 | [0,1] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Abs`1(System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Add`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.AndNot`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.BitwiseAnd`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.BitwiseOr`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.ConditionalSelect`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.CreateScalarUnsafe`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.CreateScalar`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Create`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Create`1(!0[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Create`1(!0[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Create`1(System.ReadOnlySpan<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Divide`1(System.Runtime.Intrinsics.Vector64<!0>,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Divide`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Equals`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.GreaterThanOrEqual`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.GreaterThan`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.LessThanOrEqual`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.LessThan`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.LoadAlignedNonTemporal`1(!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.LoadAlignedNonTemporal`1(!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.LoadAligned`1(!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.LoadAligned`1(!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.LoadUnsafe`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.LoadUnsafe`1(!0,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.LoadUnsafe`1(!0,System.UIntPtr) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Load`1(!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Load`1(!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Max`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Min`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Multiply`1(!0,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Multiply`1(System.Runtime.Intrinsics.Vector64<!0>,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Multiply`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Negate`1(System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.OnesComplement`1(System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Sqrt`1(System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Subtract`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.WithElement`1(System.Runtime.Intrinsics.Vector64<!0>,System.Int32,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64.Xor`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64`1.AllBitsSet | [NullableAttribute(...)] | 0 | [0,1] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64`1.One | [NullableAttribute(...)] | 0 | [0,1] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector64`1.Zero | [NullableAttribute(...)] | 0 | [0,1] | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector128.GetLower`1(System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!0> System.Runtime.Intrinsics.Vector128.GetUpper`1(System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<!1> System.Runtime.Intrinsics.Vector64.As`2(System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector64<System.Byte> System.Runtime.Intrinsics.Vector64.Narrow(System.Runtime.Intrinsics.Vector64<System.UInt16>,System.Runtime.Intrinsics.Vector64<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.Double> System.Runtime.Intrinsics.Vector64.ConvertToDouble(System.Runtime.Intrinsics.Vector64<System.UInt64>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.Int16> System.Runtime.Intrinsics.Vector64.WidenLower(System.Runtime.Intrinsics.Vector64<System.SByte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.Int16> System.Runtime.Intrinsics.Vector64.WidenUpper(System.Runtime.Intrinsics.Vector64<System.SByte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.SByte> System.Runtime.Intrinsics.Vector64.AsSByte`1(System.Runtime.Intrinsics.Vector64<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.SByte> System.Runtime.Intrinsics.Vector64.Create(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.SByte> System.Runtime.Intrinsics.Vector64.Create(System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.SByte> System.Runtime.Intrinsics.Vector64.CreateScalar(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.SByte> System.Runtime.Intrinsics.Vector64.CreateScalarUnsafe(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.SByte> System.Runtime.Intrinsics.Vector64.Narrow(System.Runtime.Intrinsics.Vector64<System.Int16>,System.Runtime.Intrinsics.Vector64<System.Int16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.SByte> System.Runtime.Intrinsics.Vector64.ShiftLeft(System.Runtime.Intrinsics.Vector64<System.SByte>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.SByte> System.Runtime.Intrinsics.Vector64.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector64<System.SByte>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.SByte> System.Runtime.Intrinsics.Vector64.ShiftRightLogical(System.Runtime.Intrinsics.Vector64<System.SByte>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.SByte> System.Runtime.Intrinsics.Vector64.Shuffle(System.Runtime.Intrinsics.Vector64<System.SByte>,System.Runtime.Intrinsics.Vector64<System.SByte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.Single> System.Runtime.Intrinsics.Vector64.ConvertToSingle(System.Runtime.Intrinsics.Vector64<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.AsUInt16`1(System.Runtime.Intrinsics.Vector64<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.Create(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.Create(System.UInt16,System.UInt16,System.UInt16,System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.CreateScalar(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.CreateScalarUnsafe(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.Narrow(System.Runtime.Intrinsics.Vector64<System.UInt32>,System.Runtime.Intrinsics.Vector64<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.ShiftLeft(System.Runtime.Intrinsics.Vector64<System.UInt16>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.ShiftRightLogical(System.Runtime.Intrinsics.Vector64<System.UInt16>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.Shuffle(System.Runtime.Intrinsics.Vector64<System.UInt16>,System.Runtime.Intrinsics.Vector64<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.WidenLower(System.Runtime.Intrinsics.Vector64<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt16> System.Runtime.Intrinsics.Vector64.WidenUpper(System.Runtime.Intrinsics.Vector64<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.AsUInt32`1(System.Runtime.Intrinsics.Vector64<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.ConvertToUInt32(System.Runtime.Intrinsics.Vector64<System.Single>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.Create(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.Create(System.UInt32,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.CreateScalar(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.CreateScalarUnsafe(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.Narrow(System.Runtime.Intrinsics.Vector64<System.UInt64>,System.Runtime.Intrinsics.Vector64<System.UInt64>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.ShiftLeft(System.Runtime.Intrinsics.Vector64<System.UInt32>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.ShiftRightLogical(System.Runtime.Intrinsics.Vector64<System.UInt32>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.Shuffle(System.Runtime.Intrinsics.Vector64<System.UInt32>,System.Runtime.Intrinsics.Vector64<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.WidenLower(System.Runtime.Intrinsics.Vector64<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt32> System.Runtime.Intrinsics.Vector64.WidenUpper(System.Runtime.Intrinsics.Vector64<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt64> System.Runtime.Intrinsics.Vector64.AsUInt64`1(System.Runtime.Intrinsics.Vector64<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt64> System.Runtime.Intrinsics.Vector64.ConvertToUInt64(System.Runtime.Intrinsics.Vector64<System.Double>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt64> System.Runtime.Intrinsics.Vector64.Create(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt64> System.Runtime.Intrinsics.Vector64.CreateScalar(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt64> System.Runtime.Intrinsics.Vector64.CreateScalarUnsafe(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt64> System.Runtime.Intrinsics.Vector64.ShiftLeft(System.Runtime.Intrinsics.Vector64<System.UInt64>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt64> System.Runtime.Intrinsics.Vector64.ShiftRightLogical(System.Runtime.Intrinsics.Vector64<System.UInt64>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt64> System.Runtime.Intrinsics.Vector64.WidenLower(System.Runtime.Intrinsics.Vector64<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UInt64> System.Runtime.Intrinsics.Vector64.WidenUpper(System.Runtime.Intrinsics.Vector64<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UIntPtr> System.Runtime.Intrinsics.Vector64.AsNUInt`1(System.Runtime.Intrinsics.Vector64<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UIntPtr> System.Runtime.Intrinsics.Vector64.Create(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UIntPtr> System.Runtime.Intrinsics.Vector64.CreateScalar(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UIntPtr> System.Runtime.Intrinsics.Vector64.CreateScalarUnsafe(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UIntPtr> System.Runtime.Intrinsics.Vector64.ShiftLeft(System.Runtime.Intrinsics.Vector64<System.UIntPtr>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64<System.UIntPtr> System.Runtime.Intrinsics.Vector64.ShiftRightLogical(System.Runtime.Intrinsics.Vector64<System.UIntPtr>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector64`1 | [DebuggerDisplayAttribute(...)] | 0 | {DisplayString,nq} | -| System.Runtime.Intrinsics.Vector64`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.Runtime.Intrinsics.Vector64DebugView`1 | -| System.Runtime.Intrinsics.Vector64`1 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Runtime.Intrinsics.Vector64`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.Intrinsics.Vector64`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector128<!0> | [NullableAttribute(...)] | 0 | [0,1] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector64.ToVector128Unsafe`1(System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector64.ToVector128`1(System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Abs`1(System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Add`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.AndNot`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.AsVector128`1(System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.BitwiseAnd`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.BitwiseOr`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.ConditionalSelect`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.CreateScalarUnsafe`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.CreateScalar`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Create`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Create`1(!0[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Create`1(!0[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Create`1(System.ReadOnlySpan<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Create`1(System.Runtime.Intrinsics.Vector64<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Divide`1(System.Runtime.Intrinsics.Vector128<!0>,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Divide`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Equals`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.GreaterThanOrEqual`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.GreaterThan`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.LessThanOrEqual`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.LessThan`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.LoadAlignedNonTemporal`1(!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.LoadAlignedNonTemporal`1(!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.LoadAligned`1(!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.LoadAligned`1(!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.LoadUnsafe`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.LoadUnsafe`1(!0,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.LoadUnsafe`1(!0,System.UIntPtr) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Load`1(!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Load`1(!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Max`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Min`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Multiply`1(!0,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Multiply`1(System.Runtime.Intrinsics.Vector128<!0>,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Multiply`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Negate`1(System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.OnesComplement`1(System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Sqrt`1(System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Subtract`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.WithElement`1(System.Runtime.Intrinsics.Vector128<!0>,System.Int32,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.WithLower`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.WithUpper`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128.Xor`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128`1.AllBitsSet | [NullableAttribute(...)] | 0 | [0,1] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128`1.One | [NullableAttribute(...)] | 0 | [0,1] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector128`1.Zero | [NullableAttribute(...)] | 0 | [0,1] | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector256.GetLower`1(System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!0> System.Runtime.Intrinsics.Vector256.GetUpper`1(System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<!1> System.Runtime.Intrinsics.Vector128.As`2(System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.IndexOfAnyAsciiSearcher.Default.PackSources(System.Runtime.Intrinsics.Vector128<System.UInt16>,System.Runtime.Intrinsics.Vector128<System.UInt16>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.IndexOfAnyAsciiSearcher.Default.PackSources(System.Runtime.Intrinsics.Vector128<System.UInt16>,System.Runtime.Intrinsics.Vector128<System.UInt16>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Wasm.PackedSimd | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.IndexOfAnyAsciiSearcher.Default.PackSources(System.Runtime.Intrinsics.Vector128<System.UInt16>,System.Runtime.Intrinsics.Vector128<System.UInt16>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyLookupCore(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyLookupCore(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Wasm.PackedSimd | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyLookupCore(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Ssse3 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyLookup`1(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyLookup`1(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Wasm.PackedSimd | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyLookup`1(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Ssse3 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyLookup`2(System.Runtime.Intrinsics.Vector128<System.Int16>,System.Runtime.Intrinsics.Vector128<System.Int16>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyLookup`2(System.Runtime.Intrinsics.Vector128<System.Int16>,System.Runtime.Intrinsics.Vector128<System.Int16>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Wasm.PackedSimd | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyLookup`2(System.Runtime.Intrinsics.Vector128<System.Int16>,System.Runtime.Intrinsics.Vector128<System.Int16>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.IndexOfAnyAsciiSearcher.Ssse3AndWasmHandleZeroInNeedle.PackSources(System.Runtime.Intrinsics.Vector128<System.UInt16>,System.Runtime.Intrinsics.Vector128<System.UInt16>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Wasm.PackedSimd | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.IndexOfAnyAsciiSearcher.Ssse3AndWasmHandleZeroInNeedle.PackSources(System.Runtime.Intrinsics.Vector128<System.UInt16>,System.Runtime.Intrinsics.Vector128<System.UInt16>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.ProbabilisticMap.ContainsMask16Chars(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>,System.Char) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd.Arm64 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.ProbabilisticMap.ContainsMask16Chars(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>,System.Char) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.ProbabilisticMap.IsCharBitSet(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.ProbabilisticMap.IsCharBitSet(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd.Arm64 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.ProbabilisticMap.IsCharBitSet(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Wasm.PackedSimd | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.ProbabilisticMap.IsCharBitSet(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.ProbabilisticMap.IsCharBitSet(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Ssse3 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.Text.Base64.SimdShuffle(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd.Arm64 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Buffers.Text.Base64.SimdShuffle(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Ssse3 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.PackedSpanHelpers.PackSources(System.Runtime.Intrinsics.Vector128<System.Int16>,System.Runtime.Intrinsics.Vector128<System.Int16>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.AddSaturate(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd.Arm64 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.AddSaturate(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.Narrow(System.Runtime.Intrinsics.Vector128<System.UInt16>,System.Runtime.Intrinsics.Vector128<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.ShuffleUnsafe(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.ShuffleUnsafe(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd.Arm64 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.ShuffleUnsafe(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Wasm.PackedSimd | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.ShuffleUnsafe(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Ssse3 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.SubtractSaturate(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd.Arm64 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.SubtractSaturate(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.UnpackHigh(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd.Arm64 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.UnpackHigh(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.UnpackLow(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd.Arm64 | -| System.Runtime.Intrinsics.Vector128<System.Byte> System.Runtime.Intrinsics.Vector128.UnpackLow(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Runtime.Intrinsics.Vector128<System.Double> System.Runtime.Intrinsics.Vector128.ConvertToDouble(System.Runtime.Intrinsics.Vector128<System.UInt64>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.Int16> System.Runtime.Intrinsics.Vector128.WidenLower(System.Runtime.Intrinsics.Vector128<System.SByte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.Int16> System.Runtime.Intrinsics.Vector128.WidenUpper(System.Runtime.Intrinsics.Vector128<System.SByte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.SByte> System.Runtime.Intrinsics.Vector128.AsSByte`1(System.Runtime.Intrinsics.Vector128<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.SByte> System.Runtime.Intrinsics.Vector128.Create(System.Runtime.Intrinsics.Vector64<System.SByte>,System.Runtime.Intrinsics.Vector64<System.SByte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.SByte> System.Runtime.Intrinsics.Vector128.Create(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.SByte> System.Runtime.Intrinsics.Vector128.Create(System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.SByte> System.Runtime.Intrinsics.Vector128.CreateScalar(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.SByte> System.Runtime.Intrinsics.Vector128.CreateScalarUnsafe(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.SByte> System.Runtime.Intrinsics.Vector128.Narrow(System.Runtime.Intrinsics.Vector128<System.Int16>,System.Runtime.Intrinsics.Vector128<System.Int16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.SByte> System.Runtime.Intrinsics.Vector128.ShiftLeft(System.Runtime.Intrinsics.Vector128<System.SByte>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.SByte> System.Runtime.Intrinsics.Vector128.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector128<System.SByte>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.SByte> System.Runtime.Intrinsics.Vector128.ShiftRightLogical(System.Runtime.Intrinsics.Vector128<System.SByte>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.SByte> System.Runtime.Intrinsics.Vector128.Shuffle(System.Runtime.Intrinsics.Vector128<System.SByte>,System.Runtime.Intrinsics.Vector128<System.SByte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.Single> System.Runtime.Intrinsics.Vector128.ConvertToSingle(System.Runtime.Intrinsics.Vector128<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.AddSaturate(System.Runtime.Intrinsics.Vector128<System.UInt16>,System.Runtime.Intrinsics.Vector128<System.UInt16>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd.Arm64 | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.AddSaturate(System.Runtime.Intrinsics.Vector128<System.UInt16>,System.Runtime.Intrinsics.Vector128<System.UInt16>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.AsUInt16`1(System.Runtime.Intrinsics.Vector128<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.Create(System.Runtime.Intrinsics.Vector64<System.UInt16>,System.Runtime.Intrinsics.Vector64<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.Create(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.Create(System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.CreateScalar(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.CreateScalarUnsafe(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.Narrow(System.Runtime.Intrinsics.Vector128<System.UInt32>,System.Runtime.Intrinsics.Vector128<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.ShiftLeft(System.Runtime.Intrinsics.Vector128<System.UInt16>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.ShiftRightLogical(System.Runtime.Intrinsics.Vector128<System.UInt16>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.Shuffle(System.Runtime.Intrinsics.Vector128<System.UInt16>,System.Runtime.Intrinsics.Vector128<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.WidenLower(System.Runtime.Intrinsics.Vector128<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt16> System.Runtime.Intrinsics.Vector128.WidenUpper(System.Runtime.Intrinsics.Vector128<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.AsUInt32`1(System.Runtime.Intrinsics.Vector128<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.ConvertToUInt32(System.Runtime.Intrinsics.Vector128<System.Single>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.Create(System.Runtime.Intrinsics.Vector64<System.UInt32>,System.Runtime.Intrinsics.Vector64<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.Create(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.Create(System.UInt32,System.UInt32,System.UInt32,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.CreateScalar(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.CreateScalarUnsafe(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.Narrow(System.Runtime.Intrinsics.Vector128<System.UInt64>,System.Runtime.Intrinsics.Vector128<System.UInt64>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.ShiftLeft(System.Runtime.Intrinsics.Vector128<System.UInt32>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.ShiftRightLogical(System.Runtime.Intrinsics.Vector128<System.UInt32>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.Shuffle(System.Runtime.Intrinsics.Vector128<System.UInt32>,System.Runtime.Intrinsics.Vector128<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.WidenLower(System.Runtime.Intrinsics.Vector128<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt32> System.Runtime.Intrinsics.Vector128.WidenUpper(System.Runtime.Intrinsics.Vector128<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.AsUInt64`1(System.Runtime.Intrinsics.Vector128<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.ConvertToUInt64(System.Runtime.Intrinsics.Vector128<System.Double>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.Create(System.Runtime.Intrinsics.Vector64<System.UInt64>,System.Runtime.Intrinsics.Vector64<System.UInt64>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.Create(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.Create(System.UInt64,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.CreateScalar(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.CreateScalarUnsafe(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.ShiftLeft(System.Runtime.Intrinsics.Vector128<System.UInt64>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.ShiftRightLogical(System.Runtime.Intrinsics.Vector128<System.UInt64>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.Shuffle(System.Runtime.Intrinsics.Vector128<System.UInt64>,System.Runtime.Intrinsics.Vector128<System.UInt64>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.WidenLower(System.Runtime.Intrinsics.Vector128<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UInt64> System.Runtime.Intrinsics.Vector128.WidenUpper(System.Runtime.Intrinsics.Vector128<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UIntPtr> System.Runtime.Intrinsics.Vector128.AsNUInt`1(System.Runtime.Intrinsics.Vector128<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UIntPtr> System.Runtime.Intrinsics.Vector128.Create(System.Runtime.Intrinsics.Vector64<System.UIntPtr>,System.Runtime.Intrinsics.Vector64<System.UIntPtr>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UIntPtr> System.Runtime.Intrinsics.Vector128.Create(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UIntPtr> System.Runtime.Intrinsics.Vector128.CreateScalar(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UIntPtr> System.Runtime.Intrinsics.Vector128.CreateScalarUnsafe(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UIntPtr> System.Runtime.Intrinsics.Vector128.ShiftLeft(System.Runtime.Intrinsics.Vector128<System.UIntPtr>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128<System.UIntPtr> System.Runtime.Intrinsics.Vector128.ShiftRightLogical(System.Runtime.Intrinsics.Vector128<System.UIntPtr>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector128`1 | [DebuggerDisplayAttribute(...)] | 0 | {DisplayString,nq} | -| System.Runtime.Intrinsics.Vector128`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.Runtime.Intrinsics.Vector128DebugView`1 | -| System.Runtime.Intrinsics.Vector128`1 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Runtime.Intrinsics.Vector128`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.Intrinsics.Vector128`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector256<!0> | [NullableAttribute(...)] | 0 | [0,1] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector128.ToVector256Unsafe`1(System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector128.ToVector256`1(System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Abs`1(System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Add`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.AndNot`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.AsVector256`1(System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.BitwiseAnd`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.BitwiseOr`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.ConditionalSelect`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.CreateScalarUnsafe`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.CreateScalar`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Create`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Create`1(!0[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Create`1(!0[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Create`1(System.ReadOnlySpan<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Create`1(System.Runtime.Intrinsics.Vector128<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Divide`1(System.Runtime.Intrinsics.Vector256<!0>,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Divide`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Equals`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.GreaterThanOrEqual`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.GreaterThan`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.LessThanOrEqual`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.LessThan`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.LoadAlignedNonTemporal`1(!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.LoadAlignedNonTemporal`1(!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.LoadAligned`1(!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.LoadAligned`1(!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.LoadUnsafe`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.LoadUnsafe`1(!0,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.LoadUnsafe`1(!0,System.UIntPtr) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Load`1(!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Load`1(!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Max`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Min`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Multiply`1(!0,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Multiply`1(System.Runtime.Intrinsics.Vector256<!0>,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Multiply`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Negate`1(System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.OnesComplement`1(System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Sqrt`1(System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Subtract`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.WithElement`1(System.Runtime.Intrinsics.Vector256<!0>,System.Int32,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.WithLower`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.WithUpper`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256.Xor`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256`1.AllBitsSet | [NullableAttribute(...)] | 0 | [0,1] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256`1.One | [NullableAttribute(...)] | 0 | [0,1] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector256`1.Zero | [NullableAttribute(...)] | 0 | [0,1] | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector512.GetLower`1(System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!0> System.Runtime.Intrinsics.Vector512.GetUpper`1(System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<!1> System.Runtime.Intrinsics.Vector256.As`2(System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector256<System.Byte> System.Buffers.IndexOfAnyAsciiSearcher.Default.PackSources(System.Runtime.Intrinsics.Vector256<System.UInt16>,System.Runtime.Intrinsics.Vector256<System.UInt16>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx2 | -| System.Runtime.Intrinsics.Vector256<System.Byte> System.Buffers.IndexOfAnyAsciiSearcher.FixUpPackedVector256Result(System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx2 | -| System.Runtime.Intrinsics.Vector256<System.Byte> System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyLookupCore(System.Runtime.Intrinsics.Vector256<System.Byte>,System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx2 | -| System.Runtime.Intrinsics.Vector256<System.Byte> System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyLookup`1(System.Runtime.Intrinsics.Vector256<System.Byte>,System.Runtime.Intrinsics.Vector256<System.Byte>,System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx2 | -| System.Runtime.Intrinsics.Vector256<System.Byte> System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyLookup`2(System.Runtime.Intrinsics.Vector256<System.Int16>,System.Runtime.Intrinsics.Vector256<System.Int16>,System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx2 | -| System.Runtime.Intrinsics.Vector256<System.Byte> System.Buffers.IndexOfAnyAsciiSearcher.Ssse3AndWasmHandleZeroInNeedle.PackSources(System.Runtime.Intrinsics.Vector256<System.UInt16>,System.Runtime.Intrinsics.Vector256<System.UInt16>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx2 | -| System.Runtime.Intrinsics.Vector256<System.Byte> System.Buffers.ProbabilisticMap.ContainsMask32CharsAvx2(System.Runtime.Intrinsics.Vector256<System.Byte>,System.Runtime.Intrinsics.Vector256<System.Byte>,System.Char) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx2 | -| System.Runtime.Intrinsics.Vector256<System.Byte> System.Buffers.ProbabilisticMap.IsCharBitSetAvx2(System.Runtime.Intrinsics.Vector256<System.Byte>,System.Runtime.Intrinsics.Vector256<System.Byte>,System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx2 | -| System.Runtime.Intrinsics.Vector256<System.Byte> System.PackedSpanHelpers.FixUpPackedVector256Result(System.Runtime.Intrinsics.Vector256<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx2 | -| System.Runtime.Intrinsics.Vector256<System.Byte> System.PackedSpanHelpers.PackSources(System.Runtime.Intrinsics.Vector256<System.Int16>,System.Runtime.Intrinsics.Vector256<System.Int16>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx2 | -| System.Runtime.Intrinsics.Vector256<System.Byte> System.Runtime.Intrinsics.Vector256.Narrow(System.Runtime.Intrinsics.Vector256<System.UInt16>,System.Runtime.Intrinsics.Vector256<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.Double> System.Runtime.Intrinsics.Vector256.ConvertToDouble(System.Runtime.Intrinsics.Vector256<System.UInt64>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.Int16> System.Runtime.Intrinsics.Vector256.WidenLower(System.Runtime.Intrinsics.Vector256<System.SByte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.Int16> System.Runtime.Intrinsics.Vector256.WidenUpper(System.Runtime.Intrinsics.Vector256<System.SByte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.SByte> System.Runtime.Intrinsics.Vector256.AsSByte`1(System.Runtime.Intrinsics.Vector256<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.SByte> System.Runtime.Intrinsics.Vector256.Create(System.Runtime.Intrinsics.Vector128<System.SByte>,System.Runtime.Intrinsics.Vector128<System.SByte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.SByte> System.Runtime.Intrinsics.Vector256.Create(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.SByte> System.Runtime.Intrinsics.Vector256.Create(System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.SByte> System.Runtime.Intrinsics.Vector256.CreateScalar(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.SByte> System.Runtime.Intrinsics.Vector256.CreateScalarUnsafe(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.SByte> System.Runtime.Intrinsics.Vector256.Narrow(System.Runtime.Intrinsics.Vector256<System.Int16>,System.Runtime.Intrinsics.Vector256<System.Int16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.SByte> System.Runtime.Intrinsics.Vector256.ShiftLeft(System.Runtime.Intrinsics.Vector256<System.SByte>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.SByte> System.Runtime.Intrinsics.Vector256.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector256<System.SByte>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.SByte> System.Runtime.Intrinsics.Vector256.ShiftRightLogical(System.Runtime.Intrinsics.Vector256<System.SByte>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.SByte> System.Runtime.Intrinsics.Vector256.Shuffle(System.Runtime.Intrinsics.Vector256<System.SByte>,System.Runtime.Intrinsics.Vector256<System.SByte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.Single> System.Runtime.Intrinsics.Vector256.ConvertToSingle(System.Runtime.Intrinsics.Vector256<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.AsUInt16`1(System.Runtime.Intrinsics.Vector256<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.Create(System.Runtime.Intrinsics.Vector128<System.UInt16>,System.Runtime.Intrinsics.Vector128<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.Create(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.Create(System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.CreateScalar(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.CreateScalarUnsafe(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.Narrow(System.Runtime.Intrinsics.Vector256<System.UInt32>,System.Runtime.Intrinsics.Vector256<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.ShiftLeft(System.Runtime.Intrinsics.Vector256<System.UInt16>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.ShiftRightLogical(System.Runtime.Intrinsics.Vector256<System.UInt16>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.Shuffle(System.Runtime.Intrinsics.Vector256<System.UInt16>,System.Runtime.Intrinsics.Vector256<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.WidenLower(System.Runtime.Intrinsics.Vector256<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt16> System.Runtime.Intrinsics.Vector256.WidenUpper(System.Runtime.Intrinsics.Vector256<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.AsUInt32`1(System.Runtime.Intrinsics.Vector256<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.ConvertToUInt32(System.Runtime.Intrinsics.Vector256<System.Single>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.Create(System.Runtime.Intrinsics.Vector128<System.UInt32>,System.Runtime.Intrinsics.Vector128<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.Create(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.Create(System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.CreateScalar(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.CreateScalarUnsafe(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.Narrow(System.Runtime.Intrinsics.Vector256<System.UInt64>,System.Runtime.Intrinsics.Vector256<System.UInt64>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.ShiftLeft(System.Runtime.Intrinsics.Vector256<System.UInt32>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.ShiftRightLogical(System.Runtime.Intrinsics.Vector256<System.UInt32>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.Shuffle(System.Runtime.Intrinsics.Vector256<System.UInt32>,System.Runtime.Intrinsics.Vector256<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.WidenLower(System.Runtime.Intrinsics.Vector256<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt32> System.Runtime.Intrinsics.Vector256.WidenUpper(System.Runtime.Intrinsics.Vector256<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.AsUInt64`1(System.Runtime.Intrinsics.Vector256<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.ConvertToUInt64(System.Runtime.Intrinsics.Vector256<System.Double>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.Create(System.Runtime.Intrinsics.Vector128<System.UInt64>,System.Runtime.Intrinsics.Vector128<System.UInt64>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.Create(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.Create(System.UInt64,System.UInt64,System.UInt64,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.CreateScalar(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.CreateScalarUnsafe(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.ShiftLeft(System.Runtime.Intrinsics.Vector256<System.UInt64>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.ShiftRightLogical(System.Runtime.Intrinsics.Vector256<System.UInt64>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.Shuffle(System.Runtime.Intrinsics.Vector256<System.UInt64>,System.Runtime.Intrinsics.Vector256<System.UInt64>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.WidenLower(System.Runtime.Intrinsics.Vector256<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UInt64> System.Runtime.Intrinsics.Vector256.WidenUpper(System.Runtime.Intrinsics.Vector256<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UIntPtr> System.Runtime.Intrinsics.Vector256.AsNUInt`1(System.Runtime.Intrinsics.Vector256<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UIntPtr> System.Runtime.Intrinsics.Vector256.Create(System.Runtime.Intrinsics.Vector128<System.UIntPtr>,System.Runtime.Intrinsics.Vector128<System.UIntPtr>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UIntPtr> System.Runtime.Intrinsics.Vector256.Create(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UIntPtr> System.Runtime.Intrinsics.Vector256.CreateScalar(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UIntPtr> System.Runtime.Intrinsics.Vector256.CreateScalarUnsafe(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UIntPtr> System.Runtime.Intrinsics.Vector256.ShiftLeft(System.Runtime.Intrinsics.Vector256<System.UIntPtr>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256<System.UIntPtr> System.Runtime.Intrinsics.Vector256.ShiftRightLogical(System.Runtime.Intrinsics.Vector256<System.UIntPtr>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector256`1 | [DebuggerDisplayAttribute(...)] | 0 | {DisplayString,nq} | -| System.Runtime.Intrinsics.Vector256`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.Runtime.Intrinsics.Vector256DebugView`1 | -| System.Runtime.Intrinsics.Vector256`1 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Runtime.Intrinsics.Vector256`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.Intrinsics.Vector256`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector512<!0> | [NullableAttribute(...)] | 0 | [0,1] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector256.ToVector512Unsafe`1(System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector256.ToVector512`1(System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Abs`1(System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Add`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.AndNot`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.AsVector512`1(System.Numerics.Vector<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.BitwiseAnd`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.BitwiseOr`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.ConditionalSelect`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.CreateScalarUnsafe`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.CreateScalar`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Create`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Create`1(!0[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Create`1(!0[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Create`1(System.ReadOnlySpan<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Create`1(System.Runtime.Intrinsics.Vector256<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Divide`1(System.Runtime.Intrinsics.Vector512<!0>,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Divide`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Equals`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.GreaterThanOrEqual`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.GreaterThan`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.LessThanOrEqual`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.LessThan`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.LoadAlignedNonTemporal`1(!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.LoadAlignedNonTemporal`1(!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.LoadAligned`1(!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.LoadAligned`1(!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.LoadUnsafe`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.LoadUnsafe`1(!0,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.LoadUnsafe`1(!0,System.UIntPtr) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Load`1(!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Load`1(!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Max`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Min`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Multiply`1(!0,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Multiply`1(System.Runtime.Intrinsics.Vector512<!0>,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Multiply`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Negate`1(System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.OnesComplement`1(System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Sqrt`1(System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Subtract`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.WithElement`1(System.Runtime.Intrinsics.Vector512<!0>,System.Int32,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.WithLower`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.WithUpper`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512.Xor`1(System.Runtime.Intrinsics.Vector512<!0>,System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512`1.AllBitsSet | [NullableAttribute(...)] | 0 | [0,1] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512`1.One | [NullableAttribute(...)] | 0 | [0,1] | -| System.Runtime.Intrinsics.Vector512<!0> System.Runtime.Intrinsics.Vector512`1.Zero | [NullableAttribute(...)] | 0 | [0,1] | -| System.Runtime.Intrinsics.Vector512<!1> System.Runtime.Intrinsics.Vector512.As`2(System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Intrinsics.Vector512<System.Byte> System.PackedSpanHelpers.FixUpPackedVector512Result(System.Runtime.Intrinsics.Vector512<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx512F | -| System.Runtime.Intrinsics.Vector512<System.Byte> System.PackedSpanHelpers.PackSources(System.Runtime.Intrinsics.Vector512<System.Int16>,System.Runtime.Intrinsics.Vector512<System.Int16>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx512BW | -| System.Runtime.Intrinsics.Vector512<System.Byte> System.Runtime.Intrinsics.Vector512.Narrow(System.Runtime.Intrinsics.Vector512<System.UInt16>,System.Runtime.Intrinsics.Vector512<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.Double> System.Runtime.Intrinsics.Vector512.ConvertToDouble(System.Runtime.Intrinsics.Vector512<System.UInt64>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.Int16> System.Runtime.Intrinsics.Vector512.WidenLower(System.Runtime.Intrinsics.Vector512<System.SByte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.Int16> System.Runtime.Intrinsics.Vector512.WidenUpper(System.Runtime.Intrinsics.Vector512<System.SByte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.SByte> System.Runtime.Intrinsics.Vector512.AsSByte`1(System.Runtime.Intrinsics.Vector512<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.SByte> System.Runtime.Intrinsics.Vector512.Create(System.Runtime.Intrinsics.Vector256<System.SByte>,System.Runtime.Intrinsics.Vector256<System.SByte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.SByte> System.Runtime.Intrinsics.Vector512.Create(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.SByte> System.Runtime.Intrinsics.Vector512.Create(System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte,System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.SByte> System.Runtime.Intrinsics.Vector512.CreateScalar(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.SByte> System.Runtime.Intrinsics.Vector512.CreateScalarUnsafe(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.SByte> System.Runtime.Intrinsics.Vector512.Narrow(System.Runtime.Intrinsics.Vector512<System.Int16>,System.Runtime.Intrinsics.Vector512<System.Int16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.SByte> System.Runtime.Intrinsics.Vector512.ShiftLeft(System.Runtime.Intrinsics.Vector512<System.SByte>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.SByte> System.Runtime.Intrinsics.Vector512.ShiftRightArithmetic(System.Runtime.Intrinsics.Vector512<System.SByte>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.SByte> System.Runtime.Intrinsics.Vector512.ShiftRightLogical(System.Runtime.Intrinsics.Vector512<System.SByte>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.SByte> System.Runtime.Intrinsics.Vector512.Shuffle(System.Runtime.Intrinsics.Vector512<System.SByte>,System.Runtime.Intrinsics.Vector512<System.SByte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.Single> System.Runtime.Intrinsics.Vector512.ConvertToSingle(System.Runtime.Intrinsics.Vector512<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.AsUInt16`1(System.Runtime.Intrinsics.Vector512<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.Create(System.Runtime.Intrinsics.Vector256<System.UInt16>,System.Runtime.Intrinsics.Vector256<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.Create(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.Create(System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.CreateScalar(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.CreateScalarUnsafe(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.Narrow(System.Runtime.Intrinsics.Vector512<System.UInt32>,System.Runtime.Intrinsics.Vector512<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.ShiftLeft(System.Runtime.Intrinsics.Vector512<System.UInt16>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.ShiftRightLogical(System.Runtime.Intrinsics.Vector512<System.UInt16>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.Shuffle(System.Runtime.Intrinsics.Vector512<System.UInt16>,System.Runtime.Intrinsics.Vector512<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.WidenLower(System.Runtime.Intrinsics.Vector512<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt16> System.Runtime.Intrinsics.Vector512.WidenUpper(System.Runtime.Intrinsics.Vector512<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.AsUInt32`1(System.Runtime.Intrinsics.Vector512<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.ConvertToUInt32(System.Runtime.Intrinsics.Vector512<System.Single>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.Create(System.Runtime.Intrinsics.Vector256<System.UInt32>,System.Runtime.Intrinsics.Vector256<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.Create(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.Create(System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.CreateScalar(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.CreateScalarUnsafe(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.Narrow(System.Runtime.Intrinsics.Vector512<System.UInt64>,System.Runtime.Intrinsics.Vector512<System.UInt64>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.ShiftLeft(System.Runtime.Intrinsics.Vector512<System.UInt32>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.ShiftRightLogical(System.Runtime.Intrinsics.Vector512<System.UInt32>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.Shuffle(System.Runtime.Intrinsics.Vector512<System.UInt32>,System.Runtime.Intrinsics.Vector512<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.WidenLower(System.Runtime.Intrinsics.Vector512<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt32> System.Runtime.Intrinsics.Vector512.WidenUpper(System.Runtime.Intrinsics.Vector512<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.AsUInt64`1(System.Runtime.Intrinsics.Vector512<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.ConvertToUInt64(System.Runtime.Intrinsics.Vector512<System.Double>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.Create(System.Runtime.Intrinsics.Vector256<System.UInt64>,System.Runtime.Intrinsics.Vector256<System.UInt64>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.Create(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.Create(System.UInt64,System.UInt64,System.UInt64,System.UInt64,System.UInt64,System.UInt64,System.UInt64,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.CreateScalar(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.CreateScalarUnsafe(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.ShiftLeft(System.Runtime.Intrinsics.Vector512<System.UInt64>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.ShiftRightLogical(System.Runtime.Intrinsics.Vector512<System.UInt64>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.Shuffle(System.Runtime.Intrinsics.Vector512<System.UInt64>,System.Runtime.Intrinsics.Vector512<System.UInt64>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.WidenLower(System.Runtime.Intrinsics.Vector512<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UInt64> System.Runtime.Intrinsics.Vector512.WidenUpper(System.Runtime.Intrinsics.Vector512<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UIntPtr> System.Runtime.Intrinsics.Vector512.AsNUInt`1(System.Runtime.Intrinsics.Vector512<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UIntPtr> System.Runtime.Intrinsics.Vector512.Create(System.Runtime.Intrinsics.Vector256<System.UIntPtr>,System.Runtime.Intrinsics.Vector256<System.UIntPtr>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UIntPtr> System.Runtime.Intrinsics.Vector512.Create(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UIntPtr> System.Runtime.Intrinsics.Vector512.CreateScalar(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UIntPtr> System.Runtime.Intrinsics.Vector512.CreateScalarUnsafe(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UIntPtr> System.Runtime.Intrinsics.Vector512.ShiftLeft(System.Runtime.Intrinsics.Vector512<System.UIntPtr>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512<System.UIntPtr> System.Runtime.Intrinsics.Vector512.ShiftRightLogical(System.Runtime.Intrinsics.Vector512<System.UIntPtr>,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.Vector512`1 | [DebuggerDisplayAttribute(...)] | 0 | {DisplayString,nq} | -| System.Runtime.Intrinsics.Vector512`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.Runtime.Intrinsics.Vector512DebugView`1 | -| System.Runtime.Intrinsics.Vector512`1 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Runtime.Intrinsics.Vector512`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.Intrinsics.Vector512`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Intrinsics.Wasm.PackedSimd | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.Aes | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.Avx | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.Avx2 | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.Avx512BW | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.Avx512CD | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.Avx512DQ | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.Avx512F | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.Avx512Vbmi | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.AvxVnni | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.AvxVnni | [RequiresPreviewFeaturesAttribute(...)] | 0 | AvxVnni is in preview. | -| System.Runtime.Intrinsics.X86.Bmi1 | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.Bmi2 | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.Fma | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.Lzcnt | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.Pclmulqdq | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.Popcnt | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.Sse | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.Sse2 | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.Sse3 | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.Sse41 | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.Sse42 | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.Ssse3 | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.X86Base | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Intrinsics.X86.X86Serialize | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Loader.AssemblyDependencyResolver | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.Loader.AssemblyDependencyResolver | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Loader.AssemblyDependencyResolver | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.Runtime.Loader.AssemblyDependencyResolver | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Runtime.Loader.AssemblyDependencyResolver | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Runtime.Loader.AssemblyDependencyResolver | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.Runtime.Loader.AssemblyLoadContext | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.Loader.AssemblyLoadContext | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Loader.AssemblyLoadContext System.Runtime.Loader.AssemblyLoadContext.CurrentContextualReflectionContext | [NullableAttribute(...)] | 0 | 2 | -| System.Runtime.Loader.AssemblyLoadContext System.Runtime.Loader.AssemblyLoadContext.get_CurrentContextualReflectionContext() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Loader.AssemblyLoadContext.AssemblyLoad | [NullableAttribute(...)] | 0 | 2 | -| System.Runtime.Loader.AssemblyLoadContext.AssemblyResolve | [NullableAttribute(...)] | 0 | 2 | -| System.Runtime.Loader.AssemblyLoadContext.ContextualReflectionScope | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Runtime.Loader.AssemblyLoadContext.ContextualReflectionScope | [NullableContextAttribute(...)] | 0 | 0 | -| System.Runtime.Loader.AssemblyLoadContext.ContextualReflectionScope System.Runtime.Loader.AssemblyLoadContext.EnterContextualReflection(System.Reflection.Assembly) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Loader.AssemblyLoadContext.Resolving | [NullableAttribute(...)] | 0 | [2,1,1,2] | -| System.Runtime.Loader.AssemblyLoadContext.ResolvingUnmanagedDll | [NullableAttribute(...)] | 0 | [2,1,1] | -| System.Runtime.Loader.AssemblyLoadContext.ResourceResolve | [NullableAttribute(...)] | 0 | 2 | -| System.Runtime.Loader.AssemblyLoadContext.TypeResolve | [NullableAttribute(...)] | 0 | 2 | -| System.Runtime.Loader.AssemblyLoadContext.Unloading | [NullableAttribute(...)] | 0 | [2,1] | -| System.Runtime.Loader.AssemblyLoadContext._resolving | [NullableAttribute(...)] | 0 | [2,1,1,1] | -| System.Runtime.Loader.AssemblyLoadContext._resolvingUnmanagedDll | [NullableAttribute(...)] | 0 | [2,1,1] | -| System.Runtime.Loader.AssemblyLoadContext._unloading | [NullableAttribute(...)] | 0 | [2,1] | -| System.Runtime.Remoting.ObjectHandle | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.Remoting.ObjectHandle | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Remoting.ObjectHandle System.Activator.CreateInstance(System.String,System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Type and its constructor could be removed | -| System.Runtime.Remoting.ObjectHandle System.Activator.CreateInstance(System.String,System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Remoting.ObjectHandle System.Activator.CreateInstance(System.String,System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Type and its constructor could be removed | -| System.Runtime.Remoting.ObjectHandle System.Activator.CreateInstance(System.String,System.String,System.Object[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Type and its constructor could be removed | -| System.Runtime.Remoting.ObjectHandle System.Activator.CreateInstanceFrom(System.String,System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Type and its constructor could be removed | -| System.Runtime.Remoting.ObjectHandle System.Activator.CreateInstanceFrom(System.String,System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Remoting.ObjectHandle System.Activator.CreateInstanceFrom(System.String,System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Type and its constructor could be removed | -| System.Runtime.Remoting.ObjectHandle System.Activator.CreateInstanceFrom(System.String,System.String,System.Object[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Type and its constructor could be removed | -| System.Runtime.Remoting.ObjectHandle System.Activator.CreateInstanceInternal(System.String,System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[],System.Threading.StackCrawlMark) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Runtime.Remoting.ObjectHandle System.Activator.CreateInstanceInternal(System.String,System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[],System.Threading.StackCrawlMark) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Runtime.Remoting.ObjectHandle System.Activator.CreateInstanceInternal(System.String,System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[],System.Threading.StackCrawlMark) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2072:UnrecognizedReflectionPattern | -| System.Runtime.Remoting.ObjectHandle System.AppDomain.CreateInstance(System.String,System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Type and its constructor could be removed | -| System.Runtime.Remoting.ObjectHandle System.AppDomain.CreateInstance(System.String,System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Remoting.ObjectHandle System.AppDomain.CreateInstance(System.String,System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Type and its constructor could be removed | -| System.Runtime.Remoting.ObjectHandle System.AppDomain.CreateInstance(System.String,System.String,System.Object[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Type and its constructor could be removed | -| System.Runtime.Remoting.ObjectHandle System.AppDomain.CreateInstanceFrom(System.String,System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Type and its constructor could be removed | -| System.Runtime.Remoting.ObjectHandle System.AppDomain.CreateInstanceFrom(System.String,System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Remoting.ObjectHandle System.AppDomain.CreateInstanceFrom(System.String,System.String,System.Boolean,System.Reflection.BindingFlags,System.Reflection.Binder,System.Object[],System.Globalization.CultureInfo,System.Object[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Type and its constructor could be removed | -| System.Runtime.Remoting.ObjectHandle System.AppDomain.CreateInstanceFrom(System.String,System.String,System.Object[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Type and its constructor could be removed | -| System.Runtime.Serialization.IDeserializationCallback | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Serialization.IFormatterConverter | [CLSCompliantAttribute(...)] | 0 | False | -| System.Runtime.Serialization.IFormatterConverter | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Serialization.IFormatterConverter | [ObsoleteAttribute(...)] | 0 | Formatter-based serialization is obsolete and should not be used. | -| System.Runtime.Serialization.IObjectReference | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Serialization.IObjectReference | [ObsoleteAttribute(...)] | 0 | Formatter-based serialization is obsolete and should not be used. | -| System.Runtime.Serialization.ISafeSerializationData | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Serialization.ISafeSerializationData | [ObsoleteAttribute(...)] | 0 | Formatter-based serialization is obsolete and should not be used. | -| System.Runtime.Serialization.ISerializable | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Serialization.OnDeserializedAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Runtime.Serialization.OnDeserializingAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Runtime.Serialization.OnSerializedAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Runtime.Serialization.OnSerializingAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Runtime.Serialization.OptionalFieldAttribute | [AttributeUsageAttribute(...)] | 0 | 256 | -| System.Runtime.Serialization.SafeSerializationEventArgs | [ObsoleteAttribute(...)] | 0 | Formatter-based serialization is obsolete and should not be used. | -| System.Runtime.Serialization.SerializationEntry | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.Serialization.SerializationEntry | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Serialization.SerializationException | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.Serialization.SerializationException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Serialization.SerializationException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Runtime.Serialization.SerializationInfo | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.Serialization.SerializationInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Serialization.SerializationInfoEnumerator | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.Serialization.SerializationInfoEnumerator | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Serialization.StreamingContext | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.Serialization.StreamingContext | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Serialization.StreamingContext._state | [ObsoleteAttribute(...)] | 0 | Formatter-based serialization is obsolete and should not be used. | -| System.Runtime.Serialization.StreamingContextStates | [ObsoleteAttribute(...)] | 0 | Formatter-based serialization is obsolete and should not be used. | -| System.Runtime.Serialization.StreamingContextStates System.Runtime.Serialization.StreamingContext.State | [ObsoleteAttribute(...)] | 0 | Formatter-based serialization is obsolete and should not be used. | -| System.Runtime.TargetedPatchingOptOutAttribute | [AttributeUsageAttribute(...)] | 0 | 96 | -| System.Runtime.TargetedPatchingOptOutAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.TargetedPatchingOptOutAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Versioning.ComponentGuaranteesAttribute | [AttributeUsageAttribute(...)] | 0 | 5887 | -| System.Runtime.Versioning.FrameworkName | [NotNullWhenAttribute(...)] | 0 | True | -| System.Runtime.Versioning.FrameworkName | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.Versioning.FrameworkName | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Versioning.NonVersionableAttribute | [AttributeUsageAttribute(...)] | 0 | 108 | -| System.Runtime.Versioning.OSPlatformAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.Versioning.OSPlatformAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Versioning.ObsoletedOSPlatformAttribute | [AttributeUsageAttribute(...)] | 0 | 2047 | -| System.Runtime.Versioning.ObsoletedOSPlatformAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.Versioning.ObsoletedOSPlatformAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Versioning.RequiresPreviewFeaturesAttribute | [AttributeUsageAttribute(...)] | 0 | 6143 | -| System.Runtime.Versioning.RequiresPreviewFeaturesAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.Versioning.RequiresPreviewFeaturesAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Runtime.Versioning.ResourceConsumptionAttribute | [AttributeUsageAttribute(...)] | 0 | 224 | -| System.Runtime.Versioning.ResourceConsumptionAttribute | [ConditionalAttribute(...)] | 0 | RESOURCE_ANNOTATION_WORK | -| System.Runtime.Versioning.ResourceExposureAttribute | [AttributeUsageAttribute(...)] | 0 | 480 | -| System.Runtime.Versioning.ResourceExposureAttribute | [ConditionalAttribute(...)] | 0 | RESOURCE_ANNOTATION_WORK | -| System.Runtime.Versioning.SupportedOSPlatformAttribute | [AttributeUsageAttribute(...)] | 0 | 2047 | -| System.Runtime.Versioning.SupportedOSPlatformGuardAttribute | [AttributeUsageAttribute(...)] | 0 | 448 | -| System.Runtime.Versioning.TargetFrameworkAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Runtime.Versioning.TargetFrameworkAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.Versioning.TargetFrameworkAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Versioning.TargetPlatformAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Runtime.Versioning.UnsupportedOSPlatformAttribute | [AttributeUsageAttribute(...)] | 0 | 2047 | -| System.Runtime.Versioning.UnsupportedOSPlatformAttribute | [NullableAttribute(...)] | 0 | 0 | -| System.Runtime.Versioning.UnsupportedOSPlatformAttribute | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.Versioning.UnsupportedOSPlatformGuardAttribute | [AttributeUsageAttribute(...)] | 0 | 448 | -| System.RuntimeFieldHandle System.ModuleHandle.GetRuntimeFieldHandleFromMetadataToken(System.Int32) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.RuntimeFieldHandle System.ModuleHandle.ResolveFieldHandle(System.Int32) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.RuntimeFieldHandle System.ModuleHandle.ResolveFieldHandle(System.Int32,System.RuntimeTypeHandle[],System.RuntimeTypeHandle[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.RuntimeMethodHandle System.ModuleHandle.GetRuntimeMethodHandleFromMetadataToken(System.Int32) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.RuntimeMethodHandle System.ModuleHandle.ResolveMethodHandle(System.Int32) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.RuntimeMethodHandle System.ModuleHandle.ResolveMethodHandle(System.Int32,System.RuntimeTypeHandle[],System.RuntimeTypeHandle[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.RuntimeMethodHandleInternal System.Diagnostics.StackFrame.GetMethodDescFromNativeIP(System.IntPtr) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.RuntimeMethodHandleInternal System.ModuleHandle.ResolveMethod(System.Runtime.CompilerServices.QCallModule,System.Int32,System.IntPtr*,System.Int32,System.IntPtr*,System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.RuntimeMethodHandleInternal System.RuntimeTypeHandle.GetInterfaceMethodImplementation(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.QCallTypeHandle,System.RuntimeMethodHandleInternal) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.RuntimeType | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1 | -| System.RuntimeType | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.RuntimeType | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.RuntimeType.ListBuilder`1 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.RuntimeTypeHandle | [NullableAttribute(...)] | 0 | 0 | -| System.RuntimeTypeHandle | [NullableContextAttribute(...)] | 0 | 2 | -| System.RuntimeTypeHandle System.ModuleHandle.GetRuntimeTypeHandleFromMetadataToken(System.Int32) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.RuntimeTypeHandle System.ModuleHandle.ResolveTypeHandle(System.Int32) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.RuntimeTypeHandle System.ModuleHandle.ResolveTypeHandle(System.Int32,System.RuntimeTypeHandle[],System.RuntimeTypeHandle[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.RuntimeType[] System.RuntimeType.RuntimeTypeCache.MemberInfoCache`1.PopulateInterfaces(System.RuntimeType.RuntimeTypeCache.Filter) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.RuntimeType[] System.RuntimeType.RuntimeTypeCache.MemberInfoCache`1.PopulateInterfaces(System.RuntimeType.RuntimeTypeCache.Filter) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2065:UnrecognizedReflectionPattern | -| System.RuntimeType[] System.RuntimeType.RuntimeTypeCache.MemberInfoCache`1.PopulateNestedClasses(System.RuntimeType.RuntimeTypeCache.Filter) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.RuntimeType[] System.RuntimeType.RuntimeTypeCache.MemberInfoCache`1.PopulateNestedClasses(System.RuntimeType.RuntimeTypeCache.Filter) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.SByte System.Buffers.Binary.BinaryPrimitives.ReverseEndianness(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Convert.ToSByte(System.Boolean) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Convert.ToSByte(System.Byte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Convert.ToSByte(System.Char) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Convert.ToSByte(System.DateTime) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Convert.ToSByte(System.Decimal) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Convert.ToSByte(System.Double) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Convert.ToSByte(System.Int16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Convert.ToSByte(System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Convert.ToSByte(System.Int64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Convert.ToSByte(System.Object) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Convert.ToSByte(System.Object,System.IFormatProvider) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Convert.ToSByte(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Convert.ToSByte(System.Single) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Convert.ToSByte(System.String) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Convert.ToSByte(System.String,System.IFormatProvider) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Convert.ToSByte(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.SByte System.Convert.ToSByte(System.String,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Convert.ToSByte(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Convert.ToSByte(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Convert.ToSByte(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Decimal.ToSByte(System.Decimal) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Decimal.op_Explicit(System.Decimal) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Half.op_CheckedExplicit(System.Half) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Half.op_Explicit(System.Half) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.IO.BinaryReader.ReadSByte() | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.IO.UnmanagedMemoryAccessor.ReadSByte(System.Int64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Int128.op_CheckedExplicit(System.Int128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Int128.op_Explicit(System.Int128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Math.Abs(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Math.Clamp(System.SByte,System.SByte,System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Math.Max(System.SByte,System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Math.Min(System.SByte,System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Runtime.InteropServices.NFloat.op_CheckedExplicit(System.Runtime.InteropServices.NFloat) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Runtime.InteropServices.NFloat.op_Explicit(System.Runtime.InteropServices.NFloat) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Runtime.Serialization.SerializationInfo.GetSByte(System.String) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.SByte.CreateChecked`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.SByte System.SByte.CreateSaturating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.SByte System.SByte.CreateTruncating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.SByte System.SByte.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.SByte System.SByte.Parse(System.String,System.Globalization.NumberStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.SByte System.SByte.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.SByte System.SByte.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.SByte System.Threading.Thread.VolatileRead(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.Threading.Volatile.Read(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.UInt128.op_CheckedExplicit(System.UInt128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.SByte System.UInt128.op_Explicit(System.UInt128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.STAThreadAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Security.AllowPartiallyTrustedCallersAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Security.Cryptography.CryptographicException | [NullableAttribute(...)] | 0 | 0 | -| System.Security.Cryptography.CryptographicException | [NullableContextAttribute(...)] | 0 | 1 | -| System.Security.Cryptography.CryptographicException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Security.IPermission | [NullableContextAttribute(...)] | 0 | 2 | -| System.Security.IPermission | [ObsoleteAttribute(...)] | 0 | Code Access Security is not supported or honored by the runtime. | -| System.Security.IPermission System.Security.IPermission.Copy() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Security.IPermission System.Security.Permissions.SecurityAttribute.CreatePermission() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Security.IPermission System.Security.Permissions.SecurityPermissionAttribute.CreatePermission() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Security.ISecurityEncodable | [NullableContextAttribute(...)] | 0 | 1 | -| System.Security.IStackWalk | [ObsoleteAttribute(...)] | 0 | Code Access Security is not supported or honored by the runtime. | -| System.Security.PermissionSet | [NullableAttribute(...)] | 0 | 0 | -| System.Security.PermissionSet | [NullableContextAttribute(...)] | 0 | 2 | -| System.Security.PermissionSet | [ObsoleteAttribute(...)] | 0 | Code Access Security is not supported or honored by the runtime. | -| System.Security.PermissionSet System.AppDomain.PermissionSet | [ObsoleteAttribute(...)] | 0 | Code Access Security is not supported or honored by the runtime. | -| System.Security.PermissionSet System.Security.PermissionSet.Copy() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Security.Permissions.CodeAccessSecurityAttribute | [AttributeUsageAttribute(...)] | 0 | 109 | -| System.Security.Permissions.CodeAccessSecurityAttribute | [ObsoleteAttribute(...)] | 0 | Code Access Security is not supported or honored by the runtime. | -| System.Security.Permissions.PermissionState | [ObsoleteAttribute(...)] | 0 | Code Access Security is not supported or honored by the runtime. | -| System.Security.Permissions.SecurityAction | [ObsoleteAttribute(...)] | 0 | Code Access Security is not supported or honored by the runtime. | -| System.Security.Permissions.SecurityAttribute | [AttributeUsageAttribute(...)] | 0 | 109 | -| System.Security.Permissions.SecurityAttribute | [ObsoleteAttribute(...)] | 0 | Code Access Security is not supported or honored by the runtime. | -| System.Security.Permissions.SecurityPermissionAttribute | [AttributeUsageAttribute(...)] | 0 | 109 | -| System.Security.Permissions.SecurityPermissionAttribute | [ObsoleteAttribute(...)] | 0 | Code Access Security is not supported or honored by the runtime. | -| System.Security.Permissions.SecurityPermissionFlag | [ObsoleteAttribute(...)] | 0 | Code Access Security is not supported or honored by the runtime. | -| System.Security.Principal.IIdentity | [NullableContextAttribute(...)] | 0 | 2 | -| System.Security.Principal.IPrincipal | [NullableContextAttribute(...)] | 0 | 2 | -| System.Security.Principal.IPrincipal System.Threading.Thread.CurrentPrincipal | [NullableAttribute(...)] | 0 | 2 | -| System.Security.Principal.IPrincipal System.Threading.Thread.get_CurrentPrincipal() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Security.SecureString System.Security.SecureString.Copy() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Security.SecurityCriticalAttribute | [AttributeUsageAttribute(...)] | 0 | 5501 | -| System.Security.SecurityCriticalScope | [ObsoleteAttribute(...)] | 0 | SecurityCriticalScope is only used for .NET 2.0 transparency compatibility. | -| System.Security.SecurityCriticalScope System.Security.SecurityCriticalAttribute.Scope | [ObsoleteAttribute(...)] | 0 | SecurityCriticalScope is only used for .NET 2.0 transparency compatibility. | -| System.Security.SecurityElement | [NotNullWhenAttribute(...)] | 0 | True | -| System.Security.SecurityElement | [NullableAttribute(...)] | 0 | 0 | -| System.Security.SecurityElement | [NullableContextAttribute(...)] | 0 | 2 | -| System.Security.SecurityElement System.Security.ISecurityEncodable.ToXml() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Security.SecurityElement System.Security.SecurityElement.Copy() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Security.SecurityElement System.Security.SecurityElement.FromString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Security.SecurityElement System.Security.SecurityElement.SearchForChildByTag(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Security.SecurityException | [NullableAttribute(...)] | 0 | 0 | -| System.Security.SecurityException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Security.SecurityException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Security.SecurityRulesAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Security.SecuritySafeCriticalAttribute | [AttributeUsageAttribute(...)] | 0 | 5500 | -| System.Security.SecurityTransparentAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Security.SecurityTreatAsSafeAttribute | [AttributeUsageAttribute(...)] | 0 | 5501 | -| System.Security.SecurityTreatAsSafeAttribute | [ObsoleteAttribute(...)] | 0 | SecurityTreatAsSafe is only used for .NET 2.0 transparency compatibility. Use the SecuritySafeCriticalAttribute instead. | -| System.Security.SuppressUnmanagedCodeSecurityAttribute | [AttributeUsageAttribute(...)] | 0 | 5188 | -| System.Security.UnverifiableCodeAttribute | [AttributeUsageAttribute(...)] | 0 | 2 | -| System.Security.VerificationException | [NullableAttribute(...)] | 0 | 0 | -| System.Security.VerificationException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Security.VerificationException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.SerializableAttribute | [AttributeUsageAttribute(...)] | 0 | 4124 | -| System.SerializableAttribute | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Single System.BitConverter.ToSingle(System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Single System.BitConverter.UInt32BitsToSingle(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Single System.Convert.ToSingle(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Single System.Convert.ToSingle(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Single System.Convert.ToSingle(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Single System.Convert.ToSingle(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Single System.Single.CreateChecked`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Single System.Single.CreateSaturating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Single System.Single.CreateTruncating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Single System.Single.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Single System.Single.Parse(System.String,System.Globalization.NumberStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Single System.Single.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Single System.Single.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Span<!0> | [NullableAttribute(...)] | 0 | [0,1] | -| System.Span<!0> System.MemoryExtensions.AsSpan`1(!0[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Span<!0> System.MemoryExtensions.AsSpan`1(!0[],System.Index) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Span<!0> System.MemoryExtensions.AsSpan`1(!0[],System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Span<!0> System.MemoryExtensions.AsSpan`1(!0[],System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Span<!0> System.MemoryExtensions.AsSpan`1(!0[],System.Range) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Span<!0> System.MemoryExtensions.AsSpan`1(System.ArraySegment<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Span<!0> System.MemoryExtensions.AsSpan`1(System.ArraySegment<!0>,System.Index) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Span<!0> System.MemoryExtensions.AsSpan`1(System.ArraySegment<!0>,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Span<!0> System.MemoryExtensions.AsSpan`1(System.ArraySegment<!0>,System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Span<!0> System.MemoryExtensions.AsSpan`1(System.ArraySegment<!0>,System.Range) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Span<!0> System.Memory`1.Span | [NullableAttribute(...)] | 0 | [0,1] | -| System.Span<!0> System.Runtime.InteropServices.CollectionsMarshal.AsSpan`1(System.Collections.Generic.List<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Span<!0> System.Runtime.InteropServices.MemoryMarshal.CreateSpan`1(!0,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Span<!0> System.Span`1.Empty | [NullableAttribute(...)] | 0 | [0,1] | -| System.Span<!0>.Enumerator System.Span`1.GetEnumerator() | [NullableContextAttribute(...)] | 0 | 0 | -| System.Span<!1> | [NullableAttribute(...)] | 0 | [0,1] | -| System.Span<System.Char> | [NullableAttribute(...)] | 0 | 0 | -| System.Span<System.Char> System.Text.StringBuilder.RemainingCurrentChunk | [NullableAttribute(...)] | 0 | 0 | -| System.Span<System.Object> | [NullableAttribute(...)] | 0 | [0,2] | -| System.Span`1 | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Span`1 | [DebuggerDisplayAttribute(...)] | 0 | {ToString(),raw} | -| System.Span`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.SpanDebugView`1 | -| System.Span`1 | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Span`1 | [NativeMarshallingAttribute(...)] | 0 | System.Runtime.InteropServices.Marshalling.SpanMarshaller`2 | -| System.Span`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Span`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Span`1 | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Span`1 | [ObsoleteAttribute(...)] | 1 | True | -| System.Span`1.Enumerator | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Span`1.Enumerator | [NullableAttribute(...)] | 0 | 0 | -| System.Span`1.Enumerator | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Span`1.Enumerator | [ObsoleteAttribute(...)] | 1 | True | -| System.StackOverflowException | [NullableAttribute(...)] | 0 | 0 | -| System.StackOverflowException | [NullableContextAttribute(...)] | 0 | 2 | -| System.StackOverflowException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.String System.AppContext.GetBaseDirectoryCore() | [UnconditionalSuppressMessageAttribute(...)] | 0 | SingleFile | -| System.String System.AppContext.GetBaseDirectoryCore() | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL3000: Avoid accessing Assembly file path when publishing as a single file | -| System.String System.AppContext.get_TargetFrameworkName() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.AppDomain.get_DynamicDirectory() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.AppDomain.get_RelativeSearchPath() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.ApplicationId.get_Culture() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.ApplicationId.get_ProcessorArchitecture() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.ArgumentException.get_Message() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.BadImageFormatException.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.BadImageFormatException.get_Message() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Boolean.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Boolean.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Buffers.StandardFormat.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Byte.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Byte.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Byte.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Byte.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Char.ConvertFromUtf32(System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Char.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Char.ToString(System.Char) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Char.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Console.ReadLine() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Console.ReadLine() | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.String System.Console.ReadLine() | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.String System.Console.get_Title() | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.String System.Convert.ToBase64String(System.Byte[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToBase64String(System.Byte[],System.Base64FormattingOptions) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToBase64String(System.Byte[],System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToBase64String(System.Byte[],System.Int32,System.Int32,System.Base64FormattingOptions) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToBase64String(System.ReadOnlySpan<System.Byte>,System.Base64FormattingOptions) | [NullableContextAttribute(...)] | 0 | 0 | -| System.String System.Convert.ToHexString(System.Byte[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToHexString(System.Byte[],System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToHexString(System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.String System.Convert.ToString(System.Boolean) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.Boolean,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.Byte) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.Byte,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.Byte,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.Char) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.Char,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.DateTime) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.DateTime,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.Decimal) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.Decimal,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.Double) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.Double,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.Int16) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.Int16,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.Int16,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.Int32,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.Int64) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.Int64,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.Int64,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.String System.Convert.ToString(System.SByte) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.SByte,System.IFormatProvider) | [CLSCompliantAttribute(...)] | 0 | False | -| System.String System.Convert.ToString(System.SByte,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.Single) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.Single,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.String System.Convert.ToString(System.UInt16) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.UInt16,System.IFormatProvider) | [CLSCompliantAttribute(...)] | 0 | False | -| System.String System.Convert.ToString(System.UInt16,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.String System.Convert.ToString(System.UInt32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.UInt32,System.IFormatProvider) | [CLSCompliantAttribute(...)] | 0 | False | -| System.String System.Convert.ToString(System.UInt32,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.String System.Convert.ToString(System.UInt64) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Convert.ToString(System.UInt64,System.IFormatProvider) | [CLSCompliantAttribute(...)] | 0 | False | -| System.String System.Convert.ToString(System.UInt64,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.DateOnly.ToLongDateString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.DateOnly.ToShortDateString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.DateOnly.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.DateOnly.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.DateOnly.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.DateOnly.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.DateTime.ToLongDateString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.DateTime.ToLongTimeString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.DateTime.ToShortDateString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.DateTime.ToShortTimeString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.DateTime.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.DateTime.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.DateTime.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.DateTime.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.DateTimeOffset.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.DateTimeOffset.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.DateTimeOffset.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.DateTimeOffset.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Decimal.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Decimal.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Decimal.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Decimal.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Diagnostics.CodeAnalysis.ExperimentalAttribute.get_UrlFormat() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute.get_Url() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute.get_Url() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Diagnostics.CodeAnalysis.SuppressMessageAttribute.get_Category() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Diagnostics.CodeAnalysis.SuppressMessageAttribute.get_CheckId() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.get_Category() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.get_CheckId() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Diagnostics.Contracts.ContractException.get_Failure() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Diagnostics.Contracts.ContractOptionAttribute.get_Value() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Diagnostics.DebuggerDisplayAttribute.get_Value() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Diagnostics.DebuggerTypeProxyAttribute.get_ProxyTypeName() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Diagnostics.DebuggerVisualizerAttribute.get_VisualizerTypeName() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Diagnostics.StackFrame.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Diagnostics.Tracing.EventSource.GenerateManifest(System.Type,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.String System.Diagnostics.Tracing.EventSource.GenerateManifest(System.Type,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2114:ReflectionToDynamicallyAccessedMembers | -| System.String System.Diagnostics.Tracing.EventSource.GenerateManifest(System.Type,System.String,System.Diagnostics.Tracing.EventManifestOptions) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.String System.Diagnostics.Tracing.EventSource.GenerateManifest(System.Type,System.String,System.Diagnostics.Tracing.EventManifestOptions) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2114:ReflectionToDynamicallyAccessedMembers | -| System.String System.Diagnostics.Tracing.EventSource.GetName(System.Type) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Diagnostics.Tracing.EventSource.GetTrait(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Diagnostics.Tracing.EventSource.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Diagnostics.Tracing.EventSource.get_Name() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Double.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Double.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Double.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Double.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Enum.GetName`1(!0) | [NullableContextAttribute(...)] | 0 | 0 | -| System.String System.Enum.ToString(System.IFormatProvider) | [ObsoleteAttribute(...)] | 0 | The provider argument is not used. Use ToString() instead. | -| System.String System.Enum.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Enum.ToString(System.String,System.IFormatProvider) | [ObsoleteAttribute(...)] | 0 | The provider argument is not used. Use ToString(String) instead. | -| System.String System.Environment.get_ProcessPath() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Exception.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Exception.get_Message() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Exception.get_Source() | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.String System.Exception.get_Source() | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.String System.Globalization.CultureNotFoundException.get_Message() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Guid.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Guid.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Guid.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Half.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Half.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Half.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Half.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.IConvertible.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IO.Enumeration.FileSystemEntry.ToFullPath() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IO.Enumeration.FileSystemEntry.ToSpecifiedFullPath() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IO.Enumeration.FileSystemName.TranslateWin32Expression(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IO.FileInfo.get_DirectoryName() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.IO.FileLoadException.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IO.FileLoadException.get_Message() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IO.FileNotFoundException.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IO.FileNotFoundException.get_Message() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IO.FileSystemInfo.get_LinkTarget() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.IO.Path.ChangeExtension(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.IO.Path.Combine(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IO.Path.Combine(System.String,System.String,System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IO.Path.Combine(System.String,System.String,System.String,System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IO.Path.Combine(System.String[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IO.Path.GetDirectoryName(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.IO.Path.GetExtension(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.IO.Path.GetFileName(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.IO.Path.GetFileNameWithoutExtension(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.IO.Path.GetFullPath(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IO.Path.GetFullPath(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IO.Path.GetPathRoot(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.IO.Path.GetRandomFileName() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IO.Path.GetRelativePath(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IO.Path.GetTempFileName() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IO.Path.GetTempPath() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IO.Path.Join(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.IO.Path.Join(System.String,System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.IO.Path.Join(System.String,System.String,System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.IO.Path.Join(System.String[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IO.Path.TrimEndingDirectorySeparator(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IO.StreamReader.ReadLine() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.IO.StringReader.ReadLine() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.IO.TextReader.ReadLine() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Index.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Int16.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Int16.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Int16.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Int16.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Int32.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Int32.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Int32.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Int32.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Int64.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Int64.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Int64.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Int64.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Int128.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Int128.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Int128.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Int128.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.IntPtr.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IntPtr.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IntPtr.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.IntPtr.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Lazy`1.ToString() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.MissingMemberException.get_Message() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Nullable`1.ToString() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Numerics.Matrix3x2.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Numerics.Matrix4x4.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Numerics.Plane.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Numerics.Quaternion.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Numerics.Vector2.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Numerics.Vector2.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Numerics.Vector2.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Numerics.Vector3.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Numerics.Vector3.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Numerics.Vector3.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Numerics.Vector4.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Numerics.Vector4.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Numerics.Vector4.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Numerics.Vector`1.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Numerics.Vector`1.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Numerics.Vector`1.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Range.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Reflection.Assembly.CreateQualifiedName(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Reflection.Assembly.get_CodeBase() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Reflection.Assembly.get_FullName() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Reflection.AssemblyMetadataAttribute.get_Value() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Reflection.AssemblyName.EscapeCodeBase(System.String) | [RequiresAssemblyFilesAttribute(...)] | 0 | The code will return an empty string for assemblies embedded in a single-file app | -| System.String System.Reflection.AssemblyName.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Reflection.AssemblyName.get_CodeBase() | [RequiresAssemblyFilesAttribute(...)] | 0 | The code will return an empty string for assemblies embedded in a single-file app | -| System.String System.Reflection.AssemblyName.get_FullName() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Reflection.Emit.AssemblyBuilder.get_CodeBase() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Reflection.Emit.RuntimeModuleBuilder.ResolveString(System.Int32) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.String System.Reflection.ExceptionHandlingClause.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Reflection.Module.ResolveString(System.Int32) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.String System.Reflection.ParameterInfo.get_Name() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Reflection.RuntimeModule.GetFullyQualifiedName() | [RequiresAssemblyFilesAttribute(...)] | 0 | Returns <Unknown> for modules with no file path | -| System.String System.Reflection.RuntimeModule.ResolveString(System.Int32) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.String System.Reflection.TypeDelegator.get_AssemblyQualifiedName() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Reflection.TypeDelegator.get_FullName() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Reflection.TypeDelegator.get_Namespace() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Resources.ResourceManager.GetString(System.String,System.Globalization.CultureInfo) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Runtime.CompilerServices.AsyncMethodBuilderCore.GetAsyncStateMachineDescription(System.Runtime.CompilerServices.IAsyncStateMachine) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.String System.Runtime.CompilerServices.AsyncMethodBuilderCore.GetAsyncStateMachineDescription(System.Runtime.CompilerServices.IAsyncStateMachine) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2075:UnrecognizedReflectionPattern | -| System.String System.Runtime.CompilerServices.DefaultInterpolatedStringHandler.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Runtime.CompilerServices.DefaultInterpolatedStringHandler.ToStringAndClear() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Runtime.CompilerServices.SwitchExpressionException.get_Message() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Runtime.InteropServices.CLong.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Runtime.InteropServices.COMException.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Runtime.InteropServices.CULong.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Runtime.InteropServices.ExternalException.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Runtime.InteropServices.LibraryImportAttribute.get_LibraryName() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Runtime.InteropServices.Marshal.GetTypeInfoName(System.Runtime.InteropServices.ComTypes.ITypeInfo) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.String System.Runtime.InteropServices.Marshal.PtrToStringAnsi(System.IntPtr) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Runtime.InteropServices.Marshal.PtrToStringAuto(System.IntPtr) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Runtime.InteropServices.Marshal.PtrToStringAuto(System.IntPtr,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Runtime.InteropServices.Marshal.PtrToStringUTF8(System.IntPtr) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Runtime.InteropServices.Marshal.PtrToStringUni(System.IntPtr) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Runtime.InteropServices.NFloat.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Runtime.InteropServices.NFloat.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Runtime.InteropServices.NFloat.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Runtime.InteropServices.NFloat.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Runtime.Loader.AssemblyLoadContext.get_Name() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Runtime.Versioning.TargetFrameworkAttribute.get_FrameworkDisplayName() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Runtime.Versioning.UnsupportedOSPlatformAttribute.get_Message() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Runtime.Versioning.VersioningHelper.MakeVersionSafeName(System.String,System.Runtime.Versioning.ResourceScope,System.Runtime.Versioning.ResourceScope) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Runtime.Versioning.VersioningHelper.MakeVersionSafeName(System.String,System.Runtime.Versioning.ResourceScope,System.Runtime.Versioning.ResourceScope,System.Type) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.SByte.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.SByte.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.SByte.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.SByte.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Security.PermissionSet.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Security.SecurityElement.Attribute(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Security.SecurityElement.SearchForTextOfTag(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Security.SecurityElement.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Security.SecurityElement.get_Tag() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Security.SecurityException.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Single.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Single.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Single.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Single.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.String.Concat(System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.String.Concat(System.Object,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.String.Concat(System.ReadOnlySpan<System.Char>,System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.String System.String.Concat(System.ReadOnlySpan<System.Char>,System.ReadOnlySpan<System.Char>,System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.String System.String.Concat(System.ReadOnlySpan<System.Char>,System.ReadOnlySpan<System.Char>,System.ReadOnlySpan<System.Char>,System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.String System.String.Concat(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.String.Concat(System.String,System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.String.Concat(System.String,System.String,System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.String.Copy(System.String) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.String System.String.Copy(System.String) | [ObsoleteAttribute(...)] | 0 | This API should not be used to create mutable strings. See https://go.microsoft.com/fwlink/?linkid=2084035 for alternatives. | -| System.String System.String.Create(System.IFormatProvider,System.Span<System.Char>,System.Runtime.CompilerServices.DefaultInterpolatedStringHandler) | [NullableContextAttribute(...)] | 0 | 0 | -| System.String System.String.Format(System.IFormatProvider,System.String,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.String.Format(System.IFormatProvider,System.String,System.Object,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.String.Format(System.String,System.Object,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Text.ASCIIEncoding.GetString(System.Byte[],System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Text.Encoding.GetString(System.Byte*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.String System.Text.Encoding.GetString(System.Byte*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.String System.Text.Encoding.GetString(System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.String System.Text.Rune.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Text.UTF8Encoding.GetString(System.Byte[],System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Threading.Tasks.ValueTask`1.ToString() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Threading.Thread.get_Name() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Threading.ThreadLocal`1.ToString() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.TimeOnly.ToLongTimeString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.TimeOnly.ToShortTimeString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.TimeOnly.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.TimeOnly.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.TimeOnly.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.TimeOnly.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.TimeSpan.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.TimeSpan.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.TimeSpan.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Tuple`1.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Tuple`2.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Type.get_AssemblyQualifiedName() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Type.get_FullName() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.Type.get_Namespace() | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.UInt16.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.UInt16.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.UInt16.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.UInt16.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.UInt32.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.UInt32.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.UInt32.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.UInt32.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.UInt64.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.UInt64.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.UInt64.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.UInt64.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.UInt128.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.UInt128.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.UInt128.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.UInt128.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.UIntPtr.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.UIntPtr.ToString(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.UIntPtr.ToString(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.UIntPtr.ToString(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.String System.ValueTuple`1.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.ValueTuple`2.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.ValueTuple`3.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.ValueTuple`4.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Version.ToString() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String System.Version.ToString(System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.StringComparer | [NullableAttribute(...)] | 0 | 0 | -| System.StringComparer | [NullableContextAttribute(...)] | 0 | 1 | -| System.StringComparer | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.StringComparer System.Globalization.GlobalizationExtensions.GetStringComparer(System.Globalization.CompareInfo,System.Globalization.CompareOptions) | [NullableContextAttribute(...)] | 0 | 1 | -| System.StringNormalizationExtensions | [NullableAttribute(...)] | 0 | 0 | -| System.StringNormalizationExtensions | [NullableContextAttribute(...)] | 0 | 1 | -| System.String[] System.DateTime.GetDateTimeFormats() | [NullableContextAttribute(...)] | 0 | 1 | -| System.String[] System.DateTime.GetDateTimeFormats(System.Char) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String[] System.DateTime.GetDateTimeFormats(System.Char,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.String[] System.DateTime.GetDateTimeFormats(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.SystemException | [NullableAttribute(...)] | 0 | 0 | -| System.SystemException | [NullableContextAttribute(...)] | 0 | 2 | -| System.SystemException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Text.CompositeFormat | [DebuggerDisplayAttribute(...)] | 0 | {Format} | -| System.Text.CompositeFormat | [NullableAttribute(...)] | 0 | 0 | -| System.Text.CompositeFormat | [NullableAttribute(...)] | 0 | 1 | -| System.Text.CompositeFormat | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.CompositeFormat._segments | [TupleElementNamesAttribute(...)] | 0 | [Literal,ArgIndex,Alignment,Format] | -| System.Text.Decoder System.Text.ASCIIEncoding.GetDecoder() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.Decoder System.Text.UTF8Encoding.GetDecoder() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.DecoderFallback | [NullableAttribute(...)] | 0 | 0 | -| System.Text.DecoderFallback | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.DecoderFallback System.Text.Decoder.Fallback | [NullableAttribute(...)] | 0 | 2 | -| System.Text.DecoderFallback System.Text.Decoder.get_Fallback() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Text.DecoderFallbackBuffer System.Text.Decoder.FallbackBuffer | [NullableAttribute(...)] | 0 | 1 | -| System.Text.DecoderFallbackBuffer System.Text.Decoder.get_FallbackBuffer() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.DecoderFallbackBuffer System.Text.DecoderExceptionFallback.CreateFallbackBuffer() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.DecoderFallbackException | [NullableAttribute(...)] | 0 | 0 | -| System.Text.DecoderFallbackException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Text.DecoderFallbackException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Text.DecoderReplacementFallback | [NullableAttribute(...)] | 0 | 0 | -| System.Text.DecoderReplacementFallback | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.DecoderReplacementFallbackBuffer | [NullableAttribute(...)] | 0 | 0 | -| System.Text.DecoderReplacementFallbackBuffer | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.Encoder System.Text.ASCIIEncoding.GetEncoder() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.Encoder System.Text.UTF8Encoding.GetEncoder() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.EncoderFallback | [NullableAttribute(...)] | 0 | 0 | -| System.Text.EncoderFallback | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.EncoderFallback System.Text.Encoder.Fallback | [NullableAttribute(...)] | 0 | 2 | -| System.Text.EncoderFallback System.Text.Encoder.get_Fallback() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Text.EncoderFallbackBuffer System.Text.Encoder.FallbackBuffer | [NullableAttribute(...)] | 0 | 1 | -| System.Text.EncoderFallbackBuffer System.Text.Encoder.get_FallbackBuffer() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.EncoderFallbackBuffer System.Text.EncoderExceptionFallback.CreateFallbackBuffer() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.EncoderFallbackException | [NullableAttribute(...)] | 0 | 0 | -| System.Text.EncoderFallbackException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Text.EncoderFallbackException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Text.EncoderReplacementFallback | [NullableAttribute(...)] | 0 | 0 | -| System.Text.EncoderReplacementFallback | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.Encoding | [NullableAttribute(...)] | 0 | 0 | -| System.Text.Encoding | [NullableAttribute(...)] | 0 | 1 | -| System.Text.Encoding | [NullableAttribute(...)] | 0 | 2 | -| System.Text.Encoding | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.Encoding System.Console.InputEncoding | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.Text.Encoding System.Console.InputEncoding | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Text.Encoding System.Console.InputEncoding | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Text.Encoding System.Console.InputEncoding | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.Text.Encoding System.Text.Encoding.UTF7 | [ObsoleteAttribute(...)] | 0 | The UTF-7 encoding is insecure and should not be used. Consider using UTF-8 instead. | -| System.Text.Encoding System.Text.EncodingProvider.GetEncoding(System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Text.EncodingInfo | [NullableAttribute(...)] | 0 | 0 | -| System.Text.EncodingInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.EncodingProvider | [NullableAttribute(...)] | 0 | 0 | -| System.Text.EncodingProvider | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.EncodingProvider System.Text.EncodingInfo.Provider | [NullableAttribute(...)] | 0 | 2 | -| System.Text.NormalizationForm.FormKC | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Text.NormalizationForm.FormKD | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Text.Rune | [DebuggerDisplayAttribute(...)] | 0 | {DebuggerDisplay,nq} | -| System.Text.Rune System.Text.Rune.GetRuneAt(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.Rune System.Text.Rune.ToLower(System.Text.Rune,System.Globalization.CultureInfo) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.Rune System.Text.Rune.ToUpper(System.Text.Rune,System.Globalization.CultureInfo) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.Rune System.Text.Rune.op_Explicit(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Text.SpanLineEnumerator | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Text.SpanLineEnumerator | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Text.SpanLineEnumerator | [ObsoleteAttribute(...)] | 1 | True | -| System.Text.SpanRuneEnumerator | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Text.SpanRuneEnumerator | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Text.SpanRuneEnumerator | [ObsoleteAttribute(...)] | 1 | True | -| System.Text.StringBuilder | [DefaultMemberAttribute(...)] | 0 | Chars | -| System.Text.StringBuilder | [NotNullWhenAttribute(...)] | 0 | True | -| System.Text.StringBuilder | [NullableAttribute(...)] | 0 | 0 | -| System.Text.StringBuilder | [NullableAttribute(...)] | 0 | 2 | -| System.Text.StringBuilder | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.StringBuilder | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Text.StringBuilder System.Text.StringBuilder.Append(System.Char*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Text.StringBuilder System.Text.StringBuilder.Append(System.Char*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Text.StringBuilder System.Text.StringBuilder.Append(System.ReadOnlyMemory<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Text.StringBuilder System.Text.StringBuilder.Append(System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Text.StringBuilder System.Text.StringBuilder.Append(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Text.StringBuilder System.Text.StringBuilder.Append(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Text.StringBuilder System.Text.StringBuilder.Append(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Text.StringBuilder System.Text.StringBuilder.Append(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Text.StringBuilder System.Text.StringBuilder.AppendFormat(System.IFormatProvider,System.String,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Text.StringBuilder System.Text.StringBuilder.AppendFormat(System.IFormatProvider,System.String,System.Object,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Text.StringBuilder System.Text.StringBuilder.AppendFormat(System.String,System.Object,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Text.StringBuilder System.Text.StringBuilder.Insert(System.Int32,System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Text.StringBuilder System.Text.StringBuilder.Insert(System.Int32,System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Text.StringBuilder System.Text.StringBuilder.Insert(System.Int32,System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Text.StringBuilder System.Text.StringBuilder.Insert(System.Int32,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Text.StringBuilder System.Text.StringBuilder.Insert(System.Int32,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Text.StringBuilder.AppendInterpolatedStringHandler | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Text.StringBuilder.AppendInterpolatedStringHandler | [InterpolatedStringHandlerArgumentAttribute(...)] | 0 | | -| System.Text.StringBuilder.AppendInterpolatedStringHandler | [InterpolatedStringHandlerArgumentAttribute(...)] | 0 | [,provider] | -| System.Text.StringBuilder.AppendInterpolatedStringHandler | [NullableAttribute(...)] | 0 | 0 | -| System.Text.StringBuilder.ChunkEnumerator | [NullableContextAttribute(...)] | 0 | 0 | -| System.Text.StringBuilder.ChunkEnumerator System.Text.StringBuilder.ChunkEnumerator.GetEnumerator() | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Text.UTF7Encoding | [NullableAttribute(...)] | 0 | 0 | -| System.Text.UTF7Encoding | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.UTF32Encoding | [NullableAttribute(...)] | 0 | 0 | -| System.Text.UTF32Encoding | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.Unicode.TextSegmentationUtility.Processor`1 | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Text.Unicode.TextSegmentationUtility.Processor`1 | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Text.Unicode.TextSegmentationUtility.Processor`1 | [ObsoleteAttribute(...)] | 1 | True | -| System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler | [InterpolatedStringHandlerArgumentAttribute(...)] | 0 | [destination,provider] | -| System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler | [InterpolatedStringHandlerArgumentAttribute(...)] | 0 | destination | -| System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler | [ObsoleteAttribute(...)] | 1 | True | -| System.Text.UnicodeEncoding | [NullableAttribute(...)] | 0 | 0 | -| System.Text.UnicodeEncoding | [NullableContextAttribute(...)] | 0 | 1 | -| System.Text.ValueStringBuilder | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Text.ValueStringBuilder | [DefaultMemberAttribute(...)] | 0 | Item | -| System.Text.ValueStringBuilder | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Text.ValueStringBuilder | [ObsoleteAttribute(...)] | 1 | True | -| System.Text.ValueUtf8Converter | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.Text.ValueUtf8Converter | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.Text.ValueUtf8Converter | [ObsoleteAttribute(...)] | 1 | True | -| System.ThreadStaticAttribute | [AttributeUsageAttribute(...)] | 0 | 256 | -| System.Threading.AbandonedMutexException | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.AbandonedMutexException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.AbandonedMutexException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Threading.ApartmentState System.Threading.Thread.ApartmentState | [ObsoleteAttribute(...)] | 0 | The ApartmentState property has been deprecated. Use GetApartmentState, SetApartmentState or TrySetApartmentState instead. | -| System.Threading.AsyncLocalValueChangedArgs`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.AsyncLocalValueChangedArgs`1 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.AsyncLocal`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.AsyncLocal`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.CancellationToken | [DebuggerDisplayAttribute(...)] | 0 | IsCancellationRequested = {IsCancellationRequested} | -| System.Threading.CancellationToken | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.CancellationToken | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.CancellationTokenRegistration System.Threading.CancellationToken.Register(System.Action) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.CancellationTokenRegistration System.Threading.CancellationToken.Register(System.Action,System.Boolean) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.CancellationTokenSource | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.CancellationTokenSource | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.CompressedStack | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.CompressedStack | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.CompressedStack System.Threading.Thread.GetCompressedStack() | [ObsoleteAttribute(...)] | 0 | Code Access Security is not supported or honored by the runtime. | -| System.Threading.EventWaitHandle | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.EventWaitHandle | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.EventWaitHandle System.Threading.EventWaitHandle.OpenExisting(System.String) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Threading.ExecutionContext | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.ExecutionContext | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.ExecutionContext System.Threading.ExecutionContext.Capture() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.ExecutionContext System.Threading.Tasks.Task.CapturedContext | [NullableAttribute(...)] | 0 | 2 | -| System.Threading.ExecutionContext System.Threading.Thread.ExecutionContext | [NullableAttribute(...)] | 0 | 2 | -| System.Threading.ExecutionContext System.Threading.Thread.get_ExecutionContext() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.IOCompletionCallback | [CLSCompliantAttribute(...)] | 0 | False | -| System.Threading.IOCompletionCallback | [NullableAttribute(...)] | 0 | 1 | -| System.Threading.IOCompletionCallback | [NullableAttribute(...)] | 0 | 2 | -| System.Threading.Interlocked | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Interlocked | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.LazyInitializer | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.LazyInitializer | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.LockRecursionException | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.LockRecursionException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.LockRecursionException | [TypeForwardedFromAttribute(...)] | 0 | System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Threading.ManualResetEventSlim | [DebuggerDisplayAttribute(...)] | 0 | Set = {IsSet} | -| System.Threading.Monitor | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Monitor | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.Mutex | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Mutex | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.NativeOverlapped* System.Threading.Overlapped.Pack(System.Threading.IOCompletionCallback) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Threading.NativeOverlapped* System.Threading.Overlapped.Pack(System.Threading.IOCompletionCallback) | [ObsoleteAttribute(...)] | 0 | This overload is not safe and has been deprecated. Use Pack(IOCompletionCallback?, object?) instead. | -| System.Threading.NativeOverlapped* System.Threading.Overlapped.Pack(System.Threading.IOCompletionCallback,System.Object) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Threading.NativeOverlapped* System.Threading.Overlapped.Pack(System.Threading.IOCompletionCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.NativeOverlapped* System.Threading.Overlapped.UnsafePack(System.Threading.IOCompletionCallback) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Threading.NativeOverlapped* System.Threading.Overlapped.UnsafePack(System.Threading.IOCompletionCallback) | [ObsoleteAttribute(...)] | 0 | This overload is not safe and has been deprecated. Use UnsafePack(IOCompletionCallback?, object?) instead. | -| System.Threading.NativeOverlapped* System.Threading.Overlapped.UnsafePack(System.Threading.IOCompletionCallback,System.Object) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Threading.NativeOverlapped* System.Threading.Overlapped.UnsafePack(System.Threading.IOCompletionCallback,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.NativeOverlapped* System.Threading.ThreadPoolBoundHandle.AllocateNativeOverlapped(System.Threading.IOCompletionCallback,System.Object,System.Object) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Threading.NativeOverlapped* System.Threading.ThreadPoolBoundHandle.AllocateNativeOverlapped(System.Threading.IOCompletionCallback,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.NativeOverlapped* System.Threading.ThreadPoolBoundHandle.AllocateNativeOverlapped(System.Threading.PreAllocatedOverlapped) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Threading.NativeOverlapped* System.Threading.ThreadPoolBoundHandle.UnsafeAllocateNativeOverlapped(System.Threading.IOCompletionCallback,System.Object,System.Object) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Threading.NativeOverlapped* System.Threading.ThreadPoolBoundHandle.UnsafeAllocateNativeOverlapped(System.Threading.IOCompletionCallback,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.Overlapped System.Threading.Overlapped.Unpack(System.Threading.NativeOverlapped*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Threading.PreAllocatedOverlapped | [NullableAttribute(...)] | 0 | 1 | -| System.Threading.PreAllocatedOverlapped System.Threading.PreAllocatedOverlapped.UnsafeCreate(System.Threading.IOCompletionCallback,System.Object,System.Object) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Threading.PreAllocatedOverlapped System.Threading.PreAllocatedOverlapped.UnsafeCreate(System.Threading.IOCompletionCallback,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.RegisteredWaitHandle | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.RegisteredWaitHandle | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.RegisteredWaitHandle | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Threading.RegisteredWaitHandle System.Threading.ThreadPool.RegisterWaitForSingleObject(System.Threading.WaitHandle,System.Threading.WaitOrTimerCallback,System.Object,System.Int32,System.Boolean) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Threading.RegisteredWaitHandle System.Threading.ThreadPool.RegisterWaitForSingleObject(System.Threading.WaitHandle,System.Threading.WaitOrTimerCallback,System.Object,System.Int64,System.Boolean) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Threading.RegisteredWaitHandle System.Threading.ThreadPool.RegisterWaitForSingleObject(System.Threading.WaitHandle,System.Threading.WaitOrTimerCallback,System.Object,System.TimeSpan,System.Boolean) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Threading.RegisteredWaitHandle System.Threading.ThreadPool.RegisterWaitForSingleObject(System.Threading.WaitHandle,System.Threading.WaitOrTimerCallback,System.Object,System.UInt32,System.Boolean) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Threading.RegisteredWaitHandle System.Threading.ThreadPool.RegisterWaitForSingleObject(System.Threading.WaitHandle,System.Threading.WaitOrTimerCallback,System.Object,System.UInt32,System.Boolean) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Threading.RegisteredWaitHandle System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle,System.Threading.WaitOrTimerCallback,System.Object,System.Int32,System.Boolean) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Threading.RegisteredWaitHandle System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle,System.Threading.WaitOrTimerCallback,System.Object,System.Int64,System.Boolean) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Threading.RegisteredWaitHandle System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle,System.Threading.WaitOrTimerCallback,System.Object,System.TimeSpan,System.Boolean) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Threading.RegisteredWaitHandle System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle,System.Threading.WaitOrTimerCallback,System.Object,System.UInt32,System.Boolean) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Threading.RegisteredWaitHandle System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle,System.Threading.WaitOrTimerCallback,System.Object,System.UInt32,System.Boolean) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Threading.Semaphore | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Semaphore | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.Semaphore System.Threading.Semaphore.OpenExisting(System.String) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Threading.SemaphoreFullException | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.SemaphoreFullException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.SemaphoreFullException | [TypeForwardedFromAttribute(...)] | 0 | System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Threading.SemaphoreSlim | [DebuggerDisplayAttribute(...)] | 0 | Current Count = {m_currentCount} | -| System.Threading.SemaphoreSlim | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.SemaphoreSlim | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.SemaphoreSlim System.IO.Stream.EnsureAsyncActiveSemaphoreInitialized() | [MemberNotNullAttribute(...)] | 0 | _asyncActiveSemaphore | -| System.Threading.SpinLock | [DebuggerDisplayAttribute(...)] | 0 | IsHeld = {IsHeld} | -| System.Threading.SpinLock | [DebuggerTypeProxyAttribute(...)] | 0 | System.Threading.SpinLock.SystemThreading_SpinLockDebugView | -| System.Threading.SpinWait | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.SpinWait | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.SynchronizationContext | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.SynchronizationContext | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.SynchronizationContext System.Threading.SynchronizationContext.Current | [NullableAttribute(...)] | 0 | 2 | -| System.Threading.SynchronizationContext System.Threading.SynchronizationContext.get_Current() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.SynchronizationLockException | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.SynchronizationLockException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.SynchronizationLockException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Threading.Tasks.ConcurrentExclusiveSchedulerPair | [DebuggerDisplayAttribute(...)] | 0 | Concurrent = {ConcurrentTaskCountForDebugger}, Exclusive = {ExclusiveTaskCountForDebugger}, Mode = {ModeForDebugger} | -| System.Threading.Tasks.ConcurrentExclusiveSchedulerPair | [DebuggerTypeProxyAttribute(...)] | 0 | System.Threading.Tasks.ConcurrentExclusiveSchedulerPair.DebugView | -| System.Threading.Tasks.ConcurrentExclusiveSchedulerPair | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.ConcurrentExclusiveSchedulerPair | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.Tasks.ConcurrentExclusiveSchedulerPair.ConcurrentExclusiveTaskScheduler | [DebuggerDisplayAttribute(...)] | 0 | Count = {CountForDebugger}, MaxConcurrencyLevel = {m_maxConcurrencyLevel}, Id = {Id} | -| System.Threading.Tasks.ConcurrentExclusiveSchedulerPair.ConcurrentExclusiveTaskScheduler | [DebuggerTypeProxyAttribute(...)] | 0 | System.Threading.Tasks.ConcurrentExclusiveSchedulerPair.ConcurrentExclusiveTaskScheduler.DebugView | -| System.Threading.Tasks.Sources.IValueTaskSource | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.Tasks.Sources.IValueTaskSource`1 | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.Tasks.Task | [DebuggerDisplayAttribute(...)] | 0 | Id = {Id}, Status = {Status}, Method = {DebuggerDisplayMethodDescription} | -| System.Threading.Tasks.Task | [DebuggerTypeProxyAttribute(...)] | 0 | System.Threading.Tasks.SystemThreadingTasks_TaskDebugView | -| System.Threading.Tasks.Task | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.Task | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.Tasks.Task System.CodeDom.Compiler.IndentedTextWriter.OutputTabsAsync() | [AsyncStateMachineAttribute(...)] | 0 | System.CodeDom.Compiler.IndentedTextWriter.<OutputTabsAsync>d__23 | -| System.Threading.Tasks.Task System.CodeDom.Compiler.IndentedTextWriter.WriteAsync(System.Char) | [AsyncStateMachineAttribute(...)] | 0 | System.CodeDom.Compiler.IndentedTextWriter.<WriteAsync>d__37 | -| System.Threading.Tasks.Task System.CodeDom.Compiler.IndentedTextWriter.WriteAsync(System.Char[],System.Int32,System.Int32) | [AsyncStateMachineAttribute(...)] | 0 | System.CodeDom.Compiler.IndentedTextWriter.<WriteAsync>d__38 | -| System.Threading.Tasks.Task System.CodeDom.Compiler.IndentedTextWriter.WriteAsync(System.ReadOnlyMemory<System.Char>,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.CodeDom.Compiler.IndentedTextWriter.<WriteAsync>d__40 | -| System.Threading.Tasks.Task System.CodeDom.Compiler.IndentedTextWriter.WriteAsync(System.ReadOnlyMemory<System.Char>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.Task System.CodeDom.Compiler.IndentedTextWriter.WriteAsync(System.String) | [AsyncStateMachineAttribute(...)] | 0 | System.CodeDom.Compiler.IndentedTextWriter.<WriteAsync>d__39 | -| System.Threading.Tasks.Task System.CodeDom.Compiler.IndentedTextWriter.WriteAsync(System.Text.StringBuilder,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.CodeDom.Compiler.IndentedTextWriter.<WriteAsync>d__41 | -| System.Threading.Tasks.Task System.CodeDom.Compiler.IndentedTextWriter.WriteLineAsync() | [AsyncStateMachineAttribute(...)] | 0 | System.CodeDom.Compiler.IndentedTextWriter.<WriteLineAsync>d__59 | -| System.Threading.Tasks.Task System.CodeDom.Compiler.IndentedTextWriter.WriteLineAsync(System.Char) | [AsyncStateMachineAttribute(...)] | 0 | System.CodeDom.Compiler.IndentedTextWriter.<WriteLineAsync>d__60 | -| System.Threading.Tasks.Task System.CodeDom.Compiler.IndentedTextWriter.WriteLineAsync(System.Char[],System.Int32,System.Int32) | [AsyncStateMachineAttribute(...)] | 0 | System.CodeDom.Compiler.IndentedTextWriter.<WriteLineAsync>d__61 | -| System.Threading.Tasks.Task System.CodeDom.Compiler.IndentedTextWriter.WriteLineAsync(System.ReadOnlyMemory<System.Char>,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.CodeDom.Compiler.IndentedTextWriter.<WriteLineAsync>d__63 | -| System.Threading.Tasks.Task System.CodeDom.Compiler.IndentedTextWriter.WriteLineAsync(System.ReadOnlyMemory<System.Char>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.Task System.CodeDom.Compiler.IndentedTextWriter.WriteLineAsync(System.String) | [AsyncStateMachineAttribute(...)] | 0 | System.CodeDom.Compiler.IndentedTextWriter.<WriteLineAsync>d__62 | -| System.Threading.Tasks.Task System.CodeDom.Compiler.IndentedTextWriter.WriteLineAsync(System.Text.StringBuilder,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.CodeDom.Compiler.IndentedTextWriter.<WriteLineAsync>d__64 | -| System.Threading.Tasks.Task System.IO.BufferedStream.CopyToAsyncCore(System.IO.Stream,System.Int32,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.BufferedStream.<CopyToAsyncCore>d__68 | -| System.Threading.Tasks.Task System.IO.BufferedStream.FlushAsyncInternal(System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.BufferedStream.<FlushAsyncInternal>d__36 | -| System.Threading.Tasks.Task System.IO.File.<WriteAllBytesAsync>g__Core\|92_0(System.String,System.Byte[],System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.File.<<WriteAllBytesAsync>g__Core\|92_0>d | -| System.Threading.Tasks.Task System.IO.File.InternalWriteAllLinesAsync(System.IO.StreamWriter,System.Collections.Generic.IEnumerable<System.String>,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.File.<InternalWriteAllLinesAsync>d__98 | -| System.Threading.Tasks.Task System.IO.File.WriteToFileAsync(System.String,System.IO.FileMode,System.String,System.Text.Encoding,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.File.<WriteToFileAsync>d__108 | -| System.Threading.Tasks.Task System.IO.Strategies.BufferedFileStreamStrategy.CopyToAsyncCore(System.IO.Stream,System.Int32,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.Strategies.BufferedFileStreamStrategy.<CopyToAsyncCore>d__57 | -| System.Threading.Tasks.Task System.IO.Strategies.BufferedFileStreamStrategy.FlushAsyncInternal(System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.Strategies.BufferedFileStreamStrategy.<FlushAsyncInternal>d__55 | -| System.Threading.Tasks.Task System.IO.Stream.<CopyToAsync>g__Core\|27_0(System.IO.Stream,System.IO.Stream,System.Int32,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.Stream.<<CopyToAsync>g__Core\|27_0>d | -| System.Threading.Tasks.Task System.IO.Stream.FinishWriteAsync(System.Threading.Tasks.Task,System.Byte[]) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.Stream.<FinishWriteAsync>d__61 | -| System.Threading.Tasks.Task System.IO.StreamWriter.<FlushAsyncInternal>g__Core\|76_0(System.Boolean,System.Boolean,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.StreamWriter.<<FlushAsyncInternal>g__Core\|76_0>d | -| System.Threading.Tasks.Task System.IO.StreamWriter.WriteAsync(System.ReadOnlyMemory<System.Char>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.Task System.IO.StreamWriter.WriteAsyncInternal(System.Char,System.Boolean) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.StreamWriter.<WriteAsyncInternal>d__64 | -| System.Threading.Tasks.Task System.IO.StreamWriter.WriteAsyncInternal(System.ReadOnlyMemory<System.Char>,System.Boolean,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.StreamWriter.<WriteAsyncInternal>d__68 | -| System.Threading.Tasks.Task System.IO.StreamWriter.WriteLineAsync(System.ReadOnlyMemory<System.Char>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.Task System.IO.StringWriter.WriteAsync(System.ReadOnlyMemory<System.Char>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.Task System.IO.StringWriter.WriteLineAsync(System.ReadOnlyMemory<System.Char>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.Task System.IO.TextWriter.<WriteAsync>g__WriteAsyncCore\|60_0(System.Text.StringBuilder,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.TextWriter.<<WriteAsync>g__WriteAsyncCore\|60_0>d | -| System.Threading.Tasks.Task System.IO.TextWriter.<WriteLineAsync>g__WriteLineAsyncCore\|66_0(System.Text.StringBuilder,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.TextWriter.<<WriteLineAsync>g__WriteLineAsyncCore\|66_0>d | -| System.Threading.Tasks.Task System.IO.TextWriter.WriteAsync(System.ReadOnlyMemory<System.Char>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.Task System.IO.TextWriter.WriteLineAsync(System.ReadOnlyMemory<System.Char>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.Task System.IO.UnmanagedMemoryStream.FlushAsync(System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.Tasks.Task System.IO.UnmanagedMemoryStream.WriteAsync(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.Tasks.Task System.Threading.Tasks.Task.InternalCurrent | [NullableAttribute(...)] | 0 | 2 | -| System.Threading.Tasks.Task System.Threading.Tasks.Task.ParentForDebugger | [NullableAttribute(...)] | 0 | 2 | -| System.Threading.Tasks.Task<!0> System.Threading.Tasks.Task.ContinueWith`1(System.Func<!0,System.Object,System.Threading.Tasks.Task>,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.Tasks.Task<!0> System.Threading.Tasks.Task.ContinueWith`1(System.Func<!0,System.Object,System.Threading.Tasks.Task>,System.Object,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.Tasks.Task<!0> System.Threading.Tasks.Task.ContinueWith`1(System.Func<!0,System.Object,System.Threading.Tasks.Task>,System.Object,System.Threading.Tasks.TaskContinuationOptions) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.Tasks.Task<!0> System.Threading.Tasks.TaskFactory.StartNew`1(System.Func<!0,System.Object>,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.Tasks.Task<!0> System.Threading.Tasks.TaskFactory.StartNew`1(System.Func<!0,System.Object>,System.Object,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.Tasks.Task<!0> System.Threading.Tasks.TaskFactory.StartNew`1(System.Func<!0,System.Object>,System.Object,System.Threading.Tasks.TaskCreationOptions) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.Tasks.Task<!0> System.Threading.Tasks.Task`1.ContinueWith`1(System.Func<!0,System.Object,System.Threading.Tasks.Task<!0>>,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.Tasks.Task<!0> System.Threading.Tasks.Task`1.ContinueWith`1(System.Func<!0,System.Object,System.Threading.Tasks.Task<!0>>,System.Object,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.Tasks.Task<!0> System.Threading.Tasks.Task`1.ContinueWith`1(System.Func<!0,System.Object,System.Threading.Tasks.Task<!0>>,System.Object,System.Threading.Tasks.TaskContinuationOptions) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.Tasks.Task<System.Boolean> System.Threading.SemaphoreSlim.WaitUntilCountOrTimeoutAsync(System.Threading.SemaphoreSlim.TaskNode,System.Int32,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.Threading.SemaphoreSlim.<WaitUntilCountOrTimeoutAsync>d__31 | -| System.Threading.Tasks.Task<System.Byte[]> System.IO.File.InternalReadAllBytesAsync(Microsoft.Win32.SafeHandles.SafeFileHandle,System.Int32,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.File.<InternalReadAllBytesAsync>d__90 | -| System.Threading.Tasks.Task<System.Byte[]> System.IO.File.InternalReadAllBytesUnknownLengthAsync(Microsoft.Win32.SafeHandles.SafeFileHandle,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.File.<InternalReadAllBytesUnknownLengthAsync>d__91 | -| System.Threading.Tasks.Task<System.Int32> System.IO.UnmanagedMemoryStream.ReadAsync(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.Tasks.Task<System.String> System.IO.File.InternalReadAllTextAsync(System.String,System.Text.Encoding,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.File.<InternalReadAllTextAsync>d__86 | -| System.Threading.Tasks.Task<System.String> System.IO.StreamReader.ReadLineAsyncInternal(System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.StreamReader.<ReadLineAsyncInternal>d__63 | -| System.Threading.Tasks.Task<System.String> System.IO.StreamReader.ReadToEndAsyncInternal(System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.StreamReader.<ReadToEndAsyncInternal>d__66 | -| System.Threading.Tasks.Task<System.String> System.IO.TextReader.ReadToEndAsync(System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.TextReader.<ReadToEndAsync>d__17 | -| System.Threading.Tasks.Task<System.String[]> System.IO.File.InternalReadAllLinesAsync(System.String,System.Text.Encoding,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.File.<InternalReadAllLinesAsync>d__95 | -| System.Threading.Tasks.TaskAsyncEnumerableExtensions | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.TaskAsyncEnumerableExtensions | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.Tasks.TaskCanceledException | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.TaskCanceledException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.Tasks.TaskCanceledException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Threading.Tasks.TaskCompletionSource | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.TaskCompletionSource | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.Tasks.TaskCompletionSource`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.TaskCompletionSource`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.Tasks.TaskExtensions | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.TaskExtensions | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.Tasks.TaskFactory | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.TaskFactory | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.Tasks.TaskFactory`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.TaskFactory`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.Tasks.TaskScheduler | [DebuggerDisplayAttribute(...)] | 0 | Id = {Id} | -| System.Threading.Tasks.TaskScheduler | [DebuggerTypeProxyAttribute(...)] | 0 | System.Threading.Tasks.TaskScheduler.SystemThreadingTasks_TaskSchedulerDebugView | -| System.Threading.Tasks.TaskScheduler | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.TaskScheduler | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.Tasks.TaskScheduler System.Threading.Tasks.Task.ExecutingTaskScheduler | [NullableAttribute(...)] | 0 | 2 | -| System.Threading.Tasks.TaskScheduler System.Threading.Tasks.TaskFactory.Scheduler | [NullableAttribute(...)] | 0 | 2 | -| System.Threading.Tasks.TaskScheduler System.Threading.Tasks.TaskFactory.get_Scheduler() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.Tasks.TaskScheduler System.Threading.Tasks.TaskFactory`1.Scheduler | [NullableAttribute(...)] | 0 | 2 | -| System.Threading.Tasks.TaskScheduler System.Threading.Tasks.TaskFactory`1.get_Scheduler() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.Tasks.TaskScheduler System.Threading.Tasks.TaskScheduler.InternalCurrent | [NullableAttribute(...)] | 0 | 2 | -| System.Threading.Tasks.TaskScheduler.UnobservedTaskException | [NullableAttribute(...)] | 0 | [2,1] | -| System.Threading.Tasks.TaskSchedulerException | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.TaskSchedulerException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.Tasks.TaskSchedulerException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Threading.Tasks.TaskToAsyncResult | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.TaskToAsyncResult | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.Tasks.Task`1 | [DebuggerDisplayAttribute(...)] | 0 | Id = {Id}, Status = {Status}, Method = {DebuggerDisplayMethodDescription}, Result = {DebuggerDisplayResultDescription} | -| System.Threading.Tasks.Task`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.Threading.Tasks.SystemThreadingTasks_FutureDebugView`1 | -| System.Threading.Tasks.Task`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.Task`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.Tasks.TplEventSource | [GeneratedCodeAttribute(...)] | 0 | System.Private.CoreLib.Generators | -| System.Threading.Tasks.TplEventSource | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Threading.Tasks.UnobservedTaskExceptionEventArgs | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.UnobservedTaskExceptionEventArgs | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.Tasks.ValueTask | [AsyncMethodBuilderAttribute(...)] | 0 | System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder | -| System.Threading.Tasks.ValueTask | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.ValueTask | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.Tasks.ValueTask System.IO.BufferedStream.DisposeAsync() | [AsyncStateMachineAttribute(...)] | 0 | System.IO.BufferedStream.<DisposeAsync>d__33 | -| System.Threading.Tasks.ValueTask System.IO.BufferedStream.FlushWriteAsync(System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.BufferedStream.<FlushWriteAsync>d__40 | -| System.Threading.Tasks.ValueTask System.IO.BufferedStream.WriteAsync(System.ReadOnlyMemory<System.Byte>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.ValueTask System.IO.BufferedStream.WriteToUnderlyingStreamAsync(System.ReadOnlyMemory<System.Byte>,System.Threading.CancellationToken,System.Threading.Tasks.Task) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.BufferedStream.<WriteToUnderlyingStreamAsync>d__59 | -| System.Threading.Tasks.ValueTask System.IO.FileStream.DisposeAsync() | [AsyncStateMachineAttribute(...)] | 0 | System.IO.FileStream.<DisposeAsync>d__57 | -| System.Threading.Tasks.ValueTask System.IO.FileStream.WriteAsync(System.ReadOnlyMemory<System.Byte>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.ValueTask System.IO.MemoryStream.WriteAsync(System.ReadOnlyMemory<System.Byte>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.ValueTask System.IO.RandomAccess.WriteAsync(Microsoft.Win32.SafeHandles.SafeFileHandle,System.Collections.Generic.IReadOnlyList<System.ReadOnlyMemory<System.Byte>>,System.Int64,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.Tasks.ValueTask System.IO.Strategies.BufferedFileStreamStrategy.DisposeAsync() | [AsyncStateMachineAttribute(...)] | 0 | System.IO.Strategies.BufferedFileStreamStrategy.<DisposeAsync>d__27 | -| System.Threading.Tasks.ValueTask System.IO.Strategies.BufferedFileStreamStrategy.WriteAsyncSlowPath(System.Threading.Tasks.Task,System.ReadOnlyMemory<System.Byte>,System.Threading.CancellationToken) | [AsyncMethodBuilderAttribute(...)] | 0 | System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder | -| System.Threading.Tasks.ValueTask System.IO.Strategies.BufferedFileStreamStrategy.WriteAsyncSlowPath(System.Threading.Tasks.Task,System.ReadOnlyMemory<System.Byte>,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.Strategies.BufferedFileStreamStrategy.<WriteAsyncSlowPath>d__48 | -| System.Threading.Tasks.ValueTask System.IO.Strategies.BufferedFileStreamStrategy.WriteToNonSeekableAsync(System.ReadOnlyMemory<System.Byte>,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.Strategies.BufferedFileStreamStrategy.<WriteToNonSeekableAsync>d__47 | -| System.Threading.Tasks.ValueTask System.IO.Stream.ReadExactlyAsync(System.Memory<System.Byte>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.ValueTask System.IO.Stream.WriteAsync(System.ReadOnlyMemory<System.Byte>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.ValueTask System.IO.StreamWriter.DisposeAsyncCore() | [AsyncStateMachineAttribute(...)] | 0 | System.IO.StreamWriter.<DisposeAsyncCore>d__36 | -| System.Threading.Tasks.ValueTask System.Text.TranscodingStream.<DisposeAsync>g__DisposeAsyncCore\|30_0(System.ArraySegment<System.Byte>) | [AsyncStateMachineAttribute(...)] | 0 | System.Text.TranscodingStream.<<DisposeAsync>g__DisposeAsyncCore\|30_0>d | -| System.Threading.Tasks.ValueTask System.Text.TranscodingStream.<WriteAsync>g__WriteAsyncCore\|50_0(System.ReadOnlyMemory<System.Byte>,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.Text.TranscodingStream.<<WriteAsync>g__WriteAsyncCore\|50_0>d | -| System.Threading.Tasks.ValueTask System.Threading.CancellationTokenSource.Registrations.WaitForCallbackToCompleteAsync(System.Int64) | [AsyncStateMachineAttribute(...)] | 0 | System.Threading.CancellationTokenSource.Registrations.<WaitForCallbackToCompleteAsync>d__12 | -| System.Threading.Tasks.ValueTask<!0> | [NullableAttribute(...)] | 0 | [0,1] | -| System.Threading.Tasks.ValueTask<!0> System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1.Task | [NullableAttribute(...)] | 0 | [0,1] | -| System.Threading.Tasks.ValueTask<!0> System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.Task | [NullableAttribute(...)] | 0 | [0,1] | -| System.Threading.Tasks.ValueTask<!0> System.Threading.Tasks.ValueTask.FromCanceled`1(System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.Tasks.ValueTask<System.Int32> System.IO.BufferedStream.ReadAsync(System.Memory<System.Byte>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.ValueTask<System.Int32> System.IO.BufferedStream.ReadFromUnderlyingStreamAsync(System.Memory<System.Byte>,System.Threading.CancellationToken,System.Int32,System.Threading.Tasks.Task) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.BufferedStream.<ReadFromUnderlyingStreamAsync>d__48 | -| System.Threading.Tasks.ValueTask<System.Int32> System.IO.FileStream.ReadAsync(System.Memory<System.Byte>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.ValueTask<System.Int32> System.IO.MemoryStream.ReadAsync(System.Memory<System.Byte>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.ValueTask<System.Int32> System.IO.Strategies.BufferedFileStreamStrategy.ReadAsyncSlowPath(System.Threading.Tasks.Task,System.Memory<System.Byte>,System.Threading.CancellationToken) | [AsyncMethodBuilderAttribute(...)] | 0 | System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1 | -| System.Threading.Tasks.ValueTask<System.Int32> System.IO.Strategies.BufferedFileStreamStrategy.ReadAsyncSlowPath(System.Threading.Tasks.Task,System.Memory<System.Byte>,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.Strategies.BufferedFileStreamStrategy.<ReadAsyncSlowPath>d__37 | -| System.Threading.Tasks.ValueTask<System.Int32> System.IO.Strategies.BufferedFileStreamStrategy.ReadFromNonSeekableAsync(System.Memory<System.Byte>,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.Strategies.BufferedFileStreamStrategy.<ReadFromNonSeekableAsync>d__36 | -| System.Threading.Tasks.ValueTask<System.Int32> System.IO.Stream.<ReadAsync>g__FinishReadAsync\|42_0(System.Threading.Tasks.Task<System.Int32>,System.Byte[],System.Memory<System.Byte>) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.Stream.<<ReadAsync>g__FinishReadAsync\|42_0>d | -| System.Threading.Tasks.ValueTask<System.Int32> System.IO.Stream.ReadAsync(System.Memory<System.Byte>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.ValueTask<System.Int32> System.IO.Stream.ReadAtLeastAsync(System.Memory<System.Byte>,System.Int32,System.Boolean,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.ValueTask<System.Int32> System.IO.Stream.ReadAtLeastAsyncCore(System.Memory<System.Byte>,System.Int32,System.Boolean,System.Threading.CancellationToken) | [AsyncMethodBuilderAttribute(...)] | 0 | System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1 | -| System.Threading.Tasks.ValueTask<System.Int32> System.IO.Stream.ReadAtLeastAsyncCore(System.Memory<System.Byte>,System.Int32,System.Boolean,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.Stream.<ReadAtLeastAsyncCore>d__46 | -| System.Threading.Tasks.ValueTask<System.Int32> System.IO.StreamReader.ReadAsync(System.Memory<System.Char>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.ValueTask<System.Int32> System.IO.StreamReader.ReadAsyncInternal(System.Memory<System.Char>,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.StreamReader.<ReadAsyncInternal>d__69 | -| System.Threading.Tasks.ValueTask<System.Int32> System.IO.StreamReader.ReadBlockAsync(System.Memory<System.Char>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.ValueTask<System.Int32> System.IO.StreamReader.ReadBufferAsync(System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.StreamReader.<ReadBufferAsync>d__72 | -| System.Threading.Tasks.ValueTask<System.Int32> System.IO.StringReader.ReadAsync(System.Memory<System.Char>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.ValueTask<System.Int32> System.IO.StringReader.ReadBlockAsync(System.Memory<System.Char>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.ValueTask<System.Int32> System.IO.TextReader.ReadAsync(System.Memory<System.Char>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.ValueTask<System.Int32> System.IO.TextReader.ReadBlockAsync(System.Memory<System.Char>,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.ValueTask<System.Int32> System.IO.TextReader.ReadBlockAsyncInternal(System.Memory<System.Char>,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.IO.TextReader.<ReadBlockAsyncInternal>d__23 | -| System.Threading.Tasks.ValueTask<System.Int32> System.Text.TranscodingStream.<ReadAsync>g__ReadAsyncCore\|41_0(System.Memory<System.Byte>,System.Threading.CancellationToken) | [AsyncStateMachineAttribute(...)] | 0 | System.Text.TranscodingStream.<<ReadAsync>g__ReadAsyncCore\|41_0>d | -| System.Threading.Tasks.ValueTask`1 | [AsyncMethodBuilderAttribute(...)] | 0 | System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1 | -| System.Threading.Tasks.ValueTask`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Tasks.ValueTask`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.Thread | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Thread | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.ThreadAbortException | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.ThreadAbortException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.ThreadAbortException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Threading.ThreadExceptionEventArgs | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.ThreadExceptionEventArgs | [NullableAttribute(...)] | 0 | 1 | -| System.Threading.ThreadExceptionEventArgs | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.ThreadInterruptedException | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.ThreadInterruptedException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.ThreadInterruptedException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Threading.ThreadLocal<System.Object> System.LocalDataStoreSlot.Data | [NullableAttribute(...)] | 0 | [1,2] | -| System.Threading.ThreadLocal`1 | [DebuggerDisplayAttribute(...)] | 0 | IsValueCreated = {IsValueCreated}, Value = {ValueForDebugDisplay}, Count = {ValuesCountForDebugDisplay} | -| System.Threading.ThreadLocal`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.Threading.SystemThreading_ThreadLocalDebugView`1 | -| System.Threading.ThreadLocal`1 | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.ThreadLocal`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.ThreadPool | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.ThreadPool | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.ThreadPoolBoundHandle System.Threading.ThreadPoolBoundHandle.BindHandle(System.Runtime.InteropServices.SafeHandle) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.ThreadStartException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Threading.ThreadStateException | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.ThreadStateException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.ThreadStateException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Threading.Timer | [DebuggerDisplayAttribute(...)] | 0 | {DisplayString,nq} | -| System.Threading.Timer | [DebuggerTypeProxyAttribute(...)] | 0 | System.Threading.TimerQueueTimer.TimerDebuggerTypeProxy | -| System.Threading.Timer | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Timer | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.TimerQueue | [DebuggerDisplayAttribute(...)] | 0 | Count = {CountForDebugger} | -| System.Threading.TimerQueue | [DebuggerTypeProxyAttribute(...)] | 0 | System.Threading.TimerQueue.TimerQueueDebuggerTypeProxy | -| System.Threading.TimerQueue.s_tickCountToTimeMap | [TupleElementNamesAttribute(...)] | 0 | [TickCount,Time] | -| System.Threading.TimerQueueTimer | [DebuggerDisplayAttribute(...)] | 0 | {DisplayString,nq} | -| System.Threading.TimerQueueTimer | [DebuggerTypeProxyAttribute(...)] | 0 | System.Threading.TimerQueueTimer.TimerDebuggerTypeProxy | -| System.Threading.TimerQueueTimer[] System.Threading.TimerQueue.TimerQueueDebuggerTypeProxy.Items | [DebuggerBrowsableAttribute(...)] | 0 | 3 | -| System.Threading.Volatile | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.Volatile | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.WaitHandle | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.WaitHandle | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.WaitHandle System.IO.Stream.CreateWaitHandle() | [ObsoleteAttribute(...)] | 0 | CreateWaitHandle has been deprecated. Use the ManualResetEvent(false) constructor instead. | -| System.Threading.WaitHandle System.Threading.CancellationToken.WaitHandle | [NullableAttribute(...)] | 0 | 1 | -| System.Threading.WaitHandle System.Threading.CancellationToken.get_WaitHandle() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.WaitHandle System.Threading.ManualResetEventSlim.WaitHandle | [NullableAttribute(...)] | 0 | 1 | -| System.Threading.WaitHandle System.Threading.ManualResetEventSlim.get_WaitHandle() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Threading.WaitHandleCannotBeOpenedException | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.WaitHandleCannotBeOpenedException | [NullableContextAttribute(...)] | 0 | 2 | -| System.Threading.WaitHandleCannotBeOpenedException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Threading.WaitHandleExtensions | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.WaitHandleExtensions | [NullableContextAttribute(...)] | 0 | 1 | -| System.ThreeObjects | [InlineArrayAttribute(...)] | 0 | 3 | -| System.TimeOnly System.TimeOnly.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.TimeOnly System.TimeOnly.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.TimeOnly System.TimeOnly.Parse(System.String,System.IFormatProvider,System.Globalization.DateTimeStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.TimeOnly System.TimeOnly.ParseExact(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.TimeOnly System.TimeOnly.ParseExact(System.String,System.String,System.IFormatProvider,System.Globalization.DateTimeStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.TimeOnly System.TimeOnly.ParseExact(System.String,System.String[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.TimeOnly System.TimeOnly.ParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.DateTimeStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.TimeProvider | [NullableAttribute(...)] | 0 | 0 | -| System.TimeProvider | [NullableContextAttribute(...)] | 0 | 1 | -| System.TimeSpan System.TimeSpan.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.TimeSpan System.TimeSpan.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.TimeSpan System.TimeSpan.ParseExact(System.String,System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.TimeSpan System.TimeSpan.ParseExact(System.String,System.String,System.IFormatProvider,System.Globalization.TimeSpanStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.TimeSpan System.TimeSpan.ParseExact(System.String,System.String[],System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.TimeSpan System.TimeSpan.ParseExact(System.String,System.String[],System.IFormatProvider,System.Globalization.TimeSpanStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.TimeZone | [NullableAttribute(...)] | 0 | 0 | -| System.TimeZone | [NullableContextAttribute(...)] | 0 | 1 | -| System.TimeZone | [ObsoleteAttribute(...)] | 0 | System.TimeZone has been deprecated. Investigate the use of System.TimeZoneInfo instead. | -| System.TimeZoneInfo | [NotNullWhenAttribute(...)] | 0 | True | -| System.TimeZoneInfo | [NullableAttribute(...)] | 0 | 0 | -| System.TimeZoneInfo | [NullableContextAttribute(...)] | 0 | 1 | -| System.TimeZoneInfo | [TypeForwardedFromAttribute(...)] | 0 | System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.TimeZoneInfo System.TimeZoneInfo.CreateCustomTimeZone(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo.AdjustmentRule[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.TimeZoneInfo System.TimeZoneInfo.CreateCustomTimeZone(System.String,System.TimeSpan,System.String,System.String,System.String,System.TimeZoneInfo.AdjustmentRule[],System.Boolean) | [NullableContextAttribute(...)] | 0 | 2 | -| System.TimeZoneInfo.AdjustmentRule | [NotNullWhenAttribute(...)] | 0 | True | -| System.TimeZoneInfo.AdjustmentRule | [NullableContextAttribute(...)] | 0 | 0 | -| System.TimeZoneInfo.AdjustmentRule System.TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo.TransitionTime,System.TimeZoneInfo.TransitionTime) | [NullableContextAttribute(...)] | 0 | 1 | -| System.TimeZoneInfo.AdjustmentRule System.TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(System.DateTime,System.DateTime,System.TimeSpan,System.TimeZoneInfo.TransitionTime,System.TimeZoneInfo.TransitionTime,System.TimeSpan) | [NullableContextAttribute(...)] | 0 | 1 | -| System.TimeZoneInfo.AdjustmentRule[] | [NullableAttribute(...)] | 0 | [2,1] | -| System.TimeZoneInfo.TransitionTime | [NullableContextAttribute(...)] | 0 | 0 | -| System.TimeZoneNotFoundException | [NullableAttribute(...)] | 0 | 0 | -| System.TimeZoneNotFoundException | [NullableContextAttribute(...)] | 0 | 2 | -| System.TimeZoneNotFoundException | [TypeForwardedFromAttribute(...)] | 0 | System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.TimeoutException | [NullableAttribute(...)] | 0 | 0 | -| System.TimeoutException | [NullableContextAttribute(...)] | 0 | 2 | -| System.TimeoutException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Tuple | [NullableAttribute(...)] | 0 | 0 | -| System.Tuple | [NullableContextAttribute(...)] | 0 | 1 | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!7,!8,!9>> | [NullableAttribute(...)] | 0 | 1 | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!7,!8>> | [NullableAttribute(...)] | 0 | 1 | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!7>> | [NullableAttribute(...)] | 0 | 1 | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!7,!8,!9>> | [NullableAttribute(...)] | 0 | 1 | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!7,!8,!9>> | [NullableAttribute(...)] | 0 | 1 | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!7,!8,!9>> | [NullableAttribute(...)] | 0 | 1 | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17,!18,!19,!20>>> | [NullableAttribute(...)] | 0 | 1 | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17,!18,!19>>> | [NullableAttribute(...)] | 0 | 1 | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17,!18>>> | [NullableAttribute(...)] | 0 | 1 | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17>>> | [NullableAttribute(...)] | 0 | 1 | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16>>> | [NullableAttribute(...)] | 0 | 1 | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15>>> | [NullableAttribute(...)] | 0 | 1 | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14>>> | [NullableAttribute(...)] | 0 | 1 | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9>> | [NullableAttribute(...)] | 0 | 1 | -| System.Tuple<!0,!1,!2,!3,!4,!5,!6> | [NullableAttribute(...)] | 0 | 1 | -| System.Tuple<!0,!1,!2,!3,!4,!5> | [NullableAttribute(...)] | 0 | 1 | -| System.Tuple<!0,!1,!2,!3,!4> | [NullableAttribute(...)] | 0 | 1 | -| System.Tuple<!0,!1,!2,!3> | [NullableAttribute(...)] | 0 | 1 | -| System.Tuple<!0,!1,!2> | [NullableAttribute(...)] | 0 | 1 | -| System.Tuple<!0,!1> | [NullableAttribute(...)] | 0 | 1 | -| System.Tuple<!0> System.TupleExtensions.ToTuple`1(System.ValueTuple<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| System.TupleExtensions | [NullableAttribute(...)] | 0 | 0 | -| System.TupleExtensions | [NullableContextAttribute(...)] | 0 | 2 | -| System.Tuple`1 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Tuple`2 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Tuple`3 | [NullableAttribute(...)] | 0 | 0 | -| System.Tuple`3 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Tuple`3 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Tuple`4 | [NullableAttribute(...)] | 0 | 0 | -| System.Tuple`4 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Tuple`4 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Tuple`5 | [NullableAttribute(...)] | 0 | 0 | -| System.Tuple`5 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Tuple`5 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Tuple`6 | [NullableAttribute(...)] | 0 | 0 | -| System.Tuple`6 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Tuple`6 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Tuple`7 | [NullableAttribute(...)] | 0 | 0 | -| System.Tuple`7 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Tuple`7 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Tuple`8 | [NullableAttribute(...)] | 0 | 0 | -| System.Tuple`8 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Tuple`8 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.TwoObjects | [InlineArrayAttribute(...)] | 0 | 2 | -| System.Type | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1 | -| System.Type | [DynamicallyAccessedMembersAttribute(...)] | 0 | 3 | -| System.Type | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Type | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8 | -| System.Type | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Type | [DynamicallyAccessedMembersAttribute(...)] | 0 | 32 | -| System.Type | [DynamicallyAccessedMembersAttribute(...)] | 0 | 96 | -| System.Type | [DynamicallyAccessedMembersAttribute(...)] | 0 | 512 | -| System.Type | [DynamicallyAccessedMembersAttribute(...)] | 0 | 515 | -| System.Type | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1536 | -| System.Type | [DynamicallyAccessedMembersAttribute(...)] | 0 | 2048 | -| System.Type | [DynamicallyAccessedMembersAttribute(...)] | 0 | 2607 | -| System.Type | [DynamicallyAccessedMembersAttribute(...)] | 0 | 6144 | -| System.Type | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| System.Type | [NotNullWhenAttribute(...)] | 0 | True | -| System.Type | [NullableAttribute(...)] | 0 | 0 | -| System.Type | [NullableAttribute(...)] | 0 | 1 | -| System.Type | [NullableAttribute(...)] | 0 | 2 | -| System.Type | [NullableContextAttribute(...)] | 0 | 1 | -| System.Type System.Exception.GetType() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Type System.Nullable.GetUnderlyingType(System.Type) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Type System.Object.GetType() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Type System.Reflection.Assembly.GetType(System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type System.Reflection.Assembly.GetType(System.String,System.Boolean) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type System.Reflection.Assembly.GetType(System.String,System.Boolean,System.Boolean) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type System.Reflection.Emit.DynamicMethod.DeclaringType | [NullableAttribute(...)] | 0 | 2 | -| System.Type System.Reflection.Emit.DynamicMethod.ReflectedType | [NullableAttribute(...)] | 0 | 2 | -| System.Type System.Reflection.Emit.DynamicMethod.get_DeclaringType() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Type System.Reflection.Emit.DynamicMethod.get_ReflectedType() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Type System.Reflection.Emit.EnumBuilder.MakeArrayType() | [RequiresDynamicCodeAttribute(...)] | 0 | The code for an array of the specified type might not be available. | -| System.Type System.Reflection.Emit.EnumBuilder.MakeArrayType(System.Int32) | [RequiresDynamicCodeAttribute(...)] | 0 | The code for an array of the specified type might not be available. | -| System.Type System.Reflection.Emit.RuntimeAssemblyBuilder.GetType(System.String,System.Boolean,System.Boolean) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type System.Reflection.Emit.RuntimeEnumBuilder.GetInterface(System.String,System.Boolean) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type System.Reflection.Emit.RuntimeEnumBuilder.GetNestedType(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 384 | -| System.Type System.Reflection.Emit.RuntimeGenericTypeParameterBuilder.GetInterface(System.String,System.Boolean) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type System.Reflection.Emit.RuntimeGenericTypeParameterBuilder.GetNestedType(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 384 | -| System.Type System.Reflection.Emit.RuntimeGenericTypeParameterBuilder.MakeArrayType() | [RequiresDynamicCodeAttribute(...)] | 0 | The code for an array of the specified type might not be available. | -| System.Type System.Reflection.Emit.RuntimeGenericTypeParameterBuilder.MakeArrayType(System.Int32) | [RequiresDynamicCodeAttribute(...)] | 0 | The code for an array of the specified type might not be available. | -| System.Type System.Reflection.Emit.RuntimeGenericTypeParameterBuilder.MakeGenericType(System.Type[]) | [RequiresDynamicCodeAttribute(...)] | 0 | The native code for this instantiation might not be available at runtime. | -| System.Type System.Reflection.Emit.RuntimeGenericTypeParameterBuilder.MakeGenericType(System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | If some of the generic arguments are annotated (either with DynamicallyAccessedMembersAttribute, or generic constraints), trimming can't validate that the requirements of those annotations are met. | -| System.Type System.Reflection.Emit.RuntimeModuleBuilder.GetType(System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type System.Reflection.Emit.RuntimeModuleBuilder.GetType(System.String,System.Boolean) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type System.Reflection.Emit.RuntimeModuleBuilder.GetType(System.String,System.Boolean,System.Boolean) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type System.Reflection.Emit.RuntimeModuleBuilder.GetTypeNoLock(System.String,System.Boolean,System.Boolean) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type System.Reflection.Emit.RuntimeModuleBuilder.ResolveType(System.Int32,System.Type[],System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.Type System.Reflection.Emit.RuntimeTypeBuilder.GetInterface(System.String,System.Boolean) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type System.Reflection.Emit.RuntimeTypeBuilder.GetNestedType(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 384 | -| System.Type System.Reflection.Emit.SymbolType.GetInterface(System.String,System.Boolean) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type System.Reflection.Emit.SymbolType.GetNestedType(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 384 | -| System.Type System.Reflection.Emit.TypeBuilder.MakeArrayType() | [RequiresDynamicCodeAttribute(...)] | 0 | The code for an array of the specified type might not be available. | -| System.Type System.Reflection.Emit.TypeBuilder.MakeArrayType(System.Int32) | [RequiresDynamicCodeAttribute(...)] | 0 | The code for an array of the specified type might not be available. | -| System.Type System.Reflection.Emit.TypeBuilder.MakeGenericType(System.Type[]) | [RequiresDynamicCodeAttribute(...)] | 0 | The native code for this instantiation might not be available at runtime. | -| System.Type System.Reflection.Emit.TypeBuilder.MakeGenericType(System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | If some of the generic arguments are annotated (either with DynamicallyAccessedMembersAttribute, or generic constraints), trimming can't validate that the requirements of those annotations are met. | -| System.Type System.Reflection.Emit.TypeBuilderInstantiation.GetInterface(System.String,System.Boolean) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type System.Reflection.Emit.TypeBuilderInstantiation.GetNestedType(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 384 | -| System.Type System.Reflection.Emit.TypeBuilderInstantiation.MakeGenericType(System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | If some of the generic arguments are annotated (either with DynamicallyAccessedMembersAttribute, or generic constraints), trimming can't validate that the requirements of those annotations are met. | -| System.Type System.Reflection.Emit.TypeBuilderInstantiation.Substitute(System.Type[]) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Type System.Reflection.Emit.TypeBuilderInstantiation.Substitute(System.Type[]) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2055:UnrecognizedReflectionPattern | -| System.Type System.Reflection.MemberInfo.DeclaringType | [NullableAttribute(...)] | 0 | 2 | -| System.Type System.Reflection.MemberInfo.ReflectedType | [NullableAttribute(...)] | 0 | 2 | -| System.Type System.Reflection.MemberInfo.get_DeclaringType() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Type System.Reflection.MemberInfo.get_ReflectedType() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Type System.Reflection.Metadata.MetadataUpdateHandlerAttribute.HandlerType | [DynamicallyAccessedMembersAttribute(...)] | 0 | 24 | -| System.Type System.Reflection.ModifiedType.GetInterface(System.String,System.Boolean) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type System.Reflection.ModifiedType.GetNestedType(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 384 | -| System.Type System.Reflection.Module.GetType(System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type System.Reflection.Module.GetType(System.String,System.Boolean) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type System.Reflection.Module.GetType(System.String,System.Boolean,System.Boolean) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type System.Reflection.Module.ResolveType(System.Int32) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.Type System.Reflection.Module.ResolveType(System.Int32,System.Type[],System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.Type System.Reflection.PropertyInfo.GetModifiedPropertyType() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Type System.Reflection.PropertyInfo.PropertyType | [NullableAttribute(...)] | 0 | 1 | -| System.Type System.Reflection.PropertyInfo.get_PropertyType() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Type System.Reflection.RuntimeAssembly.GetType(System.String,System.Boolean,System.Boolean) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type System.Reflection.RuntimeExceptionHandlingClause.get_CatchType() | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Type System.Reflection.RuntimeExceptionHandlingClause.get_CatchType() | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Type System.Reflection.RuntimeModule.GetType(System.String,System.Boolean,System.Boolean) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type System.Reflection.RuntimeModule.ResolveType(System.Int32,System.Type[],System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimming changes metadata tokens | -| System.Type System.Reflection.SignatureType.GetInterface(System.String,System.Boolean) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type System.Reflection.SignatureType.GetNestedType(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 384 | -| System.Type System.Reflection.SignatureType.MakeArrayType() | [RequiresDynamicCodeAttribute(...)] | 0 | The code for an array of the specified type might not be available. | -| System.Type System.Reflection.SignatureType.MakeArrayType(System.Int32) | [RequiresDynamicCodeAttribute(...)] | 0 | The code for an array of the specified type might not be available. | -| System.Type System.Reflection.SignatureType.MakeGenericType(System.Type[]) | [RequiresDynamicCodeAttribute(...)] | 0 | The native code for this instantiation might not be available at runtime. | -| System.Type System.Reflection.SignatureType.MakeGenericType(System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | If some of the generic arguments are annotated (either with DynamicallyAccessedMembersAttribute, or generic constraints), trimming can't validate that the requirements of those annotations are met. | -| System.Type System.Reflection.SignatureTypeExtensions.TryMakeArrayType(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | 0 | AotAnalysis | -| System.Type System.Reflection.SignatureTypeExtensions.TryMakeArrayType(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL3050:AotUnfriendlyApi | -| System.Type System.Reflection.SignatureTypeExtensions.TryMakeArrayType(System.Type,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 0 | AotAnalysis | -| System.Type System.Reflection.SignatureTypeExtensions.TryMakeArrayType(System.Type,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL3050:AotUnfriendlyApi | -| System.Type System.Reflection.SignatureTypeExtensions.TryMakeGenericType(System.Type,System.Type[]) | [RequiresDynamicCodeAttribute(...)] | 0 | Wrapper around MakeGenericType which itself has RequiresDynamicCode | -| System.Type System.Reflection.SignatureTypeExtensions.TryMakeGenericType(System.Type,System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Wrapper around MakeGenericType which itself has RequiresUnreferencedCode | -| System.Type System.Reflection.SignatureTypeExtensions.TryResolve(System.Reflection.SignatureType,System.Type[]) | [UnconditionalSuppressMessageAttribute(...)] | 0 | AotAnalysis | -| System.Type System.Reflection.SignatureTypeExtensions.TryResolve(System.Reflection.SignatureType,System.Type[]) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Type System.Reflection.SignatureTypeExtensions.TryResolve(System.Reflection.SignatureType,System.Type[]) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Type System.Reflection.SignatureTypeExtensions.TryResolve(System.Reflection.SignatureType,System.Type[]) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL3050:AotUnfriendlyApi | -| System.Type System.Reflection.TypeDelegator.BaseType | [NullableAttribute(...)] | 0 | 2 | -| System.Type System.Reflection.TypeDelegator.GetElementType() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Type System.Reflection.TypeDelegator.GetInterface(System.String,System.Boolean) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type System.Reflection.TypeDelegator.GetNestedType(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 384 | -| System.Type System.Reflection.TypeDelegator.get_BaseType() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Type System.Reflection.TypeNameParser.GenericTypeName.ResolveType(System.Reflection.TypeNameParser,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 0 | AotAnalysis | -| System.Type System.Reflection.TypeNameParser.GenericTypeName.ResolveType(System.Reflection.TypeNameParser,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Type System.Reflection.TypeNameParser.GenericTypeName.ResolveType(System.Reflection.TypeNameParser,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2055:UnrecognizedReflectionPattern | -| System.Type System.Reflection.TypeNameParser.GenericTypeName.ResolveType(System.Reflection.TypeNameParser,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL3050:AotUnfriendlyApi | -| System.Type System.Reflection.TypeNameParser.GetType(System.String,System.Boolean,System.Boolean,System.Reflection.Assembly) | [RequiresUnreferencedCodeAttribute(...)] | 0 | The type might be removed | -| System.Type System.Reflection.TypeNameParser.GetType(System.String,System.Func<System.Reflection.Assembly,System.Reflection.AssemblyName>,System.Func<System.Boolean,System.Reflection.Assembly,System.String,System.Type>,System.Reflection.Assembly,System.Boolean,System.Boolean,System.Boolean) | [RequiresUnreferencedCodeAttribute(...)] | 0 | The type might be removed | -| System.Type System.Reflection.TypeNameParser.GetType(System.String,System.ReadOnlySpan<System.String>,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Type System.Reflection.TypeNameParser.GetType(System.String,System.ReadOnlySpan<System.String>,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Type System.Reflection.TypeNameParser.GetType(System.String,System.ReadOnlySpan<System.String>,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2075:UnrecognizedReflectionPattern | -| System.Type System.Reflection.TypeNameParser.GetType(System.String,System.Reflection.Assembly,System.Boolean,System.Boolean) | [RequiresUnreferencedCodeAttribute(...)] | 0 | The type might be removed | -| System.Type System.Reflection.TypeNameParser.ModifierTypeName.ResolveType(System.Reflection.TypeNameParser,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 0 | AotAnalysis | -| System.Type System.Reflection.TypeNameParser.ModifierTypeName.ResolveType(System.Reflection.TypeNameParser,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL3050:AotUnfriendlyApi | -| System.Type System.Resources.ResourceManager.ResourceManagerMediator.UserResourceSet | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Type System.Resources.ResourceManager.ResourceSetType | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | -| System.Type System.Resources.ResourceReader.<FindType>g__UseReflectionToGetTypeLocal\|52_0(System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Type System.Resources.ResourceReader.<FindType>g__UseReflectionToGetTypeLocal\|52_0(System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Type System.Resources.ResourceReader.UseReflectionToGetType(System.Int32) | [RequiresUnreferencedCodeAttribute(...)] | 0 | The CustomResourceTypesSupport feature switch has been enabled for this app which is being trimmed. Custom readers as well as custom objects on the resources file are not observable by the trimmer and so required assemblies, types and members may be removed. | -| System.Type System.Runtime.InteropServices.ComEventInterfaceAttribute.EventProvider | [DynamicallyAccessedMembersAttribute(...)] | 0 | 2607 | -| System.Type System.Runtime.InteropServices.ComEventInterfaceAttribute.SourceInterface | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8 | -| System.Type System.Runtime.InteropServices.Marshal.GetTypeFromCLSID(System.Guid) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Type System.Runtime.InteropServices.Marshal.GetTypeFromCLSID(System.Guid) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Type System.Runtime.InteropServices.Marshalling.MarshalUsingAttribute.NativeType | [NullableAttribute(...)] | 0 | 2 | -| System.Type System.Runtime.InteropServices.Marshalling.MarshalUsingAttribute.get_NativeType() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Type System.RuntimeType.GetInterface(System.String,System.Boolean) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type System.RuntimeType.GetInterface(System.String,System.Boolean) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Type System.RuntimeType.GetInterface(System.String,System.Boolean) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2063:UnrecognizedReflectionPattern | -| System.Type System.RuntimeType.GetNestedType(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 384 | -| System.Type System.RuntimeType.MakeGenericType(System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | If some of the generic arguments are annotated (either with DynamicallyAccessedMembersAttribute, or generic constraints), trimming can't validate that the requirements of those annotations are met. | -| System.Type System.Type.BaseType | [NullableAttribute(...)] | 0 | 2 | -| System.Type System.Type.DeclaringType | [NullableAttribute(...)] | 0 | 2 | -| System.Type System.Type.GetElementType() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Type System.Type.GetEnumUnderlyingType() | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Type System.Type.GetEnumUnderlyingType() | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2085:UnrecognizedReflectionPattern | -| System.Type System.Type.GetInterface(System.String) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type System.Type.GetInterface(System.String,System.Boolean) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type System.Type.GetNestedType(System.String) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 128 | -| System.Type System.Type.GetNestedType(System.String,System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 384 | -| System.Type System.Type.GetType(System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | The type might be removed | -| System.Type System.Type.GetType(System.String,System.Boolean) | [RequiresUnreferencedCodeAttribute(...)] | 0 | The type might be removed | -| System.Type System.Type.GetType(System.String,System.Boolean,System.Boolean) | [RequiresUnreferencedCodeAttribute(...)] | 0 | The type might be removed | -| System.Type System.Type.GetType(System.String,System.Func<System.Reflection.Assembly,System.Reflection.AssemblyName>,System.Func<System.Boolean,System.Reflection.Assembly,System.String,System.Type>) | [RequiresUnreferencedCodeAttribute(...)] | 0 | The type might be removed | -| System.Type System.Type.GetType(System.String,System.Func<System.Reflection.Assembly,System.Reflection.AssemblyName>,System.Func<System.Boolean,System.Reflection.Assembly,System.String,System.Type>,System.Boolean) | [RequiresUnreferencedCodeAttribute(...)] | 0 | The type might be removed | -| System.Type System.Type.GetType(System.String,System.Func<System.Reflection.Assembly,System.Reflection.AssemblyName>,System.Func<System.Boolean,System.Reflection.Assembly,System.String,System.Type>,System.Boolean,System.Boolean) | [RequiresUnreferencedCodeAttribute(...)] | 0 | The type might be removed | -| System.Type System.Type.GetTypeFromCLSID(System.Guid) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Type System.Type.GetTypeFromCLSID(System.Guid) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Type System.Type.GetTypeFromCLSID(System.Guid,System.Boolean) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Type System.Type.GetTypeFromCLSID(System.Guid,System.Boolean) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Type System.Type.GetTypeFromCLSID(System.Guid,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Type System.Type.GetTypeFromCLSID(System.Guid,System.String) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Type System.Type.GetTypeFromCLSID(System.Guid,System.String,System.Boolean) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Type System.Type.GetTypeFromCLSID(System.Guid,System.String,System.Boolean) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Type System.Type.GetTypeFromHandle(System.RuntimeTypeHandle) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Type System.Type.GetTypeFromProgID(System.String) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Type System.Type.GetTypeFromProgID(System.String,System.Boolean) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Type System.Type.GetTypeFromProgID(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Type System.Type.GetTypeFromProgID(System.String,System.String) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Type System.Type.GetTypeFromProgID(System.String,System.String,System.Boolean) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Type System.Type.GetTypeFromProgID(System.String,System.String,System.Boolean) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Type System.Type.MakeArrayType() | [RequiresDynamicCodeAttribute(...)] | 0 | The code for an array of the specified type might not be available. | -| System.Type System.Type.MakeArrayType(System.Int32) | [RequiresDynamicCodeAttribute(...)] | 0 | The code for an array of the specified type might not be available. | -| System.Type System.Type.MakeGenericType(System.Type[]) | [RequiresDynamicCodeAttribute(...)] | 0 | The native code for this instantiation might not be available at runtime. | -| System.Type System.Type.MakeGenericType(System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | If some of the generic arguments are annotated (either with DynamicallyAccessedMembersAttribute, or generic constraints), trimming can't validate that the requirements of those annotations are met. | -| System.Type System.Type.ReflectedType | [NullableAttribute(...)] | 0 | 2 | -| System.Type System.Type.ReflectionOnlyGetType(System.String,System.Boolean,System.Boolean) | [ObsoleteAttribute(...)] | 0 | ReflectionOnly loading is not supported and throws PlatformNotSupportedException. | -| System.Type System.Type.get_BaseType() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Type System.Type.get_DeclaringType() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Type System.Type.get_ReflectedType() | [NullableContextAttribute(...)] | 0 | 2 | -| System.Type System.TypedReference.GetTargetType(System.TypedReference) | [NullableContextAttribute(...)] | 0 | 1 | -| System.TypeAccessException | [NullableAttribute(...)] | 0 | 0 | -| System.TypeAccessException | [NullableContextAttribute(...)] | 0 | 2 | -| System.TypeAccessException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.TypeCode System.Type.GetTypeCode(System.Type) | [NullableContextAttribute(...)] | 0 | 2 | -| System.TypeInitializationException | [NullableAttribute(...)] | 0 | 0 | -| System.TypeInitializationException | [NullableContextAttribute(...)] | 0 | 1 | -| System.TypeInitializationException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.TypeLoadException | [NullableAttribute(...)] | 0 | 0 | -| System.TypeLoadException | [NullableContextAttribute(...)] | 0 | 1 | -| System.TypeLoadException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.TypeUnloadedException | [NullableAttribute(...)] | 0 | 0 | -| System.TypeUnloadedException | [NullableContextAttribute(...)] | 0 | 2 | -| System.TypeUnloadedException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Type[] | [NotNullWhenAttribute(...)] | 0 | False | -| System.Type[] | [NullableAttribute(...)] | 0 | 1 | -| System.Type[] | [NullableAttribute(...)] | 0 | [2,1] | -| System.Type[] System.Reflection.Assembly.GetExportedTypes() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type[] System.Reflection.Assembly.GetForwardedTypes() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type[] System.Reflection.Assembly.GetTypes() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type[] System.Reflection.Emit.AssemblyBuilder.GetExportedTypes() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type[] System.Reflection.Emit.RuntimeEnumBuilder.GetInterfaces() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type[] System.Reflection.Emit.RuntimeEnumBuilder.GetNestedTypes(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 384 | -| System.Type[] System.Reflection.Emit.RuntimeGenericTypeParameterBuilder.GetInterfaces() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type[] System.Reflection.Emit.RuntimeGenericTypeParameterBuilder.GetNestedTypes(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 384 | -| System.Type[] System.Reflection.Emit.RuntimeModuleBuilder.GetTypes() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type[] System.Reflection.Emit.RuntimeTypeBuilder.GetInterfaces() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type[] System.Reflection.Emit.RuntimeTypeBuilder.GetNestedTypes(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 384 | -| System.Type[] System.Reflection.Emit.SymbolType.GetInterfaces() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type[] System.Reflection.Emit.SymbolType.GetNestedTypes(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 384 | -| System.Type[] System.Reflection.Emit.TypeBuilderInstantiation.GetInterfaces() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type[] System.Reflection.Emit.TypeBuilderInstantiation.GetNestedTypes(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 384 | -| System.Type[] System.Reflection.MethodBase.GetGenericArguments() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Type[] System.Reflection.ModifiedType.GetInterfaces() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type[] System.Reflection.ModifiedType.GetNestedTypes(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 384 | -| System.Type[] System.Reflection.Module.FindTypes(System.Reflection.TypeFilter,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Type[] System.Reflection.Module.FindTypes(System.Reflection.TypeFilter,System.Object) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type[] System.Reflection.Module.GetTypes() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type[] System.Reflection.PropertyInfo.GetOptionalCustomModifiers() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Type[] System.Reflection.PropertyInfo.GetRequiredCustomModifiers() | [NullableContextAttribute(...)] | 0 | 1 | -| System.Type[] System.Reflection.ReflectionTypeLoadException.Types | [NullableAttribute(...)] | 0 | [1,2] | -| System.Type[] System.Reflection.RuntimeAssembly.GetExportedTypes() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type[] System.Reflection.RuntimeAssembly.GetForwardedTypes() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type[] System.Reflection.RuntimeModule.GetTypes() | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed | -| System.Type[] System.Reflection.SignatureType.FindInterfaces(System.Reflection.TypeFilter,System.Object) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type[] System.Reflection.SignatureType.GetInterfaces() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type[] System.Reflection.SignatureType.GetNestedTypes(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 384 | -| System.Type[] System.Reflection.TypeDelegator.GetInterfaces() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type[] System.Reflection.TypeDelegator.GetNestedTypes(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 384 | -| System.Type[] System.Reflection.TypeInfo.<get_DeclaredNestedTypes>g__GetDeclaredOnlyNestedTypes\|22_0(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Type[] System.Reflection.TypeInfo.<get_DeclaredNestedTypes>g__GetDeclaredOnlyNestedTypes\|22_0(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2070:UnrecognizedReflectionPattern | -| System.Type[] System.RuntimeType.GetInterfaces() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type[] System.RuntimeType.GetNestedTypes(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 384 | -| System.Type[] System.Type.FindInterfaces(System.Reflection.TypeFilter,System.Object) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type[] System.Type.GetInterfaces() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8192 | -| System.Type[] System.Type.GetNestedTypes() | [DynamicallyAccessedMembersAttribute(...)] | 0 | 128 | -| System.Type[] System.Type.GetNestedTypes(System.Reflection.BindingFlags) | [DynamicallyAccessedMembersAttribute(...)] | 0 | 384 | -| System.Type[][] | [NullableAttribute(...)] | 0 | [2,1,1] | -| System.TypedReference | [CLSCompliantAttribute(...)] | 0 | False | -| System.TypedReference | [NullableAttribute(...)] | 0 | 0 | -| System.TypedReference | [NullableContextAttribute(...)] | 0 | 2 | -| System.TypedReference System.ArgIterator.GetNextArg() | [CLSCompliantAttribute(...)] | 0 | False | -| System.TypedReference System.ArgIterator.GetNextArg(System.RuntimeTypeHandle) | [CLSCompliantAttribute(...)] | 0 | False | -| System.TypedReference System.TypedReference.MakeTypedReference(System.Object,System.Reflection.FieldInfo[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt16 System.BitConverter.HalfToUInt16Bits(System.Half) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.BitConverter.ToUInt16(System.Byte[],System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.BitConverter.ToUInt16(System.ReadOnlySpan<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.BitConverter.ToUInt16(System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.UInt16 System.Buffers.Binary.BinaryPrimitives.ReadUInt16BigEndian(System.ReadOnlySpan<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Buffers.Binary.BinaryPrimitives.ReadUInt16LittleEndian(System.ReadOnlySpan<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Buffers.Binary.BinaryPrimitives.ReverseEndianness(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Convert.ToUInt16(System.Boolean) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Convert.ToUInt16(System.Byte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Convert.ToUInt16(System.Char) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Convert.ToUInt16(System.DateTime) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Convert.ToUInt16(System.Decimal) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Convert.ToUInt16(System.Double) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Convert.ToUInt16(System.Int16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Convert.ToUInt16(System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Convert.ToUInt16(System.Int64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Convert.ToUInt16(System.Object) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Convert.ToUInt16(System.Object,System.IFormatProvider) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Convert.ToUInt16(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Convert.ToUInt16(System.Single) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Convert.ToUInt16(System.String) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Convert.ToUInt16(System.String,System.IFormatProvider) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Convert.ToUInt16(System.String,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Convert.ToUInt16(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Convert.ToUInt16(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Convert.ToUInt16(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Decimal.ToUInt16(System.Decimal) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Decimal.op_Explicit(System.Decimal) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Half.op_CheckedExplicit(System.Half) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Half.op_Explicit(System.Half) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.IO.BinaryReader.ReadUInt16() | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.IO.UnmanagedMemoryAccessor.ReadUInt16(System.Int64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Int128.op_CheckedExplicit(System.Int128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Int128.op_Explicit(System.Int128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Math.Clamp(System.UInt16,System.UInt16,System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Math.Max(System.UInt16,System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Math.Min(System.UInt16,System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Runtime.InteropServices.NFloat.op_CheckedExplicit(System.Runtime.InteropServices.NFloat) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Runtime.InteropServices.NFloat.op_Explicit(System.Runtime.InteropServices.NFloat) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Runtime.Serialization.SerializationInfo.GetUInt16(System.String) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Threading.Thread.VolatileRead(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.Threading.Volatile.Read(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.UInt16.CreateChecked`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt16 System.UInt16.CreateSaturating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt16 System.UInt16.CreateTruncating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt16 System.UInt16.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt16 System.UInt16.Parse(System.String,System.Globalization.NumberStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt16 System.UInt16.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt16 System.UInt16.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt16 System.UInt128.op_CheckedExplicit(System.UInt128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt16 System.UInt128.op_Explicit(System.UInt128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 Interop.Kernel32.GetEnvironmentVariable(System.String,System.Char,System.UInt32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.UInt32 Interop.Kernel32.GetEnvironmentVariable(System.String,System.Char,System.UInt32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.UInt32 System.BitConverter.SingleToUInt32Bits(System.Single) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.BitConverter.ToUInt32(System.Byte[],System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.BitConverter.ToUInt32(System.ReadOnlySpan<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.BitConverter.ToUInt32(System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.UInt32 System.Buffers.Binary.BinaryPrimitives.ReadUInt32BigEndian(System.ReadOnlySpan<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Buffers.Binary.BinaryPrimitives.ReadUInt32LittleEndian(System.ReadOnlySpan<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Buffers.Binary.BinaryPrimitives.ReverseEndianness(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Convert.ToUInt32(System.Boolean) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Convert.ToUInt32(System.Byte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Convert.ToUInt32(System.Char) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Convert.ToUInt32(System.DateTime) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Convert.ToUInt32(System.Decimal) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Convert.ToUInt32(System.Double) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Convert.ToUInt32(System.Int16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Convert.ToUInt32(System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Convert.ToUInt32(System.Int64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Convert.ToUInt32(System.Object) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Convert.ToUInt32(System.Object,System.IFormatProvider) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Convert.ToUInt32(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Convert.ToUInt32(System.Single) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Convert.ToUInt32(System.String) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Convert.ToUInt32(System.String,System.IFormatProvider) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Convert.ToUInt32(System.String,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Convert.ToUInt32(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Convert.ToUInt32(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Convert.ToUInt32(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Decimal.ToUInt32(System.Decimal) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Decimal.op_Explicit(System.Decimal) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Half.op_CheckedExplicit(System.Half) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Half.op_Explicit(System.Half) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.IO.BinaryReader.ReadUInt32() | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.IO.UnmanagedMemoryAccessor.ReadUInt32(System.Int64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Int128.op_CheckedExplicit(System.Int128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Int128.op_Explicit(System.Int128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Math.Clamp(System.UInt32,System.UInt32,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Math.Max(System.UInt32,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Math.Min(System.UInt32,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Numerics.BitOperations.Crc32C(System.UInt32,System.Byte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Numerics.BitOperations.Crc32C(System.UInt32,System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Numerics.BitOperations.Crc32C(System.UInt32,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Numerics.BitOperations.Crc32C(System.UInt32,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Numerics.BitOperations.RotateLeft(System.UInt32,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Numerics.BitOperations.RotateRight(System.UInt32,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Numerics.BitOperations.RoundUpToPowerOf2(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Reflection.Assembly.GetAssemblyCount() | [LibraryImportAttribute(...)] | 0 | QCall | -| System.UInt32 System.Runtime.InteropServices.NFloat.op_CheckedExplicit(System.Runtime.InteropServices.NFloat) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Runtime.InteropServices.NFloat.op_Explicit(System.Runtime.InteropServices.NFloat) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Runtime.Intrinsics.Vector64.ExtractMostSignificantBits`1(System.Runtime.Intrinsics.Vector64<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Runtime.Intrinsics.Vector64.ExtractMostSignificantBits`1(System.Runtime.Intrinsics.Vector64<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.UInt32 System.Runtime.Intrinsics.Vector128.ExtractMostSignificantBits`1(System.Runtime.Intrinsics.Vector128<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Runtime.Intrinsics.Vector128.ExtractMostSignificantBits`1(System.Runtime.Intrinsics.Vector128<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.UInt32 System.Runtime.Intrinsics.Vector256.ExtractMostSignificantBits`1(System.Runtime.Intrinsics.Vector256<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Runtime.Intrinsics.Vector256.ExtractMostSignificantBits`1(System.Runtime.Intrinsics.Vector256<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.UInt32 System.Runtime.Serialization.SerializationInfo.GetUInt32(System.String) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Threading.Interlocked.Add(System.UInt32,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Threading.Interlocked.And(System.UInt32,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Threading.Interlocked.CompareExchange(System.UInt32,System.UInt32,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Threading.Interlocked.Decrement(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Threading.Interlocked.Exchange(System.UInt32,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Threading.Interlocked.Increment(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Threading.Interlocked.Or(System.UInt32,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Threading.Thread.VolatileRead(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.Threading.Volatile.Read(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.UInt32.CreateChecked`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt32 System.UInt32.CreateSaturating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt32 System.UInt32.CreateTruncating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt32 System.UInt32.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt32 System.UInt32.Parse(System.String,System.Globalization.NumberStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt32 System.UInt32.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt32 System.UInt32.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt32 System.UInt128.op_CheckedExplicit(System.UInt128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt32 System.UInt128.op_Explicit(System.UInt128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.BitConverter.DoubleToUInt64Bits(System.Double) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.BitConverter.ToUInt64(System.Byte[],System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.BitConverter.ToUInt64(System.ReadOnlySpan<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.BitConverter.ToUInt64(System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.UInt64 System.Buffers.Binary.BinaryPrimitives.ReadUInt64BigEndian(System.ReadOnlySpan<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Buffers.Binary.BinaryPrimitives.ReadUInt64LittleEndian(System.ReadOnlySpan<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Buffers.Binary.BinaryPrimitives.ReverseEndianness(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Convert.ToUInt64(System.Boolean) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Convert.ToUInt64(System.Byte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Convert.ToUInt64(System.Char) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Convert.ToUInt64(System.DateTime) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Convert.ToUInt64(System.Decimal) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Convert.ToUInt64(System.Double) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Convert.ToUInt64(System.Int16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Convert.ToUInt64(System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Convert.ToUInt64(System.Int64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Convert.ToUInt64(System.Object) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Convert.ToUInt64(System.Object,System.IFormatProvider) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Convert.ToUInt64(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Convert.ToUInt64(System.Single) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Convert.ToUInt64(System.String) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Convert.ToUInt64(System.String,System.IFormatProvider) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Convert.ToUInt64(System.String,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Convert.ToUInt64(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Convert.ToUInt64(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Convert.ToUInt64(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Decimal.ToUInt64(System.Decimal) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Decimal.op_Explicit(System.Decimal) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Diagnostics.Tracing.EventPipeInternal.Enable(System.Char*,System.Diagnostics.Tracing.EventPipeSerializationFormat,System.UInt32,System.Diagnostics.Tracing.EventPipeInternal.EventPipeProviderConfigurationNative*,System.UInt32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.UInt64 System.Half.op_CheckedExplicit(System.Half) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Half.op_Explicit(System.Half) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.IO.BinaryReader.ReadUInt64() | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.IO.UnmanagedMemoryAccessor.ReadUInt64(System.Int64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Int128.op_CheckedExplicit(System.Int128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Int128.op_Explicit(System.Int128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Math.BigMul(System.UInt64,System.UInt64,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Math.Clamp(System.UInt64,System.UInt64,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Math.Max(System.UInt64,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Math.Min(System.UInt64,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Numerics.BitOperations.RotateLeft(System.UInt64,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Numerics.BitOperations.RotateRight(System.UInt64,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Numerics.BitOperations.RoundUpToPowerOf2(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Runtime.InteropServices.NFloat.op_CheckedExplicit(System.Runtime.InteropServices.NFloat) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Runtime.InteropServices.NFloat.op_Explicit(System.Runtime.InteropServices.NFloat) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Runtime.Intrinsics.Vector512.ExtractMostSignificantBits`1(System.Runtime.Intrinsics.Vector512<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Runtime.Intrinsics.Vector512.ExtractMostSignificantBits`1(System.Runtime.Intrinsics.Vector512<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.UInt64 System.Runtime.Serialization.SerializationInfo.GetUInt64(System.String) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Threading.Interlocked.Add(System.UInt64,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Threading.Interlocked.And(System.UInt64,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Threading.Interlocked.CompareExchange(System.UInt64,System.UInt64,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Threading.Interlocked.Decrement(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Threading.Interlocked.Exchange(System.UInt64,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Threading.Interlocked.Increment(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Threading.Interlocked.Or(System.UInt64,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Threading.Interlocked.Read(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Threading.Thread.GetCurrentOSThreadId() | [LibraryImportAttribute(...)] | 0 | QCall | -| System.UInt64 System.Threading.Thread.VolatileRead(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.Threading.Volatile.Read(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.UInt64.CreateChecked`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt64 System.UInt64.CreateSaturating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt64 System.UInt64.CreateTruncating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt64 System.UInt64.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt64 System.UInt64.Parse(System.String,System.Globalization.NumberStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt64 System.UInt64.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt64 System.UInt64.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt64 System.UInt128.op_CheckedExplicit(System.UInt128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt64 System.UInt128.op_Explicit(System.UInt128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt128 | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt128 System.Buffers.Binary.BinaryPrimitives.ReadUInt128BigEndian(System.ReadOnlySpan<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt128 System.Buffers.Binary.BinaryPrimitives.ReadUInt128LittleEndian(System.ReadOnlySpan<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt128 System.Buffers.Binary.BinaryPrimitives.ReverseEndianness(System.UInt128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt128 System.Half.op_CheckedExplicit(System.Half) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt128 System.Half.op_Explicit(System.Half) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt128 System.Int128.op_CheckedExplicit(System.Int128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt128 System.Int128.op_Explicit(System.Int128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt128 System.Runtime.InteropServices.NFloat.op_CheckedExplicit(System.Runtime.InteropServices.NFloat) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt128 System.Runtime.InteropServices.NFloat.op_Explicit(System.Runtime.InteropServices.NFloat) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt128 System.UInt128.CreateChecked`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt128 System.UInt128.CreateSaturating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt128 System.UInt128.CreateTruncating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt128 System.UInt128.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt128 System.UInt128.Parse(System.String,System.Globalization.NumberStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt128 System.UInt128.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt128 System.UInt128.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UInt128 System.UInt128.op_CheckedExplicit(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt128 System.UInt128.op_Explicit(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt128 System.UInt128.op_Implicit(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt128 System.UInt128.op_Implicit(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt128 System.UInt128.op_Implicit(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UInt128 System.UInt128.op_Implicit(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.UIntPtr System.Buffers.Binary.BinaryPrimitives.ReadUIntPtrBigEndian(System.ReadOnlySpan<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr System.Buffers.Binary.BinaryPrimitives.ReadUIntPtrLittleEndian(System.ReadOnlySpan<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr System.Buffers.Binary.BinaryPrimitives.ReverseEndianness(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr System.Half.op_CheckedExplicit(System.Half) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr System.Half.op_Explicit(System.Half) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr System.Int128.op_CheckedExplicit(System.Int128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr System.Int128.op_Explicit(System.Int128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr System.Math.Clamp(System.UIntPtr,System.UIntPtr,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr System.Math.Max(System.UIntPtr,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr System.Math.Min(System.UIntPtr,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr System.Numerics.BitOperations.RotateLeft(System.UIntPtr,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr System.Numerics.BitOperations.RotateRight(System.UIntPtr,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr System.Numerics.BitOperations.RoundUpToPowerOf2(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr System.Runtime.InteropServices.NFloat.op_CheckedExplicit(System.Runtime.InteropServices.NFloat) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr System.Runtime.InteropServices.NFloat.op_Explicit(System.Runtime.InteropServices.NFloat) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr System.Text.Latin1Utility.GetIndexOfFirstNonLatin1Char_Sse2(System.Char*,System.UIntPtr) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.UIntPtr System.Text.Latin1Utility.NarrowUtf16ToLatin1_Sse2(System.Char*,System.Byte*,System.UIntPtr) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.UIntPtr System.Threading.Interlocked.CompareExchange(System.UIntPtr,System.UIntPtr,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr System.Threading.Interlocked.Exchange(System.UIntPtr,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr System.Threading.Thread.VolatileRead(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr System.Threading.Volatile.Read(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr System.UInt128.op_CheckedExplicit(System.UInt128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr System.UInt128.op_Explicit(System.UInt128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.UIntPtr System.UIntPtr.CreateChecked`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UIntPtr System.UIntPtr.CreateSaturating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UIntPtr System.UIntPtr.CreateTruncating`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UIntPtr System.UIntPtr.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UIntPtr System.UIntPtr.Parse(System.String,System.Globalization.NumberStyles) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UIntPtr System.UIntPtr.Parse(System.String,System.Globalization.NumberStyles,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UIntPtr System.UIntPtr.Parse(System.String,System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.UnauthorizedAccessException | [NullableAttribute(...)] | 0 | 0 | -| System.UnauthorizedAccessException | [NullableContextAttribute(...)] | 0 | 2 | -| System.UnauthorizedAccessException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.UnhandledExceptionEventArgs | [NullableAttribute(...)] | 0 | 0 | -| System.UnhandledExceptionEventArgs | [NullableAttribute(...)] | 0 | 1 | -| System.UnhandledExceptionEventArgs | [NullableContextAttribute(...)] | 0 | 1 | -| System.UnitySerializationHolder | [ObsoleteAttribute(...)] | 0 | Formatter-based serialization is obsolete and should not be used. | -| System.ValueTuple | [NullableAttribute(...)] | 0 | 0 | -| System.ValueTuple | [NullableContextAttribute(...)] | 0 | 1 | -| System.ValueTuple | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,!7> | [NullableAttribute(...)] | 0 | [0,1,1,1,1,1,1,1,0] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!7,!8,!9>> | [NullableAttribute(...)] | 0 | [0,1,1,1,1,1,1,1,0,1,1,1] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!7,!8>> | [NullableAttribute(...)] | 0 | [0,1,1,1,1,1,1,1,0,1,1] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!7>> | [NullableAttribute(...)] | 0 | [0,1,1,1,1,1,1,1,0,1] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!7,!8,!9>> | [NullableAttribute(...)] | 0 | [0,1,1,1,1,1,1,1,0,1,1,1,1] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!7,!8,!9>> | [NullableAttribute(...)] | 0 | [0,1,1,1,1,1,1,1,0,1,1,1,1,1] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!7,!8,!9>> | [NullableAttribute(...)] | 0 | [0,1,1,1,1,1,1,1,0,1,1,1,1,1,1] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9,System.ValueTuple<!14,!15,!16,!17,!18,!19,!20>>> | [NullableAttribute(...)] | 0 | [0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9,System.ValueTuple<!14,!15,!16,!17,!18,!19>>> | [NullableAttribute(...)] | 0 | [0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9,System.ValueTuple<!14,!15,!16,!17,!18>>> | [NullableAttribute(...)] | 0 | [0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9,System.ValueTuple<!14,!15,!16,!17>>> | [NullableAttribute(...)] | 0 | [0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9,System.ValueTuple<!14,!15,!16>>> | [NullableAttribute(...)] | 0 | [0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9,System.ValueTuple<!14,!15>>> | [NullableAttribute(...)] | 0 | [0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9,System.ValueTuple<!14>>> | [NullableAttribute(...)] | 0 | [0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6,System.ValueTuple<!10,!11,!12,!13,!7,!8,!9>> | [NullableAttribute(...)] | 0 | [0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5,!6> | [NullableAttribute(...)] | 0 | [0,1,1,1,1,1,1,1] | -| System.ValueTuple<!0,!1,!2,!3,!4,!5> | [NullableAttribute(...)] | 0 | [0,1,1,1,1,1,1] | -| System.ValueTuple<!0,!1,!2,!3,!4> | [NullableAttribute(...)] | 0 | [0,1,1,1,1,1] | -| System.ValueTuple<!0,!1,!2,!3> | [NullableAttribute(...)] | 0 | [0,1,1,1,1] | -| System.ValueTuple<!0,!1,!2> | [NullableAttribute(...)] | 0 | [0,1,1,1] | -| System.ValueTuple<!0,!1> | [NullableAttribute(...)] | 0 | [0,1,1] | -| System.ValueTuple<!0> | [NullableAttribute(...)] | 0 | [0,1] | -| System.ValueTuple<!0> System.TupleExtensions.ToValueTuple`1(System.Tuple<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| System.ValueTuple<System.HexConverter.Casing,System.IntPtr> | [TupleElementNamesAttribute(...)] | 0 | [RosPtr,casing] | -| System.ValueTuple<System.Int32,System.Int32,System.String,System.String>[] | [TupleElementNamesAttribute(...)] | 0 | [Literal,ArgIndex,Alignment,Format] | -| System.ValueTuple<System.Int32,System.Int32> System.Console.GetCursorPosition() | [NullableContextAttribute(...)] | 0 | 0 | -| System.ValueTuple<System.Int32,System.Int32> System.Console.GetCursorPosition() | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.ValueTuple<System.Int32,System.Int32> System.Console.GetCursorPosition() | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.ValueTuple<System.Int32,System.Int32> System.Console.GetCursorPosition() | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.ValueTuple<System.Int32,System.Int32> System.Console.GetCursorPosition() | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.ValueTuple<System.Int32,System.Int32> System.Runtime.Intrinsics.X86.X86Base.DivRem(System.UInt32,System.Int32,System.Int32) | [RequiresPreviewFeaturesAttribute(...)] | 0 | DivRem is in preview. | -| System.ValueTuple<System.Int64,System.Int64> System.Runtime.Intrinsics.X86.X86Base.X64.DivRem(System.UInt64,System.Int64,System.Int64) | [RequiresPreviewFeaturesAttribute(...)] | 0 | DivRem is in preview. | -| System.ValueTuple<System.IntPtr,System.IntPtr> System.Runtime.Intrinsics.X86.X86Base.DivRem(System.UIntPtr,System.IntPtr,System.IntPtr) | [RequiresPreviewFeaturesAttribute(...)] | 0 | DivRem is in preview. | -| System.ValueTuple<System.Object,System.Object> System.Runtime.DependentHandle.TargetAndDependent | [NullableAttribute(...)] | 0 | [0,2,2] | -| System.ValueTuple<System.Object,System.Object> System.Runtime.DependentHandle.TargetAndDependent | [TupleElementNamesAttribute(...)] | 0 | [Target,Dependent] | -| System.ValueTuple<System.Runtime.Intrinsics.Vector64<System.Int16>,System.Runtime.Intrinsics.Vector64<System.Int16>> System.Runtime.Intrinsics.Vector64.Widen(System.Runtime.Intrinsics.Vector64<System.SByte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ValueTuple<System.Runtime.Intrinsics.Vector64<System.UInt16>,System.Runtime.Intrinsics.Vector64<System.UInt16>> System.Runtime.Intrinsics.Vector64.Widen(System.Runtime.Intrinsics.Vector64<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ValueTuple<System.Runtime.Intrinsics.Vector64<System.UInt32>,System.Runtime.Intrinsics.Vector64<System.UInt32>> System.Runtime.Intrinsics.Vector64.Widen(System.Runtime.Intrinsics.Vector64<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ValueTuple<System.Runtime.Intrinsics.Vector64<System.UInt64>,System.Runtime.Intrinsics.Vector64<System.UInt64>> System.Runtime.Intrinsics.Vector64.Widen(System.Runtime.Intrinsics.Vector64<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ValueTuple<System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>> System.Guid.FormatGuidVector128Utf8(System.Guid,System.Boolean) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd.Arm64 | -| System.ValueTuple<System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>> System.Guid.FormatGuidVector128Utf8(System.Guid,System.Boolean) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Ssse3 | -| System.ValueTuple<System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>> System.HexConverter.AsciiToHexVector128(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd.Arm64 | -| System.ValueTuple<System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>> System.HexConverter.AsciiToHexVector128(System.Runtime.Intrinsics.Vector128<System.Byte>,System.Runtime.Intrinsics.Vector128<System.Byte>) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Ssse3 | -| System.ValueTuple<System.Runtime.Intrinsics.Vector128<System.Int16>,System.Runtime.Intrinsics.Vector128<System.Int16>> System.Runtime.Intrinsics.Vector128.Widen(System.Runtime.Intrinsics.Vector128<System.SByte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ValueTuple<System.Runtime.Intrinsics.Vector128<System.UInt16>,System.Runtime.Intrinsics.Vector128<System.UInt16>> System.Runtime.Intrinsics.Vector128.Widen(System.Runtime.Intrinsics.Vector128<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ValueTuple<System.Runtime.Intrinsics.Vector128<System.UInt32>,System.Runtime.Intrinsics.Vector128<System.UInt32>> System.Runtime.Intrinsics.Vector128.Widen(System.Runtime.Intrinsics.Vector128<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ValueTuple<System.Runtime.Intrinsics.Vector128<System.UInt64>,System.Runtime.Intrinsics.Vector128<System.UInt64>> System.Runtime.Intrinsics.Vector128.Widen(System.Runtime.Intrinsics.Vector128<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ValueTuple<System.Runtime.Intrinsics.Vector256<System.Int16>,System.Runtime.Intrinsics.Vector256<System.Int16>> System.Runtime.Intrinsics.Vector256.Widen(System.Runtime.Intrinsics.Vector256<System.SByte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ValueTuple<System.Runtime.Intrinsics.Vector256<System.UInt16>,System.Runtime.Intrinsics.Vector256<System.UInt16>> System.Runtime.Intrinsics.Vector256.Widen(System.Runtime.Intrinsics.Vector256<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ValueTuple<System.Runtime.Intrinsics.Vector256<System.UInt32>,System.Runtime.Intrinsics.Vector256<System.UInt32>> System.Runtime.Intrinsics.Vector256.Widen(System.Runtime.Intrinsics.Vector256<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ValueTuple<System.Runtime.Intrinsics.Vector256<System.UInt64>,System.Runtime.Intrinsics.Vector256<System.UInt64>> System.Runtime.Intrinsics.Vector256.Widen(System.Runtime.Intrinsics.Vector256<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ValueTuple<System.Runtime.Intrinsics.Vector512<System.Int16>,System.Runtime.Intrinsics.Vector512<System.Int16>> System.Runtime.Intrinsics.Vector512.Widen(System.Runtime.Intrinsics.Vector512<System.SByte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ValueTuple<System.Runtime.Intrinsics.Vector512<System.UInt16>,System.Runtime.Intrinsics.Vector512<System.UInt16>> System.Runtime.Intrinsics.Vector512.Widen(System.Runtime.Intrinsics.Vector512<System.Byte>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ValueTuple<System.Runtime.Intrinsics.Vector512<System.UInt32>,System.Runtime.Intrinsics.Vector512<System.UInt32>> System.Runtime.Intrinsics.Vector512.Widen(System.Runtime.Intrinsics.Vector512<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ValueTuple<System.Runtime.Intrinsics.Vector512<System.UInt64>,System.Runtime.Intrinsics.Vector512<System.UInt64>> System.Runtime.Intrinsics.Vector512.Widen(System.Runtime.Intrinsics.Vector512<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ValueTuple<System.SByte,System.SByte> System.Math.DivRem(System.SByte,System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ValueTuple<System.UInt16,System.UInt16> System.Math.DivRem(System.UInt16,System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ValueTuple<System.UInt32,System.UInt32> System.Math.DivRem(System.UInt32,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ValueTuple<System.UInt32,System.UInt32> System.Runtime.Intrinsics.X86.X86Base.DivRem(System.UInt32,System.UInt32,System.UInt32) | [RequiresPreviewFeaturesAttribute(...)] | 0 | DivRem is in preview. | -| System.ValueTuple<System.UInt64,System.UInt64> System.Math.DivRem(System.UInt64,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ValueTuple<System.UInt64,System.UInt64> System.Runtime.Intrinsics.X86.X86Base.X64.DivRem(System.UInt64,System.UInt64,System.UInt64) | [RequiresPreviewFeaturesAttribute(...)] | 0 | DivRem is in preview. | -| System.ValueTuple<System.UIntPtr,System.UIntPtr> System.Math.DivRem(System.UIntPtr,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.ValueTuple<System.UIntPtr,System.UIntPtr> System.Runtime.Intrinsics.X86.X86Base.DivRem(System.UIntPtr,System.UIntPtr,System.UIntPtr) | [RequiresPreviewFeaturesAttribute(...)] | 0 | DivRem is in preview. | -| System.ValueTuple`1 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.ValueTuple`1.Item1 | [NullableAttribute(...)] | 0 | 1 | -| System.ValueTuple`2 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.ValueTuple`2.Item1 | [NullableAttribute(...)] | 0 | 1 | -| System.ValueTuple`2.Item2 | [NullableAttribute(...)] | 0 | 1 | -| System.ValueTuple`3 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.ValueTuple`3.Item1 | [NullableAttribute(...)] | 0 | 1 | -| System.ValueTuple`3.Item2 | [NullableAttribute(...)] | 0 | 1 | -| System.ValueTuple`3.Item3 | [NullableAttribute(...)] | 0 | 1 | -| System.ValueTuple`4 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.ValueTuple`4.Item1 | [NullableAttribute(...)] | 0 | 1 | -| System.ValueTuple`4.Item2 | [NullableAttribute(...)] | 0 | 1 | -| System.ValueTuple`4.Item3 | [NullableAttribute(...)] | 0 | 1 | -| System.ValueTuple`4.Item4 | [NullableAttribute(...)] | 0 | 1 | -| System.ValueTuple`5 | [NullableAttribute(...)] | 0 | 0 | -| System.ValueTuple`5 | [NullableContextAttribute(...)] | 0 | 1 | -| System.ValueTuple`5 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.ValueTuple`6 | [NullableAttribute(...)] | 0 | 0 | -| System.ValueTuple`6 | [NullableContextAttribute(...)] | 0 | 1 | -| System.ValueTuple`6 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.ValueTuple`7 | [NullableAttribute(...)] | 0 | 0 | -| System.ValueTuple`7 | [NullableContextAttribute(...)] | 0 | 1 | -| System.ValueTuple`7 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.ValueTuple`8 | [NullableAttribute(...)] | 0 | 0 | -| System.ValueTuple`8 | [NullableContextAttribute(...)] | 0 | 1 | -| System.ValueTuple`8 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.ValueTuple`8.Rest | [NullableAttribute(...)] | 0 | 0 | -| System.ValueType | [NullableAttribute(...)] | 0 | 0 | -| System.ValueType | [NullableContextAttribute(...)] | 0 | 2 | -| System.ValueType | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Version | [NotNullWhenAttribute(...)] | 0 | True | -| System.Version | [NullableAttribute(...)] | 0 | 2 | -| System.Version | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Version System.Version.Parse(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void Internal.Console.Error.Write(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void Internal.Console.Write(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void Internal.Console.WriteLine(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void Internal.Runtime.InteropServices.ComponentActivator.<LoadAssembly>g__LoadAssemblyLocal\|14_0(System.String) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void Internal.Runtime.InteropServices.ComponentActivator.<LoadAssembly>g__LoadAssemblyLocal\|14_0(System.String) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Void Internal.Runtime.InteropServices.ComponentActivator.<LoadAssemblyBytes>g__LoadAssemblyBytesLocal\|16_0(System.ReadOnlySpan<System.Byte>,System.ReadOnlySpan<System.Byte>) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void Internal.Runtime.InteropServices.ComponentActivator.<LoadAssemblyBytes>g__LoadAssemblyBytesLocal\|16_0(System.ReadOnlySpan<System.Byte>,System.ReadOnlySpan<System.Byte>) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Void Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyImpl(System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Native hosting is not trim compatible and this warning will be seen if trimming is enabled. | -| System.Void Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyImpl(System.String) | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.Void Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyImpl(System.String) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Void Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyImpl(System.String) | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Void Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyImpl(System.String) | [UnsupportedOSPlatformAttribute(...)] | 0 | maccatalyst | -| System.Void Internal.Runtime.InteropServices.ComponentActivator.LoadAssemblyImpl(System.String) | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.Void Internal.Runtime.InteropServices.IsolatedComponentLoadContext..ctor(System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | The trimmer might remove assemblies that are loaded by this class | -| System.Void Interop.Globalization.ChangeCase(System.Char*,System.Int32,System.Char*,System.Int32,System.Boolean) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Void Interop.Globalization.ChangeCase(System.Char*,System.Int32,System.Char*,System.Int32,System.Boolean) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Void Interop.Globalization.ChangeCaseInvariant(System.Char*,System.Int32,System.Char*,System.Int32,System.Boolean) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Void Interop.Globalization.ChangeCaseInvariant(System.Char*,System.Int32,System.Char*,System.Int32,System.Boolean) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Void Interop.Globalization.ChangeCaseTurkish(System.Char*,System.Int32,System.Char*,System.Int32,System.Boolean) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Void Interop.Globalization.ChangeCaseTurkish(System.Char*,System.Int32,System.Char*,System.Int32,System.Boolean) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Void Interop.Globalization.CloseSortHandle(System.IntPtr) | [LibraryImportAttribute(...)] | 0 | libSystem.Globalization.Native | -| System.Void Interop.Globalization.InitICUFunctions(System.IntPtr,System.IntPtr,System.String,System.String) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Void Interop.Globalization.InitICUFunctions(System.IntPtr,System.IntPtr,System.String,System.String) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Void System.AccessViolationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.AccessViolationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.AccessViolationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Action`1.Invoke(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Action`2.Invoke(!0,!1) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Action`3.Invoke(!0,!1,!2) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Action`4..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`4.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`4.Invoke(!0,!1,!2,!3) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Action`5..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`5.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`5.Invoke(!0,!1,!2,!3,!4) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Action`6..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`6.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`6.Invoke(!0,!1,!2,!3,!4,!5) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Action`7..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`7.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`7.Invoke(!0,!1,!2,!3,!4,!5,!6) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Action`8..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`8.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`8.Invoke(!0,!1,!2,!3,!4,!5,!6,!7) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Action`9..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`9.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`9.Invoke(!0,!1,!2,!3,!4,!5,!6,!7,!8) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Action`10..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`10.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`10.Invoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Action`11..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`11.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`11.Invoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Action`12..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`12.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`12.Invoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Action`13..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`13.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`13.Invoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Action`14..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`14.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`14.Invoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Action`15..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`15.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`15.Invoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Action`16..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`16.EndInvoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Action`16.Invoke(!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,!15) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.AggregateException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.AggregateException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.AggregateException..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.AggregateException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.AggregateException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.AppDomain.AppendPrivatePath(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.AppDomain.AppendPrivatePath(System.String) | [ObsoleteAttribute(...)] | 0 | AppDomain.AppendPrivatePath has been deprecated and is not supported. | -| System.Void System.AppDomain.ClearPrivatePath() | [ObsoleteAttribute(...)] | 0 | AppDomain.ClearPrivatePath has been deprecated and is not supported. | -| System.Void System.AppDomain.ClearShadowCopyPath() | [ObsoleteAttribute(...)] | 0 | AppDomain.ClearShadowCopyPath has been deprecated and is not supported. | -| System.Void System.AppDomain.SetCachePath(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.AppDomain.SetCachePath(System.String) | [ObsoleteAttribute(...)] | 0 | AppDomain.SetCachePath has been deprecated and is not supported. | -| System.Void System.AppDomain.SetDynamicBase(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.AppDomain.SetDynamicBase(System.String) | [ObsoleteAttribute(...)] | 0 | AppDomain.SetDynamicBase has been deprecated and is not supported. | -| System.Void System.AppDomain.SetShadowCopyFiles() | [ObsoleteAttribute(...)] | 0 | AppDomain.SetShadowCopyFiles has been deprecated and is not supported. | -| System.Void System.AppDomain.SetShadowCopyPath(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.AppDomain.SetShadowCopyPath(System.String) | [ObsoleteAttribute(...)] | 0 | AppDomain.SetShadowCopyPath has been deprecated and is not supported. | -| System.Void System.AppDomain.Unload(System.AppDomain) | [ObsoleteAttribute(...)] | 0 | Creating and unloading AppDomains is not supported and throws an exception. | -| System.Void System.AppDomain.add_AssemblyLoad(System.AssemblyLoadEventHandler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.AppDomain.add_AssemblyResolve(System.ResolveEventHandler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.AppDomain.add_DomainUnload(System.EventHandler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.AppDomain.add_ProcessExit(System.EventHandler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.AppDomain.add_ReflectionOnlyAssemblyResolve(System.ResolveEventHandler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.AppDomain.add_ResourceResolve(System.ResolveEventHandler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.AppDomain.add_TypeResolve(System.ResolveEventHandler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.AppDomain.add_UnhandledException(System.UnhandledExceptionEventHandler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.AppDomain.remove_AssemblyLoad(System.AssemblyLoadEventHandler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.AppDomain.remove_AssemblyResolve(System.ResolveEventHandler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.AppDomain.remove_DomainUnload(System.EventHandler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.AppDomain.remove_ProcessExit(System.EventHandler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.AppDomain.remove_ReflectionOnlyAssemblyResolve(System.ResolveEventHandler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.AppDomain.remove_ResourceResolve(System.ResolveEventHandler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.AppDomain.remove_TypeResolve(System.ResolveEventHandler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.AppDomain.remove_UnhandledException(System.UnhandledExceptionEventHandler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.AppDomainUnloadedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.AppDomainUnloadedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.AppDomainUnloadedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.ApplicationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.ApplicationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.ApplicationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.ArgIterator..ctor(System.RuntimeArgumentHandle,System.Void*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.ArgumentException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.ArgumentException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.ArgumentException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.ArgumentException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.ArgumentException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.ArgumentException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.ArgumentNullException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.ArgumentNullException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.ArgumentNullException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.ArgumentNullException.ThrowIfNull(System.Void*,System.String) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.ArgumentNullException.ThrowIfNull(System.Void*,System.String) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.ArgumentOutOfRangeException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.ArgumentOutOfRangeException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.ArgumentOutOfRangeException..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.ArgumentOutOfRangeException..ctor(System.String,System.Exception) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.ArgumentOutOfRangeException..ctor(System.String,System.Object,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.ArgumentOutOfRangeException..ctor(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.ArgumentOutOfRangeException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.ArgumentOutOfRangeException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.ArithmeticException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.ArithmeticException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.ArithmeticException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Array.Resize`1(!0[],System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Array.SetValue(System.Object,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Array.SetValue(System.Object,System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Array.SetValue(System.Object,System.Int32,System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Array.SetValue(System.Object,System.Int64) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Array.SetValue(System.Object,System.Int64,System.Int64) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Array.SetValue(System.Object,System.Int64,System.Int64,System.Int64) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Array.Sort(System.Array,System.Array,System.Collections.IComparer) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Array.Sort(System.Array,System.Array,System.Int32,System.Int32,System.Collections.IComparer) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Array.Sort`2(!0[],!1[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Array.Sort`2(!0[],!1[],System.Collections.Generic.IComparer<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Array.Sort`2(!0[],!1[],System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Array.Sort`2(!0[],!1[],System.Int32,System.Int32,System.Collections.Generic.IComparer<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.ArrayTypeMismatchException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.ArrayTypeMismatchException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.ArrayTypeMismatchException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.AssemblyLoadEventHandler.Invoke(System.Object,System.AssemblyLoadEventArgs) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.AsyncCallback.Invoke(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.BadImageFormatException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.BadImageFormatException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.BadImageFormatException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.BadImageFormatException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.BadImageFormatException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.BadImageFormatException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Buffer.MemoryCopy(System.Void*,System.Void*,System.Int64,System.Int64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Buffer.MemoryCopy(System.Void*,System.Void*,System.Int64,System.Int64) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Buffer.MemoryCopy(System.Void*,System.Void*,System.UInt64,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Buffer.MemoryCopy(System.Void*,System.Void*,System.UInt64,System.UInt64) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Buffer.__Memmove(System.Byte*,System.Byte*,System.UIntPtr) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Buffer.__ZeroMemory(System.Void*,System.UIntPtr) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Buffers.ArrayPoolEventSource.BufferAllocated(System.Int32,System.Int32,System.Int32,System.Int32,System.Buffers.ArrayPoolEventSource.BufferAllocatedReason) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Buffers.ArrayPoolEventSource.BufferAllocated(System.Int32,System.Int32,System.Int32,System.Int32,System.Buffers.ArrayPoolEventSource.BufferAllocatedReason) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Buffers.ArrayPoolEventSource.BufferDropped(System.Int32,System.Int32,System.Int32,System.Int32,System.Buffers.ArrayPoolEventSource.BufferDroppedReason) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Buffers.ArrayPoolEventSource.BufferDropped(System.Int32,System.Int32,System.Int32,System.Int32,System.Buffers.ArrayPoolEventSource.BufferDroppedReason) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Void System.Buffers.ArrayPoolEventSource.BufferRented(System.Int32,System.Int32,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Buffers.ArrayPoolEventSource.BufferRented(System.Int32,System.Int32,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Buffers.Binary.BinaryPrimitives.ReverseEndianness(System.ReadOnlySpan<System.UInt16>,System.Span<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Buffers.Binary.BinaryPrimitives.ReverseEndianness(System.ReadOnlySpan<System.UInt32>,System.Span<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Buffers.Binary.BinaryPrimitives.ReverseEndianness(System.ReadOnlySpan<System.UInt64>,System.Span<System.UInt64>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Buffers.Binary.BinaryPrimitives.ReverseEndianness(System.ReadOnlySpan<System.UInt128>,System.Span<System.UInt128>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Buffers.Binary.BinaryPrimitives.ReverseEndianness(System.ReadOnlySpan<System.UIntPtr>,System.Span<System.UIntPtr>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Buffers.Binary.BinaryPrimitives.WriteUInt16BigEndian(System.Span<System.Byte>,System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Buffers.Binary.BinaryPrimitives.WriteUInt16LittleEndian(System.Span<System.Byte>,System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Buffers.Binary.BinaryPrimitives.WriteUInt32BigEndian(System.Span<System.Byte>,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Buffers.Binary.BinaryPrimitives.WriteUInt32LittleEndian(System.Span<System.Byte>,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Buffers.Binary.BinaryPrimitives.WriteUInt64BigEndian(System.Span<System.Byte>,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Buffers.Binary.BinaryPrimitives.WriteUInt64LittleEndian(System.Span<System.Byte>,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Buffers.Binary.BinaryPrimitives.WriteUInt128BigEndian(System.Span<System.Byte>,System.UInt128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Buffers.Binary.BinaryPrimitives.WriteUInt128LittleEndian(System.Span<System.Byte>,System.UInt128) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Buffers.Binary.BinaryPrimitives.WriteUIntPtrBigEndian(System.Span<System.Byte>,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Buffers.Binary.BinaryPrimitives.WriteUIntPtrLittleEndian(System.Span<System.Byte>,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Buffers.MemoryHandle..ctor(System.Void*,System.Runtime.InteropServices.GCHandle,System.Buffers.IPinnable) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Buffers.ReadOnlySpanAction`2.Invoke(System.ReadOnlySpan<!0>,!1) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Buffers.SpanAction`2.Invoke(System.Span<!0>,!1) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Buffers.Text.Base64.Avx2Decode(System.Byte*,System.Byte*,System.Byte*,System.Int32,System.Int32,System.Byte*,System.Byte*) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx2 | -| System.Void System.Buffers.Text.Base64.Avx2Encode(System.Byte*,System.Byte*,System.Byte*,System.Int32,System.Int32,System.Byte*,System.Byte*) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Avx2 | -| System.Void System.Buffers.Text.Base64.Vector128Decode(System.Byte*,System.Byte*,System.Byte*,System.Int32,System.Int32,System.Byte*,System.Byte*) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd.Arm64 | -| System.Void System.Buffers.Text.Base64.Vector128Decode(System.Byte*,System.Byte*,System.Byte*,System.Int32,System.Int32,System.Byte*,System.Byte*) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Ssse3 | -| System.Void System.Buffers.Text.Base64.Vector128Encode(System.Byte*,System.Byte*,System.Byte*,System.Int32,System.Int32,System.Byte*,System.Byte*) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd.Arm64 | -| System.Void System.Buffers.Text.Base64.Vector128Encode(System.Byte*,System.Byte*,System.Byte*,System.Int32,System.Int32,System.Byte*,System.Byte*) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Ssse3 | -| System.Void System.CannotUnloadAppDomainException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.CannotUnloadAppDomainException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.CannotUnloadAppDomainException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.CodeDom.Compiler.IndentedTextWriter.Write(System.Char[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.CodeDom.Compiler.IndentedTextWriter.Write(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.CodeDom.Compiler.IndentedTextWriter.Write(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.CodeDom.Compiler.IndentedTextWriter.Write(System.String,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.CodeDom.Compiler.IndentedTextWriter.WriteLine(System.Char[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.CodeDom.Compiler.IndentedTextWriter.WriteLine(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.CodeDom.Compiler.IndentedTextWriter.WriteLine(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.CodeDom.Compiler.IndentedTextWriter.WriteLine(System.String,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.CodeDom.Compiler.IndentedTextWriter.WriteLine(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.CodeDom.Compiler.IndentedTextWriter.WriteLineNoTabs(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Collections.ArrayList.Insert(System.Int32,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Collections.ArrayList.Remove(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Collections.ArrayList.Sort(System.Collections.IComparer) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Collections.ArrayList.Sort(System.Int32,System.Int32,System.Collections.IComparer) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Collections.ArrayList.set_Item(System.Int32,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Collections.Comparer.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Collections.Comparer.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Collections.DictionaryEntry.Deconstruct(System.Object,System.Object) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Collections.DictionaryEntry.set_Value(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Collections.Generic.Dictionary`2..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Collections.Generic.Dictionary`2..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Collections.Generic.Dictionary`2.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Collections.Generic.Dictionary`2.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Collections.Generic.Dictionary`2.KeyCollection..ctor(System.Collections.Generic.Dictionary<!0,!1>) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Collections.Generic.Dictionary`2.KeyCollection.CopyTo(!0[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Collections.Generic.Dictionary`2.OnDeserialization(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Collections.Generic.Dictionary`2.ValueCollection..ctor(System.Collections.Generic.Dictionary<!0,!1>) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Collections.Generic.Dictionary`2.ValueCollection.CopyTo(!1[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Collections.Generic.EnumEqualityComparer`1.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Collections.Generic.HashSet`1..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Collections.Generic.HashSet`1..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Collections.Generic.HashSet`1.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Collections.Generic.HashSet`1.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Collections.Generic.HashSet`1.OnDeserialization(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Collections.Generic.KeyNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Collections.Generic.KeyNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Collections.Generic.KeyNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Collections.Generic.KeyValuePair`2.Deconstruct(!0,!1) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Collections.Generic.NonRandomizedStringEqualityComparer..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Collections.Generic.NonRandomizedStringEqualityComparer..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Collections.Generic.NonRandomizedStringEqualityComparer..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Collections.Generic.NullableComparer`1.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Collections.Generic.NullableEqualityComparer`1.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Collections.Hashtable..ctor(System.Collections.IDictionary,System.Collections.IHashCodeProvider,System.Collections.IComparer) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Collections.Hashtable..ctor(System.Collections.IDictionary,System.Collections.IHashCodeProvider,System.Collections.IComparer) | [ObsoleteAttribute(...)] | 0 | This constructor has been deprecated. Use Hashtable(IDictionary, IEqualityComparer) instead. | -| System.Void System.Collections.Hashtable..ctor(System.Collections.IDictionary,System.Single,System.Collections.IHashCodeProvider,System.Collections.IComparer) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Collections.Hashtable..ctor(System.Collections.IDictionary,System.Single,System.Collections.IHashCodeProvider,System.Collections.IComparer) | [ObsoleteAttribute(...)] | 0 | This constructor has been deprecated. Use Hashtable(IDictionary, float, IEqualityComparer) instead. | -| System.Void System.Collections.Hashtable..ctor(System.Collections.IEqualityComparer) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Collections.Hashtable..ctor(System.Collections.IHashCodeProvider,System.Collections.IComparer) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Collections.Hashtable..ctor(System.Collections.IHashCodeProvider,System.Collections.IComparer) | [ObsoleteAttribute(...)] | 0 | This constructor has been deprecated. Use Hashtable(IEqualityComparer) instead. | -| System.Void System.Collections.Hashtable..ctor(System.Int32,System.Collections.IEqualityComparer) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Collections.Hashtable..ctor(System.Int32,System.Collections.IHashCodeProvider,System.Collections.IComparer) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Collections.Hashtable..ctor(System.Int32,System.Collections.IHashCodeProvider,System.Collections.IComparer) | [ObsoleteAttribute(...)] | 0 | This constructor has been deprecated. Use Hashtable(int, IEqualityComparer) instead. | -| System.Void System.Collections.Hashtable..ctor(System.Int32,System.Single,System.Collections.IEqualityComparer) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Collections.Hashtable..ctor(System.Int32,System.Single,System.Collections.IHashCodeProvider,System.Collections.IComparer) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Collections.Hashtable..ctor(System.Int32,System.Single,System.Collections.IHashCodeProvider,System.Collections.IComparer) | [ObsoleteAttribute(...)] | 0 | This constructor has been deprecated. Use Hashtable(int, float, IEqualityComparer) instead. | -| System.Void System.Collections.Hashtable..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Collections.Hashtable..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Collections.Hashtable.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Collections.Hashtable.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Collections.Hashtable.OnDeserialization(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Collections.Hashtable.SyncHashtable.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Collections.Hashtable.set_comparer(System.Collections.IComparer) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Collections.Hashtable.set_hcp(System.Collections.IHashCodeProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Collections.ObjectModel.ReadOnlyDictionary`2.ValueCollection.CopyTo(!1[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.ComAwareWeakReference.ComWeakRefToObject(System.IntPtr,System.Int64,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.ComponentModel.DefaultValueAttribute..ctor(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.ComponentModel.DefaultValueAttribute..ctor(System.Type,System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.ComponentModel.DefaultValueAttribute..ctor(System.Type,System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Generic TypeConverters may require the generic types to be annotated. For example, NullableConverter requires the underlying type to be DynamicallyAccessedMembers All. | -| System.Void System.ComponentModel.DefaultValueAttribute..ctor(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.ComponentModel.DefaultValueAttribute..ctor(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.ComponentModel.DefaultValueAttribute..ctor(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.ComponentModel.Win32Exception..ctor(System.Int32,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.ComponentModel.Win32Exception..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.ComponentModel.Win32Exception..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.ComponentModel.Win32Exception..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.ComponentModel.Win32Exception..ctor(System.String,System.Exception) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.ComponentModel.Win32Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.ComponentModel.Win32Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Console.Beep() | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.Void System.Console.Beep() | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Void System.Console.Beep() | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Void System.Console.Beep() | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.Void System.Console.Beep(System.Int32,System.Int32) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.Console.Clear() | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.Void System.Console.Clear() | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Void System.Console.Clear() | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.Void System.Console.MoveBufferArea(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.Console.MoveBufferArea(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Char,System.ConsoleColor,System.ConsoleColor) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.Console.ResetColor() | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.Void System.Console.ResetColor() | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Void System.Console.ResetColor() | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Void System.Console.ResetColor() | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.Void System.Console.SetBufferSize(System.Int32,System.Int32) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.Console.SetCursorPosition(System.Int32,System.Int32) | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.Void System.Console.SetCursorPosition(System.Int32,System.Int32) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Void System.Console.SetCursorPosition(System.Int32,System.Int32) | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Void System.Console.SetCursorPosition(System.Int32,System.Int32) | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.Void System.Console.SetIn(System.IO.TextReader) | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.Void System.Console.SetIn(System.IO.TextReader) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Void System.Console.SetIn(System.IO.TextReader) | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Void System.Console.SetIn(System.IO.TextReader) | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.Void System.Console.SetWindowPosition(System.Int32,System.Int32) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.Console.SetWindowSize(System.Int32,System.Int32) | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.Void System.Console.SetWindowSize(System.Int32,System.Int32) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Void System.Console.SetWindowSize(System.Int32,System.Int32) | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Void System.Console.SetWindowSize(System.Int32,System.Int32) | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.Void System.Console.Write(System.Char[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Console.Write(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Console.Write(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Console.Write(System.String,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Console.Write(System.String,System.Object,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Console.Write(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Console.Write(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Console.WriteLine(System.Char[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Console.WriteLine(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Console.WriteLine(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Console.WriteLine(System.String,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Console.WriteLine(System.String,System.Object,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Console.WriteLine(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Console.WriteLine(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Console.add_CancelKeyPress(System.ConsoleCancelEventHandler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Console.remove_CancelKeyPress(System.ConsoleCancelEventHandler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Console.set_BufferHeight(System.Int32) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.Console.set_BufferWidth(System.Int32) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.Console.set_CursorSize(System.Int32) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.Console.set_CursorVisible(System.Boolean) | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.Void System.Console.set_CursorVisible(System.Boolean) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Void System.Console.set_CursorVisible(System.Boolean) | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Void System.Console.set_CursorVisible(System.Boolean) | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.Void System.Console.set_OutputEncoding(System.Text.Encoding) | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.Void System.Console.set_OutputEncoding(System.Text.Encoding) | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Void System.Console.set_OutputEncoding(System.Text.Encoding) | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.Void System.Console.set_Title(System.String) | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| System.Void System.Console.set_Title(System.String) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Void System.Console.set_Title(System.String) | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Void System.Console.set_Title(System.String) | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.Void System.Console.set_WindowLeft(System.Int32) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.Console.set_WindowTop(System.Int32) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.ConsoleCancelEventHandler.Invoke(System.Object,System.ConsoleCancelEventArgs) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.ContextMarshalException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.ContextMarshalException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.ContextMarshalException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.CultureAwareComparer.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.DBNull.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.DBNull.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.DataMisalignedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.DataMisalignedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.DateOnly..ctor(System.Int32,System.Int32,System.Int32,System.Globalization.Calendar) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.DateOnly.Deconstruct(System.Int32,System.Int32,System.Int32) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.DateTime..ctor(System.Int32,System.Int32,System.Int32,System.Globalization.Calendar) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.DateTime..ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Globalization.Calendar) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.DateTime..ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Globalization.Calendar) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.DateTime..ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Globalization.Calendar,System.DateTimeKind) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.DateTime..ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Globalization.Calendar) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.DateTime..ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Globalization.Calendar,System.DateTimeKind) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.DateTime.Deconstruct(System.DateOnly,System.TimeOnly) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.DateTime.Deconstruct(System.Int32,System.Int32,System.Int32) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.DateTimeOffset..ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Globalization.Calendar,System.TimeSpan) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.DateTimeOffset..ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Globalization.Calendar,System.TimeSpan) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.DateTimeOffset.Deconstruct(System.DateOnly,System.TimeOnly,System.TimeSpan) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Decimal..ctor(System.Int32[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Decimal..ctor(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Decimal..ctor(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Delegate..ctor(System.Object,System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | The target method might be removed | -| System.Void System.Delegate.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Delegate.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute..ctor(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes,System.String,System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute..ctor(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes,System.Type) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute..ctor(System.String,System.String,System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute..ctor(System.String,System.Type) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.CodeAnalysis.ExperimentalAttribute.set_UrlFormat(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Diagnostics.CodeAnalysis.RequiresAssemblyFilesAttribute..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute.set_Url(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute.set_Url(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Diagnostics.CodeAnalysis.SuppressMessageAttribute..ctor(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute..ctor(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.Contracts.Contract.Assert(System.Boolean) | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Void System.Diagnostics.Contracts.Contract.Assert(System.Boolean) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Contracts.Contract.Assert(System.Boolean,System.String) | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Void System.Diagnostics.Contracts.Contract.Assert(System.Boolean,System.String) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Contracts.Contract.Assert(System.Boolean,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Diagnostics.Contracts.Contract.AssertMustUseRewriter(System.Diagnostics.Contracts.ContractFailureKind,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Contracts.Contract.AssertMustUseRewriter(System.Diagnostics.Contracts.ContractFailureKind,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Void System.Diagnostics.Contracts.Contract.Assume(System.Boolean) | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Void System.Diagnostics.Contracts.Contract.Assume(System.Boolean) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Contracts.Contract.Assume(System.Boolean,System.String) | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Void System.Diagnostics.Contracts.Contract.Assume(System.Boolean,System.String) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Contracts.Contract.Assume(System.Boolean,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Diagnostics.Contracts.Contract.EndContractBlock() | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Void System.Diagnostics.Contracts.Contract.Ensures(System.Boolean) | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Void System.Diagnostics.Contracts.Contract.Ensures(System.Boolean,System.String) | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Void System.Diagnostics.Contracts.Contract.Ensures(System.Boolean,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Diagnostics.Contracts.Contract.EnsuresOnThrow`1(System.Boolean) | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Void System.Diagnostics.Contracts.Contract.EnsuresOnThrow`1(System.Boolean) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Diagnostics.Contracts.Contract.EnsuresOnThrow`1(System.Boolean,System.String) | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Void System.Diagnostics.Contracts.Contract.EnsuresOnThrow`1(System.Boolean,System.String) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Diagnostics.Contracts.Contract.Invariant(System.Boolean) | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Void System.Diagnostics.Contracts.Contract.Invariant(System.Boolean,System.String) | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Void System.Diagnostics.Contracts.Contract.Invariant(System.Boolean,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Diagnostics.Contracts.Contract.Requires(System.Boolean) | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Void System.Diagnostics.Contracts.Contract.Requires(System.Boolean,System.String) | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | -| System.Void System.Diagnostics.Contracts.Contract.Requires(System.Boolean,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Diagnostics.Contracts.Contract.Requires`1(System.Boolean) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Diagnostics.Contracts.Contract.Requires`1(System.Boolean,System.String) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Diagnostics.Contracts.ContractException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Diagnostics.Contracts.ContractException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.Contracts.ContractException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.Contracts.ContractException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Diagnostics.Debug.Assert(System.Boolean) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.Assert(System.Boolean,System.Diagnostics.Debug.AssertInterpolatedStringHandler) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.Assert(System.Boolean,System.Diagnostics.Debug.AssertInterpolatedStringHandler,System.Diagnostics.Debug.AssertInterpolatedStringHandler) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.Assert(System.Boolean,System.String) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.Assert(System.Boolean,System.String,System.String) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.Assert(System.Boolean,System.String,System.String,System.Object[]) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.Assert(System.Boolean,System.String,System.String,System.Object[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.Debug.AssertInterpolatedStringHandler.AppendFormatted(System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Diagnostics.Debug.AssertInterpolatedStringHandler.AppendFormatted(System.ReadOnlySpan<System.Char>,System.Int32,System.String) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Diagnostics.Debug.AssertInterpolatedStringHandler.AppendFormatted`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.Debug.AssertInterpolatedStringHandler.AppendFormatted`1(!0,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.Debug.AssertInterpolatedStringHandler.AppendLiteral(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.Debug.Close() | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.Fail(System.String) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.Fail(System.String,System.String) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.Flush() | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.Indent() | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.Print(System.String) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.Print(System.String,System.Object[]) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.Print(System.String,System.Object[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.Debug.Unindent() | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.Write(System.Object) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.Write(System.Object,System.String) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.Write(System.String) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.Write(System.String,System.String) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.WriteIf(System.Boolean,System.Diagnostics.Debug.WriteIfInterpolatedStringHandler) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.WriteIf(System.Boolean,System.Diagnostics.Debug.WriteIfInterpolatedStringHandler,System.String) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.WriteIf(System.Boolean,System.Object) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.WriteIf(System.Boolean,System.Object,System.String) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.WriteIf(System.Boolean,System.String) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.WriteIf(System.Boolean,System.String,System.String) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.WriteIfInterpolatedStringHandler.AppendFormatted(System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Diagnostics.Debug.WriteIfInterpolatedStringHandler.AppendFormatted(System.ReadOnlySpan<System.Char>,System.Int32,System.String) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Diagnostics.Debug.WriteIfInterpolatedStringHandler.AppendFormatted`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.Debug.WriteIfInterpolatedStringHandler.AppendFormatted`1(!0,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.Debug.WriteIfInterpolatedStringHandler.AppendLiteral(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.Debug.WriteLine(System.Object) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.WriteLine(System.Object,System.String) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.WriteLine(System.String) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.WriteLine(System.String,System.Object[]) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.WriteLine(System.String,System.Object[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.Debug.WriteLine(System.String,System.String) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.WriteLineIf(System.Boolean,System.Diagnostics.Debug.WriteIfInterpolatedStringHandler) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.WriteLineIf(System.Boolean,System.Diagnostics.Debug.WriteIfInterpolatedStringHandler,System.String) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.WriteLineIf(System.Boolean,System.Object) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.WriteLineIf(System.Boolean,System.Object,System.String) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.WriteLineIf(System.Boolean,System.String) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Debug.WriteLineIf(System.Boolean,System.String,System.String) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.DebugProvider.FailCore(System.String,System.String,System.String,System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.DebugProvider.WriteCore(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.Debugger.LogInternal(System.Int32,System.String,System.String) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Void System.Diagnostics.Debugger.LogInternal(System.Int32,System.String,System.String) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Void System.Diagnostics.DebuggerTypeProxyAttribute..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.DebuggerTypeProxyAttribute..ctor(System.Type) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.DebuggerVisualizerAttribute..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.DebuggerVisualizerAttribute..ctor(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.DebuggerVisualizerAttribute..ctor(System.String,System.Type) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.DebuggerVisualizerAttribute..ctor(System.Type) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.DebuggerVisualizerAttribute..ctor(System.Type,System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.DebuggerVisualizerAttribute..ctor(System.Type,System.Type) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.StackTrace.ToString(System.Diagnostics.StackTrace.TraceFormat,System.Text.StringBuilder) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.StackTrace.ToString(System.Diagnostics.StackTrace.TraceFormat,System.Text.StringBuilder) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Void System.Diagnostics.Tracing.EventCounter.WritePayload(System.Single,System.Int32) | [DynamicDependencyAttribute(...)] | 0 | 512 | -| System.Void System.Diagnostics.Tracing.EventCounter.WritePayload(System.Single,System.Int32) | [DynamicDependencyAttribute(...)] | 1 | System.Diagnostics.Tracing.CounterPayload | -| System.Void System.Diagnostics.Tracing.EventCounter.WritePayload(System.Single,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventCounter.WritePayload(System.Single,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Void System.Diagnostics.Tracing.EventPipeInternal.DeleteProvider(System.IntPtr) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Diagnostics.Tracing.EventPipeInternal.Disable(System.UInt64) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Diagnostics.Tracing.EventPipeInternal.WriteEventData(System.IntPtr,System.Diagnostics.Tracing.EventProvider.EventData*,System.UInt32,System.Guid*,System.Guid*) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Diagnostics.Tracing.EventSource..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.Tracing.EventSource..ctor(System.String,System.Diagnostics.Tracing.EventSourceSettings) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.Tracing.EventSource..ctor(System.String,System.Diagnostics.Tracing.EventSourceSettings,System.String[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.Tracing.EventSource.AssertValidString(System.Diagnostics.Tracing.EventSource.EventData*) | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Diagnostics.Tracing.EventSource.OnEventCommand(System.Diagnostics.Tracing.EventCommandEventArgs) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.Tracing.EventSource.SendCommand(System.Diagnostics.Tracing.EventSource,System.Diagnostics.Tracing.EventCommand,System.Collections.Generic.IDictionary<System.String,System.String>) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.Tracing.EventSource.Write(System.String) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.Write(System.String) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.EventSource.Write(System.String,System.Diagnostics.Tracing.EventSourceOptions) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.Write(System.String,System.Diagnostics.Tracing.EventSourceOptions) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Byte[]) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Byte[]) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Diagnostics.Tracing.EventSource.EventSourcePrimitive[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Diagnostics.Tracing.EventSource.EventSourcePrimitive[]) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Diagnostics.Tracing.EventSource.EventSourcePrimitive[]) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int32,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int32,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int32,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int32,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int64) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int64) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int64,System.Byte[]) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int64,System.Byte[]) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int64,System.Int64) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int64,System.Int64) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int64,System.Int64,System.Int64) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int64,System.Int64,System.Int64) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int64,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Int64,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Object[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | EventSource will serialize the whole object graph. Trimmer will not safely handle this case because properties may be trimmed. | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Object[]) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.Object[]) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2112:ReflectionToRequiresUnreferencedCode | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.String,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.String,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.String,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.String,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.String,System.Int64) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.String,System.Int64) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.String,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.String,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.String,System.String,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEvent(System.Int32,System.String,System.String,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEventCore(System.Int32,System.Int32,System.Diagnostics.Tracing.EventSource.EventData*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEventCore(System.Int32,System.Int32,System.Diagnostics.Tracing.EventSource.EventData*) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEventCore(System.Int32,System.Int32,System.Diagnostics.Tracing.EventSource.EventData*) | [RequiresUnreferencedCodeAttribute(...)] | 0 | EventSource will serialize the whole object graph. Trimmer will not safely handle this case because properties may be trimmed. | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEventCore(System.Int32,System.Int32,System.Diagnostics.Tracing.EventSource.EventData*) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEventCore(System.Int32,System.Int32,System.Diagnostics.Tracing.EventSource.EventData*) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2112:ReflectionToRequiresUnreferencedCode | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEventVarargs(System.Int32,System.Guid*,System.Object[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | EventSource will serialize the whole object graph. Trimmer will not safely handle this case because properties may be trimmed. | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEventVarargs(System.Int32,System.Guid*,System.Object[]) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEventVarargs(System.Int32,System.Guid*,System.Object[]) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2112:ReflectionToRequiresUnreferencedCode | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEventWithRelatedActivityId(System.Int32,System.Guid,System.Object[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | EventSource will serialize the whole object graph. Trimmer will not safely handle this case because properties may be trimmed. | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEventWithRelatedActivityId(System.Int32,System.Guid,System.Object[]) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEventWithRelatedActivityId(System.Int32,System.Guid,System.Object[]) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2112:ReflectionToRequiresUnreferencedCode | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEventWithRelatedActivityIdCore(System.Int32,System.Guid*,System.Int32,System.Diagnostics.Tracing.EventSource.EventData*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEventWithRelatedActivityIdCore(System.Int32,System.Guid*,System.Int32,System.Diagnostics.Tracing.EventSource.EventData*) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEventWithRelatedActivityIdCore(System.Int32,System.Guid*,System.Int32,System.Diagnostics.Tracing.EventSource.EventData*) | [RequiresUnreferencedCodeAttribute(...)] | 0 | EventSource will serialize the whole object graph. Trimmer will not safely handle this case because properties may be trimmed. | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEventWithRelatedActivityIdCore(System.Int32,System.Guid*,System.Int32,System.Diagnostics.Tracing.EventSource.EventData*) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.WriteEventWithRelatedActivityIdCore(System.Int32,System.Guid*,System.Int32,System.Diagnostics.Tracing.EventSource.EventData*) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2112:ReflectionToRequiresUnreferencedCode | -| System.Void System.Diagnostics.Tracing.EventSource.Write`1(System.String,!0) | [RequiresUnreferencedCodeAttribute(...)] | 0 | EventSource will serialize the whole object graph. Trimmer will not safely handle this case because properties may be trimmed. | -| System.Void System.Diagnostics.Tracing.EventSource.Write`1(System.String,!0) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.Write`1(System.String,!0) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2112:ReflectionToRequiresUnreferencedCode | -| System.Void System.Diagnostics.Tracing.EventSource.Write`1(System.String,System.Diagnostics.Tracing.EventSourceOptions,!0) | [RequiresUnreferencedCodeAttribute(...)] | 0 | EventSource will serialize the whole object graph. Trimmer will not safely handle this case because properties may be trimmed. | -| System.Void System.Diagnostics.Tracing.EventSource.Write`1(System.String,System.Diagnostics.Tracing.EventSourceOptions,!0) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.Write`1(System.String,System.Diagnostics.Tracing.EventSourceOptions,!0) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2112:ReflectionToRequiresUnreferencedCode | -| System.Void System.Diagnostics.Tracing.EventSource.Write`1(System.String,System.Diagnostics.Tracing.EventSourceOptions,System.Guid,System.Guid,!0) | [RequiresUnreferencedCodeAttribute(...)] | 0 | EventSource will serialize the whole object graph. Trimmer will not safely handle this case because properties may be trimmed. | -| System.Void System.Diagnostics.Tracing.EventSource.Write`1(System.String,System.Diagnostics.Tracing.EventSourceOptions,System.Guid,System.Guid,!0) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.EventSource.Write`1(System.String,System.Diagnostics.Tracing.EventSourceOptions,System.Guid,System.Guid,!0) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2112:ReflectionToRequiresUnreferencedCode | -| System.Void System.Diagnostics.Tracing.EventSourceException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.Tracing.EventSourceException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Diagnostics.Tracing.EventSourceException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Diagnostics.Tracing.FrameworkEventSource.WriteEvent(System.Int32,System.Int64,System.Int32,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.FrameworkEventSource.WriteEvent(System.Int32,System.Int64,System.Int32,System.String) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.FrameworkEventSource.WriteEvent(System.Int32,System.Int64,System.Int32,System.String,System.Boolean,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.FrameworkEventSource.WriteEvent(System.Int32,System.Int64,System.Int32,System.String,System.Boolean,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.IncrementingEventCounter.WritePayload(System.Single,System.Int32) | [DynamicDependencyAttribute(...)] | 0 | 512 | -| System.Void System.Diagnostics.Tracing.IncrementingEventCounter.WritePayload(System.Single,System.Int32) | [DynamicDependencyAttribute(...)] | 1 | System.Diagnostics.Tracing.IncrementingCounterPayload | -| System.Void System.Diagnostics.Tracing.IncrementingEventCounter.WritePayload(System.Single,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.IncrementingEventCounter.WritePayload(System.Single,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Void System.Diagnostics.Tracing.IncrementingPollingCounter.WritePayload(System.Single,System.Int32) | [DynamicDependencyAttribute(...)] | 0 | 512 | -| System.Void System.Diagnostics.Tracing.IncrementingPollingCounter.WritePayload(System.Single,System.Int32) | [DynamicDependencyAttribute(...)] | 1 | System.Diagnostics.Tracing.IncrementingCounterPayload | -| System.Void System.Diagnostics.Tracing.IncrementingPollingCounter.WritePayload(System.Single,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.IncrementingPollingCounter.WritePayload(System.Single,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogContentionLockCreated(System.IntPtr,System.IntPtr,System.UInt16) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogContentionStart(System.Diagnostics.Tracing.NativeRuntimeEventSource.ContentionFlagsMap,System.UInt16,System.IntPtr,System.IntPtr,System.UInt64) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogContentionStop(System.Diagnostics.Tracing.NativeRuntimeEventSource.ContentionFlagsMap,System.UInt16,System.Double) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolIODequeue(System.IntPtr,System.IntPtr,System.UInt16) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolIOEnqueue(System.IntPtr,System.IntPtr,System.Boolean,System.UInt16) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolIOEnqueue(System.IntPtr,System.IntPtr,System.Boolean,System.UInt16) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolIOEnqueue(System.IntPtr,System.IntPtr,System.Boolean,System.UInt16) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolIOPack(System.IntPtr,System.IntPtr,System.UInt16) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolMinMaxThreads(System.UInt16,System.UInt16,System.UInt16,System.UInt16,System.UInt16) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolWorkerThreadAdjustmentAdjustment(System.Double,System.UInt32,System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadAdjustmentReasonMap,System.UInt16) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolWorkerThreadAdjustmentSample(System.Double,System.UInt16) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolWorkerThreadAdjustmentStats(System.Double,System.Double,System.Double,System.Double,System.Double,System.Double,System.Double,System.Double,System.Double,System.UInt16,System.UInt16) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolWorkerThreadStart(System.UInt32,System.UInt32,System.UInt16) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolWorkerThreadStop(System.UInt32,System.UInt32,System.UInt16) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolWorkerThreadWait(System.UInt32,System.UInt32,System.UInt16) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Diagnostics.Tracing.NativeRuntimeEventSource.LogThreadPoolWorkingThreadCount(System.UInt32,System.UInt16) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Diagnostics.Tracing.NullableTypeInfo..ctor(System.Type,System.Collections.Generic.List<System.Type>) | [RequiresUnreferencedCodeAttribute(...)] | 0 | EventSource WriteEvent will serialize the whole object graph. Trimmer will not safely handle this case because properties may be trimmed. This can be suppressed if the object is a primitive type | -| System.Void System.Diagnostics.Tracing.NullableTypeInfo.WriteData(System.Diagnostics.Tracing.PropertyValue) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.NullableTypeInfo.WriteData(System.Diagnostics.Tracing.PropertyValue) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2072:UnrecognizedReflectionPattern | -| System.Void System.Diagnostics.Tracing.PollingCounter.WritePayload(System.Single,System.Int32) | [DynamicDependencyAttribute(...)] | 0 | 512 | -| System.Void System.Diagnostics.Tracing.PollingCounter.WritePayload(System.Single,System.Int32) | [DynamicDependencyAttribute(...)] | 1 | System.Diagnostics.Tracing.CounterPayload | -| System.Void System.Diagnostics.Tracing.PollingCounter.WritePayload(System.Single,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Diagnostics.Tracing.PollingCounter.WritePayload(System.Single,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Void System.Diagnostics.Tracing.TraceLoggingEventTypes..ctor(System.String,System.Diagnostics.Tracing.EventTags,System.Reflection.ParameterInfo[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | EventSource WriteEvent will serialize the whole object graph. Trimmer will not safely handle this case because properties may be trimmed. This can be suppressed if the object is a primitive type | -| System.Void System.Diagnostics.Tracing.TraceLoggingEventTypes..ctor(System.String,System.Diagnostics.Tracing.EventTags,System.Type[]) | [RequiresUnreferencedCodeAttribute(...)] | 0 | EventSource WriteEvent will serialize the whole object graph. Trimmer will not safely handle this case because properties may be trimmed. This can be suppressed if the object is a primitive type | -| System.Void System.Diagnostics.Tracing.TypeAnalysis..ctor(System.Type,System.Diagnostics.Tracing.EventDataAttribute,System.Collections.Generic.List<System.Type>) | [RequiresUnreferencedCodeAttribute(...)] | 0 | EventSource WriteEvent will serialize the whole object graph. Trimmer will not safely handle this case because properties may be trimmed. This can be suppressed if the object is a primitive type | -| System.Void System.DivideByZeroException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.DivideByZeroException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.DivideByZeroException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.DllNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.DllNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.DllNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.DuplicateWaitObjectException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.DuplicateWaitObjectException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.DuplicateWaitObjectException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.EntryPointNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.EntryPointNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.EntryPointNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Enum.AssertValidGenerics`2() | [ConditionalAttribute(...)] | 0 | DEBUG | -| System.Void System.Enum.GetEnumValuesAndNames(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.CompilerServices.ObjectHandleOnStack,Interop.BOOL) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Environment.FailFast(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Environment.FailFast(System.String,System.Exception) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Environment._Exit(System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.EventHandler.Invoke(System.Object,System.EventArgs) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.EventHandler`1.Invoke(System.Object,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Exception..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Exception..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Exception..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Exception.GetMessageFromNativeResources(System.Exception.ExceptionMessageKind,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Exception.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.FieldAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.FieldAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.FieldAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.FormatException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.FormatException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.FormatException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Func`5..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Func`6..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Func`7..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Func`8..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Func`9..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Func`10..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Func`11..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Func`12..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Func`13..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Func`14..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Func`15..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Func`16..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Func`17..ctor(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.GC.KeepAlive(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.GC._AddMemoryPressure(System.UInt64) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.GC._Collect(System.Int32,System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.GC._EnumerateConfigurationValues(System.Void*,delegate* unmanaged<Void*,Void*,Void*,GCConfigurationType,Int64,Void>) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.GC._RemoveMemoryPressure(System.UInt64) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.GC._UnregisterFrozenSegment(System.IntPtr) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.GC._WaitForPendingFinalizers() | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Globalization.CompareInfo.InitSort(System.Globalization.CultureInfo) | [MemberNotNullAttribute(...)] | 0 | _sortName | -| System.Void System.Globalization.CultureInfo.set_DefaultThreadCurrentCulture(System.Globalization.CultureInfo) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Globalization.CultureInfo.set_DefaultThreadCurrentUICulture(System.Globalization.CultureInfo) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Globalization.CultureNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Globalization.CultureNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Globalization.CultureNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Globalization.CultureNotFoundException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Globalization.CultureNotFoundException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Globalization.CultureNotFoundException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Globalization.DateTimeFormatInfo.set_Calendar(System.Globalization.Calendar) | [MemberNotNullAttribute(...)] | 0 | calendar | -| System.Void System.Globalization.StringInfo.set_String(System.String) | [MemberNotNullAttribute(...)] | 0 | _str | -| System.Void System.Guid..ctor(System.Byte[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Guid..ctor(System.Int32,System.Int16,System.Int16,System.Byte[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Guid..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Guid..ctor(System.UInt32,System.UInt16,System.UInt16,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte,System.Byte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.HashCode.AddBytes(System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.HexConverter.EncodeToUtf16_Vector128(System.ReadOnlySpan<System.Byte>,System.Span<System.Char>,System.HexConverter.Casing) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.Arm.AdvSimd.Arm64 | -| System.Void System.HexConverter.EncodeToUtf16_Vector128(System.ReadOnlySpan<System.Byte>,System.Span<System.Char>,System.HexConverter.Casing) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Ssse3 | -| System.Void System.IO.BinaryWriter.Write(System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.IO.BinaryWriter.Write(System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.IO.BinaryWriter.Write(System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.IO.BinaryWriter.Write(System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.IO.BinaryWriter.Write(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.IO.BinaryWriter.Write(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.IO.BufferedStream.EnsureBufferAllocated() | [MemberNotNullAttribute(...)] | 0 | _buffer | -| System.Void System.IO.BufferedStream.Write(System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.IO.DirectoryNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.IO.DirectoryNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.IO.DirectoryNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.IO.EndOfStreamException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.IO.EndOfStreamException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.IO.EndOfStreamException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.IO.Enumeration.FileSystemEnumerable`1..ctor(System.String,System.IO.Enumeration.FileSystemEnumerable<!0>.FindTransform,System.IO.EnumerationOptions) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.IO.Enumeration.FileSystemEnumerator`1..ctor(System.String,System.IO.EnumerationOptions) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.IO.File.Decrypt(System.String) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.IO.File.Encrypt(System.String) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.IO.File.SetUnixFileMode(Microsoft.Win32.SafeHandles.SafeFileHandle,System.IO.UnixFileMode) | [UnsupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.IO.File.SetUnixFileMode(System.String,System.IO.UnixFileMode) | [UnsupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.IO.FileInfo.Decrypt() | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.IO.FileInfo.Encrypt() | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.IO.FileLoadException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.IO.FileLoadException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.IO.FileLoadException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.IO.FileLoadException.GetFileLoadExceptionMessage(System.Int32,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.IO.FileLoadException.GetMessageForHR(System.Int32,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.IO.FileLoadException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.IO.FileLoadException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.IO.FileLoadException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.IO.FileNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.IO.FileNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.IO.FileNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.IO.FileNotFoundException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.IO.FileNotFoundException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.IO.FileNotFoundException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.IO.FileStream..ctor(System.IntPtr,System.IO.FileAccess) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.IO.FileStream..ctor(System.IntPtr,System.IO.FileAccess) | [ObsoleteAttribute(...)] | 0 | This constructor has been deprecated. Use FileStream(SafeFileHandle handle, FileAccess access) instead. | -| System.Void System.IO.FileStream..ctor(System.IntPtr,System.IO.FileAccess,System.Boolean) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.IO.FileStream..ctor(System.IntPtr,System.IO.FileAccess,System.Boolean) | [ObsoleteAttribute(...)] | 0 | This constructor has been deprecated. Use FileStream(SafeFileHandle handle, FileAccess access) and optionally make a new SafeFileHandle with ownsHandle=false if needed instead. | -| System.Void System.IO.FileStream..ctor(System.IntPtr,System.IO.FileAccess,System.Boolean,System.Int32) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.IO.FileStream..ctor(System.IntPtr,System.IO.FileAccess,System.Boolean,System.Int32) | [ObsoleteAttribute(...)] | 0 | This constructor has been deprecated. Use FileStream(SafeFileHandle handle, FileAccess access, int bufferSize) and optionally make a new SafeFileHandle with ownsHandle=false if needed instead. | -| System.Void System.IO.FileStream..ctor(System.IntPtr,System.IO.FileAccess,System.Boolean,System.Int32,System.Boolean) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.IO.FileStream..ctor(System.IntPtr,System.IO.FileAccess,System.Boolean,System.Int32,System.Boolean) | [ObsoleteAttribute(...)] | 0 | This constructor has been deprecated. Use FileStream(SafeFileHandle handle, FileAccess access, int bufferSize, bool isAsync) and optionally make a new SafeFileHandle with ownsHandle=false if needed instead. | -| System.Void System.IO.FileStream.Lock(System.Int64,System.Int64) | [UnsupportedOSPlatformAttribute(...)] | 0 | freebsd | -| System.Void System.IO.FileStream.Lock(System.Int64,System.Int64) | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Void System.IO.FileStream.Lock(System.Int64,System.Int64) | [UnsupportedOSPlatformAttribute(...)] | 0 | macos | -| System.Void System.IO.FileStream.Lock(System.Int64,System.Int64) | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.Void System.IO.FileStream.Unlock(System.Int64,System.Int64) | [UnsupportedOSPlatformAttribute(...)] | 0 | freebsd | -| System.Void System.IO.FileStream.Unlock(System.Int64,System.Int64) | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| System.Void System.IO.FileStream.Unlock(System.Int64,System.Int64) | [UnsupportedOSPlatformAttribute(...)] | 0 | macos | -| System.Void System.IO.FileStream.Unlock(System.Int64,System.Int64) | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| System.Void System.IO.FileStream.Write(System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.IO.FileStreamOptions.set_UnixCreateMode(System.Nullable<System.IO.UnixFileMode>) | [UnsupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.IO.FileSystemInfo..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.IO.FileSystemInfo..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.IO.FileSystemInfo.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.IO.FileSystemInfo.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.IO.FileSystemInfo.set_UnixFileMode(System.IO.UnixFileMode) | [UnsupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.IO.IOException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.IO.IOException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.IO.IOException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.IO.InvalidDataException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.IO.MemoryStream.Write(System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.IO.PathTooLongException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.IO.PathTooLongException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.IO.PathTooLongException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.IO.RandomAccess.FlushToDisk(Microsoft.Win32.SafeHandles.SafeFileHandle) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.IO.RandomAccess.SetLength(Microsoft.Win32.SafeHandles.SafeFileHandle,System.Int64) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.IO.RandomAccess.Write(Microsoft.Win32.SafeHandles.SafeFileHandle,System.Collections.Generic.IReadOnlyList<System.ReadOnlyMemory<System.Byte>>,System.Int64) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.IO.Strategies.BufferedFileStreamStrategy.AllocateBuffer() | [MemberNotNullAttribute(...)] | 0 | _buffer | -| System.Void System.IO.Strategies.BufferedFileStreamStrategy.EnsureBufferAllocated() | [MemberNotNullAttribute(...)] | 0 | _buffer | -| System.Void System.IO.Stream.ObjectInvariant() | [ObsoleteAttribute(...)] | 0 | Do not call or override this method. | -| System.Void System.IO.Stream.ReadExactly(System.Span<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.IO.Stream.Write(System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.IO.StreamWriter.Write(System.Char[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.StreamWriter.Write(System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.IO.StreamWriter.Write(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.StreamWriter.Write(System.String,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.StreamWriter.Write(System.String,System.Object,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.StreamWriter.WriteLine(System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.IO.StreamWriter.WriteLine(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.StreamWriter.WriteLine(System.String,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.StreamWriter.WriteLine(System.String,System.Object,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.StringWriter..ctor(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.StringWriter.Write(System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.IO.StringWriter.Write(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.StringWriter.Write(System.Text.StringBuilder) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.StringWriter.WriteLine(System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.IO.StringWriter.WriteLine(System.Text.StringBuilder) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.TextWriter..ctor(System.IFormatProvider) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.TextWriter.Write(System.Char[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.TextWriter.Write(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.TextWriter.Write(System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.IO.TextWriter.Write(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.TextWriter.Write(System.String,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.TextWriter.Write(System.String,System.Object,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.TextWriter.Write(System.Text.StringBuilder) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.TextWriter.Write(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.IO.TextWriter.Write(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.IO.TextWriter.WriteLine(System.Char[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.TextWriter.WriteLine(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.TextWriter.WriteLine(System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.IO.TextWriter.WriteLine(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.TextWriter.WriteLine(System.String,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.TextWriter.WriteLine(System.String,System.Object,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.TextWriter.WriteLine(System.Text.StringBuilder) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.IO.TextWriter.WriteLine(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.IO.TextWriter.WriteLine(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.IO.UnmanagedMemoryAccessor..ctor(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.IO.UnmanagedMemoryAccessor..ctor(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.IO.UnmanagedMemoryAccessor.Initialize(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.IO.UnmanagedMemoryAccessor.Write(System.Int64,System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.IO.UnmanagedMemoryAccessor.Write(System.Int64,System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.IO.UnmanagedMemoryAccessor.Write(System.Int64,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.IO.UnmanagedMemoryAccessor.Write(System.Int64,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.IO.UnmanagedMemoryStream..ctor(System.Byte*,System.Int64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.IO.UnmanagedMemoryStream..ctor(System.Byte*,System.Int64,System.Int64,System.IO.FileAccess) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.IO.UnmanagedMemoryStream..ctor(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.IO.UnmanagedMemoryStream..ctor(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.IO.UnmanagedMemoryStream.Initialize(System.Byte*,System.Int64,System.Int64,System.IO.FileAccess) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.IO.UnmanagedMemoryStream.Initialize(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.IO.UnmanagedMemoryStream.Write(System.Byte[],System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.IndexOutOfRangeException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.InsufficientExecutionStackException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.InsufficientMemoryException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Int128..ctor(System.UInt64,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.IntPtr..ctor(System.Void*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.InvalidCastException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.InvalidCastException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.InvalidCastException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.InvalidOperationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.InvalidOperationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.InvalidOperationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.InvalidProgramException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.InvalidTimeZoneException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.InvalidTimeZoneException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.InvalidTimeZoneException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.MemberAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.MemberAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.MemberAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.MemoryExtensions.CopyTo`1(!0[],System.Memory<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.MemoryExtensions.CopyTo`1(!0[],System.Span<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.MemoryExtensions.Replace`1(System.ReadOnlySpan<!0>,System.Span<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.MemoryExtensions.Replace`1(System.Span<!0>,!0,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.MemoryExtensions.Reverse`1(System.Span<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.MemoryExtensions.Sort`1(System.Span<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.MemoryExtensions.Sort`1(System.Span<!0>,System.Comparison<!0>) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.MemoryExtensions.Sort`2(System.Span<!0>,System.Span<!1>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.MemoryExtensions.Sort`2(System.Span<!0>,System.Span<!1>,System.Comparison<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.MemoryExtensions.Sort`3(System.Span<!0>,System.Span<!1>,!2) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.MethodAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.MethodAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.MethodAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.MissingFieldException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.MissingFieldException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.MissingFieldException..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.MissingFieldException..ctor(System.String,System.Exception) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.MissingFieldException..ctor(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.MissingMemberException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.MissingMemberException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.MissingMemberException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.MissingMemberException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.MissingMemberException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.MissingMemberException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.MissingMethodException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.MissingMethodException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.MissingMethodException..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.MissingMethodException..ctor(System.String,System.Exception) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.MissingMethodException..ctor(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.ModuleHandle.GetModuleType(System.Runtime.CompilerServices.QCallModule,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.ModuleHandle.GetPEKind(System.Runtime.CompilerServices.QCallModule,System.Int32*,System.Int32*) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.ModuleHandle.ResolveField(System.Runtime.CompilerServices.QCallModule,System.Int32,System.IntPtr*,System.Int32,System.IntPtr*,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.ModuleHandle.ResolveType(System.Runtime.CompilerServices.QCallModule,System.Int32,System.IntPtr*,System.Int32,System.IntPtr*,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.MulticastDelegate..ctor(System.Object,System.String) | [RequiresUnreferencedCodeAttribute(...)] | 0 | The target method might be removed | -| System.Void System.MulticastDelegate.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.MulticastDelegate.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.MulticastNotSupportedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Net.WebUtility.HtmlDecode(System.String,System.IO.TextWriter) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Net.WebUtility.HtmlEncode(System.String,System.IO.TextWriter) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.NotFiniteNumberException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.NotFiniteNumberException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.NotFiniteNumberException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.NotFiniteNumberException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.NotFiniteNumberException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.NotFiniteNumberException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.NotImplementedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.NotImplementedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.NotImplementedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.NotSupportedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.NotSupportedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.NotSupportedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.NullReferenceException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.NullReferenceException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.NullReferenceException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Numerics.Vector2.CopyTo(System.Single[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Numerics.Vector2.CopyTo(System.Single[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Numerics.Vector3.CopyTo(System.Single[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Numerics.Vector3.CopyTo(System.Single[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Numerics.Vector4.CopyTo(System.Single[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Numerics.Vector4.CopyTo(System.Single[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Numerics.Vector.StoreAlignedNonTemporal`1(System.Numerics.Vector<!0>,!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Numerics.Vector.StoreAlignedNonTemporal`1(System.Numerics.Vector<!0>,!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Numerics.Vector.StoreAligned`1(System.Numerics.Vector<!0>,!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Numerics.Vector.StoreAligned`1(System.Numerics.Vector<!0>,!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Numerics.Vector.StoreUnsafe`1(System.Numerics.Vector<!0>,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Numerics.Vector.StoreUnsafe`1(System.Numerics.Vector<!0>,!0,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Numerics.Vector.StoreUnsafe`1(System.Numerics.Vector<!0>,!0,System.UIntPtr) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Numerics.Vector.Store`1(System.Numerics.Vector<!0>,!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Numerics.Vector.Store`1(System.Numerics.Vector<!0>,!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Numerics.Vector.Widen(System.Numerics.Vector<System.Byte>,System.Numerics.Vector<System.UInt16>,System.Numerics.Vector<System.UInt16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Numerics.Vector.Widen(System.Numerics.Vector<System.SByte>,System.Numerics.Vector<System.Int16>,System.Numerics.Vector<System.Int16>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Numerics.Vector.Widen(System.Numerics.Vector<System.UInt16>,System.Numerics.Vector<System.UInt32>,System.Numerics.Vector<System.UInt32>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Numerics.Vector.Widen(System.Numerics.Vector<System.UInt32>,System.Numerics.Vector<System.UInt64>,System.Numerics.Vector<System.UInt64>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Numerics.Vector`1..ctor(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Numerics.Vector`1..ctor(!0[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Numerics.Vector`1..ctor(!0[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Numerics.Vector`1.CopyTo(!0[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Numerics.Vector`1.CopyTo(!0[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.ObjectDisposedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.ObjectDisposedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.ObjectDisposedException..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.ObjectDisposedException..ctor(System.String,System.Exception) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.ObjectDisposedException..ctor(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.ObjectDisposedException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.ObjectDisposedException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.OperatingSystem.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.OperatingSystem.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.OperationCanceledException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.OperationCanceledException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.OperationCanceledException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.OutOfMemoryException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.OutOfMemoryException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.OutOfMemoryException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.OverflowException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.OverflowException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.OverflowException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.PlatformNotSupportedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.PlatformNotSupportedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.PlatformNotSupportedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Random.CompatPrng.EnsureInitialized(System.Int32) | [MemberNotNullAttribute(...)] | 0 | _seedArray | -| System.Void System.Random.CompatPrng.Initialize(System.Int32) | [MemberNotNullAttribute(...)] | 0 | _seedArray | -| System.Void System.Random.GetItems`1(System.ReadOnlySpan<!0>,System.Span<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Random.NextBytes(System.Span<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Random.Shuffle`1(System.Span<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.RankException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.RankException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.RankException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.ReadOnlySpan`1..ctor(System.Void*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.ReadOnlySpan`1..ctor(System.Void*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Reflection.AmbiguousMatchException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Reflection.Assembly.GetEntryAssemblyNative(System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.Assembly.GetExecutingAssemblyNative(System.Runtime.CompilerServices.StackCrawlMarkHandle,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.Assembly.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Reflection.Assembly.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Reflection.Assembly.add_ModuleResolve(System.Reflection.ModuleResolveEventHandler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.Assembly.remove_ModuleResolve(System.Reflection.ModuleResolveEventHandler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.AssemblyAlgorithmIdAttribute..ctor(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Reflection.AssemblyFlagsAttribute..ctor(System.Int32) | [ObsoleteAttribute(...)] | 0 | This constructor has been deprecated. Use AssemblyFlagsAttribute(AssemblyNameFlags) instead. | -| System.Void System.Reflection.AssemblyFlagsAttribute..ctor(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Reflection.AssemblyFlagsAttribute..ctor(System.UInt32) | [ObsoleteAttribute(...)] | 0 | This constructor has been deprecated. Use AssemblyFlagsAttribute(AssemblyNameFlags) instead. | -| System.Void System.Reflection.AssemblyName..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Reflection.AssemblyName.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Reflection.AssemblyName.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Reflection.AssemblyName.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Reflection.AssemblyName.InitializeAssemblySpec(System.Reflection.NativeAssemblyNameParts*,System.Void*) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.CustomAttribute.AddCustomAttributes(System.RuntimeType.ListBuilder<System.Object>,System.Reflection.RuntimeModule,System.Int32,System.RuntimeType,System.Boolean,System.RuntimeType.ListBuilder<System.Object>) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Reflection.CustomAttribute.AddCustomAttributes(System.RuntimeType.ListBuilder<System.Object>,System.Reflection.RuntimeModule,System.Int32,System.RuntimeType,System.Boolean,System.RuntimeType.ListBuilder<System.Object>) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2070:MethodParameterDoesntMeetThisParameterRequirements | -| System.Void System.Reflection.CustomAttributeFormatException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Reflection.CustomAttributeFormatException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Reflection.CustomAttributeFormatException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Reflection.Emit.AssemblyBuilder.SetCustomAttributeCore(System.Reflection.ConstructorInfo,System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Reflection.Emit.ConstructorBuilder.SetCustomAttributeCore(System.Reflection.ConstructorInfo,System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Reflection.Emit.DynamicILInfo.SetCode(System.Byte*,System.Int32,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Reflection.Emit.DynamicILInfo.SetCode(System.Byte*,System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Reflection.Emit.DynamicILInfo.SetCode(System.Byte[],System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.Emit.DynamicILInfo.SetExceptions(System.Byte*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Reflection.Emit.DynamicILInfo.SetExceptions(System.Byte*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Reflection.Emit.DynamicILInfo.SetExceptions(System.Byte[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.Emit.DynamicILInfo.SetLocalSignature(System.Byte*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Reflection.Emit.DynamicILInfo.SetLocalSignature(System.Byte*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Reflection.Emit.DynamicILInfo.SetLocalSignature(System.Byte[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.Emit.DynamicMethod..ctor(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Reflection.Module,System.Boolean) | [RequiresDynamicCodeAttribute(...)] | 0 | Creating a DynamicMethod requires dynamic code. | -| System.Void System.Reflection.Emit.DynamicMethod..ctor(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type,System.Boolean) | [RequiresDynamicCodeAttribute(...)] | 0 | Creating a DynamicMethod requires dynamic code. | -| System.Void System.Reflection.Emit.DynamicMethod..ctor(System.String,System.Type,System.Type[]) | [RequiresDynamicCodeAttribute(...)] | 0 | Creating a DynamicMethod requires dynamic code. | -| System.Void System.Reflection.Emit.DynamicMethod..ctor(System.String,System.Type,System.Type[],System.Boolean) | [RequiresDynamicCodeAttribute(...)] | 0 | Creating a DynamicMethod requires dynamic code. | -| System.Void System.Reflection.Emit.DynamicMethod..ctor(System.String,System.Type,System.Type[],System.Reflection.Module) | [RequiresDynamicCodeAttribute(...)] | 0 | Creating a DynamicMethod requires dynamic code. | -| System.Void System.Reflection.Emit.DynamicMethod..ctor(System.String,System.Type,System.Type[],System.Reflection.Module,System.Boolean) | [RequiresDynamicCodeAttribute(...)] | 0 | Creating a DynamicMethod requires dynamic code. | -| System.Void System.Reflection.Emit.DynamicMethod..ctor(System.String,System.Type,System.Type[],System.Type) | [RequiresDynamicCodeAttribute(...)] | 0 | Creating a DynamicMethod requires dynamic code. | -| System.Void System.Reflection.Emit.DynamicMethod..ctor(System.String,System.Type,System.Type[],System.Type,System.Boolean) | [RequiresDynamicCodeAttribute(...)] | 0 | Creating a DynamicMethod requires dynamic code. | -| System.Void System.Reflection.Emit.DynamicMethod.Init(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type,System.Reflection.Module,System.Boolean,System.Boolean) | [MemberNotNullAttribute(...)] | 0 | _module | -| System.Void System.Reflection.Emit.DynamicMethod.Init(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type,System.Reflection.Module,System.Boolean,System.Boolean) | [MemberNotNullAttribute(...)] | 0 | _name | -| System.Void System.Reflection.Emit.DynamicMethod.Init(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type,System.Reflection.Module,System.Boolean,System.Boolean) | [MemberNotNullAttribute(...)] | 0 | _parameterTypes | -| System.Void System.Reflection.Emit.DynamicMethod.Init(System.String,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type,System.Reflection.Module,System.Boolean,System.Boolean) | [MemberNotNullAttribute(...)] | 0 | _returnType | -| System.Void System.Reflection.Emit.EnumBuilder.SetCustomAttributeCore(System.Reflection.ConstructorInfo,System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Reflection.Emit.EventBuilder.SetCustomAttributeCore(System.Reflection.ConstructorInfo,System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Reflection.Emit.FieldBuilder.SetConstant(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.Emit.FieldBuilder.SetConstantCore(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.Emit.FieldBuilder.SetCustomAttribute(System.Reflection.ConstructorInfo,System.Byte[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Reflection.Emit.FieldBuilder.SetCustomAttribute(System.Reflection.Emit.CustomAttributeBuilder) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Reflection.Emit.GenericTypeParameterBuilder.SetBaseTypeConstraint(System.Type) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.Emit.GenericTypeParameterBuilder.SetBaseTypeConstraintCore(System.Type) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.Emit.GenericTypeParameterBuilder.SetCustomAttribute(System.Reflection.ConstructorInfo,System.Byte[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Reflection.Emit.GenericTypeParameterBuilder.SetCustomAttribute(System.Reflection.Emit.CustomAttributeBuilder) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Reflection.Emit.ILGenerator.BeginCatchBlock(System.Type) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.Emit.ILGenerator.Emit(System.Reflection.Emit.OpCode,System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Reflection.Emit.ILGenerator.EmitCalli(System.Reflection.Emit.OpCode,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.Emit.ILGenerator.EmitCalli(System.Reflection.Emit.OpCode,System.Runtime.InteropServices.CallingConvention,System.Type,System.Type[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.Emit.MethodBuilder.SetCustomAttributeCore(System.Reflection.ConstructorInfo,System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Reflection.Emit.MethodBuilder.SetReturnType(System.Type) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.Emit.MethodBuilder.SetSignature(System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.Emit.MethodBuilder.SetSignatureCore(System.Type,System.Type[],System.Type[],System.Type[],System.Type[][],System.Type[][]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.Emit.ModuleBuilder.SetCustomAttributeCore(System.Reflection.ConstructorInfo,System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Reflection.Emit.ParameterBuilder.SetCustomAttribute(System.Reflection.ConstructorInfo,System.Byte[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Reflection.Emit.ParameterBuilder.SetCustomAttribute(System.Reflection.Emit.CustomAttributeBuilder) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Reflection.Emit.ParameterBuilder.SetCustomAttributeCore(System.Reflection.ConstructorInfo,System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Reflection.Emit.PropertyBuilder.SetConstant(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.Emit.PropertyBuilder.SetConstantCore(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.Emit.PropertyBuilder.SetCustomAttributeCore(System.Reflection.ConstructorInfo,System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Reflection.Emit.RuntimeAssemblyBuilder.CreateDynamicAssembly(System.Runtime.CompilerServices.ObjectHandleOnStack,System.Reflection.NativeAssemblyNameParts*,System.Configuration.Assemblies.AssemblyHashAlgorithm,System.Reflection.Emit.AssemblyBuilderAccess,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.Emit.RuntimeEnumBuilder..ctor(System.String,System.Type,System.Reflection.TypeAttributes,System.Reflection.Emit.RuntimeModuleBuilder) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Reflection.Emit.RuntimeEnumBuilder..ctor(System.String,System.Type,System.Reflection.TypeAttributes,System.Reflection.Emit.RuntimeModuleBuilder) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2064:UnrecognizedReflectionPattern | -| System.Void System.Reflection.Emit.RuntimeModuleBuilder.SetFieldRVAContent(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Byte[],System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Void System.Reflection.Emit.RuntimeModuleBuilder.SetFieldRVAContent(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Byte[],System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Void System.Reflection.Emit.RuntimeModuleBuilder.SetFieldRVAContent(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Byte[],System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.AddInterfaceImpl(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.DefineCustomAttribute(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Int32,System.ReadOnlySpan<System.Byte>,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.DefineCustomAttribute(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Int32,System.ReadOnlySpan<System.Byte>,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.DefineCustomAttribute(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Int32,System.ReadOnlySpan<System.Byte>,System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.DefineMethodImpl(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Int32,System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.DefineMethodSemantics(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Reflection.MethodSemanticsAttributes,System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.SetClassLayout(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Reflection.Emit.PackingSize,System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.SetConstantValue(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Int32,System.Void*) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.SetFieldLayoutOffset(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.SetMethodIL(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Boolean,System.Byte[],System.Int32,System.Byte[],System.Int32,System.Int32,System.Reflection.Emit.ExceptionHandler[],System.Int32,System.Int32[],System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.SetMethodIL(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Boolean,System.Byte[],System.Int32,System.Byte[],System.Int32,System.Int32,System.Reflection.Emit.ExceptionHandler[],System.Int32,System.Int32[],System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.SetMethodIL(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Boolean,System.Byte[],System.Int32,System.Byte[],System.Int32,System.Int32,System.Reflection.Emit.ExceptionHandler[],System.Int32,System.Int32[],System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.SetMethodImpl(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Reflection.MethodImplAttributes) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.SetPInvokeData(System.Runtime.CompilerServices.QCallModule,System.String,System.String,System.Int32,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.SetPInvokeData(System.Runtime.CompilerServices.QCallModule,System.String,System.String,System.Int32,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.SetParentType(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.Emit.RuntimeTypeBuilder.TermCreateClass(System.Runtime.CompilerServices.QCallModule,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.Emit.SignatureHelper.Init(System.Reflection.Module) | [MemberNotNullAttribute(...)] | 0 | m_signature | -| System.Void System.Reflection.Emit.SignatureHelper.Init(System.Reflection.Module,System.Reflection.MdSigCallingConvention) | [MemberNotNullAttribute(...)] | 0 | m_signature | -| System.Void System.Reflection.Emit.SignatureHelper.Init(System.Reflection.Module,System.Reflection.MdSigCallingConvention,System.Int32) | [MemberNotNullAttribute(...)] | 0 | m_signature | -| System.Void System.Reflection.Emit.TypeBuilder.SetCustomAttributeCore(System.Reflection.ConstructorInfo,System.ReadOnlySpan<System.Byte>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Reflection.Emit.TypeBuilder.SetParent(System.Type) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.Emit.TypeBuilder.SetParentCore(System.Type) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.FieldInfo.SetValue(System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.FieldInfo.SetValue(System.Object,System.Object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Globalization.CultureInfo) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.FieldInfo.SetValueDirect(System.TypedReference,System.Object) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Reflection.InvalidFilterCriteriaException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Reflection.InvalidFilterCriteriaException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Reflection.InvalidFilterCriteriaException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Reflection.Metadata.MetadataUpdater.ApplyUpdate(System.Runtime.CompilerServices.QCallAssembly,System.Byte*,System.Int32,System.Byte*,System.Int32,System.Byte*,System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.Metadata.RuntimeTypeMetadataUpdateHandler.ClearCache(System.Type[]) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Reflection.Metadata.RuntimeTypeMetadataUpdateHandler.ClearCache(System.Type[]) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Void System.Reflection.Module.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Reflection.Module.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Reflection.ReflectionTypeLoadException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Reflection.ReflectionTypeLoadException..ctor(System.Type[],System.Exception[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.ReflectionTypeLoadException..ctor(System.Type[],System.Exception[],System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Reflection.ReflectionTypeLoadException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Reflection.ReflectionTypeLoadException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Reflection.RuntimeAssembly.AddPublicNestedTypes(System.Type,System.Collections.Generic.List<System.Type>,System.Collections.Generic.List<System.Exception>) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types might be removed because recursive nested types can't currently be annotated for dynamic access. | -| System.Void System.Reflection.RuntimeAssembly.GetEntryPoint(System.Runtime.CompilerServices.QCallAssembly,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.RuntimeAssembly.GetExportedTypes(System.Runtime.CompilerServices.QCallAssembly,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.RuntimeAssembly.GetForwardedType(System.Runtime.CompilerServices.QCallAssembly,System.Reflection.MetadataToken,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.RuntimeAssembly.GetFullName(System.Runtime.CompilerServices.QCallAssembly,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.RuntimeAssembly.GetImageRuntimeVersion(System.Runtime.CompilerServices.QCallAssembly,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.RuntimeAssembly.GetLocale(System.Runtime.CompilerServices.QCallAssembly,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.RuntimeAssembly.GetLocation(System.Runtime.CompilerServices.QCallAssembly,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.RuntimeAssembly.GetModule(System.Runtime.CompilerServices.QCallAssembly,System.String,System.Runtime.CompilerServices.ObjectHandleOnStack) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Void System.Reflection.RuntimeAssembly.GetModule(System.Runtime.CompilerServices.QCallAssembly,System.String,System.Runtime.CompilerServices.ObjectHandleOnStack) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Void System.Reflection.RuntimeAssembly.GetModules(System.Runtime.CompilerServices.QCallAssembly,System.Boolean,System.Boolean,System.Runtime.CompilerServices.ObjectHandleOnStack) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Void System.Reflection.RuntimeAssembly.GetModules(System.Runtime.CompilerServices.QCallAssembly,System.Boolean,System.Boolean,System.Runtime.CompilerServices.ObjectHandleOnStack) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Void System.Reflection.RuntimeAssembly.GetModules(System.Runtime.CompilerServices.QCallAssembly,System.Boolean,System.Boolean,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.RuntimeAssembly.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Reflection.RuntimeAssembly.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Reflection.RuntimeAssembly.GetPublicKey(System.Runtime.CompilerServices.QCallAssembly,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.RuntimeAssembly.GetSimpleName(System.Runtime.CompilerServices.QCallAssembly,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.RuntimeAssembly.GetTypeCore(System.Runtime.CompilerServices.QCallAssembly,System.String,System.ReadOnlySpan<System.String>,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Void System.Reflection.RuntimeAssembly.GetTypeCore(System.Runtime.CompilerServices.QCallAssembly,System.String,System.ReadOnlySpan<System.String>,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Void System.Reflection.RuntimeAssembly.GetTypeCoreIgnoreCase(System.Runtime.CompilerServices.QCallAssembly,System.String,System.ReadOnlySpan<System.String>,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Void System.Reflection.RuntimeAssembly.GetTypeCoreIgnoreCase(System.Runtime.CompilerServices.QCallAssembly,System.String,System.ReadOnlySpan<System.String>,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Void System.Reflection.RuntimeAssembly.GetVersion(System.Runtime.CompilerServices.QCallAssembly,System.Int32,System.Int32,System.Int32,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Void System.Reflection.RuntimeAssembly.GetVersion(System.Runtime.CompilerServices.QCallAssembly,System.Int32,System.Int32,System.Int32,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Void System.Reflection.RuntimeAssembly.GetVersion(System.Runtime.CompilerServices.QCallAssembly,System.Int32,System.Int32,System.Int32,System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.RuntimeAssembly.InternalLoad(System.Reflection.NativeAssemblyNameParts*,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.CompilerServices.StackCrawlMarkHandle,System.Boolean,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.CompilerServices.ObjectHandleOnStack) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Void System.Reflection.RuntimeAssembly.InternalLoad(System.Reflection.NativeAssemblyNameParts*,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.CompilerServices.StackCrawlMarkHandle,System.Boolean,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.CompilerServices.ObjectHandleOnStack) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Void System.Reflection.RuntimeAssembly.InternalLoad(System.Reflection.NativeAssemblyNameParts*,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.CompilerServices.StackCrawlMarkHandle,System.Boolean,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.RuntimeConstructorInfo.InvokeClassConstructor() | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Reflection.RuntimeConstructorInfo.InvokeClassConstructor() | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2059:RunClassConstructor | -| System.Void System.Reflection.RuntimeCustomAttributeData..ctor(System.Reflection.RuntimeModule,System.Reflection.MetadataToken,System.Reflection.ConstArray) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Reflection.RuntimeCustomAttributeData..ctor(System.Reflection.RuntimeModule,System.Reflection.MetadataToken,System.Reflection.ConstArray) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Reflection.RuntimeCustomAttributeData..ctor(System.Reflection.RuntimeModule,System.Reflection.MetadataToken,System.Reflection.ConstArray) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2075:UnrecognizedReflectionPattern | -| System.Void System.Reflection.RuntimeCustomAttributeData.Init(System.Object) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Reflection.RuntimeCustomAttributeData.Init(System.Object) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2075:UnrecognizedReflectionPattern | -| System.Void System.Reflection.RuntimeModule.GetFullyQualifiedName(System.Runtime.CompilerServices.QCallModule,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.RuntimeModule.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Reflection.RuntimeModule.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Reflection.RuntimeModule.GetScopeName(System.Runtime.CompilerServices.QCallModule,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Reflection.StrongNameKeyPair..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Reflection.StrongNameKeyPair..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Reflection.TargetException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Reflection.TargetException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Reflection.TargetException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Reflection.TargetInvocationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Reflection.TargetParameterCountException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Resources.MissingManifestResourceException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Resources.MissingManifestResourceException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Resources.MissingSatelliteAssemblyException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Resources.MissingSatelliteAssemblyException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Resources.MissingSatelliteAssemblyException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Resources.ResourceManager.CommonAssemblyInit() | [MemberNotNullAttribute(...)] | 0 | _resourceGroveler | -| System.Void System.Resources.ResourceReader..ctor(System.IO.Stream) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Resources.ResourceReader..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Resources.ResourceReader.GetResourceData(System.String,System.String,System.Byte[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Resources.ResourceReader.ReadResources() | [MemberNotNullAttribute(...)] | 0 | _typeNamePositions | -| System.Void System.Resources.ResourceReader.ReadResources() | [MemberNotNullAttribute(...)] | 0 | _typeTable | -| System.Void System.Resources.ResourceReader._ReadResources() | [MemberNotNullAttribute(...)] | 0 | _typeNamePositions | -| System.Void System.Resources.ResourceReader._ReadResources() | [MemberNotNullAttribute(...)] | 0 | _typeTable | -| System.Void System.Runtime.AmbiguousImplementationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Runtime.CompilerServices.AsyncIteratorStateMachineAttribute..ctor(System.Type) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.AsyncStateMachineAttribute..ctor(System.Type) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.OnCompleted(System.Action) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.UnsafeOnCompleted(System.Action) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.OnCompleted(System.Action) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.UnsafeOnCompleted(System.Action) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable.ConfiguredValueTaskAwaiter.OnCompleted(System.Action) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable.ConfiguredValueTaskAwaiter.UnsafeOnCompleted(System.Action) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter.OnCompleted(System.Action) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter.UnsafeOnCompleted(System.Action) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.DecimalConstantAttribute..ctor(System.Byte,System.Byte,System.UInt32,System.UInt32,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.CompilerServices.DefaultInterpolatedStringHandler..ctor(System.Int32,System.Int32,System.IFormatProvider,System.Span<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Runtime.CompilerServices.DefaultInterpolatedStringHandler.AppendFormatted(System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Runtime.CompilerServices.DefaultInterpolatedStringHandler.AppendFormatted(System.ReadOnlySpan<System.Char>,System.Int32,System.String) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Runtime.CompilerServices.DefaultInterpolatedStringHandler.AppendFormatted`1(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.DefaultInterpolatedStringHandler.AppendFormatted`1(!0,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.DefaultInterpolatedStringHandler.AppendLiteral(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.ICriticalNotifyCompletion.UnsafeOnCompleted(System.Action) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.IndexerNameAttribute..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.IteratorStateMachineAttribute..ctor(System.Type) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.CleanupCode.Invoke(System.Object,System.Boolean) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.CompileMethod(System.RuntimeMethodHandleInternal) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(System.Runtime.CompilerServices.RuntimeHelpers.TryCode,System.Runtime.CompilerServices.RuntimeHelpers.CleanupCode,System.Object) | [ObsoleteAttribute(...)] | 0 | The Constrained Execution Region (CER) feature is not supported. | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.GetUninitializedObject(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.PrepareConstrainedRegions() | [ObsoleteAttribute(...)] | 0 | The Constrained Execution Region (CER) feature is not supported. | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.PrepareConstrainedRegionsNoOP() | [ObsoleteAttribute(...)] | 0 | The Constrained Execution Region (CER) feature is not supported. | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.PrepareContractedDelegate(System.Delegate) | [ObsoleteAttribute(...)] | 0 | The Constrained Execution Region (CER) feature is not supported. | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.PrepareMethod(System.RuntimeMethodHandle,System.RuntimeTypeHandle[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.PrepareMethod(System.RuntimeMethodHandleInternal,System.IntPtr*,System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.ProbeForSufficientStack() | [ObsoleteAttribute(...)] | 0 | The Constrained Execution Region (CER) feature is not supported. | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(System.Runtime.CompilerServices.QCallTypeHandle) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(System.RuntimeTypeHandle) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Trimmer can't guarantee existence of class constructor | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.RunModuleConstructor(System.Runtime.CompilerServices.QCallModule) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Runtime.CompilerServices.RuntimeHelpers.TryCode.Invoke(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.CompilerServices.RuntimeWrappedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Runtime.CompilerServices.RuntimeWrappedException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.RuntimeWrappedException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Runtime.CompilerServices.StrongBox`1..ctor(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.SwitchExpressionException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Runtime.CompilerServices.SwitchExpressionException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.SwitchExpressionException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.SwitchExpressionException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Runtime.CompilerServices.TaskAwaiter.OnCompleted(System.Action) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.TaskAwaiter.UnsafeOnCompleted(System.Action) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.TaskAwaiter`1.OnCompleted(System.Action) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.TaskAwaiter`1.UnsafeOnCompleted(System.Action) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.Unsafe.CopyBlock(System.Byte,System.Byte,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.CompilerServices.Unsafe.CopyBlock(System.Void*,System.Void*,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.CompilerServices.Unsafe.CopyBlock(System.Void*,System.Void*,System.UInt32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Runtime.CompilerServices.Unsafe.CopyBlockUnaligned(System.Byte,System.Byte,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.CompilerServices.Unsafe.CopyBlockUnaligned(System.Void*,System.Void*,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.CompilerServices.Unsafe.CopyBlockUnaligned(System.Void*,System.Void*,System.UInt32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Runtime.CompilerServices.Unsafe.Copy`1(!0,System.Void*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.CompilerServices.Unsafe.Copy`1(!0,System.Void*) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Runtime.CompilerServices.Unsafe.Copy`1(System.Void*,!0) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.CompilerServices.Unsafe.Copy`1(System.Void*,!0) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Runtime.CompilerServices.Unsafe.InitBlock(System.Byte,System.Byte,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.CompilerServices.Unsafe.InitBlock(System.Void*,System.Byte,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.CompilerServices.Unsafe.InitBlock(System.Void*,System.Byte,System.UInt32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Runtime.CompilerServices.Unsafe.InitBlockUnaligned(System.Byte,System.Byte,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.CompilerServices.Unsafe.InitBlockUnaligned(System.Void*,System.Byte,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.CompilerServices.Unsafe.InitBlockUnaligned(System.Void*,System.Byte,System.UInt32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Runtime.CompilerServices.Unsafe.WriteUnaligned`1(System.Void*,!0) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.CompilerServices.Unsafe.WriteUnaligned`1(System.Void*,!0) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Runtime.CompilerServices.Unsafe.Write`1(System.Void*,!0) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.CompilerServices.Unsafe.Write`1(System.Void*,!0) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Runtime.CompilerServices.ValueTaskAwaiter.OnCompleted(System.Action) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.ValueTaskAwaiter.UnsafeOnCompleted(System.Action) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.ValueTaskAwaiter`1.OnCompleted(System.Action) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.ValueTaskAwaiter`1.UnsafeOnCompleted(System.Action) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter.OnCompleted(System.Action) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.CompilerServices.YieldAwaitable.YieldAwaiter.UnsafeOnCompleted(System.Action) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.ControlledExecution.AbortThread(System.Threading.ThreadHandle) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Runtime.ControlledExecution.ResetAbortThread() | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Runtime.ControlledExecution.Run(System.Action,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.ControlledExecution.Run(System.Action,System.Threading.CancellationToken) | [ObsoleteAttribute(...)] | 0 | ControlledExecution.Run method may corrupt the process and should not be used in production code. | -| System.Void System.Runtime.InteropServices.COMException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.COMException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.COMException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Runtime.InteropServices.ComTypes.IBindCtx.EnumObjectParam(System.Runtime.InteropServices.ComTypes.IEnumString) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.InteropServices.ComTypes.IBindCtx.GetRunningObjectTable(System.Runtime.InteropServices.ComTypes.IRunningObjectTable) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.InteropServices.ComTypes.IConnectionPointContainer.FindConnectionPoint(System.Guid,System.Runtime.InteropServices.ComTypes.IConnectionPoint) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.InteropServices.ComTypes.IMoniker.Enum(System.Boolean,System.Runtime.InteropServices.ComTypes.IEnumMoniker) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.InteropServices.ComTypes.IMoniker.Reduce(System.Runtime.InteropServices.ComTypes.IBindCtx,System.Int32,System.Runtime.InteropServices.ComTypes.IMoniker,System.Runtime.InteropServices.ComTypes.IMoniker) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.InteropServices.ComTypes.IPersistFile.Save(System.String,System.Boolean) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetDocumentation2(System.Int32,System.String,System.Int32,System.String) | [LCIDConversionAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetMops(System.Int32,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.InteropServices.ComTypes.ITypeInfo.GetMops(System.Int32,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.InteropServices.ComTypes.ITypeLib2.GetDocumentation2(System.Int32,System.String,System.Int32,System.String) | [LCIDConversionAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.ComWrappers.GetIUnknownImplInternal(System.IntPtr,System.IntPtr,System.IntPtr) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Void System.Runtime.InteropServices.ComWrappers.GetIUnknownImplInternal(System.IntPtr,System.IntPtr,System.IntPtr) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Void System.Runtime.InteropServices.ComWrappers.GetIUnknownImplInternal(System.IntPtr,System.IntPtr,System.IntPtr) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Runtime.InteropServices.ComWrappers.RegisterForMarshalling(System.Runtime.InteropServices.ComWrappers) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.Runtime.InteropServices.ComWrappers.SetGlobalInstanceRegisteredForMarshalling(System.Int64) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Runtime.InteropServices.ComWrappers.SetGlobalInstanceRegisteredForTrackerSupport(System.Int64) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Runtime.InteropServices.CurrencyWrapper..ctor(System.Object) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.ExternalException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.ExternalException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.ExternalException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Runtime.InteropServices.InvalidComObjectException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.InvalidComObjectException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.InvalidComObjectException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Runtime.InteropServices.InvalidOleVariantTypeException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.InvalidOleVariantTypeException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.InvalidOleVariantTypeException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Runtime.InteropServices.LibraryImportAttribute..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.Marshal.ChangeWrapperHandleStrength(System.Object,System.Boolean) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.Runtime.InteropServices.Marshal.DestroyStructure(System.IntPtr,System.Type) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.Marshal.DestroyStructure(System.IntPtr,System.Type) | [RequiresDynamicCodeAttribute(...)] | 0 | Marshalling code for the object might not be available. Use the DestroyStructure<T> overload instead. | -| System.Void System.Runtime.InteropServices.Marshal.DestroyStructure`1(System.IntPtr) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.InteropServices.Marshal.DestroyStructure`1(System.IntPtr) | [UnconditionalSuppressMessageAttribute(...)] | 0 | AotAnalysis | -| System.Void System.Runtime.InteropServices.Marshal.DestroyStructure`1(System.IntPtr) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL3050:AotUnfriendlyApi | -| System.Void System.Runtime.InteropServices.Marshal.GetNativeVariantForObject(System.Object,System.IntPtr) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.Marshal.GetNativeVariantForObject(System.Object,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.InteropServices.Marshal.GetNativeVariantForObject(System.Object,System.IntPtr) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.Runtime.InteropServices.Marshal.GetNativeVariantForObject`1(!0,System.IntPtr) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.Marshal.GetNativeVariantForObject`1(!0,System.IntPtr) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.InteropServices.Marshal.GetNativeVariantForObject`1(!0,System.IntPtr) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.Runtime.InteropServices.Marshal.InternalPrelink(System.RuntimeMethodHandleInternal) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Runtime.InteropServices.Marshal.PrelinkAll(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Runtime.InteropServices.Marshal.PrelinkAll(System.Type) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2070:UnrecognizedReflectionPattern | -| System.Void System.Runtime.InteropServices.Marshal.PtrToStructure(System.IntPtr,System.Object) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.Marshal.PtrToStructure(System.IntPtr,System.Object) | [RequiresDynamicCodeAttribute(...)] | 0 | Marshalling code for the object might not be available | -| System.Void System.Runtime.InteropServices.Marshal.StructureToPtr(System.Object,System.IntPtr,System.Boolean) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.Marshal.StructureToPtr(System.Object,System.IntPtr,System.Boolean) | [RequiresDynamicCodeAttribute(...)] | 0 | Marshalling code for the object might not be available. Use the StructureToPtr<T> overload instead. | -| System.Void System.Runtime.InteropServices.Marshal.StructureToPtr`1(!0,System.IntPtr,System.Boolean) | [UnconditionalSuppressMessageAttribute(...)] | 0 | AotAnalysis | -| System.Void System.Runtime.InteropServices.Marshal.StructureToPtr`1(!0,System.IntPtr,System.Boolean) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL3050:AotUnfriendlyApi | -| System.Void System.Runtime.InteropServices.Marshal.WriteByte(System.Object,System.Int32,System.Byte) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.Marshal.WriteByte(System.Object,System.Int32,System.Byte) | [ObsoleteAttribute(...)] | 0 | WriteByte(Object, Int32, Byte) may be unavailable in future releases. | -| System.Void System.Runtime.InteropServices.Marshal.WriteByte(System.Object,System.Int32,System.Byte) | [RequiresDynamicCodeAttribute(...)] | 0 | Marshalling code for the object might not be available | -| System.Void System.Runtime.InteropServices.Marshal.WriteInt16(System.Object,System.Int32,System.Char) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.Marshal.WriteInt16(System.Object,System.Int32,System.Char) | [ObsoleteAttribute(...)] | 0 | WriteInt16(Object, Int32, Char) may be unavailable in future releases. | -| System.Void System.Runtime.InteropServices.Marshal.WriteInt16(System.Object,System.Int32,System.Char) | [RequiresDynamicCodeAttribute(...)] | 0 | Marshalling code for the object might not be available | -| System.Void System.Runtime.InteropServices.Marshal.WriteInt16(System.Object,System.Int32,System.Int16) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.Marshal.WriteInt16(System.Object,System.Int32,System.Int16) | [ObsoleteAttribute(...)] | 0 | WriteInt16(Object, Int32, Int16) may be unavailable in future releases. | -| System.Void System.Runtime.InteropServices.Marshal.WriteInt16(System.Object,System.Int32,System.Int16) | [RequiresDynamicCodeAttribute(...)] | 0 | Marshalling code for the object might not be available | -| System.Void System.Runtime.InteropServices.Marshal.WriteInt32(System.Object,System.Int32,System.Int32) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.Marshal.WriteInt32(System.Object,System.Int32,System.Int32) | [ObsoleteAttribute(...)] | 0 | WriteInt32(Object, Int32, Int32) may be unavailable in future releases. | -| System.Void System.Runtime.InteropServices.Marshal.WriteInt32(System.Object,System.Int32,System.Int32) | [RequiresDynamicCodeAttribute(...)] | 0 | Marshalling code for the object might not be available | -| System.Void System.Runtime.InteropServices.Marshal.WriteInt64(System.Object,System.Int32,System.Int64) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.Marshal.WriteInt64(System.Object,System.Int32,System.Int64) | [ObsoleteAttribute(...)] | 0 | WriteInt64(Object, Int32, Int64) may be unavailable in future releases. | -| System.Void System.Runtime.InteropServices.Marshal.WriteInt64(System.Object,System.Int32,System.Int64) | [RequiresDynamicCodeAttribute(...)] | 0 | Marshalling code for the object might not be available | -| System.Void System.Runtime.InteropServices.Marshal.WriteIntPtr(System.Object,System.Int32,System.IntPtr) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.Marshal.WriteIntPtr(System.Object,System.Int32,System.IntPtr) | [ObsoleteAttribute(...)] | 0 | WriteIntPtr(Object, Int32, IntPtr) may be unavailable in future releases. | -| System.Void System.Runtime.InteropServices.Marshal.WriteIntPtr(System.Object,System.Int32,System.IntPtr) | [RequiresDynamicCodeAttribute(...)] | 0 | Marshalling code for the object might not be available | -| System.Void System.Runtime.InteropServices.MarshalDirectiveException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.MarshalDirectiveException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.MarshalDirectiveException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Runtime.InteropServices.Marshalling.SafeHandleMarshaller`1.ManagedToUnmanagedIn.FromManaged(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.NativeLibrary.FreeLib(System.IntPtr) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Runtime.InteropServices.NativeMemory.AlignedFree(System.Void*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.InteropServices.NativeMemory.Clear(System.Void*,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.InteropServices.NativeMemory.Copy(System.Void*,System.Void*,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.InteropServices.NativeMemory.Fill(System.Void*,System.UIntPtr,System.Byte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.InteropServices.NativeMemory.Free(System.Void*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.InteropServices.SEHException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.SEHException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.SEHException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Runtime.InteropServices.SafeArrayRankMismatchException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.SafeArrayRankMismatchException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.SafeArrayRankMismatchException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Runtime.InteropServices.SafeArrayTypeMismatchException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.SafeArrayTypeMismatchException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.InteropServices.SafeArrayTypeMismatchException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Runtime.InteropServices.SafeBuffer.AcquirePointer(System.Byte*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.InteropServices.SafeBuffer.Initialize(System.UInt32,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.InteropServices.SafeBuffer.Initialize(System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.InteropServices.SafeBuffer.Initialize`1(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.InteropServices.SafeBuffer.ReadArray`1(System.UInt64,!0[],System.Int32,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.InteropServices.SafeBuffer.ReadSpan`1(System.UInt64,System.Span<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.InteropServices.SafeBuffer.WriteArray`1(System.UInt64,!0[],System.Int32,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.InteropServices.SafeBuffer.WriteSpan`1(System.UInt64,System.ReadOnlySpan<!0>) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.InteropServices.SafeBuffer.Write`1(System.UInt64,!0) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Intrinsics.Vector64.CopyTo`1(System.Runtime.Intrinsics.Vector64<!0>,!0[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Intrinsics.Vector64.CopyTo`1(System.Runtime.Intrinsics.Vector64<!0>,!0[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Intrinsics.Vector64.CopyTo`1(System.Runtime.Intrinsics.Vector64<!0>,System.Span<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.Intrinsics.Vector64.StoreAlignedNonTemporal`1(System.Runtime.Intrinsics.Vector64<!0>,!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Intrinsics.Vector64.StoreAlignedNonTemporal`1(System.Runtime.Intrinsics.Vector64<!0>,!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.Intrinsics.Vector64.StoreAligned`1(System.Runtime.Intrinsics.Vector64<!0>,!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Intrinsics.Vector64.StoreAligned`1(System.Runtime.Intrinsics.Vector64<!0>,!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.Intrinsics.Vector64.StoreUnsafe`1(System.Runtime.Intrinsics.Vector64<!0>,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Intrinsics.Vector64.StoreUnsafe`1(System.Runtime.Intrinsics.Vector64<!0>,!0,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Intrinsics.Vector64.StoreUnsafe`1(System.Runtime.Intrinsics.Vector64<!0>,!0,System.UIntPtr) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Intrinsics.Vector64.Store`1(System.Runtime.Intrinsics.Vector64<!0>,!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Intrinsics.Vector64.Store`1(System.Runtime.Intrinsics.Vector64<!0>,!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.Intrinsics.Vector128.CopyTo`1(System.Runtime.Intrinsics.Vector128<!0>,!0[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Intrinsics.Vector128.CopyTo`1(System.Runtime.Intrinsics.Vector128<!0>,!0[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Intrinsics.Vector128.CopyTo`1(System.Runtime.Intrinsics.Vector128<!0>,System.Span<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.Intrinsics.Vector128.StoreAlignedNonTemporal`1(System.Runtime.Intrinsics.Vector128<!0>,!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Intrinsics.Vector128.StoreAlignedNonTemporal`1(System.Runtime.Intrinsics.Vector128<!0>,!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.Intrinsics.Vector128.StoreAligned`1(System.Runtime.Intrinsics.Vector128<!0>,!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Intrinsics.Vector128.StoreAligned`1(System.Runtime.Intrinsics.Vector128<!0>,!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.Intrinsics.Vector128.StoreUnsafe`1(System.Runtime.Intrinsics.Vector128<!0>,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Intrinsics.Vector128.StoreUnsafe`1(System.Runtime.Intrinsics.Vector128<!0>,!0,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Intrinsics.Vector128.StoreUnsafe`1(System.Runtime.Intrinsics.Vector128<!0>,!0,System.UIntPtr) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Intrinsics.Vector128.Store`1(System.Runtime.Intrinsics.Vector128<!0>,!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Intrinsics.Vector128.Store`1(System.Runtime.Intrinsics.Vector128<!0>,!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.Intrinsics.Vector256.CopyTo`1(System.Runtime.Intrinsics.Vector256<!0>,!0[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Intrinsics.Vector256.CopyTo`1(System.Runtime.Intrinsics.Vector256<!0>,!0[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Intrinsics.Vector256.CopyTo`1(System.Runtime.Intrinsics.Vector256<!0>,System.Span<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.Intrinsics.Vector256.StoreAlignedNonTemporal`1(System.Runtime.Intrinsics.Vector256<!0>,!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Intrinsics.Vector256.StoreAlignedNonTemporal`1(System.Runtime.Intrinsics.Vector256<!0>,!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.Intrinsics.Vector256.StoreAligned`1(System.Runtime.Intrinsics.Vector256<!0>,!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Intrinsics.Vector256.StoreAligned`1(System.Runtime.Intrinsics.Vector256<!0>,!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.Intrinsics.Vector256.StoreUnsafe`1(System.Runtime.Intrinsics.Vector256<!0>,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Intrinsics.Vector256.StoreUnsafe`1(System.Runtime.Intrinsics.Vector256<!0>,!0,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Intrinsics.Vector256.StoreUnsafe`1(System.Runtime.Intrinsics.Vector256<!0>,!0,System.UIntPtr) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Intrinsics.Vector256.Store`1(System.Runtime.Intrinsics.Vector256<!0>,!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Intrinsics.Vector256.Store`1(System.Runtime.Intrinsics.Vector256<!0>,!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.Intrinsics.Vector512.CopyTo`1(System.Runtime.Intrinsics.Vector512<!0>,!0[]) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Intrinsics.Vector512.CopyTo`1(System.Runtime.Intrinsics.Vector512<!0>,!0[],System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Intrinsics.Vector512.CopyTo`1(System.Runtime.Intrinsics.Vector512<!0>,System.Span<!0>) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.Intrinsics.Vector512.StoreAlignedNonTemporal`1(System.Runtime.Intrinsics.Vector512<!0>,!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Intrinsics.Vector512.StoreAlignedNonTemporal`1(System.Runtime.Intrinsics.Vector512<!0>,!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.Intrinsics.Vector512.StoreAligned`1(System.Runtime.Intrinsics.Vector512<!0>,!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Intrinsics.Vector512.StoreAligned`1(System.Runtime.Intrinsics.Vector512<!0>,!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.Intrinsics.Vector512.StoreUnsafe`1(System.Runtime.Intrinsics.Vector512<!0>,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Intrinsics.Vector512.StoreUnsafe`1(System.Runtime.Intrinsics.Vector512<!0>,!0,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Intrinsics.Vector512.StoreUnsafe`1(System.Runtime.Intrinsics.Vector512<!0>,!0,System.UIntPtr) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Intrinsics.Vector512.Store`1(System.Runtime.Intrinsics.Vector512<!0>,!0*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Intrinsics.Vector512.Store`1(System.Runtime.Intrinsics.Vector512<!0>,!0*) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.Intrinsics.X86.X86Base.__cpuidex(System.Int32*,System.Int32,System.Int32) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Runtime.Loader.AssemblyLoadContext..ctor(System.String,System.Boolean) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.Loader.AssemblyLoadContext.InternalSetProfileRoot(System.String) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Void System.Runtime.Loader.AssemblyLoadContext.InternalSetProfileRoot(System.String) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Void System.Runtime.Loader.AssemblyLoadContext.InternalStartProfile(System.String,System.IntPtr) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Void System.Runtime.Loader.AssemblyLoadContext.InternalStartProfile(System.String,System.IntPtr) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Void System.Runtime.Loader.AssemblyLoadContext.LoadFromPath(System.IntPtr,System.String,System.String,System.Runtime.CompilerServices.ObjectHandleOnStack) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Void System.Runtime.Loader.AssemblyLoadContext.LoadFromPath(System.IntPtr,System.String,System.String,System.Runtime.CompilerServices.ObjectHandleOnStack) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Void System.Runtime.Loader.AssemblyLoadContext.LoadFromPath(System.IntPtr,System.String,System.String,System.Runtime.CompilerServices.ObjectHandleOnStack) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Void System.Runtime.Loader.AssemblyLoadContext.LoadFromStream(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Runtime.Loader.AssemblyLoadContext.LoadFromStream(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [RequiresUnreferencedCodeAttribute(...)] | 0 | Types and members the loaded assembly depends on might be removed | -| System.Void System.Runtime.Loader.AssemblyLoadContext.PrepareForAssemblyLoadContextRelease(System.IntPtr,System.IntPtr) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Runtime.Loader.AssemblyLoadContext.StartProfileOptimization(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.ProfileOptimization.SetProfileRoot(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.ProfileOptimization.StartProfile(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.Serialization.ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | Formatter-based serialization is obsolete and should not be used. | -| System.Void System.Runtime.Serialization.SafeSerializationEventArgs.AddSerializedState(System.Runtime.Serialization.ISafeSerializationData) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Serialization.SerializationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Serialization.SerializationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Serialization.SerializationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Runtime.Serialization.SerializationInfo..ctor(System.Type,System.Runtime.Serialization.IFormatterConverter) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Serialization.SerializationInfo..ctor(System.Type,System.Runtime.Serialization.IFormatterConverter) | [ObsoleteAttribute(...)] | 0 | Formatter-based serialization is obsolete and should not be used. | -| System.Void System.Runtime.Serialization.SerializationInfo..ctor(System.Type,System.Runtime.Serialization.IFormatterConverter,System.Boolean) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Serialization.SerializationInfo..ctor(System.Type,System.Runtime.Serialization.IFormatterConverter,System.Boolean) | [ObsoleteAttribute(...)] | 0 | Formatter-based serialization is obsolete and should not be used. | -| System.Void System.Runtime.Serialization.SerializationInfo.AddValue(System.String,System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Serialization.SerializationInfo.AddValue(System.String,System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Serialization.SerializationInfo.AddValue(System.String,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Serialization.SerializationInfo.AddValue(System.String,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Runtime.Serialization.StreamingContext..ctor(System.Runtime.Serialization.StreamingContextStates) | [ObsoleteAttribute(...)] | 0 | Formatter-based serialization is obsolete and should not be used. | -| System.Void System.Runtime.Serialization.StreamingContext..ctor(System.Runtime.Serialization.StreamingContextStates,System.Object) | [ObsoleteAttribute(...)] | 0 | Formatter-based serialization is obsolete and should not be used. | -| System.Void System.Runtime.Versioning.ObsoletedOSPlatformAttribute..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Versioning.ObsoletedOSPlatformAttribute..ctor(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Versioning.SupportedOSPlatformAttribute..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Versioning.SupportedOSPlatformGuardAttribute..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Versioning.TargetFrameworkAttribute.set_FrameworkDisplayName(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Runtime.Versioning.TargetPlatformAttribute..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Runtime.Versioning.UnsupportedOSPlatformGuardAttribute..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.RuntimeFieldHandle.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.RuntimeFieldHandle.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.RuntimeFieldHandle.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.RuntimeMethodHandle.ConstructInstantiation(System.RuntimeMethodHandleInternal,System.TypeNameFormatFlags,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.RuntimeMethodHandle.Destroy(System.RuntimeMethodHandleInternal) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.RuntimeMethodHandle.GetMethodInstantiation(System.RuntimeMethodHandleInternal,System.Runtime.CompilerServices.ObjectHandleOnStack,Interop.BOOL) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.RuntimeMethodHandle.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.RuntimeMethodHandle.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.RuntimeMethodHandle.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.RuntimeMethodHandle.GetTypicalMethodDefinition(System.RuntimeMethodHandleInternal,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.RuntimeMethodHandle.StripMethodInstantiation(System.RuntimeMethodHandleInternal,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.RuntimeTypeHandle.ConstructName(System.Runtime.CompilerServices.QCallTypeHandle,System.TypeNameFormatFlags,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.RuntimeTypeHandle.CreateInstanceForAnotherGenericParameter(System.Runtime.CompilerServices.QCallTypeHandle,System.IntPtr*,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.RuntimeTypeHandle.GetActivationInfo(System.Runtime.CompilerServices.ObjectHandleOnStack,delegate* managed<Void*,Object>*,System.Void**,delegate* managed<Object,Void>*,Interop.BOOL*) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.RuntimeTypeHandle.GetConstraints(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.RuntimeTypeHandle.GetGenericTypeDefinition(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.RuntimeTypeHandle.GetInstantiation(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack,Interop.BOOL) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.RuntimeTypeHandle.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.RuntimeTypeHandle.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.RuntimeTypeHandle.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.RuntimeTypeHandle.Instantiate(System.Runtime.CompilerServices.QCallTypeHandle,System.IntPtr*,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.RuntimeTypeHandle.MakeArray(System.Runtime.CompilerServices.QCallTypeHandle,System.Int32,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.RuntimeTypeHandle.MakeByRef(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.RuntimeTypeHandle.MakePointer(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.RuntimeTypeHandle.MakeSZArray(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.RuntimeTypeHandle.RegisterCollectibleTypeDependency(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.QCallAssembly) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.RuntimeTypeHandle.VerifyInterfaceIsImplemented(System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.QCallTypeHandle) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Security.Cryptography.CryptographicException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Security.Cryptography.CryptographicException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Security.Cryptography.CryptographicException..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Security.Cryptography.CryptographicException..ctor(System.String,System.Exception) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Security.PermissionSet.CopyTo(System.Array,System.Int32) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Security.PermissionSet.FromXml(System.Security.SecurityElement) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Security.SecureString..ctor(System.Char*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Security.SecurityElement..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Security.SecurityElement..ctor(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Security.SecurityElement.AddAttribute(System.String,System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Security.SecurityElement.AddChild(System.Security.SecurityElement) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Security.SecurityElement.set_Tag(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Security.SecurityException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Security.SecurityException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Security.SecurityException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Security.SecurityException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Security.SecurityException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Security.SecurityException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Security.VerificationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Security.VerificationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Security.VerificationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Signature.GetSignature(System.Void*,System.Int32,System.RuntimeFieldHandleInternal,System.IRuntimeMethodInfo,System.RuntimeType) | [MemberNotNullAttribute(...)] | 0 | m_arguments | -| System.Void System.Signature.GetSignature(System.Void*,System.Int32,System.RuntimeFieldHandleInternal,System.IRuntimeMethodInfo,System.RuntimeType) | [MemberNotNullAttribute(...)] | 0 | m_returnTypeORfieldType | -| System.Void System.Span`1..ctor(System.Void*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Span`1..ctor(System.Void*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.StackOverflowException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.StartupHookProvider.CallStartupHook(System.Char*) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.StartupHookProvider.CallStartupHook(System.Char*) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:RequiresUnreferencedCode | -| System.Void System.StartupHookProvider.CallStartupHook(System.StartupHookProvider.StartupHookNameOrPath) | [RequiresUnreferencedCodeAttribute(...)] | 0 | The StartupHookSupport feature switch has been enabled for this app which is being trimmed. Startup hook code is not observable by the trimmer and so required assemblies, types and members may be removed | -| System.Void System.String..ctor(System.Char*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.String..ctor(System.Char*) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.String..ctor(System.Char*,System.Int32,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.String..ctor(System.Char*,System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.String..ctor(System.Char[]) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.String..ctor(System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.String..ctor(System.SByte*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.String..ctor(System.SByte*) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.String..ctor(System.SByte*,System.Int32,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.String..ctor(System.SByte*,System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.String..ctor(System.SByte*,System.Int32,System.Int32,System.Text.Encoding) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.String..ctor(System.SByte*,System.Int32,System.Int32,System.Text.Encoding) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.String.CopyTo(System.Span<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.SystemException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.SystemException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.SystemException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Text.Decoder.Convert(System.Byte*,System.Int32,System.Char*,System.Int32,System.Boolean,System.Int32,System.Int32,System.Boolean) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Text.Decoder.Convert(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Int32,System.Boolean,System.Int32,System.Int32,System.Boolean) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Text.Decoder.set_Fallback(System.Text.DecoderFallback) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Text.DecoderFallbackException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Text.Encoder.Convert(System.Char*,System.Int32,System.Byte*,System.Int32,System.Boolean,System.Int32,System.Int32,System.Boolean) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Text.Encoder.Convert(System.Char[],System.Int32,System.Int32,System.Byte[],System.Int32,System.Int32,System.Boolean,System.Int32,System.Int32,System.Boolean) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Text.Encoder.set_Fallback(System.Text.EncoderFallback) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Text.EncoderFallbackException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Text.EncoderReplacementFallbackBuffer..ctor(System.Text.EncoderReplacementFallback) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Text.Encoding..ctor(System.Int32,System.Text.EncoderFallback,System.Text.DecoderFallback) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Text.Encoding.SetDefaultFallbacks() | [MemberNotNullAttribute(...)] | 0 | decoderFallback | -| System.Void System.Text.Encoding.SetDefaultFallbacks() | [MemberNotNullAttribute(...)] | 0 | encoderFallback | -| System.Void System.Text.Latin1Utility.WidenLatin1ToUtf16_Sse2(System.Byte*,System.Char*,System.UIntPtr) | [CompExactlyDependsOnAttribute(...)] | 0 | System.Runtime.Intrinsics.X86.Sse2 | -| System.Void System.Text.Rune..ctor(System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Text.StringBuilder..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Text.StringBuilder..ctor(System.String,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Text.StringBuilder..ctor(System.String,System.Int32,System.Int32,System.Int32) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Text.StringBuilder.AppendInterpolatedStringHandler.AppendFormatted(System.Object,System.Int32,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Text.StringBuilder.AppendInterpolatedStringHandler.AppendFormatted(System.ReadOnlySpan<System.Char>) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Text.StringBuilder.AppendInterpolatedStringHandler.AppendFormatted(System.ReadOnlySpan<System.Char>,System.Int32,System.String) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Text.StringBuilder.AppendInterpolatedStringHandler.AppendFormatted(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Text.StringBuilder.AppendInterpolatedStringHandler.AppendFormatted(System.String,System.Int32,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Text.StringBuilder.AppendInterpolatedStringHandler.AppendFormatted`1(!0,System.Int32,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Text.StringBuilder.AppendInterpolatedStringHandler.AppendFormatted`1(!0,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Text.StringBuilder.CopyTo(System.Int32,System.Span<System.Char>,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void System.Text.TranscodingStream.EnsurePreReadConditions() | [MemberNotNullAttribute(...)] | 0 | [_innerDecoder,_thisEncoder,_readBuffer] | -| System.Void System.Text.TranscodingStream.EnsurePreWriteConditions() | [MemberNotNullAttribute(...)] | 0 | [_thisDecoder,_innerEncoder] | -| System.Void System.Text.UTF7Encoding..ctor() | [ObsoleteAttribute(...)] | 0 | The UTF-7 encoding is insecure and should not be used. Consider using UTF-8 instead. | -| System.Void System.Text.UTF7Encoding..ctor(System.Boolean) | [ObsoleteAttribute(...)] | 0 | The UTF-7 encoding is insecure and should not be used. Consider using UTF-8 instead. | -| System.Void System.Text.UTF7Encoding.MakeTables() | [MemberNotNullAttribute(...)] | 0 | _base64Bytes | -| System.Void System.Text.UTF7Encoding.MakeTables() | [MemberNotNullAttribute(...)] | 0 | _base64Values | -| System.Void System.Text.UTF7Encoding.MakeTables() | [MemberNotNullAttribute(...)] | 0 | _directEncode | -| System.Void System.Threading.AbandonedMutexException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Threading.AbandonedMutexException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Threading.AbandonedMutexException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Threading.CompressedStack.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Threading.CompressedStack.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Threading.ContextCallback.Invoke(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.EventWaitHandle..ctor(System.Boolean,System.Threading.EventResetMode,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.EventWaitHandle..ctor(System.Boolean,System.Threading.EventResetMode,System.String,System.Boolean) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.ExecutionContext.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Threading.ExecutionContext.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Threading.Interlocked._MemoryBarrierProcessWide() | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Threading.LockRecursionException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Threading.LockRecursionException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Threading.LockRecursionException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Threading.ManualResetEventSlim.Wait() | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Void System.Threading.ManualResetEventSlim.Wait(System.Threading.CancellationToken) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Void System.Threading.Mutex..ctor(System.Boolean,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Mutex..ctor(System.Boolean,System.String,System.Boolean) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Overlapped..ctor(System.Int32,System.Int32,System.Int32,System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Overlapped..ctor(System.Int32,System.Int32,System.Int32,System.IAsyncResult) | [ObsoleteAttribute(...)] | 0 | This constructor is not 64-bit compatible and has been deprecated. Use the constructor that accepts an IntPtr for the event handle instead. | -| System.Void System.Threading.Overlapped..ctor(System.Int32,System.Int32,System.IntPtr,System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Overlapped.Free(System.Threading.NativeOverlapped*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Threading.Overlapped.set_AsyncResult(System.IAsyncResult) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Threading.ParameterizedThreadStart.Invoke(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.PeriodicTimer..ctor(System.TimeSpan,System.TimeProvider) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Threading.PreAllocatedOverlapped..ctor(System.Threading.IOCompletionCallback,System.Object,System.Object) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Threading.PreAllocatedOverlapped..ctor(System.Threading.IOCompletionCallback,System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Semaphore..ctor(System.Int32,System.Int32,System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Semaphore..ctor(System.Int32,System.Int32,System.String,System.Boolean) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.SemaphoreFullException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Threading.SemaphoreFullException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Threading.SemaphoreFullException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Threading.SemaphoreSlim.Wait() | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Void System.Threading.SemaphoreSlim.Wait(System.Threading.CancellationToken) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Void System.Threading.SendOrPostCallback.Invoke(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.SynchronizationContext.SetSynchronizationContext(System.Threading.SynchronizationContext) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.SynchronizationLockException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Threading.SynchronizationLockException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Threading.SynchronizationLockException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1.OnCompleted(System.Action<System.Object>,System.Object,System.Int16,System.Threading.Tasks.Sources.ValueTaskSourceOnCompletedFlags) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Tasks.Task..ctor(System.Action<System.Object>,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Tasks.Task..ctor(System.Action<System.Object>,System.Object,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Tasks.Task..ctor(System.Action<System.Object>,System.Object,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Tasks.Task..ctor(System.Action<System.Object>,System.Object,System.Threading.Tasks.TaskCreationOptions) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Tasks.Task.WaitAll(System.Threading.Tasks.Task[]) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Void System.Threading.Tasks.Task.WaitAll(System.Threading.Tasks.Task[],System.Threading.CancellationToken) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Void System.Threading.Tasks.TaskAsyncEnumerableExtensions.ManualResetEventWithAwaiterSupport.Wait`1(!0) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Void System.Threading.Tasks.TaskCanceledException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Threading.Tasks.TaskCanceledException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Threading.Tasks.TaskCanceledException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Threading.Tasks.TaskCompletionSource..ctor(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Tasks.TaskCompletionSource..ctor(System.Object,System.Threading.Tasks.TaskCreationOptions) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Tasks.TaskCompletionSource`1..ctor(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Tasks.TaskCompletionSource`1..ctor(System.Object,System.Threading.Tasks.TaskCreationOptions) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Tasks.TaskFactory..ctor(System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Tasks.TaskFactory..ctor(System.Threading.Tasks.TaskScheduler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Tasks.TaskFactory`1..ctor(System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions,System.Threading.Tasks.TaskContinuationOptions,System.Threading.Tasks.TaskScheduler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Tasks.TaskFactory`1..ctor(System.Threading.Tasks.TaskScheduler) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Tasks.TaskSchedulerException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Threading.Tasks.TaskSchedulerException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Threading.Tasks.TaskSchedulerException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Threading.Tasks.Task`1..ctor(System.Func<!0,System.Object>,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Tasks.Task`1..ctor(System.Func<!0,System.Object>,System.Object,System.Threading.CancellationToken) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Tasks.Task`1..ctor(System.Func<!0,System.Object>,System.Object,System.Threading.CancellationToken,System.Threading.Tasks.TaskCreationOptions) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Tasks.Task`1..ctor(System.Func<!0,System.Object>,System.Object,System.Threading.Tasks.TaskCreationOptions) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Tasks.TplEventSource.AwaitTaskContinuationScheduled(System.Int32,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Threading.Tasks.TplEventSource.AwaitTaskContinuationScheduled(System.Int32,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Threading.Tasks.TplEventSource.TaskCompleted(System.Int32,System.Int32,System.Int32,System.Boolean) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Threading.Tasks.TplEventSource.TaskCompleted(System.Int32,System.Int32,System.Int32,System.Boolean) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Threading.Tasks.TplEventSource.TaskScheduled(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Threading.Tasks.TplEventSource.TaskScheduled(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Threading.Tasks.TplEventSource.TaskWaitBegin(System.Int32,System.Int32,System.Int32,System.Threading.Tasks.TplEventSource.TaskWaitBehavior,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Threading.Tasks.TplEventSource.TaskWaitBegin(System.Int32,System.Int32,System.Int32,System.Threading.Tasks.TplEventSource.TaskWaitBehavior,System.Int32) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Threading.Tasks.TplEventSource.TraceOperationBegin(System.Int32,System.String,System.Int64) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Threading.Tasks.TplEventSource.TraceOperationBegin(System.Int32,System.String,System.Int64) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Threading.Tasks.TplEventSource.TraceSynchronousWorkEnd(System.Threading.Tasks.CausalitySynchronousWork) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Threading.Tasks.TplEventSource.TraceSynchronousWorkEnd(System.Threading.Tasks.CausalitySynchronousWork) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2026:UnrecognizedReflectionPattern | -| System.Void System.Threading.Thread.Abort() | [ObsoleteAttribute(...)] | 0 | Thread.Abort is not supported and throws PlatformNotSupportedException. | -| System.Void System.Threading.Thread.Abort(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Thread.Abort(System.Object) | [ObsoleteAttribute(...)] | 0 | Thread.Abort is not supported and throws PlatformNotSupportedException. | -| System.Void System.Threading.Thread.InformThreadNameChange(System.Threading.ThreadHandle,System.String,System.Int32) | [GeneratedCodeAttribute(...)] | 0 | Microsoft.Interop.LibraryImportGenerator | -| System.Void System.Threading.Thread.InformThreadNameChange(System.Threading.ThreadHandle,System.String,System.Int32) | [GeneratedCodeAttribute(...)] | 1 | 8.0.9.8001 | -| System.Void System.Threading.Thread.ResetAbort() | [ObsoleteAttribute(...)] | 0 | Thread.ResetAbort is not supported and throws PlatformNotSupportedException. | -| System.Void System.Threading.Thread.Resume() | [ObsoleteAttribute(...)] | 0 | Thread.Resume has been deprecated. Use other classes in System.Threading, such as Monitor, Mutex, Event, and Semaphore, to synchronize Threads or protect resources. | -| System.Void System.Threading.Thread.SetApartmentState(System.Threading.ApartmentState) | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| System.Void System.Threading.Thread.SetCompressedStack(System.Threading.CompressedStack) | [ObsoleteAttribute(...)] | 0 | Code Access Security is not supported or honored by the runtime. | -| System.Void System.Threading.Thread.Start() | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Void System.Threading.Thread.Start(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Thread.Start(System.Object) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Void System.Threading.Thread.StartInternal(System.Threading.ThreadHandle,System.Int32,System.Int32,System.Char*) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.Threading.Thread.Suspend() | [ObsoleteAttribute(...)] | 0 | Thread.Suspend has been deprecated. Use other classes in System.Threading, such as Monitor, Mutex, Event, and Semaphore, to synchronize Threads or protect resources. | -| System.Void System.Threading.Thread.UnsafeStart() | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Void System.Threading.Thread.UnsafeStart(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Thread.UnsafeStart(System.Object) | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| System.Void System.Threading.Thread.VolatileWrite(System.Object,System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Thread.VolatileWrite(System.SByte,System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Threading.Thread.VolatileWrite(System.UInt16,System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Threading.Thread.VolatileWrite(System.UInt32,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Threading.Thread.VolatileWrite(System.UInt64,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Threading.Thread.VolatileWrite(System.UIntPtr,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Threading.Thread.set_CurrentPrincipal(System.Security.Principal.IPrincipal) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Thread.set_Name(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.ThreadAbortException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Threading.ThreadExceptionEventHandler.Invoke(System.Object,System.Threading.ThreadExceptionEventArgs) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Threading.ThreadInterruptedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Threading.ThreadInterruptedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Threading.ThreadInterruptedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Threading.ThreadPoolBoundHandle.FreeNativeOverlapped(System.Threading.NativeOverlapped*) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Threading.ThreadStartException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Threading.ThreadStateException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Threading.ThreadStateException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Threading.ThreadStateException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Threading.Timer..ctor(System.Threading.TimerCallback,System.Object,System.UInt32,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Threading.Timer.TimerSetup(System.Threading.TimerCallback,System.Object,System.UInt32,System.UInt32,System.Boolean) | [MemberNotNullAttribute(...)] | 0 | _timer | -| System.Void System.Threading.TimerCallback.Invoke(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.Volatile.Write(System.SByte,System.SByte) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Threading.Volatile.Write(System.UInt16,System.UInt16) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Threading.Volatile.Write(System.UInt32,System.UInt32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Threading.Volatile.Write(System.UInt64,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Threading.Volatile.Write(System.UIntPtr,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.Threading.WaitCallback.Invoke(System.Object) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.Threading.WaitHandleCannotBeOpenedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.Threading.WaitHandleCannotBeOpenedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Threading.WaitHandleCannotBeOpenedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.Threading.WaitOrTimerCallback.Invoke(System.Object,System.Boolean) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.TimeOnly.Deconstruct(System.Int32,System.Int32) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TimeOnly.Deconstruct(System.Int32,System.Int32,System.Int32) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TimeOnly.Deconstruct(System.Int32,System.Int32,System.Int32,System.Int32) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TimeOnly.Deconstruct(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TimeZoneNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TimeZoneNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TimeZoneNotFoundException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.TimeoutException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TimeoutException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TimeoutException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.TupleExtensions.Deconstruct`1(System.Tuple<!0>,!0) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`1(System.Tuple<!0>,!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`2(System.Tuple<!0,!1>,!0,!1) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`2(System.Tuple<!0,!1>,!0,!1) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`3(System.Tuple<!0,!1,!2>,!0,!1,!2) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`3(System.Tuple<!0,!1,!2>,!0,!1,!2) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`4(System.Tuple<!0,!1,!2,!3>,!0,!1,!2,!3) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`4(System.Tuple<!0,!1,!2,!3>,!0,!1,!2,!3) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`5(System.Tuple<!0,!1,!2,!3,!4>,!0,!1,!2,!3,!4) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`5(System.Tuple<!0,!1,!2,!3,!4>,!0,!1,!2,!3,!4) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`6(System.Tuple<!0,!1,!2,!3,!4,!5>,!0,!1,!2,!3,!4,!5) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`6(System.Tuple<!0,!1,!2,!3,!4,!5>,!0,!1,!2,!3,!4,!5) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`7(System.Tuple<!0,!1,!2,!3,!4,!5,!6>,!0,!1,!2,!3,!4,!5,!6) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`7(System.Tuple<!0,!1,!2,!3,!4,!5,!6>,!0,!1,!2,!3,!4,!5,!6) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`8(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!7>>,!0,!1,!2,!3,!4,!5,!6,!7) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`8(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!7>>,!0,!1,!2,!3,!4,!5,!6,!7) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`9(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!7,!8>>,!0,!1,!2,!3,!4,!5,!6,!7,!8) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`9(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!7,!8>>,!0,!1,!2,!3,!4,!5,!6,!7,!8) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`10(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!7,!8,!9>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`10(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!7,!8,!9>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`11(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!7,!8,!9>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`11(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!7,!8,!9>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`12(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!7,!8,!9>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`12(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!7,!8,!9>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`13(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!7,!8,!9>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`13(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!7,!8,!9>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`14(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`14(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`15(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14>>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`15(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14>>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`16(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15>>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,!15) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`16(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15>>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,!15) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`17(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16>>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,!15,!16) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`17(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16>>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,!15,!16) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`18(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17>>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,!15,!16,!17) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`18(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17>>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,!15,!16,!17) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`19(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17,!18>>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,!15,!16,!17,!18) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`19(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17,!18>>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,!15,!16,!17,!18) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`20(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17,!18,!19>>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,!15,!16,!17,!18,!19) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`20(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17,!18,!19>>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,!15,!16,!17,!18,!19) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`21(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17,!18,!19,!20>>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,!15,!16,!17,!18,!19,!20) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TupleExtensions.Deconstruct`21(System.Tuple<!0,!1,!2,!3,!4,!5,!6,System.Tuple<!10,!11,!12,!13,!7,!8,!9,System.Tuple<!14,!15,!16,!17,!18,!19,!20>>>,!0,!1,!2,!3,!4,!5,!6,!7,!8,!9,!10,!11,!12,!13,!14,!15,!16,!17,!18,!19,!20) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Tuple`1..ctor(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Tuple`2..ctor(!0,!1) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Type.GetEnumData(System.String[],System.Array) | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | -| System.Void System.Type.GetEnumData(System.String[],System.Array) | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2085:UnrecognizedReflectionPattern | -| System.Void System.TypeAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TypeAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TypeAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.TypeInitializationException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.TypeInitializationException..ctor(System.String,System.Exception) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.TypeInitializationException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TypeInitializationException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.TypeLoadException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TypeLoadException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.TypeLoadException..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.TypeLoadException..ctor(System.String,System.Exception) | [NullableContextAttribute(...)] | 0 | 2 | -| System.Void System.TypeLoadException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TypeLoadException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.TypeLoadException.GetTypeLoadExceptionMessage(System.Int32,System.Runtime.CompilerServices.StringHandleOnStack) | [LibraryImportAttribute(...)] | 0 | QCall | -| System.Void System.TypeUnloadedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.TypeUnloadedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.TypeUnloadedException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.UInt128..ctor(System.UInt64,System.UInt64) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void System.UnauthorizedAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.UnauthorizedAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.UnauthorizedAccessException..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.UnhandledExceptionEventHandler.Invoke(System.Object,System.UnhandledExceptionEventArgs) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.UnitySerializationHolder..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.UnitySerializationHolder.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.ValueTuple`1..ctor(!0) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.ValueTuple`2..ctor(!0,!1) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.ValueTuple`3..ctor(!0,!1,!2) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.ValueTuple`4..ctor(!0,!1,!2,!3) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.Version..ctor(System.String) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.WeakReference..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.WeakReference..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.WeakReference..ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.WeakReference.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.WeakReference.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [NullableContextAttribute(...)] | 0 | 1 | -| System.Void System.WeakReference.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void System.WeakReference`1.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [EditorBrowsableAttribute(...)] | 0 | 1 | -| System.Void System.WeakReference`1.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext) | [ObsoleteAttribute(...)] | 0 | This API supports obsolete formatter-based serialization. It should not be called or extended by application code. | -| System.Void* System.IntPtr.ToPointer() | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void* System.IntPtr.op_Explicit(System.IntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void* System.Runtime.CompilerServices.Unsafe.Add`1(System.Void*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void* System.Runtime.CompilerServices.Unsafe.Add`1(System.Void*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void* System.Runtime.CompilerServices.Unsafe.AsPointer`1(!0) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void* System.Runtime.CompilerServices.Unsafe.AsPointer`1(!0) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void* System.Runtime.CompilerServices.Unsafe.Subtract`1(System.Void*,System.Int32) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void* System.Runtime.CompilerServices.Unsafe.Subtract`1(System.Void*,System.Int32) | [NullableContextAttribute(...)] | 0 | 0 | -| System.Void* System.Runtime.InteropServices.NativeMemory.AlignedAlloc(System.UIntPtr,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void* System.Runtime.InteropServices.NativeMemory.AlignedRealloc(System.Void*,System.UIntPtr,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void* System.Runtime.InteropServices.NativeMemory.Alloc(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void* System.Runtime.InteropServices.NativeMemory.Alloc(System.UIntPtr,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void* System.Runtime.InteropServices.NativeMemory.AllocZeroed(System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void* System.Runtime.InteropServices.NativeMemory.AllocZeroed(System.UIntPtr,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.Void* System.Runtime.InteropServices.NativeMemory.Realloc(System.Void*,System.UIntPtr) | [CLSCompliantAttribute(...)] | 0 | False | -| System.WeakReference | [NullableAttribute(...)] | 0 | 0 | -| System.WeakReference | [NullableContextAttribute(...)] | 0 | 2 | -| System.WeakReference | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.WeakReference`1 | [NullableAttribute(...)] | 0 | 0 | -| System.WeakReference`1 | [NullableContextAttribute(...)] | 0 | 1 | -| System.WeakReference`1 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.__Canon | [ClassInterfaceAttribute(...)] | 0 | 0 | -| System.__Canon | [ComVisibleAttribute(...)] | 0 | True | -| System.__DTString | [CompilerFeatureRequiredAttribute(...)] | 0 | RefStructs | -| System.__DTString | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | -| System.__DTString | [ObsoleteAttribute(...)] | 1 | True | -| bool | [DoesNotReturnIfAttribute(...)] | 0 | False | -| bool | [DoesNotReturnIfAttribute(...)] | 0 | True | -| bool | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| bool System.Console.CapsLock | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| bool System.Console.NumberLock | [SupportedOSPlatformAttribute(...)] | 0 | windows | -| bool System.Console.TreatControlCAsInput | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| bool System.Console.TreatControlCAsInput | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| bool System.Console.TreatControlCAsInput | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| bool System.Console.TreatControlCAsInput | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| bool System.Reflection.Assembly.GlobalAssemblyCache | [ObsoleteAttribute(...)] | 0 | The Global Assembly Cache is not supported. | -| bool System.Reflection.FieldInfo.IsNotSerialized | [ObsoleteAttribute(...)] | 0 | Formatter-based serialization is obsolete and should not be used. | -| bool System.Reflection.RuntimeAssembly.GlobalAssemblyCache | [ObsoleteAttribute(...)] | 0 | The Global Assembly Cache is not supported. | -| bool System.Reflection.SignatureType.IsSerializable | [ObsoleteAttribute(...)] | 0 | Formatter-based serialization is obsolete and should not be used. | -| bool System.Threading.Tasks.Task.IsFaulted | [MemberNotNullWhenAttribute(...)] | 0 | True | -| bool System.Threading.Tasks.Task.IsFaulted | [MemberNotNullWhenAttribute(...)] | 1 | Exception | -| bool System.Type.IsSerializable | [ObsoleteAttribute(...)] | 0 | Formatter-based serialization is obsolete and should not be used. | -| bool.FalseString | [NullableAttribute(...)] | 0 | 1 | -| bool.TrueString | [NullableAttribute(...)] | 0 | 1 | -| byte | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| byte* System.IO.UnmanagedMemoryStream.PositionPointer | [CLSCompliantAttribute(...)] | 0 | False | -| byte[] | [NotNullWhenAttribute(...)] | 0 | True | -| byte[] | [NullableAttribute(...)] | 0 | 2 | -| char | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| char[] | [NullableAttribute(...)] | 0 | 2 | -| decimal | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| decimal.AdditiveIdentity | [DecimalConstantAttribute(...)] | 0 | 0 | -| decimal.AdditiveIdentity | [DecimalConstantAttribute(...)] | 1 | 0 | -| decimal.AdditiveIdentity | [DecimalConstantAttribute(...)] | 2 | 0 | -| decimal.AdditiveIdentity | [DecimalConstantAttribute(...)] | 3 | 0 | -| decimal.AdditiveIdentity | [DecimalConstantAttribute(...)] | 4 | 0 | -| decimal.MaxValue | [DecimalConstantAttribute(...)] | 0 | 0 | -| decimal.MaxValue | [DecimalConstantAttribute(...)] | 1 | 0 | -| decimal.MaxValue | [DecimalConstantAttribute(...)] | 2 | 4294967295 | -| decimal.MaxValue | [DecimalConstantAttribute(...)] | 3 | 4294967295 | -| decimal.MaxValue | [DecimalConstantAttribute(...)] | 4 | 4294967295 | -| decimal.MinValue | [DecimalConstantAttribute(...)] | 0 | 0 | -| decimal.MinValue | [DecimalConstantAttribute(...)] | 1 | 128 | -| decimal.MinValue | [DecimalConstantAttribute(...)] | 2 | 4294967295 | -| decimal.MinValue | [DecimalConstantAttribute(...)] | 3 | 4294967295 | -| decimal.MinValue | [DecimalConstantAttribute(...)] | 4 | 4294967295 | -| decimal.MinusOne | [DecimalConstantAttribute(...)] | 0 | 0 | -| decimal.MinusOne | [DecimalConstantAttribute(...)] | 1 | 128 | -| decimal.MinusOne | [DecimalConstantAttribute(...)] | 2 | 0 | -| decimal.MinusOne | [DecimalConstantAttribute(...)] | 3 | 0 | -| decimal.MinusOne | [DecimalConstantAttribute(...)] | 4 | 1 | -| decimal.MultiplicativeIdentity | [DecimalConstantAttribute(...)] | 0 | 0 | -| decimal.MultiplicativeIdentity | [DecimalConstantAttribute(...)] | 1 | 0 | -| decimal.MultiplicativeIdentity | [DecimalConstantAttribute(...)] | 2 | 0 | -| decimal.MultiplicativeIdentity | [DecimalConstantAttribute(...)] | 3 | 0 | -| decimal.MultiplicativeIdentity | [DecimalConstantAttribute(...)] | 4 | 1 | -| decimal.NegativeOne | [DecimalConstantAttribute(...)] | 0 | 0 | -| decimal.NegativeOne | [DecimalConstantAttribute(...)] | 1 | 128 | -| decimal.NegativeOne | [DecimalConstantAttribute(...)] | 2 | 0 | -| decimal.NegativeOne | [DecimalConstantAttribute(...)] | 3 | 0 | -| decimal.NegativeOne | [DecimalConstantAttribute(...)] | 4 | 1 | -| decimal.One | [DecimalConstantAttribute(...)] | 0 | 0 | -| decimal.One | [DecimalConstantAttribute(...)] | 1 | 0 | -| decimal.One | [DecimalConstantAttribute(...)] | 2 | 0 | -| decimal.One | [DecimalConstantAttribute(...)] | 3 | 0 | -| decimal.One | [DecimalConstantAttribute(...)] | 4 | 1 | -| decimal.Zero | [DecimalConstantAttribute(...)] | 0 | 0 | -| decimal.Zero | [DecimalConstantAttribute(...)] | 1 | 0 | -| decimal.Zero | [DecimalConstantAttribute(...)] | 2 | 0 | -| decimal.Zero | [DecimalConstantAttribute(...)] | 3 | 0 | -| decimal.Zero | [DecimalConstantAttribute(...)] | 4 | 0 | -| delegate* managed<Byte&,Void> System.Array.ArrayInitializeCache.GetElementConstructorEntrypoint(System.Runtime.CompilerServices.QCallTypeHandle) | [LibraryImportAttribute(...)] | 0 | QCall | -| double | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| float | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| int | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| int System.Console.CursorLeft | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| int System.Console.CursorLeft | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| int System.Console.CursorLeft | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| int System.Console.CursorLeft | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| int System.Console.CursorTop | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| int System.Console.CursorTop | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| int System.Console.CursorTop | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| int System.Console.CursorTop | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| int System.Console.LargestWindowHeight | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| int System.Console.LargestWindowHeight | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| int System.Console.LargestWindowHeight | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| int System.Console.LargestWindowHeight | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| int System.Console.LargestWindowWidth | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| int System.Console.LargestWindowWidth | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| int System.Console.LargestWindowWidth | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| int System.Console.LargestWindowWidth | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| int System.Console.WindowHeight | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| int System.Console.WindowHeight | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| int System.Console.WindowHeight | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| int System.Console.WindowHeight | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| int System.Console.WindowWidth | [UnsupportedOSPlatformAttribute(...)] | 0 | android | -| int System.Console.WindowWidth | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| int System.Console.WindowWidth | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | -| int System.Console.WindowWidth | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | -| int System.Runtime.CompilerServices.RuntimeHelpers.OffsetToStringData | [ObsoleteAttribute(...)] | 0 | OffsetToStringData has been deprecated. Use string.GetPinnableReference() instead. | -| int System.Threading.Overlapped.EventHandle | [ObsoleteAttribute(...)] | 0 | Overlapped.EventHandle is not 64-bit compatible and has been deprecated. Use EventHandleIntPtr instead. | -| int[] System.Globalization.GregorianCalendar.Eras | [NullableAttribute(...)] | 0 | 1 | -| int[] System.Globalization.HebrewCalendar.Eras | [NullableAttribute(...)] | 0 | 1 | -| int[] System.Globalization.HijriCalendar.Eras | [NullableAttribute(...)] | 0 | 1 | -| int[] System.Globalization.PersianCalendar.Eras | [NullableAttribute(...)] | 0 | 1 | -| int[] System.Globalization.StringInfo.Indexes | [NullableAttribute(...)] | 0 | 2 | -| long | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| object | [ClassInterfaceAttribute(...)] | 0 | 1 | -| object | [ComVisibleAttribute(...)] | 0 | True | -| object | [NotNullIfNotNullAttribute(...)] | 0 | address | -| object | [NotNullIfNotNullAttribute(...)] | 0 | syncLock | -| object | [NotNullIfNotNullAttribute(...)] | 0 | value | -| object | [NotNullWhenAttribute(...)] | 0 | True | -| object | [NullableAttribute(...)] | 0 | 0 | -| object | [NullableAttribute(...)] | 0 | 1 | -| object | [NullableAttribute(...)] | 0 | 2 | -| object | [NullableContextAttribute(...)] | 0 | 2 | -| object | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| object System.ArgumentOutOfRangeException.ActualValue | [NullableAttribute(...)] | 0 | 2 | -| object System.Array.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.ArraySegment`1.Enumerator.Current | [NullableAttribute(...)] | 0 | 2 | -| object System.CharEnumerator.Current | [NullableAttribute(...)] | 0 | 2 | -| object System.Collections.ArrayList.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.Collections.DictionaryEntry.Value | [NullableAttribute(...)] | 0 | 2 | -| object System.Collections.Generic.Dictionary`2.Enumerator.Current | [NullableAttribute(...)] | 0 | 2 | -| object System.Collections.Generic.Dictionary`2.Enumerator.Key | [NullableAttribute(...)] | 0 | 1 | -| object System.Collections.Generic.Dictionary`2.Enumerator.Value | [NullableAttribute(...)] | 0 | 2 | -| object System.Collections.Generic.Dictionary`2.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.Collections.Generic.Dictionary`2.KeyCollection.Enumerator.Current | [NullableAttribute(...)] | 0 | 2 | -| object System.Collections.Generic.Dictionary`2.KeyCollection.SyncRoot | [NullableAttribute(...)] | 0 | 1 | -| object System.Collections.Generic.Dictionary`2.ValueCollection.Enumerator.Current | [NullableAttribute(...)] | 0 | 2 | -| object System.Collections.Generic.Dictionary`2.ValueCollection.SyncRoot | [NullableAttribute(...)] | 0 | 1 | -| object System.Collections.Generic.HashSet`1.Enumerator.Current | [NullableAttribute(...)] | 0 | 2 | -| object System.Collections.Generic.List`1.Enumerator.Current | [NullableAttribute(...)] | 0 | 2 | -| object System.Collections.Generic.List`1.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.Collections.Generic.Queue`1.Enumerator.Current | [NullableAttribute(...)] | 0 | 2 | -| object System.Collections.Hashtable.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.Collections.IDictionary.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.Collections.IDictionaryEnumerator.Value | [NullableAttribute(...)] | 0 | 2 | -| object System.Collections.ListDictionaryInternal.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.Collections.ObjectModel.Collection`1.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.Collections.ObjectModel.ReadOnlyCollection`1.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.Collections.ObjectModel.ReadOnlyDictionary`2.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.Collections.ObjectModel.ReadOnlyDictionary`2.ValueCollection.SyncRoot | [NullableAttribute(...)] | 0 | 1 | -| object System.Delegate.Target | [NullableAttribute(...)] | 0 | 2 | -| object System.IAsyncResult.AsyncState | [NullableAttribute(...)] | 0 | 2 | -| object System.IO.Enumeration.FileSystemEnumerator`1.Current | [NullableAttribute(...)] | 0 | 2 | -| object System.Reflection.CustomAttributeTypedArgument.Value | [NullableAttribute(...)] | 0 | 2 | -| object System.Reflection.ParameterInfo.DefaultValue | [NullableAttribute(...)] | 0 | 2 | -| object System.Reflection.ParameterInfo.RawDefaultValue | [NullableAttribute(...)] | 0 | 2 | -| object System.Runtime.CompilerServices.StrongBox`1.Value | [NullableAttribute(...)] | 0 | 2 | -| object System.Runtime.Serialization.SerializationEntry.Value | [NullableAttribute(...)] | 0 | 2 | -| object System.Runtime.Serialization.SerializationInfoEnumerator.Current | [NullableAttribute(...)] | 0 | 2 | -| object System.Runtime.Serialization.SerializationInfoEnumerator.Value | [NullableAttribute(...)] | 0 | 2 | -| object System.Security.PermissionSet.SyncRoot | [NullableAttribute(...)] | 0 | 1 | -| object System.Text.StringRuneEnumerator.Current | [NullableAttribute(...)] | 0 | 2 | -| object System.Threading.Tasks.Task.AsyncState | [NullableAttribute(...)] | 0 | 2 | -| object System.Tuple`1.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.Tuple`2.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.Tuple`3.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.Tuple`4.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.Tuple`5.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.Tuple`6.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.Tuple`7.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.Tuple`8.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.ValueTuple.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.ValueTuple`1.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.ValueTuple`2.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.ValueTuple`3.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.ValueTuple`4.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.ValueTuple`5.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.ValueTuple`6.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.ValueTuple`7.Item | [NullableAttribute(...)] | 0 | 2 | -| object System.ValueTuple`8.Item | [NullableAttribute(...)] | 0 | 2 | -| object[] | [NullableAttribute(...)] | 0 | 2 | -| object[] | [NullableAttribute(...)] | 0 | [1,2] | -| object[] | [NullableAttribute(...)] | 0 | [2,1] | -| object[] System.Collections.ArrayList.ArrayListDebugView.Items | [DebuggerBrowsableAttribute(...)] | 0 | 3 | -| object[] System.Diagnostics.CodeAnalysis.StringSyntaxAttribute.Arguments | [NullableAttribute(...)] | 0 | [1,2] | -| out !0 | [MaybeNullWhenAttribute(...)] | 0 | False | -| out !0 | [NotNullWhenAttribute(...)] | 0 | True | -| out !0 | [NullableAttribute(...)] | 0 | 1 | -| out !1 | [MaybeNullWhenAttribute(...)] | 0 | False | -| out !1 | [NotNullWhenAttribute(...)] | 0 | True | -| out Microsoft.Win32.SafeHandles.SafeFileHandle | [NotNullWhenAttribute(...)] | 0 | True | -| out System.ArraySegment<!0> | [NullableAttribute(...)] | 0 | [0,1] | -| out System.Exception | [NotNullWhenAttribute(...)] | 0 | True | -| out System.Globalization.CompareInfo | [NotNullWhenAttribute(...)] | 0 | True | -| out System.Runtime.InteropServices.ComTypes.IMoniker | [NullableAttribute(...)] | 0 | 2 | -| out System.RuntimeType | [NotNullWhenAttribute(...)] | 0 | True | -| out System.Threading.EventWaitHandle | [NotNullWhenAttribute(...)] | 0 | True | -| out System.Threading.EventWaitHandle | [NullableAttribute(...)] | 0 | 2 | -| out System.Threading.Mutex | [NotNullWhenAttribute(...)] | 0 | True | -| out System.Threading.Mutex | [NullableAttribute(...)] | 0 | 2 | -| out System.Threading.Semaphore | [NotNullWhenAttribute(...)] | 0 | True | -| out System.Threading.Semaphore | [NullableAttribute(...)] | 0 | 2 | -| out System.TimeZoneInfo | [NotNullWhenAttribute(...)] | 0 | True | -| out System.TimeZoneInfo | [NullableAttribute(...)] | 0 | 2 | -| out System.Version | [NotNullWhenAttribute(...)] | 0 | True | -| out System.Version | [NullableAttribute(...)] | 0 | 2 | -| out byte[] | [NotNullWhenAttribute(...)] | 0 | True | -| out long | [NotNullWhenAttribute(...)] | 0 | True | -| out object | [MaybeNullWhenAttribute(...)] | 0 | False | -| out object | [NotNullWhenAttribute(...)] | 0 | True | -| out object | [NullableAttribute(...)] | 0 | 2 | -| out object[] | [NullableAttribute(...)] | 0 | [1,2] | -| out string | [MaybeNullWhenAttribute(...)] | 0 | False | -| out string | [NotNullWhenAttribute(...)] | 0 | True | -| out string | [NullableAttribute(...)] | 0 | 2 | -| sbyte | [CLSCompliantAttribute(...)] | 0 | False | -| sbyte | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| short | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| string | [CallerArgumentExpressionAttribute(...)] | 0 | argument | -| string | [CallerArgumentExpressionAttribute(...)] | 0 | time | -| string | [CallerArgumentExpressionAttribute(...)] | 0 | value | -| string | [DefaultMemberAttribute(...)] | 0 | Chars | -| string | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| string | [NotNullWhenAttribute(...)] | 0 | False | -| string | [NotNullWhenAttribute(...)] | 0 | True | -| string | [NullableAttribute(...)] | 0 | 0 | -| string | [NullableAttribute(...)] | 0 | 1 | -| string | [NullableAttribute(...)] | 0 | 2 | -| string | [NullableContextAttribute(...)] | 0 | 1 | -| string | [StringSyntaxAttribute(...)] | 0 | CompositeFormat | -| string | [StringSyntaxAttribute(...)] | 0 | DateOnlyFormat | -| string | [StringSyntaxAttribute(...)] | 0 | DateTimeFormat | -| string | [StringSyntaxAttribute(...)] | 0 | EnumFormat | -| string | [StringSyntaxAttribute(...)] | 0 | GuidFormat | -| string | [StringSyntaxAttribute(...)] | 0 | NumericFormat | -| string | [StringSyntaxAttribute(...)] | 0 | TimeOnlyFormat | -| string | [StringSyntaxAttribute(...)] | 0 | TimeSpanFormat | -| string | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| string System.AppContext.TargetFrameworkName | [NullableAttribute(...)] | 0 | 2 | -| string System.AppDomain.DynamicDirectory | [NullableAttribute(...)] | 0 | 2 | -| string System.AppDomain.RelativeSearchPath | [NullableAttribute(...)] | 0 | 2 | -| string System.ApplicationId.Culture | [NullableAttribute(...)] | 0 | 2 | -| string System.ApplicationId.ProcessorArchitecture | [NullableAttribute(...)] | 0 | 2 | -| string System.ArgumentException.Message | [NullableAttribute(...)] | 0 | 1 | -| string System.BadImageFormatException.Message | [NullableAttribute(...)] | 0 | 1 | -| string System.Buffers.SearchValues`1.DebuggerDisplay | [NullableAttribute(...)] | 0 | 1 | -| string System.Diagnostics.CodeAnalysis.ExperimentalAttribute.UrlFormat | [NullableAttribute(...)] | 0 | 2 | -| string System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute.Url | [NullableAttribute(...)] | 0 | 2 | -| string System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute.Url | [NullableAttribute(...)] | 0 | 2 | -| string System.Diagnostics.CodeAnalysis.SuppressMessageAttribute.Category | [NullableAttribute(...)] | 0 | 1 | -| string System.Diagnostics.CodeAnalysis.SuppressMessageAttribute.CheckId | [NullableAttribute(...)] | 0 | 1 | -| string System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.Category | [NullableAttribute(...)] | 0 | 1 | -| string System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.CheckId | [NullableAttribute(...)] | 0 | 1 | -| string System.Diagnostics.Contracts.ContractException.Failure | [NullableAttribute(...)] | 0 | 1 | -| string System.Diagnostics.Contracts.ContractOptionAttribute.Value | [NullableAttribute(...)] | 0 | 2 | -| string System.Diagnostics.DebuggerDisplayAttribute.Value | [NullableAttribute(...)] | 0 | 1 | -| string System.Diagnostics.DebuggerTypeProxyAttribute.ProxyTypeName | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| string System.Diagnostics.DebuggerTypeProxyAttribute.ProxyTypeName | [NullableAttribute(...)] | 0 | 1 | -| string System.Diagnostics.DebuggerVisualizerAttribute.VisualizerObjectSourceTypeName | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| string System.Diagnostics.DebuggerVisualizerAttribute.VisualizerTypeName | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | -| string System.Diagnostics.DebuggerVisualizerAttribute.VisualizerTypeName | [NullableAttribute(...)] | 0 | 1 | -| string System.Diagnostics.Tracing.EventFieldAttribute.Name | [NullableAttribute(...)] | 0 | 2 | -| string System.Diagnostics.Tracing.EventSource.Name | [NullableAttribute(...)] | 0 | 1 | -| string System.Environment.ProcessPath | [NullableAttribute(...)] | 0 | 2 | -| string System.Exception.Message | [NullableAttribute(...)] | 0 | 1 | -| string System.FormattableString.Format | [StringSyntaxAttribute(...)] | 0 | CompositeFormat | -| string System.Globalization.CultureInfo.InteropName | [NullableAttribute(...)] | 0 | 2 | -| string System.Globalization.CultureNotFoundException.DefaultMessage | [NullableAttribute(...)] | 0 | 1 | -| string System.Globalization.CultureNotFoundException.Message | [NullableAttribute(...)] | 0 | 1 | -| string System.IO.FileInfo.DirectoryName | [NullableAttribute(...)] | 0 | 2 | -| string System.IO.FileLoadException.Message | [NullableAttribute(...)] | 0 | 1 | -| string System.IO.FileNotFoundException.Message | [NullableAttribute(...)] | 0 | 1 | -| string System.IO.FileSystemInfo.LinkTarget | [NullableAttribute(...)] | 0 | 2 | -| string System.Int128.OverflowMessage | [NullableAttribute(...)] | 0 | 1 | -| string System.MissingMemberException.Message | [NullableAttribute(...)] | 0 | 1 | -| string System.Numerics.Vector`1.DisplayString | [NullableAttribute(...)] | 0 | 1 | -| string System.Reflection.Assembly.CodeBase | [NullableAttribute(...)] | 0 | 2 | -| string System.Reflection.Assembly.CodeBase | [ObsoleteAttribute(...)] | 0 | Assembly.CodeBase and Assembly.EscapedCodeBase are only included for .NET Framework compatibility. Use Assembly.Location. | -| string System.Reflection.Assembly.CodeBase | [RequiresAssemblyFilesAttribute(...)] | 0 | This member throws an exception for assemblies embedded in a single-file app | -| string System.Reflection.Assembly.EscapedCodeBase | [ObsoleteAttribute(...)] | 0 | Assembly.CodeBase and Assembly.EscapedCodeBase are only included for .NET Framework compatibility. Use Assembly.Location. | -| string System.Reflection.Assembly.EscapedCodeBase | [RequiresAssemblyFilesAttribute(...)] | 0 | This member throws an exception for assemblies embedded in a single-file app | -| string System.Reflection.Assembly.FullName | [NullableAttribute(...)] | 0 | 2 | -| string System.Reflection.AssemblyMetadataAttribute.Value | [NullableAttribute(...)] | 0 | 2 | -| string System.Reflection.AssemblyName.CodeBase | [ObsoleteAttribute(...)] | 0 | AssemblyName.CodeBase and AssemblyName.EscapedCodeBase are obsolete. Using them for loading an assembly is not supported. | -| string System.Reflection.AssemblyName.EscapedCodeBase | [ObsoleteAttribute(...)] | 0 | AssemblyName.CodeBase and AssemblyName.EscapedCodeBase are obsolete. Using them for loading an assembly is not supported. | -| string System.Reflection.AssemblyName.EscapedCodeBase | [RequiresAssemblyFilesAttribute(...)] | 0 | The code will return an empty string for assemblies embedded in a single-file app | -| string System.Reflection.AssemblyName.FullName | [NullableAttribute(...)] | 0 | 1 | -| string System.Reflection.Emit.AssemblyBuilder.CodeBase | [NullableAttribute(...)] | 0 | 2 | -| string System.Reflection.Emit.AssemblyBuilder.CodeBase | [ObsoleteAttribute(...)] | 0 | Assembly.CodeBase and Assembly.EscapedCodeBase are only included for .NET Framework compatibility. Use Assembly.Location instead. | -| string System.Reflection.Emit.AssemblyBuilder.CodeBase | [RequiresAssemblyFilesAttribute(...)] | 0 | This member throws an exception for assemblies embedded in a single-file app | -| string System.Reflection.Emit.RuntimeModuleBuilder.FullyQualifiedName | [RequiresAssemblyFilesAttribute(...)] | 0 | Returns <Unknown> for modules with no file path | -| string System.Reflection.Emit.RuntimeModuleBuilder.Name | [RequiresAssemblyFilesAttribute(...)] | 0 | Returns <Unknown> for modules with no file path | -| string System.Reflection.Module.FullyQualifiedName | [RequiresAssemblyFilesAttribute(...)] | 0 | Returns <Unknown> for modules with no file path | -| string System.Reflection.Module.Name | [RequiresAssemblyFilesAttribute(...)] | 0 | Returns <Unknown> for modules with no file path | -| string System.Reflection.ParameterInfo.Name | [NullableAttribute(...)] | 0 | 2 | -| string System.Reflection.RuntimeAssembly.CodeBase | [ObsoleteAttribute(...)] | 0 | Assembly.CodeBase and Assembly.EscapedCodeBase are only included for .NET Framework compatibility. Use Assembly.Location. | -| string System.Reflection.RuntimeAssembly.CodeBase | [RequiresAssemblyFilesAttribute(...)] | 0 | This member throws an exception for assemblies embedded in a single-file app | -| string System.Reflection.RuntimeModule.FullyQualifiedName | [RequiresAssemblyFilesAttribute(...)] | 0 | Returns <Unknown> for modules with no file path | -| string System.Reflection.RuntimeModule.Name | [RequiresAssemblyFilesAttribute(...)] | 0 | Returns <Unknown> for modules with no file path | -| string System.Reflection.TypeDelegator.AssemblyQualifiedName | [NullableAttribute(...)] | 0 | 2 | -| string System.Reflection.TypeDelegator.FullName | [NullableAttribute(...)] | 0 | 2 | -| string System.Reflection.TypeDelegator.Namespace | [NullableAttribute(...)] | 0 | 2 | -| string System.Runtime.CompilerServices.SwitchExpressionException.Message | [NullableAttribute(...)] | 0 | 1 | -| string System.Runtime.InteropServices.LibraryImportAttribute.LibraryName | [NullableAttribute(...)] | 0 | 1 | -| string System.Runtime.Loader.AssemblyLoadContext.Name | [NullableAttribute(...)] | 0 | 2 | -| string System.Runtime.Versioning.TargetFrameworkAttribute.FrameworkDisplayName | [NullableAttribute(...)] | 0 | 2 | -| string System.Runtime.Versioning.UnsupportedOSPlatformAttribute.Message | [NullableAttribute(...)] | 0 | 2 | -| string System.Security.SecurityElement.Tag | [NullableAttribute(...)] | 0 | 1 | -| string System.Text.Rune.DebuggerDisplay | [NullableAttribute(...)] | 0 | 1 | -| string System.Threading.Thread.Name | [NullableAttribute(...)] | 0 | 2 | -| string System.Type.AssemblyQualifiedName | [NullableAttribute(...)] | 0 | 2 | -| string System.Type.FullName | [NullableAttribute(...)] | 0 | 2 | -| string System.Type.Namespace | [NullableAttribute(...)] | 0 | 2 | -| string System.UInt128.OverflowMessage | [NullableAttribute(...)] | 0 | 1 | -| string byte.OverflowMessage | [NullableAttribute(...)] | 0 | 1 | -| string char.OverflowMessage | [NullableAttribute(...)] | 0 | 1 | -| string int.OverflowMessage | [NullableAttribute(...)] | 0 | 1 | -| string long.OverflowMessage | [NullableAttribute(...)] | 0 | 1 | -| string sbyte.OverflowMessage | [NullableAttribute(...)] | 0 | 1 | -| string short.OverflowMessage | [NullableAttribute(...)] | 0 | 1 | -| string uint.OverflowMessage | [NullableAttribute(...)] | 0 | 1 | -| string ulong.OverflowMessage | [NullableAttribute(...)] | 0 | 1 | -| string ushort.OverflowMessage | [NullableAttribute(...)] | 0 | 1 | -| string[] | [NotNullWhenAttribute(...)] | 0 | True | -| string[] | [NullableAttribute(...)] | 0 | 1 | -| string[] | [NullableAttribute(...)] | 0 | 2 | -| string[] | [NullableAttribute(...)] | 0 | [1,2] | -| string[] | [NullableAttribute(...)] | 0 | [2,1] | -| string[] | [StringSyntaxAttribute(...)] | 0 | DateOnlyFormat | -| string[] | [StringSyntaxAttribute(...)] | 0 | DateTimeFormat | -| string[] | [StringSyntaxAttribute(...)] | 0 | TimeOnlyFormat | -| string[] | [StringSyntaxAttribute(...)] | 0 | TimeSpanFormat | -| uint | [CLSCompliantAttribute(...)] | 0 | False | -| uint | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| uint System.Reflection.AssemblyAlgorithmIdAttribute.AlgorithmId | [CLSCompliantAttribute(...)] | 0 | False | -| uint System.Reflection.AssemblyFlagsAttribute.Flags | [CLSCompliantAttribute(...)] | 0 | False | -| uint System.Reflection.AssemblyFlagsAttribute.Flags | [ObsoleteAttribute(...)] | 0 | AssemblyFlagsAttribute.Flags has been deprecated. Use AssemblyFlags instead. | -| ulong | [CLSCompliantAttribute(...)] | 0 | False | -| ulong | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| ulong System.Runtime.InteropServices.SafeBuffer.ByteLength | [CLSCompliantAttribute(...)] | 0 | False | -| ushort | [CLSCompliantAttribute(...)] | 0 | False | -| ushort | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| void* | [NullableAttribute(...)] | 0 | 0 | -| void* System.Buffers.MemoryHandle.Pointer | [CLSCompliantAttribute(...)] | 0 | False | diff --git a/csharp/ql/test/library-tests/cil/attributes/attribute.ql b/csharp/ql/test/library-tests/cil/attributes/attribute.ql deleted file mode 100644 index 99ba3c8af5e..00000000000 --- a/csharp/ql/test/library-tests/cil/attributes/attribute.ql +++ /dev/null @@ -1,47 +0,0 @@ -import semmle.code.cil.Attribute -import semmle.code.cil.Declaration - -private predicate isOsSpecific(Declaration d) { - d.getFullyQualifiedName() - .matches("%" + - [ - "libobjc", "libproc", "libc", "Interop.OSReleaseFile", "Interop.Sys", - "System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal", - "System.Diagnostics.Tracing.XplatEventLogger", "System.Threading.AutoreleasePool", - "System.CLRConfig", "System.Diagnostics.Tracing.EventSource.<WriteEventString>", - "System.IO.FileSystem.<TryCloneFile>" - ] + "%") -} - -query predicate attrNoArg(string dec, string attr) { - exists(Declaration d, Attribute a | - not isOsSpecific(d) and - a.getDeclaration() = d and - not exists(a.getAnArgument()) - | - dec = d.toStringWithTypes() and - attr = a.toStringWithTypes() - ) -} - -query predicate attrArgNamed(string dec, string attr, string name, string value) { - exists(Declaration d, Attribute a | - a.getDeclaration() = d and - not isOsSpecific(d) and - a.getNamedArgument(name) = value - | - dec = d.toStringWithTypes() and - attr = a.toStringWithTypes() - ) -} - -query predicate attrArgPositional(string dec, string attr, int index, string value) { - exists(Declaration d, Attribute a | - a.getDeclaration() = d and - not isOsSpecific(d) and - a.getArgument(index) = value - | - dec = d.toStringWithTypes() and - attr = a.toStringWithTypes() - ) -} diff --git a/csharp/ql/test/library-tests/cil/attributes/options b/csharp/ql/test/library-tests/cil/attributes/options deleted file mode 100644 index 8511aa162b8..00000000000 --- a/csharp/ql/test/library-tests/cil/attributes/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: --cil diff --git a/csharp/ql/test/library-tests/cil/consistency/Handles.expected b/csharp/ql/test/library-tests/cil/consistency/Handles.expected deleted file mode 100644 index d48a89c24a3..00000000000 --- a/csharp/ql/test/library-tests/cil/consistency/Handles.expected +++ /dev/null @@ -1,14 +0,0 @@ -tooManyHandles -tooManyMatchingHandles -missingCil -csharpLocationViolation -matchingObjectMethods -| Equals(object) | System.Boolean System.Object.Equals(System.Object) | -| Equals(object, object) | System.Boolean System.Object.Equals(System.Object,System.Object) | -| GetHashCode() | System.Int32 System.Object.GetHashCode() | -| GetType() | System.Type System.Object.GetType() | -| MemberwiseClone() | System.Object System.Object.MemberwiseClone() | -| Object() | System.Void System.Object..ctor() | -| ReferenceEquals(object, object) | System.Boolean System.Object.ReferenceEquals(System.Object,System.Object) | -| ToString() | System.String System.Object.ToString() | -| ~Object() | System.Void System.Object.Finalize() | diff --git a/csharp/ql/test/library-tests/cil/consistency/Handles.ql b/csharp/ql/test/library-tests/cil/consistency/Handles.ql deleted file mode 100644 index 392d07244e2..00000000000 --- a/csharp/ql/test/library-tests/cil/consistency/Handles.ql +++ /dev/null @@ -1,68 +0,0 @@ -import csharp -import cil -import dotnet -import semmle.code.csharp.commons.QualifiedName - -class MetadataEntity extends DotNet::NamedElement, @metadata_entity { - int getHandle() { metadata_handle(this, _, result) } - - predicate hasHandle() { exists(this.getHandle()) } - - Assembly getAssembly() { metadata_handle(this, result, _) } -} - -query predicate tooManyHandles(string s) { - exists(MetadataEntity e, Assembly a, string qualifier, string name | - strictcount(int handle | metadata_handle(e, a, handle)) > 1 and - e.hasFullyQualifiedName(qualifier, name) and - s = getQualifiedName(qualifier, name) - ) -} - -private class UniqueMetadataEntity extends MetadataEntity { - UniqueMetadataEntity() { - // Tuple types such as `(,)` and `ValueTuple`2` share the same handle - not this instanceof TupleType and - not exists(string name | - this.hasFullyQualifiedName("System", name) and - name.matches("System.ValueTuple%") - ) - } -} - -query predicate tooManyMatchingHandles(string s) { - exists(UniqueMetadataEntity e, Assembly a, int handle, string qualifier, string name | - metadata_handle(e, a, handle) and - strictcount(UniqueMetadataEntity e2 | metadata_handle(e2, a, handle)) > 2 and - e.hasFullyQualifiedName(qualifier, name) and - s = getQualifiedName(qualifier, name) - ) -} - -query predicate missingCil(Element e) { - ( - e instanceof Callable - or - e instanceof Type - or - e instanceof Field - ) and - e.fromLibrary() and - e.(MetadataEntity).hasHandle() and - not exists(CIL::Element ce | ce.(MetadataEntity).matchesHandle(e)) -} - -query predicate csharpLocationViolation(Element e) { - e.fromLibrary() and - e.(MetadataEntity).hasHandle() and - not e.getALocation() = e.(MetadataEntity).getAssembly() -} - -query predicate matchingObjectMethods(string s1, string s2) { - exists(Callable m1, CIL::Method m2 | - m1.getDeclaringType().hasFullyQualifiedName("System", "Object") and - m1.matchesHandle(m2) and - s1 = m1.toStringWithTypes() and - s2 = m2.toStringWithTypes() - ) -} diff --git a/csharp/ql/test/library-tests/cil/consistency/Program.cs b/csharp/ql/test/library-tests/cil/consistency/Program.cs deleted file mode 100644 index e867fdc0718..00000000000 --- a/csharp/ql/test/library-tests/cil/consistency/Program.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System; - -class Test -{ - static void Main(string[] args) - { - } -} diff --git a/csharp/ql/test/library-tests/cil/consistency/consistency.expected b/csharp/ql/test/library-tests/cil/consistency/consistency.expected deleted file mode 100644 index 8932c2ec713..00000000000 --- a/csharp/ql/test/library-tests/cil/consistency/consistency.expected +++ /dev/null @@ -1,17 +0,0 @@ -| Finalize | Overridden method from System.Object is not in a base type | -| System.Int32 System.Math.Sign(System.IntPtr): neg, ldarg.0 [push: 1, pop: 0]; ldc.i4.s [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; ldc.i4.8 [push: 1, pop: 0]; mul [push: 1, pop: 2]; ldc.i4.1 [push: 1, pop: 0]; sub [push: 1, pop: 2]; and [push: 1, pop: 2]; shr [push: 1, pop: 2]; conv.i8 [push: 1, pop: 1]; ldarg.0 [push: 1, pop: 0]; neg [push: 1, pop: 1] | Expression is missing getType() | -| System.Int32 System.Runtime.InteropServices.Marshal.AddRef(System.IntPtr): calli, ldarg.0 [push: 1, pop: 0]; ldstr [push: 1, pop: 0]; call [push: 0, pop: 2]; ldarg.0 [push: 1, pop: 0]; ldind.i [push: 1, pop: 1]; sizeof [push: 1, pop: 0]; add [push: 1, pop: 2]; ldind.i [push: 1, pop: 1]; stloc.0 [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldloc.0 [push: 1, pop: 0]; calli [push: 1, pop: 2] | Expression is missing getType() | -| System.Int32 System.Runtime.InteropServices.Marshal.QueryInterface(System.IntPtr,System.Guid,System.IntPtr): calli, ldarg.0 [push: 1, pop: 0]; ldstr [push: 1, pop: 0]; call [push: 0, pop: 2]; ldarg.1 [push: 1, pop: 0]; stloc.1 [push: 0, pop: 1]; ldloc.1 [push: 1, pop: 0]; conv.u [push: 1, pop: 1]; stloc.0 [push: 0, pop: 1]; ldarg.2 [push: 1, pop: 0]; stloc.3 [push: 0, pop: 1]; ldloc.3 [push: 1, pop: 0]; conv.u [push: 1, pop: 1]; stloc.2 [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldind.i [push: 1, pop: 1]; ldind.i [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldloc.0 [push: 1, pop: 0]; ldloc.2 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; calli [push: 1, pop: 4] | Expression is missing getType() | -| System.Int32 System.Runtime.InteropServices.Marshal.Release(System.IntPtr): calli, ldarg.0 [push: 1, pop: 0]; ldstr [push: 1, pop: 0]; call [push: 0, pop: 2]; ldarg.0 [push: 1, pop: 0]; ldind.i [push: 1, pop: 1]; ldc.i4.2 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; sizeof [push: 1, pop: 0]; mul [push: 1, pop: 2]; add [push: 1, pop: 2]; ldind.i [push: 1, pop: 1]; stloc.0 [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldloc.0 [push: 1, pop: 0]; calli [push: 1, pop: 2] | Expression is missing getType() | -| System.Int32 System.Text.UnicodeEncoding.GetByteCount(System.Char*,System.Int32,System.Text.EncoderNLS): dup, ldarg.2 [push: 1, pop: 0]; ldc.i4.1 [push: 1, pop: 0]; shl [push: 1, pop: 2]; stloc.0 [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; bge.s [push: 0, pop: 2]; ldstr [push: 1, pop: 0]; call [push: 1, pop: 0]; newobj [push: 1, pop: 2]; throw [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; stloc.1 [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; ldarg.2 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; ldc.i4.2 [push: 1, pop: 0]; mul [push: 1, pop: 2]; add [push: 1, pop: 2]; stloc.2 [push: 0, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; stloc.3 [push: 0, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldnull [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; brfalse [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; stloc.3 [push: 0, pop: 1]; ldloc.3 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; ble.s [push: 0, pop: 2]; ldloc.0 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; add [push: 1, pop: 2]; stloc.0 [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; brfalse [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; ble.s [push: 0, pop: 2]; call [push: 1, pop: 0]; ldarg.0 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; ldarg.3 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; dup [push: 2, pop: 1]; brtrue.s [push: 0, pop: 1]; pop [push: 0, pop: 1]; ldnull [push: 1, pop: 0]; br.s [push: 0, pop: 0]; call [push: 1, pop: 1]; call [push: 1, pop: 3]; newobj [push: 1, pop: 1]; throw [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.1 [push: 1, pop: 0]; ldloc.2 [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; br [push: 0, pop: 0]; ldloc.s [push: 1, pop: 0]; brtrue [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; ldsfld [push: 1, pop: 0]; xor [push: 1, pop: 2]; brfalse [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; conv.u8 [push: 1, pop: 1]; ldc.i4.7 [push: 1, pop: 0]; conv.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brtrue [push: 0, pop: 1]; ldloc.3 [push: 1, pop: 0]; brtrue [push: 0, pop: 1]; ldloc.2 [push: 1, pop: 0]; ldc.i4.3 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; ldc.i4.2 [push: 1, pop: 0]; mul [push: 1, pop: 2]; sub [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; br [push: 0, pop: 0]; ldc.i8 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldind.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldc.i8 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldind.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; ldc.i8 [push: 1, pop: 0]; xor [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i8 [push: 1, pop: 0]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i8 [push: 1, pop: 0]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; conv.u8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; conv.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brtrue.s [push: 0, pop: 1]; ldc.i8 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldind.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; ldsfld [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldc.i8 [push: 1, pop: 0]; bne.un.s [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; ldc.i4.8 [push: 1, pop: 0]; add [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; blt.un [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; ldloc.2 [push: 1, pop: 0]; bge.un [push: 0, pop: 2]; ldarg.1 [push: 1, pop: 0]; ldind.u2 [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldloc.0 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; add [push: 1, pop: 2]; stloc.0 [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; blt [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; bgt [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; bgt.s [push: 0, pop: 2]; ldloc.3 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; ble.s [push: 0, pop: 2]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; stloc.0 [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; brfalse.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; br.s [push: 0, pop: 0]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.1 [push: 1, pop: 0]; ldloc.2 [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.3 [push: 1, pop: 0]; ldloca.s [push: 1, pop: 0]; callvirt [push: 1, pop: 3]; pop [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; stloc.3 [push: 0, pop: 1]; br [push: 0, pop: 0]; ldloc.s [push: 1, pop: 0]; stloc.3 [push: 0, pop: 1]; br [push: 0, pop: 0]; ldloc.3 [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; stloc.0 [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; brfalse.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; br.s [push: 0, pop: 0]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.1 [push: 1, pop: 0]; ldloc.2 [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldloca.s [push: 1, pop: 0]; callvirt [push: 1, pop: 3]; pop [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; stloc.3 [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldloc.3 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; ble.s [push: 0, pop: 2]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; brfalse.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; br.s [push: 0, pop: 0]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.1 [push: 1, pop: 0]; ldloc.2 [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.3 [push: 1, pop: 0]; ldloca.s [push: 1, pop: 0]; callvirt [push: 1, pop: 3]; pop [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; stloc.0 [push: 0, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; stloc.3 [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; br.s [push: 0, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; dup [push: 2, pop: 1] | Expression is missing getType() | -| System.Int32 System.Text.UnicodeEncoding.GetBytes(System.Char*,System.Int32,System.Byte*,System.Int32,System.Text.EncoderNLS): dup, ldc.i4.0 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; stloc.2 [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; ldarg.s [push: 1, pop: 0]; add [push: 1, pop: 2]; stloc.3 [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; ldarg.2 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; ldc.i4.2 [push: 1, pop: 0]; mul [push: 1, pop: 2]; add [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldnull [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; brfalse [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; stloc.0 [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; brfalse [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; ble.s [push: 0, pop: 2]; ldarg.s [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; brfalse.s [push: 0, pop: 1]; call [push: 1, pop: 0]; ldarg.0 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; ldarg.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; dup [push: 2, pop: 1]; brtrue.s [push: 0, pop: 1]; pop [push: 0, pop: 1]; ldnull [push: 1, pop: 0]; br.s [push: 0, pop: 0]; call [push: 1, pop: 1]; call [push: 1, pop: 3]; newobj [push: 1, pop: 1]; throw [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldarg.s [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; br [push: 0, pop: 0]; ldloc.1 [push: 1, pop: 0]; brtrue [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; ldsfld [push: 1, pop: 0]; xor [push: 1, pop: 2]; brfalse [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; conv.u8 [push: 1, pop: 1]; ldc.i4.7 [push: 1, pop: 0]; conv.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brtrue [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; brtrue [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; ldc.i4.3 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; ldc.i4.2 [push: 1, pop: 0]; mul [push: 1, pop: 2]; sub [push: 1, pop: 2]; ldloc.3 [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; sub [push: 1, pop: 2]; ldc.i4.1 [push: 1, pop: 0]; div [push: 1, pop: 2]; conv.i8 [push: 1, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; shr [push: 1, pop: 2]; ldloc.s [push: 1, pop: 0]; ldarg.1 [push: 1, pop: 0]; sub [push: 1, pop: 2]; ldc.i4.2 [push: 1, pop: 0]; div [push: 1, pop: 2]; conv.i8 [push: 1, pop: 1]; blt.s [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; ldarg.1 [push: 1, pop: 0]; sub [push: 1, pop: 2]; ldc.i4.2 [push: 1, pop: 0]; div [push: 1, pop: 2]; conv.i8 [push: 1, pop: 1]; br.s [push: 0, pop: 0]; ldloc.3 [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; sub [push: 1, pop: 2]; ldc.i4.1 [push: 1, pop: 0]; div [push: 1, pop: 2]; conv.i8 [push: 1, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; shr [push: 1, pop: 2]; ldc.i4.2 [push: 1, pop: 0]; conv.i8 [push: 1, pop: 1]; mul [push: 1, pop: 2]; conv.i [push: 1, pop: 1]; add [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; br [push: 0, pop: 0]; ldc.i8 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldind.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldc.i8 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldind.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; ldc.i8 [push: 1, pop: 0]; xor [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i8 [push: 1, pop: 0]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i8 [push: 1, pop: 0]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; conv.u8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; conv.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brtrue.s [push: 0, pop: 1]; ldc.i8 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldind.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; ldsfld [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldc.i8 [push: 1, pop: 0]; bne.un.s [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldind.i8 [push: 1, pop: 1]; call [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; ldc.i4.8 [push: 1, pop: 0]; add [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i4.8 [push: 1, pop: 0]; add [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; blt.un [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; bge.un [push: 0, pop: 2]; ldarg.1 [push: 1, pop: 0]; ldind.u2 [push: 1, pop: 1]; stloc.1 [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.1 [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; blt [push: 0, pop: 2]; ldloc.1 [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; bgt [push: 0, pop: 2]; ldloc.1 [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; bgt.s [push: 0, pop: 2]; ldloc.0 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; ble.s [push: 0, pop: 2]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; brfalse.s [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; br.s [push: 0, pop: 0]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldarg.s [push: 1, pop: 0]; ldc.i4.1 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.0 [push: 1, pop: 0]; ldloca.s [push: 1, pop: 0]; callvirt [push: 1, pop: 3]; pop [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; br [push: 0, pop: 0]; ldloc.1 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; br [push: 0, pop: 0]; ldloc.0 [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; brfalse.s [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; br.s [push: 0, pop: 0]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldarg.s [push: 1, pop: 0]; ldc.i4.1 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.1 [push: 1, pop: 0]; ldloca.s [push: 1, pop: 0]; callvirt [push: 1, pop: 3]; pop [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; br [push: 0, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldc.i4.3 [push: 1, pop: 0]; add [push: 1, pop: 2]; ldloc.3 [push: 1, pop: 0]; blt.un.s [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; pop [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; pop [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; ldc.i4.2 [push: 1, pop: 0]; mul [push: 1, pop: 2]; sub [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldarg.s [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ceq [push: 1, pop: 2]; call [push: 0, pop: 3]; ldc.i4.0 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; br [push: 0, pop: 0]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; brfalse.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.8 [push: 1, pop: 0]; shr [push: 1, pop: 2]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; br.s [push: 0, pop: 0]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.8 [push: 1, pop: 0]; shr [push: 1, pop: 2]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; ldc.i4.0 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldloc.0 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; ble.s [push: 0, pop: 2]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; brfalse.s [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; br.s [push: 0, pop: 0]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldarg.s [push: 1, pop: 0]; ldc.i4.1 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.0 [push: 1, pop: 0]; ldloca.s [push: 1, pop: 0]; callvirt [push: 1, pop: 3]; pop [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; ldloc.3 [push: 1, pop: 0]; blt.un.s [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; pop [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldarg.s [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ceq [push: 1, pop: 2]; call [push: 0, pop: 3]; br.s [push: 0, pop: 0]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; brfalse.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.1 [push: 1, pop: 0]; ldc.i4.8 [push: 1, pop: 0]; shr [push: 1, pop: 2]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.1 [push: 1, pop: 0]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; br.s [push: 0, pop: 0]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.1 [push: 1, pop: 0]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.1 [push: 1, pop: 0]; ldc.i4.8 [push: 1, pop: 0]; shr [push: 1, pop: 2]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; br.s [push: 0, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; dup [push: 2, pop: 1] | Expression is missing getType() | -| System.IntPtr System.IntPtr.CopySign(System.IntPtr,System.IntPtr): neg, ldarg.0 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; bge.s [push: 0, pop: 2]; ldloc.0 [push: 1, pop: 0]; neg [push: 1, pop: 1] | Expression is missing getType() | -| System.IntPtr System.IntPtr.CopySign(System.IntPtr,System.IntPtr): neg, ldarg.0 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; bge.s [push: 0, pop: 2]; ldloc.0 [push: 1, pop: 0]; neg [push: 1, pop: 1]; stloc.0 [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; blt.s [push: 0, pop: 2]; ldloc.0 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; bge.s [push: 0, pop: 2]; call [push: 0, pop: 0]; ldloc.0 [push: 1, pop: 0]; ret [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; neg [push: 1, pop: 1] | Expression is missing getType() | -| System.IntPtr System.IntPtr.MaxMagnitude(System.IntPtr,System.IntPtr): neg, ldarg.0 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; bge.s [push: 0, pop: 2]; ldloc.0 [push: 1, pop: 0]; neg [push: 1, pop: 1] | Expression is missing getType() | -| System.IntPtr System.IntPtr.MaxMagnitude(System.IntPtr,System.IntPtr): neg, ldarg.0 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; bge.s [push: 0, pop: 2]; ldloc.0 [push: 1, pop: 0]; neg [push: 1, pop: 1]; stloc.0 [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; bge.s [push: 0, pop: 2]; ldarg.0 [push: 1, pop: 0]; ret [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; stloc.1 [push: 0, pop: 1]; ldloc.1 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; bge.s [push: 0, pop: 2]; ldloc.1 [push: 1, pop: 0]; neg [push: 1, pop: 1] | Expression is missing getType() | -| System.IntPtr System.IntPtr.MinMagnitude(System.IntPtr,System.IntPtr): neg, ldarg.0 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; bge.s [push: 0, pop: 2]; ldloc.0 [push: 1, pop: 0]; neg [push: 1, pop: 1] | Expression is missing getType() | -| System.IntPtr System.IntPtr.MinMagnitude(System.IntPtr,System.IntPtr): neg, ldarg.0 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; bge.s [push: 0, pop: 2]; ldloc.0 [push: 1, pop: 0]; neg [push: 1, pop: 1]; stloc.0 [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; bge.s [push: 0, pop: 2]; ldarg.1 [push: 1, pop: 0]; ret [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; stloc.1 [push: 0, pop: 1]; ldloc.1 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; bge.s [push: 0, pop: 2]; ldloc.1 [push: 1, pop: 0]; neg [push: 1, pop: 1] | Expression is missing getType() | -| System.IntPtr System.IntPtr.op_UnaryNegation(System.IntPtr): neg, ldarg.0 [push: 1, pop: 0]; neg [push: 1, pop: 1] | Expression is missing getType() | -| System.String System.Exception.get_Source(): dup, ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; dup [push: 2, pop: 1]; brtrue.s [push: 0, pop: 1]; pop [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldarg.0 [push: 1, pop: 0]; call [push: 1, pop: 1]; brtrue.s [push: 0, pop: 1]; ldnull [push: 1, pop: 0]; br.s [push: 0, pop: 0]; ldarg.0 [push: 1, pop: 0]; call [push: 1, pop: 1]; dup [push: 2, pop: 1]; brtrue.s [push: 0, pop: 1]; pop [push: 0, pop: 1]; ldnull [push: 1, pop: 0]; br.s [push: 0, pop: 0]; callvirt [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; dup [push: 2, pop: 1]; brtrue.s [push: 0, pop: 1]; pop [push: 0, pop: 1]; ldstr [push: 1, pop: 0]; dup [push: 2, pop: 1] | Expression is missing getType() | -| System.String System.Threading.TimerQueueTimer.get_DisplayString(): dup, ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; dup [push: 2, pop: 1]; brtrue.s [push: 0, pop: 1]; pop [push: 0, pop: 1]; ldnull [push: 1, pop: 0]; br.s [push: 0, pop: 0]; callvirt [push: 1, pop: 1]; stloc.0 [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; brfalse.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldstr [push: 1, pop: 0]; call [push: 1, pop: 2]; stloc.0 [push: 0, pop: 1]; ldc.i4.s [push: 1, pop: 0]; newarr [push: 1, pop: 1]; dup [push: 2, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; ldstr [push: 1, pop: 0]; stelem.ref [push: 0, pop: 3]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; ldc.i4.m1 [push: 1, pop: 0]; beq.s [push: 0, pop: 2]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; conv.r.un [push: 1, pop: 1]; conv.r8 [push: 1, pop: 1]; call [push: 1, pop: 1]; box [push: 1, pop: 1]; br.s [push: 0, pop: 0]; ldstr [push: 1, pop: 0]; dup [push: 2, pop: 1] | Expression is missing getType() | -| System.String System.Threading.TimerQueueTimer.get_DisplayString(): dup, ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; dup [push: 2, pop: 1]; brtrue.s [push: 0, pop: 1]; pop [push: 0, pop: 1]; ldnull [push: 1, pop: 0]; br.s [push: 0, pop: 0]; callvirt [push: 1, pop: 1]; stloc.0 [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; brfalse.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldstr [push: 1, pop: 0]; call [push: 1, pop: 2]; stloc.0 [push: 0, pop: 1]; ldc.i4.s [push: 1, pop: 0]; newarr [push: 1, pop: 1]; dup [push: 2, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; ldstr [push: 1, pop: 0]; stelem.ref [push: 0, pop: 3]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; ldc.i4.m1 [push: 1, pop: 0]; beq.s [push: 0, pop: 2]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; conv.r.un [push: 1, pop: 1]; conv.r8 [push: 1, pop: 1]; call [push: 1, pop: 1]; box [push: 1, pop: 1]; br.s [push: 0, pop: 0]; ldstr [push: 1, pop: 0]; dup [push: 2, pop: 1]; brtrue.s [push: 0, pop: 1]; pop [push: 0, pop: 1]; ldnull [push: 1, pop: 0]; br.s [push: 0, pop: 0]; callvirt [push: 1, pop: 1]; stelem.ref [push: 0, pop: 3]; dup [push: 2, pop: 1]; ldc.i4.2 [push: 1, pop: 0]; ldstr [push: 1, pop: 0]; stelem.ref [push: 0, pop: 3]; dup [push: 2, pop: 1]; ldc.i4.3 [push: 1, pop: 0]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; ldc.i4.m1 [push: 1, pop: 0]; beq.s [push: 0, pop: 2]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; conv.r.un [push: 1, pop: 1]; conv.r8 [push: 1, pop: 1]; call [push: 1, pop: 1]; box [push: 1, pop: 1]; br.s [push: 0, pop: 0]; ldstr [push: 1, pop: 0]; dup [push: 2, pop: 1] | Expression is missing getType() | diff --git a/csharp/ql/test/library-tests/cil/consistency/consistency.ql b/csharp/ql/test/library-tests/cil/consistency/consistency.ql deleted file mode 100644 index 323be193c14..00000000000 --- a/csharp/ql/test/library-tests/cil/consistency/consistency.ql +++ /dev/null @@ -1,5 +0,0 @@ -import cil -import semmle.code.cil.ConsistencyChecks - -from ConsistencyViolation v -select v, v.getMessage() diff --git a/csharp/ql/test/library-tests/cil/consistency/options b/csharp/ql/test/library-tests/cil/consistency/options deleted file mode 100644 index 8511aa162b8..00000000000 --- a/csharp/ql/test/library-tests/cil/consistency/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: --cil diff --git a/csharp/ql/test/library-tests/cil/dataflow/CallableReturns.expected b/csharp/ql/test/library-tests/cil/dataflow/CallableReturns.expected deleted file mode 100644 index 46f4fe51f68..00000000000 --- a/csharp/ql/test/library-tests/cil/dataflow/CallableReturns.expected +++ /dev/null @@ -1,113 +0,0 @@ -stubs -alwaysNull -| System.Object Dataflow.NullMethods.ReturnsNull2() | 0: ldarg.0, 1: call Dataflow.NullMethods.ReturnsNull, 2: ret | -| System.Object Dataflow.NullMethods.ReturnsNull() | 0: ldnull, 1: ret | -| System.Object Dataflow.NullMethods.ReturnsNullIndirect() | 0: ldarg.0, 1: call Dataflow.NullMethods.ReturnsNull, 2: ret | -| System.Object Dataflow.NullMethods.VirtualReturnsNull() | 0: ldnull, 1: ret | -| System.Object Dataflow.NullMethods.get_NullProperty() | 0: ldnull, 1: ret | -| System.Object Dataflow.NullMethods.get_VirtualNullProperty() | 0: ldnull, 1: ret | -| System.Object System.Collections.EmptyReadOnlyDictionaryInternal.get_Item(System.Object) | 0: ldarg.1, 1: ldstr "key", 2: call System.ArgumentNullException.ThrowIfNull, 3: ldnull, 4: ret | -alwaysNonNull -| System.ArgumentException System.ThrowHelper.GetAddingDuplicateWithKeyArgumentException(System.Object) | -| System.ArgumentException System.ThrowHelper.GetWrongKeyTypeArgumentException(System.Object,System.Type) | -| System.ArgumentException System.ThrowHelper.GetWrongValueTypeArgumentException(System.Object,System.Type) | -| System.Collections.Generic.KeyNotFoundException System.ThrowHelper.GetKeyNotFoundException(System.Object) | -| System.Exception System.ThrowHelper.CreateEndOfFileException() | -| System.Exception System.ThrowHelper.GetArraySegmentCtorValidationFailedException(System.Array,System.Int32,System.Int32) | -| System.InvalidOperationException System.ThrowHelper.GetInvalidOperationException_EnumCurrent(System.Int32) | -| System.Object Dataflow.NonNullMethods.ReturnsNonNull2() | -| System.Object Dataflow.NonNullMethods.ReturnsNonNull() | -| System.Object Dataflow.NonNullMethods.ReturnsNonNullIndirect() | -| System.Object Dataflow.NonNullMethods.get_VirtualNonNull() | -| System.Object Dataflow.NonNullMethods.get_VirtualNonNullProperty() | -| System.Reflection.AmbiguousMatchException System.ThrowHelper.GetAmbiguousMatchException(System.Attribute) | -| System.Reflection.AmbiguousMatchException System.ThrowHelper.GetAmbiguousMatchException(System.Reflection.MemberInfo) | -| System.String Dataflow.NonNullMethods.get_NonNullProperty2() | -| System.String System.ThrowHelper.GetArgumentName(System.ExceptionArgument) | -| System.Text.Encoder System.Text.ASCIIEncoding.GetEncoder() | -| System.Text.Encoder System.Text.Encoding.GetEncoder() | -| System.Text.Encoder System.Text.Latin1Encoding.GetEncoder() | -| System.Text.Encoder System.Text.UTF7Encoding.GetEncoder() | -| System.Text.Encoder System.Text.UTF8Encoding.GetEncoder() | -| System.Text.Encoder System.Text.UTF32Encoding.GetEncoder() | -| System.Text.Encoder System.Text.UnicodeEncoding.GetEncoder() | -alwaysThrows -| System.Object Dataflow.ThrowingMethods.AlwaysThrows() | System.InvalidOperationException | 0: newobj System.InvalidOperationException..ctor, 1: throw | -| System.Object Dataflow.ThrowingMethods.VirtualThrows() | System.Exception | 0: newobj System.Exception..ctor, 1: throw | -| System.Object Dataflow.ThrowingMethods.get_ThrowProperty() | System.Exception | 0: newobj System.Exception..ctor, 1: throw | -| System.Object Dataflow.ThrowingMethods.get_VirtualThrowProperty() | System.Exception | 0: newobj System.Exception..ctor, 1: throw | -| System.Object System.ValueTuple.get_Item(System.Int32) | System.IndexOutOfRangeException | 0: newobj System.IndexOutOfRangeException..ctor, 1: throw | -| System.Void System.Reflection.InvokerEmitUtil.ThrowHelper.Throw_NullReference_InvokeNullRefReturned() | System.NullReferenceException | 0: call System.SR.get_NullReference_InvokeNullRefReturned, 1: newobj System.NullReferenceException..ctor, 2: throw | -| System.Void System.ThrowHelper.ArgumentOutOfRangeException_Enum_Value() | System.ArgumentOutOfRangeException | 0: ldstr "value", 1: call System.SR.get_ArgumentOutOfRange_Enum, 2: newobj System.ArgumentOutOfRangeException..ctor, 3: throw | -| System.Void System.ThrowHelper.ThrowAccessViolationException() | System.AccessViolationException | 0: newobj System.AccessViolationException..ctor, 1: throw | -| System.Void System.ThrowHelper.ThrowAddingDuplicateWithKeyArgumentException`1(!0) | System.ArgumentException | 0: ldarg.0, 1: box, 2: call System.ThrowHelper.GetAddingDuplicateWithKeyArgumentException, 3: throw | -| System.Void System.ThrowHelper.ThrowAggregateException(System.Collections.Generic.List<System.Exception>) | System.AggregateException | 0: ldarg.0, 1: newobj System.AggregateException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowArgumentException_Arg_CannotBeNaN() | System.ArgumentException | 0: call System.SR.get_Arg_CannotBeNaN, 1: newobj System.ArgumentException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowArgumentException_ArgumentNull_TypedRefType() | System.ArgumentNullException | 0: ldstr "value", 1: call System.SR.get_ArgumentNull_TypedRefType, 2: newobj System.ArgumentNullException..ctor, 3: throw | -| System.Void System.ThrowHelper.ThrowArgumentException_Argument_IncompatibleArrayType() | System.ArgumentException | 0: call System.SR.get_Argument_IncompatibleArrayType, 1: newobj System.ArgumentException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowArgumentException_BadComparer(System.Object) | System.ArgumentException | 0: call System.SR.get_Arg_BogusIComparer, 1: ldarg.0, 2: call System.SR.Format, 3: newobj System.ArgumentException..ctor, 4: throw | -| System.Void System.ThrowHelper.ThrowArgumentException_CannotExtractScalar(System.ExceptionArgument) | System.ArgumentException | 0: ldc.i4.s 31, 1: ldarg.0, 2: call System.ThrowHelper.GetArgumentException, 3: throw | -| System.Void System.ThrowHelper.ThrowArgumentException_DestinationTooShort() | System.ArgumentException | 0: call System.SR.get_Argument_DestinationTooShort, 1: ldstr "destination", 2: newobj System.ArgumentException..ctor, 3: throw | -| System.Void System.ThrowHelper.ThrowArgumentException_HandleNotAsync(System.String) | System.ArgumentException | 0: call System.SR.get_Arg_HandleNotAsync, 1: ldarg.0, 2: newobj System.ArgumentException..ctor, 3: throw | -| System.Void System.ThrowHelper.ThrowArgumentException_HandleNotSync(System.String) | System.ArgumentException | 0: call System.SR.get_Arg_HandleNotSync, 1: ldarg.0, 2: newobj System.ArgumentException..ctor, 3: throw | -| System.Void System.ThrowHelper.ThrowArgumentException_InvalidHandle(System.String) | System.ArgumentException | 0: call System.SR.get_Arg_InvalidHandle, 1: ldarg.0, 2: newobj System.ArgumentException..ctor, 3: throw | -| System.Void System.ThrowHelper.ThrowArgumentException_OverlapAlignmentMismatch() | System.ArgumentException | 0: call System.SR.get_Argument_OverlapAlignmentMismatch, 1: newobj System.ArgumentException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowArgumentException_TupleIncorrectType(System.Object) | System.ArgumentException | 0: call System.SR.get_ArgumentException_ValueTupleIncorrectType, 1: ldarg.0, 2: callvirt System.Object.GetType, 3: call System.SR.Format, 4: ldstr "other", 5: newobj System.ArgumentException..ctor, 6: throw | -| System.Void System.ThrowHelper.ThrowArgumentNullException(System.ExceptionArgument) | System.ArgumentNullException | 0: ldarg.0, 1: call System.ThrowHelper.GetArgumentName, 2: newobj System.ArgumentNullException..ctor, 3: throw | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRangeException() | System.ArgumentOutOfRangeException | 0: newobj System.ArgumentOutOfRangeException..ctor, 1: throw | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRangeException(System.ExceptionArgument) | System.ArgumentOutOfRangeException | 0: ldarg.0, 1: call System.ThrowHelper.GetArgumentName, 2: newobj System.ArgumentOutOfRangeException..ctor, 3: throw | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRangeException_NeedNonNegNum(System.String) | System.ArgumentOutOfRangeException | 0: ldarg.0, 1: call System.SR.get_ArgumentOutOfRange_NeedNonNegNum, 2: newobj System.ArgumentOutOfRangeException..ctor, 3: throw | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRangeException_PrecisionTooLarge() | System.ArgumentOutOfRangeException | 0: ldstr "precision", 1: call System.SR.get_Argument_PrecisionTooLarge, 2: ldc.i4.s 31, 3: box, 4: call System.SR.Format, 5: newobj System.ArgumentOutOfRangeException..ctor, 6: throw | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRangeException_SymbolDoesNotFit() | System.ArgumentOutOfRangeException | 0: ldstr "symbol", 1: call System.SR.get_Argument_BadFormatSpecifier, 2: newobj System.ArgumentOutOfRangeException..ctor, 3: throw | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRange_BadHourMinuteSecond() | System.ArgumentOutOfRangeException | 0: ldnull, 1: call System.SR.get_ArgumentOutOfRange_BadHourMinuteSecond, 2: newobj System.ArgumentOutOfRangeException..ctor, 3: throw | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRange_BadYearMonthDay() | System.ArgumentOutOfRangeException | 0: ldnull, 1: call System.SR.get_ArgumentOutOfRange_BadYearMonthDay, 2: newobj System.ArgumentOutOfRangeException..ctor, 3: throw | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRange_DayNumber(System.Int32) | System.ArgumentOutOfRangeException | 0: ldstr "dayNumber", 1: ldarg.0, 2: box, 3: call System.SR.get_ArgumentOutOfRange_DayNumber, 4: newobj System.ArgumentOutOfRangeException..ctor, 5: throw | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRange_IndexMustBeLessException() | System.ArgumentOutOfRangeException | 0: ldc.i4.s 31, 1: ldc.i4.1, 2: call System.ThrowHelper.GetArgumentOutOfRangeException, 3: throw | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRange_IndexMustBeLessOrEqualException() | System.ArgumentOutOfRangeException | 0: ldc.i4.s 31, 1: ldc.i4.0, 2: call System.ThrowHelper.GetArgumentOutOfRangeException, 3: throw | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRange_Month(System.Int32) | System.ArgumentOutOfRangeException | 0: ldstr "month", 1: ldarg.0, 2: box, 3: call System.SR.get_ArgumentOutOfRange_Month, 4: newobj System.ArgumentOutOfRangeException..ctor, 5: throw | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRange_Range`1(System.String,!0,!0,!0) | System.ArgumentOutOfRangeException | 0: ldarg.0, 1: ldarg.1, 2: box, 3: call System.SR.get_ArgumentOutOfRange_Range, 4: ldarg.2, 5: box, 6: ldarg.3, 7: box, 8: call System.SR.Format, 9: newobj System.ArgumentOutOfRangeException..ctor, 10: throw | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRange_TimeSpanTooLong() | System.ArgumentOutOfRangeException | 0: ldnull, 1: call System.SR.get_Overflow_TimeSpanTooLong, 2: newobj System.ArgumentOutOfRangeException..ctor, 3: throw | -| System.Void System.ThrowHelper.ThrowArgumentOutOfRange_Year() | System.ArgumentOutOfRangeException | 0: ldc.i4.s 31, 1: ldc.i4.5, 2: call System.ThrowHelper.GetArgumentOutOfRangeException, 3: throw | -| System.Void System.ThrowHelper.ThrowArraySegmentCtorValidationFailedExceptions(System.Array,System.Int32,System.Int32) | System.Exception | 0: ldarg.0, 1: ldarg.1, 2: ldarg.2, 3: call System.ThrowHelper.GetArraySegmentCtorValidationFailedException, 4: throw | -| System.Void System.ThrowHelper.ThrowArrayTypeMismatchException() | System.ArrayTypeMismatchException | 0: newobj System.ArrayTypeMismatchException..ctor, 1: throw | -| System.Void System.ThrowHelper.ThrowCountArgumentOutOfRange_ArgumentOutOfRange_Count() | System.ArgumentOutOfRangeException | 0: ldc.i4.s 31, 1: ldc.i4.4, 2: call System.ThrowHelper.GetArgumentOutOfRangeException, 3: throw | -| System.Void System.ThrowHelper.ThrowEndOfFileException() | System.Exception | 0: call System.ThrowHelper.CreateEndOfFileException, 1: throw | -| System.Void System.ThrowHelper.ThrowFormatException_BadBoolean(System.ReadOnlySpan<System.Char>) | System.FormatException | 0: call System.SR.get_Format_BadBoolean, 1: ldarg.0, 2: newobj System.String..ctor, 3: call System.SR.Format, 4: newobj System.FormatException..ctor, 5: throw | -| System.Void System.ThrowHelper.ThrowFormatException_BadFormatSpecifier() | System.FormatException | 0: call System.SR.get_Argument_BadFormatSpecifier, 1: newobj System.FormatException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowFormatException_NeedSingleChar() | System.FormatException | 0: call System.SR.get_Format_NeedSingleChar, 1: newobj System.FormatException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowFormatIndexOutOfRange() | System.FormatException | 0: call System.SR.get_Format_IndexOutOfRange, 1: newobj System.FormatException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowFormatInvalidString() | System.FormatException | 0: call System.SR.get_Format_InvalidString, 1: newobj System.FormatException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowIndexArgumentOutOfRange_NeedNonNegNumException() | System.ArgumentOutOfRangeException | 0: ldc.i4.s 31, 1: ldc.i4.s 31, 2: call System.ThrowHelper.GetArgumentOutOfRangeException, 3: throw | -| System.Void System.ThrowHelper.ThrowIndexOutOfRangeException() | System.IndexOutOfRangeException | 0: newobj System.IndexOutOfRangeException..ctor, 1: throw | -| System.Void System.ThrowHelper.ThrowInvalidOperationException() | System.InvalidOperationException | 0: newobj System.InvalidOperationException..ctor, 1: throw | -| System.Void System.ThrowHelper.ThrowInvalidOperationException_ConcurrentOperationsNotSupported() | System.InvalidOperationException | 0: call System.SR.get_InvalidOperation_ConcurrentOperationsNotSupported, 1: newobj System.InvalidOperationException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowInvalidOperationException_EnumCurrent(System.Int32) | System.InvalidOperationException | 0: ldarg.0, 1: call System.ThrowHelper.GetInvalidOperationException_EnumCurrent, 2: throw | -| System.Void System.ThrowHelper.ThrowInvalidOperationException_HandleIsNotInitialized() | System.InvalidOperationException | 0: call System.SR.get_InvalidOperation_HandleIsNotInitialized, 1: newobj System.InvalidOperationException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowInvalidOperationException_HandleIsNotPinned() | System.InvalidOperationException | 0: call System.SR.get_InvalidOperation_HandleIsNotPinned, 1: newobj System.InvalidOperationException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumEnded() | System.InvalidOperationException | 0: call System.SR.get_InvalidOperation_EnumEnded, 1: newobj System.InvalidOperationException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion() | System.InvalidOperationException | 0: call System.SR.get_InvalidOperation_EnumFailedVersion, 1: newobj System.InvalidOperationException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumNotStarted() | System.InvalidOperationException | 0: call System.SR.get_InvalidOperation_EnumNotStarted, 1: newobj System.InvalidOperationException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumOpCantHappen() | System.InvalidOperationException | 0: call System.SR.get_InvalidOperation_EnumOpCantHappen, 1: newobj System.InvalidOperationException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowInvalidOperationException_InvalidOperation_NoValue() | System.InvalidOperationException | 0: call System.SR.get_InvalidOperation_NoValue, 1: newobj System.InvalidOperationException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowInvalidOperationException_InvalidUtf8() | System.InvalidOperationException | 0: call System.SR.get_InvalidOperation_InvalidUtf8, 1: newobj System.InvalidOperationException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowInvalidTypeWithPointersNotSupported(System.Type) | System.ArgumentException | 0: call System.SR.get_Argument_InvalidTypeWithPointersNotSupported, 1: ldarg.0, 2: call System.SR.Format, 3: newobj System.ArgumentException..ctor, 4: throw | -| System.Void System.ThrowHelper.ThrowKeyNotFoundException`1(!0) | System.Collections.Generic.KeyNotFoundException | 0: ldarg.0, 1: box, 2: call System.ThrowHelper.GetKeyNotFoundException, 3: throw | -| System.Void System.ThrowHelper.ThrowLengthArgumentOutOfRange_ArgumentOutOfRange_NeedNonNegNum() | System.ArgumentOutOfRangeException | 0: ldc.i4.s 31, 1: ldc.i4.s 31, 2: call System.ThrowHelper.GetArgumentOutOfRangeException, 3: throw | -| System.Void System.ThrowHelper.ThrowNotSupportedException() | System.NotSupportedException | 0: newobj System.NotSupportedException..ctor, 1: throw | -| System.Void System.ThrowHelper.ThrowNotSupportedException_UnreadableStream() | System.NotSupportedException | 0: call System.SR.get_NotSupported_UnreadableStream, 1: newobj System.NotSupportedException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowNotSupportedException_UnseekableStream() | System.NotSupportedException | 0: call System.SR.get_NotSupported_UnseekableStream, 1: newobj System.NotSupportedException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowNotSupportedException_UnwritableStream() | System.NotSupportedException | 0: call System.SR.get_NotSupported_UnwritableStream, 1: newobj System.NotSupportedException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowObjectDisposedException(System.Object) | System.ObjectDisposedException | 0: ldarg.0, 1: brtrue.s 4:, 2: ldnull, 3: br.s 7:, 4: ldarg.0, 5: call System.Object.GetType, 6: callvirt System.Type.get_FullName, 7: newobj System.ObjectDisposedException..ctor, 8: throw | -| System.Void System.ThrowHelper.ThrowObjectDisposedException(System.Type) | System.ObjectDisposedException | 0: ldarg.0, 1: brtrue.s 4:, 2: ldnull, 3: br.s 6:, 4: ldarg.0, 5: callvirt System.Type.get_FullName, 6: newobj System.ObjectDisposedException..ctor, 7: throw | -| System.Void System.ThrowHelper.ThrowObjectDisposedException_FileClosed() | System.ObjectDisposedException | 0: ldnull, 1: call System.SR.get_ObjectDisposed_FileClosed, 2: newobj System.ObjectDisposedException..ctor, 3: throw | -| System.Void System.ThrowHelper.ThrowObjectDisposedException_StreamClosed(System.String) | System.ObjectDisposedException | 0: ldarg.0, 1: call System.SR.get_ObjectDisposed_StreamClosed, 2: newobj System.ObjectDisposedException..ctor, 3: throw | -| System.Void System.ThrowHelper.ThrowOutOfMemoryException() | System.OutOfMemoryException | 0: newobj System.OutOfMemoryException..ctor, 1: throw | -| System.Void System.ThrowHelper.ThrowOutOfMemoryException_StringTooLong() | System.OutOfMemoryException | 0: call System.SR.get_OutOfMemory_StringTooLong, 1: newobj System.OutOfMemoryException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowOverflowException() | System.OverflowException | 0: newobj System.OverflowException..ctor, 1: throw | -| System.Void System.ThrowHelper.ThrowOverflowException_TimeSpanTooLong() | System.OverflowException | 0: call System.SR.get_Overflow_TimeSpanTooLong, 1: newobj System.OverflowException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_IndexMustBeLess() | System.ArgumentOutOfRangeException | 0: ldc.i4.8, 1: ldc.i4.1, 2: call System.ThrowHelper.GetArgumentOutOfRangeException, 3: throw | -| System.Void System.ThrowHelper.ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_IndexMustBeLessOrEqual() | System.ArgumentOutOfRangeException | 0: ldc.i4.8, 1: ldc.i4.0, 2: call System.ThrowHelper.GetArgumentOutOfRangeException, 3: throw | -| System.Void System.ThrowHelper.ThrowUnexpectedStateForKnownCallback(System.Object) | System.ArgumentOutOfRangeException | 0: ldstr "state", 1: ldarg.0, 2: call System.SR.get_Argument_UnexpectedStateForKnownCallback, 3: newobj System.ArgumentOutOfRangeException..ctor, 4: throw | -| System.Void System.ThrowHelper.ThrowValueArgumentOutOfRange_NeedNonNegNumException() | System.ArgumentOutOfRangeException | 0: ldc.i4.7, 1: ldc.i4.s 31, 2: call System.ThrowHelper.GetArgumentOutOfRangeException, 3: throw | -| System.Void System.ThrowHelper.ThrowWrongKeyTypeArgumentException`1(!0,System.Type) | System.ArgumentException | 0: ldarg.0, 1: box, 2: ldarg.1, 3: call System.ThrowHelper.GetWrongKeyTypeArgumentException, 4: throw | -| System.Void System.ThrowHelper.ThrowWrongValueTypeArgumentException`1(!0,System.Type) | System.ArgumentException | 0: ldarg.0, 1: box, 2: ldarg.1, 3: call System.ThrowHelper.GetWrongValueTypeArgumentException, 4: throw | diff --git a/csharp/ql/test/library-tests/cil/dataflow/CallableReturns.ql b/csharp/ql/test/library-tests/cil/dataflow/CallableReturns.ql deleted file mode 100644 index 8e32dd08514..00000000000 --- a/csharp/ql/test/library-tests/cil/dataflow/CallableReturns.ql +++ /dev/null @@ -1,39 +0,0 @@ -import cil -import semmle.code.cil.CallableReturns - -predicate relevantMethod(CIL::Method m) { - m.getName() = "GetEncoder" and not m.getDeclaringType().getName() = "OSEncoding" - or - m.getName() = "get_Item" - or - m.getDeclaringType().getName() = "ThrowHelper" and - not m.getParameter(_).getType().getName() = "ExceptionResource" - or - m.getLocation().(CIL::Assembly).getName().matches("DataFlow%") -} - -// Check that the assembly hasn't been marked as a stub. -query predicate stubs(string str) { - exists(CIL::Assembly asm | CIL::assemblyIsStub(asm) | str = asm.toString()) -} - -query predicate alwaysNull(string s, string d) { - exists(CIL::Method m | - alwaysNullMethod(m) and - s = m.toStringWithTypes() and - relevantMethod(m) and - d = m.getImplementation().getDisassembly() - ) -} - -query predicate alwaysNonNull(string s) { - exists(CIL::Method m | alwaysNotNullMethod(m) and s = m.toStringWithTypes() and relevantMethod(m)) -} - -query predicate alwaysThrows(string s, string ex, string d) { - exists(CIL::Method m, CIL::Type t | alwaysThrowsException(m, t) and relevantMethod(m) | - s = m.toStringWithTypes() and - ex = t.toStringWithTypes() and - d = m.getImplementation().getDisassembly() - ) -} diff --git a/csharp/ql/test/library-tests/cil/dataflow/ControlFlow.expected b/csharp/ql/test/library-tests/cil/dataflow/ControlFlow.expected deleted file mode 100644 index a21226e8376..00000000000 --- a/csharp/ql/test/library-tests/cil/dataflow/ControlFlow.expected +++ /dev/null @@ -1,2 +0,0 @@ -| dataflow.cs:55:9:55:18 | call to method DeadCode | -| dataflow.cs:63:9:63:18 | call to method DeadCode | diff --git a/csharp/ql/test/library-tests/cil/dataflow/ControlFlow.ql b/csharp/ql/test/library-tests/cil/dataflow/ControlFlow.ql deleted file mode 100644 index 9b187f66f7a..00000000000 --- a/csharp/ql/test/library-tests/cil/dataflow/ControlFlow.ql +++ /dev/null @@ -1,6 +0,0 @@ -import csharp - -query predicate deadCode(MethodCall c) { - c.getTarget().getName() = "DeadCode" and - not exists(ControlFlow::Node node | node.getAstNode() = c) -} diff --git a/csharp/ql/test/library-tests/cil/dataflow/DataFlow.cs_ b/csharp/ql/test/library-tests/cil/dataflow/DataFlow.cs_ deleted file mode 100644 index 1f6128f353a..00000000000 --- a/csharp/ql/test/library-tests/cil/dataflow/DataFlow.cs_ +++ /dev/null @@ -1,178 +0,0 @@ -// Generate DataFlow.dll: `csc /o /target:library DataFlow.cs_ /out:DataFlow.dll` - -using System; - -namespace Dataflow -{ - public class NullMethods - { - public object ReturnsNull() => null; - - public object ReturnsNull2() - { - var x = ReturnsNull(); - return x; - } - - // Does not necessarily return null because of virtual method call. - public object NotReturnsNull() => VirtualReturnsNull(); - - public object ReturnsNullIndirect() => ReturnsNull(); - - public virtual object VirtualReturnsNull() => null; - - public object NullProperty { get => null; } - - public virtual object VirtualNullProperty { get => null; } - } - - public class NonNullMethods - { - public object ReturnsNonNull() => new object(); - - public object ReturnsNonNull2() - { - var x = ReturnsNonNull(); - return x; - } - - public object ReturnsNonNullIndirect() => ReturnsNonNull(); - - public object NonNullProperty { get => 1; } - - public string NonNullProperty2 { get => "not null"; } - - public virtual object VirtualNonNull { get => "not null"; } - - public bool cond = false; - - public string MaybeNull() - { - if (cond) - return null; - else - return "not null"; - } - - public string MaybeNull2() - { - return cond ? null : "not null"; - } - - public virtual object VirtualNonNullProperty { get => "non null"; } - } - - public class ThrowingMethods - { - public static object AlwaysThrows() => throw new InvalidOperationException(); - - public object AlwaysThrowsIndirect() => AlwaysThrows(); - - public virtual object VirtualThrows() => throw new Exception(); - - public object ThrowProperty { get => throw new Exception(); } - public virtual object VirtualThrowProperty { get => throw new Exception(); } - - } - - public class DataFlow - { - public object Taint1(object x) => x; - - public object Taint2(object x) => Taint5(x); - - public string Taint3(string s) - { - var x = s; - Console.WriteLine(s); - return x; - } - - public object Taint5(object x) => Taint6(x); - - private object Taint6(object x) => x; - } - - public class TaintFlow - { - public string Taint1(string a, string b) => a + b; - - public int Taint2(int a, int b) => a + b; - - public int Taint3(int a) => -a; - - public string TaintIndirect(string a, string b) => Taint1(a, b); - } - - public class Properties - { - public int TrivialProperty1 { get; set; } - - int field; - - public int TrivialProperty2 - { - get => field; - set { field = value; } - } - } - - public class ThisAssemblyIsNotAStub - { - public void F() - { - // Ensure that the assembly isn't tagged as a stub - // Need to bump the average instruction count. - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - Console.WriteLine("This is not a stub assembly"); - } - } -} diff --git a/csharp/ql/test/library-tests/cil/dataflow/DataFlow.dll b/csharp/ql/test/library-tests/cil/dataflow/DataFlow.dll deleted file mode 100755 index 2f35b3a3ff2..00000000000 Binary files a/csharp/ql/test/library-tests/cil/dataflow/DataFlow.dll and /dev/null differ diff --git a/csharp/ql/test/library-tests/cil/dataflow/DataFlow.expected b/csharp/ql/test/library-tests/cil/dataflow/DataFlow.expected deleted file mode 100644 index 944815673cd..00000000000 --- a/csharp/ql/test/library-tests/cil/dataflow/DataFlow.expected +++ /dev/null @@ -1,146 +0,0 @@ -edges -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | provenance | | -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | provenance | | -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint2 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | provenance | | -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint3 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | provenance | | -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint5 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | provenance | | -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint6 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | provenance | | -| DataFlow.dll:0:0:0:0 | Parameter 1 of TaintIndirect : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | provenance | | -| DataFlow.dll:0:0:0:0 | Parameter 2 of Taint1 : String | DataFlow.dll:0:0:0:0 | ldarg.2 : String | provenance | | -| DataFlow.dll:0:0:0:0 | Parameter 2 of TaintIndirect : String | DataFlow.dll:0:0:0:0 | ldarg.2 : String | provenance | | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | provenance | | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint5 : String | provenance | | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint6 : String | provenance | | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | call : String | provenance | | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | call : String | provenance | | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | call : String | provenance | | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | call : String | provenance | | -| DataFlow.dll:0:0:0:0 | ldarg.2 : String | DataFlow.dll:0:0:0:0 | Parameter 2 of Taint1 : String | provenance | | -| DataFlow.dll:0:0:0:0 | ldarg.2 : String | DataFlow.dll:0:0:0:0 | call : String | provenance | | -| DataFlow.dll:0:0:0:0 | ldarg.2 : String | DataFlow.dll:0:0:0:0 | call : String | provenance | | -| dataflow.cs:16:18:16:26 | "tainted" : String | dataflow.cs:16:18:16:37 | call to method ToString | provenance | | -| dataflow.cs:18:27:18:27 | 2 : Int32 | dataflow.cs:18:18:18:31 | call to method Max | provenance | | -| dataflow.cs:18:30:18:30 | 3 : Int32 | dataflow.cs:18:18:18:31 | call to method Max | provenance | | -| dataflow.cs:19:29:19:31 | 0.5 : Double | dataflow.cs:19:18:19:32 | call to method Round | provenance | | -| dataflow.cs:20:45:20:53 | "tainted" : String | dataflow.cs:20:18:20:54 | call to method GetFullPath | provenance | | -| dataflow.cs:27:44:27:46 | 1 : Double | dataflow.cs:27:18:27:52 | call to method IEEERemainder | provenance | | -| dataflow.cs:27:49:27:51 | 2 : Double | dataflow.cs:27:18:27:52 | call to method IEEERemainder | provenance | | -| dataflow.cs:38:34:38:37 | "d1" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | provenance | | -| dataflow.cs:38:34:38:37 | "d1" : String | dataflow.cs:38:18:38:38 | call to method Taint1 | provenance | | -| dataflow.cs:39:34:39:37 | "d2" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint2 : String | provenance | | -| dataflow.cs:39:34:39:37 | "d2" : String | dataflow.cs:39:18:39:38 | call to method Taint2 | provenance | | -| dataflow.cs:40:34:40:37 | "d3" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint3 : String | provenance | | -| dataflow.cs:40:34:40:37 | "d3" : String | dataflow.cs:40:18:40:38 | call to method Taint3 | provenance | | -| dataflow.cs:44:28:44:32 | "t1a" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | provenance | | -| dataflow.cs:44:28:44:32 | "t1a" : String | dataflow.cs:44:18:44:40 | call to method Taint1 | provenance | | -| dataflow.cs:44:35:44:39 | "t1b" : String | DataFlow.dll:0:0:0:0 | Parameter 2 of Taint1 : String | provenance | | -| dataflow.cs:44:35:44:39 | "t1b" : String | dataflow.cs:44:18:44:40 | call to method Taint1 | provenance | | -| dataflow.cs:47:35:47:38 | "t6" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of TaintIndirect : String | provenance | | -| dataflow.cs:47:35:47:38 | "t6" : String | dataflow.cs:47:18:47:45 | call to method TaintIndirect | provenance | | -| dataflow.cs:47:41:47:44 | "t6" : String | DataFlow.dll:0:0:0:0 | Parameter 2 of TaintIndirect : String | provenance | | -| dataflow.cs:47:41:47:44 | "t6" : String | dataflow.cs:47:18:47:45 | call to method TaintIndirect | provenance | | -| dataflow.cs:72:21:72:34 | call to method NullFunction : null | dataflow.cs:72:21:72:52 | ... ?? ... | provenance | | -| dataflow.cs:72:39:72:52 | call to method IndirectNull : null | dataflow.cs:72:21:72:52 | ... ?? ... | provenance | | -| dataflow.cs:87:31:87:44 | call to method NullFunction : null | dataflow.cs:87:24:87:51 | ... ? ... : ... | provenance | | -| dataflow.cs:100:30:100:33 | null : null | dataflow.cs:72:39:72:52 | call to method IndirectNull : null | provenance | | -| dataflow.cs:100:30:100:33 | null : null | dataflow.cs:106:20:106:33 | call to method IndirectNull | provenance | | -| dataflow.cs:100:30:100:33 | null : null | dataflow.cs:106:20:106:33 | call to method IndirectNull : null | provenance | | -| dataflow.cs:106:16:106:16 | access to local variable x : null | dataflow.cs:108:16:108:16 | access to local variable x : null | provenance | | -| dataflow.cs:106:20:106:33 | call to method IndirectNull : null | dataflow.cs:106:16:106:16 | access to local variable x : null | provenance | | -| dataflow.cs:107:19:107:19 | access to local variable x : null | dataflow.cs:108:16:108:16 | access to local variable x : null | provenance | | -| dataflow.cs:107:23:107:26 | null : null | dataflow.cs:107:19:107:19 | access to local variable x : null | provenance | | -| dataflow.cs:108:16:108:16 | access to local variable x : null | dataflow.cs:72:21:72:34 | call to method NullFunction : null | provenance | | -| dataflow.cs:108:16:108:16 | access to local variable x : null | dataflow.cs:87:31:87:44 | call to method NullFunction : null | provenance | | -nodes -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | semmle.label | Parameter 1 of Taint1 : String | -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | semmle.label | Parameter 1 of Taint1 : String | -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint2 : String | semmle.label | Parameter 1 of Taint2 : String | -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint3 : String | semmle.label | Parameter 1 of Taint3 : String | -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint5 : String | semmle.label | Parameter 1 of Taint5 : String | -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint6 : String | semmle.label | Parameter 1 of Taint6 : String | -| DataFlow.dll:0:0:0:0 | Parameter 1 of TaintIndirect : String | semmle.label | Parameter 1 of TaintIndirect : String | -| DataFlow.dll:0:0:0:0 | Parameter 2 of Taint1 : String | semmle.label | Parameter 2 of Taint1 : String | -| DataFlow.dll:0:0:0:0 | Parameter 2 of TaintIndirect : String | semmle.label | Parameter 2 of TaintIndirect : String | -| DataFlow.dll:0:0:0:0 | call : String | semmle.label | call : String | -| DataFlow.dll:0:0:0:0 | call : String | semmle.label | call : String | -| DataFlow.dll:0:0:0:0 | call : String | semmle.label | call : String | -| DataFlow.dll:0:0:0:0 | call : String | semmle.label | call : String | -| DataFlow.dll:0:0:0:0 | call : String | semmle.label | call : String | -| DataFlow.dll:0:0:0:0 | call : String | semmle.label | call : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | semmle.label | ldarg.1 : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | semmle.label | ldarg.1 : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | semmle.label | ldarg.1 : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | semmle.label | ldarg.1 : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | semmle.label | ldarg.1 : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | semmle.label | ldarg.1 : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | semmle.label | ldarg.1 : String | -| DataFlow.dll:0:0:0:0 | ldarg.2 : String | semmle.label | ldarg.2 : String | -| DataFlow.dll:0:0:0:0 | ldarg.2 : String | semmle.label | ldarg.2 : String | -| dataflow.cs:16:18:16:26 | "tainted" : String | semmle.label | "tainted" : String | -| dataflow.cs:16:18:16:37 | call to method ToString | semmle.label | call to method ToString | -| dataflow.cs:18:18:18:31 | call to method Max | semmle.label | call to method Max | -| dataflow.cs:18:27:18:27 | 2 : Int32 | semmle.label | 2 : Int32 | -| dataflow.cs:18:30:18:30 | 3 : Int32 | semmle.label | 3 : Int32 | -| dataflow.cs:19:18:19:32 | call to method Round | semmle.label | call to method Round | -| dataflow.cs:19:29:19:31 | 0.5 : Double | semmle.label | 0.5 : Double | -| dataflow.cs:20:18:20:54 | call to method GetFullPath | semmle.label | call to method GetFullPath | -| dataflow.cs:20:45:20:53 | "tainted" : String | semmle.label | "tainted" : String | -| dataflow.cs:27:18:27:52 | call to method IEEERemainder | semmle.label | call to method IEEERemainder | -| dataflow.cs:27:44:27:46 | 1 : Double | semmle.label | 1 : Double | -| dataflow.cs:27:49:27:51 | 2 : Double | semmle.label | 2 : Double | -| dataflow.cs:38:18:38:38 | call to method Taint1 | semmle.label | call to method Taint1 | -| dataflow.cs:38:34:38:37 | "d1" : String | semmle.label | "d1" : String | -| dataflow.cs:39:18:39:38 | call to method Taint2 | semmle.label | call to method Taint2 | -| dataflow.cs:39:34:39:37 | "d2" : String | semmle.label | "d2" : String | -| dataflow.cs:40:18:40:38 | call to method Taint3 | semmle.label | call to method Taint3 | -| dataflow.cs:40:34:40:37 | "d3" : String | semmle.label | "d3" : String | -| dataflow.cs:44:18:44:40 | call to method Taint1 | semmle.label | call to method Taint1 | -| dataflow.cs:44:28:44:32 | "t1a" : String | semmle.label | "t1a" : String | -| dataflow.cs:44:35:44:39 | "t1b" : String | semmle.label | "t1b" : String | -| dataflow.cs:47:18:47:45 | call to method TaintIndirect | semmle.label | call to method TaintIndirect | -| dataflow.cs:47:35:47:38 | "t6" : String | semmle.label | "t6" : String | -| dataflow.cs:47:41:47:44 | "t6" : String | semmle.label | "t6" : String | -| dataflow.cs:72:21:72:34 | call to method NullFunction : null | semmle.label | call to method NullFunction : null | -| dataflow.cs:72:21:72:52 | ... ?? ... | semmle.label | ... ?? ... | -| dataflow.cs:72:39:72:52 | call to method IndirectNull : null | semmle.label | call to method IndirectNull : null | -| dataflow.cs:87:24:87:51 | ... ? ... : ... | semmle.label | ... ? ... : ... | -| dataflow.cs:87:31:87:44 | call to method NullFunction : null | semmle.label | call to method NullFunction : null | -| dataflow.cs:100:30:100:33 | null : null | semmle.label | null : null | -| dataflow.cs:106:16:106:16 | access to local variable x : null | semmle.label | access to local variable x : null | -| dataflow.cs:106:20:106:33 | call to method IndirectNull | semmle.label | call to method IndirectNull | -| dataflow.cs:106:20:106:33 | call to method IndirectNull : null | semmle.label | call to method IndirectNull : null | -| dataflow.cs:107:19:107:19 | access to local variable x : null | semmle.label | access to local variable x : null | -| dataflow.cs:107:23:107:26 | null : null | semmle.label | null : null | -| dataflow.cs:108:16:108:16 | access to local variable x : null | semmle.label | access to local variable x : null | -subpaths -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | DataFlow.dll:0:0:0:0 | call : String | DataFlow.dll:0:0:0:0 | call : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint5 : String | DataFlow.dll:0:0:0:0 | call : String | DataFlow.dll:0:0:0:0 | call : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint6 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | call : String | -| DataFlow.dll:0:0:0:0 | ldarg.2 : String | DataFlow.dll:0:0:0:0 | Parameter 2 of Taint1 : String | DataFlow.dll:0:0:0:0 | call : String | DataFlow.dll:0:0:0:0 | call : String | -| dataflow.cs:38:34:38:37 | "d1" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | dataflow.cs:38:18:38:38 | call to method Taint1 | -| dataflow.cs:39:34:39:37 | "d2" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint2 : String | DataFlow.dll:0:0:0:0 | call : String | dataflow.cs:39:18:39:38 | call to method Taint2 | -| dataflow.cs:40:34:40:37 | "d3" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint3 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | dataflow.cs:40:18:40:38 | call to method Taint3 | -| dataflow.cs:44:28:44:32 | "t1a" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | DataFlow.dll:0:0:0:0 | call : String | dataflow.cs:44:18:44:40 | call to method Taint1 | -| dataflow.cs:44:35:44:39 | "t1b" : String | DataFlow.dll:0:0:0:0 | Parameter 2 of Taint1 : String | DataFlow.dll:0:0:0:0 | call : String | dataflow.cs:44:18:44:40 | call to method Taint1 | -| dataflow.cs:47:35:47:38 | "t6" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of TaintIndirect : String | DataFlow.dll:0:0:0:0 | call : String | dataflow.cs:47:18:47:45 | call to method TaintIndirect | -| dataflow.cs:47:41:47:44 | "t6" : String | DataFlow.dll:0:0:0:0 | Parameter 2 of TaintIndirect : String | DataFlow.dll:0:0:0:0 | call : String | dataflow.cs:47:18:47:45 | call to method TaintIndirect | -#select -| dataflow.cs:16:18:16:26 | "tainted" : String | dataflow.cs:16:18:16:37 | call to method ToString | dataflow.cs:16:18:16:37 | call to method ToString | $@ | dataflow.cs:16:18:16:37 | call to method ToString | call to method ToString | -| dataflow.cs:18:27:18:27 | 2 : Int32 | dataflow.cs:18:18:18:31 | call to method Max | dataflow.cs:18:18:18:31 | call to method Max | $@ | dataflow.cs:18:18:18:31 | call to method Max | call to method Max | -| dataflow.cs:18:30:18:30 | 3 : Int32 | dataflow.cs:18:18:18:31 | call to method Max | dataflow.cs:18:18:18:31 | call to method Max | $@ | dataflow.cs:18:18:18:31 | call to method Max | call to method Max | -| dataflow.cs:19:29:19:31 | 0.5 : Double | dataflow.cs:19:18:19:32 | call to method Round | dataflow.cs:19:18:19:32 | call to method Round | $@ | dataflow.cs:19:18:19:32 | call to method Round | call to method Round | -| dataflow.cs:20:45:20:53 | "tainted" : String | dataflow.cs:20:18:20:54 | call to method GetFullPath | dataflow.cs:20:18:20:54 | call to method GetFullPath | $@ | dataflow.cs:20:18:20:54 | call to method GetFullPath | call to method GetFullPath | -| dataflow.cs:27:44:27:46 | 1 : Double | dataflow.cs:27:18:27:52 | call to method IEEERemainder | dataflow.cs:27:18:27:52 | call to method IEEERemainder | $@ | dataflow.cs:27:18:27:52 | call to method IEEERemainder | call to method IEEERemainder | -| dataflow.cs:27:49:27:51 | 2 : Double | dataflow.cs:27:18:27:52 | call to method IEEERemainder | dataflow.cs:27:18:27:52 | call to method IEEERemainder | $@ | dataflow.cs:27:18:27:52 | call to method IEEERemainder | call to method IEEERemainder | -| dataflow.cs:38:34:38:37 | "d1" : String | dataflow.cs:38:18:38:38 | call to method Taint1 | dataflow.cs:38:18:38:38 | call to method Taint1 | $@ | dataflow.cs:38:18:38:38 | call to method Taint1 | call to method Taint1 | -| dataflow.cs:39:34:39:37 | "d2" : String | dataflow.cs:39:18:39:38 | call to method Taint2 | dataflow.cs:39:18:39:38 | call to method Taint2 | $@ | dataflow.cs:39:18:39:38 | call to method Taint2 | call to method Taint2 | -| dataflow.cs:40:34:40:37 | "d3" : String | dataflow.cs:40:18:40:38 | call to method Taint3 | dataflow.cs:40:18:40:38 | call to method Taint3 | $@ | dataflow.cs:40:18:40:38 | call to method Taint3 | call to method Taint3 | -| dataflow.cs:44:28:44:32 | "t1a" : String | dataflow.cs:44:18:44:40 | call to method Taint1 | dataflow.cs:44:18:44:40 | call to method Taint1 | $@ | dataflow.cs:44:18:44:40 | call to method Taint1 | call to method Taint1 | -| dataflow.cs:44:35:44:39 | "t1b" : String | dataflow.cs:44:18:44:40 | call to method Taint1 | dataflow.cs:44:18:44:40 | call to method Taint1 | $@ | dataflow.cs:44:18:44:40 | call to method Taint1 | call to method Taint1 | -| dataflow.cs:47:35:47:38 | "t6" : String | dataflow.cs:47:18:47:45 | call to method TaintIndirect | dataflow.cs:47:18:47:45 | call to method TaintIndirect | $@ | dataflow.cs:47:18:47:45 | call to method TaintIndirect | call to method TaintIndirect | -| dataflow.cs:47:41:47:44 | "t6" : String | dataflow.cs:47:18:47:45 | call to method TaintIndirect | dataflow.cs:47:18:47:45 | call to method TaintIndirect | $@ | dataflow.cs:47:18:47:45 | call to method TaintIndirect | call to method TaintIndirect | -| dataflow.cs:100:30:100:33 | null : null | dataflow.cs:72:21:72:52 | ... ?? ... | dataflow.cs:72:21:72:52 | ... ?? ... | $@ | dataflow.cs:72:21:72:52 | ... ?? ... | ... ?? ... | -| dataflow.cs:100:30:100:33 | null : null | dataflow.cs:87:24:87:51 | ... ? ... : ... | dataflow.cs:87:24:87:51 | ... ? ... : ... | $@ | dataflow.cs:87:24:87:51 | ... ? ... : ... | ... ? ... : ... | -| dataflow.cs:100:30:100:33 | null : null | dataflow.cs:106:20:106:33 | call to method IndirectNull | dataflow.cs:106:20:106:33 | call to method IndirectNull | $@ | dataflow.cs:106:20:106:33 | call to method IndirectNull | call to method IndirectNull | -| dataflow.cs:107:23:107:26 | null : null | dataflow.cs:72:21:72:52 | ... ?? ... | dataflow.cs:72:21:72:52 | ... ?? ... | $@ | dataflow.cs:72:21:72:52 | ... ?? ... | ... ?? ... | -| dataflow.cs:107:23:107:26 | null : null | dataflow.cs:87:24:87:51 | ... ? ... : ... | dataflow.cs:87:24:87:51 | ... ? ... : ... | $@ | dataflow.cs:87:24:87:51 | ... ? ... : ... | ... ? ... : ... | diff --git a/csharp/ql/test/library-tests/cil/dataflow/DataFlow.ql b/csharp/ql/test/library-tests/cil/dataflow/DataFlow.ql deleted file mode 100644 index 609717b8340..00000000000 --- a/csharp/ql/test/library-tests/cil/dataflow/DataFlow.ql +++ /dev/null @@ -1,49 +0,0 @@ -/** - * @kind path-problem - */ - -import csharp -import Flow::PathGraph - -private predicate relevantPathNode(Flow::PathNode n) { - exists(File f | f = n.getNode().getLocation().getFile() | - f.fromSource() - or - f.getBaseName() = "DataFlow.dll" - ) -} - -query predicate edges(Flow::PathNode a, Flow::PathNode b, string key, string val) { - Flow::PathGraph::edges(a, b, key, val) and - relevantPathNode(a) and - relevantPathNode(b) -} - -query predicate nodes(Flow::PathNode n, string key, string val) { - Flow::PathGraph::nodes(n, key, val) and - relevantPathNode(n) -} - -query predicate subpaths( - Flow::PathNode arg, Flow::PathNode par, Flow::PathNode ret, Flow::PathNode out -) { - Flow::PathGraph::subpaths(arg, par, ret, out) and - relevantPathNode(arg) and - relevantPathNode(par) and - relevantPathNode(ret) and - relevantPathNode(out) -} - -module FlowConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source.asExpr() instanceof Literal } - - predicate isSink(DataFlow::Node sink) { - exists(LocalVariable decl | sink.asExpr() = decl.getInitializer()) - } -} - -module Flow = DataFlow::Global<FlowConfig>; - -from Flow::PathNode source, Flow::PathNode sink -where Flow::flowPath(source, sink) -select source, sink, sink, "$@", sink, sink.toString() diff --git a/csharp/ql/test/library-tests/cil/dataflow/DataFlowUnoptimized.cs_ b/csharp/ql/test/library-tests/cil/dataflow/DataFlowUnoptimized.cs_ deleted file mode 100644 index 7ef1e6fee18..00000000000 --- a/csharp/ql/test/library-tests/cil/dataflow/DataFlowUnoptimized.cs_ +++ /dev/null @@ -1,24 +0,0 @@ -// Generate DataFlowUnoptimized.dll: `csc /target:library DataFlowUnoptimized.cs_ /out:DataFlowUnoptimized.dll` - -using System; - -namespace DataflowUnoptimized -{ - public class MaybeNullMethods - { - public bool cond = false; - - public string MaybeNull() - { - if (cond) - return null; - else - return "not null"; - } - - public string MaybeNull2() - { - return cond ? null : "not null"; - } - } -} diff --git a/csharp/ql/test/library-tests/cil/dataflow/DataFlowUnoptimized.dll b/csharp/ql/test/library-tests/cil/dataflow/DataFlowUnoptimized.dll deleted file mode 100644 index b290ece7065..00000000000 Binary files a/csharp/ql/test/library-tests/cil/dataflow/DataFlowUnoptimized.dll and /dev/null differ diff --git a/csharp/ql/test/library-tests/cil/dataflow/Nullness.expected b/csharp/ql/test/library-tests/cil/dataflow/Nullness.expected deleted file mode 100644 index e434ebf9c48..00000000000 --- a/csharp/ql/test/library-tests/cil/dataflow/Nullness.expected +++ /dev/null @@ -1,42 +0,0 @@ -alwaysNull -| dataflow.cs:68:21:68:35 | default(...) | -| dataflow.cs:72:21:72:34 | call to method NullFunction | -| dataflow.cs:72:21:72:52 | ... ?? ... | -| dataflow.cs:72:39:72:52 | call to method IndirectNull | -| dataflow.cs:76:21:76:45 | call to method ReturnsNull | -| dataflow.cs:77:21:77:46 | call to method ReturnsNull2 | -| dataflow.cs:78:21:78:44 | access to property NullProperty | -| dataflow.cs:87:31:87:44 | call to method NullFunction | -alwaysNotNull -| dataflow.cs:69:13:69:20 | access to local variable nonNull1 | -| dataflow.cs:69:13:69:35 | Int32 nonNull1 = ... | -| dataflow.cs:69:24:69:35 | default(...) | -| dataflow.cs:69:32:69:34 | access to type Int32 | -| dataflow.cs:70:27:70:30 | this access | -| dataflow.cs:70:27:70:40 | call to method GetType | -| dataflow.cs:71:30:71:33 | true | -| dataflow.cs:71:30:71:44 | call to method ToString | -| dataflow.cs:72:21:72:34 | this access | -| dataflow.cs:72:39:72:52 | this access | -| dataflow.cs:75:27:75:52 | object creation of type NullMethods | -| dataflow.cs:76:21:76:31 | access to local variable nullMethods | -| dataflow.cs:77:21:77:31 | access to local variable nullMethods | -| dataflow.cs:78:21:78:31 | access to local variable nullMethods | -| dataflow.cs:81:23:81:51 | object creation of type NonNullMethods | -| dataflow.cs:82:24:82:30 | access to local variable nonNull | -| dataflow.cs:82:24:82:47 | call to method ReturnsNonNull | -| dataflow.cs:83:24:83:30 | access to local variable nonNull | -| dataflow.cs:83:24:83:55 | call to method ReturnsNonNullIndirect | -| dataflow.cs:84:24:84:30 | access to local variable nonNull | -| dataflow.cs:87:24:87:27 | access to field cond | -| dataflow.cs:87:24:87:27 | this access | -| dataflow.cs:87:31:87:44 | this access | -| dataflow.cs:87:48:87:51 | this access | -| dataflow.cs:88:24:88:34 | access to local variable nullMethods | -| dataflow.cs:89:24:89:34 | access to local variable nullMethods | -| dataflow.cs:90:26:90:32 | access to local variable nonNull | -| dataflow.cs:93:25:93:31 | access to local variable nonNull | -| dataflow.cs:94:26:94:32 | access to local variable nonNull | -| dataflow.cs:95:32:95:73 | object creation of type MaybeNullMethods | -| dataflow.cs:96:21:96:36 | access to local variable maybeNullMethods | -| dataflow.cs:97:22:97:37 | access to local variable maybeNullMethods | diff --git a/csharp/ql/test/library-tests/cil/dataflow/Nullness.ql b/csharp/ql/test/library-tests/cil/dataflow/Nullness.ql deleted file mode 100644 index bf29ab5d9ee..00000000000 --- a/csharp/ql/test/library-tests/cil/dataflow/Nullness.ql +++ /dev/null @@ -1,10 +0,0 @@ -import csharp -import semmle.code.csharp.dataflow.Nullness - -query predicate alwaysNull(AlwaysNullExpr expr) { - expr.getEnclosingCallable().getName() = "Nullness" -} - -query predicate alwaysNotNull(NonNullExpr expr) { - expr.getEnclosingCallable().getName() = "Nullness" -} diff --git a/csharp/ql/test/library-tests/cil/dataflow/TaintTracking.expected b/csharp/ql/test/library-tests/cil/dataflow/TaintTracking.expected deleted file mode 100644 index ef25cee2190..00000000000 --- a/csharp/ql/test/library-tests/cil/dataflow/TaintTracking.expected +++ /dev/null @@ -1,28 +0,0 @@ -| dataflow.cs:9:18:9:22 | "123" | dataflow.cs:9:18:9:37 | call to method CompareTo | -| dataflow.cs:9:34:9:36 | "b" | dataflow.cs:9:18:9:37 | call to method CompareTo | -| dataflow.cs:16:18:16:26 | "tainted" | dataflow.cs:16:18:16:37 | call to method ToString | -| dataflow.cs:18:27:18:27 | 2 | dataflow.cs:18:18:18:31 | call to method Max | -| dataflow.cs:18:30:18:30 | 3 | dataflow.cs:18:18:18:31 | call to method Max | -| dataflow.cs:19:29:19:31 | 0.5 | dataflow.cs:19:18:19:32 | call to method Round | -| dataflow.cs:20:45:20:53 | "tainted" | dataflow.cs:20:18:20:54 | call to method GetFullPath | -| dataflow.cs:24:37:24:37 | 1 | dataflow.cs:24:18:24:56 | call to method DivRem | -| dataflow.cs:24:40:24:40 | 2 | dataflow.cs:24:18:24:56 | call to method DivRem | -| dataflow.cs:27:44:27:46 | 1 | dataflow.cs:27:18:27:52 | call to method IEEERemainder | -| dataflow.cs:27:49:27:51 | 2 | dataflow.cs:27:18:27:52 | call to method IEEERemainder | -| dataflow.cs:30:60:30:60 | 1 | dataflow.cs:30:18:30:80 | call to method DivRem | -| dataflow.cs:30:63:30:63 | 2 | dataflow.cs:30:18:30:80 | call to method DivRem | -| dataflow.cs:38:34:38:37 | "d1" | dataflow.cs:38:18:38:38 | call to method Taint1 | -| dataflow.cs:39:34:39:37 | "d2" | dataflow.cs:39:18:39:38 | call to method Taint2 | -| dataflow.cs:40:34:40:37 | "d3" | dataflow.cs:40:18:40:38 | call to method Taint3 | -| dataflow.cs:44:28:44:32 | "t1a" | dataflow.cs:44:18:44:40 | call to method Taint1 | -| dataflow.cs:44:35:44:39 | "t1b" | dataflow.cs:44:18:44:40 | call to method Taint1 | -| dataflow.cs:45:28:45:28 | 2 | dataflow.cs:45:18:45:32 | call to method Taint2 | -| dataflow.cs:45:31:45:31 | 3 | dataflow.cs:45:18:45:32 | call to method Taint2 | -| dataflow.cs:46:28:46:28 | 1 | dataflow.cs:46:18:46:29 | call to method Taint3 | -| dataflow.cs:47:35:47:38 | "t6" | dataflow.cs:47:18:47:45 | call to method TaintIndirect | -| dataflow.cs:47:41:47:44 | "t6" | dataflow.cs:47:18:47:45 | call to method TaintIndirect | -| dataflow.cs:100:30:100:33 | null | dataflow.cs:72:21:72:52 | ... ?? ... | -| dataflow.cs:100:30:100:33 | null | dataflow.cs:87:24:87:51 | ... ? ... : ... | -| dataflow.cs:100:30:100:33 | null | dataflow.cs:106:20:106:33 | call to method IndirectNull | -| dataflow.cs:107:23:107:26 | null | dataflow.cs:72:21:72:52 | ... ?? ... | -| dataflow.cs:107:23:107:26 | null | dataflow.cs:87:24:87:51 | ... ? ... : ... | diff --git a/csharp/ql/test/library-tests/cil/dataflow/TaintTracking.ql b/csharp/ql/test/library-tests/cil/dataflow/TaintTracking.ql deleted file mode 100644 index f8939387c9c..00000000000 --- a/csharp/ql/test/library-tests/cil/dataflow/TaintTracking.ql +++ /dev/null @@ -1,21 +0,0 @@ -import csharp -// Test that all the copies of the taint tracking library can be imported -// simultaneously without errors. -import semmle.code.csharp.dataflow.TaintTracking2 -import semmle.code.csharp.dataflow.TaintTracking3 -import semmle.code.csharp.dataflow.TaintTracking4 -import semmle.code.csharp.dataflow.TaintTracking5 - -module FlowConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source.asExpr() instanceof Literal } - - predicate isSink(DataFlow::Node sink) { - exists(LocalVariable decl | sink.asExpr() = decl.getInitializer()) - } -} - -module Flow = TaintTracking::Global<FlowConfig>; - -from DataFlow::Node source, DataFlow::Node sink -where Flow::flow(source, sink) -select source, sink diff --git a/csharp/ql/test/library-tests/cil/dataflow/TrivialProperties.expected b/csharp/ql/test/library-tests/cil/dataflow/TrivialProperties.expected deleted file mode 100644 index 2e6cde7a690..00000000000 --- a/csharp/ql/test/library-tests/cil/dataflow/TrivialProperties.expected +++ /dev/null @@ -1,11 +0,0 @@ -| Dataflow.Properties.TrivialProperty1 | -| Dataflow.Properties.TrivialProperty2 | -| System.Collections.DictionaryEntry.Key | -| System.Collections.DictionaryEntry.Value | -| System.Reflection.AssemblyName.CodeBase | -| System.Reflection.AssemblyName.CultureInfo | -| System.Reflection.AssemblyName.HashAlgorithm | -| System.Reflection.AssemblyName.Name | -| System.Reflection.AssemblyName.RawFlags | -| System.Reflection.AssemblyName.Version | -| System.Reflection.AssemblyName.VersionCompatibility | diff --git a/csharp/ql/test/library-tests/cil/dataflow/TrivialProperties.ql b/csharp/ql/test/library-tests/cil/dataflow/TrivialProperties.ql deleted file mode 100644 index 90992bfa668..00000000000 --- a/csharp/ql/test/library-tests/cil/dataflow/TrivialProperties.ql +++ /dev/null @@ -1,15 +0,0 @@ -import csharp -import semmle.code.csharp.commons.QualifiedName - -from TrivialProperty prop, string namespace, string type, string name -where - prop.getDeclaringType().hasFullyQualifiedName(namespace, type) and - ( - namespace = "System.Reflection" and type = "AssemblyName" - or - namespace = "System.Collections" and type = "DictionaryEntry" - or - namespace = "Dataflow" and type = "Properties" - ) and - prop.hasFullyQualifiedName(namespace, type, name) -select getQualifiedName(namespace, type, name) diff --git a/csharp/ql/test/library-tests/cil/dataflow/dataflow.cs b/csharp/ql/test/library-tests/cil/dataflow/dataflow.cs deleted file mode 100644 index af26fc0ed12..00000000000 --- a/csharp/ql/test/library-tests/cil/dataflow/dataflow.cs +++ /dev/null @@ -1,110 +0,0 @@ -using System; - -class Test -{ - static void Main(string[] args) - { - // Indirect call to method - var c1 = "abc".Contains("a"); // Calls string.IndexOf() - var c2 = "123".CompareTo("b"); // Calls string.Compare() - var c3 = Tuple.Create("c", "d", "e"); // Calls Tuple constructor - } - - void DataFlowThroughFramework() - { - // Dataflow through call - var f1 = "tainted".ToString(); - var f2 = Math.Abs(12); - var f3 = Math.Max(2, 3); - var f4 = Math.Round(0.5); - var f5 = System.IO.Path.GetFullPath("tainted"); - - // Tainted dataflow (there is no untainted dataflow path) - int remainder; - var t1 = System.Math.DivRem(1, 2, out remainder); - - // Tainted indirect call to method (there is no untainted dataflow path) - var t2 = System.Math.IEEERemainder(1.0, 2.0); - - // Miscellaneous examples - var m1 = System.Math.DivRem(Math.Abs(-1), Math.Max(1, 2), out remainder); - var m2 = "tainted".ToString().Contains("t"); - } - - void DataFlowThroughAssembly() - { - // Dataflow through test assembly - var dataflow = new Dataflow.DataFlow(); - var d1 = dataflow.Taint1("d1"); - var d2 = dataflow.Taint2("d2"); - var d3 = dataflow.Taint3("d3"); - - // Taint tracking - var tt = new Dataflow.TaintFlow(); - var t1 = tt.Taint1("t1a", "t1b"); - var t2 = tt.Taint2(2, 3); - var t3 = tt.Taint3(1); - var t4 = tt.TaintIndirect("t6", "t6"); - } - - void DeadCode() { } - - void CilAlwaysThrows() - { - System.Reflection.Assembly.LoadFrom("", null, System.Configuration.Assemblies.AssemblyHashAlgorithm.SHA1); // Throws NotSupportedException - DeadCode(); - } - - void Throw() => throw new InvalidCastException(); - - void CsAlwaysThrows() - { - Throw(); - DeadCode(); - } - - void Nullness() - { - var @null = default(object); - var nonNull1 = default(int); - var nullFromCil = this.GetType().DeclaringMethod; - var nonNullFromCil = true.ToString(); - var null2 = NullFunction() ?? IndirectNull(); - - // Null from dataflow assembly - var nullMethods = new Dataflow.NullMethods(); - var null3 = nullMethods.ReturnsNull(); // Null - var null4 = nullMethods.ReturnsNull2(); - var null5 = nullMethods.NullProperty; - - // NotNull - var nonNull = new Dataflow.NonNullMethods(); - var nonNull2 = nonNull.ReturnsNonNull(); - var nonNull3 = nonNull.ReturnsNonNullIndirect(); - var nonNull4 = nonNull.NonNullProperty; - - // The following are not always null: - var notNull1 = cond ? NullFunction() : this; - var notNull2 = nullMethods.VirtualReturnsNull(); - var notNull3 = nullMethods.VirtualNullProperty; - var notNonNull = nonNull.VirtualNonNull; - - // The following are maybe null - var maybeNull = nonNull.MaybeNull(); - var maybeNull2 = nonNull.MaybeNull2(); - var maybeNullMethods = new DataflowUnoptimized.MaybeNullMethods(); - maybeNull = maybeNullMethods.MaybeNull(); - maybeNull2 = maybeNullMethods.MaybeNull2(); - } - - object IndirectNull() => null; - - bool cond; - - object NullFunction() - { - object x = IndirectNull(); - if (cond) x = null; - return x; - } -} diff --git a/csharp/ql/test/library-tests/cil/dataflow/options b/csharp/ql/test/library-tests/cil/dataflow/options deleted file mode 100644 index 8511aa162b8..00000000000 --- a/csharp/ql/test/library-tests/cil/dataflow/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: --cil diff --git a/csharp/ql/test/library-tests/cil/enums/Program.cs b/csharp/ql/test/library-tests/cil/enums/Program.cs deleted file mode 100644 index e867fdc0718..00000000000 --- a/csharp/ql/test/library-tests/cil/enums/Program.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System; - -class Test -{ - static void Main(string[] args) - { - } -} diff --git a/csharp/ql/test/library-tests/cil/enums/enums.expected b/csharp/ql/test/library-tests/cil/enums/enums.expected deleted file mode 100644 index 4b64efc04ab..00000000000 --- a/csharp/ql/test/library-tests/cil/enums/enums.expected +++ /dev/null @@ -1,290 +0,0 @@ -| Interop.Advapi32.ActivityControl | uint | -| Interop.BOOL | int | -| Interop.Error | int | -| Interop.Globalization.ResultCode | int | -| Interop.Globalization.TimeZoneDisplayNameType | int | -| Interop.PollEvents | short | -| Interop.Sys.AccessMode | int | -| Interop.Sys.ControlCharacterNames | int | -| Interop.Sys.FileAdvice | int | -| Interop.Sys.FileStatusFlags | int | -| Interop.Sys.LockOperations | int | -| Interop.Sys.NodeType | int | -| Interop.Sys.OpenFlags | int | -| Interop.Sys.SeekWhence | int | -| Interop.Sys.SysConfName | int | -| Interop.Sys.SysLogPriority | int | -| Interop.Sys.UnixFileSystemTypes | uint | -| Microsoft.Win32.SafeHandles.SafeFileHandle.NullableBool | int | -| Microsoft.Win32.SafeHandles.SafeFileHandle.ThreadPoolValueTaskSource.Operation | byte | -| System.AttributeTargets | int | -| System.Base64FormattingOptions | int | -| System.Buffers.ArrayPoolEventSource.BufferAllocatedReason | int | -| System.Buffers.ArrayPoolEventSource.BufferDroppedReason | int | -| System.Buffers.OperationStatus | int | -| System.Buffers.Text.Utf8Parser.ComponentParseResult | byte | -| System.Buffers.Text.Utf8Parser.ParseNumberOptions | int | -| System.Buffers.Utilities.MemoryPressure | int | -| System.Collections.Generic.InsertionBehavior | byte | -| System.ComponentModel.EditorBrowsableState | int | -| System.Configuration.Assemblies.AssemblyHashAlgorithm | int | -| System.Configuration.Assemblies.AssemblyVersionCompatibility | int | -| System.ConsoleColor | int | -| System.ConsoleKey | int | -| System.ConsoleModifiers | int | -| System.ConsoleSpecialKey | int | -| System.DTSubStringType | int | -| System.DateTimeKind | int | -| System.DateTimeParse.DS | int | -| System.DateTimeParse.DTT | int | -| System.DateTimeParse.TM | int | -| System.DayOfWeek | int | -| System.DefaultBinder.Primitives | int | -| System.DelegateBindingFlags | int | -| System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes | int | -| System.Diagnostics.Contracts.ContractFailureKind | int | -| System.Diagnostics.DebuggableAttribute.DebuggingModes | int | -| System.Diagnostics.DebuggerBrowsableState | int | -| System.Diagnostics.StackTrace.TraceFormat | int | -| System.Diagnostics.Tracing.ControllerCommand | int | -| System.Diagnostics.Tracing.EventActivityOptions | int | -| System.Diagnostics.Tracing.EventChannel | byte | -| System.Diagnostics.Tracing.EventChannelType | int | -| System.Diagnostics.Tracing.EventCommand | int | -| System.Diagnostics.Tracing.EventFieldFormat | int | -| System.Diagnostics.Tracing.EventFieldTags | int | -| System.Diagnostics.Tracing.EventKeywords | long | -| System.Diagnostics.Tracing.EventLevel | int | -| System.Diagnostics.Tracing.EventManifestOptions | int | -| System.Diagnostics.Tracing.EventOpcode | int | -| System.Diagnostics.Tracing.EventPipeSerializationFormat | int | -| System.Diagnostics.Tracing.EventProvider.WriteEventErrorCode | int | -| System.Diagnostics.Tracing.EventProviderType | int | -| System.Diagnostics.Tracing.EventSourceSettings | int | -| System.Diagnostics.Tracing.EventTags | int | -| System.Diagnostics.Tracing.EventTask | int | -| System.Diagnostics.Tracing.ManifestEnvelope.ManifestFormats | byte | -| System.Diagnostics.Tracing.NativeRuntimeEventSource.ContentionFlagsMap | byte | -| System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadAdjustmentReasonMap | uint | -| System.Diagnostics.Tracing.RuntimeEventSource.EventId | int | -| System.Diagnostics.Tracing.TraceLoggingDataType | int | -| System.Environment.SpecialFolder | int | -| System.Environment.SpecialFolderOption | int | -| System.EnvironmentVariableTarget | int | -| System.Exception.ExceptionMessageKind | int | -| System.ExceptionArgument | int | -| System.ExceptionResource | int | -| System.GC.EnableNoGCRegionCallbackStatus | int | -| System.GC.EndNoGCRegionStatus | int | -| System.GC.GCConfigurationType | int | -| System.GC.GC_ALLOC_FLAGS | int | -| System.GC.RefreshMemoryStatus | int | -| System.GC.StartNoGCRegionStatus | int | -| System.GCCollectionMode | int | -| System.GCKind | int | -| System.GCNotificationStatus | int | -| System.Globalization.CalendarAlgorithmType | int | -| System.Globalization.CalendarDataType | int | -| System.Globalization.CalendarId | ushort | -| System.Globalization.CalendarWeekRule | int | -| System.Globalization.CalendricalCalculationsHelper.CorrectionAlgorithm | int | -| System.Globalization.CompareOptions | int | -| System.Globalization.CultureData.LocaleGroupingData | uint | -| System.Globalization.CultureData.LocaleNumberData | uint | -| System.Globalization.CultureData.LocaleStringData | uint | -| System.Globalization.CultureTypes | int | -| System.Globalization.DateTimeFormatFlags | int | -| System.Globalization.DateTimeFormatInfoScanner.FoundDatePattern | int | -| System.Globalization.DateTimeStyles | int | -| System.Globalization.DigitShapes | int | -| System.Globalization.FORMATFLAGS | int | -| System.Globalization.GregorianCalendarTypes | int | -| System.Globalization.HebrewNumber.HS | sbyte | -| System.Globalization.HebrewNumber.HebrewToken | short | -| System.Globalization.HebrewNumberParsingState | int | -| System.Globalization.IcuLocaleDataParts | int | -| System.Globalization.MonthNameStyles | int | -| System.Globalization.NumberStyles | int | -| System.Globalization.StrongBidiCategory | int | -| System.Globalization.TextInfo.Tristate | byte | -| System.Globalization.TimeSpanFormat.StandardFormat | int | -| System.Globalization.TimeSpanParse.TTT | byte | -| System.Globalization.TimeSpanParse.TimeSpanStandardStyles | byte | -| System.Globalization.TimeSpanStyles | int | -| System.Globalization.UnicodeCategory | int | -| System.Guid.GuidParseThrowStyle | byte | -| System.Guid.ParseFailure | int | -| System.HexConverter.Casing | uint | -| System.IO.FileAccess | int | -| System.IO.FileAttributes | int | -| System.IO.FileMode | int | -| System.IO.FileOptions | int | -| System.IO.FileShare | int | -| System.IO.HandleInheritability | int | -| System.IO.MatchCasing | int | -| System.IO.MatchType | int | -| System.IO.SearchOption | int | -| System.IO.SearchTarget | int | -| System.IO.SeekOrigin | int | -| System.IO.UnixFileMode | int | -| System.LazyState | int | -| System.LoaderOptimization | int | -| System.MidpointRounding | int | -| System.Number.NumberBufferKind | byte | -| System.Number.ParsingStatus | int | -| System.ParseFailureKind | int | -| System.ParseFlags | int | -| System.PlatformID | int | -| System.Reflection.AssemblyContentType | int | -| System.Reflection.AssemblyNameFlags | int | -| System.Reflection.AssemblyNameParser.AttributeKind | int | -| System.Reflection.AssemblyNameParser.Token | int | -| System.Reflection.Associates.Attributes | int | -| System.Reflection.BindingFlags | int | -| System.Reflection.CallingConventions | int | -| System.Reflection.CorElementType | byte | -| System.Reflection.CustomAttributeEncoding | int | -| System.Reflection.Emit.AssemblyBuilderAccess | int | -| System.Reflection.Emit.DynamicResolver.SecurityControlFlags | int | -| System.Reflection.Emit.FlowControl | int | -| System.Reflection.Emit.OpCodeType | int | -| System.Reflection.Emit.OpCodeValues | int | -| System.Reflection.Emit.OperandType | int | -| System.Reflection.Emit.PEFileKinds | int | -| System.Reflection.Emit.PackingSize | int | -| System.Reflection.Emit.ScopeAction | sbyte | -| System.Reflection.Emit.StackBehaviour | int | -| System.Reflection.Emit.TypeKind | int | -| System.Reflection.Emit.TypeNameBuilder.Format | int | -| System.Reflection.EventAttributes | int | -| System.Reflection.ExceptionHandlingClauseOptions | int | -| System.Reflection.FieldAttributes | int | -| System.Reflection.GenericParameterAttributes | int | -| System.Reflection.ImageFileMachine | int | -| System.Reflection.InvocationFlags | uint | -| System.Reflection.MdSigCallingConvention | byte | -| System.Reflection.MemberTypes | int | -| System.Reflection.MetadataTokenType | int | -| System.Reflection.MethodAttributes | int | -| System.Reflection.MethodBase.InvokerArgFlags | int | -| System.Reflection.MethodBase.InvokerStrategy | int | -| System.Reflection.MethodImplAttributes | int | -| System.Reflection.MethodSemanticsAttributes | int | -| System.Reflection.NullabilityInfoContext.NotAnnotatedStatus | int | -| System.Reflection.NullabilityState | int | -| System.Reflection.PInvokeAttributes | int | -| System.Reflection.ParameterAttributes | int | -| System.Reflection.PortableExecutableKinds | int | -| System.Reflection.ProcessorArchitecture | int | -| System.Reflection.PropertyAttributes | int | -| System.Reflection.ResourceAttributes | int | -| System.Reflection.ResourceLocation | int | -| System.Reflection.SignatureCallingConvention | byte | -| System.Reflection.TypeAttributes | int | -| System.Reflection.TypeNameParser.TokenType | int | -| System.Resources.ResourceTypeCode | int | -| System.Resources.UltimateResourceFallbackLocation | int | -| System.Runtime.CompilerServices.CastResult | int | -| System.Runtime.CompilerServices.CompilationRelaxations | int | -| System.Runtime.CompilerServices.LoadHint | int | -| System.Runtime.CompilerServices.MethodCodeType | int | -| System.Runtime.CompilerServices.MethodImplOptions | int | -| System.Runtime.CompilerServices.UnsafeAccessorKind | int | -| System.Runtime.ConstrainedExecution.Cer | int | -| System.Runtime.ConstrainedExecution.Consistency | int | -| System.Runtime.GCLargeObjectHeapCompactionMode | int | -| System.Runtime.GCLatencyMode | int | -| System.Runtime.GCSettings.SetLatencyModeStatus | int | -| System.Runtime.InteropServices.Architecture | int | -| System.Runtime.InteropServices.CallingConvention | int | -| System.Runtime.InteropServices.CharSet | int | -| System.Runtime.InteropServices.ClassInterfaceType | int | -| System.Runtime.InteropServices.ComInterfaceType | int | -| System.Runtime.InteropServices.ComMemberType | int | -| System.Runtime.InteropServices.ComTypes.CALLCONV | int | -| System.Runtime.InteropServices.ComTypes.DESCKIND | int | -| System.Runtime.InteropServices.ComTypes.FUNCFLAGS | short | -| System.Runtime.InteropServices.ComTypes.FUNCKIND | int | -| System.Runtime.InteropServices.ComTypes.IDLFLAG | short | -| System.Runtime.InteropServices.ComTypes.IMPLTYPEFLAGS | int | -| System.Runtime.InteropServices.ComTypes.INVOKEKIND | int | -| System.Runtime.InteropServices.ComTypes.LIBFLAGS | short | -| System.Runtime.InteropServices.ComTypes.PARAMFLAG | short | -| System.Runtime.InteropServices.ComTypes.SYSKIND | int | -| System.Runtime.InteropServices.ComTypes.TYPEFLAGS | short | -| System.Runtime.InteropServices.ComTypes.TYPEKIND | int | -| System.Runtime.InteropServices.ComTypes.VARFLAGS | short | -| System.Runtime.InteropServices.ComTypes.VARKIND | int | -| System.Runtime.InteropServices.ComWrappersScenario | int | -| System.Runtime.InteropServices.CreateComInterfaceFlags | int | -| System.Runtime.InteropServices.CreateObjectFlags | int | -| System.Runtime.InteropServices.CustomQueryInterfaceMode | int | -| System.Runtime.InteropServices.CustomQueryInterfaceResult | int | -| System.Runtime.InteropServices.DllImportSearchPath | int | -| System.Runtime.InteropServices.GCHandleType | int | -| System.Runtime.InteropServices.LayoutKind | int | -| System.Runtime.InteropServices.Marshalling.MarshalMode | int | -| System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.MessageSendFunction | int | -| System.Runtime.InteropServices.PosixSignal | int | -| System.Runtime.InteropServices.StringMarshalling | int | -| System.Runtime.InteropServices.UnmanagedType | int | -| System.Runtime.InteropServices.VarEnum | int | -| System.Runtime.Intrinsics.X86.FloatComparisonMode | byte | -| System.Runtime.Loader.AssemblyLoadContext.InternalState | int | -| System.Runtime.Serialization.StreamingContextStates | int | -| System.Runtime.Versioning.ComponentGuaranteesOptions | int | -| System.Runtime.Versioning.ResourceScope | int | -| System.Runtime.Versioning.SxSRequirements | int | -| System.RuntimeType.CheckValueStatus | int | -| System.RuntimeType.MemberListType | int | -| System.RuntimeType.RuntimeTypeCache.CacheType | int | -| System.Security.PartialTrustVisibilityLevel | int | -| System.Security.Permissions.PermissionState | int | -| System.Security.Permissions.SecurityAction | int | -| System.Security.Permissions.SecurityPermissionFlag | int | -| System.Security.Principal.PrincipalPolicy | int | -| System.Security.Principal.TokenImpersonationLevel | int | -| System.Security.SecurityCriticalScope | int | -| System.Security.SecurityRuleSet | byte | -| System.StringComparison | int | -| System.StringSplitOptions | int | -| System.StubHelpers.AsAnyMarshaler.BackPropAction | int | -| System.TermInfo.WellKnownNumbers | int | -| System.TermInfo.WellKnownStrings | int | -| System.Text.NormalizationForm | int | -| System.Text.TrimType | int | -| System.Text.Unicode.GraphemeClusterBreakType | int | -| System.Threading.ApartmentState | int | -| System.Threading.EventResetMode | int | -| System.Threading.LazyThreadSafetyMode | int | -| System.Threading.LockRecursionPolicy | int | -| System.Threading.OpenExistingResult | int | -| System.Threading.PortableThreadPool.HillClimbing.StateOrTransition | int | -| System.Threading.PortableThreadPool.PendingBlockingAdjustment | byte | -| System.Threading.ReaderWriterLockSlim.EnterLockType | int | -| System.Threading.ReaderWriterLockSlim.EnterSpinLockReason | int | -| System.Threading.ReaderWriterLockSlim.WaiterStates | byte | -| System.Threading.StackCrawlMark | int | -| System.Threading.Tasks.AsyncCausalityStatus | int | -| System.Threading.Tasks.CausalityRelation | int | -| System.Threading.Tasks.CausalitySynchronousWork | int | -| System.Threading.Tasks.ConcurrentExclusiveSchedulerPair.ProcessingMode | byte | -| System.Threading.Tasks.ConfigureAwaitOptions | int | -| System.Threading.Tasks.InternalTaskOptions | int | -| System.Threading.Tasks.Sources.ValueTaskSourceOnCompletedFlags | int | -| System.Threading.Tasks.Sources.ValueTaskSourceStatus | int | -| System.Threading.Tasks.Task.TaskStateFlags | int | -| System.Threading.Tasks.TaskContinuationOptions | int | -| System.Threading.Tasks.TaskCreationOptions | int | -| System.Threading.Tasks.TaskStatus | int | -| System.Threading.Tasks.TplEventSource.TaskWaitBehavior | int | -| System.Threading.ThreadPriority | int | -| System.Threading.ThreadState | int | -| System.TimeZoneInfo.StringSerializer.State | int | -| System.TimeZoneInfo.TZVersion | byte | -| System.TimeZoneInfo.TimeZoneInfoResult | int | -| System.TimeZoneInfoOptions | int | -| System.TokenType | int | -| System.TypeCode | int | -| System.TypeNameFormatFlags | int | -| System.TypeNameKind | int | diff --git a/csharp/ql/test/library-tests/cil/enums/enums.ql b/csharp/ql/test/library-tests/cil/enums/enums.ql deleted file mode 100644 index 675aa69a91c..00000000000 --- a/csharp/ql/test/library-tests/cil/enums/enums.ql +++ /dev/null @@ -1,16 +0,0 @@ -import semmle.code.cil.Types -import semmle.code.csharp.commons.QualifiedName - -predicate osSpecific(string qualifier, string name) { - qualifier = "Interop.Sys" and - ( - name = "LockType" or // doesn't exist on osx - name = "NSSearchPathDirectory" // doesn't exist on linux. - ) -} - -from Enum e, string qualifier, string name -where - e.hasFullyQualifiedName(qualifier, name) and - not osSpecific(qualifier, name) -select getQualifiedName(qualifier, name), e.getUnderlyingType().toStringWithTypes() diff --git a/csharp/ql/test/library-tests/cil/enums/options b/csharp/ql/test/library-tests/cil/enums/options deleted file mode 100644 index 8511aa162b8..00000000000 --- a/csharp/ql/test/library-tests/cil/enums/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: --cil diff --git a/csharp/ql/test/library-tests/cil/functionPointers/Class1.cs_ b/csharp/ql/test/library-tests/cil/functionPointers/Class1.cs_ deleted file mode 100644 index bd0ddc30906..00000000000 --- a/csharp/ql/test/library-tests/cil/functionPointers/Class1.cs_ +++ /dev/null @@ -1,52 +0,0 @@ -using System; - -#nullable enable - -public class FnPointer -{ - public unsafe static class Program - { - static delegate*<int> pointer = &M0; - - public static int M0() - { - return 0; - } - - static void M1(delegate*<ref int, out object?, int> f) - { - int i = 42; - int j = f(ref i, out object? o); - } - - static void M2<T>(delegate* unmanaged[Stdcall/*, StdcallSuppressGCTransition*/]<ref int, out object?, T, void> f) where T : new() - { - int i = 42; - f(ref i, out object? o, new T()); - } - - static void M3(delegate* managed<ref int, out object?, in int, ref int> f) - { - int i = 42; - ref int j = ref f(ref i, out object? o, in i); - } - - static void M4<T>(delegate*<T, int> f) where T : new() - { - int j = f(new T()); - } - - static void M5(delegate*<B, A> f, delegate*<A, B> ff) - { - M5(ff, ff); // implicit conversion due to implicit reference conversion - } - - static void M6(delegate*<int*, void*> f, delegate*<void*, int*> ff) - { - M6(ff, ff); // implicit conversion due to implicit pointer conversion - } - - class A { } - class B : A { } - } -} \ No newline at end of file diff --git a/csharp/ql/test/library-tests/cil/functionPointers/Test.cs b/csharp/ql/test/library-tests/cil/functionPointers/Test.cs deleted file mode 100644 index 2dfba697682..00000000000 --- a/csharp/ql/test/library-tests/cil/functionPointers/Test.cs +++ /dev/null @@ -1,5 +0,0 @@ -using System; - -class Test -{ -} diff --git a/csharp/ql/test/library-tests/cil/functionPointers/fnptr.dll b/csharp/ql/test/library-tests/cil/functionPointers/fnptr.dll deleted file mode 100644 index c63b9dcc254..00000000000 Binary files a/csharp/ql/test/library-tests/cil/functionPointers/fnptr.dll and /dev/null differ diff --git a/csharp/ql/test/library-tests/cil/functionPointers/functionPointers.expected b/csharp/ql/test/library-tests/cil/functionPointers/functionPointers.expected deleted file mode 100644 index deebe4d568a..00000000000 --- a/csharp/ql/test/library-tests/cil/functionPointers/functionPointers.expected +++ /dev/null @@ -1,73 +0,0 @@ -fnptr -| delegate* managed<!0,Int32> | 1 | Int32 | 0 | -| delegate* managed<A,B> | 1 | B | 0 | -| delegate* managed<B,A> | 1 | A | 0 | -| delegate* managed<Byte&,Void> | 1 | void | 0 | -| delegate* managed<Int32&,Object& modreq(OutAttribute),Int32& modreq(InAttribute),Int32&> | 3 | Int32& | 0 | -| delegate* managed<Int32&,Object& modreq(OutAttribute),Int32> | 2 | Int32 | 0 | -| delegate* managed<Int32*,Void*> | 1 | Void* | 0 | -| delegate* managed<Int32> | 0 | Int32 | 0 | -| delegate* managed<IntPtr,Byte&,PortableTailCallFrame*,Void> | 3 | void | 0 | -| delegate* managed<Object,Void> | 1 | void | 0 | -| delegate* managed<Void*,Int32*> | 1 | Int32* | 0 | -| delegate* managed<Void*,Object> | 1 | Object | 0 | -| delegate* unmanaged<Byte*,Int32,Byte,Int64,Int64,EVENT_FILTER_DESCRIPTOR*,Void*,Void> | 7 | void | 9 | -| delegate* unmanaged<Char*,IntPtr,Void> | 2 | void | 9 | -| delegate* unmanaged<Int32,PosixSignal,Int32> | 2 | Int32 | 9 | -| delegate* unmanaged<IntPtr,Guid*,IntPtr*,Int32> | 3 | Int32 | 9 | -| delegate* unmanaged<IntPtr,Int32> | 1 | Int32 | 9 | -| delegate* unmanaged<IntPtr,Void> | 1 | void | 9 | -| delegate* unmanaged<NoGCRegionCallbackFinalizerWorkItem*,Void> | 1 | void | 9 | -| delegate* unmanaged<Void*,Byte*,Void> | 2 | void | 9 | -| delegate* unmanaged<Void*,Void*,Void*,GCConfigurationType,Int64,Void> | 5 | void | 9 | -| delegate* unmanaged<Void> | 0 | void | 9 | -| delegate* unmanaged[StdCall]<Int32&,Object& modreq(OutAttribute),!0,Void> | 3 | void | 2 | -params -| delegate* managed<!0,Int32> | 0 | Parameter 0 of delegate* managed<!0,Int32> | !0 | -| delegate* managed<A,B> | 0 | Parameter 0 of delegate* managed<A,B> | A | -| delegate* managed<B,A> | 0 | Parameter 0 of delegate* managed<B,A> | B | -| delegate* managed<Byte&,Void> | 0 | Parameter 0 of delegate* managed<Byte&,Void> | Byte& | -| delegate* managed<Int32&,Object& modreq(OutAttribute),Int32& modreq(InAttribute),Int32&> | 0 | Parameter 0 of delegate* managed<Int32&,Object& modreq(OutAttribute),Int32& modreq(InAttribute),Int32&> | Int32& | -| delegate* managed<Int32&,Object& modreq(OutAttribute),Int32& modreq(InAttribute),Int32&> | 1 | Parameter 1 of delegate* managed<Int32&,Object& modreq(OutAttribute),Int32& modreq(InAttribute),Int32&> | Object& | -| delegate* managed<Int32&,Object& modreq(OutAttribute),Int32& modreq(InAttribute),Int32&> | 2 | Parameter 2 of delegate* managed<Int32&,Object& modreq(OutAttribute),Int32& modreq(InAttribute),Int32&> | Int32& | -| delegate* managed<Int32&,Object& modreq(OutAttribute),Int32> | 0 | Parameter 0 of delegate* managed<Int32&,Object& modreq(OutAttribute),Int32> | Int32& | -| delegate* managed<Int32&,Object& modreq(OutAttribute),Int32> | 1 | Parameter 1 of delegate* managed<Int32&,Object& modreq(OutAttribute),Int32> | Object& | -| delegate* managed<Int32*,Void*> | 0 | Parameter 0 of delegate* managed<Int32*,Void*> | Int32* | -| delegate* managed<IntPtr,Byte&,PortableTailCallFrame*,Void> | 0 | Parameter 0 of delegate* managed<IntPtr,Byte&,PortableTailCallFrame*,Void> | IntPtr | -| delegate* managed<IntPtr,Byte&,PortableTailCallFrame*,Void> | 1 | Parameter 1 of delegate* managed<IntPtr,Byte&,PortableTailCallFrame*,Void> | Byte& | -| delegate* managed<IntPtr,Byte&,PortableTailCallFrame*,Void> | 2 | Parameter 2 of delegate* managed<IntPtr,Byte&,PortableTailCallFrame*,Void> | PortableTailCallFrame* | -| delegate* managed<Object,Void> | 0 | Parameter 0 of delegate* managed<Object,Void> | Object | -| delegate* managed<Void*,Int32*> | 0 | Parameter 0 of delegate* managed<Void*,Int32*> | Void* | -| delegate* managed<Void*,Object> | 0 | Parameter 0 of delegate* managed<Void*,Object> | Void* | -| delegate* unmanaged<Byte*,Int32,Byte,Int64,Int64,EVENT_FILTER_DESCRIPTOR*,Void*,Void> | 0 | Parameter 0 of delegate* unmanaged<Byte*,Int32,Byte,Int64,Int64,EVENT_FILTER_DESCRIPTOR*,Void*,Void> | Byte* | -| delegate* unmanaged<Byte*,Int32,Byte,Int64,Int64,EVENT_FILTER_DESCRIPTOR*,Void*,Void> | 1 | Parameter 1 of delegate* unmanaged<Byte*,Int32,Byte,Int64,Int64,EVENT_FILTER_DESCRIPTOR*,Void*,Void> | Int32 | -| delegate* unmanaged<Byte*,Int32,Byte,Int64,Int64,EVENT_FILTER_DESCRIPTOR*,Void*,Void> | 2 | Parameter 2 of delegate* unmanaged<Byte*,Int32,Byte,Int64,Int64,EVENT_FILTER_DESCRIPTOR*,Void*,Void> | Byte | -| delegate* unmanaged<Byte*,Int32,Byte,Int64,Int64,EVENT_FILTER_DESCRIPTOR*,Void*,Void> | 3 | Parameter 3 of delegate* unmanaged<Byte*,Int32,Byte,Int64,Int64,EVENT_FILTER_DESCRIPTOR*,Void*,Void> | Int64 | -| delegate* unmanaged<Byte*,Int32,Byte,Int64,Int64,EVENT_FILTER_DESCRIPTOR*,Void*,Void> | 4 | Parameter 4 of delegate* unmanaged<Byte*,Int32,Byte,Int64,Int64,EVENT_FILTER_DESCRIPTOR*,Void*,Void> | Int64 | -| delegate* unmanaged<Byte*,Int32,Byte,Int64,Int64,EVENT_FILTER_DESCRIPTOR*,Void*,Void> | 5 | Parameter 5 of delegate* unmanaged<Byte*,Int32,Byte,Int64,Int64,EVENT_FILTER_DESCRIPTOR*,Void*,Void> | EVENT_FILTER_DESCRIPTOR* | -| delegate* unmanaged<Byte*,Int32,Byte,Int64,Int64,EVENT_FILTER_DESCRIPTOR*,Void*,Void> | 6 | Parameter 6 of delegate* unmanaged<Byte*,Int32,Byte,Int64,Int64,EVENT_FILTER_DESCRIPTOR*,Void*,Void> | Void* | -| delegate* unmanaged<Char*,IntPtr,Void> | 0 | Parameter 0 of delegate* unmanaged<Char*,IntPtr,Void> | Char* | -| delegate* unmanaged<Char*,IntPtr,Void> | 1 | Parameter 1 of delegate* unmanaged<Char*,IntPtr,Void> | IntPtr | -| delegate* unmanaged<Int32,PosixSignal,Int32> | 0 | Parameter 0 of delegate* unmanaged<Int32,PosixSignal,Int32> | Int32 | -| delegate* unmanaged<Int32,PosixSignal,Int32> | 1 | Parameter 1 of delegate* unmanaged<Int32,PosixSignal,Int32> | PosixSignal | -| delegate* unmanaged<IntPtr,Guid*,IntPtr*,Int32> | 0 | Parameter 0 of delegate* unmanaged<IntPtr,Guid*,IntPtr*,Int32> | IntPtr | -| delegate* unmanaged<IntPtr,Guid*,IntPtr*,Int32> | 1 | Parameter 1 of delegate* unmanaged<IntPtr,Guid*,IntPtr*,Int32> | Guid* | -| delegate* unmanaged<IntPtr,Guid*,IntPtr*,Int32> | 2 | Parameter 2 of delegate* unmanaged<IntPtr,Guid*,IntPtr*,Int32> | IntPtr* | -| delegate* unmanaged<IntPtr,Int32> | 0 | Parameter 0 of delegate* unmanaged<IntPtr,Int32> | IntPtr | -| delegate* unmanaged<IntPtr,Void> | 0 | Parameter 0 of delegate* unmanaged<IntPtr,Void> | IntPtr | -| delegate* unmanaged<NoGCRegionCallbackFinalizerWorkItem*,Void> | 0 | Parameter 0 of delegate* unmanaged<NoGCRegionCallbackFinalizerWorkItem*,Void> | NoGCRegionCallbackFinalizerWorkItem* | -| delegate* unmanaged<Void*,Byte*,Void> | 0 | Parameter 0 of delegate* unmanaged<Void*,Byte*,Void> | Void* | -| delegate* unmanaged<Void*,Byte*,Void> | 1 | Parameter 1 of delegate* unmanaged<Void*,Byte*,Void> | Byte* | -| delegate* unmanaged<Void*,Void*,Void*,GCConfigurationType,Int64,Void> | 0 | Parameter 0 of delegate* unmanaged<Void*,Void*,Void*,GCConfigurationType,Int64,Void> | Void* | -| delegate* unmanaged<Void*,Void*,Void*,GCConfigurationType,Int64,Void> | 1 | Parameter 1 of delegate* unmanaged<Void*,Void*,Void*,GCConfigurationType,Int64,Void> | Void* | -| delegate* unmanaged<Void*,Void*,Void*,GCConfigurationType,Int64,Void> | 2 | Parameter 2 of delegate* unmanaged<Void*,Void*,Void*,GCConfigurationType,Int64,Void> | Void* | -| delegate* unmanaged<Void*,Void*,Void*,GCConfigurationType,Int64,Void> | 3 | Parameter 3 of delegate* unmanaged<Void*,Void*,Void*,GCConfigurationType,Int64,Void> | GCConfigurationType | -| delegate* unmanaged<Void*,Void*,Void*,GCConfigurationType,Int64,Void> | 4 | Parameter 4 of delegate* unmanaged<Void*,Void*,Void*,GCConfigurationType,Int64,Void> | Int64 | -| delegate* unmanaged[StdCall]<Int32&,Object& modreq(OutAttribute),!0,Void> | 0 | Parameter 0 of delegate* unmanaged[StdCall]<Int32&,Object& modreq(OutAttribute),!0,Void> | Int32& | -| delegate* unmanaged[StdCall]<Int32&,Object& modreq(OutAttribute),!0,Void> | 1 | Parameter 1 of delegate* unmanaged[StdCall]<Int32&,Object& modreq(OutAttribute),!0,Void> | Object& | -| delegate* unmanaged[StdCall]<Int32&,Object& modreq(OutAttribute),!0,Void> | 2 | Parameter 2 of delegate* unmanaged[StdCall]<Int32&,Object& modreq(OutAttribute),!0,Void> | !0 | -modifiers -| delegate* managed<Int32&,Object& modreq(OutAttribute),Int32& modreq(InAttribute),Int32&> | System.Runtime.InteropServices.InAttribute | modreq | -| delegate* managed<Int32&,Object& modreq(OutAttribute),Int32& modreq(InAttribute),Int32&> | System.Runtime.InteropServices.OutAttribute | modreq | -| delegate* managed<Int32&,Object& modreq(OutAttribute),Int32> | System.Runtime.InteropServices.OutAttribute | modreq | -| delegate* unmanaged[StdCall]<Int32&,Object& modreq(OutAttribute),!0,Void> | System.Runtime.InteropServices.OutAttribute | modreq | diff --git a/csharp/ql/test/library-tests/cil/functionPointers/functionPointers.ql b/csharp/ql/test/library-tests/cil/functionPointers/functionPointers.ql deleted file mode 100644 index 5a22a65d5c0..00000000000 --- a/csharp/ql/test/library-tests/cil/functionPointers/functionPointers.ql +++ /dev/null @@ -1,38 +0,0 @@ -import cil -import semmle.code.cil.Type -import semmle.code.csharp.commons.QualifiedName - -bindingset[kind] -private string getKind(int kind) { if kind = 1 then result = "modreq" else result = "modopt" } - -bindingset[t, e] -private string getAnnotatedType(Type t, Element e) { - cil_type_annotation(e, 32) and result = t.toString() + "&" - or - not cil_type_annotation(e, 32) and result = t.toString() -} - -query predicate fnptr(string fnptr, int paramCount, string returnType, int callingConvention) { - exists(FunctionPointerType fn | fnptr = fn.toString() | - paramCount = fn.getNumberOfParameters() and - returnType = getAnnotatedType(fn.getReturnType(), fn) and - callingConvention = fn.getCallingConvention() - ) -} - -query predicate params(string fnptr, int i, string param, string t) { - exists(FunctionPointerType fn, Parameter p | fnptr = fn.toString() and param = p.toString() | - fn.getParameter(i) = p and t = getAnnotatedType(p.getType(), p) - ) -} - -query predicate modifiers(string fnptr, string modifier, string sKind) { - exists(Type modType, int kind, FunctionPointerType fn, string qualifier, string name | - fnptr = fn.toString() - | - cil_custom_modifiers(fn, modType, kind) and - modType.hasFullyQualifiedName(qualifier, name) and - modifier = getQualifiedName(qualifier, name) and - sKind = getKind(kind) - ) -} diff --git a/csharp/ql/test/library-tests/cil/functionPointers/options b/csharp/ql/test/library-tests/cil/functionPointers/options deleted file mode 100644 index 8511aa162b8..00000000000 --- a/csharp/ql/test/library-tests/cil/functionPointers/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: --cil diff --git a/csharp/ql/test/library-tests/cil/init-only-prop/Program.cs b/csharp/ql/test/library-tests/cil/init-only-prop/Program.cs deleted file mode 100644 index e867fdc0718..00000000000 --- a/csharp/ql/test/library-tests/cil/init-only-prop/Program.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System; - -class Test -{ - static void Main(string[] args) - { - } -} diff --git a/csharp/ql/test/library-tests/cil/init-only-prop/Test.cs_ b/csharp/ql/test/library-tests/cil/init-only-prop/Test.cs_ deleted file mode 100644 index d39b5a82926..00000000000 --- a/csharp/ql/test/library-tests/cil/init-only-prop/Test.cs_ +++ /dev/null @@ -1,13 +0,0 @@ -namespace System.Runtime.CompilerServices -{ - class IsExternalInit { } -} - -namespace cil_init_prop -{ - class SomeClass - { - public int Prop1 { get; set; } - public int Prop2 { get; init; } - } -} diff --git a/csharp/ql/test/library-tests/cil/init-only-prop/cil-init-prop.dll b/csharp/ql/test/library-tests/cil/init-only-prop/cil-init-prop.dll deleted file mode 100644 index dceff38f487..00000000000 Binary files a/csharp/ql/test/library-tests/cil/init-only-prop/cil-init-prop.dll and /dev/null differ diff --git a/csharp/ql/test/library-tests/cil/init-only-prop/customModifiers.expected b/csharp/ql/test/library-tests/cil/init-only-prop/customModifiers.expected deleted file mode 100644 index ec6ec39982d..00000000000 --- a/csharp/ql/test/library-tests/cil/init-only-prop/customModifiers.expected +++ /dev/null @@ -1,104 +0,0 @@ -| AsROImpl | System.Runtime.InteropServices.InAttribute | modreq | -| AsRef | System.Runtime.InteropServices.InAttribute | modreq | -| EventWriteTransfer | System.Runtime.InteropServices.InAttribute | modreq | -| GetPinnableReference | System.Runtime.InteropServices.InAttribute | modreq | -| GetValueRefOrDefaultRef | System.Runtime.InteropServices.InAttribute | modreq | -| ThreadIDExecutingCallbacks | System.Runtime.CompilerServices.IsVolatile | modreq | -| Value | System.Runtime.CompilerServices.IsVolatile | modreq | -| _bufferedValuesIndex | System.Runtime.CompilerServices.IsVolatile | modreq | -| _canSeek | System.Runtime.CompilerServices.IsVolatile | modreq | -| _cancelCompleted | System.Runtime.CompilerServices.IsVolatile | modreq | -| _container | System.Runtime.CompilerServices.IsVolatile | modreq | -| _first | System.Runtime.CompilerServices.IsVolatile | modreq | -| _head | System.Runtime.CompilerServices.IsVolatile | modreq | -| _idsThatDoNotTrackAllValues | System.Runtime.CompilerServices.IsVolatile | modreq | -| _initialized | System.Runtime.CompilerServices.IsVolatile | modreq | -| _isWriterInProgress | System.Runtime.CompilerServices.IsVolatile | modreq | -| _kernelEvent | System.Runtime.CompilerServices.IsVolatile | modreq | -| _last | System.Runtime.CompilerServices.IsVolatile | modreq | -| _localTimeZone | System.Runtime.CompilerServices.IsVolatile | modreq | -| _next | System.Runtime.CompilerServices.IsVolatile | modreq | -| _oldKeepAlive | System.Runtime.CompilerServices.IsVolatile | modreq | -| _owner | System.Runtime.CompilerServices.IsVolatile | modreq | -| _previous | System.Runtime.CompilerServices.IsVolatile | modreq | -| _queues | System.Runtime.CompilerServices.IsVolatile | modreq | -| _saDurationFormats | System.Runtime.CompilerServices.IsVolatile | modreq | -| _saLongTimes | System.Runtime.CompilerServices.IsVolatile | modreq | -| _saShortTimes | System.Runtime.CompilerServices.IsVolatile | modreq | -| _slotArray | System.Runtime.CompilerServices.IsVolatile | modreq | -| _state | System.Runtime.CompilerServices.IsVolatile | modreq | -| _supportsRandomAccess | System.Runtime.CompilerServices.IsVolatile | modreq | -| _tail | System.Runtime.CompilerServices.IsVolatile | modreq | -| _timer | System.Runtime.CompilerServices.IsVolatile | modreq | -| _version | System.Runtime.CompilerServices.IsVolatile | modreq | -| _waCalendars | System.Runtime.CompilerServices.IsVolatile | modreq | -| currentTimeZone | System.Runtime.CompilerServices.IsVolatile | modreq | -| g_nameCache | System.Runtime.CompilerServices.IsVolatile | modreq | -| get_Current | System.Runtime.InteropServices.InAttribute | modreq | -| get_Item | System.Runtime.InteropServices.InAttribute | modreq | -| m_Dispatchers | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_Next | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_array | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_channelData | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_combinedState | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_completionCountdown | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_completionEvent | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_continuationObject | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_currentCount | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_etwProvider | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_eventData | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_eventObj | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_eventPipeProvider | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_exceptionalChildren | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_exceptionsHolder | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_faultExceptions | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_headIndex | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_internalCancellationRequested | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_isHandled | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_lock | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_mask | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_nameIsCached | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_rawManifest | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_stateFlags | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_tailIndex | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_taskSchedulerId | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_waitHandle | System.Runtime.CompilerServices.IsVolatile | modreq | -| numRequestedWorkers | System.Runtime.CompilerServices.IsVolatile | modreq | -| property Current | System.Runtime.InteropServices.InAttribute | modreq | -| property Item | System.Runtime.InteropServices.InAttribute | modreq | -| s_DefaultThreadCurrentCulture | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_DefaultThreadCurrentUICulture | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_Invariant | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_allContexts | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_anonymouslyHostedDynamicMethodsModule | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_cachedCultures | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_cachedCulturesByLcid | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_cachedCulturesByName | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_cachedRegions | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_canceledTask | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_currentRegionInfo | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_defaultBinder | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_defaultFlowSuppressed | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_defaultInstance | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_emitAnsiColorCodes | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_encoding | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_indentSize | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_initialized | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_invariantInfo | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_jajpDTFI | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_japaneseEraInfo | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_osArchPlusOne | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_osVersion | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_privilegedProcess | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_processId | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_processPath | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_provider | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_providers | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_regionNames | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_systemPageSize | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_userDefaultCulture | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_userDefaultUICulture | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_zhtwDTFI | System.Runtime.CompilerServices.IsVolatile | modreq | -| set_IsDerived | System.Runtime.CompilerServices.IsExternalInit | modreq | -| set_IsOptional | System.Runtime.CompilerServices.IsExternalInit | modreq | -| set_Prop2 | System.Runtime.CompilerServices.IsExternalInit | modreq | diff --git a/csharp/ql/test/library-tests/cil/init-only-prop/customModifiers.ql b/csharp/ql/test/library-tests/cil/init-only-prop/customModifiers.ql deleted file mode 100644 index ad4f9fd6cb5..00000000000 --- a/csharp/ql/test/library-tests/cil/init-only-prop/customModifiers.ql +++ /dev/null @@ -1,15 +0,0 @@ -import semmle.code.cil.Type -import semmle.code.csharp.commons.QualifiedName - -bindingset[kind] -private string getKind(int kind) { if kind = 1 then result = "modreq" else result = "modopt" } - -from string receiver, string modifier, int kind -where - exists(Type modType, CustomModifierReceiver cmr, string qualifier, string name | - receiver = cmr.toString() and - cil_custom_modifiers(cmr, modType, kind) and - modType.hasFullyQualifiedName(qualifier, name) and - modifier = getQualifiedName(qualifier, name) - ) -select receiver, modifier, getKind(kind) diff --git a/csharp/ql/test/library-tests/cil/init-only-prop/options b/csharp/ql/test/library-tests/cil/init-only-prop/options deleted file mode 100644 index 8511aa162b8..00000000000 --- a/csharp/ql/test/library-tests/cil/init-only-prop/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: --cil diff --git a/csharp/ql/test/library-tests/cil/init-only-prop/setters.expected b/csharp/ql/test/library-tests/cil/init-only-prop/setters.expected deleted file mode 100644 index 49f58c1113d..00000000000 --- a/csharp/ql/test/library-tests/cil/init-only-prop/setters.expected +++ /dev/null @@ -1,2 +0,0 @@ -| cil-init-prop.dll:0:0:0:0 | set_Prop1 | set | -| cil-init-prop.dll:0:0:0:0 | set_Prop2 | init | diff --git a/csharp/ql/test/library-tests/cil/init-only-prop/setters.ql b/csharp/ql/test/library-tests/cil/init-only-prop/setters.ql deleted file mode 100644 index b5721e243dd..00000000000 --- a/csharp/ql/test/library-tests/cil/init-only-prop/setters.ql +++ /dev/null @@ -1,8 +0,0 @@ -import semmle.code.cil.Method -import semmle.code.csharp.Location - -private string getType(Setter s) { if s.isInitOnly() then result = "init" else result = "set" } - -from Setter s -where s.getLocation().(Assembly).getName() = "cil-init-prop" -select s, getType(s) diff --git a/csharp/ql/test/library-tests/cil/pdbs/EmbeddedPdb.dll b/csharp/ql/test/library-tests/cil/pdbs/EmbeddedPdb.dll deleted file mode 100644 index 7a9e483ba2b..00000000000 Binary files a/csharp/ql/test/library-tests/cil/pdbs/EmbeddedPdb.dll and /dev/null differ diff --git a/csharp/ql/test/library-tests/cil/pdbs/FullPdb.dll b/csharp/ql/test/library-tests/cil/pdbs/FullPdb.dll deleted file mode 100644 index 6ce8636e4ef..00000000000 Binary files a/csharp/ql/test/library-tests/cil/pdbs/FullPdb.dll and /dev/null differ diff --git a/csharp/ql/test/library-tests/cil/pdbs/FullPdb.pdb b/csharp/ql/test/library-tests/cil/pdbs/FullPdb.pdb deleted file mode 100644 index 69e2f3db261..00000000000 Binary files a/csharp/ql/test/library-tests/cil/pdbs/FullPdb.pdb and /dev/null differ diff --git a/csharp/ql/test/library-tests/cil/pdbs/InstructionLocations.expected b/csharp/ql/test/library-tests/cil/pdbs/InstructionLocations.expected deleted file mode 100644 index 96d8f519d48..00000000000 --- a/csharp/ql/test/library-tests/cil/pdbs/InstructionLocations.expected +++ /dev/null @@ -1,41 +0,0 @@ -| C:/dev/projects/Sandbox/EmbeddedPdb/Class1.cs:6:3:6:4 | 0: nop | -| C:/dev/projects/Sandbox/EmbeddedPdb/Class1.cs:7:4:7:13 | 1: ldc.i4.1 | -| C:/dev/projects/Sandbox/EmbeddedPdb/Class1.cs:7:4:7:13 | 2: stloc.0 L0 | -| C:/dev/projects/Sandbox/EmbeddedPdb/Class1.cs:7:4:7:13 | 3: br.s 4: | -| C:/dev/projects/Sandbox/EmbeddedPdb/Class1.cs:8:3:8:4 | 4: ldloc.0 | -| C:/dev/projects/Sandbox/EmbeddedPdb/Class1.cs:8:3:8:4 | 5: ret | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:6:3:6:4 | 0: nop | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:7:4:7:20 | 1: ldc.i4.1 | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:7:4:7:20 | 2: stloc.0 L0 | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:8:9:8:18 | 3: ldc.i4.1 | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:8:9:8:18 | 4: stloc.1 L1 | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:8:9:8:18 | 5: br.s 14: | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:8:20:8:26 | 14: ldloc.1 | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:8:20:8:26 | 15: ldarg.1 | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:8:20:8:26 | 16: cgt | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:8:20:8:26 | 17: ldc.i4.0 | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:8:20:8:26 | 18: ceq | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:8:20:8:26 | 19: stloc.2 L2 | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:8:20:8:26 | 20: ldloc.2 | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:8:20:8:26 | 21: brtrue.s 6: | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:8:28:8:31 | 10: ldloc.1 | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:8:28:8:31 | 11: ldc.i4.1 | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:8:28:8:31 | 12: add | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:8:28:8:31 | 13: stloc.1 L1 | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:9:5:9:18 | 6: ldloc.0 | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:9:5:9:18 | 7: ldloc.1 | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:9:5:9:18 | 8: mul | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:9:5:9:18 | 9: stloc.0 L0 | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:10:4:10:19 | 22: ldloc.0 | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:10:4:10:19 | 23: stloc.3 L3 | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:10:4:10:19 | 24: br.s 25: | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:11:3:11:4 | 25: ldloc.3 | -| C:/dev/projects/Sandbox/PortablePdb/Class1.cs:11:3:11:4 | 26: ret | -| EmbeddedPdb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | 0: ldarg.0 | -| EmbeddedPdb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | 1: call System.Object..ctor | -| EmbeddedPdb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | 2: nop | -| EmbeddedPdb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | 3: ret | -| PortablePdb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | 0: ldarg.0 | -| PortablePdb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | 1: call System.Object..ctor | -| PortablePdb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | 2: nop | -| PortablePdb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | 3: ret | diff --git a/csharp/ql/test/library-tests/cil/pdbs/InstructionLocations.ql b/csharp/ql/test/library-tests/cil/pdbs/InstructionLocations.ql deleted file mode 100644 index 672e682752f..00000000000 --- a/csharp/ql/test/library-tests/cil/pdbs/InstructionLocations.ql +++ /dev/null @@ -1,14 +0,0 @@ -import cil - -// Used only because native PDBs are only supported on Windows. -// They are included as tests but disabled here. -predicate filterMethod(CIL::Method m) { - m.getDeclaringType().getNamespace().getName() = "EmbeddedPdb" or - m.getDeclaringType().getNamespace().getName() = "PortablePdb" -} - -from CIL::Instruction instruction, CIL::Location location -where - location = instruction.getLocation() and - filterMethod(instruction.getImplementation().getMethod()) -select location.toString(), instruction.toStringExtra() diff --git a/csharp/ql/test/library-tests/cil/pdbs/MethodLocations.expected b/csharp/ql/test/library-tests/cil/pdbs/MethodLocations.expected deleted file mode 100644 index 4a9747bb722..00000000000 --- a/csharp/ql/test/library-tests/cil/pdbs/MethodLocations.expected +++ /dev/null @@ -1,4 +0,0 @@ -| System.Int32 EmbeddedPdb.Class1.Method() | C:/dev/projects/Sandbox/EmbeddedPdb/Class1.cs:6:3:6:4 | true | -| System.Int32 EmbeddedPdb.Class1.Method() | EmbeddedPdb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | false | -| System.Int32 PortablePdb.Class1.Factorial(System.Int32) | C:/dev/projects/Sandbox/PortablePdb/Class1.cs:6:3:6:4 | true | -| System.Int32 PortablePdb.Class1.Factorial(System.Int32) | PortablePdb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | false | diff --git a/csharp/ql/test/library-tests/cil/pdbs/MethodLocations.ql b/csharp/ql/test/library-tests/cil/pdbs/MethodLocations.ql deleted file mode 100644 index 5fa3d09d940..00000000000 --- a/csharp/ql/test/library-tests/cil/pdbs/MethodLocations.ql +++ /dev/null @@ -1,16 +0,0 @@ -import cil - -// Used only because native PDBs are only supported on Windows. -// They are included as tests but disabled here. -predicate filterMethod(CIL::Method m) { - m.getDeclaringType().getNamespace().getName() = "EmbeddedPdb" or - m.getDeclaringType().getNamespace().getName() = "PortablePdb" -} - -from CIL::Method method, CIL::Location location, boolean primaryLocation -where - location = method.getALocation() and - exists(CIL::Location l | l = method.getALocation() | l.getFile().isPdbSourceFile()) and - (if location = method.getLocation() then primaryLocation = true else primaryLocation = false) and - filterMethod(method) -select method.toStringWithTypes(), location.toString(), primaryLocation diff --git a/csharp/ql/test/library-tests/cil/pdbs/PdbOnly.dll b/csharp/ql/test/library-tests/cil/pdbs/PdbOnly.dll deleted file mode 100644 index 49fd9b0be23..00000000000 Binary files a/csharp/ql/test/library-tests/cil/pdbs/PdbOnly.dll and /dev/null differ diff --git a/csharp/ql/test/library-tests/cil/pdbs/PdbOnly.pdb b/csharp/ql/test/library-tests/cil/pdbs/PdbOnly.pdb deleted file mode 100644 index 92f60f94a9d..00000000000 Binary files a/csharp/ql/test/library-tests/cil/pdbs/PdbOnly.pdb and /dev/null differ diff --git a/csharp/ql/test/library-tests/cil/pdbs/Pdbs.cs b/csharp/ql/test/library-tests/cil/pdbs/Pdbs.cs deleted file mode 100644 index 8b137891791..00000000000 --- a/csharp/ql/test/library-tests/cil/pdbs/Pdbs.cs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/csharp/ql/test/library-tests/cil/pdbs/PortablePdb.dll b/csharp/ql/test/library-tests/cil/pdbs/PortablePdb.dll deleted file mode 100644 index a6da57ff582..00000000000 Binary files a/csharp/ql/test/library-tests/cil/pdbs/PortablePdb.dll and /dev/null differ diff --git a/csharp/ql/test/library-tests/cil/pdbs/PortablePdb.pdb b/csharp/ql/test/library-tests/cil/pdbs/PortablePdb.pdb deleted file mode 100644 index 4dc80964ea8..00000000000 Binary files a/csharp/ql/test/library-tests/cil/pdbs/PortablePdb.pdb and /dev/null differ diff --git a/csharp/ql/test/library-tests/cil/pdbs/Stubs.expected b/csharp/ql/test/library-tests/cil/pdbs/Stubs.expected deleted file mode 100644 index e63ae56c0a6..00000000000 --- a/csharp/ql/test/library-tests/cil/pdbs/Stubs.expected +++ /dev/null @@ -1,2 +0,0 @@ -| EmbeddedPdb.dll:0:0:0:0 | EmbeddedPdb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | -| PdbOnly.dll:0:0:0:0 | PdbOnly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | diff --git a/csharp/ql/test/library-tests/cil/pdbs/Stubs.ql b/csharp/ql/test/library-tests/cil/pdbs/Stubs.ql deleted file mode 100644 index 23d873c0399..00000000000 --- a/csharp/ql/test/library-tests/cil/pdbs/Stubs.ql +++ /dev/null @@ -1,5 +0,0 @@ -import cil::CIL - -from Assembly asm -where assemblyIsStub(asm) -select asm diff --git a/csharp/ql/test/library-tests/cil/pdbs/options b/csharp/ql/test/library-tests/cil/pdbs/options deleted file mode 100644 index 0771fbd3771..00000000000 --- a/csharp/ql/test/library-tests/cil/pdbs/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: --cil --pdb diff --git a/csharp/ql/test/library-tests/cil/regressions/ConstructedMethods.expected b/csharp/ql/test/library-tests/cil/regressions/ConstructedMethods.expected deleted file mode 100644 index bb7c7754e02..00000000000 --- a/csharp/ql/test/library-tests/cil/regressions/ConstructedMethods.expected +++ /dev/null @@ -1,2 +0,0 @@ -| Methods.dll:0:0:0:0 | F | Methods.dll:0:0:0:0 | F | Methods.dll:0:0:0:0 | !0 | -| Methods.dll:0:0:0:0 | F | Methods.dll:0:0:0:0 | F | Methods.dll:0:0:0:0 | !0 | diff --git a/csharp/ql/test/library-tests/cil/regressions/ConstructedMethods.ql b/csharp/ql/test/library-tests/cil/regressions/ConstructedMethods.ql deleted file mode 100644 index 912536aeb3a..00000000000 --- a/csharp/ql/test/library-tests/cil/regressions/ConstructedMethods.ql +++ /dev/null @@ -1,7 +0,0 @@ -import cil::CIL - -from UnboundGenericMethod f, ConstructedMethod fc -where - fc.getUnboundMethod() = f and - f.hasFullyQualifiedName("Methods", "Class1", "F") -select f, fc, fc.getTypeArgument(0) diff --git a/csharp/ql/test/library-tests/cil/regressions/Methods.cs b/csharp/ql/test/library-tests/cil/regressions/Methods.cs deleted file mode 100644 index 7d8ec90f84d..00000000000 --- a/csharp/ql/test/library-tests/cil/regressions/Methods.cs +++ /dev/null @@ -1,17 +0,0 @@ -/* - * A regression test for the CIL extractor - compiled into Methods.dll - * This tests the correct extraction of F<T>, and we should end up with - * 2 constructed methods of F<T>. - */ - -namespace Methods -{ - public class Class1 - { - public T F<T>(T t) { return new T[] { t }[0]; } - - public T G<T>(T t) { return F(t); } - - public T H<T>(T t) { return F(t); } - } -} diff --git a/csharp/ql/test/library-tests/cil/regressions/Methods.dll b/csharp/ql/test/library-tests/cil/regressions/Methods.dll deleted file mode 100644 index 1178f3e09c4..00000000000 Binary files a/csharp/ql/test/library-tests/cil/regressions/Methods.dll and /dev/null differ diff --git a/csharp/ql/test/library-tests/cil/regressions/options b/csharp/ql/test/library-tests/cil/regressions/options deleted file mode 100644 index 8511aa162b8..00000000000 --- a/csharp/ql/test/library-tests/cil/regressions/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: --cil diff --git a/csharp/ql/test/library-tests/cil/typeAnnotations/Program.cs b/csharp/ql/test/library-tests/cil/typeAnnotations/Program.cs deleted file mode 100644 index e867fdc0718..00000000000 --- a/csharp/ql/test/library-tests/cil/typeAnnotations/Program.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System; - -class Test -{ - static void Main(string[] args) - { - } -} diff --git a/csharp/ql/test/library-tests/cil/typeAnnotations/options b/csharp/ql/test/library-tests/cil/typeAnnotations/options deleted file mode 100644 index 8511aa162b8..00000000000 --- a/csharp/ql/test/library-tests/cil/typeAnnotations/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: --cil diff --git a/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.expected b/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.expected deleted file mode 100644 index c3216e25e99..00000000000 --- a/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.expected +++ /dev/null @@ -1,3942 +0,0 @@ -| <PrivateImplementationDetails>.InlineArrayElementRef | method | 32 | -| <PrivateImplementationDetails>.InlineArrayFirstElementRef | method | 32 | -| Local variable 0 of method System.Array.Clear | local | 32 | -| Local variable 0 of method System.Array.GetFlattenedIndex | local | 32 | -| Local variable 0 of method System.Buffer.Memmove | local | 32 | -| Local variable 0 of method System.Buffers.AnyByteSearchValues.IndexOfAnyScalar | local | 32 | -| Local variable 0 of method System.Buffers.AsciiByteSearchValues.IndexOfAnyScalar | local | 32 | -| Local variable 0 of method System.Buffers.AsciiCharSearchValues.IndexOfAnyScalar | local | 32 | -| Local variable 0 of method System.Buffers.Binary.BinaryPrimitives.ReverseEndianness | local | 32 | -| Local variable 0 of method System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorized | local | 32 | -| Local variable 0 of method System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorizedAnyByte | local | 32 | -| Local variable 0 of method System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorized | local | 32 | -| Local variable 0 of method System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorizedAnyByte | local | 32 | -| Local variable 0 of method System.Buffers.Latin1CharSearchValues.IndexOfAny | local | 32 | -| Local variable 0 of method System.Buffers.ProbabilisticMap.IndexOfAnyVectorized | local | 32 | -| Local variable 0 of method System.Collections.Generic.Dictionary.Contains | local | 32 | -| Local variable 0 of method System.Collections.Generic.Dictionary.Enumerator.MoveNext | local | 32 | -| Local variable 0 of method System.Collections.Generic.Dictionary.FindValue | local | 32 | -| Local variable 0 of method System.Collections.Generic.Dictionary.KeyCollection.Enumerator.MoveNext | local | 32 | -| Local variable 0 of method System.Collections.Generic.Dictionary.Remove | local | 32 | -| Local variable 0 of method System.Collections.Generic.Dictionary.TryGetValue | local | 32 | -| Local variable 0 of method System.Collections.Generic.Dictionary.ValueCollection.Enumerator.MoveNext | local | 32 | -| Local variable 0 of method System.Collections.Generic.Dictionary.get_Item | local | 32 | -| Local variable 0 of method System.Collections.Generic.GenericArraySortHelper.PickPivotAndPartition | local | 32 | -| Local variable 0 of method System.Collections.Generic.GenericArraySortHelper.SwapIfGreaterWithValues | local | 32 | -| Local variable 0 of method System.Collections.Generic.HashSet.Enumerator.MoveNext | local | 32 | -| Local variable 0 of method System.Convert.TryDecodeFromUtf16 | local | 32 | -| Local variable 0 of method System.Diagnostics.Tracing.ActivityTracker.NormalizeActivityName | local | 32 | -| Local variable 0 of method System.Diagnostics.Tracing.EventSource.AddEventDescriptor | local | 32 | -| Local variable 0 of method System.Diagnostics.Tracing.EventSource.WriteEventVarargs | local | 32 | -| Local variable 0 of method System.Diagnostics.Tracing.EventSource.WriteEventWithRelatedActivityIdCore | local | 32 | -| Local variable 0 of method System.Diagnostics.Tracing.EventSource.WriteToAllListeners | local | 32 | -| Local variable 0 of method System.Diagnostics.Tracing.EventWrittenEventArgs.get_OSThreadId | local | 32 | -| Local variable 0 of method System.Enum.CompareTo | local | 32 | -| Local variable 0 of method System.Enum.Equals | local | 32 | -| Local variable 0 of method System.Enum.GetHashCode | local | 32 | -| Local variable 0 of method System.Enum.GetValue | local | 32 | -| Local variable 0 of method System.Enum.HasFlag | local | 32 | -| Local variable 0 of method System.GC.ConfigCallback | local | 32 | -| Local variable 0 of method System.Globalization.Ordinal.IndexOfOrdinalIgnoreCase | local | 32 | -| Local variable 0 of method System.Guid.GetHashCode | local | 32 | -| Local variable 0 of method System.HashCode.AddBytes | local | 32 | -| Local variable 0 of method System.HexConverter.EncodeToUtf16_Vector128 | local | 32 | -| Local variable 0 of method System.Number.BigInteger.Add | local | 32 | -| Local variable 0 of method System.Number.BigInteger.Multiply | local | 32 | -| Local variable 0 of method System.Numerics.BitOperations.Crc32Fallback.Crc32C | local | 32 | -| Local variable 0 of method System.ReadOnlySpan.GetPinnableReference | local | 32 | -| Local variable 0 of method System.Runtime.CompilerServices.ConditionalWeakTable.Container.RemoveIndex | local | 32 | -| Local variable 0 of method System.Runtime.Intrinsics.Vector512.CopyTo | local | 32 | -| Local variable 0 of method System.Runtime.Intrinsics.Vector512.Create | local | 32 | -| Local variable 0 of method System.Runtime.Intrinsics.Vector512.TryCopyTo | local | 32 | -| Local variable 0 of method System.Span.GetPinnableReference | local | 32 | -| Local variable 0 of method System.Text.Ascii.IsValidCore | local | 32 | -| Local variable 0 of method System.Threading.CancellationTokenSource.Registrations.EnterLock | local | 32 | -| Local variable 0 of method System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction | local | 32 | -| Local variable 0 of method System.Threading.TimerQueue.LinkTimer | local | 32 | -| Local variable 1 of method Interop.Sys.GetControlCharacters | local | 32 | -| Local variable 1 of method System.Array.Fill | local | 32 | -| Local variable 1 of method System.Array.GetUpperBound | local | 32 | -| Local variable 1 of method System.Buffer.Memmove | local | 32 | -| Local variable 1 of method System.Buffers.AnyByteSearchValues.IndexOfAnyScalar | local | 32 | -| Local variable 1 of method System.Buffers.AsciiByteSearchValues.IndexOfAnyScalar | local | 32 | -| Local variable 1 of method System.Buffers.AsciiCharSearchValues.IndexOfAnyScalar | local | 32 | -| Local variable 1 of method System.Buffers.Binary.BinaryPrimitives.ReverseEndianness | local | 32 | -| Local variable 1 of method System.Buffers.Latin1CharSearchValues.IndexOfAny | local | 32 | -| Local variable 1 of method System.Buffers.ProbabilisticMap..ctor | local | 32 | -| Local variable 1 of method System.Buffers.ProbabilisticMap.IndexOfAnyVectorized | local | 32 | -| Local variable 1 of method System.Buffers.Text.Base64.DecodeFromUtf8 | local | 32 | -| Local variable 1 of method System.Buffers.Text.Base64.DecodeFromUtf8InPlace | local | 32 | -| Local variable 1 of method System.Buffers.Text.Base64.EncodeToUtf8 | local | 32 | -| Local variable 1 of method System.Buffers.Text.Base64.EncodeToUtf8InPlace | local | 32 | -| Local variable 1 of method System.Byte.TryReadBigEndian | local | 32 | -| Local variable 1 of method System.Byte.TryReadLittleEndian | local | 32 | -| Local variable 1 of method System.Char.TryReadBigEndian | local | 32 | -| Local variable 1 of method System.Char.TryReadLittleEndian | local | 32 | -| Local variable 1 of method System.Collections.Generic.Dictionary.FindValue | local | 32 | -| Local variable 1 of method System.Collections.Generic.GenericArraySortHelper.PickPivotAndPartition | local | 32 | -| Local variable 1 of method System.Collections.Generic.RandomizedStringEqualityComparer..ctor | local | 32 | -| Local variable 1 of method System.ConsolePal.Read | local | 32 | -| Local variable 1 of method System.ConsolePal.Write | local | 32 | -| Local variable 1 of method System.Convert.FromBase64CharArray | local | 32 | -| Local variable 1 of method System.Convert.FromBase64String | local | 32 | -| Local variable 1 of method System.Convert.TryDecodeFromUtf16 | local | 32 | -| Local variable 1 of method System.DateTimeFormat.TryFormatDateOnlyO | local | 32 | -| Local variable 1 of method System.DateTimeFormat.TryFormatTimeOnlyO | local | 32 | -| Local variable 1 of method System.DateTimeFormat.TryFormatTimeOnlyR | local | 32 | -| Local variable 1 of method System.Diagnostics.Debugger.LogInternal | local | 32 | -| Local variable 1 of method System.Diagnostics.Tracing.ActivityTracker.ActivityInfo.CreateActivityPathGuid | local | 32 | -| Local variable 1 of method System.Diagnostics.Tracing.EventSource.WriteEvent | local | 32 | -| Local variable 1 of method System.Diagnostics.Tracing.EventSource.WriteImpl | local | 32 | -| Local variable 1 of method System.Diagnostics.Tracing.EventSource.WriteMultiMerge | local | 32 | -| Local variable 1 of method System.Diagnostics.Tracing.FrameworkEventSource.WriteEvent | local | 32 | -| Local variable 1 of method System.Enum.CompareTo | local | 32 | -| Local variable 1 of method System.Enum.Equals | local | 32 | -| Local variable 1 of method System.Enum.HasFlag | local | 32 | -| Local variable 1 of method System.Enum.ToString | local | 32 | -| Local variable 1 of method System.Enum.TryFormat | local | 32 | -| Local variable 1 of method System.Globalization.CalendarData.<>c.<GetCalendarInfo>b__32_0 | local | 32 | -| Local variable 1 of method System.Globalization.CharUnicodeInfo.GetCategoryCasingTableOffsetNoBoundsChecks | local | 32 | -| Local variable 1 of method System.Globalization.CharUnicodeInfo.GetNumericGraphemeTableOffsetNoBoundsChecks | local | 32 | -| Local variable 1 of method System.Globalization.CharUnicodeInfo.GetNumericValueNoBoundsCheck | local | 32 | -| Local variable 1 of method System.Globalization.CompareInfo.IcuCompareString | local | 32 | -| Local variable 1 of method System.Globalization.CompareInfo.IcuEndsWith | local | 32 | -| Local variable 1 of method System.Globalization.CompareInfo.IcuGetSortKeyLength | local | 32 | -| Local variable 1 of method System.Globalization.CompareInfo.IcuIndexOfCore | local | 32 | -| Local variable 1 of method System.Globalization.CompareInfo.IcuStartsWith | local | 32 | -| Local variable 1 of method System.Globalization.CompareInfo.IndexOfOrdinalHelper | local | 32 | -| Local variable 1 of method System.Globalization.CompareInfo.IndexOfOrdinalIgnoreCaseHelper | local | 32 | -| Local variable 1 of method System.Globalization.IdnMapping.GetAscii | local | 32 | -| Local variable 1 of method System.Globalization.IdnMapping.GetUnicode | local | 32 | -| Local variable 1 of method System.Globalization.InvariantModeCasing.CompareStringIgnoreCase | local | 32 | -| Local variable 1 of method System.Globalization.InvariantModeCasing.IndexOfIgnoreCase | local | 32 | -| Local variable 1 of method System.Globalization.InvariantModeCasing.LastIndexOfIgnoreCase | local | 32 | -| Local variable 1 of method System.Globalization.OrdinalCasing.CompareStringIgnoreCase | local | 32 | -| Local variable 1 of method System.Globalization.OrdinalCasing.IndexOf | local | 32 | -| Local variable 1 of method System.Globalization.OrdinalCasing.LastIndexOf | local | 32 | -| Local variable 1 of method System.Guid.TryFormatX | local | 32 | -| Local variable 1 of method System.HashCode.AddBytes | local | 32 | -| Local variable 1 of method System.HexConverter.EncodeToUtf16_Vector128 | local | 32 | -| Local variable 1 of method System.IO.RandomAccess.ReadAtOffset | local | 32 | -| Local variable 1 of method System.IO.RandomAccess.WriteAtOffset | local | 32 | -| Local variable 1 of method System.MemoryExtensions.IndexOfAnyExcept | local | 32 | -| Local variable 1 of method System.MemoryExtensions.LastIndexOfAnyExcept | local | 32 | -| Local variable 1 of method System.Number.BigInteger.Add | local | 32 | -| Local variable 1 of method System.Number.BigInteger.Pow10 | local | 32 | -| Local variable 1 of method System.Number.MatchChars | local | 32 | -| Local variable 1 of method System.Number.TryStringToNumber | local | 32 | -| Local variable 1 of method System.PackedSpanHelpers.Contains | local | 32 | -| Local variable 1 of method System.PackedSpanHelpers.IndexOf | local | 32 | -| Local variable 1 of method System.Reflection.Emit.RuntimeModuleBuilder.SetFieldRVAContent | local | 32 | -| Local variable 1 of method System.Reflection.Emit.RuntimeTypeBuilder.DefineCustomAttribute | local | 32 | -| Local variable 1 of method System.Reflection.Emit.RuntimeTypeBuilder.SetPInvokeData | local | 32 | -| Local variable 1 of method System.Reflection.Emit.ScopeTree.AddUsingNamespaceToCurrentScope | local | 32 | -| Local variable 1 of method System.Reflection.MetadataEnumResult.get_Item | local | 32 | -| Local variable 1 of method System.Reflection.RuntimeAssembly.GetModule | local | 32 | -| Local variable 1 of method System.Reflection.RuntimeAssembly.GetVersion | local | 32 | -| Local variable 1 of method System.Runtime.InteropServices.ComWrappers.GetIUnknownImplInternal | local | 32 | -| Local variable 1 of method System.Runtime.InteropServices.Marshal.QueryInterface | local | 32 | -| Local variable 1 of method System.Runtime.Loader.AssemblyLoadContext.InternalSetProfileRoot | local | 32 | -| Local variable 1 of method System.Runtime.Loader.AssemblyLoadContext.InternalStartProfile | local | 32 | -| Local variable 1 of method System.Runtime.Loader.AssemblyLoadContext.LoadFromPath | local | 32 | -| Local variable 1 of method System.SpanHelpers.Count | local | 32 | -| Local variable 1 of method System.SpanHelpers.CountValueType | local | 32 | -| Local variable 1 of method System.SpanHelpers.IndexOf | local | 32 | -| Local variable 1 of method System.SpanHelpers.IndexOfAnyExcept | local | 32 | -| Local variable 1 of method System.SpanHelpers.IndexOfAnyExceptInRange | local | 32 | -| Local variable 1 of method System.SpanHelpers.IndexOfAnyInRange | local | 32 | -| Local variable 1 of method System.SpanHelpers.LastIndexOfAnyExcept | local | 32 | -| Local variable 1 of method System.SpanHelpers.LastIndexOfAnyExceptInRange | local | 32 | -| Local variable 1 of method System.SpanHelpers.LastIndexOfAnyInRange | local | 32 | -| Local variable 1 of method System.String.GetBytesFromEncoding | local | 32 | -| Local variable 1 of method System.String.GetNonRandomizedHashCode | local | 32 | -| Local variable 1 of method System.String.Trim | local | 32 | -| Local variable 1 of method System.String.TrimEnd | local | 32 | -| Local variable 1 of method System.String.TrimStart | local | 32 | -| Local variable 1 of method System.Text.ASCIIEncoding.GetByteCount | local | 32 | -| Local variable 1 of method System.Text.ASCIIEncoding.GetBytes | local | 32 | -| Local variable 1 of method System.Text.ASCIIEncoding.GetCharCount | local | 32 | -| Local variable 1 of method System.Text.ASCIIEncoding.GetChars | local | 32 | -| Local variable 1 of method System.Text.ASCIIEncoding.TryGetBytes | local | 32 | -| Local variable 1 of method System.Text.ASCIIEncoding.TryGetChars | local | 32 | -| Local variable 1 of method System.Text.Ascii.ChangeCase | local | 32 | -| Local variable 1 of method System.Text.Decoder.Convert | local | 32 | -| Local variable 1 of method System.Text.Decoder.GetCharCount | local | 32 | -| Local variable 1 of method System.Text.Decoder.GetChars | local | 32 | -| Local variable 1 of method System.Text.DecoderNLS.Convert | local | 32 | -| Local variable 1 of method System.Text.DecoderNLS.GetCharCount | local | 32 | -| Local variable 1 of method System.Text.Encoder.Convert | local | 32 | -| Local variable 1 of method System.Text.Encoder.GetByteCount | local | 32 | -| Local variable 1 of method System.Text.Encoder.GetBytes | local | 32 | -| Local variable 1 of method System.Text.EncoderNLS.Convert | local | 32 | -| Local variable 1 of method System.Text.Encoding.GetByteCount | local | 32 | -| Local variable 1 of method System.Text.Encoding.GetByteCountWithFallback | local | 32 | -| Local variable 1 of method System.Text.Encoding.GetBytes | local | 32 | -| Local variable 1 of method System.Text.Encoding.GetBytesWithFallback | local | 32 | -| Local variable 1 of method System.Text.Encoding.GetCharCount | local | 32 | -| Local variable 1 of method System.Text.Encoding.GetCharCountWithFallback | local | 32 | -| Local variable 1 of method System.Text.Encoding.GetChars | local | 32 | -| Local variable 1 of method System.Text.Encoding.GetCharsWithFallback | local | 32 | -| Local variable 1 of method System.Text.Encoding.GetString | local | 32 | -| Local variable 1 of method System.Text.Latin1Encoding.GetByteCount | local | 32 | -| Local variable 1 of method System.Text.Latin1Encoding.GetBytes | local | 32 | -| Local variable 1 of method System.Text.Latin1Encoding.GetChars | local | 32 | -| Local variable 1 of method System.Text.Latin1Encoding.TryGetBytes | local | 32 | -| Local variable 1 of method System.Text.Latin1Encoding.TryGetChars | local | 32 | -| Local variable 1 of method System.Text.UTF7Encoding.GetByteCount | local | 32 | -| Local variable 1 of method System.Text.UTF8Encoding.GetByteCount | local | 32 | -| Local variable 1 of method System.Text.UTF8Encoding.GetBytes | local | 32 | -| Local variable 1 of method System.Text.UTF8Encoding.GetCharCount | local | 32 | -| Local variable 1 of method System.Text.UTF8Encoding.GetChars | local | 32 | -| Local variable 1 of method System.Text.UTF8Encoding.TryGetBytes | local | 32 | -| Local variable 1 of method System.Text.UTF8Encoding.TryGetChars | local | 32 | -| Local variable 1 of method System.Text.UTF32Encoding.GetByteCount | local | 32 | -| Local variable 1 of method System.Text.Unicode.Utf8.FromUtf16 | local | 32 | -| Local variable 1 of method System.Text.Unicode.Utf8.ToUtf16 | local | 32 | -| Local variable 1 of method System.Text.Unicode.Utf8.ToUtf16PreservingReplacement | local | 32 | -| Local variable 1 of method System.Text.UnicodeEncoding.GetByteCount | local | 32 | -| Local variable 1 of method System.Threading.PortableThreadPool.HillClimbing.LogTransition | local | 32 | -| Local variable 1 of method System.Threading.Tasks.TplEventSource.TraceOperationBegin | local | 32 | -| Local variable 1 of method System.Threading.Thread.InformThreadNameChange | local | 32 | -| Local variable 1 of method System.Threading.WaitHandle.WaitMultipleIgnoringSyncContext | local | 32 | -| Local variable 1 of method System.TimeZoneInfo.<>c.<GetDisplayName>b__203_0 | local | 32 | -| Local variable 1 of method System.TimeZoneInfo.<>c.<GetDisplayName>b__203_1 | local | 32 | -| Local variable 1 of method System.UInt16.TryReadBigEndian | local | 32 | -| Local variable 1 of method System.UInt16.TryReadLittleEndian | local | 32 | -| Local variable 1 of method System.UInt32.TryReadBigEndian | local | 32 | -| Local variable 1 of method System.UInt32.TryReadLittleEndian | local | 32 | -| Local variable 1 of method System.UInt64.TryReadBigEndian | local | 32 | -| Local variable 1 of method System.UInt64.TryReadLittleEndian | local | 32 | -| Local variable 1 of method System.UInt128.TryReadBigEndian | local | 32 | -| Local variable 1 of method System.UInt128.TryReadLittleEndian | local | 32 | -| Local variable 1 of method System.UIntPtr.TryReadBigEndian | local | 32 | -| Local variable 1 of method System.UIntPtr.TryReadLittleEndian | local | 32 | -| Local variable 2 of method Interop.Globalization.GetCalendarInfo | local | 32 | -| Local variable 2 of method Interop.Globalization.GetCalendars | local | 32 | -| Local variable 2 of method Interop.Globalization.GetLocales | local | 32 | -| Local variable 2 of method Interop.Globalization.GetTimeZoneDisplayName | local | 32 | -| Local variable 2 of method Interop.Globalization.IanaIdToWindowsId | local | 32 | -| Local variable 2 of method Interop.Globalization.WindowsIdToIanaId | local | 32 | -| Local variable 2 of method Interop.Sys.GetCpuUtilization | local | 32 | -| Local variable 2 of method Interop.Sys.GetPwUidR | local | 32 | -| Local variable 2 of method System.Array.Clear | local | 32 | -| Local variable 2 of method System.Array.Copy | local | 32 | -| Local variable 2 of method System.Array.InternalGetValue | local | 32 | -| Local variable 2 of method System.Char.TryReadBigEndian | local | 32 | -| Local variable 2 of method System.Char.TryReadLittleEndian | local | 32 | -| Local variable 2 of method System.Collections.Generic.GenericArraySortHelper.PickPivotAndPartition | local | 32 | -| Local variable 2 of method System.Collections.Generic.HashSet.CopyTo | local | 32 | -| Local variable 2 of method System.Collections.Generic.HashSet.IntersectWithHashSetWithSameComparer | local | 32 | -| Local variable 2 of method System.ComAwareWeakReference.ObjectToComWeakRef | local | 32 | -| Local variable 2 of method System.Convert.ToBase64CharsLargeNoLineBreaks | local | 32 | -| Local variable 2 of method System.DateTimeFormat.FormatCustomizedRoundripTimeZone | local | 32 | -| Local variable 2 of method System.Decimal.TryWriteSignificandBigEndian | local | 32 | -| Local variable 2 of method System.Decimal.TryWriteSignificandLittleEndian | local | 32 | -| Local variable 2 of method System.Diagnostics.Tracing.EventParameterInfo.GenerateMetadataForNamedTypeV2 | local | 32 | -| Local variable 2 of method System.Diagnostics.Tracing.EventPipeInternal.CreateProvider | local | 32 | -| Local variable 2 of method System.Diagnostics.Tracing.EventPipeInternal.EventActivityIdControl | local | 32 | -| Local variable 2 of method System.Diagnostics.Tracing.EventPipeInternal.GetProvider | local | 32 | -| Local variable 2 of method System.Diagnostics.Tracing.EventSource.Write | local | 32 | -| Local variable 2 of method System.Enum.ToString | local | 32 | -| Local variable 2 of method System.Globalization.CompareInfo.EndsWithOrdinalHelper | local | 32 | -| Local variable 2 of method System.Globalization.CompareInfo.EndsWithOrdinalIgnoreCaseHelper | local | 32 | -| Local variable 2 of method System.Globalization.CompareInfo.IcuCreateSortKey | local | 32 | -| Local variable 2 of method System.Globalization.CompareInfo.IcuGetSortKey | local | 32 | -| Local variable 2 of method System.Globalization.CompareInfo.StartsWithOrdinalHelper | local | 32 | -| Local variable 2 of method System.Globalization.CompareInfo.StartsWithOrdinalIgnoreCaseHelper | local | 32 | -| Local variable 2 of method System.Globalization.InvariantModeCasing.CompareStringIgnoreCase | local | 32 | -| Local variable 2 of method System.Globalization.Normalization.IcuIsNormalized | local | 32 | -| Local variable 2 of method System.Globalization.Ordinal.CompareStringIgnoreCase | local | 32 | -| Local variable 2 of method System.Globalization.Ordinal.EqualsStringIgnoreCaseUtf8 | local | 32 | -| Local variable 2 of method System.Globalization.OrdinalCasing.CompareStringIgnoreCase | local | 32 | -| Local variable 2 of method System.Globalization.TextInfo.ChangeCaseCommon | local | 32 | -| Local variable 2 of method System.Globalization.TextInfo.ToLowerAsciiInvariant | local | 32 | -| Local variable 2 of method System.HashCode.AddBytes | local | 32 | -| Local variable 2 of method System.HexConverter.TryDecodeFromUtf16_Vector128 | local | 32 | -| Local variable 2 of method System.IO.Enumeration.FileSystemEnumerator.FindNextEntry | local | 32 | -| Local variable 2 of method System.IO.Path.TryJoin | local | 32 | -| Local variable 2 of method System.IO.PathInternal.EqualStartingCharacterCount | local | 32 | -| Local variable 2 of method System.IO.PinnedBufferMemoryStream..ctor | local | 32 | -| Local variable 2 of method System.Int16.TryReadBigEndian | local | 32 | -| Local variable 2 of method System.Int16.TryReadLittleEndian | local | 32 | -| Local variable 2 of method System.Int32.TryReadBigEndian | local | 32 | -| Local variable 2 of method System.Int32.TryReadLittleEndian | local | 32 | -| Local variable 2 of method System.Int64.TryReadBigEndian | local | 32 | -| Local variable 2 of method System.Int64.TryReadLittleEndian | local | 32 | -| Local variable 2 of method System.Int128.TryReadBigEndian | local | 32 | -| Local variable 2 of method System.Int128.TryReadLittleEndian | local | 32 | -| Local variable 2 of method System.Int128.TryWriteBigEndian | local | 32 | -| Local variable 2 of method System.Int128.TryWriteLittleEndian | local | 32 | -| Local variable 2 of method System.IntPtr.TryReadBigEndian | local | 32 | -| Local variable 2 of method System.IntPtr.TryReadLittleEndian | local | 32 | -| Local variable 2 of method System.MemoryExtensions.IndexOfAnyExcept | local | 32 | -| Local variable 2 of method System.MemoryExtensions.LastIndexOfAnyExcept | local | 32 | -| Local variable 2 of method System.ModuleHandle.ResolveMethodHandleInternal | local | 32 | -| Local variable 2 of method System.Number.BigInteger.Multiply | local | 32 | -| Local variable 2 of method System.Number.TryInt32ToHexStr | local | 32 | -| Local variable 2 of method System.Number.TryInt64ToHexStr | local | 32 | -| Local variable 2 of method System.Number.TryNegativeInt32ToDecStr | local | 32 | -| Local variable 2 of method System.Number.TryNegativeInt64ToDecStr | local | 32 | -| Local variable 2 of method System.Number.TryUInt32ToBinaryStr | local | 32 | -| Local variable 2 of method System.Number.TryUInt32ToDecStr | local | 32 | -| Local variable 2 of method System.Number.TryUInt64ToBinaryStr | local | 32 | -| Local variable 2 of method System.Number.TryUInt64ToDecStr | local | 32 | -| Local variable 2 of method System.Object.MemberwiseClone | local | 32 | -| Local variable 2 of method System.PackedSpanHelpers.IndexOfAny | local | 32 | -| Local variable 2 of method System.Reflection.AssemblyName.ParseAsAssemblySpec | local | 32 | -| Local variable 2 of method System.Reflection.Emit.RuntimeModuleBuilder.GetArrayMethodToken | local | 32 | -| Local variable 2 of method System.Reflection.Emit.RuntimeModuleBuilder.GetMemberRefFromSignature | local | 32 | -| Local variable 2 of method System.Reflection.Emit.RuntimeModuleBuilder.GetStringConstant | local | 32 | -| Local variable 2 of method System.Reflection.Emit.RuntimeModuleBuilder.GetTokenFromTypeSpec | local | 32 | -| Local variable 2 of method System.Reflection.Emit.RuntimeModuleBuilder.GetTypeRef | local | 32 | -| Local variable 2 of method System.Reflection.Emit.RuntimeTypeBuilder.DefineEvent | local | 32 | -| Local variable 2 of method System.Reflection.Emit.RuntimeTypeBuilder.DefineField | local | 32 | -| Local variable 2 of method System.Reflection.Emit.RuntimeTypeBuilder.DefineGenericParam | local | 32 | -| Local variable 2 of method System.Reflection.Emit.RuntimeTypeBuilder.DefineMethod | local | 32 | -| Local variable 2 of method System.Reflection.Emit.RuntimeTypeBuilder.DefineMethodSpec | local | 32 | -| Local variable 2 of method System.Reflection.Emit.RuntimeTypeBuilder.DefineProperty | local | 32 | -| Local variable 2 of method System.Reflection.Emit.RuntimeTypeBuilder.DefineType | local | 32 | -| Local variable 2 of method System.Reflection.Emit.RuntimeTypeBuilder.GetTokenFromSig | local | 32 | -| Local variable 2 of method System.Reflection.Emit.RuntimeTypeBuilder.SetMethodIL | local | 32 | -| Local variable 2 of method System.Reflection.Emit.RuntimeTypeBuilder.SetParamInfo | local | 32 | -| Local variable 2 of method System.Reflection.RuntimeAssembly.GetManifestResourceInfo | local | 32 | -| Local variable 2 of method System.Reflection.RuntimeAssembly.GetResource | local | 32 | -| Local variable 2 of method System.SByte.TryReadBigEndian | local | 32 | -| Local variable 2 of method System.SByte.TryReadLittleEndian | local | 32 | -| Local variable 2 of method System.SpanHelpers.IndexOfAnyValueType | local | 32 | -| Local variable 2 of method System.SpanHelpers.LastIndexOfAnyInRangeUnsignedNumber | local | 32 | -| Local variable 2 of method System.SpanHelpers.LastIndexOfAnyValueType | local | 32 | -| Local variable 2 of method System.SpanHelpers.NonPackedIndexOfAnyInRangeUnsignedNumber | local | 32 | -| Local variable 2 of method System.SpanHelpers.NonPackedIndexOfAnyValueType | local | 32 | -| Local variable 2 of method System.String.CompareOrdinalHelper | local | 32 | -| Local variable 2 of method System.String.MakeSeparatorListVectorized | local | 32 | -| Local variable 2 of method System.StubHelpers.AnsiCharMarshaler.DoAnsiConversion | local | 32 | -| Local variable 2 of method System.Text.DecoderNLS.GetChars | local | 32 | -| Local variable 2 of method System.Text.EncoderNLS.GetByteCount | local | 32 | -| Local variable 2 of method System.Text.EncoderNLS.GetBytes | local | 32 | -| Local variable 2 of method System.Text.StringBuilder.Append | local | 32 | -| Local variable 2 of method System.Text.UTF7Encoding.GetBytes | local | 32 | -| Local variable 2 of method System.Text.UTF32Encoding.GetBytes | local | 32 | -| Local variable 2 of method System.Text.UnicodeEncoding.GetBytes | local | 32 | -| Local variable 2 of method System.UInt16.TryReadBigEndian | local | 32 | -| Local variable 2 of method System.UInt16.TryReadLittleEndian | local | 32 | -| Local variable 2 of method System.UInt32.TryReadBigEndian | local | 32 | -| Local variable 2 of method System.UInt32.TryReadLittleEndian | local | 32 | -| Local variable 2 of method System.UInt64.TryReadBigEndian | local | 32 | -| Local variable 2 of method System.UInt64.TryReadLittleEndian | local | 32 | -| Local variable 2 of method System.UInt128.<op_Division>g__AddDivisor\|110_0 | local | 32 | -| Local variable 2 of method System.UInt128.TryReadBigEndian | local | 32 | -| Local variable 2 of method System.UInt128.TryReadLittleEndian | local | 32 | -| Local variable 2 of method System.UInt128.TryWriteBigEndian | local | 32 | -| Local variable 2 of method System.UInt128.WriteLittleEndianUnsafe | local | 32 | -| Local variable 2 of method System.UIntPtr.TryReadBigEndian | local | 32 | -| Local variable 2 of method System.UIntPtr.TryReadLittleEndian | local | 32 | -| Local variable 3 of method Interop.Globalization.EnumCalendarInfo | local | 32 | -| Local variable 3 of method Interop.Globalization.GetJapaneseEraStartDate | local | 32 | -| Local variable 3 of method Interop.Globalization.GetLocaleInfoGroupingSizes | local | 32 | -| Local variable 3 of method Interop.Globalization.GetLocaleInfoInt | local | 32 | -| Local variable 3 of method Interop.Globalization.GetLocaleInfoString | local | 32 | -| Local variable 3 of method Interop.Globalization.GetLocaleName | local | 32 | -| Local variable 3 of method Interop.Globalization.IsPredefinedLocale | local | 32 | -| Local variable 3 of method Interop.Kernel32.GetEnvironmentVariable | local | 32 | -| Local variable 3 of method Interop.Sys.GetUnixVersion | local | 32 | -| Local variable 3 of method Interop.Sys.GetWindowSize | local | 32 | -| Local variable 3 of method Interop.Sys.LStat | local | 32 | -| Local variable 3 of method Interop.Sys.MkDir | local | 32 | -| Local variable 3 of method Interop.Sys.ReadLink | local | 32 | -| Local variable 3 of method Interop.Sys.Rename | local | 32 | -| Local variable 3 of method Interop.Sys.SetWindowSize | local | 32 | -| Local variable 3 of method Interop.Sys.Stat | local | 32 | -| Local variable 3 of method System.Array.Copy | local | 32 | -| Local variable 3 of method System.Array.CreateInstance | local | 32 | -| Local variable 3 of method System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorized | local | 32 | -| Local variable 3 of method System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorized | local | 32 | -| Local variable 3 of method System.Buffers.Text.Base64.DecodeFromUtf8 | local | 32 | -| Local variable 3 of method System.Buffers.Text.Base64.EncodeToUtf8 | local | 32 | -| Local variable 3 of method System.Collections.Generic.Dictionary.Remove | local | 32 | -| Local variable 3 of method System.Collections.Generic.GenericArraySortHelper.PickPivotAndPartition | local | 32 | -| Local variable 3 of method System.Collections.Generic.HashSet.RemoveWhere | local | 32 | -| Local variable 3 of method System.Convert.ToBase64CharsLargeNoLineBreaks | local | 32 | -| Local variable 3 of method System.Convert.TryToBase64Chars | local | 32 | -| Local variable 3 of method System.DateTimeFormat.TryFormatDateOnlyR | local | 32 | -| Local variable 3 of method System.Diagnostics.Debugger.LogInternal | local | 32 | -| Local variable 3 of method System.Diagnostics.Tracing.EventPipeInternal.Enable | local | 32 | -| Local variable 3 of method System.Diagnostics.Tracing.EventSource.Write | local | 32 | -| Local variable 3 of method System.Diagnostics.Tracing.EventSource.WriteEvent | local | 32 | -| Local variable 3 of method System.Globalization.CompareInfo.IcuCompareString | local | 32 | -| Local variable 3 of method System.Globalization.CompareInfo.IcuEndsWith | local | 32 | -| Local variable 3 of method System.Globalization.CompareInfo.IcuIndexOfCore | local | 32 | -| Local variable 3 of method System.Globalization.CompareInfo.IcuStartsWith | local | 32 | -| Local variable 3 of method System.Globalization.CompareInfo.IndexOfOrdinalHelper | local | 32 | -| Local variable 3 of method System.Globalization.CompareInfo.IndexOfOrdinalIgnoreCaseHelper | local | 32 | -| Local variable 3 of method System.Globalization.InvariantModeCasing.IndexOfIgnoreCase | local | 32 | -| Local variable 3 of method System.Globalization.InvariantModeCasing.LastIndexOfIgnoreCase | local | 32 | -| Local variable 3 of method System.Globalization.Ordinal.CompareStringIgnoreCase | local | 32 | -| Local variable 3 of method System.Globalization.Ordinal.EqualsStringIgnoreCaseUtf8 | local | 32 | -| Local variable 3 of method System.Globalization.OrdinalCasing.IndexOf | local | 32 | -| Local variable 3 of method System.Globalization.OrdinalCasing.LastIndexOf | local | 32 | -| Local variable 3 of method System.HexConverter.TryDecodeFromUtf16_Vector128 | local | 32 | -| Local variable 3 of method System.Int16.TryReadBigEndian | local | 32 | -| Local variable 3 of method System.Int16.TryReadLittleEndian | local | 32 | -| Local variable 3 of method System.Int32.TryReadBigEndian | local | 32 | -| Local variable 3 of method System.Int32.TryReadLittleEndian | local | 32 | -| Local variable 3 of method System.Int64.TryReadBigEndian | local | 32 | -| Local variable 3 of method System.Int64.TryReadLittleEndian | local | 32 | -| Local variable 3 of method System.Int128.TryReadBigEndian | local | 32 | -| Local variable 3 of method System.Int128.TryReadLittleEndian | local | 32 | -| Local variable 3 of method System.IntPtr.TryReadBigEndian | local | 32 | -| Local variable 3 of method System.IntPtr.TryReadLittleEndian | local | 32 | -| Local variable 3 of method System.Memory.Pin | local | 32 | -| Local variable 3 of method System.ModuleHandle.ResolveMethodHandleInternal | local | 32 | -| Local variable 3 of method System.Number.BigInteger.Pow10 | local | 32 | -| Local variable 3 of method System.Number.FindSection | local | 32 | -| Local variable 3 of method System.Number.Int32ToHexStr | local | 32 | -| Local variable 3 of method System.Number.Int64ToHexStr | local | 32 | -| Local variable 3 of method System.Number.NegativeInt32ToDecStr | local | 32 | -| Local variable 3 of method System.Number.NegativeInt64ToDecStr | local | 32 | -| Local variable 3 of method System.Number.TryInt128ToHexStr | local | 32 | -| Local variable 3 of method System.Number.TryNegativeInt128ToDecStr | local | 32 | -| Local variable 3 of method System.Number.TryUInt32ToDecStr | local | 32 | -| Local variable 3 of method System.Number.TryUInt64ToDecStr | local | 32 | -| Local variable 3 of method System.Number.TryUInt128ToBinaryStr | local | 32 | -| Local variable 3 of method System.Number.TryUInt128ToDecStr | local | 32 | -| Local variable 3 of method System.Number.UInt32ToBinaryStr | local | 32 | -| Local variable 3 of method System.Number.UInt32ToDecStr | local | 32 | -| Local variable 3 of method System.Number.UInt32ToDecStr_NoSmallNumberCheck | local | 32 | -| Local variable 3 of method System.Number.UInt64ToBinaryStr | local | 32 | -| Local variable 3 of method System.Number.UInt64ToDecStr | local | 32 | -| Local variable 3 of method System.Number.UInt128ToDecStr | local | 32 | -| Local variable 3 of method System.Object.MemberwiseClone | local | 32 | -| Local variable 3 of method System.PackedSpanHelpers.Contains | local | 32 | -| Local variable 3 of method System.PackedSpanHelpers.IndexOf | local | 32 | -| Local variable 3 of method System.ReadOnlyMemory.Pin | local | 32 | -| Local variable 3 of method System.Reflection.CustomAttribute.AddCustomAttributes | local | 32 | -| Local variable 3 of method System.Reflection.Emit.RuntimeAssemblyBuilder.CreateDynamicAssembly | local | 32 | -| Local variable 3 of method System.Reflection.Emit.RuntimeTypeBuilder.SetPInvokeData | local | 32 | -| Local variable 3 of method System.Reflection.Metadata.AssemblyExtensions.InternalTryGetRawMetadata | local | 32 | -| Local variable 3 of method System.Reflection.RuntimeAssembly.GetVersion | local | 32 | -| Local variable 3 of method System.Runtime.CompilerServices.ConditionalWeakTable.Container.Resize | local | 32 | -| Local variable 3 of method System.Runtime.InteropServices.ComWrappers.GetIUnknownImplInternal | local | 32 | -| Local variable 3 of method System.Runtime.InteropServices.ComWrappers.TryGetComInstanceInternal | local | 32 | -| Local variable 3 of method System.Runtime.InteropServices.ComWrappers.TryGetOrCreateComInterfaceForObjectInternal | local | 32 | -| Local variable 3 of method System.Runtime.InteropServices.Marshal.QueryInterface | local | 32 | -| Local variable 3 of method System.Runtime.InteropServices.NativeLibrary.GetSymbol | local | 32 | -| Local variable 3 of method System.Runtime.InteropServices.NativeLibrary.LoadFromPath | local | 32 | -| Local variable 3 of method System.Runtime.InteropServices.SafeBuffer.ReadSpan | local | 32 | -| Local variable 3 of method System.Runtime.InteropServices.SafeBuffer.WriteSpan | local | 32 | -| Local variable 3 of method System.Runtime.Loader.AssemblyLoadContext.InternalLoad | local | 32 | -| Local variable 3 of method System.Runtime.Loader.AssemblyLoadContext.LoadFromPath | local | 32 | -| Local variable 3 of method System.Runtime.Loader.AssemblyLoadContext.TraceAssemblyResolveHandlerInvoked | local | 32 | -| Local variable 3 of method System.Runtime.Loader.AssemblyLoadContext.TraceResolvingHandlerInvoked | local | 32 | -| Local variable 3 of method System.Runtime.Loader.AssemblyLoadContext.TraceSatelliteSubdirectoryPathProbed | local | 32 | -| Local variable 3 of method System.RuntimeType.RuntimeTypeCache.MemberInfoCache.Populate | local | 32 | -| Local variable 3 of method System.SpanHelpers.CountValueType | local | 32 | -| Local variable 3 of method System.SpanHelpers.Fill | local | 32 | -| Local variable 3 of method System.SpanHelpers.LastIndexOf | local | 32 | -| Local variable 3 of method System.SpanHelpers.LastIndexOfAnyValueType | local | 32 | -| Local variable 3 of method System.SpanHelpers.NonPackedContainsValueType | local | 32 | -| Local variable 3 of method System.SpanHelpers.NonPackedIndexOfAnyValueType | local | 32 | -| Local variable 3 of method System.SpanHelpers.NonPackedIndexOfValueType | local | 32 | -| Local variable 3 of method System.SpanHelpers.Reverse | local | 32 | -| Local variable 3 of method System.String.CreateStringFromEncoding | local | 32 | -| Local variable 3 of method System.String.GetNonRandomizedHashCodeOrdinalIgnoreCase | local | 32 | -| Local variable 3 of method System.Text.ASCIIEncoding.GetBytes | local | 32 | -| Local variable 3 of method System.Text.ASCIIEncoding.GetChars | local | 32 | -| Local variable 3 of method System.Text.ASCIIEncoding.TryGetBytes | local | 32 | -| Local variable 3 of method System.Text.ASCIIEncoding.TryGetChars | local | 32 | -| Local variable 3 of method System.Text.Ascii.ChangeCase | local | 32 | -| Local variable 3 of method System.Text.Ascii.Equals | local | 32 | -| Local variable 3 of method System.Text.Ascii.EqualsIgnoreCase | local | 32 | -| Local variable 3 of method System.Text.Ascii.FromUtf16 | local | 32 | -| Local variable 3 of method System.Text.Ascii.ToUtf16 | local | 32 | -| Local variable 3 of method System.Text.Decoder.Convert | local | 32 | -| Local variable 3 of method System.Text.Decoder.GetChars | local | 32 | -| Local variable 3 of method System.Text.DecoderNLS.Convert | local | 32 | -| Local variable 3 of method System.Text.Encoder.Convert | local | 32 | -| Local variable 3 of method System.Text.Encoder.GetBytes | local | 32 | -| Local variable 3 of method System.Text.EncoderNLS.Convert | local | 32 | -| Local variable 3 of method System.Text.Encoding.GetBytes | local | 32 | -| Local variable 3 of method System.Text.Encoding.GetBytesWithFallback | local | 32 | -| Local variable 3 of method System.Text.Encoding.GetChars | local | 32 | -| Local variable 3 of method System.Text.Encoding.GetCharsWithFallback | local | 32 | -| Local variable 3 of method System.Text.Latin1Encoding.GetBytes | local | 32 | -| Local variable 3 of method System.Text.Latin1Encoding.GetChars | local | 32 | -| Local variable 3 of method System.Text.Latin1Encoding.TryGetBytes | local | 32 | -| Local variable 3 of method System.Text.Latin1Encoding.TryGetChars | local | 32 | -| Local variable 3 of method System.Text.UTF8Encoding.GetBytes | local | 32 | -| Local variable 3 of method System.Text.UTF8Encoding.GetChars | local | 32 | -| Local variable 3 of method System.Text.UTF8Encoding.TryGetBytes | local | 32 | -| Local variable 3 of method System.Text.UTF8Encoding.TryGetChars | local | 32 | -| Local variable 3 of method System.Text.Unicode.Utf8.FromUtf16 | local | 32 | -| Local variable 3 of method System.Text.Unicode.Utf8.ToUtf16 | local | 32 | -| Local variable 3 of method System.Text.Unicode.Utf8.ToUtf16PreservingReplacement | local | 32 | -| Local variable 3 of method System.Threading.Thread.StartCore | local | 32 | -| Local variable 3 of method System.UInt128.<op_Division>g__SubtractDivisor\|110_3 | local | 32 | -| Local variable 4 of method Interop.Globalization.GetCalendars | local | 32 | -| Local variable 4 of method Interop.Globalization.GetLocaleTimeFormat | local | 32 | -| Local variable 4 of method Interop.Globalization.GetTimeZoneDisplayName | local | 32 | -| Local variable 4 of method Interop.Kernel32.GetMessage | local | 32 | -| Local variable 4 of method Interop.Kernel32.SetEnvironmentVariable | local | 32 | -| Local variable 4 of method Interop.Sys.IsMemberOfGroup | local | 32 | -| Local variable 4 of method System.Array.Copy | local | 32 | -| Local variable 4 of method System.Buffers.ProbabilisticMap.IndexOfAnyVectorized | local | 32 | -| Local variable 4 of method System.Collections.Generic.Dictionary.CollectionsMarshalHelper.GetValueRefOrAddDefault | local | 32 | -| Local variable 4 of method System.Collections.Generic.Dictionary.CopyEntries | local | 32 | -| Local variable 4 of method System.Collections.Generic.Dictionary.TryInsert | local | 32 | -| Local variable 4 of method System.Collections.Generic.HashSet.AddIfNotPresent | local | 32 | -| Local variable 4 of method System.Collections.Generic.HashSet.ConstructFrom | local | 32 | -| Local variable 4 of method System.Convert.ToBase64CharsLargeNoLineBreaks | local | 32 | -| Local variable 4 of method System.Convert.ToBase64String | local | 32 | -| Local variable 4 of method System.DateTimeFormat.FormatCustomizedTimeZone | local | 32 | -| Local variable 4 of method System.DateTimeFormat.FormatDigits | local | 32 | -| Local variable 4 of method System.Diagnostics.Tracing.DataCollector.AddNullTerminatedString | local | 32 | -| Local variable 4 of method System.Diagnostics.Tracing.EventSource.WriteEvent | local | 32 | -| Local variable 4 of method System.Enum.Format | local | 32 | -| Local variable 4 of method System.Globalization.CompareInfo.EndsWithOrdinalHelper | local | 32 | -| Local variable 4 of method System.Globalization.CompareInfo.EndsWithOrdinalIgnoreCaseHelper | local | 32 | -| Local variable 4 of method System.Globalization.CompareInfo.IcuGetSortKey | local | 32 | -| Local variable 4 of method System.Globalization.CompareInfo.StartsWithOrdinalHelper | local | 32 | -| Local variable 4 of method System.Globalization.CompareInfo.StartsWithOrdinalIgnoreCaseHelper | local | 32 | -| Local variable 4 of method System.Globalization.IdnMapping.IcuGetUnicodeCore | local | 32 | -| Local variable 4 of method System.Globalization.Ordinal.IndexOfOrdinalIgnoreCase | local | 32 | -| Local variable 4 of method System.IO.PathInternal.EqualStartingCharacterCount | local | 32 | -| Local variable 4 of method System.MemoryExtensions.TrimUtf8 | local | 32 | -| Local variable 4 of method System.Number.BigInteger.AddDivisor | local | 32 | -| Local variable 4 of method System.Number.Int128ToHexStr | local | 32 | -| Local variable 4 of method System.Number.NegativeInt128ToDecStr | local | 32 | -| Local variable 4 of method System.Number.UInt128ToBinaryStr | local | 32 | -| Local variable 4 of method System.PackedSpanHelpers.IndexOfAnyInRange | local | 32 | -| Local variable 4 of method System.Reflection.AssemblyName.EscapeString | local | 32 | -| Local variable 4 of method System.Reflection.AssemblyName.ParseAsAssemblySpec | local | 32 | -| Local variable 4 of method System.Reflection.Emit.RuntimeModuleBuilder.GetArrayMethodToken | local | 32 | -| Local variable 4 of method System.Reflection.Emit.RuntimeModuleBuilder.GetMemberRefFromSignature | local | 32 | -| Local variable 4 of method System.Reflection.Emit.RuntimeTypeBuilder.DefineField | local | 32 | -| Local variable 4 of method System.Reflection.Emit.RuntimeTypeBuilder.DefineGenericParam | local | 32 | -| Local variable 4 of method System.Reflection.Emit.RuntimeTypeBuilder.DefineMethod | local | 32 | -| Local variable 4 of method System.Reflection.Emit.RuntimeTypeBuilder.DefineProperty | local | 32 | -| Local variable 4 of method System.Reflection.Emit.RuntimeTypeBuilder.DefineType | local | 32 | -| Local variable 4 of method System.Reflection.Emit.RuntimeTypeBuilder.SetMethodIL | local | 32 | -| Local variable 4 of method System.Reflection.RuntimeAssembly.GetResource | local | 32 | -| Local variable 4 of method System.Reflection.RuntimeAssembly.InternalLoad | local | 32 | -| Local variable 4 of method System.Runtime.InteropServices.NativeLibrary.LoadByName | local | 32 | -| Local variable 4 of method System.Runtime.Loader.AssemblyLoadContext.InternalLoad | local | 32 | -| Local variable 4 of method System.Runtime.Loader.AssemblyLoadContext.TraceAssemblyLoadFromResolveHandlerInvoked | local | 32 | -| Local variable 4 of method System.SpanHelpers.IndexOf | local | 32 | -| Local variable 4 of method System.SpanHelpers.LastIndexOf | local | 32 | -| Local variable 4 of method System.SpanHelpers.NonPackedContainsValueType | local | 32 | -| Local variable 4 of method System.SpanHelpers.NonPackedIndexOfValueType | local | 32 | -| Local variable 4 of method System.SpanHelpers.Reverse | local | 32 | -| Local variable 4 of method System.String.CompareOrdinalHelper | local | 32 | -| Local variable 4 of method System.String.Replace | local | 32 | -| Local variable 4 of method System.TermInfo.ParameterizedStrings.FormatPrintF | local | 32 | -| Local variable 4 of method System.Text.Ascii.Equals | local | 32 | -| Local variable 4 of method System.Text.Ascii.EqualsIgnoreCase | local | 32 | -| Local variable 4 of method System.Text.DecoderNLS.GetChars | local | 32 | -| Local variable 4 of method System.Text.EncoderNLS.GetBytes | local | 32 | -| Local variable 4 of method System.Text.Latin1Encoding.GetString | local | 32 | -| Local variable 4 of method System.Text.UTF7Encoding.GetBytes | local | 32 | -| Local variable 4 of method System.Text.UTF7Encoding.GetChars | local | 32 | -| Local variable 4 of method System.Text.UTF8Encoding.UTF8EncodingSealed.GetBytesForSmallInput | local | 32 | -| Local variable 4 of method System.Text.UTF32Encoding.GetBytes | local | 32 | -| Local variable 4 of method System.Text.UTF32Encoding.GetChars | local | 32 | -| Local variable 4 of method System.Text.UnicodeEncoding.GetBytes | local | 32 | -| Local variable 4 of method System.Text.UnicodeEncoding.GetChars | local | 32 | -| Local variable 5 of method Interop.Globalization.GetJapaneseEraStartDate | local | 32 | -| Local variable 5 of method Interop.Globalization.GetLocaleInfoGroupingSizes | local | 32 | -| Local variable 5 of method Interop.Globalization.GetLocaleInfoInt | local | 32 | -| Local variable 5 of method Interop.Globalization.GetLocaleInfoString | local | 32 | -| Local variable 5 of method Interop.Kernel32.GetEnvironmentVariable | local | 32 | -| Local variable 5 of method Interop.Sys.FStat | local | 32 | -| Local variable 5 of method Interop.Sys.GetCwd | local | 32 | -| Local variable 5 of method Interop.Sys.GetUnixVersion | local | 32 | -| Local variable 5 of method Interop.Sys.GetUserNameFromPasswd | local | 32 | -| Local variable 5 of method Interop.Sys.LStat | local | 32 | -| Local variable 5 of method Interop.Sys.ReadLink | local | 32 | -| Local variable 5 of method Interop.Sys.Rename | local | 32 | -| Local variable 5 of method Interop.Sys.Stat | local | 32 | -| Local variable 5 of method System.Array.Clear | local | 32 | -| Local variable 5 of method System.Array.CopyImpl | local | 32 | -| Local variable 5 of method System.Array.CreateInstance | local | 32 | -| Local variable 5 of method System.Array.InternalGetValue | local | 32 | -| Local variable 5 of method System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorizedAnyByte | local | 32 | -| Local variable 5 of method System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorizedAnyByte | local | 32 | -| Local variable 5 of method System.Buffers.SharedArrayPool.Return | local | 32 | -| Local variable 5 of method System.Buffers.Text.Base64.DecodeFromUtf8InPlace | local | 32 | -| Local variable 5 of method System.Collections.Generic.Dictionary.CopyEntries | local | 32 | -| Local variable 5 of method System.Collections.Generic.GenericArraySortHelper.PickPivotAndPartition | local | 32 | -| Local variable 5 of method System.Collections.Generic.HashSet.Remove | local | 32 | -| Local variable 5 of method System.Collections.Generic.HashSet.Resize | local | 32 | -| Local variable 5 of method System.Convert.ToBase64CharArray | local | 32 | -| Local variable 5 of method System.Convert.ToBase64CharsLargeNoLineBreaks | local | 32 | -| Local variable 5 of method System.Convert.TryToBase64Chars | local | 32 | -| Local variable 5 of method System.Diagnostics.Tracing.EventPipeInternal.Enable | local | 32 | -| Local variable 5 of method System.Diagnostics.Tracing.EventSource.WriteEvent | local | 32 | -| Local variable 5 of method System.Globalization.TextInfo.ToLowerAsciiInvariant | local | 32 | -| Local variable 5 of method System.IO.PersistedFiles.GetHomeDirectory | local | 32 | -| Local variable 5 of method System.Number.BigInteger.SubtractDivisor | local | 32 | -| Local variable 5 of method System.PackedSpanHelpers.IndexOfAny | local | 32 | -| Local variable 5 of method System.Reflection.CustomAttribute.GetAttributeUsage | local | 32 | -| Local variable 5 of method System.Reflection.Emit.RuntimeAssemblyBuilder.CreateDynamicAssembly | local | 32 | -| Local variable 5 of method System.Reflection.Metadata.AssemblyExtensions.InternalTryGetRawMetadata | local | 32 | -| Local variable 5 of method System.Reflection.Metadata.MetadataUpdater.ApplyUpdate | local | 32 | -| Local variable 5 of method System.Reflection.RuntimeAssembly.GetVersion | local | 32 | -| Local variable 5 of method System.Runtime.CompilerServices.RuntimeHelpers.PrepareMethod | local | 32 | -| Local variable 5 of method System.Runtime.InteropServices.ComWrappers.GetIUnknownImplInternal | local | 32 | -| Local variable 5 of method System.Runtime.Loader.AssemblyLoadContext.TraceAssemblyResolveHandlerInvoked | local | 32 | -| Local variable 5 of method System.Runtime.Loader.AssemblyLoadContext.TraceResolvingHandlerInvoked | local | 32 | -| Local variable 5 of method System.String.Replace | local | 32 | -| Local variable 5 of method System.Text.Ascii.ChangeCase | local | 32 | -| Local variable 5 of method System.Text.Ascii.Equals | local | 32 | -| Local variable 5 of method System.Text.Ascii.EqualsIgnoreCase | local | 32 | -| Local variable 5 of method System.Text.Ascii.FromUtf16 | local | 32 | -| Local variable 5 of method System.Text.Ascii.ToUtf16 | local | 32 | -| Local variable 5 of method System.Text.Encoding.GetBytes | local | 32 | -| Local variable 6 of method Interop.Kernel32.CreateEventEx | local | 32 | -| Local variable 6 of method Interop.Kernel32.CreateMutexEx | local | 32 | -| Local variable 6 of method Interop.Kernel32.CreateSemaphoreEx | local | 32 | -| Local variable 6 of method Interop.Kernel32.ReleaseSemaphore | local | 32 | -| Local variable 6 of method Interop.Kernel32.SetEnvironmentVariable | local | 32 | -| Local variable 6 of method System.Array.CopyImpl | local | 32 | -| Local variable 6 of method System.Array.Initialize | local | 32 | -| Local variable 6 of method System.Array.InternalGetValue | local | 32 | -| Local variable 6 of method System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorized | local | 32 | -| Local variable 6 of method System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorized | local | 32 | -| Local variable 6 of method System.Collections.Generic.Dictionary.Resize | local | 32 | -| Local variable 6 of method System.Collections.Generic.GenericArraySortHelper.PickPivotAndPartition | local | 32 | -| Local variable 6 of method System.Collections.Generic.HashSet.FindItemIndex | local | 32 | -| Local variable 6 of method System.Convert.ConvertToBase64Array | local | 32 | -| Local variable 6 of method System.Convert.ToBase64String | local | 32 | -| Local variable 6 of method System.Convert.TryDecodeFromUtf16 | local | 32 | -| Local variable 6 of method System.DateTimeFormat.FormatCustomizedTimeZone | local | 32 | -| Local variable 6 of method System.DateTimeFormat.FormatDigits | local | 32 | -| Local variable 6 of method System.Diagnostics.Tracing.EventParameterInfo.GenerateMetadataForProperty | local | 32 | -| Local variable 6 of method System.Globalization.IdnMapping.IcuGetAsciiCore | local | 32 | -| Local variable 6 of method System.Number.BigInteger.Pow10 | local | 32 | -| Local variable 6 of method System.PackedSpanHelpers.IndexOfAny | local | 32 | -| Local variable 6 of method System.Reflection.Emit.RuntimeTypeBuilder.SetConstantValue | local | 32 | -| Local variable 6 of method System.Reflection.Emit.RuntimeTypeBuilder.SetMethodIL | local | 32 | -| Local variable 6 of method System.Reflection.Metadata.MetadataUpdater.ApplyUpdate | local | 32 | -| Local variable 6 of method System.Reflection.RuntimeAssembly.InternalLoad | local | 32 | -| Local variable 6 of method System.Runtime.CompilerServices.ConditionalWeakTable.Container.Resize | local | 32 | -| Local variable 6 of method System.Runtime.Loader.AssemblyLoadContext.TraceAssemblyLoadFromResolveHandlerInvoked | local | 32 | -| Local variable 6 of method System.SpanHelpers.NonPackedIndexOfAnyInRangeUnsignedNumber | local | 32 | -| Local variable 6 of method System.Text.Ascii.Equals | local | 32 | -| Local variable 6 of method System.Text.Ascii.EqualsIgnoreCase | local | 32 | -| Local variable 7 of method Interop.Globalization.GetJapaneseEraStartDate | local | 32 | -| Local variable 7 of method Interop.Globalization.GetLocaleInfoGroupingSizes | local | 32 | -| Local variable 7 of method Interop.Globalization.GetSortHandle | local | 32 | -| Local variable 7 of method Interop.Kernel32.OpenMutex | local | 32 | -| Local variable 7 of method System.Array.InternalGetValue | local | 32 | -| Local variable 7 of method System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorized | local | 32 | -| Local variable 7 of method System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorized | local | 32 | -| Local variable 7 of method System.Buffers.ProbabilisticMap.IndexOfAnyVectorized | local | 32 | -| Local variable 7 of method System.Buffers.Text.Base64.EncodeToUtf8InPlace | local | 32 | -| Local variable 7 of method System.Collections.Generic.Dictionary.CollectionsMarshalHelper.GetValueRefOrAddDefault | local | 32 | -| Local variable 7 of method System.Collections.Generic.Dictionary.Remove | local | 32 | -| Local variable 7 of method System.Collections.Generic.Dictionary.TryInsert | local | 32 | -| Local variable 7 of method System.Collections.Generic.HashSet.AddIfNotPresent | local | 32 | -| Local variable 7 of method System.Collections.Generic.HashSet.Remove | local | 32 | -| Local variable 7 of method System.Collections.Generic.HashSet.Resize | local | 32 | -| Local variable 7 of method System.Convert.ToBase64CharArray | local | 32 | -| Local variable 7 of method System.Convert.ToBase64CharsLargeNoLineBreaks | local | 32 | -| Local variable 7 of method System.DateTimeFormat.TryFormatS | local | 32 | -| Local variable 7 of method System.DateTimeFormat.TryFormatu | local | 32 | -| Local variable 7 of method System.Diagnostics.Tracing.EventParameterInfo.GenerateMetadata | local | 32 | -| Local variable 7 of method System.Globalization.CompareInfo.IcuGetHashCodeOfString | local | 32 | -| Local variable 7 of method System.Globalization.Normalization.IcuNormalize | local | 32 | -| Local variable 7 of method System.PackedSpanHelpers.Contains | local | 32 | -| Local variable 7 of method System.PackedSpanHelpers.IndexOf | local | 32 | -| Local variable 7 of method System.PackedSpanHelpers.IndexOfAnyInRange | local | 32 | -| Local variable 7 of method System.Reflection.Metadata.MetadataUpdater.ApplyUpdate | local | 32 | -| Local variable 7 of method System.Reflection.RuntimeAssembly.GetVersion | local | 32 | -| Local variable 7 of method System.Runtime.CompilerServices.ConditionalWeakTable.Container.Resize | local | 32 | -| Local variable 7 of method System.Runtime.Loader.AssemblyLoadContext.TraceAssemblyResolveHandlerInvoked | local | 32 | -| Local variable 7 of method System.Runtime.Loader.AssemblyLoadContext.TraceResolvingHandlerInvoked | local | 32 | -| Local variable 7 of method System.RuntimeType.RuntimeTypeCache.MemberInfoCache.Populate | local | 32 | -| Local variable 7 of method System.SpanHelpers.NonPackedContainsValueType | local | 32 | -| Local variable 7 of method System.SpanHelpers.NonPackedIndexOfAnyInRangeUnsignedNumber | local | 32 | -| Local variable 7 of method System.SpanHelpers.NonPackedIndexOfValueType | local | 32 | -| Local variable 7 of method System.String.MakeSeparatorListAny | local | 32 | -| Local variable 7 of method System.StubHelpers.CSTRMarshaler.ConvertFixedToNative | local | 32 | -| Local variable 7 of method System.Text.Ascii.Equals | local | 32 | -| Local variable 8 of method Interop.Sys.LStat | local | 32 | -| Local variable 8 of method Interop.Sys.Stat | local | 32 | -| Local variable 8 of method System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorized | local | 32 | -| Local variable 8 of method System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorizedAnyByte | local | 32 | -| Local variable 8 of method System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorized | local | 32 | -| Local variable 8 of method System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorizedAnyByte | local | 32 | -| Local variable 8 of method System.Collections.Generic.HashSet.Resize | local | 32 | -| Local variable 8 of method System.DateTimeFormat.TryFormatInvariantG | local | 32 | -| Local variable 8 of method System.Diagnostics.Tracing.EventSource.WriteEventString | local | 32 | -| Local variable 8 of method System.ModuleHandle.ResolveFieldHandle | local | 32 | -| Local variable 8 of method System.ModuleHandle.ResolveTypeHandle | local | 32 | -| Local variable 8 of method System.Number.BigInteger.Pow10 | local | 32 | -| Local variable 8 of method System.PackedSpanHelpers.Contains | local | 32 | -| Local variable 8 of method System.PackedSpanHelpers.IndexOf | local | 32 | -| Local variable 8 of method System.Reflection.Emit.RuntimeTypeBuilder.SetConstantValue | local | 32 | -| Local variable 8 of method System.Reflection.Emit.RuntimeTypeBuilder.SetMethodIL | local | 32 | -| Local variable 8 of method System.Runtime.Loader.AssemblyLoadContext.TraceAssemblyLoadFromResolveHandlerInvoked | local | 32 | -| Local variable 8 of method System.SpanHelpers.CountValueType | local | 32 | -| Local variable 8 of method System.SpanHelpers.NonPackedContainsValueType | local | 32 | -| Local variable 8 of method System.SpanHelpers.NonPackedIndexOfAnyValueType | local | 32 | -| Local variable 8 of method System.SpanHelpers.NonPackedIndexOfValueType | local | 32 | -| Local variable 8 of method System.Text.Ascii.Equals | local | 32 | -| Local variable 8 of method System.Text.Ascii.IsValidCore | local | 32 | -| Local variable 9 of method System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorizedAnyByte | local | 32 | -| Local variable 9 of method System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorizedAnyByte | local | 32 | -| Local variable 9 of method System.Collections.Generic.Dictionary.CollectionsMarshalHelper.GetValueRefOrAddDefault | local | 32 | -| Local variable 9 of method System.Collections.Generic.HashSet.AddIfNotPresent | local | 32 | -| Local variable 9 of method System.Collections.Generic.HashSet.FindItemIndex | local | 32 | -| Local variable 9 of method System.Collections.Generic.HashSet.IntersectWithEnumerable | local | 32 | -| Local variable 9 of method System.Collections.Generic.HashSet.TrimExcess | local | 32 | -| Local variable 9 of method System.DateTimeFormat.TryFormatR | local | 32 | -| Local variable 9 of method System.Diagnostics.Tracing.EventParameterInfo.GenerateMetadataForProperty | local | 32 | -| Local variable 9 of method System.Diagnostics.Tracing.EventPipeInternal.Enable | local | 32 | -| Local variable 9 of method System.Globalization.CompareInfo.IcuGetHashCodeOfString | local | 32 | -| Local variable 9 of method System.Globalization.Normalization.IcuNormalize | local | 32 | -| Local variable 9 of method System.IO.Directory.CreateTempSubdirectoryCore | local | 32 | -| Local variable 9 of method System.IO.Path.GetTempFileName | local | 32 | -| Local variable 9 of method System.ModuleHandle.ResolveFieldHandle | local | 32 | -| Local variable 9 of method System.ModuleHandle.ResolveTypeHandle | local | 32 | -| Local variable 9 of method System.Runtime.Loader.AssemblyLoadContext.TraceAssemblyResolveHandlerInvoked | local | 32 | -| Local variable 9 of method System.Runtime.Loader.AssemblyLoadContext.TraceResolvingHandlerInvoked | local | 32 | -| Local variable 9 of method System.SpanHelpers.IndexOfAnyValueType | local | 32 | -| Local variable 9 of method System.SpanHelpers.NonPackedIndexOfAnyValueType | local | 32 | -| Local variable 9 of method System.SpanHelpers.Reverse | local | 32 | -| Local variable 9 of method System.String.<GetNonRandomizedHashCodeOrdinalIgnoreCase>g__GetNonRandomizedHashCodeOrdinalIgnoreCaseSlow\|47_0 | local | 32 | -| Local variable 9 of method System.Text.Ascii.Equals | local | 32 | -| Local variable 10 of method System.Buffers.ProbabilisticMap.IndexOfAnyVectorized | local | 32 | -| Local variable 10 of method System.Collections.Generic.HashSet.TrimExcess | local | 32 | -| Local variable 10 of method System.Convert.ToBase64CharsLargeNoLineBreaks | local | 32 | -| Local variable 10 of method System.DateTimeFormat.TryFormatO | local | 32 | -| Local variable 10 of method System.Number.BigInteger.Pow10 | local | 32 | -| Local variable 10 of method System.Number.FormatFixed | local | 32 | -| Local variable 10 of method System.PackedSpanHelpers.IndexOfAny | local | 32 | -| Local variable 10 of method System.SpanHelpers.IndexOfAnyValueType | local | 32 | -| Local variable 10 of method System.SpanHelpers.NonPackedIndexOfAnyValueType | local | 32 | -| Local variable 10 of method System.SpanHelpers.Reverse | local | 32 | -| Local variable 10 of method System.String.JoinCore | local | 32 | -| Local variable 10 of method System.Text.Ascii.Equals | local | 32 | -| Local variable 11 of method System.Buffers.Text.Base64.EncodeToUtf8 | local | 32 | -| Local variable 11 of method System.Collections.Generic.HashSet.AddIfNotPresent | local | 32 | -| Local variable 11 of method System.Globalization.CompareInfo.IcuGetHashCodeOfString | local | 32 | -| Local variable 11 of method System.IO.RandomAccess.ReadScatterAtOffset | local | 32 | -| Local variable 11 of method System.PackedSpanHelpers.IndexOfAny | local | 32 | -| Local variable 11 of method System.PackedSpanHelpers.IndexOfAnyInRange | local | 32 | -| Local variable 11 of method System.Runtime.CompilerServices.ConditionalWeakTable.Container.Resize | local | 32 | -| Local variable 11 of method System.Runtime.Loader.AssemblyLoadContext.TraceResolvingHandlerInvoked | local | 32 | -| Local variable 11 of method System.SpanHelpers.IndexOfAnyValueType | local | 32 | -| Local variable 11 of method System.SpanHelpers.NonPackedContainsValueType | local | 32 | -| Local variable 11 of method System.SpanHelpers.NonPackedIndexOfAnyInRangeUnsignedNumber | local | 32 | -| Local variable 11 of method System.SpanHelpers.NonPackedIndexOfValueType | local | 32 | -| Local variable 11 of method System.Text.Ascii.Equals | local | 32 | -| Local variable 12 of method System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorized | local | 32 | -| Local variable 12 of method System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorized | local | 32 | -| Local variable 12 of method System.Diagnostics.Tracing.EventSource.WriteMultiMerge | local | 32 | -| Local variable 12 of method System.PackedSpanHelpers.IndexOfAny | local | 32 | -| Local variable 12 of method System.PackedSpanHelpers.IndexOfAnyInRange | local | 32 | -| Local variable 12 of method System.Reflection.RuntimeAssembly.GetTypeCoreIgnoreCase | local | 32 | -| Local variable 12 of method System.SpanHelpers.NonPackedContainsValueType | local | 32 | -| Local variable 12 of method System.SpanHelpers.NonPackedIndexOfAnyInRangeUnsignedNumber | local | 32 | -| Local variable 12 of method System.SpanHelpers.NonPackedIndexOfValueType | local | 32 | -| Local variable 12 of method System.Text.Ascii.Equals | local | 32 | -| Local variable 12 of method System.Text.Ascii.IsValidCore | local | 32 | -| Local variable 13 of method System.Buffers.ProbabilisticMap.IndexOfAnyVectorized | local | 32 | -| Local variable 13 of method System.Buffers.Text.Base64.DecodeFromUtf8 | local | 32 | -| Local variable 13 of method System.Globalization.TextInfo.ChangeCaseCommon | local | 32 | -| Local variable 13 of method System.PackedSpanHelpers.Contains | local | 32 | -| Local variable 13 of method System.PackedSpanHelpers.IndexOf | local | 32 | -| Local variable 13 of method System.SpanHelpers.CountValueType | local | 32 | -| Local variable 13 of method System.Text.Ascii.Equals | local | 32 | -| Local variable 14 of method System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorizedAnyByte | local | 32 | -| Local variable 14 of method System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorizedAnyByte | local | 32 | -| Local variable 14 of method System.IO.RandomAccess.WriteGatherAtOffset | local | 32 | -| Local variable 14 of method System.Reflection.RuntimeAssembly.GetTypeCoreIgnoreCase | local | 32 | -| Local variable 14 of method System.Runtime.CompilerServices.ConditionalWeakTable.Container.Resize | local | 32 | -| Local variable 14 of method System.SpanHelpers.NonPackedIndexOfAnyValueType | local | 32 | -| Local variable 14 of method System.SpanHelpers.Reverse | local | 32 | -| Local variable 14 of method System.Text.Ascii.Equals | local | 32 | -| Local variable 14 of method System.Text.Ascii.EqualsIgnoreCase | local | 32 | -| Local variable 15 of method System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorized | local | 32 | -| Local variable 15 of method System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorized | local | 32 | -| Local variable 15 of method System.Diagnostics.Tracing.EventSource.WriteImpl | local | 32 | -| Local variable 15 of method System.Globalization.TimeSpanFormat.TryFormatStandard | local | 32 | -| Local variable 15 of method System.SpanHelpers.NonPackedIndexOfAnyValueType | local | 32 | -| Local variable 15 of method System.SpanHelpers.Reverse | local | 32 | -| Local variable 15 of method System.Text.Ascii.EqualsIgnoreCase | local | 32 | -| Local variable 16 of method System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorized | local | 32 | -| Local variable 16 of method System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorized | local | 32 | -| Local variable 16 of method System.SpanHelpers.NonPackedIndexOfAnyInRangeUnsignedNumber | local | 32 | -| Local variable 16 of method System.SpanHelpers.NonPackedIndexOfAnyValueType | local | 32 | -| Local variable 16 of method System.Text.Ascii.EqualsIgnoreCase | local | 32 | -| Local variable 17 of method System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorized | local | 32 | -| Local variable 17 of method System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorizedAnyByte | local | 32 | -| Local variable 17 of method System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorized | local | 32 | -| Local variable 17 of method System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorizedAnyByte | local | 32 | -| Local variable 17 of method System.Reflection.RuntimeAssembly.GetTypeCore | local | 32 | -| Local variable 17 of method System.SpanHelpers.IndexOfAnyValueType | local | 32 | -| Local variable 17 of method System.SpanHelpers.NonPackedIndexOfAnyInRangeUnsignedNumber | local | 32 | -| Local variable 17 of method System.SpanHelpers.NonPackedIndexOfAnyValueType | local | 32 | -| Local variable 17 of method System.Text.Ascii.EqualsIgnoreCase | local | 32 | -| Local variable 18 of method System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorizedAnyByte | local | 32 | -| Local variable 18 of method System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorizedAnyByte | local | 32 | -| Local variable 18 of method System.Diagnostics.Tracing.EventSource.WriteMultiMergeInner | local | 32 | -| Local variable 18 of method System.PackedSpanHelpers.Contains | local | 32 | -| Local variable 18 of method System.PackedSpanHelpers.IndexOf | local | 32 | -| Local variable 18 of method System.PackedSpanHelpers.IndexOfAny | local | 32 | -| Local variable 18 of method System.PackedSpanHelpers.IndexOfAnyInRange | local | 32 | -| Local variable 18 of method System.SpanHelpers.IndexOfAnyValueType | local | 32 | -| Local variable 19 of method System.Number.NumberToStringFormat | local | 32 | -| Local variable 19 of method System.PackedSpanHelpers.Contains | local | 32 | -| Local variable 19 of method System.PackedSpanHelpers.IndexOf | local | 32 | -| Local variable 19 of method System.SpanHelpers.IndexOfAnyValueType | local | 32 | -| Local variable 20 of method System.PackedSpanHelpers.IndexOfAny | local | 32 | -| Local variable 20 of method System.SpanHelpers.IndexOfAnyValueType | local | 32 | -| Local variable 20 of method System.SpanHelpers.NonPackedIndexOfAnyValueType | local | 32 | -| Local variable 21 of method System.Diagnostics.Tracing.EventPipeMetadataGenerator.GenerateMetadata | local | 32 | -| Local variable 21 of method System.SpanHelpers.NonPackedIndexOfAnyValueType | local | 32 | -| Local variable 23 of method System.PackedSpanHelpers.IndexOfAny | local | 32 | -| Local variable 23 of method System.PackedSpanHelpers.IndexOfAnyInRange | local | 32 | -| Local variable 23 of method System.SpanHelpers.NonPackedIndexOfAnyValueType | local | 32 | -| Local variable 24 of method System.PackedSpanHelpers.IndexOfAny | local | 32 | -| Local variable 24 of method System.PackedSpanHelpers.IndexOfAnyInRange | local | 32 | -| Local variable 24 of method System.SpanHelpers.NonPackedIndexOfAnyValueType | local | 32 | -| Local variable 25 of method System.PackedSpanHelpers.Contains | local | 32 | -| Local variable 25 of method System.PackedSpanHelpers.IndexOf | local | 32 | -| Local variable 25 of method System.PackedSpanHelpers.IndexOfAny | local | 32 | -| Local variable 25 of method System.SpanHelpers.IndexOfAnyValueType | local | 32 | -| Local variable 25 of method System.Text.Ascii.EqualsIgnoreCase | local | 32 | -| Local variable 26 of method System.PackedSpanHelpers.IndexOfAny | local | 32 | -| Local variable 26 of method System.SpanHelpers.IndexOfAnyValueType | local | 32 | -| Local variable 26 of method System.Text.Ascii.EqualsIgnoreCase | local | 32 | -| Local variable 27 of method System.Diagnostics.Tracing.EventProvider.WriteEvent | local | 32 | -| Local variable 27 of method System.Text.Ascii.EqualsIgnoreCase | local | 32 | -| Local variable 28 of method System.Diagnostics.Tracing.EventProvider.WriteEvent | local | 32 | -| Local variable 28 of method System.SpanHelpers.IndexOfAnyValueType | local | 32 | -| Local variable 28 of method System.Text.Ascii.EqualsIgnoreCase | local | 32 | -| Local variable 29 of method System.Diagnostics.Tracing.EventProvider.WriteEvent | local | 32 | -| Local variable 29 of method System.SpanHelpers.IndexOfAnyValueType | local | 32 | -| Local variable 30 of method System.Diagnostics.Tracing.EventProvider.WriteEvent | local | 32 | -| Local variable 30 of method System.PackedSpanHelpers.Contains | local | 32 | -| Local variable 30 of method System.PackedSpanHelpers.IndexOf | local | 32 | -| Local variable 31 of method System.Diagnostics.Tracing.EventProvider.WriteEvent | local | 32 | -| Local variable 31 of method System.Number.NumberToStringFormat | local | 32 | -| Local variable 31 of method System.PackedSpanHelpers.Contains | local | 32 | -| Local variable 31 of method System.PackedSpanHelpers.IndexOf | local | 32 | -| Local variable 31 of method System.PackedSpanHelpers.IndexOfAny | local | 32 | -| Local variable 31 of method System.PackedSpanHelpers.IndexOfAnyInRange | local | 32 | -| Local variable 32 of method System.Diagnostics.Tracing.EventProvider.WriteEvent | local | 32 | -| Local variable 33 of method System.Diagnostics.Tracing.EventProvider.WriteEvent | local | 32 | -| Local variable 33 of method System.Diagnostics.Tracing.EventSource.CreateManifestAndDescriptors | local | 32 | -| Local variable 34 of method System.Diagnostics.Tracing.EventProvider.WriteEvent | local | 32 | -| Local variable 34 of method System.PackedSpanHelpers.IndexOfAny | local | 32 | -| Local variable 36 of method System.PackedSpanHelpers.IndexOfAny | local | 32 | -| Local variable 36 of method System.PackedSpanHelpers.IndexOfAnyInRange | local | 32 | -| Local variable 37 of method System.PackedSpanHelpers.IndexOfAny | local | 32 | -| Local variable 37 of method System.PackedSpanHelpers.IndexOfAnyInRange | local | 32 | -| Local variable 38 of method System.Diagnostics.Tracing.EventProvider.WriteEvent | local | 32 | -| Local variable 39 of method System.PackedSpanHelpers.IndexOfAny | local | 32 | -| Local variable 40 of method System.PackedSpanHelpers.IndexOfAny | local | 32 | -| Parameter 0 of <PrivateImplementationDetails>.InlineArrayElementRef | parameter | 32 | -| Parameter 0 of <PrivateImplementationDetails>.InlineArrayFirstElementRef | parameter | 32 | -| Parameter 0 of Interop.Sys.GetCpuUtilization | parameter | 32 | -| Parameter 0 of Interop.Sys.GetWindowSize | parameter | 32 | -| Parameter 0 of Interop.Sys.LStat | parameter | 32 | -| Parameter 0 of Interop.Sys.MkDir | parameter | 32 | -| Parameter 0 of Interop.Sys.ReadLink | parameter | 32 | -| Parameter 0 of Interop.Sys.Rename | parameter | 32 | -| Parameter 0 of Interop.Sys.SetWindowSize | parameter | 32 | -| Parameter 0 of Interop.Sys.Stat | parameter | 32 | -| Parameter 0 of System.Array.Resize | parameter | 32 | -| Parameter 0 of System.Buffer.BulkMoveWithWriteBarrier | parameter | 32 | -| Parameter 0 of System.Buffer.Memmove | parameter | 32 | -| Parameter 0 of System.Buffer._BulkMoveWithWriteBarrier | parameter | 32 | -| Parameter 0 of System.Buffer._Memmove | parameter | 32 | -| Parameter 0 of System.Buffer._ZeroMemory | parameter | 32 | -| Parameter 0 of System.Buffer.__BulkMoveWithWriteBarrier | parameter | 32 | -| Parameter 0 of System.Buffers.IndexOfAnyAsciiSearcher.ComputeFirstIndex | parameter | 32 | -| Parameter 0 of System.Buffers.IndexOfAnyAsciiSearcher.ComputeFirstIndexOverlapped | parameter | 32 | -| Parameter 0 of System.Buffers.IndexOfAnyAsciiSearcher.ComputeLastIndex | parameter | 32 | -| Parameter 0 of System.Buffers.IndexOfAnyAsciiSearcher.ComputeLastIndexOverlapped | parameter | 32 | -| Parameter 0 of System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorized | parameter | 32 | -| Parameter 0 of System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorizedAnyByte | parameter | 32 | -| Parameter 0 of System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorized | parameter | 32 | -| Parameter 0 of System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorizedAnyByte | parameter | 32 | -| Parameter 0 of System.Buffers.IndexOfAnyAsciiSearcher.TryIndexOfAny | parameter | 32 | -| Parameter 0 of System.Buffers.IndexOfAnyAsciiSearcher.TryIndexOfAnyExcept | parameter | 32 | -| Parameter 0 of System.Buffers.IndexOfAnyAsciiSearcher.TryLastIndexOfAny | parameter | 32 | -| Parameter 0 of System.Buffers.IndexOfAnyAsciiSearcher.TryLastIndexOfAnyExcept | parameter | 32 | -| Parameter 0 of System.Buffers.ProbabilisticMap.Contains | parameter | 32 | -| Parameter 0 of System.Buffers.ProbabilisticMap.IndexOfAny | parameter | 32 | -| Parameter 0 of System.Buffers.ProbabilisticMap.IndexOfAnyExcept | parameter | 32 | -| Parameter 0 of System.Buffers.ProbabilisticMap.IndexOfAnySimpleLoop | parameter | 32 | -| Parameter 0 of System.Buffers.ProbabilisticMap.IndexOfAnyVectorized | parameter | 32 | -| Parameter 0 of System.Buffers.ProbabilisticMap.IsCharBitSet | parameter | 32 | -| Parameter 0 of System.Buffers.ProbabilisticMap.LastIndexOfAny | parameter | 32 | -| Parameter 0 of System.Buffers.ProbabilisticMap.LastIndexOfAnyExcept | parameter | 32 | -| Parameter 0 of System.Buffers.ProbabilisticMap.LastIndexOfAnySimpleLoop | parameter | 32 | -| Parameter 0 of System.Buffers.ProbabilisticMap.ProbabilisticIndexOfAny | parameter | 32 | -| Parameter 0 of System.Buffers.ProbabilisticMap.ProbabilisticLastIndexOfAny | parameter | 32 | -| Parameter 0 of System.Buffers.ProbabilisticMap.SetCharBit | parameter | 32 | -| Parameter 0 of System.Buffers.Text.Base64.Avx2Decode | parameter | 32 | -| Parameter 0 of System.Buffers.Text.Base64.Avx2Encode | parameter | 32 | -| Parameter 0 of System.Buffers.Text.Base64.GetPaddingCount | parameter | 32 | -| Parameter 0 of System.Buffers.Text.Base64.Vector128Decode | parameter | 32 | -| Parameter 0 of System.Buffers.Text.Base64.Vector128Encode | parameter | 32 | -| Parameter 0 of System.Buffers.Text.FormattingHelpers.GetSymbolOrDefault | parameter | 32 | -| Parameter 0 of System.Buffers.Text.ParserHelpers.TryParseThrowFormatException | parameter | 32 | -| Parameter 0 of System.ByReference.Create | parameter | 32 | -| Parameter 0 of System.Collections.Generic.GenericArraySortHelper.GreaterThan | parameter | 32 | -| Parameter 0 of System.Collections.Generic.GenericArraySortHelper.LessThan | parameter | 32 | -| Parameter 0 of System.Collections.Generic.GenericArraySortHelper.Swap | parameter | 32 | -| Parameter 0 of System.Collections.Generic.GenericArraySortHelper.SwapIfGreater | parameter | 32 | -| Parameter 0 of System.Collections.Generic.GenericArraySortHelper<!0,!1>.GreaterThan | parameter | 32 | -| Parameter 0 of System.Collections.Generic.GenericArraySortHelper<!0,!1>.LessThan | parameter | 32 | -| Parameter 0 of System.Collections.Generic.GenericArraySortHelper<!0>.GreaterThan | parameter | 32 | -| Parameter 0 of System.Collections.Generic.GenericArraySortHelper<!0>.LessThan | parameter | 32 | -| Parameter 0 of System.Collections.Generic.GenericArraySortHelper<!0>.Swap | parameter | 32 | -| Parameter 0 of System.Collections.Generic.GenericArraySortHelper<!0>.SwapIfGreater | parameter | 32 | -| Parameter 0 of System.ComAwareWeakReference.EnsureComAwareReference | parameter | 32 | -| Parameter 0 of System.ComAwareWeakReference.SetComInfoInConstructor | parameter | 32 | -| Parameter 0 of System.ComAwareWeakReference.SetTarget | parameter | 32 | -| Parameter 0 of System.ConsolePal.GetWindowSize | parameter | 32 | -| Parameter 0 of System.ConsolePal.RefreshColors | parameter | 32 | -| Parameter 0 of System.ConsolePal.TryGetCachedCursorPosition | parameter | 32 | -| Parameter 0 of System.ConsolePal.TryGetCursorPosition | parameter | 32 | -| Parameter 0 of System.Convert.Decode | parameter | 32 | -| Parameter 0 of System.Convert.WriteThreeLowOrderBytes | parameter | 32 | -| Parameter 0 of System.DateTimeFormat.AppendChar | parameter | 32 | -| Parameter 0 of System.DateTimeFormat.AppendString | parameter | 32 | -| Parameter 0 of System.DateTimeFormat.FormatDigits | parameter | 32 | -| Parameter 0 of System.DateTimeFormat.FormatFraction | parameter | 32 | -| Parameter 0 of System.DateTimeFormat.PrepareFormatU | parameter | 32 | -| Parameter 0 of System.DateTimeParse.AdjustHour | parameter | 32 | -| Parameter 0 of System.DateTimeParse.AdjustTimeZoneToLocal | parameter | 32 | -| Parameter 0 of System.DateTimeParse.AdjustTimeZoneToUniversal | parameter | 32 | -| Parameter 0 of System.DateTimeParse.CheckDefaultDateTime | parameter | 32 | -| Parameter 0 of System.DateTimeParse.CheckNewValue | parameter | 32 | -| Parameter 0 of System.DateTimeParse.DateTimeOffsetTimeZonePostProcessing | parameter | 32 | -| Parameter 0 of System.DateTimeParse.DetermineTimeZoneAdjustments | parameter | 32 | -| Parameter 0 of System.DateTimeParse.GetDateOfDSN | parameter | 32 | -| Parameter 0 of System.DateTimeParse.GetDateOfNDS | parameter | 32 | -| Parameter 0 of System.DateTimeParse.GetDateOfNNDS | parameter | 32 | -| Parameter 0 of System.DateTimeParse.GetDateTimeNow | parameter | 32 | -| Parameter 0 of System.DateTimeParse.GetDateTimeParseException | parameter | 32 | -| Parameter 0 of System.DateTimeParse.GetDayOfMN | parameter | 32 | -| Parameter 0 of System.DateTimeParse.GetDayOfMNN | parameter | 32 | -| Parameter 0 of System.DateTimeParse.GetDayOfNM | parameter | 32 | -| Parameter 0 of System.DateTimeParse.GetDayOfNN | parameter | 32 | -| Parameter 0 of System.DateTimeParse.GetDayOfNNN | parameter | 32 | -| Parameter 0 of System.DateTimeParse.GetDayOfNNY | parameter | 32 | -| Parameter 0 of System.DateTimeParse.GetDayOfYM | parameter | 32 | -| Parameter 0 of System.DateTimeParse.GetDayOfYMN | parameter | 32 | -| Parameter 0 of System.DateTimeParse.GetDayOfYN | parameter | 32 | -| Parameter 0 of System.DateTimeParse.GetDayOfYNN | parameter | 32 | -| Parameter 0 of System.DateTimeParse.GetDefaultYear | parameter | 32 | -| Parameter 0 of System.DateTimeParse.GetHebrewDayOfNM | parameter | 32 | -| Parameter 0 of System.DateTimeParse.GetTimeOfN | parameter | 32 | -| Parameter 0 of System.DateTimeParse.GetTimeOfNN | parameter | 32 | -| Parameter 0 of System.DateTimeParse.GetTimeOfNNN | parameter | 32 | -| Parameter 0 of System.DateTimeParse.GetTimeZoneName | parameter | 32 | -| Parameter 0 of System.DateTimeParse.HandleTimeZone | parameter | 32 | -| Parameter 0 of System.DateTimeParse.MatchAbbreviatedDayName | parameter | 32 | -| Parameter 0 of System.DateTimeParse.MatchAbbreviatedMonthName | parameter | 32 | -| Parameter 0 of System.DateTimeParse.MatchAbbreviatedTimeMark | parameter | 32 | -| Parameter 0 of System.DateTimeParse.MatchDayName | parameter | 32 | -| Parameter 0 of System.DateTimeParse.MatchEraName | parameter | 32 | -| Parameter 0 of System.DateTimeParse.MatchHebrewDigits | parameter | 32 | -| Parameter 0 of System.DateTimeParse.MatchMonthName | parameter | 32 | -| Parameter 0 of System.DateTimeParse.MatchTimeMark | parameter | 32 | -| Parameter 0 of System.DateTimeParse.MatchWord | parameter | 32 | -| Parameter 0 of System.DateTimeParse.ParseByFormat | parameter | 32 | -| Parameter 0 of System.DateTimeParse.ParseDigits | parameter | 32 | -| Parameter 0 of System.DateTimeParse.ParseFraction | parameter | 32 | -| Parameter 0 of System.DateTimeParse.ParseFractionExact | parameter | 32 | -| Parameter 0 of System.DateTimeParse.ParseISO8601 | parameter | 32 | -| Parameter 0 of System.DateTimeParse.ParseJapaneseEraStart | parameter | 32 | -| Parameter 0 of System.DateTimeParse.ParseSign | parameter | 32 | -| Parameter 0 of System.DateTimeParse.ParseTimeZone | parameter | 32 | -| Parameter 0 of System.DateTimeParse.ParseTimeZoneOffset | parameter | 32 | -| Parameter 0 of System.DateTimeParse.ProcessDateTimeSuffix | parameter | 32 | -| Parameter 0 of System.DateTimeParse.SetDateDMY | parameter | 32 | -| Parameter 0 of System.DateTimeParse.SetDateMDY | parameter | 32 | -| Parameter 0 of System.DateTimeParse.SetDateYDM | parameter | 32 | -| Parameter 0 of System.DateTimeParse.SetDateYMD | parameter | 32 | -| Parameter 0 of System.DateTimeParse.TryAdjustYear | parameter | 32 | -| Parameter 0 of System.DateTimeParse.VerifyValidPunctuation | parameter | 32 | -| Parameter 0 of System.Decimal.AsMutable | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.Add32To96 | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.DecAddSub | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.DecDivMod1E9 | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.Div96By32 | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.Div96By64 | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.Div96ByConst | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.Div128By96 | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.GetHashCode | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.IncreaseScale | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.IncreaseScale64 | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.InternalRound | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.OverflowUnscale | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.SearchScale | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.Unscale | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.VarCyFromDec | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.VarDecCmp | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.VarDecCmpSub | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.VarDecDiv | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.VarDecMod | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.VarDecModFull | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.VarDecMul | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.VarR4FromDec | parameter | 32 | -| Parameter 0 of System.Decimal.DecCalc.VarR8FromDec | parameter | 32 | -| Parameter 0 of System.Decimal.DecDivMod1E9 | parameter | 32 | -| Parameter 0 of System.Decimal.GetBytes | parameter | 32 | -| Parameter 0 of System.Decimal.Round | parameter | 32 | -| Parameter 0 of System.Decimal.Truncate | parameter | 32 | -| Parameter 0 of System.Diagnostics.Contracts.Contract.ValueAtReturn | parameter | 32 | -| Parameter 0 of System.Diagnostics.StackTrace.TryResolveStateMachineMethod | parameter | 32 | -| Parameter 0 of System.Diagnostics.Tracing.ActivityTracker.ActivityInfo.WriteNibble | parameter | 32 | -| Parameter 0 of System.Diagnostics.Tracing.EventPipePayloadDecoder.DecodePayload | parameter | 32 | -| Parameter 0 of System.Diagnostics.Tracing.EventProvider.EncodeObject | parameter | 32 | -| Parameter 0 of System.Diagnostics.Tracing.EventSource.AddEventDescriptor | parameter | 32 | -| Parameter 0 of System.Diagnostics.Tracing.EventSource.DebugCheckEvent | parameter | 32 | -| Parameter 0 of System.Diagnostics.Tracing.EventSource.RemoveFirstArgIfRelatedActivityId | parameter | 32 | -| Parameter 0 of System.Diagnostics.Tracing.EventSource.TrimEventDescriptors | parameter | 32 | -| Parameter 0 of System.Diagnostics.Tracing.ManifestBuilder.UpdateStringBuilder | parameter | 32 | -| Parameter 0 of System.Enum.FormatNumberAsHex | parameter | 32 | -| Parameter 0 of System.Enum.TryFormatNumberAsHex | parameter | 32 | -| Parameter 0 of System.Globalization.CultureData.GetDefaultLocaleName | parameter | 32 | -| Parameter 0 of System.Globalization.DateTimeFormatInfo.TryParseHebrewNumber | parameter | 32 | -| Parameter 0 of System.Globalization.GlobalizationMode.TryGetAppLocalIcuSwitchValue | parameter | 32 | -| Parameter 0 of System.Globalization.HebrewNumber.Append | parameter | 32 | -| Parameter 0 of System.Globalization.InvariantModeCasing.CompareStringIgnoreCase | parameter | 32 | -| Parameter 0 of System.Globalization.InvariantModeCasing.GetScalar | parameter | 32 | -| Parameter 0 of System.Globalization.Ordinal.CompareStringIgnoreCase | parameter | 32 | -| Parameter 0 of System.Globalization.Ordinal.CompareStringIgnoreCaseNonAscii | parameter | 32 | -| Parameter 0 of System.Globalization.Ordinal.EqualsIgnoreCase | parameter | 32 | -| Parameter 0 of System.Globalization.Ordinal.EqualsIgnoreCaseUtf8 | parameter | 32 | -| Parameter 0 of System.Globalization.Ordinal.EqualsIgnoreCaseUtf8_Scalar | parameter | 32 | -| Parameter 0 of System.Globalization.Ordinal.EqualsIgnoreCaseUtf8_Vector128 | parameter | 32 | -| Parameter 0 of System.Globalization.Ordinal.EqualsIgnoreCase_Scalar | parameter | 32 | -| Parameter 0 of System.Globalization.Ordinal.EqualsIgnoreCase_Vector128 | parameter | 32 | -| Parameter 0 of System.Globalization.Ordinal.EqualsStringIgnoreCaseNonAsciiUtf8 | parameter | 32 | -| Parameter 0 of System.Globalization.Ordinal.EqualsStringIgnoreCaseUtf8 | parameter | 32 | -| Parameter 0 of System.Globalization.Ordinal.StartsWithIgnoreCaseUtf8 | parameter | 32 | -| Parameter 0 of System.Globalization.Ordinal.StartsWithIgnoreCaseUtf8_Scalar | parameter | 32 | -| Parameter 0 of System.Globalization.Ordinal.StartsWithIgnoreCaseUtf8_Vector128 | parameter | 32 | -| Parameter 0 of System.Globalization.Ordinal.StartsWithStringIgnoreCaseNonAsciiUtf8 | parameter | 32 | -| Parameter 0 of System.Globalization.Ordinal.StartsWithStringIgnoreCaseUtf8 | parameter | 32 | -| Parameter 0 of System.Globalization.OrdinalCasing.CompareStringIgnoreCase | parameter | 32 | -| Parameter 0 of System.Globalization.TextInfo.AddNonLetter | parameter | 32 | -| Parameter 0 of System.Globalization.TimeSpanParse.ParseExactDigits | parameter | 32 | -| Parameter 0 of System.Globalization.TimeSpanParse.ParseExactLiteral | parameter | 32 | -| Parameter 0 of System.Globalization.TimeSpanParse.ProcessTerminalState | parameter | 32 | -| Parameter 0 of System.Globalization.TimeSpanParse.ProcessTerminal_D | parameter | 32 | -| Parameter 0 of System.Globalization.TimeSpanParse.ProcessTerminal_DHMSF | parameter | 32 | -| Parameter 0 of System.Globalization.TimeSpanParse.ProcessTerminal_HM | parameter | 32 | -| Parameter 0 of System.Globalization.TimeSpanParse.ProcessTerminal_HMS_F_D | parameter | 32 | -| Parameter 0 of System.Globalization.TimeSpanParse.ProcessTerminal_HM_S_D | parameter | 32 | -| Parameter 0 of System.Guid.AsBytes | parameter | 32 | -| Parameter 0 of System.Guid.EqualsCore | parameter | 32 | -| Parameter 0 of System.HashCode.Initialize | parameter | 32 | -| Parameter 0 of System.IO.Enumeration.FileSystemEntry.Initialize | parameter | 32 | -| Parameter 0 of System.IO.Enumeration.FileSystemEnumerableFactory.NormalizeInputs | parameter | 32 | -| Parameter 0 of System.IO.FileSystem.<ResolveLinkTarget>g__GetLinkTargetFullPath\|46_0 | parameter | 32 | -| Parameter 0 of System.Marvin.Block | parameter | 32 | -| Parameter 0 of System.Marvin.ComputeHash32 | parameter | 32 | -| Parameter 0 of System.Marvin.ComputeHash32OrdinalIgnoreCase | parameter | 32 | -| Parameter 0 of System.Marvin.ComputeHash32OrdinalIgnoreCaseSlow | parameter | 32 | -| Parameter 0 of System.MemoryExtensions.SliceLongerSpanToMatchShorterLength | parameter | 32 | -| Parameter 0 of System.Nullable.GetValueRefOrDefaultRef | parameter | 32 | -| Parameter 0 of System.Number.<AppendUnknownChar>g__AppendNonAsciiBytes\|115_0 | parameter | 32 | -| Parameter 0 of System.Number.AccumulateDecimalDigitsIntoBigInteger | parameter | 32 | -| Parameter 0 of System.Number.AppendUnknownChar | parameter | 32 | -| Parameter 0 of System.Number.BigInteger.Add | parameter | 32 | -| Parameter 0 of System.Number.BigInteger.AddDivisor | parameter | 32 | -| Parameter 0 of System.Number.BigInteger.Compare | parameter | 32 | -| Parameter 0 of System.Number.BigInteger.CountSignificantBits | parameter | 32 | -| Parameter 0 of System.Number.BigInteger.DivRem | parameter | 32 | -| Parameter 0 of System.Number.BigInteger.HeuristicDivide | parameter | 32 | -| Parameter 0 of System.Number.BigInteger.Multiply | parameter | 32 | -| Parameter 0 of System.Number.BigInteger.SetUInt32 | parameter | 32 | -| Parameter 0 of System.Number.BigInteger.SetUInt64 | parameter | 32 | -| Parameter 0 of System.Number.BigInteger.SetValue | parameter | 32 | -| Parameter 0 of System.Number.BigInteger.SetZero | parameter | 32 | -| Parameter 0 of System.Number.BigInteger.SubtractDivisor | parameter | 32 | -| Parameter 0 of System.Number.ConvertBigIntegerToFloatingPointBits | parameter | 32 | -| Parameter 0 of System.Number.DecimalToNumber | parameter | 32 | -| Parameter 0 of System.Number.FormatCurrency | parameter | 32 | -| Parameter 0 of System.Number.FormatDouble | parameter | 32 | -| Parameter 0 of System.Number.FormatExponent | parameter | 32 | -| Parameter 0 of System.Number.FormatFixed | parameter | 32 | -| Parameter 0 of System.Number.FormatGeneral | parameter | 32 | -| Parameter 0 of System.Number.FormatHalf | parameter | 32 | -| Parameter 0 of System.Number.FormatNumber | parameter | 32 | -| Parameter 0 of System.Number.FormatPercent | parameter | 32 | -| Parameter 0 of System.Number.FormatScientific | parameter | 32 | -| Parameter 0 of System.Number.FormatSingle | parameter | 32 | -| Parameter 0 of System.Number.Grisu3.TryDigitGenCounted | parameter | 32 | -| Parameter 0 of System.Number.Grisu3.TryDigitGenShortest | parameter | 32 | -| Parameter 0 of System.Number.Grisu3.TryRunCounted | parameter | 32 | -| Parameter 0 of System.Number.Grisu3.TryRunShortest | parameter | 32 | -| Parameter 0 of System.Number.Int128DivMod1E19 | parameter | 32 | -| Parameter 0 of System.Number.NumberToFloat | parameter | 32 | -| Parameter 0 of System.Number.NumberToFloatingPointBits | parameter | 32 | -| Parameter 0 of System.Number.NumberToFloatingPointBitsSlow | parameter | 32 | -| Parameter 0 of System.Number.NumberToString | parameter | 32 | -| Parameter 0 of System.Number.NumberToStringFormat | parameter | 32 | -| Parameter 0 of System.Number.RoundNumber | parameter | 32 | -| Parameter 0 of System.Number.TryNumberBufferToBinaryInteger | parameter | 32 | -| Parameter 0 of System.Number.TryNumberToDecimal | parameter | 32 | -| Parameter 0 of System.Number.TryParseNumber | parameter | 32 | -| Parameter 0 of System.Numerics.BitOperations.Crc32Fallback.Crc32CCore | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix3x2.Impl.Invert | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix3x2.Impl.Lerp | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix3x2.Impl.op_Addition | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix3x2.Impl.op_Equality | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix3x2.Impl.op_Inequality | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix3x2.Impl.op_Multiply | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix3x2.Impl.op_Subtraction | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix3x2.Impl.op_UnaryNegation | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.<Invert>g__SoftwareFallback\|64_2 | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.<Invert>g__SseImpl\|64_0 | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.CreateBillboard | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.CreateConstrainedBillboard | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.CreateFromAxisAngle | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.CreateFromQuaternion | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.CreateLookTo | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.CreateLookToLeftHanded | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.CreateReflection | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.CreateScale | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.CreateShadow | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.CreateTranslation | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.CreateWorld | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.Decompose | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.Invert | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.Lerp | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.Transform | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.Transpose | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.op_Addition | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.op_Equality | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.op_Inequality | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.op_Multiply | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.op_Subtraction | parameter | 32 | -| Parameter 0 of System.Numerics.Matrix4x4.Impl.op_UnaryNegation | parameter | 32 | -| Parameter 0 of System.Numerics.Plane.<Equals>g__SoftwareFallback\|16_0 | parameter | 32 | -| Parameter 0 of System.Numerics.Quaternion.<Equals>g__SoftwareFallback\|44_0 | parameter | 32 | -| Parameter 0 of System.Numerics.Vector2.<Equals>g__SoftwareFallback\|59_0 | parameter | 32 | -| Parameter 0 of System.Numerics.Vector3.<Equals>g__SoftwareFallback\|60_0 | parameter | 32 | -| Parameter 0 of System.Numerics.Vector4.<Equals>g__SoftwareFallback\|66_0 | parameter | 32 | -| Parameter 0 of System.Numerics.Vector.<Equals>g__SoftwareFallback\|57_0 | parameter | 32 | -| Parameter 0 of System.Numerics.Vector.GetElementUnsafe | parameter | 32 | -| Parameter 0 of System.Numerics.Vector.LoadUnsafe | parameter | 32 | -| Parameter 0 of System.Numerics.Vector.SetElementUnsafe | parameter | 32 | -| Parameter 0 of System.PackedSpanHelpers.ComputeFirstIndex | parameter | 32 | -| Parameter 0 of System.PackedSpanHelpers.ComputeFirstIndexOverlapped | parameter | 32 | -| Parameter 0 of System.PackedSpanHelpers.Contains | parameter | 32 | -| Parameter 0 of System.PackedSpanHelpers.IndexOf | parameter | 32 | -| Parameter 0 of System.PackedSpanHelpers.IndexOfAny | parameter | 32 | -| Parameter 0 of System.PackedSpanHelpers.IndexOfAnyExcept | parameter | 32 | -| Parameter 0 of System.PackedSpanHelpers.IndexOfAnyExceptInRange | parameter | 32 | -| Parameter 0 of System.PackedSpanHelpers.IndexOfAnyInRange | parameter | 32 | -| Parameter 0 of System.PasteArguments.AppendArgument | parameter | 32 | -| Parameter 0 of System.Reflection.Assembly.GetExecutingAssembly | parameter | 32 | -| Parameter 0 of System.Reflection.AssemblyNameFormatter.AppendQuoted | parameter | 32 | -| Parameter 0 of System.Reflection.CustomAttribute.AddCustomAttributes | parameter | 32 | -| Parameter 0 of System.Reflection.MethodBase.AppendParameters | parameter | 32 | -| Parameter 0 of System.Reflection.MethodInvokerCommon.DetermineStrategy_Obj4Args | parameter | 32 | -| Parameter 0 of System.Reflection.MethodInvokerCommon.DetermineStrategy_ObjSpanArgs | parameter | 32 | -| Parameter 0 of System.Reflection.MethodInvokerCommon.DetermineStrategy_RefArgs | parameter | 32 | -| Parameter 0 of System.Reflection.RuntimeMethodInfo.InternalGetCurrentMethod | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitOnCompleted | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder.GetStateMachineBox | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<!0>.AwaitOnCompleted | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<!0>.GetStateMachineBox | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<VoidTaskResult>.AwaitOnCompleted | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<VoidTaskResult>.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.CastCache.Element | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.CastCache.HashShift | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.CastCache.KeyToBucket | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.CastCache.TableMask | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.CastHelpers.StelemRef_Helper | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.CastHelpers.StelemRef_Helper_NoCacheLookup | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.CastHelpers.WriteBarrier | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.ObjectHandleOnStack.Create | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.AwaitOnCompleted | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.GetStateMachineBox | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder<!0>.AwaitOnCompleted | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder<!0>.GetStateMachineBox | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder<VoidTaskResult>.AwaitOnCompleted | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.Unsafe.Add | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.Unsafe.AddByteOffset | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.Unsafe.AreSame | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.Unsafe.As | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.Unsafe.AsPointer | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.Unsafe.AsRef | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.Unsafe.ByteOffset | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.Unsafe.Copy | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.Unsafe.CopyBlock | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.Unsafe.CopyBlockUnaligned | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.Unsafe.InitBlock | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.Unsafe.InitBlockUnaligned | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.Unsafe.IsAddressGreaterThan | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.Unsafe.IsAddressLessThan | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.Unsafe.IsNullRef | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.Unsafe.ReadUnaligned | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.Unsafe.SkipInit | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.Unsafe.Subtract | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.Unsafe.SubtractByteOffset | parameter | 32 | -| Parameter 0 of System.Runtime.CompilerServices.Unsafe.WriteUnaligned | parameter | 32 | -| Parameter 0 of System.Runtime.InteropServices.ComWrappers.GetIUnknownImpl | parameter | 32 | -| Parameter 0 of System.Runtime.InteropServices.ComWrappers.GetIUnknownImplInternal | parameter | 32 | -| Parameter 0 of System.Runtime.InteropServices.MemoryMarshal.CreateReadOnlySpan | parameter | 32 | -| Parameter 0 of System.Runtime.InteropServices.MemoryMarshal.CreateSpan | parameter | 32 | -| Parameter 0 of System.Runtime.Intrinsics.Vector64.<Equals>g__SoftwareFallback\|34_0 | parameter | 32 | -| Parameter 0 of System.Runtime.Intrinsics.Vector64.GetElementUnsafe | parameter | 32 | -| Parameter 0 of System.Runtime.Intrinsics.Vector64.LoadUnsafe | parameter | 32 | -| Parameter 0 of System.Runtime.Intrinsics.Vector64.SetElementUnsafe | parameter | 32 | -| Parameter 0 of System.Runtime.Intrinsics.Vector128.GetElementUnsafe | parameter | 32 | -| Parameter 0 of System.Runtime.Intrinsics.Vector128.LoadUnsafe | parameter | 32 | -| Parameter 0 of System.Runtime.Intrinsics.Vector128.SetElementUnsafe | parameter | 32 | -| Parameter 0 of System.Runtime.Intrinsics.Vector128.SetLowerUnsafe | parameter | 32 | -| Parameter 0 of System.Runtime.Intrinsics.Vector128.SetUpperUnsafe | parameter | 32 | -| Parameter 0 of System.Runtime.Intrinsics.Vector256.GetElementUnsafe | parameter | 32 | -| Parameter 0 of System.Runtime.Intrinsics.Vector256.LoadUnsafe | parameter | 32 | -| Parameter 0 of System.Runtime.Intrinsics.Vector256.SetElementUnsafe | parameter | 32 | -| Parameter 0 of System.Runtime.Intrinsics.Vector256.SetLowerUnsafe | parameter | 32 | -| Parameter 0 of System.Runtime.Intrinsics.Vector256.SetUpperUnsafe | parameter | 32 | -| Parameter 0 of System.Runtime.Intrinsics.Vector512.GetElementUnsafe | parameter | 32 | -| Parameter 0 of System.Runtime.Intrinsics.Vector512.LoadUnsafe | parameter | 32 | -| Parameter 0 of System.Runtime.Intrinsics.Vector512.SetElementUnsafe | parameter | 32 | -| Parameter 0 of System.Runtime.Intrinsics.Vector512.SetLowerUnsafe | parameter | 32 | -| Parameter 0 of System.Runtime.Intrinsics.Vector512.SetUpperUnsafe | parameter | 32 | -| Parameter 0 of System.Runtime.Loader.AssemblyLoadContext.StartAssemblyLoad | parameter | 32 | -| Parameter 0 of System.Runtime.Loader.AssemblyLoadContext.StopAssemblyLoad | parameter | 32 | -| Parameter 0 of System.Runtime.MemoryFailPoint.CheckForAvailableMemory | parameter | 32 | -| Parameter 0 of System.RuntimeMethodHandle.GetCurrentMethod | parameter | 32 | -| Parameter 0 of System.RuntimeMethodHandle._GetCurrentMethod | parameter | 32 | -| Parameter 0 of System.RuntimeTypeHandle.GetNextIntroducedMethod | parameter | 32 | -| Parameter 0 of System.SpanHelpers.BinarySearch | parameter | 32 | -| Parameter 0 of System.SpanHelpers.ClearWithReferences | parameter | 32 | -| Parameter 0 of System.SpanHelpers.ClearWithoutReferences | parameter | 32 | -| Parameter 0 of System.SpanHelpers.CommonPrefixLength | parameter | 32 | -| Parameter 0 of System.SpanHelpers.ComputeFirstIndex | parameter | 32 | -| Parameter 0 of System.SpanHelpers.Contains | parameter | 32 | -| Parameter 0 of System.SpanHelpers.ContainsValueType | parameter | 32 | -| Parameter 0 of System.SpanHelpers.Count | parameter | 32 | -| Parameter 0 of System.SpanHelpers.CountValueType | parameter | 32 | -| Parameter 0 of System.SpanHelpers.Fill | parameter | 32 | -| Parameter 0 of System.SpanHelpers.IndexOf | parameter | 32 | -| Parameter 0 of System.SpanHelpers.IndexOfAny | parameter | 32 | -| Parameter 0 of System.SpanHelpers.IndexOfAnyChar | parameter | 32 | -| Parameter 0 of System.SpanHelpers.IndexOfAnyExcept | parameter | 32 | -| Parameter 0 of System.SpanHelpers.IndexOfAnyExceptInRange | parameter | 32 | -| Parameter 0 of System.SpanHelpers.IndexOfAnyExceptInRangeUnsignedNumber | parameter | 32 | -| Parameter 0 of System.SpanHelpers.IndexOfAnyExceptValueType | parameter | 32 | -| Parameter 0 of System.SpanHelpers.IndexOfAnyInRange | parameter | 32 | -| Parameter 0 of System.SpanHelpers.IndexOfAnyInRangeUnsignedNumber | parameter | 32 | -| Parameter 0 of System.SpanHelpers.IndexOfAnyValueType | parameter | 32 | -| Parameter 0 of System.SpanHelpers.IndexOfChar | parameter | 32 | -| Parameter 0 of System.SpanHelpers.IndexOfValueType | parameter | 32 | -| Parameter 0 of System.SpanHelpers.LastIndexOf | parameter | 32 | -| Parameter 0 of System.SpanHelpers.LastIndexOfAny | parameter | 32 | -| Parameter 0 of System.SpanHelpers.LastIndexOfAnyExcept | parameter | 32 | -| Parameter 0 of System.SpanHelpers.LastIndexOfAnyExceptInRange | parameter | 32 | -| Parameter 0 of System.SpanHelpers.LastIndexOfAnyExceptInRangeUnsignedNumber | parameter | 32 | -| Parameter 0 of System.SpanHelpers.LastIndexOfAnyExceptValueType | parameter | 32 | -| Parameter 0 of System.SpanHelpers.LastIndexOfAnyInRange | parameter | 32 | -| Parameter 0 of System.SpanHelpers.LastIndexOfAnyInRangeUnsignedNumber | parameter | 32 | -| Parameter 0 of System.SpanHelpers.LastIndexOfAnyValueType | parameter | 32 | -| Parameter 0 of System.SpanHelpers.LastIndexOfValueType | parameter | 32 | -| Parameter 0 of System.SpanHelpers.LoadNUInt | parameter | 32 | -| Parameter 0 of System.SpanHelpers.LoadUInt | parameter | 32 | -| Parameter 0 of System.SpanHelpers.LoadUShort | parameter | 32 | -| Parameter 0 of System.SpanHelpers.NonPackedContainsValueType | parameter | 32 | -| Parameter 0 of System.SpanHelpers.NonPackedIndexOfAnyInRangeUnsignedNumber | parameter | 32 | -| Parameter 0 of System.SpanHelpers.NonPackedIndexOfAnyValueType | parameter | 32 | -| Parameter 0 of System.SpanHelpers.NonPackedIndexOfChar | parameter | 32 | -| Parameter 0 of System.SpanHelpers.NonPackedIndexOfValueType | parameter | 32 | -| Parameter 0 of System.SpanHelpers.Replace | parameter | 32 | -| Parameter 0 of System.SpanHelpers.ReplaceValueType | parameter | 32 | -| Parameter 0 of System.SpanHelpers.Reverse | parameter | 32 | -| Parameter 0 of System.SpanHelpers.ReverseInner | parameter | 32 | -| Parameter 0 of System.SpanHelpers.SequenceCompareTo | parameter | 32 | -| Parameter 0 of System.SpanHelpers.SequenceEqual | parameter | 32 | -| Parameter 0 of System.StartupHookProvider.ParseStartupHook | parameter | 32 | -| Parameter 0 of System.StubHelpers.CleanupWorkListElement.AddToCleanupList | parameter | 32 | -| Parameter 0 of System.StubHelpers.StubHelpers.AddToCleanupList | parameter | 32 | -| Parameter 0 of System.StubHelpers.StubHelpers.DestroyCleanupList | parameter | 32 | -| Parameter 0 of System.StubHelpers.StubHelpers.KeepAliveViaCleanupList | parameter | 32 | -| Parameter 0 of System.Text.Ascii.Equals | parameter | 32 | -| Parameter 0 of System.Text.Ascii.EqualsIgnoreCase | parameter | 32 | -| Parameter 0 of System.Text.Ascii.ILoader.EqualAndAscii256 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.ILoader.EqualAndAscii512 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.ILoader.Load128 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.ILoader.Load256 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.ILoader.Load512 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.ILoader<!0,!0>.EqualAndAscii256 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.ILoader<!0,!0>.EqualAndAscii512 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.ILoader<!0,!0>.Load128 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.ILoader<!0,!0>.Load256 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.ILoader<!0,!0>.Load512 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.ILoader<!0,!1>.EqualAndAscii256 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.ILoader<!0,!1>.EqualAndAscii512 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.ILoader<!0,!1>.Load128 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.ILoader<!0,!1>.Load256 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.ILoader<!0,!1>.Load512 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.ILoader<Byte,UInt16>.EqualAndAscii256 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.ILoader<Byte,UInt16>.EqualAndAscii512 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.ILoader<Byte,UInt16>.Load128 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.ILoader<Byte,UInt16>.Load256 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.ILoader<Byte,UInt16>.Load512 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.IsValidCore | parameter | 32 | -| Parameter 0 of System.Text.Ascii.NarrowFourUtf16CharsToAsciiAndWriteToBuffer | parameter | 32 | -| Parameter 0 of System.Text.Ascii.NarrowTwoUtf16CharsToAsciiAndWriteToBuffer | parameter | 32 | -| Parameter 0 of System.Text.Ascii.PlainLoader.EqualAndAscii256 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.PlainLoader.EqualAndAscii512 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.PlainLoader.Load128 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.PlainLoader.Load256 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.PlainLoader.Load512 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.WidenFourAsciiBytesToUtf16AndWriteToBuffer | parameter | 32 | -| Parameter 0 of System.Text.Ascii.WideningLoader.EqualAndAscii256 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.WideningLoader.EqualAndAscii512 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.WideningLoader.Load128 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.WideningLoader.Load256 | parameter | 32 | -| Parameter 0 of System.Text.Ascii.WideningLoader.Load512 | parameter | 32 | -| Parameter 0 of System.Text.Latin1Utility.NarrowFourUtf16CharsToLatin1AndWriteToBuffer | parameter | 32 | -| Parameter 0 of System.Text.Latin1Utility.NarrowTwoUtf16CharsToLatin1AndWriteToBuffer | parameter | 32 | -| Parameter 0 of System.Text.UTF8Encoding.UTF8EncodingSealed.ReadUtf8 | parameter | 32 | -| Parameter 0 of System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler.<AppendEnum>g__GrowAndAppendFormatted\|21_0 | parameter | 32 | -| Parameter 0 of System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler.<AppendSpanFormattable>g__GrowAndAppendFormatted\|20_0 | parameter | 32 | -| Parameter 0 of System.Text.Unicode.Utf8Utility.IsUtf8ContinuationByte | parameter | 32 | -| Parameter 0 of System.Text.Unicode.Utf8Utility.WriteFirstUtf16CharAsUtf8ThreeByteSequence | parameter | 32 | -| Parameter 0 of System.Text.Unicode.Utf8Utility.WriteTwoUtf16CharsAsTwoUtf8ThreeByteSequences | parameter | 32 | -| Parameter 0 of System.Threading.CancellationTokenSource.Registrations.<EnterLock>g__Contention\|13_0 | parameter | 32 | -| Parameter 0 of System.Threading.Interlocked.Add | parameter | 32 | -| Parameter 0 of System.Threading.Interlocked.And | parameter | 32 | -| Parameter 0 of System.Threading.Interlocked.CompareExchange | parameter | 32 | -| Parameter 0 of System.Threading.Interlocked.Decrement | parameter | 32 | -| Parameter 0 of System.Threading.Interlocked.Exchange | parameter | 32 | -| Parameter 0 of System.Threading.Interlocked.ExchangeAdd | parameter | 32 | -| Parameter 0 of System.Threading.Interlocked.Increment | parameter | 32 | -| Parameter 0 of System.Threading.Interlocked.Or | parameter | 32 | -| Parameter 0 of System.Threading.Interlocked.Read | parameter | 32 | -| Parameter 0 of System.Threading.LazyInitializer.EnsureInitialized | parameter | 32 | -| Parameter 0 of System.Threading.LazyInitializer.EnsureInitializedCore | parameter | 32 | -| Parameter 0 of System.Threading.LazyInitializer.EnsureLockInitialized | parameter | 32 | -| Parameter 0 of System.Threading.SpinLock.CompareExchange | parameter | 32 | -| Parameter 0 of System.Threading.Tasks.Task.AddExceptionsForCompletedTask | parameter | 32 | -| Parameter 0 of System.Threading.Thread.VolatileRead | parameter | 32 | -| Parameter 0 of System.Threading.Thread.VolatileWrite | parameter | 32 | -| Parameter 0 of System.Threading.ThreadLocal.GrowTable | parameter | 32 | -| Parameter 0 of System.Threading.ThreadLocal<!0>.GrowTable | parameter | 32 | -| Parameter 0 of System.Threading.ThreadPool.GetAvailableThreads | parameter | 32 | -| Parameter 0 of System.Threading.ThreadPool.GetMaxThreads | parameter | 32 | -| Parameter 0 of System.Threading.ThreadPool.GetMinThreads | parameter | 32 | -| Parameter 0 of System.Threading.Volatile.Read | parameter | 32 | -| Parameter 0 of System.Threading.Volatile.Write | parameter | 32 | -| Parameter 0 of System.TimeZoneInfo.AdjustmentRule.AdjustDaylightDeltaToExpectedRange | parameter | 32 | -| Parameter 0 of System.TimeZoneInfo.GetDirectoryEntryFullPath | parameter | 32 | -| Parameter 0 of System.TimeZoneInfo.TZif_GenerateAdjustmentRule | parameter | 32 | -| Parameter 0 of System.TimeZoneInfo.TZif_GenerateAdjustmentRules | parameter | 32 | -| Parameter 0 of System.TimeZoneInfo.TryGetLocalTzFile | parameter | 32 | -| Parameter 0 of delegate* managed<Byte&,Void> | parameter | 32 | -| Parameter 1 of Interop.Globalization.GetJapaneseEraStartDate | parameter | 32 | -| Parameter 1 of Interop.Globalization.GetSortHandle | parameter | 32 | -| Parameter 1 of Interop.Kernel32.GetEnvironmentVariable | parameter | 32 | -| Parameter 1 of Interop.Sys.FStat | parameter | 32 | -| Parameter 1 of Interop.Sys.GetPwUidR | parameter | 32 | -| Parameter 1 of Interop.Sys.GetUnixVersion | parameter | 32 | -| Parameter 1 of Interop.Sys.LStat | parameter | 32 | -| Parameter 1 of Interop.Sys.ReadLink | parameter | 32 | -| Parameter 1 of Interop.Sys.Rename | parameter | 32 | -| Parameter 1 of Interop.Sys.Stat | parameter | 32 | -| Parameter 1 of Interop.Sys.TryGetFileSystemType | parameter | 32 | -| Parameter 1 of Microsoft.Win32.SafeHandles.SafeFileHandle.TryGetCachedLength | parameter | 32 | -| Parameter 1 of System.AppContext.TryGetSwitch | parameter | 32 | -| Parameter 1 of System.Boolean.<TryParse>g__TryParseUncommon\|20_0 | parameter | 32 | -| Parameter 1 of System.Boolean.TryParse | parameter | 32 | -| Parameter 1 of System.Buffer.BulkMoveWithWriteBarrier | parameter | 32 | -| Parameter 1 of System.Buffer.Memmove | parameter | 32 | -| Parameter 1 of System.Buffer._BulkMoveWithWriteBarrier | parameter | 32 | -| Parameter 1 of System.Buffer._Memmove | parameter | 32 | -| Parameter 1 of System.Buffer.__BulkMoveWithWriteBarrier | parameter | 32 | -| Parameter 1 of System.Buffers.AnyByteSearchValues.IndexOfAny | parameter | 32 | -| Parameter 1 of System.Buffers.AnyByteSearchValues.IndexOfAnyScalar | parameter | 32 | -| Parameter 1 of System.Buffers.AnyByteSearchValues.LastIndexOfAny | parameter | 32 | -| Parameter 1 of System.Buffers.AnyByteSearchValues.LastIndexOfAnyScalar | parameter | 32 | -| Parameter 1 of System.Buffers.AsciiByteSearchValues.IndexOfAny | parameter | 32 | -| Parameter 1 of System.Buffers.AsciiByteSearchValues.IndexOfAnyScalar | parameter | 32 | -| Parameter 1 of System.Buffers.AsciiByteSearchValues.LastIndexOfAny | parameter | 32 | -| Parameter 1 of System.Buffers.AsciiByteSearchValues.LastIndexOfAnyScalar | parameter | 32 | -| Parameter 1 of System.Buffers.AsciiCharSearchValues.IndexOfAny | parameter | 32 | -| Parameter 1 of System.Buffers.AsciiCharSearchValues.IndexOfAnyScalar | parameter | 32 | -| Parameter 1 of System.Buffers.AsciiCharSearchValues.LastIndexOfAny | parameter | 32 | -| Parameter 1 of System.Buffers.AsciiCharSearchValues.LastIndexOfAnyScalar | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadDoubleBigEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadDoubleLittleEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadHalfBigEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadHalfLittleEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadInt16BigEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadInt16LittleEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadInt32BigEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadInt32LittleEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadInt64BigEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadInt64LittleEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadInt128BigEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadInt128LittleEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadIntPtrBigEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadIntPtrLittleEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadSingleBigEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadSingleLittleEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadUInt16BigEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadUInt16LittleEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadUInt32BigEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadUInt32LittleEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadUInt64BigEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadUInt64LittleEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadUInt128BigEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadUInt128LittleEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadUIntPtrBigEndian | parameter | 32 | -| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadUIntPtrLittleEndian | parameter | 32 | -| Parameter 1 of System.Buffers.IndexOfAnyAsciiSearcher.ComputeBitmap | parameter | 32 | -| Parameter 1 of System.Buffers.IndexOfAnyAsciiSearcher.ComputeBitmap256 | parameter | 32 | -| Parameter 1 of System.Buffers.IndexOfAnyAsciiSearcher.ComputeFirstIndex | parameter | 32 | -| Parameter 1 of System.Buffers.IndexOfAnyAsciiSearcher.ComputeFirstIndexOverlapped | parameter | 32 | -| Parameter 1 of System.Buffers.IndexOfAnyAsciiSearcher.ComputeLastIndex | parameter | 32 | -| Parameter 1 of System.Buffers.IndexOfAnyAsciiSearcher.ComputeLastIndexOverlapped | parameter | 32 | -| Parameter 1 of System.Buffers.Latin1CharSearchValues.IndexOfAny | parameter | 32 | -| Parameter 1 of System.Buffers.Latin1CharSearchValues.LastIndexOfAny | parameter | 32 | -| Parameter 1 of System.Buffers.MemoryManager.TryGetArray | parameter | 32 | -| Parameter 1 of System.Buffers.MemoryManager<!0>.TryGetArray | parameter | 32 | -| Parameter 1 of System.Buffers.ProbabilisticMap.IndexOfAny | parameter | 32 | -| Parameter 1 of System.Buffers.ProbabilisticMap.IndexOfAnyVectorized | parameter | 32 | -| Parameter 1 of System.Buffers.ProbabilisticMap.LastIndexOfAny | parameter | 32 | -| Parameter 1 of System.Buffers.SearchValues.TryGetSingleRange | parameter | 32 | -| Parameter 1 of System.Buffers.SharedArrayPoolStatics.TryGetInt32EnvironmentVariable | parameter | 32 | -| Parameter 1 of System.Buffers.StandardFormat.ParseHelper | parameter | 32 | -| Parameter 1 of System.Buffers.StandardFormat.TryParse | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Base64.Avx2Decode | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Base64.Avx2Encode | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Base64.Decode | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Base64.DecodeFromUtf8InPlace | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Base64.DecodeWithWhiteSpaceFromUtf8InPlace | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Base64.Encode | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Base64.EncodeAndPadOne | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Base64.EncodeAndPadTwo | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Base64.IsValid | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Base64.Vector128Decode | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Base64.Vector128Encode | parameter | 32 | -| Parameter 1 of System.Buffers.Text.FormattingHelpers.CountDecimalTrailingZeros | parameter | 32 | -| Parameter 1 of System.Buffers.Text.ParserHelpers.TryParseThrowFormatException | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParse | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseByteD | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseByteN | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseByteX | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseDateTimeG | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseDateTimeOffsetDefault | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseDateTimeOffsetO | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseGuidCore | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseGuidN | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseInt16D | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseInt16N | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseInt32D | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseInt32N | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseInt64D | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseInt64N | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseNormalAsFloatingPoint | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseNumber | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseSByteD | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseSByteN | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseTimeSpanBigG | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseTimeSpanC | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseTimeSpanFraction | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseTimeSpanLittleG | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseUInt16D | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseUInt16N | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseUInt16X | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseUInt32D | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseUInt32N | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseUInt32X | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseUInt64D | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseUInt64N | parameter | 32 | -| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseUInt64X | parameter | 32 | -| Parameter 1 of System.ByReference..ctor | parameter | 32 | -| Parameter 1 of System.Byte.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Byte.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Byte.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Byte.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Byte.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Byte.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Byte.TryParse | parameter | 32 | -| Parameter 1 of System.Char.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Char.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Char.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Char.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Char.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Char.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Char.TryParse | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.ConcurrentQueue.SnapForObservation | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.ConcurrentQueue.TryDequeue | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.ConcurrentQueue.TryDequeueSlow | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.ConcurrentQueue.TryPeek | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.ConcurrentQueue.TryTake | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.ConcurrentQueue<!0>.SnapForObservation | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.ConcurrentQueue<!0>.TryDequeue | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.ConcurrentQueue<!0>.TryDequeueSlow | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.ConcurrentQueue<!0>.TryPeek | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.ConcurrentQueue<Object>.TryDequeue | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.ConcurrentQueueSegment.TryDequeue | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.ConcurrentQueueSegment.TryPeek | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.ConcurrentQueueSegment<!0>.TryDequeue | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.ConcurrentQueueSegment<!0>.TryPeek | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.IProducerConsumerCollection.TryTake | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.IProducerConsumerCollection<!0>.TryTake | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.IProducerConsumerQueue.TryDequeue | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.IProducerConsumerQueue<!0>.TryDequeue | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.IProducerConsumerQueue<Task>.TryDequeue | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.MultiProducerMultiConsumerQueue.TryDequeue | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.SingleProducerSingleConsumerQueue.TryDequeue | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.SingleProducerSingleConsumerQueue.TryPeek | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.SingleProducerSingleConsumerQueue<!0>.TryDequeue | parameter | 32 | -| Parameter 1 of System.Collections.Concurrent.SingleProducerSingleConsumerQueue<!0>.TryPeek | parameter | 32 | -| Parameter 1 of System.Collections.DictionaryEntry.Deconstruct | parameter | 32 | -| Parameter 1 of System.Collections.Generic.EnumerableHelpers.ToArray | parameter | 32 | -| Parameter 1 of System.Collections.Generic.GenericArraySortHelper.GreaterThan | parameter | 32 | -| Parameter 1 of System.Collections.Generic.GenericArraySortHelper.LessThan | parameter | 32 | -| Parameter 1 of System.Collections.Generic.GenericArraySortHelper.Swap | parameter | 32 | -| Parameter 1 of System.Collections.Generic.GenericArraySortHelper.SwapIfGreater | parameter | 32 | -| Parameter 1 of System.Collections.Generic.GenericArraySortHelper<!0,!1>.GreaterThan | parameter | 32 | -| Parameter 1 of System.Collections.Generic.GenericArraySortHelper<!0,!1>.LessThan | parameter | 32 | -| Parameter 1 of System.Collections.Generic.GenericArraySortHelper<!0>.GreaterThan | parameter | 32 | -| Parameter 1 of System.Collections.Generic.GenericArraySortHelper<!0>.LessThan | parameter | 32 | -| Parameter 1 of System.Collections.Generic.GenericArraySortHelper<!0>.Swap | parameter | 32 | -| Parameter 1 of System.Collections.Generic.GenericArraySortHelper<!0>.SwapIfGreater | parameter | 32 | -| Parameter 1 of System.Collections.Generic.KeyValuePair.Deconstruct | parameter | 32 | -| Parameter 1 of System.Collections.Generic.KeyValuePair<String,ResourceSet>.Deconstruct | parameter | 32 | -| Parameter 1 of System.Collections.Generic.Queue.MoveNext | parameter | 32 | -| Parameter 1 of System.Collections.Generic.Queue.TryDequeue | parameter | 32 | -| Parameter 1 of System.Collections.Generic.Queue.TryPeek | parameter | 32 | -| Parameter 1 of System.Collections.Generic.Queue<!0>.MoveNext | parameter | 32 | -| Parameter 1 of System.Collections.Generic.Stack<ConsoleKeyInfo>.TryPop | parameter | 32 | -| Parameter 1 of System.ComAwareWeakReference.ObjectToComWeakRef | parameter | 32 | -| Parameter 1 of System.ConsolePal.<TryGetCursorPosition>g__BufferUntil\|82_1 | parameter | 32 | -| Parameter 1 of System.ConsolePal.GetWindowSize | parameter | 32 | -| Parameter 1 of System.ConsolePal.TryGetCachedCursorPosition | parameter | 32 | -| Parameter 1 of System.ConsolePal.TryGetCursorPosition | parameter | 32 | -| Parameter 1 of System.Convert.Decode | parameter | 32 | -| Parameter 1 of System.CultureAwareComparer.IsWellKnownCultureAwareComparerCore | parameter | 32 | -| Parameter 1 of System.DateOnly.Deconstruct | parameter | 32 | -| Parameter 1 of System.DateOnly.TryParse | parameter | 32 | -| Parameter 1 of System.DateTime.Deconstruct | parameter | 32 | -| Parameter 1 of System.DateTime.GetDate | parameter | 32 | -| Parameter 1 of System.DateTime.GetTime | parameter | 32 | -| Parameter 1 of System.DateTime.GetTimePrecise | parameter | 32 | -| Parameter 1 of System.DateTime.TryParse | parameter | 32 | -| Parameter 1 of System.DateTimeFormat.PrepareFormatU | parameter | 32 | -| Parameter 1 of System.DateTimeOffset.Deconstruct | parameter | 32 | -| Parameter 1 of System.DateTimeOffset.TryParse | parameter | 32 | -| Parameter 1 of System.DateTimeParse.AdjustTimeMark | parameter | 32 | -| Parameter 1 of System.DateTimeParse.CheckDefaultDateTime | parameter | 32 | -| Parameter 1 of System.DateTimeParse.ExpandPredefinedFormat | parameter | 32 | -| Parameter 1 of System.DateTimeParse.GetDateOfDSN | parameter | 32 | -| Parameter 1 of System.DateTimeParse.GetDateOfNDS | parameter | 32 | -| Parameter 1 of System.DateTimeParse.GetDateOfNNDS | parameter | 32 | -| Parameter 1 of System.DateTimeParse.GetDateTimeNow | parameter | 32 | -| Parameter 1 of System.DateTimeParse.GetDayOfMN | parameter | 32 | -| Parameter 1 of System.DateTimeParse.GetDayOfMNN | parameter | 32 | -| Parameter 1 of System.DateTimeParse.GetDayOfNM | parameter | 32 | -| Parameter 1 of System.DateTimeParse.GetDayOfNN | parameter | 32 | -| Parameter 1 of System.DateTimeParse.GetDayOfNNN | parameter | 32 | -| Parameter 1 of System.DateTimeParse.GetDayOfNNY | parameter | 32 | -| Parameter 1 of System.DateTimeParse.GetDayOfYM | parameter | 32 | -| Parameter 1 of System.DateTimeParse.GetDayOfYMN | parameter | 32 | -| Parameter 1 of System.DateTimeParse.GetDayOfYN | parameter | 32 | -| Parameter 1 of System.DateTimeParse.GetDayOfYNN | parameter | 32 | -| Parameter 1 of System.DateTimeParse.GetDefaultYear | parameter | 32 | -| Parameter 1 of System.DateTimeParse.GetHebrewDayOfNM | parameter | 32 | -| Parameter 1 of System.DateTimeParse.GetMonthDayOrder | parameter | 32 | -| Parameter 1 of System.DateTimeParse.GetTimeOfN | parameter | 32 | -| Parameter 1 of System.DateTimeParse.GetTimeOfNN | parameter | 32 | -| Parameter 1 of System.DateTimeParse.GetTimeOfNNN | parameter | 32 | -| Parameter 1 of System.DateTimeParse.GetYearMonthDayOrder | parameter | 32 | -| Parameter 1 of System.DateTimeParse.GetYearMonthOrder | parameter | 32 | -| Parameter 1 of System.DateTimeParse.HandleTimeZone | parameter | 32 | -| Parameter 1 of System.DateTimeParse.Lex | parameter | 32 | -| Parameter 1 of System.DateTimeParse.MatchHebrewDigits | parameter | 32 | -| Parameter 1 of System.DateTimeParse.ParseByFormat | parameter | 32 | -| Parameter 1 of System.DateTimeParse.ParseFraction | parameter | 32 | -| Parameter 1 of System.DateTimeParse.ParseISO8601 | parameter | 32 | -| Parameter 1 of System.DateTimeParse.ParseSign | parameter | 32 | -| Parameter 1 of System.DateTimeParse.ParseTimeZone | parameter | 32 | -| Parameter 1 of System.DateTimeParse.ProcessDateTimeSuffix | parameter | 32 | -| Parameter 1 of System.DateTimeParse.ProcessHebrewTerminalState | parameter | 32 | -| Parameter 1 of System.DateTimeParse.ProcessTerminalState | parameter | 32 | -| Parameter 1 of System.DateTimeParse.TryParseFormatO | parameter | 32 | -| Parameter 1 of System.DateTimeParse.TryParseFormatR | parameter | 32 | -| Parameter 1 of System.Decimal..ctor | parameter | 32 | -| Parameter 1 of System.Decimal.DecCalc.DecAddSub | parameter | 32 | -| Parameter 1 of System.Decimal.DecCalc.Div96ByConst | parameter | 32 | -| Parameter 1 of System.Decimal.DecCalc.Div128By96 | parameter | 32 | -| Parameter 1 of System.Decimal.DecCalc.Unscale | parameter | 32 | -| Parameter 1 of System.Decimal.DecCalc.VarDecCmp | parameter | 32 | -| Parameter 1 of System.Decimal.DecCalc.VarDecCmpSub | parameter | 32 | -| Parameter 1 of System.Decimal.DecCalc.VarDecDiv | parameter | 32 | -| Parameter 1 of System.Decimal.DecCalc.VarDecFromR4 | parameter | 32 | -| Parameter 1 of System.Decimal.DecCalc.VarDecFromR8 | parameter | 32 | -| Parameter 1 of System.Decimal.DecCalc.VarDecMod | parameter | 32 | -| Parameter 1 of System.Decimal.DecCalc.VarDecModFull | parameter | 32 | -| Parameter 1 of System.Decimal.DecCalc.VarDecMul | parameter | 32 | -| Parameter 1 of System.Decimal.TryConvertFrom | parameter | 32 | -| Parameter 1 of System.Decimal.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Decimal.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Decimal.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Decimal.TryConvertTo | parameter | 32 | -| Parameter 1 of System.Decimal.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Decimal.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Decimal.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Decimal.TryParse | parameter | 32 | -| Parameter 1 of System.DefaultBinder.ReorderArgumentArray | parameter | 32 | -| Parameter 1 of System.Diagnostics.Debug.Assert | parameter | 32 | -| Parameter 1 of System.Diagnostics.Debug.WriteIf | parameter | 32 | -| Parameter 1 of System.Diagnostics.Debug.WriteLineIf | parameter | 32 | -| Parameter 1 of System.Diagnostics.StackTrace.TryResolveStateMachineMethod | parameter | 32 | -| Parameter 1 of System.Diagnostics.Tracing.ActivityTracker.ActivityInfo.CreateActivityPathGuid | parameter | 32 | -| Parameter 1 of System.Diagnostics.Tracing.EventParameterInfo.GetMetadataLength | parameter | 32 | -| Parameter 1 of System.Diagnostics.Tracing.EventParameterInfo.GetMetadataLengthForTypeV2 | parameter | 32 | -| Parameter 1 of System.Diagnostics.Tracing.EventParameterInfo.GetMetadataLengthV2 | parameter | 32 | -| Parameter 1 of System.Diagnostics.Tracing.EventParameterInfo.GetTypeInfoFromType | parameter | 32 | -| Parameter 1 of System.Diagnostics.Tracing.EventPipeEventProvider.EventActivityIdControl | parameter | 32 | -| Parameter 1 of System.Diagnostics.Tracing.EventPipeEventProvider.EventWriteTransfer | parameter | 32 | -| Parameter 1 of System.Diagnostics.Tracing.EventPipeInternal.EventActivityIdControl | parameter | 32 | -| Parameter 1 of System.Diagnostics.Tracing.EventPipeInternal.EventPipeProviderConfigurationNative.MarshalToNative | parameter | 32 | -| Parameter 1 of System.Diagnostics.Tracing.EventProvider.EncodeObject | parameter | 32 | -| Parameter 1 of System.Diagnostics.Tracing.EventProvider.WriteEvent | parameter | 32 | -| Parameter 1 of System.Diagnostics.Tracing.EventProvider.WriteEventRaw | parameter | 32 | -| Parameter 1 of System.Diagnostics.Tracing.EventProviderImpl.EventWriteTransfer | parameter | 32 | -| Parameter 1 of System.Diagnostics.Tracing.EventSource.SetCurrentThreadActivityId | parameter | 32 | -| Parameter 1 of System.Diagnostics.Tracing.FieldMetadata.Encode | parameter | 32 | -| Parameter 1 of System.Diagnostics.Tracing.Statics.EncodeTags | parameter | 32 | -| Parameter 1 of System.Double.TryConvertFrom | parameter | 32 | -| Parameter 1 of System.Double.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Double.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Double.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Double.TryConvertTo | parameter | 32 | -| Parameter 1 of System.Double.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Double.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Double.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Double.TryParse | parameter | 32 | -| Parameter 1 of System.Enum.<ToString>g__HandleRareTypes\|55_0 | parameter | 32 | -| Parameter 1 of System.Enum.ToString | parameter | 32 | -| Parameter 1 of System.Enum.ToStringInlined | parameter | 32 | -| Parameter 1 of System.Enum.TryParse | parameter | 32 | -| Parameter 1 of System.Exception.<ToString>g__Write\|60_0 | parameter | 32 | -| Parameter 1 of System.Exception.GetHelpContext | parameter | 32 | -| Parameter 1 of System.Exception.GetStackTracesDeepCopy | parameter | 32 | -| Parameter 1 of System.Exception.RestoreDispatchState | parameter | 32 | -| Parameter 1 of System.Globalization.CalendarData.NormalizeDayOfWeek | parameter | 32 | -| Parameter 1 of System.Globalization.CultureData.GetLocaleName | parameter | 32 | -| Parameter 1 of System.Globalization.CultureData.IsValidCultureName | parameter | 32 | -| Parameter 1 of System.Globalization.CultureData.NormalizeCultureName | parameter | 32 | -| Parameter 1 of System.Globalization.DateTimeFormatInfo.TryParseHebrewNumber | parameter | 32 | -| Parameter 1 of System.Globalization.DateTimeFormatInfo.YearMonthAdjustment | parameter | 32 | -| Parameter 1 of System.Globalization.HebrewNumber.ParseByChar | parameter | 32 | -| Parameter 1 of System.Globalization.JapaneseCalendar.GetJapaneseEraStartDate | parameter | 32 | -| Parameter 1 of System.Globalization.Ordinal.EqualsIgnoreCase | parameter | 32 | -| Parameter 1 of System.Globalization.Ordinal.EqualsIgnoreCase_Scalar | parameter | 32 | -| Parameter 1 of System.Globalization.Ordinal.EqualsIgnoreCase_Vector128 | parameter | 32 | -| Parameter 1 of System.Globalization.TextInfo.AddNonLetter | parameter | 32 | -| Parameter 1 of System.Globalization.TextInfo.AddTitlecaseLetter | parameter | 32 | -| Parameter 1 of System.Globalization.TimeSpanParse.ParseExactLiteral | parameter | 32 | -| Parameter 1 of System.Globalization.TimeSpanParse.StringParser.ParseTime | parameter | 32 | -| Parameter 1 of System.Globalization.TimeSpanParse.TimeSpanRawInfo.ProcessToken | parameter | 32 | -| Parameter 1 of System.Globalization.TimeSpanParse.TryParseTimeSpanConstant | parameter | 32 | -| Parameter 1 of System.Globalization.UmAlQuraCalendar.ConvertGregorianToHijri | parameter | 32 | -| Parameter 1 of System.Guid.<TryParseExactD>g__TryCompatParsing\|33_0 | parameter | 32 | -| Parameter 1 of System.Guid.EqualsCore | parameter | 32 | -| Parameter 1 of System.Guid.TryParse | parameter | 32 | -| Parameter 1 of System.Guid.TryParseExactB | parameter | 32 | -| Parameter 1 of System.Guid.TryParseExactD | parameter | 32 | -| Parameter 1 of System.Guid.TryParseExactN | parameter | 32 | -| Parameter 1 of System.Guid.TryParseExactP | parameter | 32 | -| Parameter 1 of System.Guid.TryParseExactX | parameter | 32 | -| Parameter 1 of System.Guid.TryParseGuid | parameter | 32 | -| Parameter 1 of System.Guid.TryParseHex | parameter | 32 | -| Parameter 1 of System.Half.TryConvertFrom | parameter | 32 | -| Parameter 1 of System.Half.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Half.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Half.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Half.TryConvertTo | parameter | 32 | -| Parameter 1 of System.Half.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Half.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Half.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Half.TryParse | parameter | 32 | -| Parameter 1 of System.HashCode.Initialize | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerable.DelegateEnumerator.ShouldIncludeEntry | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerable.DelegateEnumerator.ShouldRecurseIntoEntry | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerable.DelegateEnumerator.TransformEntry | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerable.FindPredicate.BeginInvoke | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerable.FindPredicate.EndInvoke | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerable.FindPredicate.Invoke | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerable.FindTransform.BeginInvoke | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerable.FindTransform.EndInvoke | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerable.FindTransform.Invoke | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerable<!0>.FindPredicate.Invoke | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerable<!0>.FindTransform.Invoke | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c.<DirectoryInfos>b__6_0 | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c.<FileInfos>b__5_0 | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c.<FileSystemInfos>b__7_0 | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c.<UserDirectories>b__3_0 | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c.<UserEntries>b__4_0 | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c.<UserFiles>b__2_0 | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass2_0.<UserFiles>b__1 | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass3_0.<UserDirectories>b__1 | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass4_0.<UserEntries>b__1 | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass5_0.<FileInfos>b__1 | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass6_0.<DirectoryInfos>b__1 | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass7_0.<FileSystemInfos>b__1 | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.NormalizeInputs | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerator.ShouldIncludeEntry | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerator.ShouldRecurseIntoEntry | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerator.TransformEntry | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerator<!0>.ShouldIncludeEntry | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerator<!0>.ShouldRecurseIntoEntry | parameter | 32 | -| Parameter 1 of System.IO.Enumeration.FileSystemEnumerator<!0>.TransformEntry | parameter | 32 | -| Parameter 1 of System.IO.FileSystem.<>c.<RemoveDirectoryRecursive>b__20_0 | parameter | 32 | -| Parameter 1 of System.IO.FileSystem.DirectoryExists | parameter | 32 | -| Parameter 1 of System.IO.FileSystem.FileExists | parameter | 32 | -| Parameter 1 of System.IO.FileSystemInfo.Init | parameter | 32 | -| Parameter 1 of System.IO.KeyParser.<ParseFromSingleChar>g__ControlAndDigitPressed\|8_2 | parameter | 32 | -| Parameter 1 of System.IO.KeyParser.<ParseFromSingleChar>g__UppercaseCharacter\|8_0 | parameter | 32 | -| Parameter 1 of System.IO.MemoryStream.TryGetBuffer | parameter | 32 | -| Parameter 1 of System.IO.Path.ExistsCore | parameter | 32 | -| Parameter 1 of System.IO.StdInReader.ReadKey | parameter | 32 | -| Parameter 1 of System.IO.SyncTextReader.ReadKey | parameter | 32 | -| Parameter 1 of System.IO.UnmanagedMemoryStreamWrapper.TryGetBuffer | parameter | 32 | -| Parameter 1 of System.Int16.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Int16.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Int16.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Int16.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Int16.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Int16.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Int16.TryParse | parameter | 32 | -| Parameter 1 of System.Int32.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Int32.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Int32.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Int32.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Int32.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Int32.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Int32.TryParse | parameter | 32 | -| Parameter 1 of System.Int64.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Int64.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Int64.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Int64.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Int64.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Int64.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Int64.TryParse | parameter | 32 | -| Parameter 1 of System.Int128.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Int128.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Int128.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Int128.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Int128.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Int128.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Int128.TryParse | parameter | 32 | -| Parameter 1 of System.IntPtr.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.IntPtr.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.IntPtr.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.IntPtr.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.IntPtr.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.IntPtr.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.IntPtr.TryParse | parameter | 32 | -| Parameter 1 of System.LocalAppContextSwitches.GetCachedSwitchValue | parameter | 32 | -| Parameter 1 of System.LocalAppContextSwitches.GetCachedSwitchValueInternal | parameter | 32 | -| Parameter 1 of System.Marvin.Block | parameter | 32 | -| Parameter 1 of System.MemoryExtensions.SliceLongerSpanToMatchShorterLength | parameter | 32 | -| Parameter 1 of System.MemoryExtensions.TryWrite | parameter | 32 | -| Parameter 1 of System.ModuleHandle.GetPEKind | parameter | 32 | -| Parameter 1 of System.Net.WebUtility.ConvertSmpToUtf16 | parameter | 32 | -| Parameter 1 of System.Net.WebUtility.GetNextUnicodeScalarValueFromUtf16Surrogate | parameter | 32 | -| Parameter 1 of System.Net.WebUtility.HtmlDecode | parameter | 32 | -| Parameter 1 of System.Net.WebUtility.HtmlEncode | parameter | 32 | -| Parameter 1 of System.Number.BigInteger.Add | parameter | 32 | -| Parameter 1 of System.Number.BigInteger.Compare | parameter | 32 | -| Parameter 1 of System.Number.BigInteger.DivRem | parameter | 32 | -| Parameter 1 of System.Number.BigInteger.DivRem32 | parameter | 32 | -| Parameter 1 of System.Number.BigInteger.HeuristicDivide | parameter | 32 | -| Parameter 1 of System.Number.BigInteger.Multiply | parameter | 32 | -| Parameter 1 of System.Number.BigInteger.Pow2 | parameter | 32 | -| Parameter 1 of System.Number.BigInteger.Pow10 | parameter | 32 | -| Parameter 1 of System.Number.BigInteger.SetValue | parameter | 32 | -| Parameter 1 of System.Number.DecimalToNumber | parameter | 32 | -| Parameter 1 of System.Number.DiyFp.CreateAndGetBoundaries | parameter | 32 | -| Parameter 1 of System.Number.DiyFp.Multiply | parameter | 32 | -| Parameter 1 of System.Number.DiyFp.Subtract | parameter | 32 | -| Parameter 1 of System.Number.ExtractFractionAndBiasedExponent | parameter | 32 | -| Parameter 1 of System.Number.FormatCurrency | parameter | 32 | -| Parameter 1 of System.Number.FormatFixed | parameter | 32 | -| Parameter 1 of System.Number.FormatGeneral | parameter | 32 | -| Parameter 1 of System.Number.FormatNumber | parameter | 32 | -| Parameter 1 of System.Number.FormatPercent | parameter | 32 | -| Parameter 1 of System.Number.FormatScientific | parameter | 32 | -| Parameter 1 of System.Number.GetFloatingPointMaxDigitsAndPrecision | parameter | 32 | -| Parameter 1 of System.Number.Grisu3.TryDigitGenShortest | parameter | 32 | -| Parameter 1 of System.Number.Grisu3.TryRunShortest | parameter | 32 | -| Parameter 1 of System.Number.Int32ToNumber | parameter | 32 | -| Parameter 1 of System.Number.Int64ToNumber | parameter | 32 | -| Parameter 1 of System.Number.Int128ToNumber | parameter | 32 | -| Parameter 1 of System.Number.NumberToString | parameter | 32 | -| Parameter 1 of System.Number.NumberToStringFormat | parameter | 32 | -| Parameter 1 of System.Number.ParseFormatSpecifier | parameter | 32 | -| Parameter 1 of System.Number.TryNumberBufferToBinaryInteger | parameter | 32 | -| Parameter 1 of System.Number.TryNumberToDecimal | parameter | 32 | -| Parameter 1 of System.Number.UInt32ToNumber | parameter | 32 | -| Parameter 1 of System.Number.UInt64ToNumber | parameter | 32 | -| Parameter 1 of System.Number.UInt128ToNumber | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Byte>.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Byte>.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Byte>.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Byte>.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Byte>.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Byte>.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Char>.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Char>.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Char>.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Char>.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Char>.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Char>.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Decimal>.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Decimal>.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Decimal>.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Decimal>.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Decimal>.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Decimal>.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Double>.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Double>.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Double>.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Double>.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Double>.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Double>.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Half>.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Half>.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Half>.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Half>.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Half>.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Half>.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int16>.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int16>.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int16>.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int16>.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int16>.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int16>.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int32>.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int32>.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int32>.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int32>.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int32>.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int32>.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int64>.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int64>.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int64>.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int64>.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int64>.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int64>.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int128>.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int128>.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int128>.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int128>.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int128>.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Int128>.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<IntPtr>.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<IntPtr>.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<IntPtr>.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<IntPtr>.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<IntPtr>.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<IntPtr>.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<NFloat>.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<NFloat>.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<NFloat>.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<NFloat>.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<NFloat>.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<NFloat>.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<SByte>.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<SByte>.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<SByte>.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<SByte>.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<SByte>.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<SByte>.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Single>.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Single>.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Single>.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Single>.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Single>.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<Single>.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt16>.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt16>.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt16>.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt16>.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt16>.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt16>.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt32>.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt32>.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt32>.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt32>.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt32>.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt32>.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt64>.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt64>.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt64>.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt64>.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt64>.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt64>.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt128>.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt128>.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt128>.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt128>.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt128>.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UInt128>.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UIntPtr>.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UIntPtr>.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UIntPtr>.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UIntPtr>.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UIntPtr>.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Numerics.INumberBase<UIntPtr>.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix3x2.Impl.Equals | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix3x2.Impl.Invert | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix3x2.Impl.Lerp | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix3x2.Impl.op_Addition | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix3x2.Impl.op_Equality | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix3x2.Impl.op_Inequality | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix3x2.Impl.op_Multiply | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix3x2.Impl.op_Subtraction | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix3x2.Invert | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Decompose | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.<Invert>g__SoftwareFallback\|64_2 | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.<Invert>g__SseImpl\|64_0 | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.CreateBillboard | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.CreateConstrainedBillboard | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.CreateLookTo | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.CreateLookToLeftHanded | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.CreateRotationX | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.CreateRotationY | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.CreateRotationZ | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.CreateScale | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.CreateShadow | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.CreateWorld | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.Decompose | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.Equals | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.Init | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.Invert | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.Lerp | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.Transform | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.op_Addition | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.op_Equality | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.op_Inequality | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.op_Multiply | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Impl.op_Subtraction | parameter | 32 | -| Parameter 1 of System.Numerics.Matrix4x4.Invert | parameter | 32 | -| Parameter 1 of System.Numerics.Vector2.Transform | parameter | 32 | -| Parameter 1 of System.Numerics.Vector2.TransformNormal | parameter | 32 | -| Parameter 1 of System.Numerics.Vector3.TransformNormal | parameter | 32 | -| Parameter 1 of System.Numerics.Vector4.Transform | parameter | 32 | -| Parameter 1 of System.Numerics.Vector.StoreUnsafe | parameter | 32 | -| Parameter 1 of System.Numerics.Vector.Widen | parameter | 32 | -| Parameter 1 of System.OrdinalComparer.IsWellKnownOrdinalComparerCore | parameter | 32 | -| Parameter 1 of System.PackedSpanHelpers.ComputeFirstIndex | parameter | 32 | -| Parameter 1 of System.PackedSpanHelpers.ComputeFirstIndexOverlapped | parameter | 32 | -| Parameter 1 of System.ParseNumbers.EatWhiteSpace | parameter | 32 | -| Parameter 1 of System.ReadOnlyMemory.GetObjectStartLength | parameter | 32 | -| Parameter 1 of System.ReadOnlyMemory<!0>.GetObjectStartLength | parameter | 32 | -| Parameter 1 of System.ReadOnlyMemory<Char>.GetObjectStartLength | parameter | 32 | -| Parameter 1 of System.ReadOnlySpan..ctor | parameter | 32 | -| Parameter 1 of System.ReadOnlySpan<!0>..ctor | parameter | 32 | -| Parameter 1 of System.ReadOnlySpan<Byte>..ctor | parameter | 32 | -| Parameter 1 of System.ReadOnlySpan<Char>..ctor | parameter | 32 | -| Parameter 1 of System.ReadOnlySpan<Int32>..ctor | parameter | 32 | -| Parameter 1 of System.ReadOnlySpan<Object>..ctor | parameter | 32 | -| Parameter 1 of System.Reflection.AssemblyNameParser.GetNextToken | parameter | 32 | -| Parameter 1 of System.Reflection.AssemblyNameParser.RecordNewSeenOrThrow | parameter | 32 | -| Parameter 1 of System.Reflection.Binder.ReorderArgumentArray | parameter | 32 | -| Parameter 1 of System.Reflection.ConstructorInvoker.CheckArgument | parameter | 32 | -| Parameter 1 of System.Reflection.CustomAttribute.FilterCustomAttributeRecord | parameter | 32 | -| Parameter 1 of System.Reflection.CustomAttribute.GetPropertyOrFieldData | parameter | 32 | -| Parameter 1 of System.Reflection.CustomAttribute.ParseAttributeUsageAttribute | parameter | 32 | -| Parameter 1 of System.Reflection.CustomAttributeEncodedArgument.ParseAttributeArguments | parameter | 32 | -| Parameter 1 of System.Reflection.Emit.DynamicResolver.GetCodeInfo | parameter | 32 | -| Parameter 1 of System.Reflection.Emit.DynamicResolver.GetJitContext | parameter | 32 | -| Parameter 1 of System.Reflection.Emit.RuntimeMethodBuilder.GetLocalSignature | parameter | 32 | -| Parameter 1 of System.Reflection.Emit.RuntimeModuleBuilder.GetPEKind | parameter | 32 | -| Parameter 1 of System.Reflection.Emit.SignatureHelper.InternalGetSignature | parameter | 32 | -| Parameter 1 of System.Reflection.InvokeUtils.TryConvertPointer | parameter | 32 | -| Parameter 1 of System.Reflection.Metadata.AssemblyExtensions.InternalTryGetRawMetadata | parameter | 32 | -| Parameter 1 of System.Reflection.Metadata.AssemblyExtensions.TryGetRawMetadata | parameter | 32 | -| Parameter 1 of System.Reflection.MetadataImport.GetMarshalAs | parameter | 32 | -| Parameter 1 of System.Reflection.MetadataImport.GetScopeProps | parameter | 32 | -| Parameter 1 of System.Reflection.MetadataImport._GetScopeProps | parameter | 32 | -| Parameter 1 of System.Reflection.MethodBaseInvoker.TryByRefFastPath | parameter | 32 | -| Parameter 1 of System.Reflection.MethodInvoker.CheckArgument | parameter | 32 | -| Parameter 1 of System.Reflection.MethodInvokerCommon.DetermineStrategy_Obj4Args | parameter | 32 | -| Parameter 1 of System.Reflection.MethodInvokerCommon.DetermineStrategy_ObjSpanArgs | parameter | 32 | -| Parameter 1 of System.Reflection.MethodInvokerCommon.DetermineStrategy_RefArgs | parameter | 32 | -| Parameter 1 of System.Reflection.MethodInvokerCommon.Initialize | parameter | 32 | -| Parameter 1 of System.Reflection.Module.GetPEKind | parameter | 32 | -| Parameter 1 of System.Reflection.RuntimeAssembly.GetVersion | parameter | 32 | -| Parameter 1 of System.Reflection.RuntimeAssembly.InternalLoad | parameter | 32 | -| Parameter 1 of System.Reflection.RuntimeCustomAttributeData.GetCombinedList | parameter | 32 | -| Parameter 1 of System.Reflection.RuntimeModule.GetPEKind | parameter | 32 | -| Parameter 1 of System.Reflection.TypeNameParser.AssemblyQualifiedTypeName.ResolveType | parameter | 32 | -| Parameter 1 of System.Reflection.TypeNameParser.GenericTypeName.ResolveType | parameter | 32 | -| Parameter 1 of System.Reflection.TypeNameParser.ModifierTypeName.ResolveType | parameter | 32 | -| Parameter 1 of System.Reflection.TypeNameParser.NamespaceTypeName.ResolveType | parameter | 32 | -| Parameter 1 of System.Reflection.TypeNameParser.NestedNamespaceTypeName.ResolveType | parameter | 32 | -| Parameter 1 of System.Reflection.TypeNameParser.TypeName.ResolveType | parameter | 32 | -| Parameter 1 of System.Resolver.GetCodeInfo | parameter | 32 | -| Parameter 1 of System.Resolver.GetJitContext | parameter | 32 | -| Parameter 1 of System.Resources.ManifestBasedResourceGroveler.GetNeutralResourcesLanguage | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncIteratorMethodBuilder.AwaitOnCompleted | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncIteratorMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncIteratorMethodBuilder.MoveNext | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitOnCompleted | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder.GetStateMachineBox | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder.SetException | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder.SetNotificationForWaitCompletion | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<!0>.AwaitOnCompleted | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<!0>.GetStateMachineBox | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<!0>.SetException | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<!0>.SetNotificationForWaitCompletion | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<Boolean>.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<Boolean>.Start | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<Byte[]>.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<Byte[]>.Start | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<String>.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<String>.Start | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<String[]>.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<String[]>.Start | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<VoidTaskResult>.AwaitOnCompleted | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<VoidTaskResult>.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<VoidTaskResult>.SetException | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<VoidTaskResult>.SetNotificationForWaitCompletion | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder.AwaitOnCompleted | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder.Start | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder<Int32>.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder<Int32>.Start | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncVoidMethodBuilder.AwaitOnCompleted | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncVoidMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.AsyncVoidMethodBuilder.Start | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable..ctor | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable.ConfiguredValueTaskAwaiter..ctor | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.AwaitOnCompleted | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.GetStateMachineBox | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.SetException | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.Start | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder<!0>.AwaitOnCompleted | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder<!0>.GetStateMachineBox | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder<!0>.SetException | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder<Int32>.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder<Int32>.Start | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder<VoidTaskResult>.AwaitOnCompleted | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder<VoidTaskResult>.SetException | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.QCallAssembly..ctor | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.QCallModule..ctor | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.QCallTypeHandle..ctor | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.RuntimeHelpers.Box | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.StackCrawlMarkHandle..ctor | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.StringHandleOnStack..ctor | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.Unsafe.AreSame | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.Unsafe.ByteOffset | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.Unsafe.Copy | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.Unsafe.CopyBlock | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.Unsafe.CopyBlockUnaligned | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.Unsafe.IsAddressGreaterThan | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.Unsafe.IsAddressLessThan | parameter | 32 | -| Parameter 1 of System.Runtime.CompilerServices.ValueTaskAwaiter..ctor | parameter | 32 | -| Parameter 1 of System.Runtime.DependentHandle.InternalGetTargetAndDependent | parameter | 32 | -| Parameter 1 of System.Runtime.DependentHandle.UnsafeGetTargetAndDependent | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IBindCtx.EnumObjectParam | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IBindCtx.GetBindOptions | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IBindCtx.GetRunningObjectTable | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IBindCtx.SetBindOptions | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IConnectionPoint.EnumConnections | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IConnectionPoint.GetConnectionInterface | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IConnectionPoint.GetConnectionPointContainer | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IConnectionPointContainer.EnumConnectionPoints | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IConnectionPointContainer.FindConnectionPoint | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IEnumConnectionPoints.Clone | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IEnumConnections.Clone | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IEnumMoniker.Clone | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IEnumString.Clone | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IMoniker.GetClassID | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IMoniker.GetSizeMax | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IMoniker.Hash | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IMoniker.Inverse | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IMoniker.IsSystemMoniker | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IPersistFile.GetClassID | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IPersistFile.GetCurFile | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IRunningObjectTable.EnumRunning | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IStream.Clone | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.IStream.Stat | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetContainingTypeLib | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetCustData | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetTypeAttr | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetTypeComp | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetTypeFlags | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetTypeKind | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetContainingTypeLib | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetTypeAttr | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetTypeComp | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetCustData | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetLibAttr | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetTypeComp | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetTypeInfoOfGuid | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeLib.GetLibAttr | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeLib.GetTypeComp | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeLib.GetTypeInfoOfGuid | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComWrappers.CallICustomQueryInterface | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComWrappers.GetIUnknownImpl | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComWrappers.GetIUnknownImplInternal | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComWrappers.TryGetComInstance | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComWrappers.TryGetComInstanceInternal | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ComWrappers.TryGetObject | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ICustomQueryInterface.GetInterface | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.Marshal.QueryInterface | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.Marshalling.ArrayMarshaller.AllocateContainerForUnmanagedElements | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller.AllocateContainerForUnmanagedElements | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.Marshalling.ReadOnlySpanMarshaller.UnmanagedToManagedOut.AllocateContainerForUnmanagedElements | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.Marshalling.SpanMarshaller.AllocateContainerForUnmanagedElements | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.MemoryMarshal.TryGetArray | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.MemoryMarshal.TryGetMemoryManager | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.MemoryMarshal.TryGetString | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.MemoryMarshal.TryRead | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.MemoryMarshal.TryWrite | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.MemoryMarshal.Write | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.NFloat.TryConvertFrom | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.NFloat.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.NFloat.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.NFloat.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.NFloat.TryConvertTo | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.NFloat.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.NFloat.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.NFloat.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.NFloat.TryParse | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.NativeLibrary.TryLoad | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.CreateReferenceTrackingHandle | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.UnhandledExceptionPropagationHandler.EndInvoke | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.SafeBuffer.AcquirePointer | parameter | 32 | -| Parameter 1 of System.Runtime.InteropServices.SafeHandle.DangerousAddRef | parameter | 32 | -| Parameter 1 of System.Runtime.Intrinsics.Vector64.StoreUnsafe | parameter | 32 | -| Parameter 1 of System.Runtime.Intrinsics.Vector128.StoreLowerUnsafe | parameter | 32 | -| Parameter 1 of System.Runtime.Intrinsics.Vector128.StoreUnsafe | parameter | 32 | -| Parameter 1 of System.Runtime.Intrinsics.Vector256.StoreUnsafe | parameter | 32 | -| Parameter 1 of System.Runtime.Intrinsics.Vector512.StoreUnsafe | parameter | 32 | -| Parameter 1 of System.Runtime.Loader.AssemblyLoadContext.StartAssemblyLoad | parameter | 32 | -| Parameter 1 of System.Runtime.MemoryFailPoint.CheckForAvailableMemory | parameter | 32 | -| Parameter 1 of System.Runtime.Serialization.SerializationInfo.ThrowIfDeserializationInProgress | parameter | 32 | -| Parameter 1 of System.RuntimeType.CheckValue | parameter | 32 | -| Parameter 1 of System.RuntimeType.FilterHelper | parameter | 32 | -| Parameter 1 of System.RuntimeType.GetGUID | parameter | 32 | -| Parameter 1 of System.RuntimeType.RuntimeTypeCache.ConstructName | parameter | 32 | -| Parameter 1 of System.RuntimeType.RuntimeTypeCache.GetMemberCache | parameter | 32 | -| Parameter 1 of System.RuntimeType.RuntimeTypeCache.GetMemberList | parameter | 32 | -| Parameter 1 of System.RuntimeType.RuntimeTypeCache.MemberInfoCache.AddSpecialInterface | parameter | 32 | -| Parameter 1 of System.RuntimeType.RuntimeTypeCache.MemberInfoCache.Insert | parameter | 32 | -| Parameter 1 of System.RuntimeType.RuntimeTypeCache.MemberInfoCache<!0>.AddSpecialInterface | parameter | 32 | -| Parameter 1 of System.RuntimeType.RuntimeTypeCache.MemberInfoCache<!0>.Insert | parameter | 32 | -| Parameter 1 of System.RuntimeType.SplitName | parameter | 32 | -| Parameter 1 of System.RuntimeType.TryChangeType | parameter | 32 | -| Parameter 1 of System.RuntimeType.TryChangeTypeSpecial | parameter | 32 | -| Parameter 1 of System.RuntimeType.TryGetByRefElementType | parameter | 32 | -| Parameter 1 of System.RuntimeTypeHandle.CopyRuntimeTypeHandles | parameter | 32 | -| Parameter 1 of System.RuntimeTypeHandle.GetActivationInfo | parameter | 32 | -| Parameter 1 of System.SByte.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.SByte.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.SByte.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.SByte.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.SByte.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.SByte.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.SByte.TryParse | parameter | 32 | -| Parameter 1 of System.Security.SecureString.AcquireSpan | parameter | 32 | -| Parameter 1 of System.Single.TryConvertFrom | parameter | 32 | -| Parameter 1 of System.Single.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.Single.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.Single.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.Single.TryConvertTo | parameter | 32 | -| Parameter 1 of System.Single.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.Single.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.Single.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.Single.TryParse | parameter | 32 | -| Parameter 1 of System.Span..ctor | parameter | 32 | -| Parameter 1 of System.Span<!0>..ctor | parameter | 32 | -| Parameter 1 of System.Span<!1>..ctor | parameter | 32 | -| Parameter 1 of System.Span<Boolean>..ctor | parameter | 32 | -| Parameter 1 of System.Span<Byte>..ctor | parameter | 32 | -| Parameter 1 of System.Span<Char>..ctor | parameter | 32 | -| Parameter 1 of System.Span<GuidResult>..ctor | parameter | 32 | -| Parameter 1 of System.Span<Int32>..ctor | parameter | 32 | -| Parameter 1 of System.Span<Object>..ctor | parameter | 32 | -| Parameter 1 of System.SpanHelpers.CommonPrefixLength | parameter | 32 | -| Parameter 1 of System.SpanHelpers.ComputeFirstIndex | parameter | 32 | -| Parameter 1 of System.SpanHelpers.Replace | parameter | 32 | -| Parameter 1 of System.SpanHelpers.ReplaceValueType | parameter | 32 | -| Parameter 1 of System.SpanHelpers.SequenceEqual | parameter | 32 | -| Parameter 1 of System.String.Create | parameter | 32 | -| Parameter 1 of System.String.MakeSeparatorListVectorized | parameter | 32 | -| Parameter 1 of System.String.TryGetTrailByte | parameter | 32 | -| Parameter 1 of System.StringComparer.IsWellKnownCultureAwareComparer | parameter | 32 | -| Parameter 1 of System.StringComparer.IsWellKnownCultureAwareComparerCore | parameter | 32 | -| Parameter 1 of System.StringComparer.IsWellKnownOrdinalComparer | parameter | 32 | -| Parameter 1 of System.StringComparer.IsWellKnownOrdinalComparerCore | parameter | 32 | -| Parameter 1 of System.StubHelpers.HandleMarshaler.ConvertSafeHandleToNative | parameter | 32 | -| Parameter 1 of System.StubHelpers.MngdFixedArrayMarshaler.ClearNativeContents | parameter | 32 | -| Parameter 1 of System.StubHelpers.MngdFixedArrayMarshaler.ConvertContentsToManaged | parameter | 32 | -| Parameter 1 of System.StubHelpers.MngdFixedArrayMarshaler.ConvertContentsToNative | parameter | 32 | -| Parameter 1 of System.StubHelpers.MngdFixedArrayMarshaler.ConvertSpaceToManaged | parameter | 32 | -| Parameter 1 of System.StubHelpers.MngdFixedArrayMarshaler.ConvertSpaceToNative | parameter | 32 | -| Parameter 1 of System.StubHelpers.MngdNativeArrayMarshaler.ClearNative | parameter | 32 | -| Parameter 1 of System.StubHelpers.MngdNativeArrayMarshaler.ClearNativeContents | parameter | 32 | -| Parameter 1 of System.StubHelpers.MngdNativeArrayMarshaler.ConvertContentsToManaged | parameter | 32 | -| Parameter 1 of System.StubHelpers.MngdNativeArrayMarshaler.ConvertContentsToNative | parameter | 32 | -| Parameter 1 of System.StubHelpers.MngdNativeArrayMarshaler.ConvertSpaceToManaged | parameter | 32 | -| Parameter 1 of System.StubHelpers.MngdNativeArrayMarshaler.ConvertSpaceToNative | parameter | 32 | -| Parameter 1 of System.StubHelpers.MngdRefCustomMarshaler.ClearManaged | parameter | 32 | -| Parameter 1 of System.StubHelpers.MngdRefCustomMarshaler.ClearNative | parameter | 32 | -| Parameter 1 of System.StubHelpers.MngdRefCustomMarshaler.ConvertContentsToManaged | parameter | 32 | -| Parameter 1 of System.StubHelpers.MngdRefCustomMarshaler.ConvertContentsToNative | parameter | 32 | -| Parameter 1 of System.StubHelpers.StubHelpers.SafeHandleAddRef | parameter | 32 | -| Parameter 1 of System.TermInfo.DatabaseFactory.TryOpen | parameter | 32 | -| Parameter 1 of System.TermInfo.ParameterizedStrings.EvaluateInternal | parameter | 32 | -| Parameter 1 of System.TermInfo.ParameterizedStrings.GetDynamicOrStaticVariables | parameter | 32 | -| Parameter 1 of System.Text.Ascii.ChangeCase | parameter | 32 | -| Parameter 1 of System.Text.Ascii.Equals | parameter | 32 | -| Parameter 1 of System.Text.Ascii.EqualsIgnoreCase | parameter | 32 | -| Parameter 1 of System.Text.Ascii.ILoader.EqualAndAscii256 | parameter | 32 | -| Parameter 1 of System.Text.Ascii.ILoader.EqualAndAscii512 | parameter | 32 | -| Parameter 1 of System.Text.Ascii.ILoader<!0,!0>.EqualAndAscii256 | parameter | 32 | -| Parameter 1 of System.Text.Ascii.ILoader<!0,!0>.EqualAndAscii512 | parameter | 32 | -| Parameter 1 of System.Text.Ascii.ILoader<!0,!1>.EqualAndAscii256 | parameter | 32 | -| Parameter 1 of System.Text.Ascii.ILoader<!0,!1>.EqualAndAscii512 | parameter | 32 | -| Parameter 1 of System.Text.Ascii.ILoader<Byte,UInt16>.EqualAndAscii256 | parameter | 32 | -| Parameter 1 of System.Text.Ascii.ILoader<Byte,UInt16>.EqualAndAscii512 | parameter | 32 | -| Parameter 1 of System.Text.Ascii.PlainLoader.EqualAndAscii256 | parameter | 32 | -| Parameter 1 of System.Text.Ascii.PlainLoader.EqualAndAscii512 | parameter | 32 | -| Parameter 1 of System.Text.Ascii.ToLowerInPlace | parameter | 32 | -| Parameter 1 of System.Text.Ascii.ToUpperInPlace | parameter | 32 | -| Parameter 1 of System.Text.Ascii.WideningLoader.EqualAndAscii256 | parameter | 32 | -| Parameter 1 of System.Text.Ascii.WideningLoader.EqualAndAscii512 | parameter | 32 | -| Parameter 1 of System.Text.CompositeFormat.<TryParseLiterals>g__TryMoveNext\|12_0 | parameter | 32 | -| Parameter 1 of System.Text.Rune.DecodeFromUtf8 | parameter | 32 | -| Parameter 1 of System.Text.Rune.DecodeFromUtf16 | parameter | 32 | -| Parameter 1 of System.Text.Rune.DecodeLastFromUtf8 | parameter | 32 | -| Parameter 1 of System.Text.Rune.DecodeLastFromUtf16 | parameter | 32 | -| Parameter 1 of System.Text.Rune.TryCreate | parameter | 32 | -| Parameter 1 of System.Text.StringBuilder.<AppendFormatHelper>g__MoveNext\|116_0 | parameter | 32 | -| Parameter 1 of System.Text.StringBuilder.Append | parameter | 32 | -| Parameter 1 of System.Text.StringBuilder.AppendJoinCore | parameter | 32 | -| Parameter 1 of System.Text.StringBuilder.AppendLine | parameter | 32 | -| Parameter 1 of System.Text.StringBuilder.AppendWithExpansion | parameter | 32 | -| Parameter 1 of System.Text.StringBuilder.ChunkEnumerator.ManyChunkInfo.MoveNext | parameter | 32 | -| Parameter 1 of System.Text.StringBuilder.ReplaceInPlaceAtChunk | parameter | 32 | -| Parameter 1 of System.Text.Unicode.Utf8.TryWrite | parameter | 32 | -| Parameter 1 of System.Text.Unicode.Utf8Utility.GetIndexOfFirstInvalidUtf8Sequence | parameter | 32 | -| Parameter 1 of System.Text.UnicodeUtility.GetUtf16SurrogatesFromSupplementaryPlaneScalar | parameter | 32 | -| Parameter 1 of System.Text.ValueStringBuilder.<AppendFormatHelper>g__MoveNext\|0_0 | parameter | 32 | -| Parameter 1 of System.Threading.EventWaitHandle.OpenExistingWorker | parameter | 32 | -| Parameter 1 of System.Threading.EventWaitHandle.TryOpenExisting | parameter | 32 | -| Parameter 1 of System.Threading.LazyInitializer.EnsureInitialized | parameter | 32 | -| Parameter 1 of System.Threading.LazyInitializer.EnsureInitializedCore | parameter | 32 | -| Parameter 1 of System.Threading.Monitor.Enter | parameter | 32 | -| Parameter 1 of System.Threading.Monitor.ReliableEnter | parameter | 32 | -| Parameter 1 of System.Threading.Monitor.TryEnter | parameter | 32 | -| Parameter 1 of System.Threading.Mutex.OpenExistingWorker | parameter | 32 | -| Parameter 1 of System.Threading.Mutex.TryOpenExisting | parameter | 32 | -| Parameter 1 of System.Threading.PeriodicTimer.TryGetMilliseconds | parameter | 32 | -| Parameter 1 of System.Threading.PortableThreadPool.GetAvailableThreads | parameter | 32 | -| Parameter 1 of System.Threading.PortableThreadPool.GetMaxThreads | parameter | 32 | -| Parameter 1 of System.Threading.PortableThreadPool.GetMinThreads | parameter | 32 | -| Parameter 1 of System.Threading.PortableThreadPool.WorkerThread.WorkerDoWork | parameter | 32 | -| Parameter 1 of System.Threading.ReaderWriterLockSlim.LazyCreateEvent | parameter | 32 | -| Parameter 1 of System.Threading.Semaphore.OpenExistingWorker | parameter | 32 | -| Parameter 1 of System.Threading.Semaphore.TryOpenExisting | parameter | 32 | -| Parameter 1 of System.Threading.SpinLock.Enter | parameter | 32 | -| Parameter 1 of System.Threading.SpinLock.TryEnter | parameter | 32 | -| Parameter 1 of System.Threading.Tasks.Task.AddToList | parameter | 32 | -| Parameter 1 of System.Threading.Tasks.Task.CreationOptionsFromContinuationOptions | parameter | 32 | -| Parameter 1 of System.Threading.Tasks.Task.ExecuteWithThreadLocal | parameter | 32 | -| Parameter 1 of System.Threading.Tasks.Task.WhenAllPromise.<Invoke>g__HandleTask\|3_0 | parameter | 32 | -| Parameter 1 of System.Threading.ThreadPool.GetAvailableThreads | parameter | 32 | -| Parameter 1 of System.Threading.ThreadPool.GetMaxThreads | parameter | 32 | -| Parameter 1 of System.Threading.ThreadPool.GetMinThreads | parameter | 32 | -| Parameter 1 of System.Threading.ThreadPool.GetNextConfigUInt32Value | parameter | 32 | -| Parameter 1 of System.Threading.ThreadPoolWorkQueue.WorkStealingQueue.TrySteal | parameter | 32 | -| Parameter 1 of System.TimeOnly.Deconstruct | parameter | 32 | -| Parameter 1 of System.TimeOnly.TryParse | parameter | 32 | -| Parameter 1 of System.TimeSpan.TryParse | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.AdjustmentRule.AdjustDaylightDeltaToExpectedRange | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.GetAlternativeId | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.GetDateTimeNowUtcOffsetFromUtc | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.GetDaylightDisplayName | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.GetStandardDisplayName | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.NormalizeAdjustmentRuleOffset | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.StringSerializer.SerializeSubstitute | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.StringSerializer.SerializeTransitionTime | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.TZif_ParseJulianDay | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.TZif_ParseMDateRule | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.TZif_ParsePosixDate | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.TZif_ParsePosixDateTime | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.TZif_ParsePosixFormat | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.TZif_ParsePosixName | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.TZif_ParsePosixOffset | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.TZif_ParsePosixString | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.TZif_ParsePosixTime | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.TZif_ParseRaw | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.TryConvertIanaIdToWindowsId | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.TryConvertWindowsIdToIanaId | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.TryFindSystemTimeZoneById | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.TryGetLocalTzFile | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.TryGetTimeZone | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.TryGetTimeZoneFromLocalMachine | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.TryGetTimeZoneFromLocalMachineCore | parameter | 32 | -| Parameter 1 of System.TimeZoneInfo.TryLoadTzFile | parameter | 32 | -| Parameter 1 of System.TupleExtensions.Deconstruct | parameter | 32 | -| Parameter 1 of System.Type.GetEnumData | parameter | 32 | -| Parameter 1 of System.UInt16.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.UInt16.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.UInt16.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.UInt16.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.UInt16.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.UInt16.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.UInt16.TryParse | parameter | 32 | -| Parameter 1 of System.UInt32.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.UInt32.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.UInt32.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.UInt32.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.UInt32.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.UInt32.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.UInt32.TryParse | parameter | 32 | -| Parameter 1 of System.UInt64.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.UInt64.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.UInt64.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.UInt64.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.UInt64.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.UInt64.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.UInt64.TryParse | parameter | 32 | -| Parameter 1 of System.UInt128.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.UInt128.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.UInt128.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.UInt128.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.UInt128.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.UInt128.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.UInt128.TryParse | parameter | 32 | -| Parameter 1 of System.UIntPtr.TryConvertFromChecked | parameter | 32 | -| Parameter 1 of System.UIntPtr.TryConvertFromSaturating | parameter | 32 | -| Parameter 1 of System.UIntPtr.TryConvertFromTruncating | parameter | 32 | -| Parameter 1 of System.UIntPtr.TryConvertToChecked | parameter | 32 | -| Parameter 1 of System.UIntPtr.TryConvertToSaturating | parameter | 32 | -| Parameter 1 of System.UIntPtr.TryConvertToTruncating | parameter | 32 | -| Parameter 1 of System.UIntPtr.TryParse | parameter | 32 | -| Parameter 1 of System.Version.TryParse | parameter | 32 | -| Parameter 1 of System.WeakReference.TryGetTarget | parameter | 32 | -| Parameter 1 of System.WeakReference<AssemblyLoadContext>.TryGetTarget | parameter | 32 | -| Parameter 1 of System.WeakReference<CounterGroup>.TryGetTarget | parameter | 32 | -| Parameter 1 of System.WeakReference<EventProvider>.TryGetTarget | parameter | 32 | -| Parameter 1 of System.WeakReference<EventSource>.TryGetTarget | parameter | 32 | -| Parameter 1 of System.__DTString.GetRegularToken | parameter | 32 | -| Parameter 1 of delegate* managed<IntPtr,Byte&,PortableTailCallFrame*,Void> | parameter | 32 | -| Parameter 2 of Interop.Globalization.GetJapaneseEraStartDate | parameter | 32 | -| Parameter 2 of Interop.Globalization.GetLocaleInfoGroupingSizes | parameter | 32 | -| Parameter 2 of Interop.Globalization.GetLocaleInfoInt | parameter | 32 | -| Parameter 2 of Interop.Kernel32.ReleaseSemaphore | parameter | 32 | -| Parameter 2 of Microsoft.Win32.SafeHandles.SafeFileHandle.FStatCheckIO | parameter | 32 | -| Parameter 2 of Microsoft.Win32.SafeHandles.SafeFileHandle.OpenReadOnly | parameter | 32 | -| Parameter 2 of System.Boolean.TryFormat | parameter | 32 | -| Parameter 2 of System.Boolean.TryParse | parameter | 32 | -| Parameter 2 of System.Buffers.IndexOfAnyAsciiSearcher.ComputeBitmap | parameter | 32 | -| Parameter 2 of System.Buffers.IndexOfAnyAsciiSearcher.ComputeBitmap256 | parameter | 32 | -| Parameter 2 of System.Buffers.IndexOfAnyAsciiSearcher.ComputeFirstIndexOverlapped | parameter | 32 | -| Parameter 2 of System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorized | parameter | 32 | -| Parameter 2 of System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorizedAnyByte | parameter | 32 | -| Parameter 2 of System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorized | parameter | 32 | -| Parameter 2 of System.Buffers.IndexOfAnyAsciiSearcher.LastIndexOfAnyVectorizedAnyByte | parameter | 32 | -| Parameter 2 of System.Buffers.IndexOfAnyAsciiSearcher.TryComputeBitmap | parameter | 32 | -| Parameter 2 of System.Buffers.ProbabilisticMap.ContainsMask16Chars | parameter | 32 | -| Parameter 2 of System.Buffers.ProbabilisticMap.ContainsMask32CharsAvx2 | parameter | 32 | -| Parameter 2 of System.Buffers.ProbabilisticMap.IndexOfAny | parameter | 32 | -| Parameter 2 of System.Buffers.ProbabilisticMap.IndexOfAnyExcept | parameter | 32 | -| Parameter 2 of System.Buffers.ProbabilisticMap.LastIndexOfAny | parameter | 32 | -| Parameter 2 of System.Buffers.ProbabilisticMap.LastIndexOfAnyExcept | parameter | 32 | -| Parameter 2 of System.Buffers.ProbabilisticMap.ProbabilisticIndexOfAny | parameter | 32 | -| Parameter 2 of System.Buffers.ProbabilisticMap.ProbabilisticLastIndexOfAny | parameter | 32 | -| Parameter 2 of System.Buffers.SearchValues.TryGetSingleRange | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Base64.<DecodeFromUtf8>g__InvalidDataFallback\|15_0 | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Base64.DecodeFromUtf8 | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Base64.DecodeWithWhiteSpaceBlockwise | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Base64.EncodeToUtf8 | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Base64.EncodeToUtf8InPlace | parameter | 32 | -| Parameter 2 of System.Buffers.Text.FormattingHelpers.TryFormat | parameter | 32 | -| Parameter 2 of System.Buffers.Text.ParserHelpers.TryParseThrowFormatException | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Formatter.TryFormat | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Formatter.TryFormatDateTimeL | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TimeSpanSplitter.ParseComponent | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParse | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseByteD | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseByteN | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseByteX | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseDateTimeG | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseDateTimeOffsetDefault | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseDateTimeOffsetO | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseDateTimeOffsetR | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseGuidCore | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseGuidN | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseInt16D | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseInt16N | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseInt32D | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseInt32N | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseInt64D | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseInt64N | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseNormalAsFloatingPoint | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseNumber | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseSByteD | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseSByteN | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseTimeSpanBigG | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseTimeSpanC | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseTimeSpanFraction | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseTimeSpanLittleG | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseUInt16D | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseUInt16N | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseUInt16X | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseUInt32D | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseUInt32N | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseUInt32X | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseUInt64D | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseUInt64N | parameter | 32 | -| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseUInt64X | parameter | 32 | -| Parameter 2 of System.Byte.TryFormat | parameter | 32 | -| Parameter 2 of System.Byte.TryParse | parameter | 32 | -| Parameter 2 of System.Byte.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.Byte.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.Byte.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.Byte.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Char.TryFormat | parameter | 32 | -| Parameter 2 of System.Char.TryParse | parameter | 32 | -| Parameter 2 of System.Char.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.Char.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.Char.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.Char.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Collections.Concurrent.ConcurrentQueue.SnapForObservation | parameter | 32 | -| Parameter 2 of System.Collections.Concurrent.ConcurrentQueue<!0>.SnapForObservation | parameter | 32 | -| Parameter 2 of System.Collections.Concurrent.SingleProducerSingleConsumerQueue.EnqueueSlow | parameter | 32 | -| Parameter 2 of System.Collections.Concurrent.SingleProducerSingleConsumerQueue<!0>.EnqueueSlow | parameter | 32 | -| Parameter 2 of System.Collections.DictionaryEntry.Deconstruct | parameter | 32 | -| Parameter 2 of System.Collections.Generic.CollectionExtensions.Remove | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary.CollectionsMarshalHelper.GetValueRefOrAddDefault | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary.Remove | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<!0,!1>.CollectionsMarshalHelper.GetValueRefOrAddDefault | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<Int32,Boolean>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<Int32,ChannelInfo>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<Int32,CultureInfo>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<Int32,HashSet<Token>>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<Int32,String>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<Int32,Task>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<MemberInfo,NullabilityState>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<Module,NotAnnotatedStatus>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<Object,Object>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<ReadOnlyMemory<Char>,ConsoleKeyInfo>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<String,Assembly>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<String,Boolean>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<String,CultureData>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<String,CultureInfo>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<String,Int32>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<String,IntPtr>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<String,IsolatedComponentLoadContext>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<String,List<Int32>>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<String,List<RuntimePropertyInfo>>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<String,LocalDataStoreSlot>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<String,Object>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<String,ResourceLocator>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<String,ResourceSet>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<String,String>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<String,TimeZoneInfo>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<String,Type>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<Type,AttributeUsageAttribute>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<Type,TraceLoggingTypeInfo>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<UInt64,Char>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.Dictionary<UInt64,String>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.HashSet.AddIfNotPresent | parameter | 32 | -| Parameter 2 of System.Collections.Generic.HashSet.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.HashSet<!0>.AddIfNotPresent | parameter | 32 | -| Parameter 2 of System.Collections.Generic.IDictionary.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.IDictionary<!0,!1>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.IDictionary<String,String>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.IReadOnlyDictionary.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.IReadOnlyDictionary<!0,!1>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Collections.Generic.KeyValuePair.Deconstruct | parameter | 32 | -| Parameter 2 of System.Collections.Generic.KeyValuePair<String,ResourceSet>.Deconstruct | parameter | 32 | -| Parameter 2 of System.Collections.Generic.ValueListBuilder.TryCopyTo | parameter | 32 | -| Parameter 2 of System.Collections.Generic.ValueListBuilder<!0>.TryCopyTo | parameter | 32 | -| Parameter 2 of System.Collections.ObjectModel.ReadOnlyDictionary.TryGetValue | parameter | 32 | -| Parameter 2 of System.ComponentModel.DefaultValueAttribute.ctor>g__TryConvertFromInvariantString\|2_0 | parameter | 32 | -| Parameter 2 of System.ConsolePal.<TryGetCursorPosition>g__BufferUntil\|82_1 | parameter | 32 | -| Parameter 2 of System.Convert.CopyToTempBufferWithoutWhiteSpace | parameter | 32 | -| Parameter 2 of System.Convert.TryDecodeFromUtf16 | parameter | 32 | -| Parameter 2 of System.Convert.TryFromBase64Chars | parameter | 32 | -| Parameter 2 of System.Convert.TryFromBase64String | parameter | 32 | -| Parameter 2 of System.Convert.TryToBase64Chars | parameter | 32 | -| Parameter 2 of System.CultureAwareComparer.IsWellKnownCultureAwareComparerCore | parameter | 32 | -| Parameter 2 of System.CurrentSystemTimeZone.GetUtcOffsetFromUniversalTime | parameter | 32 | -| Parameter 2 of System.DateOnly.Deconstruct | parameter | 32 | -| Parameter 2 of System.DateOnly.TryFormat | parameter | 32 | -| Parameter 2 of System.DateOnly.TryFormatCore | parameter | 32 | -| Parameter 2 of System.DateOnly.TryParse | parameter | 32 | -| Parameter 2 of System.DateOnly.TryParseExact | parameter | 32 | -| Parameter 2 of System.DateTime.Deconstruct | parameter | 32 | -| Parameter 2 of System.DateTime.GetDate | parameter | 32 | -| Parameter 2 of System.DateTime.GetTime | parameter | 32 | -| Parameter 2 of System.DateTime.GetTimePrecise | parameter | 32 | -| Parameter 2 of System.DateTime.TryAddTicks | parameter | 32 | -| Parameter 2 of System.DateTime.TryFormat | parameter | 32 | -| Parameter 2 of System.DateTime.TryParse | parameter | 32 | -| Parameter 2 of System.DateTimeFormat.FormatCustomizedRoundripTimeZone | parameter | 32 | -| Parameter 2 of System.DateTimeFormat.ParseQuoteString | parameter | 32 | -| Parameter 2 of System.DateTimeFormat.TryFormat | parameter | 32 | -| Parameter 2 of System.DateTimeFormat.TryFormatS | parameter | 32 | -| Parameter 2 of System.DateTimeOffset.Deconstruct | parameter | 32 | -| Parameter 2 of System.DateTimeOffset.TryFormat | parameter | 32 | -| Parameter 2 of System.DateTimeOffset.TryParse | parameter | 32 | -| Parameter 2 of System.DateTimeParse.ExpandPredefinedFormat | parameter | 32 | -| Parameter 2 of System.DateTimeParse.GetDayOfMN | parameter | 32 | -| Parameter 2 of System.DateTimeParse.GetDayOfNM | parameter | 32 | -| Parameter 2 of System.DateTimeParse.GetDayOfNN | parameter | 32 | -| Parameter 2 of System.DateTimeParse.Lex | parameter | 32 | -| Parameter 2 of System.DateTimeParse.MatchAbbreviatedDayName | parameter | 32 | -| Parameter 2 of System.DateTimeParse.MatchAbbreviatedMonthName | parameter | 32 | -| Parameter 2 of System.DateTimeParse.MatchAbbreviatedTimeMark | parameter | 32 | -| Parameter 2 of System.DateTimeParse.MatchDayName | parameter | 32 | -| Parameter 2 of System.DateTimeParse.MatchEraName | parameter | 32 | -| Parameter 2 of System.DateTimeParse.MatchMonthName | parameter | 32 | -| Parameter 2 of System.DateTimeParse.MatchTimeMark | parameter | 32 | -| Parameter 2 of System.DateTimeParse.ParseByFormat | parameter | 32 | -| Parameter 2 of System.DateTimeParse.ParseDigits | parameter | 32 | -| Parameter 2 of System.DateTimeParse.ParseFractionExact | parameter | 32 | -| Parameter 2 of System.DateTimeParse.ParseTimeZoneOffset | parameter | 32 | -| Parameter 2 of System.DateTimeParse.ProcessDateTimeSuffix | parameter | 32 | -| Parameter 2 of System.DateTimeParse.ProcessHebrewTerminalState | parameter | 32 | -| Parameter 2 of System.DateTimeParse.ProcessTerminalState | parameter | 32 | -| Parameter 2 of System.DateTimeParse.TryAdjustYear | parameter | 32 | -| Parameter 2 of System.DateTimeParse.TryParseQuoteString | parameter | 32 | -| Parameter 2 of System.Decimal.DecCalc.DivByConst | parameter | 32 | -| Parameter 2 of System.Decimal.DecCalc.UInt64x64To128 | parameter | 32 | -| Parameter 2 of System.Decimal.DecCalc.Unscale | parameter | 32 | -| Parameter 2 of System.Decimal.TryFormat | parameter | 32 | -| Parameter 2 of System.Decimal.TryGetBits | parameter | 32 | -| Parameter 2 of System.Decimal.TryParse | parameter | 32 | -| Parameter 2 of System.Decimal.TryWriteExponentBigEndian | parameter | 32 | -| Parameter 2 of System.Decimal.TryWriteExponentLittleEndian | parameter | 32 | -| Parameter 2 of System.Decimal.TryWriteSignificandBigEndian | parameter | 32 | -| Parameter 2 of System.Decimal.TryWriteSignificandLittleEndian | parameter | 32 | -| Parameter 2 of System.Diagnostics.Debug.Assert | parameter | 32 | -| Parameter 2 of System.Diagnostics.Tracing.ActivityTracker.ActivityInfo.CreateActivityPathGuid | parameter | 32 | -| Parameter 2 of System.Diagnostics.Tracing.EventParameterInfo.GenerateMetadata | parameter | 32 | -| Parameter 2 of System.Diagnostics.Tracing.EventParameterInfo.GenerateMetadataForProperty | parameter | 32 | -| Parameter 2 of System.Diagnostics.Tracing.EventParameterInfo.GenerateMetadataForTypeV2 | parameter | 32 | -| Parameter 2 of System.Diagnostics.Tracing.EventParameterInfo.GenerateMetadataV2 | parameter | 32 | -| Parameter 2 of System.Diagnostics.Tracing.EventParameterInfo.GetMetadataLengthForNamedTypeV2 | parameter | 32 | -| Parameter 2 of System.Diagnostics.Tracing.EventPayload.TryGetValue | parameter | 32 | -| Parameter 2 of System.Diagnostics.Tracing.EventPipeMetadataGenerator.WriteToBuffer | parameter | 32 | -| Parameter 2 of System.Diagnostics.Tracing.EventProvider.EncodeObject | parameter | 32 | -| Parameter 2 of System.Diagnostics.Tracing.EventProviderImpl.MarshalFilterData | parameter | 32 | -| Parameter 2 of System.Diagnostics.Tracing.EventSource.Write | parameter | 32 | -| Parameter 2 of System.Diagnostics.Tracing.EventSource.WriteEventRaw | parameter | 32 | -| Parameter 2 of System.Diagnostics.Tracing.EventSource.WriteImpl | parameter | 32 | -| Parameter 2 of System.Diagnostics.Tracing.EventSource.WriteMultiMerge | parameter | 32 | -| Parameter 2 of System.Diagnostics.Tracing.EventSource.WriteMultiMergeInner | parameter | 32 | -| Parameter 2 of System.Diagnostics.Tracing.EventSource.WriteToAllListeners | parameter | 32 | -| Parameter 2 of System.Double.TryFormat | parameter | 32 | -| Parameter 2 of System.Double.TryParse | parameter | 32 | -| Parameter 2 of System.Double.TryWriteExponentBigEndian | parameter | 32 | -| Parameter 2 of System.Double.TryWriteExponentLittleEndian | parameter | 32 | -| Parameter 2 of System.Double.TryWriteSignificandBigEndian | parameter | 32 | -| Parameter 2 of System.Double.TryWriteSignificandLittleEndian | parameter | 32 | -| Parameter 2 of System.Enum.<ToString>g__HandleRareTypes\|56_0 | parameter | 32 | -| Parameter 2 of System.Enum.ToString | parameter | 32 | -| Parameter 2 of System.Enum.ToStringInlined | parameter | 32 | -| Parameter 2 of System.Enum.TryFormat | parameter | 32 | -| Parameter 2 of System.Enum.TryFormatNumberAsHex | parameter | 32 | -| Parameter 2 of System.Enum.TryFormatUnconstrained | parameter | 32 | -| Parameter 2 of System.Enum.TryParse | parameter | 32 | -| Parameter 2 of System.Exception.GetStackTracesDeepCopy | parameter | 32 | -| Parameter 2 of System.Globalization.CalendarData.CountOccurrences | parameter | 32 | -| Parameter 2 of System.Globalization.CalendarData.NormalizeDayOfWeek | parameter | 32 | -| Parameter 2 of System.Globalization.CharUnicodeInfo.GetUnicodeCategoryInternal | parameter | 32 | -| Parameter 2 of System.Globalization.CultureData.GetIndexOfNextTokenAfterSeconds | parameter | 32 | -| Parameter 2 of System.Globalization.CultureData.IsValidCultureName | parameter | 32 | -| Parameter 2 of System.Globalization.CultureData.NormalizeCultureName | parameter | 32 | -| Parameter 2 of System.Globalization.DateTimeFormatInfo.Tokenize | parameter | 32 | -| Parameter 2 of System.Globalization.DateTimeFormatInfo.TryParseHebrewNumber | parameter | 32 | -| Parameter 2 of System.Globalization.DateTimeFormatInfo.YearMonthAdjustment | parameter | 32 | -| Parameter 2 of System.Globalization.EastAsianLunisolarCalendar.TimeToLunar | parameter | 32 | -| Parameter 2 of System.Globalization.GlobalizationMode.TryGetStringValue | parameter | 32 | -| Parameter 2 of System.Globalization.InvariantModeCasing.CompareStringIgnoreCase | parameter | 32 | -| Parameter 2 of System.Globalization.Ordinal.CompareStringIgnoreCase | parameter | 32 | -| Parameter 2 of System.Globalization.Ordinal.CompareStringIgnoreCaseNonAscii | parameter | 32 | -| Parameter 2 of System.Globalization.Ordinal.EqualsIgnoreCaseUtf8 | parameter | 32 | -| Parameter 2 of System.Globalization.Ordinal.EqualsIgnoreCaseUtf8_Scalar | parameter | 32 | -| Parameter 2 of System.Globalization.Ordinal.EqualsIgnoreCaseUtf8_Vector128 | parameter | 32 | -| Parameter 2 of System.Globalization.Ordinal.EqualsStringIgnoreCaseNonAsciiUtf8 | parameter | 32 | -| Parameter 2 of System.Globalization.Ordinal.EqualsStringIgnoreCaseUtf8 | parameter | 32 | -| Parameter 2 of System.Globalization.Ordinal.StartsWithIgnoreCaseUtf8 | parameter | 32 | -| Parameter 2 of System.Globalization.Ordinal.StartsWithIgnoreCaseUtf8_Scalar | parameter | 32 | -| Parameter 2 of System.Globalization.Ordinal.StartsWithIgnoreCaseUtf8_Vector128 | parameter | 32 | -| Parameter 2 of System.Globalization.Ordinal.StartsWithStringIgnoreCaseNonAsciiUtf8 | parameter | 32 | -| Parameter 2 of System.Globalization.Ordinal.StartsWithStringIgnoreCaseUtf8 | parameter | 32 | -| Parameter 2 of System.Globalization.OrdinalCasing.CompareStringIgnoreCase | parameter | 32 | -| Parameter 2 of System.Globalization.PersianCalendar.GetDate | parameter | 32 | -| Parameter 2 of System.Globalization.SurrogateCasing.ToLower | parameter | 32 | -| Parameter 2 of System.Globalization.SurrogateCasing.ToUpper | parameter | 32 | -| Parameter 2 of System.Globalization.TextInfo.AddTitlecaseLetter | parameter | 32 | -| Parameter 2 of System.Globalization.TimeSpanFormat.TryFormat | parameter | 32 | -| Parameter 2 of System.Globalization.TimeSpanParse.ParseExactDigits | parameter | 32 | -| Parameter 2 of System.Globalization.TimeSpanParse.ProcessTerminalState | parameter | 32 | -| Parameter 2 of System.Globalization.TimeSpanParse.ProcessTerminal_D | parameter | 32 | -| Parameter 2 of System.Globalization.TimeSpanParse.ProcessTerminal_DHMSF | parameter | 32 | -| Parameter 2 of System.Globalization.TimeSpanParse.ProcessTerminal_HM | parameter | 32 | -| Parameter 2 of System.Globalization.TimeSpanParse.ProcessTerminal_HMS_F_D | parameter | 32 | -| Parameter 2 of System.Globalization.TimeSpanParse.ProcessTerminal_HM_S_D | parameter | 32 | -| Parameter 2 of System.Globalization.TimeSpanParse.StringParser.ParseInt | parameter | 32 | -| Parameter 2 of System.Globalization.TimeSpanParse.StringParser.ParseTime | parameter | 32 | -| Parameter 2 of System.Globalization.TimeSpanParse.StringParser.TryParse | parameter | 32 | -| Parameter 2 of System.Globalization.TimeSpanParse.TimeSpanRawInfo.AddNum | parameter | 32 | -| Parameter 2 of System.Globalization.TimeSpanParse.TimeSpanRawInfo.AddSep | parameter | 32 | -| Parameter 2 of System.Globalization.TimeSpanParse.TimeSpanRawInfo.ProcessToken | parameter | 32 | -| Parameter 2 of System.Globalization.TimeSpanParse.TryParse | parameter | 32 | -| Parameter 2 of System.Globalization.UmAlQuraCalendar.ConvertGregorianToHijri | parameter | 32 | -| Parameter 2 of System.Guid.DecodeByte | parameter | 32 | -| Parameter 2 of System.Guid.TryFormat | parameter | 32 | -| Parameter 2 of System.Guid.TryFormatCore | parameter | 32 | -| Parameter 2 of System.Guid.TryFormatX | parameter | 32 | -| Parameter 2 of System.Guid.TryParse | parameter | 32 | -| Parameter 2 of System.Guid.TryParseExact | parameter | 32 | -| Parameter 2 of System.Guid.TryParseHex | parameter | 32 | -| Parameter 2 of System.Half.TryFormat | parameter | 32 | -| Parameter 2 of System.Half.TryParse | parameter | 32 | -| Parameter 2 of System.Half.TryWriteExponentBigEndian | parameter | 32 | -| Parameter 2 of System.Half.TryWriteExponentLittleEndian | parameter | 32 | -| Parameter 2 of System.Half.TryWriteSignificandBigEndian | parameter | 32 | -| Parameter 2 of System.Half.TryWriteSignificandLittleEndian | parameter | 32 | -| Parameter 2 of System.HashCode.Initialize | parameter | 32 | -| Parameter 2 of System.HexConverter.TryDecodeFromUtf16 | parameter | 32 | -| Parameter 2 of System.IO.BufferedStream.WriteToBuffer | parameter | 32 | -| Parameter 2 of System.IO.KeyParser.<ParseFromSingleChar>g__ControlAndDigitPressed\|8_2 | parameter | 32 | -| Parameter 2 of System.IO.KeyParser.<ParseFromSingleChar>g__ControlAndLetterPressed\|8_1 | parameter | 32 | -| Parameter 2 of System.IO.KeyParser.TryParseTerminalInputSequence | parameter | 32 | -| Parameter 2 of System.IO.PathInternal.RemoveRelativeSegments | parameter | 32 | -| Parameter 2 of System.IO.PersistedFiles.TryGetHomeDirectoryFromPasswd | parameter | 32 | -| Parameter 2 of System.IO.StreamReader.ReadBuffer | parameter | 32 | -| Parameter 2 of System.IO.UnmanagedMemoryAccessor.Read | parameter | 32 | -| Parameter 2 of System.IO.UnmanagedMemoryAccessor.Write | parameter | 32 | -| Parameter 2 of System.IParsable.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<Boolean>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<Byte>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<Char>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<DateOnly>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<DateTime>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<DateTimeOffset>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<Decimal>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<Double>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<Guid>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<Half>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<Int16>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<Int32>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<Int64>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<Int128>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<IntPtr>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<NFloat>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<SByte>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<Single>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<String>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<TimeOnly>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<TimeSpan>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<UInt16>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<UInt32>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<UInt64>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<UInt128>.TryParse | parameter | 32 | -| Parameter 2 of System.IParsable<UIntPtr>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanFormattable.TryFormat | parameter | 32 | -| Parameter 2 of System.ISpanParsable.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<!0>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<Boolean>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<Byte>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<Char>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<DateOnly>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<DateTime>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<DateTimeOffset>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<Decimal>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<Double>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<Guid>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<Half>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<Int16>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<Int32>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<Int64>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<Int128>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<IntPtr>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<NFloat>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<SByte>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<Single>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<String>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<TimeOnly>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<TimeSpan>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<UInt16>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<UInt32>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<UInt64>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<UInt128>.TryParse | parameter | 32 | -| Parameter 2 of System.ISpanParsable<UIntPtr>.TryParse | parameter | 32 | -| Parameter 2 of System.IUtf8SpanFormattable.TryFormat | parameter | 32 | -| Parameter 2 of System.IUtf8SpanParsable.TryParse | parameter | 32 | -| Parameter 2 of System.IUtf8SpanParsable<!0>.TryParse | parameter | 32 | -| Parameter 2 of System.IUtf8SpanParsable<Byte>.TryParse | parameter | 32 | -| Parameter 2 of System.IUtf8SpanParsable<Decimal>.TryParse | parameter | 32 | -| Parameter 2 of System.IUtf8SpanParsable<Double>.TryParse | parameter | 32 | -| Parameter 2 of System.IUtf8SpanParsable<Half>.TryParse | parameter | 32 | -| Parameter 2 of System.IUtf8SpanParsable<Int16>.TryParse | parameter | 32 | -| Parameter 2 of System.IUtf8SpanParsable<Int32>.TryParse | parameter | 32 | -| Parameter 2 of System.IUtf8SpanParsable<Int64>.TryParse | parameter | 32 | -| Parameter 2 of System.IUtf8SpanParsable<Int128>.TryParse | parameter | 32 | -| Parameter 2 of System.IUtf8SpanParsable<IntPtr>.TryParse | parameter | 32 | -| Parameter 2 of System.IUtf8SpanParsable<NFloat>.TryParse | parameter | 32 | -| Parameter 2 of System.IUtf8SpanParsable<SByte>.TryParse | parameter | 32 | -| Parameter 2 of System.IUtf8SpanParsable<Single>.TryParse | parameter | 32 | -| Parameter 2 of System.IUtf8SpanParsable<UInt16>.TryParse | parameter | 32 | -| Parameter 2 of System.IUtf8SpanParsable<UInt32>.TryParse | parameter | 32 | -| Parameter 2 of System.IUtf8SpanParsable<UInt64>.TryParse | parameter | 32 | -| Parameter 2 of System.IUtf8SpanParsable<UInt128>.TryParse | parameter | 32 | -| Parameter 2 of System.IUtf8SpanParsable<UIntPtr>.TryParse | parameter | 32 | -| Parameter 2 of System.Int16.TryFormat | parameter | 32 | -| Parameter 2 of System.Int16.TryParse | parameter | 32 | -| Parameter 2 of System.Int16.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.Int16.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.Int16.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.Int16.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Int32.TryFormat | parameter | 32 | -| Parameter 2 of System.Int32.TryParse | parameter | 32 | -| Parameter 2 of System.Int32.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.Int32.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.Int32.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.Int32.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Int64.TryFormat | parameter | 32 | -| Parameter 2 of System.Int64.TryParse | parameter | 32 | -| Parameter 2 of System.Int64.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.Int64.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.Int64.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.Int64.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Int128.BigMul | parameter | 32 | -| Parameter 2 of System.Int128.TryFormat | parameter | 32 | -| Parameter 2 of System.Int128.TryParse | parameter | 32 | -| Parameter 2 of System.Int128.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.Int128.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.Int128.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.Int128.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.IntPtr.TryFormat | parameter | 32 | -| Parameter 2 of System.IntPtr.TryParse | parameter | 32 | -| Parameter 2 of System.IntPtr.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.IntPtr.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.IntPtr.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.IntPtr.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Math.<BigMul>g__SoftwareFallback\|49_0 | parameter | 32 | -| Parameter 2 of System.Math.BigMul | parameter | 32 | -| Parameter 2 of System.Math.DivRem | parameter | 32 | -| Parameter 2 of System.MemoryExtensions.Overlaps | parameter | 32 | -| Parameter 2 of System.MemoryExtensions.TryWrite | parameter | 32 | -| Parameter 2 of System.ModuleHandle.GetPEKind | parameter | 32 | -| Parameter 2 of System.Net.WebUtility.ConvertSmpToUtf16 | parameter | 32 | -| Parameter 2 of System.Number.BigInteger.Add | parameter | 32 | -| Parameter 2 of System.Number.BigInteger.AddDivisor | parameter | 32 | -| Parameter 2 of System.Number.BigInteger.DivRem | parameter | 32 | -| Parameter 2 of System.Number.BigInteger.Multiply | parameter | 32 | -| Parameter 2 of System.Number.BigInteger.SubtractDivisor | parameter | 32 | -| Parameter 2 of System.Number.DiyFp.CreateAndGetBoundaries | parameter | 32 | -| Parameter 2 of System.Number.DiyFp.GetBoundaries | parameter | 32 | -| Parameter 2 of System.Number.Grisu3.BiggestPowerTen | parameter | 32 | -| Parameter 2 of System.Number.Grisu3.GetCachedPowerForBinaryExponentRange | parameter | 32 | -| Parameter 2 of System.Number.Grisu3.TryDigitGenShortest | parameter | 32 | -| Parameter 2 of System.Number.Grisu3.TryRunDouble | parameter | 32 | -| Parameter 2 of System.Number.Grisu3.TryRunHalf | parameter | 32 | -| Parameter 2 of System.Number.Grisu3.TryRunShortest | parameter | 32 | -| Parameter 2 of System.Number.Grisu3.TryRunSingle | parameter | 32 | -| Parameter 2 of System.Number.TryCopyTo | parameter | 32 | -| Parameter 2 of System.Number.TryParseBinaryIntegerHexNumberStyle | parameter | 32 | -| Parameter 2 of System.Number.TryParseBinaryIntegerHexOrBinaryNumberStyle | parameter | 32 | -| Parameter 2 of System.Number.TryStringToNumber | parameter | 32 | -| Parameter 2 of System.Number.TryUInt32ToDecStr | parameter | 32 | -| Parameter 2 of System.Number.TryUInt64ToDecStr | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<!0>.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<!0>.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<!0>.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<!0>.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Byte>.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Byte>.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Byte>.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Byte>.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Char>.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Char>.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Char>.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Char>.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Int16>.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Int16>.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Int16>.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Int16>.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Int32>.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Int32>.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Int32>.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Int32>.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Int64>.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Int64>.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Int64>.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Int64>.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Int128>.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Int128>.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Int128>.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<Int128>.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<IntPtr>.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<IntPtr>.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<IntPtr>.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<IntPtr>.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<SByte>.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<SByte>.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<SByte>.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<SByte>.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<UInt16>.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<UInt16>.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<UInt16>.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<UInt16>.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<UInt32>.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<UInt32>.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<UInt32>.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<UInt32>.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<UInt64>.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<UInt64>.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<UInt64>.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<UInt64>.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<UInt128>.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<UInt128>.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<UInt128>.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<UInt128>.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<UIntPtr>.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<UIntPtr>.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<UIntPtr>.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IBinaryInteger<UIntPtr>.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint.TryWriteExponentBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint.TryWriteExponentLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint.TryWriteSignificandBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint.TryWriteSignificandLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<!0>.TryWriteExponentBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<!0>.TryWriteExponentLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<!0>.TryWriteSignificandBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<!0>.TryWriteSignificandLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<Decimal>.TryWriteExponentBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<Decimal>.TryWriteExponentLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<Decimal>.TryWriteSignificandBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<Decimal>.TryWriteSignificandLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<Double>.TryWriteExponentBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<Double>.TryWriteExponentLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<Double>.TryWriteSignificandBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<Double>.TryWriteSignificandLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<Half>.TryWriteExponentBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<Half>.TryWriteExponentLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<Half>.TryWriteSignificandBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<Half>.TryWriteSignificandLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<NFloat>.TryWriteExponentBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<NFloat>.TryWriteExponentLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<NFloat>.TryWriteSignificandBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<NFloat>.TryWriteSignificandLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<Single>.TryWriteExponentBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<Single>.TryWriteExponentLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<Single>.TryWriteSignificandBigEndian | parameter | 32 | -| Parameter 2 of System.Numerics.IFloatingPoint<Single>.TryWriteSignificandLittleEndian | parameter | 32 | -| Parameter 2 of System.Numerics.INumberBase.TryFormat | parameter | 32 | -| Parameter 2 of System.Numerics.INumberBase.TryParse | parameter | 32 | -| Parameter 2 of System.Numerics.Matrix4x4.Decompose | parameter | 32 | -| Parameter 2 of System.Numerics.Matrix4x4.Impl.CreateBillboard | parameter | 32 | -| Parameter 2 of System.Numerics.Matrix4x4.Impl.CreateConstrainedBillboard | parameter | 32 | -| Parameter 2 of System.Numerics.Matrix4x4.Impl.CreateLookTo | parameter | 32 | -| Parameter 2 of System.Numerics.Matrix4x4.Impl.CreateLookToLeftHanded | parameter | 32 | -| Parameter 2 of System.Numerics.Matrix4x4.Impl.CreateWorld | parameter | 32 | -| Parameter 2 of System.Numerics.Matrix4x4.Impl.Decompose | parameter | 32 | -| Parameter 2 of System.Numerics.Vector.Widen | parameter | 32 | -| Parameter 2 of System.PackedSpanHelpers.ComputeFirstIndexOverlapped | parameter | 32 | -| Parameter 2 of System.ParseNumbers.GrabInts | parameter | 32 | -| Parameter 2 of System.ParseNumbers.GrabLongs | parameter | 32 | -| Parameter 2 of System.ParseNumbers.IsDigit | parameter | 32 | -| Parameter 2 of System.ReadOnlyMemory.GetObjectStartLength | parameter | 32 | -| Parameter 2 of System.ReadOnlyMemory<!0>.GetObjectStartLength | parameter | 32 | -| Parameter 2 of System.ReadOnlyMemory<Char>.GetObjectStartLength | parameter | 32 | -| Parameter 2 of System.Reflection.AssemblyName.EscapeAsciiChar | parameter | 32 | -| Parameter 2 of System.Reflection.CustomAttribute.AttributeUsageCheck | parameter | 32 | -| Parameter 2 of System.Reflection.CustomAttribute.ParseAttributeUsageAttribute | parameter | 32 | -| Parameter 2 of System.Reflection.CustomAttribute._ParseAttributeUsageAttribute | parameter | 32 | -| Parameter 2 of System.Reflection.CustomAttributeEncodedArgument.ParseAttributeArguments | parameter | 32 | -| Parameter 2 of System.Reflection.Emit.DynamicResolver.GetCodeInfo | parameter | 32 | -| Parameter 2 of System.Reflection.Emit.DynamicResolver.ResolveToken | parameter | 32 | -| Parameter 2 of System.Reflection.Emit.RuntimeModuleBuilder.GetPEKind | parameter | 32 | -| Parameter 2 of System.Reflection.Metadata.AssemblyExtensions.InternalTryGetRawMetadata | parameter | 32 | -| Parameter 2 of System.Reflection.Metadata.AssemblyExtensions.TryGetRawMetadata | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport.EnumCustomAttributes | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport.EnumEvents | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport.EnumFields | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport.EnumNestedTypes | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport.EnumParams | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport.EnumProperties | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport.GetClassLayout | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport.GetCustomAttributeProps | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport.GetDefaultValue | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport.GetEventProps | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport.GetFieldDefProps | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport.GetGenericParamProps | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport.GetMarshalAs | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport.GetPInvokeMap | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport.GetParamDefProps | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport.GetPropertyProps | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport._GetClassLayout | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport._GetCustomAttributeProps | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport._GetDefaultValue | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport._GetFieldDefProps | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport._GetFieldMarshal | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport._GetGenericParamProps | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport._GetMarshalAs | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport._GetMemberRefProps | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport._GetPInvokeMap | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport._GetParamDefProps | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport._GetParentToken | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport._GetSigOfFieldDef | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport._GetSigOfMethodDef | parameter | 32 | -| Parameter 2 of System.Reflection.MetadataImport._GetSignatureFromToken | parameter | 32 | -| Parameter 2 of System.Reflection.MethodInvokerCommon.Initialize | parameter | 32 | -| Parameter 2 of System.Reflection.Module.GetPEKind | parameter | 32 | -| Parameter 2 of System.Reflection.NullabilityInfoContext.NullableAttributeStateParser.ParseNullableState | parameter | 32 | -| Parameter 2 of System.Reflection.NullabilityInfoContext.TryPopulateNullabilityInfo | parameter | 32 | -| Parameter 2 of System.Reflection.PseudoCustomAttribute.GetCustomAttributes | parameter | 32 | -| Parameter 2 of System.Reflection.RuntimeAssembly.GetResource | parameter | 32 | -| Parameter 2 of System.Reflection.RuntimeAssembly.GetVersion | parameter | 32 | -| Parameter 2 of System.Reflection.RuntimeModule.GetPEKind | parameter | 32 | -| Parameter 2 of System.Reflection.RuntimeParameterInfo.TryGetDefaultValueInternal | parameter | 32 | -| Parameter 2 of System.Resolver.GetCodeInfo | parameter | 32 | -| Parameter 2 of System.Resolver.ResolveToken | parameter | 32 | -| Parameter 2 of System.Resources.ResourceManager.AddResourceSet | parameter | 32 | -| Parameter 2 of System.Resources.ResourceReader.AllocateStringForNameIndex | parameter | 32 | -| Parameter 2 of System.Resources.ResourceReader.GetResourceData | parameter | 32 | -| Parameter 2 of System.Resources.ResourceReader.LoadObject | parameter | 32 | -| Parameter 2 of System.Resources.ResourceReader.LoadObjectV2 | parameter | 32 | -| Parameter 2 of System.Resources.ResourceReader._LoadObjectV2 | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.AsyncIteratorMethodBuilder.AwaitOnCompleted | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.AsyncIteratorMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitOnCompleted | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<!0>.AwaitOnCompleted | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<Boolean>.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<Byte[]>.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<String>.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<String[]>.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<VoidTaskResult>.AwaitOnCompleted | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder<VoidTaskResult>.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder.AwaitOnCompleted | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder<Int32>.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.AsyncVoidMethodBuilder.AwaitOnCompleted | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.AsyncVoidMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.ConditionalWeakTable.Container.FindEntry | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.ConditionalWeakTable.Container.TryGetEntry | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.ConditionalWeakTable.Container.TryGetValueWorker | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.ConditionalWeakTable.TryGetValue | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.ConditionalWeakTable<!0,!1>.Container.FindEntry | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.ConditionalWeakTable<!0,!1>.Container.TryGetEntry | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.ConditionalWeakTable<!0,!1>.Container.TryGetValueWorker | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.ConditionalWeakTable<!0,!1>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.ConditionalWeakTable<Assembly,DllImportResolver>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.ConditionalWeakTable<Object,SerializationInfo>.TryGetValue | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.ICastable.IsInstanceOfInterface | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.ICastableHelpers.IsInstanceOfInterface | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.AwaitOnCompleted | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder<!0>.AwaitOnCompleted | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder<Int32>.AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder<VoidTaskResult>.AwaitOnCompleted | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.RuntimeHelpers.DispatchTailCalls | parameter | 32 | -| Parameter 2 of System.Runtime.CompilerServices.RuntimeHelpers.GetSpanDataFrom | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.CollectionsMarshal.GetValueRefOrAddDefault | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.IBindCtx.GetObjectParam | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.IConnectionPoint.Advise | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.IConnectionPointContainer.FindConnectionPoint | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.IMoniker.CommonPrefixWith | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.IMoniker.Enum | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.IMoniker.RelativePathTo | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.IRunningObjectTable.GetObject | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.IRunningObjectTable.GetTimeOfLastChange | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.IRunningObjectTable.NoteChangeTime | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.CreateInstance | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetContainingTypeLib | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetCustData | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetDocumentation | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetDocumentation2 | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetFuncCustData | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetFuncDesc | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetImplTypeCustData | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetImplTypeFlags | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetMops | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetRefTypeInfo | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetRefTypeOfImplType | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetVarCustData | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetVarDesc | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetVarIndexOfMemId | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo.CreateInstance | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetContainingTypeLib | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetDocumentation | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetFuncDesc | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetImplTypeFlags | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetMops | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetRefTypeInfo | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetRefTypeOfImplType | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetVarDesc | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetCustData | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetDocumentation | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetDocumentation2 | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetLibStatistics | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetTypeInfo | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetTypeInfoOfGuid | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetTypeInfoType | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeLib.GetDocumentation | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeLib.GetTypeInfo | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeLib.GetTypeInfoOfGuid | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeLib.GetTypeInfoType | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComWrappers.CallICustomQueryInterface | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComWrappers.GetIUnknownImpl | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ComWrappers.GetIUnknownImplInternal | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.ICustomQueryInterface.GetInterface | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.Marshal.QueryInterface | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.MemoryMarshal.TryGetMemoryManager | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.MemoryMarshal.TryGetString | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.NFloat.TryFormat | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.NFloat.TryParse | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.NFloat.TryWriteExponentBigEndian | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.NFloat.TryWriteExponentLittleEndian | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.NFloat.TryWriteSignificandBigEndian | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.NFloat.TryWriteSignificandLittleEndian | parameter | 32 | -| Parameter 2 of System.Runtime.InteropServices.NativeLibrary.TryGetExport | parameter | 32 | -| Parameter 2 of System.Runtime.Serialization.SerializationInfo.GetElement | parameter | 32 | -| Parameter 2 of System.Runtime.Serialization.SerializationInfo.GetElementNoThrow | parameter | 32 | -| Parameter 2 of System.RuntimeType.FilterHelper | parameter | 32 | -| Parameter 2 of System.RuntimeType.SplitName | parameter | 32 | -| Parameter 2 of System.RuntimeType.TryChangeType | parameter | 32 | -| Parameter 2 of System.RuntimeTypeHandle.GetActivationInfo | parameter | 32 | -| Parameter 2 of System.SByte.TryFormat | parameter | 32 | -| Parameter 2 of System.SByte.TryParse | parameter | 32 | -| Parameter 2 of System.SByte.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.SByte.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.SByte.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.SByte.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Security.SecurityElement.GetUnescapeSequence | parameter | 32 | -| Parameter 2 of System.Single.TryFormat | parameter | 32 | -| Parameter 2 of System.Single.TryParse | parameter | 32 | -| Parameter 2 of System.Single.TryWriteExponentBigEndian | parameter | 32 | -| Parameter 2 of System.Single.TryWriteExponentLittleEndian | parameter | 32 | -| Parameter 2 of System.Single.TryWriteSignificandBigEndian | parameter | 32 | -| Parameter 2 of System.Single.TryWriteSignificandLittleEndian | parameter | 32 | -| Parameter 2 of System.SpanHelpers.IndexOf | parameter | 32 | -| Parameter 2 of System.SpanHelpers.IndexOfAny | parameter | 32 | -| Parameter 2 of System.SpanHelpers.LastIndexOf | parameter | 32 | -| Parameter 2 of System.SpanHelpers.LastIndexOfAny | parameter | 32 | -| Parameter 2 of System.SpanHelpers.SequenceCompareTo | parameter | 32 | -| Parameter 2 of System.String.Create | parameter | 32 | -| Parameter 2 of System.String.IndexOfNewlineChar | parameter | 32 | -| Parameter 2 of System.String.MakeSeparatorList | parameter | 32 | -| Parameter 2 of System.String.MakeSeparatorListAny | parameter | 32 | -| Parameter 2 of System.String.TryParse | parameter | 32 | -| Parameter 2 of System.StringComparer.IsWellKnownCultureAwareComparer | parameter | 32 | -| Parameter 2 of System.StringComparer.IsWellKnownCultureAwareComparerCore | parameter | 32 | -| Parameter 2 of System.StubHelpers.StubHelpers.FmtClassUpdateNativeInternal | parameter | 32 | -| Parameter 2 of System.TermInfo.ParameterizedStrings.GetDynamicOrStaticVariables | parameter | 32 | -| Parameter 2 of System.Text.ASCIIEncoding.DecodeFirstRune | parameter | 32 | -| Parameter 2 of System.Text.ASCIIEncoding.TryGetByteCount | parameter | 32 | -| Parameter 2 of System.Text.Ascii.ChangeCase | parameter | 32 | -| Parameter 2 of System.Text.Ascii.FromUtf16 | parameter | 32 | -| Parameter 2 of System.Text.Ascii.ToLower | parameter | 32 | -| Parameter 2 of System.Text.Ascii.ToUpper | parameter | 32 | -| Parameter 2 of System.Text.Ascii.ToUtf16 | parameter | 32 | -| Parameter 2 of System.Text.CompositeFormat.<TryParseLiterals>g__TryMoveNext\|12_0 | parameter | 32 | -| Parameter 2 of System.Text.CompositeFormat.TryParseLiterals | parameter | 32 | -| Parameter 2 of System.Text.DecoderFallbackBuffer.TryDrainRemainingDataForGetChars | parameter | 32 | -| Parameter 2 of System.Text.DecoderNLS.DrainLeftoverDataForGetCharCount | parameter | 32 | -| Parameter 2 of System.Text.EncoderFallbackBuffer.InternalFallback | parameter | 32 | -| Parameter 2 of System.Text.EncoderFallbackBuffer.InternalFallbackGetByteCount | parameter | 32 | -| Parameter 2 of System.Text.EncoderFallbackBuffer.TryDrainRemainingDataForGetBytes | parameter | 32 | -| Parameter 2 of System.Text.EncoderNLS.DrainLeftoverDataForGetByteCount | parameter | 32 | -| Parameter 2 of System.Text.Encoding.DecodeFirstRune | parameter | 32 | -| Parameter 2 of System.Text.Encoding.TryGetByteCount | parameter | 32 | -| Parameter 2 of System.Text.Latin1Encoding.DecodeFirstRune | parameter | 32 | -| Parameter 2 of System.Text.Latin1Encoding.TryGetByteCount | parameter | 32 | -| Parameter 2 of System.Text.Rune.DecodeFromUtf8 | parameter | 32 | -| Parameter 2 of System.Text.Rune.DecodeFromUtf16 | parameter | 32 | -| Parameter 2 of System.Text.Rune.DecodeLastFromUtf8 | parameter | 32 | -| Parameter 2 of System.Text.Rune.DecodeLastFromUtf16 | parameter | 32 | -| Parameter 2 of System.Text.Rune.TryCreate | parameter | 32 | -| Parameter 2 of System.Text.Rune.TryEncodeToUtf8 | parameter | 32 | -| Parameter 2 of System.Text.Rune.TryEncodeToUtf16 | parameter | 32 | -| Parameter 2 of System.Text.Rune.TryFormat | parameter | 32 | -| Parameter 2 of System.Text.Rune.TryGetRuneAt | parameter | 32 | -| Parameter 2 of System.Text.StringBuilder.Append | parameter | 32 | -| Parameter 2 of System.Text.StringBuilder.AppendLine | parameter | 32 | -| Parameter 2 of System.Text.StringBuilder.Insert | parameter | 32 | -| Parameter 2 of System.Text.StringBuilder.ReplaceInPlaceAtChunk | parameter | 32 | -| Parameter 2 of System.Text.UTF8Encoding.DecodeFirstRune | parameter | 32 | -| Parameter 2 of System.Text.UTF8Encoding.TryGetByteCount | parameter | 32 | -| Parameter 2 of System.Text.UTF8Encoding.UTF8EncodingSealed.ReadUtf8 | parameter | 32 | -| Parameter 2 of System.Text.Unicode.TextSegmentationUtility.DecodeFirstRune.Invoke | parameter | 32 | -| Parameter 2 of System.Text.Unicode.TextSegmentationUtility.DecodeFirstRune<!0>.Invoke | parameter | 32 | -| Parameter 2 of System.Text.Unicode.Utf8.FromUtf16 | parameter | 32 | -| Parameter 2 of System.Text.Unicode.Utf8.ToUtf16 | parameter | 32 | -| Parameter 2 of System.Text.Unicode.Utf8.ToUtf16PreservingReplacement | parameter | 32 | -| Parameter 2 of System.Text.Unicode.Utf8.TryWrite | parameter | 32 | -| Parameter 2 of System.Text.Unicode.Utf8Utility.GetPointerToFirstInvalidByte | parameter | 32 | -| Parameter 2 of System.Text.Unicode.Utf16Utility.GetPointerToFirstInvalidChar | parameter | 32 | -| Parameter 2 of System.Text.UnicodeUtility.GetUtf16SurrogatesFromSupplementaryPlaneScalar | parameter | 32 | -| Parameter 2 of System.Threading.AsyncLocalValueMap.EmptyAsyncLocalValueMap.TryGetValue | parameter | 32 | -| Parameter 2 of System.Threading.AsyncLocalValueMap.FourElementAsyncLocalValueMap.TryGetValue | parameter | 32 | -| Parameter 2 of System.Threading.AsyncLocalValueMap.MultiElementAsyncLocalValueMap.TryGetValue | parameter | 32 | -| Parameter 2 of System.Threading.AsyncLocalValueMap.OneElementAsyncLocalValueMap.TryGetValue | parameter | 32 | -| Parameter 2 of System.Threading.AsyncLocalValueMap.ThreeElementAsyncLocalValueMap.TryGetValue | parameter | 32 | -| Parameter 2 of System.Threading.AsyncLocalValueMap.TwoElementAsyncLocalValueMap.TryGetValue | parameter | 32 | -| Parameter 2 of System.Threading.ExecutionContext.RunForThreadPoolUnsafe | parameter | 32 | -| Parameter 2 of System.Threading.IAsyncLocalValueMap.TryGetValue | parameter | 32 | -| Parameter 2 of System.Threading.LazyInitializer.EnsureInitialized | parameter | 32 | -| Parameter 2 of System.Threading.LazyInitializer.EnsureInitializedCore | parameter | 32 | -| Parameter 2 of System.Threading.Monitor.ReliableEnterTimeout | parameter | 32 | -| Parameter 2 of System.Threading.Monitor.TryEnter | parameter | 32 | -| Parameter 2 of System.Threading.PortableThreadPool.GetAvailableThreads | parameter | 32 | -| Parameter 2 of System.Threading.PortableThreadPool.GetMaxThreads | parameter | 32 | -| Parameter 2 of System.Threading.PortableThreadPool.GetMinThreads | parameter | 32 | -| Parameter 2 of System.Threading.PortableThreadPool.PerformBlockingAdjustment | parameter | 32 | -| Parameter 2 of System.Threading.ReaderWriterLockSlim.WaitOnEvent | parameter | 32 | -| Parameter 2 of System.Threading.SpinLock.ContinueTryEnter | parameter | 32 | -| Parameter 2 of System.Threading.SpinLock.TryEnter | parameter | 32 | -| Parameter 2 of System.Threading.Tasks.Task.CreationOptionsFromContinuationOptions | parameter | 32 | -| Parameter 2 of System.Threading.ThreadPool.GetNextConfigUInt32Value | parameter | 32 | -| Parameter 2 of System.Threading.ThreadPoolWorkQueue.Dequeue | parameter | 32 | -| Parameter 2 of System.Threading.ThreadPoolWorkQueue.TryStartProcessingHighPriorityWorkItemsAndDequeue | parameter | 32 | -| Parameter 2 of System.TimeOnly.Add | parameter | 32 | -| Parameter 2 of System.TimeOnly.AddHours | parameter | 32 | -| Parameter 2 of System.TimeOnly.AddMinutes | parameter | 32 | -| Parameter 2 of System.TimeOnly.AddTicks | parameter | 32 | -| Parameter 2 of System.TimeOnly.Deconstruct | parameter | 32 | -| Parameter 2 of System.TimeOnly.TryFormat | parameter | 32 | -| Parameter 2 of System.TimeOnly.TryFormatCore | parameter | 32 | -| Parameter 2 of System.TimeOnly.TryParse | parameter | 32 | -| Parameter 2 of System.TimeOnly.TryParseExact | parameter | 32 | -| Parameter 2 of System.TimeSpan.TryFormat | parameter | 32 | -| Parameter 2 of System.TimeSpan.TryParse | parameter | 32 | -| Parameter 2 of System.TimeZoneInfo.ConvertUtcToTimeZone | parameter | 32 | -| Parameter 2 of System.TimeZoneInfo.GetAdjustmentRuleForAmbiguousOffsets | parameter | 32 | -| Parameter 2 of System.TimeZoneInfo.GetAdjustmentRuleForTime | parameter | 32 | -| Parameter 2 of System.TimeZoneInfo.GetFullValueForDisplayNameField | parameter | 32 | -| Parameter 2 of System.TimeZoneInfo.GetUtcOffsetFromUtc | parameter | 32 | -| Parameter 2 of System.TimeZoneInfo.TZif_ParseJulianDay | parameter | 32 | -| Parameter 2 of System.TimeZoneInfo.TZif_ParseMDateRule | parameter | 32 | -| Parameter 2 of System.TimeZoneInfo.TZif_ParsePosixDateTime | parameter | 32 | -| Parameter 2 of System.TimeZoneInfo.TZif_ParsePosixFormat | parameter | 32 | -| Parameter 2 of System.TimeZoneInfo.TZif_ParseRaw | parameter | 32 | -| Parameter 2 of System.TimeZoneInfo.TryConvertIanaIdToWindowsId | parameter | 32 | -| Parameter 2 of System.TimeZoneInfo.TryConvertWindowsIdToIanaId | parameter | 32 | -| Parameter 2 of System.TimeZoneInfo.TryFindSystemTimeZoneById | parameter | 32 | -| Parameter 2 of System.TimeZoneInfo.TryGetTimeZone | parameter | 32 | -| Parameter 2 of System.TimeZoneInfo.TryGetTimeZoneFromLocalMachine | parameter | 32 | -| Parameter 2 of System.TimeZoneInfo.TryGetTimeZoneFromLocalMachineCore | parameter | 32 | -| Parameter 2 of System.TimeZoneInfo.TryGetTimeZoneUsingId | parameter | 32 | -| Parameter 2 of System.TimeZoneInfo.TryLoadTzFile | parameter | 32 | -| Parameter 2 of System.TupleExtensions.Deconstruct | parameter | 32 | -| Parameter 2 of System.Type.GetEnumData | parameter | 32 | -| Parameter 2 of System.UInt16.TryFormat | parameter | 32 | -| Parameter 2 of System.UInt16.TryParse | parameter | 32 | -| Parameter 2 of System.UInt16.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.UInt16.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.UInt16.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.UInt16.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.UInt32.TryFormat | parameter | 32 | -| Parameter 2 of System.UInt32.TryParse | parameter | 32 | -| Parameter 2 of System.UInt32.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.UInt32.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.UInt32.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.UInt32.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.UInt64.TryFormat | parameter | 32 | -| Parameter 2 of System.UInt64.TryParse | parameter | 32 | -| Parameter 2 of System.UInt64.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.UInt64.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.UInt64.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.UInt64.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.UInt128.BigMul | parameter | 32 | -| Parameter 2 of System.UInt128.TryFormat | parameter | 32 | -| Parameter 2 of System.UInt128.TryParse | parameter | 32 | -| Parameter 2 of System.UInt128.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.UInt128.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.UInt128.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.UInt128.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.UIntPtr.TryFormat | parameter | 32 | -| Parameter 2 of System.UIntPtr.TryParse | parameter | 32 | -| Parameter 2 of System.UIntPtr.TryReadBigEndian | parameter | 32 | -| Parameter 2 of System.UIntPtr.TryReadLittleEndian | parameter | 32 | -| Parameter 2 of System.UIntPtr.TryWriteBigEndian | parameter | 32 | -| Parameter 2 of System.UIntPtr.TryWriteLittleEndian | parameter | 32 | -| Parameter 2 of System.Version.TryFormat | parameter | 32 | -| Parameter 2 of System.__DTString.GetRegularToken | parameter | 32 | -| Parameter 2 of System.__DTString.GetSeparatorToken | parameter | 32 | -| Parameter 2 of System.__DTString.MatchLongestWords | parameter | 32 | -| Parameter 3 of Interop.Globalization.GetJapaneseEraStartDate | parameter | 32 | -| Parameter 3 of Interop.Globalization.GetLocaleInfoGroupingSizes | parameter | 32 | -| Parameter 3 of Interop.Sys.GetControlCharacters | parameter | 32 | -| Parameter 3 of Interop.Sys.Poll | parameter | 32 | -| Parameter 3 of Interop.Sys.TryGetUserNameFromPasswd | parameter | 32 | -| Parameter 3 of Microsoft.Win32.SafeHandles.SafeFileHandle.FStatCheckIO | parameter | 32 | -| Parameter 3 of Microsoft.Win32.SafeHandles.SafeFileHandle.OpenReadOnly | parameter | 32 | -| Parameter 3 of System.Buffers.IndexOfAnyAsciiSearcher.ComputeBitmap256 | parameter | 32 | -| Parameter 3 of System.Buffers.IndexOfAnyAsciiSearcher.TryIndexOfAny | parameter | 32 | -| Parameter 3 of System.Buffers.IndexOfAnyAsciiSearcher.TryIndexOfAnyExcept | parameter | 32 | -| Parameter 3 of System.Buffers.IndexOfAnyAsciiSearcher.TryLastIndexOfAny | parameter | 32 | -| Parameter 3 of System.Buffers.IndexOfAnyAsciiSearcher.TryLastIndexOfAnyExcept | parameter | 32 | -| Parameter 3 of System.Buffers.Text.Base64.<DecodeFromUtf8>g__InvalidDataFallback\|15_0 | parameter | 32 | -| Parameter 3 of System.Buffers.Text.Base64.DecodeFromUtf8 | parameter | 32 | -| Parameter 3 of System.Buffers.Text.Base64.DecodeWithWhiteSpaceBlockwise | parameter | 32 | -| Parameter 3 of System.Buffers.Text.Base64.EncodeToUtf8 | parameter | 32 | -| Parameter 3 of System.Buffers.Text.Utf8Formatter.TryFormat | parameter | 32 | -| Parameter 3 of System.Buffers.Text.Utf8Parser.TimeSpanSplitter.ParseComponent | parameter | 32 | -| Parameter 3 of System.Buffers.Text.Utf8Parser.TimeSpanSplitter.TrySplitTimeSpan | parameter | 32 | -| Parameter 3 of System.Buffers.Text.Utf8Parser.TryParseDateTimeG | parameter | 32 | -| Parameter 3 of System.Buffers.Text.Utf8Parser.TryParseDateTimeOffsetO | parameter | 32 | -| Parameter 3 of System.Buffers.Text.Utf8Parser.TryParseDateTimeOffsetR | parameter | 32 | -| Parameter 3 of System.Byte.TryParse | parameter | 32 | -| Parameter 3 of System.Char.TryParse | parameter | 32 | -| Parameter 3 of System.Collections.Concurrent.ConcurrentQueue.SnapForObservation | parameter | 32 | -| Parameter 3 of System.Collections.Concurrent.ConcurrentQueue<!0>.SnapForObservation | parameter | 32 | -| Parameter 3 of System.Collections.Hashtable.InitHash | parameter | 32 | -| Parameter 3 of System.ConsolePal.<TryGetCursorPosition>g__AppendToStdInReaderUntil\|82_2 | parameter | 32 | -| Parameter 3 of System.ConsolePal.<TryGetCursorPosition>g__BufferUntil\|82_1 | parameter | 32 | -| Parameter 3 of System.Convert.CopyToTempBufferWithoutWhiteSpace | parameter | 32 | -| Parameter 3 of System.Convert.TryDecodeFromUtf16 | parameter | 32 | -| Parameter 3 of System.DateOnly.Deconstruct | parameter | 32 | -| Parameter 3 of System.DateOnly.TryParse | parameter | 32 | -| Parameter 3 of System.DateOnly.TryParseInternal | parameter | 32 | -| Parameter 3 of System.DateTime.Deconstruct | parameter | 32 | -| Parameter 3 of System.DateTime.GetDate | parameter | 32 | -| Parameter 3 of System.DateTime.GetTime | parameter | 32 | -| Parameter 3 of System.DateTime.GetTimePrecise | parameter | 32 | -| Parameter 3 of System.DateTime.TryParse | parameter | 32 | -| Parameter 3 of System.DateTimeFormat.TryFormatInvariantG | parameter | 32 | -| Parameter 3 of System.DateTimeFormat.TryFormatO | parameter | 32 | -| Parameter 3 of System.DateTimeFormat.TryFormatR | parameter | 32 | -| Parameter 3 of System.DateTimeFormat.TryFormatu | parameter | 32 | -| Parameter 3 of System.DateTimeOffset.Deconstruct | parameter | 32 | -| Parameter 3 of System.DateTimeOffset.TryParse | parameter | 32 | -| Parameter 3 of System.DateTimeParse.CheckNewValue | parameter | 32 | -| Parameter 3 of System.DateTimeParse.ExpandPredefinedFormat | parameter | 32 | -| Parameter 3 of System.DateTimeParse.Lex | parameter | 32 | -| Parameter 3 of System.DateTimeParse.Parse | parameter | 32 | -| Parameter 3 of System.DateTimeParse.ParseDigits | parameter | 32 | -| Parameter 3 of System.DateTimeParse.ParseISO8601 | parameter | 32 | -| Parameter 3 of System.DateTimeParse.ProcessHebrewTerminalState | parameter | 32 | -| Parameter 3 of System.DateTimeParse.ProcessTerminalState | parameter | 32 | -| Parameter 3 of System.DateTimeParse.SetIfStartsWith | parameter | 32 | -| Parameter 3 of System.DateTimeParse.TryParse | parameter | 32 | -| Parameter 3 of System.DateTimeParse.TryParseQuoteString | parameter | 32 | -| Parameter 3 of System.Decimal.DecCalc.DivByConst | parameter | 32 | -| Parameter 3 of System.Decimal.TryParse | parameter | 32 | -| Parameter 3 of System.DefaultBinder.BindToMethod | parameter | 32 | -| Parameter 3 of System.Diagnostics.Tracing.EventParameterInfo.GenerateMetadataForNamedTypeV2 | parameter | 32 | -| Parameter 3 of System.Diagnostics.Tracing.EventProvider.EncodeObject | parameter | 32 | -| Parameter 3 of System.Diagnostics.Tracing.EventProviderImpl.MarshalFilterData | parameter | 32 | -| Parameter 3 of System.Diagnostics.Tracing.EventSource.UpdateDescriptor | parameter | 32 | -| Parameter 3 of System.Diagnostics.Tracing.EventSource.Write | parameter | 32 | -| Parameter 3 of System.Double.TryParse | parameter | 32 | -| Parameter 3 of System.Enum.GetSingleFlagsEnumNameForValue | parameter | 32 | -| Parameter 3 of System.Enum.TryFormatFlagNames | parameter | 32 | -| Parameter 3 of System.Enum.TryFormatPrimitiveDefault | parameter | 32 | -| Parameter 3 of System.Enum.TryFormatPrimitiveNonDefault | parameter | 32 | -| Parameter 3 of System.Enum.TryParse | parameter | 32 | -| Parameter 3 of System.Globalization.CalendarData.EnumCalendarInfo | parameter | 32 | -| Parameter 3 of System.Globalization.CalendarData.EnumDatePatterns | parameter | 32 | -| Parameter 3 of System.Globalization.CalendarData.EnumEraNames | parameter | 32 | -| Parameter 3 of System.Globalization.CalendarData.EnumMonthNames | parameter | 32 | -| Parameter 3 of System.Globalization.CalendarData.GetCalendarInfo | parameter | 32 | -| Parameter 3 of System.Globalization.DateTimeFormatInfo.Tokenize | parameter | 32 | -| Parameter 3 of System.Globalization.DateTimeFormatInfoScanner.ScanRepeatChar | parameter | 32 | -| Parameter 3 of System.Globalization.EastAsianLunisolarCalendar.TimeToLunar | parameter | 32 | -| Parameter 3 of System.Globalization.PersianCalendar.GetDate | parameter | 32 | -| Parameter 3 of System.Globalization.SurrogateCasing.ToLower | parameter | 32 | -| Parameter 3 of System.Globalization.SurrogateCasing.ToUpper | parameter | 32 | -| Parameter 3 of System.Globalization.TimeSpanFormat.FormatCustomized | parameter | 32 | -| Parameter 3 of System.Globalization.TimeSpanParse.ParseExactDigits | parameter | 32 | -| Parameter 3 of System.Globalization.TimeSpanParse.StringParser.ParseInt | parameter | 32 | -| Parameter 3 of System.Globalization.TimeSpanParse.TryParseByFormat | parameter | 32 | -| Parameter 3 of System.Globalization.TimeSpanParse.TryParseTimeSpan | parameter | 32 | -| Parameter 3 of System.Globalization.UmAlQuraCalendar.ConvertGregorianToHijri | parameter | 32 | -| Parameter 3 of System.Globalization.UmAlQuraCalendar.ConvertHijriToGregorian | parameter | 32 | -| Parameter 3 of System.Guid.TryWriteBytes | parameter | 32 | -| Parameter 3 of System.Half.TryParse | parameter | 32 | -| Parameter 3 of System.HashCode.Initialize | parameter | 32 | -| Parameter 3 of System.IO.BufferedStream.WriteToBuffer | parameter | 32 | -| Parameter 3 of System.IO.FileSystemInfo.Create | parameter | 32 | -| Parameter 3 of System.IO.KeyParser.<ParseFromSingleChar>g__ControlAndLetterPressed\|8_1 | parameter | 32 | -| Parameter 3 of System.IO.KeyParser.TryParseTerminalInputSequence | parameter | 32 | -| Parameter 3 of System.IO.Path.TryJoin | parameter | 32 | -| Parameter 3 of System.Int16.TryParse | parameter | 32 | -| Parameter 3 of System.Int32.TryParse | parameter | 32 | -| Parameter 3 of System.Int64.TryParse | parameter | 32 | -| Parameter 3 of System.Int128.TryParse | parameter | 32 | -| Parameter 3 of System.IntPtr.TryParse | parameter | 32 | -| Parameter 3 of System.MemoryExtensions.TryWrite | parameter | 32 | -| Parameter 3 of System.Number.AccumulateDecimalDigitsIntoBigInteger | parameter | 32 | -| Parameter 3 of System.Number.BigInteger.DivRem | parameter | 32 | -| Parameter 3 of System.Number.DiyFp.GetBoundaries | parameter | 32 | -| Parameter 3 of System.Number.Dragon4Double | parameter | 32 | -| Parameter 3 of System.Number.Dragon4Half | parameter | 32 | -| Parameter 3 of System.Number.Dragon4Single | parameter | 32 | -| Parameter 3 of System.Number.GetFloatingPointMaxDigitsAndPrecision | parameter | 32 | -| Parameter 3 of System.Number.Grisu3.TryDigitGenCounted | parameter | 32 | -| Parameter 3 of System.Number.Grisu3.TryRunCounted | parameter | 32 | -| Parameter 3 of System.Number.TryParseBinaryInteger | parameter | 32 | -| Parameter 3 of System.Number.TryParseBinaryIntegerNumber | parameter | 32 | -| Parameter 3 of System.Number.TryParseBinaryIntegerStyle | parameter | 32 | -| Parameter 3 of System.Number.TryParseDecimal | parameter | 32 | -| Parameter 3 of System.Number.TryParseFloat | parameter | 32 | -| Parameter 3 of System.Number.TryParseNumber | parameter | 32 | -| Parameter 3 of System.Number.TryUInt32ToBinaryStr | parameter | 32 | -| Parameter 3 of System.Number.TryUInt32ToDecStr | parameter | 32 | -| Parameter 3 of System.Number.TryUInt64ToBinaryStr | parameter | 32 | -| Parameter 3 of System.Number.TryUInt64ToDecStr | parameter | 32 | -| Parameter 3 of System.Number.TryUInt128ToBinaryStr | parameter | 32 | -| Parameter 3 of System.Number.TryUInt128ToDecStr | parameter | 32 | -| Parameter 3 of System.Numerics.INumberBase.TryParse | parameter | 32 | -| Parameter 3 of System.Numerics.INumberBase<!0>.TryParse | parameter | 32 | -| Parameter 3 of System.Numerics.INumberBase<Byte>.TryParse | parameter | 32 | -| Parameter 3 of System.Numerics.INumberBase<Char>.TryParse | parameter | 32 | -| Parameter 3 of System.Numerics.INumberBase<Decimal>.TryParse | parameter | 32 | -| Parameter 3 of System.Numerics.INumberBase<Double>.TryParse | parameter | 32 | -| Parameter 3 of System.Numerics.INumberBase<Half>.TryParse | parameter | 32 | -| Parameter 3 of System.Numerics.INumberBase<Int16>.TryParse | parameter | 32 | -| Parameter 3 of System.Numerics.INumberBase<Int32>.TryParse | parameter | 32 | -| Parameter 3 of System.Numerics.INumberBase<Int64>.TryParse | parameter | 32 | -| Parameter 3 of System.Numerics.INumberBase<Int128>.TryParse | parameter | 32 | -| Parameter 3 of System.Numerics.INumberBase<IntPtr>.TryParse | parameter | 32 | -| Parameter 3 of System.Numerics.INumberBase<NFloat>.TryParse | parameter | 32 | -| Parameter 3 of System.Numerics.INumberBase<SByte>.TryParse | parameter | 32 | -| Parameter 3 of System.Numerics.INumberBase<Single>.TryParse | parameter | 32 | -| Parameter 3 of System.Numerics.INumberBase<UInt16>.TryParse | parameter | 32 | -| Parameter 3 of System.Numerics.INumberBase<UInt32>.TryParse | parameter | 32 | -| Parameter 3 of System.Numerics.INumberBase<UInt64>.TryParse | parameter | 32 | -| Parameter 3 of System.Numerics.INumberBase<UInt128>.TryParse | parameter | 32 | -| Parameter 3 of System.Numerics.INumberBase<UIntPtr>.TryParse | parameter | 32 | -| Parameter 3 of System.Numerics.Matrix4x4.Decompose | parameter | 32 | -| Parameter 3 of System.Numerics.Matrix4x4.Impl.CreateBillboard | parameter | 32 | -| Parameter 3 of System.Numerics.Matrix4x4.Impl.CreateConstrainedBillboard | parameter | 32 | -| Parameter 3 of System.Numerics.Matrix4x4.Impl.CreateScale | parameter | 32 | -| Parameter 3 of System.Numerics.Matrix4x4.Impl.Decompose | parameter | 32 | -| Parameter 3 of System.ParseNumbers.StringToInt | parameter | 32 | -| Parameter 3 of System.ParseNumbers.StringToLong | parameter | 32 | -| Parameter 3 of System.Reflection.Binder.BindToMethod | parameter | 32 | -| Parameter 3 of System.Reflection.CustomAttribute.CreateCaObject | parameter | 32 | -| Parameter 3 of System.Reflection.CustomAttribute.GetPropertyOrFieldData | parameter | 32 | -| Parameter 3 of System.Reflection.CustomAttribute.ParseAttributeUsageAttribute | parameter | 32 | -| Parameter 3 of System.Reflection.CustomAttribute._GetPropertyOrFieldData | parameter | 32 | -| Parameter 3 of System.Reflection.CustomAttribute._ParseAttributeUsageAttribute | parameter | 32 | -| Parameter 3 of System.Reflection.CustomAttributeEncodedArgument.ParseAttributeArguments | parameter | 32 | -| Parameter 3 of System.Reflection.Emit.DynamicResolver.GetCodeInfo | parameter | 32 | -| Parameter 3 of System.Reflection.Emit.DynamicResolver.ResolveToken | parameter | 32 | -| Parameter 3 of System.Reflection.MetadataImport.Enum | parameter | 32 | -| Parameter 3 of System.Reflection.MetadataImport.GetClassLayout | parameter | 32 | -| Parameter 3 of System.Reflection.MetadataImport.GetCustomAttributeProps | parameter | 32 | -| Parameter 3 of System.Reflection.MetadataImport.GetDefaultValue | parameter | 32 | -| Parameter 3 of System.Reflection.MetadataImport.GetEventProps | parameter | 32 | -| Parameter 3 of System.Reflection.MetadataImport.GetFieldOffset | parameter | 32 | -| Parameter 3 of System.Reflection.MetadataImport.GetMarshalAs | parameter | 32 | -| Parameter 3 of System.Reflection.MetadataImport.GetPInvokeMap | parameter | 32 | -| Parameter 3 of System.Reflection.MetadataImport.GetParamDefProps | parameter | 32 | -| Parameter 3 of System.Reflection.MetadataImport.GetPropertyProps | parameter | 32 | -| Parameter 3 of System.Reflection.MetadataImport._Enum | parameter | 32 | -| Parameter 3 of System.Reflection.MetadataImport._GetClassLayout | parameter | 32 | -| Parameter 3 of System.Reflection.MetadataImport._GetCustomAttributeProps | parameter | 32 | -| Parameter 3 of System.Reflection.MetadataImport._GetDefaultValue | parameter | 32 | -| Parameter 3 of System.Reflection.MetadataImport._GetEventProps | parameter | 32 | -| Parameter 3 of System.Reflection.MetadataImport._GetFieldOffset | parameter | 32 | -| Parameter 3 of System.Reflection.MetadataImport._GetMarshalAs | parameter | 32 | -| Parameter 3 of System.Reflection.MetadataImport._GetParamDefProps | parameter | 32 | -| Parameter 3 of System.Reflection.MetadataImport._GetPropertyProps | parameter | 32 | -| Parameter 3 of System.Reflection.MetadataImport._GetUserString | parameter | 32 | -| Parameter 3 of System.Reflection.MethodInvokerCommon.Initialize | parameter | 32 | -| Parameter 3 of System.Reflection.RuntimeAssembly.GetVersion | parameter | 32 | -| Parameter 3 of System.Reflection.RuntimeCustomAttributeData..ctor | parameter | 32 | -| Parameter 3 of System.Reflection.RuntimeParameterInfo.GetParameters | parameter | 32 | -| Parameter 3 of System.Resolver.GetCodeInfo | parameter | 32 | -| Parameter 3 of System.Resolver.ResolveToken | parameter | 32 | -| Parameter 3 of System.Resources.ResourceReader.GetResourceData | parameter | 32 | -| Parameter 3 of System.Resources.RuntimeResourceSet.ReadValue | parameter | 32 | -| Parameter 3 of System.Runtime.CompilerServices.ConditionalWeakTable.Container.TryGetEntry | parameter | 32 | -| Parameter 3 of System.Runtime.CompilerServices.ConditionalWeakTable<!0,!1>.Container.TryGetEntry | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComTypes.IMoniker.BindToObject | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComTypes.IMoniker.BindToStorage | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComTypes.IMoniker.ComposeWith | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComTypes.IMoniker.GetDisplayName | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComTypes.IMoniker.GetTimeOfLastChange | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComTypes.IMoniker.Reduce | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeComp.BindType | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.AddressOfMember | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.CreateInstance | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetDocumentation | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetDocumentation2 | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetFuncCustData | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetFuncIndexOfMemId | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetImplTypeCustData | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetParamCustData | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetVarCustData | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo.AddressOfMember | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo.CreateInstance | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetDocumentation | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetDocumentation | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetDocumentation2 | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeLib.GetDocumentation | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComWrappers.ComputeVtables | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ComWrappers.TryGetOrCreateComInterfaceForObjectInternal | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.MemoryMarshal.TryGetMemoryManager | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.MemoryMarshal.TryGetString | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.NFloat.TryParse | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.NativeLibrary.TryLoad | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.UnhandledExceptionPropagationHandler.BeginInvoke | parameter | 32 | -| Parameter 3 of System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.UnhandledExceptionPropagationHandler.Invoke | parameter | 32 | -| Parameter 3 of System.RuntimeType.FilterHelper | parameter | 32 | -| Parameter 3 of System.RuntimeType.RuntimeTypeCache.MemberInfoCache.PopulateLiteralFields | parameter | 32 | -| Parameter 3 of System.RuntimeType.RuntimeTypeCache.MemberInfoCache.PopulateRtFields | parameter | 32 | -| Parameter 3 of System.RuntimeType.RuntimeTypeCache.MemberInfoCache<!0>.PopulateLiteralFields | parameter | 32 | -| Parameter 3 of System.RuntimeType.RuntimeTypeCache.MemberInfoCache<!0>.PopulateRtFields | parameter | 32 | -| Parameter 3 of System.RuntimeTypeHandle.GetActivationInfo | parameter | 32 | -| Parameter 3 of System.SByte.TryParse | parameter | 32 | -| Parameter 3 of System.Single.TryParse | parameter | 32 | -| Parameter 3 of System.String.MakeSeparatorListAny | parameter | 32 | -| Parameter 3 of System.String.TryGetSpan | parameter | 32 | -| Parameter 3 of System.StubHelpers.AnsiCharMarshaler.DoAnsiConversion | parameter | 32 | -| Parameter 3 of System.StubHelpers.VBByValStrMarshaler.ConvertToNative | parameter | 32 | -| Parameter 3 of System.TermInfo.ParameterizedStrings.GetDynamicOrStaticVariables | parameter | 32 | -| Parameter 3 of System.Text.ASCIIEncoding.DecodeFirstRune | parameter | 32 | -| Parameter 3 of System.Text.ASCIIEncoding.EncodeRune | parameter | 32 | -| Parameter 3 of System.Text.ASCIIEncoding.TryGetBytes | parameter | 32 | -| Parameter 3 of System.Text.ASCIIEncoding.TryGetChars | parameter | 32 | -| Parameter 3 of System.Text.CompositeFormat.TryParseLiterals | parameter | 32 | -| Parameter 3 of System.Text.DecoderFallbackBuffer.InternalFallback | parameter | 32 | -| Parameter 3 of System.Text.DecoderNLS.DrainLeftoverDataForGetChars | parameter | 32 | -| Parameter 3 of System.Text.EncoderFallbackBuffer.TryInternalFallbackGetBytes | parameter | 32 | -| Parameter 3 of System.Text.EncoderNLS.TryDrainLeftoverDataForGetBytes | parameter | 32 | -| Parameter 3 of System.Text.Encoding.DecodeFirstRune | parameter | 32 | -| Parameter 3 of System.Text.Encoding.EncodeRune | parameter | 32 | -| Parameter 3 of System.Text.Encoding.TryGetBytes | parameter | 32 | -| Parameter 3 of System.Text.Encoding.TryGetChars | parameter | 32 | -| Parameter 3 of System.Text.Latin1Encoding.DecodeFirstRune | parameter | 32 | -| Parameter 3 of System.Text.Latin1Encoding.EncodeRune | parameter | 32 | -| Parameter 3 of System.Text.Latin1Encoding.TryGetBytes | parameter | 32 | -| Parameter 3 of System.Text.Latin1Encoding.TryGetChars | parameter | 32 | -| Parameter 3 of System.Text.StringBuilder.MakeRoom | parameter | 32 | -| Parameter 3 of System.Text.StringBuilder.Remove | parameter | 32 | -| Parameter 3 of System.Text.StringBuilder.ReplaceInPlaceAtChunk | parameter | 32 | -| Parameter 3 of System.Text.UTF8Encoding.DecodeFirstRune | parameter | 32 | -| Parameter 3 of System.Text.UTF8Encoding.EncodeRune | parameter | 32 | -| Parameter 3 of System.Text.UTF8Encoding.TryGetBytes | parameter | 32 | -| Parameter 3 of System.Text.UTF8Encoding.TryGetChars | parameter | 32 | -| Parameter 3 of System.Text.UTF8Encoding.UTF8EncodingSealed.TryGetBytes | parameter | 32 | -| Parameter 3 of System.Text.Unicode.TextSegmentationUtility.DecodeFirstRune.Invoke | parameter | 32 | -| Parameter 3 of System.Text.Unicode.TextSegmentationUtility.DecodeFirstRune<!0>.Invoke | parameter | 32 | -| Parameter 3 of System.Text.Unicode.Utf8.FromUtf16 | parameter | 32 | -| Parameter 3 of System.Text.Unicode.Utf8.ToUtf16 | parameter | 32 | -| Parameter 3 of System.Text.Unicode.Utf8.ToUtf16PreservingReplacement | parameter | 32 | -| Parameter 3 of System.Text.Unicode.Utf8.TryWrite | parameter | 32 | -| Parameter 3 of System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler.<AppendEnum>g__GrowAndAppendFormatted\|21_0 | parameter | 32 | -| Parameter 3 of System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler.<AppendSpanFormattable>g__GrowAndAppendFormatted\|20_0 | parameter | 32 | -| Parameter 3 of System.Text.Unicode.Utf8Utility.GetPointerToFirstInvalidByte | parameter | 32 | -| Parameter 3 of System.Text.Unicode.Utf16Utility.GetPointerToFirstInvalidChar | parameter | 32 | -| Parameter 3 of System.Threading.Mutex..ctor | parameter | 32 | -| Parameter 3 of System.Threading.Mutex.CreateMutexCore | parameter | 32 | -| Parameter 3 of System.Threading.SpinLock.CompareExchange | parameter | 32 | -| Parameter 3 of System.Threading.SpinLock.ContinueTryEnterWithThreadTracking | parameter | 32 | -| Parameter 3 of System.Threading.Tasks.AwaitTaskContinuation.RunCallback | parameter | 32 | -| Parameter 3 of System.Threading.Tasks.Task.AtomicStateUpdate | parameter | 32 | -| Parameter 3 of System.Threading.ThreadPool.GetNextConfigUInt32Value | parameter | 32 | -| Parameter 3 of System.TimeOnly.Deconstruct | parameter | 32 | -| Parameter 3 of System.TimeOnly.TryParse | parameter | 32 | -| Parameter 3 of System.TimeOnly.TryParseInternal | parameter | 32 | -| Parameter 3 of System.TimeSpan.TryParseExact | parameter | 32 | -| Parameter 3 of System.TimeZoneInfo.GetAdjustmentRuleForTime | parameter | 32 | -| Parameter 3 of System.TimeZoneInfo.GetDisplayName | parameter | 32 | -| Parameter 3 of System.TimeZoneInfo.GetUtcOffsetFromUtc | parameter | 32 | -| Parameter 3 of System.TimeZoneInfo.TZif_ParseMDateRule | parameter | 32 | -| Parameter 3 of System.TimeZoneInfo.TZif_ParsePosixDateTime | parameter | 32 | -| Parameter 3 of System.TimeZoneInfo.TZif_ParsePosixFormat | parameter | 32 | -| Parameter 3 of System.TimeZoneInfo.TZif_ParseRaw | parameter | 32 | -| Parameter 3 of System.TimeZoneInfo.TryConvertWindowsIdToIanaId | parameter | 32 | -| Parameter 3 of System.TimeZoneInfo.TryGetEndOfDstIfYearStartWithDst | parameter | 32 | -| Parameter 3 of System.TimeZoneInfo.TryGetStartOfDstIfYearEndWithDst | parameter | 32 | -| Parameter 3 of System.TimeZoneInfo.TryGetTimeZone | parameter | 32 | -| Parameter 3 of System.TimeZoneInfo.TryGetTimeZoneFromLocalMachine | parameter | 32 | -| Parameter 3 of System.TimeZoneInfo.TryGetTimeZoneUsingId | parameter | 32 | -| Parameter 3 of System.TimeZoneInfo.ValidateTimeZoneInfo | parameter | 32 | -| Parameter 3 of System.TupleExtensions.Deconstruct | parameter | 32 | -| Parameter 3 of System.UInt16.TryParse | parameter | 32 | -| Parameter 3 of System.UInt32.TryParse | parameter | 32 | -| Parameter 3 of System.UInt64.TryParse | parameter | 32 | -| Parameter 3 of System.UInt128.TryParse | parameter | 32 | -| Parameter 3 of System.UIntPtr.TryParse | parameter | 32 | -| Parameter 3 of System.Version.TryFormat | parameter | 32 | -| Parameter 3 of System.Version.TryFormatCore | parameter | 32 | -| Parameter 3 of System.Version.TryParseComponent | parameter | 32 | -| Parameter 3 of System.__DTString.GetSeparatorToken | parameter | 32 | -| Parameter 3 of System.__DTString.MatchSpecifiedWords | parameter | 32 | -| Parameter 4 of Interop.CallStringMethod | parameter | 32 | -| Parameter 4 of Microsoft.Win32.SafeHandles.SafeFileHandle.Open | parameter | 32 | -| Parameter 4 of System.Buffers.Text.Utf8Parser.TryCreateDateTimeOffset | parameter | 32 | -| Parameter 4 of System.Buffers.Text.Utf8Parser.TryParseAsSpecialFloatingPoint | parameter | 32 | -| Parameter 4 of System.Buffers.Text.Utf8Parser.TryParseNumber | parameter | 32 | -| Parameter 4 of System.Collections.Concurrent.ConcurrentQueue.SnapForObservation | parameter | 32 | -| Parameter 4 of System.Collections.Concurrent.ConcurrentQueue<!0>.SnapForObservation | parameter | 32 | -| Parameter 4 of System.Collections.Concurrent.SingleProducerSingleConsumerQueue.TryDequeueSlow | parameter | 32 | -| Parameter 4 of System.Collections.Concurrent.SingleProducerSingleConsumerQueue<!0>.TryDequeueSlow | parameter | 32 | -| Parameter 4 of System.Collections.Hashtable.InitHash | parameter | 32 | -| Parameter 4 of System.ConsolePal.<TryGetCursorPosition>g__AppendToStdInReaderUntil\|82_2 | parameter | 32 | -| Parameter 4 of System.ConsolePal.<TryGetCursorPosition>g__ReadRowOrCol\|82_3 | parameter | 32 | -| Parameter 4 of System.DateOnly.TryParseExact | parameter | 32 | -| Parameter 4 of System.DateOnly.TryParseExactInternal | parameter | 32 | -| Parameter 4 of System.DateTime.GetTime | parameter | 32 | -| Parameter 4 of System.DateTime.GetTimePrecise | parameter | 32 | -| Parameter 4 of System.DateTime.TryParseExact | parameter | 32 | -| Parameter 4 of System.DateTimeFormat.FormatCustomized | parameter | 32 | -| Parameter 4 of System.DateTimeFormat.FormatCustomizedTimeZone | parameter | 32 | -| Parameter 4 of System.DateTimeFormat.TryFormatDateOnlyO | parameter | 32 | -| Parameter 4 of System.DateTimeFormat.TryFormatTimeOnlyR | parameter | 32 | -| Parameter 4 of System.DateTimeOffset.TryParseExact | parameter | 32 | -| Parameter 4 of System.DateTimeParse.DoStrictParse | parameter | 32 | -| Parameter 4 of System.DateTimeParse.Lex | parameter | 32 | -| Parameter 4 of System.DateTimeParse.ParseByFormat | parameter | 32 | -| Parameter 4 of System.DateTimeParse.ParseExact | parameter | 32 | -| Parameter 4 of System.DateTimeParse.ParseExactMultiple | parameter | 32 | -| Parameter 4 of System.DateTimeParse.SetIfStartsWith | parameter | 32 | -| Parameter 4 of System.DateTimeParse.TryParse | parameter | 32 | -| Parameter 4 of System.DateTimeParse.TryParseExact | parameter | 32 | -| Parameter 4 of System.DateTimeParse.TryParseExactMultiple | parameter | 32 | -| Parameter 4 of System.Diagnostics.Debug.AssertInterpolatedStringHandler..ctor | parameter | 32 | -| Parameter 4 of System.Diagnostics.Debug.WriteIfInterpolatedStringHandler..ctor | parameter | 32 | -| Parameter 4 of System.Diagnostics.Tracing.ActivityTracker.OnStart | parameter | 32 | -| Parameter 4 of System.Diagnostics.Tracing.ActivityTracker.OnStop | parameter | 32 | -| Parameter 4 of System.Diagnostics.Tracing.EventSource.UpdateDescriptor | parameter | 32 | -| Parameter 4 of System.Diagnostics.Tracing.EventSource.Write | parameter | 32 | -| Parameter 4 of System.Enum.<TryParse>g__TryParseRareTypes\|41_0 | parameter | 32 | -| Parameter 4 of System.Enum.TryFormatFlagNames | parameter | 32 | -| Parameter 4 of System.Enum.TryParse | parameter | 32 | -| Parameter 4 of System.Enum.TryParseByName | parameter | 32 | -| Parameter 4 of System.Enum.TryParseByValueOrName | parameter | 32 | -| Parameter 4 of System.Enum.TryParseRareTypeByValueOrName | parameter | 32 | -| Parameter 4 of System.Globalization.CalendarData.EnumMonthNames | parameter | 32 | -| Parameter 4 of System.Globalization.CompareInfo.IndexOf | parameter | 32 | -| Parameter 4 of System.Globalization.CompareInfo.IsPrefix | parameter | 32 | -| Parameter 4 of System.Globalization.CompareInfo.IsSuffix | parameter | 32 | -| Parameter 4 of System.Globalization.CompareInfo.LastIndexOf | parameter | 32 | -| Parameter 4 of System.Globalization.DateTimeFormatInfo.Tokenize | parameter | 32 | -| Parameter 4 of System.Globalization.EastAsianLunisolarCalendar.GregorianToLunar | parameter | 32 | -| Parameter 4 of System.Globalization.EastAsianLunisolarCalendar.LunarToGregorian | parameter | 32 | -| Parameter 4 of System.Globalization.EastAsianLunisolarCalendar.TimeToLunar | parameter | 32 | -| Parameter 4 of System.Globalization.PersianCalendar.GetDate | parameter | 32 | -| Parameter 4 of System.Globalization.TimeSpanFormat.TryFormatStandard | parameter | 32 | -| Parameter 4 of System.Globalization.TimeSpanParse.ParseExactDigits | parameter | 32 | -| Parameter 4 of System.Globalization.TimeSpanParse.TryParseExact | parameter | 32 | -| Parameter 4 of System.Globalization.TimeSpanParse.TryParseExactMultiple | parameter | 32 | -| Parameter 4 of System.Globalization.TimeSpanParse.TryParseExactMultipleTimeSpan | parameter | 32 | -| Parameter 4 of System.Globalization.TimeSpanParse.TryParseExactTimeSpan | parameter | 32 | -| Parameter 4 of System.Globalization.UmAlQuraCalendar.ConvertHijriToGregorian | parameter | 32 | -| Parameter 4 of System.IO.BufferedStream.ReadFromBuffer | parameter | 32 | -| Parameter 4 of System.IO.KeyParser.Parse | parameter | 32 | -| Parameter 4 of System.IO.Path.TryJoin | parameter | 32 | -| Parameter 4 of System.MemoryExtensions.TryWriteInterpolatedStringHandler..ctor | parameter | 32 | -| Parameter 4 of System.Number.<TryFormatInt64>g__TryFormatInt64Slow\|46_0 | parameter | 32 | -| Parameter 4 of System.Number.<TryFormatInt128>g__TryFormatInt128Slow\|50_0 | parameter | 32 | -| Parameter 4 of System.Number.<TryFormatUInt32>g__TryFormatUInt32Slow\|44_0 | parameter | 32 | -| Parameter 4 of System.Number.<TryFormatUInt64>g__TryFormatUInt64Slow\|48_0 | parameter | 32 | -| Parameter 4 of System.Number.<TryFormatUInt128>g__TryFormatUInt128Slow\|52_0 | parameter | 32 | -| Parameter 4 of System.Number.Grisu3.TryDigitGenCounted | parameter | 32 | -| Parameter 4 of System.Number.Grisu3.TryDigitGenShortest | parameter | 32 | -| Parameter 4 of System.Number.Grisu3.TryRunCounted | parameter | 32 | -| Parameter 4 of System.Number.Grisu3.TryRunShortest | parameter | 32 | -| Parameter 4 of System.Number.TryFormatDecimal | parameter | 32 | -| Parameter 4 of System.Number.TryFormatDouble | parameter | 32 | -| Parameter 4 of System.Number.TryFormatHalf | parameter | 32 | -| Parameter 4 of System.Number.TryFormatInt64 | parameter | 32 | -| Parameter 4 of System.Number.TryFormatInt128 | parameter | 32 | -| Parameter 4 of System.Number.TryFormatSingle | parameter | 32 | -| Parameter 4 of System.Number.TryFormatUInt32 | parameter | 32 | -| Parameter 4 of System.Number.TryFormatUInt64 | parameter | 32 | -| Parameter 4 of System.Number.TryFormatUInt128 | parameter | 32 | -| Parameter 4 of System.Number.TryInt32ToHexStr | parameter | 32 | -| Parameter 4 of System.Number.TryInt64ToHexStr | parameter | 32 | -| Parameter 4 of System.Number.TryInt128ToHexStr | parameter | 32 | -| Parameter 4 of System.Number.TryNegativeInt32ToDecStr | parameter | 32 | -| Parameter 4 of System.Number.TryNegativeInt64ToDecStr | parameter | 32 | -| Parameter 4 of System.Number.TryNegativeInt128ToDecStr | parameter | 32 | -| Parameter 4 of System.Numerics.Matrix4x4.Impl.CreateConstrainedBillboard | parameter | 32 | -| Parameter 4 of System.Reflection.AssemblyName.EscapeString | parameter | 32 | -| Parameter 4 of System.Reflection.Associates.AssignAssociates | parameter | 32 | -| Parameter 4 of System.Reflection.CustomAttribute.GetPropertyOrFieldData | parameter | 32 | -| Parameter 4 of System.Reflection.CustomAttribute._GetPropertyOrFieldData | parameter | 32 | -| Parameter 4 of System.Reflection.CustomAttribute._ParseAttributeUsageAttribute | parameter | 32 | -| Parameter 4 of System.Reflection.Emit.DynamicResolver.ResolveToken | parameter | 32 | -| Parameter 4 of System.Reflection.MetadataImport.GetDefaultValue | parameter | 32 | -| Parameter 4 of System.Reflection.MetadataImport.GetMarshalAs | parameter | 32 | -| Parameter 4 of System.Reflection.MetadataImport.GetPInvokeMap | parameter | 32 | -| Parameter 4 of System.Reflection.MetadataImport.GetPropertyProps | parameter | 32 | -| Parameter 4 of System.Reflection.MetadataImport._GetDefaultValue | parameter | 32 | -| Parameter 4 of System.Reflection.MetadataImport._GetMarshalAs | parameter | 32 | -| Parameter 4 of System.Reflection.MetadataImport._GetPropertyProps | parameter | 32 | -| Parameter 4 of System.Reflection.NullabilityInfoContext.GetNullabilityInfo | parameter | 32 | -| Parameter 4 of System.Reflection.RuntimeAssembly.GetVersion | parameter | 32 | -| Parameter 4 of System.Reflection.RuntimeEventInfo..ctor | parameter | 32 | -| Parameter 4 of System.Reflection.RuntimePropertyInfo..ctor | parameter | 32 | -| Parameter 4 of System.Resolver.ResolveToken | parameter | 32 | -| Parameter 4 of System.Runtime.InteropServices.ComTypes.IMoniker.BindToObject | parameter | 32 | -| Parameter 4 of System.Runtime.InteropServices.ComTypes.IMoniker.BindToStorage | parameter | 32 | -| Parameter 4 of System.Runtime.InteropServices.ComTypes.IMoniker.ParseDisplayName | parameter | 32 | -| Parameter 4 of System.Runtime.InteropServices.ComTypes.IMoniker.Reduce | parameter | 32 | -| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeComp.Bind | parameter | 32 | -| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeComp.BindType | parameter | 32 | -| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetDocumentation | parameter | 32 | -| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetDocumentation2 | parameter | 32 | -| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetNames | parameter | 32 | -| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetParamCustData | parameter | 32 | -| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.Invoke | parameter | 32 | -| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetDocumentation | parameter | 32 | -| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetNames | parameter | 32 | -| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeInfo.Invoke | parameter | 32 | -| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetDocumentation | parameter | 32 | -| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetDocumentation2 | parameter | 32 | -| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeLib.GetDocumentation | parameter | 32 | -| Parameter 4 of System.Runtime.InteropServices.ComWrappers.CallComputeVtables | parameter | 32 | -| Parameter 4 of System.Runtime.InteropServices.ComWrappers.TryGetOrCreateComInterfaceForObjectInternal | parameter | 32 | -| Parameter 4 of System.RuntimeFieldHandle.GetValue | parameter | 32 | -| Parameter 4 of System.RuntimeType.FilterHelper | parameter | 32 | -| Parameter 4 of System.RuntimeType.RuntimeTypeCache.MemberInfoCache.PopulateEvents | parameter | 32 | -| Parameter 4 of System.RuntimeType.RuntimeTypeCache.MemberInfoCache<!0>.PopulateEvents | parameter | 32 | -| Parameter 4 of System.RuntimeTypeHandle.GetActivationInfo | parameter | 32 | -| Parameter 4 of System.TermInfo.ParameterizedStrings.EvaluateInternal | parameter | 32 | -| Parameter 4 of System.Text.ASCIIEncoding.GetByteCountFast | parameter | 32 | -| Parameter 4 of System.Text.ASCIIEncoding.GetCharCountFast | parameter | 32 | -| Parameter 4 of System.Text.Decoder.Convert | parameter | 32 | -| Parameter 4 of System.Text.DecoderFallbackBuffer.TryInternalFallbackGetChars | parameter | 32 | -| Parameter 4 of System.Text.Encoder.Convert | parameter | 32 | -| Parameter 4 of System.Text.EncoderFallbackBuffer.TryInternalFallbackGetBytes | parameter | 32 | -| Parameter 4 of System.Text.EncoderNLS.TryDrainLeftoverDataForGetBytes | parameter | 32 | -| Parameter 4 of System.Text.Encoding.GetByteCountFast | parameter | 32 | -| Parameter 4 of System.Text.Encoding.GetCharCountFast | parameter | 32 | -| Parameter 4 of System.Text.Latin1Encoding.GetByteCountFast | parameter | 32 | -| Parameter 4 of System.Text.Latin1Encoding.GetCharCountFast | parameter | 32 | -| Parameter 4 of System.Text.StringBuilder.MakeRoom | parameter | 32 | -| Parameter 4 of System.Text.StringBuilder.Remove | parameter | 32 | -| Parameter 4 of System.Text.UTF8Encoding.GetByteCountFast | parameter | 32 | -| Parameter 4 of System.Text.UTF8Encoding.GetCharCountFast | parameter | 32 | -| Parameter 4 of System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler..ctor | parameter | 32 | -| Parameter 4 of System.Text.Unicode.Utf8Utility.TranscodeToUtf8 | parameter | 32 | -| Parameter 4 of System.Text.Unicode.Utf8Utility.TranscodeToUtf16 | parameter | 32 | -| Parameter 4 of System.Threading.EventWaitHandle..ctor | parameter | 32 | -| Parameter 4 of System.Threading.EventWaitHandle.CreateEventCore | parameter | 32 | -| Parameter 4 of System.Threading.Semaphore..ctor | parameter | 32 | -| Parameter 4 of System.Threading.Semaphore.CreateSemaphoreCore | parameter | 32 | -| Parameter 4 of System.TimeOnly.Deconstruct | parameter | 32 | -| Parameter 4 of System.TimeOnly.TryParseExact | parameter | 32 | -| Parameter 4 of System.TimeOnly.TryParseExactInternal | parameter | 32 | -| Parameter 4 of System.TimeSpan.TryParseExact | parameter | 32 | -| Parameter 4 of System.TimeZoneInfo.TZif_ParsePosixFormat | parameter | 32 | -| Parameter 4 of System.TimeZoneInfo.TZif_ParseRaw | parameter | 32 | -| Parameter 4 of System.TupleExtensions.Deconstruct | parameter | 32 | -| Parameter 5 of System.Buffers.Text.Utf8Parser.TryParseAsSpecialFloatingPoint | parameter | 32 | -| Parameter 5 of System.DateTimeFormat.TryFormatDateOnlyR | parameter | 32 | -| Parameter 5 of System.DateTimeFormat.TryFormatTimeOnlyO | parameter | 32 | -| Parameter 5 of System.DateTimeParse.Lex | parameter | 32 | -| Parameter 5 of System.DateTimeParse.TryParseExact | parameter | 32 | -| Parameter 5 of System.DateTimeParse.TryParseExactMultiple | parameter | 32 | -| Parameter 5 of System.Diagnostics.Tracing.ActivityTracker.OnStart | parameter | 32 | -| Parameter 5 of System.Diagnostics.Tracing.EventSource.Write | parameter | 32 | -| Parameter 5 of System.Enum.TryFindFlagsNames | parameter | 32 | -| Parameter 5 of System.Globalization.EastAsianLunisolarCalendar.GregorianToLunar | parameter | 32 | -| Parameter 5 of System.Globalization.EastAsianLunisolarCalendar.LunarToGregorian | parameter | 32 | -| Parameter 5 of System.Globalization.UmAlQuraCalendar.ConvertHijriToGregorian | parameter | 32 | -| Parameter 5 of System.MemoryExtensions.TryWriteInterpolatedStringHandler..ctor | parameter | 32 | -| Parameter 5 of System.Number.<TryFormatInt32>g__TryFormatInt32Slow\|42_0 | parameter | 32 | -| Parameter 5 of System.Number.Grisu3.TryDigitGenShortest | parameter | 32 | -| Parameter 5 of System.Number.Grisu3.TryRoundWeedCounted | parameter | 32 | -| Parameter 5 of System.Number.Grisu3.TryRunShortest | parameter | 32 | -| Parameter 5 of System.Number.TryFormatInt32 | parameter | 32 | -| Parameter 5 of System.Reflection.AssemblyName.EnsureDestinationSize | parameter | 32 | -| Parameter 5 of System.Reflection.Associates.AssignAssociates | parameter | 32 | -| Parameter 5 of System.Reflection.CustomAttribute.CreateCaObject | parameter | 32 | -| Parameter 5 of System.Reflection.CustomAttribute.GetPropertyOrFieldData | parameter | 32 | -| Parameter 5 of System.Reflection.CustomAttribute._GetPropertyOrFieldData | parameter | 32 | -| Parameter 5 of System.Reflection.MetadataImport.GetMarshalAs | parameter | 32 | -| Parameter 5 of System.Reflection.MetadataImport._GetMarshalAs | parameter | 32 | -| Parameter 5 of System.Runtime.InteropServices.ComTypes.IMoniker.ParseDisplayName | parameter | 32 | -| Parameter 5 of System.Runtime.InteropServices.ComTypes.ITypeComp.Bind | parameter | 32 | -| Parameter 5 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetDocumentation | parameter | 32 | -| Parameter 5 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetDocumentation | parameter | 32 | -| Parameter 5 of System.Runtime.InteropServices.ComTypes.ITypeLib2.FindName | parameter | 32 | -| Parameter 5 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetDocumentation | parameter | 32 | -| Parameter 5 of System.Runtime.InteropServices.ComTypes.ITypeLib.FindName | parameter | 32 | -| Parameter 5 of System.Runtime.InteropServices.ComTypes.ITypeLib.GetDocumentation | parameter | 32 | -| Parameter 5 of System.Runtime.InteropServices.ComWrappers.TryGetOrCreateObjectForComInstanceInternal | parameter | 32 | -| Parameter 5 of System.RuntimeType.FilterHelper | parameter | 32 | -| Parameter 5 of System.RuntimeType.RuntimeTypeCache.MemberInfoCache.PopulateRtFields | parameter | 32 | -| Parameter 5 of System.RuntimeType.RuntimeTypeCache.MemberInfoCache<!0>.PopulateRtFields | parameter | 32 | -| Parameter 5 of System.TermInfo.ParameterizedStrings.EvaluateInternal | parameter | 32 | -| Parameter 5 of System.Text.ASCIIEncoding.GetBytesFast | parameter | 32 | -| Parameter 5 of System.Text.ASCIIEncoding.GetCharsFast | parameter | 32 | -| Parameter 5 of System.Text.Decoder.Convert | parameter | 32 | -| Parameter 5 of System.Text.Encoder.Convert | parameter | 32 | -| Parameter 5 of System.Text.Encoding.GetBytesFast | parameter | 32 | -| Parameter 5 of System.Text.Encoding.GetCharsFast | parameter | 32 | -| Parameter 5 of System.Text.Latin1Encoding.GetBytesFast | parameter | 32 | -| Parameter 5 of System.Text.Latin1Encoding.GetCharsFast | parameter | 32 | -| Parameter 5 of System.Text.UTF8Encoding.GetBytesFast | parameter | 32 | -| Parameter 5 of System.Text.UTF8Encoding.GetCharsFast | parameter | 32 | -| Parameter 5 of System.Text.Unicode.Utf8.TryWriteInterpolatedStringHandler..ctor | parameter | 32 | -| Parameter 5 of System.Text.Unicode.Utf8Utility.TranscodeToUtf8 | parameter | 32 | -| Parameter 5 of System.Text.Unicode.Utf8Utility.TranscodeToUtf16 | parameter | 32 | -| Parameter 5 of System.TimeOnly.Deconstruct | parameter | 32 | -| Parameter 5 of System.TimeZoneInfo.GetIsDaylightSavingsFromUtc | parameter | 32 | -| Parameter 5 of System.TimeZoneInfo.TZif_ParsePosixFormat | parameter | 32 | -| Parameter 5 of System.TimeZoneInfo.TZif_ParseRaw | parameter | 32 | -| Parameter 5 of System.TupleExtensions.Deconstruct | parameter | 32 | -| Parameter 6 of System.Buffers.Text.Utf8Parser.TryCreateTimeSpan | parameter | 32 | -| Parameter 6 of System.Enum.TryFindFlagsNames | parameter | 32 | -| Parameter 6 of System.Globalization.EastAsianLunisolarCalendar.GregorianToLunar | parameter | 32 | -| Parameter 6 of System.Globalization.EastAsianLunisolarCalendar.LunarToGregorian | parameter | 32 | -| Parameter 6 of System.Globalization.TimeSpanParse.TryTimeToTicks | parameter | 32 | -| Parameter 6 of System.Reflection.Associates.AssignAssociates | parameter | 32 | -| Parameter 6 of System.Reflection.CustomAttribute.FilterCustomAttributeRecord | parameter | 32 | -| Parameter 6 of System.Reflection.CustomAttribute.GetPropertyOrFieldData | parameter | 32 | -| Parameter 6 of System.Reflection.CustomAttribute._GetPropertyOrFieldData | parameter | 32 | -| Parameter 6 of System.Reflection.MetadataImport.GetMarshalAs | parameter | 32 | -| Parameter 6 of System.Reflection.MetadataImport._GetMarshalAs | parameter | 32 | -| Parameter 6 of System.Runtime.InteropServices.ComTypes.ITypeComp.Bind | parameter | 32 | -| Parameter 6 of System.RuntimeFieldHandle.SetValue | parameter | 32 | -| Parameter 6 of System.RuntimeType.RuntimeTypeCache.MemberInfoCache.PopulateProperties | parameter | 32 | -| Parameter 6 of System.RuntimeType.RuntimeTypeCache.MemberInfoCache<!0>.PopulateProperties | parameter | 32 | -| Parameter 6 of System.Text.Decoder.Convert | parameter | 32 | -| Parameter 6 of System.Text.DecoderNLS.Convert | parameter | 32 | -| Parameter 6 of System.Text.Encoder.Convert | parameter | 32 | -| Parameter 6 of System.Text.EncoderNLS.Convert | parameter | 32 | -| Parameter 6 of System.TimeZoneInfo.TZif_ParsePosixFormat | parameter | 32 | -| Parameter 6 of System.TupleExtensions.Deconstruct | parameter | 32 | -| Parameter 7 of Microsoft.Win32.SafeHandles.SafeFileHandle.Init | parameter | 32 | -| Parameter 7 of Microsoft.Win32.SafeHandles.SafeFileHandle.Open | parameter | 32 | -| Parameter 7 of System.Buffers.Text.Utf8Parser.TryCreateDateTimeOffsetInterpretingDataAsLocalTime | parameter | 32 | -| Parameter 7 of System.DateTime.TryCreate | parameter | 32 | -| Parameter 7 of System.DefaultBinder.BindToMethod | parameter | 32 | -| Parameter 7 of System.Number.Dragon4 | parameter | 32 | -| Parameter 7 of System.Reflection.Associates.AssignAssociates | parameter | 32 | -| Parameter 7 of System.Reflection.Binder.BindToMethod | parameter | 32 | -| Parameter 7 of System.Reflection.CustomAttribute.FilterCustomAttributeRecord | parameter | 32 | -| Parameter 7 of System.Reflection.MetadataImport.GetMarshalAs | parameter | 32 | -| Parameter 7 of System.Reflection.MetadataImport._GetMarshalAs | parameter | 32 | -| Parameter 7 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.Invoke | parameter | 32 | -| Parameter 7 of System.Runtime.InteropServices.ComTypes.ITypeInfo.Invoke | parameter | 32 | -| Parameter 7 of System.Text.Decoder.Convert | parameter | 32 | -| Parameter 7 of System.Text.DecoderNLS.Convert | parameter | 32 | -| Parameter 7 of System.Text.Encoder.Convert | parameter | 32 | -| Parameter 7 of System.Text.EncoderNLS.Convert | parameter | 32 | -| Parameter 7 of System.TimeZoneInfo.TZif_ParsePosixFormat | parameter | 32 | -| Parameter 7 of System.TupleExtensions.Deconstruct | parameter | 32 | -| Parameter 8 of Microsoft.Win32.SafeHandles.SafeFileHandle.Init | parameter | 32 | -| Parameter 8 of Microsoft.Win32.SafeHandles.SafeFileHandle.Open | parameter | 32 | -| Parameter 8 of System.Activator.CreateInstanceInternal | parameter | 32 | -| Parameter 8 of System.Buffers.Text.Utf8Parser.TryCreateDateTime | parameter | 32 | -| Parameter 8 of System.Reflection.Associates.AssignAssociates | parameter | 32 | -| Parameter 8 of System.Reflection.CustomAttribute.FilterCustomAttributeRecord | parameter | 32 | -| Parameter 8 of System.Reflection.MetadataImport.GetMarshalAs | parameter | 32 | -| Parameter 8 of System.Reflection.MetadataImport._GetMarshalAs | parameter | 32 | -| Parameter 8 of System.Text.Decoder.Convert | parameter | 32 | -| Parameter 8 of System.Text.DecoderNLS.Convert | parameter | 32 | -| Parameter 8 of System.Text.Encoder.Convert | parameter | 32 | -| Parameter 8 of System.Text.EncoderNLS.Convert | parameter | 32 | -| Parameter 8 of System.TimeZoneInfo.TZif_ParsePosixFormat | parameter | 32 | -| Parameter 8 of System.TupleExtensions.Deconstruct | parameter | 32 | -| Parameter 9 of System.Globalization.Calendar.TryToDateTime | parameter | 32 | -| Parameter 9 of System.Globalization.GregorianCalendar.TryToDateTime | parameter | 32 | -| Parameter 9 of System.Reflection.Associates.AssignAssociates | parameter | 32 | -| Parameter 9 of System.Reflection.CustomAttribute.FilterCustomAttributeRecord | parameter | 32 | -| Parameter 9 of System.Reflection.MetadataImport.GetMarshalAs | parameter | 32 | -| Parameter 9 of System.Reflection.MetadataImport._GetMarshalAs | parameter | 32 | -| Parameter 9 of System.Text.Decoder.Convert | parameter | 32 | -| Parameter 9 of System.Text.DecoderNLS.Convert | parameter | 32 | -| Parameter 9 of System.Text.Encoder.Convert | parameter | 32 | -| Parameter 9 of System.Text.EncoderNLS.Convert | parameter | 32 | -| Parameter 9 of System.TupleExtensions.Deconstruct | parameter | 32 | -| Parameter 10 of Microsoft.Win32.SafeHandles.SafeFileHandle.Open | parameter | 32 | -| Parameter 10 of System.Buffers.Text.Utf8Parser.TryCreateDateTimeOffset | parameter | 32 | -| Parameter 10 of System.Diagnostics.StackFrameHelper.GetSourceLineInfoDelegate.Invoke | parameter | 32 | -| Parameter 10 of System.Reflection.Associates.AssignAssociates | parameter | 32 | -| Parameter 10 of System.Reflection.MetadataImport._GetMarshalAs | parameter | 32 | -| Parameter 10 of System.Text.Decoder.Convert | parameter | 32 | -| Parameter 10 of System.Text.DecoderNLS.Convert | parameter | 32 | -| Parameter 10 of System.Text.Encoder.Convert | parameter | 32 | -| Parameter 10 of System.Text.EncoderNLS.Convert | parameter | 32 | -| Parameter 10 of System.TupleExtensions.Deconstruct | parameter | 32 | -| Parameter 11 of System.Diagnostics.StackFrameHelper.GetSourceLineInfoDelegate.Invoke | parameter | 32 | -| Parameter 11 of System.Reflection.Associates.AssignAssociates | parameter | 32 | -| Parameter 11 of System.TupleExtensions.Deconstruct | parameter | 32 | -| Parameter 12 of System.Diagnostics.StackFrameHelper.GetSourceLineInfoDelegate.Invoke | parameter | 32 | -| Parameter 12 of System.TupleExtensions.Deconstruct | parameter | 32 | -| Parameter 13 of System.TupleExtensions.Deconstruct | parameter | 32 | -| Parameter 14 of System.TupleExtensions.Deconstruct | parameter | 32 | -| Parameter 15 of System.TupleExtensions.Deconstruct | parameter | 32 | -| Parameter 16 of System.TupleExtensions.Deconstruct | parameter | 32 | -| Parameter 17 of System.TupleExtensions.Deconstruct | parameter | 32 | -| Parameter 18 of System.TupleExtensions.Deconstruct | parameter | 32 | -| Parameter 19 of System.TupleExtensions.Deconstruct | parameter | 32 | -| Parameter 20 of System.TupleExtensions.Deconstruct | parameter | 32 | -| Parameter 21 of System.TupleExtensions.Deconstruct | parameter | 32 | -| System.Collections.Generic.Dictionary.CollectionsMarshalHelper.GetValueRefOrAddDefault | method | 32 | -| System.Collections.Generic.Dictionary.FindValue | method | 32 | -| System.Collections.Generic.Dictionary.GetBucket | method | 32 | -| System.Collections.Generic.Dictionary<!0,!1>.CollectionsMarshalHelper.GetValueRefOrAddDefault | method | 32 | -| System.Collections.Generic.Dictionary<!0,!1>.FindValue | method | 32 | -| System.Collections.Generic.Dictionary<!0,!1>.GetBucket | method | 32 | -| System.Collections.Generic.HashSet.GetBucketRef | method | 32 | -| System.Collections.Generic.HashSet<!0>.GetBucketRef | method | 32 | -| System.Collections.Generic.ValueListBuilder.Item | property | 32 | -| System.Collections.Generic.ValueListBuilder.get_Item | method | 32 | -| System.Collections.Generic.ValueListBuilder<!0>.get_Item | method | 32 | -| System.Collections.Generic.ValueListBuilder<Int32>.get_Item | method | 32 | -| System.Decimal.AsMutable | method | 32 | -| System.Diagnostics.Tracing.EventWrittenEventArgs.Metadata | property | 32 | -| System.Diagnostics.Tracing.EventWrittenEventArgs.get_Metadata | method | 32 | -| System.Nullable.GetValueRefOrDefaultRef | method | 32 | -| System.Numerics.Matrix3x2.AsImpl | method | 32 | -| System.Numerics.Matrix3x2.AsROImpl | method | 32 | -| System.Numerics.Matrix3x2.Impl.AsM3x2 | method | 32 | -| System.Numerics.Matrix4x4.AsImpl | method | 32 | -| System.Numerics.Matrix4x4.AsROImpl | method | 32 | -| System.Numerics.Matrix4x4.Impl.AsM4x4 | method | 32 | -| System.ReadOnlySpan.Enumerator.Current | property | 32 | -| System.ReadOnlySpan.Enumerator.get_Current | method | 32 | -| System.ReadOnlySpan.GetPinnableReference | method | 32 | -| System.ReadOnlySpan.Item | property | 32 | -| System.ReadOnlySpan.get_Item | method | 32 | -| System.ReadOnlySpan<!0>.get_Item | method | 32 | -| System.ReadOnlySpan<!1>.get_Item | method | 32 | -| System.ReadOnlySpan<Boolean>.get_Item | method | 32 | -| System.ReadOnlySpan<Byte>.GetPinnableReference | method | 32 | -| System.ReadOnlySpan<Byte>.get_Item | method | 32 | -| System.ReadOnlySpan<Char>.get_Item | method | 32 | -| System.ReadOnlySpan<Double>.get_Item | method | 32 | -| System.ReadOnlySpan<Int16>.get_Item | method | 32 | -| System.ReadOnlySpan<Int32>.get_Item | method | 32 | -| System.ReadOnlySpan<Int128>.get_Item | method | 32 | -| System.ReadOnlySpan<IntPtr>.GetPinnableReference | method | 32 | -| System.ReadOnlySpan<IntPtr>.get_Item | method | 32 | -| System.ReadOnlySpan<KeyValuePair<!0,!1>>.get_Item | method | 32 | -| System.ReadOnlySpan<Object>.get_Item | method | 32 | -| System.ReadOnlySpan<SafeWaitHandle>.get_Item | method | 32 | -| System.ReadOnlySpan<Single>.get_Item | method | 32 | -| System.ReadOnlySpan<String>.get_Item | method | 32 | -| System.ReadOnlySpan<Task>.get_Item | method | 32 | -| System.ReadOnlySpan<UInt16>.get_Item | method | 32 | -| System.ReadOnlySpan<UInt32>.get_Item | method | 32 | -| System.ReadOnlySpan<UInt64>.get_Item | method | 32 | -| System.ReadOnlySpan<WaitHandle>.get_Item | method | 32 | -| System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AsyncStateMachineBox.Context | property | 32 | -| System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AsyncStateMachineBox.get_Context | method | 32 | -| System.Runtime.CompilerServices.AsyncTaskMethodBuilder<!0>.AsyncStateMachineBox<!0>.get_Context | method | 32 | -| System.Runtime.CompilerServices.AsyncTaskMethodBuilder<!0>.AsyncStateMachineBox<IAsyncStateMachine>.get_Context | method | 32 | -| System.Runtime.CompilerServices.CastCache.Element | method | 32 | -| System.Runtime.CompilerServices.CastCache.HashShift | method | 32 | -| System.Runtime.CompilerServices.CastCache.TableData | method | 32 | -| System.Runtime.CompilerServices.CastCache.TableMask | method | 32 | -| System.Runtime.CompilerServices.CastHelpers.LdelemaRef | method | 32 | -| System.Runtime.CompilerServices.CastHelpers.ThrowArrayMismatchException | method | 32 | -| System.Runtime.CompilerServices.CastHelpers.Unbox | method | 32 | -| System.Runtime.CompilerServices.CastHelpers.Unbox_Helper | method | 32 | -| System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.StateMachineBox.PerCoreCacheSlot | property | 32 | -| System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.StateMachineBox.get_PerCoreCacheSlot | method | 32 | -| System.Runtime.CompilerServices.RuntimeHelpers.GetMultiDimensionalArrayBounds | method | 32 | -| System.Runtime.CompilerServices.RuntimeHelpers.GetRawData | method | 32 | -| System.Runtime.CompilerServices.Unsafe.Add | method | 32 | -| System.Runtime.CompilerServices.Unsafe.AddByteOffset | method | 32 | -| System.Runtime.CompilerServices.Unsafe.As | method | 32 | -| System.Runtime.CompilerServices.Unsafe.AsRef | method | 32 | -| System.Runtime.CompilerServices.Unsafe.NullRef | method | 32 | -| System.Runtime.CompilerServices.Unsafe.Subtract | method | 32 | -| System.Runtime.CompilerServices.Unsafe.SubtractByteOffset | method | 32 | -| System.Runtime.CompilerServices.Unsafe.Unbox | method | 32 | -| System.Runtime.InteropServices.CollectionsMarshal.GetValueRefOrAddDefault | method | 32 | -| System.Runtime.InteropServices.CollectionsMarshal.GetValueRefOrNullRef | method | 32 | -| System.Runtime.InteropServices.Marshalling.ArrayMarshaller.ManagedToUnmanagedIn.GetPinnableReference | method | 32 | -| System.Runtime.InteropServices.Marshalling.ArrayMarshaller<!0,!1>.ManagedToUnmanagedIn.GetPinnableReference | method | 32 | -| System.Runtime.InteropServices.Marshalling.ArrayMarshaller<Byte,Byte>.ManagedToUnmanagedIn.GetPinnableReference | method | 32 | -| System.Runtime.InteropServices.Marshalling.ArrayMarshaller<CalendarId,CalendarId>.ManagedToUnmanagedIn.GetPinnableReference | method | 32 | -| System.Runtime.InteropServices.Marshalling.ArrayMarshaller<Char,Char>.ManagedToUnmanagedIn.GetPinnableReference | method | 32 | -| System.Runtime.InteropServices.Marshalling.ArrayMarshaller<ExceptionHandler,ExceptionHandler>.ManagedToUnmanagedIn.GetPinnableReference | method | 32 | -| System.Runtime.InteropServices.Marshalling.ArrayMarshaller<Int32,Int32>.ManagedToUnmanagedIn.GetPinnableReference | method | 32 | -| System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller.ManagedToUnmanagedIn.GetPinnableReference | method | 32 | -| System.Runtime.InteropServices.Marshalling.PointerArrayMarshaller<!0,!1>.ManagedToUnmanagedIn.GetPinnableReference | method | 32 | -| System.Runtime.InteropServices.Marshalling.ReadOnlySpanMarshaller.ManagedToUnmanagedIn.GetPinnableReference | method | 32 | -| System.Runtime.InteropServices.Marshalling.ReadOnlySpanMarshaller<!0,!1>.ManagedToUnmanagedIn.GetPinnableReference | method | 32 | -| System.Runtime.InteropServices.Marshalling.ReadOnlySpanMarshaller<Byte,Byte>.ManagedToUnmanagedIn.GetPinnableReference | method | 32 | -| System.Runtime.InteropServices.Marshalling.ReadOnlySpanMarshaller<String,IntPtr>.ManagedToUnmanagedIn.GetPinnableReference | method | 32 | -| System.Runtime.InteropServices.Marshalling.SpanMarshaller.ManagedToUnmanagedIn.GetPinnableReference | method | 32 | -| System.Runtime.InteropServices.Marshalling.SpanMarshaller<!0,!1>.ManagedToUnmanagedIn.GetPinnableReference | method | 32 | -| System.Runtime.InteropServices.Marshalling.Utf16StringMarshaller.GetPinnableReference | method | 32 | -| System.Runtime.InteropServices.MemoryMarshal.AsRef | method | 32 | -| System.Runtime.InteropServices.MemoryMarshal.GetArrayDataReference | method | 32 | -| System.Runtime.InteropServices.MemoryMarshal.GetNonNullPinnableReference | method | 32 | -| System.Runtime.InteropServices.MemoryMarshal.GetReference | method | 32 | -| System.Span.Enumerator.Current | property | 32 | -| System.Span.Enumerator.get_Current | method | 32 | -| System.Span.GetPinnableReference | method | 32 | -| System.Span.Item | property | 32 | -| System.Span.get_Item | method | 32 | -| System.Span<!0>.get_Item | method | 32 | -| System.Span<!1>.get_Item | method | 32 | -| System.Span<Boolean>.get_Item | method | 32 | -| System.Span<Byte>.GetPinnableReference | method | 32 | -| System.Span<Byte>.get_Item | method | 32 | -| System.Span<Char>.GetPinnableReference | method | 32 | -| System.Span<Char>.get_Item | method | 32 | -| System.Span<EventPipeProviderConfigurationNative>.GetPinnableReference | method | 32 | -| System.Span<EventPipeProviderConfigurationNative>.get_Item | method | 32 | -| System.Span<IOVector>.get_Item | method | 32 | -| System.Span<Int32>.get_Item | method | 32 | -| System.Span<Int128>.get_Item | method | 32 | -| System.Span<IntPtr>.get_Item | method | 32 | -| System.Span<Object>.get_Item | method | 32 | -| System.Span<Range>.get_Item | method | 32 | -| System.Span<SafeWaitHandle>.get_Item | method | 32 | -| System.Span<UInt16>.get_Item | method | 32 | -| System.Span<UInt32>.GetPinnableReference | method | 32 | -| System.Span<UInt32>.get_Item | method | 32 | -| System.String.GetPinnableReference | method | 32 | -| System.String.GetRawStringData | method | 32 | -| System.String.GetRawStringDataAsUInt16 | method | 32 | -| System.Text.ValueStringBuilder.GetPinnableReference | method | 32 | -| System.Text.ValueStringBuilder.Item | property | 32 | -| System.Text.ValueStringBuilder.get_Item | method | 32 | -| System.Threading.Overlapped.GCHandleCountRef | method | 32 | -| System.Threading.Overlapped.GCHandleRef | method | 32 | -| Value | other | 32 | -| _arg0 | other | 32 | -| _reference | other | 32 | -| _value | other | 32 | diff --git a/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.ql b/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.ql deleted file mode 100644 index cf93110bc65..00000000000 --- a/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.ql +++ /dev/null @@ -1,93 +0,0 @@ -import cil -import semmle.code.csharp.commons.QualifiedName -import semmle.code.cil.Type - -private string elementType(Element e, string toString) { - exists(string namespace, string type, string name | - toString = getQualifiedName(namespace, type, name) - | - e.(Method).hasFullyQualifiedName(namespace, type, name) and result = "method" - or - e.(Property).hasFullyQualifiedName(namespace, type, name) and result = "property" - ) - or - e = - any(Parameter p | - exists(string qualifier, string name | - p.getDeclaringElement().hasFullyQualifiedName(qualifier, name) - | - toString = "Parameter " + p.getIndex() + " of " + getQualifiedName(qualifier, name) - ) - ) and - result = "parameter" - or - e = - any(LocalVariable v | - exists(string namespace, string type, string name | - v.getImplementation().getMethod().hasFullyQualifiedName(namespace, type, name) - | - toString = - "Local variable " + v.getIndex() + " of method " + getQualifiedName(namespace, type, name) - ) - ) and - result = "local" - or - exists(string qualifier, string name | - e.(FunctionPointerType).hasFullyQualifiedName(qualifier, name) - | - toString = getQualifiedName(qualifier, name) - ) and - result = "fnptr" - or - not e instanceof Method and - not e instanceof Property and - not e instanceof Parameter and - not e instanceof LocalVariable and - not e instanceof FunctionPointerType and - result = "other" and - toString = e.toString() -} - -private predicate exclude(string s) { - s in [ - "Parameter 0 of Interop.libobjc.NSOperatingSystemVersion_objc_msgSend_stret", - "Parameter 1 of Interop.procfs.TryParseStatusFile", - "Parameter 1 of Interop.procfs.TryReadFile", - "Parameter 1 of Interop.procfs.TryReadStatusFile", - "Parameter 1 of System.CLRConfig.GetBoolValue", - "Parameter 1 of System.CLRConfig.GetConfigBoolValue", - "Parameter 1 of System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.CreateReferenceTrackingHandleInternal", - "Parameter 2 of System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.CreateReferenceTrackingHandleInternal", - "Parameter 2 of Interop.OSReleaseFile.<GetPrettyName>g__TryGetFieldValue|1_0", - "Parameter 2 of System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.InvokeUnhandledExceptionPropagation", - "Parameter 3 of System.IO.FileSystem.<TryCloneFile>g__TryCloneFile|5_0", - "Parameter 3 of System.IO.FileSystem.TryCloneFile", - "Parameter 6 of Microsoft.Win32.SafeHandles.SafeFileHandle.OpenNoFollowSymlink", - "Local variable 1 of method Interop.libobjc.NSOperatingSystemVersion_objc_msgSend_stret", - "Local variable 1 of method System.Diagnostics.Tracing.XplatEventLogger.LogEventSource", - "Local variable 2 of method System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.CreateReferenceTrackingHandleInternal", - "Local variable 3 of method System.Diagnostics.Tracing.XplatEventLogger.LogEventSource", - "Local variable 4 of method System.CLRConfig.GetConfigBoolValue", - "Local variable 4 of method System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.CreateReferenceTrackingHandleInternal", - "Local variable 5 of method Interop.OSReleaseFile.<GetPrettyName>g__TryGetFieldValue|1_0", - "Local variable 5 of method System.Diagnostics.Tracing.XplatEventLogger.LogEventSource", - "Local variable 13 of method Interop.procfs.TryParseStatusFile", - "Parameter 0 of System.Diagnostics.Tracing.XplatEventLogger.AppendByteArrayAsHexString", - "Parameter 1 of System.Diagnostics.Tracing.XplatEventLogger.MinimalJsonserializer" - ] -} - -from Element e, int i, string toString, string type -where - cil_type_annotation(e, i) and - type = elementType(e, toString) and - not exclude(toString) and - ( - not e instanceof Parameter - or - not exists(Type t | - t = e.(Parameter).getDeclaringElement().(Method).getDeclaringType() and - t.hasFullyQualifiedName("System", "Environment") - ) // There are OS specific methods in this class - ) -select toString, type, i diff --git a/csharp/ql/test/library-tests/commons/Disposal/Class1.cs_ b/csharp/ql/test/library-tests/commons/Disposal/Class1.cs_ deleted file mode 100644 index ed948c053d0..00000000000 --- a/csharp/ql/test/library-tests/commons/Disposal/Class1.cs_ +++ /dev/null @@ -1,42 +0,0 @@ -using System; - -namespace DisposalTests -{ - public class MyType : IDisposable - { - public void Dispose() - { - } - } - - public class Class1 : IDisposable - { - public void DisposesParameter(IDisposable p1, IDisposable p2) - { - p1.Dispose(); - } - - public void CapturesDisposable(MyType p1, MyType p2) - { - field1 = p1; - field2 = p2; - } - - public void DisposesSelf() - { - Dispose(); - } - - MyType field1, field2; - - public void Dispose() - { - field1.Dispose(); - } - - public static void Dispose(IDisposable d) - { - d.Dispose(); - } - } -} diff --git a/csharp/ql/test/library-tests/commons/Disposal/Disposal.cs b/csharp/ql/test/library-tests/commons/Disposal/Disposal.cs index 4bbd4acc9f4..88e67c2cc95 100644 --- a/csharp/ql/test/library-tests/commons/Disposal/Disposal.cs +++ b/csharp/ql/test/library-tests/commons/Disposal/Disposal.cs @@ -14,11 +14,11 @@ class Disposal : IDisposable Close(); } - public Disposal(IDisposable p1, object p2, System.IO.TextWriter fs) + public Disposal(IDisposable p1, object p2, System.IO.TextWriter fs, IDisposable p3) { field1 = p1; - if(p2 is IDisposable d) + if (p2 is IDisposable d) d.Dispose(); - DisposalTests.Class1.Dispose(fs); + fs.Dispose(); } } diff --git a/csharp/ql/test/library-tests/commons/Disposal/DisposalTests.dll b/csharp/ql/test/library-tests/commons/Disposal/DisposalTests.dll deleted file mode 100644 index f731c5af9e1..00000000000 Binary files a/csharp/ql/test/library-tests/commons/Disposal/DisposalTests.dll and /dev/null differ diff --git a/csharp/ql/test/library-tests/commons/Disposal/DisposedFields.expected b/csharp/ql/test/library-tests/commons/Disposal/DisposedFields.expected deleted file mode 100644 index d3d33271d45..00000000000 --- a/csharp/ql/test/library-tests/commons/Disposal/DisposedFields.expected +++ /dev/null @@ -1 +0,0 @@ -| DisposalTests.Class1.field1 | diff --git a/csharp/ql/test/library-tests/commons/Disposal/DisposedFields.ql b/csharp/ql/test/library-tests/commons/Disposal/DisposedFields.ql deleted file mode 100644 index b9990bb7cdf..00000000000 --- a/csharp/ql/test/library-tests/commons/Disposal/DisposedFields.ql +++ /dev/null @@ -1,10 +0,0 @@ -import cil -import semmle.code.csharp.commons.Disposal -import semmle.code.csharp.commons.QualifiedName - -from CIL::Field field, string qualifier, string name -where - mayBeDisposed(field) and - field.getDeclaringType().hasFullyQualifiedName("DisposalTests", "Class1") and - field.hasFullyQualifiedName(qualifier, name) -select getQualifiedName(qualifier, name) diff --git a/csharp/ql/test/library-tests/commons/Disposal/DisposedParameter.expected b/csharp/ql/test/library-tests/commons/Disposal/DisposedParameter.expected index 33bd2568eca..459d4f55d76 100644 --- a/csharp/ql/test/library-tests/commons/Disposal/DisposedParameter.expected +++ b/csharp/ql/test/library-tests/commons/Disposal/DisposedParameter.expected @@ -1,6 +1,3 @@ -| CapturesDisposable(MyType, MyType) | 0 | -| Dispose(IDisposable) | 0 | -| DisposesParameter(IDisposable, IDisposable) | 0 | -| System.Void DisposalTests.Class1.CapturesDisposable(DisposalTests.MyType,DisposalTests.MyType) | 0 | -| System.Void DisposalTests.Class1.Dispose(System.IDisposable) | 0 | -| System.Void DisposalTests.Class1.DisposesParameter(System.IDisposable,System.IDisposable) | 0 | +| Disposal(IDisposable, object, TextWriter, IDisposable) | 0 | +| Disposal(IDisposable, object, TextWriter, IDisposable) | 1 | +| Disposal(IDisposable, object, TextWriter, IDisposable) | 2 | diff --git a/csharp/ql/test/library-tests/commons/Disposal/DisposedParameter.ql b/csharp/ql/test/library-tests/commons/Disposal/DisposedParameter.ql index 259b9dd11a8..634f4674d7d 100644 --- a/csharp/ql/test/library-tests/commons/Disposal/DisposedParameter.ql +++ b/csharp/ql/test/library-tests/commons/Disposal/DisposedParameter.ql @@ -1,9 +1,9 @@ -import dotnet +import csharp import semmle.code.csharp.commons.Disposal -from DotNet::Callable c, DotNet::Parameter param, int p +from Callable c, Parameter param, int p where mayBeDisposed(param) and param = c.getParameter(p) and - c.getDeclaringType().hasFullyQualifiedName("DisposalTests", "Class1") + c.getDeclaringType().hasFullyQualifiedName("", "Disposal") select c.toStringWithTypes(), p diff --git a/csharp/ql/test/library-tests/commons/Disposal/DisposedVariables.expected b/csharp/ql/test/library-tests/commons/Disposal/DisposedVariables.expected index e3c8b6886cb..39b670bb070 100644 --- a/csharp/ql/test/library-tests/commons/Disposal/DisposedVariables.expected +++ b/csharp/ql/test/library-tests/commons/Disposal/DisposedVariables.expected @@ -2,4 +2,4 @@ | Disposal.cs:17:33:17:34 | p1 | | Disposal.cs:17:44:17:45 | p2 | | Disposal.cs:17:69:17:70 | fs | -| Disposal.cs:20:30:20:30 | d | +| Disposal.cs:20:31:20:31 | d | diff --git a/csharp/ql/test/library-tests/commons/Disposal/UndisposedParameter.expected b/csharp/ql/test/library-tests/commons/Disposal/UndisposedParameter.expected index fb648f8e6f8..b176eb9e7cd 100644 --- a/csharp/ql/test/library-tests/commons/Disposal/UndisposedParameter.expected +++ b/csharp/ql/test/library-tests/commons/Disposal/UndisposedParameter.expected @@ -1,4 +1 @@ -| CapturesDisposable(MyType, MyType) | 1 | -| DisposesParameter(IDisposable, IDisposable) | 1 | -| System.Void DisposalTests.Class1.CapturesDisposable(DisposalTests.MyType,DisposalTests.MyType) | 1 | -| System.Void DisposalTests.Class1.DisposesParameter(System.IDisposable,System.IDisposable) | 1 | +| Disposal(IDisposable, object, TextWriter, IDisposable) | 3 | diff --git a/csharp/ql/test/library-tests/commons/Disposal/UndisposedParameter.ql b/csharp/ql/test/library-tests/commons/Disposal/UndisposedParameter.ql index 59e6c91013b..72203a8495a 100644 --- a/csharp/ql/test/library-tests/commons/Disposal/UndisposedParameter.ql +++ b/csharp/ql/test/library-tests/commons/Disposal/UndisposedParameter.ql @@ -1,10 +1,9 @@ -import dotnet +import csharp import semmle.code.csharp.commons.Disposal -import cil -from DotNet::Callable c, DotNet::Parameter param, int p +from Callable c, Parameter param, int p where not mayBeDisposed(param) and param = c.getParameter(p) and - c.getDeclaringType().hasFullyQualifiedName("DisposalTests", "Class1") + c.getDeclaringType().hasFullyQualifiedName("", "Disposal") select c.toStringWithTypes(), p diff --git a/csharp/ql/test/library-tests/commons/Disposal/options b/csharp/ql/test/library-tests/commons/Disposal/options index 3b212f77b23..a2a85ca7788 100644 --- a/csharp/ql/test/library-tests/commons/Disposal/options +++ b/csharp/ql/test/library-tests/commons/Disposal/options @@ -1 +1 @@ -semmle-extractor-options: --cil /r:System.Net.Http.dll /r:System.Runtime.Extensions.dll /r:System.Private.Xml.dll +semmle-extractor-options: /r:System.Net.Http.dll /r:System.Runtime.Extensions.dll /r:System.Private.Xml.dll diff --git a/csharp/ql/test/library-tests/controlflow/guards/options b/csharp/ql/test/library-tests/controlflow/guards/options index 85a6cc13696..1548e4eedaf 100644 --- a/csharp/ql/test/library-tests/controlflow/guards/options +++ b/csharp/ql/test/library-tests/controlflow/guards/options @@ -1,3 +1,2 @@ -semmle-extractor-options: --cil semmle-extractor-options: ${testdir}/../../../resources/stubs/Microsoft.VisualStudio.TestTools.UnitTesting.cs semmle-extractor-options: /r:System.Collections.Specialized.dll /r:System.Collections.dll /r:System.Linq.dll diff --git a/csharp/ql/test/library-tests/csharp11/PrintAst.expected b/csharp/ql/test/library-tests/csharp11/PrintAst.expected index 47f5e135395..4716334aca0 100644 --- a/csharp/ql/test/library-tests/csharp11/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp11/PrintAst.expected @@ -1448,12 +1448,3 @@ StructDefault.cs: # 11| 0: [AssignExpr] ... = ... # 11| 0: [FieldAccess] access to field Y # 11| 1: [IntLiteral] 1 -cil/class1.cs: -# 4| [Class] Class1 -# 6| 5: [Method] Main -# 6| -1: [TypeMention] Void -#-----| 2: (Parameters) -# 6| 0: [Parameter] args -# 6| -1: [TypeMention] String[] -# 6| 1: [TypeMention] string -# 6| 4: [BlockStmt] {...} diff --git a/csharp/ql/test/library-tests/csharp11/cil/Assembly.cs_ b/csharp/ql/test/library-tests/csharp11/cil/Assembly.cs_ deleted file mode 100644 index 3511e152a5e..00000000000 --- a/csharp/ql/test/library-tests/csharp11/cil/Assembly.cs_ +++ /dev/null @@ -1,16 +0,0 @@ -using System; - -namespace Assembly -{ - public class MyAssemblyGeneric1Attribute<T> : Attribute { } - public class MyAssemblyGeneric2Attribute<T, U> : Attribute { } - - public class TestAssemblyGenericAttribute - { - [MyAssemblyGeneric1Attribute<object>()] - public void M1() { } - - [MyAssemblyGeneric2<int, string>()] - public void M2() { } - } -} diff --git a/csharp/ql/test/library-tests/csharp11/cil/Struct.cs_ b/csharp/ql/test/library-tests/csharp11/cil/Struct.cs_ deleted file mode 100644 index 1ea483764f7..00000000000 --- a/csharp/ql/test/library-tests/csharp11/cil/Struct.cs_ +++ /dev/null @@ -1,14 +0,0 @@ -namespace structassembly; - -public class MyEmptyClass { } - -public ref struct RefStruct -{ - public int MyInt; - public ref byte MyByte; - public ref object MyObject; - internal ref MyEmptyClass MyEmptyClass; - public ref readonly byte MyReadonlyByte; - public readonly ref object MyReadonlyObject; - public readonly ref readonly string MyReadonlyString; -} \ No newline at end of file diff --git a/csharp/ql/test/library-tests/csharp11/cil/assembly.dll b/csharp/ql/test/library-tests/csharp11/cil/assembly.dll deleted file mode 100644 index 790a657a8d8..00000000000 Binary files a/csharp/ql/test/library-tests/csharp11/cil/assembly.dll and /dev/null differ diff --git a/csharp/ql/test/library-tests/csharp11/cil/class1.cs b/csharp/ql/test/library-tests/csharp11/cil/class1.cs deleted file mode 100644 index 141d836fd9e..00000000000 --- a/csharp/ql/test/library-tests/csharp11/cil/class1.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System; -using Assembly; - -public class Class1 -{ - public static void Main(string[] args) { } -} \ No newline at end of file diff --git a/csharp/ql/test/library-tests/csharp11/cil/genericAttribute.expected b/csharp/ql/test/library-tests/csharp11/cil/genericAttribute.expected deleted file mode 100644 index 2ff7cf5d931..00000000000 --- a/csharp/ql/test/library-tests/csharp11/cil/genericAttribute.expected +++ /dev/null @@ -1,2 +0,0 @@ -| assembly.dll:0:0:0:0 | [MyAssemblyGeneric1Attribute<Object>(...)] | MyAssemblyGeneric1Attribute<Object> | 1 | (Object) | -| assembly.dll:0:0:0:0 | [MyAssemblyGeneric2Attribute<Int32,String>(...)] | MyAssemblyGeneric2Attribute<Int32,String> | 2 | (Int32,String) | diff --git a/csharp/ql/test/library-tests/csharp11/cil/genericAttribute.ql b/csharp/ql/test/library-tests/csharp11/cil/genericAttribute.ql deleted file mode 100644 index 1b80efa1d89..00000000000 --- a/csharp/ql/test/library-tests/csharp11/cil/genericAttribute.ql +++ /dev/null @@ -1,9 +0,0 @@ -import semmle.code.cil.CIL - -private string getTypeArguments(GenericAttribute a) { - result = "(" + concat(Type t | t = a.getATypeArgument() | t.getName(), ",") + ")" -} - -from GenericAttribute a -where a.getFile().getStem() = "assembly" -select a, a.getType().getName(), a.getNumberOfTypeArguments(), getTypeArguments(a) diff --git a/csharp/ql/test/library-tests/csharp11/cil/options b/csharp/ql/test/library-tests/csharp11/cil/options deleted file mode 100644 index 8511aa162b8..00000000000 --- a/csharp/ql/test/library-tests/csharp11/cil/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: --cil diff --git a/csharp/ql/test/library-tests/csharp11/cil/refField.expected b/csharp/ql/test/library-tests/csharp11/cil/refField.expected deleted file mode 100644 index fbd3f405454..00000000000 --- a/csharp/ql/test/library-tests/csharp11/cil/refField.expected +++ /dev/null @@ -1,6 +0,0 @@ -| file://:0:0:0:0 | MyByte | Byte | -| file://:0:0:0:0 | MyEmptyClass | MyEmptyClass | -| file://:0:0:0:0 | MyObject | Object | -| file://:0:0:0:0 | MyReadonlyByte | Byte | -| file://:0:0:0:0 | MyReadonlyObject | Object | -| file://:0:0:0:0 | MyReadonlyString | String | diff --git a/csharp/ql/test/library-tests/csharp11/cil/refField.ql b/csharp/ql/test/library-tests/csharp11/cil/refField.ql deleted file mode 100644 index 32d7b295d62..00000000000 --- a/csharp/ql/test/library-tests/csharp11/cil/refField.ql +++ /dev/null @@ -1,5 +0,0 @@ -import cil - -query predicate cilfields(CIL::Field f, string type) { - f.isRef() and type = f.getType().toString() and f.getDeclaringType().getName() = "RefStruct" -} diff --git a/csharp/ql/test/library-tests/csharp11/cil/structassembly.dll b/csharp/ql/test/library-tests/csharp11/cil/structassembly.dll deleted file mode 100644 index 364ae8b1442..00000000000 Binary files a/csharp/ql/test/library-tests/csharp11/cil/structassembly.dll and /dev/null differ diff --git a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected index 4230fdcc5a1..7a71e3d37cb 100644 --- a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected @@ -4,12 +4,6 @@ edges | CollectionFlow.cs:14:52:14:53 | access to parameter ts : A[] [element] : A | CollectionFlow.cs:14:52:14:56 | access to array element | provenance | | | CollectionFlow.cs:14:52:14:53 | access to parameter ts : null [element] : A | CollectionFlow.cs:14:52:14:56 | access to array element | provenance | | | CollectionFlow.cs:16:49:16:52 | list : List<T> [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List<T> [element] : A | provenance | | -| CollectionFlow.cs:16:49:16:52 | list : List<T> [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List<T> [element] : A | provenance | | -| CollectionFlow.cs:16:49:16:52 | list : List<T> [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List<T> [element] : A | provenance | | -| CollectionFlow.cs:16:49:16:52 | list : List<T> [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List<T> [element] : A | provenance | | -| CollectionFlow.cs:16:63:16:66 | access to parameter list : List<T> [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | provenance | | -| CollectionFlow.cs:16:63:16:66 | access to parameter list : List<T> [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | provenance | | -| CollectionFlow.cs:16:63:16:66 | access to parameter list : List<T> [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | provenance | | | CollectionFlow.cs:16:63:16:66 | access to parameter list : List<T> [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | provenance | | | CollectionFlow.cs:18:61:18:64 | dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:18:75:18:78 | access to parameter dict : Dictionary<T,T> [element, property Value] : A | provenance | | | CollectionFlow.cs:18:75:18:78 | access to parameter dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:18:75:18:81 | access to indexer | provenance | | @@ -21,12 +15,6 @@ edges | CollectionFlow.cs:22:41:22:42 | access to parameter ts : A[] [element] : A | CollectionFlow.cs:22:41:22:45 | access to array element : A | provenance | | | CollectionFlow.cs:22:41:22:42 | access to parameter ts : null [element] : A | CollectionFlow.cs:22:41:22:45 | access to array element : A | provenance | | | CollectionFlow.cs:24:43:24:46 | list : List<T> [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List<T> [element] : A | provenance | | -| CollectionFlow.cs:24:43:24:46 | list : List<T> [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List<T> [element] : A | provenance | | -| CollectionFlow.cs:24:43:24:46 | list : List<T> [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List<T> [element] : A | provenance | | -| CollectionFlow.cs:24:43:24:46 | list : List<T> [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List<T> [element] : A | provenance | | -| CollectionFlow.cs:24:52:24:55 | access to parameter list : List<T> [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | provenance | | -| CollectionFlow.cs:24:52:24:55 | access to parameter list : List<T> [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | provenance | | -| CollectionFlow.cs:24:52:24:55 | access to parameter list : List<T> [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | provenance | | | CollectionFlow.cs:24:52:24:55 | access to parameter list : List<T> [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | provenance | | | CollectionFlow.cs:26:58:26:61 | dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:26:67:26:70 | access to parameter dict : Dictionary<T,T> [element, property Value] : A | provenance | | | CollectionFlow.cs:26:67:26:70 | access to parameter dict : Dictionary<T,T> [element, property Value] : A | CollectionFlow.cs:26:67:26:73 | access to indexer : A | provenance | | @@ -324,12 +312,6 @@ nodes | CollectionFlow.cs:14:52:14:53 | access to parameter ts : null [element] : A | semmle.label | access to parameter ts : null [element] : A | | CollectionFlow.cs:14:52:14:56 | access to array element | semmle.label | access to array element | | CollectionFlow.cs:16:49:16:52 | list : List<T> [element] : A | semmle.label | list : List<T> [element] : A | -| CollectionFlow.cs:16:49:16:52 | list : List<T> [element] : A | semmle.label | list : List<T> [element] : A | -| CollectionFlow.cs:16:49:16:52 | list : List<T> [element] : A | semmle.label | list : List<T> [element] : A | -| CollectionFlow.cs:16:49:16:52 | list : List<T> [element] : A | semmle.label | list : List<T> [element] : A | -| CollectionFlow.cs:16:63:16:66 | access to parameter list : List<T> [element] : A | semmle.label | access to parameter list : List<T> [element] : A | -| CollectionFlow.cs:16:63:16:66 | access to parameter list : List<T> [element] : A | semmle.label | access to parameter list : List<T> [element] : A | -| CollectionFlow.cs:16:63:16:66 | access to parameter list : List<T> [element] : A | semmle.label | access to parameter list : List<T> [element] : A | | CollectionFlow.cs:16:63:16:66 | access to parameter list : List<T> [element] : A | semmle.label | access to parameter list : List<T> [element] : A | | CollectionFlow.cs:16:63:16:69 | access to indexer | semmle.label | access to indexer | | CollectionFlow.cs:18:61:18:64 | dict : Dictionary<T,T> [element, property Value] : A | semmle.label | dict : Dictionary<T,T> [element, property Value] : A | @@ -346,16 +328,7 @@ nodes | CollectionFlow.cs:22:41:22:45 | access to array element : A | semmle.label | access to array element : A | | CollectionFlow.cs:22:41:22:45 | access to array element : A | semmle.label | access to array element : A | | CollectionFlow.cs:24:43:24:46 | list : List<T> [element] : A | semmle.label | list : List<T> [element] : A | -| CollectionFlow.cs:24:43:24:46 | list : List<T> [element] : A | semmle.label | list : List<T> [element] : A | -| CollectionFlow.cs:24:43:24:46 | list : List<T> [element] : A | semmle.label | list : List<T> [element] : A | -| CollectionFlow.cs:24:43:24:46 | list : List<T> [element] : A | semmle.label | list : List<T> [element] : A | | CollectionFlow.cs:24:52:24:55 | access to parameter list : List<T> [element] : A | semmle.label | access to parameter list : List<T> [element] : A | -| CollectionFlow.cs:24:52:24:55 | access to parameter list : List<T> [element] : A | semmle.label | access to parameter list : List<T> [element] : A | -| CollectionFlow.cs:24:52:24:55 | access to parameter list : List<T> [element] : A | semmle.label | access to parameter list : List<T> [element] : A | -| CollectionFlow.cs:24:52:24:55 | access to parameter list : List<T> [element] : A | semmle.label | access to parameter list : List<T> [element] : A | -| CollectionFlow.cs:24:52:24:58 | access to indexer : A | semmle.label | access to indexer : A | -| CollectionFlow.cs:24:52:24:58 | access to indexer : A | semmle.label | access to indexer : A | -| CollectionFlow.cs:24:52:24:58 | access to indexer : A | semmle.label | access to indexer : A | | CollectionFlow.cs:24:52:24:58 | access to indexer : A | semmle.label | access to indexer : A | | CollectionFlow.cs:26:58:26:61 | dict : Dictionary<T,T> [element, property Value] : A | semmle.label | dict : Dictionary<T,T> [element, property Value] : A | | CollectionFlow.cs:26:67:26:70 | access to parameter dict : Dictionary<T,T> [element, property Value] : A | semmle.label | access to parameter dict : Dictionary<T,T> [element, property Value] : A | diff --git a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected index c6a600f068a..42bc2666fc1 100644 --- a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected @@ -52,6 +52,8 @@ edges | ExternalFlow.cs:84:17:84:21 | access to local variable objs2 : T[] [element] : Object | ExternalFlow.cs:85:18:85:22 | access to local variable objs2 : T[] [element] : Object | provenance | | | ExternalFlow.cs:84:25:84:41 | call to method Map<Object,Object> : T[] [element] : Object | ExternalFlow.cs:84:17:84:21 | access to local variable objs2 : T[] [element] : Object | provenance | | | ExternalFlow.cs:84:29:84:32 | access to local variable objs : null [element] : Object | ExternalFlow.cs:84:25:84:41 | call to method Map<Object,Object> : T[] [element] : Object | provenance | | +| ExternalFlow.cs:84:29:84:32 | access to local variable objs : null [element] : Object | ExternalFlow.cs:84:35:84:35 | o : Object | provenance | | +| ExternalFlow.cs:84:35:84:35 | o : Object | ExternalFlow.cs:84:40:84:40 | access to parameter o : Object | provenance | | | ExternalFlow.cs:85:18:85:22 | access to local variable objs2 : T[] [element] : Object | ExternalFlow.cs:85:18:85:25 | access to array element | provenance | | | ExternalFlow.cs:90:17:90:17 | access to local variable s : String | ExternalFlow.cs:91:19:91:19 | access to local variable s : String | provenance | | | ExternalFlow.cs:90:21:90:34 | object creation of type String : String | ExternalFlow.cs:90:17:90:17 | access to local variable s : String | provenance | | @@ -154,6 +156,8 @@ nodes | ExternalFlow.cs:84:17:84:21 | access to local variable objs2 : T[] [element] : Object | semmle.label | access to local variable objs2 : T[] [element] : Object | | ExternalFlow.cs:84:25:84:41 | call to method Map<Object,Object> : T[] [element] : Object | semmle.label | call to method Map<Object,Object> : T[] [element] : Object | | ExternalFlow.cs:84:29:84:32 | access to local variable objs : null [element] : Object | semmle.label | access to local variable objs : null [element] : Object | +| ExternalFlow.cs:84:35:84:35 | o : Object | semmle.label | o : Object | +| ExternalFlow.cs:84:40:84:40 | access to parameter o : Object | semmle.label | access to parameter o : Object | | ExternalFlow.cs:85:18:85:22 | access to local variable objs2 : T[] [element] : Object | semmle.label | access to local variable objs2 : T[] [element] : Object | | ExternalFlow.cs:85:18:85:25 | access to array element | semmle.label | access to array element | | ExternalFlow.cs:90:17:90:17 | access to local variable s : String | semmle.label | access to local variable s : String | @@ -201,6 +205,7 @@ nodes | ExternalFlow.cs:263:30:263:30 | access to parameter a : MyInlineArray [element] : Object | semmle.label | access to parameter a : MyInlineArray [element] : Object | | ExternalFlow.cs:264:18:264:18 | access to local variable b | semmle.label | access to local variable b | subpaths +| ExternalFlow.cs:84:29:84:32 | access to local variable objs : null [element] : Object | ExternalFlow.cs:84:35:84:35 | o : Object | ExternalFlow.cs:84:40:84:40 | access to parameter o : Object | ExternalFlow.cs:84:25:84:41 | call to method Map<Object,Object> : T[] [element] : Object | #select | ExternalFlow.cs:10:18:10:33 | call to method StepArgRes | ExternalFlow.cs:9:27:9:38 | object creation of type Object : Object | ExternalFlow.cs:10:18:10:33 | call to method StepArgRes | $@ | ExternalFlow.cs:9:27:9:38 | object creation of type Object : Object | object creation of type Object : Object | | ExternalFlow.cs:18:18:18:24 | access to local variable argOut1 | ExternalFlow.cs:15:29:15:40 | object creation of type Object : Object | ExternalFlow.cs:18:18:18:24 | access to local variable argOut1 | $@ | ExternalFlow.cs:15:29:15:40 | object creation of type Object : Object | object creation of type Object : Object | diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.cs b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.cs new file mode 100644 index 00000000000..c0961e0169b --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using Microsoft.Extensions.Configuration; + +namespace CommandArgs +{ + public class CommandArgsUse + { + public static void M1() + { + string result = Environment.GetCommandLineArgs()[0]; + } + + public static void M2() + { + string result = Environment.CommandLine; + } + + public static void Main(string[] args) + { + var builder = new ConfigurationBuilder(); + builder.AddCommandLine(args); + var config = builder.Build(); + var arg1 = config["arg1"]; + Sink(arg1); + } + + public static void AddCommandLine2() + { + var config = new ConfigurationBuilder() + .AddCommandLine(Environment.GetCommandLineArgs()) + .Build(); + var arg1 = config["arg1"]; + Sink(arg1); + } + + static void Sink(object o) { } + } +} \ No newline at end of file diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.expected b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.expected new file mode 100644 index 00000000000..2a2c1c40b2b --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.expected @@ -0,0 +1,4 @@ +| CommandArgs.cs:11:29:11:60 | call to method GetCommandLineArgs | +| CommandArgs.cs:16:29:16:51 | access to property CommandLine | +| CommandArgs.cs:19:42:19:45 | args | +| CommandArgs.cs:31:33:31:64 | call to method GetCommandLineArgs | diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.ext.yml b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.ext.yml new file mode 100644 index 00000000000..a92dbf39d06 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.ext.yml @@ -0,0 +1,7 @@ +extensions: + + - addsTo: + pack: codeql/threat-models + extensible: threatModelConfiguration + data: + - ["commandargs", true, 0] \ No newline at end of file diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.ql b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.ql new file mode 100644 index 00000000000..aa89a4c3455 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandArgs.ql @@ -0,0 +1,6 @@ +import csharp +import semmle.code.csharp.security.dataflow.flowsources.FlowSources + +from DataFlow::Node source +where source instanceof ThreatModelFlowSource +select source diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandLineFlow.expected b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandLineFlow.expected new file mode 100644 index 00000000000..e404205dd15 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandLineFlow.expected @@ -0,0 +1,2 @@ +| CommandArgs.cs:25:18:25:21 | access to local variable arg1 | CommandArgs.cs:19:42:19:45 | args | +| CommandArgs.cs:34:18:34:21 | access to local variable arg1 | CommandArgs.cs:31:33:31:64 | call to method GetCommandLineArgs | diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandLineFlow.ext.yml b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandLineFlow.ext.yml new file mode 100644 index 00000000000..a92dbf39d06 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandLineFlow.ext.yml @@ -0,0 +1,7 @@ +extensions: + + - addsTo: + pack: codeql/threat-models + extensible: threatModelConfiguration + data: + - ["commandargs", true, 0] \ No newline at end of file diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandLineFlow.ql b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandLineFlow.ql new file mode 100644 index 00000000000..731043cf470 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/CommandLineFlow.ql @@ -0,0 +1,16 @@ +import csharp +import semmle.code.csharp.security.dataflow.flowsources.FlowSources + +module CommandLineFlowConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } + + predicate isSink(DataFlow::Node sink) { + exists(MethodCall mc | mc.getTarget().hasName("Sink") | sink.asExpr() = mc.getArgument(0)) + } +} + +module CommandLineFlow = TaintTracking::Global<CommandLineFlowConfig>; + +from DataFlow::Node source, DataFlow::Node sink +where CommandLineFlow::flow(source, sink) +select sink, source diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/options b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/options new file mode 100644 index 00000000000..13f94236f19 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/commandargs/options @@ -0,0 +1,3 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariableFlow.expected b/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariableFlow.expected new file mode 100644 index 00000000000..323cb705182 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariableFlow.expected @@ -0,0 +1,2 @@ +| EnvironmentVariables.cs:34:18:34:21 | access to local variable path | EnvironmentVariables.cs:30:26:31:42 | call to method AddEnvironmentVariables | +| EnvironmentVariables.cs:44:18:44:21 | access to local variable path | EnvironmentVariables.cs:41:13:41:19 | [post] access to local variable builder | diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariableFlow.ql b/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariableFlow.ql new file mode 100644 index 00000000000..fc6923f8778 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariableFlow.ql @@ -0,0 +1,16 @@ +import csharp +import semmle.code.csharp.dataflow.internal.ExternalFlow + +module EnvironmentVariableFlowConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { sourceNode(source, "environment") } + + predicate isSink(DataFlow::Node sink) { + exists(MethodCall mc | mc.getTarget().hasName("Sink") | sink.asExpr() = mc.getArgument(0)) + } +} + +module EnvironmentVariableFlow = TaintTracking::Global<EnvironmentVariableFlowConfig>; + +from DataFlow::Node source, DataFlow::Node sink +where EnvironmentVariableFlow::flow(source, sink) +select sink, source diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariables.cs b/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariables.cs new file mode 100644 index 00000000000..a685106b7f2 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariables.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections; +using Microsoft.Extensions.Configuration; + +namespace EnvironmentVariables +{ + class EnvironmentVariables + { + public static void GetEnvironmentVariable(string environmnetVariable) + { + string value = Environment.GetEnvironmentVariable(environmnetVariable); + string valueFromRegistry = Environment.GetEnvironmentVariable(environmnetVariable, EnvironmentVariableTarget.Machine); + string valueFromProcess = Environment.GetEnvironmentVariable(environmnetVariable, EnvironmentVariableTarget.Process); + } + + public static void GetEnvironmentVariables() + { + IDictionary environmentVariables = Environment.GetEnvironmentVariables(); + IDictionary environmentVariablesFromRegistry = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine); + IDictionary environmentVariablesFromProcess = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Process); + } + + public static void ExpandEnvironmentVariables(string environmentVariable) + { + string expanded = Environment.ExpandEnvironmentVariables("%PATH%"); + } + + public static void TaintedConfiguration() + { + var config = new ConfigurationBuilder() + .AddEnvironmentVariables() + .Build(); + var path = config["PATH"]; + Sink(path); + } + + public static void TaintedConfigurationWithPrefix() + { + var builder = new ConfigurationBuilder(); + + builder.AddEnvironmentVariables("prefix"); + var config = builder.Build(); + var path = config["PATH"]; + Sink(path); + } + + static void Sink(object o) { } + } +} \ No newline at end of file diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariables.expected b/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariables.expected new file mode 100644 index 00000000000..0400998a4ce --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariables.expected @@ -0,0 +1,11 @@ +| EnvironmentVariables.cs:11:28:11:82 | call to method GetEnvironmentVariable | +| EnvironmentVariables.cs:12:40:12:129 | call to method GetEnvironmentVariable | +| EnvironmentVariables.cs:13:39:13:128 | call to method GetEnvironmentVariable | +| EnvironmentVariables.cs:18:48:18:84 | call to method GetEnvironmentVariables | +| EnvironmentVariables.cs:19:60:19:129 | call to method GetEnvironmentVariables | +| EnvironmentVariables.cs:20:59:20:128 | call to method GetEnvironmentVariables | +| EnvironmentVariables.cs:25:31:25:78 | call to method ExpandEnvironmentVariables | +| EnvironmentVariables.cs:30:26:30:51 | [post] object creation of type ConfigurationBuilder | +| EnvironmentVariables.cs:30:26:31:42 | call to method AddEnvironmentVariables | +| EnvironmentVariables.cs:41:13:41:19 | [post] access to local variable builder | +| EnvironmentVariables.cs:41:13:41:53 | call to method AddEnvironmentVariables | diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariables.ql b/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariables.ql new file mode 100644 index 00000000000..b9d2a000f42 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/EnvironmentVariables.ql @@ -0,0 +1,6 @@ +import csharp +import semmle.code.csharp.dataflow.internal.ExternalFlow + +from DataFlow::Node source +where sourceNode(source, "environment") +select source diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/options b/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/options new file mode 100644 index 00000000000..13f94236f19 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/environment/options @@ -0,0 +1,3 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/local/registry/Registry.expected b/csharp/ql/test/library-tests/dataflow/flowsources/local/registry/Registry.expected new file mode 100644 index 00000000000..9a5b8ef2c0e --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/registry/Registry.expected @@ -0,0 +1,8 @@ +| UseRegistry.cs:10:36:10:58 | call to method GetValue | windows-registry | +| UseRegistry.cs:16:36:16:58 | call to method GetValue | windows-registry | +| UseRegistry.cs:22:36:22:58 | call to method GetValue | windows-registry | +| UseRegistry.cs:28:36:28:58 | call to method GetValue | windows-registry | +| UseRegistry.cs:34:36:34:58 | call to method GetValue | windows-registry | +| UseRegistry.cs:40:36:40:58 | call to method GetValue | windows-registry | +| UseRegistry.cs:46:35:46:53 | call to method GetValueNames | windows-registry | +| UseRegistry.cs:52:36:52:55 | call to method GetSubKeyNames | windows-registry | diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/local/registry/Registry.ext.yml b/csharp/ql/test/library-tests/dataflow/flowsources/local/registry/Registry.ext.yml new file mode 100644 index 00000000000..71007f3394c --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/registry/Registry.ext.yml @@ -0,0 +1,7 @@ +extensions: + + - addsTo: + pack: codeql/threat-models + extensible: threatModelConfiguration + data: + - ["windows-registry", true, 0] \ No newline at end of file diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/local/registry/Registry.ql b/csharp/ql/test/library-tests/dataflow/flowsources/local/registry/Registry.ql new file mode 100644 index 00000000000..9e2934e9e19 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/registry/Registry.ql @@ -0,0 +1,6 @@ +import csharp +import semmle.code.csharp.security.dataflow.flowsources.FlowSources + +from DataFlow::Node source +where source instanceof ThreatModelFlowSource +select source, source.(SourceNode).getThreatModel() diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/local/registry/UseRegistry.cs b/csharp/ql/test/library-tests/dataflow/flowsources/local/registry/UseRegistry.cs new file mode 100644 index 00000000000..e5698127be4 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/registry/UseRegistry.cs @@ -0,0 +1,55 @@ +using Microsoft.Win32; + +namespace Test +{ + class UseRegistry + { + public static void GetRegistryValue(string keyName, string valueName) + { + RegistryKey key = Registry.LocalMachine.OpenSubKey(keyName); + string value = (string)key.GetValue(valueName); + } + + public static void GetRegistryValue2(string keyName, string valueName) + { + RegistryKey key = Registry.CurrentUser.OpenSubKey(keyName); + string value = (string)key.GetValue(valueName); + } + + public static void GetRegistryValue3(string keyName, string valueName) + { + RegistryKey key = Registry.ClassesRoot.OpenSubKey(keyName); + string value = (string)key.GetValue(valueName); + } + + public static void GetRegistryValue4(string keyName, string valueName) + { + RegistryKey key = Registry.Users.OpenSubKey(keyName); + string value = (string)key.GetValue(valueName); + } + + public static void GetRegistryValue5(string keyName, string valueName) + { + RegistryKey key = Registry.CurrentConfig.OpenSubKey(keyName); + string value = (string)key.GetValue(valueName); + } + + public static void GetRegistryValue6(string keyName, string valueName) + { + RegistryKey key = Registry.PerformanceData.OpenSubKey(keyName); + string value = (string)key.GetValue(valueName); + } + + public static void GetRegistryValueNames(string keyName, string valueName) + { + RegistryKey key = Registry.LocalMachine.OpenSubKey(keyName); + string[] valueNames = key.GetValueNames(); + } + + public static void GetRegistrySubKeyNames(string keyName, string valueName) + { + RegistryKey key = Registry.LocalMachine.OpenSubKey(keyName); + string[] subKeyNames = key.GetSubKeyNames(); + } + } +} \ No newline at end of file diff --git a/csharp/ql/test/library-tests/dataflow/flowsources/local/registry/options b/csharp/ql/test/library-tests/dataflow/flowsources/local/registry/options new file mode 100644 index 00000000000..f28b8af0ae4 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/flowsources/local/registry/options @@ -0,0 +1,3 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../../resources/stubs/Microsoft.VisualStudio.TestTools.UnitTesting.cs diff --git a/csharp/ql/test/library-tests/dataflow/global/Capture.cs b/csharp/ql/test/library-tests/dataflow/global/Capture.cs index be7ebe9cde6..1cdec868892 100644 --- a/csharp/ql/test/library-tests/dataflow/global/Capture.cs +++ b/csharp/ql/test/library-tests/dataflow/global/Capture.cs @@ -327,9 +327,11 @@ class Capture { var x = "taint source"; - void CapturedLocalFunction() => Check(x); // missing flow from line 328 + void CapturedLocalFunction() => Check(x); void CapturingLocalFunction() => CapturedLocalFunction(); + + CapturingLocalFunction(); } void M13() diff --git a/csharp/ql/test/library-tests/dataflow/global/DataFlow.expected b/csharp/ql/test/library-tests/dataflow/global/DataFlow.expected index 427dbd7a7af..2e3cf9e831c 100644 --- a/csharp/ql/test/library-tests/dataflow/global/DataFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/global/DataFlow.expected @@ -27,7 +27,7 @@ | Capture.cs:312:15:312:15 | access to local variable x | | Capture.cs:319:19:319:19 | access to local variable x | | Capture.cs:330:47:330:47 | access to local variable x | -| Capture.cs:339:45:339:45 | access to local variable x | +| Capture.cs:341:45:341:45 | access to local variable x | | GlobalDataFlow.cs:19:15:19:29 | access to field SinkField0 | | GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 | | GlobalDataFlow.cs:45:50:45:59 | access to parameter sinkParam2 | diff --git a/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected b/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected index 0ed28a45b04..67c1d0553b6 100644 --- a/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected +++ b/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected @@ -1,31 +1,21 @@ edges -| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:9:9:13:9 | CaptureIn1(...) : CaptureIn1 [captured tainted] : String | provenance | | | Capture.cs:7:20:7:26 | tainted : String | Capture.cs:14:9:14:18 | access to local function CaptureIn1 : CaptureIn1 [captured tainted] : String | provenance | | -| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:16:9:24:9 | CaptureIn2(...) : CaptureIn2 [captured tainted] : String | provenance | | | Capture.cs:7:20:7:26 | tainted : String | Capture.cs:25:9:25:18 | access to local function CaptureIn2 : CaptureIn2 [captured tainted] : String | provenance | | -| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:27:43:32:9 | (...) => ... : (...) => ... [captured tainted] : String | provenance | | | Capture.cs:7:20:7:26 | tainted : String | Capture.cs:33:30:33:39 | access to local variable captureIn3 : Func<String,String> [captured tainted] : String | provenance | | | Capture.cs:7:20:7:26 | tainted : String | Capture.cs:61:36:61:42 | access to parameter tainted : String | provenance | | -| Capture.cs:9:9:13:9 | CaptureIn1(...) : CaptureIn1 [captured tainted] : String | Capture.cs:14:9:14:18 | access to local function CaptureIn1 : CaptureIn1 [captured tainted] : String | provenance | | | Capture.cs:11:17:11:22 | access to local variable sink27 : String | Capture.cs:12:19:12:24 | access to local variable sink27 | provenance | | | Capture.cs:11:26:11:32 | access to parameter tainted : String | Capture.cs:11:17:11:22 | access to local variable sink27 : String | provenance | | | Capture.cs:14:9:14:18 | access to local function CaptureIn1 : CaptureIn1 [captured tainted] : String | Capture.cs:11:26:11:32 | access to parameter tainted : String | provenance | | -| Capture.cs:16:9:24:9 | CaptureIn2(...) : CaptureIn2 [captured tainted] : String | Capture.cs:25:9:25:18 | access to local function CaptureIn2 : CaptureIn2 [captured tainted] : String | provenance | | -| Capture.cs:18:13:22:13 | M(...) : M [captured tainted] : String | Capture.cs:23:13:23:13 | access to local function M : M [captured tainted] : String | provenance | | | Capture.cs:20:21:20:26 | access to local variable sink28 : String | Capture.cs:21:23:21:28 | access to local variable sink28 | provenance | | | Capture.cs:20:30:20:36 | access to parameter tainted : String | Capture.cs:20:21:20:26 | access to local variable sink28 : String | provenance | | | Capture.cs:23:13:23:13 | access to local function M : M [captured tainted] : String | Capture.cs:20:30:20:36 | access to parameter tainted : String | provenance | | -| Capture.cs:25:9:25:18 | access to local function CaptureIn2 : CaptureIn2 [captured tainted] : String | Capture.cs:18:13:22:13 | M(...) : M [captured tainted] : String | provenance | | | Capture.cs:25:9:25:18 | access to local function CaptureIn2 : CaptureIn2 [captured tainted] : String | Capture.cs:23:13:23:13 | access to local function M : M [captured tainted] : String | provenance | | -| Capture.cs:27:30:27:39 | access to local variable captureIn3 : (...) => ... [captured tainted] : String | Capture.cs:33:30:33:39 | access to local variable captureIn3 : (...) => ... [captured tainted] : String | provenance | | -| Capture.cs:27:43:32:9 | (...) => ... : (...) => ... [captured tainted] : String | Capture.cs:27:30:27:39 | access to local variable captureIn3 : (...) => ... [captured tainted] : String | provenance | | | Capture.cs:29:17:29:22 | access to local variable sink29 : String | Capture.cs:30:19:30:24 | access to local variable sink29 | provenance | | | Capture.cs:29:26:29:32 | access to parameter tainted : String | Capture.cs:29:17:29:22 | access to local variable sink29 : String | provenance | | -| Capture.cs:33:30:33:39 | access to local variable captureIn3 : (...) => ... [captured tainted] : String | Capture.cs:29:26:29:32 | access to parameter tainted : String | provenance | | | Capture.cs:33:30:33:39 | access to local variable captureIn3 : Func<String,String> [captured tainted] : String | Capture.cs:29:26:29:32 | access to parameter tainted : String | provenance | | | Capture.cs:50:50:50:55 | sink39 : String | Capture.cs:52:23:59:13 | (...) => ... : (...) => ... [captured sink39] : String | provenance | | -| Capture.cs:52:23:59:13 | (...) => ... : (...) => ... [captured sink39] : String | Capture.cs:348:34:348:34 | a : (...) => ... [captured sink39] : String | provenance | | -| Capture.cs:55:27:58:17 | (...) => ... : (...) => ... [captured sink39] : String | Capture.cs:348:34:348:34 | a : (...) => ... [captured sink39] : String | provenance | | +| Capture.cs:52:23:59:13 | (...) => ... : (...) => ... [captured sink39] : String | Capture.cs:350:34:350:34 | a : (...) => ... [captured sink39] : String | provenance | | +| Capture.cs:55:27:58:17 | (...) => ... : (...) => ... [captured sink39] : String | Capture.cs:350:34:350:34 | a : (...) => ... [captured sink39] : String | provenance | | | Capture.cs:61:36:61:42 | access to parameter tainted : String | Capture.cs:50:50:50:55 | sink39 : String | provenance | | | Capture.cs:69:22:69:35 | "taint source" : String | Capture.cs:71:9:71:19 | [post] access to local function CaptureOut1 : CaptureOut1 [captured sink30] : String | provenance | | | Capture.cs:71:9:71:19 | [post] access to local function CaptureOut1 : CaptureOut1 [captured sink30] : String | Capture.cs:72:15:72:20 | access to local variable sink30 | provenance | | @@ -35,57 +25,48 @@ edges | Capture.cs:89:22:89:35 | "taint source" : String | Capture.cs:92:30:92:40 | [post] access to local variable captureOut3 : (...) => ... [captured sink32] : String | provenance | | | Capture.cs:92:30:92:40 | [post] access to local variable captureOut3 : (...) => ... [captured sink32] : String | Capture.cs:93:15:93:20 | access to local variable sink32 | provenance | | | Capture.cs:114:23:117:13 | [post] (...) => ... : (...) => ... [captured sink40] : String | Capture.cs:123:9:123:33 | [post] access to local function CaptureOutMultipleLambdas : CaptureOutMultipleLambdas [captured sink40] : String | provenance | | -| Capture.cs:116:26:116:39 | "taint source" : String | Capture.cs:350:9:350:9 | [post] access to parameter a : (...) => ... [captured sink40] : String | provenance | | +| Capture.cs:116:26:116:39 | "taint source" : String | Capture.cs:352:9:352:9 | [post] access to parameter a : (...) => ... [captured sink40] : String | provenance | | | Capture.cs:123:9:123:33 | [post] access to local function CaptureOutMultipleLambdas : CaptureOutMultipleLambdas [captured sink40] : String | Capture.cs:124:15:124:20 | access to local variable sink40 | provenance | | -| Capture.cs:127:25:127:31 | tainted : String | Capture.cs:130:9:133:9 | CaptureThrough1(...) : CaptureThrough1 [captured tainted] : String | provenance | | | Capture.cs:127:25:127:31 | tainted : String | Capture.cs:134:9:134:23 | access to local function CaptureThrough1 : CaptureThrough1 [captured tainted] : String | provenance | | -| Capture.cs:127:25:127:31 | tainted : String | Capture.cs:138:9:145:9 | CaptureThrough2(...) : CaptureThrough2 [captured tainted] : String | provenance | | | Capture.cs:127:25:127:31 | tainted : String | Capture.cs:146:9:146:23 | access to local function CaptureThrough2 : CaptureThrough2 [captured tainted] : String | provenance | | -| Capture.cs:127:25:127:31 | tainted : String | Capture.cs:150:48:154:9 | (...) => ... : (...) => ... [captured tainted] : String | provenance | | | Capture.cs:127:25:127:31 | tainted : String | Capture.cs:155:30:155:44 | access to local variable captureThrough3 : Func<String,String> [captured tainted] : String | provenance | | -| Capture.cs:127:25:127:31 | tainted : String | Capture.cs:158:9:161:9 | CaptureThrough4(...) : CaptureThrough4 [captured tainted] : String | provenance | | | Capture.cs:127:25:127:31 | tainted : String | Capture.cs:162:22:162:36 | access to local function CaptureThrough4 : CaptureThrough4 [captured tainted] : String | provenance | | | Capture.cs:127:25:127:31 | tainted : String | Capture.cs:170:25:170:31 | access to parameter tainted : String | provenance | | | Capture.cs:127:25:127:31 | tainted : String | Capture.cs:196:25:196:31 | access to parameter tainted : String | provenance | | -| Capture.cs:130:9:133:9 | CaptureThrough1(...) : CaptureThrough1 [captured tainted] : String | Capture.cs:134:9:134:23 | access to local function CaptureThrough1 : CaptureThrough1 [captured tainted] : String | provenance | | | Capture.cs:134:9:134:23 | [post] access to local function CaptureThrough1 : CaptureThrough1 [captured sink33] : String | Capture.cs:135:15:135:20 | access to local variable sink33 | provenance | | +| Capture.cs:134:9:134:23 | access to local function CaptureThrough1 : CaptureThrough1 [captured tainted] : String | Capture.cs:132:22:132:28 | access to parameter tainted : String | provenance | | | Capture.cs:134:9:134:23 | access to local function CaptureThrough1 : CaptureThrough1 [captured tainted] : String | Capture.cs:134:9:134:23 | [post] access to local function CaptureThrough1 : CaptureThrough1 [captured sink33] : String | provenance | | -| Capture.cs:138:9:145:9 | CaptureThrough2(...) : CaptureThrough2 [captured tainted] : String | Capture.cs:146:9:146:23 | access to local function CaptureThrough2 : CaptureThrough2 [captured tainted] : String | provenance | | +| Capture.cs:144:13:144:13 | access to local function M : M [captured tainted] : String | Capture.cs:142:26:142:32 | access to parameter tainted : String | provenance | | +| Capture.cs:144:13:144:13 | access to local function M : M [captured tainted] : String | Capture.cs:144:13:144:13 | [post] access to local function M : M [captured sink34] : String | provenance | | | Capture.cs:146:9:146:23 | [post] access to local function CaptureThrough2 : CaptureThrough2 [captured sink34] : String | Capture.cs:147:15:147:20 | access to local variable sink34 | provenance | | +| Capture.cs:146:9:146:23 | access to local function CaptureThrough2 : CaptureThrough2 [captured tainted] : String | Capture.cs:144:13:144:13 | access to local function M : M [captured tainted] : String | provenance | | | Capture.cs:146:9:146:23 | access to local function CaptureThrough2 : CaptureThrough2 [captured tainted] : String | Capture.cs:146:9:146:23 | [post] access to local function CaptureThrough2 : CaptureThrough2 [captured sink34] : String | provenance | | -| Capture.cs:150:30:150:44 | access to local variable captureThrough3 : (...) => ... [captured tainted] : String | Capture.cs:155:30:155:44 | access to local variable captureThrough3 : (...) => ... [captured tainted] : String | provenance | | -| Capture.cs:150:48:154:9 | (...) => ... : (...) => ... [captured tainted] : String | Capture.cs:150:30:150:44 | access to local variable captureThrough3 : (...) => ... [captured tainted] : String | provenance | | | Capture.cs:155:30:155:44 | [post] access to local variable captureThrough3 : (...) => ... [captured sink35] : String | Capture.cs:156:15:156:20 | access to local variable sink35 | provenance | | -| Capture.cs:155:30:155:44 | access to local variable captureThrough3 : (...) => ... [captured tainted] : String | Capture.cs:155:30:155:44 | [post] access to local variable captureThrough3 : (...) => ... [captured sink35] : String | provenance | | +| Capture.cs:155:30:155:44 | access to local variable captureThrough3 : Func<String,String> [captured tainted] : String | Capture.cs:152:22:152:28 | access to parameter tainted : String | provenance | | | Capture.cs:155:30:155:44 | access to local variable captureThrough3 : Func<String,String> [captured tainted] : String | Capture.cs:155:30:155:44 | [post] access to local variable captureThrough3 : (...) => ... [captured sink35] : String | provenance | | -| Capture.cs:158:9:161:9 | CaptureThrough4(...) : CaptureThrough4 [captured tainted] : String | Capture.cs:162:22:162:36 | access to local function CaptureThrough4 : CaptureThrough4 [captured tainted] : String | provenance | | | Capture.cs:162:13:162:18 | access to local variable sink36 : String | Capture.cs:163:15:163:20 | access to local variable sink36 | provenance | | +| Capture.cs:162:22:162:36 | access to local function CaptureThrough4 : CaptureThrough4 [captured tainted] : String | Capture.cs:160:20:160:26 | access to parameter tainted : String | provenance | | | Capture.cs:162:22:162:36 | access to local function CaptureThrough4 : CaptureThrough4 [captured tainted] : String | Capture.cs:162:22:162:38 | call to local function CaptureThrough4 : String | provenance | | | Capture.cs:162:22:162:38 | call to local function CaptureThrough4 : String | Capture.cs:162:13:162:18 | access to local variable sink36 : String | provenance | | | Capture.cs:166:37:166:37 | p : String | Capture.cs:168:22:168:22 | access to parameter p : String | provenance | | | Capture.cs:170:9:170:23 | [post] access to local function CaptureThrough5 : CaptureThrough5 [captured sink37] : String | Capture.cs:171:15:171:20 | access to local variable sink37 | provenance | | | Capture.cs:170:25:170:31 | access to parameter tainted : String | Capture.cs:166:37:166:37 | p : String | provenance | | | Capture.cs:170:25:170:31 | access to parameter tainted : String | Capture.cs:170:9:170:23 | [post] access to local function CaptureThrough5 : CaptureThrough5 [captured sink37] : String | provenance | | -| Capture.cs:190:26:190:26 | s : String | Capture.cs:192:13:192:28 | M(...) : M [captured s] : String | provenance | | | Capture.cs:190:26:190:26 | s : String | Capture.cs:193:20:193:20 | access to local function M : M [captured s] : String | provenance | | -| Capture.cs:192:13:192:28 | M(...) : M [captured s] : String | Capture.cs:193:20:193:20 | access to local function M : M [captured s] : String | provenance | | +| Capture.cs:193:20:193:20 | access to local function M : M [captured s] : String | Capture.cs:192:27:192:27 | access to parameter s : String | provenance | | | Capture.cs:193:20:193:20 | access to local function M : M [captured s] : String | Capture.cs:193:20:193:22 | call to local function M : String | provenance | | | Capture.cs:196:13:196:18 | access to local variable sink38 : String | Capture.cs:197:15:197:20 | access to local variable sink38 | provenance | | | Capture.cs:196:22:196:32 | call to local function Id : String | Capture.cs:196:13:196:18 | access to local variable sink38 : String | provenance | | | Capture.cs:196:25:196:31 | access to parameter tainted : String | Capture.cs:190:26:190:26 | s : String | provenance | | | Capture.cs:196:25:196:31 | access to parameter tainted : String | Capture.cs:196:22:196:32 | call to local function Id : String | provenance | | -| Capture.cs:202:20:202:20 | s : String | Capture.cs:204:20:207:9 | (...) => ... : (...) => ... [captured s] : String | provenance | | | Capture.cs:202:20:202:20 | s : String | Capture.cs:208:9:208:9 | access to local variable a : Action [captured s] : String | provenance | | -| Capture.cs:204:16:204:16 | access to local variable a : (...) => ... [captured s] : String | Capture.cs:208:9:208:9 | access to local variable a : (...) => ... [captured s] : String | provenance | | -| Capture.cs:204:20:207:9 | (...) => ... : (...) => ... [captured s] : String | Capture.cs:204:16:204:16 | access to local variable a : (...) => ... [captured s] : String | provenance | | -| Capture.cs:208:9:208:9 | access to local variable a : (...) => ... [captured s] : String | Capture.cs:206:19:206:19 | access to parameter s | provenance | | | Capture.cs:208:9:208:9 | access to local variable a : Action [captured s] : String | Capture.cs:206:19:206:19 | access to parameter s | provenance | | | Capture.cs:211:21:211:34 | "taint source" : String | Capture.cs:202:20:202:20 | s : String | provenance | | | Capture.cs:213:22:213:22 | s : String | Capture.cs:215:16:218:9 | (...) => ... : (...) => ... [captured s] : String | provenance | | | Capture.cs:221:18:221:35 | call to method M3 : (...) => ... [captured s] : String | Capture.cs:217:19:217:19 | access to parameter s | provenance | | | Capture.cs:221:21:221:34 | "taint source" : String | Capture.cs:213:22:213:22 | s : String | provenance | | | Capture.cs:221:21:221:34 | "taint source" : String | Capture.cs:221:18:221:35 | call to method M3 : (...) => ... [captured s] : String | provenance | | -| Capture.cs:223:28:223:45 | call to method M3 : (...) => ... [captured s] : String | Capture.cs:348:34:348:34 | a : (...) => ... [captured s] : String | provenance | | +| Capture.cs:223:28:223:45 | call to method M3 : (...) => ... [captured s] : String | Capture.cs:350:34:350:34 | a : (...) => ... [captured s] : String | provenance | | | Capture.cs:223:31:223:44 | "taint source" : String | Capture.cs:213:22:213:22 | s : String | provenance | | | Capture.cs:223:31:223:44 | "taint source" : String | Capture.cs:223:28:223:45 | call to method M3 : (...) => ... [captured s] : String | provenance | | | Capture.cs:228:17:228:30 | "taint source" : String | Capture.cs:229:20:233:9 | (...) => ... : (...) => ... [captured x] : String | provenance | | @@ -93,17 +74,13 @@ edges | Capture.cs:229:20:233:9 | (...) => ... : (...) => ... [captured x] : String | Capture.cs:231:19:231:19 | access to local variable x | provenance | | | Capture.cs:229:20:233:9 | [post] (...) => ... : (...) => ... [captured x] : String | Capture.cs:234:15:234:15 | access to local variable x | provenance | | | Capture.cs:232:17:232:30 | "taint source" : String | Capture.cs:229:20:233:9 | [post] (...) => ... : (...) => ... [captured x] : String | provenance | | -| Capture.cs:242:9:242:9 | [post] access to local variable c : Capture [field Field] : String | Capture.cs:244:20:248:9 | (...) => ... : (...) => ... [captured c, field Field] : String | provenance | | | Capture.cs:242:9:242:9 | [post] access to local variable c : Capture [field Field] : String | Capture.cs:249:9:249:9 | access to local variable a : Action [captured c, field Field] : String | provenance | | | Capture.cs:242:9:242:9 | [post] access to local variable c : Capture [field Field] : String | Capture.cs:251:15:251:15 | access to local variable c : Capture [field Field] : String | provenance | | | Capture.cs:242:19:242:32 | "taint source" : String | Capture.cs:242:9:242:9 | [post] access to local variable c : Capture [field Field] : String | provenance | | -| Capture.cs:244:16:244:16 | access to local variable a : (...) => ... [captured c, field Field] : String | Capture.cs:249:9:249:9 | access to local variable a : (...) => ... [captured c, field Field] : String | provenance | | -| Capture.cs:244:20:248:9 | (...) => ... : (...) => ... [captured c, field Field] : String | Capture.cs:244:16:244:16 | access to local variable a : (...) => ... [captured c, field Field] : String | provenance | | | Capture.cs:246:19:246:19 | access to local variable c : Capture [field Field] : String | Capture.cs:246:19:246:25 | access to field Field | provenance | | | Capture.cs:247:13:247:13 | [post] access to local variable c : Capture [field Field] : String | Capture.cs:249:9:249:9 | [post] access to local variable a : (...) => ... [captured c, field Field] : String | provenance | | | Capture.cs:247:23:247:36 | "taint source" : String | Capture.cs:247:13:247:13 | [post] access to local variable c : Capture [field Field] : String | provenance | | | Capture.cs:249:9:249:9 | [post] access to local variable a : (...) => ... [captured c, field Field] : String | Capture.cs:251:15:251:15 | access to local variable c : Capture [field Field] : String | provenance | | -| Capture.cs:249:9:249:9 | access to local variable a : (...) => ... [captured c, field Field] : String | Capture.cs:246:19:246:19 | access to local variable c : Capture [field Field] : String | provenance | | | Capture.cs:249:9:249:9 | access to local variable a : Action [captured c, field Field] : String | Capture.cs:246:19:246:19 | access to local variable c : Capture [field Field] : String | provenance | | | Capture.cs:251:15:251:15 | access to local variable c : Capture [field Field] : String | Capture.cs:251:15:251:21 | access to field Field | provenance | | | Capture.cs:264:13:264:13 | [post] access to local variable c : Capture [field Field] : String | Capture.cs:266:9:266:9 | [post] access to local variable a : (...) => ... [captured c, field Field] : String | provenance | | @@ -111,58 +88,41 @@ edges | Capture.cs:266:9:266:9 | [post] access to local variable a : (...) => ... [captured c, field Field] : String | Capture.cs:268:15:268:15 | access to local variable c : Capture [field Field] : String | provenance | | | Capture.cs:268:15:268:15 | access to local variable c : Capture [field Field] : String | Capture.cs:268:15:268:21 | access to field Field | provenance | | | Capture.cs:273:19:273:19 | x : String | Capture.cs:273:30:273:30 | access to parameter x | provenance | | -| Capture.cs:273:34:273:47 | "taint source" : String | Capture.cs:353:45:353:45 | x : String | provenance | | -| Capture.cs:278:17:278:30 | "taint source" : String | Capture.cs:280:25:288:9 | (...) => ... : (...) => ... [captured x] : String | provenance | | +| Capture.cs:273:34:273:47 | "taint source" : String | Capture.cs:355:45:355:45 | x : String | provenance | | | Capture.cs:278:17:278:30 | "taint source" : String | Capture.cs:290:9:290:14 | access to local variable middle : Action [captured x] : String | provenance | | | Capture.cs:278:17:278:30 | "taint source" : String | Capture.cs:292:15:292:15 | access to local variable x | provenance | | -| Capture.cs:280:16:280:21 | access to local variable middle : (...) => ... [captured x] : String | Capture.cs:290:9:290:14 | access to local variable middle : (...) => ... [captured x] : String | provenance | | -| Capture.cs:280:25:288:9 | (...) => ... : (...) => ... [captured x] : String | Capture.cs:280:16:280:21 | access to local variable middle : (...) => ... [captured x] : String | provenance | | -| Capture.cs:282:20:282:24 | access to local variable inner : (...) => ... [captured x] : String | Capture.cs:287:13:287:17 | access to local variable inner : (...) => ... [captured x] : String | provenance | | -| Capture.cs:282:28:286:13 | (...) => ... : (...) => ... [captured x] : String | Capture.cs:282:20:282:24 | access to local variable inner : (...) => ... [captured x] : String | provenance | | | Capture.cs:285:21:285:34 | "taint source" : String | Capture.cs:287:13:287:17 | [post] access to local variable inner : (...) => ... [captured x] : String | provenance | | | Capture.cs:287:13:287:17 | [post] access to local variable inner : (...) => ... [captured x] : String | Capture.cs:290:9:290:14 | [post] access to local variable middle : (...) => ... [captured x] : String | provenance | | -| Capture.cs:287:13:287:17 | access to local variable inner : (...) => ... [captured x] : String | Capture.cs:284:23:284:23 | access to local variable x | provenance | | | Capture.cs:287:13:287:17 | access to local variable inner : Action [captured x] : String | Capture.cs:284:23:284:23 | access to local variable x | provenance | | | Capture.cs:290:9:290:14 | [post] access to local variable middle : (...) => ... [captured x] : String | Capture.cs:292:15:292:15 | access to local variable x | provenance | | -| Capture.cs:290:9:290:14 | access to local variable middle : (...) => ... [captured x] : String | Capture.cs:282:28:286:13 | (...) => ... : (...) => ... [captured x] : String | provenance | | -| Capture.cs:290:9:290:14 | access to local variable middle : (...) => ... [captured x] : String | Capture.cs:287:13:287:17 | access to local variable inner : Action [captured x] : String | provenance | | -| Capture.cs:290:9:290:14 | access to local variable middle : Action [captured x] : String | Capture.cs:282:28:286:13 | (...) => ... : (...) => ... [captured x] : String | provenance | | | Capture.cs:290:9:290:14 | access to local variable middle : Action [captured x] : String | Capture.cs:287:13:287:17 | access to local variable inner : Action [captured x] : String | provenance | | -| Capture.cs:297:9:297:12 | [post] this access : Capture [field Field] : String | Capture.cs:299:20:303:9 | (...) => ... : (...) => ... [captured this in M10, field Field] : String | provenance | | | Capture.cs:297:9:297:12 | [post] this access : Capture [field Field] : String | Capture.cs:304:9:304:9 | access to local variable a : Action [captured this in M10, field Field] : String | provenance | | | Capture.cs:297:9:297:12 | [post] this access : Capture [field Field] : String | Capture.cs:306:15:306:18 | this access : Capture [field Field] : String | provenance | | | Capture.cs:297:22:297:35 | "taint source" : String | Capture.cs:297:9:297:12 | [post] this access : Capture [field Field] : String | provenance | | -| Capture.cs:299:16:299:16 | access to local variable a : (...) => ... [captured this in M10, field Field] : String | Capture.cs:304:9:304:9 | access to local variable a : (...) => ... [captured this in M10, field Field] : String | provenance | | -| Capture.cs:299:20:303:9 | (...) => ... : (...) => ... [captured this in M10, field Field] : String | Capture.cs:299:16:299:16 | access to local variable a : (...) => ... [captured this in M10, field Field] : String | provenance | | | Capture.cs:301:19:301:22 | this access : Capture [field Field] : String | Capture.cs:301:19:301:28 | access to field Field | provenance | | | Capture.cs:302:13:302:16 | [post] this access : Capture [field Field] : String | Capture.cs:304:9:304:9 | [post] access to local variable a : (...) => ... [captured this in M10, field Field] : String | provenance | | | Capture.cs:302:26:302:39 | "taint source" : String | Capture.cs:302:13:302:16 | [post] this access : Capture [field Field] : String | provenance | | | Capture.cs:304:9:304:9 | [post] access to local variable a : (...) => ... [captured this in M10, field Field] : String | Capture.cs:306:15:306:18 | this access : Capture [field Field] : String | provenance | | -| Capture.cs:304:9:304:9 | access to local variable a : (...) => ... [captured this in M10, field Field] : String | Capture.cs:301:19:301:22 | this access : Capture [field Field] : String | provenance | | | Capture.cs:304:9:304:9 | access to local variable a : Action [captured this in M10, field Field] : String | Capture.cs:301:19:301:22 | this access : Capture [field Field] : String | provenance | | | Capture.cs:306:15:306:18 | this access : Capture [field Field] : String | Capture.cs:306:15:306:24 | access to field Field | provenance | | | Capture.cs:311:17:311:30 | "taint source" : String | Capture.cs:312:15:312:15 | access to local variable x | provenance | | | Capture.cs:318:17:318:30 | "taint source" : String | Capture.cs:319:19:319:19 | access to local variable x | provenance | | -| Capture.cs:328:17:328:30 | "taint source" : String | Capture.cs:330:9:330:49 | CapturedLocalFunction(...) : CapturedLocalFunction [captured x] : String | provenance | | -| Capture.cs:330:9:330:49 | CapturedLocalFunction(...) : CapturedLocalFunction [captured x] : String | Capture.cs:332:42:332:62 | access to local function CapturedLocalFunction : CapturedLocalFunction [captured x] : String | provenance | | +| Capture.cs:328:17:328:30 | "taint source" : String | Capture.cs:334:9:334:30 | access to local function CapturingLocalFunction : CapturingLocalFunction [captured x] : String | provenance | | | Capture.cs:332:42:332:62 | access to local function CapturedLocalFunction : CapturedLocalFunction [captured x] : String | Capture.cs:330:47:330:47 | access to local variable x | provenance | | -| Capture.cs:337:17:337:30 | "taint source" : String | Capture.cs:339:33:339:46 | (...) => ... : (...) => ... [captured x] : String | provenance | | -| Capture.cs:339:33:339:46 | (...) => ... : (...) => ... [captured x] : String | Capture.cs:341:34:341:55 | (...) => ... : (...) => ... [captured capturedLambda, captured x] : String | provenance | | -| Capture.cs:339:33:339:46 | (...) => ... : (...) => ... [captured x] : String | Capture.cs:343:9:343:23 | access to local variable capturingLambda : Action [captured capturedLambda, captured x] : String | provenance | | -| Capture.cs:341:16:341:30 | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | Capture.cs:343:9:343:23 | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | provenance | | -| Capture.cs:341:34:341:55 | (...) => ... : (...) => ... [captured capturedLambda, captured x] : String | Capture.cs:341:16:341:30 | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | provenance | | -| Capture.cs:341:40:341:53 | access to local variable capturedLambda : (...) => ... [captured x] : String | Capture.cs:339:45:339:45 | access to local variable x | provenance | | -| Capture.cs:343:9:343:23 | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | Capture.cs:341:40:341:53 | access to local variable capturedLambda : (...) => ... [captured x] : String | provenance | | -| Capture.cs:343:9:343:23 | access to local variable capturingLambda : Action [captured capturedLambda, captured x] : String | Capture.cs:341:40:341:53 | access to local variable capturedLambda : (...) => ... [captured x] : String | provenance | | -| Capture.cs:348:34:348:34 | a : (...) => ... [captured s] : String | Capture.cs:350:9:350:9 | access to parameter a : (...) => ... [captured s] : String | provenance | | -| Capture.cs:348:34:348:34 | a : (...) => ... [captured sink39] : String | Capture.cs:350:9:350:9 | access to parameter a : (...) => ... [captured sink39] : String | provenance | | -| Capture.cs:348:34:348:34 | a : (...) => ... [captured sink39] : String | Capture.cs:350:9:350:9 | access to parameter a : (...) => ... [captured sink39] : String | provenance | | -| Capture.cs:350:9:350:9 | [post] access to parameter a : (...) => ... [captured sink40] : String | Capture.cs:114:23:117:13 | [post] (...) => ... : (...) => ... [captured sink40] : String | provenance | | -| Capture.cs:350:9:350:9 | access to parameter a : (...) => ... [captured s] : String | Capture.cs:217:19:217:19 | access to parameter s | provenance | | -| Capture.cs:350:9:350:9 | access to parameter a : (...) => ... [captured sink39] : String | Capture.cs:55:27:58:17 | (...) => ... : (...) => ... [captured sink39] : String | provenance | | -| Capture.cs:350:9:350:9 | access to parameter a : (...) => ... [captured sink39] : String | Capture.cs:57:27:57:32 | access to parameter sink39 | provenance | | -| Capture.cs:353:45:353:45 | x : String | Capture.cs:355:11:355:11 | access to parameter x : String | provenance | | -| Capture.cs:355:11:355:11 | access to parameter x : String | Capture.cs:273:19:273:19 | x : String | provenance | | +| Capture.cs:334:9:334:30 | access to local function CapturingLocalFunction : CapturingLocalFunction [captured x] : String | Capture.cs:332:42:332:62 | access to local function CapturedLocalFunction : CapturedLocalFunction [captured x] : String | provenance | | +| Capture.cs:339:17:339:30 | "taint source" : String | Capture.cs:341:33:341:46 | (...) => ... : (...) => ... [captured x] : String | provenance | | +| Capture.cs:341:33:341:46 | (...) => ... : (...) => ... [captured x] : String | Capture.cs:345:9:345:23 | access to local variable capturingLambda : Action [captured capturedLambda, captured x] : String | provenance | | +| Capture.cs:343:40:343:53 | access to local variable capturedLambda : (...) => ... [captured x] : String | Capture.cs:341:45:341:45 | access to local variable x | provenance | | +| Capture.cs:345:9:345:23 | access to local variable capturingLambda : Action [captured capturedLambda, captured x] : String | Capture.cs:343:40:343:53 | access to local variable capturedLambda : (...) => ... [captured x] : String | provenance | | +| Capture.cs:350:34:350:34 | a : (...) => ... [captured s] : String | Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured s] : String | provenance | | +| Capture.cs:350:34:350:34 | a : (...) => ... [captured sink39] : String | Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured sink39] : String | provenance | | +| Capture.cs:350:34:350:34 | a : (...) => ... [captured sink39] : String | Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured sink39] : String | provenance | | +| Capture.cs:352:9:352:9 | [post] access to parameter a : (...) => ... [captured sink40] : String | Capture.cs:114:23:117:13 | [post] (...) => ... : (...) => ... [captured sink40] : String | provenance | | +| Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured s] : String | Capture.cs:217:19:217:19 | access to parameter s | provenance | | +| Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured sink39] : String | Capture.cs:55:27:58:17 | (...) => ... : (...) => ... [captured sink39] : String | provenance | | +| Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured sink39] : String | Capture.cs:57:27:57:32 | access to parameter sink39 | provenance | | +| Capture.cs:355:45:355:45 | x : String | Capture.cs:357:11:357:11 | access to parameter x : String | provenance | | +| Capture.cs:357:11:357:11 | access to parameter x : String | Capture.cs:273:19:273:19 | x : String | provenance | | | GlobalDataFlow.cs:18:9:18:23 | access to field SinkField0 : String | GlobalDataFlow.cs:19:15:19:29 | access to field SinkField0 | provenance | | | GlobalDataFlow.cs:18:9:18:23 | access to field SinkField0 : String | GlobalDataFlow.cs:26:9:26:26 | access to property SinkProperty0 : String | provenance | | | GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:18:9:18:23 | access to field SinkField0 : String | provenance | | @@ -289,14 +249,18 @@ edges | GlobalDataFlow.cs:85:22:85:128 | call to method Zip<String,String,String> : IEnumerable<T> [element] : String | GlobalDataFlow.cs:85:22:85:136 | call to method First<String> : String | provenance | | | GlobalDataFlow.cs:85:22:85:136 | call to method First<String> : String | GlobalDataFlow.cs:85:13:85:18 | access to local variable sink15 : String | provenance | | | GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:85:22:85:128 | call to method Zip<String,String,String> : IEnumerable<T> [element] : String | provenance | | +| GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:85:118:85:118 | x : String | provenance | | | GlobalDataFlow.cs:85:57:85:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | provenance | | | GlobalDataFlow.cs:85:59:85:64 | access to local variable sink14 : String | GlobalDataFlow.cs:85:57:85:66 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:85:118:85:118 | x : String | GlobalDataFlow.cs:85:127:85:127 | access to parameter x : String | provenance | | | GlobalDataFlow.cs:87:13:87:18 | access to local variable sink16 : String | GlobalDataFlow.cs:88:15:88:20 | access to local variable sink16 | provenance | | | GlobalDataFlow.cs:87:22:87:128 | call to method Zip<String,String,String> : IEnumerable<T> [element] : String | GlobalDataFlow.cs:87:22:87:136 | call to method First<String> : String | provenance | | | GlobalDataFlow.cs:87:22:87:136 | call to method First<String> : String | GlobalDataFlow.cs:87:13:87:18 | access to local variable sink16 : String | provenance | | | GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | GlobalDataFlow.cs:87:22:87:128 | call to method Zip<String,String,String> : IEnumerable<T> [element] : String | provenance | | +| GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | GlobalDataFlow.cs:87:121:87:121 | y : String | provenance | | | GlobalDataFlow.cs:87:104:87:113 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | provenance | | | GlobalDataFlow.cs:87:106:87:111 | access to local variable sink15 : String | GlobalDataFlow.cs:87:104:87:113 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:87:121:87:121 | y : String | GlobalDataFlow.cs:87:127:87:127 | access to parameter y : String | provenance | | | GlobalDataFlow.cs:138:40:138:40 | x : String | GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | provenance | | | GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | GlobalDataFlow.cs:138:45:138:64 | call to method ApplyFunc<String,String> : String | provenance | | | GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | provenance | | @@ -334,7 +298,9 @@ edges | GlobalDataFlow.cs:211:44:211:61 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:211:38:211:61 | array creation of type String[] : null [element] : String | provenance | | | GlobalDataFlow.cs:211:46:211:59 | "taint source" : String | GlobalDataFlow.cs:211:44:211:61 | { ..., ... } : null [element] : String | provenance | | | GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | GlobalDataFlow.cs:214:58:214:68 | access to parameter sinkParam10 | provenance | | +| GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | GlobalDataFlow.cs:214:79:214:89 | access to parameter sinkParam10 : String | provenance | | | GlobalDataFlow.cs:215:71:215:71 | x : String | GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | GlobalDataFlow.cs:215:76:215:90 | call to method ReturnCheck2<String> : String | provenance | | | GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | provenance | | | GlobalDataFlow.cs:216:13:216:18 | access to local variable sink24 : String | GlobalDataFlow.cs:217:15:217:20 | access to local variable sink24 | provenance | | | GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable<T> [element] : String | GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | provenance | | @@ -379,8 +345,11 @@ edges | GlobalDataFlow.cs:304:32:304:32 | x : String | GlobalDataFlow.cs:306:9:306:9 | access to parameter y : String | provenance | | | GlobalDataFlow.cs:310:32:310:32 | x : String | GlobalDataFlow.cs:312:9:312:9 | access to parameter y : String | provenance | | | GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | GlobalDataFlow.cs:317:15:317:24 | access to parameter sinkParam8 | provenance | | +| GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | GlobalDataFlow.cs:318:16:318:25 | access to parameter sinkParam8 : String | provenance | | | GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | GlobalDataFlow.cs:323:15:323:24 | access to parameter sinkParam9 | provenance | | +| GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | GlobalDataFlow.cs:324:16:324:25 | access to parameter sinkParam9 : String | provenance | | | GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | GlobalDataFlow.cs:329:15:329:25 | access to parameter sinkParam11 | provenance | | +| GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | GlobalDataFlow.cs:330:16:330:26 | access to parameter sinkParam11 : String | provenance | | | GlobalDataFlow.cs:341:16:341:29 | "taint source" : String | GlobalDataFlow.cs:157:21:157:25 | call to method Out : String | provenance | | | GlobalDataFlow.cs:341:16:341:29 | "taint source" : String | GlobalDataFlow.cs:193:22:193:42 | object creation of type Lazy<String> : Lazy<T> [property Value] : String | provenance | | | GlobalDataFlow.cs:346:9:346:9 | access to parameter x : String | GlobalDataFlow.cs:160:20:160:24 | access to local variable sink7 : String | provenance | | @@ -514,24 +483,18 @@ edges | Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:48:13:48:13 | access to local variable s : String | provenance | | nodes | Capture.cs:7:20:7:26 | tainted : String | semmle.label | tainted : String | -| Capture.cs:9:9:13:9 | CaptureIn1(...) : CaptureIn1 [captured tainted] : String | semmle.label | CaptureIn1(...) : CaptureIn1 [captured tainted] : String | | Capture.cs:11:17:11:22 | access to local variable sink27 : String | semmle.label | access to local variable sink27 : String | | Capture.cs:11:26:11:32 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | | Capture.cs:12:19:12:24 | access to local variable sink27 | semmle.label | access to local variable sink27 | | Capture.cs:14:9:14:18 | access to local function CaptureIn1 : CaptureIn1 [captured tainted] : String | semmle.label | access to local function CaptureIn1 : CaptureIn1 [captured tainted] : String | -| Capture.cs:16:9:24:9 | CaptureIn2(...) : CaptureIn2 [captured tainted] : String | semmle.label | CaptureIn2(...) : CaptureIn2 [captured tainted] : String | -| Capture.cs:18:13:22:13 | M(...) : M [captured tainted] : String | semmle.label | M(...) : M [captured tainted] : String | | Capture.cs:20:21:20:26 | access to local variable sink28 : String | semmle.label | access to local variable sink28 : String | | Capture.cs:20:30:20:36 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | | Capture.cs:21:23:21:28 | access to local variable sink28 | semmle.label | access to local variable sink28 | | Capture.cs:23:13:23:13 | access to local function M : M [captured tainted] : String | semmle.label | access to local function M : M [captured tainted] : String | | Capture.cs:25:9:25:18 | access to local function CaptureIn2 : CaptureIn2 [captured tainted] : String | semmle.label | access to local function CaptureIn2 : CaptureIn2 [captured tainted] : String | -| Capture.cs:27:30:27:39 | access to local variable captureIn3 : (...) => ... [captured tainted] : String | semmle.label | access to local variable captureIn3 : (...) => ... [captured tainted] : String | -| Capture.cs:27:43:32:9 | (...) => ... : (...) => ... [captured tainted] : String | semmle.label | (...) => ... : (...) => ... [captured tainted] : String | | Capture.cs:29:17:29:22 | access to local variable sink29 : String | semmle.label | access to local variable sink29 : String | | Capture.cs:29:26:29:32 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | | Capture.cs:30:19:30:24 | access to local variable sink29 | semmle.label | access to local variable sink29 | -| Capture.cs:33:30:33:39 | access to local variable captureIn3 : (...) => ... [captured tainted] : String | semmle.label | access to local variable captureIn3 : (...) => ... [captured tainted] : String | | Capture.cs:33:30:33:39 | access to local variable captureIn3 : Func<String,String> [captured tainted] : String | semmle.label | access to local variable captureIn3 : Func<String,String> [captured tainted] : String | | Capture.cs:50:50:50:55 | sink39 : String | semmle.label | sink39 : String | | Capture.cs:52:23:59:13 | (...) => ... : (...) => ... [captured sink39] : String | semmle.label | (...) => ... : (...) => ... [captured sink39] : String | @@ -553,21 +516,21 @@ nodes | Capture.cs:123:9:123:33 | [post] access to local function CaptureOutMultipleLambdas : CaptureOutMultipleLambdas [captured sink40] : String | semmle.label | [post] access to local function CaptureOutMultipleLambdas : CaptureOutMultipleLambdas [captured sink40] : String | | Capture.cs:124:15:124:20 | access to local variable sink40 | semmle.label | access to local variable sink40 | | Capture.cs:127:25:127:31 | tainted : String | semmle.label | tainted : String | -| Capture.cs:130:9:133:9 | CaptureThrough1(...) : CaptureThrough1 [captured tainted] : String | semmle.label | CaptureThrough1(...) : CaptureThrough1 [captured tainted] : String | +| Capture.cs:132:22:132:28 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | | Capture.cs:134:9:134:23 | [post] access to local function CaptureThrough1 : CaptureThrough1 [captured sink33] : String | semmle.label | [post] access to local function CaptureThrough1 : CaptureThrough1 [captured sink33] : String | | Capture.cs:134:9:134:23 | access to local function CaptureThrough1 : CaptureThrough1 [captured tainted] : String | semmle.label | access to local function CaptureThrough1 : CaptureThrough1 [captured tainted] : String | | Capture.cs:135:15:135:20 | access to local variable sink33 | semmle.label | access to local variable sink33 | -| Capture.cs:138:9:145:9 | CaptureThrough2(...) : CaptureThrough2 [captured tainted] : String | semmle.label | CaptureThrough2(...) : CaptureThrough2 [captured tainted] : String | +| Capture.cs:142:26:142:32 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | +| Capture.cs:144:13:144:13 | [post] access to local function M : M [captured sink34] : String | semmle.label | [post] access to local function M : M [captured sink34] : String | +| Capture.cs:144:13:144:13 | access to local function M : M [captured tainted] : String | semmle.label | access to local function M : M [captured tainted] : String | | Capture.cs:146:9:146:23 | [post] access to local function CaptureThrough2 : CaptureThrough2 [captured sink34] : String | semmle.label | [post] access to local function CaptureThrough2 : CaptureThrough2 [captured sink34] : String | | Capture.cs:146:9:146:23 | access to local function CaptureThrough2 : CaptureThrough2 [captured tainted] : String | semmle.label | access to local function CaptureThrough2 : CaptureThrough2 [captured tainted] : String | | Capture.cs:147:15:147:20 | access to local variable sink34 | semmle.label | access to local variable sink34 | -| Capture.cs:150:30:150:44 | access to local variable captureThrough3 : (...) => ... [captured tainted] : String | semmle.label | access to local variable captureThrough3 : (...) => ... [captured tainted] : String | -| Capture.cs:150:48:154:9 | (...) => ... : (...) => ... [captured tainted] : String | semmle.label | (...) => ... : (...) => ... [captured tainted] : String | +| Capture.cs:152:22:152:28 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | | Capture.cs:155:30:155:44 | [post] access to local variable captureThrough3 : (...) => ... [captured sink35] : String | semmle.label | [post] access to local variable captureThrough3 : (...) => ... [captured sink35] : String | -| Capture.cs:155:30:155:44 | access to local variable captureThrough3 : (...) => ... [captured tainted] : String | semmle.label | access to local variable captureThrough3 : (...) => ... [captured tainted] : String | | Capture.cs:155:30:155:44 | access to local variable captureThrough3 : Func<String,String> [captured tainted] : String | semmle.label | access to local variable captureThrough3 : Func<String,String> [captured tainted] : String | | Capture.cs:156:15:156:20 | access to local variable sink35 | semmle.label | access to local variable sink35 | -| Capture.cs:158:9:161:9 | CaptureThrough4(...) : CaptureThrough4 [captured tainted] : String | semmle.label | CaptureThrough4(...) : CaptureThrough4 [captured tainted] : String | +| Capture.cs:160:20:160:26 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | | Capture.cs:162:13:162:18 | access to local variable sink36 : String | semmle.label | access to local variable sink36 : String | | Capture.cs:162:22:162:36 | access to local function CaptureThrough4 : CaptureThrough4 [captured tainted] : String | semmle.label | access to local function CaptureThrough4 : CaptureThrough4 [captured tainted] : String | | Capture.cs:162:22:162:38 | call to local function CaptureThrough4 : String | semmle.label | call to local function CaptureThrough4 : String | @@ -578,7 +541,7 @@ nodes | Capture.cs:170:25:170:31 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | | Capture.cs:171:15:171:20 | access to local variable sink37 | semmle.label | access to local variable sink37 | | Capture.cs:190:26:190:26 | s : String | semmle.label | s : String | -| Capture.cs:192:13:192:28 | M(...) : M [captured s] : String | semmle.label | M(...) : M [captured s] : String | +| Capture.cs:192:27:192:27 | access to parameter s : String | semmle.label | access to parameter s : String | | Capture.cs:193:20:193:20 | access to local function M : M [captured s] : String | semmle.label | access to local function M : M [captured s] : String | | Capture.cs:193:20:193:22 | call to local function M : String | semmle.label | call to local function M : String | | Capture.cs:196:13:196:18 | access to local variable sink38 : String | semmle.label | access to local variable sink38 : String | @@ -586,10 +549,7 @@ nodes | Capture.cs:196:25:196:31 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | | Capture.cs:197:15:197:20 | access to local variable sink38 | semmle.label | access to local variable sink38 | | Capture.cs:202:20:202:20 | s : String | semmle.label | s : String | -| Capture.cs:204:16:204:16 | access to local variable a : (...) => ... [captured s] : String | semmle.label | access to local variable a : (...) => ... [captured s] : String | -| Capture.cs:204:20:207:9 | (...) => ... : (...) => ... [captured s] : String | semmle.label | (...) => ... : (...) => ... [captured s] : String | | Capture.cs:206:19:206:19 | access to parameter s | semmle.label | access to parameter s | -| Capture.cs:208:9:208:9 | access to local variable a : (...) => ... [captured s] : String | semmle.label | access to local variable a : (...) => ... [captured s] : String | | Capture.cs:208:9:208:9 | access to local variable a : Action [captured s] : String | semmle.label | access to local variable a : Action [captured s] : String | | Capture.cs:211:21:211:34 | "taint source" : String | semmle.label | "taint source" : String | | Capture.cs:213:22:213:22 | s : String | semmle.label | s : String | @@ -607,14 +567,11 @@ nodes | Capture.cs:234:15:234:15 | access to local variable x | semmle.label | access to local variable x | | Capture.cs:242:9:242:9 | [post] access to local variable c : Capture [field Field] : String | semmle.label | [post] access to local variable c : Capture [field Field] : String | | Capture.cs:242:19:242:32 | "taint source" : String | semmle.label | "taint source" : String | -| Capture.cs:244:16:244:16 | access to local variable a : (...) => ... [captured c, field Field] : String | semmle.label | access to local variable a : (...) => ... [captured c, field Field] : String | -| Capture.cs:244:20:248:9 | (...) => ... : (...) => ... [captured c, field Field] : String | semmle.label | (...) => ... : (...) => ... [captured c, field Field] : String | | Capture.cs:246:19:246:19 | access to local variable c : Capture [field Field] : String | semmle.label | access to local variable c : Capture [field Field] : String | | Capture.cs:246:19:246:25 | access to field Field | semmle.label | access to field Field | | Capture.cs:247:13:247:13 | [post] access to local variable c : Capture [field Field] : String | semmle.label | [post] access to local variable c : Capture [field Field] : String | | Capture.cs:247:23:247:36 | "taint source" : String | semmle.label | "taint source" : String | | Capture.cs:249:9:249:9 | [post] access to local variable a : (...) => ... [captured c, field Field] : String | semmle.label | [post] access to local variable a : (...) => ... [captured c, field Field] : String | -| Capture.cs:249:9:249:9 | access to local variable a : (...) => ... [captured c, field Field] : String | semmle.label | access to local variable a : (...) => ... [captured c, field Field] : String | | Capture.cs:249:9:249:9 | access to local variable a : Action [captured c, field Field] : String | semmle.label | access to local variable a : Action [captured c, field Field] : String | | Capture.cs:251:15:251:15 | access to local variable c : Capture [field Field] : String | semmle.label | access to local variable c : Capture [field Field] : String | | Capture.cs:251:15:251:21 | access to field Field | semmle.label | access to field Field | @@ -627,29 +584,20 @@ nodes | Capture.cs:273:30:273:30 | access to parameter x | semmle.label | access to parameter x | | Capture.cs:273:34:273:47 | "taint source" : String | semmle.label | "taint source" : String | | Capture.cs:278:17:278:30 | "taint source" : String | semmle.label | "taint source" : String | -| Capture.cs:280:16:280:21 | access to local variable middle : (...) => ... [captured x] : String | semmle.label | access to local variable middle : (...) => ... [captured x] : String | -| Capture.cs:280:25:288:9 | (...) => ... : (...) => ... [captured x] : String | semmle.label | (...) => ... : (...) => ... [captured x] : String | -| Capture.cs:282:20:282:24 | access to local variable inner : (...) => ... [captured x] : String | semmle.label | access to local variable inner : (...) => ... [captured x] : String | -| Capture.cs:282:28:286:13 | (...) => ... : (...) => ... [captured x] : String | semmle.label | (...) => ... : (...) => ... [captured x] : String | | Capture.cs:284:23:284:23 | access to local variable x | semmle.label | access to local variable x | | Capture.cs:285:21:285:34 | "taint source" : String | semmle.label | "taint source" : String | | Capture.cs:287:13:287:17 | [post] access to local variable inner : (...) => ... [captured x] : String | semmle.label | [post] access to local variable inner : (...) => ... [captured x] : String | -| Capture.cs:287:13:287:17 | access to local variable inner : (...) => ... [captured x] : String | semmle.label | access to local variable inner : (...) => ... [captured x] : String | | Capture.cs:287:13:287:17 | access to local variable inner : Action [captured x] : String | semmle.label | access to local variable inner : Action [captured x] : String | | Capture.cs:290:9:290:14 | [post] access to local variable middle : (...) => ... [captured x] : String | semmle.label | [post] access to local variable middle : (...) => ... [captured x] : String | -| Capture.cs:290:9:290:14 | access to local variable middle : (...) => ... [captured x] : String | semmle.label | access to local variable middle : (...) => ... [captured x] : String | | Capture.cs:290:9:290:14 | access to local variable middle : Action [captured x] : String | semmle.label | access to local variable middle : Action [captured x] : String | | Capture.cs:292:15:292:15 | access to local variable x | semmle.label | access to local variable x | | Capture.cs:297:9:297:12 | [post] this access : Capture [field Field] : String | semmle.label | [post] this access : Capture [field Field] : String | | Capture.cs:297:22:297:35 | "taint source" : String | semmle.label | "taint source" : String | -| Capture.cs:299:16:299:16 | access to local variable a : (...) => ... [captured this in M10, field Field] : String | semmle.label | access to local variable a : (...) => ... [captured this in M10, field Field] : String | -| Capture.cs:299:20:303:9 | (...) => ... : (...) => ... [captured this in M10, field Field] : String | semmle.label | (...) => ... : (...) => ... [captured this in M10, field Field] : String | | Capture.cs:301:19:301:22 | this access : Capture [field Field] : String | semmle.label | this access : Capture [field Field] : String | | Capture.cs:301:19:301:28 | access to field Field | semmle.label | access to field Field | | Capture.cs:302:13:302:16 | [post] this access : Capture [field Field] : String | semmle.label | [post] this access : Capture [field Field] : String | | Capture.cs:302:26:302:39 | "taint source" : String | semmle.label | "taint source" : String | | Capture.cs:304:9:304:9 | [post] access to local variable a : (...) => ... [captured this in M10, field Field] : String | semmle.label | [post] access to local variable a : (...) => ... [captured this in M10, field Field] : String | -| Capture.cs:304:9:304:9 | access to local variable a : (...) => ... [captured this in M10, field Field] : String | semmle.label | access to local variable a : (...) => ... [captured this in M10, field Field] : String | | Capture.cs:304:9:304:9 | access to local variable a : Action [captured this in M10, field Field] : String | semmle.label | access to local variable a : Action [captured this in M10, field Field] : String | | Capture.cs:306:15:306:18 | this access : Capture [field Field] : String | semmle.label | this access : Capture [field Field] : String | | Capture.cs:306:15:306:24 | access to field Field | semmle.label | access to field Field | @@ -658,26 +606,23 @@ nodes | Capture.cs:318:17:318:30 | "taint source" : String | semmle.label | "taint source" : String | | Capture.cs:319:19:319:19 | access to local variable x | semmle.label | access to local variable x | | Capture.cs:328:17:328:30 | "taint source" : String | semmle.label | "taint source" : String | -| Capture.cs:330:9:330:49 | CapturedLocalFunction(...) : CapturedLocalFunction [captured x] : String | semmle.label | CapturedLocalFunction(...) : CapturedLocalFunction [captured x] : String | | Capture.cs:330:47:330:47 | access to local variable x | semmle.label | access to local variable x | | Capture.cs:332:42:332:62 | access to local function CapturedLocalFunction : CapturedLocalFunction [captured x] : String | semmle.label | access to local function CapturedLocalFunction : CapturedLocalFunction [captured x] : String | -| Capture.cs:337:17:337:30 | "taint source" : String | semmle.label | "taint source" : String | -| Capture.cs:339:33:339:46 | (...) => ... : (...) => ... [captured x] : String | semmle.label | (...) => ... : (...) => ... [captured x] : String | -| Capture.cs:339:45:339:45 | access to local variable x | semmle.label | access to local variable x | -| Capture.cs:341:16:341:30 | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | semmle.label | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | -| Capture.cs:341:34:341:55 | (...) => ... : (...) => ... [captured capturedLambda, captured x] : String | semmle.label | (...) => ... : (...) => ... [captured capturedLambda, captured x] : String | -| Capture.cs:341:40:341:53 | access to local variable capturedLambda : (...) => ... [captured x] : String | semmle.label | access to local variable capturedLambda : (...) => ... [captured x] : String | -| Capture.cs:343:9:343:23 | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | semmle.label | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | -| Capture.cs:343:9:343:23 | access to local variable capturingLambda : Action [captured capturedLambda, captured x] : String | semmle.label | access to local variable capturingLambda : Action [captured capturedLambda, captured x] : String | -| Capture.cs:348:34:348:34 | a : (...) => ... [captured s] : String | semmle.label | a : (...) => ... [captured s] : String | -| Capture.cs:348:34:348:34 | a : (...) => ... [captured sink39] : String | semmle.label | a : (...) => ... [captured sink39] : String | -| Capture.cs:348:34:348:34 | a : (...) => ... [captured sink39] : String | semmle.label | a : (...) => ... [captured sink39] : String | -| Capture.cs:350:9:350:9 | [post] access to parameter a : (...) => ... [captured sink40] : String | semmle.label | [post] access to parameter a : (...) => ... [captured sink40] : String | -| Capture.cs:350:9:350:9 | access to parameter a : (...) => ... [captured s] : String | semmle.label | access to parameter a : (...) => ... [captured s] : String | -| Capture.cs:350:9:350:9 | access to parameter a : (...) => ... [captured sink39] : String | semmle.label | access to parameter a : (...) => ... [captured sink39] : String | -| Capture.cs:350:9:350:9 | access to parameter a : (...) => ... [captured sink39] : String | semmle.label | access to parameter a : (...) => ... [captured sink39] : String | -| Capture.cs:353:45:353:45 | x : String | semmle.label | x : String | -| Capture.cs:355:11:355:11 | access to parameter x : String | semmle.label | access to parameter x : String | +| Capture.cs:334:9:334:30 | access to local function CapturingLocalFunction : CapturingLocalFunction [captured x] : String | semmle.label | access to local function CapturingLocalFunction : CapturingLocalFunction [captured x] : String | +| Capture.cs:339:17:339:30 | "taint source" : String | semmle.label | "taint source" : String | +| Capture.cs:341:33:341:46 | (...) => ... : (...) => ... [captured x] : String | semmle.label | (...) => ... : (...) => ... [captured x] : String | +| Capture.cs:341:45:341:45 | access to local variable x | semmle.label | access to local variable x | +| Capture.cs:343:40:343:53 | access to local variable capturedLambda : (...) => ... [captured x] : String | semmle.label | access to local variable capturedLambda : (...) => ... [captured x] : String | +| Capture.cs:345:9:345:23 | access to local variable capturingLambda : Action [captured capturedLambda, captured x] : String | semmle.label | access to local variable capturingLambda : Action [captured capturedLambda, captured x] : String | +| Capture.cs:350:34:350:34 | a : (...) => ... [captured s] : String | semmle.label | a : (...) => ... [captured s] : String | +| Capture.cs:350:34:350:34 | a : (...) => ... [captured sink39] : String | semmle.label | a : (...) => ... [captured sink39] : String | +| Capture.cs:350:34:350:34 | a : (...) => ... [captured sink39] : String | semmle.label | a : (...) => ... [captured sink39] : String | +| Capture.cs:352:9:352:9 | [post] access to parameter a : (...) => ... [captured sink40] : String | semmle.label | [post] access to parameter a : (...) => ... [captured sink40] : String | +| Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured s] : String | semmle.label | access to parameter a : (...) => ... [captured s] : String | +| Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured sink39] : String | semmle.label | access to parameter a : (...) => ... [captured sink39] : String | +| Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured sink39] : String | semmle.label | access to parameter a : (...) => ... [captured sink39] : String | +| Capture.cs:355:45:355:45 | x : String | semmle.label | x : String | +| Capture.cs:357:11:357:11 | access to parameter x : String | semmle.label | access to parameter x : String | | GlobalDataFlow.cs:18:9:18:23 | access to field SinkField0 : String | semmle.label | access to field SinkField0 : String | | GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | semmle.label | "taint source" : String | | GlobalDataFlow.cs:19:15:19:29 | access to field SinkField0 | semmle.label | access to field SinkField0 | @@ -736,6 +681,8 @@ nodes | GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | semmle.label | (...) ... : null [element] : String | | GlobalDataFlow.cs:85:57:85:66 | { ..., ... } : null [element] : String | semmle.label | { ..., ... } : null [element] : String | | GlobalDataFlow.cs:85:59:85:64 | access to local variable sink14 : String | semmle.label | access to local variable sink14 : String | +| GlobalDataFlow.cs:85:118:85:118 | x : String | semmle.label | x : String | +| GlobalDataFlow.cs:85:127:85:127 | access to parameter x : String | semmle.label | access to parameter x : String | | GlobalDataFlow.cs:86:15:86:20 | access to local variable sink15 | semmle.label | access to local variable sink15 | | GlobalDataFlow.cs:87:13:87:18 | access to local variable sink16 : String | semmle.label | access to local variable sink16 : String | | GlobalDataFlow.cs:87:22:87:128 | call to method Zip<String,String,String> : IEnumerable<T> [element] : String | semmle.label | call to method Zip<String,String,String> : IEnumerable<T> [element] : String | @@ -743,6 +690,8 @@ nodes | GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | semmle.label | (...) ... : null [element] : String | | GlobalDataFlow.cs:87:104:87:113 | { ..., ... } : null [element] : String | semmle.label | { ..., ... } : null [element] : String | | GlobalDataFlow.cs:87:106:87:111 | access to local variable sink15 : String | semmle.label | access to local variable sink15 : String | +| GlobalDataFlow.cs:87:121:87:121 | y : String | semmle.label | y : String | +| GlobalDataFlow.cs:87:127:87:127 | access to parameter y : String | semmle.label | access to parameter y : String | | GlobalDataFlow.cs:88:15:88:20 | access to local variable sink16 | semmle.label | access to local variable sink16 | | GlobalDataFlow.cs:138:40:138:40 | x : String | semmle.label | x : String | | GlobalDataFlow.cs:138:45:138:64 | call to method ApplyFunc<String,String> : String | semmle.label | call to method ApplyFunc<String,String> : String | @@ -787,7 +736,9 @@ nodes | GlobalDataFlow.cs:211:46:211:59 | "taint source" : String | semmle.label | "taint source" : String | | GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | semmle.label | sinkParam10 : String | | GlobalDataFlow.cs:214:58:214:68 | access to parameter sinkParam10 | semmle.label | access to parameter sinkParam10 | +| GlobalDataFlow.cs:214:79:214:89 | access to parameter sinkParam10 : String | semmle.label | access to parameter sinkParam10 : String | | GlobalDataFlow.cs:215:71:215:71 | x : String | semmle.label | x : String | +| GlobalDataFlow.cs:215:76:215:90 | call to method ReturnCheck2<String> : String | semmle.label | call to method ReturnCheck2<String> : String | | GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | semmle.label | access to parameter x : String | | GlobalDataFlow.cs:216:13:216:18 | access to local variable sink24 : String | semmle.label | access to local variable sink24 : String | | GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable<T> [element] : String | semmle.label | access to local variable tainted : IQueryable<T> [element] : String | @@ -843,10 +794,13 @@ nodes | GlobalDataFlow.cs:312:9:312:9 | access to parameter y : String | semmle.label | access to parameter y : String | | GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | semmle.label | sinkParam8 : String | | GlobalDataFlow.cs:317:15:317:24 | access to parameter sinkParam8 | semmle.label | access to parameter sinkParam8 | +| GlobalDataFlow.cs:318:16:318:25 | access to parameter sinkParam8 : String | semmle.label | access to parameter sinkParam8 : String | | GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | semmle.label | sinkParam9 : String | | GlobalDataFlow.cs:323:15:323:24 | access to parameter sinkParam9 | semmle.label | access to parameter sinkParam9 | +| GlobalDataFlow.cs:324:16:324:25 | access to parameter sinkParam9 : String | semmle.label | access to parameter sinkParam9 : String | | GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | semmle.label | sinkParam11 : String | | GlobalDataFlow.cs:329:15:329:25 | access to parameter sinkParam11 | semmle.label | access to parameter sinkParam11 | +| GlobalDataFlow.cs:330:16:330:26 | access to parameter sinkParam11 : String | semmle.label | access to parameter sinkParam11 : String | | GlobalDataFlow.cs:341:16:341:29 | "taint source" : String | semmle.label | "taint source" : String | | GlobalDataFlow.cs:346:9:346:9 | access to parameter x : String | semmle.label | access to parameter x : String | | GlobalDataFlow.cs:346:13:346:26 | "taint source" : String | semmle.label | "taint source" : String | @@ -981,7 +935,13 @@ nodes | Splitting.cs:50:19:50:19 | access to local variable s | semmle.label | access to local variable s | | Splitting.cs:52:19:52:19 | access to local variable s | semmle.label | access to local variable s | subpaths +| Capture.cs:134:9:134:23 | access to local function CaptureThrough1 : CaptureThrough1 [captured tainted] : String | Capture.cs:132:22:132:28 | access to parameter tainted : String | Capture.cs:132:22:132:28 | access to parameter tainted : String | Capture.cs:134:9:134:23 | [post] access to local function CaptureThrough1 : CaptureThrough1 [captured sink33] : String | +| Capture.cs:144:13:144:13 | access to local function M : M [captured tainted] : String | Capture.cs:142:26:142:32 | access to parameter tainted : String | Capture.cs:142:26:142:32 | access to parameter tainted : String | Capture.cs:144:13:144:13 | [post] access to local function M : M [captured sink34] : String | +| Capture.cs:146:9:146:23 | access to local function CaptureThrough2 : CaptureThrough2 [captured tainted] : String | Capture.cs:144:13:144:13 | access to local function M : M [captured tainted] : String | Capture.cs:144:13:144:13 | [post] access to local function M : M [captured sink34] : String | Capture.cs:146:9:146:23 | [post] access to local function CaptureThrough2 : CaptureThrough2 [captured sink34] : String | +| Capture.cs:155:30:155:44 | access to local variable captureThrough3 : Func<String,String> [captured tainted] : String | Capture.cs:152:22:152:28 | access to parameter tainted : String | Capture.cs:152:22:152:28 | access to parameter tainted : String | Capture.cs:155:30:155:44 | [post] access to local variable captureThrough3 : (...) => ... [captured sink35] : String | +| Capture.cs:162:22:162:36 | access to local function CaptureThrough4 : CaptureThrough4 [captured tainted] : String | Capture.cs:160:20:160:26 | access to parameter tainted : String | Capture.cs:160:20:160:26 | access to parameter tainted : String | Capture.cs:162:22:162:38 | call to local function CaptureThrough4 : String | | Capture.cs:170:25:170:31 | access to parameter tainted : String | Capture.cs:166:37:166:37 | p : String | Capture.cs:168:22:168:22 | access to parameter p : String | Capture.cs:170:9:170:23 | [post] access to local function CaptureThrough5 : CaptureThrough5 [captured sink37] : String | +| Capture.cs:193:20:193:20 | access to local function M : M [captured s] : String | Capture.cs:192:27:192:27 | access to parameter s : String | Capture.cs:192:27:192:27 | access to parameter s : String | Capture.cs:193:20:193:22 | call to local function M : String | | Capture.cs:196:25:196:31 | access to parameter tainted : String | Capture.cs:190:26:190:26 | s : String | Capture.cs:193:20:193:22 | call to local function M : String | Capture.cs:196:22:196:32 | call to local function Id : String | | Capture.cs:221:21:221:34 | "taint source" : String | Capture.cs:213:22:213:22 | s : String | Capture.cs:215:16:218:9 | (...) => ... : (...) => ... [captured s] : String | Capture.cs:221:18:221:35 | call to method M3 : (...) => ... [captured s] : String | | Capture.cs:223:31:223:44 | "taint source" : String | Capture.cs:213:22:213:22 | s : String | Capture.cs:215:16:218:9 | (...) => ... : (...) => ... [captured s] : String | Capture.cs:223:28:223:45 | call to method M3 : (...) => ... [captured s] : String | @@ -990,9 +950,16 @@ subpaths | GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | GlobalDataFlow.cs:304:32:304:32 | x : String | GlobalDataFlow.cs:306:9:306:9 | access to parameter y : String | GlobalDataFlow.cs:76:30:76:34 | access to local variable sink2 : String | | GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | GlobalDataFlow.cs:310:32:310:32 | x : String | GlobalDataFlow.cs:312:9:312:9 | access to parameter y : String | GlobalDataFlow.cs:79:30:79:34 | access to local variable sink3 : String | | GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | GlobalDataFlow.cs:553:71:553:71 | e : null [element] : String | GlobalDataFlow.cs:558:44:558:47 | delegate call : String | GlobalDataFlow.cs:81:22:81:85 | call to method SelectEven<String,String> : IEnumerable<T> [element] : String | +| GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | GlobalDataFlow.cs:318:16:318:25 | access to parameter sinkParam8 : String | GlobalDataFlow.cs:83:22:83:87 | call to method Select<String,String> : IEnumerable<T> [element] : String | +| GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:85:118:85:118 | x : String | GlobalDataFlow.cs:85:127:85:127 | access to parameter x : String | GlobalDataFlow.cs:85:22:85:128 | call to method Zip<String,String,String> : IEnumerable<T> [element] : String | +| GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | GlobalDataFlow.cs:87:121:87:121 | y : String | GlobalDataFlow.cs:87:127:87:127 | access to parameter y : String | GlobalDataFlow.cs:87:22:87:128 | call to method Zip<String,String,String> : IEnumerable<T> [element] : String | | GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | GlobalDataFlow.cs:138:45:138:64 | call to method ApplyFunc<String,String> : String | | GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | GlobalDataFlow.cs:138:40:138:40 | x : String | GlobalDataFlow.cs:138:45:138:64 | call to method ApplyFunc<String,String> : String | GlobalDataFlow.cs:139:21:139:34 | delegate call : String | | GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | GlobalDataFlow.cs:147:21:147:44 | call to method ApplyFunc<String,String> : String | +| GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | GlobalDataFlow.cs:324:16:324:25 | access to parameter sinkParam9 : String | GlobalDataFlow.cs:215:76:215:90 | call to method ReturnCheck2<String> : String | +| GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable<T> [element] : String | GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | GlobalDataFlow.cs:214:79:214:89 | access to parameter sinkParam10 : String | GlobalDataFlow.cs:216:22:216:39 | call to method Select<String,String> : IEnumerable<T> [element] : String | +| GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable<T> [element] : String | GlobalDataFlow.cs:215:71:215:71 | x : String | GlobalDataFlow.cs:215:76:215:90 | call to method ReturnCheck2<String> : String | GlobalDataFlow.cs:218:22:218:39 | call to method Select<String,String> : IQueryable<T> [element] : String | +| GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable<T> [element] : String | GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | GlobalDataFlow.cs:330:16:330:26 | access to parameter sinkParam11 : String | GlobalDataFlow.cs:220:22:220:49 | call to method Select<String,String> : IEnumerable<T> [element] : String | | GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | GlobalDataFlow.cs:300:17:300:38 | call to method ApplyFunc<T,T> : String | | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:298:26:298:26 | x : String | GlobalDataFlow.cs:301:16:301:41 | ... ? ... : ... : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:298:26:298:26 | x : String | GlobalDataFlow.cs:301:16:301:41 | ... ? ... : ... : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | @@ -1081,7 +1048,7 @@ subpaths | Capture.cs:312:15:312:15 | access to local variable x | Capture.cs:311:17:311:30 | "taint source" : String | Capture.cs:312:15:312:15 | access to local variable x | access to local variable x | | Capture.cs:319:19:319:19 | access to local variable x | Capture.cs:318:17:318:30 | "taint source" : String | Capture.cs:319:19:319:19 | access to local variable x | access to local variable x | | Capture.cs:330:47:330:47 | access to local variable x | Capture.cs:328:17:328:30 | "taint source" : String | Capture.cs:330:47:330:47 | access to local variable x | access to local variable x | -| Capture.cs:339:45:339:45 | access to local variable x | Capture.cs:337:17:337:30 | "taint source" : String | Capture.cs:339:45:339:45 | access to local variable x | access to local variable x | +| Capture.cs:341:45:341:45 | access to local variable x | Capture.cs:339:17:339:30 | "taint source" : String | Capture.cs:341:45:341:45 | access to local variable x | access to local variable x | | Splitting.cs:11:19:11:19 | access to local variable x | Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:11:19:11:19 | access to local variable x | access to local variable x | | Splitting.cs:34:19:34:19 | access to local variable x | Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:34:19:34:19 | access to local variable x | access to local variable x | | Capture.cs:206:19:206:19 | access to parameter s | Capture.cs:211:21:211:34 | "taint source" : String | Capture.cs:206:19:206:19 | access to parameter s | access to parameter s | diff --git a/csharp/ql/test/library-tests/dataflow/global/TaintTracking.expected b/csharp/ql/test/library-tests/dataflow/global/TaintTracking.expected index 61ffecc4760..b83832f48a6 100644 --- a/csharp/ql/test/library-tests/dataflow/global/TaintTracking.expected +++ b/csharp/ql/test/library-tests/dataflow/global/TaintTracking.expected @@ -27,7 +27,7 @@ | Capture.cs:312:15:312:15 | access to local variable x | | Capture.cs:319:19:319:19 | access to local variable x | | Capture.cs:330:47:330:47 | access to local variable x | -| Capture.cs:339:45:339:45 | access to local variable x | +| Capture.cs:341:45:341:45 | access to local variable x | | GlobalDataFlow.cs:19:15:19:29 | access to field SinkField0 | | GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 | | GlobalDataFlow.cs:45:50:45:59 | access to parameter sinkParam2 | diff --git a/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected b/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected index 9ccbaf82517..de58feb3221 100644 --- a/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected +++ b/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected @@ -1,31 +1,21 @@ edges -| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:9:9:13:9 | CaptureIn1(...) : CaptureIn1 [captured tainted] : String | provenance | | | Capture.cs:7:20:7:26 | tainted : String | Capture.cs:14:9:14:18 | access to local function CaptureIn1 : CaptureIn1 [captured tainted] : String | provenance | | -| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:16:9:24:9 | CaptureIn2(...) : CaptureIn2 [captured tainted] : String | provenance | | | Capture.cs:7:20:7:26 | tainted : String | Capture.cs:25:9:25:18 | access to local function CaptureIn2 : CaptureIn2 [captured tainted] : String | provenance | | -| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:27:43:32:9 | (...) => ... : (...) => ... [captured tainted] : String | provenance | | | Capture.cs:7:20:7:26 | tainted : String | Capture.cs:33:30:33:39 | access to local variable captureIn3 : Func<String,String> [captured tainted] : String | provenance | | | Capture.cs:7:20:7:26 | tainted : String | Capture.cs:61:36:61:42 | access to parameter tainted : String | provenance | | -| Capture.cs:9:9:13:9 | CaptureIn1(...) : CaptureIn1 [captured tainted] : String | Capture.cs:14:9:14:18 | access to local function CaptureIn1 : CaptureIn1 [captured tainted] : String | provenance | | | Capture.cs:11:17:11:22 | access to local variable sink27 : String | Capture.cs:12:19:12:24 | access to local variable sink27 | provenance | | | Capture.cs:11:26:11:32 | access to parameter tainted : String | Capture.cs:11:17:11:22 | access to local variable sink27 : String | provenance | | | Capture.cs:14:9:14:18 | access to local function CaptureIn1 : CaptureIn1 [captured tainted] : String | Capture.cs:11:26:11:32 | access to parameter tainted : String | provenance | | -| Capture.cs:16:9:24:9 | CaptureIn2(...) : CaptureIn2 [captured tainted] : String | Capture.cs:25:9:25:18 | access to local function CaptureIn2 : CaptureIn2 [captured tainted] : String | provenance | | -| Capture.cs:18:13:22:13 | M(...) : M [captured tainted] : String | Capture.cs:23:13:23:13 | access to local function M : M [captured tainted] : String | provenance | | | Capture.cs:20:21:20:26 | access to local variable sink28 : String | Capture.cs:21:23:21:28 | access to local variable sink28 | provenance | | | Capture.cs:20:30:20:36 | access to parameter tainted : String | Capture.cs:20:21:20:26 | access to local variable sink28 : String | provenance | | | Capture.cs:23:13:23:13 | access to local function M : M [captured tainted] : String | Capture.cs:20:30:20:36 | access to parameter tainted : String | provenance | | -| Capture.cs:25:9:25:18 | access to local function CaptureIn2 : CaptureIn2 [captured tainted] : String | Capture.cs:18:13:22:13 | M(...) : M [captured tainted] : String | provenance | | | Capture.cs:25:9:25:18 | access to local function CaptureIn2 : CaptureIn2 [captured tainted] : String | Capture.cs:23:13:23:13 | access to local function M : M [captured tainted] : String | provenance | | -| Capture.cs:27:30:27:39 | access to local variable captureIn3 : (...) => ... [captured tainted] : String | Capture.cs:33:30:33:39 | access to local variable captureIn3 : (...) => ... [captured tainted] : String | provenance | | -| Capture.cs:27:43:32:9 | (...) => ... : (...) => ... [captured tainted] : String | Capture.cs:27:30:27:39 | access to local variable captureIn3 : (...) => ... [captured tainted] : String | provenance | | | Capture.cs:29:17:29:22 | access to local variable sink29 : String | Capture.cs:30:19:30:24 | access to local variable sink29 | provenance | | | Capture.cs:29:26:29:32 | access to parameter tainted : String | Capture.cs:29:17:29:22 | access to local variable sink29 : String | provenance | | -| Capture.cs:33:30:33:39 | access to local variable captureIn3 : (...) => ... [captured tainted] : String | Capture.cs:29:26:29:32 | access to parameter tainted : String | provenance | | | Capture.cs:33:30:33:39 | access to local variable captureIn3 : Func<String,String> [captured tainted] : String | Capture.cs:29:26:29:32 | access to parameter tainted : String | provenance | | | Capture.cs:50:50:50:55 | sink39 : String | Capture.cs:52:23:59:13 | (...) => ... : (...) => ... [captured sink39] : String | provenance | | -| Capture.cs:52:23:59:13 | (...) => ... : (...) => ... [captured sink39] : String | Capture.cs:348:34:348:34 | a : (...) => ... [captured sink39] : String | provenance | | -| Capture.cs:55:27:58:17 | (...) => ... : (...) => ... [captured sink39] : String | Capture.cs:348:34:348:34 | a : (...) => ... [captured sink39] : String | provenance | | +| Capture.cs:52:23:59:13 | (...) => ... : (...) => ... [captured sink39] : String | Capture.cs:350:34:350:34 | a : (...) => ... [captured sink39] : String | provenance | | +| Capture.cs:55:27:58:17 | (...) => ... : (...) => ... [captured sink39] : String | Capture.cs:350:34:350:34 | a : (...) => ... [captured sink39] : String | provenance | | | Capture.cs:61:36:61:42 | access to parameter tainted : String | Capture.cs:50:50:50:55 | sink39 : String | provenance | | | Capture.cs:69:22:69:35 | "taint source" : String | Capture.cs:71:9:71:19 | [post] access to local function CaptureOut1 : CaptureOut1 [captured sink30] : String | provenance | | | Capture.cs:71:9:71:19 | [post] access to local function CaptureOut1 : CaptureOut1 [captured sink30] : String | Capture.cs:72:15:72:20 | access to local variable sink30 | provenance | | @@ -35,57 +25,48 @@ edges | Capture.cs:89:22:89:35 | "taint source" : String | Capture.cs:92:30:92:40 | [post] access to local variable captureOut3 : (...) => ... [captured sink32] : String | provenance | | | Capture.cs:92:30:92:40 | [post] access to local variable captureOut3 : (...) => ... [captured sink32] : String | Capture.cs:93:15:93:20 | access to local variable sink32 | provenance | | | Capture.cs:114:23:117:13 | [post] (...) => ... : (...) => ... [captured sink40] : String | Capture.cs:123:9:123:33 | [post] access to local function CaptureOutMultipleLambdas : CaptureOutMultipleLambdas [captured sink40] : String | provenance | | -| Capture.cs:116:26:116:39 | "taint source" : String | Capture.cs:350:9:350:9 | [post] access to parameter a : (...) => ... [captured sink40] : String | provenance | | +| Capture.cs:116:26:116:39 | "taint source" : String | Capture.cs:352:9:352:9 | [post] access to parameter a : (...) => ... [captured sink40] : String | provenance | | | Capture.cs:123:9:123:33 | [post] access to local function CaptureOutMultipleLambdas : CaptureOutMultipleLambdas [captured sink40] : String | Capture.cs:124:15:124:20 | access to local variable sink40 | provenance | | -| Capture.cs:127:25:127:31 | tainted : String | Capture.cs:130:9:133:9 | CaptureThrough1(...) : CaptureThrough1 [captured tainted] : String | provenance | | | Capture.cs:127:25:127:31 | tainted : String | Capture.cs:134:9:134:23 | access to local function CaptureThrough1 : CaptureThrough1 [captured tainted] : String | provenance | | -| Capture.cs:127:25:127:31 | tainted : String | Capture.cs:138:9:145:9 | CaptureThrough2(...) : CaptureThrough2 [captured tainted] : String | provenance | | | Capture.cs:127:25:127:31 | tainted : String | Capture.cs:146:9:146:23 | access to local function CaptureThrough2 : CaptureThrough2 [captured tainted] : String | provenance | | -| Capture.cs:127:25:127:31 | tainted : String | Capture.cs:150:48:154:9 | (...) => ... : (...) => ... [captured tainted] : String | provenance | | | Capture.cs:127:25:127:31 | tainted : String | Capture.cs:155:30:155:44 | access to local variable captureThrough3 : Func<String,String> [captured tainted] : String | provenance | | -| Capture.cs:127:25:127:31 | tainted : String | Capture.cs:158:9:161:9 | CaptureThrough4(...) : CaptureThrough4 [captured tainted] : String | provenance | | | Capture.cs:127:25:127:31 | tainted : String | Capture.cs:162:22:162:36 | access to local function CaptureThrough4 : CaptureThrough4 [captured tainted] : String | provenance | | | Capture.cs:127:25:127:31 | tainted : String | Capture.cs:170:25:170:31 | access to parameter tainted : String | provenance | | | Capture.cs:127:25:127:31 | tainted : String | Capture.cs:196:25:196:31 | access to parameter tainted : String | provenance | | -| Capture.cs:130:9:133:9 | CaptureThrough1(...) : CaptureThrough1 [captured tainted] : String | Capture.cs:134:9:134:23 | access to local function CaptureThrough1 : CaptureThrough1 [captured tainted] : String | provenance | | | Capture.cs:134:9:134:23 | [post] access to local function CaptureThrough1 : CaptureThrough1 [captured sink33] : String | Capture.cs:135:15:135:20 | access to local variable sink33 | provenance | | +| Capture.cs:134:9:134:23 | access to local function CaptureThrough1 : CaptureThrough1 [captured tainted] : String | Capture.cs:132:22:132:28 | access to parameter tainted : String | provenance | | | Capture.cs:134:9:134:23 | access to local function CaptureThrough1 : CaptureThrough1 [captured tainted] : String | Capture.cs:134:9:134:23 | [post] access to local function CaptureThrough1 : CaptureThrough1 [captured sink33] : String | provenance | | -| Capture.cs:138:9:145:9 | CaptureThrough2(...) : CaptureThrough2 [captured tainted] : String | Capture.cs:146:9:146:23 | access to local function CaptureThrough2 : CaptureThrough2 [captured tainted] : String | provenance | | +| Capture.cs:144:13:144:13 | access to local function M : M [captured tainted] : String | Capture.cs:142:26:142:32 | access to parameter tainted : String | provenance | | +| Capture.cs:144:13:144:13 | access to local function M : M [captured tainted] : String | Capture.cs:144:13:144:13 | [post] access to local function M : M [captured sink34] : String | provenance | | | Capture.cs:146:9:146:23 | [post] access to local function CaptureThrough2 : CaptureThrough2 [captured sink34] : String | Capture.cs:147:15:147:20 | access to local variable sink34 | provenance | | +| Capture.cs:146:9:146:23 | access to local function CaptureThrough2 : CaptureThrough2 [captured tainted] : String | Capture.cs:144:13:144:13 | access to local function M : M [captured tainted] : String | provenance | | | Capture.cs:146:9:146:23 | access to local function CaptureThrough2 : CaptureThrough2 [captured tainted] : String | Capture.cs:146:9:146:23 | [post] access to local function CaptureThrough2 : CaptureThrough2 [captured sink34] : String | provenance | | -| Capture.cs:150:30:150:44 | access to local variable captureThrough3 : (...) => ... [captured tainted] : String | Capture.cs:155:30:155:44 | access to local variable captureThrough3 : (...) => ... [captured tainted] : String | provenance | | -| Capture.cs:150:48:154:9 | (...) => ... : (...) => ... [captured tainted] : String | Capture.cs:150:30:150:44 | access to local variable captureThrough3 : (...) => ... [captured tainted] : String | provenance | | | Capture.cs:155:30:155:44 | [post] access to local variable captureThrough3 : (...) => ... [captured sink35] : String | Capture.cs:156:15:156:20 | access to local variable sink35 | provenance | | -| Capture.cs:155:30:155:44 | access to local variable captureThrough3 : (...) => ... [captured tainted] : String | Capture.cs:155:30:155:44 | [post] access to local variable captureThrough3 : (...) => ... [captured sink35] : String | provenance | | +| Capture.cs:155:30:155:44 | access to local variable captureThrough3 : Func<String,String> [captured tainted] : String | Capture.cs:152:22:152:28 | access to parameter tainted : String | provenance | | | Capture.cs:155:30:155:44 | access to local variable captureThrough3 : Func<String,String> [captured tainted] : String | Capture.cs:155:30:155:44 | [post] access to local variable captureThrough3 : (...) => ... [captured sink35] : String | provenance | | -| Capture.cs:158:9:161:9 | CaptureThrough4(...) : CaptureThrough4 [captured tainted] : String | Capture.cs:162:22:162:36 | access to local function CaptureThrough4 : CaptureThrough4 [captured tainted] : String | provenance | | | Capture.cs:162:13:162:18 | access to local variable sink36 : String | Capture.cs:163:15:163:20 | access to local variable sink36 | provenance | | +| Capture.cs:162:22:162:36 | access to local function CaptureThrough4 : CaptureThrough4 [captured tainted] : String | Capture.cs:160:20:160:26 | access to parameter tainted : String | provenance | | | Capture.cs:162:22:162:36 | access to local function CaptureThrough4 : CaptureThrough4 [captured tainted] : String | Capture.cs:162:22:162:38 | call to local function CaptureThrough4 : String | provenance | | | Capture.cs:162:22:162:38 | call to local function CaptureThrough4 : String | Capture.cs:162:13:162:18 | access to local variable sink36 : String | provenance | | | Capture.cs:166:37:166:37 | p : String | Capture.cs:168:22:168:22 | access to parameter p : String | provenance | | | Capture.cs:170:9:170:23 | [post] access to local function CaptureThrough5 : CaptureThrough5 [captured sink37] : String | Capture.cs:171:15:171:20 | access to local variable sink37 | provenance | | | Capture.cs:170:25:170:31 | access to parameter tainted : String | Capture.cs:166:37:166:37 | p : String | provenance | | | Capture.cs:170:25:170:31 | access to parameter tainted : String | Capture.cs:170:9:170:23 | [post] access to local function CaptureThrough5 : CaptureThrough5 [captured sink37] : String | provenance | | -| Capture.cs:190:26:190:26 | s : String | Capture.cs:192:13:192:28 | M(...) : M [captured s] : String | provenance | | | Capture.cs:190:26:190:26 | s : String | Capture.cs:193:20:193:20 | access to local function M : M [captured s] : String | provenance | | -| Capture.cs:192:13:192:28 | M(...) : M [captured s] : String | Capture.cs:193:20:193:20 | access to local function M : M [captured s] : String | provenance | | +| Capture.cs:193:20:193:20 | access to local function M : M [captured s] : String | Capture.cs:192:27:192:27 | access to parameter s : String | provenance | | | Capture.cs:193:20:193:20 | access to local function M : M [captured s] : String | Capture.cs:193:20:193:22 | call to local function M : String | provenance | | | Capture.cs:196:13:196:18 | access to local variable sink38 : String | Capture.cs:197:15:197:20 | access to local variable sink38 | provenance | | | Capture.cs:196:22:196:32 | call to local function Id : String | Capture.cs:196:13:196:18 | access to local variable sink38 : String | provenance | | | Capture.cs:196:25:196:31 | access to parameter tainted : String | Capture.cs:190:26:190:26 | s : String | provenance | | | Capture.cs:196:25:196:31 | access to parameter tainted : String | Capture.cs:196:22:196:32 | call to local function Id : String | provenance | | -| Capture.cs:202:20:202:20 | s : String | Capture.cs:204:20:207:9 | (...) => ... : (...) => ... [captured s] : String | provenance | | | Capture.cs:202:20:202:20 | s : String | Capture.cs:208:9:208:9 | access to local variable a : Action [captured s] : String | provenance | | -| Capture.cs:204:16:204:16 | access to local variable a : (...) => ... [captured s] : String | Capture.cs:208:9:208:9 | access to local variable a : (...) => ... [captured s] : String | provenance | | -| Capture.cs:204:20:207:9 | (...) => ... : (...) => ... [captured s] : String | Capture.cs:204:16:204:16 | access to local variable a : (...) => ... [captured s] : String | provenance | | -| Capture.cs:208:9:208:9 | access to local variable a : (...) => ... [captured s] : String | Capture.cs:206:19:206:19 | access to parameter s | provenance | | | Capture.cs:208:9:208:9 | access to local variable a : Action [captured s] : String | Capture.cs:206:19:206:19 | access to parameter s | provenance | | | Capture.cs:211:21:211:34 | "taint source" : String | Capture.cs:202:20:202:20 | s : String | provenance | | | Capture.cs:213:22:213:22 | s : String | Capture.cs:215:16:218:9 | (...) => ... : (...) => ... [captured s] : String | provenance | | | Capture.cs:221:18:221:35 | call to method M3 : (...) => ... [captured s] : String | Capture.cs:217:19:217:19 | access to parameter s | provenance | | | Capture.cs:221:21:221:34 | "taint source" : String | Capture.cs:213:22:213:22 | s : String | provenance | | | Capture.cs:221:21:221:34 | "taint source" : String | Capture.cs:221:18:221:35 | call to method M3 : (...) => ... [captured s] : String | provenance | | -| Capture.cs:223:28:223:45 | call to method M3 : (...) => ... [captured s] : String | Capture.cs:348:34:348:34 | a : (...) => ... [captured s] : String | provenance | | +| Capture.cs:223:28:223:45 | call to method M3 : (...) => ... [captured s] : String | Capture.cs:350:34:350:34 | a : (...) => ... [captured s] : String | provenance | | | Capture.cs:223:31:223:44 | "taint source" : String | Capture.cs:213:22:213:22 | s : String | provenance | | | Capture.cs:223:31:223:44 | "taint source" : String | Capture.cs:223:28:223:45 | call to method M3 : (...) => ... [captured s] : String | provenance | | | Capture.cs:228:17:228:30 | "taint source" : String | Capture.cs:229:20:233:9 | (...) => ... : (...) => ... [captured x] : String | provenance | | @@ -93,17 +74,13 @@ edges | Capture.cs:229:20:233:9 | (...) => ... : (...) => ... [captured x] : String | Capture.cs:231:19:231:19 | access to local variable x | provenance | | | Capture.cs:229:20:233:9 | [post] (...) => ... : (...) => ... [captured x] : String | Capture.cs:234:15:234:15 | access to local variable x | provenance | | | Capture.cs:232:17:232:30 | "taint source" : String | Capture.cs:229:20:233:9 | [post] (...) => ... : (...) => ... [captured x] : String | provenance | | -| Capture.cs:242:9:242:9 | [post] access to local variable c : Capture [field Field] : String | Capture.cs:244:20:248:9 | (...) => ... : (...) => ... [captured c, field Field] : String | provenance | | | Capture.cs:242:9:242:9 | [post] access to local variable c : Capture [field Field] : String | Capture.cs:249:9:249:9 | access to local variable a : Action [captured c, field Field] : String | provenance | | | Capture.cs:242:9:242:9 | [post] access to local variable c : Capture [field Field] : String | Capture.cs:251:15:251:15 | access to local variable c : Capture [field Field] : String | provenance | | | Capture.cs:242:19:242:32 | "taint source" : String | Capture.cs:242:9:242:9 | [post] access to local variable c : Capture [field Field] : String | provenance | | -| Capture.cs:244:16:244:16 | access to local variable a : (...) => ... [captured c, field Field] : String | Capture.cs:249:9:249:9 | access to local variable a : (...) => ... [captured c, field Field] : String | provenance | | -| Capture.cs:244:20:248:9 | (...) => ... : (...) => ... [captured c, field Field] : String | Capture.cs:244:16:244:16 | access to local variable a : (...) => ... [captured c, field Field] : String | provenance | | | Capture.cs:246:19:246:19 | access to local variable c : Capture [field Field] : String | Capture.cs:246:19:246:25 | access to field Field | provenance | | | Capture.cs:247:13:247:13 | [post] access to local variable c : Capture [field Field] : String | Capture.cs:249:9:249:9 | [post] access to local variable a : (...) => ... [captured c, field Field] : String | provenance | | | Capture.cs:247:23:247:36 | "taint source" : String | Capture.cs:247:13:247:13 | [post] access to local variable c : Capture [field Field] : String | provenance | | | Capture.cs:249:9:249:9 | [post] access to local variable a : (...) => ... [captured c, field Field] : String | Capture.cs:251:15:251:15 | access to local variable c : Capture [field Field] : String | provenance | | -| Capture.cs:249:9:249:9 | access to local variable a : (...) => ... [captured c, field Field] : String | Capture.cs:246:19:246:19 | access to local variable c : Capture [field Field] : String | provenance | | | Capture.cs:249:9:249:9 | access to local variable a : Action [captured c, field Field] : String | Capture.cs:246:19:246:19 | access to local variable c : Capture [field Field] : String | provenance | | | Capture.cs:251:15:251:15 | access to local variable c : Capture [field Field] : String | Capture.cs:251:15:251:21 | access to field Field | provenance | | | Capture.cs:264:13:264:13 | [post] access to local variable c : Capture [field Field] : String | Capture.cs:266:9:266:9 | [post] access to local variable a : (...) => ... [captured c, field Field] : String | provenance | | @@ -111,58 +88,41 @@ edges | Capture.cs:266:9:266:9 | [post] access to local variable a : (...) => ... [captured c, field Field] : String | Capture.cs:268:15:268:15 | access to local variable c : Capture [field Field] : String | provenance | | | Capture.cs:268:15:268:15 | access to local variable c : Capture [field Field] : String | Capture.cs:268:15:268:21 | access to field Field | provenance | | | Capture.cs:273:19:273:19 | x : String | Capture.cs:273:30:273:30 | access to parameter x | provenance | | -| Capture.cs:273:34:273:47 | "taint source" : String | Capture.cs:353:45:353:45 | x : String | provenance | | -| Capture.cs:278:17:278:30 | "taint source" : String | Capture.cs:280:25:288:9 | (...) => ... : (...) => ... [captured x] : String | provenance | | +| Capture.cs:273:34:273:47 | "taint source" : String | Capture.cs:355:45:355:45 | x : String | provenance | | | Capture.cs:278:17:278:30 | "taint source" : String | Capture.cs:290:9:290:14 | access to local variable middle : Action [captured x] : String | provenance | | | Capture.cs:278:17:278:30 | "taint source" : String | Capture.cs:292:15:292:15 | access to local variable x | provenance | | -| Capture.cs:280:16:280:21 | access to local variable middle : (...) => ... [captured x] : String | Capture.cs:290:9:290:14 | access to local variable middle : (...) => ... [captured x] : String | provenance | | -| Capture.cs:280:25:288:9 | (...) => ... : (...) => ... [captured x] : String | Capture.cs:280:16:280:21 | access to local variable middle : (...) => ... [captured x] : String | provenance | | -| Capture.cs:282:20:282:24 | access to local variable inner : (...) => ... [captured x] : String | Capture.cs:287:13:287:17 | access to local variable inner : (...) => ... [captured x] : String | provenance | | -| Capture.cs:282:28:286:13 | (...) => ... : (...) => ... [captured x] : String | Capture.cs:282:20:282:24 | access to local variable inner : (...) => ... [captured x] : String | provenance | | | Capture.cs:285:21:285:34 | "taint source" : String | Capture.cs:287:13:287:17 | [post] access to local variable inner : (...) => ... [captured x] : String | provenance | | | Capture.cs:287:13:287:17 | [post] access to local variable inner : (...) => ... [captured x] : String | Capture.cs:290:9:290:14 | [post] access to local variable middle : (...) => ... [captured x] : String | provenance | | -| Capture.cs:287:13:287:17 | access to local variable inner : (...) => ... [captured x] : String | Capture.cs:284:23:284:23 | access to local variable x | provenance | | | Capture.cs:287:13:287:17 | access to local variable inner : Action [captured x] : String | Capture.cs:284:23:284:23 | access to local variable x | provenance | | | Capture.cs:290:9:290:14 | [post] access to local variable middle : (...) => ... [captured x] : String | Capture.cs:292:15:292:15 | access to local variable x | provenance | | -| Capture.cs:290:9:290:14 | access to local variable middle : (...) => ... [captured x] : String | Capture.cs:282:28:286:13 | (...) => ... : (...) => ... [captured x] : String | provenance | | -| Capture.cs:290:9:290:14 | access to local variable middle : (...) => ... [captured x] : String | Capture.cs:287:13:287:17 | access to local variable inner : Action [captured x] : String | provenance | | -| Capture.cs:290:9:290:14 | access to local variable middle : Action [captured x] : String | Capture.cs:282:28:286:13 | (...) => ... : (...) => ... [captured x] : String | provenance | | | Capture.cs:290:9:290:14 | access to local variable middle : Action [captured x] : String | Capture.cs:287:13:287:17 | access to local variable inner : Action [captured x] : String | provenance | | -| Capture.cs:297:9:297:12 | [post] this access : Capture [field Field] : String | Capture.cs:299:20:303:9 | (...) => ... : (...) => ... [captured this in M10, field Field] : String | provenance | | | Capture.cs:297:9:297:12 | [post] this access : Capture [field Field] : String | Capture.cs:304:9:304:9 | access to local variable a : Action [captured this in M10, field Field] : String | provenance | | | Capture.cs:297:9:297:12 | [post] this access : Capture [field Field] : String | Capture.cs:306:15:306:18 | this access : Capture [field Field] : String | provenance | | | Capture.cs:297:22:297:35 | "taint source" : String | Capture.cs:297:9:297:12 | [post] this access : Capture [field Field] : String | provenance | | -| Capture.cs:299:16:299:16 | access to local variable a : (...) => ... [captured this in M10, field Field] : String | Capture.cs:304:9:304:9 | access to local variable a : (...) => ... [captured this in M10, field Field] : String | provenance | | -| Capture.cs:299:20:303:9 | (...) => ... : (...) => ... [captured this in M10, field Field] : String | Capture.cs:299:16:299:16 | access to local variable a : (...) => ... [captured this in M10, field Field] : String | provenance | | | Capture.cs:301:19:301:22 | this access : Capture [field Field] : String | Capture.cs:301:19:301:28 | access to field Field | provenance | | | Capture.cs:302:13:302:16 | [post] this access : Capture [field Field] : String | Capture.cs:304:9:304:9 | [post] access to local variable a : (...) => ... [captured this in M10, field Field] : String | provenance | | | Capture.cs:302:26:302:39 | "taint source" : String | Capture.cs:302:13:302:16 | [post] this access : Capture [field Field] : String | provenance | | | Capture.cs:304:9:304:9 | [post] access to local variable a : (...) => ... [captured this in M10, field Field] : String | Capture.cs:306:15:306:18 | this access : Capture [field Field] : String | provenance | | -| Capture.cs:304:9:304:9 | access to local variable a : (...) => ... [captured this in M10, field Field] : String | Capture.cs:301:19:301:22 | this access : Capture [field Field] : String | provenance | | | Capture.cs:304:9:304:9 | access to local variable a : Action [captured this in M10, field Field] : String | Capture.cs:301:19:301:22 | this access : Capture [field Field] : String | provenance | | | Capture.cs:306:15:306:18 | this access : Capture [field Field] : String | Capture.cs:306:15:306:24 | access to field Field | provenance | | | Capture.cs:311:17:311:30 | "taint source" : String | Capture.cs:312:15:312:15 | access to local variable x | provenance | | | Capture.cs:318:17:318:30 | "taint source" : String | Capture.cs:319:19:319:19 | access to local variable x | provenance | | -| Capture.cs:328:17:328:30 | "taint source" : String | Capture.cs:330:9:330:49 | CapturedLocalFunction(...) : CapturedLocalFunction [captured x] : String | provenance | | -| Capture.cs:330:9:330:49 | CapturedLocalFunction(...) : CapturedLocalFunction [captured x] : String | Capture.cs:332:42:332:62 | access to local function CapturedLocalFunction : CapturedLocalFunction [captured x] : String | provenance | | +| Capture.cs:328:17:328:30 | "taint source" : String | Capture.cs:334:9:334:30 | access to local function CapturingLocalFunction : CapturingLocalFunction [captured x] : String | provenance | | | Capture.cs:332:42:332:62 | access to local function CapturedLocalFunction : CapturedLocalFunction [captured x] : String | Capture.cs:330:47:330:47 | access to local variable x | provenance | | -| Capture.cs:337:17:337:30 | "taint source" : String | Capture.cs:339:33:339:46 | (...) => ... : (...) => ... [captured x] : String | provenance | | -| Capture.cs:339:33:339:46 | (...) => ... : (...) => ... [captured x] : String | Capture.cs:341:34:341:55 | (...) => ... : (...) => ... [captured capturedLambda, captured x] : String | provenance | | -| Capture.cs:339:33:339:46 | (...) => ... : (...) => ... [captured x] : String | Capture.cs:343:9:343:23 | access to local variable capturingLambda : Action [captured capturedLambda, captured x] : String | provenance | | -| Capture.cs:341:16:341:30 | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | Capture.cs:343:9:343:23 | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | provenance | | -| Capture.cs:341:34:341:55 | (...) => ... : (...) => ... [captured capturedLambda, captured x] : String | Capture.cs:341:16:341:30 | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | provenance | | -| Capture.cs:341:40:341:53 | access to local variable capturedLambda : (...) => ... [captured x] : String | Capture.cs:339:45:339:45 | access to local variable x | provenance | | -| Capture.cs:343:9:343:23 | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | Capture.cs:341:40:341:53 | access to local variable capturedLambda : (...) => ... [captured x] : String | provenance | | -| Capture.cs:343:9:343:23 | access to local variable capturingLambda : Action [captured capturedLambda, captured x] : String | Capture.cs:341:40:341:53 | access to local variable capturedLambda : (...) => ... [captured x] : String | provenance | | -| Capture.cs:348:34:348:34 | a : (...) => ... [captured s] : String | Capture.cs:350:9:350:9 | access to parameter a : (...) => ... [captured s] : String | provenance | | -| Capture.cs:348:34:348:34 | a : (...) => ... [captured sink39] : String | Capture.cs:350:9:350:9 | access to parameter a : (...) => ... [captured sink39] : String | provenance | | -| Capture.cs:348:34:348:34 | a : (...) => ... [captured sink39] : String | Capture.cs:350:9:350:9 | access to parameter a : (...) => ... [captured sink39] : String | provenance | | -| Capture.cs:350:9:350:9 | [post] access to parameter a : (...) => ... [captured sink40] : String | Capture.cs:114:23:117:13 | [post] (...) => ... : (...) => ... [captured sink40] : String | provenance | | -| Capture.cs:350:9:350:9 | access to parameter a : (...) => ... [captured s] : String | Capture.cs:217:19:217:19 | access to parameter s | provenance | | -| Capture.cs:350:9:350:9 | access to parameter a : (...) => ... [captured sink39] : String | Capture.cs:55:27:58:17 | (...) => ... : (...) => ... [captured sink39] : String | provenance | | -| Capture.cs:350:9:350:9 | access to parameter a : (...) => ... [captured sink39] : String | Capture.cs:57:27:57:32 | access to parameter sink39 | provenance | | -| Capture.cs:353:45:353:45 | x : String | Capture.cs:355:11:355:11 | access to parameter x : String | provenance | | -| Capture.cs:355:11:355:11 | access to parameter x : String | Capture.cs:273:19:273:19 | x : String | provenance | | +| Capture.cs:334:9:334:30 | access to local function CapturingLocalFunction : CapturingLocalFunction [captured x] : String | Capture.cs:332:42:332:62 | access to local function CapturedLocalFunction : CapturedLocalFunction [captured x] : String | provenance | | +| Capture.cs:339:17:339:30 | "taint source" : String | Capture.cs:341:33:341:46 | (...) => ... : (...) => ... [captured x] : String | provenance | | +| Capture.cs:341:33:341:46 | (...) => ... : (...) => ... [captured x] : String | Capture.cs:345:9:345:23 | access to local variable capturingLambda : Action [captured capturedLambda, captured x] : String | provenance | | +| Capture.cs:343:40:343:53 | access to local variable capturedLambda : (...) => ... [captured x] : String | Capture.cs:341:45:341:45 | access to local variable x | provenance | | +| Capture.cs:345:9:345:23 | access to local variable capturingLambda : Action [captured capturedLambda, captured x] : String | Capture.cs:343:40:343:53 | access to local variable capturedLambda : (...) => ... [captured x] : String | provenance | | +| Capture.cs:350:34:350:34 | a : (...) => ... [captured s] : String | Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured s] : String | provenance | | +| Capture.cs:350:34:350:34 | a : (...) => ... [captured sink39] : String | Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured sink39] : String | provenance | | +| Capture.cs:350:34:350:34 | a : (...) => ... [captured sink39] : String | Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured sink39] : String | provenance | | +| Capture.cs:352:9:352:9 | [post] access to parameter a : (...) => ... [captured sink40] : String | Capture.cs:114:23:117:13 | [post] (...) => ... : (...) => ... [captured sink40] : String | provenance | | +| Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured s] : String | Capture.cs:217:19:217:19 | access to parameter s | provenance | | +| Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured sink39] : String | Capture.cs:55:27:58:17 | (...) => ... : (...) => ... [captured sink39] : String | provenance | | +| Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured sink39] : String | Capture.cs:57:27:57:32 | access to parameter sink39 | provenance | | +| Capture.cs:355:45:355:45 | x : String | Capture.cs:357:11:357:11 | access to parameter x : String | provenance | | +| Capture.cs:357:11:357:11 | access to parameter x : String | Capture.cs:273:19:273:19 | x : String | provenance | | | GlobalDataFlow.cs:18:9:18:23 | access to field SinkField0 : String | GlobalDataFlow.cs:19:15:19:29 | access to field SinkField0 | provenance | | | GlobalDataFlow.cs:18:9:18:23 | access to field SinkField0 : String | GlobalDataFlow.cs:26:9:26:26 | access to property SinkProperty0 : String | provenance | | | GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:18:9:18:23 | access to field SinkField0 : String | provenance | | @@ -291,14 +251,18 @@ edges | GlobalDataFlow.cs:85:22:85:128 | call to method Zip<String,String,String> : IEnumerable<T> [element] : String | GlobalDataFlow.cs:85:22:85:136 | call to method First<String> : String | provenance | | | GlobalDataFlow.cs:85:22:85:136 | call to method First<String> : String | GlobalDataFlow.cs:85:13:85:18 | access to local variable sink15 : String | provenance | | | GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:85:22:85:128 | call to method Zip<String,String,String> : IEnumerable<T> [element] : String | provenance | | +| GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:85:118:85:118 | x : String | provenance | | | GlobalDataFlow.cs:85:57:85:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | provenance | | | GlobalDataFlow.cs:85:59:85:64 | access to local variable sink14 : String | GlobalDataFlow.cs:85:57:85:66 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:85:118:85:118 | x : String | GlobalDataFlow.cs:85:127:85:127 | access to parameter x : String | provenance | | | GlobalDataFlow.cs:87:13:87:18 | access to local variable sink16 : String | GlobalDataFlow.cs:88:15:88:20 | access to local variable sink16 | provenance | | | GlobalDataFlow.cs:87:22:87:128 | call to method Zip<String,String,String> : IEnumerable<T> [element] : String | GlobalDataFlow.cs:87:22:87:136 | call to method First<String> : String | provenance | | | GlobalDataFlow.cs:87:22:87:136 | call to method First<String> : String | GlobalDataFlow.cs:87:13:87:18 | access to local variable sink16 : String | provenance | | | GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | GlobalDataFlow.cs:87:22:87:128 | call to method Zip<String,String,String> : IEnumerable<T> [element] : String | provenance | | +| GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | GlobalDataFlow.cs:87:121:87:121 | y : String | provenance | | | GlobalDataFlow.cs:87:104:87:113 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | provenance | | | GlobalDataFlow.cs:87:106:87:111 | access to local variable sink15 : String | GlobalDataFlow.cs:87:104:87:113 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:87:121:87:121 | y : String | GlobalDataFlow.cs:87:127:87:127 | access to parameter y : String | provenance | | | GlobalDataFlow.cs:89:13:89:18 | access to local variable sink17 : String | GlobalDataFlow.cs:90:15:90:20 | access to local variable sink17 | provenance | | | GlobalDataFlow.cs:89:22:89:110 | call to method Aggregate<String,String,String> : String | GlobalDataFlow.cs:89:13:89:18 | access to local variable sink17 : String | provenance | | | GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:89:22:89:110 | call to method Aggregate<String,String,String> : String | provenance | | @@ -353,7 +317,9 @@ edges | GlobalDataFlow.cs:211:44:211:61 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:211:38:211:61 | array creation of type String[] : null [element] : String | provenance | | | GlobalDataFlow.cs:211:46:211:59 | "taint source" : String | GlobalDataFlow.cs:211:44:211:61 | { ..., ... } : null [element] : String | provenance | | | GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | GlobalDataFlow.cs:214:58:214:68 | access to parameter sinkParam10 | provenance | | +| GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | GlobalDataFlow.cs:214:79:214:89 | access to parameter sinkParam10 : String | provenance | | | GlobalDataFlow.cs:215:71:215:71 | x : String | GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | GlobalDataFlow.cs:215:76:215:90 | call to method ReturnCheck2<String> : String | provenance | | | GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | provenance | | | GlobalDataFlow.cs:216:13:216:18 | access to local variable sink24 : String | GlobalDataFlow.cs:217:15:217:20 | access to local variable sink24 | provenance | | | GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable<T> [element] : String | GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | provenance | | @@ -398,8 +364,11 @@ edges | GlobalDataFlow.cs:304:32:304:32 | x : String | GlobalDataFlow.cs:306:9:306:9 | access to parameter y : String | provenance | | | GlobalDataFlow.cs:310:32:310:32 | x : String | GlobalDataFlow.cs:312:9:312:9 | access to parameter y : String | provenance | | | GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | GlobalDataFlow.cs:317:15:317:24 | access to parameter sinkParam8 | provenance | | +| GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | GlobalDataFlow.cs:318:16:318:25 | access to parameter sinkParam8 : String | provenance | | | GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | GlobalDataFlow.cs:323:15:323:24 | access to parameter sinkParam9 | provenance | | +| GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | GlobalDataFlow.cs:324:16:324:25 | access to parameter sinkParam9 : String | provenance | | | GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | GlobalDataFlow.cs:329:15:329:25 | access to parameter sinkParam11 | provenance | | +| GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | GlobalDataFlow.cs:330:16:330:26 | access to parameter sinkParam11 : String | provenance | | | GlobalDataFlow.cs:341:16:341:29 | "taint source" : String | GlobalDataFlow.cs:157:21:157:25 | call to method Out : String | provenance | | | GlobalDataFlow.cs:341:16:341:29 | "taint source" : String | GlobalDataFlow.cs:193:22:193:42 | object creation of type Lazy<String> : Lazy<T> [property Value] : String | provenance | | | GlobalDataFlow.cs:346:9:346:9 | access to parameter x : String | GlobalDataFlow.cs:160:20:160:24 | access to local variable sink7 : String | provenance | | @@ -564,24 +533,18 @@ edges | Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:48:13:48:13 | access to local variable s : String | provenance | | nodes | Capture.cs:7:20:7:26 | tainted : String | semmle.label | tainted : String | -| Capture.cs:9:9:13:9 | CaptureIn1(...) : CaptureIn1 [captured tainted] : String | semmle.label | CaptureIn1(...) : CaptureIn1 [captured tainted] : String | | Capture.cs:11:17:11:22 | access to local variable sink27 : String | semmle.label | access to local variable sink27 : String | | Capture.cs:11:26:11:32 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | | Capture.cs:12:19:12:24 | access to local variable sink27 | semmle.label | access to local variable sink27 | | Capture.cs:14:9:14:18 | access to local function CaptureIn1 : CaptureIn1 [captured tainted] : String | semmle.label | access to local function CaptureIn1 : CaptureIn1 [captured tainted] : String | -| Capture.cs:16:9:24:9 | CaptureIn2(...) : CaptureIn2 [captured tainted] : String | semmle.label | CaptureIn2(...) : CaptureIn2 [captured tainted] : String | -| Capture.cs:18:13:22:13 | M(...) : M [captured tainted] : String | semmle.label | M(...) : M [captured tainted] : String | | Capture.cs:20:21:20:26 | access to local variable sink28 : String | semmle.label | access to local variable sink28 : String | | Capture.cs:20:30:20:36 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | | Capture.cs:21:23:21:28 | access to local variable sink28 | semmle.label | access to local variable sink28 | | Capture.cs:23:13:23:13 | access to local function M : M [captured tainted] : String | semmle.label | access to local function M : M [captured tainted] : String | | Capture.cs:25:9:25:18 | access to local function CaptureIn2 : CaptureIn2 [captured tainted] : String | semmle.label | access to local function CaptureIn2 : CaptureIn2 [captured tainted] : String | -| Capture.cs:27:30:27:39 | access to local variable captureIn3 : (...) => ... [captured tainted] : String | semmle.label | access to local variable captureIn3 : (...) => ... [captured tainted] : String | -| Capture.cs:27:43:32:9 | (...) => ... : (...) => ... [captured tainted] : String | semmle.label | (...) => ... : (...) => ... [captured tainted] : String | | Capture.cs:29:17:29:22 | access to local variable sink29 : String | semmle.label | access to local variable sink29 : String | | Capture.cs:29:26:29:32 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | | Capture.cs:30:19:30:24 | access to local variable sink29 | semmle.label | access to local variable sink29 | -| Capture.cs:33:30:33:39 | access to local variable captureIn3 : (...) => ... [captured tainted] : String | semmle.label | access to local variable captureIn3 : (...) => ... [captured tainted] : String | | Capture.cs:33:30:33:39 | access to local variable captureIn3 : Func<String,String> [captured tainted] : String | semmle.label | access to local variable captureIn3 : Func<String,String> [captured tainted] : String | | Capture.cs:50:50:50:55 | sink39 : String | semmle.label | sink39 : String | | Capture.cs:52:23:59:13 | (...) => ... : (...) => ... [captured sink39] : String | semmle.label | (...) => ... : (...) => ... [captured sink39] : String | @@ -603,21 +566,21 @@ nodes | Capture.cs:123:9:123:33 | [post] access to local function CaptureOutMultipleLambdas : CaptureOutMultipleLambdas [captured sink40] : String | semmle.label | [post] access to local function CaptureOutMultipleLambdas : CaptureOutMultipleLambdas [captured sink40] : String | | Capture.cs:124:15:124:20 | access to local variable sink40 | semmle.label | access to local variable sink40 | | Capture.cs:127:25:127:31 | tainted : String | semmle.label | tainted : String | -| Capture.cs:130:9:133:9 | CaptureThrough1(...) : CaptureThrough1 [captured tainted] : String | semmle.label | CaptureThrough1(...) : CaptureThrough1 [captured tainted] : String | +| Capture.cs:132:22:132:28 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | | Capture.cs:134:9:134:23 | [post] access to local function CaptureThrough1 : CaptureThrough1 [captured sink33] : String | semmle.label | [post] access to local function CaptureThrough1 : CaptureThrough1 [captured sink33] : String | | Capture.cs:134:9:134:23 | access to local function CaptureThrough1 : CaptureThrough1 [captured tainted] : String | semmle.label | access to local function CaptureThrough1 : CaptureThrough1 [captured tainted] : String | | Capture.cs:135:15:135:20 | access to local variable sink33 | semmle.label | access to local variable sink33 | -| Capture.cs:138:9:145:9 | CaptureThrough2(...) : CaptureThrough2 [captured tainted] : String | semmle.label | CaptureThrough2(...) : CaptureThrough2 [captured tainted] : String | +| Capture.cs:142:26:142:32 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | +| Capture.cs:144:13:144:13 | [post] access to local function M : M [captured sink34] : String | semmle.label | [post] access to local function M : M [captured sink34] : String | +| Capture.cs:144:13:144:13 | access to local function M : M [captured tainted] : String | semmle.label | access to local function M : M [captured tainted] : String | | Capture.cs:146:9:146:23 | [post] access to local function CaptureThrough2 : CaptureThrough2 [captured sink34] : String | semmle.label | [post] access to local function CaptureThrough2 : CaptureThrough2 [captured sink34] : String | | Capture.cs:146:9:146:23 | access to local function CaptureThrough2 : CaptureThrough2 [captured tainted] : String | semmle.label | access to local function CaptureThrough2 : CaptureThrough2 [captured tainted] : String | | Capture.cs:147:15:147:20 | access to local variable sink34 | semmle.label | access to local variable sink34 | -| Capture.cs:150:30:150:44 | access to local variable captureThrough3 : (...) => ... [captured tainted] : String | semmle.label | access to local variable captureThrough3 : (...) => ... [captured tainted] : String | -| Capture.cs:150:48:154:9 | (...) => ... : (...) => ... [captured tainted] : String | semmle.label | (...) => ... : (...) => ... [captured tainted] : String | +| Capture.cs:152:22:152:28 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | | Capture.cs:155:30:155:44 | [post] access to local variable captureThrough3 : (...) => ... [captured sink35] : String | semmle.label | [post] access to local variable captureThrough3 : (...) => ... [captured sink35] : String | -| Capture.cs:155:30:155:44 | access to local variable captureThrough3 : (...) => ... [captured tainted] : String | semmle.label | access to local variable captureThrough3 : (...) => ... [captured tainted] : String | | Capture.cs:155:30:155:44 | access to local variable captureThrough3 : Func<String,String> [captured tainted] : String | semmle.label | access to local variable captureThrough3 : Func<String,String> [captured tainted] : String | | Capture.cs:156:15:156:20 | access to local variable sink35 | semmle.label | access to local variable sink35 | -| Capture.cs:158:9:161:9 | CaptureThrough4(...) : CaptureThrough4 [captured tainted] : String | semmle.label | CaptureThrough4(...) : CaptureThrough4 [captured tainted] : String | +| Capture.cs:160:20:160:26 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | | Capture.cs:162:13:162:18 | access to local variable sink36 : String | semmle.label | access to local variable sink36 : String | | Capture.cs:162:22:162:36 | access to local function CaptureThrough4 : CaptureThrough4 [captured tainted] : String | semmle.label | access to local function CaptureThrough4 : CaptureThrough4 [captured tainted] : String | | Capture.cs:162:22:162:38 | call to local function CaptureThrough4 : String | semmle.label | call to local function CaptureThrough4 : String | @@ -628,7 +591,7 @@ nodes | Capture.cs:170:25:170:31 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | | Capture.cs:171:15:171:20 | access to local variable sink37 | semmle.label | access to local variable sink37 | | Capture.cs:190:26:190:26 | s : String | semmle.label | s : String | -| Capture.cs:192:13:192:28 | M(...) : M [captured s] : String | semmle.label | M(...) : M [captured s] : String | +| Capture.cs:192:27:192:27 | access to parameter s : String | semmle.label | access to parameter s : String | | Capture.cs:193:20:193:20 | access to local function M : M [captured s] : String | semmle.label | access to local function M : M [captured s] : String | | Capture.cs:193:20:193:22 | call to local function M : String | semmle.label | call to local function M : String | | Capture.cs:196:13:196:18 | access to local variable sink38 : String | semmle.label | access to local variable sink38 : String | @@ -636,10 +599,7 @@ nodes | Capture.cs:196:25:196:31 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | | Capture.cs:197:15:197:20 | access to local variable sink38 | semmle.label | access to local variable sink38 | | Capture.cs:202:20:202:20 | s : String | semmle.label | s : String | -| Capture.cs:204:16:204:16 | access to local variable a : (...) => ... [captured s] : String | semmle.label | access to local variable a : (...) => ... [captured s] : String | -| Capture.cs:204:20:207:9 | (...) => ... : (...) => ... [captured s] : String | semmle.label | (...) => ... : (...) => ... [captured s] : String | | Capture.cs:206:19:206:19 | access to parameter s | semmle.label | access to parameter s | -| Capture.cs:208:9:208:9 | access to local variable a : (...) => ... [captured s] : String | semmle.label | access to local variable a : (...) => ... [captured s] : String | | Capture.cs:208:9:208:9 | access to local variable a : Action [captured s] : String | semmle.label | access to local variable a : Action [captured s] : String | | Capture.cs:211:21:211:34 | "taint source" : String | semmle.label | "taint source" : String | | Capture.cs:213:22:213:22 | s : String | semmle.label | s : String | @@ -657,14 +617,11 @@ nodes | Capture.cs:234:15:234:15 | access to local variable x | semmle.label | access to local variable x | | Capture.cs:242:9:242:9 | [post] access to local variable c : Capture [field Field] : String | semmle.label | [post] access to local variable c : Capture [field Field] : String | | Capture.cs:242:19:242:32 | "taint source" : String | semmle.label | "taint source" : String | -| Capture.cs:244:16:244:16 | access to local variable a : (...) => ... [captured c, field Field] : String | semmle.label | access to local variable a : (...) => ... [captured c, field Field] : String | -| Capture.cs:244:20:248:9 | (...) => ... : (...) => ... [captured c, field Field] : String | semmle.label | (...) => ... : (...) => ... [captured c, field Field] : String | | Capture.cs:246:19:246:19 | access to local variable c : Capture [field Field] : String | semmle.label | access to local variable c : Capture [field Field] : String | | Capture.cs:246:19:246:25 | access to field Field | semmle.label | access to field Field | | Capture.cs:247:13:247:13 | [post] access to local variable c : Capture [field Field] : String | semmle.label | [post] access to local variable c : Capture [field Field] : String | | Capture.cs:247:23:247:36 | "taint source" : String | semmle.label | "taint source" : String | | Capture.cs:249:9:249:9 | [post] access to local variable a : (...) => ... [captured c, field Field] : String | semmle.label | [post] access to local variable a : (...) => ... [captured c, field Field] : String | -| Capture.cs:249:9:249:9 | access to local variable a : (...) => ... [captured c, field Field] : String | semmle.label | access to local variable a : (...) => ... [captured c, field Field] : String | | Capture.cs:249:9:249:9 | access to local variable a : Action [captured c, field Field] : String | semmle.label | access to local variable a : Action [captured c, field Field] : String | | Capture.cs:251:15:251:15 | access to local variable c : Capture [field Field] : String | semmle.label | access to local variable c : Capture [field Field] : String | | Capture.cs:251:15:251:21 | access to field Field | semmle.label | access to field Field | @@ -677,29 +634,20 @@ nodes | Capture.cs:273:30:273:30 | access to parameter x | semmle.label | access to parameter x | | Capture.cs:273:34:273:47 | "taint source" : String | semmle.label | "taint source" : String | | Capture.cs:278:17:278:30 | "taint source" : String | semmle.label | "taint source" : String | -| Capture.cs:280:16:280:21 | access to local variable middle : (...) => ... [captured x] : String | semmle.label | access to local variable middle : (...) => ... [captured x] : String | -| Capture.cs:280:25:288:9 | (...) => ... : (...) => ... [captured x] : String | semmle.label | (...) => ... : (...) => ... [captured x] : String | -| Capture.cs:282:20:282:24 | access to local variable inner : (...) => ... [captured x] : String | semmle.label | access to local variable inner : (...) => ... [captured x] : String | -| Capture.cs:282:28:286:13 | (...) => ... : (...) => ... [captured x] : String | semmle.label | (...) => ... : (...) => ... [captured x] : String | | Capture.cs:284:23:284:23 | access to local variable x | semmle.label | access to local variable x | | Capture.cs:285:21:285:34 | "taint source" : String | semmle.label | "taint source" : String | | Capture.cs:287:13:287:17 | [post] access to local variable inner : (...) => ... [captured x] : String | semmle.label | [post] access to local variable inner : (...) => ... [captured x] : String | -| Capture.cs:287:13:287:17 | access to local variable inner : (...) => ... [captured x] : String | semmle.label | access to local variable inner : (...) => ... [captured x] : String | | Capture.cs:287:13:287:17 | access to local variable inner : Action [captured x] : String | semmle.label | access to local variable inner : Action [captured x] : String | | Capture.cs:290:9:290:14 | [post] access to local variable middle : (...) => ... [captured x] : String | semmle.label | [post] access to local variable middle : (...) => ... [captured x] : String | -| Capture.cs:290:9:290:14 | access to local variable middle : (...) => ... [captured x] : String | semmle.label | access to local variable middle : (...) => ... [captured x] : String | | Capture.cs:290:9:290:14 | access to local variable middle : Action [captured x] : String | semmle.label | access to local variable middle : Action [captured x] : String | | Capture.cs:292:15:292:15 | access to local variable x | semmle.label | access to local variable x | | Capture.cs:297:9:297:12 | [post] this access : Capture [field Field] : String | semmle.label | [post] this access : Capture [field Field] : String | | Capture.cs:297:22:297:35 | "taint source" : String | semmle.label | "taint source" : String | -| Capture.cs:299:16:299:16 | access to local variable a : (...) => ... [captured this in M10, field Field] : String | semmle.label | access to local variable a : (...) => ... [captured this in M10, field Field] : String | -| Capture.cs:299:20:303:9 | (...) => ... : (...) => ... [captured this in M10, field Field] : String | semmle.label | (...) => ... : (...) => ... [captured this in M10, field Field] : String | | Capture.cs:301:19:301:22 | this access : Capture [field Field] : String | semmle.label | this access : Capture [field Field] : String | | Capture.cs:301:19:301:28 | access to field Field | semmle.label | access to field Field | | Capture.cs:302:13:302:16 | [post] this access : Capture [field Field] : String | semmle.label | [post] this access : Capture [field Field] : String | | Capture.cs:302:26:302:39 | "taint source" : String | semmle.label | "taint source" : String | | Capture.cs:304:9:304:9 | [post] access to local variable a : (...) => ... [captured this in M10, field Field] : String | semmle.label | [post] access to local variable a : (...) => ... [captured this in M10, field Field] : String | -| Capture.cs:304:9:304:9 | access to local variable a : (...) => ... [captured this in M10, field Field] : String | semmle.label | access to local variable a : (...) => ... [captured this in M10, field Field] : String | | Capture.cs:304:9:304:9 | access to local variable a : Action [captured this in M10, field Field] : String | semmle.label | access to local variable a : Action [captured this in M10, field Field] : String | | Capture.cs:306:15:306:18 | this access : Capture [field Field] : String | semmle.label | this access : Capture [field Field] : String | | Capture.cs:306:15:306:24 | access to field Field | semmle.label | access to field Field | @@ -708,26 +656,23 @@ nodes | Capture.cs:318:17:318:30 | "taint source" : String | semmle.label | "taint source" : String | | Capture.cs:319:19:319:19 | access to local variable x | semmle.label | access to local variable x | | Capture.cs:328:17:328:30 | "taint source" : String | semmle.label | "taint source" : String | -| Capture.cs:330:9:330:49 | CapturedLocalFunction(...) : CapturedLocalFunction [captured x] : String | semmle.label | CapturedLocalFunction(...) : CapturedLocalFunction [captured x] : String | | Capture.cs:330:47:330:47 | access to local variable x | semmle.label | access to local variable x | | Capture.cs:332:42:332:62 | access to local function CapturedLocalFunction : CapturedLocalFunction [captured x] : String | semmle.label | access to local function CapturedLocalFunction : CapturedLocalFunction [captured x] : String | -| Capture.cs:337:17:337:30 | "taint source" : String | semmle.label | "taint source" : String | -| Capture.cs:339:33:339:46 | (...) => ... : (...) => ... [captured x] : String | semmle.label | (...) => ... : (...) => ... [captured x] : String | -| Capture.cs:339:45:339:45 | access to local variable x | semmle.label | access to local variable x | -| Capture.cs:341:16:341:30 | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | semmle.label | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | -| Capture.cs:341:34:341:55 | (...) => ... : (...) => ... [captured capturedLambda, captured x] : String | semmle.label | (...) => ... : (...) => ... [captured capturedLambda, captured x] : String | -| Capture.cs:341:40:341:53 | access to local variable capturedLambda : (...) => ... [captured x] : String | semmle.label | access to local variable capturedLambda : (...) => ... [captured x] : String | -| Capture.cs:343:9:343:23 | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | semmle.label | access to local variable capturingLambda : (...) => ... [captured capturedLambda, captured x] : String | -| Capture.cs:343:9:343:23 | access to local variable capturingLambda : Action [captured capturedLambda, captured x] : String | semmle.label | access to local variable capturingLambda : Action [captured capturedLambda, captured x] : String | -| Capture.cs:348:34:348:34 | a : (...) => ... [captured s] : String | semmle.label | a : (...) => ... [captured s] : String | -| Capture.cs:348:34:348:34 | a : (...) => ... [captured sink39] : String | semmle.label | a : (...) => ... [captured sink39] : String | -| Capture.cs:348:34:348:34 | a : (...) => ... [captured sink39] : String | semmle.label | a : (...) => ... [captured sink39] : String | -| Capture.cs:350:9:350:9 | [post] access to parameter a : (...) => ... [captured sink40] : String | semmle.label | [post] access to parameter a : (...) => ... [captured sink40] : String | -| Capture.cs:350:9:350:9 | access to parameter a : (...) => ... [captured s] : String | semmle.label | access to parameter a : (...) => ... [captured s] : String | -| Capture.cs:350:9:350:9 | access to parameter a : (...) => ... [captured sink39] : String | semmle.label | access to parameter a : (...) => ... [captured sink39] : String | -| Capture.cs:350:9:350:9 | access to parameter a : (...) => ... [captured sink39] : String | semmle.label | access to parameter a : (...) => ... [captured sink39] : String | -| Capture.cs:353:45:353:45 | x : String | semmle.label | x : String | -| Capture.cs:355:11:355:11 | access to parameter x : String | semmle.label | access to parameter x : String | +| Capture.cs:334:9:334:30 | access to local function CapturingLocalFunction : CapturingLocalFunction [captured x] : String | semmle.label | access to local function CapturingLocalFunction : CapturingLocalFunction [captured x] : String | +| Capture.cs:339:17:339:30 | "taint source" : String | semmle.label | "taint source" : String | +| Capture.cs:341:33:341:46 | (...) => ... : (...) => ... [captured x] : String | semmle.label | (...) => ... : (...) => ... [captured x] : String | +| Capture.cs:341:45:341:45 | access to local variable x | semmle.label | access to local variable x | +| Capture.cs:343:40:343:53 | access to local variable capturedLambda : (...) => ... [captured x] : String | semmle.label | access to local variable capturedLambda : (...) => ... [captured x] : String | +| Capture.cs:345:9:345:23 | access to local variable capturingLambda : Action [captured capturedLambda, captured x] : String | semmle.label | access to local variable capturingLambda : Action [captured capturedLambda, captured x] : String | +| Capture.cs:350:34:350:34 | a : (...) => ... [captured s] : String | semmle.label | a : (...) => ... [captured s] : String | +| Capture.cs:350:34:350:34 | a : (...) => ... [captured sink39] : String | semmle.label | a : (...) => ... [captured sink39] : String | +| Capture.cs:350:34:350:34 | a : (...) => ... [captured sink39] : String | semmle.label | a : (...) => ... [captured sink39] : String | +| Capture.cs:352:9:352:9 | [post] access to parameter a : (...) => ... [captured sink40] : String | semmle.label | [post] access to parameter a : (...) => ... [captured sink40] : String | +| Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured s] : String | semmle.label | access to parameter a : (...) => ... [captured s] : String | +| Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured sink39] : String | semmle.label | access to parameter a : (...) => ... [captured sink39] : String | +| Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured sink39] : String | semmle.label | access to parameter a : (...) => ... [captured sink39] : String | +| Capture.cs:355:45:355:45 | x : String | semmle.label | x : String | +| Capture.cs:357:11:357:11 | access to parameter x : String | semmle.label | access to parameter x : String | | GlobalDataFlow.cs:18:9:18:23 | access to field SinkField0 : String | semmle.label | access to field SinkField0 : String | | GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | semmle.label | "taint source" : String | | GlobalDataFlow.cs:19:15:19:29 | access to field SinkField0 | semmle.label | access to field SinkField0 | @@ -786,6 +731,8 @@ nodes | GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | semmle.label | (...) ... : null [element] : String | | GlobalDataFlow.cs:85:57:85:66 | { ..., ... } : null [element] : String | semmle.label | { ..., ... } : null [element] : String | | GlobalDataFlow.cs:85:59:85:64 | access to local variable sink14 : String | semmle.label | access to local variable sink14 : String | +| GlobalDataFlow.cs:85:118:85:118 | x : String | semmle.label | x : String | +| GlobalDataFlow.cs:85:127:85:127 | access to parameter x : String | semmle.label | access to parameter x : String | | GlobalDataFlow.cs:86:15:86:20 | access to local variable sink15 | semmle.label | access to local variable sink15 | | GlobalDataFlow.cs:87:13:87:18 | access to local variable sink16 : String | semmle.label | access to local variable sink16 : String | | GlobalDataFlow.cs:87:22:87:128 | call to method Zip<String,String,String> : IEnumerable<T> [element] : String | semmle.label | call to method Zip<String,String,String> : IEnumerable<T> [element] : String | @@ -793,6 +740,8 @@ nodes | GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | semmle.label | (...) ... : null [element] : String | | GlobalDataFlow.cs:87:104:87:113 | { ..., ... } : null [element] : String | semmle.label | { ..., ... } : null [element] : String | | GlobalDataFlow.cs:87:106:87:111 | access to local variable sink15 : String | semmle.label | access to local variable sink15 : String | +| GlobalDataFlow.cs:87:121:87:121 | y : String | semmle.label | y : String | +| GlobalDataFlow.cs:87:127:87:127 | access to parameter y : String | semmle.label | access to parameter y : String | | GlobalDataFlow.cs:88:15:88:20 | access to local variable sink16 | semmle.label | access to local variable sink16 | | GlobalDataFlow.cs:89:13:89:18 | access to local variable sink17 : String | semmle.label | access to local variable sink17 : String | | GlobalDataFlow.cs:89:22:89:110 | call to method Aggregate<String,String,String> : String | semmle.label | call to method Aggregate<String,String,String> : String | @@ -856,7 +805,9 @@ nodes | GlobalDataFlow.cs:211:46:211:59 | "taint source" : String | semmle.label | "taint source" : String | | GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | semmle.label | sinkParam10 : String | | GlobalDataFlow.cs:214:58:214:68 | access to parameter sinkParam10 | semmle.label | access to parameter sinkParam10 | +| GlobalDataFlow.cs:214:79:214:89 | access to parameter sinkParam10 : String | semmle.label | access to parameter sinkParam10 : String | | GlobalDataFlow.cs:215:71:215:71 | x : String | semmle.label | x : String | +| GlobalDataFlow.cs:215:76:215:90 | call to method ReturnCheck2<String> : String | semmle.label | call to method ReturnCheck2<String> : String | | GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | semmle.label | access to parameter x : String | | GlobalDataFlow.cs:216:13:216:18 | access to local variable sink24 : String | semmle.label | access to local variable sink24 : String | | GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable<T> [element] : String | semmle.label | access to local variable tainted : IQueryable<T> [element] : String | @@ -912,10 +863,13 @@ nodes | GlobalDataFlow.cs:312:9:312:9 | access to parameter y : String | semmle.label | access to parameter y : String | | GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | semmle.label | sinkParam8 : String | | GlobalDataFlow.cs:317:15:317:24 | access to parameter sinkParam8 | semmle.label | access to parameter sinkParam8 | +| GlobalDataFlow.cs:318:16:318:25 | access to parameter sinkParam8 : String | semmle.label | access to parameter sinkParam8 : String | | GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | semmle.label | sinkParam9 : String | | GlobalDataFlow.cs:323:15:323:24 | access to parameter sinkParam9 | semmle.label | access to parameter sinkParam9 | +| GlobalDataFlow.cs:324:16:324:25 | access to parameter sinkParam9 : String | semmle.label | access to parameter sinkParam9 : String | | GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | semmle.label | sinkParam11 : String | | GlobalDataFlow.cs:329:15:329:25 | access to parameter sinkParam11 | semmle.label | access to parameter sinkParam11 | +| GlobalDataFlow.cs:330:16:330:26 | access to parameter sinkParam11 : String | semmle.label | access to parameter sinkParam11 : String | | GlobalDataFlow.cs:341:16:341:29 | "taint source" : String | semmle.label | "taint source" : String | | GlobalDataFlow.cs:346:9:346:9 | access to parameter x : String | semmle.label | access to parameter x : String | | GlobalDataFlow.cs:346:13:346:26 | "taint source" : String | semmle.label | "taint source" : String | @@ -1084,7 +1038,13 @@ nodes | Splitting.cs:50:19:50:19 | access to local variable s | semmle.label | access to local variable s | | Splitting.cs:52:19:52:19 | access to local variable s | semmle.label | access to local variable s | subpaths +| Capture.cs:134:9:134:23 | access to local function CaptureThrough1 : CaptureThrough1 [captured tainted] : String | Capture.cs:132:22:132:28 | access to parameter tainted : String | Capture.cs:132:22:132:28 | access to parameter tainted : String | Capture.cs:134:9:134:23 | [post] access to local function CaptureThrough1 : CaptureThrough1 [captured sink33] : String | +| Capture.cs:144:13:144:13 | access to local function M : M [captured tainted] : String | Capture.cs:142:26:142:32 | access to parameter tainted : String | Capture.cs:142:26:142:32 | access to parameter tainted : String | Capture.cs:144:13:144:13 | [post] access to local function M : M [captured sink34] : String | +| Capture.cs:146:9:146:23 | access to local function CaptureThrough2 : CaptureThrough2 [captured tainted] : String | Capture.cs:144:13:144:13 | access to local function M : M [captured tainted] : String | Capture.cs:144:13:144:13 | [post] access to local function M : M [captured sink34] : String | Capture.cs:146:9:146:23 | [post] access to local function CaptureThrough2 : CaptureThrough2 [captured sink34] : String | +| Capture.cs:155:30:155:44 | access to local variable captureThrough3 : Func<String,String> [captured tainted] : String | Capture.cs:152:22:152:28 | access to parameter tainted : String | Capture.cs:152:22:152:28 | access to parameter tainted : String | Capture.cs:155:30:155:44 | [post] access to local variable captureThrough3 : (...) => ... [captured sink35] : String | +| Capture.cs:162:22:162:36 | access to local function CaptureThrough4 : CaptureThrough4 [captured tainted] : String | Capture.cs:160:20:160:26 | access to parameter tainted : String | Capture.cs:160:20:160:26 | access to parameter tainted : String | Capture.cs:162:22:162:38 | call to local function CaptureThrough4 : String | | Capture.cs:170:25:170:31 | access to parameter tainted : String | Capture.cs:166:37:166:37 | p : String | Capture.cs:168:22:168:22 | access to parameter p : String | Capture.cs:170:9:170:23 | [post] access to local function CaptureThrough5 : CaptureThrough5 [captured sink37] : String | +| Capture.cs:193:20:193:20 | access to local function M : M [captured s] : String | Capture.cs:192:27:192:27 | access to parameter s : String | Capture.cs:192:27:192:27 | access to parameter s : String | Capture.cs:193:20:193:22 | call to local function M : String | | Capture.cs:196:25:196:31 | access to parameter tainted : String | Capture.cs:190:26:190:26 | s : String | Capture.cs:193:20:193:22 | call to local function M : String | Capture.cs:196:22:196:32 | call to local function Id : String | | Capture.cs:221:21:221:34 | "taint source" : String | Capture.cs:213:22:213:22 | s : String | Capture.cs:215:16:218:9 | (...) => ... : (...) => ... [captured s] : String | Capture.cs:221:18:221:35 | call to method M3 : (...) => ... [captured s] : String | | Capture.cs:223:31:223:44 | "taint source" : String | Capture.cs:213:22:213:22 | s : String | Capture.cs:215:16:218:9 | (...) => ... : (...) => ... [captured s] : String | Capture.cs:223:28:223:45 | call to method M3 : (...) => ... [captured s] : String | @@ -1093,9 +1053,16 @@ subpaths | GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | GlobalDataFlow.cs:304:32:304:32 | x : String | GlobalDataFlow.cs:306:9:306:9 | access to parameter y : String | GlobalDataFlow.cs:76:30:76:34 | access to local variable sink2 : String | | GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | GlobalDataFlow.cs:310:32:310:32 | x : String | GlobalDataFlow.cs:312:9:312:9 | access to parameter y : String | GlobalDataFlow.cs:79:30:79:34 | access to local variable sink3 : String | | GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | GlobalDataFlow.cs:553:71:553:71 | e : null [element] : String | GlobalDataFlow.cs:558:44:558:47 | delegate call : String | GlobalDataFlow.cs:81:22:81:85 | call to method SelectEven<String,String> : IEnumerable<T> [element] : String | +| GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | GlobalDataFlow.cs:318:16:318:25 | access to parameter sinkParam8 : String | GlobalDataFlow.cs:83:22:83:87 | call to method Select<String,String> : IEnumerable<T> [element] : String | +| GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:85:118:85:118 | x : String | GlobalDataFlow.cs:85:127:85:127 | access to parameter x : String | GlobalDataFlow.cs:85:22:85:128 | call to method Zip<String,String,String> : IEnumerable<T> [element] : String | +| GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | GlobalDataFlow.cs:87:121:87:121 | y : String | GlobalDataFlow.cs:87:127:87:127 | access to parameter y : String | GlobalDataFlow.cs:87:22:87:128 | call to method Zip<String,String,String> : IEnumerable<T> [element] : String | | GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | GlobalDataFlow.cs:138:45:138:64 | call to method ApplyFunc<String,String> : String | | GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | GlobalDataFlow.cs:138:40:138:40 | x : String | GlobalDataFlow.cs:138:45:138:64 | call to method ApplyFunc<String,String> : String | GlobalDataFlow.cs:139:21:139:34 | delegate call : String | | GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | GlobalDataFlow.cs:147:21:147:44 | call to method ApplyFunc<String,String> : String | +| GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | GlobalDataFlow.cs:324:16:324:25 | access to parameter sinkParam9 : String | GlobalDataFlow.cs:215:76:215:90 | call to method ReturnCheck2<String> : String | +| GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable<T> [element] : String | GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | GlobalDataFlow.cs:214:79:214:89 | access to parameter sinkParam10 : String | GlobalDataFlow.cs:216:22:216:39 | call to method Select<String,String> : IEnumerable<T> [element] : String | +| GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable<T> [element] : String | GlobalDataFlow.cs:215:71:215:71 | x : String | GlobalDataFlow.cs:215:76:215:90 | call to method ReturnCheck2<String> : String | GlobalDataFlow.cs:218:22:218:39 | call to method Select<String,String> : IQueryable<T> [element] : String | +| GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable<T> [element] : String | GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | GlobalDataFlow.cs:330:16:330:26 | access to parameter sinkParam11 : String | GlobalDataFlow.cs:220:22:220:49 | call to method Select<String,String> : IEnumerable<T> [element] : String | | GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | GlobalDataFlow.cs:300:17:300:38 | call to method ApplyFunc<T,T> : String | | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:298:26:298:26 | x : String | GlobalDataFlow.cs:301:16:301:41 | ... ? ... : ... : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:298:26:298:26 | x : String | GlobalDataFlow.cs:301:16:301:41 | ... ? ... : ... : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | @@ -1144,7 +1111,7 @@ subpaths | Capture.cs:312:15:312:15 | access to local variable x | Capture.cs:311:17:311:30 | "taint source" : String | Capture.cs:312:15:312:15 | access to local variable x | access to local variable x | | Capture.cs:319:19:319:19 | access to local variable x | Capture.cs:318:17:318:30 | "taint source" : String | Capture.cs:319:19:319:19 | access to local variable x | access to local variable x | | Capture.cs:330:47:330:47 | access to local variable x | Capture.cs:328:17:328:30 | "taint source" : String | Capture.cs:330:47:330:47 | access to local variable x | access to local variable x | -| Capture.cs:339:45:339:45 | access to local variable x | Capture.cs:337:17:337:30 | "taint source" : String | Capture.cs:339:45:339:45 | access to local variable x | access to local variable x | +| Capture.cs:341:45:341:45 | access to local variable x | Capture.cs:339:17:339:30 | "taint source" : String | Capture.cs:341:45:341:45 | access to local variable x | access to local variable x | | GlobalDataFlow.cs:19:15:19:29 | access to field SinkField0 | GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:19:15:19:29 | access to field SinkField0 | access to field SinkField0 | | GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 | GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 | access to property SinkProperty0 | | GlobalDataFlow.cs:45:50:45:59 | access to parameter sinkParam2 | GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:45:50:45:59 | access to parameter sinkParam2 | access to parameter sinkParam2 | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index 9c4e141a490..fc02c1916a8 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -882,10 +882,10 @@ summary | Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;false;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;false;WriteAsync;(System.ReadOnlyMemory<System.Byte>,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;false;Read;();;Argument[this];ReturnValue;taint;manual | -| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;false;Read;(System.Char[],System.Int32,System.Int32);;Argument[this];ReturnValue;taint;manual | -| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;false;Read;(System.Span<System.Char>);;Argument[this];ReturnValue;taint;manual | -| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;false;ReadAsync;(System.Char[],System.Int32,System.Int32);;Argument[this];ReturnValue;taint;manual | -| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;false;ReadAsync;(System.Memory<System.Char>,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;manual | +| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;false;Read;(System.Char[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;false;Read;(System.Span<System.Char>);;Argument[this];Argument[0].Element;taint;manual | +| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;false;ReadAsync;(System.Char[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;false;ReadAsync;(System.Memory<System.Char>,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;false;ReadLine;();;Argument[this];ReturnValue;taint;manual | | Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;false;ReadLineAsync;();;Argument[this];ReturnValue;taint;manual | | Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;false;ReadToEndAsync;();;Argument[this];ReturnValue;taint;manual | @@ -1026,9 +1026,15 @@ summary | Microsoft.Extensions.Configuration;ChainedConfigurationProvider;false;GetReloadToken;();;Argument[this];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ChainedConfigurationProvider;false;TryGet;(System.String,System.String);;Argument[this];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ChainedConfigurationProvider;false;get_Configuration;();;Argument[this];ReturnValue;taint;df-generated | -| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action<Microsoft.Extensions.Configuration.CommandLine.CommandLineConfigurationSource>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | -| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[]);;Argument[0];ReturnValue;taint;df-generated | -| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[],System.Collections.Generic.IDictionary<System.String,System.String>);;Argument[0];ReturnValue;taint;df-generated | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action<Microsoft.Extensions.Configuration.CommandLine.CommandLineConfigurationSource>);;Argument[1];Argument[0];taint;manual | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action<Microsoft.Extensions.Configuration.CommandLine.CommandLineConfigurationSource>);;Argument[1];Argument[1].Parameter[delegate-self];value;manual | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action<Microsoft.Extensions.Configuration.CommandLine.CommandLineConfigurationSource>);;Argument[1];ReturnValue;taint;manual | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[]);;Argument[1];Argument[0];taint;manual | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[]);;Argument[1];ReturnValue;taint;manual | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[],System.Collections.Generic.IDictionary<System.String,System.String>);;Argument[1];Argument[0];taint;manual | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[],System.Collections.Generic.IDictionary<System.String,System.String>);;Argument[1];ReturnValue;taint;manual | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[],System.Collections.Generic.IDictionary<System.String,System.String>);;Argument[2];Argument[0];taint;manual | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[],System.Collections.Generic.IDictionary<System.String,System.String>);;Argument[2];ReturnValue;taint;manual | | Microsoft.Extensions.Configuration;ConfigurationBinder;false;Bind;(Microsoft.Extensions.Configuration.IConfiguration,System.Object,System.Action<Microsoft.Extensions.Configuration.BinderOptions>);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Configuration;ConfigurationBinder;false;Get;(Microsoft.Extensions.Configuration.IConfiguration,System.Type,System.Action<Microsoft.Extensions.Configuration.BinderOptions>);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Configuration;ConfigurationBinder;false;Get<T>;(Microsoft.Extensions.Configuration.IConfiguration,System.Action<Microsoft.Extensions.Configuration.BinderOptions>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | @@ -1040,6 +1046,7 @@ summary | Microsoft.Extensions.Configuration;ConfigurationBinder;false;GetValue<T>;(Microsoft.Extensions.Configuration.IConfiguration,System.String,T);;Argument[2];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationBuilder;false;Add;(Microsoft.Extensions.Configuration.IConfigurationSource);;Argument[0];Argument[this];taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationBuilder;false;Add;(Microsoft.Extensions.Configuration.IConfigurationSource);;Argument[this];ReturnValue;value;df-generated | +| Microsoft.Extensions.Configuration;ConfigurationBuilder;false;Build;();;Argument[this];ReturnValue;taint;manual | | Microsoft.Extensions.Configuration;ConfigurationBuilder;false;get_Sources;();;Argument[this];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationExtensions;false;Add<TSource>;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action<TSource>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Configuration;ConfigurationExtensions;false;GetConnectionString;(Microsoft.Extensions.Configuration.IConfiguration,System.String);;Argument[0];ReturnValue;taint;df-generated | @@ -1047,10 +1054,11 @@ summary | Microsoft.Extensions.Configuration;ConfigurationExtensions;false;GetRequiredSection;(Microsoft.Extensions.Configuration.IConfiguration,System.String);;Argument[1];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationManager;false;Add;(Microsoft.Extensions.Configuration.IConfigurationSource);;Argument[0];Argument[this];taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationManager;false;Add;(Microsoft.Extensions.Configuration.IConfigurationSource);;Argument[this];ReturnValue;value;df-generated | -| Microsoft.Extensions.Configuration;ConfigurationManager;false;Build;();;Argument[this];ReturnValue;value;df-generated | +| Microsoft.Extensions.Configuration;ConfigurationManager;false;Build;();;Argument[this];ReturnValue;taint;manual | | Microsoft.Extensions.Configuration;ConfigurationManager;false;GetReloadToken;();;Argument[this];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationManager;false;GetSection;(System.String);;Argument[0];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationManager;false;GetSection;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| Microsoft.Extensions.Configuration;ConfigurationManager;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;manual | | Microsoft.Extensions.Configuration;ConfigurationManager;false;get_Properties;();;Argument[this];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationManager;false;get_Sources;();;Argument[this];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationPath;false;Combine;(System.Collections.Generic.IEnumerable<System.String>);;Argument[0].Element;ReturnValue;taint;df-generated | @@ -1064,13 +1072,13 @@ summary | Microsoft.Extensions.Configuration;ConfigurationRoot;false;GetReloadToken;();;Argument[this];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationRoot;false;GetSection;(System.String);;Argument[0];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationRoot;false;GetSection;(System.String);;Argument[this];ReturnValue;taint;df-generated | -| Microsoft.Extensions.Configuration;ConfigurationRoot;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| Microsoft.Extensions.Configuration;ConfigurationRoot;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;manual | | Microsoft.Extensions.Configuration;ConfigurationRoot;false;get_Providers;();;Argument[this];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationRootExtensions;false;GetDebugView;(Microsoft.Extensions.Configuration.IConfigurationRoot);;Argument[0];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationRootExtensions;false;GetDebugView;(Microsoft.Extensions.Configuration.IConfigurationRoot,System.Func<Microsoft.Extensions.Configuration.ConfigurationDebugViewContext,System.String>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Configuration;ConfigurationSection;false;ConfigurationSection;(Microsoft.Extensions.Configuration.IConfigurationRoot,System.String);;Argument[0];Argument[this];taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationSection;false;ConfigurationSection;(Microsoft.Extensions.Configuration.IConfigurationRoot,System.String);;Argument[1];Argument[this];taint;df-generated | -| Microsoft.Extensions.Configuration;ConfigurationSection;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | +| Microsoft.Extensions.Configuration;ConfigurationSection;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;manual | | Microsoft.Extensions.Configuration;ConfigurationSection;false;get_Path;();;Argument[this];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationSection;false;get_Value;();;Argument[this];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;EnvironmentVariablesExtensions;false;AddEnvironmentVariables;(Microsoft.Extensions.Configuration.IConfigurationBuilder);;Argument[0];ReturnValue;taint;df-generated | @@ -1080,6 +1088,8 @@ summary | Microsoft.Extensions.Configuration;FileConfigurationExtensions;false;SetFileLoadExceptionHandler;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action<Microsoft.Extensions.Configuration.FileLoadExceptionContext>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Configuration;FileConfigurationExtensions;false;SetFileProvider;(Microsoft.Extensions.Configuration.IConfigurationBuilder,Microsoft.Extensions.FileProviders.IFileProvider);;Argument[0];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;FileConfigurationSource;false;set_OnLoadException;(System.Action<Microsoft.Extensions.Configuration.FileLoadExceptionContext>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Extensions.Configuration;IConfiguration;true;get_Item;(System.String);;Argument[this];ReturnValue;taint;manual | +| Microsoft.Extensions.Configuration;IConfigurationBuilder;true;Build;();;Argument[this];ReturnValue;taint;manual | | Microsoft.Extensions.Configuration;IniConfigurationExtensions;false;AddIniFile;(Microsoft.Extensions.Configuration.IConfigurationBuilder,Microsoft.Extensions.FileProviders.IFileProvider,System.String,System.Boolean,System.Boolean);;Argument[0];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;IniConfigurationExtensions;false;AddIniFile;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action<Microsoft.Extensions.Configuration.Ini.IniConfigurationSource>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Configuration;IniConfigurationExtensions;false;AddIniFile;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String);;Argument[0];ReturnValue;taint;df-generated | @@ -9210,14 +9220,14 @@ summary | System.IO;Stream;true;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);;Argument[0].Element;Argument[this];taint;manual | | System.IO;Stream;true;WriteAsync;(System.ReadOnlyMemory<System.Byte>,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO;StreamReader;false;Read;();;Argument[this];ReturnValue;taint;manual | -| System.IO;StreamReader;false;Read;(System.Char[],System.Int32,System.Int32);;Argument[this];ReturnValue;taint;manual | -| System.IO;StreamReader;false;Read;(System.Span<System.Char>);;Argument[this];ReturnValue;taint;manual | -| System.IO;StreamReader;false;ReadAsync;(System.Char[],System.Int32,System.Int32);;Argument[this];ReturnValue;taint;manual | -| System.IO;StreamReader;false;ReadAsync;(System.Memory<System.Char>,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;manual | -| System.IO;StreamReader;false;ReadBlock;(System.Char[],System.Int32,System.Int32);;Argument[this];ReturnValue;taint;manual | -| System.IO;StreamReader;false;ReadBlock;(System.Span<System.Char>);;Argument[this];ReturnValue;taint;manual | -| System.IO;StreamReader;false;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);;Argument[this];ReturnValue;taint;manual | -| System.IO;StreamReader;false;ReadBlockAsync;(System.Memory<System.Char>,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;manual | +| System.IO;StreamReader;false;Read;(System.Char[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;StreamReader;false;Read;(System.Span<System.Char>);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;StreamReader;false;ReadAsync;(System.Char[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;StreamReader;false;ReadAsync;(System.Memory<System.Char>,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;StreamReader;false;ReadBlock;(System.Char[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;StreamReader;false;ReadBlock;(System.Span<System.Char>);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;StreamReader;false;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;StreamReader;false;ReadBlockAsync;(System.Memory<System.Char>,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;StreamReader;false;ReadLine;();;Argument[this];ReturnValue;taint;manual | | System.IO;StreamReader;false;ReadLineAsync;();;Argument[this];ReturnValue;taint;manual | | System.IO;StreamReader;false;ReadToEnd;();;Argument[this];ReturnValue;taint;manual | @@ -9286,13 +9296,13 @@ summary | System.IO;StreamWriter;false;get_BaseStream;();;Argument[this];ReturnValue;taint;df-generated | | System.IO;StreamWriter;false;get_Encoding;();;Argument[this];ReturnValue;taint;df-generated | | System.IO;StringReader;false;Read;();;Argument[this];ReturnValue;taint;manual | -| System.IO;StringReader;false;Read;(System.Char[],System.Int32,System.Int32);;Argument[this];ReturnValue;taint;manual | -| System.IO;StringReader;false;Read;(System.Span<System.Char>);;Argument[this];ReturnValue;taint;manual | -| System.IO;StringReader;false;ReadAsync;(System.Char[],System.Int32,System.Int32);;Argument[this];ReturnValue;taint;manual | -| System.IO;StringReader;false;ReadAsync;(System.Memory<System.Char>,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;manual | -| System.IO;StringReader;false;ReadBlock;(System.Span<System.Char>);;Argument[this];ReturnValue;taint;manual | -| System.IO;StringReader;false;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);;Argument[this];ReturnValue;taint;manual | -| System.IO;StringReader;false;ReadBlockAsync;(System.Memory<System.Char>,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;manual | +| System.IO;StringReader;false;Read;(System.Char[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;StringReader;false;Read;(System.Span<System.Char>);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;StringReader;false;ReadAsync;(System.Char[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;StringReader;false;ReadAsync;(System.Memory<System.Char>,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;StringReader;false;ReadBlock;(System.Span<System.Char>);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;StringReader;false;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;StringReader;false;ReadBlockAsync;(System.Memory<System.Char>,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;StringReader;false;ReadLine;();;Argument[this];ReturnValue;taint;manual | | System.IO;StringReader;false;ReadLineAsync;();;Argument[this];ReturnValue;taint;manual | | System.IO;StringReader;false;ReadLineAsync;(System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | @@ -9335,14 +9345,14 @@ summary | System.IO;StringWriter;false;WriteLineAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;df-generated | | System.IO;TextReader;false;Synchronized;(System.IO.TextReader);;Argument[0];ReturnValue;taint;df-generated | | System.IO;TextReader;true;Read;();;Argument[this];ReturnValue;taint;manual | -| System.IO;TextReader;true;Read;(System.Char[],System.Int32,System.Int32);;Argument[this];ReturnValue;taint;manual | -| System.IO;TextReader;true;Read;(System.Span<System.Char>);;Argument[this];ReturnValue;taint;manual | -| System.IO;TextReader;true;ReadAsync;(System.Char[],System.Int32,System.Int32);;Argument[this];ReturnValue;taint;manual | -| System.IO;TextReader;true;ReadAsync;(System.Memory<System.Char>,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;manual | -| System.IO;TextReader;true;ReadBlock;(System.Char[],System.Int32,System.Int32);;Argument[this];ReturnValue;taint;manual | -| System.IO;TextReader;true;ReadBlock;(System.Span<System.Char>);;Argument[this];ReturnValue;taint;manual | -| System.IO;TextReader;true;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);;Argument[this];ReturnValue;taint;manual | -| System.IO;TextReader;true;ReadBlockAsync;(System.Memory<System.Char>,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;manual | +| System.IO;TextReader;true;Read;(System.Char[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;TextReader;true;Read;(System.Span<System.Char>);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;TextReader;true;ReadAsync;(System.Char[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;TextReader;true;ReadAsync;(System.Memory<System.Char>,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;TextReader;true;ReadBlock;(System.Char[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;TextReader;true;ReadBlock;(System.Span<System.Char>);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;TextReader;true;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;TextReader;true;ReadBlockAsync;(System.Memory<System.Char>,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;TextReader;true;ReadLine;();;Argument[this];ReturnValue;taint;manual | | System.IO;TextReader;true;ReadLineAsync;();;Argument[this];ReturnValue;taint;manual | | System.IO;TextReader;true;ReadToEnd;();;Argument[this];ReturnValue;taint;manual | @@ -11062,6 +11072,8 @@ summary | System.Net.Http;HttpMethod;false;HttpMethod;(System.String);;Argument[0];Argument[this];taint;df-generated | | System.Net.Http;HttpMethod;false;ToString;();;Argument[this];ReturnValue;taint;df-generated | | System.Net.Http;HttpMethod;false;get_Method;();;Argument[this];ReturnValue;taint;df-generated | +| System.Net.Http;HttpRequestMessage;false;HttpRequestMessage;(System.Net.Http.HttpMethod,System.String);;Argument[0];Argument[this];taint;manual | +| System.Net.Http;HttpRequestMessage;false;HttpRequestMessage;(System.Net.Http.HttpMethod,System.String);;Argument[1];Argument[this];taint;manual | | System.Net.Http;HttpRequestMessage;false;HttpRequestMessage;(System.Net.Http.HttpMethod,System.Uri);;Argument[0];Argument[this];taint;df-generated | | System.Net.Http;HttpRequestMessage;false;HttpRequestMessage;(System.Net.Http.HttpMethod,System.Uri);;Argument[1];Argument[this];taint;df-generated | | System.Net.Http;HttpRequestMessage;false;ToString;();;Argument[this];ReturnValue;taint;df-generated | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected index 12c531e1837..4dec1bdd7d1 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected @@ -764,9 +764,15 @@ summary | Microsoft.Extensions.Configuration;ChainedConfigurationProvider;false;GetReloadToken;();;Argument[this];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ChainedConfigurationProvider;false;TryGet;(System.String,System.String);;Argument[this];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ChainedConfigurationProvider;false;get_Configuration;();;Argument[this];ReturnValue;taint;df-generated | -| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action<Microsoft.Extensions.Configuration.CommandLine.CommandLineConfigurationSource>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | -| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[]);;Argument[0];ReturnValue;taint;df-generated | -| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[],System.Collections.Generic.IDictionary<System.String,System.String>);;Argument[0];ReturnValue;taint;df-generated | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action<Microsoft.Extensions.Configuration.CommandLine.CommandLineConfigurationSource>);;Argument[1];Argument[0];taint;manual | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action<Microsoft.Extensions.Configuration.CommandLine.CommandLineConfigurationSource>);;Argument[1];Argument[1].Parameter[delegate-self];value;manual | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action<Microsoft.Extensions.Configuration.CommandLine.CommandLineConfigurationSource>);;Argument[1];ReturnValue;taint;manual | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[]);;Argument[1];Argument[0];taint;manual | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[]);;Argument[1];ReturnValue;taint;manual | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[],System.Collections.Generic.IDictionary<System.String,System.String>);;Argument[1];Argument[0];taint;manual | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[],System.Collections.Generic.IDictionary<System.String,System.String>);;Argument[1];ReturnValue;taint;manual | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[],System.Collections.Generic.IDictionary<System.String,System.String>);;Argument[2];Argument[0];taint;manual | +| Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;false;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String[],System.Collections.Generic.IDictionary<System.String,System.String>);;Argument[2];ReturnValue;taint;manual | | Microsoft.Extensions.Configuration;ConfigurationBinder;false;Bind;(Microsoft.Extensions.Configuration.IConfiguration,System.Object,System.Action<Microsoft.Extensions.Configuration.BinderOptions>);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Configuration;ConfigurationBinder;false;Get;(Microsoft.Extensions.Configuration.IConfiguration,System.Type,System.Action<Microsoft.Extensions.Configuration.BinderOptions>);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Configuration;ConfigurationBinder;false;Get<T>;(Microsoft.Extensions.Configuration.IConfiguration,System.Action<Microsoft.Extensions.Configuration.BinderOptions>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | @@ -785,7 +791,6 @@ summary | Microsoft.Extensions.Configuration;ConfigurationExtensions;false;GetRequiredSection;(Microsoft.Extensions.Configuration.IConfiguration,System.String);;Argument[1];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationManager;false;Add;(Microsoft.Extensions.Configuration.IConfigurationSource);;Argument[0];Argument[this];taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationManager;false;Add;(Microsoft.Extensions.Configuration.IConfigurationSource);;Argument[this];ReturnValue;value;df-generated | -| Microsoft.Extensions.Configuration;ConfigurationManager;false;Build;();;Argument[this];ReturnValue;value;df-generated | | Microsoft.Extensions.Configuration;ConfigurationManager;false;GetReloadToken;();;Argument[this];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationManager;false;GetSection;(System.String);;Argument[0];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationManager;false;GetSection;(System.String);;Argument[this];ReturnValue;taint;df-generated | @@ -801,13 +806,11 @@ summary | Microsoft.Extensions.Configuration;ConfigurationRoot;false;GetReloadToken;();;Argument[this];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationRoot;false;GetSection;(System.String);;Argument[0];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationRoot;false;GetSection;(System.String);;Argument[this];ReturnValue;taint;df-generated | -| Microsoft.Extensions.Configuration;ConfigurationRoot;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationRoot;false;get_Providers;();;Argument[this];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationRootExtensions;false;GetDebugView;(Microsoft.Extensions.Configuration.IConfigurationRoot);;Argument[0];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationRootExtensions;false;GetDebugView;(Microsoft.Extensions.Configuration.IConfigurationRoot,System.Func<Microsoft.Extensions.Configuration.ConfigurationDebugViewContext,System.String>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Configuration;ConfigurationSection;false;ConfigurationSection;(Microsoft.Extensions.Configuration.IConfigurationRoot,System.String);;Argument[0];Argument[this];taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationSection;false;ConfigurationSection;(Microsoft.Extensions.Configuration.IConfigurationRoot,System.String);;Argument[1];Argument[this];taint;df-generated | -| Microsoft.Extensions.Configuration;ConfigurationSection;false;get_Item;(System.String);;Argument[this];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationSection;false;get_Path;();;Argument[this];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;ConfigurationSection;false;get_Value;();;Argument[this];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;EnvironmentVariablesExtensions;false;AddEnvironmentVariables;(Microsoft.Extensions.Configuration.IConfigurationBuilder);;Argument[0];ReturnValue;taint;df-generated | @@ -817,6 +820,8 @@ summary | Microsoft.Extensions.Configuration;FileConfigurationExtensions;false;SetFileLoadExceptionHandler;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action<Microsoft.Extensions.Configuration.FileLoadExceptionContext>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Configuration;FileConfigurationExtensions;false;SetFileProvider;(Microsoft.Extensions.Configuration.IConfigurationBuilder,Microsoft.Extensions.FileProviders.IFileProvider);;Argument[0];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;FileConfigurationSource;false;set_OnLoadException;(System.Action<Microsoft.Extensions.Configuration.FileLoadExceptionContext>);;Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | +| Microsoft.Extensions.Configuration;IConfiguration;true;get_Item;(System.String);;Argument[this];ReturnValue;taint;manual | +| Microsoft.Extensions.Configuration;IConfigurationBuilder;true;Build;();;Argument[this];ReturnValue;taint;manual | | Microsoft.Extensions.Configuration;IniConfigurationExtensions;false;AddIniFile;(Microsoft.Extensions.Configuration.IConfigurationBuilder,Microsoft.Extensions.FileProviders.IFileProvider,System.String,System.Boolean,System.Boolean);;Argument[0];ReturnValue;taint;df-generated | | Microsoft.Extensions.Configuration;IniConfigurationExtensions;false;AddIniFile;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action<Microsoft.Extensions.Configuration.Ini.IniConfigurationSource>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Configuration;IniConfigurationExtensions;false;AddIniFile;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String);;Argument[0];ReturnValue;taint;df-generated | @@ -7775,14 +7780,14 @@ summary | System.IO;StringWriter;false;WriteLineAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);;Argument[0];Argument[this];taint;df-generated | | System.IO;TextReader;false;Synchronized;(System.IO.TextReader);;Argument[0];ReturnValue;taint;df-generated | | System.IO;TextReader;true;Read;();;Argument[this];ReturnValue;taint;manual | -| System.IO;TextReader;true;Read;(System.Char[],System.Int32,System.Int32);;Argument[this];ReturnValue;taint;manual | -| System.IO;TextReader;true;Read;(System.Span<System.Char>);;Argument[this];ReturnValue;taint;manual | -| System.IO;TextReader;true;ReadAsync;(System.Char[],System.Int32,System.Int32);;Argument[this];ReturnValue;taint;manual | -| System.IO;TextReader;true;ReadAsync;(System.Memory<System.Char>,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;manual | -| System.IO;TextReader;true;ReadBlock;(System.Char[],System.Int32,System.Int32);;Argument[this];ReturnValue;taint;manual | -| System.IO;TextReader;true;ReadBlock;(System.Span<System.Char>);;Argument[this];ReturnValue;taint;manual | -| System.IO;TextReader;true;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);;Argument[this];ReturnValue;taint;manual | -| System.IO;TextReader;true;ReadBlockAsync;(System.Memory<System.Char>,System.Threading.CancellationToken);;Argument[this];ReturnValue;taint;manual | +| System.IO;TextReader;true;Read;(System.Char[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;TextReader;true;Read;(System.Span<System.Char>);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;TextReader;true;ReadAsync;(System.Char[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;TextReader;true;ReadAsync;(System.Memory<System.Char>,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;TextReader;true;ReadBlock;(System.Char[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;TextReader;true;ReadBlock;(System.Span<System.Char>);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;TextReader;true;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);;Argument[this];Argument[0].Element;taint;manual | +| System.IO;TextReader;true;ReadBlockAsync;(System.Memory<System.Char>,System.Threading.CancellationToken);;Argument[this];Argument[0].Element;taint;manual | | System.IO;TextReader;true;ReadLine;();;Argument[this];ReturnValue;taint;manual | | System.IO;TextReader;true;ReadLineAsync;();;Argument[this];ReturnValue;taint;manual | | System.IO;TextReader;true;ReadToEnd;();;Argument[this];ReturnValue;taint;manual | @@ -9414,6 +9419,8 @@ summary | System.Net.Http;HttpMethod;false;HttpMethod;(System.String);;Argument[0];Argument[this];taint;df-generated | | System.Net.Http;HttpMethod;false;ToString;();;Argument[this];ReturnValue;taint;df-generated | | System.Net.Http;HttpMethod;false;get_Method;();;Argument[this];ReturnValue;taint;df-generated | +| System.Net.Http;HttpRequestMessage;false;HttpRequestMessage;(System.Net.Http.HttpMethod,System.String);;Argument[0];Argument[this];taint;manual | +| System.Net.Http;HttpRequestMessage;false;HttpRequestMessage;(System.Net.Http.HttpMethod,System.String);;Argument[1];Argument[this];taint;manual | | System.Net.Http;HttpRequestMessage;false;HttpRequestMessage;(System.Net.Http.HttpMethod,System.Uri);;Argument[0];Argument[this];taint;df-generated | | System.Net.Http;HttpRequestMessage;false;HttpRequestMessage;(System.Net.Http.HttpMethod,System.Uri);;Argument[1];Argument[this];taint;df-generated | | System.Net.Http;HttpRequestMessage;false;ToString;();;Argument[this];ReturnValue;taint;df-generated | diff --git a/csharp/ql/test/library-tests/members/GetLabel.ql b/csharp/ql/test/library-tests/members/GetLabel.ql index 0199c4925ac..61eff002e55 100644 --- a/csharp/ql/test/library-tests/members/GetLabel.ql +++ b/csharp/ql/test/library-tests/members/GetLabel.ql @@ -1,5 +1,5 @@ -import dotnet::DotNet +import csharp -from NamedElement ne -where ne.fromSource() -select ne, ne.getLabel() +deprecated query predicate labels(NamedElement ne, string label) { + ne.getLabel() = label and ne.fromSource() +} diff --git a/csharp/ql/test/library-tests/parameters/ParameterModifiers.cs b/csharp/ql/test/library-tests/parameters/ParameterModifiers.cs new file mode 100644 index 00000000000..b3db266b938 --- /dev/null +++ b/csharp/ql/test/library-tests/parameters/ParameterModifiers.cs @@ -0,0 +1,18 @@ +using System; + +public class ParameterModifiers +{ + public void M1(object p1) { } + public void M2(in object p2) { } + + public void M3(out object p3) + { + p3 = new object(); + } + + public void M4(ref object p4) { } + + public void M5(params object[] p5) { } + + public void M6(ref readonly object p6) { } +} diff --git a/csharp/ql/test/library-tests/parameters/ParameterModifiers.expected b/csharp/ql/test/library-tests/parameters/ParameterModifiers.expected new file mode 100644 index 00000000000..83e94bf278d --- /dev/null +++ b/csharp/ql/test/library-tests/parameters/ParameterModifiers.expected @@ -0,0 +1,19 @@ +parameterModifier +| ParameterModifiers.cs:5:27:5:28 | p1 | 0 | +| ParameterModifiers.cs:6:30:6:31 | p2 | 5 | +| ParameterModifiers.cs:8:31:8:32 | p3 | 2 | +| ParameterModifiers.cs:13:31:13:32 | p4 | 1 | +| ParameterModifiers.cs:15:36:15:37 | p5 | 3 | +| ParameterModifiers.cs:17:40:17:41 | p6 | 6 | +parameterIsValue +| ParameterModifiers.cs:5:27:5:28 | p1 | +parameterIsIn +| ParameterModifiers.cs:6:30:6:31 | p2 | +parameterIsOut +| ParameterModifiers.cs:8:31:8:32 | p3 | +parameterIsRef +| ParameterModifiers.cs:13:31:13:32 | p4 | +parameterIsParams +| ParameterModifiers.cs:15:36:15:37 | p5 | +parameterIsReadonlyRef +| ParameterModifiers.cs:17:40:17:41 | p6 | diff --git a/csharp/ql/test/library-tests/parameters/ParameterModifiers.ql b/csharp/ql/test/library-tests/parameters/ParameterModifiers.ql new file mode 100644 index 00000000000..b83eb202161 --- /dev/null +++ b/csharp/ql/test/library-tests/parameters/ParameterModifiers.ql @@ -0,0 +1,19 @@ +import csharp + +class TestParameter extends Parameter { + TestParameter() { this.getFile().getBaseName() = "ParameterModifiers.cs" } +} + +query predicate parameterModifier(TestParameter p, int kind) { params(p, _, _, _, kind, _, _) } + +query predicate parameterIsValue(TestParameter p) { p.isValue() } + +query predicate parameterIsIn(TestParameter p) { p.isIn() } + +query predicate parameterIsOut(TestParameter p) { p.isOut() } + +query predicate parameterIsRef(TestParameter p) { p.isRef() } + +query predicate parameterIsParams(TestParameter p) { p.isParams() } + +query predicate parameterIsReadonlyRef(TestParameter p) { p.isReadonlyRef() } diff --git a/csharp/ql/test/library-tests/parameters/Parameters.ql b/csharp/ql/test/library-tests/parameters/Parameters.ql index 209cdc12577..771fd83721b 100644 --- a/csharp/ql/test/library-tests/parameters/Parameters.ql +++ b/csharp/ql/test/library-tests/parameters/Parameters.ql @@ -1,7 +1,10 @@ import csharp private predicate fromTestLocation(Element e) { - e.fromSource() or e.getFile().getStem() = "Parameters" + e.fromSource() and + e.getFile().getBaseName() = ["Parameters.cs", "LambdaParameters.cs"] + or + e.getFile().getStem() = "Parameters" } private predicate compilerGeneratedAttribute(Parameterizable container) { diff --git a/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/NoDisposeCallOnLocalIDisposable.cs b/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/NoDisposeCallOnLocalIDisposable.cs index d043cbbf491..ae9bccf0e6e 100644 --- a/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/NoDisposeCallOnLocalIDisposable.cs +++ b/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/NoDisposeCallOnLocalIDisposable.cs @@ -70,12 +70,12 @@ class Test using (var reader = new StreamReader(new FileStream("", FileMode.Open))) ; - // GOOD: XmlDocument.Load disposes incoming XmlReader (according to CIL) + // GOOD: XmlDocument.Load disposes incoming XmlReader (False positive as this is disposed in library code) var xmlReader = XmlReader.Create(new StringReader("xml"), null); var xmlDoc = new XmlDocument(); xmlDoc.Load(xmlReader); - // GOOD: Passed to a library. This is only detected in CIL. + // GOOD: Passed to a library (False positive as this is disposed in library code). DisposalTests.Class1.Dispose(new StreamWriter("output.txt")); // GOOD: Disposed automatically. diff --git a/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/NoDisposeCallOnLocalIDisposable.expected b/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/NoDisposeCallOnLocalIDisposable.expected index e96638e6076..1d71aa4af02 100644 --- a/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/NoDisposeCallOnLocalIDisposable.expected +++ b/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/NoDisposeCallOnLocalIDisposable.expected @@ -2,4 +2,6 @@ | NoDisposeCallOnLocalIDisposable.cs:51:18:51:73 | object creation of type FileStream | Disposable 'FileStream' is created but not disposed. | | NoDisposeCallOnLocalIDisposable.cs:52:9:52:64 | object creation of type FileStream | Disposable 'FileStream' is created but not disposed. | | NoDisposeCallOnLocalIDisposable.cs:74:25:74:71 | call to method Create | Disposable 'XmlReader' is created but not disposed. | +| NoDisposeCallOnLocalIDisposable.cs:74:42:74:64 | object creation of type StringReader | Disposable 'StringReader' is created but not disposed. | +| NoDisposeCallOnLocalIDisposable.cs:79:38:79:67 | object creation of type StreamWriter | Disposable 'StreamWriter' is created but not disposed. | | NoDisposeCallOnLocalIDisposableBad.cs:8:22:8:56 | object creation of type FileStream | Disposable 'FileStream' is created but not disposed. | diff --git a/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/options b/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/options index a02c94f4258..f12c8c66331 100644 --- a/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/options +++ b/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/options @@ -1 +1 @@ -semmle-extractor-options: --cil /r:System.Private.Xml.dll /r:System.IO.Compression.dll +semmle-extractor-options: /r:System.Private.Xml.dll /r:System.IO.Compression.dll diff --git a/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.cs b/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.cs index 85a95df55e4..df3db94b433 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.cs @@ -1,4 +1,6 @@ using System; +using System.Data.SqlClient; +using System.Diagnostics; namespace System.Web.UI.WebControls { @@ -34,5 +36,22 @@ namespace Test startInfoProps.WorkingDirectory = userInput; Process.Start(startInfoProps); } + + public void StoredCommandInjection() + { + using (SqlConnection connection = new SqlConnection("")) + { + connection.Open(); + SqlCommand customerCommand = new SqlCommand("SELECT * FROM customers", connection); + SqlDataReader customerReader = customerCommand.ExecuteReader(); + + while (customerReader.Read()) + { + // BAD: Read from database, and use it to directly execute a command + Process.Start("foo.exe", "/c " + customerReader.GetString(1)); + } + customerReader.Close(); + } + } } } diff --git a/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected index 11b83a0ae20..fe27701d59d 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected @@ -1,59 +1,63 @@ edges -| CommandInjection.cs:25:20:25:28 | access to local variable userInput : String | CommandInjection.cs:26:27:26:47 | ... + ... | provenance | | -| CommandInjection.cs:25:20:25:28 | access to local variable userInput : String | CommandInjection.cs:26:50:26:66 | ... + ... | provenance | | -| CommandInjection.cs:25:20:25:28 | access to local variable userInput : String | CommandInjection.cs:28:63:28:71 | access to local variable userInput | provenance | | -| CommandInjection.cs:25:20:25:28 | access to local variable userInput : String | CommandInjection.cs:28:63:28:71 | access to local variable userInput : String | provenance | | -| CommandInjection.cs:25:20:25:28 | access to local variable userInput : String | CommandInjection.cs:28:74:28:82 | access to local variable userInput | provenance | | -| CommandInjection.cs:25:20:25:28 | access to local variable userInput : String | CommandInjection.cs:28:74:28:82 | access to local variable userInput : String | provenance | | -| CommandInjection.cs:25:20:25:28 | access to local variable userInput : String | CommandInjection.cs:32:39:32:47 | access to local variable userInput | provenance | | -| CommandInjection.cs:25:20:25:28 | access to local variable userInput : String | CommandInjection.cs:32:39:32:47 | access to local variable userInput : String | provenance | | -| CommandInjection.cs:25:20:25:28 | access to local variable userInput : String | CommandInjection.cs:33:40:33:48 | access to local variable userInput | provenance | | -| CommandInjection.cs:25:20:25:28 | access to local variable userInput : String | CommandInjection.cs:33:40:33:48 | access to local variable userInput : String | provenance | | -| CommandInjection.cs:25:20:25:28 | access to local variable userInput : String | CommandInjection.cs:34:47:34:55 | access to local variable userInput | provenance | | -| CommandInjection.cs:25:20:25:28 | access to local variable userInput : String | CommandInjection.cs:34:47:34:55 | access to local variable userInput : String | provenance | | -| CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:25:32:25:51 | access to property Text : String | provenance | | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:25:20:25:28 | access to local variable userInput : String | provenance | | -| CommandInjection.cs:28:30:28:38 | access to local variable startInfo : ProcessStartInfo | CommandInjection.cs:29:27:29:35 | access to local variable startInfo | provenance | | -| CommandInjection.cs:28:42:28:83 | object creation of type ProcessStartInfo : ProcessStartInfo | CommandInjection.cs:28:30:28:38 | access to local variable startInfo : ProcessStartInfo | provenance | | -| CommandInjection.cs:28:63:28:71 | access to local variable userInput : String | CommandInjection.cs:28:42:28:83 | object creation of type ProcessStartInfo : ProcessStartInfo | provenance | | -| CommandInjection.cs:28:74:28:82 | access to local variable userInput : String | CommandInjection.cs:28:42:28:83 | object creation of type ProcessStartInfo : ProcessStartInfo | provenance | | -| CommandInjection.cs:32:13:32:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | provenance | | -| CommandInjection.cs:32:39:32:47 | access to local variable userInput : String | CommandInjection.cs:32:13:32:26 | [post] access to local variable startInfoProps : ProcessStartInfo | provenance | | -| CommandInjection.cs:33:13:33:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | provenance | | -| CommandInjection.cs:33:40:33:48 | access to local variable userInput : String | CommandInjection.cs:33:13:33:26 | [post] access to local variable startInfoProps : ProcessStartInfo | provenance | | -| CommandInjection.cs:34:13:34:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | provenance | | -| CommandInjection.cs:34:47:34:55 | access to local variable userInput : String | CommandInjection.cs:34:13:34:26 | [post] access to local variable startInfoProps : ProcessStartInfo | provenance | | +| CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:28:27:28:47 | ... + ... | provenance | | +| CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:28:50:28:66 | ... + ... | provenance | | +| CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:30:63:30:71 | access to local variable userInput | provenance | | +| CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:30:63:30:71 | access to local variable userInput : String | provenance | | +| CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:30:74:30:82 | access to local variable userInput | provenance | | +| CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:30:74:30:82 | access to local variable userInput : String | provenance | | +| CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:34:39:34:47 | access to local variable userInput | provenance | | +| CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:34:39:34:47 | access to local variable userInput : String | provenance | | +| CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:35:40:35:48 | access to local variable userInput | provenance | | +| CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:35:40:35:48 | access to local variable userInput : String | provenance | | +| CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:36:47:36:55 | access to local variable userInput | provenance | | +| CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | CommandInjection.cs:36:47:36:55 | access to local variable userInput : String | provenance | | +| CommandInjection.cs:27:32:27:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:27:32:27:51 | access to property Text : String | provenance | | +| CommandInjection.cs:27:32:27:51 | access to property Text : String | CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | provenance | | +| CommandInjection.cs:30:30:30:38 | access to local variable startInfo : ProcessStartInfo | CommandInjection.cs:31:27:31:35 | access to local variable startInfo | provenance | | +| CommandInjection.cs:30:42:30:83 | object creation of type ProcessStartInfo : ProcessStartInfo | CommandInjection.cs:30:30:30:38 | access to local variable startInfo : ProcessStartInfo | provenance | | +| CommandInjection.cs:30:63:30:71 | access to local variable userInput : String | CommandInjection.cs:30:42:30:83 | object creation of type ProcessStartInfo : ProcessStartInfo | provenance | | +| CommandInjection.cs:30:74:30:82 | access to local variable userInput : String | CommandInjection.cs:30:42:30:83 | object creation of type ProcessStartInfo : ProcessStartInfo | provenance | | +| CommandInjection.cs:34:13:34:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:37:27:37:40 | access to local variable startInfoProps | provenance | | +| CommandInjection.cs:34:39:34:47 | access to local variable userInput : String | CommandInjection.cs:34:13:34:26 | [post] access to local variable startInfoProps : ProcessStartInfo | provenance | | +| CommandInjection.cs:35:13:35:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:37:27:37:40 | access to local variable startInfoProps | provenance | | +| CommandInjection.cs:35:40:35:48 | access to local variable userInput : String | CommandInjection.cs:35:13:35:26 | [post] access to local variable startInfoProps : ProcessStartInfo | provenance | | +| CommandInjection.cs:36:13:36:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:37:27:37:40 | access to local variable startInfoProps | provenance | | +| CommandInjection.cs:36:47:36:55 | access to local variable userInput : String | CommandInjection.cs:36:13:36:26 | [post] access to local variable startInfoProps : ProcessStartInfo | provenance | | +| CommandInjection.cs:51:54:51:80 | call to method GetString : String | CommandInjection.cs:51:46:51:80 | ... + ... | provenance | | nodes -| CommandInjection.cs:25:20:25:28 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | -| CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | semmle.label | access to field categoryTextBox : TextBox | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | semmle.label | access to property Text : String | -| CommandInjection.cs:26:27:26:47 | ... + ... | semmle.label | ... + ... | -| CommandInjection.cs:26:50:26:66 | ... + ... | semmle.label | ... + ... | -| CommandInjection.cs:28:30:28:38 | access to local variable startInfo : ProcessStartInfo | semmle.label | access to local variable startInfo : ProcessStartInfo | -| CommandInjection.cs:28:42:28:83 | object creation of type ProcessStartInfo : ProcessStartInfo | semmle.label | object creation of type ProcessStartInfo : ProcessStartInfo | -| CommandInjection.cs:28:63:28:71 | access to local variable userInput | semmle.label | access to local variable userInput | -| CommandInjection.cs:28:63:28:71 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | -| CommandInjection.cs:28:74:28:82 | access to local variable userInput | semmle.label | access to local variable userInput | -| CommandInjection.cs:28:74:28:82 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | -| CommandInjection.cs:29:27:29:35 | access to local variable startInfo | semmle.label | access to local variable startInfo | -| CommandInjection.cs:32:13:32:26 | [post] access to local variable startInfoProps : ProcessStartInfo | semmle.label | [post] access to local variable startInfoProps : ProcessStartInfo | -| CommandInjection.cs:32:39:32:47 | access to local variable userInput | semmle.label | access to local variable userInput | -| CommandInjection.cs:32:39:32:47 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | -| CommandInjection.cs:33:13:33:26 | [post] access to local variable startInfoProps : ProcessStartInfo | semmle.label | [post] access to local variable startInfoProps : ProcessStartInfo | -| CommandInjection.cs:33:40:33:48 | access to local variable userInput | semmle.label | access to local variable userInput | -| CommandInjection.cs:33:40:33:48 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | +| CommandInjection.cs:27:20:27:28 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | +| CommandInjection.cs:27:32:27:46 | access to field categoryTextBox : TextBox | semmle.label | access to field categoryTextBox : TextBox | +| CommandInjection.cs:27:32:27:51 | access to property Text : String | semmle.label | access to property Text : String | +| CommandInjection.cs:28:27:28:47 | ... + ... | semmle.label | ... + ... | +| CommandInjection.cs:28:50:28:66 | ... + ... | semmle.label | ... + ... | +| CommandInjection.cs:30:30:30:38 | access to local variable startInfo : ProcessStartInfo | semmle.label | access to local variable startInfo : ProcessStartInfo | +| CommandInjection.cs:30:42:30:83 | object creation of type ProcessStartInfo : ProcessStartInfo | semmle.label | object creation of type ProcessStartInfo : ProcessStartInfo | +| CommandInjection.cs:30:63:30:71 | access to local variable userInput | semmle.label | access to local variable userInput | +| CommandInjection.cs:30:63:30:71 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | +| CommandInjection.cs:30:74:30:82 | access to local variable userInput | semmle.label | access to local variable userInput | +| CommandInjection.cs:30:74:30:82 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | +| CommandInjection.cs:31:27:31:35 | access to local variable startInfo | semmle.label | access to local variable startInfo | | CommandInjection.cs:34:13:34:26 | [post] access to local variable startInfoProps : ProcessStartInfo | semmle.label | [post] access to local variable startInfoProps : ProcessStartInfo | -| CommandInjection.cs:34:47:34:55 | access to local variable userInput | semmle.label | access to local variable userInput | -| CommandInjection.cs:34:47:34:55 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | -| CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | semmle.label | access to local variable startInfoProps | +| CommandInjection.cs:34:39:34:47 | access to local variable userInput | semmle.label | access to local variable userInput | +| CommandInjection.cs:34:39:34:47 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | +| CommandInjection.cs:35:13:35:26 | [post] access to local variable startInfoProps : ProcessStartInfo | semmle.label | [post] access to local variable startInfoProps : ProcessStartInfo | +| CommandInjection.cs:35:40:35:48 | access to local variable userInput | semmle.label | access to local variable userInput | +| CommandInjection.cs:35:40:35:48 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | +| CommandInjection.cs:36:13:36:26 | [post] access to local variable startInfoProps : ProcessStartInfo | semmle.label | [post] access to local variable startInfoProps : ProcessStartInfo | +| CommandInjection.cs:36:47:36:55 | access to local variable userInput | semmle.label | access to local variable userInput | +| CommandInjection.cs:36:47:36:55 | access to local variable userInput : String | semmle.label | access to local variable userInput : String | +| CommandInjection.cs:37:27:37:40 | access to local variable startInfoProps | semmle.label | access to local variable startInfoProps | +| CommandInjection.cs:51:46:51:80 | ... + ... | semmle.label | ... + ... | +| CommandInjection.cs:51:54:51:80 | call to method GetString : String | semmle.label | call to method GetString : String | subpaths #select -| CommandInjection.cs:26:27:26:47 | ... + ... | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:26:27:26:47 | ... + ... | This command line depends on a $@. | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox | user-provided value | -| CommandInjection.cs:26:50:26:66 | ... + ... | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:26:50:26:66 | ... + ... | This command line depends on a $@. | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox | user-provided value | -| CommandInjection.cs:28:63:28:71 | access to local variable userInput | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:28:63:28:71 | access to local variable userInput | This command line depends on a $@. | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox | user-provided value | -| CommandInjection.cs:28:74:28:82 | access to local variable userInput | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:28:74:28:82 | access to local variable userInput | This command line depends on a $@. | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox | user-provided value | -| CommandInjection.cs:29:27:29:35 | access to local variable startInfo | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:29:27:29:35 | access to local variable startInfo | This command line depends on a $@. | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox | user-provided value | -| CommandInjection.cs:32:39:32:47 | access to local variable userInput | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:32:39:32:47 | access to local variable userInput | This command line depends on a $@. | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox | user-provided value | -| CommandInjection.cs:33:40:33:48 | access to local variable userInput | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:33:40:33:48 | access to local variable userInput | This command line depends on a $@. | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox | user-provided value | -| CommandInjection.cs:34:47:34:55 | access to local variable userInput | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:34:47:34:55 | access to local variable userInput | This command line depends on a $@. | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox | user-provided value | -| CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | This command line depends on a $@. | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox | user-provided value | +| CommandInjection.cs:28:27:28:47 | ... + ... | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:28:27:28:47 | ... + ... | This command line depends on a $@. | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox | user-provided value | +| CommandInjection.cs:28:50:28:66 | ... + ... | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:28:50:28:66 | ... + ... | This command line depends on a $@. | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox | user-provided value | +| CommandInjection.cs:30:63:30:71 | access to local variable userInput | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:30:63:30:71 | access to local variable userInput | This command line depends on a $@. | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox | user-provided value | +| CommandInjection.cs:30:74:30:82 | access to local variable userInput | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:30:74:30:82 | access to local variable userInput | This command line depends on a $@. | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox | user-provided value | +| CommandInjection.cs:31:27:31:35 | access to local variable startInfo | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:31:27:31:35 | access to local variable startInfo | This command line depends on a $@. | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox | user-provided value | +| CommandInjection.cs:34:39:34:47 | access to local variable userInput | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:34:39:34:47 | access to local variable userInput | This command line depends on a $@. | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox | user-provided value | +| CommandInjection.cs:35:40:35:48 | access to local variable userInput | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:35:40:35:48 | access to local variable userInput | This command line depends on a $@. | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox | user-provided value | +| CommandInjection.cs:36:47:36:55 | access to local variable userInput | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:36:47:36:55 | access to local variable userInput | This command line depends on a $@. | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox | user-provided value | +| CommandInjection.cs:37:27:37:40 | access to local variable startInfoProps | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:37:27:37:40 | access to local variable startInfoProps | This command line depends on a $@. | CommandInjection.cs:27:32:27:46 | access to field categoryTextBox | user-provided value | +| CommandInjection.cs:51:46:51:80 | ... + ... | CommandInjection.cs:51:54:51:80 | call to method GetString : String | CommandInjection.cs:51:46:51:80 | ... + ... | This command line depends on a $@. | CommandInjection.cs:51:54:51:80 | call to method GetString | user-provided value | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.ext.yml b/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.ext.yml new file mode 100644 index 00000000000..82f107ae1d7 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.ext.yml @@ -0,0 +1,7 @@ +extensions: + + - addsTo: + pack: codeql/threat-models + extensible: threatModelConfiguration + data: + - ["local", true, 0] \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-078/StoredCommandInjection.cs b/csharp/ql/test/query-tests/Security Features/CWE-078/StoredCommandInjection.cs deleted file mode 100644 index b9f4ca1de9d..00000000000 --- a/csharp/ql/test/query-tests/Security Features/CWE-078/StoredCommandInjection.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Data.SqlClient; -using System.Diagnostics; - -namespace Test -{ - - class StoredCommandInjection - { - - public void Test() - { - using (SqlConnection connection = new SqlConnection("")) - { - connection.Open(); - SqlCommand customerCommand = new SqlCommand("SELECT * FROM customers", connection); - SqlDataReader customerReader = customerCommand.ExecuteReader(); - - while (customerReader.Read()) - { - // BAD: Read from database, and use it to directly execute a command - Process.Start("foo.exe", "/c " + customerReader.GetString(1)); - } - customerReader.Close(); - } - } - } -} diff --git a/csharp/ql/test/query-tests/Security Features/CWE-078/StoredCommandInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-078/StoredCommandInjection.expected deleted file mode 100644 index 46c85f7abbe..00000000000 --- a/csharp/ql/test/query-tests/Security Features/CWE-078/StoredCommandInjection.expected +++ /dev/null @@ -1,8 +0,0 @@ -edges -| StoredCommandInjection.cs:22:54:22:80 | call to method GetString : String | StoredCommandInjection.cs:22:46:22:80 | ... + ... | provenance | | -nodes -| StoredCommandInjection.cs:22:46:22:80 | ... + ... | semmle.label | ... + ... | -| StoredCommandInjection.cs:22:54:22:80 | call to method GetString : String | semmle.label | call to method GetString : String | -subpaths -#select -| StoredCommandInjection.cs:22:46:22:80 | ... + ... | StoredCommandInjection.cs:22:54:22:80 | call to method GetString : String | StoredCommandInjection.cs:22:46:22:80 | ... + ... | This command line depends on a $@. | StoredCommandInjection.cs:22:54:22:80 | call to method GetString | stored (potentially user-provided) value | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-078/StoredCommandInjection.qlref b/csharp/ql/test/query-tests/Security Features/CWE-078/StoredCommandInjection.qlref deleted file mode 100644 index c2df5055b37..00000000000 --- a/csharp/ql/test/query-tests/Security Features/CWE-078/StoredCommandInjection.qlref +++ /dev/null @@ -1 +0,0 @@ -Security Features/CWE-078/StoredCommandInjection.ql diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.expected b/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.expected index 488df85e1c4..cad4dc8f741 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.expected @@ -5,4 +5,4 @@ nodes | StoredXSS.cs:22:60:22:86 | call to method GetString : String | semmle.label | call to method GetString : String | subpaths #select -| StoredXSS.cs:22:44:22:86 | ... + ... | StoredXSS.cs:22:60:22:86 | call to method GetString : String | StoredXSS.cs:22:44:22:86 | ... + ... | This HTML or JavaScript write depends on a $@. | StoredXSS.cs:22:60:22:86 | call to method GetString | stored (potentially user-provided) value | +| StoredXSS.cs:22:44:22:86 | ... + ... | StoredXSS.cs:22:60:22:86 | call to method GetString : String | StoredXSS.cs:22:44:22:86 | ... + ... | $@ flows to here and is written to HTML or JavaScript. | StoredXSS.cs:22:60:22:86 | call to method GetString : String | User-provided value | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.ext.yml b/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.ext.yml new file mode 100644 index 00000000000..82f107ae1d7 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.ext.yml @@ -0,0 +1,7 @@ +extensions: + + - addsTo: + pack: codeql/threat-models + extensible: threatModelConfiguration + data: + - ["local", true, 0] \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.qlref b/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.qlref index 196efd7f0e4..faad1d6403c 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.qlref +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.qlref @@ -1 +1 @@ -Security Features/CWE-079/StoredXSS.ql +Security Features/CWE-079/XSS.ql \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089/SecondOrderSqlInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-089/SecondOrderSqlInjection.expected deleted file mode 100644 index fccccdb3c73..00000000000 --- a/csharp/ql/test/query-tests/Security Features/CWE-089/SecondOrderSqlInjection.expected +++ /dev/null @@ -1,56 +0,0 @@ -edges -| SecondOrderSqlInjection.cs:25:119:25:145 | call to method GetString : String | SecondOrderSqlInjection.cs:25:71:25:145 | ... + ... | provenance | | -| SecondOrderSqlInjection.cs:33:31:33:32 | access to local variable fs : FileStream | SecondOrderSqlInjection.cs:35:59:35:60 | access to local variable fs : FileStream | provenance | | -| SecondOrderSqlInjection.cs:33:36:33:78 | object creation of type FileStream : FileStream | SecondOrderSqlInjection.cs:33:31:33:32 | access to local variable fs : FileStream | provenance | | -| SecondOrderSqlInjection.cs:35:37:35:38 | access to local variable sr : StreamReader | SecondOrderSqlInjection.cs:38:35:38:36 | access to local variable sr : StreamReader | provenance | | -| SecondOrderSqlInjection.cs:35:42:35:76 | object creation of type StreamReader : StreamReader | SecondOrderSqlInjection.cs:35:37:35:38 | access to local variable sr : StreamReader | provenance | | -| SecondOrderSqlInjection.cs:35:59:35:60 | access to local variable fs : FileStream | SecondOrderSqlInjection.cs:35:42:35:76 | object creation of type StreamReader : StreamReader | provenance | | -| SecondOrderSqlInjection.cs:38:29:38:31 | access to local variable sql : String | SecondOrderSqlInjection.cs:40:31:40:33 | access to local variable sql : String | provenance | | -| SecondOrderSqlInjection.cs:38:35:38:36 | access to local variable sr : StreamReader | SecondOrderSqlInjection.cs:38:35:38:47 | call to method ReadLine : String | provenance | | -| SecondOrderSqlInjection.cs:38:35:38:47 | call to method ReadLine : String | SecondOrderSqlInjection.cs:38:29:38:31 | access to local variable sql : String | provenance | | -| SecondOrderSqlInjection.cs:40:25:40:27 | access to local variable sql : String | SecondOrderSqlInjection.cs:45:57:45:59 | access to local variable sql | provenance | | -| SecondOrderSqlInjection.cs:40:31:40:33 | access to local variable sql : String | SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | provenance | | -| SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | SecondOrderSqlInjection.cs:40:25:40:27 | access to local variable sql : String | provenance | | -| SqlInjectionSqlite.cs:49:31:49:32 | access to local variable fs : FileStream | SqlInjectionSqlite.cs:51:59:51:60 | access to local variable fs : FileStream | provenance | | -| SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | SqlInjectionSqlite.cs:49:31:49:32 | access to local variable fs : FileStream | provenance | | -| SqlInjectionSqlite.cs:51:37:51:38 | access to local variable sr : StreamReader | SqlInjectionSqlite.cs:54:35:54:36 | access to local variable sr : StreamReader | provenance | | -| SqlInjectionSqlite.cs:51:42:51:76 | object creation of type StreamReader : StreamReader | SqlInjectionSqlite.cs:51:37:51:38 | access to local variable sr : StreamReader | provenance | | -| SqlInjectionSqlite.cs:51:59:51:60 | access to local variable fs : FileStream | SqlInjectionSqlite.cs:51:42:51:76 | object creation of type StreamReader : StreamReader | provenance | | -| SqlInjectionSqlite.cs:54:29:54:31 | access to local variable sql : String | SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | provenance | | -| SqlInjectionSqlite.cs:54:35:54:36 | access to local variable sr : StreamReader | SqlInjectionSqlite.cs:54:35:54:47 | call to method ReadLine : String | provenance | | -| SqlInjectionSqlite.cs:54:35:54:47 | call to method ReadLine : String | SqlInjectionSqlite.cs:54:29:54:31 | access to local variable sql : String | provenance | | -| SqlInjectionSqlite.cs:56:25:56:27 | access to local variable sql : String | SqlInjectionSqlite.cs:61:53:61:55 | access to local variable sql | provenance | | -| SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | provenance | | -| SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | SqlInjectionSqlite.cs:56:25:56:27 | access to local variable sql : String | provenance | | -nodes -| SecondOrderSqlInjection.cs:25:71:25:145 | ... + ... | semmle.label | ... + ... | -| SecondOrderSqlInjection.cs:25:119:25:145 | call to method GetString : String | semmle.label | call to method GetString : String | -| SecondOrderSqlInjection.cs:33:31:33:32 | access to local variable fs : FileStream | semmle.label | access to local variable fs : FileStream | -| SecondOrderSqlInjection.cs:33:36:33:78 | object creation of type FileStream : FileStream | semmle.label | object creation of type FileStream : FileStream | -| SecondOrderSqlInjection.cs:35:37:35:38 | access to local variable sr : StreamReader | semmle.label | access to local variable sr : StreamReader | -| SecondOrderSqlInjection.cs:35:42:35:76 | object creation of type StreamReader : StreamReader | semmle.label | object creation of type StreamReader : StreamReader | -| SecondOrderSqlInjection.cs:35:59:35:60 | access to local variable fs : FileStream | semmle.label | access to local variable fs : FileStream | -| SecondOrderSqlInjection.cs:38:29:38:31 | access to local variable sql : String | semmle.label | access to local variable sql : String | -| SecondOrderSqlInjection.cs:38:35:38:36 | access to local variable sr : StreamReader | semmle.label | access to local variable sr : StreamReader | -| SecondOrderSqlInjection.cs:38:35:38:47 | call to method ReadLine : String | semmle.label | call to method ReadLine : String | -| SecondOrderSqlInjection.cs:40:25:40:27 | access to local variable sql : String | semmle.label | access to local variable sql : String | -| SecondOrderSqlInjection.cs:40:31:40:33 | access to local variable sql : String | semmle.label | access to local variable sql : String | -| SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | semmle.label | call to method Trim : String | -| SecondOrderSqlInjection.cs:45:57:45:59 | access to local variable sql | semmle.label | access to local variable sql | -| SqlInjectionSqlite.cs:49:31:49:32 | access to local variable fs : FileStream | semmle.label | access to local variable fs : FileStream | -| SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | semmle.label | object creation of type FileStream : FileStream | -| SqlInjectionSqlite.cs:51:37:51:38 | access to local variable sr : StreamReader | semmle.label | access to local variable sr : StreamReader | -| SqlInjectionSqlite.cs:51:42:51:76 | object creation of type StreamReader : StreamReader | semmle.label | object creation of type StreamReader : StreamReader | -| SqlInjectionSqlite.cs:51:59:51:60 | access to local variable fs : FileStream | semmle.label | access to local variable fs : FileStream | -| SqlInjectionSqlite.cs:54:29:54:31 | access to local variable sql : String | semmle.label | access to local variable sql : String | -| SqlInjectionSqlite.cs:54:35:54:36 | access to local variable sr : StreamReader | semmle.label | access to local variable sr : StreamReader | -| SqlInjectionSqlite.cs:54:35:54:47 | call to method ReadLine : String | semmle.label | call to method ReadLine : String | -| SqlInjectionSqlite.cs:56:25:56:27 | access to local variable sql : String | semmle.label | access to local variable sql : String | -| SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | semmle.label | access to local variable sql : String | -| SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | semmle.label | call to method Trim : String | -| SqlInjectionSqlite.cs:61:53:61:55 | access to local variable sql | semmle.label | access to local variable sql | -subpaths -#select -| SecondOrderSqlInjection.cs:25:71:25:145 | ... + ... | SecondOrderSqlInjection.cs:25:119:25:145 | call to method GetString : String | SecondOrderSqlInjection.cs:25:71:25:145 | ... + ... | This SQL query depends on a $@. | SecondOrderSqlInjection.cs:25:119:25:145 | call to method GetString | stored user-provided value | -| SecondOrderSqlInjection.cs:45:57:45:59 | access to local variable sql | SecondOrderSqlInjection.cs:33:36:33:78 | object creation of type FileStream : FileStream | SecondOrderSqlInjection.cs:45:57:45:59 | access to local variable sql | This SQL query depends on a $@. | SecondOrderSqlInjection.cs:33:36:33:78 | object creation of type FileStream | stored user-provided value | -| SqlInjectionSqlite.cs:61:53:61:55 | access to local variable sql | SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | SqlInjectionSqlite.cs:61:53:61:55 | access to local variable sql | This SQL query depends on a $@. | SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream | stored user-provided value | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089/SecondOrderSqlInjection.qlref b/csharp/ql/test/query-tests/Security Features/CWE-089/SecondOrderSqlInjection.qlref deleted file mode 100644 index 265e6995985..00000000000 --- a/csharp/ql/test/query-tests/Security Features/CWE-089/SecondOrderSqlInjection.qlref +++ /dev/null @@ -1 +0,0 @@ -Security Features/CWE-089/SecondOrderSqlInjection.ql diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected index 4b4da20c97a..c156c3def8b 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected @@ -1,4 +1,16 @@ edges +| SecondOrderSqlInjection.cs:25:119:25:145 | call to method GetString : String | SecondOrderSqlInjection.cs:25:71:25:145 | ... + ... | provenance | | +| SecondOrderSqlInjection.cs:33:31:33:32 | access to local variable fs : FileStream | SecondOrderSqlInjection.cs:35:59:35:60 | access to local variable fs : FileStream | provenance | | +| SecondOrderSqlInjection.cs:33:36:33:78 | object creation of type FileStream : FileStream | SecondOrderSqlInjection.cs:33:31:33:32 | access to local variable fs : FileStream | provenance | | +| SecondOrderSqlInjection.cs:35:37:35:38 | access to local variable sr : StreamReader | SecondOrderSqlInjection.cs:38:35:38:36 | access to local variable sr : StreamReader | provenance | | +| SecondOrderSqlInjection.cs:35:42:35:76 | object creation of type StreamReader : StreamReader | SecondOrderSqlInjection.cs:35:37:35:38 | access to local variable sr : StreamReader | provenance | | +| SecondOrderSqlInjection.cs:35:59:35:60 | access to local variable fs : FileStream | SecondOrderSqlInjection.cs:35:42:35:76 | object creation of type StreamReader : StreamReader | provenance | | +| SecondOrderSqlInjection.cs:38:29:38:31 | access to local variable sql : String | SecondOrderSqlInjection.cs:40:31:40:33 | access to local variable sql : String | provenance | | +| SecondOrderSqlInjection.cs:38:35:38:36 | access to local variable sr : StreamReader | SecondOrderSqlInjection.cs:38:35:38:47 | call to method ReadLine : String | provenance | | +| SecondOrderSqlInjection.cs:38:35:38:47 | call to method ReadLine : String | SecondOrderSqlInjection.cs:38:29:38:31 | access to local variable sql : String | provenance | | +| SecondOrderSqlInjection.cs:40:25:40:27 | access to local variable sql : String | SecondOrderSqlInjection.cs:45:57:45:59 | access to local variable sql | provenance | | +| SecondOrderSqlInjection.cs:40:31:40:33 | access to local variable sql : String | SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | provenance | | +| SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | SecondOrderSqlInjection.cs:40:25:40:27 | access to local variable sql : String | provenance | | | SqlInjection.cs:32:21:32:26 | access to local variable query1 : String | SqlInjection.cs:34:50:34:55 | access to local variable query1 | provenance | | | SqlInjection.cs:33:21:33:35 | access to field categoryTextBox : TextBox | SqlInjection.cs:33:21:33:40 | access to property Text : String | provenance | | | SqlInjection.cs:33:21:33:40 | access to property Text : String | SqlInjection.cs:32:21:32:26 | access to local variable query1 : String | provenance | | @@ -50,6 +62,20 @@ edges | SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | provenance | | | SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | SqlInjectionSqlite.cs:56:25:56:27 | access to local variable sql : String | provenance | | nodes +| SecondOrderSqlInjection.cs:25:71:25:145 | ... + ... | semmle.label | ... + ... | +| SecondOrderSqlInjection.cs:25:119:25:145 | call to method GetString : String | semmle.label | call to method GetString : String | +| SecondOrderSqlInjection.cs:33:31:33:32 | access to local variable fs : FileStream | semmle.label | access to local variable fs : FileStream | +| SecondOrderSqlInjection.cs:33:36:33:78 | object creation of type FileStream : FileStream | semmle.label | object creation of type FileStream : FileStream | +| SecondOrderSqlInjection.cs:35:37:35:38 | access to local variable sr : StreamReader | semmle.label | access to local variable sr : StreamReader | +| SecondOrderSqlInjection.cs:35:42:35:76 | object creation of type StreamReader : StreamReader | semmle.label | object creation of type StreamReader : StreamReader | +| SecondOrderSqlInjection.cs:35:59:35:60 | access to local variable fs : FileStream | semmle.label | access to local variable fs : FileStream | +| SecondOrderSqlInjection.cs:38:29:38:31 | access to local variable sql : String | semmle.label | access to local variable sql : String | +| SecondOrderSqlInjection.cs:38:35:38:36 | access to local variable sr : StreamReader | semmle.label | access to local variable sr : StreamReader | +| SecondOrderSqlInjection.cs:38:35:38:47 | call to method ReadLine : String | semmle.label | call to method ReadLine : String | +| SecondOrderSqlInjection.cs:40:25:40:27 | access to local variable sql : String | semmle.label | access to local variable sql : String | +| SecondOrderSqlInjection.cs:40:31:40:33 | access to local variable sql : String | semmle.label | access to local variable sql : String | +| SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | semmle.label | call to method Trim : String | +| SecondOrderSqlInjection.cs:45:57:45:59 | access to local variable sql | semmle.label | access to local variable sql | | SqlInjection.cs:32:21:32:26 | access to local variable query1 : String | semmle.label | access to local variable query1 : String | | SqlInjection.cs:33:21:33:35 | access to field categoryTextBox : TextBox | semmle.label | access to field categoryTextBox : TextBox | | SqlInjection.cs:33:21:33:40 | access to property Text : String | semmle.label | access to property Text : String | @@ -118,6 +144,8 @@ nodes | SqlInjectionSqlite.cs:61:53:61:55 | access to local variable sql | semmle.label | access to local variable sql | subpaths #select +| SecondOrderSqlInjection.cs:25:71:25:145 | ... + ... | SecondOrderSqlInjection.cs:25:119:25:145 | call to method GetString : String | SecondOrderSqlInjection.cs:25:71:25:145 | ... + ... | This query depends on $@. | SecondOrderSqlInjection.cs:25:119:25:145 | call to method GetString : String | this database input | +| SecondOrderSqlInjection.cs:45:57:45:59 | access to local variable sql | SecondOrderSqlInjection.cs:33:36:33:78 | object creation of type FileStream : FileStream | SecondOrderSqlInjection.cs:45:57:45:59 | access to local variable sql | This query depends on $@. | SecondOrderSqlInjection.cs:33:36:33:78 | object creation of type FileStream : FileStream | this file stream | | SqlInjection.cs:34:50:34:55 | access to local variable query1 | SqlInjection.cs:33:21:33:35 | access to field categoryTextBox : TextBox | SqlInjection.cs:34:50:34:55 | access to local variable query1 | This query depends on $@. | SqlInjection.cs:33:21:33:35 | access to field categoryTextBox : TextBox | this ASP.NET user input | | SqlInjection.cs:69:56:69:61 | access to local variable query1 | SqlInjection.cs:68:33:68:47 | access to field categoryTextBox : TextBox | SqlInjection.cs:69:56:69:61 | access to local variable query1 | This query depends on $@. | SqlInjection.cs:68:33:68:47 | access to field categoryTextBox : TextBox | this ASP.NET user input | | SqlInjection.cs:70:55:70:60 | access to local variable query1 | SqlInjection.cs:68:33:68:47 | access to field categoryTextBox : TextBox | SqlInjection.cs:70:55:70:60 | access to local variable query1 | This query depends on $@. | SqlInjection.cs:68:33:68:47 | access to field categoryTextBox : TextBox | this ASP.NET user input | @@ -136,4 +164,5 @@ subpaths | SqlInjectionSqlite.cs:33:49:33:66 | access to property Text | SqlInjectionSqlite.cs:33:49:33:61 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:33:49:33:66 | access to property Text | This query depends on $@. | SqlInjectionSqlite.cs:33:49:33:61 | access to field untrustedData : TextBox | this ASP.NET user input | | SqlInjectionSqlite.cs:39:45:39:62 | access to property Text | SqlInjectionSqlite.cs:39:45:39:57 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:39:45:39:62 | access to property Text | This query depends on $@. | SqlInjectionSqlite.cs:39:45:39:57 | access to field untrustedData : TextBox | this ASP.NET user input | | SqlInjectionSqlite.cs:44:45:44:47 | access to local variable cmd | SqlInjectionSqlite.cs:24:41:24:53 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:44:45:44:47 | access to local variable cmd | This query depends on $@. | SqlInjectionSqlite.cs:24:41:24:53 | access to field untrustedData : TextBox | this ASP.NET user input | +| SqlInjectionSqlite.cs:61:53:61:55 | access to local variable sql | SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | SqlInjectionSqlite.cs:61:53:61:55 | access to local variable sql | This query depends on $@. | SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | this file stream | | SqlInjectionSqlite.cs:61:53:61:55 | access to local variable sql | SqlInjectionSqlite.cs:49:51:49:63 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:61:53:61:55 | access to local variable sql | This query depends on $@. | SqlInjectionSqlite.cs:49:51:49:63 | access to field untrustedData : TextBox | this ASP.NET user input | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.ext.yml b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.ext.yml new file mode 100644 index 00000000000..82f107ae1d7 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.ext.yml @@ -0,0 +1,7 @@ +extensions: + + - addsTo: + pack: codeql/threat-models + extensible: threatModelConfiguration + data: + - ["local", true, 0] \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.cs b/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.cs index 2f43a4d4c12..ddd24e19729 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.cs @@ -1,4 +1,5 @@ using System; +using System.Data.SqlClient; using System.DirectoryServices; using System.DirectoryServices.Protocols; using System.Web; @@ -27,6 +28,20 @@ public class LDAPInjectionHandler : IHttpHandler DirectoryEntry de = new DirectoryEntry("LDAP://Cn=" + userName); DirectoryEntry de2 = new DirectoryEntry(); de2.Path = "LDAP://Cn=" + userName; + + using (SqlConnection connection = new SqlConnection("")) + { + connection.Open(); + SqlCommand customerCommand = new SqlCommand("SELECT * FROM customers", connection); + SqlDataReader customerReader = customerCommand.ExecuteReader(); + + while (customerReader.Read()) + { + // BAD: Read from database, write it straight to a response + DirectorySearcher ds4 = new DirectorySearcher("accountname=" + customerReader.GetString(1)); + } + customerReader.Close(); + } } public string LDAPEncode(string value) diff --git a/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.expected index 59be23198dc..a04278ad994 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.expected @@ -1,28 +1,32 @@ edges -| LDAPInjection.cs:11:16:11:23 | access to local variable userName : String | LDAPInjection.cs:14:54:14:78 | ... + ... | provenance | | -| LDAPInjection.cs:11:16:11:23 | access to local variable userName : String | LDAPInjection.cs:16:21:16:45 | ... + ... | provenance | | -| LDAPInjection.cs:11:16:11:23 | access to local variable userName : String | LDAPInjection.cs:23:21:23:45 | ... + ... | provenance | | -| LDAPInjection.cs:11:16:11:23 | access to local variable userName : String | LDAPInjection.cs:24:53:24:77 | ... + ... | provenance | | -| LDAPInjection.cs:11:16:11:23 | access to local variable userName : String | LDAPInjection.cs:27:48:27:70 | ... + ... | provenance | | -| LDAPInjection.cs:11:16:11:23 | access to local variable userName : String | LDAPInjection.cs:29:20:29:42 | ... + ... | provenance | | -| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:11:16:11:23 | access to local variable userName : String | provenance | | -| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:11:27:11:61 | access to indexer : String | provenance | | -| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:11:16:11:23 | access to local variable userName : String | provenance | | +| LDAPInjection.cs:12:16:12:23 | access to local variable userName : String | LDAPInjection.cs:15:54:15:78 | ... + ... | provenance | | +| LDAPInjection.cs:12:16:12:23 | access to local variable userName : String | LDAPInjection.cs:17:21:17:45 | ... + ... | provenance | | +| LDAPInjection.cs:12:16:12:23 | access to local variable userName : String | LDAPInjection.cs:24:21:24:45 | ... + ... | provenance | | +| LDAPInjection.cs:12:16:12:23 | access to local variable userName : String | LDAPInjection.cs:25:53:25:77 | ... + ... | provenance | | +| LDAPInjection.cs:12:16:12:23 | access to local variable userName : String | LDAPInjection.cs:28:48:28:70 | ... + ... | provenance | | +| LDAPInjection.cs:12:16:12:23 | access to local variable userName : String | LDAPInjection.cs:30:20:30:42 | ... + ... | provenance | | +| LDAPInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:12:16:12:23 | access to local variable userName : String | provenance | | +| LDAPInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:12:27:12:61 | access to indexer : String | provenance | | +| LDAPInjection.cs:12:27:12:61 | access to indexer : String | LDAPInjection.cs:12:16:12:23 | access to local variable userName : String | provenance | | +| LDAPInjection.cs:41:80:41:106 | call to method GetString : String | LDAPInjection.cs:41:63:41:106 | ... + ... | provenance | | nodes -| LDAPInjection.cs:11:16:11:23 | access to local variable userName : String | semmle.label | access to local variable userName : String | -| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | -| LDAPInjection.cs:11:27:11:61 | access to indexer : String | semmle.label | access to indexer : String | -| LDAPInjection.cs:14:54:14:78 | ... + ... | semmle.label | ... + ... | -| LDAPInjection.cs:16:21:16:45 | ... + ... | semmle.label | ... + ... | -| LDAPInjection.cs:23:21:23:45 | ... + ... | semmle.label | ... + ... | -| LDAPInjection.cs:24:53:24:77 | ... + ... | semmle.label | ... + ... | -| LDAPInjection.cs:27:48:27:70 | ... + ... | semmle.label | ... + ... | -| LDAPInjection.cs:29:20:29:42 | ... + ... | semmle.label | ... + ... | +| LDAPInjection.cs:12:16:12:23 | access to local variable userName : String | semmle.label | access to local variable userName : String | +| LDAPInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| LDAPInjection.cs:12:27:12:61 | access to indexer : String | semmle.label | access to indexer : String | +| LDAPInjection.cs:15:54:15:78 | ... + ... | semmle.label | ... + ... | +| LDAPInjection.cs:17:21:17:45 | ... + ... | semmle.label | ... + ... | +| LDAPInjection.cs:24:21:24:45 | ... + ... | semmle.label | ... + ... | +| LDAPInjection.cs:25:53:25:77 | ... + ... | semmle.label | ... + ... | +| LDAPInjection.cs:28:48:28:70 | ... + ... | semmle.label | ... + ... | +| LDAPInjection.cs:30:20:30:42 | ... + ... | semmle.label | ... + ... | +| LDAPInjection.cs:41:63:41:106 | ... + ... | semmle.label | ... + ... | +| LDAPInjection.cs:41:80:41:106 | call to method GetString : String | semmle.label | call to method GetString : String | subpaths #select -| LDAPInjection.cs:14:54:14:78 | ... + ... | LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:14:54:14:78 | ... + ... | This LDAP query depends on a $@. | LDAPInjection.cs:11:27:11:49 | access to property QueryString | user-provided value | -| LDAPInjection.cs:16:21:16:45 | ... + ... | LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:16:21:16:45 | ... + ... | This LDAP query depends on a $@. | LDAPInjection.cs:11:27:11:49 | access to property QueryString | user-provided value | -| LDAPInjection.cs:23:21:23:45 | ... + ... | LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:23:21:23:45 | ... + ... | This LDAP query depends on a $@. | LDAPInjection.cs:11:27:11:49 | access to property QueryString | user-provided value | -| LDAPInjection.cs:24:53:24:77 | ... + ... | LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:24:53:24:77 | ... + ... | This LDAP query depends on a $@. | LDAPInjection.cs:11:27:11:49 | access to property QueryString | user-provided value | -| LDAPInjection.cs:27:48:27:70 | ... + ... | LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:27:48:27:70 | ... + ... | This LDAP query depends on a $@. | LDAPInjection.cs:11:27:11:49 | access to property QueryString | user-provided value | -| LDAPInjection.cs:29:20:29:42 | ... + ... | LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:29:20:29:42 | ... + ... | This LDAP query depends on a $@. | LDAPInjection.cs:11:27:11:49 | access to property QueryString | user-provided value | +| LDAPInjection.cs:15:54:15:78 | ... + ... | LDAPInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:15:54:15:78 | ... + ... | This LDAP query depends on a $@. | LDAPInjection.cs:12:27:12:49 | access to property QueryString | user-provided value | +| LDAPInjection.cs:17:21:17:45 | ... + ... | LDAPInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:17:21:17:45 | ... + ... | This LDAP query depends on a $@. | LDAPInjection.cs:12:27:12:49 | access to property QueryString | user-provided value | +| LDAPInjection.cs:24:21:24:45 | ... + ... | LDAPInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:24:21:24:45 | ... + ... | This LDAP query depends on a $@. | LDAPInjection.cs:12:27:12:49 | access to property QueryString | user-provided value | +| LDAPInjection.cs:25:53:25:77 | ... + ... | LDAPInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:25:53:25:77 | ... + ... | This LDAP query depends on a $@. | LDAPInjection.cs:12:27:12:49 | access to property QueryString | user-provided value | +| LDAPInjection.cs:28:48:28:70 | ... + ... | LDAPInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:28:48:28:70 | ... + ... | This LDAP query depends on a $@. | LDAPInjection.cs:12:27:12:49 | access to property QueryString | user-provided value | +| LDAPInjection.cs:30:20:30:42 | ... + ... | LDAPInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:30:20:30:42 | ... + ... | This LDAP query depends on a $@. | LDAPInjection.cs:12:27:12:49 | access to property QueryString | user-provided value | +| LDAPInjection.cs:41:63:41:106 | ... + ... | LDAPInjection.cs:41:80:41:106 | call to method GetString : String | LDAPInjection.cs:41:63:41:106 | ... + ... | This LDAP query depends on a $@. | LDAPInjection.cs:41:80:41:106 | call to method GetString | user-provided value | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.ext.yml b/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.ext.yml new file mode 100644 index 00000000000..82f107ae1d7 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.ext.yml @@ -0,0 +1,7 @@ +extensions: + + - addsTo: + pack: codeql/threat-models + extensible: threatModelConfiguration + data: + - ["local", true, 0] \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-090/StoredLDAPInjection.cs b/csharp/ql/test/query-tests/Security Features/CWE-090/StoredLDAPInjection.cs deleted file mode 100644 index 975d1cb86f2..00000000000 --- a/csharp/ql/test/query-tests/Security Features/CWE-090/StoredLDAPInjection.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Data.SqlClient; -using System.DirectoryServices; - -namespace Test -{ - - class StoredLDAPInjection - { - - public void processRequest() - { - using (SqlConnection connection = new SqlConnection("")) - { - connection.Open(); - SqlCommand customerCommand = new SqlCommand("SELECT * FROM customers", connection); - SqlDataReader customerReader = customerCommand.ExecuteReader(); - - while (customerReader.Read()) - { - // BAD: Read from database, write it straight to a response - DirectorySearcher ds = new DirectorySearcher("accountname=" + customerReader.GetString(1)); - } - customerReader.Close(); - } - } - } -} diff --git a/csharp/ql/test/query-tests/Security Features/CWE-090/StoredLDAPInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-090/StoredLDAPInjection.expected deleted file mode 100644 index d66714c82cc..00000000000 --- a/csharp/ql/test/query-tests/Security Features/CWE-090/StoredLDAPInjection.expected +++ /dev/null @@ -1,8 +0,0 @@ -edges -| StoredLDAPInjection.cs:22:83:22:109 | call to method GetString : String | StoredLDAPInjection.cs:22:66:22:109 | ... + ... | provenance | | -nodes -| StoredLDAPInjection.cs:22:66:22:109 | ... + ... | semmle.label | ... + ... | -| StoredLDAPInjection.cs:22:83:22:109 | call to method GetString : String | semmle.label | call to method GetString : String | -subpaths -#select -| StoredLDAPInjection.cs:22:66:22:109 | ... + ... | StoredLDAPInjection.cs:22:83:22:109 | call to method GetString : String | StoredLDAPInjection.cs:22:66:22:109 | ... + ... | This LDAP query depends on a $@. | StoredLDAPInjection.cs:22:83:22:109 | call to method GetString | stored (potentially user-provided) value | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-090/StoredLDAPInjection.qlref b/csharp/ql/test/query-tests/Security Features/CWE-090/StoredLDAPInjection.qlref deleted file mode 100644 index 0f41e1b15c9..00000000000 --- a/csharp/ql/test/query-tests/Security Features/CWE-090/StoredLDAPInjection.qlref +++ /dev/null @@ -1 +0,0 @@ -Security Features/CWE-090/StoredLDAPInjection.ql diff --git a/csharp/ql/test/query-tests/Security Features/CWE-094/CodeInjection.ext.yml b/csharp/ql/test/query-tests/Security Features/CWE-094/CodeInjection.ext.yml new file mode 100644 index 00000000000..82f107ae1d7 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-094/CodeInjection.ext.yml @@ -0,0 +1,7 @@ +extensions: + + - addsTo: + pack: codeql/threat-models + extensible: threatModelConfiguration + data: + - ["local", true, 0] \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-134/UncontrolledFormatString.ext.yml b/csharp/ql/test/query-tests/Security Features/CWE-134/UncontrolledFormatString.ext.yml new file mode 100644 index 00000000000..82f107ae1d7 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-134/UncontrolledFormatString.ext.yml @@ -0,0 +1,7 @@ +extensions: + + - addsTo: + pack: codeql/threat-models + extensible: threatModelConfiguration + data: + - ["local", true, 0] \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-643/StoredXPathInjection.cs b/csharp/ql/test/query-tests/Security Features/CWE-643/StoredXPathInjection.cs deleted file mode 100644 index 91b8291b5cf..00000000000 --- a/csharp/ql/test/query-tests/Security Features/CWE-643/StoredXPathInjection.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Data.SqlClient; -using System.Xml; -using System.Xml.XPath; - -namespace Test -{ - - class StoredXPathInjection - { - - public void processRequest() - { - using (SqlConnection connection = new SqlConnection("")) - { - connection.Open(); - SqlCommand customerCommand = new SqlCommand("SELECT * FROM customers", connection); - SqlDataReader customerReader = customerCommand.ExecuteReader(); - - while (customerReader.Read()) - { - string userName = customerReader.GetString(1); - string password = customerReader.GetString(2); - // BAD: User input used directly in an XPath expression - XPathExpression.Compile("//users/user[login/text()='" + userName + "' and password/text() = '" + password + "']/home_dir/text()"); - XmlNode xmlNode = null; - // BAD: User input used directly in an XPath expression to SelectNodes - xmlNode.SelectNodes("//users/user[login/text()='" + userName + "' and password/text() = '" + password + "']/home_dir/text()"); - - // GOOD: Uses parameters to avoid including user input directly in XPath expression - XPathExpression.Compile("//users/user[login/text()=$username]/home_dir/text()"); - } - customerReader.Close(); - } - } - } -} diff --git a/csharp/ql/test/query-tests/Security Features/CWE-643/StoredXPathInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-643/StoredXPathInjection.expected deleted file mode 100644 index 0b963f38d7b..00000000000 --- a/csharp/ql/test/query-tests/Security Features/CWE-643/StoredXPathInjection.expected +++ /dev/null @@ -1,20 +0,0 @@ -edges -| StoredXPathInjection.cs:22:28:22:35 | access to local variable userName : String | StoredXPathInjection.cs:25:45:25:148 | ... + ... | provenance | | -| StoredXPathInjection.cs:22:28:22:35 | access to local variable userName : String | StoredXPathInjection.cs:28:41:28:144 | ... + ... | provenance | | -| StoredXPathInjection.cs:22:39:22:65 | call to method GetString : String | StoredXPathInjection.cs:22:28:22:35 | access to local variable userName : String | provenance | | -| StoredXPathInjection.cs:23:28:23:35 | access to local variable password : String | StoredXPathInjection.cs:25:45:25:148 | ... + ... | provenance | | -| StoredXPathInjection.cs:23:28:23:35 | access to local variable password : String | StoredXPathInjection.cs:28:41:28:144 | ... + ... | provenance | | -| StoredXPathInjection.cs:23:39:23:65 | call to method GetString : String | StoredXPathInjection.cs:23:28:23:35 | access to local variable password : String | provenance | | -nodes -| StoredXPathInjection.cs:22:28:22:35 | access to local variable userName : String | semmle.label | access to local variable userName : String | -| StoredXPathInjection.cs:22:39:22:65 | call to method GetString : String | semmle.label | call to method GetString : String | -| StoredXPathInjection.cs:23:28:23:35 | access to local variable password : String | semmle.label | access to local variable password : String | -| StoredXPathInjection.cs:23:39:23:65 | call to method GetString : String | semmle.label | call to method GetString : String | -| StoredXPathInjection.cs:25:45:25:148 | ... + ... | semmle.label | ... + ... | -| StoredXPathInjection.cs:28:41:28:144 | ... + ... | semmle.label | ... + ... | -subpaths -#select -| StoredXPathInjection.cs:25:45:25:148 | ... + ... | StoredXPathInjection.cs:22:39:22:65 | call to method GetString : String | StoredXPathInjection.cs:25:45:25:148 | ... + ... | This XPath expression depends on a $@. | StoredXPathInjection.cs:22:39:22:65 | call to method GetString | stored (potentially user-provided) value | -| StoredXPathInjection.cs:25:45:25:148 | ... + ... | StoredXPathInjection.cs:23:39:23:65 | call to method GetString : String | StoredXPathInjection.cs:25:45:25:148 | ... + ... | This XPath expression depends on a $@. | StoredXPathInjection.cs:23:39:23:65 | call to method GetString | stored (potentially user-provided) value | -| StoredXPathInjection.cs:28:41:28:144 | ... + ... | StoredXPathInjection.cs:22:39:22:65 | call to method GetString : String | StoredXPathInjection.cs:28:41:28:144 | ... + ... | This XPath expression depends on a $@. | StoredXPathInjection.cs:22:39:22:65 | call to method GetString | stored (potentially user-provided) value | -| StoredXPathInjection.cs:28:41:28:144 | ... + ... | StoredXPathInjection.cs:23:39:23:65 | call to method GetString : String | StoredXPathInjection.cs:28:41:28:144 | ... + ... | This XPath expression depends on a $@. | StoredXPathInjection.cs:23:39:23:65 | call to method GetString | stored (potentially user-provided) value | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-643/StoredXPathInjection.qlref b/csharp/ql/test/query-tests/Security Features/CWE-643/StoredXPathInjection.qlref deleted file mode 100644 index 91ffd2d2074..00000000000 --- a/csharp/ql/test/query-tests/Security Features/CWE-643/StoredXPathInjection.qlref +++ /dev/null @@ -1 +0,0 @@ -Security Features/CWE-643/StoredXPathInjection.ql \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.cs b/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.cs index 53cdbb73cc1..a42a629cc7e 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.cs @@ -1,4 +1,5 @@ using System; +using System.Data.SqlClient; using System.Web; using System.Xml; using System.Xml.XPath; @@ -62,4 +63,30 @@ public class XPathInjectionHandler : IHttpHandler return true; } } + + public void ProcessStoredRequest() + { + + using (SqlConnection connection = new SqlConnection("")) + { + connection.Open(); + SqlCommand customerCommand = new SqlCommand("SELECT * FROM customers", connection); + SqlDataReader customerReader = customerCommand.ExecuteReader(); + + while (customerReader.Read()) + { + string userName = customerReader.GetString(1); + string password = customerReader.GetString(2); + // BAD: User input used directly in an XPath expression + XPathExpression.Compile("//users/user[login/text()='" + userName + "' and password/text() = '" + password + "']/home_dir/text()"); + XmlNode xmlNode = null; + // BAD: User input used directly in an XPath expression to SelectNodes + xmlNode.SelectNodes("//users/user[login/text()='" + userName + "' and password/text() = '" + password + "']/home_dir/text()"); + + // GOOD: Uses parameters to avoid including user input directly in XPath expression + XPathExpression.Compile("//users/user[login/text()=$username]/home_dir/text()"); + } + customerReader.Close(); + } + } } diff --git a/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.expected index f722ab15f6b..f957dc1e6a0 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.expected @@ -1,47 +1,63 @@ edges -| XPathInjection.cs:10:16:10:23 | access to local variable userName : String | XPathInjection.cs:13:13:13:13 | access to local variable s : String | provenance | | -| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:10:16:10:23 | access to local variable userName : String | provenance | | -| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:10:27:10:61 | access to indexer : String | provenance | | -| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:10:16:10:23 | access to local variable userName : String | provenance | | -| XPathInjection.cs:11:16:11:23 | access to local variable password : String | XPathInjection.cs:13:13:13:13 | access to local variable s : String | provenance | | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:11:16:11:23 | access to local variable password : String | provenance | | +| XPathInjection.cs:11:16:11:23 | access to local variable userName : String | XPathInjection.cs:14:13:14:13 | access to local variable s : String | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:11:16:11:23 | access to local variable userName : String | provenance | | | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:11:27:11:61 | access to indexer : String | provenance | | -| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:11:16:11:23 | access to local variable password : String | provenance | | -| XPathInjection.cs:13:13:13:13 | access to local variable s : String | XPathInjection.cs:16:33:16:33 | access to local variable s | provenance | | -| XPathInjection.cs:13:13:13:13 | access to local variable s : String | XPathInjection.cs:19:29:19:29 | access to local variable s | provenance | | -| XPathInjection.cs:13:13:13:13 | access to local variable s : String | XPathInjection.cs:28:20:28:20 | access to local variable s | provenance | | -| XPathInjection.cs:13:13:13:13 | access to local variable s : String | XPathInjection.cs:34:30:34:30 | access to local variable s | provenance | | -| XPathInjection.cs:13:13:13:13 | access to local variable s : String | XPathInjection.cs:40:21:40:21 | access to local variable s | provenance | | -| XPathInjection.cs:13:13:13:13 | access to local variable s : String | XPathInjection.cs:46:22:46:22 | access to local variable s | provenance | | -| XPathInjection.cs:13:13:13:13 | access to local variable s : String | XPathInjection.cs:52:21:52:21 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:11:16:11:23 | access to local variable userName : String | provenance | | +| XPathInjection.cs:12:16:12:23 | access to local variable password : String | XPathInjection.cs:14:13:14:13 | access to local variable s : String | provenance | | +| XPathInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:12:16:12:23 | access to local variable password : String | provenance | | +| XPathInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:12:27:12:61 | access to indexer : String | provenance | | +| XPathInjection.cs:12:27:12:61 | access to indexer : String | XPathInjection.cs:12:16:12:23 | access to local variable password : String | provenance | | +| XPathInjection.cs:14:13:14:13 | access to local variable s : String | XPathInjection.cs:17:33:17:33 | access to local variable s | provenance | | +| XPathInjection.cs:14:13:14:13 | access to local variable s : String | XPathInjection.cs:20:29:20:29 | access to local variable s | provenance | | +| XPathInjection.cs:14:13:14:13 | access to local variable s : String | XPathInjection.cs:29:20:29:20 | access to local variable s | provenance | | +| XPathInjection.cs:14:13:14:13 | access to local variable s : String | XPathInjection.cs:35:30:35:30 | access to local variable s | provenance | | +| XPathInjection.cs:14:13:14:13 | access to local variable s : String | XPathInjection.cs:41:21:41:21 | access to local variable s | provenance | | +| XPathInjection.cs:14:13:14:13 | access to local variable s : String | XPathInjection.cs:47:22:47:22 | access to local variable s | provenance | | +| XPathInjection.cs:14:13:14:13 | access to local variable s : String | XPathInjection.cs:53:21:53:21 | access to local variable s | provenance | | +| XPathInjection.cs:78:24:78:31 | access to local variable userName : String | XPathInjection.cs:81:41:81:144 | ... + ... | provenance | | +| XPathInjection.cs:78:24:78:31 | access to local variable userName : String | XPathInjection.cs:84:37:84:140 | ... + ... | provenance | | +| XPathInjection.cs:78:35:78:61 | call to method GetString : String | XPathInjection.cs:78:24:78:31 | access to local variable userName : String | provenance | | +| XPathInjection.cs:79:24:79:31 | access to local variable password : String | XPathInjection.cs:81:41:81:144 | ... + ... | provenance | | +| XPathInjection.cs:79:24:79:31 | access to local variable password : String | XPathInjection.cs:84:37:84:140 | ... + ... | provenance | | +| XPathInjection.cs:79:35:79:61 | call to method GetString : String | XPathInjection.cs:79:24:79:31 | access to local variable password : String | provenance | | nodes -| XPathInjection.cs:10:16:10:23 | access to local variable userName : String | semmle.label | access to local variable userName : String | -| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | -| XPathInjection.cs:10:27:10:61 | access to indexer : String | semmle.label | access to indexer : String | -| XPathInjection.cs:11:16:11:23 | access to local variable password : String | semmle.label | access to local variable password : String | +| XPathInjection.cs:11:16:11:23 | access to local variable userName : String | semmle.label | access to local variable userName : String | | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | XPathInjection.cs:11:27:11:61 | access to indexer : String | semmle.label | access to indexer : String | -| XPathInjection.cs:13:13:13:13 | access to local variable s : String | semmle.label | access to local variable s : String | -| XPathInjection.cs:16:33:16:33 | access to local variable s | semmle.label | access to local variable s | -| XPathInjection.cs:19:29:19:29 | access to local variable s | semmle.label | access to local variable s | -| XPathInjection.cs:28:20:28:20 | access to local variable s | semmle.label | access to local variable s | -| XPathInjection.cs:34:30:34:30 | access to local variable s | semmle.label | access to local variable s | -| XPathInjection.cs:40:21:40:21 | access to local variable s | semmle.label | access to local variable s | -| XPathInjection.cs:46:22:46:22 | access to local variable s | semmle.label | access to local variable s | -| XPathInjection.cs:52:21:52:21 | access to local variable s | semmle.label | access to local variable s | +| XPathInjection.cs:12:16:12:23 | access to local variable password : String | semmle.label | access to local variable password : String | +| XPathInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| XPathInjection.cs:12:27:12:61 | access to indexer : String | semmle.label | access to indexer : String | +| XPathInjection.cs:14:13:14:13 | access to local variable s : String | semmle.label | access to local variable s : String | +| XPathInjection.cs:17:33:17:33 | access to local variable s | semmle.label | access to local variable s | +| XPathInjection.cs:20:29:20:29 | access to local variable s | semmle.label | access to local variable s | +| XPathInjection.cs:29:20:29:20 | access to local variable s | semmle.label | access to local variable s | +| XPathInjection.cs:35:30:35:30 | access to local variable s | semmle.label | access to local variable s | +| XPathInjection.cs:41:21:41:21 | access to local variable s | semmle.label | access to local variable s | +| XPathInjection.cs:47:22:47:22 | access to local variable s | semmle.label | access to local variable s | +| XPathInjection.cs:53:21:53:21 | access to local variable s | semmle.label | access to local variable s | +| XPathInjection.cs:78:24:78:31 | access to local variable userName : String | semmle.label | access to local variable userName : String | +| XPathInjection.cs:78:35:78:61 | call to method GetString : String | semmle.label | call to method GetString : String | +| XPathInjection.cs:79:24:79:31 | access to local variable password : String | semmle.label | access to local variable password : String | +| XPathInjection.cs:79:35:79:61 | call to method GetString : String | semmle.label | call to method GetString : String | +| XPathInjection.cs:81:41:81:144 | ... + ... | semmle.label | ... + ... | +| XPathInjection.cs:84:37:84:140 | ... + ... | semmle.label | ... + ... | subpaths #select -| XPathInjection.cs:16:33:16:33 | access to local variable s | XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:16:33:16:33 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:10:27:10:49 | access to property QueryString | user-provided value | -| XPathInjection.cs:16:33:16:33 | access to local variable s | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:16:33:16:33 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:11:27:11:49 | access to property QueryString | user-provided value | -| XPathInjection.cs:19:29:19:29 | access to local variable s | XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:19:29:19:29 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:10:27:10:49 | access to property QueryString | user-provided value | -| XPathInjection.cs:19:29:19:29 | access to local variable s | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:19:29:19:29 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:11:27:11:49 | access to property QueryString | user-provided value | -| XPathInjection.cs:28:20:28:20 | access to local variable s | XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:28:20:28:20 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:10:27:10:49 | access to property QueryString | user-provided value | -| XPathInjection.cs:28:20:28:20 | access to local variable s | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:28:20:28:20 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:11:27:11:49 | access to property QueryString | user-provided value | -| XPathInjection.cs:34:30:34:30 | access to local variable s | XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:34:30:34:30 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:10:27:10:49 | access to property QueryString | user-provided value | -| XPathInjection.cs:34:30:34:30 | access to local variable s | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:34:30:34:30 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:11:27:11:49 | access to property QueryString | user-provided value | -| XPathInjection.cs:40:21:40:21 | access to local variable s | XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:40:21:40:21 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:10:27:10:49 | access to property QueryString | user-provided value | -| XPathInjection.cs:40:21:40:21 | access to local variable s | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:40:21:40:21 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:11:27:11:49 | access to property QueryString | user-provided value | -| XPathInjection.cs:46:22:46:22 | access to local variable s | XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:46:22:46:22 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:10:27:10:49 | access to property QueryString | user-provided value | -| XPathInjection.cs:46:22:46:22 | access to local variable s | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:46:22:46:22 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:11:27:11:49 | access to property QueryString | user-provided value | -| XPathInjection.cs:52:21:52:21 | access to local variable s | XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:52:21:52:21 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:10:27:10:49 | access to property QueryString | user-provided value | -| XPathInjection.cs:52:21:52:21 | access to local variable s | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:52:21:52:21 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:11:27:11:49 | access to property QueryString | user-provided value | +| XPathInjection.cs:17:33:17:33 | access to local variable s | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:17:33:17:33 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:11:27:11:49 | access to property QueryString | user-provided value | +| XPathInjection.cs:17:33:17:33 | access to local variable s | XPathInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:17:33:17:33 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:12:27:12:49 | access to property QueryString | user-provided value | +| XPathInjection.cs:20:29:20:29 | access to local variable s | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:20:29:20:29 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:11:27:11:49 | access to property QueryString | user-provided value | +| XPathInjection.cs:20:29:20:29 | access to local variable s | XPathInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:20:29:20:29 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:12:27:12:49 | access to property QueryString | user-provided value | +| XPathInjection.cs:29:20:29:20 | access to local variable s | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:29:20:29:20 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:11:27:11:49 | access to property QueryString | user-provided value | +| XPathInjection.cs:29:20:29:20 | access to local variable s | XPathInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:29:20:29:20 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:12:27:12:49 | access to property QueryString | user-provided value | +| XPathInjection.cs:35:30:35:30 | access to local variable s | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:35:30:35:30 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:11:27:11:49 | access to property QueryString | user-provided value | +| XPathInjection.cs:35:30:35:30 | access to local variable s | XPathInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:35:30:35:30 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:12:27:12:49 | access to property QueryString | user-provided value | +| XPathInjection.cs:41:21:41:21 | access to local variable s | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:41:21:41:21 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:11:27:11:49 | access to property QueryString | user-provided value | +| XPathInjection.cs:41:21:41:21 | access to local variable s | XPathInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:41:21:41:21 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:12:27:12:49 | access to property QueryString | user-provided value | +| XPathInjection.cs:47:22:47:22 | access to local variable s | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:47:22:47:22 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:11:27:11:49 | access to property QueryString | user-provided value | +| XPathInjection.cs:47:22:47:22 | access to local variable s | XPathInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:47:22:47:22 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:12:27:12:49 | access to property QueryString | user-provided value | +| XPathInjection.cs:53:21:53:21 | access to local variable s | XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:53:21:53:21 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:11:27:11:49 | access to property QueryString | user-provided value | +| XPathInjection.cs:53:21:53:21 | access to local variable s | XPathInjection.cs:12:27:12:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:53:21:53:21 | access to local variable s | This XPath expression depends on a $@. | XPathInjection.cs:12:27:12:49 | access to property QueryString | user-provided value | +| XPathInjection.cs:81:41:81:144 | ... + ... | XPathInjection.cs:78:35:78:61 | call to method GetString : String | XPathInjection.cs:81:41:81:144 | ... + ... | This XPath expression depends on a $@. | XPathInjection.cs:78:35:78:61 | call to method GetString | user-provided value | +| XPathInjection.cs:81:41:81:144 | ... + ... | XPathInjection.cs:79:35:79:61 | call to method GetString : String | XPathInjection.cs:81:41:81:144 | ... + ... | This XPath expression depends on a $@. | XPathInjection.cs:79:35:79:61 | call to method GetString | user-provided value | +| XPathInjection.cs:84:37:84:140 | ... + ... | XPathInjection.cs:78:35:78:61 | call to method GetString : String | XPathInjection.cs:84:37:84:140 | ... + ... | This XPath expression depends on a $@. | XPathInjection.cs:78:35:78:61 | call to method GetString | user-provided value | +| XPathInjection.cs:84:37:84:140 | ... + ... | XPathInjection.cs:79:35:79:61 | call to method GetString : String | XPathInjection.cs:84:37:84:140 | ... + ... | This XPath expression depends on a $@. | XPathInjection.cs:79:35:79:61 | call to method GetString | user-provided value | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.ext.yml b/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.ext.yml new file mode 100644 index 00000000000..82f107ae1d7 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.ext.yml @@ -0,0 +1,7 @@ +extensions: + + - addsTo: + pack: codeql/threat-models + extensible: threatModelConfiguration + data: + - ["local", true, 0] \ No newline at end of file diff --git a/csharp/tools/tracing-config.lua b/csharp/tools/tracing-config.lua index 55f803c5adb..5fc1cc8e80e 100644 --- a/csharp/tools/tracing-config.lua +++ b/csharp/tools/tracing-config.lua @@ -23,6 +23,10 @@ function RegisterExtractorPack(id) not isDotnetPath(arg) end + local function isPathToExecutable(path) + return path:match('%.exe$') or path:match('%.dll') + end + function DotnetMatcherBuild(compilerName, compilerPath, compilerArguments, _languageId) if not isDotnet(compilerName) then @@ -56,8 +60,16 @@ function RegisterExtractorPack(id) NativeArgumentsToArgv(compilerArguments.nativeArgumentPointer) end for i, arg in ipairs(argv) do + -- if dotnet is being used to execute any application except dotnet itself, we should + -- not inject any flags. + if not match and isPathToExecutable(arg) and not isDotnetPath(arg) then + Log(1, 'Execute a .NET application usage detected') + Log(1, 'Dotnet path-to-application detected: %s', arg) + break + end if isPossibleDotnetSubcommand(arg) then - if (not match) and inSubCommandPosition then + if not match and inSubCommandPosition then + Log(1, 'Execute a .NET SDK command usage detected') Log(1, 'Dotnet subcommand detected: %s', arg) end -- only respond to strings that look like sub-command names if we have not yet @@ -85,7 +97,7 @@ function RegisterExtractorPack(id) end -- for `dotnet test`, we should not append `-p:UseSharedCompilation=false` to the command line -- if an `exe` or `dll` is passed as an argument as the call is forwarded to vstest. - if testMatch and (arg:match('%.exe$') or arg:match('%.dll')) then + if testMatch and isPathToExecutable(arg) then match = false break end diff --git a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-java.rst b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-java.rst index 028e1317814..3a9b84cfcc3 100644 --- a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-java.rst +++ b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-java.rst @@ -27,7 +27,13 @@ Local data flow is data flow within a single method or callable. Local data flow Using local data flow ~~~~~~~~~~~~~~~~~~~~~ -The local data flow library is in the module ``DataFlow``, which defines the class ``Node`` denoting any element that data can flow through. ``Node``\ s are divided into expression nodes (``ExprNode``) and parameter nodes (``ParameterNode``). You can map between data flow nodes and expressions/parameters using the member predicates ``asExpr`` and ``asParameter``: +To use the data flow library you need the following import: + +.. code-block:: ql + + import semmle.code.java.dataflow.DataFlow + +The ``DataFlow`` module defines the class ``Node`` denoting any element that data can flow through. ``Node``\ s are divided into expression nodes (``ExprNode``) and parameter nodes (``ParameterNode``). You can map between data flow nodes and expressions/parameters using the member predicates ``asExpr`` and ``asParameter``: .. code-block:: ql @@ -75,7 +81,14 @@ Local taint tracking extends local data flow by including non-value-preserving f If ``x`` is a tainted string then ``y`` is also tainted. -The local taint tracking library is in the module ``TaintTracking``. Like local data flow, a predicate ``localTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo)`` holds if there is an immediate taint propagation edge from the node ``nodeFrom`` to the node ``nodeTo``. You can apply the predicate recursively by using the ``+`` and ``*`` operators, or by using the predefined recursive predicate ``localTaint``, which is equivalent to ``localTaintStep*``. + +To use the taint tracking library you need the following import: + +.. code-block:: ql + + import semmle.code.java.dataflow.TaintTracking + +Like local data flow, a predicate ``localTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo)`` holds if there is an immediate taint propagation edge from the node ``nodeFrom`` to the node ``nodeTo``. You can apply the predicate recursively by using the ``+`` and ``*`` operators, or by using the predefined recursive predicate ``localTaint``, which is equivalent to ``localTaintStep*``. For example, you can find taint propagation from a parameter ``source`` to an expression ``sink`` in zero or more local steps: diff --git a/docs/codeql/codeql-language-guides/customizing-library-models-for-csharp.rst b/docs/codeql/codeql-language-guides/customizing-library-models-for-csharp.rst index 165ce7b623e..09dcf36fc07 100644 --- a/docs/codeql/codeql-language-guides/customizing-library-models-for-csharp.rst +++ b/docs/codeql/codeql-language-guides/customizing-library-models-for-csharp.rst @@ -55,7 +55,7 @@ Extensible predicates used to create custom models in C# The CodeQL library for C# analysis exposes the following extensible predicates: -- ``sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, provenance)``. This is used to model sources of potentially tainted data. +- ``sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, provenance)``. This is used to model sources of potentially tainted data. The ``kind`` of the sources defined using this predicate determine which threat model they are associated with. Different threat models can be used to customize the sources used in an analysis. For more information, see ":ref:`Threat models <threat-models-csharp>`." - ``sinkModel(namespace, type, subtypes, name, signature, ext, input, kind, provenance)``. This is used to model sinks where tainted data may be used in a way that makes the code vulnerable. - ``summaryModel(namespace, type, subtypes, name, signature, ext, input, output, kind, provenance)``. This is used to model flow through elements. - ``neutralModel(namespace, type, name, signature, kind, provenance)``. This is similar to a summary model but used to model the flow of values that have only a minor impact on the dataflow analysis. Manual neutral models (those with a provenance such as ``manual`` or ``ai-manual``) can be used to override generated summary models (those with a provenance such as ``df-generated``), so that the summary model will be ignored. Other than that, neutral models have no effect. @@ -144,7 +144,7 @@ The sixth value should be left empty and is out of scope for this documentation. The remaining values are used to define the ``access path``, the ``kind``, and the ``provenance`` (origin) of the source. - The seventh value ``ReturnValue`` is the access path to the return of the method, which means that it is the return value that should be considered a source of tainted input. -- The eighth value ``remote`` is the kind of the source. The source kind is used to define the threat model where the source is in scope. ``remote`` applies to many of the security related queries as it means a remote source of untrusted data. As an example the SQL injection query uses ``remote`` sources. +- The eighth value ``remote`` is the kind of the source. The source kind is used to define the threat model where the source is in scope. ``remote`` applies to many of the security related queries as it means a remote source of untrusted data. As an example the SQL injection query uses ``remote`` sources. For more information, see ":ref:`Threat models <threat-models-csharp>`." - The ninth value ``manual`` is the provenance of the source, which is used to identify the origin of the source. Example: Add flow through the ``Concat`` method @@ -340,3 +340,19 @@ The first four values identify the callable (in this case the getter of the ``No - The fourth value ``()`` is the method input type signature. - The fifth value ``summary`` is the kind of the neutral. - The sixth value ``manual`` is the provenance of the neutral. + +.. _threat-models-csharp: + +Threat models +------------- + +.. include:: ../reusables/beta-note-threat-models.rst + +A threat model is a named class of dataflow sources that can be enabled or disabled independently. Threat models allow you to control the set of dataflow sources that you want to consider unsafe. For example, one codebase may only consider remote HTTP requests to be tainted, whereas another may also consider data from local files to be unsafe. You can use threat models to ensure that the relevant taint sources are used in a CodeQL analysis. + +The ``kind`` property of ``sourceModel`` determines which threat model a source is associated with. There are two main categories: + +- ``remote`` which represents requests and responses from the network. +- ``local`` which represents data from local files (``file``), command-line arguments (``commandargs``), database reads (``database``), and environment variables(``environment``). + +When running a CodeQL analysis, the ``remote`` threat model is included by default. You can optionally include other threat models as appropriate when using the CodeQL CLI and in GitHub code scanning. For more information, see `Analyzing your code with CodeQL queries <https://docs.github.com/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries#including-model-packs-to-add-potential-sources-of-tainted-data>`__ and `Customizing your advanced setup for code scanning <https://docs.github.com/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#extending-codeql-coverage-with-threat-models>`__. diff --git a/docs/codeql/codeql-language-guides/customizing-library-models-for-java-and-kotlin.rst b/docs/codeql/codeql-language-guides/customizing-library-models-for-java-and-kotlin.rst index 7ccb12c3060..e8b69e20d81 100644 --- a/docs/codeql/codeql-language-guides/customizing-library-models-for-java-and-kotlin.rst +++ b/docs/codeql/codeql-language-guides/customizing-library-models-for-java-and-kotlin.rst @@ -297,7 +297,7 @@ The first four values identify the callable (in this case a method) to be modele Threat models ------------- -.. include:: ../reusables/beta-note-threat-models-java.rst +.. include:: ../reusables/beta-note-threat-models.rst A threat model is a named class of dataflow sources that can be enabled or disabled independently. Threat models allow you to control the set of dataflow sources that you want to consider unsafe. For example, one codebase may only consider remote HTTP requests to be tainted, whereas another may also consider data from local files to be unsafe. You can use threat models to ensure that the relevant taint sources are used in a CodeQL analysis. diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.3.rst new file mode 100644 index 00000000000..af699a301c4 --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.3.rst @@ -0,0 +1,194 @@ +.. _codeql-cli-2.16.3: + +========================== +CodeQL 2.16.3 (2024-02-22) +========================== + +.. contents:: Contents + :depth: 2 + :local: + :backlinks: none + +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog <https://github.blog/tag/code-scanning/>`__, `relevant GitHub Changelog updates <https://github.blog/changelog/label/code-scanning/>`__, `changes in the CodeQL extension for Visual Studio Code <https://marketplace.visualstudio.com/items/GitHub.vscode-codeql/changelog>`__, and the `CodeQL Action changelog <https://github.com/github/codeql-action/blob/main/CHANGELOG.md>`__. + +Security Coverage +----------------- + +CodeQL 2.16.3 runs a total of 408 security queries when configured with the Default suite (covering 160 CWE). The Extended suite enables an additional 131 queries (covering 34 more CWE). 2 security queries have been added with this release. + +CodeQL CLI +---------- + +Bug Fixes +~~~~~~~~~ + +* Fixed a bug where CodeQL may produce an invalid database when it exhausts all available ID numbers. Now it detects the condition and reports an error instead. + +New Features +~~~~~~~~~~~~ + +* A new extractor option has been added to the Python extractor: :code:`python_executable_name`. + You can use this option to override the default process the extractor uses to find and select a Python executable. + Pass one of :code:`--extractor-option python_executable_name=py` or :code:`--extractor-option python_executable_name=python` or :code:`--extractor-option python_executable_name=python3` to commands that run the extractor, for example: :code:`codeql database create`. + + On Windows machines, the Python extractor will expect to find :code:`py.exe` on the system :code:`PATH` by default. + If the Python executable has a different name, you can set the new extractor option to override this value and look for :code:`python.exe` or :code:`python3.exe`. + + For more information about using the extractor option with the CodeQL CLI, see `Extractor options <https://docs.github.com/en/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/extractor-options>`__. + +Security Updates +~~~~~~~~~~~~~~~~ + +* Fixes CVE-2024-25129, a limited data exfiltration vulnerability that could be triggered by untrusted databases or QL packs. See the + \ `security advisory <https://github.com/github/codeql-cli-binaries/security/advisories/GHSA-gf8p-v3g3-3wph>`__ for more information. + +Query Packs +----------- + +Bug Fixes +~~~~~~~~~ + +JavaScript/TypeScript +""""""""""""""""""""" + +* The left operand of the :code:`&&` operator no longer propagates data flow by default. + +Major Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Golang +"""""" + +* The query "Use of a hardcoded key for signing JWT" (:code:`go/hardcoded-key`) has been promoted from experimental to the main query pack. Its results will now appear by default as part of :code:`go/hardcoded-credentials`. This query was originally `submitted as an experimental query by @porcupineyhairs <https://github.com/github/codeql/pull/9378>`__. + +Java +"""" + +* The sinks of the queries :code:`java/path-injection` and :code:`java/path-injection-local` have been reworked. Path creation sinks have been converted to summaries instead, while sinks now are actual file read/write operations only. This has reduced the false positive ratio of both queries. + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* The "non-constant format string" query (:code:`cpp/non-constant-format`) has been updated to produce fewer false positives. +* Added dataflow models for the :code:`gettext` function variants. + +C# +"" + +* Added sanitizers for relative URLs, :code:`List.Contains()`, and checking the :code:`.Host` property on an URI to the :code:`cs/web/unvalidated-url-redirection` query. + +Java +"""" + +* The sanitizer for the path injection queries has been improved to handle more cases where :code:`equals` is used to check an exact path match. +* The query :code:`java/unvalidated-url-redirection` now sanitizes results following the same logic as the query :code:`java/ssrf`. URLs where the destination cannot be controlled externally are no longer reported. + +New Queries +~~~~~~~~~~~ + +Golang +"""""" + +* The query "Missing JWT signature check" (:code:`go/missing-jwt-signature-check`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally `submitted as an experimental query by @am0o0 <https://github.com/github/codeql/pull/14075>`__. + +Java +"""" + +* Added a new query :code:`java/android/insecure-local-authentication` for finding uses of biometric authentication APIs that do not make use of a :code:`KeyStore`\ -backed key and thus may be bypassed. + +Swift +""""" + +* Added a new experimental query, :code:`swift/unsafe-unpacking`, that detects unpacking user controlled zips without validating the destination file path is within the destination directory. + +Query Metadata Changes +~~~~~~~~~~~~~~~~~~~~~~ + +Java +"""" + +* The :code:`security-severity` score of the query :code:`java/relative-path-command` has been reduced to better adjust it to the specific conditions needed for exploitation. + +Language Libraries +------------------ + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C# +"" + +* C# 12: The QL and data flow library now support primary constructors. +* Added a new database relation to store key-value pairs corresponding to compilations. The new relation is used in buildless mode to surface information related to dependency fetching. + +Java +"""" + +* An extension point for sanitizers of the query :code:`java/unvalidated-url-redirection` has been added. + +* Added models for the following packages: + + * java.io + * java.lang + * java.net + * java.net.http + * java.nio.file + * java.util.zip + * javax.servlet + * org.apache.commons.io + * org.apache.hadoop.fs + * org.apache.hadoop.fs.s3a + * org.eclipse.jetty.client + * org.gradle.api.file + +JavaScript/TypeScript +""""""""""""""""""""" + +* The name "certification" is no longer seen as possibly being a certificate, and will therefore no longer be flagged in queries like "clear-text-logging" which look for sensitive data. + +Python +"""""" + +* The name "certification" is no longer seen as possibly being a certificate, and will therefore no longer be flagged in queries like "clear-text-logging" which look for sensitive data. +* Added modeling of the :code:`psycopg` PyPI package as a SQL database library. + +Ruby +"""" + +* Raw output ERB tags of the form :code:`<%== ... %>` are now recognised as cross-site scripting sinks. +* The name "certification" is no longer seen as possibly being a certificate, and will therefore no longer be flagged in queries like "clear-text-logging" which look for sensitive data. + +Swift +""""" + +* The name "certification" is no longer seen as possibly being a certificate, and will therefore no longer be flagged in queries like "clear-text-logging" which look for sensitive data. + +Deprecated APIs +~~~~~~~~~~~~~~~ + +Java +"""" + +* The :code:`PathCreation` class in :code:`PathCreation.qll` has been deprecated. + +New Features +~~~~~~~~~~~~ + +C/C++ +""""" + +* A :code:`getInitialization` predicate was added to the :code:`RangeBasedForStmt` class that yields the C++20-style initializer of the range-based :code:`for` statement when it exists. + +Shared Libraries +---------------- + +Breaking Changes +~~~~~~~~~~~~~~~~ + +Dataflow Analysis +""""""""""""""""" + +* The :code:`edges` predicate contained in :code:`PathGraph` now contains two additional columns for propagating model provenance information. This is primarily an internal change without any impact on any APIs, except for specialised queries making use of :code:`MergePathGraph` in conjunction with custom :code:`PathGraph` implementations. Such queries will need to be updated to reference the two new columns. This is expected to be very rare, as :code:`MergePathGraph` is an advanced feature, but it is a breaking change for any such affected queries. diff --git a/docs/codeql/codeql-overview/codeql-changelog/index.rst b/docs/codeql/codeql-overview/codeql-changelog/index.rst index 2c1de5b5957..a04f37ad9e4 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/index.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/index.rst @@ -11,6 +11,7 @@ A list of queries for each suite and language `is available here <https://docs.g .. toctree:: :maxdepth: 1 + codeql-cli-2.16.3 codeql-cli-2.16.2 codeql-cli-2.16.1 codeql-cli-2.16.0 diff --git a/docs/codeql/reusables/beta-note-threat-models-java.rst b/docs/codeql/reusables/beta-note-threat-models.rst similarity index 55% rename from docs/codeql/reusables/beta-note-threat-models-java.rst rename to docs/codeql/reusables/beta-note-threat-models.rst index 4922fdda41d..80c97d93376 100644 --- a/docs/codeql/reusables/beta-note-threat-models-java.rst +++ b/docs/codeql/reusables/beta-note-threat-models.rst @@ -2,4 +2,4 @@ Note - Threat models are currently in beta and subject to change. During the beta, threat models are supported only by Java analysis. + Threat models are currently in beta and subject to change. During the beta, threat models are supported only by Java and C# analysis. diff --git a/docs/codeql/reusables/supported-versions-compilers.rst b/docs/codeql/reusables/supported-versions-compilers.rst index cb9ee322a04..05cc675c71c 100644 --- a/docs/codeql/reusables/supported-versions-compilers.rst +++ b/docs/codeql/reusables/supported-versions-compilers.rst @@ -11,21 +11,21 @@ Microsoft extensions (up to VS 2019), Arm Compiler 5 [4]_","``.cpp``, ``.c++``, ``.cxx``, ``.hpp``, ``.hh``, ``.h++``, ``.hxx``, ``.c``, ``.cc``, ``.h``" - C#,C# up to 11,"Microsoft Visual Studio up to 2019 with .NET up to 4.8, + C#,C# up to 12,"Microsoft Visual Studio up to 2019 with .NET up to 4.8, .NET Core up to 3.1 - .NET 5, .NET 6, .NET 7","``.sln``, ``.csproj``, ``.cs``, ``.cshtml``, ``.xaml``" + .NET 5, .NET 6, .NET 7, .NET 8","``.sln``, ``.csproj``, ``.cs``, ``.cshtml``, ``.xaml``" Go (aka Golang), "Go up to 1.21", "Go 1.11 or more recent", ``.go`` Java,"Java 7 to 21 [5]_","javac (OpenJDK and Oracle JDK), Eclipse compiler for Java (ECJ) [6]_",``.java`` - Kotlin [7]_,"Kotlin 1.5.0 to 1.9.20","kotlinc",``.kt`` + Kotlin [7]_,"Kotlin 1.5.0 to 1.9.2\ *x*","kotlinc",``.kt`` JavaScript,ECMAScript 2022 or lower,Not applicable,"``.js``, ``.jsx``, ``.mjs``, ``.es``, ``.es6``, ``.htm``, ``.html``, ``.xhtm``, ``.xhtml``, ``.vue``, ``.hbs``, ``.ejs``, ``.njk``, ``.json``, ``.yaml``, ``.yml``, ``.raml``, ``.xml`` [8]_" Python [9]_,"2.7, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12",Not applicable,``.py`` Ruby [10]_,"up to 3.3",Not applicable,"``.rb``, ``.erb``, ``.gemspec``, ``Gemfile``" Swift [11]_,"Swift 5.4-5.9.1","Swift compiler","``.swift``" - TypeScript [12]_,"2.6-5.3",Standard TypeScript compiler,"``.ts``, ``.tsx``, ``.mts``, ``.cts``" + TypeScript [12]_,"2.6-5.4",Standard TypeScript compiler,"``.ts``, ``.tsx``, ``.mts``, ``.cts``" .. container:: footnote-group diff --git a/go/documentation/library-coverage/coverage.csv b/go/documentation/library-coverage/coverage.csv index 6c515f12eed..f06794d3ecc 100644 --- a/go/documentation/library-coverage/coverage.csv +++ b/go/documentation/library-coverage/coverage.csv @@ -75,7 +75,7 @@ google.golang.org/protobuf/$ANYVERSION/internal/impl,,,2,,,,2, google.golang.org/protobuf/$ANYVERSION/proto,,,8,,,,8, google.golang.org/protobuf/$ANYVERSION/reflect/protoreflect,,,1,,,,1, gopkg.in/couchbase/gocb,,,18,,,,18, -gopkg.in/macaron,,,1,,,,1, +gopkg.in/macaron,,12,1,,,12,1, gopkg.in/square/go-jose.v2/jwt,1,,4,,1,,4, gopkg.in/yaml,,,9,,,,9, html,,,2,,,,2, diff --git a/go/documentation/library-coverage/coverage.rst b/go/documentation/library-coverage/coverage.rst index 63c408d82fc..4dff6d7ac90 100644 --- a/go/documentation/library-coverage/coverage.rst +++ b/go/documentation/library-coverage/coverage.rst @@ -15,7 +15,7 @@ Go framework & library support `Go kit <https://gokit.io/>`_,``github.com/go-kit/kit*``,,,1 `Iris <https://www.iris-go.com/>`_,``github.com/kataras/iris*``,,,1 `Kubernetes <https://kubernetes.io/>`_,"``k8s.io/api*``, ``k8s.io/apimachinery*``",,57, - `Macaron <https://gopkg.in/macaron.v1>`_,``gopkg.in/macaron*``,,1, + `Macaron <https://gopkg.in/macaron.v1>`_,``gopkg.in/macaron*``,12,1, `Revel <http://revel.github.io/>`_,"``github.com/revel/revel*``, ``github.com/robfig/revel*``",,20, `SendGrid <https://github.com/sendgrid/sendgrid-go>`_,``github.com/sendgrid/sendgrid-go*``,,1, `Standard library <https://pkg.go.dev/std>`_,"````, ``archive/*``, ``bufio``, ``bytes``, ``cmp``, ``compress/*``, ``container/*``, ``context``, ``crypto``, ``crypto/*``, ``database/*``, ``debug/*``, ``embed``, ``encoding``, ``encoding/*``, ``errors``, ``expvar``, ``flag``, ``fmt``, ``go/*``, ``hash``, ``hash/*``, ``html``, ``html/*``, ``image``, ``image/*``, ``index/*``, ``io``, ``io/*``, ``log``, ``log/*``, ``maps``, ``math``, ``math/*``, ``mime``, ``mime/*``, ``net``, ``net/*``, ``os``, ``os/*``, ``path``, ``path/*``, ``plugin``, ``reflect``, ``reflect/*``, ``regexp``, ``regexp/*``, ``slices``, ``sort``, ``strconv``, ``strings``, ``sync``, ``sync/*``, ``syscall``, ``syscall/*``, ``testing``, ``testing/*``, ``text/*``, ``time``, ``time/*``, ``unicode``, ``unicode/*``, ``unsafe``",8,578, @@ -35,5 +35,5 @@ Go framework & library support `yaml <https://gopkg.in/yaml.v3>`_,``gopkg.in/yaml*``,,9, `zap <https://go.uber.org/zap>`_,``go.uber.org/zap*``,,11, Others,"``github.com/go-jose/go-jose/$ANYVERSION/jwt``, ``gopkg.in/square/go-jose.v2/jwt``",,8,2 - Totals,,8,871,24 + Totals,,20,871,24 diff --git a/go/extractor/autobuilder/autobuilder.go b/go/extractor/autobuilder/autobuilder.go index 11c49735eaa..eec9ba84c04 100644 --- a/go/extractor/autobuilder/autobuilder.go +++ b/go/extractor/autobuilder/autobuilder.go @@ -70,12 +70,33 @@ func tryBuild(cmd string, args ...string) bool { return res && (!CheckExtracted || checkExtractorRun()) } -// Autobuild attempts to detect build system and run the corresponding command. -func Autobuild() bool { - return tryBuildIfExists("Makefile", "make") || - tryBuildIfExists("makefile", "make") || - tryBuildIfExists("GNUmakefile", "make") || - tryBuildIfExists("build.ninja", "ninja") || - tryBuildIfExists("build", "./build") || - tryBuildIfExists("build.sh", "./build.sh") +// If a project is accompanied by a build script (such as a makefile), then we try executing such +// build scripts to build the project. This type represents pairs of script names to check for +// and the names of corresponding build tools to invoke if those scripts exist. +type BuildScript struct { + Tool string // The name of the command to execute if the build script exists + Filename string // The name of the build script to check for +} + +// An array of build scripts to check for and corresponding commands that we can execute +// if they exist. +var BuildScripts = []BuildScript{ + {Tool: "make", Filename: "Makefile"}, + {Tool: "make", Filename: "makefile"}, + {Tool: "make", Filename: "GNUmakefile"}, + {Tool: "ninja", Filename: "build.ninja"}, + {Tool: "./build", Filename: "build"}, + {Tool: "./build.sh", Filename: "build.sh"}, +} + +// Autobuild attempts to detect build systems based on the presence of build scripts from the +// list in `BuildScripts` and run the corresponding command. This may invoke zero or more +// build scripts in the order given by `BuildScripts`. +func Autobuild() bool { + for _, script := range BuildScripts { + if tryBuildIfExists(script.Filename, script.Tool) { + return true + } + } + return false } diff --git a/go/extractor/autobuilder/build-environment.go b/go/extractor/autobuilder/build-environment.go index 485786ed946..3f03ff922af 100644 --- a/go/extractor/autobuilder/build-environment.go +++ b/go/extractor/autobuilder/build-environment.go @@ -12,7 +12,7 @@ import ( ) const minGoVersion = "1.11" -const maxGoVersion = "1.21" +const maxGoVersion = "1.22" type versionInfo struct { goModVersion string // The version of Go found in the go directive in the `go.mod` file. @@ -267,15 +267,22 @@ func outputEnvironmentJson(version string) { // Get the version of Go to install and output it to stdout as json. func IdentifyEnvironment() { var v versionInfo - buildInfo := project.GetBuildInfo(false) - goVersionInfo := project.TryReadGoDirective(buildInfo) - v.goModVersion, v.goModVersionFound = goVersionInfo.Version, goVersionInfo.Found + workspaces := project.GetWorkspaceInfo(false) + // Remove temporary extractor files (e.g. auto-generated go.mod files) when we are done + defer project.RemoveTemporaryExtractorFiles() + + // Find the greatest Go version required by any of the workspaces. + greatestGoVersion := project.RequiredGoVersion(&workspaces) + v.goModVersion, v.goModVersionFound = greatestGoVersion.Version, greatestGoVersion.Found + + // Find which, if any, version of Go is installed on the system already. v.goEnvVersionFound = toolchain.IsInstalled() if v.goEnvVersionFound { v.goEnvVersion = toolchain.GetEnvGoVersion()[2:] } + // Determine which version of Go we should recommend to install. msg, versionToInstall := getVersionToInstall(v) log.Println(msg) diff --git a/go/extractor/cli/go-autobuilder/go-autobuilder.go b/go/extractor/cli/go-autobuilder/go-autobuilder.go index 0fcbfd4686c..91291c77144 100644 --- a/go/extractor/cli/go-autobuilder/go-autobuilder.go +++ b/go/extractor/cli/go-autobuilder/go-autobuilder.go @@ -56,23 +56,6 @@ Build behavior: fmt.Fprintf(os.Stderr, "Usage:\n\n %s\n", os.Args[0]) } -// Returns the current Go version in semver format, e.g. v1.14.4 -func getEnvGoSemVer() string { - goVersion := toolchain.GetEnvGoVersion() - if !strings.HasPrefix(goVersion, "go") { - log.Fatalf("Expected 'go version' output of the form 'go1.2.3'; got '%s'", goVersion) - } - // Go versions don't follow the SemVer format, but the only exception we normally care about - // is release candidates; so this is a horrible hack to convert e.g. `go1.22rc1` into `go1.22-rc1` - // which is compatible with the SemVer specification - rcIndex := strings.Index(goVersion, "rc") - if rcIndex != -1 { - return semver.Canonical("v"+goVersion[2:rcIndex]) + "-" + goVersion[rcIndex:] - } else { - return semver.Canonical("v" + goVersion[2:]) - } -} - // Returns the import path of the package being built, or "" if it cannot be determined. func getImportPath() (importpath string) { importpath = os.Getenv("LGTM_INDEX_IMPORT_PATH") @@ -177,8 +160,8 @@ func getSourceDir() string { } // fixGoVendorIssues fixes issues with go vendor for go version >= 1.14 -func fixGoVendorIssues(buildInfo *project.BuildInfo, goModVersionFound bool) { - if buildInfo.ModMode == project.ModVendor { +func fixGoVendorIssues(workspace *project.GoWorkspace, goModVersionFound bool) { + if workspace.ModMode == project.ModVendor { // fix go vendor issues with go versions >= 1.14 when no go version is specified in the go.mod // if this is the case, and dependencies were vendored with an old go version (and therefore // do not contain a '## explicit' annotation, the go command will fail and refuse to do any @@ -186,7 +169,7 @@ func fixGoVendorIssues(buildInfo *project.BuildInfo, goModVersionFound bool) { // // we work around this by adding an explicit go version of 1.13, which is the last version // where this is not an issue - if buildInfo.DepMode == project.GoGetWithModules { + if workspace.DepMode == project.GoGetWithModules { if !goModVersionFound { // if the go.mod does not contain a version line modulesTxt, err := os.ReadFile("vendor/modules.txt") @@ -197,7 +180,7 @@ func fixGoVendorIssues(buildInfo *project.BuildInfo, goModVersionFound bool) { log.Println("Adding a version directive to the go.mod file as the modules.txt does not have explicit annotations") if !addVersionToMod("1.13") { log.Println("Failed to add a version to the go.mod file to fix explicitly required package bug; not using vendored dependencies") - buildInfo.ModMode = project.ModMod + workspace.ModMode = project.ModMod } } } @@ -206,9 +189,9 @@ func fixGoVendorIssues(buildInfo *project.BuildInfo, goModVersionFound bool) { } // Determines whether the project needs a GOPATH set up -func getNeedGopath(buildInfo project.BuildInfo, importpath string) bool { +func getNeedGopath(workspace project.GoWorkspace, importpath string) bool { needGopath := true - if buildInfo.DepMode == project.GoGetWithModules { + if workspace.DepMode == project.GoGetWithModules { needGopath = false } // if `LGTM_INDEX_NEED_GOPATH` is set, it overrides the value for `needGopath` inferred above @@ -229,44 +212,46 @@ func getNeedGopath(buildInfo project.BuildInfo, importpath string) bool { } // Try to update `go.mod` and `go.sum` if the go version is >= 1.16. -func tryUpdateGoModAndGoSum(buildInfo project.BuildInfo) { +func tryUpdateGoModAndGoSum(workspace project.GoWorkspace) { // Go 1.16 and later won't automatically attempt to update go.mod / go.sum during package loading, so try to update them here: - if buildInfo.ModMode != project.ModVendor && buildInfo.DepMode == project.GoGetWithModules && semver.Compare(getEnvGoSemVer(), "v1.16") >= 0 { - // stat go.mod and go.sum - goModPath := filepath.Join(buildInfo.BaseDir, "go.mod") - beforeGoModFileInfo, beforeGoModErr := os.Stat(goModPath) - if beforeGoModErr != nil { - log.Println("Failed to stat go.mod before running `go mod tidy -e`") - } - - goSumPath := filepath.Join(buildInfo.BaseDir, "go.sum") - beforeGoSumFileInfo, beforeGoSumErr := os.Stat(goSumPath) - - // run `go mod tidy -e` - cmd := exec.Command("go", "mod", "tidy", "-e") - cmd.Dir = buildInfo.BaseDir - res := util.RunCmd(cmd) - - if !res { - log.Println("Failed to run `go mod tidy -e`") - } else { - if beforeGoModFileInfo != nil { - afterGoModFileInfo, afterGoModErr := os.Stat(goModPath) - if afterGoModErr != nil { - log.Println("Failed to stat go.mod after running `go mod tidy -e`") - } else if afterGoModFileInfo.ModTime().After(beforeGoModFileInfo.ModTime()) { - // if go.mod has been changed then notify the user - log.Println("We have run `go mod tidy -e` and it altered go.mod. You may wish to check these changes into version control. ") - } + if workspace.ModMode != project.ModVendor && workspace.DepMode == project.GoGetWithModules && semver.Compare(toolchain.GetEnvGoSemVer(), "v1.16") >= 0 { + for _, goMod := range workspace.Modules { + // stat go.mod and go.sum + goModPath := goMod.Path + goModDir := filepath.Dir(goModPath) + beforeGoModFileInfo, beforeGoModErr := os.Stat(goModPath) + if beforeGoModErr != nil { + log.Printf("Failed to stat %s before running `go mod tidy -e`\n", goModPath) } - afterGoSumFileInfo, afterGoSumErr := os.Stat(goSumPath) - if afterGoSumErr != nil { - log.Println("Failed to stat go.sum after running `go mod tidy -e`") + goSumPath := filepath.Join(goModDir, "go.sum") + beforeGoSumFileInfo, beforeGoSumErr := os.Stat(goSumPath) + + // run `go mod tidy -e` + cmd := toolchain.TidyModule(goModDir) + res := util.RunCmd(cmd) + + if !res { + log.Printf("Failed to run `go mod tidy -e` in %s\n", goModDir) } else { - if beforeGoSumErr != nil || afterGoSumFileInfo.ModTime().After(beforeGoSumFileInfo.ModTime()) { - // if go.sum has been changed then notify the user - log.Println("We have run `go mod tidy -e` and it altered go.sum. You may wish to check these changes into version control. ") + if beforeGoModFileInfo != nil { + afterGoModFileInfo, afterGoModErr := os.Stat(goModPath) + if afterGoModErr != nil { + log.Printf("Failed to stat %s after running `go mod tidy -e`: %s\n", goModPath, afterGoModErr.Error()) + } else if afterGoModFileInfo.ModTime().After(beforeGoModFileInfo.ModTime()) { + // if go.mod has been changed then notify the user + log.Println("We have run `go mod tidy -e` and it altered go.mod. You may wish to check these changes into version control. ") + } + } + + afterGoSumFileInfo, afterGoSumErr := os.Stat(goSumPath) + if afterGoSumErr != nil { + log.Printf("Failed to stat %s after running `go mod tidy -e`: %s\n", goSumPath, afterGoSumErr.Error()) + } else { + if beforeGoSumErr != nil || afterGoSumFileInfo.ModTime().After(beforeGoSumFileInfo.ModTime()) { + // if go.sum has been changed then notify the user + log.Println("We have run `go mod tidy -e` and it altered go.sum. You may wish to check these changes into version control. ") + } } } } @@ -406,7 +391,7 @@ func buildWithoutCustomCommands(modMode project.ModMode) bool { log.Println("Build failed, continuing to install dependencies.") shouldInstallDependencies = true - } else if util.DepErrors("./...", modMode.ArgsForGoVersion(getEnvGoSemVer())...) { + } else if util.DepErrors("./...", modMode.ArgsForGoVersion(toolchain.GetEnvGoSemVer())...) { log.Println("Dependencies are still not resolving after the build, continuing to install dependencies.") shouldInstallDependencies = true @@ -449,10 +434,10 @@ func buildWithCustomCommands(inst string) { } // Install dependencies using the given dependency installer mode. -func installDependencies(buildInfo project.BuildInfo) { +func installDependencies(workspace project.GoWorkspace) { // automatically determine command to install dependencies var install *exec.Cmd - if buildInfo.DepMode == project.Dep { + if workspace.DepMode == project.Dep { // set up the dep cache if SEMMLE_CACHE is set cacheDir := os.Getenv("SEMMLE_CACHE") if cacheDir != "" { @@ -482,47 +467,80 @@ func installDependencies(buildInfo project.BuildInfo) { install = exec.Command("dep", "ensure", "-v") } log.Println("Installing dependencies using `dep ensure`.") - } else if buildInfo.DepMode == project.Glide { + util.RunCmd(install) + } else if workspace.DepMode == project.Glide { install = exec.Command("glide", "install") log.Println("Installing dependencies using `glide install`") + util.RunCmd(install) } else { - // explicitly set go module support - if buildInfo.DepMode == project.GoGetWithModules { - os.Setenv("GO111MODULE", "on") - } else if buildInfo.DepMode == project.GoGetNoModules { - os.Setenv("GO111MODULE", "off") + if workspace.Modules == nil { + project.InitGoModForLegacyProject(workspace.BaseDir) + workspace.Modules = project.LoadGoModules([]string{filepath.Join(workspace.BaseDir, "go.mod")}) } - // get dependencies - install = exec.Command("go", "get", "-v", "./...") - install.Dir = buildInfo.BaseDir - log.Printf("Installing dependencies using `go get -v ./...` in `%s`.\n", buildInfo.BaseDir) + // get dependencies for all modules + for _, module := range workspace.Modules { + path := filepath.Dir(module.Path) + + if util.DirExists(filepath.Join(path, "vendor")) { + vendor := toolchain.VendorModule(path) + log.Printf("Synchronizing vendor file using `go mod vendor` in %s.\n", path) + util.RunCmd(vendor) + } + + install = exec.Command("go", "get", "-v", "./...") + install.Dir = path + log.Printf("Installing dependencies using `go get -v ./...` in `%s`.\n", path) + util.RunCmd(install) + } } - util.RunCmd(install) } // Run the extractor. -func extract(buildInfo project.BuildInfo) { +func extract(workspace project.GoWorkspace) bool { extractor, err := util.GetExtractorPath() if err != nil { log.Fatalf("Could not determine path of extractor: %v.\n", err) } extractorArgs := []string{} - if buildInfo.DepMode == project.GoGetWithModules { - extractorArgs = append(extractorArgs, buildInfo.ModMode.ArgsForGoVersion(getEnvGoSemVer())...) + if workspace.DepMode == project.GoGetWithModules { + extractorArgs = append(extractorArgs, workspace.ModMode.ArgsForGoVersion(toolchain.GetEnvGoSemVer())...) } - extractorArgs = append(extractorArgs, "./...") - log.Printf("Running extractor command '%s %v' from directory '%s'.\n", extractor, extractorArgs, buildInfo.BaseDir) + if len(workspace.Modules) == 0 { + // There may be no modules if we are using e.g. Dep or Glide + extractorArgs = append(extractorArgs, "./...") + } else { + for _, module := range workspace.Modules { + relModPath, relErr := filepath.Rel(workspace.BaseDir, filepath.Dir(module.Path)) + + if relErr != nil { + log.Printf( + "Unable to make module path %s relative to workspace base dir %s: %s\n", + filepath.Dir(module.Path), workspace.BaseDir, relErr.Error()) + } else { + if relModPath != "." { + extractorArgs = append(extractorArgs, "."+string(os.PathSeparator)+relModPath+"/...") + } else { + extractorArgs = append(extractorArgs, relModPath+"/...") + } + } + } + } + + log.Printf("Running extractor command '%s %v' from directory '%s'.\n", extractor, extractorArgs, workspace.BaseDir) cmd := exec.Command(extractor, extractorArgs...) - cmd.Dir = buildInfo.BaseDir + cmd.Dir = workspace.BaseDir cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr err = cmd.Run() if err != nil { - log.Fatalf("Extraction failed: %s\n", err.Error()) + log.Printf("Extraction failed for %s: %s\n", workspace.BaseDir, err.Error()) + return false } + + return true } // Build the project and run the extractor. @@ -536,75 +554,118 @@ func installDependenciesAndBuild() { // determine how to install dependencies and whether a GOPATH needs to be set up before // extraction - buildInfo := project.GetBuildInfo(true) + workspaces := project.GetWorkspaceInfo(true) if _, present := os.LookupEnv("GO111MODULE"); !present { os.Setenv("GO111MODULE", "auto") } - goVersionInfo := project.TryReadGoDirective(buildInfo) + // Remove temporary extractor files (e.g. auto-generated go.mod files) when we are done + defer project.RemoveTemporaryExtractorFiles() + + // If there is only one workspace and it needs a GOPATH set up, which may be the case if + // we don't use Go modules, then we move the repository to a temporary directory and set + // the GOPATH to it. + if len(workspaces) == 1 { + workspace := workspaces[0] + + importpath := getImportPath() + needGopath := getNeedGopath(workspace, importpath) + + inLGTM := os.Getenv("LGTM_SRC") != "" || os.Getenv("LGTM_INDEX_NEED_GOPATH") != "" + + if inLGTM && needGopath { + paths := moveToTemporaryGopath(srcdir, importpath) + + // schedule restoring the contents of newdir to their original location after this function completes: + defer restoreRepoLayout(paths.newdir, paths.files, filepath.Base(paths.scratch), srcdir) + + pt := createPathTransformerFile(paths.newdir) + defer os.Remove(pt.Name()) + + writePathTransformerFile(pt, paths.realSrc, paths.root, paths.newdir) + setGopath(paths.root) + } + } + + // Find the greatest version of Go that is required by the workspaces to check it against the version + // of Go that is installed on the system. + greatestGoVersion := project.RequiredGoVersion(&workspaces) // This diagnostic is not required if the system Go version is 1.21 or greater, since the // Go tooling should install required Go versions as needed. - if semver.Compare(getEnvGoSemVer(), "v1.21.0") < 0 && goVersionInfo.Found && semver.Compare("v"+goVersionInfo.Version, getEnvGoSemVer()) > 0 { - diagnostics.EmitNewerGoVersionNeeded(getEnvGoSemVer(), "v"+goVersionInfo.Version) + if semver.Compare(toolchain.GetEnvGoSemVer(), "v1.21.0") < 0 && greatestGoVersion.Found && semver.Compare("v"+greatestGoVersion.Version, toolchain.GetEnvGoSemVer()) > 0 { + diagnostics.EmitNewerGoVersionNeeded(toolchain.GetEnvGoSemVer(), "v"+greatestGoVersion.Version) if val, _ := os.LookupEnv("GITHUB_ACTIONS"); val == "true" { log.Printf( - "The go.mod file requires version %s of Go, but version %s is installed. Consider adding an actions/setup-go step to your workflow.\n", - "v"+goVersionInfo.Version, - getEnvGoSemVer()) + "A go.mod file requires version %s of Go, but version %s is installed. Consider adding an actions/setup-go step to your workflow.\n", + "v"+greatestGoVersion.Version, + toolchain.GetEnvGoSemVer()) } } - fixGoVendorIssues(&buildInfo, goVersionInfo.Found) + // Track all projects which could not be extracted successfully + var unsuccessfulProjects = []string{} - tryUpdateGoModAndGoSum(buildInfo) + // Attempt to extract all workspaces; we will tolerate individual extraction failures here + for i, workspace := range workspaces { + goVersionInfo := workspace.RequiredGoVersion() - importpath := getImportPath() - needGopath := getNeedGopath(buildInfo, importpath) + fixGoVendorIssues(&workspace, goVersionInfo.Found) - inLGTM := os.Getenv("LGTM_SRC") != "" || os.Getenv("LGTM_INDEX_NEED_GOPATH") != "" + tryUpdateGoModAndGoSum(workspace) - if inLGTM && needGopath { - paths := moveToTemporaryGopath(srcdir, importpath) - - // schedule restoring the contents of newdir to their original location after this function completes: - defer restoreRepoLayout(paths.newdir, paths.files, filepath.Base(paths.scratch), srcdir) - - pt := createPathTransformerFile(paths.newdir) - defer os.Remove(pt.Name()) - - writePathTransformerFile(pt, paths.realSrc, paths.root, paths.newdir) - setGopath(paths.root) - } - - // check whether an explicit dependency installation command was provided - inst := util.Getenv("CODEQL_EXTRACTOR_GO_BUILD_COMMAND", "LGTM_INDEX_BUILD_COMMAND") - shouldInstallDependencies := false - if inst == "" { - shouldInstallDependencies = buildWithoutCustomCommands(buildInfo.ModMode) - } else { - buildWithCustomCommands(inst) - } - - if buildInfo.ModMode == project.ModVendor { - // test if running `go` with -mod=vendor works, and if it doesn't, try to fallback to -mod=mod - // or not set if the go version < 1.14. Note we check this post-build in case the build brings - // the vendor directory up to date. - if !checkVendor() { - buildInfo.ModMode = project.ModMod - log.Println("The vendor directory is not consistent with the go.mod; not using vendored dependencies.") - } - } - - if shouldInstallDependencies { - if buildInfo.ModMode == project.ModVendor { - log.Printf("Skipping dependency installation because a Go vendor directory was found.") + // check whether an explicit dependency installation command was provided + inst := util.Getenv("CODEQL_EXTRACTOR_GO_BUILD_COMMAND", "LGTM_INDEX_BUILD_COMMAND") + shouldInstallDependencies := false + if inst == "" { + shouldInstallDependencies = buildWithoutCustomCommands(workspace.ModMode) } else { - installDependencies(buildInfo) + buildWithCustomCommands(inst) + } + + if workspace.ModMode == project.ModVendor { + // test if running `go` with -mod=vendor works, and if it doesn't, try to fallback to -mod=mod + // or not set if the go version < 1.14. Note we check this post-build in case the build brings + // the vendor directory up to date. + if !checkVendor() { + workspace.ModMode = project.ModMod + log.Println("The vendor directory is not consistent with the go.mod; not using vendored dependencies.") + } + } + + if shouldInstallDependencies { + if workspace.ModMode == project.ModVendor { + log.Printf("Skipping dependency installation because a Go vendor directory was found.") + } else { + installDependencies(workspace) + } + } + + workspaces[i].Extracted = extract(workspace) + + if !workspaces[i].Extracted { + unsuccessfulProjects = append(unsuccessfulProjects, workspace.BaseDir) } } - extract(buildInfo) + // If all projects could not be extracted successfully, we fail the overall extraction. + if len(unsuccessfulProjects) == len(workspaces) { + log.Fatalln("Extraction failed for all discovered Go projects.") + } + + // If there is at least one project that could not be extracted successfully, + // emit a diagnostic that reports which projects we could not extract successfully. + // We only consider this a warning, since there may be test projects etc. which + // do not matter if they cannot be extracted successfully. + if len(unsuccessfulProjects) > 0 { + log.Printf( + "Warning: extraction failed for %d project(s): %s\n", + len(unsuccessfulProjects), + strings.Join(unsuccessfulProjects, ", ")) + diagnostics.EmitExtractionFailedForProjects(unsuccessfulProjects) + } else { + log.Printf("Success: extraction succeeded for all %d discovered project(s).\n", len(workspaces)) + } } func main() { diff --git a/go/extractor/diagnostics/diagnostics.go b/go/extractor/diagnostics/diagnostics.go index 6a3c4175318..c02af8afb92 100644 --- a/go/extractor/diagnostics/diagnostics.go +++ b/go/extractor/diagnostics/diagnostics.go @@ -493,3 +493,18 @@ func EmitNewerSystemGoRequired(requiredVersion string) { noLocation, ) } + +func EmitExtractionFailedForProjects(path []string) { + emitDiagnostic( + "go/autobuilder/extraction-failed-for-project", + fmt.Sprintf("Unable to extract %d Go projects", len(path)), + fmt.Sprintf( + "The following %d Go project%s could not be extracted successfully:\n\n`%s`\n", + len(path), + plural(len(path), "", "s"), + strings.Join(path, "`, `")), + severityWarning, + fullVisibility, + noLocation, + ) +} diff --git a/go/extractor/go.mod b/go/extractor/go.mod index c1aa66b49b3..9dafc31bbbe 100644 --- a/go/extractor/go.mod +++ b/go/extractor/go.mod @@ -1,6 +1,6 @@ module github.com/github/codeql-go/extractor -go 1.21 +go 1.22.0 require ( golang.org/x/mod v0.15.0 diff --git a/go/extractor/go.work b/go/extractor/go.work new file mode 100644 index 00000000000..96b89a39cb9 --- /dev/null +++ b/go/extractor/go.work @@ -0,0 +1,3 @@ +go 1.22.0 + +use . diff --git a/go/extractor/go.work.sum b/go/extractor/go.work.sum new file mode 100644 index 00000000000..e3856dfbfa5 --- /dev/null +++ b/go/extractor/go.work.sum @@ -0,0 +1,5 @@ +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/telemetry v0.0.0-20240208230135-b75ee8823808/go.mod h1:KG1lNk5ZFNssSZLrpVb4sMXKMpGwGXOxSG3rnu2gZQQ= diff --git a/go/extractor/project/project.go b/go/extractor/project/project.go index baef8bdefb8..187389ecd55 100644 --- a/go/extractor/project/project.go +++ b/go/extractor/project/project.go @@ -5,22 +5,104 @@ import ( "os" "path/filepath" "regexp" + "slices" "sort" "strings" "github.com/github/codeql-go/extractor/diagnostics" + "github.com/github/codeql-go/extractor/toolchain" "github.com/github/codeql-go/extractor/util" + "golang.org/x/mod/modfile" "golang.org/x/mod/semver" ) -func getDirs(paths []string) []string { - dirs := make([]string, len(paths)) - for i, path := range paths { - dirs[i] = filepath.Dir(path) - } - return dirs +// DependencyInstallerMode is an enum describing how dependencies should be installed +type DependencyInstallerMode int + +const ( + // GoGetNoModules represents dependency installation using `go get` without modules + GoGetNoModules DependencyInstallerMode = iota + // GoGetWithModules represents dependency installation using `go get` with modules + GoGetWithModules + // Dep represent dependency installation using `dep ensure` + Dep + // Glide represents dependency installation using `glide install` + Glide +) + +// Represents information about a `go.mod` file: this is at least the path to the `go.mod` file, +// plus the parsed contents of the file, if available. +type GoModule struct { + Path string // The path to the `go.mod` file + Module *modfile.File // The parsed contents of the `go.mod` file } +// Represents information about a Go project workspace: this may either be a folder containing +// a `go.work` file or a collection of `go.mod` files. +type GoWorkspace struct { + BaseDir string // The base directory for this workspace + WorkspaceFile *modfile.WorkFile // The `go.work` file for this workspace + Modules []*GoModule // A list of `go.mod` files + DepMode DependencyInstallerMode // A value indicating how to install dependencies for this workspace + ModMode ModMode // A value indicating which module mode to use for this workspace + Extracted bool // A value indicating whether this workspace was extracted successfully +} + +// Represents a nullable version string. +type GoVersionInfo struct { + // The version string, if any + Version string + // A value indicating whether a version string was found + Found bool +} + +// Determines the version of Go that is required by this workspace. This is, in order of preference: +// 1. The Go version specified in the `go.work` file, if any. +// 2. The greatest Go version specified in any `go.mod` file, if any. +func (workspace *GoWorkspace) RequiredGoVersion() GoVersionInfo { + if workspace.WorkspaceFile != nil && workspace.WorkspaceFile.Go != nil { + // If we have parsed a `go.work` file, return the version number from it. + return GoVersionInfo{Version: workspace.WorkspaceFile.Go.Version, Found: true} + } else if workspace.Modules != nil && len(workspace.Modules) > 0 { + // Otherwise, if we have `go.work` files, find the greatest Go version in those. + var greatestVersion string = "" + for _, module := range workspace.Modules { + if module.Module != nil && module.Module.Go != nil { + // If we have parsed the file, retrieve the version number we have already obtained. + if greatestVersion == "" || semver.Compare("v"+module.Module.Go.Version, "v"+greatestVersion) > 0 { + greatestVersion = module.Module.Go.Version + } + } else { + modVersion := tryReadGoDirective(module.Path) + if modVersion.Found && (greatestVersion == "" || semver.Compare("v"+modVersion.Version, "v"+greatestVersion) > 0) { + greatestVersion = modVersion.Version + } + } + } + + // If we have found some version, return it. + if greatestVersion != "" { + return GoVersionInfo{Version: greatestVersion, Found: true} + } + } + + return GoVersionInfo{Version: "", Found: false} +} + +// Finds the greatest Go version required by any of the given `workspaces`. +// Returns a `GoVersionInfo` value with `Found: false` if no version information is available. +func RequiredGoVersion(workspaces *[]GoWorkspace) GoVersionInfo { + greatestGoVersion := GoVersionInfo{Version: "", Found: false} + for _, workspace := range *workspaces { + goVersionInfo := workspace.RequiredGoVersion() + if goVersionInfo.Found && (!greatestGoVersion.Found || semver.Compare("v"+goVersionInfo.Version, "v"+greatestGoVersion.Version) > 0) { + greatestGoVersion = goVersionInfo + } + } + return greatestGoVersion +} + +// Determines whether any of the directory paths in the input are nested. func checkDirsNested(inputDirs []string) (string, bool) { // replace "." with "" so that we can check if all the paths are nested dirs := make([]string, len(inputDirs)) @@ -42,72 +124,365 @@ func checkDirsNested(inputDirs []string) (string, bool) { return dirs[0], true } -// Returns the directory to run the go build in and whether to use a go.mod -// file. -func findGoModFiles(emitDiagnostics bool) (baseDir string, useGoMod bool) { - goModPaths := util.FindAllFilesWithName(".", "go.mod", "vendor") - if len(goModPaths) == 0 { - baseDir = "." - useGoMod = false +// A list of files we created that should be removed after we are done. +var filesToRemove []string = []string{} + +// Try to initialize a go.mod file for projects that do not already have one. +func InitGoModForLegacyProject(path string) { + log.Printf("The code in %s seems to be missing a go.mod file. Attempting to initialize one...\n", path) + + modInit := toolchain.InitModule(path) + + if !util.RunCmd(modInit) { + log.Printf("Failed to initialize go.mod file for this project.") return } - goModDirs := getDirs(goModPaths) - if util.AnyGoFilesOutsideDirs(".", goModDirs...) { + + // Add the go.mod file to a list of files we should remove later. + filesToRemove = append(filesToRemove, filepath.Join(path, "go.mod")) + + modTidy := toolchain.TidyModule(path) + out, err := modTidy.CombinedOutput() + log.Println(string(out)) + + if err != nil { + log.Printf("Failed to determine module requirements for this project.") + } + + if strings.Contains(string(out), "is relative, but relative import paths are not supported in module mode") { + diagnostics.EmitRelativeImportPaths() + } +} + +// Attempts to remove all files that we created. +func RemoveTemporaryExtractorFiles() { + for _, path := range filesToRemove { + err := os.Remove(path) + if err != nil { + log.Printf("Unable to remove file we created at %s: %s\n", path, err.Error()) + } + } + + filesToRemove = []string{} +} + +// Find all go.work files in the working directory and its subdirectories +func findGoWorkFiles() []string { + return util.FindAllFilesWithName(".", "go.work", "vendor") +} + +// Find all go.mod files in the specified directory and its subdirectories +func findGoModFiles(root string) []string { + return util.FindAllFilesWithName(root, "go.mod", "vendor") +} + +// Given a list of `go.mod` file paths, try to parse them all. The resulting array of `GoModule` objects +// will be the same length as the input array and the objects will contain at least the `go.mod` path. +// If parsing the corresponding file is successful, then the parsed contents will also be available. +func LoadGoModules(goModFilePaths []string) []*GoModule { + results := make([]*GoModule, len(goModFilePaths)) + + for i, goModFilePath := range goModFilePaths { + results[i] = new(GoModule) + results[i].Path = goModFilePath + + modFileSrc, err := os.ReadFile(goModFilePath) + + if err != nil { + log.Printf("Unable to read %s: %s.\n", goModFilePath, err.Error()) + continue + } + + modFile, err := modfile.ParseLax(goModFilePath, modFileSrc, nil) + + if err != nil { + log.Printf("Unable to parse %s: %s.\n", goModFilePath, err.Error()) + continue + } + + results[i].Module = modFile + } + + return results +} + +// Given a path to a `go.work` file, this function attempts to parse the `go.work` file. If unsuccessful, +// we attempt to discover `go.mod` files within subdirectories of the directory containing the `go.work` +// file ourselves. +func discoverWorkspace(workFilePath string) GoWorkspace { + log.Printf("Loading %s...\n", workFilePath) + baseDir := filepath.Dir(workFilePath) + workFileSrc, err := os.ReadFile(workFilePath) + + if err != nil { + // We couldn't read the `go.work` file for some reason; let's try to find `go.mod` files ourselves + log.Printf("Unable to read %s, falling back to finding `go.mod` files manually:\n%s\n", workFilePath, err.Error()) + + goModFilePaths := findGoModFiles(baseDir) + log.Printf("Discovered the following Go modules in %s:\n%s\n", baseDir, strings.Join(goModFilePaths, "\n")) + + return GoWorkspace{ + BaseDir: baseDir, + Modules: LoadGoModules(goModFilePaths), + DepMode: GoGetWithModules, + ModMode: getModMode(GoGetWithModules, baseDir), + } + } + + workFile, err := modfile.ParseWork(workFilePath, workFileSrc, nil) + + if err != nil { + // The `go.work` file couldn't be parsed for some reason; let's try to find `go.mod` files ourselves + log.Printf("Unable to parse %s, falling back to finding `go.mod` files manually:\n%s\n", workFilePath, err.Error()) + + goModFilePaths := findGoModFiles(baseDir) + log.Printf("Discovered the following Go modules in %s:\n%s\n", baseDir, strings.Join(goModFilePaths, "\n")) + + return GoWorkspace{ + BaseDir: baseDir, + Modules: LoadGoModules(goModFilePaths), + DepMode: GoGetWithModules, + ModMode: getModMode(GoGetWithModules, baseDir), + } + } + + // Get the paths of all of the `go.mod` files that we read from the `go.work` file. + goModFilePaths := make([]string, len(workFile.Use)) + + for i, use := range workFile.Use { + if filepath.IsAbs(use.Path) { + // TODO: This case might be problematic for some other logic (e.g. stray file detection) + goModFilePaths[i] = filepath.Join(use.Path, "go.mod") + } else { + goModFilePaths[i] = filepath.Join(filepath.Dir(workFilePath), use.Path, "go.mod") + } + } + + log.Printf("%s uses the following Go modules:\n%s\n", workFilePath, strings.Join(goModFilePaths, "\n")) + + return GoWorkspace{ + BaseDir: baseDir, + WorkspaceFile: workFile, + Modules: LoadGoModules(goModFilePaths), + DepMode: GoGetWithModules, + ModMode: ModReadonly, // Workspaces only support "readonly" + } +} + +// Analyse the working directory to discover workspaces. +func discoverWorkspaces(emitDiagnostics bool) []GoWorkspace { + // Try to find any `go.work` files which may exist in the working directory. + goWorkFiles := findGoWorkFiles() + + if len(goWorkFiles) == 0 { + // There is no `go.work` file. Find all `go.mod` files in the working directory. + log.Println("Found no go.work files in the workspace; looking for go.mod files...") + + goModFiles := findGoModFiles(".") + + // Return a separate workspace for each `go.mod` file that we found. + results := make([]GoWorkspace, len(goModFiles)) + + for i, goModFile := range goModFiles { + results[i] = GoWorkspace{ + BaseDir: filepath.Dir(goModFile), + Modules: LoadGoModules([]string{goModFile}), + DepMode: GoGetWithModules, + ModMode: getModMode(GoGetWithModules, filepath.Dir(goModFile)), + } + } + + return results + } else { + // We have found `go.work` files, try to load them all. + log.Printf("Found go.work file(s) in: %s.\n", strings.Join(goWorkFiles, ", ")) + + if emitDiagnostics { + diagnostics.EmitGoWorkFound(goWorkFiles) + } + + results := make([]GoWorkspace, len(goWorkFiles)) + for i, workFilePath := range goWorkFiles { + results[i] = discoverWorkspace(workFilePath) + } + + // Add all stray `go.mod` files (i.e. those not referenced by `go.work` files) + // as separate workspaces. + goModFiles := findGoModFiles(".") + + for _, goModFile := range goModFiles { + // Check to see whether we already have this module file under an existing workspace. + found := false + for _, workspace := range results { + if workspace.Modules == nil { + break + } + + for _, module := range workspace.Modules { + if module.Path == goModFile { + found = true + break + } + } + + if found { + break + } + } + + // If not, add it to the array. + if !found { + log.Printf("Module %s is not referenced by any go.work file; adding it separately.\n", goModFile) + results = append(results, GoWorkspace{ + BaseDir: filepath.Dir(goModFile), + Modules: LoadGoModules([]string{goModFile}), + DepMode: GoGetWithModules, + ModMode: getModMode(GoGetWithModules, filepath.Dir(goModFile)), + }) + } + } + + return results + } +} + +// Discovers Go workspaces in the current working directory. +// Returns an array of Go workspaces and the total number of module files which we discovered. +func getBuildRoots(emitDiagnostics bool) (goWorkspaces []GoWorkspace, totalModuleFiles int) { + goWorkspaces = discoverWorkspaces(emitDiagnostics) + + // Determine the total number of `go.mod` files that we discovered. + totalModuleFiles = 0 + + for _, goWorkspace := range goWorkspaces { + totalModuleFiles += len(goWorkspace.Modules) + } + + // If there are no `go.mod` files at all, create one in line with https://go.dev/blog/migrating-to-go-modules + if totalModuleFiles == 0 { + // Check for other, legacy package managers + if util.FileExists("Gopkg.toml") { + if emitDiagnostics { + diagnostics.EmitGopkgTomlFound() + } + log.Println("Found Gopkg.toml, using dep instead of go get") + goWorkspaces = []GoWorkspace{{ + BaseDir: ".", + DepMode: Dep, + ModMode: ModUnset, + }} + totalModuleFiles = 0 + return + } + + if util.FileExists("glide.yaml") { + if emitDiagnostics { + diagnostics.EmitGlideYamlFound() + } + log.Println("Found glide.yaml, using Glide instead of go get") + goWorkspaces = []GoWorkspace{{ + BaseDir: ".", + DepMode: Glide, + ModMode: ModUnset, + }} + totalModuleFiles = 0 + return + } + + // If we have no `go.mod` files, then the project appears to be a legacy project without + // a `go.mod` file. Check that there are actually Go source files before initializing a module + // so that we correctly fail the extraction later. + if !util.FindGoFiles(".") { + goWorkspaces = []GoWorkspace{{ + BaseDir: ".", + DepMode: GoGetNoModules, + ModMode: ModUnset, + }} + totalModuleFiles = 0 + return + } + + goWorkspaces = []GoWorkspace{{ + BaseDir: ".", + DepMode: GoGetNoModules, + ModMode: getModMode(GoGetWithModules, "."), + }} + totalModuleFiles = 0 + return + } + + // Get the paths to all `go.mod` files + i := 0 + goModPaths := make([]string, totalModuleFiles) + + for _, goWorkspace := range goWorkspaces { + for _, goModule := range goWorkspace.Modules { + goModPaths[i] = goModule.Path + i++ + } + } + + goModDirs := util.GetParentDirs(goModPaths) + straySourceFiles := util.GoFilesOutsideDirs(".", goModDirs...) + if len(straySourceFiles) > 0 { if emitDiagnostics { diagnostics.EmitGoFilesOutsideGoModules(goModPaths) } - baseDir = "." - useGoMod = false + + // We need to initialise Go modules for the stray source files. Our goal is to initialise + // as few Go modules as possible, in locations which do not overlap with existing Go + // modules. + for _, straySourceFile := range straySourceFiles { + path := "." + components := strings.Split(filepath.Dir(straySourceFile), string(os.PathSeparator)) + + for _, component := range components { + path = filepath.Join(path, component) + + // Try to initialize a `go.mod` file automatically for the stray source files. + if !slices.Contains(goModDirs, path) { + goWorkspaces = append(goWorkspaces, GoWorkspace{ + BaseDir: path, + DepMode: GoGetNoModules, + ModMode: ModUnset, + }) + goModDirs = append(goModDirs, path) + break + } + } + } + return } - if len(goModPaths) > 1 { - // currently not supported - baseDir = "." - commonRoot, nested := checkDirsNested(goModDirs) - if nested && commonRoot == "" { - useGoMod = true - } else { - useGoMod = false - } - if emitDiagnostics { + + // If we are emitted diagnostics, report some details about the workspace structure. + if emitDiagnostics { + if totalModuleFiles > 1 { + _, nested := checkDirsNested(goModDirs) + if nested { diagnostics.EmitMultipleGoModFoundNested(goModPaths) } else { diagnostics.EmitMultipleGoModFoundNotNested(goModPaths) } - } - return - } - if emitDiagnostics { - if goModDirs[0] == "." { - diagnostics.EmitSingleRootGoModFound(goModPaths[0]) - } else { - diagnostics.EmitSingleNonRootGoModFound(goModPaths[0]) + } else if totalModuleFiles == 1 { + if goModDirs[0] == "." { + diagnostics.EmitSingleRootGoModFound(goModPaths[0]) + } else { + diagnostics.EmitSingleNonRootGoModFound(goModPaths[0]) + } } } - baseDir = goModDirs[0] - useGoMod = true + return } -// DependencyInstallerMode is an enum describing how dependencies should be installed -type DependencyInstallerMode int - -const ( - // GoGetNoModules represents dependency installation using `go get` without modules - GoGetNoModules DependencyInstallerMode = iota - // GoGetWithModules represents dependency installation using `go get` with modules - GoGetWithModules - // Dep represent dependency installation using `dep ensure` - Dep - // Glide represents dependency installation using `glide install` - Glide -) - -// Returns the appropriate DependencyInstallerMode for the current project -func getDepMode(emitDiagnostics bool) (DependencyInstallerMode, string) { - bazelPaths := util.FindAllFilesWithName(".", "BUILD", "vendor") - bazelPaths = append(bazelPaths, util.FindAllFilesWithName(".", "BUILD.bazel", "vendor")...) +// Finds Go workspaces in the current working directory. +func GetWorkspaceInfo(emitDiagnostics bool) []GoWorkspace { + bazelPaths := slices.Concat( + util.FindAllFilesWithName(".", "BUILD", "vendor"), + util.FindAllFilesWithName(".", "BUILD.bazel", "vendor"), + ) if len(bazelPaths) > 0 { // currently not supported if emitDiagnostics { @@ -115,36 +490,10 @@ func getDepMode(emitDiagnostics bool) (DependencyInstallerMode, string) { } } - goWorkPaths := util.FindAllFilesWithName(".", "go.work", "vendor") - if len(goWorkPaths) > 0 { - // currently not supported - if emitDiagnostics { - diagnostics.EmitGoWorkFound(goWorkPaths) - } - } + goWorkspaces, totalModuleFiles := getBuildRoots(emitDiagnostics) + log.Printf("Found %d go.mod file(s).\n", totalModuleFiles) - baseDir, useGoMod := findGoModFiles(emitDiagnostics) - if useGoMod { - log.Println("Found go.mod, enabling go modules") - return GoGetWithModules, baseDir - } - - if util.FileExists("Gopkg.toml") { - if emitDiagnostics { - diagnostics.EmitGopkgTomlFound() - } - log.Println("Found Gopkg.toml, using dep instead of go get") - return Dep, "." - } - - if util.FileExists("glide.yaml") { - if emitDiagnostics { - diagnostics.EmitGlideYamlFound() - } - log.Println("Found glide.yaml, using Glide instead of go get") - return Glide, "." - } - return GoGetNoModules, "." + return goWorkspaces } // ModMode corresponds to the possible values of the -mod flag for the Go compiler @@ -194,38 +543,18 @@ func getModMode(depMode DependencyInstallerMode, baseDir string) ModMode { return ModUnset } -type BuildInfo struct { - DepMode DependencyInstallerMode - ModMode ModMode - BaseDir string -} - -func GetBuildInfo(emitDiagnostics bool) BuildInfo { - depMode, baseDir := getDepMode(true) - modMode := getModMode(depMode, baseDir) - return BuildInfo{depMode, modMode, baseDir} -} - -type GoVersionInfo struct { - // The version string, if any - Version string - // A value indicating whether a version string was found - Found bool -} - // Tries to open `go.mod` and read a go directive, returning the version and whether it was found. -func TryReadGoDirective(buildInfo BuildInfo) GoVersionInfo { - if buildInfo.DepMode == GoGetWithModules { - versionRe := regexp.MustCompile(`(?m)^go[ \t\r]+([0-9]+\.[0-9]+(\.[0-9]+)?)$`) - goMod, err := os.ReadFile(filepath.Join(buildInfo.BaseDir, "go.mod")) - if err != nil { - log.Println("Failed to read go.mod to check for missing Go version") - } else { - matches := versionRe.FindSubmatch(goMod) - if matches != nil { - if len(matches) > 1 { - return GoVersionInfo{string(matches[1]), true} - } +// The version string is returned in the "1.2.3" format. +func tryReadGoDirective(path string) GoVersionInfo { + versionRe := regexp.MustCompile(`(?m)^go[ \t\r]+([0-9]+\.[0-9]+(\.[0-9]+)?)$`) + goMod, err := os.ReadFile(path) + if err != nil { + log.Println("Failed to read go.mod to check for missing Go version") + } else { + matches := versionRe.FindSubmatch(goMod) + if matches != nil { + if len(matches) > 1 { + return GoVersionInfo{string(matches[1]), true} } } } diff --git a/go/extractor/toolchain/toolchain.go b/go/extractor/toolchain/toolchain.go index 01e35bc177b..38abfd43874 100644 --- a/go/extractor/toolchain/toolchain.go +++ b/go/extractor/toolchain/toolchain.go @@ -6,6 +6,8 @@ import ( "os" "os/exec" "strings" + + "golang.org/x/mod/semver" ) // Check if Go is installed in the environment. @@ -36,6 +38,23 @@ func GetEnvGoVersion() string { return goVersion } +// Returns the current Go version in semver format, e.g. v1.14.4 +func GetEnvGoSemVer() string { + goVersion := GetEnvGoVersion() + if !strings.HasPrefix(goVersion, "go") { + log.Fatalf("Expected 'go version' output of the form 'go1.2.3'; got '%s'", goVersion) + } + // Go versions don't follow the SemVer format, but the only exception we normally care about + // is release candidates; so this is a horrible hack to convert e.g. `go1.22rc1` into `go1.22-rc1` + // which is compatible with the SemVer specification + rcIndex := strings.Index(goVersion, "rc") + if rcIndex != -1 { + return semver.Canonical("v"+goVersion[2:rcIndex]) + "-" + goVersion[rcIndex:] + } else { + return semver.Canonical("v" + goVersion[2:]) + } +} + // The 'go version' command may output warnings on separate lines before // the actual version string is printed. This function parses the output // to retrieve just the version string. @@ -47,3 +66,29 @@ func parseGoVersion(data string) string { } return strings.Fields(lastLine)[2] } + +// Returns a value indicating whether the system Go toolchain supports workspaces. +func SupportsWorkspaces() bool { + return semver.Compare(GetEnvGoSemVer(), "v1.18.0") >= 0 +} + +// Run `go mod tidy -e` in the directory given by `path`. +func TidyModule(path string) *exec.Cmd { + cmd := exec.Command("go", "mod", "tidy", "-e") + cmd.Dir = path + return cmd +} + +// Run `go mod init` in the directory given by `path`. +func InitModule(path string) *exec.Cmd { + modInit := exec.Command("go", "mod", "init", "codeql/auto-project") + modInit.Dir = path + return modInit +} + +// Constructs a command to run `go mod vendor -e` in the directory given by `path`. +func VendorModule(path string) *exec.Cmd { + modVendor := exec.Command("go", "mod", "vendor", "-e") + modVendor.Dir = path + return modVendor +} diff --git a/go/extractor/util/util.go b/go/extractor/util/util.go index 313c000d30d..b5b28089e78 100644 --- a/go/extractor/util/util.go +++ b/go/extractor/util/util.go @@ -10,6 +10,7 @@ import ( "os/exec" "path/filepath" "runtime" + "slices" "strings" ) @@ -204,13 +205,13 @@ func RunCmd(cmd *exec.Cmd) bool { in, _ := cmd.StdinPipe() err := cmd.Start() if err != nil { - log.Printf("Running %s failed, continuing anyway: %s\n", cmd.Path, err.Error()) + log.Printf("Running %s %v failed, continuing anyway: %s\n", cmd.Path, cmd.Args, err.Error()) return false } in.Close() err = cmd.Wait() if err != nil { - log.Printf("Running %s failed, continuing anyway: %s\n", cmd.Path, err.Error()) + log.Printf("Running %s %v failed, continuing anyway: %s\n", cmd.Path, cmd.Args, err.Error()) return false } @@ -319,24 +320,33 @@ func FindAllFilesWithName(root string, name string, dirsToSkip ...string) []stri return paths } -func AnyGoFilesOutsideDirs(root string, dirsToSkip ...string) bool { - found := false +// Returns an array of any Go source files in locations which do not have a `go.mod` +// file in the same directory or higher up in the file hierarchy, relative to the `root`. +func GoFilesOutsideDirs(root string, dirsToSkip ...string) []string { + result := []string{} + filepath.WalkDir(root, func(path string, d fs.DirEntry, err error) error { if err != nil { return err } - if d.IsDir() { - for _, dirToSkip := range dirsToSkip { - if path == dirToSkip { - return filepath.SkipDir - } - } + if d.IsDir() && slices.Contains(dirsToSkip, path) { + return filepath.SkipDir } if filepath.Ext(d.Name()) == ".go" { - found = true - return filepath.SkipAll + log.Printf("Found stray Go source file in %s.\n", path) + result = append(result, path) } return nil }) - return found + + return result +} + +// For every file path in the input array, return the parent directory. +func GetParentDirs(paths []string) []string { + dirs := make([]string, len(paths)) + for i, path := range paths { + dirs[i] = filepath.Dir(path) + } + return dirs } diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/test.expected b/go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/test.expected new file mode 100644 index 00000000000..abc02314890 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/test.expected @@ -0,0 +1,4 @@ +extractedFiles +| work/subdir/go.mod:0:0:0:0 | work/subdir/go.mod | +| work/subdir/test.go:0:0:0:0 | work/subdir/test.go | +#select diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/test.py b/go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/test.py index 778af4464c7..23de1b1600a 100644 --- a/go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/test.py +++ b/go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/test.py @@ -10,7 +10,7 @@ from diagnostics_test_utils import * goPath = os.path.join(os.path.abspath(os.getcwd()), ".go") os.environ['GOPATH'] = goPath os.environ['LGTM_INDEX_IMPORT_PATH'] = "test" -run_codeql_database_create([], lang="go", source="work", db=None, runFunction=runUnsuccessfully) +run_codeql_database_create([], lang="go", source="work") check_diagnostics() diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/test.ql b/go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/test.ql new file mode 100644 index 00000000000..459a4301560 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/diagnostics/go-files-found-not-processed/test.ql @@ -0,0 +1,8 @@ +import go +import semmle.go.DiagnosticsReporting + +query predicate extractedFiles(File f) { any() } + +from string msg, int sev +where reportableDiagnostics(_, msg, sev) +select msg, sev diff --git a/go/ql/integration-tests/all-platforms/go/diagnostics/unsupported-relative-path/test.py b/go/ql/integration-tests/all-platforms/go/diagnostics/unsupported-relative-path/test.py index 21a6cd40ef7..841351c4f67 100644 --- a/go/ql/integration-tests/all-platforms/go/diagnostics/unsupported-relative-path/test.py +++ b/go/ql/integration-tests/all-platforms/go/diagnostics/unsupported-relative-path/test.py @@ -10,7 +10,7 @@ from diagnostics_test_utils import * goPath = os.path.join(os.path.abspath(os.getcwd()), ".go") os.environ['GOPATH'] = goPath os.environ['GITHUB_REPOSITORY'] = "a/b" -run_codeql_database_create([], lang="go", source="work", db=None, runFunction=runUnsuccessfully) +run_codeql_database_create([], lang="go", source="work", db=None) check_diagnostics() diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-without-version/diagnostics.expected b/go/ql/integration-tests/all-platforms/go/go-mod-without-version/diagnostics.expected new file mode 100644 index 00000000000..56d774b7037 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/go-mod-without-version/diagnostics.expected @@ -0,0 +1,14 @@ +{ + "markdownMessage": "A single `go.mod` file was found.\n\n`go.mod`", + "severity": "note", + "source": { + "extractorName": "go", + "id": "go/autobuilder/single-root-go-mod-found", + "name": "A single `go.mod` file was found in the root" + }, + "visibility": { + "cliSummaryTable": false, + "statusPage": false, + "telemetry": true + } +} diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-without-version/force_sequential_test_execution b/go/ql/integration-tests/all-platforms/go/go-mod-without-version/force_sequential_test_execution new file mode 100644 index 00000000000..47ca9929099 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/go-mod-without-version/force_sequential_test_execution @@ -0,0 +1,2 @@ +# go get has been observed to sometimes fail when multiple tests try to simultaneously fetch the same package. +goget diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-without-version/src/go.mod b/go/ql/integration-tests/all-platforms/go/go-mod-without-version/src/go.mod new file mode 100644 index 00000000000..ead01aaaab6 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/go-mod-without-version/src/go.mod @@ -0,0 +1,3 @@ +require golang.org/x/net v0.0.0-20200505041828-1ed23360d12c + +module test diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-without-version/src/go.sum b/go/ql/integration-tests/all-platforms/go/go-mod-without-version/src/go.sum new file mode 100644 index 00000000000..6c5ffa613d0 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/go-mod-without-version/src/go.sum @@ -0,0 +1,7 @@ +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/net v0.0.0-20200505041828-1ed23360d12c h1:zJ0mtu4jCalhKg6Oaukv6iIkb+cOvDrajDH9DH46Q4M= +golang.org/x/net v0.0.0-20200505041828-1ed23360d12c/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-without-version/src/subdir/add.go b/go/ql/integration-tests/all-platforms/go/go-mod-without-version/src/subdir/add.go new file mode 100644 index 00000000000..910b449d808 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/go-mod-without-version/src/subdir/add.go @@ -0,0 +1,5 @@ +package subdir + +func Add(a, b int) int { + return a + b +} diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-without-version/src/test.go b/go/ql/integration-tests/all-platforms/go/go-mod-without-version/src/test.go new file mode 100644 index 00000000000..15e54322353 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/go-mod-without-version/src/test.go @@ -0,0 +1,14 @@ +package test + +import ( + "test/subdir" + + "golang.org/x/net/ipv4" +) + +func test() { + + header := ipv4.Header{} + header.Version = subdir.Add(2, 2) + +} diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-without-version/test.expected b/go/ql/integration-tests/all-platforms/go/go-mod-without-version/test.expected new file mode 100644 index 00000000000..0bdb5f221d9 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/go-mod-without-version/test.expected @@ -0,0 +1,5 @@ +extractedFiles +| src/go.mod:0:0:0:0 | src/go.mod | +| src/subdir/add.go:0:0:0:0 | src/subdir/add.go | +| src/test.go:0:0:0:0 | src/test.go | +#select diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-without-version/test.py b/go/ql/integration-tests/all-platforms/go/go-mod-without-version/test.py new file mode 100644 index 00000000000..43c7d1b38e8 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/go-mod-without-version/test.py @@ -0,0 +1,18 @@ +import os +import subprocess + +from create_database_utils import * +from diagnostics_test_utils import * + +# Set up a GOPATH relative to this test's root directory; +# we set os.environ instead of using extra_env because we +# need it to be set for the call to "go clean -modcache" later +goPath = os.path.join(os.path.abspath(os.getcwd()), ".go") +os.environ['GOPATH'] = goPath +run_codeql_database_create([], lang="go", source="src") + +check_diagnostics() + +# Clean up the temporary GOPATH to prevent Bazel failures next +# time the tests are run; see https://github.com/golang/go/issues/27161 +subprocess.call(["go", "clean", "-modcache"]) diff --git a/go/ql/integration-tests/all-platforms/go/go-mod-without-version/test.ql b/go/ql/integration-tests/all-platforms/go/go-mod-without-version/test.ql new file mode 100644 index 00000000000..459a4301560 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/go-mod-without-version/test.ql @@ -0,0 +1,8 @@ +import go +import semmle.go.DiagnosticsReporting + +query predicate extractedFiles(File f) { any() } + +from string msg, int sev +where reportableDiagnostics(_, msg, sev) +select msg, sev diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/diagnostics.expected b/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/diagnostics.expected index ed2d87ac207..9cf8eb1761f 100644 --- a/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/diagnostics.expected +++ b/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/diagnostics.expected @@ -1,17 +1,3 @@ -{ - "markdownMessage": "1 package could not be found:\n\n`subdir/subsubdir`.\n\nDefinitions in those packages may not be recognized by CodeQL, and files that use them may only be partially analyzed.\n\nCheck that the paths are correct and make sure any private packages can be accessed. If any of the packages are present in the repository then you may need a [custom build command](https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-the-codeql-workflow-for-compiled-languages).", - "severity": "warning", - "source": { - "extractorName": "go", - "id": "go/autobuilder/package-not-found", - "name": "Some packages could not be found" - }, - "visibility": { - "cliSummaryTable": true, - "statusPage": true, - "telemetry": true - } -} { "markdownMessage": "Go files were found outside of the Go modules corresponding to these `go.mod` files.\n\n`subdir/go.mod`", "severity": "note", diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/test.expected b/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/test.expected index 18120f350ef..957d2f845a4 100644 --- a/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/test.expected +++ b/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/test.expected @@ -1,2 +1,7 @@ -| Extraction failed in subdir/test.go with error cannot find package "subdir/subsubdir" in any of:\n\t(absolute path) (from $GOROOT)\n\t(absolute path) (from $GOPATH) | 2 | -| Extraction failed in subdir/test.go with error could not import subdir/subsubdir (invalid package name: "") | 2 | +extractedFiles +| src/go.mod:0:0:0:0 | src/go.mod | +| src/main.go:0:0:0:0 | src/main.go | +| src/subdir/go.mod:0:0:0:0 | src/subdir/go.mod | +| src/subdir/subsubdir/add.go:0:0:0:0 | src/subdir/subsubdir/add.go | +| src/subdir/test.go:0:0:0:0 | src/subdir/test.go | +#select diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/test.ql b/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/test.ql index e817bb2938a..459a4301560 100644 --- a/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/test.ql +++ b/go/ql/integration-tests/all-platforms/go/single-go-mod-and-go-files-not-under-it/test.ql @@ -1,6 +1,8 @@ import go import semmle.go.DiagnosticsReporting +query predicate extractedFiles(File f) { any() } + from string msg, int sev where reportableDiagnostics(_, msg, sev) select msg, sev diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/test.expected b/go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/test.expected index e69de29bb2d..0bdb5f221d9 100644 --- a/go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/test.expected +++ b/go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/test.expected @@ -0,0 +1,5 @@ +extractedFiles +| src/go.mod:0:0:0:0 | src/go.mod | +| src/subdir/add.go:0:0:0:0 | src/subdir/add.go | +| src/test.go:0:0:0:0 | src/test.go | +#select diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/test.ql b/go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/test.ql index e817bb2938a..459a4301560 100644 --- a/go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/test.ql +++ b/go/ql/integration-tests/all-platforms/go/single-go-mod-in-root/test.ql @@ -1,6 +1,8 @@ import go import semmle.go.DiagnosticsReporting +query predicate extractedFiles(File f) { any() } + from string msg, int sev where reportableDiagnostics(_, msg, sev) select msg, sev diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/test.expected b/go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/test.expected index e69de29bb2d..66ba3ef588f 100644 --- a/go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/test.expected +++ b/go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/test.expected @@ -0,0 +1,5 @@ +extractedFiles +| src/subdir/go.mod:0:0:0:0 | src/subdir/go.mod | +| src/subdir/subsubdir/add.go:0:0:0:0 | src/subdir/subsubdir/add.go | +| src/subdir/test.go:0:0:0:0 | src/subdir/test.go | +#select diff --git a/go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/test.ql b/go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/test.ql index e817bb2938a..459a4301560 100644 --- a/go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/test.ql +++ b/go/ql/integration-tests/all-platforms/go/single-go-mod-not-in-root/test.ql @@ -1,6 +1,8 @@ import go import semmle.go.DiagnosticsReporting +query predicate extractedFiles(File f) { any() } + from string msg, int sev where reportableDiagnostics(_, msg, sev) select msg, sev diff --git a/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/diagnostics.expected b/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/diagnostics.expected index dc018d92b3d..82821f25224 100644 --- a/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/diagnostics.expected +++ b/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/diagnostics.expected @@ -26,17 +26,3 @@ "telemetry": true } } -{ - "markdownMessage": "2 packages could not be found:\n\n`subdir1/subsubdir1`, `subdir2/subsubdir2`.\n\nDefinitions in those packages may not be recognized by CodeQL, and files that use them may only be partially analyzed.\n\nCheck that the paths are correct and make sure any private packages can be accessed. If any of the packages are present in the repository then you may need a [custom build command](https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-the-codeql-workflow-for-compiled-languages).", - "severity": "warning", - "source": { - "extractorName": "go", - "id": "go/autobuilder/package-not-found", - "name": "Some packages could not be found" - }, - "visibility": { - "cliSummaryTable": true, - "statusPage": true, - "telemetry": true - } -} diff --git a/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/test.expected b/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/test.expected index a2c09b1171a..ec39eb9a9dd 100644 --- a/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/test.expected +++ b/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/test.expected @@ -1,4 +1,8 @@ -| Extraction failed in modules/subdir1/test.go with error cannot find package "subdir1/subsubdir1" in any of:\n\t(absolute path) (from $GOROOT)\n\t(absolute path) (from $GOPATH) | 2 | -| Extraction failed in modules/subdir1/test.go with error could not import subdir1/subsubdir1 (invalid package name: "") | 2 | -| Extraction failed in modules/subdir2/test.go with error cannot find package "subdir2/subsubdir2" in any of:\n\t(absolute path) (from $GOROOT)\n\t(absolute path) (from $GOPATH) | 2 | -| Extraction failed in modules/subdir2/test.go with error could not import subdir2/subsubdir2 (invalid package name: "") | 2 | +extractedFiles +| src/modules/subdir1/go.mod:0:0:0:0 | src/modules/subdir1/go.mod | +| src/modules/subdir1/subsubdir1/add.go:0:0:0:0 | src/modules/subdir1/subsubdir1/add.go | +| src/modules/subdir1/test.go:0:0:0:0 | src/modules/subdir1/test.go | +| src/modules/subdir2/go.mod:0:0:0:0 | src/modules/subdir2/go.mod | +| src/modules/subdir2/subsubdir2/add.go:0:0:0:0 | src/modules/subdir2/subsubdir2/add.go | +| src/modules/subdir2/test.go:0:0:0:0 | src/modules/subdir2/test.go | +#select diff --git a/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/test.ql b/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/test.ql index e817bb2938a..459a4301560 100644 --- a/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/test.ql +++ b/go/ql/integration-tests/all-platforms/go/single-go-work-not-in-root/test.ql @@ -1,6 +1,8 @@ import go import semmle.go.DiagnosticsReporting +query predicate extractedFiles(File f) { any() } + from string msg, int sev where reportableDiagnostics(_, msg, sev) select msg, sev diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/diagnostics.expected b/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/diagnostics.expected index 226eb35d3ab..8d84d3efe44 100644 --- a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/diagnostics.expected +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/diagnostics.expected @@ -12,17 +12,3 @@ "telemetry": true } } -{ - "markdownMessage": "2 packages could not be found:\n\n`test/subdir2`, `subdir1/subsubdir1`.\n\nDefinitions in those packages may not be recognized by CodeQL, and files that use them may only be partially analyzed.\n\nCheck that the paths are correct and make sure any private packages can be accessed. If any of the packages are present in the repository then you may need a [custom build command](https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-the-codeql-workflow-for-compiled-languages).", - "severity": "warning", - "source": { - "extractorName": "go", - "id": "go/autobuilder/package-not-found", - "name": "Some packages could not be found" - }, - "visibility": { - "cliSummaryTable": true, - "statusPage": true, - "telemetry": true - } -} diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/test.expected b/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/test.expected index 38b4f954433..c19a77a7547 100644 --- a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/test.expected +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/test.expected @@ -1,4 +1,8 @@ -| Extraction failed in subdir0/subdir1/test.go with error cannot find package "subdir1/subsubdir1" in any of:\n\t(absolute path) (from $GOROOT)\n\t(absolute path) (from $GOPATH) | 2 | -| Extraction failed in subdir0/subdir1/test.go with error could not import subdir1/subsubdir1 (invalid package name: "") | 2 | -| Extraction failed in subdir0/test.go with error cannot find package "test/subdir2" in any of:\n\t(absolute path) (from $GOROOT)\n\t(absolute path) (from $GOPATH) | 2 | -| Extraction failed in subdir0/test.go with error could not import test/subdir2 (invalid package name: "") | 2 | +extractedFiles +| src/subdir0/go.mod:0:0:0:0 | src/subdir0/go.mod | +| src/subdir0/subdir1/go.mod:0:0:0:0 | src/subdir0/subdir1/go.mod | +| src/subdir0/subdir1/subsubdir1/add.go:0:0:0:0 | src/subdir0/subdir1/subsubdir1/add.go | +| src/subdir0/subdir1/test.go:0:0:0:0 | src/subdir0/subdir1/test.go | +| src/subdir0/subdir2/add.go:0:0:0:0 | src/subdir0/subdir2/add.go | +| src/subdir0/test.go:0:0:0:0 | src/subdir0/test.go | +#select diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/test.ql b/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/test.ql index e817bb2938a..459a4301560 100644 --- a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/test.ql +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-none-in-root/test.ql @@ -1,6 +1,8 @@ import go import semmle.go.DiagnosticsReporting +query predicate extractedFiles(File f) { any() } + from string msg, int sev where reportableDiagnostics(_, msg, sev) select msg, sev diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/test.expected b/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/test.expected index e69de29bb2d..d3e7328fe5a 100644 --- a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/test.expected +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/test.expected @@ -0,0 +1,8 @@ +extractedFiles +| src/go.mod:0:0:0:0 | src/go.mod | +| src/subdir1/go.mod:0:0:0:0 | src/subdir1/go.mod | +| src/subdir1/subsubdir1/add.go:0:0:0:0 | src/subdir1/subsubdir1/add.go | +| src/subdir1/test.go:0:0:0:0 | src/subdir1/test.go | +| src/subdir2/add.go:0:0:0:0 | src/subdir2/add.go | +| src/test.go:0:0:0:0 | src/test.go | +#select diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/test.ql b/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/test.ql index e817bb2938a..459a4301560 100644 --- a/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/test.ql +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-nested-one-in-root/test.ql @@ -1,6 +1,8 @@ import go import semmle.go.DiagnosticsReporting +query predicate extractedFiles(File f) { any() } + from string msg, int sev where reportableDiagnostics(_, msg, sev) select msg, sev diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/diagnostics.expected b/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/diagnostics.expected index e07da8154d4..bb26aa9aca4 100644 --- a/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/diagnostics.expected +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/diagnostics.expected @@ -12,17 +12,3 @@ "telemetry": true } } -{ - "markdownMessage": "2 packages could not be found:\n\n`subdir1/subsubdir1`, `subdir2/subsubdir2`.\n\nDefinitions in those packages may not be recognized by CodeQL, and files that use them may only be partially analyzed.\n\nCheck that the paths are correct and make sure any private packages can be accessed. If any of the packages are present in the repository then you may need a [custom build command](https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-the-codeql-workflow-for-compiled-languages).", - "severity": "warning", - "source": { - "extractorName": "go", - "id": "go/autobuilder/package-not-found", - "name": "Some packages could not be found" - }, - "visibility": { - "cliSummaryTable": true, - "statusPage": true, - "telemetry": true - } -} diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/test.expected b/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/test.expected index 8435a54f44a..917ad8beba8 100644 --- a/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/test.expected +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/test.expected @@ -1,4 +1,8 @@ -| Extraction failed in subdir1/test.go with error cannot find package "subdir1/subsubdir1" in any of:\n\t(absolute path) (from $GOROOT)\n\t(absolute path) (from $GOPATH) | 2 | -| Extraction failed in subdir1/test.go with error could not import subdir1/subsubdir1 (invalid package name: "") | 2 | -| Extraction failed in subdir2/test.go with error cannot find package "subdir2/subsubdir2" in any of:\n\t(absolute path) (from $GOROOT)\n\t(absolute path) (from $GOPATH) | 2 | -| Extraction failed in subdir2/test.go with error could not import subdir2/subsubdir2 (invalid package name: "") | 2 | +extractedFiles +| src/subdir1/go.mod:0:0:0:0 | src/subdir1/go.mod | +| src/subdir1/subsubdir1/add.go:0:0:0:0 | src/subdir1/subsubdir1/add.go | +| src/subdir1/test.go:0:0:0:0 | src/subdir1/test.go | +| src/subdir2/go.mod:0:0:0:0 | src/subdir2/go.mod | +| src/subdir2/subsubdir2/add.go:0:0:0:0 | src/subdir2/subsubdir2/add.go | +| src/subdir2/test.go:0:0:0:0 | src/subdir2/test.go | +#select diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/test.ql b/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/test.ql index e817bb2938a..459a4301560 100644 --- a/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/test.ql +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-not-nested/test.ql @@ -1,6 +1,8 @@ import go import semmle.go.DiagnosticsReporting +query predicate extractedFiles(File f) { any() } + from string msg, int sev where reportableDiagnostics(_, msg, sev) select msg, sev diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/diagnostics.expected b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/diagnostics.expected new file mode 100644 index 00000000000..02805a60c99 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/diagnostics.expected @@ -0,0 +1,28 @@ +{ + "markdownMessage": "2 `go.mod` files were found:\n\n`subdir1/go.mod`, `subdir2/go.mod`", + "severity": "note", + "source": { + "extractorName": "go", + "id": "go/autobuilder/multiple-go-mod-found-not-nested", + "name": "Multiple `go.mod` files found, not all nested under one root `go.mod` file" + }, + "visibility": { + "cliSummaryTable": false, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "The following 1 Go project could not be extracted successfully:\n\n`subdir2`\n", + "severity": "warning", + "source": { + "extractorName": "go", + "id": "go/autobuilder/extraction-failed-for-project", + "name": "Unable to extract 1 Go projects" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/force_sequential_test_execution b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/force_sequential_test_execution new file mode 100644 index 00000000000..47ca9929099 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/force_sequential_test_execution @@ -0,0 +1,2 @@ +# go get has been observed to sometimes fail when multiple tests try to simultaneously fetch the same package. +goget diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir1/go.mod b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir1/go.mod new file mode 100644 index 00000000000..147c51b8386 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir1/go.mod @@ -0,0 +1,5 @@ +go 1.14 + +require golang.org/x/net v0.0.0-20200505041828-1ed23360d12c + +module subdir1 diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir1/go.sum b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir1/go.sum new file mode 100644 index 00000000000..6c5ffa613d0 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir1/go.sum @@ -0,0 +1,7 @@ +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/net v0.0.0-20200505041828-1ed23360d12c h1:zJ0mtu4jCalhKg6Oaukv6iIkb+cOvDrajDH9DH46Q4M= +golang.org/x/net v0.0.0-20200505041828-1ed23360d12c/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir1/subsubdir1/add.go b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir1/subsubdir1/add.go new file mode 100644 index 00000000000..900c2b5f266 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir1/subsubdir1/add.go @@ -0,0 +1,5 @@ +package subsubdir1 + +func Add(a, b int) int { + return a + b +} diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir1/test.go b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir1/test.go new file mode 100644 index 00000000000..6081be52248 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir1/test.go @@ -0,0 +1,14 @@ +package subdir + +import ( + "subdir1/subsubdir1" + + "golang.org/x/net/ipv4" +) + +func test() { + + header := ipv4.Header{} + header.Version = subsubdir1.Add(2, 2) + +} diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir2/go.mod b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir2/go.mod new file mode 100644 index 00000000000..7a2ca787004 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir2/go.mod @@ -0,0 +1,7 @@ +go 1.14 + +require ( + github.com/microsoft/go-mssqldb v0.12.0 +) + +module subdir2 diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir2/go.sum b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir2/go.sum new file mode 100644 index 00000000000..432407e3db0 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir2/go.sum @@ -0,0 +1,30 @@ +github.com/Azure/go-autorest v13.3.2+incompatible h1:VxzPyuhtnlBOzc4IWCZHqpyH2d+QMLQEuy3wREyY4oc= +github.com/Azure/go-autorest/autorest v0.9.0 h1:MRvx8gncNaXJqOoLmhNjUAKh33JJF8LyxPhomEtOsjs= +github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest v0.9.4 h1:1cM+NmKw91+8h5vfjgzK4ZGLuN72k87XVZBWyGwNjUM= +github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= +github.com/Azure/go-autorest/autorest/adal v0.8.1 h1:pZdL8o72rK+avFWl+p9nE8RWi1JInZrWJYlnpfXJwHk= +github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM= +github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= +github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/microsoft/go-mssqldb v0.0.0-20191128021309-1d7a30a10f73 h1:OGNva6WhsKst5OZf7eZOklDztV3hwtTHovdrLHV+MsA= +github.com/microsoft/go-mssqldb v0.0.0-20191128021309-1d7a30a10f73/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413 h1:ULYEB3JvPRE/IfO+9uO7vKV/xzVTO7XPAwm8xbf4w2g= +golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir2/subsubdir2/add.go b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir2/subsubdir2/add.go new file mode 100644 index 00000000000..99810d11db0 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir2/subsubdir2/add.go @@ -0,0 +1,5 @@ +package subsubdir2 + +func Add(a, b int) int { + return a + b +} diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir2/test.go b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir2/test.go new file mode 100644 index 00000000000..29ea91b58df --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/src/subdir2/test.go @@ -0,0 +1,12 @@ +package subdir + +import ( + mssql "github.com/microsoft/go-mssqldb" +) + +func test() { + connString := "hello" + connector, err := mssql.NewAccessTokenConnector( + connString, nil) + +} diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/test.expected b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/test.expected new file mode 100644 index 00000000000..8d83defa1bb --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/test.expected @@ -0,0 +1,5 @@ +extractedFiles +| src/subdir1/go.mod:0:0:0:0 | src/subdir1/go.mod | +| src/subdir1/subsubdir1/add.go:0:0:0:0 | src/subdir1/subsubdir1/add.go | +| src/subdir1/test.go:0:0:0:0 | src/subdir1/test.go | +#select diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/test.py b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/test.py new file mode 100644 index 00000000000..43c7d1b38e8 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/test.py @@ -0,0 +1,18 @@ +import os +import subprocess + +from create_database_utils import * +from diagnostics_test_utils import * + +# Set up a GOPATH relative to this test's root directory; +# we set os.environ instead of using extra_env because we +# need it to be set for the call to "go clean -modcache" later +goPath = os.path.join(os.path.abspath(os.getcwd()), ".go") +os.environ['GOPATH'] = goPath +run_codeql_database_create([], lang="go", source="src") + +check_diagnostics() + +# Clean up the temporary GOPATH to prevent Bazel failures next +# time the tests are run; see https://github.com/golang/go/issues/27161 +subprocess.call(["go", "clean", "-modcache"]) diff --git a/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/test.ql b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/test.ql new file mode 100644 index 00000000000..459a4301560 --- /dev/null +++ b/go/ql/integration-tests/all-platforms/go/two-go-mods-one-failure/test.ql @@ -0,0 +1,8 @@ +import go +import semmle.go.DiagnosticsReporting + +query predicate extractedFiles(File f) { any() } + +from string msg, int sev +where reportableDiagnostics(_, msg, sev) +select msg, sev diff --git a/go/ql/lib/change-notes/2024-03-04-autobuilder-changes.md b/go/ql/lib/change-notes/2024-03-04-autobuilder-changes.md new file mode 100644 index 00000000000..0442a571029 --- /dev/null +++ b/go/ql/lib/change-notes/2024-03-04-autobuilder-changes.md @@ -0,0 +1,5 @@ +--- +category: majorAnalysis +--- +* We have significantly improved the Go autobuilder to understand a greater range of project layouts, which allows Go source files to be analysed that could previously not be processed. +* Go 1.22 has been included in the range of supported Go versions. diff --git a/go/ql/lib/change-notes/2024-03-04-macaron-sources.md b/go/ql/lib/change-notes/2024-03-04-macaron-sources.md new file mode 100644 index 00000000000..72ea242510d --- /dev/null +++ b/go/ql/lib/change-notes/2024-03-04-macaron-sources.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added dataflow sources for the package `gopkg.in/macaron.v1`. diff --git a/go/ql/lib/ext/gopkg.in.macaron.model.yml b/go/ql/lib/ext/gopkg.in.macaron.model.yml index c0c0de87267..10846d4e8b6 100644 --- a/go/ql/lib/ext/gopkg.in.macaron.model.yml +++ b/go/ql/lib/ext/gopkg.in.macaron.model.yml @@ -1,4 +1,20 @@ extensions: + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["gopkg.in/macaron", "Context", True, "AllParams", "", "", "ReturnValue", "remote", "manual"] + - ["gopkg.in/macaron", "Context", True, "GetCookie", "", "", "ReturnValue", "remote", "manual"] + - ["gopkg.in/macaron", "Context", True, "GetSecureCookie", "", "", "ReturnValue[0]", "remote", "manual"] + - ["gopkg.in/macaron", "Context", True, "GetSuperSecureCookie", "", "", "ReturnValue[0]", "remote", "manual"] + - ["gopkg.in/macaron", "Context", True, "GetFile", "", "", "ReturnValue[0]", "remote", "manual"] + - ["gopkg.in/macaron", "Context", True, "Params", "", "", "ReturnValue", "remote", "manual"] + - ["gopkg.in/macaron", "Context", True, "ParamsEscape", "", "", "ReturnValue", "remote", "manual"] + - ["gopkg.in/macaron", "Context", True, "Query", "", "", "ReturnValue", "remote", "manual"] + - ["gopkg.in/macaron", "Context", True, "QueryEscape", "", "", "ReturnValue", "remote", "manual"] + - ["gopkg.in/macaron", "Context", True, "QueryStrings", "", "", "ReturnValue", "remote", "manual"] + - ["gopkg.in/macaron", "RequestBody", True, "Bytes", "", "", "ReturnValue[0]", "remote", "manual"] + - ["gopkg.in/macaron", "RequestBody", True, "String", "", "", "ReturnValue[0]", "remote", "manual"] - addsTo: pack: codeql/go-all extensible: summaryModel diff --git a/go/ql/lib/semmle/go/DiagnosticsReporting.qll b/go/ql/lib/semmle/go/DiagnosticsReporting.qll index 653e3ad7c5e..e05fe0e7a58 100644 --- a/go/ql/lib/semmle/go/DiagnosticsReporting.qll +++ b/go/ql/lib/semmle/go/DiagnosticsReporting.qll @@ -1,6 +1,7 @@ /** Provides classes for working with errors and warnings recorded during extraction. */ import go +private import semmle.go.internal.Locations /** Gets the SARIF severity level that indicates an error. */ private int getErrorSeverity() { result = 2 } @@ -29,7 +30,7 @@ private class Diagnostic extends @diagnostic { * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { - exists(Location l | diagnostics(this, _, _, _, _, l) | l.hasLocationInfo(path, sl, sc, el, ec)) + getDiagnosticLocation(this).hasLocationInfo(path, sl, sc, el, ec) } string toString() { result = this.getMessage() } diff --git a/go/ql/lib/semmle/go/Files.qll b/go/ql/lib/semmle/go/Files.qll index 87e3fd3169d..cda168482ca 100644 --- a/go/ql/lib/semmle/go/Files.qll +++ b/go/ql/lib/semmle/go/Files.qll @@ -50,8 +50,6 @@ class Folder extends Container, Impl::Folder { class ExtractedOrExternalFile extends Container, Impl::File, Documentable, ExprParent, GoModExprParent, DeclParent, ScopeNode { - override Location getLocation() { has_location(this, result) } - /** Gets the number of lines in this file. */ int getNumberOfLines() { numlines(this, result, _, _) } diff --git a/go/ql/lib/semmle/go/HTML.qll b/go/ql/lib/semmle/go/HTML.qll index c68155fd01c..2f0e411a88d 100644 --- a/go/ql/lib/semmle/go/HTML.qll +++ b/go/ql/lib/semmle/go/HTML.qll @@ -15,8 +15,6 @@ module HTML { class Element extends Locatable, @xmlelement { Element() { exists(HtmlFile f | xmlElements(this, _, _, _, f)) } - override Location getLocation() { xmllocations(this, result) } - /** * Gets the name of this HTML element. * @@ -97,8 +95,6 @@ module HTML { class Attribute extends Locatable, @xmlattribute { Attribute() { xmlAttrs(this, _, _, _, _, any(HtmlFile f)) } - override Location getLocation() { xmllocations(this, result) } - /** * Gets the element to which this attribute belongs. */ @@ -180,8 +176,6 @@ module HTML { * Holds if this text node is inside a `CDATA` tag. */ predicate isCData() { xmlChars(this, _, _, _, 1, _) } - - override Location getLocation() { xmllocations(this, result) } } /** @@ -203,7 +197,5 @@ module HTML { string getText() { result = this.toString().regexpCapture("(?s)<!--(.*)-->", 1) } override string toString() { xmlComments(this, result, _, _) } - - override Location getLocation() { xmllocations(this, result) } } } diff --git a/go/ql/lib/semmle/go/Locations.qll b/go/ql/lib/semmle/go/Locations.qll index acd5f94430b..d5ab0858f21 100644 --- a/go/ql/lib/semmle/go/Locations.qll +++ b/go/ql/lib/semmle/go/Locations.qll @@ -1,28 +1,31 @@ /** Provides classes for working with locations and program elements that have locations. */ import go +private import internal.Locations /** * A location as given by a file, a start line, a start column, * an end line, and an end column. * + * This class is restricted to locations created by the extractor. + * * For more information about locations see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ -class Location extends @location { +class DbLocation extends TDbLocation { /** Gets the file for this location. */ - File getFile() { locations_default(this, result, _, _, _, _) } + File getFile() { dbLocationInfo(this, result, _, _, _, _) } /** Gets the 1-based line number (inclusive) where this location starts. */ - int getStartLine() { locations_default(this, _, result, _, _, _) } + int getStartLine() { dbLocationInfo(this, _, result, _, _, _) } /** Gets the 1-based column number (inclusive) where this location starts. */ - int getStartColumn() { locations_default(this, _, _, result, _, _) } + int getStartColumn() { dbLocationInfo(this, _, _, result, _, _) } /** Gets the 1-based line number (inclusive) where this location ends. */ - int getEndLine() { locations_default(this, _, _, _, result, _) } + int getEndLine() { dbLocationInfo(this, _, _, _, result, _) } /** Gets the 1-based column number (inclusive) where this location ends. */ - int getEndColumn() { locations_default(this, _, _, _, _, result) } + int getEndColumn() { dbLocationInfo(this, _, _, _, _, result) } /** Gets the number of lines covered by this location. */ int getNumLines() { result = this.getEndLine() - this.getStartLine() + 1 } @@ -46,19 +49,21 @@ class Location extends @location { string filepath, int startline, int startcolumn, int endline, int endcolumn ) { exists(File f | - locations_default(this, f, startline, startcolumn, endline, endcolumn) and + dbLocationInfo(this, f, startline, startcolumn, endline, endcolumn) and filepath = f.getAbsolutePath() ) } } +final class Location = LocationImpl; + /** A program element with a location. */ class Locatable extends @locatable { /** Gets the file this program element comes from. */ File getFile() { result = this.getLocation().getFile() } /** Gets this element's location. */ - Location getLocation() { has_location(this, result) } + final DbLocation getLocation() { result = getLocatableLocation(this) } /** Gets the number of lines covered by this element. */ int getNumLines() { result = this.getLocation().getNumLines() } diff --git a/go/ql/lib/semmle/go/dataflow/DataFlow.qll b/go/ql/lib/semmle/go/dataflow/DataFlow.qll index 4a5290255a4..9363bc93abd 100644 --- a/go/ql/lib/semmle/go/dataflow/DataFlow.qll +++ b/go/ql/lib/semmle/go/dataflow/DataFlow.qll @@ -24,7 +24,7 @@ import go module DataFlow { private import semmle.go.dataflow.internal.DataFlowImplSpecific private import codeql.dataflow.DataFlow - import DataFlowMake<GoDataFlow> + import DataFlowMake<Location, GoDataFlow> import semmle.go.dataflow.internal.DataFlowImpl1 import Properties } diff --git a/go/ql/lib/semmle/go/dataflow/TaintTracking.qll b/go/ql/lib/semmle/go/dataflow/TaintTracking.qll index 2c028a0e34a..d762e925ab5 100644 --- a/go/ql/lib/semmle/go/dataflow/TaintTracking.qll +++ b/go/ql/lib/semmle/go/dataflow/TaintTracking.qll @@ -13,7 +13,8 @@ module TaintTracking { import semmle.go.dataflow.internal.tainttracking1.TaintTrackingParameter::Public private import semmle.go.dataflow.internal.DataFlowImplSpecific private import semmle.go.dataflow.internal.TaintTrackingImplSpecific + private import semmle.go.Locations private import codeql.dataflow.TaintTracking - import TaintFlowMake<GoDataFlow, GoTaintTracking> + import TaintFlowMake<Location, GoDataFlow, GoTaintTracking> import semmle.go.dataflow.internal.tainttracking1.TaintTrackingImpl } diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl.qll index b95eab3eb01..c9761d21702 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl.qll @@ -1,3 +1,4 @@ private import DataFlowImplSpecific private import codeql.dataflow.internal.DataFlowImpl -import MakeImpl<GoDataFlow> +private import semmle.go.Locations +import MakeImpl<Location, GoDataFlow> diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl1.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl1.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl1.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl1.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl2.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl2.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl2.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl2.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplCommon.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplCommon.qll index 8f8f7b0a36c..6df86bde023 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplCommon.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplCommon.qll @@ -1,3 +1,4 @@ private import DataFlowImplSpecific private import codeql.dataflow.internal.DataFlowImplCommon -import MakeImplCommon<GoDataFlow> +private import semmle.go.Locations +import MakeImplCommon<Location, GoDataFlow> diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplConsistency.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplConsistency.qll index 6397b79716b..58b84985841 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplConsistency.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplConsistency.qll @@ -7,7 +7,8 @@ private import go private import DataFlowImplSpecific private import TaintTrackingImplSpecific private import codeql.dataflow.internal.DataFlowImplConsistency +private import semmle.go.dataflow.internal.DataFlowNodes -private module Input implements InputSig<GoDataFlow> { } +private module Input implements InputSig<Location, GoDataFlow> { } -module Consistency = MakeConsistency<GoDataFlow, GoTaintTracking, Input>; +module Consistency = MakeConsistency<Location, GoDataFlow, GoTaintTracking, Input>; diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplSpecific.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplSpecific.qll index 555b09660e8..c680778ce4d 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplSpecific.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplSpecific.qll @@ -3,6 +3,7 @@ */ private import codeql.dataflow.DataFlow +private import semmle.go.Locations module Private { import DataFlowPrivate @@ -13,7 +14,7 @@ module Public { import DataFlowUtil } -module GoDataFlow implements InputSig { +module GoDataFlow implements InputSig<Location> { import Private import Public diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll index 9034e454278..6b230bc728f 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll @@ -157,6 +157,14 @@ module Public { endcolumn = 0 } + /** Gets the location of this node. */ + Location getLocation() { + exists(string filepath, int startline, int startcolumn, int endline, int endcolumn | + this.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) and + result.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + ) + } + /** Gets the file in which this node appears. */ File getFile() { this.hasLocationInfo(result.getAbsolutePath(), _, _, _, _) } diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll index e17f4cd9cd2..f750214010f 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll @@ -251,8 +251,6 @@ class DataFlowType extends TDataFlowType { string toString() { result = "" } } -class DataFlowLocation = Location; - private newtype TDataFlowCallable = TCallable(Callable c) or TFileScope(File f) or diff --git a/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll index cbf33afff25..fb09daa48ff 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll @@ -15,7 +15,7 @@ private module FlowSummaries { private import semmle.go.dataflow.FlowSummary as F } -module Input implements InputSig<DataFlowImplSpecific::GoDataFlow> { +module Input implements InputSig<Location, DataFlowImplSpecific::GoDataFlow> { class SummarizedCallableBase = Callable; ArgumentPosition callbackSelfParameterPosition() { result = -1 } @@ -83,7 +83,7 @@ module Input implements InputSig<DataFlowImplSpecific::GoDataFlow> { } } -private import Make<DataFlowImplSpecific::GoDataFlow, Input> as Impl +private import Make<Location, DataFlowImplSpecific::GoDataFlow, Input> as Impl private module StepsInput implements Impl::Private::StepsInputSig { DataFlowCall getACall(Public::SummarizedCallable sc) { @@ -95,7 +95,7 @@ private module StepsInput implements Impl::Private::StepsInputSig { } module SourceSinkInterpretationInput implements - Impl::Private::External::SourceSinkInterpretationInputSig<Location> + Impl::Private::External::SourceSinkInterpretationInputSig { class Element = SourceOrSinkElement; @@ -264,7 +264,7 @@ module Private { module External { import Impl::Private::External - import Impl::Private::External::SourceSinkInterpretation<Location, SourceSinkInterpretationInput> + import Impl::Private::External::SourceSinkInterpretation<SourceSinkInterpretationInput> } /** diff --git a/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingImplSpecific.qll b/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingImplSpecific.qll index f52499df232..b9795bb14d3 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingImplSpecific.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingImplSpecific.qll @@ -4,7 +4,8 @@ private import codeql.dataflow.TaintTracking private import DataFlowImplSpecific +private import semmle.go.Locations -module GoTaintTracking implements InputSig<GoDataFlow> { +module GoTaintTracking implements InputSig<Location, GoDataFlow> { import TaintTrackingUtil } diff --git a/go/ql/lib/semmle/go/frameworks/SQL.qll b/go/ql/lib/semmle/go/frameworks/SQL.qll index f76182fb111..1a6e2280781 100644 --- a/go/ql/lib/semmle/go/frameworks/SQL.qll +++ b/go/ql/lib/semmle/go/frameworks/SQL.qll @@ -81,18 +81,28 @@ module SQL { "github.com/lann/squirrel" ], "") | - // first argument to `squirrel.Expr` - fn.hasQualifiedName(sq, "Expr") + fn.hasQualifiedName(sq, ["Delete", "Expr", "Insert", "Select", "Update"]) or - // first argument to the `Prefix`, `Suffix` or `Where` method of one of the `*Builder` classes - exists(string builder | builder.matches("%Builder") | - fn.(Method).hasQualifiedName(sq, builder, "Prefix") or - fn.(Method).hasQualifiedName(sq, builder, "Suffix") or - fn.(Method).hasQualifiedName(sq, builder, "Where") + exists(Method m, string builder | m = fn | + builder = ["DeleteBuilder", "InsertBuilder", "SelectBuilder", "UpdateBuilder"] and + m.hasQualifiedName(sq, builder, + ["Columns", "From", "Options", "OrderBy", "Prefix", "Suffix", "Where"]) + or + builder = "InsertBuilder" and + m.hasQualifiedName(sq, builder, ["Replace", "Into"]) + or + builder = "SelectBuilder" and + m.hasQualifiedName(sq, builder, + ["CrossJoin", "GroupBy", "InnerJoin", "LeftJoin", "RightJoin"]) + or + builder = "UpdateBuilder" and + m.hasQualifiedName(sq, builder, ["Set", "Table"]) ) ) and - this = fn.getACall().getArgument(0) and - this.getType().getUnderlyingType() instanceof StringType + this = fn.getACall().getArgument(0) + | + this.getType().getUnderlyingType() instanceof StringType or + this.getType().getUnderlyingType().(SliceType).getElementType() instanceof StringType ) } } diff --git a/go/ql/lib/semmle/go/internal/Locations.qll b/go/ql/lib/semmle/go/internal/Locations.qll new file mode 100644 index 00000000000..498ac9d1170 --- /dev/null +++ b/go/ql/lib/semmle/go/internal/Locations.qll @@ -0,0 +1,143 @@ +/** Provides classes for working with locations and program elements that have locations. */ + +import go + +// Should _not_ be cached, as that would require the data flow stage to be evaluated +// in order to evaluate the AST stage. Ideally, we would cache each injector separately, +// but that's not possible. Instead, we cache all predicates that need the injectors +// to be tuple numbered. +newtype TLocation = + TDbLocation(@location loc) or + TSynthLocation(string filepath, int startline, int startcolumn, int endline, int endcolumn) { + any(DataFlow::Node n).hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) and + // avoid overlap with existing DB locations + not exists(File f | + locations_default(_, f, startline, startcolumn, endline, endcolumn) and + f.getAbsolutePath() = filepath + ) + } + +/** + * A location as given by a file, a start line, a start column, + * an end line, and an end column. + * + * For more information about locations see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +abstract class LocationImpl extends TLocation { + /** Gets the file for this location. */ + abstract File getFile(); + + /** Gets the 1-based line number (inclusive) where this location starts. */ + abstract int getStartLine(); + + /** Gets the 1-based column number (inclusive) where this location starts. */ + abstract int getStartColumn(); + + /** Gets the 1-based line number (inclusive) where this location ends. */ + abstract int getEndLine(); + + /** Gets the 1-based column number (inclusive) where this location ends. */ + abstract int getEndColumn(); + + /** Gets the number of lines covered by this location. */ + int getNumLines() { result = this.getEndLine() - this.getStartLine() + 1 } + + /** Gets a textual representation of this element. */ + string toString() { + exists(string filepath, int startline, int startcolumn, int endline, int endcolumn | + this.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) and + result = filepath + "@" + startline + ":" + startcolumn + ":" + endline + ":" + endcolumn + ) + } + + /** + * Holds if this element is at the specified location. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `filepath`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ + abstract predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ); +} + +class DbLocationImpl extends LocationImpl instanceof DbLocation { + private @location loc; + + DbLocationImpl() { this = TDbLocation(loc) } + + override File getFile() { result = DbLocation.super.getFile() } + + override int getStartLine() { result = DbLocation.super.getStartLine() } + + override int getStartColumn() { result = DbLocation.super.getStartColumn() } + + override int getEndLine() { result = DbLocation.super.getEndLine() } + + override int getEndColumn() { result = DbLocation.super.getEndColumn() } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + DbLocation.super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } +} + +class SynthLocationImpl extends LocationImpl, TSynthLocation { + override File getFile() { synthLocationInfo(this, result.getAbsolutePath(), _, _, _, _) } + + override int getStartLine() { synthLocationInfo(this, _, result, _, _, _) } + + override int getStartColumn() { synthLocationInfo(this, _, _, result, _, _) } + + override int getEndLine() { synthLocationInfo(this, _, _, _, result, _) } + + override int getEndColumn() { synthLocationInfo(this, _, _, _, _, result) } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + synthLocationInfo(this, filepath, startline, startcolumn, endline, endcolumn) + } +} + +cached +private module Cached { + cached + DbLocation getLocatableLocation(@locatable l) { + exists(@location loc | + has_location(l, loc) or + xmllocations(l, loc) + | + result = TDbLocation(loc) + ) + } + + cached + DbLocation getDiagnosticLocation(@diagnostic d) { + exists(@location loc | + diagnostics(d, _, _, _, _, loc) and + result = TDbLocation(loc) + ) + } + + cached + predicate dbLocationInfo( + DbLocation l, File f, int startline, int startcolumn, int endline, int endcolumn + ) { + exists(@location loc | + l = TDbLocation(loc) and + locations_default(loc, f, startline, startcolumn, endline, endcolumn) + ) + } +} + +import Cached + +cached +private predicate synthLocationInfo( + SynthLocationImpl l, string filepath, int startline, int startcolumn, int endline, int endcolumn +) { + l = TSynthLocation(filepath, startline, startcolumn, endline, endcolumn) +} diff --git a/go/ql/lib/semmle/go/security/HardcodedCredentials.qll b/go/ql/lib/semmle/go/security/HardcodedCredentials.qll index 84c426ac317..0be50fc2306 100644 --- a/go/ql/lib/semmle/go/security/HardcodedCredentials.qll +++ b/go/ql/lib/semmle/go/security/HardcodedCredentials.qll @@ -37,11 +37,7 @@ module HardcodedCredentials { /** A hardcoded string literal as a source for hardcoded credentials. */ private class HardcodedStringSource extends Source { - HardcodedStringSource() { - exists(StringLit val | this.asExpr() = val | - not PasswordHeuristics::isDummyPassword(val.getStringValue()) - ) - } + HardcodedStringSource() { this.asExpr() instanceof StringLit } } /** A use of a credential. */ diff --git a/go/ql/lib/semmle/go/security/SensitiveActions.qll b/go/ql/lib/semmle/go/security/SensitiveActions.qll index 6430ddb8cac..3fd96191758 100644 --- a/go/ql/lib/semmle/go/security/SensitiveActions.qll +++ b/go/ql/lib/semmle/go/security/SensitiveActions.qll @@ -233,6 +233,7 @@ module PasswordHeuristics { predicate isDummyPassword(string password) { password.length() < 4 or + password.length() <= 100 and count(password.charAt(_)) <= 2 // aaaaaaaa or bBbBbB or ghghghghghgh or the like or password diff --git a/go/ql/lib/semmle/go/security/UncontrolledAllocationSize.qll b/go/ql/lib/semmle/go/security/UncontrolledAllocationSize.qll new file mode 100644 index 00000000000..885aa7a7053 --- /dev/null +++ b/go/ql/lib/semmle/go/security/UncontrolledAllocationSize.qll @@ -0,0 +1,34 @@ +/** + * Provides a taint-tracking configuration for reasoning about uncontrolled allocation size issues. + */ + +import go + +/** + * Provides a taint-tracking flow for reasoning about uncontrolled allocation size issues. + */ +module UncontrolledAllocationSize { + private import UncontrolledAllocationSizeCustomizations::UncontrolledAllocationSize + + /** + * Module for defining predicates and tracking taint flow related to uncontrolled allocation size issues. + */ + module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof Source } + + predicate isSink(DataFlow::Node sink) { sink instanceof Sink } + + predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(Function f, DataFlow::CallNode cn | cn = f.getACall() | + f.hasQualifiedName("strconv", ["Atoi", "ParseInt", "ParseUint", "ParseFloat"]) and + node1 = cn.getArgument(0) and + node2 = cn.getResult(0) + ) + } + } + + /** Tracks taint flow for reasoning about uncontrolled allocation size issues. */ + module Flow = TaintTracking::Global<Config>; +} diff --git a/go/ql/lib/semmle/go/security/UncontrolledAllocationSizeCustomizations.qll b/go/ql/lib/semmle/go/security/UncontrolledAllocationSizeCustomizations.qll new file mode 100644 index 00000000000..1237971dde1 --- /dev/null +++ b/go/ql/lib/semmle/go/security/UncontrolledAllocationSizeCustomizations.qll @@ -0,0 +1,33 @@ +/** + * Provides default sources, sinks, and sanitizers for reasoning about uncontrolled allocation size issues, + * as well as extension points for adding your own. + */ + +import go +private import semmle.go.security.AllocationSizeOverflow + +/** + * Provides extension points for customizing the taint-tracking configuration for reasoning + * about uncontrolled allocation size issues. + */ +module UncontrolledAllocationSize { + /** A data flow source for uncontrolled allocation size vulnerabilities. */ + abstract class Source extends DataFlow::Node { } + + /** A data flow sink for uncontrolled allocation size vulnerabilities. */ + abstract class Sink extends DataFlow::Node { } + + /** A sanitizer for uncontrolled allocation size vulnerabilities. */ + abstract class Sanitizer extends DataFlow::Node { } + + /** A source of untrusted data, considered as a taint source for uncontrolled size allocation vulnerabilities. */ + private class UntrustedFlowAsSource extends Source instanceof UntrustedFlowSource { } + + /** The size argument of a memory allocation function. */ + private class AllocationSizeAsSink extends Sink instanceof AllocationSizeOverflow::AllocationSize { + } + + /** A check that a value is below some upper limit. */ + private class SizeCheckSanitizer extends Sanitizer instanceof AllocationSizeOverflow::AllocationSizeCheckBarrier + { } +} diff --git a/go/ql/src/Security/CWE-020/IncompleteHostnameRegexp.qhelp b/go/ql/src/Security/CWE-020/IncompleteHostnameRegexp.qhelp index cf4655dbae5..21368fca81b 100644 --- a/go/ql/src/Security/CWE-020/IncompleteHostnameRegexp.qhelp +++ b/go/ql/src/Security/CWE-020/IncompleteHostnameRegexp.qhelp @@ -41,6 +41,10 @@ domain such as <code>wwwXexample.com</code>. Address this vulnerability by escaping <code>.</code> appropriately: </p> <sample src="IncompleteHostnameRegexpGood.go"/> +<p> +You may also want to consider using raw string literals to avoid having to escape backslashes: +</p> +<sample src="IncompleteHostnameRegexpGood2.go"/> </example> <references> diff --git a/go/ql/src/Security/CWE-020/IncompleteHostnameRegexpGood2.go b/go/ql/src/Security/CWE-020/IncompleteHostnameRegexpGood2.go new file mode 100644 index 00000000000..7c5df3f6742 --- /dev/null +++ b/go/ql/src/Security/CWE-020/IncompleteHostnameRegexpGood2.go @@ -0,0 +1,16 @@ +package main + +import ( + "errors" + "net/http" + "regexp" +) + +func checkRedirectGood(req *http.Request, via []*http.Request) error { + // GOOD: the host of `req.URL` must be `example.com`, `www.example.com` or `beta.example.com` + re := `^((www|beta)\.)?example\.com/` + if matched, _ := regexp.MatchString(re, req.URL.Host); matched { + return nil + } + return errors.New("Invalid redirect") +} diff --git a/go/ql/src/Security/CWE-338/InsecureRandomness.ql b/go/ql/src/Security/CWE-338/InsecureRandomness.ql index cc6bc42be71..a66641cf1ce 100644 --- a/go/ql/src/Security/CWE-338/InsecureRandomness.ql +++ b/go/ql/src/Security/CWE-338/InsecureRandomness.ql @@ -25,7 +25,7 @@ where min(InsecureRandomness::Flow::PathNode sink2, int line | InsecureRandomness::Flow::flowPath(_, sink2) and sink2.getNode().getRoot() = sink.getNode().getRoot() and - sink2.hasLocationInfo(_, line, _, _, _) + line = sink2.getLocation().getStartLine() | sink2 order by line ) diff --git a/go/ql/src/Security/CWE-770/UncontrolledAllocationSize.qhelp b/go/ql/src/Security/CWE-770/UncontrolledAllocationSize.qhelp new file mode 100644 index 00000000000..14930944bb6 --- /dev/null +++ b/go/ql/src/Security/CWE-770/UncontrolledAllocationSize.qhelp @@ -0,0 +1,36 @@ +<!DOCTYPE qhelp PUBLIC "-//Semmle//qhelp//EN" "qhelp.dtd"> + +<qhelp> + <overview> + <p>Using untrusted input to allocate slices with the built-in <code>make</code> function could + lead to excessive memory allocation and potentially cause the program to crash due to running + out of memory. This vulnerability could be exploited to perform a denial-of-service attack by + consuming all available server resources.</p> + </overview> + + <recommendation> + <p>Implement a maximum allowed value for size allocations with the built-in <code>make</code> + function to prevent excessively large allocations.</p> + </recommendation> + + <example> + <p>In the following example snippet, the <code>n</code> parameter is user-controlled.</p> + <p>If the external user provides an excessively large value, the application allocates a slice + of size <code>n</code> without further verification, potentially exhausting all the available + memory.</p> + + <sample src="UncontrolledAllocationSizeBad.go" /> + + <p>One way to prevent this vulnerability is by implementing a maximum allowed value for the + user-controlled input, as seen in the following example:</p> + + <sample src="UncontrolledAllocationSizeGood.go" /> + </example> + + <references> + <li> OWASP: <a + href="https://cheatsheetseries.owasp.org/cheatsheets/Denial_of_Service_Cheat_Sheet.html">Denial + of Service Cheat Sheet</a> + </li> + </references> +</qhelp> \ No newline at end of file diff --git a/go/ql/src/Security/CWE-770/UncontrolledAllocationSize.ql b/go/ql/src/Security/CWE-770/UncontrolledAllocationSize.ql new file mode 100644 index 00000000000..eabfa3333ec --- /dev/null +++ b/go/ql/src/Security/CWE-770/UncontrolledAllocationSize.ql @@ -0,0 +1,21 @@ +/** + * @name Slice memory allocation with excessive size value + * @description Allocating memory for slices with the built-in make function from user-controlled sources can lead to a denial of service. + * @kind path-problem + * @problem.severity error + * @security-severity 7.5 + * @precision high + * @id go/uncontrolled-allocation-size + * @tags security + * external/cwe/cwe-770 + */ + +import go +import semmle.go.security.UncontrolledAllocationSize +import UncontrolledAllocationSize::Flow::PathGraph + +from + UncontrolledAllocationSize::Flow::PathNode source, UncontrolledAllocationSize::Flow::PathNode sink +where UncontrolledAllocationSize::Flow::flowPath(source, sink) +select sink, source, sink, "This memory allocation depends on a $@.", source.getNode(), + "user-provided value" diff --git a/go/ql/src/Security/CWE-770/UncontrolledAllocationSizeBad.go b/go/ql/src/Security/CWE-770/UncontrolledAllocationSizeBad.go new file mode 100644 index 00000000000..b3a57d4f5e1 --- /dev/null +++ b/go/ql/src/Security/CWE-770/UncontrolledAllocationSizeBad.go @@ -0,0 +1,27 @@ +package main + +import ( + "encoding/json" + "fmt" + "net/http" + "strconv" +) + +func OutOfMemoryBad(w http.ResponseWriter, r *http.Request) { + query := r.URL.Query() + + queryStr := query.Get("n") + collectionSize, err := strconv.Atoi(queryStr) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + result := make([]string, collectionSize) + for i := 0; i < collectionSize; i++ { + result[i] = fmt.Sprintf("Item %d", i+1) + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(result) +} diff --git a/go/ql/src/Security/CWE-770/UncontrolledAllocationSizeGood.go b/go/ql/src/Security/CWE-770/UncontrolledAllocationSizeGood.go new file mode 100644 index 00000000000..761501064f6 --- /dev/null +++ b/go/ql/src/Security/CWE-770/UncontrolledAllocationSizeGood.go @@ -0,0 +1,30 @@ +package main + +import ( + "encoding/json" + "fmt" + "net/http" + "strconv" +) + +func OutOfMemoryGood(w http.ResponseWriter, r *http.Request) { + query := r.URL.Query() + MaxValue := 6 + queryStr := query.Get("n") + collectionSize, err := strconv.Atoi(queryStr) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + if collectionSize < 0 || collectionSize > MaxValue { + http.Error(w, "Bad request", http.StatusBadRequest) + return + } + result := make([]string, collectionSize) + for i := 0; i < collectionSize; i++ { + result[i] = fmt.Sprintf("Item %d", i+1) + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(result) +} diff --git a/go/ql/src/Security/CWE-798/HardcodedCredentials.ql b/go/ql/src/Security/CWE-798/HardcodedCredentials.ql index c0c623b50b9..6dd422413f7 100644 --- a/go/ql/src/Security/CWE-798/HardcodedCredentials.ql +++ b/go/ql/src/Security/CWE-798/HardcodedCredentials.ql @@ -60,6 +60,6 @@ where message = "Hard-coded private key." or HardcodedCredentials::Flow::flow(source, sink) and - type = SensitiveExpr::password() and - message = "Hard-coded credential." + type = SensitiveExpr::secret() and + message = "Hard-coded $@." select sink, message, source, type.toString() diff --git a/go/ql/src/change-notes/2024-03-05-squirrel-sqli-sinks.md b/go/ql/src/change-notes/2024-03-05-squirrel-sqli-sinks.md new file mode 100644 index 00000000000..0b6a78df9f9 --- /dev/null +++ b/go/ql/src/change-notes/2024-03-05-squirrel-sqli-sinks.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The query `go/sql-injection` now recognizes more sinks in the package `github.com/Masterminds/squirrel`. diff --git a/go/ql/src/change-notes/2024-03-07-uncontrolled-allocation-size.md b/go/ql/src/change-notes/2024-03-07-uncontrolled-allocation-size.md new file mode 100644 index 00000000000..663932005eb --- /dev/null +++ b/go/ql/src/change-notes/2024-03-07-uncontrolled-allocation-size.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* The query "Slice memory allocation with excessive size value" (`go/uncontrolled-allocation-size`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @Malayke](https://github.com/github/codeql/pull/15130). diff --git a/go/ql/src/change-notes/2024-03-14-hardcoded-credentials-more-sources.md b/go/ql/src/change-notes/2024-03-14-hardcoded-credentials-more-sources.md new file mode 100644 index 00000000000..ad6f712958e --- /dev/null +++ b/go/ql/src/change-notes/2024-03-14-hardcoded-credentials-more-sources.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The query `go/hardcoded-credentials` no longer discards string literals based on "weak password" heuristics. diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.qhelp b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.qhelp new file mode 100644 index 00000000000..27323d5f421 --- /dev/null +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.qhelp @@ -0,0 +1,33 @@ +<!DOCTYPE qhelp PUBLIC + "-//Semmle//qhelp//EN" + "qhelp.dtd"> +<qhelp> +<overview> +<p>Extracting Compressed files with any compression algorithm like gzip can cause to denial of service attacks.</p> +<p>Attackers can compress a huge file which created by repeated similiar byte and convert it to a small compressed file.</p> + +</overview> +<recommendation> + +<p>When you want to decompress a user-provided compressed file you must be careful about the decompression ratio or read these files within a loop byte by byte to be able to manage the decompressed size in each cycle of the loop. Also you can limit the size of reader buffer.</p> + +</recommendation> +<example> +<p> +Using "io.LimitReader" and "io.CopyN" are the best option to prevent decompression bomb attacks. +</p> +<sample src="example_good.go"/> + +<sample src="example_good_2.go" /> +</example> +<references> + +<li> +<a href="https://github.com/russellhaering/gosaml2/security/advisories/GHSA-6gc3-crp7-25w5">CVE-2023-26483 </a> +</li> +<li> +<a href="https://www.bamsoftware.com/hacks/zipbomb/">A great research to gain more impact by this kind of attacks</a> +</li> + +</references> +</qhelp> diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql new file mode 100644 index 00000000000..e86c097f020 --- /dev/null +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql @@ -0,0 +1,21 @@ +/** + * @name Uncontrolled file decompression + * @description Uncontrolled data that flows into decompression library APIs without checking the compression rate is dangerous + * @kind path-problem + * @problem.severity error + * @security-severity 7.8 + * @precision high + * @id go/uncontrolled-file-decompression + * @tags security + * experimental + * external/cwe/cwe-409 + */ + +import go +import experimental.frameworks.DecompressionBombs +import DecompressionBomb::Flow::PathGraph + +from DecompressionBomb::Flow::PathNode source, DecompressionBomb::Flow::PathNode sink +where DecompressionBomb::Flow::flowPath(source, sink) +select sink.getNode(), source, sink, "This decompression is $@.", source.getNode(), + "decompressing compressed data without managing output size" diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/example_good.go b/go/ql/src/experimental/CWE-522-DecompressionBombs/example_good.go new file mode 100644 index 00000000000..32b7ca45efe --- /dev/null +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/example_good.go @@ -0,0 +1,30 @@ +package main + +import ( + "archive/zip" + "fmt" + "io" + "os" +) + +func ZipOpenReader(filename string) { + // Open the zip file + r, _ := zip.OpenReader(filename) + var totalBytes int64 + for _, f := range r.File { + rc, _ := f.Open() + totalBytes = 0 + for { + result, _ := io.CopyN(os.Stdout, rc, 68) + if result == 0 { + break + } + totalBytes = totalBytes + result + if totalBytes > 1024*1024 { + fmt.Print(totalBytes) + _ = rc.Close() + break + } + } + } +} diff --git a/go/ql/src/experimental/CWE-522-DecompressionBombs/example_good_2.go b/go/ql/src/experimental/CWE-522-DecompressionBombs/example_good_2.go new file mode 100644 index 00000000000..5e70fde61c2 --- /dev/null +++ b/go/ql/src/experimental/CWE-522-DecompressionBombs/example_good_2.go @@ -0,0 +1,18 @@ +package main + +import ( + "compress/gzip" + "io" + "os" +) + +func safeReader() { + var src io.Reader + src, _ = os.Open("filename") + gzipR, _ := gzip.NewReader(src) + dstF, _ := os.OpenFile("./test", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0755) + defer dstF.Close() + var newSrc io.Reader + newSrc = io.LimitReader(gzipR, 1024*1024*1024*5) + _, _ = io.Copy(dstF, newSrc) +} diff --git a/go/ql/src/experimental/CWE-525/WebCacheDeception.expected b/go/ql/src/experimental/CWE-525/WebCacheDeception.expected new file mode 100644 index 00000000000..70e70de3037 --- /dev/null +++ b/go/ql/src/experimental/CWE-525/WebCacheDeception.expected @@ -0,0 +1,5 @@ +| WebCacheDeceptionBad.go:82:18:82:31 | "/adminusers/" | "/adminusers/" is used as wildcard endpoint. | +| WebCacheDeceptionFiber.go:15:10:15:17 | "/api/*" | "/api/*" is used as wildcard endpoint. | +| WebCacheDeceptionFiber.go:20:11:20:18 | "/api/*" | "/api/*" is used as wildcard endpoint. | +| WebCacheDeceptionGoChi.go:13:8:13:11 | "/*" | "/*" is used as wildcard endpoint. | +| WebCacheDeceptionHTTPRouter.go:21:13:21:25 | "/test/*test" | "/test/*test" is used as wildcard endpoint. | diff --git a/go/ql/src/experimental/CWE-525/WebCacheDeception.qhelp b/go/ql/src/experimental/CWE-525/WebCacheDeception.qhelp index f2958304383..deea709abcf 100644 --- a/go/ql/src/experimental/CWE-525/WebCacheDeception.qhelp +++ b/go/ql/src/experimental/CWE-525/WebCacheDeception.qhelp @@ -17,13 +17,31 @@ <p> Vulnerable code example: A web server is configured to cache all responses ending in '.css'. An attacker requests 'profile.css', and the server processes 'profile', a sensitive page, and caches it. </p> - <sample src="WebCacheDeceptionBad.go" /> + <sample src="examples/WebCacheDeceptionBad.go" /> </example> <example> <p> Secure code example: The server is configured with strict cache controls and URL validation, preventing caching of dynamic or sensitive pages regardless of their URL pattern. </p> - <sample src="WebCacheDeceptionGood.go" /> + <sample src="examples/WebCacheDeceptionGood.go" /> + </example> + <example> + <p> + Vulnerable code example: The server is configured with strict cache controls and URL validation, preventing caching of dynamic or sensitive pages regardless of their URL pattern. + </p> + <sample src="examples/WebCacheDeceptionFiber.go" /> + </example> + <example> + <p> + Vulnerable code example: The server is configured with strict cache controls and URL validation, preventing caching of dynamic or sensitive pages regardless of their URL pattern. + </p> + <sample src="examples/WebCacheDeceptionGoChi.go" /> + </example> + <example> + <p> + Vulnerable code example: The server is configured with strict cache controls and URL validation, preventing caching of dynamic or sensitive pages regardless of their URL pattern. + </p> + <sample src="examples/WebCacheDeceptionHTTPRouter.go" /> </example> <references> <li> diff --git a/go/ql/src/experimental/CWE-525/WebCacheDeception.ql b/go/ql/src/experimental/CWE-525/WebCacheDeception.ql index 2af70ee490c..eb488b0b0d1 100644 --- a/go/ql/src/experimental/CWE-525/WebCacheDeception.ql +++ b/go/ql/src/experimental/CWE-525/WebCacheDeception.ql @@ -11,17 +11,7 @@ */ import go +import WebCacheDeceptionLib -from - DataFlow::CallNode httpHandleFuncCall, DataFlow::ReadNode rn, Http::HeaderWrite::Range hw, - DeclaredFunction f -where - httpHandleFuncCall.getTarget().hasQualifiedName("net/http", "HandleFunc") and - httpHandleFuncCall.getArgument(0).getStringValue().matches("%/") and - httpHandleFuncCall.getArgument(1) = rn and - rn.reads(f) and - f.getParameter(0) = hw.getResponseWriter() and - hw.getHeaderName() = "cache-control" -select httpHandleFuncCall.getArgument(0), - "Wildcard Endpoint used with " + httpHandleFuncCall.getArgument(0) + " and '" + hw.getHeaderName() - + "' Header is used" +from WebCacheDeception::Sink httpHandleFuncCall +select httpHandleFuncCall, httpHandleFuncCall + " is used as wildcard endpoint." diff --git a/go/ql/src/experimental/CWE-525/WebCacheDeceptionLib.qll b/go/ql/src/experimental/CWE-525/WebCacheDeceptionLib.qll new file mode 100644 index 00000000000..32223cf98eb --- /dev/null +++ b/go/ql/src/experimental/CWE-525/WebCacheDeceptionLib.qll @@ -0,0 +1,61 @@ +import go +import StringOps + +module WebCacheDeception { + abstract class Sink extends DataFlow::Node { } + + private class GoNetHttp extends Sink { + GoNetHttp() { + exists( + DataFlow::CallNode m, DataFlow::ReadNode rn, Http::HeaderWrite::Range hw, DeclaredFunction f + | + m.getTarget().hasQualifiedName("net/http", "HandleFunc") and + m.getArgument(0).getStringValue().matches("%/") and + m.getArgument(1) = rn and + rn.reads(f) and + f.getParameter(0) = hw.getResponseWriter() and + hw.getHeaderName() = "cache-control" and + this = m.getArgument(0) + ) + } + } + + private class GoFiber extends Sink { + GoFiber() { + exists(ImportSpec i | + i.getPath() = "github.com/gofiber/fiber" or + i.getPath() = "github.com/gofiber/fiber/v2" + | + exists(DataFlow::CallNode m | + m.getCall().getArgument(0).toString().matches("%/*%") and + this = m.getArgument(0) + ) + ) + } + } + + private class GoChi extends Sink { + GoChi() { + exists(ImportSpec i | + i.getPath() = "github.com/go-chi/chi/v5" or + i.getPath() = "github.com/go-chi/chi/v5/middleware" + | + exists(DataFlow::CallNode m | + m.getCall().getArgument(0).toString().matches("%/*%") and + this = m.getArgument(0) + ) + ) + } + } + + private class GoHttpRouter extends Sink { + GoHttpRouter() { + exists(string pkg | pkg = "github.com/julienschmidt/httprouter" | + exists(DataFlow::CallNode m | + m.getCall().getArgument(0).toString().matches("%/*%") and + this = m.getArgument(0) + ) + ) + } + } +} diff --git a/go/ql/src/experimental/CWE-525/WebCacheDeceptionBad.go b/go/ql/src/experimental/CWE-525/examples/WebCacheDeceptionBad.go similarity index 100% rename from go/ql/src/experimental/CWE-525/WebCacheDeceptionBad.go rename to go/ql/src/experimental/CWE-525/examples/WebCacheDeceptionBad.go diff --git a/go/ql/src/experimental/CWE-525/examples/WebCacheDeceptionFiber.go b/go/ql/src/experimental/CWE-525/examples/WebCacheDeceptionFiber.go new file mode 100644 index 00000000000..e6107de430a --- /dev/null +++ b/go/ql/src/experimental/CWE-525/examples/WebCacheDeceptionFiber.go @@ -0,0 +1,38 @@ +package fiber + +import ( + "fmt" + "log" + + "github.com/gofiber/fiber/v2" +) + +func main() { + app := fiber.New() + log.Println("We are logging in Golang!") + + // GET /api/register + app.Get("/api/*", func(c *fiber.Ctx) error { + msg := fmt.Sprintf("✋") + return c.SendString(msg) // => ✋ register + }) + + app.Post("/api/*", func(c *fiber.Ctx) error { + msg := fmt.Sprintf("✋") + return c.SendString(msg) // => ✋ register + }) + + // GET /flights/LAX-SFO + app.Get("/flights/:from-:to", func(c *fiber.Ctx) error { + msg := fmt.Sprintf("💸 From: %s, To: %s", c.Params("from"), c.Params("to")) + return c.SendString(msg) // => 💸 From: LAX, To: SFO + }) + + // GET /dictionary.txt + app.Get("/:file.:ext", func(c *fiber.Ctx) error { + msg := fmt.Sprintf("📃 %s.%s", c.Params("file"), c.Params("ext")) + return c.SendString(msg) // => 📃 dictionary.txt + }) + + log.Fatal(app.Listen(":3000")) +} diff --git a/go/ql/src/experimental/CWE-525/examples/WebCacheDeceptionGoChi.go b/go/ql/src/experimental/CWE-525/examples/WebCacheDeceptionGoChi.go new file mode 100644 index 00000000000..fcfa7911cc4 --- /dev/null +++ b/go/ql/src/experimental/CWE-525/examples/WebCacheDeceptionGoChi.go @@ -0,0 +1,17 @@ +package main + +import ( + "net/http" + + "github.com/go-chi/chi/v5" + "github.com/go-chi/chi/v5/middleware" +) + +func main() { + r := chi.NewRouter() + r.Use(middleware.Logger) + r.Get("/*", func(w http.ResponseWriter, r *http.Request) { + w.Write([]byte("welcome")) + }) + http.ListenAndServe(":3000", r) +} diff --git a/go/ql/src/experimental/CWE-525/WebCacheDeceptionGood.go b/go/ql/src/experimental/CWE-525/examples/WebCacheDeceptionGood.go similarity index 100% rename from go/ql/src/experimental/CWE-525/WebCacheDeceptionGood.go rename to go/ql/src/experimental/CWE-525/examples/WebCacheDeceptionGood.go diff --git a/go/ql/src/experimental/CWE-525/examples/WebCacheDeceptionHTTPRouter.go b/go/ql/src/experimental/CWE-525/examples/WebCacheDeceptionHTTPRouter.go new file mode 100644 index 00000000000..79369565051 --- /dev/null +++ b/go/ql/src/experimental/CWE-525/examples/WebCacheDeceptionHTTPRouter.go @@ -0,0 +1,25 @@ +package httprouter + +import ( + "fmt" + "log" + "net/http" + + "github.com/julienschmidt/httprouter" +) + +func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { + fmt.Fprint(w, "Welcome!\n") +} + +func Hello(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { + fmt.Fprintf(w, "hello, %s!\n", ps.ByName("name")) +} + +func main() { + router := httprouter.New() + router.GET("/test/*test", Index) + router.GET("/hello/:name", Hello) + + log.Fatal(http.ListenAndServe(":8082", router)) +} diff --git a/go/ql/src/experimental/frameworks/DecompressionBombs.qll b/go/ql/src/experimental/frameworks/DecompressionBombs.qll new file mode 100644 index 00000000000..e1d2cd4ddc9 --- /dev/null +++ b/go/ql/src/experimental/frameworks/DecompressionBombs.qll @@ -0,0 +1,63 @@ +/** + * Provides a taint tracking configuration for reasoning about decompression bomb vulnerabilities. + */ + +import go + +class MimeMultipartFileHeader extends UntrustedFlowSource::Range { + MimeMultipartFileHeader() { + exists(DataFlow::FieldReadNode frn | this = frn | + frn.getField().hasQualifiedName("mime/multipart", "FileHeader", ["Filename", "Header"]) + ) + or + exists(DataFlow::Method m | + m.hasQualifiedName("mime/multipart", "FileHeader", "Open") and + this = m.getACall().getResult(0) + ) + or + exists(DataFlow::FieldReadNode frn | + frn.getField().hasQualifiedName("mime/multipart", "Form", "Value") + ) + } +} + +/** Provides a taint tracking configuration for reasoning about decompression bomb vulnerabilities. */ +module DecompressionBomb { + import experimental.frameworks.DecompressionBombsCustomizations + + module Config implements DataFlow::StateConfigSig { + class FlowState = DecompressionBombs::FlowState; + + predicate isSource(DataFlow::Node source, FlowState state) { + source instanceof UntrustedFlowSource and + state = "" + } + + predicate isSink(DataFlow::Node sink, FlowState state) { + sink instanceof DecompressionBombs::Sink and + state = + [ + "ZstdNewReader", "XzNewReader", "GzipNewReader", "PgzipNewReader", "S2NewReader", + "SnappyNewReader", "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", + "ZipKlauspost" + ] + } + + predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + exists(DecompressionBombs::AdditionalTaintStep addStep | + addStep.isAdditionalFlowStep(fromNode, toNode) + ) + } + + predicate isAdditionalFlowStep( + DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState + ) { + exists(DecompressionBombs::AdditionalTaintStep addStep | + addStep.isAdditionalFlowStep(fromNode, fromState, toNode, toState) + ) + } + } + + /** Tracks taint flow for reasoning about decompression bomb vulnerabilities. */ + module Flow = TaintTracking::GlobalWithState<Config>; +} diff --git a/go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll b/go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll new file mode 100644 index 00000000000..b50d3757797 --- /dev/null +++ b/go/ql/src/experimental/frameworks/DecompressionBombsCustomizations.qll @@ -0,0 +1,607 @@ +import go + +module DecompressionBombs { + class FlowState extends string { + FlowState() { + this = + [ + "ZstdNewReader", "XzNewReader", "GzipNewReader", "PgzipNewReader", "S2NewReader", + "SnappyNewReader", "ZlibNewReader", "FlateNewReader", "Bzip2NewReader", "ZipOpenReader", + "ZipKlauspost", "" + ] + } + } + + /** + * The additional taint steps that need for creating taint tracking or dataflow. + */ + abstract class AdditionalTaintStep extends string { + AdditionalTaintStep() { this = "AdditionalTaintStep" } + + /** + * Holds if there is a additional taint step between pred and succ. + */ + predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { none() } + + /** + * Holds if there is a additional taint step between pred and succ. + */ + abstract predicate isAdditionalFlowStep( + DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState + ); + } + + /** + * The Sinks of uncontrolled data decompression + */ + abstract class Sink extends DataFlow::Node { } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/DataDog/zstd` package. + * + * `Reader.Read` already modeled. + */ + module DataDogZstd { + class TheAdditionalTaintStep extends AdditionalTaintStep { + TheAdditionalTaintStep() { this = "AdditionalTaintStep" } + + override predicate isAdditionalFlowStep( + DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState + ) { + exists(Function f, DataFlow::CallNode call | + f.hasQualifiedName("github.com/DataDog/zstd", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "ZstdNewReader" + ) + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/zstd` package. + * + * `Reader.Read`, `Reader.WriteTo` already modeled. + */ + module KlauspostZstd { + class TheSink extends Sink { + TheSink() { + exists(Method m | + m.hasQualifiedName("github.com/klauspost/compress/zstd", "Decoder", "DecodeAll") + | + this = m.getACall().getReceiver() + ) + } + } + + class TheAdditionalTaintStep extends AdditionalTaintStep { + TheAdditionalTaintStep() { this = "AdditionalTaintStep" } + + override predicate isAdditionalFlowStep( + DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState + ) { + exists(Function f, DataFlow::CallNode call | + f.hasQualifiedName("github.com/klauspost/compress/zstd", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "ZstdNewReader" + ) + } + } + } + + /** + * Provides additional flow steps for `archive/zip` package + */ + module ArchiveZipBombs { + class TheAdditionalTaintStep extends AdditionalTaintStep { + TheAdditionalTaintStep() { this = "AdditionalTaintStep" } + + override predicate isAdditionalFlowStep( + DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState + ) { + exists(Function f, DataFlow::CallNode call | + f.hasQualifiedName("archive/zip", ["OpenReader", "NewReader"]) and call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "ZipOpenReader" + ) + } + } + } + + /** + * Provides Decompression additional taint steps for `github.com/klauspost/compress/zip` package + */ + module KlauspostZip { + class TheAdditionalTaintStep extends AdditionalTaintStep { + TheAdditionalTaintStep() { this = "AdditionalTaintStep" } + + override predicate isAdditionalFlowStep( + DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState + ) { + exists(Function f, DataFlow::CallNode call | + f.hasQualifiedName("github.com/klauspost/compress/zip", ["NewReader", "OpenReader"]) and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "ZipKlauspost" + ) + } + + override predicate isAdditionalFlowStep(DataFlow::Node fromNode, DataFlow::Node toNode) { + exists(DataFlow::FieldReadNode fi | + fi.getType().hasQualifiedName("github.com/klauspost/compress/zip", "Reader") + | + fromNode = fi.getBase() and + toNode = fi + ) + or + exists(Method m, DataFlow::CallNode call | + m.hasQualifiedName("github.com/klauspost/compress/zip", "File", ["Open", "OpenRaw"]) and + call = m.getACall() + | + fromNode = call.getReceiver() and + toNode = call + ) + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/ulikunitz/xz` package. + * + * `Reader.Read` already modeled. + */ + module UlikunitzXz { + class TheAdditionalTaintStep extends AdditionalTaintStep { + TheAdditionalTaintStep() { this = "AdditionalTaintStep" } + + override predicate isAdditionalFlowStep( + DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState + ) { + exists(Function f, DataFlow::CallNode call | + f.hasQualifiedName("github.com/ulikunitz/xz", "NewReader") and call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "XzNewReader" + ) + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `compress/gzip` package. + * + * `Reader.Read` already modeled. + */ + module CompressGzipBombs { + class TheAdditionalTaintStep extends AdditionalTaintStep { + TheAdditionalTaintStep() { this = "AdditionalTaintStep" } + + override predicate isAdditionalFlowStep( + DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState + ) { + exists(Function f, DataFlow::CallNode call | + f.hasQualifiedName("compress/gzip", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "GzipNewReader" + ) + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/pgzip` package. + * + * `Reader.Read`, `Reader.WriteTo` already modeled. + */ + module KlauspostPgzip { + class TheAdditionalTaintStep extends AdditionalTaintStep { + TheAdditionalTaintStep() { this = "AdditionalTaintStep" } + + override predicate isAdditionalFlowStep( + DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState + ) { + exists(Function f, DataFlow::CallNode call | + f.hasQualifiedName("github.com/klauspost/pgzip", "NewReader") and + call = f.getACall() and + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "PgzipNewReader" + ) + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/gzip` package. + * + * `Reader.Read`, `Reader.WriteTo` already modeled. + */ + module KlauspostGzip { + class TheAdditionalTaintStep extends AdditionalTaintStep { + TheAdditionalTaintStep() { this = "AdditionalTaintStep" } + + override predicate isAdditionalFlowStep( + DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState + ) { + exists(Function f, DataFlow::CallNode call | + f.hasQualifiedName("github.com/klauspost/compress/gzip", "NewReader") and + call = f.getACall() and + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "GzipNewReader" + ) + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `compress/bzip2` package. + * + * `Reader.Read` already modeled. + */ + module CompressBzip2 { + class TheAdditionalTaintStep extends AdditionalTaintStep { + TheAdditionalTaintStep() { this = "AdditionalTaintStep" } + + override predicate isAdditionalFlowStep( + DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState + ) { + exists(Function f, DataFlow::CallNode call | + f.hasQualifiedName("compress/bzip2", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "Bzip2NewReader" + ) + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/dsnet/compress/bzip2` package. + * + * `Reader.Read` already modeled. + */ + module DsnetBzip2 { + class TheAdditionalTaintStep extends AdditionalTaintStep { + TheAdditionalTaintStep() { this = "AdditionalTaintStep" } + + override predicate isAdditionalFlowStep( + DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState + ) { + exists(Function f, DataFlow::CallNode call | + f.hasQualifiedName("github.com/dsnet/compress/bzip2", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "Bzip2NewReader" + ) + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/dsnet/compress/flate` package. + * + * `Reader.Read` already modeled. + */ + module DsnetFlate { + class TheAdditionalTaintStep extends AdditionalTaintStep { + TheAdditionalTaintStep() { this = "AdditionalTaintStep" } + + override predicate isAdditionalFlowStep( + DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState + ) { + exists(Function f, DataFlow::CallNode call | + f.hasQualifiedName("github.com/dsnet/compress/flate", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "FlateNewReader" + ) + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `compress/flate` package. + * + * `Reader.Read` already modeled. + */ + module CompressFlate { + class TheAdditionalTaintStep extends AdditionalTaintStep { + TheAdditionalTaintStep() { this = "AdditionalTaintStep" } + + override predicate isAdditionalFlowStep( + DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState + ) { + exists(Function f, DataFlow::CallNode call | + f.hasQualifiedName("compress/flate", ["NewReaderDict", "NewReader"]) and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "FlateNewReader" + ) + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/flate` package. + * + * `Reader.Read` already modeled. + */ + module KlauspostFlate { + class TheAdditionalTaintStep extends AdditionalTaintStep { + TheAdditionalTaintStep() { this = "AdditionalTaintStep" } + + override predicate isAdditionalFlowStep( + DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState + ) { + exists(Function f, DataFlow::CallNode call | + f.hasQualifiedName("github.com/klauspost/compress/flate", ["NewReaderDict", "NewReader"]) and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "FlateNewReader" + ) + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/zlib` package. + * + * `Reader.Read` already modeled. + */ + module KlauspostZlib { + class TheAdditionalTaintStep extends AdditionalTaintStep { + TheAdditionalTaintStep() { this = "AdditionalTaintStep" } + + override predicate isAdditionalFlowStep( + DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState + ) { + exists(Function f, DataFlow::CallNode call | + f.hasQualifiedName("github.com/klauspost/compress/zlib", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "ZlibNewReader" + ) + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `compress/zlib` package. + * + * `Reader.Read` already modeled. + */ + module CompressZlibBombs { + class TheAdditionalTaintStep extends AdditionalTaintStep { + TheAdditionalTaintStep() { this = "AdditionalTaintStep" } + + override predicate isAdditionalFlowStep( + DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState + ) { + exists(Function f, DataFlow::CallNode call | + f.hasQualifiedName("compress/zlib", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "ZlibNewReader" + ) + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/golang/snappy` package. + * + * `Reader.Read`, `Reader.ReadByte` already modeled. + */ + module GolangSnappy { + class TheAdditionalTaintStep extends AdditionalTaintStep { + TheAdditionalTaintStep() { this = "AdditionalTaintStep" } + + override predicate isAdditionalFlowStep( + DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState + ) { + exists(Function f, DataFlow::CallNode call | + f.hasQualifiedName("github.com/golang/snappy", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "SnappyNewReader" + ) + } + } + } + + /** + * Provides decompression bombs sinks and additional flow steps for `github.com/klauspost/compress/snappy` package. + * + * `Reader.Read`, `Reader.ReadByte` already modeled. + */ + module KlauspostSnappy { + class TheAdditionalTaintStep extends AdditionalTaintStep { + TheAdditionalTaintStep() { this = "AdditionalTaintStep" } + + override predicate isAdditionalFlowStep( + DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState + ) { + exists(Function f, DataFlow::CallNode call | + f.hasQualifiedName("github.com/klauspost/compress/snappy", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "SnappyNewReader" + ) + } + } + } + + /** + * Provides decompression bomb sinks and additional flow steps for `github.com/klauspost/compress/s2` package. + * + * `Reader.Read`, `Reader.ReadByte` already modeled. + */ + module KlauspostS2 { + class TheSink extends Sink { + TheSink() { + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("github.com/klauspost/compress/s2", "Reader", "DecodeConcurrent") and + cn = m.getACall() + | + this = cn.getReceiver() and + not hasFlowToComparison(cn.getResult(0)) + ) + } + } + + class TheAdditionalTaintStep extends AdditionalTaintStep { + TheAdditionalTaintStep() { this = "AdditionalTaintStep" } + + override predicate isAdditionalFlowStep( + DataFlow::Node fromNode, FlowState fromState, DataFlow::Node toNode, FlowState toState + ) { + exists(Function f, DataFlow::CallNode call | + f.hasQualifiedName("github.com/klauspost/compress/s2", "NewReader") and + call = f.getACall() + | + fromNode = call.getArgument(0) and + toNode = call.getResult(0) and + fromState = "" and + toState = "S2NewReader" + ) + } + } + } + + /** + * Provides decompression bomb sinks for packages that use some standard IO interfaces/methods for reading decompressed data + */ + class GeneralReadIoSink extends Sink { + GeneralReadIoSink() { + exists(Function f, DataFlow::CallNode cn | + f.hasQualifiedName("io", "CopyN") and cn = f.getACall() + | + this = cn.getArgument(1) and + not hasFlowToComparison(cn.getResult(0)) + ) + or + exists(Method m, DataFlow::CallNode cn | + ( + m.implements("io", "Reader", "Read") or + m.implements("io", "ByteReader", "ReadByte") or + m.implements("io", "WriterTo", "WriteTo") + ) and + cn = m.getACall() + | + this = cn.getReceiver() and + not hasFlowToComparison(cn.getResult(0)) + ) + or + exists(Function f | f.hasQualifiedName("io", ["Copy", "CopyBuffer"]) | + this = f.getACall().getArgument(1) + ) + or + exists(Function f | f.hasQualifiedName("io", ["Pipe", "ReadAll", "ReadAtLeast", "ReadFull"]) | + this = f.getACall().getArgument(0) + ) + or + exists(Method m | + m.hasQualifiedName("bufio", "Reader", + ["ReadBytes", "ReadByte", "ReadLine", "ReadRune", "ReadSlice", "ReadString"]) + | + this = m.getACall().getReceiver() + ) + or + exists(Method m, DataFlow::CallNode cn | + m.hasQualifiedName("bufio", "Reader", ["Read", "WriteTo"]) and + cn = m.getACall() + | + this = cn.getReceiver() and + not hasFlowToComparison(cn.getResult(0)) + ) + or + exists(Method m | m.hasQualifiedName("bufio", "Scanner", ["Text", "Bytes"]) | + this = m.getACall().getReceiver() + ) + or + exists(Function f | f.hasQualifiedName("io/ioutil", "ReadAll") | + this = f.getACall().getArgument(0) + ) + } + } + + /** + * Holds if the value of `n` flow into a comparison (<, >, <=, >=). + */ + predicate hasFlowToComparison(DataFlow::Node n) { + localStep*(n, any(DataFlow::RelationalComparisonNode rcn).getAnOperand()) + } + + /** + * Holds if the value of `pred` can flow into `succ` in one step through an + * arithmetic operation (other than remainder). + * + * Note: this predicate is copied from AllocationSizeOverflow. When this query + * is promoted it should be put in a shared location. + */ + predicate additionalStep(DataFlow::Node pred, DataFlow::Node succ) { + succ.asExpr().(ArithmeticExpr).getAnOperand() = pred.asExpr() and + not succ.asExpr() instanceof RemExpr + } + + /** + * Holds if the value of `pred` can flow into `succ` in one step, either by a standard taint step + * or by an additional step. + * + * Note: this predicate is copied from AllocationSizeOverflow. When this query + * is promoted it should be put in a shared location. + */ + predicate localStep(DataFlow::Node pred, DataFlow::Node succ) { + TaintTracking::localTaintStep(pred, succ) or + additionalStep(pred, succ) + } +} diff --git a/go/ql/test/TestUtilities/InlineFlowTest.qll b/go/ql/test/TestUtilities/InlineFlowTest.qll index 3ec43911b76..b761fed993e 100644 --- a/go/ql/test/TestUtilities/InlineFlowTest.qll +++ b/go/ql/test/TestUtilities/InlineFlowTest.qll @@ -9,7 +9,7 @@ private import semmle.go.dataflow.internal.DataFlowImplSpecific private import semmle.go.dataflow.internal.TaintTrackingImplSpecific private import internal.InlineExpectationsTestImpl -private module FlowTestImpl implements InputSig<GoDataFlow> { +private module FlowTestImpl implements InputSig<Location, GoDataFlow> { predicate defaultSource(DataFlow::Node source) { exists(Function fn | fn.hasQualifiedName(_, ["source", "taint"]) | source = fn.getACall().getResult() @@ -26,4 +26,4 @@ private module FlowTestImpl implements InputSig<GoDataFlow> { } } -import InlineFlowTestMake<GoDataFlow, GoTaintTracking, Impl, FlowTestImpl> +import InlineFlowTestMake<Location, GoDataFlow, GoTaintTracking, Impl, FlowTestImpl> diff --git a/go/ql/test/TestUtilities/internal/InlineExpectationsTestImpl.qll b/go/ql/test/TestUtilities/internal/InlineExpectationsTestImpl.qll index a544aed8fee..1d185440772 100644 --- a/go/ql/test/TestUtilities/internal/InlineExpectationsTestImpl.qll +++ b/go/ql/test/TestUtilities/internal/InlineExpectationsTestImpl.qll @@ -2,13 +2,18 @@ private import go as G private import codeql.util.test.InlineExpectationsTest module Impl implements InlineExpectationsTestSig { + final private class CommentFinal = G::Comment; + /** * A class representing line comments in the Go style, including the * preceding comment marker (`//`). */ - class ExpectationComment extends G::Comment { + class ExpectationComment extends CommentFinal { /** Returns the contents of the given comment, _without_ the preceding comment marker (`//`). */ string getContents() { result = this.getText() } + + /** Gets this element's location. */ + G::Location getLocation() { result = super.getLocation() } } class Location = G::Location; diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.expected new file mode 100644 index 00000000000..8ec8033d086 --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.expected @@ -0,0 +1,2 @@ +testFailures +failures diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.ql b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.ql new file mode 100644 index 00000000000..f5422c2a507 --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombTest.ql @@ -0,0 +1,19 @@ +import go +import TestUtilities.InlineExpectationsTest +import experimental.frameworks.DecompressionBombs::DecompressionBomb + +module TestDecompressionBombs implements TestSig { + string getARelevantTag() { result = "hasValueFlow" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasValueFlow" and + exists(DataFlow::Node sink | Flow::flowTo(sink) | + sink.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), + location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and + element = sink.toString() and + value = "\"" + sink.toString() + "\"" + ) + } +} + +import MakeTest<TestDecompressionBombs> diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected new file mode 100644 index 00000000000..5136387a80a --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -0,0 +1,435 @@ +edges +| test.go:59:16:59:44 | call to FormValue | test.go:128:20:128:27 | definition of filename | provenance | | +| test.go:60:15:60:26 | selection of Body | test.go:158:19:158:22 | definition of file | provenance | | +| test.go:61:24:61:35 | selection of Body | test.go:169:28:169:31 | definition of file | provenance | | +| test.go:62:13:62:24 | selection of Body | test.go:181:17:181:20 | definition of file | provenance | | +| test.go:64:8:64:19 | selection of Body | test.go:208:12:208:15 | definition of file | provenance | | +| test.go:66:8:66:19 | selection of Body | test.go:233:12:233:15 | definition of file | provenance | | +| test.go:68:17:68:28 | selection of Body | test.go:258:21:258:24 | definition of file | provenance | | +| test.go:70:13:70:24 | selection of Body | test.go:283:17:283:20 | definition of file | provenance | | +| test.go:72:16:72:27 | selection of Body | test.go:308:20:308:23 | definition of file | provenance | | +| test.go:74:7:74:18 | selection of Body | test.go:333:11:333:14 | definition of file | provenance | | +| test.go:76:9:76:20 | selection of Body | test.go:358:13:358:16 | definition of file | provenance | | +| test.go:78:18:78:29 | selection of Body | test.go:384:22:384:25 | definition of file | provenance | | +| test.go:80:5:80:16 | selection of Body | test.go:412:9:412:12 | definition of file | provenance | | +| test.go:82:7:82:18 | selection of Body | test.go:447:11:447:14 | definition of file | provenance | | +| test.go:84:15:84:26 | selection of Body | test.go:440:19:440:21 | definition of src | provenance | | +| test.go:85:16:85:27 | selection of Body | test.go:472:20:472:23 | definition of file | provenance | | +| test.go:87:16:87:27 | selection of Body | test.go:499:20:499:23 | definition of file | provenance | | +| test.go:89:17:89:28 | selection of Body | test.go:526:21:526:24 | definition of file | provenance | | +| test.go:91:15:91:26 | selection of Body | test.go:555:19:555:22 | definition of file | provenance | | +| test.go:93:5:93:16 | selection of Body | test.go:580:9:580:12 | definition of file | provenance | | +| test.go:128:20:128:27 | definition of filename | test.go:130:33:130:40 | filename | provenance | | +| test.go:128:20:128:27 | definition of filename | test.go:143:51:143:58 | filename | provenance | | +| test.go:130:2:130:41 | ... := ...[0] | test.go:132:12:132:12 | f | provenance | | +| test.go:130:33:130:40 | filename | test.go:130:2:130:41 | ... := ...[0] | provenance | | +| test.go:132:3:132:19 | ... := ...[0] | test.go:134:37:134:38 | rc | provenance | | +| test.go:132:12:132:12 | f | test.go:132:3:132:19 | ... := ...[0] | provenance | | +| test.go:143:2:143:59 | ... := ...[0] | test.go:144:20:144:37 | implicit dereference | provenance | | +| test.go:143:51:143:58 | filename | test.go:143:2:143:59 | ... := ...[0] | provenance | | +| test.go:144:20:144:37 | implicit dereference | test.go:144:20:144:37 | implicit dereference | provenance | | +| test.go:144:20:144:37 | implicit dereference | test.go:144:20:144:37 | implicit read of field Reader | provenance | | +| test.go:144:20:144:37 | implicit read of field Reader | test.go:145:12:145:12 | f | provenance | | +| test.go:145:12:145:12 | f | test.go:145:12:145:19 | call to Open | provenance | | +| test.go:145:12:145:19 | call to Open | test.go:147:37:147:38 | rc | provenance | | +| test.go:158:19:158:22 | definition of file | test.go:159:25:159:28 | file | provenance | | +| test.go:159:2:159:29 | ... := ...[0] | test.go:160:48:160:52 | file1 | provenance | | +| test.go:159:25:159:28 | file | test.go:159:2:159:29 | ... := ...[0] | provenance | | +| test.go:160:2:160:69 | ... := ...[0] | test.go:163:26:163:29 | file | provenance | | +| test.go:160:32:160:53 | call to NewReader | test.go:160:2:160:69 | ... := ...[0] | provenance | | +| test.go:160:48:160:52 | file1 | test.go:160:32:160:53 | call to NewReader | provenance | | +| test.go:163:3:163:36 | ... := ...[0] | test.go:164:36:164:51 | fileReaderCloser | provenance | | +| test.go:163:26:163:29 | file | test.go:163:3:163:36 | ... := ...[0] | provenance | | +| test.go:169:28:169:31 | definition of file | test.go:170:25:170:28 | file | provenance | | +| test.go:170:2:170:29 | ... := ...[0] | test.go:171:57:171:61 | file2 | provenance | | +| test.go:170:25:170:28 | file | test.go:170:2:170:29 | ... := ...[0] | provenance | | +| test.go:171:2:171:78 | ... := ...[0] | test.go:175:26:175:29 | file | provenance | | +| test.go:171:41:171:62 | call to NewReader | test.go:171:2:171:78 | ... := ...[0] | provenance | | +| test.go:171:57:171:61 | file2 | test.go:171:41:171:62 | call to NewReader | provenance | | +| test.go:175:26:175:29 | file | test.go:175:26:175:36 | call to Open | provenance | | +| test.go:175:26:175:36 | call to Open | test.go:176:36:176:51 | fileReaderCloser | provenance | | +| test.go:181:17:181:20 | definition of file | test.go:184:41:184:44 | file | provenance | | +| test.go:184:2:184:73 | ... := ...[0] | test.go:186:2:186:12 | bzip2Reader | provenance | | +| test.go:184:2:184:73 | ... := ...[0] | test.go:187:26:187:36 | bzip2Reader | provenance | | +| test.go:184:41:184:44 | file | test.go:184:2:184:73 | ... := ...[0] | provenance | | +| test.go:187:12:187:37 | call to NewReader | test.go:189:18:189:24 | tarRead | provenance | | +| test.go:187:26:187:36 | bzip2Reader | test.go:187:12:187:37 | call to NewReader | provenance | | +| test.go:189:18:189:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:208:12:208:15 | definition of file | test.go:211:33:211:36 | file | provenance | | +| test.go:211:17:211:37 | call to NewReader | test.go:213:2:213:12 | bzip2Reader | provenance | | +| test.go:211:17:211:37 | call to NewReader | test.go:214:26:214:36 | bzip2Reader | provenance | | +| test.go:211:33:211:36 | file | test.go:211:17:211:37 | call to NewReader | provenance | | +| test.go:214:12:214:37 | call to NewReader | test.go:216:18:216:24 | tarRead | provenance | | +| test.go:214:26:214:36 | bzip2Reader | test.go:214:12:214:37 | call to NewReader | provenance | | +| test.go:216:18:216:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:233:12:233:15 | definition of file | test.go:236:33:236:36 | file | provenance | | +| test.go:236:17:236:37 | call to NewReader | test.go:238:2:238:12 | flateReader | provenance | | +| test.go:236:17:236:37 | call to NewReader | test.go:239:26:239:36 | flateReader | provenance | | +| test.go:236:33:236:36 | file | test.go:236:17:236:37 | call to NewReader | provenance | | +| test.go:239:12:239:37 | call to NewReader | test.go:241:18:241:24 | tarRead | provenance | | +| test.go:239:26:239:36 | flateReader | test.go:239:12:239:37 | call to NewReader | provenance | | +| test.go:241:18:241:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:258:21:258:24 | definition of file | test.go:261:42:261:45 | file | provenance | | +| test.go:261:17:261:46 | call to NewReader | test.go:263:2:263:12 | flateReader | provenance | | +| test.go:261:17:261:46 | call to NewReader | test.go:264:26:264:36 | flateReader | provenance | | +| test.go:261:42:261:45 | file | test.go:261:17:261:46 | call to NewReader | provenance | | +| test.go:264:12:264:37 | call to NewReader | test.go:266:18:266:24 | tarRead | provenance | | +| test.go:264:26:264:36 | flateReader | test.go:264:12:264:37 | call to NewReader | provenance | | +| test.go:266:18:266:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:283:17:283:20 | definition of file | test.go:286:41:286:44 | file | provenance | | +| test.go:286:2:286:73 | ... := ...[0] | test.go:288:2:288:12 | flateReader | provenance | | +| test.go:286:2:286:73 | ... := ...[0] | test.go:289:26:289:36 | flateReader | provenance | | +| test.go:286:41:286:44 | file | test.go:286:2:286:73 | ... := ...[0] | provenance | | +| test.go:289:12:289:37 | call to NewReader | test.go:291:18:291:24 | tarRead | provenance | | +| test.go:289:26:289:36 | flateReader | test.go:289:12:289:37 | call to NewReader | provenance | | +| test.go:291:18:291:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:308:20:308:23 | definition of file | test.go:311:43:311:46 | file | provenance | | +| test.go:311:2:311:47 | ... := ...[0] | test.go:313:2:313:11 | zlibReader | provenance | | +| test.go:311:2:311:47 | ... := ...[0] | test.go:314:26:314:35 | zlibReader | provenance | | +| test.go:311:43:311:46 | file | test.go:311:2:311:47 | ... := ...[0] | provenance | | +| test.go:314:12:314:36 | call to NewReader | test.go:316:18:316:24 | tarRead | provenance | | +| test.go:314:26:314:35 | zlibReader | test.go:314:12:314:36 | call to NewReader | provenance | | +| test.go:316:18:316:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:333:11:333:14 | definition of file | test.go:336:34:336:37 | file | provenance | | +| test.go:336:2:336:38 | ... := ...[0] | test.go:338:2:338:11 | zlibReader | provenance | | +| test.go:336:2:336:38 | ... := ...[0] | test.go:339:26:339:35 | zlibReader | provenance | | +| test.go:336:34:336:37 | file | test.go:336:2:336:38 | ... := ...[0] | provenance | | +| test.go:339:12:339:36 | call to NewReader | test.go:341:18:341:24 | tarRead | provenance | | +| test.go:339:26:339:35 | zlibReader | test.go:339:12:339:36 | call to NewReader | provenance | | +| test.go:341:18:341:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:358:13:358:16 | definition of file | test.go:361:35:361:38 | file | provenance | | +| test.go:361:18:361:39 | call to NewReader | test.go:363:2:363:13 | snappyReader | provenance | | +| test.go:361:18:361:39 | call to NewReader | test.go:364:2:364:13 | snappyReader | provenance | | +| test.go:361:18:361:39 | call to NewReader | test.go:365:26:365:37 | snappyReader | provenance | | +| test.go:361:35:361:38 | file | test.go:361:18:361:39 | call to NewReader | provenance | | +| test.go:365:12:365:38 | call to NewReader | test.go:367:18:367:24 | tarRead | provenance | | +| test.go:365:26:365:37 | snappyReader | test.go:365:12:365:38 | call to NewReader | provenance | | +| test.go:367:18:367:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:384:22:384:25 | definition of file | test.go:387:44:387:47 | file | provenance | | +| test.go:387:18:387:48 | call to NewReader | test.go:389:2:389:13 | snappyReader | provenance | | +| test.go:387:18:387:48 | call to NewReader | test.go:391:2:391:13 | snappyReader | provenance | | +| test.go:387:18:387:48 | call to NewReader | test.go:392:2:392:13 | snappyReader | provenance | | +| test.go:387:18:387:48 | call to NewReader | test.go:393:26:393:37 | snappyReader | provenance | | +| test.go:387:44:387:47 | file | test.go:387:18:387:48 | call to NewReader | provenance | | +| test.go:393:12:393:38 | call to NewReader | test.go:395:18:395:24 | tarRead | provenance | | +| test.go:393:26:393:37 | snappyReader | test.go:393:12:393:38 | call to NewReader | provenance | | +| test.go:395:18:395:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:412:9:412:12 | definition of file | test.go:415:27:415:30 | file | provenance | | +| test.go:415:14:415:31 | call to NewReader | test.go:417:2:417:9 | s2Reader | provenance | | +| test.go:415:14:415:31 | call to NewReader | test.go:418:2:418:9 | s2Reader | provenance | | +| test.go:415:14:415:31 | call to NewReader | test.go:420:2:420:9 | s2Reader | provenance | | +| test.go:415:14:415:31 | call to NewReader | test.go:421:26:421:33 | s2Reader | provenance | | +| test.go:415:27:415:30 | file | test.go:415:14:415:31 | call to NewReader | provenance | | +| test.go:421:12:421:34 | call to NewReader | test.go:423:18:423:24 | tarRead | provenance | | +| test.go:421:26:421:33 | s2Reader | test.go:421:12:421:34 | call to NewReader | provenance | | +| test.go:423:18:423:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:440:19:440:21 | definition of src | test.go:441:34:441:36 | src | provenance | | +| test.go:441:2:441:37 | ... := ...[0] | test.go:444:12:444:32 | type conversion | provenance | | +| test.go:441:34:441:36 | src | test.go:441:2:441:37 | ... := ...[0] | provenance | | +| test.go:444:12:444:32 | type conversion | test.go:445:23:445:28 | newSrc | provenance | | +| test.go:447:11:447:14 | definition of file | test.go:450:34:450:37 | file | provenance | | +| test.go:450:2:450:38 | ... := ...[0] | test.go:452:2:452:11 | gzipReader | provenance | | +| test.go:450:2:450:38 | ... := ...[0] | test.go:453:26:453:35 | gzipReader | provenance | | +| test.go:450:34:450:37 | file | test.go:450:2:450:38 | ... := ...[0] | provenance | | +| test.go:453:12:453:36 | call to NewReader | test.go:455:18:455:24 | tarRead | provenance | | +| test.go:453:26:453:35 | gzipReader | test.go:453:12:453:36 | call to NewReader | provenance | | +| test.go:455:18:455:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:472:20:472:23 | definition of file | test.go:475:43:475:46 | file | provenance | | +| test.go:475:2:475:47 | ... := ...[0] | test.go:477:2:477:11 | gzipReader | provenance | | +| test.go:475:2:475:47 | ... := ...[0] | test.go:479:2:479:11 | gzipReader | provenance | | +| test.go:475:2:475:47 | ... := ...[0] | test.go:480:26:480:35 | gzipReader | provenance | | +| test.go:475:43:475:46 | file | test.go:475:2:475:47 | ... := ...[0] | provenance | | +| test.go:480:12:480:36 | call to NewReader | test.go:482:18:482:24 | tarRead | provenance | | +| test.go:480:26:480:35 | gzipReader | test.go:480:12:480:36 | call to NewReader | provenance | | +| test.go:482:18:482:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:499:20:499:23 | definition of file | test.go:502:45:502:48 | file | provenance | | +| test.go:502:2:502:49 | ... := ...[0] | test.go:504:2:504:12 | pgzipReader | provenance | | +| test.go:502:2:502:49 | ... := ...[0] | test.go:506:2:506:12 | pgzipReader | provenance | | +| test.go:502:2:502:49 | ... := ...[0] | test.go:507:26:507:36 | pgzipReader | provenance | | +| test.go:502:45:502:48 | file | test.go:502:2:502:49 | ... := ...[0] | provenance | | +| test.go:507:12:507:37 | call to NewReader | test.go:509:18:509:24 | tarRead | provenance | | +| test.go:507:26:507:36 | pgzipReader | test.go:507:12:507:37 | call to NewReader | provenance | | +| test.go:509:18:509:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:526:21:526:24 | definition of file | test.go:529:43:529:46 | file | provenance | | +| test.go:529:2:529:47 | ... := ...[0] | test.go:531:2:531:11 | zstdReader | provenance | | +| test.go:529:2:529:47 | ... := ...[0] | test.go:533:2:533:11 | zstdReader | provenance | | +| test.go:529:2:529:47 | ... := ...[0] | test.go:535:2:535:11 | zstdReader | provenance | | +| test.go:529:2:529:47 | ... := ...[0] | test.go:536:26:536:35 | zstdReader | provenance | | +| test.go:529:43:529:46 | file | test.go:529:2:529:47 | ... := ...[0] | provenance | | +| test.go:536:12:536:36 | call to NewReader | test.go:538:18:538:24 | tarRead | provenance | | +| test.go:536:26:536:35 | zstdReader | test.go:536:12:536:36 | call to NewReader | provenance | | +| test.go:538:18:538:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:555:19:555:22 | definition of file | test.go:558:38:558:41 | file | provenance | | +| test.go:558:16:558:42 | call to NewReader | test.go:560:2:560:11 | zstdReader | provenance | | +| test.go:558:16:558:42 | call to NewReader | test.go:561:26:561:35 | zstdReader | provenance | | +| test.go:558:38:558:41 | file | test.go:558:16:558:42 | call to NewReader | provenance | | +| test.go:561:12:561:36 | call to NewReader | test.go:563:18:563:24 | tarRead | provenance | | +| test.go:561:26:561:35 | zstdReader | test.go:561:12:561:36 | call to NewReader | provenance | | +| test.go:563:18:563:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:580:9:580:12 | definition of file | test.go:583:30:583:33 | file | provenance | | +| test.go:583:2:583:34 | ... := ...[0] | test.go:585:2:585:9 | xzReader | provenance | | +| test.go:583:2:583:34 | ... := ...[0] | test.go:586:26:586:33 | xzReader | provenance | | +| test.go:583:30:583:33 | file | test.go:583:2:583:34 | ... := ...[0] | provenance | | +| test.go:586:12:586:34 | call to NewReader | test.go:589:18:589:24 | tarRead | provenance | | +| test.go:586:12:586:34 | call to NewReader | test.go:590:19:590:25 | tarRead | provenance | | +| test.go:586:26:586:33 | xzReader | test.go:586:12:586:34 | call to NewReader | provenance | | +| test.go:589:18:589:24 | tarRead | test.go:611:22:611:28 | definition of tarRead | provenance | | +| test.go:590:19:590:25 | tarRead | test.go:627:23:627:29 | definition of tarRead | provenance | | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | provenance | | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | provenance | | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | provenance | | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | provenance | | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | provenance | | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | provenance | | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | provenance | | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | provenance | | +| test.go:611:22:611:28 | definition of tarRead | test.go:621:25:621:31 | tarRead | provenance | | +| test.go:627:23:627:29 | definition of tarRead | test.go:629:2:629:8 | tarRead | provenance | | +nodes +| test.go:59:16:59:44 | call to FormValue | semmle.label | call to FormValue | +| test.go:60:15:60:26 | selection of Body | semmle.label | selection of Body | +| test.go:61:24:61:35 | selection of Body | semmle.label | selection of Body | +| test.go:62:13:62:24 | selection of Body | semmle.label | selection of Body | +| test.go:64:8:64:19 | selection of Body | semmle.label | selection of Body | +| test.go:66:8:66:19 | selection of Body | semmle.label | selection of Body | +| test.go:68:17:68:28 | selection of Body | semmle.label | selection of Body | +| test.go:70:13:70:24 | selection of Body | semmle.label | selection of Body | +| test.go:72:16:72:27 | selection of Body | semmle.label | selection of Body | +| test.go:74:7:74:18 | selection of Body | semmle.label | selection of Body | +| test.go:76:9:76:20 | selection of Body | semmle.label | selection of Body | +| test.go:78:18:78:29 | selection of Body | semmle.label | selection of Body | +| test.go:80:5:80:16 | selection of Body | semmle.label | selection of Body | +| test.go:82:7:82:18 | selection of Body | semmle.label | selection of Body | +| test.go:84:15:84:26 | selection of Body | semmle.label | selection of Body | +| test.go:85:16:85:27 | selection of Body | semmle.label | selection of Body | +| test.go:87:16:87:27 | selection of Body | semmle.label | selection of Body | +| test.go:89:17:89:28 | selection of Body | semmle.label | selection of Body | +| test.go:91:15:91:26 | selection of Body | semmle.label | selection of Body | +| test.go:93:5:93:16 | selection of Body | semmle.label | selection of Body | +| test.go:128:20:128:27 | definition of filename | semmle.label | definition of filename | +| test.go:130:2:130:41 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:130:33:130:40 | filename | semmle.label | filename | +| test.go:132:3:132:19 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:132:12:132:12 | f | semmle.label | f | +| test.go:134:37:134:38 | rc | semmle.label | rc | +| test.go:143:2:143:59 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:143:51:143:58 | filename | semmle.label | filename | +| test.go:144:20:144:37 | implicit dereference | semmle.label | implicit dereference | +| test.go:144:20:144:37 | implicit read of field Reader | semmle.label | implicit read of field Reader | +| test.go:145:12:145:12 | f | semmle.label | f | +| test.go:145:12:145:19 | call to Open | semmle.label | call to Open | +| test.go:147:37:147:38 | rc | semmle.label | rc | +| test.go:158:19:158:22 | definition of file | semmle.label | definition of file | +| test.go:159:2:159:29 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:159:25:159:28 | file | semmle.label | file | +| test.go:160:2:160:69 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:160:32:160:53 | call to NewReader | semmle.label | call to NewReader | +| test.go:160:48:160:52 | file1 | semmle.label | file1 | +| test.go:163:3:163:36 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:163:26:163:29 | file | semmle.label | file | +| test.go:164:36:164:51 | fileReaderCloser | semmle.label | fileReaderCloser | +| test.go:169:28:169:31 | definition of file | semmle.label | definition of file | +| test.go:170:2:170:29 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:170:25:170:28 | file | semmle.label | file | +| test.go:171:2:171:78 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:171:41:171:62 | call to NewReader | semmle.label | call to NewReader | +| test.go:171:57:171:61 | file2 | semmle.label | file2 | +| test.go:175:26:175:29 | file | semmle.label | file | +| test.go:175:26:175:36 | call to Open | semmle.label | call to Open | +| test.go:176:36:176:51 | fileReaderCloser | semmle.label | fileReaderCloser | +| test.go:181:17:181:20 | definition of file | semmle.label | definition of file | +| test.go:184:2:184:73 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:184:41:184:44 | file | semmle.label | file | +| test.go:186:2:186:12 | bzip2Reader | semmle.label | bzip2Reader | +| test.go:187:12:187:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:187:26:187:36 | bzip2Reader | semmle.label | bzip2Reader | +| test.go:189:18:189:24 | tarRead | semmle.label | tarRead | +| test.go:208:12:208:15 | definition of file | semmle.label | definition of file | +| test.go:211:17:211:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:211:33:211:36 | file | semmle.label | file | +| test.go:213:2:213:12 | bzip2Reader | semmle.label | bzip2Reader | +| test.go:214:12:214:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:214:26:214:36 | bzip2Reader | semmle.label | bzip2Reader | +| test.go:216:18:216:24 | tarRead | semmle.label | tarRead | +| test.go:233:12:233:15 | definition of file | semmle.label | definition of file | +| test.go:236:17:236:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:236:33:236:36 | file | semmle.label | file | +| test.go:238:2:238:12 | flateReader | semmle.label | flateReader | +| test.go:239:12:239:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:239:26:239:36 | flateReader | semmle.label | flateReader | +| test.go:241:18:241:24 | tarRead | semmle.label | tarRead | +| test.go:258:21:258:24 | definition of file | semmle.label | definition of file | +| test.go:261:17:261:46 | call to NewReader | semmle.label | call to NewReader | +| test.go:261:42:261:45 | file | semmle.label | file | +| test.go:263:2:263:12 | flateReader | semmle.label | flateReader | +| test.go:264:12:264:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:264:26:264:36 | flateReader | semmle.label | flateReader | +| test.go:266:18:266:24 | tarRead | semmle.label | tarRead | +| test.go:283:17:283:20 | definition of file | semmle.label | definition of file | +| test.go:286:2:286:73 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:286:41:286:44 | file | semmle.label | file | +| test.go:288:2:288:12 | flateReader | semmle.label | flateReader | +| test.go:289:12:289:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:289:26:289:36 | flateReader | semmle.label | flateReader | +| test.go:291:18:291:24 | tarRead | semmle.label | tarRead | +| test.go:308:20:308:23 | definition of file | semmle.label | definition of file | +| test.go:311:2:311:47 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:311:43:311:46 | file | semmle.label | file | +| test.go:313:2:313:11 | zlibReader | semmle.label | zlibReader | +| test.go:314:12:314:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:314:26:314:35 | zlibReader | semmle.label | zlibReader | +| test.go:316:18:316:24 | tarRead | semmle.label | tarRead | +| test.go:333:11:333:14 | definition of file | semmle.label | definition of file | +| test.go:336:2:336:38 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:336:34:336:37 | file | semmle.label | file | +| test.go:338:2:338:11 | zlibReader | semmle.label | zlibReader | +| test.go:339:12:339:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:339:26:339:35 | zlibReader | semmle.label | zlibReader | +| test.go:341:18:341:24 | tarRead | semmle.label | tarRead | +| test.go:358:13:358:16 | definition of file | semmle.label | definition of file | +| test.go:361:18:361:39 | call to NewReader | semmle.label | call to NewReader | +| test.go:361:35:361:38 | file | semmle.label | file | +| test.go:363:2:363:13 | snappyReader | semmle.label | snappyReader | +| test.go:364:2:364:13 | snappyReader | semmle.label | snappyReader | +| test.go:365:12:365:38 | call to NewReader | semmle.label | call to NewReader | +| test.go:365:26:365:37 | snappyReader | semmle.label | snappyReader | +| test.go:367:18:367:24 | tarRead | semmle.label | tarRead | +| test.go:384:22:384:25 | definition of file | semmle.label | definition of file | +| test.go:387:18:387:48 | call to NewReader | semmle.label | call to NewReader | +| test.go:387:44:387:47 | file | semmle.label | file | +| test.go:389:2:389:13 | snappyReader | semmle.label | snappyReader | +| test.go:391:2:391:13 | snappyReader | semmle.label | snappyReader | +| test.go:392:2:392:13 | snappyReader | semmle.label | snappyReader | +| test.go:393:12:393:38 | call to NewReader | semmle.label | call to NewReader | +| test.go:393:26:393:37 | snappyReader | semmle.label | snappyReader | +| test.go:395:18:395:24 | tarRead | semmle.label | tarRead | +| test.go:412:9:412:12 | definition of file | semmle.label | definition of file | +| test.go:415:14:415:31 | call to NewReader | semmle.label | call to NewReader | +| test.go:415:27:415:30 | file | semmle.label | file | +| test.go:417:2:417:9 | s2Reader | semmle.label | s2Reader | +| test.go:418:2:418:9 | s2Reader | semmle.label | s2Reader | +| test.go:420:2:420:9 | s2Reader | semmle.label | s2Reader | +| test.go:421:12:421:34 | call to NewReader | semmle.label | call to NewReader | +| test.go:421:26:421:33 | s2Reader | semmle.label | s2Reader | +| test.go:423:18:423:24 | tarRead | semmle.label | tarRead | +| test.go:440:19:440:21 | definition of src | semmle.label | definition of src | +| test.go:441:2:441:37 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:441:34:441:36 | src | semmle.label | src | +| test.go:444:12:444:32 | type conversion | semmle.label | type conversion | +| test.go:445:23:445:28 | newSrc | semmle.label | newSrc | +| test.go:447:11:447:14 | definition of file | semmle.label | definition of file | +| test.go:450:2:450:38 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:450:34:450:37 | file | semmle.label | file | +| test.go:452:2:452:11 | gzipReader | semmle.label | gzipReader | +| test.go:453:12:453:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:453:26:453:35 | gzipReader | semmle.label | gzipReader | +| test.go:455:18:455:24 | tarRead | semmle.label | tarRead | +| test.go:472:20:472:23 | definition of file | semmle.label | definition of file | +| test.go:475:2:475:47 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:475:43:475:46 | file | semmle.label | file | +| test.go:477:2:477:11 | gzipReader | semmle.label | gzipReader | +| test.go:479:2:479:11 | gzipReader | semmle.label | gzipReader | +| test.go:480:12:480:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:480:26:480:35 | gzipReader | semmle.label | gzipReader | +| test.go:482:18:482:24 | tarRead | semmle.label | tarRead | +| test.go:499:20:499:23 | definition of file | semmle.label | definition of file | +| test.go:502:2:502:49 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:502:45:502:48 | file | semmle.label | file | +| test.go:504:2:504:12 | pgzipReader | semmle.label | pgzipReader | +| test.go:506:2:506:12 | pgzipReader | semmle.label | pgzipReader | +| test.go:507:12:507:37 | call to NewReader | semmle.label | call to NewReader | +| test.go:507:26:507:36 | pgzipReader | semmle.label | pgzipReader | +| test.go:509:18:509:24 | tarRead | semmle.label | tarRead | +| test.go:526:21:526:24 | definition of file | semmle.label | definition of file | +| test.go:529:2:529:47 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:529:43:529:46 | file | semmle.label | file | +| test.go:531:2:531:11 | zstdReader | semmle.label | zstdReader | +| test.go:533:2:533:11 | zstdReader | semmle.label | zstdReader | +| test.go:535:2:535:11 | zstdReader | semmle.label | zstdReader | +| test.go:536:12:536:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:536:26:536:35 | zstdReader | semmle.label | zstdReader | +| test.go:538:18:538:24 | tarRead | semmle.label | tarRead | +| test.go:555:19:555:22 | definition of file | semmle.label | definition of file | +| test.go:558:16:558:42 | call to NewReader | semmle.label | call to NewReader | +| test.go:558:38:558:41 | file | semmle.label | file | +| test.go:560:2:560:11 | zstdReader | semmle.label | zstdReader | +| test.go:561:12:561:36 | call to NewReader | semmle.label | call to NewReader | +| test.go:561:26:561:35 | zstdReader | semmle.label | zstdReader | +| test.go:563:18:563:24 | tarRead | semmle.label | tarRead | +| test.go:580:9:580:12 | definition of file | semmle.label | definition of file | +| test.go:583:2:583:34 | ... := ...[0] | semmle.label | ... := ...[0] | +| test.go:583:30:583:33 | file | semmle.label | file | +| test.go:585:2:585:9 | xzReader | semmle.label | xzReader | +| test.go:586:12:586:34 | call to NewReader | semmle.label | call to NewReader | +| test.go:586:26:586:33 | xzReader | semmle.label | xzReader | +| test.go:589:18:589:24 | tarRead | semmle.label | tarRead | +| test.go:590:19:590:25 | tarRead | semmle.label | tarRead | +| test.go:611:22:611:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:611:22:611:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:611:22:611:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:611:22:611:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:611:22:611:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:611:22:611:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:611:22:611:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:611:22:611:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:611:22:611:28 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:621:25:621:31 | tarRead | semmle.label | tarRead | +| test.go:621:25:621:31 | tarRead | semmle.label | tarRead | +| test.go:621:25:621:31 | tarRead | semmle.label | tarRead | +| test.go:621:25:621:31 | tarRead | semmle.label | tarRead | +| test.go:621:25:621:31 | tarRead | semmle.label | tarRead | +| test.go:621:25:621:31 | tarRead | semmle.label | tarRead | +| test.go:621:25:621:31 | tarRead | semmle.label | tarRead | +| test.go:621:25:621:31 | tarRead | semmle.label | tarRead | +| test.go:621:25:621:31 | tarRead | semmle.label | tarRead | +| test.go:627:23:627:29 | definition of tarRead | semmle.label | definition of tarRead | +| test.go:629:2:629:8 | tarRead | semmle.label | tarRead | +subpaths +#select +| test.go:134:37:134:38 | rc | test.go:59:16:59:44 | call to FormValue | test.go:134:37:134:38 | rc | This decompression is $@. | test.go:59:16:59:44 | call to FormValue | decompressing compressed data without managing output size | +| test.go:147:37:147:38 | rc | test.go:59:16:59:44 | call to FormValue | test.go:147:37:147:38 | rc | This decompression is $@. | test.go:59:16:59:44 | call to FormValue | decompressing compressed data without managing output size | +| test.go:164:36:164:51 | fileReaderCloser | test.go:60:15:60:26 | selection of Body | test.go:164:36:164:51 | fileReaderCloser | This decompression is $@. | test.go:60:15:60:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:176:36:176:51 | fileReaderCloser | test.go:61:24:61:35 | selection of Body | test.go:176:36:176:51 | fileReaderCloser | This decompression is $@. | test.go:61:24:61:35 | selection of Body | decompressing compressed data without managing output size | +| test.go:186:2:186:12 | bzip2Reader | test.go:62:13:62:24 | selection of Body | test.go:186:2:186:12 | bzip2Reader | This decompression is $@. | test.go:62:13:62:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:213:2:213:12 | bzip2Reader | test.go:64:8:64:19 | selection of Body | test.go:213:2:213:12 | bzip2Reader | This decompression is $@. | test.go:64:8:64:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:238:2:238:12 | flateReader | test.go:66:8:66:19 | selection of Body | test.go:238:2:238:12 | flateReader | This decompression is $@. | test.go:66:8:66:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:263:2:263:12 | flateReader | test.go:68:17:68:28 | selection of Body | test.go:263:2:263:12 | flateReader | This decompression is $@. | test.go:68:17:68:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:288:2:288:12 | flateReader | test.go:70:13:70:24 | selection of Body | test.go:288:2:288:12 | flateReader | This decompression is $@. | test.go:70:13:70:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:313:2:313:11 | zlibReader | test.go:72:16:72:27 | selection of Body | test.go:313:2:313:11 | zlibReader | This decompression is $@. | test.go:72:16:72:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:338:2:338:11 | zlibReader | test.go:74:7:74:18 | selection of Body | test.go:338:2:338:11 | zlibReader | This decompression is $@. | test.go:74:7:74:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:363:2:363:13 | snappyReader | test.go:76:9:76:20 | selection of Body | test.go:363:2:363:13 | snappyReader | This decompression is $@. | test.go:76:9:76:20 | selection of Body | decompressing compressed data without managing output size | +| test.go:364:2:364:13 | snappyReader | test.go:76:9:76:20 | selection of Body | test.go:364:2:364:13 | snappyReader | This decompression is $@. | test.go:76:9:76:20 | selection of Body | decompressing compressed data without managing output size | +| test.go:389:2:389:13 | snappyReader | test.go:78:18:78:29 | selection of Body | test.go:389:2:389:13 | snappyReader | This decompression is $@. | test.go:78:18:78:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:391:2:391:13 | snappyReader | test.go:78:18:78:29 | selection of Body | test.go:391:2:391:13 | snappyReader | This decompression is $@. | test.go:78:18:78:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:392:2:392:13 | snappyReader | test.go:78:18:78:29 | selection of Body | test.go:392:2:392:13 | snappyReader | This decompression is $@. | test.go:78:18:78:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:417:2:417:9 | s2Reader | test.go:80:5:80:16 | selection of Body | test.go:417:2:417:9 | s2Reader | This decompression is $@. | test.go:80:5:80:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:418:2:418:9 | s2Reader | test.go:80:5:80:16 | selection of Body | test.go:418:2:418:9 | s2Reader | This decompression is $@. | test.go:80:5:80:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:420:2:420:9 | s2Reader | test.go:80:5:80:16 | selection of Body | test.go:420:2:420:9 | s2Reader | This decompression is $@. | test.go:80:5:80:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:445:23:445:28 | newSrc | test.go:84:15:84:26 | selection of Body | test.go:445:23:445:28 | newSrc | This decompression is $@. | test.go:84:15:84:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:452:2:452:11 | gzipReader | test.go:82:7:82:18 | selection of Body | test.go:452:2:452:11 | gzipReader | This decompression is $@. | test.go:82:7:82:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:477:2:477:11 | gzipReader | test.go:85:16:85:27 | selection of Body | test.go:477:2:477:11 | gzipReader | This decompression is $@. | test.go:85:16:85:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:479:2:479:11 | gzipReader | test.go:85:16:85:27 | selection of Body | test.go:479:2:479:11 | gzipReader | This decompression is $@. | test.go:85:16:85:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:504:2:504:12 | pgzipReader | test.go:87:16:87:27 | selection of Body | test.go:504:2:504:12 | pgzipReader | This decompression is $@. | test.go:87:16:87:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:506:2:506:12 | pgzipReader | test.go:87:16:87:27 | selection of Body | test.go:506:2:506:12 | pgzipReader | This decompression is $@. | test.go:87:16:87:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:531:2:531:11 | zstdReader | test.go:89:17:89:28 | selection of Body | test.go:531:2:531:11 | zstdReader | This decompression is $@. | test.go:89:17:89:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:533:2:533:11 | zstdReader | test.go:89:17:89:28 | selection of Body | test.go:533:2:533:11 | zstdReader | This decompression is $@. | test.go:89:17:89:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:535:2:535:11 | zstdReader | test.go:89:17:89:28 | selection of Body | test.go:535:2:535:11 | zstdReader | This decompression is $@. | test.go:89:17:89:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:560:2:560:11 | zstdReader | test.go:91:15:91:26 | selection of Body | test.go:560:2:560:11 | zstdReader | This decompression is $@. | test.go:91:15:91:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:585:2:585:9 | xzReader | test.go:93:5:93:16 | selection of Body | test.go:585:2:585:9 | xzReader | This decompression is $@. | test.go:93:5:93:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:62:13:62:24 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:62:13:62:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:64:8:64:19 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:64:8:64:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:66:8:66:19 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:66:8:66:19 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:68:17:68:28 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:68:17:68:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:70:13:70:24 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:70:13:70:24 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:72:16:72:27 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:72:16:72:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:74:7:74:18 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:74:7:74:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:76:9:76:20 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:76:9:76:20 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:78:18:78:29 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:78:18:78:29 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:80:5:80:16 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:80:5:80:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:82:7:82:18 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:82:7:82:18 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:85:16:85:27 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:85:16:85:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:87:16:87:27 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:87:16:87:27 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:89:17:89:28 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:89:17:89:28 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:91:15:91:26 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:91:15:91:26 | selection of Body | decompressing compressed data without managing output size | +| test.go:621:25:621:31 | tarRead | test.go:93:5:93:16 | selection of Body | test.go:621:25:621:31 | tarRead | This decompression is $@. | test.go:93:5:93:16 | selection of Body | decompressing compressed data without managing output size | +| test.go:629:2:629:8 | tarRead | test.go:93:5:93:16 | selection of Body | test.go:629:2:629:8 | tarRead | This decompression is $@. | test.go:93:5:93:16 | selection of Body | decompressing compressed data without managing output size | diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.qlref b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.qlref new file mode 100644 index 00000000000..c24a4cc9678 --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.qlref @@ -0,0 +1 @@ +experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql \ No newline at end of file diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/go.mod b/go/ql/test/experimental/CWE-522-DecompressionBombs/go.mod new file mode 100644 index 00000000000..c72caac9fe7 --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/go.mod @@ -0,0 +1,12 @@ +module Bombs + +go 1.20 + +require ( + github.com/DataDog/zstd v1.5.5 + github.com/dsnet/compress v0.0.1 + github.com/golang/snappy v0.0.4 + github.com/klauspost/compress v1.16.6 + github.com/klauspost/pgzip v1.2.6 + github.com/ulikunitz/xz v0.5.11 +) diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go new file mode 100644 index 00000000000..dc359c387ac --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/test.go @@ -0,0 +1,655 @@ +package main + +//go:generate depstubber -vendor github.com/dsnet/compress/bzip2 Reader NewReader +//go:generate depstubber -vendor github.com/klauspost/compress/flate "" NewReader +//go:generate depstubber -vendor github.com/dsnet/compress/flate Reader NewReader +//go:generate depstubber -vendor github.com/klauspost/compress/zlib "" NewReader +//go:generate depstubber -vendor github.com/golang/snappy Reader NewReader +//go:generate depstubber -vendor github.com/klauspost/compress/snappy "" NewReader +//go:generate depstubber -vendor github.com/klauspost/compress/s2 Reader NewReader +//go:generate depstubber -vendor github.com/klauspost/compress/gzip Reader NewReader +//go:generate depstubber -vendor github.com/klauspost/pgzip Reader NewReader +//go:generate depstubber -vendor github.com/klauspost/compress/zstd Decoder NewReader +//go:generate depstubber -vendor github.com/DataDog/zstd "" NewReader +//go:generate depstubber -vendor github.com/ulikunitz/xz Reader NewReader +//go:generate depstubber -vendor github.com/klauspost/compress/zip FileHeader,File,Reader,ReadCloser NewReader,OpenReader + +import ( + "archive/tar" + "archive/zip" + "bytes" + "compress/bzip2" + "compress/flate" + "compress/gzip" + "compress/zlib" + "fmt" + "io" + "net/http" + "os" + "testing/fstest" + + bzip2Dsnet "github.com/dsnet/compress/bzip2" + flateDsnet "github.com/dsnet/compress/flate" + "github.com/golang/snappy" + flateKlauspost "github.com/klauspost/compress/flate" + gzipKlauspost "github.com/klauspost/compress/gzip" + "github.com/klauspost/compress/s2" + snappyKlauspost "github.com/klauspost/compress/snappy" + zlibKlauspost "github.com/klauspost/compress/zlib" + pgzipKlauspost "github.com/klauspost/pgzip" + "github.com/ulikunitz/xz" + + zstdDataDog "github.com/DataDog/zstd" + zipKlauspost "github.com/klauspost/compress/zip" + zstdKlauspost "github.com/klauspost/compress/zstd" +) + +func main() { + DecompressHandler := http.HandlerFunc(DecompressHandler) + http.Handle("/Decompress", DecompressHandler) + err := http.ListenAndServe(":8080", nil) + if err != nil { + return + } + +} +func DecompressHandler(w http.ResponseWriter, request *http.Request) { + GZipOpenReaderSafe(request.PostFormValue("test")) + ZipOpenReaderSafe(request.PostFormValue("test")) + ZipOpenReader(request.FormValue("filepath")) + ZipNewReader(request.Body) + ZipNewReaderKlauspost(request.Body) + Bzip2Dsnet(request.Body) + Bzip2DsnetSafe(request.Body) + Bzip2(request.Body) + Bzip2Safe(request.Body) + Flate(request.Body) + FlateSafe(request.Body) + FlateKlauspost(request.Body) + FlateKlauspostSafe(request.Body) + FlateDsnet(request.Body) + FlateDsnetSafe(request.Body) + ZlibKlauspost(request.Body) + ZlibKlauspostSafe(request.Body) + Zlib(request.Body) + ZlibSafe(request.Body) + Snappy(request.Body) + SnappySafe(request.Body) + SnappyKlauspost(request.Body) + SnappyKlauspostSafe(request.Body) + S2(request.Body) + S2Safe(request.Body) + Gzip(request.Body) + GzipSafe(request.Body) + GZipIoReader(request.Body, "dest") + GzipKlauspost(request.Body) + GzipKlauspostSafe(request.Body) + PzipKlauspost(request.Body) + PzipKlauspostSafe(request.Body) + Zstd_Klauspost(request.Body) + Zstd_KlauspostSafe(request.Body) + Zstd_DataDog(request.Body) + Zstd_DataDogSafe(request.Body) + Xz(request.Body) + XzSafe(request.Body) +} + +func GZipOpenReaderSafe(filename string) { + var src io.Reader + src, _ = os.Open(filename) + gzipR, _ := gzip.NewReader(src) + dstF, _ := os.OpenFile("./test", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0755) + defer dstF.Close() + var newSrc io.Reader + newSrc = io.LimitReader(gzipR, 1024*1024*1024*5) // GOOD: The output size is being controlled + _, _ = io.Copy(dstF, newSrc) +} + +func ZipOpenReaderSafe(filename string) { + r, _ := zip.OpenReader(filename) + var totalBytes int64 = 0 + for _, f := range r.File { + rc, _ := f.Open() + for { + result, _ := io.CopyN(os.Stdout, rc, 68) // GOOD: The output size is being controlled + if result == 0 { + _ = rc.Close() + break + } + totalBytes = totalBytes + result + if totalBytes > 1024*1024*1024*5 { + fmt.Print(totalBytes, "exceeded") + break + } + } + } +} + +func ZipOpenReader(filename string) { + // Open the zip file + zipReader, _ := zip.OpenReader(filename) + for _, f := range zipReader.File { + rc, _ := f.Open() + for { + result, _ := io.CopyN(os.Stdout, rc, 68) // $ hasValueFlow="rc" + if result == 0 { + _ = rc.Close() + break + } + fmt.Print(result) + _ = rc.Close() + } + } + zipKlauspostReader, _ := zipKlauspost.OpenReader(filename) + for _, f := range zipKlauspostReader.File { + rc, _ := f.Open() + for { + result, _ := io.CopyN(os.Stdout, rc, 68) // $ hasValueFlow="rc" + if result == 0 { + _ = rc.Close() + break + } + fmt.Print(result) + _ = rc.Close() + } + } +} + +func ZipNewReader(file io.Reader) { + file1, _ := io.ReadAll(file) + zipReader, _ := zip.NewReader(bytes.NewReader(file1), int64(32<<20)) + for _, file := range zipReader.File { + fileWriter := bytes.NewBuffer([]byte{}) + fileReaderCloser, _ := file.Open() + result, _ := io.Copy(fileWriter, fileReaderCloser) // $ hasValueFlow="fileReaderCloser" + fmt.Print(result) + } +} + +func ZipNewReaderKlauspost(file io.Reader) { + file2, _ := io.ReadAll(file) + zipReader, _ := zipKlauspost.NewReader(bytes.NewReader(file2), int64(32<<20)) + for _, file := range zipReader.File { + fileWriter := bytes.NewBuffer([]byte{}) + // file.OpenRaw() + fileReaderCloser, _ := file.Open() + result, _ := io.Copy(fileWriter, fileReaderCloser) // $ hasValueFlow="fileReaderCloser" + fmt.Print(result) + } +} + +func Bzip2Dsnet(file io.Reader) { + var tarRead *tar.Reader + + bzip2Reader, _ := bzip2Dsnet.NewReader(file, &bzip2Dsnet.ReaderConfig{}) + var out []byte = make([]byte, 70) + bzip2Reader.Read(out) // $ hasValueFlow="bzip2Reader" + tarRead = tar.NewReader(bzip2Reader) + + TarDecompressor(tarRead) + +} +func Bzip2DsnetSafe(file io.Reader) { + bzip2Reader, _ := bzip2Dsnet.NewReader(file, &bzip2Dsnet.ReaderConfig{}) + var out []byte = make([]byte, 70) + var totalBytes int64 = 0 + i := 1 + for i > 0 { + i, _ = bzip2Reader.Read(out) // GOOD: The output size is being controlled + fmt.Println("do sth with output:", bzip2Reader) + totalBytes = totalBytes + int64(i) + if totalBytes > 1024*1024*1024*5 { + fmt.Print(totalBytes, "exceeded") + break + } + } + +} +func Bzip2(file io.Reader) { + var tarRead *tar.Reader + + bzip2Reader := bzip2.NewReader(file) + var out []byte = make([]byte, 70) + bzip2Reader.Read(out) // $ hasValueFlow="bzip2Reader" + tarRead = tar.NewReader(bzip2Reader) + + TarDecompressor(tarRead) +} +func Bzip2Safe(file io.Reader) { + bzip2Reader := bzip2.NewReader(file) + var out []byte = make([]byte, 70) + var totalBytes int64 = 0 + i := 1 + for i > 0 { + i, _ = bzip2Reader.Read(out) // GOOD: The output size is being controlled + fmt.Println("do sth with output:", bzip2Reader) + totalBytes = totalBytes + int64(i) + if totalBytes > 1024*1024*1024*5 { + fmt.Print(totalBytes, "exceeded") + break + } + } +} +func Flate(file io.Reader) { + var tarRead *tar.Reader + + flateReader := flate.NewReader(file) + var out []byte = make([]byte, 70) + flateReader.Read(out) // $ hasValueFlow="flateReader" + tarRead = tar.NewReader(flateReader) + + TarDecompressor(tarRead) +} +func FlateSafe(file io.Reader) { + flateReader := flate.NewReader(file) + var out []byte = make([]byte, 70) + var totalBytes int64 = 0 + i := 1 + for i > 0 { + i, _ = flateReader.Read(out) // GOOD: The output size is being controlled + fmt.Println("do sth with output:", flateReader) + totalBytes = totalBytes + int64(i) + if totalBytes > 1024*1024*1024*5 { + fmt.Print(totalBytes, "exceeded") + break + } + } +} +func FlateKlauspost(file io.Reader) { + var tarRead *tar.Reader + + flateReader := flateKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + flateReader.Read(out) // $ hasValueFlow="flateReader" + tarRead = tar.NewReader(flateReader) + + TarDecompressor(tarRead) +} +func FlateKlauspostSafe(file io.Reader) { + flateReader := flateKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + var totalBytes int64 = 0 + i := 1 + for i > 0 { + i, _ = flateReader.Read(out) // GOOD: The output size is being controlled + fmt.Println("do sth with output:", flateReader) + totalBytes = totalBytes + int64(i) + if totalBytes > 1024*1024*1024*5 { + fmt.Print(totalBytes, "exceeded") + break + } + } +} +func FlateDsnet(file io.Reader) { + var tarRead *tar.Reader + + flateReader, _ := flateDsnet.NewReader(file, &flateDsnet.ReaderConfig{}) + var out []byte = make([]byte, 70) + flateReader.Read(out) // $ hasValueFlow="flateReader" + tarRead = tar.NewReader(flateReader) + + TarDecompressor(tarRead) +} +func FlateDsnetSafe(file io.Reader) { + flateReader, _ := flateDsnet.NewReader(file, &flateDsnet.ReaderConfig{}) + var out []byte = make([]byte, 70) + var totalBytes int64 = 0 + i := 1 + for i > 0 { + i, _ = flateReader.Read(out) // GOOD: The output size is being controlled + fmt.Println("do sth with output:", flateReader) + totalBytes = totalBytes + int64(i) + if totalBytes > 1024*1024*1024*5 { + fmt.Print(totalBytes, "exceeded") + break + } + } +} +func ZlibKlauspost(file io.Reader) { + var tarRead *tar.Reader + + zlibReader, _ := zlibKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + zlibReader.Read(out) // $ hasValueFlow="zlibReader" + tarRead = tar.NewReader(zlibReader) + + TarDecompressor(tarRead) +} +func ZlibKlauspostSafe(file io.Reader) { + zlibReader, _ := zlibKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + var totalBytes int64 = 0 + i := 1 + for i > 0 { + i, _ = zlibReader.Read(out) // GOOD: The output size is being controlled + fmt.Println("do sth with output:", zlibReader) + totalBytes = totalBytes + int64(i) + if totalBytes > 1024*1024*1024*5 { + fmt.Print(totalBytes, "exceeded") + break + } + } +} +func Zlib(file io.Reader) { + var tarRead *tar.Reader + + zlibReader, _ := zlib.NewReader(file) + var out []byte = make([]byte, 70) + zlibReader.Read(out) // $ hasValueFlow="zlibReader" + tarRead = tar.NewReader(zlibReader) + + TarDecompressor(tarRead) +} +func ZlibSafe(file io.Reader) { + zlibReader, _ := zlib.NewReader(file) + var out []byte = make([]byte, 70) + var totalBytes int64 = 0 + i := 1 + for i > 0 { + i, _ = zlibReader.Read(out) // GOOD: The output size is being controlled + fmt.Println("do sth with output:", zlibReader) + totalBytes = totalBytes + int64(i) + if totalBytes > 1024*1024*1024*5 { + fmt.Print(totalBytes, "exceeded") + break + } + } +} +func Snappy(file io.Reader) { + var tarRead *tar.Reader + + snappyReader := snappy.NewReader(file) + var out []byte = make([]byte, 70) + snappyReader.Read(out) // $ hasValueFlow="snappyReader" + snappyReader.ReadByte() // $ hasValueFlow="snappyReader" + tarRead = tar.NewReader(snappyReader) + + TarDecompressor(tarRead) +} +func SnappySafe(file io.Reader) { + snappyReader := snappy.NewReader(file) + var out []byte = make([]byte, 70) + var totalBytes int64 = 0 + i := 1 + for i > 0 { + i, _ = snappyReader.Read(out) // GOOD: The output size is being controlled + fmt.Println("do sth with output:", snappyReader) + totalBytes = totalBytes + int64(i) + if totalBytes > 1024*1024*1024*5 { + fmt.Print(totalBytes, "exceeded") + break + } + } +} +func SnappyKlauspost(file io.Reader) { + var tarRead *tar.Reader + + snappyReader := snappyKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + snappyReader.Read(out) // $ hasValueFlow="snappyReader" + var buf bytes.Buffer + snappyReader.DecodeConcurrent(&buf, 2) // $ hasValueFlow="snappyReader" + snappyReader.ReadByte() // $ hasValueFlow="snappyReader" + tarRead = tar.NewReader(snappyReader) + + TarDecompressor(tarRead) +} +func SnappyKlauspostSafe(file io.Reader) { + snappyReader := snappyKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + var totalBytes int64 = 0 + i := 1 + for i > 0 { + i, _ = snappyReader.Read(out) // GOOD: The output size is being controlled + fmt.Println("do sth with output:", snappyReader) + totalBytes = totalBytes + int64(i) + if totalBytes > 1024*1024*1024*5 { + fmt.Print(totalBytes, "exceeded") + break + } + } +} +func S2(file io.Reader) { + var tarRead *tar.Reader + + s2Reader := s2.NewReader(file) + var out []byte = make([]byte, 70) + s2Reader.Read(out) // $ hasValueFlow="s2Reader" + s2Reader.ReadByte() // $ hasValueFlow="s2Reader" + var buf bytes.Buffer + s2Reader.DecodeConcurrent(&buf, 2) // $ hasValueFlow="s2Reader" + tarRead = tar.NewReader(s2Reader) + + TarDecompressor(tarRead) +} +func S2Safe(file io.Reader) { + s2Reader := s2.NewReader(file) + var out []byte = make([]byte, 70) + var totalBytes int64 = 0 + i := 1 + for i > 0 { + i, _ = s2Reader.Read(out) // GOOD: The output size is being controlled + fmt.Println("do sth with output:", s2Reader) + totalBytes = totalBytes + int64(i) + if totalBytes > 1024*1024*1024*5 { + fmt.Print(totalBytes, "exceeded") + break + } + } +} +func GZipIoReader(src io.Reader, dst string) { + gzipReader, _ := gzip.NewReader(src) + dstF, _ := os.OpenFile(dst, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0755) + defer dstF.Close() + newSrc := io.Reader(gzipReader) + _, _ = io.Copy(dstF, newSrc) // $ hasValueFlow="newSrc" +} +func Gzip(file io.Reader) { + var tarRead *tar.Reader + + gzipReader, _ := gzip.NewReader(file) + var out []byte = make([]byte, 70) + gzipReader.Read(out) // $ hasValueFlow="gzipReader" + tarRead = tar.NewReader(gzipReader) + + TarDecompressor(tarRead) +} +func GzipSafe(file io.Reader) { + gzipReader, _ := gzip.NewReader(file) + var out []byte = make([]byte, 70) + var totalBytes int64 = 0 + i := 1 + for i > 0 { + i, _ = gzipReader.Read(out) // GOOD: The output size is being controlled + fmt.Println("do sth with output:", gzipReader) + totalBytes = totalBytes + int64(i) + if totalBytes > 1024*1024*1024*5 { + fmt.Print(totalBytes, "exceeded") + break + } + } +} +func GzipKlauspost(file io.Reader) { + var tarRead *tar.Reader + + gzipReader, _ := gzipKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + gzipReader.Read(out) // $ hasValueFlow="gzipReader" + var buf bytes.Buffer + gzipReader.WriteTo(&buf) // $ hasValueFlow="gzipReader" + tarRead = tar.NewReader(gzipReader) + + TarDecompressor(tarRead) +} +func GzipKlauspostSafe(file io.Reader) { + gzipReader, _ := gzipKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + var totalBytes int64 = 0 + i := 1 + for i > 0 { + i, _ = gzipReader.Read(out) // GOOD: The output size is being controlled + fmt.Println("do sth with output:", gzipReader) + totalBytes = totalBytes + int64(i) + if totalBytes > 1024*1024*1024*5 { + fmt.Print(totalBytes, "exceeded") + break + } + } +} +func PzipKlauspost(file io.Reader) { + var tarRead *tar.Reader + + pgzipReader, _ := pgzipKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + pgzipReader.Read(out) // $ hasValueFlow="pgzipReader" + var buf bytes.Buffer + pgzipReader.WriteTo(&buf) // $ hasValueFlow="pgzipReader" + tarRead = tar.NewReader(pgzipReader) + + TarDecompressor(tarRead) +} +func PzipKlauspostSafe(file io.Reader) { + pgzipReader, _ := pgzipKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + var totalBytes int64 = 0 + i := 1 + for i > 0 { + i, _ = pgzipReader.Read(out) // GOOD: The output size is being controlled + fmt.Println("do sth with output:", pgzipReader) + totalBytes = totalBytes + int64(i) + if totalBytes > 1024*1024*1024*5 { + fmt.Print(totalBytes, "exceeded") + break + } + } +} +func Zstd_Klauspost(file io.Reader) { + var tarRead *tar.Reader + + zstdReader, _ := zstdKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + zstdReader.Read(out) // $ hasValueFlow="zstdReader" + var buf bytes.Buffer + zstdReader.WriteTo(&buf) // $ hasValueFlow="zstdReader" + var src []byte + zstdReader.DecodeAll(src, nil) // $ hasValueFlow="zstdReader" + tarRead = tar.NewReader(zstdReader) + + TarDecompressor(tarRead) +} +func Zstd_KlauspostSafe(file io.Reader) { + zstdReader, _ := zstdKlauspost.NewReader(file) + var out []byte = make([]byte, 70) + var totalBytes int64 = 0 + i := 1 + for i > 0 { + i, _ = zstdReader.Read(out) // GOOD: The output size is being controlled + fmt.Println("do sth with output:", zstdReader) + totalBytes = totalBytes + int64(i) + if totalBytes > 1024*1024*1024*5 { + fmt.Print(totalBytes, "exceeded") + break + } + } +} +func Zstd_DataDog(file io.Reader) { + var tarRead *tar.Reader + + zstdReader := zstdDataDog.NewReader(file) + var out []byte = make([]byte, 70) + zstdReader.Read(out) // $ hasValueFlow="zstdReader" + tarRead = tar.NewReader(zstdReader) + + TarDecompressor(tarRead) +} +func Zstd_DataDogSafe(file io.Reader) { + zstdReader := zstdDataDog.NewReader(file) + var out []byte = make([]byte, 70) + var totalBytes int64 = 0 + i := 1 + for i > 0 { + i, _ = zstdReader.Read(out) // GOOD: The output size is being controlled + fmt.Println("do sth with output:", zstdReader) + totalBytes = totalBytes + int64(i) + if totalBytes > 1024*1024*1024*5 { + fmt.Print(totalBytes, "exceeded") + break + } + } +} +func Xz(file io.Reader) { + var tarRead *tar.Reader + + xzReader, _ := xz.NewReader(file) + var out []byte = make([]byte, 70) + xzReader.Read(out) // $ hasValueFlow="xzReader" + tarRead = tar.NewReader(xzReader) + fmt.Println(io.SeekStart) + + TarDecompressor(tarRead) + TarDecompressor2(tarRead) + TarDecompressorSafe(tarRead) + TarDecompressorTN(tarRead) +} + +func XzSafe(file io.Reader) { + xzReader, _ := xz.NewReader(file) + var out []byte = make([]byte, 70) + var totalBytes int64 = 0 + i := 1 + for i > 0 { + i, _ = xzReader.Read(out) // GOOD: The output size is being controlled + fmt.Println("do sth with output:", xzReader) + totalBytes = totalBytes + int64(i) + if totalBytes > 1024*1024*1024*5 { + fmt.Print(totalBytes, "exceeded") + break + } + } +} + +func TarDecompressor(tarRead *tar.Reader) { + files := make(fstest.MapFS) + for { + cur, err := tarRead.Next() + if err == io.EOF { + break + } + if cur.Typeflag != tar.TypeReg { + continue + } + data, _ := io.ReadAll(tarRead) // $ hasValueFlow="tarRead" + files[cur.Name] = &fstest.MapFile{Data: data} + } + fmt.Print(files) +} + +func TarDecompressor2(tarRead *tar.Reader) { + var tarOut []byte = make([]byte, 70) + tarRead.Read(tarOut) // $ hasValueFlow="tarRead" + fmt.Println("do sth with output:", tarOut) +} + +func TarDecompressorTN(tarRead *tar.Reader) { + var tarOut []byte = make([]byte, 70) + i := 1 + for i > 0 { + i, _ = tarRead.Read(tarOut) // GOOD: the output size is being controlled + fmt.Println("do sth with output:", tarOut) + } +} + +func TarDecompressorSafe(tarRead *tar.Reader) { + var tarOut []byte = make([]byte, 70) + i := 1 + var totalBytes int64 = 0 + for i > 0 { + i, _ = tarRead.Read(tarOut) // GOOD: The output size is being controlled + fmt.Println("do sth with output:", tarOut) + totalBytes = totalBytes + int64(i) + if totalBytes > 1024*1024*1024*5 { + fmt.Print(totalBytes, "exceeded") + break + } + } +} diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/DataDog/zstd/stub.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/DataDog/zstd/stub.go new file mode 100644 index 00000000000..1551a6ebb1a --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/DataDog/zstd/stub.go @@ -0,0 +1,16 @@ +// Code generated by depstubber. DO NOT EDIT. +// This is a simple stub for github.com/DataDog/zstd, strictly for use in testing. + +// See the LICENSE file for information about the licensing of the original library. +// Source: github.com/DataDog/zstd (exports: ; functions: NewReader) + +// Package zstd is a stub of github.com/DataDog/zstd, generated by depstubber. +package zstd + +import ( + io "io" +) + +func NewReader(_ io.Reader) io.ReadCloser { + return nil +} diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/dsnet/compress/bzip2/stub.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/dsnet/compress/bzip2/stub.go new file mode 100644 index 00000000000..e51c66a76de --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/dsnet/compress/bzip2/stub.go @@ -0,0 +1,35 @@ +// Code generated by depstubber. DO NOT EDIT. +// This is a simple stub for github.com/dsnet/compress/bzip2, strictly for use in testing. + +// See the LICENSE file for information about the licensing of the original library. +// Source: github.com/dsnet/compress/bzip2 (exports: Reader; functions: NewReader) + +// Package bzip2 is a stub of github.com/dsnet/compress/bzip2, generated by depstubber. +package bzip2 + +import ( + io "io" +) + +func NewReader(_ io.Reader, _ *ReaderConfig) (*Reader, error) { + return nil, nil +} + +type Reader struct { + InputOffset int64 + OutputOffset int64 +} + +func (_ *Reader) Close() error { + return nil +} + +func (_ *Reader) Read(_ []byte) (int, error) { + return 0, nil +} + +func (_ *Reader) Reset(_ io.Reader) error { + return nil +} + +type ReaderConfig struct{} diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/dsnet/compress/flate/stub.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/dsnet/compress/flate/stub.go new file mode 100644 index 00000000000..1130904695b --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/dsnet/compress/flate/stub.go @@ -0,0 +1,35 @@ +// Code generated by depstubber. DO NOT EDIT. +// This is a simple stub for github.com/dsnet/compress/flate, strictly for use in testing. + +// See the LICENSE file for information about the licensing of the original library. +// Source: github.com/dsnet/compress/flate (exports: Reader; functions: NewReader) + +// Package flate is a stub of github.com/dsnet/compress/flate, generated by depstubber. +package flate + +import ( + io "io" +) + +func NewReader(_ io.Reader, _ *ReaderConfig) (*Reader, error) { + return nil, nil +} + +type Reader struct { + InputOffset int64 + OutputOffset int64 +} + +func (_ *Reader) Close() error { + return nil +} + +func (_ *Reader) Read(_ []byte) (int, error) { + return 0, nil +} + +func (_ *Reader) Reset(_ io.Reader) error { + return nil +} + +type ReaderConfig struct{} diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/golang/snappy/stub.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/golang/snappy/stub.go new file mode 100644 index 00000000000..d7c0bcb6480 --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/golang/snappy/stub.go @@ -0,0 +1,28 @@ +// Code generated by depstubber. DO NOT EDIT. +// This is a simple stub for github.com/golang/snappy, strictly for use in testing. + +// See the LICENSE file for information about the licensing of the original library. +// Source: github.com/golang/snappy (exports: Reader; functions: NewReader) + +// Package snappy is a stub of github.com/golang/snappy, generated by depstubber. +package snappy + +import ( + io "io" +) + +func NewReader(_ io.Reader) *Reader { + return nil +} + +type Reader struct{} + +func (_ *Reader) Read(_ []byte) (int, error) { + return 0, nil +} + +func (_ *Reader) ReadByte() (byte, error) { + return 0, nil +} + +func (_ *Reader) Reset(_ io.Reader) {} diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/flate/stub.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/flate/stub.go new file mode 100644 index 00000000000..971f4f06d49 --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/flate/stub.go @@ -0,0 +1,16 @@ +// Code generated by depstubber. DO NOT EDIT. +// This is a simple stub for github.com/klauspost/compress/flate, strictly for use in testing. + +// See the LICENSE file for information about the licensing of the original library. +// Source: github.com/klauspost/compress/flate (exports: ; functions: NewReader) + +// Package flate is a stub of github.com/klauspost/compress/flate, generated by depstubber. +package flate + +import ( + io "io" +) + +func NewReader(_ io.Reader) io.ReadCloser { + return nil +} diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/gzip/stub.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/gzip/stub.go new file mode 100644 index 00000000000..6590497526a --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/gzip/stub.go @@ -0,0 +1,47 @@ +// Code generated by depstubber. DO NOT EDIT. +// This is a simple stub for github.com/klauspost/compress/gzip, strictly for use in testing. + +// See the LICENSE file for information about the licensing of the original library. +// Source: github.com/klauspost/compress/gzip (exports: Reader; functions: NewReader) + +// Package gzip is a stub of github.com/klauspost/compress/gzip, generated by depstubber. +package gzip + +import ( + io "io" + time "time" +) + +type Header struct { + Comment string + Extra []byte + ModTime time.Time + Name string + OS byte +} + +func NewReader(_ io.Reader) (*Reader, error) { + return nil, nil +} + +type Reader struct { + Header Header +} + +func (_ *Reader) Close() error { + return nil +} + +func (_ *Reader) Multistream(_ bool) {} + +func (_ *Reader) Read(_ []byte) (int, error) { + return 0, nil +} + +func (_ *Reader) Reset(_ io.Reader) error { + return nil +} + +func (_ *Reader) WriteTo(_ io.Writer) (int64, error) { + return 0, nil +} diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/s2/stub.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/s2/stub.go new file mode 100644 index 00000000000..5d057944d0a --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/s2/stub.go @@ -0,0 +1,84 @@ +// Code generated by depstubber. DO NOT EDIT. +// This is a simple stub for github.com/klauspost/compress/s2, strictly for use in testing. + +// See the LICENSE file for information about the licensing of the original library. +// Source: github.com/klauspost/compress/s2 (exports: Reader; functions: NewReader) + +// Package s2 is a stub of github.com/klauspost/compress/s2, generated by depstubber. +package s2 + +import ( + io "io" +) + +func NewReader(_ io.Reader, _ ...ReaderOption) *Reader { + return nil +} + +type ReadSeeker struct { + Reader *Reader +} + +func (_ ReadSeeker) DecodeConcurrent(_ io.Writer, _ int) (int64, error) { + return 0, nil +} + +func (_ ReadSeeker) Read(_ []byte) (int, error) { + return 0, nil +} + +func (_ ReadSeeker) ReadByte() (byte, error) { + return 0, nil +} + +func (_ ReadSeeker) ReadSeeker(_ bool, _ []byte) (*ReadSeeker, error) { + return nil, nil +} + +func (_ ReadSeeker) Reset(_ io.Reader) {} + +func (_ ReadSeeker) Skip(_ int64) error { + return nil +} + +func (_ ReadSeeker) SkippableCB(_ byte, _ func(io.Reader) error) error { + return nil +} + +func (_ *ReadSeeker) ReadAt(_ []byte, _ int64) (int, error) { + return 0, nil +} + +func (_ *ReadSeeker) Seek(_ int64, _ int) (int64, error) { + return 0, nil +} + +type Reader struct{} + +func (_ *Reader) DecodeConcurrent(_ io.Writer, _ int) (*ReadSeeker, error) { + return nil, nil +} + +func (_ *Reader) Read(_ []byte) (int, error) { + return 0, nil +} + +func (_ *Reader) ReadByte() (byte, error) { + return 0, nil +} + +func (_ *Reader) ReadSeeker(_ bool, _ []byte) (*ReadSeeker, error) { + return nil, nil +} + +func (_ *Reader) Reset(_ io.Reader) {} + +func (_ *Reader) Skip(_ int64) error { + return nil +} + +func (_ *Reader) SkippableCB(_ byte, _ func(io.Reader) error) error { + return nil +} + +type ReaderOption func(*Reader) error diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/snappy/stub.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/snappy/stub.go new file mode 100644 index 00000000000..96330aa7d15 --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/snappy/stub.go @@ -0,0 +1,59 @@ +// Code generated by depstubber. DO NOT EDIT. +// This is a simple stub for github.com/klauspost/compress/snappy, strictly for use in testing. + +// See the LICENSE file for information about the licensing of the original library. +// Source: github.com/klauspost/compress/snappy (exports: ; functions: NewReader) + +// Package snappy is a stub of github.com/klauspost/compress/snappy, generated by depstubber. +package snappy + +import ( + io "io" + s2 "github.com/klauspost/compress/s2" + +) + +type Reader = s2.Reader + +func NewReader(_ io.Reader) *Reader { + return nil +} + + +type ReadSeeker struct { + Reader *Reader +} + +func (_ ReadSeeker) DecodeConcurrent(_ io.Writer, _ int) (int64, error) { + return 0, nil +} + +func (_ ReadSeeker) Read(_ []byte) (int, error) { + return 0, nil +} + +func (_ ReadSeeker) ReadByte() (byte, error) { + return 0, nil +} + +func (_ ReadSeeker) ReadSeeker(_ bool, _ []byte) (*ReadSeeker, error) { + return nil, nil +} + +func (_ ReadSeeker) Reset(_ io.Reader) {} + +func (_ ReadSeeker) Skip(_ int64) error { + return nil +} + +func (_ ReadSeeker) SkippableCB(_ byte, _ func(io.Reader) error) error { + return nil +} + +func (_ *ReadSeeker) ReadAt(_ []byte, _ int64) (int, error) { + return 0, nil +} + +func (_ *ReadSeeker) Seek(_ int64, _ int) (int64, error) { + return 0, nil +} \ No newline at end of file diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/zip/stub.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/zip/stub.go new file mode 100644 index 00000000000..2f3ad377a1c --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/zip/stub.go @@ -0,0 +1,124 @@ +// Code generated by depstubber. DO NOT EDIT. +// This is a simple stub for github.com/klauspost/compress/zip, strictly for use in testing. + +// See the LICENSE file for information about the licensing of the original library. +// Source: github.com/klauspost/compress/zip (exports: FileHeader,File,Reader,ReadCloser; functions: NewReader,OpenReader) + +// Package zip is a stub of github.com/klauspost/compress/zip, generated by depstubber. +package zip + +import ( + io "io" + fs "io/fs" + time "time" + "os" +) + +type Decompressor func(io.Reader) io.ReadCloser + +type File struct { + FileHeader + zip *Reader + zipr io.ReaderAt + headerOffset int64 // includes overall ZIP archive baseOffset + zip64 bool // zip64 extended information extra field presence +} + + +func (_ *File) DataOffset() (int64, error) { + return 0, nil +} + +func (_ *File) FileInfo() fs.FileInfo { + return nil +} + +func (_ *File) ModTime() time.Time { + return time.Time{} +} + +func (_ *File) Mode() fs.FileMode { + return 0 +} + +func (_ *File) Open() (io.ReadCloser, error) { + return nil, nil +} + +func (_ *File) OpenRaw() (io.Reader, error) { + return nil, nil +} + +func (_ *File) SetModTime(_ time.Time) {} + +func (_ *File) SetMode(_ fs.FileMode) {} + +type FileHeader struct { + Name string + Comment string + NonUTF8 bool + CreatorVersion uint16 + ReaderVersion uint16 + Flags uint16 + Method uint16 + Modified time.Time + ModifiedTime uint16 + ModifiedDate uint16 + CRC32 uint32 + CompressedSize uint32 + UncompressedSize uint32 + CompressedSize64 uint64 + UncompressedSize64 uint64 + Extra []byte + ExternalAttrs uint32 +} + +func (_ *FileHeader) FileInfo() fs.FileInfo { + return nil +} + +func (_ *FileHeader) ModTime() time.Time { + return time.Time{} +} + +func (_ *FileHeader) Mode() fs.FileMode { + return 0 +} + +func (_ *FileHeader) SetModTime(_ time.Time) {} + +func (_ *FileHeader) SetMode(_ fs.FileMode) {} + +func NewReader(_ io.ReaderAt, _ int64) (*Reader, error) { + return nil, nil +} + +func OpenReader(_ string) (*ReadCloser, error) { + return nil, nil +} + +type ReadCloser struct { + f *os.File + Reader +} + +func (_ *ReadCloser) Close() error { + return nil +} + +func (_ *ReadCloser) Open(_ string) (fs.File, error) { + return nil, nil +} + +func (_ *ReadCloser) RegisterDecompressor(_ uint16, _ Decompressor) {} + +type Reader struct { + File []*File + Comment string +} + +func (_ *Reader) Open(_ string) (fs.File, error) { + return nil, nil +} + +func (_ *Reader) RegisterDecompressor(_ uint16, _ Decompressor) {} diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/zlib/stub.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/zlib/stub.go new file mode 100644 index 00000000000..29d59ab5e2b --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/zlib/stub.go @@ -0,0 +1,16 @@ +// Code generated by depstubber. DO NOT EDIT. +// This is a simple stub for github.com/klauspost/compress/zlib, strictly for use in testing. + +// See the LICENSE file for information about the licensing of the original library. +// Source: github.com/klauspost/compress/zlib (exports: ; functions: NewReader) + +// Package zlib is a stub of github.com/klauspost/compress/zlib, generated by depstubber. +package zlib + +import ( + io "io" +) + +func NewReader(_ io.Reader) (io.ReadCloser, error) { + return nil, nil +} diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/zstd/stub.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/zstd/stub.go new file mode 100644 index 00000000000..7c0590a2778 --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/compress/zstd/stub.go @@ -0,0 +1,42 @@ +// Code generated by depstubber. DO NOT EDIT. +// This is a simple stub for github.com/klauspost/compress/zstd, strictly for use in testing. + +// See the LICENSE file for information about the licensing of the original library. +// Source: github.com/klauspost/compress/zstd (exports: Decoder; functions: NewReader) + +// Package zstd is a stub of github.com/klauspost/compress/zstd, generated by depstubber. +package zstd + +import ( + io "io" +) + +type DOption func(interface{}) error + +type Decoder struct{} + +func (_ *Decoder) Close() {} + +func (_ *Decoder) DecodeAll(_ []byte, _ []byte) ([]byte, error) { + return nil, nil +} + +func (_ *Decoder) IOReadCloser() io.ReadCloser { + return nil +} + +func (_ *Decoder) Read(_ []byte) (int, error) { + return 0, nil +} + +func (_ *Decoder) Reset(_ io.Reader) error { + return nil +} + +func (_ *Decoder) WriteTo(_ io.Writer) (int64, error) { + return 0, nil +} + +func NewReader(_ io.Reader, _ ...DOption) (*Decoder, error) { + return nil, nil +} diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/pgzip/stub.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/pgzip/stub.go new file mode 100644 index 00000000000..b7fb157d3fb --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/klauspost/pgzip/stub.go @@ -0,0 +1,47 @@ +// Code generated by depstubber. DO NOT EDIT. +// This is a simple stub for github.com/klauspost/pgzip, strictly for use in testing. + +// See the LICENSE file for information about the licensing of the original library. +// Source: github.com/klauspost/pgzip (exports: Reader; functions: NewReader) + +// Package pgzip is a stub of github.com/klauspost/pgzip, generated by depstubber. +package pgzip + +import ( + io "io" + time "time" +) + +type Header struct { + Comment string + Extra []byte + ModTime time.Time + Name string + OS byte +} + +func NewReader(_ io.Reader) (*Reader, error) { + return nil, nil +} + +type Reader struct { + Header Header +} + +func (_ *Reader) Close() error { + return nil +} + +func (_ *Reader) Multistream(_ bool) {} + +func (_ *Reader) Read(_ []byte) (int, error) { + return 0, nil +} + +func (_ *Reader) Reset(_ io.Reader) error { + return nil +} + +func (_ *Reader) WriteTo(_ io.Writer) (int64, error) { + return 0, nil +} diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/ulikunitz/xz/stub.go b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/ulikunitz/xz/stub.go new file mode 100644 index 00000000000..6a2780cd891 --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/github.com/ulikunitz/xz/stub.go @@ -0,0 +1,45 @@ +// Code generated by depstubber. DO NOT EDIT. +// This is a simple stub for github.com/ulikunitz/xz, strictly for use in testing. + +// See the LICENSE file for information about the licensing of the original library. +// Source: github.com/ulikunitz/xz (exports: Reader; functions: NewReader) + +// Package xz is a stub of github.com/ulikunitz/xz, generated by depstubber. +package xz + +import ( + io "io" +) + +func NewReader(_ io.Reader) (*Reader, error) { + return nil, nil +} + +type Reader struct { + ReaderConfig ReaderConfig +} + +func (_ Reader) NewReader(_ io.Reader) (*Reader, error) { + return nil, nil +} + +func (_ *Reader) Read(_ []byte) (int, error) { + return 0, nil +} + +func (_ *Reader) Verify() error { + return nil +} + +type ReaderConfig struct { + DictCap int + SingleStream bool +} + +func (_ ReaderConfig) NewReader(_ io.Reader) (*Reader, error) { + return nil, nil +} + +func (_ *ReaderConfig) Verify() error { + return nil +} diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/modules.txt b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/modules.txt new file mode 100644 index 00000000000..92976a6e7e9 --- /dev/null +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/vendor/modules.txt @@ -0,0 +1,18 @@ +# github.com/DataDog/zstd v1.5.5 +## explicit +github.com/DataDog/zstd +# github.com/dsnet/compress v0.0.1 +## explicit +github.com/dsnet/compress +# github.com/golang/snappy v0.0.4 +## explicit +github.com/golang/snappy +# github.com/klauspost/compress v1.16.6 +## explicit +github.com/klauspost/compress +# github.com/klauspost/pgzip v1.2.6 +## explicit +github.com/klauspost/pgzip +# github.com/ulikunitz/xz v0.5.11 +## explicit +github.com/ulikunitz/xz diff --git a/go/ql/test/experimental/CWE-525/WebCacheDeception.expected b/go/ql/test/experimental/CWE-525/WebCacheDeception.expected index 969ba863fa0..70e70de3037 100644 --- a/go/ql/test/experimental/CWE-525/WebCacheDeception.expected +++ b/go/ql/test/experimental/CWE-525/WebCacheDeception.expected @@ -1 +1,5 @@ -| WebCacheDeceptionBad.go:82:18:82:31 | "/adminusers/" | Wildcard Endpoint used with "/adminusers/" and 'cache-control' Header is used | \ No newline at end of file +| WebCacheDeceptionBad.go:82:18:82:31 | "/adminusers/" | "/adminusers/" is used as wildcard endpoint. | +| WebCacheDeceptionFiber.go:15:10:15:17 | "/api/*" | "/api/*" is used as wildcard endpoint. | +| WebCacheDeceptionFiber.go:20:11:20:18 | "/api/*" | "/api/*" is used as wildcard endpoint. | +| WebCacheDeceptionGoChi.go:13:8:13:11 | "/*" | "/*" is used as wildcard endpoint. | +| WebCacheDeceptionHTTPRouter.go:21:13:21:25 | "/test/*test" | "/test/*test" is used as wildcard endpoint. | diff --git a/go/ql/test/experimental/CWE-525/WebCacheDeceptionBad.go b/go/ql/test/experimental/CWE-525/WebCacheDeceptionBad.go index b3c0d345bd1..577fbd78c06 100644 --- a/go/ql/test/experimental/CWE-525/WebCacheDeceptionBad.go +++ b/go/ql/test/experimental/CWE-525/WebCacheDeceptionBad.go @@ -1,4 +1,4 @@ -package bad +package main import ( "fmt" @@ -74,7 +74,7 @@ func ShowAdminPageCache(w http.ResponseWriter, r *http.Request) { } -func main() { +func badRoutingNet() { fmt.Println("Vulnapp server listening : 1337") http.Handle("/assets/", http.StripPrefix("/assets/", http.FileServer(http.Dir("assets/")))) diff --git a/go/ql/test/experimental/CWE-525/WebCacheDeceptionFiber.go b/go/ql/test/experimental/CWE-525/WebCacheDeceptionFiber.go new file mode 100644 index 00000000000..80f396c26df --- /dev/null +++ b/go/ql/test/experimental/CWE-525/WebCacheDeceptionFiber.go @@ -0,0 +1,38 @@ +package main + +import ( + "fmt" + "log" + + "github.com/gofiber/fiber/v2" +) + +func badRouting() { + app := fiber.New() + log.Println("We are logging in Golang!") + + // GET /api/register + app.Get("/api/*", func(c *fiber.Ctx) error { + msg := fmt.Sprintf("✋") + return c.SendString(msg) // => ✋ register + }) + + app.Post("/api/*", func(c *fiber.Ctx) error { + msg := fmt.Sprintf("✋") + return c.SendString(msg) // => ✋ register + }) + + // GET /flights/LAX-SFO + app.Get("/flights/:from-:to", func(c *fiber.Ctx) error { + msg := fmt.Sprintf("💸 From: %s, To: %s", c.Params("from"), c.Params("to")) + return c.SendString(msg) // => 💸 From: LAX, To: SFO + }) + + // GET /dictionary.txt + app.Get("/:file.:ext", func(c *fiber.Ctx) error { + msg := fmt.Sprintf("📃 %s.%s", c.Params("file"), c.Params("ext")) + return c.SendString(msg) // => 📃 dictionary.txt + }) + + log.Fatal(app.Listen(":3000")) +} diff --git a/go/ql/test/experimental/CWE-525/WebCacheDeceptionGoChi.go b/go/ql/test/experimental/CWE-525/WebCacheDeceptionGoChi.go new file mode 100644 index 00000000000..539dae1dee9 --- /dev/null +++ b/go/ql/test/experimental/CWE-525/WebCacheDeceptionGoChi.go @@ -0,0 +1,17 @@ +package main + +import ( + "net/http" + + "github.com/go-chi/chi/v5" + "github.com/go-chi/chi/v5/middleware" +) + +func badRoutingChi() { + r := chi.NewRouter() + r.Use(middleware.Logger) + r.Get("/*", func(w http.ResponseWriter, r *http.Request) { + w.Write([]byte("welcome")) + }) + http.ListenAndServe(":3000", r) +} diff --git a/go/ql/test/experimental/CWE-525/WebCacheDeceptionHTTPRouter.go b/go/ql/test/experimental/CWE-525/WebCacheDeceptionHTTPRouter.go new file mode 100644 index 00000000000..864c6c5e31c --- /dev/null +++ b/go/ql/test/experimental/CWE-525/WebCacheDeceptionHTTPRouter.go @@ -0,0 +1,25 @@ +package main + +import ( + "fmt" + "log" + "net/http" + + "github.com/julienschmidt/httprouter" +) + +func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { + fmt.Fprint(w, "Welcome!\n") +} + +func Hello(w http.ResponseWriter, r *http.Request, ps httprouter.Params) { + fmt.Fprintf(w, "hello, %s!\n", ps.ByName("name")) +} + +func badHTTPRouter() { + router := httprouter.New() + router.GET("/test/*test", Index) + router.GET("/hello/:name", Hello) + + log.Fatal(http.ListenAndServe(":8082", router)) +} diff --git a/go/ql/test/experimental/CWE-525/go.mod b/go/ql/test/experimental/CWE-525/go.mod new file mode 100644 index 00000000000..a3190908392 --- /dev/null +++ b/go/ql/test/experimental/CWE-525/go.mod @@ -0,0 +1,23 @@ +module wcd + +go 1.21 + +require ( + github.com/go-chi/chi/v5 v5.0.10 + github.com/gofiber/fiber/v2 v2.51.0 + github.com/julienschmidt/httprouter v1.3.0 +) + +require ( + github.com/andybalholm/brotli v1.0.5 // indirect + github.com/google/uuid v1.4.0 // indirect + github.com/klauspost/compress v1.16.7 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/rivo/uniseg v0.2.0 // indirect + github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/fasthttp v1.50.0 // indirect + github.com/valyala/tcplisten v1.0.0 // indirect + golang.org/x/sys v0.14.0 // indirect +) diff --git a/go/ql/test/experimental/CWE-525/vendor/github.com/go-chi/chi/v5/middleware/stub.go b/go/ql/test/experimental/CWE-525/vendor/github.com/go-chi/chi/v5/middleware/stub.go new file mode 100644 index 00000000000..7bfbedf3a61 --- /dev/null +++ b/go/ql/test/experimental/CWE-525/vendor/github.com/go-chi/chi/v5/middleware/stub.go @@ -0,0 +1,16 @@ +// Code generated by depstubber. DO NOT EDIT. +// This is a simple stub for github.com/go-chi/chi/v5/middleware, strictly for use in testing. + +// See the LICENSE file for information about the licensing of the original library. +// Source: github.com/go-chi/chi/v5/middleware (exports: ; functions: Logger) + +// Package middleware is a stub of github.com/go-chi/chi/v5/middleware, generated by depstubber. +package middleware + +import ( + http "net/http" +) + +func Logger(_ http.Handler) http.Handler { + return nil +} diff --git a/go/ql/test/experimental/CWE-525/vendor/github.com/go-chi/chi/v5/stub.go b/go/ql/test/experimental/CWE-525/vendor/github.com/go-chi/chi/v5/stub.go new file mode 100644 index 00000000000..6a75474c6de --- /dev/null +++ b/go/ql/test/experimental/CWE-525/vendor/github.com/go-chi/chi/v5/stub.go @@ -0,0 +1,160 @@ +// Code generated by depstubber. DO NOT EDIT. +// This is a simple stub for github.com/go-chi/chi/v5, strictly for use in testing. + +// See the LICENSE file for information about the licensing of the original library. +// Source: github.com/go-chi/chi/v5 (exports: ; functions: NewRouter) + +// Package chi is a stub of github.com/go-chi/chi/v5, generated by depstubber. +package chi + +import ( + http "net/http" +) + +type Context struct { + Routes Routes + RoutePath string + RouteMethod string + URLParams RouteParams + RoutePatterns []string +} + +func (_ *Context) Reset() {} + +func (_ *Context) RoutePattern() string { + return "" +} + +func (_ *Context) URLParam(_ string) string { + return "" +} + +type Middlewares []func(http.Handler) http.Handler + +func (_ Middlewares) Handler(_ http.Handler) http.Handler { + return nil +} + +func (_ Middlewares) HandlerFunc(_ http.HandlerFunc) http.Handler { + return nil +} + +type Mux struct{} + +func (_ *Mux) Connect(_ string, _ http.HandlerFunc) {} + +func (_ *Mux) Delete(_ string, _ http.HandlerFunc) {} + +func (_ *Mux) Get(_ string, _ http.HandlerFunc) {} + +func (_ *Mux) Group(_ func(Router)) Router { + return nil +} + +func (_ *Mux) Handle(_ string, _ http.Handler) {} + +func (_ *Mux) HandleFunc(_ string, _ http.HandlerFunc) {} + +func (_ *Mux) Head(_ string, _ http.HandlerFunc) {} + +func (_ *Mux) Match(_ *Context, _ string, _ string) bool { + return false +} + +func (_ *Mux) Method(_ string, _ string, _ http.Handler) {} + +func (_ *Mux) MethodFunc(_ string, _ string, _ http.HandlerFunc) {} + +func (_ *Mux) MethodNotAllowed(_ http.HandlerFunc) {} + +func (_ *Mux) MethodNotAllowedHandler(_ ...interface{}) http.HandlerFunc { + return nil +} + +func (_ *Mux) Middlewares() Middlewares { + return nil +} + +func (_ *Mux) Mount(_ string, _ http.Handler) {} + +func (_ *Mux) NotFound(_ http.HandlerFunc) {} + +func (_ *Mux) NotFoundHandler() http.HandlerFunc { + return nil +} + +func (_ *Mux) Options(_ string, _ http.HandlerFunc) {} + +func (_ *Mux) Patch(_ string, _ http.HandlerFunc) {} + +func (_ *Mux) Post(_ string, _ http.HandlerFunc) {} + +func (_ *Mux) Put(_ string, _ http.HandlerFunc) {} + +func (_ *Mux) Route(_ string, _ func(Router)) Router { + return nil +} + +func (_ *Mux) Routes() []Route { + return nil +} + +func (_ *Mux) ServeHTTP(_ http.ResponseWriter, _ *http.Request) {} + +func (_ *Mux) Trace(_ string, _ http.HandlerFunc) {} + +func (_ *Mux) Use(_ ...func(http.Handler) http.Handler) {} + +func (_ *Mux) With(_ ...func(http.Handler) http.Handler) Router { + return nil +} + +func NewRouter() *Mux { + return nil +} + +type Route struct { + SubRoutes Routes + Handlers map[string]http.Handler + Pattern string +} + +type RouteParams struct { + Keys []string + Values []string +} + +func (_ *RouteParams) Add(_ string, _ string) {} + +type Router interface { + Connect(_ string, _ http.HandlerFunc) + Delete(_ string, _ http.HandlerFunc) + Get(_ string, _ http.HandlerFunc) + Group(_ func(Router)) Router + Handle(_ string, _ http.Handler) + HandleFunc(_ string, _ http.HandlerFunc) + Head(_ string, _ http.HandlerFunc) + Match(_ *Context, _ string, _ string) bool + Method(_ string, _ string, _ http.Handler) + MethodFunc(_ string, _ string, _ http.HandlerFunc) + MethodNotAllowed(_ http.HandlerFunc) + Middlewares() Middlewares + Mount(_ string, _ http.Handler) + NotFound(_ http.HandlerFunc) + Options(_ string, _ http.HandlerFunc) + Patch(_ string, _ http.HandlerFunc) + Post(_ string, _ http.HandlerFunc) + Put(_ string, _ http.HandlerFunc) + Route(_ string, _ func(Router)) Router + Routes() []Route + ServeHTTP(_ http.ResponseWriter, _ *http.Request) + Trace(_ string, _ http.HandlerFunc) + Use(_ ...func(http.Handler) http.Handler) + With(_ ...func(http.Handler) http.Handler) Router +} + +type Routes interface { + Match(_ *Context, _ string, _ string) bool + Middlewares() Middlewares + Routes() []Route +} diff --git a/go/ql/test/experimental/CWE-525/vendor/github.com/gofiber/fiber/v2/stub.go b/go/ql/test/experimental/CWE-525/vendor/github.com/gofiber/fiber/v2/stub.go new file mode 100644 index 00000000000..ccd2ccda0ee --- /dev/null +++ b/go/ql/test/experimental/CWE-525/vendor/github.com/gofiber/fiber/v2/stub.go @@ -0,0 +1,1033 @@ +// Code generated by depstubber. DO NOT EDIT. +// This is a simple stub for github.com/gofiber/fiber/v2, strictly for use in testing. + +// See the LICENSE file for information about the licensing of the original library. +// Source: github.com/gofiber/fiber/v2 (exports: ; functions: New,Get,Post) + +// Package fiber is a stub of github.com/gofiber/fiber/v2, generated by depstubber. +package fiber + +import ( + context "context" + tls "crypto/tls" + x509 "crypto/x509" + io "io" + multipart "mime/multipart" + net "net" + http "net/http" + time "time" +) + +type Agent struct { + Name string + NoDefaultUserAgentHeader bool + HostClient interface{} +} + +func (_ Agent) CloseIdleConnections() {} + +func (_ Agent) ConnsCount() int { + return 0 +} + +func (_ Agent) Do(_ interface{}, _ interface{}) error { + return nil +} + +func (_ Agent) DoDeadline(_ interface{}, _ interface{}, _ time.Time) error { + return nil +} + +func (_ Agent) DoRedirects(_ interface{}, _ interface{}, _ int) error { + return nil +} + +func (_ Agent) DoTimeout(_ interface{}, _ interface{}, _ time.Duration) error { + return nil +} + +func (_ Agent) Get(_ []byte, _ string) (int, []byte, error) { + return 0, nil, nil +} + +func (_ Agent) GetDeadline(_ []byte, _ string, _ time.Time) (int, []byte, error) { + return 0, nil, nil +} + +func (_ Agent) GetTimeout(_ []byte, _ string, _ time.Duration) (int, []byte, error) { + return 0, nil, nil +} + +func (_ Agent) LastUseTime() time.Time { + return time.Time{} +} + +func (_ Agent) PendingRequests() int { + return 0 +} + +func (_ Agent) Post(_ []byte, _ string, _ interface{}) (int, []byte, error) { + return 0, nil, nil +} + +func (_ Agent) SetMaxConns(_ int) {} + +func (_ *Agent) Add(_ string, _ string) *Agent { + return nil +} + +func (_ *Agent) AddBytesK(_ []byte, _ string) *Agent { + return nil +} + +func (_ *Agent) AddBytesKV(_ []byte, _ []byte) *Agent { + return nil +} + +func (_ *Agent) AddBytesV(_ string, _ []byte) *Agent { + return nil +} + +func (_ *Agent) BasicAuth(_ string, _ string) *Agent { + return nil +} + +func (_ *Agent) BasicAuthBytes(_ []byte, _ []byte) *Agent { + return nil +} + +func (_ *Agent) Body(_ []byte) *Agent { + return nil +} + +func (_ *Agent) BodyStream(_ io.Reader, _ int) *Agent { + return nil +} + +func (_ *Agent) BodyString(_ string) *Agent { + return nil +} + +func (_ *Agent) Boundary(_ string) *Agent { + return nil +} + +func (_ *Agent) Bytes() (int, []byte, []error) { + return 0, nil, nil +} + +func (_ *Agent) ConnectionClose() *Agent { + return nil +} + +func (_ *Agent) ContentType(_ string) *Agent { + return nil +} + +func (_ *Agent) ContentTypeBytes(_ []byte) *Agent { + return nil +} + +func (_ *Agent) Cookie(_ string, _ string) *Agent { + return nil +} + +func (_ *Agent) CookieBytesK(_ []byte, _ string) *Agent { + return nil +} + +func (_ *Agent) CookieBytesKV(_ []byte, _ []byte) *Agent { + return nil +} + +func (_ *Agent) Cookies(_ ...string) *Agent { + return nil +} + +func (_ *Agent) CookiesBytesKV(_ ...[]byte) *Agent { + return nil +} + +func (_ *Agent) Debug(_ ...io.Writer) *Agent { + return nil +} + +func (_ *Agent) Dest(_ []byte) *Agent { + return nil +} + +func (_ *Agent) FileData(_ ...*FormFile) *Agent { + return nil +} + +func (_ *Agent) Form(_ interface{}) *Agent { + return nil +} + +func (_ *Agent) Host(_ string) *Agent { + return nil +} + +func (_ *Agent) HostBytes(_ []byte) *Agent { + return nil +} + +func (_ *Agent) InsecureSkipVerify() *Agent { + return nil +} + +func (_ *Agent) JSON(_ interface{}, _ ...string) *Agent { + return nil +} + +func (_ *Agent) JSONDecoder(_ interface{}) *Agent { + return nil +} + +func (_ *Agent) JSONEncoder(_ interface{}) *Agent { + return nil +} + +func (_ *Agent) MaxRedirectsCount(_ int) *Agent { + return nil +} + +func (_ *Agent) MultipartForm(_ interface{}) *Agent { + return nil +} + +func (_ *Agent) Parse() error { + return nil +} + +func (_ *Agent) QueryString(_ string) *Agent { + return nil +} + +func (_ *Agent) QueryStringBytes(_ []byte) *Agent { + return nil +} + +func (_ *Agent) Referer(_ string) *Agent { + return nil +} + +func (_ *Agent) RefererBytes(_ []byte) *Agent { + return nil +} + +func (_ *Agent) Request() interface{} { + return nil +} + +func (_ *Agent) RetryIf(_ interface{}) *Agent { + return nil +} + +func (_ *Agent) Reuse() *Agent { + return nil +} + +func (_ *Agent) SendFile(_ string, _ ...string) *Agent { + return nil +} + +func (_ *Agent) SendFiles(_ ...string) *Agent { + return nil +} + +func (_ *Agent) Set(_ string, _ string) *Agent { + return nil +} + +func (_ *Agent) SetBytesK(_ []byte, _ string) *Agent { + return nil +} + +func (_ *Agent) SetBytesKV(_ []byte, _ []byte) *Agent { + return nil +} + +func (_ *Agent) SetBytesV(_ string, _ []byte) *Agent { + return nil +} + +func (_ *Agent) SetResponse(_ interface{}) *Agent { + return nil +} + +func (_ *Agent) String() (int, string, []error) { + return 0, "", nil +} + +func (_ *Agent) Struct(_ interface{}) (int, []byte, []error) { + return 0, nil, nil +} + +func (_ *Agent) TLSConfig(_ *tls.Config) *Agent { + return nil +} + +func (_ *Agent) Timeout(_ time.Duration) *Agent { + return nil +} + +func (_ *Agent) UserAgent(_ string) *Agent { + return nil +} + +func (_ *Agent) UserAgentBytes(_ []byte) *Agent { + return nil +} + +func (_ *Agent) XML(_ interface{}) *Agent { + return nil +} + +type App struct{} + +func (_ *App) AcquireCtx(_ interface{}) *Ctx { + return nil +} + +func (_ *App) Add(_ string, _ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *App) All(_ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *App) Config() Config { + return Config{} +} + +func (_ *App) Connect(_ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *App) Delete(_ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *App) ErrorHandler(_ *Ctx, _ error) error { + return nil +} + +func (_ *App) Get(_ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *App) GetRoute(_ string) Route { + return Route{} +} + +func (_ *App) GetRoutes(_ ...bool) []Route { + return nil +} + +func (_ *App) Group(_ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *App) Handler() interface{} { + return nil +} + +func (_ *App) HandlersCount() uint32 { + return 0 +} + +func (_ *App) Head(_ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *App) Hooks() *Hooks { + return nil +} + +func (_ *App) Listen(_ string) error { + return nil +} + +func (_ *App) ListenMutualTLS(_ string, _ string, _ string, _ string) error { + return nil +} + +func (_ *App) ListenMutualTLSWithCertificate(_ string, _ tls.Certificate, _ *x509.CertPool) error { + return nil +} + +func (_ *App) ListenTLS(_ string, _ string, _ string) error { + return nil +} + +func (_ *App) ListenTLSWithCertificate(_ string, _ tls.Certificate) error { + return nil +} + +func (_ *App) Listener(_ net.Listener) error { + return nil +} + +func (_ *App) Mount(_ string, _ *App) Router { + return nil +} + +func (_ *App) MountPath() string { + return "" +} + +func (_ *App) Name(_ string) Router { + return nil +} + +func (_ *App) Options(_ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *App) Patch(_ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *App) Post(_ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *App) Put(_ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *App) ReleaseCtx(_ *Ctx) {} + +func (_ *App) Route(_ string, _ func(Router), _ ...string) Router { + return nil +} + +func (_ *App) Server() interface{} { + return nil +} + +func (_ *App) SetTLSHandler(_ *TLSHandler) {} + +func (_ *App) Shutdown() error { + return nil +} + +func (_ *App) ShutdownWithContext(_ context.Context) error { + return nil +} + +func (_ *App) ShutdownWithTimeout(_ time.Duration) error { + return nil +} + +func (_ *App) Stack() [][]*Route { + return nil +} + +func (_ *App) Static(_ string, _ string, _ ...Static) Router { + return nil +} + +func (_ *App) Test(_ *http.Request, _ ...int) (*http.Response, error) { + return nil, nil +} + +func (_ *App) Trace(_ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *App) Use(_ ...interface{}) Router { + return nil +} + +type Colors struct { + Black string + Red string + Green string + Yellow string + Blue string + Magenta string + Cyan string + White string + Reset string +} + +type Config struct { + Prefork bool + ServerHeader string + StrictRouting bool + CaseSensitive bool + Immutable bool + UnescapePath bool + ETag bool + BodyLimit int + Concurrency int + Views Views + ViewsLayout string + PassLocalsToViews bool + ReadTimeout time.Duration + WriteTimeout time.Duration + IdleTimeout time.Duration + ReadBufferSize int + WriteBufferSize int + CompressedFileSuffix string + ProxyHeader string + GETOnly bool + ErrorHandler func(*Ctx, error) error + DisableKeepalive bool + DisableDefaultDate bool + DisableDefaultContentType bool + DisableHeaderNormalizing bool + DisableStartupMessage bool + AppName string + StreamRequestBody bool + DisablePreParseMultipartForm bool + ReduceMemoryUsage bool + JSONEncoder interface{} + JSONDecoder interface{} + XMLEncoder interface{} + Network string + EnableTrustedProxyCheck bool + TrustedProxies []string + EnableIPValidation bool + EnablePrintRoutes bool + ColorScheme Colors + RequestMethods []string + EnableSplittingOnParsers bool +} + +type Cookie struct { + Name string + Value string + Path string + Domain string + MaxAge int + Expires time.Time + Secure bool + HTTPOnly bool + SameSite string + SessionOnly bool +} + +type Ctx struct{} + +func (_ *Ctx) Accepts(_ ...string) string { + return "" +} + +func (_ *Ctx) AcceptsCharsets(_ ...string) string { + return "" +} + +func (_ *Ctx) AcceptsEncodings(_ ...string) string { + return "" +} + +func (_ *Ctx) AcceptsLanguages(_ ...string) string { + return "" +} + +func (_ *Ctx) AllParams() map[string]string { + return nil +} + +func (_ *Ctx) App() *App { + return nil +} + +func (_ *Ctx) Append(_ string, _ ...string) {} + +func (_ *Ctx) Attachment(_ ...string) {} + +func (_ *Ctx) BaseURL() string { + return "" +} + +func (_ *Ctx) Bind(_ Map) error { + return nil +} + +func (_ *Ctx) Body() []byte { + return nil +} + +func (_ *Ctx) BodyParser(_ interface{}) error { + return nil +} + +func (_ *Ctx) BodyRaw() []byte { + return nil +} + +func (_ *Ctx) ClearCookie(_ ...string) {} + +func (_ *Ctx) ClientHelloInfo() *tls.ClientHelloInfo { + return nil +} + +func (_ *Ctx) Context() interface{} { + return nil +} + +func (_ *Ctx) Cookie(_ *Cookie) {} + +func (_ *Ctx) CookieParser(_ interface{}) error { + return nil +} + +func (_ *Ctx) Cookies(_ string, _ ...string) string { + return "" +} + +func (_ *Ctx) Download(_ string, _ ...string) error { + return nil +} + +func (_ *Ctx) FormFile(_ string) (*multipart.FileHeader, error) { + return nil, nil +} + +func (_ *Ctx) FormValue(_ string, _ ...string) string { + return "" +} + +func (_ *Ctx) Format(_ interface{}) error { + return nil +} + +func (_ *Ctx) Fresh() bool { + return false +} + +func (_ *Ctx) Get(_ string, _ ...string) string { + return "" +} + +func (_ *Ctx) GetReqHeaders() map[string][]string { + return nil +} + +func (_ *Ctx) GetRespHeader(_ string, _ ...string) string { + return "" +} + +func (_ *Ctx) GetRespHeaders() map[string][]string { + return nil +} + +func (_ *Ctx) GetRouteURL(_ string, _ Map) (string, error) { + return "", nil +} + +func (_ *Ctx) Hostname() string { + return "" +} + +func (_ *Ctx) IP() string { + return "" +} + +func (_ *Ctx) IPs() []string { + return nil +} + +func (_ *Ctx) Is(_ string) bool { + return false +} + +func (_ *Ctx) IsFromLocal() bool { + return false +} + +func (_ *Ctx) IsProxyTrusted() bool { + return false +} + +func (_ *Ctx) JSON(_ interface{}, _ ...string) error { + return nil +} + +func (_ *Ctx) JSONP(_ interface{}, _ ...string) error { + return nil +} + +func (_ *Ctx) Links(_ ...string) {} + +func (_ *Ctx) Locals(_ interface{}, _ ...interface{}) interface{} { + return nil +} + +func (_ *Ctx) Location(_ string) {} + +func (_ *Ctx) Method(_ ...string) string { + return "" +} + +func (_ *Ctx) MultipartForm() (*multipart.Form, error) { + return nil, nil +} + +func (_ *Ctx) Next() error { + return nil +} + +func (_ *Ctx) OriginalURL() string { + return "" +} + +func (_ *Ctx) Params(_ string, _ ...string) string { + return "" +} + +func (_ *Ctx) ParamsInt(_ string, _ ...int) (int, error) { + return 0, nil +} + +func (_ *Ctx) ParamsParser(_ interface{}) error { + return nil +} + +func (_ *Ctx) Path(_ ...string) string { + return "" +} + +func (_ *Ctx) Port() string { + return "" +} + +func (_ *Ctx) Protocol() string { + return "" +} + +func (_ *Ctx) Queries() map[string]string { + return nil +} + +func (_ *Ctx) Query(_ string, _ ...string) string { + return "" +} + +func (_ *Ctx) QueryBool(_ string, _ ...bool) bool { + return false +} + +func (_ *Ctx) QueryFloat(_ string, _ ...float64) float64 { + return 0 +} + +func (_ *Ctx) QueryInt(_ string, _ ...int) int { + return 0 +} + +func (_ *Ctx) QueryParser(_ interface{}) error { + return nil +} + +func (_ *Ctx) Range(_ int) (Range, error) { + return Range{}, nil +} + +func (_ *Ctx) Redirect(_ string, _ ...int) error { + return nil +} + +func (_ *Ctx) RedirectBack(_ string, _ ...int) error { + return nil +} + +func (_ *Ctx) RedirectToRoute(_ string, _ Map, _ ...int) error { + return nil +} + +func (_ *Ctx) Render(_ string, _ interface{}, _ ...string) error { + return nil +} + +func (_ *Ctx) ReqHeaderParser(_ interface{}) error { + return nil +} + +func (_ *Ctx) Request() interface{} { + return nil +} + +func (_ *Ctx) Response() interface{} { + return nil +} + +func (_ *Ctx) RestartRouting() error { + return nil +} + +func (_ *Ctx) Route() *Route { + return nil +} + +func (_ *Ctx) SaveFile(_ *multipart.FileHeader, _ string) error { + return nil +} + +func (_ *Ctx) SaveFileToStorage(_ *multipart.FileHeader, _ string, _ Storage) error { + return nil +} + +func (_ *Ctx) Secure() bool { + return false +} + +func (_ *Ctx) Send(_ []byte) error { + return nil +} + +func (_ *Ctx) SendFile(_ string, _ ...bool) error { + return nil +} + +func (_ *Ctx) SendStatus(_ int) error { + return nil +} + +func (_ *Ctx) SendStream(_ io.Reader, _ ...int) error { + return nil +} + +func (_ *Ctx) SendString(_ string) error { + return nil +} + +func (_ *Ctx) Set(_ string, _ string) {} + +func (_ *Ctx) SetUserContext(_ context.Context) {} + +func (_ *Ctx) Stale() bool { + return false +} + +func (_ *Ctx) Status(_ int) *Ctx { + return nil +} + +func (_ *Ctx) String() string { + return "" +} + +func (_ *Ctx) Subdomains(_ ...int) []string { + return nil +} + +func (_ *Ctx) Type(_ string, _ ...string) *Ctx { + return nil +} + +func (_ *Ctx) UserContext() context.Context { + return nil +} + +func (_ *Ctx) Vary(_ ...string) {} + +func (_ *Ctx) Write(_ []byte) (int, error) { + return 0, nil +} + +func (_ *Ctx) WriteString(_ string) (int, error) { + return 0, nil +} + +func (_ *Ctx) Writef(_ string, _ ...interface{}) (int, error) { + return 0, nil +} + +func (_ *Ctx) XHR() bool { + return false +} + +func (_ *Ctx) XML(_ interface{}) error { + return nil +} + +type FormFile struct { + Fieldname string + Name string + Content []byte +} + +func Get(_ string) *Agent { + return nil +} + +type Group struct { + Prefix string +} + +func (_ *Group) Add(_ string, _ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *Group) All(_ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *Group) Connect(_ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *Group) Delete(_ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *Group) Get(_ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *Group) Group(_ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *Group) Head(_ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *Group) Mount(_ string, _ *App) Router { + return nil +} + +func (_ *Group) Name(_ string) Router { + return nil +} + +func (_ *Group) Options(_ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *Group) Patch(_ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *Group) Post(_ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *Group) Put(_ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *Group) Route(_ string, _ func(Router), _ ...string) Router { + return nil +} + +func (_ *Group) Static(_ string, _ string, _ ...Static) Router { + return nil +} + +func (_ *Group) Trace(_ string, _ ...func(*Ctx) error) Router { + return nil +} + +func (_ *Group) Use(_ ...interface{}) Router { + return nil +} + +type Hooks struct{} + +func (_ *Hooks) OnFork(_ ...func(int) error) {} + +func (_ *Hooks) OnGroup(_ ...func(Group) error) {} + +func (_ *Hooks) OnGroupName(_ ...func(Group) error) {} + +func (_ *Hooks) OnListen(_ ...func(ListenData) error) {} + +func (_ *Hooks) OnMount(_ ...func(*App) error) {} + +func (_ *Hooks) OnName(_ ...func(Route) error) {} + +func (_ *Hooks) OnRoute(_ ...func(Route) error) {} + +func (_ *Hooks) OnShutdown(_ ...func() error) {} + +type ListenData struct { + Host string + Port string + TLS bool +} + +type Map map[string]interface{} + +func New(_ ...Config) *App { + return nil +} + +func Post(_ string) *Agent { + return nil +} + +type Range struct { + Type string + Ranges []RangeSet +} + +type RangeSet struct { + Start int + End int +} + +type Route struct { + Method string + Name string + Path string + Params []string + Handlers []func(*Ctx) error +} + +type Router interface { + Add(_ string, _ string, _ ...func(*Ctx) error) Router + All(_ string, _ ...func(*Ctx) error) Router + Connect(_ string, _ ...func(*Ctx) error) Router + Delete(_ string, _ ...func(*Ctx) error) Router + Get(_ string, _ ...func(*Ctx) error) Router + Group(_ string, _ ...func(*Ctx) error) Router + Head(_ string, _ ...func(*Ctx) error) Router + Mount(_ string, _ *App) Router + Name(_ string) Router + Options(_ string, _ ...func(*Ctx) error) Router + Patch(_ string, _ ...func(*Ctx) error) Router + Post(_ string, _ ...func(*Ctx) error) Router + Put(_ string, _ ...func(*Ctx) error) Router + Route(_ string, _ func(Router), _ ...string) Router + Static(_ string, _ string, _ ...Static) Router + Trace(_ string, _ ...func(*Ctx) error) Router + Use(_ ...interface{}) Router +} + +type Static struct { + Compress bool + ByteRange bool + Browse bool + Download bool + Index string + CacheDuration time.Duration + MaxAge int + ModifyResponse func(*Ctx) error + Next func(*Ctx) bool +} + +type Storage interface { + Close() error + Delete(_ string) error + Get(_ string) ([]byte, error) + Reset() error + Set(_ string, _ []byte, _ time.Duration) error +} + +type TLSHandler struct{} + +func (_ *TLSHandler) GetClientInfo(_ *tls.ClientHelloInfo) (*tls.Certificate, error) { + return nil, nil +} + +type Views interface { + Load() error + Render(_ io.Writer, _ string, _ interface{}, _ ...string) error +} diff --git a/go/ql/test/experimental/CWE-525/vendor/github.com/julienschmidt/httprouter/stub.go b/go/ql/test/experimental/CWE-525/vendor/github.com/julienschmidt/httprouter/stub.go new file mode 100644 index 00000000000..2515bf4fc90 --- /dev/null +++ b/go/ql/test/experimental/CWE-525/vendor/github.com/julienschmidt/httprouter/stub.go @@ -0,0 +1,68 @@ +// Code generated by depstubber. DO NOT EDIT. +// This is a simple stub for github.com/julienschmidt/httprouter, strictly for use in testing. + +// See the LICENSE file for information about the licensing of the original library. +// Source: github.com/julienschmidt/httprouter (exports: ; functions: New) + +// Package httprouter is a stub of github.com/julienschmidt/httprouter, generated by depstubber. +package httprouter + +import ( + http "net/http" +) + +type Handle func(http.ResponseWriter, *http.Request, Params) + +func New() *Router { + return nil +} + +type Param struct { + Key string + Value string +} + +type Params []Param + +func (_ Params) ByName(_ string) string { + return "" +} + +type Router struct { + RedirectTrailingSlash bool + RedirectFixedPath bool + HandleMethodNotAllowed bool + HandleOPTIONS bool + GlobalOPTIONS http.Handler + NotFound http.Handler + MethodNotAllowed http.Handler + PanicHandler func(http.ResponseWriter, *http.Request, interface{}) +} + +func (_ *Router) DELETE(_ string, _ Handle) {} + +func (_ *Router) GET(_ string, _ Handle) {} + +func (_ *Router) HEAD(_ string, _ Handle) {} + +func (_ *Router) Handle(_ string, _ string, _ Handle) {} + +func (_ *Router) Handler(_ string, _ string, _ http.Handler) {} + +func (_ *Router) HandlerFunc(_ string, _ string, _ http.HandlerFunc) {} + +func (_ *Router) Lookup(_ string, _ string) (Handle, Params, bool) { + return nil, nil, false +} + +func (_ *Router) OPTIONS(_ string, _ Handle) {} + +func (_ *Router) PATCH(_ string, _ Handle) {} + +func (_ *Router) POST(_ string, _ Handle) {} + +func (_ *Router) PUT(_ string, _ Handle) {} + +func (_ *Router) ServeFiles(_ string, _ http.FileSystem) {} + +func (_ *Router) ServeHTTP(_ http.ResponseWriter, _ *http.Request) {} diff --git a/go/ql/test/experimental/CWE-525/vendor/modules.txt b/go/ql/test/experimental/CWE-525/vendor/modules.txt new file mode 100644 index 00000000000..cc5c287610c --- /dev/null +++ b/go/ql/test/experimental/CWE-525/vendor/modules.txt @@ -0,0 +1,42 @@ +# github.com/go-chi/chi/v5 v5.0.10 +## explicit +github.com/go-chi/chi/v5 +# github.com/gofiber/fiber/v2 v2.51.0 +## explicit +github.com/gofiber/fiber/v2 +# github.com/julienschmidt/httprouter v1.3.0 +## explicit +github.com/julienschmidt/httprouter +# github.com/andybalholm/brotli v1.0.5 +## explicit +github.com/andybalholm/brotli +# github.com/google/uuid v1.4.0 +## explicit +github.com/google/uuid +# github.com/klauspost/compress v1.16.7 +## explicit +github.com/klauspost/compress +# github.com/mattn/go-colorable v0.1.13 +## explicit +github.com/mattn/go-colorable +# github.com/mattn/go-isatty v0.0.20 +## explicit +github.com/mattn/go-isatty +# github.com/mattn/go-runewidth v0.0.15 +## explicit +github.com/mattn/go-runewidth +# github.com/rivo/uniseg v0.2.0 +## explicit +github.com/rivo/uniseg +# github.com/valyala/bytebufferpool v1.0.0 +## explicit +github.com/valyala/bytebufferpool +# github.com/valyala/fasthttp v1.50.0 +## explicit +github.com/valyala/fasthttp +# github.com/valyala/tcplisten v1.0.0 +## explicit +github.com/valyala/tcplisten +# golang.org/x/sys v0.14.0 +## explicit +golang.org/x/sys diff --git a/go/ql/test/extractor-tests/diagnostics/Diagnostics.ql b/go/ql/test/extractor-tests/diagnostics/Diagnostics.ql index ed6d8ac043d..324709175e5 100644 --- a/go/ql/test/extractor-tests/diagnostics/Diagnostics.ql +++ b/go/ql/test/extractor-tests/diagnostics/Diagnostics.ql @@ -1,4 +1,5 @@ import go +private import semmle.go.internal.Locations bindingset[path] string baseName(string path) { result = path.regexpCapture(".*(/|\\\\)([^/\\\\]+)(/|\\\\)?$", 2) } @@ -30,7 +31,12 @@ class Diagnostic extends @diagnostic { diagnostic_for(this, c, fileNum, idx) } - Location getLocation() { diagnostics(this, _, _, _, _, result) } + DbLocation getLocation() { + exists(@location loc | + diagnostics(this, _, _, _, _, loc) and + result = TDbLocation(loc) + ) + } // string getTag() { // diagnostics(this, _, result, _, _, _) diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Macaron/Sources.expected b/go/ql/test/library-tests/semmle/go/frameworks/Macaron/Sources.expected new file mode 100644 index 00000000000..8ec8033d086 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/Macaron/Sources.expected @@ -0,0 +1,2 @@ +testFailures +failures diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Macaron/Sources.ql b/go/ql/test/library-tests/semmle/go/frameworks/Macaron/Sources.ql new file mode 100644 index 00000000000..710ac89a1de --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/Macaron/Sources.ql @@ -0,0 +1,18 @@ +import go +import TestUtilities.InlineExpectationsTest + +module UntrustedFlowSourceTest implements TestSig { + string getARelevantTag() { result = "UntrustedFlowSource" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + exists(UntrustedFlowSource src | + src.hasLocationInfo(location.getFile().getAbsolutePath(), location.getStartLine(), + location.getStartColumn(), location.getEndLine(), location.getEndColumn()) and + element = src.toString() and + value = "" and + tag = "UntrustedFlowSource" + ) + } +} + +import MakeTest<UntrustedFlowSourceTest> diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Macaron/sources.go b/go/ql/test/library-tests/semmle/go/frameworks/Macaron/sources.go new file mode 100644 index 00000000000..569b032c05f --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/frameworks/Macaron/sources.go @@ -0,0 +1,22 @@ +package main + +//go:generate depstubber -vendor gopkg.in/macaron.v1 Context,RequestBody + +import ( + "gopkg.in/macaron.v1" +) + +func sources(ctx *macaron.Context, body *macaron.RequestBody) { + _ = ctx.AllParams() // $UntrustedFlowSource + _ = ctx.GetCookie("") // $UntrustedFlowSource + _, _ = ctx.GetSecureCookie("") // $UntrustedFlowSource + _, _ = ctx.GetSuperSecureCookie("", "") // $UntrustedFlowSource + _, _, _ = ctx.GetFile("") // $UntrustedFlowSource + _ = ctx.Params("") // $UntrustedFlowSource + _ = ctx.ParamsEscape("") // $UntrustedFlowSource + _ = ctx.Query("") // $UntrustedFlowSource + _ = ctx.QueryEscape("") // $UntrustedFlowSource + _ = ctx.QueryStrings("") // $UntrustedFlowSource + _, _ = body.Bytes() // $UntrustedFlowSource + _, _ = body.String() // $UntrustedFlowSource +} diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Macaron/vendor/gopkg.in/macaron.v1/stub.go b/go/ql/test/library-tests/semmle/go/frameworks/Macaron/vendor/gopkg.in/macaron.v1/stub.go index cac6e12385a..058ec52bfdb 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Macaron/vendor/gopkg.in/macaron.v1/stub.go +++ b/go/ql/test/library-tests/semmle/go/frameworks/Macaron/vendor/gopkg.in/macaron.v1/stub.go @@ -2,7 +2,7 @@ // This is a simple stub for gopkg.in/macaron.v1, strictly for use in testing. // See the LICENSE file for information about the licensing of the original library. -// Source: gopkg.in/macaron.v1 (exports: Context; functions: ) +// Source: gopkg.in/macaron.v1 (exports: Context,RequestBody; functions: ) // Package macaron is a stub of gopkg.in/macaron.v1, generated by depstubber. package macaron @@ -63,9 +63,7 @@ func (_ Context) Any(_ string, _ ...Handler) *Route { return nil } -func (_ Context) Apply(_ interface{}) interface { - Error() string -} { +func (_ Context) Apply(_ interface{}) error { return nil } @@ -89,27 +87,19 @@ func (_ Context) GetVal(_ reflect.Type) reflect.Value { func (_ Context) Group(_ string, _ func(), _ ...Handler) {} -func (_ Context) HTMLBytes(_ string, _ interface{}, _ ...HTMLOptions) ([]uint8, interface { - Error() string -}) { +func (_ Context) HTMLBytes(_ string, _ interface{}, _ ...HTMLOptions) ([]byte, error) { return nil, nil } -func (_ Context) HTMLSetBytes(_ string, _ string, _ interface{}, _ ...HTMLOptions) ([]uint8, interface { - Error() string -}) { +func (_ Context) HTMLSetBytes(_ string, _ string, _ interface{}, _ ...HTMLOptions) ([]byte, error) { return nil, nil } -func (_ Context) HTMLSetString(_ string, _ string, _ interface{}, _ ...HTMLOptions) (string, interface { - Error() string -}) { +func (_ Context) HTMLSetString(_ string, _ string, _ interface{}, _ ...HTMLOptions) (string, error) { return "", nil } -func (_ Context) HTMLString(_ string, _ interface{}, _ ...HTMLOptions) (string, interface { - Error() string -}) { +func (_ Context) HTMLString(_ string, _ interface{}, _ ...HTMLOptions) (string, error) { return "", nil } @@ -131,17 +121,13 @@ func (_ Context) Header() http.Header { func (_ Context) InternalServerError(_ ...Handler) {} -func (_ Context) Invoke(_ interface{}) ([]reflect.Value, interface { - Error() string -}) { +func (_ Context) Invoke(_ interface{}) ([]reflect.Value, error) { return nil, nil } func (_ Context) JSON(_ int, _ interface{}) {} -func (_ Context) JSONString(_ interface{}) (string, interface { - Error() string -}) { +func (_ Context) JSONString(_ interface{}) (string, error) { return "", nil } @@ -167,7 +153,7 @@ func (_ Context) Patch(_ string, _ ...Handler) *Route { return nil } -func (_ Context) PlainText(_ int, _ []uint8) {} +func (_ Context) PlainText(_ int, _ []byte) {} func (_ Context) Post(_ string, _ ...Handler) *Route { return nil @@ -177,7 +163,7 @@ func (_ Context) Put(_ string, _ ...Handler) *Route { return nil } -func (_ Context) RawData(_ int, _ []uint8) {} +func (_ Context) RawData(_ int, _ []byte) {} func (_ Context) Route(_ string, _ string, _ ...Handler) *Route { return nil @@ -209,9 +195,7 @@ func (_ Context) URLFor(_ string, _ ...string) string { return "" } -func (_ Context) Write(_ []uint8) (int, interface { - Error() string -}) { +func (_ Context) Write(_ []byte) (int, error) { return 0, nil } @@ -219,6 +203,10 @@ func (_ Context) WriteHeader(_ int) {} func (_ Context) XML(_ int, _ interface{}) {} +func (_ *Context) AllParams() Params { + return nil +} + func (_ *Context) ChangeStaticPath(_ string, _ string) {} func (_ *Context) GetCookie(_ string) string { @@ -237,9 +225,7 @@ func (_ *Context) GetCookieInt64(_ string) int64 { return 0 } -func (_ *Context) GetFile(_ string) (multipart.File, *multipart.FileHeader, interface { - Error() string -}) { +func (_ *Context) GetFile(_ string) (multipart.File, *multipart.FileHeader, error) { return nil, nil, nil } @@ -317,9 +303,7 @@ func (_ *Context) RemoteAddr() string { func (_ *Context) ReplaceAllParams(_ Params) {} -func (_ *Context) SaveToFile(_ string, _ string) interface { - Error() string -} { +func (_ *Context) SaveToFile(_ string, _ string) error { return nil } @@ -357,33 +341,21 @@ type Params map[string]string type Render interface { Error(_ int, _ ...string) HTML(_ int, _ string, _ interface{}, _ ...HTMLOptions) - HTMLBytes(_ string, _ interface{}, _ ...HTMLOptions) ([]uint8, interface { - Error() string - }) + HTMLBytes(_ string, _ interface{}, _ ...HTMLOptions) ([]byte, error) HTMLSet(_ int, _ string, _ string, _ interface{}, _ ...HTMLOptions) - HTMLSetBytes(_ string, _ string, _ interface{}, _ ...HTMLOptions) ([]uint8, interface { - Error() string - }) - HTMLSetString(_ string, _ string, _ interface{}, _ ...HTMLOptions) (string, interface { - Error() string - }) - HTMLString(_ string, _ interface{}, _ ...HTMLOptions) (string, interface { - Error() string - }) + HTMLSetBytes(_ string, _ string, _ interface{}, _ ...HTMLOptions) ([]byte, error) + HTMLSetString(_ string, _ string, _ interface{}, _ ...HTMLOptions) (string, error) + HTMLString(_ string, _ interface{}, _ ...HTMLOptions) (string, error) HasTemplateSet(_ string) bool Header() http.Header JSON(_ int, _ interface{}) - JSONString(_ interface{}) (string, interface { - Error() string - }) - PlainText(_ int, _ []uint8) - RawData(_ int, _ []uint8) + JSONString(_ interface{}) (string, error) + PlainText(_ int, _ []byte) + RawData(_ int, _ []byte) SetResponseWriter(_ http.ResponseWriter) SetTemplatePath(_ string, _ string) Status(_ int) - Write(_ []uint8) (int, interface { - Error() string - }) + Write(_ []byte) (int, error) WriteHeader(_ int) XML(_ int, _ interface{}) } @@ -406,9 +378,7 @@ func (_ Request) Context() context.Context { return nil } -func (_ Request) Cookie(_ string) (*http.Cookie, interface { - Error() string -}) { +func (_ Request) Cookie(_ string) (*http.Cookie, error) { return nil, nil } @@ -416,9 +386,7 @@ func (_ Request) Cookies() []*http.Cookie { return nil } -func (_ Request) FormFile(_ string) (multipart.File, *multipart.FileHeader, interface { - Error() string -}) { +func (_ Request) FormFile(_ string) (multipart.File, *multipart.FileHeader, error) { return nil, nil, nil } @@ -426,21 +394,15 @@ func (_ Request) FormValue(_ string) string { return "" } -func (_ Request) MultipartReader() (*multipart.Reader, interface { - Error() string -}) { +func (_ Request) MultipartReader() (*multipart.Reader, error) { return nil, nil } -func (_ Request) ParseForm() interface { - Error() string -} { +func (_ Request) ParseForm() error { return nil } -func (_ Request) ParseMultipartForm(_ int64) interface { - Error() string -} { +func (_ Request) ParseMultipartForm(_ int64) error { return nil } @@ -466,15 +428,11 @@ func (_ Request) WithContext(_ context.Context) *http.Request { return nil } -func (_ Request) Write(_ io.Writer) interface { - Error() string -} { +func (_ Request) Write(_ io.Writer) error { return nil } -func (_ Request) WriteProxy(_ io.Writer) interface { - Error() string -} { +func (_ Request) WriteProxy(_ io.Writer) error { return nil } @@ -484,9 +442,7 @@ func (_ *Request) Body() *RequestBody { type RequestBody struct{} -func (_ *RequestBody) Bytes() ([]uint8, interface { - Error() string -}) { +func (_ *RequestBody) Bytes() ([]byte, error) { return nil, nil } @@ -494,9 +450,7 @@ func (_ *RequestBody) ReadCloser() io.ReadCloser { return nil } -func (_ *RequestBody) String() (string, interface { - Error() string -}) { +func (_ *RequestBody) String() (string, error) { return "", nil } @@ -506,9 +460,7 @@ type ResponseWriter interface { Header() http.Header Size() int Status() int - Write(_ []uint8) (int, interface { - Error() string - }) + Write(_ []byte) (int, error) WriteHeader(_ int) Written() bool } diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/go.mod b/go/ql/test/library-tests/semmle/go/frameworks/SQL/go.mod index d6d79cd4a53..fce450afb0f 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/go.mod +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/go.mod @@ -3,15 +3,21 @@ module semmle.go.frameworks.SQL go 1.13 require ( - github.com/Masterminds/squirrel v1.1.0 + github.com/Masterminds/squirrel v1.5.4 github.com/go-pg/pg v8.0.6+incompatible github.com/go-pg/pg/v9 v9.1.3 github.com/go-sql-driver/mysql v1.6.0 // indirect github.com/go-xorm/xorm v0.7.9 github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.2 // indirect - github.com/uptrace/bun v1.1.14 - github.com/uptrace/bun/dialect/sqlitedialect v1.1.14 - github.com/uptrace/bun/driver/sqliteshim v1.1.14 + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect + github.com/stretchr/testify v1.8.1 // indirect + golang.org/x/tools v0.9.1 // indirect + gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect + lukechampine.com/uint128 v1.3.0 // indirect + modernc.org/libc v1.22.6 // indirect + modernc.org/sqlite v1.22.1 // indirect + modernc.org/token v1.1.0 // indirect xorm.io/xorm v1.1.0 ) diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/main.go b/go/ql/test/library-tests/semmle/go/frameworks/SQL/main.go index fa05b5b698f..dd21a91eedd 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/main.go +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/main.go @@ -1,6 +1,6 @@ package main -//go:generate depstubber -vendor github.com/Masterminds/squirrel "" Select,Expr +//go:generate depstubber -vendor github.com/Masterminds/squirrel DeleteBuilder,InsertBuilder,SelectBuilder,UpdateBuilder Delete,Expr,Insert,Select,Update import ( "context" @@ -43,9 +43,43 @@ func test(db *sql.DB, ctx context.Context) { } func squirrelTest(querypart string) { - squirrel.Select("*").From("users").Where(squirrel.Expr(querypart)) // $ querystring=querypart - squirrel.Select("*").From("users").Where(querypart) // $ querystring=querypart - squirrel.Select("*").From("users").Suffix(querypart) // $ querystring=querypart + squirrel.Expr(querypart) // $ querystring=querypart + deleteBuilder := squirrel.Delete(querypart) // $ querystring=querypart + deleteBuilder.From(querypart) // $ querystring=querypart + deleteBuilder.OrderBy(querypart) // $ querystring=[]type{args} + deleteBuilder.Prefix(querypart) // $ querystring=querypart + deleteBuilder.Suffix(querypart) // $ querystring=querypart + deleteBuilder.Where(querypart) // $ querystring=querypart + + insertBuilder := squirrel.Insert(querypart) // $ querystring=querypart + insertBuilder.Columns(querypart) // $ querystring=[]type{args} + insertBuilder.Options(querypart) // $ querystring=[]type{args} + insertBuilder.Prefix(querypart) // $ querystring=querypart + insertBuilder.Suffix(querypart) // $ querystring=querypart + insertBuilder.Into(querypart) // $ querystring=querypart + + selectBuilder := squirrel.Select(querypart) // $ querystring=[]type{args} + selectBuilder.Columns(querypart) // $ querystring=[]type{args} + selectBuilder.From(querypart) // $ querystring=querypart + selectBuilder.Options(querypart) // $ querystring=[]type{args} + selectBuilder.OrderBy(querypart) // $ querystring=[]type{args} + selectBuilder.Prefix(querypart) // $ querystring=querypart + selectBuilder.Suffix(querypart) // $ querystring=querypart + selectBuilder.Where(querypart) // $ querystring=querypart + selectBuilder.CrossJoin(querypart) // $ querystring=querypart + selectBuilder.GroupBy(querypart) // $ querystring=[]type{args} + selectBuilder.InnerJoin(querypart) // $ querystring=querypart + selectBuilder.LeftJoin(querypart) // $ querystring=querypart + selectBuilder.RightJoin(querypart) // $ querystring=querypart + + updateBuilder := squirrel.Update(querypart) // $ querystring=querypart + updateBuilder.From(querypart) // $ querystring=querypart + updateBuilder.OrderBy(querypart) // $ querystring=[]type{args} + updateBuilder.Prefix(querypart) // $ querystring=querypart + updateBuilder.Suffix(querypart) // $ querystring=querypart + updateBuilder.Where(querypart) // $ querystring=querypart + updateBuilder.Set(querypart, "") // $ querystring=querypart + updateBuilder.Table(querypart) // $ querystring=querypart } func test2(tx *sql.Tx, query string, ctx context.Context) { diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/vendor/github.com/Masterminds/squirrel/stub.go b/go/ql/test/library-tests/semmle/go/frameworks/SQL/vendor/github.com/Masterminds/squirrel/stub.go index fc639e9e209..96a30e49d4e 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/vendor/github.com/Masterminds/squirrel/stub.go +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/vendor/github.com/Masterminds/squirrel/stub.go @@ -2,7 +2,7 @@ // This is a simple stub for github.com/Masterminds/squirrel, strictly for use in testing. // See the LICENSE file for information about the licensing of the original library. -// Source: github.com/Masterminds/squirrel (exports: ; functions: Select,Expr) +// Source: github.com/Masterminds/squirrel (exports: DeleteBuilder,InsertBuilder,SelectBuilder,UpdateBuilder; functions: Delete,Expr,Insert,Select,Update) // Package squirrel is a stub of github.com/Masterminds/squirrel, generated by depstubber. package squirrel @@ -17,10 +17,186 @@ type BaseRunner interface { Query(_ string, _ ...interface{}) (*sql.Rows, error) } -func Expr(_ string, _ ...interface{}) interface{} { +func Delete(_ string) DeleteBuilder { + return DeleteBuilder{} +} + +type DeleteBuilder struct{} + +func (_ DeleteBuilder) Exec() (sql.Result, error) { + return nil, nil +} + +func (_ DeleteBuilder) ExecContext(_ context.Context) (sql.Result, error) { + return nil, nil +} + +func (_ DeleteBuilder) From(_ string) DeleteBuilder { + return DeleteBuilder{} +} + +func (_ DeleteBuilder) Limit(_ uint64) DeleteBuilder { + return DeleteBuilder{} +} + +func (_ DeleteBuilder) MustSql() (string, []interface{}) { + return "", nil +} + +func (_ DeleteBuilder) Offset(_ uint64) DeleteBuilder { + return DeleteBuilder{} +} + +func (_ DeleteBuilder) OrderBy(_ ...string) DeleteBuilder { + return DeleteBuilder{} +} + +func (_ DeleteBuilder) PlaceholderFormat(_ PlaceholderFormat) DeleteBuilder { + return DeleteBuilder{} +} + +func (_ DeleteBuilder) Prefix(_ string, _ ...interface{}) DeleteBuilder { + return DeleteBuilder{} +} + +func (_ DeleteBuilder) PrefixExpr(_ Sqlizer) DeleteBuilder { + return DeleteBuilder{} +} + +func (_ DeleteBuilder) Query() (*sql.Rows, error) { + return nil, nil +} + +func (_ DeleteBuilder) QueryContext(_ context.Context) (*sql.Rows, error) { + return nil, nil +} + +func (_ DeleteBuilder) QueryRowContext(_ context.Context) RowScanner { return nil } +func (_ DeleteBuilder) RunWith(_ BaseRunner) DeleteBuilder { + return DeleteBuilder{} +} + +func (_ DeleteBuilder) ScanContext(_ context.Context, _ ...interface{}) error { + return nil +} + +func (_ DeleteBuilder) Suffix(_ string, _ ...interface{}) DeleteBuilder { + return DeleteBuilder{} +} + +func (_ DeleteBuilder) SuffixExpr(_ Sqlizer) DeleteBuilder { + return DeleteBuilder{} +} + +func (_ DeleteBuilder) ToSql() (string, []interface{}, error) { + return "", nil, nil +} + +func (_ DeleteBuilder) Where(_ interface{}, _ ...interface{}) DeleteBuilder { + return DeleteBuilder{} +} + +func Expr(_ string, _ ...interface{}) Sqlizer { + return nil +} + +func Insert(_ string) InsertBuilder { + return InsertBuilder{} +} + +type InsertBuilder struct{} + +func (_ InsertBuilder) Columns(_ ...string) InsertBuilder { + return InsertBuilder{} +} + +func (_ InsertBuilder) Exec() (sql.Result, error) { + return nil, nil +} + +func (_ InsertBuilder) ExecContext(_ context.Context) (sql.Result, error) { + return nil, nil +} + +func (_ InsertBuilder) Into(_ string) InsertBuilder { + return InsertBuilder{} +} + +func (_ InsertBuilder) MustSql() (string, []interface{}) { + return "", nil +} + +func (_ InsertBuilder) Options(_ ...string) InsertBuilder { + return InsertBuilder{} +} + +func (_ InsertBuilder) PlaceholderFormat(_ PlaceholderFormat) InsertBuilder { + return InsertBuilder{} +} + +func (_ InsertBuilder) Prefix(_ string, _ ...interface{}) InsertBuilder { + return InsertBuilder{} +} + +func (_ InsertBuilder) PrefixExpr(_ Sqlizer) InsertBuilder { + return InsertBuilder{} +} + +func (_ InsertBuilder) Query() (*sql.Rows, error) { + return nil, nil +} + +func (_ InsertBuilder) QueryContext(_ context.Context) (*sql.Rows, error) { + return nil, nil +} + +func (_ InsertBuilder) QueryRow() RowScanner { + return nil +} + +func (_ InsertBuilder) QueryRowContext(_ context.Context) RowScanner { + return nil +} + +func (_ InsertBuilder) RunWith(_ BaseRunner) InsertBuilder { + return InsertBuilder{} +} + +func (_ InsertBuilder) Scan(_ ...interface{}) error { + return nil +} + +func (_ InsertBuilder) ScanContext(_ context.Context, _ ...interface{}) error { + return nil +} + +func (_ InsertBuilder) Select(_ SelectBuilder) InsertBuilder { + return InsertBuilder{} +} + +func (_ InsertBuilder) SetMap(_ map[string]interface{}) InsertBuilder { + return InsertBuilder{} +} + +func (_ InsertBuilder) Suffix(_ string, _ ...interface{}) InsertBuilder { + return InsertBuilder{} +} + +func (_ InsertBuilder) SuffixExpr(_ Sqlizer) InsertBuilder { + return InsertBuilder{} +} + +func (_ InsertBuilder) ToSql() (string, []interface{}, error) { + return "", nil, nil +} + +func (_ InsertBuilder) Values(_ ...interface{}) InsertBuilder { + return InsertBuilder{} +} + type PlaceholderFormat interface { ReplacePlaceholders(_ string) (string, error) } @@ -43,6 +219,10 @@ func (_ SelectBuilder) Columns(_ ...string) SelectBuilder { return SelectBuilder{} } +func (_ SelectBuilder) CrossJoin(_ string, _ ...interface{}) SelectBuilder { + return SelectBuilder{} +} + func (_ SelectBuilder) Distinct() SelectBuilder { return SelectBuilder{} } @@ -71,6 +251,10 @@ func (_ SelectBuilder) Having(_ interface{}, _ ...interface{}) SelectBuilder { return SelectBuilder{} } +func (_ SelectBuilder) InnerJoin(_ string, _ ...interface{}) SelectBuilder { + return SelectBuilder{} +} + func (_ SelectBuilder) Join(_ string, _ ...interface{}) SelectBuilder { return SelectBuilder{} } @@ -103,6 +287,10 @@ func (_ SelectBuilder) OrderBy(_ ...string) SelectBuilder { return SelectBuilder{} } +func (_ SelectBuilder) OrderByClause(_ interface{}, _ ...interface{}) SelectBuilder { + return SelectBuilder{} +} + func (_ SelectBuilder) PlaceholderFormat(_ PlaceholderFormat) SelectBuilder { return SelectBuilder{} } @@ -111,6 +299,10 @@ func (_ SelectBuilder) Prefix(_ string, _ ...interface{}) SelectBuilder { return SelectBuilder{} } +func (_ SelectBuilder) PrefixExpr(_ Sqlizer) SelectBuilder { + return SelectBuilder{} +} + func (_ SelectBuilder) Query() (*sql.Rows, error) { return nil, nil } @@ -127,10 +319,18 @@ func (_ SelectBuilder) QueryRowContext(_ context.Context) RowScanner { return nil } +func (_ SelectBuilder) RemoveColumns() SelectBuilder { + return SelectBuilder{} +} + func (_ SelectBuilder) RemoveLimit() SelectBuilder { return SelectBuilder{} } +func (_ SelectBuilder) RemoveOffset() SelectBuilder { + return SelectBuilder{} +} + func (_ SelectBuilder) RightJoin(_ string, _ ...interface{}) SelectBuilder { return SelectBuilder{} } @@ -151,6 +351,10 @@ func (_ SelectBuilder) Suffix(_ string, _ ...interface{}) SelectBuilder { return SelectBuilder{} } +func (_ SelectBuilder) SuffixExpr(_ Sqlizer) SelectBuilder { + return SelectBuilder{} +} + func (_ SelectBuilder) ToSql() (string, []interface{}, error) { return "", nil, nil } @@ -158,3 +362,113 @@ func (_ SelectBuilder) ToSql() (string, []interface{}, error) { func (_ SelectBuilder) Where(_ interface{}, _ ...interface{}) SelectBuilder { return SelectBuilder{} } + +type Sqlizer interface { + ToSql() (string, []interface{}, error) +} + +func Update(_ string) UpdateBuilder { + return UpdateBuilder{} +} + +type UpdateBuilder struct{} + +func (_ UpdateBuilder) Exec() (sql.Result, error) { + return nil, nil +} + +func (_ UpdateBuilder) ExecContext(_ context.Context) (sql.Result, error) { + return nil, nil +} + +func (_ UpdateBuilder) From(_ string) UpdateBuilder { + return UpdateBuilder{} +} + +func (_ UpdateBuilder) FromSelect(_ SelectBuilder, _ string) UpdateBuilder { + return UpdateBuilder{} +} + +func (_ UpdateBuilder) Limit(_ uint64) UpdateBuilder { + return UpdateBuilder{} +} + +func (_ UpdateBuilder) MustSql() (string, []interface{}) { + return "", nil +} + +func (_ UpdateBuilder) Offset(_ uint64) UpdateBuilder { + return UpdateBuilder{} +} + +func (_ UpdateBuilder) OrderBy(_ ...string) UpdateBuilder { + return UpdateBuilder{} +} + +func (_ UpdateBuilder) PlaceholderFormat(_ PlaceholderFormat) UpdateBuilder { + return UpdateBuilder{} +} + +func (_ UpdateBuilder) Prefix(_ string, _ ...interface{}) UpdateBuilder { + return UpdateBuilder{} +} + +func (_ UpdateBuilder) PrefixExpr(_ Sqlizer) UpdateBuilder { + return UpdateBuilder{} +} + +func (_ UpdateBuilder) Query() (*sql.Rows, error) { + return nil, nil +} + +func (_ UpdateBuilder) QueryContext(_ context.Context) (*sql.Rows, error) { + return nil, nil +} + +func (_ UpdateBuilder) QueryRow() RowScanner { + return nil +} + +func (_ UpdateBuilder) QueryRowContext(_ context.Context) RowScanner { + return nil +} + +func (_ UpdateBuilder) RunWith(_ BaseRunner) UpdateBuilder { + return UpdateBuilder{} +} + +func (_ UpdateBuilder) Scan(_ ...interface{}) error { + return nil +} + +func (_ UpdateBuilder) ScanContext(_ context.Context, _ ...interface{}) error { + return nil +} + +func (_ UpdateBuilder) Set(_ string, _ interface{}) UpdateBuilder { + return UpdateBuilder{} +} + +func (_ UpdateBuilder) SetMap(_ map[string]interface{}) UpdateBuilder { + return UpdateBuilder{} +} + +func (_ UpdateBuilder) Suffix(_ string, _ ...interface{}) UpdateBuilder { + return UpdateBuilder{} +} + +func (_ UpdateBuilder) SuffixExpr(_ Sqlizer) UpdateBuilder { + return UpdateBuilder{} +} + +func (_ UpdateBuilder) Table(_ string) UpdateBuilder { + return UpdateBuilder{} +} + +func (_ UpdateBuilder) ToSql() (string, []interface{}, error) { + return "", nil, nil +} + +func (_ UpdateBuilder) Where(_ interface{}, _ ...interface{}) UpdateBuilder { + return UpdateBuilder{} +} diff --git a/go/ql/test/library-tests/semmle/go/frameworks/SQL/vendor/modules.txt b/go/ql/test/library-tests/semmle/go/frameworks/SQL/vendor/modules.txt index bf83abef6f7..10f72495104 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/SQL/vendor/modules.txt +++ b/go/ql/test/library-tests/semmle/go/frameworks/SQL/vendor/modules.txt @@ -1,4 +1,4 @@ -# github.com/Masterminds/squirrel v1.1.0 +# github.com/Masterminds/squirrel v1.5.4 github.com/Masterminds/squirrel # github.com/go-pg/pg v8.0.6+incompatible github.com/go-pg/pg diff --git a/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSize.expected b/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSize.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSize.ql b/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSize.ql new file mode 100644 index 00000000000..18add3a4881 --- /dev/null +++ b/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSize.ql @@ -0,0 +1,4 @@ +import go +import semmle.go.security.UncontrolledAllocationSize +import TestUtilities.InlineFlowTest +import FlowTest<UncontrolledAllocationSize::Config, UncontrolledAllocationSize::Config> diff --git a/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSizeBad.go b/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSizeBad.go new file mode 100644 index 00000000000..0ae70436bde --- /dev/null +++ b/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSizeBad.go @@ -0,0 +1,27 @@ +package main + +import ( + "encoding/json" + "fmt" + "net/http" + "strconv" +) + +func OutOfMemoryBad(w http.ResponseWriter, r *http.Request) { + source := r.URL.Query() + + sourceStr := source.Get("n") + sink, err := strconv.Atoi(sourceStr) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + result := make([]string, sink) // $hasTaintFlow="sink" + for i := 0; i < sink; i++ { + result[i] = fmt.Sprintf("Item %d", i+1) + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(result) +} diff --git a/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSizeGood.go b/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSizeGood.go new file mode 100644 index 00000000000..a66edf74a83 --- /dev/null +++ b/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSizeGood.go @@ -0,0 +1,94 @@ +package main + +import ( + "encoding/json" + "fmt" + "net/http" + "strconv" +) + +func OutOfMemoryGood1(w http.ResponseWriter, r *http.Request) { + source := r.URL.Query() + MaxValue := 6 + sourceStr := source.Get("n") + sink, err := strconv.Atoi(sourceStr) + if err != nil || sink < 0 { + http.Error(w, "Bad request", http.StatusBadRequest) + return + } + if sink > MaxValue { + return + } + result := make([]string, sink) + for i := 0; i < sink; i++ { + result[i] = fmt.Sprintf("Item %d", i+1) + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(result) +} + +func OutOfMemoryGood2(w http.ResponseWriter, r *http.Request) { + source := r.URL.Query() + MaxValue := 6 + sourceStr := source.Get("n") + sink, err := strconv.Atoi(sourceStr) + if err != nil || sink < 0 { + http.Error(w, "Bad request", http.StatusBadRequest) + return + } + if sink <= MaxValue { + result := make([]string, sink) + for i := 0; i < sink; i++ { + result[i] = fmt.Sprintf("Item %d", i+1) + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(result) + } +} + +func OutOfMemoryGood3(w http.ResponseWriter, r *http.Request) { + source := r.URL.Query() + MaxValue := 6 + sourceStr := source.Get("n") + sink, err := strconv.Atoi(sourceStr) + if err != nil || sink < 0 { + http.Error(w, "Bad request", http.StatusBadRequest) + return + } + if sink > MaxValue { + sink = MaxValue + result := make([]string, sink) + for i := 0; i < sink; i++ { + result[i] = fmt.Sprintf("Item %d", i+1) + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(result) + } +} + +func OutOfMemoryGood4(w http.ResponseWriter, r *http.Request) { + source := r.URL.Query() + MaxValue := 6 + sourceStr := source.Get("n") + sink, err := strconv.Atoi(sourceStr) + if err != nil || sink < 0 { + http.Error(w, "Bad request", http.StatusBadRequest) + return + } + if sink > MaxValue { + sink = MaxValue + } else { + tmp := sink + sink = tmp + } + result := make([]string, sink) + for i := 0; i < sink; i++ { + result[i] = fmt.Sprintf("Item %d", i+1) + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(result) +} diff --git a/go/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected b/go/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected index 8eb49a5cc80..0526c0ba604 100644 --- a/go/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected +++ b/go/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected @@ -1,28 +1,28 @@ | AlertSuppressionExample.go:11:14:11:40 | "horsebatterystaplecorrect" | Hard-coded $@. | AlertSuppressionExample.go:11:14:11:40 | "horsebatterystaplecorrect" | password | | HardcodedCredentials.go:10:13:10:28 | "s3cretp4ssword" | Hard-coded $@. | HardcodedCredentials.go:10:13:10:28 | "s3cretp4ssword" | password | -| HardcodedKeysBad.go:19:28:19:39 | mySigningKey | Hard-coded credential. | HardcodedKeysBad.go:11:25:11:37 | "AllYourBase" | password | -| jwt.go:42:28:42:39 | mySigningKey | Hard-coded credential. | jwt.go:33:25:33:30 | "key1" | password | -| jwt.go:49:16:49:29 | type conversion | Hard-coded credential. | jwt.go:49:23:49:28 | "key2" | password | -| jwt.go:68:44:68:46 | key | Hard-coded credential. | jwt.go:67:16:67:21 | `key3` | password | -| jwt.go:73:66:73:68 | key | Hard-coded credential. | jwt.go:72:16:72:21 | "key4" | password | -| jwt.go:81:15:81:18 | key2 | Hard-coded credential. | jwt.go:76:17:76:22 | "key5" | password | -| jwt.go:91:41:91:43 | key | Hard-coded credential. | jwt.go:87:16:87:21 | "key6" | password | -| jwt.go:98:66:98:69 | key2 | Hard-coded credential. | jwt.go:96:17:96:22 | "key7" | password | -| jwt.go:109:30:109:32 | key | Hard-coded credential. | jwt.go:104:16:104:21 | "key8" | password | -| jwt.go:114:16:114:24 | sharedKey | Hard-coded credential. | jwt.go:113:22:113:27 | "key9" | password | -| jwt.go:120:16:120:30 | sharedKeyglobal | Hard-coded credential. | jwt.go:117:30:117:36 | "key10" | password | -| jwt.go:126:20:126:34 | type conversion | Hard-coded credential. | jwt.go:126:27:126:33 | "key11" | password | -| jwt.go:143:39:143:41 | key | Hard-coded credential. | jwt.go:141:16:141:22 | "key12" | password | -| jwt.go:152:11:152:13 | key | Hard-coded credential. | jwt.go:148:16:148:22 | "key13" | password | -| jwt.go:160:34:160:36 | key | Hard-coded credential. | jwt.go:159:16:159:22 | "key14" | password | -| jwt.go:166:32:166:34 | key | Hard-coded credential. | jwt.go:165:16:165:22 | "key15" | password | -| jwt.go:172:41:172:43 | key | Hard-coded credential. | jwt.go:171:16:171:22 | "key16" | password | -| jwt.go:178:51:178:53 | key | Hard-coded credential. | jwt.go:177:16:177:22 | "key17" | password | -| jwt.go:184:42:184:44 | key | Hard-coded credential. | jwt.go:183:16:183:22 | "key18" | password | -| jwt.go:192:33:192:35 | key | Hard-coded credential. | jwt.go:189:16:189:22 | "key19" | password | +| HardcodedKeysBad.go:19:28:19:39 | mySigningKey | Hard-coded $@. | HardcodedKeysBad.go:11:25:11:37 | "AllYourBase" | secret | +| jwt.go:42:28:42:39 | mySigningKey | Hard-coded $@. | jwt.go:33:25:33:30 | "key1" | secret | +| jwt.go:49:16:49:29 | type conversion | Hard-coded $@. | jwt.go:49:23:49:28 | "key2" | secret | +| jwt.go:68:44:68:46 | key | Hard-coded $@. | jwt.go:67:16:67:21 | `key3` | secret | +| jwt.go:73:66:73:68 | key | Hard-coded $@. | jwt.go:72:16:72:21 | "key4" | secret | +| jwt.go:81:15:81:18 | key2 | Hard-coded $@. | jwt.go:76:17:76:22 | "key5" | secret | +| jwt.go:91:41:91:43 | key | Hard-coded $@. | jwt.go:87:16:87:21 | "key6" | secret | +| jwt.go:98:66:98:69 | key2 | Hard-coded $@. | jwt.go:96:17:96:22 | "key7" | secret | +| jwt.go:109:30:109:32 | key | Hard-coded $@. | jwt.go:104:16:104:21 | "key8" | secret | +| jwt.go:114:16:114:24 | sharedKey | Hard-coded $@. | jwt.go:113:22:113:27 | "key9" | secret | +| jwt.go:120:16:120:30 | sharedKeyglobal | Hard-coded $@. | jwt.go:117:30:117:36 | "key10" | secret | +| jwt.go:126:20:126:34 | type conversion | Hard-coded $@. | jwt.go:126:27:126:33 | "key11" | secret | +| jwt.go:143:39:143:41 | key | Hard-coded $@. | jwt.go:141:16:141:22 | "key12" | secret | +| jwt.go:152:11:152:13 | key | Hard-coded $@. | jwt.go:148:16:148:22 | "key13" | secret | +| jwt.go:160:34:160:36 | key | Hard-coded $@. | jwt.go:159:16:159:22 | "key14" | secret | +| jwt.go:166:32:166:34 | key | Hard-coded $@. | jwt.go:165:16:165:22 | "key15" | secret | +| jwt.go:172:41:172:43 | key | Hard-coded $@. | jwt.go:171:16:171:22 | "key16" | secret | +| jwt.go:178:51:178:53 | key | Hard-coded $@. | jwt.go:177:16:177:22 | "key17" | secret | +| jwt.go:184:42:184:44 | key | Hard-coded $@. | jwt.go:183:16:183:22 | "key18" | secret | +| jwt.go:192:33:192:35 | key | Hard-coded $@. | jwt.go:189:16:189:22 | "key19" | secret | | main.go:6:14:6:23 | "p4ssw0rd" | Hard-coded $@. | main.go:6:14:6:23 | "p4ssw0rd" | password | | main.go:12:1:26:30 | `-----BEGIN RSA PRIVATE KEY-----\nMIICXQIBAAKBgQC/tzdtXKXcX6F3v3hR6+uYyZpIeXhhLflJkY2eILLQfAnwKlT5\nxIHW5QZcHQV9sCyZ8qSdPGif7PwgMbButMbByiZhCSugUFb6vjVqoktmslYF4LKH\niDgvmlwuJW0TvynxBLzDCwrRP+gpRT8wuAortWAx/03POTw7Mzi2cIPNsQIDAQAB\nAoGAMHCrqY9CPTdQhgAz94cDpTwzJmLCvtMt7J/BR5X9eF4O6MbZZ652HAUMIVQX\n4hUUf+VmIHB2AwqO/ddwO9ijaz04BslOSy/iYevHGlH65q4587NSlFWjvILMIQCM\nGBjfzJIxlLHVhjc2cFnyAE5YWjF/OMnJN0OhP9pxmCP/iM0CQQDxmQndQLdnV7+6\n8SvBHE8bg1LE8/BzTt68U3aWwiBjrHMFgzr//7Za4VF7h4ilFgmbh0F3sYz+C8iO\n0JrBRPeLAkEAyyTwnv/pgqTS/wuxIHUxRBpbdk3YvILAthNrGQg5uzA7eSeFu7Mv\nGtEkXsaqCDbdehgarFfNN8PB6OMRIbsXMwJBAOjhH8UJ0L/osYO9XPO0GfznRS1c\nBnbfm4vk1/bSAO6TF/xEVubU0i4f6q8sIecfqvskEVMS7lkjeptPMR0DIakCQE+7\nuQH/Wizf+r0GXshplyOu4LVHisk63N7aMlAJ7XbuUHmWLKRmiReSfR8CBNzig/2X\nFmkMsUyw9hwte5zsrQcCQQCrOkZvzUj9j1HKG+32EJ2E4kisJZmAgF9GI+z6oxpi\nExped5tp8EWytCjRwKhOcc0068SgaqhKvyyUWpbx32VQ\n-----END RSA PRIVATE KEY-----` | Hard-coded private key. | main.go:12:1:26:30 | `-----BEGIN RSA PRIVATE KEY-----\nMIICXQIBAAKBgQC/tzdtXKXcX6F3v3hR6+uYyZpIeXhhLflJkY2eILLQfAnwKlT5\nxIHW5QZcHQV9sCyZ8qSdPGif7PwgMbButMbByiZhCSugUFb6vjVqoktmslYF4LKH\niDgvmlwuJW0TvynxBLzDCwrRP+gpRT8wuAortWAx/03POTw7Mzi2cIPNsQIDAQAB\nAoGAMHCrqY9CPTdQhgAz94cDpTwzJmLCvtMt7J/BR5X9eF4O6MbZZ652HAUMIVQX\n4hUUf+VmIHB2AwqO/ddwO9ijaz04BslOSy/iYevHGlH65q4587NSlFWjvILMIQCM\nGBjfzJIxlLHVhjc2cFnyAE5YWjF/OMnJN0OhP9pxmCP/iM0CQQDxmQndQLdnV7+6\n8SvBHE8bg1LE8/BzTt68U3aWwiBjrHMFgzr//7Za4VF7h4ilFgmbh0F3sYz+C8iO\n0JrBRPeLAkEAyyTwnv/pgqTS/wuxIHUxRBpbdk3YvILAthNrGQg5uzA7eSeFu7Mv\nGtEkXsaqCDbdehgarFfNN8PB6OMRIbsXMwJBAOjhH8UJ0L/osYO9XPO0GfznRS1c\nBnbfm4vk1/bSAO6TF/xEVubU0i4f6q8sIecfqvskEVMS7lkjeptPMR0DIakCQE+7\nuQH/Wizf+r0GXshplyOu4LVHisk63N7aMlAJ7XbuUHmWLKRmiReSfR8CBNzig/2X\nFmkMsUyw9hwte5zsrQcCQQCrOkZvzUj9j1HKG+32EJ2E4kisJZmAgF9GI+z6oxpi\nExped5tp8EWytCjRwKhOcc0068SgaqhKvyyUWpbx32VQ\n-----END RSA PRIVATE KEY-----` | certificate | | main.go:44:14:44:19 | "p4ss" | Hard-coded $@. | main.go:44:14:44:19 | "p4ss" | password | | main.go:48:13:48:15 | tmp | Hard-coded $@. | main.go:44:14:44:19 | "p4ss" | password | | main.go:50:15:50:21 | "p4ss2" | Hard-coded $@. | main.go:50:15:50:21 | "p4ss2" | password | -| sanitizer.go:18:44:18:46 | key | Hard-coded credential. | sanitizer.go:17:16:17:25 | `some_key` | password | +| sanitizer.go:18:44:18:46 | key | Hard-coded $@. | sanitizer.go:17:16:17:25 | `some_key` | secret | diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index 5b3af5e9040..ad4f7bdd07f 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -4,7 +4,7 @@ android.app,77,,103,,,,,,,,,,11,,,,,7,,,,,,,42,,,17,,,,,,,,,,,,,,,,,,,,,,18,85 android.content,24,31,154,,,,,,,,,,,,,,,16,,,,,,,,,,,,,,,,,,,,8,,,,,,4,27,,,,,63,91 android.database,59,,41,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,59,,,,,,,,,,,,41, android.net,,,60,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,45,15 -android.os,,2,122,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,41,81 +android.os,1,2,122,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,2,,,,,,41,81 android.support.v4.app,11,,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, android.util,6,16,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,16,, android.webkit,3,2,,,,,,,,,,,,,,2,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,, @@ -56,7 +56,7 @@ freemarker.template,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,,,,,,,,,,,, groovy.lang,26,,,,,,,,,,,,,26,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, groovy.text,1,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, groovy.util,5,,,,,,,,,,,,,5,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -hudson,74,9,2648,,4,,,,,,3,3,,,,4,,,,,,,,,,,54,,,,,,,,,6,,,,,,,,,,,,5,4,2572,76 +hudson,74,9,2648,,4,,,,,,3,2,,,,4,,,,,,,,,,,55,,,,,,,,,6,,,,,,,,,,,,5,4,2572,76 io.jsonwebtoken,,2,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,4, io.netty.bootstrap,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,,,, io.netty.buffer,,,207,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,130,77 @@ -76,13 +76,13 @@ jakarta.ws.rs.core,2,,149,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,94,55 jakarta.xml.bind.attachment,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,, java.awt,1,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,3 java.beans,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -java.io,51,1,46,,,,,,,,,22,,,,,,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,,,1,,44,2 +java.io,51,1,45,,,,,,,,,22,,,,,,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,,,1,,43,2 java.lang,38,3,101,,13,,,,,,1,,,,,,,,,,,,8,,,,11,,,4,,,1,,,,,,,,,,,,,,3,,,58,43 java.net,22,3,24,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,20,,,,,,,,,,,,,3,24, java.nio,44,,38,,,,,,,,,5,,,,,,,,,,,,,,,38,,,,,,,,,1,,,,,,,,,,,,,,38, java.security,21,,,,,11,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, java.sql,15,1,2,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,9,,,,,,,,1,,,,2, -java.util,47,2,520,,,,,,,,,1,,,,,,,,,,,34,,,,2,,,,5,2,,1,2,,,,,,,,,,,,2,,,46,474 +java.util,47,2,524,,,,,,,,,1,,,,,,,,,,,34,,,,2,,,,5,2,,1,2,,,,,,,,,,,,2,,,46,478 javafx.scene.web,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, javax.activation,2,,7,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,7, javax.crypto,19,,4,,,12,3,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index 3e0edb7dfac..a37dc0a71ef 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -7,7 +7,7 @@ Java framework & library support :widths: auto Framework / library,Package,Flow sources,Taint & value steps,Sinks (total),`CWE‑022` :sub:`Path injection`,`CWE‑079` :sub:`Cross-site scripting`,`CWE‑089` :sub:`SQL injection`,`CWE‑090` :sub:`LDAP injection`,`CWE‑094` :sub:`Code injection`,`CWE‑918` :sub:`Request Forgery` - Android,``android.*``,52,481,180,,3,67,,, + Android,``android.*``,52,481,181,1,3,67,,, Android extensions,``androidx.*``,5,183,60,,,,,, `Apache Commons Collections <https://commons.apache.org/proper/commons-collections/>`_,"``org.apache.commons.collections``, ``org.apache.commons.collections4``",,1600,,,,,,, `Apache Commons IO <https://commons.apache.org/proper/commons-io/>`_,``org.apache.commons.io``,,562,118,99,,,,,15 @@ -18,10 +18,10 @@ Java framework & library support `Google Guava <https://guava.dev/>`_,``com.google.common.*``,,730,43,9,,,,, JBoss Logging,``org.jboss.logging``,,,324,,,,,, `JSON-java <https://github.com/stleary/JSON-java>`_,``org.json``,,236,,,,,,, - Java Standard Library,``java.*``,10,735,239,80,,9,,,25 + Java Standard Library,``java.*``,10,738,239,80,,9,,,25 Java extensions,"``javax.*``, ``jakarta.*``",67,688,80,5,4,2,1,1,4 Kotlin Standard Library,``kotlin*``,,1849,16,14,,,,,2 `Spring <https://spring.io/>`_,``org.springframework.*``,38,481,118,5,,28,14,,35 - Others,"``actions.osgi``, ``antlr``, ``ch.ethz.ssh2``, ``cn.hutool.core.codec``, ``com.alibaba.druid.sql``, ``com.alibaba.fastjson2``, ``com.amazonaws.auth``, ``com.auth0.jwt.algorithms``, ``com.azure.identity``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.google.gson``, ``com.hubspot.jinjava``, ``com.jcraft.jsch``, ``com.microsoft.sqlserver.jdbc``, ``com.mitchellbosecke.pebble``, ``com.mongodb``, ``com.opensymphony.xwork2``, ``com.rabbitmq.client``, ``com.sshtools.j2ssh.authentication``, ``com.sun.crypto.provider``, ``com.sun.jndi.ldap``, ``com.sun.net.httpserver``, ``com.sun.net.ssl``, ``com.sun.rowset``, ``com.sun.security.auth.module``, ``com.sun.security.ntlm``, ``com.sun.security.sasl.digest``, ``com.thoughtworks.xstream``, ``com.trilead.ssh2``, ``com.unboundid.ldap.sdk``, ``com.zaxxer.hikari``, ``flexjson``, ``freemarker.cache``, ``freemarker.template``, ``groovy.lang``, ``groovy.text``, ``groovy.util``, ``hudson``, ``io.jsonwebtoken``, ``io.netty.bootstrap``, ``io.netty.buffer``, ``io.netty.channel``, ``io.netty.handler.codec``, ``io.netty.handler.ssl``, ``io.netty.handler.stream``, ``io.netty.resolver``, ``io.netty.util``, ``javafx.scene.web``, ``jenkins``, ``jodd.json``, ``liquibase.database.jvm``, ``liquibase.statement.core``, ``net.schmizz.sshj``, ``net.sf.json``, ``net.sf.saxon.s9api``, ``ognl``, ``okhttp3``, ``org.acegisecurity``, ``org.antlr.runtime``, ``org.apache.commons.codec``, ``org.apache.commons.compress.archivers.tar``, ``org.apache.commons.exec``, ``org.apache.commons.httpclient.util``, ``org.apache.commons.jelly``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.lang``, ``org.apache.commons.logging``, ``org.apache.commons.net``, ``org.apache.commons.ognl``, ``org.apache.cxf.catalog``, ``org.apache.cxf.common.classloader``, ``org.apache.cxf.common.jaxb``, ``org.apache.cxf.common.logging``, ``org.apache.cxf.configuration.jsse``, ``org.apache.cxf.helpers``, ``org.apache.cxf.resource``, ``org.apache.cxf.staxutils``, ``org.apache.cxf.tools.corba.utils``, ``org.apache.cxf.tools.util``, ``org.apache.cxf.transform``, ``org.apache.directory.ldap.client.api``, ``org.apache.hadoop.fs``, ``org.apache.hadoop.hive.metastore``, ``org.apache.hadoop.hive.ql.exec``, ``org.apache.hadoop.hive.ql.metadata``, ``org.apache.hc.client5.http.async.methods``, ``org.apache.hc.client5.http.classic.methods``, ``org.apache.hc.client5.http.fluent``, ``org.apache.hive.hcatalog.templeton``, ``org.apache.ibatis.jdbc``, ``org.apache.ibatis.mapping``, ``org.apache.log4j``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.apache.shiro.mgt``, ``org.apache.sshd.client.session``, ``org.apache.struts.beanvalidation.validation.interceptor``, ``org.apache.struts2``, ``org.apache.tools.ant``, ``org.apache.tools.zip``, ``org.apache.velocity.app``, ``org.apache.velocity.runtime``, ``org.codehaus.cargo.container.installer``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.eclipse.jetty.client``, ``org.fusesource.leveldbjni``, ``org.geogebra.web.full.main``, ``org.gradle.api.file``, ``org.hibernate``, ``org.influxdb``, ``org.jdbi.v3.core``, ``org.jenkins.ui.icon``, ``org.jenkins.ui.symbol``, ``org.jooq``, ``org.keycloak.models.map.storage``, ``org.kohsuke.stapler``, ``org.mvel2``, ``org.openjdk.jmh.runner.options``, ``org.owasp.esapi``, ``org.pac4j.jwt.config.encryption``, ``org.pac4j.jwt.config.signature``, ``org.scijava.log``, ``org.slf4j``, ``org.thymeleaf``, ``org.xml.sax``, ``org.xmlpull.v1``, ``org.yaml.snakeyaml``, ``play.libs.ws``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``, ``retrofit2``, ``sun.jvmstat.perfdata.monitor.protocol.local``, ``sun.jvmstat.perfdata.monitor.protocol.rmi``, ``sun.misc``, ``sun.net.ftp``, ``sun.net.www.protocol.http``, ``sun.security.acl``, ``sun.security.jgss.krb5``, ``sun.security.krb5``, ``sun.security.pkcs``, ``sun.security.pkcs11``, ``sun.security.provider``, ``sun.security.ssl``, ``sun.security.x509``, ``sun.tools.jconsole``",131,10518,893,124,6,22,18,,209 - Totals,,308,18951,2558,336,16,128,33,1,409 + Others,"``actions.osgi``, ``antlr``, ``ch.ethz.ssh2``, ``cn.hutool.core.codec``, ``com.alibaba.druid.sql``, ``com.alibaba.fastjson2``, ``com.amazonaws.auth``, ``com.auth0.jwt.algorithms``, ``com.azure.identity``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.google.gson``, ``com.hubspot.jinjava``, ``com.jcraft.jsch``, ``com.microsoft.sqlserver.jdbc``, ``com.mitchellbosecke.pebble``, ``com.mongodb``, ``com.opensymphony.xwork2``, ``com.rabbitmq.client``, ``com.sshtools.j2ssh.authentication``, ``com.sun.crypto.provider``, ``com.sun.jndi.ldap``, ``com.sun.net.httpserver``, ``com.sun.net.ssl``, ``com.sun.rowset``, ``com.sun.security.auth.module``, ``com.sun.security.ntlm``, ``com.sun.security.sasl.digest``, ``com.thoughtworks.xstream``, ``com.trilead.ssh2``, ``com.unboundid.ldap.sdk``, ``com.zaxxer.hikari``, ``flexjson``, ``freemarker.cache``, ``freemarker.template``, ``groovy.lang``, ``groovy.text``, ``groovy.util``, ``hudson``, ``io.jsonwebtoken``, ``io.netty.bootstrap``, ``io.netty.buffer``, ``io.netty.channel``, ``io.netty.handler.codec``, ``io.netty.handler.ssl``, ``io.netty.handler.stream``, ``io.netty.resolver``, ``io.netty.util``, ``javafx.scene.web``, ``jenkins``, ``jodd.json``, ``liquibase.database.jvm``, ``liquibase.statement.core``, ``net.schmizz.sshj``, ``net.sf.json``, ``net.sf.saxon.s9api``, ``ognl``, ``okhttp3``, ``org.acegisecurity``, ``org.antlr.runtime``, ``org.apache.commons.codec``, ``org.apache.commons.compress.archivers.tar``, ``org.apache.commons.exec``, ``org.apache.commons.httpclient.util``, ``org.apache.commons.jelly``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.lang``, ``org.apache.commons.logging``, ``org.apache.commons.net``, ``org.apache.commons.ognl``, ``org.apache.cxf.catalog``, ``org.apache.cxf.common.classloader``, ``org.apache.cxf.common.jaxb``, ``org.apache.cxf.common.logging``, ``org.apache.cxf.configuration.jsse``, ``org.apache.cxf.helpers``, ``org.apache.cxf.resource``, ``org.apache.cxf.staxutils``, ``org.apache.cxf.tools.corba.utils``, ``org.apache.cxf.tools.util``, ``org.apache.cxf.transform``, ``org.apache.directory.ldap.client.api``, ``org.apache.hadoop.fs``, ``org.apache.hadoop.hive.metastore``, ``org.apache.hadoop.hive.ql.exec``, ``org.apache.hadoop.hive.ql.metadata``, ``org.apache.hc.client5.http.async.methods``, ``org.apache.hc.client5.http.classic.methods``, ``org.apache.hc.client5.http.fluent``, ``org.apache.hive.hcatalog.templeton``, ``org.apache.ibatis.jdbc``, ``org.apache.ibatis.mapping``, ``org.apache.log4j``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.apache.shiro.mgt``, ``org.apache.sshd.client.session``, ``org.apache.struts.beanvalidation.validation.interceptor``, ``org.apache.struts2``, ``org.apache.tools.ant``, ``org.apache.tools.zip``, ``org.apache.velocity.app``, ``org.apache.velocity.runtime``, ``org.codehaus.cargo.container.installer``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.eclipse.jetty.client``, ``org.fusesource.leveldbjni``, ``org.geogebra.web.full.main``, ``org.gradle.api.file``, ``org.hibernate``, ``org.influxdb``, ``org.jdbi.v3.core``, ``org.jenkins.ui.icon``, ``org.jenkins.ui.symbol``, ``org.jooq``, ``org.keycloak.models.map.storage``, ``org.kohsuke.stapler``, ``org.mvel2``, ``org.openjdk.jmh.runner.options``, ``org.owasp.esapi``, ``org.pac4j.jwt.config.encryption``, ``org.pac4j.jwt.config.signature``, ``org.scijava.log``, ``org.slf4j``, ``org.thymeleaf``, ``org.xml.sax``, ``org.xmlpull.v1``, ``org.yaml.snakeyaml``, ``play.libs.ws``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``, ``retrofit2``, ``sun.jvmstat.perfdata.monitor.protocol.local``, ``sun.jvmstat.perfdata.monitor.protocol.rmi``, ``sun.misc``, ``sun.net.ftp``, ``sun.net.www.protocol.http``, ``sun.security.acl``, ``sun.security.jgss.krb5``, ``sun.security.krb5``, ``sun.security.pkcs``, ``sun.security.pkcs11``, ``sun.security.provider``, ``sun.security.ssl``, ``sun.security.x509``, ``sun.tools.jconsole``",131,10518,893,125,6,22,18,,209 + Totals,,308,18954,2559,338,16,128,33,1,409 diff --git a/java/ql/integration-tests/all-platforms/java/buildless-erroneous/ExtractorInformation.expected b/java/ql/integration-tests/all-platforms/java/buildless-erroneous/ExtractorInformation.expected new file mode 100644 index 00000000000..08c21ba9900 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-erroneous/ExtractorInformation.expected @@ -0,0 +1,20 @@ +| Annotation processors enabled: true | 1 | +| Number of calls with call target | 1 | +| Number of calls with missing call target | 4 | +| Number of diagnostics from CodeQL Java extractor with severity 5 | 10 | +| Number of diagnostics from CodeQL Java extractor with severity 6 | 2 | +| Number of expressions with known type | 1 | +| Number of expressions with unknown type | 6 | +| Number of files | 607 | +| Number of files with extension class | 604 | +| Number of files with extension java | 1 | +| Number of files with extension properties | 1 | +| Number of lines of code | 7 | +| Number of lines of code with extension java | 7 | +| Percentage of calls with call target | 20 | +| Percentage of expressions with known type | 14 | +| Total number of diagnostics from CodeQL Java extractor | 12 | +| Total number of lines | 13 | +| Total number of lines with extension java | 13 | +| Used annotation processor: lombok.launch.AnnotationProcessorHider$AnnotationProcessor | 1 | +| Used annotation processor: lombok.launch.AnnotationProcessorHider$ClaimingProcessor | 1 | diff --git a/java/ql/integration-tests/all-platforms/java/buildless-erroneous/ExtractorInformation.qlref b/java/ql/integration-tests/all-platforms/java/buildless-erroneous/ExtractorInformation.qlref new file mode 100644 index 00000000000..ff57e78a9d7 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-erroneous/ExtractorInformation.qlref @@ -0,0 +1 @@ +Telemetry/ExtractorInformation.ql \ No newline at end of file diff --git a/java/ql/integration-tests/all-platforms/java/buildless-erroneous/Test.java b/java/ql/integration-tests/all-platforms/java/buildless-erroneous/Test.java new file mode 100644 index 00000000000..6c2a61c4897 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-erroneous/Test.java @@ -0,0 +1,13 @@ +import abc.Def; + +public class Test { + + public static void test() { + + Def.someMethod(); + (new Def()).member().chained(); + + } + +} + diff --git a/java/ql/integration-tests/all-platforms/java/buildless-erroneous/diagnostics.expected b/java/ql/integration-tests/all-platforms/java/buildless-erroneous/diagnostics.expected new file mode 100644 index 00000000000..03978511bb7 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-erroneous/diagnostics.expected @@ -0,0 +1,56 @@ +{ + "markdownMessage": "Because no usable build tool (Gradle, Maven, etc) was found, build scripts could not be queried for guidance about the appropriate JDK version for the code being extracted, or precise dependency information. The default JDK will be used, and external dependencies will be inferred from the Java package names used.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/no-build-tool-advice", + "name": "Java buildless mode found no usable build tool" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java buildless extraction has completed.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/complete", + "name": "Java buildless extraction completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java buildless mode used the system default JDK.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/jdk-system-default", + "name": "Java buildless mode used the system default JDK" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java was extracted in buildless mode. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", + "severity": "note", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/mode-active", + "name": "Java was extracted in buildless mode" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} diff --git a/java/ql/integration-tests/all-platforms/java/buildless-erroneous/test.py b/java/ql/integration-tests/all-platforms/java/buildless-erroneous/test.py new file mode 100644 index 00000000000..747dd6a82ad --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/buildless-erroneous/test.py @@ -0,0 +1,8 @@ +import sys + +from create_database_utils import * +from diagnostics_test_utils import * + +run_codeql_database_create([], lang="java", extra_env={"CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true"}) + +check_diagnostics() diff --git a/java/ql/integration-tests/all-platforms/java/buildless-gradle/diagnostics.expected b/java/ql/integration-tests/all-platforms/java/buildless-gradle/diagnostics.expected index 7f297a41139..5d8a00c5578 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-gradle/diagnostics.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-gradle/diagnostics.expected @@ -1,3 +1,17 @@ +{ + "markdownMessage": "Java buildless extraction has completed.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/complete", + "name": "Java buildless extraction completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} { "markdownMessage": "Java buildless mode used build tool Gradle to pick a JDK version and/or to recommend external dependencies.", "severity": "unknown", diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/diagnostics.expected b/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/diagnostics.expected index dcc7c1377b6..77e259ae537 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/diagnostics.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven-multimodule/diagnostics.expected @@ -1,3 +1,17 @@ +{ + "markdownMessage": "Java buildless extraction has completed.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/complete", + "name": "Java buildless extraction completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} { "markdownMessage": "Java buildless mode used build tool Maven to pick a JDK version and/or to recommend external dependencies.", "severity": "unknown", diff --git a/java/ql/integration-tests/all-platforms/java/buildless-maven/diagnostics.expected b/java/ql/integration-tests/all-platforms/java/buildless-maven/diagnostics.expected index d99f38541ca..0228a1165a9 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-maven/diagnostics.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-maven/diagnostics.expected @@ -1,3 +1,17 @@ +{ + "markdownMessage": "Java buildless extraction has completed.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/complete", + "name": "Java buildless extraction completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} { "markdownMessage": "Java buildless mode used build tool Maven to pick a JDK version and/or to recommend external dependencies.", "severity": "unknown", diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/diagnostics.expected b/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/diagnostics.expected index b8e399f746a..c150b2135f3 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/diagnostics.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/diagnostics.expected @@ -1,3 +1,17 @@ +{ + "markdownMessage": "Java buildless extraction has completed.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/complete", + "name": "Java buildless extraction completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} { "markdownMessage": "Java buildless mode dropped the following dependencies because a sibling project depends on a higher version:\n\n* `junit/junit-4.11`", "severity": "unknown", diff --git a/java/ql/integration-tests/all-platforms/java/buildless/diagnostics.expected b/java/ql/integration-tests/all-platforms/java/buildless/diagnostics.expected index 2118edbe296..03978511bb7 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless/diagnostics.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless/diagnostics.expected @@ -12,6 +12,20 @@ "telemetry": true } } +{ + "markdownMessage": "Java buildless extraction has completed.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/complete", + "name": "Java buildless extraction completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} { "markdownMessage": "Java buildless mode used the system default JDK.", "severity": "unknown", diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/ExtractorInformation.expected b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/ExtractorInformation.expected new file mode 100644 index 00000000000..6d33b902935 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/ExtractorInformation.expected @@ -0,0 +1,18 @@ +| Annotation processors enabled: true | 1 | +| Number of calls with call target | 1 | +| Number of calls with missing call target | 0 | +| Number of expressions with known type | 1 | +| Number of expressions with unknown type | 0 | +| Number of files | 543 | +| Number of files with extension class | 538 | +| Number of files with extension jar | 1 | +| Number of files with extension java | 2 | +| Number of files with extension properties | 1 | +| Number of lines of code | 7 | +| Number of lines of code with extension java | 7 | +| Percentage of calls with call target | 100 | +| Percentage of expressions with known type | 100 | +| Total number of lines | 12 | +| Total number of lines with extension java | 12 | +| Used annotation processor: lombok.launch.AnnotationProcessorHider$AnnotationProcessor | 1 | +| Used annotation processor: lombok.launch.AnnotationProcessorHider$ClaimingProcessor | 1 | diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/ExtractorInformation.qlref b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/ExtractorInformation.qlref new file mode 100644 index 00000000000..ff57e78a9d7 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/ExtractorInformation.qlref @@ -0,0 +1 @@ +Telemetry/ExtractorInformation.ql \ No newline at end of file diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod1/mod1pkg/Mod1Class.java b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod1/mod1pkg/Mod1Class.java new file mode 100644 index 00000000000..3b9bc9e0b0c --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod1/mod1pkg/Mod1Class.java @@ -0,0 +1,3 @@ +package mod1pkg; + +public class Mod1Class { } diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod1/module-info.java b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod1/module-info.java new file mode 100644 index 00000000000..cde20aaf6c7 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod1/module-info.java @@ -0,0 +1,5 @@ +module moduleone { + + exports mod1pkg; + +} diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod2/mod2pkg/User.java b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod2/mod2pkg/User.java new file mode 100644 index 00000000000..c21bb391335 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod2/mod2pkg/User.java @@ -0,0 +1,7 @@ +import mod1pkg.Mod1Class; + +public class User { + + private Mod1Class m1c; + +} diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod2/module-info.java b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod2/module-info.java new file mode 100644 index 00000000000..94f93fdfdf3 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/mod2/module-info.java @@ -0,0 +1,5 @@ +module moduletwo { + + requires moduleone; + +} diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/test.py b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/test.py new file mode 100644 index 00000000000..c4726143c50 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java11/test.py @@ -0,0 +1,15 @@ +import sys + +from create_database_utils import * +import subprocess +import os + +try_use_java11() + +os.mkdir("mod1obj") +os.mkdir("mod2obj") + +subprocess.check_call(["javac", "mod1/module-info.java", "mod1/mod1pkg/Mod1Class.java", "-d", "mod1obj"]) +subprocess.check_call(["jar", "-c", "-f", "mod1.jar", "-C", "mod1obj", "mod1pkg/Mod1Class.class", "--release", "9", "-C", "mod1obj", "module-info.class"]) + +run_codeql_database_create(["javac mod2/mod2pkg/User.java mod2/module-info.java -d mod2obj -p mod1.jar"], lang="java") diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/ExtractorInformation.expected b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/ExtractorInformation.expected new file mode 100644 index 00000000000..d6bdf6dd7b5 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/ExtractorInformation.expected @@ -0,0 +1,18 @@ +| Annotation processors enabled: true | 1 | +| Number of calls with call target | 1 | +| Number of calls with missing call target | 0 | +| Number of expressions with known type | 1 | +| Number of expressions with unknown type | 0 | +| Number of files | 610 | +| Number of files with extension class | 605 | +| Number of files with extension jar | 1 | +| Number of files with extension java | 2 | +| Number of files with extension properties | 1 | +| Number of lines of code | 7 | +| Number of lines of code with extension java | 7 | +| Percentage of calls with call target | 100 | +| Percentage of expressions with known type | 100 | +| Total number of lines | 12 | +| Total number of lines with extension java | 12 | +| Used annotation processor: lombok.launch.AnnotationProcessorHider$AnnotationProcessor | 1 | +| Used annotation processor: lombok.launch.AnnotationProcessorHider$ClaimingProcessor | 1 | diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/ExtractorInformation.qlref b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/ExtractorInformation.qlref new file mode 100644 index 00000000000..ff57e78a9d7 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/ExtractorInformation.qlref @@ -0,0 +1 @@ +Telemetry/ExtractorInformation.ql \ No newline at end of file diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod1/mod1pkg/Mod1Class.java b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod1/mod1pkg/Mod1Class.java new file mode 100644 index 00000000000..3b9bc9e0b0c --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod1/mod1pkg/Mod1Class.java @@ -0,0 +1,3 @@ +package mod1pkg; + +public class Mod1Class { } diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod1/module-info.java b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod1/module-info.java new file mode 100644 index 00000000000..cde20aaf6c7 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod1/module-info.java @@ -0,0 +1,5 @@ +module moduleone { + + exports mod1pkg; + +} diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod2/mod2pkg/User.java b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod2/mod2pkg/User.java new file mode 100644 index 00000000000..c21bb391335 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod2/mod2pkg/User.java @@ -0,0 +1,7 @@ +import mod1pkg.Mod1Class; + +public class User { + + private Mod1Class m1c; + +} diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod2/module-info.java b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod2/module-info.java new file mode 100644 index 00000000000..94f93fdfdf3 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/mod2/module-info.java @@ -0,0 +1,5 @@ +module moduletwo { + + requires moduleone; + +} diff --git a/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/test.py b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/test.py new file mode 100644 index 00000000000..c912a0cb27a --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/multi-release-jar-java17/test.py @@ -0,0 +1,13 @@ +import sys + +from create_database_utils import * +import subprocess +import os + +os.mkdir("mod1obj") +os.mkdir("mod2obj") + +subprocess.check_call(["javac", "mod1/module-info.java", "mod1/mod1pkg/Mod1Class.java", "-d", "mod1obj"]) +subprocess.check_call(["jar", "-c", "-f", "mod1.jar", "-C", "mod1obj", "mod1pkg/Mod1Class.class", "--release", "9", "-C", "mod1obj", "module-info.class"]) + +run_codeql_database_create(["javac mod2/mod2pkg/User.java mod2/module-info.java -d mod2obj -p mod1.jar"], lang="java") diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/.gitattributes b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/.gitattributes new file mode 100644 index 00000000000..00a51aff5e5 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/.gitattributes @@ -0,0 +1,6 @@ +# +# https://help.github.com/articles/dealing-with-line-endings/ +# +# These are explicitly windows files and should use crlf +*.bat text eol=crlf + diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/.gitignore b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/.gitignore new file mode 100644 index 00000000000..1b6985c0094 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/.gitignore @@ -0,0 +1,5 @@ +# Ignore Gradle project-specific cache directory +.gradle + +# Ignore Gradle build output directory +build diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/build.gradle b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/build.gradle new file mode 100644 index 00000000000..071a12b7691 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/build.gradle @@ -0,0 +1,30 @@ +/* + * This build file was auto generated by running the Gradle 'init' task + * by 'arthur' at '28/11/20 22:29' with Gradle 3.0 + * + * This generated file contains a sample Java project to get you started. + * For more details take a look at the Java Quickstart chapter in the Gradle + * user guide available at https://docs.gradle.org/3.0/userguide/tutorial_java_projects.html + */ + +// Apply the java plugin to add support for Java +apply plugin: 'java' + +// In this section you declare where to find the dependencies of your project +repositories { + // Use 'jcenter' for resolving your dependencies. + // You can declare any Maven/Ivy/file repository here. + jcenter() +} + +// In this section you declare the dependencies for your production and test code +dependencies { + // The production code uses the SLF4J logging API at compile time + compile 'org.slf4j:slf4j-api:1.7.21' + + // Declare the dependency for your favourite test framework you want to use in your tests. + // TestNG is also supported by the Gradle Test task. Just change the + // testCompile dependency to testCompile 'org.testng:testng:6.8.1' and add + // 'test.useTestNG()' to your build script. + testCompile 'junit:junit:4.12' +} diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/force_sequential_test_execution b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/force_sequential_test_execution new file mode 100644 index 00000000000..b0e2500b259 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/force_sequential_test_execution @@ -0,0 +1,3 @@ +# We currently have a bug where gradle tests become flaky when executed in parallel +# - sometimes, gradle fails to connect to the gradle daemon. +# Therefore, force this test to run sequentially. diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradle/verification-metadata.xml b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradle/verification-metadata.xml new file mode 100644 index 00000000000..14a69b8178b --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradle/verification-metadata.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<verification-metadata> + <configuration> + <verify-metadata>true</verify-metadata> + <verify-signatures>false</verify-signatures> + </configuration> +</verification-metadata> \ No newline at end of file diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradle/wrapper/gradle-wrapper.properties b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000000..12d38de6a48 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradlew b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradlew new file mode 100755 index 00000000000..4f906e0c811 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradlew.bat b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradlew.bat new file mode 100644 index 00000000000..107acd32c4e --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/settings.gradle b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/settings.gradle new file mode 100644 index 00000000000..233410459f6 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/settings.gradle @@ -0,0 +1,19 @@ +/* + * This settings file was auto generated by the Gradle buildInit task + * by 'arthur' at '28/11/20 22:29' with Gradle 3.0 + * + * The settings file is used to specify which projects to include in your build. + * In a single project build this file can be empty or even removed. + * + * Detailed information about configuring a multi-project build in Gradle can be found + * in the user guide at https://docs.gradle.org/3.0/userguide/multi_project_builds.html + */ + +/* +// To declare projects as part of a multi-project build use the 'include' method +include 'shared' +include 'api' +include 'services:webservice' +*/ + +rootProject.name = 'gradle-sample' diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/src/main/java/com/example/App.java b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/src/main/java/com/example/App.java new file mode 100644 index 00000000000..1c13f7d885e --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/src/main/java/com/example/App.java @@ -0,0 +1,14 @@ +/* + * This Java source file was generated by the Gradle 'init' task. + */ +package com.example; + +public class App { + public String getGreeting() { + return "Hello world."; + } + + public static void main(String[] args) { + System.out.println(new App().getGreeting()); + } +} diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/src/test/java/com/example/AppTest.java new file mode 100644 index 00000000000..813bc5e1a2a --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/src/test/java/com/example/AppTest.java @@ -0,0 +1,14 @@ +/* + * This Java source file was generated by the Gradle 'init' task. + */ +package com.example; + +import org.junit.Test; +import static org.junit.Assert.*; + +public class AppTest { + @Test public void testAppHasAGreeting() { + App classUnderTest = new App(); + assertNotNull("app should have a greeting", classUnderTest.getGreeting()); + } +} diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.expected b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.expected new file mode 100644 index 00000000000..82f7ee275a1 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.expected @@ -0,0 +1,5 @@ +xmlFiles +| gradle/verification-metadata.xml:0:0:0:0 | gradle/verification-metadata.xml | +#select +| src/main/java/com/example/App.java:0:0:0:0 | App | +| src/test/java/com/example/AppTest.java:0:0:0:0 | AppTest | diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.py b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.py new file mode 100644 index 00000000000..846a89e8703 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.py @@ -0,0 +1,31 @@ +import sys + +from create_database_utils import * +import shutil +import os.path +import tempfile +import platform + +#The version of gradle used doesn't work on java 17 +try_use_java11() + +gradle_override_dir = tempfile.mkdtemp() +if platform.system() == "Windows": + with open(os.path.join(gradle_override_dir, "gradle.bat"), "w") as f: + f.write("@echo off\nexit /b 2\n") +else: + gradlepath = os.path.join(gradle_override_dir, "gradle") + with open(gradlepath, "w") as f: + f.write("#!/bin/bash\nexit 1\n") + os.chmod(gradlepath, 0o0755) + +oldpath = os.getenv("PATH") +os.environ["PATH"] = gradle_override_dir + os.pathsep + oldpath + +try: + run_codeql_database_create([], lang="java") +finally: + try: + shutil.rmtree(gradle_override_dir) + except Exception as e: + pass diff --git a/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.ql b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.ql new file mode 100644 index 00000000000..c11b8fba707 --- /dev/null +++ b/java/ql/integration-tests/all-platforms/java/partial-gradle-sample-without-gradle/test.ql @@ -0,0 +1,7 @@ +import java + +from File f +where f.isSourceFile() +select f + +query predicate xmlFiles(XmlFile x) { any() } diff --git a/java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin1/ExtractorInformation.expected b/java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin1/ExtractorInformation.expected index b7d6dd6e972..5e32cd7786e 100644 --- a/java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin1/ExtractorInformation.expected +++ b/java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin1/ExtractorInformation.expected @@ -1,7 +1,12 @@ +| Number of calls with call target | 1 | +| Number of calls with missing call target | 0 | +| Number of expressions with known type | 0 | +| Number of expressions with unknown type | 0 | | Number of files with extension jar | 1 | | Number of files with extension kt | 1 | | Number of lines of code | 2 | | Number of lines of code with extension kt | 2 | +| Percentage of calls with call target | 100 | | Total number of lines | 3 | | Total number of lines with extension kt | 3 | | Uses Kotlin 2: false | 1 | diff --git a/java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin2/ExtractorInformation.expected b/java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin2/ExtractorInformation.expected index b743aae2faf..d00ef5f0ec6 100644 --- a/java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin2/ExtractorInformation.expected +++ b/java/ql/integration-tests/all-platforms/kotlin/extractor_information_kotlin2/ExtractorInformation.expected @@ -1,7 +1,12 @@ +| Number of calls with call target | 1 | +| Number of calls with missing call target | 0 | +| Number of expressions with known type | 0 | +| Number of expressions with unknown type | 0 | | Number of files with extension jar | 1 | | Number of files with extension kt | 1 | | Number of lines of code | 2 | | Number of lines of code with extension kt | 2 | +| Percentage of calls with call target | 100 | | Total number of lines | 3 | | Total number of lines with extension kt | 3 | | Uses Kotlin 2: true | 1 | diff --git a/java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md b/java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md new file mode 100644 index 00000000000..eb560fba07d --- /dev/null +++ b/java/ql/lib/change-notes/2024-02-23-widget-flowsteps.md @@ -0,0 +1,4 @@ +--- +category: fix +--- +* Some flow steps related to `android.text.Editable.toString` that were accidentally disabled have been re-enabled. diff --git a/java/ql/lib/change-notes/2024-02-27-error-types.md b/java/ql/lib/change-notes/2024-02-27-error-types.md new file mode 100644 index 00000000000..cdc6d7620aa --- /dev/null +++ b/java/ql/lib/change-notes/2024-02-27-error-types.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Java expressions with erroneous types (e.g. the result of a call whose callee couldn't be resolved during extraction) are now given a CodeQL `ErrorType` more often. diff --git a/java/ql/lib/change-notes/2024-03-11-add-parcelfiledescriptor-open-model.md b/java/ql/lib/change-notes/2024-03-11-add-parcelfiledescriptor-open-model.md new file mode 100644 index 00000000000..31f76712828 --- /dev/null +++ b/java/ql/lib/change-notes/2024-03-11-add-parcelfiledescriptor-open-model.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added a `path-injection` sink for the `open` methods of the `android.os.ParcelFileDescriptor` class. diff --git a/java/ql/lib/ext/android.os.model.yml b/java/ql/lib/ext/android.os.model.yml index fc4822dd59f..80271eac954 100644 --- a/java/ql/lib/ext/android.os.model.yml +++ b/java/ql/lib/ext/android.os.model.yml @@ -132,3 +132,8 @@ extensions: - ["android.os", "Parcel", False, "readTypedList", "", "", "Argument[this]", "Argument[0]", "taint", "manual"] - ["android.os", "Parcel", False, "readTypedObject", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["android.os", "Parcel", False, "readValue", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["android.os", "ParcelFileDescriptor", False, "open", "", "", "Argument[0]", "path-injection", "manual"] \ No newline at end of file diff --git a/java/ql/lib/ext/hudson.model.yml b/java/ql/lib/ext/hudson.model.yml index 791e63daaec..f83a2bae6b3 100644 --- a/java/ql/lib/ext/hudson.model.yml +++ b/java/ql/lib/ext/hudson.model.yml @@ -11,7 +11,7 @@ extensions: - ["hudson", "FilePath", True, "copyFrom", "(FileItem)", "", "Argument[0]", "path-injection", "ai-manual"] - ["hudson", "FilePath", True, "copyRecursiveTo", "", "", "Argument[this]", "path-injection", "ai-manual"] - ["hudson", "FilePath", True, "copyRecursiveTo", "(DirScanner,FilePath,String,FilePath$TarCompression)", "", "Argument[1]", "path-injection", "ai-manual"] - - ["hudson", "FilePath", True, "copyRecursiveTo", "(DirScanner,FilePath,String)", "", "Argument[1]", "file-content-store", "ai-manual"] + - ["hudson", "FilePath", True, "copyRecursiveTo", "(DirScanner,FilePath,String)", "", "Argument[1]", "path-injection", "ai-manual"] - ["hudson", "FilePath", True, "copyRecursiveTo", "(String,FilePath)", "", "Argument[1]", "path-injection", "ai-manual"] - ["hudson", "FilePath", True, "copyRecursiveTo", "(String,String,FilePath)", "", "Argument[0]", "path-injection", "ai-manual"] - ["hudson", "FilePath", True, "copyRecursiveTo", "(String,String,FilePath)", "", "Argument[2]", "path-injection", "ai-manual"] diff --git a/java/ql/lib/ext/java.beans.model.yml b/java/ql/lib/ext/java.beans.model.yml index b9d06ea5694..30667ec6961 100644 --- a/java/ql/lib/ext/java.beans.model.yml +++ b/java/ql/lib/ext/java.beans.model.yml @@ -4,3 +4,12 @@ extensions: extensible: summaryModel data: - ["java.beans", "XMLDecoder", False, "XMLDecoder", "", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + # summary neutrals + - ["java.beans", "PropertyEditor", "getAsText", "()", "summary", "df-manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs + - ["java.beans", "PropertyEditor", "getValue", "()", "summary", "df-manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs + - ["java.beans", "PropertyEditor", "setAsText", "()", "summary", "df-manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs + - ["java.beans", "PropertyEditor", "setValue", "()", "summary", "df-manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs diff --git a/java/ql/lib/ext/java.io.model.yml b/java/ql/lib/ext/java.io.model.yml index ef0f4dbb0a6..3824c588662 100644 --- a/java/ql/lib/ext/java.io.model.yml +++ b/java/ql/lib/ext/java.io.model.yml @@ -80,7 +80,6 @@ extensions: - ["java.io", "File", True, "getName", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.io", "File", True, "getParentFile", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.io", "File", True, "getPath", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - - ["java.io", "File", True, "listFiles", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.io", "File", True, "toPath", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.io", "File", True, "toString", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.io", "File", True, "toURI", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] @@ -116,9 +115,12 @@ extensions: - ["java.io", "File", "isFile", "()", "summary", "manual"] - ["java.io", "File", "length", "()", "summary", "manual"] - ["java.io", "File", "isDirectory", "()", "summary", "manual"] + - ["java.io", "File", "listFiles", "", "summary", "df-manual"] - ["java.io", "File", "mkdirs", "()", "summary", "manual"] - ["java.io", "FileInputStream", "FileInputStream", "(File)", "summary", "manual"] + - ["java.io", "FileInputStream", "FileInputStream", "(String)", "summary", "df-manual"] - ["java.io", "InputStream", "close", "()", "summary", "manual"] + - ["java.io", "ObjectInput", "readObject", "()", "summary", "df-manual"] # this is a deserialization sink modeled in regular CodeQL - ["java.io", "OutputStream", "flush", "()", "summary", "manual"] # The below APIs have numeric flow and are currently being stored as neutral models. # These may be changed to summary models with kinds "value-numeric" and "taint-numeric" (or similar) in the future. diff --git a/java/ql/lib/ext/java.lang.model.yml b/java/ql/lib/ext/java.lang.model.yml index 183ed225303..9012f7c981f 100644 --- a/java/ql/lib/ext/java.lang.model.yml +++ b/java/ql/lib/ext/java.lang.model.yml @@ -82,8 +82,8 @@ extensions: - ["java.lang", "Exception", False, "Exception", "(String)", "", "Argument[0]", "Argument[this].SyntheticField[java.lang.Throwable.message]", "value", "manual"] - ["java.lang", "Exception", False, "Exception", "(String,Throwable)", "", "Argument[0]", "Argument[this].SyntheticField[java.lang.Throwable.message]", "value", "manual"] - ["java.lang", "Exception", False, "Exception", "(String,Throwable)", "", "Argument[1]", "Argument[this].SyntheticField[java.lang.Throwable.cause]", "value", "manual"] - - ["java.lang", "Exception", False, "Exception", "(Throwable)", "", "Argument[0]", "Argument[this].SyntheticField[java.lang.Throwable.cause]", "value", "manual"] - - ["java.lang", "Exception", False, "Exception", "(Throwable)", "", "Argument[0].SyntheticField[java.lang.Throwable.message]", "Argument[this].SyntheticField[java.lang.Throwable.message]", "taint", "manual"] + - ["java.lang", "Exception", False, "Exception", "(Throwable)", "", "Argument[0]", "Argument[this].SyntheticField[java.lang.Throwable.cause]", "value", "df-manual"] + - ["java.lang", "Exception", False, "Exception", "(Throwable)", "", "Argument[0].SyntheticField[java.lang.Throwable.message]", "Argument[this].SyntheticField[java.lang.Throwable.message]", "taint", "df-manual"] - ["java.lang", "IllegalArgumentException", False, "IllegalArgumentException", "(String)", "", "Argument[0]", "Argument[this].SyntheticField[java.lang.Throwable.message]", "value", "manual"] - ["java.lang", "IllegalStateException", False, "IllegalStateException", "(String)", "", "Argument[0]", "Argument[this].SyntheticField[java.lang.Throwable.message]", "value", "manual"] - ["java.lang", "IndexOutOfBoundsException", False, "IndexOutOfBoundsException", "(String)", "", "Argument[0]", "Argument[this].SyntheticField[java.lang.Throwable.message]", "value", "manual"] @@ -148,16 +148,16 @@ extensions: - ["java.lang", "ThreadLocal", True, "set", "(Object)", "", "Argument[0]", "Argument[this].SyntheticField[java.lang.ThreadLocal.value]", "value", "manual"] - ["java.lang", "ThreadLocal", False, "withInitial", "(Supplier)", "", "Argument[0].ReturnValue", "ReturnValue.SyntheticField[java.lang.ThreadLocal.value]", "value", "manual"] - ["java.lang", "Throwable", False, "Throwable", "(String)", "", "Argument[0]", "Argument[this].SyntheticField[java.lang.Throwable.message]", "value", "manual"] - - ["java.lang", "Throwable", False, "Throwable", "(String,Throwable)", "", "Argument[0]", "Argument[this].SyntheticField[java.lang.Throwable.message]", "value", "manual"] - - ["java.lang", "Throwable", False, "Throwable", "(String,Throwable)", "", "Argument[1]", "Argument[this].SyntheticField[java.lang.Throwable.cause]", "value", "manual"] + - ["java.lang", "Throwable", False, "Throwable", "(String,Throwable)", "", "Argument[0]", "Argument[this].SyntheticField[java.lang.Throwable.message]", "value", "df-manual"] + - ["java.lang", "Throwable", False, "Throwable", "(String,Throwable)", "", "Argument[1]", "Argument[this].SyntheticField[java.lang.Throwable.cause]", "value", "df-manual"] - ["java.lang", "Throwable", False, "Throwable", "(Throwable)", "", "Argument[0]", "Argument[this].SyntheticField[java.lang.Throwable.cause]", "value", "manual"] - - ["java.lang", "Throwable", False, "Throwable", "(Throwable)", "", "Argument[0].SyntheticField[java.lang.Throwable.message]", "Argument[this].SyntheticField[java.lang.Throwable.message]", "taint", "manual"] + - ["java.lang", "Throwable", False, "Throwable", "(Throwable)", "", "Argument[0].SyntheticField[java.lang.Throwable.message]", "Argument[this].SyntheticField[java.lang.Throwable.message]", "taint", "df-manual"] - ["java.lang", "Throwable", True, "getCause", "()", "", "Argument[this].SyntheticField[java.lang.Throwable.cause]", "ReturnValue", "value", "manual"] - ["java.lang", "Throwable", True, "getMessage", "()", "", "Argument[this].SyntheticField[java.lang.Throwable.message]", "ReturnValue", "value", "manual"] - ["java.lang", "Throwable", True, "getLocalizedMessage", "()", "", "Argument[this].SyntheticField[java.lang.Throwable.message]", "ReturnValue", "value", "manual"] - - ["java.lang", "Throwable", True, "initCause", "(Throwable)", "", "Argument[0]", "Argument[this].SyntheticField[java.lang.Throwable.cause]", "value", "manual"] - - ["java.lang", "Throwable", True, "initCause", "(Throwable)", "", "Argument[0]", "ReturnValue.SyntheticField[java.lang.Throwable.cause]", "value", "manual"] - - ["java.lang", "Throwable", True, "initCause", "(Throwable)", "", "Argument[this]", "ReturnValue", "value", "manual"] + - ["java.lang", "Throwable", True, "initCause", "(Throwable)", "", "Argument[0]", "Argument[this].SyntheticField[java.lang.Throwable.cause]", "value", "df-manual"] + - ["java.lang", "Throwable", True, "initCause", "(Throwable)", "", "Argument[0]", "ReturnValue.SyntheticField[java.lang.Throwable.cause]", "value", "df-manual"] + - ["java.lang", "Throwable", True, "initCause", "(Throwable)", "", "Argument[this]", "ReturnValue", "value", "df-manual"] - ["java.lang", "Throwable", True, "toString", "()", "", "Argument[this].SyntheticField[java.lang.Throwable.message]", "ReturnValue", "taint", "manual"] - ["java.lang", "UnsupportedOperationException", False, "UnsupportedOperationException", "(String)", "", "Argument[0]", "Argument[this].SyntheticField[java.lang.Throwable.message]", "value", "manual"] - addsTo: @@ -218,9 +218,11 @@ extensions: - ["java.lang", "System", "currentTimeMillis", "()", "summary", "manual"] - ["java.lang", "System", "exit", "(int)", "summary", "manual"] - ["java.lang", "System", "getenv", "(String)", "summary", "manual"] + - ["java.lang", "System", "getProperty", "", "summary", "manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs - ["java.lang", "System", "identityHashCode", "(Object)", "summary", "manual"] - ["java.lang", "System", "lineSeparator", "()", "summary", "manual"] - ["java.lang", "System", "nanoTime", "()", "summary", "manual"] + - ["java.lang", "System", "setProperty", "", "summary", "manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs - ["java.lang", "Thread", "currentThread", "()", "summary", "manual"] - ["java.lang", "Thread", "getContextClassLoader", "()", "summary", "manual"] - ["java.lang", "Thread", "interrupt", "()", "summary", "manual"] diff --git a/java/ql/lib/ext/java.net.model.yml b/java/ql/lib/ext/java.net.model.yml index afdf3320b08..19044ec7a40 100644 --- a/java/ql/lib/ext/java.net.model.yml +++ b/java/ql/lib/ext/java.net.model.yml @@ -61,3 +61,10 @@ extensions: - ["java.net", "URL", False, "toURI", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.net", "URL", False, "toString", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.net", "URLDecoder", False, "decode", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + # summary neutrals + - ["java.net", "Socket", "getOutputStream", "()", "summary", "df-manual"] + - ["java.net", "Socket", "connect", "(SocketAddress,int)", "summary", "df-manual"] diff --git a/java/ql/lib/ext/java.nio.file.model.yml b/java/ql/lib/ext/java.nio.file.model.yml index 39a83291fc0..fc0648c85aa 100644 --- a/java/ql/lib/ext/java.nio.file.model.yml +++ b/java/ql/lib/ext/java.nio.file.model.yml @@ -91,6 +91,7 @@ extensions: data: # summary neutrals - ["java.nio.file", "Files", "exists", "(Path,LinkOption[])", "summary", "manual"] + - ["java.nio.file", "Files", "newInputStream", "(Path,LinkOption[])", "summary", "df-manual"] # sink neutrals - ["java.nio.file", "Files", "getLastModifiedTime", "", "sink", "hq-manual"] - ["java.nio.file", "Files", "getOwner", "", "sink", "hq-manual"] diff --git a/java/ql/lib/ext/java.security.model.yml b/java/ql/lib/ext/java.security.model.yml index c01f674b2c8..a50c0b1d3fa 100644 --- a/java/ql/lib/ext/java.security.model.yml +++ b/java/ql/lib/ext/java.security.model.yml @@ -15,3 +15,10 @@ extensions: - ["java.security", "KeyStoreSpi", True, "engineSetKeyEntry", "(String,Key,char[],Certificate[])", "", "Argument[2]", "credentials-password", "hq-generated"] - ["java.security", "KeyStoreSpi", True, "engineStore", "(OutputStream,char[])", "", "Argument[1]", "credentials-password", "hq-generated"] - ["java.security", "KeyStoreSpi", True, "engineSetKeyEntry", "(String,byte[],Certificate[])", "", "Argument[1]", "credentials-key", "hq-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.security", "MessageDigest", "digest", "()", "summary", "df-manual"] + - ["java.security", "MessageDigest", "digest", "(byte[])", "summary", "df-manual"] + - ["java.security", "MessageDigest", "digest", "(byte[],int,int)", "summary", "df-manual"] diff --git a/java/ql/lib/ext/java.text.model.yml b/java/ql/lib/ext/java.text.model.yml index 5b315e9986d..16bb2300a98 100644 --- a/java/ql/lib/ext/java.text.model.yml +++ b/java/ql/lib/ext/java.text.model.yml @@ -4,6 +4,9 @@ extensions: extensible: neutralModel data: # summary neutrals + - ["java.text", "Format", "format", "", "summary", "manual"] # similar issue as `Object.toString`; depends on the object being passed as the argument + - ["java.text", "MessageFormat", "format", "", "summary", "manual"] # similar issue as `Object.toString`; depends on the object being passed as the argument + # The below APIs have numeric flow and are currently being stored as neutral models. # These may be changed to summary models with kinds "value-numeric" and "taint-numeric" (or similar) in the future. - ["java.text", "DateFormat", "format", "(Date)", "summary", "manual"] # taint-numeric diff --git a/java/ql/lib/ext/java.util.logging.yml b/java/ql/lib/ext/java.util.logging.yml new file mode 100644 index 00000000000..c4bf4e77300 --- /dev/null +++ b/java/ql/lib/ext/java.util.logging.yml @@ -0,0 +1,8 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + # summary neutrals + - ["java.util.logging", "LogRecord", "getResourceBundle", "()", "summary", "df-manual"] + - ["java.util.logging", "LogRecord", "setParameters", "", "summary", "df-manual"] diff --git a/java/ql/lib/ext/java.util.model.yml b/java/ql/lib/ext/java.util.model.yml index 07eae7c95b4..7ab6780b8f8 100644 --- a/java/ql/lib/ext/java.util.model.yml +++ b/java/ql/lib/ext/java.util.model.yml @@ -107,6 +107,8 @@ extensions: - ["java.util", "Collections", False, "unmodifiableSortedMap", "(SortedMap)", "", "Argument[0].MapKey", "ReturnValue.MapKey", "value", "manual"] - ["java.util", "Collections", False, "unmodifiableSortedMap", "(SortedMap)", "", "Argument[0].MapValue", "ReturnValue.MapValue", "value", "manual"] - ["java.util", "Collections", False, "unmodifiableSortedSet", "(SortedSet)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["java.util", "ConcurrentHashMap", False, "ConcurrentHashMap", "(Map)", "", "Argument[0].MapKey", "Argument[this].MapKey", "value", "df-manual"] + - ["java.util", "ConcurrentHashMap", False, "ConcurrentHashMap", "(Map)", "", "Argument[0].MapValue", "Argument[this].MapValue", "value", "df-manual"] - ["java.util", "Deque", True, "addFirst", "(Object)", "", "Argument[0]", "Argument[this].Element", "value", "manual"] - ["java.util", "Deque", True, "addLast", "(Object)", "", "Argument[0]", "Argument[this].Element", "value", "manual"] - ["java.util", "Deque", True, "descendingIterator", "()", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] @@ -227,6 +229,8 @@ extensions: - ["java.util", "Map", True, "replace", "(Object,Object,Object)", "", "Argument[0]", "Argument[this].MapKey", "value", "manual"] - ["java.util", "Map", True, "replace", "(Object,Object,Object)", "", "Argument[2]", "Argument[this].MapValue", "value", "manual"] - ["java.util", "Map", True, "values", "()", "", "Argument[this].MapValue", "ReturnValue.Element", "value", "manual"] + - ["java.util", "Map$Entry", True, "copyOf", "(Map$Entry)", "", "Argument[0].MapKey", "ReturnValue.MapKey", "value", "df-manual"] + - ["java.util", "Map$Entry", True, "copyOf", "(Map$Entry)", "", "Argument[0].MapValue", "ReturnValue.MapValue", "value", "df-manual"] - ["java.util", "Map$Entry", True, "getKey", "", "", "Argument[this].MapKey", "ReturnValue", "value", "manual"] - ["java.util", "Map$Entry", True, "getValue", "", "", "Argument[this].MapValue", "ReturnValue", "value", "manual"] - ["java.util", "Map$Entry", True, "setValue", "", "", "Argument[this].MapValue", "ReturnValue", "value", "manual"] @@ -415,6 +419,7 @@ extensions: - ["java.util", "ArrayList", "ArrayList", "(int)", "summary", "manual"] - ["java.util", "ArrayList", "isEmpty", "()", "summary", "manual"] - ["java.util", "ArrayList", "size", "()", "summary", "manual"] + - ["java.util", "Arrays", "deepToString", "(Object[])", "summary", "df-manual"] - ["java.util", "Arrays", "toString", "(Object[])", "summary", "manual"] - ["java.util", "Calendar", "getInstance", "()", "summary", "manual"] - ["java.util", "Collection", "contains", "(Object)", "summary", "manual"] @@ -425,6 +430,14 @@ extensions: - ["java.util", "Collections", "emptySet", "()", "summary", "manual"] - ["java.util", "Collections", "sort", "", "summary", "manual"] - ["java.util", "Enumeration", "hasMoreElements", "()", "summary", "manual"] + - ["java.util", "EnumSet", "allOf", "(Class)", "summary", "df-manual"] + - ["java.util", "EnumSet", "clone", "()", "summary", "df-manual"] + - ["java.util", "EnumSet", "complementOf", "(EnumSet)", "summary", "df-manual"] + - ["java.util", "EnumSet", "copyOf", "(Collection)", "summary", "df-manual"] + - ["java.util", "EnumSet", "copyOf", "(EnumSet)", "summary", "df-manual"] + - ["java.util", "EnumSet", "noneOf", "(Class)", "summary", "df-manual"] + - ["java.util", "EnumSet", "of", "", "summary", "df-manual"] + - ["java.util", "EnumSet", "range", "(Object,Object)", "summary", "df-manual"] - ["java.util", "HashMap", "containsKey", "(Object)", "summary", "manual"] - ["java.util", "HashMap", "HashMap", "(int)", "summary", "manual"] - ["java.util", "HashMap", "size", "()", "summary", "manual"] @@ -451,9 +464,12 @@ extensions: - ["java.util", "Optional", "isEmpty", "()", "summary", "manual"] - ["java.util", "Optional", "isPresent", "()", "summary", "manual"] - ["java.util", "Random", "nextInt", "(int)", "summary", "manual"] + - ["java.util", "ResourceBundle", "getBundle", "", "summary", "df-manual"] - ["java.util", "Set", "contains", "(Object)", "summary", "manual"] - ["java.util", "Set", "isEmpty", "()", "summary", "manual"] - ["java.util", "Set", "size", "()", "summary", "manual"] + - ["java.util", "TreeMap", "TreeMap", "(Comparator)", "summary", "df-manual"] + - ["java.util", "TreeSet", "TreeSet", "(Comparator)", "summary", "df-manual"] - ["java.util", "UUID", "equals", "(Object)", "summary", "manual"] - ["java.util", "UUID", "fromString", "(String)", "summary", "manual"] - ["java.util", "UUID", "randomUUID", "()", "summary", "manual"] diff --git a/java/ql/lib/ext/java.util.prefs.model.yml b/java/ql/lib/ext/java.util.prefs.model.yml index a2a7c16bc5d..11289e0782b 100644 --- a/java/ql/lib/ext/java.util.prefs.model.yml +++ b/java/ql/lib/ext/java.util.prefs.model.yml @@ -3,6 +3,21 @@ extensions: pack: codeql/java-all extensible: neutralModel data: + # summary neutrals + - ["java.util.prefs", "Preferences", "get", "(String,String)", "summary", "df-manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs + - ["java.util.prefs", "Preferences", "getBoolean", "(String,boolean)", "summary", "df-manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs + - ["java.util.prefs", "Preferences", "getByteArray", "(String,byte[])", "summary", "df-manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs + - ["java.util.prefs", "Preferences", "getDouble", "(String,double)", "summary", "df-manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs + - ["java.util.prefs", "Preferences", "getFloat", "(String,float)", "summary", "df-manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs + - ["java.util.prefs", "Preferences", "getInt", "(String,int)", "summary", "df-manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs + - ["java.util.prefs", "Preferences", "getLong", "(String,int)", "summary", "df-manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs + - ["java.util.prefs", "Preferences", "put", "(String,String)", "summary", "df-manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs + - ["java.util.prefs", "Preferences", "putBoolean", "(String,boolean)", "summary", "df-manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs + - ["java.util.prefs", "Preferences", "putByteArray", "(String,byte[])", "summary", "df-manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs + - ["java.util.prefs", "Preferences", "putDouble", "(String,double)", "summary", "df-manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs + - ["java.util.prefs", "Preferences", "putFloat", "(String,float)", "summary", "df-manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs + - ["java.util.prefs", "Preferences", "putInt", "(String,int)", "summary", "df-manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs + - ["java.util.prefs", "Preferences", "putLong", "(String,int)", "summary", "df-manual"] # needs to be modeled by regular CodeQL matching the get and set keys to reduce FPs # sink neutrals - ["java.util.prefs", "AbstractPreferences", "nodeExists", "", "sink", "hq-manual"] - ["java.util.prefs", "Preferences", "nodeExists", "", "sink", "hq-manual"] diff --git a/java/ql/lib/ext/java.util.regex.model.yml b/java/ql/lib/ext/java.util.regex.model.yml index 0a71a96b5f9..4f0776e59bd 100644 --- a/java/ql/lib/ext/java.util.regex.model.yml +++ b/java/ql/lib/ext/java.util.regex.model.yml @@ -30,4 +30,9 @@ extensions: pack: codeql/java-all extensible: neutralModel data: + - ["java.util.regex", "Matcher", "appendReplacement", "(StringBuffer,String)", "summary", "df-manual"] + - ["java.util.regex", "Matcher", "appendTail", "(StringBuffer)", "summary", "df-manual"] - ["java.util.regex", "Matcher", "find", "()", "summary", "manual"] + - ["java.util.regex", "Matcher", "pattern", "()", "summary", "df-manual"] + - ["java.util.regex", "Pattern", "compile", "(String,int)", "summary", "df-manual"] + - ["java.util.regex", "Pattern", "pattern", "()", "summary", "df-manual"] diff --git a/java/ql/lib/ext/java.util.stream.model.yml b/java/ql/lib/ext/java.util.stream.model.yml index 52b32a73587..32438ab1956 100644 --- a/java/ql/lib/ext/java.util.stream.model.yml +++ b/java/ql/lib/ext/java.util.stream.model.yml @@ -92,8 +92,11 @@ extensions: pack: codeql/java-all extensible: neutralModel data: + - ["java.util.stream", "Collectors", "joining", "", "summary", "manual"] # cannot be modeled completely without a model for `java.util.stream.Stream#collect(Collector)` as well - ["java.util.stream", "Collectors", "toList", "()", "summary", "manual"] + - ["java.util.stream", "Collectors", "toMap", "", "summary", "manual"] # specialized collectors flow - ["java.util.stream", "Collectors", "toSet", "()", "summary", "manual"] + - ["java.util.stream", "Stream", "collect", "(Collector)", "summary", "manual"] # handled separately on a case-by-case basis as it is too complex for MaD - ["java.util.stream", "Stream", "count", "()", "summary", "manual"] # The below APIs have numeric flow and are currently being stored as neutral models. diff --git a/java/ql/lib/ext/javax.crypto.model.yml b/java/ql/lib/ext/javax.crypto.model.yml index b001017b256..2b3bfc1abe8 100644 --- a/java/ql/lib/ext/javax.crypto.model.yml +++ b/java/ql/lib/ext/javax.crypto.model.yml @@ -7,3 +7,22 @@ extensions: - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameterSpec,SecureRandom)", "", "Argument[2]", "encryption-iv", "manual"] - ["javax.crypto", "Cipher", False, "unwrap", "(byte[],String,int)", "", "Argument[0]", "credentials-key", "hq-generated"] - ["javax.crypto", "CipherSpi", True, "engineUnwrap", "(byte[],String,int)", "", "Argument[0]", "credentials-key", "hq-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.crypto", "Cipher", "doFinal", "", "summary", "df-manual"] + - ["javax.crypto", "Cipher", "getAlgorithm", "", "summary", "df-manual"] + - ["javax.crypto", "Cipher", "getExemptionMechanism", "", "summary", "df-manual"] + - ["javax.crypto", "Cipher", "getInstance", "", "summary", "df-manual"] + - ["javax.crypto", "Cipher", "getIV", "", "summary", "df-manual"] + - ["javax.crypto", "Cipher", "getParameters", "", "summary", "df-manual"] + - ["javax.crypto", "Cipher", "getProvider", "", "summary", "df-manual"] + - ["javax.crypto", "Cipher", "init", "", "summary", "df-manual"] + - ["javax.crypto", "Cipher", "toString", "", "summary", "df-manual"] + - ["javax.crypto", "Cipher", "unwrap", "", "summary", "df-manual"] + - ["javax.crypto", "Cipher", "update", "", "summary", "df-manual"] + - ["javax.crypto", "Cipher", "updateAAD", "", "summary", "df-manual"] + - ["javax.crypto", "Cipher", "wrap", "", "summary", "df-manual"] + - ["javax.crypto", "Mac", "init", "(Key)", "summary", "df-manual"] + - ["javax.crypto", "Mac", "doFinal", "()", "summary", "df-manual"] diff --git a/java/ql/lib/ext/javax.crypto.spec.model.yml b/java/ql/lib/ext/javax.crypto.spec.model.yml index 0f879c1f900..2a88b6275fd 100644 --- a/java/ql/lib/ext/javax.crypto.spec.model.yml +++ b/java/ql/lib/ext/javax.crypto.spec.model.yml @@ -26,3 +26,8 @@ extensions: - ["javax.crypto.spec", "PBEParameterSpec", False, "PBEParameterSpec", "", "", "Argument[0]", "encryption-salt", "manual"] - ["javax.crypto.spec", "SecretKeySpec", False, "SecretKeySpec", "(byte[],String)", "", "Argument[0]", "credentials-key", "hq-generated"] - ["javax.crypto.spec", "SecretKeySpec", False, "SecretKeySpec", "(byte[],int,int,String)", "", "Argument[0]", "credentials-key", "hq-generated"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.crypto.spec", "SecretKeySpec", "SecretKeySpec", "(byte[],String)", "summary", "df-manual"] diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index 74f37a4a451..3442855a91a 100644 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -2065,7 +2065,11 @@ class MethodCall extends Expr, Call, @methodaccess { override Stmt getEnclosingStmt() { result = Expr.super.getEnclosingStmt() } /** Gets a printable representation of this expression. */ - override string toString() { result = this.printAccess() } + override string toString() { + if exists(this.getMethod()) + then result = this.printAccess() + else result = "<Call to unknown method>" + } /** Gets a printable representation of this expression. */ string printAccess() { result = this.getMethod().getName() + "(...)" } @@ -2128,13 +2132,19 @@ class TypeAccess extends Expr, Annotatable, @typeaccess { /** Gets the compilation unit in which this type access occurs. */ override CompilationUnit getCompilationUnit() { result = Expr.super.getCompilationUnit() } - /** Gets a printable representation of this expression. */ - override string toString() { + private string toNormalString() { result = this.getQualifier().toString() + "." + this.getType().toString() or not this.hasQualifier() and result = this.getType().toString() } + /** Gets a printable representation of this expression. */ + override string toString() { + if this.getType() instanceof ErrorType + then result = "<TypeAccess of ErrorType>" + else result = this.toNormalString() + } + override string getAPrimaryQlClass() { result = "TypeAccess" } } diff --git a/java/ql/lib/semmle/code/java/dataflow/DataFlow.qll b/java/ql/lib/semmle/code/java/dataflow/DataFlow.qll index 0f87cb7010c..66a7a847c33 100644 --- a/java/ql/lib/semmle/code/java/dataflow/DataFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/DataFlow.qll @@ -8,6 +8,6 @@ import java module DataFlow { private import semmle.code.java.dataflow.internal.DataFlowImplSpecific private import codeql.dataflow.DataFlow - import DataFlowMake<JavaDataFlow> + import DataFlowMake<Location, JavaDataFlow> import semmle.code.java.dataflow.internal.DataFlowImpl1 } diff --git a/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll b/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll index 2021dcc2bef..773c480b7e7 100644 --- a/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll +++ b/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll @@ -14,6 +14,7 @@ private module Frameworks { private import semmle.code.java.frameworks.android.Intent private import semmle.code.java.frameworks.android.Slice private import semmle.code.java.frameworks.android.SQLite + private import semmle.code.java.frameworks.android.Widget private import semmle.code.java.frameworks.apache.Lang private import semmle.code.java.frameworks.ApacheHttp private import semmle.code.java.frameworks.guava.Guava diff --git a/java/ql/lib/semmle/code/java/dataflow/TaintTracking.qll b/java/ql/lib/semmle/code/java/dataflow/TaintTracking.qll index ad7b88381a8..ed13837a312 100644 --- a/java/ql/lib/semmle/code/java/dataflow/TaintTracking.qll +++ b/java/ql/lib/semmle/code/java/dataflow/TaintTracking.qll @@ -12,6 +12,6 @@ module TaintTracking { private import semmle.code.java.dataflow.internal.DataFlowImplSpecific private import semmle.code.java.dataflow.internal.TaintTrackingImplSpecific private import codeql.dataflow.TaintTracking - import TaintFlowMake<JavaDataFlow, JavaTaintTracking> + import TaintFlowMake<Location, JavaDataFlow, JavaTaintTracking> import semmle.code.java.dataflow.internal.tainttracking1.TaintTrackingImpl } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll index 30746706e31..689e58daab8 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll @@ -1,3 +1,4 @@ private import DataFlowImplSpecific private import codeql.dataflow.internal.DataFlowImpl -import MakeImpl<JavaDataFlow> +private import semmle.code.Location +import MakeImpl<Location, JavaDataFlow> diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl1.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl1.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl1.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl1.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll index 2118572f779..00f388dfdf3 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll @@ -1,3 +1,4 @@ private import DataFlowImplSpecific +private import semmle.code.Location private import codeql.dataflow.internal.DataFlowImplCommon -import MakeImplCommon<JavaDataFlow> +import MakeImplCommon<Location, JavaDataFlow> diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplConsistency.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplConsistency.qll index 1dfa24fffac..0272af417ac 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplConsistency.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplConsistency.qll @@ -8,10 +8,10 @@ private import DataFlowImplSpecific private import TaintTrackingImplSpecific private import codeql.dataflow.internal.DataFlowImplConsistency -private module Input implements InputSig<JavaDataFlow> { +private module Input implements InputSig<Location, JavaDataFlow> { predicate argHasPostUpdateExclude(JavaDataFlow::ArgumentNode n) { n.getType() instanceof ImmutableType or n instanceof Public::ImplicitVarargsArray } } -module Consistency = MakeConsistency<JavaDataFlow, JavaTaintTracking, Input>; +module Consistency = MakeConsistency<Location, JavaDataFlow, JavaTaintTracking, Input>; diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplSpecific.qll index e269b56e3aa..84cdf19ed51 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplSpecific.qll @@ -2,6 +2,7 @@ * Provides Java-specific definitions for use in the data flow library. */ +private import semmle.code.Location private import codeql.dataflow.DataFlow module Private { @@ -13,7 +14,7 @@ module Public { import DataFlowUtil } -module JavaDataFlow implements InputSig { +module JavaDataFlow implements InputSig<Location> { import Private import Public diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll index 8bcbf0635a3..bf867d21d3c 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll @@ -163,7 +163,7 @@ module Public { * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - predicate hasLocationInfo( + deprecated predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll index d5364567d88..0960497dd8c 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll @@ -26,7 +26,7 @@ private string positionToString(int pos) { if pos = -1 then result = "this" else result = pos.toString() } -module Input implements InputSig<DataFlowImplSpecific::JavaDataFlow> { +module Input implements InputSig<Location, DataFlowImplSpecific::JavaDataFlow> { class SummarizedCallableBase = FlowSummary::SummarizedCallableBase; ArgumentPosition callbackSelfParameterPosition() { result = -1 } @@ -85,7 +85,7 @@ module Input implements InputSig<DataFlowImplSpecific::JavaDataFlow> { } } -private import Make<DataFlowImplSpecific::JavaDataFlow, Input> as Impl +private import Make<Location, DataFlowImplSpecific::JavaDataFlow, Input> as Impl private module TypesInput implements Impl::Private::TypesInputSig { DataFlowType getSyntheticGlobalType(Impl::Private::SyntheticGlobal sg) { @@ -186,7 +186,7 @@ private predicate correspondingKotlinParameterDefaultsArgSpec( } module SourceSinkInterpretationInput implements - Impl::Private::External::SourceSinkInterpretationInputSig<Location> + Impl::Private::External::SourceSinkInterpretationInputSig { private import java as J @@ -294,7 +294,7 @@ module Private { module External { import Impl::Private::External - import Impl::Private::External::SourceSinkInterpretation<Location, SourceSinkInterpretationInput> + import Impl::Private::External::SourceSinkInterpretation<SourceSinkInterpretationInput> /** * Holds if an external flow summary exists for `c` with input specification diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/ModelExclusions.qll b/java/ql/lib/semmle/code/java/dataflow/internal/ModelExclusions.qll index b8c86badd4f..12569b4f6c2 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/ModelExclusions.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/ModelExclusions.qll @@ -59,11 +59,27 @@ private predicate isInternal(CompilationUnit cu) { cu.getPackage().getName().matches("%internal%") } +/** A method relating to lambda flow. */ +private class LambdaFlowMethod extends Method { + LambdaFlowMethod() { + this.hasQualifiedName("java.lang", "Runnable", "run") or + this.hasQualifiedName("java.util", "Comparator", + ["comparing", "comparingDouble", "comparingInt", "comparingLong"]) or + this.hasQualifiedName("java.util.function", "BiConsumer", "accept") or + this.hasQualifiedName("java.util.function", "BiFunction", "apply") or + this.hasQualifiedName("java.util.function", "Consumer", "accept") or + this.hasQualifiedName("java.util.function", "Function", "apply") or + this.hasQualifiedName("java.util.function", "Supplier", "get") + } +} + /** Holds if the given callable is not worth modeling. */ predicate isUninterestingForModels(Callable c) { isInTestFile(c.getCompilationUnit().getFile()) or isInternal(c.getCompilationUnit()) or c instanceof MainMethod or + c instanceof ToStringMethod or + c instanceof LambdaFlowMethod or c instanceof StaticInitializer or exists(FunctionalExpr funcExpr | c = funcExpr.asMethod()) or c.getDeclaringType() instanceof TestLibrary or diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingImplSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingImplSpecific.qll index ba30b102a20..0f756200abe 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingImplSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingImplSpecific.qll @@ -4,7 +4,8 @@ private import codeql.dataflow.TaintTracking private import DataFlowImplSpecific +private import semmle.code.Location -module JavaTaintTracking implements InputSig<JavaDataFlow> { +module JavaTaintTracking implements InputSig<Location, JavaDataFlow> { import TaintTrackingUtil } diff --git a/java/ql/lib/semmle/code/java/security/RequestForgery.qll b/java/ql/lib/semmle/code/java/security/RequestForgery.qll index 7a72faeb5e4..a4e824c1cfe 100644 --- a/java/ql/lib/semmle/code/java/security/RequestForgery.qll +++ b/java/ql/lib/semmle/code/java/security/RequestForgery.qll @@ -8,6 +8,7 @@ import semmle.code.java.frameworks.JaxWS import semmle.code.java.frameworks.javase.Http import semmle.code.java.dataflow.DataFlow import semmle.code.java.frameworks.Properties +private import semmle.code.java.controlflow.Guards private import semmle.code.java.dataflow.StringPrefixes private import semmle.code.java.dataflow.ExternalFlow private import semmle.code.java.security.Sanitizers @@ -83,3 +84,76 @@ private class HostnameSanitizingPrefix extends InterestingPrefix { private class HostnameSantizer extends RequestForgerySanitizer { HostnameSantizer() { this.asExpr() = any(HostnameSanitizingPrefix hsp).getAnAppendedExpression() } } + +/** + * An argument to a call to a `.contains()` method that is a sanitizer for URL redirects. + * + * Matches any method call where the method is named `contains`. + */ +private predicate isContainsUrlSanitizer(Guard guard, Expr e, boolean branch) { + guard = + any(MethodCall method | + method.getMethod().getName() = "contains" and + e = method.getArgument(0) and + branch = true + ) +} + +/** + * An URL argument to a call to `.contains()` that is a sanitizer for URL redirects. + * + * This `contains` method is usually called on a list, but the sanitizer matches any call to a method + * called `contains`, so other methods with the same name will also be considered sanitizers. + */ +private class ContainsUrlSanitizer extends RequestForgerySanitizer { + ContainsUrlSanitizer() { + this = DataFlow::BarrierGuard<isContainsUrlSanitizer/3>::getABarrierNode() + } +} + +/** + * A check that the URL is relative, and therefore safe for URL redirects. + */ +private predicate isRelativeUrlSanitizer(Guard guard, Expr e, boolean branch) { + guard = + any(MethodCall call | + call.getMethod().hasQualifiedName("java.net", "URI", "isAbsolute") and + e = call.getQualifier() and + branch = false + ) +} + +/** + * A check that the URL is relative, and therefore safe for URL redirects. + */ +private class RelativeUrlSanitizer extends RequestForgerySanitizer { + RelativeUrlSanitizer() { + this = DataFlow::BarrierGuard<isRelativeUrlSanitizer/3>::getABarrierNode() + } +} + +/** + * A comparison on the host of a url, that is a sanitizer for URL redirects. + * E.g. `"example.org".equals(url.getHost())"` + */ +private predicate isHostComparisonSanitizer(Guard guard, Expr e, boolean branch) { + guard = + any(MethodCall equalsCall | + equalsCall.getMethod().getName() = "equals" and + branch = true and + exists(MethodCall hostCall | + hostCall = [equalsCall.getQualifier(), equalsCall.getArgument(0)] and + hostCall.getMethod().hasQualifiedName("java.net", "URI", "getHost") and + e = hostCall.getQualifier() + ) + ) +} + +/** + * A comparison on the `Host` property of a url, that is a sanitizer for URL redirects. + */ +private class HostComparisonSanitizer extends RequestForgerySanitizer { + HostComparisonSanitizer() { + this = DataFlow::BarrierGuard<isHostComparisonSanitizer/3>::getABarrierNode() + } +} diff --git a/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll b/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll index 3126b750aaf..c599756a81c 100644 --- a/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll +++ b/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll @@ -9,7 +9,12 @@ private import semmle.code.java.security.Sanitizers /** A variable that may hold sensitive information, judging by its name. */ class VariableWithSensitiveName extends Variable { - VariableWithSensitiveName() { this.getName().regexpMatch(getCommonSensitiveInfoRegex()) } + VariableWithSensitiveName() { + exists(string name | name = this.getName() | + name.regexpMatch(getCommonSensitiveInfoRegex()) and + not name.regexpMatch("(?i).*null.*") + ) + } } /** A reference to a variable that may hold sensitive information, judging by its name. */ diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index b0a780b7584..5d835351453 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -15,7 +15,7 @@ ### Minor Analysis Improvements * The sanitizer for the path injection queries has been improved to handle more cases where `equals` is used to check an exact path match. -* The query `java/unvalidated-url-redirection` now sanitizes results following the same logic as the query `java/ssrf`. URLs the destination of which cannot be externally controlled will not be reported anymore. +* The query `java/unvalidated-url-redirection` now sanitizes results following the same logic as the query `java/ssrf`. URLs where the destination cannot be controlled externally are no longer reported. ## 0.8.8 diff --git a/java/ql/src/Likely Bugs/Likely Typos/ContradictoryTypeChecks.ql b/java/ql/src/Likely Bugs/Likely Typos/ContradictoryTypeChecks.ql index c61c5a263e8..9608ec93767 100644 --- a/java/ql/src/Likely Bugs/Likely Typos/ContradictoryTypeChecks.ql +++ b/java/ql/src/Likely Bugs/Likely Typos/ContradictoryTypeChecks.ql @@ -40,7 +40,9 @@ predicate contradictoryTypeCheck(Expr e, Variable v, RefType t, RefType sup, Exp requiresInstanceOf(e, ssa.getAUse(), t) and sup = t.getAnAncestor() and instanceOfCheck(cond, ssa.getAUse(), sup) and - cond.(Guard).controls(e.getBasicBlock(), false) + cond.(Guard).controls(e.getBasicBlock(), false) and + not t instanceof ErrorType and + not sup instanceof ErrorType ) } diff --git a/java/ql/src/Security/CWE/CWE-601/UrlRedirect.java b/java/ql/src/Security/CWE/CWE-601/UrlRedirect.java deleted file mode 100644 index dd915d9eca4..00000000000 --- a/java/ql/src/Security/CWE/CWE-601/UrlRedirect.java +++ /dev/null @@ -1,14 +0,0 @@ -public class UrlRedirect extends HttpServlet { - private static final String VALID_REDIRECT = "http://cwe.mitre.org/data/definitions/601.html"; - - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - // BAD: a request parameter is incorporated without validation into a URL redirect - response.sendRedirect(request.getParameter("target")); - - // GOOD: the request parameter is validated against a known fixed string - if (VALID_REDIRECT.equals(request.getParameter("target"))) { - response.sendRedirect(VALID_REDIRECT); - } - } -} diff --git a/java/ql/src/Security/CWE/CWE-601/UrlRedirect.qhelp b/java/ql/src/Security/CWE/CWE-601/UrlRedirect.qhelp index 1fdd2be75ac..4325ccf5430 100644 --- a/java/ql/src/Security/CWE/CWE-601/UrlRedirect.qhelp +++ b/java/ql/src/Security/CWE/CWE-601/UrlRedirect.qhelp @@ -16,21 +16,53 @@ controlled by the attacker.</p> <p>To guard against untrusted URL redirection, it is advisable to avoid putting user input directly into a redirect URL. Instead, maintain a list of authorized redirects on the server; then choose from that list based on the user input provided.</p> - +<p> +If this is not possible, then the user input should be validated in some other way, +for example, by verifying that the target URL is on the same host as the current page. +</p> </recommendation> -<example> -<p>The following example shows an HTTP request parameter being used directly in a URL redirect -without validating the input, which facilitates phishing attacks. -It also shows how to remedy the problem by validating the user input against a known fixed string. + +<example> +<p> +The following example shows an HTTP request parameter being used directly in a URL redirect +without validating the input, which facilitates phishing attacks: </p> -<sample src="UrlRedirect.java" /> +<sample src="examples/UrlRedirect.java"/> + +<p> +One way to remedy the problem is to validate the user input against a known fixed string +before doing the redirection: +</p> + +<sample src="examples/UrlRedirectGood.java"/> + +<p> +Alternatively, we can check that the target URL does not redirect to a different host +by checking that the URL is either relative or on a known good host: +</p> + +<sample src="examples/UrlRedirectGoodDomain.java"/> + +<p> +Note that as written, the above code will allow redirects to URLs on <code>example.com</code>, +which is harmless but perhaps not intended. You can substitute your own domain (if known) for +<code>example.com</code> to prevent this. +</p> </example> + <references> - +<li> +OWASP: +<a href="https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html"> +Unvalidated Redirects and Forwards Cheat Sheet</a>. +</li> +<li> +Microsoft Docs: <a href="https://docs.microsoft.com/en-us/aspnet/mvc/overview/security/preventing-open-redirection-attacks">Preventing Open Redirection Attacks (C#)</a>. +</li> </references> </qhelp> diff --git a/java/ql/src/Security/CWE/CWE-601/examples/UrlRedirect.java b/java/ql/src/Security/CWE/CWE-601/examples/UrlRedirect.java new file mode 100644 index 00000000000..78281dc93c3 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-601/examples/UrlRedirect.java @@ -0,0 +1,6 @@ +public class UrlRedirect extends HttpServlet { + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // BAD: a request parameter is incorporated without validation into a URL redirect + response.sendRedirect(request.getParameter("target")); + } +} \ No newline at end of file diff --git a/java/ql/src/Security/CWE/CWE-601/examples/UrlRedirectGood.java b/java/ql/src/Security/CWE/CWE-601/examples/UrlRedirectGood.java new file mode 100644 index 00000000000..4a44a22a375 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-601/examples/UrlRedirectGood.java @@ -0,0 +1,16 @@ +public class UrlRedirect extends HttpServlet { + private static final List<String> VALID_REDIRECTS = Arrays.asList( + "http://cwe.mitre.org/data/definitions/601.html", + "http://cwe.mitre.org/data/definitions/79.html" + ); + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // GOOD: the request parameter is validated against a known list of strings + String target = request.getParameter("target"); + if (VALID_REDIRECTS.contains(target)) { + response.sendRedirect(target); + } else { + response.sendRedirect("/error.html"); + } + } +} \ No newline at end of file diff --git a/java/ql/src/Security/CWE/CWE-601/examples/UrlRedirectGoodDomain.java b/java/ql/src/Security/CWE/CWE-601/examples/UrlRedirectGoodDomain.java new file mode 100644 index 00000000000..e9010f30816 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-601/examples/UrlRedirectGoodDomain.java @@ -0,0 +1,18 @@ +public class UrlRedirect extends HttpServlet { + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + try { + String urlString = request.getParameter("page"); + URI url = new URI(urlString); + + if (!url.isAbsolute()) { + response.sendRedirect(url.toString()); // GOOD: The redirect is to a relative URL + } + + if ("example.org".equals(url.getHost())) { + response.sendRedirect(url.toString()); // GOOD: The redirect is to a known host + } + } catch (URISyntaxException e) { + // handle exception + } + } +} \ No newline at end of file diff --git a/java/ql/src/Telemetry/ExtractorInformation.ql b/java/ql/src/Telemetry/ExtractorInformation.ql index 24cd705eee7..bb37f4a31d0 100644 --- a/java/ql/src/Telemetry/ExtractorInformation.ql +++ b/java/ql/src/Telemetry/ExtractorInformation.ql @@ -85,6 +85,65 @@ predicate extractorTotalDiagnostics(string key, int value) { ) } +signature module StatsSig { + int getNumberOfOk(); + + int getNumberOfNotOk(); + + string getOkText(); + + string getNotOkText(); +} + +module ReportStats<StatsSig Stats> { + predicate numberOfOk(string key, int value) { + value = Stats::getNumberOfOk() and + key = "Number of " + Stats::getOkText() + } + + predicate numberOfNotOk(string key, int value) { + value = Stats::getNumberOfNotOk() and + key = "Number of " + Stats::getNotOkText() + } + + predicate percentageOfOk(string key, float value) { + value = Stats::getNumberOfOk() * 100.0 / (Stats::getNumberOfOk() + Stats::getNumberOfNotOk()) and + key = "Percentage of " + Stats::getOkText() + } +} + +module CallTargetStats implements StatsSig { + int getNumberOfOk() { result = count(Call c | exists(c.getCallee())) } + + int getNumberOfNotOk() { result = count(Call c | not exists(c.getCallee())) } + + string getOkText() { result = "calls with call target" } + + string getNotOkText() { result = "calls with missing call target" } +} + +private class SourceExpr extends Expr { + SourceExpr() { this.getFile().isSourceFile() } +} + +private predicate hasGoodType(Expr e) { + exists(e.getType()) and not e.getType() instanceof ErrorType +} + +module ExprTypeStats implements StatsSig { + int getNumberOfOk() { result = count(SourceExpr e | hasGoodType(e)) } + + int getNumberOfNotOk() { result = count(SourceExpr e | not hasGoodType(e)) } + + string getOkText() { result = "expressions with known type" } + + string getNotOkText() { result = "expressions with unknown type" } +} + +module CallTargetStatsReport = ReportStats<CallTargetStats>; + +module ExprTypeStatsReport = ReportStats<ExprTypeStats>; + from string key, int value where not exists(string pattern | extractorInformationSkipKey(pattern) and key.matches(pattern)) and @@ -97,6 +156,12 @@ where totalNumberOfLinesByExtension(key, value) or numberOfLinesOfCodeByExtension(key, value) or extractorDiagnostics(key, value) or - extractorTotalDiagnostics(key, value) + extractorTotalDiagnostics(key, value) or + CallTargetStatsReport::numberOfOk(key, value) or + CallTargetStatsReport::numberOfNotOk(key, value) or + CallTargetStatsReport::percentageOfOk(key, any(float x | value = x.floor())) or + ExprTypeStatsReport::numberOfOk(key, value) or + ExprTypeStatsReport::numberOfNotOk(key, value) or + ExprTypeStatsReport::percentageOfOk(key, any(float x | value = x.floor())) ) select key, value diff --git a/java/ql/src/change-notes/2024-03-04-sensitive-log-remove-null-from-sources.md b/java/ql/src/change-notes/2024-03-04-sensitive-log-remove-null-from-sources.md new file mode 100644 index 00000000000..0bb4f18f2bd --- /dev/null +++ b/java/ql/src/change-notes/2024-03-04-sensitive-log-remove-null-from-sources.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* To reduce the number of false positives in the query "Insertion of sensitive information into log files" (`java/sensitive-log`), variables with names that contain "null" (case-insensitively) are no longer considered sources of sensitive information. diff --git a/java/ql/src/change-notes/2024-03-12-request-sanitizers.md b/java/ql/src/change-notes/2024-03-12-request-sanitizers.md new file mode 100644 index 00000000000..08229d6d7d0 --- /dev/null +++ b/java/ql/src/change-notes/2024-03-12-request-sanitizers.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added sanitizers for relative URLs, `List.contains()`, and checking the host of a URI to the `java/ssrf` and `java/unvalidated-url-redirection` queries. \ No newline at end of file diff --git a/java/ql/src/change-notes/released/0.8.9.md b/java/ql/src/change-notes/released/0.8.9.md index d50b8f5e1c5..ca56541b86e 100644 --- a/java/ql/src/change-notes/released/0.8.9.md +++ b/java/ql/src/change-notes/released/0.8.9.md @@ -15,4 +15,4 @@ ### Minor Analysis Improvements * The sanitizer for the path injection queries has been improved to handle more cases where `equals` is used to check an exact path match. -* The query `java/unvalidated-url-redirection` now sanitizes results following the same logic as the query `java/ssrf`. URLs the destination of which cannot be externally controlled will not be reported anymore. +* The query `java/unvalidated-url-redirection` now sanitizes results following the same logic as the query `java/ssrf`. URLs where the destination cannot be controlled externally are no longer reported. diff --git a/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll b/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll index 9c19e5b9cbb..0a22178d108 100644 --- a/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll +++ b/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll @@ -72,11 +72,11 @@ string captureQualifierFlow(TargetApiSpecific api) { result = ModelPrinting::asValueModel(api, qualifierString(), "ReturnValue") } -private int accessPathLimit() { result = 2 } +private int accessPathLimit0() { result = 2 } private newtype TTaintState = - TTaintRead(int n) { n in [0 .. accessPathLimit()] } or - TTaintStore(int n) { n in [1 .. accessPathLimit()] } + TTaintRead(int n) { n in [0 .. accessPathLimit0()] } or + TTaintStore(int n) { n in [1 .. accessPathLimit0()] } abstract private class TaintState extends TTaintState { abstract string toString(); diff --git a/java/ql/test-kotlin1/TestUtilities/InlineFlowTest.qll b/java/ql/test-kotlin1/TestUtilities/InlineFlowTest.qll index d815f302638..500e4783614 100644 --- a/java/ql/test-kotlin1/TestUtilities/InlineFlowTest.qll +++ b/java/ql/test-kotlin1/TestUtilities/InlineFlowTest.qll @@ -10,7 +10,7 @@ private import semmle.code.java.dataflow.internal.DataFlowImplSpecific private import semmle.code.java.dataflow.internal.TaintTrackingImplSpecific private import internal.InlineExpectationsTestImpl -private module FlowTestImpl implements InputSig<JavaDataFlow> { +private module FlowTestImpl implements InputSig<Location, JavaDataFlow> { predicate defaultSource(DataFlow::Node source) { source.asExpr().(MethodCall).getMethod().getName() = ["source", "taint"] } @@ -30,4 +30,4 @@ private module FlowTestImpl implements InputSig<JavaDataFlow> { } } -import InlineFlowTestMake<JavaDataFlow, JavaTaintTracking, Impl, FlowTestImpl> +import InlineFlowTestMake<Location, JavaDataFlow, JavaTaintTracking, Impl, FlowTestImpl> diff --git a/java/ql/test-kotlin1/library-tests/compilation-units/cus.expected b/java/ql/test-kotlin1/library-tests/compilation-units/cus.expected index a5995ccc419..97b688e8795 100644 --- a/java/ql/test-kotlin1/library-tests/compilation-units/cus.expected +++ b/java/ql/test-kotlin1/library-tests/compilation-units/cus.expected @@ -4,6 +4,8 @@ | ArrayList$ArrayListSpliterator | .../ArrayList$ArrayListSpliterator.class:0:0:0:0 | | List | .../List.class:0:0:0:0 | | ListIterator | .../ListIterator.class:0:0:0:0 | +| MemorySessionImpl$ResourceList | .../MemorySessionImpl$ResourceList.class:0:0:0:0 | +| MemorySessionImpl$ResourceList$ResourceCleanup | .../MemorySessionImpl$ResourceList$ResourceCleanup.class:0:0:0:0 | | MutableList | .../MutableList.class:0:0:0:0 | | MutableListIterator | .../MutableListIterator.class:0:0:0:0 | | test | .../test.kt:0:0:0:0 | diff --git a/java/ql/test-kotlin1/library-tests/enum/test.expected b/java/ql/test-kotlin1/library-tests/enum/test.expected index ca8e735fa18..d279ac89963 100644 --- a/java/ql/test-kotlin1/library-tests/enum/test.expected +++ b/java/ql/test-kotlin1/library-tests/enum/test.expected @@ -37,7 +37,6 @@ | kotlin.Enum | Enum | compareTo | | kotlin.Enum | Enum | describeConstable | | kotlin.Enum | Enum | equals | -| kotlin.Enum | Enum | finalize | | kotlin.Enum | Enum | getDeclaringClass | | kotlin.Enum | Enum | hashCode | | kotlin.Enum | Enum | name | diff --git a/java/ql/test-kotlin1/library-tests/java-kotlin-collection-type-generic-methods/test.expected b/java/ql/test-kotlin1/library-tests/java-kotlin-collection-type-generic-methods/test.expected index 4ccb82a3d0d..9ad4eeeadc8 100644 --- a/java/ql/test-kotlin1/library-tests/java-kotlin-collection-type-generic-methods/test.expected +++ b/java/ql/test-kotlin1/library-tests/java-kotlin-collection-type-generic-methods/test.expected @@ -16,6 +16,14 @@ methodWithDuplicate | AbstractCollection<E> | removeAll | Collection<?> | | AbstractCollection<E> | retainAll | Collection<?> | | AbstractCollection<E> | toArray | T[] | +| AbstractCollection<Runnable> | add | Runnable | +| AbstractCollection<Runnable> | addAll | Collection<? extends Runnable> | +| AbstractCollection<Runnable> | contains | Object | +| AbstractCollection<Runnable> | containsAll | Collection<?> | +| AbstractCollection<Runnable> | remove | Object | +| AbstractCollection<Runnable> | removeAll | Collection<?> | +| AbstractCollection<Runnable> | retainAll | Collection<?> | +| AbstractCollection<Runnable> | toArray | T[] | | AbstractCollection<String> | add | String | | AbstractCollection<String> | addAll | Collection<? extends String> | | AbstractCollection<String> | contains | Object | @@ -139,6 +147,17 @@ methodWithDuplicate | Collection<K> | retainAll | Collection<?> | | Collection<K> | toArray | IntFunction<T[]> | | Collection<K> | toArray | T[] | +| Collection<Runnable> | add | Runnable | +| Collection<Runnable> | addAll | Collection<? extends Runnable> | +| Collection<Runnable> | contains | Object | +| Collection<Runnable> | containsAll | Collection<?> | +| Collection<Runnable> | equals | Object | +| Collection<Runnable> | remove | Object | +| Collection<Runnable> | removeAll | Collection<?> | +| Collection<Runnable> | removeIf | Predicate<? super Runnable> | +| Collection<Runnable> | retainAll | Collection<?> | +| Collection<Runnable> | toArray | IntFunction<T[]> | +| Collection<Runnable> | toArray | T[] | | Collection<String> | add | String | | Collection<String> | addAll | Collection<? extends String> | | Collection<String> | contains | Object | @@ -191,6 +210,8 @@ methodWithDuplicate | List<E> | add | int | | List<E> | addAll | Collection<? extends E> | | List<E> | addAll | int | +| List<E> | addFirst | E | +| List<E> | addLast | E | | List<E> | contains | Object | | List<E> | containsAll | Collection<?> | | List<E> | copyOf | Collection<? extends E> | diff --git a/java/ql/test-kotlin1/library-tests/reflection/reflection.expected b/java/ql/test-kotlin1/library-tests/reflection/reflection.expected index d149bd24563..06cc3ca22c8 100644 --- a/java/ql/test-kotlin1/library-tests/reflection/reflection.expected +++ b/java/ql/test-kotlin1/library-tests/reflection/reflection.expected @@ -269,8 +269,15 @@ compGenerated | file://<external>/CharRange.class:0:0:0:0 | spliterator | Forwarder for a Kotlin class inheriting an interface default method | | file://<external>/Class2.class:0:0:0:0 | getValue | Default property accessor | | file://<external>/Class2.class:0:0:0:0 | getValue | Default property accessor | +| file://<external>/EnumEntries.class:0:0:0:0 | addFirst | Forwarder for a Kotlin class inheriting an interface default method | +| file://<external>/EnumEntries.class:0:0:0:0 | addLast | Forwarder for a Kotlin class inheriting an interface default method | | file://<external>/EnumEntries.class:0:0:0:0 | forEach | Forwarder for a Kotlin class inheriting an interface default method | +| file://<external>/EnumEntries.class:0:0:0:0 | getFirst | Forwarder for a Kotlin class inheriting an interface default method | +| file://<external>/EnumEntries.class:0:0:0:0 | getLast | Forwarder for a Kotlin class inheriting an interface default method | | file://<external>/EnumEntries.class:0:0:0:0 | parallelStream | Forwarder for a Kotlin class inheriting an interface default method | +| file://<external>/EnumEntries.class:0:0:0:0 | removeFirst | Forwarder for a Kotlin class inheriting an interface default method | +| file://<external>/EnumEntries.class:0:0:0:0 | removeLast | Forwarder for a Kotlin class inheriting an interface default method | +| file://<external>/EnumEntries.class:0:0:0:0 | reversed | Forwarder for a Kotlin class inheriting an interface default method | | file://<external>/EnumEntries.class:0:0:0:0 | spliterator | Forwarder for a Kotlin class inheriting an interface default method | | file://<external>/EnumEntries.class:0:0:0:0 | stream | Forwarder for a Kotlin class inheriting an interface default method | | file://<external>/EnumEntries.class:0:0:0:0 | toArray | Forwarder for a Kotlin class inheriting an interface default method | diff --git a/java/ql/test-kotlin2/library-tests/exprs/PrintAst.expected b/java/ql/test-kotlin2/library-tests/exprs/PrintAst.expected index 41f235c1efd..b6bbd9e02e9 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/PrintAst.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/PrintAst.expected @@ -2933,15 +2933,15 @@ exprs.kt: # 292| 1: [StmtExpr] <Stmt> # 292| 0: [BlockStmt] { ... } # 292| 0: [LocalVariableDeclStmt] var ...; -# 292| 1: [LocalVariableDeclExpr] tmp0 +# 292| 1: [LocalVariableDeclExpr] <unary> # 292| 0: [VarAccess] i0 # 292| 1: [ExprStmt] <Expr>; # 292| 0: [AssignExpr] ...=... # 292| 0: [VarAccess] i0 # 292| 1: [MethodCall] inc(...) -# 292| -1: [VarAccess] tmp0 +# 292| -1: [VarAccess] <unary> # 292| 2: [ExprStmt] <Expr>; -# 292| 0: [VarAccess] tmp0 +# 292| 0: [VarAccess] <unary> # 293| 7: [ExprStmt] <Expr>; # 293| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit> # 293| 0: [TypeAccess] Unit @@ -2960,15 +2960,15 @@ exprs.kt: # 294| 1: [StmtExpr] <Stmt> # 294| 0: [BlockStmt] { ... } # 294| 0: [LocalVariableDeclStmt] var ...; -# 294| 1: [LocalVariableDeclExpr] tmp1 +# 294| 1: [LocalVariableDeclExpr] <unary> # 294| 0: [VarAccess] i0 # 294| 1: [ExprStmt] <Expr>; # 294| 0: [AssignExpr] ...=... # 294| 0: [VarAccess] i0 # 294| 1: [MethodCall] dec(...) -# 294| -1: [VarAccess] tmp1 +# 294| -1: [VarAccess] <unary> # 294| 2: [ExprStmt] <Expr>; -# 294| 0: [VarAccess] tmp1 +# 294| 0: [VarAccess] <unary> # 295| 9: [ExprStmt] <Expr>; # 295| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit> # 295| 0: [TypeAccess] Unit @@ -3028,15 +3028,15 @@ exprs.kt: # 306| 1: [StmtExpr] <Stmt> # 306| 0: [BlockStmt] { ... } # 306| 0: [LocalVariableDeclStmt] var ...; -# 306| 1: [LocalVariableDeclExpr] tmp2 +# 306| 1: [LocalVariableDeclExpr] <unary> # 306| 0: [VarAccess] b0 # 306| 1: [ExprStmt] <Expr>; # 306| 0: [AssignExpr] ...=... # 306| 0: [VarAccess] b0 # 306| 1: [MethodCall] inc(...) -# 306| -1: [VarAccess] tmp2 +# 306| -1: [VarAccess] <unary> # 306| 2: [ExprStmt] <Expr>; -# 306| 0: [VarAccess] tmp2 +# 306| 0: [VarAccess] <unary> # 307| 20: [ExprStmt] <Expr>; # 307| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit> # 307| 0: [TypeAccess] Unit @@ -3055,15 +3055,15 @@ exprs.kt: # 308| 1: [StmtExpr] <Stmt> # 308| 0: [BlockStmt] { ... } # 308| 0: [LocalVariableDeclStmt] var ...; -# 308| 1: [LocalVariableDeclExpr] tmp3 +# 308| 1: [LocalVariableDeclExpr] <unary> # 308| 0: [VarAccess] b0 # 308| 1: [ExprStmt] <Expr>; # 308| 0: [AssignExpr] ...=... # 308| 0: [VarAccess] b0 # 308| 1: [MethodCall] dec(...) -# 308| -1: [VarAccess] tmp3 +# 308| -1: [VarAccess] <unary> # 308| 2: [ExprStmt] <Expr>; -# 308| 0: [VarAccess] tmp3 +# 308| 0: [VarAccess] <unary> # 309| 22: [ExprStmt] <Expr>; # 309| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit> # 309| 0: [TypeAccess] Unit @@ -3123,15 +3123,15 @@ exprs.kt: # 320| 1: [StmtExpr] <Stmt> # 320| 0: [BlockStmt] { ... } # 320| 0: [LocalVariableDeclStmt] var ...; -# 320| 1: [LocalVariableDeclExpr] tmp4 +# 320| 1: [LocalVariableDeclExpr] <unary> # 320| 0: [VarAccess] s0 # 320| 1: [ExprStmt] <Expr>; # 320| 0: [AssignExpr] ...=... # 320| 0: [VarAccess] s0 # 320| 1: [MethodCall] inc(...) -# 320| -1: [VarAccess] tmp4 +# 320| -1: [VarAccess] <unary> # 320| 2: [ExprStmt] <Expr>; -# 320| 0: [VarAccess] tmp4 +# 320| 0: [VarAccess] <unary> # 321| 33: [ExprStmt] <Expr>; # 321| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit> # 321| 0: [TypeAccess] Unit @@ -3150,15 +3150,15 @@ exprs.kt: # 322| 1: [StmtExpr] <Stmt> # 322| 0: [BlockStmt] { ... } # 322| 0: [LocalVariableDeclStmt] var ...; -# 322| 1: [LocalVariableDeclExpr] tmp5 +# 322| 1: [LocalVariableDeclExpr] <unary> # 322| 0: [VarAccess] s0 # 322| 1: [ExprStmt] <Expr>; # 322| 0: [AssignExpr] ...=... # 322| 0: [VarAccess] s0 # 322| 1: [MethodCall] dec(...) -# 322| -1: [VarAccess] tmp5 +# 322| -1: [VarAccess] <unary> # 322| 2: [ExprStmt] <Expr>; -# 322| 0: [VarAccess] tmp5 +# 322| 0: [VarAccess] <unary> # 323| 35: [ExprStmt] <Expr>; # 323| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit> # 323| 0: [TypeAccess] Unit @@ -3218,15 +3218,15 @@ exprs.kt: # 334| 1: [StmtExpr] <Stmt> # 334| 0: [BlockStmt] { ... } # 334| 0: [LocalVariableDeclStmt] var ...; -# 334| 1: [LocalVariableDeclExpr] tmp6 +# 334| 1: [LocalVariableDeclExpr] <unary> # 334| 0: [VarAccess] l0 # 334| 1: [ExprStmt] <Expr>; # 334| 0: [AssignExpr] ...=... # 334| 0: [VarAccess] l0 # 334| 1: [MethodCall] inc(...) -# 334| -1: [VarAccess] tmp6 +# 334| -1: [VarAccess] <unary> # 334| 2: [ExprStmt] <Expr>; -# 334| 0: [VarAccess] tmp6 +# 334| 0: [VarAccess] <unary> # 335| 46: [ExprStmt] <Expr>; # 335| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit> # 335| 0: [TypeAccess] Unit @@ -3245,15 +3245,15 @@ exprs.kt: # 336| 1: [StmtExpr] <Stmt> # 336| 0: [BlockStmt] { ... } # 336| 0: [LocalVariableDeclStmt] var ...; -# 336| 1: [LocalVariableDeclExpr] tmp7 +# 336| 1: [LocalVariableDeclExpr] <unary> # 336| 0: [VarAccess] l0 # 336| 1: [ExprStmt] <Expr>; # 336| 0: [AssignExpr] ...=... # 336| 0: [VarAccess] l0 # 336| 1: [MethodCall] dec(...) -# 336| -1: [VarAccess] tmp7 +# 336| -1: [VarAccess] <unary> # 336| 2: [ExprStmt] <Expr>; -# 336| 0: [VarAccess] tmp7 +# 336| 0: [VarAccess] <unary> # 337| 48: [ExprStmt] <Expr>; # 337| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit> # 337| 0: [TypeAccess] Unit @@ -3358,7 +3358,7 @@ exprs.kt: # 174| 5: [Constructor] Direction # 174| 5: [BlockStmt] { ... } # 174| 0: [ExprStmt] <Expr>; -# 174| 0: [ClassInstanceExpr] new Enum(...) +# 174| 0: [ClassInstanceExpr] new Enum<Direction>(...) # 174| -3: [TypeAccess] Enum<Direction> # 174| 0: [TypeAccess] Direction # 174| 0: [NullLiteral] null @@ -3381,24 +3381,24 @@ exprs.kt: # 175| 0: [ClassInstanceExpr] new Direction(...) # 175| -3: [TypeAccess] Direction # 178| 7: [Class] Color -# 0| 2: [Method] getEntries -# 0| 3: [TypeAccess] EnumEntries<Color> -# 0| 0: [TypeAccess] Color -# 0| 3: [Method] valueOf -# 0| 3: [TypeAccess] Color +# 178| 2: [Method] getEntries +# 178| 3: [TypeAccess] EnumEntries<Color> +# 178| 0: [TypeAccess] Color +# 178| 3: [Method] valueOf +# 178| 3: [TypeAccess] Color #-----| 4: (Parameters) -# 0| 0: [Parameter] value -# 0| 0: [TypeAccess] String -# 0| 4: [Method] values -# 0| 3: [TypeAccess] Color[] -# 0| 0: [TypeAccess] Color +# 178| 0: [Parameter] value +# 178| 0: [TypeAccess] String +# 178| 4: [Method] values +# 178| 3: [TypeAccess] Color[] +# 178| 0: [TypeAccess] Color # 178| 5: [Constructor] Color #-----| 4: (Parameters) # 178| 0: [Parameter] rgb # 178| 0: [TypeAccess] int # 178| 5: [BlockStmt] { ... } # 178| 0: [ExprStmt] <Expr>; -# 178| 0: [ClassInstanceExpr] new Enum(...) +# 178| 0: [ClassInstanceExpr] new Enum<Color>(...) # 178| -3: [TypeAccess] Enum<Color> # 178| 0: [TypeAccess] Color # 178| 0: [NullLiteral] null @@ -6080,8 +6080,8 @@ samConversion.kt: # 9| -3: [TypeAccess] Function1<Integer,Boolean> # 9| 0: [TypeAccess] Integer # 9| 1: [TypeAccess] Boolean -# 9| 1: [WhenBranch] ... -> ... -# 9| 0: [BooleanLiteral] true +# 11| 1: [WhenBranch] ... -> ... +# 11| 0: [BooleanLiteral] true # 11| 1: [ExprStmt] <Expr>; # 11| 0: [LambdaExpr] ...->... # 11| -4: [AnonymousClass] new Function1<Integer,Boolean>(...) { ... } diff --git a/java/ql/test-kotlin2/library-tests/exprs/delegatedProperties.expected b/java/ql/test-kotlin2/library-tests/exprs/delegatedProperties.expected index 7141b6d1531..a530d0ee560 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/delegatedProperties.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/delegatedProperties.expected @@ -1,22 +1,22 @@ delegatedProperties -| delegatedProperties.kt:6:9:9:9 | prop1 | prop1 | local | delegatedProperties.kt:6:24:9:9 | Lazy<Integer> prop1$delegate | delegatedProperties.kt:6:27:9:9 | lazy(...) | -| delegatedProperties.kt:19:9:19:51 | varResource1 | varResource1 | local | delegatedProperties.kt:19:31:19:51 | ResourceDelegate varResource1$delegate | delegatedProperties.kt:19:34:19:51 | new ResourceDelegate(...) | -| delegatedProperties.kt:23:9:23:31 | name | name | local | delegatedProperties.kt:23:26:23:31 | Map<String,Object> name$delegate | delegatedProperties.kt:23:29:23:31 | map | -| delegatedProperties.kt:33:9:33:76 | readOnly | readOnly | local | delegatedProperties.kt:33:27:33:47 | ReadWriteProperty<Object,Integer> readOnly$delegate | delegatedProperties.kt:33:30:33:47 | resourceDelegate(...) | -| delegatedProperties.kt:34:9:34:48 | readWrite | readWrite | local | delegatedProperties.kt:34:28:34:48 | ReadWriteProperty<Object,Integer> readWrite$delegate | delegatedProperties.kt:34:31:34:48 | resourceDelegate(...) | -| delegatedProperties.kt:39:9:39:51 | varResource2 | varResource2 | local | delegatedProperties.kt:39:31:39:51 | ResourceDelegate varResource2$delegate | delegatedProperties.kt:39:31:39:51 | provideDelegate(...) | -| delegatedProperties.kt:42:5:42:47 | varResource0 | varResource0 | non-local | delegatedProperties.kt:42:27:42:47 | varResource0$delegate | delegatedProperties.kt:42:30:42:47 | new ResourceDelegate(...) | -| delegatedProperties.kt:66:5:66:50 | delegatedToMember1 | delegatedToMember1 | non-local | delegatedProperties.kt:66:33:66:50 | delegatedToMember1$delegate | delegatedProperties.kt:66:36:66:50 | ...::... | -| delegatedProperties.kt:67:5:67:53 | delegatedToMember2 | delegatedToMember2 | non-local | delegatedProperties.kt:67:33:67:53 | delegatedToMember2$delegate | delegatedProperties.kt:67:36:67:53 | ...::... | -| delegatedProperties.kt:69:5:69:56 | delegatedToExtMember1 | delegatedToExtMember1 | non-local | delegatedProperties.kt:69:36:69:56 | delegatedToExtMember1$delegate | delegatedProperties.kt:69:39:69:56 | ...::... | -| delegatedProperties.kt:70:5:70:59 | delegatedToExtMember2 | delegatedToExtMember2 | non-local | delegatedProperties.kt:70:36:70:59 | delegatedToExtMember2$delegate | delegatedProperties.kt:70:39:70:59 | ...::... | -| delegatedProperties.kt:72:5:72:56 | delegatedToBaseClass1 | delegatedToBaseClass1 | non-local | delegatedProperties.kt:72:36:72:56 | delegatedToBaseClass1$delegate | delegatedProperties.kt:72:39:72:56 | ...::... | -| delegatedProperties.kt:73:5:73:56 | delegatedToBaseClass2 | delegatedToBaseClass2 | non-local | delegatedProperties.kt:73:36:73:56 | delegatedToBaseClass2$delegate | delegatedProperties.kt:73:39:73:56 | ...::... | -| delegatedProperties.kt:75:5:75:78 | delegatedToAnotherClass1 | delegatedToAnotherClass1 | non-local | delegatedProperties.kt:75:39:75:78 | delegatedToAnotherClass1$delegate | delegatedProperties.kt:75:42:75:78 | ...::... | -| delegatedProperties.kt:77:5:77:49 | delegatedToTopLevel | delegatedToTopLevel | non-local | delegatedProperties.kt:77:34:77:49 | delegatedToTopLevel$delegate | delegatedProperties.kt:77:37:77:49 | ...::... | -| delegatedProperties.kt:79:5:79:38 | max | max | non-local | delegatedProperties.kt:79:18:79:38 | max$delegate | delegatedProperties.kt:79:21:79:38 | ...::... | -| delegatedProperties.kt:82:9:82:54 | delegatedToMember3 | delegatedToMember3 | local | delegatedProperties.kt:82:37:82:54 | KMutableProperty0<Integer> delegatedToMember3$delegate | delegatedProperties.kt:82:40:82:54 | ...::... | -| delegatedProperties.kt:87:1:87:46 | extDelegated | extDelegated | non-local | delegatedProperties.kt:87:31:87:46 | extDelegated$delegateMyClass | delegatedProperties.kt:87:34:87:46 | ...::... | +| delegatedProperties.kt:6:9:9:9 | prop1 | prop1 | local | delegatedProperties.kt:6:9:9:9 | Lazy<Integer> prop1$delegate | delegatedProperties.kt:6:27:9:9 | lazy(...) | +| delegatedProperties.kt:19:9:19:51 | varResource1 | varResource1 | local | delegatedProperties.kt:19:9:19:51 | ResourceDelegate varResource1$delegate | delegatedProperties.kt:19:34:19:51 | new ResourceDelegate(...) | +| delegatedProperties.kt:23:9:23:31 | name | name | local | delegatedProperties.kt:23:9:23:31 | Map<String,Object> name$delegate | delegatedProperties.kt:23:29:23:31 | map | +| delegatedProperties.kt:33:9:33:76 | readOnly | readOnly | local | delegatedProperties.kt:33:9:33:76 | ReadWriteProperty<Object,Integer> readOnly$delegate | delegatedProperties.kt:33:30:33:47 | resourceDelegate(...) | +| delegatedProperties.kt:34:9:34:48 | readWrite | readWrite | local | delegatedProperties.kt:34:9:34:48 | ReadWriteProperty<Object,Integer> readWrite$delegate | delegatedProperties.kt:34:31:34:48 | resourceDelegate(...) | +| delegatedProperties.kt:39:9:39:51 | varResource2 | varResource2 | local | delegatedProperties.kt:39:9:39:51 | ResourceDelegate varResource2$delegate | delegatedProperties.kt:39:34:39:51 | provideDelegate(...) | +| delegatedProperties.kt:42:5:42:47 | varResource0 | varResource0 | non-local | delegatedProperties.kt:42:30:42:47 | varResource0$delegate | delegatedProperties.kt:42:30:42:47 | new ResourceDelegate(...) | +| delegatedProperties.kt:66:5:66:50 | delegatedToMember1 | delegatedToMember1 | non-local | delegatedProperties.kt:66:36:66:50 | delegatedToMember1$delegate | delegatedProperties.kt:66:36:66:50 | ...::... | +| delegatedProperties.kt:67:5:67:53 | delegatedToMember2 | delegatedToMember2 | non-local | delegatedProperties.kt:67:36:67:53 | delegatedToMember2$delegate | delegatedProperties.kt:67:36:67:53 | ...::... | +| delegatedProperties.kt:69:5:69:56 | delegatedToExtMember1 | delegatedToExtMember1 | non-local | delegatedProperties.kt:69:39:69:56 | delegatedToExtMember1$delegate | delegatedProperties.kt:69:39:69:56 | ...::... | +| delegatedProperties.kt:70:5:70:59 | delegatedToExtMember2 | delegatedToExtMember2 | non-local | delegatedProperties.kt:70:39:70:59 | delegatedToExtMember2$delegate | delegatedProperties.kt:70:39:70:59 | ...::... | +| delegatedProperties.kt:72:5:72:56 | delegatedToBaseClass1 | delegatedToBaseClass1 | non-local | delegatedProperties.kt:72:39:72:56 | delegatedToBaseClass1$delegate | delegatedProperties.kt:72:39:72:56 | ...::... | +| delegatedProperties.kt:73:5:73:56 | delegatedToBaseClass2 | delegatedToBaseClass2 | non-local | delegatedProperties.kt:73:39:73:56 | delegatedToBaseClass2$delegate | delegatedProperties.kt:73:39:73:56 | ...::... | +| delegatedProperties.kt:75:5:75:78 | delegatedToAnotherClass1 | delegatedToAnotherClass1 | non-local | delegatedProperties.kt:75:42:75:78 | delegatedToAnotherClass1$delegate | delegatedProperties.kt:75:42:75:78 | ...::... | +| delegatedProperties.kt:77:5:77:49 | delegatedToTopLevel | delegatedToTopLevel | non-local | delegatedProperties.kt:77:37:77:49 | delegatedToTopLevel$delegate | delegatedProperties.kt:77:37:77:49 | ...::... | +| delegatedProperties.kt:79:5:79:38 | max | max | non-local | delegatedProperties.kt:79:21:79:38 | max$delegate | delegatedProperties.kt:79:21:79:38 | ...::... | +| delegatedProperties.kt:82:9:82:54 | delegatedToMember3 | delegatedToMember3 | local | delegatedProperties.kt:82:9:82:54 | KMutableProperty0<Integer> delegatedToMember3$delegate | delegatedProperties.kt:82:40:82:54 | ...::... | +| delegatedProperties.kt:87:1:87:46 | extDelegated | extDelegated | non-local | delegatedProperties.kt:87:34:87:46 | extDelegated$delegateMyClass | delegatedProperties.kt:87:34:87:46 | ...::... | delegatedPropertyTypes | delegatedProperties.kt:6:9:9:9 | prop1 | file://:0:0:0:0 | int | file://<external>/Lazy.class:0:0:0:0 | Lazy<Integer> | | delegatedProperties.kt:19:9:19:51 | varResource1 | file://:0:0:0:0 | int | delegatedProperties.kt:45:1:51:1 | ResourceDelegate | @@ -37,32 +37,32 @@ delegatedPropertyTypes | delegatedProperties.kt:82:9:82:54 | delegatedToMember3 | file://:0:0:0:0 | int | file://<external>/KMutableProperty0.class:0:0:0:0 | KMutableProperty0<Integer> | | delegatedProperties.kt:87:1:87:46 | extDelegated | file://:0:0:0:0 | int | file://<external>/KMutableProperty0.class:0:0:0:0 | KMutableProperty0<Integer> | delegatedPropertyGetters -| delegatedProperties.kt:6:9:9:9 | prop1 | delegatedProperties.kt:6:24:9:9 | <get-prop1> | -| delegatedProperties.kt:19:9:19:51 | varResource1 | delegatedProperties.kt:19:31:19:51 | <get-varResource1> | -| delegatedProperties.kt:23:9:23:31 | name | delegatedProperties.kt:23:26:23:31 | <get-name> | -| delegatedProperties.kt:33:9:33:76 | readOnly | delegatedProperties.kt:33:27:33:47 | <get-readOnly> | -| delegatedProperties.kt:34:9:34:48 | readWrite | delegatedProperties.kt:34:28:34:48 | <get-readWrite> | -| delegatedProperties.kt:39:9:39:51 | varResource2 | delegatedProperties.kt:39:31:39:51 | <get-varResource2> | -| delegatedProperties.kt:42:5:42:47 | varResource0 | delegatedProperties.kt:42:27:42:47 | getVarResource0 | -| delegatedProperties.kt:66:5:66:50 | delegatedToMember1 | delegatedProperties.kt:66:33:66:50 | getDelegatedToMember1 | -| delegatedProperties.kt:67:5:67:53 | delegatedToMember2 | delegatedProperties.kt:67:33:67:53 | getDelegatedToMember2 | -| delegatedProperties.kt:69:5:69:56 | delegatedToExtMember1 | delegatedProperties.kt:69:36:69:56 | getDelegatedToExtMember1 | -| delegatedProperties.kt:70:5:70:59 | delegatedToExtMember2 | delegatedProperties.kt:70:36:70:59 | getDelegatedToExtMember2 | -| delegatedProperties.kt:72:5:72:56 | delegatedToBaseClass1 | delegatedProperties.kt:72:36:72:56 | getDelegatedToBaseClass1 | -| delegatedProperties.kt:73:5:73:56 | delegatedToBaseClass2 | delegatedProperties.kt:73:36:73:56 | getDelegatedToBaseClass2 | -| delegatedProperties.kt:75:5:75:78 | delegatedToAnotherClass1 | delegatedProperties.kt:75:39:75:78 | getDelegatedToAnotherClass1 | -| delegatedProperties.kt:77:5:77:49 | delegatedToTopLevel | delegatedProperties.kt:77:34:77:49 | getDelegatedToTopLevel | -| delegatedProperties.kt:79:5:79:38 | max | delegatedProperties.kt:79:18:79:38 | getMax | -| delegatedProperties.kt:82:9:82:54 | delegatedToMember3 | delegatedProperties.kt:82:37:82:54 | <get-delegatedToMember3> | -| delegatedProperties.kt:87:1:87:46 | extDelegated | delegatedProperties.kt:87:31:87:46 | getExtDelegated | +| delegatedProperties.kt:6:9:9:9 | prop1 | delegatedProperties.kt:6:9:9:9 | <get-prop1> | +| delegatedProperties.kt:19:9:19:51 | varResource1 | delegatedProperties.kt:19:9:19:51 | <get-varResource1> | +| delegatedProperties.kt:23:9:23:31 | name | delegatedProperties.kt:23:9:23:31 | <get-name> | +| delegatedProperties.kt:33:9:33:76 | readOnly | delegatedProperties.kt:33:9:33:76 | <get-readOnly> | +| delegatedProperties.kt:34:9:34:48 | readWrite | delegatedProperties.kt:34:9:34:48 | <get-readWrite> | +| delegatedProperties.kt:39:9:39:51 | varResource2 | delegatedProperties.kt:39:9:39:51 | <get-varResource2> | +| delegatedProperties.kt:42:5:42:47 | varResource0 | delegatedProperties.kt:42:30:42:47 | getVarResource0 | +| delegatedProperties.kt:66:5:66:50 | delegatedToMember1 | delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1 | +| delegatedProperties.kt:67:5:67:53 | delegatedToMember2 | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | +| delegatedProperties.kt:69:5:69:56 | delegatedToExtMember1 | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | +| delegatedProperties.kt:70:5:70:59 | delegatedToExtMember2 | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | +| delegatedProperties.kt:72:5:72:56 | delegatedToBaseClass1 | delegatedProperties.kt:72:39:72:56 | getDelegatedToBaseClass1 | +| delegatedProperties.kt:73:5:73:56 | delegatedToBaseClass2 | delegatedProperties.kt:73:39:73:56 | getDelegatedToBaseClass2 | +| delegatedProperties.kt:75:5:75:78 | delegatedToAnotherClass1 | delegatedProperties.kt:75:42:75:78 | getDelegatedToAnotherClass1 | +| delegatedProperties.kt:77:5:77:49 | delegatedToTopLevel | delegatedProperties.kt:77:37:77:49 | getDelegatedToTopLevel | +| delegatedProperties.kt:79:5:79:38 | max | delegatedProperties.kt:79:21:79:38 | getMax | +| delegatedProperties.kt:82:9:82:54 | delegatedToMember3 | delegatedProperties.kt:82:9:82:54 | <get-delegatedToMember3> | +| delegatedProperties.kt:87:1:87:46 | extDelegated | delegatedProperties.kt:87:34:87:46 | getExtDelegated | delegatedPropertySetters -| delegatedProperties.kt:19:9:19:51 | varResource1 | delegatedProperties.kt:19:31:19:51 | <set-varResource1> | -| delegatedProperties.kt:34:9:34:48 | readWrite | delegatedProperties.kt:34:28:34:48 | <set-readWrite> | -| delegatedProperties.kt:42:5:42:47 | varResource0 | delegatedProperties.kt:42:27:42:47 | setVarResource0 | -| delegatedProperties.kt:66:5:66:50 | delegatedToMember1 | delegatedProperties.kt:66:33:66:50 | setDelegatedToMember1 | -| delegatedProperties.kt:67:5:67:53 | delegatedToMember2 | delegatedProperties.kt:67:33:67:53 | setDelegatedToMember2 | -| delegatedProperties.kt:69:5:69:56 | delegatedToExtMember1 | delegatedProperties.kt:69:36:69:56 | setDelegatedToExtMember1 | -| delegatedProperties.kt:70:5:70:59 | delegatedToExtMember2 | delegatedProperties.kt:70:36:70:59 | setDelegatedToExtMember2 | -| delegatedProperties.kt:77:5:77:49 | delegatedToTopLevel | delegatedProperties.kt:77:34:77:49 | setDelegatedToTopLevel | -| delegatedProperties.kt:82:9:82:54 | delegatedToMember3 | delegatedProperties.kt:82:37:82:54 | <set-delegatedToMember3> | -| delegatedProperties.kt:87:1:87:46 | extDelegated | delegatedProperties.kt:87:31:87:46 | setExtDelegated | +| delegatedProperties.kt:19:9:19:51 | varResource1 | delegatedProperties.kt:19:9:19:51 | <set-varResource1> | +| delegatedProperties.kt:34:9:34:48 | readWrite | delegatedProperties.kt:34:9:34:48 | <set-readWrite> | +| delegatedProperties.kt:42:5:42:47 | varResource0 | delegatedProperties.kt:42:5:42:47 | setVarResource0 | +| delegatedProperties.kt:66:5:66:50 | delegatedToMember1 | delegatedProperties.kt:66:5:66:50 | setDelegatedToMember1 | +| delegatedProperties.kt:67:5:67:53 | delegatedToMember2 | delegatedProperties.kt:67:5:67:53 | setDelegatedToMember2 | +| delegatedProperties.kt:69:5:69:56 | delegatedToExtMember1 | delegatedProperties.kt:69:5:69:56 | setDelegatedToExtMember1 | +| delegatedProperties.kt:70:5:70:59 | delegatedToExtMember2 | delegatedProperties.kt:70:5:70:59 | setDelegatedToExtMember2 | +| delegatedProperties.kt:77:5:77:49 | delegatedToTopLevel | delegatedProperties.kt:77:5:77:49 | setDelegatedToTopLevel | +| delegatedProperties.kt:82:9:82:54 | delegatedToMember3 | delegatedProperties.kt:82:9:82:54 | <set-delegatedToMember3> | +| delegatedProperties.kt:87:1:87:46 | extDelegated | delegatedProperties.kt:87:1:87:46 | setExtDelegated | diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 45d5606d1ac..13dfc71b6c3 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -1,26 +1,26 @@ -| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:6:24:9:9 | <get-prop1> | NullLiteral | -| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:19:31:19:51 | <get-varResource1> | NullLiteral | -| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:19:31:19:51 | <set-varResource1> | NullLiteral | -| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:23:26:23:31 | <get-name> | NullLiteral | -| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:33:27:33:47 | <get-readOnly> | NullLiteral | -| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:34:28:34:48 | <get-readWrite> | NullLiteral | -| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:34:28:34:48 | <set-readWrite> | NullLiteral | -| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:39:31:39:51 | <get-varResource2> | NullLiteral | -| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:82:37:82:54 | <get-delegatedToMember3> | NullLiteral | -| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:82:37:82:54 | <set-delegatedToMember3> | NullLiteral | +| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:6:9:9:9 | <get-prop1> | NullLiteral | +| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:19:9:19:51 | <get-varResource1> | NullLiteral | +| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:19:9:19:51 | <set-varResource1> | NullLiteral | +| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:23:9:23:31 | <get-name> | NullLiteral | +| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:33:9:33:76 | <get-readOnly> | NullLiteral | +| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:34:9:34:48 | <get-readWrite> | NullLiteral | +| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:34:9:34:48 | <set-readWrite> | NullLiteral | +| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:39:9:39:51 | <get-varResource2> | NullLiteral | +| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:82:9:82:54 | <get-delegatedToMember3> | NullLiteral | +| delegatedProperties.kt:0:0:0:0 | null | delegatedProperties.kt:82:9:82:54 | <set-delegatedToMember3> | NullLiteral | | delegatedProperties.kt:1:9:1:12 | null | delegatedProperties.kt:18:5:40:5 | fn | NullLiteral | -| delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:42:27:42:47 | getVarResource0 | ThisAccess | -| delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:42:27:42:47 | setVarResource0 | ThisAccess | -| delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:66:33:66:50 | getDelegatedToMember1 | ThisAccess | -| delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:66:33:66:50 | setDelegatedToMember1 | ThisAccess | -| delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:67:33:67:53 | getDelegatedToMember2 | ThisAccess | -| delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:67:33:67:53 | setDelegatedToMember2 | ThisAccess | -| delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:69:36:69:56 | getDelegatedToExtMember1 | ThisAccess | -| delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:69:36:69:56 | setDelegatedToExtMember1 | ThisAccess | -| delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:70:36:70:59 | getDelegatedToExtMember2 | ThisAccess | -| delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:70:36:70:59 | setDelegatedToExtMember2 | ThisAccess | +| delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:42:30:42:47 | getVarResource0 | ThisAccess | +| delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:42:30:42:47 | setVarResource0 | ThisAccess | +| delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1 | ThisAccess | +| delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:66:36:66:50 | setDelegatedToMember1 | ThisAccess | +| delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | ThisAccess | +| delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | ThisAccess | +| delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | ThisAccess | +| delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | ThisAccess | +| delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | ThisAccess | +| delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | ThisAccess | | delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:72:36:72:56 | getDelegatedToBaseClass1 | ThisAccess | -| delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:73:36:73:56 | getDelegatedToBaseClass2 | ThisAccess | +| delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:73:39:73:56 | getDelegatedToBaseClass2 | ThisAccess | | delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:75:39:75:78 | getDelegatedToAnotherClass1 | ThisAccess | | delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:77:34:77:49 | getDelegatedToTopLevel | ThisAccess | | delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:77:34:77:49 | setDelegatedToTopLevel | ThisAccess | @@ -28,8 +28,6 @@ | delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:87:31:87:46 | getExtDelegated | ExtensionReceiverAccess | | delegatedProperties.kt:1:9:1:12 | this | delegatedProperties.kt:87:31:87:46 | setExtDelegated | ExtensionReceiverAccess | | delegatedProperties.kt:5:5:12:5 | Unit | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:6:24:9:9 | ...::... | delegatedProperties.kt:6:24:9:9 | <get-prop1> | PropertyRefExpr | -| delegatedProperties.kt:6:24:9:9 | <get-prop1>(...) | delegatedProperties.kt:6:24:9:9 | get | MethodCall | | delegatedProperties.kt:6:24:9:9 | Integer | delegatedProperties.kt:6:24:9:9 | <get-prop1> | TypeAccess | | delegatedProperties.kt:6:24:9:9 | Integer | delegatedProperties.kt:6:24:9:9 | <get-prop1> | TypeAccess | | delegatedProperties.kt:6:24:9:9 | KProperty0<Integer> | delegatedProperties.kt:6:24:9:9 | <get-prop1> | TypeAccess | @@ -42,6 +40,8 @@ | delegatedProperties.kt:6:24:9:9 | prop1$delegate | delegatedProperties.kt:5:5:12:5 | fn | LocalVariableDeclExpr | | delegatedProperties.kt:6:24:9:9 | prop1$delegate | delegatedProperties.kt:6:24:9:9 | <get-prop1> | VarAccess | | delegatedProperties.kt:6:24:9:9 | this | delegatedProperties.kt:6:24:9:9 | invoke | ThisAccess | +| delegatedProperties.kt:6:27:9:9 | ...::... | delegatedProperties.kt:6:24:9:9 | <get-prop1> | PropertyRefExpr | +| delegatedProperties.kt:6:27:9:9 | <get-prop1>(...) | delegatedProperties.kt:6:27:9:9 | get | MethodCall | | delegatedProperties.kt:6:27:9:9 | Integer | delegatedProperties.kt:5:5:12:5 | fn | TypeAccess | | delegatedProperties.kt:6:27:9:9 | LazyKt | delegatedProperties.kt:5:5:12:5 | fn | TypeAccess | | delegatedProperties.kt:6:27:9:9 | lazy(...) | delegatedProperties.kt:5:5:12:5 | fn | MethodCall | @@ -51,7 +51,7 @@ | delegatedProperties.kt:6:32:9:9 | int | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:7:13:7:27 | ConsoleKt | delegatedProperties.kt:6:32:9:9 | invoke | TypeAccess | | delegatedProperties.kt:7:13:7:27 | println(...) | delegatedProperties.kt:6:32:9:9 | invoke | MethodCall | -| delegatedProperties.kt:7:22:7:25 | "init" | delegatedProperties.kt:6:32:9:9 | invoke | StringLiteral | +| delegatedProperties.kt:7:21:7:26 | "init" | delegatedProperties.kt:6:32:9:9 | invoke | StringLiteral | | delegatedProperties.kt:8:13:8:13 | 5 | delegatedProperties.kt:6:32:9:9 | invoke | IntegerLiteral | | delegatedProperties.kt:10:9:10:22 | ConsoleKt | delegatedProperties.kt:5:5:12:5 | fn | TypeAccess | | delegatedProperties.kt:10:9:10:22 | println(...) | delegatedProperties.kt:5:5:12:5 | fn | MethodCall | @@ -68,65 +68,65 @@ | delegatedProperties.kt:18:12:18:33 | Map<String,? extends Object> | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:18:12:18:33 | Object | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:18:12:18:33 | String | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:19:31:19:51 | ...::... | delegatedProperties.kt:19:31:19:51 | <get-varResource1> | PropertyRefExpr | -| delegatedProperties.kt:19:31:19:51 | ...::... | delegatedProperties.kt:19:31:19:51 | <set-varResource1> | PropertyRefExpr | -| delegatedProperties.kt:19:31:19:51 | <get-varResource1>(...) | delegatedProperties.kt:19:31:19:51 | get | MethodCall | -| delegatedProperties.kt:19:31:19:51 | <get-varResource1>(...) | delegatedProperties.kt:19:31:19:51 | get | MethodCall | -| delegatedProperties.kt:19:31:19:51 | <set-varResource1>(...) | delegatedProperties.kt:19:31:19:51 | set | MethodCall | -| delegatedProperties.kt:19:31:19:51 | <set-varResource1>(...) | delegatedProperties.kt:19:31:19:51 | set | MethodCall | -| delegatedProperties.kt:19:31:19:51 | Integer | delegatedProperties.kt:19:31:19:51 | <get-varResource1> | TypeAccess | -| delegatedProperties.kt:19:31:19:51 | Integer | delegatedProperties.kt:19:31:19:51 | <set-varResource1> | TypeAccess | -| delegatedProperties.kt:19:31:19:51 | KMutableProperty0<Integer> | delegatedProperties.kt:19:31:19:51 | <get-varResource1> | TypeAccess | -| delegatedProperties.kt:19:31:19:51 | KMutableProperty0<Integer> | delegatedProperties.kt:19:31:19:51 | <set-varResource1> | TypeAccess | -| delegatedProperties.kt:19:31:19:51 | Object | delegatedProperties.kt:19:31:19:51 | get | TypeAccess | -| delegatedProperties.kt:19:31:19:51 | Object | delegatedProperties.kt:19:31:19:51 | get | TypeAccess | -| delegatedProperties.kt:19:31:19:51 | Object | delegatedProperties.kt:19:31:19:51 | set | TypeAccess | -| delegatedProperties.kt:19:31:19:51 | Object | delegatedProperties.kt:19:31:19:51 | set | TypeAccess | -| delegatedProperties.kt:19:31:19:51 | Unit | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:19:31:19:51 | a0 | delegatedProperties.kt:19:31:19:51 | set | VarAccess | -| delegatedProperties.kt:19:31:19:51 | a0 | delegatedProperties.kt:19:31:19:51 | set | VarAccess | -| delegatedProperties.kt:19:31:19:51 | get(...) | delegatedProperties.kt:19:31:19:51 | invoke | MethodCall | -| delegatedProperties.kt:19:31:19:51 | get(...) | delegatedProperties.kt:19:31:19:51 | invoke | MethodCall | -| delegatedProperties.kt:19:31:19:51 | getValue(...) | delegatedProperties.kt:19:31:19:51 | <get-varResource1> | MethodCall | -| delegatedProperties.kt:19:31:19:51 | int | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:19:31:19:51 | int | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:19:31:19:51 | new (...) | delegatedProperties.kt:19:31:19:51 | get | ClassInstanceExpr | -| delegatedProperties.kt:19:31:19:51 | new (...) | delegatedProperties.kt:19:31:19:51 | get | ClassInstanceExpr | -| delegatedProperties.kt:19:31:19:51 | new (...) | delegatedProperties.kt:19:31:19:51 | set | ClassInstanceExpr | -| delegatedProperties.kt:19:31:19:51 | new (...) | delegatedProperties.kt:19:31:19:51 | set | ClassInstanceExpr | -| delegatedProperties.kt:19:31:19:51 | setValue(...) | delegatedProperties.kt:19:31:19:51 | <set-varResource1> | MethodCall | -| delegatedProperties.kt:19:31:19:51 | this | delegatedProperties.kt:19:31:19:51 | invoke | ThisAccess | -| delegatedProperties.kt:19:31:19:51 | this | delegatedProperties.kt:19:31:19:51 | invoke | ThisAccess | -| delegatedProperties.kt:19:31:19:51 | varResource1$delegate | delegatedProperties.kt:18:5:40:5 | fn | LocalVariableDeclExpr | -| delegatedProperties.kt:19:31:19:51 | varResource1$delegate | delegatedProperties.kt:19:31:19:51 | <get-varResource1> | VarAccess | -| delegatedProperties.kt:19:31:19:51 | varResource1$delegate | delegatedProperties.kt:19:31:19:51 | <set-varResource1> | VarAccess | +| delegatedProperties.kt:19:34:19:51 | ...::... | delegatedProperties.kt:19:34:19:51 | <get-varResource1> | PropertyRefExpr | +| delegatedProperties.kt:19:34:19:51 | ...::... | delegatedProperties.kt:19:34:19:51 | <set-varResource1> | PropertyRefExpr | +| delegatedProperties.kt:19:34:19:51 | <get-varResource1>(...) | delegatedProperties.kt:19:34:19:51 | get | MethodCall | +| delegatedProperties.kt:19:34:19:51 | <get-varResource1>(...) | delegatedProperties.kt:19:34:19:51 | get | MethodCall | +| delegatedProperties.kt:19:34:19:51 | <set-varResource1>(...) | delegatedProperties.kt:19:34:19:51 | set | MethodCall | +| delegatedProperties.kt:19:34:19:51 | <set-varResource1>(...) | delegatedProperties.kt:19:34:19:51 | set | MethodCall | +| delegatedProperties.kt:19:34:19:51 | Integer | delegatedProperties.kt:19:34:19:51 | <get-varResource1> | TypeAccess | +| delegatedProperties.kt:19:34:19:51 | Integer | delegatedProperties.kt:19:34:19:51 | <set-varResource1> | TypeAccess | +| delegatedProperties.kt:19:34:19:51 | KMutableProperty0<Integer> | delegatedProperties.kt:19:34:19:51 | <get-varResource1> | TypeAccess | +| delegatedProperties.kt:19:34:19:51 | KMutableProperty0<Integer> | delegatedProperties.kt:19:34:19:51 | <set-varResource1> | TypeAccess | +| delegatedProperties.kt:19:34:19:51 | Object | delegatedProperties.kt:19:34:19:51 | get | TypeAccess | +| delegatedProperties.kt:19:34:19:51 | Object | delegatedProperties.kt:19:34:19:51 | get | TypeAccess | +| delegatedProperties.kt:19:34:19:51 | Object | delegatedProperties.kt:19:34:19:51 | set | TypeAccess | +| delegatedProperties.kt:19:34:19:51 | Object | delegatedProperties.kt:19:34:19:51 | set | TypeAccess | +| delegatedProperties.kt:19:34:19:51 | Unit | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:19:34:19:51 | a0 | delegatedProperties.kt:19:34:19:51 | set | VarAccess | +| delegatedProperties.kt:19:34:19:51 | a0 | delegatedProperties.kt:19:34:19:51 | set | VarAccess | +| delegatedProperties.kt:19:34:19:51 | get(...) | delegatedProperties.kt:19:34:19:51 | invoke | MethodCall | +| delegatedProperties.kt:19:34:19:51 | get(...) | delegatedProperties.kt:19:34:19:51 | invoke | MethodCall | +| delegatedProperties.kt:19:34:19:51 | getValue(...) | delegatedProperties.kt:19:34:19:51 | <get-varResource1> | MethodCall | +| delegatedProperties.kt:19:34:19:51 | int | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:19:34:19:51 | int | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:19:34:19:51 | new (...) | delegatedProperties.kt:19:34:19:51 | get | ClassInstanceExpr | +| delegatedProperties.kt:19:34:19:51 | new (...) | delegatedProperties.kt:19:34:19:51 | get | ClassInstanceExpr | +| delegatedProperties.kt:19:34:19:51 | new (...) | delegatedProperties.kt:19:34:19:51 | set | ClassInstanceExpr | +| delegatedProperties.kt:19:34:19:51 | new (...) | delegatedProperties.kt:19:34:19:51 | set | ClassInstanceExpr | +| delegatedProperties.kt:19:34:19:51 | setValue(...) | delegatedProperties.kt:19:34:19:51 | <set-varResource1> | MethodCall | +| delegatedProperties.kt:19:34:19:51 | this | delegatedProperties.kt:19:34:19:51 | invoke | ThisAccess | +| delegatedProperties.kt:19:34:19:51 | this | delegatedProperties.kt:19:34:19:51 | invoke | ThisAccess | +| delegatedProperties.kt:19:34:19:51 | varResource1$delegate | delegatedProperties.kt:18:5:40:5 | fn | LocalVariableDeclExpr | +| delegatedProperties.kt:19:34:19:51 | varResource1$delegate | delegatedProperties.kt:19:34:19:51 | <get-varResource1> | VarAccess | +| delegatedProperties.kt:19:34:19:51 | varResource1$delegate | delegatedProperties.kt:19:34:19:51 | <set-varResource1> | VarAccess | | delegatedProperties.kt:19:34:19:51 | ResourceDelegate | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | | delegatedProperties.kt:19:34:19:51 | new ResourceDelegate(...) | delegatedProperties.kt:18:5:40:5 | fn | ClassInstanceExpr | -| delegatedProperties.kt:19:34:19:51 | value | delegatedProperties.kt:19:31:19:51 | <set-varResource1> | VarAccess | +| delegatedProperties.kt:19:34:19:51 | value | delegatedProperties.kt:19:34:19:51 | <set-varResource1> | VarAccess | | delegatedProperties.kt:20:9:20:29 | ConsoleKt | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | | delegatedProperties.kt:20:9:20:29 | println(...) | delegatedProperties.kt:18:5:40:5 | fn | MethodCall | | delegatedProperties.kt:20:17:20:28 | <get-varResource1>(...) | delegatedProperties.kt:18:5:40:5 | fn | MethodCall | | delegatedProperties.kt:20:17:20:28 | Object | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | | delegatedProperties.kt:20:17:20:28 | new (...) | delegatedProperties.kt:18:5:40:5 | fn | ClassInstanceExpr | -| delegatedProperties.kt:21:9:21:20 | <set-varResource1>(...) | delegatedProperties.kt:18:5:40:5 | fn | MethodCall | -| delegatedProperties.kt:21:9:21:20 | Object | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | -| delegatedProperties.kt:21:9:21:20 | new (...) | delegatedProperties.kt:18:5:40:5 | fn | ClassInstanceExpr | +| delegatedProperties.kt:21:9:21:24 | <set-varResource1>(...) | delegatedProperties.kt:18:5:40:5 | fn | MethodCall | +| delegatedProperties.kt:21:9:21:24 | Object | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | +| delegatedProperties.kt:21:9:21:24 | new (...) | delegatedProperties.kt:18:5:40:5 | fn | ClassInstanceExpr | | delegatedProperties.kt:21:24:21:24 | 2 | delegatedProperties.kt:18:5:40:5 | fn | IntegerLiteral | -| delegatedProperties.kt:23:26:23:31 | ...::... | delegatedProperties.kt:23:26:23:31 | <get-name> | PropertyRefExpr | -| delegatedProperties.kt:23:26:23:31 | <get-name>(...) | delegatedProperties.kt:23:26:23:31 | get | MethodCall | -| delegatedProperties.kt:23:26:23:31 | KProperty0<String> | delegatedProperties.kt:23:26:23:31 | <get-name> | TypeAccess | -| delegatedProperties.kt:23:26:23:31 | MapAccessorsKt | delegatedProperties.kt:23:26:23:31 | <get-name> | TypeAccess | -| delegatedProperties.kt:23:26:23:31 | Object | delegatedProperties.kt:23:26:23:31 | <get-name> | TypeAccess | -| delegatedProperties.kt:23:26:23:31 | Object | delegatedProperties.kt:23:26:23:31 | get | TypeAccess | -| delegatedProperties.kt:23:26:23:31 | String | delegatedProperties.kt:23:26:23:31 | <get-name> | TypeAccess | -| delegatedProperties.kt:23:26:23:31 | String | delegatedProperties.kt:23:26:23:31 | <get-name> | TypeAccess | -| delegatedProperties.kt:23:26:23:31 | String | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:23:26:23:31 | get(...) | delegatedProperties.kt:23:26:23:31 | invoke | MethodCall | -| delegatedProperties.kt:23:26:23:31 | getValue(...) | delegatedProperties.kt:23:26:23:31 | <get-name> | MethodCall | -| delegatedProperties.kt:23:26:23:31 | name$delegate | delegatedProperties.kt:18:5:40:5 | fn | LocalVariableDeclExpr | -| delegatedProperties.kt:23:26:23:31 | name$delegate | delegatedProperties.kt:23:26:23:31 | <get-name> | VarAccess | -| delegatedProperties.kt:23:26:23:31 | new (...) | delegatedProperties.kt:23:26:23:31 | get | ClassInstanceExpr | -| delegatedProperties.kt:23:26:23:31 | this | delegatedProperties.kt:23:26:23:31 | invoke | ThisAccess | +| delegatedProperties.kt:23:29:23:31 | ...::... | delegatedProperties.kt:23:29:23:31 | <get-name> | PropertyRefExpr | +| delegatedProperties.kt:23:29:23:31 | <get-name>(...) | delegatedProperties.kt:23:29:23:31 | get | MethodCall | +| delegatedProperties.kt:23:29:23:31 | KProperty0<String> | delegatedProperties.kt:23:29:23:31 | <get-name> | TypeAccess | +| delegatedProperties.kt:23:29:23:31 | MapAccessorsKt | delegatedProperties.kt:23:29:23:31 | <get-name> | TypeAccess | +| delegatedProperties.kt:23:29:23:31 | Object | delegatedProperties.kt:23:29:23:31 | <get-name> | TypeAccess | +| delegatedProperties.kt:23:29:23:31 | Object | delegatedProperties.kt:23:29:23:31 | get | TypeAccess | +| delegatedProperties.kt:23:29:23:31 | String | delegatedProperties.kt:23:29:23:31 | <get-name> | TypeAccess | +| delegatedProperties.kt:23:29:23:31 | String | delegatedProperties.kt:23:29:23:31 | <get-name> | TypeAccess | +| delegatedProperties.kt:23:29:23:31 | String | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:23:29:23:31 | get(...) | delegatedProperties.kt:23:29:23:31 | invoke | MethodCall | +| delegatedProperties.kt:23:29:23:31 | getValue(...) | delegatedProperties.kt:23:29:23:31 | <get-name> | MethodCall | +| delegatedProperties.kt:23:29:23:31 | name$delegate | delegatedProperties.kt:18:5:40:5 | fn | LocalVariableDeclExpr | +| delegatedProperties.kt:23:29:23:31 | name$delegate | delegatedProperties.kt:23:29:23:31 | <get-name> | VarAccess | +| delegatedProperties.kt:23:29:23:31 | new (...) | delegatedProperties.kt:23:29:23:31 | get | ClassInstanceExpr | +| delegatedProperties.kt:23:29:23:31 | this | delegatedProperties.kt:23:29:23:31 | invoke | ThisAccess | | delegatedProperties.kt:23:29:23:31 | map | delegatedProperties.kt:18:5:40:5 | fn | VarAccess | | delegatedProperties.kt:25:9:31:9 | Integer | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:25:9:31:9 | Object | file://:0:0:0:0 | <none> | TypeAccess | @@ -147,13 +147,13 @@ | delegatedProperties.kt:26:13:26:28 | this.curValue | delegatedProperties.kt:26:13:26:28 | getCurValue | VarAccess | | delegatedProperties.kt:26:13:26:28 | this.curValue | delegatedProperties.kt:26:13:26:28 | setCurValue | VarAccess | | delegatedProperties.kt:26:28:26:28 | 0 | delegatedProperties.kt:25:64:31:9 | | IntegerLiteral | -| delegatedProperties.kt:27:22:27:88 | int | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:27:13:27:88 | int | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:27:35:27:47 | Object | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:27:50:27:71 | ? ... | file://:0:0:0:0 | <none> | WildcardTypeAccess | | delegatedProperties.kt:27:50:27:71 | KProperty<?> | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:27:81:27:88 | getCurValue(...) | delegatedProperties.kt:27:22:27:88 | getValue | MethodCall | -| delegatedProperties.kt:27:81:27:88 | this | delegatedProperties.kt:27:22:27:88 | getValue | ThisAccess | -| delegatedProperties.kt:28:22:30:13 | Unit | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:27:81:27:88 | getCurValue(...) | delegatedProperties.kt:27:13:27:88 | getValue | MethodCall | +| delegatedProperties.kt:27:81:27:88 | this | delegatedProperties.kt:27:13:27:88 | getValue | ThisAccess | +| delegatedProperties.kt:28:13:30:13 | Unit | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:28:35:28:47 | Object | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:28:50:28:71 | ? ... | file://:0:0:0:0 | <none> | WildcardTypeAccess | | delegatedProperties.kt:28:50:28:71 | KProperty<?> | file://:0:0:0:0 | <none> | TypeAccess | @@ -161,142 +161,142 @@ | delegatedProperties.kt:29:17:29:24 | setCurValue(...) | delegatedProperties.kt:28:22:30:13 | setValue | MethodCall | | delegatedProperties.kt:29:17:29:24 | this | delegatedProperties.kt:28:22:30:13 | setValue | ThisAccess | | delegatedProperties.kt:29:28:29:32 | value | delegatedProperties.kt:28:22:30:13 | setValue | VarAccess | -| delegatedProperties.kt:33:27:33:47 | ...::... | delegatedProperties.kt:33:27:33:47 | <get-readOnly> | PropertyRefExpr | -| delegatedProperties.kt:33:27:33:47 | <get-readOnly>(...) | delegatedProperties.kt:33:27:33:47 | get | MethodCall | -| delegatedProperties.kt:33:27:33:47 | Integer | delegatedProperties.kt:33:27:33:47 | <get-readOnly> | TypeAccess | -| delegatedProperties.kt:33:27:33:47 | KProperty0<Integer> | delegatedProperties.kt:33:27:33:47 | <get-readOnly> | TypeAccess | -| delegatedProperties.kt:33:27:33:47 | Object | delegatedProperties.kt:33:27:33:47 | get | TypeAccess | -| delegatedProperties.kt:33:27:33:47 | get(...) | delegatedProperties.kt:33:27:33:47 | invoke | MethodCall | -| delegatedProperties.kt:33:27:33:47 | getValue(...) | delegatedProperties.kt:33:27:33:47 | <get-readOnly> | MethodCall | -| delegatedProperties.kt:33:27:33:47 | int | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:33:27:33:47 | new (...) | delegatedProperties.kt:33:27:33:47 | get | ClassInstanceExpr | -| delegatedProperties.kt:33:27:33:47 | readOnly$delegate | delegatedProperties.kt:18:5:40:5 | fn | LocalVariableDeclExpr | -| delegatedProperties.kt:33:27:33:47 | readOnly$delegate | delegatedProperties.kt:33:27:33:47 | <get-readOnly> | VarAccess | -| delegatedProperties.kt:33:27:33:47 | this | delegatedProperties.kt:33:27:33:47 | invoke | ThisAccess | +| delegatedProperties.kt:33:30:33:47 | ...::... | delegatedProperties.kt:33:30:33:47 | <get-readOnly> | PropertyRefExpr | +| delegatedProperties.kt:33:30:33:47 | <get-readOnly>(...) | delegatedProperties.kt:33:30:33:47 | get | MethodCall | +| delegatedProperties.kt:33:30:33:47 | Integer | delegatedProperties.kt:33:30:33:47 | <get-readOnly> | TypeAccess | +| delegatedProperties.kt:33:30:33:47 | KProperty0<Integer> | delegatedProperties.kt:33:30:33:47 | <get-readOnly> | TypeAccess | +| delegatedProperties.kt:33:30:33:47 | Object | delegatedProperties.kt:33:30:33:47 | get | TypeAccess | +| delegatedProperties.kt:33:30:33:47 | get(...) | delegatedProperties.kt:33:30:33:47 | invoke | MethodCall | +| delegatedProperties.kt:33:30:33:47 | getValue(...) | delegatedProperties.kt:33:30:33:47 | <get-readOnly> | MethodCall | +| delegatedProperties.kt:33:30:33:47 | int | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:33:30:33:47 | new (...) | delegatedProperties.kt:33:30:33:47 | get | ClassInstanceExpr | +| delegatedProperties.kt:33:30:33:47 | readOnly$delegate | delegatedProperties.kt:18:5:40:5 | fn | LocalVariableDeclExpr | +| delegatedProperties.kt:33:30:33:47 | readOnly$delegate | delegatedProperties.kt:33:30:33:47 | <get-readOnly> | VarAccess | +| delegatedProperties.kt:33:30:33:47 | this | delegatedProperties.kt:33:30:33:47 | invoke | ThisAccess | | delegatedProperties.kt:33:30:33:47 | Object | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | | delegatedProperties.kt:33:30:33:47 | new (...) | delegatedProperties.kt:18:5:40:5 | fn | ClassInstanceExpr | | delegatedProperties.kt:33:30:33:47 | resourceDelegate(...) | delegatedProperties.kt:18:5:40:5 | fn | MethodCall | -| delegatedProperties.kt:34:28:34:48 | ...::... | delegatedProperties.kt:34:28:34:48 | <get-readWrite> | PropertyRefExpr | -| delegatedProperties.kt:34:28:34:48 | ...::... | delegatedProperties.kt:34:28:34:48 | <set-readWrite> | PropertyRefExpr | -| delegatedProperties.kt:34:28:34:48 | <get-readWrite>(...) | delegatedProperties.kt:34:28:34:48 | get | MethodCall | -| delegatedProperties.kt:34:28:34:48 | <get-readWrite>(...) | delegatedProperties.kt:34:28:34:48 | get | MethodCall | -| delegatedProperties.kt:34:28:34:48 | <set-readWrite>(...) | delegatedProperties.kt:34:28:34:48 | set | MethodCall | -| delegatedProperties.kt:34:28:34:48 | <set-readWrite>(...) | delegatedProperties.kt:34:28:34:48 | set | MethodCall | -| delegatedProperties.kt:34:28:34:48 | Integer | delegatedProperties.kt:34:28:34:48 | <get-readWrite> | TypeAccess | -| delegatedProperties.kt:34:28:34:48 | Integer | delegatedProperties.kt:34:28:34:48 | <set-readWrite> | TypeAccess | -| delegatedProperties.kt:34:28:34:48 | KMutableProperty0<Integer> | delegatedProperties.kt:34:28:34:48 | <get-readWrite> | TypeAccess | -| delegatedProperties.kt:34:28:34:48 | KMutableProperty0<Integer> | delegatedProperties.kt:34:28:34:48 | <set-readWrite> | TypeAccess | -| delegatedProperties.kt:34:28:34:48 | Object | delegatedProperties.kt:34:28:34:48 | get | TypeAccess | -| delegatedProperties.kt:34:28:34:48 | Object | delegatedProperties.kt:34:28:34:48 | get | TypeAccess | -| delegatedProperties.kt:34:28:34:48 | Object | delegatedProperties.kt:34:28:34:48 | set | TypeAccess | -| delegatedProperties.kt:34:28:34:48 | Object | delegatedProperties.kt:34:28:34:48 | set | TypeAccess | -| delegatedProperties.kt:34:28:34:48 | Unit | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:34:28:34:48 | a0 | delegatedProperties.kt:34:28:34:48 | set | VarAccess | -| delegatedProperties.kt:34:28:34:48 | a0 | delegatedProperties.kt:34:28:34:48 | set | VarAccess | -| delegatedProperties.kt:34:28:34:48 | get(...) | delegatedProperties.kt:34:28:34:48 | invoke | MethodCall | -| delegatedProperties.kt:34:28:34:48 | get(...) | delegatedProperties.kt:34:28:34:48 | invoke | MethodCall | -| delegatedProperties.kt:34:28:34:48 | getValue(...) | delegatedProperties.kt:34:28:34:48 | <get-readWrite> | MethodCall | -| delegatedProperties.kt:34:28:34:48 | int | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:34:28:34:48 | int | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:34:28:34:48 | new (...) | delegatedProperties.kt:34:28:34:48 | get | ClassInstanceExpr | -| delegatedProperties.kt:34:28:34:48 | new (...) | delegatedProperties.kt:34:28:34:48 | get | ClassInstanceExpr | -| delegatedProperties.kt:34:28:34:48 | new (...) | delegatedProperties.kt:34:28:34:48 | set | ClassInstanceExpr | -| delegatedProperties.kt:34:28:34:48 | new (...) | delegatedProperties.kt:34:28:34:48 | set | ClassInstanceExpr | -| delegatedProperties.kt:34:28:34:48 | readWrite$delegate | delegatedProperties.kt:18:5:40:5 | fn | LocalVariableDeclExpr | -| delegatedProperties.kt:34:28:34:48 | readWrite$delegate | delegatedProperties.kt:34:28:34:48 | <get-readWrite> | VarAccess | -| delegatedProperties.kt:34:28:34:48 | readWrite$delegate | delegatedProperties.kt:34:28:34:48 | <set-readWrite> | VarAccess | -| delegatedProperties.kt:34:28:34:48 | setValue(...) | delegatedProperties.kt:34:28:34:48 | <set-readWrite> | MethodCall | -| delegatedProperties.kt:34:28:34:48 | this | delegatedProperties.kt:34:28:34:48 | invoke | ThisAccess | -| delegatedProperties.kt:34:28:34:48 | this | delegatedProperties.kt:34:28:34:48 | invoke | ThisAccess | +| delegatedProperties.kt:34:31:34:48 | ...::... | delegatedProperties.kt:34:31:34:48 | <get-readWrite> | PropertyRefExpr | +| delegatedProperties.kt:34:31:34:48 | ...::... | delegatedProperties.kt:34:31:34:48 | <set-readWrite> | PropertyRefExpr | +| delegatedProperties.kt:34:31:34:48 | <get-readWrite>(...) | delegatedProperties.kt:34:31:34:48 | get | MethodCall | +| delegatedProperties.kt:34:31:34:48 | <get-readWrite>(...) | delegatedProperties.kt:34:31:34:48 | get | MethodCall | +| delegatedProperties.kt:34:31:34:48 | <set-readWrite>(...) | delegatedProperties.kt:34:31:34:48 | set | MethodCall | +| delegatedProperties.kt:34:31:34:48 | <set-readWrite>(...) | delegatedProperties.kt:34:31:34:48 | set | MethodCall | +| delegatedProperties.kt:34:31:34:48 | Integer | delegatedProperties.kt:34:31:34:48 | <get-readWrite> | TypeAccess | +| delegatedProperties.kt:34:31:34:48 | Integer | delegatedProperties.kt:34:31:34:48 | <set-readWrite> | TypeAccess | +| delegatedProperties.kt:34:31:34:48 | KMutableProperty0<Integer> | delegatedProperties.kt:34:31:34:48 | <get-readWrite> | TypeAccess | +| delegatedProperties.kt:34:31:34:48 | KMutableProperty0<Integer> | delegatedProperties.kt:34:31:34:48 | <set-readWrite> | TypeAccess | +| delegatedProperties.kt:34:31:34:48 | Object | delegatedProperties.kt:34:31:34:48 | get | TypeAccess | +| delegatedProperties.kt:34:31:34:48 | Object | delegatedProperties.kt:34:31:34:48 | get | TypeAccess | +| delegatedProperties.kt:34:31:34:48 | Object | delegatedProperties.kt:34:31:34:48 | set | TypeAccess | +| delegatedProperties.kt:34:31:34:48 | Object | delegatedProperties.kt:34:31:34:48 | set | TypeAccess | +| delegatedProperties.kt:34:31:34:48 | Unit | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:34:31:34:48 | a0 | delegatedProperties.kt:34:31:34:48 | set | VarAccess | +| delegatedProperties.kt:34:31:34:48 | a0 | delegatedProperties.kt:34:31:34:48 | set | VarAccess | +| delegatedProperties.kt:34:31:34:48 | get(...) | delegatedProperties.kt:34:31:34:48 | invoke | MethodCall | +| delegatedProperties.kt:34:31:34:48 | get(...) | delegatedProperties.kt:34:31:34:48 | invoke | MethodCall | +| delegatedProperties.kt:34:31:34:48 | getValue(...) | delegatedProperties.kt:34:31:34:48 | <get-readWrite> | MethodCall | +| delegatedProperties.kt:34:31:34:48 | int | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:34:31:34:48 | int | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:34:31:34:48 | new (...) | delegatedProperties.kt:34:31:34:48 | get | ClassInstanceExpr | +| delegatedProperties.kt:34:31:34:48 | new (...) | delegatedProperties.kt:34:31:34:48 | get | ClassInstanceExpr | +| delegatedProperties.kt:34:31:34:48 | new (...) | delegatedProperties.kt:34:31:34:48 | set | ClassInstanceExpr | +| delegatedProperties.kt:34:31:34:48 | new (...) | delegatedProperties.kt:34:31:34:48 | set | ClassInstanceExpr | +| delegatedProperties.kt:34:31:34:48 | readWrite$delegate | delegatedProperties.kt:18:5:40:5 | fn | LocalVariableDeclExpr | +| delegatedProperties.kt:34:31:34:48 | readWrite$delegate | delegatedProperties.kt:34:31:34:48 | <get-readWrite> | VarAccess | +| delegatedProperties.kt:34:31:34:48 | readWrite$delegate | delegatedProperties.kt:34:31:34:48 | <set-readWrite> | VarAccess | +| delegatedProperties.kt:34:31:34:48 | setValue(...) | delegatedProperties.kt:34:31:34:48 | <set-readWrite> | MethodCall | +| delegatedProperties.kt:34:31:34:48 | this | delegatedProperties.kt:34:31:34:48 | invoke | ThisAccess | +| delegatedProperties.kt:34:31:34:48 | this | delegatedProperties.kt:34:31:34:48 | invoke | ThisAccess | | delegatedProperties.kt:34:31:34:48 | Object | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | | delegatedProperties.kt:34:31:34:48 | new (...) | delegatedProperties.kt:18:5:40:5 | fn | ClassInstanceExpr | | delegatedProperties.kt:34:31:34:48 | resourceDelegate(...) | delegatedProperties.kt:18:5:40:5 | fn | MethodCall | -| delegatedProperties.kt:34:31:34:48 | value | delegatedProperties.kt:34:28:34:48 | <set-readWrite> | VarAccess | +| delegatedProperties.kt:34:31:34:48 | value | delegatedProperties.kt:34:31:34:48 | <set-readWrite> | VarAccess | | delegatedProperties.kt:36:9:36:29 | ConsoleKt | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | | delegatedProperties.kt:36:9:36:29 | println(...) | delegatedProperties.kt:18:5:40:5 | fn | MethodCall | | delegatedProperties.kt:36:17:36:28 | getVarResource0(...) | delegatedProperties.kt:18:5:40:5 | fn | MethodCall | | delegatedProperties.kt:36:17:36:28 | this | delegatedProperties.kt:18:5:40:5 | fn | ThisAccess | -| delegatedProperties.kt:37:9:37:20 | setVarResource0(...) | delegatedProperties.kt:18:5:40:5 | fn | MethodCall | -| delegatedProperties.kt:37:9:37:20 | this | delegatedProperties.kt:18:5:40:5 | fn | ThisAccess | +| delegatedProperties.kt:37:9:37:24 | setVarResource0(...) | delegatedProperties.kt:18:5:40:5 | fn | MethodCall | +| delegatedProperties.kt:37:9:37:24 | this | delegatedProperties.kt:18:5:40:5 | fn | ThisAccess | | delegatedProperties.kt:37:24:37:24 | 3 | delegatedProperties.kt:18:5:40:5 | fn | IntegerLiteral | -| delegatedProperties.kt:39:31:39:51 | ...::... | delegatedProperties.kt:18:5:40:5 | fn | PropertyRefExpr | -| delegatedProperties.kt:39:31:39:51 | ...::... | delegatedProperties.kt:39:31:39:51 | <get-varResource2> | PropertyRefExpr | -| delegatedProperties.kt:39:31:39:51 | <get-varResource2>(...) | delegatedProperties.kt:39:31:39:51 | get | MethodCall | -| delegatedProperties.kt:39:31:39:51 | <get-varResource2>(...) | delegatedProperties.kt:39:31:39:51 | get | MethodCall | -| delegatedProperties.kt:39:31:39:51 | Integer | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | -| delegatedProperties.kt:39:31:39:51 | Integer | delegatedProperties.kt:39:31:39:51 | <get-varResource2> | TypeAccess | -| delegatedProperties.kt:39:31:39:51 | KProperty0<Integer> | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | -| delegatedProperties.kt:39:31:39:51 | KProperty0<Integer> | delegatedProperties.kt:39:31:39:51 | <get-varResource2> | TypeAccess | -| delegatedProperties.kt:39:31:39:51 | Object | delegatedProperties.kt:39:31:39:51 | get | TypeAccess | -| delegatedProperties.kt:39:31:39:51 | Object | delegatedProperties.kt:39:31:39:51 | get | TypeAccess | -| delegatedProperties.kt:39:31:39:51 | get(...) | delegatedProperties.kt:39:31:39:51 | invoke | MethodCall | -| delegatedProperties.kt:39:31:39:51 | get(...) | delegatedProperties.kt:39:31:39:51 | invoke | MethodCall | -| delegatedProperties.kt:39:31:39:51 | getValue(...) | delegatedProperties.kt:39:31:39:51 | <get-varResource2> | MethodCall | -| delegatedProperties.kt:39:31:39:51 | int | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:39:31:39:51 | new (...) | delegatedProperties.kt:39:31:39:51 | get | ClassInstanceExpr | -| delegatedProperties.kt:39:31:39:51 | new (...) | delegatedProperties.kt:39:31:39:51 | get | ClassInstanceExpr | -| delegatedProperties.kt:39:31:39:51 | provideDelegate(...) | delegatedProperties.kt:18:5:40:5 | fn | MethodCall | -| delegatedProperties.kt:39:31:39:51 | this | delegatedProperties.kt:39:31:39:51 | invoke | ThisAccess | -| delegatedProperties.kt:39:31:39:51 | this | delegatedProperties.kt:39:31:39:51 | invoke | ThisAccess | -| delegatedProperties.kt:39:31:39:51 | varResource2$delegate | delegatedProperties.kt:18:5:40:5 | fn | LocalVariableDeclExpr | -| delegatedProperties.kt:39:31:39:51 | varResource2$delegate | delegatedProperties.kt:39:31:39:51 | <get-varResource2> | VarAccess | +| delegatedProperties.kt:39:34:39:51 | ...::... | delegatedProperties.kt:18:5:40:5 | fn | PropertyRefExpr | +| delegatedProperties.kt:39:34:39:51 | ...::... | delegatedProperties.kt:39:34:39:51 | <get-varResource2> | PropertyRefExpr | +| delegatedProperties.kt:39:34:39:51 | <get-varResource2>(...) | delegatedProperties.kt:39:34:39:51 | get | MethodCall | +| delegatedProperties.kt:39:34:39:51 | <get-varResource2>(...) | delegatedProperties.kt:39:34:39:51 | get | MethodCall | +| delegatedProperties.kt:39:34:39:51 | Integer | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | +| delegatedProperties.kt:39:34:39:51 | Integer | delegatedProperties.kt:39:34:39:51 | <get-varResource2> | TypeAccess | +| delegatedProperties.kt:39:34:39:51 | KProperty0<Integer> | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | +| delegatedProperties.kt:39:34:39:51 | KProperty0<Integer> | delegatedProperties.kt:39:34:39:51 | <get-varResource2> | TypeAccess | +| delegatedProperties.kt:39:34:39:51 | Object | delegatedProperties.kt:39:34:39:51 | get | TypeAccess | +| delegatedProperties.kt:39:34:39:51 | Object | delegatedProperties.kt:39:34:39:51 | get | TypeAccess | +| delegatedProperties.kt:39:34:39:51 | get(...) | delegatedProperties.kt:39:34:39:51 | invoke | MethodCall | +| delegatedProperties.kt:39:34:39:51 | get(...) | delegatedProperties.kt:39:34:39:51 | invoke | MethodCall | +| delegatedProperties.kt:39:34:39:51 | getValue(...) | delegatedProperties.kt:39:34:39:51 | <get-varResource2> | MethodCall | +| delegatedProperties.kt:39:34:39:51 | int | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:39:34:39:51 | new (...) | delegatedProperties.kt:39:34:39:51 | get | ClassInstanceExpr | +| delegatedProperties.kt:39:34:39:51 | new (...) | delegatedProperties.kt:39:34:39:51 | get | ClassInstanceExpr | +| delegatedProperties.kt:39:34:39:51 | provideDelegate(...) | delegatedProperties.kt:18:5:40:5 | fn | MethodCall | +| delegatedProperties.kt:39:34:39:51 | this | delegatedProperties.kt:39:34:39:51 | invoke | ThisAccess | +| delegatedProperties.kt:39:34:39:51 | this | delegatedProperties.kt:39:34:39:51 | invoke | ThisAccess | +| delegatedProperties.kt:39:34:39:51 | varResource2$delegate | delegatedProperties.kt:18:5:40:5 | fn | LocalVariableDeclExpr | +| delegatedProperties.kt:39:34:39:51 | varResource2$delegate | delegatedProperties.kt:39:34:39:51 | <get-varResource2> | VarAccess | | delegatedProperties.kt:39:34:39:51 | DelegateProvider | delegatedProperties.kt:18:5:40:5 | fn | TypeAccess | | delegatedProperties.kt:39:34:39:51 | new DelegateProvider(...) | delegatedProperties.kt:18:5:40:5 | fn | ClassInstanceExpr | -| delegatedProperties.kt:42:27:42:47 | ...::... | delegatedProperties.kt:42:27:42:47 | getVarResource0 | PropertyRefExpr | -| delegatedProperties.kt:42:27:42:47 | ...::... | delegatedProperties.kt:42:27:42:47 | setVarResource0 | PropertyRefExpr | -| delegatedProperties.kt:42:27:42:47 | ...=... | delegatedProperties.kt:17:1:43:1 | Owner | KtInitializerAssignExpr | -| delegatedProperties.kt:42:27:42:47 | Integer | delegatedProperties.kt:42:27:42:47 | getVarResource0 | TypeAccess | -| delegatedProperties.kt:42:27:42:47 | Integer | delegatedProperties.kt:42:27:42:47 | setVarResource0 | TypeAccess | -| delegatedProperties.kt:42:27:42:47 | KMutableProperty1<Owner,Integer> | delegatedProperties.kt:42:27:42:47 | getVarResource0 | TypeAccess | -| delegatedProperties.kt:42:27:42:47 | KMutableProperty1<Owner,Integer> | delegatedProperties.kt:42:27:42:47 | setVarResource0 | TypeAccess | -| delegatedProperties.kt:42:27:42:47 | Owner | delegatedProperties.kt:42:27:42:47 | getVarResource0 | TypeAccess | -| delegatedProperties.kt:42:27:42:47 | Owner | delegatedProperties.kt:42:27:42:47 | setVarResource0 | TypeAccess | -| delegatedProperties.kt:42:27:42:47 | ResourceDelegate | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:42:27:42:47 | Unit | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:42:27:42:47 | a0 | delegatedProperties.kt:42:27:42:47 | get | VarAccess | -| delegatedProperties.kt:42:27:42:47 | a0 | delegatedProperties.kt:42:27:42:47 | get | VarAccess | -| delegatedProperties.kt:42:27:42:47 | a0 | delegatedProperties.kt:42:27:42:47 | invoke | VarAccess | -| delegatedProperties.kt:42:27:42:47 | a0 | delegatedProperties.kt:42:27:42:47 | invoke | VarAccess | -| delegatedProperties.kt:42:27:42:47 | a0 | delegatedProperties.kt:42:27:42:47 | set | VarAccess | -| delegatedProperties.kt:42:27:42:47 | a0 | delegatedProperties.kt:42:27:42:47 | set | VarAccess | -| delegatedProperties.kt:42:27:42:47 | a1 | delegatedProperties.kt:42:27:42:47 | set | VarAccess | -| delegatedProperties.kt:42:27:42:47 | a1 | delegatedProperties.kt:42:27:42:47 | set | VarAccess | -| delegatedProperties.kt:42:27:42:47 | get(...) | delegatedProperties.kt:42:27:42:47 | invoke | MethodCall | -| delegatedProperties.kt:42:27:42:47 | get(...) | delegatedProperties.kt:42:27:42:47 | invoke | MethodCall | -| delegatedProperties.kt:42:27:42:47 | getValue(...) | delegatedProperties.kt:42:27:42:47 | getVarResource0 | MethodCall | -| delegatedProperties.kt:42:27:42:47 | getVarResource0(...) | delegatedProperties.kt:42:27:42:47 | get | MethodCall | -| delegatedProperties.kt:42:27:42:47 | getVarResource0(...) | delegatedProperties.kt:42:27:42:47 | get | MethodCall | -| delegatedProperties.kt:42:27:42:47 | int | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:42:27:42:47 | int | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:42:27:42:47 | setValue(...) | delegatedProperties.kt:42:27:42:47 | setVarResource0 | MethodCall | -| delegatedProperties.kt:42:27:42:47 | setVarResource0(...) | delegatedProperties.kt:42:27:42:47 | set | MethodCall | -| delegatedProperties.kt:42:27:42:47 | setVarResource0(...) | delegatedProperties.kt:42:27:42:47 | set | MethodCall | -| delegatedProperties.kt:42:27:42:47 | this | delegatedProperties.kt:42:27:42:47 | getVarResource0 | ThisAccess | -| delegatedProperties.kt:42:27:42:47 | this | delegatedProperties.kt:42:27:42:47 | invoke | ThisAccess | -| delegatedProperties.kt:42:27:42:47 | this | delegatedProperties.kt:42:27:42:47 | invoke | ThisAccess | -| delegatedProperties.kt:42:27:42:47 | this | delegatedProperties.kt:42:27:42:47 | setVarResource0 | ThisAccess | -| delegatedProperties.kt:42:27:42:47 | this.varResource0$delegate | delegatedProperties.kt:42:27:42:47 | getVarResource0 | VarAccess | -| delegatedProperties.kt:42:27:42:47 | this.varResource0$delegate | delegatedProperties.kt:42:27:42:47 | setVarResource0 | VarAccess | -| delegatedProperties.kt:42:27:42:47 | varResource0$delegate | delegatedProperties.kt:17:1:43:1 | Owner | VarAccess | -| delegatedProperties.kt:42:30:42:47 | <set-?> | delegatedProperties.kt:42:27:42:47 | setVarResource0 | VarAccess | +| delegatedProperties.kt:42:30:42:47 | ...::... | delegatedProperties.kt:42:30:42:47 | getVarResource0 | PropertyRefExpr | +| delegatedProperties.kt:42:30:42:47 | ...::... | delegatedProperties.kt:42:30:42:47 | setVarResource0 | PropertyRefExpr | +| delegatedProperties.kt:42:30:42:47 | ...=... | delegatedProperties.kt:17:1:43:1 | Owner | KtInitializerAssignExpr | +| delegatedProperties.kt:42:30:42:47 | Integer | delegatedProperties.kt:42:30:42:47 | getVarResource0 | TypeAccess | +| delegatedProperties.kt:42:30:42:47 | Integer | delegatedProperties.kt:42:30:42:47 | setVarResource0 | TypeAccess | +| delegatedProperties.kt:42:30:42:47 | KMutableProperty1<Owner,Integer> | delegatedProperties.kt:42:30:42:47 | getVarResource0 | TypeAccess | +| delegatedProperties.kt:42:30:42:47 | KMutableProperty1<Owner,Integer> | delegatedProperties.kt:42:30:42:47 | setVarResource0 | TypeAccess | +| delegatedProperties.kt:42:30:42:47 | Owner | delegatedProperties.kt:42:30:42:47 | getVarResource0 | TypeAccess | +| delegatedProperties.kt:42:30:42:47 | Owner | delegatedProperties.kt:42:30:42:47 | setVarResource0 | TypeAccess | +| delegatedProperties.kt:42:30:42:47 | ResourceDelegate | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:42:30:42:47 | Unit | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:42:30:42:47 | a0 | delegatedProperties.kt:42:30:42:47 | get | VarAccess | +| delegatedProperties.kt:42:30:42:47 | a0 | delegatedProperties.kt:42:30:42:47 | get | VarAccess | +| delegatedProperties.kt:42:30:42:47 | a0 | delegatedProperties.kt:42:30:42:47 | invoke | VarAccess | +| delegatedProperties.kt:42:30:42:47 | a0 | delegatedProperties.kt:42:30:42:47 | invoke | VarAccess | +| delegatedProperties.kt:42:30:42:47 | a0 | delegatedProperties.kt:42:30:42:47 | set | VarAccess | +| delegatedProperties.kt:42:30:42:47 | a0 | delegatedProperties.kt:42:30:42:47 | set | VarAccess | +| delegatedProperties.kt:42:30:42:47 | a1 | delegatedProperties.kt:42:30:42:47 | set | VarAccess | +| delegatedProperties.kt:42:30:42:47 | a1 | delegatedProperties.kt:42:30:42:47 | set | VarAccess | +| delegatedProperties.kt:42:30:42:47 | get(...) | delegatedProperties.kt:42:30:42:47 | invoke | MethodCall | +| delegatedProperties.kt:42:30:42:47 | get(...) | delegatedProperties.kt:42:30:42:47 | invoke | MethodCall | +| delegatedProperties.kt:42:30:42:47 | getValue(...) | delegatedProperties.kt:42:30:42:47 | getVarResource0 | MethodCall | +| delegatedProperties.kt:42:30:42:47 | getVarResource0(...) | delegatedProperties.kt:42:30:42:47 | get | MethodCall | +| delegatedProperties.kt:42:30:42:47 | getVarResource0(...) | delegatedProperties.kt:42:30:42:47 | get | MethodCall | +| delegatedProperties.kt:42:30:42:47 | int | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:42:30:42:47 | int | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:42:30:42:47 | setValue(...) | delegatedProperties.kt:42:30:42:47 | setVarResource0 | MethodCall | +| delegatedProperties.kt:42:30:42:47 | setVarResource0(...) | delegatedProperties.kt:42:30:42:47 | set | MethodCall | +| delegatedProperties.kt:42:30:42:47 | setVarResource0(...) | delegatedProperties.kt:42:30:42:47 | set | MethodCall | +| delegatedProperties.kt:42:30:42:47 | this | delegatedProperties.kt:42:30:42:47 | getVarResource0 | ThisAccess | +| delegatedProperties.kt:42:30:42:47 | this | delegatedProperties.kt:42:30:42:47 | invoke | ThisAccess | +| delegatedProperties.kt:42:30:42:47 | this | delegatedProperties.kt:42:30:42:47 | invoke | ThisAccess | +| delegatedProperties.kt:42:30:42:47 | this | delegatedProperties.kt:42:30:42:47 | setVarResource0 | ThisAccess | +| delegatedProperties.kt:42:30:42:47 | this.varResource0$delegate | delegatedProperties.kt:42:30:42:47 | getVarResource0 | VarAccess | +| delegatedProperties.kt:42:30:42:47 | this.varResource0$delegate | delegatedProperties.kt:42:30:42:47 | setVarResource0 | VarAccess | +| delegatedProperties.kt:42:30:42:47 | varResource0$delegate | delegatedProperties.kt:17:1:43:1 | Owner | VarAccess | +| delegatedProperties.kt:42:30:42:47 | <set-?> | delegatedProperties.kt:42:30:42:47 | setVarResource0 | VarAccess | | delegatedProperties.kt:42:30:42:47 | ResourceDelegate | delegatedProperties.kt:17:1:43:1 | Owner | TypeAccess | | delegatedProperties.kt:42:30:42:47 | new ResourceDelegate(...) | delegatedProperties.kt:17:1:43:1 | Owner | ClassInstanceExpr | | delegatedProperties.kt:46:14:48:5 | int | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:46:27:46:41 | Owner | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:46:44:46:65 | ? ... | file://:0:0:0:0 | <none> | WildcardTypeAccess | | delegatedProperties.kt:46:44:46:65 | KProperty<?> | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:47:16:47:16 | 1 | delegatedProperties.kt:46:14:48:5 | getValue | IntegerLiteral | -| delegatedProperties.kt:49:14:50:5 | Unit | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:47:16:47:16 | 1 | delegatedProperties.kt:46:5:48:5 | getValue | IntegerLiteral | +| delegatedProperties.kt:49:5:50:5 | Unit | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:49:27:49:41 | Owner | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:49:44:49:65 | ? ... | file://:0:0:0:0 | <none> | WildcardTypeAccess | | delegatedProperties.kt:49:44:49:65 | KProperty<?> | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:49:68:49:78 | Integer | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:54:14:57:5 | ResourceDelegate | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:54:5:57:5 | ResourceDelegate | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:54:34:54:48 | Owner | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:54:51:54:68 | ? ... | file://:0:0:0:0 | <none> | WildcardTypeAccess | | delegatedProperties.kt:54:51:54:68 | KProperty<?> | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:56:16:56:33 | ResourceDelegate | delegatedProperties.kt:54:14:57:5 | provideDelegate | TypeAccess | -| delegatedProperties.kt:56:16:56:33 | new ResourceDelegate(...) | delegatedProperties.kt:54:14:57:5 | provideDelegate | ClassInstanceExpr | +| delegatedProperties.kt:56:16:56:33 | ResourceDelegate | delegatedProperties.kt:54:5:57:5 | provideDelegate | TypeAccess | +| delegatedProperties.kt:56:16:56:33 | new ResourceDelegate(...) | delegatedProperties.kt:54:5:57:5 | provideDelegate | ClassInstanceExpr | | delegatedProperties.kt:60:1:60:24 | ...=... | delegatedProperties.kt:0:0:0:0 | <clinit> | KtInitializerAssignExpr | | delegatedProperties.kt:60:1:60:24 | ...=... | delegatedProperties.kt:60:1:60:24 | setTopLevelInt | AssignExpr | | delegatedProperties.kt:60:1:60:24 | <set-?> | delegatedProperties.kt:60:1:60:24 | setTopLevelInt | VarAccess | @@ -311,23 +311,23 @@ | delegatedProperties.kt:60:1:60:24 | int | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:60:1:60:24 | int | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:60:24:60:24 | 0 | delegatedProperties.kt:0:0:0:0 | <clinit> | IntegerLiteral | -| delegatedProperties.kt:62:25:62:48 | ...=... | delegatedProperties.kt:62:1:62:49 | ClassWithDelegate | KtInitializerAssignExpr | -| delegatedProperties.kt:62:25:62:48 | anotherClassInt | delegatedProperties.kt:62:1:62:49 | ClassWithDelegate | VarAccess | -| delegatedProperties.kt:62:25:62:48 | anotherClassInt | delegatedProperties.kt:62:1:62:49 | ClassWithDelegate | VarAccess | +| delegatedProperties.kt:62:25:62:48 | ...=... | delegatedProperties.kt:62:24:62:49 | ClassWithDelegate | KtInitializerAssignExpr | +| delegatedProperties.kt:62:25:62:48 | anotherClassInt | delegatedProperties.kt:62:24:62:49 | ClassWithDelegate | VarAccess | +| delegatedProperties.kt:62:25:62:48 | anotherClassInt | delegatedProperties.kt:62:24:62:49 | ClassWithDelegate | VarAccess | | delegatedProperties.kt:62:25:62:48 | int | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:62:25:62:48 | int | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:62:25:62:48 | int | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:62:25:62:48 | this | delegatedProperties.kt:62:25:62:48 | getAnotherClassInt | ThisAccess | | delegatedProperties.kt:62:25:62:48 | this.anotherClassInt | delegatedProperties.kt:62:25:62:48 | getAnotherClassInt | VarAccess | -| delegatedProperties.kt:63:17:63:37 | ...=... | delegatedProperties.kt:63:6:63:38 | Base | KtInitializerAssignExpr | -| delegatedProperties.kt:63:17:63:37 | baseClassInt | delegatedProperties.kt:63:6:63:38 | Base | VarAccess | -| delegatedProperties.kt:63:17:63:37 | baseClassInt | delegatedProperties.kt:63:6:63:38 | Base | VarAccess | +| delegatedProperties.kt:63:17:63:37 | ...=... | delegatedProperties.kt:63:16:63:38 | Base | KtInitializerAssignExpr | +| delegatedProperties.kt:63:17:63:37 | baseClassInt | delegatedProperties.kt:63:16:63:38 | Base | VarAccess | +| delegatedProperties.kt:63:17:63:37 | baseClassInt | delegatedProperties.kt:63:16:63:38 | Base | VarAccess | | delegatedProperties.kt:63:17:63:37 | int | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:63:17:63:37 | int | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:63:17:63:37 | int | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:63:17:63:37 | this | delegatedProperties.kt:63:17:63:37 | getBaseClassInt | ThisAccess | | delegatedProperties.kt:63:17:63:37 | this.baseClassInt | delegatedProperties.kt:63:17:63:37 | getBaseClassInt | VarAccess | -| delegatedProperties.kt:65:15:65:32 | ...=... | delegatedProperties.kt:65:1:85:1 | MyClass | KtInitializerAssignExpr | +| delegatedProperties.kt:65:15:65:32 | ...=... | delegatedProperties.kt:65:14:65:78 | MyClass | KtInitializerAssignExpr | | delegatedProperties.kt:65:15:65:32 | ...=... | delegatedProperties.kt:65:15:65:32 | setMemberInt | AssignExpr | | delegatedProperties.kt:65:15:65:32 | <set-?> | delegatedProperties.kt:65:15:65:32 | setMemberInt | VarAccess | | delegatedProperties.kt:65:15:65:32 | Unit | file://:0:0:0:0 | <none> | TypeAccess | @@ -335,70 +335,70 @@ | delegatedProperties.kt:65:15:65:32 | int | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:65:15:65:32 | int | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:65:15:65:32 | int | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:65:15:65:32 | memberInt | delegatedProperties.kt:65:1:85:1 | MyClass | VarAccess | -| delegatedProperties.kt:65:15:65:32 | memberInt | delegatedProperties.kt:65:1:85:1 | MyClass | VarAccess | +| delegatedProperties.kt:65:15:65:32 | memberInt | delegatedProperties.kt:65:14:65:78 | MyClass | VarAccess | +| delegatedProperties.kt:65:15:65:32 | memberInt | delegatedProperties.kt:65:14:65:78 | MyClass | VarAccess | | delegatedProperties.kt:65:15:65:32 | this | delegatedProperties.kt:65:15:65:32 | getMemberInt | ThisAccess | | delegatedProperties.kt:65:15:65:32 | this | delegatedProperties.kt:65:15:65:32 | setMemberInt | ThisAccess | | delegatedProperties.kt:65:15:65:32 | this.memberInt | delegatedProperties.kt:65:15:65:32 | getMemberInt | VarAccess | | delegatedProperties.kt:65:15:65:32 | this.memberInt | delegatedProperties.kt:65:15:65:32 | setMemberInt | VarAccess | -| delegatedProperties.kt:65:35:65:77 | ...=... | delegatedProperties.kt:65:1:85:1 | MyClass | KtInitializerAssignExpr | +| delegatedProperties.kt:65:35:65:77 | ...=... | delegatedProperties.kt:65:14:65:78 | MyClass | KtInitializerAssignExpr | | delegatedProperties.kt:65:35:65:77 | ClassWithDelegate | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:65:35:65:77 | ClassWithDelegate | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:65:35:65:77 | ClassWithDelegate | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:65:35:65:77 | anotherClassInstance | delegatedProperties.kt:65:1:85:1 | MyClass | VarAccess | -| delegatedProperties.kt:65:35:65:77 | anotherClassInstance | delegatedProperties.kt:65:1:85:1 | MyClass | VarAccess | +| delegatedProperties.kt:65:35:65:77 | anotherClassInstance | delegatedProperties.kt:65:14:65:78 | MyClass | VarAccess | +| delegatedProperties.kt:65:35:65:77 | anotherClassInstance | delegatedProperties.kt:65:14:65:78 | MyClass | VarAccess | | delegatedProperties.kt:65:35:65:77 | this | delegatedProperties.kt:65:35:65:77 | getAnotherClassInstance | ThisAccess | | delegatedProperties.kt:65:35:65:77 | this.anotherClassInstance | delegatedProperties.kt:65:35:65:77 | getAnotherClassInstance | VarAccess | -| delegatedProperties.kt:65:87:65:95 | memberInt | delegatedProperties.kt:65:1:85:1 | MyClass | VarAccess | -| delegatedProperties.kt:66:33:66:50 | ...::... | delegatedProperties.kt:66:33:66:50 | getDelegatedToMember1 | PropertyRefExpr | -| delegatedProperties.kt:66:33:66:50 | ...::... | delegatedProperties.kt:66:33:66:50 | setDelegatedToMember1 | PropertyRefExpr | -| delegatedProperties.kt:66:33:66:50 | ...=... | delegatedProperties.kt:65:1:85:1 | MyClass | KtInitializerAssignExpr | -| delegatedProperties.kt:66:33:66:50 | Integer | delegatedProperties.kt:66:33:66:50 | getDelegatedToMember1 | TypeAccess | -| delegatedProperties.kt:66:33:66:50 | Integer | delegatedProperties.kt:66:33:66:50 | getDelegatedToMember1 | TypeAccess | -| delegatedProperties.kt:66:33:66:50 | Integer | delegatedProperties.kt:66:33:66:50 | setDelegatedToMember1 | TypeAccess | -| delegatedProperties.kt:66:33:66:50 | Integer | delegatedProperties.kt:66:33:66:50 | setDelegatedToMember1 | TypeAccess | -| delegatedProperties.kt:66:33:66:50 | Integer | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:66:33:66:50 | KMutableProperty0<Integer> | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:66:33:66:50 | KMutableProperty1<MyClass,Integer> | delegatedProperties.kt:66:33:66:50 | getDelegatedToMember1 | TypeAccess | -| delegatedProperties.kt:66:33:66:50 | KMutableProperty1<MyClass,Integer> | delegatedProperties.kt:66:33:66:50 | setDelegatedToMember1 | TypeAccess | -| delegatedProperties.kt:66:33:66:50 | MyClass | delegatedProperties.kt:66:33:66:50 | getDelegatedToMember1 | TypeAccess | -| delegatedProperties.kt:66:33:66:50 | MyClass | delegatedProperties.kt:66:33:66:50 | setDelegatedToMember1 | TypeAccess | -| delegatedProperties.kt:66:33:66:50 | PropertyReferenceDelegatesKt | delegatedProperties.kt:66:33:66:50 | getDelegatedToMember1 | TypeAccess | -| delegatedProperties.kt:66:33:66:50 | PropertyReferenceDelegatesKt | delegatedProperties.kt:66:33:66:50 | setDelegatedToMember1 | TypeAccess | -| delegatedProperties.kt:66:33:66:50 | Unit | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:66:33:66:50 | a0 | delegatedProperties.kt:66:33:66:50 | get | VarAccess | -| delegatedProperties.kt:66:33:66:50 | a0 | delegatedProperties.kt:66:33:66:50 | get | VarAccess | -| delegatedProperties.kt:66:33:66:50 | a0 | delegatedProperties.kt:66:33:66:50 | invoke | VarAccess | -| delegatedProperties.kt:66:33:66:50 | a0 | delegatedProperties.kt:66:33:66:50 | invoke | VarAccess | -| delegatedProperties.kt:66:33:66:50 | a0 | delegatedProperties.kt:66:33:66:50 | set | VarAccess | -| delegatedProperties.kt:66:33:66:50 | a0 | delegatedProperties.kt:66:33:66:50 | set | VarAccess | -| delegatedProperties.kt:66:33:66:50 | a1 | delegatedProperties.kt:66:33:66:50 | set | VarAccess | -| delegatedProperties.kt:66:33:66:50 | a1 | delegatedProperties.kt:66:33:66:50 | set | VarAccess | -| delegatedProperties.kt:66:33:66:50 | delegatedToMember1$delegate | delegatedProperties.kt:65:1:85:1 | MyClass | VarAccess | -| delegatedProperties.kt:66:33:66:50 | get(...) | delegatedProperties.kt:66:33:66:50 | invoke | MethodCall | -| delegatedProperties.kt:66:33:66:50 | get(...) | delegatedProperties.kt:66:33:66:50 | invoke | MethodCall | -| delegatedProperties.kt:66:33:66:50 | getDelegatedToMember1(...) | delegatedProperties.kt:66:33:66:50 | get | MethodCall | -| delegatedProperties.kt:66:33:66:50 | getDelegatedToMember1(...) | delegatedProperties.kt:66:33:66:50 | get | MethodCall | -| delegatedProperties.kt:66:33:66:50 | getValue(...) | delegatedProperties.kt:66:33:66:50 | getDelegatedToMember1 | MethodCall | -| delegatedProperties.kt:66:33:66:50 | int | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:66:33:66:50 | int | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:66:33:66:50 | setDelegatedToMember1(...) | delegatedProperties.kt:66:33:66:50 | set | MethodCall | -| delegatedProperties.kt:66:33:66:50 | setDelegatedToMember1(...) | delegatedProperties.kt:66:33:66:50 | set | MethodCall | -| delegatedProperties.kt:66:33:66:50 | setValue(...) | delegatedProperties.kt:66:33:66:50 | setDelegatedToMember1 | MethodCall | -| delegatedProperties.kt:66:33:66:50 | this | delegatedProperties.kt:66:33:66:50 | getDelegatedToMember1 | ThisAccess | -| delegatedProperties.kt:66:33:66:50 | this | delegatedProperties.kt:66:33:66:50 | invoke | ThisAccess | -| delegatedProperties.kt:66:33:66:50 | this | delegatedProperties.kt:66:33:66:50 | invoke | ThisAccess | -| delegatedProperties.kt:66:33:66:50 | this | delegatedProperties.kt:66:33:66:50 | setDelegatedToMember1 | ThisAccess | -| delegatedProperties.kt:66:33:66:50 | this.delegatedToMember1$delegate | delegatedProperties.kt:66:33:66:50 | getDelegatedToMember1 | VarAccess | -| delegatedProperties.kt:66:33:66:50 | this.delegatedToMember1$delegate | delegatedProperties.kt:66:33:66:50 | setDelegatedToMember1 | VarAccess | -| delegatedProperties.kt:66:36:66:39 | MyClass | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | -| delegatedProperties.kt:66:36:66:39 | MyClass.this | delegatedProperties.kt:65:1:85:1 | MyClass | ThisAccess | -| delegatedProperties.kt:66:36:66:50 | ...::... | delegatedProperties.kt:65:1:85:1 | MyClass | PropertyRefExpr | +| delegatedProperties.kt:65:87:65:95 | memberInt | delegatedProperties.kt:65:14:65:78 | MyClass | VarAccess | +| delegatedProperties.kt:66:36:66:50 | ...::... | delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1 | PropertyRefExpr | +| delegatedProperties.kt:66:36:66:50 | ...::... | delegatedProperties.kt:66:36:66:50 | setDelegatedToMember1 | PropertyRefExpr | +| delegatedProperties.kt:66:36:66:50 | ...=... | delegatedProperties.kt:65:14:65:78 | MyClass | KtInitializerAssignExpr | +| delegatedProperties.kt:66:36:66:50 | Integer | delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1 | TypeAccess | +| delegatedProperties.kt:66:36:66:50 | Integer | delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1 | TypeAccess | +| delegatedProperties.kt:66:36:66:50 | Integer | delegatedProperties.kt:66:36:66:50 | setDelegatedToMember1 | TypeAccess | +| delegatedProperties.kt:66:36:66:50 | Integer | delegatedProperties.kt:66:36:66:50 | setDelegatedToMember1 | TypeAccess | +| delegatedProperties.kt:66:36:66:50 | Integer | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:66:36:66:50 | KMutableProperty0<Integer> | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:66:36:66:50 | KMutableProperty1<MyClass,Integer> | delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1 | TypeAccess | +| delegatedProperties.kt:66:36:66:50 | KMutableProperty1<MyClass,Integer> | delegatedProperties.kt:66:36:66:50 | setDelegatedToMember1 | TypeAccess | +| delegatedProperties.kt:66:36:66:50 | MyClass | delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1 | TypeAccess | +| delegatedProperties.kt:66:36:66:50 | MyClass | delegatedProperties.kt:66:36:66:50 | setDelegatedToMember1 | TypeAccess | +| delegatedProperties.kt:66:36:66:50 | PropertyReferenceDelegatesKt | delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1 | TypeAccess | +| delegatedProperties.kt:66:36:66:50 | PropertyReferenceDelegatesKt | delegatedProperties.kt:66:36:66:50 | setDelegatedToMember1 | TypeAccess | +| delegatedProperties.kt:66:36:66:50 | Unit | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:66:36:66:50 | a0 | delegatedProperties.kt:66:36:66:50 | get | VarAccess | +| delegatedProperties.kt:66:36:66:50 | a0 | delegatedProperties.kt:66:36:66:50 | get | VarAccess | +| delegatedProperties.kt:66:36:66:50 | a0 | delegatedProperties.kt:66:36:66:50 | invoke | VarAccess | +| delegatedProperties.kt:66:36:66:50 | a0 | delegatedProperties.kt:66:36:66:50 | invoke | VarAccess | +| delegatedProperties.kt:66:36:66:50 | a0 | delegatedProperties.kt:66:36:66:50 | set | VarAccess | +| delegatedProperties.kt:66:36:66:50 | a0 | delegatedProperties.kt:66:36:66:50 | set | VarAccess | +| delegatedProperties.kt:66:36:66:50 | a1 | delegatedProperties.kt:66:36:66:50 | set | VarAccess | +| delegatedProperties.kt:66:36:66:50 | a1 | delegatedProperties.kt:66:36:66:50 | set | VarAccess | +| delegatedProperties.kt:66:36:66:50 | delegatedToMember1$delegate | delegatedProperties.kt:65:14:65:78 | MyClass | VarAccess | +| delegatedProperties.kt:66:36:66:50 | get(...) | delegatedProperties.kt:66:36:66:50 | invoke | MethodCall | +| delegatedProperties.kt:66:36:66:50 | get(...) | delegatedProperties.kt:66:36:66:50 | invoke | MethodCall | +| delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1(...) | delegatedProperties.kt:66:36:66:50 | get | MethodCall | +| delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1(...) | delegatedProperties.kt:66:36:66:50 | get | MethodCall | +| delegatedProperties.kt:66:36:66:50 | getValue(...) | delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1 | MethodCall | +| delegatedProperties.kt:66:36:66:50 | int | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:66:36:66:50 | int | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:66:36:66:50 | setDelegatedToMember1(...) | delegatedProperties.kt:66:36:66:50 | set | MethodCall | +| delegatedProperties.kt:66:36:66:50 | setDelegatedToMember1(...) | delegatedProperties.kt:66:36:66:50 | set | MethodCall | +| delegatedProperties.kt:66:36:66:50 | setValue(...) | delegatedProperties.kt:66:36:66:50 | setDelegatedToMember1 | MethodCall | +| delegatedProperties.kt:66:36:66:50 | this | delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1 | ThisAccess | +| delegatedProperties.kt:66:36:66:50 | this | delegatedProperties.kt:66:36:66:50 | invoke | ThisAccess | +| delegatedProperties.kt:66:36:66:50 | this | delegatedProperties.kt:66:36:66:50 | invoke | ThisAccess | +| delegatedProperties.kt:66:36:66:50 | this | delegatedProperties.kt:66:36:66:50 | setDelegatedToMember1 | ThisAccess | +| delegatedProperties.kt:66:36:66:50 | this.delegatedToMember1$delegate | delegatedProperties.kt:66:36:66:50 | getDelegatedToMember1 | VarAccess | +| delegatedProperties.kt:66:36:66:50 | this.delegatedToMember1$delegate | delegatedProperties.kt:66:36:66:50 | setDelegatedToMember1 | VarAccess | +| delegatedProperties.kt:66:36:66:39 | MyClass | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | +| delegatedProperties.kt:66:36:66:39 | MyClass.this | delegatedProperties.kt:65:14:65:78 | MyClass | ThisAccess | +| delegatedProperties.kt:66:36:66:50 | ...::... | delegatedProperties.kt:65:14:65:78 | MyClass | PropertyRefExpr | | delegatedProperties.kt:66:36:66:50 | ...=... | delegatedProperties.kt:66:36:66:50 | | AssignExpr | | delegatedProperties.kt:66:36:66:50 | <dispatchReceiver> | delegatedProperties.kt:66:36:66:50 | | VarAccess | -| delegatedProperties.kt:66:36:66:50 | <set-?> | delegatedProperties.kt:66:33:66:50 | setDelegatedToMember1 | VarAccess | -| delegatedProperties.kt:66:36:66:50 | Integer | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | -| delegatedProperties.kt:66:36:66:50 | KMutableProperty0<Integer> | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | +| delegatedProperties.kt:66:36:66:50 | <set-?> | delegatedProperties.kt:66:36:66:50 | setDelegatedToMember1 | VarAccess | +| delegatedProperties.kt:66:36:66:50 | Integer | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | +| delegatedProperties.kt:66:36:66:50 | KMutableProperty0<Integer> | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | | delegatedProperties.kt:66:36:66:50 | MyClass | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:66:36:66:50 | a0 | delegatedProperties.kt:66:36:66:50 | set | VarAccess | | delegatedProperties.kt:66:36:66:50 | get(...) | delegatedProperties.kt:66:36:66:50 | invoke | MethodCall | @@ -411,55 +411,55 @@ | delegatedProperties.kt:66:36:66:50 | this.<dispatchReceiver> | delegatedProperties.kt:66:36:66:50 | | VarAccess | | delegatedProperties.kt:66:36:66:50 | this.<dispatchReceiver> | delegatedProperties.kt:66:36:66:50 | get | VarAccess | | delegatedProperties.kt:66:36:66:50 | this.<dispatchReceiver> | delegatedProperties.kt:66:36:66:50 | set | VarAccess | -| delegatedProperties.kt:67:33:67:53 | ...::... | delegatedProperties.kt:67:33:67:53 | getDelegatedToMember2 | PropertyRefExpr | -| delegatedProperties.kt:67:33:67:53 | ...::... | delegatedProperties.kt:67:33:67:53 | setDelegatedToMember2 | PropertyRefExpr | -| delegatedProperties.kt:67:33:67:53 | ...=... | delegatedProperties.kt:65:1:85:1 | MyClass | KtInitializerAssignExpr | -| delegatedProperties.kt:67:33:67:53 | Integer | delegatedProperties.kt:67:33:67:53 | getDelegatedToMember2 | TypeAccess | -| delegatedProperties.kt:67:33:67:53 | Integer | delegatedProperties.kt:67:33:67:53 | getDelegatedToMember2 | TypeAccess | -| delegatedProperties.kt:67:33:67:53 | Integer | delegatedProperties.kt:67:33:67:53 | setDelegatedToMember2 | TypeAccess | -| delegatedProperties.kt:67:33:67:53 | Integer | delegatedProperties.kt:67:33:67:53 | setDelegatedToMember2 | TypeAccess | -| delegatedProperties.kt:67:33:67:53 | Integer | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:67:33:67:53 | KMutableProperty1<MyClass,Integer> | delegatedProperties.kt:67:33:67:53 | getDelegatedToMember2 | TypeAccess | -| delegatedProperties.kt:67:33:67:53 | KMutableProperty1<MyClass,Integer> | delegatedProperties.kt:67:33:67:53 | setDelegatedToMember2 | TypeAccess | -| delegatedProperties.kt:67:33:67:53 | KMutableProperty1<MyClass,Integer> | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:67:33:67:53 | MyClass | delegatedProperties.kt:67:33:67:53 | getDelegatedToMember2 | TypeAccess | -| delegatedProperties.kt:67:33:67:53 | MyClass | delegatedProperties.kt:67:33:67:53 | getDelegatedToMember2 | TypeAccess | -| delegatedProperties.kt:67:33:67:53 | MyClass | delegatedProperties.kt:67:33:67:53 | setDelegatedToMember2 | TypeAccess | -| delegatedProperties.kt:67:33:67:53 | MyClass | delegatedProperties.kt:67:33:67:53 | setDelegatedToMember2 | TypeAccess | -| delegatedProperties.kt:67:33:67:53 | MyClass | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:67:33:67:53 | PropertyReferenceDelegatesKt | delegatedProperties.kt:67:33:67:53 | getDelegatedToMember2 | TypeAccess | -| delegatedProperties.kt:67:33:67:53 | PropertyReferenceDelegatesKt | delegatedProperties.kt:67:33:67:53 | setDelegatedToMember2 | TypeAccess | -| delegatedProperties.kt:67:33:67:53 | Unit | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:67:33:67:53 | a0 | delegatedProperties.kt:67:33:67:53 | get | VarAccess | -| delegatedProperties.kt:67:33:67:53 | a0 | delegatedProperties.kt:67:33:67:53 | get | VarAccess | -| delegatedProperties.kt:67:33:67:53 | a0 | delegatedProperties.kt:67:33:67:53 | invoke | VarAccess | -| delegatedProperties.kt:67:33:67:53 | a0 | delegatedProperties.kt:67:33:67:53 | invoke | VarAccess | -| delegatedProperties.kt:67:33:67:53 | a0 | delegatedProperties.kt:67:33:67:53 | set | VarAccess | -| delegatedProperties.kt:67:33:67:53 | a0 | delegatedProperties.kt:67:33:67:53 | set | VarAccess | -| delegatedProperties.kt:67:33:67:53 | a1 | delegatedProperties.kt:67:33:67:53 | set | VarAccess | -| delegatedProperties.kt:67:33:67:53 | a1 | delegatedProperties.kt:67:33:67:53 | set | VarAccess | -| delegatedProperties.kt:67:33:67:53 | delegatedToMember2$delegate | delegatedProperties.kt:65:1:85:1 | MyClass | VarAccess | -| delegatedProperties.kt:67:33:67:53 | get(...) | delegatedProperties.kt:67:33:67:53 | invoke | MethodCall | -| delegatedProperties.kt:67:33:67:53 | get(...) | delegatedProperties.kt:67:33:67:53 | invoke | MethodCall | -| delegatedProperties.kt:67:33:67:53 | getDelegatedToMember2(...) | delegatedProperties.kt:67:33:67:53 | get | MethodCall | -| delegatedProperties.kt:67:33:67:53 | getDelegatedToMember2(...) | delegatedProperties.kt:67:33:67:53 | get | MethodCall | -| delegatedProperties.kt:67:33:67:53 | getValue(...) | delegatedProperties.kt:67:33:67:53 | getDelegatedToMember2 | MethodCall | -| delegatedProperties.kt:67:33:67:53 | int | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:67:33:67:53 | int | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:67:33:67:53 | setDelegatedToMember2(...) | delegatedProperties.kt:67:33:67:53 | set | MethodCall | -| delegatedProperties.kt:67:33:67:53 | setDelegatedToMember2(...) | delegatedProperties.kt:67:33:67:53 | set | MethodCall | -| delegatedProperties.kt:67:33:67:53 | setValue(...) | delegatedProperties.kt:67:33:67:53 | setDelegatedToMember2 | MethodCall | -| delegatedProperties.kt:67:33:67:53 | this | delegatedProperties.kt:67:33:67:53 | getDelegatedToMember2 | ThisAccess | -| delegatedProperties.kt:67:33:67:53 | this | delegatedProperties.kt:67:33:67:53 | invoke | ThisAccess | -| delegatedProperties.kt:67:33:67:53 | this | delegatedProperties.kt:67:33:67:53 | invoke | ThisAccess | -| delegatedProperties.kt:67:33:67:53 | this | delegatedProperties.kt:67:33:67:53 | setDelegatedToMember2 | ThisAccess | -| delegatedProperties.kt:67:33:67:53 | this.delegatedToMember2$delegate | delegatedProperties.kt:67:33:67:53 | getDelegatedToMember2 | VarAccess | -| delegatedProperties.kt:67:33:67:53 | this.delegatedToMember2$delegate | delegatedProperties.kt:67:33:67:53 | setDelegatedToMember2 | VarAccess | -| delegatedProperties.kt:67:36:67:53 | ...::... | delegatedProperties.kt:65:1:85:1 | MyClass | PropertyRefExpr | -| delegatedProperties.kt:67:36:67:53 | <set-?> | delegatedProperties.kt:67:33:67:53 | setDelegatedToMember2 | VarAccess | -| delegatedProperties.kt:67:36:67:53 | Integer | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | -| delegatedProperties.kt:67:36:67:53 | KMutableProperty1<MyClass,Integer> | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | -| delegatedProperties.kt:67:36:67:53 | MyClass | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | ...::... | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | PropertyRefExpr | +| delegatedProperties.kt:67:36:67:53 | ...::... | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | PropertyRefExpr | +| delegatedProperties.kt:67:36:67:53 | ...=... | delegatedProperties.kt:65:14:65:78 | MyClass | KtInitializerAssignExpr | +| delegatedProperties.kt:67:36:67:53 | Integer | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | Integer | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | Integer | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | Integer | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | Integer | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | KMutableProperty1<MyClass,Integer> | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | KMutableProperty1<MyClass,Integer> | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | KMutableProperty1<MyClass,Integer> | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | MyClass | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | MyClass | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | MyClass | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | MyClass | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | MyClass | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | PropertyReferenceDelegatesKt | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | PropertyReferenceDelegatesKt | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | Unit | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | a0 | delegatedProperties.kt:67:36:67:53 | get | VarAccess | +| delegatedProperties.kt:67:36:67:53 | a0 | delegatedProperties.kt:67:36:67:53 | get | VarAccess | +| delegatedProperties.kt:67:36:67:53 | a0 | delegatedProperties.kt:67:36:67:53 | invoke | VarAccess | +| delegatedProperties.kt:67:36:67:53 | a0 | delegatedProperties.kt:67:36:67:53 | invoke | VarAccess | +| delegatedProperties.kt:67:36:67:53 | a0 | delegatedProperties.kt:67:36:67:53 | set | VarAccess | +| delegatedProperties.kt:67:36:67:53 | a0 | delegatedProperties.kt:67:36:67:53 | set | VarAccess | +| delegatedProperties.kt:67:36:67:53 | a1 | delegatedProperties.kt:67:36:67:53 | set | VarAccess | +| delegatedProperties.kt:67:36:67:53 | a1 | delegatedProperties.kt:67:36:67:53 | set | VarAccess | +| delegatedProperties.kt:67:36:67:53 | delegatedToMember2$delegate | delegatedProperties.kt:65:14:65:78 | MyClass | VarAccess | +| delegatedProperties.kt:67:36:67:53 | get(...) | delegatedProperties.kt:67:36:67:53 | invoke | MethodCall | +| delegatedProperties.kt:67:36:67:53 | get(...) | delegatedProperties.kt:67:36:67:53 | invoke | MethodCall | +| delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2(...) | delegatedProperties.kt:67:36:67:53 | get | MethodCall | +| delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2(...) | delegatedProperties.kt:67:36:67:53 | get | MethodCall | +| delegatedProperties.kt:67:36:67:53 | getValue(...) | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | MethodCall | +| delegatedProperties.kt:67:36:67:53 | int | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | int | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2(...) | delegatedProperties.kt:67:36:67:53 | set | MethodCall | +| delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2(...) | delegatedProperties.kt:67:36:67:53 | set | MethodCall | +| delegatedProperties.kt:67:36:67:53 | setValue(...) | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | MethodCall | +| delegatedProperties.kt:67:36:67:53 | this | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | ThisAccess | +| delegatedProperties.kt:67:36:67:53 | this | delegatedProperties.kt:67:36:67:53 | invoke | ThisAccess | +| delegatedProperties.kt:67:36:67:53 | this | delegatedProperties.kt:67:36:67:53 | invoke | ThisAccess | +| delegatedProperties.kt:67:36:67:53 | this | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | ThisAccess | +| delegatedProperties.kt:67:36:67:53 | this.delegatedToMember2$delegate | delegatedProperties.kt:67:36:67:53 | getDelegatedToMember2 | VarAccess | +| delegatedProperties.kt:67:36:67:53 | this.delegatedToMember2$delegate | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | VarAccess | +| delegatedProperties.kt:67:36:67:53 | ...::... | delegatedProperties.kt:65:14:65:78 | MyClass | PropertyRefExpr | +| delegatedProperties.kt:67:36:67:53 | <set-?> | delegatedProperties.kt:67:36:67:53 | setDelegatedToMember2 | VarAccess | +| delegatedProperties.kt:67:36:67:53 | Integer | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | KMutableProperty1<MyClass,Integer> | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | +| delegatedProperties.kt:67:36:67:53 | MyClass | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | | delegatedProperties.kt:67:36:67:53 | a0 | delegatedProperties.kt:67:36:67:53 | get | VarAccess | | delegatedProperties.kt:67:36:67:53 | a0 | delegatedProperties.kt:67:36:67:53 | invoke | VarAccess | | delegatedProperties.kt:67:36:67:53 | a0 | delegatedProperties.kt:67:36:67:53 | set | VarAccess | @@ -468,57 +468,57 @@ | delegatedProperties.kt:67:36:67:53 | getMemberInt(...) | delegatedProperties.kt:67:36:67:53 | get | MethodCall | | delegatedProperties.kt:67:36:67:53 | setMemberInt(...) | delegatedProperties.kt:67:36:67:53 | set | MethodCall | | delegatedProperties.kt:67:36:67:53 | this | delegatedProperties.kt:67:36:67:53 | invoke | ThisAccess | -| delegatedProperties.kt:69:36:69:56 | ...::... | delegatedProperties.kt:69:36:69:56 | getDelegatedToExtMember1 | PropertyRefExpr | -| delegatedProperties.kt:69:36:69:56 | ...::... | delegatedProperties.kt:69:36:69:56 | setDelegatedToExtMember1 | PropertyRefExpr | -| delegatedProperties.kt:69:36:69:56 | ...=... | delegatedProperties.kt:65:1:85:1 | MyClass | KtInitializerAssignExpr | -| delegatedProperties.kt:69:36:69:56 | Integer | delegatedProperties.kt:69:36:69:56 | getDelegatedToExtMember1 | TypeAccess | -| delegatedProperties.kt:69:36:69:56 | Integer | delegatedProperties.kt:69:36:69:56 | getDelegatedToExtMember1 | TypeAccess | -| delegatedProperties.kt:69:36:69:56 | Integer | delegatedProperties.kt:69:36:69:56 | setDelegatedToExtMember1 | TypeAccess | -| delegatedProperties.kt:69:36:69:56 | Integer | delegatedProperties.kt:69:36:69:56 | setDelegatedToExtMember1 | TypeAccess | -| delegatedProperties.kt:69:36:69:56 | Integer | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:69:36:69:56 | KMutableProperty0<Integer> | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:69:36:69:56 | KMutableProperty1<MyClass,Integer> | delegatedProperties.kt:69:36:69:56 | getDelegatedToExtMember1 | TypeAccess | -| delegatedProperties.kt:69:36:69:56 | KMutableProperty1<MyClass,Integer> | delegatedProperties.kt:69:36:69:56 | setDelegatedToExtMember1 | TypeAccess | -| delegatedProperties.kt:69:36:69:56 | MyClass | delegatedProperties.kt:69:36:69:56 | getDelegatedToExtMember1 | TypeAccess | -| delegatedProperties.kt:69:36:69:56 | MyClass | delegatedProperties.kt:69:36:69:56 | setDelegatedToExtMember1 | TypeAccess | -| delegatedProperties.kt:69:36:69:56 | PropertyReferenceDelegatesKt | delegatedProperties.kt:69:36:69:56 | getDelegatedToExtMember1 | TypeAccess | -| delegatedProperties.kt:69:36:69:56 | PropertyReferenceDelegatesKt | delegatedProperties.kt:69:36:69:56 | setDelegatedToExtMember1 | TypeAccess | -| delegatedProperties.kt:69:36:69:56 | Unit | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:69:36:69:56 | a0 | delegatedProperties.kt:69:36:69:56 | get | VarAccess | -| delegatedProperties.kt:69:36:69:56 | a0 | delegatedProperties.kt:69:36:69:56 | get | VarAccess | -| delegatedProperties.kt:69:36:69:56 | a0 | delegatedProperties.kt:69:36:69:56 | invoke | VarAccess | -| delegatedProperties.kt:69:36:69:56 | a0 | delegatedProperties.kt:69:36:69:56 | invoke | VarAccess | -| delegatedProperties.kt:69:36:69:56 | a0 | delegatedProperties.kt:69:36:69:56 | set | VarAccess | -| delegatedProperties.kt:69:36:69:56 | a0 | delegatedProperties.kt:69:36:69:56 | set | VarAccess | -| delegatedProperties.kt:69:36:69:56 | a1 | delegatedProperties.kt:69:36:69:56 | set | VarAccess | -| delegatedProperties.kt:69:36:69:56 | a1 | delegatedProperties.kt:69:36:69:56 | set | VarAccess | -| delegatedProperties.kt:69:36:69:56 | delegatedToExtMember1$delegate | delegatedProperties.kt:65:1:85:1 | MyClass | VarAccess | -| delegatedProperties.kt:69:36:69:56 | get(...) | delegatedProperties.kt:69:36:69:56 | invoke | MethodCall | -| delegatedProperties.kt:69:36:69:56 | get(...) | delegatedProperties.kt:69:36:69:56 | invoke | MethodCall | -| delegatedProperties.kt:69:36:69:56 | getDelegatedToExtMember1(...) | delegatedProperties.kt:69:36:69:56 | get | MethodCall | -| delegatedProperties.kt:69:36:69:56 | getDelegatedToExtMember1(...) | delegatedProperties.kt:69:36:69:56 | get | MethodCall | -| delegatedProperties.kt:69:36:69:56 | getValue(...) | delegatedProperties.kt:69:36:69:56 | getDelegatedToExtMember1 | MethodCall | -| delegatedProperties.kt:69:36:69:56 | int | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:69:36:69:56 | int | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:69:36:69:56 | setDelegatedToExtMember1(...) | delegatedProperties.kt:69:36:69:56 | set | MethodCall | -| delegatedProperties.kt:69:36:69:56 | setDelegatedToExtMember1(...) | delegatedProperties.kt:69:36:69:56 | set | MethodCall | -| delegatedProperties.kt:69:36:69:56 | setValue(...) | delegatedProperties.kt:69:36:69:56 | setDelegatedToExtMember1 | MethodCall | -| delegatedProperties.kt:69:36:69:56 | this | delegatedProperties.kt:69:36:69:56 | getDelegatedToExtMember1 | ThisAccess | -| delegatedProperties.kt:69:36:69:56 | this | delegatedProperties.kt:69:36:69:56 | invoke | ThisAccess | -| delegatedProperties.kt:69:36:69:56 | this | delegatedProperties.kt:69:36:69:56 | invoke | ThisAccess | -| delegatedProperties.kt:69:36:69:56 | this | delegatedProperties.kt:69:36:69:56 | setDelegatedToExtMember1 | ThisAccess | -| delegatedProperties.kt:69:36:69:56 | this.delegatedToExtMember1$delegate | delegatedProperties.kt:69:36:69:56 | getDelegatedToExtMember1 | VarAccess | -| delegatedProperties.kt:69:36:69:56 | this.delegatedToExtMember1$delegate | delegatedProperties.kt:69:36:69:56 | setDelegatedToExtMember1 | VarAccess | -| delegatedProperties.kt:69:39:69:42 | MyClass | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | -| delegatedProperties.kt:69:39:69:42 | MyClass.this | delegatedProperties.kt:65:1:85:1 | MyClass | ThisAccess | -| delegatedProperties.kt:69:39:69:56 | ...::... | delegatedProperties.kt:65:1:85:1 | MyClass | PropertyRefExpr | +| delegatedProperties.kt:69:39:69:56 | ...::... | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | PropertyRefExpr | +| delegatedProperties.kt:69:39:69:56 | ...::... | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | PropertyRefExpr | +| delegatedProperties.kt:69:39:69:56 | ...=... | delegatedProperties.kt:65:14:65:78 | MyClass | KtInitializerAssignExpr | +| delegatedProperties.kt:69:39:69:56 | Integer | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | Integer | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | Integer | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | Integer | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | Integer | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | KMutableProperty0<Integer> | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | KMutableProperty1<MyClass,Integer> | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | KMutableProperty1<MyClass,Integer> | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | MyClass | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | MyClass | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | PropertyReferenceDelegatesKt | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | PropertyReferenceDelegatesKt | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | Unit | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | a0 | delegatedProperties.kt:69:39:69:56 | get | VarAccess | +| delegatedProperties.kt:69:39:69:56 | a0 | delegatedProperties.kt:69:39:69:56 | get | VarAccess | +| delegatedProperties.kt:69:39:69:56 | a0 | delegatedProperties.kt:69:39:69:56 | invoke | VarAccess | +| delegatedProperties.kt:69:39:69:56 | a0 | delegatedProperties.kt:69:39:69:56 | invoke | VarAccess | +| delegatedProperties.kt:69:39:69:56 | a0 | delegatedProperties.kt:69:39:69:56 | set | VarAccess | +| delegatedProperties.kt:69:39:69:56 | a0 | delegatedProperties.kt:69:39:69:56 | set | VarAccess | +| delegatedProperties.kt:69:39:69:56 | a1 | delegatedProperties.kt:69:39:69:56 | set | VarAccess | +| delegatedProperties.kt:69:39:69:56 | a1 | delegatedProperties.kt:69:39:69:56 | set | VarAccess | +| delegatedProperties.kt:69:39:69:56 | delegatedToExtMember1$delegate | delegatedProperties.kt:65:14:65:78 | MyClass | VarAccess | +| delegatedProperties.kt:69:39:69:56 | get(...) | delegatedProperties.kt:69:39:69:56 | invoke | MethodCall | +| delegatedProperties.kt:69:39:69:56 | get(...) | delegatedProperties.kt:69:39:69:56 | invoke | MethodCall | +| delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1(...) | delegatedProperties.kt:69:39:69:56 | get | MethodCall | +| delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1(...) | delegatedProperties.kt:69:39:69:56 | get | MethodCall | +| delegatedProperties.kt:69:39:69:56 | getValue(...) | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | MethodCall | +| delegatedProperties.kt:69:39:69:56 | int | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | int | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1(...) | delegatedProperties.kt:69:39:69:56 | set | MethodCall | +| delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1(...) | delegatedProperties.kt:69:39:69:56 | set | MethodCall | +| delegatedProperties.kt:69:39:69:56 | setValue(...) | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | MethodCall | +| delegatedProperties.kt:69:39:69:56 | this | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | ThisAccess | +| delegatedProperties.kt:69:39:69:56 | this | delegatedProperties.kt:69:39:69:56 | invoke | ThisAccess | +| delegatedProperties.kt:69:39:69:56 | this | delegatedProperties.kt:69:39:69:56 | invoke | ThisAccess | +| delegatedProperties.kt:69:39:69:56 | this | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | ThisAccess | +| delegatedProperties.kt:69:39:69:56 | this.delegatedToExtMember1$delegate | delegatedProperties.kt:69:39:69:56 | getDelegatedToExtMember1 | VarAccess | +| delegatedProperties.kt:69:39:69:56 | this.delegatedToExtMember1$delegate | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | VarAccess | +| delegatedProperties.kt:69:39:69:42 | MyClass | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | +| delegatedProperties.kt:69:39:69:42 | MyClass.this | delegatedProperties.kt:65:14:65:78 | MyClass | ThisAccess | +| delegatedProperties.kt:69:39:69:56 | ...::... | delegatedProperties.kt:65:14:65:78 | MyClass | PropertyRefExpr | | delegatedProperties.kt:69:39:69:56 | ...=... | delegatedProperties.kt:69:39:69:56 | | AssignExpr | | delegatedProperties.kt:69:39:69:56 | <extensionReceiver> | delegatedProperties.kt:69:39:69:56 | | VarAccess | -| delegatedProperties.kt:69:39:69:56 | <set-?> | delegatedProperties.kt:69:36:69:56 | setDelegatedToExtMember1 | VarAccess | +| delegatedProperties.kt:69:39:69:56 | <set-?> | delegatedProperties.kt:69:39:69:56 | setDelegatedToExtMember1 | VarAccess | | delegatedProperties.kt:69:39:69:56 | DelegatedPropertiesKt | delegatedProperties.kt:69:39:69:56 | get | TypeAccess | | delegatedProperties.kt:69:39:69:56 | DelegatedPropertiesKt | delegatedProperties.kt:69:39:69:56 | set | TypeAccess | -| delegatedProperties.kt:69:39:69:56 | Integer | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | -| delegatedProperties.kt:69:39:69:56 | KMutableProperty0<Integer> | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | Integer | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | +| delegatedProperties.kt:69:39:69:56 | KMutableProperty0<Integer> | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | | delegatedProperties.kt:69:39:69:56 | MyClass | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:69:39:69:56 | a0 | delegatedProperties.kt:69:39:69:56 | set | VarAccess | | delegatedProperties.kt:69:39:69:56 | get(...) | delegatedProperties.kt:69:39:69:56 | invoke | MethodCall | @@ -531,57 +531,57 @@ | delegatedProperties.kt:69:39:69:56 | this.<extensionReceiver> | delegatedProperties.kt:69:39:69:56 | | VarAccess | | delegatedProperties.kt:69:39:69:56 | this.<extensionReceiver> | delegatedProperties.kt:69:39:69:56 | get | VarAccess | | delegatedProperties.kt:69:39:69:56 | this.<extensionReceiver> | delegatedProperties.kt:69:39:69:56 | set | VarAccess | -| delegatedProperties.kt:70:36:70:59 | ...::... | delegatedProperties.kt:70:36:70:59 | getDelegatedToExtMember2 | PropertyRefExpr | -| delegatedProperties.kt:70:36:70:59 | ...::... | delegatedProperties.kt:70:36:70:59 | setDelegatedToExtMember2 | PropertyRefExpr | -| delegatedProperties.kt:70:36:70:59 | ...=... | delegatedProperties.kt:65:1:85:1 | MyClass | KtInitializerAssignExpr | -| delegatedProperties.kt:70:36:70:59 | Integer | delegatedProperties.kt:70:36:70:59 | getDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:36:70:59 | Integer | delegatedProperties.kt:70:36:70:59 | getDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:36:70:59 | Integer | delegatedProperties.kt:70:36:70:59 | setDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:36:70:59 | Integer | delegatedProperties.kt:70:36:70:59 | setDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:36:70:59 | Integer | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:70:36:70:59 | KMutableProperty1<MyClass,Integer> | delegatedProperties.kt:70:36:70:59 | getDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:36:70:59 | KMutableProperty1<MyClass,Integer> | delegatedProperties.kt:70:36:70:59 | setDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:36:70:59 | KMutableProperty1<MyClass,Integer> | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:70:36:70:59 | MyClass | delegatedProperties.kt:70:36:70:59 | getDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:36:70:59 | MyClass | delegatedProperties.kt:70:36:70:59 | getDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:36:70:59 | MyClass | delegatedProperties.kt:70:36:70:59 | setDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:36:70:59 | MyClass | delegatedProperties.kt:70:36:70:59 | setDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:36:70:59 | MyClass | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:70:36:70:59 | PropertyReferenceDelegatesKt | delegatedProperties.kt:70:36:70:59 | getDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:36:70:59 | PropertyReferenceDelegatesKt | delegatedProperties.kt:70:36:70:59 | setDelegatedToExtMember2 | TypeAccess | -| delegatedProperties.kt:70:36:70:59 | Unit | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:70:36:70:59 | a0 | delegatedProperties.kt:70:36:70:59 | get | VarAccess | -| delegatedProperties.kt:70:36:70:59 | a0 | delegatedProperties.kt:70:36:70:59 | get | VarAccess | -| delegatedProperties.kt:70:36:70:59 | a0 | delegatedProperties.kt:70:36:70:59 | invoke | VarAccess | -| delegatedProperties.kt:70:36:70:59 | a0 | delegatedProperties.kt:70:36:70:59 | invoke | VarAccess | -| delegatedProperties.kt:70:36:70:59 | a0 | delegatedProperties.kt:70:36:70:59 | set | VarAccess | -| delegatedProperties.kt:70:36:70:59 | a0 | delegatedProperties.kt:70:36:70:59 | set | VarAccess | -| delegatedProperties.kt:70:36:70:59 | a1 | delegatedProperties.kt:70:36:70:59 | set | VarAccess | -| delegatedProperties.kt:70:36:70:59 | a1 | delegatedProperties.kt:70:36:70:59 | set | VarAccess | -| delegatedProperties.kt:70:36:70:59 | delegatedToExtMember2$delegate | delegatedProperties.kt:65:1:85:1 | MyClass | VarAccess | -| delegatedProperties.kt:70:36:70:59 | get(...) | delegatedProperties.kt:70:36:70:59 | invoke | MethodCall | -| delegatedProperties.kt:70:36:70:59 | get(...) | delegatedProperties.kt:70:36:70:59 | invoke | MethodCall | -| delegatedProperties.kt:70:36:70:59 | getDelegatedToExtMember2(...) | delegatedProperties.kt:70:36:70:59 | get | MethodCall | -| delegatedProperties.kt:70:36:70:59 | getDelegatedToExtMember2(...) | delegatedProperties.kt:70:36:70:59 | get | MethodCall | -| delegatedProperties.kt:70:36:70:59 | getValue(...) | delegatedProperties.kt:70:36:70:59 | getDelegatedToExtMember2 | MethodCall | -| delegatedProperties.kt:70:36:70:59 | int | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:70:36:70:59 | int | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:70:36:70:59 | setDelegatedToExtMember2(...) | delegatedProperties.kt:70:36:70:59 | set | MethodCall | -| delegatedProperties.kt:70:36:70:59 | setDelegatedToExtMember2(...) | delegatedProperties.kt:70:36:70:59 | set | MethodCall | -| delegatedProperties.kt:70:36:70:59 | setValue(...) | delegatedProperties.kt:70:36:70:59 | setDelegatedToExtMember2 | MethodCall | -| delegatedProperties.kt:70:36:70:59 | this | delegatedProperties.kt:70:36:70:59 | getDelegatedToExtMember2 | ThisAccess | -| delegatedProperties.kt:70:36:70:59 | this | delegatedProperties.kt:70:36:70:59 | invoke | ThisAccess | -| delegatedProperties.kt:70:36:70:59 | this | delegatedProperties.kt:70:36:70:59 | invoke | ThisAccess | -| delegatedProperties.kt:70:36:70:59 | this | delegatedProperties.kt:70:36:70:59 | setDelegatedToExtMember2 | ThisAccess | -| delegatedProperties.kt:70:36:70:59 | this.delegatedToExtMember2$delegate | delegatedProperties.kt:70:36:70:59 | getDelegatedToExtMember2 | VarAccess | -| delegatedProperties.kt:70:36:70:59 | this.delegatedToExtMember2$delegate | delegatedProperties.kt:70:36:70:59 | setDelegatedToExtMember2 | VarAccess | -| delegatedProperties.kt:70:39:70:59 | ...::... | delegatedProperties.kt:65:1:85:1 | MyClass | PropertyRefExpr | -| delegatedProperties.kt:70:39:70:59 | <set-?> | delegatedProperties.kt:70:36:70:59 | setDelegatedToExtMember2 | VarAccess | +| delegatedProperties.kt:70:39:70:59 | ...::... | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | PropertyRefExpr | +| delegatedProperties.kt:70:39:70:59 | ...::... | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | PropertyRefExpr | +| delegatedProperties.kt:70:39:70:59 | ...=... | delegatedProperties.kt:65:14:65:78 | MyClass | KtInitializerAssignExpr | +| delegatedProperties.kt:70:39:70:59 | Integer | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | Integer | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | Integer | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | Integer | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | Integer | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | KMutableProperty1<MyClass,Integer> | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | KMutableProperty1<MyClass,Integer> | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | KMutableProperty1<MyClass,Integer> | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | MyClass | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | MyClass | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | MyClass | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | MyClass | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | MyClass | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | PropertyReferenceDelegatesKt | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | PropertyReferenceDelegatesKt | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | Unit | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | a0 | delegatedProperties.kt:70:39:70:59 | get | VarAccess | +| delegatedProperties.kt:70:39:70:59 | a0 | delegatedProperties.kt:70:39:70:59 | get | VarAccess | +| delegatedProperties.kt:70:39:70:59 | a0 | delegatedProperties.kt:70:39:70:59 | invoke | VarAccess | +| delegatedProperties.kt:70:39:70:59 | a0 | delegatedProperties.kt:70:39:70:59 | invoke | VarAccess | +| delegatedProperties.kt:70:39:70:59 | a0 | delegatedProperties.kt:70:39:70:59 | set | VarAccess | +| delegatedProperties.kt:70:39:70:59 | a0 | delegatedProperties.kt:70:39:70:59 | set | VarAccess | +| delegatedProperties.kt:70:39:70:59 | a1 | delegatedProperties.kt:70:39:70:59 | set | VarAccess | +| delegatedProperties.kt:70:39:70:59 | a1 | delegatedProperties.kt:70:39:70:59 | set | VarAccess | +| delegatedProperties.kt:70:39:70:59 | delegatedToExtMember2$delegate | delegatedProperties.kt:65:14:65:78 | MyClass | VarAccess | +| delegatedProperties.kt:70:39:70:59 | get(...) | delegatedProperties.kt:70:39:70:59 | invoke | MethodCall | +| delegatedProperties.kt:70:39:70:59 | get(...) | delegatedProperties.kt:70:39:70:59 | invoke | MethodCall | +| delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2(...) | delegatedProperties.kt:70:39:70:59 | get | MethodCall | +| delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2(...) | delegatedProperties.kt:70:39:70:59 | get | MethodCall | +| delegatedProperties.kt:70:39:70:59 | getValue(...) | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | MethodCall | +| delegatedProperties.kt:70:39:70:59 | int | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | int | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2(...) | delegatedProperties.kt:70:39:70:59 | set | MethodCall | +| delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2(...) | delegatedProperties.kt:70:39:70:59 | set | MethodCall | +| delegatedProperties.kt:70:39:70:59 | setValue(...) | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | MethodCall | +| delegatedProperties.kt:70:39:70:59 | this | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | ThisAccess | +| delegatedProperties.kt:70:39:70:59 | this | delegatedProperties.kt:70:39:70:59 | invoke | ThisAccess | +| delegatedProperties.kt:70:39:70:59 | this | delegatedProperties.kt:70:39:70:59 | invoke | ThisAccess | +| delegatedProperties.kt:70:39:70:59 | this | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | ThisAccess | +| delegatedProperties.kt:70:39:70:59 | this.delegatedToExtMember2$delegate | delegatedProperties.kt:70:39:70:59 | getDelegatedToExtMember2 | VarAccess | +| delegatedProperties.kt:70:39:70:59 | this.delegatedToExtMember2$delegate | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | VarAccess | +| delegatedProperties.kt:70:39:70:59 | ...::... | delegatedProperties.kt:65:14:65:78 | MyClass | PropertyRefExpr | +| delegatedProperties.kt:70:39:70:59 | <set-?> | delegatedProperties.kt:70:39:70:59 | setDelegatedToExtMember2 | VarAccess | | delegatedProperties.kt:70:39:70:59 | DelegatedPropertiesKt | delegatedProperties.kt:70:39:70:59 | get | TypeAccess | | delegatedProperties.kt:70:39:70:59 | DelegatedPropertiesKt | delegatedProperties.kt:70:39:70:59 | set | TypeAccess | -| delegatedProperties.kt:70:39:70:59 | Integer | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | -| delegatedProperties.kt:70:39:70:59 | KMutableProperty1<MyClass,Integer> | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | -| delegatedProperties.kt:70:39:70:59 | MyClass | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | Integer | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | KMutableProperty1<MyClass,Integer> | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | +| delegatedProperties.kt:70:39:70:59 | MyClass | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | | delegatedProperties.kt:70:39:70:59 | a0 | delegatedProperties.kt:70:39:70:59 | get | VarAccess | | delegatedProperties.kt:70:39:70:59 | a0 | delegatedProperties.kt:70:39:70:59 | invoke | VarAccess | | delegatedProperties.kt:70:39:70:59 | a0 | delegatedProperties.kt:70:39:70:59 | set | VarAccess | @@ -591,7 +591,7 @@ | delegatedProperties.kt:70:39:70:59 | setExtDelegated(...) | delegatedProperties.kt:70:39:70:59 | set | MethodCall | | delegatedProperties.kt:70:39:70:59 | this | delegatedProperties.kt:70:39:70:59 | invoke | ThisAccess | | delegatedProperties.kt:72:36:72:56 | ...::... | delegatedProperties.kt:72:36:72:56 | getDelegatedToBaseClass1 | PropertyRefExpr | -| delegatedProperties.kt:72:36:72:56 | ...=... | delegatedProperties.kt:65:1:85:1 | MyClass | KtInitializerAssignExpr | +| delegatedProperties.kt:72:36:72:56 | ...=... | delegatedProperties.kt:65:14:65:78 | MyClass | KtInitializerAssignExpr | | delegatedProperties.kt:72:36:72:56 | Integer | delegatedProperties.kt:72:36:72:56 | getDelegatedToBaseClass1 | TypeAccess | | delegatedProperties.kt:72:36:72:56 | Integer | delegatedProperties.kt:72:36:72:56 | getDelegatedToBaseClass1 | TypeAccess | | delegatedProperties.kt:72:36:72:56 | Integer | file://:0:0:0:0 | <none> | TypeAccess | @@ -601,7 +601,7 @@ | delegatedProperties.kt:72:36:72:56 | PropertyReferenceDelegatesKt | delegatedProperties.kt:72:36:72:56 | getDelegatedToBaseClass1 | TypeAccess | | delegatedProperties.kt:72:36:72:56 | a0 | delegatedProperties.kt:72:36:72:56 | get | VarAccess | | delegatedProperties.kt:72:36:72:56 | a0 | delegatedProperties.kt:72:36:72:56 | invoke | VarAccess | -| delegatedProperties.kt:72:36:72:56 | delegatedToBaseClass1$delegate | delegatedProperties.kt:65:1:85:1 | MyClass | VarAccess | +| delegatedProperties.kt:72:36:72:56 | delegatedToBaseClass1$delegate | delegatedProperties.kt:65:14:65:78 | MyClass | VarAccess | | delegatedProperties.kt:72:36:72:56 | get(...) | delegatedProperties.kt:72:36:72:56 | invoke | MethodCall | | delegatedProperties.kt:72:36:72:56 | getDelegatedToBaseClass1(...) | delegatedProperties.kt:72:36:72:56 | get | MethodCall | | delegatedProperties.kt:72:36:72:56 | getValue(...) | delegatedProperties.kt:72:36:72:56 | getDelegatedToBaseClass1 | MethodCall | @@ -609,13 +609,13 @@ | delegatedProperties.kt:72:36:72:56 | this | delegatedProperties.kt:72:36:72:56 | getDelegatedToBaseClass1 | ThisAccess | | delegatedProperties.kt:72:36:72:56 | this | delegatedProperties.kt:72:36:72:56 | invoke | ThisAccess | | delegatedProperties.kt:72:36:72:56 | this.delegatedToBaseClass1$delegate | delegatedProperties.kt:72:36:72:56 | getDelegatedToBaseClass1 | VarAccess | -| delegatedProperties.kt:72:39:72:42 | MyClass | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | -| delegatedProperties.kt:72:39:72:42 | MyClass.this | delegatedProperties.kt:65:1:85:1 | MyClass | ThisAccess | -| delegatedProperties.kt:72:39:72:56 | ...::... | delegatedProperties.kt:65:1:85:1 | MyClass | PropertyRefExpr | +| delegatedProperties.kt:72:39:72:42 | MyClass | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | +| delegatedProperties.kt:72:39:72:42 | MyClass.this | delegatedProperties.kt:65:14:65:78 | MyClass | ThisAccess | +| delegatedProperties.kt:72:39:72:56 | ...::... | delegatedProperties.kt:65:14:65:78 | MyClass | PropertyRefExpr | | delegatedProperties.kt:72:39:72:56 | ...=... | delegatedProperties.kt:72:39:72:56 | | AssignExpr | | delegatedProperties.kt:72:39:72:56 | <dispatchReceiver> | delegatedProperties.kt:72:39:72:56 | | VarAccess | -| delegatedProperties.kt:72:39:72:56 | Integer | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | -| delegatedProperties.kt:72:39:72:56 | KProperty0<Integer> | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | +| delegatedProperties.kt:72:39:72:56 | Integer | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | +| delegatedProperties.kt:72:39:72:56 | KProperty0<Integer> | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | | delegatedProperties.kt:72:39:72:56 | MyClass | file://:0:0:0:0 | <none> | TypeAccess | | delegatedProperties.kt:72:39:72:56 | get(...) | delegatedProperties.kt:72:39:72:56 | invoke | MethodCall | | delegatedProperties.kt:72:39:72:56 | getBaseClassInt(...) | delegatedProperties.kt:72:39:72:56 | get | MethodCall | @@ -624,38 +624,38 @@ | delegatedProperties.kt:72:39:72:56 | this | delegatedProperties.kt:72:39:72:56 | invoke | ThisAccess | | delegatedProperties.kt:72:39:72:56 | this.<dispatchReceiver> | delegatedProperties.kt:72:39:72:56 | | VarAccess | | delegatedProperties.kt:72:39:72:56 | this.<dispatchReceiver> | delegatedProperties.kt:72:39:72:56 | get | VarAccess | -| delegatedProperties.kt:73:36:73:56 | ...::... | delegatedProperties.kt:73:36:73:56 | getDelegatedToBaseClass2 | PropertyRefExpr | -| delegatedProperties.kt:73:36:73:56 | ...=... | delegatedProperties.kt:65:1:85:1 | MyClass | KtInitializerAssignExpr | -| delegatedProperties.kt:73:36:73:56 | Base | delegatedProperties.kt:73:36:73:56 | getDelegatedToBaseClass2 | TypeAccess | -| delegatedProperties.kt:73:36:73:56 | Base | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:73:36:73:56 | Integer | delegatedProperties.kt:73:36:73:56 | getDelegatedToBaseClass2 | TypeAccess | -| delegatedProperties.kt:73:36:73:56 | Integer | delegatedProperties.kt:73:36:73:56 | getDelegatedToBaseClass2 | TypeAccess | -| delegatedProperties.kt:73:36:73:56 | Integer | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:73:36:73:56 | KProperty1<Base,Integer> | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:73:36:73:56 | KProperty1<MyClass,Integer> | delegatedProperties.kt:73:36:73:56 | getDelegatedToBaseClass2 | TypeAccess | -| delegatedProperties.kt:73:36:73:56 | MyClass | delegatedProperties.kt:73:36:73:56 | getDelegatedToBaseClass2 | TypeAccess | -| delegatedProperties.kt:73:36:73:56 | PropertyReferenceDelegatesKt | delegatedProperties.kt:73:36:73:56 | getDelegatedToBaseClass2 | TypeAccess | -| delegatedProperties.kt:73:36:73:56 | a0 | delegatedProperties.kt:73:36:73:56 | get | VarAccess | -| delegatedProperties.kt:73:36:73:56 | a0 | delegatedProperties.kt:73:36:73:56 | invoke | VarAccess | -| delegatedProperties.kt:73:36:73:56 | delegatedToBaseClass2$delegate | delegatedProperties.kt:65:1:85:1 | MyClass | VarAccess | -| delegatedProperties.kt:73:36:73:56 | get(...) | delegatedProperties.kt:73:36:73:56 | invoke | MethodCall | -| delegatedProperties.kt:73:36:73:56 | getDelegatedToBaseClass2(...) | delegatedProperties.kt:73:36:73:56 | get | MethodCall | -| delegatedProperties.kt:73:36:73:56 | getValue(...) | delegatedProperties.kt:73:36:73:56 | getDelegatedToBaseClass2 | MethodCall | -| delegatedProperties.kt:73:36:73:56 | int | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:73:36:73:56 | this | delegatedProperties.kt:73:36:73:56 | getDelegatedToBaseClass2 | ThisAccess | -| delegatedProperties.kt:73:36:73:56 | this | delegatedProperties.kt:73:36:73:56 | invoke | ThisAccess | -| delegatedProperties.kt:73:36:73:56 | this.delegatedToBaseClass2$delegate | delegatedProperties.kt:73:36:73:56 | getDelegatedToBaseClass2 | VarAccess | -| delegatedProperties.kt:73:39:73:56 | ...::... | delegatedProperties.kt:65:1:85:1 | MyClass | PropertyRefExpr | -| delegatedProperties.kt:73:39:73:56 | Base | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | -| delegatedProperties.kt:73:39:73:56 | Integer | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | -| delegatedProperties.kt:73:39:73:56 | KProperty1<Base,Integer> | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | +| delegatedProperties.kt:73:39:73:56 | ...::... | delegatedProperties.kt:73:39:73:56 | getDelegatedToBaseClass2 | PropertyRefExpr | +| delegatedProperties.kt:73:39:73:56 | ...=... | delegatedProperties.kt:65:14:65:78 | MyClass | KtInitializerAssignExpr | +| delegatedProperties.kt:73:39:73:56 | Base | delegatedProperties.kt:73:39:73:56 | getDelegatedToBaseClass2 | TypeAccess | +| delegatedProperties.kt:73:39:73:56 | Base | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:73:39:73:56 | Integer | delegatedProperties.kt:73:39:73:56 | getDelegatedToBaseClass2 | TypeAccess | +| delegatedProperties.kt:73:39:73:56 | Integer | delegatedProperties.kt:73:39:73:56 | getDelegatedToBaseClass2 | TypeAccess | +| delegatedProperties.kt:73:39:73:56 | Integer | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:73:39:73:56 | KProperty1<Base,Integer> | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:73:39:73:56 | KProperty1<MyClass,Integer> | delegatedProperties.kt:73:39:73:56 | getDelegatedToBaseClass2 | TypeAccess | +| delegatedProperties.kt:73:39:73:56 | MyClass | delegatedProperties.kt:73:39:73:56 | getDelegatedToBaseClass2 | TypeAccess | +| delegatedProperties.kt:73:39:73:56 | PropertyReferenceDelegatesKt | delegatedProperties.kt:73:39:73:56 | getDelegatedToBaseClass2 | TypeAccess | +| delegatedProperties.kt:73:39:73:56 | a0 | delegatedProperties.kt:73:39:73:56 | get | VarAccess | +| delegatedProperties.kt:73:39:73:56 | a0 | delegatedProperties.kt:73:39:73:56 | invoke | VarAccess | +| delegatedProperties.kt:73:39:73:56 | delegatedToBaseClass2$delegate | delegatedProperties.kt:65:14:65:78 | MyClass | VarAccess | +| delegatedProperties.kt:73:39:73:56 | get(...) | delegatedProperties.kt:73:39:73:56 | invoke | MethodCall | +| delegatedProperties.kt:73:39:73:56 | getDelegatedToBaseClass2(...) | delegatedProperties.kt:73:39:73:56 | get | MethodCall | +| delegatedProperties.kt:73:39:73:56 | getValue(...) | delegatedProperties.kt:73:39:73:56 | getDelegatedToBaseClass2 | MethodCall | +| delegatedProperties.kt:73:39:73:56 | int | file://:0:0:0:0 | <none> | TypeAccess | +| delegatedProperties.kt:73:39:73:56 | this | delegatedProperties.kt:73:39:73:56 | getDelegatedToBaseClass2 | ThisAccess | +| delegatedProperties.kt:73:39:73:56 | this | delegatedProperties.kt:73:39:73:56 | invoke | ThisAccess | +| delegatedProperties.kt:73:39:73:56 | this.delegatedToBaseClass2$delegate | delegatedProperties.kt:73:39:73:56 | getDelegatedToBaseClass2 | VarAccess | +| delegatedProperties.kt:73:39:73:56 | ...::... | delegatedProperties.kt:65:14:65:78 | MyClass | PropertyRefExpr | +| delegatedProperties.kt:73:39:73:56 | Base | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | +| delegatedProperties.kt:73:39:73:56 | Integer | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | +| delegatedProperties.kt:73:39:73:56 | KProperty1<Base,Integer> | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | | delegatedProperties.kt:73:39:73:56 | a0 | delegatedProperties.kt:73:39:73:56 | get | VarAccess | | delegatedProperties.kt:73:39:73:56 | a0 | delegatedProperties.kt:73:39:73:56 | invoke | VarAccess | | delegatedProperties.kt:73:39:73:56 | get(...) | delegatedProperties.kt:73:39:73:56 | invoke | MethodCall | | delegatedProperties.kt:73:39:73:56 | getBaseClassInt(...) | delegatedProperties.kt:73:39:73:56 | get | MethodCall | | delegatedProperties.kt:73:39:73:56 | this | delegatedProperties.kt:73:39:73:56 | invoke | ThisAccess | | delegatedProperties.kt:75:39:75:78 | ...::... | delegatedProperties.kt:75:39:75:78 | getDelegatedToAnotherClass1 | PropertyRefExpr | -| delegatedProperties.kt:75:39:75:78 | ...=... | delegatedProperties.kt:65:1:85:1 | MyClass | KtInitializerAssignExpr | +| delegatedProperties.kt:75:39:75:78 | ...=... | delegatedProperties.kt:65:14:65:78 | MyClass | KtInitializerAssignExpr | | delegatedProperties.kt:75:39:75:78 | Integer | delegatedProperties.kt:75:39:75:78 | getDelegatedToAnotherClass1 | TypeAccess | | delegatedProperties.kt:75:39:75:78 | Integer | delegatedProperties.kt:75:39:75:78 | getDelegatedToAnotherClass1 | TypeAccess | | delegatedProperties.kt:75:39:75:78 | Integer | file://:0:0:0:0 | <none> | TypeAccess | @@ -665,7 +665,7 @@ | delegatedProperties.kt:75:39:75:78 | PropertyReferenceDelegatesKt | delegatedProperties.kt:75:39:75:78 | getDelegatedToAnotherClass1 | TypeAccess | | delegatedProperties.kt:75:39:75:78 | a0 | delegatedProperties.kt:75:39:75:78 | get | VarAccess | | delegatedProperties.kt:75:39:75:78 | a0 | delegatedProperties.kt:75:39:75:78 | invoke | VarAccess | -| delegatedProperties.kt:75:39:75:78 | delegatedToAnotherClass1$delegate | delegatedProperties.kt:65:1:85:1 | MyClass | VarAccess | +| delegatedProperties.kt:75:39:75:78 | delegatedToAnotherClass1$delegate | delegatedProperties.kt:65:14:65:78 | MyClass | VarAccess | | delegatedProperties.kt:75:39:75:78 | get(...) | delegatedProperties.kt:75:39:75:78 | invoke | MethodCall | | delegatedProperties.kt:75:39:75:78 | getDelegatedToAnotherClass1(...) | delegatedProperties.kt:75:39:75:78 | get | MethodCall | | delegatedProperties.kt:75:39:75:78 | getValue(...) | delegatedProperties.kt:75:39:75:78 | getDelegatedToAnotherClass1 | MethodCall | @@ -673,15 +673,15 @@ | delegatedProperties.kt:75:39:75:78 | this | delegatedProperties.kt:75:39:75:78 | getDelegatedToAnotherClass1 | ThisAccess | | delegatedProperties.kt:75:39:75:78 | this | delegatedProperties.kt:75:39:75:78 | invoke | ThisAccess | | delegatedProperties.kt:75:39:75:78 | this.delegatedToAnotherClass1$delegate | delegatedProperties.kt:75:39:75:78 | getDelegatedToAnotherClass1 | VarAccess | -| delegatedProperties.kt:75:42:75:61 | MyClass | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | -| delegatedProperties.kt:75:42:75:61 | MyClass.this | delegatedProperties.kt:65:1:85:1 | MyClass | ThisAccess | -| delegatedProperties.kt:75:42:75:61 | getAnotherClassInstance(...) | delegatedProperties.kt:65:1:85:1 | MyClass | MethodCall | -| delegatedProperties.kt:75:42:75:78 | ...::... | delegatedProperties.kt:65:1:85:1 | MyClass | PropertyRefExpr | +| delegatedProperties.kt:75:42:75:61 | MyClass | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | +| delegatedProperties.kt:75:42:75:61 | MyClass.this | delegatedProperties.kt:65:14:65:78 | MyClass | ThisAccess | +| delegatedProperties.kt:75:42:75:61 | getAnotherClassInstance(...) | delegatedProperties.kt:65:14:65:78 | MyClass | MethodCall | +| delegatedProperties.kt:75:42:75:78 | ...::... | delegatedProperties.kt:65:14:65:78 | MyClass | PropertyRefExpr | | delegatedProperties.kt:75:42:75:78 | ...=... | delegatedProperties.kt:75:42:75:78 | | AssignExpr | | delegatedProperties.kt:75:42:75:78 | <dispatchReceiver> | delegatedProperties.kt:75:42:75:78 | | VarAccess | | delegatedProperties.kt:75:42:75:78 | ClassWithDelegate | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:75:42:75:78 | Integer | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | -| delegatedProperties.kt:75:42:75:78 | KProperty0<Integer> | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | +| delegatedProperties.kt:75:42:75:78 | Integer | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | +| delegatedProperties.kt:75:42:75:78 | KProperty0<Integer> | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | | delegatedProperties.kt:75:42:75:78 | get(...) | delegatedProperties.kt:75:42:75:78 | invoke | MethodCall | | delegatedProperties.kt:75:42:75:78 | getAnotherClassInt(...) | delegatedProperties.kt:75:42:75:78 | get | MethodCall | | delegatedProperties.kt:75:42:75:78 | this | delegatedProperties.kt:75:42:75:78 | | ThisAccess | @@ -691,7 +691,7 @@ | delegatedProperties.kt:75:42:75:78 | this.<dispatchReceiver> | delegatedProperties.kt:75:42:75:78 | get | VarAccess | | delegatedProperties.kt:77:34:77:49 | ...::... | delegatedProperties.kt:77:34:77:49 | getDelegatedToTopLevel | PropertyRefExpr | | delegatedProperties.kt:77:34:77:49 | ...::... | delegatedProperties.kt:77:34:77:49 | setDelegatedToTopLevel | PropertyRefExpr | -| delegatedProperties.kt:77:34:77:49 | ...=... | delegatedProperties.kt:65:1:85:1 | MyClass | KtInitializerAssignExpr | +| delegatedProperties.kt:77:34:77:49 | ...=... | delegatedProperties.kt:65:14:65:78 | MyClass | KtInitializerAssignExpr | | delegatedProperties.kt:77:34:77:49 | Integer | delegatedProperties.kt:77:34:77:49 | getDelegatedToTopLevel | TypeAccess | | delegatedProperties.kt:77:34:77:49 | Integer | delegatedProperties.kt:77:34:77:49 | getDelegatedToTopLevel | TypeAccess | | delegatedProperties.kt:77:34:77:49 | Integer | delegatedProperties.kt:77:34:77:49 | setDelegatedToTopLevel | TypeAccess | @@ -713,7 +713,7 @@ | delegatedProperties.kt:77:34:77:49 | a0 | delegatedProperties.kt:77:34:77:49 | set | VarAccess | | delegatedProperties.kt:77:34:77:49 | a1 | delegatedProperties.kt:77:34:77:49 | set | VarAccess | | delegatedProperties.kt:77:34:77:49 | a1 | delegatedProperties.kt:77:34:77:49 | set | VarAccess | -| delegatedProperties.kt:77:34:77:49 | delegatedToTopLevel$delegate | delegatedProperties.kt:65:1:85:1 | MyClass | VarAccess | +| delegatedProperties.kt:77:34:77:49 | delegatedToTopLevel$delegate | delegatedProperties.kt:65:14:65:78 | MyClass | VarAccess | | delegatedProperties.kt:77:34:77:49 | get(...) | delegatedProperties.kt:77:34:77:49 | invoke | MethodCall | | delegatedProperties.kt:77:34:77:49 | get(...) | delegatedProperties.kt:77:34:77:49 | invoke | MethodCall | | delegatedProperties.kt:77:34:77:49 | getDelegatedToTopLevel(...) | delegatedProperties.kt:77:34:77:49 | get | MethodCall | @@ -730,19 +730,19 @@ | delegatedProperties.kt:77:34:77:49 | this | delegatedProperties.kt:77:34:77:49 | setDelegatedToTopLevel | ThisAccess | | delegatedProperties.kt:77:34:77:49 | this.delegatedToTopLevel$delegate | delegatedProperties.kt:77:34:77:49 | getDelegatedToTopLevel | VarAccess | | delegatedProperties.kt:77:34:77:49 | this.delegatedToTopLevel$delegate | delegatedProperties.kt:77:34:77:49 | setDelegatedToTopLevel | VarAccess | -| delegatedProperties.kt:77:37:77:49 | ...::... | delegatedProperties.kt:65:1:85:1 | MyClass | PropertyRefExpr | +| delegatedProperties.kt:77:37:77:49 | ...::... | delegatedProperties.kt:65:14:65:78 | MyClass | PropertyRefExpr | | delegatedProperties.kt:77:37:77:49 | <set-?> | delegatedProperties.kt:77:34:77:49 | setDelegatedToTopLevel | VarAccess | | delegatedProperties.kt:77:37:77:49 | DelegatedPropertiesKt | delegatedProperties.kt:77:37:77:49 | get | TypeAccess | | delegatedProperties.kt:77:37:77:49 | DelegatedPropertiesKt | delegatedProperties.kt:77:37:77:49 | set | TypeAccess | -| delegatedProperties.kt:77:37:77:49 | Integer | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | -| delegatedProperties.kt:77:37:77:49 | KMutableProperty0<Integer> | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | +| delegatedProperties.kt:77:37:77:49 | Integer | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | +| delegatedProperties.kt:77:37:77:49 | KMutableProperty0<Integer> | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | | delegatedProperties.kt:77:37:77:49 | a0 | delegatedProperties.kt:77:37:77:49 | set | VarAccess | | delegatedProperties.kt:77:37:77:49 | get(...) | delegatedProperties.kt:77:37:77:49 | invoke | MethodCall | | delegatedProperties.kt:77:37:77:49 | getTopLevelInt(...) | delegatedProperties.kt:77:37:77:49 | get | MethodCall | | delegatedProperties.kt:77:37:77:49 | setTopLevelInt(...) | delegatedProperties.kt:77:37:77:49 | set | MethodCall | | delegatedProperties.kt:77:37:77:49 | this | delegatedProperties.kt:77:37:77:49 | invoke | ThisAccess | | delegatedProperties.kt:79:18:79:38 | ...::... | delegatedProperties.kt:79:18:79:38 | getMax | PropertyRefExpr | -| delegatedProperties.kt:79:18:79:38 | ...=... | delegatedProperties.kt:65:1:85:1 | MyClass | KtInitializerAssignExpr | +| delegatedProperties.kt:79:18:79:38 | ...=... | delegatedProperties.kt:65:14:65:78 | MyClass | KtInitializerAssignExpr | | delegatedProperties.kt:79:18:79:38 | Integer | delegatedProperties.kt:79:18:79:38 | getMax | TypeAccess | | delegatedProperties.kt:79:18:79:38 | Integer | delegatedProperties.kt:79:18:79:38 | getMax | TypeAccess | | delegatedProperties.kt:79:18:79:38 | Integer | file://:0:0:0:0 | <none> | TypeAccess | @@ -756,13 +756,13 @@ | delegatedProperties.kt:79:18:79:38 | getMax(...) | delegatedProperties.kt:79:18:79:38 | get | MethodCall | | delegatedProperties.kt:79:18:79:38 | getValue(...) | delegatedProperties.kt:79:18:79:38 | getMax | MethodCall | | delegatedProperties.kt:79:18:79:38 | int | file://:0:0:0:0 | <none> | TypeAccess | -| delegatedProperties.kt:79:18:79:38 | max$delegate | delegatedProperties.kt:65:1:85:1 | MyClass | VarAccess | +| delegatedProperties.kt:79:18:79:38 | max$delegate | delegatedProperties.kt:65:14:65:78 | MyClass | VarAccess | | delegatedProperties.kt:79:18:79:38 | this | delegatedProperties.kt:79:18:79:38 | getMax | ThisAccess | | delegatedProperties.kt:79:18:79:38 | this | delegatedProperties.kt:79:18:79:38 | invoke | ThisAccess | | delegatedProperties.kt:79:18:79:38 | this.max$delegate | delegatedProperties.kt:79:18:79:38 | getMax | VarAccess | -| delegatedProperties.kt:79:21:79:38 | ...::... | delegatedProperties.kt:65:1:85:1 | MyClass | PropertyRefExpr | -| delegatedProperties.kt:79:21:79:38 | Integer | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | -| delegatedProperties.kt:79:21:79:38 | KProperty0<Integer> | delegatedProperties.kt:65:1:85:1 | MyClass | TypeAccess | +| delegatedProperties.kt:79:21:79:38 | ...::... | delegatedProperties.kt:65:14:65:78 | MyClass | PropertyRefExpr | +| delegatedProperties.kt:79:21:79:38 | Integer | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | +| delegatedProperties.kt:79:21:79:38 | KProperty0<Integer> | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess | | delegatedProperties.kt:79:21:79:38 | MAX_VALUE | delegatedProperties.kt:79:21:79:38 | get | VarAccess | | delegatedProperties.kt:79:21:79:38 | get(...) | delegatedProperties.kt:79:21:79:38 | invoke | MethodCall | | delegatedProperties.kt:79:21:79:38 | this | delegatedProperties.kt:79:21:79:38 | invoke | ThisAccess | @@ -1414,29 +1414,29 @@ | exprs.kt:157:8:157:8 | x | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:157:8:157:21 | ...instanceof... | exprs.kt:156:1:163:1 | typeTests | InstanceOfExpr | | exprs.kt:157:8:157:21 | Subclass1 | exprs.kt:156:1:163:1 | typeTests | TypeAccess | -| exprs.kt:158:13:158:14 | x1 | exprs.kt:156:1:163:1 | typeTests | LocalVariableDeclExpr | +| exprs.kt:158:9:158:29 | x1 | exprs.kt:156:1:163:1 | typeTests | LocalVariableDeclExpr | | exprs.kt:158:29:158:29 | <implicit cast> | exprs.kt:156:1:163:1 | typeTests | ImplicitCastExpr | | exprs.kt:158:29:158:29 | Subclass1 | exprs.kt:156:1:163:1 | typeTests | TypeAccess | | exprs.kt:158:29:158:29 | x | exprs.kt:156:1:163:1 | typeTests | VarAccess | -| exprs.kt:160:9:160:10 | y1 | exprs.kt:156:1:163:1 | typeTests | LocalVariableDeclExpr | +| exprs.kt:160:5:160:60 | y1 | exprs.kt:156:1:163:1 | typeTests | LocalVariableDeclExpr | | exprs.kt:160:25:160:60 | true | exprs.kt:156:1:163:1 | typeTests | BooleanLiteral | | exprs.kt:160:25:160:60 | when ... | exprs.kt:156:1:163:1 | typeTests | WhenExpr | | exprs.kt:160:29:160:29 | x | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:160:29:160:42 | ...instanceof... | exprs.kt:156:1:163:1 | typeTests | InstanceOfExpr | | exprs.kt:160:29:160:42 | Subclass1 | exprs.kt:156:1:163:1 | typeTests | TypeAccess | | exprs.kt:160:45:160:49 | <Stmt> | exprs.kt:156:1:163:1 | typeTests | StmtExpr | -| exprs.kt:160:45:160:49 | <implicit cast> | exprs.kt:156:1:163:1 | typeTests | ImplicitCastExpr | -| exprs.kt:160:45:160:49 | Subclass1 | exprs.kt:156:1:163:1 | typeTests | TypeAccess | +| exprs.kt:160:47:160:47 | <implicit cast> | exprs.kt:156:1:163:1 | typeTests | ImplicitCastExpr | +| exprs.kt:160:47:160:47 | Subclass1 | exprs.kt:156:1:163:1 | typeTests | TypeAccess | | exprs.kt:160:47:160:47 | x | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:160:58:160:58 | y | exprs.kt:156:1:163:1 | typeTests | VarAccess | -| exprs.kt:161:9:161:9 | q | exprs.kt:156:1:163:1 | typeTests | LocalVariableDeclExpr | +| exprs.kt:161:5:161:13 | q | exprs.kt:156:1:163:1 | typeTests | LocalVariableDeclExpr | | exprs.kt:161:13:161:13 | 1 | exprs.kt:156:1:163:1 | typeTests | IntegerLiteral | | exprs.kt:162:5:162:48 | true | exprs.kt:156:1:163:1 | typeTests | BooleanLiteral | | exprs.kt:162:5:162:48 | when ... | exprs.kt:156:1:163:1 | typeTests | WhenExpr | | exprs.kt:162:9:162:9 | x | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:162:9:162:22 | ...instanceof... | exprs.kt:156:1:163:1 | typeTests | InstanceOfExpr | | exprs.kt:162:9:162:22 | Subclass1 | exprs.kt:156:1:163:1 | typeTests | TypeAccess | -| exprs.kt:162:27:162:27 | q | exprs.kt:156:1:163:1 | typeTests | VarAccess | +| exprs.kt:162:27:162:31 | q | exprs.kt:156:1:163:1 | typeTests | VarAccess | | exprs.kt:162:27:162:31 | ...=... | exprs.kt:156:1:163:1 | typeTests | AssignExpr | | exprs.kt:162:31:162:31 | 2 | exprs.kt:156:1:163:1 | typeTests | IntegerLiteral | | exprs.kt:162:42:162:42 | q | exprs.kt:156:1:163:1 | typeTests | VarAccess | @@ -1444,23 +1444,23 @@ | exprs.kt:162:46:162:46 | 3 | exprs.kt:156:1:163:1 | typeTests | IntegerLiteral | | exprs.kt:165:1:172:1 | Unit | file://:0:0:0:0 | <none> | TypeAccess | | exprs.kt:165:9:165:18 | Polygon | file://:0:0:0:0 | <none> | TypeAccess | -| exprs.kt:166:9:166:9 | r | exprs.kt:165:1:172:1 | foo | LocalVariableDeclExpr | +| exprs.kt:166:5:166:25 | r | exprs.kt:165:1:172:1 | foo | LocalVariableDeclExpr | | exprs.kt:166:13:166:13 | p | exprs.kt:165:1:172:1 | foo | VarAccess | | exprs.kt:166:13:166:25 | getBounds(...) | exprs.kt:165:1:172:1 | foo | MethodCall | | exprs.kt:167:5:171:5 | when ... | exprs.kt:165:1:172:1 | foo | WhenExpr | | exprs.kt:167:8:167:8 | r | exprs.kt:165:1:172:1 | foo | VarAccess | | exprs.kt:167:8:167:16 | ... (value not-equals) ... | exprs.kt:165:1:172:1 | foo | ValueNEExpr | | exprs.kt:167:13:167:16 | null | exprs.kt:165:1:172:1 | foo | NullLiteral | -| exprs.kt:168:13:168:14 | r2 | exprs.kt:165:1:172:1 | foo | LocalVariableDeclExpr | +| exprs.kt:168:9:168:29 | r2 | exprs.kt:165:1:172:1 | foo | LocalVariableDeclExpr | | exprs.kt:168:29:168:29 | <implicit not null> | exprs.kt:165:1:172:1 | foo | ImplicitNotNullExpr | | exprs.kt:168:29:168:29 | Rectangle | exprs.kt:165:1:172:1 | foo | TypeAccess | | exprs.kt:168:29:168:29 | r | exprs.kt:165:1:172:1 | foo | VarAccess | -| exprs.kt:169:13:169:18 | height | exprs.kt:165:1:172:1 | foo | LocalVariableDeclExpr | +| exprs.kt:169:9:169:30 | height | exprs.kt:165:1:172:1 | foo | LocalVariableDeclExpr | | exprs.kt:169:22:169:23 | r2 | exprs.kt:165:1:172:1 | foo | VarAccess | | exprs.kt:169:25:169:30 | r2.height | exprs.kt:165:1:172:1 | foo | VarAccess | | exprs.kt:170:9:170:10 | r2 | exprs.kt:165:1:172:1 | foo | VarAccess | -| exprs.kt:170:9:170:17 | r2.height | exprs.kt:165:1:172:1 | foo | VarAccess | -| exprs.kt:170:9:170:21 | ...=... | exprs.kt:165:1:172:1 | foo | AssignExpr | +| exprs.kt:170:12:170:21 | r2.height | exprs.kt:165:1:172:1 | foo | VarAccess | +| exprs.kt:170:12:170:21 | ...=... | exprs.kt:165:1:172:1 | foo | AssignExpr | | exprs.kt:170:21:170:21 | 3 | exprs.kt:165:1:172:1 | foo | IntegerLiteral | | exprs.kt:174:1:176:1 | 0 | exprs.kt:174:1:176:1 | Direction | IntegerLiteral | | exprs.kt:174:1:176:1 | Direction | exprs.kt:174:1:176:1 | Direction | TypeAccess | @@ -1471,7 +1471,7 @@ | exprs.kt:174:1:176:1 | Enum<Direction> | exprs.kt:174:1:176:1 | Direction | TypeAccess | | exprs.kt:174:1:176:1 | EnumEntries<Direction> | file://:0:0:0:0 | <none> | TypeAccess | | exprs.kt:174:1:176:1 | String | file://:0:0:0:0 | <none> | TypeAccess | -| exprs.kt:174:1:176:1 | new Enum(...) | exprs.kt:174:1:176:1 | Direction | ClassInstanceExpr | +| exprs.kt:174:1:176:1 | new Enum<Direction>(...) | exprs.kt:174:1:176:1 | Direction | ClassInstanceExpr | | exprs.kt:174:1:176:1 | null | exprs.kt:174:1:176:1 | Direction | NullLiteral | | exprs.kt:175:5:175:10 | ...=... | exprs.kt:0:0:0:0 | <clinit> | KtInitializerAssignExpr | | exprs.kt:175:5:175:10 | Direction | exprs.kt:0:0:0:0 | <clinit> | TypeAccess | diff --git a/java/ql/test-kotlin2/library-tests/reflection/reflection.expected b/java/ql/test-kotlin2/library-tests/reflection/reflection.expected index d149bd24563..f6c1aa2151d 100644 --- a/java/ql/test-kotlin2/library-tests/reflection/reflection.expected +++ b/java/ql/test-kotlin2/library-tests/reflection/reflection.expected @@ -1,26 +1,26 @@ variableInitializerType -| reflection.kt:7:13:7:15 | KFunction<Double> ref | file://<external>/KFunction.class:0:0:0:0 | KFunction<Double> | reflection.kt:7:49:7:54 | new Function2<Ccc,Integer,Double>(...) { ... } | file://<external>/Function2.class:0:0:0:0 | Function2<Ccc,Integer,Double> | true | -| reflection.kt:7:13:7:15 | KFunction<Double> ref | file://<external>/KFunction.class:0:0:0:0 | KFunction<Double> | reflection.kt:7:49:7:54 | new Function2<Ccc,Integer,Double>(...) { ... } | file://<external>/FunctionReference.class:0:0:0:0 | FunctionReference | true | -| reflection.kt:10:13:10:14 | KProperty1<C,Integer> x0 | file://<external>/KProperty1.class:0:0:0:0 | KProperty1<C,Integer> | reflection.kt:10:38:10:42 | new KProperty1<C,Integer>(...) { ... } | file://<external>/KProperty1.class:0:0:0:0 | KProperty1<C,Integer> | true | -| reflection.kt:10:13:10:14 | KProperty1<C,Integer> x0 | file://<external>/KProperty1.class:0:0:0:0 | KProperty1<C,Integer> | reflection.kt:10:38:10:42 | new KProperty1<C,Integer>(...) { ... } | file://<external>/PropertyReference.class:0:0:0:0 | PropertyReference | true | -| reflection.kt:13:13:13:14 | Getter<C,Integer> x3 | file://<external>/KProperty1$Getter.class:0:0:0:0 | Getter<C,Integer> | file://<external>/KProperty1$Getter.class:0:0:0:0 | Getter<C,Integer> | file://<external>/Function1.class:0:0:0:0 | Function1<C,Integer> | true | -| reflection.kt:13:13:13:14 | Getter<C,Integer> x3 | file://<external>/KProperty1$Getter.class:0:0:0:0 | Getter<C,Integer> | file://<external>/KProperty1$Getter.class:0:0:0:0 | Getter<C,Integer> | file://<external>/KProperty$Getter.class:0:0:0:0 | Getter<Integer> | true | -| reflection.kt:14:13:14:14 | KFunction<Integer> x4 | file://<external>/KFunction.class:0:0:0:0 | KFunction<Integer> | reflection.kt:14:38:14:44 | new Function1<C,Integer>(...) { ... } | file://<external>/Function1.class:0:0:0:0 | Function1<C,Integer> | true | -| reflection.kt:14:13:14:14 | KFunction<Integer> x4 | file://<external>/KFunction.class:0:0:0:0 | KFunction<Integer> | reflection.kt:14:38:14:44 | new Function1<C,Integer>(...) { ... } | file://<external>/FunctionReference.class:0:0:0:0 | FunctionReference | true | -| reflection.kt:15:13:15:14 | KProperty0<Integer> x5 | file://<external>/KProperty0.class:0:0:0:0 | KProperty0<Integer> | reflection.kt:15:35:15:41 | new KProperty0<Integer>(...) { ... } | file://<external>/KProperty0.class:0:0:0:0 | KProperty0<Integer> | true | -| reflection.kt:15:13:15:14 | KProperty0<Integer> x5 | file://<external>/KProperty0.class:0:0:0:0 | KProperty0<Integer> | reflection.kt:15:35:15:41 | new KProperty0<Integer>(...) { ... } | file://<external>/PropertyReference.class:0:0:0:0 | PropertyReference | true | -| reflection.kt:17:13:17:14 | KMutableProperty1<C,Integer> y0 | file://<external>/KMutableProperty1.class:0:0:0:0 | KMutableProperty1<C,Integer> | reflection.kt:17:45:17:49 | new KMutableProperty1<C,Integer>(...) { ... } | file://<external>/KMutableProperty1.class:0:0:0:0 | KMutableProperty1<C,Integer> | true | -| reflection.kt:17:13:17:14 | KMutableProperty1<C,Integer> y0 | file://<external>/KMutableProperty1.class:0:0:0:0 | KMutableProperty1<C,Integer> | reflection.kt:17:45:17:49 | new KMutableProperty1<C,Integer>(...) { ... } | file://<external>/PropertyReference.class:0:0:0:0 | PropertyReference | true | -| reflection.kt:20:13:20:14 | Setter<C,Integer> y3 | file://<external>/KMutableProperty1$Setter.class:0:0:0:0 | Setter<C,Integer> | file://<external>/KMutableProperty1$Setter.class:0:0:0:0 | Setter<C,Integer> | file://<external>/Function2.class:0:0:0:0 | Function2<C,Integer,Unit> | true | -| reflection.kt:20:13:20:14 | Setter<C,Integer> y3 | file://<external>/KMutableProperty1$Setter.class:0:0:0:0 | Setter<C,Integer> | file://<external>/KMutableProperty1$Setter.class:0:0:0:0 | Setter<C,Integer> | file://<external>/KMutableProperty$Setter.class:0:0:0:0 | Setter<Integer> | true | -| reflection.kt:21:13:21:14 | KFunction<Unit> y4 | file://<external>/KFunction.class:0:0:0:0 | KFunction<Unit> | reflection.kt:21:44:21:50 | new Function2<C,Integer,Unit>(...) { ... } | file://<external>/Function2.class:0:0:0:0 | Function2<C,Integer,Unit> | true | -| reflection.kt:21:13:21:14 | KFunction<Unit> y4 | file://<external>/KFunction.class:0:0:0:0 | KFunction<Unit> | reflection.kt:21:44:21:50 | new Function2<C,Integer,Unit>(...) { ... } | file://<external>/FunctionReference.class:0:0:0:0 | FunctionReference | true | -| reflection.kt:22:13:22:14 | KMutableProperty0<Integer> y5 | file://<external>/KMutableProperty0.class:0:0:0:0 | KMutableProperty0<Integer> | reflection.kt:22:42:22:48 | new KMutableProperty0<Integer>(...) { ... } | file://<external>/KMutableProperty0.class:0:0:0:0 | KMutableProperty0<Integer> | true | -| reflection.kt:22:13:22:14 | KMutableProperty0<Integer> y5 | file://<external>/KMutableProperty0.class:0:0:0:0 | KMutableProperty0<Integer> | reflection.kt:22:42:22:48 | new KMutableProperty0<Integer>(...) { ... } | file://<external>/PropertyReference.class:0:0:0:0 | PropertyReference | true | -| reflection.kt:24:13:24:16 | KProperty2<C,Integer,Integer> prop | file://<external>/KProperty2.class:0:0:0:0 | KProperty2<C,Integer,Integer> | file://<external>/KProperty2.class:0:0:0:0 | KProperty2<C,Integer,Integer> | file://<external>/Function2.class:0:0:0:0 | Function2<C,Integer,Integer> | true | -| reflection.kt:24:13:24:16 | KProperty2<C,Integer,Integer> prop | file://<external>/KProperty2.class:0:0:0:0 | KProperty2<C,Integer,Integer> | file://<external>/KProperty2.class:0:0:0:0 | KProperty2<C,Integer,Integer> | file://<external>/KProperty.class:0:0:0:0 | KProperty<Integer> | true | -| reflection.kt:116:13:116:13 | KFunction<Unit> x | file://<external>/KFunction.class:0:0:0:0 | KFunction<Unit> | reflection.kt:116:40:116:44 | new Function1<Integer,Unit>(...) { ... } | file://<external>/Function1.class:0:0:0:0 | Function1<Integer,Unit> | true | -| reflection.kt:116:13:116:13 | KFunction<Unit> x | file://<external>/KFunction.class:0:0:0:0 | KFunction<Unit> | reflection.kt:116:40:116:44 | new Function1<Integer,Unit>(...) { ... } | file://<external>/FunctionReference.class:0:0:0:0 | FunctionReference | true | +| reflection.kt:7:9:7:54 | KFunction<Double> ref | file://<external>/KFunction.class:0:0:0:0 | KFunction<Double> | reflection.kt:7:49:7:54 | new Function2<Ccc,Integer,Double>(...) { ... } | file://<external>/Function2.class:0:0:0:0 | Function2<Ccc,Integer,Double> | true | +| reflection.kt:7:9:7:54 | KFunction<Double> ref | file://<external>/KFunction.class:0:0:0:0 | KFunction<Double> | reflection.kt:7:49:7:54 | new Function2<Ccc,Integer,Double>(...) { ... } | file://<external>/FunctionReference.class:0:0:0:0 | FunctionReference | true | +| reflection.kt:10:9:10:42 | KProperty1<C,Integer> x0 | file://<external>/KProperty1.class:0:0:0:0 | KProperty1<C,Integer> | reflection.kt:10:38:10:42 | new KProperty1<C,Integer>(...) { ... } | file://<external>/KProperty1.class:0:0:0:0 | KProperty1<C,Integer> | true | +| reflection.kt:10:9:10:42 | KProperty1<C,Integer> x0 | file://<external>/KProperty1.class:0:0:0:0 | KProperty1<C,Integer> | reflection.kt:10:38:10:42 | new KProperty1<C,Integer>(...) { ... } | file://<external>/PropertyReference.class:0:0:0:0 | PropertyReference | true | +| reflection.kt:13:9:13:53 | Getter<C,Integer> x3 | file://<external>/KProperty1$Getter.class:0:0:0:0 | Getter<C,Integer> | file://<external>/KProperty1$Getter.class:0:0:0:0 | Getter<C,Integer> | file://<external>/Function1.class:0:0:0:0 | Function1<C,Integer> | true | +| reflection.kt:13:9:13:53 | Getter<C,Integer> x3 | file://<external>/KProperty1$Getter.class:0:0:0:0 | Getter<C,Integer> | file://<external>/KProperty1$Getter.class:0:0:0:0 | Getter<C,Integer> | file://<external>/KProperty$Getter.class:0:0:0:0 | Getter<Integer> | true | +| reflection.kt:14:9:14:44 | KFunction<Integer> x4 | file://<external>/KFunction.class:0:0:0:0 | KFunction<Integer> | reflection.kt:14:38:14:44 | new Function1<C,Integer>(...) { ... } | file://<external>/Function1.class:0:0:0:0 | Function1<C,Integer> | true | +| reflection.kt:14:9:14:44 | KFunction<Integer> x4 | file://<external>/KFunction.class:0:0:0:0 | KFunction<Integer> | reflection.kt:14:38:14:44 | new Function1<C,Integer>(...) { ... } | file://<external>/FunctionReference.class:0:0:0:0 | FunctionReference | true | +| reflection.kt:15:9:15:41 | KProperty0<Integer> x5 | file://<external>/KProperty0.class:0:0:0:0 | KProperty0<Integer> | reflection.kt:15:35:15:41 | new KProperty0<Integer>(...) { ... } | file://<external>/KProperty0.class:0:0:0:0 | KProperty0<Integer> | true | +| reflection.kt:15:9:15:41 | KProperty0<Integer> x5 | file://<external>/KProperty0.class:0:0:0:0 | KProperty0<Integer> | reflection.kt:15:35:15:41 | new KProperty0<Integer>(...) { ... } | file://<external>/PropertyReference.class:0:0:0:0 | PropertyReference | true | +| reflection.kt:17:9:17:49 | KMutableProperty1<C,Integer> y0 | file://<external>/KMutableProperty1.class:0:0:0:0 | KMutableProperty1<C,Integer> | reflection.kt:17:45:17:49 | new KMutableProperty1<C,Integer>(...) { ... } | file://<external>/KMutableProperty1.class:0:0:0:0 | KMutableProperty1<C,Integer> | true | +| reflection.kt:17:9:17:49 | KMutableProperty1<C,Integer> y0 | file://<external>/KMutableProperty1.class:0:0:0:0 | KMutableProperty1<C,Integer> | reflection.kt:17:45:17:49 | new KMutableProperty1<C,Integer>(...) { ... } | file://<external>/PropertyReference.class:0:0:0:0 | PropertyReference | true | +| reflection.kt:20:9:20:60 | Setter<C,Integer> y3 | file://<external>/KMutableProperty1$Setter.class:0:0:0:0 | Setter<C,Integer> | file://<external>/KMutableProperty1$Setter.class:0:0:0:0 | Setter<C,Integer> | file://<external>/Function2.class:0:0:0:0 | Function2<C,Integer,Unit> | true | +| reflection.kt:20:9:20:60 | Setter<C,Integer> y3 | file://<external>/KMutableProperty1$Setter.class:0:0:0:0 | Setter<C,Integer> | file://<external>/KMutableProperty1$Setter.class:0:0:0:0 | Setter<C,Integer> | file://<external>/KMutableProperty$Setter.class:0:0:0:0 | Setter<Integer> | true | +| reflection.kt:21:9:21:50 | KFunction<Unit> y4 | file://<external>/KFunction.class:0:0:0:0 | KFunction<Unit> | reflection.kt:21:44:21:50 | new Function2<C,Integer,Unit>(...) { ... } | file://<external>/Function2.class:0:0:0:0 | Function2<C,Integer,Unit> | true | +| reflection.kt:21:9:21:50 | KFunction<Unit> y4 | file://<external>/KFunction.class:0:0:0:0 | KFunction<Unit> | reflection.kt:21:44:21:50 | new Function2<C,Integer,Unit>(...) { ... } | file://<external>/FunctionReference.class:0:0:0:0 | FunctionReference | true | +| reflection.kt:22:9:22:48 | KMutableProperty0<Integer> y5 | file://<external>/KMutableProperty0.class:0:0:0:0 | KMutableProperty0<Integer> | reflection.kt:22:42:22:48 | new KMutableProperty0<Integer>(...) { ... } | file://<external>/KMutableProperty0.class:0:0:0:0 | KMutableProperty0<Integer> | true | +| reflection.kt:22:9:22:48 | KMutableProperty0<Integer> y5 | file://<external>/KMutableProperty0.class:0:0:0:0 | KMutableProperty0<Integer> | reflection.kt:22:42:22:48 | new KMutableProperty0<Integer>(...) { ... } | file://<external>/PropertyReference.class:0:0:0:0 | PropertyReference | true | +| reflection.kt:24:9:24:91 | KProperty2<C,Integer,Integer> prop | file://<external>/KProperty2.class:0:0:0:0 | KProperty2<C,Integer,Integer> | file://<external>/KProperty2.class:0:0:0:0 | KProperty2<C,Integer,Integer> | file://<external>/Function2.class:0:0:0:0 | Function2<C,Integer,Integer> | true | +| reflection.kt:24:9:24:91 | KProperty2<C,Integer,Integer> prop | file://<external>/KProperty2.class:0:0:0:0 | KProperty2<C,Integer,Integer> | file://<external>/KProperty2.class:0:0:0:0 | KProperty2<C,Integer,Integer> | file://<external>/KProperty.class:0:0:0:0 | KProperty<Integer> | true | +| reflection.kt:116:9:116:44 | KFunction<Unit> x | file://<external>/KFunction.class:0:0:0:0 | KFunction<Unit> | reflection.kt:116:40:116:44 | new Function1<Integer,Unit>(...) { ... } | file://<external>/Function1.class:0:0:0:0 | Function1<Integer,Unit> | true | +| reflection.kt:116:9:116:44 | KFunction<Unit> x | file://<external>/KFunction.class:0:0:0:0 | KFunction<Unit> | reflection.kt:116:40:116:44 | new Function1<Integer,Unit>(...) { ... } | file://<external>/FunctionReference.class:0:0:0:0 | FunctionReference | true | invocation | reflection.kt:8:17:8:24 | getName(...) | file://<external>/KCallable.class:0:0:0:0 | getName | | reflection.kt:11:23:11:33 | get(...) | file://<external>/KProperty1.class:0:0:0:0 | get | @@ -263,30 +263,70 @@ modifiers | reflection.kt:162:25:162:45 | ...::... | reflection.kt:162:25:162:45 | invoke | override | | reflection.kt:162:25:162:45 | ...::... | reflection.kt:162:25:162:45 | invoke | public | compGenerated +| file://<external>/AccessMode.class:0:0:0:0 | getEntries | Default property accessor | | file://<external>/CharProgression.class:0:0:0:0 | forEach | Forwarder for a Kotlin class inheriting an interface default method | | file://<external>/CharProgression.class:0:0:0:0 | spliterator | Forwarder for a Kotlin class inheriting an interface default method | | file://<external>/CharRange.class:0:0:0:0 | forEach | Forwarder for a Kotlin class inheriting an interface default method | | file://<external>/CharRange.class:0:0:0:0 | spliterator | Forwarder for a Kotlin class inheriting an interface default method | +| file://<external>/Character$UnicodeScript.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/ChronoField.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/ChronoUnit.class:0:0:0:0 | getEntries | Default property accessor | | file://<external>/Class2.class:0:0:0:0 | getValue | Default property accessor | | file://<external>/Class2.class:0:0:0:0 | getValue | Default property accessor | +| file://<external>/Collector$Characteristics.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/ConstantPool$Tag.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/DateTimeFormatterBuilder$SettingsParser.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/DayOfWeek.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/DirectMethodHandleDesc$Kind.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/ElementType.class:0:0:0:0 | getEntries | Default property accessor | | file://<external>/EnumEntries.class:0:0:0:0 | forEach | Forwarder for a Kotlin class inheriting an interface default method | | file://<external>/EnumEntries.class:0:0:0:0 | parallelStream | Forwarder for a Kotlin class inheriting an interface default method | | file://<external>/EnumEntries.class:0:0:0:0 | spliterator | Forwarder for a Kotlin class inheriting an interface default method | | file://<external>/EnumEntries.class:0:0:0:0 | stream | Forwarder for a Kotlin class inheriting an interface default method | | file://<external>/EnumEntries.class:0:0:0:0 | toArray | Forwarder for a Kotlin class inheriting an interface default method | +| file://<external>/FormatStyle.class:0:0:0:0 | getEntries | Default property accessor | | file://<external>/IntProgression.class:0:0:0:0 | forEach | Forwarder for a Kotlin class inheriting an interface default method | | file://<external>/IntProgression.class:0:0:0:0 | spliterator | Forwarder for a Kotlin class inheriting an interface default method | | file://<external>/IntRange.class:0:0:0:0 | forEach | Forwarder for a Kotlin class inheriting an interface default method | | file://<external>/IntRange.class:0:0:0:0 | spliterator | Forwarder for a Kotlin class inheriting an interface default method | +| file://<external>/IsoEra.class:0:0:0:0 | getEntries | Default property accessor | | file://<external>/KTypeProjection.class:0:0:0:0 | contravariant | Proxy static method for a @JvmStatic-annotated function or property | | file://<external>/KTypeProjection.class:0:0:0:0 | copy$default | Forwarder for Kotlin calls that need default arguments filling in | | file://<external>/KTypeProjection.class:0:0:0:0 | covariant | Proxy static method for a @JvmStatic-annotated function or property | | file://<external>/KTypeProjection.class:0:0:0:0 | invariant | Proxy static method for a @JvmStatic-annotated function or property | +| file://<external>/LambdaForm$BasicType.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/LambdaForm$Kind.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/LinkOption.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/Locale$Category.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/Locale$FilteringMode.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/Locale$IsoCountryCode.class:0:0:0:0 | getEntries | Default property accessor | | file://<external>/LongProgression.class:0:0:0:0 | forEach | Forwarder for a Kotlin class inheriting an interface default method | | file://<external>/LongProgression.class:0:0:0:0 | spliterator | Forwarder for a Kotlin class inheriting an interface default method | | file://<external>/LongRange.class:0:0:0:0 | forEach | Forwarder for a Kotlin class inheriting an interface default method | | file://<external>/LongRange.class:0:0:0:0 | spliterator | Forwarder for a Kotlin class inheriting an interface default method | +| file://<external>/MethodHandleImpl$ArrayAccess.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/MethodHandleImpl$Intrinsic.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/MethodHandles$Lookup$ClassOption.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/ModuleDescriptor$Exports$Modifier.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/ModuleDescriptor$Modifier.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/ModuleDescriptor$Opens$Modifier.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/ModuleDescriptor$Requires$Modifier.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/Month.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/ObjectInputFilter$Status.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/Proxy$Type.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/ResolverStyle.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/RetentionPolicy.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/SignStyle.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/StackWalker$ExtendedOption.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/StackWalker$Option.class:0:0:0:0 | getEntries | Default property accessor | | file://<external>/String.class:0:0:0:0 | isEmpty | Forwarder for a Kotlin class inheriting an interface default method | +| file://<external>/TextStyle.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/Thread$State.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/TimeUnit.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/VarHandle$AccessMode.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/VarHandle$AccessType.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/Wrapper.class:0:0:0:0 | getEntries | Default property accessor | +| file://<external>/ZoneOffsetTransitionRule$TimeDefinition.class:0:0:0:0 | getEntries | Default property accessor | | reflection.kt:7:49:7:54 | new Function2<Ccc,Integer,Double>(...) { ... } | The class around a local function, a lambda, or a function reference | | reflection.kt:10:38:10:42 | new KProperty1<C,Integer>(...) { ... } | The class around a local function, a lambda, or a function reference | | reflection.kt:14:38:14:44 | new Function1<C,Integer>(...) { ... } | The class around a local function, a lambda, or a function reference | @@ -336,7 +376,7 @@ compGenerated | reflection.kt:153:21:153:44 | new Function1<Integer,Integer>(...) { ... } | The class around a local function, a lambda, or a function reference | | reflection.kt:154:33:154:61 | | Declaring classes of adapter functions in Kotlin | | reflection.kt:154:33:154:61 | new Function2<String,Integer,Integer>(...) { ... } | The class around a local function, a lambda, or a function reference | -| reflection.kt:157:1:157:49 | ConstructorOptional | Forwarder for Kotlin calls that need default arguments filling in | +| reflection.kt:157:26:157:45 | ConstructorOptional | Forwarder for Kotlin calls that need default arguments filling in | | reflection.kt:162:25:162:45 | | Declaring classes of adapter functions in Kotlin | | reflection.kt:162:25:162:45 | new Function1<Integer,ConstructorOptional>(...) { ... } | The class around a local function, a lambda, or a function reference | propertyReferenceOverrides diff --git a/java/ql/test/TestUtilities/InlineFlowTest.qll b/java/ql/test/TestUtilities/InlineFlowTest.qll index d815f302638..500e4783614 100644 --- a/java/ql/test/TestUtilities/InlineFlowTest.qll +++ b/java/ql/test/TestUtilities/InlineFlowTest.qll @@ -10,7 +10,7 @@ private import semmle.code.java.dataflow.internal.DataFlowImplSpecific private import semmle.code.java.dataflow.internal.TaintTrackingImplSpecific private import internal.InlineExpectationsTestImpl -private module FlowTestImpl implements InputSig<JavaDataFlow> { +private module FlowTestImpl implements InputSig<Location, JavaDataFlow> { predicate defaultSource(DataFlow::Node source) { source.asExpr().(MethodCall).getMethod().getName() = ["source", "taint"] } @@ -30,4 +30,4 @@ private module FlowTestImpl implements InputSig<JavaDataFlow> { } } -import InlineFlowTestMake<JavaDataFlow, JavaTaintTracking, Impl, FlowTestImpl> +import InlineFlowTestMake<Location, JavaDataFlow, JavaTaintTracking, Impl, FlowTestImpl> diff --git a/java/ql/test/ext/TestModels/Test.java b/java/ql/test/ext/TestModels/Test.java index 6bbc7a07879..f54007ada9e 100644 --- a/java/ql/test/ext/TestModels/Test.java +++ b/java/ql/test/ext/TestModels/Test.java @@ -110,9 +110,6 @@ public class Test { File f2 = (File)source(); sink(f2.getPath()); // $hasTaintFlow - File f3 = (File)source(); - sink(f3.listFiles()); // $hasTaintFlow - StringWriter sw = (StringWriter)source(); sink(sw.toString()); // $hasTaintFlow diff --git a/java/ql/test/ext/TopJdkApis/TopJdkApisTest.expected b/java/ql/test/ext/TopJdkApis/TopJdkApisTest.expected index 456db638dab..f289ad7feb7 100644 --- a/java/ql/test/ext/TopJdkApis/TopJdkApisTest.expected +++ b/java/ql/test/ext/TopJdkApis/TopJdkApisTest.expected @@ -1,14 +1,7 @@ | java.lang.Runnable#run() | no manual model | -| java.lang.System#getProperty(String) | no manual model | -| java.lang.System#setProperty(String,String) | no manual model | -| java.text.Format#format(Object) | no manual model | -| java.text.MessageFormat#format(String,Object[]) | no manual model | | java.util.Comparator#comparing(Function) | no manual model | | java.util.function.BiConsumer#accept(Object,Object) | no manual model | | java.util.function.BiFunction#apply(Object,Object) | no manual model | | java.util.function.Consumer#accept(Object) | no manual model | | java.util.function.Function#apply(Object) | no manual model | | java.util.function.Supplier#get() | no manual model | -| java.util.stream.Collectors#joining(CharSequence) | no manual model | -| java.util.stream.Collectors#toMap(Function,Function) | no manual model | -| java.util.stream.Stream#collect(Collector) | no manual model | diff --git a/java/ql/test/ext/TopJdkApis/TopJdkApisTest.java b/java/ql/test/ext/TopJdkApis/TopJdkApisTest.java index 90797502198..20e897e9c08 100644 --- a/java/ql/test/ext/TopJdkApis/TopJdkApisTest.java +++ b/java/ql/test/ext/TopJdkApis/TopJdkApisTest.java @@ -37,6 +37,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; +import java.util.concurrent.locks.Lock; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/java/ql/test/library-tests/errorexpr/Test.java b/java/ql/test/library-tests/errorexpr/Test.java index cd18f0564ce..af314e5ced6 100644 --- a/java/ql/test/library-tests/errorexpr/Test.java +++ b/java/ql/test/library-tests/errorexpr/Test.java @@ -15,3 +15,4 @@ public class Test { // Diagnostic Matches: Erroneous node in tree: (ERROR) // Diagnostic Matches: In file Test.java:8:15 no end location for JCMethodInvocation : yield(x) // Diagnostic Matches: 1 errors during annotation processing +// Diagnostic Matches: Unknown or erroneous type for expression of kind ErrorExpr diff --git a/java/ql/test/library-tests/errortype/Diags.expected b/java/ql/test/library-tests/errortype/Diags.expected index 6dd6f1d91a1..c561f5caf8d 100644 --- a/java/ql/test/library-tests/errortype/Diags.expected +++ b/java/ql/test/library-tests/errortype/Diags.expected @@ -1,3 +1,6 @@ | Test.java:0:0:0:0 | 2 javac errors | +| Test.java:6:5:6:15 | Unknown or erroneous type for expression of kind TypeAccess | | Test.java:6:23:6:39 | Unexpected symbol for constructor: new NoSuchClass() | +| Test.java:6:23:6:39 | Unknown or erroneous type for expression of kind ClassInstanceCreation | +| Test.java:6:27:6:37 | Unknown or erroneous type for expression of kind TypeAccess | | file://:0:0:0:0 | 2 errors during annotation processing | diff --git a/java/ql/test/library-tests/errortype/ErrorTypes.expected b/java/ql/test/library-tests/errortype/ErrorTypes.expected index 9214eaa8336..da7029b2ffb 100644 --- a/java/ql/test/library-tests/errortype/ErrorTypes.expected +++ b/java/ql/test/library-tests/errortype/ErrorTypes.expected @@ -1 +1,4 @@ +| Test.java:6:5:6:15 | <TypeAccess of ErrorType> | +| Test.java:6:23:6:39 | <ClassInstanceExpr that calls a missing constructor> | +| Test.java:6:27:6:37 | <TypeAccess of ErrorType> | | Test.java:7:12:7:14 | nsc | diff --git a/java/ql/test/library-tests/errortype/PrintAst.expected b/java/ql/test/library-tests/errortype/PrintAst.expected index d0780a453e9..9dab21189dc 100644 --- a/java/ql/test/library-tests/errortype/PrintAst.expected +++ b/java/ql/test/library-tests/errortype/PrintAst.expected @@ -7,9 +7,9 @@ Test.java: # 5| 3: [TypeAccess] NoSuchClass # 5| 5: [BlockStmt] { ... } # 6| 0: [LocalVariableDeclStmt] var ...; -# 6| 0: [TypeAccess] NoSuchClass +# 6| 0: [TypeAccess] <TypeAccess of ErrorType> # 6| 1: [LocalVariableDeclExpr] nsc # 6| 0: [ClassInstanceExpr] <ClassInstanceExpr that calls a missing constructor> -# 6| -3: [TypeAccess] NoSuchClass +# 6| -3: [TypeAccess] <TypeAccess of ErrorType> # 7| 1: [ReturnStmt] return ... # 7| 0: [VarAccess] nsc diff --git a/java/ql/test/library-tests/errortype/Test.java b/java/ql/test/library-tests/errortype/Test.java index 25fc6591972..715c7af1afc 100644 --- a/java/ql/test/library-tests/errortype/Test.java +++ b/java/ql/test/library-tests/errortype/Test.java @@ -12,3 +12,5 @@ public class Test { // Diagnostic Matches: Unexpected symbol for constructor: new NoSuchClass() // Diagnostic Matches: 2 javac errors // Diagnostic Matches: 2 errors during annotation processing +// Diagnostic Matches: Unknown or erroneous type for expression of kind TypeAccess +// Diagnostic Matches: Unknown or erroneous type for expression of kind ClassInstanceCreation diff --git a/java/ql/test/library-tests/unknown-method-reference-lhs/Diags.expected b/java/ql/test/library-tests/unknown-method-reference-lhs/Diags.expected index c5f9f210946..c9489329f1c 100644 --- a/java/ql/test/library-tests/unknown-method-reference-lhs/Diags.expected +++ b/java/ql/test/library-tests/unknown-method-reference-lhs/Diags.expected @@ -1,2 +1,4 @@ | Test.java:0:0:0:0 | 1 javac errors | | Test.java:4:13:4:30 | Unable to extract method reference Unavailable.f()::g with no owner type | +| Test.java:4:13:4:30 | Unknown or erroneous type for expression of kind MemberReference | +| Test.java:4:13:4:30 | Unknown or erroneous type for expression of kind TypeAccess | diff --git a/java/ql/test/library-tests/unknown-method-reference-lhs/Test.java b/java/ql/test/library-tests/unknown-method-reference-lhs/Test.java index 0d3e46297d7..e2c48e14bd7 100644 --- a/java/ql/test/library-tests/unknown-method-reference-lhs/Test.java +++ b/java/ql/test/library-tests/unknown-method-reference-lhs/Test.java @@ -8,3 +8,5 @@ public class Test { // Diagnostic Matches: 1 javac errors // Diagnostic Matches: Unable to extract method reference Unavailable.f()::g with no owner type +// Diagnostic Matches: Unknown or erroneous type for expression of kind MemberReference +// Diagnostic Matches: Unknown or erroneous type for expression of kind TypeAccess diff --git a/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/TopJdkApisTest/TopJdkApis/java/io/File.java b/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/TopJdkApisTest/TopJdkApis/java/io/File.java index 878aa9d3086..54a16d3c22d 100644 --- a/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/TopJdkApisTest/TopJdkApis/java/io/File.java +++ b/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/TopJdkApisTest/TopJdkApis/java/io/File.java @@ -16,7 +16,6 @@ public class File implements Serializable public File(File p0, String p1){} // manual summary public File(String p0){} // manual summary public File(String p0, String p1){} // manual summary - public File[] listFiles(){ return null; } // manual summary public Path toPath(){ return null; } // manual summary public String getAbsolutePath(){ return null; } // manual summary public String getName(){ return null; } // manual summary @@ -26,6 +25,7 @@ public class File implements Serializable public boolean exists(){ return false; } // manual neutral public boolean isDirectory(){ return false; } // manual neutral public boolean isFile(){ return false; } // manual neutral + public File[] listFiles(){ return null; } // manual neutral public boolean mkdirs(){ return false; } // manual neutral public long length(){ return 0; } // manual neutral } diff --git a/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/TopJdkApisTest/TopJdkApisTest.expected b/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/TopJdkApisTest/TopJdkApisTest.expected index a092100b6a7..64748f77765 100644 --- a/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/TopJdkApisTest/TopJdkApisTest.expected +++ b/java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/TopJdkApisTest/TopJdkApisTest.expected @@ -1,23 +1,23 @@ | java.awt | 0 | 0 | 2 | 1 | 3 | 0.6666666666666666 | 0.0 | 0.6666666666666666 | 0.0 | NaN | 0.3333333333333333 | -| java.io | 0 | 0 | 22 | 15 | 37 | 0.5945945945945946 | 0.0 | 0.5945945945945946 | 0.0 | NaN | 0.40540540540540543 | -| java.lang | 0 | 0 | 62 | 94 | 156 | 0.3974358974358974 | 0.0 | 0.3974358974358974 | 0.0 | NaN | 0.6025641025641025 | +| java.io | 0 | 0 | 20 | 16 | 36 | 0.5555555555555556 | 0.0 | 0.5555555555555556 | 0.0 | NaN | 0.4444444444444444 | +| java.lang | 0 | 0 | 57 | 88 | 145 | 0.3931034482758621 | 0.0 | 0.3931034482758621 | 0.0 | NaN | 0.6068965517241379 | | java.lang.invoke | 0 | 0 | 0 | 1 | 1 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | | java.lang.reflect | 0 | 0 | 0 | 4 | 4 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | -| java.math | 0 | 0 | 0 | 16 | 16 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | -| java.net | 0 | 0 | 5 | 0 | 5 | 1.0 | 0.0 | 1.0 | 0.0 | NaN | 0.0 | +| java.math | 0 | 0 | 0 | 15 | 15 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | +| java.net | 0 | 0 | 4 | 0 | 4 | 1.0 | 0.0 | 1.0 | 0.0 | NaN | 0.0 | | java.nio | 0 | 0 | 2 | 3 | 5 | 0.4 | 0.0 | 0.4 | 0.0 | NaN | 0.6 | | java.nio.charset | 0 | 0 | 0 | 1 | 1 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | -| java.nio.file | 0 | 0 | 7 | 1 | 8 | 0.875 | 0.0 | 0.875 | 0.0 | NaN | 0.125 | +| java.nio.file | 0 | 0 | 6 | 1 | 7 | 0.8571428571428571 | 0.0 | 0.8571428571428571 | 0.0 | NaN | 0.14285714285714285 | | java.sql | 0 | 0 | 1 | 15 | 16 | 0.0625 | 0.0 | 0.0625 | 0.0 | NaN | 0.9375 | | java.text | 0 | 0 | 0 | 5 | 5 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | | java.time | 0 | 0 | 0 | 17 | 17 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | | java.time.chrono | 0 | 0 | 0 | 1 | 1 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | | java.time.format | 0 | 0 | 0 | 2 | 2 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | -| java.util | 0 | 0 | 86 | 66 | 152 | 0.5657894736842105 | 0.0 | 0.5657894736842105 | 0.0 | NaN | 0.4342105263157895 | +| java.util | 0 | 0 | 86 | 64 | 150 | 0.5733333333333334 | 0.0 | 0.5733333333333334 | 0.0 | NaN | 0.4266666666666667 | | java.util.concurrent | 0 | 0 | 9 | 9 | 18 | 0.5 | 0.0 | 0.5 | 0.0 | NaN | 0.5 | | java.util.concurrent.atomic | 0 | 0 | 2 | 11 | 13 | 0.15384615384615385 | 0.0 | 0.15384615384615385 | 0.0 | NaN | 0.8461538461538461 | | java.util.concurrent.locks | 0 | 0 | 0 | 2 | 2 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | -| java.util.function | 0 | 0 | 0 | 6 | 6 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | +| java.util.function | 0 | 0 | 0 | 1 | 1 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 | | java.util.logging | 0 | 0 | 1 | 1 | 2 | 0.5 | 0.0 | 0.5 | 0.0 | NaN | 0.5 | | java.util.regex | 0 | 0 | 3 | 1 | 4 | 0.75 | 0.0 | 0.75 | 0.0 | NaN | 0.25 | | java.util.stream | 0 | 0 | 18 | 8 | 26 | 0.6923076923076923 | 0.0 | 0.6923076923076923 | 0.0 | NaN | 0.3076923076923077 | diff --git a/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageSharedPrefsTest.java b/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageSharedPrefsTest.java index bdd14b0112d..66991adfa64 100644 --- a/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageSharedPrefsTest.java +++ b/java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageSharedPrefsTest.java @@ -2,6 +2,7 @@ import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; +import android.widget.EditText; import androidx.security.crypto.MasterKey; import androidx.security.crypto.EncryptedSharedPreferences; import java.nio.charset.StandardCharsets; @@ -101,4 +102,11 @@ public class CleartextStorageSharedPrefsTest extends Activity { sharedPrefs.edit().putString("name", name).apply(); // Safe sharedPrefs.edit().putString("password", password).apply(); // $hasCleartextStorageSharedPrefs } + + public void testSetSharedPrefs7(Context context, EditText name, EditText password) { + SharedPreferences sharedPrefs = + context.getSharedPreferences("user_prefs", Context.MODE_PRIVATE); + sharedPrefs.edit().putString("name", name.getText().toString()).apply(); // Safe + sharedPrefs.edit().putString("password", password.getText().toString()).apply(); // $hasCleartextStorageSharedPrefs + } } diff --git a/java/ql/test/query-tests/security/CWE-532/Test.java b/java/ql/test/query-tests/security/CWE-532/Test.java index 2f985f0b7bc..f0530a00a83 100644 --- a/java/ql/test/query-tests/security/CWE-532/Test.java +++ b/java/ql/test/query-tests/security/CWE-532/Test.java @@ -19,4 +19,10 @@ class Test { logger.error("Auth failed for: " + username); // Safe } + void test4(String nullToken) { + Logger logger = null; + + logger.error("Auth failed for: " + nullToken); // Safe + } + } diff --git a/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect.expected b/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect.expected index 3757e51134b..cf5af88efd8 100644 --- a/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect.expected +++ b/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect.expected @@ -6,6 +6,7 @@ edges | mad/Test.java:9:16:9:41 | getParameter(...) : String | mad/Test.java:14:31:14:38 | source(...) : String | provenance | | | mad/Test.java:14:31:14:38 | source(...) : String | mad/Test.java:14:22:14:38 | (...)... | provenance | | nodes +| UrlRedirect2.java:27:25:27:54 | getParameter(...) | semmle.label | getParameter(...) | | UrlRedirect.java:23:25:23:54 | getParameter(...) | semmle.label | getParameter(...) | | UrlRedirect.java:32:25:32:67 | weakCleanup(...) | semmle.label | weakCleanup(...) | | UrlRedirect.java:32:37:32:66 | getParameter(...) : String | semmle.label | getParameter(...) : String | @@ -20,6 +21,7 @@ nodes subpaths | UrlRedirect.java:32:37:32:66 | getParameter(...) : String | UrlRedirect.java:45:28:45:39 | input : String | UrlRedirect.java:46:10:46:40 | replaceAll(...) : String | UrlRedirect.java:32:25:32:67 | weakCleanup(...) | #select +| UrlRedirect2.java:27:25:27:54 | getParameter(...) | UrlRedirect2.java:27:25:27:54 | getParameter(...) | UrlRedirect2.java:27:25:27:54 | getParameter(...) | Untrusted URL redirection depends on a $@. | UrlRedirect2.java:27:25:27:54 | getParameter(...) | user-provided value | | UrlRedirect.java:23:25:23:54 | getParameter(...) | UrlRedirect.java:23:25:23:54 | getParameter(...) | UrlRedirect.java:23:25:23:54 | getParameter(...) | Untrusted URL redirection depends on a $@. | UrlRedirect.java:23:25:23:54 | getParameter(...) | user-provided value | | UrlRedirect.java:32:25:32:67 | weakCleanup(...) | UrlRedirect.java:32:37:32:66 | getParameter(...) : String | UrlRedirect.java:32:25:32:67 | weakCleanup(...) | Untrusted URL redirection depends on a $@. | UrlRedirect.java:32:37:32:66 | getParameter(...) | user-provided value | | UrlRedirect.java:39:34:39:63 | getParameter(...) | UrlRedirect.java:39:34:39:63 | getParameter(...) | UrlRedirect.java:39:34:39:63 | getParameter(...) | Untrusted URL redirection depends on a $@. | UrlRedirect.java:39:34:39:63 | getParameter(...) | user-provided value | diff --git a/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect2.java b/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect2.java new file mode 100644 index 00000000000..9014dcae7f2 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-601/semmle/tests/UrlRedirect2.java @@ -0,0 +1,52 @@ +// Test case for +// CWE-601: URL Redirection to Untrusted Site ('Open Redirect') +// http://cwe.mitre.org/data/definitions/601.html + +package test.cwe601.cwe.examples; + +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.net.URI; +import java.net.URISyntaxException; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class UrlRedirect2 extends HttpServlet { + private static final List<String> VALID_REDIRECTS = Arrays.asList( + "http://cwe.mitre.org/data/definitions/601.html", + "http://cwe.mitre.org/data/definitions/79.html" + ); + + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + // BAD: a request parameter is incorporated without validation into a URL redirect + response.sendRedirect(request.getParameter("target")); + + // GOOD: the request parameter is validated against a known list of strings + String target = request.getParameter("target"); + if (VALID_REDIRECTS.contains(target)) { + response.sendRedirect(target); + } + + try { + String urlString = request.getParameter("page"); + URI url = new URI(urlString); + + if (!url.isAbsolute()) { + // GOOD: The redirect is to a relative URL + response.sendRedirect(url.toString()); + } + + if ("example.org".equals(url.getHost())) { + // GOOD: The redirect is to a known host + response.sendRedirect(url.toString()); + } + } catch (URISyntaxException e) { + // handle exception + } + } +} diff --git a/java/ql/test/utils/modelgenerator/dataflow/CaptureSummaryModels.expected b/java/ql/test/utils/modelgenerator/dataflow/CaptureSummaryModels.expected index 014d47f25dd..2654c4d94d6 100644 --- a/java/ql/test/utils/modelgenerator/dataflow/CaptureSummaryModels.expected +++ b/java/ql/test/utils/modelgenerator/dataflow/CaptureSummaryModels.expected @@ -21,7 +21,6 @@ | p;Joiner;false;merge;(Joiner);;Argument[this];ReturnValue;value;df-generated | | p;Joiner;false;setEmptyValue;(CharSequence);;Argument[0];Argument[this];taint;df-generated | | p;Joiner;false;setEmptyValue;(CharSequence);;Argument[this];ReturnValue;value;df-generated | -| p;Joiner;false;toString;();;Argument[this];ReturnValue;taint;df-generated | | p;MultipleImpl2$IInterface;true;m;(Object);;Argument[0];ReturnValue;taint;df-generated | | p;MultipleImpls$Strat2;true;getValue;();;Argument[this];ReturnValue;taint;df-generated | | p;MultipleImpls$Strategy;true;doSomething;(String);;Argument[0];Argument[this];taint;df-generated | diff --git a/javascript/extractor/lib/typescript/package-lock.json b/javascript/extractor/lib/typescript/package-lock.json index 2d448ae0448..e03fbf0c6a6 100644 --- a/javascript/extractor/lib/typescript/package-lock.json +++ b/javascript/extractor/lib/typescript/package-lock.json @@ -6,7 +6,7 @@ "": { "name": "typescript-parser-wrapper", "dependencies": { - "typescript": "5.3.2" + "typescript": "5.4.2" }, "devDependencies": { "@types/node": "18.15.3" @@ -20,9 +20,9 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz", - "integrity": "sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", + "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/javascript/extractor/lib/typescript/package.json b/javascript/extractor/lib/typescript/package.json index 602379bc36a..d8b228fc402 100644 --- a/javascript/extractor/lib/typescript/package.json +++ b/javascript/extractor/lib/typescript/package.json @@ -2,7 +2,7 @@ "name": "typescript-parser-wrapper", "private": true, "dependencies": { - "typescript": "5.3.2" + "typescript": "5.4.2" }, "scripts": { "build": "tsc --project tsconfig.json", diff --git a/javascript/ql/lib/change-notes/2024-02-02-typescript-5-4.md b/javascript/ql/lib/change-notes/2024-02-02-typescript-5-4.md new file mode 100644 index 00000000000..836719b5d6b --- /dev/null +++ b/javascript/ql/lib/change-notes/2024-02-02-typescript-5-4.md @@ -0,0 +1,4 @@ +--- +category: majorAnalysis +--- +* Added support for TypeScript 5.4. \ No newline at end of file diff --git a/javascript/ql/lib/semmle/javascript/AST.qll b/javascript/ql/lib/semmle/javascript/AST.qll index e4a1cf944c4..412f2036280 100644 --- a/javascript/ql/lib/semmle/javascript/AST.qll +++ b/javascript/ql/lib/semmle/javascript/AST.qll @@ -23,31 +23,27 @@ private import semmle.javascript.internal.CachedStages * ``` */ class AstNode extends @ast_node, NodeInStmtContainer { - override Location getLocation() { hasLocation(this, result) } - override File getFile() { result = this.getLocation().getFile() // Specialized for performance reasons } /** Gets the first token belonging to this element. */ Token getFirstToken() { - exists(Location l1, Location l2 | + exists(DbLocation l1, DbLocation l2, string filepath, int startline, int startcolumn | l1 = this.getLocation() and l2 = result.getLocation() and - l1.getFile() = l2.getFile() and - l1.getStartLine() = l2.getStartLine() and - l1.getStartColumn() = l2.getStartColumn() + l1.hasLocationInfo(filepath, startline, startcolumn, _, _) and + l2.hasLocationInfo(filepath, startline, startcolumn, _, _) ) } /** Gets the last token belonging to this element. */ Token getLastToken() { - exists(Location l1, Location l2 | + exists(DbLocation l1, DbLocation l2, string filepath, int endline, int endcolumn | l1 = this.getLocation() and l2 = result.getLocation() and - l1.getFile() = l2.getFile() and - l1.getEndLine() = l2.getEndLine() and - l1.getEndColumn() = l2.getEndColumn() + l1.hasLocationInfo(filepath, _, _, endline, endcolumn) and + l2.hasLocationInfo(filepath, _, _, endline, endcolumn) ) and // exclude empty EOF token not result instanceof EOFToken diff --git a/javascript/ql/lib/semmle/javascript/Arrays.qll b/javascript/ql/lib/semmle/javascript/Arrays.qll index 64ed34ae631..cd982855a15 100644 --- a/javascript/ql/lib/semmle/javascript/Arrays.qll +++ b/javascript/ql/lib/semmle/javascript/Arrays.qll @@ -36,7 +36,8 @@ module ArrayTaintTracking { succ = call ) or - // `array.filter(x => x)` and `array.filter(x => !!x)` keeps the taint + // `array.filter(x => x)` and `array.filter(x => !<something>)` keeps the taint + // the latter is assumed to filter away only specific values, thus keeping the taint call.(DataFlow::MethodCallNode).getMethodName() = "filter" and pred = call.getReceiver() and succ = call and @@ -47,7 +48,7 @@ module ArrayTaintTracking { | param = ret or - param = DataFlow::exprNode(ret.asExpr().(LogNotExpr).getOperand().(LogNotExpr).getOperand()) + ret.asExpr() instanceof LogNotExpr ) or // `array.reduce` with tainted value in callback diff --git a/javascript/ql/lib/semmle/javascript/CFG.qll b/javascript/ql/lib/semmle/javascript/CFG.qll index 81bbef4c6d2..95e1e9aef72 100644 --- a/javascript/ql/lib/semmle/javascript/CFG.qll +++ b/javascript/ql/lib/semmle/javascript/CFG.qll @@ -356,9 +356,7 @@ class ControlFlowNode extends @cfg_node, Locatable, NodeInStmtContainer { * A synthetic CFG node that does not correspond to a statement or expression; * examples include guard nodes and entry/exit nodes. */ -class SyntheticControlFlowNode extends @synthetic_cfg_node, ControlFlowNode { - override Location getLocation() { hasLocation(this, result) } -} +class SyntheticControlFlowNode extends @synthetic_cfg_node, ControlFlowNode { } /** A synthetic CFG node marking the entry point of a function or toplevel script. */ class ControlFlowEntryNode extends SyntheticControlFlowNode, @entry_node { diff --git a/javascript/ql/lib/semmle/javascript/Comments.qll b/javascript/ql/lib/semmle/javascript/Comments.qll index 4888aae0b6d..889843728a2 100644 --- a/javascript/ql/lib/semmle/javascript/Comments.qll +++ b/javascript/ql/lib/semmle/javascript/Comments.qll @@ -15,8 +15,6 @@ import javascript * </pre> */ class Comment extends @comment, Locatable { - override Location getLocation() { hasLocation(this, result) } - /** Gets the toplevel element this comment belongs to. */ TopLevel getTopLevel() { comments(this, _, result, _, _) } diff --git a/javascript/ql/lib/semmle/javascript/Errors.qll b/javascript/ql/lib/semmle/javascript/Errors.qll index 72996502997..6a5d73566a4 100644 --- a/javascript/ql/lib/semmle/javascript/Errors.qll +++ b/javascript/ql/lib/semmle/javascript/Errors.qll @@ -4,8 +4,6 @@ import javascript /** An error encountered during extraction. */ abstract class Error extends Locatable { - override Location getLocation() { hasLocation(this, result) } - /** Gets the message associated with this error. */ abstract string getMessage(); diff --git a/javascript/ql/lib/semmle/javascript/Files.qll b/javascript/ql/lib/semmle/javascript/Files.qll index b384febb9a1..88513f087ae 100644 --- a/javascript/ql/lib/semmle/javascript/Files.qll +++ b/javascript/ql/lib/semmle/javascript/Files.qll @@ -3,6 +3,7 @@ import javascript private import NodeModuleResolutionImpl private import codeql.util.FileSystem +private import internal.Locations private module FsInput implements InputSig { abstract class ContainerBase extends @container { @@ -83,7 +84,7 @@ class File extends Container, Impl::File { * * Note that files have special locations starting and ending at line zero, column zero. */ - Location getLocation() { hasLocation(this, result) } + DbLocation getLocation() { result = getLocatableLocation(this) } /** Gets the number of lines in this file. */ int getNumberOfLines() { result = sum(int loc | numlines(this, loc, _, _) | loc) } diff --git a/javascript/ql/lib/semmle/javascript/HTML.qll b/javascript/ql/lib/semmle/javascript/HTML.qll index 5ba02cba7cb..01ce54cef52 100644 --- a/javascript/ql/lib/semmle/javascript/HTML.qll +++ b/javascript/ql/lib/semmle/javascript/HTML.qll @@ -43,8 +43,6 @@ module HTML { class Element extends Locatable, @xmlelement { Element() { exists(FileContainingHtml f | xmlElements(this, _, _, _, f)) } - override Location getLocation() { xmllocations(this, result) } - /** * Gets the name of this HTML element. * @@ -122,8 +120,6 @@ module HTML { class Attribute extends Locatable, @xmlattribute { Attribute() { exists(FileContainingHtml f | xmlAttrs(this, _, _, _, _, f)) } - override Location getLocation() { xmllocations(this, result) } - /** * Gets the inline script of this attribute, if any. */ @@ -326,8 +322,6 @@ module HTML { * Holds if this text node is inside a `CDATA` tag. */ predicate isCData() { xmlChars(this, _, _, _, 1, _) } - - override Location getLocation() { xmllocations(this, result) } } /** @@ -349,7 +343,5 @@ module HTML { string getText() { result = this.toString().regexpCapture("(?s)<!--(.*)-->", 1) } override string toString() { xmlComments(this, result, _, _) } - - override Location getLocation() { xmllocations(this, result) } } } diff --git a/javascript/ql/lib/semmle/javascript/JSDoc.qll b/javascript/ql/lib/semmle/javascript/JSDoc.qll index 44ec09f34e4..6e1ea5caecb 100644 --- a/javascript/ql/lib/semmle/javascript/JSDoc.qll +++ b/javascript/ql/lib/semmle/javascript/JSDoc.qll @@ -18,8 +18,6 @@ private import semmle.javascript.internal.CachedStages * </pre> */ class JSDoc extends @jsdoc, Locatable { - override Location getLocation() { hasLocation(this, result) } - /** Gets the description text of this JSDoc comment. */ string getDescription() { jsdoc(this, result, _) } @@ -75,8 +73,6 @@ abstract class Documentable extends AstNode { * ``` */ class JSDocTypeExprParent extends @jsdoc_type_expr_parent, Locatable { - override Location getLocation() { hasLocation(this, result) } - /** Gets the JSDoc comment to which this element belongs. */ JSDoc getJSDocComment() { none() } } diff --git a/javascript/ql/lib/semmle/javascript/JSON.qll b/javascript/ql/lib/semmle/javascript/JSON.qll index 1e56fc00657..714228e52b6 100644 --- a/javascript/ql/lib/semmle/javascript/JSON.qll +++ b/javascript/ql/lib/semmle/javascript/JSON.qll @@ -3,6 +3,7 @@ */ import javascript +private import semmle.javascript.internal.Locations /** * A JSON-encoded value, which may be a primitive value, an array or an object. @@ -20,8 +21,6 @@ import javascript * ``` */ class JsonValue extends @json_value, Locatable { - override Location getLocation() { json_locations(this, result) } - /** Gets the parent value to which this value belongs, if any. */ JsonValue getParent() { json(this, _, result, _, _) } @@ -34,12 +33,7 @@ class JsonValue extends @json_value, Locatable { override string toString() { json(this, _, _, _, result) } /** Gets the JSON file containing this value. */ - File getJsonFile() { - exists(Location loc | - json_locations(this, loc) and - result = loc.getFile() - ) - } + File getJsonFile() { result = getLocatableLocation(this).getFile() } /** If this is an object, gets the value of property `name`. */ JsonValue getPropValue(string name) { json_properties(this, name, result) } @@ -172,7 +166,5 @@ class JsonObject extends @json_object, JsonValue { * An error reported by the JSON parser. */ class JsonParseError extends @json_parse_error, Error { - override Location getLocation() { json_locations(this, result) } - override string getMessage() { json_errors(this, result) } } diff --git a/javascript/ql/lib/semmle/javascript/Lines.qll b/javascript/ql/lib/semmle/javascript/Lines.qll index 08a013e52e8..1db9187008a 100644 --- a/javascript/ql/lib/semmle/javascript/Lines.qll +++ b/javascript/ql/lib/semmle/javascript/Lines.qll @@ -14,8 +14,6 @@ import javascript * extracted with the `--extract-program-text` flag. */ class Line extends @line, Locatable { - override Location getLocation() { hasLocation(this, result) } - /** Gets the toplevel element this line belongs to. */ TopLevel getTopLevel() { lines(this, result, _, _) } diff --git a/javascript/ql/lib/semmle/javascript/Locations.qll b/javascript/ql/lib/semmle/javascript/Locations.qll index c0748f7b3e7..ce323dfc14d 100644 --- a/javascript/ql/lib/semmle/javascript/Locations.qll +++ b/javascript/ql/lib/semmle/javascript/Locations.qll @@ -1,38 +1,41 @@ /** Provides classes for working with locations and program elements that have locations. */ import javascript +private import internal.Locations /** * A location as given by a file, a start line, a start column, * an end line, and an end column. * + * This class is restricted to locations created by the extractor. + * * For more information about locations see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ -class Location extends @location { +class DbLocation extends TDbLocation { /** Gets the file for this location. */ - File getFile() { locations_default(this, result, _, _, _, _) } + File getFile() { dbLocationInfo(this, result, _, _, _, _) } /** Gets the 1-based line number (inclusive) where this location starts. */ - int getStartLine() { locations_default(this, _, result, _, _, _) } + int getStartLine() { dbLocationInfo(this, _, result, _, _, _) } /** Gets the 1-based column number (inclusive) where this location starts. */ - int getStartColumn() { locations_default(this, _, _, result, _, _) } + int getStartColumn() { dbLocationInfo(this, _, _, result, _, _) } /** Gets the 1-based line number (inclusive) where this location ends. */ - int getEndLine() { locations_default(this, _, _, _, result, _) } + int getEndLine() { dbLocationInfo(this, _, _, _, result, _) } /** Gets the 1-based column number (inclusive) where this location ends. */ - int getEndColumn() { locations_default(this, _, _, _, _, result) } + int getEndColumn() { dbLocationInfo(this, _, _, _, _, result) } /** Gets the number of lines covered by this location. */ int getNumLines() { result = this.getEndLine() - this.getStartLine() + 1 } /** Holds if this location starts before location `that`. */ pragma[inline] - predicate startsBefore(Location that) { + predicate startsBefore(DbLocation that) { exists(File f, int sl1, int sc1, int sl2, int sc2 | - locations_default(this, f, sl1, sc1, _, _) and - locations_default(that, f, sl2, sc2, _, _) + dbLocationInfo(this, f, sl1, sc1, _, _) and + dbLocationInfo(that, f, sl2, sc2, _, _) | sl1 < sl2 or @@ -42,10 +45,10 @@ class Location extends @location { /** Holds if this location ends after location `that`. */ pragma[inline] - predicate endsAfter(Location that) { + predicate endsAfter(DbLocation that) { exists(File f, int el1, int ec1, int el2, int ec2 | - locations_default(this, f, _, _, el1, ec1) and - locations_default(that, f, _, _, el2, ec2) + dbLocationInfo(this, f, _, _, el1, ec1) and + dbLocationInfo(that, f, _, _, el2, ec2) | el1 > el2 or @@ -57,10 +60,10 @@ class Location extends @location { * Holds if this location contains location `that`, meaning that it starts * before and ends after it. */ - predicate contains(Location that) { this.startsBefore(that) and this.endsAfter(that) } + predicate contains(DbLocation that) { this.startsBefore(that) and this.endsAfter(that) } /** Holds if this location is empty. */ - predicate isEmpty() { exists(int l, int c | locations_default(this, _, l, c, l, c - 1)) } + predicate isEmpty() { exists(int l, int c | dbLocationInfo(this, _, l, c, l, c - 1)) } /** Gets a textual representation of this element. */ string toString() { result = this.getFile().getBaseName() + ":" + this.getStartLine().toString() } @@ -76,22 +79,21 @@ class Location extends @location { string filepath, int startline, int startcolumn, int endline, int endcolumn ) { exists(File f | - locations_default(this, f, startline, startcolumn, endline, endcolumn) and + dbLocationInfo(this, f, startline, startcolumn, endline, endcolumn) and filepath = f.getAbsolutePath() ) } } +final class Location = LocationImpl; + /** A program element with a location. */ class Locatable extends @locatable { /** Gets the file this program element comes from. */ File getFile() { result = this.getLocation().getFile() } /** Gets this element's location. */ - Location getLocation() { - // overridden by subclasses - none() - } + final DbLocation getLocation() { result = getLocatableLocation(this) } /** * Gets the line on which this element starts. @@ -142,16 +144,3 @@ class Locatable extends @locatable { */ string getAPrimaryQlClass() { result = "???" } } - -/** - * A `File`, considered as a `Locatable`. - * - * For reasons of backwards compatibility, @file is a subtype of @locatable. This class exists to - * provide an override of `Locatable.getLocation()` for @files, since it would otherwise default - * to `none()`, which is unhelpful. - */ -private class FileLocatable extends File, Locatable { - override Location getLocation() { result = File.super.getLocation() } - - override string toString() { result = File.super.toString() } -} diff --git a/javascript/ql/lib/semmle/javascript/Regexp.qll b/javascript/ql/lib/semmle/javascript/Regexp.qll index 3266f1527a2..3c190af4476 100644 --- a/javascript/ql/lib/semmle/javascript/Regexp.qll +++ b/javascript/ql/lib/semmle/javascript/Regexp.qll @@ -43,8 +43,6 @@ class RegExpParent extends Locatable, @regexpparent { } * ``` */ class RegExpTerm extends Locatable, @regexpterm { - override Location getLocation() { hasLocation(this, result) } - /** Gets the `i`th child term of this term. */ RegExpTerm getChild(int i) { regexpterm(result, _, this, i, _) } diff --git a/javascript/ql/lib/semmle/javascript/RestrictedLocations.qll b/javascript/ql/lib/semmle/javascript/RestrictedLocations.qll index 47ee41a4235..05bcd8b3ddd 100644 --- a/javascript/ql/lib/semmle/javascript/RestrictedLocations.qll +++ b/javascript/ql/lib/semmle/javascript/RestrictedLocations.qll @@ -26,7 +26,7 @@ class FirstLineOf extends Locatable { then endcolumn = xc else endcolumn = - max(int c | any(Location l).hasLocationInfo(filepath, startline, _, startline, c)) + max(int c | any(DbLocation l).hasLocationInfo(filepath, startline, _, startline, c)) ) } } diff --git a/javascript/ql/lib/semmle/javascript/SSA.qll b/javascript/ql/lib/semmle/javascript/SSA.qll index a505cf5ff48..2de42193743 100644 --- a/javascript/ql/lib/semmle/javascript/SSA.qll +++ b/javascript/ql/lib/semmle/javascript/SSA.qll @@ -488,6 +488,14 @@ class SsaDefinition extends TSsaDefinition { string filepath, int startline, int startcolumn, int endline, int endcolumn ); + /** Gets the location of this element. */ + final Location getLocation() { + exists(string filepath, int startline, int startcolumn, int endline, int endcolumn | + this.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) and + result.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + ) + } + /** Gets the function or toplevel to which this definition belongs. */ StmtContainer getContainer() { result = this.getBasicBlock().getContainer() } } diff --git a/javascript/ql/lib/semmle/javascript/Tokens.qll b/javascript/ql/lib/semmle/javascript/Tokens.qll index 52659f444c4..c6a9b05a3d1 100644 --- a/javascript/ql/lib/semmle/javascript/Tokens.qll +++ b/javascript/ql/lib/semmle/javascript/Tokens.qll @@ -17,8 +17,6 @@ import javascript * ``` */ class Token extends Locatable, @token { - override Location getLocation() { hasLocation(this, result) } - /** Gets the toplevel syntactic structure to which this token belongs. */ TopLevel getTopLevel() { tokeninfo(this, _, result, _, _) } diff --git a/javascript/ql/lib/semmle/javascript/Variables.qll b/javascript/ql/lib/semmle/javascript/Variables.qll index 00b463f8a9b..1eeb735124b 100644 --- a/javascript/ql/lib/semmle/javascript/Variables.qll +++ b/javascript/ql/lib/semmle/javascript/Variables.qll @@ -329,9 +329,9 @@ class LocalVariable extends Variable { * If the variable has one or more declarations, the location of the first declaration is used. * If the variable has no declaration, the entry point of its declaring container is used. */ - Location getLocation() { + DbLocation getLocation() { result = - min(Location loc | + min(DbLocation loc | loc = this.getADeclaration().getLocation() | loc order by loc.getStartLine(), loc.getStartColumn() diff --git a/javascript/ql/lib/semmle/javascript/XML.qll b/javascript/ql/lib/semmle/javascript/XML.qll index 65bdd7b7cc1..1a27c9a1ef3 100644 --- a/javascript/ql/lib/semmle/javascript/XML.qll +++ b/javascript/ql/lib/semmle/javascript/XML.qll @@ -3,6 +3,7 @@ */ import semmle.files.FileSystem +private import semmle.javascript.internal.Locations private class TXmlLocatable = @xmldtd or @xmlelement or @xmlattribute or @xmlnamespace or @xmlcomment or @xmlcharacters; @@ -10,7 +11,7 @@ private class TXmlLocatable = /** An XML element that has a location. */ class XmlLocatable extends @xmllocatable, TXmlLocatable { /** Gets the source location for this element. */ - Location getLocation() { xmllocations(this, result) } + DbLocation getLocation() { result = getLocatableLocation(this) } /** * Holds if this element is at the specified location. @@ -22,10 +23,7 @@ class XmlLocatable extends @xmllocatable, TXmlLocatable { predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { - exists(File f, Location l | l = this.getLocation() | - locations_default(l, f, startline, startcolumn, endline, endcolumn) and - filepath = f.getAbsolutePath() - ) + this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) } /** Gets a textual representation of this element. */ diff --git a/javascript/ql/lib/semmle/javascript/YAML.qll b/javascript/ql/lib/semmle/javascript/YAML.qll index 38bca777900..1ab562b9524 100644 --- a/javascript/ql/lib/semmle/javascript/YAML.qll +++ b/javascript/ql/lib/semmle/javascript/YAML.qll @@ -9,9 +9,9 @@ import javascript private import codeql.yaml.Yaml as LibYaml private module YamlSig implements LibYaml::InputSig { - class LocatableBase extends @yaml_locatable, Locatable { - override Location getLocation() { yaml_locations(this, result) } - } + class Location = DbLocation; + + class LocatableBase extends @yaml_locatable, Locatable { } import javascript @@ -52,8 +52,6 @@ import LibYaml::Make<YamlSig> private class MyYmlNode extends Locatable instanceof YamlNode { override string getAPrimaryQlClass() { result = YamlNode.super.getAPrimaryQlClass() } - override Location getLocation() { result = YamlNode.super.getLocation() } - override string toString() { result = YamlNode.super.toString() } } diff --git a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll index e164adf786f..36852cec594 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll @@ -146,13 +146,16 @@ module DataFlow { * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - cached - predicate hasLocationInfo( + final predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { - none() + this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) } + /** Gets the location of this node. */ + cached + Location getLocation() { none() } + /** Gets the file this data flow node comes from. */ File getFile() { none() } // overridden in subclasses @@ -293,11 +296,9 @@ module DataFlow { override BasicBlock getBasicBlock() { astNode = result.getANode() } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { + override Location getLocation() { Stages::DataFlowStage::ref() and - astNode.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + result = astNode.getLocation() } override File getFile() { result = astNode.getFile() } @@ -318,11 +319,7 @@ module DataFlow { override BasicBlock getBasicBlock() { result = ssa.getBasicBlock() } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - ssa.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } + override Location getLocation() { result = ssa.getLocation() } override string toString() { result = ssa.getSourceVariable().getName() } @@ -341,13 +338,7 @@ module DataFlow { override BasicBlock getBasicBlock() { result = prop.(ControlFlowNode).getBasicBlock() } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - prop.(Locatable) - .getLocation() - .hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } + override Location getLocation() { result = prop.(Locatable).getLocation() } override string toString() { result = prop.(AstNode).toString() } @@ -368,11 +359,7 @@ module DataFlow { override BasicBlock getBasicBlock() { result = rest.getBasicBlock() } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - rest.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } + override Location getLocation() { result = rest.getLocation() } override string toString() { result = "..." + rest.toString() } @@ -393,11 +380,7 @@ module DataFlow { override BasicBlock getBasicBlock() { result = elt.getBasicBlock() } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - elt.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } + override Location getLocation() { result = elt.getLocation() } override string toString() { result = elt.toString() } @@ -422,11 +405,7 @@ module DataFlow { override BasicBlock getBasicBlock() { result = elt.getBasicBlock() } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - elt.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } + override Location getLocation() { result = elt.getLocation() } override string toString() { result = elt.toString() } @@ -446,11 +425,7 @@ module DataFlow { override BasicBlock getBasicBlock() { result = call.getBasicBlock() } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - call.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } + override Location getLocation() { result = call.getLocation() } override string toString() { result = "reflective call" } @@ -467,11 +442,7 @@ module DataFlow { override BasicBlock getBasicBlock() { result = imprt.getBasicBlock() } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - imprt.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } + override Location getLocation() { result = imprt.getLocation() } override string toString() { result = imprt.toString() } @@ -961,11 +932,7 @@ module DataFlow { override string toString() { result = attr.toString() } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - attr.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } + override Location getLocation() { result = attr.getLocation() } /** Gets the attribute corresponding to this data flow node. */ HTML::Attribute getAttribute() { result = attr } @@ -983,11 +950,7 @@ module DataFlow { override string toString() { result = attr.toString() } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - attr.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } + override Location getLocation() { result = attr.getLocation() } /** Gets the attribute corresponding to this data flow node. */ XmlAttribute getAttribute() { result = attr } @@ -1005,11 +968,7 @@ module DataFlow { override string toString() { result = "exceptional return of " + function.describe() } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - function.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } + override Location getLocation() { result = function.getLocation() } override BasicBlock getBasicBlock() { result = function.getExit().getBasicBlock() } @@ -1031,11 +990,7 @@ module DataFlow { override string toString() { result = "return of " + function.describe() } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - function.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } + override Location getLocation() { result = function.getLocation() } override BasicBlock getBasicBlock() { result = function.getExit().getBasicBlock() } @@ -1057,11 +1012,7 @@ module DataFlow { override string toString() { result = "'arguments' object of " + function.describe() } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - function.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } + override Location getLocation() { result = function.getLocation() } override BasicBlock getBasicBlock() { result = function.getEntry().getBasicBlock() } @@ -1083,11 +1034,7 @@ module DataFlow { override string toString() { result = "exceptional return of " + invoke.toString() } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - invoke.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } + override Location getLocation() { result = invoke.getLocation() } override BasicBlock getBasicBlock() { result = invoke.getBasicBlock() } @@ -1359,15 +1306,10 @@ module DataFlow { exists(StmtContainer container | this = TThisNode(container) | result = container.getEntry()) } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { + override Location getLocation() { // Use the function entry as the location exists(StmtContainer container | this = TThisNode(container) | - container - .getEntry() - .getLocation() - .hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + result = container.getEntry().getLocation() ) } @@ -1386,11 +1328,7 @@ module DataFlow { override BasicBlock getBasicBlock() { result = variable.getDeclaringContainer().getStartBB() } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - variable.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } + override Location getLocation() { result = variable.getLocation() } override string toString() { result = variable.getName() } } @@ -1402,13 +1340,7 @@ module DataFlow { override BasicBlock getBasicBlock() { none() } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - this.getTag() - .getLocation() - .hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } + override Location getLocation() { result = this.getTag().getLocation() } override string toString() { result = this.getTag().toString() } } diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll index 4420faacbfe..541e3a6f3e9 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll @@ -250,7 +250,7 @@ module CallGraph { result = node.(DataFlow::ObjectLiteralNode).getPropertySetter(_) ) and not node.getTopLevel().isExterns() and - // Do not track instance methods on classes + // Ignore writes to `this` inside a constructor, since this is already handled by instance method tracking not exists(DataFlow::ClassNode cls | node = cls.getConstructor().getReceiver() or diff --git a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll index fdb2b7ab966..639b55a1acf 100644 --- a/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll +++ b/javascript/ql/lib/semmle/javascript/endpoints/EndpointNaming.qll @@ -78,6 +78,9 @@ private module ApiGraphDistance<isRootNodeSig/1 isRootNode, edgeSig/2 edges> { private predicate distanceFromPackageExport = ApiGraphDistance<isPackageExport/1, relevantEdge/2>::distanceTo/1; +/** Badness penalty to apply when synthesizing a name. */ +private int syntheticNameBadness() { result = 100 } + /** * Holds if `(package, name)` is the fallback name for `cls`, to be used as a last resort * in order to name its instance methods. @@ -96,7 +99,8 @@ private predicate classHasFallbackName( hasEscapingInstance(cls) and not exists(distanceFromPackageExport(any(API::Node node | node.getAValueReachingSink() = cls))) and exists(string baseName | - InternalModuleNaming::fallbackModuleName(cls.getTopLevel(), package, baseName, badness - 100) and + InternalModuleNaming::fallbackModuleName(cls.getTopLevel(), package, baseName, + badness - syntheticNameBadness()) and name = join(baseName, cls.getName()) ) } @@ -236,7 +240,7 @@ private predicate sinkHasNameCandidate(API::Node sink, string package, string na * * `badness` is bound to the associated badness of the name. */ -private predicate sinkHasPrimaryName(API::Node sink, string package, string name, int badness) { +private predicate sinkHasPrimaryNameAux(API::Node sink, string package, string name, int badness) { badness = min(int b | sinkHasNameCandidate(sink, _, _, b) | b) and package = min(string p | sinkHasNameCandidate(sink, p, _, badness) | p) and name = min(string n | sinkHasNameCandidate(sink, package, n, badness) | n order by n.length(), n) @@ -246,7 +250,19 @@ private predicate sinkHasPrimaryName(API::Node sink, string package, string name * Holds if `(package, name)` is the primary name to associate with `node`. */ predicate sinkHasPrimaryName(API::Node sink, string package, string name) { - sinkHasPrimaryName(sink, package, name, _) + sinkHasPrimaryNameAux(sink, package, name, _) +} + +/** + * Holds if `(package, name)` is the primary name to associate with `node`. + * + * `isSynthetic` is bound to true if the name was synthesized, and false if it is a proper access path. + */ +predicate sinkHasPrimaryName(API::Node sink, string package, string name, boolean isSynthetic) { + exists(int badness | + sinkHasPrimaryNameAux(sink, package, name, badness) and + (if badness >= syntheticNameBadness() then isSynthetic = true else isSynthetic = false) + ) } /** Gets a source node that can flow to `sink` without using a return step. */ @@ -292,7 +308,7 @@ private predicate hasEscapingInstance(DataFlow::ClassNode cls) { private predicate sourceNodeHasNameCandidate( DataFlow::SourceNode node, string package, string name, int badness ) { - sinkHasPrimaryName(getASinkNode(node), package, name, badness) + sinkHasPrimaryNameAux(getASinkNode(node), package, name, badness) or nameFromGlobal(node, package, name, badness) } diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Templating.qll b/javascript/ql/lib/semmle/javascript/frameworks/Templating.qll index 097003c5ab8..a7286c7a199 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Templating.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Templating.qll @@ -36,8 +36,6 @@ module Templating { /** A placeholder tag for a templating engine. */ class TemplatePlaceholderTag extends @template_placeholder_tag, Locatable { - override Location getLocation() { hasLocation(this, result) } - override string toString() { template_placeholder_tag_info(this, _, result) } /** Gets the full text of the template tag, including delimiters. */ @@ -107,7 +105,12 @@ module Templating { * Gets the innermost JavaScript expression containing this template tag, if any. */ pragma[nomagic] - Expr getEnclosingExpr() { expr_contains_template_tag_location(result, this.getLocation()) } + Expr getEnclosingExpr() { + exists(@location loc | + hasLocation(this, loc) and + expr_contains_template_tag_location(result, loc) + ) + } } /** diff --git a/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll b/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll index 459b83f2b99..39da790b6b9 100644 --- a/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll +++ b/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll @@ -136,7 +136,7 @@ module Stages { or exists(DataFlow::ssaDefinitionNode(_)) or - any(DataFlow::Node node).hasLocationInfo(_, _, _, _, _) + exists(any(DataFlow::Node node).getLocation()) or exists(any(DataFlow::Node node).toString()) or diff --git a/javascript/ql/lib/semmle/javascript/internal/Locations.qll b/javascript/ql/lib/semmle/javascript/internal/Locations.qll new file mode 100644 index 00000000000..d1dc8d403f7 --- /dev/null +++ b/javascript/ql/lib/semmle/javascript/internal/Locations.qll @@ -0,0 +1,171 @@ +/** Provides classes for working with locations and program elements that have locations. */ + +import javascript + +// Should _not_ be cached, as that would require the data flow stage to be evaluated +// in order to evaluate the AST stage. Ideally, we would cache each injector separately, +// but that's not possible. Instead, we cache all predicates that need the injectors +// to be tuple numbered. +newtype TLocation = + TDbLocation(@location loc) or + TSynthLocation(string filepath, int startline, int startcolumn, int endline, int endcolumn) { + any(SsaDefinition def).hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) and + // avoid overlap with existing DB locations + not exists(File f | + locations_default(_, f, startline, startcolumn, endline, endcolumn) and + f.getAbsolutePath() = filepath + ) + } + +/** + * A location as given by a file, a start line, a start column, + * an end line, and an end column. + * + * For more information about locations see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +abstract class LocationImpl extends TLocation { + /** Gets the file for this location. */ + abstract File getFile(); + + /** Gets the 1-based line number (inclusive) where this location starts. */ + abstract int getStartLine(); + + /** Gets the 1-based column number (inclusive) where this location starts. */ + abstract int getStartColumn(); + + /** Gets the 1-based line number (inclusive) where this location ends. */ + abstract int getEndLine(); + + /** Gets the 1-based column number (inclusive) where this location ends. */ + abstract int getEndColumn(); + + /** Gets the number of lines covered by this location. */ + int getNumLines() { result = this.getEndLine() - this.getStartLine() + 1 } + + /** Holds if this location starts before location `that`. */ + pragma[inline] + predicate startsBefore(Location that) { + exists(string f, int sl1, int sc1, int sl2, int sc2 | + this.hasLocationInfo(f, sl1, sc1, _, _) and + that.hasLocationInfo(f, sl2, sc2, _, _) + | + sl1 < sl2 + or + sl1 = sl2 and sc1 < sc2 + ) + } + + /** Holds if this location ends after location `that`. */ + pragma[inline] + predicate endsAfter(Location that) { + exists(string f, int el1, int ec1, int el2, int ec2 | + this.hasLocationInfo(f, _, _, el1, ec1) and + that.hasLocationInfo(f, _, _, el2, ec2) + | + el1 > el2 + or + el1 = el2 and ec1 > ec2 + ) + } + + /** + * Holds if this location contains location `that`, meaning that it starts + * before and ends after it. + */ + predicate contains(Location that) { this.startsBefore(that) and this.endsAfter(that) } + + /** Holds if this location is empty. */ + predicate isEmpty() { exists(int l, int c | this.hasLocationInfo(_, l, c, l, c - 1)) } + + /** Gets a textual representation of this element. */ + string toString() { result = this.getFile().getBaseName() + ":" + this.getStartLine().toString() } + + /** + * Holds if this element is at the specified location. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `filepath`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ + abstract predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ); +} + +class DbLocationImpl extends LocationImpl instanceof DbLocation { + override File getFile() { result = DbLocation.super.getFile() } + + override int getStartLine() { result = DbLocation.super.getStartLine() } + + override int getStartColumn() { result = DbLocation.super.getStartColumn() } + + override int getEndLine() { result = DbLocation.super.getEndLine() } + + override int getEndColumn() { result = DbLocation.super.getEndColumn() } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + DbLocation.super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } +} + +class SynthLocationImpl extends LocationImpl, TSynthLocation { + override File getFile() { synthLocationInfo(this, result.getAbsolutePath(), _, _, _, _) } + + override int getStartLine() { synthLocationInfo(this, _, result, _, _, _) } + + override int getStartColumn() { synthLocationInfo(this, _, _, result, _, _) } + + override int getEndLine() { synthLocationInfo(this, _, _, _, result, _) } + + override int getEndColumn() { synthLocationInfo(this, _, _, _, _, result) } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + synthLocationInfo(this, filepath, startline, startcolumn, endline, endcolumn) + } +} + +cached +private module Cached { + cached + DbLocation getLocatableLocation(@locatable l) { + exists(@location loc | + hasLocation(l, loc) or + xmllocations(l, loc) or + json_locations(l, loc) or + yaml_locations(l, loc) + | + result = TDbLocation(loc) + ) + } + + cached + predicate dbLocationInfo( + DbLocation l, File f, int startline, int startcolumn, int endline, int endcolumn + ) { + exists(@location loc | + l = TDbLocation(loc) and + locations_default(loc, f, startline, startcolumn, endline, endcolumn) + ) + } +} + +import Cached + +cached +private module CachedInDataFlowStage { + private import semmle.javascript.internal.CachedStages + + cached + predicate synthLocationInfo( + SynthLocationImpl l, string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + Stages::DataFlowStage::ref() and + l = TSynthLocation(filepath, startline, startcolumn, endline, endcolumn) + } +} + +private import CachedInDataFlowStage diff --git a/javascript/ql/src/change-notes/2024-03-07-lift-cg-restriction.md b/javascript/ql/src/change-notes/2024-03-07-lift-cg-restriction.md new file mode 100644 index 00000000000..4d591aaf9a2 --- /dev/null +++ b/javascript/ql/src/change-notes/2024-03-07-lift-cg-restriction.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The call graph has been improved, leading to more alerts for data flow based queries. diff --git a/javascript/ql/test/ApiGraphs/classes/classes.js b/javascript/ql/test/ApiGraphs/classes/classes.js index f4eb7023262..29e7d223247 100644 --- a/javascript/ql/test/ApiGraphs/classes/classes.js +++ b/javascript/ql/test/ApiGraphs/classes/classes.js @@ -25,3 +25,24 @@ MyOtherStream.prototype.instanceProp = 1; /* def=moduleImport("classes").getMemb MyOtherStream.classProp = 1; /* def=moduleImport("classes").getMember("exports").getMember("MyOtherStream").getMember("classProp") */ module.exports.MyOtherStream = MyOtherStream; + + +// function-style class without .prototype reference +function MyThirdStream() { /* use=moduleImport("classes").getMember("exports").getMember("MyThirdStream").getInstance() */ +} +let instance = new MyThirdStream(); /* use=moduleImport("classes").getMember("exports").getMember("MyThirdStream").getInstance() */ + +module.exports.MyThirdStream = MyThirdStream; + + +// function-style class without .prototype reference (through global variable) +(function(f) { + foo.bar = function() { /* use=moduleImport("classes").getMember("exports").getMember("bar").getInstance() */ + } +})(foo = foo || {}); + +(function(f) { + let x = new f.bar(); /* use=moduleImport("classes").getMember("exports").getMember("bar").getInstance() */ +})(foo = foo || {}); + +module.exports.bar = foo.bar; diff --git a/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected b/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected index 5f29995b854..081636baa06 100644 --- a/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected +++ b/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected @@ -124,6 +124,8 @@ nodes | file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | | file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | | file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | +| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | +| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | | file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | | file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | | file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | @@ -167,6 +169,9 @@ nodes | file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | | file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | | file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | +| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | +| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | +| file://:0:0:0:0 | (TypeParameters) | semmle.label | (TypeParameters) | | file://:0:0:0:0 | (TypeParameters) | semmle.label | (TypeParameters) | | file://:0:0:0:0 | (TypeParameters) | semmle.label | (TypeParameters) | | file://:0:0:0:0 | (TypeParameters) | semmle.label | (TypeParameters) | @@ -1757,8 +1762,63 @@ nodes | tst.ts:483:46:483:50 | [LocalTypeAccess] Pair3 | semmle.label | [LocalTypeAccess] Pair3 | | tst.ts:483:46:483:58 | [GenericTypeExpr] Pair3<string> | semmle.label | [GenericTypeExpr] Pair3<string> | | tst.ts:483:52:483:57 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | +| tst.ts:486:1:496:1 | [NamespaceDeclaration] module ... }); } | semmle.label | [NamespaceDeclaration] module ... }); } | +| tst.ts:486:1:496:1 | [NamespaceDeclaration] module ... }); } | semmle.order | 90 | +| tst.ts:486:8:486:11 | [VarDecl] TS54 | semmle.label | [VarDecl] TS54 | +| tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | semmle.label | [FunctionDeclStmt] functio ... 0]; } | +| tst.ts:487:12:487:28 | [VarDecl] createStreetLight | semmle.label | [VarDecl] createStreetLight | +| tst.ts:487:30:487:30 | [Identifier] C | semmle.label | [Identifier] C | +| tst.ts:487:30:487:45 | [TypeParameter] C extends string | semmle.label | [TypeParameter] C extends string | +| tst.ts:487:40:487:45 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | +| tst.ts:487:48:487:53 | [SimpleParameter] colors | semmle.label | [SimpleParameter] colors | +| tst.ts:487:56:487:56 | [LocalTypeAccess] C | semmle.label | [LocalTypeAccess] C | +| tst.ts:487:56:487:58 | [ArrayTypeExpr] C[] | semmle.label | [ArrayTypeExpr] C[] | +| tst.ts:487:61:487:72 | [SimpleParameter] defaultColor | semmle.label | [SimpleParameter] defaultColor | +| tst.ts:487:76:487:82 | [LocalTypeAccess] NoInfer | semmle.label | [LocalTypeAccess] NoInfer | +| tst.ts:487:76:487:85 | [GenericTypeExpr] NoInfer<C> | semmle.label | [GenericTypeExpr] NoInfer<C> | +| tst.ts:487:84:487:84 | [LocalTypeAccess] C | semmle.label | [LocalTypeAccess] C | +| tst.ts:487:88:489:3 | [BlockStmt] { r ... 0]; } | semmle.label | [BlockStmt] { r ... 0]; } | +| tst.ts:488:5:488:21 | [ReturnStmt] return colors[0]; | semmle.label | [ReturnStmt] return colors[0]; | +| tst.ts:488:12:488:17 | [VarRef] colors | semmle.label | [VarRef] colors | +| tst.ts:488:12:488:20 | [IndexExpr] colors[0] | semmle.label | [IndexExpr] colors[0] | +| tst.ts:488:19:488:19 | [Literal] 0 | semmle.label | [Literal] 0 | +| tst.ts:491:3:491:19 | [VarRef] createStreetLight | semmle.label | [VarRef] createStreetLight | +| tst.ts:491:3:491:57 | [CallExpr] createS ... ellow") | semmle.label | [CallExpr] createS ... ellow") | +| tst.ts:491:3:491:58 | [ExprStmt] createS ... llow"); | semmle.label | [ExprStmt] createS ... llow"); | +| tst.ts:491:21:491:46 | [ArrayExpr] ["red", ... green"] | semmle.label | [ArrayExpr] ["red", ... green"] | +| tst.ts:491:22:491:26 | [Literal] "red" | semmle.label | [Literal] "red" | +| tst.ts:491:29:491:36 | [Literal] "yellow" | semmle.label | [Literal] "yellow" | +| tst.ts:491:39:491:45 | [Literal] "green" | semmle.label | [Literal] "green" | +| tst.ts:491:49:491:56 | [Literal] "yellow" | semmle.label | [Literal] "yellow" | +| tst.ts:493:3:495:5 | [DeclStmt] const myObj = ... | semmle.label | [DeclStmt] const myObj = ... | +| tst.ts:493:9:493:13 | [VarDecl] myObj | semmle.label | [VarDecl] myObj | +| tst.ts:493:9:495:4 | [VariableDeclarator] myObj = ... "; }) | semmle.label | [VariableDeclarator] myObj = ... "; }) | +| tst.ts:493:17:493:22 | [VarRef] Object | semmle.label | [VarRef] Object | +| tst.ts:493:17:493:30 | [DotExpr] Object.groupBy | semmle.label | [DotExpr] Object.groupBy | +| tst.ts:493:17:495:4 | [MethodCallExpr] Object. ... "; }) | semmle.label | [MethodCallExpr] Object. ... "; }) | +| tst.ts:493:24:493:30 | [Label] groupBy | semmle.label | [Label] groupBy | +| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | semmle.label | [ArrayExpr] [0, 1, 2, 3, 4, 5] | +| tst.ts:493:33:493:33 | [Literal] 0 | semmle.label | [Literal] 0 | +| tst.ts:493:36:493:36 | [Literal] 1 | semmle.label | [Literal] 1 | +| tst.ts:493:39:493:39 | [Literal] 2 | semmle.label | [Literal] 2 | +| tst.ts:493:42:493:42 | [Literal] 3 | semmle.label | [Literal] 3 | +| tst.ts:493:45:493:45 | [Literal] 4 | semmle.label | [Literal] 4 | +| tst.ts:493:48:493:48 | [Literal] 5 | semmle.label | [Literal] 5 | +| tst.ts:493:52:495:3 | [ArrowFunctionExpr] (num, i ... d"; } | semmle.label | [ArrowFunctionExpr] (num, i ... d"; } | +| tst.ts:493:53:493:55 | [SimpleParameter] num | semmle.label | [SimpleParameter] num | +| tst.ts:493:58:493:62 | [SimpleParameter] index | semmle.label | [SimpleParameter] index | +| tst.ts:493:68:495:3 | [BlockStmt] { r ... d"; } | semmle.label | [BlockStmt] { r ... d"; } | +| tst.ts:494:5:494:41 | [ReturnStmt] return ... "odd"; | semmle.label | [ReturnStmt] return ... "odd"; | +| tst.ts:494:12:494:14 | [VarRef] num | semmle.label | [VarRef] num | +| tst.ts:494:12:494:18 | [BinaryExpr] num % 2 | semmle.label | [BinaryExpr] num % 2 | +| tst.ts:494:12:494:24 | [BinaryExpr] num % 2 === 0 | semmle.label | [BinaryExpr] num % 2 === 0 | +| tst.ts:494:12:494:40 | [ConditionalExpr] num % 2 ... : "odd" | semmle.label | [ConditionalExpr] num % 2 ... : "odd" | +| tst.ts:494:18:494:18 | [Literal] 2 | semmle.label | [Literal] 2 | +| tst.ts:494:24:494:24 | [Literal] 0 | semmle.label | [Literal] 0 | +| tst.ts:494:28:494:33 | [Literal] "even" | semmle.label | [Literal] "even" | +| tst.ts:494:36:494:40 | [Literal] "odd" | semmle.label | [Literal] "odd" | | tstModuleCJS.cts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | semmle.label | [ExportDeclaration] export ... 'b'; } | -| tstModuleCJS.cts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | semmle.order | 90 | +| tstModuleCJS.cts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | semmle.order | 91 | | tstModuleCJS.cts:1:8:3:1 | [FunctionDeclStmt] functio ... 'b'; } | semmle.label | [FunctionDeclStmt] functio ... 'b'; } | | tstModuleCJS.cts:1:17:1:28 | [VarDecl] tstModuleCJS | semmle.label | [VarDecl] tstModuleCJS | | tstModuleCJS.cts:1:33:1:35 | [LiteralTypeExpr] 'a' | semmle.label | [LiteralTypeExpr] 'a' | @@ -1776,7 +1836,7 @@ nodes | tstModuleCJS.cts:2:34:2:36 | [Literal] 'a' | semmle.label | [Literal] 'a' | | tstModuleCJS.cts:2:40:2:42 | [Literal] 'b' | semmle.label | [Literal] 'b' | | tstModuleES.mts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | semmle.label | [ExportDeclaration] export ... 'b'; } | -| tstModuleES.mts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | semmle.order | 91 | +| tstModuleES.mts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | semmle.order | 92 | | tstModuleES.mts:1:16:3:1 | [FunctionDeclStmt] functio ... 'b'; } | semmle.label | [FunctionDeclStmt] functio ... 'b'; } | | tstModuleES.mts:1:25:1:35 | [VarDecl] tstModuleES | semmle.label | [VarDecl] tstModuleES | | tstModuleES.mts:1:40:1:42 | [LiteralTypeExpr] 'a' | semmle.label | [LiteralTypeExpr] 'a' | @@ -1794,7 +1854,7 @@ nodes | tstModuleES.mts:2:34:2:36 | [Literal] 'a' | semmle.label | [Literal] 'a' | | tstModuleES.mts:2:40:2:42 | [Literal] 'b' | semmle.label | [Literal] 'b' | | tstSuffixA.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.label | [ExportDeclaration] export ... .ts'; } | -| tstSuffixA.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.order | 92 | +| tstSuffixA.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.order | 93 | | tstSuffixA.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | semmle.label | [FunctionDeclStmt] functio ... .ts'; } | | tstSuffixA.ts:1:17:1:28 | [VarDecl] resolvedFile | semmle.label | [VarDecl] resolvedFile | | tstSuffixA.ts:1:33:1:47 | [LiteralTypeExpr] 'tstSuffixA.ts' | semmle.label | [LiteralTypeExpr] 'tstSuffixA.ts' | @@ -1802,7 +1862,7 @@ nodes | tstSuffixA.ts:2:5:2:27 | [ReturnStmt] return ... xA.ts'; | semmle.label | [ReturnStmt] return ... xA.ts'; | | tstSuffixA.ts:2:12:2:26 | [Literal] 'tstSuffixA.ts' | semmle.label | [Literal] 'tstSuffixA.ts' | | tstSuffixB.ios.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.label | [ExportDeclaration] export ... .ts'; } | -| tstSuffixB.ios.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.order | 93 | +| tstSuffixB.ios.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.order | 94 | | tstSuffixB.ios.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | semmle.label | [FunctionDeclStmt] functio ... .ts'; } | | tstSuffixB.ios.ts:1:17:1:28 | [VarDecl] resolvedFile | semmle.label | [VarDecl] resolvedFile | | tstSuffixB.ios.ts:1:33:1:51 | [LiteralTypeExpr] 'tstSuffixB.ios.ts' | semmle.label | [LiteralTypeExpr] 'tstSuffixB.ios.ts' | @@ -1810,7 +1870,7 @@ nodes | tstSuffixB.ios.ts:2:5:2:31 | [ReturnStmt] return ... os.ts'; | semmle.label | [ReturnStmt] return ... os.ts'; | | tstSuffixB.ios.ts:2:12:2:30 | [Literal] 'tstSuffixB.ios.ts' | semmle.label | [Literal] 'tstSuffixB.ios.ts' | | tstSuffixB.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.label | [ExportDeclaration] export ... .ts'; } | -| tstSuffixB.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.order | 94 | +| tstSuffixB.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.order | 95 | | tstSuffixB.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | semmle.label | [FunctionDeclStmt] functio ... .ts'; } | | tstSuffixB.ts:1:17:1:28 | [VarDecl] resolvedFile | semmle.label | [VarDecl] resolvedFile | | tstSuffixB.ts:1:33:1:47 | [LiteralTypeExpr] 'tstSuffixB.ts' | semmle.label | [LiteralTypeExpr] 'tstSuffixB.ts' | @@ -1818,16 +1878,16 @@ nodes | tstSuffixB.ts:2:5:2:27 | [ReturnStmt] return ... xB.ts'; | semmle.label | [ReturnStmt] return ... xB.ts'; | | tstSuffixB.ts:2:12:2:26 | [Literal] 'tstSuffixB.ts' | semmle.label | [Literal] 'tstSuffixB.ts' | | type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | -| type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | semmle.order | 95 | +| type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | semmle.order | 96 | | type_alias.ts:1:6:1:6 | [Identifier] B | semmle.label | [Identifier] B | | type_alias.ts:1:10:1:16 | [KeywordTypeExpr] boolean | semmle.label | [KeywordTypeExpr] boolean | | type_alias.ts:3:1:3:9 | [DeclStmt] var b = ... | semmle.label | [DeclStmt] var b = ... | -| type_alias.ts:3:1:3:9 | [DeclStmt] var b = ... | semmle.order | 96 | +| type_alias.ts:3:1:3:9 | [DeclStmt] var b = ... | semmle.order | 97 | | type_alias.ts:3:5:3:5 | [VarDecl] b | semmle.label | [VarDecl] b | | type_alias.ts:3:5:3:8 | [VariableDeclarator] b: B | semmle.label | [VariableDeclarator] b: B | | type_alias.ts:3:8:3:8 | [LocalTypeAccess] B | semmle.label | [LocalTypeAccess] B | | type_alias.ts:5:1:5:50 | [TypeAliasDeclaration,TypeDefinition] type Va ... ay<T>>; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Va ... ay<T>>; | -| type_alias.ts:5:1:5:50 | [TypeAliasDeclaration,TypeDefinition] type Va ... ay<T>>; | semmle.order | 97 | +| type_alias.ts:5:1:5:50 | [TypeAliasDeclaration,TypeDefinition] type Va ... ay<T>>; | semmle.order | 98 | | type_alias.ts:5:6:5:17 | [Identifier] ValueOrArray | semmle.label | [Identifier] ValueOrArray | | type_alias.ts:5:19:5:19 | [Identifier] T | semmle.label | [Identifier] T | | type_alias.ts:5:19:5:19 | [TypeParameter] T | semmle.label | [TypeParameter] T | @@ -1839,14 +1899,14 @@ nodes | type_alias.ts:5:34:5:48 | [GenericTypeExpr] ValueOrArray<T> | semmle.label | [GenericTypeExpr] ValueOrArray<T> | | type_alias.ts:5:47:5:47 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | | type_alias.ts:7:1:7:28 | [DeclStmt] var c = ... | semmle.label | [DeclStmt] var c = ... | -| type_alias.ts:7:1:7:28 | [DeclStmt] var c = ... | semmle.order | 98 | +| type_alias.ts:7:1:7:28 | [DeclStmt] var c = ... | semmle.order | 99 | | type_alias.ts:7:5:7:5 | [VarDecl] c | semmle.label | [VarDecl] c | | type_alias.ts:7:5:7:27 | [VariableDeclarator] c: Valu ... number> | semmle.label | [VariableDeclarator] c: Valu ... number> | | type_alias.ts:7:8:7:19 | [LocalTypeAccess] ValueOrArray | semmle.label | [LocalTypeAccess] ValueOrArray | | type_alias.ts:7:8:7:27 | [GenericTypeExpr] ValueOrArray<number> | semmle.label | [GenericTypeExpr] ValueOrArray<number> | | type_alias.ts:7:21:7:26 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | | type_alias.ts:9:1:15:13 | [TypeAliasDeclaration,TypeDefinition] type Js ... Json[]; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Js ... Json[]; | -| type_alias.ts:9:1:15:13 | [TypeAliasDeclaration,TypeDefinition] type Js ... Json[]; | semmle.order | 99 | +| type_alias.ts:9:1:15:13 | [TypeAliasDeclaration,TypeDefinition] type Js ... Json[]; | semmle.order | 100 | | type_alias.ts:9:6:9:9 | [Identifier] Json | semmle.label | [Identifier] Json | | type_alias.ts:10:5:15:12 | [UnionTypeExpr] \| strin ... Json[] | semmle.label | [UnionTypeExpr] \| strin ... Json[] | | type_alias.ts:10:7:10:12 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | @@ -1862,12 +1922,12 @@ nodes | type_alias.ts:15:7:15:10 | [LocalTypeAccess] Json | semmle.label | [LocalTypeAccess] Json | | type_alias.ts:15:7:15:12 | [ArrayTypeExpr] Json[] | semmle.label | [ArrayTypeExpr] Json[] | | type_alias.ts:17:1:17:15 | [DeclStmt] var json = ... | semmle.label | [DeclStmt] var json = ... | -| type_alias.ts:17:1:17:15 | [DeclStmt] var json = ... | semmle.order | 100 | +| type_alias.ts:17:1:17:15 | [DeclStmt] var json = ... | semmle.order | 101 | | type_alias.ts:17:5:17:8 | [VarDecl] json | semmle.label | [VarDecl] json | | type_alias.ts:17:5:17:14 | [VariableDeclarator] json: Json | semmle.label | [VariableDeclarator] json: Json | | type_alias.ts:17:11:17:14 | [LocalTypeAccess] Json | semmle.label | [LocalTypeAccess] Json | | type_alias.ts:19:1:21:57 | [TypeAliasDeclaration,TypeDefinition] type Vi ... ode[]]; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Vi ... ode[]]; | -| type_alias.ts:19:1:21:57 | [TypeAliasDeclaration,TypeDefinition] type Vi ... ode[]]; | semmle.order | 101 | +| type_alias.ts:19:1:21:57 | [TypeAliasDeclaration,TypeDefinition] type Vi ... ode[]]; | semmle.order | 102 | | type_alias.ts:19:6:19:16 | [Identifier] VirtualNode | semmle.label | [Identifier] VirtualNode | | type_alias.ts:20:5:21:56 | [UnionTypeExpr] \| strin ... Node[]] | semmle.label | [UnionTypeExpr] \| strin ... Node[]] | | type_alias.ts:20:7:20:12 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | @@ -1883,7 +1943,7 @@ nodes | type_alias.ts:21:43:21:53 | [LocalTypeAccess] VirtualNode | semmle.label | [LocalTypeAccess] VirtualNode | | type_alias.ts:21:43:21:55 | [ArrayTypeExpr] VirtualNode[] | semmle.label | [ArrayTypeExpr] VirtualNode[] | | type_alias.ts:23:1:27:6 | [DeclStmt] const myNode = ... | semmle.label | [DeclStmt] const myNode = ... | -| type_alias.ts:23:1:27:6 | [DeclStmt] const myNode = ... | semmle.order | 102 | +| type_alias.ts:23:1:27:6 | [DeclStmt] const myNode = ... | semmle.order | 103 | | type_alias.ts:23:7:23:12 | [VarDecl] myNode | semmle.label | [VarDecl] myNode | | type_alias.ts:23:7:27:5 | [VariableDeclarator] myNode: ... ] ] | semmle.label | [VariableDeclarator] myNode: ... ] ] | | type_alias.ts:23:15:23:25 | [LocalTypeAccess] VirtualNode | semmle.label | [LocalTypeAccess] VirtualNode | @@ -1908,12 +1968,12 @@ nodes | type_alias.ts:26:23:26:36 | [Literal] "second-child" | semmle.label | [Literal] "second-child" | | type_alias.ts:26:41:26:62 | [Literal] "I'm the second child" | semmle.label | [Literal] "I'm the second child" | | type_definition_objects.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.label | [ImportDeclaration] import ... dummy"; | -| type_definition_objects.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.order | 103 | +| type_definition_objects.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.order | 104 | | type_definition_objects.ts:1:8:1:17 | [ImportSpecifier] * as dummy | semmle.label | [ImportSpecifier] * as dummy | | type_definition_objects.ts:1:13:1:17 | [VarDecl] dummy | semmle.label | [VarDecl] dummy | | type_definition_objects.ts:1:24:1:32 | [Literal] "./dummy" | semmle.label | [Literal] "./dummy" | | type_definition_objects.ts:3:1:3:17 | [ExportDeclaration] export class C {} | semmle.label | [ExportDeclaration] export class C {} | -| type_definition_objects.ts:3:1:3:17 | [ExportDeclaration] export class C {} | semmle.order | 104 | +| type_definition_objects.ts:3:1:3:17 | [ExportDeclaration] export class C {} | semmle.order | 105 | | type_definition_objects.ts:3:8:3:17 | [ClassDefinition,TypeDefinition] class C {} | semmle.label | [ClassDefinition,TypeDefinition] class C {} | | type_definition_objects.ts:3:14:3:14 | [VarDecl] C | semmle.label | [VarDecl] C | | type_definition_objects.ts:3:16:3:15 | [BlockStmt] {} | semmle.label | [BlockStmt] {} | @@ -1921,36 +1981,36 @@ nodes | type_definition_objects.ts:3:16:3:15 | [FunctionExpr] () {} | semmle.label | [FunctionExpr] () {} | | type_definition_objects.ts:3:16:3:15 | [Label] constructor | semmle.label | [Label] constructor | | type_definition_objects.ts:4:1:4:17 | [DeclStmt] let classObj = ... | semmle.label | [DeclStmt] let classObj = ... | -| type_definition_objects.ts:4:1:4:17 | [DeclStmt] let classObj = ... | semmle.order | 105 | +| type_definition_objects.ts:4:1:4:17 | [DeclStmt] let classObj = ... | semmle.order | 106 | | type_definition_objects.ts:4:5:4:12 | [VarDecl] classObj | semmle.label | [VarDecl] classObj | | type_definition_objects.ts:4:5:4:16 | [VariableDeclarator] classObj = C | semmle.label | [VariableDeclarator] classObj = C | | type_definition_objects.ts:4:16:4:16 | [VarRef] C | semmle.label | [VarRef] C | | type_definition_objects.ts:6:1:6:16 | [ExportDeclaration] export enum E {} | semmle.label | [ExportDeclaration] export enum E {} | -| type_definition_objects.ts:6:1:6:16 | [ExportDeclaration] export enum E {} | semmle.order | 106 | +| type_definition_objects.ts:6:1:6:16 | [ExportDeclaration] export enum E {} | semmle.order | 107 | | type_definition_objects.ts:6:8:6:16 | [EnumDeclaration,TypeDefinition] enum E {} | semmle.label | [EnumDeclaration,TypeDefinition] enum E {} | | type_definition_objects.ts:6:13:6:13 | [VarDecl] E | semmle.label | [VarDecl] E | | type_definition_objects.ts:7:1:7:16 | [DeclStmt] let enumObj = ... | semmle.label | [DeclStmt] let enumObj = ... | -| type_definition_objects.ts:7:1:7:16 | [DeclStmt] let enumObj = ... | semmle.order | 107 | +| type_definition_objects.ts:7:1:7:16 | [DeclStmt] let enumObj = ... | semmle.order | 108 | | type_definition_objects.ts:7:5:7:11 | [VarDecl] enumObj | semmle.label | [VarDecl] enumObj | | type_definition_objects.ts:7:5:7:15 | [VariableDeclarator] enumObj = E | semmle.label | [VariableDeclarator] enumObj = E | | type_definition_objects.ts:7:15:7:15 | [VarRef] E | semmle.label | [VarRef] E | | type_definition_objects.ts:9:1:9:22 | [ExportDeclaration] export ... e N {;} | semmle.label | [ExportDeclaration] export ... e N {;} | -| type_definition_objects.ts:9:1:9:22 | [ExportDeclaration] export ... e N {;} | semmle.order | 108 | +| type_definition_objects.ts:9:1:9:22 | [ExportDeclaration] export ... e N {;} | semmle.order | 109 | | type_definition_objects.ts:9:8:9:22 | [NamespaceDeclaration] namespace N {;} | semmle.label | [NamespaceDeclaration] namespace N {;} | | type_definition_objects.ts:9:18:9:18 | [VarDecl] N | semmle.label | [VarDecl] N | | type_definition_objects.ts:9:21:9:21 | [EmptyStmt] ; | semmle.label | [EmptyStmt] ; | | type_definition_objects.ts:10:1:10:21 | [DeclStmt] let namespaceObj = ... | semmle.label | [DeclStmt] let namespaceObj = ... | -| type_definition_objects.ts:10:1:10:21 | [DeclStmt] let namespaceObj = ... | semmle.order | 109 | +| type_definition_objects.ts:10:1:10:21 | [DeclStmt] let namespaceObj = ... | semmle.order | 110 | | type_definition_objects.ts:10:5:10:16 | [VarDecl] namespaceObj | semmle.label | [VarDecl] namespaceObj | | type_definition_objects.ts:10:5:10:20 | [VariableDeclarator] namespaceObj = N | semmle.label | [VariableDeclarator] namespaceObj = N | | type_definition_objects.ts:10:20:10:20 | [VarRef] N | semmle.label | [VarRef] N | | type_definitions.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.label | [ImportDeclaration] import ... dummy"; | -| type_definitions.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.order | 110 | +| type_definitions.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.order | 111 | | type_definitions.ts:1:8:1:17 | [ImportSpecifier] * as dummy | semmle.label | [ImportSpecifier] * as dummy | | type_definitions.ts:1:13:1:17 | [VarDecl] dummy | semmle.label | [VarDecl] dummy | | type_definitions.ts:1:24:1:32 | [Literal] "./dummy" | semmle.label | [Literal] "./dummy" | | type_definitions.ts:3:1:5:1 | [InterfaceDeclaration,TypeDefinition] interfa ... x: S; } | semmle.label | [InterfaceDeclaration,TypeDefinition] interfa ... x: S; } | -| type_definitions.ts:3:1:5:1 | [InterfaceDeclaration,TypeDefinition] interfa ... x: S; } | semmle.order | 111 | +| type_definitions.ts:3:1:5:1 | [InterfaceDeclaration,TypeDefinition] interfa ... x: S; } | semmle.order | 112 | | type_definitions.ts:3:11:3:11 | [Identifier] I | semmle.label | [Identifier] I | | type_definitions.ts:3:13:3:13 | [Identifier] S | semmle.label | [Identifier] S | | type_definitions.ts:3:13:3:13 | [TypeParameter] S | semmle.label | [TypeParameter] S | @@ -1958,14 +2018,14 @@ nodes | type_definitions.ts:4:3:4:7 | [FieldDeclaration] x: S; | semmle.label | [FieldDeclaration] x: S; | | type_definitions.ts:4:6:4:6 | [LocalTypeAccess] S | semmle.label | [LocalTypeAccess] S | | type_definitions.ts:6:1:6:16 | [DeclStmt] let i = ... | semmle.label | [DeclStmt] let i = ... | -| type_definitions.ts:6:1:6:16 | [DeclStmt] let i = ... | semmle.order | 112 | +| type_definitions.ts:6:1:6:16 | [DeclStmt] let i = ... | semmle.order | 113 | | type_definitions.ts:6:5:6:5 | [VarDecl] i | semmle.label | [VarDecl] i | | type_definitions.ts:6:5:6:16 | [VariableDeclarator] i: I<number> | semmle.label | [VariableDeclarator] i: I<number> | | type_definitions.ts:6:8:6:8 | [LocalTypeAccess] I | semmle.label | [LocalTypeAccess] I | | type_definitions.ts:6:8:6:16 | [GenericTypeExpr] I<number> | semmle.label | [GenericTypeExpr] I<number> | | type_definitions.ts:6:10:6:15 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | | type_definitions.ts:8:1:10:1 | [ClassDefinition,TypeDefinition] class C ... x: T } | semmle.label | [ClassDefinition,TypeDefinition] class C ... x: T } | -| type_definitions.ts:8:1:10:1 | [ClassDefinition,TypeDefinition] class C ... x: T } | semmle.order | 113 | +| type_definitions.ts:8:1:10:1 | [ClassDefinition,TypeDefinition] class C ... x: T } | semmle.order | 114 | | type_definitions.ts:8:7:8:7 | [VarDecl] C | semmle.label | [VarDecl] C | | type_definitions.ts:8:8:8:7 | [BlockStmt] {} | semmle.label | [BlockStmt] {} | | type_definitions.ts:8:8:8:7 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | [ClassInitializedMember,ConstructorDefinition] constructor() {} | @@ -1977,14 +2037,14 @@ nodes | type_definitions.ts:9:3:9:6 | [FieldDeclaration] x: T | semmle.label | [FieldDeclaration] x: T | | type_definitions.ts:9:6:9:6 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | | type_definitions.ts:11:1:11:17 | [DeclStmt] let c = ... | semmle.label | [DeclStmt] let c = ... | -| type_definitions.ts:11:1:11:17 | [DeclStmt] let c = ... | semmle.order | 114 | +| type_definitions.ts:11:1:11:17 | [DeclStmt] let c = ... | semmle.order | 115 | | type_definitions.ts:11:5:11:5 | [VarDecl] c | semmle.label | [VarDecl] c | | type_definitions.ts:11:5:11:16 | [VariableDeclarator] c: C<number> | semmle.label | [VariableDeclarator] c: C<number> | | type_definitions.ts:11:8:11:8 | [LocalTypeAccess] C | semmle.label | [LocalTypeAccess] C | | type_definitions.ts:11:8:11:16 | [GenericTypeExpr] C<number> | semmle.label | [GenericTypeExpr] C<number> | | type_definitions.ts:11:10:11:15 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | | type_definitions.ts:13:1:15:1 | [EnumDeclaration,TypeDefinition] enum Co ... blue } | semmle.label | [EnumDeclaration,TypeDefinition] enum Co ... blue } | -| type_definitions.ts:13:1:15:1 | [EnumDeclaration,TypeDefinition] enum Co ... blue } | semmle.order | 115 | +| type_definitions.ts:13:1:15:1 | [EnumDeclaration,TypeDefinition] enum Co ... blue } | semmle.order | 116 | | type_definitions.ts:13:6:13:10 | [VarDecl] Color | semmle.label | [VarDecl] Color | | type_definitions.ts:14:3:14:5 | [EnumMember,TypeDefinition] red | semmle.label | [EnumMember,TypeDefinition] red | | type_definitions.ts:14:3:14:5 | [VarDecl] red | semmle.label | [VarDecl] red | @@ -1993,29 +2053,29 @@ nodes | type_definitions.ts:14:15:14:18 | [EnumMember,TypeDefinition] blue | semmle.label | [EnumMember,TypeDefinition] blue | | type_definitions.ts:14:15:14:18 | [VarDecl] blue | semmle.label | [VarDecl] blue | | type_definitions.ts:16:1:16:17 | [DeclStmt] let color = ... | semmle.label | [DeclStmt] let color = ... | -| type_definitions.ts:16:1:16:17 | [DeclStmt] let color = ... | semmle.order | 116 | +| type_definitions.ts:16:1:16:17 | [DeclStmt] let color = ... | semmle.order | 117 | | type_definitions.ts:16:5:16:9 | [VarDecl] color | semmle.label | [VarDecl] color | | type_definitions.ts:16:5:16:16 | [VariableDeclarator] color: Color | semmle.label | [VariableDeclarator] color: Color | | type_definitions.ts:16:12:16:16 | [LocalTypeAccess] Color | semmle.label | [LocalTypeAccess] Color | | type_definitions.ts:18:1:18:33 | [EnumDeclaration,TypeDefinition] enum En ... ember } | semmle.label | [EnumDeclaration,TypeDefinition] enum En ... ember } | -| type_definitions.ts:18:1:18:33 | [EnumDeclaration,TypeDefinition] enum En ... ember } | semmle.order | 117 | +| type_definitions.ts:18:1:18:33 | [EnumDeclaration,TypeDefinition] enum En ... ember } | semmle.order | 118 | | type_definitions.ts:18:6:18:22 | [VarDecl] EnumWithOneMember | semmle.label | [VarDecl] EnumWithOneMember | | type_definitions.ts:18:26:18:31 | [EnumMember,TypeDefinition] member | semmle.label | [EnumMember,TypeDefinition] member | | type_definitions.ts:18:26:18:31 | [VarDecl] member | semmle.label | [VarDecl] member | | type_definitions.ts:19:1:19:25 | [DeclStmt] let e = ... | semmle.label | [DeclStmt] let e = ... | -| type_definitions.ts:19:1:19:25 | [DeclStmt] let e = ... | semmle.order | 118 | +| type_definitions.ts:19:1:19:25 | [DeclStmt] let e = ... | semmle.order | 119 | | type_definitions.ts:19:5:19:5 | [VarDecl] e | semmle.label | [VarDecl] e | | type_definitions.ts:19:5:19:24 | [VariableDeclarator] e: EnumWithOneMember | semmle.label | [VariableDeclarator] e: EnumWithOneMember | | type_definitions.ts:19:8:19:24 | [LocalTypeAccess] EnumWithOneMember | semmle.label | [LocalTypeAccess] EnumWithOneMember | | type_definitions.ts:21:1:21:20 | [TypeAliasDeclaration,TypeDefinition] type Alias<T> = T[]; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Alias<T> = T[]; | -| type_definitions.ts:21:1:21:20 | [TypeAliasDeclaration,TypeDefinition] type Alias<T> = T[]; | semmle.order | 119 | +| type_definitions.ts:21:1:21:20 | [TypeAliasDeclaration,TypeDefinition] type Alias<T> = T[]; | semmle.order | 120 | | type_definitions.ts:21:6:21:10 | [Identifier] Alias | semmle.label | [Identifier] Alias | | type_definitions.ts:21:12:21:12 | [Identifier] T | semmle.label | [Identifier] T | | type_definitions.ts:21:12:21:12 | [TypeParameter] T | semmle.label | [TypeParameter] T | | type_definitions.ts:21:17:21:17 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | | type_definitions.ts:21:17:21:19 | [ArrayTypeExpr] T[] | semmle.label | [ArrayTypeExpr] T[] | | type_definitions.ts:22:1:22:39 | [DeclStmt] let aliasForNumberArray = ... | semmle.label | [DeclStmt] let aliasForNumberArray = ... | -| type_definitions.ts:22:1:22:39 | [DeclStmt] let aliasForNumberArray = ... | semmle.order | 120 | +| type_definitions.ts:22:1:22:39 | [DeclStmt] let aliasForNumberArray = ... | semmle.order | 121 | | type_definitions.ts:22:5:22:23 | [VarDecl] aliasForNumberArray | semmle.label | [VarDecl] aliasForNumberArray | | type_definitions.ts:22:5:22:38 | [VariableDeclarator] aliasFo ... number> | semmle.label | [VariableDeclarator] aliasFo ... number> | | type_definitions.ts:22:26:22:30 | [LocalTypeAccess] Alias | semmle.label | [LocalTypeAccess] Alias | @@ -2216,6 +2276,14 @@ edges | file://:0:0:0:0 | (Arguments) | tst.ts:478:17:478:42 | [IndexExpr] SomeCla ... tadata] | semmle.order | 0 | | file://:0:0:0:0 | (Arguments) | tst.ts:483:17:483:58 | [SatisfiesExpr] ["hello ... string> | semmle.label | 0 | | file://:0:0:0:0 | (Arguments) | tst.ts:483:17:483:58 | [SatisfiesExpr] ["hello ... string> | semmle.order | 0 | +| file://:0:0:0:0 | (Arguments) | tst.ts:491:21:491:46 | [ArrayExpr] ["red", ... green"] | semmle.label | 0 | +| file://:0:0:0:0 | (Arguments) | tst.ts:491:21:491:46 | [ArrayExpr] ["red", ... green"] | semmle.order | 0 | +| file://:0:0:0:0 | (Arguments) | tst.ts:491:49:491:56 | [Literal] "yellow" | semmle.label | 1 | +| file://:0:0:0:0 | (Arguments) | tst.ts:491:49:491:56 | [Literal] "yellow" | semmle.order | 1 | +| file://:0:0:0:0 | (Arguments) | tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | semmle.label | 0 | +| file://:0:0:0:0 | (Arguments) | tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | semmle.order | 0 | +| file://:0:0:0:0 | (Arguments) | tst.ts:493:52:495:3 | [ArrowFunctionExpr] (num, i ... d"; } | semmle.label | 1 | +| file://:0:0:0:0 | (Arguments) | tst.ts:493:52:495:3 | [ArrowFunctionExpr] (num, i ... d"; } | semmle.order | 1 | | file://:0:0:0:0 | (Parameters) | tst.ts:14:17:14:17 | [SimpleParameter] x | semmle.label | 0 | | file://:0:0:0:0 | (Parameters) | tst.ts:14:17:14:17 | [SimpleParameter] x | semmle.order | 0 | | file://:0:0:0:0 | (Parameters) | tst.ts:14:28:14:28 | [SimpleParameter] y | semmle.label | 1 | @@ -2314,6 +2382,14 @@ edges | file://:0:0:0:0 | (Parameters) | tst.ts:474:12:474:18 | [SimpleParameter] _target | semmle.order | 0 | | file://:0:0:0:0 | (Parameters) | tst.ts:474:21:474:28 | [SimpleParameter] _context | semmle.label | 1 | | file://:0:0:0:0 | (Parameters) | tst.ts:474:21:474:28 | [SimpleParameter] _context | semmle.order | 1 | +| file://:0:0:0:0 | (Parameters) | tst.ts:487:48:487:53 | [SimpleParameter] colors | semmle.label | 0 | +| file://:0:0:0:0 | (Parameters) | tst.ts:487:48:487:53 | [SimpleParameter] colors | semmle.order | 0 | +| file://:0:0:0:0 | (Parameters) | tst.ts:487:61:487:72 | [SimpleParameter] defaultColor | semmle.label | 1 | +| file://:0:0:0:0 | (Parameters) | tst.ts:487:61:487:72 | [SimpleParameter] defaultColor | semmle.order | 1 | +| file://:0:0:0:0 | (Parameters) | tst.ts:493:53:493:55 | [SimpleParameter] num | semmle.label | 0 | +| file://:0:0:0:0 | (Parameters) | tst.ts:493:53:493:55 | [SimpleParameter] num | semmle.order | 0 | +| file://:0:0:0:0 | (Parameters) | tst.ts:493:58:493:62 | [SimpleParameter] index | semmle.label | 1 | +| file://:0:0:0:0 | (Parameters) | tst.ts:493:58:493:62 | [SimpleParameter] index | semmle.order | 1 | | file://:0:0:0:0 | (Parameters) | type_alias.ts:14:10:14:17 | [SimpleParameter] property | semmle.label | 0 | | file://:0:0:0:0 | (Parameters) | type_alias.ts:14:10:14:17 | [SimpleParameter] property | semmle.order | 0 | | file://:0:0:0:0 | (Parameters) | type_alias.ts:21:19:21:21 | [SimpleParameter] key | semmle.label | 0 | @@ -2346,6 +2422,8 @@ edges | file://:0:0:0:0 | (TypeParameters) | tst.ts:462:40:462:72 | [TypeParameter] const T ... tring[] | semmle.order | 0 | | file://:0:0:0:0 | (TypeParameters) | tst.ts:481:16:481:16 | [TypeParameter] T | semmle.label | 0 | | file://:0:0:0:0 | (TypeParameters) | tst.ts:481:16:481:16 | [TypeParameter] T | semmle.order | 0 | +| file://:0:0:0:0 | (TypeParameters) | tst.ts:487:30:487:45 | [TypeParameter] C extends string | semmle.label | 0 | +| file://:0:0:0:0 | (TypeParameters) | tst.ts:487:30:487:45 | [TypeParameter] C extends string | semmle.order | 0 | | file://:0:0:0:0 | (TypeParameters) | type_alias.ts:5:19:5:19 | [TypeParameter] T | semmle.label | 0 | | file://:0:0:0:0 | (TypeParameters) | type_alias.ts:5:19:5:19 | [TypeParameter] T | semmle.order | 0 | | file://:0:0:0:0 | (TypeParameters) | type_definitions.ts:3:13:3:13 | [TypeParameter] S | semmle.label | 0 | @@ -5182,6 +5260,104 @@ edges | tst.ts:483:46:483:58 | [GenericTypeExpr] Pair3<string> | tst.ts:483:46:483:50 | [LocalTypeAccess] Pair3 | semmle.order | 1 | | tst.ts:483:46:483:58 | [GenericTypeExpr] Pair3<string> | tst.ts:483:52:483:57 | [KeywordTypeExpr] string | semmle.label | 2 | | tst.ts:483:46:483:58 | [GenericTypeExpr] Pair3<string> | tst.ts:483:52:483:57 | [KeywordTypeExpr] string | semmle.order | 2 | +| tst.ts:486:1:496:1 | [NamespaceDeclaration] module ... }); } | tst.ts:486:8:486:11 | [VarDecl] TS54 | semmle.label | 1 | +| tst.ts:486:1:496:1 | [NamespaceDeclaration] module ... }); } | tst.ts:486:8:486:11 | [VarDecl] TS54 | semmle.order | 1 | +| tst.ts:486:1:496:1 | [NamespaceDeclaration] module ... }); } | tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | semmle.label | 2 | +| tst.ts:486:1:496:1 | [NamespaceDeclaration] module ... }); } | tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | semmle.order | 2 | +| tst.ts:486:1:496:1 | [NamespaceDeclaration] module ... }); } | tst.ts:491:3:491:58 | [ExprStmt] createS ... llow"); | semmle.label | 3 | +| tst.ts:486:1:496:1 | [NamespaceDeclaration] module ... }); } | tst.ts:491:3:491:58 | [ExprStmt] createS ... llow"); | semmle.order | 3 | +| tst.ts:486:1:496:1 | [NamespaceDeclaration] module ... }); } | tst.ts:493:3:495:5 | [DeclStmt] const myObj = ... | semmle.label | 4 | +| tst.ts:486:1:496:1 | [NamespaceDeclaration] module ... }); } | tst.ts:493:3:495:5 | [DeclStmt] const myObj = ... | semmle.order | 4 | +| tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | +| tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | +| tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | file://:0:0:0:0 | (TypeParameters) | semmle.label | 2 | +| tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | file://:0:0:0:0 | (TypeParameters) | semmle.order | 2 | +| tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | tst.ts:487:12:487:28 | [VarDecl] createStreetLight | semmle.label | 0 | +| tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | tst.ts:487:12:487:28 | [VarDecl] createStreetLight | semmle.order | 0 | +| tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | tst.ts:487:88:489:3 | [BlockStmt] { r ... 0]; } | semmle.label | 5 | +| tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | tst.ts:487:88:489:3 | [BlockStmt] { r ... 0]; } | semmle.order | 5 | +| tst.ts:487:30:487:45 | [TypeParameter] C extends string | tst.ts:487:30:487:30 | [Identifier] C | semmle.label | 1 | +| tst.ts:487:30:487:45 | [TypeParameter] C extends string | tst.ts:487:30:487:30 | [Identifier] C | semmle.order | 1 | +| tst.ts:487:30:487:45 | [TypeParameter] C extends string | tst.ts:487:40:487:45 | [KeywordTypeExpr] string | semmle.label | 2 | +| tst.ts:487:30:487:45 | [TypeParameter] C extends string | tst.ts:487:40:487:45 | [KeywordTypeExpr] string | semmle.order | 2 | +| tst.ts:487:48:487:53 | [SimpleParameter] colors | tst.ts:487:56:487:58 | [ArrayTypeExpr] C[] | semmle.label | -2 | +| tst.ts:487:48:487:53 | [SimpleParameter] colors | tst.ts:487:56:487:58 | [ArrayTypeExpr] C[] | semmle.order | -2 | +| tst.ts:487:56:487:58 | [ArrayTypeExpr] C[] | tst.ts:487:56:487:56 | [LocalTypeAccess] C | semmle.label | 1 | +| tst.ts:487:56:487:58 | [ArrayTypeExpr] C[] | tst.ts:487:56:487:56 | [LocalTypeAccess] C | semmle.order | 1 | +| tst.ts:487:61:487:72 | [SimpleParameter] defaultColor | tst.ts:487:76:487:85 | [GenericTypeExpr] NoInfer<C> | semmle.label | -2 | +| tst.ts:487:61:487:72 | [SimpleParameter] defaultColor | tst.ts:487:76:487:85 | [GenericTypeExpr] NoInfer<C> | semmle.order | -2 | +| tst.ts:487:76:487:85 | [GenericTypeExpr] NoInfer<C> | tst.ts:487:76:487:82 | [LocalTypeAccess] NoInfer | semmle.label | 1 | +| tst.ts:487:76:487:85 | [GenericTypeExpr] NoInfer<C> | tst.ts:487:76:487:82 | [LocalTypeAccess] NoInfer | semmle.order | 1 | +| tst.ts:487:76:487:85 | [GenericTypeExpr] NoInfer<C> | tst.ts:487:84:487:84 | [LocalTypeAccess] C | semmle.label | 2 | +| tst.ts:487:76:487:85 | [GenericTypeExpr] NoInfer<C> | tst.ts:487:84:487:84 | [LocalTypeAccess] C | semmle.order | 2 | +| tst.ts:487:88:489:3 | [BlockStmt] { r ... 0]; } | tst.ts:488:5:488:21 | [ReturnStmt] return colors[0]; | semmle.label | 1 | +| tst.ts:487:88:489:3 | [BlockStmt] { r ... 0]; } | tst.ts:488:5:488:21 | [ReturnStmt] return colors[0]; | semmle.order | 1 | +| tst.ts:488:5:488:21 | [ReturnStmt] return colors[0]; | tst.ts:488:12:488:20 | [IndexExpr] colors[0] | semmle.label | 1 | +| tst.ts:488:5:488:21 | [ReturnStmt] return colors[0]; | tst.ts:488:12:488:20 | [IndexExpr] colors[0] | semmle.order | 1 | +| tst.ts:488:12:488:20 | [IndexExpr] colors[0] | tst.ts:488:12:488:17 | [VarRef] colors | semmle.label | 1 | +| tst.ts:488:12:488:20 | [IndexExpr] colors[0] | tst.ts:488:12:488:17 | [VarRef] colors | semmle.order | 1 | +| tst.ts:488:12:488:20 | [IndexExpr] colors[0] | tst.ts:488:19:488:19 | [Literal] 0 | semmle.label | 2 | +| tst.ts:488:12:488:20 | [IndexExpr] colors[0] | tst.ts:488:19:488:19 | [Literal] 0 | semmle.order | 2 | +| tst.ts:491:3:491:57 | [CallExpr] createS ... ellow") | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | +| tst.ts:491:3:491:57 | [CallExpr] createS ... ellow") | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | +| tst.ts:491:3:491:57 | [CallExpr] createS ... ellow") | tst.ts:491:3:491:19 | [VarRef] createStreetLight | semmle.label | 0 | +| tst.ts:491:3:491:57 | [CallExpr] createS ... ellow") | tst.ts:491:3:491:19 | [VarRef] createStreetLight | semmle.order | 0 | +| tst.ts:491:3:491:58 | [ExprStmt] createS ... llow"); | tst.ts:491:3:491:57 | [CallExpr] createS ... ellow") | semmle.label | 1 | +| tst.ts:491:3:491:58 | [ExprStmt] createS ... llow"); | tst.ts:491:3:491:57 | [CallExpr] createS ... ellow") | semmle.order | 1 | +| tst.ts:491:21:491:46 | [ArrayExpr] ["red", ... green"] | tst.ts:491:22:491:26 | [Literal] "red" | semmle.label | 1 | +| tst.ts:491:21:491:46 | [ArrayExpr] ["red", ... green"] | tst.ts:491:22:491:26 | [Literal] "red" | semmle.order | 1 | +| tst.ts:491:21:491:46 | [ArrayExpr] ["red", ... green"] | tst.ts:491:29:491:36 | [Literal] "yellow" | semmle.label | 2 | +| tst.ts:491:21:491:46 | [ArrayExpr] ["red", ... green"] | tst.ts:491:29:491:36 | [Literal] "yellow" | semmle.order | 2 | +| tst.ts:491:21:491:46 | [ArrayExpr] ["red", ... green"] | tst.ts:491:39:491:45 | [Literal] "green" | semmle.label | 3 | +| tst.ts:491:21:491:46 | [ArrayExpr] ["red", ... green"] | tst.ts:491:39:491:45 | [Literal] "green" | semmle.order | 3 | +| tst.ts:493:3:495:5 | [DeclStmt] const myObj = ... | tst.ts:493:9:495:4 | [VariableDeclarator] myObj = ... "; }) | semmle.label | 1 | +| tst.ts:493:3:495:5 | [DeclStmt] const myObj = ... | tst.ts:493:9:495:4 | [VariableDeclarator] myObj = ... "; }) | semmle.order | 1 | +| tst.ts:493:9:495:4 | [VariableDeclarator] myObj = ... "; }) | tst.ts:493:9:493:13 | [VarDecl] myObj | semmle.label | 1 | +| tst.ts:493:9:495:4 | [VariableDeclarator] myObj = ... "; }) | tst.ts:493:9:493:13 | [VarDecl] myObj | semmle.order | 1 | +| tst.ts:493:9:495:4 | [VariableDeclarator] myObj = ... "; }) | tst.ts:493:17:495:4 | [MethodCallExpr] Object. ... "; }) | semmle.label | 2 | +| tst.ts:493:9:495:4 | [VariableDeclarator] myObj = ... "; }) | tst.ts:493:17:495:4 | [MethodCallExpr] Object. ... "; }) | semmle.order | 2 | +| tst.ts:493:17:493:30 | [DotExpr] Object.groupBy | tst.ts:493:17:493:22 | [VarRef] Object | semmle.label | 1 | +| tst.ts:493:17:493:30 | [DotExpr] Object.groupBy | tst.ts:493:17:493:22 | [VarRef] Object | semmle.order | 1 | +| tst.ts:493:17:493:30 | [DotExpr] Object.groupBy | tst.ts:493:24:493:30 | [Label] groupBy | semmle.label | 2 | +| tst.ts:493:17:493:30 | [DotExpr] Object.groupBy | tst.ts:493:24:493:30 | [Label] groupBy | semmle.order | 2 | +| tst.ts:493:17:495:4 | [MethodCallExpr] Object. ... "; }) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | +| tst.ts:493:17:495:4 | [MethodCallExpr] Object. ... "; }) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | +| tst.ts:493:17:495:4 | [MethodCallExpr] Object. ... "; }) | tst.ts:493:17:493:30 | [DotExpr] Object.groupBy | semmle.label | 0 | +| tst.ts:493:17:495:4 | [MethodCallExpr] Object. ... "; }) | tst.ts:493:17:493:30 | [DotExpr] Object.groupBy | semmle.order | 0 | +| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:33:493:33 | [Literal] 0 | semmle.label | 1 | +| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:33:493:33 | [Literal] 0 | semmle.order | 1 | +| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:36:493:36 | [Literal] 1 | semmle.label | 2 | +| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:36:493:36 | [Literal] 1 | semmle.order | 2 | +| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:39:493:39 | [Literal] 2 | semmle.label | 3 | +| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:39:493:39 | [Literal] 2 | semmle.order | 3 | +| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:42:493:42 | [Literal] 3 | semmle.label | 4 | +| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:42:493:42 | [Literal] 3 | semmle.order | 4 | +| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:45:493:45 | [Literal] 4 | semmle.label | 5 | +| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:45:493:45 | [Literal] 4 | semmle.order | 5 | +| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:48:493:48 | [Literal] 5 | semmle.label | 6 | +| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:48:493:48 | [Literal] 5 | semmle.order | 6 | +| tst.ts:493:52:495:3 | [ArrowFunctionExpr] (num, i ... d"; } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | +| tst.ts:493:52:495:3 | [ArrowFunctionExpr] (num, i ... d"; } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | +| tst.ts:493:52:495:3 | [ArrowFunctionExpr] (num, i ... d"; } | tst.ts:493:68:495:3 | [BlockStmt] { r ... d"; } | semmle.label | 5 | +| tst.ts:493:52:495:3 | [ArrowFunctionExpr] (num, i ... d"; } | tst.ts:493:68:495:3 | [BlockStmt] { r ... d"; } | semmle.order | 5 | +| tst.ts:493:68:495:3 | [BlockStmt] { r ... d"; } | tst.ts:494:5:494:41 | [ReturnStmt] return ... "odd"; | semmle.label | 1 | +| tst.ts:493:68:495:3 | [BlockStmt] { r ... d"; } | tst.ts:494:5:494:41 | [ReturnStmt] return ... "odd"; | semmle.order | 1 | +| tst.ts:494:5:494:41 | [ReturnStmt] return ... "odd"; | tst.ts:494:12:494:40 | [ConditionalExpr] num % 2 ... : "odd" | semmle.label | 1 | +| tst.ts:494:5:494:41 | [ReturnStmt] return ... "odd"; | tst.ts:494:12:494:40 | [ConditionalExpr] num % 2 ... : "odd" | semmle.order | 1 | +| tst.ts:494:12:494:18 | [BinaryExpr] num % 2 | tst.ts:494:12:494:14 | [VarRef] num | semmle.label | 1 | +| tst.ts:494:12:494:18 | [BinaryExpr] num % 2 | tst.ts:494:12:494:14 | [VarRef] num | semmle.order | 1 | +| tst.ts:494:12:494:18 | [BinaryExpr] num % 2 | tst.ts:494:18:494:18 | [Literal] 2 | semmle.label | 2 | +| tst.ts:494:12:494:18 | [BinaryExpr] num % 2 | tst.ts:494:18:494:18 | [Literal] 2 | semmle.order | 2 | +| tst.ts:494:12:494:24 | [BinaryExpr] num % 2 === 0 | tst.ts:494:12:494:18 | [BinaryExpr] num % 2 | semmle.label | 1 | +| tst.ts:494:12:494:24 | [BinaryExpr] num % 2 === 0 | tst.ts:494:12:494:18 | [BinaryExpr] num % 2 | semmle.order | 1 | +| tst.ts:494:12:494:24 | [BinaryExpr] num % 2 === 0 | tst.ts:494:24:494:24 | [Literal] 0 | semmle.label | 2 | +| tst.ts:494:12:494:24 | [BinaryExpr] num % 2 === 0 | tst.ts:494:24:494:24 | [Literal] 0 | semmle.order | 2 | +| tst.ts:494:12:494:40 | [ConditionalExpr] num % 2 ... : "odd" | tst.ts:494:12:494:24 | [BinaryExpr] num % 2 === 0 | semmle.label | 1 | +| tst.ts:494:12:494:40 | [ConditionalExpr] num % 2 ... : "odd" | tst.ts:494:12:494:24 | [BinaryExpr] num % 2 === 0 | semmle.order | 1 | +| tst.ts:494:12:494:40 | [ConditionalExpr] num % 2 ... : "odd" | tst.ts:494:28:494:33 | [Literal] "even" | semmle.label | 2 | +| tst.ts:494:12:494:40 | [ConditionalExpr] num % 2 ... : "odd" | tst.ts:494:28:494:33 | [Literal] "even" | semmle.order | 2 | +| tst.ts:494:12:494:40 | [ConditionalExpr] num % 2 ... : "odd" | tst.ts:494:36:494:40 | [Literal] "odd" | semmle.label | 3 | +| tst.ts:494:12:494:40 | [ConditionalExpr] num % 2 ... : "odd" | tst.ts:494:36:494:40 | [Literal] "odd" | semmle.order | 3 | | tstModuleCJS.cts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | tstModuleCJS.cts:1:8:3:1 | [FunctionDeclStmt] functio ... 'b'; } | semmle.label | 1 | | tstModuleCJS.cts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | tstModuleCJS.cts:1:8:3:1 | [FunctionDeclStmt] functio ... 'b'; } | semmle.order | 1 | | tstModuleCJS.cts:1:8:3:1 | [FunctionDeclStmt] functio ... 'b'; } | tstModuleCJS.cts:1:17:1:28 | [VarDecl] tstModuleCJS | semmle.label | 0 | diff --git a/javascript/ql/test/library-tests/TypeScript/Types/tests.expected b/javascript/ql/test/library-tests/TypeScript/Types/tests.expected index 986ae56a664..daa1571d73c 100644 --- a/javascript/ql/test/library-tests/TypeScript/Types/tests.expected +++ b/javascript/ql/test/library-tests/TypeScript/Types/tests.expected @@ -658,6 +658,40 @@ getExprType | tst.ts:483:17:483:58 | ["hello ... string> | [first: string, string] | | tst.ts:483:18:483:24 | "hello" | "hello" | | tst.ts:483:27:483:33 | "world" | "world" | +| tst.ts:486:8:486:11 | TS54 | typeof TS54 in library-tests/TypeScript/Types/tst.ts | +| tst.ts:487:48:487:53 | colors | C[] | +| tst.ts:488:12:488:17 | colors | C[] | +| tst.ts:488:12:488:20 | colors[0] | C | +| tst.ts:488:19:488:19 | 0 | 0 | +| tst.ts:491:3:491:57 | createS ... ellow") | "red" \| "green" \| "yellow" | +| tst.ts:491:21:491:46 | ["red", ... green"] | ("red" \| "green" \| "yellow")[] | +| tst.ts:491:22:491:26 | "red" | "red" | +| tst.ts:491:29:491:36 | "yellow" | "yellow" | +| tst.ts:491:39:491:45 | "green" | "green" | +| tst.ts:491:49:491:56 | "yellow" | "yellow" | +| tst.ts:493:9:493:13 | myObj | Partial<Record<"even" \| "odd", number[]>> | +| tst.ts:493:17:493:22 | Object | ObjectConstructor | +| tst.ts:493:17:493:30 | Object.groupBy | <K extends PropertyKey, T>(items: Iterable<T>, ... | +| tst.ts:493:17:495:4 | Object. ... ";\\n }) | Partial<Record<"even" \| "odd", number[]>> | +| tst.ts:493:24:493:30 | groupBy | <K extends PropertyKey, T>(items: Iterable<T>, ... | +| tst.ts:493:32:493:49 | [0, 1, 2, 3, 4, 5] | Iterable<number> | +| tst.ts:493:33:493:33 | 0 | 0 | +| tst.ts:493:36:493:36 | 1 | 1 | +| tst.ts:493:39:493:39 | 2 | 2 | +| tst.ts:493:42:493:42 | 3 | 3 | +| tst.ts:493:45:493:45 | 4 | 4 | +| tst.ts:493:48:493:48 | 5 | 5 | +| tst.ts:493:52:495:3 | (num, i ... d";\\n } | (num: number, index: number) => "even" \| "odd" | +| tst.ts:493:53:493:55 | num | number | +| tst.ts:493:58:493:62 | index | number | +| tst.ts:494:12:494:14 | num | number | +| tst.ts:494:12:494:18 | num % 2 | number | +| tst.ts:494:12:494:24 | num % 2 === 0 | boolean | +| tst.ts:494:12:494:40 | num % 2 ... : "odd" | "even" \| "odd" | +| tst.ts:494:18:494:18 | 2 | 2 | +| tst.ts:494:24:494:24 | 0 | 0 | +| tst.ts:494:28:494:33 | "even" | "even" | +| tst.ts:494:36:494:40 | "odd" | "odd" | | tstModuleCJS.cts:1:17:1:28 | tstModuleCJS | () => "a" \| "b" | | tstModuleCJS.cts:2:12:2:15 | Math | Math | | tstModuleCJS.cts:2:12:2:22 | Math.random | () => number | @@ -1138,6 +1172,12 @@ getTypeExprType | tst.ts:483:46:483:50 | Pair3 | Pair3<T> | | tst.ts:483:46:483:58 | Pair3<string> | Pair3<string> | | tst.ts:483:52:483:57 | string | string | +| tst.ts:487:30:487:30 | C | C | +| tst.ts:487:40:487:45 | string | string | +| tst.ts:487:56:487:56 | C | C | +| tst.ts:487:56:487:58 | C[] | C[] | +| tst.ts:487:76:487:82 | NoInfer | any | +| tst.ts:487:84:487:84 | C | C | | tstModuleCJS.cts:1:33:1:35 | 'a' | "a" | | tstModuleCJS.cts:1:33:1:41 | 'a' \| 'b' | "a" \| "b" | | tstModuleCJS.cts:1:39:1:41 | 'b' | "b" | @@ -1357,18 +1397,23 @@ unionIndex | "boolean" | 3 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | | "c" | 2 | "a" \| "b" \| "c" | | "circle" | 0 | "circle" \| "square" | +| "even" | 0 | "even" \| "odd" | | "function" | 7 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | | "green" | 1 | "red" \| "green" \| "blue" | +| "green" | 1 | "red" \| "green" \| "yellow" | | "hello" | 0 | "hello" \| 42 | | "number" | 1 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | | "number" | 1 | keyof TypeMap | | "object" | 6 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | +| "odd" | 1 | "even" \| "odd" | | "red" | 0 | "red" \| "green" \| "blue" | +| "red" | 0 | "red" \| "green" \| "yellow" | | "square" | 1 | "circle" \| "square" | | "string" | 0 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | | "string" | 0 | keyof TypeMap | | "symbol" | 4 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | | "undefined" | 5 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | +| "yellow" | 2 | "red" \| "green" \| "yellow" | | () => number | 0 | (() => number) \| (ClassMethodDecoratorContext<P... | | () => number | 1 | void \| (() => number) | | ClassMethodDecoratorContext<Person, () => numbe... | 1 | (() => number) \| (ClassMethodDecoratorContext<P... | diff --git a/javascript/ql/test/library-tests/TypeScript/Types/tst.ts b/javascript/ql/test/library-tests/TypeScript/Types/tst.ts index 5066993fe15..cef97f9e4fa 100644 --- a/javascript/ql/test/library-tests/TypeScript/Types/tst.ts +++ b/javascript/ql/test/library-tests/TypeScript/Types/tst.ts @@ -481,4 +481,16 @@ module TS52 { type Pair3<T> = [first: T, T]; console.log(["hello", "world"] satisfies Pair3<string>); +} + +module TS54 { + function createStreetLight<C extends string>(colors: C[], defaultColor?: NoInfer<C>) { + return colors[0]; + } + + createStreetLight(["red", "yellow", "green"], "yellow"); + + const myObj = Object.groupBy([0, 1, 2, 3, 4, 5], (num, index) => { + return num % 2 === 0 ? "even": "odd"; + }); } \ No newline at end of file diff --git a/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected b/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected index e69de29bb2d..8b137891791 100644 --- a/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected +++ b/javascript/ql/test/library-tests/TypeTracking/TypeTracking.expected @@ -0,0 +1 @@ + diff --git a/javascript/ql/test/library-tests/TypeTracking/implicit-receiver.js b/javascript/ql/test/library-tests/TypeTracking/implicit-receiver.js new file mode 100644 index 00000000000..447a3eb0e05 --- /dev/null +++ b/javascript/ql/test/library-tests/TypeTracking/implicit-receiver.js @@ -0,0 +1,27 @@ +import 'dummy'; + +let trackedProp = "implicit-receiver-prop"; // name: implicit-receiver-prop + +function factory() { + let obj = unknown(); // name: implicit-receiver-obj + obj.foo = function() { + track(this); // track: implicit-receiver-obj + track(this.x); // track: implicit-receiver-obj track: implicit-receiver-prop + } + return obj; +} +let obj = factory(); +obj.x = trackedProp; + + +function factory2() { + let obj2 = { // name: implicit-receiver-obj2 + foo: function() { + track(this); // track: implicit-receiver-obj2 + track(this.x); // track: implicit-receiver-obj2 track: implicit-receiver-prop + } + } + return obj2; +} +let obj2 = factory2() +obj2.x = trackedProp; diff --git a/javascript/ql/test/library-tests/TypeTracking/summarize.js b/javascript/ql/test/library-tests/TypeTracking/summarize.js index e4aa9ebdb85..08f09e80c7c 100644 --- a/javascript/ql/test/library-tests/TypeTracking/summarize.js +++ b/javascript/ql/test/library-tests/TypeTracking/summarize.js @@ -12,11 +12,16 @@ function store(x) { function loadStore(x) { return { storeProp: x.loadProp }; } +function loadStore2(x) { + let mid = x.loadProp; + return { storeProp: mid }; +} identity({}); load({}); store({}); loadStore({}); +loadStore2({}); const obj = {}; // name: obj @@ -31,3 +36,6 @@ x.storeProp; // track: obj x = loadStore({ loadProp: obj }); x.storeProp; // track: obj + +x = loadStore2({ loadProp: obj }); +x.storeProp; // track: obj diff --git a/javascript/ql/test/query-tests/Security/CWE-079/ReflectedXss/ReflectedXss.expected b/javascript/ql/test/query-tests/Security/CWE-079/ReflectedXss/ReflectedXss.expected index 3c625dccdd3..ddee07dbadc 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/ReflectedXss/ReflectedXss.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/ReflectedXss/ReflectedXss.expected @@ -84,6 +84,26 @@ nodes | ReflectedXss.js:110:16:110:30 | request.query.p | | ReflectedXss.js:110:16:110:30 | request.query.p | | ReflectedXss.js:110:16:110:30 | request.query.p | +| ReflectedXss.js:114:11:114:41 | queryKeys | +| ReflectedXss.js:114:13:114:27 | keys: queryKeys | +| ReflectedXss.js:114:13:114:27 | keys: queryKeys | +| ReflectedXss.js:116:11:116:45 | keys | +| ReflectedXss.js:116:18:116:26 | queryKeys | +| ReflectedXss.js:116:18:116:45 | queryKe ... s?.keys | +| ReflectedXss.js:116:31:116:45 | paramKeys?.keys | +| ReflectedXss.js:116:31:116:45 | paramKeys?.keys | +| ReflectedXss.js:118:11:118:61 | keyArray | +| ReflectedXss.js:118:22:118:61 | typeof ... : keys | +| ReflectedXss.js:118:49:118:54 | [keys] | +| ReflectedXss.js:118:50:118:53 | keys | +| ReflectedXss.js:118:58:118:61 | keys | +| ReflectedXss.js:119:11:119:72 | invalidKeys | +| ReflectedXss.js:119:25:119:32 | keyArray | +| ReflectedXss.js:119:25:119:72 | keyArra ... s(key)) | +| ReflectedXss.js:122:30:122:73 | `${inva ... telist` | +| ReflectedXss.js:122:30:122:73 | `${inva ... telist` | +| ReflectedXss.js:122:33:122:43 | invalidKeys | +| ReflectedXss.js:122:33:122:54 | invalid ... n(', ') | | ReflectedXssContentTypes.js:10:14:10:36 | "FOO: " ... rams.id | | ReflectedXssContentTypes.js:10:14:10:36 | "FOO: " ... rams.id | | ReflectedXssContentTypes.js:10:24:10:36 | req.params.id | @@ -307,6 +327,26 @@ edges | ReflectedXss.js:103:76:103:83 | req.body | ReflectedXss.js:103:12:103:84 | markdow ... q.body) | | ReflectedXss.js:103:76:103:83 | req.body | ReflectedXss.js:103:12:103:84 | markdow ... q.body) | | ReflectedXss.js:110:16:110:30 | request.query.p | ReflectedXss.js:110:16:110:30 | request.query.p | +| ReflectedXss.js:114:11:114:41 | queryKeys | ReflectedXss.js:116:18:116:26 | queryKeys | +| ReflectedXss.js:114:13:114:27 | keys: queryKeys | ReflectedXss.js:114:11:114:41 | queryKeys | +| ReflectedXss.js:114:13:114:27 | keys: queryKeys | ReflectedXss.js:114:11:114:41 | queryKeys | +| ReflectedXss.js:116:11:116:45 | keys | ReflectedXss.js:118:50:118:53 | keys | +| ReflectedXss.js:116:11:116:45 | keys | ReflectedXss.js:118:58:118:61 | keys | +| ReflectedXss.js:116:18:116:26 | queryKeys | ReflectedXss.js:116:18:116:45 | queryKe ... s?.keys | +| ReflectedXss.js:116:18:116:45 | queryKe ... s?.keys | ReflectedXss.js:116:11:116:45 | keys | +| ReflectedXss.js:116:31:116:45 | paramKeys?.keys | ReflectedXss.js:116:18:116:45 | queryKe ... s?.keys | +| ReflectedXss.js:116:31:116:45 | paramKeys?.keys | ReflectedXss.js:116:18:116:45 | queryKe ... s?.keys | +| ReflectedXss.js:118:11:118:61 | keyArray | ReflectedXss.js:119:25:119:32 | keyArray | +| ReflectedXss.js:118:22:118:61 | typeof ... : keys | ReflectedXss.js:118:11:118:61 | keyArray | +| ReflectedXss.js:118:49:118:54 | [keys] | ReflectedXss.js:118:22:118:61 | typeof ... : keys | +| ReflectedXss.js:118:50:118:53 | keys | ReflectedXss.js:118:49:118:54 | [keys] | +| ReflectedXss.js:118:58:118:61 | keys | ReflectedXss.js:118:22:118:61 | typeof ... : keys | +| ReflectedXss.js:119:11:119:72 | invalidKeys | ReflectedXss.js:122:33:122:43 | invalidKeys | +| ReflectedXss.js:119:25:119:32 | keyArray | ReflectedXss.js:119:25:119:72 | keyArra ... s(key)) | +| ReflectedXss.js:119:25:119:72 | keyArra ... s(key)) | ReflectedXss.js:119:11:119:72 | invalidKeys | +| ReflectedXss.js:122:33:122:43 | invalidKeys | ReflectedXss.js:122:33:122:54 | invalid ... n(', ') | +| ReflectedXss.js:122:33:122:54 | invalid ... n(', ') | ReflectedXss.js:122:30:122:73 | `${inva ... telist` | +| ReflectedXss.js:122:33:122:54 | invalid ... n(', ') | ReflectedXss.js:122:30:122:73 | `${inva ... telist` | | ReflectedXssContentTypes.js:10:24:10:36 | req.params.id | ReflectedXssContentTypes.js:10:14:10:36 | "FOO: " ... rams.id | | ReflectedXssContentTypes.js:10:24:10:36 | req.params.id | ReflectedXssContentTypes.js:10:14:10:36 | "FOO: " ... rams.id | | ReflectedXssContentTypes.js:10:24:10:36 | req.params.id | ReflectedXssContentTypes.js:10:14:10:36 | "FOO: " ... rams.id | @@ -461,6 +501,8 @@ edges | ReflectedXss.js:100:12:100:39 | markdow ... q.body) | ReflectedXss.js:100:31:100:38 | req.body | ReflectedXss.js:100:12:100:39 | markdow ... q.body) | Cross-site scripting vulnerability due to a $@. | ReflectedXss.js:100:31:100:38 | req.body | user-provided value | | ReflectedXss.js:103:12:103:84 | markdow ... q.body) | ReflectedXss.js:103:76:103:83 | req.body | ReflectedXss.js:103:12:103:84 | markdow ... q.body) | Cross-site scripting vulnerability due to a $@. | ReflectedXss.js:103:76:103:83 | req.body | user-provided value | | ReflectedXss.js:110:16:110:30 | request.query.p | ReflectedXss.js:110:16:110:30 | request.query.p | ReflectedXss.js:110:16:110:30 | request.query.p | Cross-site scripting vulnerability due to a $@. | ReflectedXss.js:110:16:110:30 | request.query.p | user-provided value | +| ReflectedXss.js:122:30:122:73 | `${inva ... telist` | ReflectedXss.js:114:13:114:27 | keys: queryKeys | ReflectedXss.js:122:30:122:73 | `${inva ... telist` | Cross-site scripting vulnerability due to a $@. | ReflectedXss.js:114:13:114:27 | keys: queryKeys | user-provided value | +| ReflectedXss.js:122:30:122:73 | `${inva ... telist` | ReflectedXss.js:116:31:116:45 | paramKeys?.keys | ReflectedXss.js:122:30:122:73 | `${inva ... telist` | Cross-site scripting vulnerability due to a $@. | ReflectedXss.js:116:31:116:45 | paramKeys?.keys | user-provided value | | ReflectedXssContentTypes.js:10:14:10:36 | "FOO: " ... rams.id | ReflectedXssContentTypes.js:10:24:10:36 | req.params.id | ReflectedXssContentTypes.js:10:14:10:36 | "FOO: " ... rams.id | Cross-site scripting vulnerability due to a $@. | ReflectedXssContentTypes.js:10:24:10:36 | req.params.id | user-provided value | | ReflectedXssContentTypes.js:20:14:20:36 | "FOO: " ... rams.id | ReflectedXssContentTypes.js:20:24:20:36 | req.params.id | ReflectedXssContentTypes.js:20:14:20:36 | "FOO: " ... rams.id | Cross-site scripting vulnerability due to a $@. | ReflectedXssContentTypes.js:20:24:20:36 | req.params.id | user-provided value | | ReflectedXssContentTypes.js:39:13:39:35 | "FOO: " ... rams.id | ReflectedXssContentTypes.js:39:23:39:35 | req.params.id | ReflectedXssContentTypes.js:39:13:39:35 | "FOO: " ... rams.id | Cross-site scripting vulnerability due to a $@. | ReflectedXssContentTypes.js:39:23:39:35 | req.params.id | user-provided value | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/ReflectedXss/ReflectedXss.js b/javascript/ql/test/query-tests/Security/CWE-079/ReflectedXss/ReflectedXss.js index 2b7c2057f0f..fc2e1abb888 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/ReflectedXss/ReflectedXss.js +++ b/javascript/ql/test/query-tests/Security/CWE-079/ReflectedXss/ReflectedXss.js @@ -109,3 +109,17 @@ hapi.route({ handler: function (request){ return request.query.p; // NOT OK }}); + +app.get("invalid/keys/:id", async (req, res) => { + const { keys: queryKeys } = req.query; + const paramKeys = req.params; + const keys = queryKeys || paramKeys?.keys; + + const keyArray = typeof keys === 'string' ? [keys] : keys; + const invalidKeys = keyArray.filter(key => !whitelist.includes(key)); + + if (invalidKeys.length) { + res.status(400).send(`${invalidKeys.join(', ')} not in whitelist`); + return; + } +}); \ No newline at end of file diff --git a/javascript/ql/test/query-tests/Security/CWE-079/ReflectedXss/ReflectedXssWithCustomSanitizer.expected b/javascript/ql/test/query-tests/Security/CWE-079/ReflectedXss/ReflectedXssWithCustomSanitizer.expected index e73591619df..a367f07307a 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/ReflectedXss/ReflectedXssWithCustomSanitizer.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/ReflectedXss/ReflectedXssWithCustomSanitizer.expected @@ -19,6 +19,8 @@ | ReflectedXss.js:100:12:100:39 | markdow ... q.body) | Cross-site scripting vulnerability due to $@. | ReflectedXss.js:100:31:100:38 | req.body | user-provided value | | ReflectedXss.js:103:12:103:84 | markdow ... q.body) | Cross-site scripting vulnerability due to $@. | ReflectedXss.js:103:76:103:83 | req.body | user-provided value | | ReflectedXss.js:110:16:110:30 | request.query.p | Cross-site scripting vulnerability due to $@. | ReflectedXss.js:110:16:110:30 | request.query.p | user-provided value | +| ReflectedXss.js:122:30:122:73 | `${inva ... telist` | Cross-site scripting vulnerability due to $@. | ReflectedXss.js:114:13:114:27 | keys: queryKeys | user-provided value | +| ReflectedXss.js:122:30:122:73 | `${inva ... telist` | Cross-site scripting vulnerability due to $@. | ReflectedXss.js:116:31:116:45 | paramKeys?.keys | user-provided value | | ReflectedXssContentTypes.js:10:14:10:36 | "FOO: " ... rams.id | Cross-site scripting vulnerability due to $@. | ReflectedXssContentTypes.js:10:24:10:36 | req.params.id | user-provided value | | ReflectedXssContentTypes.js:20:14:20:36 | "FOO: " ... rams.id | Cross-site scripting vulnerability due to $@. | ReflectedXssContentTypes.js:20:24:20:36 | req.params.id | user-provided value | | ReflectedXssContentTypes.js:39:13:39:35 | "FOO: " ... rams.id | Cross-site scripting vulnerability due to $@. | ReflectedXssContentTypes.js:39:23:39:35 | req.params.id | user-provided value | diff --git a/javascript/ql/test/testUtilities/internal/InlineExpectationsTestImpl.qll b/javascript/ql/test/testUtilities/internal/InlineExpectationsTestImpl.qll index d1de2866b10..9e92f70af69 100644 --- a/javascript/ql/test/testUtilities/internal/InlineExpectationsTestImpl.qll +++ b/javascript/ql/test/testUtilities/internal/InlineExpectationsTestImpl.qll @@ -4,8 +4,13 @@ private import codeql.util.test.InlineExpectationsTest module Impl implements InlineExpectationsTestSig { private import javascript - class ExpectationComment extends LineComment { + final private class LineCommentFinal = LineComment; + + class ExpectationComment extends LineCommentFinal { string getContents() { result = this.getText() } + + /** Gets this element's location. */ + Location getLocation() { result = super.getLocation() } } class Location = JS::Location; diff --git a/misc/bazel/cmake/cmake.bzl b/misc/bazel/cmake/cmake.bzl index 7d50c7fcdee..d98a480c69c 100644 --- a/misc/bazel/cmake/cmake.bzl +++ b/misc/bazel/cmake/cmake.bzl @@ -70,10 +70,10 @@ def _cmake_aspect_impl(target, ctx): is_macos = "darwin" in ctx.var["TARGET_CPU"] - is_binary = ctx.rule.kind == "cc_binary" + is_binary = ctx.rule.kind in ("cc_binary", "cc_test") force_cxx_compilation = "force_cxx_compilation" in ctx.rule.attr.features attr = ctx.rule.attr - srcs = attr.srcs + getattr(attr, "hdrs", []) + getattr(attr, "textual_hdrs", []) + srcs = getattr(attr, "srcs", []) + getattr(attr, "hdrs", []) + getattr(attr, "textual_hdrs", []) srcs = [f for src in srcs for f in src.files.to_list()] inputs = [f for f in srcs if not f.is_source or f.path.startswith("external/")] by_kind = {} @@ -92,10 +92,10 @@ def _cmake_aspect_impl(target, ctx): cxx_compilation = force_cxx_compilation or any([not src.endswith(".c") for src in srcs]) copts = ctx.fragments.cpp.copts + (ctx.fragments.cpp.cxxopts if cxx_compilation else ctx.fragments.cpp.conlyopts) - copts += [ctx.expand_make_variables("copts", o, {}) for o in ctx.rule.attr.copts] + copts += [ctx.expand_make_variables("copts", o, {}) for o in getattr(ctx.rule.attr, "copts", [])] linkopts = ctx.fragments.cpp.linkopts - linkopts += [ctx.expand_make_variables("linkopts", o, {}) for o in ctx.rule.attr.linkopts] + linkopts += [ctx.expand_make_variables("linkopts", o, {}) for o in getattr(ctx.rule.attr, "linkopts", [])] compilation_ctx = target[CcInfo].compilation_context system_includes = _get_includes(compilation_ctx.system_includes) diff --git a/misc/bazel/cmake/setup.cmake b/misc/bazel/cmake/setup.cmake index 439bfbb59d7..739bdd861ab 100644 --- a/misc/bazel/cmake/setup.cmake +++ b/misc/bazel/cmake/setup.cmake @@ -9,26 +9,61 @@ if (NOT DEFINED BAZEL_BIN) set(BAZEL_BIN "bazelisk") endif () +if (NOT DEFINED CODEQL_BAZEL_WORKSPACE) + set(CODEQL_BAZEL_WORKSPACE "codeql") +endif () + macro(bazel) - execute_process(COMMAND ${BAZEL_BIN} ${ARGN} + execute_process(COMMAND ${BAZEL_BIN} ${BAZEL_STARTUP_OPTIONS} ${ARGN} COMMAND_ERROR_IS_FATAL ANY OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) endmacro() -bazel(info workspace OUTPUT_VARIABLE BAZEL_WORKSPACE) +macro(bazel_even_if_failing) + execute_process(COMMAND ${BAZEL_BIN} ${BAZEL_STARTUP_OPTIONS} ${ARGN} + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) +endmacro() +bazel(info workspace OUTPUT_VARIABLE BAZEL_WORKSPACE) bazel(info output_base OUTPUT_VARIABLE BAZEL_OUTPUT_BASE) set(BAZEL_EXEC_ROOT ${BAZEL_OUTPUT_BASE}/execroot/_main) +set(BAZEL_BUILD_OPTIONS --nocheck_visibility --keep_going) macro(include_generated BAZEL_TARGET) - bazel(build ${BAZEL_TARGET}) + bazel(build ${BAZEL_TARGET} ${BAZEL_BUILD_OPTIONS}) string(REPLACE "@" "/external/" BAZEL_TARGET_PATH ${BAZEL_TARGET}) string(REPLACE "//" "/" BAZEL_TARGET_PATH ${BAZEL_TARGET_PATH}) string(REPLACE ":" "/" BAZEL_TARGET_PATH ${BAZEL_TARGET_PATH}) include(${BAZEL_WORKSPACE}/bazel-bin${BAZEL_TARGET_PATH}.cmake) endmacro() +macro(generate_and_include) + file(REMOVE "${BAZEL_WORKSPACE}/.bazel-cmake/BUILD.bazel") + # use aquery to only get targets compatible with the current platform + bazel_even_if_failing(aquery "kind(\"cc_test|cc_binary\", ${ARGN})" ${BAZEL_BUILD_OPTIONS} --output=jsonproto OUTPUT_VARIABLE BAZEL_AQUERY_RESULT) + string(JSON BAZEL_JSON_TARGETS GET "${BAZEL_AQUERY_RESULT}" targets) + string(JSON LAST_IDX LENGTH "${BAZEL_JSON_TARGETS}") + math(EXPR LAST_IDX "${LAST_IDX} - 1") + foreach(IDX RANGE ${LAST_IDX}) + string(JSON CUR_BAZEL_TARGET GET "${BAZEL_JSON_TARGETS}" ${IDX} label) + string(APPEND BAZEL_TARGETS " '${CUR_BAZEL_TARGET}',\n") + endforeach () + file(WRITE "${BAZEL_WORKSPACE}/.bazel-cmake/BUILD.bazel" "\ +# this file was generated by cmake +load('@${CODEQL_BAZEL_WORKSPACE}//misc/bazel/cmake:cmake.bzl', 'generate_cmake')\n\ +\n\ +generate_cmake(\n\ + name = 'cmake',\n\ + testonly = True,\n\ + targets = [\n\ +${BAZEL_TARGETS}\ + ],\n\ +)\n") + include_generated(//.bazel-cmake:cmake) +endmacro() + if (CREATE_COMPILATION_DATABASE_LINK) file(CREATE_LINK ${PROJECT_BINARY_DIR}/compile_commands.json ${PROJECT_SOURCE_DIR}/compile_commands.json SYMBOLIC) endif () diff --git a/python/extractor/BUILD.bazel b/python/extractor/BUILD.bazel new file mode 100644 index 00000000000..4e93f539bde --- /dev/null +++ b/python/extractor/BUILD.bazel @@ -0,0 +1,49 @@ +load("//:dist.bzl", "pack_zip") + +py_binary( + name = "make-zips-py", + srcs = [ + "make_zips.py", + "python_tracer.py", + "unparse.py", + ], + data = [ + "LICENSE-PSF.md", + "__main__.py", + "imp.py", + ] + glob([ + "blib2to3/**", + "buildtools/**", + "lark/**", + "semmle/**", + ]), + # On @criemen's machine, without this, make-zips.py can't find its imports from + # python_tracer. The problem didn't show for some reason on Windows CI machines, though. + imports = ["."], + main = "make_zips.py", +) + +genrule( + name = "python3src", + outs = [ + "python3src.zip", + ], + cmd = "PYTHON_INSTALLER_OUTPUT=\"$(RULEDIR)\" $(location :make-zips-py)", + tools = [":make-zips-py"], +) + +pack_zip( + name = "extractor-python", + srcs = [ + "LICENSE-PSF.md", # because we distribute imp.py + "convert_setup.py", + "get_venv_lib.py", + "imp.py", + "index.py", + "python_tracer.py", + "setup.py", + ":python3src", + ] + glob(["data/**"]), + prefix = "tools", + visibility = ["//visibility:public"], +) diff --git a/python/extractor/LICENSE-PSF.md b/python/extractor/LICENSE-PSF.md new file mode 100644 index 00000000000..636654191e9 --- /dev/null +++ b/python/extractor/LICENSE-PSF.md @@ -0,0 +1,257 @@ +Parts of the Python extractor are derived from code in the CPython +distribution. Its license is reproduced below. + +A. HISTORY OF THE SOFTWARE +========================== + +Python was created in the early 1990s by Guido van Rossum at Stichting +Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands +as a successor of a language called ABC. Guido remains Python's +principal author, although it includes many contributions from others. + +In 1995, Guido continued his work on Python at the Corporation for +National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +in Reston, Virginia where he released several versions of the +software. + +In May 2000, Guido and the Python core development team moved to +BeOpen.com to form the BeOpen PythonLabs team. In October of the same +year, the PythonLabs team moved to Digital Creations, which became +Zope Corporation. In 2001, the Python Software Foundation (PSF, see +https://www.python.org/psf/) was formed, a non-profit organization +created specifically to own Python-related Intellectual Property. +Zope Corporation was a sponsoring member of the PSF. + +All Python releases are Open Source (see http://www.opensource.org for +the Open Source Definition). Historically, most, but not all, Python +releases have also been GPL-compatible; the table below summarizes +the various releases. + + Release Derived Year Owner GPL- + from compatible? (1) + + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2 and above 2.1.1 2001-now PSF yes + +Footnotes: + +(1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + +(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + +Thanks to the many outside volunteers who have worked under Guido's +direction to make these releases possible. + + +B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON +=============================================================== + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +analyze, test, perform and/or display publicly, prepare derivative works, +distribute, and otherwise use Python alone or in any derivative version, +provided, however, that PSF's License Agreement and PSF's notice of copyright, +i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Python Software Foundation; +All Rights Reserved" are retained in Python alone or in any derivative version +prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 +------------------------------------------- + +BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + +1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an +office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the +Individual or Organization ("Licensee") accessing and otherwise using +this software in source or binary form and its associated +documentation ("the Software"). + +2. Subject to the terms and conditions of this BeOpen Python License +Agreement, BeOpen hereby grants Licensee a non-exclusive, +royalty-free, world-wide license to reproduce, analyze, test, perform +and/or display publicly, prepare derivative works, distribute, and +otherwise use the Software alone or in any derivative version, +provided, however, that the BeOpen Python License is retained in the +Software, alone or in any derivative version prepared by Licensee. + +3. BeOpen is making the Software available to Licensee on an "AS IS" +basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE +SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +5. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +6. This License Agreement shall be governed by and interpreted in all +respects by the law of the State of California, excluding conflict of +law provisions. Nothing in this License Agreement shall be deemed to +create any relationship of agency, partnership, or joint venture +between BeOpen and Licensee. This License Agreement does not grant +permission to use BeOpen trademarks or trade names in a trademark +sense to endorse or promote products or services of Licensee, or any +third party. As an exception, the "BeOpen Python" logos available at +http://www.pythonlabs.com/logos.html may be used according to the +permissions granted on that web page. + +7. By copying, installing or otherwise using the software, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 +--------------------------------------- + +1. This LICENSE AGREEMENT is between the Corporation for National +Research Initiatives, having an office at 1895 Preston White Drive, +Reston, VA 20191 ("CNRI"), and the Individual or Organization +("Licensee") accessing and otherwise using Python 1.6.1 software in +source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, CNRI +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python 1.6.1 +alone or in any derivative version, provided, however, that CNRI's +License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) +1995-2001 Corporation for National Research Initiatives; All Rights +Reserved" are retained in Python 1.6.1 alone or in any derivative +version prepared by Licensee. Alternately, in lieu of CNRI's License +Agreement, Licensee may substitute the following text (omitting the +quotes): "Python 1.6.1 is made available subject to the terms and +conditions in CNRI's License Agreement. This Agreement together with +Python 1.6.1 may be located on the Internet using the following +unique, persistent identifier (known as a handle): 1895.22/1013. This +Agreement may also be obtained from a proxy server on the Internet +using the following URL: http://hdl.handle.net/1895.22/1013". + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python 1.6.1 or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python 1.6.1. + +4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" +basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. This License Agreement shall be governed by the federal +intellectual property law of the United States, including without +limitation the federal copyright law, and, to the extent such +U.S. federal law does not apply, by the law of the Commonwealth of +Virginia, excluding Virginia's conflict of law provisions. +Notwithstanding the foregoing, with regard to derivative works based +on Python 1.6.1 that incorporate non-separable material that was +previously distributed under the GNU General Public License (GPL), the +law of the Commonwealth of Virginia shall govern this License +Agreement only as to issues arising under or with respect to +Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this +License Agreement shall be deemed to create any relationship of +agency, partnership, or joint venture between CNRI and Licensee. This +License Agreement does not grant permission to use CNRI trademarks or +trade name in a trademark sense to endorse or promote products or +services of Licensee, or any third party. + +8. By clicking on the "ACCEPT" button where indicated, or by copying, +installing or otherwise using Python 1.6.1, Licensee agrees to be +bound by the terms and conditions of this License Agreement. + + ACCEPT + + +CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 +-------------------------------------------------- + +Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, +The Netherlands. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/python/extractor/Makefile b/python/extractor/Makefile new file mode 100644 index 00000000000..1f2c5d0752b --- /dev/null +++ b/python/extractor/Makefile @@ -0,0 +1,61 @@ +.PHONY: all +.DEFAULT: all +all: + +OS = $(shell uname) + +GIT_ROOT = $(shell git rev-parse --show-toplevel) + +TOKENIZER_FILE = semmle/python/parser/tokenizer.py +TOKENIZER_DEPS = tokenizer_generator/state_transition.txt tokenizer_generator/tokenizer_template.py +# Must use the same Python version as on jenkins, since output differs per version. +# However, output is unstable on Python 3.5 (which jenkins uses) +TOKENIZER_CMD = python3 -m tokenizer_generator.gen_state_machine $(TOKENIZER_DEPS) + +.PHONY: tokenizer +tokenizer: $(TOKENIZER_FILE) + +$(TOKENIZER_FILE): $(TOKENIZER_DEPS) + $(TOKENIZER_CMD) > $@ + + +MASTER_FILE = semmle/python/master.py + +DBSCHEME_FILE = $(GIT_ROOT)/ql/python/ql/lib/semmlecode.python.dbscheme + +.PHONY: dbscheme +dbscheme: $(MASTER_FILE) + python3 -m semmle.dbscheme_gen $(DBSCHEME_FILE) + +AST_GENERATED_DIR = $(GIT_ROOT)/ql/python/ql/lib/semmle/python/ +AST_GENERATED_FILE = $(AST_GENERATED_DIR)AstGenerated.qll + +.PHONY: ast +ast: $(MASTER_FILE) + python3 -m semmle.query_gen $(AST_GENERATED_DIR) + $(GIT_ROOT)/target/intree/codeql/codeql query format --in-place $(AST_GENERATED_FILE) + +################################################################################ +# Tests +################################################################################ + +.PHONY: test-all +test-all: test-3 + +.PHONY: test-3 +test-3: pytest-3 test-tokenizer + +.PHONY: test-tokenizer +test-tokenizer: SHELL:=/bin/bash +test-tokenizer: + @echo Not running test-tokenizer as jenkins uses Python 3.5 + # TODO: Enable again once we run Python > 3.5 on Jenkins + # diff -u $(TOKENIZER_FILE) <($(TOKENIZER_CMD)) + +.PHONY: pytest-3 +pytest-3: + poetry run pytest + +.PHONY: pytest-3-deprecation-error +pytest-3-deprecation-error: + PYTHONWARNINGS='error::DeprecationWarning' poetry run pytest diff --git a/python/extractor/README.md b/python/extractor/README.md new file mode 100644 index 00000000000..7bb4e78dad9 --- /dev/null +++ b/python/extractor/README.md @@ -0,0 +1,211 @@ +# Python extraction + +Python extraction happens in two phases: + +1. [Setup](#1-Setup-Phase) + - determine which version to analyze the project as + - creating virtual environment (only LGTM.com) + - determine python import path + - invoking the actual python extractor +2. [The actual Python extractor](#2-The-actual-Python-extractor) + - walks files and folders, and performs extraction + +The rule for `pack_zip('python-extractor')` in `build` defines what files are included in a distribution and in the CodeQL CLI. After building the CodeQL CLI locally, the files are in `target/intree/codeql/python/tools`. + +## Local development + +This project uses + +- [poetry](https://python-poetry.org/) as the package manager +- [tox](https://tox.wiki/en) together with [pytest](https://docs.pytest.org/en/) to run tests across multiple versions + +You can install both tools with [`pipx`](https://pypa.github.io/pipx/), like so + +```sh +pipx install poetry +pipx inject poetry virtualenv-pyenv # to allow poetry to find python versions from pyenv +pipx install tox +pipx inject tox virtualenv-pyenv # to allow tox to find python versions from pyenv +``` + +Once you've installed poetry, you can do this: + +```sh +# install required packages +$ poetry install + +# to run tests against python version used by poetry +$ poetry run pytest + +# or +$ poetry shell # activate poetry environment +$ pytest # so now pytest is available + +# to run tests against all support python versions +$ tox + +# to run against specific version (Python 3.9) +$ tox -e py39 +``` + +To install multiple python versions locally, we recommend you use [`pyenv`](https://github.com/pyenv/pyenv) + +_(don't try to use `tox run-parallel`, our tests are not set up for this to work 😅)_ + +### Zip files + +Currently we distribute our code in an obfuscated way, by including the code in the subfolders in a zip file that is imported at run-time (by the python files in the top level of this directory). + +The one exception is the `data` directory (used for stubs) which is included directly in the `tools` folder. + +The zip creation is managed by [`make_zips.py`](./make_zips.py), and currently we make one zipfile for Python 2 (which is byte compiled), and one for Python 3 (which has source files, but they are stripped of comments and docstrings). + +### A note about Python versions + +We expect to be able to run our tools (setup phase) with either Python 2 or Python 3, and after determining which version to analyze the code as, we run the extractor with that version. So we must support: + +- Setup tools run using Python 2: + - Extracting code using Python 2 + - Extracting code using Python 3 +- Setup tools run using Python 3: + - Extracting code using Python 2 + - Extracting code using Python 3 + +# 1. Setup phase + +**For extraction with the CodeQL CLI locally** (`codeql database create --language python`) + +- Runs [`language-packs/python/tools/autobuild.sh`](/language-packs/python/tools/autobuild.sh) and this script runs [`index.py`](./index.py) + +### Overview of control flow for [`setup.py`](./setup.py) + +The representation of the code in the figure below has in some cases been altered slightly, but is accurate as of 2020-03-20. + +<details open> + +<!-- This file can be opened with diagrams.net directly --> + +![python extraction overiew](./docs/extractor-python-setup.svg) + +</details> + +### Overview of control flow for [`index.py`](./index.py) + +The representation of the code in the figure below has in some cases been altered slightly, but is accurate as of 2020-03-20. + +<details open> + +<!-- This file can be opened with diagrams.net directly --> + +![python extraction overiew](./docs/extractor-python-index.svg) + +</details> + +# 2. The actual Python extractor + +## Overview + +The entrypoint of the actual Python extractor is [`python_tracer.py`](./python_tracer.py). + +The usual way to invoke the extractor is to pass a directory of Python files to the launcher. The extractor extracts code from those files and their dependencies, producing TRAP files, and copies the source code to a source archive. +Alternatively, for highly distributed systems, it is possible to pass a single file to the per extractor invocation; invoking it many times. +The extractor recognizes Python source code files and Thrift IDL files. +Other types of file can be added to the database, by passing the `--filter` option to the extractor, but they'll be stored as text blobs. + +The extractor expects the `CODEQL_EXTRACTOR_PYTHON_TRAP_DIR` and +`CODEQL_EXTRACTOR_PYTHON_SOURCE_ARCHIVE_DIR` environment variables to be set (which determine, +respectively, where it puts TRAP files and the source archive). However, the location of the TRAP +folder and source archive can be specified on the command-line instead. + +The extractor outputs the following information as TRAP files: + +- A file containing per-interpreter data, such as version information and the contents of the `builtins` module. +- One file per extractor process containing the file and folder information for all processed files and all enclosing folders. +- Per Python or template file: + - The AST. + - Scopes and variables, attached to the AST. + - The control-flow graph, selectively split when repeated tests are seen. + +## How it works + +### Overall Architecture + +Once started, the extractor consists of three sets of communicating processes. + +1. The front-end: A single process which walks the files and folders specified on the command-line, enqueuing those files plus any additional modules requested by the extractor processes. +2. The extractors: Typically one process per CPU. Takes file and module descriptions from the queue, producing TRAP files and copies of the source. +3. The logging process. To avoid message interleaving and avoid deadlock, all log messages are queued up to be sent to a logging process which formats and prints the messages. + +The front-end -> worker message queue has quite limited capacity (2 per process) to ensure rapid shutdown when interrupted. The capacity of the worker -> front-end message queue must be at least twice that size to prevent deadlock, and is in fact much larger to prevent workers being blocked on the queue. + +Experiments suggest that the extractor scales almost linearly to at least 20 processes (on linux). + +The component that walks the file system is known as the "traverser" and is designed to be pluggable. +Its interface is simply an iterable of file descriptions. See `semmle/traverser.py`. + +### Lifetime of the extractor + +1. Parse the command-line options and read environment variables. +2. The main process creates: + 1. the logging queue and process, + 2. the message queues, and + 3. the extractor processes. +3. The main process, now the front-end, starts traversing the file system, by iterating over the traverser. +4. Until it has exhausted the traverser, it concurrently: + - Adds module descriptions from the traverser to the message queue + - Reads the reply queue and for any `"IMPORT"` message received adds the module to the message queue if that module has not been seen before. +5. Until a `"SUCCESS"` message has been received on the reply queue for each module description that has been enqueued: + - Reads the reply queue and adds those module descriptions it hasn't seen before to the message queue. +6. Add one `None` message to the message queue for each extractor. +7. Wait for all extractors to halt. +8. Stop the logging process and halt. + +### Lifetime of an extractor process + +1. Read messages from the message queue until a `None` message is received. For each message: + 1. Parse the file or module. + 2. Send an "IMPORT" message for all modules imported by the module being processed. + 3. Write out TRAP and source archive for the file. + 4. Send a "SUCCESS" message for the file. +2. Emit file and folder TRAP for all files and modules processed. +3. Halt. + +### TRAP caching + +An important consequence of local extraction is that, except for the file path information, the contents of the TRAP file are functionally determined by: + +- The contents of the file. +- Some command-line options (those determining name hashing and CFG splitting). +- The extractor version. + +Caching of TRAP files can reduce the time to extract a large project with few changes by an order of magnitude. + +### Extraction + +Each extractor process runs a loop which extracts files or modules from the queue, one at a time. +Each file or module description is passed, in turn, to one of the extractor objects which will either extract it or reject it for the next extractor object to try. +Currently the default extractors are: + +- Builtin module extractor: Extracts built-in modules like `sys`. +- Thrift extractor: Extracts Thrift IDL files. +- Python extractor: Extracts Python source code files. +- Package extractor: Extracts minimal information for package folders. +- General file extractor: Any files rejected by the above passes are added to the database as a text blob. + +#### Python extraction + +The Python extractor is the most interesting of the processes mentioned above. +The Python extractor takes a path to a Python file. It emits TRAP to the specified folder and a UTF-8 encoded version of the source to the source archive. +It consists of the following passes: + +1. Ingestion and decoding: Read the contents of the file as bytes, determine its encoding, and decode it to text. +2. Tokenizing: Tokenize the source text, including whitespace and comment tokens. +3. Parsing: Create a concrete parse tree from the list of tokens. +4. Rewriting: Rewrite the concrete parse tree to an AST, annotated with scope, variable information, and locations. +5. Write out lexical and AST information as TRAP. +6. Generate and emit TRAP for control-flow graphs. This is done one scope at a time to minimize memory consumption. +7. Emit ancillary information, like TRAP for comments. + +#### Template file extraction + +Most Python template languages work by either translating the template into Python or by fairly closely mimicking the behavior of Python. This means that we can extract template files by converting them to the same AST used internally by the Python extractor and then passing that AST to the backend of the Python extractor to determine imports, and generate TRAP files including control-flow information. diff --git a/python/extractor/__main__.py b/python/extractor/__main__.py new file mode 100644 index 00000000000..d059d0f99bd --- /dev/null +++ b/python/extractor/__main__.py @@ -0,0 +1,4 @@ +import semmle.populator + +if __name__ == "__main__": + semmle.populator.main() diff --git a/python/extractor/blib2to3/Grammar.txt b/python/extractor/blib2to3/Grammar.txt new file mode 100644 index 00000000000..8d16d27b60b --- /dev/null +++ b/python/extractor/blib2to3/Grammar.txt @@ -0,0 +1,224 @@ +# Grammar for 2to3. This grammar supports Python 2.x and 3.x. + +# NOTE WELL: You should also follow all the steps listed at +# https://devguide.python.org/grammar/ + +# Start symbols for the grammar: +# file_input is a module or sequence of commands read from an input file; +# single_input is a single interactive statement; +# eval_input is the input for the eval() and input() functions. +# NB: compound_stmt in single_input is followed by extra NEWLINE! +file_input: (NEWLINE | stmt)* ENDMARKER +single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE +eval_input: testlist NEWLINE* ENDMARKER + +decorator: '@' namedexpr_test NEWLINE +decorators: decorator+ +decorated: decorators (classdef | funcdef | async_funcdef) +async_funcdef: 'async' funcdef +funcdef: 'def' NAME parameters ['->' test] ':' suite +parameters: '(' [typedargslist] ')' + +# The following definition for typedarglist is equivalent to this set of rules: +# +# arguments = argument (',' argument)* +# argument = tfpdef ['=' test] +# kwargs = '**' tname [','] +# args = '*' [tname] +# kwonly_kwargs = (',' argument)* [',' [kwargs]] +# args_kwonly_kwargs = args kwonly_kwargs | kwargs +# poskeyword_args_kwonly_kwargs = arguments [',' [args_kwonly_kwargs]] +# typedargslist_no_posonly = poskeyword_args_kwonly_kwargs | args_kwonly_kwargs +# typedarglist = arguments ',' '/' [',' [typedargslist_no_posonly]])|(typedargslist_no_posonly)" +# +# It needs to be fully expanded to allow our LL(1) parser to work on it. + +typedargslist: tfpdef ['=' test] (',' tfpdef ['=' test])* ',' '/' [ + ',' [((tfpdef ['=' test] ',')* ('*' [tname] (',' tname ['=' test])* + [',' ['**' tname [',']]] | '**' tname [',']) + | tfpdef ['=' test] (',' tfpdef ['=' test])* [','])] + ] | ((tfpdef ['=' test] ',')* ('*' [tname] (',' tname ['=' test])* + [',' ['**' tname [',']]] | '**' tname [',']) + | tfpdef ['=' test] (',' tfpdef ['=' test])* [',']) + +tname: NAME [':' test] +tfpdef: tname | '(' tfplist ')' +tfplist: tfpdef (',' tfpdef)* [','] + +# The following definition for varargslist is equivalent to this set of rules: +# +# arguments = argument (',' argument )* +# argument = vfpdef ['=' test] +# kwargs = '**' vname [','] +# args = '*' [vname] +# kwonly_kwargs = (',' argument )* [',' [kwargs]] +# args_kwonly_kwargs = args kwonly_kwargs | kwargs +# poskeyword_args_kwonly_kwargs = arguments [',' [args_kwonly_kwargs]] +# vararglist_no_posonly = poskeyword_args_kwonly_kwargs | args_kwonly_kwargs +# varargslist = arguments ',' '/' [','[(vararglist_no_posonly)]] | (vararglist_no_posonly) +# +# It needs to be fully expanded to allow our LL(1) parser to work on it. + +varargslist: vfpdef ['=' test ](',' vfpdef ['=' test])* ',' '/' [',' [ + ((vfpdef ['=' test] ',')* ('*' [vname] (',' vname ['=' test])* + [',' ['**' vname [',']]] | '**' vname [',']) + | vfpdef ['=' test] (',' vfpdef ['=' test])* [',']) + ]] | ((vfpdef ['=' test] ',')* + ('*' [vname] (',' vname ['=' test])* [',' ['**' vname [',']]]| '**' vname [',']) + | vfpdef ['=' test] (',' vfpdef ['=' test])* [',']) + +vname: NAME +vfpdef: vname | '(' vfplist ')' +vfplist: vfpdef (',' vfpdef)* [','] + +stmt: simple_stmt | compound_stmt +simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE +small_stmt: (expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | + import_stmt | global_stmt | exec_stmt | assert_stmt) +expr_stmt: testlist_star_expr (annassign | augassign (yield_expr|testlist) | + ('=' (yield_expr|testlist_star_expr))*) +annassign: ':' test ['=' test] +testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [','] +augassign: ('+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' | + '<<=' | '>>=' | '**=' | '//=') +# For normal and annotated assignments, additional restrictions enforced by the interpreter +print_stmt: 'print' ( [ test (',' test)* [','] ] | + '>>' test [ (',' test)+ [','] ] ) +del_stmt: 'del' del_list +del_list: (expr|star_expr) (',' (expr|star_expr))* [','] +pass_stmt: 'pass' +flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt +break_stmt: 'break' +continue_stmt: 'continue' +return_stmt: 'return' [testlist_star_expr] +yield_stmt: yield_expr +raise_stmt: 'raise' [test ['from' test | ',' test [',' test]]] +import_stmt: import_name | import_from +import_name: 'import' dotted_as_names +import_from: ('from' ('.'* dotted_name | '.'+) + 'import' ('*' | '(' import_as_names ')' | import_as_names)) +import_as_name: NAME ['as' NAME] +dotted_as_name: dotted_name ['as' NAME] +import_as_names: import_as_name (',' import_as_name)* [','] +dotted_as_names: dotted_as_name (',' dotted_as_name)* +dotted_name: NAME ('.' NAME)* +global_stmt: ('global' | 'nonlocal') NAME (',' NAME)* +exec_stmt: 'exec' expr ['in' test [',' test]] +assert_stmt: 'assert' test [',' test] + +compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated | async_stmt +async_stmt: 'async' (funcdef | with_stmt | for_stmt) +if_stmt: 'if' namedexpr_test ':' suite ('elif' namedexpr_test ':' suite)* ['else' ':' suite] +while_stmt: 'while' namedexpr_test ':' suite ['else' ':' suite] +for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] +try_stmt: ('try' ':' suite + ((except_clause ':' suite)+ + ['else' ':' suite] + ['finally' ':' suite] | + 'finally' ':' suite)) +with_stmt: 'with' with_item (',' with_item)* ':' suite +with_item: test ['as' expr] +with_var: 'as' expr +# NB compile.c makes sure that the default except clause is last +except_clause: 'except' [test [(',' | 'as') test]] +suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT + +# Backward compatibility cruft to support: +# [ x for x in lambda: True, lambda: False if x() ] +# even while also allowing: +# lambda x: 5 if x else 2 +# (But not a mix of the two) +testlist_safe: old_test [(',' old_test)+ [',']] +old_test: or_test | old_lambdef +old_lambdef: 'lambda' [varargslist] ':' old_test + +namedexpr_test: test [':=' test] +test: or_test ['if' or_test 'else' test] | lambdef +or_test: and_test ('or' and_test)* +and_test: not_test ('and' not_test)* +not_test: 'not' not_test | comparison +comparison: expr (comp_op expr)* +comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' +star_expr: '*' expr +expr: xor_expr ('|' xor_expr)* +xor_expr: and_expr ('^' and_expr)* +and_expr: shift_expr ('&' shift_expr)* +shift_expr: arith_expr (('<<'|'>>') arith_expr)* +arith_expr: term (('+'|'-') term)* +term: factor (('*'|'@'|'/'|'%'|'//') factor)* +factor: ('+'|'-'|'~') factor | power +power: ['await'] atom trailer* ['**' factor] +atom: ('(' [yield_expr|testlist_gexp] ')' | + '[' [listmaker] ']' | + '{' [dictsetmaker] '}' | + '`' testlist1 '`' | + NAME | NUMBER | string | '.' '.' '.' | special_operation + ) + +string: (fstring_part | STRING)+ +fstring_part: FSTRING_START testlist ['='] [ CONVERSION ] [ format_specifier ] (FSTRING_MID testlist ['='] [ CONVERSION ] [ format_specifier ] )* FSTRING_END +format_specifier: ':' (FSTRING_SPEC test [ CONVERSION ] [ format_specifier ] )* FSTRING_SPEC + +listmaker: (namedexpr_test|star_expr) ( old_comp_for | (',' (namedexpr_test|star_expr))* [','] ) +testlist_gexp: (namedexpr_test|star_expr) ( old_comp_for | (',' (namedexpr_test|star_expr))* [','] ) +lambdef: 'lambda' [varargslist] ':' test +trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME +subscriptlist: subscript (',' subscript)* [','] +subscript: test | [test] ':' [test] [ ':' [test] ] +exprlist: (expr|star_expr) (',' (expr|star_expr))* [','] +testlist: test (',' test)* [','] +dictsetmaker: ( ((test ':' test | '**' expr) + (comp_for | (',' (test ':' test | '**' expr))* [','])) | + ((test | star_expr) + (comp_for | (',' (test | star_expr))* [','])) ) + +classdef: 'class' NAME ['(' [arglist] ')'] ':' suite + +arglist: argument (',' argument)* [','] + +# "test '=' test" is really "keyword '=' test", but we have no such token. +# These need to be in a single rule to avoid grammar that is ambiguous +# to our LL(1) parser. Even though 'test' includes '*expr' in star_expr, +# we explicitly match '*' here, too, to give it proper precedence. +# Illegal combinations and orderings are blocked in ast.c: +# multiple (test comp_for) arguments are blocked; keyword unpackings +# that precede iterable unpackings are blocked; etc. +argument: ( test [comp_for] | + test ':=' test | + test '=' test | + '**' test | + '*' test ) + +comp_iter: comp_for | comp_if +comp_for: ['async'] 'for' exprlist 'in' or_test [comp_iter] +comp_if: 'if' old_test [comp_iter] + +# As noted above, testlist_safe extends the syntax allowed in list +# comprehensions and generators. We can't use it indiscriminately in all +# derivations using a comp_for-like pattern because the testlist_safe derivation +# contains comma which clashes with trailing comma in arglist. +# +# This was an issue because the parser would not follow the correct derivation +# when parsing syntactically valid Python code. Since testlist_safe was created +# specifically to handle list comprehensions and generator expressions enclosed +# with parentheses, it's safe to only use it in those. That avoids the issue; we +# can parse code like set(x for x in [],). +# +# The syntax supported by this set of rules is not a valid Python 3 syntax, +# hence the prefix "old". +# +# See https://bugs.python.org/issue27494 +old_comp_iter: old_comp_for | old_comp_if +old_comp_for: ['async'] 'for' exprlist 'in' testlist_safe [old_comp_iter] +old_comp_if: 'if' old_test [old_comp_iter] + +testlist1: test (',' test)* + +# not used in grammar, but may appear in "node" passed from Parser to Compiler +encoding_decl: NAME + +yield_expr: 'yield' [yield_arg] +yield_arg: 'from' test | testlist_star_expr + +special_operation: DOLLARNAME '(' [testlist] ')' + diff --git a/python/extractor/blib2to3/LICENSE b/python/extractor/blib2to3/LICENSE new file mode 100644 index 00000000000..1afbedba92b --- /dev/null +++ b/python/extractor/blib2to3/LICENSE @@ -0,0 +1,254 @@ +A. HISTORY OF THE SOFTWARE +========================== + +Python was created in the early 1990s by Guido van Rossum at Stichting +Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands +as a successor of a language called ABC. Guido remains Python's +principal author, although it includes many contributions from others. + +In 1995, Guido continued his work on Python at the Corporation for +National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +in Reston, Virginia where he released several versions of the +software. + +In May 2000, Guido and the Python core development team moved to +BeOpen.com to form the BeOpen PythonLabs team. In October of the same +year, the PythonLabs team moved to Digital Creations, which became +Zope Corporation. In 2001, the Python Software Foundation (PSF, see +https://www.python.org/psf/) was formed, a non-profit organization +created specifically to own Python-related Intellectual Property. +Zope Corporation was a sponsoring member of the PSF. + +All Python releases are Open Source (see http://www.opensource.org for +the Open Source Definition). Historically, most, but not all, Python +releases have also been GPL-compatible; the table below summarizes +the various releases. + + Release Derived Year Owner GPL- + from compatible? (1) + + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2 and above 2.1.1 2001-now PSF yes + +Footnotes: + +(1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + +(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + +Thanks to the many outside volunteers who have worked under Guido's +direction to make these releases possible. + + +B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON +=============================================================== + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +analyze, test, perform and/or display publicly, prepare derivative works, +distribute, and otherwise use Python alone or in any derivative version, +provided, however, that PSF's License Agreement and PSF's notice of copyright, +i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 Python Software Foundation; All +Rights Reserved" are retained in Python alone or in any derivative version +prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 +------------------------------------------- + +BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + +1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an +office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the +Individual or Organization ("Licensee") accessing and otherwise using +this software in source or binary form and its associated +documentation ("the Software"). + +2. Subject to the terms and conditions of this BeOpen Python License +Agreement, BeOpen hereby grants Licensee a non-exclusive, +royalty-free, world-wide license to reproduce, analyze, test, perform +and/or display publicly, prepare derivative works, distribute, and +otherwise use the Software alone or in any derivative version, +provided, however, that the BeOpen Python License is retained in the +Software, alone or in any derivative version prepared by Licensee. + +3. BeOpen is making the Software available to Licensee on an "AS IS" +basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE +SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +5. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +6. This License Agreement shall be governed by and interpreted in all +respects by the law of the State of California, excluding conflict of +law provisions. Nothing in this License Agreement shall be deemed to +create any relationship of agency, partnership, or joint venture +between BeOpen and Licensee. This License Agreement does not grant +permission to use BeOpen trademarks or trade names in a trademark +sense to endorse or promote products or services of Licensee, or any +third party. As an exception, the "BeOpen Python" logos available at +http://www.pythonlabs.com/logos.html may be used according to the +permissions granted on that web page. + +7. By copying, installing or otherwise using the software, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 +--------------------------------------- + +1. This LICENSE AGREEMENT is between the Corporation for National +Research Initiatives, having an office at 1895 Preston White Drive, +Reston, VA 20191 ("CNRI"), and the Individual or Organization +("Licensee") accessing and otherwise using Python 1.6.1 software in +source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, CNRI +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python 1.6.1 +alone or in any derivative version, provided, however, that CNRI's +License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) +1995-2001 Corporation for National Research Initiatives; All Rights +Reserved" are retained in Python 1.6.1 alone or in any derivative +version prepared by Licensee. Alternately, in lieu of CNRI's License +Agreement, Licensee may substitute the following text (omitting the +quotes): "Python 1.6.1 is made available subject to the terms and +conditions in CNRI's License Agreement. This Agreement together with +Python 1.6.1 may be located on the Internet using the following +unique, persistent identifier (known as a handle): 1895.22/1013. This +Agreement may also be obtained from a proxy server on the Internet +using the following URL: http://hdl.handle.net/1895.22/1013". + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python 1.6.1 or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python 1.6.1. + +4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" +basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. This License Agreement shall be governed by the federal +intellectual property law of the United States, including without +limitation the federal copyright law, and, to the extent such +U.S. federal law does not apply, by the law of the Commonwealth of +Virginia, excluding Virginia's conflict of law provisions. +Notwithstanding the foregoing, with regard to derivative works based +on Python 1.6.1 that incorporate non-separable material that was +previously distributed under the GNU General Public License (GPL), the +law of the Commonwealth of Virginia shall govern this License +Agreement only as to issues arising under or with respect to +Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this +License Agreement shall be deemed to create any relationship of +agency, partnership, or joint venture between CNRI and Licensee. This +License Agreement does not grant permission to use CNRI trademarks or +trade name in a trademark sense to endorse or promote products or +services of Licensee, or any third party. + +8. By clicking on the "ACCEPT" button where indicated, or by copying, +installing or otherwise using Python 1.6.1, Licensee agrees to be +bound by the terms and conditions of this License Agreement. + + ACCEPT + + +CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 +-------------------------------------------------- + +Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, +The Netherlands. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/python/extractor/blib2to3/README b/python/extractor/blib2to3/README new file mode 100644 index 00000000000..e20750d35f0 --- /dev/null +++ b/python/extractor/blib2to3/README @@ -0,0 +1,20 @@ +This code is derived from the black code formatter, +which itself was derived from the lib2to3 package in the Python standard library. + +We (Semmle) have modified this further to ease conversion to our multi-version AST. + +Original README from black: + +A subset of lib2to3 taken from Python 3.7.0b2. +Commit hash: 9c17e3a1987004b8bcfbe423953aad84493a7984 + +Reasons for forking: +- consistent handling of f-strings for users of Python < 3.6.2 +- backport of BPO-33064 that fixes parsing files with trailing commas after + *args and **kwargs +- backport of GH-6143 that restores the ability to reformat legacy usage of + `async` +- support all types of string literals +- better ability to debug (better reprs) +- INDENT and DEDENT don't hold whitespace and comment prefixes +- ability to Cythonize diff --git a/python/extractor/blib2to3/README.md b/python/extractor/blib2to3/README.md new file mode 100644 index 00000000000..cf01b731108 --- /dev/null +++ b/python/extractor/blib2to3/README.md @@ -0,0 +1,67 @@ +# Building Concrete Parse Trees using the Python grammar + +This grammar is mostly reusing existing code: + +- `lib2to3` is a part of the `2to3` utility (included in the CPython + distribution) aimed at automatically converting Python 2 code to equivalent + Python 3 code. Because it needs to be idempotent when applied to Python 3 + code, this grammar must be capable of parsing both Python 2 and 3 (with + certain restrictions). +- `blib2to3` is part of the `black` formatter for Python. It adds a few + extensions on top of `lib2to3`. +- Finally, we extend this grammar even further, in order to support things like + f-strings even when the extractor is run using Python 2. (In this respect, + `blib2to3` "cheats" by requiring Python 3 if you want to parse Python 3 code. + We do not have this luxury.) + +The grammar of Python is described in `Grammar.txt` in the style of an EBNF: + +- Rules have the form `nonterminal_name: production` (where traditionally, one + would use `::=` instead of `:`) +- Productions can contain + - Literal strings, enclosed in single quotes. + - Alternation, indicated by an infix `|`. + - Repetition, indicated by a postfixed `*` for "zero or more" and `+` for + "one or more". + - Optional parts, indicated by these being surrounded by square brackets. + - Parentheseses to indicate grouping, and to allow productions to span several lines. + +>Note: You may wonder: How is `Grammar.txt` parsed? The answer to this is that +>it is used to parse itself. In particular, it uses the same tokenizer as that +>for Python, and hence every symbol appearing in the grammar must be a valid +>Python token. This is why rules use `:` instead of `::=`. This also explains +>why parentheses must be used when a production spans multiple lines, as the +>presence of parentheses affects the tokenization. + +The concrete parse tree built based on these rules has a simple form: Each node +has a `name` attribute, equal to that of the corresponding nonterminal, and a +`children` attribute, which contains a list of all of the children of the node. +These come directly from the production on the right hand side of the rule for +the given nonterminal. Thus, something like + +``` +testlist: test (',' test)* [','] +``` + +will result in a node with name `testlist`, and its attribute `children` will be +a list where the first element is a `test` node, the second (if any) is a node +for `','`, etc. Note in particular that _every_ part of the production is +included in the children, even parts that are just static tokens. + +The leaves of the concrete parse tree (corresponding to the terminals of the +grammar) will have an associated `value` attribute. This contains the underlying +string for this token (in particular, for a `NAME` token, its value will be the +underlying identifier). + +## From Concrete to Abstract + +To turn the concrete parse tree into an asbstract parse tree, we _walk_ the tree +using the visitor pattern. Thus, for every nonterminal (e.g. `testlist`) we have +a method (in this case `visit_testlist`) that takes care of visiting nodes of +this type in the concrete parse tree. In doing so, we build up the abstract +parse tree, eliding any nodes that are not relevant in terms of the abstract +syntax. + +>TO DO: +>- Why we parse everything four times (`async` et al.) + diff --git a/python/extractor/blib2to3/__init__.py b/python/extractor/blib2to3/__init__.py new file mode 100644 index 00000000000..ea30561d839 --- /dev/null +++ b/python/extractor/blib2to3/__init__.py @@ -0,0 +1 @@ +#empty diff --git a/python/extractor/blib2to3/pgen2/__init__.py b/python/extractor/blib2to3/pgen2/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/blib2to3/pgen2/driver.py b/python/extractor/blib2to3/pgen2/driver.py new file mode 100644 index 00000000000..f7c9fb281d5 --- /dev/null +++ b/python/extractor/blib2to3/pgen2/driver.py @@ -0,0 +1,37 @@ +# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +# Modifications: +# Copyright 2006 Google, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +"""Parser driver. + +This provides a high-level interface to parse a file into a syntax tree. + +""" + +__author__ = "Guido van Rossum <guido@python.org>" + +__all__ = ["load_grammar"] + +# Python imports +import os +import logging +import pkgutil +import sys + +# Pgen imports +from . import grammar, pgen + +if sys.version < "3": + from cStringIO import StringIO +else: + from io import StringIO + +def load_grammar(package, grammar): + """Load the grammar (maybe from a pickle).""" + data = pkgutil.get_data(package, grammar) + stream = StringIO(data.decode("utf8")) + g = pgen.generate_grammar(grammar, stream) + return g diff --git a/python/extractor/blib2to3/pgen2/grammar.py b/python/extractor/blib2to3/pgen2/grammar.py new file mode 100644 index 00000000000..6a4d575ac2c --- /dev/null +++ b/python/extractor/blib2to3/pgen2/grammar.py @@ -0,0 +1,188 @@ +# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +"""This module defines the data structures used to represent a grammar. + +These are a bit arcane because they are derived from the data +structures used by Python's 'pgen' parser generator. + +There's also a table here mapping operators to their names in the +token module; the Python tokenize module reports all operators as the +fallback token code OP, but the parser needs the actual token code. + +""" + +# Python imports +import pickle + +# Local imports +from . import token + + +class Grammar(object): + """Pgen parsing tables conversion class. + + Once initialized, this class supplies the grammar tables for the + parsing engine implemented by parse.py. The parsing engine + accesses the instance variables directly. The class here does not + provide initialization of the tables; several subclasses exist to + do this (see the conv and pgen modules). + + The load() method reads the tables from a pickle file, which is + much faster than the other ways offered by subclasses. The pickle + file is written by calling dump() (after loading the grammar + tables using a subclass). The report() method prints a readable + representation of the tables to stdout, for debugging. + + The instance variables are as follows: + + symbol2number -- a dict mapping symbol names to numbers. Symbol + numbers are always 256 or higher, to distinguish + them from token numbers, which are between 0 and + 255 (inclusive). + + number2symbol -- a dict mapping numbers to symbol names; + these two are each other's inverse. + + states -- a list of DFAs, where each DFA is a list of + states, each state is a list of arcs, and each + arc is a (i, j) pair where i is a label and j is + a state number. The DFA number is the index into + this list. (This name is slightly confusing.) + Final states are represented by a special arc of + the form (0, j) where j is its own state number. + + dfas -- a dict mapping symbol numbers to (DFA, first) + pairs, where DFA is an item from the states list + above, and first is a set of tokens that can + begin this grammar rule (represented by a dict + whose values are always 1). + + labels -- a list of (x, y) pairs where x is either a token + number or a symbol number, and y is either None + or a string; the strings are keywords. The label + number is the index in this list; label numbers + are used to mark state transitions (arcs) in the + DFAs. + + start -- the number of the grammar's start symbol. + + keywords -- a dict mapping keyword strings to arc labels. + + tokens -- a dict mapping token numbers to arc labels. + + """ + + def __init__(self): + self.symbol2number = {} + self.number2symbol = {} + self.states = [] + self.dfas = {} + self.labels = [(0, "EMPTY")] + self.keywords = {} + self.tokens = {} + self.symbol2label = {} + self.start = 256 + + def dump(self, filename): + """Dump the grammar tables to a pickle file.""" + with open(filename, "wb") as f: + pickle.dump(self.__dict__, f, pickle.HIGHEST_PROTOCOL) + + def load(self, filename): + """Load the grammar tables from a pickle file.""" + with open(filename, "rb") as f: + d = pickle.load(f) + self.__dict__.update(d) + + def loads(self, pkl): + """Load the grammar tables from a pickle bytes object.""" + self.__dict__.update(pickle.loads(pkl)) + + def copy(self): + """ + Copy the grammar. + """ + new = self.__class__() + for dict_attr in ("symbol2number", "number2symbol", "dfas", "keywords", + "tokens", "symbol2label"): + setattr(new, dict_attr, getattr(self, dict_attr).copy()) + new.labels = self.labels[:] + new.states = self.states[:] + new.start = self.start + return new + + def report(self): + """Dump the grammar tables to standard output, for debugging.""" + from pprint import pprint + print("s2n") + pprint(self.symbol2number) + print("n2s") + pprint(self.number2symbol) + print("states") + pprint(self.states) + print("dfas") + pprint(self.dfas) + print("labels") + pprint(self.labels) + print("start", self.start) + + +# Map from operator to number (since tokenize doesn't do this) + +opmap_raw = """ +( LPAR +) RPAR +[ LSQB +] RSQB +: COLON +, COMMA +; SEMI ++ PLUS +- MINUS +* STAR +/ SLASH +| VBAR +& AMPER +< LESS +> GREATER += EQUAL +. DOT +% PERCENT +` BACKQUOTE +{ LBRACE +} RBRACE +@ AT +@= ATEQUAL +== EQEQUAL +!= NOTEQUAL +<> NOTEQUAL +<= LESSEQUAL +>= GREATEREQUAL +~ TILDE +^ CIRCUMFLEX +<< LEFTSHIFT +>> RIGHTSHIFT +** DOUBLESTAR ++= PLUSEQUAL +-= MINEQUAL +*= STAREQUAL +/= SLASHEQUAL +%= PERCENTEQUAL +&= AMPEREQUAL +|= VBAREQUAL +^= CIRCUMFLEXEQUAL +<<= LEFTSHIFTEQUAL +>>= RIGHTSHIFTEQUAL +**= DOUBLESTAREQUAL +// DOUBLESLASH +//= DOUBLESLASHEQUAL +-> RARROW +:= COLONEQUAL +""" + +opmap = {} +for line in opmap_raw.splitlines(): + if line: + op, name = line.split() + opmap[op] = getattr(token, name) diff --git a/python/extractor/blib2to3/pgen2/parse.py b/python/extractor/blib2to3/pgen2/parse.py new file mode 100644 index 00000000000..6bebdbba7e5 --- /dev/null +++ b/python/extractor/blib2to3/pgen2/parse.py @@ -0,0 +1,201 @@ +# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +"""Parser engine for the grammar tables generated by pgen. + +The grammar table must be loaded first. + +See Parser/parser.c in the Python distribution for additional info on +how this parsing engine works. + +""" + +# Local imports +from . import token + +class ParseError(Exception): + """Exception to signal the parser is stuck.""" + + def __init__(self, msg, type, value, context): + Exception.__init__(self, "%s: type=%r, value=%r, context=%r" % + (msg, type, value, context)) + self.msg = msg + self.type = type + self.value = value + self.context = context + +class Parser(object): + """Parser engine. + + The proper usage sequence is: + + p = Parser(grammar, [converter]) # create instance + p.setup([start]) # prepare for parsing + <for each input token>: + if p.addtoken(...): # parse a token; may raise ParseError + break + root = p.rootnode # root of abstract syntax tree + + A Parser instance may be reused by calling setup() repeatedly. + + A Parser instance contains state pertaining to the current token + sequence, and should not be used concurrently by different threads + to parse separate token sequences. + + See driver.py for how to get input tokens by tokenizing a file or + string. + + Parsing is complete when addtoken() returns True; the root of the + abstract syntax tree can then be retrieved from the rootnode + instance variable. When a syntax error occurs, addtoken() raises + the ParseError exception. There is no error recovery; the parser + cannot be used after a syntax error was reported (but it can be + reinitialized by calling setup()). + + """ + + def __init__(self, grammar, convert=None): + """Constructor. + + The grammar argument is a grammar.Grammar instance; see the + grammar module for more information. + + The parser is not ready yet for parsing; you must call the + setup() method to get it started. + + The optional convert argument is a function mapping concrete + syntax tree nodes to abstract syntax tree nodes. If not + given, no conversion is done and the syntax tree produced is + the concrete syntax tree. If given, it must be a function of + two arguments, the first being the grammar (a grammar.Grammar + instance), and the second being the concrete syntax tree node + to be converted. The syntax tree is converted from the bottom + up. + + A concrete syntax tree node is a (type, value, context, nodes) + tuple, where type is the node type (a token or symbol number), + value is None for symbols and a string for tokens, context is + None or an opaque value used for error reporting (typically a + (lineno, offset) pair), and nodes is a list of children for + symbols, and None for tokens. + + An abstract syntax tree node may be anything; this is entirely + up to the converter function. + + """ + self.grammar = grammar + self.convert = convert or (lambda grammar, node: node) + + def setup(self, start=None): + """Prepare for parsing. + + This *must* be called before starting to parse. + + The optional argument is an alternative start symbol; it + defaults to the grammar's start symbol. + + You can use a Parser instance to parse any number of programs; + each time you call setup() the parser is reset to an initial + state determined by the (implicit or explicit) start symbol. + + """ + if start is None: + start = self.grammar.start + # Each stack entry is a tuple: (dfa, state, node). + # A node is a tuple: (type, value, context, children), + # where children is a list of nodes or None, and context may be None. + newnode = (start, None, None, []) + stackentry = (self.grammar.dfas[start], 0, newnode) + self.stack = [stackentry] + self.rootnode = None + self.used_names = set() # Aliased to self.rootnode.used_names in pop() + + def addtoken(self, type, value, context): + """Add a token; return True iff this is the end of the program.""" + # Map from token to label + ilabel = self.classify(type, value, context) + # Loop until the token is shifted; may raise exceptions + while True: + dfa, state, node = self.stack[-1] + states, first = dfa + arcs = states[state] + # Look for a state with this label + for i, newstate in arcs: + t, v = self.grammar.labels[i] + if ilabel == i: + # Look it up in the list of labels + assert t < 256 + # Shift a token; we're done with it + self.shift(type, value, newstate, context) + # Pop while we are in an accept-only state + state = newstate + while states[state] == [(0, state)]: + self.pop() + if not self.stack: + # Done parsing! + return True + dfa, state, node = self.stack[-1] + states, first = dfa + # Done with this token + return False + elif t >= 256: + # See if it's a symbol and if we're in its first set + itsdfa = self.grammar.dfas[t] + itsstates, itsfirst = itsdfa + if ilabel in itsfirst: + # Push a symbol + self.push(t, self.grammar.dfas[t], newstate, context) + break # To continue the outer while loop + else: + if (0, state) in arcs: + # An accepting state, pop it and try something else + self.pop() + if not self.stack: + # Done parsing, but another token is input + raise ParseError("too much input", + type, value, context) + else: + # No success finding a transition + raise ParseError("bad input", type, value, context) + + def classify(self, type, value, context): + """Turn a token into a label. (Internal)""" + if type == token.NAME: + # Keep a listing of all used names + self.used_names.add(value) + # Check for reserved words + ilabel = self.grammar.keywords.get(value) + if ilabel is not None: + return ilabel + ilabel = self.grammar.tokens.get(type) + if ilabel is None: + raise ParseError("bad token", type, value, context) + return ilabel + + def shift(self, type, value, newstate, context): + """Shift a token. (Internal)""" + dfa, state, node = self.stack[-1] + newnode = (type, value, context, None) + newnode = self.convert(self.grammar, newnode) + if newnode is not None: + node[-1].append(newnode) + self.stack[-1] = (dfa, newstate, node) + + def push(self, type, newdfa, newstate, context): + """Push a nonterminal. (Internal)""" + dfa, state, node = self.stack[-1] + newnode = (type, None, context, []) + self.stack[-1] = (dfa, newstate, node) + self.stack.append((newdfa, 0, newnode)) + + def pop(self): + """Pop a nonterminal. (Internal)""" + popdfa, popstate, popnode = self.stack.pop() + newnode = self.convert(self.grammar, popnode) + if newnode is not None: + if self.stack: + dfa, state, node = self.stack[-1] + node[-1].append(newnode) + else: + self.rootnode = newnode + self.rootnode.used_names = self.used_names diff --git a/python/extractor/blib2to3/pgen2/pgen.py b/python/extractor/blib2to3/pgen2/pgen.py new file mode 100644 index 00000000000..297e7330cff --- /dev/null +++ b/python/extractor/blib2to3/pgen2/pgen.py @@ -0,0 +1,386 @@ +# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +# Pgen imports +from . import grammar, token, tokenize + +class PgenGrammar(grammar.Grammar): + pass + +class ParserGenerator(object): + + def __init__(self, filename, stream=None): + close_stream = None + if stream is None: + stream = open(filename) + close_stream = stream.close + self.filename = filename + self.stream = stream + self.generator = tokenize.generate_tokens(stream.readline) + self.gettoken() # Initialize lookahead + self.dfas, self.startsymbol = self.parse() + if close_stream is not None: + close_stream() + self.first = {} # map from symbol name to set of tokens + self.addfirstsets() + + def make_grammar(self): + c = PgenGrammar() + names = list(self.dfas.keys()) + names.sort() + names.remove(self.startsymbol) + names.insert(0, self.startsymbol) + for name in names: + i = 256 + len(c.symbol2number) + c.symbol2number[name] = i + c.number2symbol[i] = name + for name in names: + dfa = self.dfas[name] + states = [] + for state in dfa: + arcs = [] + for label, next in sorted(state.arcs.items()): + arcs.append((self.make_label(c, label), dfa.index(next))) + if state.isfinal: + arcs.append((0, dfa.index(state))) + states.append(arcs) + c.states.append(states) + c.dfas[c.symbol2number[name]] = (states, self.make_first(c, name)) + c.start = c.symbol2number[self.startsymbol] + return c + + def make_first(self, c, name): + rawfirst = self.first[name] + first = {} + for label in sorted(rawfirst): + ilabel = self.make_label(c, label) + ##assert ilabel not in first # XXX failed on <> ... != + first[ilabel] = 1 + return first + + def make_label(self, c, label): + # XXX Maybe this should be a method on a subclass of converter? + ilabel = len(c.labels) + if label[0].isalpha(): + # Either a symbol name or a named token + if label in c.symbol2number: + # A symbol name (a non-terminal) + if label in c.symbol2label: + return c.symbol2label[label] + else: + c.labels.append((c.symbol2number[label], None)) + c.symbol2label[label] = ilabel + return ilabel + else: + # A named token (NAME, NUMBER, STRING) + itoken = getattr(token, label, None) + assert isinstance(itoken, int), label + assert itoken in token.tok_name, label + if itoken in c.tokens: + return c.tokens[itoken] + else: + c.labels.append((itoken, None)) + c.tokens[itoken] = ilabel + return ilabel + else: + # Either a keyword or an operator + assert label[0] in ('"', "'"), label + value = eval(label) + if value[0].isalpha(): + # A keyword + if value in c.keywords: + return c.keywords[value] + else: + c.labels.append((token.NAME, value)) + c.keywords[value] = ilabel + return ilabel + else: + # An operator (any non-numeric token) + itoken = grammar.opmap[value] # Fails if unknown token + if itoken in c.tokens: + return c.tokens[itoken] + else: + c.labels.append((itoken, None)) + c.tokens[itoken] = ilabel + return ilabel + + def addfirstsets(self): + names = list(self.dfas.keys()) + names.sort() + for name in names: + if name not in self.first: + self.calcfirst(name) + #print name, self.first[name].keys() + + def calcfirst(self, name): + dfa = self.dfas[name] + self.first[name] = None # dummy to detect left recursion + state = dfa[0] + totalset = {} + overlapcheck = {} + for label, next in state.arcs.items(): + if label in self.dfas: + if label in self.first: + fset = self.first[label] + if fset is None: + raise ValueError("recursion for rule %r" % name) + else: + self.calcfirst(label) + fset = self.first[label] + totalset.update(fset) + overlapcheck[label] = fset + else: + totalset[label] = 1 + overlapcheck[label] = {label: 1} + inverse = {} + for label, itsfirst in overlapcheck.items(): + for symbol in itsfirst: + if symbol in inverse: + raise ValueError("rule %s is ambiguous; %s is in the" + " first sets of %s as well as %s" % + (name, symbol, label, inverse[symbol])) + inverse[symbol] = label + self.first[name] = totalset + + def parse(self): + dfas = {} + startsymbol = None + # MSTART: (NEWLINE | RULE)* ENDMARKER + while self.type != token.ENDMARKER: + while self.type == token.NEWLINE: + self.gettoken() + # RULE: NAME ':' RHS NEWLINE + name = self.expect(token.NAME) + self.expect(token.OP, ":") + a, z = self.parse_rhs() + self.expect(token.NEWLINE) + #self.dump_nfa(name, a, z) + dfa = self.make_dfa(a, z) + #self.dump_dfa(name, dfa) + oldlen = len(dfa) + self.simplify_dfa(dfa) + newlen = len(dfa) + dfas[name] = dfa + #print name, oldlen, newlen + if startsymbol is None: + startsymbol = name + return dfas, startsymbol + + def make_dfa(self, start, finish): + # To turn an NFA into a DFA, we define the states of the DFA + # to correspond to *sets* of states of the NFA. Then do some + # state reduction. Let's represent sets as dicts with 1 for + # values. + assert isinstance(start, NFAState) + assert isinstance(finish, NFAState) + def closure(state): + base = {} + addclosure(state, base) + return base + def addclosure(state, base): + assert isinstance(state, NFAState) + if state in base: + return + base[state] = 1 + for label, next in state.arcs: + if label is None: + addclosure(next, base) + states = [DFAState(closure(start), finish)] + for state in states: # NB states grows while we're iterating + arcs = {} + for nfastate in state.nfaset: + for label, next in nfastate.arcs: + if label is not None: + addclosure(next, arcs.setdefault(label, {})) + for label, nfaset in sorted(arcs.items()): + for st in states: + if st.nfaset == nfaset: + break + else: + st = DFAState(nfaset, finish) + states.append(st) + state.addarc(st, label) + return states # List of DFAState instances; first one is start + + def dump_nfa(self, name, start, finish): + print("Dump of NFA for", name) + todo = [start] + for i, state in enumerate(todo): + print(" State", i, state is finish and "(final)" or "") + for label, next in state.arcs: + if next in todo: + j = todo.index(next) + else: + j = len(todo) + todo.append(next) + if label is None: + print(" -> %d" % j) + else: + print(" %s -> %d" % (label, j)) + + def dump_dfa(self, name, dfa): + print("Dump of DFA for", name) + for i, state in enumerate(dfa): + print(" State", i, state.isfinal and "(final)" or "") + for label, next in sorted(state.arcs.items()): + print(" %s -> %d" % (label, dfa.index(next))) + + def simplify_dfa(self, dfa): + # This is not theoretically optimal, but works well enough. + # Algorithm: repeatedly look for two states that have the same + # set of arcs (same labels pointing to the same nodes) and + # unify them, until things stop changing. + + # dfa is a list of DFAState instances + changes = True + while changes: + changes = False + for i, state_i in enumerate(dfa): + for j in range(i+1, len(dfa)): + state_j = dfa[j] + if state_i == state_j: + #print " unify", i, j + del dfa[j] + for state in dfa: + state.unifystate(state_j, state_i) + changes = True + break + + def parse_rhs(self): + # RHS: ALT ('|' ALT)* + a, z = self.parse_alt() + if self.value != "|": + return a, z + else: + aa = NFAState() + zz = NFAState() + aa.addarc(a) + z.addarc(zz) + while self.value == "|": + self.gettoken() + a, z = self.parse_alt() + aa.addarc(a) + z.addarc(zz) + return aa, zz + + def parse_alt(self): + # ALT: ITEM+ + a, b = self.parse_item() + while (self.value in ("(", "[") or + self.type in (token.NAME, token.STRING)): + c, d = self.parse_item() + b.addarc(c) + b = d + return a, b + + def parse_item(self): + # ITEM: '[' RHS ']' | ATOM ['+' | '*'] + if self.value == "[": + self.gettoken() + a, z = self.parse_rhs() + self.expect(token.OP, "]") + a.addarc(z) + return a, z + else: + a, z = self.parse_atom() + value = self.value + if value not in ("+", "*"): + return a, z + self.gettoken() + z.addarc(a) + if value == "+": + return a, z + else: + return a, a + + def parse_atom(self): + # ATOM: '(' RHS ')' | NAME | STRING + if self.value == "(": + self.gettoken() + a, z = self.parse_rhs() + self.expect(token.OP, ")") + return a, z + elif self.type in (token.NAME, token.STRING): + a = NFAState() + z = NFAState() + a.addarc(z, self.value) + self.gettoken() + return a, z + else: + self.raise_error("expected (...) or NAME or STRING, got %s/%s", + self.type, self.value) + + def expect(self, type, value=None): + if self.type != type or (value is not None and self.value != value): + self.raise_error("expected %s/%s, got %s/%s", + type, value, self.type, self.value) + value = self.value + self.gettoken() + return value + + def gettoken(self): + tup = next(self.generator) + while tup[0] in (tokenize.COMMENT, tokenize.NL): + tup = next(self.generator) + self.type, self.value, self.begin, self.end, self.line = tup + #print token.tok_name[self.type], repr(self.value) + + def raise_error(self, msg, *args): + if args: + try: + msg = msg % args + except: + msg = " ".join([msg] + list(map(str, args))) + raise SyntaxError(msg, (self.filename, self.end[0], + self.end[1], self.line)) + +class NFAState(object): + + def __init__(self): + self.arcs = [] # list of (label, NFAState) pairs + + def addarc(self, next, label=None): + assert label is None or isinstance(label, str) + assert isinstance(next, NFAState) + self.arcs.append((label, next)) + +class DFAState(object): + + def __init__(self, nfaset, final): + assert isinstance(nfaset, dict) + assert isinstance(next(iter(nfaset)), NFAState) + assert isinstance(final, NFAState) + self.nfaset = nfaset + self.isfinal = final in nfaset + self.arcs = {} # map from label to DFAState + + def addarc(self, next, label): + assert isinstance(label, str) + assert label not in self.arcs + assert isinstance(next, DFAState) + self.arcs[label] = next + + def unifystate(self, old, new): + for label, next in self.arcs.items(): + if next is old: + self.arcs[label] = new + + def __eq__(self, other): + # Equality test -- ignore the nfaset instance variable + assert isinstance(other, DFAState) + if self.isfinal != other.isfinal: + return False + # Can't just return self.arcs == other.arcs, because that + # would invoke this method recursively, with cycles... + if len(self.arcs) != len(other.arcs): + return False + for label, next in self.arcs.items(): + if next is not other.arcs.get(label): + return False + return True + + __hash__ = None # For Py3 compatibility. + +def generate_grammar(filename, stream=None): + p = ParserGenerator(filename, stream) + return p.make_grammar() diff --git a/python/extractor/blib2to3/pgen2/token.py b/python/extractor/blib2to3/pgen2/token.py new file mode 100644 index 00000000000..73d10e758c2 --- /dev/null +++ b/python/extractor/blib2to3/pgen2/token.py @@ -0,0 +1,91 @@ +"""Token constants (from "token.h").""" + +# Taken from Python (r53757) and modified to include some tokens +# originally monkeypatched in by pgen2.tokenize + +#--start constants-- +ENDMARKER = 0 +NAME = 1 +NUMBER = 2 +STRING = 3 +NEWLINE = 4 +INDENT = 5 +DEDENT = 6 +LPAR = 7 +RPAR = 8 +LSQB = 9 +RSQB = 10 +COLON = 11 +COMMA = 12 +SEMI = 13 +PLUS = 14 +MINUS = 15 +STAR = 16 +SLASH = 17 +VBAR = 18 +AMPER = 19 +LESS = 20 +GREATER = 21 +EQUAL = 22 +DOT = 23 +PERCENT = 24 +BACKQUOTE = 25 +LBRACE = 26 +RBRACE = 27 +EQEQUAL = 28 +NOTEQUAL = 29 +LESSEQUAL = 30 +GREATEREQUAL = 31 +TILDE = 32 +CIRCUMFLEX = 33 +LEFTSHIFT = 34 +RIGHTSHIFT = 35 +DOUBLESTAR = 36 +PLUSEQUAL = 37 +MINEQUAL = 38 +STAREQUAL = 39 +SLASHEQUAL = 40 +PERCENTEQUAL = 41 +AMPEREQUAL = 42 +VBAREQUAL = 43 +CIRCUMFLEXEQUAL = 44 +LEFTSHIFTEQUAL = 45 +RIGHTSHIFTEQUAL = 46 +DOUBLESTAREQUAL = 47 +DOUBLESLASH = 48 +DOUBLESLASHEQUAL = 49 +AT = 50 +ATEQUAL = 51 +OP = 52 +COMMENT = 53 +NL = 54 +RARROW = 55 +AWAIT = 56 +ASYNC = 57 +DOLLARNAME = 58 +FSTRING_START = 59 +FSTRING_MID = 60 +FSTRING_END = 61 +CONVERSION = 62 +COLONEQUAL = 63 +FSTRING_SPEC = 64 +ILLEGALINDENT = 65 +ERRORTOKEN = 66 +N_TOKENS = 67 +NT_OFFSET = 256 +#--end constants-- + +tok_name = {} +for _name, _value in list(globals().items()): + if type(_value) is type(0): + tok_name[_value] = _name + + +def ISTERMINAL(x): + return x < NT_OFFSET + +def ISNONTERMINAL(x): + return x >= NT_OFFSET + +def ISEOF(x): + return x == ENDMARKER diff --git a/python/extractor/blib2to3/pgen2/tokenize.py b/python/extractor/blib2to3/pgen2/tokenize.py new file mode 100644 index 00000000000..0d72e69ea13 --- /dev/null +++ b/python/extractor/blib2to3/pgen2/tokenize.py @@ -0,0 +1,509 @@ +# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Python Software Foundation. +# All rights reserved. + +"""Tokenization help for Python programs. + +generate_tokens(readline) is a generator that breaks a stream of +text into Python tokens. It accepts a readline-like method which is called +repeatedly to get the next line of input (or "" for EOF). It generates +5-tuples with these members: + + the token type (see token.py) + the token (a string) + the starting (row, column) indices of the token (a 2-tuple of ints) + the ending (row, column) indices of the token (a 2-tuple of ints) + the original line (string) + +It is designed to match the working of the Python tokenizer exactly, except +that it produces COMMENT tokens for comments and gives type OP for all +operators + +Older entry points + tokenize_loop(readline, tokeneater) + tokenize(readline, tokeneater=printtoken) +are the same, except instead of generating tokens, tokeneater is a callback +function to which the 5 fields described above are passed as 5 arguments, +each time a new token is found.""" + +__author__ = 'Ka-Ping Yee <ping@lfw.org>' +__credits__ = \ + 'GvR, ESR, Tim Peters, Thomas Wouters, Fred Drake, Skip Montanaro' + +import re +from codecs import BOM_UTF8, lookup +from blib2to3.pgen2.token import * +import sys + +from . import token +__all__ = [x for x in dir(token) if x[0] != '_'] + ["tokenize", + "generate_tokens", "untokenize"] +del token + +try: + bytes +except NameError: + # Support bytes type in Python <= 2.5, so 2to3 turns itself into + # valid Python 3 code. + bytes = str + +def group(*choices): return '(' + '|'.join(choices) + ')' +def any(*choices): return group(*choices) + '*' +def maybe(*choices): return group(*choices) + '?' +def _combinations(*l): + return set( + x + y for x in l for y in l + ("",) if x.lower() != y.lower() + ) + +Whitespace = r'[ \f\t]*' +Comment = r'#[^\r\n]*' +Ignore = Whitespace + any(r'\\\r?\n' + Whitespace) + maybe(Comment) +Name = r'\w+' # this is invalid but it's fine because Name comes after Number in all groups +DollarName = r'\$\w+' + +Binnumber = r'0[bB]_?[01]+(?:_[01]+)*' +Hexnumber = r'0[xX]_?[\da-fA-F]+(?:_[\da-fA-F]+)*[lL]?' +Octnumber = r'0[oO]?_?[0-7]+(?:_[0-7]+)*[lL]?' +Decnumber = group(r'[1-9]\d*(?:_\d+)*[lL]?', '0[lL]?') +Intnumber = group(Binnumber, Hexnumber, Octnumber, Decnumber) +Exponent = r'[eE][-+]?\d+(?:_\d+)*' +Pointfloat = group(r'\d+(?:_\d+)*\.(?:\d+(?:_\d+)*)?', r'\.\d+(?:_\d+)*') + maybe(Exponent) +Expfloat = r'\d+(?:_\d+)*' + Exponent +Floatnumber = group(Pointfloat, Expfloat) +Imagnumber = group(r'\d+(?:_\d+)*[jJ]', Floatnumber + r'[jJ]') +Number = group(Imagnumber, Floatnumber, Intnumber) + +# Tail end of ' string. +Single = r"[^'\\]*(?:\\.[^'\\]*)*'" +# Tail end of " string. +Double = r'[^"\\]*(?:\\.[^"\\]*)*"' +# Tail end of ''' string. +Single3 = r"[^'\\]*(?:(?:\\.|'(?!''))[^'\\]*)*'''" +# Tail end of """ string. +Double3 = r'[^"\\]*(?:(?:\\.|"(?!""))[^"\\]*)*"""' +_litprefix = r"(?:[uUrRbBfF]|[rR][fFbB]|[fFbBuU][rR])?" +Triple = group(_litprefix + "'''", _litprefix + '"""') +# Single-line ' or " string. +String = group(_litprefix + r"'[^\n'\\]*(?:\\.[^\n'\\]*)*'", + _litprefix + r'"[^\n"\\]*(?:\\.[^\n"\\]*)*"') + +# Because of leftmost-then-longest match semantics, be sure to put the +# longest operators first (e.g., if = came before ==, == would get +# recognized as two instances of =). +Operator = group(r"\*\*=?", r">>=?", r"<<=?", r"<>", r"!=", + r"//=?", r"->", + r"[+\-*/%&@|^=<>]=?", + r"~") + +Bracket = '[][(){}]' +Special = group(r'\r?\n', r'[:;.,`@]') +Funny = group(Operator, Bracket, Special) + +PlainToken = group(Number, Funny, String, Name, DollarName) +Token = Ignore + PlainToken + +# First (or only) line of ' or " string. +ContStr = group(_litprefix + r"'[^\n'\\]*(?:\\.[^\n'\\]*)*" + + group("'", r'\\\r?\n'), + _litprefix + r'"[^\n"\\]*(?:\\.[^\n"\\]*)*' + + group('"', r'\\\r?\n')) +PseudoExtras = group(r'\\\r?\n', Comment, Triple) +PseudoToken = Whitespace + group(PseudoExtras, Number, Funny, ContStr, Name, DollarName) + +tokenprog = re.compile(Token, re.UNICODE) +pseudoprog = re.compile(PseudoToken, re.UNICODE) +single3prog = re.compile(Single3) +double3prog = re.compile(Double3) + +_strprefixes = ( + _combinations('r', 'R', 'f', 'F') | + _combinations('r', 'R', 'b', 'B') | + {'u', 'U', 'ur', 'uR', 'Ur', 'UR'} +) + +endprogs = {"'": re.compile(Single), '"': re.compile(Double), + "'''": single3prog, '"""': double3prog, + } +endprogs.update({prefix+"'''": single3prog for prefix in _strprefixes}) +endprogs.update({prefix+'"""': double3prog for prefix in _strprefixes}) +endprogs.update({prefix: None for prefix in _strprefixes}) + +triple_quoted = ( + {"'''", '"""'} | + {prefix+"'''" for prefix in _strprefixes} | + {prefix+'"""' for prefix in _strprefixes} +) +single_quoted = ( + {"'", '"'} | + {prefix+"'" for prefix in _strprefixes} | + {prefix+'"' for prefix in _strprefixes} +) + +tabsize = 8 + +class TokenError(Exception): pass + +class StopTokenizing(Exception): pass + +def printtoken(type, token, xxx_todo_changeme, xxx_todo_changeme1, line): # for testing + (srow, scol) = xxx_todo_changeme + (erow, ecol) = xxx_todo_changeme1 + print("%d,%d-%d,%d:\t%s\t%s" % \ + (srow, scol, erow, ecol, tok_name[type], repr(token))) + +def tokenize(readline, tokeneater=printtoken): + """ + The tokenize() function accepts two parameters: one representing the + input stream, and one providing an output mechanism for tokenize(). + + The first parameter, readline, must be a callable object which provides + the same interface as the readline() method of built-in file objects. + Each call to the function should return one line of input as a string. + + The second parameter, tokeneater, must also be a callable object. It is + called once for each token, with five arguments, corresponding to the + tuples generated by generate_tokens(). + """ + try: + tokenize_loop(readline, tokeneater) + except StopTokenizing: + pass + +# backwards compatible interface +def tokenize_loop(readline, tokeneater): + for token_info in generate_tokens(readline): + tokeneater(*token_info) + +if sys.version_info > (3,): + isidentifier = str.isidentifier +else: + IDENTIFIER_RE = re.compile(r"^[^\d\W]\w*$", re.UNICODE) + + def isidentifier(s): + return bool(IDENTIFIER_RE.match(s)) + +ASCII = re.ASCII if sys.version_info > (3,) else 0 +cookie_re = re.compile(r'^[ \t\f]*#.*?coding[:=][ \t]*([-\w.]+)', ASCII) +blank_re = re.compile(br'^[ \t\f]*(?:[#\r\n]|$)', ASCII) + +def _get_normal_name(orig_enc): + """Imitates get_normal_name in tokenizer.c.""" + # Only care about the first 12 characters. + enc = orig_enc[:12].lower().replace("_", "-") + if enc == "utf-8" or enc.startswith("utf-8-"): + return "utf-8" + if enc in ("latin-1", "iso-8859-1", "iso-latin-1") or \ + enc.startswith(("latin-1-", "iso-8859-1-", "iso-latin-1-")): + return "iso-8859-1" + return orig_enc + +def detect_encoding(readline): + """ + The detect_encoding() function is used to detect the encoding that should + be used to decode a Python source file. It requires one argument, readline, + in the same way as the tokenize() generator. + + It will call readline a maximum of twice, and return the encoding used + (as a string) and a list of any lines (left as bytes) it has read + in. + + It detects the encoding from the presence of a utf-8 bom or an encoding + cookie as specified in pep-0263. If both a bom and a cookie are present, but + disagree, a SyntaxError will be raised. If the encoding cookie is an invalid + charset, raise a SyntaxError. Note that if a utf-8 bom is found, + 'utf-8-sig' is returned. + + If no encoding is specified, then the default of 'utf-8' will be returned. + """ + bom_found = False + encoding = None + default = 'utf-8' + def read_or_stop(): + try: + return readline() + except StopIteration: + return bytes() + + def find_cookie(line): + try: + line_string = line.decode('ascii') + except UnicodeDecodeError: + return None + match = cookie_re.match(line_string) + if not match: + return None + encoding = _get_normal_name(match.group(1)) + try: + codec = lookup(encoding) + except LookupError: + # This behaviour mimics the Python interpreter + raise SyntaxError("unknown encoding: " + encoding) + + if bom_found: + if codec.name != 'utf-8': + # This behaviour mimics the Python interpreter + raise SyntaxError('encoding problem: utf-8') + encoding += '-sig' + return encoding + + first = read_or_stop() + if first.startswith(BOM_UTF8): + bom_found = True + first = first[3:] + default = 'utf-8-sig' + if not first: + return default, [] + + encoding = find_cookie(first) + if encoding: + return encoding, [first] + if not blank_re.match(first): + return default, [first] + + second = read_or_stop() + if not second: + return default, [first] + + encoding = find_cookie(second) + if encoding: + return encoding, [first, second] + + return default, [first, second] + + +def generate_tokens(readline): + """ + The generate_tokens() generator requires one argument, readline, which + must be a callable object which provides the same interface as the + readline() method of built-in file objects. Each call to the function + should return one line of input as a string. Alternately, readline + can be a callable function terminating with StopIteration: + readline = open(myfile).next # Example of alternate readline + + The generator produces 5-tuples with these members: the token type; the + token string; a 2-tuple (srow, scol) of ints specifying the row and + column where the token begins in the source; a 2-tuple (erow, ecol) of + ints specifying the row and column where the token ends in the source; + and the line on which the token was found. The line passed is the + logical line; continuation lines are included. + """ + lnum = parenlev = continued = 0 + numchars = '0123456789' + contstr, needcont = '', 0 + contline = None + indents = [0] + + # 'stashed' and 'async_*' are used for async/await parsing + stashed = None + async_def = False + async_def_indent = 0 + async_def_nl = False + + while 1: # loop over lines in stream + try: + line = readline() + except StopIteration: + line = '' + lnum = lnum + 1 + pos, max = 0, len(line) + + if contstr: # continued string + if not line: + raise TokenError("EOF in multi-line string", strstart) + endmatch = endprog.match(line) + if endmatch: + pos = end = endmatch.end(0) + yield (STRING, contstr + line[:end], + strstart, (lnum, end), contline + line) + contstr, needcont = '', 0 + contline = None + elif needcont and line[-2:] != '\\\n' and line[-3:] != '\\\r\n': + yield (ERRORTOKEN, contstr + line, + strstart, (lnum, len(line)), contline) + contstr = '' + contline = None + continue + else: + contstr = contstr + line + contline = contline + line + continue + + elif parenlev == 0 and not continued: # new statement + if not line: break + column = 0 + while pos < max: # measure leading whitespace + if line[pos] == ' ': column = column + 1 + elif line[pos] == '\t': column = (column//tabsize + 1)*tabsize + elif line[pos] == '\f': column = 0 + else: break + pos = pos + 1 + if pos == max: break + + if stashed: + yield stashed + stashed = None + + if line[pos] in '\r\n': # skip blank lines + yield (NL, line[pos:], (lnum, pos), (lnum, len(line)), line) + continue + + if line[pos] == '#': # skip comments + comment_token = line[pos:].rstrip('\r\n') + nl_pos = pos + len(comment_token) + yield (COMMENT, comment_token, + (lnum, pos), (lnum, pos + len(comment_token)), line) + yield (NL, line[nl_pos:], + (lnum, nl_pos), (lnum, len(line)), line) + continue + + if column > indents[-1]: # count indents + indents.append(column) + yield (INDENT, line[:pos], (lnum, 0), (lnum, pos), line) + + while column < indents[-1]: # count dedents + if column not in indents: + raise IndentationError( + "unindent does not match any outer indentation level", + ("<tokenize>", lnum, pos, line)) + indents = indents[:-1] + + if async_def and async_def_indent >= indents[-1]: + async_def = False + async_def_nl = False + async_def_indent = 0 + + yield (DEDENT, '', (lnum, pos), (lnum, pos), line) + + if async_def and async_def_nl and async_def_indent >= indents[-1]: + async_def = False + async_def_nl = False + async_def_indent = 0 + + else: # continued statement + if not line: + raise TokenError("EOF in multi-line statement", (lnum, 0)) + continued = 0 + + while pos < max: + pseudomatch = pseudoprog.match(line, pos) + if pseudomatch: # scan for tokens + start, end = pseudomatch.span(1) + spos, epos, pos = (lnum, start), (lnum, end), end + token, initial = line[start:end], line[start] + + if initial in numchars or \ + (initial == '.' and token != '.'): # ordinary number + yield (NUMBER, token, spos, epos, line) + elif initial in '\r\n': + newline = NEWLINE + if parenlev > 0: + newline = NL + elif async_def: + async_def_nl = True + if stashed: + yield stashed + stashed = None + yield (newline, token, spos, epos, line) + + elif initial == '#': + assert not token.endswith("\n") + if stashed: + yield stashed + stashed = None + yield (COMMENT, token, spos, epos, line) + elif token in triple_quoted: + endprog = endprogs[token] + endmatch = endprog.match(line, pos) + if endmatch: # all on one line + pos = endmatch.end(0) + token = line[start:pos] + if stashed: + yield stashed + stashed = None + yield (STRING, token, spos, (lnum, pos), line) + else: + strstart = (lnum, start) # multiple lines + contstr = line[start:] + contline = line + break + elif initial in single_quoted or \ + token[:2] in single_quoted or \ + token[:3] in single_quoted: + if token[-1] == '\n': # continued string + strstart = (lnum, start) + endprog = (endprogs[initial] or endprogs[token[1]] or + endprogs[token[2]]) + contstr, needcont = line[start:], 1 + contline = line + break + else: # ordinary string + if stashed: + yield stashed + stashed = None + yield (STRING, token, spos, epos, line) + elif isidentifier(initial): # ordinary name + if token in ('async', 'await'): + if async_def: + yield (ASYNC if token == 'async' else AWAIT, + token, spos, epos, line) + continue + + tok = (NAME, token, spos, epos, line) + if token == 'async' and not stashed: + stashed = tok + continue + + if token in ('def', 'for'): + if (stashed + and stashed[0] == NAME + and stashed[1] == 'async'): + + if token == 'def': + async_def = True + async_def_indent = indents[-1] + + yield (ASYNC, stashed[1], + stashed[2], stashed[3], + stashed[4]) + stashed = None + + if stashed: + yield stashed + stashed = None + + yield tok + elif initial == '\\': # continued stmt + # This yield is new; needed for better idempotency: + if stashed: + yield stashed + stashed = None + yield (NL, token, spos, (lnum, pos), line) + continued = 1 + elif initial == '$': + if stashed: + yield stashed + stashed = None + yield (DOLLARNAME, token, spos, epos, line) + else: + if initial in '([{': parenlev = parenlev + 1 + elif initial in ')]}': parenlev = parenlev - 1 + if stashed: + yield stashed + stashed = None + yield (OP, token, spos, epos, line) + else: + yield (ERRORTOKEN, line[pos], + (lnum, pos), (lnum, pos+1), line) + pos = pos + 1 + + if stashed: + yield stashed + stashed = None + + for indent in indents[1:]: # pop remaining indent levels + yield (DEDENT, '', (lnum, 0), (lnum, 0), '') + yield (ENDMARKER, '', (lnum, 0), (lnum, 0), '') + +if __name__ == '__main__': # testing + import sys + if len(sys.argv) > 1: tokenize(open(sys.argv[1]).readline) + else: tokenize(sys.stdin.readline) diff --git a/python/extractor/blib2to3/pygram.py b/python/extractor/blib2to3/pygram.py new file mode 100644 index 00000000000..1602d536893 --- /dev/null +++ b/python/extractor/blib2to3/pygram.py @@ -0,0 +1,56 @@ +# Copyright 2006 Google, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +"""Export the Python grammar and symbols.""" + +# Python imports +import os + +# Local imports +from .pgen2 import token +from .pgen2 import driver + +# The grammar file +_GRAMMAR_FILE = "Grammar.txt" + + +class Symbols(object): + + def __init__(self, grammar): + """Initializer. + + Creates an attribute for each grammar symbol (nonterminal), + whose value is the symbol's type (an int >= 256). + """ + for name, symbol in grammar.symbol2number.items(): + setattr(self, name, symbol) + + +def initialize(cache_dir=None): + global python2_grammar + global python2_grammar_no_print_statement + global python3_grammar + global python3_grammar_no_async + global python_symbols + + python_grammar = driver.load_grammar("blib2to3", _GRAMMAR_FILE) + python_symbols = Symbols(python_grammar) + + # Python 2 + python2_grammar = python_grammar.copy() + del python2_grammar.keywords["async"] + del python2_grammar.keywords["await"] + + # Python 2 + from __future__ import print_function + python2_grammar_no_print_statement = python2_grammar.copy() + del python2_grammar_no_print_statement.keywords["print"] + + # Python 3 + python3_grammar = python_grammar + del python3_grammar.keywords["print"] + del python3_grammar.keywords["exec"] + + #Python 3 wihtout async or await + python3_grammar_no_async = python3_grammar.copy() + del python3_grammar_no_async.keywords["async"] + del python3_grammar_no_async.keywords["await"] diff --git a/python/extractor/blib2to3/pytree.py b/python/extractor/blib2to3/pytree.py new file mode 100644 index 00000000000..71724b263d3 --- /dev/null +++ b/python/extractor/blib2to3/pytree.py @@ -0,0 +1,29 @@ +# Copyright 2006 Google, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +""" +Python parse tree definitions. + +This is a very concrete parse tree; we need to keep every token and +even the comments and whitespace between tokens. + +There's also a pattern matching implementation here. +""" + +__author__ = "Guido van Rossum <guido@python.org>" + +import sys +from io import StringIO + +HUGE = 0x7FFFFFFF # maximum repeat count, default max + +_type_reprs = {} +def type_repr(type_num): + global _type_reprs + if not _type_reprs: + from .pygram import python_symbols + # printing tokens is possible but not as useful + # from .pgen2 import token // token.__dict__.items(): + for name, val in python_symbols.__dict__.items(): + if type(val) == int: _type_reprs[val] = name + return _type_reprs.setdefault(type_num, type_num) diff --git a/python/extractor/buildtools/__init__.py b/python/extractor/buildtools/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/buildtools/auto_install.py b/python/extractor/buildtools/auto_install.py new file mode 100644 index 00000000000..197f994db6c --- /dev/null +++ b/python/extractor/buildtools/auto_install.py @@ -0,0 +1,106 @@ +#!/usr/bin/python3 + +import sys +import logging +import os +import os.path +import re + +from packaging.specifiers import SpecifierSet +from packaging.version import Version + +import buildtools.semmle.requirements as requirements + +logging.basicConfig(level=logging.WARNING) + + +def pip_install(req, venv, dependencies=True, wheel=True): + venv.upgrade_pip() + tmp = requirements.save_to_file([req]) + #Install the requirements using the venv python + args = [ "install", "-r", tmp] + if dependencies: + print("Installing %s with dependencies." % req) + elif wheel: + print("Installing %s without dependencies." % req) + args += [ "--no-deps"] + else: + print("Installing %s without dependencies or wheel." % req) + args += [ "--no-deps", "--no-binary", ":all:"] + print("Calling " + " ".join(args)) + venv.pip(args) + os.remove(tmp) + +def restrict_django(reqs): + for req in reqs: + if sys.version_info[0] < 3 and req.name.lower() == "django": + if Version("2") in req.specifier: + req.specifier = SpecifierSet("<2") + return reqs + +ignored_packages = [ + "pyobjc-.*", + "pypiwin32", + "frida", + "pyopenssl", # Installed by pip. Don't mess with its version. + "wxpython", # Takes forever to compile all the C code. + "cryptography", #Installed by pyOpenSSL and thus by pip. Don't mess with its version. + "psycopg2", #psycopg2 version 2.6 fails to install. +] + +if os.name != "nt": + ignored_packages.append("pywin32") #Only works on Windows + +ignored_package_regex = re.compile("|".join(ignored_packages)) + +def non_ignored(reqs): + filtered_reqs = [] + for req in reqs: + if ignored_package_regex.match(req.name.lower()) is not None: + logging.info("Package %s is ignored. Skipping." % req.name) + else: + filtered_reqs += [req] + return filtered_reqs + +def try_install_with_deps(req, venv): + try: + pip_install(req, venv, dependencies=True) + except Exception as ex: + logging.warn("Failed to install all dependencies for " + req.name) + logging.info(ex) + try: + pip_install(req, venv, dependencies = False) + except Exception: + pip_install(req, venv, dependencies = False, wheel = False) + +def install(reqs, venv): + '''Attempt to install a sufficient and stable set of dependencies from the requirements.txt file. + First of all we 'clean' the requirements, removing contradictory version numbers. + Then we attempt to install the restricted version of each dependency, and , should that fail, + we install the unrestricted version. If that fails, the whole installation fails. + Once the immediate dependencies are installed, we then (attempt to ) install the dependencies. + Returns True if installation was successful. False otherwise. + + `reqs` should be a string containing all requirements separated by newlines or a list of + strings with each string being a requirement. + ''' + if isinstance(reqs, str): + reqs = reqs.split("\n") + reqs = requirements.parse(reqs) + reqs = restrict_django(reqs) + reqs = non_ignored(reqs) + cleaned = requirements.clean(reqs) + restricted = requirements.restrict(reqs) + for i, req in enumerate(restricted): + try: + try_install_with_deps(req, venv) + except Exception as ex1: + try: + try_install_with_deps(cleaned[i], venv) + except Exception as ex2: + logging.error("Failed to install " + req.name) + logging.warning(ex2) + return False + logging.info("Failed to install restricted form of " + req.name) + logging.info(ex1) + return True diff --git a/python/extractor/buildtools/discover.py b/python/extractor/buildtools/discover.py new file mode 100644 index 00000000000..b938d92794a --- /dev/null +++ b/python/extractor/buildtools/discover.py @@ -0,0 +1,65 @@ +import sys +import os + +from buildtools import version + +DEFAULT_VERSION = 3 + +def get_relative_root(root_identifiers): + if any([os.path.exists(identifier) for identifier in root_identifiers]): + print("Source root appears to be the real root.") + return "." + + found = set() + for directory in next(os.walk("."))[1]: + if any([os.path.exists(os.path.join(directory, identifier)) for identifier in root_identifiers]): + found.add(directory) + if not found: + print("No directories containing root identifiers were found. Returning working directory as root.") + return "." + if len(found) > 1: + print("Multiple possible root directories found. Returning working directory as root.") + return "." + + root = found.pop() + print("'%s' appears to be the root." % root) + return root + +def get_root(*root_identifiers): + return os.path.abspath(get_relative_root(root_identifiers)) + +REQUIREMENTS_TAG = "LGTM_PYTHON_SETUP_REQUIREMENTS_FILES" + +def find_requirements(dir): + if REQUIREMENTS_TAG in os.environ: + val = os.environ[REQUIREMENTS_TAG] + if val == "false": + return [] + paths = [ os.path.join(dir, line.strip()) for line in val.splitlines() ] + for p in paths: + if not os.path.exists(p): + raise IOError(p + " not found") + return paths + candidates = ["requirements.txt", "test-requirements.txt"] + return [ path if os.path.exists(path) else "" for path in [ os.path.join(dir, file) for file in candidates] ] + +def discover(default_version=DEFAULT_VERSION): + """Discover things about the Python checkout and return a version, root, requirement-files triple.""" + root = get_root("requirements.txt", "setup.py") + v = version.best_version(root, default_version) + # Unify the requirements or just get path to requirements... + requirement_files = find_requirements(root) + return v, root, requirement_files + +def get_version(default_version=DEFAULT_VERSION): + root = get_root("requirements.txt", "setup.py") + return version.best_version(root, default_version) + +def main(): + if len(sys.argv) > 1: + print(discover(int(sys.argv[1]))) + else: + print(discover()) + +if __name__ == "__main__": + main() diff --git a/python/extractor/buildtools/helper.py b/python/extractor/buildtools/helper.py new file mode 100644 index 00000000000..c1676ed1b4c --- /dev/null +++ b/python/extractor/buildtools/helper.py @@ -0,0 +1,16 @@ +import os +import traceback +import re + + +SCRIPTDIR = os.path.split(os.path.dirname(__file__))[1] + + +def print_exception_indented(opt=None): + exc_text = traceback.format_exc() + for line in exc_text.splitlines(): + # remove path information that might be sensitive + # for example, in the .pyc files for Python 2, a traceback would contain + # /home/rasmus/code/target/thirdparty/python/build/extractor-python/buildtools/install.py + line = re.sub(r'File \".*' + SCRIPTDIR + r'(.*)\",', r'File <'+ SCRIPTDIR + r'\1>', line) + print(' ' + line) diff --git a/python/extractor/buildtools/index.py b/python/extractor/buildtools/index.py new file mode 100644 index 00000000000..10521868313 --- /dev/null +++ b/python/extractor/buildtools/index.py @@ -0,0 +1,429 @@ +import sys +import os +import subprocess +import csv + +if sys.version_info < (3,): + from urlparse import urlparse + from urllib import url2pathname +else: + from urllib.parse import urlparse + from urllib.request import url2pathname + +from buildtools import discover +from buildtools import install +from buildtools.version import executable, extractor_executable + + +INCLUDE_TAG = "LGTM_INDEX_INCLUDE" +EXCLUDE_TAG = "LGTM_INDEX_EXCLUDE" +FILTER_TAG = "LGTM_INDEX_FILTERS" +PATH_TAG = "LGTM_INDEX_IMPORT_PATH" +REPO_FOLDERS_TAG = "LGTM_REPOSITORY_FOLDERS_CSV" +REPO_EXCLUDE_KINDS = "metadata", "external" + +# These are the levels that the CodeQL CLI supports, in order of increasing verbosity. +CLI_LOGGING_LEVELS = ['off', 'errors', 'warnings', 'progress', 'progress+', 'progress++', 'progress+++'] + +# These are the verbosity levels used internally in the extractor. The indices of these levels +# should match up with the corresponding constants in the semmle.logging module. +EXTRACTOR_LOGGING_LEVELS = ['off', 'errors', 'warnings', 'info', 'debug', 'trace'] + +def trap_cache(): + return os.path.join(os.environ["LGTM_WORKSPACE"], "trap_cache") + +def split_into_options(lines, opt): + opts = [] + for line in lines.split("\n"): + line = line.strip() + if line: + opts.append(opt) + opts.append(line) + return opts + +def get_include_options(): + if INCLUDE_TAG in os.environ: + return split_into_options(os.environ[INCLUDE_TAG], "-R") + else: + src = os.environ["LGTM_SRC"] + return [ "-R", src] + +def get_exclude_options(): + options = [] + if EXCLUDE_TAG in os.environ: + options.extend(split_into_options(os.environ[EXCLUDE_TAG], "-Y")) + if REPO_FOLDERS_TAG not in os.environ: + return options + with open(os.environ[REPO_FOLDERS_TAG]) as csv_file: + csv_reader = csv.reader(csv_file) + next(csv_reader) # discard header + for kind, url in csv_reader: + if kind not in REPO_EXCLUDE_KINDS: + continue + try: + path = url2pathname(urlparse(url).path) + except: + print("Unable to parse '" + url + "' as file url.") + else: + options.append("-Y") + options.append(path) + return options + +def get_filter_options(): + if FILTER_TAG in os.environ: + return split_into_options(os.environ[FILTER_TAG], "--filter") + else: + return [] + +def get_path_options(version): + # We want to stop extracting libraries, and only extract the code that is in the + # repo. While in the transition period for stopping to install dependencies in the + # codeql-action, we will need to be able to support both old and new behavior. + # + # Like PYTHONUNBUFFERED for Python, we treat any non-empty string as meaning the + # flag is enabled. + # https://docs.python.org/3/using/cmdline.html#envvar-PYTHONUNBUFFERED + if os.environ.get("CODEQL_EXTRACTOR_PYTHON_DISABLE_LIBRARY_EXTRACTION"): + return [] + + # Not extracting dependencies will be default in CodeQL CLI release 2.16.0. Until + # 2.17.0, we provide an escape hatch to get the old behavior. + force_enable_envvar_name = "CODEQL_EXTRACTOR_PYTHON_FORCE_ENABLE_LIBRARY_EXTRACTION_UNTIL_2_17_0" + if os.environ.get(force_enable_envvar_name): + print("WARNING: We plan to remove the availability of the {} option in CodeQL CLI release 2.17.0 and beyond. Please let us know by submitting an issue to https://github.com/github/codeql why you needed to re-enable dependency extraction.".format(force_enable_envvar_name)) + path_option = [ "-p", install.get_library(version)] + if PATH_TAG in os.environ: + path_option = split_into_options(os.environ[PATH_TAG], "-p") + path_option + return path_option + else: + print("INFO: The Python extractor has recently (from 2.16.0 CodeQL CLI release) stopped extracting dependencies by default, and therefore stopped analyzing the source code of dependencies by default. We plan to remove this entirely in CodeQL CLI release 2.17.0. If you encounter problems, please let us know by submitting an issue to https://github.com/github/codeql, so we can consider adjusting our plans. It is possible to re-enable dependency extraction by exporting '{}=1'.".format(force_enable_envvar_name)) + return [] + +def get_stdlib(): + return os.path.dirname(os.__file__) + + +def exclude_pip_21_3_build_dir_options(): + """ + Handle build/ dir from `pip install .` (new in pip 21.3) + + Starting with pip 21.3, in-tree builds are now the default (see + https://pip.pypa.io/en/stable/news/#v21-3). This means that pip commands that build + the package (like `pip install .` or `pip wheel .`), will leave a copy of all the + package source code in `build/lib/<package-name>/`. + + If that is done before invoking the extractor, we will end up extracting that copy + as well, which is very bad (especially for points-to performance). So with this + function we try to find such folders, so they can be excluded from extraction. + + The only reliable sign is that inside the `build` folder, there must be a `lib` + subfolder, and there must not be any ordinary files. + + When the `wheel` package is installed there will also be a `bdist.linux-x86_64` + subfolder. Although most people have the `wheel` package installed, it's not + required, so we don't use that in the logic. + """ + + # As a failsafe, we include logic to disable this functionality based on an + # environment variable. + # + # Like PYTHONUNBUFFERED for Python, we treat any non-empty string as meaning the + # flag is enabled. + # https://docs.python.org/3/using/cmdline.html#envvar-PYTHONUNBUFFERED + if os.environ.get("CODEQL_EXTRACTOR_PYTHON_DISABLE_AUTOMATIC_PIP_BUILD_DIR_EXCLUDE"): + return [] + + include_dirs = set(get_include_options()[1::2]) + + # For the purpose of exclusion, we normalize paths to their absolute path, just like + # we do in the actual traverser. + exclude_dirs = set(os.path.abspath(path) for path in get_exclude_options()[1::2]) + + to_exclude = list() + + def walk_dir(dirpath): + if os.path.abspath(dirpath) in exclude_dirs: + return + + contents = os.listdir(dirpath) + paths = [os.path.join(dirpath, c) for c in contents] + dirs = [path for path in paths if os.path.isdir(path)] + dirnames = [os.path.basename(path) for path in dirs] + + # Allow Python package such as `mypkg.build.lib`, so if we see an `__init__.py` + # file in the current dir don't walk the tree further. + if "__init__.py" in contents: + return + + # note that we don't require that there by a `setup.py` present beside the + # `build/` dir, since that is not required to build a package -- see + # https://pgjones.dev/blog/packaging-without-setup-py-2020 + # + # Although I didn't observe `pip install .` with a package that uses `poetry` as + # the build-system leave behind a `build/` directory, that doesn't mean it + # couldn't happen. + if os.path.basename(dirpath) == "build" and "lib" in dirnames and dirs == paths: + to_exclude.append(dirpath) + return # no need to walk the sub directories + + for dir in dirs: + # We ignore symlinks, as these can present infinite loops, and any folders + # they can point to will be handled on their own anyway. + if not os.path.islink(dir): + walk_dir(dir) + + for top in include_dirs: + walk_dir(top) + + options = [] + + if to_exclude: + print( + "Excluding the following directories from extraction, since they look like " + "in-tree build directories generated by pip: {}".format(to_exclude) + ) + print( + "You can disable this behavior by setting the environment variable " + "CODEQL_EXTRACTOR_PYTHON_DISABLE_AUTOMATIC_PIP_BUILD_DIR_EXCLUDE=1" + ) + for dirpath in to_exclude: + options.append("-Y") # `-Y` is the same as `--exclude-file` + options.append(dirpath) + + return options + + +def exclude_venvs_options(): + """ + If there are virtual environments (venv) present within the directory that is being + extracted, we don't want to recurse into all of these and extract all the Python + source code. + + This function tries to find such venvs, and produce the right options to ignore + them. + """ + + # As a failsafe, we include logic to disable this functionality based on an + # environment variable. + # + # Like PYTHONUNBUFFERED for Python, we treat any non-empty string as meaning the + # flag is enabled. + # https://docs.python.org/3/using/cmdline.html#envvar-PYTHONUNBUFFERED + if os.environ.get("CODEQL_EXTRACTOR_PYTHON_DISABLE_AUTOMATIC_VENV_EXCLUDE"): + return [] + + include_dirs = set(get_include_options()[1::2]) + + # For the purpose of exclusion, we normalize paths to their absolute path, just like + # we do in the actual traverser. + exclude_dirs = set(os.path.abspath(path) for path in get_exclude_options()[1::2]) + + to_exclude = [] + + def walk_dir(dirpath): + if os.path.abspath(dirpath) in exclude_dirs: + return + + paths = [os.path.join(dirpath, c) for c in os.listdir(dirpath)] + dirs = [path for path in paths if os.path.isdir(path)] + dirnames = [os.path.basename(path) for path in dirs] + + # we look for `<venv>/Lib/site-packages` (Windows) or + # `<venv>/lib/python*/site-packages` (unix) without requiring any other files to + # be present. + # + # Initially we had implemented some more advanced logic to only ignore venvs + # that had a `pyvenv.cfg` or a suitable activate scripts. But reality turned out + # to be less reliable, so now we just ignore any venv that has a proper + # `site-packages` as a subfolder. + # + # This logic for detecting a virtual environment was based on the CPython implementation, see: + # - https://github.com/python/cpython/blob/4575c01b750cd26377e803247c38d65dad15e26a/Lib/venv/__init__.py#L122-L131 + # - https://github.com/python/cpython/blob/4575c01b750cd26377e803247c38d65dad15e26a/Lib/venv/__init__.py#L170 + # + # Some interesting examples: + # - windows without `activate`: https://github.com/NTUST/106-team4/tree/7f902fec29f68ca44d4f4385f2d7714c2078c937/finalPage/finalVENV/Scripts + # - windows with `activate`: https://github.com/Lynchie/KCM/tree/ea9eeed07e0c9eec41f9fc7480ce90390ee09876/VENV/Scripts + # - without `pyvenv.cfg`: https://github.com/FiacreT/M-moire/tree/4089755191ffc848614247e98bbb641c1933450d/osintplatform/testNeo/venv + # - without `pyvenv.cfg`: https://github.com/Lynchie/KCM/tree/ea9eeed07e0c9eec41f9fc7480ce90390ee09876/VENV + # - without `pyvenv.cfg`: https://github.com/mignonjia/NetworkingProject/tree/a89fe12ffbf384095766aadfe6454a4c0062d1e7/crud/venv + # + # I'm quite sure I saw some project on LGTM that had neither `pyvenv.cfg` or an activate script, but I could not find the reference again. + + if "Lib" in dirnames: + has_site_packages_folder = os.path.exists(os.path.join(dirpath, "Lib", "site-packages")) + elif "lib" in dirnames: + lib_path = os.path.join(dirpath, "lib") + python_folders = [dirname for dirname in os.listdir(lib_path) if dirname.startswith("python")] + has_site_packages_folder = bool(python_folders) and any( + os.path.exists(os.path.join(dirpath, "lib", python_folder, "site-packages")) for python_folder in python_folders + ) + else: + has_site_packages_folder = False + + if has_site_packages_folder: + to_exclude.append(dirpath) + return # no need to walk the sub directories + + for dir in dirs: + # We ignore symlinks, as these can present infinite loops, and any folders + # they can point to will be handled on their own anyway. + if not os.path.islink(dir): + walk_dir(dir) + + for top in include_dirs: + walk_dir(top) + + options = [] + + if to_exclude: + print( + "Excluding the following directories from extraction, since they look like " + "virtual environments: {}".format(to_exclude) + ) + print( + "You can disable this behavior by setting the environment variable " + "CODEQL_EXTRACTOR_PYTHON_DISABLE_AUTOMATIC_VENV_EXCLUDE=1" + ) + + for dirpath in to_exclude: + options.append("-Y") # `-Y` is the same as `--exclude-file` + options.append(dirpath) + + return options + +def get_extractor_logging_level(s: str): + """Returns a integer value corresponding to the logging level specified by the string s, or `None` if s is invalid.""" + try: + return EXTRACTOR_LOGGING_LEVELS.index(s) + except ValueError: + return None + +def get_cli_logging_level(s: str): + """Returns a integer value corresponding to the logging level specified by the string s, or `None` if s is invalid.""" + try: + return CLI_LOGGING_LEVELS.index(s) + except ValueError: + return None + +def get_logging_options(): + # First look for the extractor-specific option + verbosity_level = os.environ.get("CODEQL_EXTRACTOR_PYTHON_OPTION_LOGGING_VERBOSITY", None) + if verbosity_level is not None: + level = get_extractor_logging_level(verbosity_level) + if level is None: + level = get_cli_logging_level(verbosity_level) + if level is None: + # This is unlikely to be reached in practice, as the level should be validated by the CLI. + raise ValueError( + "Invalid verbosity level: {}. Valid values are: {}".format( + verbosity_level, ", ".join(set(EXTRACTOR_LOGGING_LEVELS + CLI_LOGGING_LEVELS)) + ) + ) + return ["--verbosity", str(level)] + + # Then look for the CLI-wide option + cli_verbosity_level = os.environ.get("CODEQL_VERBOSITY", None) + if cli_verbosity_level is not None: + level = get_cli_logging_level(cli_verbosity_level) + if level is None: + # This is unlikely to be reached in practice, as the level should be validated by the CLI. + raise ValueError( + "Invalid verbosity level: {}. Valid values are: {}".format( + cli_verbosity_level, ", ".join(CLI_LOGGING_LEVELS) + ) + ) + return ["--verbosity", str(level)] + + # Default behaviour: turn on verbose mode: + return ["-v"] + + +def extractor_options(version): + options = [] + + options += get_logging_options() + + # use maximum number of processes + options += ["-z", "all"] + + # cache trap files + options += ["-c", trap_cache()] + + options += get_path_options(version) + options += get_include_options() + options += get_exclude_options() + options += get_filter_options() + options += exclude_pip_21_3_build_dir_options() + options += exclude_venvs_options() + + return options + + +def site_flag(version): + # + # Disabling site with -S (which we do by default) has been observed to cause + # problems at some customers. We're not entirely sure enabling this by default is + # going to be 100% ok, so for now we just want to disable this flag if running with + # it turns out to be a problem (which we check for). + # + # see https://docs.python.org/3/library/site.html + # + # I don't see any reason for running with -S when invoking the tracer in this + # scenario. If we were using the executable from a virtual environment after + # installing PyPI packages, running without -S would allow one of those packages to + # influence the behavior of the extractor, as was the problem for CVE-2020-5252 + # (described in https://github.com/akoumjian/python-safety-vuln). But since this is + # not the case, I don't think there is any advantage to running with -S. + + # Although we have an automatic way that should detect when we should not be running + # with -S, we're not 100% certain that it is not possible to create _other_ strange + # Python installations where `gzip` could be available, but the rest of the standard + # library still not being available. Therefore we're going to keep this environment + # variable, just to make sure there is an easy fall-back in those cases. + # + # Like PYTHONUNBUFFERED for Python, we treat any non-empty string as meaning the + # flag is enabled. + # https://docs.python.org/3/using/cmdline.html#envvar-PYTHONUNBUFFERED + if os.environ.get("CODEQL_EXTRACTOR_PYTHON_ENABLE_SITE"): + return [] + + try: + # In the cases where customers had problems, `gzip` was the first module + # encountered that could not be loaded, so that's the one we check for. Note + # that this has nothing to do with it being problematic to add GZIP support to + # Python :) + args = executable(version) + ["-S", "-c", "import gzip"] + subprocess.check_call(args) + return ["-S"] + except (subprocess.CalledProcessError, Exception): + print("Running without -S") + return [] + +def get_analysis_version(major_version): + """Gets the version of Python that we _analyze_ the code as being written for. + The return value is a string, e.g. "3.11" or "2.7.18". Populating the `major_version`, + `minor_version` and `micro_version` predicates is done inside the CodeQL libraries. + """ + # If the version is already specified, simply reuse it. + if "CODEQL_EXTRACTOR_PYTHON_ANALYSIS_VERSION" in os.environ: + return os.environ["CODEQL_EXTRACTOR_PYTHON_ANALYSIS_VERSION"] + elif major_version == 2: + return "2.7.18" # Last officially supported version + else: + return "3.12" # This should always be the latest supported version + + +def main(): + version = discover.get_version() + tracer = os.path.join(os.environ["SEMMLE_DIST"], "tools", "python_tracer.py") + args = extractor_executable() + site_flag(3) + [tracer] + extractor_options(version) + print("Calling " + " ".join(args)) + sys.stdout.flush() + sys.stderr.flush() + env = os.environ.copy() + env["CODEQL_EXTRACTOR_PYTHON_ANALYSIS_VERSION"] = get_analysis_version(version) + subprocess.check_call(args, env=env) + +if __name__ == "__main__": + main() diff --git a/python/extractor/buildtools/install.py b/python/extractor/buildtools/install.py new file mode 100644 index 00000000000..4ce8b82e178 --- /dev/null +++ b/python/extractor/buildtools/install.py @@ -0,0 +1,123 @@ +import sys +import os +import subprocess +import re +import ast +import tempfile + +from buildtools import unify_requirements +from buildtools.version import executable +from buildtools.version import WIN +from buildtools.helper import print_exception_indented + +def call(args, cwd=None): + print("Calling " + " ".join(args)) + sys.stdout.flush() + sys.stderr.flush() + subprocess.check_call(args, cwd=cwd) + +class Venv(object): + + def __init__(self, path, version): + self.environ = {} + self.path = path + exe_ext = [ "Scripts", "python.exe" ] if WIN else [ "bin", "python" ] + self.venv_executable = os.path.join(self.path, *exe_ext) + self._lib = None + self.pip_upgraded = False + self.empty_folder = tempfile.mkdtemp(prefix="empty", dir=os.environ["LGTM_WORKSPACE"]) + self.version = version + + def create(self): + if self.version < 3: + venv = ["-m", "virtualenv", "--never-download"] + else: + venv = ["-m", "venv"] + call(executable(self.version) + venv + [self.path], cwd=self.empty_folder) + + def upgrade_pip(self): + 'Make sure that pip has been upgraded to latest version' + if self.pip_upgraded: + return + self.pip([ "install", "--upgrade", "pip"]) + self.pip_upgraded = True + + def pip(self, args): + call([self.venv_executable, "-m", "pip"] + args, cwd=self.empty_folder) + + @property + def lib(self): + if self._lib is None: + try: + tools = os.path.join(os.environ['SEMMLE_DIST'], "tools") + get_venv_lib = os.path.join(tools, "get_venv_lib.py") + if os.path.exists(self.venv_executable): + python_executable = [self.venv_executable] + else: + python_executable = executable(self.version) + args = python_executable + [get_venv_lib] + print("Calling " + " ".join(args)) + sys.stdout.flush() + sys.stderr.flush() + self._lib = subprocess.check_output(args) + if sys.version_info >= (3,): + self._lib = str(self._lib, sys.getfilesystemencoding()) + self._lib = self._lib.rstrip("\r\n") + except: + lib_ext = ["Lib"] if WIN else [ "lib" ] + self._lib = os.path.join(self.path, *lib_ext) + print('Error trying to run get_venv_lib (this is Python {})'.format(sys.version[:5])) + print_exception_indented() + return self._lib + +def venv_path(): + return os.path.join(os.environ["LGTM_WORKSPACE"], "venv") + +def system_packages(version): + output = subprocess.check_output(executable(version) + [ "-c", "import sys; print(sys.path)"]) + if sys.version_info >= (3,): + output = str(output, sys.getfilesystemencoding()) + paths = ast.literal_eval(output.strip()) + return [ path for path in paths if ("dist-packages" in path or "site-packages" in path) ] + +REQUIREMENTS_TAG = "LGTM_PYTHON_SETUP_REQUIREMENTS" +EXCLUDE_REQUIREMENTS_TAG = "LGTM_PYTHON_SETUP_EXCLUDE_REQUIREMENTS" + +def main(version, root, requirement_files): + # We import `auto_install` here, as it has a dependency on the `packaging` + # module. For the CodeQL CLI (where we do not install any packages) we never + # run the `main` function, and so there is no need to always import this + # dependency. + from buildtools import auto_install + print("version, root, requirement_files", version, root, requirement_files) + venv = Venv(venv_path(), version) + venv.create() + if REQUIREMENTS_TAG in os.environ: + if not auto_install.install(os.environ[REQUIREMENTS_TAG], venv): + sys.exit(1) + requirements_from_setup = os.path.join(os.environ["LGTM_WORKSPACE"], "setup_requirements.txt") + args = [ venv.venv_executable, os.path.join(os.environ["SEMMLE_DIST"], "tools", "convert_setup.py"), root, requirements_from_setup] + system_packages(version) + print("Calling " + " ".join(args)) + sys.stdout.flush() + sys.stderr.flush() + #We don't care if this fails, we only care if `requirements_from_setup` was created. + subprocess.call(args) + if os.path.exists(requirements_from_setup): + requirement_files = [ requirements_from_setup ] + requirement_files[1:] + print("Requirement files: " + str(requirement_files)) + requirements = unify_requirements.gather(requirement_files) + if EXCLUDE_REQUIREMENTS_TAG in os.environ: + excludes = os.environ[EXCLUDE_REQUIREMENTS_TAG].splitlines() + print("Excluding ", excludes) + regex = re.compile("|".join(exclude + r'\b' for exclude in excludes)) + requirements = [ req for req in requirements if not regex.match(req) ] + err = 0 if auto_install.install(requirements, venv) else 1 + sys.exit(err) + +def get_library(version): + return Venv(venv_path(), version).lib + +if __name__ == "__main__": + version, root, requirement_files = sys.argv[1], sys.argv[2], sys.argv[3:] + version = int(version) + main(version, root, requirement_files) diff --git a/python/extractor/buildtools/semmle/__init__.py b/python/extractor/buildtools/semmle/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/buildtools/semmle/requirements.py b/python/extractor/buildtools/semmle/requirements.py new file mode 100644 index 00000000000..7258bd64522 --- /dev/null +++ b/python/extractor/buildtools/semmle/requirements.py @@ -0,0 +1,136 @@ +import copy +import tempfile +import re +from packaging.requirements import Requirement +from packaging.version import Version +from packaging.specifiers import SpecifierSet + +IGNORED_REQUIREMENTS = re.compile("^(-e\\s+)?(git|svn|hg)(?:\\+.*)?://.*$") + +def parse(lines): + 'Parse a list of requirement strings into a list of `Requirement`s' + res = [] + #Process + for line in lines: + if '#' in line: + line, _ = line.split('#', 1) + if not line: + continue + if IGNORED_REQUIREMENTS.match(line): + continue + try: + req = Requirement(line) + except: + print("Cannot parse requirements line '%s'" % line) + else: + res.append(req) + return res + +def parse_file(filename): + with open(filename, 'r') as fd: + return parse(fd.read().splitlines()) + +def save_to_file(reqs): + 'Takes a list of requirements, saves them to a temporary file and returns the filename' + with tempfile.NamedTemporaryFile(prefix="semmle-requirements", suffix=".txt", mode="w", delete=False) as fd: + for req in reqs: + if req.url is None: + fd.write(str(req)) + else: + fd.write(req.url) + fd.write("\n") + return fd.name + +def clean(reqs): + 'Look for self-contradictory specifier groups and remove the necessary specifier parts to make them consistent' + result = [] + for req in reqs: + specs = req.specifier + cleaned_specs = _clean_specs(specs) + req.specifier = cleaned_specs + result.append(Requirement(str(req))) + req.specifier = specs + return result + +def _clean_specs(specs): + ok = SpecifierSet() + #Choose a deterministic order such that >= comes before <=. + for spec in sorted(iter(specs), key=str, reverse=True): + for ok_spec in ok: + if not _compatible_specifier(ok_spec, spec): + break + else: + ok &= SpecifierSet(str(spec)) + return ok + +def restrict(reqs): + '''Restrict versions to "compatible" versions. + For example restrict >=1.2 to all versions >= 1.2 that have 1 as the major version number. + >=N... becomes >=N...,==N.* and >N... requirements becomes >N..,==N.* + ''' + #First of all clean the requirements + reqs = clean(reqs) + result = [] + for req in reqs: + specs = req.specifier + req.specifier = _restrict_specs(specs) + result.append(Requirement(str(req))) + req.specifier = specs + return result + +def _restrict_specs(specs): + restricted = copy.deepcopy(specs) + #Iteration order doesn't really matter here so we choose the + #same as for clean, just to be consistent + for spec in sorted(iter(specs), key=str, reverse=True): + if spec.operator in ('>', '>='): + base_version = spec.version.split(".", 1)[0] + restricted &= SpecifierSet('==' + base_version + '.*') + return restricted + +def _compatible_specifier(s1, s2): + overlaps = 0 + overlaps += _min_version(s1) in s2 + overlaps += _max_version(s1) in s2 + overlaps += _min_version(s2) in s1 + overlaps += _max_version(s2) in s1 + if overlaps > 1: + return True + if overlaps == 1: + #One overlap -- Generally compatible, but not for <x, >=x + return not _is_strict(s1) and not _is_strict(s2) + #overlaps == 0: + return False + +MIN_VERSION = Version('0.0a0') +MAX_VERSION = Version('1000000') + +def _min_version(s): + if s.operator in ('>', '>='): + return s.version + elif s.operator in ('<', '<=', '!='): + return MIN_VERSION + elif s.operator == '==': + v = s.version + if v[-1] == '*': + return v[:-1] + '0' + else: + return s.version + else: + # '~=' + return s.version + +def _max_version(s): + if s.operator in ('<', '<='): + return s.version + elif s.operator in ('>', '>=', '!='): + return MAX_VERSION + elif s.operator in ('~=', '=='): + v = s.version + if v[-1] == '*' or s.operator == '~=': + return v[:-1] + '1000000' + else: + return s.version + +def _is_strict(s): + return s.operator in ('>', '<') diff --git a/python/extractor/buildtools/tox.ini b/python/extractor/buildtools/tox.ini new file mode 100644 index 00000000000..b1be1caaff0 --- /dev/null +++ b/python/extractor/buildtools/tox.ini @@ -0,0 +1,14 @@ +# this is a setup file for `tox`, which allows us to run test locally against multiple python +# versions. Simply run `tox` in the directory of this file! +# +# install tox with `pipx install tox` or whatever your preferred way is :) + +[tox] +envlist = py27,py3 +skipsdist=True + +[testenv] +# install <deps> in the virtualenv where commands will be executed +deps = pytest +commands = + pytest diff --git a/python/extractor/buildtools/unify_requirements.py b/python/extractor/buildtools/unify_requirements.py new file mode 100644 index 00000000000..b6dcac683ab --- /dev/null +++ b/python/extractor/buildtools/unify_requirements.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python +import os +import re + +def get_requirements(file_path): + if not file_path: + return [] + with open(file_path, "r") as requirements_file: + lines = requirements_file.read().splitlines() + for line_no, line in enumerate(lines): + match = re.search("^\\s*-r\\s+([^#]+)", line) + if match: + include_file_path = os.path.join(os.path.dirname(file_path), match.group(1).strip()) + include_requirements = get_requirements(include_file_path) + lines[line_no:line_no+1] = include_requirements + return lines + +def deduplicate(requirements): + result = [] + seen = set() + for req in requirements: + if req in seen: + continue + result.append(req) + seen.add(req) + return result + +def gather(requirement_files): + requirements = [] + for file in requirement_files: + requirements += get_requirements(file) + requirements = deduplicate(requirements) + print("Requirements:") + for r in requirements: + print(" {}".format(r)) + return requirements diff --git a/python/extractor/buildtools/version.py b/python/extractor/buildtools/version.py new file mode 100644 index 00000000000..e6f685a64b1 --- /dev/null +++ b/python/extractor/buildtools/version.py @@ -0,0 +1,223 @@ +import sys +import os +import subprocess +import tokenize +import re + +from buildtools.helper import print_exception_indented + + +TROVE = re.compile(r"Programming Language\s+::\s+Python\s+::\s+(\d)") + +if sys.version_info > (3,): + import collections.abc as collections + file_open = tokenize.open +else: + import collections + file_open = open + +WIN = sys.platform == "win32" + + +if WIN: + # installing `py` launcher is optional when installing Python on windows, so it's + # possible that the user did not install it, see + # https://github.com/github/codeql-cli-binaries/issues/125#issuecomment-1157429430 + # so we check whether it has been installed. Newer versions have a `--list` option, + # but that has only been mentioned in the docs since 3.9, so to not risk it not + # working on potential older versions, we'll just use `py --version` which forwards + # the `--version` argument to the default python executable. + + try: + subprocess.check_call(["py", "--version"]) + except (subprocess.CalledProcessError, Exception): + sys.stderr.write("The `py` launcher is required for CodeQL to work on Windows.") + sys.stderr.write("Please include it when installing Python for Windows.") + sys.stderr.write("see https://docs.python.org/3/using/windows.html#python-launcher-for-windows") + sys.stderr.flush() + sys.exit(4) # 4 was a unique exit code at the time of writing + +AVAILABLE_VERSIONS = [] + +def set_available_versions(): + """Sets the global `AVAILABLE_VERSIONS` to a list of available (major) Python versions.""" + global AVAILABLE_VERSIONS + if AVAILABLE_VERSIONS: + return # already set + for version in [3, 2]: + try: + subprocess.check_call(" ".join(executable_name(version) + ["-c", "pass"]), shell=True) + AVAILABLE_VERSIONS.append(version) + except Exception: + pass # If not available, we simply don't add it to the list + if not AVAILABLE_VERSIONS: + # If neither 'python3' nor 'python2' is available, we'll just try 'python' and hope for the best + AVAILABLE_VERSIONS = [''] + +def executable(version): + """Returns the executable to use for the given Python version.""" + global AVAILABLE_VERSIONS + set_available_versions() + if version not in AVAILABLE_VERSIONS: + available_version = AVAILABLE_VERSIONS[0] + print("Wanted to run Python %s, but it is not available. Using Python %s instead" % (version, available_version)) + version = available_version + return executable_name(version) + + +def executable_name(version): + if WIN: + return ["py", "-%s" % version] + else: + return ["python%s" % version] + +PREFERRED_PYTHON_VERSION = None + +def extractor_executable(): + ''' + Returns the executable to use for the extractor. + If a Python executable name is specified using the extractor option, returns that name. + In the absence of a user-specified executable name, returns the executable name for + Python 3 if it is available, and Python 2 if not. + ''' + executable_name = os.environ.get("CODEQL_EXTRACTOR_PYTHON_OPTION_PYTHON_EXECUTABLE_NAME", None) + if executable_name is not None: + print("Using Python executable name provided via the python_executable_name extractor option: {}" + .format(executable_name) + ) + return [executable_name] + # Call machine_version() to ensure we've set PREFERRED_PYTHON_VERSION + if PREFERRED_PYTHON_VERSION is None: + machine_version() + return executable(PREFERRED_PYTHON_VERSION) + +def machine_version(): + """If only Python 2 or Python 3 is installed, will return that version""" + global PREFERRED_PYTHON_VERSION + print("Trying to guess Python version based on installed versions") + if sys.version_info > (3,): + this, other = 3, 2 + else: + this, other = 2, 3 + try: + exe = executable(other) + # We need `shell=True` here in order for the test framework to function correctly. For + # whatever reason, the `PATH` variable is ignored if `shell=False`. + # Also, this in turn forces us to give the whole command as a string, rather than a list. + # Otherwise, the effect is that the Python interpreter is invoked _as a REPL_, rather than + # with the given piece of code. + subprocess.check_call(" ".join(exe + [ "-c", "pass" ]), shell=True) + print("This script is running Python {}, but Python {} is also available (as '{}')" + .format(this, other, ' '.join(exe)) + ) + # If both versions are available, our preferred version is Python 3 + PREFERRED_PYTHON_VERSION = 3 + return None + except Exception: + print("Only Python {} installed -- will use that version".format(this)) + PREFERRED_PYTHON_VERSION = this + return this + +def trove_version(root): + print("Trying to guess Python version based on Trove classifiers in setup.py") + try: + full_path = os.path.join(root, "setup.py") + if not os.path.exists(full_path): + print("Did not find setup.py (expected it to be at {})".format(full_path)) + return None + + versions = set() + with file_open(full_path) as fd: + contents = fd.read() + for match in TROVE.finditer(contents): + versions.add(int(match.group(1))) + + if 2 in versions and 3 in versions: + print("Found Trove classifiers for both Python 2 and Python 3 in setup.py -- will use Python 3") + return 3 + elif len(versions) == 1: + result = versions.pop() + print("Found Trove classifier for Python {} in setup.py -- will use that version".format(result)) + return result + else: + print("Found no Trove classifiers for Python in setup.py") + except Exception: + print("Skipping due to exception:") + print_exception_indented() + return None + +def wrap_with_list(x): + if isinstance(x, collections.Iterable) and not isinstance(x, str): + return x + else: + return [x] + +def travis_version(root): + print("Trying to guess Python version based on travis file") + try: + full_paths = [os.path.join(root, filename) for filename in [".travis.yml", "travis.yml"]] + travis_file_paths = [path for path in full_paths if os.path.exists(path)] + if not travis_file_paths: + print("Did not find any travis files (expected them at either {})".format(full_paths)) + return None + + try: + import yaml + except ImportError: + print("Found a travis file, but yaml library not available") + return None + + with open(travis_file_paths[0]) as travis_file: + travis_yaml = yaml.safe_load(travis_file) + if "python" in travis_yaml: + versions = wrap_with_list(travis_yaml["python"]) + else: + versions = [] + + # 'matrix' is an alias for 'jobs' now (https://github.com/travis-ci/docs-travis-ci-com/issues/1500) + # If both are defined, only the last defined will be used. + if "matrix" in travis_yaml and "jobs" in travis_yaml: + print("Ignoring 'matrix' and 'jobs' in Travis file, since they are both defined (only one of them should be).") + else: + matrix = travis_yaml.get("matrix") or travis_yaml.get("jobs") or dict() + includes = matrix.get("include") or [] + for include in includes: + if "python" in include: + versions.extend(wrap_with_list(include["python"])) + + found = set() + for version in versions: + # Yaml may convert version strings to numbers, convert them back. + version = str(version) + if version.startswith("2"): + found.add(2) + if version.startswith("3"): + found.add(3) + + if len(found) == 1: + result = found.pop() + print("Only found Python {} in travis file -- will use that version".format(result)) + return result + elif len(found) == 2: + print("Found both Python 2 and Python 3 being used in travis file -- ignoring") + else: + print("Found no Python being used in travis file") + except Exception: + print("Skipping due to exception:") + print_exception_indented() + return None + +VERSION_TAG = "LGTM_PYTHON_SETUP_VERSION" + +def best_version(root, default): + if VERSION_TAG in os.environ: + try: + return int(os.environ[VERSION_TAG]) + except ValueError: + raise SyntaxError("Illegal value for " + VERSION_TAG) + print("Will try to guess Python version, as it was not specified in `lgtm.yml`") + version = trove_version(root) or travis_version(root) or machine_version() + if version is None: + version = default + print("Could not guess Python version, will use default: Python {}".format(version)) + return version diff --git a/python/extractor/cli-integration-test/.gitignore b/python/extractor/cli-integration-test/.gitignore new file mode 100644 index 00000000000..d3606b9b666 --- /dev/null +++ b/python/extractor/cli-integration-test/.gitignore @@ -0,0 +1,5 @@ +*/db/ +*/dbs/ +*/venv/ +**/*.egg-info/ +*/.cache diff --git a/python/extractor/cli-integration-test/README.md b/python/extractor/cli-integration-test/README.md new file mode 100644 index 00000000000..4da21247ebc --- /dev/null +++ b/python/extractor/cli-integration-test/README.md @@ -0,0 +1,21 @@ +# Extractor Python CodeQL CLI integration tests + +To ensure that the two work together as intended, and as an easy way to set up realistic test-cases. + + +### Adding a new test case + +Add a new folder, place a file called `test.sh` in it, which should start with the code below. The script should exit with failure code to fail the test. + +```bash +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +set -x + +CODEQL=${CODEQL:-codeql} + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" +``` diff --git a/python/extractor/cli-integration-test/basic/query.ql b/python/extractor/cli-integration-test/basic/query.ql new file mode 100644 index 00000000000..82198eaf87b --- /dev/null +++ b/python/extractor/cli-integration-test/basic/query.ql @@ -0,0 +1 @@ +select 1 diff --git a/python/extractor/cli-integration-test/basic/repo_dir/foo.py b/python/extractor/cli-integration-test/basic/repo_dir/foo.py new file mode 100644 index 00000000000..517b47df53c --- /dev/null +++ b/python/extractor/cli-integration-test/basic/repo_dir/foo.py @@ -0,0 +1 @@ +print(42) diff --git a/python/extractor/cli-integration-test/basic/test.sh b/python/extractor/cli-integration-test/basic/test.sh new file mode 100755 index 00000000000..13433df24b9 --- /dev/null +++ b/python/extractor/cli-integration-test/basic/test.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +set -x + +CODEQL=${CODEQL:-codeql} + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" + +rm -rf db + +$CODEQL database create db --language python --source-root repo_dir/ +$CODEQL query run --database db query.ql diff --git a/python/extractor/cli-integration-test/disable-library-extraction/repo_dir/foo.py b/python/extractor/cli-integration-test/disable-library-extraction/repo_dir/foo.py new file mode 100644 index 00000000000..cf0cd77a108 --- /dev/null +++ b/python/extractor/cli-integration-test/disable-library-extraction/repo_dir/foo.py @@ -0,0 +1,3 @@ +import pip + +print(42) diff --git a/python/extractor/cli-integration-test/disable-library-extraction/test.sh b/python/extractor/cli-integration-test/disable-library-extraction/test.sh new file mode 100755 index 00000000000..ac940f811dc --- /dev/null +++ b/python/extractor/cli-integration-test/disable-library-extraction/test.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +set -x + +CODEQL=${CODEQL:-codeql} + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" + +# start on clean slate +rm -rf dbs +mkdir dbs + +cd "$SCRIPTDIR" + +# In 2.16.0 we will not extract libraries by default, so there is no difference in what +# is extracted by setting this environment variable.. We should remove this test when +# 2.17.0 is released. +export CODEQL_EXTRACTOR_PYTHON_DISABLE_LIBRARY_EXTRACTION= +$CODEQL database create dbs/normal --language python --source-root repo_dir/ + +export CODEQL_EXTRACTOR_PYTHON_DISABLE_LIBRARY_EXTRACTION=1 +$CODEQL database create dbs/no-lib-extraction --language python --source-root repo_dir/ + +# --- + +set +x + +EXTRACTED_NORMAL=$(unzip -l dbs/normal/src.zip | wc -l) +EXTRACTED_NO_LIB_EXTRACTION=$(unzip -l dbs/no-lib-extraction/src.zip | wc -l) + +exitcode=0 + +echo "EXTRACTED_NORMAL=$EXTRACTED_NORMAL" +echo "EXTRACTED_NO_LIB_EXTRACTION=$EXTRACTED_NO_LIB_EXTRACTION" + +if [[ $EXTRACTED_NO_LIB_EXTRACTION -lt $EXTRACTED_NORMAL ]]; then + echo "ERROR: EXTRACTED_NO_LIB_EXTRACTION smaller than EXTRACTED_NORMAL" + exitcode=1 +fi + +exit $exitcode diff --git a/python/extractor/cli-integration-test/extract-stdlib/query.ql b/python/extractor/cli-integration-test/extract-stdlib/query.ql new file mode 100644 index 00000000000..d2024b9228f --- /dev/null +++ b/python/extractor/cli-integration-test/extract-stdlib/query.ql @@ -0,0 +1,18 @@ +import python +import semmle.python.types.Builtins + +predicate named_entity(string name, string kind) { + exists(Builtin::special(name)) and kind = "special" + or + exists(Builtin::builtin(name)) and kind = "builtin" + or + exists(Module m | m.getName() = name) and kind = "module" + or + exists(File f | f.getShortName() = name + ".py") and kind = "file" +} + +from string name, string kind +where + name in ["foo", "baz", "main", "os", "sys", "re"] and + named_entity(name, kind) +select name, kind order by name, kind diff --git a/python/extractor/cli-integration-test/extract-stdlib/query.with-stdlib.expected b/python/extractor/cli-integration-test/extract-stdlib/query.with-stdlib.expected new file mode 100644 index 00000000000..6431b96a625 --- /dev/null +++ b/python/extractor/cli-integration-test/extract-stdlib/query.with-stdlib.expected @@ -0,0 +1,12 @@ +| name | kind | ++------+---------+ +| baz | file | +| baz | module | +| foo | file | +| foo | module | +| main | file | +| os | file | +| os | module | +| re | file | +| re | module | +| sys | special | diff --git a/python/extractor/cli-integration-test/extract-stdlib/query.without-stdlib.expected b/python/extractor/cli-integration-test/extract-stdlib/query.without-stdlib.expected new file mode 100644 index 00000000000..7184b6635dd --- /dev/null +++ b/python/extractor/cli-integration-test/extract-stdlib/query.without-stdlib.expected @@ -0,0 +1,8 @@ +| name | kind | ++------+---------+ +| baz | file | +| baz | module | +| foo | file | +| foo | module | +| main | file | +| sys | special | diff --git a/python/extractor/cli-integration-test/extract-stdlib/repo_dir/baz.py b/python/extractor/cli-integration-test/extract-stdlib/repo_dir/baz.py new file mode 100644 index 00000000000..6fc7679985c --- /dev/null +++ b/python/extractor/cli-integration-test/extract-stdlib/repo_dir/baz.py @@ -0,0 +1 @@ +quux = 4 diff --git a/python/extractor/cli-integration-test/extract-stdlib/repo_dir/foo.py b/python/extractor/cli-integration-test/extract-stdlib/repo_dir/foo.py new file mode 100644 index 00000000000..ed831dda3c2 --- /dev/null +++ b/python/extractor/cli-integration-test/extract-stdlib/repo_dir/foo.py @@ -0,0 +1,4 @@ +import baz +import re +bar = 5 + baz.quux +re.compile("hello") diff --git a/python/extractor/cli-integration-test/extract-stdlib/repo_dir/main.py b/python/extractor/cli-integration-test/extract-stdlib/repo_dir/main.py new file mode 100644 index 00000000000..5efbaf04b2d --- /dev/null +++ b/python/extractor/cli-integration-test/extract-stdlib/repo_dir/main.py @@ -0,0 +1,6 @@ +import sys +import os +print(os.path) +print(sys.path) +import foo +print(foo.bar) diff --git a/python/extractor/cli-integration-test/extract-stdlib/test.sh b/python/extractor/cli-integration-test/extract-stdlib/test.sh new file mode 100755 index 00000000000..6a61becd25c --- /dev/null +++ b/python/extractor/cli-integration-test/extract-stdlib/test.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +set -x + +CODEQL=${CODEQL:-codeql} + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" + +rm -rf dbs + +mkdir dbs + +CODEQL_EXTRACTOR_PYTHON_DONT_EXTRACT_STDLIB=True $CODEQL database create dbs/without-stdlib --language python --source-root repo_dir/ +$CODEQL query run --database dbs/without-stdlib query.ql > query.without-stdlib.actual +diff query.without-stdlib.expected query.without-stdlib.actual + +LGTM_INDEX_EXCLUDE="/usr/lib/**" $CODEQL database create dbs/with-stdlib --language python --source-root repo_dir/ +$CODEQL query run --database dbs/with-stdlib query.ql > query.with-stdlib.actual +diff query.with-stdlib.expected query.with-stdlib.actual diff --git a/python/extractor/cli-integration-test/force-enable-library-extraction/repo_dir/foo.py b/python/extractor/cli-integration-test/force-enable-library-extraction/repo_dir/foo.py new file mode 100644 index 00000000000..cf0cd77a108 --- /dev/null +++ b/python/extractor/cli-integration-test/force-enable-library-extraction/repo_dir/foo.py @@ -0,0 +1,3 @@ +import pip + +print(42) diff --git a/python/extractor/cli-integration-test/force-enable-library-extraction/test.sh b/python/extractor/cli-integration-test/force-enable-library-extraction/test.sh new file mode 100755 index 00000000000..9d74cfaca4b --- /dev/null +++ b/python/extractor/cli-integration-test/force-enable-library-extraction/test.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +set -x + +CODEQL=${CODEQL:-codeql} + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" + +# start on clean slate +rm -rf dbs +mkdir dbs + +cd "$SCRIPTDIR" + +export CODEQL_EXTRACTOR_PYTHON_FORCE_ENABLE_LIBRARY_EXTRACTION_UNTIL_2_17_0= +$CODEQL database create dbs/normal --language python --source-root repo_dir/ + +export CODEQL_EXTRACTOR_PYTHON_FORCE_ENABLE_LIBRARY_EXTRACTION_UNTIL_2_17_0=1 +$CODEQL database create dbs/with-lib-extraction --language python --source-root repo_dir/ + +# --- + +set +x + +EXTRACTED_NORMAL=$(unzip -l dbs/normal/src.zip | wc -l) +EXTRACTED_WITH_LIB_EXTRACTION=$(unzip -l dbs/with-lib-extraction/src.zip | wc -l) + +exitcode=0 + +echo "EXTRACTED_NORMAL=$EXTRACTED_NORMAL" +echo "EXTRACTED_WITH_LIB_EXTRACTION=$EXTRACTED_WITH_LIB_EXTRACTION" + +if [[ ! $EXTRACTED_WITH_LIB_EXTRACTION -gt $EXTRACTED_NORMAL ]]; then + echo "ERROR: EXTRACTED_WITH_LIB_EXTRACTION not greater than EXTRACTED_NORMAL" + exitcode=1 +fi + +exit $exitcode diff --git a/python/extractor/cli-integration-test/ignore-venv/.gitignore b/python/extractor/cli-integration-test/ignore-venv/.gitignore new file mode 100644 index 00000000000..aefd67e4550 --- /dev/null +++ b/python/extractor/cli-integration-test/ignore-venv/.gitignore @@ -0,0 +1,2 @@ +venv/ +venv2/ diff --git a/python/extractor/cli-integration-test/ignore-venv/repo_dir/foo.py b/python/extractor/cli-integration-test/ignore-venv/repo_dir/foo.py new file mode 100644 index 00000000000..df8452f9f21 --- /dev/null +++ b/python/extractor/cli-integration-test/ignore-venv/repo_dir/foo.py @@ -0,0 +1,3 @@ +import flask + +print(42) diff --git a/python/extractor/cli-integration-test/ignore-venv/test.sh b/python/extractor/cli-integration-test/ignore-venv/test.sh new file mode 100755 index 00000000000..e1368008891 --- /dev/null +++ b/python/extractor/cli-integration-test/ignore-venv/test.sh @@ -0,0 +1,79 @@ +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +set -x + +CODEQL=${CODEQL:-codeql} + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" + +# start on clean slate +rm -rf dbs repo_dir/venv* +mkdir dbs + + +# set up venvs +cd repo_dir + +python3 -m venv venv +venv/bin/pip install flask + +python3 -m venv venv2 + +cd "$SCRIPTDIR" + +# In 2.16.0 we stop extracting libraries by default, so to test this functionality we +# need to force enable it. Once we release 2.17.0 and turn off library extraction for +# good, we can remove the part of this test ensuring that dependencies in an active +# venv are still extracted (since that will no longer be the case). +export CODEQL_EXTRACTOR_PYTHON_FORCE_ENABLE_LIBRARY_EXTRACTION_UNTIL_2_17_0=1 + +# Create DBs with venv2 active (that does not have flask installed) +source repo_dir/venv2/bin/activate + +export CODEQL_EXTRACTOR_PYTHON_DISABLE_AUTOMATIC_VENV_EXCLUDE= +$CODEQL database create dbs/normal --language python --source-root repo_dir/ + +export CODEQL_EXTRACTOR_PYTHON_DISABLE_AUTOMATIC_VENV_EXCLUDE=1 +$CODEQL database create dbs/no-venv-ignore --language python --source-root repo_dir/ + +# Create DB with venv active that has flask installed. We want to ensure that we're +# still able to resolve imports to flask, but don't want to extract EVERYTHING from +# within the venv. Important note is that the test-file in the repo_dir actually imports +# flask :D +source repo_dir/venv/bin/activate +export CODEQL_EXTRACTOR_PYTHON_DISABLE_AUTOMATIC_VENV_EXCLUDE= +$CODEQL database create dbs/normal-with-flask-venv --language python --source-root repo_dir/ + +# --- + +set +x + +EXTRACTED_NORMAL=$(unzip -l dbs/normal/src.zip | wc -l) +EXTRACTED_NO_VENV_IGNORE=$(unzip -l dbs/no-venv-ignore/src.zip | wc -l) +EXTRACTED_ACTIVE_FLASK=$(unzip -l dbs/normal-with-flask-venv/src.zip | wc -l) + +exitcode=0 + +echo "EXTRACTED_NORMAL=$EXTRACTED_NORMAL" +echo "EXTRACTED_NO_VENV_IGNORE=$EXTRACTED_NO_VENV_IGNORE" +echo "EXTRACTED_ACTIVE_FLASK=$EXTRACTED_ACTIVE_FLASK" + +if [[ ! $EXTRACTED_NORMAL -lt $EXTRACTED_NO_VENV_IGNORE ]]; then + echo "ERROR: EXTRACTED_NORMAL not smaller EXTRACTED_NO_VENV_IGNORE" + exitcode=1 +fi + +if [[ ! $EXTRACTED_NORMAL -lt $EXTRACTED_ACTIVE_FLASK ]]; then + echo "ERROR: EXTRACTED_NORMAL not smaller EXTRACTED_ACTIVE_FLASK" + exitcode=1 +fi + +if [[ ! $EXTRACTED_ACTIVE_FLASK -lt $EXTRACTED_NO_VENV_IGNORE ]]; then + echo "ERROR: EXTRACTED_ACTIVE_FLASK not smaller EXTRACTED_NO_VENV_IGNORE" + exitcode=1 +fi + +exit $exitcode diff --git a/python/extractor/cli-integration-test/pip-21.3-build-dir/.gitignore b/python/extractor/cli-integration-test/pip-21.3-build-dir/.gitignore new file mode 100644 index 00000000000..62cb69e3cc3 --- /dev/null +++ b/python/extractor/cli-integration-test/pip-21.3-build-dir/.gitignore @@ -0,0 +1,2 @@ +repo_dir/build/ +dbs/ diff --git a/python/extractor/cli-integration-test/pip-21.3-build-dir/repo_dir/setup.py b/python/extractor/cli-integration-test/pip-21.3-build-dir/repo_dir/setup.py new file mode 100644 index 00000000000..077cdb126d0 --- /dev/null +++ b/python/extractor/cli-integration-test/pip-21.3-build-dir/repo_dir/setup.py @@ -0,0 +1,12 @@ +from setuptools import find_packages, setup + +# using src/ folder as recommended in: https://blog.ionelmc.ro/2014/05/25/python-packaging/ + +setup( + name="example_pkg", + version="0.0.1", + description="example", + packages=find_packages("src"), + package_dir={"": "src"}, + install_requires=[], +) diff --git a/python/extractor/cli-integration-test/pip-21.3-build-dir/repo_dir/src/example_pkg/__init__.py b/python/extractor/cli-integration-test/pip-21.3-build-dir/repo_dir/src/example_pkg/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/cli-integration-test/pip-21.3-build-dir/repo_dir/src/example_pkg/foo.py b/python/extractor/cli-integration-test/pip-21.3-build-dir/repo_dir/src/example_pkg/foo.py new file mode 100644 index 00000000000..517b47df53c --- /dev/null +++ b/python/extractor/cli-integration-test/pip-21.3-build-dir/repo_dir/src/example_pkg/foo.py @@ -0,0 +1 @@ +print(42) diff --git a/python/extractor/cli-integration-test/pip-21.3-build-dir/test.sh b/python/extractor/cli-integration-test/pip-21.3-build-dir/test.sh new file mode 100755 index 00000000000..bc28adaf9ff --- /dev/null +++ b/python/extractor/cli-integration-test/pip-21.3-build-dir/test.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +set -x + +CODEQL=${CODEQL:-codeql} + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" + +NUM_PYTHON_FILES_IN_REPO=$(find repo_dir/src/ -name '*.py' | wc -l) + +rm -rf venv dbs + +mkdir dbs + +python3 -m venv venv + +source venv/bin/activate + +pip install --upgrade 'pip>=21.3' + +cd repo_dir +pip install . +cd "$SCRIPTDIR" + +export CODEQL_EXTRACTOR_PYTHON_DISABLE_AUTOMATIC_PIP_BUILD_DIR_EXCLUDE= +$CODEQL database create dbs/normal --language python --source-root repo_dir/ + +export CODEQL_EXTRACTOR_PYTHON_DISABLE_AUTOMATIC_PIP_BUILD_DIR_EXCLUDE=1 +$CODEQL database create dbs/with-build-dir --language python --source-root repo_dir/ + +EXTRACTED_NORMAL=$(unzip -l dbs/normal/src.zip | wc -l) +EXTRACTED_WITH_BUILD=$(unzip -l dbs/with-build-dir/src.zip | wc -l) + +if [[ $((EXTRACTED_NORMAL + NUM_PYTHON_FILES_IN_REPO)) == $EXTRACTED_WITH_BUILD ]]; then + echo "Numbers add up" +else + echo "Numbers did not add up" + echo "NUM_PYTHON_FILES_IN_REPO=$NUM_PYTHON_FILES_IN_REPO" + echo "EXTRACTED_NORMAL=$EXTRACTED_NORMAL" + echo "EXTRACTED_WITH_BUILD=$EXTRACTED_WITH_BUILD" + exit 1 +fi diff --git a/python/extractor/cli-integration-test/python-2-deprecation/query.only-python2.expected b/python/extractor/cli-integration-test/python-2-deprecation/query.only-python2.expected new file mode 100644 index 00000000000..75bc5074059 --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/query.only-python2.expected @@ -0,0 +1,5 @@ +| name | ++----------+ +| dircache | +| stat | +| test | diff --git a/python/extractor/cli-integration-test/python-2-deprecation/query.python2-using-python3.expected b/python/extractor/cli-integration-test/python-2-deprecation/query.python2-using-python3.expected new file mode 100644 index 00000000000..75bc5074059 --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/query.python2-using-python3.expected @@ -0,0 +1,5 @@ +| name | ++----------+ +| dircache | +| stat | +| test | diff --git a/python/extractor/cli-integration-test/python-2-deprecation/query.ql b/python/extractor/cli-integration-test/python-2-deprecation/query.ql new file mode 100644 index 00000000000..3921f6387df --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/query.ql @@ -0,0 +1,18 @@ +import python +import semmle.python.types.Builtins + +predicate named_entity(string name, string kind) { + exists(Builtin::special(name)) and kind = "special" + or + exists(Builtin::builtin(name)) and kind = "builtin" + or + exists(Module m | m.getName() = name) and kind = "module" + or + exists(File f | f.getShortName() = name + ".py") and kind = "file" +} + +from string name +where + name in ["dircache", "test", "stat"] and + named_entity(name, "file") +select name order by name diff --git a/python/extractor/cli-integration-test/python-2-deprecation/query.without-python2.expected b/python/extractor/cli-integration-test/python-2-deprecation/query.without-python2.expected new file mode 100644 index 00000000000..3fa1f24a785 --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/query.without-python2.expected @@ -0,0 +1,4 @@ +| name | ++------+ +| stat | +| test | diff --git a/python/extractor/cli-integration-test/python-2-deprecation/repo_dir/setup.py b/python/extractor/cli-integration-test/python-2-deprecation/repo_dir/setup.py new file mode 100644 index 00000000000..f8d369cfad0 --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/repo_dir/setup.py @@ -0,0 +1 @@ +"Programming Language :: Python :: 2" diff --git a/python/extractor/cli-integration-test/python-2-deprecation/repo_dir/test.py b/python/extractor/cli-integration-test/python-2-deprecation/repo_dir/test.py new file mode 100644 index 00000000000..700a624b65b --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/repo_dir/test.py @@ -0,0 +1,5 @@ +# `dircache` was removed in Python 3, and so is a good test of which standard library we're +# extracting. +import dircache +# A module that's present in both Python 2 and 3 +import stat diff --git a/python/extractor/cli-integration-test/python-2-deprecation/test.sh b/python/extractor/cli-integration-test/python-2-deprecation/test.sh new file mode 100755 index 00000000000..8b756a0dbec --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/test.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +set -x + +CODEQL=${CODEQL:-codeql} + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" + +rm -rf dbs +rm -f *.actual + +mkdir dbs + +# NB: on our Linux CI infrastructure, `python` is aliased to `python3`. +WITHOUT_PYTHON2=$(pwd)/without-python2 +WITHOUT_PYTHON3=$(pwd)/without-python3 + +echo "Test 1: Only Python 2 is available. Should fail." +# Note the negation at the start of the command. +! PATH="$WITHOUT_PYTHON3:$PATH" $CODEQL database create dbs/only-python2-no-flag --language python --source-root repo_dir/ + +echo "Test 2: Only Python 3 is available. Should extract using Python 3 and use the Python 3 standard library." +PATH="$WITHOUT_PYTHON2:$PATH" $CODEQL database create dbs/without-python2 --language python --source-root repo_dir/ +$CODEQL query run --database dbs/without-python2 query.ql > query.without-python2.actual +diff query.without-python2.expected query.without-python2.actual + +echo "Test 3: Python 2 and 3 are both available. Should extract using Python 3, but use the Python 2 standard library." +$CODEQL database create dbs/python2-using-python3 --language python --source-root repo_dir/ +$CODEQL query run --database dbs/python2-using-python3 query.ql > query.python2-using-python3.actual +diff query.python2-using-python3.expected query.python2-using-python3.actual + +rm -f *.actual diff --git a/python/extractor/cli-integration-test/python-2-deprecation/without-python2/python2 b/python/extractor/cli-integration-test/python-2-deprecation/without-python2/python2 new file mode 100755 index 00000000000..4bbc47f8a0b --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/without-python2/python2 @@ -0,0 +1,4 @@ +echo "Attempted to run:" +echo " python2 $@" +echo "Failing instead." +exit 127 diff --git a/python/extractor/cli-integration-test/python-2-deprecation/without-python2/which b/python/extractor/cli-integration-test/python-2-deprecation/without-python2/which new file mode 100755 index 00000000000..c3bd5c78fa5 --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/without-python2/which @@ -0,0 +1,6 @@ +#!/bin/bash -p + +case $1 in + python2) exit 1;; + *) command /usr/bin/which -- "$1";; +esac \ No newline at end of file diff --git a/python/extractor/cli-integration-test/python-2-deprecation/without-python3/python b/python/extractor/cli-integration-test/python-2-deprecation/without-python3/python new file mode 100755 index 00000000000..d500093fcd3 --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/without-python3/python @@ -0,0 +1,4 @@ +echo "Attempted to run:" +echo " python $@" +echo "Failing instead." +exit 127 diff --git a/python/extractor/cli-integration-test/python-2-deprecation/without-python3/python3 b/python/extractor/cli-integration-test/python-2-deprecation/without-python3/python3 new file mode 100755 index 00000000000..199457a785e --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/without-python3/python3 @@ -0,0 +1,4 @@ +echo "Attempted to run:" +echo " python3 $@" +echo "Failing instead." +exit 127 diff --git a/python/extractor/cli-integration-test/python-2-deprecation/without-python3/which b/python/extractor/cli-integration-test/python-2-deprecation/without-python3/which new file mode 100755 index 00000000000..899656fdf74 --- /dev/null +++ b/python/extractor/cli-integration-test/python-2-deprecation/without-python3/which @@ -0,0 +1,9 @@ +#!/bin/bash -p + +echo "Fake which called with arguments: $@" + +case $1 in + python) exit 1;; + python3) exit 1;; + *) command /usr/bin/which -- "$1";; +esac \ No newline at end of file diff --git a/python/extractor/cli-integration-test/run-all-tests.sh b/python/extractor/cli-integration-test/run-all-tests.sh new file mode 100755 index 00000000000..0e458e585c9 --- /dev/null +++ b/python/extractor/cli-integration-test/run-all-tests.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" + +failures=() +for f in */test.sh; do + echo "Running $f:" + if ! bash "$f"; then + echo "ERROR: $f failed" + failures+=("$f") + fi + echo "---" +done + +if [ -z "${failures[*]}" ]; then + echo "All integration tests passed!" + exit 0 +else + echo "ERROR: Some integration test failed! Failures:" + for failure in "${failures[@]}" + do + echo "- ${failure}" + done + exit 1 +fi diff --git a/python/extractor/cli-integration-test/stdout-encoding/repo_dir/ನನ್ನ_ಸ್ಕ್ರಿಪ್ಟ್.py b/python/extractor/cli-integration-test/stdout-encoding/repo_dir/ನನ್ನ_ಸ್ಕ್ರಿಪ್ಟ್.py new file mode 100644 index 00000000000..517b47df53c --- /dev/null +++ b/python/extractor/cli-integration-test/stdout-encoding/repo_dir/ನನ್ನ_ಸ್ಕ್ರಿಪ್ಟ್.py @@ -0,0 +1 @@ +print(42) diff --git a/python/extractor/cli-integration-test/stdout-encoding/test.sh b/python/extractor/cli-integration-test/stdout-encoding/test.sh new file mode 100755 index 00000000000..347954c8090 --- /dev/null +++ b/python/extractor/cli-integration-test/stdout-encoding/test.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +set -x + +CODEQL=${CODEQL:-codeql} + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" + +rm -rf db + +# even with default encoding that doesn't support utf-8 (like on windows) we want to +# ensure that we can properly log that we've extracted files whose filenames contain +# utf-8 chars +export PYTHONIOENCODING="ascii" +$CODEQL database create db --language python --source-root repo_dir/ diff --git a/python/extractor/cli-integration-test/symlinks/.gitignore b/python/extractor/cli-integration-test/symlinks/.gitignore new file mode 100644 index 00000000000..8e28861cdaf --- /dev/null +++ b/python/extractor/cli-integration-test/symlinks/.gitignore @@ -0,0 +1,2 @@ +repo_dir/subdir +repo_dir/symlink_to_top diff --git a/python/extractor/cli-integration-test/symlinks/query.ql b/python/extractor/cli-integration-test/symlinks/query.ql new file mode 100644 index 00000000000..82198eaf87b --- /dev/null +++ b/python/extractor/cli-integration-test/symlinks/query.ql @@ -0,0 +1 @@ +select 1 diff --git a/python/extractor/cli-integration-test/symlinks/repo_dir/foo.py b/python/extractor/cli-integration-test/symlinks/repo_dir/foo.py new file mode 100644 index 00000000000..517b47df53c --- /dev/null +++ b/python/extractor/cli-integration-test/symlinks/repo_dir/foo.py @@ -0,0 +1 @@ +print(42) diff --git a/python/extractor/cli-integration-test/symlinks/test.sh b/python/extractor/cli-integration-test/symlinks/test.sh new file mode 100755 index 00000000000..aef8978bd54 --- /dev/null +++ b/python/extractor/cli-integration-test/symlinks/test.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +set -x + +CODEQL=${CODEQL:-codeql} + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" + +rm -rf db + +# create two symlink loops, so +# - repo_dir/subdir/symlink_to_top -> repo_dir +# - repo_dir/symlink_to_top -> repo_dir +# such a setup was seen in https://github.com/PowerDNS/weakforced + +rm -rf repo_dir/subdir +mkdir repo_dir/subdir +ln -s .. repo_dir/subdir/symlink_to_top + +rm -f repo_dir/symlink_to_top +ln -s . repo_dir/symlink_to_top + +timeout --verbose 15s $CODEQL database create db --language python --source-root repo_dir/ +$CODEQL query run --database db query.ql diff --git a/python/extractor/cli-integration-test/writing-diagnostics/diagnostics.expected b/python/extractor/cli-integration-test/writing-diagnostics/diagnostics.expected new file mode 100644 index 00000000000..de218a50e1e --- /dev/null +++ b/python/extractor/cli-integration-test/writing-diagnostics/diagnostics.expected @@ -0,0 +1,163 @@ +{ + "attributes": { + "args": [ + "Syntax Error" + ], + "traceback": [ + "\"semmle/python/modules.py\", line 108, in py_ast", + "\"semmle/python/modules.py\", line 102, in old_py_ast", + "\"semmle/python/parser/__init__.py\", line 100, in parse", + "\"semmleFile \"<string>\", line 1", + "\"semmle/python/extractor.py\", line 84, in process_source_module", + "\"semmle/python/modules.py\", line 92, in ast", + "\"semmle/python/modules.py\", line 120, in py_ast", + "\"semmle/python/modules.py\", line 117, in py_ast", + "\"semmle/python/parser/tsg_parser.py\", line 221, in parse", + "\"semmleFile \"<string>\", line 1" + ] + }, + "location": { + "file": "<test-root-directory>/repo_dir/syntaxerror3.py", + "startColumn": 0, + "endColumn": 0, + "startLine": 1, + "endLine": 1 + }, + "markdownMessage": "A parse error occurred while processing `<test-root-directory>/repo_dir/syntaxerror3.py`, and as a result this file could not be analyzed. Check the syntax of the file using the `python -m py_compile` command and correct any invalid syntax.", + "severity": "warning", + "source": { + "extractorName": "python", + "id": "py/diagnostics/syntax-error", + "name": "Could not process some files due to syntax errors" + }, + "timestamp": "2023-03-13T15:03:48.177832", + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} +{ + "attributes": { + "args": [ + "Syntax Error" + ], + "traceback": [ + "\"semmle/python/modules.py\", line 108, in py_ast", + "\"semmle/python/modules.py\", line 102, in old_py_ast", + "\"semmle/python/parser/__init__.py\", line 100, in parse", + "\"semmleFile \"<string>\", line 3", + "\"semmle/python/extractor.py\", line 84, in process_source_module", + "\"semmle/python/modules.py\", line 92, in ast", + "\"semmle/python/modules.py\", line 120, in py_ast", + "\"semmle/python/modules.py\", line 117, in py_ast", + "\"semmle/python/parser/tsg_parser.py\", line 221, in parse", + "\"semmleFile \"<string>\", line 3" + ] + }, + "location": { + "file": "<test-root-directory>/repo_dir/syntaxerror1.py", + "startColumn": 0, + "endColumn": 0, + "startLine": 3, + "endLine": 3 + }, + "markdownMessage": "A parse error occurred while processing `<test-root-directory>/repo_dir/syntaxerror1.py`, and as a result this file could not be analyzed. Check the syntax of the file using the `python -m py_compile` command and correct any invalid syntax.", + "severity": "warning", + "source": { + "extractorName": "python", + "id": "py/diagnostics/syntax-error", + "name": "Could not process some files due to syntax errors" + }, + "timestamp": "2023-03-13T15:03:48.181384", + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} +{ + "attributes": { + "args": [ + "Syntax Error" + ], + "traceback": [ + "\"semmle/python/modules.py\", line 108, in py_ast", + "\"semmle/python/modules.py\", line 102, in old_py_ast", + "\"semmle/python/parser/__init__.py\", line 100, in parse", + "\"semmleFile \"<string>\", line 6", + "\"semmle/python/extractor.py\", line 84, in process_source_module", + "\"semmle/python/modules.py\", line 92, in ast", + "\"semmle/python/modules.py\", line 120, in py_ast", + "\"semmle/python/modules.py\", line 117, in py_ast", + "\"semmle/python/parser/tsg_parser.py\", line 221, in parse", + "\"semmleFile \"<string>\", line 5" + ] + }, + "location": { + "file": "<test-root-directory>/repo_dir/syntaxerror2.py", + "startColumn": 0, + "endColumn": 0, + "startLine": 5, + "endLine": 5 + }, + "markdownMessage": "A parse error occurred while processing `<test-root-directory>/repo_dir/syntaxerror2.py`, and as a result this file could not be analyzed. Check the syntax of the file using the `python -m py_compile` command and correct any invalid syntax.", + "severity": "warning", + "source": { + "extractorName": "python", + "id": "py/diagnostics/syntax-error", + "name": "Could not process some files due to syntax errors" + }, + "timestamp": "2023-03-13T15:03:48.164991", + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} +{ + "attributes": { + "args": [ + "maximum recursion depth exceeded while calling a Python object" + ], + "traceback": [ + "\"semmle/worker.py\", line 235, in _extract_loop", + "\"semmle/extractors/super_extractor.py\", line 37, in process", + "\"semmle/extractors/py_extractor.py\", line 43, in process", + "\"semmle/python/extractor.py\", line 227, in process_source_module", + "\"semmle/python/extractor.py\", line 84, in process_source_module", + "\"semmle/python/modules.py\", line 96, in ast", + "\"semmle/python/passes/labeller.py\", line 85, in apply", + "\"semmle/python/passes/labeller.py\", line 44, in __init__", + "\"semmle/python/passes/labeller.py\", line 14, in __init__", + "\"semmle/python/passes/ast_pass.py\", line 208, in visit", + "\"semmle/python/passes/ast_pass.py\", line 216, in generic_visit", + "\"semmle/python/passes/ast_pass.py\", line 213, in generic_visit", + "\"semmle/python/passes/ast_pass.py\", line 208, in visit", + "\"semmle/python/passes/ast_pass.py\", line 213, in generic_visit", + "\"semmle/python/passes/ast_pass.py\", line 208, in visit", + "... 3930 lines skipped", + "\"semmle/python/passes/ast_pass.py\", line 213, in generic_visit", + "\"semmle/python/passes/ast_pass.py\", line 208, in visit", + "\"semmle/python/passes/ast_pass.py\", line 213, in generic_visit", + "\"semmle/python/passes/ast_pass.py\", line 208, in visit", + "\"semmle/python/passes/ast_pass.py\", line 205, in _get_visit_method" + ] + }, + "location": { + "file": "<test-root-directory>/repo_dir/recursion_error.py" + }, + "plaintextMessage": "maximum recursion depth exceeded while calling a Python object", + "severity": "error", + "source": { + "extractorName": "python", + "id": "py/diagnostics/recursion-error", + "name": "Recursion error in Python extractor" + }, + "timestamp": "2023-03-13T15:03:47.468924", + "visibility": { + "cliSummaryTable": false, + "statusPage": false, + "telemetry": true + } +} diff --git a/python/extractor/cli-integration-test/writing-diagnostics/make_test.py b/python/extractor/cli-integration-test/writing-diagnostics/make_test.py new file mode 100644 index 00000000000..66e84477a1b --- /dev/null +++ b/python/extractor/cli-integration-test/writing-diagnostics/make_test.py @@ -0,0 +1,4 @@ + +# Creates a test file that will cause a RecursionError when run with the Python extractor. +with open('repo_dir/recursion_error.py', 'w') as f: + f.write("print({})\n".format("+".join(["1"] * 1000))) diff --git a/python/extractor/cli-integration-test/writing-diagnostics/query.expected b/python/extractor/cli-integration-test/writing-diagnostics/query.expected new file mode 100644 index 00000000000..127af7fe20c --- /dev/null +++ b/python/extractor/cli-integration-test/writing-diagnostics/query.expected @@ -0,0 +1,6 @@ +| filename | ++-----------------+ +| safe.py | +| syntaxerror1.py | +| syntaxerror2.py | +| syntaxerror3.py | diff --git a/python/extractor/cli-integration-test/writing-diagnostics/query.ql b/python/extractor/cli-integration-test/writing-diagnostics/query.ql new file mode 100644 index 00000000000..f95676636d9 --- /dev/null +++ b/python/extractor/cli-integration-test/writing-diagnostics/query.ql @@ -0,0 +1,3 @@ +import python + +select any(File f).getShortName() as filename order by filename diff --git a/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/safe.py b/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/safe.py new file mode 100644 index 00000000000..9fcf0f1b882 --- /dev/null +++ b/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/safe.py @@ -0,0 +1 @@ +print("No deeply nested structures here!") diff --git a/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/syntaxerror1.py b/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/syntaxerror1.py new file mode 100644 index 00000000000..75c745c8cd8 --- /dev/null +++ b/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/syntaxerror1.py @@ -0,0 +1,3 @@ +# This file contains a deliberate syntax error + +2 + diff --git a/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/syntaxerror2.py b/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/syntaxerror2.py new file mode 100644 index 00000000000..9de43c0370f --- /dev/null +++ b/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/syntaxerror2.py @@ -0,0 +1,5 @@ + + + + +[ diff --git a/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/syntaxerror3.py b/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/syntaxerror3.py new file mode 100644 index 00000000000..4e4800bd521 --- /dev/null +++ b/python/extractor/cli-integration-test/writing-diagnostics/repo_dir/syntaxerror3.py @@ -0,0 +1 @@ +"Oh no! diff --git a/python/extractor/cli-integration-test/writing-diagnostics/test.sh b/python/extractor/cli-integration-test/writing-diagnostics/test.sh new file mode 100755 index 00000000000..32915e2d73c --- /dev/null +++ b/python/extractor/cli-integration-test/writing-diagnostics/test.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +set -Eeuo pipefail # see https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +set -x + +CODEQL=${CODEQL:-codeql} + +SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +cd "$SCRIPTDIR" + +rm -rf db +rm -f *.actual + +python3 make_test.py + +echo "Testing database with various errors during extraction" +$CODEQL database create db --language python --source-root repo_dir/ +$CODEQL query run --database db query.ql > query.actual +diff query.expected query.actual +python3 test_diagnostics_output.py + +rm -f *.actual +rm -f repo_dir/recursion_error.py +rm -rf db diff --git a/python/extractor/cli-integration-test/writing-diagnostics/test_diagnostics_output.py b/python/extractor/cli-integration-test/writing-diagnostics/test_diagnostics_output.py new file mode 100644 index 00000000000..39982596fc5 --- /dev/null +++ b/python/extractor/cli-integration-test/writing-diagnostics/test_diagnostics_output.py @@ -0,0 +1,7 @@ +import os +import sys +sys.path.append(os.path.join(os.path.dirname(__file__), "..", "..", "..", "integration-tests")) +import diagnostics_test_utils + +test_db = "db" +diagnostics_test_utils.check_diagnostics(".", test_db, skip_attributes=True) diff --git a/python/extractor/convert_setup.py b/python/extractor/convert_setup.py new file mode 100644 index 00000000000..e50ced2d793 --- /dev/null +++ b/python/extractor/convert_setup.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python + +import os.path +import imp +import sys +import traceback +import re + +SETUP_TAG = "LGTM_PYTHON_SETUP_SETUP_PY" + +setup_file_path = "<default value>" +requirements_file_path = "<default value>" + +if sys.version_info >= (3,): + basestring = str + +def setup_interceptor(**args): + requirements = make_requirements(**args) + write_requirements_file(requirements) + +def make_requirements(requires=(), install_requires=(), extras_require={}, dependency_links=[], **other_args): + # Install main requirements. + requirements = list(requires) + list(install_requires) + # Install requirements for all features. + for feature, feature_requirements in extras_require.items(): + if isinstance(feature_requirements, basestring): + requirements += [feature_requirements] + else: + requirements += list(feature_requirements) + + # Attempt to use dependency_links to find requirements first. + for link in dependency_links: + split_link = link.rsplit("#egg=", 1) + if len(split_link) != 2: + print("Invalid dependency link \"%s\" was ignored." % link) + continue + if not link.startswith("http"): + print("Dependency link \"%s\" is not an HTTP link so is being ignored." % link) + continue + package_name = split_link[1].rsplit("-", 1)[0] + for index, requirement in enumerate(requirements): + if requirement_name(requirement) == package_name: + print("Using %s to install %s." % (link, requirement)) + requirements[index] = package_name + " @ " + link + + print("Creating %s file from %s." % (requirements_file_path, setup_file_path)) + requirements = [requirement.encode("ascii", "ignore").strip().decode("ascii") for requirement in requirements] + print("Requirements extracted from setup.py: %s" % requirements) + return requirements + +REQUIREMENT = re.compile(r"^([\w-]+)") + +def requirement_name(req_string): + req_string = req_string.strip() + if req_string[0] == '#': + return None + match = REQUIREMENT.match(req_string) + if match: + return match.group(1) + return None + + +def write_requirements_file(requirements): + if os.path.exists(requirements_file_path): + # Only overwrite the existing requirements if the new requirements are not empty. + if requirements: + print("%s already exists. It will be overwritten." % requirements_file_path) + else: + print("%s already exists and it will not be overwritten because the new requirements list is empty." % requirements_file_path) + return + elif not requirements: + print("%s will not be written because the new requirements list is empty." % requirements_file_path) + return + with open(requirements_file_path, "w") as requirements_file: + for requirement in requirements: + requirements_file.write(requirement + "\n") + print("Requirements have been written to " + requirements_file_path) + +def convert_setup_to_requirements(root): + global setup_file_path + if SETUP_TAG in os.environ: + setup_file_path = os.environ[SETUP_TAG] + if setup_file_path == "false": + print("setup.py explicitly ignored") + return 0 + else: + setup_file_path = os.path.join(root, "setup.py") + if not os.path.exists(setup_file_path): + print("%s does not exist. Not generating requirements.txt." % setup_file_path) + return 0 + # Override the setuptools and distutils.core implementation of setup with our own. + import setuptools + setattr(setuptools, "setup", setup_interceptor) + import distutils.core + setattr(distutils.core, "setup", setup_interceptor) + + # TODO: WHY are we inserting at index 1? + # >>> l = [1,2,3]; l.insert(1, 'x'); print(l) + # [1, 'x', 2, 3] + + # Ensure the current directory is on path since setup.py might try and include some files in it. + sys.path.insert(1, root) + + # Modify the arguments since the setup file sometimes checks them. + sys.argv = [setup_file_path, "build"] + + # Run the setup.py file. + try: + imp.load_source("__main__", setup_file_path) + except BaseException as ex: + # We don't really care about errors so long as a requirements.txt exists in the next build step. + print("Running %s failed." % setup_file_path) + traceback.print_exc(file=sys.stdout) + if not os.path.exists(requirements_file_path): + print("%s failed, and a %s file does not exist. Exiting with error." % (setup_file_path, requirements_file_path)) + return 1 + return 0 + +def main(): + global requirements_file_path + requirements_file_path = sys.argv[2] + sys.path.extend(sys.argv[3:]) + sys.exit(convert_setup_to_requirements(sys.argv[1])) + +if __name__ == "__main__": + main() diff --git a/python/extractor/data/python/stubs/README.md b/python/extractor/data/python/stubs/README.md new file mode 100644 index 00000000000..6b215666c4c --- /dev/null +++ b/python/extractor/data/python/stubs/README.md @@ -0,0 +1,3 @@ +This folder contains stubs for commonly used Python libraries, which have +the same interface as the original libraries, but are more amenable to +static analysis. The original licenses are noted in each subdirectory. diff --git a/python/extractor/data/python/stubs/six/LICENSE b/python/extractor/data/python/stubs/six/LICENSE new file mode 100644 index 00000000000..4b05a545261 --- /dev/null +++ b/python/extractor/data/python/stubs/six/LICENSE @@ -0,0 +1,18 @@ +Copyright (c) 2010-2019 Benjamin Peterson + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/python/extractor/data/python/stubs/six/__init__.py b/python/extractor/data/python/stubs/six/__init__.py new file mode 100644 index 00000000000..5ffa5618478 --- /dev/null +++ b/python/extractor/data/python/stubs/six/__init__.py @@ -0,0 +1,240 @@ +# Stub file for six. +#This should have the same interface as the six module, +#but be much more tractable for static analysis. + + + +"""Utilities for writing code that runs on Python 2 and 3""" + +# Copyright (c) 2015 Semmle Limited +# All rights reserved +# Note that the original six module is copyright Benjamin Peterson +# + +import operator +import sys +import types + +__author__ = "Benjamin Peterson <benjamin@python.org>" +__version__ = "1.14.0" + + +# Useful for very coarse version differentiation. +PY2 = sys.version_info < (3,) +PY3 = sys.version_info >= (3,) + +if PY3: + string_types = str, + integer_types = int, + class_types = type, + text_type = str + binary_type = bytes + + MAXSIZE = sys.maxsize +else: + string_types = basestring, + integer_types = (int, long) + class_types = (type, types.ClassType) + text_type = unicode + binary_type = str + #We can't compute MAXSIZE, but it doesn't really matter + MAXSIZE = int((1 << 63) - 1) + + +def _add_doc(func, doc): + """Add documentation to a function.""" + func.__doc__ = doc + + +def _import_module(name): + """Import module, returning the module after the last dot.""" + __import__(name) + return sys.modules[name] + +import six.moves as moves + + +def add_move(move): + """Add an item to six.moves.""" + setattr(_MovedItems, move.name, move) + + +def remove_move(name): + """Remove item from six.moves.""" + try: + delattr(_MovedItems, name) + except AttributeError: + try: + del moves.__dict__[name] + except KeyError: + raise AttributeError("no such move, %r" % (name,)) + + +if PY3: + _meth_func = "__func__" + _meth_self = "__self__" + + _func_closure = "__closure__" + _func_code = "__code__" + _func_defaults = "__defaults__" + _func_globals = "__globals__" + + _iterkeys = "keys" + _itervalues = "values" + _iteritems = "items" + _iterlists = "lists" +else: + _meth_func = "im_func" + _meth_self = "im_self" + + _func_closure = "func_closure" + _func_code = "func_code" + _func_defaults = "func_defaults" + _func_globals = "func_globals" + + _iterkeys = "iterkeys" + _itervalues = "itervalues" + _iteritems = "iteritems" + _iterlists = "iterlists" + + +try: + advance_iterator = next +except NameError: + def advance_iterator(it): + return it.next() +next = advance_iterator + + +try: + callable = callable +except NameError: + def callable(obj): + return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) + + +if PY3: + def get_unbound_function(unbound): + return unbound + + create_bound_method = types.MethodType + + Iterator = object +else: + def get_unbound_function(unbound): + return unbound.im_func + + def create_bound_method(func, obj): + return types.MethodType(func, obj, obj.__class__) + + class Iterator(object): + + def next(self): + return type(self).__next__(self) + + callable = callable +_add_doc(get_unbound_function, + """Get the function out of a possibly unbound function""") + + +get_method_function = operator.attrgetter(_meth_func) +get_method_self = operator.attrgetter(_meth_self) +get_function_closure = operator.attrgetter(_func_closure) +get_function_code = operator.attrgetter(_func_code) +get_function_defaults = operator.attrgetter(_func_defaults) +get_function_globals = operator.attrgetter(_func_globals) + + +def iterkeys(d, **kw): + """Return an iterator over the keys of a dictionary.""" + return iter(getattr(d, _iterkeys)(**kw)) + +def itervalues(d, **kw): + """Return an iterator over the values of a dictionary.""" + return iter(getattr(d, _itervalues)(**kw)) + +def iteritems(d, **kw): + """Return an iterator over the (key, value) pairs of a dictionary.""" + return iter(getattr(d, _iteritems)(**kw)) + +def iterlists(d, **kw): + """Return an iterator over the (key, [values]) pairs of a dictionary.""" + return iter(getattr(d, _iterlists)(**kw)) + +def byte2int(ch): #type bytes -> int + return int(unknown()) + +def b(s): #type str -> bytes + """Byte literal""" + return bytes(unknown()) + +def u(s): #type str -> unicode + """Text literal""" + if PY3: + unicode = str + return unicode(unknown()) + +if PY3: + unichr = chr + def int2byte(i): #type int -> bytes + return bytes(unknown()) + indexbytes = operator.getitem + iterbytes = iter + import io + StringIO = io.StringIO + BytesIO = io.BytesIO +else: + unichr = unichr + int2byte = chr + def indexbytes(buf, i): + return int(unknown()) + def iterbytes(buf): + return (int(unknown()) for byte in buf) + import StringIO + StringIO = BytesIO = StringIO.StringIO + + +if PY3: + exec_ = getattr(six.moves.builtins, "exec") + + def reraise(tp, value, tb=None): + """Reraise an exception.""" + if value.__traceback__ is not tb: + raise value.with_traceback(tb) + raise value + +else: + def exec_(_code_, _globs_=None, _locs_=None): + pass + + def reraise(tp, value, tb=None): + """Reraise an exception.""" + exc = tp(value) + exc.__traceback__ = tb + raise exc + + +print_ = getattr(moves.builtins, "print", None) +if print_ is None: + def print_(*args, **kwargs): + """The new-style print function for Python 2.4 and 2.5.""" + pass + +def with_metaclass(meta, *bases): + """Create a base class with a metaclass.""" + return meta("NewBase", bases, {}) + +def add_metaclass(metaclass): + """Class decorator for creating a class with a metaclass.""" + def wrapper(cls): + orig_vars = cls.__dict__.copy() + orig_vars.pop('__dict__', None) + orig_vars.pop('__weakref__', None) + slots = orig_vars.get('__slots__') + if slots is not None: + if isinstance(slots, str): + slots = [slots] + for slots_var in slots: + orig_vars.pop(slots_var) + return metaclass(cls.__name__, cls.__bases__, orig_vars) + return wrapper diff --git a/python/extractor/data/python/stubs/six/moves/__init__.py b/python/extractor/data/python/stubs/six/moves/__init__.py new file mode 100644 index 00000000000..26af6d6ed0d --- /dev/null +++ b/python/extractor/data/python/stubs/six/moves/__init__.py @@ -0,0 +1,239 @@ +# six.moves + +import sys +PY2 = sys.version_info < (3,) +PY3 = sys.version_info >= (3,) + +# Generated (six_gen.py) from six version 1.14.0 with Python 2.7.17 (default, Nov 18 2019, 13:12:39) +if PY2: + import cStringIO as _1 + cStringIO = _1.StringIO + import itertools as _2 + filter = _2.filter + filterfalse = _2.filterfalse + import __builtin__ as _3 + input = _3.raw_input + intern = _3.intern + map = _2.map + import os as _4 + getcwd = _4.getcwdu + getcwdb = _4.getcwd + import commands as _5 + getoutput = _5.getoutput + range = _3.xrange + reload_module = _3.reload + reduce = _3.reduce + import pipes as _6 + shlex_quote = _6.quote + import StringIO as _7 + StringIO = _7.StringIO + import UserDict as _8 + UserDict = _8.UserDict + import UserList as _9 + UserList = _9.UserList + import UserString as _10 + UserString = _10.UserString + xrange = _3.xrange + zip = zip + zip_longest = _2.zip_longest + import __builtin__ as builtins + import ConfigParser as configparser + import collections as collections_abc + import copy_reg as copyreg + import gdbm as dbm_gnu + import dbm as dbm_ndbm + import dummy_thread as _dummy_thread + import cookielib as http_cookiejar + import Cookie as http_cookies + import htmlentitydefs as html_entities + import HTMLParser as html_parser + import httplib as http_client + import email.MIMEBase as email_mime_base + import email.MIMEImage as email_mime_image + import email.MIMEMultipart as email_mime_multipart + import email.MIMENonMultipart as email_mime_nonmultipart + import email.MIMEText as email_mime_text + import BaseHTTPServer as BaseHTTPServer + import CGIHTTPServer as CGIHTTPServer + import SimpleHTTPServer as SimpleHTTPServer + import cPickle as cPickle + import Queue as queue + import repr as reprlib + import SocketServer as socketserver + import thread as _thread + import Tkinter as tkinter + import Dialog as tkinter_dialog + import FileDialog as tkinter_filedialog + import ScrolledText as tkinter_scrolledtext + import SimpleDialog as tkinter_simpledialog + import Tix as tkinter_tix + import ttk as tkinter_ttk + import Tkconstants as tkinter_constants + import Tkdnd as tkinter_dnd + import tkColorChooser as tkinter_colorchooser + import tkCommonDialog as tkinter_commondialog + import tkFileDialog as tkinter_tkfiledialog + import tkFont as tkinter_font + import tkMessageBox as tkinter_messagebox + import tkSimpleDialog as tkinter_tksimpledialog + import xmlrpclib as xmlrpc_client + import SimpleXMLRPCServer as xmlrpc_server + del _1 + del _5 + del _7 + del _8 + del _6 + del _3 + del _9 + del _2 + del _10 + del _4 + +# Generated (six_gen.py) from six version 1.14.0 with Python 3.8.0 (default, Nov 18 2019, 13:17:17) +if PY3: + import io as _1 + cStringIO = _1.StringIO + import builtins as _2 + filter = _2.filter + import itertools as _3 + filterfalse = _3.filterfalse + input = _2.input + import sys as _4 + intern = _4.intern + map = _2.map + import os as _5 + getcwd = _5.getcwd + getcwdb = _5.getcwdb + import subprocess as _6 + getoutput = _6.getoutput + range = _2.range + import importlib as _7 + reload_module = _7.reload + import functools as _8 + reduce = _8.reduce + import shlex as _9 + shlex_quote = _9.quote + StringIO = _1.StringIO + import collections as _10 + UserDict = _10.UserDict + UserList = _10.UserList + UserString = _10.UserString + xrange = _2.range + zip = _2.zip + zip_longest = _3.zip_longest + import builtins as builtins + import configparser as configparser + import collections.abc as collections_abc + import copyreg as copyreg + import dbm.gnu as dbm_gnu + import dbm.ndbm as dbm_ndbm + import _dummy_thread as _dummy_thread + import http.cookiejar as http_cookiejar + import http.cookies as http_cookies + import html.entities as html_entities + import html.parser as html_parser + import http.client as http_client + import email.mime.base as email_mime_base + import email.mime.image as email_mime_image + import email.mime.multipart as email_mime_multipart + import email.mime.nonmultipart as email_mime_nonmultipart + import email.mime.text as email_mime_text + import http.server as BaseHTTPServer + import http.server as CGIHTTPServer + import http.server as SimpleHTTPServer + import pickle as cPickle + import queue as queue + import reprlib as reprlib + import socketserver as socketserver + import _thread as _thread + import tkinter as tkinter + import tkinter.dialog as tkinter_dialog + import tkinter.filedialog as tkinter_filedialog + import tkinter.scrolledtext as tkinter_scrolledtext + import tkinter.simpledialog as tkinter_simpledialog + import tkinter.tix as tkinter_tix + import tkinter.ttk as tkinter_ttk + import tkinter.constants as tkinter_constants + import tkinter.dnd as tkinter_dnd + import tkinter.colorchooser as tkinter_colorchooser + import tkinter.commondialog as tkinter_commondialog + import tkinter.filedialog as tkinter_tkfiledialog + import tkinter.font as tkinter_font + import tkinter.messagebox as tkinter_messagebox + import tkinter.simpledialog as tkinter_tksimpledialog + import xmlrpc.client as xmlrpc_client + import xmlrpc.server as xmlrpc_server + del _1 + del _2 + del _3 + del _4 + del _5 + del _6 + del _7 + del _8 + del _9 + del _10 + +# Not generated: + +import six.moves.urllib as urllib +import six.moves.urllib_parse as urllib_parse +import six.moves.urllib_response as urllib_response +import six.moves.urllib_request as urllib_request +import six.moves.urllib_error as urllib_error +import six.moves.urllib_robotparser as urllib_robotparser + + +sys.modules['six.moves.builtins'] = builtins +sys.modules['six.moves.configparser'] = configparser +sys.modules['six.moves.collections_abc'] = collections_abc +sys.modules['six.moves.copyreg'] = copyreg +sys.modules['six.moves.dbm_gnu'] = dbm_gnu +sys.modules['six.moves.dbm_ndbm'] = dbm_ndbm +sys.modules['six.moves._dummy_thread'] = _dummy_thread +sys.modules['six.moves.http_cookiejar'] = http_cookiejar +sys.modules['six.moves.http_cookies'] = http_cookies +sys.modules['six.moves.html_entities'] = html_entities +sys.modules['six.moves.html_parser'] = html_parser +sys.modules['six.moves.http_client'] = http_client +sys.modules['six.moves.email_mime_base'] = email_mime_base +sys.modules['six.moves.email_mime_image'] = email_mime_image +sys.modules['six.moves.email_mime_multipart'] = email_mime_multipart +sys.modules['six.moves.email_mime_nonmultipart'] = email_mime_nonmultipart +sys.modules['six.moves.email_mime_text'] = email_mime_text +sys.modules['six.moves.BaseHTTPServer'] = BaseHTTPServer +sys.modules['six.moves.CGIHTTPServer'] = CGIHTTPServer +sys.modules['six.moves.SimpleHTTPServer'] = SimpleHTTPServer +sys.modules['six.moves.cPickle'] = cPickle +sys.modules['six.moves.queue'] = queue +sys.modules['six.moves.reprlib'] = reprlib +sys.modules['six.moves.socketserver'] = socketserver +sys.modules['six.moves._thread'] = _thread +sys.modules['six.moves.tkinter'] = tkinter +sys.modules['six.moves.tkinter_dialog'] = tkinter_dialog +sys.modules['six.moves.tkinter_filedialog'] = tkinter_filedialog +sys.modules['six.moves.tkinter_scrolledtext'] = tkinter_scrolledtext +sys.modules['six.moves.tkinter_simpledialog'] = tkinter_simpledialog +sys.modules['six.moves.tkinter_tix'] = tkinter_tix +sys.modules['six.moves.tkinter_ttk'] = tkinter_ttk +sys.modules['six.moves.tkinter_constants'] = tkinter_constants +sys.modules['six.moves.tkinter_dnd'] = tkinter_dnd +sys.modules['six.moves.tkinter_colorchooser'] = tkinter_colorchooser +sys.modules['six.moves.tkinter_commondialog'] = tkinter_commondialog +sys.modules['six.moves.tkinter_tkfiledialog'] = tkinter_tkfiledialog +sys.modules['six.moves.tkinter_font'] = tkinter_font +sys.modules['six.moves.tkinter_messagebox'] = tkinter_messagebox +sys.modules['six.moves.tkinter_tksimpledialog'] = tkinter_tksimpledialog +sys.modules['six.moves.xmlrpc_client'] = xmlrpc_client +sys.modules['six.moves.xmlrpc_server'] = xmlrpc_server + +# Windows special + +if PY2: + import _winreg as winreg +if PY3: + import winreg as winreg + +sys.modules['six.moves.winreg'] = winreg + +del sys diff --git a/python/extractor/data/python/stubs/six/moves/urllib/__init__.py b/python/extractor/data/python/stubs/six/moves/urllib/__init__.py new file mode 100644 index 00000000000..b2dce83a06e --- /dev/null +++ b/python/extractor/data/python/stubs/six/moves/urllib/__init__.py @@ -0,0 +1,15 @@ +import sys + +import six.moves.urllib_error as error +import six.moves.urllib_parse as parse +import six.moves.urllib_request as request +import six.moves.urllib_response as response +import six.moves.urllib_robotparser as robotparser + +sys.modules['six.moves.urllib.error'] = error +sys.modules['six.moves.urllib.parse'] = parse +sys.modules['six.moves.urllib.request'] = request +sys.modules['six.moves.urllib.response'] = response +sys.modules['six.moves.urllib.robotparser'] = robotparser + +del sys diff --git a/python/extractor/data/python/stubs/six/moves/urllib_error.py b/python/extractor/data/python/stubs/six/moves/urllib_error.py new file mode 100644 index 00000000000..beb5b4dab28 --- /dev/null +++ b/python/extractor/data/python/stubs/six/moves/urllib_error.py @@ -0,0 +1,21 @@ +# six.moves.urllib_error + +from six import PY2, PY3 + +# Generated (six_gen.py) from six version 1.14.0 with Python 2.7.17 (default, Nov 18 2019, 13:12:39) +if PY2: + import urllib2 as _1 + URLError = _1.URLError + HTTPError = _1.HTTPError + import urllib as _2 + ContentTooShortError = _2.ContentTooShortError + del _1 + del _2 + +# Generated (six_gen.py) from six version 1.14.0 with Python 3.8.0 (default, Nov 18 2019, 13:17:17) +if PY3: + import urllib.error as _1 + URLError = _1.URLError + HTTPError = _1.HTTPError + ContentTooShortError = _1.ContentTooShortError + del _1 diff --git a/python/extractor/data/python/stubs/six/moves/urllib_parse.py b/python/extractor/data/python/stubs/six/moves/urllib_parse.py new file mode 100644 index 00000000000..7eb87909634 --- /dev/null +++ b/python/extractor/data/python/stubs/six/moves/urllib_parse.py @@ -0,0 +1,65 @@ +# six.moves.urllib_parse + +from six import PY2, PY3 + +# Generated (six_gen.py) from six version 1.14.0 with Python 2.7.17 (default, Nov 18 2019, 13:12:39) +if PY2: + import urlparse as _1 + ParseResult = _1.ParseResult + SplitResult = _1.SplitResult + parse_qs = _1.parse_qs + parse_qsl = _1.parse_qsl + urldefrag = _1.urldefrag + urljoin = _1.urljoin + urlparse = _1.urlparse + urlsplit = _1.urlsplit + urlunparse = _1.urlunparse + urlunsplit = _1.urlunsplit + import urllib as _2 + quote = _2.quote + quote_plus = _2.quote_plus + unquote = _2.unquote + unquote_plus = _2.unquote_plus + unquote_to_bytes = _2.unquote + urlencode = _2.urlencode + splitquery = _2.splitquery + splittag = _2.splittag + splituser = _2.splituser + splitvalue = _2.splitvalue + uses_fragment = _1.uses_fragment + uses_netloc = _1.uses_netloc + uses_params = _1.uses_params + uses_query = _1.uses_query + uses_relative = _1.uses_relative + del _1 + del _2 + +# Generated (six_gen.py) from six version 1.14.0 with Python 3.8.0 (default, Nov 18 2019, 13:17:17) +if PY3: + import urllib.parse as _1 + ParseResult = _1.ParseResult + SplitResult = _1.SplitResult + parse_qs = _1.parse_qs + parse_qsl = _1.parse_qsl + urldefrag = _1.urldefrag + urljoin = _1.urljoin + urlparse = _1.urlparse + urlsplit = _1.urlsplit + urlunparse = _1.urlunparse + urlunsplit = _1.urlunsplit + quote = _1.quote + quote_plus = _1.quote_plus + unquote = _1.unquote + unquote_plus = _1.unquote_plus + unquote_to_bytes = _1.unquote_to_bytes + urlencode = _1.urlencode + splitquery = _1.splitquery + splittag = _1.splittag + splituser = _1.splituser + splitvalue = _1.splitvalue + uses_fragment = _1.uses_fragment + uses_netloc = _1.uses_netloc + uses_params = _1.uses_params + uses_query = _1.uses_query + uses_relative = _1.uses_relative + del _1 diff --git a/python/extractor/data/python/stubs/six/moves/urllib_request.py b/python/extractor/data/python/stubs/six/moves/urllib_request.py new file mode 100644 index 00000000000..c43331560e3 --- /dev/null +++ b/python/extractor/data/python/stubs/six/moves/urllib_request.py @@ -0,0 +1,85 @@ +# six.moves.urllib_request + +from six import PY2, PY3 + +# Generated (six_gen.py) from six version 1.14.0 with Python 2.7.17 (default, Nov 18 2019, 13:12:39) +if PY2: + import urllib2 as _1 + urlopen = _1.urlopen + install_opener = _1.install_opener + build_opener = _1.build_opener + import urllib as _2 + pathname2url = _2.pathname2url + url2pathname = _2.url2pathname + getproxies = _2.getproxies + Request = _1.Request + OpenerDirector = _1.OpenerDirector + HTTPDefaultErrorHandler = _1.HTTPDefaultErrorHandler + HTTPRedirectHandler = _1.HTTPRedirectHandler + HTTPCookieProcessor = _1.HTTPCookieProcessor + ProxyHandler = _1.ProxyHandler + BaseHandler = _1.BaseHandler + HTTPPasswordMgr = _1.HTTPPasswordMgr + HTTPPasswordMgrWithDefaultRealm = _1.HTTPPasswordMgrWithDefaultRealm + AbstractBasicAuthHandler = _1.AbstractBasicAuthHandler + HTTPBasicAuthHandler = _1.HTTPBasicAuthHandler + ProxyBasicAuthHandler = _1.ProxyBasicAuthHandler + AbstractDigestAuthHandler = _1.AbstractDigestAuthHandler + HTTPDigestAuthHandler = _1.HTTPDigestAuthHandler + ProxyDigestAuthHandler = _1.ProxyDigestAuthHandler + HTTPHandler = _1.HTTPHandler + HTTPSHandler = _1.HTTPSHandler + FileHandler = _1.FileHandler + FTPHandler = _1.FTPHandler + CacheFTPHandler = _1.CacheFTPHandler + UnknownHandler = _1.UnknownHandler + HTTPErrorProcessor = _1.HTTPErrorProcessor + urlretrieve = _2.urlretrieve + urlcleanup = _2.urlcleanup + URLopener = _2.URLopener + FancyURLopener = _2.FancyURLopener + proxy_bypass = _2.proxy_bypass + parse_http_list = _1.parse_http_list + parse_keqv_list = _1.parse_keqv_list + del _1 + del _2 + +# Generated (six_gen.py) from six version 1.14.0 with Python 3.8.0 (default, Nov 18 2019, 13:17:17) +if PY3: + import urllib.request as _1 + urlopen = _1.urlopen + install_opener = _1.install_opener + build_opener = _1.build_opener + pathname2url = _1.pathname2url + url2pathname = _1.url2pathname + getproxies = _1.getproxies + Request = _1.Request + OpenerDirector = _1.OpenerDirector + HTTPDefaultErrorHandler = _1.HTTPDefaultErrorHandler + HTTPRedirectHandler = _1.HTTPRedirectHandler + HTTPCookieProcessor = _1.HTTPCookieProcessor + ProxyHandler = _1.ProxyHandler + BaseHandler = _1.BaseHandler + HTTPPasswordMgr = _1.HTTPPasswordMgr + HTTPPasswordMgrWithDefaultRealm = _1.HTTPPasswordMgrWithDefaultRealm + AbstractBasicAuthHandler = _1.AbstractBasicAuthHandler + HTTPBasicAuthHandler = _1.HTTPBasicAuthHandler + ProxyBasicAuthHandler = _1.ProxyBasicAuthHandler + AbstractDigestAuthHandler = _1.AbstractDigestAuthHandler + HTTPDigestAuthHandler = _1.HTTPDigestAuthHandler + ProxyDigestAuthHandler = _1.ProxyDigestAuthHandler + HTTPHandler = _1.HTTPHandler + HTTPSHandler = _1.HTTPSHandler + FileHandler = _1.FileHandler + FTPHandler = _1.FTPHandler + CacheFTPHandler = _1.CacheFTPHandler + UnknownHandler = _1.UnknownHandler + HTTPErrorProcessor = _1.HTTPErrorProcessor + urlretrieve = _1.urlretrieve + urlcleanup = _1.urlcleanup + URLopener = _1.URLopener + FancyURLopener = _1.FancyURLopener + proxy_bypass = _1.proxy_bypass + parse_http_list = _1.parse_http_list + parse_keqv_list = _1.parse_keqv_list + del _1 diff --git a/python/extractor/data/python/stubs/six/moves/urllib_response.py b/python/extractor/data/python/stubs/six/moves/urllib_response.py new file mode 100644 index 00000000000..d0903b61bf8 --- /dev/null +++ b/python/extractor/data/python/stubs/six/moves/urllib_response.py @@ -0,0 +1,21 @@ +# six.moves.urllib_response + +from six import PY2, PY3 + +# Generated (six_gen.py) from six version 1.14.0 with Python 2.7.17 (default, Nov 18 2019, 13:12:39) +if PY2: + import urllib as _1 + addbase = _1.addbase + addclosehook = _1.addclosehook + addinfo = _1.addinfo + addinfourl = _1.addinfourl + del _1 + +# Generated (six_gen.py) from six version 1.14.0 with Python 3.8.0 (default, Nov 18 2019, 13:17:17) +if PY3: + import urllib.response as _1 + addbase = _1.addbase + addclosehook = _1.addclosehook + addinfo = _1.addinfo + addinfourl = _1.addinfourl + del _1 diff --git a/python/extractor/data/python/stubs/six/moves/urllib_robotparser.py b/python/extractor/data/python/stubs/six/moves/urllib_robotparser.py new file mode 100644 index 00000000000..e49ef0ade88 --- /dev/null +++ b/python/extractor/data/python/stubs/six/moves/urllib_robotparser.py @@ -0,0 +1,15 @@ +# six.moves.urllib_robotparser + +from six import PY2, PY3 + +# Generated (six_gen.py) from six version 1.14.0 with Python 2.7.17 (default, Nov 18 2019, 13:12:39) +if PY2: + import robotparser as _1 + RobotFileParser = _1.RobotFileParser + del _1 + +# Generated (six_gen.py) from six version 1.14.0 with Python 3.8.0 (default, Nov 18 2019, 13:17:17) +if PY3: + import urllib.robotparser as _1 + RobotFileParser = _1.RobotFileParser + del _1 diff --git a/python/extractor/docs/extractor-python-index.svg b/python/extractor/docs/extractor-python-index.svg new file mode 100644 index 00000000000..e7dc29b7366 --- /dev/null +++ b/python/extractor/docs/extractor-python-index.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="801px" height="1088px" viewBox="-0.5 -0.5 801 1088" content="<mxfile host="app.diagrams.net" modified="2020-03-20T14:15:04.133Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" etag="zTW1ETnMwVn0UgCgNkTc" version="12.8.8" type="google"><diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">7Vxbd9o6Fv41rCQPsHzDkMdA0kyn6ZlMc057Oi8sgQX4RFjElhPIrx9JlvFFwhiDgTakXQmWt67706etvSUaZn+2uPfBfPoVOxA1DM1ZNMzbhmHodsekf1jKMkrpdttRwsR3HSGUJDy571AkaiI1dB0YZAQJxoi482ziCHseHJFMGvB9/JYVG2OUrXUOJlBKeBoBJKf+cB0yFb0wOkn6v6A7mcY16/Z19GYGYmHRk2AKHPyWSjLvGmbfx5hEn2aLPkRs8OJx+fF5+QM9PNv3//5v8AL+6n3584/vzaiwT9tkWXXBhx6pXDT4/oezNLSX8Lanjb/bpvXZnDeFcl8BCsV4+aEXiP6SZTyI0KFjKh6xT6Z4gj2A7pLUno9Dz4GsKo0+JTIPGM9pok4T/4GELAVAQEgwTZqSGRJvS/ZRjEWAQ38EC+RExwjwJ5AUDIARybEOpvAiRvAe4hkk/pIK+BAB4r5mQQUENicruVXWR+zSfiQieDwOaENSCqIfUjUkSVxtW6BDVuGITuIXPosBAUMQQDa9fAgIlBSbVdvb1CXwaQ74yL5RPsiqaIw9IvSn0472JggEgcgaEB8/r2YYk15NFy3OKqotC2ch9wp9AheFyhFvLTFRl9nHt2Ta622RNk1N+VhOpc2Msgo0o8RWW9IMXMBRw7DBjI2sNwzYn/mSzhWPlUU1sWjNlxuUVGFuITCE6BEHLnFpTebtiA489OkLNrYu5cqHnMDMdRw+rQFyJ8ocN+LFShKiIdd2LMCSPDqKf7Nmt9rx40/RC/5wu8g8LeOnjWxTnSyKSGAjWVj7Joud4GVI8ELAm4R0QWvSKfxMWfxTjK1PbMllCQwbw9BFTiuYHo0Mpth332l2EJe1FlTHoA3dkHnD6B6SNyxJsdtyRH26y6uKMAo6ip4MTdZTx1boyW7XpShdZvi1Cgre3BmdnzKqzd5oSifkA1jikLU4IHTyxk/yXKGv/Vh5hs1KcxHqY4QpO996mFeQZHpihQnV+TCg2R5jvei5pK9gkRF8AAERCSOMEJgH7nDV5BmlStfrYULwLM6VQWC8cCA4JlsTdnlM2DlMqNZ8y5Yx0elutOC+0d0I5VMEk9pMy8pU15ZrUxGFYWcrA4iupR41x3psyIIdjUI1Mm0JmfoVa4Lj0N/v7pyiBvKtGFcLkRcDqgCyooMcvhSQy+lbTRMBZSTXmzxwmVsrSfkmBoslYZp3jDjhTOk6AD2OLcJMWd42hq45s675aLZ79D8d8z6zMdq04X36rCfP9D8T90kfe7QvwOX4gxTbbzBQI7N4qm+G5jKr9U1QzKNjf+zUkTBgMAzw9Z8bBK2IrWZ0VC6vKiOgYZh3/OcMAwUM2saxYXAtwUBSNfScG+ZrYZY+swXcUdZgqGrJb0f7afu7aKu70f5OjbVqwxenVd3Tx3qPwbAySLIlRNsOkSntmMmVY+UMG9POFRSNi1TQvtaKuOenD5BTUbyZszqqal4qKL+lqFvz8hay7OJwNmcPYM6aCgPT0hTA1jWrij2br66sx+wIBq0huzm5QUvHNnD51pgnpo0bxw1GzIpo0Sk0EHI7mDkfxNBdccIuhq4SpLVZOIbsMOGGLp4zd2agwkbEbVTzPhgR7A+E6KWAyVqU/LLaX2ew14YKhd17YFTIzhmToSIIh3Mfj2AQtEZTOHoeUP2hSzqcF8LL1unFpNK5vWAjbWji1YDBhRLKfHnBlUC700twdqaWvYModtMcD0Qd2RSuPxYKFy75O/X5Z2JY06fElGYP1SzpjSGR2HmwOYBqlLTN9x4UsSbAf/+6dL6Mnrt/DbrPnTb4pyn7PI6hwOrKUHbKknWhlLNPShXyqtwwbEQixvIyOrFfQnaKoscIsylo8IZKcCY0InhrPKjRDKKoBnvrYR7aWOWmnybsb4l1Pm4J7VjUmCjngRq4MlqP2YirtdUfKbR0kCBSW8vtea7b0hJTW7QvRP8bd5zPL08/396dz/f98B2Ny7lf6qcsNvopA9G6Zf9WcMhRyh65zZa5TT1Mmlqvh+EyOZxScZbmZ+HGYqqzHtv2stBOWdI7c+FH40I9y4VWV/b/GKqIen1cKHt5TokLd/Ny74VDC7ixBInuyqFqN7adC2DY3drc2IXdP7KlGRCAEGdd5A594C9T3qSTZxeJNcrCcz275IIbbVvBLkZN7KJcxPWjkEmVzfxhwmkbeUVxiFo9sGXjc9sRzY3vg2VKQHis1vJQp50NyHbE3YV14bdOdzf5bkcrlLcMrUiefoh6qM7dNXK16eVYVUHP2YIkel4TrqxAz2p0yIu65IPFIZmHZH10JjWfyh9J5oG/tR5PtqDzg9E9MHqe8GmeWvPH/Ec5pQq5RcGj4maLaEjDWLeTEbm0lh67M0/i0oGyu+1fj0kzPJrQ6t6ZtDBEtZFKj3bEvJDYpaPIA3aTIYwwbWhRgNV7ZYbP+XAyJ+vrkoeT9U5t1s5v6QrXy04k/bSc4brsDb/gbpoLrhFINxcaP8bwcP/n19YIz442iQ7jeth8V8tQBfrq2xt0j7miJavYz9SbU9kbFM6v0700pW62fBp28+WaX8YI7e7LCG1qLa0TB7+XmZKqGqWilGYuR302quIOBJqQWTNx2tBiMw+r63IREo54Re4o/l/lzbe6/L9KlSk9eXlaPh9Fbqx1vVY9iZwvp76DyEpHUxlTtVa1V/TNH+0Ees43dJ33DZU+gZ4vyDys4hUbzGPYYWsDPnv0OOimvQGK/OkR+i4dVWZUHCR21JbNOKVcd0errZJH18i5Lq83eFyN7o7yoj6lh3ZfmJfXOEUY6Tv0XlvIHZ6vXiivXuw/XGXmmNBWbEktU+XBuS6whkR1v8zdCzVJS4DlVy8CiMYt7vbLOAOZRN9o3NC2W8yZMfjxn29fnh5v+ne0cibOrG7XS5nb6t3Wb39qOj15jYJFqBTitwn3F9zbUAF8H4er1XF7CVfGVQQdd8zcYUGLHV9q0dU1IMGlCm5XPDxP22fqfK0UuNMKPqj817xyjapPCWmm24IqIArgts3gv9e3JEmKe/0hb6XsH/KqSykqyNsFXw+xE+TlUCi/k8L5eVsk+5CEPj/doo6mokslwviVFXbdJRe1udgI9MUIzsn27VydxaFjyIqhuzifjTfwHETh12DOKYd/GcUUEL6uwBm7tDUMJ5Pl2rMyH2WVqGsqqJw9yrmwjwCVsn1yRGRTHPFs+dZyUGuNCyBtiV6rSLKS3XuS36FTtDNORwp8Oj0v0yi9vProt/6qMJO1rV2qxJ9ZcOd9J2LqSorPEFNW/2eSOsr2vDRL6XnX6O9GU3JAs4Q1ubId5+58IHxO0Bmwb1eGPgN1kvdMb9vS2xpX6Zb0ZtVFb/GEyHwvbRnTfgWasesHZBC4BA7YN42CCQzO3x9WD1o6JWmuQkiWPiZfXh6xUfIV8Obd/wE=</diagram></mxfile>" style="background-color: rgb(255, 255, 255);"><defs><clipPath id="mx-clip-48-282-138-26-0"><rect x="48" y="282" width="138" height="26"/></clipPath><clipPath id="mx-clip-48-308-138-26-0"><rect x="48" y="308" width="138" height="26"/></clipPath><clipPath id="mx-clip-48-392-392-26-0"><rect x="48" y="392" width="392" height="26"/></clipPath><clipPath id="mx-clip-48-418-392-26-0"><rect x="48" y="418" width="392" height="26"/></clipPath><clipPath id="mx-clip-48-444-392-26-0"><rect x="48" y="444" width="392" height="26"/></clipPath><clipPath id="mx-clip-313-682-422-26-0"><rect x="313" y="682" width="422" height="26"/></clipPath><clipPath id="mx-clip-313-708-422-68-0"><rect x="313" y="708" width="422" height="68"/></clipPath><clipPath id="mx-clip-313-776-422-70-0"><rect x="313" y="776" width="422" height="70"/></clipPath><clipPath id="mx-clip-43-972-182-34-0"><rect x="43" y="972" width="182" height="34"/></clipPath><clipPath id="mx-clip-313-972-182-44-0"><rect x="313" y="972" width="182" height="44"/></clipPath><clipPath id="mx-clip-313-1016-182-40-0"><rect x="313" y="1016" width="182" height="40"/></clipPath></defs><g><path d="M 99 91 L 99 111.06 L 164.06 111.06 L 164.06 124.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 164.06 129.88 L 160.56 122.88 L 164.06 124.63 L 167.56 122.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 111px; margin-left: 132px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">runs</div></div></div></foreignObject><text x="132" y="114" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">runs</text></switch></g><rect x="24" y="51" width="150" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 148px; height: 1px; padding-top: 71px; margin-left: 25px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">codeql database create</div></div></div></foreignObject><text x="99" y="75" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle" font-weight="bold">codeql database create</text></switch></g><path d="M 164.06 171 L 164.06 191.06 L 404.06 191.06 L 404.02 204.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 404 209.88 L 400.52 202.87 L 404.02 204.63 L 407.52 202.89 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 191px; margin-left: 284px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">exec python index.py</div></div></div></foreignObject><text x="284" y="194" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">exec python index.py</text></switch></g><rect x="24" y="131" width="280" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 278px; height: 1px; padding-top: 151px; margin-left: 25px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">language-packs/python/tools/autobuild.sh</div></div></div></foreignObject><text x="164" y="155" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle" font-weight="bold">language-packs/python/tools/autobuild.sh</text></switch></g><rect x="24" y="211" width="760" height="650" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 758px; height: 1px; padding-top: 218px; margin-left: 25px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">python index.py</div></div></div></foreignObject><text x="404" y="230" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle" font-weight="bold">python index.py</text></switch></g><path d="M 44 277 L 44 251 L 190 251 L 190 277" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 44 277 L 44 329 L 190 329 L 190 277" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 44 277 L 190 277" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g fill="#000000" font-family="Helvetica" font-weight="bold" font-size="12px"><text x="45.5" y="268.5">index.py</text></g><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-48-282-138-26-0)" font-size="12px"><text x="49.5" y="294.5">1) add zipfile to path</text></g><rect x="44" y="303" width="146" height="26" fill="#eeeeee" stroke="none" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-48-308-138-26-0)" font-size="12px"><text x="49.5" y="320.5">2) buildtools.index.main()</text></g><path d="M 99 31 L 99 44.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 99 49.88 L 95.5 42.88 L 99 44.63 L 102.5 42.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 114 231 L 114 244.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 114 249.88 L 110.5 242.88 L 114 244.63 L 117.5 242.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 44 387 L 44 361 L 444 361 L 444 387" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 44 387 L 44 465 L 444 465 L 444 387" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 44 387 L 444 387" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g fill="#000000" font-family="Helvetica" font-weight="bold" font-size="12px"><text x="45.5" y="378.5">buildtools.index.main()</text></g><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-48-392-392-26-0)" font-size="12px"><text x="49.5" y="404.5">1) version = buildtools.discover.get_version()</text></g><rect x="44" y="413" width="400" height="26" fill="#eeeeee" stroke="none" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-48-418-392-26-0)" font-size="12px"><text x="49.5" y="430.5">2) options = buildtools.index.extractor_options(version)</text></g><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-48-444-392-26-0)" font-size="12px"><text x="49.5" y="456.5">3) subprocess.check_call(['python{version}', 'python_tracer.py'] + options)</text></g><path d="M 190 316 L 244.06 316 L 244.06 354.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 244.06 359.88 L 240.56 352.88 L 244.06 354.63 L 247.56 352.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 624 446 L 624 484.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 624 489.88 L 620.5 482.88 L 624 484.63 L 627.5 482.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="484" y="406" width="280" height="40" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 278px; height: 1px; padding-top: 426px; margin-left: 485px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; word-wrap: normal; "><span style="text-align: left ; white-space: nowrap">buildtools.index.extractor_options(</span><span style="text-align: left ; white-space: nowrap">version</span><span style="text-align: left ; white-space: nowrap">)</span></div></div></div></foreignObject><text x="624" y="430" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle" font-weight="bold">buildtools.index.extractor_options(version)</text></switch></g><path d="M 624 531 L 624 564.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 624 569.88 L 620.5 562.88 L 624 564.63 L 627.5 562.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="494" y="491" width="260" height="40" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 258px; height: 1px; padding-top: 511px; margin-left: 495px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; word-wrap: normal; "><span style="text-align: left"><span style="white-space: nowrap">buildtools.index.get_path_options(</span></span><span style="text-align: left ; white-space: nowrap">version</span><span style="text-align: left ; white-space: nowrap">)</span></div></div></div></foreignObject><text x="624" y="515" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle" font-weight="bold">buildtools.index.get_path_options(version)</text></switch></g><path d="M 624.06 611 L 624.06 631.06 L 524.06 631.06 L 524.02 644.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 524 649.88 L 520.52 642.87 L 524.02 644.63 L 527.52 642.89 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="514" y="571" width="220" height="40" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 218px; height: 1px; padding-top: 591px; margin-left: 515px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; word-wrap: normal; "><span style="text-align: left ; white-space: nowrap">buildtools.install.get_library(version)</span></div></div></div></foreignObject><text x="624" y="595" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle" font-weight="bold">buildtools.install.get_library(versi...</text></switch></g><path d="M 739 806 L 739 784 L 769 784 L 769 881.06 L 404.06 881.06 L 404.02 894.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 404 899.88 L 400.52 892.87 L 404.02 894.63 L 407.52 892.89 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 882px; margin-left: 617px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; background-color: #ffffff; white-space: nowrap; ">subprocess.check_output()</div></div></div></foreignObject><text x="617" y="885" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">subprocess.check_output()</text></switch></g><path d="M 444 426 L 477.63 426" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 482.88 426 L 475.88 429.5 L 477.63 426 L 475.88 422.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="24" y="901" width="760" height="170" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 758px; height: 1px; padding-top: 908px; margin-left: 25px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; word-wrap: normal; ">python_executable get_venv_lib.py</div></div></div></foreignObject><text x="404" y="920" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle" font-weight="bold">python_executable get_venv_lib.py</text></switch></g><path d="M 624 91 L 624 124.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 624 129.88 L 620.5 122.88 L 624 124.63 L 627.5 122.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="524" y="51" width="200" height="40" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 71px; margin-left: 525px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; word-wrap: normal; ">'index' step on LGTM.com</div></div></div></foreignObject><text x="624" y="75" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle" font-weight="bold">'index' step on LGTM.com</text></switch></g><path d="M 624 171 L 624.06 191.06 L 404.06 191.06 L 404.02 204.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 404 209.88 L 400.52 202.87 L 404.02 204.63 L 407.52 202.89 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 192px; margin-left: 525px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; background-color: #ffffff; white-space: nowrap; ">python index.py</div></div></div></foreignObject><text x="525" y="195" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">python index.py</text></switch></g><rect x="494" y="131" width="260" height="40" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 258px; height: 1px; padding-top: 151px; margin-left: 495px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; word-wrap: normal; ">lgtm-buildtools/buildtools/python/index.sh</div></div></div></foreignObject><text x="624" y="155" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle" font-weight="bold">lgtm-buildtools/buildtools/python/index.sh</text></switch></g><path d="M 624 31 L 624 44.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 624 49.88 L 620.5 42.88 L 624 44.63 L 627.5 42.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 109 921 L 109 934.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 109 939.88 L 105.5 932.88 L 109 934.63 L 112.5 932.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 229 984 L 229 981.06 L 269 981.06 L 269 956 L 302.63 955.97" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 307.88 955.96 L 300.89 959.47 L 302.63 955.97 L 300.88 952.47 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 309 677 L 309 651 L 739 651 L 739 677" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 309 677 L 309 841 L 739 841 L 739 677" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 309 677 L 739 677" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g fill="#000000" font-family="Helvetica" font-weight="bold" font-size="12px"><text x="310.5" y="668.5">buildtools.install.Venv.lib()</text></g><g fill="#4D4D4D" font-family="Helvetica" font-style="italic" clip-path="url(#mx-clip-313-682-422-26-0)" font-size="12px"><text x="314.5" y="694.5">1) self.venv_executable = $LGTM_WORKSPACE/venv/bin/python</text></g><rect x="309" y="703" width="430" height="68" fill="#eeeeee" stroke="none" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-313-708-422-68-0)" font-size="12px"><text x="314.5" y="720.5">2) if os.path.exists(self.venv_executable):</text><text x="314.5" y="734.5">        python_executable = [self.venv_executable]</text><text x="314.5" y="748.5">    else:</text><text x="314.5" y="762.5">        python_executable = executable(self.version)</text></g><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-313-776-422-70-0)" font-size="12px"><text x="314.5" y="788.5">3) try:</text><text x="314.5" y="802.5">        return subprocess.check_outputl(python_executable + ['get_venv_lib.py']</text><text x="314.5" y="816.5">    except:</text><text x="314.5" y="830.5">        <some error handling code that seems buggy></text></g><path d="M 39 967 L 39 941 L 229 941 L 229 967" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 39 967 L 39 1001 L 229 1001 L 229 967" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 39 967 L 229 967" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g fill="#000000" font-family="Helvetica" font-weight="bold" font-size="12px"><text x="40.5" y="958.5">get_venv_lib.py</text></g><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-43-972-182-34-0)" font-size="12px"><text x="44.5" y="984.5">print(get_venv_lib())</text></g><path d="M 309 967 L 309 941 L 499 941 L 499 967" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 309 967 L 309 1051 L 499 1051 L 499 967" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 309 967 L 499 967" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g fill="#000000" font-family="Helvetica" font-weight="bold" font-size="12px"><text x="310.5" y="958.5">get_venv_lib.get_venv_lib()</text></g><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-313-972-182-44-0)" font-size="12px"><text x="314.5" y="984.5">try:</text><text x="314.5" y="998.5">    return pip_installed_folder()</text></g><rect x="309" y="1011" width="190" height="40" fill="#eeeeee" stroke="none" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-313-1016-182-40-0)" font-size="12px"><text x="314.5" y="1028.5">except:</text><text x="314.5" y="1042.5">    return first_site_packages()</text></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://desk.draw.io/support/solutions/articles/16000042487" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg> \ No newline at end of file diff --git a/python/extractor/docs/extractor-python-setup.svg b/python/extractor/docs/extractor-python-setup.svg new file mode 100644 index 00000000000..339568416e7 --- /dev/null +++ b/python/extractor/docs/extractor-python-setup.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1081px" height="1259px" viewBox="-0.5 -0.5 1081 1259" content="<mxfile host="app.diagrams.net" modified="2020-03-20T14:14:46.526Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" etag="NO_O0eu1dC2hdwInb0WO" version="12.8.8" type="google"><diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">7V1tc9q6Ev41DOTMhPELNuRjIGlPT5PT3CZtb+4XxrEFqDEWtUUC/fVXkiW/STYmweSlJDNgy5IsaZ9d7a5WomWO5quPobOYXSIP+C1D81Yt86xlGLrdN8kXTVnHKSc9I06YhtDjmdKEa/gb8ESNpy6hB6JcRoyQj+Ein+iiIAAuzqU5YYge89kmyM+/deFMgZRw7Tq+nPoDengWpw6Mfpr+N4DTmXizbp/ET+aOyMx7Es0cDz1mkszzljkKEcLx1Xw1Aj4dPDEuPz6tf/gX9/bHf/4T/XK+DT/f/Pv9OK7swzZFki6EIMBPrtq/Hd48mD8+zK2ftnF8//V/6+icF9EeHH/Jx2uxxjMU0O4CvFx0F2veebwWIxqiZeABWqvWMoePM4jB9cJx6dNHgiGSNsNzn9zp5HKCAsxBoZMRG059J4p40QiH6D6hCs2dDDF9/ABCDAkhT304DUgaRgtRIW9M3YHh+WiFYJWBBR+ojwDNAQ5JTzX+tMfHhWPeGPD7xxRBuiYyzTLwsWye6HDYTpO6U9KQC04dNaV6Uyf8fbn2Prv3g2/jwX3fcn4eGz2JVBJlgEegz29RSOg4RYHjn6epwzzt0jwXiA4uo8FPgPGak8xZYpSn53YjHqFl6IKqXgmR4IRTgKsycjFEu1hJwRD4DoYPee7fPTV0iRrtmHPGjG/ajDBgQb4YM118vLnsumj+Ysy0H7Yp8E1PZhtDxTW9xpjGLpdvLcJR/SElzHj47dPF2c2XLxfXrT7J80Hk+VAqA/fAaWAF8X9p8a7F724zT85WvGZ2sxY3ARm1TCF6e5t9lhZjd6LcrrnarMvV1uvialOCiz/F8+O7JfQ9qrVEpNrcTZbnu9HsnbO3kWdv3VDw92Cv/G3UmBQD75TqkeTOpQMK3QKf7YVnNiI8M4aWSrHgabUZgb/hCkHSvISEiX4iNJsCZWLW5oWyyuSGeooUjjlfqocROel0Lbor1dYXUX2eIpB3LVgtWbBW6fX7l6vK1shitWXYPuZyK0dI+9cSiQfHESPFKcmg64tV+pBcTel3tLxbhMgFUdQldoLfaVnDNJOYxNNCIzbrp/e96/PLy4vz8dmn6xvSLyHT00k/yWqdHYkWkwxxo+MmSEAkshTnceNw+8UlGAChwrCZQ8+LIQpIj507VhVFz4LyDyOGRdtAUnznDvhDx72fMjiPkI9C9l5zwv6UkKtiIUn6J5Y4b0cra+yqZgWta2rmID8x7ERWCa5Yi1sjXwOaTAipnileKtlMAVgPPijxSsl+zClNAeuDCZYBK2qJFk6grIZpCMdRrCLQegLE9ASpplp6SR7MAr7xy/MNIsmsZyWgfl9qjFmcAxVqjN2QGqPkxf5Bi9lKMugFCppFytRVY6SKiu6bhvUYXUHo/Sky4vo2p9TsWpFRd/ykpiIzeFWKjOyDK/UQRI9w7jsBkKSaOXRnRFJfOGu0pD2PMJnOxd1whkL4m+R3BLHI41CIU8OmtUHfF/N+gNgL0kLXtDJOMqZNgCtBMr2QdOmschkvnAjzBBf5vrOI4F3S5DmhEwyGCGM0F6VyMBRKDpv3toVLfdltl/BrRu6YKtGta72NQuYrVXqCKelz8jqz18u9z5Jfp7J3hdtJvMzxieIXOBgM6ZhFTUgSWWPRj2gLPI98/oYLghraLyIKKFmw7Kngems8QRfwpYBcgd5qXz3VY2AwvWB5znppylc+VjQJkbITn81sM6IIg4BhCzu4VBEekiEfUYFFVGKi1FtDPb1nWvKCCMURCkhfHMjwBwi2H0GkRmYlp29G5jpP801ILGJjZ7JJdnUaR62R0TqlnYgg1QapAcTWq+Ir8GsJQzAnAzGm8IioeUQLaqkq2fVg5FIKJRedoydDh1gp5+zvgB8ZP5bxwvgRU3IGQOZRHgyQDAmxs7tzMiyduqh6Ol4OokYNlf7ghaEykJCye5Ac9Kc96E+WwoNv6Soo9QZP0Z+K6ppiQVBX2YkvoEDJ0o8pUA8geFDNiwLl38nzTs6pyFYUf3z5+vn66nR0TtoSV5F3Q3K+OMjGDbJxUBvg5WqYGtCNTaNySI0hgNR1Q0BAXK5CvVlylql5TZFZoS3tl8ymHADCtKXMzBaNJyGax2vDiQghgsCZUypWCAxWYpytqYtXWC75h4qOkjUQMZdXxSrtBnwK/WvPMkYGX49Z++E0NeLIqCoVrjws6cNoHWEwHxPC3jtTEHWSyck6O9h6TQAo8Ua9GIIMecnBoghSrKiyiYt+jMEKuMt4qBlu2i4KaKfHwgnaZqNM+jHkYHzfEx2HfWMoMesq542hRDb0bO5TghOSjqIu9SV2wQpGOOqUCJkjtpJJ2mjqbCWBlacwKb8od02xJf6qWTaDQLkWSmvSmINcawixVk3tu7GVVEM24/ocsVnMJHBaBnCyzqtaU4JoEHbq+7HeLAz2KctOXtouM2W7bFBwb9KV0rEw7Pl3Jw+bEbfkDk7wZqx346XtOlHx61+RTyM+Wtl4j65mG63qmA92dwVCSIaMBqQ1ssDPibZxgd/kFN/dCr861MMWLRIehIGVr6LhUA/Rz2qn+fdKL9HBJ96IT7yIDIVTvKfatpIo6O/WKW7KkbvMK04swZbCKc4dB93UUOxEwJ90D97uevNlIiOe4+5WQrU5tUoOiWLubmYfZonP8cIgY9S2CLP+iBlw78fMK8HgNxLWoFhZOZ6XB3s/wBAvHV+xErPd2k3a5nIb8s2i9JlO/O3Rq/DiK9FrViw+Pg+9ctiUuRG9ZoxeFjd9F+YgkOw9cDyP0DIO4dbo1oVYxdLiOS+TrogQj738wV20iMvUS9oZpzybR/5QGb/rZYnt2emkpt7SmPfFktclygHz4Q4GmZ0KWtGZLAHpzzt3YFD73AHTaoymxlsxiGWy7timFYsmG21awQc7tmlPw9BZZzJw4VVq8lqDPJxs28zCYWP+ga1V57cr85OLuMW7DXSW41xlgB42y7RK97icaAVR8dTNMifFzcMNe1D6ukzo1ymJEnwda11Nswv+uYG9AWb78M+JU442yjK79ypkmV2YGnV9oFeitVjgxDxpXjjZ8vJTuAwCagqI8NfyM0Xe1ybLQZFeti7rMnvVTvvam5MfBde+tUFw7FhGWHX1HQH7V7JLz5K9lhuNi4NrfQ/h5icKz7qp3EA3eO/b9WS3KXOsx3ME96xH66hLCPnAHBHUJVHhMZ366I6AUIp0YLEL43jHn1ytsalampeH+GCiVXcyZc04kuaosjz1wYTQS1cLUNQl1j8MUdAlMiUTOc+8BFe3N39/+Xd8fX7z7Yp/Xt2meQ4LCBt8Ronke9a2RRWP2BUM+TxhLbtg0wWEAnwYgjJnxDh+BDKex+3CzCiU6azb0Q7BHM1gS+GPVGJrF+79f64QQrdg8PN4fLv89jj4ff5rlJxxo/LuJ9DaOjgxDs+X5aqIhvxJSNNJkcsiZZMI2WpxCSigm2lQGguea8wfLU8Vhx/VZIPyQDdDsTlTBfq+0RDoZXnK9gYQojsYhx1GfH5MUH5th4fQ5pd+YmxBenKVC0i5sBrA4i0ejPASQz/quigET37TQSw3AFHVeUeNyeVKw7K4+wDOF10fOd44Nk07BcF2FIMoWXjNH2EFt1pCzR0/5ya4SSFJRoT+q1Zok0ZIZ8FtrrXn0X+5VofGJOMZWk6p/IbBA0G4F489kdjdnN8oDrlpb2gFSc4MyR8q57dfdn2CCm3WFPm9xo7+kK3JvMNDkq2dv/5S7885+EEa8YMI32PijFaIYPW5RU/ad/92HCF2ycFFyt0a8dYM6WlettPtQCRLDPB6M0anzSuM2lxF5vG442I6EZuhE4lkkeqBBSCgCtz12IfBfdQ+OgjhZwlhe+szUeoev9Rryo9hK89fIg0KIaac2c5ilv48ADuKq839dsUtbULlaZdpLtX6z5PVkHqxZhsOvCjdv5668ZrXXN6FDbAPzunXnIoaswaEJazeGfGsTVkHbWYfGyb64iehNgUeCp3j3e6X6JefdJ5INBhMUDgnKGYhQDOHyug7BKk/RvPQY8CnBpUoLIp+UlE8czCTsagX5aOUt5Hv4ZL/QErN0E0aT6wt4II1g3Eon/DaB52ntuROxODON39YTek8fTncRSL4plg8OVhllxETut1rvXywlbD2NgZSCAy8ktBBq2C29otRxnVDB+1C6GC/uHPuyaGD5Db9Bb44e/o7hub5/wE=</diagram></mxfile>" style="background-color: rgb(255, 255, 255);"><defs><clipPath id="mx-clip-48-402-352-26-0"><rect x="48" y="402" width="352" height="26"/></clipPath><clipPath id="mx-clip-48-428-352-26-0"><rect x="48" y="428" width="352" height="26"/></clipPath><clipPath id="mx-clip-48-454-352-26-0"><rect x="48" y="454" width="352" height="26"/></clipPath><clipPath id="mx-clip-48-562-502-26-0"><rect x="48" y="562" width="502" height="26"/></clipPath><clipPath id="mx-clip-48-588-502-26-0"><rect x="48" y="588" width="502" height="26"/></clipPath><clipPath id="mx-clip-48-640-502-26-0"><rect x="48" y="640" width="502" height="26"/></clipPath><clipPath id="mx-clip-48-666-502-26-0"><rect x="48" y="666" width="502" height="26"/></clipPath><clipPath id="mx-clip-48-692-502-40-0"><rect x="48" y="692" width="502" height="40"/></clipPath><clipPath id="mx-clip-48-732-502-26-0"><rect x="48" y="732" width="502" height="26"/></clipPath><clipPath id="mx-clip-48-758-502-26-0"><rect x="48" y="758" width="502" height="26"/></clipPath><clipPath id="mx-clip-598-562-432-26-0"><rect x="598" y="562" width="432" height="26"/></clipPath><clipPath id="mx-clip-598-588-432-38-0"><rect x="598" y="588" width="432" height="38"/></clipPath><clipPath id="mx-clip-48-962-372-64-0"><rect x="48" y="962" width="372" height="64"/></clipPath><clipPath id="mx-clip-48-1026-372-38-0"><rect x="48" y="1026" width="372" height="38"/></clipPath><clipPath id="mx-clip-48-1064-372-72-0"><rect x="48" y="1064" width="372" height="72"/></clipPath><clipPath id="mx-clip-48-1136-372-38-0"><rect x="48" y="1136" width="372" height="38"/></clipPath></defs><g><rect x="24" y="291" width="1040" height="560" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1038px; height: 1px; padding-top: 298px; margin-left: 25px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">python setup.py</div></div></div></foreignObject><text x="544" y="310" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle" font-weight="bold">python setup.py</text></switch></g><path d="M 544 91 L 544 124.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 544 129.88 L 540.5 122.88 L 544 124.63 L 547.5 122.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="424" y="51" width="240" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 71px; margin-left: 425px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">'python_setup' step on LGTM.com</div></div></div></foreignObject><text x="544" y="75" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle" font-weight="bold">'python_setup' step on LGTM.com</text></switch></g><path d="M 544 171 L 544 204.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 544 209.88 L 540.5 202.88 L 544 204.63 L 547.5 202.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 191px; margin-left: 544px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">python ${LGTM_BUILDTOOLS}/python/setup.py</div></div></div></foreignObject><text x="544" y="194" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">python ${LGTM_BUILDTOOLS}/python/setup.py</text></switch></g><rect x="404" y="131" width="280" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 278px; height: 1px; padding-top: 151px; margin-left: 405px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">lgtm-buildtools/buildtools/python_setup.sh</div></div></div></foreignObject><text x="544" y="155" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle" font-weight="bold">lgtm-buildtools/buildtools/python_setup.sh</text></switch></g><path d="M 544 31 L 544 44.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 544 49.88 L 540.5 42.88 L 544 44.63 L 547.5 42.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 544 251 L 544 284.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 544 289.88 L 540.5 282.88 L 544 284.63 L 547.5 282.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 265px; margin-left: 545px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><font style="font-size: 11px">subprocess.call(["python", "$SEMMLE_DIST/tools/setup.py"])</font></div></div></div></foreignObject><text x="545" y="269" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">subprocess.call(["python", "$SEMMLE_DIST/tools/setup.py"])</text></switch></g><rect x="414" y="211" width="260" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 258px; height: 1px; padding-top: 231px; margin-left: 415px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; "><div style="text-align: left"><span style="white-space: nowrap">lgtm-buildtools/buildtools/python/setup.py</span></div></div></div></div></foreignObject><text x="544" y="235" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle" font-weight="bold">lgtm-buildtools/buildtools/python/setup.py</text></switch></g><path d="M 114 351 L 114 364.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 114 369.88 L 110.5 362.88 L 114 364.63 L 117.5 362.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 404 462 L 424.06 462.06 L 424.06 503 L 299 503 L 299 524.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 299 529.88 L 295.5 522.88 L 299 524.63 L 302.5 522.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 44 397 L 44 371 L 404 371 L 404 397" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 44 397 L 44 475 L 404 475 L 404 397" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 44 397 L 404 397" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g fill="#000000" font-family="Helvetica" font-weight="bold" font-size="12px"><text x="45.5" y="388.5">setup.py</text></g><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-48-402-352-26-0)" font-size="12px"><text x="49.5" y="414.5">1) add zipfile to path</text></g><rect x="44" y="423" width="360" height="26" fill="#eeeeee" stroke="none" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-48-428-352-26-0)" font-size="12px"><text x="49.5" y="440.5">2) version, root, requirement_files = buildtools.discover.discover()</text></g><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-48-454-352-26-0)" font-size="12px"><text x="49.5" y="466.5">3) buildtools.install.main(version, root, requirement_files)</text></g><path d="M 44 557 L 44 531 L 554 531 L 554 557" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 44 557 L 44 779 L 554 779 L 554 557" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 44 557 L 554 557" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g fill="#000000" font-family="Helvetica" font-weight="bold" font-size="12px"><text x="45.5" y="548.5">buildtools.install.main(version, root, requirement_files)</text></g><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-48-562-502-26-0)" font-size="12px"><text x="49.5" y="574.5">1) venv = buildtools.install.Venv("$LGTM_WORKSPACE/venv", version)</text></g><rect x="44" y="583" width="510" height="26" fill="#eeeeee" stroke="none" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-48-588-502-26-0)" font-size="12px"><text x="49.5" y="600.5">2) venv.create()</text></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 500px; height: 1px; padding-top: 616px; margin-left: 50px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; max-height: 22px; overflow: hidden; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: nowrap; ">3) requirements_from_setup = "$LGTM_WORKSPACE/setup_requirements.txt"</div></div></div></foreignObject><text x="50" y="628" fill="#000000" font-family="Helvetica" font-size="12px">3) requirements_from_setup = "$LGTM_WORKSPACE/setup_requirements.txt"</text></switch></g><rect x="44" y="635" width="510" height="26" fill="#eeeeee" stroke="none" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-48-640-502-26-0)" font-size="12px"><text x="49.5" y="652.5">4) args = [root, requirements_from_setup, system_packages(version)]</text></g><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-48-666-502-26-0)" font-size="12px"><text x="49.5" y="678.5">5) subprocess.call([venv.venv_executable, 'convert_setup.py'] + args)</text></g><rect x="44" y="687" width="510" height="40" fill="#eeeeee" stroke="none" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-48-692-502-40-0)" font-size="12px"><text x="49.5" y="704.5">6) if os.path.exists(requirements_from_setup):</text><text x="49.5" y="718.5">        requirement_files = [ requirements_from_setup ] + requirement_files[1:]</text></g><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-48-732-502-26-0)" font-size="12px"><text x="49.5" y="744.5">7) requirements = unify_requirements.gather(requirement_files)</text></g><rect x="44" y="753" width="510" height="26" fill="#eeeeee" stroke="none" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-48-758-502-26-0)" font-size="12px"><text x="49.5" y="770.5">8) buildtools.auto_install.install(requirements, venv)</text></g><path d="M 554 596 L 574.06 596.06 L 574.06 539.12 L 587.63 539.08" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 592.88 539.06 L 585.89 542.58 L 587.63 539.08 L 585.87 535.58 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 594 557 L 594 531 L 1034 531 L 1034 557" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 594 557 L 594 661 L 1034 661 L 1034 557" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 594 557 L 1034 557" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g fill="#000000" font-family="Helvetica" font-weight="bold" font-size="12px"><text x="595.5" y="548.5">buildtools.install.Venv.create()</text></g><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-598-562-432-26-0)" font-size="12px"><text x="599.5" y="574.5">1) exe = buildtools.version.executable(self.version)</text></g><rect x="594" y="583" width="440" height="38" fill="#eeeeee" stroke="none" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-598-588-432-38-0)" font-size="12px"><text x="599.5" y="600.5">2) if self.version == 2:</text><text x="599.5" y="614.5">      subprocess.check_call(exe, ["-m", "virtualenv", "$LGTM_WORKSPACE/venv"</text><text x="599.5" y="628.5">]</text></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 430px; height: 1px; padding-top: 628px; margin-left: 600px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; max-height: 36px; overflow: hidden; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: nowrap; ">3) if self.version == 3:<br style="padding: 0px ; margin: 0px" />      subprocess.check_call(exe, ["-m", "venv", "$LGTM_WORKSPACE/venv"</div></div></div></foreignObject><text x="600" y="640" fill="#000000" font-family="Helvetica" font-size="12px">3) if self.version == 3:...</text></switch></g><rect x="24" y="891" width="1040" height="350" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1038px; height: 1px; padding-top: 898px; margin-left: 25px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; word-wrap: normal; ">$LGTM_WORKSPACE/venv/bin/python convert_setup.py</div></div></div></foreignObject><text x="544" y="910" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle" font-weight="bold">$LGTM_WORKSPACE/venv/bin/python convert_setup.py</text></switch></g><path d="M 554 674 L 564.06 674.06 L 564.06 871 L 544.06 871 L 544.06 884.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 544.06 889.88 L 540.56 882.88 L 544.06 884.63 L 547.56 882.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 114 911 L 114 924.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 114 929.88 L 110.5 922.88 L 114 924.63 L 117.5 922.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 604 1192 L 624.06 1192.06 L 624.06 950.29 L 645.47 950.29" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 650.72 950.29 L 643.72 953.79 L 645.47 950.29 L 643.72 946.79 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="464" y="1172" width="140" height="40" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 1192px; margin-left: 465px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; word-wrap: normal; ">running root/setup.py</div></div></div></foreignObject><text x="534" y="1196" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle" font-weight="bold">running root/setup.py</text></switch></g><path d="M 424 1192 L 457.63 1192" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 462.88 1192 L 455.88 1195.5 L 457.63 1192 L 455.88 1188.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 44 957 L 44 931 L 424 931 L 424 957" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 44 957 L 44 1215 L 424 1215 L 424 957" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 44 957 L 424 957" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g fill="#000000" font-family="Helvetica" font-weight="bold" font-size="12px"><text x="45.5" y="948.5">convert_setup.py</text></g><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-48-962-372-64-0)" font-size="12px"><text x="49.5" y="974.5">1) root = sys.argv[1]</text><text x="49.5" y="988.5">    global requirements_file_path = sys.argv[2]</text><text x="49.5" y="1002.5">    sys.path.extend(sys.argv[3:])</text><text x="49.5" y="1016.5">    override = os.environ.get("LGTM_PYTHON_SETUP_SETUP_PY")</text></g><rect x="44" y="1021" width="380" height="38" fill="#eeeeee" stroke="none" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-48-1026-372-38-0)" font-size="12px"><text x="49.5" y="1038.5">2) if override == "false":</text><text x="49.5" y="1052.5">       sys.exit(0)</text></g><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-48-1064-372-72-0)" font-size="12px"><text x="49.5" y="1076.5">3) if override:</text><text x="49.5" y="1090.5">        setup_file_path = os.path.join(override, 'setup.py')</text><text x="49.5" y="1104.5">    else:</text><text x="49.5" y="1118.5">        setup_file_path = os.path.join(root, 'setup.py')</text></g><rect x="44" y="1131" width="380" height="38" fill="#eeeeee" stroke="none" pointer-events="none"/><g fill="#000000" font-family="Helvetica" clip-path="url(#mx-clip-48-1136-372-38-0)" font-size="12px"><text x="49.5" y="1148.5">4) setattr(setuptools, "setup", setup_interceptor)</text><text x="49.5" y="1162.5">    setattr(distutils.core, "setup", setup_interceptor)</text></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 370px; height: 1px; padding-top: 1176px; margin-left: 50px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; max-height: 42px; overflow: hidden; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: nowrap; ">5) imp.load_source(setup_file_path) <br /><i>   <font color="#808080"> </font><font color="#4d4d4d">as though invoked as './setup.py build'</font></i></div></div></div></foreignObject><text x="50" y="1188" fill="#000000" font-family="Helvetica" font-size="12px">5) imp.load_source(setup_file_path)...</text></switch></g><path d="M 654 967 L 654 941 L 1014 941 L 1014 967" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 654 967 L 654 1049 L 1014 1049 L 1014 967" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 654 967 L 1014 967" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g fill="#000000" font-family="Helvetica" font-weight="bold" font-size="12px"><text x="655.5" y="958.5">convert_setup.setup_interceptor(**args)</text></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 350px; height: 1px; padding-top: 974px; margin-left: 660px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; max-height: 40px; overflow: hidden; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: nowrap; ">1) requirements = gather requirements from **args <br /><i>('requires', 'install_requires', 'extras_require', 'dependency_links')</i></div></div></div></foreignObject><text x="660" y="986" fill="#000000" font-family="Helvetica" font-size="12px">1) requirements = gather requirements from **args...</text></switch></g><rect x="654" y="1011" width="360" height="38" fill="#eeeeee" stroke="none" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 350px; height: 1px; padding-top: 1018px; margin-left: 660px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; max-height: 34px; overflow: hidden; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: nowrap; ">2) write 'requirements' to 'global requirements_file_path' <br /><i><font color="#4d4d4d">    ("$LGTM_WORKSPACE/setup_requirements.txt")</font></i></div></div></div></foreignObject><text x="660" y="1030" fill="#000000" font-family="Helvetica" font-size="12px">2) write 'requirements' to 'global requirements_file_path'...</text></switch></g><path d="M 594 779 L 594 753 L 1034 753 L 1034 779" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 594 779 L 594 833 L 1034 833 L 1034 779" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 594 779 L 1034 779" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g fill="#000000" font-family="Helvetica" font-weight="bold" font-size="12px"><text x="595.5" y="770.5">buildtools.auto_install.install(requirements, venv)</text></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 430px; height: 1px; padding-top: 786px; margin-left: 600px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; max-height: 50px; overflow: hidden; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: nowrap; "><i>informally what boils down to</i><br />for req in requirements:<br />    run $LGTM_WORKSPACE/venv/bin/python -m pip install 'req'</div></div></div></foreignObject><text x="600" y="798" fill="#000000" font-family="Helvetica" font-size="12px">informally what boils down to...</text></switch></g><path d="M 554 766 L 587.63 766.1" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 592.88 766.12 L 585.87 769.6 L 587.63 766.1 L 585.89 762.6 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://desk.draw.io/support/solutions/articles/16000042487" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg> \ No newline at end of file diff --git a/python/extractor/get_venv_lib.py b/python/extractor/get_venv_lib.py new file mode 100644 index 00000000000..7adcaa4589a --- /dev/null +++ b/python/extractor/get_venv_lib.py @@ -0,0 +1,35 @@ +import os +import sys + + +def pip_installed_folder(): + try: + import pip + except ImportError: + print("ERROR: 'pip' not installed.") + sys.exit(2) + dirname, filename = os.path.split(pip.__file__) + if filename.startswith("__init__."): + dirname = os.path.dirname(dirname) + return dirname + +def first_site_packages(): + dist_packages = None + for path in sys.path: + if "site-packages" in path: + return path + if "dist-packages" in path and not dist_packages: + dist_packages = path + if dist_packages: + return dist_packages + # No site-packages or dist-packages? + raise Exception + +def get_venv_lib(): + try: + return pip_installed_folder() + except: + return first_site_packages() + +if __name__=='__main__': + print(get_venv_lib()) diff --git a/python/extractor/imp.py b/python/extractor/imp.py new file mode 100644 index 00000000000..6a0685559fd --- /dev/null +++ b/python/extractor/imp.py @@ -0,0 +1,344 @@ +"""This module provides the components needed to build your own __import__ +function. Undocumented functions are obsolete. + +In most cases it is preferred you consider using the importlib module's +functionality over this module. + +This file was copied from `Lib/imp.py`, copyright PSF, with minor modifications made afterward. +""" +# (Probably) need to stay in _imp +from _imp import (lock_held, acquire_lock, release_lock, + get_frozen_object, is_frozen_package, + init_frozen, is_builtin, is_frozen, + _fix_co_filename) +try: + from _imp import create_dynamic +except ImportError: + # Platform doesn't support dynamic loading. + create_dynamic = None + +from importlib._bootstrap import _ERR_MSG, _exec, _load, _builtin_from_name +from importlib._bootstrap_external import SourcelessFileLoader + +from importlib import machinery +from importlib import util +import importlib +import os +import sys +import tokenize +import types +import warnings + + + +# DEPRECATED +SEARCH_ERROR = 0 +PY_SOURCE = 1 +PY_COMPILED = 2 +C_EXTENSION = 3 +PY_RESOURCE = 4 +PKG_DIRECTORY = 5 +C_BUILTIN = 6 +PY_FROZEN = 7 +PY_CODERESOURCE = 8 +IMP_HOOK = 9 + + +def new_module(name): + """**DEPRECATED** + + Create a new module. + + The module is not entered into sys.modules. + + """ + return types.ModuleType(name) + + +def get_magic(): + """**DEPRECATED** + + Return the magic number for .pyc files. + """ + return util.MAGIC_NUMBER + + +def get_tag(): + """Return the magic tag for .pyc files.""" + return sys.implementation.cache_tag + + +def cache_from_source(path, debug_override=None): + """**DEPRECATED** + + Given the path to a .py file, return the path to its .pyc file. + + The .py file does not need to exist; this simply returns the path to the + .pyc file calculated as if the .py file were imported. + + If debug_override is not None, then it must be a boolean and is used in + place of sys.flags.optimize. + + If sys.implementation.cache_tag is None then NotImplementedError is raised. + + """ + with warnings.catch_warnings(): + warnings.simplefilter('ignore') + return util.cache_from_source(path, debug_override) + + +def source_from_cache(path): + """**DEPRECATED** + + Given the path to a .pyc. file, return the path to its .py file. + + The .pyc file does not need to exist; this simply returns the path to + the .py file calculated to correspond to the .pyc file. If path does + not conform to PEP 3147 format, ValueError will be raised. If + sys.implementation.cache_tag is None then NotImplementedError is raised. + + """ + return util.source_from_cache(path) + + +def get_suffixes(): + """**DEPRECATED**""" + extensions = [(s, 'rb', C_EXTENSION) for s in machinery.EXTENSION_SUFFIXES] + source = [(s, 'r', PY_SOURCE) for s in machinery.SOURCE_SUFFIXES] + bytecode = [(s, 'rb', PY_COMPILED) for s in machinery.BYTECODE_SUFFIXES] + + return extensions + source + bytecode + + +class NullImporter: + + """**DEPRECATED** + + Null import object. + + """ + + def __init__(self, path): + if path == '': + raise ImportError('empty pathname', path='') + elif os.path.isdir(path): + raise ImportError('existing directory', path=path) + + def find_module(self, fullname): + """Always returns None.""" + return None + + +class _HackedGetData: + + """Compatibility support for 'file' arguments of various load_*() + functions.""" + + def __init__(self, fullname, path, file=None): + super().__init__(fullname, path) + self.file = file + + def get_data(self, path): + """Gross hack to contort loader to deal w/ load_*()'s bad API.""" + if self.file and path == self.path: + # The contract of get_data() requires us to return bytes. Reopen the + # file in binary mode if needed. + if not self.file.closed: + file = self.file + if 'b' not in file.mode: + file.close() + if self.file.closed: + self.file = file = open(self.path, 'rb') + + with file: + return file.read() + else: + return super().get_data(path) + + +class _LoadSourceCompatibility(_HackedGetData, machinery.SourceFileLoader): + + """Compatibility support for implementing load_source().""" + + +def load_source(name, pathname, file=None): + loader = _LoadSourceCompatibility(name, pathname, file) + spec = util.spec_from_file_location(name, pathname, loader=loader) + if name in sys.modules: + module = _exec(spec, sys.modules[name]) + else: + module = _load(spec) + # To allow reloading to potentially work, use a non-hacked loader which + # won't rely on a now-closed file object. + module.__loader__ = machinery.SourceFileLoader(name, pathname) + module.__spec__.loader = module.__loader__ + return module + + +class _LoadCompiledCompatibility(_HackedGetData, SourcelessFileLoader): + + """Compatibility support for implementing load_compiled().""" + + +def load_compiled(name, pathname, file=None): + """**DEPRECATED**""" + loader = _LoadCompiledCompatibility(name, pathname, file) + spec = util.spec_from_file_location(name, pathname, loader=loader) + if name in sys.modules: + module = _exec(spec, sys.modules[name]) + else: + module = _load(spec) + # To allow reloading to potentially work, use a non-hacked loader which + # won't rely on a now-closed file object. + module.__loader__ = SourcelessFileLoader(name, pathname) + module.__spec__.loader = module.__loader__ + return module + + +def load_package(name, path): + """**DEPRECATED**""" + if os.path.isdir(path): + extensions = (machinery.SOURCE_SUFFIXES[:] + + machinery.BYTECODE_SUFFIXES[:]) + for extension in extensions: + init_path = os.path.join(path, '__init__' + extension) + if os.path.exists(init_path): + path = init_path + break + else: + raise ValueError('{!r} is not a package'.format(path)) + spec = util.spec_from_file_location(name, path, + submodule_search_locations=[]) + if name in sys.modules: + return _exec(spec, sys.modules[name]) + else: + return _load(spec) + + +def load_module(name, file, filename, details): + """**DEPRECATED** + + Load a module, given information returned by find_module(). + + The module name must include the full package name, if any. + + """ + suffix, mode, type_ = details + if mode and (not mode.startswith(('r', 'U')) or '+' in mode): + raise ValueError('invalid file open mode {!r}'.format(mode)) + elif file is None and type_ in {PY_SOURCE, PY_COMPILED}: + msg = 'file object required for import (type code {})'.format(type_) + raise ValueError(msg) + elif type_ == PY_SOURCE: + return load_source(name, filename, file) + elif type_ == PY_COMPILED: + return load_compiled(name, filename, file) + elif type_ == C_EXTENSION and load_dynamic is not None: + if file is None: + with open(filename, 'rb') as opened_file: + return load_dynamic(name, filename, opened_file) + else: + return load_dynamic(name, filename, file) + elif type_ == PKG_DIRECTORY: + return load_package(name, filename) + elif type_ == C_BUILTIN: + return init_builtin(name) + elif type_ == PY_FROZEN: + return init_frozen(name) + else: + msg = "Don't know how to import {} (type code {})".format(name, type_) + raise ImportError(msg, name=name) + + +def find_module(name, path=None): + """**DEPRECATED** + + Search for a module. + + If path is omitted or None, search for a built-in, frozen or special + module and continue search in sys.path. The module name cannot + contain '.'; to search for a submodule of a package, pass the + submodule name and the package's __path__. + + """ + if not isinstance(name, str): + raise TypeError("'name' must be a str, not {}".format(type(name))) + elif not isinstance(path, (type(None), list)): + # Backwards-compatibility + raise RuntimeError("'path' must be None or a list, " + "not {}".format(type(path))) + + if path is None: + if is_builtin(name): + return None, None, ('', '', C_BUILTIN) + elif is_frozen(name): + return None, None, ('', '', PY_FROZEN) + else: + path = sys.path + + for entry in path: + package_directory = os.path.join(entry, name) + for suffix in ['.py', machinery.BYTECODE_SUFFIXES[0]]: + package_file_name = '__init__' + suffix + file_path = os.path.join(package_directory, package_file_name) + if os.path.isfile(file_path): + return None, package_directory, ('', '', PKG_DIRECTORY) + for suffix, mode, type_ in get_suffixes(): + file_name = name + suffix + file_path = os.path.join(entry, file_name) + if os.path.isfile(file_path): + break + else: + continue + break # Break out of outer loop when breaking out of inner loop. + else: + raise ImportError(_ERR_MSG.format(name), name=name) + + encoding = None + if 'b' not in mode: + with open(file_path, 'rb') as file: + encoding = tokenize.detect_encoding(file.readline)[0] + file = open(file_path, mode, encoding=encoding) + return file, file_path, (suffix, mode, type_) + + +def reload(module): + """**DEPRECATED** + + Reload the module and return it. + + The module must have been successfully imported before. + + """ + return importlib.reload(module) + + +def init_builtin(name): + """**DEPRECATED** + + Load and return a built-in module by name, or None is such module doesn't + exist + """ + try: + return _builtin_from_name(name) + except ImportError: + return None + + +if create_dynamic: + def load_dynamic(name, path, file=None): + """**DEPRECATED** + + Load an extension module. + """ + import importlib.machinery + loader = importlib.machinery.ExtensionFileLoader(name, path) + + # Issue #24748: Skip the sys.modules check in _load_module_shim; + # always load new extension + spec = importlib.machinery.ModuleSpec( + name=name, loader=loader, origin=path) + return _load(spec) + +else: + load_dynamic = None diff --git a/python/extractor/index.py b/python/extractor/index.py new file mode 100644 index 00000000000..29996f8a0c3 --- /dev/null +++ b/python/extractor/index.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python + +# This file needs to be able to handle all versions of Python we are likely to encounter +# Which is probably 3.6 and upwards. Handling 3.6 specifically will be by throwing an error, though. +# We will require at least 3.7 to proceed. + +'''Run index.py in buildtools''' + +import os +import sys + +if sys.version_info < (3, 7): + sys.exit("ERROR: Python 3.7 or later is required (currently running {}.{})".format(sys.version_info[0], sys.version_info[1])) + +from python_tracer import getzipfilename + +if 'SEMMLE_DIST' in os.environ: + if 'CODEQL_EXTRACTOR_PYTHON_ROOT' not in os.environ: + os.environ['CODEQL_EXTRACTOR_PYTHON_ROOT'] = os.environ['SEMMLE_DIST'] +else: + os.environ["SEMMLE_DIST"] = os.environ["CODEQL_EXTRACTOR_PYTHON_ROOT"] + +tools = os.path.join(os.environ['SEMMLE_DIST'], "tools") +zippath = os.path.join(tools, getzipfilename()) +sys.path = [ zippath ] + sys.path + +import buildtools.index +buildtools.index.main() diff --git a/python/extractor/lark/LICENSE b/python/extractor/lark/LICENSE new file mode 100644 index 00000000000..efcb9665fb5 --- /dev/null +++ b/python/extractor/lark/LICENSE @@ -0,0 +1,19 @@ +Copyright © 2017 Erez Shinan + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/python/extractor/lark/__init__.py b/python/extractor/lark/__init__.py new file mode 100644 index 00000000000..34f0b8dfb55 --- /dev/null +++ b/python/extractor/lark/__init__.py @@ -0,0 +1,7 @@ +from .tree import Tree +from .visitors import Transformer, Visitor, v_args, Discard +from .visitors import InlineTransformer, inline_args # XXX Deprecated +from .exceptions import ParseError, LexError, GrammarError, UnexpectedToken, UnexpectedInput, UnexpectedCharacters +from .lark import Lark + +__version__ = "0.6.3" diff --git a/python/extractor/lark/common.py b/python/extractor/lark/common.py new file mode 100644 index 00000000000..b47253a07d1 --- /dev/null +++ b/python/extractor/lark/common.py @@ -0,0 +1,87 @@ +import re +import sys + +from .utils import get_regexp_width + +Py36 = (sys.version_info[:2] >= (3, 6)) + + +###{standalone +###} + + + +class LexerConf: + def __init__(self, tokens, ignore=(), postlex=None, callbacks=None): + self.tokens = tokens + self.ignore = ignore + self.postlex = postlex + self.callbacks = callbacks or {} + +class ParserConf: + def __init__(self, rules, callback, start): + self.rules = rules + self.callback = callback + self.start = start + + + +class Pattern(object): + def __init__(self, value, flags=()): + self.value = value + self.flags = frozenset(flags) + + def __repr__(self): + return repr(self.to_regexp()) + + # Pattern Hashing assumes all subclasses have a different priority! + def __hash__(self): + return hash((type(self), self.value, self.flags)) + def __eq__(self, other): + return type(self) == type(other) and self.value == other.value and self.flags == other.flags + + def to_regexp(self): + raise NotImplementedError() + + if Py36: + # Python 3.6 changed syntax for flags in regular expression + def _get_flags(self, value): + for f in self.flags: + value = ('(?%s:%s)' % (f, value)) + return value + + else: + def _get_flags(self, value): + for f in self.flags: + value = ('(?%s)' % f) + value + return value + +class PatternStr(Pattern): + def to_regexp(self): + return self._get_flags(re.escape(self.value)) + + @property + def min_width(self): + return len(self.value) + max_width = min_width + +class PatternRE(Pattern): + def to_regexp(self): + return self._get_flags(self.value) + + @property + def min_width(self): + return get_regexp_width(self.to_regexp())[0] + @property + def max_width(self): + return get_regexp_width(self.to_regexp())[1] + +class TokenDef(object): + def __init__(self, name, pattern, priority=1): + assert isinstance(pattern, Pattern), pattern + self.name = name + self.pattern = pattern + self.priority = priority + + def __repr__(self): + return '%s(%r, %r)' % (type(self).__name__, self.name, self.pattern) diff --git a/python/extractor/lark/exceptions.py b/python/extractor/lark/exceptions.py new file mode 100644 index 00000000000..9350f66c9eb --- /dev/null +++ b/python/extractor/lark/exceptions.py @@ -0,0 +1,86 @@ +from .utils import STRING_TYPE + +class LarkError(Exception): + pass + +class GrammarError(LarkError): + pass + +class ParseError(LarkError): + pass + +class LexError(LarkError): + pass + +class UnexpectedInput(LarkError): + pos_in_stream = None + + def get_context(self, text, span=40): + pos = self.pos_in_stream + start = max(pos - span, 0) + end = pos + span + before = text[start:pos].rsplit('\n', 1)[-1] + after = text[pos:end].split('\n', 1)[0] + return before + after + '\n' + ' ' * len(before) + '^\n' + + def match_examples(self, parse_fn, examples): + """ Given a parser instance and a dictionary mapping some label with + some malformed syntax examples, it'll return the label for the + example that bests matches the current error. + """ + assert self.state is not None, "Not supported for this exception" + + candidate = None + for label, example in examples.items(): + assert not isinstance(example, STRING_TYPE) + + for malformed in example: + try: + parse_fn(malformed) + except UnexpectedInput as ut: + if ut.state == self.state: + try: + if ut.token == self.token: # Try exact match first + return label + except AttributeError: + pass + if not candidate: + candidate = label + + return candidate + + +class UnexpectedCharacters(LexError, UnexpectedInput): + def __init__(self, seq, lex_pos, line, column, allowed=None, considered_tokens=None, state=None): + message = "No terminal defined for '%s' at line %d col %d" % (seq[lex_pos], line, column) + + self.line = line + self.column = column + self.allowed = allowed + self.considered_tokens = considered_tokens + self.pos_in_stream = lex_pos + self.state = state + + message += '\n\n' + self.get_context(seq) + if allowed: + message += '\nExpecting: %s\n' % allowed + + super(UnexpectedCharacters, self).__init__(message) + + + +class UnexpectedToken(ParseError, UnexpectedInput): + def __init__(self, token, expected, considered_rules=None, state=None): + self.token = token + self.expected = expected # XXX str shouldn't necessary + self.line = getattr(token, 'line', '?') + self.column = getattr(token, 'column', '?') + self.considered_rules = considered_rules + self.state = state + self.pos_in_stream = getattr(token, 'pos_in_stream', None) + + message = ("Unexpected token %r at line %s, column %s.\n" + "Expected: %s\n" + % (token, self.line, self.column, ', '.join(self.expected))) + + super(UnexpectedToken, self).__init__(message) diff --git a/python/extractor/lark/grammar.py b/python/extractor/lark/grammar.py new file mode 100644 index 00000000000..37c2997f74d --- /dev/null +++ b/python/extractor/lark/grammar.py @@ -0,0 +1,60 @@ +class Symbol(object): + is_term = NotImplemented + + def __init__(self, name): + self.name = name + + def __eq__(self, other): + assert isinstance(other, Symbol), other + return self.is_term == other.is_term and self.name == other.name + + def __ne__(self, other): + return not (self == other) + + def __hash__(self): + return hash(self.name) + + def __repr__(self): + return '%s(%r)' % (type(self).__name__, self.name) + +class Terminal(Symbol): + is_term = True + + def __init__(self, name, filter_out=False): + self.name = name + self.filter_out = filter_out + + +class NonTerminal(Symbol): + is_term = False + +class Rule(object): + """ + origin : a symbol + expansion : a list of symbols + """ + def __init__(self, origin, expansion, alias=None, options=None): + self.origin = origin + self.expansion = expansion + self.alias = alias + self.options = options + + def __str__(self): + return '<%s : %s>' % (self.origin, ' '.join(map(str,self.expansion))) + + def __repr__(self): + return 'Rule(%r, %r, %r, %r)' % (self.origin, self.expansion, self.alias, self.options) + + +class RuleOptions: + def __init__(self, keep_all_tokens=False, expand1=False, priority=None): + self.keep_all_tokens = keep_all_tokens + self.expand1 = expand1 + self.priority = priority + + def __repr__(self): + return 'RuleOptions(%r, %r, %r)' % ( + self.keep_all_tokens, + self.expand1, + self.priority, + ) diff --git a/python/extractor/lark/grammars/__init__.py b/python/extractor/lark/grammars/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/lark/grammars/common.lark b/python/extractor/lark/grammars/common.lark new file mode 100644 index 00000000000..8bc8079f368 --- /dev/null +++ b/python/extractor/lark/grammars/common.lark @@ -0,0 +1,49 @@ +// +// Numbers +// + +DIGIT: "0".."9" +HEXDIGIT: "a".."f"|"A".."F"|DIGIT + +INT: DIGIT+ +SIGNED_INT: ["+"|"-"] INT +DECIMAL: INT "." INT? | "." INT + +// float = /-?\d+(\.\d+)?([eE][+-]?\d+)?/ +_EXP: ("e"|"E") SIGNED_INT +FLOAT: INT _EXP | DECIMAL _EXP? +SIGNED_FLOAT: ["+"|"-"] FLOAT + +NUMBER: FLOAT | INT +SIGNED_NUMBER: ["+"|"-"] NUMBER + +// +// Strings +// +//STRING: /"(\\\"|\\\\|[^"\n])*?"i?/ +STRING_INNER: ("\\\""|/[^"]/) +ESCAPED_STRING: "\"" STRING_INNER* "\"" + + +// +// Names (Variables) +// +LCASE_LETTER: "a".."z" +UCASE_LETTER: "A".."Z" + +LETTER: UCASE_LETTER | LCASE_LETTER +WORD: LETTER+ + +CNAME: ("_"|LETTER) ("_"|LETTER|DIGIT)* + + +// +// Whitespace +// +WS_INLINE: (" "|/\t/)+ +WS: /[ \t\f\r\n]/+ + +CR : /\r/ +LF : /\n/ +NEWLINE: (CR? LF)+ + diff --git a/python/extractor/lark/indenter.py b/python/extractor/lark/indenter.py new file mode 100644 index 00000000000..34e61a09e25 --- /dev/null +++ b/python/extractor/lark/indenter.py @@ -0,0 +1,55 @@ +"Provides Indentation services for languages with indentation similar to Python" + +from .lexer import Token + +###{standalone +class Indenter: + def __init__(self): + self.paren_level = 0 + self.indent_level = [0] + + def handle_NL(self, token): + if self.paren_level > 0: + return + + yield token + + indent_str = token.rsplit('\n', 1)[1] # Tabs and spaces + indent = indent_str.count(' ') + indent_str.count('\t') * self.tab_len + + if indent > self.indent_level[-1]: + self.indent_level.append(indent) + yield Token.new_borrow_pos(self.INDENT_type, indent_str, token) + else: + while indent < self.indent_level[-1]: + self.indent_level.pop() + yield Token.new_borrow_pos(self.DEDENT_type, indent_str, token) + + assert indent == self.indent_level[-1], '%s != %s' % (indent, self.indent_level[-1]) + + def process(self, stream): + for token in stream: + if token.type == self.NL_type: + for t in self.handle_NL(token): + yield t + else: + yield token + + if token.type in self.OPEN_PAREN_types: + self.paren_level += 1 + elif token.type in self.CLOSE_PAREN_types: + self.paren_level -= 1 + assert self.paren_level >= 0 + + while len(self.indent_level) > 1: + self.indent_level.pop() + yield Token(self.DEDENT_type, '') + + assert self.indent_level == [0], self.indent_level + + # XXX Hack for ContextualLexer. Maybe there's a more elegant solution? + @property + def always_accept(self): + return (self.NL_type,) + +###} diff --git a/python/extractor/lark/lark.py b/python/extractor/lark/lark.py new file mode 100644 index 00000000000..7493beae252 --- /dev/null +++ b/python/extractor/lark/lark.py @@ -0,0 +1,235 @@ +from __future__ import absolute_import + +import os +import time +from collections import defaultdict +from io import open + +from .utils import STRING_TYPE +from .load_grammar import load_grammar +from .tree import Tree +from .common import LexerConf, ParserConf + +from .lexer import Lexer, TraditionalLexer +from .parse_tree_builder import ParseTreeBuilder +from .parser_frontends import get_frontend + + +class LarkOptions(object): + """Specifies the options for Lark + + """ + OPTIONS_DOC = """ + parser - Decides which parser engine to use, "earley" or "lalr". (Default: "earley") + Note: "lalr" requires a lexer + + lexer - Decides whether or not to use a lexer stage + "standard": Use a standard lexer + "contextual": Stronger lexer (only works with parser="lalr") + "dynamic": Flexible and powerful (only with parser="earley") + "dynamic_complete": Same as dynamic, but tries *every* variation + of tokenizing possible. (only with parser="earley") + "auto" (default): Choose for me based on grammar and parser + + ambiguity - Decides how to handle ambiguity in the parse. Only relevant if parser="earley" + "resolve": The parser will automatically choose the simplest derivation + (it chooses consistently: greedy for tokens, non-greedy for rules) + "explicit": The parser will return all derivations wrapped in "_ambig" tree nodes (i.e. a forest). + + transformer - Applies the transformer to every parse tree + debug - Affects verbosity (default: False) + keep_all_tokens - Don't automagically remove "punctuation" tokens (default: False) + cache_grammar - Cache the Lark grammar (Default: False) + postlex - Lexer post-processing (Requires standard lexer. Default: None) + start - The start symbol (Default: start) + profile - Measure run-time usage in Lark. Read results from the profiler proprety (Default: False) + propagate_positions - Propagates [line, column, end_line, end_column] attributes into all tree branches. + lexer_callbacks - Dictionary of callbacks for the lexer. May alter tokens during lexing. Use with caution. + """ + __doc__ = OPTIONS_DOC + def __init__(self, options_dict): + o = dict(options_dict) + + self.debug = bool(o.pop('debug', False)) + self.keep_all_tokens = bool(o.pop('keep_all_tokens', False)) + self.tree_class = o.pop('tree_class', Tree) + self.cache_grammar = o.pop('cache_grammar', False) + self.postlex = o.pop('postlex', None) + self.parser = o.pop('parser', 'earley') + self.lexer = o.pop('lexer', 'auto') + self.transformer = o.pop('transformer', None) + self.start = o.pop('start', 'start') + self.profile = o.pop('profile', False) + self.ambiguity = o.pop('ambiguity', 'auto') + self.propagate_positions = o.pop('propagate_positions', False) + self.earley__predict_all = o.pop('earley__predict_all', False) + self.lexer_callbacks = o.pop('lexer_callbacks', {}) + + assert self.parser in ('earley', 'lalr', 'cyk', None) + + if self.parser == 'earley' and self.transformer: + raise ValueError('Cannot specify an embedded transformer when using the Earley algorithm.' + 'Please use your transformer on the resulting parse tree, or use a different algorithm (i.e. lalr)') + + if o: + raise ValueError("Unknown options: %s" % o.keys()) + + +class Profiler: + def __init__(self): + self.total_time = defaultdict(float) + self.cur_section = '__init__' + self.last_enter_time = time.time() + + def enter_section(self, name): + cur_time = time.time() + self.total_time[self.cur_section] += cur_time - self.last_enter_time + self.last_enter_time = cur_time + self.cur_section = name + + def make_wrapper(self, name, f): + def wrapper(*args, **kwargs): + last_section = self.cur_section + self.enter_section(name) + try: + return f(*args, **kwargs) + finally: + self.enter_section(last_section) + + return wrapper + + +class Lark: + def __init__(self, grammar, **options): + """ + grammar : a string or file-object containing the grammar spec (using Lark's ebnf syntax) + options : a dictionary controlling various aspects of Lark. + """ + self.options = LarkOptions(options) + + # Some, but not all file-like objects have a 'name' attribute + try: + self.source = grammar.name + except AttributeError: + self.source = '<string>' + cache_file = "larkcache_%s" % str(hash(grammar)%(2**32)) + else: + cache_file = "larkcache_%s" % os.path.basename(self.source) + + # Drain file-like objects to get their contents + try: + read = grammar.read + except AttributeError: + pass + else: + grammar = read() + + assert isinstance(grammar, STRING_TYPE) + + if self.options.cache_grammar: + raise NotImplementedError("Not available yet") + + assert not self.options.profile, "Feature temporarily disabled" + self.profiler = Profiler() if self.options.profile else None + + if self.options.lexer == 'auto': + if self.options.parser == 'lalr': + self.options.lexer = 'contextual' + elif self.options.parser == 'earley': + self.options.lexer = 'dynamic' + elif self.options.parser == 'cyk': + self.options.lexer = 'standard' + else: + assert False, self.options.parser + lexer = self.options.lexer + assert lexer in ('standard', 'contextual', 'dynamic', 'dynamic_complete') or issubclass(lexer, Lexer) + + if self.options.ambiguity == 'auto': + if self.options.parser == 'earley': + self.options.ambiguity = 'resolve' + else: + disambig_parsers = ['earley', 'cyk'] + assert self.options.parser in disambig_parsers, ( + 'Only %s supports disambiguation right now') % ', '.join(disambig_parsers) + assert self.options.ambiguity in ('resolve', 'explicit', 'auto', 'resolve__antiscore_sum') + + # Parse the grammar file and compose the grammars (TODO) + self.grammar = load_grammar(grammar, self.source) + + # Compile the EBNF grammar into BNF + self.terminals, self.rules, self.ignore_tokens = self.grammar.compile() + + self.lexer_conf = LexerConf(self.terminals, self.ignore_tokens, self.options.postlex, self.options.lexer_callbacks) + + if self.options.parser: + self.parser = self._build_parser() + elif lexer: + self.lexer = self._build_lexer() + + if self.profiler: self.profiler.enter_section('outside_lark') + + __init__.__doc__ = "\nOPTIONS:" + LarkOptions.OPTIONS_DOC + + def _build_lexer(self): + return TraditionalLexer(self.lexer_conf.tokens, ignore=self.lexer_conf.ignore, user_callbacks=self.lexer_conf.callbacks) + + def _build_parser(self): + self.parser_class = get_frontend(self.options.parser, self.options.lexer) + + self._parse_tree_builder = ParseTreeBuilder(self.rules, self.options.tree_class, self.options.propagate_positions, self.options.keep_all_tokens, self.options.parser!='lalr') + callback = self._parse_tree_builder.create_callback(self.options.transformer) + if self.profiler: + for f in dir(callback): + if not (f.startswith('__') and f.endswith('__')): + setattr(callback, f, self.profiler.make_wrapper('transformer', getattr(callback, f))) + + parser_conf = ParserConf(self.rules, callback, self.options.start) + + return self.parser_class(self.lexer_conf, parser_conf, options=self.options) + + @classmethod + def open(cls, grammar_filename, rel_to=None, **options): + """Create an instance of Lark with the grammar given by its filename + + If rel_to is provided, the function will find the grammar filename in relation to it. + + Example: + + >>> Lark.open("grammar_file.lark", rel_to=__file__, parser="lalr") + Lark(...) + + """ + if rel_to: + basepath = os.path.dirname(rel_to) + grammar_filename = os.path.join(basepath, grammar_filename) + with open(grammar_filename, encoding='utf8') as f: + return cls(f, **options) + + def __repr__(self): + return 'Lark(open(%r), parser=%r, lexer=%r, ...)' % (self.source, self.options.parser, self.options.lexer) + + + def lex(self, text): + "Only lex (and postlex) the text, without parsing it. Only relevant when lexer='standard'" + if not hasattr(self, 'lexer'): + self.lexer = self._build_lexer() + stream = self.lexer.lex(text) + if self.options.postlex: + return self.options.postlex.process(stream) + return stream + + def parse(self, text): + "Parse the given text, according to the options provided. Returns a tree, unless specified otherwise." + return self.parser.parse(text) + + # if self.profiler: + # self.profiler.enter_section('lex') + # l = list(self.lex(text)) + # self.profiler.enter_section('parse') + # try: + # return self.parser.parse(l) + # finally: + # self.profiler.enter_section('outside_lark') + # else: + # l = list(self.lex(text)) + # return self.parser.parse(l) diff --git a/python/extractor/lark/lexer.py b/python/extractor/lark/lexer.py new file mode 100644 index 00000000000..15f83b7a128 --- /dev/null +++ b/python/extractor/lark/lexer.py @@ -0,0 +1,252 @@ +## Lexer Implementation + +import re + +from .utils import Str, classify +from .common import PatternStr, PatternRE, TokenDef +from .exceptions import UnexpectedCharacters, LexError + +###{standalone +class Token(Str): + __slots__ = ('type', 'pos_in_stream', 'value', 'line', 'column', 'end_line', 'end_column') + + def __new__(cls, type_, value, pos_in_stream=None, line=None, column=None): + self = super(Token, cls).__new__(cls, value) + self.type = type_ + self.pos_in_stream = pos_in_stream + self.value = value + self.line = line + self.column = column + self.end_line = None + self.end_column = None + return self + + @classmethod + def new_borrow_pos(cls, type_, value, borrow_t): + return cls(type_, value, borrow_t.pos_in_stream, line=borrow_t.line, column=borrow_t.column) + + def __reduce__(self): + return (self.__class__, (self.type, self.value, self.pos_in_stream, self.line, self.column, )) + + def __repr__(self): + return 'Token(%s, %r)' % (self.type, self.value) + + def __deepcopy__(self, memo): + return Token(self.type, self.value, self.pos_in_stream, self.line, self.column) + + def __eq__(self, other): + if isinstance(other, Token) and self.type != other.type: + return False + + return Str.__eq__(self, other) + + __hash__ = Str.__hash__ + + +class LineCounter: + def __init__(self): + self.newline_char = '\n' + self.char_pos = 0 + self.line = 1 + self.column = 1 + self.line_start_pos = 0 + + def feed(self, token, test_newline=True): + """Consume a token and calculate the new line & column. + + As an optional optimization, set test_newline=False is token doesn't contain a newline. + """ + if test_newline: + newlines = token.count(self.newline_char) + if newlines: + self.line += newlines + self.line_start_pos = self.char_pos + token.rindex(self.newline_char) + 1 + + self.char_pos += len(token) + self.column = self.char_pos - self.line_start_pos + 1 + +class _Lex: + "Built to serve both Lexer and ContextualLexer" + def __init__(self, lexer, state=None): + self.lexer = lexer + self.state = state + + def lex(self, stream, newline_types, ignore_types): + newline_types = list(newline_types) + ignore_types = list(ignore_types) + line_ctr = LineCounter() + + t = None + while True: + lexer = self.lexer + for mre, type_from_index in lexer.mres: + m = mre.match(stream, line_ctr.char_pos) + if m: + value = m.group(0) + type_ = type_from_index[m.lastindex] + if type_ not in ignore_types: + t = Token(type_, value, line_ctr.char_pos, line_ctr.line, line_ctr.column) + if t.type in lexer.callback: + t = lexer.callback[t.type](t) + yield t + else: + if type_ in lexer.callback: + t = Token(type_, value, line_ctr.char_pos, line_ctr.line, line_ctr.column) + lexer.callback[type_](t) + + line_ctr.feed(value, type_ in newline_types) + if t: + t.end_line = line_ctr.line + t.end_column = line_ctr.column + + break + else: + if line_ctr.char_pos < len(stream): + raise UnexpectedCharacters(stream, line_ctr.char_pos, line_ctr.line, line_ctr.column, state=self.state) + break + +class UnlessCallback: + def __init__(self, mres): + self.mres = mres + + def __call__(self, t): + for mre, type_from_index in self.mres: + m = mre.match(t.value) + if m: + t.type = type_from_index[m.lastindex] + break + return t + +###} + + + +def _create_unless(tokens): + tokens_by_type = classify(tokens, lambda t: type(t.pattern)) + assert len(tokens_by_type) <= 2, tokens_by_type.keys() + embedded_strs = set() + callback = {} + for retok in tokens_by_type.get(PatternRE, []): + unless = [] # {} + for strtok in tokens_by_type.get(PatternStr, []): + if strtok.priority > retok.priority: + continue + s = strtok.pattern.value + m = re.match(retok.pattern.to_regexp(), s) + if m and m.group(0) == s: + unless.append(strtok) + if strtok.pattern.flags <= retok.pattern.flags: + embedded_strs.add(strtok) + if unless: + callback[retok.name] = UnlessCallback(build_mres(unless, match_whole=True)) + + tokens = [t for t in tokens if t not in embedded_strs] + return tokens, callback + + +def _build_mres(tokens, max_size, match_whole): + # Python sets an unreasonable group limit (currently 100) in its re module + # Worse, the only way to know we reached it is by catching an AssertionError! + # This function recursively tries less and less groups until it's successful. + postfix = '$' if match_whole else '' + mres = [] + while tokens: + try: + mre = re.compile(u'|'.join(u'(?P<%s>%s)'%(t.name, t.pattern.to_regexp()+postfix) for t in tokens[:max_size])) + except AssertionError: # Yes, this is what Python provides us.. :/ + return _build_mres(tokens, max_size//2, match_whole) + + mres.append((mre, {i:n for n,i in mre.groupindex.items()} )) + tokens = tokens[max_size:] + return mres + +def build_mres(tokens, match_whole=False): + return _build_mres(tokens, len(tokens), match_whole) + +def _regexp_has_newline(r): + return '\n' in r or '\\n' in r or ('(?s' in r and '.' in r) + +class Lexer: + """Lexer interface + + Method Signatures: + lex(self, stream) -> Iterator[Token] + + set_parser_state(self, state) # Optional + """ + set_parser_state = NotImplemented + lex = NotImplemented + +class TraditionalLexer(Lexer): + def __init__(self, tokens, ignore=(), user_callbacks={}): + assert all(isinstance(t, TokenDef) for t in tokens), tokens + + tokens = list(tokens) + + # Sanitization + for t in tokens: + try: + re.compile(t.pattern.to_regexp()) + except: + raise LexError("Cannot compile token %s: %s" % (t.name, t.pattern)) + + if t.pattern.min_width == 0: + raise LexError("Lexer does not allow zero-width tokens. (%s: %s)" % (t.name, t.pattern)) + + assert set(ignore) <= {t.name for t in tokens} + + # Init + self.newline_types = [t.name for t in tokens if _regexp_has_newline(t.pattern.to_regexp())] + self.ignore_types = list(ignore) + + tokens.sort(key=lambda x:(-x.priority, -x.pattern.max_width, -len(x.pattern.value), x.name)) + + tokens, self.callback = _create_unless(tokens) + assert all(self.callback.values()) + + for type_, f in user_callbacks.items(): + assert type_ not in self.callback + self.callback[type_] = f + + self.tokens = tokens + + self.mres = build_mres(tokens) + + def lex(self, stream): + return _Lex(self).lex(stream, self.newline_types, self.ignore_types) + + +class ContextualLexer(Lexer): + def __init__(self, tokens, states, ignore=(), always_accept=(), user_callbacks={}): + tokens_by_name = {} + for t in tokens: + assert t.name not in tokens_by_name, t + tokens_by_name[t.name] = t + + lexer_by_tokens = {} + self.lexers = {} + for state, accepts in states.items(): + key = frozenset(accepts) + try: + lexer = lexer_by_tokens[key] + except KeyError: + accepts = set(accepts) | set(ignore) | set(always_accept) + state_tokens = [tokens_by_name[n] for n in accepts if n and n in tokens_by_name] + lexer = TraditionalLexer(state_tokens, ignore=ignore, user_callbacks=user_callbacks) + lexer_by_tokens[key] = lexer + + self.lexers[state] = lexer + + self.root_lexer = TraditionalLexer(tokens, ignore=ignore, user_callbacks=user_callbacks) + + self.set_parser_state(None) # Needs to be set on the outside + + def set_parser_state(self, state): + self.parser_state = state + + def lex(self, stream): + l = _Lex(self.lexers[self.parser_state], self.parser_state) + for x in l.lex(stream, self.root_lexer.newline_types, self.root_lexer.ignore_types): + yield x + l.lexer = self.lexers[self.parser_state] + l.state = self.parser_state diff --git a/python/extractor/lark/load_grammar.py b/python/extractor/lark/load_grammar.py new file mode 100644 index 00000000000..7fd32c48e8d --- /dev/null +++ b/python/extractor/lark/load_grammar.py @@ -0,0 +1,741 @@ +"Parses and creates Grammar objects" + +import os.path +import sys +from itertools import chain +import re +from ast import literal_eval +from copy import deepcopy +import pkgutil + +from .lexer import Token + + +from .parse_tree_builder import ParseTreeBuilder +from .parser_frontends import LALR_TraditionalLexer +from .common import LexerConf, ParserConf, PatternStr, PatternRE, TokenDef +from .grammar import RuleOptions, Rule, Terminal, NonTerminal, Symbol +from .utils import classify, suppress +from .exceptions import GrammarError, UnexpectedCharacters, UnexpectedToken + +from .tree import Tree, SlottedTree as ST +from .visitors import Transformer, Visitor, v_args, Transformer_InPlace +inline_args = v_args(inline=True) + +__path__ = os.path.dirname(__file__) + +GRAMMAR_PACKAGES = ['lark.grammars'] + +EXT = '.lark' + +_RE_FLAGS = 'imslux' + +def is_terminal(sym): + return sym.isupper() + +_TERMINAL_NAMES = { + '.' : 'DOT', + ',' : 'COMMA', + ':' : 'COLON', + ';' : 'SEMICOLON', + '+' : 'PLUS', + '-' : 'MINUS', + '*' : 'STAR', + '/' : 'SLASH', + '\\' : 'BACKSLASH', + '|' : 'VBAR', + '?' : 'QMARK', + '!' : 'BANG', + '@' : 'AT', + '#' : 'HASH', + '$' : 'DOLLAR', + '%' : 'PERCENT', + '^' : 'CIRCUMFLEX', + '&' : 'AMPERSAND', + '_' : 'UNDERSCORE', + '<' : 'LESSTHAN', + '>' : 'MORETHAN', + '=' : 'EQUAL', + '"' : 'DBLQUOTE', + '\'' : 'QUOTE', + '`' : 'BACKQUOTE', + '~' : 'TILDE', + '(' : 'LPAR', + ')' : 'RPAR', + '{' : 'LBRACE', + '}' : 'RBRACE', + '[' : 'LSQB', + ']' : 'RSQB', + '\n' : 'NEWLINE', + '\r\n' : 'CRLF', + '\t' : 'TAB', + ' ' : 'SPACE', +} + +# Grammar Parser +TERMINALS = { + '_LPAR': r'\(', + '_RPAR': r'\)', + '_LBRA': r'\[', + '_RBRA': r'\]', + 'OP': '[+*][?]?|[?](?![a-z])', + '_COLON': ':', + '_COMMA': ',', + '_OR': r'\|', + '_DOT': r'\.', + 'TILDE': '~', + 'RULE': '!?[_?]?[a-z][_a-z0-9]*', + 'TERMINAL': '_?[A-Z][_A-Z0-9]*', + 'STRING': r'"(\\"|\\\\|[^"\n])*?"i?', + 'REGEXP': r'/(?!/)(\\/|\\\\|[^/\n])*?/[%s]*' % _RE_FLAGS, + '_NL': r'(\r?\n)+\s*', + 'WS': r'[ \t]+', + 'COMMENT': r'//[^\n]*', + '_TO': '->', + '_IGNORE': r'%ignore', + '_DECLARE': r'%declare', + '_IMPORT': r'%import', + 'NUMBER': r'\d+', +} + +RULES = { + 'start': ['_list'], + '_list': ['_item', '_list _item'], + '_item': ['rule', 'token', 'statement', '_NL'], + + 'rule': ['RULE _COLON expansions _NL', + 'RULE _DOT NUMBER _COLON expansions _NL'], + 'expansions': ['alias', + 'expansions _OR alias', + 'expansions _NL _OR alias'], + + '?alias': ['expansion _TO RULE', 'expansion'], + 'expansion': ['_expansion'], + + '_expansion': ['', '_expansion expr'], + + '?expr': ['atom', + 'atom OP', + 'atom TILDE NUMBER', + 'atom TILDE NUMBER _DOT _DOT NUMBER', + ], + + '?atom': ['_LPAR expansions _RPAR', + 'maybe', + 'value'], + + 'value': ['terminal', + 'nonterminal', + 'literal', + 'range'], + + 'terminal': ['TERMINAL'], + 'nonterminal': ['RULE'], + + '?name': ['RULE', 'TERMINAL'], + + 'maybe': ['_LBRA expansions _RBRA'], + 'range': ['STRING _DOT _DOT STRING'], + + 'token': ['TERMINAL _COLON expansions _NL', + 'TERMINAL _DOT NUMBER _COLON expansions _NL'], + 'statement': ['ignore', 'import', 'declare'], + 'ignore': ['_IGNORE expansions _NL'], + 'declare': ['_DECLARE _declare_args _NL'], + 'import': ['_IMPORT _import_path _NL', + '_IMPORT _import_path _LPAR name_list _RPAR _NL', + '_IMPORT _import_path _TO TERMINAL _NL'], + + '_import_path': ['import_lib', 'import_rel'], + 'import_lib': ['_import_args'], + 'import_rel': ['_DOT _import_args'], + '_import_args': ['name', '_import_args _DOT name'], + + 'name_list': ['_name_list'], + '_name_list': ['name', '_name_list _COMMA name'], + + '_declare_args': ['name', '_declare_args name'], + 'literal': ['REGEXP', 'STRING'], +} + + +@inline_args +class EBNF_to_BNF(Transformer_InPlace): + def __init__(self): + self.new_rules = [] + self.rules_by_expr = {} + self.prefix = 'anon' + self.i = 0 + self.rule_options = None + + def _add_recurse_rule(self, type_, expr): + if expr in self.rules_by_expr: + return self.rules_by_expr[expr] + + new_name = '__%s_%s_%d' % (self.prefix, type_, self.i) + self.i += 1 + t = NonTerminal(Token('RULE', new_name, -1)) + tree = ST('expansions', [ST('expansion', [expr]), ST('expansion', [t, expr])]) + self.new_rules.append((new_name, tree, self.rule_options)) + self.rules_by_expr[expr] = t + return t + + def expr(self, rule, op, *args): + if op.value == '?': + return ST('expansions', [rule, ST('expansion', [])]) + elif op.value == '+': + # a : b c+ d + # --> + # a : b _c d + # _c : _c c | c; + return self._add_recurse_rule('plus', rule) + elif op.value == '*': + # a : b c* d + # --> + # a : b _c? d + # _c : _c c | c; + new_name = self._add_recurse_rule('star', rule) + return ST('expansions', [new_name, ST('expansion', [])]) + elif op.value == '~': + if len(args) == 1: + mn = mx = int(args[0]) + else: + mn, mx = map(int, args) + if mx < mn: + raise GrammarError("Bad Range for %s (%d..%d isn't allowed)" % (rule, mn, mx)) + return ST('expansions', [ST('expansion', [rule] * n) for n in range(mn, mx+1)]) + assert False, op + + +class SimplifyRule_Visitor(Visitor): + + @staticmethod + def _flatten(tree): + while True: + to_expand = [i for i, child in enumerate(tree.children) + if isinstance(child, Tree) and child.data == tree.data] + if not to_expand: + break + tree.expand_kids_by_index(*to_expand) + + def expansion(self, tree): + # rules_list unpacking + # a : b (c|d) e + # --> + # a : b c e | b d e + # + # In AST terms: + # expansion(b, expansions(c, d), e) + # --> + # expansions( expansion(b, c, e), expansion(b, d, e) ) + + self._flatten(tree) + + for i, child in enumerate(tree.children): + if isinstance(child, Tree) and child.data == 'expansions': + tree.data = 'expansions' + tree.children = [self.visit(ST('expansion', [option if i==j else other + for j, other in enumerate(tree.children)])) + for option in set(child.children)] + self._flatten(tree) + break + + def alias(self, tree): + rule, alias_name = tree.children + if rule.data == 'expansions': + aliases = [] + for child in tree.children[0].children: + aliases.append(ST('alias', [child, alias_name])) + tree.data = 'expansions' + tree.children = aliases + + def expansions(self, tree): + self._flatten(tree) + tree.children = list(set(tree.children)) + + +class RuleTreeToText(Transformer): + def expansions(self, x): + return x + def expansion(self, symbols): + return symbols, None + def alias(self, x): + (expansion, _alias), alias = x + assert _alias is None, (alias, expansion, '-', _alias) # Double alias not allowed + return expansion, alias.value + + +@inline_args +class CanonizeTree(Transformer_InPlace): + def maybe(self, expr): + return ST('expr', [expr, Token('OP', '?', -1)]) + + def tokenmods(self, *args): + if len(args) == 1: + return list(args) + tokenmods, value = args + return tokenmods + [value] + +class PrepareAnonTerminals(Transformer_InPlace): + "Create a unique list of anonymous tokens. Attempt to give meaningful names to them when we add them" + + def __init__(self, tokens): + self.tokens = tokens + self.token_set = {td.name for td in self.tokens} + self.token_reverse = {td.pattern: td for td in tokens} + self.i = 0 + + + @inline_args + def pattern(self, p): + value = p.value + if p in self.token_reverse and p.flags != self.token_reverse[p].pattern.flags: + raise GrammarError(u'Conflicting flags for the same terminal: %s' % p) + + token_name = None + + if isinstance(p, PatternStr): + try: + # If already defined, use the user-defined token name + token_name = self.token_reverse[p].name + except KeyError: + # Try to assign an indicative anon-token name + try: + token_name = _TERMINAL_NAMES[value] + except KeyError: + if value.isalnum() and value[0].isalpha() and value.upper() not in self.token_set: + with suppress(UnicodeEncodeError): + value.upper().encode('ascii') # Make sure we don't have unicode in our token names + token_name = value.upper() + + elif isinstance(p, PatternRE): + if p in self.token_reverse: # Kind of a wierd placement.name + token_name = self.token_reverse[p].name + else: + assert False, p + + if token_name is None: + token_name = '__ANON_%d' % self.i + self.i += 1 + + if token_name not in self.token_set: + assert p not in self.token_reverse + self.token_set.add(token_name) + tokendef = TokenDef(token_name, p) + self.token_reverse[p] = tokendef + self.tokens.append(tokendef) + + return Terminal(token_name, filter_out=isinstance(p, PatternStr)) + + +def _rfind(s, choices): + return max(s.rfind(c) for c in choices) + + + +def _fix_escaping(s): + w = '' + i = iter(s) + for n in i: + w += n + if n == '\\': + n2 = next(i) + if n2 == '\\': + w += '\\\\' + elif n2 not in 'unftr': + w += '\\' + w += n2 + w = w.replace('\\"', '"').replace("'", "\\'") + + to_eval = "u'''%s'''" % w + try: + s = literal_eval(to_eval) + except SyntaxError as e: + raise ValueError(s, e) + + return s + + +def _literal_to_pattern(literal): + v = literal.value + flag_start = _rfind(v, '/"')+1 + assert flag_start > 0 + flags = v[flag_start:] + assert all(f in _RE_FLAGS for f in flags), flags + + v = v[:flag_start] + assert v[0] == v[-1] and v[0] in '"/' + x = v[1:-1] + + s = _fix_escaping(x) + + if literal.type == 'STRING': + s = s.replace('\\\\', '\\') + + return { 'STRING': PatternStr, + 'REGEXP': PatternRE }[literal.type](s, flags) + + +@inline_args +class PrepareLiterals(Transformer_InPlace): + def literal(self, literal): + return ST('pattern', [_literal_to_pattern(literal)]) + + def range(self, start, end): + assert start.type == end.type == 'STRING' + start = start.value[1:-1] + end = end.value[1:-1] + assert len(start) == len(end) == 1, (start, end, len(start), len(end)) + regexp = '[%s-%s]' % (start, end) + return ST('pattern', [PatternRE(regexp)]) + + +class TokenTreeToPattern(Transformer): + def pattern(self, ps): + p ,= ps + return p + + def expansion(self, items): + assert items + if len(items) == 1: + return items[0] + if len({i.flags for i in items}) > 1: + raise GrammarError("Lark doesn't support joining tokens with conflicting flags!") + return PatternRE(''.join(i.to_regexp() for i in items), items[0].flags if items else ()) + + def expansions(self, exps): + if len(exps) == 1: + return exps[0] + if len({i.flags for i in exps}) > 1: + raise GrammarError("Lark doesn't support joining tokens with conflicting flags!") + return PatternRE('(?:%s)' % ('|'.join(i.to_regexp() for i in exps)), exps[0].flags) + + def expr(self, args): + inner, op = args[:2] + if op == '~': + if len(args) == 3: + op = "{%d}" % int(args[2]) + else: + mn, mx = map(int, args[2:]) + if mx < mn: + raise GrammarError("Bad Range for %s (%d..%d isn't allowed)" % (inner, mn, mx)) + op = "{%d,%d}" % (mn, mx) + else: + assert len(args) == 2 + return PatternRE('(?:%s)%s' % (inner.to_regexp(), op), inner.flags) + + def alias(self, t): + raise GrammarError("Aliasing not allowed in terminals (You used -> in the wrong place)") + + def value(self, v): + return v[0] + +class PrepareSymbols(Transformer_InPlace): + def value(self, v): + v ,= v + if isinstance(v, Tree): + return v + elif v.type == 'RULE': + return NonTerminal(v.value) + elif v.type == 'TERMINAL': + return Terminal(v.value, filter_out=v.startswith('_')) + assert False + +def _choice_of_rules(rules): + return ST('expansions', [ST('expansion', [Token('RULE', name)]) for name in rules]) + +class Grammar: + def __init__(self, rule_defs, token_defs, ignore): + self.token_defs = token_defs + self.rule_defs = rule_defs + self.ignore = ignore + + def compile(self): + # We change the trees in-place (to support huge grammars) + # So deepcopy allows calling compile more than once. + token_defs = deepcopy(list(self.token_defs)) + rule_defs = deepcopy(self.rule_defs) + + # ================= + # Compile Tokens + # ================= + + # Convert token-trees to strings/regexps + transformer = PrepareLiterals() * TokenTreeToPattern() + for name, (token_tree, priority) in token_defs: + if token_tree is None: # Terminal added through %declare + continue + expansions = list(token_tree.find_data('expansion')) + if len(expansions) == 1 and not expansions[0].children: + raise GrammarError("Terminals cannot be empty (%s)" % name) + + tokens = [TokenDef(name, transformer.transform(token_tree), priority) + for name, (token_tree, priority) in token_defs if token_tree] + + # ================= + # Compile Rules + # ================= + + # 1. Pre-process terminals + transformer = PrepareLiterals() * PrepareSymbols() * PrepareAnonTerminals(tokens) # Adds to tokens + + # 2. Convert EBNF to BNF (and apply step 1) + ebnf_to_bnf = EBNF_to_BNF() + rules = [] + for name, rule_tree, options in rule_defs: + ebnf_to_bnf.rule_options = RuleOptions(keep_all_tokens=True) if options and options.keep_all_tokens else None + tree = transformer.transform(rule_tree) + rules.append((name, ebnf_to_bnf.transform(tree), options)) + rules += ebnf_to_bnf.new_rules + + assert len(rules) == len({name for name, _t, _o in rules}), "Whoops, name collision" + + # 3. Compile tree to Rule objects + rule_tree_to_text = RuleTreeToText() + + simplify_rule = SimplifyRule_Visitor() + compiled_rules = [] + for name, tree, options in rules: + simplify_rule.visit(tree) + expansions = rule_tree_to_text.transform(tree) + + for expansion, alias in expansions: + if alias and name.startswith('_'): + raise GrammarError("Rule %s is marked for expansion (it starts with an underscore) and isn't allowed to have aliases (alias=%s)" % (name, alias)) + + assert all(isinstance(x, Symbol) for x in expansion), expansion + + rule = Rule(NonTerminal(name), expansion, alias, options) + compiled_rules.append(rule) + + return tokens, compiled_rules, self.ignore + + +_imported_grammars = {} +def import_grammar(grammar_path): + if grammar_path not in _imported_grammars: + for package in GRAMMAR_PACKAGES: + text = pkgutil.get_data(package, grammar_path).decode("utf-8") + grammar = load_grammar(text, grammar_path) + _imported_grammars[grammar_path] = grammar + + return _imported_grammars[grammar_path] + + +def resolve_token_references(token_defs): + # TODO Cycles detection + # TODO Solve with transitive closure (maybe) + + token_dict = {k:t for k, (t,_p) in token_defs} + assert len(token_dict) == len(token_defs), "Same name defined twice?" + + while True: + changed = False + for name, (token_tree, _p) in token_defs: + if token_tree is None: # Terminal added through %declare + continue + for exp in token_tree.find_data('value'): + item ,= exp.children + if isinstance(item, Token): + if item.type == 'RULE': + raise GrammarError("Rules aren't allowed inside terminals (%s in %s)" % (item, name)) + if item.type == 'TERMINAL': + exp.children[0] = token_dict[item] + changed = True + if not changed: + break + +def options_from_rule(name, *x): + if len(x) > 1: + priority, expansions = x + priority = int(priority) + else: + expansions ,= x + priority = None + + keep_all_tokens = name.startswith('!') + name = name.lstrip('!') + expand1 = name.startswith('?') + name = name.lstrip('?') + + return name, expansions, RuleOptions(keep_all_tokens, expand1, priority=priority) + + +def symbols_from_strcase(expansion): + return [Terminal(x, filter_out=x.startswith('_')) if is_terminal(x) else NonTerminal(x) for x in expansion] + +@inline_args +class PrepareGrammar(Transformer_InPlace): + def terminal(self, name): + return name + def nonterminal(self, name): + return name + + +class GrammarLoader: + def __init__(self): + tokens = [TokenDef(name, PatternRE(value)) for name, value in TERMINALS.items()] + + rules = [options_from_rule(name, x) for name, x in RULES.items()] + rules = [Rule(NonTerminal(r), symbols_from_strcase(x.split()), None, o) for r, xs, o in rules for x in xs] + callback = ParseTreeBuilder(rules, ST).create_callback() + lexer_conf = LexerConf(tokens, ['WS', 'COMMENT']) + + parser_conf = ParserConf(rules, callback, 'start') + self.parser = LALR_TraditionalLexer(lexer_conf, parser_conf) + + self.canonize_tree = CanonizeTree() + + def load_grammar(self, grammar_text, grammar_name='<?>'): + "Parse grammar_text, verify, and create Grammar object. Display nice messages on error." + + try: + tree = self.canonize_tree.transform( self.parser.parse(grammar_text+'\n') ) + except UnexpectedCharacters as e: + context = e.get_context(grammar_text) + raise GrammarError("Unexpected input at line %d column %d in %s: \n\n%s" % + (e.line, e.column, grammar_name, context)) + except UnexpectedToken as e: + context = e.get_context(grammar_text) + error = e.match_examples(self.parser.parse, { + 'Unclosed parenthesis': ['a: (\n'], + 'Umatched closing parenthesis': ['a: )\n', 'a: [)\n', 'a: (]\n'], + 'Expecting rule or token definition (missing colon)': ['a\n', 'a->\n', 'A->\n', 'a A\n'], + 'Alias expects lowercase name': ['a: -> "a"\n'], + 'Unexpected colon': ['a::\n', 'a: b:\n', 'a: B:\n', 'a: "a":\n'], + 'Misplaced operator': ['a: b??', 'a: b(?)', 'a:+\n', 'a:?\n', 'a:*\n', 'a:|*\n'], + 'Expecting option ("|") or a new rule or token definition': ['a:a\n()\n'], + '%import expects a name': ['%import "a"\n'], + '%ignore expects a value': ['%ignore %import\n'], + }) + if error: + raise GrammarError("%s at line %s column %s\n\n%s" % (error, e.line, e.column, context)) + elif 'STRING' in e.expected: + raise GrammarError("Expecting a value at line %s column %s\n\n%s" % (e.line, e.column, context)) + raise + + tree = PrepareGrammar().transform(tree) + + # Extract grammar items + defs = classify(tree.children, lambda c: c.data, lambda c: c.children) + token_defs = defs.pop('token', []) + rule_defs = defs.pop('rule', []) + statements = defs.pop('statement', []) + assert not defs + + token_defs = [td if len(td)==3 else (td[0], 1, td[1]) for td in token_defs] + token_defs = [(name.value, (t, int(p))) for name, p, t in token_defs] + + # Execute statements + ignore = [] + declared = [] + for (stmt,) in statements: + if stmt.data == 'ignore': + t ,= stmt.children + ignore.append(t) + elif stmt.data == 'import': + if len(stmt.children) > 1: + path_node, arg1 = stmt.children + else: + path_node ,= stmt.children + arg1 = None + + dotted_path = path_node.children + + if isinstance(arg1, Tree): # Multi import + names = arg1.children + aliases = names # Can't have aliased multi import, so all aliases will be the same as names + else: # Single import + names = [dotted_path[-1]] # Get name from dotted path + aliases = [arg1] if arg1 else names # Aliases if exist + dotted_path = dotted_path[:-1] + + grammar_path = os.path.join(*dotted_path) + EXT + + if path_node.data == 'import_lib': # Import from library + g = import_grammar(grammar_path) + else: # Relative import + if grammar_name == '<string>': # Import relative to script file path if grammar is coded in script + base_file = os.path.abspath(sys.modules['__main__'].__file__) + else: + base_file = grammar_name # Import relative to grammar file path if external grammar file + base_path = os.path.split(base_file)[0] + g = import_grammar(grammar_path, base_paths=[base_path]) + + for name, alias in zip(names, aliases): + token_options = dict(g.token_defs)[name] + assert isinstance(token_options, tuple) and len(token_options)==2 + token_defs.append([alias.value, token_options]) + + elif stmt.data == 'declare': + for t in stmt.children: + token_defs.append([t.value, (None, None)]) + else: + assert False, stmt + + + # Verify correctness 1 + for name, _ in token_defs: + if name.startswith('__'): + raise GrammarError('Names starting with double-underscore are reserved (Error at %s)' % name) + + # Handle ignore tokens + # XXX A slightly hacky solution. Recognition of %ignore TERMINAL as separate comes from the lexer's + # inability to handle duplicate tokens (two names, one value) + ignore_names = [] + for t in ignore: + if t.data=='expansions' and len(t.children) == 1: + t2 ,= t.children + if t2.data=='expansion' and len(t2.children) == 1: + item ,= t2.children + if item.data == 'value': + item ,= item.children + if isinstance(item, Token) and item.type == 'TERMINAL': + ignore_names.append(item.value) + continue + + name = '__IGNORE_%d'% len(ignore_names) + ignore_names.append(name) + token_defs.append((name, (t, 0))) + + # Verify correctness 2 + token_names = set() + for name, _ in token_defs: + if name in token_names: + raise GrammarError("Token '%s' defined more than once" % name) + token_names.add(name) + + if set(ignore_names) > token_names: + raise GrammarError("Tokens %s were marked to ignore but were not defined!" % (set(ignore_names) - token_names)) + + # Resolve token references + resolve_token_references(token_defs) + + rules = [options_from_rule(*x) for x in rule_defs] + + rule_names = set() + for name, _x, _o in rules: + if name.startswith('__'): + raise GrammarError('Names starting with double-underscore are reserved (Error at %s)' % name) + if name in rule_names: + raise GrammarError("Rule '%s' defined more than once" % name) + rule_names.add(name) + + for name, expansions, _o in rules: + used_symbols = {t for x in expansions.find_data('expansion') + for t in x.scan_values(lambda t: t.type in ('RULE', 'TERMINAL'))} + for sym in used_symbols: + if is_terminal(sym): + if sym not in token_names: + raise GrammarError("Token '%s' used but not defined (in rule %s)" % (sym, name)) + else: + if sym not in rule_names: + raise GrammarError("Rule '%s' used but not defined (in rule %s)" % (sym, name)) + + # TODO don't include unused tokens, they can only cause trouble! + + return Grammar(rules, token_defs, ignore_names) + + + +load_grammar = GrammarLoader().load_grammar diff --git a/python/extractor/lark/parse_tree_builder.py b/python/extractor/lark/parse_tree_builder.py new file mode 100644 index 00000000000..5db11345bc8 --- /dev/null +++ b/python/extractor/lark/parse_tree_builder.py @@ -0,0 +1,164 @@ +from .exceptions import GrammarError +from .utils import suppress +from .lexer import Token +from .grammar import Rule +from .tree import Tree +from .visitors import InlineTransformer # XXX Deprecated + +###{standalone +from functools import partial, wraps + + +class ExpandSingleChild: + def __init__(self, node_builder): + self.node_builder = node_builder + + def __call__(self, children): + if len(children) == 1: + return children[0] + else: + return self.node_builder(children) + + +class PropagatePositions: + def __init__(self, node_builder): + self.node_builder = node_builder + + def __call__(self, children): + res = self.node_builder(children) + + if children and isinstance(res, Tree): + for a in children: + if isinstance(a, Tree): + res.meta.line = a.meta.line + res.meta.column = a.meta.column + elif isinstance(a, Token): + res.meta.line = a.line + res.meta.column = a.column + break + + for a in reversed(children): + # with suppress(AttributeError): + if isinstance(a, Tree): + res.meta.end_line = a.meta.end_line + res.meta.end_column = a.meta.end_column + elif isinstance(a, Token): + res.meta.end_line = a.end_line + res.meta.end_column = a.end_column + + break + + return res + + +class ChildFilter: + def __init__(self, to_include, node_builder): + self.node_builder = node_builder + self.to_include = to_include + + def __call__(self, children): + filtered = [] + for i, to_expand in self.to_include: + if to_expand: + filtered += children[i].children + else: + filtered.append(children[i]) + + return self.node_builder(filtered) + +class ChildFilterLALR(ChildFilter): + "Optimized childfilter for LALR (assumes no duplication in parse tree, so it's safe to change it)" + + def __call__(self, children): + filtered = [] + for i, to_expand in self.to_include: + if to_expand: + if filtered: + filtered += children[i].children + else: # Optimize for left-recursion + filtered = children[i].children + else: + filtered.append(children[i]) + + return self.node_builder(filtered) + +def _should_expand(sym): + return not sym.is_term and sym.name.startswith('_') + +def maybe_create_child_filter(expansion, keep_all_tokens, ambiguous): + to_include = [(i, _should_expand(sym)) for i, sym in enumerate(expansion) + if keep_all_tokens or not (sym.is_term and sym.filter_out)] + + if len(to_include) < len(expansion) or any(to_expand for i, to_expand in to_include): + return partial(ChildFilter if ambiguous else ChildFilterLALR, to_include) + + +class Callback(object): + pass + + +def inline_args(func): + @wraps(func) + def f(children): + return func(*children) + return f + + + +class ParseTreeBuilder: + def __init__(self, rules, tree_class, propagate_positions=False, keep_all_tokens=False, ambiguous=False): + self.tree_class = tree_class + self.propagate_positions = propagate_positions + self.always_keep_all_tokens = keep_all_tokens + self.ambiguous = ambiguous + + self.rule_builders = list(self._init_builders(rules)) + + self.user_aliases = {} + + def _init_builders(self, rules): + for rule in rules: + options = rule.options + keep_all_tokens = self.always_keep_all_tokens or (options.keep_all_tokens if options else False) + expand_single_child = options.expand1 if options else False + + wrapper_chain = filter(None, [ + (expand_single_child and not rule.alias) and ExpandSingleChild, + maybe_create_child_filter(rule.expansion, keep_all_tokens, self.ambiguous), + self.propagate_positions and PropagatePositions, + ]) + + yield rule, wrapper_chain + + + def create_callback(self, transformer=None): + callback = Callback() + + i = 0 + for rule, wrapper_chain in self.rule_builders: + internal_callback_name = '_cb%d_%s' % (i, rule.origin) + i += 1 + + user_callback_name = rule.alias or rule.origin.name + try: + f = getattr(transformer, user_callback_name) + assert not getattr(f, 'meta', False), "Meta args not supported for internal transformer" + # XXX InlineTransformer is deprecated! + if getattr(f, 'inline', False) or isinstance(transformer, InlineTransformer): + f = inline_args(f) + except AttributeError: + f = partial(self.tree_class, user_callback_name) + + self.user_aliases[rule] = rule.alias + rule.alias = internal_callback_name + + for w in wrapper_chain: + f = w(f) + + if hasattr(callback, internal_callback_name): + raise GrammarError("Rule '%s' already exists" % (rule,)) + setattr(callback, internal_callback_name, f) + + return callback + +###} diff --git a/python/extractor/lark/parser_frontends.py b/python/extractor/lark/parser_frontends.py new file mode 100644 index 00000000000..cb43cb310a2 --- /dev/null +++ b/python/extractor/lark/parser_frontends.py @@ -0,0 +1,189 @@ +import re +from functools import partial + +from .utils import get_regexp_width +from .parsers.grammar_analysis import GrammarAnalyzer +from .lexer import TraditionalLexer, ContextualLexer, Lexer, Token + +from .parsers import lalr_parser, earley, xearley, resolve_ambig, cyk +from .tree import Tree + +class WithLexer: + lexer = None + parser = None + lexer_conf = None + + def init_traditional_lexer(self, lexer_conf): + self.lexer_conf = lexer_conf + self.lexer = TraditionalLexer(lexer_conf.tokens, ignore=lexer_conf.ignore, user_callbacks=lexer_conf.callbacks) + + def init_contextual_lexer(self, lexer_conf): + self.lexer_conf = lexer_conf + states = {idx:list(t.keys()) for idx, t in self.parser._parse_table.states.items()} + always_accept = lexer_conf.postlex.always_accept if lexer_conf.postlex else () + self.lexer = ContextualLexer(lexer_conf.tokens, states, + ignore=lexer_conf.ignore, + always_accept=always_accept, + user_callbacks=lexer_conf.callbacks) + + def lex(self, text): + stream = self.lexer.lex(text) + if self.lexer_conf.postlex: + return self.lexer_conf.postlex.process(stream) + return stream + + def parse(self, text): + token_stream = self.lex(text) + sps = self.lexer.set_parser_state + return self.parser.parse(token_stream, *[sps] if sps is not NotImplemented else []) + +class LALR_TraditionalLexer(WithLexer): + def __init__(self, lexer_conf, parser_conf, options=None): + self.parser = lalr_parser.Parser(parser_conf) + self.init_traditional_lexer(lexer_conf) + +class LALR_ContextualLexer(WithLexer): + def __init__(self, lexer_conf, parser_conf, options=None): + self.parser = lalr_parser.Parser(parser_conf) + self.init_contextual_lexer(lexer_conf) + +class LALR_CustomLexer(WithLexer): + def __init__(self, lexer_cls, lexer_conf, parser_conf, options=None): + self.parser = lalr_parser.Parser(parser_conf) + self.lexer_conf = lexer_conf + self.lexer = lexer_cls(lexer_conf) + + +def get_ambiguity_resolver(options): + if not options or options.ambiguity == 'resolve': + return resolve_ambig.standard_resolve_ambig + elif options.ambiguity == 'resolve__antiscore_sum': + return resolve_ambig.antiscore_sum_resolve_ambig + elif options.ambiguity == 'explicit': + return None + raise ValueError(options) + +def tokenize_text(text): + line = 1 + col_start_pos = 0 + for i, ch in enumerate(text): + if '\n' in ch: + line += ch.count('\n') + col_start_pos = i + ch.rindex('\n') + yield Token('CHAR', ch, line=line, column=i - col_start_pos) + +class Earley(WithLexer): + def __init__(self, lexer_conf, parser_conf, options=None): + self.init_traditional_lexer(lexer_conf) + + self.parser = earley.Parser(parser_conf, self.match, + resolve_ambiguity=get_ambiguity_resolver(options)) + + def match(self, term, token): + return term.name == token.type + + +class XEarley: + def __init__(self, lexer_conf, parser_conf, options=None, **kw): + self.token_by_name = {t.name:t for t in lexer_conf.tokens} + + self._prepare_match(lexer_conf) + + self.parser = xearley.Parser(parser_conf, + self.match, + resolve_ambiguity=get_ambiguity_resolver(options), + ignore=lexer_conf.ignore, + predict_all=options.earley__predict_all, + **kw + ) + + def match(self, term, text, index=0): + return self.regexps[term.name].match(text, index) + + def _prepare_match(self, lexer_conf): + self.regexps = {} + for t in lexer_conf.tokens: + regexp = t.pattern.to_regexp() + try: + width = get_regexp_width(regexp)[0] + except ValueError: + raise ValueError("Bad regexp in token %s: %s" % (t.name, regexp)) + else: + if width == 0: + raise ValueError("Dynamic Earley doesn't allow zero-width regexps", t) + + self.regexps[t.name] = re.compile(regexp) + + def parse(self, text): + return self.parser.parse(text) + +class XEarley_CompleteLex(XEarley): + def __init__(self, *args, **kw): + super(self).__init__(*args, complete_lex=True, **kw) + + + +class CYK(WithLexer): + + def __init__(self, lexer_conf, parser_conf, options=None): + self.init_traditional_lexer(lexer_conf) + + self._analysis = GrammarAnalyzer(parser_conf) + self._parser = cyk.Parser(parser_conf.rules, parser_conf.start) + + self._postprocess = {} + for rule in parser_conf.rules: + a = rule.alias + self._postprocess[a] = a if callable(a) else (a and getattr(parser_conf.callback, a)) + + def parse(self, text): + tokens = list(self.lex(text)) + parse = self._parser.parse(tokens) + parse = self._transform(parse) + return parse + + def _transform(self, tree): + subtrees = list(tree.iter_subtrees()) + for subtree in subtrees: + subtree.children = [self._apply_callback(c) if isinstance(c, Tree) else c for c in subtree.children] + + return self._apply_callback(tree) + + def _apply_callback(self, tree): + children = tree.children + callback = self._postprocess[tree.rule.alias] + assert callback, tree.rule.alias + r = callback(children) + return r + + +def get_frontend(parser, lexer): + if parser=='lalr': + if lexer is None: + raise ValueError('The LALR parser requires use of a lexer') + elif lexer == 'standard': + return LALR_TraditionalLexer + elif lexer == 'contextual': + return LALR_ContextualLexer + elif issubclass(lexer, Lexer): + return partial(LALR_CustomLexer, lexer) + else: + raise ValueError('Unknown lexer: %s' % lexer) + elif parser=='earley': + if lexer=='standard': + return Earley + elif lexer=='dynamic': + return XEarley + elif lexer=='dynamic_complete': + return XEarley_CompleteLex + elif lexer=='contextual': + raise ValueError('The Earley parser does not support the contextual parser') + else: + raise ValueError('Unknown lexer: %s' % lexer) + elif parser == 'cyk': + if lexer == 'standard': + return CYK + else: + raise ValueError('CYK parser requires using standard parser.') + else: + raise ValueError('Unknown parser: %s' % parser) diff --git a/python/extractor/lark/parsers/__init__.py b/python/extractor/lark/parsers/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/lark/parsers/cyk.py b/python/extractor/lark/parsers/cyk.py new file mode 100644 index 00000000000..d65d485b285 --- /dev/null +++ b/python/extractor/lark/parsers/cyk.py @@ -0,0 +1,342 @@ +"""This module implements a CYK parser.""" + +# Author: https://github.com/ehudt (2018) +# +# Adapted by Erez + + +from collections import defaultdict +import itertools + +from ..exceptions import ParseError +from ..lexer import Token +from ..tree import Tree +from ..grammar import Terminal as T, NonTerminal as NT, Symbol + +try: + xrange +except NameError: + xrange = range + +def match(t, s): + assert isinstance(t, T) + return t.name == s.type + + +class Rule(object): + """Context-free grammar rule.""" + + def __init__(self, lhs, rhs, weight, alias): + super(Rule, self).__init__() + assert isinstance(lhs, NT), lhs + assert all(isinstance(x, NT) or isinstance(x, T) for x in rhs), rhs + self.lhs = lhs + self.rhs = rhs + self.weight = weight + self.alias = alias + + def __str__(self): + return '%s -> %s' % (str(self.lhs), ' '.join(str(x) for x in self.rhs)) + + def __repr__(self): + return str(self) + + def __hash__(self): + return hash((self.lhs, tuple(self.rhs))) + + def __eq__(self, other): + return self.lhs == other.lhs and self.rhs == other.rhs + + def __ne__(self, other): + return not (self == other) + + +class Grammar(object): + """Context-free grammar.""" + + def __init__(self, rules): + self.rules = frozenset(rules) + + def __eq__(self, other): + return self.rules == other.rules + + def __str__(self): + return '\n' + '\n'.join(sorted(repr(x) for x in self.rules)) + '\n' + + def __repr__(self): + return str(self) + + +# Parse tree data structures +class RuleNode(object): + """A node in the parse tree, which also contains the full rhs rule.""" + + def __init__(self, rule, children, weight=0): + self.rule = rule + self.children = children + self.weight = weight + + def __repr__(self): + return 'RuleNode(%s, [%s])' % (repr(self.rule.lhs), ', '.join(str(x) for x in self.children)) + + + +class Parser(object): + """Parser wrapper.""" + + def __init__(self, rules, start): + super(Parser, self).__init__() + self.orig_rules = {rule.alias: rule for rule in rules} + rules = [self._to_rule(rule) for rule in rules] + self.grammar = to_cnf(Grammar(rules)) + self.start = NT(start) + + def _to_rule(self, lark_rule): + """Converts a lark rule, (lhs, rhs, callback, options), to a Rule.""" + assert isinstance(lark_rule.origin, NT) + assert all(isinstance(x, Symbol) for x in lark_rule.expansion) + return Rule( + lark_rule.origin, lark_rule.expansion, + weight=lark_rule.options.priority if lark_rule.options and lark_rule.options.priority else 0, + alias=lark_rule.alias) + + def parse(self, tokenized): # pylint: disable=invalid-name + """Parses input, which is a list of tokens.""" + table, trees = _parse(tokenized, self.grammar) + # Check if the parse succeeded. + if all(r.lhs != self.start for r in table[(0, len(tokenized) - 1)]): + raise ParseError('Parsing failed.') + parse = trees[(0, len(tokenized) - 1)][self.start] + return self._to_tree(revert_cnf(parse)) + + def _to_tree(self, rule_node): + """Converts a RuleNode parse tree to a lark Tree.""" + orig_rule = self.orig_rules[rule_node.rule.alias] + children = [] + for child in rule_node.children: + if isinstance(child, RuleNode): + children.append(self._to_tree(child)) + else: + assert isinstance(child.name, Token) + children.append(child.name) + t = Tree(orig_rule.origin, children) + t.rule=orig_rule + return t + + +def print_parse(node, indent=0): + if isinstance(node, RuleNode): + print(' ' * (indent * 2) + str(node.rule.lhs)) + for child in node.children: + print_parse(child, indent + 1) + else: + print(' ' * (indent * 2) + str(node.s)) + + +def _parse(s, g): + """Parses sentence 's' using CNF grammar 'g'.""" + # The CYK table. Indexed with a 2-tuple: (start pos, end pos) + table = defaultdict(set) + # Top-level structure is similar to the CYK table. Each cell is a dict from + # rule name to the best (lightest) tree for that rule. + trees = defaultdict(dict) + # Populate base case with existing terminal production rules + for i, w in enumerate(s): + for terminal, rules in g.terminal_rules.items(): + if match(terminal, w): + for rule in rules: + table[(i, i)].add(rule) + if (rule.lhs not in trees[(i, i)] or + rule.weight < trees[(i, i)][rule.lhs].weight): + trees[(i, i)][rule.lhs] = RuleNode(rule, [T(w)], weight=rule.weight) + + # Iterate over lengths of sub-sentences + for l in xrange(2, len(s) + 1): + # Iterate over sub-sentences with the given length + for i in xrange(len(s) - l + 1): + # Choose partition of the sub-sentence in [1, l) + for p in xrange(i + 1, i + l): + span1 = (i, p - 1) + span2 = (p, i + l - 1) + for r1, r2 in itertools.product(table[span1], table[span2]): + for rule in g.nonterminal_rules.get((r1.lhs, r2.lhs), []): + table[(i, i + l - 1)].add(rule) + r1_tree = trees[span1][r1.lhs] + r2_tree = trees[span2][r2.lhs] + rule_total_weight = rule.weight + r1_tree.weight + r2_tree.weight + if (rule.lhs not in trees[(i, i + l - 1)] + or rule_total_weight < trees[(i, i + l - 1)][rule.lhs].weight): + trees[(i, i + l - 1)][rule.lhs] = RuleNode(rule, [r1_tree, r2_tree], weight=rule_total_weight) + return table, trees + + +# This section implements context-free grammar converter to Chomsky normal form. +# It also implements a conversion of parse trees from its CNF to the original +# grammar. +# Overview: +# Applies the following operations in this order: +# * TERM: Eliminates non-solitary terminals from all rules +# * BIN: Eliminates rules with more than 2 symbols on their right-hand-side. +# * UNIT: Eliminates non-terminal unit rules +# +# The following grammar characteristics aren't featured: +# * Start symbol appears on RHS +# * Empty rules (epsilon rules) + + +class CnfWrapper(object): + """CNF wrapper for grammar. + + Validates that the input grammar is CNF and provides helper data structures. + """ + + def __init__(self, grammar): + super(CnfWrapper, self).__init__() + self.grammar = grammar + self.rules = grammar.rules + self.terminal_rules = defaultdict(list) + self.nonterminal_rules = defaultdict(list) + for r in self.rules: + # Validate that the grammar is CNF and populate auxiliary data structures. + assert isinstance(r.lhs, NT), r + assert len(r.rhs) in [1, 2], r + if len(r.rhs) == 1 and isinstance(r.rhs[0], T): + self.terminal_rules[r.rhs[0]].append(r) + elif len(r.rhs) == 2 and all(isinstance(x, NT) for x in r.rhs): + self.nonterminal_rules[tuple(r.rhs)].append(r) + else: + assert False, r + + def __eq__(self, other): + return self.grammar == other.grammar + + def __repr__(self): + return repr(self.grammar) + + +class UnitSkipRule(Rule): + """A rule that records NTs that were skipped during transformation.""" + + def __init__(self, lhs, rhs, skipped_rules, weight, alias): + super(UnitSkipRule, self).__init__(lhs, rhs, weight, alias) + self.skipped_rules = skipped_rules + + def __eq__(self, other): + return isinstance(other, type(self)) and self.skipped_rules == other.skipped_rules + + __hash__ = Rule.__hash__ + + +def build_unit_skiprule(unit_rule, target_rule): + skipped_rules = [] + if isinstance(unit_rule, UnitSkipRule): + skipped_rules += unit_rule.skipped_rules + skipped_rules.append(target_rule) + if isinstance(target_rule, UnitSkipRule): + skipped_rules += target_rule.skipped_rules + return UnitSkipRule(unit_rule.lhs, target_rule.rhs, skipped_rules, + weight=unit_rule.weight + target_rule.weight, alias=unit_rule.alias) + + +def get_any_nt_unit_rule(g): + """Returns a non-terminal unit rule from 'g', or None if there is none.""" + for rule in g.rules: + if len(rule.rhs) == 1 and isinstance(rule.rhs[0], NT): + return rule + return None + + +def _remove_unit_rule(g, rule): + """Removes 'rule' from 'g' without changing the langugage produced by 'g'.""" + new_rules = [x for x in g.rules if x != rule] + refs = [x for x in g.rules if x.lhs == rule.rhs[0]] + new_rules += [build_unit_skiprule(rule, ref) for ref in refs] + return Grammar(new_rules) + + +def _split(rule): + """Splits a rule whose len(rhs) > 2 into shorter rules.""" + rule_str = str(rule.lhs) + '__' + '_'.join(str(x) for x in rule.rhs) + rule_name = '__SP_%s' % (rule_str) + '_%d' + yield Rule(rule.lhs, [rule.rhs[0], NT(rule_name % 1)], weight=rule.weight, alias=rule.alias) + for i in xrange(1, len(rule.rhs) - 2): + yield Rule(NT(rule_name % i), [rule.rhs[i], NT(rule_name % (i + 1))], weight=0, alias='Split') + yield Rule(NT(rule_name % (len(rule.rhs) - 2)), rule.rhs[-2:], weight=0, alias='Split') + + +def _term(g): + """Applies the TERM rule on 'g' (see top comment).""" + all_t = {x for rule in g.rules for x in rule.rhs if isinstance(x, T)} + t_rules = {t: Rule(NT('__T_%s' % str(t)), [t], weight=0, alias='Term') for t in all_t} + new_rules = [] + for rule in g.rules: + if len(rule.rhs) > 1 and any(isinstance(x, T) for x in rule.rhs): + new_rhs = [t_rules[x].lhs if isinstance(x, T) else x for x in rule.rhs] + new_rules.append(Rule(rule.lhs, new_rhs, weight=rule.weight, alias=rule.alias)) + new_rules.extend(v for k, v in t_rules.items() if k in rule.rhs) + else: + new_rules.append(rule) + return Grammar(new_rules) + + +def _bin(g): + """Applies the BIN rule to 'g' (see top comment).""" + new_rules = [] + for rule in g.rules: + if len(rule.rhs) > 2: + new_rules += _split(rule) + else: + new_rules.append(rule) + return Grammar(new_rules) + + +def _unit(g): + """Applies the UNIT rule to 'g' (see top comment).""" + nt_unit_rule = get_any_nt_unit_rule(g) + while nt_unit_rule: + g = _remove_unit_rule(g, nt_unit_rule) + nt_unit_rule = get_any_nt_unit_rule(g) + return g + + +def to_cnf(g): + """Creates a CNF grammar from a general context-free grammar 'g'.""" + g = _unit(_bin(_term(g))) + return CnfWrapper(g) + + +def unroll_unit_skiprule(lhs, orig_rhs, skipped_rules, children, weight, alias): + if not skipped_rules: + return RuleNode(Rule(lhs, orig_rhs, weight=weight, alias=alias), children, weight=weight) + else: + weight = weight - skipped_rules[0].weight + return RuleNode( + Rule(lhs, [skipped_rules[0].lhs], weight=weight, alias=alias), [ + unroll_unit_skiprule(skipped_rules[0].lhs, orig_rhs, + skipped_rules[1:], children, + skipped_rules[0].weight, skipped_rules[0].alias) + ], weight=weight) + + +def revert_cnf(node): + """Reverts a parse tree (RuleNode) to its original non-CNF form (Node).""" + if isinstance(node, T): + return node + # Reverts TERM rule. + if node.rule.lhs.name.startswith('__T_'): + return node.children[0] + else: + children = [] + for child in map(revert_cnf, node.children): + # Reverts BIN rule. + if isinstance(child, RuleNode) and child.rule.lhs.name.startswith('__SP_'): + children += child.children + else: + children.append(child) + # Reverts UNIT rule. + if isinstance(node.rule, UnitSkipRule): + return unroll_unit_skiprule(node.rule.lhs, node.rule.rhs, + node.rule.skipped_rules, children, + node.rule.weight, node.rule.alias) + else: + return RuleNode(node.rule, children) diff --git a/python/extractor/lark/parsers/earley.py b/python/extractor/lark/parsers/earley.py new file mode 100644 index 00000000000..4ff26b2c793 --- /dev/null +++ b/python/extractor/lark/parsers/earley.py @@ -0,0 +1,239 @@ +"This module implements an Earley Parser" + +# The parser uses a parse-forest to keep track of derivations and ambiguations. +# When the parse ends successfully, a disambiguation stage resolves all ambiguity +# (right now ambiguity resolution is not developed beyond the needs of lark) +# Afterwards the parse tree is reduced (transformed) according to user callbacks. +# I use the no-recursion version of Transformer, because the tree might be +# deeper than Python's recursion limit (a bit absurd, but that's life) +# +# The algorithm keeps track of each state set, using a corresponding Column instance. +# Column keeps track of new items using NewsList instances. +# +# Author: Erez Shinan (2017) +# Email : erezshin@gmail.com + +from ..tree import Tree +from ..visitors import Transformer_InPlace, v_args +from ..exceptions import ParseError, UnexpectedToken +from .grammar_analysis import GrammarAnalyzer +from ..grammar import NonTerminal + + +class Derivation(Tree): + def __init__(self, rule, items=None): + Tree.__init__(self, 'drv', items or []) + self.meta.rule = rule + self._hash = None + + def _pretty_label(self): # Nicer pretty for debugging the parser + return self.rule.origin if self.rule else self.data + + def __hash__(self): + if self._hash is None: + self._hash = Tree.__hash__(self) + return self._hash + +class Item(object): + "An Earley Item, the atom of the algorithm." + + def __init__(self, rule, ptr, start, tree): + self.rule = rule + self.ptr = ptr + self.start = start + self.tree = tree if tree is not None else Derivation(self.rule) + + @property + def expect(self): + return self.rule.expansion[self.ptr] + + @property + def is_complete(self): + return self.ptr == len(self.rule.expansion) + + def advance(self, tree): + assert self.tree.data == 'drv' + new_tree = Derivation(self.rule, self.tree.children + [tree]) + return self.__class__(self.rule, self.ptr+1, self.start, new_tree) + + def __eq__(self, other): + return self.start is other.start and self.ptr == other.ptr and self.rule == other.rule + + def __hash__(self): + return hash((self.rule, self.ptr, id(self.start))) # Always runs Derivation.__hash__ + + def __repr__(self): + before = list(map(str, self.rule.expansion[:self.ptr])) + after = list(map(str, self.rule.expansion[self.ptr:])) + return '<(%d) %s : %s * %s>' % (id(self.start), self.rule.origin, ' '.join(before), ' '.join(after)) + +class NewsList(list): + "Keeps track of newly added items (append-only)" + + def __init__(self, initial=None): + list.__init__(self, initial or []) + self.last_iter = 0 + + def get_news(self): + i = self.last_iter + self.last_iter = len(self) + return self[i:] + + + +class Column: + "An entry in the table, aka Earley Chart. Contains lists of items." + def __init__(self, i, FIRST, predict_all=False): + self.i = i + self.to_reduce = NewsList() + self.to_predict = NewsList() + self.to_scan = [] + self.item_count = 0 + self.FIRST = FIRST + + self.predicted = set() + self.completed = {} + self.predict_all = predict_all + + def add(self, items): + """Sort items into scan/predict/reduce newslists + + Makes sure only unique items are added. + """ + for item in items: + + item_key = item, item.tree # Elsewhere, tree is not part of the comparison + if item.is_complete: + # XXX Potential bug: What happens if there's ambiguity in an empty rule? + if item.rule.expansion and item_key in self.completed: + old_tree = self.completed[item_key].tree + if old_tree == item.tree: + is_empty = not self.FIRST[item.rule.origin] + if not is_empty: + continue + + if old_tree.data != '_ambig': + new_tree = old_tree.copy() + new_tree.meta.rule = old_tree.meta.rule + old_tree.set('_ambig', [new_tree]) + old_tree.meta.rule = None # No longer a 'drv' node + + if item.tree.children[0] is old_tree: # XXX a little hacky! + raise ParseError("Infinite recursion in grammar! (Rule %s)" % item.rule) + + if item.tree not in old_tree.children: + old_tree.children.append(item.tree) + # old_tree.children.append(item.tree) + else: + self.completed[item_key] = item + self.to_reduce.append(item) + else: + if item.expect.is_term: + self.to_scan.append(item) + else: + k = item_key if self.predict_all else item + if k in self.predicted: + continue + self.predicted.add(k) + self.to_predict.append(item) + + self.item_count += 1 # Only count if actually added + + + def __bool__(self): + return bool(self.item_count) + __nonzero__ = __bool__ # Py2 backwards-compatibility + +class Parser: + def __init__(self, parser_conf, term_matcher, resolve_ambiguity=None): + analysis = GrammarAnalyzer(parser_conf) + self.parser_conf = parser_conf + self.resolve_ambiguity = resolve_ambiguity + + self.FIRST = analysis.FIRST + self.postprocess = {} + self.predictions = {} + for rule in parser_conf.rules: + self.postprocess[rule] = rule.alias if callable(rule.alias) else getattr(parser_conf.callback, rule.alias) + self.predictions[rule.origin] = [x.rule for x in analysis.expand_rule(rule.origin)] + + self.term_matcher = term_matcher + + + def parse(self, stream, start_symbol=None): + # Define parser functions + start_symbol = NonTerminal(start_symbol or self.parser_conf.start) + + _Item = Item + match = self.term_matcher + + def predict(nonterm, column): + assert not nonterm.is_term, nonterm + return [_Item(rule, 0, column, None) for rule in self.predictions[nonterm]] + + def complete(item): + name = item.rule.origin + return [i.advance(item.tree) for i in item.start.to_predict if i.expect == name] + + def predict_and_complete(column): + while True: + to_predict = {x.expect for x in column.to_predict.get_news() + if x.ptr} # if not part of an already predicted batch + to_reduce = set(column.to_reduce.get_news()) + if not (to_predict or to_reduce): + break + + for nonterm in to_predict: + column.add( predict(nonterm, column) ) + + for item in to_reduce: + new_items = list(complete(item)) + if item in new_items: + raise ParseError('Infinite recursion detected! (rule %s)' % item.rule) + column.add(new_items) + + def scan(i, token, column): + next_set = Column(i, self.FIRST) + next_set.add(item.advance(token) for item in column.to_scan if match(item.expect, token)) + + if not next_set: + expect = {i.expect.name for i in column.to_scan} + raise UnexpectedToken(token, expect, considered_rules=set(column.to_scan)) + + return next_set + + # Main loop starts + column0 = Column(0, self.FIRST) + column0.add(predict(start_symbol, column0)) + + column = column0 + for i, token in enumerate(stream): + predict_and_complete(column) + column = scan(i, token, column) + + predict_and_complete(column) + + # Parse ended. Now build a parse tree + solutions = [n.tree for n in column.to_reduce + if n.rule.origin==start_symbol and n.start is column0] + + if not solutions: + raise ParseError('Incomplete parse: Could not find a solution to input') + elif len(solutions) == 1: + tree = solutions[0] + else: + tree = Tree('_ambig', solutions) + + if self.resolve_ambiguity: + tree = self.resolve_ambiguity(tree) + + return ApplyCallbacks(self.postprocess).transform(tree) + + +class ApplyCallbacks(Transformer_InPlace): + def __init__(self, postprocess): + self.postprocess = postprocess + + @v_args(meta=True) + def drv(self, children, meta): + return self.postprocess[meta.rule](children) diff --git a/python/extractor/lark/parsers/grammar_analysis.py b/python/extractor/lark/parsers/grammar_analysis.py new file mode 100644 index 00000000000..d27aa9360f8 --- /dev/null +++ b/python/extractor/lark/parsers/grammar_analysis.py @@ -0,0 +1,148 @@ + +from ..utils import bfs, fzset, classify +from ..exceptions import GrammarError +from ..grammar import Rule, Terminal, NonTerminal + + +class RulePtr(object): + __slots__ = ('rule', 'index') + + def __init__(self, rule, index): + assert isinstance(rule, Rule) + assert index <= len(rule.expansion) + self.rule = rule + self.index = index + + def __repr__(self): + before = self.rule.expansion[:self.index] + after = self.rule.expansion[self.index:] + return '<%s : %s * %s>' % (self.rule.origin, ' '.join(before), ' '.join(after)) + + @property + def next(self): + return self.rule.expansion[self.index] + + def advance(self, sym): + assert self.next == sym + return RulePtr(self.rule, self.index+1) + + @property + def is_satisfied(self): + return self.index == len(self.rule.expansion) + + def __eq__(self, other): + return self.rule == other.rule and self.index == other.index + def __hash__(self): + return hash((self.rule, self.index)) + + +def update_set(set1, set2): + if not set2: + return False + + copy = set(set1) + set1 |= set2 + return set1 != copy + +def calculate_sets(rules): + """Calculate FOLLOW sets. + + Adapted from: http://lara.epfl.ch/w/cc09:algorithm_for_first_and_follow_sets""" + symbols = {sym for rule in rules for sym in rule.expansion} | {rule.origin for rule in rules} + + # foreach grammar rule X ::= Y(1) ... Y(k) + # if k=0 or {Y(1),...,Y(k)} subset of NULLABLE then + # NULLABLE = NULLABLE union {X} + # for i = 1 to k + # if i=1 or {Y(1),...,Y(i-1)} subset of NULLABLE then + # FIRST(X) = FIRST(X) union FIRST(Y(i)) + # for j = i+1 to k + # if i=k or {Y(i+1),...Y(k)} subset of NULLABLE then + # FOLLOW(Y(i)) = FOLLOW(Y(i)) union FOLLOW(X) + # if i+1=j or {Y(i+1),...,Y(j-1)} subset of NULLABLE then + # FOLLOW(Y(i)) = FOLLOW(Y(i)) union FIRST(Y(j)) + # until none of NULLABLE,FIRST,FOLLOW changed in last iteration + + NULLABLE = set() + FIRST = {} + FOLLOW = {} + for sym in symbols: + FIRST[sym]={sym} if sym.is_term else set() + FOLLOW[sym]=set() + + # Calculate NULLABLE and FIRST + changed = True + while changed: + changed = False + + for rule in rules: + if set(rule.expansion) <= NULLABLE: + if update_set(NULLABLE, {rule.origin}): + changed = True + + for i, sym in enumerate(rule.expansion): + if set(rule.expansion[:i]) <= NULLABLE: + if update_set(FIRST[rule.origin], FIRST[sym]): + changed = True + + # Calculate FOLLOW + changed = True + while changed: + changed = False + + for rule in rules: + for i, sym in enumerate(rule.expansion): + if i==len(rule.expansion)-1 or set(rule.expansion[i:]) <= NULLABLE: + if update_set(FOLLOW[sym], FOLLOW[rule.origin]): + changed = True + + for j in range(i+1, len(rule.expansion)): + if set(rule.expansion[i+1:j]) <= NULLABLE: + if update_set(FOLLOW[sym], FIRST[rule.expansion[j]]): + changed = True + + return FIRST, FOLLOW, NULLABLE + + +class GrammarAnalyzer(object): + def __init__(self, parser_conf, debug=False): + self.debug = debug + + rules = parser_conf.rules + [Rule(NonTerminal('$root'), [NonTerminal(parser_conf.start), Terminal('$END')])] + self.rules_by_origin = classify(rules, lambda r: r.origin) + + assert len(rules) == len(set(rules)) + for r in rules: + for sym in r.expansion: + if not (sym.is_term or sym in self.rules_by_origin): + raise GrammarError("Using an undefined rule: %s" % sym) # TODO test validation + + self.start_state = self.expand_rule(NonTerminal('$root')) + + self.FIRST, self.FOLLOW, self.NULLABLE = calculate_sets(rules) + + def expand_rule(self, rule): + "Returns all init_ptrs accessible by rule (recursive)" + init_ptrs = set() + def _expand_rule(rule): + assert not rule.is_term, rule + + for r in self.rules_by_origin[rule]: + init_ptr = RulePtr(r, 0) + init_ptrs.add(init_ptr) + + if r.expansion: # if not empty rule + new_r = init_ptr.next + if not new_r.is_term: + yield new_r + + for _ in bfs([rule], _expand_rule): + pass + + return fzset(init_ptrs) + + def _first(self, r): + if r.is_term: + return {r} + else: + return {rp.next for rp in self.expand_rule(r) if rp.next.is_term} diff --git a/python/extractor/lark/parsers/lalr_analysis.py b/python/extractor/lark/parsers/lalr_analysis.py new file mode 100644 index 00000000000..b69fa0f31ee --- /dev/null +++ b/python/extractor/lark/parsers/lalr_analysis.py @@ -0,0 +1,108 @@ +"""This module builds a LALR(1) transition-table for lalr_parser.py + +For now, shift/reduce conflicts are automatically resolved as shifts. +""" + +# Author: Erez Shinan (2017) +# Email : erezshin@gmail.com + +import logging +from collections import defaultdict + +from ..utils import classify, classify_bool, bfs, fzset +from ..exceptions import GrammarError + +from .grammar_analysis import GrammarAnalyzer, Terminal + +class Action: + def __init__(self, name): + self.name = name + def __str__(self): + return self.name + def __repr__(self): + return str(self) + +Shift = Action('Shift') +Reduce = Action('Reduce') + +class ParseTable: + def __init__(self, states, start_state, end_state): + self.states = states + self.start_state = start_state + self.end_state = end_state + +class IntParseTable(ParseTable): + + @classmethod + def from_ParseTable(cls, parse_table): + enum = list(parse_table.states) + state_to_idx = {s:i for i,s in enumerate(enum)} + int_states = {} + + for s, la in parse_table.states.items(): + la = {k:(v[0], state_to_idx[v[1]]) if v[0] is Shift else v + for k,v in la.items()} + int_states[ state_to_idx[s] ] = la + + + start_state = state_to_idx[parse_table.start_state] + end_state = state_to_idx[parse_table.end_state] + return cls(int_states, start_state, end_state) + + + + +class LALR_Analyzer(GrammarAnalyzer): + + def compute_lookahead(self): + self.end_states = [] + + self.states = {} + def step(state): + lookahead = defaultdict(list) + sat, unsat = classify_bool(state, lambda rp: rp.is_satisfied) + for rp in sat: + for term in self.FOLLOW.get(rp.rule.origin, ()): + lookahead[term].append((Reduce, rp.rule)) + + d = classify(unsat, lambda rp: rp.next) + for sym, rps in d.items(): + rps = {rp.advance(sym) for rp in rps} + + for rp in set(rps): + if not rp.is_satisfied and not rp.next.is_term: + rps |= self.expand_rule(rp.next) + + new_state = fzset(rps) + lookahead[sym].append((Shift, new_state)) + if sym == Terminal('$END'): + self.end_states.append( new_state ) + yield new_state + + for k, v in lookahead.items(): + if len(v) > 1: + if self.debug: + logging.warn("Shift/reduce conflict for %s: %s. Resolving as shift.", k, v) + for x in v: + # XXX resolving shift/reduce into shift, like PLY + # Give a proper warning + if x[0] is Shift: + lookahead[k] = [x] + + for k, v in lookahead.items(): + if not len(v) == 1: + raise GrammarError("Collision in %s: %s" %(k, ', '.join(['\n * %s: %s' % x for x in v]))) + + self.states[state] = {k.name:v[0] for k, v in lookahead.items()} + + for _ in bfs([self.start_state], step): + pass + + self.end_state ,= self.end_states + + self._parse_table = ParseTable(self.states, self.start_state, self.end_state) + + if self.debug: + self.parse_table = self._parse_table + else: + self.parse_table = IntParseTable.from_ParseTable(self._parse_table) diff --git a/python/extractor/lark/parsers/lalr_parser.py b/python/extractor/lark/parsers/lalr_parser.py new file mode 100644 index 00000000000..8fa56f51aa0 --- /dev/null +++ b/python/extractor/lark/parsers/lalr_parser.py @@ -0,0 +1,90 @@ +"""This module implements a LALR(1) Parser +""" +# Author: Erez Shinan (2017) +# Email : erezshin@gmail.com +from ..exceptions import UnexpectedToken + +from .lalr_analysis import LALR_Analyzer, Shift + +class Parser: + def __init__(self, parser_conf): + assert all(r.options is None or r.options.priority is None + for r in parser_conf.rules), "LALR doesn't yet support prioritization" + analysis = LALR_Analyzer(parser_conf) + analysis.compute_lookahead() + callbacks = {rule: getattr(parser_conf.callback, rule.alias or rule.origin, None) + for rule in parser_conf.rules} + + self._parse_table = analysis.parse_table + self.parser_conf = parser_conf + self.parser = _Parser(analysis.parse_table, callbacks) + self.parse = self.parser.parse + +###{standalone + +class _Parser: + def __init__(self, parse_table, callbacks): + self.states = parse_table.states + self.start_state = parse_table.start_state + self.end_state = parse_table.end_state + self.callbacks = callbacks + + def parse(self, seq, set_state=None): + i = 0 + token = None + stream = iter(seq) + states = self.states + + state_stack = [self.start_state] + value_stack = [] + + if set_state: set_state(self.start_state) + + def get_action(key): + state = state_stack[-1] + try: + return states[state][key] + except KeyError: + expected = states[state].keys() + raise UnexpectedToken(token, expected, state=state) # TODO filter out rules from expected + + def reduce(rule): + size = len(rule.expansion) + if size: + s = value_stack[-size:] + del state_stack[-size:] + del value_stack[-size:] + else: + s = [] + + value = self.callbacks[rule](s) + + _action, new_state = get_action(rule.origin.name) + assert _action is Shift + state_stack.append(new_state) + value_stack.append(value) + + # Main LALR-parser loop + for i, token in enumerate(stream): + while True: + action, arg = get_action(token.type) + assert arg != self.end_state + + if action is Shift: + state_stack.append(arg) + value_stack.append(token) + if set_state: set_state(arg) + break # next token + else: + reduce(arg) + + while True: + _action, arg = get_action('$END') + if _action is Shift: + assert arg == self.end_state + val ,= value_stack + return val + else: + reduce(arg) + +###} diff --git a/python/extractor/lark/parsers/resolve_ambig.py b/python/extractor/lark/parsers/resolve_ambig.py new file mode 100644 index 00000000000..2470eb9788c --- /dev/null +++ b/python/extractor/lark/parsers/resolve_ambig.py @@ -0,0 +1,109 @@ +from ..utils import compare +from functools import cmp_to_key + +from ..tree import Tree + + +# Standard ambiguity resolver (uses comparison) +# +# Author: Erez Sh + +def _compare_rules(rule1, rule2): + return -compare( len(rule1.expansion), len(rule2.expansion)) + +def _sum_priority(tree): + p = 0 + + for n in tree.iter_subtrees(): + try: + p += n.meta.rule.options.priority or 0 + except AttributeError: + pass + + return p + +def _compare_priority(tree1, tree2): + tree1.iter_subtrees() + +def _compare_drv(tree1, tree2): + try: + rule1 = tree1.meta.rule + except AttributeError: + rule1 = None + + try: + rule2 = tree2.meta.rule + except AttributeError: + rule2 = None + + if None == rule1 == rule2: + return compare(tree1, tree2) + elif rule1 is None: + return -1 + elif rule2 is None: + return 1 + + assert tree1.data != '_ambig' + assert tree2.data != '_ambig' + + p1 = _sum_priority(tree1) + p2 = _sum_priority(tree2) + c = (p1 or p2) and compare(p1, p2) + if c: + return c + + c = _compare_rules(tree1.meta.rule, tree2.meta.rule) + if c: + return c + + # rules are "equal", so compare trees + if len(tree1.children) == len(tree2.children): + for t1, t2 in zip(tree1.children, tree2.children): + c = _compare_drv(t1, t2) + if c: + return c + + return compare(len(tree1.children), len(tree2.children)) + + +def _standard_resolve_ambig(tree): + assert tree.data == '_ambig' + key_f = cmp_to_key(_compare_drv) + best = max(tree.children, key=key_f) + assert best.data == 'drv' + tree.set('drv', best.children) + tree.meta.rule = best.meta.rule # needed for applying callbacks + +def standard_resolve_ambig(tree): + for ambig in tree.find_data('_ambig'): + _standard_resolve_ambig(ambig) + + return tree + + + + +# Anti-score Sum +# +# Author: Uriva (https://github.com/uriva) + +def _antiscore_sum_drv(tree): + if not isinstance(tree, Tree): + return 0 + + assert tree.data != '_ambig' + + return _sum_priority(tree) + +def _antiscore_sum_resolve_ambig(tree): + assert tree.data == '_ambig' + best = min(tree.children, key=_antiscore_sum_drv) + assert best.data == 'drv' + tree.set('drv', best.children) + tree.meta.rule = best.meta.rule # needed for applying callbacks + +def antiscore_sum_resolve_ambig(tree): + for ambig in tree.find_data('_ambig'): + _antiscore_sum_resolve_ambig(ambig) + + return tree diff --git a/python/extractor/lark/parsers/xearley.py b/python/extractor/lark/parsers/xearley.py new file mode 100644 index 00000000000..ff194a3c213 --- /dev/null +++ b/python/extractor/lark/parsers/xearley.py @@ -0,0 +1,156 @@ +"This module implements an experimental Earley Parser with a dynamic lexer" + +# The parser uses a parse-forest to keep track of derivations and ambiguations. +# When the parse ends successfully, a disambiguation stage resolves all ambiguity +# (right now ambiguity resolution is not developed beyond the needs of lark) +# Afterwards the parse tree is reduced (transformed) according to user callbacks. +# I use the no-recursion version of Transformer and Visitor, because the tree might be +# deeper than Python's recursion limit (a bit absurd, but that's life) +# +# The algorithm keeps track of each state set, using a corresponding Column instance. +# Column keeps track of new items using NewsList instances. +# +# Instead of running a lexer beforehand, or using a costy char-by-char method, this parser +# uses regular expressions by necessity, achieving high-performance while maintaining all of +# Earley's power in parsing any CFG. +# +# +# Author: Erez Shinan (2017) +# Email : erezshin@gmail.com + +from collections import defaultdict + +from ..exceptions import ParseError, UnexpectedCharacters +from ..lexer import Token +from ..tree import Tree +from .grammar_analysis import GrammarAnalyzer +from ..grammar import NonTerminal, Terminal + +from .earley import ApplyCallbacks, Item, Column + + +class Parser: + def __init__(self, parser_conf, term_matcher, resolve_ambiguity=None, ignore=(), predict_all=False, complete_lex=False): + self.analysis = GrammarAnalyzer(parser_conf) + self.parser_conf = parser_conf + self.resolve_ambiguity = resolve_ambiguity + self.ignore = [Terminal(t) for t in ignore] + self.predict_all = predict_all + self.complete_lex = complete_lex + + self.FIRST = self.analysis.FIRST + self.postprocess = {} + self.predictions = {} + for rule in parser_conf.rules: + self.postprocess[rule] = getattr(parser_conf.callback, rule.alias) + self.predictions[rule.origin] = [x.rule for x in self.analysis.expand_rule(rule.origin)] + + self.term_matcher = term_matcher + + + def parse(self, stream, start_symbol=None): + # Define parser functions + start_symbol = NonTerminal(start_symbol or self.parser_conf.start) + delayed_matches = defaultdict(list) + match = self.term_matcher + + text_line = 1 + text_column = 1 + + def predict(nonterm, column): + assert not nonterm.is_term, nonterm + return [Item(rule, 0, column, None) for rule in self.predictions[nonterm]] + + def complete(item): + name = item.rule.origin + return [i.advance(item.tree) for i in item.start.to_predict if i.expect == name] + + def predict_and_complete(column): + while True: + to_predict = {x.expect for x in column.to_predict.get_news() + if x.ptr} # if not part of an already predicted batch + to_reduce = column.to_reduce.get_news() + if not (to_predict or to_reduce): + break + + for nonterm in to_predict: + column.add( predict(nonterm, column) ) + for item in to_reduce: + new_items = list(complete(item)) + if item in new_items: + raise ParseError('Infinite recursion detected! (rule %s)' % item.rule) + column.add(new_items) + + def scan(i, column): + to_scan = column.to_scan + + for x in self.ignore: + m = match(x, stream, i) + if m: + delayed_matches[m.end()] += set(to_scan) + delayed_matches[m.end()] += set(column.to_reduce) + + # TODO add partial matches for ignore too? + # s = m.group(0) + # for j in range(1, len(s)): + # m = x.match(s[:-j]) + # if m: + # delayed_matches[m.end()] += to_scan + + for item in to_scan: + m = match(item.expect, stream, i) + if m: + t = Token(item.expect.name, m.group(0), i, text_line, text_column) + delayed_matches[m.end()].append(item.advance(t)) + + if self.complete_lex: + s = m.group(0) + for j in range(1, len(s)): + m = match(item.expect, s[:-j]) + if m: + t = Token(item.expect.name, m.group(0), i, text_line, text_column) + delayed_matches[i+m.end()].append(item.advance(t)) + + next_set = Column(i+1, self.FIRST, predict_all=self.predict_all) + next_set.add(delayed_matches[i+1]) + del delayed_matches[i+1] # No longer needed, so unburden memory + + if not next_set and not delayed_matches: + raise UnexpectedCharacters(stream, i, text_line, text_column, {item.expect for item in to_scan}, set(to_scan)) + + return next_set + + # Main loop starts + column0 = Column(0, self.FIRST, predict_all=self.predict_all) + column0.add(predict(start_symbol, column0)) + + column = column0 + for i, token in enumerate(stream): + predict_and_complete(column) + column = scan(i, column) + + if token == '\n': + text_line += 1 + text_column = 1 + else: + text_column += 1 + + predict_and_complete(column) + + # Parse ended. Now build a parse tree + solutions = [n.tree for n in column.to_reduce + if n.rule.origin==start_symbol and n.start is column0] + + if not solutions: + expected_tokens = [t.expect for t in column.to_scan] + raise ParseError('Unexpected end of input! Expecting a terminal of: %s' % expected_tokens) + + elif len(solutions) == 1: + tree = solutions[0] + else: + tree = Tree('_ambig', solutions) + + if self.resolve_ambiguity: + tree = self.resolve_ambiguity(tree) + + return ApplyCallbacks(self.postprocess).transform(tree) diff --git a/python/extractor/lark/reconstruct.py b/python/extractor/lark/reconstruct.py new file mode 100644 index 00000000000..bf8dbafa36a --- /dev/null +++ b/python/extractor/lark/reconstruct.py @@ -0,0 +1,129 @@ +from collections import defaultdict + +from .tree import Tree +from .visitors import Transformer_InPlace +from .common import ParserConf, PatternStr +from .lexer import Token +from .parsers import earley, resolve_ambig +from .grammar import Rule, Terminal, NonTerminal + + + +def is_discarded_terminal(t): + return t.is_term and t.filter_out + +def is_iter_empty(i): + try: + _ = next(i) + return False + except StopIteration: + return True + +class WriteTokensTransformer(Transformer_InPlace): + def __init__(self, tokens): + self.tokens = tokens + + def __default__(self, data, children, meta): + # if not isinstance(t, MatchTree): + # return t + if not getattr(meta, 'match_tree', False): + return Tree(data, children) + + iter_args = iter(children) + to_write = [] + for sym in meta.orig_expansion: + if is_discarded_terminal(sym): + t = self.tokens[sym.name] + assert isinstance(t.pattern, PatternStr) + to_write.append(t.pattern.value) + else: + x = next(iter_args) + if isinstance(x, list): + to_write += x + else: + if isinstance(x, Token): + assert Terminal(x.type) == sym, x + else: + assert NonTerminal(x.data) == sym, (sym, x) + to_write.append(x) + + assert is_iter_empty(iter_args) + return to_write + + +class MatchTree(Tree): + pass + +class MakeMatchTree: + def __init__(self, name, expansion): + self.name = name + self.expansion = expansion + + def __call__(self, args): + t = MatchTree(self.name, args) + t.meta.match_tree = True + t.meta.orig_expansion = self.expansion + return t + +class Reconstructor: + def __init__(self, parser): + # XXX TODO calling compile twice returns different results! + tokens, rules, _grammar_extra = parser.grammar.compile() + + self.write_tokens = WriteTokensTransformer({t.name:t for t in tokens}) + self.rules = list(self._build_recons_rules(rules)) + + def _build_recons_rules(self, rules): + expand1s = {r.origin for r in rules if r.options and r.options.expand1} + + aliases = defaultdict(list) + for r in rules: + if r.alias: + aliases[r.origin].append( r.alias ) + + rule_names = {r.origin for r in rules} + nonterminals = {sym for sym in rule_names + if sym.name.startswith('_') or sym in expand1s or sym in aliases } + + for r in rules: + recons_exp = [sym if sym in nonterminals else Terminal(sym.name) + for sym in r.expansion if not is_discarded_terminal(sym)] + + # Skip self-recursive constructs + if recons_exp == [r.origin]: + continue + + sym = NonTerminal(r.alias) if r.alias else r.origin + + yield Rule(sym, recons_exp, MakeMatchTree(sym.name, r.expansion)) + + for origin, rule_aliases in aliases.items(): + for alias in rule_aliases: + yield Rule(origin, [Terminal(alias)], MakeMatchTree(origin.name, [NonTerminal(alias)])) + + yield Rule(origin, [Terminal(origin.name)], MakeMatchTree(origin.name, [origin])) + + + + def _match(self, term, token): + if isinstance(token, Tree): + return Terminal(token.data) == term + elif isinstance(token, Token): + return term == Terminal(token.type) + assert False + + def _reconstruct(self, tree): + # TODO: ambiguity? + parser = earley.Parser(ParserConf(self.rules, None, tree.data), self._match, resolve_ambiguity=resolve_ambig.standard_resolve_ambig) + unreduced_tree = parser.parse(tree.children) # find a full derivation + assert unreduced_tree.data == tree.data + res = self.write_tokens.transform(unreduced_tree) + for item in res: + if isinstance(item, Tree): + for x in self._reconstruct(item): + yield x + else: + yield item + + def reconstruct(self, tree): + return ''.join(self._reconstruct(tree)) diff --git a/python/extractor/lark/tools/__init__.py b/python/extractor/lark/tools/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/lark/tools/nearley.py b/python/extractor/lark/tools/nearley.py new file mode 100644 index 00000000000..a7fd2592941 --- /dev/null +++ b/python/extractor/lark/tools/nearley.py @@ -0,0 +1,186 @@ +"Converts between Lark and Nearley grammars. Work in progress!" + +import os.path +import sys +import codecs + + +from lark import Lark, InlineTransformer + +nearley_grammar = r""" + start: (ruledef|directive)+ + + directive: "@" NAME (STRING|NAME) + | "@" JS -> js_code + ruledef: NAME "->" expansions + | NAME REGEXP "->" expansions -> macro + expansions: expansion ("|" expansion)* + + expansion: expr+ js + + ?expr: item [":" /[+*?]/] + + ?item: rule|string|regexp + | "(" expansions ")" + + rule: NAME + string: STRING + regexp: REGEXP + JS: /{%.*?%}/s + js: JS? + + NAME: /[a-zA-Z_$]\w*/ + COMMENT: /#[^\n]*/ + REGEXP: /\[.*?\]/ + STRING: /".*?"/ + + %import common.WS + %ignore WS + %ignore COMMENT + + """ + +nearley_grammar_parser = Lark(nearley_grammar, parser='earley', lexer='standard') + +def _get_rulename(name): + name = {'_': '_ws_maybe', '__':'_ws'}.get(name, name) + return 'n_' + name.replace('$', '__DOLLAR__').lower() + +class NearleyToLark(InlineTransformer): + def __init__(self): + self._count = 0 + self.extra_rules = {} + self.extra_rules_rev = {} + self.alias_js_code = {} + + def _new_function(self, code): + name = 'alias_%d' % self._count + self._count += 1 + + self.alias_js_code[name] = code + return name + + def _extra_rule(self, rule): + if rule in self.extra_rules_rev: + return self.extra_rules_rev[rule] + + name = 'xrule_%d' % len(self.extra_rules) + assert name not in self.extra_rules + self.extra_rules[name] = rule + self.extra_rules_rev[rule] = name + return name + + def rule(self, name): + return _get_rulename(name) + + def ruledef(self, name, exps): + return '!%s: %s' % (_get_rulename(name), exps) + + def expr(self, item, op): + rule = '(%s)%s' % (item, op) + return self._extra_rule(rule) + + def regexp(self, r): + return '/%s/' % r + + def string(self, s): + return self._extra_rule(s) + + def expansion(self, *x): + x, js = x[:-1], x[-1] + if js.children: + js_code ,= js.children + js_code = js_code[2:-2] + alias = '-> ' + self._new_function(js_code) + else: + alias = '' + return ' '.join(x) + alias + + def expansions(self, *x): + return '%s' % ('\n |'.join(x)) + + def start(self, *rules): + return '\n'.join(filter(None, rules)) + +def _nearley_to_lark(g, builtin_path, n2l, js_code, folder_path, includes): + rule_defs = [] + + tree = nearley_grammar_parser.parse(g) + for statement in tree.children: + if statement.data == 'directive': + directive, arg = statement.children + if directive in ('builtin', 'include'): + folder = builtin_path if directive == 'builtin' else folder_path + path = os.path.join(folder, arg[1:-1]) + if path not in includes: + includes.add(path) + with codecs.open(path, encoding='utf8') as f: + text = f.read() + rule_defs += _nearley_to_lark(text, builtin_path, n2l, js_code, os.path.abspath(os.path.dirname(path)), includes) + else: + assert False, directive + elif statement.data == 'js_code': + code ,= statement.children + code = code[2:-2] + js_code.append(code) + elif statement.data == 'macro': + pass # TODO Add support for macros! + elif statement.data == 'ruledef': + rule_defs.append( n2l.transform(statement) ) + else: + raise Exception("Unknown statement: %s" % statement) + + return rule_defs + + +def create_code_for_nearley_grammar(g, start, builtin_path, folder_path): + import js2py + + emit_code = [] + def emit(x=None): + if x: + emit_code.append(x) + emit_code.append('\n') + + js_code = ['function id(x) {return x[0];}'] + n2l = NearleyToLark() + rule_defs = _nearley_to_lark(g, builtin_path, n2l, js_code, folder_path, set()) + lark_g = '\n'.join(rule_defs) + lark_g += '\n'+'\n'.join('!%s: %s' % item for item in n2l.extra_rules.items()) + + emit('from lark import Lark, Transformer') + emit() + emit('grammar = ' + repr(lark_g)) + emit() + + for alias, code in n2l.alias_js_code.items(): + js_code.append('%s = (%s);' % (alias, code)) + + emit(js2py.translate_js('\n'.join(js_code))) + emit('class TransformNearley(Transformer):') + for alias in n2l.alias_js_code: + emit(" %s = var.get('%s').to_python()" % (alias, alias)) + emit(" __default__ = lambda self, n, c, m: c if c else None") + + emit() + emit('parser = Lark(grammar, start="n_%s")' % start) + emit('def parse(text):') + emit(' return TransformNearley().transform(parser.parse(text))') + + return ''.join(emit_code) + +def main(fn, start, nearley_lib): + with codecs.open(fn, encoding='utf8') as f: + grammar = f.read() + return create_code_for_nearley_grammar(grammar, start, os.path.join(nearley_lib, 'builtin'), os.path.abspath(os.path.dirname(fn))) + + +if __name__ == '__main__': + if len(sys.argv) < 4: + print("Reads Nearley grammar (with js functions) outputs an equivalent lark parser.") + print("Usage: %s <nearley_grammar_path> <start_rule> <nearley_lib_path>" % sys.argv[0]) + sys.exit(1) + + fn, start, nearley_lib = sys.argv[1:] + + print(main(fn, start, nearley_lib)) diff --git a/python/extractor/lark/tools/standalone.py b/python/extractor/lark/tools/standalone.py new file mode 100644 index 00000000000..1913a99e480 --- /dev/null +++ b/python/extractor/lark/tools/standalone.py @@ -0,0 +1,7 @@ +# This file used to contain the Lark standalone tool. +# +# We do not use it, and it is licensed under the GPL, which is much +# more restrictive than the rest of Lark. In order to avoid depending +# on it accidentally, we exclude it from our repository and distribution. +# When LARK is upgraded, this file should be kept in preference to the +# original. diff --git a/python/extractor/lark/tree.py b/python/extractor/lark/tree.py new file mode 100644 index 00000000000..98b8db65da5 --- /dev/null +++ b/python/extractor/lark/tree.py @@ -0,0 +1,162 @@ +try: + from future_builtins import filter +except ImportError: + pass + +from copy import deepcopy + +class Meta: + pass + +###{standalone +class Tree(object): + def __init__(self, data, children, meta=None): + self.data = data + self.children = children + self._meta = meta + + @property + def meta(self): + if self._meta is None: + self._meta = Meta() + return self._meta + + def __repr__(self): + return 'Tree(%s, %s)' % (self.data, self.children) + + def _pretty_label(self): + return self.data + + def _pretty(self, level, indent_str): + if len(self.children) == 1 and not isinstance(self.children[0], Tree): + return [ indent_str*level, self._pretty_label(), '\t', '%s' % (self.children[0],), '\n'] + + l = [ indent_str*level, self._pretty_label(), '\n' ] + for n in self.children: + if isinstance(n, Tree): + l += n._pretty(level+1, indent_str) + else: + l += [ indent_str*(level+1), '%s' % (n,), '\n' ] + + return l + + def pretty(self, indent_str=' '): + return ''.join(self._pretty(0, indent_str)) +###} + + def expand_kids_by_index(self, *indices): + "Expand (inline) children at the given indices" + for i in sorted(indices, reverse=True): # reverse so that changing tail won't affect indices + kid = self.children[i] + self.children[i:i+1] = kid.children + + def __eq__(self, other): + try: + return self.data == other.data and self.children == other.children + except AttributeError: + return False + + def __ne__(self, other): + return not (self == other) + + def __hash__(self): + return hash((self.data, tuple(self.children))) + + def find_pred(self, pred): + "Find all nodes where pred(tree) == True" + return filter(pred, self.iter_subtrees()) + + def find_data(self, data): + "Find all nodes where tree.data == data" + return self.find_pred(lambda t: t.data == data) + + def scan_values(self, pred): + for c in self.children: + if isinstance(c, Tree): + for t in c.scan_values(pred): + yield t + else: + if pred(c): + yield c + + def iter_subtrees(self): + # TODO: Re-write as a more efficient version + + visited = set() + q = [self] + + l = [] + while q: + subtree = q.pop() + l.append( subtree ) + if id(subtree) in visited: + continue # already been here from another branch + visited.add(id(subtree)) + q += [c for c in subtree.children if isinstance(c, Tree)] + + seen = set() + for x in reversed(l): + if id(x) not in seen: + yield x + seen.add(id(x)) + + + def __deepcopy__(self, memo): + return type(self)(self.data, deepcopy(self.children, memo)) + + def copy(self): + return type(self)(self.data, self.children) + def set(self, data, children): + self.data = data + self.children = children + + # XXX Deprecated! Here for backwards compatibility <0.6.0 + @property + def line(self): + return self.meta.line + @property + def column(self): + return self.meta.column + @property + def end_line(self): + return self.meta.end_line + @property + def end_column(self): + return self.meta.end_column + + +class SlottedTree(Tree): + __slots__ = 'data', 'children', 'rule', '_meta' + + +def pydot__tree_to_png(tree, filename): + "Creates a colorful image that represents the tree (data+children, without meta)" + + import pydot + graph = pydot.Dot(graph_type='digraph', rankdir="LR") + + i = [0] + + def new_leaf(leaf): + node = pydot.Node(i[0], label=repr(leaf)) + i[0] += 1 + graph.add_node(node) + return node + + def _to_pydot(subtree): + color = hash(subtree.data) & 0xffffff + color |= 0x808080 + + subnodes = [_to_pydot(child) if isinstance(child, Tree) else new_leaf(child) + for child in subtree.children] + node = pydot.Node(i[0], style="filled", fillcolor="#%x"%color, label=subtree.data) + i[0] += 1 + graph.add_node(node) + + for subnode in subnodes: + graph.add_edge(pydot.Edge(node, subnode)) + + return node + + _to_pydot(tree) + graph.write_png(filename) diff --git a/python/extractor/lark/utils.py b/python/extractor/lark/utils.py new file mode 100644 index 00000000000..3c92bcc1438 --- /dev/null +++ b/python/extractor/lark/utils.py @@ -0,0 +1,127 @@ +from collections import deque +import sys + +class fzset(frozenset): + def __repr__(self): + return '{%s}' % ', '.join(map(repr, self)) + + +def classify_bool(seq, pred): + true_elems = [] + false_elems = [] + + for elem in seq: + if pred(elem): + true_elems.append(elem) + else: + false_elems.append(elem) + + return true_elems, false_elems + +def classify(seq, key=None, value=None): + d = {} + for item in seq: + k = key(item) if (key is not None) else item + v = value(item) if (value is not None) else item + if k in d: + d[k].append(v) + else: + d[k] = [v] + return d + +def bfs(initial, expand): + open_q = deque(list(initial)) + visited = set(open_q) + while open_q: + node = open_q.popleft() + yield node + for next_node in expand(node): + if next_node not in visited: + visited.add(next_node) + open_q.append(next_node) + + + + +try: + STRING_TYPE = basestring +except NameError: # Python 3 + STRING_TYPE = str + +###{standalone + +import types +from functools import wraps, partial +from contextlib import contextmanager + +Str = type(u'') + +def smart_decorator(f, create_decorator): + if isinstance(f, types.FunctionType): + return wraps(f)(create_decorator(f, True)) + + elif isinstance(f, (type, types.BuiltinFunctionType)): + return wraps(f)(create_decorator(f, False)) + + elif isinstance(f, types.MethodType): + return wraps(f)(create_decorator(f.__func__, True)) + + elif isinstance(f, partial): + # wraps does not work for partials in 2.7: https://bugs.python.org/issue3445 + return create_decorator(f.__func__, True) + + else: + return create_decorator(f.__func__.__call__, True) + + + + +try: + from contextlib import suppress # Python 3 +except ImportError: + @contextmanager + def suppress(*excs): + '''Catch and dismiss the provided exception + + >>> x = 'hello' + >>> with suppress(IndexError): + ... x = x[10] + >>> x + 'hello' + ''' + try: + yield + except excs: + pass + +###} + + + +try: + compare = cmp +except NameError: + def compare(a, b): + if a == b: + return 0 + elif a > b: + return 1 + return -1 + + +def get_regexp_width(regexp): + # in 3.11 sre_parse was replaced with re._parser + # see implementation in https://github.com/python/cpython/blob/3.11/Lib/sre_parse.py + if sys.version_info >= (3, 11): + import re + try: + return re._parser.parse(regexp).getwidth() + except re.error: + raise ValueError(regexp) + else: + import sre_constants + import sre_parse + try: + return sre_parse.parse(regexp).getwidth() + except sre_constants.error: + raise ValueError(regexp) diff --git a/python/extractor/lark/visitors.py b/python/extractor/lark/visitors.py new file mode 100644 index 00000000000..b7969d51bf2 --- /dev/null +++ b/python/extractor/lark/visitors.py @@ -0,0 +1,250 @@ +from inspect import getmembers, getmro +from functools import wraps + +from .utils import smart_decorator +from .tree import Tree + +class Discard(Exception): + pass + + +# Transformers + +class Transformer: + """Visits the tree recursively, starting with the leaves and finally the root (bottom-up) + + Calls its methods (provided by user via inheritance) according to tree.data + The returned value replaces the old one in the structure. + + Can be used to implement map or reduce. + """ + + def _call_userfunc(self, tree, new_children=None): + # Assumes tree is already transformed + children = new_children if new_children is not None else tree.children + try: + f = getattr(self, tree.data) + except AttributeError: + return self.__default__(tree.data, children, tree.meta) + else: + if getattr(f, 'meta', False): + return f(children, tree.meta) + elif getattr(f, 'inline', False): + return f(*children) + elif getattr(f, 'whole_tree', False): + if new_children is not None: + raise NotImplementedError("Doesn't work with the base Transformer class") + return f(tree) + else: + return f(children) + + def _transform_children(self, children): + for c in children: + try: + yield self._transform_tree(c) if isinstance(c, Tree) else c + except Discard: + pass + + def _transform_tree(self, tree): + children = list(self._transform_children(tree.children)) + return self._call_userfunc(tree, children) + + def transform(self, tree): + return self._transform_tree(tree) + + def __mul__(self, other): + return TransformerChain(self, other) + + def __default__(self, data, children, meta): + "Default operation on tree (for override)" + return Tree(data, children, meta) + + @classmethod + def _apply_decorator(cls, decorator, **kwargs): + mro = getmro(cls) + assert mro[0] is cls + libmembers = {name for _cls in mro[1:] for name, _ in getmembers(_cls)} + for name, value in getmembers(cls): + if name.startswith('_') or name in libmembers: + continue + + setattr(cls, name, decorator(value, **kwargs)) + return cls + + +class InlineTransformer(Transformer): # XXX Deprecated + def _call_userfunc(self, tree, new_children=None): + # Assumes tree is already transformed + children = new_children if new_children is not None else tree.children + try: + f = getattr(self, tree.data) + except AttributeError: + return self.__default__(tree.data, children, tree.meta) + else: + return f(*children) + + +class TransformerChain(object): + def __init__(self, *transformers): + self.transformers = transformers + + def transform(self, tree): + for t in self.transformers: + tree = t.transform(tree) + return tree + + def __mul__(self, other): + return TransformerChain(*self.transformers + (other,)) + + +class Transformer_InPlace(Transformer): + "Non-recursive. Changes the tree in-place instead of returning new instances" + def _transform_tree(self, tree): # Cancel recursion + return self._call_userfunc(tree) + + def transform(self, tree): + for subtree in tree.iter_subtrees(): + subtree.children = list(self._transform_children(subtree.children)) + + return self._transform_tree(tree) + + +class Transformer_InPlaceRecursive(Transformer): + "Recursive. Changes the tree in-place instead of returning new instances" + def _transform_tree(self, tree): + tree.children = list(self._transform_children(tree.children)) + return self._call_userfunc(tree) + + + +# Visitors + +class VisitorBase: + def _call_userfunc(self, tree): + return getattr(self, tree.data, self.__default__)(tree) + + def __default__(self, tree): + "Default operation on tree (for override)" + return tree + + +class Visitor(VisitorBase): + """Bottom-up visitor, non-recursive + + Visits the tree, starting with the leaves and finally the root (bottom-up) + Calls its methods (provided by user via inheritance) according to tree.data + """ + + + def visit(self, tree): + for subtree in tree.iter_subtrees(): + self._call_userfunc(subtree) + return tree + +class Visitor_Recursive(VisitorBase): + """Bottom-up visitor, recursive + + Visits the tree, starting with the leaves and finally the root (bottom-up) + Calls its methods (provided by user via inheritance) according to tree.data + """ + + def visit(self, tree): + for child in tree.children: + if isinstance(child, Tree): + self.visit(child) + + f = getattr(self, tree.data, self.__default__) + f(tree) + return tree + + + +def visit_children_decor(func): + "See Interpreter" + @wraps(func) + def inner(cls, tree): + values = cls.visit_children(tree) + return func(cls, values) + return inner + + +class Interpreter: + """Top-down visitor, recursive + + Visits the tree, starting with the root and finally the leaves (top-down) + Calls its methods (provided by user via inheritance) according to tree.data + + Unlike Transformer and Visitor, the Interpreter doesn't automatically visit its sub-branches. + The user has to explicitly call visit_children, or use the @visit_children_decor + """ + def visit(self, tree): + return getattr(self, tree.data)(tree) + + def visit_children(self, tree): + return [self.visit(child) if isinstance(child, Tree) else child + for child in tree.children] + + def __getattr__(self, name): + return self.__default__ + + def __default__(self, tree): + return self.visit_children(tree) + + + + +# Decorators + +def _apply_decorator(obj, decorator, **kwargs): + try: + _apply = obj._apply_decorator + except AttributeError: + return decorator(obj, **kwargs) + else: + return _apply(decorator, **kwargs) + + + +def _inline_args__func(func): + @wraps(func) + def create_decorator(_f, with_self): + if with_self: + def f(self, children): + return _f(self, *children) + else: + def f(self, children): + return _f(*children) + return f + + return smart_decorator(func, create_decorator) + + +def inline_args(obj): # XXX Deprecated + return _apply_decorator(obj, _inline_args__func) + + + +def _visitor_args_func_dec(func, inline=False, meta=False, whole_tree=False): + assert [whole_tree, meta, inline].count(True) <= 1 + def create_decorator(_f, with_self): + if with_self: + def f(self, *args, **kwargs): + return _f(self, *args, **kwargs) + else: + def f(self, *args, **kwargs): + return _f(*args, **kwargs) + return f + + f = smart_decorator(func, create_decorator) + f.inline = inline + f.meta = meta + f.whole_tree = whole_tree + return f + +def v_args(inline=False, meta=False, tree=False): + "A convenience decorator factory, for modifying the behavior of user-supplied visitor methods" + if [tree, meta, inline].count(True) > 1: + raise ValueError("Visitor functions can either accept tree, or meta, or be inlined. These cannot be combined.") + def _visitor_args_dec(obj): + return _apply_decorator(obj, _visitor_args_func_dec, inline=inline, meta=meta, whole_tree=tree) + return _visitor_args_dec diff --git a/python/extractor/licenses.md b/python/extractor/licenses.md new file mode 100644 index 00000000000..f3a5c6cc458 --- /dev/null +++ b/python/extractor/licenses.md @@ -0,0 +1,14 @@ +| Component | Vendored-in | License | Comments | +| ------------------------------- | ----------- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `data/python/stubs/six` | Y | MIT, see `data/python/stubs/six/LICENSE` | Stubs for `six` (the Python 2/3 compatibility library), based on the original library but simplified to aid analysis. | +| `lark` | Y | MIT, see `lark/LICENSE` | Parsing library. Used for extracting `.thrift` files. | +| `tests/tokenizer/shift_jis.py` | Y | PSF | Test file copied (with attribution) from the `cpython` source code. | +| `tsg-python/tree-sitter-python` | Y | MIT | Used in `tsg-python` to parse Python files | +| `tsg-python` | Y | MIT / Apache | This is our own creation, so are free to choose what license it is covered by. | +| `tree-sitter-graph` | N | MIT / Apache | Used in `tsg-python` to execute files written in the `tree-sitter-graph` language. | +| `unparse.py` | Y | PSF | Copied and adapted from `Tools/unparse.py` from the `cpython` source code, with attribution. | +| `imp.py` | Y | PSF | Copied and adapted from `Lib/imp.py` from the `cpython` source code, with attribution. | +| `semmle/data/*.trap` | Y | PSF | These files were derived from the C source code of the `cpython` project, and are used in our modelling of built-in objects. No attribution, currently. | +| `semmle/thrift/parse.py` | Y | Apache | Includes a grammar based on https://github.com/apache/thrift/blob/master/doc/specs/idl.md, with comment stating this attribution. | +| `semmle/python/ast.py` | Y | PSF | Copied and adapted from `Lib/ast.py` from the `cpython` source code. Not explicitly attributed. | +| `blib2to3` | Y | PSF / MIT | A modified version of `blib2to3` from the `psf/black` project (MIT licensed), itself a copy of `lib2to3` from the `cpython` project (PSF licensed), with a thorough attribution for this fact. | diff --git a/python/extractor/make_zips.py b/python/extractor/make_zips.py new file mode 100755 index 00000000000..b91b1bf458d --- /dev/null +++ b/python/extractor/make_zips.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python + +import os +import shutil +import sys +import zipfile +import optparse +import compileall + +from python_tracer import getzipfilename +from unparse import strip_comments_and_docstrings + +# TO DO -- Add options to set destination directory and source directory + + +def find_tools(): + try: + return os.environ['PYTHON_INSTALLER_OUTPUT'] + except KeyError: + pass + try: + return os.environ['ODASA_TOOLS'] + except KeyError: + pass + try: + return os.path.join(os.environ['SEMMLE_DIST'], 'tools') + except KeyError: + pass + try: + return os.path.join(os.environ['ODASA_HOME'], 'tools') + except KeyError: + pass + raise Exception('ODASA_TOOLS environment variable is not set') + +def find_src(): + if __name__ == '__main__': + return os.path.dirname(os.path.abspath(sys.argv[0])) + raise Exception('Cannot find source code') + + +def build_byte_compiled_zip(src_dir, zippath): + # TODO(low): Why are we compiling ourselves, when writepy can also do that? + compileall.compile_dir(os.path.join(src_dir, 'semmle'), force=True, quiet=True) + + zipped = zipfile.PyZipFile(zippath, 'w') + + zipped.writepy(os.path.join(src_dir, '__main__.py')) + zipped.writepy(os.path.join(src_dir, 'semmle')) + zipped.writepy(os.path.join(src_dir, 'blib2to3')) + zipped.writepy(os.path.join(src_dir, 'lark')) + zipped.writepy(os.path.join(src_dir, 'buildtools')) + zipped.write(os.path.join(src_dir, 'blib2to3', 'Grammar.txt'), 'blib2to3/Grammar.txt') + zipped.write(os.path.join(src_dir, 'lark', 'grammars', 'common.lark'), 'lark/grammars/common.lark') + + data_dir = os.path.join(src_dir, 'semmle', 'data') + for f in os.listdir(data_dir): + if f.endswith('.trap'): + zipped.write(os.path.join(data_dir, f), os.path.join('semmle', 'data', f)) + zipped.close() + + +def build_source_zip(src_dir, zippath): + zipped = zipfile.PyZipFile(zippath, 'w') + + zipped.write(os.path.join(src_dir, '__main__.py'), '__main__.py') + zipped.write(os.path.join(src_dir, 'imp.py'), 'imp.py') + write_source(zipped, src_dir, 'semmle') + write_source(zipped, src_dir, 'blib2to3', ('.py', '.txt', '')) + write_source(zipped, src_dir, 'lark', (".py", ".lark", "")) + write_source(zipped, src_dir, 'buildtools') + + data_dir = os.path.join(src_dir, 'semmle', 'data') + for f in os.listdir(data_dir): + if f.endswith('.trap'): + zipped.write(os.path.join(data_dir, f), os.path.join('semmle', 'data', f)) + + zipped.close() + +def write_source(zipped, root, name, extensions=[".py"]): + src = os.path.join(root, name) + for dirpath, _, filenames in os.walk(src): + for name in filenames: + _, ext = os.path.splitext(name) + if ext not in extensions: + continue + path = os.path.join(dirpath, name) + temp = strip_comments_and_docstrings(path) + zipped.write(temp, os.path.relpath(path, root)) + os.remove(temp) + +def main(): + parser = optparse.OptionParser(usage = "usage: %prog [install-dir]") + _, args = parser.parse_args(sys.argv[1:]) + if len(args) > 1: + parser.print_usage() + elif args: + tools_dir = args[0] + if not os.path.exists(tools_dir): + os.makedirs(tools_dir) + else: + tools_dir = find_tools() + src_dir = find_src() + + zippath = os.path.join(src_dir, getzipfilename()) + + if sys.version_info > (3,): + build_source_zip(src_dir, zippath) + else: + build_byte_compiled_zip(src_dir, zippath) + + shutil.copy(zippath, tools_dir) + +if __name__ == '__main__': + main() diff --git a/python/extractor/poetry.lock b/python/extractor/poetry.lock new file mode 100644 index 00000000000..b07e63d2ff4 --- /dev/null +++ b/python/extractor/poetry.lock @@ -0,0 +1,227 @@ +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.1.3" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, + {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "importlib-metadata" +version = "6.7.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "importlib_metadata-6.7.0-py3-none-any.whl", hash = "sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5"}, + {file = "importlib_metadata-6.7.0.tar.gz", hash = "sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4"}, +] + +[package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "packaging" +version = "23.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, +] + +[[package]] +name = "pluggy" +version = "1.2.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, + {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pytest" +version = "7.4.2" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.2-py3-none-any.whl", hash = "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002"}, + {file = "pytest-7.4.2.tar.gz", hash = "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-mock" +version = "3.11.1" +description = "Thin-wrapper around the mock package for easier use with pytest" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-mock-3.11.1.tar.gz", hash = "sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f"}, + {file = "pytest_mock-3.11.1-py3-none-any.whl", hash = "sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39"}, +] + +[package.dependencies] +pytest = ">=5.0" + +[package.extras] +dev = ["pre-commit", "pytest-asyncio", "tox"] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "typing-extensions" +version = "4.7.1" +description = "Backported and Experimental Type Hints for Python 3.7+" +optional = false +python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, +] + +[[package]] +name = "zipp" +version = "3.15.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.7" +files = [ + {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, + {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.7" +content-hash = "efa2573fc074b2b5334ac81c2ed14a4b9894aacab841973703a7af180c181870" diff --git a/python/extractor/pyproject.toml b/python/extractor/pyproject.toml new file mode 100644 index 00000000000..a9f7adbbc6f --- /dev/null +++ b/python/extractor/pyproject.toml @@ -0,0 +1,21 @@ +[tool.poetry] +name = "extractor-python" +version = "0.0.1" +description = "" +authors = [] +packages = [ + { include = "buildtools" }, + { include = "semmle" }, +] + +[tool.poetry.dependencies] +python = "^3.7" +pyyaml = "^6.0.1" + +[tool.poetry.group.dev.dependencies] +pytest-mock = "^3.11.1" +pytest = "^7.4.2" + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" diff --git a/python/extractor/pytest.ini b/python/extractor/pytest.ini new file mode 100644 index 00000000000..632ca92b9a1 --- /dev/null +++ b/python/extractor/pytest.ini @@ -0,0 +1,6 @@ +[pytest] +addopts = --ignore=cli-integration-test/ +testpaths = tests +filterwarnings = + ; see https://docs.python.org/3/library/warnings.html#the-warnings-filter + error::DeprecationWarning diff --git a/python/extractor/python_imports.py b/python/extractor/python_imports.py new file mode 100755 index 00000000000..ee883c8f1e7 --- /dev/null +++ b/python/extractor/python_imports.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python +'''This module sets up sys.path from the environment +and runs the .import file generation.''' + +import python_tracer + +if __name__ == "__main__": + python_tracer.load_library() + import semmle.imports + semmle.imports.main() diff --git a/python/extractor/python_tracer.py b/python/extractor/python_tracer.py new file mode 100755 index 00000000000..17b1af9769b --- /dev/null +++ b/python/extractor/python_tracer.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python + +#This file needs to be able to handle all versions of Python we are likely to encounter +#Which is probably 2.6 and upwards + +'''This module sets up sys.path from the environment +and runs the populator when called from semmle tools such as buildSnapshot.''' + +import sys +import os + +# The constant is put here instead of make_zips.py, since make_zips.py is not present in +# the distributed extractor-python code +def getzipfilename(): + return 'python3src.zip' + + +def load_library(): + try: + tools = os.environ['ODASA_TOOLS'] + except KeyError: + try: + tools = os.path.join(os.environ['SEMMLE_DIST'], "tools") + except KeyError: + tools = sys.path[0] + try: + zippath = os.path.join(tools, getzipfilename()) + sys.path = [ zippath ] + sys.path + except Exception: + #Failed to find tools. Error is reported below + zippath = tools + try: + import semmle.populator + except ImportError as ex: + print("FATAL ERROR: ") + print(ex) + if tools is not None: + if not os.path.exists(os.path.join(tools, getzipfilename())): + sys.stderr.write("No tracer library found in " + tools + "\n") + else: + sys.stderr.write("Unable to load tracer library at %s:\n" % zippath) + import traceback + traceback.print_exc(file=sys.stderr) + else: + print(sys.path) + sys.stderr.write("Cannot find Semmle tools\n") + sys.exit(2) + +if __name__ == "__main__": + original_path = sys.path + load_library() + import semmle.populator + semmle.populator.main(original_path) diff --git a/python/extractor/qlpack.yml b/python/extractor/qlpack.yml new file mode 100644 index 00000000000..783c301abbb --- /dev/null +++ b/python/extractor/qlpack.yml @@ -0,0 +1,6 @@ +name: extractor-python +dependencies: + codeql/python-all: "*" + codeql/python-queries: "*" +extractor: python +warnOnImplicitThis: true diff --git a/python/extractor/semmle/__init__.py b/python/extractor/semmle/__init__.py new file mode 100644 index 00000000000..4b469ca715f --- /dev/null +++ b/python/extractor/semmle/__init__.py @@ -0,0 +1 @@ +from .util import VERSION as __version__ diff --git a/python/extractor/semmle/cache.py b/python/extractor/semmle/cache.py new file mode 100644 index 00000000000..303793516fa --- /dev/null +++ b/python/extractor/semmle/cache.py @@ -0,0 +1,197 @@ +from semmle.util import makedirs +import os +from collections import deque +from functools import total_ordering + +''' +Least Recently Written Disk-based Cache + +Implements a LRW disk cache for trap files and similar. +This cache relies on the following properties which *must* hold. + +Only one value can ever be associated with a key. +Keys should be ascii strings and cannot start with '$' or include any file or path separator characters. +Values should be byte strings (with any contents). + +The cache is robust against arbitrary levels of concurrency. + +''' + + +MAX_GENERATIONS = 50 +MAX_FILES_PER_GENERATION = 200 + +def encode_keys(keys): + 'Convert a collection of keys to a byte string' + return '\n'.join(keys).encode("ascii") + +def decode_keys(data): + 'Convert a byte string into a set of keys' + return set(data.decode("ascii").split('\n')) + +@total_ordering +class Generation(object): + + def __init__(self, cachedir, age): + self.cachedir = os.path.join(cachedir, str(age)) + self.age = age + if not os.path.exists(self.cachedir): + makedirs(self.cachedir) + try: + with open(os.path.join(self.cachedir, "$keys"), 'rb') as fd: + self.keys = decode_keys(fd.read()) + self.full = True + except Exception: + self.keys = set() + if os.path.isdir(self.cachedir): + #Directory exists, but cannot read "$keys", so this is a non-full generation + self.full = False + else: + self.full = True + + def get(self, key): + if self.full and key not in self.keys: + return None + try: + with open(os.path.join(self.cachedir, key), 'rb') as fd: + return fd.read() + except Exception: + return None + + def set(self, key, value): + '''Returns true if it should be able to store (key, value) even if in fact it can't. + This means that this method will return True if the generation is not full.''' + if self.full: + return False + if os.path.exists(os.path.join(self.cachedir, "$keys")): + self.full = True + try: + with open(os.path.join(self.cachedir, "$keys"), 'rb') as fd: + self.keys = decode_keys(fd.read()) + except Exception: + self.keys = set() + return False + self._try_atomic_write_file(key, value) + if len(self._list_files()) >= MAX_FILES_PER_GENERATION: + self.full = True + self._write_keys() + return True + + def _list_files(self): + try: + return os.listdir(self.cachedir) + except Exception: + #This probably means the directory has been deleted + return [] + + def _write_keys(self): + keys = self._list_files() + self._try_atomic_write_file("$keys", encode_keys(keys)) + self.keys = set(keys) + + def _try_atomic_write_file(self, name, contents): + fullname = os.path.join(self.cachedir, name) + tmpname = os.path.join(self.cachedir, '$%d%s' % (os.getpid(), name)) + try: + with open(tmpname, 'wb') as tmp: + tmp.write(contents) + os.rename(tmpname, fullname) + except Exception: + #Failed for some reason. The folder may have been deleted, or on Windows, the file may already exist. + #Attempt to tidy up + if os.path.exists(tmpname): + try: + os.remove(tmpname) + except Exception: + #Give up :( + pass + + def clear(self): + try: + filenames = os.listdir(self.cachedir) + except Exception: + #Can't do anything + return + for filename in filenames: + try: + os.remove(os.path.join(self.cachedir, filename)) + except Exception: + # Can't delete. Maybe another process has deleted it or it is open (on Windows) + pass + try: + os.rmdir(self.cachedir) + except Exception: + # Can't delete + pass + + def __lt__(self, other): + #Smaller numbers are older + return self.age > other.age + +class Cache(object): + + cache_of_caches = {} + + def __init__(self, cachedir, verbose=False): + self.cachedir = cachedir + self.verbose = verbose + self.generations = [] + if not os.path.exists(cachedir): + makedirs(cachedir) + generations = [] + for gen in os.listdir(self.cachedir): + try: + age = int(gen) + generations.append(Generation(self.cachedir, age)) + except Exception: + #gen might not be an int, or it may have been deleted + pass + if generations: + generations.sort() + else: + generations = [Generation(self.cachedir, 1)] + self.generations = deque(generations) + while len(self.generations) > MAX_GENERATIONS: + self.generations.pop().clear() + + def set(self, key, value): + '''Add this (key, value) pair to the cache. keys should not start with '$' or include file or path separators. + Either adds the (key, value) atomically or does nothing. Partial keys or values are never visible. + ''' + try: + while not self.generations[0].set(key, value): + self.generations.appendleft(Generation(self.cachedir, self.generations[0].age+1)) + if len(self.generations) > MAX_GENERATIONS: + self.generations.pop().clear() + except Exception as ex: + #Its OK to fail but we must never raise + if self.verbose: + try: + print ("Exception setting cache key '%s': %s" % (key, ex)) + except Exception: + # Just in case + pass + + def get(self, key): + if key is None: + return None + try: + for gen in self.generations: + res = gen.get(key) + if res is not None: + return res + except Exception as ex: + if self.verbose: + try: + print ("Exception getting cache key '%s': %s" % (key, ex)) + except Exception: + # Just in case + pass + return None + + @staticmethod + def for_directory(cachedir, verbose): + '''Caches are relatively expensive objects, so we cache them.''' + if (cachedir, verbose) not in Cache.cache_of_caches: + Cache.cache_of_caches[(cachedir, verbose)] = Cache(cachedir, verbose) + return Cache.cache_of_caches[(cachedir, verbose)] diff --git a/python/extractor/semmle/cmdline.py b/python/extractor/semmle/cmdline.py new file mode 100644 index 00000000000..9c2ff4a3274 --- /dev/null +++ b/python/extractor/semmle/cmdline.py @@ -0,0 +1,327 @@ +from optparse import OptionParser, OptionGroup, HelpFormatter +import shlex +import sys +import os +import re + +from semmle import logging +from semmle.util import VERSION + + +def make_parser(): + '''Parse command_line, returning options, arguments''' + parser = OptionParser(add_help_option=False, version='%s' % VERSION) + + import_options = OptionGroup(parser, "Import following options", + description="Note that -a -n -g and -t are included for backwards compatibility. They are ignored") + import_options.add_option("--max-import-depth", dest="max_import_depth", + help="The maximum depth of imports to follow before halting.", + default=None) + import_options.add_option("-p", "--path", dest="path", default=[], action="append", + help="Search path for python modules.") + import_options.get_option("-p").long_help = ( + "This is the path that the extractor uses when searching for imports. This path is searched before sys.path. "+ + "If the search path (sys.path) during program execution includes any paths that are not in 'sys.path' during extraction, " + + "then those paths need to be included using this flag.") + import_options.add_option("-x", "--excludepath", dest="exclude", default=[], action="append", + help="Exclude from search path for importing modules.") + import_options.get_option("-x").long_help = ( + "Excludes this path and all its sub-paths when searching for imports. " + + "Useful for excluding sub folders of paths specified with the '-p' option, or for excluding items in the 'sys.path' list.") + import_options.add_option("-a", "--all-imports", dest="all", + help="Ignored", default=False, action="store_true") + import_options.add_option("-n", "--no-imports", dest="none", + help="Ignored", default=False, action="store_true") + import_options.add_option("-g", "--guess-imports", dest="guess", + help="Ignored", default=False, action="store_true") + import_options.add_option("-t", "--top-imports", dest="top", + help="Ignored", default=False, action="store_true") + parser.add_option_group(import_options) + + module_options = OptionGroup(parser, "Options to determine which modules are to be extracted", + description="When specifying a list of values, individual values should be separated by the OS path separator for paths, and by commas for names.") + module_options.add_option("-m", "--main", dest="main", + help="A list of files which can be run as the main (or application) script.", + default=[], action="append") + module_options.get_option("-m").long_help = ( + "Files included in the database as 'main' modules will have the name '__main__' rather than a name derived from the path. " + + "It is perfectly legal to have several '__main__' modules in the database.") + module_options.add_option("-r", "--recurse-package", dest="recursive", default=[], action="append", + help="DEPRECATED. Analyze all modules in this comma-separated list of packages (recursively).") + module_options.add_option("-y", "--exclude-package", dest="exclude_package", default=[], action="append", + help="IGNORED.") + module_options.add_option("-Y", "--exclude-file", dest="exclude_file", default=[], action="append", + help="Exclude file from recursive search of files. Will not affect recursive search by package.") + module_options.add_option("--filter", dest="path_filter", default=[], action="append", + help="""Filter to apply to files from recursive search of files. Will not affect recursive search by package. + Filters are of the form [include|exclude]:GLOB_PATTERN""") + module_options.add_option("--exclude-pattern", dest="exclude_pattern", + help = """Exclude any modules matching this regular expression.""", + default=None) + module_options.add_option("--respect-init", dest="respect_init", + help="Respect the presence of '__init__.py' files when considering whether a folder is " + "a package. Defaults to True for Python 2 and False for Python 3. " + "Legal values are 'True' or 'False' (case-insensitive).", + default = None) + module_options.add_option("-F", "--files", dest="files", default=[], action="append", + help = """Treat the paths in this list as source files for modules. Compute the module name from given paths.""") + module_options.add_option("-R", "--recurse-files", dest="recurse_files", default=[], action="append", + help = """Treat the paths in this list as paths for packages, then recurse. Compute the package name from given paths.""") + parser.add_option_group(module_options) + + config_options = OptionGroup(parser, "Configuration options") + config_options.add_option("-f","--file", dest="file", default=None, + help="File to read options from") + config_options.add_option("-c", "--trap-cache", dest="trap_cache", + help="Directory in which to cache trap files.", + default=None) + config_options.add_option("-z", "--max-procs", dest="max_procs", default=None, + help="Maximum number of processes, legal options are " + "'all', 'half'(the default) or any positive integer.") + config_options.add_option("-j", "--introspect-c", dest="introspect_c", + help="Option is ignored (retained for backwards compatibility)", + default=False, action="store_true") + config_options.add_option("--ignore-missing-modules", dest="ignore_missing_modules", default=False, action="store_true", + help = """Ignore any module specified on the command line that cannot be found. Defaults to false.""") + config_options.add_option("-u", "--no-symlinks", dest="no_symlinks", + help="Do not follow sym-links when normalizing paths", + default=False, action="store_true") + config_options.add_option("-e", "--renamer", dest="renamer", + help="""Module containing get_renamer() function which returns + a renaming function to be used when normalizing paths.""", + default=None) + config_options.add_option("-o", "--outdir", dest="outdir", + help="Output directory for writing trap files.") + config_options.add_option("--omit-syntax-errors", dest="no_syntax_errors", + help="Do not emit trap files or copy source for those files containing syntax errors", + default=False, action="store_true") + config_options.get_option("-o").long_help = " Only useful when running the extractor independently of Semmle's toolchain." + config_options.add_option("--max-context-cost", dest="context_cost", default=None, + help="""Specify the maximum cost of contexts in the points-to analysis. + WARNING: Setting this option may cause the analysis to consume a lot more time and memory than normal""") + config_options.add_option("--colorize", dest="colorize", default=False, action="store_true", + help = """Colorize the logging output.""") + + config_options.add_option("--dont-extract-stdlib", dest="extract_stdlib", default=True, action="store_false", + help="Do not extract the standard library.") + + parser.add_option_group(config_options) + + debug_options = OptionGroup(parser, "Debug and information options") + debug_options.add_option("-h", "--help", default=False, action="store_true", + help="show this help message and exit. Combine with -v for more details.") + debug_options.add_option("-v", "--verbose", dest="verbose", help="Verbose output", + default=0, action="count") + debug_options.add_option("--verbosity", dest="verbosity", help="Verbosity of output", + default=None) + debug_options.add_option("--quiet", dest="quiet", help="Quiet output, only report errors or worse.", + default=0, action="count") + debug_options.add_option("-q", "--trace-only", dest="trace_only", + help="Trace only, printing modules found. Do not create trap files.", + default=False, action="store_true") + debug_options.add_option("--profile-out", dest="profile_out", default=None, + help="Write profiling information to the given file.") + parser.add_option_group(debug_options) + + lang_options = OptionGroup(parser, "Options for handling sub-languages and extensions") + + # This is a temporary feature until we have full, transparent support for combined 2/3 analysis. + # Slated to be removed before 1.12 so it should not be documented. + lang_options.add_option("-l", "--lang", dest="language_version", default=[], action="append", + help="Override automatic language version detection and use specified versions(s)") + + parser.add_option_group(lang_options) + + advanced_options = OptionGroup(parser, "Advanced options: For running the extractor in unusual environments.") + advanced_options.add_option("--dont-split-graph", dest="split", default=True, action="store_false", + help = """Do not perform splitting on the flow graph, this will result in increased performance, + but at the cost of decreased accuracy in the resulting database. Defaults to false.""") + advanced_options.add_option("--dont-unroll-graph", dest="unroll", action="store_false", + help = """DEPRECATED. Do not use. + Do not perform selective loop unrolling on the flow graph. This will result in increased performance, + but at the cost of decreased accuracy in the resulting database. Defaults to true.""") + advanced_options.add_option("--unroll-graph", dest="unroll", default=False, action="store_true", + help = """Perform selective loop unrolling on the flow graph. This may result in increased accuracy, + but at the cost of decreased performance in the resulting database. Defaults to false.""") + + parser.add_option_group(advanced_options) + return parser + +def strip_trailing_slash(path): + '''Remove trailing slash from path for consistency''' + while path.endswith(os.sep) and path != os.sep: + path = path[:-1] + return path + +def parse(command_line): + parser = make_parser() + options, args = parser.parse_args(command_line) + while options.file: + with open(options.file) as opt_file: + file_opts = shlex.split(opt_file.read()) + extra_options, extra_args = parser.parse_args(file_opts) + options.file = None + #The optparse.Values class does not provide a public method for updating. + #This only works if all the defaults are a false value (which they are) + for attr in dir(options): + if attr in extra_options.__dict__: + dval = extra_options.__dict__[attr] + if dval: + setattr(options, attr, dval) + args.extend(extra_args) + del options.file + if options.help: + if options.verbose: + for opt in parser._get_all_options(): + if hasattr(opt, "long_help"): + if opt.long_help.endswith("."): + opt.help += " " + opt.long_help + else: + opt.help += ". " + opt.long_help + parser.print_help() + if options.verbose: + print(EXTRA_HELP) + sys.exit(0) + if options.respect_init is None: + # In this case we cannot use `util.get_analysis_major_version` because it will only be + # populated _after_ we've parsed the options. + options.respect_init = any(version.startswith('2') for version in options.language_version) + else: + options.respect_init = options.respect_init.lower() == "true" + options.main = split_and_flatten(options.main, os.pathsep) + options.exclude = split_and_flatten(options.exclude, os.pathsep) + options.recursive = split_and_flatten(options.recursive, ",") + options.exclude_package = split_and_flatten(options.exclude_package, ",") + options.files = split_and_flatten(options.files, os.pathsep) + options.recurse_files = split_and_flatten(options.recurse_files, os.pathsep) + options.path = split_and_flatten(options.path, os.pathsep) + options.path = [strip_trailing_slash(item) for item in options.path] + for name in options.recursive: + verify_module_name(name) + for name in options.exclude_package: + verify_module_name(name) + for name in args: + verify_module_name(name) + if options.verbosity is not None: + try: + options.verbosity = int(options.verbosity) + except ValueError: + print (options.verbosity + " is not a valid verbosity level.") + sys.exit(1) + else: + options.verbosity = logging.WARN # default logging level + options.verbosity -= options.quiet + options.verbosity += options.verbose + if options.verbosity > logging.TRACE: + options.verbosity = logging.TRACE + if options.verbosity < logging.OFF: + options.verbosity = logging.OFF + if options.max_import_depth is None: + max_import_depth = float('inf') + else: + max_import_depth = int(options.max_import_depth) + if max_import_depth < 0: + max_import_depth = float('inf') + options.max_import_depth = max_import_depth + + if 'CODEQL_EXTRACTOR_PYTHON_DONT_EXTRACT_STDLIB' in os.environ: + options.extract_stdlib = False + + options.prune = True + return options, args + +def split_and_flatten(options_list, div): + result = [] + for item in options_list: + result.extend(item.split(div)) + return result + +def is_legal_module_name(name): + for identifier in name.split("."): + if not identifier.isidentifier(): + return False + return True + +def verify_module_name(name): + if not is_legal_module_name(name): + sys.exit("'%s' is not a legal module name" % name) + +EXTRA_HELP = ''' +When combining explicitly listed modules, or any options to include modules, with any option to exclude modules, the exclude options act as filters on the included modules. +Therefore if any module is both excluded and included by a command line option, then it will not be included in the database. +Note that exclusion of a module does not necessarily exclude the modules that are imported by that module. + +For example, if module 'a' imports module 'b' and module 'c' also imports module 'b' and the extractor is called with "-y c a", +then 'c' will be excluded but 'b' will be included as it is imported by 'a'. + +Exit codes: + 0. OK, finished normally + 1. Failed to extract one or more files. + 2. Interrupted (by ctrl-C or a signal) + 3. Other error. +''' + +def output_dir_from_options_and_env(options): + trap_dir = options.outdir + if trap_dir is None: + if 'CODEQL_EXTRACTOR_PYTHON_TRAP_DIR' in os.environ: + trap_dir = os.environ['CODEQL_EXTRACTOR_PYTHON_TRAP_DIR'] + elif 'TRAP_FOLDER' in os.environ: + trap_dir = os.environ['TRAP_FOLDER'] + else: + raise IOError( + "Cannot find trap folder. CODEQL_EXTRACTOR_PYTHON_TRAP_DIR is not set.") + if not os.path.exists(trap_dir): + os.makedirs(trap_dir) + return trap_dir + + +class MarkdownFormatter (HelpFormatter): + """Format help with underlined section headers. + """ + + def __init__(self, + indent_increment=0, + max_help_position=40, + width=1000, + short_first=0): + HelpFormatter.__init__ ( + self, indent_increment, max_help_position, width, short_first) + self.needs_table_heading = False + + def format_usage(self, usage): + return "%s %s\n" % (self.format_heading(_("Usage")), usage) + + def format_heading(self, heading): + self.needs_table_heading = True + return '%s %s\n' % ('#' * (self.level +3), heading) + + def format_description(self, description): + return description + "\n" + + def format_option(self, option): + if self.needs_table_heading: + self.needs_table_heading = False + header = "Flags | Description\n------|---------\n" + else: + header = '' + opts = self.option_strings[option] + return header + opts + " | " + option.help.replace("\n", " ") + "\n" + +def _is_help_line(lines, index, pos): + if index + 1 >= len(lines): + return False + if len(lines[index]) <= pos: + return False + if lines[index].startswith("#"): + return False + return True + +def _format_parser_options(): + parser = make_parser() + formatter = MarkdownFormatter() + return parser.format_help(formatter) + + +if __name__ == "__main__": + print(_format_parser_options()) diff --git a/python/extractor/semmle/data/$stdlib_27.trap b/python/extractor/semmle/data/$stdlib_27.trap new file mode 100644 index 00000000000..31ce836558d --- /dev/null +++ b/python/extractor/semmle/data/$stdlib_27.trap @@ -0,0 +1,9861 @@ +#10000 = @"C_builtin_function_or_method$_multiprocessing.address_of_buffer" +#10001 = @"C_type$tuple" +ext_rettype(#10000, #10001) +#10002 = @"C_builtin_function_or_method$_multiprocessing.sendfd" +#10003 = @"C_type$NoneType" +ext_rettype(#10002, #10003) +#10004 = @"C_builtin_function_or_method$_multiprocessing.recvfd" +#10005 = @"C_type$int" +ext_rettype(#10004, #10005) +#10006 = @"C_builtin_function_or_method$_ssl._test_decode_cert" +#10007 = @"C_type$dict" +ext_rettype(#10006, #10007) +#10008 = @"C_builtin_function_or_method$_ssl.RAND_add" +ext_rettype(#10008, #10003) +#10009 = @"C_builtin_function_or_method$_ssl.RAND_egd" +ext_rettype(#10009, #10005) +#10010 = @"C_builtin_function_or_method$_ssl.RAND_status" +ext_rettype(#10010, #10005) +#10011 = @"C_builtin_function_or_method$_ssl.get_default_verify_paths" +ext_rettype(#10011, #10001) +#10012 = @"C_builtin_function_or_method$_ssl.txt2obj" +ext_rettype(#10012, #10001) +#10013 = @"C_builtin_function_or_method$_ssl.nid2obj" +ext_rettype(#10013, #10001) +#10014 = @"C_builtin_function_or_method$_sre.getcodesize" +ext_rettype(#10014, #10005) +#10015 = @"C_builtin_function_or_method$_sre.getlower" +ext_rettype(#10015, #10005) +#10016 = @"C_builtin_function_or_method$linuxaudiodev.open" +#10017 = @"C_type$linuxaudiodev.linux_audio_device" +ext_rettype(#10016, #10017) +#10018 = @"C_builtin_function_or_method$_heapq.heappush" +ext_rettype(#10018, #10003) +#10019 = @"C_builtin_function_or_method$_heapq.heapify" +ext_rettype(#10019, #10003) +#10020 = @"C_builtin_function_or_method$_heapq.nlargest" +#10021 = @"C_type$list" +ext_rettype(#10020, #10021) +#10022 = @"C_builtin_function_or_method$_heapq.nsmallest" +ext_rettype(#10022, #10021) +#10023 = @"C_builtin_function_or_method$nis.match" +#10024 = @"C_type$bytes" +ext_rettype(#10023, #10024) +#10025 = @"C_builtin_function_or_method$nis.cat" +ext_rettype(#10025, #10007) +#10026 = @"C_builtin_function_or_method$nis.maps" +ext_rettype(#10026, #10021) +#10027 = @"C_builtin_function_or_method$nis.get_default_domain" +ext_rettype(#10027, #10024) +#10028 = @"C_builtin_function_or_method$pwd.getpwall" +ext_rettype(#10028, #10021) +#10029 = @"C_builtin_function_or_method$audioop.max" +ext_rettype(#10029, #10005) +#10030 = @"C_builtin_function_or_method$audioop.minmax" +ext_rettype(#10030, #10001) +#10031 = @"C_builtin_function_or_method$audioop.avg" +ext_rettype(#10031, #10005) +#10032 = @"C_builtin_function_or_method$audioop.maxpp" +ext_rettype(#10032, #10005) +#10033 = @"C_builtin_function_or_method$audioop.avgpp" +ext_rettype(#10033, #10005) +#10034 = @"C_builtin_function_or_method$audioop.rms" +ext_rettype(#10034, #10005) +#10035 = @"C_builtin_function_or_method$audioop.findfit" +ext_rettype(#10035, #10001) +#10036 = @"C_builtin_function_or_method$audioop.findmax" +ext_rettype(#10036, #10005) +#10037 = @"C_builtin_function_or_method$audioop.findfactor" +#10038 = @"C_type$float" +ext_rettype(#10037, #10038) +#10039 = @"C_builtin_function_or_method$audioop.cross" +ext_rettype(#10039, #10005) +#10040 = @"C_builtin_function_or_method$audioop.mul" +ext_rettype(#10040, #10024) +#10041 = @"C_builtin_function_or_method$audioop.add" +ext_rettype(#10041, #10024) +#10042 = @"C_builtin_function_or_method$audioop.bias" +ext_rettype(#10042, #10024) +#10043 = @"C_builtin_function_or_method$audioop.ulaw2lin" +ext_rettype(#10043, #10024) +#10044 = @"C_builtin_function_or_method$audioop.lin2ulaw" +ext_rettype(#10044, #10024) +#10045 = @"C_builtin_function_or_method$audioop.alaw2lin" +ext_rettype(#10045, #10024) +#10046 = @"C_builtin_function_or_method$audioop.lin2alaw" +ext_rettype(#10046, #10024) +#10047 = @"C_builtin_function_or_method$audioop.lin2lin" +ext_rettype(#10047, #10024) +#10048 = @"C_builtin_function_or_method$audioop.adpcm2lin" +ext_rettype(#10048, #10001) +#10049 = @"C_builtin_function_or_method$audioop.lin2adpcm" +ext_rettype(#10049, #10001) +#10050 = @"C_builtin_function_or_method$audioop.tomono" +ext_rettype(#10050, #10024) +#10051 = @"C_builtin_function_or_method$audioop.tostereo" +ext_rettype(#10051, #10024) +#10052 = @"C_builtin_function_or_method$audioop.getsample" +ext_rettype(#10052, #10005) +#10053 = @"C_builtin_function_or_method$audioop.reverse" +ext_rettype(#10053, #10024) +#10054 = @"C_builtin_function_or_method$audioop.ratecv" +ext_rettype(#10054, #10001) +#10055 = @"C_builtin_function_or_method$_multibytecodec.__create_codec" +#10056 = @"C_type$MultibyteCodec" +ext_rettype(#10055, #10056) +#10057 = @"C_builtin_function_or_method$operator.isCallable" +#10058 = @"C_type$bool" +ext_rettype(#10057, #10058) +#10059 = @"C_builtin_function_or_method$operator.isNumberType" +ext_rettype(#10059, #10058) +#10060 = @"C_builtin_function_or_method$operator.isSequenceType" +ext_rettype(#10060, #10058) +#10061 = @"C_builtin_function_or_method$operator.truth" +ext_rettype(#10061, #10058) +#10062 = @"C_builtin_function_or_method$operator.contains" +ext_rettype(#10062, #10058) +#10063 = @"C_builtin_function_or_method$operator.__contains__" +ext_rettype(#10063, #10058) +#10064 = @"C_builtin_function_or_method$operator.sequenceIncludes" +ext_rettype(#10064, #10058) +#10065 = @"C_builtin_function_or_method$operator.indexOf" +ext_rettype(#10065, #10005) +#10066 = @"C_builtin_function_or_method$operator.countOf" +ext_rettype(#10066, #10005) +#10067 = @"C_builtin_function_or_method$operator.isMappingType" +ext_rettype(#10067, #10058) +#10068 = @"C_builtin_function_or_method$operator.not_" +ext_rettype(#10068, #10058) +#10069 = @"C_builtin_function_or_method$operator.__not__" +ext_rettype(#10069, #10058) +#10070 = @"C_builtin_function_or_method$operator.setitem" +ext_rettype(#10070, #10003) +#10071 = @"C_builtin_function_or_method$operator.__setitem__" +ext_rettype(#10071, #10003) +#10072 = @"C_builtin_function_or_method$operator.delitem" +ext_rettype(#10072, #10003) +#10073 = @"C_builtin_function_or_method$operator.__delitem__" +ext_rettype(#10073, #10003) +#10074 = @"C_builtin_function_or_method$operator.setslice" +ext_rettype(#10074, #10003) +#10075 = @"C_builtin_function_or_method$operator.__setslice__" +ext_rettype(#10075, #10003) +#10076 = @"C_builtin_function_or_method$operator.delslice" +ext_rettype(#10076, #10003) +#10077 = @"C_builtin_function_or_method$operator.__delslice__" +ext_rettype(#10077, #10003) +#10078 = @"C_builtin_function_or_method$operator._compare_digest" +ext_rettype(#10078, #10058) +#10079 = @"C_builtin_function_or_method$parser.ast2tuple" +ext_rettype(#10079, #10003) +#10080 = @"C_builtin_function_or_method$parser.ast2list" +ext_rettype(#10080, #10003) +#10081 = @"C_builtin_function_or_method$parser.compileast" +#10082 = @"C_type$code" +ext_rettype(#10081, #10082) +#10083 = @"C_builtin_function_or_method$parser.compilest" +ext_rettype(#10083, #10082) +#10084 = @"C_builtin_function_or_method$parser.expr" +#10085 = @"C_type$parser.st" +ext_rettype(#10084, #10085) +#10086 = @"C_builtin_function_or_method$parser.suite" +ext_rettype(#10086, #10085) +#10087 = @"C_builtin_function_or_method$parser.sequence2ast" +ext_rettype(#10087, #10085) +#10088 = @"C_builtin_function_or_method$parser.sequence2st" +ext_rettype(#10088, #10085) +#10089 = @"C_builtin_function_or_method$parser.st2tuple" +ext_rettype(#10089, #10003) +#10090 = @"C_builtin_function_or_method$parser.st2list" +ext_rettype(#10090, #10003) +#10091 = @"C_builtin_function_or_method$parser.tuple2ast" +ext_rettype(#10091, #10085) +#10092 = @"C_builtin_function_or_method$parser.tuple2st" +ext_rettype(#10092, #10085) +#10093 = @"C_builtin_function_or_method$parser._pickler" +ext_rettype(#10093, #10001) +#10094 = @"C_builtin_function_or_method$_socket.gethostbyname" +ext_rettype(#10094, #10024) +#10095 = @"C_builtin_function_or_method$_socket.gethostbyname_ex" +ext_rettype(#10095, #10001) +#10096 = @"C_builtin_function_or_method$_socket.gethostbyaddr" +ext_rettype(#10096, #10001) +#10097 = @"C_builtin_function_or_method$_socket.gethostname" +ext_rettype(#10097, #10024) +#10098 = @"C_builtin_function_or_method$_socket.getservbyname" +ext_rettype(#10098, #10005) +#10099 = @"C_builtin_function_or_method$_socket.getservbyport" +ext_rettype(#10099, #10024) +#10100 = @"C_builtin_function_or_method$_socket.getprotobyname" +ext_rettype(#10100, #10005) +#10101 = @"C_builtin_function_or_method$_socket.fromfd" +#10102 = @"C_type$_socket.socket" +ext_rettype(#10101, #10102) +#10103 = @"C_builtin_function_or_method$_socket.socketpair" +ext_rettype(#10103, #10001) +#10104 = @"C_builtin_function_or_method$_socket.ntohs" +ext_rettype(#10104, #10005) +#10105 = @"C_builtin_function_or_method$_socket.ntohl" +ext_rettype(#10105, #10005) +#10106 = @"C_builtin_function_or_method$_socket.htons" +ext_rettype(#10106, #10005) +#10107 = @"C_builtin_function_or_method$_socket.htonl" +ext_rettype(#10107, #10005) +#10108 = @"C_builtin_function_or_method$_socket.inet_aton" +ext_rettype(#10108, #10024) +#10109 = @"C_builtin_function_or_method$_socket.inet_ntoa" +ext_rettype(#10109, #10024) +#10110 = @"C_builtin_function_or_method$_socket.inet_pton" +ext_rettype(#10110, #10024) +#10111 = @"C_builtin_function_or_method$_socket.inet_ntop" +ext_rettype(#10111, #10024) +#10112 = @"C_builtin_function_or_method$_socket.getaddrinfo" +ext_rettype(#10112, #10021) +#10113 = @"C_builtin_function_or_method$_socket.getnameinfo" +ext_rettype(#10113, #10001) +#10114 = @"C_builtin_function_or_method$_socket.getdefaulttimeout" +ext_rettype(#10114, #10038) +ext_rettype(#10114, #10003) +#10115 = @"C_builtin_function_or_method$_socket.setdefaulttimeout" +ext_rettype(#10115, #10003) +#10116 = @"C_builtin_function_or_method$itertools.tee" +ext_rettype(#10116, #10001) +#10117 = @"C_builtin_function_or_method$math.acos" +ext_rettype(#10117, #10038) +#10118 = @"C_builtin_function_or_method$math.acosh" +ext_rettype(#10118, #10038) +#10119 = @"C_builtin_function_or_method$math.asin" +ext_rettype(#10119, #10038) +#10120 = @"C_builtin_function_or_method$math.asinh" +ext_rettype(#10120, #10038) +#10121 = @"C_builtin_function_or_method$math.atan" +ext_rettype(#10121, #10038) +#10122 = @"C_builtin_function_or_method$math.atan2" +ext_rettype(#10122, #10038) +#10123 = @"C_builtin_function_or_method$math.atanh" +ext_rettype(#10123, #10038) +#10124 = @"C_builtin_function_or_method$math.ceil" +ext_rettype(#10124, #10038) +#10125 = @"C_builtin_function_or_method$math.copysign" +ext_rettype(#10125, #10038) +#10126 = @"C_builtin_function_or_method$math.cos" +ext_rettype(#10126, #10038) +#10127 = @"C_builtin_function_or_method$math.cosh" +ext_rettype(#10127, #10038) +#10128 = @"C_builtin_function_or_method$math.degrees" +ext_rettype(#10128, #10038) +#10129 = @"C_builtin_function_or_method$math.erf" +ext_rettype(#10129, #10038) +#10130 = @"C_builtin_function_or_method$math.erfc" +ext_rettype(#10130, #10038) +#10131 = @"C_builtin_function_or_method$math.exp" +ext_rettype(#10131, #10038) +#10132 = @"C_builtin_function_or_method$math.expm1" +ext_rettype(#10132, #10038) +#10133 = @"C_builtin_function_or_method$math.fabs" +ext_rettype(#10133, #10038) +#10134 = @"C_builtin_function_or_method$math.factorial" +ext_rettype(#10134, #10005) +#10135 = @"C_builtin_function_or_method$math.floor" +ext_rettype(#10135, #10038) +#10136 = @"C_builtin_function_or_method$math.fmod" +ext_rettype(#10136, #10038) +#10137 = @"C_builtin_function_or_method$math.frexp" +ext_rettype(#10137, #10001) +#10138 = @"C_builtin_function_or_method$math.fsum" +ext_rettype(#10138, #10038) +#10139 = @"C_builtin_function_or_method$math.gamma" +ext_rettype(#10139, #10038) +#10140 = @"C_builtin_function_or_method$math.hypot" +ext_rettype(#10140, #10038) +#10141 = @"C_builtin_function_or_method$math.isinf" +ext_rettype(#10141, #10058) +#10142 = @"C_builtin_function_or_method$math.isnan" +ext_rettype(#10142, #10058) +#10143 = @"C_builtin_function_or_method$math.ldexp" +ext_rettype(#10143, #10038) +#10144 = @"C_builtin_function_or_method$math.lgamma" +ext_rettype(#10144, #10038) +#10145 = @"C_builtin_function_or_method$math.log" +ext_rettype(#10145, #10038) +#10146 = @"C_builtin_function_or_method$math.log1p" +ext_rettype(#10146, #10038) +#10147 = @"C_builtin_function_or_method$math.log10" +ext_rettype(#10147, #10038) +#10148 = @"C_builtin_function_or_method$math.modf" +ext_rettype(#10148, #10001) +#10149 = @"C_builtin_function_or_method$math.pow" +ext_rettype(#10149, #10038) +#10150 = @"C_builtin_function_or_method$math.radians" +ext_rettype(#10150, #10038) +#10151 = @"C_builtin_function_or_method$math.sin" +ext_rettype(#10151, #10038) +#10152 = @"C_builtin_function_or_method$math.sinh" +ext_rettype(#10152, #10038) +#10153 = @"C_builtin_function_or_method$math.sqrt" +ext_rettype(#10153, #10038) +#10154 = @"C_builtin_function_or_method$math.tan" +ext_rettype(#10154, #10038) +#10155 = @"C_builtin_function_or_method$math.tanh" +ext_rettype(#10155, #10038) +#10156 = @"C_builtin_function_or_method$signal.alarm" +ext_rettype(#10156, #10005) +#10157 = @"C_builtin_function_or_method$signal.setitimer" +ext_rettype(#10157, #10001) +#10158 = @"C_builtin_function_or_method$signal.getitimer" +ext_rettype(#10158, #10001) +#10159 = @"C_builtin_function_or_method$signal.signal" +ext_rettype(#10159, #10003) +#10160 = @"C_builtin_function_or_method$signal.getsignal" +ext_rettype(#10160, #10003) +#10161 = @"C_builtin_function_or_method$signal.set_wakeup_fd" +ext_rettype(#10161, #10005) +#10162 = @"C_builtin_function_or_method$signal.siginterrupt" +ext_rettype(#10162, #10003) +#10163 = @"C_builtin_function_or_method$signal.pause" +ext_rettype(#10163, #10003) +#10164 = @"C_builtin_function_or_method$_csv.reader" +#10165 = @"C_type$_csv.reader" +ext_rettype(#10164, #10165) +#10166 = @"C_builtin_function_or_method$_csv.writer" +#10167 = @"C_type$_csv.writer" +ext_rettype(#10166, #10167) +#10168 = @"C_builtin_function_or_method$_csv.list_dialects" +ext_rettype(#10168, #10021) +#10169 = @"C_builtin_function_or_method$_csv.register_dialect" +ext_rettype(#10169, #10003) +#10170 = @"C_builtin_function_or_method$_csv.unregister_dialect" +ext_rettype(#10170, #10003) +#10171 = @"C_builtin_function_or_method$_csv.field_size_limit" +ext_rettype(#10171, #10005) +#10172 = @"C_builtin_function_or_method$gc.enable" +ext_rettype(#10172, #10003) +#10173 = @"C_builtin_function_or_method$gc.disable" +ext_rettype(#10173, #10003) +#10174 = @"C_builtin_function_or_method$gc.isenabled" +ext_rettype(#10174, #10058) +#10175 = @"C_builtin_function_or_method$gc.set_debug" +ext_rettype(#10175, #10003) +#10176 = @"C_builtin_function_or_method$gc.get_debug" +ext_rettype(#10176, #10005) +#10177 = @"C_builtin_function_or_method$gc.get_count" +ext_rettype(#10177, #10001) +#10178 = @"C_builtin_function_or_method$gc.set_threshold" +ext_rettype(#10178, #10003) +#10179 = @"C_builtin_function_or_method$gc.get_threshold" +ext_rettype(#10179, #10001) +#10180 = @"C_builtin_function_or_method$gc.collect" +ext_rettype(#10180, #10005) +#10181 = @"C_builtin_function_or_method$gc.get_objects" +ext_rettype(#10181, #10021) +#10182 = @"C_builtin_function_or_method$gc.is_tracked" +ext_rettype(#10182, #10058) +#10183 = @"C_builtin_function_or_method$gc.get_referrers" +ext_rettype(#10183, #10021) +#10184 = @"C_builtin_function_or_method$gc.get_referents" +ext_rettype(#10184, #10021) +#10185 = @"C_builtin_function_or_method$termios.tcgetattr" +ext_rettype(#10185, #10021) +#10186 = @"C_builtin_function_or_method$termios.tcsetattr" +ext_rettype(#10186, #10003) +#10187 = @"C_builtin_function_or_method$termios.tcsendbreak" +ext_rettype(#10187, #10003) +#10188 = @"C_builtin_function_or_method$termios.tcdrain" +ext_rettype(#10188, #10003) +#10189 = @"C_builtin_function_or_method$termios.tcflush" +ext_rettype(#10189, #10003) +#10190 = @"C_builtin_function_or_method$termios.tcflow" +ext_rettype(#10190, #10003) +#10191 = @"C_builtin_function_or_method$grp.getgrall" +ext_rettype(#10191, #10021) +#10192 = @"C_builtin_function_or_method$time.time" +ext_rettype(#10192, #10038) +#10193 = @"C_builtin_function_or_method$time.clock" +ext_rettype(#10193, #10038) +#10194 = @"C_builtin_function_or_method$time.sleep" +ext_rettype(#10194, #10003) +#10195 = @"C_builtin_function_or_method$time.asctime" +ext_rettype(#10195, #10024) +#10196 = @"C_builtin_function_or_method$time.ctime" +ext_rettype(#10196, #10024) +#10197 = @"C_builtin_function_or_method$time.mktime" +ext_rettype(#10197, #10038) +#10198 = @"C_builtin_function_or_method$time.strftime" +ext_rettype(#10198, #10024) +#10199 = @"C_builtin_function_or_method$time.tzset" +ext_rettype(#10199, #10003) +#10200 = @"C_builtin_function_or_method$_hotshot.coverage" +#10201 = @"C_type$_hotshot.ProfilerType" +ext_rettype(#10200, #10201) +#10202 = @"C_builtin_function_or_method$_hotshot.profiler" +ext_rettype(#10202, #10201) +#10203 = @"C_builtin_function_or_method$_hotshot.logreader" +#10204 = @"C_type$_hotshot.LogReaderType" +ext_rettype(#10203, #10204) +#10205 = @"C_builtin_function_or_method$_hotshot.resolution" +ext_rettype(#10205, #10001) +#10206 = @"C_builtin_function_or_method$posix.access" +ext_rettype(#10206, #10058) +#10207 = @"C_builtin_function_or_method$posix.ttyname" +ext_rettype(#10207, #10024) +#10208 = @"C_builtin_function_or_method$posix.chdir" +ext_rettype(#10208, #10003) +#10209 = @"C_builtin_function_or_method$posix.chmod" +ext_rettype(#10209, #10003) +#10210 = @"C_builtin_function_or_method$posix.fchmod" +ext_rettype(#10210, #10003) +#10211 = @"C_builtin_function_or_method$posix.chown" +ext_rettype(#10211, #10003) +#10212 = @"C_builtin_function_or_method$posix.fchown" +ext_rettype(#10212, #10003) +#10213 = @"C_builtin_function_or_method$posix.lchown" +ext_rettype(#10213, #10003) +#10214 = @"C_builtin_function_or_method$posix.chroot" +ext_rettype(#10214, #10003) +#10215 = @"C_builtin_function_or_method$posix.ctermid" +ext_rettype(#10215, #10024) +#10216 = @"C_builtin_function_or_method$posix.getcwd" +ext_rettype(#10216, #10024) +#10217 = @"C_builtin_function_or_method$posix.getcwdu" +#10218 = @"C_type$unicode" +ext_rettype(#10217, #10218) +#10219 = @"C_builtin_function_or_method$posix.link" +ext_rettype(#10219, #10003) +#10220 = @"C_builtin_function_or_method$posix.listdir" +ext_rettype(#10220, #10021) +#10221 = @"C_builtin_function_or_method$posix.mkdir" +ext_rettype(#10221, #10003) +#10222 = @"C_builtin_function_or_method$posix.nice" +ext_rettype(#10222, #10005) +#10223 = @"C_builtin_function_or_method$posix.readlink" +ext_rettype(#10223, #10024) +ext_rettype(#10223, #10218) +#10224 = @"C_builtin_function_or_method$posix.rename" +ext_rettype(#10224, #10003) +#10225 = @"C_builtin_function_or_method$posix.rmdir" +ext_rettype(#10225, #10003) +#10226 = @"C_builtin_function_or_method$posix.stat_float_times" +ext_rettype(#10226, #10058) +ext_rettype(#10226, #10003) +#10227 = @"C_builtin_function_or_method$posix.symlink" +ext_rettype(#10227, #10003) +#10228 = @"C_builtin_function_or_method$posix.system" +ext_rettype(#10228, #10005) +#10229 = @"C_builtin_function_or_method$posix.umask" +ext_rettype(#10229, #10005) +#10230 = @"C_builtin_function_or_method$posix.uname" +ext_rettype(#10230, #10001) +#10231 = @"C_builtin_function_or_method$posix.unlink" +ext_rettype(#10231, #10003) +#10232 = @"C_builtin_function_or_method$posix.remove" +ext_rettype(#10232, #10003) +#10233 = @"C_builtin_function_or_method$posix.utime" +ext_rettype(#10233, #10003) +#10234 = @"C_builtin_function_or_method$posix.times" +ext_rettype(#10234, #10001) +#10235 = @"C_builtin_function_or_method$posix.fork" +ext_rettype(#10235, #10005) +#10236 = @"C_builtin_function_or_method$posix.openpty" +ext_rettype(#10236, #10001) +#10237 = @"C_builtin_function_or_method$posix.forkpty" +ext_rettype(#10237, #10001) +#10238 = @"C_builtin_function_or_method$posix.getegid" +ext_rettype(#10238, #10005) +#10239 = @"C_builtin_function_or_method$posix.geteuid" +ext_rettype(#10239, #10005) +#10240 = @"C_builtin_function_or_method$posix.getgid" +ext_rettype(#10240, #10005) +#10241 = @"C_builtin_function_or_method$posix.getgroups" +ext_rettype(#10241, #10021) +#10242 = @"C_builtin_function_or_method$posix.getpid" +ext_rettype(#10242, #10005) +#10243 = @"C_builtin_function_or_method$posix.getpgrp" +ext_rettype(#10243, #10005) +#10244 = @"C_builtin_function_or_method$posix.getppid" +ext_rettype(#10244, #10005) +#10245 = @"C_builtin_function_or_method$posix.getuid" +ext_rettype(#10245, #10005) +#10246 = @"C_builtin_function_or_method$posix.getlogin" +ext_rettype(#10246, #10024) +#10247 = @"C_builtin_function_or_method$posix.kill" +ext_rettype(#10247, #10003) +#10248 = @"C_builtin_function_or_method$posix.killpg" +ext_rettype(#10248, #10003) +#10249 = @"C_builtin_function_or_method$posix.popen" +#10250 = @"C_type$file" +ext_rettype(#10249, #10250) +#10251 = @"C_builtin_function_or_method$posix.setuid" +ext_rettype(#10251, #10003) +#10252 = @"C_builtin_function_or_method$posix.seteuid" +ext_rettype(#10252, #10003) +#10253 = @"C_builtin_function_or_method$posix.setegid" +ext_rettype(#10253, #10003) +#10254 = @"C_builtin_function_or_method$posix.setreuid" +ext_rettype(#10254, #10003) +#10255 = @"C_builtin_function_or_method$posix.setregid" +ext_rettype(#10255, #10003) +#10256 = @"C_builtin_function_or_method$posix.setgid" +ext_rettype(#10256, #10003) +#10257 = @"C_builtin_function_or_method$posix.setgroups" +ext_rettype(#10257, #10003) +#10258 = @"C_builtin_function_or_method$posix.initgroups" +ext_rettype(#10258, #10003) +#10259 = @"C_builtin_function_or_method$posix.getpgid" +ext_rettype(#10259, #10005) +#10260 = @"C_builtin_function_or_method$posix.setpgrp" +ext_rettype(#10260, #10003) +#10261 = @"C_builtin_function_or_method$posix.wait" +ext_rettype(#10261, #10001) +#10262 = @"C_builtin_function_or_method$posix.wait3" +ext_rettype(#10262, #10001) +#10263 = @"C_builtin_function_or_method$posix.wait4" +ext_rettype(#10263, #10001) +#10264 = @"C_builtin_function_or_method$posix.waitpid" +ext_rettype(#10264, #10001) +#10265 = @"C_builtin_function_or_method$posix.getsid" +ext_rettype(#10265, #10005) +#10266 = @"C_builtin_function_or_method$posix.setsid" +ext_rettype(#10266, #10003) +#10267 = @"C_builtin_function_or_method$posix.setpgid" +ext_rettype(#10267, #10003) +#10268 = @"C_builtin_function_or_method$posix.tcgetpgrp" +ext_rettype(#10268, #10005) +#10269 = @"C_builtin_function_or_method$posix.tcsetpgrp" +ext_rettype(#10269, #10003) +#10270 = @"C_builtin_function_or_method$posix.open" +ext_rettype(#10270, #10005) +#10271 = @"C_builtin_function_or_method$posix.close" +ext_rettype(#10271, #10003) +#10272 = @"C_builtin_function_or_method$posix.closerange" +ext_rettype(#10272, #10003) +#10273 = @"C_builtin_function_or_method$posix.dup" +ext_rettype(#10273, #10005) +#10274 = @"C_builtin_function_or_method$posix.dup2" +ext_rettype(#10274, #10003) +#10275 = @"C_builtin_function_or_method$posix.lseek" +ext_rettype(#10275, #10005) +#10276 = @"C_builtin_function_or_method$posix.write" +ext_rettype(#10276, #10005) +#10277 = @"C_builtin_function_or_method$posix.fdopen" +ext_rettype(#10277, #10250) +#10278 = @"C_builtin_function_or_method$posix.isatty" +ext_rettype(#10278, #10058) +#10279 = @"C_builtin_function_or_method$posix.pipe" +ext_rettype(#10279, #10001) +#10280 = @"C_builtin_function_or_method$posix.mkfifo" +ext_rettype(#10280, #10003) +#10281 = @"C_builtin_function_or_method$posix.mknod" +ext_rettype(#10281, #10003) +#10282 = @"C_builtin_function_or_method$posix.major" +ext_rettype(#10282, #10005) +#10283 = @"C_builtin_function_or_method$posix.minor" +ext_rettype(#10283, #10005) +#10284 = @"C_builtin_function_or_method$posix.makedev" +ext_rettype(#10284, #10005) +#10285 = @"C_builtin_function_or_method$posix.ftruncate" +ext_rettype(#10285, #10003) +#10286 = @"C_builtin_function_or_method$posix.putenv" +ext_rettype(#10286, #10003) +#10287 = @"C_builtin_function_or_method$posix.unsetenv" +ext_rettype(#10287, #10003) +#10288 = @"C_builtin_function_or_method$posix.strerror" +ext_rettype(#10288, #10024) +#10289 = @"C_builtin_function_or_method$posix.fchdir" +ext_rettype(#10289, #10003) +#10290 = @"C_builtin_function_or_method$posix.fsync" +ext_rettype(#10290, #10003) +#10291 = @"C_builtin_function_or_method$posix.fdatasync" +ext_rettype(#10291, #10003) +#10292 = @"C_builtin_function_or_method$posix.WCOREDUMP" +ext_rettype(#10292, #10058) +#10293 = @"C_builtin_function_or_method$posix.WIFCONTINUED" +ext_rettype(#10293, #10058) +#10294 = @"C_builtin_function_or_method$posix.WIFSTOPPED" +ext_rettype(#10294, #10058) +#10295 = @"C_builtin_function_or_method$posix.WIFSIGNALED" +ext_rettype(#10295, #10058) +#10296 = @"C_builtin_function_or_method$posix.WIFEXITED" +ext_rettype(#10296, #10058) +#10297 = @"C_builtin_function_or_method$posix.WEXITSTATUS" +ext_rettype(#10297, #10005) +#10298 = @"C_builtin_function_or_method$posix.WTERMSIG" +ext_rettype(#10298, #10005) +#10299 = @"C_builtin_function_or_method$posix.WSTOPSIG" +ext_rettype(#10299, #10005) +#10300 = @"C_builtin_function_or_method$posix.tmpfile" +ext_rettype(#10300, #10250) +#10301 = @"C_builtin_function_or_method$posix.tempnam" +ext_rettype(#10301, #10024) +#10302 = @"C_builtin_function_or_method$posix.tmpnam" +ext_rettype(#10302, #10024) +#10303 = @"C_builtin_function_or_method$posix.confstr" +ext_rettype(#10303, #10024) +ext_rettype(#10303, #10003) +#10304 = @"C_builtin_function_or_method$posix.sysconf" +ext_rettype(#10304, #10005) +#10305 = @"C_builtin_function_or_method$posix.fpathconf" +ext_rettype(#10305, #10005) +#10306 = @"C_builtin_function_or_method$posix.pathconf" +ext_rettype(#10306, #10005) +#10307 = @"C_builtin_function_or_method$posix.getloadavg" +ext_rettype(#10307, #10001) +#10308 = @"C_builtin_function_or_method$posix.setresuid" +ext_rettype(#10308, #10003) +#10309 = @"C_builtin_function_or_method$posix.setresgid" +ext_rettype(#10309, #10003) +#10310 = @"C_builtin_function_or_method$posix.getresuid" +ext_rettype(#10310, #10001) +#10311 = @"C_builtin_function_or_method$posix.getresgid" +ext_rettype(#10311, #10001) +#10312 = @"C_builtin_function_or_method$posix.urandom" +ext_rettype(#10312, #10024) +#10313 = @"C_builtin_function_or_method$cStringIO.StringIO" +#10314 = @"C_type$cStringIO.StringO" +ext_rettype(#10313, #10314) +#10315 = @"C_type$cStringIO.StringI" +ext_rettype(#10313, #10315) +#10316 = @"C_builtin_function_or_method$_struct._clearcache" +ext_rettype(#10316, #10003) +#10317 = @"C_builtin_function_or_method$_struct.calcsize" +ext_rettype(#10317, #10005) +#10318 = @"C_builtin_function_or_method$_struct.pack" +ext_rettype(#10318, #10024) +#10319 = @"C_builtin_function_or_method$_struct.pack_into" +ext_rettype(#10319, #10003) +#10320 = @"C_builtin_function_or_method$_struct.unpack" +ext_rettype(#10320, #10001) +#10321 = @"C_builtin_function_or_method$_struct.unpack_from" +ext_rettype(#10321, #10001) +#10322 = @"C_builtin_function_or_method$crypt.crypt" +ext_rettype(#10322, #10024) +#10323 = @"C_builtin_function_or_method$strop.atof" +ext_rettype(#10323, #10038) +#10324 = @"C_builtin_function_or_method$strop.atoi" +ext_rettype(#10324, #10005) +#10325 = @"C_builtin_function_or_method$strop.atol" +ext_rettype(#10325, #10005) +#10326 = @"C_builtin_function_or_method$strop.capitalize" +ext_rettype(#10326, #10024) +#10327 = @"C_builtin_function_or_method$strop.count" +ext_rettype(#10327, #10005) +#10328 = @"C_builtin_function_or_method$strop.expandtabs" +ext_rettype(#10328, #10024) +#10329 = @"C_builtin_function_or_method$strop.find" +ext_rettype(#10329, #10005) +#10330 = @"C_builtin_function_or_method$strop.lstrip" +ext_rettype(#10330, #10024) +#10331 = @"C_builtin_function_or_method$strop.lower" +ext_rettype(#10331, #10024) +#10332 = @"C_builtin_function_or_method$strop.maketrans" +ext_rettype(#10332, #10024) +#10333 = @"C_builtin_function_or_method$strop.replace" +ext_rettype(#10333, #10024) +#10334 = @"C_builtin_function_or_method$strop.rfind" +ext_rettype(#10334, #10005) +#10335 = @"C_builtin_function_or_method$strop.rstrip" +ext_rettype(#10335, #10024) +#10336 = @"C_builtin_function_or_method$strop.split" +ext_rettype(#10336, #10021) +#10337 = @"C_builtin_function_or_method$strop.splitfields" +ext_rettype(#10337, #10021) +#10338 = @"C_builtin_function_or_method$strop.strip" +ext_rettype(#10338, #10024) +#10339 = @"C_builtin_function_or_method$strop.swapcase" +ext_rettype(#10339, #10024) +#10340 = @"C_builtin_function_or_method$strop.upper" +ext_rettype(#10340, #10024) +#10341 = @"C_builtin_function_or_method$binascii.a2b_uu" +ext_rettype(#10341, #10024) +#10342 = @"C_builtin_function_or_method$binascii.a2b_hqx" +ext_rettype(#10342, #10001) +#10343 = @"C_builtin_function_or_method$binascii.b2a_hex" +ext_rettype(#10343, #10024) +#10344 = @"C_builtin_function_or_method$binascii.a2b_hex" +ext_rettype(#10344, #10024) +#10345 = @"C_builtin_function_or_method$binascii.hexlify" +ext_rettype(#10345, #10024) +#10346 = @"C_builtin_function_or_method$binascii.unhexlify" +ext_rettype(#10346, #10024) +#10347 = @"C_builtin_function_or_method$binascii.rledecode_hqx" +ext_rettype(#10347, #10024) +#10348 = @"C_builtin_function_or_method$binascii.crc_hqx" +ext_rettype(#10348, #10005) +#10349 = @"C_builtin_function_or_method$binascii.crc32" +ext_rettype(#10349, #10005) +#10350 = @"C_builtin_function_or_method$binascii.a2b_qp" +ext_rettype(#10350, #10024) +#10351 = @"C_builtin_function_or_method$binascii.b2a_qp" +ext_rettype(#10351, #10024) +#10352 = @"C_builtin_function_or_method$cPickle.dump" +ext_rettype(#10352, #10003) +#10353 = @"C_builtin_function_or_method$cPickle.Pickler" +#10354 = @"C_type$cPickle.Pickler" +ext_rettype(#10353, #10354) +#10355 = @"C_builtin_function_or_method$cPickle.Unpickler" +#10356 = @"C_type$cPickle.Unpickler" +ext_rettype(#10355, #10356) +#10357 = @"C_builtin_function_or_method$unicodedata.decimal" +ext_rettype(#10357, #10005) +#10358 = @"C_builtin_function_or_method$unicodedata.digit" +ext_rettype(#10358, #10005) +#10359 = @"C_builtin_function_or_method$unicodedata.numeric" +ext_rettype(#10359, #10038) +#10360 = @"C_builtin_function_or_method$unicodedata.category" +ext_rettype(#10360, #10024) +#10361 = @"C_builtin_function_or_method$unicodedata.bidirectional" +ext_rettype(#10361, #10024) +#10362 = @"C_builtin_function_or_method$unicodedata.combining" +ext_rettype(#10362, #10005) +#10363 = @"C_builtin_function_or_method$unicodedata.mirrored" +ext_rettype(#10363, #10005) +#10364 = @"C_builtin_function_or_method$unicodedata.east_asian_width" +ext_rettype(#10364, #10024) +#10365 = @"C_builtin_function_or_method$unicodedata.decomposition" +ext_rettype(#10365, #10024) +#10366 = @"C_builtin_function_or_method$unicodedata.name" +ext_rettype(#10366, #10024) +#10367 = @"C_builtin_function_or_method$unicodedata.lookup" +ext_rettype(#10367, #10218) +#10368 = @"C_builtin_function_or_method$xxsubtype.bench" +ext_rettype(#10368, #10038) +#10369 = @"C_builtin_function_or_method$_hashlib.new" +#10370 = @"C_type$_hashlib.HASH" +ext_rettype(#10369, #10370) +#10371 = @"C_builtin_function_or_method$_hashlib.openssl_md5" +ext_rettype(#10371, #10370) +#10372 = @"C_builtin_function_or_method$_hashlib.openssl_sha1" +ext_rettype(#10372, #10370) +#10373 = @"C_builtin_function_or_method$_hashlib.openssl_sha224" +ext_rettype(#10373, #10370) +#10374 = @"C_builtin_function_or_method$_hashlib.openssl_sha256" +ext_rettype(#10374, #10370) +#10375 = @"C_builtin_function_or_method$_hashlib.openssl_sha384" +ext_rettype(#10375, #10370) +#10376 = @"C_builtin_function_or_method$_hashlib.openssl_sha512" +ext_rettype(#10376, #10370) +#10377 = @"C_builtin_function_or_method$_hashlib.pbkdf2_hmac" +ext_rettype(#10377, #10024) +#10378 = @"C_builtin_function_or_method$zlib.adler32" +ext_rettype(#10378, #10005) +#10379 = @"C_builtin_function_or_method$zlib.compress" +ext_rettype(#10379, #10024) +#10380 = @"C_builtin_function_or_method$zlib.crc32" +ext_rettype(#10380, #10005) +#10381 = @"C_builtin_function_or_method$thread.start_new_thread" +ext_rettype(#10381, #10005) +#10382 = @"C_builtin_function_or_method$thread.start_new" +ext_rettype(#10382, #10005) +#10383 = @"C_builtin_function_or_method$thread.allocate_lock" +#10384 = @"C_type$thread.lock" +ext_rettype(#10383, #10384) +#10385 = @"C_builtin_function_or_method$thread.allocate" +ext_rettype(#10385, #10384) +#10386 = @"C_builtin_function_or_method$thread.interrupt_main" +ext_rettype(#10386, #10003) +#10387 = @"C_builtin_function_or_method$thread.get_ident" +ext_rettype(#10387, #10005) +#10388 = @"C_builtin_function_or_method$thread._count" +ext_rettype(#10388, #10005) +#10389 = @"C_builtin_function_or_method$thread.stack_size" +ext_rettype(#10389, #10005) +#10390 = @"C_builtin_function_or_method$bz2.decompress" +ext_rettype(#10390, #10024) +#10391 = @"C_builtin_function_or_method$resource.getrlimit" +ext_rettype(#10391, #10001) +#10392 = @"C_builtin_function_or_method$resource.setrlimit" +ext_rettype(#10392, #10003) +#10393 = @"C_builtin_function_or_method$resource.getpagesize" +ext_rettype(#10393, #10005) +#10394 = @"C_builtin_function_or_method$_codecs.register" +ext_rettype(#10394, #10003) +#10395 = @"C_builtin_function_or_method$_codecs.escape_encode" +ext_rettype(#10395, #10001) +#10396 = @"C_builtin_function_or_method$_codecs.escape_decode" +ext_rettype(#10396, #10001) +#10397 = @"C_builtin_function_or_method$_codecs.utf_8_encode" +ext_rettype(#10397, #10001) +#10398 = @"C_builtin_function_or_method$_codecs.utf_8_decode" +ext_rettype(#10398, #10001) +#10399 = @"C_builtin_function_or_method$_codecs.utf_7_encode" +ext_rettype(#10399, #10001) +#10400 = @"C_builtin_function_or_method$_codecs.utf_7_decode" +ext_rettype(#10400, #10001) +#10401 = @"C_builtin_function_or_method$_codecs.utf_16_encode" +ext_rettype(#10401, #10001) +#10402 = @"C_builtin_function_or_method$_codecs.utf_16_le_encode" +ext_rettype(#10402, #10001) +#10403 = @"C_builtin_function_or_method$_codecs.utf_16_be_encode" +ext_rettype(#10403, #10001) +#10404 = @"C_builtin_function_or_method$_codecs.utf_16_decode" +ext_rettype(#10404, #10001) +#10405 = @"C_builtin_function_or_method$_codecs.utf_16_le_decode" +ext_rettype(#10405, #10001) +#10406 = @"C_builtin_function_or_method$_codecs.utf_16_be_decode" +ext_rettype(#10406, #10001) +#10407 = @"C_builtin_function_or_method$_codecs.utf_16_ex_decode" +ext_rettype(#10407, #10001) +#10408 = @"C_builtin_function_or_method$_codecs.utf_32_encode" +ext_rettype(#10408, #10001) +#10409 = @"C_builtin_function_or_method$_codecs.utf_32_le_encode" +ext_rettype(#10409, #10001) +#10410 = @"C_builtin_function_or_method$_codecs.utf_32_be_encode" +ext_rettype(#10410, #10001) +#10411 = @"C_builtin_function_or_method$_codecs.utf_32_decode" +ext_rettype(#10411, #10001) +#10412 = @"C_builtin_function_or_method$_codecs.utf_32_le_decode" +ext_rettype(#10412, #10001) +#10413 = @"C_builtin_function_or_method$_codecs.utf_32_be_decode" +ext_rettype(#10413, #10001) +#10414 = @"C_builtin_function_or_method$_codecs.utf_32_ex_decode" +ext_rettype(#10414, #10001) +#10415 = @"C_builtin_function_or_method$_codecs.unicode_escape_encode" +ext_rettype(#10415, #10001) +#10416 = @"C_builtin_function_or_method$_codecs.unicode_escape_decode" +ext_rettype(#10416, #10001) +#10417 = @"C_builtin_function_or_method$_codecs.unicode_internal_encode" +ext_rettype(#10417, #10001) +#10418 = @"C_builtin_function_or_method$_codecs.unicode_internal_decode" +ext_rettype(#10418, #10001) +#10419 = @"C_builtin_function_or_method$_codecs.raw_unicode_escape_encode" +ext_rettype(#10419, #10001) +#10420 = @"C_builtin_function_or_method$_codecs.raw_unicode_escape_decode" +ext_rettype(#10420, #10001) +#10421 = @"C_builtin_function_or_method$_codecs.latin_1_encode" +ext_rettype(#10421, #10001) +#10422 = @"C_builtin_function_or_method$_codecs.latin_1_decode" +ext_rettype(#10422, #10001) +#10423 = @"C_builtin_function_or_method$_codecs.ascii_encode" +ext_rettype(#10423, #10001) +#10424 = @"C_builtin_function_or_method$_codecs.ascii_decode" +ext_rettype(#10424, #10001) +#10425 = @"C_builtin_function_or_method$_codecs.charmap_encode" +ext_rettype(#10425, #10001) +#10426 = @"C_builtin_function_or_method$_codecs.charmap_decode" +ext_rettype(#10426, #10001) +#10427 = @"C_builtin_function_or_method$_codecs.charmap_build" +ext_rettype(#10427, #10007) +#10428 = @"C_builtin_function_or_method$_codecs.readbuffer_encode" +ext_rettype(#10428, #10001) +#10429 = @"C_builtin_function_or_method$_codecs.charbuffer_encode" +ext_rettype(#10429, #10001) +#10430 = @"C_builtin_function_or_method$_codecs.register_error" +ext_rettype(#10430, #10003) +#10431 = @"C_builtin_function_or_method$readline.parse_and_bind" +ext_rettype(#10431, #10003) +#10432 = @"C_builtin_function_or_method$readline.get_line_buffer" +ext_rettype(#10432, #10024) +#10433 = @"C_builtin_function_or_method$readline.insert_text" +ext_rettype(#10433, #10003) +#10434 = @"C_builtin_function_or_method$readline.redisplay" +ext_rettype(#10434, #10003) +#10435 = @"C_builtin_function_or_method$readline.read_init_file" +ext_rettype(#10435, #10003) +#10436 = @"C_builtin_function_or_method$readline.read_history_file" +ext_rettype(#10436, #10003) +#10437 = @"C_builtin_function_or_method$readline.write_history_file" +ext_rettype(#10437, #10003) +#10438 = @"C_builtin_function_or_method$readline.get_history_item" +ext_rettype(#10438, #10024) +ext_rettype(#10438, #10003) +#10439 = @"C_builtin_function_or_method$readline.get_current_history_length" +ext_rettype(#10439, #10005) +#10440 = @"C_builtin_function_or_method$readline.set_history_length" +ext_rettype(#10440, #10003) +#10441 = @"C_builtin_function_or_method$readline.get_history_length" +ext_rettype(#10441, #10005) +#10442 = @"C_builtin_function_or_method$readline.set_completer" +ext_rettype(#10442, #10003) +#10443 = @"C_builtin_function_or_method$readline.get_completer" +ext_rettype(#10443, #10003) +#10444 = @"C_builtin_function_or_method$readline.get_completion_type" +ext_rettype(#10444, #10005) +#10445 = @"C_builtin_function_or_method$readline.set_completer_delims" +ext_rettype(#10445, #10003) +#10446 = @"C_builtin_function_or_method$readline.add_history" +ext_rettype(#10446, #10003) +#10447 = @"C_builtin_function_or_method$readline.remove_history_item" +ext_rettype(#10447, #10003) +#10448 = @"C_builtin_function_or_method$readline.replace_history_item" +ext_rettype(#10448, #10003) +#10449 = @"C_builtin_function_or_method$readline.get_completer_delims" +ext_rettype(#10449, #10024) +#10450 = @"C_builtin_function_or_method$readline.set_completion_display_matches_hook" +ext_rettype(#10450, #10003) +#10451 = @"C_builtin_function_or_method$readline.set_startup_hook" +ext_rettype(#10451, #10003) +#10452 = @"C_builtin_function_or_method$readline.set_pre_input_hook" +ext_rettype(#10452, #10003) +#10453 = @"C_builtin_function_or_method$readline.clear_history" +ext_rettype(#10453, #10003) +#10454 = @"C_builtin_function_or_method$_testcapi.test_config" +ext_rettype(#10454, #10003) +#10455 = @"C_builtin_function_or_method$_testcapi.test_datetime_capi" +ext_rettype(#10455, #10003) +#10456 = @"C_builtin_function_or_method$_testcapi.test_list_api" +ext_rettype(#10456, #10003) +#10457 = @"C_builtin_function_or_method$_testcapi.test_dict_iteration" +ext_rettype(#10457, #10003) +#10458 = @"C_builtin_function_or_method$_testcapi.test_lazy_hash_inheritance" +ext_rettype(#10458, #10003) +#10459 = @"C_builtin_function_or_method$_testcapi.test_broken_memoryview" +ext_rettype(#10459, #10003) +#10460 = @"C_builtin_function_or_method$_testcapi.test_long_api" +ext_rettype(#10460, #10003) +#10461 = @"C_builtin_function_or_method$_testcapi.test_long_and_overflow" +ext_rettype(#10461, #10003) +#10462 = @"C_builtin_function_or_method$_testcapi.test_long_numbits" +ext_rettype(#10462, #10003) +#10463 = @"C_builtin_function_or_method$_testcapi.test_k_code" +ext_rettype(#10463, #10003) +#10464 = @"C_builtin_function_or_method$_testcapi.test_empty_argparse" +ext_rettype(#10464, #10003) +#10465 = @"C_builtin_function_or_method$_testcapi.test_null_strings" +ext_rettype(#10465, #10001) +#10466 = @"C_builtin_function_or_method$_testcapi.test_string_from_format" +ext_rettype(#10466, #10003) +#10467 = @"C_builtin_function_or_method$_testcapi.test_with_docstring" +ext_rettype(#10467, #10003) +#10468 = @"C_builtin_function_or_method$_testcapi.getargs_tuple" +ext_rettype(#10468, #10001) +#10469 = @"C_builtin_function_or_method$_testcapi.getargs_keywords" +ext_rettype(#10469, #10001) +#10470 = @"C_builtin_function_or_method$_testcapi.getargs_b" +ext_rettype(#10470, #10005) +#10471 = @"C_builtin_function_or_method$_testcapi.getargs_B" +ext_rettype(#10471, #10005) +#10472 = @"C_builtin_function_or_method$_testcapi.getargs_h" +ext_rettype(#10472, #10005) +#10473 = @"C_builtin_function_or_method$_testcapi.getargs_H" +ext_rettype(#10473, #10005) +#10474 = @"C_builtin_function_or_method$_testcapi.getargs_I" +ext_rettype(#10474, #10005) +#10475 = @"C_builtin_function_or_method$_testcapi.getargs_k" +ext_rettype(#10475, #10005) +#10476 = @"C_builtin_function_or_method$_testcapi.getargs_i" +ext_rettype(#10476, #10005) +#10477 = @"C_builtin_function_or_method$_testcapi.getargs_l" +ext_rettype(#10477, #10005) +#10478 = @"C_builtin_function_or_method$_testcapi.getargs_n" +ext_rettype(#10478, #10005) +#10479 = @"C_builtin_function_or_method$_testcapi.getargs_L" +ext_rettype(#10479, #10005) +#10480 = @"C_builtin_function_or_method$_testcapi.getargs_K" +ext_rettype(#10480, #10005) +#10481 = @"C_builtin_function_or_method$_testcapi.test_longlong_api" +ext_rettype(#10481, #10003) +#10482 = @"C_builtin_function_or_method$_testcapi.test_long_long_and_overflow" +ext_rettype(#10482, #10003) +#10483 = @"C_builtin_function_or_method$_testcapi.test_L_code" +ext_rettype(#10483, #10003) +#10484 = @"C_builtin_function_or_method$_testcapi.test_u_code" +ext_rettype(#10484, #10003) +#10485 = @"C_builtin_function_or_method$_testcapi.test_widechar" +ext_rettype(#10485, #10003) +#10486 = @"C_builtin_function_or_method$_testcapi._test_thread_state" +ext_rettype(#10486, #10003) +#10487 = @"C_builtin_function_or_method$_testcapi._pending_threadfunc" +ext_rettype(#10487, #10058) +#10488 = @"C_builtin_function_or_method$_testcapi.test_capsule" +ext_rettype(#10488, #10003) +#10489 = @"C_builtin_function_or_method$_testcapi.traceback_print" +ext_rettype(#10489, #10003) +#10490 = @"C_builtin_function_or_method$_testcapi.code_newempty" +ext_rettype(#10490, #10082) +#10491 = @"C_builtin_function_or_method$_testcapi.make_exception_with_doc" +#10492 = @"C_type$type" +ext_rettype(#10491, #10492) +#10493 = @"C_builtin_function_or_method$_testcapi.sequence_delitem" +ext_rettype(#10493, #10003) +#10494 = @"C_builtin_function_or_method$_testcapi.call_in_temporary_c_thread" +ext_rettype(#10494, #10003) +#10495 = @"C_builtin_function_or_method$select.select" +ext_rettype(#10495, #10001) +#10496 = @"C_builtin_function_or_method$select.poll" +#10497 = @"C_type$select.poll" +ext_rettype(#10496, #10497) +#10498 = @"C_builtin_function_or_method$spwd.getspall" +ext_rettype(#10498, #10021) +#10499 = @"C_builtin_function_or_method$_locale.setlocale" +ext_rettype(#10499, #10024) +#10500 = @"C_builtin_function_or_method$_locale.localeconv" +ext_rettype(#10500, #10007) +#10501 = @"C_builtin_function_or_method$_locale.strcoll" +ext_rettype(#10501, #10005) +#10502 = @"C_builtin_function_or_method$_locale.strxfrm" +ext_rettype(#10502, #10024) +#10503 = @"C_builtin_function_or_method$_locale.nl_langinfo" +ext_rettype(#10503, #10024) +#10504 = @"C_builtin_function_or_method$_locale.gettext" +ext_rettype(#10504, #10024) +#10505 = @"C_builtin_function_or_method$_locale.dgettext" +ext_rettype(#10505, #10024) +#10506 = @"C_builtin_function_or_method$_locale.dcgettext" +ext_rettype(#10506, #10024) +#10507 = @"C_builtin_function_or_method$_locale.textdomain" +ext_rettype(#10507, #10024) +#10508 = @"C_builtin_function_or_method$_locale.bindtextdomain" +ext_rettype(#10508, #10024) +#10509 = @"C_builtin_function_or_method$_locale.bind_textdomain_codeset" +ext_rettype(#10509, #10024) +ext_rettype(#10509, #10003) +#10510 = @"C_builtin_function_or_method$pyexpat.ParserCreate" +#10511 = @"C_type$pyexpat.xmlparser" +ext_rettype(#10510, #10511) +#10512 = @"C_builtin_function_or_method$pyexpat.ErrorString" +ext_rettype(#10512, #10024) +#10513 = @"C_builtin_function_or_method$future_builtins.hex" +ext_rettype(#10513, #10024) +#10514 = @"C_builtin_function_or_method$future_builtins.oct" +ext_rettype(#10514, #10024) +#10515 = @"C_builtin_function_or_method$future_builtins.ascii" +ext_rettype(#10515, #10024) +#10516 = @"C_builtin_function_or_method$cmath.acos" +#10517 = @"C_type$complex" +ext_rettype(#10516, #10517) +#10518 = @"C_builtin_function_or_method$cmath.acosh" +ext_rettype(#10518, #10517) +#10519 = @"C_builtin_function_or_method$cmath.asin" +ext_rettype(#10519, #10517) +#10520 = @"C_builtin_function_or_method$cmath.asinh" +ext_rettype(#10520, #10517) +#10521 = @"C_builtin_function_or_method$cmath.atan" +ext_rettype(#10521, #10517) +#10522 = @"C_builtin_function_or_method$cmath.atanh" +ext_rettype(#10522, #10517) +#10523 = @"C_builtin_function_or_method$cmath.cos" +ext_rettype(#10523, #10517) +#10524 = @"C_builtin_function_or_method$cmath.cosh" +ext_rettype(#10524, #10517) +#10525 = @"C_builtin_function_or_method$cmath.exp" +ext_rettype(#10525, #10517) +#10526 = @"C_builtin_function_or_method$cmath.isinf" +ext_rettype(#10526, #10058) +#10527 = @"C_builtin_function_or_method$cmath.isnan" +ext_rettype(#10527, #10058) +#10528 = @"C_builtin_function_or_method$cmath.log" +ext_rettype(#10528, #10517) +#10529 = @"C_builtin_function_or_method$cmath.log10" +ext_rettype(#10529, #10517) +#10530 = @"C_builtin_function_or_method$cmath.phase" +ext_rettype(#10530, #10038) +#10531 = @"C_builtin_function_or_method$cmath.polar" +ext_rettype(#10531, #10001) +#10532 = @"C_builtin_function_or_method$cmath.rect" +ext_rettype(#10532, #10517) +#10533 = @"C_builtin_function_or_method$cmath.sin" +ext_rettype(#10533, #10517) +#10534 = @"C_builtin_function_or_method$cmath.sinh" +ext_rettype(#10534, #10517) +#10535 = @"C_builtin_function_or_method$cmath.sqrt" +ext_rettype(#10535, #10517) +#10536 = @"C_builtin_function_or_method$cmath.tan" +ext_rettype(#10536, #10517) +#10537 = @"C_builtin_function_or_method$cmath.tanh" +ext_rettype(#10537, #10517) +#10538 = @"C_builtin_function_or_method$_weakref.getweakrefcount" +ext_rettype(#10538, #10005) +#10539 = @"C_builtin_function_or_method$_weakref.getweakrefs" +ext_rettype(#10539, #10021) +#10540 = @"C_builtin_function_or_method$_weakref.proxy" +#10541 = @"C_type$weakref" +ext_rettype(#10540, #10541) +#10542 = @"C_builtin_function_or_method$ossaudiodev.open" +#10543 = @"C_type$ossaudiodev.oss_audio_device" +ext_rettype(#10542, #10543) +#10544 = @"C_builtin_function_or_method$ossaudiodev.openmixer" +#10545 = @"C_type$ossaudiodev.oss_mixer_device" +ext_rettype(#10544, #10545) +#10546 = @"C_builtin_function_or_method$_ctypes.get_errno" +ext_rettype(#10546, #10005) +#10547 = @"C_builtin_function_or_method$_ctypes.set_errno" +ext_rettype(#10547, #10005) +#10548 = @"C_builtin_function_or_method$_ctypes._buffer_info" +ext_rettype(#10548, #10001) +#10549 = @"C_builtin_function_or_method$_ctypes.resize" +ext_rettype(#10549, #10003) +#10550 = @"C_builtin_function_or_method$_ctypes.set_conversion_mode" +ext_rettype(#10550, #10001) +#10551 = @"C_builtin_function_or_method$_ctypes.dlopen" +ext_rettype(#10551, #10005) +#10552 = @"C_builtin_function_or_method$_ctypes.dlclose" +ext_rettype(#10552, #10003) +#10553 = @"C_builtin_function_or_method$_ctypes.dlsym" +ext_rettype(#10553, #10005) +#10554 = @"C_builtin_function_or_method$_ctypes.alignment" +ext_rettype(#10554, #10005) +#10555 = @"C_builtin_function_or_method$_ctypes.sizeof" +ext_rettype(#10555, #10005) +#10556 = @"C_builtin_function_or_method$_ctypes.byref" +#10557 = @"C_type$CArgObject" +ext_rettype(#10556, #10557) +#10558 = @"C_builtin_function_or_method$_ctypes.addressof" +ext_rettype(#10558, #10005) +#10559 = @"C_builtin_function_or_method$_ctypes.call_function" +ext_rettype(#10559, #10005) +ext_rettype(#10559, #10003) +#10560 = @"C_builtin_function_or_method$_ctypes.call_cdeclfunction" +ext_rettype(#10560, #10005) +ext_rettype(#10560, #10003) +#10561 = @"C_builtin_function_or_method$_ctypes_test.func_si" +ext_rettype(#10561, #10003) +#10562 = @"C_builtin_function_or_method$_ctypes_test.func" +ext_rettype(#10562, #10003) +#10563 = @"C_builtin_function_or_method$fcntl.fcntl" +ext_rettype(#10563, #10005) +ext_rettype(#10563, #10024) +#10564 = @"C_builtin_function_or_method$fcntl.ioctl" +ext_rettype(#10564, #10005) +ext_rettype(#10564, #10024) +#10565 = @"C_builtin_function_or_method$fcntl.flock" +ext_rettype(#10565, #10003) +#10566 = @"C_builtin_function_or_method$fcntl.lockf" +ext_rettype(#10566, #10003) +#10567 = @"C_builtin_function_or_method$_json.scanstring" +ext_rettype(#10567, #10001) +#10568 = @"C_builtin_function_or_method$syslog.openlog" +ext_rettype(#10568, #10003) +#10569 = @"C_builtin_function_or_method$syslog.closelog" +ext_rettype(#10569, #10003) +#10570 = @"C_builtin_function_or_method$syslog.syslog" +ext_rettype(#10570, #10003) +#10571 = @"C_builtin_function_or_method$syslog.setlogmask" +ext_rettype(#10571, #10005) +#10572 = @"C_builtin_function_or_method$syslog.LOG_MASK" +ext_rettype(#10572, #10005) +#10573 = @"C_builtin_function_or_method$syslog.LOG_UPTO" +ext_rettype(#10573, #10005) +#10574 = @"C_builtin_function_or_method$_elementtree.Element" +#10575 = @"C_type$Element" +ext_rettype(#10574, #10575) +#10576 = @"C_builtin_function_or_method$_elementtree.SubElement" +ext_rettype(#10576, #10575) +#10577 = @"C_builtin_function_or_method$_elementtree.TreeBuilder" +#10578 = @"C_type$TreeBuilder" +ext_rettype(#10577, #10578) +#10579 = @"C_builtin_function_or_method$_elementtree.XMLParser" +#10580 = @"C_type$XMLParser" +ext_rettype(#10579, #10580) +#10581 = @"C_builtin_function_or_method$_elementtree.XMLTreeBuilder" +ext_rettype(#10581, #10580) +#10582 = @"C_builtin_function_or_method$_bisect.bisect_right" +ext_rettype(#10582, #10005) +#10583 = @"C_builtin_function_or_method$_bisect.bisect" +ext_rettype(#10583, #10005) +#10584 = @"C_builtin_function_or_method$_bisect.insort_right" +ext_rettype(#10584, #10003) +#10585 = @"C_builtin_function_or_method$_bisect.insort" +ext_rettype(#10585, #10003) +#10586 = @"C_builtin_function_or_method$_bisect.bisect_left" +ext_rettype(#10586, #10005) +#10587 = @"C_builtin_function_or_method$_bisect.insort_left" +ext_rettype(#10587, #10003) +#10588 = @"C_builtin_function_or_method$sys.callstats" +ext_rettype(#10588, #10003) +#10589 = @"C_builtin_function_or_method$sys._clear_type_cache" +ext_rettype(#10589, #10003) +#10590 = @"C_builtin_function_or_method$sys._current_frames" +ext_rettype(#10590, #10007) +#10591 = @"C_builtin_function_or_method$sys.displayhook" +ext_rettype(#10591, #10003) +#10592 = @"C_builtin_function_or_method$sys.exc_info" +ext_rettype(#10592, #10001) +#10593 = @"C_builtin_function_or_method$sys.exc_clear" +ext_rettype(#10593, #10003) +#10594 = @"C_builtin_function_or_method$sys.excepthook" +ext_rettype(#10594, #10003) +#10595 = @"C_builtin_function_or_method$sys.getdefaultencoding" +ext_rettype(#10595, #10024) +#10596 = @"C_builtin_function_or_method$sys.getdlopenflags" +ext_rettype(#10596, #10005) +#10597 = @"C_builtin_function_or_method$sys.getfilesystemencoding" +ext_rettype(#10597, #10024) +ext_rettype(#10597, #10003) +#10598 = @"C_builtin_function_or_method$sys.getrefcount" +ext_rettype(#10598, #10005) +#10599 = @"C_builtin_function_or_method$sys.getrecursionlimit" +ext_rettype(#10599, #10005) +#10600 = @"C_builtin_function_or_method$sys.getsizeof" +ext_rettype(#10600, #10005) +#10601 = @"C_builtin_function_or_method$sys._getframe" +#10602 = @"C_type$frame" +ext_rettype(#10601, #10602) +#10603 = @"C_builtin_function_or_method$sys.setdefaultencoding" +ext_rettype(#10603, #10003) +#10604 = @"C_builtin_function_or_method$sys.setcheckinterval" +ext_rettype(#10604, #10003) +#10605 = @"C_builtin_function_or_method$sys.getcheckinterval" +ext_rettype(#10605, #10005) +#10606 = @"C_builtin_function_or_method$sys.setdlopenflags" +ext_rettype(#10606, #10003) +#10607 = @"C_builtin_function_or_method$sys.setprofile" +ext_rettype(#10607, #10003) +#10608 = @"C_builtin_function_or_method$sys.getprofile" +ext_rettype(#10608, #10003) +#10609 = @"C_builtin_function_or_method$sys.setrecursionlimit" +ext_rettype(#10609, #10003) +#10610 = @"C_builtin_function_or_method$sys.settrace" +ext_rettype(#10610, #10003) +#10611 = @"C_builtin_function_or_method$sys.gettrace" +ext_rettype(#10611, #10003) +#10612 = @"C_builtin_function_or_method$_warnings.warn" +ext_rettype(#10612, #10003) +#10613 = @"C_builtin_function_or_method$_warnings.warn_explicit" +ext_rettype(#10613, #10003) +#10614 = @"C_builtin_function_or_method$marshal.dump" +ext_rettype(#10614, #10003) +#10615 = @"C_builtin_function_or_method$marshal.load" +ext_rettype(#10615, #10058) +ext_rettype(#10615, #10038) +ext_rettype(#10615, #10005) +ext_rettype(#10615, #10517) +ext_rettype(#10615, #10003) +#10616 = @"C_builtin_function_or_method$marshal.loads" +ext_rettype(#10616, #10058) +ext_rettype(#10616, #10038) +ext_rettype(#10616, #10005) +ext_rettype(#10616, #10517) +ext_rettype(#10616, #10003) +#10617 = @"C_builtin_function_or_method$imp.reload" +#10618 = @"C_type$module" +ext_rettype(#10617, #10618) +#10619 = @"C_builtin_function_or_method$imp.find_module" +ext_rettype(#10619, #10001) +#10620 = @"C_builtin_function_or_method$imp.get_magic" +ext_rettype(#10620, #10024) +#10621 = @"C_builtin_function_or_method$imp.get_suffixes" +ext_rettype(#10621, #10021) +#10622 = @"C_builtin_function_or_method$imp.load_module" +ext_rettype(#10622, #10618) +#10623 = @"C_builtin_function_or_method$imp.new_module" +ext_rettype(#10623, #10618) +#10624 = @"C_builtin_function_or_method$imp.lock_held" +ext_rettype(#10624, #10058) +#10625 = @"C_builtin_function_or_method$imp.acquire_lock" +ext_rettype(#10625, #10003) +#10626 = @"C_builtin_function_or_method$imp.release_lock" +ext_rettype(#10626, #10003) +#10627 = @"C_builtin_function_or_method$imp.get_frozen_object" +ext_rettype(#10627, #10058) +ext_rettype(#10627, #10038) +ext_rettype(#10627, #10005) +ext_rettype(#10627, #10517) +ext_rettype(#10627, #10003) +#10628 = @"C_builtin_function_or_method$imp.init_builtin" +ext_rettype(#10628, #10618) +ext_rettype(#10628, #10003) +#10629 = @"C_builtin_function_or_method$imp.init_frozen" +ext_rettype(#10629, #10618) +ext_rettype(#10629, #10003) +#10630 = @"C_builtin_function_or_method$imp.is_builtin" +ext_rettype(#10630, #10005) +#10631 = @"C_builtin_function_or_method$imp.is_frozen" +ext_rettype(#10631, #10058) +#10632 = @"C_builtin_function_or_method$imp.load_dynamic" +ext_rettype(#10632, #10618) +#10633 = @"C_builtin_function_or_method$imp.load_package" +ext_rettype(#10633, #10618) +#10634 = @"C_builtin_function_or_method$builtins.__import__" +ext_rettype(#10634, #10618) +ext_rettype(#10634, #10003) +#10635 = @"C_builtin_function_or_method$builtins.all" +ext_rettype(#10635, #10058) +#10636 = @"C_builtin_function_or_method$builtins.any" +ext_rettype(#10636, #10058) +#10637 = @"C_builtin_function_or_method$builtins.bin" +ext_rettype(#10637, #10024) +#10638 = @"C_builtin_function_or_method$builtins.callable" +ext_rettype(#10638, #10058) +#10639 = @"C_builtin_function_or_method$builtins.chr" +ext_rettype(#10639, #10024) +#10640 = @"C_builtin_function_or_method$builtins.cmp" +ext_rettype(#10640, #10005) +#10641 = @"C_builtin_function_or_method$builtins.coerce" +ext_rettype(#10641, #10001) +#10642 = @"C_builtin_function_or_method$builtins.compile" +ext_rettype(#10642, #10082) +ext_rettype(#10642, #10003) +#10643 = @"C_builtin_function_or_method$builtins.delattr" +ext_rettype(#10643, #10003) +#10644 = @"C_builtin_function_or_method$builtins.dir" +ext_rettype(#10644, #10021) +#10645 = @"C_builtin_function_or_method$builtins.filter" +ext_rettype(#10645, #10021) +ext_rettype(#10645, #10001) +#10646 = @"C_builtin_function_or_method$builtins.format" +ext_rettype(#10646, #10024) +ext_rettype(#10646, #10218) +#10647 = @"C_builtin_function_or_method$builtins.globals" +ext_rettype(#10647, #10007) +#10648 = @"C_builtin_function_or_method$builtins.hasattr" +ext_rettype(#10648, #10058) +#10649 = @"C_builtin_function_or_method$builtins.hash" +ext_rettype(#10649, #10005) +#10650 = @"C_builtin_function_or_method$builtins.id" +ext_rettype(#10650, #10005) +#10651 = @"C_builtin_function_or_method$builtins.input" +ext_rettype(#10651, #10024) +#10652 = @"C_builtin_function_or_method$builtins.isinstance" +ext_rettype(#10652, #10058) +#10653 = @"C_builtin_function_or_method$builtins.issubclass" +ext_rettype(#10653, #10058) +#10654 = @"C_builtin_function_or_method$builtins.iter" +#10655 = @"C_type$iterator" +ext_rettype(#10654, #10655) +#10656 = @"C_type$callable-iterator" +ext_rettype(#10654, #10656) +#10657 = @"C_builtin_function_or_method$builtins.len" +ext_rettype(#10657, #10005) +#10658 = @"C_builtin_function_or_method$builtins.locals" +ext_rettype(#10658, #10007) +#10659 = @"C_builtin_function_or_method$builtins.map" +ext_rettype(#10659, #10021) +#10660 = @"C_builtin_function_or_method$builtins.open" +ext_rettype(#10660, #10250) +#10661 = @"C_builtin_function_or_method$builtins.ord" +ext_rettype(#10661, #10005) +#10662 = @"C_builtin_function_or_method$builtins.print" +ext_rettype(#10662, #10003) +#10663 = @"C_builtin_function_or_method$builtins.range" +ext_rettype(#10663, #10021) +#10664 = @"C_builtin_function_or_method$builtins.raw_input" +ext_rettype(#10664, #10024) +#10665 = @"C_builtin_function_or_method$builtins.reload" +ext_rettype(#10665, #10618) +#10666 = @"C_builtin_function_or_method$builtins.repr" +ext_rettype(#10666, #10024) +#10667 = @"C_builtin_function_or_method$builtins.round" +ext_rettype(#10667, #10038) +#10668 = @"C_builtin_function_or_method$builtins.setattr" +ext_rettype(#10668, #10003) +#10669 = @"C_builtin_function_or_method$builtins.sorted" +ext_rettype(#10669, #10021) +#10670 = @"C_builtin_function_or_method$builtins.sum" +ext_rettype(#10670, #10038) +ext_rettype(#10670, #10005) +#10671 = @"C_builtin_function_or_method$builtins.unichr" +ext_rettype(#10671, #10218) +#10672 = @"C_builtin_function_or_method$builtins.vars" +ext_rettype(#10672, #10007) +#10673 = @"C_builtin_function_or_method$builtins.zip" +ext_rettype(#10673, #10021) +#10674 = @"C_type$_multiprocessing.SemLock$acquire" +ext_rettype(#10674, #10058) +#10675 = @"C_type$_multiprocessing.SemLock$release" +ext_rettype(#10675, #10003) +#10676 = @"C_type$_multiprocessing.SemLock$__enter__" +ext_rettype(#10676, #10058) +#10677 = @"C_type$_multiprocessing.SemLock$__exit__" +ext_rettype(#10677, #10003) +#10678 = @"C_type$_multiprocessing.SemLock$_count" +ext_rettype(#10678, #10005) +#10679 = @"C_type$_multiprocessing.SemLock$_is_mine" +ext_rettype(#10679, #10058) +#10680 = @"C_type$_multiprocessing.SemLock$_get_value" +ext_rettype(#10680, #10005) +#10681 = @"C_type$_multiprocessing.SemLock$_is_zero" +ext_rettype(#10681, #10058) +#10682 = @"C_type$_multiprocessing.SemLock$_after_fork" +ext_rettype(#10682, #10003) +#10683 = @"C_type$_multiprocessing.Connection$send_bytes" +ext_rettype(#10683, #10003) +#10684 = @"C_type$_multiprocessing.Connection$recv_bytes" +ext_rettype(#10684, #10024) +#10685 = @"C_type$_multiprocessing.Connection$recv_bytes_into" +ext_rettype(#10685, #10005) +#10686 = @"C_type$_multiprocessing.Connection$send" +ext_rettype(#10686, #10003) +#10687 = @"C_type$_multiprocessing.Connection$poll" +ext_rettype(#10687, #10058) +#10688 = @"C_type$_multiprocessing.Connection$fileno" +ext_rettype(#10688, #10005) +#10689 = @"C_type$_multiprocessing.Connection$close" +ext_rettype(#10689, #10003) +#10690 = @"C_type$_ssl._SSLContext$_wrap_socket" +#10691 = @"C_type$_ssl._SSLSocket" +ext_rettype(#10690, #10691) +#10692 = @"C_type$_ssl._SSLContext$set_ciphers" +ext_rettype(#10692, #10003) +#10693 = @"C_type$_ssl._SSLContext$_set_npn_protocols" +ext_rettype(#10693, #10003) +#10694 = @"C_type$_ssl._SSLContext$load_cert_chain" +ext_rettype(#10694, #10003) +#10695 = @"C_type$_ssl._SSLContext$load_dh_params" +ext_rettype(#10695, #10003) +#10696 = @"C_type$_ssl._SSLContext$load_verify_locations" +ext_rettype(#10696, #10003) +#10697 = @"C_type$_ssl._SSLContext$session_stats" +ext_rettype(#10697, #10007) +#10698 = @"C_type$_ssl._SSLContext$set_default_verify_paths" +ext_rettype(#10698, #10003) +#10699 = @"C_type$_ssl._SSLContext$set_ecdh_curve" +ext_rettype(#10699, #10003) +#10700 = @"C_type$_ssl._SSLContext$set_servername_callback" +ext_rettype(#10700, #10003) +#10701 = @"C_type$_ssl._SSLContext$cert_store_stats" +ext_rettype(#10701, #10007) +#10702 = @"C_type$_ssl._SSLContext$get_ca_certs" +ext_rettype(#10702, #10021) +#10703 = @"C_type$_ssl._SSLSocket$do_handshake" +ext_rettype(#10703, #10003) +#10704 = @"C_type$_ssl._SSLSocket$write" +ext_rettype(#10704, #10005) +#10705 = @"C_type$_ssl._SSLSocket$read" +ext_rettype(#10705, #10005) +#10706 = @"C_type$_ssl._SSLSocket$pending" +ext_rettype(#10706, #10005) +#10707 = @"C_type$_ssl._SSLSocket$peer_certificate" +ext_rettype(#10707, #10007) +ext_rettype(#10707, #10024) +ext_rettype(#10707, #10003) +#10708 = @"C_type$_ssl._SSLSocket$cipher" +ext_rettype(#10708, #10001) +ext_rettype(#10708, #10003) +#10709 = @"C_type$_ssl._SSLSocket$version" +ext_rettype(#10709, #10218) +ext_rettype(#10709, #10003) +#10710 = @"C_type$_ssl._SSLSocket$selected_npn_protocol" +ext_rettype(#10710, #10218) +ext_rettype(#10710, #10003) +#10711 = @"C_type$_ssl._SSLSocket$compression" +ext_rettype(#10711, #10024) +ext_rettype(#10711, #10003) +#10712 = @"C_type$_ssl._SSLSocket$shutdown" +ext_rettype(#10712, #10102) +#10713 = @"C_type$_ssl._SSLSocket$tls_unique_cb" +ext_rettype(#10713, #10024) +ext_rettype(#10713, #10003) +#10714 = @"C_type$_sre.SRE_Match$group" +ext_rettype(#10714, #10001) +#10715 = @"C_type$_sre.SRE_Match$start" +ext_rettype(#10715, #10005) +#10716 = @"C_type$_sre.SRE_Match$end" +ext_rettype(#10716, #10005) +#10717 = @"C_type$_sre.SRE_Match$span" +ext_rettype(#10717, #10001) +#10718 = @"C_type$_sre.SRE_Match$groups" +ext_rettype(#10718, #10001) +#10719 = @"C_type$_sre.SRE_Match$groupdict" +ext_rettype(#10719, #10007) +#10720 = @"C_type$_sre.SRE_Scanner$match" +ext_rettype(#10720, #10003) +#10721 = @"C_type$_sre.SRE_Scanner$search" +ext_rettype(#10721, #10003) +#10722 = @"C_type$_sre.SRE_Pattern$match" +ext_rettype(#10722, #10003) +#10723 = @"C_type$_sre.SRE_Pattern$search" +ext_rettype(#10723, #10003) +#10724 = @"C_type$_sre.SRE_Pattern$sub" +ext_rettype(#10724, #10001) +#10725 = @"C_type$_sre.SRE_Pattern$subn" +ext_rettype(#10725, #10001) +#10726 = @"C_type$_sre.SRE_Pattern$split" +ext_rettype(#10726, #10021) +#10727 = @"C_type$_sre.SRE_Pattern$findall" +ext_rettype(#10727, #10021) +#10728 = @"C_type$_sre.SRE_Pattern$finditer" +ext_rettype(#10728, #10656) +#10729 = @"C_type$linuxaudiodev.linux_audio_device$write" +ext_rettype(#10729, #10003) +#10730 = @"C_type$linuxaudiodev.linux_audio_device$setparameters" +ext_rettype(#10730, #10003) +#10731 = @"C_type$linuxaudiodev.linux_audio_device$bufsize" +ext_rettype(#10731, #10005) +#10732 = @"C_type$linuxaudiodev.linux_audio_device$obufcount" +ext_rettype(#10732, #10005) +#10733 = @"C_type$linuxaudiodev.linux_audio_device$obuffree" +ext_rettype(#10733, #10005) +#10734 = @"C_type$linuxaudiodev.linux_audio_device$flush" +ext_rettype(#10734, #10003) +#10735 = @"C_type$linuxaudiodev.linux_audio_device$close" +ext_rettype(#10735, #10003) +#10736 = @"C_type$linuxaudiodev.linux_audio_device$fileno" +ext_rettype(#10736, #10005) +#10737 = @"C_type$linuxaudiodev.linux_audio_device$getptr" +ext_rettype(#10737, #10001) +#10738 = @"C_type$MultibyteCodec$2encode" +ext_rettype(#10738, #10001) +#10739 = @"C_type$MultibyteCodec$2decode" +ext_rettype(#10739, #10001) +#10740 = @"C_type$MultibyteIncrementalEncoder$2encode" +ext_rettype(#10740, #10024) +#10741 = @"C_type$MultibyteIncrementalEncoder$2reset" +ext_rettype(#10741, #10003) +#10742 = @"C_type$MultibyteIncrementalDecoder$2reset" +ext_rettype(#10742, #10003) +#10743 = @"C_type$MultibyteStreamReader$2read" +ext_rettype(#10743, #10218) +#10744 = @"C_type$MultibyteStreamReader$2readline" +ext_rettype(#10744, #10218) +#10745 = @"C_type$MultibyteStreamReader$2readlines" +ext_rettype(#10745, #10021) +#10746 = @"C_type$MultibyteStreamReader$2reset" +ext_rettype(#10746, #10003) +#10747 = @"C_type$MultibyteStreamWriter$2write" +ext_rettype(#10747, #10003) +#10748 = @"C_type$MultibyteStreamWriter$2writelines" +ext_rettype(#10748, #10003) +#10749 = @"C_type$MultibyteStreamWriter$2reset" +ext_rettype(#10749, #10003) +#10750 = @"C_type$deque_iterator$2__length_hint__" +ext_rettype(#10750, #10005) +#10751 = @"C_type$deque_reverse_iterator$2__length_hint__" +ext_rettype(#10751, #10005) +#10752 = @"C_type$collections.deque$append" +ext_rettype(#10752, #10003) +#10753 = @"C_type$collections.deque$appendleft" +ext_rettype(#10753, #10003) +#10754 = @"C_type$collections.deque$clear" +ext_rettype(#10754, #10003) +#10755 = @"C_type$collections.deque$count" +ext_rettype(#10755, #10005) +#10756 = @"C_type$collections.deque$extend" +ext_rettype(#10756, #10003) +#10757 = @"C_type$collections.deque$extendleft" +ext_rettype(#10757, #10003) +#10758 = @"C_type$collections.deque$__reduce__" +ext_rettype(#10758, #10001) +#10759 = @"C_type$collections.deque$remove" +ext_rettype(#10759, #10003) +#10760 = @"C_type$collections.deque$__reversed__" +#10761 = @"C_type$deque_reverse_iterator" +ext_rettype(#10760, #10761) +#10762 = @"C_type$collections.deque$reverse" +ext_rettype(#10762, #10003) +#10763 = @"C_type$collections.deque$rotate" +ext_rettype(#10763, #10003) +#10764 = @"C_type$collections.deque$__sizeof__" +ext_rettype(#10764, #10005) +#10765 = @"C_type$collections.defaultdict$__reduce__" +ext_rettype(#10765, #10001) +#10766 = @"C_type$parser.st$compile" +ext_rettype(#10766, #10082) +#10767 = @"C_type$parser.st$tolist" +ext_rettype(#10767, #10003) +#10768 = @"C_type$parser.st$totuple" +ext_rettype(#10768, #10003) +#10769 = @"C_type$parser.st$__sizeof__" +ext_rettype(#10769, #10005) +#10770 = @"C_type$_socket.socket$accept" +ext_rettype(#10770, #10001) +#10771 = @"C_type$_socket.socket$bind" +ext_rettype(#10771, #10003) +#10772 = @"C_type$_socket.socket$close" +ext_rettype(#10772, #10003) +#10773 = @"C_type$_socket.socket$connect" +ext_rettype(#10773, #10003) +#10774 = @"C_type$_socket.socket$connect_ex" +ext_rettype(#10774, #10005) +#10775 = @"C_type$_socket.socket$dup" +ext_rettype(#10775, #10102) +#10776 = @"C_type$_socket.socket$fileno" +ext_rettype(#10776, #10005) +#10777 = @"C_type$_socket.socket$getpeername" +ext_rettype(#10777, #10001) +ext_rettype(#10777, #10024) +ext_rettype(#10777, #10003) +#10778 = @"C_type$_socket.socket$getsockname" +ext_rettype(#10778, #10001) +ext_rettype(#10778, #10024) +ext_rettype(#10778, #10003) +#10779 = @"C_type$_socket.socket$getsockopt" +ext_rettype(#10779, #10005) +#10780 = @"C_type$_socket.socket$listen" +ext_rettype(#10780, #10003) +#10781 = @"C_type$_socket.socket$makefile" +ext_rettype(#10781, #10250) +#10782 = @"C_type$_socket.socket$recv_into" +ext_rettype(#10782, #10005) +#10783 = @"C_type$_socket.socket$recvfrom" +ext_rettype(#10783, #10001) +#10784 = @"C_type$_socket.socket$recvfrom_into" +ext_rettype(#10784, #10001) +#10785 = @"C_type$_socket.socket$send" +ext_rettype(#10785, #10005) +#10786 = @"C_type$_socket.socket$sendall" +ext_rettype(#10786, #10003) +#10787 = @"C_type$_socket.socket$sendto" +ext_rettype(#10787, #10005) +#10788 = @"C_type$_socket.socket$setblocking" +ext_rettype(#10788, #10003) +#10789 = @"C_type$_socket.socket$settimeout" +ext_rettype(#10789, #10003) +#10790 = @"C_type$_socket.socket$gettimeout" +ext_rettype(#10790, #10038) +ext_rettype(#10790, #10003) +#10791 = @"C_type$_socket.socket$setsockopt" +ext_rettype(#10791, #10003) +#10792 = @"C_type$_socket.socket$shutdown" +ext_rettype(#10792, #10003) +#10793 = @"C_type$itertools.tee$__copy__" +#10794 = @"C_type$itertools.tee" +ext_rettype(#10793, #10794) +#10795 = @"C_type$itertools.count$__reduce__" +ext_rettype(#10795, #10001) +#10796 = @"C_type$itertools.repeat$__length_hint__" +ext_rettype(#10796, #10005) +#10797 = @"C_type$_csv.writer$writerows" +ext_rettype(#10797, #10003) +#10798 = @"C_type$array.array$append" +ext_rettype(#10798, #10003) +#10799 = @"C_type$array.array$buffer_info" +ext_rettype(#10799, #10001) +#10800 = @"C_type$array.array$byteswap" +ext_rettype(#10800, #10003) +#10801 = @"C_type$array.array$count" +ext_rettype(#10801, #10005) +#10802 = @"C_type$array.array$extend" +ext_rettype(#10802, #10003) +#10803 = @"C_type$array.array$fromfile" +ext_rettype(#10803, #10003) +#10804 = @"C_type$array.array$fromlist" +ext_rettype(#10804, #10003) +#10805 = @"C_type$array.array$fromstring" +ext_rettype(#10805, #10003) +#10806 = @"C_type$array.array$fromunicode" +ext_rettype(#10806, #10003) +#10807 = @"C_type$array.array$index" +ext_rettype(#10807, #10005) +#10808 = @"C_type$array.array$insert" +ext_rettype(#10808, #10003) +#10809 = @"C_type$array.array$read" +ext_rettype(#10809, #10003) +#10810 = @"C_type$array.array$__reduce__" +ext_rettype(#10810, #10001) +#10811 = @"C_type$array.array$remove" +ext_rettype(#10811, #10003) +#10812 = @"C_type$array.array$reverse" +ext_rettype(#10812, #10003) +#10813 = @"C_type$array.array$tofile" +ext_rettype(#10813, #10003) +#10814 = @"C_type$array.array$tolist" +ext_rettype(#10814, #10021) +#10815 = @"C_type$array.array$tostring" +ext_rettype(#10815, #10024) +#10816 = @"C_type$array.array$tounicode" +ext_rettype(#10816, #10218) +#10817 = @"C_type$array.array$write" +ext_rettype(#10817, #10003) +#10818 = @"C_type$array.array$__sizeof__" +ext_rettype(#10818, #10005) +#10819 = @"C_type$mmap.mmap$close" +ext_rettype(#10819, #10003) +#10820 = @"C_type$mmap.mmap$find" +ext_rettype(#10820, #10005) +#10821 = @"C_type$mmap.mmap$rfind" +ext_rettype(#10821, #10005) +#10822 = @"C_type$mmap.mmap$flush" +ext_rettype(#10822, #10005) +#10823 = @"C_type$mmap.mmap$move" +ext_rettype(#10823, #10003) +#10824 = @"C_type$mmap.mmap$read" +ext_rettype(#10824, #10024) +#10825 = @"C_type$mmap.mmap$read_byte" +ext_rettype(#10825, #10024) +#10826 = @"C_type$mmap.mmap$readline" +ext_rettype(#10826, #10024) +#10827 = @"C_type$mmap.mmap$resize" +ext_rettype(#10827, #10003) +#10828 = @"C_type$mmap.mmap$seek" +ext_rettype(#10828, #10003) +#10829 = @"C_type$mmap.mmap$size" +ext_rettype(#10829, #10005) +#10830 = @"C_type$mmap.mmap$tell" +ext_rettype(#10830, #10005) +#10831 = @"C_type$mmap.mmap$write" +ext_rettype(#10831, #10003) +#10832 = @"C_type$mmap.mmap$write_byte" +ext_rettype(#10832, #10003) +#10833 = @"C_type$_hotshot.ProfilerType$addinfo" +ext_rettype(#10833, #10003) +#10834 = @"C_type$_hotshot.ProfilerType$close" +ext_rettype(#10834, #10003) +#10835 = @"C_type$_hotshot.ProfilerType$fileno" +ext_rettype(#10835, #10005) +#10836 = @"C_type$_hotshot.ProfilerType$start" +ext_rettype(#10836, #10003) +#10837 = @"C_type$_hotshot.ProfilerType$stop" +ext_rettype(#10837, #10003) +#10838 = @"C_type$_hotshot.LogReaderType$close" +ext_rettype(#10838, #10003) +#10839 = @"C_type$_hotshot.LogReaderType$fileno" +ext_rettype(#10839, #10005) +#10840 = @"C_type$cStringIO.StringO$flush" +ext_rettype(#10840, #10003) +#10841 = @"C_type$cStringIO.StringO$getvalue" +ext_rettype(#10841, #10024) +#10842 = @"C_type$cStringIO.StringO$isatty" +ext_rettype(#10842, #10058) +#10843 = @"C_type$cStringIO.StringO$read" +ext_rettype(#10843, #10024) +#10844 = @"C_type$cStringIO.StringO$readline" +ext_rettype(#10844, #10024) +#10845 = @"C_type$cStringIO.StringO$readlines" +ext_rettype(#10845, #10021) +#10846 = @"C_type$cStringIO.StringO$reset" +ext_rettype(#10846, #10003) +#10847 = @"C_type$cStringIO.StringO$seek" +ext_rettype(#10847, #10003) +#10848 = @"C_type$cStringIO.StringO$tell" +ext_rettype(#10848, #10005) +#10849 = @"C_type$cStringIO.StringO$truncate" +ext_rettype(#10849, #10003) +#10850 = @"C_type$cStringIO.StringO$close" +ext_rettype(#10850, #10003) +#10851 = @"C_type$cStringIO.StringO$write" +ext_rettype(#10851, #10003) +#10852 = @"C_type$cStringIO.StringO$writelines" +ext_rettype(#10852, #10003) +#10853 = @"C_type$cStringIO.StringI$flush" +ext_rettype(#10853, #10003) +#10854 = @"C_type$cStringIO.StringI$getvalue" +ext_rettype(#10854, #10024) +#10855 = @"C_type$cStringIO.StringI$isatty" +ext_rettype(#10855, #10058) +#10856 = @"C_type$cStringIO.StringI$read" +ext_rettype(#10856, #10024) +#10857 = @"C_type$cStringIO.StringI$readline" +ext_rettype(#10857, #10024) +#10858 = @"C_type$cStringIO.StringI$readlines" +ext_rettype(#10858, #10021) +#10859 = @"C_type$cStringIO.StringI$reset" +ext_rettype(#10859, #10003) +#10860 = @"C_type$cStringIO.StringI$seek" +ext_rettype(#10860, #10003) +#10861 = @"C_type$cStringIO.StringI$tell" +ext_rettype(#10861, #10005) +#10862 = @"C_type$cStringIO.StringI$truncate" +ext_rettype(#10862, #10003) +#10863 = @"C_type$cStringIO.StringI$close" +ext_rettype(#10863, #10003) +#10864 = @"C_type$Struct$2pack" +ext_rettype(#10864, #10024) +#10865 = @"C_type$Struct$2pack_into" +ext_rettype(#10865, #10003) +#10866 = @"C_type$Struct$2unpack" +ext_rettype(#10866, #10001) +#10867 = @"C_type$Struct$2unpack_from" +ext_rettype(#10867, #10001) +#10868 = @"C_type$Struct$2__sizeof__" +ext_rettype(#10868, #10005) +#10869 = @"C_type$cPickle.Pickler$dump" +ext_rettype(#10869, #10024) +#10870 = @"C_type$cPickle.Pickler$clear_memo" +ext_rettype(#10870, #10003) +#10871 = @"C_type$cPickle.Pickler$getvalue" +ext_rettype(#10871, #10024) +#10872 = @"C_type$zipimport.zipimporter$find_module" +ext_rettype(#10872, #10003) +#10873 = @"C_type$zipimport.zipimporter$get_data" +ext_rettype(#10873, #10024) +#10874 = @"C_type$zipimport.zipimporter$get_code" +ext_rettype(#10874, #10058) +ext_rettype(#10874, #10038) +ext_rettype(#10874, #10082) +ext_rettype(#10874, #10005) +ext_rettype(#10874, #10517) +ext_rettype(#10874, #10003) +#10875 = @"C_type$zipimport.zipimporter$get_source" +ext_rettype(#10875, #10024) +ext_rettype(#10875, #10003) +#10876 = @"C_type$zipimport.zipimporter$get_filename" +ext_rettype(#10876, #10024) +#10877 = @"C_type$zipimport.zipimporter$is_package" +ext_rettype(#10877, #10058) +#10878 = @"C_type$unicodedata.UCD$decimal" +ext_rettype(#10878, #10005) +#10879 = @"C_type$unicodedata.UCD$digit" +ext_rettype(#10879, #10005) +#10880 = @"C_type$unicodedata.UCD$numeric" +ext_rettype(#10880, #10038) +#10881 = @"C_type$unicodedata.UCD$category" +ext_rettype(#10881, #10024) +#10882 = @"C_type$unicodedata.UCD$bidirectional" +ext_rettype(#10882, #10024) +#10883 = @"C_type$unicodedata.UCD$combining" +ext_rettype(#10883, #10005) +#10884 = @"C_type$unicodedata.UCD$mirrored" +ext_rettype(#10884, #10005) +#10885 = @"C_type$unicodedata.UCD$east_asian_width" +ext_rettype(#10885, #10024) +#10886 = @"C_type$unicodedata.UCD$decomposition" +ext_rettype(#10886, #10024) +#10887 = @"C_type$unicodedata.UCD$name" +ext_rettype(#10887, #10024) +#10888 = @"C_type$unicodedata.UCD$lookup" +ext_rettype(#10888, #10218) +#10889 = @"C_type$xxsubtype.spamlist$getstate" +ext_rettype(#10889, #10005) +#10890 = @"C_type$xxsubtype.spamlist$setstate" +ext_rettype(#10890, #10003) +#10891 = @"C_type$xxsubtype.spamlist$classmeth" +ext_rettype(#10891, #10001) +#10892 = @"C_type$xxsubtype.spamlist$staticmeth" +ext_rettype(#10892, #10001) +#10893 = @"C_type$xxsubtype.spamdict$getstate" +ext_rettype(#10893, #10005) +#10894 = @"C_type$xxsubtype.spamdict$setstate" +ext_rettype(#10894, #10003) +#10895 = @"C_type$_hashlib.HASH$update" +ext_rettype(#10895, #10003) +#10896 = @"C_type$_hashlib.HASH$digest" +ext_rettype(#10896, #10024) +#10897 = @"C_type$_hashlib.HASH$hexdigest" +ext_rettype(#10897, #10024) +#10898 = @"C_type$_hashlib.HASH$copy" +ext_rettype(#10898, #10370) +#10899 = @"C_type$zlib.Compress$flush" +ext_rettype(#10899, #10024) +#10900 = @"C_type$_random.Random$random" +ext_rettype(#10900, #10038) +#10901 = @"C_type$_random.Random$seed" +ext_rettype(#10901, #10003) +#10902 = @"C_type$_random.Random$getstate" +ext_rettype(#10902, #10001) +#10903 = @"C_type$_random.Random$setstate" +ext_rettype(#10903, #10003) +#10904 = @"C_type$_random.Random$jumpahead" +ext_rettype(#10904, #10003) +#10905 = @"C_type$_random.Random$getrandbits" +ext_rettype(#10905, #10005) +#10906 = @"C_type$thread.lock$acquire_lock" +ext_rettype(#10906, #10058) +#10907 = @"C_type$thread.lock$acquire" +ext_rettype(#10907, #10058) +#10908 = @"C_type$thread.lock$release_lock" +ext_rettype(#10908, #10003) +#10909 = @"C_type$thread.lock$release" +ext_rettype(#10909, #10003) +#10910 = @"C_type$thread.lock$locked_lock" +ext_rettype(#10910, #10058) +#10911 = @"C_type$thread.lock$locked" +ext_rettype(#10911, #10058) +#10912 = @"C_type$thread.lock$__enter__" +ext_rettype(#10912, #10058) +#10913 = @"C_type$thread.lock$__exit__" +ext_rettype(#10913, #10003) +#10914 = @"C_type$bz2.BZ2File$readline" +ext_rettype(#10914, #10024) +#10915 = @"C_type$bz2.BZ2File$readlines" +ext_rettype(#10915, #10021) +#10916 = @"C_type$bz2.BZ2File$write" +ext_rettype(#10916, #10003) +#10917 = @"C_type$bz2.BZ2File$writelines" +ext_rettype(#10917, #10003) +#10918 = @"C_type$bz2.BZ2File$seek" +ext_rettype(#10918, #10003) +#10919 = @"C_type$bz2.BZ2File$tell" +ext_rettype(#10919, #10005) +#10920 = @"C_type$bz2.BZ2File$close" +ext_rettype(#10920, #10003) +#10921 = @"C_type$bz2.BZ2File$__exit__" +ext_rettype(#10921, #10003) +#10922 = @"C_type$bz2.BZ2Compressor$compress" +ext_rettype(#10922, #10024) +#10923 = @"C_type$select.poll$register" +ext_rettype(#10923, #10003) +#10924 = @"C_type$select.poll$modify" +ext_rettype(#10924, #10003) +#10925 = @"C_type$select.poll$unregister" +ext_rettype(#10925, #10003) +#10926 = @"C_type$select.poll$poll" +ext_rettype(#10926, #10021) +#10927 = @"C_type$select.epoll$close" +ext_rettype(#10927, #10003) +#10928 = @"C_type$select.epoll$fileno" +ext_rettype(#10928, #10005) +#10929 = @"C_type$select.epoll$modify" +ext_rettype(#10929, #10003) +#10930 = @"C_type$select.epoll$register" +ext_rettype(#10930, #10003) +#10931 = @"C_type$select.epoll$unregister" +ext_rettype(#10931, #10003) +#10932 = @"C_type$select.epoll$poll" +ext_rettype(#10932, #10021) +#10933 = @"C_type$_io.BytesIO$readable" +ext_rettype(#10933, #10058) +#10934 = @"C_type$_io.BytesIO$seekable" +ext_rettype(#10934, #10058) +#10935 = @"C_type$_io.BytesIO$writable" +ext_rettype(#10935, #10058) +#10936 = @"C_type$_io.BytesIO$close" +ext_rettype(#10936, #10003) +#10937 = @"C_type$_io.BytesIO$flush" +ext_rettype(#10937, #10003) +#10938 = @"C_type$_io.BytesIO$isatty" +ext_rettype(#10938, #10058) +#10939 = @"C_type$_io.BytesIO$tell" +ext_rettype(#10939, #10005) +#10940 = @"C_type$_io.BytesIO$write" +ext_rettype(#10940, #10005) +#10941 = @"C_type$_io.BytesIO$writelines" +ext_rettype(#10941, #10003) +#10942 = @"C_type$_io.BytesIO$read1" +ext_rettype(#10942, #10024) +#10943 = @"C_type$_io.BytesIO$readinto" +ext_rettype(#10943, #10005) +#10944 = @"C_type$_io.BytesIO$readline" +ext_rettype(#10944, #10024) +#10945 = @"C_type$_io.BytesIO$readlines" +ext_rettype(#10945, #10021) +#10946 = @"C_type$_io.BytesIO$read" +ext_rettype(#10946, #10024) +#10947 = @"C_type$_io.BytesIO$getvalue" +ext_rettype(#10947, #10024) +#10948 = @"C_type$_io.BytesIO$seek" +ext_rettype(#10948, #10005) +#10949 = @"C_type$_io.BytesIO$truncate" +ext_rettype(#10949, #10005) +#10950 = @"C_type$_io.BytesIO$__getstate__" +ext_rettype(#10950, #10001) +#10951 = @"C_type$_io.BytesIO$__setstate__" +ext_rettype(#10951, #10003) +#10952 = @"C_type$_io.BytesIO$__sizeof__" +ext_rettype(#10952, #10005) +#10953 = @"C_type$_io._BufferedIOBase$readinto" +ext_rettype(#10953, #10005) +#10954 = @"C_type$_io.BufferedReader$close" +ext_rettype(#10954, #10003) +#10955 = @"C_type$_io.BufferedReader$read" +ext_rettype(#10955, #10024) +ext_rettype(#10955, #10218) +ext_rettype(#10955, #10003) +#10956 = @"C_type$_io.BufferedReader$peek" +ext_rettype(#10956, #10024) +ext_rettype(#10956, #10003) +#10957 = @"C_type$_io.BufferedReader$read1" +ext_rettype(#10957, #10024) +ext_rettype(#10957, #10003) +#10958 = @"C_type$_io.BufferedReader$readline" +ext_rettype(#10958, #10024) +ext_rettype(#10958, #10218) +#10959 = @"C_type$_io.BufferedReader$seek" +ext_rettype(#10959, #10005) +ext_rettype(#10959, #10003) +#10960 = @"C_type$_io.BufferedReader$tell" +ext_rettype(#10960, #10005) +#10961 = @"C_type$_io.BufferedReader$truncate" +ext_rettype(#10961, #10003) +#10962 = @"C_type$_io.BufferedReader$__sizeof__" +ext_rettype(#10962, #10005) +#10963 = @"C_type$_io.BufferedRandom$close" +ext_rettype(#10963, #10003) +#10964 = @"C_type$_io.BufferedRandom$flush" +ext_rettype(#10964, #10003) +#10965 = @"C_type$_io.BufferedRandom$seek" +ext_rettype(#10965, #10005) +ext_rettype(#10965, #10003) +#10966 = @"C_type$_io.BufferedRandom$tell" +ext_rettype(#10966, #10005) +#10967 = @"C_type$_io.BufferedRandom$truncate" +ext_rettype(#10967, #10003) +#10968 = @"C_type$_io.BufferedRandom$read" +ext_rettype(#10968, #10024) +ext_rettype(#10968, #10218) +ext_rettype(#10968, #10003) +#10969 = @"C_type$_io.BufferedRandom$read1" +ext_rettype(#10969, #10024) +ext_rettype(#10969, #10003) +#10970 = @"C_type$_io.BufferedRandom$readinto" +ext_rettype(#10970, #10005) +#10971 = @"C_type$_io.BufferedRandom$readline" +ext_rettype(#10971, #10024) +ext_rettype(#10971, #10218) +#10972 = @"C_type$_io.BufferedRandom$peek" +ext_rettype(#10972, #10024) +ext_rettype(#10972, #10003) +#10973 = @"C_type$_io.BufferedRandom$write" +ext_rettype(#10973, #10005) +ext_rettype(#10973, #10003) +#10974 = @"C_type$_io.BufferedRandom$__sizeof__" +ext_rettype(#10974, #10005) +#10975 = @"C_type$_io.BufferedWriter$close" +ext_rettype(#10975, #10003) +#10976 = @"C_type$_io.BufferedWriter$write" +ext_rettype(#10976, #10005) +ext_rettype(#10976, #10003) +#10977 = @"C_type$_io.BufferedWriter$truncate" +ext_rettype(#10977, #10003) +#10978 = @"C_type$_io.BufferedWriter$flush" +ext_rettype(#10978, #10003) +#10979 = @"C_type$_io.BufferedWriter$seek" +ext_rettype(#10979, #10005) +ext_rettype(#10979, #10003) +#10980 = @"C_type$_io.BufferedWriter$tell" +ext_rettype(#10980, #10005) +#10981 = @"C_type$_io.BufferedWriter$__sizeof__" +ext_rettype(#10981, #10005) +#10982 = @"C_type$_io._IOBase$flush" +ext_rettype(#10982, #10003) +#10983 = @"C_type$_io._IOBase$close" +ext_rettype(#10983, #10003) +#10984 = @"C_type$_io._IOBase$seekable" +ext_rettype(#10984, #10058) +#10985 = @"C_type$_io._IOBase$readable" +ext_rettype(#10985, #10058) +#10986 = @"C_type$_io._IOBase$writable" +ext_rettype(#10986, #10058) +#10987 = @"C_type$_io._IOBase$_checkClosed" +ext_rettype(#10987, #10003) +#10988 = @"C_type$_io._IOBase$isatty" +ext_rettype(#10988, #10058) +#10989 = @"C_type$_io._IOBase$readline" +ext_rettype(#10989, #10024) +#10990 = @"C_type$_io._IOBase$readlines" +ext_rettype(#10990, #10021) +#10991 = @"C_type$_io._IOBase$writelines" +ext_rettype(#10991, #10003) +#10992 = @"C_type$_io._RawIOBase$read" +ext_rettype(#10992, #10024) +#10993 = @"C_type$_io._RawIOBase$readall" +ext_rettype(#10993, #10024) +ext_rettype(#10993, #10218) +#10994 = @"C_type$_io.StringIO$close" +ext_rettype(#10994, #10003) +#10995 = @"C_type$_io.StringIO$getvalue" +ext_rettype(#10995, #10218) +#10996 = @"C_type$_io.StringIO$read" +ext_rettype(#10996, #10218) +#10997 = @"C_type$_io.StringIO$readline" +ext_rettype(#10997, #10218) +#10998 = @"C_type$_io.StringIO$tell" +ext_rettype(#10998, #10005) +#10999 = @"C_type$_io.StringIO$truncate" +ext_rettype(#10999, #10005) +#11000 = @"C_type$_io.StringIO$seek" +ext_rettype(#11000, #10005) +#11001 = @"C_type$_io.StringIO$write" +ext_rettype(#11001, #10005) +#11002 = @"C_type$_io.StringIO$seekable" +ext_rettype(#11002, #10058) +#11003 = @"C_type$_io.StringIO$readable" +ext_rettype(#11003, #10058) +#11004 = @"C_type$_io.StringIO$writable" +ext_rettype(#11004, #10058) +#11005 = @"C_type$_io.StringIO$__getstate__" +ext_rettype(#11005, #10001) +#11006 = @"C_type$_io.StringIO$__setstate__" +ext_rettype(#11006, #10003) +#11007 = @"C_type$_io.FileIO$read" +ext_rettype(#11007, #10003) +#11008 = @"C_type$_io.FileIO$readall" +ext_rettype(#11008, #10003) +#11009 = @"C_type$_io.FileIO$readinto" +ext_rettype(#11009, #10005) +ext_rettype(#11009, #10003) +#11010 = @"C_type$_io.FileIO$write" +ext_rettype(#11010, #10005) +ext_rettype(#11010, #10003) +#11011 = @"C_type$_io.FileIO$seek" +ext_rettype(#11011, #10005) +#11012 = @"C_type$_io.FileIO$tell" +ext_rettype(#11012, #10005) +#11013 = @"C_type$_io.FileIO$close" +ext_rettype(#11013, #10003) +#11014 = @"C_type$_io.FileIO$seekable" +ext_rettype(#11014, #10058) +#11015 = @"C_type$_io.FileIO$readable" +ext_rettype(#11015, #10058) +#11016 = @"C_type$_io.FileIO$writable" +ext_rettype(#11016, #10058) +#11017 = @"C_type$_io.FileIO$fileno" +ext_rettype(#11017, #10005) +#11018 = @"C_type$_io.FileIO$isatty" +ext_rettype(#11018, #10058) +#11019 = @"C_type$_io.IncrementalNewlineDecoder$getstate" +ext_rettype(#11019, #10001) +#11020 = @"C_type$_io.IncrementalNewlineDecoder$setstate" +ext_rettype(#11020, #10003) +#11021 = @"C_type$_io.IncrementalNewlineDecoder$reset" +ext_rettype(#11021, #10003) +#11022 = @"C_type$_io.TextIOWrapper$write" +ext_rettype(#11022, #10005) +#11023 = @"C_type$_io.TextIOWrapper$read" +ext_rettype(#11023, #10218) +#11024 = @"C_type$_io.TextIOWrapper$close" +ext_rettype(#11024, #10003) +#11025 = @"C_type$_io.TextIOWrapper$tell" +ext_rettype(#11025, #10005) +#11026 = @"C_type$functools.partial$__reduce__" +ext_rettype(#11026, #10001) +#11027 = @"C_type$functools.partial$__setstate__" +ext_rettype(#11027, #10003) +#11028 = @"C_type$pyexpat.xmlparser$Parse" +ext_rettype(#11028, #10005) +#11029 = @"C_type$pyexpat.xmlparser$ParseFile" +ext_rettype(#11029, #10005) +#11030 = @"C_type$pyexpat.xmlparser$SetBase" +ext_rettype(#11030, #10003) +#11031 = @"C_type$pyexpat.xmlparser$GetBase" +ext_rettype(#11031, #10024) +#11032 = @"C_type$pyexpat.xmlparser$ExternalEntityParserCreate" +ext_rettype(#11032, #10511) +#11033 = @"C_type$pyexpat.xmlparser$SetParamEntityParsing" +ext_rettype(#11033, #10005) +#11034 = @"C_type$pyexpat.xmlparser$GetInputContext" +ext_rettype(#11034, #10024) +ext_rettype(#11034, #10003) +#11035 = @"C_type$pyexpat.xmlparser$UseForeignDTD" +ext_rettype(#11035, #10003) +#11036 = @"C_type$ossaudiodev.oss_audio_device$write" +ext_rettype(#11036, #10005) +#11037 = @"C_type$ossaudiodev.oss_audio_device$writeall" +ext_rettype(#11037, #10003) +#11038 = @"C_type$ossaudiodev.oss_audio_device$close" +ext_rettype(#11038, #10003) +#11039 = @"C_type$ossaudiodev.oss_audio_device$fileno" +ext_rettype(#11039, #10005) +#11040 = @"C_type$ossaudiodev.oss_audio_device$nonblock" +ext_rettype(#11040, #10003) +#11041 = @"C_type$ossaudiodev.oss_audio_device$setfmt" +ext_rettype(#11041, #10005) +#11042 = @"C_type$ossaudiodev.oss_audio_device$getfmts" +ext_rettype(#11042, #10005) +#11043 = @"C_type$ossaudiodev.oss_audio_device$channels" +ext_rettype(#11043, #10005) +#11044 = @"C_type$ossaudiodev.oss_audio_device$speed" +ext_rettype(#11044, #10005) +#11045 = @"C_type$ossaudiodev.oss_audio_device$sync" +ext_rettype(#11045, #10003) +#11046 = @"C_type$ossaudiodev.oss_audio_device$reset" +ext_rettype(#11046, #10003) +#11047 = @"C_type$ossaudiodev.oss_audio_device$post" +ext_rettype(#11047, #10003) +#11048 = @"C_type$ossaudiodev.oss_audio_device$setparameters" +ext_rettype(#11048, #10001) +#11049 = @"C_type$ossaudiodev.oss_audio_device$bufsize" +ext_rettype(#11049, #10005) +#11050 = @"C_type$ossaudiodev.oss_audio_device$obufcount" +ext_rettype(#11050, #10005) +#11051 = @"C_type$ossaudiodev.oss_audio_device$obuffree" +ext_rettype(#11051, #10005) +#11052 = @"C_type$ossaudiodev.oss_audio_device$getptr" +ext_rettype(#11052, #10001) +#11053 = @"C_type$ossaudiodev.oss_audio_device$flush" +ext_rettype(#11053, #10003) +#11054 = @"C_type$ossaudiodev.oss_mixer_device$close" +ext_rettype(#11054, #10003) +#11055 = @"C_type$ossaudiodev.oss_mixer_device$fileno" +ext_rettype(#11055, #10005) +#11056 = @"C_type$ossaudiodev.oss_mixer_device$controls" +ext_rettype(#11056, #10005) +#11057 = @"C_type$ossaudiodev.oss_mixer_device$stereocontrols" +ext_rettype(#11057, #10005) +#11058 = @"C_type$ossaudiodev.oss_mixer_device$reccontrols" +ext_rettype(#11058, #10005) +#11059 = @"C_type$ossaudiodev.oss_mixer_device$get" +ext_rettype(#11059, #10001) +#11060 = @"C_type$ossaudiodev.oss_mixer_device$set" +ext_rettype(#11060, #10001) +#11061 = @"C_type$ossaudiodev.oss_mixer_device$get_recsrc" +ext_rettype(#11061, #10005) +#11062 = @"C_type$ossaudiodev.oss_mixer_device$set_recsrc" +ext_rettype(#11062, #10005) +#11063 = @"C_type$_ctypes._CData$__reduce__" +ext_rettype(#11063, #10001) +#11064 = @"C_type$_ctypes._CData$__setstate__" +ext_rettype(#11064, #10003) +#11065 = @"C_type$_ctypes.PyCPointerType$from_param" +ext_rettype(#11065, #10557) +#11066 = @"C_type$_ctypes.PyCPointerType$set_type" +ext_rettype(#11066, #10003) +#11067 = @"C_type$_ctypes.PyCSimpleType$from_param" +ext_rettype(#11067, #10557) +#11068 = @"C_type$_lsprof.Profiler$enable" +ext_rettype(#11068, #10003) +#11069 = @"C_type$_lsprof.Profiler$disable" +ext_rettype(#11069, #10003) +#11070 = @"C_type$_lsprof.Profiler$clear" +ext_rettype(#11070, #10003) +#11071 = @"C_type$Element$2clear" +ext_rettype(#11071, #10003) +#11072 = @"C_type$Element$2set" +ext_rettype(#11072, #10003) +#11073 = @"C_type$Element$2find" +ext_rettype(#11073, #10003) +#11074 = @"C_type$Element$2findtext" +ext_rettype(#11074, #10024) +#11075 = @"C_type$Element$2findall" +ext_rettype(#11075, #10021) +#11076 = @"C_type$Element$2append" +ext_rettype(#11076, #10003) +#11077 = @"C_type$Element$2extend" +ext_rettype(#11077, #10003) +#11078 = @"C_type$Element$2insert" +ext_rettype(#11078, #10003) +#11079 = @"C_type$Element$2remove" +ext_rettype(#11079, #10003) +#11080 = @"C_type$Element$2getchildren" +ext_rettype(#11080, #10021) +#11081 = @"C_type$Element$2items" +ext_rettype(#11081, #10021) +#11082 = @"C_type$Element$2keys" +ext_rettype(#11082, #10021) +#11083 = @"C_type$Element$2makeelement" +ext_rettype(#11083, #10575) +#11084 = @"C_type$Element$2__copy__" +ext_rettype(#11084, #10575) +#11085 = @"C_type$Element$2__deepcopy__" +ext_rettype(#11085, #10575) +#11086 = @"C_type$Element$!__reduce__" +ext_rettype(#11086, #10001) +#11087 = @"C_type$TreeBuilder$2data" +ext_rettype(#11087, #10003) +#11088 = @"C_type$TreeBuilder$2start" +ext_rettype(#11088, #10575) +#11089 = @"C_type$TreeBuilder$2xml" +ext_rettype(#11089, #10003) +#11090 = @"C_type$TreeBuilder$2close" +ext_rettype(#11090, #10003) +#11091 = @"C_type$XMLParser$2feed" +ext_rettype(#11091, #10003) +#11092 = @"C_type$XMLParser$2close" +ext_rettype(#11092, #10003) +#11093 = @"C_type$XMLParser$2_parse" +ext_rettype(#11093, #10003) +#11094 = @"C_type$XMLParser$2_setevents" +ext_rettype(#11094, #10003) +#11095 = @"C_type$datetime.timedelta$__reduce__" +ext_rettype(#11095, #10001) +#11096 = @"C_type$datetime.time$__format__" +ext_rettype(#11096, #10024) +ext_rettype(#11096, #10218) +#11097 = @"C_type$datetime.time$utcoffset" +ext_rettype(#11097, #10003) +#11098 = @"C_type$datetime.time$tzname" +ext_rettype(#11098, #10003) +#11099 = @"C_type$datetime.time$dst" +ext_rettype(#11099, #10003) +#11100 = @"C_type$datetime.time$__reduce__" +ext_rettype(#11100, #10001) +#11101 = @"C_type$datetime.tzinfo$__reduce__" +ext_rettype(#11101, #10001) +#11102 = @"C_type$datetime.datetime$ctime" +ext_rettype(#11102, #10024) +#11103 = @"C_type$datetime.datetime$utcoffset" +ext_rettype(#11103, #10003) +#11104 = @"C_type$datetime.datetime$tzname" +ext_rettype(#11104, #10003) +#11105 = @"C_type$datetime.datetime$dst" +ext_rettype(#11105, #10003) +#11106 = @"C_type$datetime.datetime$__reduce__" +ext_rettype(#11106, #10001) +#11107 = @"C_type$datetime.date$ctime" +ext_rettype(#11107, #10024) +#11108 = @"C_type$datetime.date$__format__" +ext_rettype(#11108, #10024) +ext_rettype(#11108, #10218) +#11109 = @"C_type$datetime.date$isocalendar" +ext_rettype(#11109, #10001) +#11110 = @"C_type$datetime.date$isoformat" +ext_rettype(#11110, #10024) +#11111 = @"C_type$datetime.date$isoweekday" +ext_rettype(#11111, #10005) +#11112 = @"C_type$datetime.date$toordinal" +ext_rettype(#11112, #10005) +#11113 = @"C_type$datetime.date$weekday" +ext_rettype(#11113, #10005) +#11114 = @"C_type$datetime.date$__reduce__" +ext_rettype(#11114, #10001) +#11115 = @"C_type$_ast.AST$__reduce__" +ext_rettype(#11115, #10001) +#11116 = @"C_type$imp.NullImporter$find_module" +ext_rettype(#11116, #10003) +#11117 = @"C_type$rangeiterator$2__length_hint__" +ext_rettype(#11117, #10005) +#11118 = @"C_type$xrange$2__reversed__" +#11119 = @"C_type$rangeiterator" +ext_rettype(#11118, #11119) +#11120 = @"C_type$xrange$2__reduce__" +ext_rettype(#11120, #10001) +#11121 = @"C_type$reversed$2__length_hint__" +ext_rettype(#11121, #10005) +#11122 = @"C_type$str$2join" +ext_rettype(#11122, #10024) +ext_rettype(#11122, #10218) +#11123 = @"C_type$str$2split" +ext_rettype(#11123, #10021) +#11124 = @"C_type$str$2rsplit" +ext_rettype(#11124, #10021) +#11125 = @"C_type$str$2lower" +ext_rettype(#11125, #10024) +#11126 = @"C_type$str$2upper" +ext_rettype(#11126, #10024) +#11127 = @"C_type$str$2islower" +ext_rettype(#11127, #10058) +#11128 = @"C_type$str$2isupper" +ext_rettype(#11128, #10058) +#11129 = @"C_type$str$2isspace" +ext_rettype(#11129, #10058) +#11130 = @"C_type$str$2isdigit" +ext_rettype(#11130, #10058) +#11131 = @"C_type$str$2istitle" +ext_rettype(#11131, #10058) +#11132 = @"C_type$str$2isalpha" +ext_rettype(#11132, #10058) +#11133 = @"C_type$str$2isalnum" +ext_rettype(#11133, #10058) +#11134 = @"C_type$str$2capitalize" +ext_rettype(#11134, #10024) +#11135 = @"C_type$str$2count" +ext_rettype(#11135, #10005) +#11136 = @"C_type$str$2endswith" +ext_rettype(#11136, #10058) +#11137 = @"C_type$str$2partition" +ext_rettype(#11137, #10001) +#11138 = @"C_type$str$2find" +ext_rettype(#11138, #10005) +#11139 = @"C_type$str$2index" +ext_rettype(#11139, #10005) +#11140 = @"C_type$str$2lstrip" +ext_rettype(#11140, #10024) +ext_rettype(#11140, #10218) +#11141 = @"C_type$str$2replace" +ext_rettype(#11141, #10024) +ext_rettype(#11141, #10218) +#11142 = @"C_type$str$2rfind" +ext_rettype(#11142, #10005) +#11143 = @"C_type$str$2rindex" +ext_rettype(#11143, #10005) +#11144 = @"C_type$str$2rstrip" +ext_rettype(#11144, #10024) +ext_rettype(#11144, #10218) +#11145 = @"C_type$str$2rpartition" +ext_rettype(#11145, #10001) +#11146 = @"C_type$str$2startswith" +ext_rettype(#11146, #10058) +#11147 = @"C_type$str$2strip" +ext_rettype(#11147, #10024) +ext_rettype(#11147, #10218) +#11148 = @"C_type$str$2swapcase" +ext_rettype(#11148, #10024) +#11149 = @"C_type$str$2translate" +ext_rettype(#11149, #10024) +#11150 = @"C_type$str$2title" +ext_rettype(#11150, #10024) +#11151 = @"C_type$str$2ljust" +ext_rettype(#11151, #10024) +#11152 = @"C_type$str$2rjust" +ext_rettype(#11152, #10024) +#11153 = @"C_type$str$2center" +ext_rettype(#11153, #10024) +#11154 = @"C_type$str$2zfill" +ext_rettype(#11154, #10024) +#11155 = @"C_type$str$2__format__" +ext_rettype(#11155, #10024) +ext_rettype(#11155, #10218) +#11156 = @"C_type$str$2_formatter_field_name_split" +ext_rettype(#11156, #10001) +#11157 = @"C_type$str$2_formatter_parser" +#11158 = @"C_type$formatteriterator" +ext_rettype(#11157, #11158) +#11159 = @"C_type$str$2expandtabs" +ext_rettype(#11159, #10024) +#11160 = @"C_type$str$2splitlines" +ext_rettype(#11160, #10021) +#11161 = @"C_type$str$2__sizeof__" +ext_rettype(#11161, #10005) +#11162 = @"C_type$str$2__getnewargs__" +ext_rettype(#11162, #10001) +#11163 = @"C_type$frame$2__sizeof__" +ext_rettype(#11163, #10005) +#11164 = @"C_type$exceptions.BaseException$__reduce__" +ext_rettype(#11164, #10001) +#11165 = @"C_type$exceptions.BaseException$__setstate__" +ext_rettype(#11165, #10003) +#11166 = @"C_type$exceptions.BaseException$__unicode__" +ext_rettype(#11166, #10024) +ext_rettype(#11166, #10218) +#11167 = @"C_type$exceptions.EnvironmentError$__reduce__" +ext_rettype(#11167, #10001) +#11168 = @"C_type$file$2readline" +ext_rettype(#11168, #10024) +#11169 = @"C_type$file$2write" +ext_rettype(#11169, #10003) +#11170 = @"C_type$file$2fileno" +ext_rettype(#11170, #10005) +#11171 = @"C_type$file$2seek" +ext_rettype(#11171, #10003) +#11172 = @"C_type$file$2truncate" +ext_rettype(#11172, #10003) +#11173 = @"C_type$file$2tell" +ext_rettype(#11173, #10005) +#11174 = @"C_type$file$2readinto" +ext_rettype(#11174, #10005) +#11175 = @"C_type$file$2readlines" +ext_rettype(#11175, #10021) +#11176 = @"C_type$file$2xreadlines" +ext_rettype(#11176, #10250) +#11177 = @"C_type$file$2writelines" +ext_rettype(#11177, #10003) +#11178 = @"C_type$file$2flush" +ext_rettype(#11178, #10003) +#11179 = @"C_type$file$2close" +ext_rettype(#11179, #10005) +ext_rettype(#11179, #10003) +#11180 = @"C_type$file$2isatty" +ext_rettype(#11180, #10058) +#11181 = @"C_type$file$2__enter__" +ext_rettype(#11181, #10250) +#11182 = @"C_type$file$2__exit__" +ext_rettype(#11182, #10003) +#11183 = @"C_type$int$2conjugate" +ext_rettype(#11183, #10005) +#11184 = @"C_type$int$2bit_length" +ext_rettype(#11184, #10005) +#11185 = @"C_type$int$2__trunc__" +ext_rettype(#11185, #10005) +#11186 = @"C_type$int$2__getnewargs__" +ext_rettype(#11186, #10001) +#11187 = @"C_type$int$2__format__" +ext_rettype(#11187, #10024) +#11188 = @"C_type$listiterator$2__length_hint__" +ext_rettype(#11188, #10005) +#11189 = @"C_type$listreverseiterator$2__length_hint__" +ext_rettype(#11189, #10005) +#11190 = @"C_type$list$2__getitem__" +ext_rettype(#11190, #10021) +#11191 = @"C_type$list$2__reversed__" +#11192 = @"C_type$listreverseiterator" +ext_rettype(#11191, #11192) +#11193 = @"C_type$list$2__sizeof__" +ext_rettype(#11193, #10005) +#11194 = @"C_type$list$2append" +ext_rettype(#11194, #10003) +#11195 = @"C_type$list$2insert" +ext_rettype(#11195, #10003) +#11196 = @"C_type$list$2extend" +ext_rettype(#11196, #10003) +#11197 = @"C_type$list$2remove" +ext_rettype(#11197, #10003) +#11198 = @"C_type$list$2index" +ext_rettype(#11198, #10005) +#11199 = @"C_type$list$2count" +ext_rettype(#11199, #10005) +#11200 = @"C_type$list$2reverse" +ext_rettype(#11200, #10003) +#11201 = @"C_type$list$2sort" +ext_rettype(#11201, #10003) +#11202 = @"C_type$slice$22indices" +ext_rettype(#11202, #10001) +#11203 = @"C_type$slice$2__reduce__" +ext_rettype(#11203, #10001) +#11204 = @"C_type$dictionary-keyiterator$__length_hint__" +ext_rettype(#11204, #10005) +#11205 = @"C_type$dictionary-valueiterator$__length_hint__" +ext_rettype(#11205, #10005) +#11206 = @"C_type$dictionary-itemiterator$__length_hint__" +ext_rettype(#11206, #10005) +#11207 = @"C_type$dict$2__contains__" +ext_rettype(#11207, #10058) +#11208 = @"C_type$dict$2__sizeof__" +ext_rettype(#11208, #10005) +#11209 = @"C_type$dict$2has_key" +ext_rettype(#11209, #10058) +#11210 = @"C_type$dict$2popitem" +ext_rettype(#11210, #10001) +#11211 = @"C_type$dict$2keys" +ext_rettype(#11211, #10021) +#11212 = @"C_type$dict$2items" +ext_rettype(#11212, #10021) +#11213 = @"C_type$dict$2values" +ext_rettype(#11213, #10021) +#11214 = @"C_type$dict$2update" +ext_rettype(#11214, #10003) +#11215 = @"C_type$dict$2clear" +ext_rettype(#11215, #10003) +#11216 = @"C_type$dict$2copy" +ext_rettype(#11216, #10007) +#11217 = @"C_type$long$2conjugate" +ext_rettype(#11217, #10005) +#11218 = @"C_type$long$2bit_length" +ext_rettype(#11218, #10005) +#11219 = @"C_type$long$2__trunc__" +ext_rettype(#11219, #10005) +#11220 = @"C_type$long$2__getnewargs__" +ext_rettype(#11220, #10001) +#11221 = @"C_type$long$2__format__" +ext_rettype(#11221, #10024) +#11222 = @"C_type$long$2__sizeof__" +ext_rettype(#11222, #10005) +#11223 = @"C_type$generator$2close" +ext_rettype(#11223, #10003) +#11224 = @"C_type$complex$2conjugate" +ext_rettype(#11224, #10517) +#11225 = @"C_type$complex$2__getnewargs__" +ext_rettype(#11225, #10001) +#11226 = @"C_type$complex$2__format__" +ext_rettype(#11226, #10024) +#11227 = @"C_type$type$2mro" +ext_rettype(#11227, #10001) +#11228 = @"C_type$type$2__subclasses__" +ext_rettype(#11228, #10021) +#11229 = @"C_type$type$2__instancecheck__" +ext_rettype(#11229, #10058) +#11230 = @"C_type$type$2__subclasscheck__" +ext_rettype(#11230, #10058) +#11231 = @"C_type$object$2__reduce_ex__" +ext_rettype(#11231, #10001) +#11232 = @"C_type$object$2__reduce__" +ext_rettype(#11232, #10001) +#11233 = @"C_type$object$2__format__" +ext_rettype(#11233, #10024) +ext_rettype(#11233, #10218) +#11234 = @"C_type$object$2__sizeof__" +ext_rettype(#11234, #10005) +#11235 = @"C_type$setiterator$2__length_hint__" +ext_rettype(#11235, #10005) +#11236 = @"C_type$frozenset$2__contains__" +ext_rettype(#11236, #10058) +#11237 = @"C_type$frozenset$2copy" +#11238 = @"C_type$set" +ext_rettype(#11237, #11238) +#11239 = @"C_type$frozenset" +ext_rettype(#11237, #11239) +#11240 = @"C_type$frozenset$2difference" +ext_rettype(#11240, #11238) +ext_rettype(#11240, #11239) +#11241 = @"C_type$frozenset$2intersection" +ext_rettype(#11241, #11238) +ext_rettype(#11241, #11239) +#11242 = @"C_type$frozenset$2isdisjoint" +ext_rettype(#11242, #10058) +#11243 = @"C_type$frozenset$2issubset" +ext_rettype(#11243, #10058) +#11244 = @"C_type$frozenset$2issuperset" +ext_rettype(#11244, #10058) +#11245 = @"C_type$frozenset$2__reduce__" +ext_rettype(#11245, #10001) +#11246 = @"C_type$frozenset$2__sizeof__" +ext_rettype(#11246, #10005) +#11247 = @"C_type$frozenset$2symmetric_difference" +ext_rettype(#11247, #11238) +ext_rettype(#11247, #11239) +#11248 = @"C_type$frozenset$2union" +ext_rettype(#11248, #11238) +ext_rettype(#11248, #11239) +#11249 = @"C_type$set$2add" +ext_rettype(#11249, #10003) +#11250 = @"C_type$set$2clear" +ext_rettype(#11250, #10003) +#11251 = @"C_type$set$2__contains__" +ext_rettype(#11251, #10058) +#11252 = @"C_type$set$2copy" +ext_rettype(#11252, #11238) +ext_rettype(#11252, #11239) +#11253 = @"C_type$set$2discard" +ext_rettype(#11253, #10003) +#11254 = @"C_type$set$2difference" +ext_rettype(#11254, #11238) +ext_rettype(#11254, #11239) +#11255 = @"C_type$set$2difference_update" +ext_rettype(#11255, #10003) +#11256 = @"C_type$set$2intersection" +ext_rettype(#11256, #11238) +ext_rettype(#11256, #11239) +#11257 = @"C_type$set$2intersection_update" +ext_rettype(#11257, #10003) +#11258 = @"C_type$set$2isdisjoint" +ext_rettype(#11258, #10058) +#11259 = @"C_type$set$2issubset" +ext_rettype(#11259, #10058) +#11260 = @"C_type$set$2issuperset" +ext_rettype(#11260, #10058) +#11261 = @"C_type$set$2__reduce__" +ext_rettype(#11261, #10001) +#11262 = @"C_type$set$2remove" +ext_rettype(#11262, #10003) +#11263 = @"C_type$set$2__sizeof__" +ext_rettype(#11263, #10005) +#11264 = @"C_type$set$2symmetric_difference" +ext_rettype(#11264, #11238) +ext_rettype(#11264, #11239) +#11265 = @"C_type$set$2symmetric_difference_update" +ext_rettype(#11265, #10003) +#11266 = @"C_type$set$2union" +ext_rettype(#11266, #11238) +ext_rettype(#11266, #11239) +#11267 = @"C_type$set$2update" +ext_rettype(#11267, #10003) +#11268 = @"C_type$iterator$2__length_hint__" +ext_rettype(#11268, #10005) +#11269 = @"C_type$float$2conjugate" +ext_rettype(#11269, #10038) +#11270 = @"C_type$float$2__trunc__" +ext_rettype(#11270, #10005) +#11271 = @"C_type$float$2as_integer_ratio" +ext_rettype(#11271, #10001) +#11272 = @"C_type$float$2hex" +ext_rettype(#11272, #10024) +#11273 = @"C_type$float$2is_integer" +ext_rettype(#11273, #10058) +#11274 = @"C_type$float$2__getnewargs__" +ext_rettype(#11274, #10001) +#11275 = @"C_type$float$2__getformat__" +ext_rettype(#11275, #10024) +#11276 = @"C_type$float$2__setformat__" +ext_rettype(#11276, #10003) +#11277 = @"C_type$float$2__format__" +ext_rettype(#11277, #10024) +#11278 = @"C_type$dictproxy$2has_key" +ext_rettype(#11278, #10058) +#11279 = @"C_type$bytearray_iterator$2__length_hint__" +ext_rettype(#11279, #10005) +#11280 = @"C_type$bytearray$2__alloc__" +ext_rettype(#11280, #10005) +#11281 = @"C_type$bytearray$2__reduce__" +ext_rettype(#11281, #10001) +#11282 = @"C_type$bytearray$2__sizeof__" +ext_rettype(#11282, #10005) +#11283 = @"C_type$bytearray$2append" +ext_rettype(#11283, #10003) +#11284 = @"C_type$bytearray$2capitalize" +#11285 = @"C_type$bytearray" +ext_rettype(#11284, #11285) +#11286 = @"C_type$bytearray$2center" +ext_rettype(#11286, #11285) +#11287 = @"C_type$bytearray$2count" +ext_rettype(#11287, #10005) +#11288 = @"C_type$bytearray$2endswith" +ext_rettype(#11288, #10058) +#11289 = @"C_type$bytearray$2expandtabs" +ext_rettype(#11289, #11285) +#11290 = @"C_type$bytearray$2extend" +ext_rettype(#11290, #10003) +#11291 = @"C_type$bytearray$2find" +ext_rettype(#11291, #10005) +#11292 = @"C_type$bytearray$2fromhex" +ext_rettype(#11292, #11285) +#11293 = @"C_type$bytearray$2index" +ext_rettype(#11293, #10005) +#11294 = @"C_type$bytearray$2insert" +ext_rettype(#11294, #10003) +#11295 = @"C_type$bytearray$2isalnum" +ext_rettype(#11295, #10058) +#11296 = @"C_type$bytearray$2isalpha" +ext_rettype(#11296, #10058) +#11297 = @"C_type$bytearray$2isdigit" +ext_rettype(#11297, #10058) +#11298 = @"C_type$bytearray$2islower" +ext_rettype(#11298, #10058) +#11299 = @"C_type$bytearray$2isspace" +ext_rettype(#11299, #10058) +#11300 = @"C_type$bytearray$2istitle" +ext_rettype(#11300, #10058) +#11301 = @"C_type$bytearray$2isupper" +ext_rettype(#11301, #10058) +#11302 = @"C_type$bytearray$2join" +ext_rettype(#11302, #11285) +#11303 = @"C_type$bytearray$2ljust" +ext_rettype(#11303, #11285) +#11304 = @"C_type$bytearray$2lower" +ext_rettype(#11304, #11285) +#11305 = @"C_type$bytearray$2lstrip" +ext_rettype(#11305, #11285) +#11306 = @"C_type$bytearray$2partition" +ext_rettype(#11306, #10001) +#11307 = @"C_type$bytearray$2pop" +ext_rettype(#11307, #10005) +#11308 = @"C_type$bytearray$2remove" +ext_rettype(#11308, #10003) +#11309 = @"C_type$bytearray$2replace" +ext_rettype(#11309, #11285) +#11310 = @"C_type$bytearray$2reverse" +ext_rettype(#11310, #10003) +#11311 = @"C_type$bytearray$2rfind" +ext_rettype(#11311, #10005) +#11312 = @"C_type$bytearray$2rindex" +ext_rettype(#11312, #10005) +#11313 = @"C_type$bytearray$2rjust" +ext_rettype(#11313, #11285) +#11314 = @"C_type$bytearray$2rpartition" +ext_rettype(#11314, #10001) +#11315 = @"C_type$bytearray$2rsplit" +ext_rettype(#11315, #10021) +#11316 = @"C_type$bytearray$2rstrip" +ext_rettype(#11316, #11285) +#11317 = @"C_type$bytearray$2split" +ext_rettype(#11317, #10021) +#11318 = @"C_type$bytearray$2splitlines" +ext_rettype(#11318, #10021) +#11319 = @"C_type$bytearray$2startswith" +ext_rettype(#11319, #10058) +#11320 = @"C_type$bytearray$2strip" +ext_rettype(#11320, #11285) +#11321 = @"C_type$bytearray$2swapcase" +ext_rettype(#11321, #11285) +#11322 = @"C_type$bytearray$2title" +ext_rettype(#11322, #11285) +#11323 = @"C_type$bytearray$2translate" +ext_rettype(#11323, #11285) +#11324 = @"C_type$bytearray$2upper" +ext_rettype(#11324, #11285) +#11325 = @"C_type$bytearray$2zfill" +ext_rettype(#11325, #11285) +#11326 = @"C_type$unicode$2replace" +ext_rettype(#11326, #10218) +#11327 = @"C_type$unicode$2split" +ext_rettype(#11327, #10021) +#11328 = @"C_type$unicode$2rsplit" +ext_rettype(#11328, #10021) +#11329 = @"C_type$unicode$2join" +ext_rettype(#11329, #10218) +#11330 = @"C_type$unicode$2capitalize" +ext_rettype(#11330, #10218) +#11331 = @"C_type$unicode$2title" +ext_rettype(#11331, #10218) +#11332 = @"C_type$unicode$2center" +ext_rettype(#11332, #10218) +#11333 = @"C_type$unicode$2count" +ext_rettype(#11333, #10005) +#11334 = @"C_type$unicode$2expandtabs" +ext_rettype(#11334, #10218) +#11335 = @"C_type$unicode$2find" +ext_rettype(#11335, #10005) +#11336 = @"C_type$unicode$2partition" +ext_rettype(#11336, #10001) +#11337 = @"C_type$unicode$2index" +ext_rettype(#11337, #10005) +#11338 = @"C_type$unicode$2ljust" +ext_rettype(#11338, #10218) +#11339 = @"C_type$unicode$2lower" +ext_rettype(#11339, #10218) +#11340 = @"C_type$unicode$2lstrip" +ext_rettype(#11340, #10218) +#11341 = @"C_type$unicode$2rfind" +ext_rettype(#11341, #10005) +#11342 = @"C_type$unicode$2rindex" +ext_rettype(#11342, #10005) +#11343 = @"C_type$unicode$2rjust" +ext_rettype(#11343, #10218) +#11344 = @"C_type$unicode$2rstrip" +ext_rettype(#11344, #10218) +#11345 = @"C_type$unicode$2rpartition" +ext_rettype(#11345, #10001) +#11346 = @"C_type$unicode$2splitlines" +ext_rettype(#11346, #10021) +#11347 = @"C_type$unicode$2strip" +ext_rettype(#11347, #10218) +#11348 = @"C_type$unicode$2swapcase" +ext_rettype(#11348, #10218) +#11349 = @"C_type$unicode$2upper" +ext_rettype(#11349, #10218) +#11350 = @"C_type$unicode$2startswith" +ext_rettype(#11350, #10058) +#11351 = @"C_type$unicode$2endswith" +ext_rettype(#11351, #10058) +#11352 = @"C_type$unicode$2islower" +ext_rettype(#11352, #10058) +#11353 = @"C_type$unicode$2isupper" +ext_rettype(#11353, #10058) +#11354 = @"C_type$unicode$2istitle" +ext_rettype(#11354, #10058) +#11355 = @"C_type$unicode$2isspace" +ext_rettype(#11355, #10058) +#11356 = @"C_type$unicode$2isdecimal" +ext_rettype(#11356, #10058) +#11357 = @"C_type$unicode$2isdigit" +ext_rettype(#11357, #10058) +#11358 = @"C_type$unicode$2isnumeric" +ext_rettype(#11358, #10058) +#11359 = @"C_type$unicode$2isalpha" +ext_rettype(#11359, #10058) +#11360 = @"C_type$unicode$2isalnum" +ext_rettype(#11360, #10058) +#11361 = @"C_type$unicode$2zfill" +ext_rettype(#11361, #10218) +#11362 = @"C_type$unicode$2__format__" +ext_rettype(#11362, #10024) +ext_rettype(#11362, #10218) +#11363 = @"C_type$unicode$2_formatter_field_name_split" +ext_rettype(#11363, #10001) +#11364 = @"C_type$unicode$2_formatter_parser" +ext_rettype(#11364, #11158) +#11365 = @"C_type$unicode$2__sizeof__" +ext_rettype(#11365, #10005) +#11366 = @"C_type$unicode$2__getnewargs__" +ext_rettype(#11366, #10001) +#11367 = @"C_type$EncodingMap$2size" +ext_rettype(#11367, #10005) +#11368 = @"C_type$memoryview$2tobytes" +ext_rettype(#11368, #10024) +#11369 = @"C_type$memoryview$2tolist" +ext_rettype(#11369, #10021) +#11370 = @"C_type$tupleiterator$2__length_hint__" +ext_rettype(#11370, #10005) +#11371 = @"C_type$tuple$2__getnewargs__" +ext_rettype(#11371, #10001) +#11372 = @"C_type$tuple$2__sizeof__" +ext_rettype(#11372, #10005) +#11373 = @"C_type$tuple$2index" +ext_rettype(#11373, #10005) +#11374 = @"C_type$tuple$2count" +ext_rettype(#11374, #10005) +#11375 = @"C_type$object" +ext_argtype(#10000, 0, #11375) +#11376 = @"C_builtin_function_or_method$_heapq.heappop" +ext_argtype(#11376, 0, #11375) +ext_argtype(#10019, 0, #11375) +ext_argtype(#10020, 0, #10005) +ext_argtype(#10020, 1, #11375) +ext_argtype(#10022, 0, #10005) +ext_argtype(#10022, 1, #11375) +#11377 = @"C_type$buffer" +ext_argtype(#10023, 0, #11377) +ext_argtype(#10023, 1, #10024) +ext_argtype(#10023, 1, #10218) +ext_argtype(#10023, 2, #10024) +ext_argtype(#10023, 2, #10218) +ext_argtype(#10025, 0, #10024) +ext_argtype(#10025, 0, #10218) +ext_argtype(#10025, 1, #10024) +ext_argtype(#10025, 1, #10218) +ext_argtype(#10026, 0, #10024) +ext_argtype(#10026, 0, #10218) +#11378 = @"C_builtin_function_or_method$pwd.getpwuid" +ext_argtype(#11378, 0, #11375) +#11379 = @"C_builtin_function_or_method$pwd.getpwnam" +ext_argtype(#11379, 0, #10024) +ext_argtype(#11379, 0, #10218) +ext_argtype(#10029, 0, #10024) +ext_argtype(#10029, 0, #10218) +ext_argtype(#10029, 1, #10005) +ext_argtype(#10030, 0, #10024) +ext_argtype(#10030, 0, #10218) +ext_argtype(#10030, 1, #10005) +ext_argtype(#10031, 0, #10024) +ext_argtype(#10031, 0, #10218) +ext_argtype(#10031, 1, #10005) +ext_argtype(#10032, 0, #10024) +ext_argtype(#10032, 0, #10218) +ext_argtype(#10032, 1, #10005) +ext_argtype(#10033, 0, #10024) +ext_argtype(#10033, 0, #10218) +ext_argtype(#10033, 1, #10005) +ext_argtype(#10034, 0, #10024) +ext_argtype(#10034, 0, #10218) +ext_argtype(#10034, 1, #10005) +ext_argtype(#10035, 0, #10024) +ext_argtype(#10035, 0, #10218) +ext_argtype(#10035, 1, #10024) +ext_argtype(#10035, 1, #10218) +ext_argtype(#10036, 0, #10024) +ext_argtype(#10036, 0, #10218) +ext_argtype(#10036, 1, #10005) +ext_argtype(#10037, 0, #10024) +ext_argtype(#10037, 0, #10218) +ext_argtype(#10037, 1, #10024) +ext_argtype(#10037, 1, #10218) +ext_argtype(#10039, 0, #10024) +ext_argtype(#10039, 0, #10218) +ext_argtype(#10039, 1, #10005) +ext_argtype(#10040, 0, #10024) +ext_argtype(#10040, 0, #10218) +ext_argtype(#10040, 1, #10005) +ext_argtype(#10040, 2, #10038) +ext_argtype(#10041, 0, #10024) +ext_argtype(#10041, 0, #10218) +ext_argtype(#10041, 1, #10024) +ext_argtype(#10041, 1, #10218) +ext_argtype(#10041, 2, #10005) +ext_argtype(#10042, 0, #10024) +ext_argtype(#10042, 0, #10218) +ext_argtype(#10042, 1, #10005) +ext_argtype(#10042, 2, #10005) +ext_argtype(#10043, 0, #10024) +ext_argtype(#10043, 0, #10218) +ext_argtype(#10043, 1, #10005) +ext_argtype(#10044, 0, #10024) +ext_argtype(#10044, 0, #10218) +ext_argtype(#10044, 1, #10005) +ext_argtype(#10045, 0, #10024) +ext_argtype(#10045, 0, #10218) +ext_argtype(#10045, 1, #10005) +ext_argtype(#10046, 0, #10024) +ext_argtype(#10046, 0, #10218) +ext_argtype(#10046, 1, #10005) +ext_argtype(#10047, 0, #10024) +ext_argtype(#10047, 0, #10218) +ext_argtype(#10047, 1, #10005) +ext_argtype(#10047, 2, #10005) +ext_argtype(#10048, 0, #10024) +ext_argtype(#10048, 0, #10218) +ext_argtype(#10048, 1, #10005) +ext_argtype(#10048, 2, #11375) +ext_argtype(#10049, 0, #10024) +ext_argtype(#10049, 0, #10218) +ext_argtype(#10049, 1, #10005) +ext_argtype(#10049, 2, #11375) +ext_argtype(#10050, 0, #10024) +ext_argtype(#10050, 0, #10218) +ext_argtype(#10050, 1, #10005) +ext_argtype(#10050, 2, #10038) +ext_argtype(#10050, 3, #10038) +ext_argtype(#10051, 0, #10024) +ext_argtype(#10051, 0, #10218) +ext_argtype(#10051, 1, #10005) +ext_argtype(#10051, 2, #10038) +ext_argtype(#10051, 3, #10038) +ext_argtype(#10052, 0, #10024) +ext_argtype(#10052, 0, #10218) +ext_argtype(#10052, 1, #10005) +ext_argtype(#10052, 2, #10005) +ext_argtype(#10053, 0, #10024) +ext_argtype(#10053, 0, #10218) +ext_argtype(#10053, 1, #10005) +ext_argtype(#10054, 0, #10024) +ext_argtype(#10054, 0, #10218) +ext_argtype(#10054, 1, #10005) +ext_argtype(#10054, 2, #10005) +ext_argtype(#10054, 3, #10005) +ext_argtype(#10054, 4, #10005) +ext_argtype(#10054, 5, #11375) +ext_argtype(#10054, 6, #10005) +ext_argtype(#10054, 7, #10005) +#11380 = @"C_builtin_function_or_method$_codecs_jp.getcodec" +ext_argtype(#11380, 0, #11375) +#11381 = @"C_builtin_function_or_method$_codecs_tw.getcodec" +ext_argtype(#11381, 0, #11375) +#11382 = @"C_builtin_function_or_method$_codecs_kr.getcodec" +ext_argtype(#11382, 0, #11375) +#11383 = @"C_builtin_function_or_method$_codecs_cn.getcodec" +ext_argtype(#11383, 0, #11375) +#11384 = @"C_builtin_function_or_method$_codecs_iso2022.getcodec" +ext_argtype(#11384, 0, #11375) +#11385 = @"C_builtin_function_or_method$_codecs_hk.getcodec" +ext_argtype(#11385, 0, #11375) +ext_argtype(#10055, 0, #11375) +ext_argtype(#10057, 0, #11375) +ext_argtype(#10059, 0, #11375) +ext_argtype(#10060, 0, #11375) +ext_argtype(#10061, 0, #11375) +ext_argtype(#10067, 0, #11375) +#11386 = @"C_builtin_function_or_method$operator.index" +ext_argtype(#11386, 0, #11375) +#11387 = @"C_builtin_function_or_method$operator.__index__" +ext_argtype(#11387, 0, #11375) +#11388 = @"C_builtin_function_or_method$operator.neg" +ext_argtype(#11388, 0, #11375) +#11389 = @"C_builtin_function_or_method$operator.__neg__" +ext_argtype(#11389, 0, #11375) +#11390 = @"C_builtin_function_or_method$operator.pos" +ext_argtype(#11390, 0, #11375) +#11391 = @"C_builtin_function_or_method$operator.__pos__" +ext_argtype(#11391, 0, #11375) +#11392 = @"C_builtin_function_or_method$operator.abs" +ext_argtype(#11392, 0, #11375) +#11393 = @"C_builtin_function_or_method$operator.__abs__" +ext_argtype(#11393, 0, #11375) +#11394 = @"C_builtin_function_or_method$operator.inv" +ext_argtype(#11394, 0, #11375) +#11395 = @"C_builtin_function_or_method$operator.__inv__" +ext_argtype(#11395, 0, #11375) +#11396 = @"C_builtin_function_or_method$operator.invert" +ext_argtype(#11396, 0, #11375) +#11397 = @"C_builtin_function_or_method$operator.__invert__" +ext_argtype(#11397, 0, #11375) +ext_argtype(#10068, 0, #11375) +ext_argtype(#10069, 0, #11375) +#11398 = @"C_builtin_function_or_method$operator.repeat" +ext_argtype(#11398, 0, #11375) +ext_argtype(#11398, 1, #10005) +#11399 = @"C_builtin_function_or_method$operator.__repeat__" +ext_argtype(#11399, 0, #11375) +ext_argtype(#11399, 1, #10005) +#11400 = @"C_builtin_function_or_method$operator.irepeat" +ext_argtype(#11400, 0, #11375) +ext_argtype(#11400, 1, #10005) +#11401 = @"C_builtin_function_or_method$operator.__irepeat__" +ext_argtype(#11401, 0, #11375) +ext_argtype(#11401, 1, #10005) +#11402 = @"C_builtin_function_or_method$operator.getslice" +ext_argtype(#11402, 0, #11375) +ext_argtype(#11402, 1, #10005) +ext_argtype(#11402, 2, #10005) +#11403 = @"C_builtin_function_or_method$operator.__getslice__" +ext_argtype(#11403, 0, #11375) +ext_argtype(#11403, 1, #10005) +ext_argtype(#11403, 2, #10005) +ext_argtype(#10074, 0, #11375) +ext_argtype(#10074, 1, #10005) +ext_argtype(#10074, 2, #10005) +ext_argtype(#10074, 3, #11375) +ext_argtype(#10075, 0, #11375) +ext_argtype(#10075, 1, #10005) +ext_argtype(#10075, 2, #10005) +ext_argtype(#10075, 3, #11375) +ext_argtype(#10076, 0, #11375) +ext_argtype(#10076, 1, #10005) +ext_argtype(#10076, 2, #10005) +ext_argtype(#10077, 0, #11375) +ext_argtype(#10077, 1, #10005) +ext_argtype(#10077, 2, #10005) +ext_argtype(#10078, 0, #11375) +ext_argtype(#10078, 1, #11375) +ext_argtype(#10088, 0, #11375) +ext_argtype(#10092, 0, #11375) +ext_argtype(#10093, 0, #10085) +ext_argtype(#10094, 0, #10024) +ext_argtype(#10094, 0, #10218) +ext_argtype(#10095, 0, #10024) +ext_argtype(#10095, 0, #10218) +ext_argtype(#10096, 0, #10024) +ext_argtype(#10096, 0, #10218) +ext_argtype(#10098, 0, #10024) +ext_argtype(#10098, 0, #10218) +ext_argtype(#10098, 1, #10024) +ext_argtype(#10098, 1, #10218) +ext_argtype(#10099, 0, #10005) +ext_argtype(#10099, 1, #10024) +ext_argtype(#10099, 1, #10218) +ext_argtype(#10100, 0, #10024) +ext_argtype(#10100, 0, #10218) +ext_argtype(#10101, 0, #10005) +ext_argtype(#10101, 1, #10005) +ext_argtype(#10101, 2, #10005) +ext_argtype(#10101, 3, #10005) +ext_argtype(#10103, 0, #10005) +ext_argtype(#10103, 1, #10005) +ext_argtype(#10103, 2, #10005) +ext_argtype(#10104, 0, #10005) +ext_argtype(#10105, 0, #11375) +ext_argtype(#10106, 0, #10005) +ext_argtype(#10107, 0, #11375) +ext_argtype(#10108, 0, #10024) +ext_argtype(#10108, 0, #10218) +ext_argtype(#10109, 0, #10024) +ext_argtype(#10109, 0, #10218) +ext_argtype(#10110, 0, #10005) +ext_argtype(#10110, 1, #10024) +ext_argtype(#10110, 1, #10218) +ext_argtype(#10111, 0, #10005) +ext_argtype(#10111, 1, #10024) +ext_argtype(#10111, 1, #10218) +ext_argtype(#10112, 0, #11375) +ext_argtype(#10112, 1, #11375) +ext_argtype(#10112, 2, #10005) +ext_argtype(#10112, 3, #10005) +ext_argtype(#10112, 4, #10005) +ext_argtype(#10112, 5, #10005) +ext_argtype(#10113, 0, #11375) +ext_argtype(#10113, 1, #10005) +ext_argtype(#10115, 0, #11375) +ext_argtype(#10116, 0, #11375) +ext_argtype(#10116, 1, #10005) +ext_argtype(#10117, 0, #11375) +ext_argtype(#10118, 0, #11375) +ext_argtype(#10119, 0, #11375) +ext_argtype(#10120, 0, #11375) +ext_argtype(#10121, 0, #11375) +ext_argtype(#10123, 0, #11375) +ext_argtype(#10124, 0, #11375) +ext_argtype(#10126, 0, #11375) +ext_argtype(#10127, 0, #11375) +ext_argtype(#10128, 0, #11375) +ext_argtype(#10129, 0, #11375) +ext_argtype(#10130, 0, #11375) +ext_argtype(#10131, 0, #11375) +ext_argtype(#10132, 0, #11375) +ext_argtype(#10133, 0, #11375) +ext_argtype(#10134, 0, #11375) +ext_argtype(#10135, 0, #11375) +ext_argtype(#10137, 0, #11375) +ext_argtype(#10138, 0, #11375) +ext_argtype(#10139, 0, #11375) +ext_argtype(#10141, 0, #11375) +ext_argtype(#10142, 0, #11375) +ext_argtype(#10143, 0, #10038) +ext_argtype(#10143, 1, #11375) +ext_argtype(#10144, 0, #11375) +ext_argtype(#10146, 0, #11375) +ext_argtype(#10147, 0, #11375) +ext_argtype(#10148, 0, #11375) +ext_argtype(#10150, 0, #11375) +ext_argtype(#10151, 0, #11375) +ext_argtype(#10152, 0, #11375) +ext_argtype(#10153, 0, #11375) +ext_argtype(#10154, 0, #11375) +ext_argtype(#10155, 0, #11375) +#11404 = @"C_builtin_function_or_method$math.trunc" +ext_argtype(#11404, 0, #11375) +#11405 = @"C_builtin_function_or_method$_symtable.symtable" +ext_argtype(#11405, 0, #10024) +ext_argtype(#11405, 0, #10218) +ext_argtype(#11405, 1, #10024) +ext_argtype(#11405, 1, #10218) +ext_argtype(#11405, 2, #10024) +ext_argtype(#11405, 2, #10218) +ext_argtype(#10156, 0, #10005) +ext_argtype(#10157, 0, #10005) +ext_argtype(#10157, 1, #10038) +ext_argtype(#10157, 2, #10038) +ext_argtype(#10158, 0, #10005) +ext_argtype(#10159, 0, #10005) +ext_argtype(#10159, 1, #11375) +ext_argtype(#10160, 0, #10005) +ext_argtype(#10161, 0, #10005) +ext_argtype(#10162, 0, #10005) +ext_argtype(#10162, 1, #10005) +ext_argtype(#10170, 0, #11375) +#11406 = @"C_builtin_function_or_method$_csv.get_dialect" +ext_argtype(#11406, 0, #11375) +ext_argtype(#10175, 0, #10005) +ext_argtype(#10178, 0, #10005) +ext_argtype(#10178, 1, #10005) +ext_argtype(#10178, 2, #10005) +ext_argtype(#10180, 0, #10005) +ext_argtype(#10182, 0, #11375) +ext_argtype(#10185, 0, #11375) +ext_argtype(#10186, 0, #11375) +ext_argtype(#10186, 1, #10005) +ext_argtype(#10186, 2, #11375) +ext_argtype(#10187, 0, #11375) +ext_argtype(#10187, 1, #10005) +ext_argtype(#10188, 0, #11375) +ext_argtype(#10189, 0, #11375) +ext_argtype(#10189, 1, #10005) +ext_argtype(#10190, 0, #11375) +ext_argtype(#10190, 1, #10005) +#11407 = @"C_builtin_function_or_method$grp.getgrgid" +ext_argtype(#11407, 0, #11375) +#11408 = @"C_builtin_function_or_method$grp.getgrnam" +ext_argtype(#11408, 0, #11375) +ext_argtype(#10194, 0, #10038) +ext_argtype(#10197, 0, #11375) +ext_argtype(#10198, 0, #10024) +ext_argtype(#10198, 0, #10218) +ext_argtype(#10198, 1, #11375) +ext_argtype(#10200, 0, #10024) +ext_argtype(#10200, 0, #10218) +ext_argtype(#10202, 0, #10024) +ext_argtype(#10202, 0, #10218) +ext_argtype(#10202, 1, #10005) +ext_argtype(#10202, 2, #10005) +ext_argtype(#10203, 0, #10024) +ext_argtype(#10203, 0, #10218) +ext_argtype(#10257, 0, #11375) +ext_argtype(#10289, 0, #11375) +ext_argtype(#10290, 0, #11375) +ext_argtype(#10291, 0, #11375) +ext_argtype(#10317, 0, #11375) +ext_argtype(#10322, 0, #10024) +ext_argtype(#10322, 0, #10218) +ext_argtype(#10322, 1, #10024) +ext_argtype(#10322, 1, #10218) +ext_argtype(#10326, 0, #11375) +ext_argtype(#10330, 0, #11375) +ext_argtype(#10331, 0, #11375) +ext_argtype(#10335, 0, #11375) +ext_argtype(#10338, 0, #11375) +ext_argtype(#10339, 0, #11375) +ext_argtype(#10340, 0, #11375) +ext_argtype(#10352, 0, #11375) +ext_argtype(#10352, 1, #11375) +ext_argtype(#10352, 2, #10005) +#11409 = @"C_builtin_function_or_method$cPickle.dumps" +ext_argtype(#11409, 0, #11375) +ext_argtype(#11409, 1, #10005) +#11410 = @"C_builtin_function_or_method$cPickle.load" +ext_argtype(#11410, 0, #11375) +#11411 = @"C_builtin_function_or_method$cPickle.loads" +ext_argtype(#11411, 0, #10024) +ext_argtype(#10355, 0, #11375) +#11412 = @"C_type$unicodedata.UCD" +ext_argtype(#10357, 0, #11412) +ext_argtype(#10357, 1, #10218) +ext_argtype(#10357, 2, #11375) +ext_argtype(#10358, 0, #11412) +ext_argtype(#10358, 1, #10218) +ext_argtype(#10358, 2, #11375) +ext_argtype(#10359, 0, #11412) +ext_argtype(#10359, 1, #10218) +ext_argtype(#10359, 2, #11375) +ext_argtype(#10360, 0, #11412) +ext_argtype(#10360, 1, #10218) +ext_argtype(#10361, 0, #11412) +ext_argtype(#10361, 1, #10218) +ext_argtype(#10362, 0, #11412) +ext_argtype(#10362, 1, #10218) +ext_argtype(#10363, 0, #11412) +ext_argtype(#10363, 1, #10218) +ext_argtype(#10364, 0, #11412) +ext_argtype(#10364, 1, #10218) +ext_argtype(#10365, 0, #11412) +ext_argtype(#10365, 1, #10218) +ext_argtype(#10366, 0, #11412) +ext_argtype(#10366, 1, #10218) +ext_argtype(#10366, 2, #11375) +ext_argtype(#10367, 0, #11412) +ext_argtype(#10367, 1, #10024) +ext_argtype(#10367, 1, #10218) +#11413 = @"C_builtin_function_or_method$unicodedata.normalize" +ext_argtype(#11413, 0, #11412) +ext_argtype(#11413, 1, #10024) +ext_argtype(#11413, 1, #10218) +ext_argtype(#11413, 2, #10218) +ext_argtype(#10368, 0, #11375) +ext_argtype(#10368, 1, #10024) +ext_argtype(#10368, 2, #10005) +ext_argtype(#10378, 0, #10024) +ext_argtype(#10378, 0, #10218) +ext_argtype(#10378, 1, #10005) +ext_argtype(#10379, 0, #10024) +ext_argtype(#10379, 0, #10218) +ext_argtype(#10379, 1, #10005) +#11414 = @"C_builtin_function_or_method$zlib.compressobj" +ext_argtype(#11414, 0, #10005) +ext_argtype(#11414, 1, #10005) +ext_argtype(#11414, 2, #10005) +ext_argtype(#11414, 3, #10005) +ext_argtype(#11414, 4, #10005) +ext_argtype(#10380, 0, #10024) +ext_argtype(#10380, 0, #10218) +ext_argtype(#10380, 1, #10005) +#11415 = @"C_builtin_function_or_method$zlib.decompress" +ext_argtype(#11415, 0, #10024) +ext_argtype(#11415, 0, #10218) +ext_argtype(#11415, 1, #10005) +ext_argtype(#11415, 2, #10005) +#11416 = @"C_builtin_function_or_method$zlib.decompressobj" +ext_argtype(#11416, 0, #10005) +ext_argtype(#10389, 0, #10005) +#11417 = @"C_builtin_function_or_method$bz2.compress" +ext_argtype(#11417, 0, #10024) +ext_argtype(#11417, 0, #10218) +ext_argtype(#11417, 1, #10005) +ext_argtype(#10390, 0, #10024) +ext_argtype(#10390, 0, #10218) +#11418 = @"C_builtin_function_or_method$resource.getrusage" +ext_argtype(#11418, 0, #10005) +ext_argtype(#10391, 0, #10005) +ext_argtype(#10392, 0, #10005) +ext_argtype(#10392, 1, #11375) +ext_argtype(#10394, 0, #11375) +ext_argtype(#10431, 0, #10024) +ext_argtype(#10431, 0, #10218) +ext_argtype(#10433, 0, #10024) +ext_argtype(#10433, 0, #10218) +ext_argtype(#10435, 0, #10024) +ext_argtype(#10435, 0, #10218) +ext_argtype(#10435, 0, #10003) +ext_argtype(#10436, 0, #10024) +ext_argtype(#10436, 0, #10218) +ext_argtype(#10436, 0, #10003) +ext_argtype(#10437, 0, #10024) +ext_argtype(#10437, 0, #10218) +ext_argtype(#10437, 0, #10003) +ext_argtype(#10438, 0, #10005) +ext_argtype(#10440, 0, #10005) +ext_argtype(#10445, 0, #10024) +ext_argtype(#10445, 0, #10218) +ext_argtype(#10446, 0, #10024) +ext_argtype(#10446, 0, #10218) +ext_argtype(#10447, 0, #10005) +ext_argtype(#10448, 0, #10005) +ext_argtype(#10448, 1, #10024) +ext_argtype(#10448, 1, #10218) +#11419 = @"C_builtin_function_or_method$_testcapi.raise_exception" +ext_argtype(#11419, 0, #11375) +ext_argtype(#11419, 1, #10005) +ext_argtype(#10468, 0, #10005) +ext_argtype(#10468, 1, #10001) +ext_argtype(#10470, 0, #10005) +ext_argtype(#10471, 0, #10005) +ext_argtype(#10472, 0, #10005) +ext_argtype(#10473, 0, #10005) +ext_argtype(#10474, 0, #10005) +ext_argtype(#10475, 0, #10005) +ext_argtype(#10476, 0, #10005) +ext_argtype(#10477, 0, #10005) +ext_argtype(#10478, 0, #10005) +ext_argtype(#10479, 0, #10005) +ext_argtype(#10480, 0, #10005) +#11420 = @"C_builtin_function_or_method$_testcapi.codec_incrementalencoder" +ext_argtype(#11420, 0, #10024) +ext_argtype(#11420, 0, #10218) +ext_argtype(#11420, 1, #10024) +ext_argtype(#11420, 1, #10218) +#11421 = @"C_builtin_function_or_method$_testcapi.codec_incrementaldecoder" +ext_argtype(#11421, 0, #10024) +ext_argtype(#11421, 0, #10218) +ext_argtype(#11421, 1, #10024) +ext_argtype(#11421, 1, #10218) +#11422 = @"C_builtin_function_or_method$_testcapi.unicode_encodedecimal" +ext_argtype(#11422, 0, #10218) +ext_argtype(#11422, 1, #10024) +ext_argtype(#11422, 1, #10218) +ext_argtype(#10486, 0, #11375) +ext_argtype(#10487, 0, #11375) +ext_argtype(#10489, 0, #11375) +ext_argtype(#10489, 1, #11375) +ext_argtype(#10490, 0, #10024) +ext_argtype(#10490, 0, #10218) +ext_argtype(#10490, 1, #10024) +ext_argtype(#10490, 1, #10218) +ext_argtype(#10490, 2, #10005) +ext_argtype(#10491, 0, #10024) +ext_argtype(#10491, 0, #10218) +ext_argtype(#10491, 1, #10024) +ext_argtype(#10491, 1, #10218) +ext_argtype(#10491, 2, #11375) +ext_argtype(#10491, 3, #11375) +ext_argtype(#10493, 0, #11375) +ext_argtype(#10493, 1, #10005) +ext_argtype(#10494, 0, #11375) +#11423 = @"C_builtin_function_or_method$spwd.getspnam" +ext_argtype(#11423, 0, #10024) +ext_argtype(#11423, 0, #10218) +ext_argtype(#10499, 0, #10005) +ext_argtype(#10499, 1, #10024) +ext_argtype(#10499, 1, #10218) +ext_argtype(#10499, 1, #10003) +ext_argtype(#10502, 0, #10024) +ext_argtype(#10502, 0, #10218) +ext_argtype(#10503, 0, #10005) +ext_argtype(#10504, 0, #10024) +ext_argtype(#10504, 0, #10218) +ext_argtype(#10505, 0, #10024) +ext_argtype(#10505, 0, #10218) +ext_argtype(#10505, 0, #10003) +ext_argtype(#10505, 1, #10024) +ext_argtype(#10505, 1, #10218) +ext_argtype(#10506, 0, #10024) +ext_argtype(#10506, 0, #10218) +ext_argtype(#10506, 0, #10003) +ext_argtype(#10506, 1, #10024) +ext_argtype(#10506, 1, #10218) +ext_argtype(#10506, 2, #10005) +ext_argtype(#10507, 0, #10024) +ext_argtype(#10507, 0, #10218) +ext_argtype(#10507, 0, #10003) +ext_argtype(#10508, 0, #10024) +ext_argtype(#10508, 0, #10218) +ext_argtype(#10508, 1, #10024) +ext_argtype(#10508, 1, #10218) +ext_argtype(#10508, 1, #10003) +ext_argtype(#10509, 0, #10024) +ext_argtype(#10509, 0, #10218) +ext_argtype(#10509, 1, #10024) +ext_argtype(#10509, 1, #10218) +ext_argtype(#10509, 1, #10003) +ext_argtype(#10510, 0, #10024) +ext_argtype(#10510, 0, #10218) +ext_argtype(#10510, 0, #10003) +ext_argtype(#10510, 1, #10024) +ext_argtype(#10510, 1, #10218) +ext_argtype(#10510, 1, #10003) +ext_argtype(#10510, 2, #11375) +ext_argtype(#10512, 0, #10005) +ext_argtype(#10513, 0, #11375) +ext_argtype(#10514, 0, #11375) +ext_argtype(#10515, 0, #11375) +ext_argtype(#10526, 0, #10517) +ext_argtype(#10527, 0, #10517) +ext_argtype(#10528, 0, #10517) +ext_argtype(#10528, 1, #10517) +ext_argtype(#10530, 0, #10517) +ext_argtype(#10531, 0, #10517) +ext_argtype(#10532, 0, #10038) +ext_argtype(#10532, 1, #10038) +ext_argtype(#10538, 0, #11375) +ext_argtype(#10539, 0, #11375) +#11424 = @"C_builtin_function_or_method$_ctypes.POINTER" +ext_argtype(#11424, 0, #11375) +#11425 = @"C_builtin_function_or_method$_ctypes.pointer" +ext_argtype(#11425, 0, #11375) +#11426 = @"C_builtin_function_or_method$_ctypes._unpickle" +ext_argtype(#11426, 0, #11375) +ext_argtype(#11426, 1, #11375) +ext_argtype(#10548, 0, #11375) +ext_argtype(#10549, 0, #11375) +ext_argtype(#10549, 1, #10005) +ext_argtype(#10550, 0, #10024) +ext_argtype(#10550, 0, #10218) +ext_argtype(#10550, 0, #10003) +ext_argtype(#10550, 1, #10024) +ext_argtype(#10550, 1, #10218) +ext_argtype(#10551, 0, #10024) +ext_argtype(#10551, 0, #10218) +ext_argtype(#10551, 0, #10003) +ext_argtype(#10551, 1, #10005) +ext_argtype(#10552, 0, #11375) +ext_argtype(#10553, 0, #11375) +ext_argtype(#10553, 1, #10024) +ext_argtype(#10553, 1, #10218) +ext_argtype(#10554, 0, #11375) +ext_argtype(#10555, 0, #11375) +ext_argtype(#10558, 0, #11375) +ext_argtype(#10559, 0, #11375) +ext_argtype(#10559, 1, #10001) +ext_argtype(#10560, 0, #11375) +ext_argtype(#10560, 1, #10001) +#11427 = @"C_builtin_function_or_method$_ctypes.PyObj_FromPtr" +ext_argtype(#11427, 0, #11375) +#11428 = @"C_builtin_function_or_method$_ctypes.Py_INCREF" +ext_argtype(#11428, 0, #11375) +#11429 = @"C_builtin_function_or_method$_ctypes.Py_DECREF" +ext_argtype(#11429, 0, #11375) +ext_argtype(#10561, 0, #10024) +ext_argtype(#10561, 0, #10218) +ext_argtype(#10561, 1, #10005) +#11430 = @"C_builtin_function_or_method$_json.encode_basestring_ascii" +ext_argtype(#11430, 0, #11375) +ext_argtype(#10567, 0, #11375) +ext_argtype(#10567, 1, #11375) +ext_argtype(#10567, 2, #10024) +ext_argtype(#10567, 2, #10218) +ext_argtype(#10567, 2, #10003) +ext_argtype(#10567, 3, #10005) +ext_argtype(#10568, 0, #10024) +ext_argtype(#10568, 1, #10005) +ext_argtype(#10568, 2, #10005) +ext_argtype(#10571, 0, #10005) +ext_argtype(#10572, 0, #10005) +ext_argtype(#10573, 0, #10005) +ext_argtype(#10574, 0, #11375) +ext_argtype(#10574, 1, #10007) +ext_argtype(#10576, 0, #10575) +ext_argtype(#10576, 1, #11375) +ext_argtype(#10576, 2, #10007) +ext_argtype(#10579, 0, #11375) +ext_argtype(#10579, 1, #10024) +ext_argtype(#10579, 1, #10218) +ext_argtype(#10579, 1, #10003) +ext_argtype(#10581, 0, #11375) +ext_argtype(#10581, 1, #10024) +ext_argtype(#10581, 1, #10218) +ext_argtype(#10581, 1, #10003) +ext_argtype(#10582, 0, #11375) +ext_argtype(#10582, 1, #11375) +ext_argtype(#10582, 2, #10005) +ext_argtype(#10582, 3, #10005) +ext_argtype(#10583, 0, #11375) +ext_argtype(#10583, 1, #11375) +ext_argtype(#10583, 2, #10005) +ext_argtype(#10583, 3, #10005) +ext_argtype(#10584, 0, #11375) +ext_argtype(#10584, 1, #11375) +ext_argtype(#10584, 2, #10005) +ext_argtype(#10584, 3, #10005) +ext_argtype(#10585, 0, #11375) +ext_argtype(#10585, 1, #11375) +ext_argtype(#10585, 2, #10005) +ext_argtype(#10585, 3, #10005) +ext_argtype(#10586, 0, #11375) +ext_argtype(#10586, 1, #11375) +ext_argtype(#10586, 2, #10005) +ext_argtype(#10586, 3, #10005) +ext_argtype(#10587, 0, #11375) +ext_argtype(#10587, 1, #11375) +ext_argtype(#10587, 2, #10005) +ext_argtype(#10587, 3, #10005) +ext_argtype(#10591, 0, #11375) +ext_argtype(#10598, 0, #11375) +ext_argtype(#10600, 0, #11375) +ext_argtype(#10600, 1, #11375) +ext_argtype(#10601, 0, #10005) +ext_argtype(#10603, 0, #10024) +ext_argtype(#10603, 0, #10218) +ext_argtype(#10604, 0, #10005) +ext_argtype(#10606, 0, #10005) +ext_argtype(#10607, 0, #11375) +ext_argtype(#10609, 0, #10005) +ext_argtype(#10610, 0, #11375) +#11431 = @"C_builtin_function_or_method$sys.call_tracing" +ext_argtype(#11431, 0, #11375) +ext_argtype(#11431, 1, #10001) +ext_argtype(#10612, 0, #11375) +ext_argtype(#10612, 1, #11375) +ext_argtype(#10612, 2, #10005) +ext_argtype(#10613, 0, #11375) +ext_argtype(#10613, 1, #11375) +ext_argtype(#10613, 2, #11375) +ext_argtype(#10613, 3, #10005) +ext_argtype(#10613, 4, #11375) +ext_argtype(#10613, 5, #11375) +ext_argtype(#10613, 6, #11375) +ext_argtype(#10615, 0, #11375) +ext_argtype(#10617, 0, #11375) +ext_argtype(#10619, 0, #10024) +ext_argtype(#10619, 0, #10218) +ext_argtype(#10619, 1, #11375) +ext_argtype(#10622, 0, #10024) +ext_argtype(#10622, 0, #10218) +ext_argtype(#10622, 1, #11375) +ext_argtype(#10622, 2, #10024) +ext_argtype(#10622, 2, #10218) +ext_argtype(#10622, 3, #10001) +ext_argtype(#10623, 0, #10024) +ext_argtype(#10623, 0, #10218) +ext_argtype(#10627, 0, #10024) +ext_argtype(#10627, 0, #10218) +ext_argtype(#10628, 0, #10024) +ext_argtype(#10628, 0, #10218) +ext_argtype(#10629, 0, #10024) +ext_argtype(#10629, 0, #10218) +ext_argtype(#10630, 0, #10024) +ext_argtype(#10630, 0, #10218) +ext_argtype(#10631, 0, #10024) +ext_argtype(#10631, 0, #10218) +#11432 = @"C_builtin_function_or_method$imp.load_compiled" +ext_argtype(#11432, 0, #10024) +ext_argtype(#11432, 0, #10218) +ext_argtype(#11432, 1, #10024) +ext_argtype(#11432, 1, #10218) +ext_argtype(#11432, 2, #10250) +ext_argtype(#10632, 0, #10024) +ext_argtype(#10632, 0, #10218) +ext_argtype(#10632, 1, #10024) +ext_argtype(#10632, 1, #10218) +ext_argtype(#10632, 2, #10250) +ext_argtype(#10633, 0, #10024) +ext_argtype(#10633, 0, #10218) +ext_argtype(#10633, 1, #10024) +ext_argtype(#10633, 1, #10218) +#11433 = @"C_builtin_function_or_method$imp.load_source" +ext_argtype(#11433, 0, #10024) +ext_argtype(#11433, 0, #10218) +ext_argtype(#11433, 1, #10024) +ext_argtype(#11433, 1, #10218) +ext_argtype(#11433, 2, #10250) +ext_argtype(#10634, 0, #10024) +ext_argtype(#10634, 0, #10218) +ext_argtype(#10634, 1, #11375) +ext_argtype(#10634, 2, #11375) +ext_argtype(#10634, 3, #11375) +ext_argtype(#10634, 4, #10005) +#11434 = @"C_builtin_function_or_method$builtins.abs" +ext_argtype(#11434, 0, #11375) +ext_argtype(#10635, 0, #11375) +ext_argtype(#10636, 0, #11375) +ext_argtype(#10637, 0, #11375) +ext_argtype(#10638, 0, #11375) +ext_argtype(#10639, 0, #10005) +ext_argtype(#10642, 0, #11375) +ext_argtype(#10642, 1, #10024) +ext_argtype(#10642, 1, #10218) +ext_argtype(#10642, 2, #10024) +ext_argtype(#10642, 2, #10218) +ext_argtype(#10642, 3, #10005) +ext_argtype(#10642, 4, #10005) +#11435 = @"C_builtin_function_or_method$builtins.execfile" +ext_argtype(#11435, 0, #10024) +ext_argtype(#11435, 0, #10218) +ext_argtype(#11435, 1, #10007) +ext_argtype(#11435, 2, #11375) +ext_argtype(#10646, 0, #11375) +ext_argtype(#10646, 1, #11375) +ext_argtype(#10649, 0, #11375) +#11436 = @"C_builtin_function_or_method$builtins.hex" +ext_argtype(#11436, 0, #11375) +ext_argtype(#10650, 0, #11375) +#11437 = @"C_builtin_function_or_method$builtins.intern" +ext_argtype(#11437, 0, #10024) +ext_argtype(#10657, 0, #11375) +#11438 = @"C_builtin_function_or_method$builtins.oct" +ext_argtype(#11438, 0, #11375) +ext_argtype(#10661, 0, #11375) +ext_argtype(#10665, 0, #11375) +ext_argtype(#10666, 0, #11375) +ext_argtype(#10667, 0, #10038) +ext_argtype(#10667, 1, #11375) +ext_argtype(#10669, 0, #11375) +ext_argtype(#10669, 1, #11375) +ext_argtype(#10669, 2, #11375) +ext_argtype(#10669, 3, #10005) +ext_argtype(#10671, 0, #10005) +#11439 = @"C_type$_multiprocessing.SemLock" +ext_argtype(#10674, 0, #11439) +ext_argtype(#10675, 0, #11439) +ext_argtype(#10676, 0, #11439) +ext_argtype(#10677, 0, #11439) +ext_argtype(#10678, 0, #11439) +ext_argtype(#10679, 0, #11439) +ext_argtype(#10680, 0, #11439) +ext_argtype(#10681, 0, #11439) +#11440 = @"C_type$_multiprocessing.SemLock$_rebuild" +ext_argtype(#11440, 0, #11439) +ext_argtype(#10682, 0, #11439) +#11441 = @"C_type$_multiprocessing.Connection" +ext_argtype(#10683, 0, #11441) +ext_argtype(#10684, 0, #11441) +ext_argtype(#10685, 0, #11441) +ext_argtype(#10686, 0, #11441) +ext_argtype(#10686, 1, #11375) +#11442 = @"C_type$_multiprocessing.Connection$recv" +ext_argtype(#11442, 0, #11441) +ext_argtype(#10687, 0, #11441) +ext_argtype(#10688, 0, #11441) +ext_argtype(#10689, 0, #11441) +#11443 = @"C_type$_ssl._SSLContext" +ext_argtype(#10690, 0, #11443) +ext_argtype(#10692, 0, #11443) +ext_argtype(#10693, 0, #11443) +ext_argtype(#10694, 0, #11443) +ext_argtype(#10695, 0, #11443) +ext_argtype(#10695, 1, #11375) +ext_argtype(#10696, 0, #11443) +ext_argtype(#10697, 0, #11443) +ext_argtype(#10698, 0, #11443) +ext_argtype(#10699, 0, #11443) +ext_argtype(#10699, 1, #11375) +ext_argtype(#10700, 0, #11443) +ext_argtype(#10701, 0, #11443) +ext_argtype(#10702, 0, #11443) +ext_argtype(#10703, 0, #10691) +ext_argtype(#10704, 0, #10691) +ext_argtype(#10705, 0, #10691) +ext_argtype(#10706, 0, #10691) +ext_argtype(#10707, 0, #10691) +ext_argtype(#10708, 0, #10691) +ext_argtype(#10709, 0, #10691) +ext_argtype(#10710, 0, #10691) +ext_argtype(#10711, 0, #10691) +ext_argtype(#10712, 0, #10691) +ext_argtype(#10713, 0, #10691) +#11444 = @"C_type$_sre.SRE_Match" +ext_argtype(#10714, 0, #11444) +ext_argtype(#10715, 0, #11444) +ext_argtype(#10716, 0, #11444) +ext_argtype(#10717, 0, #11444) +ext_argtype(#10718, 0, #11444) +ext_argtype(#10719, 0, #11444) +#11445 = @"C_type$_sre.SRE_Match$expand" +ext_argtype(#11445, 0, #11444) +ext_argtype(#11445, 1, #11375) +#11446 = @"C_type$_sre.SRE_Match$__copy__" +ext_argtype(#11446, 0, #11444) +#11447 = @"C_type$_sre.SRE_Match$__deepcopy__" +ext_argtype(#11447, 0, #11444) +ext_argtype(#11447, 1, #11375) +#11448 = @"C_type$_sre.SRE_Scanner" +ext_argtype(#10720, 0, #11448) +ext_argtype(#10721, 0, #11448) +#11449 = @"C_type$_sre.SRE_Pattern" +ext_argtype(#10722, 0, #11449) +ext_argtype(#10723, 0, #11449) +ext_argtype(#10724, 0, #11449) +ext_argtype(#10725, 0, #11449) +ext_argtype(#10726, 0, #11449) +ext_argtype(#10727, 0, #11449) +ext_argtype(#10728, 0, #11449) +#11450 = @"C_type$_sre.SRE_Pattern$scanner" +ext_argtype(#11450, 0, #11449) +#11451 = @"C_type$_sre.SRE_Pattern$__copy__" +ext_argtype(#11451, 0, #11449) +#11452 = @"C_type$_sre.SRE_Pattern$__deepcopy__" +ext_argtype(#11452, 0, #11449) +ext_argtype(#11452, 1, #11375) +#11453 = @"C_type$linuxaudiodev.linux_audio_device$read" +ext_argtype(#11453, 0, #10017) +ext_argtype(#11453, 1, #10005) +ext_argtype(#10729, 0, #10017) +ext_argtype(#10729, 1, #10024) +ext_argtype(#10729, 1, #10218) +ext_argtype(#10730, 0, #10017) +ext_argtype(#10730, 1, #10005) +ext_argtype(#10730, 2, #10005) +ext_argtype(#10730, 3, #10005) +ext_argtype(#10730, 4, #10005) +ext_argtype(#10730, 5, #10005) +ext_argtype(#10731, 0, #10017) +ext_argtype(#10732, 0, #10017) +ext_argtype(#10733, 0, #10017) +ext_argtype(#10734, 0, #10017) +ext_argtype(#10735, 0, #10017) +ext_argtype(#10736, 0, #10017) +ext_argtype(#10737, 0, #10017) +ext_argtype(#10738, 0, #10056) +ext_argtype(#10739, 0, #10056) +#11454 = @"C_type$MultibyteIncrementalEncoder" +ext_argtype(#10740, 0, #11454) +ext_argtype(#10741, 0, #11454) +#11455 = @"C_type$MultibyteIncrementalDecoder$2decode" +#11456 = @"C_type$MultibyteIncrementalDecoder" +ext_argtype(#11455, 0, #11456) +ext_argtype(#10742, 0, #11456) +#11457 = @"C_type$MultibyteStreamReader" +ext_argtype(#10743, 0, #11457) +ext_argtype(#10744, 0, #11457) +ext_argtype(#10745, 0, #11457) +ext_argtype(#10746, 0, #11457) +#11458 = @"C_type$MultibyteStreamWriter" +ext_argtype(#10747, 0, #11458) +ext_argtype(#10747, 1, #11375) +ext_argtype(#10748, 0, #11458) +ext_argtype(#10748, 1, #11375) +ext_argtype(#10749, 0, #11458) +#11459 = @"C_type$deque_iterator" +ext_argtype(#10750, 0, #11459) +ext_argtype(#10750, 0, #10761) +ext_argtype(#10751, 0, #11459) +ext_argtype(#10751, 0, #10761) +#11460 = @"C_type$collections.deque" +ext_argtype(#10752, 0, #11460) +ext_argtype(#10752, 1, #11375) +ext_argtype(#10753, 0, #11460) +ext_argtype(#10753, 1, #11375) +ext_argtype(#10754, 0, #11460) +#11461 = @"C_type$collections.deque$__copy__" +ext_argtype(#11461, 0, #11460) +ext_argtype(#10755, 0, #11460) +ext_argtype(#10755, 1, #11375) +ext_argtype(#10756, 0, #11460) +ext_argtype(#10756, 1, #11375) +ext_argtype(#10757, 0, #11460) +ext_argtype(#10757, 1, #11375) +#11462 = @"C_type$collections.deque$pop" +ext_argtype(#11462, 0, #11460) +#11463 = @"C_type$collections.deque$popleft" +ext_argtype(#11463, 0, #11460) +ext_argtype(#10758, 0, #11460) +ext_argtype(#10759, 0, #11460) +ext_argtype(#10759, 1, #11375) +ext_argtype(#10760, 0, #11460) +ext_argtype(#10762, 0, #11460) +ext_argtype(#10763, 0, #11460) +ext_argtype(#10763, 1, #10005) +ext_argtype(#10764, 0, #11460) +#11464 = @"C_type$collections.defaultdict$__missing__" +#11465 = @"C_type$collections.defaultdict" +ext_argtype(#11464, 0, #11465) +ext_argtype(#11464, 1, #11375) +#11466 = @"C_type$collections.defaultdict$copy" +ext_argtype(#11466, 0, #11465) +#11467 = @"C_type$collections.defaultdict$__copy__" +ext_argtype(#11467, 0, #11465) +ext_argtype(#10765, 0, #11465) +ext_argtype(#10766, 0, #10085) +#11468 = @"C_type$parser.st$isexpr" +ext_argtype(#11468, 0, #10085) +#11469 = @"C_type$parser.st$issuite" +ext_argtype(#11469, 0, #10085) +ext_argtype(#10767, 0, #10085) +ext_argtype(#10768, 0, #10085) +ext_argtype(#10769, 0, #10085) +ext_argtype(#10770, 0, #10102) +ext_argtype(#10771, 0, #10102) +ext_argtype(#10771, 1, #11375) +ext_argtype(#10772, 0, #10102) +ext_argtype(#10773, 0, #10102) +ext_argtype(#10773, 1, #11375) +ext_argtype(#10774, 0, #10102) +ext_argtype(#10774, 1, #11375) +ext_argtype(#10775, 0, #10102) +ext_argtype(#10776, 0, #10102) +ext_argtype(#10777, 0, #10102) +ext_argtype(#10778, 0, #10102) +ext_argtype(#10779, 0, #10102) +ext_argtype(#10779, 1, #10005) +ext_argtype(#10779, 2, #10005) +ext_argtype(#10779, 3, #10005) +ext_argtype(#10780, 0, #10102) +ext_argtype(#10780, 1, #11375) +ext_argtype(#10781, 0, #10102) +ext_argtype(#10781, 1, #10024) +ext_argtype(#10781, 1, #10218) +ext_argtype(#10781, 2, #10005) +#11470 = @"C_type$_socket.socket$recv" +ext_argtype(#11470, 0, #10102) +ext_argtype(#11470, 1, #10005) +ext_argtype(#11470, 2, #10005) +ext_argtype(#10782, 0, #10102) +ext_argtype(#10782, 1, #11377) +ext_argtype(#10782, 2, #10005) +ext_argtype(#10782, 3, #10005) +ext_argtype(#10783, 0, #10102) +ext_argtype(#10783, 1, #10005) +ext_argtype(#10783, 2, #10005) +ext_argtype(#10784, 0, #10102) +ext_argtype(#10784, 1, #11377) +ext_argtype(#10784, 2, #10005) +ext_argtype(#10784, 3, #10005) +ext_argtype(#10785, 0, #10102) +ext_argtype(#10785, 1, #10024) +ext_argtype(#10785, 1, #10218) +ext_argtype(#10785, 2, #10005) +ext_argtype(#10786, 0, #10102) +ext_argtype(#10786, 1, #10024) +ext_argtype(#10786, 1, #10218) +ext_argtype(#10786, 2, #10005) +ext_argtype(#10787, 0, #10102) +ext_argtype(#10788, 0, #10102) +ext_argtype(#10788, 1, #11375) +ext_argtype(#10789, 0, #10102) +ext_argtype(#10789, 1, #11375) +ext_argtype(#10790, 0, #10102) +ext_argtype(#10791, 0, #10102) +ext_argtype(#10792, 0, #10102) +ext_argtype(#10792, 1, #11375) +ext_argtype(#10793, 0, #10794) +#11471 = @"C_type$itertools.chain$from_iterable" +#11472 = @"C_type$itertools.chain" +ext_argtype(#11471, 0, #11472) +ext_argtype(#11471, 1, #11375) +#11473 = @"C_type$itertools.count" +ext_argtype(#10795, 0, #11473) +#11474 = @"C_type$itertools.repeat" +ext_argtype(#10796, 0, #11474) +#11475 = @"C_type$_csv.writer$writerow" +ext_argtype(#11475, 0, #10167) +ext_argtype(#11475, 1, #11375) +ext_argtype(#10797, 0, #10167) +ext_argtype(#10797, 1, #11375) +#11476 = @"C_type$array.array" +ext_argtype(#10798, 0, #11476) +ext_argtype(#10798, 1, #11375) +ext_argtype(#10799, 0, #11476) +ext_argtype(#10800, 0, #11476) +#11477 = @"C_type$array.array$__copy__" +ext_argtype(#11477, 0, #11476) +ext_argtype(#10801, 0, #11476) +ext_argtype(#10801, 1, #11375) +#11478 = @"C_type$array.array$__deepcopy__" +ext_argtype(#11478, 0, #11476) +ext_argtype(#11478, 1, #11375) +ext_argtype(#10802, 0, #11476) +ext_argtype(#10802, 1, #11375) +ext_argtype(#10803, 0, #11476) +ext_argtype(#10804, 0, #11476) +ext_argtype(#10804, 1, #11375) +ext_argtype(#10805, 0, #11476) +ext_argtype(#10806, 0, #11476) +ext_argtype(#10807, 0, #11476) +ext_argtype(#10807, 1, #11375) +ext_argtype(#10808, 0, #11476) +#11479 = @"C_type$array.array$pop" +ext_argtype(#11479, 0, #11476) +ext_argtype(#10809, 0, #11476) +ext_argtype(#10810, 0, #11476) +ext_argtype(#10811, 0, #11476) +ext_argtype(#10811, 1, #11375) +ext_argtype(#10812, 0, #11476) +ext_argtype(#10813, 0, #11476) +ext_argtype(#10813, 1, #11375) +ext_argtype(#10814, 0, #11476) +ext_argtype(#10815, 0, #11476) +ext_argtype(#10816, 0, #11476) +ext_argtype(#10817, 0, #11476) +ext_argtype(#10817, 1, #11375) +ext_argtype(#10818, 0, #11476) +#11480 = @"C_type$mmap.mmap" +ext_argtype(#10819, 0, #11480) +ext_argtype(#10820, 0, #11480) +ext_argtype(#10821, 0, #11480) +ext_argtype(#10822, 0, #11480) +ext_argtype(#10823, 0, #11480) +ext_argtype(#10824, 0, #11480) +ext_argtype(#10825, 0, #11480) +ext_argtype(#10826, 0, #11480) +ext_argtype(#10827, 0, #11480) +ext_argtype(#10828, 0, #11480) +ext_argtype(#10829, 0, #11480) +ext_argtype(#10830, 0, #11480) +ext_argtype(#10831, 0, #11480) +ext_argtype(#10832, 0, #11480) +ext_argtype(#10833, 0, #10201) +ext_argtype(#10833, 1, #10024) +ext_argtype(#10833, 1, #10218) +ext_argtype(#10833, 2, #10024) +ext_argtype(#10833, 2, #10218) +ext_argtype(#10834, 0, #10201) +ext_argtype(#10835, 0, #10201) +#11481 = @"C_type$_hotshot.ProfilerType$runcall" +ext_argtype(#11481, 0, #10201) +#11482 = @"C_type$_hotshot.ProfilerType$runcode" +ext_argtype(#11482, 0, #10201) +ext_argtype(#11482, 1, #10082) +ext_argtype(#11482, 2, #10007) +ext_argtype(#11482, 3, #11375) +ext_argtype(#10836, 0, #10201) +ext_argtype(#10837, 0, #10201) +ext_argtype(#10838, 0, #10204) +ext_argtype(#10839, 0, #10204) +ext_argtype(#10840, 0, #10314) +ext_argtype(#10841, 0, #10314) +ext_argtype(#10842, 0, #10314) +ext_argtype(#10843, 0, #10314) +ext_argtype(#10843, 1, #10005) +ext_argtype(#10844, 0, #10314) +ext_argtype(#10844, 1, #10005) +ext_argtype(#10845, 0, #10314) +ext_argtype(#10845, 1, #10005) +ext_argtype(#10846, 0, #10314) +ext_argtype(#10847, 0, #10314) +ext_argtype(#10847, 1, #10005) +ext_argtype(#10847, 2, #10005) +ext_argtype(#10848, 0, #10314) +ext_argtype(#10849, 0, #10314) +ext_argtype(#10849, 1, #10005) +ext_argtype(#10850, 0, #10314) +ext_argtype(#10851, 0, #10314) +ext_argtype(#10851, 1, #10024) +ext_argtype(#10851, 1, #10218) +ext_argtype(#10852, 0, #10314) +ext_argtype(#10852, 1, #11375) +ext_argtype(#10853, 0, #10315) +ext_argtype(#10854, 0, #10315) +ext_argtype(#10855, 0, #10315) +ext_argtype(#10856, 0, #10315) +ext_argtype(#10856, 1, #10005) +ext_argtype(#10857, 0, #10315) +ext_argtype(#10857, 1, #10005) +ext_argtype(#10858, 0, #10315) +ext_argtype(#10858, 1, #10005) +ext_argtype(#10859, 0, #10315) +ext_argtype(#10860, 0, #10315) +ext_argtype(#10860, 1, #10005) +ext_argtype(#10860, 2, #10005) +ext_argtype(#10861, 0, #10315) +ext_argtype(#10862, 0, #10315) +ext_argtype(#10862, 1, #10005) +ext_argtype(#10863, 0, #10315) +#11483 = @"C_type$Struct" +ext_argtype(#10864, 0, #11483) +ext_argtype(#10865, 0, #11483) +ext_argtype(#10866, 0, #11483) +ext_argtype(#10866, 1, #11375) +ext_argtype(#10867, 0, #11483) +ext_argtype(#10868, 0, #11483) +ext_argtype(#10869, 0, #10354) +ext_argtype(#10869, 1, #11375) +ext_argtype(#10869, 2, #10005) +ext_argtype(#10870, 0, #10354) +ext_argtype(#10871, 0, #10354) +ext_argtype(#10871, 1, #10005) +#11484 = @"C_type$cPickle.Unpickler$load" +ext_argtype(#11484, 0, #10356) +#11485 = @"C_type$cPickle.Unpickler$noload" +ext_argtype(#11485, 0, #10356) +#11486 = @"C_type$zipimport.zipimporter" +ext_argtype(#10872, 0, #11486) +ext_argtype(#10872, 1, #10024) +ext_argtype(#10872, 1, #10218) +ext_argtype(#10872, 2, #11375) +#11487 = @"C_type$zipimport.zipimporter$load_module" +ext_argtype(#11487, 0, #11486) +ext_argtype(#11487, 1, #10024) +ext_argtype(#11487, 1, #10218) +ext_argtype(#10873, 0, #11486) +ext_argtype(#10873, 1, #10024) +ext_argtype(#10873, 1, #10218) +ext_argtype(#10874, 0, #11486) +ext_argtype(#10874, 1, #10024) +ext_argtype(#10874, 1, #10218) +ext_argtype(#10875, 0, #11486) +ext_argtype(#10875, 1, #10024) +ext_argtype(#10875, 1, #10218) +ext_argtype(#10876, 0, #11486) +ext_argtype(#10876, 1, #10024) +ext_argtype(#10876, 1, #10218) +ext_argtype(#10877, 0, #11486) +ext_argtype(#10877, 1, #10024) +ext_argtype(#10877, 1, #10218) +ext_argtype(#10878, 0, #11412) +ext_argtype(#10878, 1, #10218) +ext_argtype(#10878, 2, #11375) +ext_argtype(#10879, 0, #11412) +ext_argtype(#10879, 1, #10218) +ext_argtype(#10879, 2, #11375) +ext_argtype(#10880, 0, #11412) +ext_argtype(#10880, 1, #10218) +ext_argtype(#10880, 2, #11375) +ext_argtype(#10881, 0, #11412) +ext_argtype(#10881, 1, #10218) +ext_argtype(#10882, 0, #11412) +ext_argtype(#10882, 1, #10218) +ext_argtype(#10883, 0, #11412) +ext_argtype(#10883, 1, #10218) +ext_argtype(#10884, 0, #11412) +ext_argtype(#10884, 1, #10218) +ext_argtype(#10885, 0, #11412) +ext_argtype(#10885, 1, #10218) +ext_argtype(#10886, 0, #11412) +ext_argtype(#10886, 1, #10218) +ext_argtype(#10887, 0, #11412) +ext_argtype(#10887, 1, #10218) +ext_argtype(#10887, 2, #11375) +ext_argtype(#10888, 0, #11412) +ext_argtype(#10888, 1, #10024) +ext_argtype(#10888, 1, #10218) +#11488 = @"C_type$unicodedata.UCD$normalize" +ext_argtype(#11488, 0, #11412) +ext_argtype(#11488, 1, #10024) +ext_argtype(#11488, 1, #10218) +ext_argtype(#11488, 2, #10218) +#11489 = @"C_type$xxsubtype.spamlist" +ext_argtype(#10889, 0, #11489) +ext_argtype(#10890, 0, #11489) +ext_argtype(#10890, 1, #10005) +ext_argtype(#10891, 0, #11489) +#11490 = @"C_type$xxsubtype.spamdict" +ext_argtype(#10893, 0, #11490) +ext_argtype(#10894, 0, #11490) +ext_argtype(#10894, 1, #10005) +ext_argtype(#10895, 0, #10370) +ext_argtype(#10896, 0, #10370) +ext_argtype(#10897, 0, #10370) +ext_argtype(#10898, 0, #10370) +#11491 = @"C_type$zlib.Compress$compress" +#11492 = @"C_type$zlib.Compress" +ext_argtype(#11491, 0, #11492) +ext_argtype(#11491, 1, #10024) +ext_argtype(#11491, 1, #10218) +ext_argtype(#10899, 0, #11492) +ext_argtype(#10899, 1, #10005) +#11493 = @"C_type$zlib.Compress$copy" +ext_argtype(#11493, 0, #11492) +#11494 = @"C_type$zlib.Decompress$decompress" +#11495 = @"C_type$zlib.Decompress" +ext_argtype(#11494, 0, #11495) +ext_argtype(#11494, 1, #10024) +ext_argtype(#11494, 1, #10218) +ext_argtype(#11494, 2, #10005) +#11496 = @"C_type$zlib.Decompress$flush" +ext_argtype(#11496, 0, #11495) +ext_argtype(#11496, 1, #10005) +#11497 = @"C_type$zlib.Decompress$copy" +ext_argtype(#11497, 0, #11495) +#11498 = @"C_type$_random.Random" +ext_argtype(#10900, 0, #11498) +ext_argtype(#10901, 0, #11498) +ext_argtype(#10902, 0, #11498) +ext_argtype(#10903, 0, #11498) +ext_argtype(#10903, 1, #11375) +ext_argtype(#10904, 0, #11498) +ext_argtype(#10904, 1, #11375) +ext_argtype(#10905, 0, #11498) +ext_argtype(#10905, 1, #10005) +ext_argtype(#10906, 0, #10384) +ext_argtype(#10906, 1, #10005) +ext_argtype(#10907, 0, #10384) +ext_argtype(#10907, 1, #10005) +ext_argtype(#10908, 0, #10384) +ext_argtype(#10909, 0, #10384) +ext_argtype(#10910, 0, #10384) +ext_argtype(#10911, 0, #10384) +ext_argtype(#10912, 0, #10384) +ext_argtype(#10912, 1, #10005) +ext_argtype(#10913, 0, #10384) +#11499 = @"C_type$bz2.BZ2File$read" +#11500 = @"C_type$bz2.BZ2File" +ext_argtype(#11499, 0, #11500) +ext_argtype(#11499, 1, #10005) +ext_argtype(#10914, 0, #11500) +ext_argtype(#10914, 1, #10005) +ext_argtype(#10915, 0, #11500) +ext_argtype(#10915, 1, #10005) +#11501 = @"C_type$bz2.BZ2File$xreadlines" +ext_argtype(#11501, 0, #11500) +ext_argtype(#10916, 0, #11500) +ext_argtype(#10916, 1, #10024) +ext_argtype(#10916, 1, #10218) +ext_argtype(#10917, 0, #11500) +ext_argtype(#10917, 1, #11375) +ext_argtype(#10918, 0, #11500) +ext_argtype(#10918, 1, #11375) +ext_argtype(#10918, 2, #10005) +ext_argtype(#10919, 0, #11500) +ext_argtype(#10920, 0, #11500) +#11502 = @"C_type$bz2.BZ2File$__enter__" +ext_argtype(#11502, 0, #11500) +ext_argtype(#10921, 0, #11500) +#11503 = @"C_type$bz2.BZ2Compressor" +ext_argtype(#10922, 0, #11503) +ext_argtype(#10922, 1, #10024) +ext_argtype(#10922, 1, #10218) +#11504 = @"C_type$bz2.BZ2Compressor$flush" +ext_argtype(#11504, 0, #11503) +#11505 = @"C_type$bz2.BZ2Decompressor$decompress" +#11506 = @"C_type$bz2.BZ2Decompressor" +ext_argtype(#11505, 0, #11506) +ext_argtype(#11505, 1, #10024) +ext_argtype(#11505, 1, #10218) +ext_argtype(#10923, 0, #10497) +ext_argtype(#10923, 1, #11375) +ext_argtype(#10923, 2, #11375) +ext_argtype(#10924, 0, #10497) +ext_argtype(#10924, 1, #11375) +ext_argtype(#10924, 2, #11375) +ext_argtype(#10925, 0, #10497) +ext_argtype(#10925, 1, #11375) +ext_argtype(#10926, 0, #10497) +#11507 = @"C_type$select.epoll$fromfd" +#11508 = @"C_type$select.epoll" +ext_argtype(#11507, 0, #11508) +ext_argtype(#11507, 1, #10005) +ext_argtype(#10927, 0, #11508) +ext_argtype(#10928, 0, #11508) +ext_argtype(#10929, 0, #11508) +ext_argtype(#10929, 1, #11375) +ext_argtype(#10929, 2, #10005) +ext_argtype(#10930, 0, #11508) +ext_argtype(#10930, 1, #11375) +ext_argtype(#10930, 2, #10005) +ext_argtype(#10931, 0, #11508) +ext_argtype(#10931, 1, #11375) +ext_argtype(#10932, 0, #11508) +ext_argtype(#10932, 1, #10038) +ext_argtype(#10932, 2, #10005) +#11509 = @"C_type$_io.BytesIO" +ext_argtype(#10933, 0, #11509) +ext_argtype(#10934, 0, #11509) +ext_argtype(#10935, 0, #11509) +ext_argtype(#10936, 0, #11509) +ext_argtype(#10937, 0, #11509) +ext_argtype(#10938, 0, #11509) +ext_argtype(#10939, 0, #11509) +ext_argtype(#10940, 0, #11509) +ext_argtype(#10940, 1, #11375) +ext_argtype(#10941, 0, #11509) +ext_argtype(#10941, 1, #11375) +ext_argtype(#10942, 0, #11509) +ext_argtype(#10942, 1, #11375) +ext_argtype(#10943, 0, #11509) +ext_argtype(#10943, 1, #11377) +ext_argtype(#10944, 0, #11509) +ext_argtype(#10944, 1, #11375) +ext_argtype(#10945, 0, #11509) +ext_argtype(#10945, 1, #11375) +ext_argtype(#10946, 0, #11509) +ext_argtype(#10946, 1, #11375) +ext_argtype(#10947, 0, #11509) +ext_argtype(#10948, 0, #11509) +ext_argtype(#10948, 1, #11375) +ext_argtype(#10948, 2, #10005) +ext_argtype(#10949, 0, #11509) +ext_argtype(#10949, 1, #11375) +ext_argtype(#10950, 0, #11509) +ext_argtype(#10951, 0, #11509) +ext_argtype(#10951, 1, #11375) +ext_argtype(#10952, 0, #11509) +#11510 = @"C_type$_io._BufferedIOBase$detach" +#11511 = @"C_type$_io._BufferedIOBase" +ext_argtype(#11510, 0, #11511) +#11512 = @"C_type$_io._BufferedIOBase$read" +ext_argtype(#11512, 0, #11511) +#11513 = @"C_type$_io._BufferedIOBase$read1" +ext_argtype(#11513, 0, #11511) +ext_argtype(#10953, 0, #11511) +#11514 = @"C_type$_io._BufferedIOBase$write" +ext_argtype(#11514, 0, #11511) +#11515 = @"C_type$_io.BufferedReader$detach" +#11516 = @"C_type$_io.BufferedReader" +ext_argtype(#11515, 0, #11516) +#11517 = @"C_type$_io.BufferedReader$flush" +ext_argtype(#11517, 0, #11516) +ext_argtype(#10954, 0, #11516) +#11518 = @"C_type$_io.BufferedReader$seekable" +ext_argtype(#11518, 0, #11516) +#11519 = @"C_type$_io.BufferedReader$readable" +ext_argtype(#11519, 0, #11516) +#11520 = @"C_type$_io.BufferedReader$writable" +ext_argtype(#11520, 0, #11516) +#11521 = @"C_type$_io.BufferedReader$fileno" +ext_argtype(#11521, 0, #11516) +#11522 = @"C_type$_io.BufferedReader$isatty" +ext_argtype(#11522, 0, #11516) +ext_argtype(#10955, 0, #11516) +ext_argtype(#10956, 0, #11516) +ext_argtype(#10957, 0, #11516) +ext_argtype(#10958, 0, #11516) +ext_argtype(#10959, 0, #11516) +ext_argtype(#10960, 0, #11516) +ext_argtype(#10961, 0, #11516) +ext_argtype(#10962, 0, #11516) +#11523 = @"C_type$_io.BufferedRandom" +ext_argtype(#10963, 0, #11523) +#11524 = @"C_type$_io.BufferedRandom$detach" +ext_argtype(#11524, 0, #11523) +#11525 = @"C_type$_io.BufferedRandom$seekable" +ext_argtype(#11525, 0, #11523) +#11526 = @"C_type$_io.BufferedRandom$readable" +ext_argtype(#11526, 0, #11523) +#11527 = @"C_type$_io.BufferedRandom$writable" +ext_argtype(#11527, 0, #11523) +#11528 = @"C_type$_io.BufferedRandom$fileno" +ext_argtype(#11528, 0, #11523) +#11529 = @"C_type$_io.BufferedRandom$isatty" +ext_argtype(#11529, 0, #11523) +ext_argtype(#10964, 0, #11523) +ext_argtype(#10965, 0, #11523) +ext_argtype(#10966, 0, #11523) +ext_argtype(#10967, 0, #11523) +ext_argtype(#10968, 0, #11523) +ext_argtype(#10969, 0, #11523) +ext_argtype(#10970, 0, #11523) +ext_argtype(#10971, 0, #11523) +ext_argtype(#10972, 0, #11523) +ext_argtype(#10973, 0, #11523) +ext_argtype(#10974, 0, #11523) +#11530 = @"C_type$_io.BufferedWriter" +ext_argtype(#10975, 0, #11530) +#11531 = @"C_type$_io.BufferedWriter$detach" +ext_argtype(#11531, 0, #11530) +#11532 = @"C_type$_io.BufferedWriter$seekable" +ext_argtype(#11532, 0, #11530) +#11533 = @"C_type$_io.BufferedWriter$readable" +ext_argtype(#11533, 0, #11530) +#11534 = @"C_type$_io.BufferedWriter$writable" +ext_argtype(#11534, 0, #11530) +#11535 = @"C_type$_io.BufferedWriter$fileno" +ext_argtype(#11535, 0, #11530) +#11536 = @"C_type$_io.BufferedWriter$isatty" +ext_argtype(#11536, 0, #11530) +ext_argtype(#10976, 0, #11530) +ext_argtype(#10977, 0, #11530) +ext_argtype(#10978, 0, #11530) +ext_argtype(#10979, 0, #11530) +ext_argtype(#10980, 0, #11530) +ext_argtype(#10981, 0, #11530) +#11537 = @"C_type$_io.BufferedRWPair$read" +#11538 = @"C_type$_io.BufferedRWPair" +ext_argtype(#11537, 0, #11538) +#11539 = @"C_type$_io.BufferedRWPair$peek" +ext_argtype(#11539, 0, #11538) +#11540 = @"C_type$_io.BufferedRWPair$read1" +ext_argtype(#11540, 0, #11538) +#11541 = @"C_type$_io.BufferedRWPair$readinto" +ext_argtype(#11541, 0, #11538) +#11542 = @"C_type$_io.BufferedRWPair$write" +ext_argtype(#11542, 0, #11538) +#11543 = @"C_type$_io.BufferedRWPair$flush" +ext_argtype(#11543, 0, #11538) +#11544 = @"C_type$_io.BufferedRWPair$readable" +ext_argtype(#11544, 0, #11538) +#11545 = @"C_type$_io.BufferedRWPair$writable" +ext_argtype(#11545, 0, #11538) +#11546 = @"C_type$_io.BufferedRWPair$close" +ext_argtype(#11546, 0, #11538) +#11547 = @"C_type$_io.BufferedRWPair$isatty" +ext_argtype(#11547, 0, #11538) +#11548 = @"C_type$_io._IOBase$seek" +#11549 = @"C_type$_io._IOBase" +ext_argtype(#11548, 0, #11549) +#11550 = @"C_type$_io._IOBase$tell" +ext_argtype(#11550, 0, #11549) +#11551 = @"C_type$_io._IOBase$truncate" +ext_argtype(#11551, 0, #11549) +ext_argtype(#10982, 0, #11549) +ext_argtype(#10983, 0, #11549) +ext_argtype(#10984, 0, #11549) +ext_argtype(#10985, 0, #11549) +ext_argtype(#10986, 0, #11549) +ext_argtype(#10987, 0, #11549) +#11552 = @"C_type$_io._IOBase$_checkSeekable" +ext_argtype(#11552, 0, #11549) +#11553 = @"C_type$_io._IOBase$_checkReadable" +ext_argtype(#11553, 0, #11549) +#11554 = @"C_type$_io._IOBase$_checkWritable" +ext_argtype(#11554, 0, #11549) +#11555 = @"C_type$_io._IOBase$fileno" +ext_argtype(#11555, 0, #11549) +ext_argtype(#10988, 0, #11549) +#11556 = @"C_type$_io._IOBase$__enter__" +ext_argtype(#11556, 0, #11549) +#11557 = @"C_type$_io._IOBase$__exit__" +ext_argtype(#11557, 0, #11549) +ext_argtype(#10989, 0, #11549) +ext_argtype(#10990, 0, #11549) +ext_argtype(#10991, 0, #11549) +#11558 = @"C_type$_io._RawIOBase" +ext_argtype(#10992, 0, #11558) +ext_argtype(#10993, 0, #11558) +#11559 = @"C_type$_io.StringIO" +ext_argtype(#10994, 0, #11559) +ext_argtype(#10995, 0, #11559) +ext_argtype(#10996, 0, #11559) +ext_argtype(#10997, 0, #11559) +ext_argtype(#10998, 0, #11559) +ext_argtype(#10999, 0, #11559) +ext_argtype(#11000, 0, #11559) +ext_argtype(#11001, 0, #11559) +ext_argtype(#11001, 1, #11375) +ext_argtype(#11002, 0, #11559) +ext_argtype(#11003, 0, #11559) +ext_argtype(#11004, 0, #11559) +ext_argtype(#11005, 0, #11559) +ext_argtype(#11006, 0, #11559) +ext_argtype(#11006, 1, #11375) +#11560 = @"C_type$_io.FileIO" +ext_argtype(#11007, 0, #11560) +ext_argtype(#11008, 0, #11560) +ext_argtype(#11009, 0, #11560) +ext_argtype(#11010, 0, #11560) +ext_argtype(#11011, 0, #11560) +ext_argtype(#11012, 0, #11560) +#11561 = @"C_type$_io.FileIO$truncate" +ext_argtype(#11561, 0, #11560) +ext_argtype(#11013, 0, #11560) +ext_argtype(#11014, 0, #11560) +ext_argtype(#11015, 0, #11560) +ext_argtype(#11016, 0, #11560) +ext_argtype(#11017, 0, #11560) +ext_argtype(#11018, 0, #11560) +#11562 = @"C_type$_io._TextIOBase$detach" +#11563 = @"C_type$_io._TextIOBase" +ext_argtype(#11562, 0, #11563) +#11564 = @"C_type$_io._TextIOBase$read" +ext_argtype(#11564, 0, #11563) +#11565 = @"C_type$_io._TextIOBase$readline" +ext_argtype(#11565, 0, #11563) +#11566 = @"C_type$_io._TextIOBase$write" +ext_argtype(#11566, 0, #11563) +#11567 = @"C_type$_io.IncrementalNewlineDecoder$decode" +#11568 = @"C_type$_io.IncrementalNewlineDecoder" +ext_argtype(#11567, 0, #11568) +ext_argtype(#11019, 0, #11568) +ext_argtype(#11020, 0, #11568) +ext_argtype(#11020, 1, #11375) +ext_argtype(#11021, 0, #11568) +#11569 = @"C_type$_io.TextIOWrapper$detach" +#11570 = @"C_type$_io.TextIOWrapper" +ext_argtype(#11569, 0, #11570) +ext_argtype(#11022, 0, #11570) +ext_argtype(#11023, 0, #11570) +#11571 = @"C_type$_io.TextIOWrapper$readline" +ext_argtype(#11571, 0, #11570) +#11572 = @"C_type$_io.TextIOWrapper$flush" +ext_argtype(#11572, 0, #11570) +ext_argtype(#11024, 0, #11570) +#11573 = @"C_type$_io.TextIOWrapper$fileno" +ext_argtype(#11573, 0, #11570) +#11574 = @"C_type$_io.TextIOWrapper$seekable" +ext_argtype(#11574, 0, #11570) +#11575 = @"C_type$_io.TextIOWrapper$readable" +ext_argtype(#11575, 0, #11570) +#11576 = @"C_type$_io.TextIOWrapper$writable" +ext_argtype(#11576, 0, #11570) +#11577 = @"C_type$_io.TextIOWrapper$isatty" +ext_argtype(#11577, 0, #11570) +#11578 = @"C_type$_io.TextIOWrapper$seek" +ext_argtype(#11578, 0, #11570) +ext_argtype(#11025, 0, #11570) +#11579 = @"C_type$_io.TextIOWrapper$truncate" +ext_argtype(#11579, 0, #11570) +#11580 = @"C_type$functools.partial" +ext_argtype(#11026, 0, #11580) +ext_argtype(#11027, 0, #11580) +ext_argtype(#11027, 1, #11375) +ext_argtype(#11028, 0, #10511) +ext_argtype(#11028, 1, #10024) +ext_argtype(#11028, 1, #10218) +ext_argtype(#11028, 2, #10005) +ext_argtype(#11029, 0, #10511) +ext_argtype(#11029, 1, #11375) +ext_argtype(#11030, 0, #10511) +ext_argtype(#11030, 1, #10024) +ext_argtype(#11030, 1, #10218) +ext_argtype(#11031, 0, #10511) +ext_argtype(#11032, 0, #10511) +ext_argtype(#11032, 1, #10024) +ext_argtype(#11032, 1, #10218) +ext_argtype(#11032, 1, #10003) +ext_argtype(#11032, 2, #10024) +ext_argtype(#11032, 2, #10218) +ext_argtype(#11033, 0, #10511) +ext_argtype(#11033, 1, #10005) +ext_argtype(#11034, 0, #10511) +ext_argtype(#11035, 0, #10511) +ext_argtype(#11035, 1, #11375) +#11581 = @"C_type$ossaudiodev.oss_audio_device$read" +ext_argtype(#11581, 0, #10543) +ext_argtype(#11581, 1, #10005) +ext_argtype(#11036, 0, #10543) +ext_argtype(#11036, 1, #10024) +ext_argtype(#11036, 1, #10218) +ext_argtype(#11037, 0, #10543) +ext_argtype(#11037, 1, #10024) +ext_argtype(#11037, 1, #10218) +ext_argtype(#11038, 0, #10543) +ext_argtype(#11039, 0, #10543) +ext_argtype(#11040, 0, #10543) +ext_argtype(#11041, 0, #10543) +ext_argtype(#11042, 0, #10543) +ext_argtype(#11043, 0, #10543) +ext_argtype(#11044, 0, #10543) +ext_argtype(#11045, 0, #10543) +ext_argtype(#11046, 0, #10543) +ext_argtype(#11047, 0, #10543) +ext_argtype(#11048, 0, #10543) +ext_argtype(#11048, 1, #10005) +ext_argtype(#11048, 2, #10005) +ext_argtype(#11048, 3, #10005) +ext_argtype(#11048, 4, #10005) +ext_argtype(#11049, 0, #10543) +ext_argtype(#11050, 0, #10543) +ext_argtype(#11051, 0, #10543) +ext_argtype(#11052, 0, #10543) +ext_argtype(#11053, 0, #10543) +ext_argtype(#11054, 0, #10545) +ext_argtype(#11055, 0, #10545) +ext_argtype(#11056, 0, #10545) +ext_argtype(#11057, 0, #10545) +ext_argtype(#11058, 0, #10545) +ext_argtype(#11059, 0, #10545) +ext_argtype(#11059, 1, #10005) +ext_argtype(#11060, 0, #10545) +ext_argtype(#11060, 1, #10005) +ext_argtype(#11060, 2, #10001) +ext_argtype(#11061, 0, #10545) +ext_argtype(#11062, 0, #10545) +#11582 = @"C_type$_ctypes.PyCArrayType$from_param" +#11583 = @"C_type$_ctypes.PyCArrayType" +ext_argtype(#11582, 0, #11583) +#11584 = @"C_type$_ctypes.PyCFuncPtrType" +ext_argtype(#11582, 0, #11584) +#11585 = @"C_type$_ctypes.PyCStructType" +ext_argtype(#11582, 0, #11585) +#11586 = @"C_type$_ctypes.UnionType" +ext_argtype(#11582, 0, #11586) +ext_argtype(#11582, 1, #11375) +#11587 = @"C_type$_ctypes.PyCArrayType$from_address" +ext_argtype(#11587, 0, #11583) +ext_argtype(#11587, 0, #11584) +ext_argtype(#11587, 0, #11585) +ext_argtype(#11587, 0, #11586) +ext_argtype(#11587, 1, #11375) +#11588 = @"C_type$_ctypes.PyCArrayType$from_buffer" +ext_argtype(#11588, 0, #11583) +ext_argtype(#11588, 0, #11584) +ext_argtype(#11588, 0, #11585) +ext_argtype(#11588, 0, #11586) +#11589 = @"C_type$_ctypes.PyCArrayType$from_buffer_copy" +ext_argtype(#11589, 0, #11583) +ext_argtype(#11589, 0, #11584) +ext_argtype(#11589, 0, #11585) +ext_argtype(#11589, 0, #11586) +#11590 = @"C_type$_ctypes.PyCArrayType$in_dll" +ext_argtype(#11590, 0, #11583) +ext_argtype(#11590, 0, #11584) +ext_argtype(#11590, 0, #11585) +ext_argtype(#11590, 0, #11586) +#11591 = @"C_type$_ctypes.PyCFuncPtrType$from_param" +ext_argtype(#11591, 0, #11583) +ext_argtype(#11591, 0, #11584) +ext_argtype(#11591, 0, #11585) +ext_argtype(#11591, 0, #11586) +ext_argtype(#11591, 1, #11375) +#11592 = @"C_type$_ctypes.PyCFuncPtrType$from_address" +ext_argtype(#11592, 0, #11583) +ext_argtype(#11592, 0, #11584) +ext_argtype(#11592, 0, #11585) +ext_argtype(#11592, 0, #11586) +ext_argtype(#11592, 1, #11375) +#11593 = @"C_type$_ctypes.PyCFuncPtrType$from_buffer" +ext_argtype(#11593, 0, #11583) +ext_argtype(#11593, 0, #11584) +ext_argtype(#11593, 0, #11585) +ext_argtype(#11593, 0, #11586) +#11594 = @"C_type$_ctypes.PyCFuncPtrType$from_buffer_copy" +ext_argtype(#11594, 0, #11583) +ext_argtype(#11594, 0, #11584) +ext_argtype(#11594, 0, #11585) +ext_argtype(#11594, 0, #11586) +#11595 = @"C_type$_ctypes.PyCFuncPtrType$in_dll" +ext_argtype(#11595, 0, #11583) +ext_argtype(#11595, 0, #11584) +ext_argtype(#11595, 0, #11585) +ext_argtype(#11595, 0, #11586) +#11596 = @"C_type$_ctypes.PyCStructType$from_param" +ext_argtype(#11596, 0, #11583) +ext_argtype(#11596, 0, #11584) +ext_argtype(#11596, 0, #11585) +ext_argtype(#11596, 0, #11586) +ext_argtype(#11596, 1, #11375) +#11597 = @"C_type$_ctypes.PyCStructType$from_address" +ext_argtype(#11597, 0, #11583) +ext_argtype(#11597, 0, #11584) +ext_argtype(#11597, 0, #11585) +ext_argtype(#11597, 0, #11586) +ext_argtype(#11597, 1, #11375) +#11598 = @"C_type$_ctypes.PyCStructType$from_buffer" +ext_argtype(#11598, 0, #11583) +ext_argtype(#11598, 0, #11584) +ext_argtype(#11598, 0, #11585) +ext_argtype(#11598, 0, #11586) +#11599 = @"C_type$_ctypes.PyCStructType$from_buffer_copy" +ext_argtype(#11599, 0, #11583) +ext_argtype(#11599, 0, #11584) +ext_argtype(#11599, 0, #11585) +ext_argtype(#11599, 0, #11586) +#11600 = @"C_type$_ctypes.PyCStructType$in_dll" +ext_argtype(#11600, 0, #11583) +ext_argtype(#11600, 0, #11584) +ext_argtype(#11600, 0, #11585) +ext_argtype(#11600, 0, #11586) +#11601 = @"C_type$_ctypes.UnionType$from_param" +ext_argtype(#11601, 0, #11583) +ext_argtype(#11601, 0, #11584) +ext_argtype(#11601, 0, #11585) +ext_argtype(#11601, 0, #11586) +ext_argtype(#11601, 1, #11375) +#11602 = @"C_type$_ctypes.UnionType$from_address" +ext_argtype(#11602, 0, #11583) +ext_argtype(#11602, 0, #11584) +ext_argtype(#11602, 0, #11585) +ext_argtype(#11602, 0, #11586) +ext_argtype(#11602, 1, #11375) +#11603 = @"C_type$_ctypes.UnionType$from_buffer" +ext_argtype(#11603, 0, #11583) +ext_argtype(#11603, 0, #11584) +ext_argtype(#11603, 0, #11585) +ext_argtype(#11603, 0, #11586) +#11604 = @"C_type$_ctypes.UnionType$from_buffer_copy" +ext_argtype(#11604, 0, #11583) +ext_argtype(#11604, 0, #11584) +ext_argtype(#11604, 0, #11585) +ext_argtype(#11604, 0, #11586) +#11605 = @"C_type$_ctypes.UnionType$in_dll" +ext_argtype(#11605, 0, #11583) +ext_argtype(#11605, 0, #11584) +ext_argtype(#11605, 0, #11585) +ext_argtype(#11605, 0, #11586) +#11606 = @"C_type$_ctypes._SimpleCData$__ctypes_from_outparam__" +#11607 = @"C_type$_ctypes._SimpleCData" +ext_argtype(#11606, 0, #11607) +#11608 = @"C_type$_ctypes._CData$__ctypes_from_outparam__" +#11609 = @"C_type$_ctypes._CData" +ext_argtype(#11608, 0, #11609) +ext_argtype(#11063, 0, #11609) +ext_argtype(#11064, 0, #11609) +#11610 = @"C_type$_ctypes.PyCPointerType$from_address" +#11611 = @"C_type$_ctypes.PyCPointerType" +ext_argtype(#11610, 0, #11611) +ext_argtype(#11610, 1, #11375) +#11612 = @"C_type$_ctypes.PyCPointerType$from_buffer" +ext_argtype(#11612, 0, #11611) +#11613 = @"C_type$_ctypes.PyCPointerType$from_buffer_copy" +ext_argtype(#11613, 0, #11611) +#11614 = @"C_type$_ctypes.PyCPointerType$in_dll" +ext_argtype(#11614, 0, #11611) +ext_argtype(#11065, 0, #11611) +ext_argtype(#11065, 1, #11375) +ext_argtype(#11066, 0, #11611) +ext_argtype(#11066, 1, #11375) +#11615 = @"C_type$_ctypes.PyCSimpleType" +ext_argtype(#11067, 0, #11615) +ext_argtype(#11067, 1, #11375) +#11616 = @"C_type$_ctypes.PyCSimpleType$from_address" +ext_argtype(#11616, 0, #11615) +ext_argtype(#11616, 1, #11375) +#11617 = @"C_type$_ctypes.PyCSimpleType$from_buffer" +ext_argtype(#11617, 0, #11615) +#11618 = @"C_type$_ctypes.PyCSimpleType$from_buffer_copy" +ext_argtype(#11618, 0, #11615) +#11619 = @"C_type$_ctypes.PyCSimpleType$in_dll" +ext_argtype(#11619, 0, #11615) +#11620 = @"C_type$_lsprof.Profiler$getstats" +#11621 = @"C_type$_lsprof.Profiler" +ext_argtype(#11620, 0, #11621) +ext_argtype(#11068, 0, #11621) +ext_argtype(#11068, 1, #10005) +ext_argtype(#11068, 2, #10005) +ext_argtype(#11069, 0, #11621) +ext_argtype(#11070, 0, #11621) +ext_argtype(#11071, 0, #10575) +#11622 = @"C_type$Element$2get" +ext_argtype(#11622, 0, #10575) +ext_argtype(#11622, 1, #11375) +ext_argtype(#11622, 2, #11375) +ext_argtype(#11072, 0, #10575) +ext_argtype(#11072, 1, #11375) +ext_argtype(#11072, 2, #11375) +ext_argtype(#11073, 0, #10575) +ext_argtype(#11073, 1, #11375) +ext_argtype(#11073, 2, #11375) +ext_argtype(#11074, 0, #10575) +ext_argtype(#11074, 1, #11375) +ext_argtype(#11074, 2, #11375) +ext_argtype(#11074, 3, #11375) +ext_argtype(#11075, 0, #10575) +ext_argtype(#11075, 1, #11375) +ext_argtype(#11075, 2, #11375) +ext_argtype(#11076, 0, #10575) +ext_argtype(#11076, 1, #10575) +ext_argtype(#11077, 0, #10575) +ext_argtype(#11077, 1, #11375) +ext_argtype(#11078, 0, #10575) +ext_argtype(#11078, 1, #10005) +ext_argtype(#11078, 2, #10575) +ext_argtype(#11079, 0, #10575) +ext_argtype(#11079, 1, #10575) +#11623 = @"C_type$Element$2iter" +ext_argtype(#11623, 0, #10575) +ext_argtype(#11623, 1, #11375) +#11624 = @"C_type$Element$2itertext" +ext_argtype(#11624, 0, #10575) +#11625 = @"C_type$Element$2iterfind" +ext_argtype(#11625, 0, #10575) +ext_argtype(#11625, 1, #11375) +ext_argtype(#11625, 2, #11375) +#11626 = @"C_type$Element$2getiterator" +ext_argtype(#11626, 0, #10575) +ext_argtype(#11626, 1, #11375) +ext_argtype(#11080, 0, #10575) +ext_argtype(#11081, 0, #10575) +ext_argtype(#11082, 0, #10575) +ext_argtype(#11083, 0, #10575) +ext_argtype(#11083, 1, #11375) +ext_argtype(#11083, 2, #11375) +ext_argtype(#11084, 0, #10575) +ext_argtype(#11085, 0, #10575) +ext_argtype(#11085, 1, #11375) +ext_argtype(#11086, 0, #10575) +ext_argtype(#11087, 0, #10578) +ext_argtype(#11087, 1, #11375) +ext_argtype(#11088, 0, #10578) +ext_argtype(#11088, 1, #11375) +ext_argtype(#11088, 2, #11375) +#11627 = @"C_type$TreeBuilder$2end" +ext_argtype(#11627, 0, #10578) +ext_argtype(#11627, 1, #11375) +ext_argtype(#11089, 0, #10578) +ext_argtype(#11089, 1, #11375) +ext_argtype(#11089, 2, #11375) +ext_argtype(#11090, 0, #10578) +ext_argtype(#11091, 0, #10580) +ext_argtype(#11091, 1, #10024) +ext_argtype(#11091, 1, #10218) +ext_argtype(#11092, 0, #10580) +ext_argtype(#11093, 0, #10580) +ext_argtype(#11093, 1, #11375) +ext_argtype(#11094, 0, #10580) +ext_argtype(#11094, 1, #10021) +ext_argtype(#11094, 2, #11375) +#11628 = @"C_type$datetime.timedelta$total_seconds" +#11629 = @"C_type$datetime.timedelta" +ext_argtype(#11628, 0, #11629) +ext_argtype(#11095, 0, #11629) +#11630 = @"C_type$datetime.time$isoformat" +#11631 = @"C_type$datetime.time" +ext_argtype(#11630, 0, #11631) +#11632 = @"C_type$datetime.time$strftime" +ext_argtype(#11632, 0, #11631) +ext_argtype(#11096, 0, #11631) +ext_argtype(#11097, 0, #11631) +ext_argtype(#11098, 0, #11631) +ext_argtype(#11099, 0, #11631) +#11633 = @"C_type$datetime.time$replace" +ext_argtype(#11633, 0, #11631) +ext_argtype(#11100, 0, #11631) +#11634 = @"C_type$datetime.tzinfo$tzname" +#11635 = @"C_type$datetime.tzinfo" +ext_argtype(#11634, 0, #11635) +ext_argtype(#11634, 1, #11375) +#11636 = @"C_type$datetime.tzinfo$utcoffset" +ext_argtype(#11636, 0, #11635) +ext_argtype(#11636, 1, #11375) +#11637 = @"C_type$datetime.tzinfo$dst" +ext_argtype(#11637, 0, #11635) +ext_argtype(#11637, 1, #11375) +#11638 = @"C_type$datetime.tzinfo$fromutc" +ext_argtype(#11638, 0, #11635) +ext_argtype(#11638, 1, #11375) +ext_argtype(#11101, 0, #11635) +#11639 = @"C_type$datetime.datetime$now" +#11640 = @"C_type$datetime.datetime" +ext_argtype(#11639, 0, #11640) +#11641 = @"C_type$datetime.datetime$utcnow" +ext_argtype(#11641, 0, #11640) +#11642 = @"C_type$datetime.datetime$fromtimestamp" +ext_argtype(#11642, 0, #11640) +#11643 = @"C_type$datetime.datetime$utcfromtimestamp" +ext_argtype(#11643, 0, #11640) +#11644 = @"C_type$datetime.datetime$strptime" +ext_argtype(#11644, 0, #11640) +#11645 = @"C_type$datetime.datetime$combine" +ext_argtype(#11645, 0, #11640) +#11646 = @"C_type$datetime.datetime$date" +ext_argtype(#11646, 0, #11640) +#11647 = @"C_type$datetime.datetime$time" +ext_argtype(#11647, 0, #11640) +#11648 = @"C_type$datetime.datetime$timetz" +ext_argtype(#11648, 0, #11640) +ext_argtype(#11102, 0, #11640) +#11649 = @"C_type$datetime.datetime$timetuple" +ext_argtype(#11649, 0, #11640) +#11650 = @"C_type$datetime.datetime$utctimetuple" +ext_argtype(#11650, 0, #11640) +#11651 = @"C_type$datetime.datetime$isoformat" +ext_argtype(#11651, 0, #11640) +ext_argtype(#11103, 0, #11640) +ext_argtype(#11104, 0, #11640) +ext_argtype(#11105, 0, #11640) +#11652 = @"C_type$datetime.datetime$replace" +ext_argtype(#11652, 0, #11640) +#11653 = @"C_type$datetime.datetime$astimezone" +ext_argtype(#11653, 0, #11640) +ext_argtype(#11106, 0, #11640) +#11654 = @"C_type$datetime.date$fromtimestamp" +#11655 = @"C_type$datetime.date" +ext_argtype(#11654, 0, #11655) +#11656 = @"C_type$datetime.date$fromordinal" +ext_argtype(#11656, 0, #11655) +#11657 = @"C_type$datetime.date$today" +ext_argtype(#11657, 0, #11655) +ext_argtype(#11107, 0, #11655) +#11658 = @"C_type$datetime.date$strftime" +ext_argtype(#11658, 0, #11655) +ext_argtype(#11108, 0, #11655) +#11659 = @"C_type$datetime.date$timetuple" +ext_argtype(#11659, 0, #11655) +ext_argtype(#11109, 0, #11655) +ext_argtype(#11110, 0, #11655) +ext_argtype(#11111, 0, #11655) +ext_argtype(#11112, 0, #11655) +ext_argtype(#11113, 0, #11655) +#11660 = @"C_type$datetime.date$replace" +ext_argtype(#11660, 0, #11655) +ext_argtype(#11114, 0, #11655) +#11661 = @"C_type$_ast.AST" +ext_argtype(#11115, 0, #11661) +#11662 = @"C_type$imp.NullImporter" +ext_argtype(#11116, 0, #11662) +ext_argtype(#11117, 0, #11119) +#11663 = @"C_type$xrange" +ext_argtype(#11118, 0, #11663) +ext_argtype(#11120, 0, #11663) +#11664 = @"C_type$reversed" +ext_argtype(#11121, 0, #11664) +ext_argtype(#11122, 0, #10024) +ext_argtype(#11122, 1, #11375) +ext_argtype(#11123, 0, #10024) +ext_argtype(#11124, 0, #10024) +ext_argtype(#11125, 0, #10024) +ext_argtype(#11126, 0, #10024) +ext_argtype(#11127, 0, #10024) +ext_argtype(#11128, 0, #10024) +ext_argtype(#11129, 0, #10024) +ext_argtype(#11130, 0, #10024) +ext_argtype(#11131, 0, #10024) +ext_argtype(#11132, 0, #10024) +ext_argtype(#11133, 0, #10024) +ext_argtype(#11134, 0, #10024) +ext_argtype(#11135, 0, #10024) +ext_argtype(#11136, 0, #10024) +ext_argtype(#11137, 0, #10024) +ext_argtype(#11137, 1, #11375) +ext_argtype(#11138, 0, #10024) +ext_argtype(#11139, 0, #10024) +ext_argtype(#11140, 0, #10024) +ext_argtype(#11141, 0, #10024) +ext_argtype(#11142, 0, #10024) +ext_argtype(#11143, 0, #10024) +ext_argtype(#11144, 0, #10024) +ext_argtype(#11145, 0, #10024) +ext_argtype(#11145, 1, #11375) +ext_argtype(#11146, 0, #10024) +ext_argtype(#11147, 0, #10024) +ext_argtype(#11148, 0, #10024) +ext_argtype(#11149, 0, #10024) +ext_argtype(#11150, 0, #10024) +ext_argtype(#11151, 0, #10024) +ext_argtype(#11152, 0, #10024) +ext_argtype(#11153, 0, #10024) +ext_argtype(#11154, 0, #10024) +#11665 = @"C_type$str$2format" +ext_argtype(#11665, 0, #10024) +ext_argtype(#11155, 0, #10024) +ext_argtype(#11156, 0, #10024) +ext_argtype(#11157, 0, #10024) +#11666 = @"C_type$str$2encode" +ext_argtype(#11666, 0, #10024) +#11667 = @"C_type$str$2decode" +ext_argtype(#11667, 0, #10024) +ext_argtype(#11159, 0, #10024) +ext_argtype(#11160, 0, #10024) +ext_argtype(#11161, 0, #10024) +ext_argtype(#11162, 0, #10024) +ext_argtype(#11163, 0, #10602) +#11668 = @"C_type$exceptions.BaseException" +ext_argtype(#11164, 0, #11668) +ext_argtype(#11165, 0, #11668) +ext_argtype(#11165, 1, #11375) +ext_argtype(#11166, 0, #11668) +#11669 = @"C_type$exceptions.EnvironmentError" +ext_argtype(#11167, 0, #11669) +ext_argtype(#11168, 0, #10250) +#11670 = @"C_type$file$2read" +ext_argtype(#11670, 0, #10250) +ext_argtype(#11169, 0, #10250) +ext_argtype(#11170, 0, #10250) +ext_argtype(#11171, 0, #10250) +ext_argtype(#11172, 0, #10250) +ext_argtype(#11173, 0, #10250) +ext_argtype(#11174, 0, #10250) +ext_argtype(#11175, 0, #10250) +ext_argtype(#11176, 0, #10250) +ext_argtype(#11177, 0, #10250) +ext_argtype(#11177, 1, #11375) +ext_argtype(#11178, 0, #10250) +ext_argtype(#11179, 0, #10250) +ext_argtype(#11180, 0, #10250) +ext_argtype(#11181, 0, #10250) +ext_argtype(#11182, 0, #10250) +ext_argtype(#11183, 0, #10005) +ext_argtype(#11184, 0, #10005) +ext_argtype(#11185, 0, #10005) +ext_argtype(#11186, 0, #10005) +ext_argtype(#11187, 0, #10005) +ext_argtype(#11187, 1, #11375) +#11671 = @"C_type$listiterator" +ext_argtype(#11188, 0, #11671) +ext_argtype(#11189, 0, #11192) +ext_argtype(#11190, 0, #10021) +ext_argtype(#11190, 1, #11375) +ext_argtype(#11191, 0, #10021) +ext_argtype(#11193, 0, #10021) +ext_argtype(#11194, 0, #10021) +ext_argtype(#11194, 1, #11375) +ext_argtype(#11195, 0, #10021) +ext_argtype(#11195, 1, #10005) +ext_argtype(#11195, 2, #11375) +ext_argtype(#11196, 0, #10021) +ext_argtype(#11196, 1, #11375) +#11672 = @"C_type$list$2pop" +ext_argtype(#11672, 0, #10021) +ext_argtype(#11672, 1, #10005) +ext_argtype(#11197, 0, #10021) +ext_argtype(#11197, 1, #11375) +ext_argtype(#11198, 0, #10021) +ext_argtype(#11198, 1, #11375) +ext_argtype(#11198, 2, #11375) +ext_argtype(#11198, 3, #11375) +ext_argtype(#11199, 0, #10021) +ext_argtype(#11199, 1, #11375) +ext_argtype(#11200, 0, #10021) +ext_argtype(#11201, 0, #10021) +ext_argtype(#11201, 1, #11375) +ext_argtype(#11201, 2, #11375) +ext_argtype(#11201, 3, #10005) +#11673 = @"C_type$slice" +ext_argtype(#11202, 0, #11673) +ext_argtype(#11202, 1, #11375) +ext_argtype(#11203, 0, #11673) +#11674 = @"C_type$dictionary-keyiterator" +ext_argtype(#11204, 0, #11674) +#11675 = @"C_type$dictionary-valueiterator" +ext_argtype(#11204, 0, #11675) +#11676 = @"C_type$dictionary-itemiterator" +ext_argtype(#11204, 0, #11676) +ext_argtype(#11205, 0, #11674) +ext_argtype(#11205, 0, #11675) +ext_argtype(#11205, 0, #11676) +ext_argtype(#11206, 0, #11674) +ext_argtype(#11206, 0, #11675) +ext_argtype(#11206, 0, #11676) +ext_argtype(#11207, 0, #10007) +ext_argtype(#11207, 1, #11375) +#11677 = @"C_type$dict$2__getitem__" +ext_argtype(#11677, 0, #10007) +ext_argtype(#11677, 1, #11375) +ext_argtype(#11208, 0, #10007) +ext_argtype(#11209, 0, #10007) +ext_argtype(#11209, 1, #11375) +#11678 = @"C_type$dict$2get" +ext_argtype(#11678, 0, #10007) +#11679 = @"C_type$dict$2setdefault" +ext_argtype(#11679, 0, #10007) +#11680 = @"C_type$dict$2pop" +ext_argtype(#11680, 0, #10007) +ext_argtype(#11210, 0, #10007) +ext_argtype(#11211, 0, #10007) +ext_argtype(#11212, 0, #10007) +ext_argtype(#11213, 0, #10007) +#11681 = @"C_type$dict$2viewkeys" +ext_argtype(#11681, 0, #10007) +#11682 = @"C_type$dict$2viewitems" +ext_argtype(#11682, 0, #10007) +#11683 = @"C_type$dict$2viewvalues" +ext_argtype(#11683, 0, #10007) +ext_argtype(#11214, 0, #10007) +#11684 = @"C_type$dict$2fromkeys" +ext_argtype(#11684, 0, #10007) +ext_argtype(#11215, 0, #10007) +ext_argtype(#11216, 0, #10007) +#11685 = @"C_type$dict$2iterkeys" +ext_argtype(#11685, 0, #10007) +#11686 = @"C_type$dict$2itervalues" +ext_argtype(#11686, 0, #10007) +#11687 = @"C_type$dict$2iteritems" +ext_argtype(#11687, 0, #10007) +#11688 = @"C_type$long" +ext_argtype(#11217, 0, #11688) +ext_argtype(#11218, 0, #11688) +ext_argtype(#11219, 0, #11688) +ext_argtype(#11220, 0, #11688) +ext_argtype(#11221, 0, #11688) +ext_argtype(#11221, 1, #11375) +ext_argtype(#11222, 0, #11688) +#11689 = @"C_type$generator$2send" +#11690 = @"C_type$generator" +ext_argtype(#11689, 0, #11690) +ext_argtype(#11689, 1, #11375) +#11691 = @"C_type$generator$2throw" +ext_argtype(#11691, 0, #11690) +ext_argtype(#11223, 0, #11690) +#11692 = @"C_type$weakproxy$2__unicode__" +#11693 = @"C_type$weakproxy" +ext_argtype(#11692, 0, #11693) +ext_argtype(#11224, 0, #10517) +ext_argtype(#11225, 0, #10517) +ext_argtype(#11226, 0, #10517) +ext_argtype(#11226, 1, #11375) +ext_argtype(#11227, 0, #10492) +ext_argtype(#11228, 0, #10492) +ext_argtype(#11229, 0, #10492) +ext_argtype(#11229, 1, #11375) +ext_argtype(#11230, 0, #10492) +ext_argtype(#11230, 1, #11375) +ext_argtype(#11231, 0, #11375) +ext_argtype(#11231, 1, #10005) +ext_argtype(#11232, 0, #11375) +ext_argtype(#11232, 1, #10005) +#11694 = @"C_type$object$2__subclasshook__" +ext_argtype(#11694, 0, #11375) +ext_argtype(#11233, 0, #11375) +ext_argtype(#11233, 1, #11375) +ext_argtype(#11234, 0, #11375) +#11695 = @"C_type$setiterator" +ext_argtype(#11235, 0, #11695) +ext_argtype(#11236, 0, #11239) +ext_argtype(#11236, 1, #11375) +ext_argtype(#11237, 0, #11239) +ext_argtype(#11240, 0, #11239) +ext_argtype(#11241, 0, #11239) +ext_argtype(#11242, 0, #11239) +ext_argtype(#11242, 1, #11375) +ext_argtype(#11243, 0, #11239) +ext_argtype(#11243, 1, #11375) +ext_argtype(#11244, 0, #11239) +ext_argtype(#11244, 1, #11375) +ext_argtype(#11245, 0, #11239) +ext_argtype(#11246, 0, #11239) +ext_argtype(#11247, 0, #11239) +ext_argtype(#11247, 1, #11375) +ext_argtype(#11248, 0, #11239) +ext_argtype(#11249, 0, #11238) +ext_argtype(#11249, 1, #11375) +ext_argtype(#11250, 0, #11238) +ext_argtype(#11251, 0, #11238) +ext_argtype(#11251, 1, #11375) +ext_argtype(#11252, 0, #11238) +ext_argtype(#11253, 0, #11238) +ext_argtype(#11253, 1, #11375) +ext_argtype(#11254, 0, #11238) +ext_argtype(#11255, 0, #11238) +ext_argtype(#11256, 0, #11238) +ext_argtype(#11257, 0, #11238) +ext_argtype(#11258, 0, #11238) +ext_argtype(#11258, 1, #11375) +ext_argtype(#11259, 0, #11238) +ext_argtype(#11259, 1, #11375) +ext_argtype(#11260, 0, #11238) +ext_argtype(#11260, 1, #11375) +#11696 = @"C_type$set$2pop" +ext_argtype(#11696, 0, #11238) +ext_argtype(#11261, 0, #11238) +ext_argtype(#11262, 0, #11238) +ext_argtype(#11262, 1, #11375) +ext_argtype(#11263, 0, #11238) +ext_argtype(#11264, 0, #11238) +ext_argtype(#11264, 1, #11375) +ext_argtype(#11265, 0, #11238) +ext_argtype(#11265, 1, #11375) +ext_argtype(#11266, 0, #11238) +ext_argtype(#11267, 0, #11238) +ext_argtype(#11268, 0, #10655) +ext_argtype(#11269, 0, #10038) +ext_argtype(#11270, 0, #10038) +ext_argtype(#11271, 0, #10038) +#11697 = @"C_type$float$2fromhex" +ext_argtype(#11697, 0, #10038) +ext_argtype(#11697, 1, #11375) +ext_argtype(#11272, 0, #10038) +ext_argtype(#11273, 0, #10038) +ext_argtype(#11274, 0, #10038) +ext_argtype(#11275, 0, #10038) +ext_argtype(#11275, 1, #11375) +ext_argtype(#11276, 0, #10038) +ext_argtype(#11276, 1, #10024) +ext_argtype(#11276, 1, #10218) +ext_argtype(#11276, 2, #10024) +ext_argtype(#11276, 2, #10218) +ext_argtype(#11277, 0, #10038) +ext_argtype(#11277, 1, #11375) +#11698 = @"C_type$dictproxy" +ext_argtype(#11278, 0, #11698) +ext_argtype(#11278, 1, #11375) +#11699 = @"C_type$dictproxy$2get" +ext_argtype(#11699, 0, #11698) +#11700 = @"C_type$dictproxy$2keys" +ext_argtype(#11700, 0, #11698) +#11701 = @"C_type$dictproxy$2values" +ext_argtype(#11701, 0, #11698) +#11702 = @"C_type$dictproxy$2items" +ext_argtype(#11702, 0, #11698) +#11703 = @"C_type$dictproxy$2iterkeys" +ext_argtype(#11703, 0, #11698) +#11704 = @"C_type$dictproxy$2itervalues" +ext_argtype(#11704, 0, #11698) +#11705 = @"C_type$dictproxy$2iteritems" +ext_argtype(#11705, 0, #11698) +#11706 = @"C_type$dictproxy$2copy" +ext_argtype(#11706, 0, #11698) +#11707 = @"C_type$property$2getter" +#11708 = @"C_type$property" +ext_argtype(#11707, 0, #11708) +ext_argtype(#11707, 1, #11375) +#11709 = @"C_type$property$2setter" +ext_argtype(#11709, 0, #11708) +ext_argtype(#11709, 1, #11375) +#11710 = @"C_type$property$2deleter" +ext_argtype(#11710, 0, #11708) +ext_argtype(#11710, 1, #11375) +#11711 = @"C_type$bytearray_iterator" +ext_argtype(#11279, 0, #11711) +ext_argtype(#11280, 0, #11285) +ext_argtype(#11281, 0, #11285) +ext_argtype(#11282, 0, #11285) +ext_argtype(#11283, 0, #11285) +ext_argtype(#11283, 1, #11375) +ext_argtype(#11284, 0, #11285) +ext_argtype(#11286, 0, #11285) +ext_argtype(#11287, 0, #11285) +#11712 = @"C_type$bytearray$2decode" +ext_argtype(#11712, 0, #11285) +ext_argtype(#11288, 0, #11285) +ext_argtype(#11289, 0, #11285) +ext_argtype(#11290, 0, #11285) +ext_argtype(#11290, 1, #11375) +ext_argtype(#11291, 0, #11285) +ext_argtype(#11292, 0, #11285) +ext_argtype(#11293, 0, #11285) +ext_argtype(#11294, 0, #11285) +ext_argtype(#11295, 0, #11285) +ext_argtype(#11296, 0, #11285) +ext_argtype(#11297, 0, #11285) +ext_argtype(#11298, 0, #11285) +ext_argtype(#11299, 0, #11285) +ext_argtype(#11300, 0, #11285) +ext_argtype(#11301, 0, #11285) +ext_argtype(#11302, 0, #11285) +ext_argtype(#11302, 1, #11375) +ext_argtype(#11303, 0, #11285) +ext_argtype(#11304, 0, #11285) +ext_argtype(#11305, 0, #11285) +ext_argtype(#11306, 0, #11285) +ext_argtype(#11306, 1, #11375) +ext_argtype(#11307, 0, #11285) +ext_argtype(#11308, 0, #11285) +ext_argtype(#11308, 1, #11375) +ext_argtype(#11309, 0, #11285) +ext_argtype(#11310, 0, #11285) +ext_argtype(#11311, 0, #11285) +ext_argtype(#11312, 0, #11285) +ext_argtype(#11313, 0, #11285) +ext_argtype(#11314, 0, #11285) +ext_argtype(#11314, 1, #11375) +ext_argtype(#11315, 0, #11285) +ext_argtype(#11316, 0, #11285) +ext_argtype(#11317, 0, #11285) +ext_argtype(#11318, 0, #11285) +ext_argtype(#11319, 0, #11285) +ext_argtype(#11320, 0, #11285) +ext_argtype(#11321, 0, #11285) +ext_argtype(#11322, 0, #11285) +ext_argtype(#11323, 0, #11285) +ext_argtype(#11324, 0, #11285) +ext_argtype(#11325, 0, #11285) +#11713 = @"C_type$unicode$2encode" +ext_argtype(#11713, 0, #10218) +ext_argtype(#11326, 0, #10218) +ext_argtype(#11327, 0, #10218) +ext_argtype(#11328, 0, #10218) +ext_argtype(#11329, 0, #10218) +ext_argtype(#11329, 1, #11375) +ext_argtype(#11330, 0, #10218) +ext_argtype(#11331, 0, #10218) +ext_argtype(#11332, 0, #10218) +ext_argtype(#11333, 0, #10218) +ext_argtype(#11334, 0, #10218) +ext_argtype(#11335, 0, #10218) +ext_argtype(#11336, 0, #10218) +ext_argtype(#11336, 1, #11375) +ext_argtype(#11337, 0, #10218) +ext_argtype(#11338, 0, #10218) +ext_argtype(#11339, 0, #10218) +ext_argtype(#11340, 0, #10218) +#11714 = @"C_type$unicode$2decode" +ext_argtype(#11714, 0, #10218) +ext_argtype(#11341, 0, #10218) +ext_argtype(#11342, 0, #10218) +ext_argtype(#11343, 0, #10218) +ext_argtype(#11344, 0, #10218) +ext_argtype(#11345, 0, #10218) +ext_argtype(#11345, 1, #11375) +ext_argtype(#11346, 0, #10218) +ext_argtype(#11347, 0, #10218) +ext_argtype(#11348, 0, #10218) +#11715 = @"C_type$unicode$2translate" +ext_argtype(#11715, 0, #10218) +ext_argtype(#11715, 1, #11375) +ext_argtype(#11349, 0, #10218) +ext_argtype(#11350, 0, #10218) +ext_argtype(#11351, 0, #10218) +ext_argtype(#11352, 0, #10218) +ext_argtype(#11353, 0, #10218) +ext_argtype(#11354, 0, #10218) +ext_argtype(#11355, 0, #10218) +ext_argtype(#11356, 0, #10218) +ext_argtype(#11357, 0, #10218) +ext_argtype(#11358, 0, #10218) +ext_argtype(#11359, 0, #10218) +ext_argtype(#11360, 0, #10218) +ext_argtype(#11361, 0, #10218) +#11716 = @"C_type$unicode$2format" +ext_argtype(#11716, 0, #10218) +ext_argtype(#11362, 0, #10218) +ext_argtype(#11363, 0, #10218) +ext_argtype(#11364, 0, #10218) +ext_argtype(#11365, 0, #10218) +ext_argtype(#11366, 0, #10218) +#11717 = @"C_type$EncodingMap" +ext_argtype(#11367, 0, #11717) +#11718 = @"C_type$memoryview" +ext_argtype(#11368, 0, #11718) +ext_argtype(#11369, 0, #11718) +#11719 = @"C_type$tupleiterator" +ext_argtype(#11370, 0, #11719) +ext_argtype(#11371, 0, #10001) +ext_argtype(#11372, 0, #10001) +ext_argtype(#11373, 0, #10001) +ext_argtype(#11373, 1, #11375) +ext_argtype(#11373, 2, #11375) +ext_argtype(#11373, 3, #11375) +ext_argtype(#11374, 0, #10001) +ext_argtype(#11374, 1, #11375) +ext_argreturn(#11428, 1) +ext_argreturn(#11429, 1) +ext_argreturn(#11608, 0) +#11720 = @"C_type$_multiprocessing.Connection$closed" +ext_proptype(#11720, #10058) +#11721 = @"C_type$_multiprocessing.Connection$readable" +ext_proptype(#11721, #10058) +#11722 = @"C_type$_multiprocessing.Connection$writable" +ext_proptype(#11722, #10058) +#11723 = @"C_type$_ssl._SSLContext$check_hostname" +ext_proptype(#11723, #10058) +#11724 = @"C_type$_ssl._SSLContext$options" +ext_proptype(#11724, #10005) +#11725 = @"C_type$_ssl._SSLContext$verify_flags" +ext_proptype(#11725, #10005) +#11726 = @"C_type$_ssl._SSLContext$verify_mode" +ext_proptype(#11726, #10005) +#11727 = @"C_type$_sre.SRE_Match$lastindex" +ext_proptype(#11727, #10005) +ext_proptype(#11727, #10003) +#11728 = @"C_type$_sre.SRE_Match$lastgroup" +ext_proptype(#11728, #10003) +#11729 = @"C_type$_sre.SRE_Match$regs" +ext_proptype(#11729, #10001) +#11730 = @"C_type$MultibyteIncrementalEncoder$2errors" +ext_proptype(#11730, #10024) +#11731 = @"C_type$MultibyteIncrementalDecoder$2errors" +ext_proptype(#11731, #10024) +#11732 = @"C_type$MultibyteStreamReader$2errors" +ext_proptype(#11732, #10024) +#11733 = @"C_type$MultibyteStreamWriter$2errors" +ext_proptype(#11733, #10024) +#11734 = @"C_type$collections.deque$maxlen" +ext_proptype(#11734, #10005) +ext_proptype(#11734, #10003) +#11735 = @"C_type$_csv.Dialect$escapechar" +ext_proptype(#11735, #10024) +ext_proptype(#11735, #10003) +#11736 = @"C_type$_csv.Dialect$quotechar" +ext_proptype(#11736, #10024) +ext_proptype(#11736, #10003) +#11737 = @"C_type$_csv.Dialect$quoting" +ext_proptype(#11737, #10005) +#11738 = @"C_type$array.array$typecode" +ext_proptype(#11738, #10024) +#11739 = @"C_type$array.array$itemsize" +ext_proptype(#11739, #10005) +#11740 = @"C_type$cStringIO.StringO$closed" +ext_proptype(#11740, #10058) +#11741 = @"C_type$cStringIO.StringI$closed" +ext_proptype(#11741, #10058) +#11742 = @"C_type$Struct$2size" +ext_proptype(#11742, #10005) +#11743 = @"C_type$xxsubtype.spamlist$state" +ext_proptype(#11743, #10005) +#11744 = @"C_type$_hashlib.HASH$digest_size" +ext_proptype(#11744, #10005) +#11745 = @"C_type$_hashlib.HASH$block_size" +ext_proptype(#11745, #10005) +#11746 = @"C_type$_hashlib.HASH$digestsize" +ext_proptype(#11746, #10005) +#11747 = @"C_type$bz2.BZ2File$closed" +ext_proptype(#11747, #10005) +#11748 = @"C_type$bz2.BZ2File$newlines" +ext_proptype(#11748, #10001) +ext_proptype(#11748, #10024) +ext_proptype(#11748, #10003) +#11749 = @"C_type$select.epoll$closed" +ext_proptype(#11749, #10058) +#11750 = @"C_type$_io.BytesIO$closed" +ext_proptype(#11750, #10058) +#11751 = @"C_type$_io._IOBase$closed" +ext_proptype(#11751, #10058) +#11752 = @"C_type$_io.StringIO$closed" +ext_proptype(#11752, #10058) +#11753 = @"C_type$_io.StringIO$newlines" +ext_proptype(#11753, #10003) +#11754 = @"C_type$_io.StringIO$line_buffering" +ext_proptype(#11754, #10058) +#11755 = @"C_type$_io.FileIO$closed" +ext_proptype(#11755, #10058) +#11756 = @"C_type$_io.FileIO$closefd" +ext_proptype(#11756, #10058) +#11757 = @"C_type$_io.FileIO$mode" +ext_proptype(#11757, #10218) +#11758 = @"C_type$_io._TextIOBase$encoding" +ext_proptype(#11758, #10003) +#11759 = @"C_type$_io._TextIOBase$newlines" +ext_proptype(#11759, #10003) +#11760 = @"C_type$_io._TextIOBase$errors" +ext_proptype(#11760, #10003) +#11761 = @"C_type$_io.IncrementalNewlineDecoder$newlines" +ext_proptype(#11761, #10001) +ext_proptype(#11761, #10218) +ext_proptype(#11761, #10003) +#11762 = @"C_type$_io.TextIOWrapper$newlines" +ext_proptype(#11762, #10003) +#11763 = @"C_type$_io.TextIOWrapper$_CHUNK_SIZE" +ext_proptype(#11763, #10005) +#11764 = @"C_type$_ctypes.CField$offset" +ext_proptype(#11764, #10005) +#11765 = @"C_type$_ctypes.CField$size" +ext_proptype(#11765, #10005) +#11766 = @"C_type$_ctypes.PyCFuncPtr$errcheck" +ext_proptype(#11766, #10003) +#11767 = @"C_type$_ctypes.PyCFuncPtr$restype" +ext_proptype(#11767, #10003) +#11768 = @"C_type$_ctypes.PyCFuncPtr$argtypes" +ext_proptype(#11768, #10003) +#11769 = @"C_type$datetime.time$hour" +ext_proptype(#11769, #10005) +#11770 = @"C_type$datetime.time$minute" +ext_proptype(#11770, #10005) +#11771 = @"C_type$datetime.time$second" +ext_proptype(#11771, #10005) +#11772 = @"C_type$datetime.time$microsecond" +ext_proptype(#11772, #10005) +#11773 = @"C_type$datetime.datetime$hour" +ext_proptype(#11773, #10005) +#11774 = @"C_type$datetime.datetime$minute" +ext_proptype(#11774, #10005) +#11775 = @"C_type$datetime.datetime$second" +ext_proptype(#11775, #10005) +#11776 = @"C_type$datetime.datetime$microsecond" +ext_proptype(#11776, #10005) +#11777 = @"C_type$datetime.date$year" +ext_proptype(#11777, #10005) +#11778 = @"C_type$datetime.date$month" +ext_proptype(#11778, #10005) +#11779 = @"C_type$datetime.date$day" +ext_proptype(#11779, #10005) +#11780 = @"C_type$frame$2f_lineno" +ext_proptype(#11780, #10005) +#11781 = @"C_type$frame$2f_trace" +ext_proptype(#11781, #10003) +#11782 = @"C_type$frame$2f_restricted" +ext_proptype(#11782, #10058) +#11783 = @"C_type$frame$2f_exc_traceback" +ext_proptype(#11783, #10003) +#11784 = @"C_type$frame$2f_exc_type" +ext_proptype(#11784, #10003) +#11785 = @"C_type$frame$2f_exc_value" +ext_proptype(#11785, #10003) +#11786 = @"C_type$exceptions.BaseException$args" +ext_proptype(#11786, #10003) +#11787 = @"C_type$file$2closed" +ext_proptype(#11787, #10058) +#11788 = @"C_type$file$2newlines" +ext_proptype(#11788, #10001) +ext_proptype(#11788, #10024) +ext_proptype(#11788, #10003) +#11789 = @"C_type$file$2softspace" +ext_proptype(#11789, #10005) +#11790 = @"C_type$int$2real" +ext_proptype(#11790, #10005) +#11791 = @"C_type$int$2imag" +ext_proptype(#11791, #10005) +#11792 = @"C_type$int$2numerator" +ext_proptype(#11792, #10005) +#11793 = @"C_type$int$2denominator" +ext_proptype(#11793, #10005) +#11794 = @"C_type$long$2real" +ext_proptype(#11794, #10005) +#11795 = @"C_type$long$2imag" +ext_proptype(#11795, #10005) +#11796 = @"C_type$long$2numerator" +ext_proptype(#11796, #10005) +#11797 = @"C_type$long$2denominator" +ext_proptype(#11797, #10005) +#11798 = @"C_type$type$2__name__" +ext_proptype(#11798, #10024) +#11799 = @"C_type$type$2__module__" +ext_proptype(#11799, #10024) +#11800 = @"C_type$type$2__dict__" +ext_proptype(#11800, #11698) +ext_proptype(#11800, #10003) +#11801 = @"C_type$type$2__doc__" +ext_proptype(#11801, #10024) +ext_proptype(#11801, #10003) +#11802 = @"C_type$function$2func_defaults" +ext_proptype(#11802, #10003) +#11803 = @"C_type$function$2__defaults__" +ext_proptype(#11803, #10003) +#11804 = @"C_type$float$2real" +ext_proptype(#11804, #10038) +#11805 = @"C_type$float$2imag" +ext_proptype(#11805, #10038) +#11806 = @"C_type$builtin_function_or_method$2__doc__" +ext_proptype(#11806, #10024) +ext_proptype(#11806, #10003) +#11807 = @"C_type$builtin_function_or_method$2__name__" +ext_proptype(#11807, #10024) +#11808 = @"C_type$builtin_function_or_method$2__self__" +ext_proptype(#11808, #10003) +#11809 = @"C_type$method-wrapper$__name__" +ext_proptype(#11809, #10024) +#11810 = @"C_type$method-wrapper$__doc__" +ext_proptype(#11810, #10024) +ext_proptype(#11810, #10003) +#11811 = @"C_type$method_descriptor$2__doc__" +ext_proptype(#11811, #10024) +ext_proptype(#11811, #10003) +#11812 = @"C_type$classmethod_descriptor$2__doc__" +ext_proptype(#11812, #10024) +ext_proptype(#11812, #10003) +#11813 = @"C_type$member_descriptor$2__doc__" +ext_proptype(#11813, #10024) +ext_proptype(#11813, #10003) +#11814 = @"C_type$getset_descriptor$2__doc__" +ext_proptype(#11814, #10024) +ext_proptype(#11814, #10003) +#11815 = @"C_type$wrapper_descriptor$2__doc__" +ext_proptype(#11815, #10024) +ext_proptype(#11815, #10003) +#11816 = @"C_type$memoryview$2format" +ext_proptype(#11816, #10024) +#11817 = @"C_type$memoryview$2itemsize" +ext_proptype(#11817, #10005) +#11818 = @"C_type$memoryview$2shape" +ext_proptype(#11818, #10001) +ext_proptype(#11818, #10003) +#11819 = @"C_type$memoryview$2strides" +ext_proptype(#11819, #10001) +ext_proptype(#11819, #10003) +#11820 = @"C_type$memoryview$2suboffsets" +ext_proptype(#11820, #10001) +ext_proptype(#11820, #10003) +#11821 = @"C_type$memoryview$2readonly" +ext_proptype(#11821, #10058) +#11822 = @"C_type$memoryview$2ndim" +ext_proptype(#11822, #10005) +py_cobjects(#11441) +py_cobjects(#11439) +py_cobjects(#10691) +py_cobjects(#11443) +py_cobjects(#11285) +py_cobjects(#11444) +py_cobjects(#11448) +py_cobjects(#11449) +py_cobjects(#10021) +py_cobjects(#10492) +py_cobjects(#10017) +py_cobjects(#10001) +py_cobjects(#10056) +py_cobjects(#11454) +py_cobjects(#11456) +py_cobjects(#11457) +py_cobjects(#11458) +#11823 = @"C_type$operator.itemgetter" +py_cobjects(#11823) +#11824 = @"C_type$operator.attrgetter" +py_cobjects(#11824) +#11825 = @"C_type$operator.methodcaller" +py_cobjects(#11825) +py_cobjects(#11460) +py_cobjects(#11459) +py_cobjects(#10761) +py_cobjects(#11465) +py_cobjects(#10007) +py_cobjects(#10085) +py_cobjects(#10102) +#11826 = @"C_type$itertools._grouper" +py_cobjects(#11826) +#11827 = @"C_type$itertools.groupby" +py_cobjects(#11827) +#11828 = @"C_type$itertools.tee_dataobject" +py_cobjects(#11828) +py_cobjects(#10794) +#11829 = @"C_type$itertools.cycle" +py_cobjects(#11829) +#11830 = @"C_type$itertools.dropwhile" +py_cobjects(#11830) +#11831 = @"C_type$itertools.takewhile" +py_cobjects(#11831) +#11832 = @"C_type$itertools.islice" +py_cobjects(#11832) +#11833 = @"C_type$itertools.starmap" +py_cobjects(#11833) +#11834 = @"C_type$itertools.imap" +py_cobjects(#11834) +py_cobjects(#11472) +#11835 = @"C_type$itertools.product" +py_cobjects(#11835) +#11836 = @"C_type$itertools.combinations" +py_cobjects(#11836) +#11837 = @"C_type$itertools.combinations_with_replacement" +py_cobjects(#11837) +#11838 = @"C_type$itertools.permutations" +py_cobjects(#11838) +#11839 = @"C_type$itertools.compress" +py_cobjects(#11839) +#11840 = @"C_type$itertools.ifilter" +py_cobjects(#11840) +py_cobjects(#10058) +#11841 = @"C_type$itertools.ifilterfalse" +py_cobjects(#11841) +py_cobjects(#11473) +#11842 = @"C_type$itertools.izip" +py_cobjects(#11842) +py_cobjects(#11474) +#11843 = @"C_type$itertools.izip_longest" +py_cobjects(#11843) +py_cobjects(#10038) +#11844 = @"C_type$symtable entry" +py_cobjects(#11844) +#11845 = @"C_type$basestring" +py_cobjects(#11845) +#11846 = @"C_type$_csv.Dialect" +py_cobjects(#11846) +py_cobjects(#10165) +py_cobjects(#10167) +py_cobjects(#11476) +py_cobjects(#11673) +#11847 = @"C_type$arrayiterator" +py_cobjects(#11847) +py_cobjects(#11480) +#11848 = @"C_type$instance" +py_cobjects(#11848) +py_cobjects(#11690) +py_cobjects(#11662) +py_cobjects(#10082) +py_cobjects(#10201) +py_cobjects(#10204) +py_cobjects(#10314) +py_cobjects(#10315) +py_cobjects(#11483) +#11849 = @"C_type$cPickle.Pdata" +py_cobjects(#11849) +py_cobjects(#10354) +py_cobjects(#10005) +py_cobjects(#11688) +py_cobjects(#10024) +py_cobjects(#10218) +#11850 = @"C_type$classobj" +py_cobjects(#11850) +#11851 = @"C_type$function" +py_cobjects(#11851) +#11852 = @"C_type$builtin_function_or_method" +py_cobjects(#11852) +py_cobjects(#10356) +py_cobjects(#10250) +py_cobjects(#11486) +py_cobjects(#11412) +py_cobjects(#11489) +py_cobjects(#11490) +py_cobjects(#10370) +py_cobjects(#11492) +py_cobjects(#11495) +py_cobjects(#11498) +py_cobjects(#10384) +#11853 = @"C_type$_thread._localdummy" +py_cobjects(#11853) +py_cobjects(#11375) +#11854 = @"C_type$thread._local" +py_cobjects(#11854) +py_cobjects(#11500) +py_cobjects(#11503) +py_cobjects(#11506) +#11855 = @"C_type$hashinheritancetester" +py_cobjects(#11855) +#11856 = @"C_type$memoryviewtester" +py_cobjects(#11856) +#11857 = @"C_type$test_structmembersType" +py_cobjects(#11857) +py_cobjects(#10497) +py_cobjects(#11508) +py_cobjects(#11549) +py_cobjects(#11558) +py_cobjects(#11511) +py_cobjects(#11563) +py_cobjects(#11560) +py_cobjects(#11509) +py_cobjects(#11559) +py_cobjects(#11516) +py_cobjects(#11530) +py_cobjects(#11538) +py_cobjects(#11523) +py_cobjects(#11570) +py_cobjects(#11568) +#11858 = @"C_type$BlockingIOError" +py_cobjects(#11858) +py_cobjects(#11580) +py_cobjects(#10511) +py_cobjects(#10541) +py_cobjects(#11693) +#11859 = @"C_type$weakcallableproxy" +py_cobjects(#11859) +py_cobjects(#10543) +py_cobjects(#10545) +#11860 = @"C_type$_ctypes.CField" +py_cobjects(#11860) +py_cobjects(#11583) +#11861 = @"C_type$_ctypes.CThunkObject" +py_cobjects(#11861) +#11862 = @"C_type$StgDict" +py_cobjects(#11862) +py_cobjects(#11609) +py_cobjects(#11615) +#11863 = @"C_type$_ctypes.Array" +py_cobjects(#11863) +py_cobjects(#11611) +#11864 = @"C_type$_ctypes._Pointer" +py_cobjects(#11864) +#11865 = @"C_type$_ctypes.PyCFuncPtr" +py_cobjects(#11865) +py_cobjects(#11584) +py_cobjects(#11585) +py_cobjects(#10557) +py_cobjects(#11607) +py_cobjects(#11377) +#11866 = @"C_type$_ctypes.DictRemover" +py_cobjects(#11866) +py_cobjects(#11586) +#11867 = @"C_type$_ctypes.Structure" +py_cobjects(#11867) +#11868 = @"C_type$_ctypes.Union" +py_cobjects(#11868) +py_cobjects(#10618) +py_cobjects(#11621) +#11869 = @"C_type$_json.Scanner" +py_cobjects(#11869) +#11870 = @"C_type$_json.Encoder" +py_cobjects(#11870) +py_cobjects(#10575) +py_cobjects(#10578) +py_cobjects(#10580) +py_cobjects(#11640) +py_cobjects(#11629) +py_cobjects(#11655) +py_cobjects(#11631) +py_cobjects(#11635) +#11871 = @"C_type$instancemethod" +py_cobjects(#11871) +#11872 = @"C_type$traceback" +py_cobjects(#11872) +py_cobjects(#10602) +py_cobjects(#11661) +py_cobjects(#10517) +py_cobjects(#11238) +py_cobjects(#11239) +py_cobjects(#11718) +#11873 = @"C_type$classmethod" +py_cobjects(#11873) +#11874 = @"C_type$enumerate" +py_cobjects(#11874) +py_cobjects(#11708) +py_cobjects(#11664) +#11875 = @"C_type$staticmethod" +py_cobjects(#11875) +#11876 = @"C_type$super" +py_cobjects(#11876) +py_cobjects(#11663) +#11877 = @"C_type$PyCObject" +py_cobjects(#11877) +#11878 = @"C_type$ellipsis" +py_cobjects(#11878) +#11879 = @"C_type$cell" +py_cobjects(#11879) +#11880 = @"C_type$PyCapsule" +py_cobjects(#11880) +py_cobjects(#11711) +py_cobjects(#10655) +py_cobjects(#10656) +py_cobjects(#11674) +py_cobjects(#11675) +py_cobjects(#11676) +#11881 = @"C_type$dict_keys" +py_cobjects(#11881) +#11882 = @"C_type$dict_items" +py_cobjects(#11882) +#11883 = @"C_type$dict_values" +py_cobjects(#11883) +#11884 = @"C_type$wrapper_descriptor" +py_cobjects(#11884) +py_cobjects(#11698) +#11885 = @"C_type$getset_descriptor" +py_cobjects(#11885) +#11886 = @"C_type$member_descriptor" +py_cobjects(#11886) +py_cobjects(#11119) +#11887 = @"C_type$exceptions.TypeError" +py_cobjects(#11887) +#11888 = @"C_type$exceptions.StandardError" +py_cobjects(#11888) +#11889 = @"C_type$exceptions.Exception" +py_cobjects(#11889) +py_cobjects(#11668) +#11890 = @"C_type$exceptions.DeprecationWarning" +py_cobjects(#11890) +#11891 = @"C_type$exceptions.Warning" +py_cobjects(#11891) +#11892 = @"C_type$exceptions.AttributeError" +py_cobjects(#11892) +#11893 = @"C_type$exceptions.StopIteration" +py_cobjects(#11893) +#11894 = @"C_type$exceptions.GeneratorExit" +py_cobjects(#11894) +#11895 = @"C_type$exceptions.SystemExit" +py_cobjects(#11895) +#11896 = @"C_type$exceptions.KeyboardInterrupt" +py_cobjects(#11896) +#11897 = @"C_type$exceptions.ImportError" +py_cobjects(#11897) +py_cobjects(#11669) +#11898 = @"C_type$exceptions.IOError" +py_cobjects(#11898) +#11899 = @"C_type$exceptions.OSError" +py_cobjects(#11899) +#11900 = @"C_type$exceptions.EOFError" +py_cobjects(#11900) +#11901 = @"C_type$exceptions.RuntimeError" +py_cobjects(#11901) +#11902 = @"C_type$exceptions.NotImplementedError" +py_cobjects(#11902) +#11903 = @"C_type$exceptions.NameError" +py_cobjects(#11903) +#11904 = @"C_type$exceptions.UnboundLocalError" +py_cobjects(#11904) +#11905 = @"C_type$exceptions.IndexError" +py_cobjects(#11905) +#11906 = @"C_type$exceptions.LookupError" +py_cobjects(#11906) +#11907 = @"C_type$exceptions.SyntaxError" +py_cobjects(#11907) +#11908 = @"C_type$exceptions.IndentationError" +py_cobjects(#11908) +#11909 = @"C_type$exceptions.TabError" +py_cobjects(#11909) +#11910 = @"C_type$exceptions.KeyError" +py_cobjects(#11910) +#11911 = @"C_type$exceptions.ValueError" +py_cobjects(#11911) +#11912 = @"C_type$exceptions.UnicodeError" +py_cobjects(#11912) +#11913 = @"C_type$exceptions.UnicodeEncodeError" +py_cobjects(#11913) +#11914 = @"C_type$exceptions.UnicodeDecodeError" +py_cobjects(#11914) +#11915 = @"C_type$exceptions.UnicodeTranslateError" +py_cobjects(#11915) +#11916 = @"C_type$exceptions.AssertionError" +py_cobjects(#11916) +#11917 = @"C_type$exceptions.ArithmeticError" +py_cobjects(#11917) +#11918 = @"C_type$exceptions.FloatingPointError" +py_cobjects(#11918) +#11919 = @"C_type$exceptions.OverflowError" +py_cobjects(#11919) +#11920 = @"C_type$exceptions.ZeroDivisionError" +py_cobjects(#11920) +#11921 = @"C_type$exceptions.SystemError" +py_cobjects(#11921) +#11922 = @"C_type$exceptions.ReferenceError" +py_cobjects(#11922) +#11923 = @"C_type$exceptions.MemoryError" +py_cobjects(#11923) +#11924 = @"C_type$exceptions.BufferError" +py_cobjects(#11924) +#11925 = @"C_type$exceptions.UserWarning" +py_cobjects(#11925) +#11926 = @"C_type$exceptions.PendingDeprecationWarning" +py_cobjects(#11926) +#11927 = @"C_type$exceptions.SyntaxWarning" +py_cobjects(#11927) +#11928 = @"C_type$exceptions.RuntimeWarning" +py_cobjects(#11928) +#11929 = @"C_type$exceptions.FutureWarning" +py_cobjects(#11929) +#11930 = @"C_type$exceptions.ImportWarning" +py_cobjects(#11930) +#11931 = @"C_type$exceptions.UnicodeWarning" +py_cobjects(#11931) +#11932 = @"C_type$exceptions.BytesWarning" +py_cobjects(#11932) +py_cobjects(#11671) +py_cobjects(#11192) +#11933 = @"C_type$cmpwrapper" +py_cobjects(#11933) +#11934 = @"C_type$sortwrapper" +py_cobjects(#11934) +#11935 = @"C_type$NotImplementedType" +py_cobjects(#11935) +py_cobjects(#10003) +py_cobjects(#11695) +py_cobjects(#11158) +#11936 = @"C_type$fieldnameiterator" +py_cobjects(#11936) +#11937 = @"C_type$method-wrapper" +py_cobjects(#11937) +#11938 = @"C_type$method_descriptor" +py_cobjects(#11938) +#11939 = @"C_type$classmethod_descriptor" +py_cobjects(#11939) +py_cobjects(#11717) +py_cobjects(#11719) +py_cobjects(#11720) +py_cobjects(#11721) +py_cobjects(#11722) +#11940 = @"C_type$_ssl._SSLSocket$context" +py_cobjects(#11940) +py_cobjects(#11723) +py_cobjects(#11724) +py_cobjects(#11725) +py_cobjects(#11726) +py_cobjects(#11727) +py_cobjects(#11728) +py_cobjects(#11729) +py_cobjects(#11730) +py_cobjects(#11731) +py_cobjects(#11732) +py_cobjects(#11733) +py_cobjects(#11734) +py_cobjects(#11735) +#11941 = @"C_type$_csv.Dialect$lineterminator" +py_cobjects(#11941) +py_cobjects(#11736) +py_cobjects(#11737) +py_cobjects(#11738) +py_cobjects(#11739) +#11942 = @"C_type$_hotshot.ProfilerType$closed" +py_cobjects(#11942) +#11943 = @"C_type$_hotshot.LogReaderType$closed" +py_cobjects(#11943) +py_cobjects(#11740) +py_cobjects(#11741) +#11944 = @"C_type$Struct$2format" +py_cobjects(#11944) +py_cobjects(#11742) +#11945 = @"C_type$cPickle.Pickler$persistent_id" +py_cobjects(#11945) +#11946 = @"C_type$cPickle.Pickler$inst_persistent_id" +py_cobjects(#11946) +#11947 = @"C_type$cPickle.Pickler$memo" +py_cobjects(#11947) +#11948 = @"C_type$cPickle.Pickler$PicklingError" +py_cobjects(#11948) +py_cobjects(#11743) +py_cobjects(#11744) +py_cobjects(#11745) +py_cobjects(#11746) +py_cobjects(#11747) +py_cobjects(#11748) +#11949 = @"C_type$bz2.BZ2File$mode" +py_cobjects(#11949) +#11950 = @"C_type$bz2.BZ2File$name" +py_cobjects(#11950) +py_cobjects(#11749) +py_cobjects(#11750) +#11951 = @"C_type$_io.BufferedReader$closed" +py_cobjects(#11951) +#11952 = @"C_type$_io.BufferedReader$name" +py_cobjects(#11952) +#11953 = @"C_type$_io.BufferedReader$mode" +py_cobjects(#11953) +#11954 = @"C_type$_io.BufferedRandom$closed" +py_cobjects(#11954) +#11955 = @"C_type$_io.BufferedRandom$name" +py_cobjects(#11955) +#11956 = @"C_type$_io.BufferedRandom$mode" +py_cobjects(#11956) +#11957 = @"C_type$_io.BufferedWriter$closed" +py_cobjects(#11957) +#11958 = @"C_type$_io.BufferedWriter$name" +py_cobjects(#11958) +#11959 = @"C_type$_io.BufferedWriter$mode" +py_cobjects(#11959) +#11960 = @"C_type$_io.BufferedRWPair$closed" +py_cobjects(#11960) +py_cobjects(#11751) +py_cobjects(#11752) +py_cobjects(#11753) +py_cobjects(#11754) +py_cobjects(#11755) +py_cobjects(#11756) +py_cobjects(#11757) +py_cobjects(#11758) +py_cobjects(#11759) +py_cobjects(#11760) +py_cobjects(#11761) +#11961 = @"C_type$_io.TextIOWrapper$name" +py_cobjects(#11961) +#11962 = @"C_type$_io.TextIOWrapper$closed" +py_cobjects(#11962) +py_cobjects(#11762) +#11963 = @"C_type$_io.TextIOWrapper$errors" +py_cobjects(#11963) +py_cobjects(#11763) +#11964 = @"C_type$functools.partial$__dict__" +py_cobjects(#11964) +py_cobjects(#11764) +py_cobjects(#11765) +#11965 = @"C_type$_ctypes._Pointer$contents" +py_cobjects(#11965) +py_cobjects(#11766) +py_cobjects(#11767) +py_cobjects(#11768) +#11966 = @"C_type$_ctypes._SimpleCData$value" +py_cobjects(#11966) +py_cobjects(#11769) +py_cobjects(#11770) +py_cobjects(#11771) +py_cobjects(#11772) +#11967 = @"C_type$datetime.time$tzinfo" +py_cobjects(#11967) +py_cobjects(#11773) +py_cobjects(#11774) +py_cobjects(#11775) +py_cobjects(#11776) +#11968 = @"C_type$datetime.datetime$tzinfo" +py_cobjects(#11968) +py_cobjects(#11777) +py_cobjects(#11778) +py_cobjects(#11779) +#11969 = @"C_type$frame$2f_locals" +py_cobjects(#11969) +py_cobjects(#11780) +py_cobjects(#11781) +py_cobjects(#11782) +py_cobjects(#11783) +py_cobjects(#11784) +py_cobjects(#11785) +#11970 = @"C_type$exceptions.BaseException$__dict__" +py_cobjects(#11970) +py_cobjects(#11786) +#11971 = @"C_type$exceptions.BaseException$message" +py_cobjects(#11971) +py_cobjects(#11787) +py_cobjects(#11788) +py_cobjects(#11789) +py_cobjects(#11790) +py_cobjects(#11791) +py_cobjects(#11792) +py_cobjects(#11793) +py_cobjects(#11794) +py_cobjects(#11795) +py_cobjects(#11796) +py_cobjects(#11797) +#11972 = @"C_type$generator$2__name__" +py_cobjects(#11972) +py_cobjects(#11798) +#11973 = @"C_type$type$2__bases__" +py_cobjects(#11973) +py_cobjects(#11799) +#11974 = @"C_type$type$2__abstractmethods__" +py_cobjects(#11974) +py_cobjects(#11800) +py_cobjects(#11801) +#11975 = @"C_type$object$2__class__" +py_cobjects(#11975) +#11976 = @"C_type$function$2func_code" +py_cobjects(#11976) +#11977 = @"C_type$function$2__code__" +py_cobjects(#11977) +py_cobjects(#11802) +py_cobjects(#11803) +#11978 = @"C_type$function$2func_dict" +py_cobjects(#11978) +#11979 = @"C_type$function$2__dict__" +py_cobjects(#11979) +#11980 = @"C_type$function$2func_name" +py_cobjects(#11980) +#11981 = @"C_type$function$2__name__" +py_cobjects(#11981) +py_cobjects(#11804) +py_cobjects(#11805) +py_cobjects(#11806) +py_cobjects(#11807) +py_cobjects(#11808) +#11982 = @"C_type$cell$2cell_contents" +py_cobjects(#11982) +#11983 = @"C_type$instancemethod$2__doc__" +py_cobjects(#11983) +#11984 = @"C_type$method-wrapper$__objclass__" +py_cobjects(#11984) +py_cobjects(#11809) +py_cobjects(#11810) +py_cobjects(#11811) +py_cobjects(#11812) +py_cobjects(#11813) +py_cobjects(#11814) +py_cobjects(#11815) +py_cobjects(#11816) +py_cobjects(#11817) +py_cobjects(#11818) +py_cobjects(#11819) +py_cobjects(#11820) +py_cobjects(#11821) +py_cobjects(#11822) +py_cobjects(#10000) +py_cobjects(#10002) +py_cobjects(#10004) +py_cobjects(#10006) +py_cobjects(#10008) +py_cobjects(#10009) +py_cobjects(#10010) +py_cobjects(#10011) +py_cobjects(#10012) +py_cobjects(#10013) +#11985 = @"C_builtin_function_or_method$_sre.compile" +py_cobjects(#11985) +py_cobjects(#10014) +py_cobjects(#10015) +py_cobjects(#10016) +py_cobjects(#10018) +#11986 = @"C_builtin_function_or_method$_heapq.heappushpop" +py_cobjects(#11986) +py_cobjects(#11376) +#11987 = @"C_builtin_function_or_method$_heapq.heapreplace" +py_cobjects(#11987) +py_cobjects(#10019) +py_cobjects(#10020) +py_cobjects(#10022) +py_cobjects(#10023) +py_cobjects(#10025) +py_cobjects(#10026) +py_cobjects(#10027) +py_cobjects(#11378) +py_cobjects(#11379) +py_cobjects(#10028) +py_cobjects(#10029) +py_cobjects(#10030) +py_cobjects(#10031) +py_cobjects(#10032) +py_cobjects(#10033) +py_cobjects(#10034) +py_cobjects(#10035) +py_cobjects(#10036) +py_cobjects(#10037) +py_cobjects(#10039) +py_cobjects(#10040) +py_cobjects(#10041) +py_cobjects(#10042) +py_cobjects(#10043) +py_cobjects(#10044) +py_cobjects(#10045) +py_cobjects(#10046) +py_cobjects(#10047) +py_cobjects(#10048) +py_cobjects(#10049) +py_cobjects(#10050) +py_cobjects(#10051) +py_cobjects(#10052) +py_cobjects(#10053) +py_cobjects(#10054) +py_cobjects(#11380) +py_cobjects(#11381) +py_cobjects(#11382) +py_cobjects(#11383) +py_cobjects(#11384) +py_cobjects(#11385) +py_cobjects(#10055) +py_cobjects(#10057) +py_cobjects(#10059) +py_cobjects(#10060) +py_cobjects(#10061) +py_cobjects(#10062) +py_cobjects(#10063) +py_cobjects(#10064) +py_cobjects(#10065) +py_cobjects(#10066) +py_cobjects(#10067) +#11988 = @"C_builtin_function_or_method$operator.is_" +py_cobjects(#11988) +#11989 = @"C_builtin_function_or_method$operator.is_not" +py_cobjects(#11989) +py_cobjects(#11386) +py_cobjects(#11387) +#11990 = @"C_builtin_function_or_method$operator.add" +py_cobjects(#11990) +#11991 = @"C_builtin_function_or_method$operator.__add__" +py_cobjects(#11991) +#11992 = @"C_builtin_function_or_method$operator.sub" +py_cobjects(#11992) +#11993 = @"C_builtin_function_or_method$operator.__sub__" +py_cobjects(#11993) +#11994 = @"C_builtin_function_or_method$operator.mul" +py_cobjects(#11994) +#11995 = @"C_builtin_function_or_method$operator.__mul__" +py_cobjects(#11995) +#11996 = @"C_builtin_function_or_method$operator.div" +py_cobjects(#11996) +#11997 = @"C_builtin_function_or_method$operator.__div__" +py_cobjects(#11997) +#11998 = @"C_builtin_function_or_method$operator.floordiv" +py_cobjects(#11998) +#11999 = @"C_builtin_function_or_method$operator.__floordiv__" +py_cobjects(#11999) +#12000 = @"C_builtin_function_or_method$operator.truediv" +py_cobjects(#12000) +#12001 = @"C_builtin_function_or_method$operator.__truediv__" +py_cobjects(#12001) +#12002 = @"C_builtin_function_or_method$operator.mod" +py_cobjects(#12002) +#12003 = @"C_builtin_function_or_method$operator.__mod__" +py_cobjects(#12003) +py_cobjects(#11388) +py_cobjects(#11389) +py_cobjects(#11390) +py_cobjects(#11391) +py_cobjects(#11392) +py_cobjects(#11393) +py_cobjects(#11394) +py_cobjects(#11395) +py_cobjects(#11396) +py_cobjects(#11397) +#12004 = @"C_builtin_function_or_method$operator.lshift" +py_cobjects(#12004) +#12005 = @"C_builtin_function_or_method$operator.__lshift__" +py_cobjects(#12005) +#12006 = @"C_builtin_function_or_method$operator.rshift" +py_cobjects(#12006) +#12007 = @"C_builtin_function_or_method$operator.__rshift__" +py_cobjects(#12007) +py_cobjects(#10068) +py_cobjects(#10069) +#12008 = @"C_builtin_function_or_method$operator.and_" +py_cobjects(#12008) +#12009 = @"C_builtin_function_or_method$operator.__and__" +py_cobjects(#12009) +#12010 = @"C_builtin_function_or_method$operator.xor" +py_cobjects(#12010) +#12011 = @"C_builtin_function_or_method$operator.__xor__" +py_cobjects(#12011) +#12012 = @"C_builtin_function_or_method$operator.or_" +py_cobjects(#12012) +#12013 = @"C_builtin_function_or_method$operator.__or__" +py_cobjects(#12013) +#12014 = @"C_builtin_function_or_method$operator.iadd" +py_cobjects(#12014) +#12015 = @"C_builtin_function_or_method$operator.__iadd__" +py_cobjects(#12015) +#12016 = @"C_builtin_function_or_method$operator.isub" +py_cobjects(#12016) +#12017 = @"C_builtin_function_or_method$operator.__isub__" +py_cobjects(#12017) +#12018 = @"C_builtin_function_or_method$operator.imul" +py_cobjects(#12018) +#12019 = @"C_builtin_function_or_method$operator.__imul__" +py_cobjects(#12019) +#12020 = @"C_builtin_function_or_method$operator.idiv" +py_cobjects(#12020) +#12021 = @"C_builtin_function_or_method$operator.__idiv__" +py_cobjects(#12021) +#12022 = @"C_builtin_function_or_method$operator.ifloordiv" +py_cobjects(#12022) +#12023 = @"C_builtin_function_or_method$operator.__ifloordiv__" +py_cobjects(#12023) +#12024 = @"C_builtin_function_or_method$operator.itruediv" +py_cobjects(#12024) +#12025 = @"C_builtin_function_or_method$operator.__itruediv__" +py_cobjects(#12025) +#12026 = @"C_builtin_function_or_method$operator.imod" +py_cobjects(#12026) +#12027 = @"C_builtin_function_or_method$operator.__imod__" +py_cobjects(#12027) +#12028 = @"C_builtin_function_or_method$operator.ilshift" +py_cobjects(#12028) +#12029 = @"C_builtin_function_or_method$operator.__ilshift__" +py_cobjects(#12029) +#12030 = @"C_builtin_function_or_method$operator.irshift" +py_cobjects(#12030) +#12031 = @"C_builtin_function_or_method$operator.__irshift__" +py_cobjects(#12031) +#12032 = @"C_builtin_function_or_method$operator.iand" +py_cobjects(#12032) +#12033 = @"C_builtin_function_or_method$operator.__iand__" +py_cobjects(#12033) +#12034 = @"C_builtin_function_or_method$operator.ixor" +py_cobjects(#12034) +#12035 = @"C_builtin_function_or_method$operator.__ixor__" +py_cobjects(#12035) +#12036 = @"C_builtin_function_or_method$operator.ior" +py_cobjects(#12036) +#12037 = @"C_builtin_function_or_method$operator.__ior__" +py_cobjects(#12037) +#12038 = @"C_builtin_function_or_method$operator.concat" +py_cobjects(#12038) +#12039 = @"C_builtin_function_or_method$operator.__concat__" +py_cobjects(#12039) +py_cobjects(#11398) +py_cobjects(#11399) +#12040 = @"C_builtin_function_or_method$operator.iconcat" +py_cobjects(#12040) +#12041 = @"C_builtin_function_or_method$operator.__iconcat__" +py_cobjects(#12041) +py_cobjects(#11400) +py_cobjects(#11401) +#12042 = @"C_builtin_function_or_method$operator.getitem" +py_cobjects(#12042) +#12043 = @"C_builtin_function_or_method$operator.__getitem__" +py_cobjects(#12043) +py_cobjects(#10070) +py_cobjects(#10071) +py_cobjects(#10072) +py_cobjects(#10073) +#12044 = @"C_builtin_function_or_method$operator.pow" +py_cobjects(#12044) +#12045 = @"C_builtin_function_or_method$operator.__pow__" +py_cobjects(#12045) +#12046 = @"C_builtin_function_or_method$operator.ipow" +py_cobjects(#12046) +#12047 = @"C_builtin_function_or_method$operator.__ipow__" +py_cobjects(#12047) +py_cobjects(#11402) +py_cobjects(#11403) +py_cobjects(#10074) +py_cobjects(#10075) +py_cobjects(#10076) +py_cobjects(#10077) +#12048 = @"C_builtin_function_or_method$operator.lt" +py_cobjects(#12048) +#12049 = @"C_builtin_function_or_method$operator.__lt__" +py_cobjects(#12049) +#12050 = @"C_builtin_function_or_method$operator.le" +py_cobjects(#12050) +#12051 = @"C_builtin_function_or_method$operator.__le__" +py_cobjects(#12051) +#12052 = @"C_builtin_function_or_method$operator.eq" +py_cobjects(#12052) +#12053 = @"C_builtin_function_or_method$operator.__eq__" +py_cobjects(#12053) +#12054 = @"C_builtin_function_or_method$operator.ne" +py_cobjects(#12054) +#12055 = @"C_builtin_function_or_method$operator.__ne__" +py_cobjects(#12055) +#12056 = @"C_builtin_function_or_method$operator.gt" +py_cobjects(#12056) +#12057 = @"C_builtin_function_or_method$operator.__gt__" +py_cobjects(#12057) +#12058 = @"C_builtin_function_or_method$operator.ge" +py_cobjects(#12058) +#12059 = @"C_builtin_function_or_method$operator.__ge__" +py_cobjects(#12059) +py_cobjects(#10078) +py_cobjects(#10079) +py_cobjects(#10080) +py_cobjects(#10081) +py_cobjects(#10083) +py_cobjects(#10084) +#12060 = @"C_builtin_function_or_method$parser.isexpr" +py_cobjects(#12060) +#12061 = @"C_builtin_function_or_method$parser.issuite" +py_cobjects(#12061) +py_cobjects(#10086) +py_cobjects(#10087) +py_cobjects(#10088) +py_cobjects(#10089) +py_cobjects(#10090) +py_cobjects(#10091) +py_cobjects(#10092) +py_cobjects(#10093) +py_cobjects(#10094) +py_cobjects(#10095) +py_cobjects(#10096) +py_cobjects(#10097) +py_cobjects(#10098) +py_cobjects(#10099) +py_cobjects(#10100) +py_cobjects(#10101) +py_cobjects(#10103) +py_cobjects(#10104) +py_cobjects(#10105) +py_cobjects(#10106) +py_cobjects(#10107) +py_cobjects(#10108) +py_cobjects(#10109) +py_cobjects(#10110) +py_cobjects(#10111) +py_cobjects(#10112) +py_cobjects(#10113) +py_cobjects(#10114) +py_cobjects(#10115) +py_cobjects(#10116) +py_cobjects(#10117) +py_cobjects(#10118) +py_cobjects(#10119) +py_cobjects(#10120) +py_cobjects(#10121) +py_cobjects(#10122) +py_cobjects(#10123) +py_cobjects(#10124) +py_cobjects(#10125) +py_cobjects(#10126) +py_cobjects(#10127) +py_cobjects(#10128) +py_cobjects(#10129) +py_cobjects(#10130) +py_cobjects(#10131) +py_cobjects(#10132) +py_cobjects(#10133) +py_cobjects(#10134) +py_cobjects(#10135) +py_cobjects(#10136) +py_cobjects(#10137) +py_cobjects(#10138) +py_cobjects(#10139) +py_cobjects(#10140) +py_cobjects(#10141) +py_cobjects(#10142) +py_cobjects(#10143) +py_cobjects(#10144) +py_cobjects(#10145) +py_cobjects(#10146) +py_cobjects(#10147) +py_cobjects(#10148) +py_cobjects(#10149) +py_cobjects(#10150) +py_cobjects(#10151) +py_cobjects(#10152) +py_cobjects(#10153) +py_cobjects(#10154) +py_cobjects(#10155) +py_cobjects(#11404) +py_cobjects(#11405) +py_cobjects(#10156) +py_cobjects(#10157) +py_cobjects(#10158) +py_cobjects(#10159) +py_cobjects(#10160) +py_cobjects(#10161) +py_cobjects(#10162) +py_cobjects(#10163) +#12062 = @"C_builtin_function_or_method$signal.default_int_handler" +py_cobjects(#12062) +py_cobjects(#10164) +py_cobjects(#10166) +py_cobjects(#10168) +py_cobjects(#10169) +py_cobjects(#10170) +py_cobjects(#11406) +py_cobjects(#10171) +py_cobjects(#10172) +py_cobjects(#10173) +py_cobjects(#10174) +py_cobjects(#10175) +py_cobjects(#10176) +py_cobjects(#10177) +py_cobjects(#10178) +py_cobjects(#10179) +py_cobjects(#10180) +py_cobjects(#10181) +py_cobjects(#10182) +py_cobjects(#10183) +py_cobjects(#10184) +py_cobjects(#10185) +py_cobjects(#10186) +py_cobjects(#10187) +py_cobjects(#10188) +py_cobjects(#10189) +py_cobjects(#10190) +py_cobjects(#11407) +py_cobjects(#11408) +py_cobjects(#10191) +py_cobjects(#10192) +py_cobjects(#10193) +py_cobjects(#10194) +#12063 = @"C_builtin_function_or_method$time.gmtime" +py_cobjects(#12063) +#12064 = @"C_builtin_function_or_method$time.localtime" +py_cobjects(#12064) +py_cobjects(#10195) +py_cobjects(#10196) +py_cobjects(#10197) +py_cobjects(#10198) +#12065 = @"C_builtin_function_or_method$time.strptime" +py_cobjects(#12065) +py_cobjects(#10199) +py_cobjects(#10200) +py_cobjects(#10202) +py_cobjects(#10203) +py_cobjects(#10205) +py_cobjects(#10206) +py_cobjects(#10207) +py_cobjects(#10208) +py_cobjects(#10209) +py_cobjects(#10210) +py_cobjects(#10211) +py_cobjects(#10212) +py_cobjects(#10213) +py_cobjects(#10214) +py_cobjects(#10215) +py_cobjects(#10216) +py_cobjects(#10217) +py_cobjects(#10219) +py_cobjects(#10220) +#12066 = @"C_builtin_function_or_method$posix.lstat" +py_cobjects(#12066) +py_cobjects(#10221) +py_cobjects(#10222) +py_cobjects(#10223) +py_cobjects(#10224) +py_cobjects(#10225) +#12067 = @"C_builtin_function_or_method$posix.stat" +py_cobjects(#12067) +py_cobjects(#10226) +py_cobjects(#10227) +py_cobjects(#10228) +py_cobjects(#10229) +py_cobjects(#10230) +py_cobjects(#10231) +py_cobjects(#10232) +py_cobjects(#10233) +py_cobjects(#10234) +#12068 = @"C_builtin_function_or_method$posix._exit" +py_cobjects(#12068) +#12069 = @"C_builtin_function_or_method$posix.execv" +py_cobjects(#12069) +#12070 = @"C_builtin_function_or_method$posix.execve" +py_cobjects(#12070) +py_cobjects(#10235) +py_cobjects(#10236) +py_cobjects(#10237) +py_cobjects(#10238) +py_cobjects(#10239) +py_cobjects(#10240) +py_cobjects(#10241) +py_cobjects(#10242) +py_cobjects(#10243) +py_cobjects(#10244) +py_cobjects(#10245) +py_cobjects(#10246) +py_cobjects(#10247) +py_cobjects(#10248) +py_cobjects(#10249) +py_cobjects(#10251) +py_cobjects(#10252) +py_cobjects(#10253) +py_cobjects(#10254) +py_cobjects(#10255) +py_cobjects(#10256) +py_cobjects(#10257) +py_cobjects(#10258) +py_cobjects(#10259) +py_cobjects(#10260) +py_cobjects(#10261) +py_cobjects(#10262) +py_cobjects(#10263) +py_cobjects(#10264) +py_cobjects(#10265) +py_cobjects(#10266) +py_cobjects(#10267) +py_cobjects(#10268) +py_cobjects(#10269) +py_cobjects(#10270) +py_cobjects(#10271) +py_cobjects(#10272) +py_cobjects(#10273) +py_cobjects(#10274) +py_cobjects(#10275) +#12071 = @"C_builtin_function_or_method$posix.read" +py_cobjects(#12071) +py_cobjects(#10276) +#12072 = @"C_builtin_function_or_method$posix.fstat" +py_cobjects(#12072) +py_cobjects(#10277) +py_cobjects(#10278) +py_cobjects(#10279) +py_cobjects(#10280) +py_cobjects(#10281) +py_cobjects(#10282) +py_cobjects(#10283) +py_cobjects(#10284) +py_cobjects(#10285) +py_cobjects(#10286) +py_cobjects(#10287) +py_cobjects(#10288) +py_cobjects(#10289) +py_cobjects(#10290) +py_cobjects(#10291) +py_cobjects(#10292) +py_cobjects(#10293) +py_cobjects(#10294) +py_cobjects(#10295) +py_cobjects(#10296) +py_cobjects(#10297) +py_cobjects(#10298) +py_cobjects(#10299) +#12073 = @"C_builtin_function_or_method$posix.fstatvfs" +py_cobjects(#12073) +#12074 = @"C_builtin_function_or_method$posix.statvfs" +py_cobjects(#12074) +py_cobjects(#10300) +py_cobjects(#10301) +py_cobjects(#10302) +py_cobjects(#10303) +py_cobjects(#10304) +py_cobjects(#10305) +py_cobjects(#10306) +#12075 = @"C_builtin_function_or_method$posix.abort" +py_cobjects(#12075) +py_cobjects(#10307) +py_cobjects(#10308) +py_cobjects(#10309) +py_cobjects(#10310) +py_cobjects(#10311) +py_cobjects(#10312) +py_cobjects(#10313) +py_cobjects(#10316) +py_cobjects(#10317) +py_cobjects(#10318) +py_cobjects(#10319) +py_cobjects(#10320) +py_cobjects(#10321) +py_cobjects(#10322) +py_cobjects(#10323) +py_cobjects(#10324) +py_cobjects(#10325) +py_cobjects(#10326) +py_cobjects(#10327) +py_cobjects(#10328) +py_cobjects(#10329) +#12076 = @"C_builtin_function_or_method$strop.join" +py_cobjects(#12076) +#12077 = @"C_builtin_function_or_method$strop.joinfields" +py_cobjects(#12077) +py_cobjects(#10330) +py_cobjects(#10331) +py_cobjects(#10332) +py_cobjects(#10333) +py_cobjects(#10334) +py_cobjects(#10335) +py_cobjects(#10336) +py_cobjects(#10337) +py_cobjects(#10338) +py_cobjects(#10339) +#12078 = @"C_builtin_function_or_method$strop.translate" +py_cobjects(#12078) +py_cobjects(#10340) +py_cobjects(#10341) +#12079 = @"C_builtin_function_or_method$binascii.b2a_uu" +py_cobjects(#12079) +#12080 = @"C_builtin_function_or_method$binascii.a2b_base64" +py_cobjects(#12080) +#12081 = @"C_builtin_function_or_method$binascii.b2a_base64" +py_cobjects(#12081) +py_cobjects(#10342) +#12082 = @"C_builtin_function_or_method$binascii.b2a_hqx" +py_cobjects(#12082) +py_cobjects(#10343) +py_cobjects(#10344) +py_cobjects(#10345) +py_cobjects(#10346) +#12083 = @"C_builtin_function_or_method$binascii.rlecode_hqx" +py_cobjects(#12083) +py_cobjects(#10347) +py_cobjects(#10348) +py_cobjects(#10349) +py_cobjects(#10350) +py_cobjects(#10351) +py_cobjects(#10352) +py_cobjects(#11409) +py_cobjects(#11410) +py_cobjects(#11411) +py_cobjects(#10353) +py_cobjects(#10355) +py_cobjects(#10357) +py_cobjects(#10358) +py_cobjects(#10359) +py_cobjects(#10360) +py_cobjects(#10361) +py_cobjects(#10362) +py_cobjects(#10363) +py_cobjects(#10364) +py_cobjects(#10365) +py_cobjects(#10366) +py_cobjects(#10367) +py_cobjects(#11413) +py_cobjects(#10368) +py_cobjects(#10369) +py_cobjects(#10371) +py_cobjects(#10372) +py_cobjects(#10373) +py_cobjects(#10374) +py_cobjects(#10375) +py_cobjects(#10376) +py_cobjects(#10377) +py_cobjects(#10378) +py_cobjects(#10379) +py_cobjects(#11414) +py_cobjects(#10380) +py_cobjects(#11415) +py_cobjects(#11416) +py_cobjects(#10381) +py_cobjects(#10382) +py_cobjects(#10383) +py_cobjects(#10385) +#12084 = @"C_builtin_function_or_method$thread.exit_thread" +py_cobjects(#12084) +#12085 = @"C_builtin_function_or_method$thread.exit" +py_cobjects(#12085) +py_cobjects(#10386) +py_cobjects(#10387) +py_cobjects(#10388) +py_cobjects(#10389) +py_cobjects(#11417) +py_cobjects(#10390) +py_cobjects(#11418) +py_cobjects(#10391) +py_cobjects(#10392) +py_cobjects(#10393) +py_cobjects(#10394) +#12086 = @"C_builtin_function_or_method$_codecs.lookup" +py_cobjects(#12086) +#12087 = @"C_builtin_function_or_method$_codecs.encode" +py_cobjects(#12087) +#12088 = @"C_builtin_function_or_method$_codecs.decode" +py_cobjects(#12088) +py_cobjects(#10395) +py_cobjects(#10396) +py_cobjects(#10397) +py_cobjects(#10398) +py_cobjects(#10399) +py_cobjects(#10400) +py_cobjects(#10401) +py_cobjects(#10402) +py_cobjects(#10403) +py_cobjects(#10404) +py_cobjects(#10405) +py_cobjects(#10406) +py_cobjects(#10407) +py_cobjects(#10408) +py_cobjects(#10409) +py_cobjects(#10410) +py_cobjects(#10411) +py_cobjects(#10412) +py_cobjects(#10413) +py_cobjects(#10414) +py_cobjects(#10415) +py_cobjects(#10416) +py_cobjects(#10417) +py_cobjects(#10418) +py_cobjects(#10419) +py_cobjects(#10420) +py_cobjects(#10421) +py_cobjects(#10422) +py_cobjects(#10423) +py_cobjects(#10424) +py_cobjects(#10425) +py_cobjects(#10426) +py_cobjects(#10427) +py_cobjects(#10428) +py_cobjects(#10429) +py_cobjects(#10430) +#12089 = @"C_builtin_function_or_method$_codecs.lookup_error" +py_cobjects(#12089) +py_cobjects(#10431) +py_cobjects(#10432) +py_cobjects(#10433) +py_cobjects(#10434) +py_cobjects(#10435) +py_cobjects(#10436) +py_cobjects(#10437) +py_cobjects(#10438) +py_cobjects(#10439) +py_cobjects(#10440) +py_cobjects(#10441) +py_cobjects(#10442) +py_cobjects(#10443) +py_cobjects(#10444) +#12090 = @"C_builtin_function_or_method$readline.get_begidx" +py_cobjects(#12090) +#12091 = @"C_builtin_function_or_method$readline.get_endidx" +py_cobjects(#12091) +py_cobjects(#10445) +py_cobjects(#10446) +py_cobjects(#10447) +py_cobjects(#10448) +py_cobjects(#10449) +py_cobjects(#10450) +py_cobjects(#10451) +py_cobjects(#10452) +py_cobjects(#10453) +py_cobjects(#11419) +py_cobjects(#10454) +py_cobjects(#10455) +py_cobjects(#10456) +py_cobjects(#10457) +py_cobjects(#10458) +py_cobjects(#10459) +py_cobjects(#10460) +py_cobjects(#10461) +py_cobjects(#10462) +py_cobjects(#10463) +py_cobjects(#10464) +py_cobjects(#10465) +py_cobjects(#10466) +py_cobjects(#10467) +py_cobjects(#10468) +py_cobjects(#10469) +py_cobjects(#10470) +py_cobjects(#10471) +py_cobjects(#10472) +py_cobjects(#10473) +py_cobjects(#10474) +py_cobjects(#10475) +py_cobjects(#10476) +py_cobjects(#10477) +py_cobjects(#10478) +py_cobjects(#10479) +py_cobjects(#10480) +py_cobjects(#10481) +py_cobjects(#10482) +py_cobjects(#10483) +py_cobjects(#11420) +py_cobjects(#11421) +py_cobjects(#10484) +py_cobjects(#10485) +py_cobjects(#11422) +py_cobjects(#10486) +py_cobjects(#10487) +py_cobjects(#10488) +py_cobjects(#10489) +py_cobjects(#10490) +py_cobjects(#10491) +py_cobjects(#10493) +py_cobjects(#10494) +py_cobjects(#10495) +py_cobjects(#10496) +py_cobjects(#11423) +py_cobjects(#10498) +#12092 = @"C_builtin_function_or_method$_io.open" +py_cobjects(#12092) +#12093 = @"C_builtin_function_or_method$_functools.reduce" +py_cobjects(#12093) +py_cobjects(#10499) +py_cobjects(#10500) +py_cobjects(#10501) +py_cobjects(#10502) +py_cobjects(#10503) +py_cobjects(#10504) +py_cobjects(#10505) +py_cobjects(#10506) +py_cobjects(#10507) +py_cobjects(#10508) +py_cobjects(#10509) +py_cobjects(#10510) +py_cobjects(#10512) +py_cobjects(#10513) +py_cobjects(#10514) +py_cobjects(#10515) +py_cobjects(#10516) +py_cobjects(#10518) +py_cobjects(#10519) +py_cobjects(#10520) +py_cobjects(#10521) +py_cobjects(#10522) +py_cobjects(#10523) +py_cobjects(#10524) +py_cobjects(#10525) +py_cobjects(#10526) +py_cobjects(#10527) +py_cobjects(#10528) +py_cobjects(#10529) +py_cobjects(#10530) +py_cobjects(#10531) +py_cobjects(#10532) +py_cobjects(#10533) +py_cobjects(#10534) +py_cobjects(#10535) +py_cobjects(#10536) +py_cobjects(#10537) +py_cobjects(#10538) +py_cobjects(#10539) +py_cobjects(#10540) +py_cobjects(#10542) +py_cobjects(#10544) +py_cobjects(#10546) +py_cobjects(#10547) +py_cobjects(#11424) +py_cobjects(#11425) +py_cobjects(#11426) +py_cobjects(#10548) +py_cobjects(#10549) +py_cobjects(#10550) +py_cobjects(#10551) +py_cobjects(#10552) +py_cobjects(#10553) +py_cobjects(#10554) +py_cobjects(#10555) +py_cobjects(#10556) +py_cobjects(#10558) +py_cobjects(#10559) +py_cobjects(#10560) +py_cobjects(#11427) +py_cobjects(#11428) +py_cobjects(#11429) +py_cobjects(#10561) +py_cobjects(#10562) +py_cobjects(#10563) +py_cobjects(#10564) +py_cobjects(#10565) +py_cobjects(#10566) +py_cobjects(#11430) +py_cobjects(#10567) +py_cobjects(#10568) +py_cobjects(#10569) +py_cobjects(#10570) +py_cobjects(#10571) +py_cobjects(#10572) +py_cobjects(#10573) +py_cobjects(#10574) +py_cobjects(#10576) +py_cobjects(#10577) +py_cobjects(#10579) +py_cobjects(#10581) +py_cobjects(#10582) +py_cobjects(#10583) +py_cobjects(#10584) +py_cobjects(#10585) +py_cobjects(#10586) +py_cobjects(#10587) +py_cobjects(#10588) +py_cobjects(#10589) +py_cobjects(#10590) +py_cobjects(#10591) +py_cobjects(#10592) +py_cobjects(#10593) +py_cobjects(#10594) +#12094 = @"C_builtin_function_or_method$sys.exit" +py_cobjects(#12094) +py_cobjects(#10595) +py_cobjects(#10596) +py_cobjects(#10597) +py_cobjects(#10598) +py_cobjects(#10599) +py_cobjects(#10600) +py_cobjects(#10601) +py_cobjects(#10603) +py_cobjects(#10604) +py_cobjects(#10605) +py_cobjects(#10606) +py_cobjects(#10607) +py_cobjects(#10608) +py_cobjects(#10609) +py_cobjects(#10610) +py_cobjects(#10611) +py_cobjects(#11431) +py_cobjects(#10612) +py_cobjects(#10613) +py_cobjects(#10614) +py_cobjects(#10615) +#12095 = @"C_builtin_function_or_method$marshal.dumps" +py_cobjects(#12095) +py_cobjects(#10616) +py_cobjects(#10617) +py_cobjects(#10619) +py_cobjects(#10620) +py_cobjects(#10621) +py_cobjects(#10622) +py_cobjects(#10623) +py_cobjects(#10624) +py_cobjects(#10625) +py_cobjects(#10626) +py_cobjects(#10627) +py_cobjects(#10628) +py_cobjects(#10629) +py_cobjects(#10630) +py_cobjects(#10631) +py_cobjects(#11432) +py_cobjects(#10632) +py_cobjects(#10633) +py_cobjects(#11433) +py_cobjects(#10634) +py_cobjects(#11434) +py_cobjects(#10635) +py_cobjects(#10636) +#12096 = @"C_builtin_function_or_method$builtins.apply" +py_cobjects(#12096) +py_cobjects(#10637) +py_cobjects(#10638) +py_cobjects(#10639) +py_cobjects(#10640) +py_cobjects(#10641) +py_cobjects(#10642) +py_cobjects(#10643) +py_cobjects(#10644) +#12097 = @"C_builtin_function_or_method$builtins.divmod" +py_cobjects(#12097) +#12098 = @"C_builtin_function_or_method$builtins.eval" +py_cobjects(#12098) +py_cobjects(#11435) +py_cobjects(#10645) +py_cobjects(#10646) +#12099 = @"C_builtin_function_or_method$builtins.getattr" +py_cobjects(#12099) +py_cobjects(#10647) +py_cobjects(#10648) +py_cobjects(#10649) +py_cobjects(#11436) +py_cobjects(#10650) +py_cobjects(#10651) +py_cobjects(#11437) +py_cobjects(#10652) +py_cobjects(#10653) +py_cobjects(#10654) +py_cobjects(#10657) +py_cobjects(#10658) +py_cobjects(#10659) +#12100 = @"C_builtin_function_or_method$builtins.max" +py_cobjects(#12100) +#12101 = @"C_builtin_function_or_method$builtins.min" +py_cobjects(#12101) +#12102 = @"C_builtin_function_or_method$builtins.next" +py_cobjects(#12102) +py_cobjects(#11438) +py_cobjects(#10660) +py_cobjects(#10661) +#12103 = @"C_builtin_function_or_method$builtins.pow" +py_cobjects(#12103) +py_cobjects(#10662) +py_cobjects(#10663) +py_cobjects(#10664) +#12104 = @"C_builtin_function_or_method$builtins.reduce" +py_cobjects(#12104) +py_cobjects(#10665) +py_cobjects(#10666) +py_cobjects(#10667) +py_cobjects(#10668) +py_cobjects(#10669) +py_cobjects(#10670) +py_cobjects(#10671) +py_cobjects(#10672) +py_cobjects(#10673) +py_cobjects(#10674) +py_cobjects(#10675) +py_cobjects(#10676) +py_cobjects(#10677) +py_cobjects(#10678) +py_cobjects(#10679) +py_cobjects(#10680) +py_cobjects(#10681) +py_cobjects(#11440) +py_cobjects(#10682) +py_cobjects(#10683) +py_cobjects(#10684) +py_cobjects(#10685) +py_cobjects(#10686) +py_cobjects(#11442) +py_cobjects(#10687) +py_cobjects(#10688) +py_cobjects(#10689) +py_cobjects(#10690) +py_cobjects(#10692) +py_cobjects(#10693) +py_cobjects(#10694) +py_cobjects(#10695) +py_cobjects(#10696) +py_cobjects(#10697) +py_cobjects(#10698) +py_cobjects(#10699) +py_cobjects(#10700) +py_cobjects(#10701) +py_cobjects(#10702) +py_cobjects(#10703) +py_cobjects(#10704) +py_cobjects(#10705) +py_cobjects(#10706) +py_cobjects(#10707) +py_cobjects(#10708) +py_cobjects(#10709) +py_cobjects(#10710) +py_cobjects(#10711) +py_cobjects(#10712) +py_cobjects(#10713) +py_cobjects(#10714) +py_cobjects(#10715) +py_cobjects(#10716) +py_cobjects(#10717) +py_cobjects(#10718) +py_cobjects(#10719) +py_cobjects(#11445) +py_cobjects(#11446) +py_cobjects(#11447) +py_cobjects(#10720) +py_cobjects(#10721) +py_cobjects(#10722) +py_cobjects(#10723) +py_cobjects(#10724) +py_cobjects(#10725) +py_cobjects(#10726) +py_cobjects(#10727) +py_cobjects(#10728) +py_cobjects(#11450) +py_cobjects(#11451) +py_cobjects(#11452) +py_cobjects(#11453) +py_cobjects(#10729) +py_cobjects(#10730) +py_cobjects(#10731) +py_cobjects(#10732) +py_cobjects(#10733) +py_cobjects(#10734) +py_cobjects(#10735) +py_cobjects(#10736) +py_cobjects(#10737) +py_cobjects(#10738) +py_cobjects(#10739) +py_cobjects(#10740) +py_cobjects(#10741) +py_cobjects(#11455) +py_cobjects(#10742) +py_cobjects(#10743) +py_cobjects(#10744) +py_cobjects(#10745) +py_cobjects(#10746) +py_cobjects(#10747) +py_cobjects(#10748) +py_cobjects(#10749) +py_cobjects(#10750) +py_cobjects(#10751) +py_cobjects(#10752) +py_cobjects(#10753) +py_cobjects(#10754) +py_cobjects(#11461) +py_cobjects(#10755) +py_cobjects(#10756) +py_cobjects(#10757) +py_cobjects(#11462) +py_cobjects(#11463) +py_cobjects(#10758) +py_cobjects(#10759) +py_cobjects(#10760) +py_cobjects(#10762) +py_cobjects(#10763) +py_cobjects(#10764) +py_cobjects(#11464) +py_cobjects(#11466) +py_cobjects(#11467) +py_cobjects(#10765) +py_cobjects(#10766) +py_cobjects(#11468) +py_cobjects(#11469) +py_cobjects(#10767) +py_cobjects(#10768) +py_cobjects(#10769) +py_cobjects(#10770) +py_cobjects(#10771) +py_cobjects(#10772) +py_cobjects(#10773) +py_cobjects(#10774) +py_cobjects(#10775) +py_cobjects(#10776) +py_cobjects(#10777) +py_cobjects(#10778) +py_cobjects(#10779) +py_cobjects(#10780) +py_cobjects(#10781) +py_cobjects(#11470) +py_cobjects(#10782) +py_cobjects(#10783) +py_cobjects(#10784) +py_cobjects(#10785) +py_cobjects(#10786) +py_cobjects(#10787) +py_cobjects(#10788) +py_cobjects(#10789) +py_cobjects(#10790) +py_cobjects(#10791) +py_cobjects(#10792) +py_cobjects(#10793) +py_cobjects(#11471) +py_cobjects(#10795) +py_cobjects(#10796) +py_cobjects(#11475) +py_cobjects(#10797) +py_cobjects(#10798) +py_cobjects(#10799) +py_cobjects(#10800) +py_cobjects(#11477) +py_cobjects(#10801) +py_cobjects(#11478) +py_cobjects(#10802) +py_cobjects(#10803) +py_cobjects(#10804) +py_cobjects(#10805) +py_cobjects(#10806) +py_cobjects(#10807) +py_cobjects(#10808) +py_cobjects(#11479) +py_cobjects(#10809) +py_cobjects(#10810) +py_cobjects(#10811) +py_cobjects(#10812) +py_cobjects(#10813) +py_cobjects(#10814) +py_cobjects(#10815) +py_cobjects(#10816) +py_cobjects(#10817) +py_cobjects(#10818) +py_cobjects(#10819) +py_cobjects(#10820) +py_cobjects(#10821) +py_cobjects(#10822) +py_cobjects(#10823) +py_cobjects(#10824) +py_cobjects(#10825) +py_cobjects(#10826) +py_cobjects(#10827) +py_cobjects(#10828) +py_cobjects(#10829) +py_cobjects(#10830) +py_cobjects(#10831) +py_cobjects(#10832) +py_cobjects(#10833) +py_cobjects(#10834) +py_cobjects(#10835) +py_cobjects(#11481) +py_cobjects(#11482) +py_cobjects(#10836) +py_cobjects(#10837) +py_cobjects(#10838) +py_cobjects(#10839) +py_cobjects(#10840) +py_cobjects(#10841) +py_cobjects(#10842) +py_cobjects(#10843) +py_cobjects(#10844) +py_cobjects(#10845) +py_cobjects(#10846) +py_cobjects(#10847) +py_cobjects(#10848) +py_cobjects(#10849) +py_cobjects(#10850) +py_cobjects(#10851) +py_cobjects(#10852) +py_cobjects(#10853) +py_cobjects(#10854) +py_cobjects(#10855) +py_cobjects(#10856) +py_cobjects(#10857) +py_cobjects(#10858) +py_cobjects(#10859) +py_cobjects(#10860) +py_cobjects(#10861) +py_cobjects(#10862) +py_cobjects(#10863) +py_cobjects(#10864) +py_cobjects(#10865) +py_cobjects(#10866) +py_cobjects(#10867) +py_cobjects(#10868) +py_cobjects(#10869) +py_cobjects(#10870) +py_cobjects(#10871) +py_cobjects(#11484) +py_cobjects(#11485) +py_cobjects(#10872) +py_cobjects(#11487) +py_cobjects(#10873) +py_cobjects(#10874) +py_cobjects(#10875) +py_cobjects(#10876) +py_cobjects(#10877) +py_cobjects(#10878) +py_cobjects(#10879) +py_cobjects(#10880) +py_cobjects(#10881) +py_cobjects(#10882) +py_cobjects(#10883) +py_cobjects(#10884) +py_cobjects(#10885) +py_cobjects(#10886) +py_cobjects(#10887) +py_cobjects(#10888) +py_cobjects(#11488) +py_cobjects(#10889) +py_cobjects(#10890) +py_cobjects(#10891) +py_cobjects(#10892) +py_cobjects(#10893) +py_cobjects(#10894) +py_cobjects(#10895) +py_cobjects(#10896) +py_cobjects(#10897) +py_cobjects(#10898) +py_cobjects(#11491) +py_cobjects(#10899) +py_cobjects(#11493) +py_cobjects(#11494) +py_cobjects(#11496) +py_cobjects(#11497) +py_cobjects(#10900) +py_cobjects(#10901) +py_cobjects(#10902) +py_cobjects(#10903) +py_cobjects(#10904) +py_cobjects(#10905) +py_cobjects(#10906) +py_cobjects(#10907) +py_cobjects(#10908) +py_cobjects(#10909) +py_cobjects(#10910) +py_cobjects(#10911) +py_cobjects(#10912) +py_cobjects(#10913) +py_cobjects(#11499) +py_cobjects(#10914) +py_cobjects(#10915) +py_cobjects(#11501) +py_cobjects(#10916) +py_cobjects(#10917) +py_cobjects(#10918) +py_cobjects(#10919) +py_cobjects(#10920) +py_cobjects(#11502) +py_cobjects(#10921) +py_cobjects(#10922) +py_cobjects(#11504) +py_cobjects(#11505) +py_cobjects(#10923) +py_cobjects(#10924) +py_cobjects(#10925) +py_cobjects(#10926) +py_cobjects(#11507) +py_cobjects(#10927) +py_cobjects(#10928) +py_cobjects(#10929) +py_cobjects(#10930) +py_cobjects(#10931) +py_cobjects(#10932) +py_cobjects(#10933) +py_cobjects(#10934) +py_cobjects(#10935) +py_cobjects(#10936) +py_cobjects(#10937) +py_cobjects(#10938) +py_cobjects(#10939) +py_cobjects(#10940) +py_cobjects(#10941) +py_cobjects(#10942) +py_cobjects(#10943) +py_cobjects(#10944) +py_cobjects(#10945) +py_cobjects(#10946) +py_cobjects(#10947) +py_cobjects(#10948) +py_cobjects(#10949) +py_cobjects(#10950) +py_cobjects(#10951) +py_cobjects(#10952) +py_cobjects(#11510) +py_cobjects(#11512) +py_cobjects(#11513) +py_cobjects(#10953) +py_cobjects(#11514) +py_cobjects(#11515) +py_cobjects(#11517) +py_cobjects(#10954) +py_cobjects(#11518) +py_cobjects(#11519) +py_cobjects(#11520) +py_cobjects(#11521) +py_cobjects(#11522) +py_cobjects(#10955) +py_cobjects(#10956) +py_cobjects(#10957) +py_cobjects(#10958) +py_cobjects(#10959) +py_cobjects(#10960) +py_cobjects(#10961) +py_cobjects(#10962) +py_cobjects(#10963) +py_cobjects(#11524) +py_cobjects(#11525) +py_cobjects(#11526) +py_cobjects(#11527) +py_cobjects(#11528) +py_cobjects(#11529) +py_cobjects(#10964) +py_cobjects(#10965) +py_cobjects(#10966) +py_cobjects(#10967) +py_cobjects(#10968) +py_cobjects(#10969) +py_cobjects(#10970) +py_cobjects(#10971) +py_cobjects(#10972) +py_cobjects(#10973) +py_cobjects(#10974) +py_cobjects(#10975) +py_cobjects(#11531) +py_cobjects(#11532) +py_cobjects(#11533) +py_cobjects(#11534) +py_cobjects(#11535) +py_cobjects(#11536) +py_cobjects(#10976) +py_cobjects(#10977) +py_cobjects(#10978) +py_cobjects(#10979) +py_cobjects(#10980) +py_cobjects(#10981) +py_cobjects(#11537) +py_cobjects(#11539) +py_cobjects(#11540) +py_cobjects(#11541) +py_cobjects(#11542) +py_cobjects(#11543) +py_cobjects(#11544) +py_cobjects(#11545) +py_cobjects(#11546) +py_cobjects(#11547) +py_cobjects(#11548) +py_cobjects(#11550) +py_cobjects(#11551) +py_cobjects(#10982) +py_cobjects(#10983) +py_cobjects(#10984) +py_cobjects(#10985) +py_cobjects(#10986) +py_cobjects(#10987) +py_cobjects(#11552) +py_cobjects(#11553) +py_cobjects(#11554) +py_cobjects(#11555) +py_cobjects(#10988) +py_cobjects(#11556) +py_cobjects(#11557) +py_cobjects(#10989) +py_cobjects(#10990) +py_cobjects(#10991) +py_cobjects(#10992) +py_cobjects(#10993) +py_cobjects(#10994) +py_cobjects(#10995) +py_cobjects(#10996) +py_cobjects(#10997) +py_cobjects(#10998) +py_cobjects(#10999) +py_cobjects(#11000) +py_cobjects(#11001) +py_cobjects(#11002) +py_cobjects(#11003) +py_cobjects(#11004) +py_cobjects(#11005) +py_cobjects(#11006) +py_cobjects(#11007) +py_cobjects(#11008) +py_cobjects(#11009) +py_cobjects(#11010) +py_cobjects(#11011) +py_cobjects(#11012) +py_cobjects(#11561) +py_cobjects(#11013) +py_cobjects(#11014) +py_cobjects(#11015) +py_cobjects(#11016) +py_cobjects(#11017) +py_cobjects(#11018) +py_cobjects(#11562) +py_cobjects(#11564) +py_cobjects(#11565) +py_cobjects(#11566) +py_cobjects(#11567) +py_cobjects(#11019) +py_cobjects(#11020) +py_cobjects(#11021) +py_cobjects(#11569) +py_cobjects(#11022) +py_cobjects(#11023) +py_cobjects(#11571) +py_cobjects(#11572) +py_cobjects(#11024) +py_cobjects(#11573) +py_cobjects(#11574) +py_cobjects(#11575) +py_cobjects(#11576) +py_cobjects(#11577) +py_cobjects(#11578) +py_cobjects(#11025) +py_cobjects(#11579) +py_cobjects(#11026) +py_cobjects(#11027) +py_cobjects(#11028) +py_cobjects(#11029) +py_cobjects(#11030) +py_cobjects(#11031) +py_cobjects(#11032) +py_cobjects(#11033) +py_cobjects(#11034) +py_cobjects(#11035) +py_cobjects(#11581) +py_cobjects(#11036) +py_cobjects(#11037) +py_cobjects(#11038) +py_cobjects(#11039) +py_cobjects(#11040) +py_cobjects(#11041) +py_cobjects(#11042) +py_cobjects(#11043) +py_cobjects(#11044) +py_cobjects(#11045) +py_cobjects(#11046) +py_cobjects(#11047) +py_cobjects(#11048) +py_cobjects(#11049) +py_cobjects(#11050) +py_cobjects(#11051) +py_cobjects(#11052) +py_cobjects(#11053) +py_cobjects(#11054) +py_cobjects(#11055) +py_cobjects(#11056) +py_cobjects(#11057) +py_cobjects(#11058) +py_cobjects(#11059) +py_cobjects(#11060) +py_cobjects(#11061) +py_cobjects(#11062) +py_cobjects(#11582) +py_cobjects(#11587) +py_cobjects(#11588) +py_cobjects(#11589) +py_cobjects(#11590) +py_cobjects(#11591) +py_cobjects(#11592) +py_cobjects(#11593) +py_cobjects(#11594) +py_cobjects(#11595) +py_cobjects(#11596) +py_cobjects(#11597) +py_cobjects(#11598) +py_cobjects(#11599) +py_cobjects(#11600) +py_cobjects(#11601) +py_cobjects(#11602) +py_cobjects(#11603) +py_cobjects(#11604) +py_cobjects(#11605) +py_cobjects(#11606) +py_cobjects(#11608) +py_cobjects(#11063) +py_cobjects(#11064) +py_cobjects(#11610) +py_cobjects(#11612) +py_cobjects(#11613) +py_cobjects(#11614) +py_cobjects(#11065) +py_cobjects(#11066) +py_cobjects(#11067) +py_cobjects(#11616) +py_cobjects(#11617) +py_cobjects(#11618) +py_cobjects(#11619) +py_cobjects(#11620) +py_cobjects(#11068) +py_cobjects(#11069) +py_cobjects(#11070) +py_cobjects(#11071) +py_cobjects(#11622) +py_cobjects(#11072) +py_cobjects(#11073) +py_cobjects(#11074) +py_cobjects(#11075) +py_cobjects(#11076) +py_cobjects(#11077) +py_cobjects(#11078) +py_cobjects(#11079) +py_cobjects(#11623) +py_cobjects(#11624) +py_cobjects(#11625) +py_cobjects(#11626) +py_cobjects(#11080) +py_cobjects(#11081) +py_cobjects(#11082) +py_cobjects(#11083) +py_cobjects(#11084) +py_cobjects(#11085) +py_cobjects(#11086) +py_cobjects(#11087) +py_cobjects(#11088) +py_cobjects(#11627) +py_cobjects(#11089) +py_cobjects(#11090) +py_cobjects(#11091) +py_cobjects(#11092) +py_cobjects(#11093) +py_cobjects(#11094) +py_cobjects(#11628) +py_cobjects(#11095) +py_cobjects(#11630) +py_cobjects(#11632) +py_cobjects(#11096) +py_cobjects(#11097) +py_cobjects(#11098) +py_cobjects(#11099) +py_cobjects(#11633) +py_cobjects(#11100) +py_cobjects(#11634) +py_cobjects(#11636) +py_cobjects(#11637) +py_cobjects(#11638) +py_cobjects(#11101) +py_cobjects(#11639) +py_cobjects(#11641) +py_cobjects(#11642) +py_cobjects(#11643) +py_cobjects(#11644) +py_cobjects(#11645) +py_cobjects(#11646) +py_cobjects(#11647) +py_cobjects(#11648) +py_cobjects(#11102) +py_cobjects(#11649) +py_cobjects(#11650) +py_cobjects(#11651) +py_cobjects(#11103) +py_cobjects(#11104) +py_cobjects(#11105) +py_cobjects(#11652) +py_cobjects(#11653) +py_cobjects(#11106) +py_cobjects(#11654) +py_cobjects(#11656) +py_cobjects(#11657) +py_cobjects(#11107) +py_cobjects(#11658) +py_cobjects(#11108) +py_cobjects(#11659) +py_cobjects(#11109) +py_cobjects(#11110) +py_cobjects(#11111) +py_cobjects(#11112) +py_cobjects(#11113) +py_cobjects(#11660) +py_cobjects(#11114) +py_cobjects(#11115) +py_cobjects(#11116) +py_cobjects(#11117) +py_cobjects(#11118) +py_cobjects(#11120) +py_cobjects(#11121) +py_cobjects(#11122) +py_cobjects(#11123) +py_cobjects(#11124) +py_cobjects(#11125) +py_cobjects(#11126) +py_cobjects(#11127) +py_cobjects(#11128) +py_cobjects(#11129) +py_cobjects(#11130) +py_cobjects(#11131) +py_cobjects(#11132) +py_cobjects(#11133) +py_cobjects(#11134) +py_cobjects(#11135) +py_cobjects(#11136) +py_cobjects(#11137) +py_cobjects(#11138) +py_cobjects(#11139) +py_cobjects(#11140) +py_cobjects(#11141) +py_cobjects(#11142) +py_cobjects(#11143) +py_cobjects(#11144) +py_cobjects(#11145) +py_cobjects(#11146) +py_cobjects(#11147) +py_cobjects(#11148) +py_cobjects(#11149) +py_cobjects(#11150) +py_cobjects(#11151) +py_cobjects(#11152) +py_cobjects(#11153) +py_cobjects(#11154) +py_cobjects(#11665) +py_cobjects(#11155) +py_cobjects(#11156) +py_cobjects(#11157) +py_cobjects(#11666) +py_cobjects(#11667) +py_cobjects(#11159) +py_cobjects(#11160) +py_cobjects(#11161) +py_cobjects(#11162) +py_cobjects(#11163) +py_cobjects(#11164) +py_cobjects(#11165) +py_cobjects(#11166) +py_cobjects(#11167) +py_cobjects(#11168) +py_cobjects(#11670) +py_cobjects(#11169) +py_cobjects(#11170) +py_cobjects(#11171) +py_cobjects(#11172) +py_cobjects(#11173) +py_cobjects(#11174) +py_cobjects(#11175) +py_cobjects(#11176) +py_cobjects(#11177) +py_cobjects(#11178) +py_cobjects(#11179) +py_cobjects(#11180) +py_cobjects(#11181) +py_cobjects(#11182) +py_cobjects(#11183) +py_cobjects(#11184) +py_cobjects(#11185) +py_cobjects(#11186) +py_cobjects(#11187) +py_cobjects(#11188) +py_cobjects(#11189) +py_cobjects(#11190) +py_cobjects(#11191) +py_cobjects(#11193) +py_cobjects(#11194) +py_cobjects(#11195) +py_cobjects(#11196) +py_cobjects(#11672) +py_cobjects(#11197) +py_cobjects(#11198) +py_cobjects(#11199) +py_cobjects(#11200) +py_cobjects(#11201) +py_cobjects(#11202) +py_cobjects(#11203) +py_cobjects(#11204) +py_cobjects(#11205) +py_cobjects(#11206) +py_cobjects(#11207) +py_cobjects(#11677) +py_cobjects(#11208) +py_cobjects(#11209) +py_cobjects(#11678) +py_cobjects(#11679) +py_cobjects(#11680) +py_cobjects(#11210) +py_cobjects(#11211) +py_cobjects(#11212) +py_cobjects(#11213) +py_cobjects(#11681) +py_cobjects(#11682) +py_cobjects(#11683) +py_cobjects(#11214) +py_cobjects(#11684) +py_cobjects(#11215) +py_cobjects(#11216) +py_cobjects(#11685) +py_cobjects(#11686) +py_cobjects(#11687) +py_cobjects(#11217) +py_cobjects(#11218) +py_cobjects(#11219) +py_cobjects(#11220) +py_cobjects(#11221) +py_cobjects(#11222) +py_cobjects(#11689) +py_cobjects(#11691) +py_cobjects(#11223) +py_cobjects(#11692) +py_cobjects(#11224) +py_cobjects(#11225) +py_cobjects(#11226) +py_cobjects(#11227) +py_cobjects(#11228) +py_cobjects(#11229) +py_cobjects(#11230) +py_cobjects(#11231) +py_cobjects(#11232) +py_cobjects(#11694) +py_cobjects(#11233) +py_cobjects(#11234) +py_cobjects(#11235) +py_cobjects(#11236) +py_cobjects(#11237) +py_cobjects(#11240) +py_cobjects(#11241) +py_cobjects(#11242) +py_cobjects(#11243) +py_cobjects(#11244) +py_cobjects(#11245) +py_cobjects(#11246) +py_cobjects(#11247) +py_cobjects(#11248) +py_cobjects(#11249) +py_cobjects(#11250) +py_cobjects(#11251) +py_cobjects(#11252) +py_cobjects(#11253) +py_cobjects(#11254) +py_cobjects(#11255) +py_cobjects(#11256) +py_cobjects(#11257) +py_cobjects(#11258) +py_cobjects(#11259) +py_cobjects(#11260) +py_cobjects(#11696) +py_cobjects(#11261) +py_cobjects(#11262) +py_cobjects(#11263) +py_cobjects(#11264) +py_cobjects(#11265) +py_cobjects(#11266) +py_cobjects(#11267) +py_cobjects(#11268) +py_cobjects(#11269) +py_cobjects(#11270) +py_cobjects(#11271) +py_cobjects(#11697) +py_cobjects(#11272) +py_cobjects(#11273) +py_cobjects(#11274) +py_cobjects(#11275) +py_cobjects(#11276) +py_cobjects(#11277) +py_cobjects(#11278) +py_cobjects(#11699) +py_cobjects(#11700) +py_cobjects(#11701) +py_cobjects(#11702) +py_cobjects(#11703) +py_cobjects(#11704) +py_cobjects(#11705) +py_cobjects(#11706) +py_cobjects(#11707) +py_cobjects(#11709) +py_cobjects(#11710) +py_cobjects(#11279) +py_cobjects(#11280) +py_cobjects(#11281) +py_cobjects(#11282) +py_cobjects(#11283) +py_cobjects(#11284) +py_cobjects(#11286) +py_cobjects(#11287) +py_cobjects(#11712) +py_cobjects(#11288) +py_cobjects(#11289) +py_cobjects(#11290) +py_cobjects(#11291) +py_cobjects(#11292) +py_cobjects(#11293) +py_cobjects(#11294) +py_cobjects(#11295) +py_cobjects(#11296) +py_cobjects(#11297) +py_cobjects(#11298) +py_cobjects(#11299) +py_cobjects(#11300) +py_cobjects(#11301) +py_cobjects(#11302) +py_cobjects(#11303) +py_cobjects(#11304) +py_cobjects(#11305) +py_cobjects(#11306) +py_cobjects(#11307) +py_cobjects(#11308) +py_cobjects(#11309) +py_cobjects(#11310) +py_cobjects(#11311) +py_cobjects(#11312) +py_cobjects(#11313) +py_cobjects(#11314) +py_cobjects(#11315) +py_cobjects(#11316) +py_cobjects(#11317) +py_cobjects(#11318) +py_cobjects(#11319) +py_cobjects(#11320) +py_cobjects(#11321) +py_cobjects(#11322) +py_cobjects(#11323) +py_cobjects(#11324) +py_cobjects(#11325) +py_cobjects(#11713) +py_cobjects(#11326) +py_cobjects(#11327) +py_cobjects(#11328) +py_cobjects(#11329) +py_cobjects(#11330) +py_cobjects(#11331) +py_cobjects(#11332) +py_cobjects(#11333) +py_cobjects(#11334) +py_cobjects(#11335) +py_cobjects(#11336) +py_cobjects(#11337) +py_cobjects(#11338) +py_cobjects(#11339) +py_cobjects(#11340) +py_cobjects(#11714) +py_cobjects(#11341) +py_cobjects(#11342) +py_cobjects(#11343) +py_cobjects(#11344) +py_cobjects(#11345) +py_cobjects(#11346) +py_cobjects(#11347) +py_cobjects(#11348) +py_cobjects(#11715) +py_cobjects(#11349) +py_cobjects(#11350) +py_cobjects(#11351) +py_cobjects(#11352) +py_cobjects(#11353) +py_cobjects(#11354) +py_cobjects(#11355) +py_cobjects(#11356) +py_cobjects(#11357) +py_cobjects(#11358) +py_cobjects(#11359) +py_cobjects(#11360) +py_cobjects(#11361) +py_cobjects(#11716) +py_cobjects(#11362) +py_cobjects(#11363) +py_cobjects(#11364) +py_cobjects(#11365) +py_cobjects(#11366) +py_cobjects(#11367) +py_cobjects(#11368) +py_cobjects(#11369) +py_cobjects(#11370) +py_cobjects(#11371) +py_cobjects(#11372) +py_cobjects(#11373) +py_cobjects(#11374) +py_cobject_sources(#11441, 1) +py_cobject_sources(#11439, 1) +py_cobject_sources(#10691, 1) +py_cobject_sources(#11443, 1) +py_cobject_sources(#11285, 1) +py_cobject_sources(#11444, 1) +py_cobject_sources(#11448, 1) +py_cobject_sources(#11449, 1) +py_cobject_sources(#10021, 1) +py_cobject_sources(#10492, 1) +py_cobject_sources(#10017, 1) +py_cobject_sources(#10001, 1) +py_cobject_sources(#10056, 1) +py_cobject_sources(#11454, 1) +py_cobject_sources(#11456, 1) +py_cobject_sources(#11457, 1) +py_cobject_sources(#11458, 1) +py_cobject_sources(#11823, 1) +py_cobject_sources(#11824, 1) +py_cobject_sources(#11825, 1) +py_cobject_sources(#11460, 1) +py_cobject_sources(#11459, 1) +py_cobject_sources(#10761, 1) +py_cobject_sources(#11465, 1) +py_cobject_sources(#10007, 1) +py_cobject_sources(#10085, 1) +py_cobject_sources(#10102, 1) +py_cobject_sources(#11826, 1) +py_cobject_sources(#11827, 1) +py_cobject_sources(#11828, 1) +py_cobject_sources(#10794, 1) +py_cobject_sources(#11829, 1) +py_cobject_sources(#11830, 1) +py_cobject_sources(#11831, 1) +py_cobject_sources(#11832, 1) +py_cobject_sources(#11833, 1) +py_cobject_sources(#11834, 1) +py_cobject_sources(#11472, 1) +py_cobject_sources(#11835, 1) +py_cobject_sources(#11836, 1) +py_cobject_sources(#11837, 1) +py_cobject_sources(#11838, 1) +py_cobject_sources(#11839, 1) +py_cobject_sources(#11840, 1) +py_cobject_sources(#10058, 1) +py_cobject_sources(#11841, 1) +py_cobject_sources(#11473, 1) +py_cobject_sources(#11842, 1) +py_cobject_sources(#11474, 1) +py_cobject_sources(#11843, 1) +py_cobject_sources(#10038, 1) +py_cobject_sources(#11844, 1) +py_cobject_sources(#11845, 1) +py_cobject_sources(#11846, 1) +py_cobject_sources(#10165, 1) +py_cobject_sources(#10167, 1) +py_cobject_sources(#11476, 1) +py_cobject_sources(#11673, 1) +py_cobject_sources(#11847, 1) +py_cobject_sources(#11480, 1) +py_cobject_sources(#11848, 1) +py_cobject_sources(#11690, 1) +py_cobject_sources(#11662, 1) +py_cobject_sources(#10082, 1) +py_cobject_sources(#10201, 1) +py_cobject_sources(#10204, 1) +py_cobject_sources(#10314, 1) +py_cobject_sources(#10315, 1) +py_cobject_sources(#11483, 1) +py_cobject_sources(#11849, 1) +py_cobject_sources(#10354, 1) +py_cobject_sources(#10005, 1) +py_cobject_sources(#11688, 1) +py_cobject_sources(#10024, 1) +py_cobject_sources(#10218, 1) +py_cobject_sources(#11850, 1) +py_cobject_sources(#11851, 1) +py_cobject_sources(#11852, 1) +py_cobject_sources(#10356, 1) +py_cobject_sources(#10250, 1) +py_cobject_sources(#11486, 1) +py_cobject_sources(#11412, 1) +py_cobject_sources(#11489, 1) +py_cobject_sources(#11490, 1) +py_cobject_sources(#10370, 1) +py_cobject_sources(#11492, 1) +py_cobject_sources(#11495, 1) +py_cobject_sources(#11498, 1) +py_cobject_sources(#10384, 1) +py_cobject_sources(#11853, 1) +py_cobject_sources(#11375, 1) +py_cobject_sources(#11854, 1) +py_cobject_sources(#11500, 1) +py_cobject_sources(#11503, 1) +py_cobject_sources(#11506, 1) +py_cobject_sources(#11855, 1) +py_cobject_sources(#11856, 1) +py_cobject_sources(#11857, 1) +py_cobject_sources(#10497, 1) +py_cobject_sources(#11508, 1) +py_cobject_sources(#11549, 1) +py_cobject_sources(#11558, 1) +py_cobject_sources(#11511, 1) +py_cobject_sources(#11563, 1) +py_cobject_sources(#11560, 1) +py_cobject_sources(#11509, 1) +py_cobject_sources(#11559, 1) +py_cobject_sources(#11516, 1) +py_cobject_sources(#11530, 1) +py_cobject_sources(#11538, 1) +py_cobject_sources(#11523, 1) +py_cobject_sources(#11570, 1) +py_cobject_sources(#11568, 1) +py_cobject_sources(#11858, 1) +py_cobject_sources(#11580, 1) +py_cobject_sources(#10511, 1) +py_cobject_sources(#10541, 1) +py_cobject_sources(#11693, 1) +py_cobject_sources(#11859, 1) +py_cobject_sources(#10543, 1) +py_cobject_sources(#10545, 1) +py_cobject_sources(#11860, 1) +py_cobject_sources(#11583, 1) +py_cobject_sources(#11861, 1) +py_cobject_sources(#11862, 1) +py_cobject_sources(#11609, 1) +py_cobject_sources(#11615, 1) +py_cobject_sources(#11863, 1) +py_cobject_sources(#11611, 1) +py_cobject_sources(#11864, 1) +py_cobject_sources(#11865, 1) +py_cobject_sources(#11584, 1) +py_cobject_sources(#11585, 1) +py_cobject_sources(#10557, 1) +py_cobject_sources(#11607, 1) +py_cobject_sources(#11377, 1) +py_cobject_sources(#11866, 1) +py_cobject_sources(#11586, 1) +py_cobject_sources(#11867, 1) +py_cobject_sources(#11868, 1) +py_cobject_sources(#10618, 1) +py_cobject_sources(#11621, 1) +py_cobject_sources(#11869, 1) +py_cobject_sources(#11870, 1) +py_cobject_sources(#10575, 1) +py_cobject_sources(#10578, 1) +py_cobject_sources(#10580, 1) +py_cobject_sources(#11640, 1) +py_cobject_sources(#11629, 1) +py_cobject_sources(#11655, 1) +py_cobject_sources(#11631, 1) +py_cobject_sources(#11635, 1) +py_cobject_sources(#11871, 1) +py_cobject_sources(#11872, 1) +py_cobject_sources(#10602, 1) +py_cobject_sources(#11661, 1) +py_cobject_sources(#10517, 1) +py_cobject_sources(#11238, 1) +py_cobject_sources(#11239, 1) +py_cobject_sources(#11718, 1) +py_cobject_sources(#11873, 1) +py_cobject_sources(#11874, 1) +py_cobject_sources(#11708, 1) +py_cobject_sources(#11664, 1) +py_cobject_sources(#11875, 1) +py_cobject_sources(#11876, 1) +py_cobject_sources(#11663, 1) +py_cobject_sources(#11877, 1) +py_cobject_sources(#11878, 1) +py_cobject_sources(#11879, 1) +py_cobject_sources(#11880, 1) +py_cobject_sources(#11711, 1) +py_cobject_sources(#10655, 1) +py_cobject_sources(#10656, 1) +py_cobject_sources(#11674, 1) +py_cobject_sources(#11675, 1) +py_cobject_sources(#11676, 1) +py_cobject_sources(#11881, 1) +py_cobject_sources(#11882, 1) +py_cobject_sources(#11883, 1) +py_cobject_sources(#11884, 1) +py_cobject_sources(#11698, 1) +py_cobject_sources(#11885, 1) +py_cobject_sources(#11886, 1) +py_cobject_sources(#11119, 1) +py_cobject_sources(#11887, 1) +py_cobject_sources(#11888, 1) +py_cobject_sources(#11889, 1) +py_cobject_sources(#11668, 1) +py_cobject_sources(#11890, 1) +py_cobject_sources(#11891, 1) +py_cobject_sources(#11892, 1) +py_cobject_sources(#11893, 1) +py_cobject_sources(#11894, 1) +py_cobject_sources(#11895, 1) +py_cobject_sources(#11896, 1) +py_cobject_sources(#11897, 1) +py_cobject_sources(#11669, 1) +py_cobject_sources(#11898, 1) +py_cobject_sources(#11899, 1) +py_cobject_sources(#11900, 1) +py_cobject_sources(#11901, 1) +py_cobject_sources(#11902, 1) +py_cobject_sources(#11903, 1) +py_cobject_sources(#11904, 1) +py_cobject_sources(#11905, 1) +py_cobject_sources(#11906, 1) +py_cobject_sources(#11907, 1) +py_cobject_sources(#11908, 1) +py_cobject_sources(#11909, 1) +py_cobject_sources(#11910, 1) +py_cobject_sources(#11911, 1) +py_cobject_sources(#11912, 1) +py_cobject_sources(#11913, 1) +py_cobject_sources(#11914, 1) +py_cobject_sources(#11915, 1) +py_cobject_sources(#11916, 1) +py_cobject_sources(#11917, 1) +py_cobject_sources(#11918, 1) +py_cobject_sources(#11919, 1) +py_cobject_sources(#11920, 1) +py_cobject_sources(#11921, 1) +py_cobject_sources(#11922, 1) +py_cobject_sources(#11923, 1) +py_cobject_sources(#11924, 1) +py_cobject_sources(#11925, 1) +py_cobject_sources(#11926, 1) +py_cobject_sources(#11927, 1) +py_cobject_sources(#11928, 1) +py_cobject_sources(#11929, 1) +py_cobject_sources(#11930, 1) +py_cobject_sources(#11931, 1) +py_cobject_sources(#11932, 1) +py_cobject_sources(#11671, 1) +py_cobject_sources(#11192, 1) +py_cobject_sources(#11933, 1) +py_cobject_sources(#11934, 1) +py_cobject_sources(#11935, 1) +py_cobject_sources(#10003, 1) +py_cobject_sources(#11695, 1) +py_cobject_sources(#11158, 1) +py_cobject_sources(#11936, 1) +py_cobject_sources(#11937, 1) +py_cobject_sources(#11938, 1) +py_cobject_sources(#11939, 1) +py_cobject_sources(#11717, 1) +py_cobject_sources(#11719, 1) +py_cobject_sources(#11720, 1) +py_cobject_sources(#11721, 1) +py_cobject_sources(#11722, 1) +py_cobject_sources(#11940, 1) +py_cobject_sources(#11723, 1) +py_cobject_sources(#11724, 1) +py_cobject_sources(#11725, 1) +py_cobject_sources(#11726, 1) +py_cobject_sources(#11727, 1) +py_cobject_sources(#11728, 1) +py_cobject_sources(#11729, 1) +py_cobject_sources(#11730, 1) +py_cobject_sources(#11731, 1) +py_cobject_sources(#11732, 1) +py_cobject_sources(#11733, 1) +py_cobject_sources(#11734, 1) +py_cobject_sources(#11735, 1) +py_cobject_sources(#11941, 1) +py_cobject_sources(#11736, 1) +py_cobject_sources(#11737, 1) +py_cobject_sources(#11738, 1) +py_cobject_sources(#11739, 1) +py_cobject_sources(#11942, 1) +py_cobject_sources(#11943, 1) +py_cobject_sources(#11740, 1) +py_cobject_sources(#11741, 1) +py_cobject_sources(#11944, 1) +py_cobject_sources(#11742, 1) +py_cobject_sources(#11945, 1) +py_cobject_sources(#11946, 1) +py_cobject_sources(#11947, 1) +py_cobject_sources(#11948, 1) +py_cobject_sources(#11743, 1) +py_cobject_sources(#11744, 1) +py_cobject_sources(#11745, 1) +py_cobject_sources(#11746, 1) +py_cobject_sources(#11747, 1) +py_cobject_sources(#11748, 1) +py_cobject_sources(#11949, 1) +py_cobject_sources(#11950, 1) +py_cobject_sources(#11749, 1) +py_cobject_sources(#11750, 1) +py_cobject_sources(#11951, 1) +py_cobject_sources(#11952, 1) +py_cobject_sources(#11953, 1) +py_cobject_sources(#11954, 1) +py_cobject_sources(#11955, 1) +py_cobject_sources(#11956, 1) +py_cobject_sources(#11957, 1) +py_cobject_sources(#11958, 1) +py_cobject_sources(#11959, 1) +py_cobject_sources(#11960, 1) +py_cobject_sources(#11751, 1) +py_cobject_sources(#11752, 1) +py_cobject_sources(#11753, 1) +py_cobject_sources(#11754, 1) +py_cobject_sources(#11755, 1) +py_cobject_sources(#11756, 1) +py_cobject_sources(#11757, 1) +py_cobject_sources(#11758, 1) +py_cobject_sources(#11759, 1) +py_cobject_sources(#11760, 1) +py_cobject_sources(#11761, 1) +py_cobject_sources(#11961, 1) +py_cobject_sources(#11962, 1) +py_cobject_sources(#11762, 1) +py_cobject_sources(#11963, 1) +py_cobject_sources(#11763, 1) +py_cobject_sources(#11964, 1) +py_cobject_sources(#11764, 1) +py_cobject_sources(#11765, 1) +py_cobject_sources(#11965, 1) +py_cobject_sources(#11766, 1) +py_cobject_sources(#11767, 1) +py_cobject_sources(#11768, 1) +py_cobject_sources(#11966, 1) +py_cobject_sources(#11769, 1) +py_cobject_sources(#11770, 1) +py_cobject_sources(#11771, 1) +py_cobject_sources(#11772, 1) +py_cobject_sources(#11967, 1) +py_cobject_sources(#11773, 1) +py_cobject_sources(#11774, 1) +py_cobject_sources(#11775, 1) +py_cobject_sources(#11776, 1) +py_cobject_sources(#11968, 1) +py_cobject_sources(#11777, 1) +py_cobject_sources(#11778, 1) +py_cobject_sources(#11779, 1) +py_cobject_sources(#11969, 1) +py_cobject_sources(#11780, 1) +py_cobject_sources(#11781, 1) +py_cobject_sources(#11782, 1) +py_cobject_sources(#11783, 1) +py_cobject_sources(#11784, 1) +py_cobject_sources(#11785, 1) +py_cobject_sources(#11970, 1) +py_cobject_sources(#11786, 1) +py_cobject_sources(#11971, 1) +py_cobject_sources(#11787, 1) +py_cobject_sources(#11788, 1) +py_cobject_sources(#11789, 1) +py_cobject_sources(#11790, 1) +py_cobject_sources(#11791, 1) +py_cobject_sources(#11792, 1) +py_cobject_sources(#11793, 1) +py_cobject_sources(#11794, 1) +py_cobject_sources(#11795, 1) +py_cobject_sources(#11796, 1) +py_cobject_sources(#11797, 1) +py_cobject_sources(#11972, 1) +py_cobject_sources(#11798, 1) +py_cobject_sources(#11973, 1) +py_cobject_sources(#11799, 1) +py_cobject_sources(#11974, 1) +py_cobject_sources(#11800, 1) +py_cobject_sources(#11801, 1) +py_cobject_sources(#11975, 1) +py_cobject_sources(#11976, 1) +py_cobject_sources(#11977, 1) +py_cobject_sources(#11802, 1) +py_cobject_sources(#11803, 1) +py_cobject_sources(#11978, 1) +py_cobject_sources(#11979, 1) +py_cobject_sources(#11980, 1) +py_cobject_sources(#11981, 1) +py_cobject_sources(#11804, 1) +py_cobject_sources(#11805, 1) +py_cobject_sources(#11806, 1) +py_cobject_sources(#11807, 1) +py_cobject_sources(#11808, 1) +py_cobject_sources(#11982, 1) +py_cobject_sources(#11983, 1) +py_cobject_sources(#11984, 1) +py_cobject_sources(#11809, 1) +py_cobject_sources(#11810, 1) +py_cobject_sources(#11811, 1) +py_cobject_sources(#11812, 1) +py_cobject_sources(#11813, 1) +py_cobject_sources(#11814, 1) +py_cobject_sources(#11815, 1) +py_cobject_sources(#11816, 1) +py_cobject_sources(#11817, 1) +py_cobject_sources(#11818, 1) +py_cobject_sources(#11819, 1) +py_cobject_sources(#11820, 1) +py_cobject_sources(#11821, 1) +py_cobject_sources(#11822, 1) +py_cobject_sources(#10000, 1) +py_cobject_sources(#10002, 1) +py_cobject_sources(#10004, 1) +py_cobject_sources(#10006, 1) +py_cobject_sources(#10008, 1) +py_cobject_sources(#10009, 1) +py_cobject_sources(#10010, 1) +py_cobject_sources(#10011, 1) +py_cobject_sources(#10012, 1) +py_cobject_sources(#10013, 1) +py_cobject_sources(#11985, 1) +py_cobject_sources(#10014, 1) +py_cobject_sources(#10015, 1) +py_cobject_sources(#10016, 1) +py_cobject_sources(#10018, 1) +py_cobject_sources(#11986, 1) +py_cobject_sources(#11376, 1) +py_cobject_sources(#11987, 1) +py_cobject_sources(#10019, 1) +py_cobject_sources(#10020, 1) +py_cobject_sources(#10022, 1) +py_cobject_sources(#10023, 1) +py_cobject_sources(#10025, 1) +py_cobject_sources(#10026, 1) +py_cobject_sources(#10027, 1) +py_cobject_sources(#11378, 1) +py_cobject_sources(#11379, 1) +py_cobject_sources(#10028, 1) +py_cobject_sources(#10029, 1) +py_cobject_sources(#10030, 1) +py_cobject_sources(#10031, 1) +py_cobject_sources(#10032, 1) +py_cobject_sources(#10033, 1) +py_cobject_sources(#10034, 1) +py_cobject_sources(#10035, 1) +py_cobject_sources(#10036, 1) +py_cobject_sources(#10037, 1) +py_cobject_sources(#10039, 1) +py_cobject_sources(#10040, 1) +py_cobject_sources(#10041, 1) +py_cobject_sources(#10042, 1) +py_cobject_sources(#10043, 1) +py_cobject_sources(#10044, 1) +py_cobject_sources(#10045, 1) +py_cobject_sources(#10046, 1) +py_cobject_sources(#10047, 1) +py_cobject_sources(#10048, 1) +py_cobject_sources(#10049, 1) +py_cobject_sources(#10050, 1) +py_cobject_sources(#10051, 1) +py_cobject_sources(#10052, 1) +py_cobject_sources(#10053, 1) +py_cobject_sources(#10054, 1) +py_cobject_sources(#11380, 1) +py_cobject_sources(#11381, 1) +py_cobject_sources(#11382, 1) +py_cobject_sources(#11383, 1) +py_cobject_sources(#11384, 1) +py_cobject_sources(#11385, 1) +py_cobject_sources(#10055, 1) +py_cobject_sources(#10057, 1) +py_cobject_sources(#10059, 1) +py_cobject_sources(#10060, 1) +py_cobject_sources(#10061, 1) +py_cobject_sources(#10062, 1) +py_cobject_sources(#10063, 1) +py_cobject_sources(#10064, 1) +py_cobject_sources(#10065, 1) +py_cobject_sources(#10066, 1) +py_cobject_sources(#10067, 1) +py_cobject_sources(#11988, 1) +py_cobject_sources(#11989, 1) +py_cobject_sources(#11386, 1) +py_cobject_sources(#11387, 1) +py_cobject_sources(#11990, 1) +py_cobject_sources(#11991, 1) +py_cobject_sources(#11992, 1) +py_cobject_sources(#11993, 1) +py_cobject_sources(#11994, 1) +py_cobject_sources(#11995, 1) +py_cobject_sources(#11996, 1) +py_cobject_sources(#11997, 1) +py_cobject_sources(#11998, 1) +py_cobject_sources(#11999, 1) +py_cobject_sources(#12000, 1) +py_cobject_sources(#12001, 1) +py_cobject_sources(#12002, 1) +py_cobject_sources(#12003, 1) +py_cobject_sources(#11388, 1) +py_cobject_sources(#11389, 1) +py_cobject_sources(#11390, 1) +py_cobject_sources(#11391, 1) +py_cobject_sources(#11392, 1) +py_cobject_sources(#11393, 1) +py_cobject_sources(#11394, 1) +py_cobject_sources(#11395, 1) +py_cobject_sources(#11396, 1) +py_cobject_sources(#11397, 1) +py_cobject_sources(#12004, 1) +py_cobject_sources(#12005, 1) +py_cobject_sources(#12006, 1) +py_cobject_sources(#12007, 1) +py_cobject_sources(#10068, 1) +py_cobject_sources(#10069, 1) +py_cobject_sources(#12008, 1) +py_cobject_sources(#12009, 1) +py_cobject_sources(#12010, 1) +py_cobject_sources(#12011, 1) +py_cobject_sources(#12012, 1) +py_cobject_sources(#12013, 1) +py_cobject_sources(#12014, 1) +py_cobject_sources(#12015, 1) +py_cobject_sources(#12016, 1) +py_cobject_sources(#12017, 1) +py_cobject_sources(#12018, 1) +py_cobject_sources(#12019, 1) +py_cobject_sources(#12020, 1) +py_cobject_sources(#12021, 1) +py_cobject_sources(#12022, 1) +py_cobject_sources(#12023, 1) +py_cobject_sources(#12024, 1) +py_cobject_sources(#12025, 1) +py_cobject_sources(#12026, 1) +py_cobject_sources(#12027, 1) +py_cobject_sources(#12028, 1) +py_cobject_sources(#12029, 1) +py_cobject_sources(#12030, 1) +py_cobject_sources(#12031, 1) +py_cobject_sources(#12032, 1) +py_cobject_sources(#12033, 1) +py_cobject_sources(#12034, 1) +py_cobject_sources(#12035, 1) +py_cobject_sources(#12036, 1) +py_cobject_sources(#12037, 1) +py_cobject_sources(#12038, 1) +py_cobject_sources(#12039, 1) +py_cobject_sources(#11398, 1) +py_cobject_sources(#11399, 1) +py_cobject_sources(#12040, 1) +py_cobject_sources(#12041, 1) +py_cobject_sources(#11400, 1) +py_cobject_sources(#11401, 1) +py_cobject_sources(#12042, 1) +py_cobject_sources(#12043, 1) +py_cobject_sources(#10070, 1) +py_cobject_sources(#10071, 1) +py_cobject_sources(#10072, 1) +py_cobject_sources(#10073, 1) +py_cobject_sources(#12044, 1) +py_cobject_sources(#12045, 1) +py_cobject_sources(#12046, 1) +py_cobject_sources(#12047, 1) +py_cobject_sources(#11402, 1) +py_cobject_sources(#11403, 1) +py_cobject_sources(#10074, 1) +py_cobject_sources(#10075, 1) +py_cobject_sources(#10076, 1) +py_cobject_sources(#10077, 1) +py_cobject_sources(#12048, 1) +py_cobject_sources(#12049, 1) +py_cobject_sources(#12050, 1) +py_cobject_sources(#12051, 1) +py_cobject_sources(#12052, 1) +py_cobject_sources(#12053, 1) +py_cobject_sources(#12054, 1) +py_cobject_sources(#12055, 1) +py_cobject_sources(#12056, 1) +py_cobject_sources(#12057, 1) +py_cobject_sources(#12058, 1) +py_cobject_sources(#12059, 1) +py_cobject_sources(#10078, 1) +py_cobject_sources(#10079, 1) +py_cobject_sources(#10080, 1) +py_cobject_sources(#10081, 1) +py_cobject_sources(#10083, 1) +py_cobject_sources(#10084, 1) +py_cobject_sources(#12060, 1) +py_cobject_sources(#12061, 1) +py_cobject_sources(#10086, 1) +py_cobject_sources(#10087, 1) +py_cobject_sources(#10088, 1) +py_cobject_sources(#10089, 1) +py_cobject_sources(#10090, 1) +py_cobject_sources(#10091, 1) +py_cobject_sources(#10092, 1) +py_cobject_sources(#10093, 1) +py_cobject_sources(#10094, 1) +py_cobject_sources(#10095, 1) +py_cobject_sources(#10096, 1) +py_cobject_sources(#10097, 1) +py_cobject_sources(#10098, 1) +py_cobject_sources(#10099, 1) +py_cobject_sources(#10100, 1) +py_cobject_sources(#10101, 1) +py_cobject_sources(#10103, 1) +py_cobject_sources(#10104, 1) +py_cobject_sources(#10105, 1) +py_cobject_sources(#10106, 1) +py_cobject_sources(#10107, 1) +py_cobject_sources(#10108, 1) +py_cobject_sources(#10109, 1) +py_cobject_sources(#10110, 1) +py_cobject_sources(#10111, 1) +py_cobject_sources(#10112, 1) +py_cobject_sources(#10113, 1) +py_cobject_sources(#10114, 1) +py_cobject_sources(#10115, 1) +py_cobject_sources(#10116, 1) +py_cobject_sources(#10117, 1) +py_cobject_sources(#10118, 1) +py_cobject_sources(#10119, 1) +py_cobject_sources(#10120, 1) +py_cobject_sources(#10121, 1) +py_cobject_sources(#10122, 1) +py_cobject_sources(#10123, 1) +py_cobject_sources(#10124, 1) +py_cobject_sources(#10125, 1) +py_cobject_sources(#10126, 1) +py_cobject_sources(#10127, 1) +py_cobject_sources(#10128, 1) +py_cobject_sources(#10129, 1) +py_cobject_sources(#10130, 1) +py_cobject_sources(#10131, 1) +py_cobject_sources(#10132, 1) +py_cobject_sources(#10133, 1) +py_cobject_sources(#10134, 1) +py_cobject_sources(#10135, 1) +py_cobject_sources(#10136, 1) +py_cobject_sources(#10137, 1) +py_cobject_sources(#10138, 1) +py_cobject_sources(#10139, 1) +py_cobject_sources(#10140, 1) +py_cobject_sources(#10141, 1) +py_cobject_sources(#10142, 1) +py_cobject_sources(#10143, 1) +py_cobject_sources(#10144, 1) +py_cobject_sources(#10145, 1) +py_cobject_sources(#10146, 1) +py_cobject_sources(#10147, 1) +py_cobject_sources(#10148, 1) +py_cobject_sources(#10149, 1) +py_cobject_sources(#10150, 1) +py_cobject_sources(#10151, 1) +py_cobject_sources(#10152, 1) +py_cobject_sources(#10153, 1) +py_cobject_sources(#10154, 1) +py_cobject_sources(#10155, 1) +py_cobject_sources(#11404, 1) +py_cobject_sources(#11405, 1) +py_cobject_sources(#10156, 1) +py_cobject_sources(#10157, 1) +py_cobject_sources(#10158, 1) +py_cobject_sources(#10159, 1) +py_cobject_sources(#10160, 1) +py_cobject_sources(#10161, 1) +py_cobject_sources(#10162, 1) +py_cobject_sources(#10163, 1) +py_cobject_sources(#12062, 1) +py_cobject_sources(#10164, 1) +py_cobject_sources(#10166, 1) +py_cobject_sources(#10168, 1) +py_cobject_sources(#10169, 1) +py_cobject_sources(#10170, 1) +py_cobject_sources(#11406, 1) +py_cobject_sources(#10171, 1) +py_cobject_sources(#10172, 1) +py_cobject_sources(#10173, 1) +py_cobject_sources(#10174, 1) +py_cobject_sources(#10175, 1) +py_cobject_sources(#10176, 1) +py_cobject_sources(#10177, 1) +py_cobject_sources(#10178, 1) +py_cobject_sources(#10179, 1) +py_cobject_sources(#10180, 1) +py_cobject_sources(#10181, 1) +py_cobject_sources(#10182, 1) +py_cobject_sources(#10183, 1) +py_cobject_sources(#10184, 1) +py_cobject_sources(#10185, 1) +py_cobject_sources(#10186, 1) +py_cobject_sources(#10187, 1) +py_cobject_sources(#10188, 1) +py_cobject_sources(#10189, 1) +py_cobject_sources(#10190, 1) +py_cobject_sources(#11407, 1) +py_cobject_sources(#11408, 1) +py_cobject_sources(#10191, 1) +py_cobject_sources(#10192, 1) +py_cobject_sources(#10193, 1) +py_cobject_sources(#10194, 1) +py_cobject_sources(#12063, 1) +py_cobject_sources(#12064, 1) +py_cobject_sources(#10195, 1) +py_cobject_sources(#10196, 1) +py_cobject_sources(#10197, 1) +py_cobject_sources(#10198, 1) +py_cobject_sources(#12065, 1) +py_cobject_sources(#10199, 1) +py_cobject_sources(#10200, 1) +py_cobject_sources(#10202, 1) +py_cobject_sources(#10203, 1) +py_cobject_sources(#10205, 1) +py_cobject_sources(#10206, 1) +py_cobject_sources(#10207, 1) +py_cobject_sources(#10208, 1) +py_cobject_sources(#10209, 1) +py_cobject_sources(#10210, 1) +py_cobject_sources(#10211, 1) +py_cobject_sources(#10212, 1) +py_cobject_sources(#10213, 1) +py_cobject_sources(#10214, 1) +py_cobject_sources(#10215, 1) +py_cobject_sources(#10216, 1) +py_cobject_sources(#10217, 1) +py_cobject_sources(#10219, 1) +py_cobject_sources(#10220, 1) +py_cobject_sources(#12066, 1) +py_cobject_sources(#10221, 1) +py_cobject_sources(#10222, 1) +py_cobject_sources(#10223, 1) +py_cobject_sources(#10224, 1) +py_cobject_sources(#10225, 1) +py_cobject_sources(#12067, 1) +py_cobject_sources(#10226, 1) +py_cobject_sources(#10227, 1) +py_cobject_sources(#10228, 1) +py_cobject_sources(#10229, 1) +py_cobject_sources(#10230, 1) +py_cobject_sources(#10231, 1) +py_cobject_sources(#10232, 1) +py_cobject_sources(#10233, 1) +py_cobject_sources(#10234, 1) +py_cobject_sources(#12068, 1) +py_cobject_sources(#12069, 1) +py_cobject_sources(#12070, 1) +py_cobject_sources(#10235, 1) +py_cobject_sources(#10236, 1) +py_cobject_sources(#10237, 1) +py_cobject_sources(#10238, 1) +py_cobject_sources(#10239, 1) +py_cobject_sources(#10240, 1) +py_cobject_sources(#10241, 1) +py_cobject_sources(#10242, 1) +py_cobject_sources(#10243, 1) +py_cobject_sources(#10244, 1) +py_cobject_sources(#10245, 1) +py_cobject_sources(#10246, 1) +py_cobject_sources(#10247, 1) +py_cobject_sources(#10248, 1) +py_cobject_sources(#10249, 1) +py_cobject_sources(#10251, 1) +py_cobject_sources(#10252, 1) +py_cobject_sources(#10253, 1) +py_cobject_sources(#10254, 1) +py_cobject_sources(#10255, 1) +py_cobject_sources(#10256, 1) +py_cobject_sources(#10257, 1) +py_cobject_sources(#10258, 1) +py_cobject_sources(#10259, 1) +py_cobject_sources(#10260, 1) +py_cobject_sources(#10261, 1) +py_cobject_sources(#10262, 1) +py_cobject_sources(#10263, 1) +py_cobject_sources(#10264, 1) +py_cobject_sources(#10265, 1) +py_cobject_sources(#10266, 1) +py_cobject_sources(#10267, 1) +py_cobject_sources(#10268, 1) +py_cobject_sources(#10269, 1) +py_cobject_sources(#10270, 1) +py_cobject_sources(#10271, 1) +py_cobject_sources(#10272, 1) +py_cobject_sources(#10273, 1) +py_cobject_sources(#10274, 1) +py_cobject_sources(#10275, 1) +py_cobject_sources(#12071, 1) +py_cobject_sources(#10276, 1) +py_cobject_sources(#12072, 1) +py_cobject_sources(#10277, 1) +py_cobject_sources(#10278, 1) +py_cobject_sources(#10279, 1) +py_cobject_sources(#10280, 1) +py_cobject_sources(#10281, 1) +py_cobject_sources(#10282, 1) +py_cobject_sources(#10283, 1) +py_cobject_sources(#10284, 1) +py_cobject_sources(#10285, 1) +py_cobject_sources(#10286, 1) +py_cobject_sources(#10287, 1) +py_cobject_sources(#10288, 1) +py_cobject_sources(#10289, 1) +py_cobject_sources(#10290, 1) +py_cobject_sources(#10291, 1) +py_cobject_sources(#10292, 1) +py_cobject_sources(#10293, 1) +py_cobject_sources(#10294, 1) +py_cobject_sources(#10295, 1) +py_cobject_sources(#10296, 1) +py_cobject_sources(#10297, 1) +py_cobject_sources(#10298, 1) +py_cobject_sources(#10299, 1) +py_cobject_sources(#12073, 1) +py_cobject_sources(#12074, 1) +py_cobject_sources(#10300, 1) +py_cobject_sources(#10301, 1) +py_cobject_sources(#10302, 1) +py_cobject_sources(#10303, 1) +py_cobject_sources(#10304, 1) +py_cobject_sources(#10305, 1) +py_cobject_sources(#10306, 1) +py_cobject_sources(#12075, 1) +py_cobject_sources(#10307, 1) +py_cobject_sources(#10308, 1) +py_cobject_sources(#10309, 1) +py_cobject_sources(#10310, 1) +py_cobject_sources(#10311, 1) +py_cobject_sources(#10312, 1) +py_cobject_sources(#10313, 1) +py_cobject_sources(#10316, 1) +py_cobject_sources(#10317, 1) +py_cobject_sources(#10318, 1) +py_cobject_sources(#10319, 1) +py_cobject_sources(#10320, 1) +py_cobject_sources(#10321, 1) +py_cobject_sources(#10322, 1) +py_cobject_sources(#10323, 1) +py_cobject_sources(#10324, 1) +py_cobject_sources(#10325, 1) +py_cobject_sources(#10326, 1) +py_cobject_sources(#10327, 1) +py_cobject_sources(#10328, 1) +py_cobject_sources(#10329, 1) +py_cobject_sources(#12076, 1) +py_cobject_sources(#12077, 1) +py_cobject_sources(#10330, 1) +py_cobject_sources(#10331, 1) +py_cobject_sources(#10332, 1) +py_cobject_sources(#10333, 1) +py_cobject_sources(#10334, 1) +py_cobject_sources(#10335, 1) +py_cobject_sources(#10336, 1) +py_cobject_sources(#10337, 1) +py_cobject_sources(#10338, 1) +py_cobject_sources(#10339, 1) +py_cobject_sources(#12078, 1) +py_cobject_sources(#10340, 1) +py_cobject_sources(#10341, 1) +py_cobject_sources(#12079, 1) +py_cobject_sources(#12080, 1) +py_cobject_sources(#12081, 1) +py_cobject_sources(#10342, 1) +py_cobject_sources(#12082, 1) +py_cobject_sources(#10343, 1) +py_cobject_sources(#10344, 1) +py_cobject_sources(#10345, 1) +py_cobject_sources(#10346, 1) +py_cobject_sources(#12083, 1) +py_cobject_sources(#10347, 1) +py_cobject_sources(#10348, 1) +py_cobject_sources(#10349, 1) +py_cobject_sources(#10350, 1) +py_cobject_sources(#10351, 1) +py_cobject_sources(#10352, 1) +py_cobject_sources(#11409, 1) +py_cobject_sources(#11410, 1) +py_cobject_sources(#11411, 1) +py_cobject_sources(#10353, 1) +py_cobject_sources(#10355, 1) +py_cobject_sources(#10357, 1) +py_cobject_sources(#10358, 1) +py_cobject_sources(#10359, 1) +py_cobject_sources(#10360, 1) +py_cobject_sources(#10361, 1) +py_cobject_sources(#10362, 1) +py_cobject_sources(#10363, 1) +py_cobject_sources(#10364, 1) +py_cobject_sources(#10365, 1) +py_cobject_sources(#10366, 1) +py_cobject_sources(#10367, 1) +py_cobject_sources(#11413, 1) +py_cobject_sources(#10368, 1) +py_cobject_sources(#10369, 1) +py_cobject_sources(#10371, 1) +py_cobject_sources(#10372, 1) +py_cobject_sources(#10373, 1) +py_cobject_sources(#10374, 1) +py_cobject_sources(#10375, 1) +py_cobject_sources(#10376, 1) +py_cobject_sources(#10377, 1) +py_cobject_sources(#10378, 1) +py_cobject_sources(#10379, 1) +py_cobject_sources(#11414, 1) +py_cobject_sources(#10380, 1) +py_cobject_sources(#11415, 1) +py_cobject_sources(#11416, 1) +py_cobject_sources(#10381, 1) +py_cobject_sources(#10382, 1) +py_cobject_sources(#10383, 1) +py_cobject_sources(#10385, 1) +py_cobject_sources(#12084, 1) +py_cobject_sources(#12085, 1) +py_cobject_sources(#10386, 1) +py_cobject_sources(#10387, 1) +py_cobject_sources(#10388, 1) +py_cobject_sources(#10389, 1) +py_cobject_sources(#11417, 1) +py_cobject_sources(#10390, 1) +py_cobject_sources(#11418, 1) +py_cobject_sources(#10391, 1) +py_cobject_sources(#10392, 1) +py_cobject_sources(#10393, 1) +py_cobject_sources(#10394, 1) +py_cobject_sources(#12086, 1) +py_cobject_sources(#12087, 1) +py_cobject_sources(#12088, 1) +py_cobject_sources(#10395, 1) +py_cobject_sources(#10396, 1) +py_cobject_sources(#10397, 1) +py_cobject_sources(#10398, 1) +py_cobject_sources(#10399, 1) +py_cobject_sources(#10400, 1) +py_cobject_sources(#10401, 1) +py_cobject_sources(#10402, 1) +py_cobject_sources(#10403, 1) +py_cobject_sources(#10404, 1) +py_cobject_sources(#10405, 1) +py_cobject_sources(#10406, 1) +py_cobject_sources(#10407, 1) +py_cobject_sources(#10408, 1) +py_cobject_sources(#10409, 1) +py_cobject_sources(#10410, 1) +py_cobject_sources(#10411, 1) +py_cobject_sources(#10412, 1) +py_cobject_sources(#10413, 1) +py_cobject_sources(#10414, 1) +py_cobject_sources(#10415, 1) +py_cobject_sources(#10416, 1) +py_cobject_sources(#10417, 1) +py_cobject_sources(#10418, 1) +py_cobject_sources(#10419, 1) +py_cobject_sources(#10420, 1) +py_cobject_sources(#10421, 1) +py_cobject_sources(#10422, 1) +py_cobject_sources(#10423, 1) +py_cobject_sources(#10424, 1) +py_cobject_sources(#10425, 1) +py_cobject_sources(#10426, 1) +py_cobject_sources(#10427, 1) +py_cobject_sources(#10428, 1) +py_cobject_sources(#10429, 1) +py_cobject_sources(#10430, 1) +py_cobject_sources(#12089, 1) +py_cobject_sources(#10431, 1) +py_cobject_sources(#10432, 1) +py_cobject_sources(#10433, 1) +py_cobject_sources(#10434, 1) +py_cobject_sources(#10435, 1) +py_cobject_sources(#10436, 1) +py_cobject_sources(#10437, 1) +py_cobject_sources(#10438, 1) +py_cobject_sources(#10439, 1) +py_cobject_sources(#10440, 1) +py_cobject_sources(#10441, 1) +py_cobject_sources(#10442, 1) +py_cobject_sources(#10443, 1) +py_cobject_sources(#10444, 1) +py_cobject_sources(#12090, 1) +py_cobject_sources(#12091, 1) +py_cobject_sources(#10445, 1) +py_cobject_sources(#10446, 1) +py_cobject_sources(#10447, 1) +py_cobject_sources(#10448, 1) +py_cobject_sources(#10449, 1) +py_cobject_sources(#10450, 1) +py_cobject_sources(#10451, 1) +py_cobject_sources(#10452, 1) +py_cobject_sources(#10453, 1) +py_cobject_sources(#11419, 1) +py_cobject_sources(#10454, 1) +py_cobject_sources(#10455, 1) +py_cobject_sources(#10456, 1) +py_cobject_sources(#10457, 1) +py_cobject_sources(#10458, 1) +py_cobject_sources(#10459, 1) +py_cobject_sources(#10460, 1) +py_cobject_sources(#10461, 1) +py_cobject_sources(#10462, 1) +py_cobject_sources(#10463, 1) +py_cobject_sources(#10464, 1) +py_cobject_sources(#10465, 1) +py_cobject_sources(#10466, 1) +py_cobject_sources(#10467, 1) +py_cobject_sources(#10468, 1) +py_cobject_sources(#10469, 1) +py_cobject_sources(#10470, 1) +py_cobject_sources(#10471, 1) +py_cobject_sources(#10472, 1) +py_cobject_sources(#10473, 1) +py_cobject_sources(#10474, 1) +py_cobject_sources(#10475, 1) +py_cobject_sources(#10476, 1) +py_cobject_sources(#10477, 1) +py_cobject_sources(#10478, 1) +py_cobject_sources(#10479, 1) +py_cobject_sources(#10480, 1) +py_cobject_sources(#10481, 1) +py_cobject_sources(#10482, 1) +py_cobject_sources(#10483, 1) +py_cobject_sources(#11420, 1) +py_cobject_sources(#11421, 1) +py_cobject_sources(#10484, 1) +py_cobject_sources(#10485, 1) +py_cobject_sources(#11422, 1) +py_cobject_sources(#10486, 1) +py_cobject_sources(#10487, 1) +py_cobject_sources(#10488, 1) +py_cobject_sources(#10489, 1) +py_cobject_sources(#10490, 1) +py_cobject_sources(#10491, 1) +py_cobject_sources(#10493, 1) +py_cobject_sources(#10494, 1) +py_cobject_sources(#10495, 1) +py_cobject_sources(#10496, 1) +py_cobject_sources(#11423, 1) +py_cobject_sources(#10498, 1) +py_cobject_sources(#12092, 1) +py_cobject_sources(#12093, 1) +py_cobject_sources(#10499, 1) +py_cobject_sources(#10500, 1) +py_cobject_sources(#10501, 1) +py_cobject_sources(#10502, 1) +py_cobject_sources(#10503, 1) +py_cobject_sources(#10504, 1) +py_cobject_sources(#10505, 1) +py_cobject_sources(#10506, 1) +py_cobject_sources(#10507, 1) +py_cobject_sources(#10508, 1) +py_cobject_sources(#10509, 1) +py_cobject_sources(#10510, 1) +py_cobject_sources(#10512, 1) +py_cobject_sources(#10513, 1) +py_cobject_sources(#10514, 1) +py_cobject_sources(#10515, 1) +py_cobject_sources(#10516, 1) +py_cobject_sources(#10518, 1) +py_cobject_sources(#10519, 1) +py_cobject_sources(#10520, 1) +py_cobject_sources(#10521, 1) +py_cobject_sources(#10522, 1) +py_cobject_sources(#10523, 1) +py_cobject_sources(#10524, 1) +py_cobject_sources(#10525, 1) +py_cobject_sources(#10526, 1) +py_cobject_sources(#10527, 1) +py_cobject_sources(#10528, 1) +py_cobject_sources(#10529, 1) +py_cobject_sources(#10530, 1) +py_cobject_sources(#10531, 1) +py_cobject_sources(#10532, 1) +py_cobject_sources(#10533, 1) +py_cobject_sources(#10534, 1) +py_cobject_sources(#10535, 1) +py_cobject_sources(#10536, 1) +py_cobject_sources(#10537, 1) +py_cobject_sources(#10538, 1) +py_cobject_sources(#10539, 1) +py_cobject_sources(#10540, 1) +py_cobject_sources(#10542, 1) +py_cobject_sources(#10544, 1) +py_cobject_sources(#10546, 1) +py_cobject_sources(#10547, 1) +py_cobject_sources(#11424, 1) +py_cobject_sources(#11425, 1) +py_cobject_sources(#11426, 1) +py_cobject_sources(#10548, 1) +py_cobject_sources(#10549, 1) +py_cobject_sources(#10550, 1) +py_cobject_sources(#10551, 1) +py_cobject_sources(#10552, 1) +py_cobject_sources(#10553, 1) +py_cobject_sources(#10554, 1) +py_cobject_sources(#10555, 1) +py_cobject_sources(#10556, 1) +py_cobject_sources(#10558, 1) +py_cobject_sources(#10559, 1) +py_cobject_sources(#10560, 1) +py_cobject_sources(#11427, 1) +py_cobject_sources(#11428, 1) +py_cobject_sources(#11429, 1) +py_cobject_sources(#10561, 1) +py_cobject_sources(#10562, 1) +py_cobject_sources(#10563, 1) +py_cobject_sources(#10564, 1) +py_cobject_sources(#10565, 1) +py_cobject_sources(#10566, 1) +py_cobject_sources(#11430, 1) +py_cobject_sources(#10567, 1) +py_cobject_sources(#10568, 1) +py_cobject_sources(#10569, 1) +py_cobject_sources(#10570, 1) +py_cobject_sources(#10571, 1) +py_cobject_sources(#10572, 1) +py_cobject_sources(#10573, 1) +py_cobject_sources(#10574, 1) +py_cobject_sources(#10576, 1) +py_cobject_sources(#10577, 1) +py_cobject_sources(#10579, 1) +py_cobject_sources(#10581, 1) +py_cobject_sources(#10582, 1) +py_cobject_sources(#10583, 1) +py_cobject_sources(#10584, 1) +py_cobject_sources(#10585, 1) +py_cobject_sources(#10586, 1) +py_cobject_sources(#10587, 1) +py_cobject_sources(#10588, 1) +py_cobject_sources(#10589, 1) +py_cobject_sources(#10590, 1) +py_cobject_sources(#10591, 1) +py_cobject_sources(#10592, 1) +py_cobject_sources(#10593, 1) +py_cobject_sources(#10594, 1) +py_cobject_sources(#12094, 1) +py_cobject_sources(#10595, 1) +py_cobject_sources(#10596, 1) +py_cobject_sources(#10597, 1) +py_cobject_sources(#10598, 1) +py_cobject_sources(#10599, 1) +py_cobject_sources(#10600, 1) +py_cobject_sources(#10601, 1) +py_cobject_sources(#10603, 1) +py_cobject_sources(#10604, 1) +py_cobject_sources(#10605, 1) +py_cobject_sources(#10606, 1) +py_cobject_sources(#10607, 1) +py_cobject_sources(#10608, 1) +py_cobject_sources(#10609, 1) +py_cobject_sources(#10610, 1) +py_cobject_sources(#10611, 1) +py_cobject_sources(#11431, 1) +py_cobject_sources(#10612, 1) +py_cobject_sources(#10613, 1) +py_cobject_sources(#10614, 1) +py_cobject_sources(#10615, 1) +py_cobject_sources(#12095, 1) +py_cobject_sources(#10616, 1) +py_cobject_sources(#10617, 1) +py_cobject_sources(#10619, 1) +py_cobject_sources(#10620, 1) +py_cobject_sources(#10621, 1) +py_cobject_sources(#10622, 1) +py_cobject_sources(#10623, 1) +py_cobject_sources(#10624, 1) +py_cobject_sources(#10625, 1) +py_cobject_sources(#10626, 1) +py_cobject_sources(#10627, 1) +py_cobject_sources(#10628, 1) +py_cobject_sources(#10629, 1) +py_cobject_sources(#10630, 1) +py_cobject_sources(#10631, 1) +py_cobject_sources(#11432, 1) +py_cobject_sources(#10632, 1) +py_cobject_sources(#10633, 1) +py_cobject_sources(#11433, 1) +py_cobject_sources(#10634, 1) +py_cobject_sources(#11434, 1) +py_cobject_sources(#10635, 1) +py_cobject_sources(#10636, 1) +py_cobject_sources(#12096, 1) +py_cobject_sources(#10637, 1) +py_cobject_sources(#10638, 1) +py_cobject_sources(#10639, 1) +py_cobject_sources(#10640, 1) +py_cobject_sources(#10641, 1) +py_cobject_sources(#10642, 1) +py_cobject_sources(#10643, 1) +py_cobject_sources(#10644, 1) +py_cobject_sources(#12097, 1) +py_cobject_sources(#12098, 1) +py_cobject_sources(#11435, 1) +py_cobject_sources(#10645, 1) +py_cobject_sources(#10646, 1) +py_cobject_sources(#12099, 1) +py_cobject_sources(#10647, 1) +py_cobject_sources(#10648, 1) +py_cobject_sources(#10649, 1) +py_cobject_sources(#11436, 1) +py_cobject_sources(#10650, 1) +py_cobject_sources(#10651, 1) +py_cobject_sources(#11437, 1) +py_cobject_sources(#10652, 1) +py_cobject_sources(#10653, 1) +py_cobject_sources(#10654, 1) +py_cobject_sources(#10657, 1) +py_cobject_sources(#10658, 1) +py_cobject_sources(#10659, 1) +py_cobject_sources(#12100, 1) +py_cobject_sources(#12101, 1) +py_cobject_sources(#12102, 1) +py_cobject_sources(#11438, 1) +py_cobject_sources(#10660, 1) +py_cobject_sources(#10661, 1) +py_cobject_sources(#12103, 1) +py_cobject_sources(#10662, 1) +py_cobject_sources(#10663, 1) +py_cobject_sources(#10664, 1) +py_cobject_sources(#12104, 1) +py_cobject_sources(#10665, 1) +py_cobject_sources(#10666, 1) +py_cobject_sources(#10667, 1) +py_cobject_sources(#10668, 1) +py_cobject_sources(#10669, 1) +py_cobject_sources(#10670, 1) +py_cobject_sources(#10671, 1) +py_cobject_sources(#10672, 1) +py_cobject_sources(#10673, 1) +py_cobject_sources(#10674, 1) +py_cobject_sources(#10675, 1) +py_cobject_sources(#10676, 1) +py_cobject_sources(#10677, 1) +py_cobject_sources(#10678, 1) +py_cobject_sources(#10679, 1) +py_cobject_sources(#10680, 1) +py_cobject_sources(#10681, 1) +py_cobject_sources(#11440, 1) +py_cobject_sources(#10682, 1) +py_cobject_sources(#10683, 1) +py_cobject_sources(#10684, 1) +py_cobject_sources(#10685, 1) +py_cobject_sources(#10686, 1) +py_cobject_sources(#11442, 1) +py_cobject_sources(#10687, 1) +py_cobject_sources(#10688, 1) +py_cobject_sources(#10689, 1) +py_cobject_sources(#10690, 1) +py_cobject_sources(#10692, 1) +py_cobject_sources(#10693, 1) +py_cobject_sources(#10694, 1) +py_cobject_sources(#10695, 1) +py_cobject_sources(#10696, 1) +py_cobject_sources(#10697, 1) +py_cobject_sources(#10698, 1) +py_cobject_sources(#10699, 1) +py_cobject_sources(#10700, 1) +py_cobject_sources(#10701, 1) +py_cobject_sources(#10702, 1) +py_cobject_sources(#10703, 1) +py_cobject_sources(#10704, 1) +py_cobject_sources(#10705, 1) +py_cobject_sources(#10706, 1) +py_cobject_sources(#10707, 1) +py_cobject_sources(#10708, 1) +py_cobject_sources(#10709, 1) +py_cobject_sources(#10710, 1) +py_cobject_sources(#10711, 1) +py_cobject_sources(#10712, 1) +py_cobject_sources(#10713, 1) +py_cobject_sources(#10714, 1) +py_cobject_sources(#10715, 1) +py_cobject_sources(#10716, 1) +py_cobject_sources(#10717, 1) +py_cobject_sources(#10718, 1) +py_cobject_sources(#10719, 1) +py_cobject_sources(#11445, 1) +py_cobject_sources(#11446, 1) +py_cobject_sources(#11447, 1) +py_cobject_sources(#10720, 1) +py_cobject_sources(#10721, 1) +py_cobject_sources(#10722, 1) +py_cobject_sources(#10723, 1) +py_cobject_sources(#10724, 1) +py_cobject_sources(#10725, 1) +py_cobject_sources(#10726, 1) +py_cobject_sources(#10727, 1) +py_cobject_sources(#10728, 1) +py_cobject_sources(#11450, 1) +py_cobject_sources(#11451, 1) +py_cobject_sources(#11452, 1) +py_cobject_sources(#11453, 1) +py_cobject_sources(#10729, 1) +py_cobject_sources(#10730, 1) +py_cobject_sources(#10731, 1) +py_cobject_sources(#10732, 1) +py_cobject_sources(#10733, 1) +py_cobject_sources(#10734, 1) +py_cobject_sources(#10735, 1) +py_cobject_sources(#10736, 1) +py_cobject_sources(#10737, 1) +py_cobject_sources(#10738, 1) +py_cobject_sources(#10739, 1) +py_cobject_sources(#10740, 1) +py_cobject_sources(#10741, 1) +py_cobject_sources(#11455, 1) +py_cobject_sources(#10742, 1) +py_cobject_sources(#10743, 1) +py_cobject_sources(#10744, 1) +py_cobject_sources(#10745, 1) +py_cobject_sources(#10746, 1) +py_cobject_sources(#10747, 1) +py_cobject_sources(#10748, 1) +py_cobject_sources(#10749, 1) +py_cobject_sources(#10750, 1) +py_cobject_sources(#10751, 1) +py_cobject_sources(#10752, 1) +py_cobject_sources(#10753, 1) +py_cobject_sources(#10754, 1) +py_cobject_sources(#11461, 1) +py_cobject_sources(#10755, 1) +py_cobject_sources(#10756, 1) +py_cobject_sources(#10757, 1) +py_cobject_sources(#11462, 1) +py_cobject_sources(#11463, 1) +py_cobject_sources(#10758, 1) +py_cobject_sources(#10759, 1) +py_cobject_sources(#10760, 1) +py_cobject_sources(#10762, 1) +py_cobject_sources(#10763, 1) +py_cobject_sources(#10764, 1) +py_cobject_sources(#11464, 1) +py_cobject_sources(#11466, 1) +py_cobject_sources(#11467, 1) +py_cobject_sources(#10765, 1) +py_cobject_sources(#10766, 1) +py_cobject_sources(#11468, 1) +py_cobject_sources(#11469, 1) +py_cobject_sources(#10767, 1) +py_cobject_sources(#10768, 1) +py_cobject_sources(#10769, 1) +py_cobject_sources(#10770, 1) +py_cobject_sources(#10771, 1) +py_cobject_sources(#10772, 1) +py_cobject_sources(#10773, 1) +py_cobject_sources(#10774, 1) +py_cobject_sources(#10775, 1) +py_cobject_sources(#10776, 1) +py_cobject_sources(#10777, 1) +py_cobject_sources(#10778, 1) +py_cobject_sources(#10779, 1) +py_cobject_sources(#10780, 1) +py_cobject_sources(#10781, 1) +py_cobject_sources(#11470, 1) +py_cobject_sources(#10782, 1) +py_cobject_sources(#10783, 1) +py_cobject_sources(#10784, 1) +py_cobject_sources(#10785, 1) +py_cobject_sources(#10786, 1) +py_cobject_sources(#10787, 1) +py_cobject_sources(#10788, 1) +py_cobject_sources(#10789, 1) +py_cobject_sources(#10790, 1) +py_cobject_sources(#10791, 1) +py_cobject_sources(#10792, 1) +py_cobject_sources(#10793, 1) +py_cobject_sources(#11471, 1) +py_cobject_sources(#10795, 1) +py_cobject_sources(#10796, 1) +py_cobject_sources(#11475, 1) +py_cobject_sources(#10797, 1) +py_cobject_sources(#10798, 1) +py_cobject_sources(#10799, 1) +py_cobject_sources(#10800, 1) +py_cobject_sources(#11477, 1) +py_cobject_sources(#10801, 1) +py_cobject_sources(#11478, 1) +py_cobject_sources(#10802, 1) +py_cobject_sources(#10803, 1) +py_cobject_sources(#10804, 1) +py_cobject_sources(#10805, 1) +py_cobject_sources(#10806, 1) +py_cobject_sources(#10807, 1) +py_cobject_sources(#10808, 1) +py_cobject_sources(#11479, 1) +py_cobject_sources(#10809, 1) +py_cobject_sources(#10810, 1) +py_cobject_sources(#10811, 1) +py_cobject_sources(#10812, 1) +py_cobject_sources(#10813, 1) +py_cobject_sources(#10814, 1) +py_cobject_sources(#10815, 1) +py_cobject_sources(#10816, 1) +py_cobject_sources(#10817, 1) +py_cobject_sources(#10818, 1) +py_cobject_sources(#10819, 1) +py_cobject_sources(#10820, 1) +py_cobject_sources(#10821, 1) +py_cobject_sources(#10822, 1) +py_cobject_sources(#10823, 1) +py_cobject_sources(#10824, 1) +py_cobject_sources(#10825, 1) +py_cobject_sources(#10826, 1) +py_cobject_sources(#10827, 1) +py_cobject_sources(#10828, 1) +py_cobject_sources(#10829, 1) +py_cobject_sources(#10830, 1) +py_cobject_sources(#10831, 1) +py_cobject_sources(#10832, 1) +py_cobject_sources(#10833, 1) +py_cobject_sources(#10834, 1) +py_cobject_sources(#10835, 1) +py_cobject_sources(#11481, 1) +py_cobject_sources(#11482, 1) +py_cobject_sources(#10836, 1) +py_cobject_sources(#10837, 1) +py_cobject_sources(#10838, 1) +py_cobject_sources(#10839, 1) +py_cobject_sources(#10840, 1) +py_cobject_sources(#10841, 1) +py_cobject_sources(#10842, 1) +py_cobject_sources(#10843, 1) +py_cobject_sources(#10844, 1) +py_cobject_sources(#10845, 1) +py_cobject_sources(#10846, 1) +py_cobject_sources(#10847, 1) +py_cobject_sources(#10848, 1) +py_cobject_sources(#10849, 1) +py_cobject_sources(#10850, 1) +py_cobject_sources(#10851, 1) +py_cobject_sources(#10852, 1) +py_cobject_sources(#10853, 1) +py_cobject_sources(#10854, 1) +py_cobject_sources(#10855, 1) +py_cobject_sources(#10856, 1) +py_cobject_sources(#10857, 1) +py_cobject_sources(#10858, 1) +py_cobject_sources(#10859, 1) +py_cobject_sources(#10860, 1) +py_cobject_sources(#10861, 1) +py_cobject_sources(#10862, 1) +py_cobject_sources(#10863, 1) +py_cobject_sources(#10864, 1) +py_cobject_sources(#10865, 1) +py_cobject_sources(#10866, 1) +py_cobject_sources(#10867, 1) +py_cobject_sources(#10868, 1) +py_cobject_sources(#10869, 1) +py_cobject_sources(#10870, 1) +py_cobject_sources(#10871, 1) +py_cobject_sources(#11484, 1) +py_cobject_sources(#11485, 1) +py_cobject_sources(#10872, 1) +py_cobject_sources(#11487, 1) +py_cobject_sources(#10873, 1) +py_cobject_sources(#10874, 1) +py_cobject_sources(#10875, 1) +py_cobject_sources(#10876, 1) +py_cobject_sources(#10877, 1) +py_cobject_sources(#10878, 1) +py_cobject_sources(#10879, 1) +py_cobject_sources(#10880, 1) +py_cobject_sources(#10881, 1) +py_cobject_sources(#10882, 1) +py_cobject_sources(#10883, 1) +py_cobject_sources(#10884, 1) +py_cobject_sources(#10885, 1) +py_cobject_sources(#10886, 1) +py_cobject_sources(#10887, 1) +py_cobject_sources(#10888, 1) +py_cobject_sources(#11488, 1) +py_cobject_sources(#10889, 1) +py_cobject_sources(#10890, 1) +py_cobject_sources(#10891, 1) +py_cobject_sources(#10892, 1) +py_cobject_sources(#10893, 1) +py_cobject_sources(#10894, 1) +py_cobject_sources(#10895, 1) +py_cobject_sources(#10896, 1) +py_cobject_sources(#10897, 1) +py_cobject_sources(#10898, 1) +py_cobject_sources(#11491, 1) +py_cobject_sources(#10899, 1) +py_cobject_sources(#11493, 1) +py_cobject_sources(#11494, 1) +py_cobject_sources(#11496, 1) +py_cobject_sources(#11497, 1) +py_cobject_sources(#10900, 1) +py_cobject_sources(#10901, 1) +py_cobject_sources(#10902, 1) +py_cobject_sources(#10903, 1) +py_cobject_sources(#10904, 1) +py_cobject_sources(#10905, 1) +py_cobject_sources(#10906, 1) +py_cobject_sources(#10907, 1) +py_cobject_sources(#10908, 1) +py_cobject_sources(#10909, 1) +py_cobject_sources(#10910, 1) +py_cobject_sources(#10911, 1) +py_cobject_sources(#10912, 1) +py_cobject_sources(#10913, 1) +py_cobject_sources(#11499, 1) +py_cobject_sources(#10914, 1) +py_cobject_sources(#10915, 1) +py_cobject_sources(#11501, 1) +py_cobject_sources(#10916, 1) +py_cobject_sources(#10917, 1) +py_cobject_sources(#10918, 1) +py_cobject_sources(#10919, 1) +py_cobject_sources(#10920, 1) +py_cobject_sources(#11502, 1) +py_cobject_sources(#10921, 1) +py_cobject_sources(#10922, 1) +py_cobject_sources(#11504, 1) +py_cobject_sources(#11505, 1) +py_cobject_sources(#10923, 1) +py_cobject_sources(#10924, 1) +py_cobject_sources(#10925, 1) +py_cobject_sources(#10926, 1) +py_cobject_sources(#11507, 1) +py_cobject_sources(#10927, 1) +py_cobject_sources(#10928, 1) +py_cobject_sources(#10929, 1) +py_cobject_sources(#10930, 1) +py_cobject_sources(#10931, 1) +py_cobject_sources(#10932, 1) +py_cobject_sources(#10933, 1) +py_cobject_sources(#10934, 1) +py_cobject_sources(#10935, 1) +py_cobject_sources(#10936, 1) +py_cobject_sources(#10937, 1) +py_cobject_sources(#10938, 1) +py_cobject_sources(#10939, 1) +py_cobject_sources(#10940, 1) +py_cobject_sources(#10941, 1) +py_cobject_sources(#10942, 1) +py_cobject_sources(#10943, 1) +py_cobject_sources(#10944, 1) +py_cobject_sources(#10945, 1) +py_cobject_sources(#10946, 1) +py_cobject_sources(#10947, 1) +py_cobject_sources(#10948, 1) +py_cobject_sources(#10949, 1) +py_cobject_sources(#10950, 1) +py_cobject_sources(#10951, 1) +py_cobject_sources(#10952, 1) +py_cobject_sources(#11510, 1) +py_cobject_sources(#11512, 1) +py_cobject_sources(#11513, 1) +py_cobject_sources(#10953, 1) +py_cobject_sources(#11514, 1) +py_cobject_sources(#11515, 1) +py_cobject_sources(#11517, 1) +py_cobject_sources(#10954, 1) +py_cobject_sources(#11518, 1) +py_cobject_sources(#11519, 1) +py_cobject_sources(#11520, 1) +py_cobject_sources(#11521, 1) +py_cobject_sources(#11522, 1) +py_cobject_sources(#10955, 1) +py_cobject_sources(#10956, 1) +py_cobject_sources(#10957, 1) +py_cobject_sources(#10958, 1) +py_cobject_sources(#10959, 1) +py_cobject_sources(#10960, 1) +py_cobject_sources(#10961, 1) +py_cobject_sources(#10962, 1) +py_cobject_sources(#10963, 1) +py_cobject_sources(#11524, 1) +py_cobject_sources(#11525, 1) +py_cobject_sources(#11526, 1) +py_cobject_sources(#11527, 1) +py_cobject_sources(#11528, 1) +py_cobject_sources(#11529, 1) +py_cobject_sources(#10964, 1) +py_cobject_sources(#10965, 1) +py_cobject_sources(#10966, 1) +py_cobject_sources(#10967, 1) +py_cobject_sources(#10968, 1) +py_cobject_sources(#10969, 1) +py_cobject_sources(#10970, 1) +py_cobject_sources(#10971, 1) +py_cobject_sources(#10972, 1) +py_cobject_sources(#10973, 1) +py_cobject_sources(#10974, 1) +py_cobject_sources(#10975, 1) +py_cobject_sources(#11531, 1) +py_cobject_sources(#11532, 1) +py_cobject_sources(#11533, 1) +py_cobject_sources(#11534, 1) +py_cobject_sources(#11535, 1) +py_cobject_sources(#11536, 1) +py_cobject_sources(#10976, 1) +py_cobject_sources(#10977, 1) +py_cobject_sources(#10978, 1) +py_cobject_sources(#10979, 1) +py_cobject_sources(#10980, 1) +py_cobject_sources(#10981, 1) +py_cobject_sources(#11537, 1) +py_cobject_sources(#11539, 1) +py_cobject_sources(#11540, 1) +py_cobject_sources(#11541, 1) +py_cobject_sources(#11542, 1) +py_cobject_sources(#11543, 1) +py_cobject_sources(#11544, 1) +py_cobject_sources(#11545, 1) +py_cobject_sources(#11546, 1) +py_cobject_sources(#11547, 1) +py_cobject_sources(#11548, 1) +py_cobject_sources(#11550, 1) +py_cobject_sources(#11551, 1) +py_cobject_sources(#10982, 1) +py_cobject_sources(#10983, 1) +py_cobject_sources(#10984, 1) +py_cobject_sources(#10985, 1) +py_cobject_sources(#10986, 1) +py_cobject_sources(#10987, 1) +py_cobject_sources(#11552, 1) +py_cobject_sources(#11553, 1) +py_cobject_sources(#11554, 1) +py_cobject_sources(#11555, 1) +py_cobject_sources(#10988, 1) +py_cobject_sources(#11556, 1) +py_cobject_sources(#11557, 1) +py_cobject_sources(#10989, 1) +py_cobject_sources(#10990, 1) +py_cobject_sources(#10991, 1) +py_cobject_sources(#10992, 1) +py_cobject_sources(#10993, 1) +py_cobject_sources(#10994, 1) +py_cobject_sources(#10995, 1) +py_cobject_sources(#10996, 1) +py_cobject_sources(#10997, 1) +py_cobject_sources(#10998, 1) +py_cobject_sources(#10999, 1) +py_cobject_sources(#11000, 1) +py_cobject_sources(#11001, 1) +py_cobject_sources(#11002, 1) +py_cobject_sources(#11003, 1) +py_cobject_sources(#11004, 1) +py_cobject_sources(#11005, 1) +py_cobject_sources(#11006, 1) +py_cobject_sources(#11007, 1) +py_cobject_sources(#11008, 1) +py_cobject_sources(#11009, 1) +py_cobject_sources(#11010, 1) +py_cobject_sources(#11011, 1) +py_cobject_sources(#11012, 1) +py_cobject_sources(#11561, 1) +py_cobject_sources(#11013, 1) +py_cobject_sources(#11014, 1) +py_cobject_sources(#11015, 1) +py_cobject_sources(#11016, 1) +py_cobject_sources(#11017, 1) +py_cobject_sources(#11018, 1) +py_cobject_sources(#11562, 1) +py_cobject_sources(#11564, 1) +py_cobject_sources(#11565, 1) +py_cobject_sources(#11566, 1) +py_cobject_sources(#11567, 1) +py_cobject_sources(#11019, 1) +py_cobject_sources(#11020, 1) +py_cobject_sources(#11021, 1) +py_cobject_sources(#11569, 1) +py_cobject_sources(#11022, 1) +py_cobject_sources(#11023, 1) +py_cobject_sources(#11571, 1) +py_cobject_sources(#11572, 1) +py_cobject_sources(#11024, 1) +py_cobject_sources(#11573, 1) +py_cobject_sources(#11574, 1) +py_cobject_sources(#11575, 1) +py_cobject_sources(#11576, 1) +py_cobject_sources(#11577, 1) +py_cobject_sources(#11578, 1) +py_cobject_sources(#11025, 1) +py_cobject_sources(#11579, 1) +py_cobject_sources(#11026, 1) +py_cobject_sources(#11027, 1) +py_cobject_sources(#11028, 1) +py_cobject_sources(#11029, 1) +py_cobject_sources(#11030, 1) +py_cobject_sources(#11031, 1) +py_cobject_sources(#11032, 1) +py_cobject_sources(#11033, 1) +py_cobject_sources(#11034, 1) +py_cobject_sources(#11035, 1) +py_cobject_sources(#11581, 1) +py_cobject_sources(#11036, 1) +py_cobject_sources(#11037, 1) +py_cobject_sources(#11038, 1) +py_cobject_sources(#11039, 1) +py_cobject_sources(#11040, 1) +py_cobject_sources(#11041, 1) +py_cobject_sources(#11042, 1) +py_cobject_sources(#11043, 1) +py_cobject_sources(#11044, 1) +py_cobject_sources(#11045, 1) +py_cobject_sources(#11046, 1) +py_cobject_sources(#11047, 1) +py_cobject_sources(#11048, 1) +py_cobject_sources(#11049, 1) +py_cobject_sources(#11050, 1) +py_cobject_sources(#11051, 1) +py_cobject_sources(#11052, 1) +py_cobject_sources(#11053, 1) +py_cobject_sources(#11054, 1) +py_cobject_sources(#11055, 1) +py_cobject_sources(#11056, 1) +py_cobject_sources(#11057, 1) +py_cobject_sources(#11058, 1) +py_cobject_sources(#11059, 1) +py_cobject_sources(#11060, 1) +py_cobject_sources(#11061, 1) +py_cobject_sources(#11062, 1) +py_cobject_sources(#11582, 1) +py_cobject_sources(#11587, 1) +py_cobject_sources(#11588, 1) +py_cobject_sources(#11589, 1) +py_cobject_sources(#11590, 1) +py_cobject_sources(#11591, 1) +py_cobject_sources(#11592, 1) +py_cobject_sources(#11593, 1) +py_cobject_sources(#11594, 1) +py_cobject_sources(#11595, 1) +py_cobject_sources(#11596, 1) +py_cobject_sources(#11597, 1) +py_cobject_sources(#11598, 1) +py_cobject_sources(#11599, 1) +py_cobject_sources(#11600, 1) +py_cobject_sources(#11601, 1) +py_cobject_sources(#11602, 1) +py_cobject_sources(#11603, 1) +py_cobject_sources(#11604, 1) +py_cobject_sources(#11605, 1) +py_cobject_sources(#11606, 1) +py_cobject_sources(#11608, 1) +py_cobject_sources(#11063, 1) +py_cobject_sources(#11064, 1) +py_cobject_sources(#11610, 1) +py_cobject_sources(#11612, 1) +py_cobject_sources(#11613, 1) +py_cobject_sources(#11614, 1) +py_cobject_sources(#11065, 1) +py_cobject_sources(#11066, 1) +py_cobject_sources(#11067, 1) +py_cobject_sources(#11616, 1) +py_cobject_sources(#11617, 1) +py_cobject_sources(#11618, 1) +py_cobject_sources(#11619, 1) +py_cobject_sources(#11620, 1) +py_cobject_sources(#11068, 1) +py_cobject_sources(#11069, 1) +py_cobject_sources(#11070, 1) +py_cobject_sources(#11071, 1) +py_cobject_sources(#11622, 1) +py_cobject_sources(#11072, 1) +py_cobject_sources(#11073, 1) +py_cobject_sources(#11074, 1) +py_cobject_sources(#11075, 1) +py_cobject_sources(#11076, 1) +py_cobject_sources(#11077, 1) +py_cobject_sources(#11078, 1) +py_cobject_sources(#11079, 1) +py_cobject_sources(#11623, 1) +py_cobject_sources(#11624, 1) +py_cobject_sources(#11625, 1) +py_cobject_sources(#11626, 1) +py_cobject_sources(#11080, 1) +py_cobject_sources(#11081, 1) +py_cobject_sources(#11082, 1) +py_cobject_sources(#11083, 1) +py_cobject_sources(#11084, 1) +py_cobject_sources(#11085, 1) +py_cobject_sources(#11086, 1) +py_cobject_sources(#11087, 1) +py_cobject_sources(#11088, 1) +py_cobject_sources(#11627, 1) +py_cobject_sources(#11089, 1) +py_cobject_sources(#11090, 1) +py_cobject_sources(#11091, 1) +py_cobject_sources(#11092, 1) +py_cobject_sources(#11093, 1) +py_cobject_sources(#11094, 1) +py_cobject_sources(#11628, 1) +py_cobject_sources(#11095, 1) +py_cobject_sources(#11630, 1) +py_cobject_sources(#11632, 1) +py_cobject_sources(#11096, 1) +py_cobject_sources(#11097, 1) +py_cobject_sources(#11098, 1) +py_cobject_sources(#11099, 1) +py_cobject_sources(#11633, 1) +py_cobject_sources(#11100, 1) +py_cobject_sources(#11634, 1) +py_cobject_sources(#11636, 1) +py_cobject_sources(#11637, 1) +py_cobject_sources(#11638, 1) +py_cobject_sources(#11101, 1) +py_cobject_sources(#11639, 1) +py_cobject_sources(#11641, 1) +py_cobject_sources(#11642, 1) +py_cobject_sources(#11643, 1) +py_cobject_sources(#11644, 1) +py_cobject_sources(#11645, 1) +py_cobject_sources(#11646, 1) +py_cobject_sources(#11647, 1) +py_cobject_sources(#11648, 1) +py_cobject_sources(#11102, 1) +py_cobject_sources(#11649, 1) +py_cobject_sources(#11650, 1) +py_cobject_sources(#11651, 1) +py_cobject_sources(#11103, 1) +py_cobject_sources(#11104, 1) +py_cobject_sources(#11105, 1) +py_cobject_sources(#11652, 1) +py_cobject_sources(#11653, 1) +py_cobject_sources(#11106, 1) +py_cobject_sources(#11654, 1) +py_cobject_sources(#11656, 1) +py_cobject_sources(#11657, 1) +py_cobject_sources(#11107, 1) +py_cobject_sources(#11658, 1) +py_cobject_sources(#11108, 1) +py_cobject_sources(#11659, 1) +py_cobject_sources(#11109, 1) +py_cobject_sources(#11110, 1) +py_cobject_sources(#11111, 1) +py_cobject_sources(#11112, 1) +py_cobject_sources(#11113, 1) +py_cobject_sources(#11660, 1) +py_cobject_sources(#11114, 1) +py_cobject_sources(#11115, 1) +py_cobject_sources(#11116, 1) +py_cobject_sources(#11117, 1) +py_cobject_sources(#11118, 1) +py_cobject_sources(#11120, 1) +py_cobject_sources(#11121, 1) +py_cobject_sources(#11122, 1) +py_cobject_sources(#11123, 1) +py_cobject_sources(#11124, 1) +py_cobject_sources(#11125, 1) +py_cobject_sources(#11126, 1) +py_cobject_sources(#11127, 1) +py_cobject_sources(#11128, 1) +py_cobject_sources(#11129, 1) +py_cobject_sources(#11130, 1) +py_cobject_sources(#11131, 1) +py_cobject_sources(#11132, 1) +py_cobject_sources(#11133, 1) +py_cobject_sources(#11134, 1) +py_cobject_sources(#11135, 1) +py_cobject_sources(#11136, 1) +py_cobject_sources(#11137, 1) +py_cobject_sources(#11138, 1) +py_cobject_sources(#11139, 1) +py_cobject_sources(#11140, 1) +py_cobject_sources(#11141, 1) +py_cobject_sources(#11142, 1) +py_cobject_sources(#11143, 1) +py_cobject_sources(#11144, 1) +py_cobject_sources(#11145, 1) +py_cobject_sources(#11146, 1) +py_cobject_sources(#11147, 1) +py_cobject_sources(#11148, 1) +py_cobject_sources(#11149, 1) +py_cobject_sources(#11150, 1) +py_cobject_sources(#11151, 1) +py_cobject_sources(#11152, 1) +py_cobject_sources(#11153, 1) +py_cobject_sources(#11154, 1) +py_cobject_sources(#11665, 1) +py_cobject_sources(#11155, 1) +py_cobject_sources(#11156, 1) +py_cobject_sources(#11157, 1) +py_cobject_sources(#11666, 1) +py_cobject_sources(#11667, 1) +py_cobject_sources(#11159, 1) +py_cobject_sources(#11160, 1) +py_cobject_sources(#11161, 1) +py_cobject_sources(#11162, 1) +py_cobject_sources(#11163, 1) +py_cobject_sources(#11164, 1) +py_cobject_sources(#11165, 1) +py_cobject_sources(#11166, 1) +py_cobject_sources(#11167, 1) +py_cobject_sources(#11168, 1) +py_cobject_sources(#11670, 1) +py_cobject_sources(#11169, 1) +py_cobject_sources(#11170, 1) +py_cobject_sources(#11171, 1) +py_cobject_sources(#11172, 1) +py_cobject_sources(#11173, 1) +py_cobject_sources(#11174, 1) +py_cobject_sources(#11175, 1) +py_cobject_sources(#11176, 1) +py_cobject_sources(#11177, 1) +py_cobject_sources(#11178, 1) +py_cobject_sources(#11179, 1) +py_cobject_sources(#11180, 1) +py_cobject_sources(#11181, 1) +py_cobject_sources(#11182, 1) +py_cobject_sources(#11183, 1) +py_cobject_sources(#11184, 1) +py_cobject_sources(#11185, 1) +py_cobject_sources(#11186, 1) +py_cobject_sources(#11187, 1) +py_cobject_sources(#11188, 1) +py_cobject_sources(#11189, 1) +py_cobject_sources(#11190, 1) +py_cobject_sources(#11191, 1) +py_cobject_sources(#11193, 1) +py_cobject_sources(#11194, 1) +py_cobject_sources(#11195, 1) +py_cobject_sources(#11196, 1) +py_cobject_sources(#11672, 1) +py_cobject_sources(#11197, 1) +py_cobject_sources(#11198, 1) +py_cobject_sources(#11199, 1) +py_cobject_sources(#11200, 1) +py_cobject_sources(#11201, 1) +py_cobject_sources(#11202, 1) +py_cobject_sources(#11203, 1) +py_cobject_sources(#11204, 1) +py_cobject_sources(#11205, 1) +py_cobject_sources(#11206, 1) +py_cobject_sources(#11207, 1) +py_cobject_sources(#11677, 1) +py_cobject_sources(#11208, 1) +py_cobject_sources(#11209, 1) +py_cobject_sources(#11678, 1) +py_cobject_sources(#11679, 1) +py_cobject_sources(#11680, 1) +py_cobject_sources(#11210, 1) +py_cobject_sources(#11211, 1) +py_cobject_sources(#11212, 1) +py_cobject_sources(#11213, 1) +py_cobject_sources(#11681, 1) +py_cobject_sources(#11682, 1) +py_cobject_sources(#11683, 1) +py_cobject_sources(#11214, 1) +py_cobject_sources(#11684, 1) +py_cobject_sources(#11215, 1) +py_cobject_sources(#11216, 1) +py_cobject_sources(#11685, 1) +py_cobject_sources(#11686, 1) +py_cobject_sources(#11687, 1) +py_cobject_sources(#11217, 1) +py_cobject_sources(#11218, 1) +py_cobject_sources(#11219, 1) +py_cobject_sources(#11220, 1) +py_cobject_sources(#11221, 1) +py_cobject_sources(#11222, 1) +py_cobject_sources(#11689, 1) +py_cobject_sources(#11691, 1) +py_cobject_sources(#11223, 1) +py_cobject_sources(#11692, 1) +py_cobject_sources(#11224, 1) +py_cobject_sources(#11225, 1) +py_cobject_sources(#11226, 1) +py_cobject_sources(#11227, 1) +py_cobject_sources(#11228, 1) +py_cobject_sources(#11229, 1) +py_cobject_sources(#11230, 1) +py_cobject_sources(#11231, 1) +py_cobject_sources(#11232, 1) +py_cobject_sources(#11694, 1) +py_cobject_sources(#11233, 1) +py_cobject_sources(#11234, 1) +py_cobject_sources(#11235, 1) +py_cobject_sources(#11236, 1) +py_cobject_sources(#11237, 1) +py_cobject_sources(#11240, 1) +py_cobject_sources(#11241, 1) +py_cobject_sources(#11242, 1) +py_cobject_sources(#11243, 1) +py_cobject_sources(#11244, 1) +py_cobject_sources(#11245, 1) +py_cobject_sources(#11246, 1) +py_cobject_sources(#11247, 1) +py_cobject_sources(#11248, 1) +py_cobject_sources(#11249, 1) +py_cobject_sources(#11250, 1) +py_cobject_sources(#11251, 1) +py_cobject_sources(#11252, 1) +py_cobject_sources(#11253, 1) +py_cobject_sources(#11254, 1) +py_cobject_sources(#11255, 1) +py_cobject_sources(#11256, 1) +py_cobject_sources(#11257, 1) +py_cobject_sources(#11258, 1) +py_cobject_sources(#11259, 1) +py_cobject_sources(#11260, 1) +py_cobject_sources(#11696, 1) +py_cobject_sources(#11261, 1) +py_cobject_sources(#11262, 1) +py_cobject_sources(#11263, 1) +py_cobject_sources(#11264, 1) +py_cobject_sources(#11265, 1) +py_cobject_sources(#11266, 1) +py_cobject_sources(#11267, 1) +py_cobject_sources(#11268, 1) +py_cobject_sources(#11269, 1) +py_cobject_sources(#11270, 1) +py_cobject_sources(#11271, 1) +py_cobject_sources(#11697, 1) +py_cobject_sources(#11272, 1) +py_cobject_sources(#11273, 1) +py_cobject_sources(#11274, 1) +py_cobject_sources(#11275, 1) +py_cobject_sources(#11276, 1) +py_cobject_sources(#11277, 1) +py_cobject_sources(#11278, 1) +py_cobject_sources(#11699, 1) +py_cobject_sources(#11700, 1) +py_cobject_sources(#11701, 1) +py_cobject_sources(#11702, 1) +py_cobject_sources(#11703, 1) +py_cobject_sources(#11704, 1) +py_cobject_sources(#11705, 1) +py_cobject_sources(#11706, 1) +py_cobject_sources(#11707, 1) +py_cobject_sources(#11709, 1) +py_cobject_sources(#11710, 1) +py_cobject_sources(#11279, 1) +py_cobject_sources(#11280, 1) +py_cobject_sources(#11281, 1) +py_cobject_sources(#11282, 1) +py_cobject_sources(#11283, 1) +py_cobject_sources(#11284, 1) +py_cobject_sources(#11286, 1) +py_cobject_sources(#11287, 1) +py_cobject_sources(#11712, 1) +py_cobject_sources(#11288, 1) +py_cobject_sources(#11289, 1) +py_cobject_sources(#11290, 1) +py_cobject_sources(#11291, 1) +py_cobject_sources(#11292, 1) +py_cobject_sources(#11293, 1) +py_cobject_sources(#11294, 1) +py_cobject_sources(#11295, 1) +py_cobject_sources(#11296, 1) +py_cobject_sources(#11297, 1) +py_cobject_sources(#11298, 1) +py_cobject_sources(#11299, 1) +py_cobject_sources(#11300, 1) +py_cobject_sources(#11301, 1) +py_cobject_sources(#11302, 1) +py_cobject_sources(#11303, 1) +py_cobject_sources(#11304, 1) +py_cobject_sources(#11305, 1) +py_cobject_sources(#11306, 1) +py_cobject_sources(#11307, 1) +py_cobject_sources(#11308, 1) +py_cobject_sources(#11309, 1) +py_cobject_sources(#11310, 1) +py_cobject_sources(#11311, 1) +py_cobject_sources(#11312, 1) +py_cobject_sources(#11313, 1) +py_cobject_sources(#11314, 1) +py_cobject_sources(#11315, 1) +py_cobject_sources(#11316, 1) +py_cobject_sources(#11317, 1) +py_cobject_sources(#11318, 1) +py_cobject_sources(#11319, 1) +py_cobject_sources(#11320, 1) +py_cobject_sources(#11321, 1) +py_cobject_sources(#11322, 1) +py_cobject_sources(#11323, 1) +py_cobject_sources(#11324, 1) +py_cobject_sources(#11325, 1) +py_cobject_sources(#11713, 1) +py_cobject_sources(#11326, 1) +py_cobject_sources(#11327, 1) +py_cobject_sources(#11328, 1) +py_cobject_sources(#11329, 1) +py_cobject_sources(#11330, 1) +py_cobject_sources(#11331, 1) +py_cobject_sources(#11332, 1) +py_cobject_sources(#11333, 1) +py_cobject_sources(#11334, 1) +py_cobject_sources(#11335, 1) +py_cobject_sources(#11336, 1) +py_cobject_sources(#11337, 1) +py_cobject_sources(#11338, 1) +py_cobject_sources(#11339, 1) +py_cobject_sources(#11340, 1) +py_cobject_sources(#11714, 1) +py_cobject_sources(#11341, 1) +py_cobject_sources(#11342, 1) +py_cobject_sources(#11343, 1) +py_cobject_sources(#11344, 1) +py_cobject_sources(#11345, 1) +py_cobject_sources(#11346, 1) +py_cobject_sources(#11347, 1) +py_cobject_sources(#11348, 1) +py_cobject_sources(#11715, 1) +py_cobject_sources(#11349, 1) +py_cobject_sources(#11350, 1) +py_cobject_sources(#11351, 1) +py_cobject_sources(#11352, 1) +py_cobject_sources(#11353, 1) +py_cobject_sources(#11354, 1) +py_cobject_sources(#11355, 1) +py_cobject_sources(#11356, 1) +py_cobject_sources(#11357, 1) +py_cobject_sources(#11358, 1) +py_cobject_sources(#11359, 1) +py_cobject_sources(#11360, 1) +py_cobject_sources(#11361, 1) +py_cobject_sources(#11716, 1) +py_cobject_sources(#11362, 1) +py_cobject_sources(#11363, 1) +py_cobject_sources(#11364, 1) +py_cobject_sources(#11365, 1) +py_cobject_sources(#11366, 1) +py_cobject_sources(#11367, 1) +py_cobject_sources(#11368, 1) +py_cobject_sources(#11369, 1) +py_cobject_sources(#11370, 1) +py_cobject_sources(#11371, 1) +py_cobject_sources(#11372, 1) +py_cobject_sources(#11373, 1) +py_cobject_sources(#11374, 1) + diff --git a/python/extractor/semmle/data/$stdlib_33.trap b/python/extractor/semmle/data/$stdlib_33.trap new file mode 100644 index 00000000000..1e49ba73101 --- /dev/null +++ b/python/extractor/semmle/data/$stdlib_33.trap @@ -0,0 +1,11130 @@ +#10000 = @"C_builtin_function_or_method$time.time" +#10001 = @"C_type$float" +ext_rettype(#10000, #10001) +#10002 = @"C_builtin_function_or_method$time.clock" +ext_rettype(#10002, #10001) +#10003 = @"C_builtin_function_or_method$time.clock_gettime" +ext_rettype(#10003, #10001) +#10004 = @"C_builtin_function_or_method$time.clock_settime" +#10005 = @"C_type$NoneType" +ext_rettype(#10004, #10005) +#10006 = @"C_builtin_function_or_method$time.clock_getres" +ext_rettype(#10006, #10001) +#10007 = @"C_builtin_function_or_method$time.sleep" +ext_rettype(#10007, #10005) +#10008 = @"C_builtin_function_or_method$time.mktime" +ext_rettype(#10008, #10001) +#10009 = @"C_builtin_function_or_method$time.strftime" +#10010 = @"C_type$unicode" +ext_rettype(#10009, #10010) +#10011 = @"C_builtin_function_or_method$time.tzset" +ext_rettype(#10011, #10005) +#10012 = @"C_builtin_function_or_method$time.monotonic" +ext_rettype(#10012, #10001) +#10013 = @"C_builtin_function_or_method$time.process_time" +ext_rettype(#10013, #10001) +#10014 = @"C_builtin_function_or_method$time.perf_counter" +ext_rettype(#10014, #10001) +#10015 = @"C_builtin_function_or_method$_csv.reader" +#10016 = @"C_type$_csv.reader" +ext_rettype(#10015, #10016) +#10017 = @"C_builtin_function_or_method$_csv.writer" +#10018 = @"C_type$_csv.writer" +ext_rettype(#10017, #10018) +#10019 = @"C_builtin_function_or_method$_csv.list_dialects" +#10020 = @"C_type$list" +ext_rettype(#10019, #10020) +#10021 = @"C_builtin_function_or_method$_csv.register_dialect" +ext_rettype(#10021, #10005) +#10022 = @"C_builtin_function_or_method$_csv.unregister_dialect" +ext_rettype(#10022, #10005) +#10023 = @"C_builtin_function_or_method$_csv.field_size_limit" +#10024 = @"C_type$int" +ext_rettype(#10023, #10024) +#10025 = @"C_builtin_function_or_method$xxsubtype.bench" +ext_rettype(#10025, #10001) +#10026 = @"C_builtin_function_or_method$_collections._count_elements" +ext_rettype(#10026, #10005) +#10027 = @"C_builtin_function_or_method$parser.compilest" +#10028 = @"C_type$code" +ext_rettype(#10027, #10028) +#10029 = @"C_builtin_function_or_method$parser.expr" +#10030 = @"C_type$parser.st" +ext_rettype(#10029, #10030) +#10031 = @"C_builtin_function_or_method$parser.suite" +ext_rettype(#10031, #10030) +#10032 = @"C_builtin_function_or_method$parser.sequence2st" +ext_rettype(#10032, #10030) +#10033 = @"C_builtin_function_or_method$parser.st2tuple" +ext_rettype(#10033, #10005) +#10034 = @"C_builtin_function_or_method$parser.st2list" +ext_rettype(#10034, #10005) +#10035 = @"C_builtin_function_or_method$parser.tuple2st" +ext_rettype(#10035, #10030) +#10036 = @"C_builtin_function_or_method$parser._pickler" +#10037 = @"C_type$tuple" +ext_rettype(#10036, #10037) +#10038 = @"C_builtin_function_or_method$decimal.getcontext" +#10039 = @"C_type$decimal.Context" +ext_rettype(#10038, #10039) +#10040 = @"C_builtin_function_or_method$decimal.setcontext" +ext_rettype(#10040, #10005) +#10041 = @"C_builtin_function_or_method$decimal.localcontext" +#10042 = @"C_type$decimal.ContextManager" +ext_rettype(#10041, #10042) +#10043 = @"C_builtin_function_or_method$_weakref.getweakrefcount" +ext_rettype(#10043, #10024) +#10044 = @"C_builtin_function_or_method$_weakref.getweakrefs" +ext_rettype(#10044, #10020) +#10045 = @"C_builtin_function_or_method$_weakref.proxy" +#10046 = @"C_type$weakref" +ext_rettype(#10045, #10046) +#10047 = @"C_builtin_function_or_method$gc.enable" +ext_rettype(#10047, #10005) +#10048 = @"C_builtin_function_or_method$gc.disable" +ext_rettype(#10048, #10005) +#10049 = @"C_builtin_function_or_method$gc.isenabled" +#10050 = @"C_type$bool" +ext_rettype(#10049, #10050) +#10051 = @"C_builtin_function_or_method$gc.set_debug" +ext_rettype(#10051, #10005) +#10052 = @"C_builtin_function_or_method$gc.get_debug" +ext_rettype(#10052, #10024) +#10053 = @"C_builtin_function_or_method$gc.get_count" +ext_rettype(#10053, #10037) +#10054 = @"C_builtin_function_or_method$gc.set_threshold" +ext_rettype(#10054, #10005) +#10055 = @"C_builtin_function_or_method$gc.get_threshold" +ext_rettype(#10055, #10037) +#10056 = @"C_builtin_function_or_method$gc.collect" +ext_rettype(#10056, #10024) +#10057 = @"C_builtin_function_or_method$gc.get_objects" +ext_rettype(#10057, #10020) +#10058 = @"C_builtin_function_or_method$gc.is_tracked" +ext_rettype(#10058, #10050) +#10059 = @"C_builtin_function_or_method$gc.get_referrers" +ext_rettype(#10059, #10020) +#10060 = @"C_builtin_function_or_method$gc.get_referents" +ext_rettype(#10060, #10020) +#10061 = @"C_builtin_function_or_method$_multibytecodec.__create_codec" +#10062 = @"C_type$MultibyteCodec" +ext_rettype(#10061, #10062) +#10063 = @"C_builtin_function_or_method$signal.alarm" +ext_rettype(#10063, #10024) +#10064 = @"C_builtin_function_or_method$signal.setitimer" +ext_rettype(#10064, #10037) +#10065 = @"C_builtin_function_or_method$signal.getitimer" +ext_rettype(#10065, #10037) +#10066 = @"C_builtin_function_or_method$signal.signal" +ext_rettype(#10066, #10005) +#10067 = @"C_builtin_function_or_method$signal.getsignal" +ext_rettype(#10067, #10005) +#10068 = @"C_builtin_function_or_method$signal.set_wakeup_fd" +ext_rettype(#10068, #10024) +#10069 = @"C_builtin_function_or_method$signal.siginterrupt" +ext_rettype(#10069, #10005) +#10070 = @"C_builtin_function_or_method$signal.pause" +ext_rettype(#10070, #10005) +#10071 = @"C_builtin_function_or_method$signal.pthread_kill" +ext_rettype(#10071, #10005) +#10072 = @"C_builtin_function_or_method$signal.pthread_sigmask" +#10073 = @"C_type$set" +ext_rettype(#10072, #10073) +#10074 = @"C_type$frozenset" +ext_rettype(#10072, #10074) +#10075 = @"C_builtin_function_or_method$signal.sigpending" +ext_rettype(#10075, #10073) +ext_rettype(#10075, #10074) +#10076 = @"C_builtin_function_or_method$signal.sigwait" +ext_rettype(#10076, #10024) +#10077 = @"C_builtin_function_or_method$signal.sigtimedwait" +ext_rettype(#10077, #10005) +#10078 = @"C_builtin_function_or_method$_struct._clearcache" +ext_rettype(#10078, #10005) +#10079 = @"C_builtin_function_or_method$_struct.calcsize" +ext_rettype(#10079, #10024) +#10080 = @"C_builtin_function_or_method$_struct.pack" +#10081 = @"C_type$bytes" +ext_rettype(#10080, #10081) +#10082 = @"C_builtin_function_or_method$_struct.pack_into" +ext_rettype(#10082, #10005) +#10083 = @"C_builtin_function_or_method$_struct.unpack" +ext_rettype(#10083, #10037) +#10084 = @"C_builtin_function_or_method$_struct.unpack_from" +ext_rettype(#10084, #10037) +#10085 = @"C_builtin_function_or_method$audioop.max" +ext_rettype(#10085, #10024) +#10086 = @"C_builtin_function_or_method$audioop.minmax" +ext_rettype(#10086, #10037) +#10087 = @"C_builtin_function_or_method$audioop.avg" +ext_rettype(#10087, #10024) +#10088 = @"C_builtin_function_or_method$audioop.maxpp" +ext_rettype(#10088, #10024) +#10089 = @"C_builtin_function_or_method$audioop.avgpp" +ext_rettype(#10089, #10024) +#10090 = @"C_builtin_function_or_method$audioop.rms" +ext_rettype(#10090, #10024) +#10091 = @"C_builtin_function_or_method$audioop.findfit" +ext_rettype(#10091, #10037) +#10092 = @"C_builtin_function_or_method$audioop.findmax" +ext_rettype(#10092, #10024) +#10093 = @"C_builtin_function_or_method$audioop.findfactor" +ext_rettype(#10093, #10001) +#10094 = @"C_builtin_function_or_method$audioop.cross" +ext_rettype(#10094, #10024) +#10095 = @"C_builtin_function_or_method$audioop.mul" +ext_rettype(#10095, #10081) +#10096 = @"C_builtin_function_or_method$audioop.add" +ext_rettype(#10096, #10081) +#10097 = @"C_builtin_function_or_method$audioop.bias" +ext_rettype(#10097, #10081) +#10098 = @"C_builtin_function_or_method$audioop.ulaw2lin" +ext_rettype(#10098, #10081) +#10099 = @"C_builtin_function_or_method$audioop.lin2ulaw" +ext_rettype(#10099, #10081) +#10100 = @"C_builtin_function_or_method$audioop.alaw2lin" +ext_rettype(#10100, #10081) +#10101 = @"C_builtin_function_or_method$audioop.lin2alaw" +ext_rettype(#10101, #10081) +#10102 = @"C_builtin_function_or_method$audioop.lin2lin" +ext_rettype(#10102, #10081) +#10103 = @"C_builtin_function_or_method$audioop.adpcm2lin" +ext_rettype(#10103, #10037) +#10104 = @"C_builtin_function_or_method$audioop.lin2adpcm" +ext_rettype(#10104, #10037) +#10105 = @"C_builtin_function_or_method$audioop.tomono" +ext_rettype(#10105, #10081) +#10106 = @"C_builtin_function_or_method$audioop.tostereo" +ext_rettype(#10106, #10081) +#10107 = @"C_builtin_function_or_method$audioop.getsample" +ext_rettype(#10107, #10024) +#10108 = @"C_builtin_function_or_method$audioop.reverse" +ext_rettype(#10108, #10081) +#10109 = @"C_builtin_function_or_method$audioop.ratecv" +ext_rettype(#10109, #10037) +ext_rettype(#10109, #10081) +#10110 = @"C_builtin_function_or_method$_ssl._test_decode_cert" +#10111 = @"C_type$dict" +ext_rettype(#10110, #10111) +#10112 = @"C_builtin_function_or_method$_ssl.RAND_add" +ext_rettype(#10112, #10005) +#10113 = @"C_builtin_function_or_method$_ssl.RAND_bytes" +ext_rettype(#10113, #10037) +ext_rettype(#10113, #10081) +#10114 = @"C_builtin_function_or_method$_ssl.RAND_pseudo_bytes" +ext_rettype(#10114, #10037) +ext_rettype(#10114, #10081) +#10115 = @"C_builtin_function_or_method$_ssl.RAND_egd" +ext_rettype(#10115, #10024) +#10116 = @"C_builtin_function_or_method$_ssl.RAND_status" +ext_rettype(#10116, #10024) +#10117 = @"C_builtin_function_or_method$fcntl.fcntl" +ext_rettype(#10117, #10024) +ext_rettype(#10117, #10081) +#10118 = @"C_builtin_function_or_method$fcntl.ioctl" +ext_rettype(#10118, #10024) +ext_rettype(#10118, #10081) +#10119 = @"C_builtin_function_or_method$fcntl.flock" +ext_rettype(#10119, #10005) +#10120 = @"C_builtin_function_or_method$fcntl.lockf" +ext_rettype(#10120, #10005) +#10121 = @"C_builtin_function_or_method$_thread.start_new_thread" +ext_rettype(#10121, #10024) +#10122 = @"C_builtin_function_or_method$_thread.start_new" +ext_rettype(#10122, #10024) +#10123 = @"C_builtin_function_or_method$_thread.allocate_lock" +#10124 = @"C_type$_thread.lock" +ext_rettype(#10123, #10124) +#10125 = @"C_builtin_function_or_method$_thread.allocate" +ext_rettype(#10125, #10124) +#10126 = @"C_builtin_function_or_method$_thread.interrupt_main" +ext_rettype(#10126, #10005) +#10127 = @"C_builtin_function_or_method$_thread.get_ident" +ext_rettype(#10127, #10024) +#10128 = @"C_builtin_function_or_method$_thread._count" +ext_rettype(#10128, #10024) +#10129 = @"C_builtin_function_or_method$_thread.stack_size" +ext_rettype(#10129, #10024) +#10130 = @"C_builtin_function_or_method$_codecs.register" +ext_rettype(#10130, #10005) +#10131 = @"C_builtin_function_or_method$_codecs.escape_encode" +ext_rettype(#10131, #10037) +#10132 = @"C_builtin_function_or_method$_codecs.escape_decode" +ext_rettype(#10132, #10037) +#10133 = @"C_builtin_function_or_method$_codecs.utf_8_encode" +ext_rettype(#10133, #10037) +#10134 = @"C_builtin_function_or_method$_codecs.utf_8_decode" +ext_rettype(#10134, #10037) +#10135 = @"C_builtin_function_or_method$_codecs.utf_7_encode" +ext_rettype(#10135, #10037) +#10136 = @"C_builtin_function_or_method$_codecs.utf_7_decode" +ext_rettype(#10136, #10037) +#10137 = @"C_builtin_function_or_method$_codecs.utf_16_encode" +ext_rettype(#10137, #10037) +#10138 = @"C_builtin_function_or_method$_codecs.utf_16_le_encode" +ext_rettype(#10138, #10037) +#10139 = @"C_builtin_function_or_method$_codecs.utf_16_be_encode" +ext_rettype(#10139, #10037) +#10140 = @"C_builtin_function_or_method$_codecs.utf_16_decode" +ext_rettype(#10140, #10037) +#10141 = @"C_builtin_function_or_method$_codecs.utf_16_le_decode" +ext_rettype(#10141, #10037) +#10142 = @"C_builtin_function_or_method$_codecs.utf_16_be_decode" +ext_rettype(#10142, #10037) +#10143 = @"C_builtin_function_or_method$_codecs.utf_16_ex_decode" +ext_rettype(#10143, #10037) +#10144 = @"C_builtin_function_or_method$_codecs.utf_32_encode" +ext_rettype(#10144, #10037) +#10145 = @"C_builtin_function_or_method$_codecs.utf_32_le_encode" +ext_rettype(#10145, #10037) +#10146 = @"C_builtin_function_or_method$_codecs.utf_32_be_encode" +ext_rettype(#10146, #10037) +#10147 = @"C_builtin_function_or_method$_codecs.utf_32_decode" +ext_rettype(#10147, #10037) +#10148 = @"C_builtin_function_or_method$_codecs.utf_32_le_decode" +ext_rettype(#10148, #10037) +#10149 = @"C_builtin_function_or_method$_codecs.utf_32_be_decode" +ext_rettype(#10149, #10037) +#10150 = @"C_builtin_function_or_method$_codecs.utf_32_ex_decode" +ext_rettype(#10150, #10037) +#10151 = @"C_builtin_function_or_method$_codecs.unicode_escape_encode" +ext_rettype(#10151, #10037) +#10152 = @"C_builtin_function_or_method$_codecs.unicode_escape_decode" +ext_rettype(#10152, #10037) +#10153 = @"C_builtin_function_or_method$_codecs.unicode_internal_encode" +ext_rettype(#10153, #10037) +#10154 = @"C_builtin_function_or_method$_codecs.unicode_internal_decode" +ext_rettype(#10154, #10037) +#10155 = @"C_builtin_function_or_method$_codecs.raw_unicode_escape_encode" +ext_rettype(#10155, #10037) +#10156 = @"C_builtin_function_or_method$_codecs.raw_unicode_escape_decode" +ext_rettype(#10156, #10037) +#10157 = @"C_builtin_function_or_method$_codecs.latin_1_encode" +ext_rettype(#10157, #10037) +#10158 = @"C_builtin_function_or_method$_codecs.latin_1_decode" +ext_rettype(#10158, #10037) +#10159 = @"C_builtin_function_or_method$_codecs.ascii_encode" +ext_rettype(#10159, #10037) +#10160 = @"C_builtin_function_or_method$_codecs.ascii_decode" +ext_rettype(#10160, #10037) +#10161 = @"C_builtin_function_or_method$_codecs.charmap_encode" +ext_rettype(#10161, #10037) +#10162 = @"C_builtin_function_or_method$_codecs.charmap_decode" +ext_rettype(#10162, #10037) +#10163 = @"C_builtin_function_or_method$_codecs.charmap_build" +ext_rettype(#10163, #10111) +#10164 = @"C_builtin_function_or_method$_codecs.readbuffer_encode" +ext_rettype(#10164, #10037) +#10165 = @"C_builtin_function_or_method$_codecs.register_error" +ext_rettype(#10165, #10005) +#10166 = @"C_builtin_function_or_method$xxlimited.roj" +ext_rettype(#10166, #10005) +#10167 = @"C_builtin_function_or_method$xxlimited.foo" +ext_rettype(#10167, #10024) +#10168 = @"C_builtin_function_or_method$_hashlib.new" +#10169 = @"C_type$_hashlib.HASH" +ext_rettype(#10168, #10169) +#10170 = @"C_builtin_function_or_method$_hashlib.openssl_md5" +ext_rettype(#10170, #10169) +#10171 = @"C_builtin_function_or_method$_hashlib.openssl_sha1" +ext_rettype(#10171, #10169) +#10172 = @"C_builtin_function_or_method$_hashlib.openssl_sha224" +ext_rettype(#10172, #10169) +#10173 = @"C_builtin_function_or_method$_hashlib.openssl_sha256" +ext_rettype(#10173, #10169) +#10174 = @"C_builtin_function_or_method$_hashlib.openssl_sha384" +ext_rettype(#10174, #10169) +#10175 = @"C_builtin_function_or_method$_hashlib.openssl_sha512" +ext_rettype(#10175, #10169) +#10176 = @"C_builtin_function_or_method$termios.tcgetattr" +ext_rettype(#10176, #10020) +#10177 = @"C_builtin_function_or_method$termios.tcsetattr" +ext_rettype(#10177, #10005) +#10178 = @"C_builtin_function_or_method$termios.tcsendbreak" +ext_rettype(#10178, #10005) +#10179 = @"C_builtin_function_or_method$termios.tcdrain" +ext_rettype(#10179, #10005) +#10180 = @"C_builtin_function_or_method$termios.tcflush" +ext_rettype(#10180, #10005) +#10181 = @"C_builtin_function_or_method$termios.tcflow" +ext_rettype(#10181, #10005) +#10182 = @"C_builtin_function_or_method$_bisect.bisect_right" +ext_rettype(#10182, #10024) +#10183 = @"C_builtin_function_or_method$_bisect.bisect" +ext_rettype(#10183, #10024) +#10184 = @"C_builtin_function_or_method$_bisect.insort_right" +ext_rettype(#10184, #10005) +#10185 = @"C_builtin_function_or_method$_bisect.insort" +ext_rettype(#10185, #10005) +#10186 = @"C_builtin_function_or_method$_bisect.bisect_left" +ext_rettype(#10186, #10024) +#10187 = @"C_builtin_function_or_method$_bisect.insort_left" +ext_rettype(#10187, #10005) +#10188 = @"C_builtin_function_or_method$_sha256.sha256" +#10189 = @"C_type$_sha256.sha256" +ext_rettype(#10188, #10189) +#10190 = @"C_builtin_function_or_method$_sha256.sha224" +#10191 = @"C_type$_sha256.sha224" +ext_rettype(#10190, #10191) +#10192 = @"C_builtin_function_or_method$faulthandler.enable" +ext_rettype(#10192, #10005) +#10193 = @"C_builtin_function_or_method$faulthandler.disable" +ext_rettype(#10193, #10050) +#10194 = @"C_builtin_function_or_method$faulthandler.is_enabled" +ext_rettype(#10194, #10050) +#10195 = @"C_builtin_function_or_method$faulthandler.dump_traceback" +ext_rettype(#10195, #10005) +#10196 = @"C_builtin_function_or_method$faulthandler.dump_traceback_later" +ext_rettype(#10196, #10005) +#10197 = @"C_builtin_function_or_method$faulthandler.cancel_dump_traceback_later" +ext_rettype(#10197, #10005) +#10198 = @"C_builtin_function_or_method$faulthandler.register" +ext_rettype(#10198, #10005) +#10199 = @"C_builtin_function_or_method$faulthandler.unregister" +ext_rettype(#10199, #10050) +#10200 = @"C_builtin_function_or_method$faulthandler._read_null" +ext_rettype(#10200, #10024) +#10201 = @"C_builtin_function_or_method$faulthandler._sigsegv" +ext_rettype(#10201, #10005) +#10202 = @"C_builtin_function_or_method$faulthandler._sigabrt" +ext_rettype(#10202, #10005) +#10203 = @"C_builtin_function_or_method$faulthandler._sigfpe" +ext_rettype(#10203, #10024) +#10204 = @"C_builtin_function_or_method$faulthandler._sigbus" +ext_rettype(#10204, #10005) +#10205 = @"C_builtin_function_or_method$faulthandler._sigill" +ext_rettype(#10205, #10005) +#10206 = @"C_builtin_function_or_method$faulthandler._fatal_error" +ext_rettype(#10206, #10005) +#10207 = @"C_builtin_function_or_method$_functools.cmp_to_key" +#10208 = @"C_type$functools.KeyWrapper" +ext_rettype(#10207, #10208) +#10209 = @"C_builtin_function_or_method$_locale.setlocale" +ext_rettype(#10209, #10010) +#10210 = @"C_builtin_function_or_method$_locale.localeconv" +ext_rettype(#10210, #10111) +#10211 = @"C_builtin_function_or_method$_locale.strcoll" +ext_rettype(#10211, #10024) +#10212 = @"C_builtin_function_or_method$_locale.strxfrm" +ext_rettype(#10212, #10010) +#10213 = @"C_builtin_function_or_method$_locale.nl_langinfo" +ext_rettype(#10213, #10010) +#10214 = @"C_builtin_function_or_method$_locale.gettext" +ext_rettype(#10214, #10010) +#10215 = @"C_builtin_function_or_method$_locale.dgettext" +ext_rettype(#10215, #10010) +#10216 = @"C_builtin_function_or_method$_locale.dcgettext" +ext_rettype(#10216, #10010) +#10217 = @"C_builtin_function_or_method$_locale.textdomain" +ext_rettype(#10217, #10010) +#10218 = @"C_builtin_function_or_method$_locale.bindtextdomain" +ext_rettype(#10218, #10010) +#10219 = @"C_builtin_function_or_method$_locale.bind_textdomain_codeset" +ext_rettype(#10219, #10010) +ext_rettype(#10219, #10005) +#10220 = @"C_builtin_function_or_method$grp.getgrall" +ext_rettype(#10220, #10020) +#10221 = @"C_builtin_function_or_method$_pickle.dump" +ext_rettype(#10221, #10005) +#10222 = @"C_builtin_function_or_method$_md5.md5" +#10223 = @"C_type$_md5.md5" +ext_rettype(#10222, #10223) +#10224 = @"C_builtin_function_or_method$_crypt.crypt" +ext_rettype(#10224, #10010) +#10225 = @"C_builtin_function_or_method$cmath.acos" +#10226 = @"C_type$complex" +ext_rettype(#10225, #10226) +#10227 = @"C_builtin_function_or_method$cmath.acosh" +ext_rettype(#10227, #10226) +#10228 = @"C_builtin_function_or_method$cmath.asin" +ext_rettype(#10228, #10226) +#10229 = @"C_builtin_function_or_method$cmath.asinh" +ext_rettype(#10229, #10226) +#10230 = @"C_builtin_function_or_method$cmath.atan" +ext_rettype(#10230, #10226) +#10231 = @"C_builtin_function_or_method$cmath.atanh" +ext_rettype(#10231, #10226) +#10232 = @"C_builtin_function_or_method$cmath.cos" +ext_rettype(#10232, #10226) +#10233 = @"C_builtin_function_or_method$cmath.cosh" +ext_rettype(#10233, #10226) +#10234 = @"C_builtin_function_or_method$cmath.exp" +ext_rettype(#10234, #10226) +#10235 = @"C_builtin_function_or_method$cmath.isfinite" +ext_rettype(#10235, #10050) +#10236 = @"C_builtin_function_or_method$cmath.isinf" +ext_rettype(#10236, #10050) +#10237 = @"C_builtin_function_or_method$cmath.isnan" +ext_rettype(#10237, #10050) +#10238 = @"C_builtin_function_or_method$cmath.log" +ext_rettype(#10238, #10226) +#10239 = @"C_builtin_function_or_method$cmath.log10" +ext_rettype(#10239, #10226) +#10240 = @"C_builtin_function_or_method$cmath.phase" +ext_rettype(#10240, #10001) +#10241 = @"C_builtin_function_or_method$cmath.polar" +ext_rettype(#10241, #10037) +#10242 = @"C_builtin_function_or_method$cmath.rect" +ext_rettype(#10242, #10226) +#10243 = @"C_builtin_function_or_method$cmath.sin" +ext_rettype(#10243, #10226) +#10244 = @"C_builtin_function_or_method$cmath.sinh" +ext_rettype(#10244, #10226) +#10245 = @"C_builtin_function_or_method$cmath.sqrt" +ext_rettype(#10245, #10226) +#10246 = @"C_builtin_function_or_method$cmath.tan" +ext_rettype(#10246, #10226) +#10247 = @"C_builtin_function_or_method$cmath.tanh" +ext_rettype(#10247, #10226) +#10248 = @"C_builtin_function_or_method$_sha1.sha1" +#10249 = @"C_type$_sha1.sha1" +ext_rettype(#10248, #10249) +#10250 = @"C_builtin_function_or_method$_sre.getcodesize" +ext_rettype(#10250, #10024) +#10251 = @"C_builtin_function_or_method$_sre.getlower" +ext_rettype(#10251, #10024) +#10252 = @"C_builtin_function_or_method$syslog.openlog" +ext_rettype(#10252, #10005) +#10253 = @"C_builtin_function_or_method$syslog.closelog" +ext_rettype(#10253, #10005) +#10254 = @"C_builtin_function_or_method$syslog.syslog" +ext_rettype(#10254, #10005) +#10255 = @"C_builtin_function_or_method$syslog.setlogmask" +ext_rettype(#10255, #10024) +#10256 = @"C_builtin_function_or_method$syslog.LOG_MASK" +ext_rettype(#10256, #10024) +#10257 = @"C_builtin_function_or_method$syslog.LOG_UPTO" +ext_rettype(#10257, #10024) +#10258 = @"C_builtin_function_or_method$binascii.a2b_uu" +ext_rettype(#10258, #10081) +#10259 = @"C_builtin_function_or_method$binascii.a2b_hqx" +ext_rettype(#10259, #10037) +#10260 = @"C_builtin_function_or_method$binascii.b2a_hex" +ext_rettype(#10260, #10081) +#10261 = @"C_builtin_function_or_method$binascii.a2b_hex" +ext_rettype(#10261, #10081) +#10262 = @"C_builtin_function_or_method$binascii.hexlify" +ext_rettype(#10262, #10081) +#10263 = @"C_builtin_function_or_method$binascii.unhexlify" +ext_rettype(#10263, #10081) +#10264 = @"C_builtin_function_or_method$binascii.rledecode_hqx" +ext_rettype(#10264, #10081) +#10265 = @"C_builtin_function_or_method$binascii.crc_hqx" +ext_rettype(#10265, #10024) +#10266 = @"C_builtin_function_or_method$binascii.crc32" +ext_rettype(#10266, #10024) +#10267 = @"C_builtin_function_or_method$binascii.a2b_qp" +ext_rettype(#10267, #10081) +#10268 = @"C_builtin_function_or_method$binascii.b2a_qp" +ext_rettype(#10268, #10081) +#10269 = @"C_builtin_function_or_method$posix.access" +ext_rettype(#10269, #10050) +#10270 = @"C_builtin_function_or_method$posix.ttyname" +ext_rettype(#10270, #10010) +#10271 = @"C_builtin_function_or_method$posix.chdir" +ext_rettype(#10271, #10005) +#10272 = @"C_builtin_function_or_method$posix.chmod" +ext_rettype(#10272, #10005) +#10273 = @"C_builtin_function_or_method$posix.fchmod" +ext_rettype(#10273, #10005) +#10274 = @"C_builtin_function_or_method$posix.chown" +ext_rettype(#10274, #10005) +#10275 = @"C_builtin_function_or_method$posix.fchown" +ext_rettype(#10275, #10005) +#10276 = @"C_builtin_function_or_method$posix.lchown" +ext_rettype(#10276, #10005) +#10277 = @"C_builtin_function_or_method$posix.chroot" +ext_rettype(#10277, #10005) +#10278 = @"C_builtin_function_or_method$posix.ctermid" +ext_rettype(#10278, #10010) +#10279 = @"C_builtin_function_or_method$posix.getcwd" +ext_rettype(#10279, #10081) +ext_rettype(#10279, #10010) +#10280 = @"C_builtin_function_or_method$posix.getcwdb" +ext_rettype(#10280, #10081) +ext_rettype(#10280, #10010) +#10281 = @"C_builtin_function_or_method$posix.link" +ext_rettype(#10281, #10005) +#10282 = @"C_builtin_function_or_method$posix.listdir" +ext_rettype(#10282, #10020) +#10283 = @"C_builtin_function_or_method$posix.mkdir" +ext_rettype(#10283, #10005) +#10284 = @"C_builtin_function_or_method$posix.nice" +ext_rettype(#10284, #10024) +#10285 = @"C_builtin_function_or_method$posix.getpriority" +ext_rettype(#10285, #10024) +#10286 = @"C_builtin_function_or_method$posix.setpriority" +ext_rettype(#10286, #10005) +#10287 = @"C_builtin_function_or_method$posix.readlink" +ext_rettype(#10287, #10081) +ext_rettype(#10287, #10010) +#10288 = @"C_builtin_function_or_method$posix.rename" +ext_rettype(#10288, #10005) +#10289 = @"C_builtin_function_or_method$posix.replace" +ext_rettype(#10289, #10005) +#10290 = @"C_builtin_function_or_method$posix.rmdir" +ext_rettype(#10290, #10005) +#10291 = @"C_builtin_function_or_method$posix.stat_float_times" +ext_rettype(#10291, #10005) +ext_rettype(#10291, #10050) +#10292 = @"C_builtin_function_or_method$posix.symlink" +ext_rettype(#10292, #10005) +#10293 = @"C_builtin_function_or_method$posix.system" +ext_rettype(#10293, #10024) +#10294 = @"C_builtin_function_or_method$posix.umask" +ext_rettype(#10294, #10024) +#10295 = @"C_builtin_function_or_method$posix.unlink" +ext_rettype(#10295, #10005) +#10296 = @"C_builtin_function_or_method$posix.remove" +ext_rettype(#10296, #10005) +#10297 = @"C_builtin_function_or_method$posix.utime" +ext_rettype(#10297, #10005) +#10298 = @"C_builtin_function_or_method$posix.fork" +ext_rettype(#10298, #10024) +#10299 = @"C_builtin_function_or_method$posix.sched_get_priority_max" +ext_rettype(#10299, #10024) +#10300 = @"C_builtin_function_or_method$posix.sched_get_priority_min" +ext_rettype(#10300, #10024) +#10301 = @"C_builtin_function_or_method$posix.sched_getscheduler" +ext_rettype(#10301, #10024) +#10302 = @"C_builtin_function_or_method$posix.sched_rr_get_interval" +ext_rettype(#10302, #10001) +#10303 = @"C_builtin_function_or_method$posix.sched_setparam" +ext_rettype(#10303, #10005) +#10304 = @"C_builtin_function_or_method$posix.sched_setscheduler" +ext_rettype(#10304, #10005) +#10305 = @"C_builtin_function_or_method$posix.sched_yield" +ext_rettype(#10305, #10005) +#10306 = @"C_builtin_function_or_method$posix.sched_setaffinity" +ext_rettype(#10306, #10005) +#10307 = @"C_builtin_function_or_method$posix.sched_getaffinity" +ext_rettype(#10307, #10073) +ext_rettype(#10307, #10074) +#10308 = @"C_builtin_function_or_method$posix.openpty" +ext_rettype(#10308, #10037) +#10309 = @"C_builtin_function_or_method$posix.forkpty" +ext_rettype(#10309, #10037) +#10310 = @"C_builtin_function_or_method$posix.getegid" +ext_rettype(#10310, #10024) +#10311 = @"C_builtin_function_or_method$posix.geteuid" +ext_rettype(#10311, #10024) +#10312 = @"C_builtin_function_or_method$posix.getgid" +ext_rettype(#10312, #10024) +#10313 = @"C_builtin_function_or_method$posix.getgrouplist" +ext_rettype(#10313, #10020) +#10314 = @"C_builtin_function_or_method$posix.getgroups" +ext_rettype(#10314, #10020) +#10315 = @"C_builtin_function_or_method$posix.getpid" +ext_rettype(#10315, #10024) +#10316 = @"C_builtin_function_or_method$posix.getpgrp" +ext_rettype(#10316, #10024) +#10317 = @"C_builtin_function_or_method$posix.getppid" +ext_rettype(#10317, #10024) +#10318 = @"C_builtin_function_or_method$posix.getuid" +ext_rettype(#10318, #10024) +#10319 = @"C_builtin_function_or_method$posix.getlogin" +ext_rettype(#10319, #10010) +#10320 = @"C_builtin_function_or_method$posix.kill" +ext_rettype(#10320, #10005) +#10321 = @"C_builtin_function_or_method$posix.killpg" +ext_rettype(#10321, #10005) +#10322 = @"C_builtin_function_or_method$posix.setuid" +ext_rettype(#10322, #10005) +#10323 = @"C_builtin_function_or_method$posix.seteuid" +ext_rettype(#10323, #10005) +#10324 = @"C_builtin_function_or_method$posix.setegid" +ext_rettype(#10324, #10005) +#10325 = @"C_builtin_function_or_method$posix.setreuid" +ext_rettype(#10325, #10005) +#10326 = @"C_builtin_function_or_method$posix.setregid" +ext_rettype(#10326, #10005) +#10327 = @"C_builtin_function_or_method$posix.setgid" +ext_rettype(#10327, #10005) +#10328 = @"C_builtin_function_or_method$posix.setgroups" +ext_rettype(#10328, #10005) +#10329 = @"C_builtin_function_or_method$posix.initgroups" +ext_rettype(#10329, #10005) +#10330 = @"C_builtin_function_or_method$posix.getpgid" +ext_rettype(#10330, #10024) +#10331 = @"C_builtin_function_or_method$posix.setpgrp" +ext_rettype(#10331, #10005) +#10332 = @"C_builtin_function_or_method$posix.wait" +ext_rettype(#10332, #10037) +#10333 = @"C_builtin_function_or_method$posix.wait3" +ext_rettype(#10333, #10037) +#10334 = @"C_builtin_function_or_method$posix.wait4" +ext_rettype(#10334, #10037) +#10335 = @"C_builtin_function_or_method$posix.waitid" +ext_rettype(#10335, #10005) +#10336 = @"C_builtin_function_or_method$posix.waitpid" +ext_rettype(#10336, #10037) +#10337 = @"C_builtin_function_or_method$posix.getsid" +ext_rettype(#10337, #10024) +#10338 = @"C_builtin_function_or_method$posix.setsid" +ext_rettype(#10338, #10005) +#10339 = @"C_builtin_function_or_method$posix.setpgid" +ext_rettype(#10339, #10005) +#10340 = @"C_builtin_function_or_method$posix.tcgetpgrp" +ext_rettype(#10340, #10024) +#10341 = @"C_builtin_function_or_method$posix.tcsetpgrp" +ext_rettype(#10341, #10005) +#10342 = @"C_builtin_function_or_method$posix.open" +ext_rettype(#10342, #10024) +#10343 = @"C_builtin_function_or_method$posix.close" +ext_rettype(#10343, #10005) +#10344 = @"C_builtin_function_or_method$posix.closerange" +ext_rettype(#10344, #10005) +#10345 = @"C_builtin_function_or_method$posix.device_encoding" +ext_rettype(#10345, #10005) +#10346 = @"C_builtin_function_or_method$posix.dup" +ext_rettype(#10346, #10024) +#10347 = @"C_builtin_function_or_method$posix.dup2" +ext_rettype(#10347, #10005) +#10348 = @"C_builtin_function_or_method$posix.lockf" +ext_rettype(#10348, #10005) +#10349 = @"C_builtin_function_or_method$posix.lseek" +ext_rettype(#10349, #10024) +#10350 = @"C_builtin_function_or_method$posix.readv" +ext_rettype(#10350, #10024) +#10351 = @"C_builtin_function_or_method$posix.write" +ext_rettype(#10351, #10024) +#10352 = @"C_builtin_function_or_method$posix.writev" +ext_rettype(#10352, #10024) +#10353 = @"C_builtin_function_or_method$posix.pwrite" +ext_rettype(#10353, #10024) +#10354 = @"C_builtin_function_or_method$posix.sendfile" +ext_rettype(#10354, #10024) +#10355 = @"C_builtin_function_or_method$posix.isatty" +ext_rettype(#10355, #10050) +#10356 = @"C_builtin_function_or_method$posix.pipe" +ext_rettype(#10356, #10037) +#10357 = @"C_builtin_function_or_method$posix.pipe2" +ext_rettype(#10357, #10037) +#10358 = @"C_builtin_function_or_method$posix.mkfifo" +ext_rettype(#10358, #10005) +#10359 = @"C_builtin_function_or_method$posix.mknod" +ext_rettype(#10359, #10005) +#10360 = @"C_builtin_function_or_method$posix.major" +ext_rettype(#10360, #10024) +#10361 = @"C_builtin_function_or_method$posix.minor" +ext_rettype(#10361, #10024) +#10362 = @"C_builtin_function_or_method$posix.makedev" +ext_rettype(#10362, #10024) +#10363 = @"C_builtin_function_or_method$posix.ftruncate" +ext_rettype(#10363, #10005) +#10364 = @"C_builtin_function_or_method$posix.truncate" +ext_rettype(#10364, #10005) +#10365 = @"C_builtin_function_or_method$posix.posix_fallocate" +ext_rettype(#10365, #10005) +#10366 = @"C_builtin_function_or_method$posix.posix_fadvise" +ext_rettype(#10366, #10005) +#10367 = @"C_builtin_function_or_method$posix.putenv" +ext_rettype(#10367, #10005) +#10368 = @"C_builtin_function_or_method$posix.unsetenv" +ext_rettype(#10368, #10005) +#10369 = @"C_builtin_function_or_method$posix.strerror" +ext_rettype(#10369, #10010) +#10370 = @"C_builtin_function_or_method$posix.fchdir" +ext_rettype(#10370, #10005) +#10371 = @"C_builtin_function_or_method$posix.fsync" +ext_rettype(#10371, #10005) +#10372 = @"C_builtin_function_or_method$posix.sync" +ext_rettype(#10372, #10005) +#10373 = @"C_builtin_function_or_method$posix.fdatasync" +ext_rettype(#10373, #10005) +#10374 = @"C_builtin_function_or_method$posix.WCOREDUMP" +ext_rettype(#10374, #10050) +#10375 = @"C_builtin_function_or_method$posix.WIFCONTINUED" +ext_rettype(#10375, #10050) +#10376 = @"C_builtin_function_or_method$posix.WIFSTOPPED" +ext_rettype(#10376, #10050) +#10377 = @"C_builtin_function_or_method$posix.WIFSIGNALED" +ext_rettype(#10377, #10050) +#10378 = @"C_builtin_function_or_method$posix.WIFEXITED" +ext_rettype(#10378, #10050) +#10379 = @"C_builtin_function_or_method$posix.WEXITSTATUS" +ext_rettype(#10379, #10024) +#10380 = @"C_builtin_function_or_method$posix.WTERMSIG" +ext_rettype(#10380, #10024) +#10381 = @"C_builtin_function_or_method$posix.WSTOPSIG" +ext_rettype(#10381, #10024) +#10382 = @"C_builtin_function_or_method$posix.confstr" +ext_rettype(#10382, #10010) +ext_rettype(#10382, #10005) +#10383 = @"C_builtin_function_or_method$posix.sysconf" +ext_rettype(#10383, #10024) +#10384 = @"C_builtin_function_or_method$posix.fpathconf" +ext_rettype(#10384, #10024) +#10385 = @"C_builtin_function_or_method$posix.pathconf" +ext_rettype(#10385, #10024) +#10386 = @"C_builtin_function_or_method$posix.getloadavg" +ext_rettype(#10386, #10037) +#10387 = @"C_builtin_function_or_method$posix.urandom" +ext_rettype(#10387, #10081) +#10388 = @"C_builtin_function_or_method$posix.setresuid" +ext_rettype(#10388, #10005) +#10389 = @"C_builtin_function_or_method$posix.setresgid" +ext_rettype(#10389, #10005) +#10390 = @"C_builtin_function_or_method$posix.getresuid" +ext_rettype(#10390, #10037) +#10391 = @"C_builtin_function_or_method$posix.getresgid" +ext_rettype(#10391, #10037) +#10392 = @"C_builtin_function_or_method$posix.setxattr" +ext_rettype(#10392, #10005) +#10393 = @"C_builtin_function_or_method$posix.removexattr" +ext_rettype(#10393, #10005) +#10394 = @"C_builtin_function_or_method$posix.listxattr" +ext_rettype(#10394, #10020) +#10395 = @"C_builtin_function_or_method$atexit._clear" +ext_rettype(#10395, #10005) +#10396 = @"C_builtin_function_or_method$atexit.unregister" +ext_rettype(#10396, #10005) +#10397 = @"C_builtin_function_or_method$atexit._run_exitfuncs" +ext_rettype(#10397, #10005) +#10398 = @"C_builtin_function_or_method$_posixsubprocess.fork_exec" +ext_rettype(#10398, #10024) +#10399 = @"C_builtin_function_or_method$_posixsubprocess.cloexec_pipe" +ext_rettype(#10399, #10037) +#10400 = @"C_builtin_function_or_method$_heapq.heappush" +ext_rettype(#10400, #10005) +#10401 = @"C_builtin_function_or_method$_heapq.heapify" +ext_rettype(#10401, #10005) +#10402 = @"C_builtin_function_or_method$_heapq.nlargest" +ext_rettype(#10402, #10020) +#10403 = @"C_builtin_function_or_method$_heapq.nsmallest" +ext_rettype(#10403, #10020) +#10404 = @"C_builtin_function_or_method$_testbuffer.slice_indices" +ext_rettype(#10404, #10037) +#10405 = @"C_builtin_function_or_method$_testbuffer.get_sizeof_void_p" +ext_rettype(#10405, #10024) +#10406 = @"C_builtin_function_or_method$_testbuffer.get_contiguous" +#10407 = @"C_type$memoryview" +ext_rettype(#10406, #10407) +#10408 = @"C_builtin_function_or_method$_testbuffer.py_buffer_to_contiguous" +ext_rettype(#10408, #10081) +#10409 = @"C_builtin_function_or_method$select.select" +ext_rettype(#10409, #10037) +#10410 = @"C_builtin_function_or_method$select.poll" +#10411 = @"C_type$select.poll" +ext_rettype(#10410, #10411) +#10412 = @"C_builtin_function_or_method$operator.truth" +ext_rettype(#10412, #10050) +#10413 = @"C_builtin_function_or_method$operator.contains" +ext_rettype(#10413, #10050) +#10414 = @"C_builtin_function_or_method$operator.__contains__" +ext_rettype(#10414, #10050) +#10415 = @"C_builtin_function_or_method$operator.indexOf" +ext_rettype(#10415, #10024) +#10416 = @"C_builtin_function_or_method$operator.countOf" +ext_rettype(#10416, #10024) +#10417 = @"C_builtin_function_or_method$operator.not_" +ext_rettype(#10417, #10050) +#10418 = @"C_builtin_function_or_method$operator.__not__" +ext_rettype(#10418, #10050) +#10419 = @"C_builtin_function_or_method$operator.setitem" +ext_rettype(#10419, #10005) +#10420 = @"C_builtin_function_or_method$operator.__setitem__" +ext_rettype(#10420, #10005) +#10421 = @"C_builtin_function_or_method$operator.delitem" +ext_rettype(#10421, #10005) +#10422 = @"C_builtin_function_or_method$operator.__delitem__" +ext_rettype(#10422, #10005) +#10423 = @"C_builtin_function_or_method$operator._compare_digest" +ext_rettype(#10423, #10050) +#10424 = @"C_builtin_function_or_method$nis.match" +ext_rettype(#10424, #10010) +#10425 = @"C_builtin_function_or_method$nis.cat" +ext_rettype(#10425, #10111) +#10426 = @"C_builtin_function_or_method$nis.maps" +ext_rettype(#10426, #10020) +#10427 = @"C_builtin_function_or_method$nis.get_default_domain" +ext_rettype(#10427, #10010) +#10428 = @"C_builtin_function_or_method$readline.parse_and_bind" +ext_rettype(#10428, #10005) +#10429 = @"C_builtin_function_or_method$readline.insert_text" +ext_rettype(#10429, #10005) +#10430 = @"C_builtin_function_or_method$readline.redisplay" +ext_rettype(#10430, #10005) +#10431 = @"C_builtin_function_or_method$readline.read_init_file" +ext_rettype(#10431, #10005) +#10432 = @"C_builtin_function_or_method$readline.read_history_file" +ext_rettype(#10432, #10005) +#10433 = @"C_builtin_function_or_method$readline.write_history_file" +ext_rettype(#10433, #10005) +#10434 = @"C_builtin_function_or_method$readline.get_history_item" +ext_rettype(#10434, #10005) +#10435 = @"C_builtin_function_or_method$readline.get_current_history_length" +ext_rettype(#10435, #10024) +#10436 = @"C_builtin_function_or_method$readline.set_history_length" +ext_rettype(#10436, #10005) +#10437 = @"C_builtin_function_or_method$readline.get_history_length" +ext_rettype(#10437, #10024) +#10438 = @"C_builtin_function_or_method$readline.set_completer" +ext_rettype(#10438, #10005) +#10439 = @"C_builtin_function_or_method$readline.get_completer" +ext_rettype(#10439, #10005) +#10440 = @"C_builtin_function_or_method$readline.get_completion_type" +ext_rettype(#10440, #10024) +#10441 = @"C_builtin_function_or_method$readline.set_completer_delims" +ext_rettype(#10441, #10005) +#10442 = @"C_builtin_function_or_method$readline.add_history" +ext_rettype(#10442, #10005) +#10443 = @"C_builtin_function_or_method$readline.remove_history_item" +ext_rettype(#10443, #10005) +#10444 = @"C_builtin_function_or_method$readline.replace_history_item" +ext_rettype(#10444, #10005) +#10445 = @"C_builtin_function_or_method$readline.set_completion_display_matches_hook" +ext_rettype(#10445, #10005) +#10446 = @"C_builtin_function_or_method$readline.set_startup_hook" +ext_rettype(#10446, #10005) +#10447 = @"C_builtin_function_or_method$readline.set_pre_input_hook" +ext_rettype(#10447, #10005) +#10448 = @"C_builtin_function_or_method$readline.clear_history" +ext_rettype(#10448, #10005) +#10449 = @"C_builtin_function_or_method$_testcapi.test_config" +ext_rettype(#10449, #10005) +#10450 = @"C_builtin_function_or_method$_testcapi.test_datetime_capi" +ext_rettype(#10450, #10005) +#10451 = @"C_builtin_function_or_method$_testcapi.test_list_api" +ext_rettype(#10451, #10005) +#10452 = @"C_builtin_function_or_method$_testcapi.test_dict_iteration" +ext_rettype(#10452, #10005) +#10453 = @"C_builtin_function_or_method$_testcapi.test_lazy_hash_inheritance" +ext_rettype(#10453, #10005) +#10454 = @"C_builtin_function_or_method$_testcapi.test_long_api" +ext_rettype(#10454, #10005) +#10455 = @"C_builtin_function_or_method$_testcapi.test_long_and_overflow" +ext_rettype(#10455, #10005) +#10456 = @"C_builtin_function_or_method$_testcapi.test_long_as_double" +ext_rettype(#10456, #10005) +#10457 = @"C_builtin_function_or_method$_testcapi.test_long_as_size_t" +ext_rettype(#10457, #10005) +#10458 = @"C_builtin_function_or_method$_testcapi.test_long_numbits" +ext_rettype(#10458, #10005) +#10459 = @"C_builtin_function_or_method$_testcapi.test_k_code" +ext_rettype(#10459, #10005) +#10460 = @"C_builtin_function_or_method$_testcapi.test_empty_argparse" +ext_rettype(#10460, #10005) +#10461 = @"C_builtin_function_or_method$_testcapi.parse_tuple_and_keywords" +ext_rettype(#10461, #10005) +#10462 = @"C_builtin_function_or_method$_testcapi.test_null_strings" +ext_rettype(#10462, #10037) +#10463 = @"C_builtin_function_or_method$_testcapi.test_string_from_format" +ext_rettype(#10463, #10005) +#10464 = @"C_builtin_function_or_method$_testcapi.test_with_docstring" +ext_rettype(#10464, #10005) +#10465 = @"C_builtin_function_or_method$_testcapi.test_string_to_double" +ext_rettype(#10465, #10005) +#10466 = @"C_builtin_function_or_method$_testcapi.test_unicode_compare_with_ascii" +ext_rettype(#10466, #10005) +#10467 = @"C_builtin_function_or_method$_testcapi.test_capsule" +ext_rettype(#10467, #10005) +#10468 = @"C_builtin_function_or_method$_testcapi.getargs_tuple" +ext_rettype(#10468, #10037) +#10469 = @"C_builtin_function_or_method$_testcapi.getargs_keywords" +ext_rettype(#10469, #10037) +#10470 = @"C_builtin_function_or_method$_testcapi.getargs_keyword_only" +ext_rettype(#10470, #10037) +#10471 = @"C_builtin_function_or_method$_testcapi.getargs_b" +ext_rettype(#10471, #10024) +#10472 = @"C_builtin_function_or_method$_testcapi.getargs_B" +ext_rettype(#10472, #10024) +#10473 = @"C_builtin_function_or_method$_testcapi.getargs_h" +ext_rettype(#10473, #10024) +#10474 = @"C_builtin_function_or_method$_testcapi.getargs_H" +ext_rettype(#10474, #10024) +#10475 = @"C_builtin_function_or_method$_testcapi.getargs_I" +ext_rettype(#10475, #10024) +#10476 = @"C_builtin_function_or_method$_testcapi.getargs_k" +ext_rettype(#10476, #10024) +#10477 = @"C_builtin_function_or_method$_testcapi.getargs_i" +ext_rettype(#10477, #10024) +#10478 = @"C_builtin_function_or_method$_testcapi.getargs_l" +ext_rettype(#10478, #10024) +#10479 = @"C_builtin_function_or_method$_testcapi.getargs_n" +ext_rettype(#10479, #10024) +#10480 = @"C_builtin_function_or_method$_testcapi.getargs_p" +ext_rettype(#10480, #10024) +#10481 = @"C_builtin_function_or_method$_testcapi.getargs_L" +ext_rettype(#10481, #10024) +#10482 = @"C_builtin_function_or_method$_testcapi.getargs_K" +ext_rettype(#10482, #10024) +#10483 = @"C_builtin_function_or_method$_testcapi.test_longlong_api" +ext_rettype(#10483, #10005) +#10484 = @"C_builtin_function_or_method$_testcapi.test_long_long_and_overflow" +ext_rettype(#10484, #10005) +#10485 = @"C_builtin_function_or_method$_testcapi.test_L_code" +ext_rettype(#10485, #10005) +#10486 = @"C_builtin_function_or_method$_testcapi.getargs_c" +ext_rettype(#10486, #10081) +#10487 = @"C_builtin_function_or_method$_testcapi.getargs_s" +ext_rettype(#10487, #10081) +#10488 = @"C_builtin_function_or_method$_testcapi.getargs_s_star" +ext_rettype(#10488, #10081) +#10489 = @"C_builtin_function_or_method$_testcapi.getargs_s_hash" +ext_rettype(#10489, #10081) +#10490 = @"C_builtin_function_or_method$_testcapi.getargs_z" +ext_rettype(#10490, #10081) +ext_rettype(#10490, #10005) +#10491 = @"C_builtin_function_or_method$_testcapi.getargs_z_star" +ext_rettype(#10491, #10081) +ext_rettype(#10491, #10005) +#10492 = @"C_builtin_function_or_method$_testcapi.getargs_z_hash" +ext_rettype(#10492, #10081) +ext_rettype(#10492, #10005) +#10493 = @"C_builtin_function_or_method$_testcapi.getargs_y" +ext_rettype(#10493, #10081) +#10494 = @"C_builtin_function_or_method$_testcapi.getargs_y_star" +ext_rettype(#10494, #10081) +#10495 = @"C_builtin_function_or_method$_testcapi.getargs_y_hash" +ext_rettype(#10495, #10081) +#10496 = @"C_builtin_function_or_method$_testcapi.getargs_u" +ext_rettype(#10496, #10010) +#10497 = @"C_builtin_function_or_method$_testcapi.getargs_u_hash" +ext_rettype(#10497, #10010) +#10498 = @"C_builtin_function_or_method$_testcapi.getargs_Z" +ext_rettype(#10498, #10010) +ext_rettype(#10498, #10005) +#10499 = @"C_builtin_function_or_method$_testcapi.getargs_Z_hash" +ext_rettype(#10499, #10010) +ext_rettype(#10499, #10005) +#10500 = @"C_builtin_function_or_method$_testcapi.getargs_w_star" +ext_rettype(#10500, #10081) +#10501 = @"C_builtin_function_or_method$_testcapi.test_s_code" +ext_rettype(#10501, #10005) +#10502 = @"C_builtin_function_or_method$_testcapi.test_u_code" +ext_rettype(#10502, #10005) +#10503 = @"C_builtin_function_or_method$_testcapi.test_Z_code" +ext_rettype(#10503, #10005) +#10504 = @"C_builtin_function_or_method$_testcapi.test_widechar" +ext_rettype(#10504, #10005) +#10505 = @"C_builtin_function_or_method$_testcapi.unicode_aswidechar" +ext_rettype(#10505, #10037) +#10506 = @"C_builtin_function_or_method$_testcapi.unicode_aswidecharstring" +ext_rettype(#10506, #10037) +#10507 = @"C_builtin_function_or_method$_testcapi.unicode_legacy_string" +ext_rettype(#10507, #10010) +#10508 = @"C_builtin_function_or_method$_testcapi._test_thread_state" +ext_rettype(#10508, #10005) +#10509 = @"C_builtin_function_or_method$_testcapi._pending_threadfunc" +ext_rettype(#10509, #10050) +#10510 = @"C_builtin_function_or_method$_testcapi.profile_int" +ext_rettype(#10510, #10005) +#10511 = @"C_builtin_function_or_method$_testcapi.traceback_print" +ext_rettype(#10511, #10005) +#10512 = @"C_builtin_function_or_method$_testcapi.exception_print" +ext_rettype(#10512, #10005) +#10513 = @"C_builtin_function_or_method$_testcapi.set_exc_info" +ext_rettype(#10513, #10037) +#10514 = @"C_builtin_function_or_method$_testcapi.argparsing" +ext_rettype(#10514, #10024) +ext_rettype(#10514, #10005) +#10515 = @"C_builtin_function_or_method$_testcapi.code_newempty" +ext_rettype(#10515, #10028) +#10516 = @"C_builtin_function_or_method$_testcapi.make_exception_with_doc" +#10517 = @"C_type$type" +ext_rettype(#10516, #10517) +#10518 = @"C_builtin_function_or_method$_testcapi.make_memoryview_from_NULL_pointer" +ext_rettype(#10518, #10407) +#10519 = @"C_builtin_function_or_method$_testcapi.run_in_subinterp" +ext_rettype(#10519, #10024) +#10520 = @"C_builtin_function_or_method$_testcapi.pytime_object_to_time_t" +ext_rettype(#10520, #10024) +#10521 = @"C_builtin_function_or_method$_testcapi.pytime_object_to_timeval" +ext_rettype(#10521, #10037) +#10522 = @"C_builtin_function_or_method$_testcapi.pytime_object_to_timespec" +ext_rettype(#10522, #10037) +#10523 = @"C_builtin_function_or_method$_testcapi.call_in_temporary_c_thread" +ext_rettype(#10523, #10005) +#10524 = @"C_builtin_function_or_method$_json.scanstring" +ext_rettype(#10524, #10037) +#10525 = @"C_builtin_function_or_method$_sha512.sha512" +#10526 = @"C_type$_sha512.sha512" +ext_rettype(#10525, #10526) +#10527 = @"C_builtin_function_or_method$_sha512.sha384" +#10528 = @"C_type$_sha512.sha384" +ext_rettype(#10527, #10528) +#10529 = @"C_builtin_function_or_method$spwd.getspall" +ext_rettype(#10529, #10020) +#10530 = @"C_builtin_function_or_method$_elementtree.SubElement" +#10531 = @"C_type$xml.etree.ElementTree.Element" +ext_rettype(#10530, #10531) +#10532 = @"C_builtin_function_or_method$_ctypes.get_errno" +ext_rettype(#10532, #10024) +#10533 = @"C_builtin_function_or_method$_ctypes.set_errno" +ext_rettype(#10533, #10024) +#10534 = @"C_builtin_function_or_method$_ctypes.buffer_info" +ext_rettype(#10534, #10037) +#10535 = @"C_builtin_function_or_method$_ctypes.resize" +ext_rettype(#10535, #10005) +#10536 = @"C_builtin_function_or_method$_ctypes.dlopen" +ext_rettype(#10536, #10024) +#10537 = @"C_builtin_function_or_method$_ctypes.dlclose" +ext_rettype(#10537, #10005) +#10538 = @"C_builtin_function_or_method$_ctypes.dlsym" +ext_rettype(#10538, #10024) +#10539 = @"C_builtin_function_or_method$_ctypes.alignment" +ext_rettype(#10539, #10024) +#10540 = @"C_builtin_function_or_method$_ctypes.sizeof" +ext_rettype(#10540, #10024) +#10541 = @"C_builtin_function_or_method$_ctypes.byref" +#10542 = @"C_type$CArgObject" +ext_rettype(#10541, #10542) +#10543 = @"C_builtin_function_or_method$_ctypes.addressof" +ext_rettype(#10543, #10024) +#10544 = @"C_builtin_function_or_method$_ctypes.call_function" +ext_rettype(#10544, #10024) +ext_rettype(#10544, #10005) +#10545 = @"C_builtin_function_or_method$_ctypes.call_cdeclfunction" +ext_rettype(#10545, #10024) +ext_rettype(#10545, #10005) +#10546 = @"C_builtin_function_or_method$_ctypes_test.func_si" +ext_rettype(#10546, #10005) +#10547 = @"C_builtin_function_or_method$_ctypes_test.func" +ext_rettype(#10547, #10005) +#10548 = @"C_builtin_function_or_method$pwd.getpwall" +ext_rettype(#10548, #10020) +#10549 = @"C_builtin_function_or_method$zlib.adler32" +ext_rettype(#10549, #10024) +#10550 = @"C_builtin_function_or_method$zlib.compress" +ext_rettype(#10550, #10081) +#10551 = @"C_builtin_function_or_method$zlib.crc32" +ext_rettype(#10551, #10024) +#10552 = @"C_builtin_function_or_method$unicodedata.decimal" +ext_rettype(#10552, #10024) +#10553 = @"C_builtin_function_or_method$unicodedata.digit" +ext_rettype(#10553, #10024) +#10554 = @"C_builtin_function_or_method$unicodedata.numeric" +ext_rettype(#10554, #10001) +#10555 = @"C_builtin_function_or_method$unicodedata.combining" +ext_rettype(#10555, #10024) +#10556 = @"C_builtin_function_or_method$unicodedata.mirrored" +ext_rettype(#10556, #10024) +#10557 = @"C_builtin_function_or_method$unicodedata.decomposition" +ext_rettype(#10557, #10010) +#10558 = @"C_builtin_function_or_method$itertools.tee" +ext_rettype(#10558, #10037) +#10559 = @"C_builtin_function_or_method$math.atan2" +ext_rettype(#10559, #10001) +#10560 = @"C_builtin_function_or_method$math.copysign" +ext_rettype(#10560, #10001) +#10561 = @"C_builtin_function_or_method$math.degrees" +ext_rettype(#10561, #10001) +#10562 = @"C_builtin_function_or_method$math.erf" +ext_rettype(#10562, #10001) +#10563 = @"C_builtin_function_or_method$math.erfc" +ext_rettype(#10563, #10001) +#10564 = @"C_builtin_function_or_method$math.factorial" +ext_rettype(#10564, #10024) +#10565 = @"C_builtin_function_or_method$math.fmod" +ext_rettype(#10565, #10001) +#10566 = @"C_builtin_function_or_method$math.frexp" +ext_rettype(#10566, #10037) +#10567 = @"C_builtin_function_or_method$math.fsum" +ext_rettype(#10567, #10001) +#10568 = @"C_builtin_function_or_method$math.gamma" +ext_rettype(#10568, #10001) +#10569 = @"C_builtin_function_or_method$math.hypot" +ext_rettype(#10569, #10001) +#10570 = @"C_builtin_function_or_method$math.isfinite" +ext_rettype(#10570, #10050) +#10571 = @"C_builtin_function_or_method$math.isinf" +ext_rettype(#10571, #10050) +#10572 = @"C_builtin_function_or_method$math.isnan" +ext_rettype(#10572, #10050) +#10573 = @"C_builtin_function_or_method$math.ldexp" +ext_rettype(#10573, #10001) +#10574 = @"C_builtin_function_or_method$math.lgamma" +ext_rettype(#10574, #10001) +#10575 = @"C_builtin_function_or_method$math.log" +ext_rettype(#10575, #10001) +#10576 = @"C_builtin_function_or_method$math.log10" +ext_rettype(#10576, #10001) +#10577 = @"C_builtin_function_or_method$math.log2" +ext_rettype(#10577, #10001) +#10578 = @"C_builtin_function_or_method$math.modf" +ext_rettype(#10578, #10037) +#10579 = @"C_builtin_function_or_method$math.pow" +ext_rettype(#10579, #10001) +#10580 = @"C_builtin_function_or_method$math.radians" +ext_rettype(#10580, #10001) +#10581 = @"C_builtin_function_or_method$ossaudiodev.open" +#10582 = @"C_type$ossaudiodev.oss_audio_device" +ext_rettype(#10581, #10582) +#10583 = @"C_builtin_function_or_method$ossaudiodev.openmixer" +#10584 = @"C_type$ossaudiodev.oss_mixer_device" +ext_rettype(#10583, #10584) +#10585 = @"C_builtin_function_or_method$pyexpat.ParserCreate" +#10586 = @"C_type$pyexpat.xmlparser" +ext_rettype(#10585, #10586) +#10587 = @"C_builtin_function_or_method$pyexpat.ErrorString" +ext_rettype(#10587, #10010) +#10588 = @"C_builtin_function_or_method$_socket.gethostbyname_ex" +ext_rettype(#10588, #10037) +#10589 = @"C_builtin_function_or_method$_socket.gethostbyaddr" +ext_rettype(#10589, #10037) +#10590 = @"C_builtin_function_or_method$_socket.gethostname" +ext_rettype(#10590, #10010) +#10591 = @"C_builtin_function_or_method$_socket.sethostname" +ext_rettype(#10591, #10005) +#10592 = @"C_builtin_function_or_method$_socket.getservbyname" +ext_rettype(#10592, #10024) +#10593 = @"C_builtin_function_or_method$_socket.getprotobyname" +ext_rettype(#10593, #10024) +#10594 = @"C_builtin_function_or_method$_socket.dup" +ext_rettype(#10594, #10024) +#10595 = @"C_builtin_function_or_method$_socket.socketpair" +ext_rettype(#10595, #10037) +#10596 = @"C_builtin_function_or_method$_socket.ntohs" +ext_rettype(#10596, #10024) +#10597 = @"C_builtin_function_or_method$_socket.ntohl" +ext_rettype(#10597, #10024) +#10598 = @"C_builtin_function_or_method$_socket.htons" +ext_rettype(#10598, #10024) +#10599 = @"C_builtin_function_or_method$_socket.htonl" +ext_rettype(#10599, #10024) +#10600 = @"C_builtin_function_or_method$_socket.inet_aton" +ext_rettype(#10600, #10081) +#10601 = @"C_builtin_function_or_method$_socket.inet_pton" +ext_rettype(#10601, #10081) +#10602 = @"C_builtin_function_or_method$_socket.getaddrinfo" +ext_rettype(#10602, #10020) +#10603 = @"C_builtin_function_or_method$_socket.getnameinfo" +ext_rettype(#10603, #10037) +#10604 = @"C_builtin_function_or_method$_socket.getdefaulttimeout" +ext_rettype(#10604, #10001) +ext_rettype(#10604, #10005) +#10605 = @"C_builtin_function_or_method$_socket.setdefaulttimeout" +ext_rettype(#10605, #10005) +#10606 = @"C_builtin_function_or_method$_socket.if_nameindex" +ext_rettype(#10606, #10020) +#10607 = @"C_builtin_function_or_method$_socket.if_nametoindex" +ext_rettype(#10607, #10024) +#10608 = @"C_builtin_function_or_method$_socket.if_indextoname" +ext_rettype(#10608, #10010) +#10609 = @"C_builtin_function_or_method$_socket.CMSG_LEN" +ext_rettype(#10609, #10024) +#10610 = @"C_builtin_function_or_method$_socket.CMSG_SPACE" +ext_rettype(#10610, #10024) +#10611 = @"C_builtin_function_or_method$resource.getrlimit" +ext_rettype(#10611, #10037) +#10612 = @"C_builtin_function_or_method$resource.setrlimit" +ext_rettype(#10612, #10005) +#10613 = @"C_builtin_function_or_method$resource.getpagesize" +ext_rettype(#10613, #10024) +#10614 = @"C_builtin_function_or_method$_warnings.warn" +ext_rettype(#10614, #10005) +#10615 = @"C_builtin_function_or_method$_warnings.warn_explicit" +ext_rettype(#10615, #10005) +#10616 = @"C_builtin_function_or_method$sys.callstats" +ext_rettype(#10616, #10005) +#10617 = @"C_builtin_function_or_method$sys._clear_type_cache" +ext_rettype(#10617, #10005) +#10618 = @"C_builtin_function_or_method$sys._current_frames" +ext_rettype(#10618, #10111) +#10619 = @"C_builtin_function_or_method$sys.displayhook" +ext_rettype(#10619, #10005) +#10620 = @"C_builtin_function_or_method$sys.exc_info" +ext_rettype(#10620, #10037) +#10621 = @"C_builtin_function_or_method$sys.excepthook" +ext_rettype(#10621, #10005) +#10622 = @"C_builtin_function_or_method$sys.getdlopenflags" +ext_rettype(#10622, #10024) +#10623 = @"C_builtin_function_or_method$sys.getrefcount" +ext_rettype(#10623, #10024) +#10624 = @"C_builtin_function_or_method$sys.getrecursionlimit" +ext_rettype(#10624, #10024) +#10625 = @"C_builtin_function_or_method$sys._getframe" +#10626 = @"C_type$frame" +ext_rettype(#10625, #10626) +#10627 = @"C_builtin_function_or_method$sys.setcheckinterval" +ext_rettype(#10627, #10005) +#10628 = @"C_builtin_function_or_method$sys.getcheckinterval" +ext_rettype(#10628, #10024) +#10629 = @"C_builtin_function_or_method$sys.setswitchinterval" +ext_rettype(#10629, #10005) +#10630 = @"C_builtin_function_or_method$sys.getswitchinterval" +ext_rettype(#10630, #10001) +#10631 = @"C_builtin_function_or_method$sys.setdlopenflags" +ext_rettype(#10631, #10005) +#10632 = @"C_builtin_function_or_method$sys.setprofile" +ext_rettype(#10632, #10005) +#10633 = @"C_builtin_function_or_method$sys.getprofile" +ext_rettype(#10633, #10005) +#10634 = @"C_builtin_function_or_method$sys.setrecursionlimit" +ext_rettype(#10634, #10005) +#10635 = @"C_builtin_function_or_method$sys.settrace" +ext_rettype(#10635, #10005) +#10636 = @"C_builtin_function_or_method$sys.gettrace" +ext_rettype(#10636, #10005) +#10637 = @"C_builtin_function_or_method$sys._debugmallocstats" +ext_rettype(#10637, #10005) +#10638 = @"C_builtin_function_or_method$marshal.load" +ext_rettype(#10638, #10024) +ext_rettype(#10638, #10020) +ext_rettype(#10638, #10111) +ext_rettype(#10638, #10001) +ext_rettype(#10638, #10226) +ext_rettype(#10638, #10037) +ext_rettype(#10638, #10028) +ext_rettype(#10638, #10081) +ext_rettype(#10638, #10005) +ext_rettype(#10638, #10050) +#10639 = @"C_builtin_function_or_method$marshal.loads" +ext_rettype(#10639, #10024) +ext_rettype(#10639, #10020) +ext_rettype(#10639, #10111) +ext_rettype(#10639, #10001) +ext_rettype(#10639, #10226) +ext_rettype(#10639, #10037) +ext_rettype(#10639, #10028) +ext_rettype(#10639, #10081) +ext_rettype(#10639, #10005) +ext_rettype(#10639, #10050) +#10640 = @"C_builtin_function_or_method$_imp.extension_suffixes" +ext_rettype(#10640, #10020) +#10641 = @"C_builtin_function_or_method$_imp.lock_held" +ext_rettype(#10641, #10050) +#10642 = @"C_builtin_function_or_method$_imp.acquire_lock" +ext_rettype(#10642, #10005) +#10643 = @"C_builtin_function_or_method$_imp.release_lock" +ext_rettype(#10643, #10005) +#10644 = @"C_builtin_function_or_method$_imp.get_frozen_object" +ext_rettype(#10644, #10024) +ext_rettype(#10644, #10020) +ext_rettype(#10644, #10111) +ext_rettype(#10644, #10001) +ext_rettype(#10644, #10226) +ext_rettype(#10644, #10037) +ext_rettype(#10644, #10028) +ext_rettype(#10644, #10081) +ext_rettype(#10644, #10005) +ext_rettype(#10644, #10050) +#10645 = @"C_builtin_function_or_method$_imp.is_frozen_package" +ext_rettype(#10645, #10050) +#10646 = @"C_builtin_function_or_method$_imp.init_builtin" +#10647 = @"C_type$module" +ext_rettype(#10646, #10647) +ext_rettype(#10646, #10005) +#10648 = @"C_builtin_function_or_method$_imp.init_frozen" +ext_rettype(#10648, #10647) +ext_rettype(#10648, #10005) +#10649 = @"C_builtin_function_or_method$_imp.is_builtin" +ext_rettype(#10649, #10024) +#10650 = @"C_builtin_function_or_method$_imp.is_frozen" +ext_rettype(#10650, #10050) +#10651 = @"C_builtin_function_or_method$_imp.load_dynamic" +ext_rettype(#10651, #10647) +#10652 = @"C_builtin_function_or_method$_imp._fix_co_filename" +ext_rettype(#10652, #10005) +#10653 = @"C_builtin_function_or_method$builtins.all" +ext_rettype(#10653, #10050) +#10654 = @"C_builtin_function_or_method$builtins.any" +ext_rettype(#10654, #10050) +#10655 = @"C_builtin_function_or_method$builtins.callable" +ext_rettype(#10655, #10050) +#10656 = @"C_builtin_function_or_method$builtins.compile" +ext_rettype(#10656, #10028) +ext_rettype(#10656, #10005) +#10657 = @"C_builtin_function_or_method$builtins.delattr" +ext_rettype(#10657, #10005) +#10658 = @"C_builtin_function_or_method$builtins.exec" +ext_rettype(#10658, #10005) +#10659 = @"C_builtin_function_or_method$builtins.globals" +ext_rettype(#10659, #10111) +#10660 = @"C_builtin_function_or_method$builtins.hasattr" +ext_rettype(#10660, #10050) +#10661 = @"C_builtin_function_or_method$builtins.hash" +ext_rettype(#10661, #10024) +#10662 = @"C_builtin_function_or_method$builtins.id" +ext_rettype(#10662, #10024) +#10663 = @"C_builtin_function_or_method$builtins.isinstance" +ext_rettype(#10663, #10050) +#10664 = @"C_builtin_function_or_method$builtins.issubclass" +ext_rettype(#10664, #10050) +#10665 = @"C_builtin_function_or_method$builtins.iter" +#10666 = @"C_type$iterator" +ext_rettype(#10665, #10666) +#10667 = @"C_type$callable_iterator" +ext_rettype(#10665, #10667) +#10668 = @"C_builtin_function_or_method$builtins.len" +ext_rettype(#10668, #10024) +#10669 = @"C_builtin_function_or_method$builtins.locals" +ext_rettype(#10669, #10111) +#10670 = @"C_builtin_function_or_method$builtins.ord" +ext_rettype(#10670, #10024) +#10671 = @"C_builtin_function_or_method$builtins.print" +ext_rettype(#10671, #10005) +#10672 = @"C_builtin_function_or_method$builtins.setattr" +ext_rettype(#10672, #10005) +#10673 = @"C_builtin_function_or_method$builtins.sorted" +ext_rettype(#10673, #10020) +#10674 = @"C_builtin_function_or_method$builtins.sum" +ext_rettype(#10674, #10024) +ext_rettype(#10674, #10001) +#10675 = @"C_builtin_function_or_method$builtins.vars" +ext_rettype(#10675, #10111) +#10676 = @"C_builtin_function_or_method$_string.formatter_field_name_split" +ext_rettype(#10676, #10037) +#10677 = @"C_builtin_function_or_method$_string.formatter_parser" +#10678 = @"C_type$formatteriterator" +ext_rettype(#10677, #10678) +#10679 = @"C_type$_multiprocessing.SemLock$acquire" +ext_rettype(#10679, #10050) +#10680 = @"C_type$_multiprocessing.SemLock$release" +ext_rettype(#10680, #10005) +#10681 = @"C_type$_multiprocessing.SemLock$__enter__" +ext_rettype(#10681, #10050) +#10682 = @"C_type$_multiprocessing.SemLock$__exit__" +ext_rettype(#10682, #10005) +#10683 = @"C_type$_multiprocessing.SemLock$_count" +ext_rettype(#10683, #10024) +#10684 = @"C_type$_multiprocessing.SemLock$_is_mine" +ext_rettype(#10684, #10050) +#10685 = @"C_type$_multiprocessing.SemLock$_get_value" +ext_rettype(#10685, #10024) +#10686 = @"C_type$_multiprocessing.SemLock$_is_zero" +ext_rettype(#10686, #10050) +#10687 = @"C_type$_multiprocessing.SemLock$_after_fork" +ext_rettype(#10687, #10005) +#10688 = @"C_type$_random.Random$random" +ext_rettype(#10688, #10001) +#10689 = @"C_type$_random.Random$seed" +ext_rettype(#10689, #10005) +#10690 = @"C_type$_random.Random$getstate" +ext_rettype(#10690, #10037) +#10691 = @"C_type$_random.Random$setstate" +ext_rettype(#10691, #10005) +#10692 = @"C_type$_random.Random$getrandbits" +ext_rettype(#10692, #10024) +#10693 = @"C_type$_csv.writer$writerows" +ext_rettype(#10693, #10005) +#10694 = @"C_type$xxsubtype.spamlist$getstate" +ext_rettype(#10694, #10024) +#10695 = @"C_type$xxsubtype.spamlist$setstate" +ext_rettype(#10695, #10005) +#10696 = @"C_type$xxsubtype.spamlist$classmeth" +ext_rettype(#10696, #10037) +#10697 = @"C_type$xxsubtype.spamlist$staticmeth" +ext_rettype(#10697, #10037) +#10698 = @"C_type$xxsubtype.spamdict$getstate" +ext_rettype(#10698, #10024) +#10699 = @"C_type$xxsubtype.spamdict$setstate" +ext_rettype(#10699, #10005) +#10700 = @"C_type$_collections._deque_iterator$__length_hint__" +ext_rettype(#10700, #10024) +#10701 = @"C_type$_collections._deque_iterator$__reduce__" +ext_rettype(#10701, #10037) +#10702 = @"C_type$_collections._deque_reverse_iterator$__length_hint__" +ext_rettype(#10702, #10024) +#10703 = @"C_type$_collections._deque_reverse_iterator$__reduce__" +ext_rettype(#10703, #10037) +#10704 = @"C_type$collections.deque$append" +ext_rettype(#10704, #10005) +#10705 = @"C_type$collections.deque$appendleft" +ext_rettype(#10705, #10005) +#10706 = @"C_type$collections.deque$clear" +ext_rettype(#10706, #10005) +#10707 = @"C_type$collections.deque$count" +ext_rettype(#10707, #10024) +#10708 = @"C_type$collections.deque$extend" +ext_rettype(#10708, #10005) +#10709 = @"C_type$collections.deque$extendleft" +ext_rettype(#10709, #10005) +#10710 = @"C_type$collections.deque$__reduce__" +ext_rettype(#10710, #10037) +#10711 = @"C_type$collections.deque$remove" +ext_rettype(#10711, #10005) +#10712 = @"C_type$collections.deque$__reversed__" +#10713 = @"C_type$_collections._deque_reverse_iterator" +ext_rettype(#10712, #10713) +#10714 = @"C_type$collections.deque$reverse" +ext_rettype(#10714, #10005) +#10715 = @"C_type$collections.deque$rotate" +ext_rettype(#10715, #10005) +#10716 = @"C_type$collections.deque$__sizeof__" +ext_rettype(#10716, #10024) +#10717 = @"C_type$collections.defaultdict$__reduce__" +ext_rettype(#10717, #10037) +#10718 = @"C_type$parser.st$compile" +ext_rettype(#10718, #10028) +#10719 = @"C_type$parser.st$tolist" +ext_rettype(#10719, #10005) +#10720 = @"C_type$parser.st$totuple" +ext_rettype(#10720, #10005) +#10721 = @"C_type$parser.st$__sizeof__" +ext_rettype(#10721, #10024) +#10722 = @"C_type$decimal.Context$abs" +#10723 = @"C_type$decimal.Decimal" +ext_rettype(#10722, #10723) +#10724 = @"C_type$decimal.Context$exp" +ext_rettype(#10724, #10723) +#10725 = @"C_type$decimal.Context$ln" +ext_rettype(#10725, #10723) +#10726 = @"C_type$decimal.Context$log10" +ext_rettype(#10726, #10723) +#10727 = @"C_type$decimal.Context$minus" +ext_rettype(#10727, #10723) +#10728 = @"C_type$decimal.Context$next_minus" +ext_rettype(#10728, #10723) +#10729 = @"C_type$decimal.Context$next_plus" +ext_rettype(#10729, #10723) +#10730 = @"C_type$decimal.Context$normalize" +ext_rettype(#10730, #10723) +#10731 = @"C_type$decimal.Context$plus" +ext_rettype(#10731, #10723) +#10732 = @"C_type$decimal.Context$to_integral" +ext_rettype(#10732, #10723) +#10733 = @"C_type$decimal.Context$to_integral_exact" +ext_rettype(#10733, #10723) +#10734 = @"C_type$decimal.Context$to_integral_value" +ext_rettype(#10734, #10723) +#10735 = @"C_type$decimal.Context$sqrt" +ext_rettype(#10735, #10723) +#10736 = @"C_type$decimal.Context$add" +ext_rettype(#10736, #10723) +#10737 = @"C_type$decimal.Context$compare" +ext_rettype(#10737, #10723) +#10738 = @"C_type$decimal.Context$compare_signal" +ext_rettype(#10738, #10723) +#10739 = @"C_type$decimal.Context$divide" +ext_rettype(#10739, #10723) +#10740 = @"C_type$decimal.Context$divide_int" +ext_rettype(#10740, #10723) +#10741 = @"C_type$decimal.Context$divmod" +ext_rettype(#10741, #10037) +#10742 = @"C_type$decimal.Context$max" +ext_rettype(#10742, #10723) +#10743 = @"C_type$decimal.Context$max_mag" +ext_rettype(#10743, #10723) +#10744 = @"C_type$decimal.Context$min" +ext_rettype(#10744, #10723) +#10745 = @"C_type$decimal.Context$min_mag" +ext_rettype(#10745, #10723) +#10746 = @"C_type$decimal.Context$multiply" +ext_rettype(#10746, #10723) +#10747 = @"C_type$decimal.Context$next_toward" +ext_rettype(#10747, #10723) +#10748 = @"C_type$decimal.Context$quantize" +ext_rettype(#10748, #10723) +#10749 = @"C_type$decimal.Context$remainder" +ext_rettype(#10749, #10723) +#10750 = @"C_type$decimal.Context$remainder_near" +ext_rettype(#10750, #10723) +#10751 = @"C_type$decimal.Context$subtract" +ext_rettype(#10751, #10723) +#10752 = @"C_type$decimal.Context$power" +ext_rettype(#10752, #10723) +#10753 = @"C_type$decimal.Context$fma" +ext_rettype(#10753, #10723) +#10754 = @"C_type$decimal.Context$Etiny" +ext_rettype(#10754, #10024) +#10755 = @"C_type$decimal.Context$Etop" +ext_rettype(#10755, #10024) +#10756 = @"C_type$decimal.Context$radix" +ext_rettype(#10756, #10723) +#10757 = @"C_type$decimal.Context$_apply" +ext_rettype(#10757, #10723) +#10758 = @"C_type$decimal.Context$copy_abs" +ext_rettype(#10758, #10723) +#10759 = @"C_type$decimal.Context$copy_negate" +ext_rettype(#10759, #10723) +#10760 = @"C_type$decimal.Context$logb" +ext_rettype(#10760, #10723) +#10761 = @"C_type$decimal.Context$logical_invert" +ext_rettype(#10761, #10723) +#10762 = @"C_type$decimal.Context$compare_total" +ext_rettype(#10762, #10723) +#10763 = @"C_type$decimal.Context$compare_total_mag" +ext_rettype(#10763, #10723) +#10764 = @"C_type$decimal.Context$copy_sign" +ext_rettype(#10764, #10723) +#10765 = @"C_type$decimal.Context$logical_and" +ext_rettype(#10765, #10723) +#10766 = @"C_type$decimal.Context$logical_or" +ext_rettype(#10766, #10723) +#10767 = @"C_type$decimal.Context$logical_xor" +ext_rettype(#10767, #10723) +#10768 = @"C_type$decimal.Context$rotate" +ext_rettype(#10768, #10723) +#10769 = @"C_type$decimal.Context$scaleb" +ext_rettype(#10769, #10723) +#10770 = @"C_type$decimal.Context$shift" +ext_rettype(#10770, #10723) +#10771 = @"C_type$decimal.Context$clear_flags" +ext_rettype(#10771, #10005) +#10772 = @"C_type$decimal.Context$clear_traps" +ext_rettype(#10772, #10005) +#10773 = @"C_type$decimal.Context$__copy__" +ext_rettype(#10773, #10039) +#10774 = @"C_type$decimal.Context$__reduce__" +ext_rettype(#10774, #10037) +#10775 = @"C_type$decimal.Context$copy" +ext_rettype(#10775, #10039) +#10776 = @"C_type$decimal.Context$create_decimal" +ext_rettype(#10776, #10723) +#10777 = @"C_type$decimal.Context$create_decimal_from_float" +ext_rettype(#10777, #10723) +#10778 = @"C_type$decimal.Decimal$exp" +ext_rettype(#10778, #10723) +#10779 = @"C_type$decimal.Decimal$ln" +ext_rettype(#10779, #10723) +#10780 = @"C_type$decimal.Decimal$log10" +ext_rettype(#10780, #10723) +#10781 = @"C_type$decimal.Decimal$next_minus" +ext_rettype(#10781, #10723) +#10782 = @"C_type$decimal.Decimal$next_plus" +ext_rettype(#10782, #10723) +#10783 = @"C_type$decimal.Decimal$normalize" +ext_rettype(#10783, #10723) +#10784 = @"C_type$decimal.Decimal$to_integral" +ext_rettype(#10784, #10723) +#10785 = @"C_type$decimal.Decimal$to_integral_exact" +ext_rettype(#10785, #10723) +#10786 = @"C_type$decimal.Decimal$to_integral_value" +ext_rettype(#10786, #10723) +#10787 = @"C_type$decimal.Decimal$sqrt" +ext_rettype(#10787, #10723) +#10788 = @"C_type$decimal.Decimal$compare" +ext_rettype(#10788, #10723) +#10789 = @"C_type$decimal.Decimal$compare_signal" +ext_rettype(#10789, #10723) +#10790 = @"C_type$decimal.Decimal$max" +ext_rettype(#10790, #10723) +#10791 = @"C_type$decimal.Decimal$max_mag" +ext_rettype(#10791, #10723) +#10792 = @"C_type$decimal.Decimal$min" +ext_rettype(#10792, #10723) +#10793 = @"C_type$decimal.Decimal$min_mag" +ext_rettype(#10793, #10723) +#10794 = @"C_type$decimal.Decimal$next_toward" +ext_rettype(#10794, #10723) +#10795 = @"C_type$decimal.Decimal$quantize" +ext_rettype(#10795, #10723) +#10796 = @"C_type$decimal.Decimal$remainder_near" +ext_rettype(#10796, #10723) +#10797 = @"C_type$decimal.Decimal$fma" +ext_rettype(#10797, #10723) +#10798 = @"C_type$decimal.Decimal$adjusted" +ext_rettype(#10798, #10024) +#10799 = @"C_type$decimal.Decimal$radix" +ext_rettype(#10799, #10723) +#10800 = @"C_type$decimal.Decimal$copy_abs" +ext_rettype(#10800, #10723) +#10801 = @"C_type$decimal.Decimal$copy_negate" +ext_rettype(#10801, #10723) +#10802 = @"C_type$decimal.Decimal$logb" +ext_rettype(#10802, #10723) +#10803 = @"C_type$decimal.Decimal$logical_invert" +ext_rettype(#10803, #10723) +#10804 = @"C_type$decimal.Decimal$compare_total" +ext_rettype(#10804, #10723) +#10805 = @"C_type$decimal.Decimal$compare_total_mag" +ext_rettype(#10805, #10723) +#10806 = @"C_type$decimal.Decimal$copy_sign" +ext_rettype(#10806, #10723) +#10807 = @"C_type$decimal.Decimal$logical_and" +ext_rettype(#10807, #10723) +#10808 = @"C_type$decimal.Decimal$logical_or" +ext_rettype(#10808, #10723) +#10809 = @"C_type$decimal.Decimal$logical_xor" +ext_rettype(#10809, #10723) +#10810 = @"C_type$decimal.Decimal$rotate" +ext_rettype(#10810, #10723) +#10811 = @"C_type$decimal.Decimal$scaleb" +ext_rettype(#10811, #10723) +#10812 = @"C_type$decimal.Decimal$shift" +ext_rettype(#10812, #10723) +#10813 = @"C_type$decimal.Decimal$from_float" +ext_rettype(#10813, #10723) +#10814 = @"C_type$decimal.Decimal$__reduce__" +ext_rettype(#10814, #10037) +#10815 = @"C_type$decimal.Decimal$__round__" +ext_rettype(#10815, #10024) +ext_rettype(#10815, #10723) +#10816 = @"C_type$decimal.Decimal$__ceil__" +ext_rettype(#10816, #10024) +#10817 = @"C_type$decimal.Decimal$__floor__" +ext_rettype(#10817, #10024) +#10818 = @"C_type$decimal.Decimal$__trunc__" +ext_rettype(#10818, #10024) +#10819 = @"C_type$decimal.Decimal$__complex__" +ext_rettype(#10819, #10226) +#10820 = @"C_type$decimal.Decimal$__sizeof__" +ext_rettype(#10820, #10024) +#10821 = @"C_type$decimal.ContextManager$__exit__" +ext_rettype(#10821, #10005) +#10822 = @"C_type$decimal.SignalDictMixin$copy" +ext_rettype(#10822, #10111) +#10823 = @"C_type$zipimport.zipimporter$find_module" +ext_rettype(#10823, #10005) +#10824 = @"C_type$zipimport.zipimporter$find_loader" +ext_rettype(#10824, #10037) +#10825 = @"C_type$zipimport.zipimporter$get_data" +ext_rettype(#10825, #10081) +#10826 = @"C_type$zipimport.zipimporter$get_code" +ext_rettype(#10826, #10024) +ext_rettype(#10826, #10020) +ext_rettype(#10826, #10111) +ext_rettype(#10826, #10001) +ext_rettype(#10826, #10226) +ext_rettype(#10826, #10037) +ext_rettype(#10826, #10028) +ext_rettype(#10826, #10081) +ext_rettype(#10826, #10005) +ext_rettype(#10826, #10050) +#10827 = @"C_type$zipimport.zipimporter$get_source" +ext_rettype(#10827, #10010) +ext_rettype(#10827, #10005) +#10828 = @"C_type$zipimport.zipimporter$is_package" +ext_rettype(#10828, #10050) +#10829 = @"C_type$arrayiterator$33__reduce__" +ext_rettype(#10829, #10037) +#10830 = @"C_type$arrayiterator$3__setstate__" +ext_rettype(#10830, #10005) +#10831 = @"C_type$array.array$append" +ext_rettype(#10831, #10005) +#10832 = @"C_type$array.array$buffer_info" +ext_rettype(#10832, #10037) +#10833 = @"C_type$array.array$byteswap" +ext_rettype(#10833, #10005) +#10834 = @"C_type$array.array$count" +ext_rettype(#10834, #10024) +#10835 = @"C_type$array.array$extend" +ext_rettype(#10835, #10005) +#10836 = @"C_type$array.array$fromfile" +ext_rettype(#10836, #10005) +#10837 = @"C_type$array.array$fromlist" +ext_rettype(#10837, #10005) +#10838 = @"C_type$array.array$fromstring" +ext_rettype(#10838, #10005) +#10839 = @"C_type$array.array$frombytes" +ext_rettype(#10839, #10005) +#10840 = @"C_type$array.array$fromunicode" +ext_rettype(#10840, #10005) +#10841 = @"C_type$array.array$index" +ext_rettype(#10841, #10024) +#10842 = @"C_type$array.array$insert" +ext_rettype(#10842, #10005) +#10843 = @"C_type$array.array$__reduce_ex__" +ext_rettype(#10843, #10037) +#10844 = @"C_type$array.array$remove" +ext_rettype(#10844, #10005) +#10845 = @"C_type$array.array$reverse" +ext_rettype(#10845, #10005) +#10846 = @"C_type$array.array$tofile" +ext_rettype(#10846, #10005) +#10847 = @"C_type$array.array$tolist" +ext_rettype(#10847, #10020) +#10848 = @"C_type$array.array$tostring" +ext_rettype(#10848, #10081) +#10849 = @"C_type$array.array$tobytes" +ext_rettype(#10849, #10081) +#10850 = @"C_type$array.array$tounicode" +ext_rettype(#10850, #10010) +#10851 = @"C_type$array.array$__sizeof__" +ext_rettype(#10851, #10024) +#10852 = @"C_type$MultibyteCodec$3encode" +ext_rettype(#10852, #10037) +#10853 = @"C_type$MultibyteCodec$3decode" +ext_rettype(#10853, #10037) +#10854 = @"C_type$MultibyteIncrementalEncoder$3encode" +ext_rettype(#10854, #10081) +#10855 = @"C_type$MultibyteIncrementalEncoder$3reset" +ext_rettype(#10855, #10005) +#10856 = @"C_type$MultibyteIncrementalDecoder$3reset" +ext_rettype(#10856, #10005) +#10857 = @"C_type$MultibyteStreamReader$3readlines" +ext_rettype(#10857, #10020) +#10858 = @"C_type$MultibyteStreamReader$3reset" +ext_rettype(#10858, #10005) +#10859 = @"C_type$MultibyteStreamWriter$3write" +ext_rettype(#10859, #10005) +#10860 = @"C_type$MultibyteStreamWriter$3writelines" +ext_rettype(#10860, #10005) +#10861 = @"C_type$MultibyteStreamWriter$3reset" +ext_rettype(#10861, #10005) +#10862 = @"C_type$Struct$3pack" +ext_rettype(#10862, #10081) +#10863 = @"C_type$Struct$3pack_into" +ext_rettype(#10863, #10005) +#10864 = @"C_type$Struct$3unpack" +ext_rettype(#10864, #10037) +#10865 = @"C_type$Struct$3unpack_from" +ext_rettype(#10865, #10037) +#10866 = @"C_type$Struct$3__sizeof__" +ext_rettype(#10866, #10024) +#10867 = @"C_type$_ssl._SSLContext$_wrap_socket" +#10868 = @"C_type$_ssl._SSLSocket" +ext_rettype(#10867, #10868) +#10869 = @"C_type$_ssl._SSLContext$set_ciphers" +ext_rettype(#10869, #10005) +#10870 = @"C_type$_ssl._SSLContext$_set_npn_protocols" +ext_rettype(#10870, #10005) +#10871 = @"C_type$_ssl._SSLContext$load_cert_chain" +ext_rettype(#10871, #10005) +#10872 = @"C_type$_ssl._SSLContext$load_dh_params" +ext_rettype(#10872, #10005) +#10873 = @"C_type$_ssl._SSLContext$load_verify_locations" +ext_rettype(#10873, #10005) +#10874 = @"C_type$_ssl._SSLContext$session_stats" +ext_rettype(#10874, #10111) +#10875 = @"C_type$_ssl._SSLContext$set_default_verify_paths" +ext_rettype(#10875, #10005) +#10876 = @"C_type$_ssl._SSLContext$set_ecdh_curve" +ext_rettype(#10876, #10005) +#10877 = @"C_type$_ssl._SSLSocket$do_handshake" +ext_rettype(#10877, #10005) +#10878 = @"C_type$_ssl._SSLSocket$write" +ext_rettype(#10878, #10024) +#10879 = @"C_type$_ssl._SSLSocket$read" +ext_rettype(#10879, #10024) +#10880 = @"C_type$_ssl._SSLSocket$pending" +ext_rettype(#10880, #10024) +#10881 = @"C_type$_ssl._SSLSocket$peer_certificate" +ext_rettype(#10881, #10111) +ext_rettype(#10881, #10081) +ext_rettype(#10881, #10005) +#10882 = @"C_type$_ssl._SSLSocket$cipher" +ext_rettype(#10882, #10037) +ext_rettype(#10882, #10005) +#10883 = @"C_type$_ssl._SSLSocket$selected_npn_protocol" +ext_rettype(#10883, #10010) +ext_rettype(#10883, #10005) +#10884 = @"C_type$_ssl._SSLSocket$compression" +ext_rettype(#10884, #10010) +ext_rettype(#10884, #10005) +#10885 = @"C_type$_ssl._SSLSocket$shutdown" +#10886 = @"C_type$_socket.socket" +ext_rettype(#10885, #10886) +#10887 = @"C_type$_ssl._SSLSocket$tls_unique_cb" +ext_rettype(#10887, #10081) +ext_rettype(#10887, #10005) +#10888 = @"C_type$_thread.lock$acquire_lock" +ext_rettype(#10888, #10050) +#10889 = @"C_type$_thread.lock$acquire" +ext_rettype(#10889, #10050) +#10890 = @"C_type$_thread.lock$release_lock" +ext_rettype(#10890, #10005) +#10891 = @"C_type$_thread.lock$release" +ext_rettype(#10891, #10005) +#10892 = @"C_type$_thread.lock$locked_lock" +ext_rettype(#10892, #10050) +#10893 = @"C_type$_thread.lock$locked" +ext_rettype(#10893, #10050) +#10894 = @"C_type$_thread.lock$__enter__" +ext_rettype(#10894, #10050) +#10895 = @"C_type$_thread.lock$__exit__" +ext_rettype(#10895, #10005) +#10896 = @"C_type$_thread.RLock$acquire" +ext_rettype(#10896, #10050) +#10897 = @"C_type$_thread.RLock$release" +ext_rettype(#10897, #10005) +#10898 = @"C_type$_thread.RLock$_is_owned" +ext_rettype(#10898, #10050) +#10899 = @"C_type$_thread.RLock$_acquire_restore" +ext_rettype(#10899, #10005) +#10900 = @"C_type$_thread.RLock$_release_save" +ext_rettype(#10900, #10037) +#10901 = @"C_type$_thread.RLock$__enter__" +ext_rettype(#10901, #10050) +#10902 = @"C_type$_thread.RLock$__exit__" +ext_rettype(#10902, #10005) +#10903 = @"C_type$_hashlib.HASH$update" +ext_rettype(#10903, #10005) +#10904 = @"C_type$_hashlib.HASH$digest" +ext_rettype(#10904, #10081) +#10905 = @"C_type$_hashlib.HASH$hexdigest" +ext_rettype(#10905, #10010) +#10906 = @"C_type$_hashlib.HASH$copy" +ext_rettype(#10906, #10169) +#10907 = @"C_type$_sha256.sha256$copy" +ext_rettype(#10907, #10189) +ext_rettype(#10907, #10191) +#10908 = @"C_type$_sha256.sha256$digest" +ext_rettype(#10908, #10081) +#10909 = @"C_type$_sha256.sha256$update" +ext_rettype(#10909, #10005) +#10910 = @"C_type$_sha256.sha224$copy" +ext_rettype(#10910, #10189) +ext_rettype(#10910, #10191) +#10911 = @"C_type$_sha256.sha224$digest" +ext_rettype(#10911, #10081) +#10912 = @"C_type$_sha256.sha224$update" +ext_rettype(#10912, #10005) +#10913 = @"C_type$functools.partial$__reduce__" +ext_rettype(#10913, #10037) +#10914 = @"C_type$functools.partial$__setstate__" +ext_rettype(#10914, #10005) +#10915 = @"C_type$_pickle.Pickler$dump" +ext_rettype(#10915, #10005) +#10916 = @"C_type$_pickle.Pickler$clear_memo" +ext_rettype(#10916, #10005) +#10917 = @"C_type$_pickle.PicklerMemoProxy$clear" +ext_rettype(#10917, #10005) +#10918 = @"C_type$_pickle.PicklerMemoProxy$copy" +ext_rettype(#10918, #10111) +#10919 = @"C_type$_pickle.PicklerMemoProxy$__reduce__" +ext_rettype(#10919, #10037) +#10920 = @"C_type$_pickle.UnpicklerMemoProxy$clear" +ext_rettype(#10920, #10005) +#10921 = @"C_type$_pickle.UnpicklerMemoProxy$copy" +ext_rettype(#10921, #10111) +#10922 = @"C_type$_pickle.UnpicklerMemoProxy$__reduce__" +ext_rettype(#10922, #10037) +#10923 = @"C_type$_md5.md5$copy" +ext_rettype(#10923, #10223) +#10924 = @"C_type$_md5.md5$digest" +ext_rettype(#10924, #10081) +#10925 = @"C_type$_md5.md5$update" +ext_rettype(#10925, #10005) +#10926 = @"C_type$_sha1.sha1$copy" +ext_rettype(#10926, #10249) +#10927 = @"C_type$_sha1.sha1$digest" +ext_rettype(#10927, #10081) +#10928 = @"C_type$_sha1.sha1$update" +ext_rettype(#10928, #10005) +#10929 = @"C_type$_sre.SRE_Match$group" +ext_rettype(#10929, #10037) +#10930 = @"C_type$_sre.SRE_Match$start" +ext_rettype(#10930, #10024) +#10931 = @"C_type$_sre.SRE_Match$end" +ext_rettype(#10931, #10024) +#10932 = @"C_type$_sre.SRE_Match$span" +ext_rettype(#10932, #10037) +#10933 = @"C_type$_sre.SRE_Match$groups" +ext_rettype(#10933, #10037) +#10934 = @"C_type$_sre.SRE_Match$groupdict" +ext_rettype(#10934, #10111) +#10935 = @"C_type$_sre.SRE_Scanner$match" +ext_rettype(#10935, #10005) +#10936 = @"C_type$_sre.SRE_Scanner$search" +ext_rettype(#10936, #10005) +#10937 = @"C_type$_sre.SRE_Pattern$match" +ext_rettype(#10937, #10005) +#10938 = @"C_type$_sre.SRE_Pattern$search" +ext_rettype(#10938, #10005) +#10939 = @"C_type$_sre.SRE_Pattern$sub" +ext_rettype(#10939, #10037) +#10940 = @"C_type$_sre.SRE_Pattern$subn" +ext_rettype(#10940, #10037) +#10941 = @"C_type$_sre.SRE_Pattern$split" +ext_rettype(#10941, #10020) +#10942 = @"C_type$_sre.SRE_Pattern$findall" +ext_rettype(#10942, #10020) +#10943 = @"C_type$_sre.SRE_Pattern$finditer" +ext_rettype(#10943, #10667) +#10944 = @"C_type$datetime.timedelta$__reduce__" +ext_rettype(#10944, #10037) +#10945 = @"C_type$datetime.tzinfo$__reduce__" +ext_rettype(#10945, #10037) +#10946 = @"C_type$datetime.datetime$timestamp" +ext_rettype(#10946, #10001) +#10947 = @"C_type$datetime.datetime$utcoffset" +ext_rettype(#10947, #10005) +#10948 = @"C_type$datetime.datetime$tzname" +ext_rettype(#10948, #10005) +#10949 = @"C_type$datetime.datetime$dst" +ext_rettype(#10949, #10005) +#10950 = @"C_type$datetime.datetime$__reduce__" +ext_rettype(#10950, #10037) +#10951 = @"C_type$datetime.time$utcoffset" +ext_rettype(#10951, #10005) +#10952 = @"C_type$datetime.time$tzname" +ext_rettype(#10952, #10005) +#10953 = @"C_type$datetime.time$dst" +ext_rettype(#10953, #10005) +#10954 = @"C_type$datetime.time$__reduce__" +ext_rettype(#10954, #10037) +#10955 = @"C_type$datetime.timezone$dst" +ext_rettype(#10955, #10005) +#10956 = @"C_type$datetime.timezone$__getinitargs__" +ext_rettype(#10956, #10037) +#10957 = @"C_type$datetime.date$isocalendar" +ext_rettype(#10957, #10037) +#10958 = @"C_type$datetime.date$isoweekday" +ext_rettype(#10958, #10024) +#10959 = @"C_type$datetime.date$toordinal" +ext_rettype(#10959, #10024) +#10960 = @"C_type$datetime.date$weekday" +ext_rettype(#10960, #10024) +#10961 = @"C_type$datetime.date$__reduce__" +ext_rettype(#10961, #10037) +#10962 = @"C_type$ndarray$3tolist" +ext_rettype(#10962, #10020) +#10963 = @"C_type$ndarray$3tobytes" +ext_rettype(#10963, #10081) +#10964 = @"C_type$ndarray$3push" +ext_rettype(#10964, #10005) +#10965 = @"C_type$ndarray$3pop" +ext_rettype(#10965, #10005) +#10966 = @"C_type$ndarray$3add_suboffsets" +ext_rettype(#10966, #10005) +#10967 = @"C_type$ndarray$3memoryview_from_buffer" +ext_rettype(#10967, #10407) +#10968 = @"C_type$mmap.mmap$close" +ext_rettype(#10968, #10005) +#10969 = @"C_type$mmap.mmap$find" +ext_rettype(#10969, #10024) +#10970 = @"C_type$mmap.mmap$rfind" +ext_rettype(#10970, #10024) +#10971 = @"C_type$mmap.mmap$flush" +ext_rettype(#10971, #10024) +#10972 = @"C_type$mmap.mmap$move" +ext_rettype(#10972, #10005) +#10973 = @"C_type$mmap.mmap$read" +ext_rettype(#10973, #10081) +#10974 = @"C_type$mmap.mmap$read_byte" +ext_rettype(#10974, #10024) +#10975 = @"C_type$mmap.mmap$readline" +ext_rettype(#10975, #10081) +#10976 = @"C_type$mmap.mmap$resize" +ext_rettype(#10976, #10005) +#10977 = @"C_type$mmap.mmap$seek" +ext_rettype(#10977, #10005) +#10978 = @"C_type$mmap.mmap$size" +ext_rettype(#10978, #10024) +#10979 = @"C_type$mmap.mmap$tell" +ext_rettype(#10979, #10024) +#10980 = @"C_type$mmap.mmap$write" +ext_rettype(#10980, #10005) +#10981 = @"C_type$mmap.mmap$write_byte" +ext_rettype(#10981, #10005) +#10982 = @"C_type$select.poll$register" +ext_rettype(#10982, #10005) +#10983 = @"C_type$select.poll$modify" +ext_rettype(#10983, #10005) +#10984 = @"C_type$select.poll$unregister" +ext_rettype(#10984, #10005) +#10985 = @"C_type$select.poll$poll" +ext_rettype(#10985, #10020) +#10986 = @"C_type$select.epoll$close" +ext_rettype(#10986, #10005) +#10987 = @"C_type$select.epoll$fileno" +ext_rettype(#10987, #10024) +#10988 = @"C_type$select.epoll$modify" +ext_rettype(#10988, #10005) +#10989 = @"C_type$select.epoll$register" +ext_rettype(#10989, #10005) +#10990 = @"C_type$select.epoll$unregister" +ext_rettype(#10990, #10005) +#10991 = @"C_type$select.epoll$poll" +ext_rettype(#10991, #10020) +#10992 = @"C_type$_io.IncrementalNewlineDecoder$getstate" +ext_rettype(#10992, #10037) +#10993 = @"C_type$_io.IncrementalNewlineDecoder$setstate" +ext_rettype(#10993, #10005) +#10994 = @"C_type$_io.IncrementalNewlineDecoder$reset" +ext_rettype(#10994, #10005) +#10995 = @"C_type$_io.TextIOWrapper$write" +ext_rettype(#10995, #10024) +#10996 = @"C_type$_io.TextIOWrapper$close" +ext_rettype(#10996, #10005) +#10997 = @"C_type$_io.TextIOWrapper$tell" +ext_rettype(#10997, #10024) +#10998 = @"C_type$_io.BytesIO$readable" +ext_rettype(#10998, #10050) +#10999 = @"C_type$_io.BytesIO$seekable" +ext_rettype(#10999, #10050) +#11000 = @"C_type$_io.BytesIO$writable" +ext_rettype(#11000, #10050) +#11001 = @"C_type$_io.BytesIO$close" +ext_rettype(#11001, #10005) +#11002 = @"C_type$_io.BytesIO$flush" +ext_rettype(#11002, #10005) +#11003 = @"C_type$_io.BytesIO$isatty" +ext_rettype(#11003, #10050) +#11004 = @"C_type$_io.BytesIO$tell" +ext_rettype(#11004, #10024) +#11005 = @"C_type$_io.BytesIO$write" +ext_rettype(#11005, #10024) +#11006 = @"C_type$_io.BytesIO$writelines" +ext_rettype(#11006, #10005) +#11007 = @"C_type$_io.BytesIO$read1" +ext_rettype(#11007, #10081) +#11008 = @"C_type$_io.BytesIO$readinto" +ext_rettype(#11008, #10024) +#11009 = @"C_type$_io.BytesIO$readline" +ext_rettype(#11009, #10081) +#11010 = @"C_type$_io.BytesIO$readlines" +ext_rettype(#11010, #10020) +#11011 = @"C_type$_io.BytesIO$read" +ext_rettype(#11011, #10081) +#11012 = @"C_type$_io.BytesIO$getbuffer" +ext_rettype(#11012, #10407) +#11013 = @"C_type$_io.BytesIO$getvalue" +ext_rettype(#11013, #10081) +#11014 = @"C_type$_io.BytesIO$seek" +ext_rettype(#11014, #10024) +#11015 = @"C_type$_io.BytesIO$truncate" +ext_rettype(#11015, #10024) +#11016 = @"C_type$_io.BytesIO$__getstate__" +ext_rettype(#11016, #10037) +#11017 = @"C_type$_io.BytesIO$__setstate__" +ext_rettype(#11017, #10005) +#11018 = @"C_type$_io.BytesIO$__sizeof__" +ext_rettype(#11018, #10024) +#11019 = @"C_type$_io._IOBase$flush" +ext_rettype(#11019, #10005) +#11020 = @"C_type$_io._IOBase$close" +ext_rettype(#11020, #10005) +#11021 = @"C_type$_io._IOBase$seekable" +ext_rettype(#11021, #10050) +#11022 = @"C_type$_io._IOBase$readable" +ext_rettype(#11022, #10050) +#11023 = @"C_type$_io._IOBase$writable" +ext_rettype(#11023, #10050) +#11024 = @"C_type$_io._IOBase$_checkClosed" +ext_rettype(#11024, #10005) +#11025 = @"C_type$_io._IOBase$isatty" +ext_rettype(#11025, #10050) +#11026 = @"C_type$_io._IOBase$readline" +ext_rettype(#11026, #10081) +#11027 = @"C_type$_io._IOBase$readlines" +ext_rettype(#11027, #10020) +#11028 = @"C_type$_io._IOBase$writelines" +ext_rettype(#11028, #10005) +#11029 = @"C_type$_io._RawIOBase$read" +ext_rettype(#11029, #10081) +#11030 = @"C_type$_io._RawIOBase$readall" +ext_rettype(#11030, #10081) +#11031 = @"C_type$_io._BufferedIOBase$readinto" +ext_rettype(#11031, #10024) +#11032 = @"C_type$_io.BufferedReader$close" +ext_rettype(#11032, #10005) +#11033 = @"C_type$_io.BufferedReader$_dealloc_warn" +ext_rettype(#11033, #10005) +#11034 = @"C_type$_io.BufferedReader$read" +ext_rettype(#11034, #10081) +ext_rettype(#11034, #10005) +#11035 = @"C_type$_io.BufferedReader$peek" +ext_rettype(#11035, #10081) +ext_rettype(#11035, #10005) +#11036 = @"C_type$_io.BufferedReader$read1" +ext_rettype(#11036, #10081) +#11037 = @"C_type$_io.BufferedReader$readinto" +ext_rettype(#11037, #10024) +ext_rettype(#11037, #10005) +#11038 = @"C_type$_io.BufferedReader$readline" +ext_rettype(#11038, #10081) +#11039 = @"C_type$_io.BufferedReader$seek" +ext_rettype(#11039, #10024) +ext_rettype(#11039, #10005) +#11040 = @"C_type$_io.BufferedReader$tell" +ext_rettype(#11040, #10024) +#11041 = @"C_type$_io.BufferedReader$truncate" +ext_rettype(#11041, #10005) +#11042 = @"C_type$_io.BufferedReader$__sizeof__" +ext_rettype(#11042, #10024) +#11043 = @"C_type$_io.BufferedRandom$close" +ext_rettype(#11043, #10005) +#11044 = @"C_type$_io.BufferedRandom$_dealloc_warn" +ext_rettype(#11044, #10005) +#11045 = @"C_type$_io.BufferedRandom$flush" +ext_rettype(#11045, #10005) +#11046 = @"C_type$_io.BufferedRandom$seek" +ext_rettype(#11046, #10024) +ext_rettype(#11046, #10005) +#11047 = @"C_type$_io.BufferedRandom$tell" +ext_rettype(#11047, #10024) +#11048 = @"C_type$_io.BufferedRandom$truncate" +ext_rettype(#11048, #10005) +#11049 = @"C_type$_io.BufferedRandom$read" +ext_rettype(#11049, #10081) +ext_rettype(#11049, #10005) +#11050 = @"C_type$_io.BufferedRandom$read1" +ext_rettype(#11050, #10081) +#11051 = @"C_type$_io.BufferedRandom$readinto" +ext_rettype(#11051, #10024) +ext_rettype(#11051, #10005) +#11052 = @"C_type$_io.BufferedRandom$readline" +ext_rettype(#11052, #10081) +#11053 = @"C_type$_io.BufferedRandom$peek" +ext_rettype(#11053, #10081) +ext_rettype(#11053, #10005) +#11054 = @"C_type$_io.BufferedRandom$write" +ext_rettype(#11054, #10024) +ext_rettype(#11054, #10005) +#11055 = @"C_type$_io.BufferedRandom$__sizeof__" +ext_rettype(#11055, #10024) +#11056 = @"C_type$_io.BufferedWriter$close" +ext_rettype(#11056, #10005) +#11057 = @"C_type$_io.BufferedWriter$_dealloc_warn" +ext_rettype(#11057, #10005) +#11058 = @"C_type$_io.BufferedWriter$write" +ext_rettype(#11058, #10024) +ext_rettype(#11058, #10005) +#11059 = @"C_type$_io.BufferedWriter$truncate" +ext_rettype(#11059, #10005) +#11060 = @"C_type$_io.BufferedWriter$flush" +ext_rettype(#11060, #10005) +#11061 = @"C_type$_io.BufferedWriter$seek" +ext_rettype(#11061, #10024) +ext_rettype(#11061, #10005) +#11062 = @"C_type$_io.BufferedWriter$tell" +ext_rettype(#11062, #10024) +#11063 = @"C_type$_io.BufferedWriter$__sizeof__" +ext_rettype(#11063, #10024) +#11064 = @"C_type$_io.StringIO$close" +ext_rettype(#11064, #10005) +#11065 = @"C_type$_io.StringIO$tell" +ext_rettype(#11065, #10024) +#11066 = @"C_type$_io.StringIO$truncate" +ext_rettype(#11066, #10024) +#11067 = @"C_type$_io.StringIO$seek" +ext_rettype(#11067, #10024) +#11068 = @"C_type$_io.StringIO$write" +ext_rettype(#11068, #10024) +#11069 = @"C_type$_io.StringIO$seekable" +ext_rettype(#11069, #10050) +#11070 = @"C_type$_io.StringIO$readable" +ext_rettype(#11070, #10050) +#11071 = @"C_type$_io.StringIO$writable" +ext_rettype(#11071, #10050) +#11072 = @"C_type$_io.StringIO$__getstate__" +ext_rettype(#11072, #10037) +#11073 = @"C_type$_io.StringIO$__setstate__" +ext_rettype(#11073, #10005) +#11074 = @"C_type$_io.FileIO$read" +ext_rettype(#11074, #10005) +#11075 = @"C_type$_io.FileIO$readall" +ext_rettype(#11075, #10005) +#11076 = @"C_type$_io.FileIO$readinto" +ext_rettype(#11076, #10024) +ext_rettype(#11076, #10005) +#11077 = @"C_type$_io.FileIO$write" +ext_rettype(#11077, #10024) +ext_rettype(#11077, #10005) +#11078 = @"C_type$_io.FileIO$seek" +ext_rettype(#11078, #10024) +#11079 = @"C_type$_io.FileIO$tell" +ext_rettype(#11079, #10024) +#11080 = @"C_type$_io.FileIO$close" +ext_rettype(#11080, #10005) +#11081 = @"C_type$_io.FileIO$seekable" +ext_rettype(#11081, #10050) +#11082 = @"C_type$_io.FileIO$readable" +ext_rettype(#11082, #10050) +#11083 = @"C_type$_io.FileIO$writable" +ext_rettype(#11083, #10050) +#11084 = @"C_type$_io.FileIO$fileno" +ext_rettype(#11084, #10024) +#11085 = @"C_type$_io.FileIO$isatty" +ext_rettype(#11085, #10050) +#11086 = @"C_type$_io.FileIO$_dealloc_warn" +ext_rettype(#11086, #10005) +#11087 = @"C_type$_sha512.sha512$copy" +ext_rettype(#11087, #10526) +ext_rettype(#11087, #10528) +#11088 = @"C_type$_sha512.sha512$digest" +ext_rettype(#11088, #10081) +#11089 = @"C_type$_sha512.sha512$update" +ext_rettype(#11089, #10005) +#11090 = @"C_type$_sha512.sha384$copy" +ext_rettype(#11090, #10526) +ext_rettype(#11090, #10528) +#11091 = @"C_type$_sha512.sha384$digest" +ext_rettype(#11091, #10081) +#11092 = @"C_type$_sha512.sha384$update" +ext_rettype(#11092, #10005) +#11093 = @"C_type$_lsprof.Profiler$enable" +ext_rettype(#11093, #10005) +#11094 = @"C_type$_lsprof.Profiler$disable" +ext_rettype(#11094, #10005) +#11095 = @"C_type$_lsprof.Profiler$clear" +ext_rettype(#11095, #10005) +#11096 = @"C_type$xml.etree.ElementTree.Element$clear" +ext_rettype(#11096, #10005) +#11097 = @"C_type$xml.etree.ElementTree.Element$set" +ext_rettype(#11097, #10005) +#11098 = @"C_type$xml.etree.ElementTree.Element$find" +ext_rettype(#11098, #10005) +#11099 = @"C_type$xml.etree.ElementTree.Element$findall" +ext_rettype(#11099, #10020) +#11100 = @"C_type$xml.etree.ElementTree.Element$append" +ext_rettype(#11100, #10005) +#11101 = @"C_type$xml.etree.ElementTree.Element$extend" +ext_rettype(#11101, #10005) +#11102 = @"C_type$xml.etree.ElementTree.Element$insert" +ext_rettype(#11102, #10005) +#11103 = @"C_type$xml.etree.ElementTree.Element$remove" +ext_rettype(#11103, #10005) +#11104 = @"C_type$xml.etree.ElementTree.Element$iter" +#11105 = @"C_type$_elementtree._element_iterator" +ext_rettype(#11104, #11105) +#11106 = @"C_type$xml.etree.ElementTree.Element$itertext" +ext_rettype(#11106, #11105) +#11107 = @"C_type$xml.etree.ElementTree.Element$getiterator" +ext_rettype(#11107, #11105) +#11108 = @"C_type$xml.etree.ElementTree.Element$getchildren" +ext_rettype(#11108, #10020) +#11109 = @"C_type$xml.etree.ElementTree.Element$items" +ext_rettype(#11109, #10020) +#11110 = @"C_type$xml.etree.ElementTree.Element$keys" +ext_rettype(#11110, #10020) +#11111 = @"C_type$xml.etree.ElementTree.Element$makeelement" +ext_rettype(#11111, #10531) +#11112 = @"C_type$xml.etree.ElementTree.Element$__copy__" +ext_rettype(#11112, #10531) +#11113 = @"C_type$xml.etree.ElementTree.Element$__deepcopy__" +ext_rettype(#11113, #10531) +#11114 = @"C_type$xml.etree.ElementTree.Element$__sizeof__" +ext_rettype(#11114, #10024) +#11115 = @"C_type$xml.etree.ElementTree.Element$__getstate__" +ext_rettype(#11115, #10111) +#11116 = @"C_type$xml.etree.ElementTree.Element$__setstate__" +ext_rettype(#11116, #10005) +#11117 = @"C_type$xml.etree.ElementTree.TreeBuilder$data" +ext_rettype(#11117, #10005) +#11118 = @"C_type$xml.etree.ElementTree.TreeBuilder$start" +ext_rettype(#11118, #10531) +#11119 = @"C_type$xml.etree.ElementTree.TreeBuilder$close" +ext_rettype(#11119, #10005) +#11120 = @"C_type$xml.etree.ElementTree.XMLParser$feed" +ext_rettype(#11120, #10005) +#11121 = @"C_type$xml.etree.ElementTree.XMLParser$close" +ext_rettype(#11121, #10005) +#11122 = @"C_type$xml.etree.ElementTree.XMLParser$_parse" +ext_rettype(#11122, #10005) +#11123 = @"C_type$xml.etree.ElementTree.XMLParser$_setevents" +ext_rettype(#11123, #10005) +#11124 = @"C_type$xml.etree.ElementTree.XMLParser$doctype" +ext_rettype(#11124, #10005) +#11125 = @"C_type$_ctypes._CData$__reduce__" +ext_rettype(#11125, #10037) +#11126 = @"C_type$_ctypes._CData$__setstate__" +ext_rettype(#11126, #10005) +#11127 = @"C_type$_ctypes.PyCPointerType$from_param" +ext_rettype(#11127, #10542) +#11128 = @"C_type$_ctypes.PyCPointerType$set_type" +ext_rettype(#11128, #10005) +#11129 = @"C_type$_ctypes.PyCSimpleType$from_param" +ext_rettype(#11129, #10542) +#11130 = @"C_type$zlib.Compress$flush" +ext_rettype(#11130, #10081) +#11131 = @"C_type$unicodedata.UCD$decimal" +ext_rettype(#11131, #10024) +#11132 = @"C_type$unicodedata.UCD$digit" +ext_rettype(#11132, #10024) +#11133 = @"C_type$unicodedata.UCD$numeric" +ext_rettype(#11133, #10001) +#11134 = @"C_type$unicodedata.UCD$combining" +ext_rettype(#11134, #10024) +#11135 = @"C_type$unicodedata.UCD$mirrored" +ext_rettype(#11135, #10024) +#11136 = @"C_type$unicodedata.UCD$decomposition" +ext_rettype(#11136, #10010) +#11137 = @"C_type$itertools._grouper$__reduce__" +ext_rettype(#11137, #10037) +#11138 = @"C_type$itertools.groupby$__reduce__" +ext_rettype(#11138, #10037) +#11139 = @"C_type$itertools.groupby$__setstate__" +ext_rettype(#11139, #10005) +#11140 = @"C_type$itertools._tee_dataobject$__reduce__" +ext_rettype(#11140, #10037) +#11141 = @"C_type$itertools._tee$__copy__" +#11142 = @"C_type$itertools._tee" +ext_rettype(#11141, #11142) +#11143 = @"C_type$itertools._tee$__reduce__" +ext_rettype(#11143, #10037) +#11144 = @"C_type$itertools._tee$__setstate__" +ext_rettype(#11144, #10005) +#11145 = @"C_type$itertools.cycle$__reduce__" +ext_rettype(#11145, #10037) +#11146 = @"C_type$itertools.cycle$__setstate__" +ext_rettype(#11146, #10005) +#11147 = @"C_type$itertools.dropwhile$__reduce__" +ext_rettype(#11147, #10037) +#11148 = @"C_type$itertools.dropwhile$__setstate__" +ext_rettype(#11148, #10005) +#11149 = @"C_type$itertools.takewhile$__reduce__" +ext_rettype(#11149, #10037) +#11150 = @"C_type$itertools.takewhile$__setstate__" +ext_rettype(#11150, #10005) +#11151 = @"C_type$itertools.islice$__reduce__" +ext_rettype(#11151, #10037) +#11152 = @"C_type$itertools.islice$__setstate__" +ext_rettype(#11152, #10005) +#11153 = @"C_type$itertools.starmap$__reduce__" +ext_rettype(#11153, #10037) +#11154 = @"C_type$itertools.chain$__reduce__" +ext_rettype(#11154, #10037) +#11155 = @"C_type$itertools.chain$__setstate__" +ext_rettype(#11155, #10005) +#11156 = @"C_type$itertools.product$__reduce__" +ext_rettype(#11156, #10037) +#11157 = @"C_type$itertools.product$__setstate__" +ext_rettype(#11157, #10005) +#11158 = @"C_type$itertools.combinations$__reduce__" +ext_rettype(#11158, #10037) +#11159 = @"C_type$itertools.combinations$__setstate__" +ext_rettype(#11159, #10005) +#11160 = @"C_type$itertools.combinations_with_replacement$__reduce__" +ext_rettype(#11160, #10037) +#11161 = @"C_type$itertools.combinations_with_replacement$__setstate__" +ext_rettype(#11161, #10005) +#11162 = @"C_type$itertools.permutations$__reduce__" +ext_rettype(#11162, #10037) +#11163 = @"C_type$itertools.permutations$__setstate__" +ext_rettype(#11163, #10005) +#11164 = @"C_type$itertools.accumulate$__reduce__" +ext_rettype(#11164, #10037) +#11165 = @"C_type$itertools.accumulate$__setstate__" +ext_rettype(#11165, #10005) +#11166 = @"C_type$itertools.compress$__reduce__" +ext_rettype(#11166, #10037) +#11167 = @"C_type$itertools.filterfalse$__reduce__" +ext_rettype(#11167, #10037) +#11168 = @"C_type$itertools.count$__reduce__" +ext_rettype(#11168, #10037) +#11169 = @"C_type$itertools.repeat$__length_hint__" +ext_rettype(#11169, #10024) +#11170 = @"C_type$itertools.repeat$__reduce__" +ext_rettype(#11170, #10037) +#11171 = @"C_type$itertools.zip_longest$__reduce__" +ext_rettype(#11171, #10037) +#11172 = @"C_type$itertools.zip_longest$__setstate__" +ext_rettype(#11172, #10005) +#11173 = @"C_type$ossaudiodev.oss_audio_device$write" +ext_rettype(#11173, #10024) +#11174 = @"C_type$ossaudiodev.oss_audio_device$writeall" +ext_rettype(#11174, #10005) +#11175 = @"C_type$ossaudiodev.oss_audio_device$close" +ext_rettype(#11175, #10005) +#11176 = @"C_type$ossaudiodev.oss_audio_device$fileno" +ext_rettype(#11176, #10024) +#11177 = @"C_type$ossaudiodev.oss_audio_device$nonblock" +ext_rettype(#11177, #10005) +#11178 = @"C_type$ossaudiodev.oss_audio_device$setfmt" +ext_rettype(#11178, #10024) +#11179 = @"C_type$ossaudiodev.oss_audio_device$getfmts" +ext_rettype(#11179, #10024) +#11180 = @"C_type$ossaudiodev.oss_audio_device$channels" +ext_rettype(#11180, #10024) +#11181 = @"C_type$ossaudiodev.oss_audio_device$speed" +ext_rettype(#11181, #10024) +#11182 = @"C_type$ossaudiodev.oss_audio_device$sync" +ext_rettype(#11182, #10005) +#11183 = @"C_type$ossaudiodev.oss_audio_device$reset" +ext_rettype(#11183, #10005) +#11184 = @"C_type$ossaudiodev.oss_audio_device$post" +ext_rettype(#11184, #10005) +#11185 = @"C_type$ossaudiodev.oss_audio_device$setparameters" +ext_rettype(#11185, #10037) +#11186 = @"C_type$ossaudiodev.oss_audio_device$bufsize" +ext_rettype(#11186, #10024) +#11187 = @"C_type$ossaudiodev.oss_audio_device$obufcount" +ext_rettype(#11187, #10024) +#11188 = @"C_type$ossaudiodev.oss_audio_device$obuffree" +ext_rettype(#11188, #10024) +#11189 = @"C_type$ossaudiodev.oss_audio_device$getptr" +ext_rettype(#11189, #10037) +#11190 = @"C_type$ossaudiodev.oss_audio_device$flush" +ext_rettype(#11190, #10005) +#11191 = @"C_type$ossaudiodev.oss_audio_device$__exit__" +ext_rettype(#11191, #10005) +#11192 = @"C_type$ossaudiodev.oss_mixer_device$close" +ext_rettype(#11192, #10005) +#11193 = @"C_type$ossaudiodev.oss_mixer_device$fileno" +ext_rettype(#11193, #10024) +#11194 = @"C_type$ossaudiodev.oss_mixer_device$__exit__" +ext_rettype(#11194, #10005) +#11195 = @"C_type$ossaudiodev.oss_mixer_device$controls" +ext_rettype(#11195, #10024) +#11196 = @"C_type$ossaudiodev.oss_mixer_device$stereocontrols" +ext_rettype(#11196, #10024) +#11197 = @"C_type$ossaudiodev.oss_mixer_device$reccontrols" +ext_rettype(#11197, #10024) +#11198 = @"C_type$ossaudiodev.oss_mixer_device$get" +ext_rettype(#11198, #10037) +#11199 = @"C_type$ossaudiodev.oss_mixer_device$set" +ext_rettype(#11199, #10037) +#11200 = @"C_type$ossaudiodev.oss_mixer_device$get_recsrc" +ext_rettype(#11200, #10024) +#11201 = @"C_type$ossaudiodev.oss_mixer_device$set_recsrc" +ext_rettype(#11201, #10024) +#11202 = @"C_type$pyexpat.xmlparser$Parse" +ext_rettype(#11202, #10024) +#11203 = @"C_type$pyexpat.xmlparser$ParseFile" +ext_rettype(#11203, #10024) +#11204 = @"C_type$pyexpat.xmlparser$SetBase" +ext_rettype(#11204, #10005) +#11205 = @"C_type$pyexpat.xmlparser$GetBase" +ext_rettype(#11205, #10010) +#11206 = @"C_type$pyexpat.xmlparser$ExternalEntityParserCreate" +ext_rettype(#11206, #10586) +#11207 = @"C_type$pyexpat.xmlparser$SetParamEntityParsing" +ext_rettype(#11207, #10024) +#11208 = @"C_type$pyexpat.xmlparser$GetInputContext" +ext_rettype(#11208, #10081) +ext_rettype(#11208, #10005) +#11209 = @"C_type$pyexpat.xmlparser$UseForeignDTD" +ext_rettype(#11209, #10005) +#11210 = @"C_type$pyexpat.xmlparser$__dir__" +ext_rettype(#11210, #10020) +#11211 = @"C_type$_socket.socket$_accept" +ext_rettype(#11211, #10037) +#11212 = @"C_type$_socket.socket$bind" +ext_rettype(#11212, #10005) +#11213 = @"C_type$_socket.socket$close" +ext_rettype(#11213, #10005) +#11214 = @"C_type$_socket.socket$connect" +ext_rettype(#11214, #10005) +#11215 = @"C_type$_socket.socket$connect_ex" +ext_rettype(#11215, #10024) +#11216 = @"C_type$_socket.socket$detach" +ext_rettype(#11216, #10024) +#11217 = @"C_type$_socket.socket$fileno" +ext_rettype(#11217, #10024) +#11218 = @"C_type$_socket.socket$getpeername" +ext_rettype(#11218, #10037) +ext_rettype(#11218, #10081) +ext_rettype(#11218, #10010) +ext_rettype(#11218, #10005) +#11219 = @"C_type$_socket.socket$getsockname" +ext_rettype(#11219, #10037) +ext_rettype(#11219, #10081) +ext_rettype(#11219, #10010) +ext_rettype(#11219, #10005) +#11220 = @"C_type$_socket.socket$getsockopt" +ext_rettype(#11220, #10024) +#11221 = @"C_type$_socket.socket$listen" +ext_rettype(#11221, #10005) +#11222 = @"C_type$_socket.socket$recv_into" +ext_rettype(#11222, #10024) +#11223 = @"C_type$_socket.socket$recvfrom" +ext_rettype(#11223, #10037) +#11224 = @"C_type$_socket.socket$recvfrom_into" +ext_rettype(#11224, #10037) +#11225 = @"C_type$_socket.socket$send" +ext_rettype(#11225, #10024) +#11226 = @"C_type$_socket.socket$sendall" +ext_rettype(#11226, #10005) +#11227 = @"C_type$_socket.socket$sendto" +ext_rettype(#11227, #10024) +#11228 = @"C_type$_socket.socket$setblocking" +ext_rettype(#11228, #10005) +#11229 = @"C_type$_socket.socket$settimeout" +ext_rettype(#11229, #10005) +#11230 = @"C_type$_socket.socket$gettimeout" +ext_rettype(#11230, #10001) +ext_rettype(#11230, #10005) +#11231 = @"C_type$_socket.socket$setsockopt" +ext_rettype(#11231, #10005) +#11232 = @"C_type$_socket.socket$shutdown" +ext_rettype(#11232, #10005) +#11233 = @"C_type$_socket.socket$recvmsg" +ext_rettype(#11233, #10037) +#11234 = @"C_type$_socket.socket$recvmsg_into" +ext_rettype(#11234, #10037) +#11235 = @"C_type$_socket.socket$sendmsg" +ext_rettype(#11235, #10024) +#11236 = @"C_type$_ast.AST$__reduce__" +ext_rettype(#11236, #10037) +#11237 = @"C_type$traceback$3__dir__" +ext_rettype(#11237, #10037) +#11238 = @"C_type$filter$3__reduce__" +ext_rettype(#11238, #10037) +#11239 = @"C_type$map$3__reduce__" +ext_rettype(#11239, #10037) +#11240 = @"C_type$zip$3__reduce__" +ext_rettype(#11240, #10037) +#11241 = @"C_type$type$3mro" +ext_rettype(#11241, #10037) +#11242 = @"C_type$type$3__subclasses__" +ext_rettype(#11242, #10020) +#11243 = @"C_type$type$3__prepare__" +ext_rettype(#11243, #10111) +#11244 = @"C_type$type$3__instancecheck__" +ext_rettype(#11244, #10050) +#11245 = @"C_type$type$3__subclasscheck__" +ext_rettype(#11245, #10050) +#11246 = @"C_type$type$3__dir__" +ext_rettype(#11246, #10020) +#11247 = @"C_type$type$3__sizeof__" +ext_rettype(#11247, #10024) +#11248 = @"C_type$object$3__reduce_ex__" +ext_rettype(#11248, #10037) +#11249 = @"C_type$object$3__reduce__" +ext_rettype(#11249, #10037) +#11250 = @"C_type$object$3__sizeof__" +ext_rettype(#11250, #10024) +#11251 = @"C_type$object$3__dir__" +ext_rettype(#11251, #10020) +#11252 = @"C_type$dict_keyiterator$3__length_hint__" +ext_rettype(#11252, #10024) +#11253 = @"C_type$dict_keyiterator$3__reduce__" +ext_rettype(#11253, #10037) +#11254 = @"C_type$dict_valueiterator$3__length_hint__" +ext_rettype(#11254, #10024) +#11255 = @"C_type$dict_valueiterator$3__reduce__" +ext_rettype(#11255, #10037) +#11256 = @"C_type$dict_itemiterator$3__length_hint__" +ext_rettype(#11256, #10024) +#11257 = @"C_type$dict_itemiterator$3__reduce__" +ext_rettype(#11257, #10037) +#11258 = @"C_type$dict$3__contains__" +ext_rettype(#11258, #10050) +#11259 = @"C_type$dict$3__sizeof__" +ext_rettype(#11259, #10024) +#11260 = @"C_type$dict$3popitem" +ext_rettype(#11260, #10037) +#11261 = @"C_type$dict$3update" +ext_rettype(#11261, #10005) +#11262 = @"C_type$dict$3clear" +ext_rettype(#11262, #10005) +#11263 = @"C_type$dict$3copy" +ext_rettype(#11263, #10111) +#11264 = @"C_type$dict_items$3isdisjoint" +ext_rettype(#11264, #10050) +#11265 = @"C_type$dict_keys$3isdisjoint" +ext_rettype(#11265, #10050) +#11266 = @"C_type$module$3__dir__" +ext_rettype(#11266, #10020) +#11267 = @"C_type$bytearray_iterator$3__length_hint__" +ext_rettype(#11267, #10024) +#11268 = @"C_type$bytearray_iterator$3__reduce__" +ext_rettype(#11268, #10037) +#11269 = @"C_type$bytearray_iterator$3__setstate__" +ext_rettype(#11269, #10005) +#11270 = @"C_type$bytearray$3__alloc__" +ext_rettype(#11270, #10024) +#11271 = @"C_type$bytearray$3__reduce__" +ext_rettype(#11271, #10037) +#11272 = @"C_type$bytearray$3__reduce_ex__" +ext_rettype(#11272, #10037) +#11273 = @"C_type$bytearray$3__sizeof__" +ext_rettype(#11273, #10024) +#11274 = @"C_type$bytearray$3append" +ext_rettype(#11274, #10005) +#11275 = @"C_type$bytearray$3capitalize" +#11276 = @"C_type$bytearray" +ext_rettype(#11275, #11276) +ext_rettype(#11275, #10081) +#11277 = @"C_type$bytearray$3center" +ext_rettype(#11277, #11276) +ext_rettype(#11277, #10081) +#11278 = @"C_type$bytearray$3clear" +ext_rettype(#11278, #10005) +#11279 = @"C_type$bytearray$3copy" +ext_rettype(#11279, #11276) +#11280 = @"C_type$bytearray$3count" +ext_rettype(#11280, #10024) +#11281 = @"C_type$bytearray$3endswith" +ext_rettype(#11281, #10050) +#11282 = @"C_type$bytearray$3expandtabs" +ext_rettype(#11282, #11276) +ext_rettype(#11282, #10081) +#11283 = @"C_type$bytearray$3extend" +ext_rettype(#11283, #10005) +#11284 = @"C_type$bytearray$3find" +ext_rettype(#11284, #10024) +#11285 = @"C_type$bytearray$3fromhex" +ext_rettype(#11285, #11276) +#11286 = @"C_type$bytearray$3index" +ext_rettype(#11286, #10024) +#11287 = @"C_type$bytearray$3insert" +ext_rettype(#11287, #10005) +#11288 = @"C_type$bytearray$3isalnum" +ext_rettype(#11288, #10050) +#11289 = @"C_type$bytearray$3isalpha" +ext_rettype(#11289, #10050) +#11290 = @"C_type$bytearray$3isdigit" +ext_rettype(#11290, #10050) +#11291 = @"C_type$bytearray$3islower" +ext_rettype(#11291, #10050) +#11292 = @"C_type$bytearray$3isspace" +ext_rettype(#11292, #10050) +#11293 = @"C_type$bytearray$3istitle" +ext_rettype(#11293, #10050) +#11294 = @"C_type$bytearray$3isupper" +ext_rettype(#11294, #10050) +#11295 = @"C_type$bytearray$3join" +ext_rettype(#11295, #11276) +#11296 = @"C_type$bytearray$3ljust" +ext_rettype(#11296, #11276) +ext_rettype(#11296, #10081) +#11297 = @"C_type$bytearray$3lower" +ext_rettype(#11297, #11276) +ext_rettype(#11297, #10081) +#11298 = @"C_type$bytearray$3lstrip" +ext_rettype(#11298, #11276) +#11299 = @"C_type$bytearray$3maketrans" +ext_rettype(#11299, #10081) +#11300 = @"C_type$bytearray$3partition" +ext_rettype(#11300, #10037) +#11301 = @"C_type$bytearray$3pop" +ext_rettype(#11301, #10024) +#11302 = @"C_type$bytearray$3remove" +ext_rettype(#11302, #10005) +#11303 = @"C_type$bytearray$3replace" +ext_rettype(#11303, #11276) +#11304 = @"C_type$bytearray$3reverse" +ext_rettype(#11304, #10005) +#11305 = @"C_type$bytearray$3rfind" +ext_rettype(#11305, #10024) +#11306 = @"C_type$bytearray$3rindex" +ext_rettype(#11306, #10024) +#11307 = @"C_type$bytearray$3rjust" +ext_rettype(#11307, #11276) +ext_rettype(#11307, #10081) +#11308 = @"C_type$bytearray$3rpartition" +ext_rettype(#11308, #10037) +#11309 = @"C_type$bytearray$3rsplit" +ext_rettype(#11309, #10020) +#11310 = @"C_type$bytearray$3rstrip" +ext_rettype(#11310, #11276) +#11311 = @"C_type$bytearray$3split" +ext_rettype(#11311, #10020) +#11312 = @"C_type$bytearray$3splitlines" +ext_rettype(#11312, #10020) +#11313 = @"C_type$bytearray$3startswith" +ext_rettype(#11313, #10050) +#11314 = @"C_type$bytearray$3strip" +ext_rettype(#11314, #11276) +#11315 = @"C_type$bytearray$3swapcase" +ext_rettype(#11315, #11276) +ext_rettype(#11315, #10081) +#11316 = @"C_type$bytearray$3title" +ext_rettype(#11316, #11276) +ext_rettype(#11316, #10081) +#11317 = @"C_type$bytearray$3translate" +ext_rettype(#11317, #11276) +#11318 = @"C_type$bytearray$3upper" +ext_rettype(#11318, #11276) +ext_rettype(#11318, #10081) +#11319 = @"C_type$bytearray$3zfill" +ext_rettype(#11319, #11276) +ext_rettype(#11319, #10081) +#11320 = @"C_type$frame$3__sizeof__" +ext_rettype(#11320, #10024) +#11321 = @"C_type$list_iterator$3__length_hint__" +ext_rettype(#11321, #10024) +#11322 = @"C_type$list_iterator$3__reduce__" +ext_rettype(#11322, #10037) +#11323 = @"C_type$list_iterator$3__setstate__" +ext_rettype(#11323, #10005) +#11324 = @"C_type$list_reverseiterator$3__length_hint__" +ext_rettype(#11324, #10024) +#11325 = @"C_type$list_reverseiterator$3__reduce__" +ext_rettype(#11325, #10037) +#11326 = @"C_type$list_reverseiterator$3__setstate__" +ext_rettype(#11326, #10005) +#11327 = @"C_type$list$3__getitem__" +ext_rettype(#11327, #10020) +#11328 = @"C_type$list$3__reversed__" +#11329 = @"C_type$list_reverseiterator" +ext_rettype(#11328, #11329) +#11330 = @"C_type$list$3__sizeof__" +ext_rettype(#11330, #10024) +#11331 = @"C_type$list$3clear" +ext_rettype(#11331, #10005) +#11332 = @"C_type$list$3copy" +ext_rettype(#11332, #10020) +#11333 = @"C_type$list$3append" +ext_rettype(#11333, #10005) +#11334 = @"C_type$list$3insert" +ext_rettype(#11334, #10005) +#11335 = @"C_type$list$3extend" +ext_rettype(#11335, #10005) +#11336 = @"C_type$list$3remove" +ext_rettype(#11336, #10005) +#11337 = @"C_type$list$3index" +ext_rettype(#11337, #10024) +#11338 = @"C_type$list$3count" +ext_rettype(#11338, #10024) +#11339 = @"C_type$list$3reverse" +ext_rettype(#11339, #10005) +#11340 = @"C_type$list$3sort" +ext_rettype(#11340, #10005) +#11341 = @"C_type$int$3conjugate" +ext_rettype(#11341, #10024) +#11342 = @"C_type$int$3bit_length" +ext_rettype(#11342, #10024) +#11343 = @"C_type$int$3to_bytes" +ext_rettype(#11343, #10081) +#11344 = @"C_type$int$3from_bytes" +ext_rettype(#11344, #10024) +#11345 = @"C_type$int$3__trunc__" +ext_rettype(#11345, #10024) +#11346 = @"C_type$int$3__floor__" +ext_rettype(#11346, #10024) +#11347 = @"C_type$int$3__ceil__" +ext_rettype(#11347, #10024) +#11348 = @"C_type$int$3__round__" +ext_rettype(#11348, #10024) +#11349 = @"C_type$int$3__getnewargs__" +ext_rettype(#11349, #10037) +#11350 = @"C_type$int$3__sizeof__" +ext_rettype(#11350, #10024) +#11351 = @"C_type$generator$3close" +ext_rettype(#11351, #10005) +#11352 = @"C_type$stderrprinter$3close" +ext_rettype(#11352, #10005) +#11353 = @"C_type$stderrprinter$3flush" +ext_rettype(#11353, #10005) +#11354 = @"C_type$stderrprinter$3fileno" +ext_rettype(#11354, #10024) +#11355 = @"C_type$stderrprinter$3isatty" +ext_rettype(#11355, #10050) +#11356 = @"C_type$stderrprinter$3write" +ext_rettype(#11356, #10024) +ext_rettype(#11356, #10005) +#11357 = @"C_type$slice$3indices" +ext_rettype(#11357, #10037) +#11358 = @"C_type$slice$3__reduce__" +ext_rettype(#11358, #10037) +#11359 = @"C_type$BaseException$3__reduce__" +ext_rettype(#11359, #10037) +#11360 = @"C_type$BaseException$3__setstate__" +ext_rettype(#11360, #10005) +#11361 = @"C_type$OSError$3__reduce__" +ext_rettype(#11361, #10037) +#11362 = @"C_type$float$3conjugate" +ext_rettype(#11362, #10001) +#11363 = @"C_type$float$3__trunc__" +ext_rettype(#11363, #10024) +#11364 = @"C_type$float$3__round__" +ext_rettype(#11364, #10024) +ext_rettype(#11364, #10001) +#11365 = @"C_type$float$3as_integer_ratio" +ext_rettype(#11365, #10037) +#11366 = @"C_type$float$3is_integer" +ext_rettype(#11366, #10050) +#11367 = @"C_type$float$3__getnewargs__" +ext_rettype(#11367, #10037) +#11368 = @"C_type$float$3__setformat__" +ext_rettype(#11368, #10005) +#11369 = @"C_type$bytes_iterator$3__length_hint__" +ext_rettype(#11369, #10024) +#11370 = @"C_type$bytes_iterator$3__reduce__" +ext_rettype(#11370, #10037) +#11371 = @"C_type$bytes_iterator$3__setstate__" +ext_rettype(#11371, #10005) +#11372 = @"C_type$bytes$3__getnewargs__" +ext_rettype(#11372, #10037) +#11373 = @"C_type$bytes$3capitalize" +ext_rettype(#11373, #11276) +ext_rettype(#11373, #10081) +#11374 = @"C_type$bytes$3center" +ext_rettype(#11374, #11276) +ext_rettype(#11374, #10081) +#11375 = @"C_type$bytes$3count" +ext_rettype(#11375, #10024) +#11376 = @"C_type$bytes$3endswith" +ext_rettype(#11376, #10050) +#11377 = @"C_type$bytes$3expandtabs" +ext_rettype(#11377, #11276) +ext_rettype(#11377, #10081) +#11378 = @"C_type$bytes$3find" +ext_rettype(#11378, #10024) +#11379 = @"C_type$bytes$3index" +ext_rettype(#11379, #10024) +#11380 = @"C_type$bytes$3isalnum" +ext_rettype(#11380, #10050) +#11381 = @"C_type$bytes$3isalpha" +ext_rettype(#11381, #10050) +#11382 = @"C_type$bytes$3isdigit" +ext_rettype(#11382, #10050) +#11383 = @"C_type$bytes$3islower" +ext_rettype(#11383, #10050) +#11384 = @"C_type$bytes$3isspace" +ext_rettype(#11384, #10050) +#11385 = @"C_type$bytes$3istitle" +ext_rettype(#11385, #10050) +#11386 = @"C_type$bytes$3isupper" +ext_rettype(#11386, #10050) +#11387 = @"C_type$bytes$3join" +ext_rettype(#11387, #10081) +#11388 = @"C_type$bytes$3ljust" +ext_rettype(#11388, #11276) +ext_rettype(#11388, #10081) +#11389 = @"C_type$bytes$3lower" +ext_rettype(#11389, #11276) +ext_rettype(#11389, #10081) +#11390 = @"C_type$bytes$3lstrip" +ext_rettype(#11390, #10081) +#11391 = @"C_type$bytes$3maketrans" +ext_rettype(#11391, #10081) +#11392 = @"C_type$bytes$3partition" +ext_rettype(#11392, #10037) +#11393 = @"C_type$bytes$3replace" +ext_rettype(#11393, #10081) +#11394 = @"C_type$bytes$3rfind" +ext_rettype(#11394, #10024) +#11395 = @"C_type$bytes$3rindex" +ext_rettype(#11395, #10024) +#11396 = @"C_type$bytes$3rjust" +ext_rettype(#11396, #11276) +ext_rettype(#11396, #10081) +#11397 = @"C_type$bytes$3rpartition" +ext_rettype(#11397, #10037) +#11398 = @"C_type$bytes$3rsplit" +ext_rettype(#11398, #10020) +#11399 = @"C_type$bytes$3rstrip" +ext_rettype(#11399, #10081) +#11400 = @"C_type$bytes$3split" +ext_rettype(#11400, #10020) +#11401 = @"C_type$bytes$3splitlines" +ext_rettype(#11401, #10020) +#11402 = @"C_type$bytes$3startswith" +ext_rettype(#11402, #10050) +#11403 = @"C_type$bytes$3strip" +ext_rettype(#11403, #10081) +#11404 = @"C_type$bytes$3swapcase" +ext_rettype(#11404, #11276) +ext_rettype(#11404, #10081) +#11405 = @"C_type$bytes$3title" +ext_rettype(#11405, #11276) +ext_rettype(#11405, #10081) +#11406 = @"C_type$bytes$3translate" +ext_rettype(#11406, #10081) +#11407 = @"C_type$bytes$3upper" +ext_rettype(#11407, #11276) +ext_rettype(#11407, #10081) +#11408 = @"C_type$bytes$3zfill" +ext_rettype(#11408, #11276) +ext_rettype(#11408, #10081) +#11409 = @"C_type$bytes$3__sizeof__" +ext_rettype(#11409, #10024) +#11410 = @"C_type$set_iterator$3__length_hint__" +ext_rettype(#11410, #10024) +#11411 = @"C_type$set_iterator$3__reduce__" +ext_rettype(#11411, #10037) +#11412 = @"C_type$frozenset$3__contains__" +ext_rettype(#11412, #10050) +#11413 = @"C_type$frozenset$3copy" +ext_rettype(#11413, #10073) +ext_rettype(#11413, #10074) +#11414 = @"C_type$frozenset$3difference" +ext_rettype(#11414, #10073) +ext_rettype(#11414, #10074) +#11415 = @"C_type$frozenset$3intersection" +ext_rettype(#11415, #10073) +ext_rettype(#11415, #10074) +#11416 = @"C_type$frozenset$3isdisjoint" +ext_rettype(#11416, #10050) +#11417 = @"C_type$frozenset$3issubset" +ext_rettype(#11417, #10050) +#11418 = @"C_type$frozenset$3issuperset" +ext_rettype(#11418, #10050) +#11419 = @"C_type$frozenset$3__reduce__" +ext_rettype(#11419, #10037) +#11420 = @"C_type$frozenset$3__sizeof__" +ext_rettype(#11420, #10024) +#11421 = @"C_type$frozenset$3symmetric_difference" +ext_rettype(#11421, #10073) +ext_rettype(#11421, #10074) +#11422 = @"C_type$frozenset$3union" +ext_rettype(#11422, #10073) +ext_rettype(#11422, #10074) +#11423 = @"C_type$set$3add" +ext_rettype(#11423, #10005) +#11424 = @"C_type$set$3clear" +ext_rettype(#11424, #10005) +#11425 = @"C_type$set$3__contains__" +ext_rettype(#11425, #10050) +#11426 = @"C_type$set$3copy" +ext_rettype(#11426, #10073) +ext_rettype(#11426, #10074) +#11427 = @"C_type$set$3discard" +ext_rettype(#11427, #10005) +#11428 = @"C_type$set$3difference" +ext_rettype(#11428, #10073) +ext_rettype(#11428, #10074) +#11429 = @"C_type$set$3difference_update" +ext_rettype(#11429, #10005) +#11430 = @"C_type$set$3intersection" +ext_rettype(#11430, #10073) +ext_rettype(#11430, #10074) +#11431 = @"C_type$set$3intersection_update" +ext_rettype(#11431, #10005) +#11432 = @"C_type$set$3isdisjoint" +ext_rettype(#11432, #10050) +#11433 = @"C_type$set$3issubset" +ext_rettype(#11433, #10050) +#11434 = @"C_type$set$3issuperset" +ext_rettype(#11434, #10050) +#11435 = @"C_type$set$3__reduce__" +ext_rettype(#11435, #10037) +#11436 = @"C_type$set$3remove" +ext_rettype(#11436, #10005) +#11437 = @"C_type$set$3__sizeof__" +ext_rettype(#11437, #10024) +#11438 = @"C_type$set$3symmetric_difference" +ext_rettype(#11438, #10073) +ext_rettype(#11438, #10074) +#11439 = @"C_type$set$3symmetric_difference_update" +ext_rettype(#11439, #10005) +#11440 = @"C_type$set$3union" +ext_rettype(#11440, #10073) +ext_rettype(#11440, #10074) +#11441 = @"C_type$set$3update" +ext_rettype(#11441, #10005) +#11442 = @"C_type$code$3__sizeof__" +ext_rettype(#11442, #10024) +#11443 = @"C_type$tuple_iterator$3__length_hint__" +ext_rettype(#11443, #10024) +#11444 = @"C_type$tuple_iterator$3__reduce__" +ext_rettype(#11444, #10037) +#11445 = @"C_type$tuple_iterator$3__setstate__" +ext_rettype(#11445, #10005) +#11446 = @"C_type$tuple$3__getnewargs__" +ext_rettype(#11446, #10037) +#11447 = @"C_type$tuple$3__sizeof__" +ext_rettype(#11447, #10024) +#11448 = @"C_type$tuple$3index" +ext_rettype(#11448, #10024) +#11449 = @"C_type$tuple$3count" +ext_rettype(#11449, #10024) +#11450 = @"C_type$iterator$3__length_hint__" +ext_rettype(#11450, #10024) +#11451 = @"C_type$iterator$3__reduce__" +ext_rettype(#11451, #10037) +#11452 = @"C_type$iterator$3__setstate__" +ext_rettype(#11452, #10005) +#11453 = @"C_type$callable_iterator$3__reduce__" +ext_rettype(#11453, #10037) +#11454 = @"C_type$str_iterator$3__length_hint__" +ext_rettype(#11454, #10024) +#11455 = @"C_type$str_iterator$3__reduce__" +ext_rettype(#11455, #10037) +#11456 = @"C_type$str_iterator$3__setstate__" +ext_rettype(#11456, #10005) +#11457 = @"C_type$str$3encode" +ext_rettype(#11457, #10081) +#11458 = @"C_type$str$3split" +ext_rettype(#11458, #10020) +#11459 = @"C_type$str$3rsplit" +ext_rettype(#11459, #10020) +#11460 = @"C_type$str$3count" +ext_rettype(#11460, #10024) +#11461 = @"C_type$str$3find" +ext_rettype(#11461, #10024) +#11462 = @"C_type$str$3partition" +ext_rettype(#11462, #10037) +#11463 = @"C_type$str$3index" +ext_rettype(#11463, #10024) +#11464 = @"C_type$str$3rfind" +ext_rettype(#11464, #10024) +#11465 = @"C_type$str$3rindex" +ext_rettype(#11465, #10024) +#11466 = @"C_type$str$3rpartition" +ext_rettype(#11466, #10037) +#11467 = @"C_type$str$3splitlines" +ext_rettype(#11467, #10020) +#11468 = @"C_type$str$3startswith" +ext_rettype(#11468, #10050) +#11469 = @"C_type$str$3endswith" +ext_rettype(#11469, #10050) +#11470 = @"C_type$str$3islower" +ext_rettype(#11470, #10050) +#11471 = @"C_type$str$3isupper" +ext_rettype(#11471, #10050) +#11472 = @"C_type$str$3istitle" +ext_rettype(#11472, #10050) +#11473 = @"C_type$str$3isspace" +ext_rettype(#11473, #10050) +#11474 = @"C_type$str$3isdecimal" +ext_rettype(#11474, #10050) +#11475 = @"C_type$str$3isdigit" +ext_rettype(#11475, #10050) +#11476 = @"C_type$str$3isnumeric" +ext_rettype(#11476, #10050) +#11477 = @"C_type$str$3isalpha" +ext_rettype(#11477, #10050) +#11478 = @"C_type$str$3isalnum" +ext_rettype(#11478, #10050) +#11479 = @"C_type$str$3isidentifier" +ext_rettype(#11479, #10050) +#11480 = @"C_type$str$3isprintable" +ext_rettype(#11480, #10050) +#11481 = @"C_type$str$3maketrans" +ext_rettype(#11481, #10111) +#11482 = @"C_type$str$3__sizeof__" +ext_rettype(#11482, #10024) +#11483 = @"C_type$str$3__getnewargs__" +ext_rettype(#11483, #10037) +#11484 = @"C_type$EncodingMap$3size" +ext_rettype(#11484, #10024) +#11485 = @"C_type$range_iterator$3__length_hint__" +ext_rettype(#11485, #10024) +#11486 = @"C_type$range_iterator$3__reduce__" +ext_rettype(#11486, #10037) +#11487 = @"C_type$range_iterator$3__setstate__" +ext_rettype(#11487, #10005) +#11488 = @"C_type$longrange_iterator$3__reduce__" +ext_rettype(#11488, #10037) +#11489 = @"C_type$longrange_iterator$3__setstate__" +ext_rettype(#11489, #10005) +#11490 = @"C_type$range$3__reversed__" +#11491 = @"C_type$range_iterator" +ext_rettype(#11490, #11491) +#11492 = @"C_type$longrange_iterator" +ext_rettype(#11490, #11492) +#11493 = @"C_type$range$3__reduce__" +ext_rettype(#11493, #10037) +#11494 = @"C_type$range$3count" +ext_rettype(#11494, #10024) +#11495 = @"C_type$range$3index" +ext_rettype(#11495, #10024) +#11496 = @"C_type$complex$3conjugate" +ext_rettype(#11496, #10226) +#11497 = @"C_type$complex$3__getnewargs__" +ext_rettype(#11497, #10037) +#11498 = @"C_type$memoryview$3release" +ext_rettype(#11498, #10005) +#11499 = @"C_type$memoryview$3tobytes" +ext_rettype(#11499, #10081) +#11500 = @"C_type$memoryview$3tolist" +ext_rettype(#11500, #10024) +ext_rettype(#11500, #10020) +ext_rettype(#11500, #10001) +ext_rettype(#11500, #10081) +ext_rettype(#11500, #10050) +#11501 = @"C_type$memoryview$3cast" +ext_rettype(#11501, #10407) +#11502 = @"C_type$memoryview$3__exit__" +ext_rettype(#11502, #10005) +#11503 = @"C_type$enumerate$3__reduce__" +ext_rettype(#11503, #10037) +#11504 = @"C_type$reversed$3__length_hint__" +ext_rettype(#11504, #10024) +#11505 = @"C_type$reversed$3__reduce__" +ext_rettype(#11505, #10037) +#11506 = @"C_type$reversed$3__setstate__" +ext_rettype(#11506, #10005) +ext_argtype(#10003, 0, #10024) +ext_argtype(#10004, 0, #10024) +#11507 = @"C_type$object" +ext_argtype(#10004, 1, #11507) +ext_argtype(#10006, 0, #10024) +ext_argtype(#10007, 0, #10001) +ext_argtype(#10008, 0, #11507) +ext_argtype(#10009, 1, #11507) +#11508 = @"C_builtin_function_or_method$time.get_clock_info" +ext_argtype(#11508, 0, #10010) +ext_argtype(#10022, 0, #11507) +#11509 = @"C_builtin_function_or_method$_csv.get_dialect" +ext_argtype(#11509, 0, #11507) +ext_argtype(#10025, 0, #11507) +ext_argtype(#10025, 1, #10010) +ext_argtype(#10025, 2, #10024) +ext_argtype(#10032, 0, #11507) +ext_argtype(#10035, 0, #11507) +ext_argtype(#10036, 0, #10030) +ext_argtype(#10040, 0, #11507) +ext_argtype(#10041, 0, #11507) +ext_argtype(#10043, 0, #11507) +ext_argtype(#10044, 0, #11507) +ext_argtype(#10051, 0, #10024) +ext_argtype(#10054, 0, #10024) +ext_argtype(#10054, 1, #10024) +ext_argtype(#10054, 2, #10024) +ext_argtype(#10056, 0, #10024) +ext_argtype(#10058, 0, #11507) +#11510 = @"C_builtin_function_or_method$_codecs_jp.getcodec" +ext_argtype(#11510, 0, #11507) +#11511 = @"C_builtin_function_or_method$_codecs_tw.getcodec" +ext_argtype(#11511, 0, #11507) +#11512 = @"C_builtin_function_or_method$_codecs_hk.getcodec" +ext_argtype(#11512, 0, #11507) +#11513 = @"C_builtin_function_or_method$_codecs_iso2022.getcodec" +ext_argtype(#11513, 0, #11507) +#11514 = @"C_builtin_function_or_method$_codecs_kr.getcodec" +ext_argtype(#11514, 0, #11507) +#11515 = @"C_builtin_function_or_method$_codecs_cn.getcodec" +ext_argtype(#11515, 0, #11507) +ext_argtype(#10061, 0, #11507) +ext_argtype(#10063, 0, #10024) +ext_argtype(#10064, 0, #10024) +ext_argtype(#10064, 1, #10001) +ext_argtype(#10064, 2, #10001) +ext_argtype(#10065, 0, #10024) +ext_argtype(#10066, 0, #10024) +ext_argtype(#10066, 1, #11507) +ext_argtype(#10067, 0, #10024) +ext_argtype(#10068, 0, #10024) +ext_argtype(#10069, 0, #10024) +ext_argtype(#10069, 1, #10024) +ext_argtype(#10071, 0, #10024) +ext_argtype(#10071, 1, #10024) +ext_argtype(#10072, 0, #10024) +ext_argtype(#10072, 1, #11507) +ext_argtype(#10076, 0, #11507) +#11516 = @"C_builtin_function_or_method$signal.sigwaitinfo" +ext_argtype(#11516, 0, #11507) +ext_argtype(#10077, 0, #11507) +ext_argtype(#10077, 1, #11507) +ext_argtype(#10079, 0, #11507) +ext_argtype(#10110, 0, #11507) +ext_argtype(#10112, 0, #10010) +ext_argtype(#10112, 1, #10001) +ext_argtype(#10113, 0, #10024) +ext_argtype(#10114, 0, #10024) +ext_argtype(#10115, 0, #11507) +ext_argtype(#10129, 0, #10024) +ext_argtype(#10130, 0, #11507) +ext_argtype(#10167, 0, #10024) +ext_argtype(#10167, 1, #10024) +ext_argtype(#10176, 0, #11507) +ext_argtype(#10177, 0, #11507) +ext_argtype(#10177, 1, #10024) +ext_argtype(#10177, 2, #11507) +ext_argtype(#10178, 0, #11507) +ext_argtype(#10178, 1, #10024) +ext_argtype(#10179, 0, #11507) +ext_argtype(#10180, 0, #11507) +ext_argtype(#10180, 1, #10024) +ext_argtype(#10181, 0, #11507) +ext_argtype(#10181, 1, #10024) +ext_argtype(#10188, 0, #11507) +ext_argtype(#10190, 0, #11507) +ext_argtype(#10192, 0, #11507) +ext_argtype(#10192, 1, #10024) +ext_argtype(#10195, 0, #11507) +ext_argtype(#10195, 1, #10024) +ext_argtype(#10196, 0, #10001) +ext_argtype(#10196, 1, #10024) +ext_argtype(#10196, 2, #11507) +ext_argtype(#10196, 3, #10024) +ext_argtype(#10198, 0, #10024) +ext_argtype(#10198, 1, #11507) +ext_argtype(#10198, 2, #10024) +ext_argtype(#10198, 3, #10024) +ext_argtype(#10199, 0, #10024) +ext_argtype(#10200, 0, #10024) +ext_argtype(#10206, 0, #10081) +ext_argtype(#10207, 0, #11507) +#11517 = @"C_builtin_function_or_method$grp.getgrgid" +ext_argtype(#11517, 0, #11507) +ext_argtype(#10221, 0, #11507) +ext_argtype(#10221, 1, #11507) +ext_argtype(#10221, 2, #11507) +ext_argtype(#10221, 3, #11507) +#11518 = @"C_builtin_function_or_method$_pickle.dumps" +ext_argtype(#11518, 0, #11507) +ext_argtype(#11518, 1, #11507) +ext_argtype(#11518, 2, #11507) +#11519 = @"C_builtin_function_or_method$_pickle.load" +ext_argtype(#11519, 0, #11507) +ext_argtype(#11519, 1, #11507) +ext_argtype(#11519, 2, #10010) +ext_argtype(#11519, 3, #10010) +#11520 = @"C_builtin_function_or_method$_pickle.loads" +ext_argtype(#11520, 0, #11507) +ext_argtype(#11520, 1, #11507) +ext_argtype(#11520, 2, #10010) +ext_argtype(#11520, 3, #10010) +ext_argtype(#10222, 0, #11507) +ext_argtype(#10224, 0, #10010) +ext_argtype(#10224, 1, #10010) +ext_argtype(#10235, 0, #10226) +ext_argtype(#10236, 0, #10226) +ext_argtype(#10237, 0, #10226) +ext_argtype(#10238, 0, #10226) +ext_argtype(#10238, 1, #10226) +ext_argtype(#10240, 0, #10226) +ext_argtype(#10241, 0, #10226) +ext_argtype(#10242, 0, #10001) +ext_argtype(#10242, 1, #10001) +ext_argtype(#10248, 0, #11507) +ext_argtype(#10252, 1, #10024) +ext_argtype(#10252, 2, #10024) +ext_argtype(#10255, 0, #10024) +ext_argtype(#10256, 0, #10024) +ext_argtype(#10257, 0, #10024) +ext_argtype(#10328, 0, #11507) +ext_argtype(#10357, 0, #11507) +ext_argtype(#10370, 0, #11507) +ext_argtype(#10371, 0, #11507) +ext_argtype(#10373, 0, #11507) +ext_argtype(#10396, 0, #11507) +ext_argtype(#10398, 0, #11507) +ext_argtype(#10398, 1, #11507) +ext_argtype(#10398, 2, #11507) +ext_argtype(#10398, 3, #11507) +ext_argtype(#10398, 4, #11507) +ext_argtype(#10398, 5, #11507) +ext_argtype(#10398, 6, #10024) +ext_argtype(#10398, 7, #10024) +ext_argtype(#10398, 8, #10024) +ext_argtype(#10398, 9, #10024) +ext_argtype(#10398, 10, #10024) +ext_argtype(#10398, 11, #10024) +ext_argtype(#10398, 12, #10024) +ext_argtype(#10398, 13, #10024) +ext_argtype(#10398, 14, #10024) +ext_argtype(#10398, 15, #10024) +ext_argtype(#10398, 16, #11507) +#11521 = @"C_builtin_function_or_method$_heapq.heappop" +ext_argtype(#11521, 0, #11507) +ext_argtype(#10401, 0, #11507) +ext_argtype(#10402, 0, #10024) +ext_argtype(#10402, 1, #11507) +ext_argtype(#10403, 0, #10024) +ext_argtype(#10403, 1, #11507) +ext_argtype(#10412, 0, #11507) +#11522 = @"C_builtin_function_or_method$operator.index" +ext_argtype(#11522, 0, #11507) +#11523 = @"C_builtin_function_or_method$operator.__index__" +ext_argtype(#11523, 0, #11507) +#11524 = @"C_builtin_function_or_method$operator.neg" +ext_argtype(#11524, 0, #11507) +#11525 = @"C_builtin_function_or_method$operator.__neg__" +ext_argtype(#11525, 0, #11507) +#11526 = @"C_builtin_function_or_method$operator.pos" +ext_argtype(#11526, 0, #11507) +#11527 = @"C_builtin_function_or_method$operator.__pos__" +ext_argtype(#11527, 0, #11507) +#11528 = @"C_builtin_function_or_method$operator.abs" +ext_argtype(#11528, 0, #11507) +#11529 = @"C_builtin_function_or_method$operator.__abs__" +ext_argtype(#11529, 0, #11507) +#11530 = @"C_builtin_function_or_method$operator.inv" +ext_argtype(#11530, 0, #11507) +#11531 = @"C_builtin_function_or_method$operator.__inv__" +ext_argtype(#11531, 0, #11507) +#11532 = @"C_builtin_function_or_method$operator.invert" +ext_argtype(#11532, 0, #11507) +#11533 = @"C_builtin_function_or_method$operator.__invert__" +ext_argtype(#11533, 0, #11507) +ext_argtype(#10417, 0, #11507) +ext_argtype(#10418, 0, #11507) +ext_argtype(#10423, 0, #11507) +ext_argtype(#10423, 1, #11507) +ext_argtype(#10424, 1, #10010) +ext_argtype(#10424, 2, #10010) +ext_argtype(#10425, 0, #10010) +ext_argtype(#10425, 1, #10010) +ext_argtype(#10426, 0, #10010) +ext_argtype(#10428, 0, #10010) +ext_argtype(#10429, 0, #10010) +ext_argtype(#10431, 0, #11507) +ext_argtype(#10432, 0, #11507) +ext_argtype(#10433, 0, #11507) +ext_argtype(#10434, 0, #10024) +ext_argtype(#10436, 0, #10024) +ext_argtype(#10441, 0, #10010) +ext_argtype(#10442, 0, #10010) +ext_argtype(#10443, 0, #10024) +ext_argtype(#10444, 0, #10024) +ext_argtype(#10444, 1, #10010) +ext_argtype(#10523, 0, #11507) +#11534 = @"C_builtin_function_or_method$_json.encode_basestring_ascii" +ext_argtype(#11534, 0, #11507) +ext_argtype(#10524, 0, #11507) +ext_argtype(#10524, 1, #11507) +ext_argtype(#10524, 2, #10024) +ext_argtype(#10525, 0, #11507) +ext_argtype(#10527, 0, #11507) +ext_argtype(#10530, 0, #10531) +ext_argtype(#10530, 1, #11507) +ext_argtype(#10530, 2, #10111) +#11535 = @"C_builtin_function_or_method$_ctypes.POINTER" +ext_argtype(#11535, 0, #11507) +#11536 = @"C_builtin_function_or_method$_ctypes.pointer" +ext_argtype(#11536, 0, #11507) +#11537 = @"C_builtin_function_or_method$_ctypes._unpickle" +ext_argtype(#11537, 0, #11507) +ext_argtype(#11537, 1, #11507) +ext_argtype(#10534, 0, #11507) +ext_argtype(#10535, 0, #11507) +ext_argtype(#10535, 1, #10024) +ext_argtype(#10536, 0, #11507) +ext_argtype(#10536, 1, #10024) +ext_argtype(#10537, 0, #11507) +ext_argtype(#10538, 0, #11507) +ext_argtype(#10538, 1, #10010) +ext_argtype(#10539, 0, #11507) +ext_argtype(#10540, 0, #11507) +ext_argtype(#10543, 0, #11507) +ext_argtype(#10544, 0, #11507) +ext_argtype(#10544, 1, #10037) +ext_argtype(#10545, 0, #11507) +ext_argtype(#10545, 1, #10037) +#11538 = @"C_builtin_function_or_method$_ctypes.PyObj_FromPtr" +ext_argtype(#11538, 0, #11507) +#11539 = @"C_builtin_function_or_method$_ctypes.Py_INCREF" +ext_argtype(#11539, 0, #11507) +#11540 = @"C_builtin_function_or_method$_ctypes.Py_DECREF" +ext_argtype(#11540, 0, #11507) +ext_argtype(#10546, 0, #10010) +ext_argtype(#10546, 1, #10024) +#11541 = @"C_builtin_function_or_method$pwd.getpwuid" +ext_argtype(#11541, 0, #11507) +#11542 = @"C_builtin_function_or_method$_symtable.symtable" +ext_argtype(#11542, 0, #10010) +ext_argtype(#11542, 1, #10010) +ext_argtype(#11542, 2, #10010) +ext_argtype(#10549, 0, #11276) +ext_argtype(#10549, 0, #10081) +ext_argtype(#10549, 1, #10024) +ext_argtype(#10550, 0, #11276) +ext_argtype(#10550, 0, #10081) +ext_argtype(#10550, 1, #10024) +#11543 = @"C_builtin_function_or_method$zlib.compressobj" +ext_argtype(#11543, 0, #10024) +ext_argtype(#11543, 1, #10024) +ext_argtype(#11543, 2, #10024) +ext_argtype(#11543, 3, #10024) +ext_argtype(#11543, 4, #10024) +ext_argtype(#11543, 5, #11276) +ext_argtype(#11543, 5, #10081) +ext_argtype(#10551, 0, #11276) +ext_argtype(#10551, 0, #10081) +ext_argtype(#10551, 1, #10024) +#11544 = @"C_builtin_function_or_method$zlib.decompress" +ext_argtype(#11544, 0, #11276) +ext_argtype(#11544, 0, #10081) +ext_argtype(#11544, 1, #10024) +ext_argtype(#11544, 2, #10024) +#11545 = @"C_builtin_function_or_method$zlib.decompressobj" +ext_argtype(#11545, 0, #10024) +ext_argtype(#11545, 1, #11507) +#11546 = @"C_type$unicodedata.UCD" +ext_argtype(#10552, 0, #11546) +ext_argtype(#10552, 1, #10010) +ext_argtype(#10552, 2, #11507) +ext_argtype(#10553, 0, #11546) +ext_argtype(#10553, 1, #10010) +ext_argtype(#10553, 2, #11507) +ext_argtype(#10554, 0, #11546) +ext_argtype(#10554, 1, #10010) +ext_argtype(#10554, 2, #11507) +#11547 = @"C_builtin_function_or_method$unicodedata.category" +ext_argtype(#11547, 0, #11546) +ext_argtype(#11547, 1, #10010) +#11548 = @"C_builtin_function_or_method$unicodedata.bidirectional" +ext_argtype(#11548, 0, #11546) +ext_argtype(#11548, 1, #10010) +ext_argtype(#10555, 0, #11546) +ext_argtype(#10555, 1, #10010) +ext_argtype(#10556, 0, #11546) +ext_argtype(#10556, 1, #10010) +#11549 = @"C_builtin_function_or_method$unicodedata.east_asian_width" +ext_argtype(#11549, 0, #11546) +ext_argtype(#11549, 1, #10010) +ext_argtype(#10557, 0, #11546) +ext_argtype(#10557, 1, #10010) +#11550 = @"C_builtin_function_or_method$unicodedata.name" +ext_argtype(#11550, 0, #11546) +ext_argtype(#11550, 1, #10010) +ext_argtype(#11550, 2, #11507) +#11551 = @"C_builtin_function_or_method$unicodedata.lookup" +ext_argtype(#11551, 0, #11546) +ext_argtype(#11551, 1, #10010) +#11552 = @"C_builtin_function_or_method$unicodedata.normalize" +ext_argtype(#11552, 0, #11546) +ext_argtype(#11552, 1, #10010) +ext_argtype(#11552, 2, #10010) +ext_argtype(#10558, 0, #11507) +ext_argtype(#10558, 1, #10024) +#11553 = @"C_builtin_function_or_method$math.acos" +ext_argtype(#11553, 0, #11507) +#11554 = @"C_builtin_function_or_method$math.acosh" +ext_argtype(#11554, 0, #11507) +#11555 = @"C_builtin_function_or_method$math.asin" +ext_argtype(#11555, 0, #11507) +#11556 = @"C_builtin_function_or_method$math.asinh" +ext_argtype(#11556, 0, #11507) +#11557 = @"C_builtin_function_or_method$math.atan" +ext_argtype(#11557, 0, #11507) +#11558 = @"C_builtin_function_or_method$math.atanh" +ext_argtype(#11558, 0, #11507) +#11559 = @"C_builtin_function_or_method$math.ceil" +ext_argtype(#11559, 0, #11507) +#11560 = @"C_builtin_function_or_method$math.cos" +ext_argtype(#11560, 0, #11507) +#11561 = @"C_builtin_function_or_method$math.cosh" +ext_argtype(#11561, 0, #11507) +ext_argtype(#10561, 0, #11507) +ext_argtype(#10562, 0, #11507) +ext_argtype(#10563, 0, #11507) +#11562 = @"C_builtin_function_or_method$math.exp" +ext_argtype(#11562, 0, #11507) +#11563 = @"C_builtin_function_or_method$math.expm1" +ext_argtype(#11563, 0, #11507) +#11564 = @"C_builtin_function_or_method$math.fabs" +ext_argtype(#11564, 0, #11507) +ext_argtype(#10564, 0, #11507) +#11565 = @"C_builtin_function_or_method$math.floor" +ext_argtype(#11565, 0, #11507) +ext_argtype(#10566, 0, #11507) +ext_argtype(#10567, 0, #11507) +ext_argtype(#10568, 0, #11507) +ext_argtype(#10570, 0, #11507) +ext_argtype(#10571, 0, #11507) +ext_argtype(#10572, 0, #11507) +ext_argtype(#10573, 0, #10001) +ext_argtype(#10573, 1, #11507) +ext_argtype(#10574, 0, #11507) +#11566 = @"C_builtin_function_or_method$math.log1p" +ext_argtype(#11566, 0, #11507) +ext_argtype(#10576, 0, #11507) +ext_argtype(#10577, 0, #11507) +ext_argtype(#10578, 0, #11507) +ext_argtype(#10580, 0, #11507) +#11567 = @"C_builtin_function_or_method$math.sin" +ext_argtype(#11567, 0, #11507) +#11568 = @"C_builtin_function_or_method$math.sinh" +ext_argtype(#11568, 0, #11507) +#11569 = @"C_builtin_function_or_method$math.sqrt" +ext_argtype(#11569, 0, #11507) +#11570 = @"C_builtin_function_or_method$math.tan" +ext_argtype(#11570, 0, #11507) +#11571 = @"C_builtin_function_or_method$math.tanh" +ext_argtype(#11571, 0, #11507) +#11572 = @"C_builtin_function_or_method$math.trunc" +ext_argtype(#11572, 0, #11507) +ext_argtype(#10585, 0, #10010) +ext_argtype(#10585, 0, #10005) +ext_argtype(#10585, 1, #10010) +ext_argtype(#10585, 1, #10005) +ext_argtype(#10585, 2, #11507) +ext_argtype(#10587, 0, #10024) +#11573 = @"C_builtin_function_or_method$_socket.gethostbyname" +ext_argtype(#11573, 0, #10010) +ext_argtype(#10588, 0, #10010) +ext_argtype(#10589, 0, #10010) +ext_argtype(#10592, 0, #10010) +ext_argtype(#10592, 1, #10010) +#11574 = @"C_builtin_function_or_method$_socket.getservbyport" +ext_argtype(#11574, 0, #10024) +ext_argtype(#11574, 1, #10010) +ext_argtype(#10593, 0, #10010) +ext_argtype(#10594, 0, #11507) +ext_argtype(#10595, 0, #10024) +ext_argtype(#10595, 1, #10024) +ext_argtype(#10595, 2, #10024) +ext_argtype(#10596, 0, #10024) +ext_argtype(#10597, 0, #11507) +ext_argtype(#10598, 0, #10024) +ext_argtype(#10599, 0, #11507) +ext_argtype(#10600, 0, #10010) +#11575 = @"C_builtin_function_or_method$_socket.inet_ntoa" +ext_argtype(#11575, 0, #11276) +ext_argtype(#11575, 0, #10081) +ext_argtype(#10601, 0, #10024) +ext_argtype(#10601, 1, #10010) +#11576 = @"C_builtin_function_or_method$_socket.inet_ntop" +ext_argtype(#11576, 0, #10024) +ext_argtype(#11576, 1, #11276) +ext_argtype(#11576, 1, #10081) +ext_argtype(#10602, 0, #11507) +ext_argtype(#10602, 1, #11507) +ext_argtype(#10602, 2, #10024) +ext_argtype(#10602, 3, #10024) +ext_argtype(#10602, 4, #10024) +ext_argtype(#10602, 5, #10024) +ext_argtype(#10603, 0, #11507) +ext_argtype(#10603, 1, #10024) +ext_argtype(#10605, 0, #11507) +ext_argtype(#10607, 0, #11507) +ext_argtype(#10608, 0, #11507) +ext_argtype(#10609, 0, #10024) +ext_argtype(#10610, 0, #10024) +#11577 = @"C_builtin_function_or_method$resource.getrusage" +ext_argtype(#11577, 0, #10024) +ext_argtype(#10611, 0, #10024) +ext_argtype(#10612, 0, #10024) +ext_argtype(#10612, 1, #11507) +ext_argtype(#10614, 0, #11507) +ext_argtype(#10614, 1, #11507) +ext_argtype(#10614, 2, #10024) +ext_argtype(#10615, 0, #11507) +ext_argtype(#10615, 1, #11507) +ext_argtype(#10615, 2, #11507) +ext_argtype(#10615, 3, #10024) +ext_argtype(#10615, 4, #11507) +ext_argtype(#10615, 5, #11507) +ext_argtype(#10615, 6, #11507) +ext_argtype(#10619, 0, #11507) +ext_argtype(#10623, 0, #11507) +#11578 = @"C_builtin_function_or_method$sys.getsizeof" +ext_argtype(#11578, 0, #11507) +ext_argtype(#11578, 1, #11507) +ext_argtype(#10625, 0, #10024) +ext_argtype(#10627, 0, #10024) +ext_argtype(#10629, 0, #10001) +ext_argtype(#10631, 0, #10024) +ext_argtype(#10632, 0, #11507) +ext_argtype(#10634, 0, #10024) +ext_argtype(#10635, 0, #11507) +#11579 = @"C_builtin_function_or_method$sys.call_tracing" +ext_argtype(#11579, 0, #11507) +ext_argtype(#11579, 1, #10037) +ext_argtype(#10638, 0, #11507) +ext_argtype(#10651, 1, #11507) +ext_argtype(#10651, 2, #11507) +ext_argtype(#10652, 0, #11507) +ext_argtype(#10652, 1, #11507) +#11580 = @"C_builtin_function_or_method$builtins.__import__" +ext_argtype(#11580, 1, #11507) +ext_argtype(#11580, 2, #11507) +ext_argtype(#11580, 3, #11507) +ext_argtype(#11580, 4, #10024) +#11581 = @"C_builtin_function_or_method$builtins.abs" +ext_argtype(#11581, 0, #11507) +ext_argtype(#10653, 0, #11507) +ext_argtype(#10654, 0, #11507) +#11582 = @"C_builtin_function_or_method$builtins.ascii" +ext_argtype(#11582, 0, #11507) +#11583 = @"C_builtin_function_or_method$builtins.bin" +ext_argtype(#11583, 0, #11507) +ext_argtype(#10655, 0, #11507) +#11584 = @"C_builtin_function_or_method$builtins.chr" +ext_argtype(#11584, 0, #10024) +ext_argtype(#10656, 0, #11507) +ext_argtype(#10656, 1, #11507) +ext_argtype(#10656, 2, #10010) +ext_argtype(#10656, 3, #10024) +ext_argtype(#10656, 4, #10024) +ext_argtype(#10656, 5, #10024) +#11585 = @"C_builtin_function_or_method$builtins.format" +ext_argtype(#11585, 0, #11507) +ext_argtype(#10661, 0, #11507) +#11586 = @"C_builtin_function_or_method$builtins.hex" +ext_argtype(#11586, 0, #11507) +ext_argtype(#10662, 0, #11507) +ext_argtype(#10668, 0, #11507) +#11587 = @"C_builtin_function_or_method$builtins.oct" +ext_argtype(#11587, 0, #11507) +ext_argtype(#10670, 0, #11507) +#11588 = @"C_builtin_function_or_method$builtins.repr" +ext_argtype(#11588, 0, #11507) +#11589 = @"C_builtin_function_or_method$builtins.round" +ext_argtype(#11589, 0, #11507) +ext_argtype(#11589, 1, #11507) +ext_argtype(#10673, 0, #11507) +ext_argtype(#10673, 1, #11507) +ext_argtype(#10673, 2, #10024) +ext_argtype(#10676, 0, #11507) +ext_argtype(#10677, 0, #11507) +#11590 = @"C_type$_multiprocessing.SemLock" +ext_argtype(#10679, 0, #11590) +ext_argtype(#10680, 0, #11590) +ext_argtype(#10681, 0, #11590) +ext_argtype(#10682, 0, #11590) +ext_argtype(#10683, 0, #11590) +ext_argtype(#10684, 0, #11590) +ext_argtype(#10685, 0, #11590) +ext_argtype(#10686, 0, #11590) +#11591 = @"C_type$_multiprocessing.SemLock$_rebuild" +ext_argtype(#11591, 0, #11590) +ext_argtype(#10687, 0, #11590) +#11592 = @"C_type$_bz2.BZ2Compressor$compress" +#11593 = @"C_type$_bz2.BZ2Compressor" +ext_argtype(#11592, 0, #11593) +#11594 = @"C_type$_bz2.BZ2Compressor$flush" +ext_argtype(#11594, 0, #11593) +#11595 = @"C_type$_bz2.BZ2Compressor$__getstate__" +ext_argtype(#11595, 0, #11593) +#11596 = @"C_type$_bz2.BZ2Decompressor$decompress" +#11597 = @"C_type$_bz2.BZ2Decompressor" +ext_argtype(#11596, 0, #11597) +#11598 = @"C_type$_bz2.BZ2Decompressor$__getstate__" +ext_argtype(#11598, 0, #11597) +#11599 = @"C_type$_random.Random" +ext_argtype(#10688, 0, #11599) +ext_argtype(#10689, 0, #11599) +ext_argtype(#10690, 0, #11599) +ext_argtype(#10691, 0, #11599) +ext_argtype(#10691, 1, #11507) +ext_argtype(#10692, 0, #11599) +ext_argtype(#10692, 1, #10024) +#11600 = @"C_type$_csv.writer$writerow" +ext_argtype(#11600, 0, #10018) +ext_argtype(#11600, 1, #11507) +ext_argtype(#10693, 0, #10018) +ext_argtype(#10693, 1, #11507) +#11601 = @"C_type$xxsubtype.spamlist" +ext_argtype(#10694, 0, #11601) +ext_argtype(#10695, 0, #11601) +ext_argtype(#10695, 1, #10024) +ext_argtype(#10696, 0, #11601) +#11602 = @"C_type$xxsubtype.spamdict" +ext_argtype(#10698, 0, #11602) +ext_argtype(#10699, 0, #11602) +ext_argtype(#10699, 1, #10024) +#11603 = @"C_type$_collections._deque_iterator" +ext_argtype(#10700, 0, #11603) +ext_argtype(#10700, 0, #10713) +ext_argtype(#10701, 0, #11603) +ext_argtype(#10701, 0, #10713) +ext_argtype(#10702, 0, #11603) +ext_argtype(#10702, 0, #10713) +ext_argtype(#10703, 0, #11603) +ext_argtype(#10703, 0, #10713) +#11604 = @"C_type$collections.deque" +ext_argtype(#10704, 0, #11604) +ext_argtype(#10704, 1, #11507) +ext_argtype(#10705, 0, #11604) +ext_argtype(#10705, 1, #11507) +ext_argtype(#10706, 0, #11604) +#11605 = @"C_type$collections.deque$__copy__" +ext_argtype(#11605, 0, #11604) +ext_argtype(#10707, 0, #11604) +ext_argtype(#10707, 1, #11507) +ext_argtype(#10708, 0, #11604) +ext_argtype(#10708, 1, #11507) +ext_argtype(#10709, 0, #11604) +ext_argtype(#10709, 1, #11507) +#11606 = @"C_type$collections.deque$pop" +ext_argtype(#11606, 0, #11604) +#11607 = @"C_type$collections.deque$popleft" +ext_argtype(#11607, 0, #11604) +ext_argtype(#10710, 0, #11604) +ext_argtype(#10711, 0, #11604) +ext_argtype(#10711, 1, #11507) +ext_argtype(#10712, 0, #11604) +ext_argtype(#10714, 0, #11604) +ext_argtype(#10715, 0, #11604) +ext_argtype(#10715, 1, #10024) +ext_argtype(#10716, 0, #11604) +#11608 = @"C_type$collections.defaultdict$__missing__" +#11609 = @"C_type$collections.defaultdict" +ext_argtype(#11608, 0, #11609) +ext_argtype(#11608, 1, #11507) +#11610 = @"C_type$collections.defaultdict$copy" +ext_argtype(#11610, 0, #11609) +#11611 = @"C_type$collections.defaultdict$__copy__" +ext_argtype(#11611, 0, #11609) +ext_argtype(#10717, 0, #11609) +ext_argtype(#10718, 0, #10030) +#11612 = @"C_type$parser.st$isexpr" +ext_argtype(#11612, 0, #10030) +#11613 = @"C_type$parser.st$issuite" +ext_argtype(#11613, 0, #10030) +ext_argtype(#10719, 0, #10030) +ext_argtype(#10720, 0, #10030) +ext_argtype(#10721, 0, #10030) +ext_argtype(#10722, 0, #10039) +ext_argtype(#10722, 1, #11507) +ext_argtype(#10724, 0, #10039) +ext_argtype(#10724, 1, #11507) +ext_argtype(#10725, 0, #10039) +ext_argtype(#10725, 1, #11507) +ext_argtype(#10726, 0, #10039) +ext_argtype(#10726, 1, #11507) +ext_argtype(#10727, 0, #10039) +ext_argtype(#10727, 1, #11507) +ext_argtype(#10728, 0, #10039) +ext_argtype(#10728, 1, #11507) +ext_argtype(#10729, 0, #10039) +ext_argtype(#10729, 1, #11507) +ext_argtype(#10730, 0, #10039) +ext_argtype(#10730, 1, #11507) +ext_argtype(#10731, 0, #10039) +ext_argtype(#10731, 1, #11507) +ext_argtype(#10732, 0, #10039) +ext_argtype(#10732, 1, #11507) +ext_argtype(#10733, 0, #10039) +ext_argtype(#10733, 1, #11507) +ext_argtype(#10734, 0, #10039) +ext_argtype(#10734, 1, #11507) +ext_argtype(#10735, 0, #10039) +ext_argtype(#10735, 1, #11507) +ext_argtype(#10736, 0, #10039) +ext_argtype(#10736, 1, #11507) +ext_argtype(#10736, 2, #11507) +ext_argtype(#10737, 0, #10039) +ext_argtype(#10737, 1, #11507) +ext_argtype(#10737, 2, #11507) +ext_argtype(#10738, 0, #10039) +ext_argtype(#10738, 1, #11507) +ext_argtype(#10738, 2, #11507) +ext_argtype(#10739, 0, #10039) +ext_argtype(#10739, 1, #11507) +ext_argtype(#10739, 2, #11507) +ext_argtype(#10740, 0, #10039) +ext_argtype(#10740, 1, #11507) +ext_argtype(#10740, 2, #11507) +ext_argtype(#10741, 0, #10039) +ext_argtype(#10741, 1, #11507) +ext_argtype(#10741, 2, #11507) +ext_argtype(#10742, 0, #10039) +ext_argtype(#10742, 1, #11507) +ext_argtype(#10742, 2, #11507) +ext_argtype(#10743, 0, #10039) +ext_argtype(#10743, 1, #11507) +ext_argtype(#10743, 2, #11507) +ext_argtype(#10744, 0, #10039) +ext_argtype(#10744, 1, #11507) +ext_argtype(#10744, 2, #11507) +ext_argtype(#10745, 0, #10039) +ext_argtype(#10745, 1, #11507) +ext_argtype(#10745, 2, #11507) +ext_argtype(#10746, 0, #10039) +ext_argtype(#10746, 1, #11507) +ext_argtype(#10746, 2, #11507) +ext_argtype(#10747, 0, #10039) +ext_argtype(#10747, 1, #11507) +ext_argtype(#10747, 2, #11507) +ext_argtype(#10748, 0, #10039) +ext_argtype(#10748, 1, #11507) +ext_argtype(#10748, 2, #11507) +ext_argtype(#10749, 0, #10039) +ext_argtype(#10749, 1, #11507) +ext_argtype(#10749, 2, #11507) +ext_argtype(#10750, 0, #10039) +ext_argtype(#10750, 1, #11507) +ext_argtype(#10750, 2, #11507) +ext_argtype(#10751, 0, #10039) +ext_argtype(#10751, 1, #11507) +ext_argtype(#10751, 2, #11507) +ext_argtype(#10752, 0, #10039) +ext_argtype(#10752, 1, #11507) +ext_argtype(#10752, 2, #11507) +ext_argtype(#10752, 3, #11507) +ext_argtype(#10753, 0, #10039) +ext_argtype(#10753, 1, #11507) +ext_argtype(#10753, 2, #11507) +ext_argtype(#10753, 3, #11507) +ext_argtype(#10754, 0, #10039) +ext_argtype(#10755, 0, #10039) +ext_argtype(#10756, 0, #10039) +#11614 = @"C_type$decimal.Context$is_canonical" +ext_argtype(#11614, 0, #10039) +ext_argtype(#11614, 1, #11507) +#11615 = @"C_type$decimal.Context$is_finite" +ext_argtype(#11615, 0, #10039) +ext_argtype(#11615, 1, #11507) +#11616 = @"C_type$decimal.Context$is_infinite" +ext_argtype(#11616, 0, #10039) +ext_argtype(#11616, 1, #11507) +#11617 = @"C_type$decimal.Context$is_nan" +ext_argtype(#11617, 0, #10039) +ext_argtype(#11617, 1, #11507) +#11618 = @"C_type$decimal.Context$is_normal" +ext_argtype(#11618, 0, #10039) +ext_argtype(#11618, 1, #11507) +#11619 = @"C_type$decimal.Context$is_qnan" +ext_argtype(#11619, 0, #10039) +ext_argtype(#11619, 1, #11507) +#11620 = @"C_type$decimal.Context$is_signed" +ext_argtype(#11620, 0, #10039) +ext_argtype(#11620, 1, #11507) +#11621 = @"C_type$decimal.Context$is_snan" +ext_argtype(#11621, 0, #10039) +ext_argtype(#11621, 1, #11507) +#11622 = @"C_type$decimal.Context$is_subnormal" +ext_argtype(#11622, 0, #10039) +ext_argtype(#11622, 1, #11507) +#11623 = @"C_type$decimal.Context$is_zero" +ext_argtype(#11623, 0, #10039) +ext_argtype(#11623, 1, #11507) +ext_argtype(#10757, 0, #10039) +ext_argtype(#10757, 1, #11507) +#11624 = @"C_type$decimal.Context$canonical" +ext_argtype(#11624, 0, #10039) +ext_argtype(#11624, 1, #11507) +ext_argtype(#10758, 0, #10039) +ext_argtype(#10758, 1, #11507) +#11625 = @"C_type$decimal.Context$copy_decimal" +ext_argtype(#11625, 0, #10039) +ext_argtype(#11625, 1, #11507) +ext_argtype(#10759, 0, #10039) +ext_argtype(#10759, 1, #11507) +ext_argtype(#10760, 0, #10039) +ext_argtype(#10760, 1, #11507) +ext_argtype(#10761, 0, #10039) +ext_argtype(#10761, 1, #11507) +#11626 = @"C_type$decimal.Context$number_class" +ext_argtype(#11626, 0, #10039) +ext_argtype(#11626, 1, #11507) +#11627 = @"C_type$decimal.Context$to_sci_string" +ext_argtype(#11627, 0, #10039) +ext_argtype(#11627, 1, #11507) +#11628 = @"C_type$decimal.Context$to_eng_string" +ext_argtype(#11628, 0, #10039) +ext_argtype(#11628, 1, #11507) +ext_argtype(#10762, 0, #10039) +ext_argtype(#10762, 1, #11507) +ext_argtype(#10762, 2, #11507) +ext_argtype(#10763, 0, #10039) +ext_argtype(#10763, 1, #11507) +ext_argtype(#10763, 2, #11507) +ext_argtype(#10764, 0, #10039) +ext_argtype(#10764, 1, #11507) +ext_argtype(#10764, 2, #11507) +ext_argtype(#10765, 0, #10039) +ext_argtype(#10765, 1, #11507) +ext_argtype(#10765, 2, #11507) +ext_argtype(#10766, 0, #10039) +ext_argtype(#10766, 1, #11507) +ext_argtype(#10766, 2, #11507) +ext_argtype(#10767, 0, #10039) +ext_argtype(#10767, 1, #11507) +ext_argtype(#10767, 2, #11507) +ext_argtype(#10768, 0, #10039) +ext_argtype(#10768, 1, #11507) +ext_argtype(#10768, 2, #11507) +#11629 = @"C_type$decimal.Context$same_quantum" +ext_argtype(#11629, 0, #10039) +ext_argtype(#11629, 1, #11507) +ext_argtype(#11629, 2, #11507) +ext_argtype(#10769, 0, #10039) +ext_argtype(#10769, 1, #11507) +ext_argtype(#10769, 2, #11507) +ext_argtype(#10770, 0, #10039) +ext_argtype(#10770, 1, #11507) +ext_argtype(#10770, 2, #11507) +ext_argtype(#10771, 0, #10039) +ext_argtype(#10772, 0, #10039) +ext_argtype(#10773, 0, #10039) +ext_argtype(#10774, 0, #10039) +ext_argtype(#10775, 0, #10039) +ext_argtype(#10776, 0, #10039) +ext_argtype(#10776, 1, #11507) +ext_argtype(#10777, 0, #10039) +ext_argtype(#10777, 1, #11507) +ext_argtype(#10778, 0, #10723) +ext_argtype(#10778, 1, #11507) +ext_argtype(#10779, 0, #10723) +ext_argtype(#10779, 1, #11507) +ext_argtype(#10780, 0, #10723) +ext_argtype(#10780, 1, #11507) +ext_argtype(#10781, 0, #10723) +ext_argtype(#10781, 1, #11507) +ext_argtype(#10782, 0, #10723) +ext_argtype(#10782, 1, #11507) +ext_argtype(#10783, 0, #10723) +ext_argtype(#10783, 1, #11507) +ext_argtype(#10784, 0, #10723) +ext_argtype(#10784, 1, #11507) +ext_argtype(#10784, 2, #11507) +ext_argtype(#10785, 0, #10723) +ext_argtype(#10785, 1, #11507) +ext_argtype(#10785, 2, #11507) +ext_argtype(#10786, 0, #10723) +ext_argtype(#10786, 1, #11507) +ext_argtype(#10786, 2, #11507) +ext_argtype(#10787, 0, #10723) +ext_argtype(#10787, 1, #11507) +ext_argtype(#10788, 0, #10723) +ext_argtype(#10788, 1, #11507) +ext_argtype(#10788, 2, #11507) +ext_argtype(#10789, 0, #10723) +ext_argtype(#10789, 1, #11507) +ext_argtype(#10789, 2, #11507) +ext_argtype(#10790, 0, #10723) +ext_argtype(#10790, 1, #11507) +ext_argtype(#10790, 2, #11507) +ext_argtype(#10791, 0, #10723) +ext_argtype(#10791, 1, #11507) +ext_argtype(#10791, 2, #11507) +ext_argtype(#10792, 0, #10723) +ext_argtype(#10792, 1, #11507) +ext_argtype(#10792, 2, #11507) +ext_argtype(#10793, 0, #10723) +ext_argtype(#10793, 1, #11507) +ext_argtype(#10793, 2, #11507) +ext_argtype(#10794, 0, #10723) +ext_argtype(#10794, 1, #11507) +ext_argtype(#10794, 2, #11507) +ext_argtype(#10795, 0, #10723) +ext_argtype(#10795, 1, #11507) +ext_argtype(#10795, 2, #11507) +ext_argtype(#10795, 3, #11507) +ext_argtype(#10796, 0, #10723) +ext_argtype(#10796, 1, #11507) +ext_argtype(#10796, 2, #11507) +ext_argtype(#10797, 0, #10723) +ext_argtype(#10797, 1, #11507) +ext_argtype(#10797, 2, #11507) +ext_argtype(#10797, 3, #11507) +#11630 = @"C_type$decimal.Decimal$is_canonical" +ext_argtype(#11630, 0, #10723) +#11631 = @"C_type$decimal.Decimal$is_finite" +ext_argtype(#11631, 0, #10723) +#11632 = @"C_type$decimal.Decimal$is_infinite" +ext_argtype(#11632, 0, #10723) +#11633 = @"C_type$decimal.Decimal$is_nan" +ext_argtype(#11633, 0, #10723) +#11634 = @"C_type$decimal.Decimal$is_qnan" +ext_argtype(#11634, 0, #10723) +#11635 = @"C_type$decimal.Decimal$is_snan" +ext_argtype(#11635, 0, #10723) +#11636 = @"C_type$decimal.Decimal$is_signed" +ext_argtype(#11636, 0, #10723) +#11637 = @"C_type$decimal.Decimal$is_zero" +ext_argtype(#11637, 0, #10723) +#11638 = @"C_type$decimal.Decimal$is_normal" +ext_argtype(#11638, 0, #10723) +ext_argtype(#11638, 1, #11507) +#11639 = @"C_type$decimal.Decimal$is_subnormal" +ext_argtype(#11639, 0, #10723) +ext_argtype(#11639, 1, #11507) +ext_argtype(#10798, 0, #10723) +#11640 = @"C_type$decimal.Decimal$canonical" +ext_argtype(#11640, 0, #10723) +#11641 = @"C_type$decimal.Decimal$conjugate" +ext_argtype(#11641, 0, #10723) +ext_argtype(#10799, 0, #10723) +ext_argtype(#10800, 0, #10723) +ext_argtype(#10801, 0, #10723) +ext_argtype(#10802, 0, #10723) +ext_argtype(#10802, 1, #11507) +ext_argtype(#10803, 0, #10723) +ext_argtype(#10803, 1, #11507) +#11642 = @"C_type$decimal.Decimal$number_class" +ext_argtype(#11642, 0, #10723) +ext_argtype(#11642, 1, #11507) +#11643 = @"C_type$decimal.Decimal$to_eng_string" +ext_argtype(#11643, 0, #10723) +ext_argtype(#11643, 1, #11507) +ext_argtype(#10804, 0, #10723) +ext_argtype(#10804, 1, #11507) +ext_argtype(#10804, 2, #11507) +ext_argtype(#10805, 0, #10723) +ext_argtype(#10805, 1, #11507) +ext_argtype(#10805, 2, #11507) +ext_argtype(#10806, 0, #10723) +ext_argtype(#10806, 1, #11507) +ext_argtype(#10806, 2, #11507) +#11644 = @"C_type$decimal.Decimal$same_quantum" +ext_argtype(#11644, 0, #10723) +ext_argtype(#11644, 1, #11507) +ext_argtype(#11644, 2, #11507) +ext_argtype(#10807, 0, #10723) +ext_argtype(#10807, 1, #11507) +ext_argtype(#10807, 2, #11507) +ext_argtype(#10808, 0, #10723) +ext_argtype(#10808, 1, #11507) +ext_argtype(#10808, 2, #11507) +ext_argtype(#10809, 0, #10723) +ext_argtype(#10809, 1, #11507) +ext_argtype(#10809, 2, #11507) +ext_argtype(#10810, 0, #10723) +ext_argtype(#10810, 1, #11507) +ext_argtype(#10810, 2, #11507) +ext_argtype(#10811, 0, #10723) +ext_argtype(#10811, 1, #11507) +ext_argtype(#10811, 2, #11507) +ext_argtype(#10812, 0, #10723) +ext_argtype(#10812, 1, #11507) +ext_argtype(#10812, 2, #11507) +ext_argtype(#10813, 0, #10723) +ext_argtype(#10813, 1, #11507) +#11645 = @"C_type$decimal.Decimal$as_tuple" +ext_argtype(#11645, 0, #10723) +#11646 = @"C_type$decimal.Decimal$__copy__" +ext_argtype(#11646, 0, #10723) +#11647 = @"C_type$decimal.Decimal$__deepcopy__" +ext_argtype(#11647, 0, #10723) +ext_argtype(#11647, 1, #11507) +#11648 = @"C_type$decimal.Decimal$__format__" +ext_argtype(#11648, 0, #10723) +ext_argtype(#11648, 1, #11507) +ext_argtype(#11648, 2, #11507) +ext_argtype(#10814, 0, #10723) +ext_argtype(#10815, 0, #10723) +ext_argtype(#10815, 1, #11507) +ext_argtype(#10816, 0, #10723) +ext_argtype(#10817, 0, #10723) +ext_argtype(#10818, 0, #10723) +ext_argtype(#10819, 0, #10723) +ext_argtype(#10820, 0, #10723) +#11649 = @"C_type$decimal.ContextManager$__enter__" +ext_argtype(#11649, 0, #10042) +ext_argtype(#10821, 0, #10042) +#11650 = @"C_type$decimal.SignalDictMixin" +ext_argtype(#10822, 0, #11650) +#11651 = @"C_type$zipimport.zipimporter" +ext_argtype(#10823, 0, #11651) +ext_argtype(#10823, 2, #11507) +ext_argtype(#10824, 0, #11651) +ext_argtype(#10824, 2, #11507) +#11652 = @"C_type$zipimport.zipimporter$load_module" +ext_argtype(#11652, 0, #11651) +ext_argtype(#10825, 0, #11651) +ext_argtype(#10826, 0, #11651) +ext_argtype(#10827, 0, #11651) +#11653 = @"C_type$zipimport.zipimporter$get_filename" +ext_argtype(#11653, 0, #11651) +ext_argtype(#10828, 0, #11651) +#11654 = @"C_type$arrayiterator" +ext_argtype(#10829, 0, #11654) +ext_argtype(#10830, 0, #11654) +ext_argtype(#10830, 1, #11507) +#11655 = @"C_type$array.array" +ext_argtype(#10831, 0, #11655) +ext_argtype(#10831, 1, #11507) +ext_argtype(#10832, 0, #11655) +ext_argtype(#10833, 0, #11655) +#11656 = @"C_type$array.array$__copy__" +ext_argtype(#11656, 0, #11655) +ext_argtype(#10834, 0, #11655) +ext_argtype(#10834, 1, #11507) +#11657 = @"C_type$array.array$__deepcopy__" +ext_argtype(#11657, 0, #11655) +ext_argtype(#11657, 1, #11507) +ext_argtype(#10835, 0, #11655) +ext_argtype(#10835, 1, #11507) +ext_argtype(#10836, 0, #11655) +ext_argtype(#10837, 0, #11655) +ext_argtype(#10837, 1, #11507) +ext_argtype(#10838, 0, #11655) +ext_argtype(#10839, 0, #11655) +ext_argtype(#10840, 0, #11655) +ext_argtype(#10841, 0, #11655) +ext_argtype(#10841, 1, #11507) +ext_argtype(#10842, 0, #11655) +#11658 = @"C_type$array.array$pop" +ext_argtype(#11658, 0, #11655) +ext_argtype(#10843, 0, #11655) +ext_argtype(#10843, 1, #11507) +ext_argtype(#10844, 0, #11655) +ext_argtype(#10844, 1, #11507) +ext_argtype(#10845, 0, #11655) +ext_argtype(#10846, 0, #11655) +ext_argtype(#10846, 1, #11507) +ext_argtype(#10847, 0, #11655) +ext_argtype(#10848, 0, #11655) +ext_argtype(#10849, 0, #11655) +ext_argtype(#10850, 0, #11655) +ext_argtype(#10851, 0, #11655) +ext_argtype(#10852, 0, #10062) +ext_argtype(#10853, 0, #10062) +#11659 = @"C_type$MultibyteIncrementalEncoder" +ext_argtype(#10854, 0, #11659) +ext_argtype(#10855, 0, #11659) +#11660 = @"C_type$MultibyteIncrementalDecoder$3decode" +#11661 = @"C_type$MultibyteIncrementalDecoder" +ext_argtype(#11660, 0, #11661) +ext_argtype(#10856, 0, #11661) +#11662 = @"C_type$MultibyteStreamReader$3read" +#11663 = @"C_type$MultibyteStreamReader" +ext_argtype(#11662, 0, #11663) +#11664 = @"C_type$MultibyteStreamReader$3readline" +ext_argtype(#11664, 0, #11663) +ext_argtype(#10857, 0, #11663) +ext_argtype(#10858, 0, #11663) +#11665 = @"C_type$MultibyteStreamWriter" +ext_argtype(#10859, 0, #11665) +ext_argtype(#10859, 1, #11507) +ext_argtype(#10860, 0, #11665) +ext_argtype(#10860, 1, #11507) +ext_argtype(#10861, 0, #11665) +#11666 = @"C_type$Struct" +ext_argtype(#10862, 0, #11666) +ext_argtype(#10863, 0, #11666) +ext_argtype(#10864, 0, #11666) +ext_argtype(#10864, 1, #11507) +ext_argtype(#10865, 0, #11666) +ext_argtype(#10866, 0, #11666) +#11667 = @"C_type$_ssl._SSLContext" +ext_argtype(#10867, 0, #11667) +ext_argtype(#10869, 0, #11667) +ext_argtype(#10869, 1, #10010) +ext_argtype(#10870, 0, #11667) +ext_argtype(#10870, 1, #11276) +ext_argtype(#10870, 1, #10081) +ext_argtype(#10871, 0, #11667) +ext_argtype(#10871, 1, #11507) +ext_argtype(#10871, 2, #11507) +ext_argtype(#10871, 3, #11507) +ext_argtype(#10872, 0, #11667) +ext_argtype(#10872, 1, #11507) +ext_argtype(#10873, 0, #11667) +ext_argtype(#10873, 1, #11507) +ext_argtype(#10873, 2, #11507) +ext_argtype(#10874, 0, #11667) +ext_argtype(#10875, 0, #11667) +ext_argtype(#10876, 0, #11667) +ext_argtype(#10876, 1, #11507) +ext_argtype(#10877, 0, #10868) +ext_argtype(#10878, 0, #10868) +ext_argtype(#10878, 1, #11276) +ext_argtype(#10878, 1, #10081) +ext_argtype(#10879, 0, #10868) +ext_argtype(#10879, 1, #10024) +ext_argtype(#10880, 0, #10868) +ext_argtype(#10881, 0, #10868) +ext_argtype(#10881, 1, #11507) +ext_argtype(#10882, 0, #10868) +ext_argtype(#10883, 0, #10868) +ext_argtype(#10884, 0, #10868) +ext_argtype(#10885, 0, #10868) +ext_argtype(#10887, 0, #10868) +ext_argtype(#10888, 0, #10124) +ext_argtype(#10888, 1, #10024) +ext_argtype(#10888, 2, #10001) +ext_argtype(#10889, 0, #10124) +ext_argtype(#10889, 1, #10024) +ext_argtype(#10889, 2, #10001) +ext_argtype(#10890, 0, #10124) +ext_argtype(#10891, 0, #10124) +ext_argtype(#10892, 0, #10124) +ext_argtype(#10893, 0, #10124) +ext_argtype(#10894, 0, #10124) +ext_argtype(#10894, 1, #10024) +ext_argtype(#10894, 2, #10001) +ext_argtype(#10895, 0, #10124) +#11668 = @"C_type$_thread.RLock" +ext_argtype(#10896, 0, #11668) +ext_argtype(#10896, 1, #10024) +ext_argtype(#10896, 2, #10001) +ext_argtype(#10897, 0, #11668) +ext_argtype(#10898, 0, #11668) +ext_argtype(#10899, 0, #11668) +ext_argtype(#10899, 1, #11507) +ext_argtype(#10900, 0, #11668) +ext_argtype(#10901, 0, #11668) +ext_argtype(#10901, 1, #10024) +ext_argtype(#10901, 2, #10001) +ext_argtype(#10902, 0, #11668) +ext_argtype(#10903, 0, #10169) +ext_argtype(#10904, 0, #10169) +ext_argtype(#10905, 0, #10169) +ext_argtype(#10906, 0, #10169) +ext_argtype(#10907, 0, #10189) +ext_argtype(#10907, 0, #10191) +ext_argtype(#10908, 0, #10189) +ext_argtype(#10908, 0, #10191) +#11669 = @"C_type$_sha256.sha256$hexdigest" +ext_argtype(#11669, 0, #10189) +ext_argtype(#11669, 0, #10191) +ext_argtype(#10909, 0, #10189) +ext_argtype(#10909, 0, #10191) +ext_argtype(#10909, 1, #11507) +ext_argtype(#10910, 0, #10189) +ext_argtype(#10910, 0, #10191) +ext_argtype(#10911, 0, #10189) +ext_argtype(#10911, 0, #10191) +#11670 = @"C_type$_sha256.sha224$hexdigest" +ext_argtype(#11670, 0, #10189) +ext_argtype(#11670, 0, #10191) +ext_argtype(#10912, 0, #10189) +ext_argtype(#10912, 0, #10191) +ext_argtype(#10912, 1, #11507) +#11671 = @"C_type$functools.partial" +ext_argtype(#10913, 0, #11671) +ext_argtype(#10914, 0, #11671) +ext_argtype(#10914, 1, #11507) +#11672 = @"C_type$_pickle.Pickler" +ext_argtype(#10915, 0, #11672) +ext_argtype(#10915, 1, #11507) +ext_argtype(#10916, 0, #11672) +#11673 = @"C_type$_pickle.PicklerMemoProxy" +ext_argtype(#10917, 0, #11673) +ext_argtype(#10918, 0, #11673) +ext_argtype(#10919, 0, #11673) +#11674 = @"C_type$_pickle.Unpickler$load" +#11675 = @"C_type$_pickle.Unpickler" +ext_argtype(#11674, 0, #11675) +#11676 = @"C_type$_pickle.Unpickler$find_class" +ext_argtype(#11676, 0, #11675) +#11677 = @"C_type$_pickle.UnpicklerMemoProxy" +ext_argtype(#10920, 0, #11677) +ext_argtype(#10921, 0, #11677) +ext_argtype(#10922, 0, #11677) +ext_argtype(#10923, 0, #10223) +ext_argtype(#10924, 0, #10223) +#11678 = @"C_type$_md5.md5$hexdigest" +ext_argtype(#11678, 0, #10223) +ext_argtype(#10925, 0, #10223) +ext_argtype(#10925, 1, #11507) +ext_argtype(#10926, 0, #10249) +ext_argtype(#10927, 0, #10249) +#11679 = @"C_type$_sha1.sha1$hexdigest" +ext_argtype(#11679, 0, #10249) +ext_argtype(#10928, 0, #10249) +ext_argtype(#10928, 1, #11507) +#11680 = @"C_type$_sre.SRE_Match" +ext_argtype(#10929, 0, #11680) +ext_argtype(#10930, 0, #11680) +ext_argtype(#10931, 0, #11680) +ext_argtype(#10932, 0, #11680) +ext_argtype(#10933, 0, #11680) +ext_argtype(#10934, 0, #11680) +#11681 = @"C_type$_sre.SRE_Match$expand" +ext_argtype(#11681, 0, #11680) +ext_argtype(#11681, 1, #11507) +#11682 = @"C_type$_sre.SRE_Match$__copy__" +ext_argtype(#11682, 0, #11680) +#11683 = @"C_type$_sre.SRE_Match$__deepcopy__" +ext_argtype(#11683, 0, #11680) +ext_argtype(#11683, 1, #11507) +#11684 = @"C_type$_sre.SRE_Scanner" +ext_argtype(#10935, 0, #11684) +ext_argtype(#10936, 0, #11684) +#11685 = @"C_type$_sre.SRE_Pattern" +ext_argtype(#10937, 0, #11685) +ext_argtype(#10938, 0, #11685) +ext_argtype(#10939, 0, #11685) +ext_argtype(#10940, 0, #11685) +ext_argtype(#10941, 0, #11685) +ext_argtype(#10942, 0, #11685) +ext_argtype(#10943, 0, #11685) +#11686 = @"C_type$_sre.SRE_Pattern$scanner" +ext_argtype(#11686, 0, #11685) +#11687 = @"C_type$_sre.SRE_Pattern$__copy__" +ext_argtype(#11687, 0, #11685) +#11688 = @"C_type$_sre.SRE_Pattern$__deepcopy__" +ext_argtype(#11688, 0, #11685) +ext_argtype(#11688, 1, #11507) +#11689 = @"C_type$datetime.timedelta$total_seconds" +#11690 = @"C_type$datetime.timedelta" +ext_argtype(#11689, 0, #11690) +ext_argtype(#10944, 0, #11690) +#11691 = @"C_type$datetime.tzinfo$tzname" +#11692 = @"C_type$datetime.tzinfo" +ext_argtype(#11691, 0, #11692) +ext_argtype(#11691, 1, #11507) +#11693 = @"C_type$datetime.tzinfo$utcoffset" +ext_argtype(#11693, 0, #11692) +ext_argtype(#11693, 1, #11507) +#11694 = @"C_type$datetime.tzinfo$dst" +ext_argtype(#11694, 0, #11692) +ext_argtype(#11694, 1, #11507) +#11695 = @"C_type$datetime.tzinfo$fromutc" +ext_argtype(#11695, 0, #11692) +ext_argtype(#11695, 1, #11507) +ext_argtype(#10945, 0, #11692) +#11696 = @"C_type$datetime.datetime$now" +#11697 = @"C_type$datetime.datetime" +ext_argtype(#11696, 0, #11697) +ext_argtype(#11696, 1, #11507) +#11698 = @"C_type$datetime.datetime$utcnow" +ext_argtype(#11698, 0, #11697) +#11699 = @"C_type$datetime.datetime$fromtimestamp" +ext_argtype(#11699, 0, #11697) +ext_argtype(#11699, 1, #11507) +ext_argtype(#11699, 2, #11507) +#11700 = @"C_type$datetime.datetime$utcfromtimestamp" +ext_argtype(#11700, 0, #11697) +ext_argtype(#11700, 1, #11507) +#11701 = @"C_type$datetime.datetime$strptime" +ext_argtype(#11701, 0, #11697) +#11702 = @"C_type$datetime.datetime$combine" +ext_argtype(#11702, 0, #11697) +#11703 = @"C_type$datetime.date" +ext_argtype(#11702, 1, #11703) +#11704 = @"C_type$datetime.time" +ext_argtype(#11702, 2, #11704) +#11705 = @"C_type$datetime.datetime$date" +ext_argtype(#11705, 0, #11697) +#11706 = @"C_type$datetime.datetime$time" +ext_argtype(#11706, 0, #11697) +#11707 = @"C_type$datetime.datetime$timetz" +ext_argtype(#11707, 0, #11697) +#11708 = @"C_type$datetime.datetime$ctime" +ext_argtype(#11708, 0, #11697) +#11709 = @"C_type$datetime.datetime$timetuple" +ext_argtype(#11709, 0, #11697) +ext_argtype(#10946, 0, #11697) +#11710 = @"C_type$datetime.datetime$utctimetuple" +ext_argtype(#11710, 0, #11697) +#11711 = @"C_type$datetime.datetime$isoformat" +ext_argtype(#11711, 0, #11697) +ext_argtype(#10947, 0, #11697) +ext_argtype(#10948, 0, #11697) +ext_argtype(#10949, 0, #11697) +#11712 = @"C_type$datetime.datetime$replace" +ext_argtype(#11712, 0, #11697) +ext_argtype(#11712, 1, #10024) +ext_argtype(#11712, 2, #10024) +ext_argtype(#11712, 3, #10024) +ext_argtype(#11712, 4, #10024) +ext_argtype(#11712, 5, #10024) +ext_argtype(#11712, 6, #10024) +ext_argtype(#11712, 7, #10024) +ext_argtype(#11712, 8, #11507) +#11713 = @"C_type$datetime.datetime$astimezone" +ext_argtype(#11713, 0, #11697) +ext_argtype(#11713, 1, #11507) +ext_argtype(#10950, 0, #11697) +#11714 = @"C_type$datetime.time$isoformat" +ext_argtype(#11714, 0, #11704) +#11715 = @"C_type$datetime.time$strftime" +ext_argtype(#11715, 0, #11704) +#11716 = @"C_type$datetime.time$__format__" +ext_argtype(#11716, 0, #11704) +ext_argtype(#10951, 0, #11704) +ext_argtype(#10952, 0, #11704) +ext_argtype(#10953, 0, #11704) +#11717 = @"C_type$datetime.time$replace" +ext_argtype(#11717, 0, #11704) +ext_argtype(#11717, 1, #10024) +ext_argtype(#11717, 2, #10024) +ext_argtype(#11717, 3, #10024) +ext_argtype(#11717, 4, #10024) +ext_argtype(#11717, 5, #11507) +ext_argtype(#10954, 0, #11704) +#11718 = @"C_type$datetime.timezone$tzname" +#11719 = @"C_type$datetime.timezone" +ext_argtype(#11718, 0, #11719) +ext_argtype(#11718, 1, #11507) +#11720 = @"C_type$datetime.timezone$utcoffset" +ext_argtype(#11720, 0, #11719) +ext_argtype(#11720, 1, #11507) +ext_argtype(#10955, 0, #11719) +ext_argtype(#10955, 1, #11507) +#11721 = @"C_type$datetime.timezone$fromutc" +ext_argtype(#11721, 0, #11719) +ext_argtype(#11721, 1, #11507) +ext_argtype(#10956, 0, #11719) +#11722 = @"C_type$datetime.date$fromtimestamp" +ext_argtype(#11722, 0, #11703) +ext_argtype(#11722, 1, #11507) +#11723 = @"C_type$datetime.date$fromordinal" +ext_argtype(#11723, 0, #11703) +ext_argtype(#11723, 1, #10024) +#11724 = @"C_type$datetime.date$today" +ext_argtype(#11724, 0, #11703) +#11725 = @"C_type$datetime.date$ctime" +ext_argtype(#11725, 0, #11703) +#11726 = @"C_type$datetime.date$strftime" +ext_argtype(#11726, 0, #11703) +#11727 = @"C_type$datetime.date$__format__" +ext_argtype(#11727, 0, #11703) +#11728 = @"C_type$datetime.date$timetuple" +ext_argtype(#11728, 0, #11703) +ext_argtype(#10957, 0, #11703) +#11729 = @"C_type$datetime.date$isoformat" +ext_argtype(#11729, 0, #11703) +ext_argtype(#10958, 0, #11703) +ext_argtype(#10959, 0, #11703) +ext_argtype(#10960, 0, #11703) +#11730 = @"C_type$datetime.date$replace" +ext_argtype(#11730, 0, #11703) +ext_argtype(#11730, 1, #10024) +ext_argtype(#11730, 2, #10024) +ext_argtype(#11730, 3, #10024) +ext_argtype(#10961, 0, #11703) +#11731 = @"C_type$ndarray" +ext_argtype(#10962, 0, #11731) +ext_argtype(#10963, 0, #11731) +ext_argtype(#10964, 0, #11731) +ext_argtype(#10965, 0, #11731) +ext_argtype(#10966, 0, #11731) +ext_argtype(#10967, 0, #11731) +#11732 = @"C_type$mmap.mmap" +ext_argtype(#10968, 0, #11732) +ext_argtype(#10969, 0, #11732) +ext_argtype(#10970, 0, #11732) +ext_argtype(#10971, 0, #11732) +ext_argtype(#10972, 0, #11732) +ext_argtype(#10973, 0, #11732) +ext_argtype(#10974, 0, #11732) +ext_argtype(#10975, 0, #11732) +ext_argtype(#10976, 0, #11732) +ext_argtype(#10977, 0, #11732) +ext_argtype(#10978, 0, #11732) +ext_argtype(#10979, 0, #11732) +ext_argtype(#10980, 0, #11732) +ext_argtype(#10981, 0, #11732) +#11733 = @"C_type$mmap.mmap$__enter__" +ext_argtype(#11733, 0, #11732) +#11734 = @"C_type$mmap.mmap$__exit__" +ext_argtype(#11734, 0, #11732) +ext_argtype(#10982, 0, #10411) +ext_argtype(#10982, 1, #11507) +ext_argtype(#10982, 2, #11507) +ext_argtype(#10983, 0, #10411) +ext_argtype(#10983, 1, #11507) +ext_argtype(#10983, 2, #11507) +ext_argtype(#10984, 0, #10411) +ext_argtype(#10984, 1, #11507) +ext_argtype(#10985, 0, #10411) +#11735 = @"C_type$select.epoll$fromfd" +#11736 = @"C_type$select.epoll" +ext_argtype(#11735, 0, #11736) +ext_argtype(#11735, 1, #10024) +ext_argtype(#10986, 0, #11736) +ext_argtype(#10987, 0, #11736) +ext_argtype(#10988, 0, #11736) +ext_argtype(#10988, 1, #11507) +ext_argtype(#10988, 2, #10024) +ext_argtype(#10989, 0, #11736) +ext_argtype(#10989, 1, #11507) +ext_argtype(#10989, 2, #10024) +ext_argtype(#10990, 0, #11736) +ext_argtype(#10990, 1, #11507) +ext_argtype(#10991, 0, #11736) +ext_argtype(#10991, 1, #10001) +ext_argtype(#10991, 2, #10024) +#11737 = @"C_type$_io._TextIOBase$detach" +#11738 = @"C_type$_io._TextIOBase" +ext_argtype(#11737, 0, #11738) +#11739 = @"C_type$_io._TextIOBase$read" +ext_argtype(#11739, 0, #11738) +#11740 = @"C_type$_io._TextIOBase$readline" +ext_argtype(#11740, 0, #11738) +#11741 = @"C_type$_io._TextIOBase$write" +ext_argtype(#11741, 0, #11738) +#11742 = @"C_type$_io.IncrementalNewlineDecoder$decode" +#11743 = @"C_type$_io.IncrementalNewlineDecoder" +ext_argtype(#11742, 0, #11743) +ext_argtype(#10992, 0, #11743) +ext_argtype(#10993, 0, #11743) +ext_argtype(#10993, 1, #11507) +ext_argtype(#10994, 0, #11743) +#11744 = @"C_type$_io.TextIOWrapper$detach" +#11745 = @"C_type$_io.TextIOWrapper" +ext_argtype(#11744, 0, #11745) +ext_argtype(#10995, 0, #11745) +#11746 = @"C_type$_io.TextIOWrapper$read" +ext_argtype(#11746, 0, #11745) +#11747 = @"C_type$_io.TextIOWrapper$readline" +ext_argtype(#11747, 0, #11745) +#11748 = @"C_type$_io.TextIOWrapper$flush" +ext_argtype(#11748, 0, #11745) +ext_argtype(#10996, 0, #11745) +#11749 = @"C_type$_io.TextIOWrapper$fileno" +ext_argtype(#11749, 0, #11745) +#11750 = @"C_type$_io.TextIOWrapper$seekable" +ext_argtype(#11750, 0, #11745) +#11751 = @"C_type$_io.TextIOWrapper$readable" +ext_argtype(#11751, 0, #11745) +#11752 = @"C_type$_io.TextIOWrapper$writable" +ext_argtype(#11752, 0, #11745) +#11753 = @"C_type$_io.TextIOWrapper$isatty" +ext_argtype(#11753, 0, #11745) +#11754 = @"C_type$_io.TextIOWrapper$__getstate__" +ext_argtype(#11754, 0, #11745) +#11755 = @"C_type$_io.TextIOWrapper$seek" +ext_argtype(#11755, 0, #11745) +ext_argtype(#10997, 0, #11745) +#11756 = @"C_type$_io.TextIOWrapper$truncate" +ext_argtype(#11756, 0, #11745) +#11757 = @"C_type$_io.BytesIO" +ext_argtype(#10998, 0, #11757) +ext_argtype(#10999, 0, #11757) +ext_argtype(#11000, 0, #11757) +ext_argtype(#11001, 0, #11757) +ext_argtype(#11002, 0, #11757) +ext_argtype(#11003, 0, #11757) +ext_argtype(#11004, 0, #11757) +ext_argtype(#11005, 0, #11757) +ext_argtype(#11005, 1, #11507) +ext_argtype(#11006, 0, #11757) +ext_argtype(#11006, 1, #11507) +ext_argtype(#11007, 0, #11757) +ext_argtype(#11007, 1, #11507) +ext_argtype(#11008, 0, #11757) +ext_argtype(#11008, 1, #11507) +ext_argtype(#11009, 0, #11757) +ext_argtype(#11009, 1, #11507) +ext_argtype(#11010, 0, #11757) +ext_argtype(#11010, 1, #11507) +ext_argtype(#11011, 0, #11757) +ext_argtype(#11011, 1, #11507) +ext_argtype(#11012, 0, #11757) +ext_argtype(#11013, 0, #11757) +ext_argtype(#11014, 0, #11757) +ext_argtype(#11014, 1, #10024) +ext_argtype(#11014, 2, #10024) +ext_argtype(#11015, 0, #11757) +ext_argtype(#11015, 1, #11507) +ext_argtype(#11016, 0, #11757) +ext_argtype(#11017, 0, #11757) +ext_argtype(#11017, 1, #11507) +ext_argtype(#11018, 0, #11757) +#11758 = @"C_type$_io._IOBase$seek" +#11759 = @"C_type$_io._IOBase" +ext_argtype(#11758, 0, #11759) +#11760 = @"C_type$_io._IOBase$tell" +ext_argtype(#11760, 0, #11759) +#11761 = @"C_type$_io._IOBase$truncate" +ext_argtype(#11761, 0, #11759) +ext_argtype(#11019, 0, #11759) +ext_argtype(#11020, 0, #11759) +ext_argtype(#11021, 0, #11759) +ext_argtype(#11022, 0, #11759) +ext_argtype(#11023, 0, #11759) +ext_argtype(#11024, 0, #11759) +#11762 = @"C_type$_io._IOBase$_checkSeekable" +ext_argtype(#11762, 0, #11759) +#11763 = @"C_type$_io._IOBase$_checkReadable" +ext_argtype(#11763, 0, #11759) +#11764 = @"C_type$_io._IOBase$_checkWritable" +ext_argtype(#11764, 0, #11759) +#11765 = @"C_type$_io._IOBase$fileno" +ext_argtype(#11765, 0, #11759) +ext_argtype(#11025, 0, #11759) +#11766 = @"C_type$_io._IOBase$__enter__" +ext_argtype(#11766, 0, #11759) +#11767 = @"C_type$_io._IOBase$__exit__" +ext_argtype(#11767, 0, #11759) +ext_argtype(#11026, 0, #11759) +ext_argtype(#11027, 0, #11759) +ext_argtype(#11028, 0, #11759) +#11768 = @"C_type$_io._RawIOBase" +ext_argtype(#11029, 0, #11768) +ext_argtype(#11030, 0, #11768) +#11769 = @"C_type$_io._BufferedIOBase$detach" +#11770 = @"C_type$_io._BufferedIOBase" +ext_argtype(#11769, 0, #11770) +#11771 = @"C_type$_io._BufferedIOBase$read" +ext_argtype(#11771, 0, #11770) +#11772 = @"C_type$_io._BufferedIOBase$read1" +ext_argtype(#11772, 0, #11770) +ext_argtype(#11031, 0, #11770) +#11773 = @"C_type$_io._BufferedIOBase$write" +ext_argtype(#11773, 0, #11770) +#11774 = @"C_type$_io.BufferedReader$detach" +#11775 = @"C_type$_io.BufferedReader" +ext_argtype(#11774, 0, #11775) +#11776 = @"C_type$_io.BufferedReader$flush" +ext_argtype(#11776, 0, #11775) +ext_argtype(#11032, 0, #11775) +#11777 = @"C_type$_io.BufferedReader$seekable" +ext_argtype(#11777, 0, #11775) +#11778 = @"C_type$_io.BufferedReader$readable" +ext_argtype(#11778, 0, #11775) +#11779 = @"C_type$_io.BufferedReader$writable" +ext_argtype(#11779, 0, #11775) +#11780 = @"C_type$_io.BufferedReader$fileno" +ext_argtype(#11780, 0, #11775) +#11781 = @"C_type$_io.BufferedReader$isatty" +ext_argtype(#11781, 0, #11775) +ext_argtype(#11033, 0, #11775) +ext_argtype(#11033, 1, #11507) +#11782 = @"C_type$_io.BufferedReader$__getstate__" +ext_argtype(#11782, 0, #11775) +ext_argtype(#11034, 0, #11775) +ext_argtype(#11035, 0, #11775) +ext_argtype(#11036, 0, #11775) +ext_argtype(#11037, 0, #11775) +ext_argtype(#11038, 0, #11775) +ext_argtype(#11039, 0, #11775) +ext_argtype(#11040, 0, #11775) +ext_argtype(#11041, 0, #11775) +ext_argtype(#11042, 0, #11775) +#11783 = @"C_type$_io.BufferedRandom" +ext_argtype(#11043, 0, #11783) +#11784 = @"C_type$_io.BufferedRandom$detach" +ext_argtype(#11784, 0, #11783) +#11785 = @"C_type$_io.BufferedRandom$seekable" +ext_argtype(#11785, 0, #11783) +#11786 = @"C_type$_io.BufferedRandom$readable" +ext_argtype(#11786, 0, #11783) +#11787 = @"C_type$_io.BufferedRandom$writable" +ext_argtype(#11787, 0, #11783) +#11788 = @"C_type$_io.BufferedRandom$fileno" +ext_argtype(#11788, 0, #11783) +#11789 = @"C_type$_io.BufferedRandom$isatty" +ext_argtype(#11789, 0, #11783) +ext_argtype(#11044, 0, #11783) +ext_argtype(#11044, 1, #11507) +#11790 = @"C_type$_io.BufferedRandom$__getstate__" +ext_argtype(#11790, 0, #11783) +ext_argtype(#11045, 0, #11783) +ext_argtype(#11046, 0, #11783) +ext_argtype(#11047, 0, #11783) +ext_argtype(#11048, 0, #11783) +ext_argtype(#11049, 0, #11783) +ext_argtype(#11050, 0, #11783) +ext_argtype(#11051, 0, #11783) +ext_argtype(#11052, 0, #11783) +ext_argtype(#11053, 0, #11783) +ext_argtype(#11054, 0, #11783) +ext_argtype(#11055, 0, #11783) +#11791 = @"C_type$_io.BufferedWriter" +ext_argtype(#11056, 0, #11791) +#11792 = @"C_type$_io.BufferedWriter$detach" +ext_argtype(#11792, 0, #11791) +#11793 = @"C_type$_io.BufferedWriter$seekable" +ext_argtype(#11793, 0, #11791) +#11794 = @"C_type$_io.BufferedWriter$readable" +ext_argtype(#11794, 0, #11791) +#11795 = @"C_type$_io.BufferedWriter$writable" +ext_argtype(#11795, 0, #11791) +#11796 = @"C_type$_io.BufferedWriter$fileno" +ext_argtype(#11796, 0, #11791) +#11797 = @"C_type$_io.BufferedWriter$isatty" +ext_argtype(#11797, 0, #11791) +ext_argtype(#11057, 0, #11791) +ext_argtype(#11057, 1, #11507) +#11798 = @"C_type$_io.BufferedWriter$__getstate__" +ext_argtype(#11798, 0, #11791) +ext_argtype(#11058, 0, #11791) +ext_argtype(#11059, 0, #11791) +ext_argtype(#11060, 0, #11791) +ext_argtype(#11061, 0, #11791) +ext_argtype(#11062, 0, #11791) +ext_argtype(#11063, 0, #11791) +#11799 = @"C_type$_io.BufferedRWPair$read" +#11800 = @"C_type$_io.BufferedRWPair" +ext_argtype(#11799, 0, #11800) +#11801 = @"C_type$_io.BufferedRWPair$peek" +ext_argtype(#11801, 0, #11800) +#11802 = @"C_type$_io.BufferedRWPair$read1" +ext_argtype(#11802, 0, #11800) +#11803 = @"C_type$_io.BufferedRWPair$readinto" +ext_argtype(#11803, 0, #11800) +#11804 = @"C_type$_io.BufferedRWPair$write" +ext_argtype(#11804, 0, #11800) +#11805 = @"C_type$_io.BufferedRWPair$flush" +ext_argtype(#11805, 0, #11800) +#11806 = @"C_type$_io.BufferedRWPair$readable" +ext_argtype(#11806, 0, #11800) +#11807 = @"C_type$_io.BufferedRWPair$writable" +ext_argtype(#11807, 0, #11800) +#11808 = @"C_type$_io.BufferedRWPair$close" +ext_argtype(#11808, 0, #11800) +#11809 = @"C_type$_io.BufferedRWPair$isatty" +ext_argtype(#11809, 0, #11800) +#11810 = @"C_type$_io.BufferedRWPair$__getstate__" +ext_argtype(#11810, 0, #11800) +#11811 = @"C_type$_io.StringIO" +ext_argtype(#11064, 0, #11811) +#11812 = @"C_type$_io.StringIO$getvalue" +ext_argtype(#11812, 0, #11811) +#11813 = @"C_type$_io.StringIO$read" +ext_argtype(#11813, 0, #11811) +#11814 = @"C_type$_io.StringIO$readline" +ext_argtype(#11814, 0, #11811) +ext_argtype(#11065, 0, #11811) +ext_argtype(#11066, 0, #11811) +ext_argtype(#11067, 0, #11811) +ext_argtype(#11068, 0, #11811) +ext_argtype(#11068, 1, #11507) +ext_argtype(#11069, 0, #11811) +ext_argtype(#11070, 0, #11811) +ext_argtype(#11071, 0, #11811) +ext_argtype(#11072, 0, #11811) +ext_argtype(#11073, 0, #11811) +ext_argtype(#11073, 1, #11507) +#11815 = @"C_type$_io.FileIO" +ext_argtype(#11074, 0, #11815) +ext_argtype(#11075, 0, #11815) +ext_argtype(#11076, 0, #11815) +ext_argtype(#11077, 0, #11815) +ext_argtype(#11078, 0, #11815) +ext_argtype(#11079, 0, #11815) +#11816 = @"C_type$_io.FileIO$truncate" +ext_argtype(#11816, 0, #11815) +ext_argtype(#11080, 0, #11815) +ext_argtype(#11081, 0, #11815) +ext_argtype(#11082, 0, #11815) +ext_argtype(#11083, 0, #11815) +ext_argtype(#11084, 0, #11815) +ext_argtype(#11085, 0, #11815) +ext_argtype(#11086, 0, #11815) +ext_argtype(#11086, 1, #11507) +#11817 = @"C_type$_io.FileIO$__getstate__" +ext_argtype(#11817, 0, #11815) +ext_argtype(#11087, 0, #10526) +ext_argtype(#11087, 0, #10528) +ext_argtype(#11088, 0, #10526) +ext_argtype(#11088, 0, #10528) +#11818 = @"C_type$_sha512.sha512$hexdigest" +ext_argtype(#11818, 0, #10526) +ext_argtype(#11818, 0, #10528) +ext_argtype(#11089, 0, #10526) +ext_argtype(#11089, 0, #10528) +ext_argtype(#11089, 1, #11507) +ext_argtype(#11090, 0, #10526) +ext_argtype(#11090, 0, #10528) +ext_argtype(#11091, 0, #10526) +ext_argtype(#11091, 0, #10528) +#11819 = @"C_type$_sha512.sha384$hexdigest" +ext_argtype(#11819, 0, #10526) +ext_argtype(#11819, 0, #10528) +ext_argtype(#11092, 0, #10526) +ext_argtype(#11092, 0, #10528) +ext_argtype(#11092, 1, #11507) +#11820 = @"C_type$_lsprof.Profiler$getstats" +#11821 = @"C_type$_lsprof.Profiler" +ext_argtype(#11820, 0, #11821) +ext_argtype(#11093, 0, #11821) +ext_argtype(#11093, 1, #10024) +ext_argtype(#11093, 2, #10024) +ext_argtype(#11094, 0, #11821) +ext_argtype(#11095, 0, #11821) +ext_argtype(#11096, 0, #10531) +#11822 = @"C_type$xml.etree.ElementTree.Element$get" +ext_argtype(#11822, 0, #10531) +ext_argtype(#11822, 1, #11507) +ext_argtype(#11822, 2, #11507) +ext_argtype(#11097, 0, #10531) +ext_argtype(#11097, 1, #11507) +ext_argtype(#11097, 2, #11507) +ext_argtype(#11098, 0, #10531) +ext_argtype(#11098, 1, #11507) +ext_argtype(#11098, 2, #11507) +#11823 = @"C_type$xml.etree.ElementTree.Element$findtext" +ext_argtype(#11823, 0, #10531) +ext_argtype(#11823, 1, #11507) +ext_argtype(#11823, 2, #11507) +ext_argtype(#11823, 3, #11507) +ext_argtype(#11099, 0, #10531) +ext_argtype(#11099, 1, #11507) +ext_argtype(#11099, 2, #11507) +ext_argtype(#11100, 0, #10531) +ext_argtype(#11100, 1, #10531) +ext_argtype(#11101, 0, #10531) +ext_argtype(#11101, 1, #11507) +ext_argtype(#11102, 0, #10531) +ext_argtype(#11102, 1, #10024) +ext_argtype(#11102, 2, #10531) +ext_argtype(#11103, 0, #10531) +ext_argtype(#11103, 1, #10531) +ext_argtype(#11104, 0, #10531) +ext_argtype(#11104, 1, #11507) +ext_argtype(#11106, 0, #10531) +#11824 = @"C_type$xml.etree.ElementTree.Element$iterfind" +ext_argtype(#11824, 0, #10531) +ext_argtype(#11824, 1, #11507) +ext_argtype(#11824, 2, #11507) +ext_argtype(#11107, 0, #10531) +ext_argtype(#11107, 1, #11507) +ext_argtype(#11108, 0, #10531) +ext_argtype(#11109, 0, #10531) +ext_argtype(#11110, 0, #10531) +ext_argtype(#11111, 0, #10531) +ext_argtype(#11111, 1, #11507) +ext_argtype(#11111, 2, #11507) +ext_argtype(#11112, 0, #10531) +ext_argtype(#11113, 0, #10531) +ext_argtype(#11113, 1, #11507) +ext_argtype(#11114, 0, #10531) +ext_argtype(#11115, 0, #10531) +ext_argtype(#11116, 0, #10531) +ext_argtype(#11116, 1, #11507) +#11825 = @"C_type$xml.etree.ElementTree.TreeBuilder" +ext_argtype(#11117, 0, #11825) +ext_argtype(#11117, 1, #11507) +ext_argtype(#11118, 0, #11825) +ext_argtype(#11118, 1, #11507) +ext_argtype(#11118, 2, #11507) +#11826 = @"C_type$xml.etree.ElementTree.TreeBuilder$end" +ext_argtype(#11826, 0, #11825) +ext_argtype(#11826, 1, #11507) +ext_argtype(#11119, 0, #11825) +#11827 = @"C_type$xml.etree.ElementTree.XMLParser" +ext_argtype(#11120, 0, #11827) +ext_argtype(#11120, 1, #11507) +ext_argtype(#11121, 0, #11827) +ext_argtype(#11122, 0, #11827) +ext_argtype(#11122, 1, #11507) +ext_argtype(#11123, 0, #11827) +ext_argtype(#11123, 1, #10020) +ext_argtype(#11123, 2, #11507) +ext_argtype(#11124, 0, #11827) +#11828 = @"C_type$_ctypes.PyCArrayType$from_param" +#11829 = @"C_type$_ctypes.PyCArrayType" +ext_argtype(#11828, 0, #11829) +#11830 = @"C_type$_ctypes.PyCFuncPtrType" +ext_argtype(#11828, 0, #11830) +#11831 = @"C_type$_ctypes.PyCStructType" +ext_argtype(#11828, 0, #11831) +#11832 = @"C_type$_ctypes.UnionType" +ext_argtype(#11828, 0, #11832) +ext_argtype(#11828, 1, #11507) +#11833 = @"C_type$_ctypes.PyCArrayType$from_address" +ext_argtype(#11833, 0, #11829) +ext_argtype(#11833, 0, #11830) +ext_argtype(#11833, 0, #11831) +ext_argtype(#11833, 0, #11832) +ext_argtype(#11833, 1, #11507) +#11834 = @"C_type$_ctypes.PyCArrayType$from_buffer" +ext_argtype(#11834, 0, #11829) +ext_argtype(#11834, 0, #11830) +ext_argtype(#11834, 0, #11831) +ext_argtype(#11834, 0, #11832) +#11835 = @"C_type$_ctypes.PyCArrayType$from_buffer_copy" +ext_argtype(#11835, 0, #11829) +ext_argtype(#11835, 0, #11830) +ext_argtype(#11835, 0, #11831) +ext_argtype(#11835, 0, #11832) +#11836 = @"C_type$_ctypes.PyCArrayType$in_dll" +ext_argtype(#11836, 0, #11829) +ext_argtype(#11836, 0, #11830) +ext_argtype(#11836, 0, #11831) +ext_argtype(#11836, 0, #11832) +#11837 = @"C_type$_ctypes.PyCFuncPtrType$from_param" +ext_argtype(#11837, 0, #11829) +ext_argtype(#11837, 0, #11830) +ext_argtype(#11837, 0, #11831) +ext_argtype(#11837, 0, #11832) +ext_argtype(#11837, 1, #11507) +#11838 = @"C_type$_ctypes.PyCFuncPtrType$from_address" +ext_argtype(#11838, 0, #11829) +ext_argtype(#11838, 0, #11830) +ext_argtype(#11838, 0, #11831) +ext_argtype(#11838, 0, #11832) +ext_argtype(#11838, 1, #11507) +#11839 = @"C_type$_ctypes.PyCFuncPtrType$from_buffer" +ext_argtype(#11839, 0, #11829) +ext_argtype(#11839, 0, #11830) +ext_argtype(#11839, 0, #11831) +ext_argtype(#11839, 0, #11832) +#11840 = @"C_type$_ctypes.PyCFuncPtrType$from_buffer_copy" +ext_argtype(#11840, 0, #11829) +ext_argtype(#11840, 0, #11830) +ext_argtype(#11840, 0, #11831) +ext_argtype(#11840, 0, #11832) +#11841 = @"C_type$_ctypes.PyCFuncPtrType$in_dll" +ext_argtype(#11841, 0, #11829) +ext_argtype(#11841, 0, #11830) +ext_argtype(#11841, 0, #11831) +ext_argtype(#11841, 0, #11832) +#11842 = @"C_type$_ctypes.PyCStructType$from_param" +ext_argtype(#11842, 0, #11829) +ext_argtype(#11842, 0, #11830) +ext_argtype(#11842, 0, #11831) +ext_argtype(#11842, 0, #11832) +ext_argtype(#11842, 1, #11507) +#11843 = @"C_type$_ctypes.PyCStructType$from_address" +ext_argtype(#11843, 0, #11829) +ext_argtype(#11843, 0, #11830) +ext_argtype(#11843, 0, #11831) +ext_argtype(#11843, 0, #11832) +ext_argtype(#11843, 1, #11507) +#11844 = @"C_type$_ctypes.PyCStructType$from_buffer" +ext_argtype(#11844, 0, #11829) +ext_argtype(#11844, 0, #11830) +ext_argtype(#11844, 0, #11831) +ext_argtype(#11844, 0, #11832) +#11845 = @"C_type$_ctypes.PyCStructType$from_buffer_copy" +ext_argtype(#11845, 0, #11829) +ext_argtype(#11845, 0, #11830) +ext_argtype(#11845, 0, #11831) +ext_argtype(#11845, 0, #11832) +#11846 = @"C_type$_ctypes.PyCStructType$in_dll" +ext_argtype(#11846, 0, #11829) +ext_argtype(#11846, 0, #11830) +ext_argtype(#11846, 0, #11831) +ext_argtype(#11846, 0, #11832) +#11847 = @"C_type$_ctypes.UnionType$from_param" +ext_argtype(#11847, 0, #11829) +ext_argtype(#11847, 0, #11830) +ext_argtype(#11847, 0, #11831) +ext_argtype(#11847, 0, #11832) +ext_argtype(#11847, 1, #11507) +#11848 = @"C_type$_ctypes.UnionType$from_address" +ext_argtype(#11848, 0, #11829) +ext_argtype(#11848, 0, #11830) +ext_argtype(#11848, 0, #11831) +ext_argtype(#11848, 0, #11832) +ext_argtype(#11848, 1, #11507) +#11849 = @"C_type$_ctypes.UnionType$from_buffer" +ext_argtype(#11849, 0, #11829) +ext_argtype(#11849, 0, #11830) +ext_argtype(#11849, 0, #11831) +ext_argtype(#11849, 0, #11832) +#11850 = @"C_type$_ctypes.UnionType$from_buffer_copy" +ext_argtype(#11850, 0, #11829) +ext_argtype(#11850, 0, #11830) +ext_argtype(#11850, 0, #11831) +ext_argtype(#11850, 0, #11832) +#11851 = @"C_type$_ctypes.UnionType$in_dll" +ext_argtype(#11851, 0, #11829) +ext_argtype(#11851, 0, #11830) +ext_argtype(#11851, 0, #11831) +ext_argtype(#11851, 0, #11832) +#11852 = @"C_type$_ctypes._SimpleCData$__ctypes_from_outparam__" +#11853 = @"C_type$_ctypes._SimpleCData" +ext_argtype(#11852, 0, #11853) +#11854 = @"C_type$_ctypes._CData$__ctypes_from_outparam__" +#11855 = @"C_type$_ctypes._CData" +ext_argtype(#11854, 0, #11855) +ext_argtype(#11125, 0, #11855) +ext_argtype(#11126, 0, #11855) +#11856 = @"C_type$_ctypes.PyCPointerType$from_address" +#11857 = @"C_type$_ctypes.PyCPointerType" +ext_argtype(#11856, 0, #11857) +ext_argtype(#11856, 1, #11507) +#11858 = @"C_type$_ctypes.PyCPointerType$from_buffer" +ext_argtype(#11858, 0, #11857) +#11859 = @"C_type$_ctypes.PyCPointerType$from_buffer_copy" +ext_argtype(#11859, 0, #11857) +#11860 = @"C_type$_ctypes.PyCPointerType$in_dll" +ext_argtype(#11860, 0, #11857) +ext_argtype(#11127, 0, #11857) +ext_argtype(#11127, 1, #11507) +ext_argtype(#11128, 0, #11857) +ext_argtype(#11128, 1, #11507) +#11861 = @"C_type$_ctypes.PyCSimpleType" +ext_argtype(#11129, 0, #11861) +ext_argtype(#11129, 1, #11507) +#11862 = @"C_type$_ctypes.PyCSimpleType$from_address" +ext_argtype(#11862, 0, #11861) +ext_argtype(#11862, 1, #11507) +#11863 = @"C_type$_ctypes.PyCSimpleType$from_buffer" +ext_argtype(#11863, 0, #11861) +#11864 = @"C_type$_ctypes.PyCSimpleType$from_buffer_copy" +ext_argtype(#11864, 0, #11861) +#11865 = @"C_type$_ctypes.PyCSimpleType$in_dll" +ext_argtype(#11865, 0, #11861) +#11866 = @"C_type$zlib.Compress$compress" +#11867 = @"C_type$zlib.Compress" +ext_argtype(#11866, 0, #11867) +ext_argtype(#11866, 1, #11276) +ext_argtype(#11866, 1, #10081) +ext_argtype(#11130, 0, #11867) +ext_argtype(#11130, 1, #10024) +#11868 = @"C_type$zlib.Compress$copy" +ext_argtype(#11868, 0, #11867) +#11869 = @"C_type$zlib.Decompress$decompress" +#11870 = @"C_type$zlib.Decompress" +ext_argtype(#11869, 0, #11870) +ext_argtype(#11869, 1, #11276) +ext_argtype(#11869, 1, #10081) +ext_argtype(#11869, 2, #10024) +#11871 = @"C_type$zlib.Decompress$flush" +ext_argtype(#11871, 0, #11870) +ext_argtype(#11871, 1, #10024) +#11872 = @"C_type$zlib.Decompress$copy" +ext_argtype(#11872, 0, #11870) +ext_argtype(#11131, 0, #11546) +ext_argtype(#11131, 1, #10010) +ext_argtype(#11131, 2, #11507) +ext_argtype(#11132, 0, #11546) +ext_argtype(#11132, 1, #10010) +ext_argtype(#11132, 2, #11507) +ext_argtype(#11133, 0, #11546) +ext_argtype(#11133, 1, #10010) +ext_argtype(#11133, 2, #11507) +#11873 = @"C_type$unicodedata.UCD$category" +ext_argtype(#11873, 0, #11546) +ext_argtype(#11873, 1, #10010) +#11874 = @"C_type$unicodedata.UCD$bidirectional" +ext_argtype(#11874, 0, #11546) +ext_argtype(#11874, 1, #10010) +ext_argtype(#11134, 0, #11546) +ext_argtype(#11134, 1, #10010) +ext_argtype(#11135, 0, #11546) +ext_argtype(#11135, 1, #10010) +#11875 = @"C_type$unicodedata.UCD$east_asian_width" +ext_argtype(#11875, 0, #11546) +ext_argtype(#11875, 1, #10010) +ext_argtype(#11136, 0, #11546) +ext_argtype(#11136, 1, #10010) +#11876 = @"C_type$unicodedata.UCD$name" +ext_argtype(#11876, 0, #11546) +ext_argtype(#11876, 1, #10010) +ext_argtype(#11876, 2, #11507) +#11877 = @"C_type$unicodedata.UCD$lookup" +ext_argtype(#11877, 0, #11546) +ext_argtype(#11877, 1, #10010) +#11878 = @"C_type$unicodedata.UCD$normalize" +ext_argtype(#11878, 0, #11546) +ext_argtype(#11878, 1, #10010) +ext_argtype(#11878, 2, #10010) +#11879 = @"C_type$itertools._grouper" +ext_argtype(#11137, 0, #11879) +#11880 = @"C_type$itertools.groupby" +ext_argtype(#11138, 0, #11880) +ext_argtype(#11139, 0, #11880) +ext_argtype(#11139, 1, #11507) +#11881 = @"C_type$itertools._tee_dataobject" +ext_argtype(#11140, 0, #11881) +ext_argtype(#11141, 0, #11142) +ext_argtype(#11143, 0, #11142) +ext_argtype(#11144, 0, #11142) +ext_argtype(#11144, 1, #11507) +#11882 = @"C_type$itertools.cycle" +ext_argtype(#11145, 0, #11882) +ext_argtype(#11146, 0, #11882) +ext_argtype(#11146, 1, #11507) +#11883 = @"C_type$itertools.dropwhile" +ext_argtype(#11147, 0, #11883) +ext_argtype(#11148, 0, #11883) +ext_argtype(#11148, 1, #11507) +#11884 = @"C_type$itertools.takewhile" +ext_argtype(#11149, 0, #11884) +ext_argtype(#11150, 0, #11884) +ext_argtype(#11150, 1, #11507) +#11885 = @"C_type$itertools.islice" +ext_argtype(#11151, 0, #11885) +ext_argtype(#11152, 0, #11885) +ext_argtype(#11152, 1, #11507) +#11886 = @"C_type$itertools.starmap" +ext_argtype(#11153, 0, #11886) +#11887 = @"C_type$itertools.chain$from_iterable" +#11888 = @"C_type$itertools.chain" +ext_argtype(#11887, 0, #11888) +ext_argtype(#11887, 1, #11507) +ext_argtype(#11154, 0, #11888) +ext_argtype(#11155, 0, #11888) +ext_argtype(#11155, 1, #11507) +#11889 = @"C_type$itertools.product" +ext_argtype(#11156, 0, #11889) +ext_argtype(#11157, 0, #11889) +ext_argtype(#11157, 1, #11507) +#11890 = @"C_type$itertools.combinations" +ext_argtype(#11158, 0, #11890) +ext_argtype(#11159, 0, #11890) +ext_argtype(#11159, 1, #11507) +#11891 = @"C_type$itertools.combinations_with_replacement" +ext_argtype(#11160, 0, #11891) +ext_argtype(#11161, 0, #11891) +ext_argtype(#11161, 1, #11507) +#11892 = @"C_type$itertools.permutations" +ext_argtype(#11162, 0, #11892) +ext_argtype(#11163, 0, #11892) +ext_argtype(#11163, 1, #11507) +#11893 = @"C_type$itertools.accumulate" +ext_argtype(#11164, 0, #11893) +ext_argtype(#11165, 0, #11893) +ext_argtype(#11165, 1, #11507) +#11894 = @"C_type$itertools.compress" +ext_argtype(#11166, 0, #11894) +#11895 = @"C_type$itertools.filterfalse" +ext_argtype(#11167, 0, #11895) +#11896 = @"C_type$itertools.count" +ext_argtype(#11168, 0, #11896) +#11897 = @"C_type$itertools.repeat" +ext_argtype(#11169, 0, #11897) +ext_argtype(#11170, 0, #11897) +#11898 = @"C_type$itertools.zip_longest" +ext_argtype(#11171, 0, #11898) +ext_argtype(#11172, 0, #11898) +ext_argtype(#11172, 1, #11507) +#11899 = @"C_type$ossaudiodev.oss_audio_device$read" +ext_argtype(#11899, 0, #10582) +ext_argtype(#11899, 1, #10024) +ext_argtype(#11173, 0, #10582) +ext_argtype(#11173, 1, #11276) +ext_argtype(#11173, 1, #10081) +ext_argtype(#11174, 0, #10582) +ext_argtype(#11174, 1, #11276) +ext_argtype(#11174, 1, #10081) +ext_argtype(#11175, 0, #10582) +ext_argtype(#11176, 0, #10582) +ext_argtype(#11177, 0, #10582) +ext_argtype(#11178, 0, #10582) +ext_argtype(#11179, 0, #10582) +ext_argtype(#11180, 0, #10582) +ext_argtype(#11181, 0, #10582) +ext_argtype(#11182, 0, #10582) +ext_argtype(#11183, 0, #10582) +ext_argtype(#11184, 0, #10582) +ext_argtype(#11185, 0, #10582) +ext_argtype(#11185, 1, #10024) +ext_argtype(#11185, 2, #10024) +ext_argtype(#11185, 3, #10024) +ext_argtype(#11185, 4, #10024) +ext_argtype(#11186, 0, #10582) +ext_argtype(#11187, 0, #10582) +ext_argtype(#11188, 0, #10582) +ext_argtype(#11189, 0, #10582) +ext_argtype(#11190, 0, #10582) +#11900 = @"C_type$ossaudiodev.oss_audio_device$__enter__" +ext_argtype(#11900, 0, #10582) +ext_argtype(#11191, 0, #10582) +ext_argtype(#11192, 0, #10584) +ext_argtype(#11193, 0, #10584) +#11901 = @"C_type$ossaudiodev.oss_mixer_device$__enter__" +ext_argtype(#11901, 0, #10584) +ext_argtype(#11194, 0, #10584) +ext_argtype(#11195, 0, #10584) +ext_argtype(#11196, 0, #10584) +ext_argtype(#11197, 0, #10584) +ext_argtype(#11198, 0, #10584) +ext_argtype(#11198, 1, #10024) +ext_argtype(#11199, 0, #10584) +ext_argtype(#11199, 1, #10024) +ext_argtype(#11199, 2, #10037) +ext_argtype(#11200, 0, #10584) +ext_argtype(#11201, 0, #10584) +ext_argtype(#11202, 0, #10586) +ext_argtype(#11202, 1, #11507) +ext_argtype(#11202, 2, #10024) +ext_argtype(#11203, 0, #10586) +ext_argtype(#11203, 1, #11507) +ext_argtype(#11204, 0, #10586) +ext_argtype(#11204, 1, #10010) +ext_argtype(#11205, 0, #10586) +ext_argtype(#11206, 0, #10586) +ext_argtype(#11206, 1, #10010) +ext_argtype(#11206, 1, #10005) +ext_argtype(#11206, 2, #10010) +ext_argtype(#11207, 0, #10586) +ext_argtype(#11207, 1, #10024) +ext_argtype(#11208, 0, #10586) +ext_argtype(#11209, 0, #10586) +ext_argtype(#11209, 1, #11507) +ext_argtype(#11210, 0, #10586) +ext_argtype(#11211, 0, #10886) +ext_argtype(#11212, 0, #10886) +ext_argtype(#11212, 1, #11507) +ext_argtype(#11213, 0, #10886) +ext_argtype(#11214, 0, #10886) +ext_argtype(#11214, 1, #11507) +ext_argtype(#11215, 0, #10886) +ext_argtype(#11215, 1, #11507) +ext_argtype(#11216, 0, #10886) +ext_argtype(#11217, 0, #10886) +ext_argtype(#11218, 0, #10886) +ext_argtype(#11219, 0, #10886) +ext_argtype(#11220, 0, #10886) +ext_argtype(#11220, 1, #10024) +ext_argtype(#11220, 2, #10024) +ext_argtype(#11220, 3, #10024) +ext_argtype(#11221, 0, #10886) +ext_argtype(#11221, 1, #11507) +#11902 = @"C_type$_socket.socket$recv" +ext_argtype(#11902, 0, #10886) +ext_argtype(#11902, 1, #10024) +ext_argtype(#11902, 2, #10024) +ext_argtype(#11222, 0, #10886) +ext_argtype(#11222, 2, #10024) +ext_argtype(#11222, 3, #10024) +ext_argtype(#11223, 0, #10886) +ext_argtype(#11223, 1, #10024) +ext_argtype(#11223, 2, #10024) +ext_argtype(#11224, 0, #10886) +ext_argtype(#11224, 2, #10024) +ext_argtype(#11224, 3, #10024) +ext_argtype(#11225, 0, #10886) +ext_argtype(#11225, 1, #11276) +ext_argtype(#11225, 1, #10081) +ext_argtype(#11225, 2, #10024) +ext_argtype(#11226, 0, #10886) +ext_argtype(#11226, 1, #11276) +ext_argtype(#11226, 1, #10081) +ext_argtype(#11226, 2, #10024) +ext_argtype(#11227, 0, #10886) +ext_argtype(#11228, 0, #10886) +ext_argtype(#11228, 1, #11507) +ext_argtype(#11229, 0, #10886) +ext_argtype(#11229, 1, #11507) +ext_argtype(#11230, 0, #10886) +ext_argtype(#11231, 0, #10886) +ext_argtype(#11232, 0, #10886) +ext_argtype(#11232, 1, #11507) +ext_argtype(#11233, 0, #10886) +ext_argtype(#11233, 1, #10024) +ext_argtype(#11233, 2, #10024) +ext_argtype(#11233, 3, #10024) +ext_argtype(#11234, 0, #10886) +ext_argtype(#11234, 1, #11507) +ext_argtype(#11234, 2, #10024) +ext_argtype(#11234, 3, #10024) +ext_argtype(#11235, 0, #10886) +ext_argtype(#11235, 1, #11507) +ext_argtype(#11235, 2, #11507) +ext_argtype(#11235, 3, #10024) +ext_argtype(#11235, 4, #11507) +#11903 = @"C_type$_ast.AST" +ext_argtype(#11236, 0, #11903) +#11904 = @"C_type$traceback" +ext_argtype(#11237, 0, #11904) +#11905 = @"C_type$filter" +ext_argtype(#11238, 0, #11905) +#11906 = @"C_type$map" +ext_argtype(#11239, 0, #11906) +#11907 = @"C_type$zip" +ext_argtype(#11240, 0, #11907) +ext_argtype(#11241, 0, #10517) +ext_argtype(#11242, 0, #10517) +ext_argtype(#11243, 0, #10517) +ext_argtype(#11244, 0, #10517) +ext_argtype(#11244, 1, #11507) +ext_argtype(#11245, 0, #10517) +ext_argtype(#11245, 1, #11507) +ext_argtype(#11246, 0, #10517) +ext_argtype(#11247, 0, #10517) +ext_argtype(#11248, 0, #11507) +ext_argtype(#11248, 1, #10024) +ext_argtype(#11249, 0, #11507) +ext_argtype(#11249, 1, #10024) +#11908 = @"C_type$object$3__subclasshook__" +ext_argtype(#11908, 0, #11507) +#11909 = @"C_type$object$3__format__" +ext_argtype(#11909, 0, #11507) +ext_argtype(#11250, 0, #11507) +ext_argtype(#11251, 0, #11507) +#11910 = @"C_type$dict_keyiterator" +ext_argtype(#11252, 0, #11910) +#11911 = @"C_type$dict_valueiterator" +ext_argtype(#11252, 0, #11911) +#11912 = @"C_type$dict_itemiterator" +ext_argtype(#11252, 0, #11912) +ext_argtype(#11253, 0, #11910) +ext_argtype(#11253, 0, #11911) +ext_argtype(#11253, 0, #11912) +ext_argtype(#11254, 0, #11910) +ext_argtype(#11254, 0, #11911) +ext_argtype(#11254, 0, #11912) +ext_argtype(#11255, 0, #11910) +ext_argtype(#11255, 0, #11911) +ext_argtype(#11255, 0, #11912) +ext_argtype(#11256, 0, #11910) +ext_argtype(#11256, 0, #11911) +ext_argtype(#11256, 0, #11912) +ext_argtype(#11257, 0, #11910) +ext_argtype(#11257, 0, #11911) +ext_argtype(#11257, 0, #11912) +ext_argtype(#11258, 0, #10111) +ext_argtype(#11258, 1, #11507) +#11913 = @"C_type$dict$3__getitem__" +ext_argtype(#11913, 0, #10111) +ext_argtype(#11913, 1, #11507) +ext_argtype(#11259, 0, #10111) +#11914 = @"C_type$dict$3get" +ext_argtype(#11914, 0, #10111) +#11915 = @"C_type$dict$3setdefault" +ext_argtype(#11915, 0, #10111) +#11916 = @"C_type$dict$3pop" +ext_argtype(#11916, 0, #10111) +ext_argtype(#11260, 0, #10111) +#11917 = @"C_type$dict$3keys" +ext_argtype(#11917, 0, #10111) +#11918 = @"C_type$dict$3items" +ext_argtype(#11918, 0, #10111) +#11919 = @"C_type$dict$3values" +ext_argtype(#11919, 0, #10111) +ext_argtype(#11261, 0, #10111) +#11920 = @"C_type$dict$3fromkeys" +ext_argtype(#11920, 0, #10111) +ext_argtype(#11262, 0, #10111) +ext_argtype(#11263, 0, #10111) +#11921 = @"C_type$dict_items" +ext_argtype(#11264, 0, #11921) +ext_argtype(#11264, 1, #11507) +#11922 = @"C_type$dict_keys" +ext_argtype(#11265, 0, #11922) +ext_argtype(#11265, 1, #11507) +ext_argtype(#11266, 0, #10647) +#11923 = @"C_type$bytearray_iterator" +ext_argtype(#11267, 0, #11923) +ext_argtype(#11268, 0, #11923) +ext_argtype(#11269, 0, #11923) +ext_argtype(#11269, 1, #11507) +ext_argtype(#11270, 0, #11276) +ext_argtype(#11271, 0, #11276) +ext_argtype(#11272, 0, #11276) +ext_argtype(#11273, 0, #11276) +ext_argtype(#11274, 0, #11276) +ext_argtype(#11274, 1, #11507) +ext_argtype(#11275, 0, #11276) +ext_argtype(#11277, 0, #11276) +ext_argtype(#11278, 0, #11276) +ext_argtype(#11279, 0, #11276) +ext_argtype(#11280, 0, #11276) +#11924 = @"C_type$bytearray$3decode" +ext_argtype(#11924, 0, #11276) +ext_argtype(#11281, 0, #11276) +ext_argtype(#11282, 0, #11276) +ext_argtype(#11283, 0, #11276) +ext_argtype(#11283, 1, #11507) +ext_argtype(#11284, 0, #11276) +ext_argtype(#11285, 0, #11276) +ext_argtype(#11286, 0, #11276) +ext_argtype(#11287, 0, #11276) +ext_argtype(#11288, 0, #11276) +ext_argtype(#11289, 0, #11276) +ext_argtype(#11290, 0, #11276) +ext_argtype(#11291, 0, #11276) +ext_argtype(#11292, 0, #11276) +ext_argtype(#11293, 0, #11276) +ext_argtype(#11294, 0, #11276) +ext_argtype(#11295, 0, #11276) +ext_argtype(#11295, 1, #11507) +ext_argtype(#11296, 0, #11276) +ext_argtype(#11297, 0, #11276) +ext_argtype(#11298, 0, #11276) +ext_argtype(#11300, 0, #11276) +ext_argtype(#11300, 1, #11507) +ext_argtype(#11301, 0, #11276) +ext_argtype(#11302, 0, #11276) +ext_argtype(#11302, 1, #11507) +ext_argtype(#11303, 0, #11276) +ext_argtype(#11304, 0, #11276) +ext_argtype(#11305, 0, #11276) +ext_argtype(#11306, 0, #11276) +ext_argtype(#11307, 0, #11276) +ext_argtype(#11308, 0, #11276) +ext_argtype(#11308, 1, #11507) +ext_argtype(#11309, 0, #11276) +ext_argtype(#11310, 0, #11276) +ext_argtype(#11311, 0, #11276) +ext_argtype(#11312, 0, #11276) +ext_argtype(#11313, 0, #11276) +ext_argtype(#11314, 0, #11276) +ext_argtype(#11315, 0, #11276) +ext_argtype(#11316, 0, #11276) +ext_argtype(#11317, 0, #11276) +ext_argtype(#11318, 0, #11276) +ext_argtype(#11319, 0, #11276) +ext_argtype(#11320, 0, #10626) +#11925 = @"C_type$list_iterator" +ext_argtype(#11321, 0, #11925) +ext_argtype(#11322, 0, #11925) +ext_argtype(#11323, 0, #11925) +ext_argtype(#11323, 1, #11507) +ext_argtype(#11324, 0, #11329) +ext_argtype(#11325, 0, #11329) +ext_argtype(#11326, 0, #11329) +ext_argtype(#11326, 1, #11507) +ext_argtype(#11327, 0, #10020) +ext_argtype(#11327, 1, #11507) +ext_argtype(#11328, 0, #10020) +ext_argtype(#11330, 0, #10020) +ext_argtype(#11331, 0, #10020) +ext_argtype(#11332, 0, #10020) +ext_argtype(#11333, 0, #10020) +ext_argtype(#11333, 1, #11507) +ext_argtype(#11334, 0, #10020) +ext_argtype(#11334, 1, #10024) +ext_argtype(#11334, 2, #11507) +ext_argtype(#11335, 0, #10020) +ext_argtype(#11335, 1, #11507) +#11926 = @"C_type$list$3pop" +ext_argtype(#11926, 0, #10020) +ext_argtype(#11926, 1, #10024) +ext_argtype(#11336, 0, #10020) +ext_argtype(#11336, 1, #11507) +ext_argtype(#11337, 0, #10020) +ext_argtype(#11337, 1, #11507) +ext_argtype(#11337, 2, #11507) +ext_argtype(#11337, 3, #11507) +ext_argtype(#11338, 0, #10020) +ext_argtype(#11338, 1, #11507) +ext_argtype(#11339, 0, #10020) +ext_argtype(#11340, 0, #10020) +ext_argtype(#11340, 1, #11507) +ext_argtype(#11340, 2, #10024) +ext_argtype(#11341, 0, #10024) +ext_argtype(#11342, 0, #10024) +ext_argtype(#11343, 0, #10024) +ext_argtype(#11343, 1, #10024) +ext_argtype(#11343, 3, #11507) +ext_argtype(#11344, 0, #10024) +ext_argtype(#11344, 1, #11507) +ext_argtype(#11344, 3, #11507) +ext_argtype(#11345, 0, #10024) +ext_argtype(#11346, 0, #10024) +ext_argtype(#11347, 0, #10024) +ext_argtype(#11348, 0, #10024) +ext_argtype(#11348, 1, #11507) +ext_argtype(#11349, 0, #10024) +#11927 = @"C_type$int$3__format__" +ext_argtype(#11927, 0, #10024) +ext_argtype(#11350, 0, #10024) +#11928 = @"C_type$mappingproxy$3get" +#11929 = @"C_type$mappingproxy" +ext_argtype(#11928, 0, #11929) +#11930 = @"C_type$mappingproxy$3keys" +ext_argtype(#11930, 0, #11929) +#11931 = @"C_type$mappingproxy$3values" +ext_argtype(#11931, 0, #11929) +#11932 = @"C_type$mappingproxy$3items" +ext_argtype(#11932, 0, #11929) +#11933 = @"C_type$mappingproxy$3copy" +ext_argtype(#11933, 0, #11929) +#11934 = @"C_type$property$3getter" +#11935 = @"C_type$property" +ext_argtype(#11934, 0, #11935) +ext_argtype(#11934, 1, #11507) +#11936 = @"C_type$property$3setter" +ext_argtype(#11936, 0, #11935) +ext_argtype(#11936, 1, #11507) +#11937 = @"C_type$property$3deleter" +ext_argtype(#11937, 0, #11935) +ext_argtype(#11937, 1, #11507) +#11938 = @"C_type$generator$3send" +#11939 = @"C_type$generator" +ext_argtype(#11938, 0, #11939) +ext_argtype(#11938, 1, #11507) +#11940 = @"C_type$generator$3throw" +ext_argtype(#11940, 0, #11939) +ext_argtype(#11351, 0, #11939) +#11941 = @"C_type$stderrprinter" +ext_argtype(#11352, 0, #11941) +ext_argtype(#11353, 0, #11941) +ext_argtype(#11354, 0, #11941) +ext_argtype(#11355, 0, #11941) +ext_argtype(#11356, 0, #11941) +#11942 = @"C_type$slice" +ext_argtype(#11357, 0, #11942) +ext_argtype(#11357, 1, #11507) +ext_argtype(#11358, 0, #11942) +#11943 = @"C_type$BaseException" +ext_argtype(#11359, 0, #11943) +ext_argtype(#11360, 0, #11943) +ext_argtype(#11360, 1, #11507) +#11944 = @"C_type$BaseException$3with_traceback" +ext_argtype(#11944, 0, #11943) +ext_argtype(#11944, 1, #11507) +#11945 = @"C_type$OSError" +ext_argtype(#11361, 0, #11945) +ext_argtype(#11362, 0, #10001) +ext_argtype(#11363, 0, #10001) +ext_argtype(#11364, 0, #10001) +ext_argtype(#11364, 1, #11507) +ext_argtype(#11365, 0, #10001) +#11946 = @"C_type$float$3fromhex" +ext_argtype(#11946, 0, #10001) +ext_argtype(#11946, 1, #11507) +#11947 = @"C_type$float$3hex" +ext_argtype(#11947, 0, #10001) +ext_argtype(#11366, 0, #10001) +ext_argtype(#11367, 0, #10001) +#11948 = @"C_type$float$3__getformat__" +ext_argtype(#11948, 0, #10001) +ext_argtype(#11948, 1, #11507) +ext_argtype(#11368, 0, #10001) +ext_argtype(#11368, 1, #10010) +ext_argtype(#11368, 2, #10010) +#11949 = @"C_type$float$3__format__" +ext_argtype(#11949, 0, #10001) +#11950 = @"C_type$bytes_iterator" +ext_argtype(#11369, 0, #11950) +ext_argtype(#11370, 0, #11950) +ext_argtype(#11371, 0, #11950) +ext_argtype(#11371, 1, #11507) +ext_argtype(#11372, 0, #10081) +ext_argtype(#11373, 0, #10081) +ext_argtype(#11374, 0, #10081) +ext_argtype(#11375, 0, #10081) +#11951 = @"C_type$bytes$3decode" +ext_argtype(#11951, 0, #10081) +ext_argtype(#11376, 0, #10081) +ext_argtype(#11377, 0, #10081) +ext_argtype(#11378, 0, #10081) +#11952 = @"C_type$bytes$3fromhex" +ext_argtype(#11952, 0, #10081) +ext_argtype(#11379, 0, #10081) +ext_argtype(#11380, 0, #10081) +ext_argtype(#11381, 0, #10081) +ext_argtype(#11382, 0, #10081) +ext_argtype(#11383, 0, #10081) +ext_argtype(#11384, 0, #10081) +ext_argtype(#11385, 0, #10081) +ext_argtype(#11386, 0, #10081) +ext_argtype(#11387, 0, #10081) +ext_argtype(#11387, 1, #11507) +ext_argtype(#11388, 0, #10081) +ext_argtype(#11389, 0, #10081) +ext_argtype(#11390, 0, #10081) +ext_argtype(#11392, 0, #10081) +ext_argtype(#11392, 1, #11507) +ext_argtype(#11393, 0, #10081) +ext_argtype(#11394, 0, #10081) +ext_argtype(#11395, 0, #10081) +ext_argtype(#11396, 0, #10081) +ext_argtype(#11397, 0, #10081) +ext_argtype(#11397, 1, #11507) +ext_argtype(#11398, 0, #10081) +ext_argtype(#11399, 0, #10081) +ext_argtype(#11400, 0, #10081) +ext_argtype(#11401, 0, #10081) +ext_argtype(#11402, 0, #10081) +ext_argtype(#11403, 0, #10081) +ext_argtype(#11404, 0, #10081) +ext_argtype(#11405, 0, #10081) +ext_argtype(#11406, 0, #10081) +ext_argtype(#11407, 0, #10081) +ext_argtype(#11408, 0, #10081) +ext_argtype(#11409, 0, #10081) +#11953 = @"C_type$set_iterator" +ext_argtype(#11410, 0, #11953) +ext_argtype(#11411, 0, #11953) +ext_argtype(#11412, 0, #10074) +ext_argtype(#11412, 1, #11507) +ext_argtype(#11413, 0, #10074) +ext_argtype(#11414, 0, #10074) +ext_argtype(#11415, 0, #10074) +ext_argtype(#11416, 0, #10074) +ext_argtype(#11416, 1, #11507) +ext_argtype(#11417, 0, #10074) +ext_argtype(#11417, 1, #11507) +ext_argtype(#11418, 0, #10074) +ext_argtype(#11418, 1, #11507) +ext_argtype(#11419, 0, #10074) +ext_argtype(#11420, 0, #10074) +ext_argtype(#11421, 0, #10074) +ext_argtype(#11421, 1, #11507) +ext_argtype(#11422, 0, #10074) +ext_argtype(#11423, 0, #10073) +ext_argtype(#11423, 1, #11507) +ext_argtype(#11424, 0, #10073) +ext_argtype(#11425, 0, #10073) +ext_argtype(#11425, 1, #11507) +ext_argtype(#11426, 0, #10073) +ext_argtype(#11427, 0, #10073) +ext_argtype(#11427, 1, #11507) +ext_argtype(#11428, 0, #10073) +ext_argtype(#11429, 0, #10073) +ext_argtype(#11430, 0, #10073) +ext_argtype(#11431, 0, #10073) +ext_argtype(#11432, 0, #10073) +ext_argtype(#11432, 1, #11507) +ext_argtype(#11433, 0, #10073) +ext_argtype(#11433, 1, #11507) +ext_argtype(#11434, 0, #10073) +ext_argtype(#11434, 1, #11507) +#11954 = @"C_type$set$3pop" +ext_argtype(#11954, 0, #10073) +ext_argtype(#11435, 0, #10073) +ext_argtype(#11436, 0, #10073) +ext_argtype(#11436, 1, #11507) +ext_argtype(#11437, 0, #10073) +ext_argtype(#11438, 0, #10073) +ext_argtype(#11438, 1, #11507) +ext_argtype(#11439, 0, #10073) +ext_argtype(#11439, 1, #11507) +ext_argtype(#11440, 0, #10073) +ext_argtype(#11441, 0, #10073) +ext_argtype(#11442, 0, #10028) +#11955 = @"C_type$tuple_iterator" +ext_argtype(#11443, 0, #11955) +ext_argtype(#11444, 0, #11955) +ext_argtype(#11445, 0, #11955) +ext_argtype(#11445, 1, #11507) +ext_argtype(#11446, 0, #10037) +ext_argtype(#11447, 0, #10037) +ext_argtype(#11448, 0, #10037) +ext_argtype(#11448, 1, #11507) +ext_argtype(#11448, 2, #11507) +ext_argtype(#11448, 3, #11507) +ext_argtype(#11449, 0, #10037) +ext_argtype(#11449, 1, #11507) +ext_argtype(#11450, 0, #10666) +ext_argtype(#11451, 0, #10666) +ext_argtype(#11452, 0, #10666) +ext_argtype(#11452, 1, #11507) +ext_argtype(#11453, 0, #10667) +#11956 = @"C_type$str_iterator" +ext_argtype(#11454, 0, #11956) +ext_argtype(#11455, 0, #11956) +ext_argtype(#11456, 0, #11956) +ext_argtype(#11456, 1, #11507) +ext_argtype(#11457, 0, #10010) +#11957 = @"C_type$str$3replace" +ext_argtype(#11957, 0, #10010) +ext_argtype(#11458, 0, #10010) +ext_argtype(#11459, 0, #10010) +#11958 = @"C_type$str$3join" +ext_argtype(#11958, 0, #10010) +ext_argtype(#11958, 1, #11507) +#11959 = @"C_type$str$3capitalize" +ext_argtype(#11959, 0, #10010) +#11960 = @"C_type$str$3casefold" +ext_argtype(#11960, 0, #10010) +#11961 = @"C_type$str$3title" +ext_argtype(#11961, 0, #10010) +#11962 = @"C_type$str$3center" +ext_argtype(#11962, 0, #10010) +ext_argtype(#11460, 0, #10010) +#11963 = @"C_type$str$3expandtabs" +ext_argtype(#11963, 0, #10010) +ext_argtype(#11461, 0, #10010) +ext_argtype(#11462, 0, #10010) +ext_argtype(#11462, 1, #11507) +ext_argtype(#11463, 0, #10010) +#11964 = @"C_type$str$3ljust" +ext_argtype(#11964, 0, #10010) +#11965 = @"C_type$str$3lower" +ext_argtype(#11965, 0, #10010) +#11966 = @"C_type$str$3lstrip" +ext_argtype(#11966, 0, #10010) +ext_argtype(#11464, 0, #10010) +ext_argtype(#11465, 0, #10010) +#11967 = @"C_type$str$3rjust" +ext_argtype(#11967, 0, #10010) +#11968 = @"C_type$str$3rstrip" +ext_argtype(#11968, 0, #10010) +ext_argtype(#11466, 0, #10010) +ext_argtype(#11466, 1, #11507) +ext_argtype(#11467, 0, #10010) +#11969 = @"C_type$str$3strip" +ext_argtype(#11969, 0, #10010) +#11970 = @"C_type$str$3swapcase" +ext_argtype(#11970, 0, #10010) +#11971 = @"C_type$str$3translate" +ext_argtype(#11971, 0, #10010) +ext_argtype(#11971, 1, #11507) +#11972 = @"C_type$str$3upper" +ext_argtype(#11972, 0, #10010) +ext_argtype(#11468, 0, #10010) +ext_argtype(#11469, 0, #10010) +ext_argtype(#11470, 0, #10010) +ext_argtype(#11471, 0, #10010) +ext_argtype(#11472, 0, #10010) +ext_argtype(#11473, 0, #10010) +ext_argtype(#11474, 0, #10010) +ext_argtype(#11475, 0, #10010) +ext_argtype(#11476, 0, #10010) +ext_argtype(#11477, 0, #10010) +ext_argtype(#11478, 0, #10010) +ext_argtype(#11479, 0, #10010) +ext_argtype(#11480, 0, #10010) +#11973 = @"C_type$str$3zfill" +ext_argtype(#11973, 0, #10010) +#11974 = @"C_type$str$3format" +ext_argtype(#11974, 0, #10010) +#11975 = @"C_type$str$3format_map" +ext_argtype(#11975, 0, #10010) +ext_argtype(#11975, 1, #11507) +#11976 = @"C_type$str$3__format__" +ext_argtype(#11976, 0, #10010) +ext_argtype(#11482, 0, #10010) +ext_argtype(#11483, 0, #10010) +#11977 = @"C_type$EncodingMap" +ext_argtype(#11484, 0, #11977) +ext_argtype(#11485, 0, #11491) +ext_argtype(#11486, 0, #11491) +ext_argtype(#11487, 0, #11491) +ext_argtype(#11487, 1, #11507) +#11978 = @"C_type$longrange_iterator$3__length_hint__" +ext_argtype(#11978, 0, #11492) +ext_argtype(#11488, 0, #11492) +ext_argtype(#11489, 0, #11492) +ext_argtype(#11489, 1, #11507) +#11979 = @"C_type$range" +ext_argtype(#11490, 0, #11979) +ext_argtype(#11493, 0, #11979) +ext_argtype(#11494, 0, #11979) +ext_argtype(#11494, 1, #11507) +ext_argtype(#11495, 0, #11979) +ext_argtype(#11495, 1, #11507) +ext_argtype(#11496, 0, #10226) +ext_argtype(#11497, 0, #10226) +#11980 = @"C_type$complex$3__format__" +ext_argtype(#11980, 0, #10226) +#11981 = @"C_type$weakproxy$3__bytes__" +#11982 = @"C_type$weakproxy" +ext_argtype(#11981, 0, #11982) +ext_argtype(#11498, 0, #10407) +ext_argtype(#11499, 0, #10407) +ext_argtype(#11500, 0, #10407) +ext_argtype(#11501, 0, #10407) +ext_argtype(#11501, 1, #11507) +ext_argtype(#11501, 2, #11507) +#11983 = @"C_type$memoryview$3__enter__" +ext_argtype(#11983, 0, #10407) +ext_argtype(#11502, 0, #10407) +#11984 = @"C_type$enumerate" +ext_argtype(#11503, 0, #11984) +#11985 = @"C_type$reversed" +ext_argtype(#11504, 0, #11985) +ext_argtype(#11505, 0, #11985) +ext_argtype(#11506, 0, #11985) +ext_argtype(#11506, 1, #11507) +ext_argreturn(#11539, 1) +ext_argreturn(#11540, 1) +ext_argreturn(#11640, 0) +ext_argreturn(#11641, 0) +ext_argreturn(#11646, 0) +ext_argreturn(#11647, 0) +ext_argreturn(#11854, 0) +ext_argreturn(#11900, 0) +ext_argreturn(#11901, 0) +#11986 = @"C_type$_csv.Dialect$delimiter" +ext_proptype(#11986, #10005) +#11987 = @"C_type$_csv.Dialect$escapechar" +ext_proptype(#11987, #10005) +#11988 = @"C_type$_csv.Dialect$quotechar" +ext_proptype(#11988, #10005) +#11989 = @"C_type$_csv.Dialect$quoting" +ext_proptype(#11989, #10024) +#11990 = @"C_type$xxsubtype.spamlist$state" +ext_proptype(#11990, #10024) +#11991 = @"C_type$collections.deque$maxlen" +ext_proptype(#11991, #10024) +ext_proptype(#11991, #10005) +#11992 = @"C_type$decimal.Context$prec" +ext_proptype(#11992, #10024) +#11993 = @"C_type$decimal.Context$Emax" +ext_proptype(#11993, #10024) +#11994 = @"C_type$decimal.Context$Emin" +ext_proptype(#11994, #10024) +#11995 = @"C_type$decimal.Context$capitals" +ext_proptype(#11995, #10024) +#11996 = @"C_type$decimal.Context$clamp" +ext_proptype(#11996, #10024) +#11997 = @"C_type$decimal.Decimal$imag" +ext_proptype(#11997, #10723) +#11998 = @"C_type$array.array$itemsize" +ext_proptype(#11998, #10024) +#11999 = @"C_type$Struct$3size" +ext_proptype(#11999, #10024) +#12000 = @"C_type$_ssl._SSLContext$options" +ext_proptype(#12000, #10024) +#12001 = @"C_type$_ssl._SSLContext$verify_mode" +ext_proptype(#12001, #10024) +#12002 = @"C_type$_hashlib.HASH$digest_size" +ext_proptype(#12002, #10024) +#12003 = @"C_type$_hashlib.HASH$block_size" +ext_proptype(#12003, #10024) +#12004 = @"C_type$_sha256.sha256$block_size" +ext_proptype(#12004, #10024) +#12005 = @"C_type$_sha256.sha224$block_size" +ext_proptype(#12005, #10024) +#12006 = @"C_type$_sha256.sha256$name" +ext_proptype(#12006, #10010) +#12007 = @"C_type$_sha256.sha224$name" +ext_proptype(#12007, #10010) +#12008 = @"C_type$functools.partial$__dict__" +ext_proptype(#12008, #10111) +#12009 = @"C_type$_pickle.Pickler$memo" +ext_proptype(#12009, #11673) +#12010 = @"C_type$_pickle.Unpickler$memo" +ext_proptype(#12010, #11677) +#12011 = @"C_type$_md5.md5$block_size" +ext_proptype(#12011, #10024) +#12012 = @"C_type$_md5.md5$name" +ext_proptype(#12012, #10010) +#12013 = @"C_type$_md5.md5$digest_size" +ext_proptype(#12013, #10024) +#12014 = @"C_type$_sha1.sha1$block_size" +ext_proptype(#12014, #10024) +#12015 = @"C_type$_sha1.sha1$name" +ext_proptype(#12015, #10010) +#12016 = @"C_type$_sha1.sha1$digest_size" +ext_proptype(#12016, #10024) +#12017 = @"C_type$_sre.SRE_Match$lastindex" +ext_proptype(#12017, #10024) +ext_proptype(#12017, #10005) +#12018 = @"C_type$_sre.SRE_Match$lastgroup" +ext_proptype(#12018, #10005) +#12019 = @"C_type$_sre.SRE_Match$regs" +ext_proptype(#12019, #10037) +#12020 = @"C_type$datetime.time$hour" +ext_proptype(#12020, #10024) +#12021 = @"C_type$datetime.time$minute" +ext_proptype(#12021, #10024) +#12022 = @"C_type$datetime.time$second" +ext_proptype(#12022, #10024) +#12023 = @"C_type$datetime.time$microsecond" +ext_proptype(#12023, #10024) +#12024 = @"C_type$datetime.datetime$hour" +ext_proptype(#12024, #10024) +#12025 = @"C_type$datetime.datetime$minute" +ext_proptype(#12025, #10024) +#12026 = @"C_type$datetime.datetime$second" +ext_proptype(#12026, #10024) +#12027 = @"C_type$datetime.datetime$microsecond" +ext_proptype(#12027, #10024) +#12028 = @"C_type$datetime.date$year" +ext_proptype(#12028, #10024) +#12029 = @"C_type$datetime.date$month" +ext_proptype(#12029, #10024) +#12030 = @"C_type$datetime.date$day" +ext_proptype(#12030, #10024) +#12031 = @"C_type$ndarray$3flags" +ext_proptype(#12031, #10024) +#12032 = @"C_type$ndarray$3offset" +ext_proptype(#12032, #10024) +#12033 = @"C_type$ndarray$3obj" +ext_proptype(#12033, #10005) +#12034 = @"C_type$ndarray$3nbytes" +ext_proptype(#12034, #10024) +#12035 = @"C_type$ndarray$3readonly" +ext_proptype(#12035, #10024) +#12036 = @"C_type$ndarray$3itemsize" +ext_proptype(#12036, #10024) +#12037 = @"C_type$ndarray$3ndim" +ext_proptype(#12037, #10024) +#12038 = @"C_type$ndarray$3shape" +ext_proptype(#12038, #10037) +#12039 = @"C_type$ndarray$3strides" +ext_proptype(#12039, #10037) +#12040 = @"C_type$ndarray$3suboffsets" +ext_proptype(#12040, #10037) +#12041 = @"C_type$ndarray$3c_contiguous" +ext_proptype(#12041, #10050) +#12042 = @"C_type$ndarray$3f_contiguous" +ext_proptype(#12042, #10050) +#12043 = @"C_type$ndarray$3contiguous" +ext_proptype(#12043, #10050) +#12044 = @"C_type$mmap.mmap$closed" +ext_proptype(#12044, #10050) +#12045 = @"C_type$select.epoll$closed" +ext_proptype(#12045, #10050) +#12046 = @"C_type$_io._TextIOBase$encoding" +ext_proptype(#12046, #10005) +#12047 = @"C_type$_io._TextIOBase$newlines" +ext_proptype(#12047, #10005) +#12048 = @"C_type$_io._TextIOBase$errors" +ext_proptype(#12048, #10005) +#12049 = @"C_type$_io.IncrementalNewlineDecoder$newlines" +ext_proptype(#12049, #10037) +ext_proptype(#12049, #10005) +#12050 = @"C_type$_io.TextIOWrapper$newlines" +ext_proptype(#12050, #10005) +#12051 = @"C_type$_io.TextIOWrapper$_CHUNK_SIZE" +ext_proptype(#12051, #10024) +#12052 = @"C_type$_io.BytesIO$closed" +ext_proptype(#12052, #10050) +#12053 = @"C_type$_io._IOBase$__dict__" +ext_proptype(#12053, #10111) +#12054 = @"C_type$_io._IOBase$closed" +ext_proptype(#12054, #10050) +#12055 = @"C_type$_io.StringIO$closed" +ext_proptype(#12055, #10050) +#12056 = @"C_type$_io.StringIO$newlines" +ext_proptype(#12056, #10005) +#12057 = @"C_type$_io.StringIO$line_buffering" +ext_proptype(#12057, #10050) +#12058 = @"C_type$_io.FileIO$closed" +ext_proptype(#12058, #10050) +#12059 = @"C_type$_io.FileIO$closefd" +ext_proptype(#12059, #10050) +#12060 = @"C_type$_sha512.sha512$block_size" +ext_proptype(#12060, #10024) +#12061 = @"C_type$_sha512.sha384$block_size" +ext_proptype(#12061, #10024) +#12062 = @"C_type$_sha512.sha512$name" +ext_proptype(#12062, #10010) +#12063 = @"C_type$_sha512.sha384$name" +ext_proptype(#12063, #10010) +#12064 = @"C_type$_ctypes.PyCFuncPtr$errcheck" +ext_proptype(#12064, #10005) +#12065 = @"C_type$_ctypes.PyCFuncPtr$restype" +ext_proptype(#12065, #10005) +#12066 = @"C_type$_ctypes.PyCFuncPtr$argtypes" +ext_proptype(#12066, #10005) +#12067 = @"C_type$_ctypes.CField$offset" +ext_proptype(#12067, #10024) +#12068 = @"C_type$_ctypes.CField$size" +ext_proptype(#12068, #10024) +#12069 = @"C_type$_ast.AST$__dict__" +ext_proptype(#12069, #10111) +#12070 = @"C_type$type$3__module__" +ext_proptype(#12070, #10010) +#12071 = @"C_type$type$3__dict__" +ext_proptype(#12071, #10005) +ext_proptype(#12071, #11929) +#12072 = @"C_type$type$3__doc__" +ext_proptype(#12072, #10005) +#12073 = @"C_type$frame$3f_lineno" +ext_proptype(#12073, #10024) +#12074 = @"C_type$frame$3f_trace" +ext_proptype(#12074, #10005) +#12075 = @"C_type$int$3real" +ext_proptype(#12075, #10024) +#12076 = @"C_type$int$3imag" +ext_proptype(#12076, #10024) +#12077 = @"C_type$int$3numerator" +ext_proptype(#12077, #10024) +#12078 = @"C_type$int$3denominator" +ext_proptype(#12078, #10024) +#12079 = @"C_type$builtin_function_or_method$3__doc__" +ext_proptype(#12079, #10005) +#12080 = @"C_type$builtin_function_or_method$3__self__" +ext_proptype(#12080, #10005) +#12081 = @"C_type$method-wrapper$__doc__" +ext_proptype(#12081, #10005) +#12082 = @"C_type$classmethod_descriptor$3__doc__" +ext_proptype(#12082, #10005) +#12083 = @"C_type$method_descriptor$3__doc__" +ext_proptype(#12083, #10005) +#12084 = @"C_type$member_descriptor$3__doc__" +ext_proptype(#12084, #10005) +#12085 = @"C_type$getset_descriptor$3__doc__" +ext_proptype(#12085, #10005) +#12086 = @"C_type$wrapper_descriptor$3__doc__" +ext_proptype(#12086, #10005) +#12087 = @"C_type$property$3__isabstractmethod__" +ext_proptype(#12087, #10050) +#12088 = @"C_type$stderrprinter$3closed" +ext_proptype(#12088, #10050) +#12089 = @"C_type$stderrprinter$3encoding" +ext_proptype(#12089, #10005) +#12090 = @"C_type$BaseException$3__dict__" +ext_proptype(#12090, #10111) +#12091 = @"C_type$BaseException$3args" +ext_proptype(#12091, #10005) +#12092 = @"C_type$BaseException$3__traceback__" +ext_proptype(#12092, #10005) +#12093 = @"C_type$BaseException$3__context__" +ext_proptype(#12093, #10005) +#12094 = @"C_type$BaseException$3__cause__" +ext_proptype(#12094, #10005) +#12095 = @"C_type$OSError$3characters_written" +ext_proptype(#12095, #10024) +#12096 = @"C_type$float$3real" +ext_proptype(#12096, #10001) +#12097 = @"C_type$float$3imag" +ext_proptype(#12097, #10001) +#12098 = @"C_type$function$3__defaults__" +ext_proptype(#12098, #10005) +#12099 = @"C_type$function$3__kwdefaults__" +ext_proptype(#12099, #10005) +#12100 = @"C_type$function$3__dict__" +ext_proptype(#12100, #10111) +#12101 = @"C_type$classmethod$3__isabstractmethod__" +ext_proptype(#12101, #10050) +#12102 = @"C_type$classmethod$3__dict__" +ext_proptype(#12102, #10111) +#12103 = @"C_type$staticmethod$3__isabstractmethod__" +ext_proptype(#12103, #10050) +#12104 = @"C_type$staticmethod$3__dict__" +ext_proptype(#12104, #10111) +#12105 = @"C_type$memoryview$3obj" +ext_proptype(#12105, #10005) +#12106 = @"C_type$memoryview$3nbytes" +ext_proptype(#12106, #10024) +#12107 = @"C_type$memoryview$3readonly" +ext_proptype(#12107, #10050) +#12108 = @"C_type$memoryview$3itemsize" +ext_proptype(#12108, #10024) +#12109 = @"C_type$memoryview$3ndim" +ext_proptype(#12109, #10024) +#12110 = @"C_type$memoryview$3shape" +ext_proptype(#12110, #10037) +#12111 = @"C_type$memoryview$3strides" +ext_proptype(#12111, #10037) +#12112 = @"C_type$memoryview$3suboffsets" +ext_proptype(#12112, #10037) +#12113 = @"C_type$memoryview$3c_contiguous" +ext_proptype(#12113, #10050) +#12114 = @"C_type$memoryview$3f_contiguous" +ext_proptype(#12114, #10050) +#12115 = @"C_type$memoryview$3contiguous" +ext_proptype(#12115, #10050) +py_cobjects(#11590) +py_cobjects(#11593) +py_cobjects(#11597) +py_cobjects(#11599) +py_cobjects(#10016) +#12116 = @"C_type$_csv.Dialect" +py_cobjects(#12116) +py_cobjects(#10024) +py_cobjects(#10018) +py_cobjects(#10020) +py_cobjects(#11601) +py_cobjects(#10111) +py_cobjects(#11602) +py_cobjects(#11604) +py_cobjects(#11603) +py_cobjects(#10713) +py_cobjects(#11609) +py_cobjects(#10030) +py_cobjects(#10647) +py_cobjects(#10039) +py_cobjects(#10723) +py_cobjects(#10001) +py_cobjects(#10226) +py_cobjects(#10042) +py_cobjects(#10037) +py_cobjects(#11650) +py_cobjects(#11507) +py_cobjects(#10517) +py_cobjects(#10046) +py_cobjects(#11982) +#12117 = @"C_type$weakcallableproxy" +py_cobjects(#12117) +py_cobjects(#10028) +py_cobjects(#11651) +py_cobjects(#11655) +py_cobjects(#11942) +py_cobjects(#11654) +py_cobjects(#11276) +py_cobjects(#11939) +py_cobjects(#10062) +py_cobjects(#11659) +py_cobjects(#11661) +py_cobjects(#11663) +py_cobjects(#11665) +py_cobjects(#11666) +py_cobjects(#10868) +py_cobjects(#11667) +py_cobjects(#10124) +py_cobjects(#11668) +#12118 = @"C_type$_thread._localdummy" +py_cobjects(#12118) +#12119 = @"C_type$_thread._local" +py_cobjects(#12119) +py_cobjects(#10081) +py_cobjects(#10010) +py_cobjects(#10169) +py_cobjects(#10189) +py_cobjects(#10191) +py_cobjects(#11671) +py_cobjects(#10208) +#12120 = @"C_type$_pickle.Pdata" +py_cobjects(#12120) +py_cobjects(#10005) +#12121 = @"C_type$ellipsis" +py_cobjects(#12121) +#12122 = @"C_type$NotImplementedType" +py_cobjects(#12122) +#12123 = @"C_type$function" +py_cobjects(#12123) +#12124 = @"C_type$builtin_function_or_method" +py_cobjects(#12124) +py_cobjects(#11672) +py_cobjects(#11673) +py_cobjects(#11675) +py_cobjects(#11677) +py_cobjects(#10223) +py_cobjects(#10249) +py_cobjects(#11680) +py_cobjects(#11684) +py_cobjects(#11685) +py_cobjects(#11697) +py_cobjects(#11690) +py_cobjects(#11703) +py_cobjects(#11692) +py_cobjects(#11704) +py_cobjects(#11719) +py_cobjects(#11731) +#12125 = @"C_type$staticarray" +py_cobjects(#12125) +py_cobjects(#11732) +py_cobjects(#10411) +py_cobjects(#11736) +py_cobjects(#11759) +py_cobjects(#11768) +py_cobjects(#11770) +py_cobjects(#11738) +py_cobjects(#11815) +py_cobjects(#11757) +py_cobjects(#11811) +py_cobjects(#11775) +py_cobjects(#11791) +py_cobjects(#11800) +py_cobjects(#11783) +py_cobjects(#11745) +py_cobjects(#11743) +#12126 = @"C_type$_io._BytesIOBuffer" +py_cobjects(#12126) +#12127 = @"C_type$operator.itemgetter" +py_cobjects(#12127) +#12128 = @"C_type$operator.attrgetter" +py_cobjects(#12128) +#12129 = @"C_type$operator.methodcaller" +py_cobjects(#12129) +#12130 = @"C_type$hashinheritancetester" +py_cobjects(#12130) +#12131 = @"C_type$test_structmembersType" +py_cobjects(#12131) +#12132 = @"C_type$instancemethod" +py_cobjects(#12132) +#12133 = @"C_type$_json.Scanner" +py_cobjects(#12133) +#12134 = @"C_type$_json.Encoder" +py_cobjects(#12134) +py_cobjects(#10526) +py_cobjects(#10528) +py_cobjects(#11821) +py_cobjects(#10531) +py_cobjects(#11105) +py_cobjects(#11825) +py_cobjects(#11827) +#12135 = @"C_type$_ctypes.CThunkObject" +py_cobjects(#12135) +#12136 = @"C_type$StgDict" +py_cobjects(#12136) +py_cobjects(#11855) +py_cobjects(#11861) +#12137 = @"C_type$_ctypes.CField" +py_cobjects(#12137) +py_cobjects(#11829) +#12138 = @"C_type$_ctypes.Array" +py_cobjects(#12138) +py_cobjects(#11857) +#12139 = @"C_type$_ctypes._Pointer" +py_cobjects(#12139) +#12140 = @"C_type$_ctypes.PyCFuncPtr" +py_cobjects(#12140) +py_cobjects(#11830) +py_cobjects(#11831) +py_cobjects(#10542) +py_cobjects(#11853) +#12141 = @"C_type$_ctypes.DictRemover" +py_cobjects(#12141) +py_cobjects(#11832) +#12142 = @"C_type$_ctypes.Structure" +py_cobjects(#12142) +#12143 = @"C_type$_ctypes.Union" +py_cobjects(#12143) +#12144 = @"C_type$symtable entry" +py_cobjects(#12144) +py_cobjects(#11867) +py_cobjects(#11870) +py_cobjects(#11546) +py_cobjects(#11879) +py_cobjects(#11880) +py_cobjects(#11881) +py_cobjects(#11142) +py_cobjects(#11882) +py_cobjects(#11883) +py_cobjects(#11884) +py_cobjects(#11885) +py_cobjects(#11886) +py_cobjects(#11888) +py_cobjects(#11889) +py_cobjects(#11890) +py_cobjects(#11891) +py_cobjects(#11892) +py_cobjects(#11893) +py_cobjects(#11894) +py_cobjects(#11895) +py_cobjects(#10050) +py_cobjects(#11896) +py_cobjects(#11897) +py_cobjects(#11898) +py_cobjects(#10582) +py_cobjects(#10584) +py_cobjects(#10586) +py_cobjects(#10886) +py_cobjects(#11903) +#12145 = @"C_type$method" +py_cobjects(#12145) +py_cobjects(#11904) +py_cobjects(#10626) +py_cobjects(#10073) +py_cobjects(#10074) +#12146 = @"C_type$cell" +py_cobjects(#12146) +py_cobjects(#11905) +py_cobjects(#11906) +py_cobjects(#11907) +py_cobjects(#10407) +#12147 = @"C_type$classmethod" +py_cobjects(#12147) +py_cobjects(#11984) +py_cobjects(#11935) +py_cobjects(#11979) +py_cobjects(#11985) +#12148 = @"C_type$staticmethod" +py_cobjects(#12148) +#12149 = @"C_type$super" +py_cobjects(#12149) +py_cobjects(#11955) +py_cobjects(#11923) +py_cobjects(#11941) +py_cobjects(#11910) +py_cobjects(#11911) +py_cobjects(#11912) +py_cobjects(#11922) +py_cobjects(#11921) +#12150 = @"C_type$dict_values" +py_cobjects(#12150) +py_cobjects(#11956) +py_cobjects(#10666) +py_cobjects(#10667) +py_cobjects(#11950) +#12151 = @"C_type$classmethod_descriptor" +py_cobjects(#12151) +#12152 = @"C_type$getset_descriptor" +py_cobjects(#12152) +#12153 = @"C_type$member_descriptor" +py_cobjects(#12153) +#12154 = @"C_type$method_descriptor" +py_cobjects(#12154) +#12155 = @"C_type$wrapper_descriptor" +py_cobjects(#12155) +py_cobjects(#11929) +#12156 = @"C_type$method-wrapper" +py_cobjects(#12156) +#12157 = @"C_type$managedbuffer" +py_cobjects(#12157) +py_cobjects(#11925) +py_cobjects(#11329) +py_cobjects(#11953) +py_cobjects(#11491) +py_cobjects(#11492) +#12158 = @"C_type$PyCapsule" +py_cobjects(#12158) +#12159 = @"C_type$namespace" +py_cobjects(#12159) +#12160 = @"C_type$<dummy key> type" +py_cobjects(#12160) +#12161 = @"C_type$moduledef" +py_cobjects(#12161) +#12162 = @"C_type$TypeError" +py_cobjects(#12162) +#12163 = @"C_type$Exception" +py_cobjects(#12163) +py_cobjects(#11943) +#12164 = @"C_type$StopIteration" +py_cobjects(#12164) +#12165 = @"C_type$GeneratorExit" +py_cobjects(#12165) +#12166 = @"C_type$SystemExit" +py_cobjects(#12166) +#12167 = @"C_type$KeyboardInterrupt" +py_cobjects(#12167) +#12168 = @"C_type$ImportError" +py_cobjects(#12168) +#12169 = @"C_type$BlockingIOError" +py_cobjects(#12169) +py_cobjects(#11945) +#12170 = @"C_type$AttributeError" +py_cobjects(#12170) +#12171 = @"C_type$ValueError" +py_cobjects(#12171) +#12172 = @"C_type$ConnectionError" +py_cobjects(#12172) +#12173 = @"C_type$ChildProcessError" +py_cobjects(#12173) +#12174 = @"C_type$BrokenPipeError" +py_cobjects(#12174) +#12175 = @"C_type$ConnectionAbortedError" +py_cobjects(#12175) +#12176 = @"C_type$ConnectionRefusedError" +py_cobjects(#12176) +#12177 = @"C_type$ConnectionResetError" +py_cobjects(#12177) +#12178 = @"C_type$FileExistsError" +py_cobjects(#12178) +#12179 = @"C_type$FileNotFoundError" +py_cobjects(#12179) +#12180 = @"C_type$IsADirectoryError" +py_cobjects(#12180) +#12181 = @"C_type$NotADirectoryError" +py_cobjects(#12181) +#12182 = @"C_type$InterruptedError" +py_cobjects(#12182) +#12183 = @"C_type$PermissionError" +py_cobjects(#12183) +#12184 = @"C_type$ProcessLookupError" +py_cobjects(#12184) +#12185 = @"C_type$TimeoutError" +py_cobjects(#12185) +#12186 = @"C_type$EOFError" +py_cobjects(#12186) +#12187 = @"C_type$RuntimeError" +py_cobjects(#12187) +#12188 = @"C_type$NotImplementedError" +py_cobjects(#12188) +#12189 = @"C_type$NameError" +py_cobjects(#12189) +#12190 = @"C_type$UnboundLocalError" +py_cobjects(#12190) +#12191 = @"C_type$IndexError" +py_cobjects(#12191) +#12192 = @"C_type$LookupError" +py_cobjects(#12192) +#12193 = @"C_type$SyntaxError" +py_cobjects(#12193) +#12194 = @"C_type$IndentationError" +py_cobjects(#12194) +#12195 = @"C_type$TabError" +py_cobjects(#12195) +#12196 = @"C_type$KeyError" +py_cobjects(#12196) +#12197 = @"C_type$UnicodeError" +py_cobjects(#12197) +#12198 = @"C_type$UnicodeEncodeError" +py_cobjects(#12198) +#12199 = @"C_type$UnicodeDecodeError" +py_cobjects(#12199) +#12200 = @"C_type$UnicodeTranslateError" +py_cobjects(#12200) +#12201 = @"C_type$AssertionError" +py_cobjects(#12201) +#12202 = @"C_type$ArithmeticError" +py_cobjects(#12202) +#12203 = @"C_type$FloatingPointError" +py_cobjects(#12203) +#12204 = @"C_type$OverflowError" +py_cobjects(#12204) +#12205 = @"C_type$ZeroDivisionError" +py_cobjects(#12205) +#12206 = @"C_type$SystemError" +py_cobjects(#12206) +#12207 = @"C_type$ReferenceError" +py_cobjects(#12207) +#12208 = @"C_type$MemoryError" +py_cobjects(#12208) +#12209 = @"C_type$BufferError" +py_cobjects(#12209) +#12210 = @"C_type$Warning" +py_cobjects(#12210) +#12211 = @"C_type$UserWarning" +py_cobjects(#12211) +#12212 = @"C_type$DeprecationWarning" +py_cobjects(#12212) +#12213 = @"C_type$PendingDeprecationWarning" +py_cobjects(#12213) +#12214 = @"C_type$SyntaxWarning" +py_cobjects(#12214) +#12215 = @"C_type$RuntimeWarning" +py_cobjects(#12215) +#12216 = @"C_type$FutureWarning" +py_cobjects(#12216) +#12217 = @"C_type$ImportWarning" +py_cobjects(#12217) +#12218 = @"C_type$UnicodeWarning" +py_cobjects(#12218) +#12219 = @"C_type$BytesWarning" +py_cobjects(#12219) +#12220 = @"C_type$ResourceWarning" +py_cobjects(#12220) +py_cobjects(#11977) +#12221 = @"C_type$fieldnameiterator" +py_cobjects(#12221) +py_cobjects(#10678) +py_cobjects(#11986) +py_cobjects(#11987) +#12222 = @"C_type$_csv.Dialect$lineterminator" +py_cobjects(#12222) +py_cobjects(#11988) +py_cobjects(#11989) +py_cobjects(#11990) +py_cobjects(#11991) +py_cobjects(#11992) +py_cobjects(#11993) +py_cobjects(#11994) +#12223 = @"C_type$decimal.Context$rounding" +py_cobjects(#12223) +py_cobjects(#11995) +py_cobjects(#11996) +#12224 = @"C_type$decimal.Decimal$real" +py_cobjects(#12224) +py_cobjects(#11997) +#12225 = @"C_type$array.array$typecode" +py_cobjects(#12225) +py_cobjects(#11998) +#12226 = @"C_type$MultibyteIncrementalEncoder$3errors" +py_cobjects(#12226) +#12227 = @"C_type$MultibyteIncrementalDecoder$3errors" +py_cobjects(#12227) +#12228 = @"C_type$MultibyteStreamReader$3errors" +py_cobjects(#12228) +#12229 = @"C_type$MultibyteStreamWriter$3errors" +py_cobjects(#12229) +#12230 = @"C_type$Struct$3format" +py_cobjects(#12230) +py_cobjects(#11999) +py_cobjects(#12000) +py_cobjects(#12001) +py_cobjects(#12002) +py_cobjects(#12003) +py_cobjects(#12004) +py_cobjects(#12005) +py_cobjects(#12006) +py_cobjects(#12007) +py_cobjects(#12008) +py_cobjects(#12009) +#12231 = @"C_type$_pickle.Pickler$persistent_id" +py_cobjects(#12231) +py_cobjects(#12010) +#12232 = @"C_type$_pickle.Unpickler$persistent_load" +py_cobjects(#12232) +py_cobjects(#12011) +py_cobjects(#12012) +py_cobjects(#12013) +py_cobjects(#12014) +py_cobjects(#12015) +py_cobjects(#12016) +py_cobjects(#12017) +py_cobjects(#12018) +py_cobjects(#12019) +py_cobjects(#12020) +py_cobjects(#12021) +py_cobjects(#12022) +py_cobjects(#12023) +#12233 = @"C_type$datetime.time$tzinfo" +py_cobjects(#12233) +py_cobjects(#12024) +py_cobjects(#12025) +py_cobjects(#12026) +py_cobjects(#12027) +#12234 = @"C_type$datetime.datetime$tzinfo" +py_cobjects(#12234) +py_cobjects(#12028) +py_cobjects(#12029) +py_cobjects(#12030) +py_cobjects(#12031) +py_cobjects(#12032) +py_cobjects(#12033) +py_cobjects(#12034) +py_cobjects(#12035) +py_cobjects(#12036) +#12235 = @"C_type$ndarray$3format" +py_cobjects(#12235) +py_cobjects(#12037) +py_cobjects(#12038) +py_cobjects(#12039) +py_cobjects(#12040) +py_cobjects(#12041) +py_cobjects(#12042) +py_cobjects(#12043) +py_cobjects(#12044) +py_cobjects(#12045) +py_cobjects(#12046) +py_cobjects(#12047) +py_cobjects(#12048) +py_cobjects(#12049) +#12236 = @"C_type$_io.TextIOWrapper$name" +py_cobjects(#12236) +#12237 = @"C_type$_io.TextIOWrapper$closed" +py_cobjects(#12237) +py_cobjects(#12050) +#12238 = @"C_type$_io.TextIOWrapper$errors" +py_cobjects(#12238) +py_cobjects(#12051) +py_cobjects(#12052) +py_cobjects(#12053) +py_cobjects(#12054) +#12239 = @"C_type$_io.BufferedReader$closed" +py_cobjects(#12239) +#12240 = @"C_type$_io.BufferedReader$name" +py_cobjects(#12240) +#12241 = @"C_type$_io.BufferedReader$mode" +py_cobjects(#12241) +#12242 = @"C_type$_io.BufferedRandom$closed" +py_cobjects(#12242) +#12243 = @"C_type$_io.BufferedRandom$name" +py_cobjects(#12243) +#12244 = @"C_type$_io.BufferedRandom$mode" +py_cobjects(#12244) +#12245 = @"C_type$_io.BufferedWriter$closed" +py_cobjects(#12245) +#12246 = @"C_type$_io.BufferedWriter$name" +py_cobjects(#12246) +#12247 = @"C_type$_io.BufferedWriter$mode" +py_cobjects(#12247) +#12248 = @"C_type$_io.BufferedRWPair$closed" +py_cobjects(#12248) +py_cobjects(#12055) +py_cobjects(#12056) +py_cobjects(#12057) +py_cobjects(#12058) +py_cobjects(#12059) +#12249 = @"C_type$_io.FileIO$mode" +py_cobjects(#12249) +py_cobjects(#12060) +py_cobjects(#12061) +py_cobjects(#12062) +py_cobjects(#12063) +#12250 = @"C_type$_ctypes._Pointer$contents" +py_cobjects(#12250) +py_cobjects(#12064) +py_cobjects(#12065) +py_cobjects(#12066) +#12251 = @"C_type$_ctypes._SimpleCData$value" +py_cobjects(#12251) +py_cobjects(#12067) +py_cobjects(#12068) +py_cobjects(#12069) +#12252 = @"C_type$type$3__name__" +py_cobjects(#12252) +#12253 = @"C_type$type$3__qualname__" +py_cobjects(#12253) +#12254 = @"C_type$type$3__bases__" +py_cobjects(#12254) +py_cobjects(#12070) +#12255 = @"C_type$type$3__abstractmethods__" +py_cobjects(#12255) +py_cobjects(#12071) +py_cobjects(#12072) +#12256 = @"C_type$object$3__class__" +py_cobjects(#12256) +#12257 = @"C_type$frame$3f_locals" +py_cobjects(#12257) +py_cobjects(#12073) +py_cobjects(#12074) +py_cobjects(#12075) +py_cobjects(#12076) +py_cobjects(#12077) +py_cobjects(#12078) +py_cobjects(#12079) +#12258 = @"C_type$builtin_function_or_method$3__name__" +py_cobjects(#12258) +#12259 = @"C_type$builtin_function_or_method$3__qualname__" +py_cobjects(#12259) +py_cobjects(#12080) +#12260 = @"C_type$method-wrapper$__objclass__" +py_cobjects(#12260) +#12261 = @"C_type$method-wrapper$__name__" +py_cobjects(#12261) +#12262 = @"C_type$method-wrapper$__qualname__" +py_cobjects(#12262) +py_cobjects(#12081) +py_cobjects(#12082) +py_cobjects(#12083) +#12263 = @"C_type$classmethod_descriptor$3__qualname__" +py_cobjects(#12263) +#12264 = @"C_type$method_descriptor$3__qualname__" +py_cobjects(#12264) +py_cobjects(#12084) +#12265 = @"C_type$member_descriptor$3__qualname__" +py_cobjects(#12265) +py_cobjects(#12085) +#12266 = @"C_type$getset_descriptor$3__qualname__" +py_cobjects(#12266) +py_cobjects(#12086) +#12267 = @"C_type$wrapper_descriptor$3__qualname__" +py_cobjects(#12267) +py_cobjects(#12087) +#12268 = @"C_type$generator$3__name__" +py_cobjects(#12268) +py_cobjects(#12088) +py_cobjects(#12089) +#12269 = @"C_type$stderrprinter$3mode" +py_cobjects(#12269) +py_cobjects(#12090) +py_cobjects(#12091) +py_cobjects(#12092) +py_cobjects(#12093) +py_cobjects(#12094) +py_cobjects(#12095) +py_cobjects(#12096) +py_cobjects(#12097) +#12270 = @"C_type$method$3__doc__" +py_cobjects(#12270) +#12271 = @"C_type$instancemethod$3__doc__" +py_cobjects(#12271) +#12272 = @"C_type$function$3__code__" +py_cobjects(#12272) +py_cobjects(#12098) +py_cobjects(#12099) +#12273 = @"C_type$function$3__annotations__" +py_cobjects(#12273) +py_cobjects(#12100) +#12274 = @"C_type$function$3__name__" +py_cobjects(#12274) +#12275 = @"C_type$function$3__qualname__" +py_cobjects(#12275) +py_cobjects(#12101) +py_cobjects(#12102) +py_cobjects(#12103) +py_cobjects(#12104) +#12276 = @"C_type$cell$3cell_contents" +py_cobjects(#12276) +py_cobjects(#12105) +py_cobjects(#12106) +py_cobjects(#12107) +py_cobjects(#12108) +#12277 = @"C_type$memoryview$3format" +py_cobjects(#12277) +py_cobjects(#12109) +py_cobjects(#12110) +py_cobjects(#12111) +py_cobjects(#12112) +py_cobjects(#12113) +py_cobjects(#12114) +py_cobjects(#12115) +py_cobjects(#10000) +py_cobjects(#10002) +py_cobjects(#10003) +py_cobjects(#10004) +py_cobjects(#10006) +py_cobjects(#10007) +#12278 = @"C_builtin_function_or_method$time.gmtime" +py_cobjects(#12278) +#12279 = @"C_builtin_function_or_method$time.localtime" +py_cobjects(#12279) +#12280 = @"C_builtin_function_or_method$time.asctime" +py_cobjects(#12280) +#12281 = @"C_builtin_function_or_method$time.ctime" +py_cobjects(#12281) +py_cobjects(#10008) +py_cobjects(#10009) +#12282 = @"C_builtin_function_or_method$time.strptime" +py_cobjects(#12282) +py_cobjects(#10011) +py_cobjects(#10012) +py_cobjects(#10013) +py_cobjects(#10014) +py_cobjects(#11508) +py_cobjects(#10015) +py_cobjects(#10017) +py_cobjects(#10019) +py_cobjects(#10021) +py_cobjects(#10022) +py_cobjects(#11509) +py_cobjects(#10023) +py_cobjects(#10025) +py_cobjects(#10026) +py_cobjects(#10027) +py_cobjects(#10029) +#12283 = @"C_builtin_function_or_method$parser.isexpr" +py_cobjects(#12283) +#12284 = @"C_builtin_function_or_method$parser.issuite" +py_cobjects(#12284) +py_cobjects(#10031) +py_cobjects(#10032) +py_cobjects(#10033) +py_cobjects(#10034) +py_cobjects(#10035) +py_cobjects(#10036) +py_cobjects(#10038) +py_cobjects(#10040) +py_cobjects(#10041) +py_cobjects(#10043) +py_cobjects(#10044) +py_cobjects(#10045) +#12285 = @"C_builtin_function_or_method$array._array_reconstructor" +py_cobjects(#12285) +py_cobjects(#10047) +py_cobjects(#10048) +py_cobjects(#10049) +py_cobjects(#10051) +py_cobjects(#10052) +py_cobjects(#10053) +py_cobjects(#10054) +py_cobjects(#10055) +py_cobjects(#10056) +py_cobjects(#10057) +py_cobjects(#10058) +py_cobjects(#10059) +py_cobjects(#10060) +py_cobjects(#11510) +py_cobjects(#11511) +py_cobjects(#11512) +py_cobjects(#11513) +py_cobjects(#11514) +py_cobjects(#11515) +py_cobjects(#10061) +py_cobjects(#10063) +py_cobjects(#10064) +py_cobjects(#10065) +py_cobjects(#10066) +py_cobjects(#10067) +py_cobjects(#10068) +py_cobjects(#10069) +py_cobjects(#10070) +#12286 = @"C_builtin_function_or_method$signal.default_int_handler" +py_cobjects(#12286) +py_cobjects(#10071) +py_cobjects(#10072) +py_cobjects(#10075) +py_cobjects(#10076) +py_cobjects(#11516) +py_cobjects(#10077) +py_cobjects(#10078) +py_cobjects(#10079) +py_cobjects(#10080) +py_cobjects(#10082) +py_cobjects(#10083) +py_cobjects(#10084) +py_cobjects(#10085) +py_cobjects(#10086) +py_cobjects(#10087) +py_cobjects(#10088) +py_cobjects(#10089) +py_cobjects(#10090) +py_cobjects(#10091) +py_cobjects(#10092) +py_cobjects(#10093) +py_cobjects(#10094) +py_cobjects(#10095) +py_cobjects(#10096) +py_cobjects(#10097) +py_cobjects(#10098) +py_cobjects(#10099) +py_cobjects(#10100) +py_cobjects(#10101) +py_cobjects(#10102) +py_cobjects(#10103) +py_cobjects(#10104) +py_cobjects(#10105) +py_cobjects(#10106) +py_cobjects(#10107) +py_cobjects(#10108) +py_cobjects(#10109) +py_cobjects(#10110) +py_cobjects(#10112) +py_cobjects(#10113) +py_cobjects(#10114) +py_cobjects(#10115) +py_cobjects(#10116) +py_cobjects(#10117) +py_cobjects(#10118) +py_cobjects(#10119) +py_cobjects(#10120) +py_cobjects(#10121) +py_cobjects(#10122) +py_cobjects(#10123) +py_cobjects(#10125) +#12287 = @"C_builtin_function_or_method$_thread.exit_thread" +py_cobjects(#12287) +#12288 = @"C_builtin_function_or_method$_thread.exit" +py_cobjects(#12288) +py_cobjects(#10126) +py_cobjects(#10127) +py_cobjects(#10128) +py_cobjects(#10129) +py_cobjects(#10130) +#12289 = @"C_builtin_function_or_method$_codecs.lookup" +py_cobjects(#12289) +#12290 = @"C_builtin_function_or_method$_codecs.encode" +py_cobjects(#12290) +#12291 = @"C_builtin_function_or_method$_codecs.decode" +py_cobjects(#12291) +py_cobjects(#10131) +py_cobjects(#10132) +py_cobjects(#10133) +py_cobjects(#10134) +py_cobjects(#10135) +py_cobjects(#10136) +py_cobjects(#10137) +py_cobjects(#10138) +py_cobjects(#10139) +py_cobjects(#10140) +py_cobjects(#10141) +py_cobjects(#10142) +py_cobjects(#10143) +py_cobjects(#10144) +py_cobjects(#10145) +py_cobjects(#10146) +py_cobjects(#10147) +py_cobjects(#10148) +py_cobjects(#10149) +py_cobjects(#10150) +py_cobjects(#10151) +py_cobjects(#10152) +py_cobjects(#10153) +py_cobjects(#10154) +py_cobjects(#10155) +py_cobjects(#10156) +py_cobjects(#10157) +py_cobjects(#10158) +py_cobjects(#10159) +py_cobjects(#10160) +py_cobjects(#10161) +py_cobjects(#10162) +py_cobjects(#10163) +py_cobjects(#10164) +py_cobjects(#10165) +#12292 = @"C_builtin_function_or_method$_codecs.lookup_error" +py_cobjects(#12292) +py_cobjects(#10166) +py_cobjects(#10167) +#12293 = @"C_builtin_function_or_method$xxlimited.new" +py_cobjects(#12293) +py_cobjects(#10168) +py_cobjects(#10170) +py_cobjects(#10171) +py_cobjects(#10172) +py_cobjects(#10173) +py_cobjects(#10174) +py_cobjects(#10175) +py_cobjects(#10176) +py_cobjects(#10177) +py_cobjects(#10178) +py_cobjects(#10179) +py_cobjects(#10180) +py_cobjects(#10181) +py_cobjects(#10182) +py_cobjects(#10183) +py_cobjects(#10184) +py_cobjects(#10185) +py_cobjects(#10186) +py_cobjects(#10187) +py_cobjects(#10188) +py_cobjects(#10190) +py_cobjects(#10192) +py_cobjects(#10193) +py_cobjects(#10194) +py_cobjects(#10195) +py_cobjects(#10196) +py_cobjects(#10197) +py_cobjects(#10198) +py_cobjects(#10199) +py_cobjects(#10200) +py_cobjects(#10201) +py_cobjects(#10202) +py_cobjects(#10203) +py_cobjects(#10204) +py_cobjects(#10205) +py_cobjects(#10206) +#12294 = @"C_builtin_function_or_method$faulthandler._stack_overflow" +py_cobjects(#12294) +#12295 = @"C_builtin_function_or_method$_functools.reduce" +py_cobjects(#12295) +py_cobjects(#10207) +py_cobjects(#10209) +py_cobjects(#10210) +py_cobjects(#10211) +py_cobjects(#10212) +py_cobjects(#10213) +py_cobjects(#10214) +py_cobjects(#10215) +py_cobjects(#10216) +py_cobjects(#10217) +py_cobjects(#10218) +py_cobjects(#10219) +py_cobjects(#11517) +#12296 = @"C_builtin_function_or_method$grp.getgrnam" +py_cobjects(#12296) +py_cobjects(#10220) +py_cobjects(#10221) +py_cobjects(#11518) +py_cobjects(#11519) +py_cobjects(#11520) +py_cobjects(#10222) +py_cobjects(#10224) +py_cobjects(#10225) +py_cobjects(#10227) +py_cobjects(#10228) +py_cobjects(#10229) +py_cobjects(#10230) +py_cobjects(#10231) +py_cobjects(#10232) +py_cobjects(#10233) +py_cobjects(#10234) +py_cobjects(#10235) +py_cobjects(#10236) +py_cobjects(#10237) +py_cobjects(#10238) +py_cobjects(#10239) +py_cobjects(#10240) +py_cobjects(#10241) +py_cobjects(#10242) +py_cobjects(#10243) +py_cobjects(#10244) +py_cobjects(#10245) +py_cobjects(#10246) +py_cobjects(#10247) +py_cobjects(#10248) +#12297 = @"C_builtin_function_or_method$_sre.compile" +py_cobjects(#12297) +py_cobjects(#10250) +py_cobjects(#10251) +py_cobjects(#10252) +py_cobjects(#10253) +py_cobjects(#10254) +py_cobjects(#10255) +py_cobjects(#10256) +py_cobjects(#10257) +py_cobjects(#10258) +#12298 = @"C_builtin_function_or_method$binascii.b2a_uu" +py_cobjects(#12298) +#12299 = @"C_builtin_function_or_method$binascii.a2b_base64" +py_cobjects(#12299) +#12300 = @"C_builtin_function_or_method$binascii.b2a_base64" +py_cobjects(#12300) +py_cobjects(#10259) +#12301 = @"C_builtin_function_or_method$binascii.b2a_hqx" +py_cobjects(#12301) +py_cobjects(#10260) +py_cobjects(#10261) +py_cobjects(#10262) +py_cobjects(#10263) +#12302 = @"C_builtin_function_or_method$binascii.rlecode_hqx" +py_cobjects(#12302) +py_cobjects(#10264) +py_cobjects(#10265) +py_cobjects(#10266) +py_cobjects(#10267) +py_cobjects(#10268) +py_cobjects(#10269) +py_cobjects(#10270) +py_cobjects(#10271) +py_cobjects(#10272) +py_cobjects(#10273) +py_cobjects(#10274) +py_cobjects(#10275) +py_cobjects(#10276) +py_cobjects(#10277) +py_cobjects(#10278) +py_cobjects(#10279) +py_cobjects(#10280) +py_cobjects(#10281) +py_cobjects(#10282) +#12303 = @"C_builtin_function_or_method$posix.lstat" +py_cobjects(#12303) +py_cobjects(#10283) +py_cobjects(#10284) +py_cobjects(#10285) +py_cobjects(#10286) +py_cobjects(#10287) +py_cobjects(#10288) +py_cobjects(#10289) +py_cobjects(#10290) +#12304 = @"C_builtin_function_or_method$posix.stat" +py_cobjects(#12304) +py_cobjects(#10291) +py_cobjects(#10292) +py_cobjects(#10293) +py_cobjects(#10294) +#12305 = @"C_builtin_function_or_method$posix.uname" +py_cobjects(#12305) +py_cobjects(#10295) +py_cobjects(#10296) +py_cobjects(#10297) +#12306 = @"C_builtin_function_or_method$posix.times" +py_cobjects(#12306) +#12307 = @"C_builtin_function_or_method$posix._exit" +py_cobjects(#12307) +#12308 = @"C_builtin_function_or_method$posix.execv" +py_cobjects(#12308) +#12309 = @"C_builtin_function_or_method$posix.execve" +py_cobjects(#12309) +py_cobjects(#10298) +py_cobjects(#10299) +py_cobjects(#10300) +#12310 = @"C_builtin_function_or_method$posix.sched_getparam" +py_cobjects(#12310) +py_cobjects(#10301) +py_cobjects(#10302) +py_cobjects(#10303) +py_cobjects(#10304) +py_cobjects(#10305) +py_cobjects(#10306) +py_cobjects(#10307) +py_cobjects(#10308) +py_cobjects(#10309) +py_cobjects(#10310) +py_cobjects(#10311) +py_cobjects(#10312) +py_cobjects(#10313) +py_cobjects(#10314) +py_cobjects(#10315) +py_cobjects(#10316) +py_cobjects(#10317) +py_cobjects(#10318) +py_cobjects(#10319) +py_cobjects(#10320) +py_cobjects(#10321) +py_cobjects(#10322) +py_cobjects(#10323) +py_cobjects(#10324) +py_cobjects(#10325) +py_cobjects(#10326) +py_cobjects(#10327) +py_cobjects(#10328) +py_cobjects(#10329) +py_cobjects(#10330) +py_cobjects(#10331) +py_cobjects(#10332) +py_cobjects(#10333) +py_cobjects(#10334) +py_cobjects(#10335) +py_cobjects(#10336) +py_cobjects(#10337) +py_cobjects(#10338) +py_cobjects(#10339) +py_cobjects(#10340) +py_cobjects(#10341) +py_cobjects(#10342) +py_cobjects(#10343) +py_cobjects(#10344) +py_cobjects(#10345) +py_cobjects(#10346) +py_cobjects(#10347) +py_cobjects(#10348) +py_cobjects(#10349) +#12311 = @"C_builtin_function_or_method$posix.read" +py_cobjects(#12311) +py_cobjects(#10350) +#12312 = @"C_builtin_function_or_method$posix.pread" +py_cobjects(#12312) +py_cobjects(#10351) +py_cobjects(#10352) +py_cobjects(#10353) +py_cobjects(#10354) +#12313 = @"C_builtin_function_or_method$posix.fstat" +py_cobjects(#12313) +py_cobjects(#10355) +py_cobjects(#10356) +py_cobjects(#10357) +py_cobjects(#10358) +py_cobjects(#10359) +py_cobjects(#10360) +py_cobjects(#10361) +py_cobjects(#10362) +py_cobjects(#10363) +py_cobjects(#10364) +py_cobjects(#10365) +py_cobjects(#10366) +py_cobjects(#10367) +py_cobjects(#10368) +py_cobjects(#10369) +py_cobjects(#10370) +py_cobjects(#10371) +py_cobjects(#10372) +py_cobjects(#10373) +py_cobjects(#10374) +py_cobjects(#10375) +py_cobjects(#10376) +py_cobjects(#10377) +py_cobjects(#10378) +py_cobjects(#10379) +py_cobjects(#10380) +py_cobjects(#10381) +#12314 = @"C_builtin_function_or_method$posix.fstatvfs" +py_cobjects(#12314) +#12315 = @"C_builtin_function_or_method$posix.statvfs" +py_cobjects(#12315) +py_cobjects(#10382) +py_cobjects(#10383) +py_cobjects(#10384) +py_cobjects(#10385) +#12316 = @"C_builtin_function_or_method$posix.abort" +py_cobjects(#12316) +py_cobjects(#10386) +py_cobjects(#10387) +py_cobjects(#10388) +py_cobjects(#10389) +py_cobjects(#10390) +py_cobjects(#10391) +py_cobjects(#10392) +#12317 = @"C_builtin_function_or_method$posix.getxattr" +py_cobjects(#12317) +py_cobjects(#10393) +py_cobjects(#10394) +#12318 = @"C_builtin_function_or_method$posix.get_terminal_size" +py_cobjects(#12318) +#12319 = @"C_builtin_function_or_method$atexit.register" +py_cobjects(#12319) +py_cobjects(#10395) +py_cobjects(#10396) +py_cobjects(#10397) +py_cobjects(#10398) +py_cobjects(#10399) +py_cobjects(#10400) +#12320 = @"C_builtin_function_or_method$_heapq.heappushpop" +py_cobjects(#12320) +py_cobjects(#11521) +#12321 = @"C_builtin_function_or_method$_heapq.heapreplace" +py_cobjects(#12321) +py_cobjects(#10401) +py_cobjects(#10402) +py_cobjects(#10403) +py_cobjects(#10404) +#12322 = @"C_builtin_function_or_method$_testbuffer.get_pointer" +py_cobjects(#12322) +py_cobjects(#10405) +py_cobjects(#10406) +py_cobjects(#10408) +#12323 = @"C_builtin_function_or_method$_testbuffer.is_contiguous" +py_cobjects(#12323) +#12324 = @"C_builtin_function_or_method$_testbuffer.cmp_contig" +py_cobjects(#12324) +py_cobjects(#10409) +py_cobjects(#10410) +#12325 = @"C_builtin_function_or_method$io.open" +py_cobjects(#12325) +py_cobjects(#10412) +py_cobjects(#10413) +py_cobjects(#10414) +py_cobjects(#10415) +py_cobjects(#10416) +#12326 = @"C_builtin_function_or_method$operator.is_" +py_cobjects(#12326) +#12327 = @"C_builtin_function_or_method$operator.is_not" +py_cobjects(#12327) +py_cobjects(#11522) +py_cobjects(#11523) +#12328 = @"C_builtin_function_or_method$operator.add" +py_cobjects(#12328) +#12329 = @"C_builtin_function_or_method$operator.__add__" +py_cobjects(#12329) +#12330 = @"C_builtin_function_or_method$operator.sub" +py_cobjects(#12330) +#12331 = @"C_builtin_function_or_method$operator.__sub__" +py_cobjects(#12331) +#12332 = @"C_builtin_function_or_method$operator.mul" +py_cobjects(#12332) +#12333 = @"C_builtin_function_or_method$operator.__mul__" +py_cobjects(#12333) +#12334 = @"C_builtin_function_or_method$operator.floordiv" +py_cobjects(#12334) +#12335 = @"C_builtin_function_or_method$operator.__floordiv__" +py_cobjects(#12335) +#12336 = @"C_builtin_function_or_method$operator.truediv" +py_cobjects(#12336) +#12337 = @"C_builtin_function_or_method$operator.__truediv__" +py_cobjects(#12337) +#12338 = @"C_builtin_function_or_method$operator.mod" +py_cobjects(#12338) +#12339 = @"C_builtin_function_or_method$operator.__mod__" +py_cobjects(#12339) +py_cobjects(#11524) +py_cobjects(#11525) +py_cobjects(#11526) +py_cobjects(#11527) +py_cobjects(#11528) +py_cobjects(#11529) +py_cobjects(#11530) +py_cobjects(#11531) +py_cobjects(#11532) +py_cobjects(#11533) +#12340 = @"C_builtin_function_or_method$operator.lshift" +py_cobjects(#12340) +#12341 = @"C_builtin_function_or_method$operator.__lshift__" +py_cobjects(#12341) +#12342 = @"C_builtin_function_or_method$operator.rshift" +py_cobjects(#12342) +#12343 = @"C_builtin_function_or_method$operator.__rshift__" +py_cobjects(#12343) +py_cobjects(#10417) +py_cobjects(#10418) +#12344 = @"C_builtin_function_or_method$operator.and_" +py_cobjects(#12344) +#12345 = @"C_builtin_function_or_method$operator.__and__" +py_cobjects(#12345) +#12346 = @"C_builtin_function_or_method$operator.xor" +py_cobjects(#12346) +#12347 = @"C_builtin_function_or_method$operator.__xor__" +py_cobjects(#12347) +#12348 = @"C_builtin_function_or_method$operator.or_" +py_cobjects(#12348) +#12349 = @"C_builtin_function_or_method$operator.__or__" +py_cobjects(#12349) +#12350 = @"C_builtin_function_or_method$operator.iadd" +py_cobjects(#12350) +#12351 = @"C_builtin_function_or_method$operator.__iadd__" +py_cobjects(#12351) +#12352 = @"C_builtin_function_or_method$operator.isub" +py_cobjects(#12352) +#12353 = @"C_builtin_function_or_method$operator.__isub__" +py_cobjects(#12353) +#12354 = @"C_builtin_function_or_method$operator.imul" +py_cobjects(#12354) +#12355 = @"C_builtin_function_or_method$operator.__imul__" +py_cobjects(#12355) +#12356 = @"C_builtin_function_or_method$operator.ifloordiv" +py_cobjects(#12356) +#12357 = @"C_builtin_function_or_method$operator.__ifloordiv__" +py_cobjects(#12357) +#12358 = @"C_builtin_function_or_method$operator.itruediv" +py_cobjects(#12358) +#12359 = @"C_builtin_function_or_method$operator.__itruediv__" +py_cobjects(#12359) +#12360 = @"C_builtin_function_or_method$operator.imod" +py_cobjects(#12360) +#12361 = @"C_builtin_function_or_method$operator.__imod__" +py_cobjects(#12361) +#12362 = @"C_builtin_function_or_method$operator.ilshift" +py_cobjects(#12362) +#12363 = @"C_builtin_function_or_method$operator.__ilshift__" +py_cobjects(#12363) +#12364 = @"C_builtin_function_or_method$operator.irshift" +py_cobjects(#12364) +#12365 = @"C_builtin_function_or_method$operator.__irshift__" +py_cobjects(#12365) +#12366 = @"C_builtin_function_or_method$operator.iand" +py_cobjects(#12366) +#12367 = @"C_builtin_function_or_method$operator.__iand__" +py_cobjects(#12367) +#12368 = @"C_builtin_function_or_method$operator.ixor" +py_cobjects(#12368) +#12369 = @"C_builtin_function_or_method$operator.__ixor__" +py_cobjects(#12369) +#12370 = @"C_builtin_function_or_method$operator.ior" +py_cobjects(#12370) +#12371 = @"C_builtin_function_or_method$operator.__ior__" +py_cobjects(#12371) +#12372 = @"C_builtin_function_or_method$operator.concat" +py_cobjects(#12372) +#12373 = @"C_builtin_function_or_method$operator.__concat__" +py_cobjects(#12373) +#12374 = @"C_builtin_function_or_method$operator.iconcat" +py_cobjects(#12374) +#12375 = @"C_builtin_function_or_method$operator.__iconcat__" +py_cobjects(#12375) +#12376 = @"C_builtin_function_or_method$operator.getitem" +py_cobjects(#12376) +#12377 = @"C_builtin_function_or_method$operator.__getitem__" +py_cobjects(#12377) +py_cobjects(#10419) +py_cobjects(#10420) +py_cobjects(#10421) +py_cobjects(#10422) +#12378 = @"C_builtin_function_or_method$operator.pow" +py_cobjects(#12378) +#12379 = @"C_builtin_function_or_method$operator.__pow__" +py_cobjects(#12379) +#12380 = @"C_builtin_function_or_method$operator.ipow" +py_cobjects(#12380) +#12381 = @"C_builtin_function_or_method$operator.__ipow__" +py_cobjects(#12381) +#12382 = @"C_builtin_function_or_method$operator.lt" +py_cobjects(#12382) +#12383 = @"C_builtin_function_or_method$operator.__lt__" +py_cobjects(#12383) +#12384 = @"C_builtin_function_or_method$operator.le" +py_cobjects(#12384) +#12385 = @"C_builtin_function_or_method$operator.__le__" +py_cobjects(#12385) +#12386 = @"C_builtin_function_or_method$operator.eq" +py_cobjects(#12386) +#12387 = @"C_builtin_function_or_method$operator.__eq__" +py_cobjects(#12387) +#12388 = @"C_builtin_function_or_method$operator.ne" +py_cobjects(#12388) +#12389 = @"C_builtin_function_or_method$operator.__ne__" +py_cobjects(#12389) +#12390 = @"C_builtin_function_or_method$operator.gt" +py_cobjects(#12390) +#12391 = @"C_builtin_function_or_method$operator.__gt__" +py_cobjects(#12391) +#12392 = @"C_builtin_function_or_method$operator.ge" +py_cobjects(#12392) +#12393 = @"C_builtin_function_or_method$operator.__ge__" +py_cobjects(#12393) +py_cobjects(#10423) +py_cobjects(#10424) +py_cobjects(#10425) +py_cobjects(#10426) +py_cobjects(#10427) +py_cobjects(#10428) +#12394 = @"C_builtin_function_or_method$readline.get_line_buffer" +py_cobjects(#12394) +py_cobjects(#10429) +py_cobjects(#10430) +py_cobjects(#10431) +py_cobjects(#10432) +py_cobjects(#10433) +py_cobjects(#10434) +py_cobjects(#10435) +py_cobjects(#10436) +py_cobjects(#10437) +py_cobjects(#10438) +py_cobjects(#10439) +py_cobjects(#10440) +#12395 = @"C_builtin_function_or_method$readline.get_begidx" +py_cobjects(#12395) +#12396 = @"C_builtin_function_or_method$readline.get_endidx" +py_cobjects(#12396) +py_cobjects(#10441) +py_cobjects(#10442) +py_cobjects(#10443) +py_cobjects(#10444) +#12397 = @"C_builtin_function_or_method$readline.get_completer_delims" +py_cobjects(#12397) +py_cobjects(#10445) +py_cobjects(#10446) +py_cobjects(#10447) +py_cobjects(#10448) +#12398 = @"C_builtin_function_or_method$_testcapi.raise_exception" +py_cobjects(#12398) +#12399 = @"C_builtin_function_or_method$_testcapi.raise_memoryerror" +py_cobjects(#12399) +py_cobjects(#10449) +py_cobjects(#10450) +py_cobjects(#10451) +py_cobjects(#10452) +py_cobjects(#10453) +py_cobjects(#10454) +py_cobjects(#10455) +py_cobjects(#10456) +py_cobjects(#10457) +py_cobjects(#10458) +py_cobjects(#10459) +py_cobjects(#10460) +py_cobjects(#10461) +py_cobjects(#10462) +py_cobjects(#10463) +py_cobjects(#10464) +py_cobjects(#10465) +py_cobjects(#10466) +py_cobjects(#10467) +py_cobjects(#10468) +py_cobjects(#10469) +py_cobjects(#10470) +py_cobjects(#10471) +py_cobjects(#10472) +py_cobjects(#10473) +py_cobjects(#10474) +py_cobjects(#10475) +py_cobjects(#10476) +py_cobjects(#10477) +py_cobjects(#10478) +py_cobjects(#10479) +py_cobjects(#10480) +py_cobjects(#10481) +py_cobjects(#10482) +py_cobjects(#10483) +py_cobjects(#10484) +py_cobjects(#10485) +py_cobjects(#10486) +py_cobjects(#10487) +py_cobjects(#10488) +py_cobjects(#10489) +py_cobjects(#10490) +py_cobjects(#10491) +py_cobjects(#10492) +py_cobjects(#10493) +py_cobjects(#10494) +py_cobjects(#10495) +py_cobjects(#10496) +py_cobjects(#10497) +py_cobjects(#10498) +py_cobjects(#10499) +py_cobjects(#10500) +#12400 = @"C_builtin_function_or_method$_testcapi.codec_incrementalencoder" +py_cobjects(#12400) +#12401 = @"C_builtin_function_or_method$_testcapi.codec_incrementaldecoder" +py_cobjects(#12401) +py_cobjects(#10501) +py_cobjects(#10502) +py_cobjects(#10503) +py_cobjects(#10504) +py_cobjects(#10505) +py_cobjects(#10506) +#12402 = @"C_builtin_function_or_method$_testcapi.unicode_encodedecimal" +py_cobjects(#12402) +#12403 = @"C_builtin_function_or_method$_testcapi.unicode_transformdecimaltoascii" +py_cobjects(#12403) +py_cobjects(#10507) +py_cobjects(#10508) +py_cobjects(#10509) +py_cobjects(#10510) +py_cobjects(#10511) +py_cobjects(#10512) +py_cobjects(#10513) +py_cobjects(#10514) +py_cobjects(#10515) +py_cobjects(#10516) +py_cobjects(#10518) +#12404 = @"C_builtin_function_or_method$_testcapi.crash_no_current_thread" +py_cobjects(#12404) +py_cobjects(#10519) +py_cobjects(#10520) +py_cobjects(#10521) +py_cobjects(#10522) +py_cobjects(#10523) +py_cobjects(#11534) +py_cobjects(#10524) +py_cobjects(#10525) +py_cobjects(#10527) +#12405 = @"C_builtin_function_or_method$spwd.getspnam" +py_cobjects(#12405) +py_cobjects(#10529) +py_cobjects(#10530) +py_cobjects(#10532) +py_cobjects(#10533) +py_cobjects(#11535) +py_cobjects(#11536) +py_cobjects(#11537) +py_cobjects(#10534) +py_cobjects(#10535) +py_cobjects(#10536) +py_cobjects(#10537) +py_cobjects(#10538) +py_cobjects(#10539) +py_cobjects(#10540) +py_cobjects(#10541) +py_cobjects(#10543) +py_cobjects(#10544) +py_cobjects(#10545) +py_cobjects(#11538) +py_cobjects(#11539) +py_cobjects(#11540) +py_cobjects(#10546) +py_cobjects(#10547) +py_cobjects(#11541) +#12406 = @"C_builtin_function_or_method$pwd.getpwnam" +py_cobjects(#12406) +py_cobjects(#10548) +py_cobjects(#11542) +py_cobjects(#10549) +py_cobjects(#10550) +py_cobjects(#11543) +py_cobjects(#10551) +py_cobjects(#11544) +py_cobjects(#11545) +py_cobjects(#10552) +py_cobjects(#10553) +py_cobjects(#10554) +py_cobjects(#11547) +py_cobjects(#11548) +py_cobjects(#10555) +py_cobjects(#10556) +py_cobjects(#11549) +py_cobjects(#10557) +py_cobjects(#11550) +py_cobjects(#11551) +py_cobjects(#11552) +py_cobjects(#10558) +py_cobjects(#11553) +py_cobjects(#11554) +py_cobjects(#11555) +py_cobjects(#11556) +py_cobjects(#11557) +py_cobjects(#10559) +py_cobjects(#11558) +py_cobjects(#11559) +py_cobjects(#10560) +py_cobjects(#11560) +py_cobjects(#11561) +py_cobjects(#10561) +py_cobjects(#10562) +py_cobjects(#10563) +py_cobjects(#11562) +py_cobjects(#11563) +py_cobjects(#11564) +py_cobjects(#10564) +py_cobjects(#11565) +py_cobjects(#10565) +py_cobjects(#10566) +py_cobjects(#10567) +py_cobjects(#10568) +py_cobjects(#10569) +py_cobjects(#10570) +py_cobjects(#10571) +py_cobjects(#10572) +py_cobjects(#10573) +py_cobjects(#10574) +py_cobjects(#10575) +py_cobjects(#11566) +py_cobjects(#10576) +py_cobjects(#10577) +py_cobjects(#10578) +py_cobjects(#10579) +py_cobjects(#10580) +py_cobjects(#11567) +py_cobjects(#11568) +py_cobjects(#11569) +py_cobjects(#11570) +py_cobjects(#11571) +py_cobjects(#11572) +py_cobjects(#10581) +py_cobjects(#10583) +py_cobjects(#10585) +py_cobjects(#10587) +py_cobjects(#11573) +py_cobjects(#10588) +py_cobjects(#10589) +py_cobjects(#10590) +py_cobjects(#10591) +py_cobjects(#10592) +py_cobjects(#11574) +py_cobjects(#10593) +py_cobjects(#10594) +py_cobjects(#10595) +py_cobjects(#10596) +py_cobjects(#10597) +py_cobjects(#10598) +py_cobjects(#10599) +py_cobjects(#10600) +py_cobjects(#11575) +py_cobjects(#10601) +py_cobjects(#11576) +py_cobjects(#10602) +py_cobjects(#10603) +py_cobjects(#10604) +py_cobjects(#10605) +py_cobjects(#10606) +py_cobjects(#10607) +py_cobjects(#10608) +py_cobjects(#10609) +py_cobjects(#10610) +py_cobjects(#11577) +py_cobjects(#10611) +py_cobjects(#10612) +py_cobjects(#10613) +py_cobjects(#10614) +py_cobjects(#10615) +py_cobjects(#10616) +py_cobjects(#10617) +py_cobjects(#10618) +py_cobjects(#10619) +py_cobjects(#10620) +py_cobjects(#10621) +#12407 = @"C_builtin_function_or_method$sys.exit" +py_cobjects(#12407) +#12408 = @"C_builtin_function_or_method$sys.getdefaultencoding" +py_cobjects(#12408) +py_cobjects(#10622) +#12409 = @"C_builtin_function_or_method$sys.getfilesystemencoding" +py_cobjects(#12409) +py_cobjects(#10623) +py_cobjects(#10624) +py_cobjects(#11578) +py_cobjects(#10625) +#12410 = @"C_builtin_function_or_method$sys.intern" +py_cobjects(#12410) +py_cobjects(#10627) +py_cobjects(#10628) +py_cobjects(#10629) +py_cobjects(#10630) +py_cobjects(#10631) +py_cobjects(#10632) +py_cobjects(#10633) +py_cobjects(#10634) +py_cobjects(#10635) +py_cobjects(#10636) +py_cobjects(#11579) +py_cobjects(#10637) +#12411 = @"C_builtin_function_or_method$marshal.dump" +py_cobjects(#12411) +py_cobjects(#10638) +#12412 = @"C_builtin_function_or_method$marshal.dumps" +py_cobjects(#12412) +py_cobjects(#10639) +py_cobjects(#10640) +py_cobjects(#10641) +py_cobjects(#10642) +py_cobjects(#10643) +py_cobjects(#10644) +py_cobjects(#10645) +py_cobjects(#10646) +py_cobjects(#10648) +py_cobjects(#10649) +py_cobjects(#10650) +py_cobjects(#10651) +py_cobjects(#10652) +#12413 = @"C_builtin_function_or_method$builtins.__build_class__" +py_cobjects(#12413) +py_cobjects(#11580) +py_cobjects(#11581) +py_cobjects(#10653) +py_cobjects(#10654) +py_cobjects(#11582) +py_cobjects(#11583) +py_cobjects(#10655) +py_cobjects(#11584) +py_cobjects(#10656) +py_cobjects(#10657) +#12414 = @"C_builtin_function_or_method$builtins.dir" +py_cobjects(#12414) +#12415 = @"C_builtin_function_or_method$builtins.divmod" +py_cobjects(#12415) +#12416 = @"C_builtin_function_or_method$builtins.eval" +py_cobjects(#12416) +py_cobjects(#10658) +py_cobjects(#11585) +#12417 = @"C_builtin_function_or_method$builtins.getattr" +py_cobjects(#12417) +py_cobjects(#10659) +py_cobjects(#10660) +py_cobjects(#10661) +py_cobjects(#11586) +py_cobjects(#10662) +#12418 = @"C_builtin_function_or_method$builtins.input" +py_cobjects(#12418) +py_cobjects(#10663) +py_cobjects(#10664) +py_cobjects(#10665) +py_cobjects(#10668) +py_cobjects(#10669) +#12419 = @"C_builtin_function_or_method$builtins.max" +py_cobjects(#12419) +#12420 = @"C_builtin_function_or_method$builtins.min" +py_cobjects(#12420) +#12421 = @"C_builtin_function_or_method$builtins.next" +py_cobjects(#12421) +py_cobjects(#11587) +py_cobjects(#10670) +#12422 = @"C_builtin_function_or_method$builtins.pow" +py_cobjects(#12422) +py_cobjects(#10671) +py_cobjects(#11588) +py_cobjects(#11589) +py_cobjects(#10672) +py_cobjects(#10673) +py_cobjects(#10674) +py_cobjects(#10675) +py_cobjects(#10676) +py_cobjects(#10677) +py_cobjects(#10679) +py_cobjects(#10680) +py_cobjects(#10681) +py_cobjects(#10682) +py_cobjects(#10683) +py_cobjects(#10684) +py_cobjects(#10685) +py_cobjects(#10686) +py_cobjects(#11591) +py_cobjects(#10687) +py_cobjects(#11592) +py_cobjects(#11594) +py_cobjects(#11595) +py_cobjects(#11596) +py_cobjects(#11598) +py_cobjects(#10688) +py_cobjects(#10689) +py_cobjects(#10690) +py_cobjects(#10691) +py_cobjects(#10692) +py_cobjects(#11600) +py_cobjects(#10693) +py_cobjects(#10694) +py_cobjects(#10695) +py_cobjects(#10696) +py_cobjects(#10697) +py_cobjects(#10698) +py_cobjects(#10699) +py_cobjects(#10700) +py_cobjects(#10701) +py_cobjects(#10702) +py_cobjects(#10703) +py_cobjects(#10704) +py_cobjects(#10705) +py_cobjects(#10706) +py_cobjects(#11605) +py_cobjects(#10707) +py_cobjects(#10708) +py_cobjects(#10709) +py_cobjects(#11606) +py_cobjects(#11607) +py_cobjects(#10710) +py_cobjects(#10711) +py_cobjects(#10712) +py_cobjects(#10714) +py_cobjects(#10715) +py_cobjects(#10716) +py_cobjects(#11608) +py_cobjects(#11610) +py_cobjects(#11611) +py_cobjects(#10717) +py_cobjects(#10718) +py_cobjects(#11612) +py_cobjects(#11613) +py_cobjects(#10719) +py_cobjects(#10720) +py_cobjects(#10721) +py_cobjects(#10722) +py_cobjects(#10724) +py_cobjects(#10725) +py_cobjects(#10726) +py_cobjects(#10727) +py_cobjects(#10728) +py_cobjects(#10729) +py_cobjects(#10730) +py_cobjects(#10731) +py_cobjects(#10732) +py_cobjects(#10733) +py_cobjects(#10734) +py_cobjects(#10735) +py_cobjects(#10736) +py_cobjects(#10737) +py_cobjects(#10738) +py_cobjects(#10739) +py_cobjects(#10740) +py_cobjects(#10741) +py_cobjects(#10742) +py_cobjects(#10743) +py_cobjects(#10744) +py_cobjects(#10745) +py_cobjects(#10746) +py_cobjects(#10747) +py_cobjects(#10748) +py_cobjects(#10749) +py_cobjects(#10750) +py_cobjects(#10751) +py_cobjects(#10752) +py_cobjects(#10753) +py_cobjects(#10754) +py_cobjects(#10755) +py_cobjects(#10756) +py_cobjects(#11614) +py_cobjects(#11615) +py_cobjects(#11616) +py_cobjects(#11617) +py_cobjects(#11618) +py_cobjects(#11619) +py_cobjects(#11620) +py_cobjects(#11621) +py_cobjects(#11622) +py_cobjects(#11623) +py_cobjects(#10757) +py_cobjects(#11624) +py_cobjects(#10758) +py_cobjects(#11625) +py_cobjects(#10759) +py_cobjects(#10760) +py_cobjects(#10761) +py_cobjects(#11626) +py_cobjects(#11627) +py_cobjects(#11628) +py_cobjects(#10762) +py_cobjects(#10763) +py_cobjects(#10764) +py_cobjects(#10765) +py_cobjects(#10766) +py_cobjects(#10767) +py_cobjects(#10768) +py_cobjects(#11629) +py_cobjects(#10769) +py_cobjects(#10770) +py_cobjects(#10771) +py_cobjects(#10772) +py_cobjects(#10773) +py_cobjects(#10774) +py_cobjects(#10775) +py_cobjects(#10776) +py_cobjects(#10777) +py_cobjects(#10778) +py_cobjects(#10779) +py_cobjects(#10780) +py_cobjects(#10781) +py_cobjects(#10782) +py_cobjects(#10783) +py_cobjects(#10784) +py_cobjects(#10785) +py_cobjects(#10786) +py_cobjects(#10787) +py_cobjects(#10788) +py_cobjects(#10789) +py_cobjects(#10790) +py_cobjects(#10791) +py_cobjects(#10792) +py_cobjects(#10793) +py_cobjects(#10794) +py_cobjects(#10795) +py_cobjects(#10796) +py_cobjects(#10797) +py_cobjects(#11630) +py_cobjects(#11631) +py_cobjects(#11632) +py_cobjects(#11633) +py_cobjects(#11634) +py_cobjects(#11635) +py_cobjects(#11636) +py_cobjects(#11637) +py_cobjects(#11638) +py_cobjects(#11639) +py_cobjects(#10798) +py_cobjects(#11640) +py_cobjects(#11641) +py_cobjects(#10799) +py_cobjects(#10800) +py_cobjects(#10801) +py_cobjects(#10802) +py_cobjects(#10803) +py_cobjects(#11642) +py_cobjects(#11643) +py_cobjects(#10804) +py_cobjects(#10805) +py_cobjects(#10806) +py_cobjects(#11644) +py_cobjects(#10807) +py_cobjects(#10808) +py_cobjects(#10809) +py_cobjects(#10810) +py_cobjects(#10811) +py_cobjects(#10812) +py_cobjects(#10813) +py_cobjects(#11645) +py_cobjects(#11646) +py_cobjects(#11647) +py_cobjects(#11648) +py_cobjects(#10814) +py_cobjects(#10815) +py_cobjects(#10816) +py_cobjects(#10817) +py_cobjects(#10818) +py_cobjects(#10819) +py_cobjects(#10820) +py_cobjects(#11649) +py_cobjects(#10821) +py_cobjects(#10822) +py_cobjects(#10823) +py_cobjects(#10824) +py_cobjects(#11652) +py_cobjects(#10825) +py_cobjects(#10826) +py_cobjects(#10827) +py_cobjects(#11653) +py_cobjects(#10828) +py_cobjects(#10829) +py_cobjects(#10830) +py_cobjects(#10831) +py_cobjects(#10832) +py_cobjects(#10833) +py_cobjects(#11656) +py_cobjects(#10834) +py_cobjects(#11657) +py_cobjects(#10835) +py_cobjects(#10836) +py_cobjects(#10837) +py_cobjects(#10838) +py_cobjects(#10839) +py_cobjects(#10840) +py_cobjects(#10841) +py_cobjects(#10842) +py_cobjects(#11658) +py_cobjects(#10843) +py_cobjects(#10844) +py_cobjects(#10845) +py_cobjects(#10846) +py_cobjects(#10847) +py_cobjects(#10848) +py_cobjects(#10849) +py_cobjects(#10850) +py_cobjects(#10851) +py_cobjects(#10852) +py_cobjects(#10853) +py_cobjects(#10854) +py_cobjects(#10855) +py_cobjects(#11660) +py_cobjects(#10856) +py_cobjects(#11662) +py_cobjects(#11664) +py_cobjects(#10857) +py_cobjects(#10858) +py_cobjects(#10859) +py_cobjects(#10860) +py_cobjects(#10861) +py_cobjects(#10862) +py_cobjects(#10863) +py_cobjects(#10864) +py_cobjects(#10865) +py_cobjects(#10866) +py_cobjects(#10867) +py_cobjects(#10869) +py_cobjects(#10870) +py_cobjects(#10871) +py_cobjects(#10872) +py_cobjects(#10873) +py_cobjects(#10874) +py_cobjects(#10875) +py_cobjects(#10876) +py_cobjects(#10877) +py_cobjects(#10878) +py_cobjects(#10879) +py_cobjects(#10880) +py_cobjects(#10881) +py_cobjects(#10882) +py_cobjects(#10883) +py_cobjects(#10884) +py_cobjects(#10885) +py_cobjects(#10887) +py_cobjects(#10888) +py_cobjects(#10889) +py_cobjects(#10890) +py_cobjects(#10891) +py_cobjects(#10892) +py_cobjects(#10893) +py_cobjects(#10894) +py_cobjects(#10895) +py_cobjects(#10896) +py_cobjects(#10897) +py_cobjects(#10898) +py_cobjects(#10899) +py_cobjects(#10900) +py_cobjects(#10901) +py_cobjects(#10902) +py_cobjects(#10903) +py_cobjects(#10904) +py_cobjects(#10905) +py_cobjects(#10906) +py_cobjects(#10907) +py_cobjects(#10908) +py_cobjects(#11669) +py_cobjects(#10909) +py_cobjects(#10910) +py_cobjects(#10911) +py_cobjects(#11670) +py_cobjects(#10912) +py_cobjects(#10913) +py_cobjects(#10914) +py_cobjects(#10915) +py_cobjects(#10916) +py_cobjects(#10917) +py_cobjects(#10918) +py_cobjects(#10919) +py_cobjects(#11674) +py_cobjects(#11676) +py_cobjects(#10920) +py_cobjects(#10921) +py_cobjects(#10922) +py_cobjects(#10923) +py_cobjects(#10924) +py_cobjects(#11678) +py_cobjects(#10925) +py_cobjects(#10926) +py_cobjects(#10927) +py_cobjects(#11679) +py_cobjects(#10928) +py_cobjects(#10929) +py_cobjects(#10930) +py_cobjects(#10931) +py_cobjects(#10932) +py_cobjects(#10933) +py_cobjects(#10934) +py_cobjects(#11681) +py_cobjects(#11682) +py_cobjects(#11683) +py_cobjects(#10935) +py_cobjects(#10936) +py_cobjects(#10937) +py_cobjects(#10938) +py_cobjects(#10939) +py_cobjects(#10940) +py_cobjects(#10941) +py_cobjects(#10942) +py_cobjects(#10943) +py_cobjects(#11686) +py_cobjects(#11687) +py_cobjects(#11688) +py_cobjects(#11689) +py_cobjects(#10944) +py_cobjects(#11691) +py_cobjects(#11693) +py_cobjects(#11694) +py_cobjects(#11695) +py_cobjects(#10945) +py_cobjects(#11696) +py_cobjects(#11698) +py_cobjects(#11699) +py_cobjects(#11700) +py_cobjects(#11701) +py_cobjects(#11702) +py_cobjects(#11705) +py_cobjects(#11706) +py_cobjects(#11707) +py_cobjects(#11708) +py_cobjects(#11709) +py_cobjects(#10946) +py_cobjects(#11710) +py_cobjects(#11711) +py_cobjects(#10947) +py_cobjects(#10948) +py_cobjects(#10949) +py_cobjects(#11712) +py_cobjects(#11713) +py_cobjects(#10950) +py_cobjects(#11714) +py_cobjects(#11715) +py_cobjects(#11716) +py_cobjects(#10951) +py_cobjects(#10952) +py_cobjects(#10953) +py_cobjects(#11717) +py_cobjects(#10954) +py_cobjects(#11718) +py_cobjects(#11720) +py_cobjects(#10955) +py_cobjects(#11721) +py_cobjects(#10956) +py_cobjects(#11722) +py_cobjects(#11723) +py_cobjects(#11724) +py_cobjects(#11725) +py_cobjects(#11726) +py_cobjects(#11727) +py_cobjects(#11728) +py_cobjects(#10957) +py_cobjects(#11729) +py_cobjects(#10958) +py_cobjects(#10959) +py_cobjects(#10960) +py_cobjects(#11730) +py_cobjects(#10961) +py_cobjects(#10962) +py_cobjects(#10963) +py_cobjects(#10964) +py_cobjects(#10965) +py_cobjects(#10966) +py_cobjects(#10967) +py_cobjects(#10968) +py_cobjects(#10969) +py_cobjects(#10970) +py_cobjects(#10971) +py_cobjects(#10972) +py_cobjects(#10973) +py_cobjects(#10974) +py_cobjects(#10975) +py_cobjects(#10976) +py_cobjects(#10977) +py_cobjects(#10978) +py_cobjects(#10979) +py_cobjects(#10980) +py_cobjects(#10981) +py_cobjects(#11733) +py_cobjects(#11734) +py_cobjects(#10982) +py_cobjects(#10983) +py_cobjects(#10984) +py_cobjects(#10985) +py_cobjects(#11735) +py_cobjects(#10986) +py_cobjects(#10987) +py_cobjects(#10988) +py_cobjects(#10989) +py_cobjects(#10990) +py_cobjects(#10991) +py_cobjects(#11737) +py_cobjects(#11739) +py_cobjects(#11740) +py_cobjects(#11741) +py_cobjects(#11742) +py_cobjects(#10992) +py_cobjects(#10993) +py_cobjects(#10994) +py_cobjects(#11744) +py_cobjects(#10995) +py_cobjects(#11746) +py_cobjects(#11747) +py_cobjects(#11748) +py_cobjects(#10996) +py_cobjects(#11749) +py_cobjects(#11750) +py_cobjects(#11751) +py_cobjects(#11752) +py_cobjects(#11753) +py_cobjects(#11754) +py_cobjects(#11755) +py_cobjects(#10997) +py_cobjects(#11756) +py_cobjects(#10998) +py_cobjects(#10999) +py_cobjects(#11000) +py_cobjects(#11001) +py_cobjects(#11002) +py_cobjects(#11003) +py_cobjects(#11004) +py_cobjects(#11005) +py_cobjects(#11006) +py_cobjects(#11007) +py_cobjects(#11008) +py_cobjects(#11009) +py_cobjects(#11010) +py_cobjects(#11011) +py_cobjects(#11012) +py_cobjects(#11013) +py_cobjects(#11014) +py_cobjects(#11015) +py_cobjects(#11016) +py_cobjects(#11017) +py_cobjects(#11018) +py_cobjects(#11758) +py_cobjects(#11760) +py_cobjects(#11761) +py_cobjects(#11019) +py_cobjects(#11020) +py_cobjects(#11021) +py_cobjects(#11022) +py_cobjects(#11023) +py_cobjects(#11024) +py_cobjects(#11762) +py_cobjects(#11763) +py_cobjects(#11764) +py_cobjects(#11765) +py_cobjects(#11025) +py_cobjects(#11766) +py_cobjects(#11767) +py_cobjects(#11026) +py_cobjects(#11027) +py_cobjects(#11028) +py_cobjects(#11029) +py_cobjects(#11030) +py_cobjects(#11769) +py_cobjects(#11771) +py_cobjects(#11772) +py_cobjects(#11031) +py_cobjects(#11773) +py_cobjects(#11774) +py_cobjects(#11776) +py_cobjects(#11032) +py_cobjects(#11777) +py_cobjects(#11778) +py_cobjects(#11779) +py_cobjects(#11780) +py_cobjects(#11781) +py_cobjects(#11033) +py_cobjects(#11782) +py_cobjects(#11034) +py_cobjects(#11035) +py_cobjects(#11036) +py_cobjects(#11037) +py_cobjects(#11038) +py_cobjects(#11039) +py_cobjects(#11040) +py_cobjects(#11041) +py_cobjects(#11042) +py_cobjects(#11043) +py_cobjects(#11784) +py_cobjects(#11785) +py_cobjects(#11786) +py_cobjects(#11787) +py_cobjects(#11788) +py_cobjects(#11789) +py_cobjects(#11044) +py_cobjects(#11790) +py_cobjects(#11045) +py_cobjects(#11046) +py_cobjects(#11047) +py_cobjects(#11048) +py_cobjects(#11049) +py_cobjects(#11050) +py_cobjects(#11051) +py_cobjects(#11052) +py_cobjects(#11053) +py_cobjects(#11054) +py_cobjects(#11055) +py_cobjects(#11056) +py_cobjects(#11792) +py_cobjects(#11793) +py_cobjects(#11794) +py_cobjects(#11795) +py_cobjects(#11796) +py_cobjects(#11797) +py_cobjects(#11057) +py_cobjects(#11798) +py_cobjects(#11058) +py_cobjects(#11059) +py_cobjects(#11060) +py_cobjects(#11061) +py_cobjects(#11062) +py_cobjects(#11063) +py_cobjects(#11799) +py_cobjects(#11801) +py_cobjects(#11802) +py_cobjects(#11803) +py_cobjects(#11804) +py_cobjects(#11805) +py_cobjects(#11806) +py_cobjects(#11807) +py_cobjects(#11808) +py_cobjects(#11809) +py_cobjects(#11810) +py_cobjects(#11064) +py_cobjects(#11812) +py_cobjects(#11813) +py_cobjects(#11814) +py_cobjects(#11065) +py_cobjects(#11066) +py_cobjects(#11067) +py_cobjects(#11068) +py_cobjects(#11069) +py_cobjects(#11070) +py_cobjects(#11071) +py_cobjects(#11072) +py_cobjects(#11073) +py_cobjects(#11074) +py_cobjects(#11075) +py_cobjects(#11076) +py_cobjects(#11077) +py_cobjects(#11078) +py_cobjects(#11079) +py_cobjects(#11816) +py_cobjects(#11080) +py_cobjects(#11081) +py_cobjects(#11082) +py_cobjects(#11083) +py_cobjects(#11084) +py_cobjects(#11085) +py_cobjects(#11086) +py_cobjects(#11817) +py_cobjects(#11087) +py_cobjects(#11088) +py_cobjects(#11818) +py_cobjects(#11089) +py_cobjects(#11090) +py_cobjects(#11091) +py_cobjects(#11819) +py_cobjects(#11092) +py_cobjects(#11820) +py_cobjects(#11093) +py_cobjects(#11094) +py_cobjects(#11095) +py_cobjects(#11096) +py_cobjects(#11822) +py_cobjects(#11097) +py_cobjects(#11098) +py_cobjects(#11823) +py_cobjects(#11099) +py_cobjects(#11100) +py_cobjects(#11101) +py_cobjects(#11102) +py_cobjects(#11103) +py_cobjects(#11104) +py_cobjects(#11106) +py_cobjects(#11824) +py_cobjects(#11107) +py_cobjects(#11108) +py_cobjects(#11109) +py_cobjects(#11110) +py_cobjects(#11111) +py_cobjects(#11112) +py_cobjects(#11113) +py_cobjects(#11114) +py_cobjects(#11115) +py_cobjects(#11116) +py_cobjects(#11117) +py_cobjects(#11118) +py_cobjects(#11826) +py_cobjects(#11119) +py_cobjects(#11120) +py_cobjects(#11121) +py_cobjects(#11122) +py_cobjects(#11123) +py_cobjects(#11124) +py_cobjects(#11828) +py_cobjects(#11833) +py_cobjects(#11834) +py_cobjects(#11835) +py_cobjects(#11836) +py_cobjects(#11837) +py_cobjects(#11838) +py_cobjects(#11839) +py_cobjects(#11840) +py_cobjects(#11841) +py_cobjects(#11842) +py_cobjects(#11843) +py_cobjects(#11844) +py_cobjects(#11845) +py_cobjects(#11846) +py_cobjects(#11847) +py_cobjects(#11848) +py_cobjects(#11849) +py_cobjects(#11850) +py_cobjects(#11851) +py_cobjects(#11852) +py_cobjects(#11854) +py_cobjects(#11125) +py_cobjects(#11126) +py_cobjects(#11856) +py_cobjects(#11858) +py_cobjects(#11859) +py_cobjects(#11860) +py_cobjects(#11127) +py_cobjects(#11128) +py_cobjects(#11129) +py_cobjects(#11862) +py_cobjects(#11863) +py_cobjects(#11864) +py_cobjects(#11865) +py_cobjects(#11866) +py_cobjects(#11130) +py_cobjects(#11868) +py_cobjects(#11869) +py_cobjects(#11871) +py_cobjects(#11872) +py_cobjects(#11131) +py_cobjects(#11132) +py_cobjects(#11133) +py_cobjects(#11873) +py_cobjects(#11874) +py_cobjects(#11134) +py_cobjects(#11135) +py_cobjects(#11875) +py_cobjects(#11136) +py_cobjects(#11876) +py_cobjects(#11877) +py_cobjects(#11878) +py_cobjects(#11137) +py_cobjects(#11138) +py_cobjects(#11139) +py_cobjects(#11140) +py_cobjects(#11141) +py_cobjects(#11143) +py_cobjects(#11144) +py_cobjects(#11145) +py_cobjects(#11146) +py_cobjects(#11147) +py_cobjects(#11148) +py_cobjects(#11149) +py_cobjects(#11150) +py_cobjects(#11151) +py_cobjects(#11152) +py_cobjects(#11153) +py_cobjects(#11887) +py_cobjects(#11154) +py_cobjects(#11155) +py_cobjects(#11156) +py_cobjects(#11157) +py_cobjects(#11158) +py_cobjects(#11159) +py_cobjects(#11160) +py_cobjects(#11161) +py_cobjects(#11162) +py_cobjects(#11163) +py_cobjects(#11164) +py_cobjects(#11165) +py_cobjects(#11166) +py_cobjects(#11167) +py_cobjects(#11168) +py_cobjects(#11169) +py_cobjects(#11170) +py_cobjects(#11171) +py_cobjects(#11172) +py_cobjects(#11899) +py_cobjects(#11173) +py_cobjects(#11174) +py_cobjects(#11175) +py_cobjects(#11176) +py_cobjects(#11177) +py_cobjects(#11178) +py_cobjects(#11179) +py_cobjects(#11180) +py_cobjects(#11181) +py_cobjects(#11182) +py_cobjects(#11183) +py_cobjects(#11184) +py_cobjects(#11185) +py_cobjects(#11186) +py_cobjects(#11187) +py_cobjects(#11188) +py_cobjects(#11189) +py_cobjects(#11190) +py_cobjects(#11900) +py_cobjects(#11191) +py_cobjects(#11192) +py_cobjects(#11193) +py_cobjects(#11901) +py_cobjects(#11194) +py_cobjects(#11195) +py_cobjects(#11196) +py_cobjects(#11197) +py_cobjects(#11198) +py_cobjects(#11199) +py_cobjects(#11200) +py_cobjects(#11201) +py_cobjects(#11202) +py_cobjects(#11203) +py_cobjects(#11204) +py_cobjects(#11205) +py_cobjects(#11206) +py_cobjects(#11207) +py_cobjects(#11208) +py_cobjects(#11209) +py_cobjects(#11210) +py_cobjects(#11211) +py_cobjects(#11212) +py_cobjects(#11213) +py_cobjects(#11214) +py_cobjects(#11215) +py_cobjects(#11216) +py_cobjects(#11217) +py_cobjects(#11218) +py_cobjects(#11219) +py_cobjects(#11220) +py_cobjects(#11221) +py_cobjects(#11902) +py_cobjects(#11222) +py_cobjects(#11223) +py_cobjects(#11224) +py_cobjects(#11225) +py_cobjects(#11226) +py_cobjects(#11227) +py_cobjects(#11228) +py_cobjects(#11229) +py_cobjects(#11230) +py_cobjects(#11231) +py_cobjects(#11232) +py_cobjects(#11233) +py_cobjects(#11234) +py_cobjects(#11235) +py_cobjects(#11236) +py_cobjects(#11237) +py_cobjects(#11238) +py_cobjects(#11239) +py_cobjects(#11240) +py_cobjects(#11241) +py_cobjects(#11242) +py_cobjects(#11243) +py_cobjects(#11244) +py_cobjects(#11245) +py_cobjects(#11246) +py_cobjects(#11247) +py_cobjects(#11248) +py_cobjects(#11249) +py_cobjects(#11908) +py_cobjects(#11909) +py_cobjects(#11250) +py_cobjects(#11251) +py_cobjects(#11252) +py_cobjects(#11253) +py_cobjects(#11254) +py_cobjects(#11255) +py_cobjects(#11256) +py_cobjects(#11257) +py_cobjects(#11258) +py_cobjects(#11913) +py_cobjects(#11259) +py_cobjects(#11914) +py_cobjects(#11915) +py_cobjects(#11916) +py_cobjects(#11260) +py_cobjects(#11917) +py_cobjects(#11918) +py_cobjects(#11919) +py_cobjects(#11261) +py_cobjects(#11920) +py_cobjects(#11262) +py_cobjects(#11263) +py_cobjects(#11264) +py_cobjects(#11265) +py_cobjects(#11266) +py_cobjects(#11267) +py_cobjects(#11268) +py_cobjects(#11269) +py_cobjects(#11270) +py_cobjects(#11271) +py_cobjects(#11272) +py_cobjects(#11273) +py_cobjects(#11274) +py_cobjects(#11275) +py_cobjects(#11277) +py_cobjects(#11278) +py_cobjects(#11279) +py_cobjects(#11280) +py_cobjects(#11924) +py_cobjects(#11281) +py_cobjects(#11282) +py_cobjects(#11283) +py_cobjects(#11284) +py_cobjects(#11285) +py_cobjects(#11286) +py_cobjects(#11287) +py_cobjects(#11288) +py_cobjects(#11289) +py_cobjects(#11290) +py_cobjects(#11291) +py_cobjects(#11292) +py_cobjects(#11293) +py_cobjects(#11294) +py_cobjects(#11295) +py_cobjects(#11296) +py_cobjects(#11297) +py_cobjects(#11298) +py_cobjects(#11299) +py_cobjects(#11300) +py_cobjects(#11301) +py_cobjects(#11302) +py_cobjects(#11303) +py_cobjects(#11304) +py_cobjects(#11305) +py_cobjects(#11306) +py_cobjects(#11307) +py_cobjects(#11308) +py_cobjects(#11309) +py_cobjects(#11310) +py_cobjects(#11311) +py_cobjects(#11312) +py_cobjects(#11313) +py_cobjects(#11314) +py_cobjects(#11315) +py_cobjects(#11316) +py_cobjects(#11317) +py_cobjects(#11318) +py_cobjects(#11319) +py_cobjects(#11320) +py_cobjects(#11321) +py_cobjects(#11322) +py_cobjects(#11323) +py_cobjects(#11324) +py_cobjects(#11325) +py_cobjects(#11326) +py_cobjects(#11327) +py_cobjects(#11328) +py_cobjects(#11330) +py_cobjects(#11331) +py_cobjects(#11332) +py_cobjects(#11333) +py_cobjects(#11334) +py_cobjects(#11335) +py_cobjects(#11926) +py_cobjects(#11336) +py_cobjects(#11337) +py_cobjects(#11338) +py_cobjects(#11339) +py_cobjects(#11340) +py_cobjects(#11341) +py_cobjects(#11342) +py_cobjects(#11343) +py_cobjects(#11344) +py_cobjects(#11345) +py_cobjects(#11346) +py_cobjects(#11347) +py_cobjects(#11348) +py_cobjects(#11349) +py_cobjects(#11927) +py_cobjects(#11350) +py_cobjects(#11928) +py_cobjects(#11930) +py_cobjects(#11931) +py_cobjects(#11932) +py_cobjects(#11933) +py_cobjects(#11934) +py_cobjects(#11936) +py_cobjects(#11937) +py_cobjects(#11938) +py_cobjects(#11940) +py_cobjects(#11351) +py_cobjects(#11352) +py_cobjects(#11353) +py_cobjects(#11354) +py_cobjects(#11355) +py_cobjects(#11356) +py_cobjects(#11357) +py_cobjects(#11358) +py_cobjects(#11359) +py_cobjects(#11360) +py_cobjects(#11944) +py_cobjects(#11361) +py_cobjects(#11362) +py_cobjects(#11363) +py_cobjects(#11364) +py_cobjects(#11365) +py_cobjects(#11946) +py_cobjects(#11947) +py_cobjects(#11366) +py_cobjects(#11367) +py_cobjects(#11948) +py_cobjects(#11368) +py_cobjects(#11949) +py_cobjects(#11369) +py_cobjects(#11370) +py_cobjects(#11371) +py_cobjects(#11372) +py_cobjects(#11373) +py_cobjects(#11374) +py_cobjects(#11375) +py_cobjects(#11951) +py_cobjects(#11376) +py_cobjects(#11377) +py_cobjects(#11378) +py_cobjects(#11952) +py_cobjects(#11379) +py_cobjects(#11380) +py_cobjects(#11381) +py_cobjects(#11382) +py_cobjects(#11383) +py_cobjects(#11384) +py_cobjects(#11385) +py_cobjects(#11386) +py_cobjects(#11387) +py_cobjects(#11388) +py_cobjects(#11389) +py_cobjects(#11390) +py_cobjects(#11391) +py_cobjects(#11392) +py_cobjects(#11393) +py_cobjects(#11394) +py_cobjects(#11395) +py_cobjects(#11396) +py_cobjects(#11397) +py_cobjects(#11398) +py_cobjects(#11399) +py_cobjects(#11400) +py_cobjects(#11401) +py_cobjects(#11402) +py_cobjects(#11403) +py_cobjects(#11404) +py_cobjects(#11405) +py_cobjects(#11406) +py_cobjects(#11407) +py_cobjects(#11408) +py_cobjects(#11409) +py_cobjects(#11410) +py_cobjects(#11411) +py_cobjects(#11412) +py_cobjects(#11413) +py_cobjects(#11414) +py_cobjects(#11415) +py_cobjects(#11416) +py_cobjects(#11417) +py_cobjects(#11418) +py_cobjects(#11419) +py_cobjects(#11420) +py_cobjects(#11421) +py_cobjects(#11422) +py_cobjects(#11423) +py_cobjects(#11424) +py_cobjects(#11425) +py_cobjects(#11426) +py_cobjects(#11427) +py_cobjects(#11428) +py_cobjects(#11429) +py_cobjects(#11430) +py_cobjects(#11431) +py_cobjects(#11432) +py_cobjects(#11433) +py_cobjects(#11434) +py_cobjects(#11954) +py_cobjects(#11435) +py_cobjects(#11436) +py_cobjects(#11437) +py_cobjects(#11438) +py_cobjects(#11439) +py_cobjects(#11440) +py_cobjects(#11441) +py_cobjects(#11442) +py_cobjects(#11443) +py_cobjects(#11444) +py_cobjects(#11445) +py_cobjects(#11446) +py_cobjects(#11447) +py_cobjects(#11448) +py_cobjects(#11449) +py_cobjects(#11450) +py_cobjects(#11451) +py_cobjects(#11452) +py_cobjects(#11453) +py_cobjects(#11454) +py_cobjects(#11455) +py_cobjects(#11456) +py_cobjects(#11457) +py_cobjects(#11957) +py_cobjects(#11458) +py_cobjects(#11459) +py_cobjects(#11958) +py_cobjects(#11959) +py_cobjects(#11960) +py_cobjects(#11961) +py_cobjects(#11962) +py_cobjects(#11460) +py_cobjects(#11963) +py_cobjects(#11461) +py_cobjects(#11462) +py_cobjects(#11463) +py_cobjects(#11964) +py_cobjects(#11965) +py_cobjects(#11966) +py_cobjects(#11464) +py_cobjects(#11465) +py_cobjects(#11967) +py_cobjects(#11968) +py_cobjects(#11466) +py_cobjects(#11467) +py_cobjects(#11969) +py_cobjects(#11970) +py_cobjects(#11971) +py_cobjects(#11972) +py_cobjects(#11468) +py_cobjects(#11469) +py_cobjects(#11470) +py_cobjects(#11471) +py_cobjects(#11472) +py_cobjects(#11473) +py_cobjects(#11474) +py_cobjects(#11475) +py_cobjects(#11476) +py_cobjects(#11477) +py_cobjects(#11478) +py_cobjects(#11479) +py_cobjects(#11480) +py_cobjects(#11973) +py_cobjects(#11974) +py_cobjects(#11975) +py_cobjects(#11976) +py_cobjects(#11481) +py_cobjects(#11482) +py_cobjects(#11483) +py_cobjects(#11484) +py_cobjects(#11485) +py_cobjects(#11486) +py_cobjects(#11487) +py_cobjects(#11978) +py_cobjects(#11488) +py_cobjects(#11489) +py_cobjects(#11490) +py_cobjects(#11493) +py_cobjects(#11494) +py_cobjects(#11495) +py_cobjects(#11496) +py_cobjects(#11497) +py_cobjects(#11980) +py_cobjects(#11981) +py_cobjects(#11498) +py_cobjects(#11499) +py_cobjects(#11500) +py_cobjects(#11501) +py_cobjects(#11983) +py_cobjects(#11502) +py_cobjects(#11503) +py_cobjects(#11504) +py_cobjects(#11505) +py_cobjects(#11506) +py_cobject_sources(#11590, 1) +py_cobject_sources(#11593, 1) +py_cobject_sources(#11597, 1) +py_cobject_sources(#11599, 1) +py_cobject_sources(#10016, 1) +py_cobject_sources(#12116, 1) +py_cobject_sources(#10024, 1) +py_cobject_sources(#10018, 1) +py_cobject_sources(#10020, 1) +py_cobject_sources(#11601, 1) +py_cobject_sources(#10111, 1) +py_cobject_sources(#11602, 1) +py_cobject_sources(#11604, 1) +py_cobject_sources(#11603, 1) +py_cobject_sources(#10713, 1) +py_cobject_sources(#11609, 1) +py_cobject_sources(#10030, 1) +py_cobject_sources(#10647, 1) +py_cobject_sources(#10039, 1) +py_cobject_sources(#10723, 1) +py_cobject_sources(#10001, 1) +py_cobject_sources(#10226, 1) +py_cobject_sources(#10042, 1) +py_cobject_sources(#10037, 1) +py_cobject_sources(#11650, 1) +py_cobject_sources(#11507, 1) +py_cobject_sources(#10517, 1) +py_cobject_sources(#10046, 1) +py_cobject_sources(#11982, 1) +py_cobject_sources(#12117, 1) +py_cobject_sources(#10028, 1) +py_cobject_sources(#11651, 1) +py_cobject_sources(#11655, 1) +py_cobject_sources(#11942, 1) +py_cobject_sources(#11654, 1) +py_cobject_sources(#11276, 1) +py_cobject_sources(#11939, 1) +py_cobject_sources(#10062, 1) +py_cobject_sources(#11659, 1) +py_cobject_sources(#11661, 1) +py_cobject_sources(#11663, 1) +py_cobject_sources(#11665, 1) +py_cobject_sources(#11666, 1) +py_cobject_sources(#10868, 1) +py_cobject_sources(#11667, 1) +py_cobject_sources(#10124, 1) +py_cobject_sources(#11668, 1) +py_cobject_sources(#12118, 1) +py_cobject_sources(#12119, 1) +py_cobject_sources(#10081, 1) +py_cobject_sources(#10010, 1) +py_cobject_sources(#10169, 1) +py_cobject_sources(#10189, 1) +py_cobject_sources(#10191, 1) +py_cobject_sources(#11671, 1) +py_cobject_sources(#10208, 1) +py_cobject_sources(#12120, 1) +py_cobject_sources(#10005, 1) +py_cobject_sources(#12121, 1) +py_cobject_sources(#12122, 1) +py_cobject_sources(#12123, 1) +py_cobject_sources(#12124, 1) +py_cobject_sources(#11672, 1) +py_cobject_sources(#11673, 1) +py_cobject_sources(#11675, 1) +py_cobject_sources(#11677, 1) +py_cobject_sources(#10223, 1) +py_cobject_sources(#10249, 1) +py_cobject_sources(#11680, 1) +py_cobject_sources(#11684, 1) +py_cobject_sources(#11685, 1) +py_cobject_sources(#11697, 1) +py_cobject_sources(#11690, 1) +py_cobject_sources(#11703, 1) +py_cobject_sources(#11692, 1) +py_cobject_sources(#11704, 1) +py_cobject_sources(#11719, 1) +py_cobject_sources(#11731, 1) +py_cobject_sources(#12125, 1) +py_cobject_sources(#11732, 1) +py_cobject_sources(#10411, 1) +py_cobject_sources(#11736, 1) +py_cobject_sources(#11759, 1) +py_cobject_sources(#11768, 1) +py_cobject_sources(#11770, 1) +py_cobject_sources(#11738, 1) +py_cobject_sources(#11815, 1) +py_cobject_sources(#11757, 1) +py_cobject_sources(#11811, 1) +py_cobject_sources(#11775, 1) +py_cobject_sources(#11791, 1) +py_cobject_sources(#11800, 1) +py_cobject_sources(#11783, 1) +py_cobject_sources(#11745, 1) +py_cobject_sources(#11743, 1) +py_cobject_sources(#12126, 1) +py_cobject_sources(#12127, 1) +py_cobject_sources(#12128, 1) +py_cobject_sources(#12129, 1) +py_cobject_sources(#12130, 1) +py_cobject_sources(#12131, 1) +py_cobject_sources(#12132, 1) +py_cobject_sources(#12133, 1) +py_cobject_sources(#12134, 1) +py_cobject_sources(#10526, 1) +py_cobject_sources(#10528, 1) +py_cobject_sources(#11821, 1) +py_cobject_sources(#10531, 1) +py_cobject_sources(#11105, 1) +py_cobject_sources(#11825, 1) +py_cobject_sources(#11827, 1) +py_cobject_sources(#12135, 1) +py_cobject_sources(#12136, 1) +py_cobject_sources(#11855, 1) +py_cobject_sources(#11861, 1) +py_cobject_sources(#12137, 1) +py_cobject_sources(#11829, 1) +py_cobject_sources(#12138, 1) +py_cobject_sources(#11857, 1) +py_cobject_sources(#12139, 1) +py_cobject_sources(#12140, 1) +py_cobject_sources(#11830, 1) +py_cobject_sources(#11831, 1) +py_cobject_sources(#10542, 1) +py_cobject_sources(#11853, 1) +py_cobject_sources(#12141, 1) +py_cobject_sources(#11832, 1) +py_cobject_sources(#12142, 1) +py_cobject_sources(#12143, 1) +py_cobject_sources(#12144, 1) +py_cobject_sources(#11867, 1) +py_cobject_sources(#11870, 1) +py_cobject_sources(#11546, 1) +py_cobject_sources(#11879, 1) +py_cobject_sources(#11880, 1) +py_cobject_sources(#11881, 1) +py_cobject_sources(#11142, 1) +py_cobject_sources(#11882, 1) +py_cobject_sources(#11883, 1) +py_cobject_sources(#11884, 1) +py_cobject_sources(#11885, 1) +py_cobject_sources(#11886, 1) +py_cobject_sources(#11888, 1) +py_cobject_sources(#11889, 1) +py_cobject_sources(#11890, 1) +py_cobject_sources(#11891, 1) +py_cobject_sources(#11892, 1) +py_cobject_sources(#11893, 1) +py_cobject_sources(#11894, 1) +py_cobject_sources(#11895, 1) +py_cobject_sources(#10050, 1) +py_cobject_sources(#11896, 1) +py_cobject_sources(#11897, 1) +py_cobject_sources(#11898, 1) +py_cobject_sources(#10582, 1) +py_cobject_sources(#10584, 1) +py_cobject_sources(#10586, 1) +py_cobject_sources(#10886, 1) +py_cobject_sources(#11903, 1) +py_cobject_sources(#12145, 1) +py_cobject_sources(#11904, 1) +py_cobject_sources(#10626, 1) +py_cobject_sources(#10073, 1) +py_cobject_sources(#10074, 1) +py_cobject_sources(#12146, 1) +py_cobject_sources(#11905, 1) +py_cobject_sources(#11906, 1) +py_cobject_sources(#11907, 1) +py_cobject_sources(#10407, 1) +py_cobject_sources(#12147, 1) +py_cobject_sources(#11984, 1) +py_cobject_sources(#11935, 1) +py_cobject_sources(#11979, 1) +py_cobject_sources(#11985, 1) +py_cobject_sources(#12148, 1) +py_cobject_sources(#12149, 1) +py_cobject_sources(#11955, 1) +py_cobject_sources(#11923, 1) +py_cobject_sources(#11941, 1) +py_cobject_sources(#11910, 1) +py_cobject_sources(#11911, 1) +py_cobject_sources(#11912, 1) +py_cobject_sources(#11922, 1) +py_cobject_sources(#11921, 1) +py_cobject_sources(#12150, 1) +py_cobject_sources(#11956, 1) +py_cobject_sources(#10666, 1) +py_cobject_sources(#10667, 1) +py_cobject_sources(#11950, 1) +py_cobject_sources(#12151, 1) +py_cobject_sources(#12152, 1) +py_cobject_sources(#12153, 1) +py_cobject_sources(#12154, 1) +py_cobject_sources(#12155, 1) +py_cobject_sources(#11929, 1) +py_cobject_sources(#12156, 1) +py_cobject_sources(#12157, 1) +py_cobject_sources(#11925, 1) +py_cobject_sources(#11329, 1) +py_cobject_sources(#11953, 1) +py_cobject_sources(#11491, 1) +py_cobject_sources(#11492, 1) +py_cobject_sources(#12158, 1) +py_cobject_sources(#12159, 1) +py_cobject_sources(#12160, 1) +py_cobject_sources(#12161, 1) +py_cobject_sources(#12162, 1) +py_cobject_sources(#12163, 1) +py_cobject_sources(#11943, 1) +py_cobject_sources(#12164, 1) +py_cobject_sources(#12165, 1) +py_cobject_sources(#12166, 1) +py_cobject_sources(#12167, 1) +py_cobject_sources(#12168, 1) +py_cobject_sources(#12169, 1) +py_cobject_sources(#11945, 1) +py_cobject_sources(#12170, 1) +py_cobject_sources(#12171, 1) +py_cobject_sources(#12172, 1) +py_cobject_sources(#12173, 1) +py_cobject_sources(#12174, 1) +py_cobject_sources(#12175, 1) +py_cobject_sources(#12176, 1) +py_cobject_sources(#12177, 1) +py_cobject_sources(#12178, 1) +py_cobject_sources(#12179, 1) +py_cobject_sources(#12180, 1) +py_cobject_sources(#12181, 1) +py_cobject_sources(#12182, 1) +py_cobject_sources(#12183, 1) +py_cobject_sources(#12184, 1) +py_cobject_sources(#12185, 1) +py_cobject_sources(#12186, 1) +py_cobject_sources(#12187, 1) +py_cobject_sources(#12188, 1) +py_cobject_sources(#12189, 1) +py_cobject_sources(#12190, 1) +py_cobject_sources(#12191, 1) +py_cobject_sources(#12192, 1) +py_cobject_sources(#12193, 1) +py_cobject_sources(#12194, 1) +py_cobject_sources(#12195, 1) +py_cobject_sources(#12196, 1) +py_cobject_sources(#12197, 1) +py_cobject_sources(#12198, 1) +py_cobject_sources(#12199, 1) +py_cobject_sources(#12200, 1) +py_cobject_sources(#12201, 1) +py_cobject_sources(#12202, 1) +py_cobject_sources(#12203, 1) +py_cobject_sources(#12204, 1) +py_cobject_sources(#12205, 1) +py_cobject_sources(#12206, 1) +py_cobject_sources(#12207, 1) +py_cobject_sources(#12208, 1) +py_cobject_sources(#12209, 1) +py_cobject_sources(#12210, 1) +py_cobject_sources(#12211, 1) +py_cobject_sources(#12212, 1) +py_cobject_sources(#12213, 1) +py_cobject_sources(#12214, 1) +py_cobject_sources(#12215, 1) +py_cobject_sources(#12216, 1) +py_cobject_sources(#12217, 1) +py_cobject_sources(#12218, 1) +py_cobject_sources(#12219, 1) +py_cobject_sources(#12220, 1) +py_cobject_sources(#11977, 1) +py_cobject_sources(#12221, 1) +py_cobject_sources(#10678, 1) +py_cobject_sources(#11986, 1) +py_cobject_sources(#11987, 1) +py_cobject_sources(#12222, 1) +py_cobject_sources(#11988, 1) +py_cobject_sources(#11989, 1) +py_cobject_sources(#11990, 1) +py_cobject_sources(#11991, 1) +py_cobject_sources(#11992, 1) +py_cobject_sources(#11993, 1) +py_cobject_sources(#11994, 1) +py_cobject_sources(#12223, 1) +py_cobject_sources(#11995, 1) +py_cobject_sources(#11996, 1) +py_cobject_sources(#12224, 1) +py_cobject_sources(#11997, 1) +py_cobject_sources(#12225, 1) +py_cobject_sources(#11998, 1) +py_cobject_sources(#12226, 1) +py_cobject_sources(#12227, 1) +py_cobject_sources(#12228, 1) +py_cobject_sources(#12229, 1) +py_cobject_sources(#12230, 1) +py_cobject_sources(#11999, 1) +py_cobject_sources(#12000, 1) +py_cobject_sources(#12001, 1) +py_cobject_sources(#12002, 1) +py_cobject_sources(#12003, 1) +py_cobject_sources(#12004, 1) +py_cobject_sources(#12005, 1) +py_cobject_sources(#12006, 1) +py_cobject_sources(#12007, 1) +py_cobject_sources(#12008, 1) +py_cobject_sources(#12009, 1) +py_cobject_sources(#12231, 1) +py_cobject_sources(#12010, 1) +py_cobject_sources(#12232, 1) +py_cobject_sources(#12011, 1) +py_cobject_sources(#12012, 1) +py_cobject_sources(#12013, 1) +py_cobject_sources(#12014, 1) +py_cobject_sources(#12015, 1) +py_cobject_sources(#12016, 1) +py_cobject_sources(#12017, 1) +py_cobject_sources(#12018, 1) +py_cobject_sources(#12019, 1) +py_cobject_sources(#12020, 1) +py_cobject_sources(#12021, 1) +py_cobject_sources(#12022, 1) +py_cobject_sources(#12023, 1) +py_cobject_sources(#12233, 1) +py_cobject_sources(#12024, 1) +py_cobject_sources(#12025, 1) +py_cobject_sources(#12026, 1) +py_cobject_sources(#12027, 1) +py_cobject_sources(#12234, 1) +py_cobject_sources(#12028, 1) +py_cobject_sources(#12029, 1) +py_cobject_sources(#12030, 1) +py_cobject_sources(#12031, 1) +py_cobject_sources(#12032, 1) +py_cobject_sources(#12033, 1) +py_cobject_sources(#12034, 1) +py_cobject_sources(#12035, 1) +py_cobject_sources(#12036, 1) +py_cobject_sources(#12235, 1) +py_cobject_sources(#12037, 1) +py_cobject_sources(#12038, 1) +py_cobject_sources(#12039, 1) +py_cobject_sources(#12040, 1) +py_cobject_sources(#12041, 1) +py_cobject_sources(#12042, 1) +py_cobject_sources(#12043, 1) +py_cobject_sources(#12044, 1) +py_cobject_sources(#12045, 1) +py_cobject_sources(#12046, 1) +py_cobject_sources(#12047, 1) +py_cobject_sources(#12048, 1) +py_cobject_sources(#12049, 1) +py_cobject_sources(#12236, 1) +py_cobject_sources(#12237, 1) +py_cobject_sources(#12050, 1) +py_cobject_sources(#12238, 1) +py_cobject_sources(#12051, 1) +py_cobject_sources(#12052, 1) +py_cobject_sources(#12053, 1) +py_cobject_sources(#12054, 1) +py_cobject_sources(#12239, 1) +py_cobject_sources(#12240, 1) +py_cobject_sources(#12241, 1) +py_cobject_sources(#12242, 1) +py_cobject_sources(#12243, 1) +py_cobject_sources(#12244, 1) +py_cobject_sources(#12245, 1) +py_cobject_sources(#12246, 1) +py_cobject_sources(#12247, 1) +py_cobject_sources(#12248, 1) +py_cobject_sources(#12055, 1) +py_cobject_sources(#12056, 1) +py_cobject_sources(#12057, 1) +py_cobject_sources(#12058, 1) +py_cobject_sources(#12059, 1) +py_cobject_sources(#12249, 1) +py_cobject_sources(#12060, 1) +py_cobject_sources(#12061, 1) +py_cobject_sources(#12062, 1) +py_cobject_sources(#12063, 1) +py_cobject_sources(#12250, 1) +py_cobject_sources(#12064, 1) +py_cobject_sources(#12065, 1) +py_cobject_sources(#12066, 1) +py_cobject_sources(#12251, 1) +py_cobject_sources(#12067, 1) +py_cobject_sources(#12068, 1) +py_cobject_sources(#12069, 1) +py_cobject_sources(#12252, 1) +py_cobject_sources(#12253, 1) +py_cobject_sources(#12254, 1) +py_cobject_sources(#12070, 1) +py_cobject_sources(#12255, 1) +py_cobject_sources(#12071, 1) +py_cobject_sources(#12072, 1) +py_cobject_sources(#12256, 1) +py_cobject_sources(#12257, 1) +py_cobject_sources(#12073, 1) +py_cobject_sources(#12074, 1) +py_cobject_sources(#12075, 1) +py_cobject_sources(#12076, 1) +py_cobject_sources(#12077, 1) +py_cobject_sources(#12078, 1) +py_cobject_sources(#12079, 1) +py_cobject_sources(#12258, 1) +py_cobject_sources(#12259, 1) +py_cobject_sources(#12080, 1) +py_cobject_sources(#12260, 1) +py_cobject_sources(#12261, 1) +py_cobject_sources(#12262, 1) +py_cobject_sources(#12081, 1) +py_cobject_sources(#12082, 1) +py_cobject_sources(#12083, 1) +py_cobject_sources(#12263, 1) +py_cobject_sources(#12264, 1) +py_cobject_sources(#12084, 1) +py_cobject_sources(#12265, 1) +py_cobject_sources(#12085, 1) +py_cobject_sources(#12266, 1) +py_cobject_sources(#12086, 1) +py_cobject_sources(#12267, 1) +py_cobject_sources(#12087, 1) +py_cobject_sources(#12268, 1) +py_cobject_sources(#12088, 1) +py_cobject_sources(#12089, 1) +py_cobject_sources(#12269, 1) +py_cobject_sources(#12090, 1) +py_cobject_sources(#12091, 1) +py_cobject_sources(#12092, 1) +py_cobject_sources(#12093, 1) +py_cobject_sources(#12094, 1) +py_cobject_sources(#12095, 1) +py_cobject_sources(#12096, 1) +py_cobject_sources(#12097, 1) +py_cobject_sources(#12270, 1) +py_cobject_sources(#12271, 1) +py_cobject_sources(#12272, 1) +py_cobject_sources(#12098, 1) +py_cobject_sources(#12099, 1) +py_cobject_sources(#12273, 1) +py_cobject_sources(#12100, 1) +py_cobject_sources(#12274, 1) +py_cobject_sources(#12275, 1) +py_cobject_sources(#12101, 1) +py_cobject_sources(#12102, 1) +py_cobject_sources(#12103, 1) +py_cobject_sources(#12104, 1) +py_cobject_sources(#12276, 1) +py_cobject_sources(#12105, 1) +py_cobject_sources(#12106, 1) +py_cobject_sources(#12107, 1) +py_cobject_sources(#12108, 1) +py_cobject_sources(#12277, 1) +py_cobject_sources(#12109, 1) +py_cobject_sources(#12110, 1) +py_cobject_sources(#12111, 1) +py_cobject_sources(#12112, 1) +py_cobject_sources(#12113, 1) +py_cobject_sources(#12114, 1) +py_cobject_sources(#12115, 1) +py_cobject_sources(#10000, 1) +py_cobject_sources(#10002, 1) +py_cobject_sources(#10003, 1) +py_cobject_sources(#10004, 1) +py_cobject_sources(#10006, 1) +py_cobject_sources(#10007, 1) +py_cobject_sources(#12278, 1) +py_cobject_sources(#12279, 1) +py_cobject_sources(#12280, 1) +py_cobject_sources(#12281, 1) +py_cobject_sources(#10008, 1) +py_cobject_sources(#10009, 1) +py_cobject_sources(#12282, 1) +py_cobject_sources(#10011, 1) +py_cobject_sources(#10012, 1) +py_cobject_sources(#10013, 1) +py_cobject_sources(#10014, 1) +py_cobject_sources(#11508, 1) +py_cobject_sources(#10015, 1) +py_cobject_sources(#10017, 1) +py_cobject_sources(#10019, 1) +py_cobject_sources(#10021, 1) +py_cobject_sources(#10022, 1) +py_cobject_sources(#11509, 1) +py_cobject_sources(#10023, 1) +py_cobject_sources(#10025, 1) +py_cobject_sources(#10026, 1) +py_cobject_sources(#10027, 1) +py_cobject_sources(#10029, 1) +py_cobject_sources(#12283, 1) +py_cobject_sources(#12284, 1) +py_cobject_sources(#10031, 1) +py_cobject_sources(#10032, 1) +py_cobject_sources(#10033, 1) +py_cobject_sources(#10034, 1) +py_cobject_sources(#10035, 1) +py_cobject_sources(#10036, 1) +py_cobject_sources(#10038, 1) +py_cobject_sources(#10040, 1) +py_cobject_sources(#10041, 1) +py_cobject_sources(#10043, 1) +py_cobject_sources(#10044, 1) +py_cobject_sources(#10045, 1) +py_cobject_sources(#12285, 1) +py_cobject_sources(#10047, 1) +py_cobject_sources(#10048, 1) +py_cobject_sources(#10049, 1) +py_cobject_sources(#10051, 1) +py_cobject_sources(#10052, 1) +py_cobject_sources(#10053, 1) +py_cobject_sources(#10054, 1) +py_cobject_sources(#10055, 1) +py_cobject_sources(#10056, 1) +py_cobject_sources(#10057, 1) +py_cobject_sources(#10058, 1) +py_cobject_sources(#10059, 1) +py_cobject_sources(#10060, 1) +py_cobject_sources(#11510, 1) +py_cobject_sources(#11511, 1) +py_cobject_sources(#11512, 1) +py_cobject_sources(#11513, 1) +py_cobject_sources(#11514, 1) +py_cobject_sources(#11515, 1) +py_cobject_sources(#10061, 1) +py_cobject_sources(#10063, 1) +py_cobject_sources(#10064, 1) +py_cobject_sources(#10065, 1) +py_cobject_sources(#10066, 1) +py_cobject_sources(#10067, 1) +py_cobject_sources(#10068, 1) +py_cobject_sources(#10069, 1) +py_cobject_sources(#10070, 1) +py_cobject_sources(#12286, 1) +py_cobject_sources(#10071, 1) +py_cobject_sources(#10072, 1) +py_cobject_sources(#10075, 1) +py_cobject_sources(#10076, 1) +py_cobject_sources(#11516, 1) +py_cobject_sources(#10077, 1) +py_cobject_sources(#10078, 1) +py_cobject_sources(#10079, 1) +py_cobject_sources(#10080, 1) +py_cobject_sources(#10082, 1) +py_cobject_sources(#10083, 1) +py_cobject_sources(#10084, 1) +py_cobject_sources(#10085, 1) +py_cobject_sources(#10086, 1) +py_cobject_sources(#10087, 1) +py_cobject_sources(#10088, 1) +py_cobject_sources(#10089, 1) +py_cobject_sources(#10090, 1) +py_cobject_sources(#10091, 1) +py_cobject_sources(#10092, 1) +py_cobject_sources(#10093, 1) +py_cobject_sources(#10094, 1) +py_cobject_sources(#10095, 1) +py_cobject_sources(#10096, 1) +py_cobject_sources(#10097, 1) +py_cobject_sources(#10098, 1) +py_cobject_sources(#10099, 1) +py_cobject_sources(#10100, 1) +py_cobject_sources(#10101, 1) +py_cobject_sources(#10102, 1) +py_cobject_sources(#10103, 1) +py_cobject_sources(#10104, 1) +py_cobject_sources(#10105, 1) +py_cobject_sources(#10106, 1) +py_cobject_sources(#10107, 1) +py_cobject_sources(#10108, 1) +py_cobject_sources(#10109, 1) +py_cobject_sources(#10110, 1) +py_cobject_sources(#10112, 1) +py_cobject_sources(#10113, 1) +py_cobject_sources(#10114, 1) +py_cobject_sources(#10115, 1) +py_cobject_sources(#10116, 1) +py_cobject_sources(#10117, 1) +py_cobject_sources(#10118, 1) +py_cobject_sources(#10119, 1) +py_cobject_sources(#10120, 1) +py_cobject_sources(#10121, 1) +py_cobject_sources(#10122, 1) +py_cobject_sources(#10123, 1) +py_cobject_sources(#10125, 1) +py_cobject_sources(#12287, 1) +py_cobject_sources(#12288, 1) +py_cobject_sources(#10126, 1) +py_cobject_sources(#10127, 1) +py_cobject_sources(#10128, 1) +py_cobject_sources(#10129, 1) +py_cobject_sources(#10130, 1) +py_cobject_sources(#12289, 1) +py_cobject_sources(#12290, 1) +py_cobject_sources(#12291, 1) +py_cobject_sources(#10131, 1) +py_cobject_sources(#10132, 1) +py_cobject_sources(#10133, 1) +py_cobject_sources(#10134, 1) +py_cobject_sources(#10135, 1) +py_cobject_sources(#10136, 1) +py_cobject_sources(#10137, 1) +py_cobject_sources(#10138, 1) +py_cobject_sources(#10139, 1) +py_cobject_sources(#10140, 1) +py_cobject_sources(#10141, 1) +py_cobject_sources(#10142, 1) +py_cobject_sources(#10143, 1) +py_cobject_sources(#10144, 1) +py_cobject_sources(#10145, 1) +py_cobject_sources(#10146, 1) +py_cobject_sources(#10147, 1) +py_cobject_sources(#10148, 1) +py_cobject_sources(#10149, 1) +py_cobject_sources(#10150, 1) +py_cobject_sources(#10151, 1) +py_cobject_sources(#10152, 1) +py_cobject_sources(#10153, 1) +py_cobject_sources(#10154, 1) +py_cobject_sources(#10155, 1) +py_cobject_sources(#10156, 1) +py_cobject_sources(#10157, 1) +py_cobject_sources(#10158, 1) +py_cobject_sources(#10159, 1) +py_cobject_sources(#10160, 1) +py_cobject_sources(#10161, 1) +py_cobject_sources(#10162, 1) +py_cobject_sources(#10163, 1) +py_cobject_sources(#10164, 1) +py_cobject_sources(#10165, 1) +py_cobject_sources(#12292, 1) +py_cobject_sources(#10166, 1) +py_cobject_sources(#10167, 1) +py_cobject_sources(#12293, 1) +py_cobject_sources(#10168, 1) +py_cobject_sources(#10170, 1) +py_cobject_sources(#10171, 1) +py_cobject_sources(#10172, 1) +py_cobject_sources(#10173, 1) +py_cobject_sources(#10174, 1) +py_cobject_sources(#10175, 1) +py_cobject_sources(#10176, 1) +py_cobject_sources(#10177, 1) +py_cobject_sources(#10178, 1) +py_cobject_sources(#10179, 1) +py_cobject_sources(#10180, 1) +py_cobject_sources(#10181, 1) +py_cobject_sources(#10182, 1) +py_cobject_sources(#10183, 1) +py_cobject_sources(#10184, 1) +py_cobject_sources(#10185, 1) +py_cobject_sources(#10186, 1) +py_cobject_sources(#10187, 1) +py_cobject_sources(#10188, 1) +py_cobject_sources(#10190, 1) +py_cobject_sources(#10192, 1) +py_cobject_sources(#10193, 1) +py_cobject_sources(#10194, 1) +py_cobject_sources(#10195, 1) +py_cobject_sources(#10196, 1) +py_cobject_sources(#10197, 1) +py_cobject_sources(#10198, 1) +py_cobject_sources(#10199, 1) +py_cobject_sources(#10200, 1) +py_cobject_sources(#10201, 1) +py_cobject_sources(#10202, 1) +py_cobject_sources(#10203, 1) +py_cobject_sources(#10204, 1) +py_cobject_sources(#10205, 1) +py_cobject_sources(#10206, 1) +py_cobject_sources(#12294, 1) +py_cobject_sources(#12295, 1) +py_cobject_sources(#10207, 1) +py_cobject_sources(#10209, 1) +py_cobject_sources(#10210, 1) +py_cobject_sources(#10211, 1) +py_cobject_sources(#10212, 1) +py_cobject_sources(#10213, 1) +py_cobject_sources(#10214, 1) +py_cobject_sources(#10215, 1) +py_cobject_sources(#10216, 1) +py_cobject_sources(#10217, 1) +py_cobject_sources(#10218, 1) +py_cobject_sources(#10219, 1) +py_cobject_sources(#11517, 1) +py_cobject_sources(#12296, 1) +py_cobject_sources(#10220, 1) +py_cobject_sources(#10221, 1) +py_cobject_sources(#11518, 1) +py_cobject_sources(#11519, 1) +py_cobject_sources(#11520, 1) +py_cobject_sources(#10222, 1) +py_cobject_sources(#10224, 1) +py_cobject_sources(#10225, 1) +py_cobject_sources(#10227, 1) +py_cobject_sources(#10228, 1) +py_cobject_sources(#10229, 1) +py_cobject_sources(#10230, 1) +py_cobject_sources(#10231, 1) +py_cobject_sources(#10232, 1) +py_cobject_sources(#10233, 1) +py_cobject_sources(#10234, 1) +py_cobject_sources(#10235, 1) +py_cobject_sources(#10236, 1) +py_cobject_sources(#10237, 1) +py_cobject_sources(#10238, 1) +py_cobject_sources(#10239, 1) +py_cobject_sources(#10240, 1) +py_cobject_sources(#10241, 1) +py_cobject_sources(#10242, 1) +py_cobject_sources(#10243, 1) +py_cobject_sources(#10244, 1) +py_cobject_sources(#10245, 1) +py_cobject_sources(#10246, 1) +py_cobject_sources(#10247, 1) +py_cobject_sources(#10248, 1) +py_cobject_sources(#12297, 1) +py_cobject_sources(#10250, 1) +py_cobject_sources(#10251, 1) +py_cobject_sources(#10252, 1) +py_cobject_sources(#10253, 1) +py_cobject_sources(#10254, 1) +py_cobject_sources(#10255, 1) +py_cobject_sources(#10256, 1) +py_cobject_sources(#10257, 1) +py_cobject_sources(#10258, 1) +py_cobject_sources(#12298, 1) +py_cobject_sources(#12299, 1) +py_cobject_sources(#12300, 1) +py_cobject_sources(#10259, 1) +py_cobject_sources(#12301, 1) +py_cobject_sources(#10260, 1) +py_cobject_sources(#10261, 1) +py_cobject_sources(#10262, 1) +py_cobject_sources(#10263, 1) +py_cobject_sources(#12302, 1) +py_cobject_sources(#10264, 1) +py_cobject_sources(#10265, 1) +py_cobject_sources(#10266, 1) +py_cobject_sources(#10267, 1) +py_cobject_sources(#10268, 1) +py_cobject_sources(#10269, 1) +py_cobject_sources(#10270, 1) +py_cobject_sources(#10271, 1) +py_cobject_sources(#10272, 1) +py_cobject_sources(#10273, 1) +py_cobject_sources(#10274, 1) +py_cobject_sources(#10275, 1) +py_cobject_sources(#10276, 1) +py_cobject_sources(#10277, 1) +py_cobject_sources(#10278, 1) +py_cobject_sources(#10279, 1) +py_cobject_sources(#10280, 1) +py_cobject_sources(#10281, 1) +py_cobject_sources(#10282, 1) +py_cobject_sources(#12303, 1) +py_cobject_sources(#10283, 1) +py_cobject_sources(#10284, 1) +py_cobject_sources(#10285, 1) +py_cobject_sources(#10286, 1) +py_cobject_sources(#10287, 1) +py_cobject_sources(#10288, 1) +py_cobject_sources(#10289, 1) +py_cobject_sources(#10290, 1) +py_cobject_sources(#12304, 1) +py_cobject_sources(#10291, 1) +py_cobject_sources(#10292, 1) +py_cobject_sources(#10293, 1) +py_cobject_sources(#10294, 1) +py_cobject_sources(#12305, 1) +py_cobject_sources(#10295, 1) +py_cobject_sources(#10296, 1) +py_cobject_sources(#10297, 1) +py_cobject_sources(#12306, 1) +py_cobject_sources(#12307, 1) +py_cobject_sources(#12308, 1) +py_cobject_sources(#12309, 1) +py_cobject_sources(#10298, 1) +py_cobject_sources(#10299, 1) +py_cobject_sources(#10300, 1) +py_cobject_sources(#12310, 1) +py_cobject_sources(#10301, 1) +py_cobject_sources(#10302, 1) +py_cobject_sources(#10303, 1) +py_cobject_sources(#10304, 1) +py_cobject_sources(#10305, 1) +py_cobject_sources(#10306, 1) +py_cobject_sources(#10307, 1) +py_cobject_sources(#10308, 1) +py_cobject_sources(#10309, 1) +py_cobject_sources(#10310, 1) +py_cobject_sources(#10311, 1) +py_cobject_sources(#10312, 1) +py_cobject_sources(#10313, 1) +py_cobject_sources(#10314, 1) +py_cobject_sources(#10315, 1) +py_cobject_sources(#10316, 1) +py_cobject_sources(#10317, 1) +py_cobject_sources(#10318, 1) +py_cobject_sources(#10319, 1) +py_cobject_sources(#10320, 1) +py_cobject_sources(#10321, 1) +py_cobject_sources(#10322, 1) +py_cobject_sources(#10323, 1) +py_cobject_sources(#10324, 1) +py_cobject_sources(#10325, 1) +py_cobject_sources(#10326, 1) +py_cobject_sources(#10327, 1) +py_cobject_sources(#10328, 1) +py_cobject_sources(#10329, 1) +py_cobject_sources(#10330, 1) +py_cobject_sources(#10331, 1) +py_cobject_sources(#10332, 1) +py_cobject_sources(#10333, 1) +py_cobject_sources(#10334, 1) +py_cobject_sources(#10335, 1) +py_cobject_sources(#10336, 1) +py_cobject_sources(#10337, 1) +py_cobject_sources(#10338, 1) +py_cobject_sources(#10339, 1) +py_cobject_sources(#10340, 1) +py_cobject_sources(#10341, 1) +py_cobject_sources(#10342, 1) +py_cobject_sources(#10343, 1) +py_cobject_sources(#10344, 1) +py_cobject_sources(#10345, 1) +py_cobject_sources(#10346, 1) +py_cobject_sources(#10347, 1) +py_cobject_sources(#10348, 1) +py_cobject_sources(#10349, 1) +py_cobject_sources(#12311, 1) +py_cobject_sources(#10350, 1) +py_cobject_sources(#12312, 1) +py_cobject_sources(#10351, 1) +py_cobject_sources(#10352, 1) +py_cobject_sources(#10353, 1) +py_cobject_sources(#10354, 1) +py_cobject_sources(#12313, 1) +py_cobject_sources(#10355, 1) +py_cobject_sources(#10356, 1) +py_cobject_sources(#10357, 1) +py_cobject_sources(#10358, 1) +py_cobject_sources(#10359, 1) +py_cobject_sources(#10360, 1) +py_cobject_sources(#10361, 1) +py_cobject_sources(#10362, 1) +py_cobject_sources(#10363, 1) +py_cobject_sources(#10364, 1) +py_cobject_sources(#10365, 1) +py_cobject_sources(#10366, 1) +py_cobject_sources(#10367, 1) +py_cobject_sources(#10368, 1) +py_cobject_sources(#10369, 1) +py_cobject_sources(#10370, 1) +py_cobject_sources(#10371, 1) +py_cobject_sources(#10372, 1) +py_cobject_sources(#10373, 1) +py_cobject_sources(#10374, 1) +py_cobject_sources(#10375, 1) +py_cobject_sources(#10376, 1) +py_cobject_sources(#10377, 1) +py_cobject_sources(#10378, 1) +py_cobject_sources(#10379, 1) +py_cobject_sources(#10380, 1) +py_cobject_sources(#10381, 1) +py_cobject_sources(#12314, 1) +py_cobject_sources(#12315, 1) +py_cobject_sources(#10382, 1) +py_cobject_sources(#10383, 1) +py_cobject_sources(#10384, 1) +py_cobject_sources(#10385, 1) +py_cobject_sources(#12316, 1) +py_cobject_sources(#10386, 1) +py_cobject_sources(#10387, 1) +py_cobject_sources(#10388, 1) +py_cobject_sources(#10389, 1) +py_cobject_sources(#10390, 1) +py_cobject_sources(#10391, 1) +py_cobject_sources(#10392, 1) +py_cobject_sources(#12317, 1) +py_cobject_sources(#10393, 1) +py_cobject_sources(#10394, 1) +py_cobject_sources(#12318, 1) +py_cobject_sources(#12319, 1) +py_cobject_sources(#10395, 1) +py_cobject_sources(#10396, 1) +py_cobject_sources(#10397, 1) +py_cobject_sources(#10398, 1) +py_cobject_sources(#10399, 1) +py_cobject_sources(#10400, 1) +py_cobject_sources(#12320, 1) +py_cobject_sources(#11521, 1) +py_cobject_sources(#12321, 1) +py_cobject_sources(#10401, 1) +py_cobject_sources(#10402, 1) +py_cobject_sources(#10403, 1) +py_cobject_sources(#10404, 1) +py_cobject_sources(#12322, 1) +py_cobject_sources(#10405, 1) +py_cobject_sources(#10406, 1) +py_cobject_sources(#10408, 1) +py_cobject_sources(#12323, 1) +py_cobject_sources(#12324, 1) +py_cobject_sources(#10409, 1) +py_cobject_sources(#10410, 1) +py_cobject_sources(#12325, 1) +py_cobject_sources(#10412, 1) +py_cobject_sources(#10413, 1) +py_cobject_sources(#10414, 1) +py_cobject_sources(#10415, 1) +py_cobject_sources(#10416, 1) +py_cobject_sources(#12326, 1) +py_cobject_sources(#12327, 1) +py_cobject_sources(#11522, 1) +py_cobject_sources(#11523, 1) +py_cobject_sources(#12328, 1) +py_cobject_sources(#12329, 1) +py_cobject_sources(#12330, 1) +py_cobject_sources(#12331, 1) +py_cobject_sources(#12332, 1) +py_cobject_sources(#12333, 1) +py_cobject_sources(#12334, 1) +py_cobject_sources(#12335, 1) +py_cobject_sources(#12336, 1) +py_cobject_sources(#12337, 1) +py_cobject_sources(#12338, 1) +py_cobject_sources(#12339, 1) +py_cobject_sources(#11524, 1) +py_cobject_sources(#11525, 1) +py_cobject_sources(#11526, 1) +py_cobject_sources(#11527, 1) +py_cobject_sources(#11528, 1) +py_cobject_sources(#11529, 1) +py_cobject_sources(#11530, 1) +py_cobject_sources(#11531, 1) +py_cobject_sources(#11532, 1) +py_cobject_sources(#11533, 1) +py_cobject_sources(#12340, 1) +py_cobject_sources(#12341, 1) +py_cobject_sources(#12342, 1) +py_cobject_sources(#12343, 1) +py_cobject_sources(#10417, 1) +py_cobject_sources(#10418, 1) +py_cobject_sources(#12344, 1) +py_cobject_sources(#12345, 1) +py_cobject_sources(#12346, 1) +py_cobject_sources(#12347, 1) +py_cobject_sources(#12348, 1) +py_cobject_sources(#12349, 1) +py_cobject_sources(#12350, 1) +py_cobject_sources(#12351, 1) +py_cobject_sources(#12352, 1) +py_cobject_sources(#12353, 1) +py_cobject_sources(#12354, 1) +py_cobject_sources(#12355, 1) +py_cobject_sources(#12356, 1) +py_cobject_sources(#12357, 1) +py_cobject_sources(#12358, 1) +py_cobject_sources(#12359, 1) +py_cobject_sources(#12360, 1) +py_cobject_sources(#12361, 1) +py_cobject_sources(#12362, 1) +py_cobject_sources(#12363, 1) +py_cobject_sources(#12364, 1) +py_cobject_sources(#12365, 1) +py_cobject_sources(#12366, 1) +py_cobject_sources(#12367, 1) +py_cobject_sources(#12368, 1) +py_cobject_sources(#12369, 1) +py_cobject_sources(#12370, 1) +py_cobject_sources(#12371, 1) +py_cobject_sources(#12372, 1) +py_cobject_sources(#12373, 1) +py_cobject_sources(#12374, 1) +py_cobject_sources(#12375, 1) +py_cobject_sources(#12376, 1) +py_cobject_sources(#12377, 1) +py_cobject_sources(#10419, 1) +py_cobject_sources(#10420, 1) +py_cobject_sources(#10421, 1) +py_cobject_sources(#10422, 1) +py_cobject_sources(#12378, 1) +py_cobject_sources(#12379, 1) +py_cobject_sources(#12380, 1) +py_cobject_sources(#12381, 1) +py_cobject_sources(#12382, 1) +py_cobject_sources(#12383, 1) +py_cobject_sources(#12384, 1) +py_cobject_sources(#12385, 1) +py_cobject_sources(#12386, 1) +py_cobject_sources(#12387, 1) +py_cobject_sources(#12388, 1) +py_cobject_sources(#12389, 1) +py_cobject_sources(#12390, 1) +py_cobject_sources(#12391, 1) +py_cobject_sources(#12392, 1) +py_cobject_sources(#12393, 1) +py_cobject_sources(#10423, 1) +py_cobject_sources(#10424, 1) +py_cobject_sources(#10425, 1) +py_cobject_sources(#10426, 1) +py_cobject_sources(#10427, 1) +py_cobject_sources(#10428, 1) +py_cobject_sources(#12394, 1) +py_cobject_sources(#10429, 1) +py_cobject_sources(#10430, 1) +py_cobject_sources(#10431, 1) +py_cobject_sources(#10432, 1) +py_cobject_sources(#10433, 1) +py_cobject_sources(#10434, 1) +py_cobject_sources(#10435, 1) +py_cobject_sources(#10436, 1) +py_cobject_sources(#10437, 1) +py_cobject_sources(#10438, 1) +py_cobject_sources(#10439, 1) +py_cobject_sources(#10440, 1) +py_cobject_sources(#12395, 1) +py_cobject_sources(#12396, 1) +py_cobject_sources(#10441, 1) +py_cobject_sources(#10442, 1) +py_cobject_sources(#10443, 1) +py_cobject_sources(#10444, 1) +py_cobject_sources(#12397, 1) +py_cobject_sources(#10445, 1) +py_cobject_sources(#10446, 1) +py_cobject_sources(#10447, 1) +py_cobject_sources(#10448, 1) +py_cobject_sources(#12398, 1) +py_cobject_sources(#12399, 1) +py_cobject_sources(#10449, 1) +py_cobject_sources(#10450, 1) +py_cobject_sources(#10451, 1) +py_cobject_sources(#10452, 1) +py_cobject_sources(#10453, 1) +py_cobject_sources(#10454, 1) +py_cobject_sources(#10455, 1) +py_cobject_sources(#10456, 1) +py_cobject_sources(#10457, 1) +py_cobject_sources(#10458, 1) +py_cobject_sources(#10459, 1) +py_cobject_sources(#10460, 1) +py_cobject_sources(#10461, 1) +py_cobject_sources(#10462, 1) +py_cobject_sources(#10463, 1) +py_cobject_sources(#10464, 1) +py_cobject_sources(#10465, 1) +py_cobject_sources(#10466, 1) +py_cobject_sources(#10467, 1) +py_cobject_sources(#10468, 1) +py_cobject_sources(#10469, 1) +py_cobject_sources(#10470, 1) +py_cobject_sources(#10471, 1) +py_cobject_sources(#10472, 1) +py_cobject_sources(#10473, 1) +py_cobject_sources(#10474, 1) +py_cobject_sources(#10475, 1) +py_cobject_sources(#10476, 1) +py_cobject_sources(#10477, 1) +py_cobject_sources(#10478, 1) +py_cobject_sources(#10479, 1) +py_cobject_sources(#10480, 1) +py_cobject_sources(#10481, 1) +py_cobject_sources(#10482, 1) +py_cobject_sources(#10483, 1) +py_cobject_sources(#10484, 1) +py_cobject_sources(#10485, 1) +py_cobject_sources(#10486, 1) +py_cobject_sources(#10487, 1) +py_cobject_sources(#10488, 1) +py_cobject_sources(#10489, 1) +py_cobject_sources(#10490, 1) +py_cobject_sources(#10491, 1) +py_cobject_sources(#10492, 1) +py_cobject_sources(#10493, 1) +py_cobject_sources(#10494, 1) +py_cobject_sources(#10495, 1) +py_cobject_sources(#10496, 1) +py_cobject_sources(#10497, 1) +py_cobject_sources(#10498, 1) +py_cobject_sources(#10499, 1) +py_cobject_sources(#10500, 1) +py_cobject_sources(#12400, 1) +py_cobject_sources(#12401, 1) +py_cobject_sources(#10501, 1) +py_cobject_sources(#10502, 1) +py_cobject_sources(#10503, 1) +py_cobject_sources(#10504, 1) +py_cobject_sources(#10505, 1) +py_cobject_sources(#10506, 1) +py_cobject_sources(#12402, 1) +py_cobject_sources(#12403, 1) +py_cobject_sources(#10507, 1) +py_cobject_sources(#10508, 1) +py_cobject_sources(#10509, 1) +py_cobject_sources(#10510, 1) +py_cobject_sources(#10511, 1) +py_cobject_sources(#10512, 1) +py_cobject_sources(#10513, 1) +py_cobject_sources(#10514, 1) +py_cobject_sources(#10515, 1) +py_cobject_sources(#10516, 1) +py_cobject_sources(#10518, 1) +py_cobject_sources(#12404, 1) +py_cobject_sources(#10519, 1) +py_cobject_sources(#10520, 1) +py_cobject_sources(#10521, 1) +py_cobject_sources(#10522, 1) +py_cobject_sources(#10523, 1) +py_cobject_sources(#11534, 1) +py_cobject_sources(#10524, 1) +py_cobject_sources(#10525, 1) +py_cobject_sources(#10527, 1) +py_cobject_sources(#12405, 1) +py_cobject_sources(#10529, 1) +py_cobject_sources(#10530, 1) +py_cobject_sources(#10532, 1) +py_cobject_sources(#10533, 1) +py_cobject_sources(#11535, 1) +py_cobject_sources(#11536, 1) +py_cobject_sources(#11537, 1) +py_cobject_sources(#10534, 1) +py_cobject_sources(#10535, 1) +py_cobject_sources(#10536, 1) +py_cobject_sources(#10537, 1) +py_cobject_sources(#10538, 1) +py_cobject_sources(#10539, 1) +py_cobject_sources(#10540, 1) +py_cobject_sources(#10541, 1) +py_cobject_sources(#10543, 1) +py_cobject_sources(#10544, 1) +py_cobject_sources(#10545, 1) +py_cobject_sources(#11538, 1) +py_cobject_sources(#11539, 1) +py_cobject_sources(#11540, 1) +py_cobject_sources(#10546, 1) +py_cobject_sources(#10547, 1) +py_cobject_sources(#11541, 1) +py_cobject_sources(#12406, 1) +py_cobject_sources(#10548, 1) +py_cobject_sources(#11542, 1) +py_cobject_sources(#10549, 1) +py_cobject_sources(#10550, 1) +py_cobject_sources(#11543, 1) +py_cobject_sources(#10551, 1) +py_cobject_sources(#11544, 1) +py_cobject_sources(#11545, 1) +py_cobject_sources(#10552, 1) +py_cobject_sources(#10553, 1) +py_cobject_sources(#10554, 1) +py_cobject_sources(#11547, 1) +py_cobject_sources(#11548, 1) +py_cobject_sources(#10555, 1) +py_cobject_sources(#10556, 1) +py_cobject_sources(#11549, 1) +py_cobject_sources(#10557, 1) +py_cobject_sources(#11550, 1) +py_cobject_sources(#11551, 1) +py_cobject_sources(#11552, 1) +py_cobject_sources(#10558, 1) +py_cobject_sources(#11553, 1) +py_cobject_sources(#11554, 1) +py_cobject_sources(#11555, 1) +py_cobject_sources(#11556, 1) +py_cobject_sources(#11557, 1) +py_cobject_sources(#10559, 1) +py_cobject_sources(#11558, 1) +py_cobject_sources(#11559, 1) +py_cobject_sources(#10560, 1) +py_cobject_sources(#11560, 1) +py_cobject_sources(#11561, 1) +py_cobject_sources(#10561, 1) +py_cobject_sources(#10562, 1) +py_cobject_sources(#10563, 1) +py_cobject_sources(#11562, 1) +py_cobject_sources(#11563, 1) +py_cobject_sources(#11564, 1) +py_cobject_sources(#10564, 1) +py_cobject_sources(#11565, 1) +py_cobject_sources(#10565, 1) +py_cobject_sources(#10566, 1) +py_cobject_sources(#10567, 1) +py_cobject_sources(#10568, 1) +py_cobject_sources(#10569, 1) +py_cobject_sources(#10570, 1) +py_cobject_sources(#10571, 1) +py_cobject_sources(#10572, 1) +py_cobject_sources(#10573, 1) +py_cobject_sources(#10574, 1) +py_cobject_sources(#10575, 1) +py_cobject_sources(#11566, 1) +py_cobject_sources(#10576, 1) +py_cobject_sources(#10577, 1) +py_cobject_sources(#10578, 1) +py_cobject_sources(#10579, 1) +py_cobject_sources(#10580, 1) +py_cobject_sources(#11567, 1) +py_cobject_sources(#11568, 1) +py_cobject_sources(#11569, 1) +py_cobject_sources(#11570, 1) +py_cobject_sources(#11571, 1) +py_cobject_sources(#11572, 1) +py_cobject_sources(#10581, 1) +py_cobject_sources(#10583, 1) +py_cobject_sources(#10585, 1) +py_cobject_sources(#10587, 1) +py_cobject_sources(#11573, 1) +py_cobject_sources(#10588, 1) +py_cobject_sources(#10589, 1) +py_cobject_sources(#10590, 1) +py_cobject_sources(#10591, 1) +py_cobject_sources(#10592, 1) +py_cobject_sources(#11574, 1) +py_cobject_sources(#10593, 1) +py_cobject_sources(#10594, 1) +py_cobject_sources(#10595, 1) +py_cobject_sources(#10596, 1) +py_cobject_sources(#10597, 1) +py_cobject_sources(#10598, 1) +py_cobject_sources(#10599, 1) +py_cobject_sources(#10600, 1) +py_cobject_sources(#11575, 1) +py_cobject_sources(#10601, 1) +py_cobject_sources(#11576, 1) +py_cobject_sources(#10602, 1) +py_cobject_sources(#10603, 1) +py_cobject_sources(#10604, 1) +py_cobject_sources(#10605, 1) +py_cobject_sources(#10606, 1) +py_cobject_sources(#10607, 1) +py_cobject_sources(#10608, 1) +py_cobject_sources(#10609, 1) +py_cobject_sources(#10610, 1) +py_cobject_sources(#11577, 1) +py_cobject_sources(#10611, 1) +py_cobject_sources(#10612, 1) +py_cobject_sources(#10613, 1) +py_cobject_sources(#10614, 1) +py_cobject_sources(#10615, 1) +py_cobject_sources(#10616, 1) +py_cobject_sources(#10617, 1) +py_cobject_sources(#10618, 1) +py_cobject_sources(#10619, 1) +py_cobject_sources(#10620, 1) +py_cobject_sources(#10621, 1) +py_cobject_sources(#12407, 1) +py_cobject_sources(#12408, 1) +py_cobject_sources(#10622, 1) +py_cobject_sources(#12409, 1) +py_cobject_sources(#10623, 1) +py_cobject_sources(#10624, 1) +py_cobject_sources(#11578, 1) +py_cobject_sources(#10625, 1) +py_cobject_sources(#12410, 1) +py_cobject_sources(#10627, 1) +py_cobject_sources(#10628, 1) +py_cobject_sources(#10629, 1) +py_cobject_sources(#10630, 1) +py_cobject_sources(#10631, 1) +py_cobject_sources(#10632, 1) +py_cobject_sources(#10633, 1) +py_cobject_sources(#10634, 1) +py_cobject_sources(#10635, 1) +py_cobject_sources(#10636, 1) +py_cobject_sources(#11579, 1) +py_cobject_sources(#10637, 1) +py_cobject_sources(#12411, 1) +py_cobject_sources(#10638, 1) +py_cobject_sources(#12412, 1) +py_cobject_sources(#10639, 1) +py_cobject_sources(#10640, 1) +py_cobject_sources(#10641, 1) +py_cobject_sources(#10642, 1) +py_cobject_sources(#10643, 1) +py_cobject_sources(#10644, 1) +py_cobject_sources(#10645, 1) +py_cobject_sources(#10646, 1) +py_cobject_sources(#10648, 1) +py_cobject_sources(#10649, 1) +py_cobject_sources(#10650, 1) +py_cobject_sources(#10651, 1) +py_cobject_sources(#10652, 1) +py_cobject_sources(#12413, 1) +py_cobject_sources(#11580, 1) +py_cobject_sources(#11581, 1) +py_cobject_sources(#10653, 1) +py_cobject_sources(#10654, 1) +py_cobject_sources(#11582, 1) +py_cobject_sources(#11583, 1) +py_cobject_sources(#10655, 1) +py_cobject_sources(#11584, 1) +py_cobject_sources(#10656, 1) +py_cobject_sources(#10657, 1) +py_cobject_sources(#12414, 1) +py_cobject_sources(#12415, 1) +py_cobject_sources(#12416, 1) +py_cobject_sources(#10658, 1) +py_cobject_sources(#11585, 1) +py_cobject_sources(#12417, 1) +py_cobject_sources(#10659, 1) +py_cobject_sources(#10660, 1) +py_cobject_sources(#10661, 1) +py_cobject_sources(#11586, 1) +py_cobject_sources(#10662, 1) +py_cobject_sources(#12418, 1) +py_cobject_sources(#10663, 1) +py_cobject_sources(#10664, 1) +py_cobject_sources(#10665, 1) +py_cobject_sources(#10668, 1) +py_cobject_sources(#10669, 1) +py_cobject_sources(#12419, 1) +py_cobject_sources(#12420, 1) +py_cobject_sources(#12421, 1) +py_cobject_sources(#11587, 1) +py_cobject_sources(#10670, 1) +py_cobject_sources(#12422, 1) +py_cobject_sources(#10671, 1) +py_cobject_sources(#11588, 1) +py_cobject_sources(#11589, 1) +py_cobject_sources(#10672, 1) +py_cobject_sources(#10673, 1) +py_cobject_sources(#10674, 1) +py_cobject_sources(#10675, 1) +py_cobject_sources(#10676, 1) +py_cobject_sources(#10677, 1) +py_cobject_sources(#10679, 1) +py_cobject_sources(#10680, 1) +py_cobject_sources(#10681, 1) +py_cobject_sources(#10682, 1) +py_cobject_sources(#10683, 1) +py_cobject_sources(#10684, 1) +py_cobject_sources(#10685, 1) +py_cobject_sources(#10686, 1) +py_cobject_sources(#11591, 1) +py_cobject_sources(#10687, 1) +py_cobject_sources(#11592, 1) +py_cobject_sources(#11594, 1) +py_cobject_sources(#11595, 1) +py_cobject_sources(#11596, 1) +py_cobject_sources(#11598, 1) +py_cobject_sources(#10688, 1) +py_cobject_sources(#10689, 1) +py_cobject_sources(#10690, 1) +py_cobject_sources(#10691, 1) +py_cobject_sources(#10692, 1) +py_cobject_sources(#11600, 1) +py_cobject_sources(#10693, 1) +py_cobject_sources(#10694, 1) +py_cobject_sources(#10695, 1) +py_cobject_sources(#10696, 1) +py_cobject_sources(#10697, 1) +py_cobject_sources(#10698, 1) +py_cobject_sources(#10699, 1) +py_cobject_sources(#10700, 1) +py_cobject_sources(#10701, 1) +py_cobject_sources(#10702, 1) +py_cobject_sources(#10703, 1) +py_cobject_sources(#10704, 1) +py_cobject_sources(#10705, 1) +py_cobject_sources(#10706, 1) +py_cobject_sources(#11605, 1) +py_cobject_sources(#10707, 1) +py_cobject_sources(#10708, 1) +py_cobject_sources(#10709, 1) +py_cobject_sources(#11606, 1) +py_cobject_sources(#11607, 1) +py_cobject_sources(#10710, 1) +py_cobject_sources(#10711, 1) +py_cobject_sources(#10712, 1) +py_cobject_sources(#10714, 1) +py_cobject_sources(#10715, 1) +py_cobject_sources(#10716, 1) +py_cobject_sources(#11608, 1) +py_cobject_sources(#11610, 1) +py_cobject_sources(#11611, 1) +py_cobject_sources(#10717, 1) +py_cobject_sources(#10718, 1) +py_cobject_sources(#11612, 1) +py_cobject_sources(#11613, 1) +py_cobject_sources(#10719, 1) +py_cobject_sources(#10720, 1) +py_cobject_sources(#10721, 1) +py_cobject_sources(#10722, 1) +py_cobject_sources(#10724, 1) +py_cobject_sources(#10725, 1) +py_cobject_sources(#10726, 1) +py_cobject_sources(#10727, 1) +py_cobject_sources(#10728, 1) +py_cobject_sources(#10729, 1) +py_cobject_sources(#10730, 1) +py_cobject_sources(#10731, 1) +py_cobject_sources(#10732, 1) +py_cobject_sources(#10733, 1) +py_cobject_sources(#10734, 1) +py_cobject_sources(#10735, 1) +py_cobject_sources(#10736, 1) +py_cobject_sources(#10737, 1) +py_cobject_sources(#10738, 1) +py_cobject_sources(#10739, 1) +py_cobject_sources(#10740, 1) +py_cobject_sources(#10741, 1) +py_cobject_sources(#10742, 1) +py_cobject_sources(#10743, 1) +py_cobject_sources(#10744, 1) +py_cobject_sources(#10745, 1) +py_cobject_sources(#10746, 1) +py_cobject_sources(#10747, 1) +py_cobject_sources(#10748, 1) +py_cobject_sources(#10749, 1) +py_cobject_sources(#10750, 1) +py_cobject_sources(#10751, 1) +py_cobject_sources(#10752, 1) +py_cobject_sources(#10753, 1) +py_cobject_sources(#10754, 1) +py_cobject_sources(#10755, 1) +py_cobject_sources(#10756, 1) +py_cobject_sources(#11614, 1) +py_cobject_sources(#11615, 1) +py_cobject_sources(#11616, 1) +py_cobject_sources(#11617, 1) +py_cobject_sources(#11618, 1) +py_cobject_sources(#11619, 1) +py_cobject_sources(#11620, 1) +py_cobject_sources(#11621, 1) +py_cobject_sources(#11622, 1) +py_cobject_sources(#11623, 1) +py_cobject_sources(#10757, 1) +py_cobject_sources(#11624, 1) +py_cobject_sources(#10758, 1) +py_cobject_sources(#11625, 1) +py_cobject_sources(#10759, 1) +py_cobject_sources(#10760, 1) +py_cobject_sources(#10761, 1) +py_cobject_sources(#11626, 1) +py_cobject_sources(#11627, 1) +py_cobject_sources(#11628, 1) +py_cobject_sources(#10762, 1) +py_cobject_sources(#10763, 1) +py_cobject_sources(#10764, 1) +py_cobject_sources(#10765, 1) +py_cobject_sources(#10766, 1) +py_cobject_sources(#10767, 1) +py_cobject_sources(#10768, 1) +py_cobject_sources(#11629, 1) +py_cobject_sources(#10769, 1) +py_cobject_sources(#10770, 1) +py_cobject_sources(#10771, 1) +py_cobject_sources(#10772, 1) +py_cobject_sources(#10773, 1) +py_cobject_sources(#10774, 1) +py_cobject_sources(#10775, 1) +py_cobject_sources(#10776, 1) +py_cobject_sources(#10777, 1) +py_cobject_sources(#10778, 1) +py_cobject_sources(#10779, 1) +py_cobject_sources(#10780, 1) +py_cobject_sources(#10781, 1) +py_cobject_sources(#10782, 1) +py_cobject_sources(#10783, 1) +py_cobject_sources(#10784, 1) +py_cobject_sources(#10785, 1) +py_cobject_sources(#10786, 1) +py_cobject_sources(#10787, 1) +py_cobject_sources(#10788, 1) +py_cobject_sources(#10789, 1) +py_cobject_sources(#10790, 1) +py_cobject_sources(#10791, 1) +py_cobject_sources(#10792, 1) +py_cobject_sources(#10793, 1) +py_cobject_sources(#10794, 1) +py_cobject_sources(#10795, 1) +py_cobject_sources(#10796, 1) +py_cobject_sources(#10797, 1) +py_cobject_sources(#11630, 1) +py_cobject_sources(#11631, 1) +py_cobject_sources(#11632, 1) +py_cobject_sources(#11633, 1) +py_cobject_sources(#11634, 1) +py_cobject_sources(#11635, 1) +py_cobject_sources(#11636, 1) +py_cobject_sources(#11637, 1) +py_cobject_sources(#11638, 1) +py_cobject_sources(#11639, 1) +py_cobject_sources(#10798, 1) +py_cobject_sources(#11640, 1) +py_cobject_sources(#11641, 1) +py_cobject_sources(#10799, 1) +py_cobject_sources(#10800, 1) +py_cobject_sources(#10801, 1) +py_cobject_sources(#10802, 1) +py_cobject_sources(#10803, 1) +py_cobject_sources(#11642, 1) +py_cobject_sources(#11643, 1) +py_cobject_sources(#10804, 1) +py_cobject_sources(#10805, 1) +py_cobject_sources(#10806, 1) +py_cobject_sources(#11644, 1) +py_cobject_sources(#10807, 1) +py_cobject_sources(#10808, 1) +py_cobject_sources(#10809, 1) +py_cobject_sources(#10810, 1) +py_cobject_sources(#10811, 1) +py_cobject_sources(#10812, 1) +py_cobject_sources(#10813, 1) +py_cobject_sources(#11645, 1) +py_cobject_sources(#11646, 1) +py_cobject_sources(#11647, 1) +py_cobject_sources(#11648, 1) +py_cobject_sources(#10814, 1) +py_cobject_sources(#10815, 1) +py_cobject_sources(#10816, 1) +py_cobject_sources(#10817, 1) +py_cobject_sources(#10818, 1) +py_cobject_sources(#10819, 1) +py_cobject_sources(#10820, 1) +py_cobject_sources(#11649, 1) +py_cobject_sources(#10821, 1) +py_cobject_sources(#10822, 1) +py_cobject_sources(#10823, 1) +py_cobject_sources(#10824, 1) +py_cobject_sources(#11652, 1) +py_cobject_sources(#10825, 1) +py_cobject_sources(#10826, 1) +py_cobject_sources(#10827, 1) +py_cobject_sources(#11653, 1) +py_cobject_sources(#10828, 1) +py_cobject_sources(#10829, 1) +py_cobject_sources(#10830, 1) +py_cobject_sources(#10831, 1) +py_cobject_sources(#10832, 1) +py_cobject_sources(#10833, 1) +py_cobject_sources(#11656, 1) +py_cobject_sources(#10834, 1) +py_cobject_sources(#11657, 1) +py_cobject_sources(#10835, 1) +py_cobject_sources(#10836, 1) +py_cobject_sources(#10837, 1) +py_cobject_sources(#10838, 1) +py_cobject_sources(#10839, 1) +py_cobject_sources(#10840, 1) +py_cobject_sources(#10841, 1) +py_cobject_sources(#10842, 1) +py_cobject_sources(#11658, 1) +py_cobject_sources(#10843, 1) +py_cobject_sources(#10844, 1) +py_cobject_sources(#10845, 1) +py_cobject_sources(#10846, 1) +py_cobject_sources(#10847, 1) +py_cobject_sources(#10848, 1) +py_cobject_sources(#10849, 1) +py_cobject_sources(#10850, 1) +py_cobject_sources(#10851, 1) +py_cobject_sources(#10852, 1) +py_cobject_sources(#10853, 1) +py_cobject_sources(#10854, 1) +py_cobject_sources(#10855, 1) +py_cobject_sources(#11660, 1) +py_cobject_sources(#10856, 1) +py_cobject_sources(#11662, 1) +py_cobject_sources(#11664, 1) +py_cobject_sources(#10857, 1) +py_cobject_sources(#10858, 1) +py_cobject_sources(#10859, 1) +py_cobject_sources(#10860, 1) +py_cobject_sources(#10861, 1) +py_cobject_sources(#10862, 1) +py_cobject_sources(#10863, 1) +py_cobject_sources(#10864, 1) +py_cobject_sources(#10865, 1) +py_cobject_sources(#10866, 1) +py_cobject_sources(#10867, 1) +py_cobject_sources(#10869, 1) +py_cobject_sources(#10870, 1) +py_cobject_sources(#10871, 1) +py_cobject_sources(#10872, 1) +py_cobject_sources(#10873, 1) +py_cobject_sources(#10874, 1) +py_cobject_sources(#10875, 1) +py_cobject_sources(#10876, 1) +py_cobject_sources(#10877, 1) +py_cobject_sources(#10878, 1) +py_cobject_sources(#10879, 1) +py_cobject_sources(#10880, 1) +py_cobject_sources(#10881, 1) +py_cobject_sources(#10882, 1) +py_cobject_sources(#10883, 1) +py_cobject_sources(#10884, 1) +py_cobject_sources(#10885, 1) +py_cobject_sources(#10887, 1) +py_cobject_sources(#10888, 1) +py_cobject_sources(#10889, 1) +py_cobject_sources(#10890, 1) +py_cobject_sources(#10891, 1) +py_cobject_sources(#10892, 1) +py_cobject_sources(#10893, 1) +py_cobject_sources(#10894, 1) +py_cobject_sources(#10895, 1) +py_cobject_sources(#10896, 1) +py_cobject_sources(#10897, 1) +py_cobject_sources(#10898, 1) +py_cobject_sources(#10899, 1) +py_cobject_sources(#10900, 1) +py_cobject_sources(#10901, 1) +py_cobject_sources(#10902, 1) +py_cobject_sources(#10903, 1) +py_cobject_sources(#10904, 1) +py_cobject_sources(#10905, 1) +py_cobject_sources(#10906, 1) +py_cobject_sources(#10907, 1) +py_cobject_sources(#10908, 1) +py_cobject_sources(#11669, 1) +py_cobject_sources(#10909, 1) +py_cobject_sources(#10910, 1) +py_cobject_sources(#10911, 1) +py_cobject_sources(#11670, 1) +py_cobject_sources(#10912, 1) +py_cobject_sources(#10913, 1) +py_cobject_sources(#10914, 1) +py_cobject_sources(#10915, 1) +py_cobject_sources(#10916, 1) +py_cobject_sources(#10917, 1) +py_cobject_sources(#10918, 1) +py_cobject_sources(#10919, 1) +py_cobject_sources(#11674, 1) +py_cobject_sources(#11676, 1) +py_cobject_sources(#10920, 1) +py_cobject_sources(#10921, 1) +py_cobject_sources(#10922, 1) +py_cobject_sources(#10923, 1) +py_cobject_sources(#10924, 1) +py_cobject_sources(#11678, 1) +py_cobject_sources(#10925, 1) +py_cobject_sources(#10926, 1) +py_cobject_sources(#10927, 1) +py_cobject_sources(#11679, 1) +py_cobject_sources(#10928, 1) +py_cobject_sources(#10929, 1) +py_cobject_sources(#10930, 1) +py_cobject_sources(#10931, 1) +py_cobject_sources(#10932, 1) +py_cobject_sources(#10933, 1) +py_cobject_sources(#10934, 1) +py_cobject_sources(#11681, 1) +py_cobject_sources(#11682, 1) +py_cobject_sources(#11683, 1) +py_cobject_sources(#10935, 1) +py_cobject_sources(#10936, 1) +py_cobject_sources(#10937, 1) +py_cobject_sources(#10938, 1) +py_cobject_sources(#10939, 1) +py_cobject_sources(#10940, 1) +py_cobject_sources(#10941, 1) +py_cobject_sources(#10942, 1) +py_cobject_sources(#10943, 1) +py_cobject_sources(#11686, 1) +py_cobject_sources(#11687, 1) +py_cobject_sources(#11688, 1) +py_cobject_sources(#11689, 1) +py_cobject_sources(#10944, 1) +py_cobject_sources(#11691, 1) +py_cobject_sources(#11693, 1) +py_cobject_sources(#11694, 1) +py_cobject_sources(#11695, 1) +py_cobject_sources(#10945, 1) +py_cobject_sources(#11696, 1) +py_cobject_sources(#11698, 1) +py_cobject_sources(#11699, 1) +py_cobject_sources(#11700, 1) +py_cobject_sources(#11701, 1) +py_cobject_sources(#11702, 1) +py_cobject_sources(#11705, 1) +py_cobject_sources(#11706, 1) +py_cobject_sources(#11707, 1) +py_cobject_sources(#11708, 1) +py_cobject_sources(#11709, 1) +py_cobject_sources(#10946, 1) +py_cobject_sources(#11710, 1) +py_cobject_sources(#11711, 1) +py_cobject_sources(#10947, 1) +py_cobject_sources(#10948, 1) +py_cobject_sources(#10949, 1) +py_cobject_sources(#11712, 1) +py_cobject_sources(#11713, 1) +py_cobject_sources(#10950, 1) +py_cobject_sources(#11714, 1) +py_cobject_sources(#11715, 1) +py_cobject_sources(#11716, 1) +py_cobject_sources(#10951, 1) +py_cobject_sources(#10952, 1) +py_cobject_sources(#10953, 1) +py_cobject_sources(#11717, 1) +py_cobject_sources(#10954, 1) +py_cobject_sources(#11718, 1) +py_cobject_sources(#11720, 1) +py_cobject_sources(#10955, 1) +py_cobject_sources(#11721, 1) +py_cobject_sources(#10956, 1) +py_cobject_sources(#11722, 1) +py_cobject_sources(#11723, 1) +py_cobject_sources(#11724, 1) +py_cobject_sources(#11725, 1) +py_cobject_sources(#11726, 1) +py_cobject_sources(#11727, 1) +py_cobject_sources(#11728, 1) +py_cobject_sources(#10957, 1) +py_cobject_sources(#11729, 1) +py_cobject_sources(#10958, 1) +py_cobject_sources(#10959, 1) +py_cobject_sources(#10960, 1) +py_cobject_sources(#11730, 1) +py_cobject_sources(#10961, 1) +py_cobject_sources(#10962, 1) +py_cobject_sources(#10963, 1) +py_cobject_sources(#10964, 1) +py_cobject_sources(#10965, 1) +py_cobject_sources(#10966, 1) +py_cobject_sources(#10967, 1) +py_cobject_sources(#10968, 1) +py_cobject_sources(#10969, 1) +py_cobject_sources(#10970, 1) +py_cobject_sources(#10971, 1) +py_cobject_sources(#10972, 1) +py_cobject_sources(#10973, 1) +py_cobject_sources(#10974, 1) +py_cobject_sources(#10975, 1) +py_cobject_sources(#10976, 1) +py_cobject_sources(#10977, 1) +py_cobject_sources(#10978, 1) +py_cobject_sources(#10979, 1) +py_cobject_sources(#10980, 1) +py_cobject_sources(#10981, 1) +py_cobject_sources(#11733, 1) +py_cobject_sources(#11734, 1) +py_cobject_sources(#10982, 1) +py_cobject_sources(#10983, 1) +py_cobject_sources(#10984, 1) +py_cobject_sources(#10985, 1) +py_cobject_sources(#11735, 1) +py_cobject_sources(#10986, 1) +py_cobject_sources(#10987, 1) +py_cobject_sources(#10988, 1) +py_cobject_sources(#10989, 1) +py_cobject_sources(#10990, 1) +py_cobject_sources(#10991, 1) +py_cobject_sources(#11737, 1) +py_cobject_sources(#11739, 1) +py_cobject_sources(#11740, 1) +py_cobject_sources(#11741, 1) +py_cobject_sources(#11742, 1) +py_cobject_sources(#10992, 1) +py_cobject_sources(#10993, 1) +py_cobject_sources(#10994, 1) +py_cobject_sources(#11744, 1) +py_cobject_sources(#10995, 1) +py_cobject_sources(#11746, 1) +py_cobject_sources(#11747, 1) +py_cobject_sources(#11748, 1) +py_cobject_sources(#10996, 1) +py_cobject_sources(#11749, 1) +py_cobject_sources(#11750, 1) +py_cobject_sources(#11751, 1) +py_cobject_sources(#11752, 1) +py_cobject_sources(#11753, 1) +py_cobject_sources(#11754, 1) +py_cobject_sources(#11755, 1) +py_cobject_sources(#10997, 1) +py_cobject_sources(#11756, 1) +py_cobject_sources(#10998, 1) +py_cobject_sources(#10999, 1) +py_cobject_sources(#11000, 1) +py_cobject_sources(#11001, 1) +py_cobject_sources(#11002, 1) +py_cobject_sources(#11003, 1) +py_cobject_sources(#11004, 1) +py_cobject_sources(#11005, 1) +py_cobject_sources(#11006, 1) +py_cobject_sources(#11007, 1) +py_cobject_sources(#11008, 1) +py_cobject_sources(#11009, 1) +py_cobject_sources(#11010, 1) +py_cobject_sources(#11011, 1) +py_cobject_sources(#11012, 1) +py_cobject_sources(#11013, 1) +py_cobject_sources(#11014, 1) +py_cobject_sources(#11015, 1) +py_cobject_sources(#11016, 1) +py_cobject_sources(#11017, 1) +py_cobject_sources(#11018, 1) +py_cobject_sources(#11758, 1) +py_cobject_sources(#11760, 1) +py_cobject_sources(#11761, 1) +py_cobject_sources(#11019, 1) +py_cobject_sources(#11020, 1) +py_cobject_sources(#11021, 1) +py_cobject_sources(#11022, 1) +py_cobject_sources(#11023, 1) +py_cobject_sources(#11024, 1) +py_cobject_sources(#11762, 1) +py_cobject_sources(#11763, 1) +py_cobject_sources(#11764, 1) +py_cobject_sources(#11765, 1) +py_cobject_sources(#11025, 1) +py_cobject_sources(#11766, 1) +py_cobject_sources(#11767, 1) +py_cobject_sources(#11026, 1) +py_cobject_sources(#11027, 1) +py_cobject_sources(#11028, 1) +py_cobject_sources(#11029, 1) +py_cobject_sources(#11030, 1) +py_cobject_sources(#11769, 1) +py_cobject_sources(#11771, 1) +py_cobject_sources(#11772, 1) +py_cobject_sources(#11031, 1) +py_cobject_sources(#11773, 1) +py_cobject_sources(#11774, 1) +py_cobject_sources(#11776, 1) +py_cobject_sources(#11032, 1) +py_cobject_sources(#11777, 1) +py_cobject_sources(#11778, 1) +py_cobject_sources(#11779, 1) +py_cobject_sources(#11780, 1) +py_cobject_sources(#11781, 1) +py_cobject_sources(#11033, 1) +py_cobject_sources(#11782, 1) +py_cobject_sources(#11034, 1) +py_cobject_sources(#11035, 1) +py_cobject_sources(#11036, 1) +py_cobject_sources(#11037, 1) +py_cobject_sources(#11038, 1) +py_cobject_sources(#11039, 1) +py_cobject_sources(#11040, 1) +py_cobject_sources(#11041, 1) +py_cobject_sources(#11042, 1) +py_cobject_sources(#11043, 1) +py_cobject_sources(#11784, 1) +py_cobject_sources(#11785, 1) +py_cobject_sources(#11786, 1) +py_cobject_sources(#11787, 1) +py_cobject_sources(#11788, 1) +py_cobject_sources(#11789, 1) +py_cobject_sources(#11044, 1) +py_cobject_sources(#11790, 1) +py_cobject_sources(#11045, 1) +py_cobject_sources(#11046, 1) +py_cobject_sources(#11047, 1) +py_cobject_sources(#11048, 1) +py_cobject_sources(#11049, 1) +py_cobject_sources(#11050, 1) +py_cobject_sources(#11051, 1) +py_cobject_sources(#11052, 1) +py_cobject_sources(#11053, 1) +py_cobject_sources(#11054, 1) +py_cobject_sources(#11055, 1) +py_cobject_sources(#11056, 1) +py_cobject_sources(#11792, 1) +py_cobject_sources(#11793, 1) +py_cobject_sources(#11794, 1) +py_cobject_sources(#11795, 1) +py_cobject_sources(#11796, 1) +py_cobject_sources(#11797, 1) +py_cobject_sources(#11057, 1) +py_cobject_sources(#11798, 1) +py_cobject_sources(#11058, 1) +py_cobject_sources(#11059, 1) +py_cobject_sources(#11060, 1) +py_cobject_sources(#11061, 1) +py_cobject_sources(#11062, 1) +py_cobject_sources(#11063, 1) +py_cobject_sources(#11799, 1) +py_cobject_sources(#11801, 1) +py_cobject_sources(#11802, 1) +py_cobject_sources(#11803, 1) +py_cobject_sources(#11804, 1) +py_cobject_sources(#11805, 1) +py_cobject_sources(#11806, 1) +py_cobject_sources(#11807, 1) +py_cobject_sources(#11808, 1) +py_cobject_sources(#11809, 1) +py_cobject_sources(#11810, 1) +py_cobject_sources(#11064, 1) +py_cobject_sources(#11812, 1) +py_cobject_sources(#11813, 1) +py_cobject_sources(#11814, 1) +py_cobject_sources(#11065, 1) +py_cobject_sources(#11066, 1) +py_cobject_sources(#11067, 1) +py_cobject_sources(#11068, 1) +py_cobject_sources(#11069, 1) +py_cobject_sources(#11070, 1) +py_cobject_sources(#11071, 1) +py_cobject_sources(#11072, 1) +py_cobject_sources(#11073, 1) +py_cobject_sources(#11074, 1) +py_cobject_sources(#11075, 1) +py_cobject_sources(#11076, 1) +py_cobject_sources(#11077, 1) +py_cobject_sources(#11078, 1) +py_cobject_sources(#11079, 1) +py_cobject_sources(#11816, 1) +py_cobject_sources(#11080, 1) +py_cobject_sources(#11081, 1) +py_cobject_sources(#11082, 1) +py_cobject_sources(#11083, 1) +py_cobject_sources(#11084, 1) +py_cobject_sources(#11085, 1) +py_cobject_sources(#11086, 1) +py_cobject_sources(#11817, 1) +py_cobject_sources(#11087, 1) +py_cobject_sources(#11088, 1) +py_cobject_sources(#11818, 1) +py_cobject_sources(#11089, 1) +py_cobject_sources(#11090, 1) +py_cobject_sources(#11091, 1) +py_cobject_sources(#11819, 1) +py_cobject_sources(#11092, 1) +py_cobject_sources(#11820, 1) +py_cobject_sources(#11093, 1) +py_cobject_sources(#11094, 1) +py_cobject_sources(#11095, 1) +py_cobject_sources(#11096, 1) +py_cobject_sources(#11822, 1) +py_cobject_sources(#11097, 1) +py_cobject_sources(#11098, 1) +py_cobject_sources(#11823, 1) +py_cobject_sources(#11099, 1) +py_cobject_sources(#11100, 1) +py_cobject_sources(#11101, 1) +py_cobject_sources(#11102, 1) +py_cobject_sources(#11103, 1) +py_cobject_sources(#11104, 1) +py_cobject_sources(#11106, 1) +py_cobject_sources(#11824, 1) +py_cobject_sources(#11107, 1) +py_cobject_sources(#11108, 1) +py_cobject_sources(#11109, 1) +py_cobject_sources(#11110, 1) +py_cobject_sources(#11111, 1) +py_cobject_sources(#11112, 1) +py_cobject_sources(#11113, 1) +py_cobject_sources(#11114, 1) +py_cobject_sources(#11115, 1) +py_cobject_sources(#11116, 1) +py_cobject_sources(#11117, 1) +py_cobject_sources(#11118, 1) +py_cobject_sources(#11826, 1) +py_cobject_sources(#11119, 1) +py_cobject_sources(#11120, 1) +py_cobject_sources(#11121, 1) +py_cobject_sources(#11122, 1) +py_cobject_sources(#11123, 1) +py_cobject_sources(#11124, 1) +py_cobject_sources(#11828, 1) +py_cobject_sources(#11833, 1) +py_cobject_sources(#11834, 1) +py_cobject_sources(#11835, 1) +py_cobject_sources(#11836, 1) +py_cobject_sources(#11837, 1) +py_cobject_sources(#11838, 1) +py_cobject_sources(#11839, 1) +py_cobject_sources(#11840, 1) +py_cobject_sources(#11841, 1) +py_cobject_sources(#11842, 1) +py_cobject_sources(#11843, 1) +py_cobject_sources(#11844, 1) +py_cobject_sources(#11845, 1) +py_cobject_sources(#11846, 1) +py_cobject_sources(#11847, 1) +py_cobject_sources(#11848, 1) +py_cobject_sources(#11849, 1) +py_cobject_sources(#11850, 1) +py_cobject_sources(#11851, 1) +py_cobject_sources(#11852, 1) +py_cobject_sources(#11854, 1) +py_cobject_sources(#11125, 1) +py_cobject_sources(#11126, 1) +py_cobject_sources(#11856, 1) +py_cobject_sources(#11858, 1) +py_cobject_sources(#11859, 1) +py_cobject_sources(#11860, 1) +py_cobject_sources(#11127, 1) +py_cobject_sources(#11128, 1) +py_cobject_sources(#11129, 1) +py_cobject_sources(#11862, 1) +py_cobject_sources(#11863, 1) +py_cobject_sources(#11864, 1) +py_cobject_sources(#11865, 1) +py_cobject_sources(#11866, 1) +py_cobject_sources(#11130, 1) +py_cobject_sources(#11868, 1) +py_cobject_sources(#11869, 1) +py_cobject_sources(#11871, 1) +py_cobject_sources(#11872, 1) +py_cobject_sources(#11131, 1) +py_cobject_sources(#11132, 1) +py_cobject_sources(#11133, 1) +py_cobject_sources(#11873, 1) +py_cobject_sources(#11874, 1) +py_cobject_sources(#11134, 1) +py_cobject_sources(#11135, 1) +py_cobject_sources(#11875, 1) +py_cobject_sources(#11136, 1) +py_cobject_sources(#11876, 1) +py_cobject_sources(#11877, 1) +py_cobject_sources(#11878, 1) +py_cobject_sources(#11137, 1) +py_cobject_sources(#11138, 1) +py_cobject_sources(#11139, 1) +py_cobject_sources(#11140, 1) +py_cobject_sources(#11141, 1) +py_cobject_sources(#11143, 1) +py_cobject_sources(#11144, 1) +py_cobject_sources(#11145, 1) +py_cobject_sources(#11146, 1) +py_cobject_sources(#11147, 1) +py_cobject_sources(#11148, 1) +py_cobject_sources(#11149, 1) +py_cobject_sources(#11150, 1) +py_cobject_sources(#11151, 1) +py_cobject_sources(#11152, 1) +py_cobject_sources(#11153, 1) +py_cobject_sources(#11887, 1) +py_cobject_sources(#11154, 1) +py_cobject_sources(#11155, 1) +py_cobject_sources(#11156, 1) +py_cobject_sources(#11157, 1) +py_cobject_sources(#11158, 1) +py_cobject_sources(#11159, 1) +py_cobject_sources(#11160, 1) +py_cobject_sources(#11161, 1) +py_cobject_sources(#11162, 1) +py_cobject_sources(#11163, 1) +py_cobject_sources(#11164, 1) +py_cobject_sources(#11165, 1) +py_cobject_sources(#11166, 1) +py_cobject_sources(#11167, 1) +py_cobject_sources(#11168, 1) +py_cobject_sources(#11169, 1) +py_cobject_sources(#11170, 1) +py_cobject_sources(#11171, 1) +py_cobject_sources(#11172, 1) +py_cobject_sources(#11899, 1) +py_cobject_sources(#11173, 1) +py_cobject_sources(#11174, 1) +py_cobject_sources(#11175, 1) +py_cobject_sources(#11176, 1) +py_cobject_sources(#11177, 1) +py_cobject_sources(#11178, 1) +py_cobject_sources(#11179, 1) +py_cobject_sources(#11180, 1) +py_cobject_sources(#11181, 1) +py_cobject_sources(#11182, 1) +py_cobject_sources(#11183, 1) +py_cobject_sources(#11184, 1) +py_cobject_sources(#11185, 1) +py_cobject_sources(#11186, 1) +py_cobject_sources(#11187, 1) +py_cobject_sources(#11188, 1) +py_cobject_sources(#11189, 1) +py_cobject_sources(#11190, 1) +py_cobject_sources(#11900, 1) +py_cobject_sources(#11191, 1) +py_cobject_sources(#11192, 1) +py_cobject_sources(#11193, 1) +py_cobject_sources(#11901, 1) +py_cobject_sources(#11194, 1) +py_cobject_sources(#11195, 1) +py_cobject_sources(#11196, 1) +py_cobject_sources(#11197, 1) +py_cobject_sources(#11198, 1) +py_cobject_sources(#11199, 1) +py_cobject_sources(#11200, 1) +py_cobject_sources(#11201, 1) +py_cobject_sources(#11202, 1) +py_cobject_sources(#11203, 1) +py_cobject_sources(#11204, 1) +py_cobject_sources(#11205, 1) +py_cobject_sources(#11206, 1) +py_cobject_sources(#11207, 1) +py_cobject_sources(#11208, 1) +py_cobject_sources(#11209, 1) +py_cobject_sources(#11210, 1) +py_cobject_sources(#11211, 1) +py_cobject_sources(#11212, 1) +py_cobject_sources(#11213, 1) +py_cobject_sources(#11214, 1) +py_cobject_sources(#11215, 1) +py_cobject_sources(#11216, 1) +py_cobject_sources(#11217, 1) +py_cobject_sources(#11218, 1) +py_cobject_sources(#11219, 1) +py_cobject_sources(#11220, 1) +py_cobject_sources(#11221, 1) +py_cobject_sources(#11902, 1) +py_cobject_sources(#11222, 1) +py_cobject_sources(#11223, 1) +py_cobject_sources(#11224, 1) +py_cobject_sources(#11225, 1) +py_cobject_sources(#11226, 1) +py_cobject_sources(#11227, 1) +py_cobject_sources(#11228, 1) +py_cobject_sources(#11229, 1) +py_cobject_sources(#11230, 1) +py_cobject_sources(#11231, 1) +py_cobject_sources(#11232, 1) +py_cobject_sources(#11233, 1) +py_cobject_sources(#11234, 1) +py_cobject_sources(#11235, 1) +py_cobject_sources(#11236, 1) +py_cobject_sources(#11237, 1) +py_cobject_sources(#11238, 1) +py_cobject_sources(#11239, 1) +py_cobject_sources(#11240, 1) +py_cobject_sources(#11241, 1) +py_cobject_sources(#11242, 1) +py_cobject_sources(#11243, 1) +py_cobject_sources(#11244, 1) +py_cobject_sources(#11245, 1) +py_cobject_sources(#11246, 1) +py_cobject_sources(#11247, 1) +py_cobject_sources(#11248, 1) +py_cobject_sources(#11249, 1) +py_cobject_sources(#11908, 1) +py_cobject_sources(#11909, 1) +py_cobject_sources(#11250, 1) +py_cobject_sources(#11251, 1) +py_cobject_sources(#11252, 1) +py_cobject_sources(#11253, 1) +py_cobject_sources(#11254, 1) +py_cobject_sources(#11255, 1) +py_cobject_sources(#11256, 1) +py_cobject_sources(#11257, 1) +py_cobject_sources(#11258, 1) +py_cobject_sources(#11913, 1) +py_cobject_sources(#11259, 1) +py_cobject_sources(#11914, 1) +py_cobject_sources(#11915, 1) +py_cobject_sources(#11916, 1) +py_cobject_sources(#11260, 1) +py_cobject_sources(#11917, 1) +py_cobject_sources(#11918, 1) +py_cobject_sources(#11919, 1) +py_cobject_sources(#11261, 1) +py_cobject_sources(#11920, 1) +py_cobject_sources(#11262, 1) +py_cobject_sources(#11263, 1) +py_cobject_sources(#11264, 1) +py_cobject_sources(#11265, 1) +py_cobject_sources(#11266, 1) +py_cobject_sources(#11267, 1) +py_cobject_sources(#11268, 1) +py_cobject_sources(#11269, 1) +py_cobject_sources(#11270, 1) +py_cobject_sources(#11271, 1) +py_cobject_sources(#11272, 1) +py_cobject_sources(#11273, 1) +py_cobject_sources(#11274, 1) +py_cobject_sources(#11275, 1) +py_cobject_sources(#11277, 1) +py_cobject_sources(#11278, 1) +py_cobject_sources(#11279, 1) +py_cobject_sources(#11280, 1) +py_cobject_sources(#11924, 1) +py_cobject_sources(#11281, 1) +py_cobject_sources(#11282, 1) +py_cobject_sources(#11283, 1) +py_cobject_sources(#11284, 1) +py_cobject_sources(#11285, 1) +py_cobject_sources(#11286, 1) +py_cobject_sources(#11287, 1) +py_cobject_sources(#11288, 1) +py_cobject_sources(#11289, 1) +py_cobject_sources(#11290, 1) +py_cobject_sources(#11291, 1) +py_cobject_sources(#11292, 1) +py_cobject_sources(#11293, 1) +py_cobject_sources(#11294, 1) +py_cobject_sources(#11295, 1) +py_cobject_sources(#11296, 1) +py_cobject_sources(#11297, 1) +py_cobject_sources(#11298, 1) +py_cobject_sources(#11299, 1) +py_cobject_sources(#11300, 1) +py_cobject_sources(#11301, 1) +py_cobject_sources(#11302, 1) +py_cobject_sources(#11303, 1) +py_cobject_sources(#11304, 1) +py_cobject_sources(#11305, 1) +py_cobject_sources(#11306, 1) +py_cobject_sources(#11307, 1) +py_cobject_sources(#11308, 1) +py_cobject_sources(#11309, 1) +py_cobject_sources(#11310, 1) +py_cobject_sources(#11311, 1) +py_cobject_sources(#11312, 1) +py_cobject_sources(#11313, 1) +py_cobject_sources(#11314, 1) +py_cobject_sources(#11315, 1) +py_cobject_sources(#11316, 1) +py_cobject_sources(#11317, 1) +py_cobject_sources(#11318, 1) +py_cobject_sources(#11319, 1) +py_cobject_sources(#11320, 1) +py_cobject_sources(#11321, 1) +py_cobject_sources(#11322, 1) +py_cobject_sources(#11323, 1) +py_cobject_sources(#11324, 1) +py_cobject_sources(#11325, 1) +py_cobject_sources(#11326, 1) +py_cobject_sources(#11327, 1) +py_cobject_sources(#11328, 1) +py_cobject_sources(#11330, 1) +py_cobject_sources(#11331, 1) +py_cobject_sources(#11332, 1) +py_cobject_sources(#11333, 1) +py_cobject_sources(#11334, 1) +py_cobject_sources(#11335, 1) +py_cobject_sources(#11926, 1) +py_cobject_sources(#11336, 1) +py_cobject_sources(#11337, 1) +py_cobject_sources(#11338, 1) +py_cobject_sources(#11339, 1) +py_cobject_sources(#11340, 1) +py_cobject_sources(#11341, 1) +py_cobject_sources(#11342, 1) +py_cobject_sources(#11343, 1) +py_cobject_sources(#11344, 1) +py_cobject_sources(#11345, 1) +py_cobject_sources(#11346, 1) +py_cobject_sources(#11347, 1) +py_cobject_sources(#11348, 1) +py_cobject_sources(#11349, 1) +py_cobject_sources(#11927, 1) +py_cobject_sources(#11350, 1) +py_cobject_sources(#11928, 1) +py_cobject_sources(#11930, 1) +py_cobject_sources(#11931, 1) +py_cobject_sources(#11932, 1) +py_cobject_sources(#11933, 1) +py_cobject_sources(#11934, 1) +py_cobject_sources(#11936, 1) +py_cobject_sources(#11937, 1) +py_cobject_sources(#11938, 1) +py_cobject_sources(#11940, 1) +py_cobject_sources(#11351, 1) +py_cobject_sources(#11352, 1) +py_cobject_sources(#11353, 1) +py_cobject_sources(#11354, 1) +py_cobject_sources(#11355, 1) +py_cobject_sources(#11356, 1) +py_cobject_sources(#11357, 1) +py_cobject_sources(#11358, 1) +py_cobject_sources(#11359, 1) +py_cobject_sources(#11360, 1) +py_cobject_sources(#11944, 1) +py_cobject_sources(#11361, 1) +py_cobject_sources(#11362, 1) +py_cobject_sources(#11363, 1) +py_cobject_sources(#11364, 1) +py_cobject_sources(#11365, 1) +py_cobject_sources(#11946, 1) +py_cobject_sources(#11947, 1) +py_cobject_sources(#11366, 1) +py_cobject_sources(#11367, 1) +py_cobject_sources(#11948, 1) +py_cobject_sources(#11368, 1) +py_cobject_sources(#11949, 1) +py_cobject_sources(#11369, 1) +py_cobject_sources(#11370, 1) +py_cobject_sources(#11371, 1) +py_cobject_sources(#11372, 1) +py_cobject_sources(#11373, 1) +py_cobject_sources(#11374, 1) +py_cobject_sources(#11375, 1) +py_cobject_sources(#11951, 1) +py_cobject_sources(#11376, 1) +py_cobject_sources(#11377, 1) +py_cobject_sources(#11378, 1) +py_cobject_sources(#11952, 1) +py_cobject_sources(#11379, 1) +py_cobject_sources(#11380, 1) +py_cobject_sources(#11381, 1) +py_cobject_sources(#11382, 1) +py_cobject_sources(#11383, 1) +py_cobject_sources(#11384, 1) +py_cobject_sources(#11385, 1) +py_cobject_sources(#11386, 1) +py_cobject_sources(#11387, 1) +py_cobject_sources(#11388, 1) +py_cobject_sources(#11389, 1) +py_cobject_sources(#11390, 1) +py_cobject_sources(#11391, 1) +py_cobject_sources(#11392, 1) +py_cobject_sources(#11393, 1) +py_cobject_sources(#11394, 1) +py_cobject_sources(#11395, 1) +py_cobject_sources(#11396, 1) +py_cobject_sources(#11397, 1) +py_cobject_sources(#11398, 1) +py_cobject_sources(#11399, 1) +py_cobject_sources(#11400, 1) +py_cobject_sources(#11401, 1) +py_cobject_sources(#11402, 1) +py_cobject_sources(#11403, 1) +py_cobject_sources(#11404, 1) +py_cobject_sources(#11405, 1) +py_cobject_sources(#11406, 1) +py_cobject_sources(#11407, 1) +py_cobject_sources(#11408, 1) +py_cobject_sources(#11409, 1) +py_cobject_sources(#11410, 1) +py_cobject_sources(#11411, 1) +py_cobject_sources(#11412, 1) +py_cobject_sources(#11413, 1) +py_cobject_sources(#11414, 1) +py_cobject_sources(#11415, 1) +py_cobject_sources(#11416, 1) +py_cobject_sources(#11417, 1) +py_cobject_sources(#11418, 1) +py_cobject_sources(#11419, 1) +py_cobject_sources(#11420, 1) +py_cobject_sources(#11421, 1) +py_cobject_sources(#11422, 1) +py_cobject_sources(#11423, 1) +py_cobject_sources(#11424, 1) +py_cobject_sources(#11425, 1) +py_cobject_sources(#11426, 1) +py_cobject_sources(#11427, 1) +py_cobject_sources(#11428, 1) +py_cobject_sources(#11429, 1) +py_cobject_sources(#11430, 1) +py_cobject_sources(#11431, 1) +py_cobject_sources(#11432, 1) +py_cobject_sources(#11433, 1) +py_cobject_sources(#11434, 1) +py_cobject_sources(#11954, 1) +py_cobject_sources(#11435, 1) +py_cobject_sources(#11436, 1) +py_cobject_sources(#11437, 1) +py_cobject_sources(#11438, 1) +py_cobject_sources(#11439, 1) +py_cobject_sources(#11440, 1) +py_cobject_sources(#11441, 1) +py_cobject_sources(#11442, 1) +py_cobject_sources(#11443, 1) +py_cobject_sources(#11444, 1) +py_cobject_sources(#11445, 1) +py_cobject_sources(#11446, 1) +py_cobject_sources(#11447, 1) +py_cobject_sources(#11448, 1) +py_cobject_sources(#11449, 1) +py_cobject_sources(#11450, 1) +py_cobject_sources(#11451, 1) +py_cobject_sources(#11452, 1) +py_cobject_sources(#11453, 1) +py_cobject_sources(#11454, 1) +py_cobject_sources(#11455, 1) +py_cobject_sources(#11456, 1) +py_cobject_sources(#11457, 1) +py_cobject_sources(#11957, 1) +py_cobject_sources(#11458, 1) +py_cobject_sources(#11459, 1) +py_cobject_sources(#11958, 1) +py_cobject_sources(#11959, 1) +py_cobject_sources(#11960, 1) +py_cobject_sources(#11961, 1) +py_cobject_sources(#11962, 1) +py_cobject_sources(#11460, 1) +py_cobject_sources(#11963, 1) +py_cobject_sources(#11461, 1) +py_cobject_sources(#11462, 1) +py_cobject_sources(#11463, 1) +py_cobject_sources(#11964, 1) +py_cobject_sources(#11965, 1) +py_cobject_sources(#11966, 1) +py_cobject_sources(#11464, 1) +py_cobject_sources(#11465, 1) +py_cobject_sources(#11967, 1) +py_cobject_sources(#11968, 1) +py_cobject_sources(#11466, 1) +py_cobject_sources(#11467, 1) +py_cobject_sources(#11969, 1) +py_cobject_sources(#11970, 1) +py_cobject_sources(#11971, 1) +py_cobject_sources(#11972, 1) +py_cobject_sources(#11468, 1) +py_cobject_sources(#11469, 1) +py_cobject_sources(#11470, 1) +py_cobject_sources(#11471, 1) +py_cobject_sources(#11472, 1) +py_cobject_sources(#11473, 1) +py_cobject_sources(#11474, 1) +py_cobject_sources(#11475, 1) +py_cobject_sources(#11476, 1) +py_cobject_sources(#11477, 1) +py_cobject_sources(#11478, 1) +py_cobject_sources(#11479, 1) +py_cobject_sources(#11480, 1) +py_cobject_sources(#11973, 1) +py_cobject_sources(#11974, 1) +py_cobject_sources(#11975, 1) +py_cobject_sources(#11976, 1) +py_cobject_sources(#11481, 1) +py_cobject_sources(#11482, 1) +py_cobject_sources(#11483, 1) +py_cobject_sources(#11484, 1) +py_cobject_sources(#11485, 1) +py_cobject_sources(#11486, 1) +py_cobject_sources(#11487, 1) +py_cobject_sources(#11978, 1) +py_cobject_sources(#11488, 1) +py_cobject_sources(#11489, 1) +py_cobject_sources(#11490, 1) +py_cobject_sources(#11493, 1) +py_cobject_sources(#11494, 1) +py_cobject_sources(#11495, 1) +py_cobject_sources(#11496, 1) +py_cobject_sources(#11497, 1) +py_cobject_sources(#11980, 1) +py_cobject_sources(#11981, 1) +py_cobject_sources(#11498, 1) +py_cobject_sources(#11499, 1) +py_cobject_sources(#11500, 1) +py_cobject_sources(#11501, 1) +py_cobject_sources(#11983, 1) +py_cobject_sources(#11502, 1) +py_cobject_sources(#11503, 1) +py_cobject_sources(#11504, 1) +py_cobject_sources(#11505, 1) +py_cobject_sources(#11506, 1) + diff --git a/python/extractor/semmle/data/README.md b/python/extractor/semmle/data/README.md new file mode 100644 index 00000000000..3ab81ca1f86 --- /dev/null +++ b/python/extractor/semmle/data/README.md @@ -0,0 +1 @@ +The TRAP files in this directory were automatically generated from the cpython source code, copyright PSF. diff --git a/python/extractor/semmle/data/__init__.py b/python/extractor/semmle/data/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/semmle/data/interpreter2.trap b/python/extractor/semmle/data/interpreter2.trap new file mode 100644 index 00000000000..abf2f7e046a --- /dev/null +++ b/python/extractor/semmle/data/interpreter2.trap @@ -0,0 +1,12078 @@ +#10000 = @"C_type$function" +#10001 = @"C_type$type" +py_cobjects(#10001) +py_cobjecttypes(#10001, #10001) +py_cobject_sources(#10001, 0) +#10002 = @"C_type$type$2__abstractmethods__" +#10003 = @"C_type$getset_descriptor" +py_cobjects(#10003) +py_cobjecttypes(#10003, #10001) +py_cobject_sources(#10003, 0) +#10004 = @"C_type$getset_descriptor$2__delete__" +#10005 = @"C_type$wrapper_descriptor" +py_cobjects(#10005) +py_cobjecttypes(#10005, #10001) +py_cobject_sources(#10005, 0) +#10006 = @"C_type$wrapper_descriptor$2__call__" +py_cobjects(#10006) +py_cobjecttypes(#10006, #10005) +py_cobject_sources(#10006, 0) +py_cobjectnames(#10006, "__call__") +py_cmembers_versioned(#10005, "__call__", #10006, "2") +#10007 = @"C_type$wrapper_descriptor$2__doc__" +py_cobjects(#10007) +py_cobjecttypes(#10007, #10003) +py_cobject_sources(#10007, 0) +#10008 = @"C_type$wrapper_descriptor$2__doc__$2__set__" +#10009 = @"C_type$method-wrapper" +py_cobjects(#10009) +py_cobjecttypes(#10009, #10001) +py_cobject_sources(#10009, 0) +#10010 = @"C_type$method-wrapper$2__call__" +py_cobjects(#10010) +py_cobjecttypes(#10010, #10005) +py_cobject_sources(#10010, 0) +py_cobjectnames(#10010, "__call__") +py_cmembers_versioned(#10009, "__call__", #10010, "2") +#10011 = @"C_type$method-wrapper$2__cmp__" +py_cobjects(#10011) +py_cobjecttypes(#10011, #10005) +py_cobject_sources(#10011, 0) +py_cobjectnames(#10011, "__cmp__") +py_cmembers_versioned(#10009, "__cmp__", #10011, "2") +#10012 = @"C_type$method-wrapper$2__doc__" +py_cobjects(#10012) +py_cobjecttypes(#10012, #10003) +py_cobject_sources(#10012, 0) +#10013 = @"C_type$method-wrapper$2__doc__$2__set__" +py_cobjects(#10013) +py_cobjecttypes(#10013, #10009) +py_cobject_sources(#10013, 0) +py_cobjectnames(#10013, "__set__") +py_cmembers_versioned(#10012, "__set__", #10013, "2") +#10014 = @"C_type$method-wrapper$2__doc__$2__getattribute__" +py_cobjects(#10014) +py_cobjecttypes(#10014, #10009) +py_cobject_sources(#10014, 0) +py_cobjectnames(#10014, "__getattribute__") +py_cmembers_versioned(#10012, "__getattribute__", #10014, "2") +py_cmembers_versioned(#10012, "__objclass__", #10009, "2") +#10015 = @"C_type$method-wrapper$2__doc__$2__repr__" +py_cobjects(#10015) +py_cobjecttypes(#10015, #10009) +py_cobject_sources(#10015, 0) +py_cobjectnames(#10015, "__repr__") +py_cmembers_versioned(#10012, "__repr__", #10015, "2") +#10016 = @"C_type$method-wrapper$2__doc__$2__get__" +py_cobjects(#10016) +py_cobjecttypes(#10016, #10009) +py_cobject_sources(#10016, 0) +py_cobjectnames(#10016, "__get__") +py_cmembers_versioned(#10012, "__get__", #10016, "2") +#10017 = @"C_None" +#10018 = @"C_type$NoneType" +py_cobjects(#10018) +py_cobjecttypes(#10018, #10001) +py_cobject_sources(#10018, 0) +py_cmembers_versioned(#10018, "__doc__", #10017, "2") +#10019 = @"C_type$NoneType$2__hash__" +py_cobjects(#10019) +py_cobjecttypes(#10019, #10005) +py_cobject_sources(#10019, 0) +py_cobjectnames(#10019, "__hash__") +py_cmembers_versioned(#10018, "__hash__", #10019, "2") +#10020 = @"C_type$NoneType$2__repr__" +py_cobjects(#10020) +py_cobjecttypes(#10020, #10005) +py_cobject_sources(#10020, 0) +py_cobjectnames(#10020, "__repr__") +py_cmembers_versioned(#10018, "__repr__", #10020, "2") +#10021 = @"C_type$object" +py_cobjects(#10021) +py_cobjecttypes(#10021, #10001) +py_cobject_sources(#10021, 0) +#10022 = @"C_type$object$2__class__" +py_cobjects(#10022) +py_cobjecttypes(#10022, #10003) +py_cobject_sources(#10022, 0) +#10023 = @"C_type$object$2__class__$2__set__" +py_cobjects(#10023) +py_cobjecttypes(#10023, #10009) +py_cobject_sources(#10023, 0) +py_cobjectnames(#10023, "__set__") +py_cmembers_versioned(#10022, "__set__", #10023, "2") +#10024 = @"C_type$object$2__class__$2__getattribute__" +py_cobjects(#10024) +py_cobjecttypes(#10024, #10009) +py_cobject_sources(#10024, 0) +py_cobjectnames(#10024, "__getattribute__") +py_cmembers_versioned(#10022, "__getattribute__", #10024, "2") +py_cmembers_versioned(#10022, "__objclass__", #10021, "2") +#10025 = @"C_type$object$2__class__$2__repr__" +py_cobjects(#10025) +py_cobjecttypes(#10025, #10009) +py_cobject_sources(#10025, 0) +py_cobjectnames(#10025, "__repr__") +py_cmembers_versioned(#10022, "__repr__", #10025, "2") +#10026 = @"C_type$object$2__class__$2__get__" +py_cobjects(#10026) +py_cobjecttypes(#10026, #10009) +py_cobject_sources(#10026, 0) +py_cobjectnames(#10026, "__get__") +py_cmembers_versioned(#10022, "__get__", #10026, "2") +#10027 = @"C_bytes$43668771b159ce5cf2403f7d85b2e7b2cfa0fa17" +#10028 = @"C_type$bytes" +py_cobjects(#10028) +py_cobjecttypes(#10028, #10001) +py_cobject_sources(#10028, 0) +#10029 = @"C_type$bytes$2__add__" +py_cobjects(#10029) +py_cobjecttypes(#10029, #10005) +py_cobject_sources(#10029, 0) +py_cobjectnames(#10029, "__add__") +py_cmembers_versioned(#10028, "__add__", #10029, "2") +#10030 = @"C_type$bytes$2__contains__" +py_cobjects(#10030) +py_cobjecttypes(#10030, #10005) +py_cobject_sources(#10030, 0) +py_cobjectnames(#10030, "__contains__") +py_cmembers_versioned(#10028, "__contains__", #10030, "2") +#10031 = @"C_bytes$89fa4e8b61f4e344a49c8e380b1f1069d190a01c" +py_cobjects(#10031) +py_cobjecttypes(#10031, #10028) +py_cobject_sources(#10031, 0) +py_cobjectnames(#10031, "b'str(object='') -> string + +Return a nice string representation of the object. +If the argument is a string, the return value is the same object.'") +py_cmembers_versioned(#10028, "__doc__", #10031, "2") +#10032 = @"C_type$bytes$2__eq__" +py_cobjects(#10032) +py_cobjecttypes(#10032, #10005) +py_cobject_sources(#10032, 0) +py_cobjectnames(#10032, "__eq__") +py_cmembers_versioned(#10028, "__eq__", #10032, "2") +#10033 = @"C_type$bytes$2__format__" +#10034 = @"C_type$method_descriptor" +py_cobjects(#10034) +py_cobjecttypes(#10034, #10001) +py_cobject_sources(#10034, 0) +#10035 = @"C_type$method_descriptor$2__call__" +py_cobjects(#10035) +py_cobjecttypes(#10035, #10005) +py_cobject_sources(#10035, 0) +py_cobjectnames(#10035, "__call__") +py_cmembers_versioned(#10034, "__call__", #10035, "2") +#10036 = @"C_type$method_descriptor$2__doc__" +py_cobjects(#10036) +py_cobjecttypes(#10036, #10003) +py_cobject_sources(#10036, 0) +#10037 = @"C_type$method_descriptor$2__doc__$2__set__" +py_cobjects(#10037) +py_cobjecttypes(#10037, #10009) +py_cobject_sources(#10037, 0) +py_cobjectnames(#10037, "__set__") +py_cmembers_versioned(#10036, "__set__", #10037, "2") +#10038 = @"C_type$method_descriptor$2__doc__$2__getattribute__" +py_cobjects(#10038) +py_cobjecttypes(#10038, #10009) +py_cobject_sources(#10038, 0) +py_cobjectnames(#10038, "__getattribute__") +py_cmembers_versioned(#10036, "__getattribute__", #10038, "2") +py_cmembers_versioned(#10036, "__objclass__", #10034, "2") +#10039 = @"C_type$method_descriptor$2__doc__$2__repr__" +py_cobjects(#10039) +py_cobjecttypes(#10039, #10009) +py_cobject_sources(#10039, 0) +py_cobjectnames(#10039, "__repr__") +py_cmembers_versioned(#10036, "__repr__", #10039, "2") +#10040 = @"C_type$method_descriptor$2__doc__$2__get__" +py_cobjects(#10040) +py_cobjecttypes(#10040, #10009) +py_cobject_sources(#10040, 0) +py_cobjectnames(#10040, "__get__") +py_cmembers_versioned(#10036, "__get__", #10040, "2") +py_cmembers_versioned(#10036, "__doc__", #10017, "2") +#10041 = @"C_type$method_descriptor$2__doc__$2__delete__" +py_cobjects(#10041) +py_cobjecttypes(#10041, #10009) +py_cobject_sources(#10041, 0) +py_cobjectnames(#10041, "__delete__") +py_cmembers_versioned(#10036, "__delete__", #10041, "2") +py_cobjectnames(#10036, "__doc__") +py_cmembers_versioned(#10034, "__doc__", #10036, "2") +#10042 = @"C_type$method_descriptor$2__get__" +py_cobjects(#10042) +py_cobjecttypes(#10042, #10005) +py_cobject_sources(#10042, 0) +py_cobjectnames(#10042, "__get__") +py_cmembers_versioned(#10034, "__get__", #10042, "2") +#10043 = @"C_type$method_descriptor$2__getattribute__" +py_cobjects(#10043) +py_cobjecttypes(#10043, #10005) +py_cobject_sources(#10043, 0) +py_cobjectnames(#10043, "__getattribute__") +py_cmembers_versioned(#10034, "__getattribute__", #10043, "2") +#10044 = @"C_type$method_descriptor$2__name__" +#10045 = @"C_type$member_descriptor" +py_cobjects(#10045) +py_cobjecttypes(#10045, #10001) +py_cobject_sources(#10045, 0) +#10046 = @"C_type$member_descriptor$2__delete__" +py_cobjects(#10046) +py_cobjecttypes(#10046, #10005) +py_cobject_sources(#10046, 0) +py_cobjectnames(#10046, "__delete__") +py_cmembers_versioned(#10045, "__delete__", #10046, "2") +#10047 = @"C_type$member_descriptor$2__doc__" +py_cobjects(#10047) +py_cobjecttypes(#10047, #10003) +py_cobject_sources(#10047, 0) +#10048 = @"C_type$member_descriptor$2__doc__$2__set__" +py_cobjects(#10048) +py_cobjecttypes(#10048, #10009) +py_cobject_sources(#10048, 0) +py_cobjectnames(#10048, "__set__") +py_cmembers_versioned(#10047, "__set__", #10048, "2") +#10049 = @"C_type$member_descriptor$2__doc__$2__getattribute__" +py_cobjects(#10049) +py_cobjecttypes(#10049, #10009) +py_cobject_sources(#10049, 0) +py_cobjectnames(#10049, "__getattribute__") +py_cmembers_versioned(#10047, "__getattribute__", #10049, "2") +py_cmembers_versioned(#10047, "__objclass__", #10045, "2") +#10050 = @"C_type$member_descriptor$2__doc__$2__repr__" +py_cobjects(#10050) +py_cobjecttypes(#10050, #10009) +py_cobject_sources(#10050, 0) +py_cobjectnames(#10050, "__repr__") +py_cmembers_versioned(#10047, "__repr__", #10050, "2") +#10051 = @"C_type$member_descriptor$2__doc__$2__get__" +py_cobjects(#10051) +py_cobjecttypes(#10051, #10009) +py_cobject_sources(#10051, 0) +py_cobjectnames(#10051, "__get__") +py_cmembers_versioned(#10047, "__get__", #10051, "2") +py_cmembers_versioned(#10047, "__doc__", #10017, "2") +#10052 = @"C_type$member_descriptor$2__doc__$2__delete__" +py_cobjects(#10052) +py_cobjecttypes(#10052, #10009) +py_cobject_sources(#10052, 0) +py_cobjectnames(#10052, "__delete__") +py_cmembers_versioned(#10047, "__delete__", #10052, "2") +py_cobjectnames(#10047, "__doc__") +py_cmembers_versioned(#10045, "__doc__", #10047, "2") +#10053 = @"C_type$member_descriptor$2__get__" +py_cobjects(#10053) +py_cobjecttypes(#10053, #10005) +py_cobject_sources(#10053, 0) +py_cobjectnames(#10053, "__get__") +py_cmembers_versioned(#10045, "__get__", #10053, "2") +#10054 = @"C_type$member_descriptor$2__getattribute__" +py_cobjects(#10054) +py_cobjecttypes(#10054, #10005) +py_cobject_sources(#10054, 0) +py_cobjectnames(#10054, "__getattribute__") +py_cmembers_versioned(#10045, "__getattribute__", #10054, "2") +#10055 = @"C_type$member_descriptor$2__name__" +py_cobjects(#10055) +py_cobjecttypes(#10055, #10045) +py_cobject_sources(#10055, 0) +py_cobjectnames(#10055, "__name__") +py_cmembers_versioned(#10045, "__name__", #10055, "2") +#10056 = @"C_type$member_descriptor$2__objclass__" +py_cobjects(#10056) +py_cobjecttypes(#10056, #10045) +py_cobject_sources(#10056, 0) +py_cobjectnames(#10056, "__objclass__") +py_cmembers_versioned(#10045, "__objclass__", #10056, "2") +#10057 = @"C_type$member_descriptor$2__repr__" +py_cobjects(#10057) +py_cobjecttypes(#10057, #10005) +py_cobject_sources(#10057, 0) +py_cobjectnames(#10057, "__repr__") +py_cmembers_versioned(#10045, "__repr__", #10057, "2") +#10058 = @"C_type$member_descriptor$2__set__" +py_cobjects(#10058) +py_cobjecttypes(#10058, #10005) +py_cobject_sources(#10058, 0) +py_cobjectnames(#10058, "__set__") +py_cmembers_versioned(#10045, "__set__", #10058, "2") +py_cmembers_versioned(#10045, ".super.", #10021, "2") +py_cobjectnames(#10045, "member_descriptor") +py_cobjects(#10044) +py_cobjecttypes(#10044, #10045) +py_cobject_sources(#10044, 0) +py_cobjectnames(#10044, "__name__") +py_cmembers_versioned(#10034, "__name__", #10044, "2") +#10059 = @"C_type$method_descriptor$2__objclass__" +py_cobjects(#10059) +py_cobjecttypes(#10059, #10045) +py_cobject_sources(#10059, 0) +py_cobjectnames(#10059, "__objclass__") +py_cmembers_versioned(#10034, "__objclass__", #10059, "2") +#10060 = @"C_type$method_descriptor$2__repr__" +py_cobjects(#10060) +py_cobjecttypes(#10060, #10005) +py_cobject_sources(#10060, 0) +py_cobjectnames(#10060, "__repr__") +py_cmembers_versioned(#10034, "__repr__", #10060, "2") +py_cmembers_versioned(#10034, ".super.", #10021, "2") +py_cobjectnames(#10034, "method_descriptor") +py_cobjects(#10033) +py_cobjecttypes(#10033, #10034) +py_cobject_sources(#10033, 0) +py_cobjectnames(#10033, "__format__") +py_cmembers_versioned(#10028, "__format__", #10033, "2") +#10061 = @"C_type$bytes$2__ge__" +py_cobjects(#10061) +py_cobjecttypes(#10061, #10005) +py_cobject_sources(#10061, 0) +py_cobjectnames(#10061, "__ge__") +py_cmembers_versioned(#10028, "__ge__", #10061, "2") +#10062 = @"C_type$bytes$2__getattribute__" +py_cobjects(#10062) +py_cobjecttypes(#10062, #10005) +py_cobject_sources(#10062, 0) +py_cobjectnames(#10062, "__getattribute__") +py_cmembers_versioned(#10028, "__getattribute__", #10062, "2") +#10063 = @"C_type$bytes$2__getitem__" +py_cobjects(#10063) +py_cobjecttypes(#10063, #10005) +py_cobject_sources(#10063, 0) +py_cobjectnames(#10063, "__getitem__") +py_cmembers_versioned(#10028, "__getitem__", #10063, "2") +#10064 = @"C_type$bytes$2__getnewargs__" +py_cobjects(#10064) +py_cobjecttypes(#10064, #10034) +py_cobject_sources(#10064, 0) +py_cobjectnames(#10064, "__getnewargs__") +py_cmembers_versioned(#10028, "__getnewargs__", #10064, "2") +#10065 = @"C_type$bytes$2__getslice__" +py_cobjects(#10065) +py_cobjecttypes(#10065, #10005) +py_cobject_sources(#10065, 0) +py_cobjectnames(#10065, "__getslice__") +py_cmembers_versioned(#10028, "__getslice__", #10065, "2") +#10066 = @"C_type$bytes$2__gt__" +py_cobjects(#10066) +py_cobjecttypes(#10066, #10005) +py_cobject_sources(#10066, 0) +py_cobjectnames(#10066, "__gt__") +py_cmembers_versioned(#10028, "__gt__", #10066, "2") +#10067 = @"C_type$bytes$2__hash__" +py_cobjects(#10067) +py_cobjecttypes(#10067, #10005) +py_cobject_sources(#10067, 0) +py_cobjectnames(#10067, "__hash__") +py_cmembers_versioned(#10028, "__hash__", #10067, "2") +#10068 = @"C_type$bytes$2__le__" +py_cobjects(#10068) +py_cobjecttypes(#10068, #10005) +py_cobject_sources(#10068, 0) +py_cobjectnames(#10068, "__le__") +py_cmembers_versioned(#10028, "__le__", #10068, "2") +#10069 = @"C_type$bytes$2__len__" +py_cobjects(#10069) +py_cobjecttypes(#10069, #10005) +py_cobject_sources(#10069, 0) +py_cobjectnames(#10069, "__len__") +py_cmembers_versioned(#10028, "__len__", #10069, "2") +#10070 = @"C_type$bytes$2__lt__" +py_cobjects(#10070) +py_cobjecttypes(#10070, #10005) +py_cobject_sources(#10070, 0) +py_cobjectnames(#10070, "__lt__") +py_cmembers_versioned(#10028, "__lt__", #10070, "2") +#10071 = @"C_type$bytes$2__mod__" +py_cobjects(#10071) +py_cobjecttypes(#10071, #10005) +py_cobject_sources(#10071, 0) +py_cobjectnames(#10071, "__mod__") +py_cmembers_versioned(#10028, "__mod__", #10071, "2") +#10072 = @"C_type$bytes$2__mul__" +py_cobjects(#10072) +py_cobjecttypes(#10072, #10005) +py_cobject_sources(#10072, 0) +py_cobjectnames(#10072, "__mul__") +py_cmembers_versioned(#10028, "__mul__", #10072, "2") +#10073 = @"C_type$bytes$2__ne__" +py_cobjects(#10073) +py_cobjecttypes(#10073, #10005) +py_cobject_sources(#10073, 0) +py_cobjectnames(#10073, "__ne__") +py_cmembers_versioned(#10028, "__ne__", #10073, "2") +#10074 = @"C_type$bytes$2__new__" +#10075 = @"C_type$builtin_function_or_method" +py_cobjects(#10075) +py_cobjecttypes(#10075, #10001) +py_cobject_sources(#10075, 0) +#10076 = @"C_type$builtin_function_or_method$2__call__" +py_cobjects(#10076) +py_cobjecttypes(#10076, #10005) +py_cobject_sources(#10076, 0) +py_cobjectnames(#10076, "__call__") +py_cmembers_versioned(#10075, "__call__", #10076, "2") +#10077 = @"C_type$builtin_function_or_method$2__cmp__" +py_cobjects(#10077) +py_cobjecttypes(#10077, #10005) +py_cobject_sources(#10077, 0) +py_cobjectnames(#10077, "__cmp__") +py_cmembers_versioned(#10075, "__cmp__", #10077, "2") +#10078 = @"C_type$builtin_function_or_method$2__doc__" +py_cobjects(#10078) +py_cobjecttypes(#10078, #10003) +py_cobject_sources(#10078, 0) +#10079 = @"C_type$builtin_function_or_method$2__doc__$2__set__" +py_cobjects(#10079) +py_cobjecttypes(#10079, #10009) +py_cobject_sources(#10079, 0) +py_cobjectnames(#10079, "__set__") +py_cmembers_versioned(#10078, "__set__", #10079, "2") +#10080 = @"C_type$builtin_function_or_method$2__doc__$2__getattribute__" +py_cobjects(#10080) +py_cobjecttypes(#10080, #10009) +py_cobject_sources(#10080, 0) +py_cobjectnames(#10080, "__getattribute__") +py_cmembers_versioned(#10078, "__getattribute__", #10080, "2") +py_cmembers_versioned(#10078, "__objclass__", #10075, "2") +#10081 = @"C_type$builtin_function_or_method$2__doc__$2__repr__" +py_cobjects(#10081) +py_cobjecttypes(#10081, #10009) +py_cobject_sources(#10081, 0) +py_cobjectnames(#10081, "__repr__") +py_cmembers_versioned(#10078, "__repr__", #10081, "2") +#10082 = @"C_type$builtin_function_or_method$2__doc__$2__get__" +py_cobjects(#10082) +py_cobjecttypes(#10082, #10009) +py_cobject_sources(#10082, 0) +py_cobjectnames(#10082, "__get__") +py_cmembers_versioned(#10078, "__get__", #10082, "2") +py_cmembers_versioned(#10078, "__doc__", #10017, "2") +#10083 = @"C_type$builtin_function_or_method$2__doc__$2__delete__" +py_cobjects(#10083) +py_cobjecttypes(#10083, #10009) +py_cobject_sources(#10083, 0) +py_cobjectnames(#10083, "__delete__") +py_cmembers_versioned(#10078, "__delete__", #10083, "2") +py_cobjectnames(#10078, "__doc__") +py_cmembers_versioned(#10075, "__doc__", #10078, "2") +#10084 = @"C_type$builtin_function_or_method$2__eq__" +py_cobjects(#10084) +py_cobjecttypes(#10084, #10005) +py_cobject_sources(#10084, 0) +py_cobjectnames(#10084, "__eq__") +py_cmembers_versioned(#10075, "__eq__", #10084, "2") +#10085 = @"C_type$builtin_function_or_method$2__ge__" +py_cobjects(#10085) +py_cobjecttypes(#10085, #10005) +py_cobject_sources(#10085, 0) +py_cobjectnames(#10085, "__ge__") +py_cmembers_versioned(#10075, "__ge__", #10085, "2") +#10086 = @"C_type$builtin_function_or_method$2__getattribute__" +py_cobjects(#10086) +py_cobjecttypes(#10086, #10005) +py_cobject_sources(#10086, 0) +py_cobjectnames(#10086, "__getattribute__") +py_cmembers_versioned(#10075, "__getattribute__", #10086, "2") +#10087 = @"C_type$builtin_function_or_method$2__gt__" +py_cobjects(#10087) +py_cobjecttypes(#10087, #10005) +py_cobject_sources(#10087, 0) +py_cobjectnames(#10087, "__gt__") +py_cmembers_versioned(#10075, "__gt__", #10087, "2") +#10088 = @"C_type$builtin_function_or_method$2__hash__" +py_cobjects(#10088) +py_cobjecttypes(#10088, #10005) +py_cobject_sources(#10088, 0) +py_cobjectnames(#10088, "__hash__") +py_cmembers_versioned(#10075, "__hash__", #10088, "2") +#10089 = @"C_type$builtin_function_or_method$2__le__" +py_cobjects(#10089) +py_cobjecttypes(#10089, #10005) +py_cobject_sources(#10089, 0) +py_cobjectnames(#10089, "__le__") +py_cmembers_versioned(#10075, "__le__", #10089, "2") +#10090 = @"C_type$builtin_function_or_method$2__lt__" +py_cobjects(#10090) +py_cobjecttypes(#10090, #10005) +py_cobject_sources(#10090, 0) +py_cobjectnames(#10090, "__lt__") +py_cmembers_versioned(#10075, "__lt__", #10090, "2") +#10091 = @"C_type$builtin_function_or_method$2__module__" +py_cobjects(#10091) +py_cobjecttypes(#10091, #10045) +py_cobject_sources(#10091, 0) +py_cobjectnames(#10091, "__module__") +py_cmembers_versioned(#10075, "__module__", #10091, "2") +#10092 = @"C_type$builtin_function_or_method$2__name__" +py_cobjects(#10092) +py_cobjecttypes(#10092, #10003) +py_cobject_sources(#10092, 0) +#10093 = @"C_type$builtin_function_or_method$2__name__$2__set__" +py_cobjects(#10093) +py_cobjecttypes(#10093, #10009) +py_cobject_sources(#10093, 0) +py_cobjectnames(#10093, "__set__") +py_cmembers_versioned(#10092, "__set__", #10093, "2") +#10094 = @"C_type$builtin_function_or_method$2__name__$2__getattribute__" +py_cobjects(#10094) +py_cobjecttypes(#10094, #10009) +py_cobject_sources(#10094, 0) +py_cobjectnames(#10094, "__getattribute__") +py_cmembers_versioned(#10092, "__getattribute__", #10094, "2") +py_cmembers_versioned(#10092, "__objclass__", #10075, "2") +#10095 = @"C_type$builtin_function_or_method$2__name__$2__repr__" +py_cobjects(#10095) +py_cobjecttypes(#10095, #10009) +py_cobject_sources(#10095, 0) +py_cobjectnames(#10095, "__repr__") +py_cmembers_versioned(#10092, "__repr__", #10095, "2") +#10096 = @"C_type$builtin_function_or_method$2__name__$2__get__" +py_cobjects(#10096) +py_cobjecttypes(#10096, #10009) +py_cobject_sources(#10096, 0) +py_cobjectnames(#10096, "__get__") +py_cmembers_versioned(#10092, "__get__", #10096, "2") +py_cmembers_versioned(#10092, "__doc__", #10017, "2") +#10097 = @"C_type$builtin_function_or_method$2__name__$2__delete__" +py_cobjects(#10097) +py_cobjecttypes(#10097, #10009) +py_cobject_sources(#10097, 0) +py_cobjectnames(#10097, "__delete__") +py_cmembers_versioned(#10092, "__delete__", #10097, "2") +py_cobjectnames(#10092, "__name__") +py_cmembers_versioned(#10075, "__name__", #10092, "2") +#10098 = @"C_type$builtin_function_or_method$2__ne__" +py_cobjects(#10098) +py_cobjecttypes(#10098, #10005) +py_cobject_sources(#10098, 0) +py_cobjectnames(#10098, "__ne__") +py_cmembers_versioned(#10075, "__ne__", #10098, "2") +#10099 = @"C_type$builtin_function_or_method$2__repr__" +py_cobjects(#10099) +py_cobjecttypes(#10099, #10005) +py_cobject_sources(#10099, 0) +py_cobjectnames(#10099, "__repr__") +py_cmembers_versioned(#10075, "__repr__", #10099, "2") +#10100 = @"C_type$builtin_function_or_method$2__self__" +py_cobjects(#10100) +py_cobjecttypes(#10100, #10003) +py_cobject_sources(#10100, 0) +#10101 = @"C_type$builtin_function_or_method$2__self__$2__set__" +py_cobjects(#10101) +py_cobjecttypes(#10101, #10009) +py_cobject_sources(#10101, 0) +py_cobjectnames(#10101, "__set__") +py_cmembers_versioned(#10100, "__set__", #10101, "2") +#10102 = @"C_type$builtin_function_or_method$2__self__$2__getattribute__" +py_cobjects(#10102) +py_cobjecttypes(#10102, #10009) +py_cobject_sources(#10102, 0) +py_cobjectnames(#10102, "__getattribute__") +py_cmembers_versioned(#10100, "__getattribute__", #10102, "2") +py_cmembers_versioned(#10100, "__objclass__", #10075, "2") +#10103 = @"C_type$builtin_function_or_method$2__self__$2__repr__" +py_cobjects(#10103) +py_cobjecttypes(#10103, #10009) +py_cobject_sources(#10103, 0) +py_cobjectnames(#10103, "__repr__") +py_cmembers_versioned(#10100, "__repr__", #10103, "2") +#10104 = @"C_type$builtin_function_or_method$2__self__$2__get__" +py_cobjects(#10104) +py_cobjecttypes(#10104, #10009) +py_cobject_sources(#10104, 0) +py_cobjectnames(#10104, "__get__") +py_cmembers_versioned(#10100, "__get__", #10104, "2") +py_cmembers_versioned(#10100, "__doc__", #10017, "2") +#10105 = @"C_type$builtin_function_or_method$2__self__$2__delete__" +py_cobjects(#10105) +py_cobjecttypes(#10105, #10009) +py_cobject_sources(#10105, 0) +py_cobjectnames(#10105, "__delete__") +py_cmembers_versioned(#10100, "__delete__", #10105, "2") +py_cobjectnames(#10100, "__self__") +py_cmembers_versioned(#10075, "__self__", #10100, "2") +py_cmembers_versioned(#10075, ".super.", #10021, "2") +py_cobjectnames(#10075, "builtin_function_or_method") +py_cobjects(#10074) +py_cobjecttypes(#10074, #10075) +py_cobject_sources(#10074, 0) +py_cobjectnames(#10074, "__new__") +py_cmembers_versioned(#10028, "__new__", #10074, "2") +#10106 = @"C_type$bytes$2__repr__" +py_cobjects(#10106) +py_cobjecttypes(#10106, #10005) +py_cobject_sources(#10106, 0) +py_cobjectnames(#10106, "__repr__") +py_cmembers_versioned(#10028, "__repr__", #10106, "2") +#10107 = @"C_type$bytes$2__rmod__" +py_cobjects(#10107) +py_cobjecttypes(#10107, #10005) +py_cobject_sources(#10107, 0) +py_cobjectnames(#10107, "__rmod__") +py_cmembers_versioned(#10028, "__rmod__", #10107, "2") +#10108 = @"C_type$bytes$2__rmul__" +py_cobjects(#10108) +py_cobjecttypes(#10108, #10005) +py_cobject_sources(#10108, 0) +py_cobjectnames(#10108, "__rmul__") +py_cmembers_versioned(#10028, "__rmul__", #10108, "2") +#10109 = @"C_type$bytes$2__sizeof__" +py_cobjects(#10109) +py_cobjecttypes(#10109, #10034) +py_cobject_sources(#10109, 0) +py_cobjectnames(#10109, "__sizeof__") +py_cmembers_versioned(#10028, "__sizeof__", #10109, "2") +#10110 = @"C_type$bytes$2__str__" +py_cobjects(#10110) +py_cobjecttypes(#10110, #10005) +py_cobject_sources(#10110, 0) +py_cobjectnames(#10110, "__str__") +py_cmembers_versioned(#10028, "__str__", #10110, "2") +#10111 = @"C_type$bytes$2_formatter_field_name_split" +py_cobjects(#10111) +py_cobjecttypes(#10111, #10034) +py_cobject_sources(#10111, 0) +py_cobjectnames(#10111, "_formatter_field_name_split") +py_cmembers_versioned(#10028, "_formatter_field_name_split", #10111, "2") +#10112 = @"C_type$bytes$2_formatter_parser" +py_cobjects(#10112) +py_cobjecttypes(#10112, #10034) +py_cobject_sources(#10112, 0) +py_cobjectnames(#10112, "_formatter_parser") +py_cmembers_versioned(#10028, "_formatter_parser", #10112, "2") +#10113 = @"C_type$bytes$2capitalize" +py_cobjects(#10113) +py_cobjecttypes(#10113, #10034) +py_cobject_sources(#10113, 0) +py_cobjectnames(#10113, "capitalize") +py_cmembers_versioned(#10028, "capitalize", #10113, "2") +#10114 = @"C_type$bytes$2center" +py_cobjects(#10114) +py_cobjecttypes(#10114, #10034) +py_cobject_sources(#10114, 0) +py_cobjectnames(#10114, "center") +py_cmembers_versioned(#10028, "center", #10114, "2") +#10115 = @"C_type$bytes$2count" +py_cobjects(#10115) +py_cobjecttypes(#10115, #10034) +py_cobject_sources(#10115, 0) +py_cobjectnames(#10115, "count") +py_cmembers_versioned(#10028, "count", #10115, "2") +#10116 = @"C_type$bytes$2decode" +py_cobjects(#10116) +py_cobjecttypes(#10116, #10034) +py_cobject_sources(#10116, 0) +py_cobjectnames(#10116, "decode") +py_cmembers_versioned(#10028, "decode", #10116, "2") +#10117 = @"C_type$bytes$2encode" +py_cobjects(#10117) +py_cobjecttypes(#10117, #10034) +py_cobject_sources(#10117, 0) +py_cobjectnames(#10117, "encode") +py_cmembers_versioned(#10028, "encode", #10117, "2") +#10118 = @"C_type$bytes$2endswith" +py_cobjects(#10118) +py_cobjecttypes(#10118, #10034) +py_cobject_sources(#10118, 0) +py_cobjectnames(#10118, "endswith") +py_cmembers_versioned(#10028, "endswith", #10118, "2") +#10119 = @"C_type$bytes$2expandtabs" +py_cobjects(#10119) +py_cobjecttypes(#10119, #10034) +py_cobject_sources(#10119, 0) +py_cobjectnames(#10119, "expandtabs") +py_cmembers_versioned(#10028, "expandtabs", #10119, "2") +#10120 = @"C_type$bytes$2find" +py_cobjects(#10120) +py_cobjecttypes(#10120, #10034) +py_cobject_sources(#10120, 0) +py_cobjectnames(#10120, "find") +py_cmembers_versioned(#10028, "find", #10120, "2") +#10121 = @"C_type$bytes$2format" +py_cobjects(#10121) +py_cobjecttypes(#10121, #10034) +py_cobject_sources(#10121, 0) +py_cobjectnames(#10121, "format") +py_cmembers_versioned(#10028, "format", #10121, "2") +#10122 = @"C_type$bytes$2index" +py_cobjects(#10122) +py_cobjecttypes(#10122, #10034) +py_cobject_sources(#10122, 0) +py_cobjectnames(#10122, "index") +py_cmembers_versioned(#10028, "index", #10122, "2") +#10123 = @"C_type$bytes$2isalnum" +py_cobjects(#10123) +py_cobjecttypes(#10123, #10034) +py_cobject_sources(#10123, 0) +py_cobjectnames(#10123, "isalnum") +py_cmembers_versioned(#10028, "isalnum", #10123, "2") +#10124 = @"C_type$bytes$2isalpha" +py_cobjects(#10124) +py_cobjecttypes(#10124, #10034) +py_cobject_sources(#10124, 0) +py_cobjectnames(#10124, "isalpha") +py_cmembers_versioned(#10028, "isalpha", #10124, "2") +#10125 = @"C_type$bytes$2isdigit" +py_cobjects(#10125) +py_cobjecttypes(#10125, #10034) +py_cobject_sources(#10125, 0) +py_cobjectnames(#10125, "isdigit") +py_cmembers_versioned(#10028, "isdigit", #10125, "2") +#10126 = @"C_type$bytes$2islower" +py_cobjects(#10126) +py_cobjecttypes(#10126, #10034) +py_cobject_sources(#10126, 0) +py_cobjectnames(#10126, "islower") +py_cmembers_versioned(#10028, "islower", #10126, "2") +#10127 = @"C_type$bytes$2isspace" +py_cobjects(#10127) +py_cobjecttypes(#10127, #10034) +py_cobject_sources(#10127, 0) +py_cobjectnames(#10127, "isspace") +py_cmembers_versioned(#10028, "isspace", #10127, "2") +#10128 = @"C_type$bytes$2istitle" +py_cobjects(#10128) +py_cobjecttypes(#10128, #10034) +py_cobject_sources(#10128, 0) +py_cobjectnames(#10128, "istitle") +py_cmembers_versioned(#10028, "istitle", #10128, "2") +#10129 = @"C_type$bytes$2isupper" +py_cobjects(#10129) +py_cobjecttypes(#10129, #10034) +py_cobject_sources(#10129, 0) +py_cobjectnames(#10129, "isupper") +py_cmembers_versioned(#10028, "isupper", #10129, "2") +#10130 = @"C_type$bytes$2join" +py_cobjects(#10130) +py_cobjecttypes(#10130, #10034) +py_cobject_sources(#10130, 0) +py_cobjectnames(#10130, "join") +py_cmembers_versioned(#10028, "join", #10130, "2") +#10131 = @"C_type$bytes$2ljust" +py_cobjects(#10131) +py_cobjecttypes(#10131, #10034) +py_cobject_sources(#10131, 0) +py_cobjectnames(#10131, "ljust") +py_cmembers_versioned(#10028, "ljust", #10131, "2") +#10132 = @"C_type$bytes$2lower" +py_cobjects(#10132) +py_cobjecttypes(#10132, #10034) +py_cobject_sources(#10132, 0) +py_cobjectnames(#10132, "lower") +py_cmembers_versioned(#10028, "lower", #10132, "2") +#10133 = @"C_type$bytes$2lstrip" +py_cobjects(#10133) +py_cobjecttypes(#10133, #10034) +py_cobject_sources(#10133, 0) +py_cobjectnames(#10133, "lstrip") +py_cmembers_versioned(#10028, "lstrip", #10133, "2") +#10134 = @"C_type$bytes$2partition" +py_cobjects(#10134) +py_cobjecttypes(#10134, #10034) +py_cobject_sources(#10134, 0) +py_cobjectnames(#10134, "partition") +py_cmembers_versioned(#10028, "partition", #10134, "2") +#10135 = @"C_type$bytes$2replace" +py_cobjects(#10135) +py_cobjecttypes(#10135, #10034) +py_cobject_sources(#10135, 0) +py_cobjectnames(#10135, "replace") +py_cmembers_versioned(#10028, "replace", #10135, "2") +#10136 = @"C_type$bytes$2rfind" +py_cobjects(#10136) +py_cobjecttypes(#10136, #10034) +py_cobject_sources(#10136, 0) +py_cobjectnames(#10136, "rfind") +py_cmembers_versioned(#10028, "rfind", #10136, "2") +#10137 = @"C_type$bytes$2rindex" +py_cobjects(#10137) +py_cobjecttypes(#10137, #10034) +py_cobject_sources(#10137, 0) +py_cobjectnames(#10137, "rindex") +py_cmembers_versioned(#10028, "rindex", #10137, "2") +#10138 = @"C_type$bytes$2rjust" +py_cobjects(#10138) +py_cobjecttypes(#10138, #10034) +py_cobject_sources(#10138, 0) +py_cobjectnames(#10138, "rjust") +py_cmembers_versioned(#10028, "rjust", #10138, "2") +#10139 = @"C_type$bytes$2rpartition" +py_cobjects(#10139) +py_cobjecttypes(#10139, #10034) +py_cobject_sources(#10139, 0) +py_cobjectnames(#10139, "rpartition") +py_cmembers_versioned(#10028, "rpartition", #10139, "2") +#10140 = @"C_type$bytes$2rsplit" +py_cobjects(#10140) +py_cobjecttypes(#10140, #10034) +py_cobject_sources(#10140, 0) +py_cobjectnames(#10140, "rsplit") +py_cmembers_versioned(#10028, "rsplit", #10140, "2") +#10141 = @"C_type$bytes$2rstrip" +py_cobjects(#10141) +py_cobjecttypes(#10141, #10034) +py_cobject_sources(#10141, 0) +py_cobjectnames(#10141, "rstrip") +py_cmembers_versioned(#10028, "rstrip", #10141, "2") +#10142 = @"C_type$bytes$2split" +py_cobjects(#10142) +py_cobjecttypes(#10142, #10034) +py_cobject_sources(#10142, 0) +py_cobjectnames(#10142, "split") +py_cmembers_versioned(#10028, "split", #10142, "2") +#10143 = @"C_type$bytes$2splitlines" +py_cobjects(#10143) +py_cobjecttypes(#10143, #10034) +py_cobject_sources(#10143, 0) +py_cobjectnames(#10143, "splitlines") +py_cmembers_versioned(#10028, "splitlines", #10143, "2") +#10144 = @"C_type$bytes$2startswith" +py_cobjects(#10144) +py_cobjecttypes(#10144, #10034) +py_cobject_sources(#10144, 0) +py_cobjectnames(#10144, "startswith") +py_cmembers_versioned(#10028, "startswith", #10144, "2") +#10145 = @"C_type$bytes$2strip" +py_cobjects(#10145) +py_cobjecttypes(#10145, #10034) +py_cobject_sources(#10145, 0) +py_cobjectnames(#10145, "strip") +py_cmembers_versioned(#10028, "strip", #10145, "2") +#10146 = @"C_type$bytes$2swapcase" +py_cobjects(#10146) +py_cobjecttypes(#10146, #10034) +py_cobject_sources(#10146, 0) +py_cobjectnames(#10146, "swapcase") +py_cmembers_versioned(#10028, "swapcase", #10146, "2") +#10147 = @"C_type$bytes$2title" +py_cobjects(#10147) +py_cobjecttypes(#10147, #10034) +py_cobject_sources(#10147, 0) +py_cobjectnames(#10147, "title") +py_cmembers_versioned(#10028, "title", #10147, "2") +#10148 = @"C_type$bytes$2translate" +py_cobjects(#10148) +py_cobjecttypes(#10148, #10034) +py_cobject_sources(#10148, 0) +py_cobjectnames(#10148, "translate") +py_cmembers_versioned(#10028, "translate", #10148, "2") +#10149 = @"C_type$bytes$2upper" +py_cobjects(#10149) +py_cobjecttypes(#10149, #10034) +py_cobject_sources(#10149, 0) +py_cobjectnames(#10149, "upper") +py_cmembers_versioned(#10028, "upper", #10149, "2") +#10150 = @"C_type$bytes$2zfill" +py_cobjects(#10150) +py_cobjecttypes(#10150, #10034) +py_cobject_sources(#10150, 0) +py_cobjectnames(#10150, "zfill") +py_cmembers_versioned(#10028, "zfill", #10150, "2") +#10151 = @"C_type$basestring" +py_cobjects(#10151) +py_cobjecttypes(#10151, #10001) +py_cobject_sources(#10151, 0) +#10152 = @"C_bytes$e9d1758b62b29cb40786aaa1678574a2917ac3fb" +py_cobjects(#10152) +py_cobjecttypes(#10152, #10028) +py_cobject_sources(#10152, 0) +py_cobjectnames(#10152, "b'Type basestring cannot be instantiated; it is the base for str and unicode.'") +py_cmembers_versioned(#10151, "__doc__", #10152, "2") +#10153 = @"C_type$basestring$2__new__" +py_cobjects(#10153) +py_cobjecttypes(#10153, #10075) +py_cobject_sources(#10153, 0) +py_cobjectnames(#10153, "__new__") +py_cmembers_versioned(#10151, "__new__", #10153, "2") +py_cmembers_versioned(#10151, ".super.", #10021, "2") +py_cobjectnames(#10151, "basestring") +py_cmembers_versioned(#10028, ".super.", #10151, "2") +py_cobjectnames(#10028, "bytes") +py_cobjects(#10027) +py_cobjecttypes(#10027, #10028) +py_cobject_sources(#10027, 0) +py_cobjectnames(#10027, "b'the object's class'") +py_cmembers_versioned(#10022, "__doc__", #10027, "2") +#10154 = @"C_type$object$2__class__$2__delete__" +py_cobjects(#10154) +py_cobjecttypes(#10154, #10009) +py_cobject_sources(#10154, 0) +py_cobjectnames(#10154, "__delete__") +py_cmembers_versioned(#10022, "__delete__", #10154, "2") +py_cobjectnames(#10022, "__class__") +py_cmembers_versioned(#10021, "__class__", #10022, "2") +#10155 = @"C_type$object$2__delattr__" +py_cobjects(#10155) +py_cobjecttypes(#10155, #10005) +py_cobject_sources(#10155, 0) +py_cobjectnames(#10155, "__delattr__") +py_cmembers_versioned(#10021, "__delattr__", #10155, "2") +#10156 = @"C_bytes$ace39eec53ca8b6a7c9df63c8901df2bf11d4e31" +py_cobjects(#10156) +py_cobjecttypes(#10156, #10028) +py_cobject_sources(#10156, 0) +py_cobjectnames(#10156, "b'The most base type'") +py_cmembers_versioned(#10021, "__doc__", #10156, "2") +#10157 = @"C_type$object$2__format__" +py_cobjects(#10157) +py_cobjecttypes(#10157, #10034) +py_cobject_sources(#10157, 0) +py_cobjectnames(#10157, "__format__") +py_cmembers_versioned(#10021, "__format__", #10157, "2") +#10158 = @"C_type$object$2__getattribute__" +py_cobjects(#10158) +py_cobjecttypes(#10158, #10005) +py_cobject_sources(#10158, 0) +py_cobjectnames(#10158, "__getattribute__") +py_cmembers_versioned(#10021, "__getattribute__", #10158, "2") +#10159 = @"C_type$object$2__hash__" +py_cobjects(#10159) +py_cobjecttypes(#10159, #10005) +py_cobject_sources(#10159, 0) +py_cobjectnames(#10159, "__hash__") +py_cmembers_versioned(#10021, "__hash__", #10159, "2") +#10160 = @"C_type$object$2__init__" +py_cobjects(#10160) +py_cobjecttypes(#10160, #10005) +py_cobject_sources(#10160, 0) +py_cobjectnames(#10160, "__init__") +py_cmembers_versioned(#10021, "__init__", #10160, "2") +#10161 = @"C_type$object$2__new__" +py_cobjects(#10161) +py_cobjecttypes(#10161, #10075) +py_cobject_sources(#10161, 0) +py_cobjectnames(#10161, "__new__") +py_cmembers_versioned(#10021, "__new__", #10161, "2") +#10162 = @"C_type$object$2__reduce__" +py_cobjects(#10162) +py_cobjecttypes(#10162, #10034) +py_cobject_sources(#10162, 0) +py_cobjectnames(#10162, "__reduce__") +py_cmembers_versioned(#10021, "__reduce__", #10162, "2") +#10163 = @"C_type$object$2__reduce_ex__" +py_cobjects(#10163) +py_cobjecttypes(#10163, #10034) +py_cobject_sources(#10163, 0) +py_cobjectnames(#10163, "__reduce_ex__") +py_cmembers_versioned(#10021, "__reduce_ex__", #10163, "2") +#10164 = @"C_type$object$2__repr__" +py_cobjects(#10164) +py_cobjecttypes(#10164, #10005) +py_cobject_sources(#10164, 0) +py_cobjectnames(#10164, "__repr__") +py_cmembers_versioned(#10021, "__repr__", #10164, "2") +#10165 = @"C_type$object$2__setattr__" +py_cobjects(#10165) +py_cobjecttypes(#10165, #10005) +py_cobject_sources(#10165, 0) +py_cobjectnames(#10165, "__setattr__") +py_cmembers_versioned(#10021, "__setattr__", #10165, "2") +#10166 = @"C_type$object$2__sizeof__" +py_cobjects(#10166) +py_cobjecttypes(#10166, #10034) +py_cobject_sources(#10166, 0) +py_cobjectnames(#10166, "__sizeof__") +py_cmembers_versioned(#10021, "__sizeof__", #10166, "2") +#10167 = @"C_type$object$2__str__" +py_cobjects(#10167) +py_cobjecttypes(#10167, #10005) +py_cobject_sources(#10167, 0) +py_cobjectnames(#10167, "__str__") +py_cmembers_versioned(#10021, "__str__", #10167, "2") +#10168 = @"C_type$object$2__subclasshook__" +#10169 = @"C_type$classmethod_descriptor" +py_cobjects(#10169) +py_cobjecttypes(#10169, #10001) +py_cobject_sources(#10169, 0) +#10170 = @"C_type$classmethod_descriptor$2__call__" +py_cobjects(#10170) +py_cobjecttypes(#10170, #10005) +py_cobject_sources(#10170, 0) +py_cobjectnames(#10170, "__call__") +py_cmembers_versioned(#10169, "__call__", #10170, "2") +#10171 = @"C_type$classmethod_descriptor$2__doc__" +py_cobjects(#10171) +py_cobjecttypes(#10171, #10003) +py_cobject_sources(#10171, 0) +#10172 = @"C_type$classmethod_descriptor$2__doc__$2__set__" +py_cobjects(#10172) +py_cobjecttypes(#10172, #10009) +py_cobject_sources(#10172, 0) +py_cobjectnames(#10172, "__set__") +py_cmembers_versioned(#10171, "__set__", #10172, "2") +#10173 = @"C_type$classmethod_descriptor$2__doc__$2__getattribute__" +py_cobjects(#10173) +py_cobjecttypes(#10173, #10009) +py_cobject_sources(#10173, 0) +py_cobjectnames(#10173, "__getattribute__") +py_cmembers_versioned(#10171, "__getattribute__", #10173, "2") +py_cmembers_versioned(#10171, "__objclass__", #10169, "2") +#10174 = @"C_type$classmethod_descriptor$2__doc__$2__repr__" +py_cobjects(#10174) +py_cobjecttypes(#10174, #10009) +py_cobject_sources(#10174, 0) +py_cobjectnames(#10174, "__repr__") +py_cmembers_versioned(#10171, "__repr__", #10174, "2") +#10175 = @"C_type$classmethod_descriptor$2__doc__$2__get__" +py_cobjects(#10175) +py_cobjecttypes(#10175, #10009) +py_cobject_sources(#10175, 0) +py_cobjectnames(#10175, "__get__") +py_cmembers_versioned(#10171, "__get__", #10175, "2") +py_cmembers_versioned(#10171, "__doc__", #10017, "2") +#10176 = @"C_type$classmethod_descriptor$2__doc__$2__delete__" +py_cobjects(#10176) +py_cobjecttypes(#10176, #10009) +py_cobject_sources(#10176, 0) +py_cobjectnames(#10176, "__delete__") +py_cmembers_versioned(#10171, "__delete__", #10176, "2") +py_cobjectnames(#10171, "__doc__") +py_cmembers_versioned(#10169, "__doc__", #10171, "2") +#10177 = @"C_type$classmethod_descriptor$2__get__" +py_cobjects(#10177) +py_cobjecttypes(#10177, #10005) +py_cobject_sources(#10177, 0) +py_cobjectnames(#10177, "__get__") +py_cmembers_versioned(#10169, "__get__", #10177, "2") +#10178 = @"C_type$classmethod_descriptor$2__getattribute__" +py_cobjects(#10178) +py_cobjecttypes(#10178, #10005) +py_cobject_sources(#10178, 0) +py_cobjectnames(#10178, "__getattribute__") +py_cmembers_versioned(#10169, "__getattribute__", #10178, "2") +#10179 = @"C_type$classmethod_descriptor$2__name__" +py_cobjects(#10179) +py_cobjecttypes(#10179, #10045) +py_cobject_sources(#10179, 0) +py_cobjectnames(#10179, "__name__") +py_cmembers_versioned(#10169, "__name__", #10179, "2") +#10180 = @"C_type$classmethod_descriptor$2__objclass__" +py_cobjects(#10180) +py_cobjecttypes(#10180, #10045) +py_cobject_sources(#10180, 0) +py_cobjectnames(#10180, "__objclass__") +py_cmembers_versioned(#10169, "__objclass__", #10180, "2") +#10181 = @"C_type$classmethod_descriptor$2__repr__" +py_cobjects(#10181) +py_cobjecttypes(#10181, #10005) +py_cobject_sources(#10181, 0) +py_cobjectnames(#10181, "__repr__") +py_cmembers_versioned(#10169, "__repr__", #10181, "2") +py_cmembers_versioned(#10169, ".super.", #10021, "2") +py_cobjectnames(#10169, "classmethod_descriptor") +py_cobjects(#10168) +py_cobjecttypes(#10168, #10169) +py_cobject_sources(#10168, 0) +py_cobjectnames(#10168, "__subclasshook__") +py_cmembers_versioned(#10021, "__subclasshook__", #10168, "2") +py_cobjectnames(#10021, "object") +py_cmembers_versioned(#10018, ".super.", #10021, "2") +py_cobjectnames(#10018, "NoneType") +py_cobjects(#10017) +py_cobjecttypes(#10017, #10018) +py_cobject_sources(#10017, 0) +py_cobjectnames(#10017, "None") +py_cmembers_versioned(#10012, "__doc__", #10017, "2") +#10182 = @"C_type$method-wrapper$2__doc__$2__delete__" +py_cobjects(#10182) +py_cobjecttypes(#10182, #10009) +py_cobject_sources(#10182, 0) +py_cobjectnames(#10182, "__delete__") +py_cmembers_versioned(#10012, "__delete__", #10182, "2") +py_cobjectnames(#10012, "__doc__") +py_cmembers_versioned(#10009, "__doc__", #10012, "2") +#10183 = @"C_type$method-wrapper$2__getattribute__" +py_cobjects(#10183) +py_cobjecttypes(#10183, #10005) +py_cobject_sources(#10183, 0) +py_cobjectnames(#10183, "__getattribute__") +py_cmembers_versioned(#10009, "__getattribute__", #10183, "2") +#10184 = @"C_type$method-wrapper$2__hash__" +py_cobjects(#10184) +py_cobjecttypes(#10184, #10005) +py_cobject_sources(#10184, 0) +py_cobjectnames(#10184, "__hash__") +py_cmembers_versioned(#10009, "__hash__", #10184, "2") +#10185 = @"C_type$method-wrapper$2__name__" +py_cobjects(#10185) +py_cobjecttypes(#10185, #10003) +py_cobject_sources(#10185, 0) +#10186 = @"C_type$method-wrapper$2__name__$2__set__" +py_cobjects(#10186) +py_cobjecttypes(#10186, #10009) +py_cobject_sources(#10186, 0) +py_cobjectnames(#10186, "__set__") +py_cmembers_versioned(#10185, "__set__", #10186, "2") +#10187 = @"C_type$method-wrapper$2__name__$2__getattribute__" +py_cobjects(#10187) +py_cobjecttypes(#10187, #10009) +py_cobject_sources(#10187, 0) +py_cobjectnames(#10187, "__getattribute__") +py_cmembers_versioned(#10185, "__getattribute__", #10187, "2") +py_cmembers_versioned(#10185, "__objclass__", #10009, "2") +#10188 = @"C_type$method-wrapper$2__name__$2__repr__" +py_cobjects(#10188) +py_cobjecttypes(#10188, #10009) +py_cobject_sources(#10188, 0) +py_cobjectnames(#10188, "__repr__") +py_cmembers_versioned(#10185, "__repr__", #10188, "2") +#10189 = @"C_type$method-wrapper$2__name__$2__get__" +py_cobjects(#10189) +py_cobjecttypes(#10189, #10009) +py_cobject_sources(#10189, 0) +py_cobjectnames(#10189, "__get__") +py_cmembers_versioned(#10185, "__get__", #10189, "2") +py_cmembers_versioned(#10185, "__doc__", #10017, "2") +#10190 = @"C_type$method-wrapper$2__name__$2__delete__" +py_cobjects(#10190) +py_cobjecttypes(#10190, #10009) +py_cobject_sources(#10190, 0) +py_cobjectnames(#10190, "__delete__") +py_cmembers_versioned(#10185, "__delete__", #10190, "2") +py_cobjectnames(#10185, "__name__") +py_cmembers_versioned(#10009, "__name__", #10185, "2") +#10191 = @"C_type$method-wrapper$2__objclass__" +py_cobjects(#10191) +py_cobjecttypes(#10191, #10003) +py_cobject_sources(#10191, 0) +#10192 = @"C_type$method-wrapper$2__objclass__$2__set__" +py_cobjects(#10192) +py_cobjecttypes(#10192, #10009) +py_cobject_sources(#10192, 0) +py_cobjectnames(#10192, "__set__") +py_cmembers_versioned(#10191, "__set__", #10192, "2") +#10193 = @"C_type$method-wrapper$2__objclass__$2__getattribute__" +py_cobjects(#10193) +py_cobjecttypes(#10193, #10009) +py_cobject_sources(#10193, 0) +py_cobjectnames(#10193, "__getattribute__") +py_cmembers_versioned(#10191, "__getattribute__", #10193, "2") +py_cmembers_versioned(#10191, "__objclass__", #10009, "2") +#10194 = @"C_type$method-wrapper$2__objclass__$2__repr__" +py_cobjects(#10194) +py_cobjecttypes(#10194, #10009) +py_cobject_sources(#10194, 0) +py_cobjectnames(#10194, "__repr__") +py_cmembers_versioned(#10191, "__repr__", #10194, "2") +#10195 = @"C_type$method-wrapper$2__objclass__$2__get__" +py_cobjects(#10195) +py_cobjecttypes(#10195, #10009) +py_cobject_sources(#10195, 0) +py_cobjectnames(#10195, "__get__") +py_cmembers_versioned(#10191, "__get__", #10195, "2") +py_cmembers_versioned(#10191, "__doc__", #10017, "2") +#10196 = @"C_type$method-wrapper$2__objclass__$2__delete__" +py_cobjects(#10196) +py_cobjecttypes(#10196, #10009) +py_cobject_sources(#10196, 0) +py_cobjectnames(#10196, "__delete__") +py_cmembers_versioned(#10191, "__delete__", #10196, "2") +py_cobjectnames(#10191, "__objclass__") +py_cmembers_versioned(#10009, "__objclass__", #10191, "2") +#10197 = @"C_type$method-wrapper$2__repr__" +py_cobjects(#10197) +py_cobjecttypes(#10197, #10005) +py_cobject_sources(#10197, 0) +py_cobjectnames(#10197, "__repr__") +py_cmembers_versioned(#10009, "__repr__", #10197, "2") +#10198 = @"C_type$method-wrapper$2__self__" +py_cobjects(#10198) +py_cobjecttypes(#10198, #10045) +py_cobject_sources(#10198, 0) +py_cobjectnames(#10198, "__self__") +py_cmembers_versioned(#10009, "__self__", #10198, "2") +py_cmembers_versioned(#10009, ".super.", #10021, "2") +py_cobjectnames(#10009, "method-wrapper") +py_cobjects(#10008) +py_cobjecttypes(#10008, #10009) +py_cobject_sources(#10008, 0) +py_cobjectnames(#10008, "__set__") +py_cmembers_versioned(#10007, "__set__", #10008, "2") +#10199 = @"C_type$wrapper_descriptor$2__doc__$2__getattribute__" +py_cobjects(#10199) +py_cobjecttypes(#10199, #10009) +py_cobject_sources(#10199, 0) +py_cobjectnames(#10199, "__getattribute__") +py_cmembers_versioned(#10007, "__getattribute__", #10199, "2") +py_cmembers_versioned(#10007, "__objclass__", #10005, "2") +#10200 = @"C_type$wrapper_descriptor$2__doc__$2__repr__" +py_cobjects(#10200) +py_cobjecttypes(#10200, #10009) +py_cobject_sources(#10200, 0) +py_cobjectnames(#10200, "__repr__") +py_cmembers_versioned(#10007, "__repr__", #10200, "2") +#10201 = @"C_type$wrapper_descriptor$2__doc__$2__get__" +py_cobjects(#10201) +py_cobjecttypes(#10201, #10009) +py_cobject_sources(#10201, 0) +py_cobjectnames(#10201, "__get__") +py_cmembers_versioned(#10007, "__get__", #10201, "2") +py_cmembers_versioned(#10007, "__doc__", #10017, "2") +#10202 = @"C_type$wrapper_descriptor$2__doc__$2__delete__" +py_cobjects(#10202) +py_cobjecttypes(#10202, #10009) +py_cobject_sources(#10202, 0) +py_cobjectnames(#10202, "__delete__") +py_cmembers_versioned(#10007, "__delete__", #10202, "2") +py_cobjectnames(#10007, "__doc__") +py_cmembers_versioned(#10005, "__doc__", #10007, "2") +#10203 = @"C_type$wrapper_descriptor$2__get__" +py_cobjects(#10203) +py_cobjecttypes(#10203, #10005) +py_cobject_sources(#10203, 0) +py_cobjectnames(#10203, "__get__") +py_cmembers_versioned(#10005, "__get__", #10203, "2") +#10204 = @"C_type$wrapper_descriptor$2__getattribute__" +py_cobjects(#10204) +py_cobjecttypes(#10204, #10005) +py_cobject_sources(#10204, 0) +py_cobjectnames(#10204, "__getattribute__") +py_cmembers_versioned(#10005, "__getattribute__", #10204, "2") +#10205 = @"C_type$wrapper_descriptor$2__name__" +py_cobjects(#10205) +py_cobjecttypes(#10205, #10045) +py_cobject_sources(#10205, 0) +py_cobjectnames(#10205, "__name__") +py_cmembers_versioned(#10005, "__name__", #10205, "2") +#10206 = @"C_type$wrapper_descriptor$2__objclass__" +py_cobjects(#10206) +py_cobjecttypes(#10206, #10045) +py_cobject_sources(#10206, 0) +py_cobjectnames(#10206, "__objclass__") +py_cmembers_versioned(#10005, "__objclass__", #10206, "2") +#10207 = @"C_type$wrapper_descriptor$2__repr__" +py_cobjects(#10207) +py_cobjecttypes(#10207, #10005) +py_cobject_sources(#10207, 0) +py_cobjectnames(#10207, "__repr__") +py_cmembers_versioned(#10005, "__repr__", #10207, "2") +py_cmembers_versioned(#10005, ".super.", #10021, "2") +py_cobjectnames(#10005, "wrapper_descriptor") +py_cobjects(#10004) +py_cobjecttypes(#10004, #10005) +py_cobject_sources(#10004, 0) +py_cobjectnames(#10004, "__delete__") +py_cmembers_versioned(#10003, "__delete__", #10004, "2") +#10208 = @"C_type$getset_descriptor$2__doc__" +py_cobjects(#10208) +py_cobjecttypes(#10208, #10003) +py_cobject_sources(#10208, 0) +#10209 = @"C_type$getset_descriptor$2__doc__$2__set__" +py_cobjects(#10209) +py_cobjecttypes(#10209, #10009) +py_cobject_sources(#10209, 0) +py_cobjectnames(#10209, "__set__") +py_cmembers_versioned(#10208, "__set__", #10209, "2") +#10210 = @"C_type$getset_descriptor$2__doc__$2__getattribute__" +py_cobjects(#10210) +py_cobjecttypes(#10210, #10009) +py_cobject_sources(#10210, 0) +py_cobjectnames(#10210, "__getattribute__") +py_cmembers_versioned(#10208, "__getattribute__", #10210, "2") +py_cmembers_versioned(#10208, "__objclass__", #10003, "2") +#10211 = @"C_type$getset_descriptor$2__doc__$2__repr__" +py_cobjects(#10211) +py_cobjecttypes(#10211, #10009) +py_cobject_sources(#10211, 0) +py_cobjectnames(#10211, "__repr__") +py_cmembers_versioned(#10208, "__repr__", #10211, "2") +#10212 = @"C_type$getset_descriptor$2__doc__$2__get__" +py_cobjects(#10212) +py_cobjecttypes(#10212, #10009) +py_cobject_sources(#10212, 0) +py_cobjectnames(#10212, "__get__") +py_cmembers_versioned(#10208, "__get__", #10212, "2") +py_cmembers_versioned(#10208, "__doc__", #10017, "2") +#10213 = @"C_type$getset_descriptor$2__doc__$2__delete__" +py_cobjects(#10213) +py_cobjecttypes(#10213, #10009) +py_cobject_sources(#10213, 0) +py_cobjectnames(#10213, "__delete__") +py_cmembers_versioned(#10208, "__delete__", #10213, "2") +py_cobjectnames(#10208, "__doc__") +py_cmembers_versioned(#10003, "__doc__", #10208, "2") +#10214 = @"C_type$getset_descriptor$2__get__" +py_cobjects(#10214) +py_cobjecttypes(#10214, #10005) +py_cobject_sources(#10214, 0) +py_cobjectnames(#10214, "__get__") +py_cmembers_versioned(#10003, "__get__", #10214, "2") +#10215 = @"C_type$getset_descriptor$2__getattribute__" +py_cobjects(#10215) +py_cobjecttypes(#10215, #10005) +py_cobject_sources(#10215, 0) +py_cobjectnames(#10215, "__getattribute__") +py_cmembers_versioned(#10003, "__getattribute__", #10215, "2") +#10216 = @"C_type$getset_descriptor$2__name__" +py_cobjects(#10216) +py_cobjecttypes(#10216, #10045) +py_cobject_sources(#10216, 0) +py_cobjectnames(#10216, "__name__") +py_cmembers_versioned(#10003, "__name__", #10216, "2") +#10217 = @"C_type$getset_descriptor$2__objclass__" +py_cobjects(#10217) +py_cobjecttypes(#10217, #10045) +py_cobject_sources(#10217, 0) +py_cobjectnames(#10217, "__objclass__") +py_cmembers_versioned(#10003, "__objclass__", #10217, "2") +#10218 = @"C_type$getset_descriptor$2__repr__" +py_cobjects(#10218) +py_cobjecttypes(#10218, #10005) +py_cobject_sources(#10218, 0) +py_cobjectnames(#10218, "__repr__") +py_cmembers_versioned(#10003, "__repr__", #10218, "2") +#10219 = @"C_type$getset_descriptor$2__set__" +py_cobjects(#10219) +py_cobjecttypes(#10219, #10005) +py_cobject_sources(#10219, 0) +py_cobjectnames(#10219, "__set__") +py_cmembers_versioned(#10003, "__set__", #10219, "2") +py_cmembers_versioned(#10003, ".super.", #10021, "2") +py_cobjectnames(#10003, "getset_descriptor") +py_cobjects(#10002) +py_cobjecttypes(#10002, #10003) +py_cobject_sources(#10002, 0) +#10220 = @"C_type$type$2__abstractmethods__$2__set__" +py_cobjects(#10220) +py_cobjecttypes(#10220, #10009) +py_cobject_sources(#10220, 0) +py_cobjectnames(#10220, "__set__") +py_cmembers_versioned(#10002, "__set__", #10220, "2") +#10221 = @"C_type$type$2__abstractmethods__$2__getattribute__" +py_cobjects(#10221) +py_cobjecttypes(#10221, #10009) +py_cobject_sources(#10221, 0) +py_cobjectnames(#10221, "__getattribute__") +py_cmembers_versioned(#10002, "__getattribute__", #10221, "2") +py_cmembers_versioned(#10002, "__objclass__", #10001, "2") +#10222 = @"C_type$type$2__abstractmethods__$2__repr__" +py_cobjects(#10222) +py_cobjecttypes(#10222, #10009) +py_cobject_sources(#10222, 0) +py_cobjectnames(#10222, "__repr__") +py_cmembers_versioned(#10002, "__repr__", #10222, "2") +#10223 = @"C_type$type$2__abstractmethods__$2__get__" +py_cobjects(#10223) +py_cobjecttypes(#10223, #10009) +py_cobject_sources(#10223, 0) +py_cobjectnames(#10223, "__get__") +py_cmembers_versioned(#10002, "__get__", #10223, "2") +py_cmembers_versioned(#10002, "__doc__", #10017, "2") +#10224 = @"C_type$type$2__abstractmethods__$2__delete__" +py_cobjects(#10224) +py_cobjecttypes(#10224, #10009) +py_cobject_sources(#10224, 0) +py_cobjectnames(#10224, "__delete__") +py_cmembers_versioned(#10002, "__delete__", #10224, "2") +py_cobjectnames(#10002, "__abstractmethods__") +py_cmembers_versioned(#10001, "__abstractmethods__", #10002, "2") +#10225 = @"C_type$type$2__base__" +py_cobjects(#10225) +py_cobjecttypes(#10225, #10045) +py_cobject_sources(#10225, 0) +py_cobjectnames(#10225, "__base__") +py_cmembers_versioned(#10001, "__base__", #10225, "2") +#10226 = @"C_type$type$2__bases__" +py_cobjects(#10226) +py_cobjecttypes(#10226, #10003) +py_cobject_sources(#10226, 0) +#10227 = @"C_type$type$2__bases__$2__set__" +py_cobjects(#10227) +py_cobjecttypes(#10227, #10009) +py_cobject_sources(#10227, 0) +py_cobjectnames(#10227, "__set__") +py_cmembers_versioned(#10226, "__set__", #10227, "2") +#10228 = @"C_type$type$2__bases__$2__getattribute__" +py_cobjects(#10228) +py_cobjecttypes(#10228, #10009) +py_cobject_sources(#10228, 0) +py_cobjectnames(#10228, "__getattribute__") +py_cmembers_versioned(#10226, "__getattribute__", #10228, "2") +py_cmembers_versioned(#10226, "__objclass__", #10001, "2") +#10229 = @"C_type$type$2__bases__$2__repr__" +py_cobjects(#10229) +py_cobjecttypes(#10229, #10009) +py_cobject_sources(#10229, 0) +py_cobjectnames(#10229, "__repr__") +py_cmembers_versioned(#10226, "__repr__", #10229, "2") +#10230 = @"C_type$type$2__bases__$2__get__" +py_cobjects(#10230) +py_cobjecttypes(#10230, #10009) +py_cobject_sources(#10230, 0) +py_cobjectnames(#10230, "__get__") +py_cmembers_versioned(#10226, "__get__", #10230, "2") +py_cmembers_versioned(#10226, "__doc__", #10017, "2") +#10231 = @"C_type$type$2__bases__$2__delete__" +py_cobjects(#10231) +py_cobjecttypes(#10231, #10009) +py_cobject_sources(#10231, 0) +py_cobjectnames(#10231, "__delete__") +py_cmembers_versioned(#10226, "__delete__", #10231, "2") +py_cobjectnames(#10226, "__bases__") +py_cmembers_versioned(#10001, "__bases__", #10226, "2") +#10232 = @"C_type$type$2__basicsize__" +py_cobjects(#10232) +py_cobjecttypes(#10232, #10045) +py_cobject_sources(#10232, 0) +py_cobjectnames(#10232, "__basicsize__") +py_cmembers_versioned(#10001, "__basicsize__", #10232, "2") +#10233 = @"C_type$type$2__call__" +py_cobjects(#10233) +py_cobjecttypes(#10233, #10005) +py_cobject_sources(#10233, 0) +py_cobjectnames(#10233, "__call__") +py_cmembers_versioned(#10001, "__call__", #10233, "2") +#10234 = @"C_type$type$2__delattr__" +py_cobjects(#10234) +py_cobjecttypes(#10234, #10005) +py_cobject_sources(#10234, 0) +py_cobjectnames(#10234, "__delattr__") +py_cmembers_versioned(#10001, "__delattr__", #10234, "2") +#10235 = @"C_type$type$2__dict__" +py_cobjects(#10235) +py_cobjecttypes(#10235, #10003) +py_cobject_sources(#10235, 0) +#10236 = @"C_type$type$2__dict__$2__set__" +py_cobjects(#10236) +py_cobjecttypes(#10236, #10009) +py_cobject_sources(#10236, 0) +py_cobjectnames(#10236, "__set__") +py_cmembers_versioned(#10235, "__set__", #10236, "2") +#10237 = @"C_type$type$2__dict__$2__getattribute__" +py_cobjects(#10237) +py_cobjecttypes(#10237, #10009) +py_cobject_sources(#10237, 0) +py_cobjectnames(#10237, "__getattribute__") +py_cmembers_versioned(#10235, "__getattribute__", #10237, "2") +py_cmembers_versioned(#10235, "__objclass__", #10001, "2") +#10238 = @"C_type$type$2__dict__$2__repr__" +py_cobjects(#10238) +py_cobjecttypes(#10238, #10009) +py_cobject_sources(#10238, 0) +py_cobjectnames(#10238, "__repr__") +py_cmembers_versioned(#10235, "__repr__", #10238, "2") +#10239 = @"C_type$type$2__dict__$2__get__" +py_cobjects(#10239) +py_cobjecttypes(#10239, #10009) +py_cobject_sources(#10239, 0) +py_cobjectnames(#10239, "__get__") +py_cmembers_versioned(#10235, "__get__", #10239, "2") +py_cmembers_versioned(#10235, "__doc__", #10017, "2") +#10240 = @"C_type$type$2__dict__$2__delete__" +py_cobjects(#10240) +py_cobjecttypes(#10240, #10009) +py_cobject_sources(#10240, 0) +py_cobjectnames(#10240, "__delete__") +py_cmembers_versioned(#10235, "__delete__", #10240, "2") +py_cobjectnames(#10235, "__dict__") +py_cmembers_versioned(#10001, "__dict__", #10235, "2") +#10241 = @"C_type$type$2__dictoffset__" +py_cobjects(#10241) +py_cobjecttypes(#10241, #10045) +py_cobject_sources(#10241, 0) +py_cobjectnames(#10241, "__dictoffset__") +py_cmembers_versioned(#10001, "__dictoffset__", #10241, "2") +#10242 = @"C_type$type$2__doc__" +py_cobjects(#10242) +py_cobjecttypes(#10242, #10003) +py_cobject_sources(#10242, 0) +#10243 = @"C_type$type$2__doc__$2__set__" +py_cobjects(#10243) +py_cobjecttypes(#10243, #10009) +py_cobject_sources(#10243, 0) +py_cobjectnames(#10243, "__set__") +py_cmembers_versioned(#10242, "__set__", #10243, "2") +#10244 = @"C_type$type$2__doc__$2__getattribute__" +py_cobjects(#10244) +py_cobjecttypes(#10244, #10009) +py_cobject_sources(#10244, 0) +py_cobjectnames(#10244, "__getattribute__") +py_cmembers_versioned(#10242, "__getattribute__", #10244, "2") +py_cmembers_versioned(#10242, "__objclass__", #10001, "2") +#10245 = @"C_type$type$2__doc__$2__repr__" +py_cobjects(#10245) +py_cobjecttypes(#10245, #10009) +py_cobject_sources(#10245, 0) +py_cobjectnames(#10245, "__repr__") +py_cmembers_versioned(#10242, "__repr__", #10245, "2") +#10246 = @"C_type$type$2__doc__$2__get__" +py_cobjects(#10246) +py_cobjecttypes(#10246, #10009) +py_cobject_sources(#10246, 0) +py_cobjectnames(#10246, "__get__") +py_cmembers_versioned(#10242, "__get__", #10246, "2") +py_cmembers_versioned(#10242, "__doc__", #10017, "2") +#10247 = @"C_type$type$2__doc__$2__delete__" +py_cobjects(#10247) +py_cobjecttypes(#10247, #10009) +py_cobject_sources(#10247, 0) +py_cobjectnames(#10247, "__delete__") +py_cmembers_versioned(#10242, "__delete__", #10247, "2") +py_cobjectnames(#10242, "__doc__") +py_cmembers_versioned(#10001, "__doc__", #10242, "2") +#10248 = @"C_type$type$2__eq__" +py_cobjects(#10248) +py_cobjecttypes(#10248, #10005) +py_cobject_sources(#10248, 0) +py_cobjectnames(#10248, "__eq__") +py_cmembers_versioned(#10001, "__eq__", #10248, "2") +#10249 = @"C_type$type$2__flags__" +py_cobjects(#10249) +py_cobjecttypes(#10249, #10045) +py_cobject_sources(#10249, 0) +py_cobjectnames(#10249, "__flags__") +py_cmembers_versioned(#10001, "__flags__", #10249, "2") +#10250 = @"C_type$type$2__ge__" +py_cobjects(#10250) +py_cobjecttypes(#10250, #10005) +py_cobject_sources(#10250, 0) +py_cobjectnames(#10250, "__ge__") +py_cmembers_versioned(#10001, "__ge__", #10250, "2") +#10251 = @"C_type$type$2__getattribute__" +py_cobjects(#10251) +py_cobjecttypes(#10251, #10005) +py_cobject_sources(#10251, 0) +py_cobjectnames(#10251, "__getattribute__") +py_cmembers_versioned(#10001, "__getattribute__", #10251, "2") +#10252 = @"C_type$type$2__gt__" +py_cobjects(#10252) +py_cobjecttypes(#10252, #10005) +py_cobject_sources(#10252, 0) +py_cobjectnames(#10252, "__gt__") +py_cmembers_versioned(#10001, "__gt__", #10252, "2") +#10253 = @"C_type$type$2__hash__" +py_cobjects(#10253) +py_cobjecttypes(#10253, #10005) +py_cobject_sources(#10253, 0) +py_cobjectnames(#10253, "__hash__") +py_cmembers_versioned(#10001, "__hash__", #10253, "2") +#10254 = @"C_type$type$2__init__" +py_cobjects(#10254) +py_cobjecttypes(#10254, #10005) +py_cobject_sources(#10254, 0) +py_cobjectnames(#10254, "__init__") +py_cmembers_versioned(#10001, "__init__", #10254, "2") +#10255 = @"C_type$type$2__instancecheck__" +py_cobjects(#10255) +py_cobjecttypes(#10255, #10034) +py_cobject_sources(#10255, 0) +py_cobjectnames(#10255, "__instancecheck__") +py_cmembers_versioned(#10001, "__instancecheck__", #10255, "2") +#10256 = @"C_type$type$2__itemsize__" +py_cobjects(#10256) +py_cobjecttypes(#10256, #10045) +py_cobject_sources(#10256, 0) +py_cobjectnames(#10256, "__itemsize__") +py_cmembers_versioned(#10001, "__itemsize__", #10256, "2") +#10257 = @"C_type$type$2__le__" +py_cobjects(#10257) +py_cobjecttypes(#10257, #10005) +py_cobject_sources(#10257, 0) +py_cobjectnames(#10257, "__le__") +py_cmembers_versioned(#10001, "__le__", #10257, "2") +#10258 = @"C_type$type$2__lt__" +py_cobjects(#10258) +py_cobjecttypes(#10258, #10005) +py_cobject_sources(#10258, 0) +py_cobjectnames(#10258, "__lt__") +py_cmembers_versioned(#10001, "__lt__", #10258, "2") +#10259 = @"C_type$type$2__module__" +py_cobjects(#10259) +py_cobjecttypes(#10259, #10003) +py_cobject_sources(#10259, 0) +#10260 = @"C_type$type$2__module__$2__set__" +py_cobjects(#10260) +py_cobjecttypes(#10260, #10009) +py_cobject_sources(#10260, 0) +py_cobjectnames(#10260, "__set__") +py_cmembers_versioned(#10259, "__set__", #10260, "2") +#10261 = @"C_type$type$2__module__$2__getattribute__" +py_cobjects(#10261) +py_cobjecttypes(#10261, #10009) +py_cobject_sources(#10261, 0) +py_cobjectnames(#10261, "__getattribute__") +py_cmembers_versioned(#10259, "__getattribute__", #10261, "2") +py_cmembers_versioned(#10259, "__objclass__", #10001, "2") +#10262 = @"C_type$type$2__module__$2__repr__" +py_cobjects(#10262) +py_cobjecttypes(#10262, #10009) +py_cobject_sources(#10262, 0) +py_cobjectnames(#10262, "__repr__") +py_cmembers_versioned(#10259, "__repr__", #10262, "2") +#10263 = @"C_type$type$2__module__$2__get__" +py_cobjects(#10263) +py_cobjecttypes(#10263, #10009) +py_cobject_sources(#10263, 0) +py_cobjectnames(#10263, "__get__") +py_cmembers_versioned(#10259, "__get__", #10263, "2") +py_cmembers_versioned(#10259, "__doc__", #10017, "2") +#10264 = @"C_type$type$2__module__$2__delete__" +py_cobjects(#10264) +py_cobjecttypes(#10264, #10009) +py_cobject_sources(#10264, 0) +py_cobjectnames(#10264, "__delete__") +py_cmembers_versioned(#10259, "__delete__", #10264, "2") +py_cobjectnames(#10259, "__module__") +py_cmembers_versioned(#10001, "__module__", #10259, "2") +#10265 = @"C_type$type$2__mro__" +py_cobjects(#10265) +py_cobjecttypes(#10265, #10045) +py_cobject_sources(#10265, 0) +py_cobjectnames(#10265, "__mro__") +py_cmembers_versioned(#10001, "__mro__", #10265, "2") +#10266 = @"C_type$type$2__name__" +py_cobjects(#10266) +py_cobjecttypes(#10266, #10003) +py_cobject_sources(#10266, 0) +#10267 = @"C_type$type$2__name__$2__set__" +py_cobjects(#10267) +py_cobjecttypes(#10267, #10009) +py_cobject_sources(#10267, 0) +py_cobjectnames(#10267, "__set__") +py_cmembers_versioned(#10266, "__set__", #10267, "2") +#10268 = @"C_type$type$2__name__$2__getattribute__" +py_cobjects(#10268) +py_cobjecttypes(#10268, #10009) +py_cobject_sources(#10268, 0) +py_cobjectnames(#10268, "__getattribute__") +py_cmembers_versioned(#10266, "__getattribute__", #10268, "2") +py_cmembers_versioned(#10266, "__objclass__", #10001, "2") +#10269 = @"C_type$type$2__name__$2__repr__" +py_cobjects(#10269) +py_cobjecttypes(#10269, #10009) +py_cobject_sources(#10269, 0) +py_cobjectnames(#10269, "__repr__") +py_cmembers_versioned(#10266, "__repr__", #10269, "2") +#10270 = @"C_type$type$2__name__$2__get__" +py_cobjects(#10270) +py_cobjecttypes(#10270, #10009) +py_cobject_sources(#10270, 0) +py_cobjectnames(#10270, "__get__") +py_cmembers_versioned(#10266, "__get__", #10270, "2") +py_cmembers_versioned(#10266, "__doc__", #10017, "2") +#10271 = @"C_type$type$2__name__$2__delete__" +py_cobjects(#10271) +py_cobjecttypes(#10271, #10009) +py_cobject_sources(#10271, 0) +py_cobjectnames(#10271, "__delete__") +py_cmembers_versioned(#10266, "__delete__", #10271, "2") +py_cobjectnames(#10266, "__name__") +py_cmembers_versioned(#10001, "__name__", #10266, "2") +#10272 = @"C_type$type$2__ne__" +py_cobjects(#10272) +py_cobjecttypes(#10272, #10005) +py_cobject_sources(#10272, 0) +py_cobjectnames(#10272, "__ne__") +py_cmembers_versioned(#10001, "__ne__", #10272, "2") +#10273 = @"C_type$type$2__new__" +py_cobjects(#10273) +py_cobjecttypes(#10273, #10075) +py_cobject_sources(#10273, 0) +py_cobjectnames(#10273, "__new__") +py_cmembers_versioned(#10001, "__new__", #10273, "2") +#10274 = @"C_type$type$2__repr__" +py_cobjects(#10274) +py_cobjecttypes(#10274, #10005) +py_cobject_sources(#10274, 0) +py_cobjectnames(#10274, "__repr__") +py_cmembers_versioned(#10001, "__repr__", #10274, "2") +#10275 = @"C_type$type$2__setattr__" +py_cobjects(#10275) +py_cobjecttypes(#10275, #10005) +py_cobject_sources(#10275, 0) +py_cobjectnames(#10275, "__setattr__") +py_cmembers_versioned(#10001, "__setattr__", #10275, "2") +#10276 = @"C_type$type$2__subclasscheck__" +py_cobjects(#10276) +py_cobjecttypes(#10276, #10034) +py_cobject_sources(#10276, 0) +py_cobjectnames(#10276, "__subclasscheck__") +py_cmembers_versioned(#10001, "__subclasscheck__", #10276, "2") +#10277 = @"C_type$type$2__subclasses__" +py_cobjects(#10277) +py_cobjecttypes(#10277, #10034) +py_cobject_sources(#10277, 0) +py_cobjectnames(#10277, "__subclasses__") +py_cmembers_versioned(#10001, "__subclasses__", #10277, "2") +#10278 = @"C_type$type$2__weakrefoffset__" +py_cobjects(#10278) +py_cobjecttypes(#10278, #10045) +py_cobject_sources(#10278, 0) +py_cobjectnames(#10278, "__weakrefoffset__") +py_cmembers_versioned(#10001, "__weakrefoffset__", #10278, "2") +#10279 = @"C_type$type$2mro" +py_cobjects(#10279) +py_cobjecttypes(#10279, #10034) +py_cobject_sources(#10279, 0) +py_cobjectnames(#10279, "mro") +py_cmembers_versioned(#10001, "mro", #10279, "2") +py_cmembers_versioned(#10001, ".super.", #10021, "2") +py_cobjectnames(#10001, "type") +py_cobjects(#10000) +py_cobjecttypes(#10000, #10001) +py_cobject_sources(#10000, 0) +#10280 = @"C_type$function$2__call__" +py_cobjects(#10280) +py_cobjecttypes(#10280, #10005) +py_cobject_sources(#10280, 0) +py_cobjectnames(#10280, "__call__") +py_cmembers_versioned(#10000, "__call__", #10280, "2") +#10281 = @"C_type$function$2__closure__" +py_cobjects(#10281) +py_cobjecttypes(#10281, #10045) +py_cobject_sources(#10281, 0) +py_cobjectnames(#10281, "__closure__") +py_cmembers_versioned(#10000, "__closure__", #10281, "2") +#10282 = @"C_type$function$2__code__" +py_cobjects(#10282) +py_cobjecttypes(#10282, #10003) +py_cobject_sources(#10282, 0) +#10283 = @"C_type$function$2__code__$2__set__" +py_cobjects(#10283) +py_cobjecttypes(#10283, #10009) +py_cobject_sources(#10283, 0) +py_cobjectnames(#10283, "__set__") +py_cmembers_versioned(#10282, "__set__", #10283, "2") +#10284 = @"C_type$function$2__code__$2__getattribute__" +py_cobjects(#10284) +py_cobjecttypes(#10284, #10009) +py_cobject_sources(#10284, 0) +py_cobjectnames(#10284, "__getattribute__") +py_cmembers_versioned(#10282, "__getattribute__", #10284, "2") +py_cmembers_versioned(#10282, "__objclass__", #10000, "2") +#10285 = @"C_type$function$2__code__$2__repr__" +py_cobjects(#10285) +py_cobjecttypes(#10285, #10009) +py_cobject_sources(#10285, 0) +py_cobjectnames(#10285, "__repr__") +py_cmembers_versioned(#10282, "__repr__", #10285, "2") +#10286 = @"C_type$function$2__code__$2__get__" +py_cobjects(#10286) +py_cobjecttypes(#10286, #10009) +py_cobject_sources(#10286, 0) +py_cobjectnames(#10286, "__get__") +py_cmembers_versioned(#10282, "__get__", #10286, "2") +py_cmembers_versioned(#10282, "__doc__", #10017, "2") +#10287 = @"C_type$function$2__code__$2__delete__" +py_cobjects(#10287) +py_cobjecttypes(#10287, #10009) +py_cobject_sources(#10287, 0) +py_cobjectnames(#10287, "__delete__") +py_cmembers_versioned(#10282, "__delete__", #10287, "2") +py_cobjectnames(#10282, "__code__") +py_cmembers_versioned(#10000, "__code__", #10282, "2") +#10288 = @"C_type$function$2__defaults__" +py_cobjects(#10288) +py_cobjecttypes(#10288, #10003) +py_cobject_sources(#10288, 0) +#10289 = @"C_type$function$2__defaults__$2__set__" +py_cobjects(#10289) +py_cobjecttypes(#10289, #10009) +py_cobject_sources(#10289, 0) +py_cobjectnames(#10289, "__set__") +py_cmembers_versioned(#10288, "__set__", #10289, "2") +#10290 = @"C_type$function$2__defaults__$2__getattribute__" +py_cobjects(#10290) +py_cobjecttypes(#10290, #10009) +py_cobject_sources(#10290, 0) +py_cobjectnames(#10290, "__getattribute__") +py_cmembers_versioned(#10288, "__getattribute__", #10290, "2") +py_cmembers_versioned(#10288, "__objclass__", #10000, "2") +#10291 = @"C_type$function$2__defaults__$2__repr__" +py_cobjects(#10291) +py_cobjecttypes(#10291, #10009) +py_cobject_sources(#10291, 0) +py_cobjectnames(#10291, "__repr__") +py_cmembers_versioned(#10288, "__repr__", #10291, "2") +#10292 = @"C_type$function$2__defaults__$2__get__" +py_cobjects(#10292) +py_cobjecttypes(#10292, #10009) +py_cobject_sources(#10292, 0) +py_cobjectnames(#10292, "__get__") +py_cmembers_versioned(#10288, "__get__", #10292, "2") +py_cmembers_versioned(#10288, "__doc__", #10017, "2") +#10293 = @"C_type$function$2__defaults__$2__delete__" +py_cobjects(#10293) +py_cobjecttypes(#10293, #10009) +py_cobject_sources(#10293, 0) +py_cobjectnames(#10293, "__delete__") +py_cmembers_versioned(#10288, "__delete__", #10293, "2") +py_cobjectnames(#10288, "__defaults__") +py_cmembers_versioned(#10000, "__defaults__", #10288, "2") +#10294 = @"C_type$function$2__delattr__" +py_cobjects(#10294) +py_cobjecttypes(#10294, #10005) +py_cobject_sources(#10294, 0) +py_cobjectnames(#10294, "__delattr__") +py_cmembers_versioned(#10000, "__delattr__", #10294, "2") +#10295 = @"C_type$function$2__dict__" +py_cobjects(#10295) +py_cobjecttypes(#10295, #10003) +py_cobject_sources(#10295, 0) +#10296 = @"C_type$function$2__dict__$2__set__" +py_cobjects(#10296) +py_cobjecttypes(#10296, #10009) +py_cobject_sources(#10296, 0) +py_cobjectnames(#10296, "__set__") +py_cmembers_versioned(#10295, "__set__", #10296, "2") +#10297 = @"C_type$function$2__dict__$2__getattribute__" +py_cobjects(#10297) +py_cobjecttypes(#10297, #10009) +py_cobject_sources(#10297, 0) +py_cobjectnames(#10297, "__getattribute__") +py_cmembers_versioned(#10295, "__getattribute__", #10297, "2") +py_cmembers_versioned(#10295, "__objclass__", #10000, "2") +#10298 = @"C_type$function$2__dict__$2__repr__" +py_cobjects(#10298) +py_cobjecttypes(#10298, #10009) +py_cobject_sources(#10298, 0) +py_cobjectnames(#10298, "__repr__") +py_cmembers_versioned(#10295, "__repr__", #10298, "2") +#10299 = @"C_type$function$2__dict__$2__get__" +py_cobjects(#10299) +py_cobjecttypes(#10299, #10009) +py_cobject_sources(#10299, 0) +py_cobjectnames(#10299, "__get__") +py_cmembers_versioned(#10295, "__get__", #10299, "2") +py_cmembers_versioned(#10295, "__doc__", #10017, "2") +#10300 = @"C_type$function$2__dict__$2__delete__" +py_cobjects(#10300) +py_cobjecttypes(#10300, #10009) +py_cobject_sources(#10300, 0) +py_cobjectnames(#10300, "__delete__") +py_cmembers_versioned(#10295, "__delete__", #10300, "2") +py_cobjectnames(#10295, "__dict__") +py_cmembers_versioned(#10000, "__dict__", #10295, "2") +#10301 = @"C_type$function$2__doc__" +py_cobjects(#10301) +py_cobjecttypes(#10301, #10045) +py_cobject_sources(#10301, 0) +py_cobjectnames(#10301, "__doc__") +py_cmembers_versioned(#10000, "__doc__", #10301, "2") +#10302 = @"C_type$function$2__get__" +py_cobjects(#10302) +py_cobjecttypes(#10302, #10005) +py_cobject_sources(#10302, 0) +py_cobjectnames(#10302, "__get__") +py_cmembers_versioned(#10000, "__get__", #10302, "2") +#10303 = @"C_type$function$2__getattribute__" +py_cobjects(#10303) +py_cobjecttypes(#10303, #10005) +py_cobject_sources(#10303, 0) +py_cobjectnames(#10303, "__getattribute__") +py_cmembers_versioned(#10000, "__getattribute__", #10303, "2") +#10304 = @"C_type$function$2__globals__" +py_cobjects(#10304) +py_cobjecttypes(#10304, #10045) +py_cobject_sources(#10304, 0) +py_cobjectnames(#10304, "__globals__") +py_cmembers_versioned(#10000, "__globals__", #10304, "2") +#10305 = @"C_type$function$2__module__" +py_cobjects(#10305) +py_cobjecttypes(#10305, #10045) +py_cobject_sources(#10305, 0) +py_cobjectnames(#10305, "__module__") +py_cmembers_versioned(#10000, "__module__", #10305, "2") +#10306 = @"C_type$function$2__name__" +py_cobjects(#10306) +py_cobjecttypes(#10306, #10003) +py_cobject_sources(#10306, 0) +#10307 = @"C_type$function$2__name__$2__set__" +py_cobjects(#10307) +py_cobjecttypes(#10307, #10009) +py_cobject_sources(#10307, 0) +py_cobjectnames(#10307, "__set__") +py_cmembers_versioned(#10306, "__set__", #10307, "2") +#10308 = @"C_type$function$2__name__$2__getattribute__" +py_cobjects(#10308) +py_cobjecttypes(#10308, #10009) +py_cobject_sources(#10308, 0) +py_cobjectnames(#10308, "__getattribute__") +py_cmembers_versioned(#10306, "__getattribute__", #10308, "2") +py_cmembers_versioned(#10306, "__objclass__", #10000, "2") +#10309 = @"C_type$function$2__name__$2__repr__" +py_cobjects(#10309) +py_cobjecttypes(#10309, #10009) +py_cobject_sources(#10309, 0) +py_cobjectnames(#10309, "__repr__") +py_cmembers_versioned(#10306, "__repr__", #10309, "2") +#10310 = @"C_type$function$2__name__$2__get__" +py_cobjects(#10310) +py_cobjecttypes(#10310, #10009) +py_cobject_sources(#10310, 0) +py_cobjectnames(#10310, "__get__") +py_cmembers_versioned(#10306, "__get__", #10310, "2") +py_cmembers_versioned(#10306, "__doc__", #10017, "2") +#10311 = @"C_type$function$2__name__$2__delete__" +py_cobjects(#10311) +py_cobjecttypes(#10311, #10009) +py_cobject_sources(#10311, 0) +py_cobjectnames(#10311, "__delete__") +py_cmembers_versioned(#10306, "__delete__", #10311, "2") +py_cobjectnames(#10306, "__name__") +py_cmembers_versioned(#10000, "__name__", #10306, "2") +#10312 = @"C_type$function$2__new__" +py_cobjects(#10312) +py_cobjecttypes(#10312, #10075) +py_cobject_sources(#10312, 0) +py_cobjectnames(#10312, "__new__") +py_cmembers_versioned(#10000, "__new__", #10312, "2") +#10313 = @"C_type$function$2__repr__" +py_cobjects(#10313) +py_cobjecttypes(#10313, #10005) +py_cobject_sources(#10313, 0) +py_cobjectnames(#10313, "__repr__") +py_cmembers_versioned(#10000, "__repr__", #10313, "2") +#10314 = @"C_type$function$2__setattr__" +py_cobjects(#10314) +py_cobjecttypes(#10314, #10005) +py_cobject_sources(#10314, 0) +py_cobjectnames(#10314, "__setattr__") +py_cmembers_versioned(#10000, "__setattr__", #10314, "2") +#10315 = @"C_type$function$2func_closure" +py_cobjects(#10315) +py_cobjecttypes(#10315, #10045) +py_cobject_sources(#10315, 0) +py_cobjectnames(#10315, "func_closure") +py_cmembers_versioned(#10000, "func_closure", #10315, "2") +#10316 = @"C_type$function$2func_code" +py_cobjects(#10316) +py_cobjecttypes(#10316, #10003) +py_cobject_sources(#10316, 0) +#10317 = @"C_type$function$2func_code$2__set__" +py_cobjects(#10317) +py_cobjecttypes(#10317, #10009) +py_cobject_sources(#10317, 0) +py_cobjectnames(#10317, "__set__") +py_cmembers_versioned(#10316, "__set__", #10317, "2") +#10318 = @"C_type$function$2func_code$2__getattribute__" +py_cobjects(#10318) +py_cobjecttypes(#10318, #10009) +py_cobject_sources(#10318, 0) +py_cobjectnames(#10318, "__getattribute__") +py_cmembers_versioned(#10316, "__getattribute__", #10318, "2") +py_cmembers_versioned(#10316, "__objclass__", #10000, "2") +#10319 = @"C_type$function$2func_code$2__repr__" +py_cobjects(#10319) +py_cobjecttypes(#10319, #10009) +py_cobject_sources(#10319, 0) +py_cobjectnames(#10319, "__repr__") +py_cmembers_versioned(#10316, "__repr__", #10319, "2") +#10320 = @"C_type$function$2func_code$2__get__" +py_cobjects(#10320) +py_cobjecttypes(#10320, #10009) +py_cobject_sources(#10320, 0) +py_cobjectnames(#10320, "__get__") +py_cmembers_versioned(#10316, "__get__", #10320, "2") +py_cmembers_versioned(#10316, "__doc__", #10017, "2") +#10321 = @"C_type$function$2func_code$2__delete__" +py_cobjects(#10321) +py_cobjecttypes(#10321, #10009) +py_cobject_sources(#10321, 0) +py_cobjectnames(#10321, "__delete__") +py_cmembers_versioned(#10316, "__delete__", #10321, "2") +py_cobjectnames(#10316, "func_code") +py_cmembers_versioned(#10000, "func_code", #10316, "2") +#10322 = @"C_type$function$2func_defaults" +py_cobjects(#10322) +py_cobjecttypes(#10322, #10003) +py_cobject_sources(#10322, 0) +#10323 = @"C_type$function$2func_defaults$2__set__" +py_cobjects(#10323) +py_cobjecttypes(#10323, #10009) +py_cobject_sources(#10323, 0) +py_cobjectnames(#10323, "__set__") +py_cmembers_versioned(#10322, "__set__", #10323, "2") +#10324 = @"C_type$function$2func_defaults$2__getattribute__" +py_cobjects(#10324) +py_cobjecttypes(#10324, #10009) +py_cobject_sources(#10324, 0) +py_cobjectnames(#10324, "__getattribute__") +py_cmembers_versioned(#10322, "__getattribute__", #10324, "2") +py_cmembers_versioned(#10322, "__objclass__", #10000, "2") +#10325 = @"C_type$function$2func_defaults$2__repr__" +py_cobjects(#10325) +py_cobjecttypes(#10325, #10009) +py_cobject_sources(#10325, 0) +py_cobjectnames(#10325, "__repr__") +py_cmembers_versioned(#10322, "__repr__", #10325, "2") +#10326 = @"C_type$function$2func_defaults$2__get__" +py_cobjects(#10326) +py_cobjecttypes(#10326, #10009) +py_cobject_sources(#10326, 0) +py_cobjectnames(#10326, "__get__") +py_cmembers_versioned(#10322, "__get__", #10326, "2") +py_cmembers_versioned(#10322, "__doc__", #10017, "2") +#10327 = @"C_type$function$2func_defaults$2__delete__" +py_cobjects(#10327) +py_cobjecttypes(#10327, #10009) +py_cobject_sources(#10327, 0) +py_cobjectnames(#10327, "__delete__") +py_cmembers_versioned(#10322, "__delete__", #10327, "2") +py_cobjectnames(#10322, "func_defaults") +py_cmembers_versioned(#10000, "func_defaults", #10322, "2") +#10328 = @"C_type$function$2func_dict" +py_cobjects(#10328) +py_cobjecttypes(#10328, #10003) +py_cobject_sources(#10328, 0) +#10329 = @"C_type$function$2func_dict$2__set__" +py_cobjects(#10329) +py_cobjecttypes(#10329, #10009) +py_cobject_sources(#10329, 0) +py_cobjectnames(#10329, "__set__") +py_cmembers_versioned(#10328, "__set__", #10329, "2") +#10330 = @"C_type$function$2func_dict$2__getattribute__" +py_cobjects(#10330) +py_cobjecttypes(#10330, #10009) +py_cobject_sources(#10330, 0) +py_cobjectnames(#10330, "__getattribute__") +py_cmembers_versioned(#10328, "__getattribute__", #10330, "2") +py_cmembers_versioned(#10328, "__objclass__", #10000, "2") +#10331 = @"C_type$function$2func_dict$2__repr__" +py_cobjects(#10331) +py_cobjecttypes(#10331, #10009) +py_cobject_sources(#10331, 0) +py_cobjectnames(#10331, "__repr__") +py_cmembers_versioned(#10328, "__repr__", #10331, "2") +#10332 = @"C_type$function$2func_dict$2__get__" +py_cobjects(#10332) +py_cobjecttypes(#10332, #10009) +py_cobject_sources(#10332, 0) +py_cobjectnames(#10332, "__get__") +py_cmembers_versioned(#10328, "__get__", #10332, "2") +py_cmembers_versioned(#10328, "__doc__", #10017, "2") +#10333 = @"C_type$function$2func_dict$2__delete__" +py_cobjects(#10333) +py_cobjecttypes(#10333, #10009) +py_cobject_sources(#10333, 0) +py_cobjectnames(#10333, "__delete__") +py_cmembers_versioned(#10328, "__delete__", #10333, "2") +py_cobjectnames(#10328, "func_dict") +py_cmembers_versioned(#10000, "func_dict", #10328, "2") +#10334 = @"C_type$function$2func_doc" +py_cobjects(#10334) +py_cobjecttypes(#10334, #10045) +py_cobject_sources(#10334, 0) +py_cobjectnames(#10334, "func_doc") +py_cmembers_versioned(#10000, "func_doc", #10334, "2") +#10335 = @"C_type$function$2func_globals" +py_cobjects(#10335) +py_cobjecttypes(#10335, #10045) +py_cobject_sources(#10335, 0) +py_cobjectnames(#10335, "func_globals") +py_cmembers_versioned(#10000, "func_globals", #10335, "2") +#10336 = @"C_type$function$2func_name" +py_cobjects(#10336) +py_cobjecttypes(#10336, #10003) +py_cobject_sources(#10336, 0) +#10337 = @"C_type$function$2func_name$2__set__" +py_cobjects(#10337) +py_cobjecttypes(#10337, #10009) +py_cobject_sources(#10337, 0) +py_cobjectnames(#10337, "__set__") +py_cmembers_versioned(#10336, "__set__", #10337, "2") +#10338 = @"C_type$function$2func_name$2__getattribute__" +py_cobjects(#10338) +py_cobjecttypes(#10338, #10009) +py_cobject_sources(#10338, 0) +py_cobjectnames(#10338, "__getattribute__") +py_cmembers_versioned(#10336, "__getattribute__", #10338, "2") +py_cmembers_versioned(#10336, "__objclass__", #10000, "2") +#10339 = @"C_type$function$2func_name$2__repr__" +py_cobjects(#10339) +py_cobjecttypes(#10339, #10009) +py_cobject_sources(#10339, 0) +py_cobjectnames(#10339, "__repr__") +py_cmembers_versioned(#10336, "__repr__", #10339, "2") +#10340 = @"C_type$function$2func_name$2__get__" +py_cobjects(#10340) +py_cobjecttypes(#10340, #10009) +py_cobject_sources(#10340, 0) +py_cobjectnames(#10340, "__get__") +py_cmembers_versioned(#10336, "__get__", #10340, "2") +py_cmembers_versioned(#10336, "__doc__", #10017, "2") +#10341 = @"C_type$function$2func_name$2__delete__" +py_cobjects(#10341) +py_cobjecttypes(#10341, #10009) +py_cobject_sources(#10341, 0) +py_cobjectnames(#10341, "__delete__") +py_cmembers_versioned(#10336, "__delete__", #10341, "2") +py_cobjectnames(#10336, "func_name") +py_cmembers_versioned(#10000, "func_name", #10336, "2") +py_cmembers_versioned(#10000, ".super.", #10021, "2") +py_cobjectnames(#10000, "function") +py_special_objects(#10000, "FunctionType") +py_special_objects(#10021, "object") +#10342 = @"C_type$TypeError" +py_cobjects(#10342) +py_cobjecttypes(#10342, #10001) +py_cobject_sources(#10342, 0) +#10343 = @"C_bytes$dbe7d2774d1f18894c309533ab3e08721cecdf36" +py_cobjects(#10343) +py_cobjecttypes(#10343, #10028) +py_cobject_sources(#10343, 0) +py_cobjectnames(#10343, "b'Inappropriate argument type.'") +py_cmembers_versioned(#10342, "__doc__", #10343, "2") +#10344 = @"C_type$TypeError$2__init__" +py_cobjects(#10344) +py_cobjecttypes(#10344, #10005) +py_cobject_sources(#10344, 0) +py_cobjectnames(#10344, "__init__") +py_cmembers_versioned(#10342, "__init__", #10344, "2") +#10345 = @"C_type$TypeError$2__new__" +py_cobjects(#10345) +py_cobjecttypes(#10345, #10075) +py_cobject_sources(#10345, 0) +py_cobjectnames(#10345, "__new__") +py_cmembers_versioned(#10342, "__new__", #10345, "2") +#10346 = @"C_type$StandardError" +py_cobjects(#10346) +py_cobjecttypes(#10346, #10001) +py_cobject_sources(#10346, 0) +#10347 = @"C_bytes$2b5cdf8ebbb1126d88b513cae277cfecd98d5976" +py_cobjects(#10347) +py_cobjecttypes(#10347, #10028) +py_cobject_sources(#10347, 0) +py_cobjectnames(#10347, "b'Base class for all standard Python exceptions that do not represent +interpreter exiting.'") +py_cmembers_versioned(#10346, "__doc__", #10347, "2") +#10348 = @"C_type$StandardError$2__init__" +py_cobjects(#10348) +py_cobjecttypes(#10348, #10005) +py_cobject_sources(#10348, 0) +py_cobjectnames(#10348, "__init__") +py_cmembers_versioned(#10346, "__init__", #10348, "2") +#10349 = @"C_type$StandardError$2__new__" +py_cobjects(#10349) +py_cobjecttypes(#10349, #10075) +py_cobject_sources(#10349, 0) +py_cobjectnames(#10349, "__new__") +py_cmembers_versioned(#10346, "__new__", #10349, "2") +#10350 = @"C_type$Exception" +py_cobjects(#10350) +py_cobjecttypes(#10350, #10001) +py_cobject_sources(#10350, 0) +#10351 = @"C_bytes$41e6176e60800b98303aa2213339fcea39d59ac8" +py_cobjects(#10351) +py_cobjecttypes(#10351, #10028) +py_cobject_sources(#10351, 0) +py_cobjectnames(#10351, "b'Common base class for all non-exit exceptions.'") +py_cmembers_versioned(#10350, "__doc__", #10351, "2") +#10352 = @"C_type$Exception$2__init__" +py_cobjects(#10352) +py_cobjecttypes(#10352, #10005) +py_cobject_sources(#10352, 0) +py_cobjectnames(#10352, "__init__") +py_cmembers_versioned(#10350, "__init__", #10352, "2") +#10353 = @"C_type$Exception$2__new__" +py_cobjects(#10353) +py_cobjecttypes(#10353, #10075) +py_cobject_sources(#10353, 0) +py_cobjectnames(#10353, "__new__") +py_cmembers_versioned(#10350, "__new__", #10353, "2") +#10354 = @"C_type$BaseException" +py_cobjects(#10354) +py_cobjecttypes(#10354, #10001) +py_cobject_sources(#10354, 0) +#10355 = @"C_type$BaseException$2__delattr__" +py_cobjects(#10355) +py_cobjecttypes(#10355, #10005) +py_cobject_sources(#10355, 0) +py_cobjectnames(#10355, "__delattr__") +py_cmembers_versioned(#10354, "__delattr__", #10355, "2") +#10356 = @"C_type$BaseException$2__dict__" +py_cobjects(#10356) +py_cobjecttypes(#10356, #10003) +py_cobject_sources(#10356, 0) +#10357 = @"C_type$BaseException$2__dict__$2__set__" +py_cobjects(#10357) +py_cobjecttypes(#10357, #10009) +py_cobject_sources(#10357, 0) +py_cobjectnames(#10357, "__set__") +py_cmembers_versioned(#10356, "__set__", #10357, "2") +#10358 = @"C_type$BaseException$2__dict__$2__getattribute__" +py_cobjects(#10358) +py_cobjecttypes(#10358, #10009) +py_cobject_sources(#10358, 0) +py_cobjectnames(#10358, "__getattribute__") +py_cmembers_versioned(#10356, "__getattribute__", #10358, "2") +py_cmembers_versioned(#10356, "__objclass__", #10354, "2") +#10359 = @"C_type$BaseException$2__dict__$2__repr__" +py_cobjects(#10359) +py_cobjecttypes(#10359, #10009) +py_cobject_sources(#10359, 0) +py_cobjectnames(#10359, "__repr__") +py_cmembers_versioned(#10356, "__repr__", #10359, "2") +#10360 = @"C_type$BaseException$2__dict__$2__get__" +py_cobjects(#10360) +py_cobjecttypes(#10360, #10009) +py_cobject_sources(#10360, 0) +py_cobjectnames(#10360, "__get__") +py_cmembers_versioned(#10356, "__get__", #10360, "2") +py_cmembers_versioned(#10356, "__doc__", #10017, "2") +#10361 = @"C_type$BaseException$2__dict__$2__delete__" +py_cobjects(#10361) +py_cobjecttypes(#10361, #10009) +py_cobject_sources(#10361, 0) +py_cobjectnames(#10361, "__delete__") +py_cmembers_versioned(#10356, "__delete__", #10361, "2") +py_cobjectnames(#10356, "__dict__") +py_cmembers_versioned(#10354, "__dict__", #10356, "2") +#10362 = @"C_bytes$537130403a454779c94f7087773406e13b7f8ecd" +py_cobjects(#10362) +py_cobjecttypes(#10362, #10028) +py_cobject_sources(#10362, 0) +py_cobjectnames(#10362, "b'Common base class for all exceptions'") +py_cmembers_versioned(#10354, "__doc__", #10362, "2") +#10363 = @"C_type$BaseException$2__getattribute__" +py_cobjects(#10363) +py_cobjecttypes(#10363, #10005) +py_cobject_sources(#10363, 0) +py_cobjectnames(#10363, "__getattribute__") +py_cmembers_versioned(#10354, "__getattribute__", #10363, "2") +#10364 = @"C_type$BaseException$2__getitem__" +py_cobjects(#10364) +py_cobjecttypes(#10364, #10005) +py_cobject_sources(#10364, 0) +py_cobjectnames(#10364, "__getitem__") +py_cmembers_versioned(#10354, "__getitem__", #10364, "2") +#10365 = @"C_type$BaseException$2__getslice__" +py_cobjects(#10365) +py_cobjecttypes(#10365, #10005) +py_cobject_sources(#10365, 0) +py_cobjectnames(#10365, "__getslice__") +py_cmembers_versioned(#10354, "__getslice__", #10365, "2") +#10366 = @"C_type$BaseException$2__init__" +py_cobjects(#10366) +py_cobjecttypes(#10366, #10005) +py_cobject_sources(#10366, 0) +py_cobjectnames(#10366, "__init__") +py_cmembers_versioned(#10354, "__init__", #10366, "2") +#10367 = @"C_type$BaseException$2__new__" +py_cobjects(#10367) +py_cobjecttypes(#10367, #10075) +py_cobject_sources(#10367, 0) +py_cobjectnames(#10367, "__new__") +py_cmembers_versioned(#10354, "__new__", #10367, "2") +#10368 = @"C_type$BaseException$2__reduce__" +py_cobjects(#10368) +py_cobjecttypes(#10368, #10034) +py_cobject_sources(#10368, 0) +py_cobjectnames(#10368, "__reduce__") +py_cmembers_versioned(#10354, "__reduce__", #10368, "2") +#10369 = @"C_type$BaseException$2__repr__" +py_cobjects(#10369) +py_cobjecttypes(#10369, #10005) +py_cobject_sources(#10369, 0) +py_cobjectnames(#10369, "__repr__") +py_cmembers_versioned(#10354, "__repr__", #10369, "2") +#10370 = @"C_type$BaseException$2__setattr__" +py_cobjects(#10370) +py_cobjecttypes(#10370, #10005) +py_cobject_sources(#10370, 0) +py_cobjectnames(#10370, "__setattr__") +py_cmembers_versioned(#10354, "__setattr__", #10370, "2") +#10371 = @"C_type$BaseException$2__setstate__" +py_cobjects(#10371) +py_cobjecttypes(#10371, #10034) +py_cobject_sources(#10371, 0) +py_cobjectnames(#10371, "__setstate__") +py_cmembers_versioned(#10354, "__setstate__", #10371, "2") +#10372 = @"C_type$BaseException$2__str__" +py_cobjects(#10372) +py_cobjecttypes(#10372, #10005) +py_cobject_sources(#10372, 0) +py_cobjectnames(#10372, "__str__") +py_cmembers_versioned(#10354, "__str__", #10372, "2") +#10373 = @"C_type$BaseException$2__unicode__" +py_cobjects(#10373) +py_cobjecttypes(#10373, #10034) +py_cobject_sources(#10373, 0) +py_cobjectnames(#10373, "__unicode__") +py_cmembers_versioned(#10354, "__unicode__", #10373, "2") +#10374 = @"C_type$BaseException$2args" +py_cobjects(#10374) +py_cobjecttypes(#10374, #10003) +py_cobject_sources(#10374, 0) +#10375 = @"C_type$BaseException$2args$2__set__" +py_cobjects(#10375) +py_cobjecttypes(#10375, #10009) +py_cobject_sources(#10375, 0) +py_cobjectnames(#10375, "__set__") +py_cmembers_versioned(#10374, "__set__", #10375, "2") +#10376 = @"C_type$BaseException$2args$2__getattribute__" +py_cobjects(#10376) +py_cobjecttypes(#10376, #10009) +py_cobject_sources(#10376, 0) +py_cobjectnames(#10376, "__getattribute__") +py_cmembers_versioned(#10374, "__getattribute__", #10376, "2") +py_cmembers_versioned(#10374, "__objclass__", #10354, "2") +#10377 = @"C_type$BaseException$2args$2__repr__" +py_cobjects(#10377) +py_cobjecttypes(#10377, #10009) +py_cobject_sources(#10377, 0) +py_cobjectnames(#10377, "__repr__") +py_cmembers_versioned(#10374, "__repr__", #10377, "2") +#10378 = @"C_type$BaseException$2args$2__get__" +py_cobjects(#10378) +py_cobjecttypes(#10378, #10009) +py_cobject_sources(#10378, 0) +py_cobjectnames(#10378, "__get__") +py_cmembers_versioned(#10374, "__get__", #10378, "2") +py_cmembers_versioned(#10374, "__doc__", #10017, "2") +#10379 = @"C_type$BaseException$2args$2__delete__" +py_cobjects(#10379) +py_cobjecttypes(#10379, #10009) +py_cobject_sources(#10379, 0) +py_cobjectnames(#10379, "__delete__") +py_cmembers_versioned(#10374, "__delete__", #10379, "2") +py_cobjectnames(#10374, "args") +py_cmembers_versioned(#10354, "args", #10374, "2") +#10380 = @"C_type$BaseException$2message" +py_cobjects(#10380) +py_cobjecttypes(#10380, #10003) +py_cobject_sources(#10380, 0) +#10381 = @"C_type$BaseException$2message$2__set__" +py_cobjects(#10381) +py_cobjecttypes(#10381, #10009) +py_cobject_sources(#10381, 0) +py_cobjectnames(#10381, "__set__") +py_cmembers_versioned(#10380, "__set__", #10381, "2") +#10382 = @"C_type$BaseException$2message$2__getattribute__" +py_cobjects(#10382) +py_cobjecttypes(#10382, #10009) +py_cobject_sources(#10382, 0) +py_cobjectnames(#10382, "__getattribute__") +py_cmembers_versioned(#10380, "__getattribute__", #10382, "2") +py_cmembers_versioned(#10380, "__objclass__", #10354, "2") +#10383 = @"C_type$BaseException$2message$2__repr__" +py_cobjects(#10383) +py_cobjecttypes(#10383, #10009) +py_cobject_sources(#10383, 0) +py_cobjectnames(#10383, "__repr__") +py_cmembers_versioned(#10380, "__repr__", #10383, "2") +#10384 = @"C_type$BaseException$2message$2__get__" +py_cobjects(#10384) +py_cobjecttypes(#10384, #10009) +py_cobject_sources(#10384, 0) +py_cobjectnames(#10384, "__get__") +py_cmembers_versioned(#10380, "__get__", #10384, "2") +py_cmembers_versioned(#10380, "__doc__", #10017, "2") +#10385 = @"C_type$BaseException$2message$2__delete__" +py_cobjects(#10385) +py_cobjecttypes(#10385, #10009) +py_cobject_sources(#10385, 0) +py_cobjectnames(#10385, "__delete__") +py_cmembers_versioned(#10380, "__delete__", #10385, "2") +py_cobjectnames(#10380, "message") +py_cmembers_versioned(#10354, "message", #10380, "2") +py_cmembers_versioned(#10354, ".super.", #10021, "2") +py_cobjectnames(#10354, "BaseException") +py_cmembers_versioned(#10350, ".super.", #10354, "2") +py_cobjectnames(#10350, "Exception") +py_cmembers_versioned(#10346, ".super.", #10350, "2") +py_cobjectnames(#10346, "StandardError") +py_cmembers_versioned(#10342, ".super.", #10346, "2") +py_cobjectnames(#10342, "TypeError") +py_special_objects(#10342, "TypeError") +#10386 = @"C_type$dict" +py_cobjects(#10386) +py_cobjecttypes(#10386, #10001) +py_cobject_sources(#10386, 0) +#10387 = @"C_type$dict$2__cmp__" +py_cobjects(#10387) +py_cobjecttypes(#10387, #10005) +py_cobject_sources(#10387, 0) +py_cobjectnames(#10387, "__cmp__") +py_cmembers_versioned(#10386, "__cmp__", #10387, "2") +#10388 = @"C_type$dict$2__contains__" +py_cobjects(#10388) +py_cobjecttypes(#10388, #10034) +py_cobject_sources(#10388, 0) +py_cobjectnames(#10388, "__contains__") +py_cmembers_versioned(#10386, "__contains__", #10388, "2") +#10389 = @"C_type$dict$2__delitem__" +py_cobjects(#10389) +py_cobjecttypes(#10389, #10005) +py_cobject_sources(#10389, 0) +py_cobjectnames(#10389, "__delitem__") +py_cmembers_versioned(#10386, "__delitem__", #10389, "2") +#10390 = @"C_bytes$e965db2620f245e5a5538ab00a16b80b9a5dce95" +py_cobjects(#10390) +py_cobjecttypes(#10390, #10028) +py_cobject_sources(#10390, 0) +py_cobjectnames(#10390, "b'dict() -> new empty dictionary +dict(mapping) -> new dictionary initialized from a mapping object's + (key, value) pairs +dict(iterable) -> new dictionary initialized as if via: + d = {} + for k, v in iterable: + d[k] = v +dict(**kwargs) -> new dictionary initialized with the name=value pairs + in the keyword argument list. For example: dict(one=1, two=2)'") +py_cmembers_versioned(#10386, "__doc__", #10390, "2") +#10391 = @"C_type$dict$2__eq__" +py_cobjects(#10391) +py_cobjecttypes(#10391, #10005) +py_cobject_sources(#10391, 0) +py_cobjectnames(#10391, "__eq__") +py_cmembers_versioned(#10386, "__eq__", #10391, "2") +#10392 = @"C_type$dict$2__ge__" +py_cobjects(#10392) +py_cobjecttypes(#10392, #10005) +py_cobject_sources(#10392, 0) +py_cobjectnames(#10392, "__ge__") +py_cmembers_versioned(#10386, "__ge__", #10392, "2") +#10393 = @"C_type$dict$2__getattribute__" +py_cobjects(#10393) +py_cobjecttypes(#10393, #10005) +py_cobject_sources(#10393, 0) +py_cobjectnames(#10393, "__getattribute__") +py_cmembers_versioned(#10386, "__getattribute__", #10393, "2") +#10394 = @"C_type$dict$2__getitem__" +py_cobjects(#10394) +py_cobjecttypes(#10394, #10034) +py_cobject_sources(#10394, 0) +py_cobjectnames(#10394, "__getitem__") +py_cmembers_versioned(#10386, "__getitem__", #10394, "2") +#10395 = @"C_type$dict$2__gt__" +py_cobjects(#10395) +py_cobjecttypes(#10395, #10005) +py_cobject_sources(#10395, 0) +py_cobjectnames(#10395, "__gt__") +py_cmembers_versioned(#10386, "__gt__", #10395, "2") +py_cmembers_versioned(#10386, "__hash__", #10017, "2") +#10396 = @"C_type$dict$2__init__" +py_cobjects(#10396) +py_cobjecttypes(#10396, #10005) +py_cobject_sources(#10396, 0) +py_cobjectnames(#10396, "__init__") +py_cmembers_versioned(#10386, "__init__", #10396, "2") +#10397 = @"C_type$dict$2__iter__" +py_cobjects(#10397) +py_cobjecttypes(#10397, #10005) +py_cobject_sources(#10397, 0) +py_cobjectnames(#10397, "__iter__") +py_cmembers_versioned(#10386, "__iter__", #10397, "2") +#10398 = @"C_type$dict$2__le__" +py_cobjects(#10398) +py_cobjecttypes(#10398, #10005) +py_cobject_sources(#10398, 0) +py_cobjectnames(#10398, "__le__") +py_cmembers_versioned(#10386, "__le__", #10398, "2") +#10399 = @"C_type$dict$2__len__" +py_cobjects(#10399) +py_cobjecttypes(#10399, #10005) +py_cobject_sources(#10399, 0) +py_cobjectnames(#10399, "__len__") +py_cmembers_versioned(#10386, "__len__", #10399, "2") +#10400 = @"C_type$dict$2__lt__" +py_cobjects(#10400) +py_cobjecttypes(#10400, #10005) +py_cobject_sources(#10400, 0) +py_cobjectnames(#10400, "__lt__") +py_cmembers_versioned(#10386, "__lt__", #10400, "2") +#10401 = @"C_type$dict$2__ne__" +py_cobjects(#10401) +py_cobjecttypes(#10401, #10005) +py_cobject_sources(#10401, 0) +py_cobjectnames(#10401, "__ne__") +py_cmembers_versioned(#10386, "__ne__", #10401, "2") +#10402 = @"C_type$dict$2__new__" +py_cobjects(#10402) +py_cobjecttypes(#10402, #10075) +py_cobject_sources(#10402, 0) +py_cobjectnames(#10402, "__new__") +py_cmembers_versioned(#10386, "__new__", #10402, "2") +#10403 = @"C_type$dict$2__repr__" +py_cobjects(#10403) +py_cobjecttypes(#10403, #10005) +py_cobject_sources(#10403, 0) +py_cobjectnames(#10403, "__repr__") +py_cmembers_versioned(#10386, "__repr__", #10403, "2") +#10404 = @"C_type$dict$2__setitem__" +py_cobjects(#10404) +py_cobjecttypes(#10404, #10005) +py_cobject_sources(#10404, 0) +py_cobjectnames(#10404, "__setitem__") +py_cmembers_versioned(#10386, "__setitem__", #10404, "2") +#10405 = @"C_type$dict$2__sizeof__" +py_cobjects(#10405) +py_cobjecttypes(#10405, #10034) +py_cobject_sources(#10405, 0) +py_cobjectnames(#10405, "__sizeof__") +py_cmembers_versioned(#10386, "__sizeof__", #10405, "2") +#10406 = @"C_type$dict$2clear" +py_cobjects(#10406) +py_cobjecttypes(#10406, #10034) +py_cobject_sources(#10406, 0) +py_cobjectnames(#10406, "clear") +py_cmembers_versioned(#10386, "clear", #10406, "2") +#10407 = @"C_type$dict$2copy" +py_cobjects(#10407) +py_cobjecttypes(#10407, #10034) +py_cobject_sources(#10407, 0) +py_cobjectnames(#10407, "copy") +py_cmembers_versioned(#10386, "copy", #10407, "2") +#10408 = @"C_type$dict$2fromkeys" +py_cobjects(#10408) +py_cobjecttypes(#10408, #10169) +py_cobject_sources(#10408, 0) +py_cobjectnames(#10408, "fromkeys") +py_cmembers_versioned(#10386, "fromkeys", #10408, "2") +#10409 = @"C_type$dict$2get" +py_cobjects(#10409) +py_cobjecttypes(#10409, #10034) +py_cobject_sources(#10409, 0) +py_cobjectnames(#10409, "get") +py_cmembers_versioned(#10386, "get", #10409, "2") +#10410 = @"C_type$dict$2has_key" +py_cobjects(#10410) +py_cobjecttypes(#10410, #10034) +py_cobject_sources(#10410, 0) +py_cobjectnames(#10410, "has_key") +py_cmembers_versioned(#10386, "has_key", #10410, "2") +#10411 = @"C_type$dict$2items" +py_cobjects(#10411) +py_cobjecttypes(#10411, #10034) +py_cobject_sources(#10411, 0) +py_cobjectnames(#10411, "items") +py_cmembers_versioned(#10386, "items", #10411, "2") +#10412 = @"C_type$dict$2iteritems" +py_cobjects(#10412) +py_cobjecttypes(#10412, #10034) +py_cobject_sources(#10412, 0) +py_cobjectnames(#10412, "iteritems") +py_cmembers_versioned(#10386, "iteritems", #10412, "2") +#10413 = @"C_type$dict$2iterkeys" +py_cobjects(#10413) +py_cobjecttypes(#10413, #10034) +py_cobject_sources(#10413, 0) +py_cobjectnames(#10413, "iterkeys") +py_cmembers_versioned(#10386, "iterkeys", #10413, "2") +#10414 = @"C_type$dict$2itervalues" +py_cobjects(#10414) +py_cobjecttypes(#10414, #10034) +py_cobject_sources(#10414, 0) +py_cobjectnames(#10414, "itervalues") +py_cmembers_versioned(#10386, "itervalues", #10414, "2") +#10415 = @"C_type$dict$2keys" +py_cobjects(#10415) +py_cobjecttypes(#10415, #10034) +py_cobject_sources(#10415, 0) +py_cobjectnames(#10415, "keys") +py_cmembers_versioned(#10386, "keys", #10415, "2") +#10416 = @"C_type$dict$2pop" +py_cobjects(#10416) +py_cobjecttypes(#10416, #10034) +py_cobject_sources(#10416, 0) +py_cobjectnames(#10416, "pop") +py_cmembers_versioned(#10386, "pop", #10416, "2") +#10417 = @"C_type$dict$2popitem" +py_cobjects(#10417) +py_cobjecttypes(#10417, #10034) +py_cobject_sources(#10417, 0) +py_cobjectnames(#10417, "popitem") +py_cmembers_versioned(#10386, "popitem", #10417, "2") +#10418 = @"C_type$dict$2setdefault" +py_cobjects(#10418) +py_cobjecttypes(#10418, #10034) +py_cobject_sources(#10418, 0) +py_cobjectnames(#10418, "setdefault") +py_cmembers_versioned(#10386, "setdefault", #10418, "2") +#10419 = @"C_type$dict$2update" +py_cobjects(#10419) +py_cobjecttypes(#10419, #10034) +py_cobject_sources(#10419, 0) +py_cobjectnames(#10419, "update") +py_cmembers_versioned(#10386, "update", #10419, "2") +#10420 = @"C_type$dict$2values" +py_cobjects(#10420) +py_cobjecttypes(#10420, #10034) +py_cobject_sources(#10420, 0) +py_cobjectnames(#10420, "values") +py_cmembers_versioned(#10386, "values", #10420, "2") +#10421 = @"C_type$dict$2viewitems" +py_cobjects(#10421) +py_cobjecttypes(#10421, #10034) +py_cobject_sources(#10421, 0) +py_cobjectnames(#10421, "viewitems") +py_cmembers_versioned(#10386, "viewitems", #10421, "2") +#10422 = @"C_type$dict$2viewkeys" +py_cobjects(#10422) +py_cobjecttypes(#10422, #10034) +py_cobject_sources(#10422, 0) +py_cobjectnames(#10422, "viewkeys") +py_cmembers_versioned(#10386, "viewkeys", #10422, "2") +#10423 = @"C_type$dict$2viewvalues" +py_cobjects(#10423) +py_cobjecttypes(#10423, #10034) +py_cobject_sources(#10423, 0) +py_cobjectnames(#10423, "viewvalues") +py_cmembers_versioned(#10386, "viewvalues", #10423, "2") +py_cmembers_versioned(#10386, ".super.", #10021, "2") +py_cobjectnames(#10386, "dict") +py_special_objects(#10386, "dict") +#10424 = @"C_type$KeyError" +py_cobjects(#10424) +py_cobjecttypes(#10424, #10001) +py_cobject_sources(#10424, 0) +#10425 = @"C_bytes$1bf40bf04fb389deaff59b33a134bd476cbe9941" +py_cobjects(#10425) +py_cobjecttypes(#10425, #10028) +py_cobject_sources(#10425, 0) +py_cobjectnames(#10425, "b'Mapping key not found.'") +py_cmembers_versioned(#10424, "__doc__", #10425, "2") +#10426 = @"C_type$KeyError$2__init__" +py_cobjects(#10426) +py_cobjecttypes(#10426, #10005) +py_cobject_sources(#10426, 0) +py_cobjectnames(#10426, "__init__") +py_cmembers_versioned(#10424, "__init__", #10426, "2") +#10427 = @"C_type$KeyError$2__new__" +py_cobjects(#10427) +py_cobjecttypes(#10427, #10075) +py_cobject_sources(#10427, 0) +py_cobjectnames(#10427, "__new__") +py_cmembers_versioned(#10424, "__new__", #10427, "2") +#10428 = @"C_type$KeyError$2__str__" +py_cobjects(#10428) +py_cobjecttypes(#10428, #10005) +py_cobject_sources(#10428, 0) +py_cobjectnames(#10428, "__str__") +py_cmembers_versioned(#10424, "__str__", #10428, "2") +#10429 = @"C_type$LookupError" +py_cobjects(#10429) +py_cobjecttypes(#10429, #10001) +py_cobject_sources(#10429, 0) +#10430 = @"C_bytes$9f990a862570cd714fcc0cff7871930d3846fee2" +py_cobjects(#10430) +py_cobjecttypes(#10430, #10028) +py_cobject_sources(#10430, 0) +py_cobjectnames(#10430, "b'Base class for lookup errors.'") +py_cmembers_versioned(#10429, "__doc__", #10430, "2") +#10431 = @"C_type$LookupError$2__init__" +py_cobjects(#10431) +py_cobjecttypes(#10431, #10005) +py_cobject_sources(#10431, 0) +py_cobjectnames(#10431, "__init__") +py_cmembers_versioned(#10429, "__init__", #10431, "2") +#10432 = @"C_type$LookupError$2__new__" +py_cobjects(#10432) +py_cobjecttypes(#10432, #10075) +py_cobject_sources(#10432, 0) +py_cobjectnames(#10432, "__new__") +py_cmembers_versioned(#10429, "__new__", #10432, "2") +py_cmembers_versioned(#10429, ".super.", #10346, "2") +py_cobjectnames(#10429, "LookupError") +py_cmembers_versioned(#10424, ".super.", #10429, "2") +py_cobjectnames(#10424, "KeyError") +py_special_objects(#10424, "KeyError") +#10433 = @"C_type$AttributeError" +py_cobjects(#10433) +py_cobjecttypes(#10433, #10001) +py_cobject_sources(#10433, 0) +#10434 = @"C_bytes$764af14d0af6210240b10ad4ed1a62054153f7b3" +py_cobjects(#10434) +py_cobjecttypes(#10434, #10028) +py_cobject_sources(#10434, 0) +py_cobjectnames(#10434, "b'Attribute not found.'") +py_cmembers_versioned(#10433, "__doc__", #10434, "2") +#10435 = @"C_type$AttributeError$2__init__" +py_cobjects(#10435) +py_cobjecttypes(#10435, #10005) +py_cobject_sources(#10435, 0) +py_cobjectnames(#10435, "__init__") +py_cmembers_versioned(#10433, "__init__", #10435, "2") +#10436 = @"C_type$AttributeError$2__new__" +py_cobjects(#10436) +py_cobjecttypes(#10436, #10075) +py_cobject_sources(#10436, 0) +py_cobjectnames(#10436, "__new__") +py_cmembers_versioned(#10433, "__new__", #10436, "2") +py_cmembers_versioned(#10433, ".super.", #10346, "2") +py_cobjectnames(#10433, "AttributeError") +py_special_objects(#10433, "AttributeError") +py_special_objects(#10034, "MethodDescriptorType") +#10437 = @"C_bool$True" +#10438 = @"C_type$bool" +py_cobjects(#10438) +py_cobjecttypes(#10438, #10001) +py_cobject_sources(#10438, 0) +#10439 = @"C_type$bool$2__and__" +py_cobjects(#10439) +py_cobjecttypes(#10439, #10005) +py_cobject_sources(#10439, 0) +py_cobjectnames(#10439, "__and__") +py_cmembers_versioned(#10438, "__and__", #10439, "2") +#10440 = @"C_bytes$2aa545b06094da6ed43e51b4261838ea756ee783" +py_cobjects(#10440) +py_cobjecttypes(#10440, #10028) +py_cobject_sources(#10440, 0) +py_cobjectnames(#10440, "b'bool(x) -> bool + +Returns True when the argument x is true, False otherwise. +The builtins True and False are the only two instances of the class bool. +The class bool is a subclass of the class int, and cannot be subclassed.'") +py_cmembers_versioned(#10438, "__doc__", #10440, "2") +#10441 = @"C_type$bool$2__new__" +py_cobjects(#10441) +py_cobjecttypes(#10441, #10075) +py_cobject_sources(#10441, 0) +py_cobjectnames(#10441, "__new__") +py_cmembers_versioned(#10438, "__new__", #10441, "2") +#10442 = @"C_type$bool$2__or__" +py_cobjects(#10442) +py_cobjecttypes(#10442, #10005) +py_cobject_sources(#10442, 0) +py_cobjectnames(#10442, "__or__") +py_cmembers_versioned(#10438, "__or__", #10442, "2") +#10443 = @"C_type$bool$2__rand__" +py_cobjects(#10443) +py_cobjecttypes(#10443, #10005) +py_cobject_sources(#10443, 0) +py_cobjectnames(#10443, "__rand__") +py_cmembers_versioned(#10438, "__rand__", #10443, "2") +#10444 = @"C_type$bool$2__repr__" +py_cobjects(#10444) +py_cobjecttypes(#10444, #10005) +py_cobject_sources(#10444, 0) +py_cobjectnames(#10444, "__repr__") +py_cmembers_versioned(#10438, "__repr__", #10444, "2") +#10445 = @"C_type$bool$2__ror__" +py_cobjects(#10445) +py_cobjecttypes(#10445, #10005) +py_cobject_sources(#10445, 0) +py_cobjectnames(#10445, "__ror__") +py_cmembers_versioned(#10438, "__ror__", #10445, "2") +#10446 = @"C_type$bool$2__rxor__" +py_cobjects(#10446) +py_cobjecttypes(#10446, #10005) +py_cobject_sources(#10446, 0) +py_cobjectnames(#10446, "__rxor__") +py_cmembers_versioned(#10438, "__rxor__", #10446, "2") +#10447 = @"C_type$bool$2__str__" +py_cobjects(#10447) +py_cobjecttypes(#10447, #10005) +py_cobject_sources(#10447, 0) +py_cobjectnames(#10447, "__str__") +py_cmembers_versioned(#10438, "__str__", #10447, "2") +#10448 = @"C_type$bool$2__xor__" +py_cobjects(#10448) +py_cobjecttypes(#10448, #10005) +py_cobject_sources(#10448, 0) +py_cobjectnames(#10448, "__xor__") +py_cmembers_versioned(#10438, "__xor__", #10448, "2") +#10449 = @"C_type$int" +py_cobjects(#10449) +py_cobjecttypes(#10449, #10001) +py_cobject_sources(#10449, 0) +#10450 = @"C_type$int$2__abs__" +py_cobjects(#10450) +py_cobjecttypes(#10450, #10005) +py_cobject_sources(#10450, 0) +py_cobjectnames(#10450, "__abs__") +py_cmembers_versioned(#10449, "__abs__", #10450, "2") +#10451 = @"C_type$int$2__add__" +py_cobjects(#10451) +py_cobjecttypes(#10451, #10005) +py_cobject_sources(#10451, 0) +py_cobjectnames(#10451, "__add__") +py_cmembers_versioned(#10449, "__add__", #10451, "2") +#10452 = @"C_type$int$2__and__" +py_cobjects(#10452) +py_cobjecttypes(#10452, #10005) +py_cobject_sources(#10452, 0) +py_cobjectnames(#10452, "__and__") +py_cmembers_versioned(#10449, "__and__", #10452, "2") +#10453 = @"C_type$int$2__cmp__" +py_cobjects(#10453) +py_cobjecttypes(#10453, #10005) +py_cobject_sources(#10453, 0) +py_cobjectnames(#10453, "__cmp__") +py_cmembers_versioned(#10449, "__cmp__", #10453, "2") +#10454 = @"C_type$int$2__coerce__" +py_cobjects(#10454) +py_cobjecttypes(#10454, #10005) +py_cobject_sources(#10454, 0) +py_cobjectnames(#10454, "__coerce__") +py_cmembers_versioned(#10449, "__coerce__", #10454, "2") +#10455 = @"C_type$int$2__div__" +py_cobjects(#10455) +py_cobjecttypes(#10455, #10005) +py_cobject_sources(#10455, 0) +py_cobjectnames(#10455, "__div__") +py_cmembers_versioned(#10449, "__div__", #10455, "2") +#10456 = @"C_type$int$2__divmod__" +py_cobjects(#10456) +py_cobjecttypes(#10456, #10005) +py_cobject_sources(#10456, 0) +py_cobjectnames(#10456, "__divmod__") +py_cmembers_versioned(#10449, "__divmod__", #10456, "2") +#10457 = @"C_bytes$ae429bd9441797e46a500607a0749fd432c18680" +py_cobjects(#10457) +py_cobjecttypes(#10457, #10028) +py_cobject_sources(#10457, 0) +py_cobjectnames(#10457, "b'int(x=0) -> int or long +int(x, base=10) -> int or long + +Convert a number or string to an integer, or return 0 if no arguments +are given. If x is floating point, the conversion truncates towards zero. +If x is outside the integer range, the function returns a long instead. + +If x is not a number or if base is given, then x must be a string or +Unicode object representing an integer literal in the given base. The +literal can be preceded by '+' or '-' and be surrounded by whitespace. +The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to +interpret the base from the string as an integer literal. +>>> int('0b100', base=0) +4'") +py_cmembers_versioned(#10449, "__doc__", #10457, "2") +#10458 = @"C_type$int$2__float__" +py_cobjects(#10458) +py_cobjecttypes(#10458, #10005) +py_cobject_sources(#10458, 0) +py_cobjectnames(#10458, "__float__") +py_cmembers_versioned(#10449, "__float__", #10458, "2") +#10459 = @"C_type$int$2__floordiv__" +py_cobjects(#10459) +py_cobjecttypes(#10459, #10005) +py_cobject_sources(#10459, 0) +py_cobjectnames(#10459, "__floordiv__") +py_cmembers_versioned(#10449, "__floordiv__", #10459, "2") +#10460 = @"C_type$int$2__format__" +py_cobjects(#10460) +py_cobjecttypes(#10460, #10034) +py_cobject_sources(#10460, 0) +py_cobjectnames(#10460, "__format__") +py_cmembers_versioned(#10449, "__format__", #10460, "2") +#10461 = @"C_type$int$2__getattribute__" +py_cobjects(#10461) +py_cobjecttypes(#10461, #10005) +py_cobject_sources(#10461, 0) +py_cobjectnames(#10461, "__getattribute__") +py_cmembers_versioned(#10449, "__getattribute__", #10461, "2") +#10462 = @"C_type$int$2__getnewargs__" +py_cobjects(#10462) +py_cobjecttypes(#10462, #10034) +py_cobject_sources(#10462, 0) +py_cobjectnames(#10462, "__getnewargs__") +py_cmembers_versioned(#10449, "__getnewargs__", #10462, "2") +#10463 = @"C_type$int$2__hash__" +py_cobjects(#10463) +py_cobjecttypes(#10463, #10005) +py_cobject_sources(#10463, 0) +py_cobjectnames(#10463, "__hash__") +py_cmembers_versioned(#10449, "__hash__", #10463, "2") +#10464 = @"C_type$int$2__hex__" +py_cobjects(#10464) +py_cobjecttypes(#10464, #10005) +py_cobject_sources(#10464, 0) +py_cobjectnames(#10464, "__hex__") +py_cmembers_versioned(#10449, "__hex__", #10464, "2") +#10465 = @"C_type$int$2__index__" +py_cobjects(#10465) +py_cobjecttypes(#10465, #10005) +py_cobject_sources(#10465, 0) +py_cobjectnames(#10465, "__index__") +py_cmembers_versioned(#10449, "__index__", #10465, "2") +#10466 = @"C_type$int$2__int__" +py_cobjects(#10466) +py_cobjecttypes(#10466, #10005) +py_cobject_sources(#10466, 0) +py_cobjectnames(#10466, "__int__") +py_cmembers_versioned(#10449, "__int__", #10466, "2") +#10467 = @"C_type$int$2__invert__" +py_cobjects(#10467) +py_cobjecttypes(#10467, #10005) +py_cobject_sources(#10467, 0) +py_cobjectnames(#10467, "__invert__") +py_cmembers_versioned(#10449, "__invert__", #10467, "2") +#10468 = @"C_type$int$2__long__" +py_cobjects(#10468) +py_cobjecttypes(#10468, #10005) +py_cobject_sources(#10468, 0) +py_cobjectnames(#10468, "__long__") +py_cmembers_versioned(#10449, "__long__", #10468, "2") +#10469 = @"C_type$int$2__lshift__" +py_cobjects(#10469) +py_cobjecttypes(#10469, #10005) +py_cobject_sources(#10469, 0) +py_cobjectnames(#10469, "__lshift__") +py_cmembers_versioned(#10449, "__lshift__", #10469, "2") +#10470 = @"C_type$int$2__mod__" +py_cobjects(#10470) +py_cobjecttypes(#10470, #10005) +py_cobject_sources(#10470, 0) +py_cobjectnames(#10470, "__mod__") +py_cmembers_versioned(#10449, "__mod__", #10470, "2") +#10471 = @"C_type$int$2__mul__" +py_cobjects(#10471) +py_cobjecttypes(#10471, #10005) +py_cobject_sources(#10471, 0) +py_cobjectnames(#10471, "__mul__") +py_cmembers_versioned(#10449, "__mul__", #10471, "2") +#10472 = @"C_type$int$2__neg__" +py_cobjects(#10472) +py_cobjecttypes(#10472, #10005) +py_cobject_sources(#10472, 0) +py_cobjectnames(#10472, "__neg__") +py_cmembers_versioned(#10449, "__neg__", #10472, "2") +#10473 = @"C_type$int$2__new__" +py_cobjects(#10473) +py_cobjecttypes(#10473, #10075) +py_cobject_sources(#10473, 0) +py_cobjectnames(#10473, "__new__") +py_cmembers_versioned(#10449, "__new__", #10473, "2") +#10474 = @"C_type$int$2__nonzero__" +py_cobjects(#10474) +py_cobjecttypes(#10474, #10005) +py_cobject_sources(#10474, 0) +py_cobjectnames(#10474, "__nonzero__") +py_cmembers_versioned(#10449, "__nonzero__", #10474, "2") +#10475 = @"C_type$int$2__oct__" +py_cobjects(#10475) +py_cobjecttypes(#10475, #10005) +py_cobject_sources(#10475, 0) +py_cobjectnames(#10475, "__oct__") +py_cmembers_versioned(#10449, "__oct__", #10475, "2") +#10476 = @"C_type$int$2__or__" +py_cobjects(#10476) +py_cobjecttypes(#10476, #10005) +py_cobject_sources(#10476, 0) +py_cobjectnames(#10476, "__or__") +py_cmembers_versioned(#10449, "__or__", #10476, "2") +#10477 = @"C_type$int$2__pos__" +py_cobjects(#10477) +py_cobjecttypes(#10477, #10005) +py_cobject_sources(#10477, 0) +py_cobjectnames(#10477, "__pos__") +py_cmembers_versioned(#10449, "__pos__", #10477, "2") +#10478 = @"C_type$int$2__pow__" +py_cobjects(#10478) +py_cobjecttypes(#10478, #10005) +py_cobject_sources(#10478, 0) +py_cobjectnames(#10478, "__pow__") +py_cmembers_versioned(#10449, "__pow__", #10478, "2") +#10479 = @"C_type$int$2__radd__" +py_cobjects(#10479) +py_cobjecttypes(#10479, #10005) +py_cobject_sources(#10479, 0) +py_cobjectnames(#10479, "__radd__") +py_cmembers_versioned(#10449, "__radd__", #10479, "2") +#10480 = @"C_type$int$2__rand__" +py_cobjects(#10480) +py_cobjecttypes(#10480, #10005) +py_cobject_sources(#10480, 0) +py_cobjectnames(#10480, "__rand__") +py_cmembers_versioned(#10449, "__rand__", #10480, "2") +#10481 = @"C_type$int$2__rdiv__" +py_cobjects(#10481) +py_cobjecttypes(#10481, #10005) +py_cobject_sources(#10481, 0) +py_cobjectnames(#10481, "__rdiv__") +py_cmembers_versioned(#10449, "__rdiv__", #10481, "2") +#10482 = @"C_type$int$2__rdivmod__" +py_cobjects(#10482) +py_cobjecttypes(#10482, #10005) +py_cobject_sources(#10482, 0) +py_cobjectnames(#10482, "__rdivmod__") +py_cmembers_versioned(#10449, "__rdivmod__", #10482, "2") +#10483 = @"C_type$int$2__repr__" +py_cobjects(#10483) +py_cobjecttypes(#10483, #10005) +py_cobject_sources(#10483, 0) +py_cobjectnames(#10483, "__repr__") +py_cmembers_versioned(#10449, "__repr__", #10483, "2") +#10484 = @"C_type$int$2__rfloordiv__" +py_cobjects(#10484) +py_cobjecttypes(#10484, #10005) +py_cobject_sources(#10484, 0) +py_cobjectnames(#10484, "__rfloordiv__") +py_cmembers_versioned(#10449, "__rfloordiv__", #10484, "2") +#10485 = @"C_type$int$2__rlshift__" +py_cobjects(#10485) +py_cobjecttypes(#10485, #10005) +py_cobject_sources(#10485, 0) +py_cobjectnames(#10485, "__rlshift__") +py_cmembers_versioned(#10449, "__rlshift__", #10485, "2") +#10486 = @"C_type$int$2__rmod__" +py_cobjects(#10486) +py_cobjecttypes(#10486, #10005) +py_cobject_sources(#10486, 0) +py_cobjectnames(#10486, "__rmod__") +py_cmembers_versioned(#10449, "__rmod__", #10486, "2") +#10487 = @"C_type$int$2__rmul__" +py_cobjects(#10487) +py_cobjecttypes(#10487, #10005) +py_cobject_sources(#10487, 0) +py_cobjectnames(#10487, "__rmul__") +py_cmembers_versioned(#10449, "__rmul__", #10487, "2") +#10488 = @"C_type$int$2__ror__" +py_cobjects(#10488) +py_cobjecttypes(#10488, #10005) +py_cobject_sources(#10488, 0) +py_cobjectnames(#10488, "__ror__") +py_cmembers_versioned(#10449, "__ror__", #10488, "2") +#10489 = @"C_type$int$2__rpow__" +py_cobjects(#10489) +py_cobjecttypes(#10489, #10005) +py_cobject_sources(#10489, 0) +py_cobjectnames(#10489, "__rpow__") +py_cmembers_versioned(#10449, "__rpow__", #10489, "2") +#10490 = @"C_type$int$2__rrshift__" +py_cobjects(#10490) +py_cobjecttypes(#10490, #10005) +py_cobject_sources(#10490, 0) +py_cobjectnames(#10490, "__rrshift__") +py_cmembers_versioned(#10449, "__rrshift__", #10490, "2") +#10491 = @"C_type$int$2__rshift__" +py_cobjects(#10491) +py_cobjecttypes(#10491, #10005) +py_cobject_sources(#10491, 0) +py_cobjectnames(#10491, "__rshift__") +py_cmembers_versioned(#10449, "__rshift__", #10491, "2") +#10492 = @"C_type$int$2__rsub__" +py_cobjects(#10492) +py_cobjecttypes(#10492, #10005) +py_cobject_sources(#10492, 0) +py_cobjectnames(#10492, "__rsub__") +py_cmembers_versioned(#10449, "__rsub__", #10492, "2") +#10493 = @"C_type$int$2__rtruediv__" +py_cobjects(#10493) +py_cobjecttypes(#10493, #10005) +py_cobject_sources(#10493, 0) +py_cobjectnames(#10493, "__rtruediv__") +py_cmembers_versioned(#10449, "__rtruediv__", #10493, "2") +#10494 = @"C_type$int$2__rxor__" +py_cobjects(#10494) +py_cobjecttypes(#10494, #10005) +py_cobject_sources(#10494, 0) +py_cobjectnames(#10494, "__rxor__") +py_cmembers_versioned(#10449, "__rxor__", #10494, "2") +#10495 = @"C_type$int$2__str__" +py_cobjects(#10495) +py_cobjecttypes(#10495, #10005) +py_cobject_sources(#10495, 0) +py_cobjectnames(#10495, "__str__") +py_cmembers_versioned(#10449, "__str__", #10495, "2") +#10496 = @"C_type$int$2__sub__" +py_cobjects(#10496) +py_cobjecttypes(#10496, #10005) +py_cobject_sources(#10496, 0) +py_cobjectnames(#10496, "__sub__") +py_cmembers_versioned(#10449, "__sub__", #10496, "2") +#10497 = @"C_type$int$2__truediv__" +py_cobjects(#10497) +py_cobjecttypes(#10497, #10005) +py_cobject_sources(#10497, 0) +py_cobjectnames(#10497, "__truediv__") +py_cmembers_versioned(#10449, "__truediv__", #10497, "2") +#10498 = @"C_type$int$2__trunc__" +py_cobjects(#10498) +py_cobjecttypes(#10498, #10034) +py_cobject_sources(#10498, 0) +py_cobjectnames(#10498, "__trunc__") +py_cmembers_versioned(#10449, "__trunc__", #10498, "2") +#10499 = @"C_type$int$2__xor__" +py_cobjects(#10499) +py_cobjecttypes(#10499, #10005) +py_cobject_sources(#10499, 0) +py_cobjectnames(#10499, "__xor__") +py_cmembers_versioned(#10449, "__xor__", #10499, "2") +#10500 = @"C_type$int$2bit_length" +py_cobjects(#10500) +py_cobjecttypes(#10500, #10034) +py_cobject_sources(#10500, 0) +py_cobjectnames(#10500, "bit_length") +py_cmembers_versioned(#10449, "bit_length", #10500, "2") +#10501 = @"C_type$int$2conjugate" +py_cobjects(#10501) +py_cobjecttypes(#10501, #10034) +py_cobject_sources(#10501, 0) +py_cobjectnames(#10501, "conjugate") +py_cmembers_versioned(#10449, "conjugate", #10501, "2") +#10502 = @"C_type$int$2denominator" +py_cobjects(#10502) +py_cobjecttypes(#10502, #10003) +py_cobject_sources(#10502, 0) +#10503 = @"C_type$int$2denominator$2__set__" +py_cobjects(#10503) +py_cobjecttypes(#10503, #10009) +py_cobject_sources(#10503, 0) +py_cobjectnames(#10503, "__set__") +py_cmembers_versioned(#10502, "__set__", #10503, "2") +#10504 = @"C_type$int$2denominator$2__getattribute__" +py_cobjects(#10504) +py_cobjecttypes(#10504, #10009) +py_cobject_sources(#10504, 0) +py_cobjectnames(#10504, "__getattribute__") +py_cmembers_versioned(#10502, "__getattribute__", #10504, "2") +py_cmembers_versioned(#10502, "__objclass__", #10449, "2") +#10505 = @"C_type$int$2denominator$2__repr__" +py_cobjects(#10505) +py_cobjecttypes(#10505, #10009) +py_cobject_sources(#10505, 0) +py_cobjectnames(#10505, "__repr__") +py_cmembers_versioned(#10502, "__repr__", #10505, "2") +#10506 = @"C_type$int$2denominator$2__get__" +py_cobjects(#10506) +py_cobjecttypes(#10506, #10009) +py_cobject_sources(#10506, 0) +py_cobjectnames(#10506, "__get__") +py_cmembers_versioned(#10502, "__get__", #10506, "2") +#10507 = @"C_bytes$d787ec075c36417b3622538483449d06564bf83c" +py_cobjects(#10507) +py_cobjecttypes(#10507, #10028) +py_cobject_sources(#10507, 0) +py_cobjectnames(#10507, "b'the denominator of a rational number in lowest terms'") +py_cmembers_versioned(#10502, "__doc__", #10507, "2") +#10508 = @"C_type$int$2denominator$2__delete__" +py_cobjects(#10508) +py_cobjecttypes(#10508, #10009) +py_cobject_sources(#10508, 0) +py_cobjectnames(#10508, "__delete__") +py_cmembers_versioned(#10502, "__delete__", #10508, "2") +py_cobjectnames(#10502, "denominator") +py_cmembers_versioned(#10449, "denominator", #10502, "2") +#10509 = @"C_type$int$2imag" +py_cobjects(#10509) +py_cobjecttypes(#10509, #10003) +py_cobject_sources(#10509, 0) +#10510 = @"C_type$int$2imag$2__set__" +py_cobjects(#10510) +py_cobjecttypes(#10510, #10009) +py_cobject_sources(#10510, 0) +py_cobjectnames(#10510, "__set__") +py_cmembers_versioned(#10509, "__set__", #10510, "2") +#10511 = @"C_type$int$2imag$2__getattribute__" +py_cobjects(#10511) +py_cobjecttypes(#10511, #10009) +py_cobject_sources(#10511, 0) +py_cobjectnames(#10511, "__getattribute__") +py_cmembers_versioned(#10509, "__getattribute__", #10511, "2") +py_cmembers_versioned(#10509, "__objclass__", #10449, "2") +#10512 = @"C_type$int$2imag$2__repr__" +py_cobjects(#10512) +py_cobjecttypes(#10512, #10009) +py_cobject_sources(#10512, 0) +py_cobjectnames(#10512, "__repr__") +py_cmembers_versioned(#10509, "__repr__", #10512, "2") +#10513 = @"C_type$int$2imag$2__get__" +py_cobjects(#10513) +py_cobjecttypes(#10513, #10009) +py_cobject_sources(#10513, 0) +py_cobjectnames(#10513, "__get__") +py_cmembers_versioned(#10509, "__get__", #10513, "2") +#10514 = @"C_bytes$1697c2b9b4c10d325b12cf3fded2fbfc0e15d5f0" +py_cobjects(#10514) +py_cobjecttypes(#10514, #10028) +py_cobject_sources(#10514, 0) +py_cobjectnames(#10514, "b'the imaginary part of a complex number'") +py_cmembers_versioned(#10509, "__doc__", #10514, "2") +#10515 = @"C_type$int$2imag$2__delete__" +py_cobjects(#10515) +py_cobjecttypes(#10515, #10009) +py_cobject_sources(#10515, 0) +py_cobjectnames(#10515, "__delete__") +py_cmembers_versioned(#10509, "__delete__", #10515, "2") +py_cobjectnames(#10509, "imag") +py_cmembers_versioned(#10449, "imag", #10509, "2") +#10516 = @"C_type$int$2numerator" +py_cobjects(#10516) +py_cobjecttypes(#10516, #10003) +py_cobject_sources(#10516, 0) +#10517 = @"C_type$int$2numerator$2__set__" +py_cobjects(#10517) +py_cobjecttypes(#10517, #10009) +py_cobject_sources(#10517, 0) +py_cobjectnames(#10517, "__set__") +py_cmembers_versioned(#10516, "__set__", #10517, "2") +#10518 = @"C_type$int$2numerator$2__getattribute__" +py_cobjects(#10518) +py_cobjecttypes(#10518, #10009) +py_cobject_sources(#10518, 0) +py_cobjectnames(#10518, "__getattribute__") +py_cmembers_versioned(#10516, "__getattribute__", #10518, "2") +py_cmembers_versioned(#10516, "__objclass__", #10449, "2") +#10519 = @"C_type$int$2numerator$2__repr__" +py_cobjects(#10519) +py_cobjecttypes(#10519, #10009) +py_cobject_sources(#10519, 0) +py_cobjectnames(#10519, "__repr__") +py_cmembers_versioned(#10516, "__repr__", #10519, "2") +#10520 = @"C_type$int$2numerator$2__get__" +py_cobjects(#10520) +py_cobjecttypes(#10520, #10009) +py_cobject_sources(#10520, 0) +py_cobjectnames(#10520, "__get__") +py_cmembers_versioned(#10516, "__get__", #10520, "2") +#10521 = @"C_bytes$b003a2de50c1e2b9c0432a073236cd9864f791cb" +py_cobjects(#10521) +py_cobjecttypes(#10521, #10028) +py_cobject_sources(#10521, 0) +py_cobjectnames(#10521, "b'the numerator of a rational number in lowest terms'") +py_cmembers_versioned(#10516, "__doc__", #10521, "2") +#10522 = @"C_type$int$2numerator$2__delete__" +py_cobjects(#10522) +py_cobjecttypes(#10522, #10009) +py_cobject_sources(#10522, 0) +py_cobjectnames(#10522, "__delete__") +py_cmembers_versioned(#10516, "__delete__", #10522, "2") +py_cobjectnames(#10516, "numerator") +py_cmembers_versioned(#10449, "numerator", #10516, "2") +#10523 = @"C_type$int$2real" +py_cobjects(#10523) +py_cobjecttypes(#10523, #10003) +py_cobject_sources(#10523, 0) +#10524 = @"C_type$int$2real$2__set__" +py_cobjects(#10524) +py_cobjecttypes(#10524, #10009) +py_cobject_sources(#10524, 0) +py_cobjectnames(#10524, "__set__") +py_cmembers_versioned(#10523, "__set__", #10524, "2") +#10525 = @"C_type$int$2real$2__getattribute__" +py_cobjects(#10525) +py_cobjecttypes(#10525, #10009) +py_cobject_sources(#10525, 0) +py_cobjectnames(#10525, "__getattribute__") +py_cmembers_versioned(#10523, "__getattribute__", #10525, "2") +py_cmembers_versioned(#10523, "__objclass__", #10449, "2") +#10526 = @"C_type$int$2real$2__repr__" +py_cobjects(#10526) +py_cobjecttypes(#10526, #10009) +py_cobject_sources(#10526, 0) +py_cobjectnames(#10526, "__repr__") +py_cmembers_versioned(#10523, "__repr__", #10526, "2") +#10527 = @"C_type$int$2real$2__get__" +py_cobjects(#10527) +py_cobjecttypes(#10527, #10009) +py_cobject_sources(#10527, 0) +py_cobjectnames(#10527, "__get__") +py_cmembers_versioned(#10523, "__get__", #10527, "2") +#10528 = @"C_bytes$2cb527e0bacedb07e674d6e9890d3d2ab1a8f487" +py_cobjects(#10528) +py_cobjecttypes(#10528, #10028) +py_cobject_sources(#10528, 0) +py_cobjectnames(#10528, "b'the real part of a complex number'") +py_cmembers_versioned(#10523, "__doc__", #10528, "2") +#10529 = @"C_type$int$2real$2__delete__" +py_cobjects(#10529) +py_cobjecttypes(#10529, #10009) +py_cobject_sources(#10529, 0) +py_cobjectnames(#10529, "__delete__") +py_cmembers_versioned(#10523, "__delete__", #10529, "2") +py_cobjectnames(#10523, "real") +py_cmembers_versioned(#10449, "real", #10523, "2") +py_cmembers_versioned(#10449, ".super.", #10021, "2") +py_cobjectnames(#10449, "int") +py_cmembers_versioned(#10438, ".super.", #10449, "2") +py_cobjectnames(#10438, "bool") +py_cobjects(#10437) +py_cobjecttypes(#10437, #10438) +py_cobject_sources(#10437, 0) +py_cobjectnames(#10437, "True") +py_special_objects(#10437, "True") +#10530 = @"C_builtin_function_or_method$builtins.globals" +py_cobjects(#10530) +py_cobjecttypes(#10530, #10075) +py_cobject_sources(#10530, 0) +py_cobjectnames(#10530, "globals") +py_special_objects(#10530, "globals") +#10531 = * +py_cobjects(#10531) +py_cobjecttypes(#10531, #10021) +py_cobject_sources(#10531, 0) +py_cobjectnames(#10531, "object") +py_special_objects(#10531, "_1") +#10532 = @"C_type$instance" +py_cobjects(#10532) +py_cobjecttypes(#10532, #10001) +py_cobject_sources(#10532, 0) +#10533 = @"C_type$instance$2__abs__" +py_cobjects(#10533) +py_cobjecttypes(#10533, #10005) +py_cobject_sources(#10533, 0) +py_cobjectnames(#10533, "__abs__") +py_cmembers_versioned(#10532, "__abs__", #10533, "2") +#10534 = @"C_type$instance$2__add__" +py_cobjects(#10534) +py_cobjecttypes(#10534, #10005) +py_cobject_sources(#10534, 0) +py_cobjectnames(#10534, "__add__") +py_cmembers_versioned(#10532, "__add__", #10534, "2") +#10535 = @"C_type$instance$2__and__" +py_cobjects(#10535) +py_cobjecttypes(#10535, #10005) +py_cobject_sources(#10535, 0) +py_cobjectnames(#10535, "__and__") +py_cmembers_versioned(#10532, "__and__", #10535, "2") +#10536 = @"C_type$instance$2__call__" +py_cobjects(#10536) +py_cobjecttypes(#10536, #10005) +py_cobject_sources(#10536, 0) +py_cobjectnames(#10536, "__call__") +py_cmembers_versioned(#10532, "__call__", #10536, "2") +#10537 = @"C_type$instance$2__cmp__" +py_cobjects(#10537) +py_cobjecttypes(#10537, #10005) +py_cobject_sources(#10537, 0) +py_cobjectnames(#10537, "__cmp__") +py_cmembers_versioned(#10532, "__cmp__", #10537, "2") +#10538 = @"C_type$instance$2__coerce__" +py_cobjects(#10538) +py_cobjecttypes(#10538, #10005) +py_cobject_sources(#10538, 0) +py_cobjectnames(#10538, "__coerce__") +py_cmembers_versioned(#10532, "__coerce__", #10538, "2") +#10539 = @"C_type$instance$2__contains__" +py_cobjects(#10539) +py_cobjecttypes(#10539, #10005) +py_cobject_sources(#10539, 0) +py_cobjectnames(#10539, "__contains__") +py_cmembers_versioned(#10532, "__contains__", #10539, "2") +#10540 = @"C_type$instance$2__delattr__" +py_cobjects(#10540) +py_cobjecttypes(#10540, #10005) +py_cobject_sources(#10540, 0) +py_cobjectnames(#10540, "__delattr__") +py_cmembers_versioned(#10532, "__delattr__", #10540, "2") +#10541 = @"C_type$instance$2__delitem__" +py_cobjects(#10541) +py_cobjecttypes(#10541, #10005) +py_cobject_sources(#10541, 0) +py_cobjectnames(#10541, "__delitem__") +py_cmembers_versioned(#10532, "__delitem__", #10541, "2") +#10542 = @"C_type$instance$2__delslice__" +py_cobjects(#10542) +py_cobjecttypes(#10542, #10005) +py_cobject_sources(#10542, 0) +py_cobjectnames(#10542, "__delslice__") +py_cmembers_versioned(#10532, "__delslice__", #10542, "2") +#10543 = @"C_type$instance$2__div__" +py_cobjects(#10543) +py_cobjecttypes(#10543, #10005) +py_cobject_sources(#10543, 0) +py_cobjectnames(#10543, "__div__") +py_cmembers_versioned(#10532, "__div__", #10543, "2") +#10544 = @"C_type$instance$2__divmod__" +py_cobjects(#10544) +py_cobjecttypes(#10544, #10005) +py_cobject_sources(#10544, 0) +py_cobjectnames(#10544, "__divmod__") +py_cmembers_versioned(#10532, "__divmod__", #10544, "2") +#10545 = @"C_bytes$9c8127711d14f46b4bc2a45fb22ab796798f3915" +py_cobjects(#10545) +py_cobjecttypes(#10545, #10028) +py_cobject_sources(#10545, 0) +py_cobjectnames(#10545, "b'instance(class[, dict]) + +Create an instance without calling its __init__() method. +The class must be a classic class. +If present, dict must be a dictionary or None.'") +py_cmembers_versioned(#10532, "__doc__", #10545, "2") +#10546 = @"C_type$instance$2__eq__" +py_cobjects(#10546) +py_cobjecttypes(#10546, #10005) +py_cobject_sources(#10546, 0) +py_cobjectnames(#10546, "__eq__") +py_cmembers_versioned(#10532, "__eq__", #10546, "2") +#10547 = @"C_type$instance$2__float__" +py_cobjects(#10547) +py_cobjecttypes(#10547, #10005) +py_cobject_sources(#10547, 0) +py_cobjectnames(#10547, "__float__") +py_cmembers_versioned(#10532, "__float__", #10547, "2") +#10548 = @"C_type$instance$2__floordiv__" +py_cobjects(#10548) +py_cobjecttypes(#10548, #10005) +py_cobject_sources(#10548, 0) +py_cobjectnames(#10548, "__floordiv__") +py_cmembers_versioned(#10532, "__floordiv__", #10548, "2") +#10549 = @"C_type$instance$2__ge__" +py_cobjects(#10549) +py_cobjecttypes(#10549, #10005) +py_cobject_sources(#10549, 0) +py_cobjectnames(#10549, "__ge__") +py_cmembers_versioned(#10532, "__ge__", #10549, "2") +#10550 = @"C_type$instance$2__getattribute__" +py_cobjects(#10550) +py_cobjecttypes(#10550, #10005) +py_cobject_sources(#10550, 0) +py_cobjectnames(#10550, "__getattribute__") +py_cmembers_versioned(#10532, "__getattribute__", #10550, "2") +#10551 = @"C_type$instance$2__getitem__" +py_cobjects(#10551) +py_cobjecttypes(#10551, #10005) +py_cobject_sources(#10551, 0) +py_cobjectnames(#10551, "__getitem__") +py_cmembers_versioned(#10532, "__getitem__", #10551, "2") +#10552 = @"C_type$instance$2__getslice__" +py_cobjects(#10552) +py_cobjecttypes(#10552, #10005) +py_cobject_sources(#10552, 0) +py_cobjectnames(#10552, "__getslice__") +py_cmembers_versioned(#10532, "__getslice__", #10552, "2") +#10553 = @"C_type$instance$2__gt__" +py_cobjects(#10553) +py_cobjecttypes(#10553, #10005) +py_cobject_sources(#10553, 0) +py_cobjectnames(#10553, "__gt__") +py_cmembers_versioned(#10532, "__gt__", #10553, "2") +#10554 = @"C_type$instance$2__hash__" +py_cobjects(#10554) +py_cobjecttypes(#10554, #10005) +py_cobject_sources(#10554, 0) +py_cobjectnames(#10554, "__hash__") +py_cmembers_versioned(#10532, "__hash__", #10554, "2") +#10555 = @"C_type$instance$2__hex__" +py_cobjects(#10555) +py_cobjecttypes(#10555, #10005) +py_cobject_sources(#10555, 0) +py_cobjectnames(#10555, "__hex__") +py_cmembers_versioned(#10532, "__hex__", #10555, "2") +#10556 = @"C_type$instance$2__iadd__" +py_cobjects(#10556) +py_cobjecttypes(#10556, #10005) +py_cobject_sources(#10556, 0) +py_cobjectnames(#10556, "__iadd__") +py_cmembers_versioned(#10532, "__iadd__", #10556, "2") +#10557 = @"C_type$instance$2__iand__" +py_cobjects(#10557) +py_cobjecttypes(#10557, #10005) +py_cobject_sources(#10557, 0) +py_cobjectnames(#10557, "__iand__") +py_cmembers_versioned(#10532, "__iand__", #10557, "2") +#10558 = @"C_type$instance$2__idiv__" +py_cobjects(#10558) +py_cobjecttypes(#10558, #10005) +py_cobject_sources(#10558, 0) +py_cobjectnames(#10558, "__idiv__") +py_cmembers_versioned(#10532, "__idiv__", #10558, "2") +#10559 = @"C_type$instance$2__ifloordiv__" +py_cobjects(#10559) +py_cobjecttypes(#10559, #10005) +py_cobject_sources(#10559, 0) +py_cobjectnames(#10559, "__ifloordiv__") +py_cmembers_versioned(#10532, "__ifloordiv__", #10559, "2") +#10560 = @"C_type$instance$2__ilshift__" +py_cobjects(#10560) +py_cobjecttypes(#10560, #10005) +py_cobject_sources(#10560, 0) +py_cobjectnames(#10560, "__ilshift__") +py_cmembers_versioned(#10532, "__ilshift__", #10560, "2") +#10561 = @"C_type$instance$2__imod__" +py_cobjects(#10561) +py_cobjecttypes(#10561, #10005) +py_cobject_sources(#10561, 0) +py_cobjectnames(#10561, "__imod__") +py_cmembers_versioned(#10532, "__imod__", #10561, "2") +#10562 = @"C_type$instance$2__imul__" +py_cobjects(#10562) +py_cobjecttypes(#10562, #10005) +py_cobject_sources(#10562, 0) +py_cobjectnames(#10562, "__imul__") +py_cmembers_versioned(#10532, "__imul__", #10562, "2") +#10563 = @"C_type$instance$2__index__" +py_cobjects(#10563) +py_cobjecttypes(#10563, #10005) +py_cobject_sources(#10563, 0) +py_cobjectnames(#10563, "__index__") +py_cmembers_versioned(#10532, "__index__", #10563, "2") +#10564 = @"C_type$instance$2__int__" +py_cobjects(#10564) +py_cobjecttypes(#10564, #10005) +py_cobject_sources(#10564, 0) +py_cobjectnames(#10564, "__int__") +py_cmembers_versioned(#10532, "__int__", #10564, "2") +#10565 = @"C_type$instance$2__invert__" +py_cobjects(#10565) +py_cobjecttypes(#10565, #10005) +py_cobject_sources(#10565, 0) +py_cobjectnames(#10565, "__invert__") +py_cmembers_versioned(#10532, "__invert__", #10565, "2") +#10566 = @"C_type$instance$2__ior__" +py_cobjects(#10566) +py_cobjecttypes(#10566, #10005) +py_cobject_sources(#10566, 0) +py_cobjectnames(#10566, "__ior__") +py_cmembers_versioned(#10532, "__ior__", #10566, "2") +#10567 = @"C_type$instance$2__ipow__" +py_cobjects(#10567) +py_cobjecttypes(#10567, #10005) +py_cobject_sources(#10567, 0) +py_cobjectnames(#10567, "__ipow__") +py_cmembers_versioned(#10532, "__ipow__", #10567, "2") +#10568 = @"C_type$instance$2__irshift__" +py_cobjects(#10568) +py_cobjecttypes(#10568, #10005) +py_cobject_sources(#10568, 0) +py_cobjectnames(#10568, "__irshift__") +py_cmembers_versioned(#10532, "__irshift__", #10568, "2") +#10569 = @"C_type$instance$2__isub__" +py_cobjects(#10569) +py_cobjecttypes(#10569, #10005) +py_cobject_sources(#10569, 0) +py_cobjectnames(#10569, "__isub__") +py_cmembers_versioned(#10532, "__isub__", #10569, "2") +#10570 = @"C_type$instance$2__iter__" +py_cobjects(#10570) +py_cobjecttypes(#10570, #10005) +py_cobject_sources(#10570, 0) +py_cobjectnames(#10570, "__iter__") +py_cmembers_versioned(#10532, "__iter__", #10570, "2") +#10571 = @"C_type$instance$2__itruediv__" +py_cobjects(#10571) +py_cobjecttypes(#10571, #10005) +py_cobject_sources(#10571, 0) +py_cobjectnames(#10571, "__itruediv__") +py_cmembers_versioned(#10532, "__itruediv__", #10571, "2") +#10572 = @"C_type$instance$2__ixor__" +py_cobjects(#10572) +py_cobjecttypes(#10572, #10005) +py_cobject_sources(#10572, 0) +py_cobjectnames(#10572, "__ixor__") +py_cmembers_versioned(#10532, "__ixor__", #10572, "2") +#10573 = @"C_type$instance$2__le__" +py_cobjects(#10573) +py_cobjecttypes(#10573, #10005) +py_cobject_sources(#10573, 0) +py_cobjectnames(#10573, "__le__") +py_cmembers_versioned(#10532, "__le__", #10573, "2") +#10574 = @"C_type$instance$2__len__" +py_cobjects(#10574) +py_cobjecttypes(#10574, #10005) +py_cobject_sources(#10574, 0) +py_cobjectnames(#10574, "__len__") +py_cmembers_versioned(#10532, "__len__", #10574, "2") +#10575 = @"C_type$instance$2__long__" +py_cobjects(#10575) +py_cobjecttypes(#10575, #10005) +py_cobject_sources(#10575, 0) +py_cobjectnames(#10575, "__long__") +py_cmembers_versioned(#10532, "__long__", #10575, "2") +#10576 = @"C_type$instance$2__lshift__" +py_cobjects(#10576) +py_cobjecttypes(#10576, #10005) +py_cobject_sources(#10576, 0) +py_cobjectnames(#10576, "__lshift__") +py_cmembers_versioned(#10532, "__lshift__", #10576, "2") +#10577 = @"C_type$instance$2__lt__" +py_cobjects(#10577) +py_cobjecttypes(#10577, #10005) +py_cobject_sources(#10577, 0) +py_cobjectnames(#10577, "__lt__") +py_cmembers_versioned(#10532, "__lt__", #10577, "2") +#10578 = @"C_type$instance$2__mod__" +py_cobjects(#10578) +py_cobjecttypes(#10578, #10005) +py_cobject_sources(#10578, 0) +py_cobjectnames(#10578, "__mod__") +py_cmembers_versioned(#10532, "__mod__", #10578, "2") +#10579 = @"C_type$instance$2__mul__" +py_cobjects(#10579) +py_cobjecttypes(#10579, #10005) +py_cobject_sources(#10579, 0) +py_cobjectnames(#10579, "__mul__") +py_cmembers_versioned(#10532, "__mul__", #10579, "2") +#10580 = @"C_type$instance$2__ne__" +py_cobjects(#10580) +py_cobjecttypes(#10580, #10005) +py_cobject_sources(#10580, 0) +py_cobjectnames(#10580, "__ne__") +py_cmembers_versioned(#10532, "__ne__", #10580, "2") +#10581 = @"C_type$instance$2__neg__" +py_cobjects(#10581) +py_cobjecttypes(#10581, #10005) +py_cobject_sources(#10581, 0) +py_cobjectnames(#10581, "__neg__") +py_cmembers_versioned(#10532, "__neg__", #10581, "2") +#10582 = @"C_type$instance$2__new__" +py_cobjects(#10582) +py_cobjecttypes(#10582, #10075) +py_cobject_sources(#10582, 0) +py_cobjectnames(#10582, "__new__") +py_cmembers_versioned(#10532, "__new__", #10582, "2") +#10583 = @"C_type$instance$2__nonzero__" +py_cobjects(#10583) +py_cobjecttypes(#10583, #10005) +py_cobject_sources(#10583, 0) +py_cobjectnames(#10583, "__nonzero__") +py_cmembers_versioned(#10532, "__nonzero__", #10583, "2") +#10584 = @"C_type$instance$2__oct__" +py_cobjects(#10584) +py_cobjecttypes(#10584, #10005) +py_cobject_sources(#10584, 0) +py_cobjectnames(#10584, "__oct__") +py_cmembers_versioned(#10532, "__oct__", #10584, "2") +#10585 = @"C_type$instance$2__or__" +py_cobjects(#10585) +py_cobjecttypes(#10585, #10005) +py_cobject_sources(#10585, 0) +py_cobjectnames(#10585, "__or__") +py_cmembers_versioned(#10532, "__or__", #10585, "2") +#10586 = @"C_type$instance$2__pos__" +py_cobjects(#10586) +py_cobjecttypes(#10586, #10005) +py_cobject_sources(#10586, 0) +py_cobjectnames(#10586, "__pos__") +py_cmembers_versioned(#10532, "__pos__", #10586, "2") +#10587 = @"C_type$instance$2__pow__" +py_cobjects(#10587) +py_cobjecttypes(#10587, #10005) +py_cobject_sources(#10587, 0) +py_cobjectnames(#10587, "__pow__") +py_cmembers_versioned(#10532, "__pow__", #10587, "2") +#10588 = @"C_type$instance$2__radd__" +py_cobjects(#10588) +py_cobjecttypes(#10588, #10005) +py_cobject_sources(#10588, 0) +py_cobjectnames(#10588, "__radd__") +py_cmembers_versioned(#10532, "__radd__", #10588, "2") +#10589 = @"C_type$instance$2__rand__" +py_cobjects(#10589) +py_cobjecttypes(#10589, #10005) +py_cobject_sources(#10589, 0) +py_cobjectnames(#10589, "__rand__") +py_cmembers_versioned(#10532, "__rand__", #10589, "2") +#10590 = @"C_type$instance$2__rdiv__" +py_cobjects(#10590) +py_cobjecttypes(#10590, #10005) +py_cobject_sources(#10590, 0) +py_cobjectnames(#10590, "__rdiv__") +py_cmembers_versioned(#10532, "__rdiv__", #10590, "2") +#10591 = @"C_type$instance$2__rdivmod__" +py_cobjects(#10591) +py_cobjecttypes(#10591, #10005) +py_cobject_sources(#10591, 0) +py_cobjectnames(#10591, "__rdivmod__") +py_cmembers_versioned(#10532, "__rdivmod__", #10591, "2") +#10592 = @"C_type$instance$2__repr__" +py_cobjects(#10592) +py_cobjecttypes(#10592, #10005) +py_cobject_sources(#10592, 0) +py_cobjectnames(#10592, "__repr__") +py_cmembers_versioned(#10532, "__repr__", #10592, "2") +#10593 = @"C_type$instance$2__rfloordiv__" +py_cobjects(#10593) +py_cobjecttypes(#10593, #10005) +py_cobject_sources(#10593, 0) +py_cobjectnames(#10593, "__rfloordiv__") +py_cmembers_versioned(#10532, "__rfloordiv__", #10593, "2") +#10594 = @"C_type$instance$2__rlshift__" +py_cobjects(#10594) +py_cobjecttypes(#10594, #10005) +py_cobject_sources(#10594, 0) +py_cobjectnames(#10594, "__rlshift__") +py_cmembers_versioned(#10532, "__rlshift__", #10594, "2") +#10595 = @"C_type$instance$2__rmod__" +py_cobjects(#10595) +py_cobjecttypes(#10595, #10005) +py_cobject_sources(#10595, 0) +py_cobjectnames(#10595, "__rmod__") +py_cmembers_versioned(#10532, "__rmod__", #10595, "2") +#10596 = @"C_type$instance$2__rmul__" +py_cobjects(#10596) +py_cobjecttypes(#10596, #10005) +py_cobject_sources(#10596, 0) +py_cobjectnames(#10596, "__rmul__") +py_cmembers_versioned(#10532, "__rmul__", #10596, "2") +#10597 = @"C_type$instance$2__ror__" +py_cobjects(#10597) +py_cobjecttypes(#10597, #10005) +py_cobject_sources(#10597, 0) +py_cobjectnames(#10597, "__ror__") +py_cmembers_versioned(#10532, "__ror__", #10597, "2") +#10598 = @"C_type$instance$2__rpow__" +py_cobjects(#10598) +py_cobjecttypes(#10598, #10005) +py_cobject_sources(#10598, 0) +py_cobjectnames(#10598, "__rpow__") +py_cmembers_versioned(#10532, "__rpow__", #10598, "2") +#10599 = @"C_type$instance$2__rrshift__" +py_cobjects(#10599) +py_cobjecttypes(#10599, #10005) +py_cobject_sources(#10599, 0) +py_cobjectnames(#10599, "__rrshift__") +py_cmembers_versioned(#10532, "__rrshift__", #10599, "2") +#10600 = @"C_type$instance$2__rshift__" +py_cobjects(#10600) +py_cobjecttypes(#10600, #10005) +py_cobject_sources(#10600, 0) +py_cobjectnames(#10600, "__rshift__") +py_cmembers_versioned(#10532, "__rshift__", #10600, "2") +#10601 = @"C_type$instance$2__rsub__" +py_cobjects(#10601) +py_cobjecttypes(#10601, #10005) +py_cobject_sources(#10601, 0) +py_cobjectnames(#10601, "__rsub__") +py_cmembers_versioned(#10532, "__rsub__", #10601, "2") +#10602 = @"C_type$instance$2__rtruediv__" +py_cobjects(#10602) +py_cobjecttypes(#10602, #10005) +py_cobject_sources(#10602, 0) +py_cobjectnames(#10602, "__rtruediv__") +py_cmembers_versioned(#10532, "__rtruediv__", #10602, "2") +#10603 = @"C_type$instance$2__rxor__" +py_cobjects(#10603) +py_cobjecttypes(#10603, #10005) +py_cobject_sources(#10603, 0) +py_cobjectnames(#10603, "__rxor__") +py_cmembers_versioned(#10532, "__rxor__", #10603, "2") +#10604 = @"C_type$instance$2__setattr__" +py_cobjects(#10604) +py_cobjecttypes(#10604, #10005) +py_cobject_sources(#10604, 0) +py_cobjectnames(#10604, "__setattr__") +py_cmembers_versioned(#10532, "__setattr__", #10604, "2") +#10605 = @"C_type$instance$2__setitem__" +py_cobjects(#10605) +py_cobjecttypes(#10605, #10005) +py_cobject_sources(#10605, 0) +py_cobjectnames(#10605, "__setitem__") +py_cmembers_versioned(#10532, "__setitem__", #10605, "2") +#10606 = @"C_type$instance$2__setslice__" +py_cobjects(#10606) +py_cobjecttypes(#10606, #10005) +py_cobject_sources(#10606, 0) +py_cobjectnames(#10606, "__setslice__") +py_cmembers_versioned(#10532, "__setslice__", #10606, "2") +#10607 = @"C_type$instance$2__str__" +py_cobjects(#10607) +py_cobjecttypes(#10607, #10005) +py_cobject_sources(#10607, 0) +py_cobjectnames(#10607, "__str__") +py_cmembers_versioned(#10532, "__str__", #10607, "2") +#10608 = @"C_type$instance$2__sub__" +py_cobjects(#10608) +py_cobjecttypes(#10608, #10005) +py_cobject_sources(#10608, 0) +py_cobjectnames(#10608, "__sub__") +py_cmembers_versioned(#10532, "__sub__", #10608, "2") +#10609 = @"C_type$instance$2__truediv__" +py_cobjects(#10609) +py_cobjecttypes(#10609, #10005) +py_cobject_sources(#10609, 0) +py_cobjectnames(#10609, "__truediv__") +py_cmembers_versioned(#10532, "__truediv__", #10609, "2") +#10610 = @"C_type$instance$2__xor__" +py_cobjects(#10610) +py_cobjecttypes(#10610, #10005) +py_cobject_sources(#10610, 0) +py_cobjectnames(#10610, "__xor__") +py_cmembers_versioned(#10532, "__xor__", #10610, "2") +#10611 = @"C_type$instance$2next" +py_cobjects(#10611) +py_cobjecttypes(#10611, #10005) +py_cobject_sources(#10611, 0) +py_cobjectnames(#10611, "next") +py_cmembers_versioned(#10532, "next", #10611, "2") +py_cmembers_versioned(#10532, ".super.", #10021, "2") +py_cobjectnames(#10532, "instance") +py_special_objects(#10532, "InstanceType") +#10612 = @"C_type$classobj" +py_cobjects(#10612) +py_cobjecttypes(#10612, #10001) +py_cobject_sources(#10612, 0) +#10613 = @"C_type$classobj$2__call__" +py_cobjects(#10613) +py_cobjecttypes(#10613, #10005) +py_cobject_sources(#10613, 0) +py_cobjectnames(#10613, "__call__") +py_cmembers_versioned(#10612, "__call__", #10613, "2") +#10614 = @"C_type$classobj$2__delattr__" +py_cobjects(#10614) +py_cobjecttypes(#10614, #10005) +py_cobject_sources(#10614, 0) +py_cobjectnames(#10614, "__delattr__") +py_cmembers_versioned(#10612, "__delattr__", #10614, "2") +#10615 = @"C_bytes$a7256df604b335f986bdeaa2ec3b1c4af8804e05" +py_cobjects(#10615) +py_cobjecttypes(#10615, #10028) +py_cobject_sources(#10615, 0) +py_cobjectnames(#10615, "b'classobj(name, bases, dict) + +Create a class object. The name must be a string; the second argument +a tuple of classes, and the third a dictionary.'") +py_cmembers_versioned(#10612, "__doc__", #10615, "2") +#10616 = @"C_type$classobj$2__getattribute__" +py_cobjects(#10616) +py_cobjecttypes(#10616, #10005) +py_cobject_sources(#10616, 0) +py_cobjectnames(#10616, "__getattribute__") +py_cmembers_versioned(#10612, "__getattribute__", #10616, "2") +#10617 = @"C_type$classobj$2__new__" +py_cobjects(#10617) +py_cobjecttypes(#10617, #10075) +py_cobject_sources(#10617, 0) +py_cobjectnames(#10617, "__new__") +py_cmembers_versioned(#10612, "__new__", #10617, "2") +#10618 = @"C_type$classobj$2__repr__" +py_cobjects(#10618) +py_cobjecttypes(#10618, #10005) +py_cobject_sources(#10618, 0) +py_cobjectnames(#10618, "__repr__") +py_cmembers_versioned(#10612, "__repr__", #10618, "2") +#10619 = @"C_type$classobj$2__setattr__" +py_cobjects(#10619) +py_cobjecttypes(#10619, #10005) +py_cobject_sources(#10619, 0) +py_cobjectnames(#10619, "__setattr__") +py_cmembers_versioned(#10612, "__setattr__", #10619, "2") +#10620 = @"C_type$classobj$2__str__" +py_cobjects(#10620) +py_cobjecttypes(#10620, #10005) +py_cobject_sources(#10620, 0) +py_cobjectnames(#10620, "__str__") +py_cmembers_versioned(#10612, "__str__", #10620, "2") +py_cmembers_versioned(#10612, ".super.", #10021, "2") +py_cobjectnames(#10612, "classobj") +py_special_objects(#10612, "ClassType") +py_special_objects(#10018, "NoneType") +#10621 = @"C_type$instancemethod" +py_cobjects(#10621) +py_cobjecttypes(#10621, #10001) +py_cobject_sources(#10621, 0) +#10622 = @"C_type$instancemethod$2__call__" +py_cobjects(#10622) +py_cobjecttypes(#10622, #10005) +py_cobject_sources(#10622, 0) +py_cobjectnames(#10622, "__call__") +py_cmembers_versioned(#10621, "__call__", #10622, "2") +#10623 = @"C_type$instancemethod$2__cmp__" +py_cobjects(#10623) +py_cobjecttypes(#10623, #10005) +py_cobject_sources(#10623, 0) +py_cobjectnames(#10623, "__cmp__") +py_cmembers_versioned(#10621, "__cmp__", #10623, "2") +#10624 = @"C_type$instancemethod$2__delattr__" +py_cobjects(#10624) +py_cobjecttypes(#10624, #10005) +py_cobject_sources(#10624, 0) +py_cobjectnames(#10624, "__delattr__") +py_cmembers_versioned(#10621, "__delattr__", #10624, "2") +#10625 = @"C_type$instancemethod$2__doc__" +py_cobjects(#10625) +py_cobjecttypes(#10625, #10003) +py_cobject_sources(#10625, 0) +#10626 = @"C_type$instancemethod$2__doc__$2__set__" +py_cobjects(#10626) +py_cobjecttypes(#10626, #10009) +py_cobject_sources(#10626, 0) +py_cobjectnames(#10626, "__set__") +py_cmembers_versioned(#10625, "__set__", #10626, "2") +#10627 = @"C_type$instancemethod$2__doc__$2__getattribute__" +py_cobjects(#10627) +py_cobjecttypes(#10627, #10009) +py_cobject_sources(#10627, 0) +py_cobjectnames(#10627, "__getattribute__") +py_cmembers_versioned(#10625, "__getattribute__", #10627, "2") +py_cmembers_versioned(#10625, "__objclass__", #10621, "2") +#10628 = @"C_type$instancemethod$2__doc__$2__repr__" +py_cobjects(#10628) +py_cobjecttypes(#10628, #10009) +py_cobject_sources(#10628, 0) +py_cobjectnames(#10628, "__repr__") +py_cmembers_versioned(#10625, "__repr__", #10628, "2") +#10629 = @"C_type$instancemethod$2__doc__$2__get__" +py_cobjects(#10629) +py_cobjecttypes(#10629, #10009) +py_cobject_sources(#10629, 0) +py_cobjectnames(#10629, "__get__") +py_cmembers_versioned(#10625, "__get__", #10629, "2") +py_cmembers_versioned(#10625, "__doc__", #10017, "2") +#10630 = @"C_type$instancemethod$2__doc__$2__delete__" +py_cobjects(#10630) +py_cobjecttypes(#10630, #10009) +py_cobject_sources(#10630, 0) +py_cobjectnames(#10630, "__delete__") +py_cmembers_versioned(#10625, "__delete__", #10630, "2") +py_cobjectnames(#10625, "__doc__") +py_cmembers_versioned(#10621, "__doc__", #10625, "2") +#10631 = @"C_type$instancemethod$2__func__" +py_cobjects(#10631) +py_cobjecttypes(#10631, #10045) +py_cobject_sources(#10631, 0) +py_cobjectnames(#10631, "__func__") +py_cmembers_versioned(#10621, "__func__", #10631, "2") +#10632 = @"C_type$instancemethod$2__get__" +py_cobjects(#10632) +py_cobjecttypes(#10632, #10005) +py_cobject_sources(#10632, 0) +py_cobjectnames(#10632, "__get__") +py_cmembers_versioned(#10621, "__get__", #10632, "2") +#10633 = @"C_type$instancemethod$2__getattribute__" +py_cobjects(#10633) +py_cobjecttypes(#10633, #10005) +py_cobject_sources(#10633, 0) +py_cobjectnames(#10633, "__getattribute__") +py_cmembers_versioned(#10621, "__getattribute__", #10633, "2") +#10634 = @"C_type$instancemethod$2__hash__" +py_cobjects(#10634) +py_cobjecttypes(#10634, #10005) +py_cobject_sources(#10634, 0) +py_cobjectnames(#10634, "__hash__") +py_cmembers_versioned(#10621, "__hash__", #10634, "2") +#10635 = @"C_type$instancemethod$2__new__" +py_cobjects(#10635) +py_cobjecttypes(#10635, #10075) +py_cobject_sources(#10635, 0) +py_cobjectnames(#10635, "__new__") +py_cmembers_versioned(#10621, "__new__", #10635, "2") +#10636 = @"C_type$instancemethod$2__repr__" +py_cobjects(#10636) +py_cobjecttypes(#10636, #10005) +py_cobject_sources(#10636, 0) +py_cobjectnames(#10636, "__repr__") +py_cmembers_versioned(#10621, "__repr__", #10636, "2") +#10637 = @"C_type$instancemethod$2__self__" +py_cobjects(#10637) +py_cobjecttypes(#10637, #10045) +py_cobject_sources(#10637, 0) +py_cobjectnames(#10637, "__self__") +py_cmembers_versioned(#10621, "__self__", #10637, "2") +#10638 = @"C_type$instancemethod$2__setattr__" +py_cobjects(#10638) +py_cobjecttypes(#10638, #10005) +py_cobject_sources(#10638, 0) +py_cobjectnames(#10638, "__setattr__") +py_cmembers_versioned(#10621, "__setattr__", #10638, "2") +#10639 = @"C_type$instancemethod$2im_class" +py_cobjects(#10639) +py_cobjecttypes(#10639, #10045) +py_cobject_sources(#10639, 0) +py_cobjectnames(#10639, "im_class") +py_cmembers_versioned(#10621, "im_class", #10639, "2") +#10640 = @"C_type$instancemethod$2im_func" +py_cobjects(#10640) +py_cobjecttypes(#10640, #10045) +py_cobject_sources(#10640, 0) +py_cobjectnames(#10640, "im_func") +py_cmembers_versioned(#10621, "im_func", #10640, "2") +#10641 = @"C_type$instancemethod$2im_self" +py_cobjects(#10641) +py_cobjecttypes(#10641, #10045) +py_cobject_sources(#10641, 0) +py_cobjectnames(#10641, "im_self") +py_cmembers_versioned(#10621, "im_self", #10641, "2") +py_cmembers_versioned(#10621, ".super.", #10021, "2") +py_cobjectnames(#10621, "instancemethod") +py_special_objects(#10621, "MethodType") +#10642 = @"C_bytes$77de68daecd823babbb58edb1c8e14d7106e83bb" +py_cobjects(#10642) +py_cobjecttypes(#10642, #10028) +py_cobject_sources(#10642, 0) +py_cobjectnames(#10642, "b'3'") +py_special_objects(#10642, "u3") +#10643 = @"C_bytes$da4b9237bacccdf19c0760cab7aec4a8359010b0" +py_cobjects(#10643) +py_cobjecttypes(#10643, #10028) +py_cobject_sources(#10643, 0) +py_cobjectnames(#10643, "b'2'") +py_special_objects(#10643, "u2") +#10644 = @"C_bool$False" +py_cobjects(#10644) +py_cobjecttypes(#10644, #10438) +py_cobject_sources(#10644, 0) +py_cobjectnames(#10644, "False") +py_special_objects(#10644, "False") +#10645 = @"C_type$long" +py_cobjects(#10645) +py_cobjecttypes(#10645, #10001) +py_cobject_sources(#10645, 0) +#10646 = @"C_type$long$2__abs__" +py_cobjects(#10646) +py_cobjecttypes(#10646, #10005) +py_cobject_sources(#10646, 0) +py_cobjectnames(#10646, "__abs__") +py_cmembers_versioned(#10645, "__abs__", #10646, "2") +#10647 = @"C_type$long$2__add__" +py_cobjects(#10647) +py_cobjecttypes(#10647, #10005) +py_cobject_sources(#10647, 0) +py_cobjectnames(#10647, "__add__") +py_cmembers_versioned(#10645, "__add__", #10647, "2") +#10648 = @"C_type$long$2__and__" +py_cobjects(#10648) +py_cobjecttypes(#10648, #10005) +py_cobject_sources(#10648, 0) +py_cobjectnames(#10648, "__and__") +py_cmembers_versioned(#10645, "__and__", #10648, "2") +#10649 = @"C_type$long$2__cmp__" +py_cobjects(#10649) +py_cobjecttypes(#10649, #10005) +py_cobject_sources(#10649, 0) +py_cobjectnames(#10649, "__cmp__") +py_cmembers_versioned(#10645, "__cmp__", #10649, "2") +#10650 = @"C_type$long$2__coerce__" +py_cobjects(#10650) +py_cobjecttypes(#10650, #10005) +py_cobject_sources(#10650, 0) +py_cobjectnames(#10650, "__coerce__") +py_cmembers_versioned(#10645, "__coerce__", #10650, "2") +#10651 = @"C_type$long$2__div__" +py_cobjects(#10651) +py_cobjecttypes(#10651, #10005) +py_cobject_sources(#10651, 0) +py_cobjectnames(#10651, "__div__") +py_cmembers_versioned(#10645, "__div__", #10651, "2") +#10652 = @"C_type$long$2__divmod__" +py_cobjects(#10652) +py_cobjecttypes(#10652, #10005) +py_cobject_sources(#10652, 0) +py_cobjectnames(#10652, "__divmod__") +py_cmembers_versioned(#10645, "__divmod__", #10652, "2") +#10653 = @"C_bytes$5bbbbe7e043697c834e9470611c2c45a408c6b4a" +py_cobjects(#10653) +py_cobjecttypes(#10653, #10028) +py_cobject_sources(#10653, 0) +py_cobjectnames(#10653, "b'long(x=0) -> long +long(x, base=10) -> long + +Convert a number or string to a long integer, or return 0L if no arguments +are given. If x is floating point, the conversion truncates towards zero. + +If x is not a number or if base is given, then x must be a string or +Unicode object representing an integer literal in the given base. The +literal can be preceded by '+' or '-' and be surrounded by whitespace. +The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to +interpret the base from the string as an integer literal. +>>> int('0b100', base=0) +4L'") +py_cmembers_versioned(#10645, "__doc__", #10653, "2") +#10654 = @"C_type$long$2__float__" +py_cobjects(#10654) +py_cobjecttypes(#10654, #10005) +py_cobject_sources(#10654, 0) +py_cobjectnames(#10654, "__float__") +py_cmembers_versioned(#10645, "__float__", #10654, "2") +#10655 = @"C_type$long$2__floordiv__" +py_cobjects(#10655) +py_cobjecttypes(#10655, #10005) +py_cobject_sources(#10655, 0) +py_cobjectnames(#10655, "__floordiv__") +py_cmembers_versioned(#10645, "__floordiv__", #10655, "2") +#10656 = @"C_type$long$2__format__" +py_cobjects(#10656) +py_cobjecttypes(#10656, #10034) +py_cobject_sources(#10656, 0) +py_cobjectnames(#10656, "__format__") +py_cmembers_versioned(#10645, "__format__", #10656, "2") +#10657 = @"C_type$long$2__getattribute__" +py_cobjects(#10657) +py_cobjecttypes(#10657, #10005) +py_cobject_sources(#10657, 0) +py_cobjectnames(#10657, "__getattribute__") +py_cmembers_versioned(#10645, "__getattribute__", #10657, "2") +#10658 = @"C_type$long$2__getnewargs__" +py_cobjects(#10658) +py_cobjecttypes(#10658, #10034) +py_cobject_sources(#10658, 0) +py_cobjectnames(#10658, "__getnewargs__") +py_cmembers_versioned(#10645, "__getnewargs__", #10658, "2") +#10659 = @"C_type$long$2__hash__" +py_cobjects(#10659) +py_cobjecttypes(#10659, #10005) +py_cobject_sources(#10659, 0) +py_cobjectnames(#10659, "__hash__") +py_cmembers_versioned(#10645, "__hash__", #10659, "2") +#10660 = @"C_type$long$2__hex__" +py_cobjects(#10660) +py_cobjecttypes(#10660, #10005) +py_cobject_sources(#10660, 0) +py_cobjectnames(#10660, "__hex__") +py_cmembers_versioned(#10645, "__hex__", #10660, "2") +#10661 = @"C_type$long$2__index__" +py_cobjects(#10661) +py_cobjecttypes(#10661, #10005) +py_cobject_sources(#10661, 0) +py_cobjectnames(#10661, "__index__") +py_cmembers_versioned(#10645, "__index__", #10661, "2") +#10662 = @"C_type$long$2__int__" +py_cobjects(#10662) +py_cobjecttypes(#10662, #10005) +py_cobject_sources(#10662, 0) +py_cobjectnames(#10662, "__int__") +py_cmembers_versioned(#10645, "__int__", #10662, "2") +#10663 = @"C_type$long$2__invert__" +py_cobjects(#10663) +py_cobjecttypes(#10663, #10005) +py_cobject_sources(#10663, 0) +py_cobjectnames(#10663, "__invert__") +py_cmembers_versioned(#10645, "__invert__", #10663, "2") +#10664 = @"C_type$long$2__long__" +py_cobjects(#10664) +py_cobjecttypes(#10664, #10005) +py_cobject_sources(#10664, 0) +py_cobjectnames(#10664, "__long__") +py_cmembers_versioned(#10645, "__long__", #10664, "2") +#10665 = @"C_type$long$2__lshift__" +py_cobjects(#10665) +py_cobjecttypes(#10665, #10005) +py_cobject_sources(#10665, 0) +py_cobjectnames(#10665, "__lshift__") +py_cmembers_versioned(#10645, "__lshift__", #10665, "2") +#10666 = @"C_type$long$2__mod__" +py_cobjects(#10666) +py_cobjecttypes(#10666, #10005) +py_cobject_sources(#10666, 0) +py_cobjectnames(#10666, "__mod__") +py_cmembers_versioned(#10645, "__mod__", #10666, "2") +#10667 = @"C_type$long$2__mul__" +py_cobjects(#10667) +py_cobjecttypes(#10667, #10005) +py_cobject_sources(#10667, 0) +py_cobjectnames(#10667, "__mul__") +py_cmembers_versioned(#10645, "__mul__", #10667, "2") +#10668 = @"C_type$long$2__neg__" +py_cobjects(#10668) +py_cobjecttypes(#10668, #10005) +py_cobject_sources(#10668, 0) +py_cobjectnames(#10668, "__neg__") +py_cmembers_versioned(#10645, "__neg__", #10668, "2") +#10669 = @"C_type$long$2__new__" +py_cobjects(#10669) +py_cobjecttypes(#10669, #10075) +py_cobject_sources(#10669, 0) +py_cobjectnames(#10669, "__new__") +py_cmembers_versioned(#10645, "__new__", #10669, "2") +#10670 = @"C_type$long$2__nonzero__" +py_cobjects(#10670) +py_cobjecttypes(#10670, #10005) +py_cobject_sources(#10670, 0) +py_cobjectnames(#10670, "__nonzero__") +py_cmembers_versioned(#10645, "__nonzero__", #10670, "2") +#10671 = @"C_type$long$2__oct__" +py_cobjects(#10671) +py_cobjecttypes(#10671, #10005) +py_cobject_sources(#10671, 0) +py_cobjectnames(#10671, "__oct__") +py_cmembers_versioned(#10645, "__oct__", #10671, "2") +#10672 = @"C_type$long$2__or__" +py_cobjects(#10672) +py_cobjecttypes(#10672, #10005) +py_cobject_sources(#10672, 0) +py_cobjectnames(#10672, "__or__") +py_cmembers_versioned(#10645, "__or__", #10672, "2") +#10673 = @"C_type$long$2__pos__" +py_cobjects(#10673) +py_cobjecttypes(#10673, #10005) +py_cobject_sources(#10673, 0) +py_cobjectnames(#10673, "__pos__") +py_cmembers_versioned(#10645, "__pos__", #10673, "2") +#10674 = @"C_type$long$2__pow__" +py_cobjects(#10674) +py_cobjecttypes(#10674, #10005) +py_cobject_sources(#10674, 0) +py_cobjectnames(#10674, "__pow__") +py_cmembers_versioned(#10645, "__pow__", #10674, "2") +#10675 = @"C_type$long$2__radd__" +py_cobjects(#10675) +py_cobjecttypes(#10675, #10005) +py_cobject_sources(#10675, 0) +py_cobjectnames(#10675, "__radd__") +py_cmembers_versioned(#10645, "__radd__", #10675, "2") +#10676 = @"C_type$long$2__rand__" +py_cobjects(#10676) +py_cobjecttypes(#10676, #10005) +py_cobject_sources(#10676, 0) +py_cobjectnames(#10676, "__rand__") +py_cmembers_versioned(#10645, "__rand__", #10676, "2") +#10677 = @"C_type$long$2__rdiv__" +py_cobjects(#10677) +py_cobjecttypes(#10677, #10005) +py_cobject_sources(#10677, 0) +py_cobjectnames(#10677, "__rdiv__") +py_cmembers_versioned(#10645, "__rdiv__", #10677, "2") +#10678 = @"C_type$long$2__rdivmod__" +py_cobjects(#10678) +py_cobjecttypes(#10678, #10005) +py_cobject_sources(#10678, 0) +py_cobjectnames(#10678, "__rdivmod__") +py_cmembers_versioned(#10645, "__rdivmod__", #10678, "2") +#10679 = @"C_type$long$2__repr__" +py_cobjects(#10679) +py_cobjecttypes(#10679, #10005) +py_cobject_sources(#10679, 0) +py_cobjectnames(#10679, "__repr__") +py_cmembers_versioned(#10645, "__repr__", #10679, "2") +#10680 = @"C_type$long$2__rfloordiv__" +py_cobjects(#10680) +py_cobjecttypes(#10680, #10005) +py_cobject_sources(#10680, 0) +py_cobjectnames(#10680, "__rfloordiv__") +py_cmembers_versioned(#10645, "__rfloordiv__", #10680, "2") +#10681 = @"C_type$long$2__rlshift__" +py_cobjects(#10681) +py_cobjecttypes(#10681, #10005) +py_cobject_sources(#10681, 0) +py_cobjectnames(#10681, "__rlshift__") +py_cmembers_versioned(#10645, "__rlshift__", #10681, "2") +#10682 = @"C_type$long$2__rmod__" +py_cobjects(#10682) +py_cobjecttypes(#10682, #10005) +py_cobject_sources(#10682, 0) +py_cobjectnames(#10682, "__rmod__") +py_cmembers_versioned(#10645, "__rmod__", #10682, "2") +#10683 = @"C_type$long$2__rmul__" +py_cobjects(#10683) +py_cobjecttypes(#10683, #10005) +py_cobject_sources(#10683, 0) +py_cobjectnames(#10683, "__rmul__") +py_cmembers_versioned(#10645, "__rmul__", #10683, "2") +#10684 = @"C_type$long$2__ror__" +py_cobjects(#10684) +py_cobjecttypes(#10684, #10005) +py_cobject_sources(#10684, 0) +py_cobjectnames(#10684, "__ror__") +py_cmembers_versioned(#10645, "__ror__", #10684, "2") +#10685 = @"C_type$long$2__rpow__" +py_cobjects(#10685) +py_cobjecttypes(#10685, #10005) +py_cobject_sources(#10685, 0) +py_cobjectnames(#10685, "__rpow__") +py_cmembers_versioned(#10645, "__rpow__", #10685, "2") +#10686 = @"C_type$long$2__rrshift__" +py_cobjects(#10686) +py_cobjecttypes(#10686, #10005) +py_cobject_sources(#10686, 0) +py_cobjectnames(#10686, "__rrshift__") +py_cmembers_versioned(#10645, "__rrshift__", #10686, "2") +#10687 = @"C_type$long$2__rshift__" +py_cobjects(#10687) +py_cobjecttypes(#10687, #10005) +py_cobject_sources(#10687, 0) +py_cobjectnames(#10687, "__rshift__") +py_cmembers_versioned(#10645, "__rshift__", #10687, "2") +#10688 = @"C_type$long$2__rsub__" +py_cobjects(#10688) +py_cobjecttypes(#10688, #10005) +py_cobject_sources(#10688, 0) +py_cobjectnames(#10688, "__rsub__") +py_cmembers_versioned(#10645, "__rsub__", #10688, "2") +#10689 = @"C_type$long$2__rtruediv__" +py_cobjects(#10689) +py_cobjecttypes(#10689, #10005) +py_cobject_sources(#10689, 0) +py_cobjectnames(#10689, "__rtruediv__") +py_cmembers_versioned(#10645, "__rtruediv__", #10689, "2") +#10690 = @"C_type$long$2__rxor__" +py_cobjects(#10690) +py_cobjecttypes(#10690, #10005) +py_cobject_sources(#10690, 0) +py_cobjectnames(#10690, "__rxor__") +py_cmembers_versioned(#10645, "__rxor__", #10690, "2") +#10691 = @"C_type$long$2__sizeof__" +py_cobjects(#10691) +py_cobjecttypes(#10691, #10034) +py_cobject_sources(#10691, 0) +py_cobjectnames(#10691, "__sizeof__") +py_cmembers_versioned(#10645, "__sizeof__", #10691, "2") +#10692 = @"C_type$long$2__str__" +py_cobjects(#10692) +py_cobjecttypes(#10692, #10005) +py_cobject_sources(#10692, 0) +py_cobjectnames(#10692, "__str__") +py_cmembers_versioned(#10645, "__str__", #10692, "2") +#10693 = @"C_type$long$2__sub__" +py_cobjects(#10693) +py_cobjecttypes(#10693, #10005) +py_cobject_sources(#10693, 0) +py_cobjectnames(#10693, "__sub__") +py_cmembers_versioned(#10645, "__sub__", #10693, "2") +#10694 = @"C_type$long$2__truediv__" +py_cobjects(#10694) +py_cobjecttypes(#10694, #10005) +py_cobject_sources(#10694, 0) +py_cobjectnames(#10694, "__truediv__") +py_cmembers_versioned(#10645, "__truediv__", #10694, "2") +#10695 = @"C_type$long$2__trunc__" +py_cobjects(#10695) +py_cobjecttypes(#10695, #10034) +py_cobject_sources(#10695, 0) +py_cobjectnames(#10695, "__trunc__") +py_cmembers_versioned(#10645, "__trunc__", #10695, "2") +#10696 = @"C_type$long$2__xor__" +py_cobjects(#10696) +py_cobjecttypes(#10696, #10005) +py_cobject_sources(#10696, 0) +py_cobjectnames(#10696, "__xor__") +py_cmembers_versioned(#10645, "__xor__", #10696, "2") +#10697 = @"C_type$long$2bit_length" +py_cobjects(#10697) +py_cobjecttypes(#10697, #10034) +py_cobject_sources(#10697, 0) +py_cobjectnames(#10697, "bit_length") +py_cmembers_versioned(#10645, "bit_length", #10697, "2") +#10698 = @"C_type$long$2conjugate" +py_cobjects(#10698) +py_cobjecttypes(#10698, #10034) +py_cobject_sources(#10698, 0) +py_cobjectnames(#10698, "conjugate") +py_cmembers_versioned(#10645, "conjugate", #10698, "2") +#10699 = @"C_type$long$2denominator" +py_cobjects(#10699) +py_cobjecttypes(#10699, #10003) +py_cobject_sources(#10699, 0) +#10700 = @"C_type$long$2denominator$2__set__" +py_cobjects(#10700) +py_cobjecttypes(#10700, #10009) +py_cobject_sources(#10700, 0) +py_cobjectnames(#10700, "__set__") +py_cmembers_versioned(#10699, "__set__", #10700, "2") +#10701 = @"C_type$long$2denominator$2__getattribute__" +py_cobjects(#10701) +py_cobjecttypes(#10701, #10009) +py_cobject_sources(#10701, 0) +py_cobjectnames(#10701, "__getattribute__") +py_cmembers_versioned(#10699, "__getattribute__", #10701, "2") +py_cmembers_versioned(#10699, "__objclass__", #10645, "2") +#10702 = @"C_type$long$2denominator$2__repr__" +py_cobjects(#10702) +py_cobjecttypes(#10702, #10009) +py_cobject_sources(#10702, 0) +py_cobjectnames(#10702, "__repr__") +py_cmembers_versioned(#10699, "__repr__", #10702, "2") +#10703 = @"C_type$long$2denominator$2__get__" +py_cobjects(#10703) +py_cobjecttypes(#10703, #10009) +py_cobject_sources(#10703, 0) +py_cobjectnames(#10703, "__get__") +py_cmembers_versioned(#10699, "__get__", #10703, "2") +#10704 = @"C_bytes$d787ec075c36417b3622538483449d06564bf83c" +py_cobjects(#10704) +py_cobjecttypes(#10704, #10028) +py_cobject_sources(#10704, 0) +py_cobjectnames(#10704, "b'the denominator of a rational number in lowest terms'") +py_cmembers_versioned(#10699, "__doc__", #10704, "2") +#10705 = @"C_type$long$2denominator$2__delete__" +py_cobjects(#10705) +py_cobjecttypes(#10705, #10009) +py_cobject_sources(#10705, 0) +py_cobjectnames(#10705, "__delete__") +py_cmembers_versioned(#10699, "__delete__", #10705, "2") +py_cobjectnames(#10699, "denominator") +py_cmembers_versioned(#10645, "denominator", #10699, "2") +#10706 = @"C_type$long$2imag" +py_cobjects(#10706) +py_cobjecttypes(#10706, #10003) +py_cobject_sources(#10706, 0) +#10707 = @"C_type$long$2imag$2__set__" +py_cobjects(#10707) +py_cobjecttypes(#10707, #10009) +py_cobject_sources(#10707, 0) +py_cobjectnames(#10707, "__set__") +py_cmembers_versioned(#10706, "__set__", #10707, "2") +#10708 = @"C_type$long$2imag$2__getattribute__" +py_cobjects(#10708) +py_cobjecttypes(#10708, #10009) +py_cobject_sources(#10708, 0) +py_cobjectnames(#10708, "__getattribute__") +py_cmembers_versioned(#10706, "__getattribute__", #10708, "2") +py_cmembers_versioned(#10706, "__objclass__", #10645, "2") +#10709 = @"C_type$long$2imag$2__repr__" +py_cobjects(#10709) +py_cobjecttypes(#10709, #10009) +py_cobject_sources(#10709, 0) +py_cobjectnames(#10709, "__repr__") +py_cmembers_versioned(#10706, "__repr__", #10709, "2") +#10710 = @"C_type$long$2imag$2__get__" +py_cobjects(#10710) +py_cobjecttypes(#10710, #10009) +py_cobject_sources(#10710, 0) +py_cobjectnames(#10710, "__get__") +py_cmembers_versioned(#10706, "__get__", #10710, "2") +#10711 = @"C_bytes$1697c2b9b4c10d325b12cf3fded2fbfc0e15d5f0" +py_cobjects(#10711) +py_cobjecttypes(#10711, #10028) +py_cobject_sources(#10711, 0) +py_cobjectnames(#10711, "b'the imaginary part of a complex number'") +py_cmembers_versioned(#10706, "__doc__", #10711, "2") +#10712 = @"C_type$long$2imag$2__delete__" +py_cobjects(#10712) +py_cobjecttypes(#10712, #10009) +py_cobject_sources(#10712, 0) +py_cobjectnames(#10712, "__delete__") +py_cmembers_versioned(#10706, "__delete__", #10712, "2") +py_cobjectnames(#10706, "imag") +py_cmembers_versioned(#10645, "imag", #10706, "2") +#10713 = @"C_type$long$2numerator" +py_cobjects(#10713) +py_cobjecttypes(#10713, #10003) +py_cobject_sources(#10713, 0) +#10714 = @"C_type$long$2numerator$2__set__" +py_cobjects(#10714) +py_cobjecttypes(#10714, #10009) +py_cobject_sources(#10714, 0) +py_cobjectnames(#10714, "__set__") +py_cmembers_versioned(#10713, "__set__", #10714, "2") +#10715 = @"C_type$long$2numerator$2__getattribute__" +py_cobjects(#10715) +py_cobjecttypes(#10715, #10009) +py_cobject_sources(#10715, 0) +py_cobjectnames(#10715, "__getattribute__") +py_cmembers_versioned(#10713, "__getattribute__", #10715, "2") +py_cmembers_versioned(#10713, "__objclass__", #10645, "2") +#10716 = @"C_type$long$2numerator$2__repr__" +py_cobjects(#10716) +py_cobjecttypes(#10716, #10009) +py_cobject_sources(#10716, 0) +py_cobjectnames(#10716, "__repr__") +py_cmembers_versioned(#10713, "__repr__", #10716, "2") +#10717 = @"C_type$long$2numerator$2__get__" +py_cobjects(#10717) +py_cobjecttypes(#10717, #10009) +py_cobject_sources(#10717, 0) +py_cobjectnames(#10717, "__get__") +py_cmembers_versioned(#10713, "__get__", #10717, "2") +#10718 = @"C_bytes$b003a2de50c1e2b9c0432a073236cd9864f791cb" +py_cobjects(#10718) +py_cobjecttypes(#10718, #10028) +py_cobject_sources(#10718, 0) +py_cobjectnames(#10718, "b'the numerator of a rational number in lowest terms'") +py_cmembers_versioned(#10713, "__doc__", #10718, "2") +#10719 = @"C_type$long$2numerator$2__delete__" +py_cobjects(#10719) +py_cobjecttypes(#10719, #10009) +py_cobject_sources(#10719, 0) +py_cobjectnames(#10719, "__delete__") +py_cmembers_versioned(#10713, "__delete__", #10719, "2") +py_cobjectnames(#10713, "numerator") +py_cmembers_versioned(#10645, "numerator", #10713, "2") +#10720 = @"C_type$long$2real" +py_cobjects(#10720) +py_cobjecttypes(#10720, #10003) +py_cobject_sources(#10720, 0) +#10721 = @"C_type$long$2real$2__set__" +py_cobjects(#10721) +py_cobjecttypes(#10721, #10009) +py_cobject_sources(#10721, 0) +py_cobjectnames(#10721, "__set__") +py_cmembers_versioned(#10720, "__set__", #10721, "2") +#10722 = @"C_type$long$2real$2__getattribute__" +py_cobjects(#10722) +py_cobjecttypes(#10722, #10009) +py_cobject_sources(#10722, 0) +py_cobjectnames(#10722, "__getattribute__") +py_cmembers_versioned(#10720, "__getattribute__", #10722, "2") +py_cmembers_versioned(#10720, "__objclass__", #10645, "2") +#10723 = @"C_type$long$2real$2__repr__" +py_cobjects(#10723) +py_cobjecttypes(#10723, #10009) +py_cobject_sources(#10723, 0) +py_cobjectnames(#10723, "__repr__") +py_cmembers_versioned(#10720, "__repr__", #10723, "2") +#10724 = @"C_type$long$2real$2__get__" +py_cobjects(#10724) +py_cobjecttypes(#10724, #10009) +py_cobject_sources(#10724, 0) +py_cobjectnames(#10724, "__get__") +py_cmembers_versioned(#10720, "__get__", #10724, "2") +#10725 = @"C_bytes$2cb527e0bacedb07e674d6e9890d3d2ab1a8f487" +py_cobjects(#10725) +py_cobjecttypes(#10725, #10028) +py_cobject_sources(#10725, 0) +py_cobjectnames(#10725, "b'the real part of a complex number'") +py_cmembers_versioned(#10720, "__doc__", #10725, "2") +#10726 = @"C_type$long$2real$2__delete__" +py_cobjects(#10726) +py_cobjecttypes(#10726, #10009) +py_cobject_sources(#10726, 0) +py_cobjectnames(#10726, "__delete__") +py_cmembers_versioned(#10720, "__delete__", #10726, "2") +py_cobjectnames(#10720, "real") +py_cmembers_versioned(#10645, "real", #10720, "2") +py_cmembers_versioned(#10645, ".super.", #10021, "2") +py_cobjectnames(#10645, "long") +py_special_objects(#10645, "long") +#10727 = @"C_type$super" +py_cobjects(#10727) +py_cobjecttypes(#10727, #10001) +py_cobject_sources(#10727, 0) +#10728 = @"C_bytes$e8e0c2295a1aa9900ff8db357497a4d4d056ea58" +py_cobjects(#10728) +py_cobjecttypes(#10728, #10028) +py_cobject_sources(#10728, 0) +py_cobjectnames(#10728, "b'super(type, obj) -> bound super object; requires isinstance(obj, type) +super(type) -> unbound super object +super(type, type2) -> bound super object; requires issubclass(type2, type) +Typical use to call a cooperative superclass method: +class C(B): + def meth(self, arg): + super(C, self).meth(arg)'") +py_cmembers_versioned(#10727, "__doc__", #10728, "2") +#10729 = @"C_type$super$2__get__" +py_cobjects(#10729) +py_cobjecttypes(#10729, #10005) +py_cobject_sources(#10729, 0) +py_cobjectnames(#10729, "__get__") +py_cmembers_versioned(#10727, "__get__", #10729, "2") +#10730 = @"C_type$super$2__getattribute__" +py_cobjects(#10730) +py_cobjecttypes(#10730, #10005) +py_cobject_sources(#10730, 0) +py_cobjectnames(#10730, "__getattribute__") +py_cmembers_versioned(#10727, "__getattribute__", #10730, "2") +#10731 = @"C_type$super$2__init__" +py_cobjects(#10731) +py_cobjecttypes(#10731, #10005) +py_cobject_sources(#10731, 0) +py_cobjectnames(#10731, "__init__") +py_cmembers_versioned(#10727, "__init__", #10731, "2") +#10732 = @"C_type$super$2__new__" +py_cobjects(#10732) +py_cobjecttypes(#10732, #10075) +py_cobject_sources(#10732, 0) +py_cobjectnames(#10732, "__new__") +py_cmembers_versioned(#10727, "__new__", #10732, "2") +#10733 = @"C_type$super$2__repr__" +py_cobjects(#10733) +py_cobjecttypes(#10733, #10005) +py_cobject_sources(#10733, 0) +py_cobjectnames(#10733, "__repr__") +py_cmembers_versioned(#10727, "__repr__", #10733, "2") +#10734 = @"C_type$super$2__self__" +py_cobjects(#10734) +py_cobjecttypes(#10734, #10045) +py_cobject_sources(#10734, 0) +py_cobjectnames(#10734, "__self__") +py_cmembers_versioned(#10727, "__self__", #10734, "2") +#10735 = @"C_type$super$2__self_class__" +py_cobjects(#10735) +py_cobjecttypes(#10735, #10045) +py_cobject_sources(#10735, 0) +py_cobjectnames(#10735, "__self_class__") +py_cmembers_versioned(#10727, "__self_class__", #10735, "2") +#10736 = @"C_type$super$2__thisclass__" +py_cobjects(#10736) +py_cobjecttypes(#10736, #10045) +py_cobject_sources(#10736, 0) +py_cobjectnames(#10736, "__thisclass__") +py_cmembers_versioned(#10727, "__thisclass__", #10736, "2") +py_cmembers_versioned(#10727, ".super.", #10021, "2") +py_cobjectnames(#10727, "super") +py_special_objects(#10727, "super") +py_special_objects(#10438, "bool") +#10737 = @"C_type$tuple" +py_cobjects(#10737) +py_cobjecttypes(#10737, #10001) +py_cobject_sources(#10737, 0) +#10738 = @"C_type$tuple$2__add__" +py_cobjects(#10738) +py_cobjecttypes(#10738, #10005) +py_cobject_sources(#10738, 0) +py_cobjectnames(#10738, "__add__") +py_cmembers_versioned(#10737, "__add__", #10738, "2") +#10739 = @"C_type$tuple$2__contains__" +py_cobjects(#10739) +py_cobjecttypes(#10739, #10005) +py_cobject_sources(#10739, 0) +py_cobjectnames(#10739, "__contains__") +py_cmembers_versioned(#10737, "__contains__", #10739, "2") +#10740 = @"C_bytes$0331c2bdf85dc14e29da951fdf1bc3f96a52ce2b" +py_cobjects(#10740) +py_cobjecttypes(#10740, #10028) +py_cobject_sources(#10740, 0) +py_cobjectnames(#10740, "b'tuple() -> empty tuple +tuple(iterable) -> tuple initialized from iterable's items + +If the argument is a tuple, the return value is the same object.'") +py_cmembers_versioned(#10737, "__doc__", #10740, "2") +#10741 = @"C_type$tuple$2__eq__" +py_cobjects(#10741) +py_cobjecttypes(#10741, #10005) +py_cobject_sources(#10741, 0) +py_cobjectnames(#10741, "__eq__") +py_cmembers_versioned(#10737, "__eq__", #10741, "2") +#10742 = @"C_type$tuple$2__ge__" +py_cobjects(#10742) +py_cobjecttypes(#10742, #10005) +py_cobject_sources(#10742, 0) +py_cobjectnames(#10742, "__ge__") +py_cmembers_versioned(#10737, "__ge__", #10742, "2") +#10743 = @"C_type$tuple$2__getattribute__" +py_cobjects(#10743) +py_cobjecttypes(#10743, #10005) +py_cobject_sources(#10743, 0) +py_cobjectnames(#10743, "__getattribute__") +py_cmembers_versioned(#10737, "__getattribute__", #10743, "2") +#10744 = @"C_type$tuple$2__getitem__" +py_cobjects(#10744) +py_cobjecttypes(#10744, #10005) +py_cobject_sources(#10744, 0) +py_cobjectnames(#10744, "__getitem__") +py_cmembers_versioned(#10737, "__getitem__", #10744, "2") +#10745 = @"C_type$tuple$2__getnewargs__" +py_cobjects(#10745) +py_cobjecttypes(#10745, #10034) +py_cobject_sources(#10745, 0) +py_cobjectnames(#10745, "__getnewargs__") +py_cmembers_versioned(#10737, "__getnewargs__", #10745, "2") +#10746 = @"C_type$tuple$2__getslice__" +py_cobjects(#10746) +py_cobjecttypes(#10746, #10005) +py_cobject_sources(#10746, 0) +py_cobjectnames(#10746, "__getslice__") +py_cmembers_versioned(#10737, "__getslice__", #10746, "2") +#10747 = @"C_type$tuple$2__gt__" +py_cobjects(#10747) +py_cobjecttypes(#10747, #10005) +py_cobject_sources(#10747, 0) +py_cobjectnames(#10747, "__gt__") +py_cmembers_versioned(#10737, "__gt__", #10747, "2") +#10748 = @"C_type$tuple$2__hash__" +py_cobjects(#10748) +py_cobjecttypes(#10748, #10005) +py_cobject_sources(#10748, 0) +py_cobjectnames(#10748, "__hash__") +py_cmembers_versioned(#10737, "__hash__", #10748, "2") +#10749 = @"C_type$tuple$2__iter__" +py_cobjects(#10749) +py_cobjecttypes(#10749, #10005) +py_cobject_sources(#10749, 0) +py_cobjectnames(#10749, "__iter__") +py_cmembers_versioned(#10737, "__iter__", #10749, "2") +#10750 = @"C_type$tuple$2__le__" +py_cobjects(#10750) +py_cobjecttypes(#10750, #10005) +py_cobject_sources(#10750, 0) +py_cobjectnames(#10750, "__le__") +py_cmembers_versioned(#10737, "__le__", #10750, "2") +#10751 = @"C_type$tuple$2__len__" +py_cobjects(#10751) +py_cobjecttypes(#10751, #10005) +py_cobject_sources(#10751, 0) +py_cobjectnames(#10751, "__len__") +py_cmembers_versioned(#10737, "__len__", #10751, "2") +#10752 = @"C_type$tuple$2__lt__" +py_cobjects(#10752) +py_cobjecttypes(#10752, #10005) +py_cobject_sources(#10752, 0) +py_cobjectnames(#10752, "__lt__") +py_cmembers_versioned(#10737, "__lt__", #10752, "2") +#10753 = @"C_type$tuple$2__mul__" +py_cobjects(#10753) +py_cobjecttypes(#10753, #10005) +py_cobject_sources(#10753, 0) +py_cobjectnames(#10753, "__mul__") +py_cmembers_versioned(#10737, "__mul__", #10753, "2") +#10754 = @"C_type$tuple$2__ne__" +py_cobjects(#10754) +py_cobjecttypes(#10754, #10005) +py_cobject_sources(#10754, 0) +py_cobjectnames(#10754, "__ne__") +py_cmembers_versioned(#10737, "__ne__", #10754, "2") +#10755 = @"C_type$tuple$2__new__" +py_cobjects(#10755) +py_cobjecttypes(#10755, #10075) +py_cobject_sources(#10755, 0) +py_cobjectnames(#10755, "__new__") +py_cmembers_versioned(#10737, "__new__", #10755, "2") +#10756 = @"C_type$tuple$2__repr__" +py_cobjects(#10756) +py_cobjecttypes(#10756, #10005) +py_cobject_sources(#10756, 0) +py_cobjectnames(#10756, "__repr__") +py_cmembers_versioned(#10737, "__repr__", #10756, "2") +#10757 = @"C_type$tuple$2__rmul__" +py_cobjects(#10757) +py_cobjecttypes(#10757, #10005) +py_cobject_sources(#10757, 0) +py_cobjectnames(#10757, "__rmul__") +py_cmembers_versioned(#10737, "__rmul__", #10757, "2") +#10758 = @"C_type$tuple$2count" +py_cobjects(#10758) +py_cobjecttypes(#10758, #10034) +py_cobject_sources(#10758, 0) +py_cobjectnames(#10758, "count") +py_cmembers_versioned(#10737, "count", #10758, "2") +#10759 = @"C_type$tuple$2index" +py_cobjects(#10759) +py_cobjecttypes(#10759, #10034) +py_cobject_sources(#10759, 0) +py_cobjectnames(#10759, "index") +py_cmembers_versioned(#10737, "index", #10759, "2") +py_cmembers_versioned(#10737, ".super.", #10021, "2") +py_cobjectnames(#10737, "tuple") +py_special_objects(#10737, "tuple") +#10760 = @"C_module$__builtin__" +#10761 = @"C_type$module" +py_cobjects(#10761) +py_cobjecttypes(#10761, #10001) +py_cobject_sources(#10761, 0) +#10762 = @"C_type$module$2__delattr__" +py_cobjects(#10762) +py_cobjecttypes(#10762, #10005) +py_cobject_sources(#10762, 0) +py_cobjectnames(#10762, "__delattr__") +py_cmembers_versioned(#10761, "__delattr__", #10762, "2") +#10763 = @"C_type$module$2__dict__" +py_cobjects(#10763) +py_cobjecttypes(#10763, #10045) +py_cobject_sources(#10763, 0) +py_cobjectnames(#10763, "__dict__") +py_cmembers_versioned(#10761, "__dict__", #10763, "2") +#10764 = @"C_bytes$22b943eaf3d5849337b6f59fba0ae00efc5e0139" +py_cobjects(#10764) +py_cobjecttypes(#10764, #10028) +py_cobject_sources(#10764, 0) +py_cobjectnames(#10764, "b'module(name[, doc]) + +Create a module object. +The name must be a string; the optional doc argument can have any type.'") +py_cmembers_versioned(#10761, "__doc__", #10764, "2") +#10765 = @"C_type$module$2__getattribute__" +py_cobjects(#10765) +py_cobjecttypes(#10765, #10005) +py_cobject_sources(#10765, 0) +py_cobjectnames(#10765, "__getattribute__") +py_cmembers_versioned(#10761, "__getattribute__", #10765, "2") +#10766 = @"C_type$module$2__init__" +py_cobjects(#10766) +py_cobjecttypes(#10766, #10005) +py_cobject_sources(#10766, 0) +py_cobjectnames(#10766, "__init__") +py_cmembers_versioned(#10761, "__init__", #10766, "2") +#10767 = @"C_type$module$2__new__" +py_cobjects(#10767) +py_cobjecttypes(#10767, #10075) +py_cobject_sources(#10767, 0) +py_cobjectnames(#10767, "__new__") +py_cmembers_versioned(#10761, "__new__", #10767, "2") +#10768 = @"C_type$module$2__repr__" +py_cobjects(#10768) +py_cobjecttypes(#10768, #10005) +py_cobject_sources(#10768, 0) +py_cobjectnames(#10768, "__repr__") +py_cmembers_versioned(#10761, "__repr__", #10768, "2") +#10769 = @"C_type$module$2__setattr__" +py_cobjects(#10769) +py_cobjecttypes(#10769, #10005) +py_cobject_sources(#10769, 0) +py_cobjectnames(#10769, "__setattr__") +py_cmembers_versioned(#10761, "__setattr__", #10769, "2") +py_cmembers_versioned(#10761, ".super.", #10021, "2") +py_cobjectnames(#10761, "module") +py_cobjects(#10760) +py_cobjecttypes(#10760, #10761) +py_cobject_sources(#10760, 0) +#10770 = @"C_type$ArithmeticError" +py_cobjects(#10770) +py_cobjecttypes(#10770, #10001) +py_cobject_sources(#10770, 0) +#10771 = @"C_bytes$61a47d6144643be8111a5d6cd38c70451edd75e0" +py_cobjects(#10771) +py_cobjecttypes(#10771, #10028) +py_cobject_sources(#10771, 0) +py_cobjectnames(#10771, "b'Base class for arithmetic errors.'") +py_cmembers_versioned(#10770, "__doc__", #10771, "2") +#10772 = @"C_type$ArithmeticError$2__init__" +py_cobjects(#10772) +py_cobjecttypes(#10772, #10005) +py_cobject_sources(#10772, 0) +py_cobjectnames(#10772, "__init__") +py_cmembers_versioned(#10770, "__init__", #10772, "2") +#10773 = @"C_type$ArithmeticError$2__new__" +py_cobjects(#10773) +py_cobjecttypes(#10773, #10075) +py_cobject_sources(#10773, 0) +py_cobjectnames(#10773, "__new__") +py_cmembers_versioned(#10770, "__new__", #10773, "2") +py_cmembers_versioned(#10770, ".super.", #10346, "2") +py_cobjectnames(#10770, "ArithmeticError") +py_cmembers_versioned(#10760, "ArithmeticError", #10770, "2") +#10774 = @"C_type$AssertionError" +py_cobjects(#10774) +py_cobjecttypes(#10774, #10001) +py_cobject_sources(#10774, 0) +#10775 = @"C_bytes$a42441c349b7bd38d1695189fc7bc6bf3aa17236" +py_cobjects(#10775) +py_cobjecttypes(#10775, #10028) +py_cobject_sources(#10775, 0) +py_cobjectnames(#10775, "b'Assertion failed.'") +py_cmembers_versioned(#10774, "__doc__", #10775, "2") +#10776 = @"C_type$AssertionError$2__init__" +py_cobjects(#10776) +py_cobjecttypes(#10776, #10005) +py_cobject_sources(#10776, 0) +py_cobjectnames(#10776, "__init__") +py_cmembers_versioned(#10774, "__init__", #10776, "2") +#10777 = @"C_type$AssertionError$2__new__" +py_cobjects(#10777) +py_cobjecttypes(#10777, #10075) +py_cobject_sources(#10777, 0) +py_cobjectnames(#10777, "__new__") +py_cmembers_versioned(#10774, "__new__", #10777, "2") +py_cmembers_versioned(#10774, ".super.", #10346, "2") +py_cobjectnames(#10774, "AssertionError") +py_cmembers_versioned(#10760, "AssertionError", #10774, "2") +py_cmembers_versioned(#10760, "AttributeError", #10433, "2") +py_cmembers_versioned(#10760, "BaseException", #10354, "2") +#10778 = @"C_type$BufferError" +py_cobjects(#10778) +py_cobjecttypes(#10778, #10001) +py_cobject_sources(#10778, 0) +#10779 = @"C_bytes$1f79f01081ea50a98f292e69ea9db957594bfa0b" +py_cobjects(#10779) +py_cobjecttypes(#10779, #10028) +py_cobject_sources(#10779, 0) +py_cobjectnames(#10779, "b'Buffer error.'") +py_cmembers_versioned(#10778, "__doc__", #10779, "2") +#10780 = @"C_type$BufferError$2__init__" +py_cobjects(#10780) +py_cobjecttypes(#10780, #10005) +py_cobject_sources(#10780, 0) +py_cobjectnames(#10780, "__init__") +py_cmembers_versioned(#10778, "__init__", #10780, "2") +#10781 = @"C_type$BufferError$2__new__" +py_cobjects(#10781) +py_cobjecttypes(#10781, #10075) +py_cobject_sources(#10781, 0) +py_cobjectnames(#10781, "__new__") +py_cmembers_versioned(#10778, "__new__", #10781, "2") +py_cmembers_versioned(#10778, ".super.", #10346, "2") +py_cobjectnames(#10778, "BufferError") +py_cmembers_versioned(#10760, "BufferError", #10778, "2") +#10782 = @"C_type$BytesWarning" +py_cobjects(#10782) +py_cobjecttypes(#10782, #10001) +py_cobject_sources(#10782, 0) +#10783 = @"C_bytes$9113ec3acba7d6fa8effaddd2e6c74ac46ae6b51" +py_cobjects(#10783) +py_cobjecttypes(#10783, #10028) +py_cobject_sources(#10783, 0) +py_cobjectnames(#10783, "b'Base class for warnings about bytes and bytearray related problems, +mostly related to comparing to str.'") +py_cmembers_versioned(#10782, "__doc__", #10783, "2") +#10784 = @"C_type$BytesWarning$2__init__" +py_cobjects(#10784) +py_cobjecttypes(#10784, #10005) +py_cobject_sources(#10784, 0) +py_cobjectnames(#10784, "__init__") +py_cmembers_versioned(#10782, "__init__", #10784, "2") +#10785 = @"C_type$BytesWarning$2__new__" +py_cobjects(#10785) +py_cobjecttypes(#10785, #10075) +py_cobject_sources(#10785, 0) +py_cobjectnames(#10785, "__new__") +py_cmembers_versioned(#10782, "__new__", #10785, "2") +#10786 = @"C_type$Warning" +py_cobjects(#10786) +py_cobjecttypes(#10786, #10001) +py_cobject_sources(#10786, 0) +#10787 = @"C_bytes$1a767590a449f53c349f02ce7bd8efd407590883" +py_cobjects(#10787) +py_cobjecttypes(#10787, #10028) +py_cobject_sources(#10787, 0) +py_cobjectnames(#10787, "b'Base class for warning categories.'") +py_cmembers_versioned(#10786, "__doc__", #10787, "2") +#10788 = @"C_type$Warning$2__init__" +py_cobjects(#10788) +py_cobjecttypes(#10788, #10005) +py_cobject_sources(#10788, 0) +py_cobjectnames(#10788, "__init__") +py_cmembers_versioned(#10786, "__init__", #10788, "2") +#10789 = @"C_type$Warning$2__new__" +py_cobjects(#10789) +py_cobjecttypes(#10789, #10075) +py_cobject_sources(#10789, 0) +py_cobjectnames(#10789, "__new__") +py_cmembers_versioned(#10786, "__new__", #10789, "2") +py_cmembers_versioned(#10786, ".super.", #10350, "2") +py_cobjectnames(#10786, "Warning") +py_cmembers_versioned(#10782, ".super.", #10786, "2") +py_cobjectnames(#10782, "BytesWarning") +py_cmembers_versioned(#10760, "BytesWarning", #10782, "2") +#10790 = @"C_type$DeprecationWarning" +py_cobjects(#10790) +py_cobjecttypes(#10790, #10001) +py_cobject_sources(#10790, 0) +#10791 = @"C_bytes$c3d3385fbf26988036950ac0c8772d37e0843a0c" +py_cobjects(#10791) +py_cobjecttypes(#10791, #10028) +py_cobject_sources(#10791, 0) +py_cobjectnames(#10791, "b'Base class for warnings about deprecated features.'") +py_cmembers_versioned(#10790, "__doc__", #10791, "2") +#10792 = @"C_type$DeprecationWarning$2__init__" +py_cobjects(#10792) +py_cobjecttypes(#10792, #10005) +py_cobject_sources(#10792, 0) +py_cobjectnames(#10792, "__init__") +py_cmembers_versioned(#10790, "__init__", #10792, "2") +#10793 = @"C_type$DeprecationWarning$2__new__" +py_cobjects(#10793) +py_cobjecttypes(#10793, #10075) +py_cobject_sources(#10793, 0) +py_cobjectnames(#10793, "__new__") +py_cmembers_versioned(#10790, "__new__", #10793, "2") +py_cmembers_versioned(#10790, ".super.", #10786, "2") +py_cobjectnames(#10790, "DeprecationWarning") +py_cmembers_versioned(#10760, "DeprecationWarning", #10790, "2") +#10794 = @"C_type$EOFError" +py_cobjects(#10794) +py_cobjecttypes(#10794, #10001) +py_cobject_sources(#10794, 0) +#10795 = @"C_bytes$bece27985c9f03cabf4c8b7c427263d5276b3f86" +py_cobjects(#10795) +py_cobjecttypes(#10795, #10028) +py_cobject_sources(#10795, 0) +py_cobjectnames(#10795, "b'Read beyond end of file.'") +py_cmembers_versioned(#10794, "__doc__", #10795, "2") +#10796 = @"C_type$EOFError$2__init__" +py_cobjects(#10796) +py_cobjecttypes(#10796, #10005) +py_cobject_sources(#10796, 0) +py_cobjectnames(#10796, "__init__") +py_cmembers_versioned(#10794, "__init__", #10796, "2") +#10797 = @"C_type$EOFError$2__new__" +py_cobjects(#10797) +py_cobjecttypes(#10797, #10075) +py_cobject_sources(#10797, 0) +py_cobjectnames(#10797, "__new__") +py_cmembers_versioned(#10794, "__new__", #10797, "2") +py_cmembers_versioned(#10794, ".super.", #10346, "2") +py_cobjectnames(#10794, "EOFError") +py_cmembers_versioned(#10760, "EOFError", #10794, "2") +#10798 = @"C_module$__builtin__$2Ellipsis" +#10799 = @"C_type$ellipsis" +py_cobjects(#10799) +py_cobjecttypes(#10799, #10001) +py_cobject_sources(#10799, 0) +py_cmembers_versioned(#10799, "__doc__", #10017, "2") +#10800 = @"C_type$ellipsis$2__getattribute__" +py_cobjects(#10800) +py_cobjecttypes(#10800, #10005) +py_cobject_sources(#10800, 0) +py_cobjectnames(#10800, "__getattribute__") +py_cmembers_versioned(#10799, "__getattribute__", #10800, "2") +#10801 = @"C_type$ellipsis$2__repr__" +py_cobjects(#10801) +py_cobjecttypes(#10801, #10005) +py_cobject_sources(#10801, 0) +py_cobjectnames(#10801, "__repr__") +py_cmembers_versioned(#10799, "__repr__", #10801, "2") +py_cmembers_versioned(#10799, ".super.", #10021, "2") +py_cobjectnames(#10799, "ellipsis") +py_cobjects(#10798) +py_cobjecttypes(#10798, #10799) +py_cobject_sources(#10798, 0) +py_cobjectnames(#10798, "object") +py_cmembers_versioned(#10760, "Ellipsis", #10798, "2") +#10802 = @"C_type$EnvironmentError" +py_cobjects(#10802) +py_cobjecttypes(#10802, #10001) +py_cobject_sources(#10802, 0) +#10803 = @"C_bytes$39224d5733534fbf85512214b0f2f0e10441ca46" +py_cobjects(#10803) +py_cobjecttypes(#10803, #10028) +py_cobject_sources(#10803, 0) +py_cobjectnames(#10803, "b'Base class for I/O related errors.'") +py_cmembers_versioned(#10802, "__doc__", #10803, "2") +#10804 = @"C_type$EnvironmentError$2__init__" +py_cobjects(#10804) +py_cobjecttypes(#10804, #10005) +py_cobject_sources(#10804, 0) +py_cobjectnames(#10804, "__init__") +py_cmembers_versioned(#10802, "__init__", #10804, "2") +#10805 = @"C_type$EnvironmentError$2__new__" +py_cobjects(#10805) +py_cobjecttypes(#10805, #10075) +py_cobject_sources(#10805, 0) +py_cobjectnames(#10805, "__new__") +py_cmembers_versioned(#10802, "__new__", #10805, "2") +#10806 = @"C_type$EnvironmentError$2__reduce__" +py_cobjects(#10806) +py_cobjecttypes(#10806, #10034) +py_cobject_sources(#10806, 0) +py_cobjectnames(#10806, "__reduce__") +py_cmembers_versioned(#10802, "__reduce__", #10806, "2") +#10807 = @"C_type$EnvironmentError$2__str__" +py_cobjects(#10807) +py_cobjecttypes(#10807, #10005) +py_cobject_sources(#10807, 0) +py_cobjectnames(#10807, "__str__") +py_cmembers_versioned(#10802, "__str__", #10807, "2") +#10808 = @"C_type$EnvironmentError$2errno" +py_cobjects(#10808) +py_cobjecttypes(#10808, #10045) +py_cobject_sources(#10808, 0) +py_cobjectnames(#10808, "errno") +py_cmembers_versioned(#10802, "errno", #10808, "2") +#10809 = @"C_type$EnvironmentError$2filename" +py_cobjects(#10809) +py_cobjecttypes(#10809, #10045) +py_cobject_sources(#10809, 0) +py_cobjectnames(#10809, "filename") +py_cmembers_versioned(#10802, "filename", #10809, "2") +#10810 = @"C_type$EnvironmentError$2strerror" +py_cobjects(#10810) +py_cobjecttypes(#10810, #10045) +py_cobject_sources(#10810, 0) +py_cobjectnames(#10810, "strerror") +py_cmembers_versioned(#10802, "strerror", #10810, "2") +py_cmembers_versioned(#10802, ".super.", #10346, "2") +py_cobjectnames(#10802, "EnvironmentError") +py_cmembers_versioned(#10760, "EnvironmentError", #10802, "2") +py_cmembers_versioned(#10760, "Exception", #10350, "2") +py_cmembers_versioned(#10760, "False", #10644, "2") +#10811 = @"C_type$FloatingPointError" +py_cobjects(#10811) +py_cobjecttypes(#10811, #10001) +py_cobject_sources(#10811, 0) +#10812 = @"C_bytes$c5dcd934c52b3fc4976bc52155c9333ecc39411b" +py_cobjects(#10812) +py_cobjecttypes(#10812, #10028) +py_cobject_sources(#10812, 0) +py_cobjectnames(#10812, "b'Floating point operation failed.'") +py_cmembers_versioned(#10811, "__doc__", #10812, "2") +#10813 = @"C_type$FloatingPointError$2__init__" +py_cobjects(#10813) +py_cobjecttypes(#10813, #10005) +py_cobject_sources(#10813, 0) +py_cobjectnames(#10813, "__init__") +py_cmembers_versioned(#10811, "__init__", #10813, "2") +#10814 = @"C_type$FloatingPointError$2__new__" +py_cobjects(#10814) +py_cobjecttypes(#10814, #10075) +py_cobject_sources(#10814, 0) +py_cobjectnames(#10814, "__new__") +py_cmembers_versioned(#10811, "__new__", #10814, "2") +py_cmembers_versioned(#10811, ".super.", #10770, "2") +py_cobjectnames(#10811, "FloatingPointError") +py_cmembers_versioned(#10760, "FloatingPointError", #10811, "2") +#10815 = @"C_type$FutureWarning" +py_cobjects(#10815) +py_cobjecttypes(#10815, #10001) +py_cobject_sources(#10815, 0) +#10816 = @"C_bytes$253310a83b68871dc4ca8c07585e813c414089b3" +py_cobjects(#10816) +py_cobjecttypes(#10816, #10028) +py_cobject_sources(#10816, 0) +py_cobjectnames(#10816, "b'Base class for warnings about constructs that will change semantically +in the future.'") +py_cmembers_versioned(#10815, "__doc__", #10816, "2") +#10817 = @"C_type$FutureWarning$2__init__" +py_cobjects(#10817) +py_cobjecttypes(#10817, #10005) +py_cobject_sources(#10817, 0) +py_cobjectnames(#10817, "__init__") +py_cmembers_versioned(#10815, "__init__", #10817, "2") +#10818 = @"C_type$FutureWarning$2__new__" +py_cobjects(#10818) +py_cobjecttypes(#10818, #10075) +py_cobject_sources(#10818, 0) +py_cobjectnames(#10818, "__new__") +py_cmembers_versioned(#10815, "__new__", #10818, "2") +py_cmembers_versioned(#10815, ".super.", #10786, "2") +py_cobjectnames(#10815, "FutureWarning") +py_cmembers_versioned(#10760, "FutureWarning", #10815, "2") +#10819 = @"C_type$GeneratorExit" +py_cobjects(#10819) +py_cobjecttypes(#10819, #10001) +py_cobject_sources(#10819, 0) +#10820 = @"C_bytes$8977819b8e1d63a633bd58892263b5b4b1ce904a" +py_cobjects(#10820) +py_cobjecttypes(#10820, #10028) +py_cobject_sources(#10820, 0) +py_cobjectnames(#10820, "b'Request that a generator exit.'") +py_cmembers_versioned(#10819, "__doc__", #10820, "2") +#10821 = @"C_type$GeneratorExit$2__init__" +py_cobjects(#10821) +py_cobjecttypes(#10821, #10005) +py_cobject_sources(#10821, 0) +py_cobjectnames(#10821, "__init__") +py_cmembers_versioned(#10819, "__init__", #10821, "2") +#10822 = @"C_type$GeneratorExit$2__new__" +py_cobjects(#10822) +py_cobjecttypes(#10822, #10075) +py_cobject_sources(#10822, 0) +py_cobjectnames(#10822, "__new__") +py_cmembers_versioned(#10819, "__new__", #10822, "2") +py_cmembers_versioned(#10819, ".super.", #10354, "2") +py_cobjectnames(#10819, "GeneratorExit") +py_cmembers_versioned(#10760, "GeneratorExit", #10819, "2") +#10823 = @"C_type$IOError" +py_cobjects(#10823) +py_cobjecttypes(#10823, #10001) +py_cobject_sources(#10823, 0) +#10824 = @"C_bytes$d67c8995c9017675bca359c35a060fffc1d2e752" +py_cobjects(#10824) +py_cobjecttypes(#10824, #10028) +py_cobject_sources(#10824, 0) +py_cobjectnames(#10824, "b'I/O operation failed.'") +py_cmembers_versioned(#10823, "__doc__", #10824, "2") +#10825 = @"C_type$IOError$2__init__" +py_cobjects(#10825) +py_cobjecttypes(#10825, #10005) +py_cobject_sources(#10825, 0) +py_cobjectnames(#10825, "__init__") +py_cmembers_versioned(#10823, "__init__", #10825, "2") +#10826 = @"C_type$IOError$2__new__" +py_cobjects(#10826) +py_cobjecttypes(#10826, #10075) +py_cobject_sources(#10826, 0) +py_cobjectnames(#10826, "__new__") +py_cmembers_versioned(#10823, "__new__", #10826, "2") +py_cmembers_versioned(#10823, ".super.", #10802, "2") +py_cobjectnames(#10823, "IOError") +py_cmembers_versioned(#10760, "IOError", #10823, "2") +#10827 = @"C_type$ImportError" +py_cobjects(#10827) +py_cobjecttypes(#10827, #10001) +py_cobject_sources(#10827, 0) +#10828 = @"C_bytes$21c1facbb75e3e004959ce7dac3a8ffa72d14efa" +py_cobjects(#10828) +py_cobjecttypes(#10828, #10028) +py_cobject_sources(#10828, 0) +py_cobjectnames(#10828, "b'Import can't find module, or can't find name in module.'") +py_cmembers_versioned(#10827, "__doc__", #10828, "2") +#10829 = @"C_type$ImportError$2__init__" +py_cobjects(#10829) +py_cobjecttypes(#10829, #10005) +py_cobject_sources(#10829, 0) +py_cobjectnames(#10829, "__init__") +py_cmembers_versioned(#10827, "__init__", #10829, "2") +#10830 = @"C_type$ImportError$2__new__" +py_cobjects(#10830) +py_cobjecttypes(#10830, #10075) +py_cobject_sources(#10830, 0) +py_cobjectnames(#10830, "__new__") +py_cmembers_versioned(#10827, "__new__", #10830, "2") +py_cmembers_versioned(#10827, ".super.", #10346, "2") +py_cobjectnames(#10827, "ImportError") +py_cmembers_versioned(#10760, "ImportError", #10827, "2") +#10831 = @"C_type$ImportWarning" +py_cobjects(#10831) +py_cobjecttypes(#10831, #10001) +py_cobject_sources(#10831, 0) +#10832 = @"C_bytes$72eeb2dd35c8136512635d8b99d694eacacdef0a" +py_cobjects(#10832) +py_cobjecttypes(#10832, #10028) +py_cobject_sources(#10832, 0) +py_cobjectnames(#10832, "b'Base class for warnings about probable mistakes in module imports'") +py_cmembers_versioned(#10831, "__doc__", #10832, "2") +#10833 = @"C_type$ImportWarning$2__init__" +py_cobjects(#10833) +py_cobjecttypes(#10833, #10005) +py_cobject_sources(#10833, 0) +py_cobjectnames(#10833, "__init__") +py_cmembers_versioned(#10831, "__init__", #10833, "2") +#10834 = @"C_type$ImportWarning$2__new__" +py_cobjects(#10834) +py_cobjecttypes(#10834, #10075) +py_cobject_sources(#10834, 0) +py_cobjectnames(#10834, "__new__") +py_cmembers_versioned(#10831, "__new__", #10834, "2") +py_cmembers_versioned(#10831, ".super.", #10786, "2") +py_cobjectnames(#10831, "ImportWarning") +py_cmembers_versioned(#10760, "ImportWarning", #10831, "2") +#10835 = @"C_type$IndentationError" +py_cobjects(#10835) +py_cobjecttypes(#10835, #10001) +py_cobject_sources(#10835, 0) +#10836 = @"C_bytes$d2993333f1c442637c5dd452ecfef78eb9055666" +py_cobjects(#10836) +py_cobjecttypes(#10836, #10028) +py_cobject_sources(#10836, 0) +py_cobjectnames(#10836, "b'Improper indentation.'") +py_cmembers_versioned(#10835, "__doc__", #10836, "2") +#10837 = @"C_type$IndentationError$2__init__" +py_cobjects(#10837) +py_cobjecttypes(#10837, #10005) +py_cobject_sources(#10837, 0) +py_cobjectnames(#10837, "__init__") +py_cmembers_versioned(#10835, "__init__", #10837, "2") +#10838 = @"C_type$IndentationError$2__new__" +py_cobjects(#10838) +py_cobjecttypes(#10838, #10075) +py_cobject_sources(#10838, 0) +py_cobjectnames(#10838, "__new__") +py_cmembers_versioned(#10835, "__new__", #10838, "2") +#10839 = @"C_type$SyntaxError" +py_cobjects(#10839) +py_cobjecttypes(#10839, #10001) +py_cobject_sources(#10839, 0) +#10840 = @"C_bytes$28213b9a5d59b61c3581f42fd6bd800017566bbe" +py_cobjects(#10840) +py_cobjecttypes(#10840, #10028) +py_cobject_sources(#10840, 0) +py_cobjectnames(#10840, "b'Invalid syntax.'") +py_cmembers_versioned(#10839, "__doc__", #10840, "2") +#10841 = @"C_type$SyntaxError$2__init__" +py_cobjects(#10841) +py_cobjecttypes(#10841, #10005) +py_cobject_sources(#10841, 0) +py_cobjectnames(#10841, "__init__") +py_cmembers_versioned(#10839, "__init__", #10841, "2") +#10842 = @"C_type$SyntaxError$2__new__" +py_cobjects(#10842) +py_cobjecttypes(#10842, #10075) +py_cobject_sources(#10842, 0) +py_cobjectnames(#10842, "__new__") +py_cmembers_versioned(#10839, "__new__", #10842, "2") +#10843 = @"C_type$SyntaxError$2__str__" +py_cobjects(#10843) +py_cobjecttypes(#10843, #10005) +py_cobject_sources(#10843, 0) +py_cobjectnames(#10843, "__str__") +py_cmembers_versioned(#10839, "__str__", #10843, "2") +#10844 = @"C_type$SyntaxError$2filename" +py_cobjects(#10844) +py_cobjecttypes(#10844, #10045) +py_cobject_sources(#10844, 0) +py_cobjectnames(#10844, "filename") +py_cmembers_versioned(#10839, "filename", #10844, "2") +#10845 = @"C_type$SyntaxError$2lineno" +py_cobjects(#10845) +py_cobjecttypes(#10845, #10045) +py_cobject_sources(#10845, 0) +py_cobjectnames(#10845, "lineno") +py_cmembers_versioned(#10839, "lineno", #10845, "2") +#10846 = @"C_type$SyntaxError$2msg" +py_cobjects(#10846) +py_cobjecttypes(#10846, #10045) +py_cobject_sources(#10846, 0) +py_cobjectnames(#10846, "msg") +py_cmembers_versioned(#10839, "msg", #10846, "2") +#10847 = @"C_type$SyntaxError$2offset" +py_cobjects(#10847) +py_cobjecttypes(#10847, #10045) +py_cobject_sources(#10847, 0) +py_cobjectnames(#10847, "offset") +py_cmembers_versioned(#10839, "offset", #10847, "2") +#10848 = @"C_type$SyntaxError$2print_file_and_line" +py_cobjects(#10848) +py_cobjecttypes(#10848, #10045) +py_cobject_sources(#10848, 0) +py_cobjectnames(#10848, "print_file_and_line") +py_cmembers_versioned(#10839, "print_file_and_line", #10848, "2") +#10849 = @"C_type$SyntaxError$2text" +py_cobjects(#10849) +py_cobjecttypes(#10849, #10045) +py_cobject_sources(#10849, 0) +py_cobjectnames(#10849, "text") +py_cmembers_versioned(#10839, "text", #10849, "2") +py_cmembers_versioned(#10839, ".super.", #10346, "2") +py_cobjectnames(#10839, "SyntaxError") +py_cmembers_versioned(#10835, ".super.", #10839, "2") +py_cobjectnames(#10835, "IndentationError") +py_cmembers_versioned(#10760, "IndentationError", #10835, "2") +#10850 = @"C_type$IndexError" +py_cobjects(#10850) +py_cobjecttypes(#10850, #10001) +py_cobject_sources(#10850, 0) +#10851 = @"C_bytes$e2bf5d749a504a9653f5e22f9f28b81478510e75" +py_cobjects(#10851) +py_cobjecttypes(#10851, #10028) +py_cobject_sources(#10851, 0) +py_cobjectnames(#10851, "b'Sequence index out of range.'") +py_cmembers_versioned(#10850, "__doc__", #10851, "2") +#10852 = @"C_type$IndexError$2__init__" +py_cobjects(#10852) +py_cobjecttypes(#10852, #10005) +py_cobject_sources(#10852, 0) +py_cobjectnames(#10852, "__init__") +py_cmembers_versioned(#10850, "__init__", #10852, "2") +#10853 = @"C_type$IndexError$2__new__" +py_cobjects(#10853) +py_cobjecttypes(#10853, #10075) +py_cobject_sources(#10853, 0) +py_cobjectnames(#10853, "__new__") +py_cmembers_versioned(#10850, "__new__", #10853, "2") +py_cmembers_versioned(#10850, ".super.", #10429, "2") +py_cobjectnames(#10850, "IndexError") +py_cmembers_versioned(#10760, "IndexError", #10850, "2") +py_cmembers_versioned(#10760, "KeyError", #10424, "2") +#10854 = @"C_type$KeyboardInterrupt" +py_cobjects(#10854) +py_cobjecttypes(#10854, #10001) +py_cobject_sources(#10854, 0) +#10855 = @"C_bytes$3027c1639d9aaf29dbb40c14d49e49b73fcddc02" +py_cobjects(#10855) +py_cobjecttypes(#10855, #10028) +py_cobject_sources(#10855, 0) +py_cobjectnames(#10855, "b'Program interrupted by user.'") +py_cmembers_versioned(#10854, "__doc__", #10855, "2") +#10856 = @"C_type$KeyboardInterrupt$2__init__" +py_cobjects(#10856) +py_cobjecttypes(#10856, #10005) +py_cobject_sources(#10856, 0) +py_cobjectnames(#10856, "__init__") +py_cmembers_versioned(#10854, "__init__", #10856, "2") +#10857 = @"C_type$KeyboardInterrupt$2__new__" +py_cobjects(#10857) +py_cobjecttypes(#10857, #10075) +py_cobject_sources(#10857, 0) +py_cobjectnames(#10857, "__new__") +py_cmembers_versioned(#10854, "__new__", #10857, "2") +py_cmembers_versioned(#10854, ".super.", #10354, "2") +py_cobjectnames(#10854, "KeyboardInterrupt") +py_cmembers_versioned(#10760, "KeyboardInterrupt", #10854, "2") +py_cmembers_versioned(#10760, "LookupError", #10429, "2") +#10858 = @"C_type$MemoryError" +py_cobjects(#10858) +py_cobjecttypes(#10858, #10001) +py_cobject_sources(#10858, 0) +#10859 = @"C_bytes$8287615f2ac89aad252242dec878907206c5210b" +py_cobjects(#10859) +py_cobjecttypes(#10859, #10028) +py_cobject_sources(#10859, 0) +py_cobjectnames(#10859, "b'Out of memory.'") +py_cmembers_versioned(#10858, "__doc__", #10859, "2") +#10860 = @"C_type$MemoryError$2__init__" +py_cobjects(#10860) +py_cobjecttypes(#10860, #10005) +py_cobject_sources(#10860, 0) +py_cobjectnames(#10860, "__init__") +py_cmembers_versioned(#10858, "__init__", #10860, "2") +#10861 = @"C_type$MemoryError$2__new__" +py_cobjects(#10861) +py_cobjecttypes(#10861, #10075) +py_cobject_sources(#10861, 0) +py_cobjectnames(#10861, "__new__") +py_cmembers_versioned(#10858, "__new__", #10861, "2") +py_cmembers_versioned(#10858, ".super.", #10346, "2") +py_cobjectnames(#10858, "MemoryError") +py_cmembers_versioned(#10760, "MemoryError", #10858, "2") +#10862 = @"C_type$NameError" +py_cobjects(#10862) +py_cobjecttypes(#10862, #10001) +py_cobject_sources(#10862, 0) +#10863 = @"C_bytes$3ee40dae3c3262da06ab3dd1f71e2e35167fc2c9" +py_cobjects(#10863) +py_cobjecttypes(#10863, #10028) +py_cobject_sources(#10863, 0) +py_cobjectnames(#10863, "b'Name not found globally.'") +py_cmembers_versioned(#10862, "__doc__", #10863, "2") +#10864 = @"C_type$NameError$2__init__" +py_cobjects(#10864) +py_cobjecttypes(#10864, #10005) +py_cobject_sources(#10864, 0) +py_cobjectnames(#10864, "__init__") +py_cmembers_versioned(#10862, "__init__", #10864, "2") +#10865 = @"C_type$NameError$2__new__" +py_cobjects(#10865) +py_cobjecttypes(#10865, #10075) +py_cobject_sources(#10865, 0) +py_cobjectnames(#10865, "__new__") +py_cmembers_versioned(#10862, "__new__", #10865, "2") +py_cmembers_versioned(#10862, ".super.", #10346, "2") +py_cobjectnames(#10862, "NameError") +py_cmembers_versioned(#10760, "NameError", #10862, "2") +py_cmembers_versioned(#10760, "None", #10017, "2") +#10866 = @"C_module$__builtin__$2NotImplemented" +#10867 = @"C_type$NotImplementedType" +py_cobjects(#10867) +py_cobjecttypes(#10867, #10001) +py_cobject_sources(#10867, 0) +py_cmembers_versioned(#10867, "__doc__", #10017, "2") +#10868 = @"C_type$NotImplementedType$2__repr__" +py_cobjects(#10868) +py_cobjecttypes(#10868, #10005) +py_cobject_sources(#10868, 0) +py_cobjectnames(#10868, "__repr__") +py_cmembers_versioned(#10867, "__repr__", #10868, "2") +py_cmembers_versioned(#10867, ".super.", #10021, "2") +py_cobjectnames(#10867, "NotImplementedType") +py_cobjects(#10866) +py_cobjecttypes(#10866, #10867) +py_cobject_sources(#10866, 0) +py_cobjectnames(#10866, "object") +py_cmembers_versioned(#10760, "NotImplemented", #10866, "2") +#10869 = @"C_type$NotImplementedError" +py_cobjects(#10869) +py_cobjecttypes(#10869, #10001) +py_cobject_sources(#10869, 0) +#10870 = @"C_bytes$e964a68e9c66aee1b350d0f97ba35e25939ba6c5" +py_cobjects(#10870) +py_cobjecttypes(#10870, #10028) +py_cobject_sources(#10870, 0) +py_cobjectnames(#10870, "b'Method or function hasn't been implemented yet.'") +py_cmembers_versioned(#10869, "__doc__", #10870, "2") +#10871 = @"C_type$NotImplementedError$2__init__" +py_cobjects(#10871) +py_cobjecttypes(#10871, #10005) +py_cobject_sources(#10871, 0) +py_cobjectnames(#10871, "__init__") +py_cmembers_versioned(#10869, "__init__", #10871, "2") +#10872 = @"C_type$NotImplementedError$2__new__" +py_cobjects(#10872) +py_cobjecttypes(#10872, #10075) +py_cobject_sources(#10872, 0) +py_cobjectnames(#10872, "__new__") +py_cmembers_versioned(#10869, "__new__", #10872, "2") +#10873 = @"C_type$RuntimeError" +py_cobjects(#10873) +py_cobjecttypes(#10873, #10001) +py_cobject_sources(#10873, 0) +#10874 = @"C_bytes$c32922004f1cab6d2b368005f373dc639dc0003a" +py_cobjects(#10874) +py_cobjecttypes(#10874, #10028) +py_cobject_sources(#10874, 0) +py_cobjectnames(#10874, "b'Unspecified run-time error.'") +py_cmembers_versioned(#10873, "__doc__", #10874, "2") +#10875 = @"C_type$RuntimeError$2__init__" +py_cobjects(#10875) +py_cobjecttypes(#10875, #10005) +py_cobject_sources(#10875, 0) +py_cobjectnames(#10875, "__init__") +py_cmembers_versioned(#10873, "__init__", #10875, "2") +#10876 = @"C_type$RuntimeError$2__new__" +py_cobjects(#10876) +py_cobjecttypes(#10876, #10075) +py_cobject_sources(#10876, 0) +py_cobjectnames(#10876, "__new__") +py_cmembers_versioned(#10873, "__new__", #10876, "2") +py_cmembers_versioned(#10873, ".super.", #10346, "2") +py_cobjectnames(#10873, "RuntimeError") +py_cmembers_versioned(#10869, ".super.", #10873, "2") +py_cobjectnames(#10869, "NotImplementedError") +py_cmembers_versioned(#10760, "NotImplementedError", #10869, "2") +#10877 = @"C_type$OSError" +py_cobjects(#10877) +py_cobjecttypes(#10877, #10001) +py_cobject_sources(#10877, 0) +#10878 = @"C_bytes$7c5e876e4f80392a70ac8970ce5b0afb23116479" +py_cobjects(#10878) +py_cobjecttypes(#10878, #10028) +py_cobject_sources(#10878, 0) +py_cobjectnames(#10878, "b'OS system call failed.'") +py_cmembers_versioned(#10877, "__doc__", #10878, "2") +#10879 = @"C_type$OSError$2__init__" +py_cobjects(#10879) +py_cobjecttypes(#10879, #10005) +py_cobject_sources(#10879, 0) +py_cobjectnames(#10879, "__init__") +py_cmembers_versioned(#10877, "__init__", #10879, "2") +#10880 = @"C_type$OSError$2__new__" +py_cobjects(#10880) +py_cobjecttypes(#10880, #10075) +py_cobject_sources(#10880, 0) +py_cobjectnames(#10880, "__new__") +py_cmembers_versioned(#10877, "__new__", #10880, "2") +py_cmembers_versioned(#10877, ".super.", #10802, "2") +py_cobjectnames(#10877, "OSError") +py_cmembers_versioned(#10760, "OSError", #10877, "2") +#10881 = @"C_type$OverflowError" +py_cobjects(#10881) +py_cobjecttypes(#10881, #10001) +py_cobject_sources(#10881, 0) +#10882 = @"C_bytes$81fc8eb0f559594e6743ac282bd13b3850623c63" +py_cobjects(#10882) +py_cobjecttypes(#10882, #10028) +py_cobject_sources(#10882, 0) +py_cobjectnames(#10882, "b'Result too large to be represented.'") +py_cmembers_versioned(#10881, "__doc__", #10882, "2") +#10883 = @"C_type$OverflowError$2__init__" +py_cobjects(#10883) +py_cobjecttypes(#10883, #10005) +py_cobject_sources(#10883, 0) +py_cobjectnames(#10883, "__init__") +py_cmembers_versioned(#10881, "__init__", #10883, "2") +#10884 = @"C_type$OverflowError$2__new__" +py_cobjects(#10884) +py_cobjecttypes(#10884, #10075) +py_cobject_sources(#10884, 0) +py_cobjectnames(#10884, "__new__") +py_cmembers_versioned(#10881, "__new__", #10884, "2") +py_cmembers_versioned(#10881, ".super.", #10770, "2") +py_cobjectnames(#10881, "OverflowError") +py_cmembers_versioned(#10760, "OverflowError", #10881, "2") +#10885 = @"C_type$PendingDeprecationWarning" +py_cobjects(#10885) +py_cobjecttypes(#10885, #10001) +py_cobject_sources(#10885, 0) +#10886 = @"C_bytes$6ede2da8b6b07148b234b6899810b8c42567c0df" +py_cobjects(#10886) +py_cobjecttypes(#10886, #10028) +py_cobject_sources(#10886, 0) +py_cobjectnames(#10886, "b'Base class for warnings about features which will be deprecated +in the future.'") +py_cmembers_versioned(#10885, "__doc__", #10886, "2") +#10887 = @"C_type$PendingDeprecationWarning$2__init__" +py_cobjects(#10887) +py_cobjecttypes(#10887, #10005) +py_cobject_sources(#10887, 0) +py_cobjectnames(#10887, "__init__") +py_cmembers_versioned(#10885, "__init__", #10887, "2") +#10888 = @"C_type$PendingDeprecationWarning$2__new__" +py_cobjects(#10888) +py_cobjecttypes(#10888, #10075) +py_cobject_sources(#10888, 0) +py_cobjectnames(#10888, "__new__") +py_cmembers_versioned(#10885, "__new__", #10888, "2") +py_cmembers_versioned(#10885, ".super.", #10786, "2") +py_cobjectnames(#10885, "PendingDeprecationWarning") +py_cmembers_versioned(#10760, "PendingDeprecationWarning", #10885, "2") +#10889 = @"C_type$ReferenceError" +py_cobjects(#10889) +py_cobjecttypes(#10889, #10001) +py_cobject_sources(#10889, 0) +#10890 = @"C_bytes$74d9e10154774d897708037af3911e85f791d151" +py_cobjects(#10890) +py_cobjecttypes(#10890, #10028) +py_cobject_sources(#10890, 0) +py_cobjectnames(#10890, "b'Weak ref proxy used after referent went away.'") +py_cmembers_versioned(#10889, "__doc__", #10890, "2") +#10891 = @"C_type$ReferenceError$2__init__" +py_cobjects(#10891) +py_cobjecttypes(#10891, #10005) +py_cobject_sources(#10891, 0) +py_cobjectnames(#10891, "__init__") +py_cmembers_versioned(#10889, "__init__", #10891, "2") +#10892 = @"C_type$ReferenceError$2__new__" +py_cobjects(#10892) +py_cobjecttypes(#10892, #10075) +py_cobject_sources(#10892, 0) +py_cobjectnames(#10892, "__new__") +py_cmembers_versioned(#10889, "__new__", #10892, "2") +py_cmembers_versioned(#10889, ".super.", #10346, "2") +py_cobjectnames(#10889, "ReferenceError") +py_cmembers_versioned(#10760, "ReferenceError", #10889, "2") +py_cmembers_versioned(#10760, "RuntimeError", #10873, "2") +#10893 = @"C_type$RuntimeWarning" +py_cobjects(#10893) +py_cobjecttypes(#10893, #10001) +py_cobject_sources(#10893, 0) +#10894 = @"C_bytes$1d911ad966f332393c3708556614e73ed1cbd284" +py_cobjects(#10894) +py_cobjecttypes(#10894, #10028) +py_cobject_sources(#10894, 0) +py_cobjectnames(#10894, "b'Base class for warnings about dubious runtime behavior.'") +py_cmembers_versioned(#10893, "__doc__", #10894, "2") +#10895 = @"C_type$RuntimeWarning$2__init__" +py_cobjects(#10895) +py_cobjecttypes(#10895, #10005) +py_cobject_sources(#10895, 0) +py_cobjectnames(#10895, "__init__") +py_cmembers_versioned(#10893, "__init__", #10895, "2") +#10896 = @"C_type$RuntimeWarning$2__new__" +py_cobjects(#10896) +py_cobjecttypes(#10896, #10075) +py_cobject_sources(#10896, 0) +py_cobjectnames(#10896, "__new__") +py_cmembers_versioned(#10893, "__new__", #10896, "2") +py_cmembers_versioned(#10893, ".super.", #10786, "2") +py_cobjectnames(#10893, "RuntimeWarning") +py_cmembers_versioned(#10760, "RuntimeWarning", #10893, "2") +py_cmembers_versioned(#10760, "StandardError", #10346, "2") +#10897 = @"C_type$StopIteration" +py_cobjects(#10897) +py_cobjecttypes(#10897, #10001) +py_cobject_sources(#10897, 0) +#10898 = @"C_bytes$54ddb31db0c09a5a734a28d48c4c9b5e24827897" +py_cobjects(#10898) +py_cobjecttypes(#10898, #10028) +py_cobject_sources(#10898, 0) +py_cobjectnames(#10898, "b'Signal the end from iterator.next().'") +py_cmembers_versioned(#10897, "__doc__", #10898, "2") +#10899 = @"C_type$StopIteration$2__init__" +py_cobjects(#10899) +py_cobjecttypes(#10899, #10005) +py_cobject_sources(#10899, 0) +py_cobjectnames(#10899, "__init__") +py_cmembers_versioned(#10897, "__init__", #10899, "2") +#10900 = @"C_type$StopIteration$2__new__" +py_cobjects(#10900) +py_cobjecttypes(#10900, #10075) +py_cobject_sources(#10900, 0) +py_cobjectnames(#10900, "__new__") +py_cmembers_versioned(#10897, "__new__", #10900, "2") +py_cmembers_versioned(#10897, ".super.", #10350, "2") +py_cobjectnames(#10897, "StopIteration") +py_cmembers_versioned(#10760, "StopIteration", #10897, "2") +py_cmembers_versioned(#10760, "SyntaxError", #10839, "2") +#10901 = @"C_type$SyntaxWarning" +py_cobjects(#10901) +py_cobjecttypes(#10901, #10001) +py_cobject_sources(#10901, 0) +#10902 = @"C_bytes$ed11da738626db6bc66dc76605890a35049a6b1f" +py_cobjects(#10902) +py_cobjecttypes(#10902, #10028) +py_cobject_sources(#10902, 0) +py_cobjectnames(#10902, "b'Base class for warnings about dubious syntax.'") +py_cmembers_versioned(#10901, "__doc__", #10902, "2") +#10903 = @"C_type$SyntaxWarning$2__init__" +py_cobjects(#10903) +py_cobjecttypes(#10903, #10005) +py_cobject_sources(#10903, 0) +py_cobjectnames(#10903, "__init__") +py_cmembers_versioned(#10901, "__init__", #10903, "2") +#10904 = @"C_type$SyntaxWarning$2__new__" +py_cobjects(#10904) +py_cobjecttypes(#10904, #10075) +py_cobject_sources(#10904, 0) +py_cobjectnames(#10904, "__new__") +py_cmembers_versioned(#10901, "__new__", #10904, "2") +py_cmembers_versioned(#10901, ".super.", #10786, "2") +py_cobjectnames(#10901, "SyntaxWarning") +py_cmembers_versioned(#10760, "SyntaxWarning", #10901, "2") +#10905 = @"C_type$SystemError" +py_cobjects(#10905) +py_cobjecttypes(#10905, #10001) +py_cobject_sources(#10905, 0) +#10906 = @"C_bytes$c1cf6790d4b65381912240b56b1abfccd1180511" +py_cobjects(#10906) +py_cobjecttypes(#10906, #10028) +py_cobject_sources(#10906, 0) +py_cobjectnames(#10906, "b'Internal error in the Python interpreter. + +Please report this to the Python maintainer, along with the traceback, +the Python version, and the hardware/OS platform and version.'") +py_cmembers_versioned(#10905, "__doc__", #10906, "2") +#10907 = @"C_type$SystemError$2__init__" +py_cobjects(#10907) +py_cobjecttypes(#10907, #10005) +py_cobject_sources(#10907, 0) +py_cobjectnames(#10907, "__init__") +py_cmembers_versioned(#10905, "__init__", #10907, "2") +#10908 = @"C_type$SystemError$2__new__" +py_cobjects(#10908) +py_cobjecttypes(#10908, #10075) +py_cobject_sources(#10908, 0) +py_cobjectnames(#10908, "__new__") +py_cmembers_versioned(#10905, "__new__", #10908, "2") +py_cmembers_versioned(#10905, ".super.", #10346, "2") +py_cobjectnames(#10905, "SystemError") +py_cmembers_versioned(#10760, "SystemError", #10905, "2") +#10909 = @"C_type$SystemExit" +py_cobjects(#10909) +py_cobjecttypes(#10909, #10001) +py_cobject_sources(#10909, 0) +#10910 = @"C_bytes$0f79405337feb97687ba9164ec3f11c719c6781d" +py_cobjects(#10910) +py_cobjecttypes(#10910, #10028) +py_cobject_sources(#10910, 0) +py_cobjectnames(#10910, "b'Request to exit from the interpreter.'") +py_cmembers_versioned(#10909, "__doc__", #10910, "2") +#10911 = @"C_type$SystemExit$2__init__" +py_cobjects(#10911) +py_cobjecttypes(#10911, #10005) +py_cobject_sources(#10911, 0) +py_cobjectnames(#10911, "__init__") +py_cmembers_versioned(#10909, "__init__", #10911, "2") +#10912 = @"C_type$SystemExit$2__new__" +py_cobjects(#10912) +py_cobjecttypes(#10912, #10075) +py_cobject_sources(#10912, 0) +py_cobjectnames(#10912, "__new__") +py_cmembers_versioned(#10909, "__new__", #10912, "2") +#10913 = @"C_type$SystemExit$2code" +py_cobjects(#10913) +py_cobjecttypes(#10913, #10045) +py_cobject_sources(#10913, 0) +py_cobjectnames(#10913, "code") +py_cmembers_versioned(#10909, "code", #10913, "2") +py_cmembers_versioned(#10909, ".super.", #10354, "2") +py_cobjectnames(#10909, "SystemExit") +py_cmembers_versioned(#10760, "SystemExit", #10909, "2") +#10914 = @"C_type$TabError" +py_cobjects(#10914) +py_cobjecttypes(#10914, #10001) +py_cobject_sources(#10914, 0) +#10915 = @"C_bytes$1f00990056c2ec84fb4412b2042ae8b7fa911445" +py_cobjects(#10915) +py_cobjecttypes(#10915, #10028) +py_cobject_sources(#10915, 0) +py_cobjectnames(#10915, "b'Improper mixture of spaces and tabs.'") +py_cmembers_versioned(#10914, "__doc__", #10915, "2") +#10916 = @"C_type$TabError$2__init__" +py_cobjects(#10916) +py_cobjecttypes(#10916, #10005) +py_cobject_sources(#10916, 0) +py_cobjectnames(#10916, "__init__") +py_cmembers_versioned(#10914, "__init__", #10916, "2") +#10917 = @"C_type$TabError$2__new__" +py_cobjects(#10917) +py_cobjecttypes(#10917, #10075) +py_cobject_sources(#10917, 0) +py_cobjectnames(#10917, "__new__") +py_cmembers_versioned(#10914, "__new__", #10917, "2") +py_cmembers_versioned(#10914, ".super.", #10835, "2") +py_cobjectnames(#10914, "TabError") +py_cmembers_versioned(#10760, "TabError", #10914, "2") +py_cmembers_versioned(#10760, "True", #10437, "2") +py_cmembers_versioned(#10760, "TypeError", #10342, "2") +#10918 = @"C_type$UnboundLocalError" +py_cobjects(#10918) +py_cobjecttypes(#10918, #10001) +py_cobject_sources(#10918, 0) +#10919 = @"C_bytes$71efb90adabbeacc59d1e4c9d90d3013f6b44b8d" +py_cobjects(#10919) +py_cobjecttypes(#10919, #10028) +py_cobject_sources(#10919, 0) +py_cobjectnames(#10919, "b'Local name referenced but not bound to a value.'") +py_cmembers_versioned(#10918, "__doc__", #10919, "2") +#10920 = @"C_type$UnboundLocalError$2__init__" +py_cobjects(#10920) +py_cobjecttypes(#10920, #10005) +py_cobject_sources(#10920, 0) +py_cobjectnames(#10920, "__init__") +py_cmembers_versioned(#10918, "__init__", #10920, "2") +#10921 = @"C_type$UnboundLocalError$2__new__" +py_cobjects(#10921) +py_cobjecttypes(#10921, #10075) +py_cobject_sources(#10921, 0) +py_cobjectnames(#10921, "__new__") +py_cmembers_versioned(#10918, "__new__", #10921, "2") +py_cmembers_versioned(#10918, ".super.", #10862, "2") +py_cobjectnames(#10918, "UnboundLocalError") +py_cmembers_versioned(#10760, "UnboundLocalError", #10918, "2") +#10922 = @"C_type$UnicodeDecodeError" +py_cobjects(#10922) +py_cobjecttypes(#10922, #10001) +py_cobject_sources(#10922, 0) +#10923 = @"C_bytes$098d73af685a30da73d6dff0e94c51a62adfb3df" +py_cobjects(#10923) +py_cobjecttypes(#10923, #10028) +py_cobject_sources(#10923, 0) +py_cobjectnames(#10923, "b'Unicode decoding error.'") +py_cmembers_versioned(#10922, "__doc__", #10923, "2") +#10924 = @"C_type$UnicodeDecodeError$2__init__" +py_cobjects(#10924) +py_cobjecttypes(#10924, #10005) +py_cobject_sources(#10924, 0) +py_cobjectnames(#10924, "__init__") +py_cmembers_versioned(#10922, "__init__", #10924, "2") +#10925 = @"C_type$UnicodeDecodeError$2__new__" +py_cobjects(#10925) +py_cobjecttypes(#10925, #10075) +py_cobject_sources(#10925, 0) +py_cobjectnames(#10925, "__new__") +py_cmembers_versioned(#10922, "__new__", #10925, "2") +#10926 = @"C_type$UnicodeDecodeError$2__str__" +py_cobjects(#10926) +py_cobjecttypes(#10926, #10005) +py_cobject_sources(#10926, 0) +py_cobjectnames(#10926, "__str__") +py_cmembers_versioned(#10922, "__str__", #10926, "2") +#10927 = @"C_type$UnicodeDecodeError$2encoding" +py_cobjects(#10927) +py_cobjecttypes(#10927, #10045) +py_cobject_sources(#10927, 0) +py_cobjectnames(#10927, "encoding") +py_cmembers_versioned(#10922, "encoding", #10927, "2") +#10928 = @"C_type$UnicodeDecodeError$2end" +py_cobjects(#10928) +py_cobjecttypes(#10928, #10045) +py_cobject_sources(#10928, 0) +py_cobjectnames(#10928, "end") +py_cmembers_versioned(#10922, "end", #10928, "2") +#10929 = @"C_type$UnicodeDecodeError$2object" +py_cobjects(#10929) +py_cobjecttypes(#10929, #10045) +py_cobject_sources(#10929, 0) +py_cobjectnames(#10929, "object") +py_cmembers_versioned(#10922, "object", #10929, "2") +#10930 = @"C_type$UnicodeDecodeError$2reason" +py_cobjects(#10930) +py_cobjecttypes(#10930, #10045) +py_cobject_sources(#10930, 0) +py_cobjectnames(#10930, "reason") +py_cmembers_versioned(#10922, "reason", #10930, "2") +#10931 = @"C_type$UnicodeDecodeError$2start" +py_cobjects(#10931) +py_cobjecttypes(#10931, #10045) +py_cobject_sources(#10931, 0) +py_cobjectnames(#10931, "start") +py_cmembers_versioned(#10922, "start", #10931, "2") +#10932 = @"C_type$UnicodeError" +py_cobjects(#10932) +py_cobjecttypes(#10932, #10001) +py_cobject_sources(#10932, 0) +#10933 = @"C_bytes$3a19c41c9f0652da65b386921d70709b4c6fa67d" +py_cobjects(#10933) +py_cobjecttypes(#10933, #10028) +py_cobject_sources(#10933, 0) +py_cobjectnames(#10933, "b'Unicode related error.'") +py_cmembers_versioned(#10932, "__doc__", #10933, "2") +#10934 = @"C_type$UnicodeError$2__init__" +py_cobjects(#10934) +py_cobjecttypes(#10934, #10005) +py_cobject_sources(#10934, 0) +py_cobjectnames(#10934, "__init__") +py_cmembers_versioned(#10932, "__init__", #10934, "2") +#10935 = @"C_type$UnicodeError$2__new__" +py_cobjects(#10935) +py_cobjecttypes(#10935, #10075) +py_cobject_sources(#10935, 0) +py_cobjectnames(#10935, "__new__") +py_cmembers_versioned(#10932, "__new__", #10935, "2") +#10936 = @"C_type$ValueError" +py_cobjects(#10936) +py_cobjecttypes(#10936, #10001) +py_cobject_sources(#10936, 0) +#10937 = @"C_bytes$1e87860add337182f95f7a558dc68165585485f7" +py_cobjects(#10937) +py_cobjecttypes(#10937, #10028) +py_cobject_sources(#10937, 0) +py_cobjectnames(#10937, "b'Inappropriate argument value (of correct type).'") +py_cmembers_versioned(#10936, "__doc__", #10937, "2") +#10938 = @"C_type$ValueError$2__init__" +py_cobjects(#10938) +py_cobjecttypes(#10938, #10005) +py_cobject_sources(#10938, 0) +py_cobjectnames(#10938, "__init__") +py_cmembers_versioned(#10936, "__init__", #10938, "2") +#10939 = @"C_type$ValueError$2__new__" +py_cobjects(#10939) +py_cobjecttypes(#10939, #10075) +py_cobject_sources(#10939, 0) +py_cobjectnames(#10939, "__new__") +py_cmembers_versioned(#10936, "__new__", #10939, "2") +py_cmembers_versioned(#10936, ".super.", #10346, "2") +py_cobjectnames(#10936, "ValueError") +py_cmembers_versioned(#10932, ".super.", #10936, "2") +py_cobjectnames(#10932, "UnicodeError") +py_cmembers_versioned(#10922, ".super.", #10932, "2") +py_cobjectnames(#10922, "UnicodeDecodeError") +py_cmembers_versioned(#10760, "UnicodeDecodeError", #10922, "2") +#10940 = @"C_type$UnicodeEncodeError" +py_cobjects(#10940) +py_cobjecttypes(#10940, #10001) +py_cobject_sources(#10940, 0) +#10941 = @"C_bytes$d7f716fab2cf715e5b3c0dc3336bbbdb18e1b03a" +py_cobjects(#10941) +py_cobjecttypes(#10941, #10028) +py_cobject_sources(#10941, 0) +py_cobjectnames(#10941, "b'Unicode encoding error.'") +py_cmembers_versioned(#10940, "__doc__", #10941, "2") +#10942 = @"C_type$UnicodeEncodeError$2__init__" +py_cobjects(#10942) +py_cobjecttypes(#10942, #10005) +py_cobject_sources(#10942, 0) +py_cobjectnames(#10942, "__init__") +py_cmembers_versioned(#10940, "__init__", #10942, "2") +#10943 = @"C_type$UnicodeEncodeError$2__new__" +py_cobjects(#10943) +py_cobjecttypes(#10943, #10075) +py_cobject_sources(#10943, 0) +py_cobjectnames(#10943, "__new__") +py_cmembers_versioned(#10940, "__new__", #10943, "2") +#10944 = @"C_type$UnicodeEncodeError$2__str__" +py_cobjects(#10944) +py_cobjecttypes(#10944, #10005) +py_cobject_sources(#10944, 0) +py_cobjectnames(#10944, "__str__") +py_cmembers_versioned(#10940, "__str__", #10944, "2") +#10945 = @"C_type$UnicodeEncodeError$2encoding" +py_cobjects(#10945) +py_cobjecttypes(#10945, #10045) +py_cobject_sources(#10945, 0) +py_cobjectnames(#10945, "encoding") +py_cmembers_versioned(#10940, "encoding", #10945, "2") +#10946 = @"C_type$UnicodeEncodeError$2end" +py_cobjects(#10946) +py_cobjecttypes(#10946, #10045) +py_cobject_sources(#10946, 0) +py_cobjectnames(#10946, "end") +py_cmembers_versioned(#10940, "end", #10946, "2") +#10947 = @"C_type$UnicodeEncodeError$2object" +py_cobjects(#10947) +py_cobjecttypes(#10947, #10045) +py_cobject_sources(#10947, 0) +py_cobjectnames(#10947, "object") +py_cmembers_versioned(#10940, "object", #10947, "2") +#10948 = @"C_type$UnicodeEncodeError$2reason" +py_cobjects(#10948) +py_cobjecttypes(#10948, #10045) +py_cobject_sources(#10948, 0) +py_cobjectnames(#10948, "reason") +py_cmembers_versioned(#10940, "reason", #10948, "2") +#10949 = @"C_type$UnicodeEncodeError$2start" +py_cobjects(#10949) +py_cobjecttypes(#10949, #10045) +py_cobject_sources(#10949, 0) +py_cobjectnames(#10949, "start") +py_cmembers_versioned(#10940, "start", #10949, "2") +py_cmembers_versioned(#10940, ".super.", #10932, "2") +py_cobjectnames(#10940, "UnicodeEncodeError") +py_cmembers_versioned(#10760, "UnicodeEncodeError", #10940, "2") +py_cmembers_versioned(#10760, "UnicodeError", #10932, "2") +#10950 = @"C_type$UnicodeTranslateError" +py_cobjects(#10950) +py_cobjecttypes(#10950, #10001) +py_cobject_sources(#10950, 0) +#10951 = @"C_bytes$cee41dba9177b2a51dac7bada4e5d4506e08c9ba" +py_cobjects(#10951) +py_cobjecttypes(#10951, #10028) +py_cobject_sources(#10951, 0) +py_cobjectnames(#10951, "b'Unicode translation error.'") +py_cmembers_versioned(#10950, "__doc__", #10951, "2") +#10952 = @"C_type$UnicodeTranslateError$2__init__" +py_cobjects(#10952) +py_cobjecttypes(#10952, #10005) +py_cobject_sources(#10952, 0) +py_cobjectnames(#10952, "__init__") +py_cmembers_versioned(#10950, "__init__", #10952, "2") +#10953 = @"C_type$UnicodeTranslateError$2__new__" +py_cobjects(#10953) +py_cobjecttypes(#10953, #10075) +py_cobject_sources(#10953, 0) +py_cobjectnames(#10953, "__new__") +py_cmembers_versioned(#10950, "__new__", #10953, "2") +#10954 = @"C_type$UnicodeTranslateError$2__str__" +py_cobjects(#10954) +py_cobjecttypes(#10954, #10005) +py_cobject_sources(#10954, 0) +py_cobjectnames(#10954, "__str__") +py_cmembers_versioned(#10950, "__str__", #10954, "2") +#10955 = @"C_type$UnicodeTranslateError$2encoding" +py_cobjects(#10955) +py_cobjecttypes(#10955, #10045) +py_cobject_sources(#10955, 0) +py_cobjectnames(#10955, "encoding") +py_cmembers_versioned(#10950, "encoding", #10955, "2") +#10956 = @"C_type$UnicodeTranslateError$2end" +py_cobjects(#10956) +py_cobjecttypes(#10956, #10045) +py_cobject_sources(#10956, 0) +py_cobjectnames(#10956, "end") +py_cmembers_versioned(#10950, "end", #10956, "2") +#10957 = @"C_type$UnicodeTranslateError$2object" +py_cobjects(#10957) +py_cobjecttypes(#10957, #10045) +py_cobject_sources(#10957, 0) +py_cobjectnames(#10957, "object") +py_cmembers_versioned(#10950, "object", #10957, "2") +#10958 = @"C_type$UnicodeTranslateError$2reason" +py_cobjects(#10958) +py_cobjecttypes(#10958, #10045) +py_cobject_sources(#10958, 0) +py_cobjectnames(#10958, "reason") +py_cmembers_versioned(#10950, "reason", #10958, "2") +#10959 = @"C_type$UnicodeTranslateError$2start" +py_cobjects(#10959) +py_cobjecttypes(#10959, #10045) +py_cobject_sources(#10959, 0) +py_cobjectnames(#10959, "start") +py_cmembers_versioned(#10950, "start", #10959, "2") +py_cmembers_versioned(#10950, ".super.", #10932, "2") +py_cobjectnames(#10950, "UnicodeTranslateError") +py_cmembers_versioned(#10760, "UnicodeTranslateError", #10950, "2") +#10960 = @"C_type$UnicodeWarning" +py_cobjects(#10960) +py_cobjecttypes(#10960, #10001) +py_cobject_sources(#10960, 0) +#10961 = @"C_bytes$267b90f523a75b12513886062a42ff88d744c729" +py_cobjects(#10961) +py_cobjecttypes(#10961, #10028) +py_cobject_sources(#10961, 0) +py_cobjectnames(#10961, "b'Base class for warnings about Unicode related problems, mostly +related to conversion problems.'") +py_cmembers_versioned(#10960, "__doc__", #10961, "2") +#10962 = @"C_type$UnicodeWarning$2__init__" +py_cobjects(#10962) +py_cobjecttypes(#10962, #10005) +py_cobject_sources(#10962, 0) +py_cobjectnames(#10962, "__init__") +py_cmembers_versioned(#10960, "__init__", #10962, "2") +#10963 = @"C_type$UnicodeWarning$2__new__" +py_cobjects(#10963) +py_cobjecttypes(#10963, #10075) +py_cobject_sources(#10963, 0) +py_cobjectnames(#10963, "__new__") +py_cmembers_versioned(#10960, "__new__", #10963, "2") +py_cmembers_versioned(#10960, ".super.", #10786, "2") +py_cobjectnames(#10960, "UnicodeWarning") +py_cmembers_versioned(#10760, "UnicodeWarning", #10960, "2") +#10964 = @"C_type$UserWarning" +py_cobjects(#10964) +py_cobjecttypes(#10964, #10001) +py_cobject_sources(#10964, 0) +#10965 = @"C_bytes$a020b0a894b4052b6ee113d3143b9d2aef84bb79" +py_cobjects(#10965) +py_cobjecttypes(#10965, #10028) +py_cobject_sources(#10965, 0) +py_cobjectnames(#10965, "b'Base class for warnings generated by user code.'") +py_cmembers_versioned(#10964, "__doc__", #10965, "2") +#10966 = @"C_type$UserWarning$2__init__" +py_cobjects(#10966) +py_cobjecttypes(#10966, #10005) +py_cobject_sources(#10966, 0) +py_cobjectnames(#10966, "__init__") +py_cmembers_versioned(#10964, "__init__", #10966, "2") +#10967 = @"C_type$UserWarning$2__new__" +py_cobjects(#10967) +py_cobjecttypes(#10967, #10075) +py_cobject_sources(#10967, 0) +py_cobjectnames(#10967, "__new__") +py_cmembers_versioned(#10964, "__new__", #10967, "2") +py_cmembers_versioned(#10964, ".super.", #10786, "2") +py_cobjectnames(#10964, "UserWarning") +py_cmembers_versioned(#10760, "UserWarning", #10964, "2") +py_cmembers_versioned(#10760, "ValueError", #10936, "2") +py_cmembers_versioned(#10760, "Warning", #10786, "2") +#10968 = @"C_type$ZeroDivisionError" +py_cobjects(#10968) +py_cobjecttypes(#10968, #10001) +py_cobject_sources(#10968, 0) +#10969 = @"C_bytes$ac840e5e9ea92a5fee400dc28afbc156de91a254" +py_cobjects(#10969) +py_cobjecttypes(#10969, #10028) +py_cobject_sources(#10969, 0) +py_cobjectnames(#10969, "b'Second argument to a division or modulo operation was zero.'") +py_cmembers_versioned(#10968, "__doc__", #10969, "2") +#10970 = @"C_type$ZeroDivisionError$2__init__" +py_cobjects(#10970) +py_cobjecttypes(#10970, #10005) +py_cobject_sources(#10970, 0) +py_cobjectnames(#10970, "__init__") +py_cmembers_versioned(#10968, "__init__", #10970, "2") +#10971 = @"C_type$ZeroDivisionError$2__new__" +py_cobjects(#10971) +py_cobjecttypes(#10971, #10075) +py_cobject_sources(#10971, 0) +py_cobjectnames(#10971, "__new__") +py_cmembers_versioned(#10968, "__new__", #10971, "2") +py_cmembers_versioned(#10968, ".super.", #10770, "2") +py_cobjectnames(#10968, "ZeroDivisionError") +py_cmembers_versioned(#10760, "ZeroDivisionError", #10968, "2") +py_cmembers_versioned(#10760, "__debug__", #10437, "2") +#10972 = @"C_bytes$f54dca68bb1cb438b5052c4a03ef13626ccf985f" +py_cobjects(#10972) +py_cobjecttypes(#10972, #10028) +py_cobject_sources(#10972, 0) +py_cobjectnames(#10972, "b'Built-in functions, exceptions, and other objects. + +Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.'") +py_cmembers_versioned(#10760, "__doc__", #10972, "2") +#10973 = @"C_builtin_function_or_method$builtins.__import__" +py_cobjects(#10973) +py_cobjecttypes(#10973, #10075) +py_cobject_sources(#10973, 0) +py_cobjectnames(#10973, "__import__") +py_cmembers_versioned(#10760, "__import__", #10973, "2") +#10974 = @"C_bytes$3f91ef9b413ce508f0382fd3b182901dfb6bb0ce" +py_cobjects(#10974) +py_cobjecttypes(#10974, #10028) +py_cobject_sources(#10974, 0) +py_cobjectnames(#10974, "b'__builtin__'") +py_cmembers_versioned(#10760, "__name__", #10974, "2") +py_cmembers_versioned(#10760, "__package__", #10017, "2") +#10975 = @"C_builtin_function_or_method$builtins.abs" +py_cobjects(#10975) +py_cobjecttypes(#10975, #10075) +py_cobject_sources(#10975, 0) +py_cobjectnames(#10975, "abs") +py_cmembers_versioned(#10760, "abs", #10975, "2") +#10976 = @"C_builtin_function_or_method$builtins.all" +py_cobjects(#10976) +py_cobjecttypes(#10976, #10075) +py_cobject_sources(#10976, 0) +py_cobjectnames(#10976, "all") +py_cmembers_versioned(#10760, "all", #10976, "2") +#10977 = @"C_builtin_function_or_method$builtins.any" +py_cobjects(#10977) +py_cobjecttypes(#10977, #10075) +py_cobject_sources(#10977, 0) +py_cobjectnames(#10977, "any") +py_cmembers_versioned(#10760, "any", #10977, "2") +#10978 = @"C_builtin_function_or_method$builtins.apply" +py_cobjects(#10978) +py_cobjecttypes(#10978, #10075) +py_cobject_sources(#10978, 0) +py_cobjectnames(#10978, "apply") +py_cmembers_versioned(#10760, "apply", #10978, "2") +py_cmembers_versioned(#10760, "basestring", #10151, "2") +#10979 = @"C_builtin_function_or_method$builtins.bin" +py_cobjects(#10979) +py_cobjecttypes(#10979, #10075) +py_cobject_sources(#10979, 0) +py_cobjectnames(#10979, "bin") +py_cmembers_versioned(#10760, "bin", #10979, "2") +py_cmembers_versioned(#10760, "bool", #10438, "2") +#10980 = @"C_type$buffer" +py_cobjects(#10980) +py_cobjecttypes(#10980, #10001) +py_cobject_sources(#10980, 0) +#10981 = @"C_type$buffer$2__add__" +py_cobjects(#10981) +py_cobjecttypes(#10981, #10005) +py_cobject_sources(#10981, 0) +py_cobjectnames(#10981, "__add__") +py_cmembers_versioned(#10980, "__add__", #10981, "2") +#10982 = @"C_type$buffer$2__cmp__" +py_cobjects(#10982) +py_cobjecttypes(#10982, #10005) +py_cobject_sources(#10982, 0) +py_cobjectnames(#10982, "__cmp__") +py_cmembers_versioned(#10980, "__cmp__", #10982, "2") +#10983 = @"C_type$buffer$2__delitem__" +py_cobjects(#10983) +py_cobjecttypes(#10983, #10005) +py_cobject_sources(#10983, 0) +py_cobjectnames(#10983, "__delitem__") +py_cmembers_versioned(#10980, "__delitem__", #10983, "2") +#10984 = @"C_type$buffer$2__delslice__" +py_cobjects(#10984) +py_cobjecttypes(#10984, #10005) +py_cobject_sources(#10984, 0) +py_cobjectnames(#10984, "__delslice__") +py_cmembers_versioned(#10980, "__delslice__", #10984, "2") +#10985 = @"C_bytes$3e544df634e6e37fcef65d071bf3d36d7bca6069" +py_cobjects(#10985) +py_cobjecttypes(#10985, #10028) +py_cobject_sources(#10985, 0) +py_cobjectnames(#10985, "b'buffer(object [, offset[, size]]) + +Create a new buffer object which references the given object. +The buffer will reference a slice of the target object from the +start of the object (or at the specified offset). The slice will +extend to the end of the target object (or with the specified size).'") +py_cmembers_versioned(#10980, "__doc__", #10985, "2") +#10986 = @"C_type$buffer$2__getattribute__" +py_cobjects(#10986) +py_cobjecttypes(#10986, #10005) +py_cobject_sources(#10986, 0) +py_cobjectnames(#10986, "__getattribute__") +py_cmembers_versioned(#10980, "__getattribute__", #10986, "2") +#10987 = @"C_type$buffer$2__getitem__" +py_cobjects(#10987) +py_cobjecttypes(#10987, #10005) +py_cobject_sources(#10987, 0) +py_cobjectnames(#10987, "__getitem__") +py_cmembers_versioned(#10980, "__getitem__", #10987, "2") +#10988 = @"C_type$buffer$2__getslice__" +py_cobjects(#10988) +py_cobjecttypes(#10988, #10005) +py_cobject_sources(#10988, 0) +py_cobjectnames(#10988, "__getslice__") +py_cmembers_versioned(#10980, "__getslice__", #10988, "2") +#10989 = @"C_type$buffer$2__hash__" +py_cobjects(#10989) +py_cobjecttypes(#10989, #10005) +py_cobject_sources(#10989, 0) +py_cobjectnames(#10989, "__hash__") +py_cmembers_versioned(#10980, "__hash__", #10989, "2") +#10990 = @"C_type$buffer$2__len__" +py_cobjects(#10990) +py_cobjecttypes(#10990, #10005) +py_cobject_sources(#10990, 0) +py_cobjectnames(#10990, "__len__") +py_cmembers_versioned(#10980, "__len__", #10990, "2") +#10991 = @"C_type$buffer$2__mul__" +py_cobjects(#10991) +py_cobjecttypes(#10991, #10005) +py_cobject_sources(#10991, 0) +py_cobjectnames(#10991, "__mul__") +py_cmembers_versioned(#10980, "__mul__", #10991, "2") +#10992 = @"C_type$buffer$2__new__" +py_cobjects(#10992) +py_cobjecttypes(#10992, #10075) +py_cobject_sources(#10992, 0) +py_cobjectnames(#10992, "__new__") +py_cmembers_versioned(#10980, "__new__", #10992, "2") +#10993 = @"C_type$buffer$2__repr__" +py_cobjects(#10993) +py_cobjecttypes(#10993, #10005) +py_cobject_sources(#10993, 0) +py_cobjectnames(#10993, "__repr__") +py_cmembers_versioned(#10980, "__repr__", #10993, "2") +#10994 = @"C_type$buffer$2__rmul__" +py_cobjects(#10994) +py_cobjecttypes(#10994, #10005) +py_cobject_sources(#10994, 0) +py_cobjectnames(#10994, "__rmul__") +py_cmembers_versioned(#10980, "__rmul__", #10994, "2") +#10995 = @"C_type$buffer$2__setitem__" +py_cobjects(#10995) +py_cobjecttypes(#10995, #10005) +py_cobject_sources(#10995, 0) +py_cobjectnames(#10995, "__setitem__") +py_cmembers_versioned(#10980, "__setitem__", #10995, "2") +#10996 = @"C_type$buffer$2__setslice__" +py_cobjects(#10996) +py_cobjecttypes(#10996, #10005) +py_cobject_sources(#10996, 0) +py_cobjectnames(#10996, "__setslice__") +py_cmembers_versioned(#10980, "__setslice__", #10996, "2") +#10997 = @"C_type$buffer$2__str__" +py_cobjects(#10997) +py_cobjecttypes(#10997, #10005) +py_cobject_sources(#10997, 0) +py_cobjectnames(#10997, "__str__") +py_cmembers_versioned(#10980, "__str__", #10997, "2") +py_cmembers_versioned(#10980, ".super.", #10021, "2") +py_cobjectnames(#10980, "buffer") +py_cmembers_versioned(#10760, "buffer", #10980, "2") +#10998 = @"C_type$bytearray" +py_cobjects(#10998) +py_cobjecttypes(#10998, #10001) +py_cobject_sources(#10998, 0) +#10999 = @"C_type$bytearray$2__add__" +py_cobjects(#10999) +py_cobjecttypes(#10999, #10005) +py_cobject_sources(#10999, 0) +py_cobjectnames(#10999, "__add__") +py_cmembers_versioned(#10998, "__add__", #10999, "2") +#11000 = @"C_type$bytearray$2__alloc__" +py_cobjects(#11000) +py_cobjecttypes(#11000, #10034) +py_cobject_sources(#11000, 0) +py_cobjectnames(#11000, "__alloc__") +py_cmembers_versioned(#10998, "__alloc__", #11000, "2") +#11001 = @"C_type$bytearray$2__contains__" +py_cobjects(#11001) +py_cobjecttypes(#11001, #10005) +py_cobject_sources(#11001, 0) +py_cobjectnames(#11001, "__contains__") +py_cmembers_versioned(#10998, "__contains__", #11001, "2") +#11002 = @"C_type$bytearray$2__delitem__" +py_cobjects(#11002) +py_cobjecttypes(#11002, #10005) +py_cobject_sources(#11002, 0) +py_cobjectnames(#11002, "__delitem__") +py_cmembers_versioned(#10998, "__delitem__", #11002, "2") +#11003 = @"C_bytes$a16af28a6e31a275c76a7782f231d141e5b94cc0" +py_cobjects(#11003) +py_cobjecttypes(#11003, #10028) +py_cobject_sources(#11003, 0) +py_cobjectnames(#11003, "b'bytearray(iterable_of_ints) -> bytearray. +bytearray(string, encoding[, errors]) -> bytearray. +bytearray(bytes_or_bytearray) -> mutable copy of bytes_or_bytearray. +bytearray(memory_view) -> bytearray. + +Construct a mutable bytearray object from: + - an iterable yielding integers in range(256) + - a text string encoded using the specified encoding + - a bytes or a bytearray object + - any object implementing the buffer API. + +bytearray(int) -> bytearray. + +Construct a zero-initialized bytearray of the given length.'") +py_cmembers_versioned(#10998, "__doc__", #11003, "2") +#11004 = @"C_type$bytearray$2__eq__" +py_cobjects(#11004) +py_cobjecttypes(#11004, #10005) +py_cobject_sources(#11004, 0) +py_cobjectnames(#11004, "__eq__") +py_cmembers_versioned(#10998, "__eq__", #11004, "2") +#11005 = @"C_type$bytearray$2__ge__" +py_cobjects(#11005) +py_cobjecttypes(#11005, #10005) +py_cobject_sources(#11005, 0) +py_cobjectnames(#11005, "__ge__") +py_cmembers_versioned(#10998, "__ge__", #11005, "2") +#11006 = @"C_type$bytearray$2__getattribute__" +py_cobjects(#11006) +py_cobjecttypes(#11006, #10005) +py_cobject_sources(#11006, 0) +py_cobjectnames(#11006, "__getattribute__") +py_cmembers_versioned(#10998, "__getattribute__", #11006, "2") +#11007 = @"C_type$bytearray$2__getitem__" +py_cobjects(#11007) +py_cobjecttypes(#11007, #10005) +py_cobject_sources(#11007, 0) +py_cobjectnames(#11007, "__getitem__") +py_cmembers_versioned(#10998, "__getitem__", #11007, "2") +#11008 = @"C_type$bytearray$2__gt__" +py_cobjects(#11008) +py_cobjecttypes(#11008, #10005) +py_cobject_sources(#11008, 0) +py_cobjectnames(#11008, "__gt__") +py_cmembers_versioned(#10998, "__gt__", #11008, "2") +#11009 = @"C_type$bytearray$2__iadd__" +py_cobjects(#11009) +py_cobjecttypes(#11009, #10005) +py_cobject_sources(#11009, 0) +py_cobjectnames(#11009, "__iadd__") +py_cmembers_versioned(#10998, "__iadd__", #11009, "2") +#11010 = @"C_type$bytearray$2__imul__" +py_cobjects(#11010) +py_cobjecttypes(#11010, #10005) +py_cobject_sources(#11010, 0) +py_cobjectnames(#11010, "__imul__") +py_cmembers_versioned(#10998, "__imul__", #11010, "2") +#11011 = @"C_type$bytearray$2__init__" +py_cobjects(#11011) +py_cobjecttypes(#11011, #10005) +py_cobject_sources(#11011, 0) +py_cobjectnames(#11011, "__init__") +py_cmembers_versioned(#10998, "__init__", #11011, "2") +#11012 = @"C_type$bytearray$2__iter__" +py_cobjects(#11012) +py_cobjecttypes(#11012, #10005) +py_cobject_sources(#11012, 0) +py_cobjectnames(#11012, "__iter__") +py_cmembers_versioned(#10998, "__iter__", #11012, "2") +#11013 = @"C_type$bytearray$2__le__" +py_cobjects(#11013) +py_cobjecttypes(#11013, #10005) +py_cobject_sources(#11013, 0) +py_cobjectnames(#11013, "__le__") +py_cmembers_versioned(#10998, "__le__", #11013, "2") +#11014 = @"C_type$bytearray$2__len__" +py_cobjects(#11014) +py_cobjecttypes(#11014, #10005) +py_cobject_sources(#11014, 0) +py_cobjectnames(#11014, "__len__") +py_cmembers_versioned(#10998, "__len__", #11014, "2") +#11015 = @"C_type$bytearray$2__lt__" +py_cobjects(#11015) +py_cobjecttypes(#11015, #10005) +py_cobject_sources(#11015, 0) +py_cobjectnames(#11015, "__lt__") +py_cmembers_versioned(#10998, "__lt__", #11015, "2") +#11016 = @"C_type$bytearray$2__mul__" +py_cobjects(#11016) +py_cobjecttypes(#11016, #10005) +py_cobject_sources(#11016, 0) +py_cobjectnames(#11016, "__mul__") +py_cmembers_versioned(#10998, "__mul__", #11016, "2") +#11017 = @"C_type$bytearray$2__ne__" +py_cobjects(#11017) +py_cobjecttypes(#11017, #10005) +py_cobject_sources(#11017, 0) +py_cobjectnames(#11017, "__ne__") +py_cmembers_versioned(#10998, "__ne__", #11017, "2") +#11018 = @"C_type$bytearray$2__new__" +py_cobjects(#11018) +py_cobjecttypes(#11018, #10075) +py_cobject_sources(#11018, 0) +py_cobjectnames(#11018, "__new__") +py_cmembers_versioned(#10998, "__new__", #11018, "2") +#11019 = @"C_type$bytearray$2__reduce__" +py_cobjects(#11019) +py_cobjecttypes(#11019, #10034) +py_cobject_sources(#11019, 0) +py_cobjectnames(#11019, "__reduce__") +py_cmembers_versioned(#10998, "__reduce__", #11019, "2") +#11020 = @"C_type$bytearray$2__repr__" +py_cobjects(#11020) +py_cobjecttypes(#11020, #10005) +py_cobject_sources(#11020, 0) +py_cobjectnames(#11020, "__repr__") +py_cmembers_versioned(#10998, "__repr__", #11020, "2") +#11021 = @"C_type$bytearray$2__rmul__" +py_cobjects(#11021) +py_cobjecttypes(#11021, #10005) +py_cobject_sources(#11021, 0) +py_cobjectnames(#11021, "__rmul__") +py_cmembers_versioned(#10998, "__rmul__", #11021, "2") +#11022 = @"C_type$bytearray$2__setitem__" +py_cobjects(#11022) +py_cobjecttypes(#11022, #10005) +py_cobject_sources(#11022, 0) +py_cobjectnames(#11022, "__setitem__") +py_cmembers_versioned(#10998, "__setitem__", #11022, "2") +#11023 = @"C_type$bytearray$2__sizeof__" +py_cobjects(#11023) +py_cobjecttypes(#11023, #10034) +py_cobject_sources(#11023, 0) +py_cobjectnames(#11023, "__sizeof__") +py_cmembers_versioned(#10998, "__sizeof__", #11023, "2") +#11024 = @"C_type$bytearray$2__str__" +py_cobjects(#11024) +py_cobjecttypes(#11024, #10005) +py_cobject_sources(#11024, 0) +py_cobjectnames(#11024, "__str__") +py_cmembers_versioned(#10998, "__str__", #11024, "2") +#11025 = @"C_type$bytearray$2append" +py_cobjects(#11025) +py_cobjecttypes(#11025, #10034) +py_cobject_sources(#11025, 0) +py_cobjectnames(#11025, "append") +py_cmembers_versioned(#10998, "append", #11025, "2") +#11026 = @"C_type$bytearray$2capitalize" +py_cobjects(#11026) +py_cobjecttypes(#11026, #10034) +py_cobject_sources(#11026, 0) +py_cobjectnames(#11026, "capitalize") +py_cmembers_versioned(#10998, "capitalize", #11026, "2") +#11027 = @"C_type$bytearray$2center" +py_cobjects(#11027) +py_cobjecttypes(#11027, #10034) +py_cobject_sources(#11027, 0) +py_cobjectnames(#11027, "center") +py_cmembers_versioned(#10998, "center", #11027, "2") +#11028 = @"C_type$bytearray$2count" +py_cobjects(#11028) +py_cobjecttypes(#11028, #10034) +py_cobject_sources(#11028, 0) +py_cobjectnames(#11028, "count") +py_cmembers_versioned(#10998, "count", #11028, "2") +#11029 = @"C_type$bytearray$2decode" +py_cobjects(#11029) +py_cobjecttypes(#11029, #10034) +py_cobject_sources(#11029, 0) +py_cobjectnames(#11029, "decode") +py_cmembers_versioned(#10998, "decode", #11029, "2") +#11030 = @"C_type$bytearray$2endswith" +py_cobjects(#11030) +py_cobjecttypes(#11030, #10034) +py_cobject_sources(#11030, 0) +py_cobjectnames(#11030, "endswith") +py_cmembers_versioned(#10998, "endswith", #11030, "2") +#11031 = @"C_type$bytearray$2expandtabs" +py_cobjects(#11031) +py_cobjecttypes(#11031, #10034) +py_cobject_sources(#11031, 0) +py_cobjectnames(#11031, "expandtabs") +py_cmembers_versioned(#10998, "expandtabs", #11031, "2") +#11032 = @"C_type$bytearray$2extend" +py_cobjects(#11032) +py_cobjecttypes(#11032, #10034) +py_cobject_sources(#11032, 0) +py_cobjectnames(#11032, "extend") +py_cmembers_versioned(#10998, "extend", #11032, "2") +#11033 = @"C_type$bytearray$2find" +py_cobjects(#11033) +py_cobjecttypes(#11033, #10034) +py_cobject_sources(#11033, 0) +py_cobjectnames(#11033, "find") +py_cmembers_versioned(#10998, "find", #11033, "2") +#11034 = @"C_type$bytearray$2fromhex" +py_cobjects(#11034) +py_cobjecttypes(#11034, #10169) +py_cobject_sources(#11034, 0) +py_cobjectnames(#11034, "fromhex") +py_cmembers_versioned(#10998, "fromhex", #11034, "2") +#11035 = @"C_type$bytearray$2index" +py_cobjects(#11035) +py_cobjecttypes(#11035, #10034) +py_cobject_sources(#11035, 0) +py_cobjectnames(#11035, "index") +py_cmembers_versioned(#10998, "index", #11035, "2") +#11036 = @"C_type$bytearray$2insert" +py_cobjects(#11036) +py_cobjecttypes(#11036, #10034) +py_cobject_sources(#11036, 0) +py_cobjectnames(#11036, "insert") +py_cmembers_versioned(#10998, "insert", #11036, "2") +#11037 = @"C_type$bytearray$2isalnum" +py_cobjects(#11037) +py_cobjecttypes(#11037, #10034) +py_cobject_sources(#11037, 0) +py_cobjectnames(#11037, "isalnum") +py_cmembers_versioned(#10998, "isalnum", #11037, "2") +#11038 = @"C_type$bytearray$2isalpha" +py_cobjects(#11038) +py_cobjecttypes(#11038, #10034) +py_cobject_sources(#11038, 0) +py_cobjectnames(#11038, "isalpha") +py_cmembers_versioned(#10998, "isalpha", #11038, "2") +#11039 = @"C_type$bytearray$2isdigit" +py_cobjects(#11039) +py_cobjecttypes(#11039, #10034) +py_cobject_sources(#11039, 0) +py_cobjectnames(#11039, "isdigit") +py_cmembers_versioned(#10998, "isdigit", #11039, "2") +#11040 = @"C_type$bytearray$2islower" +py_cobjects(#11040) +py_cobjecttypes(#11040, #10034) +py_cobject_sources(#11040, 0) +py_cobjectnames(#11040, "islower") +py_cmembers_versioned(#10998, "islower", #11040, "2") +#11041 = @"C_type$bytearray$2isspace" +py_cobjects(#11041) +py_cobjecttypes(#11041, #10034) +py_cobject_sources(#11041, 0) +py_cobjectnames(#11041, "isspace") +py_cmembers_versioned(#10998, "isspace", #11041, "2") +#11042 = @"C_type$bytearray$2istitle" +py_cobjects(#11042) +py_cobjecttypes(#11042, #10034) +py_cobject_sources(#11042, 0) +py_cobjectnames(#11042, "istitle") +py_cmembers_versioned(#10998, "istitle", #11042, "2") +#11043 = @"C_type$bytearray$2isupper" +py_cobjects(#11043) +py_cobjecttypes(#11043, #10034) +py_cobject_sources(#11043, 0) +py_cobjectnames(#11043, "isupper") +py_cmembers_versioned(#10998, "isupper", #11043, "2") +#11044 = @"C_type$bytearray$2join" +py_cobjects(#11044) +py_cobjecttypes(#11044, #10034) +py_cobject_sources(#11044, 0) +py_cobjectnames(#11044, "join") +py_cmembers_versioned(#10998, "join", #11044, "2") +#11045 = @"C_type$bytearray$2ljust" +py_cobjects(#11045) +py_cobjecttypes(#11045, #10034) +py_cobject_sources(#11045, 0) +py_cobjectnames(#11045, "ljust") +py_cmembers_versioned(#10998, "ljust", #11045, "2") +#11046 = @"C_type$bytearray$2lower" +py_cobjects(#11046) +py_cobjecttypes(#11046, #10034) +py_cobject_sources(#11046, 0) +py_cobjectnames(#11046, "lower") +py_cmembers_versioned(#10998, "lower", #11046, "2") +#11047 = @"C_type$bytearray$2lstrip" +py_cobjects(#11047) +py_cobjecttypes(#11047, #10034) +py_cobject_sources(#11047, 0) +py_cobjectnames(#11047, "lstrip") +py_cmembers_versioned(#10998, "lstrip", #11047, "2") +#11048 = @"C_type$bytearray$2partition" +py_cobjects(#11048) +py_cobjecttypes(#11048, #10034) +py_cobject_sources(#11048, 0) +py_cobjectnames(#11048, "partition") +py_cmembers_versioned(#10998, "partition", #11048, "2") +#11049 = @"C_type$bytearray$2pop" +py_cobjects(#11049) +py_cobjecttypes(#11049, #10034) +py_cobject_sources(#11049, 0) +py_cobjectnames(#11049, "pop") +py_cmembers_versioned(#10998, "pop", #11049, "2") +#11050 = @"C_type$bytearray$2remove" +py_cobjects(#11050) +py_cobjecttypes(#11050, #10034) +py_cobject_sources(#11050, 0) +py_cobjectnames(#11050, "remove") +py_cmembers_versioned(#10998, "remove", #11050, "2") +#11051 = @"C_type$bytearray$2replace" +py_cobjects(#11051) +py_cobjecttypes(#11051, #10034) +py_cobject_sources(#11051, 0) +py_cobjectnames(#11051, "replace") +py_cmembers_versioned(#10998, "replace", #11051, "2") +#11052 = @"C_type$bytearray$2reverse" +py_cobjects(#11052) +py_cobjecttypes(#11052, #10034) +py_cobject_sources(#11052, 0) +py_cobjectnames(#11052, "reverse") +py_cmembers_versioned(#10998, "reverse", #11052, "2") +#11053 = @"C_type$bytearray$2rfind" +py_cobjects(#11053) +py_cobjecttypes(#11053, #10034) +py_cobject_sources(#11053, 0) +py_cobjectnames(#11053, "rfind") +py_cmembers_versioned(#10998, "rfind", #11053, "2") +#11054 = @"C_type$bytearray$2rindex" +py_cobjects(#11054) +py_cobjecttypes(#11054, #10034) +py_cobject_sources(#11054, 0) +py_cobjectnames(#11054, "rindex") +py_cmembers_versioned(#10998, "rindex", #11054, "2") +#11055 = @"C_type$bytearray$2rjust" +py_cobjects(#11055) +py_cobjecttypes(#11055, #10034) +py_cobject_sources(#11055, 0) +py_cobjectnames(#11055, "rjust") +py_cmembers_versioned(#10998, "rjust", #11055, "2") +#11056 = @"C_type$bytearray$2rpartition" +py_cobjects(#11056) +py_cobjecttypes(#11056, #10034) +py_cobject_sources(#11056, 0) +py_cobjectnames(#11056, "rpartition") +py_cmembers_versioned(#10998, "rpartition", #11056, "2") +#11057 = @"C_type$bytearray$2rsplit" +py_cobjects(#11057) +py_cobjecttypes(#11057, #10034) +py_cobject_sources(#11057, 0) +py_cobjectnames(#11057, "rsplit") +py_cmembers_versioned(#10998, "rsplit", #11057, "2") +#11058 = @"C_type$bytearray$2rstrip" +py_cobjects(#11058) +py_cobjecttypes(#11058, #10034) +py_cobject_sources(#11058, 0) +py_cobjectnames(#11058, "rstrip") +py_cmembers_versioned(#10998, "rstrip", #11058, "2") +#11059 = @"C_type$bytearray$2split" +py_cobjects(#11059) +py_cobjecttypes(#11059, #10034) +py_cobject_sources(#11059, 0) +py_cobjectnames(#11059, "split") +py_cmembers_versioned(#10998, "split", #11059, "2") +#11060 = @"C_type$bytearray$2splitlines" +py_cobjects(#11060) +py_cobjecttypes(#11060, #10034) +py_cobject_sources(#11060, 0) +py_cobjectnames(#11060, "splitlines") +py_cmembers_versioned(#10998, "splitlines", #11060, "2") +#11061 = @"C_type$bytearray$2startswith" +py_cobjects(#11061) +py_cobjecttypes(#11061, #10034) +py_cobject_sources(#11061, 0) +py_cobjectnames(#11061, "startswith") +py_cmembers_versioned(#10998, "startswith", #11061, "2") +#11062 = @"C_type$bytearray$2strip" +py_cobjects(#11062) +py_cobjecttypes(#11062, #10034) +py_cobject_sources(#11062, 0) +py_cobjectnames(#11062, "strip") +py_cmembers_versioned(#10998, "strip", #11062, "2") +#11063 = @"C_type$bytearray$2swapcase" +py_cobjects(#11063) +py_cobjecttypes(#11063, #10034) +py_cobject_sources(#11063, 0) +py_cobjectnames(#11063, "swapcase") +py_cmembers_versioned(#10998, "swapcase", #11063, "2") +#11064 = @"C_type$bytearray$2title" +py_cobjects(#11064) +py_cobjecttypes(#11064, #10034) +py_cobject_sources(#11064, 0) +py_cobjectnames(#11064, "title") +py_cmembers_versioned(#10998, "title", #11064, "2") +#11065 = @"C_type$bytearray$2translate" +py_cobjects(#11065) +py_cobjecttypes(#11065, #10034) +py_cobject_sources(#11065, 0) +py_cobjectnames(#11065, "translate") +py_cmembers_versioned(#10998, "translate", #11065, "2") +#11066 = @"C_type$bytearray$2upper" +py_cobjects(#11066) +py_cobjecttypes(#11066, #10034) +py_cobject_sources(#11066, 0) +py_cobjectnames(#11066, "upper") +py_cmembers_versioned(#10998, "upper", #11066, "2") +#11067 = @"C_type$bytearray$2zfill" +py_cobjects(#11067) +py_cobjecttypes(#11067, #10034) +py_cobject_sources(#11067, 0) +py_cobjectnames(#11067, "zfill") +py_cmembers_versioned(#10998, "zfill", #11067, "2") +py_cmembers_versioned(#10998, ".super.", #10021, "2") +py_cobjectnames(#10998, "bytearray") +py_cmembers_versioned(#10760, "bytearray", #10998, "2") +py_cmembers_versioned(#10760, "bytes", #10028, "2") +#11068 = @"C_builtin_function_or_method$builtins.callable" +py_cobjects(#11068) +py_cobjecttypes(#11068, #10075) +py_cobject_sources(#11068, 0) +py_cobjectnames(#11068, "callable") +py_cmembers_versioned(#10760, "callable", #11068, "2") +#11069 = @"C_builtin_function_or_method$builtins.chr" +py_cobjects(#11069) +py_cobjecttypes(#11069, #10075) +py_cobject_sources(#11069, 0) +py_cobjectnames(#11069, "chr") +py_cmembers_versioned(#10760, "chr", #11069, "2") +#11070 = @"C_type$classmethod" +py_cobjects(#11070) +py_cobjecttypes(#11070, #10001) +py_cobject_sources(#11070, 0) +#11071 = @"C_bytes$130f63dbc708a2d4f999a418ea2ea63a247b3168" +py_cobjects(#11071) +py_cobjecttypes(#11071, #10028) +py_cobject_sources(#11071, 0) +py_cobjectnames(#11071, "b'classmethod(function) -> method + +Convert a function to be a class method. + +A class method receives the class as implicit first argument, +just like an instance method receives the instance. +To declare a class method, use this idiom: + + class C: + @classmethod + def f(cls, arg1, arg2, ...): + ... + +It can be called either on the class (e.g. C.f()) or on an instance +(e.g. C().f()). The instance is ignored except for its class. +If a class method is called for a derived class, the derived class +object is passed as the implied first argument. + +Class methods are different than C++ or Java static methods. +If you want those, see the staticmethod builtin.'") +py_cmembers_versioned(#11070, "__doc__", #11071, "2") +#11072 = @"C_type$classmethod$2__func__" +py_cobjects(#11072) +py_cobjecttypes(#11072, #10045) +py_cobject_sources(#11072, 0) +py_cobjectnames(#11072, "__func__") +py_cmembers_versioned(#11070, "__func__", #11072, "2") +#11073 = @"C_type$classmethod$2__get__" +py_cobjects(#11073) +py_cobjecttypes(#11073, #10005) +py_cobject_sources(#11073, 0) +py_cobjectnames(#11073, "__get__") +py_cmembers_versioned(#11070, "__get__", #11073, "2") +#11074 = @"C_type$classmethod$2__getattribute__" +py_cobjects(#11074) +py_cobjecttypes(#11074, #10005) +py_cobject_sources(#11074, 0) +py_cobjectnames(#11074, "__getattribute__") +py_cmembers_versioned(#11070, "__getattribute__", #11074, "2") +#11075 = @"C_type$classmethod$2__init__" +py_cobjects(#11075) +py_cobjecttypes(#11075, #10005) +py_cobject_sources(#11075, 0) +py_cobjectnames(#11075, "__init__") +py_cmembers_versioned(#11070, "__init__", #11075, "2") +#11076 = @"C_type$classmethod$2__new__" +py_cobjects(#11076) +py_cobjecttypes(#11076, #10075) +py_cobject_sources(#11076, 0) +py_cobjectnames(#11076, "__new__") +py_cmembers_versioned(#11070, "__new__", #11076, "2") +py_cmembers_versioned(#11070, ".super.", #10021, "2") +py_cobjectnames(#11070, "classmethod") +py_cmembers_versioned(#10760, "classmethod", #11070, "2") +#11077 = @"C_builtin_function_or_method$builtins.cmp" +py_cobjects(#11077) +py_cobjecttypes(#11077, #10075) +py_cobject_sources(#11077, 0) +py_cobjectnames(#11077, "cmp") +py_cmembers_versioned(#10760, "cmp", #11077, "2") +#11078 = @"C_builtin_function_or_method$builtins.coerce" +py_cobjects(#11078) +py_cobjecttypes(#11078, #10075) +py_cobject_sources(#11078, 0) +py_cobjectnames(#11078, "coerce") +py_cmembers_versioned(#10760, "coerce", #11078, "2") +#11079 = @"C_builtin_function_or_method$builtins.compile" +py_cobjects(#11079) +py_cobjecttypes(#11079, #10075) +py_cobject_sources(#11079, 0) +py_cobjectnames(#11079, "compile") +py_cmembers_versioned(#10760, "compile", #11079, "2") +#11080 = @"C_type$complex" +py_cobjects(#11080) +py_cobjecttypes(#11080, #10001) +py_cobject_sources(#11080, 0) +#11081 = @"C_type$complex$2__abs__" +py_cobjects(#11081) +py_cobjecttypes(#11081, #10005) +py_cobject_sources(#11081, 0) +py_cobjectnames(#11081, "__abs__") +py_cmembers_versioned(#11080, "__abs__", #11081, "2") +#11082 = @"C_type$complex$2__add__" +py_cobjects(#11082) +py_cobjecttypes(#11082, #10005) +py_cobject_sources(#11082, 0) +py_cobjectnames(#11082, "__add__") +py_cmembers_versioned(#11080, "__add__", #11082, "2") +#11083 = @"C_type$complex$2__coerce__" +py_cobjects(#11083) +py_cobjecttypes(#11083, #10005) +py_cobject_sources(#11083, 0) +py_cobjectnames(#11083, "__coerce__") +py_cmembers_versioned(#11080, "__coerce__", #11083, "2") +#11084 = @"C_type$complex$2__div__" +py_cobjects(#11084) +py_cobjecttypes(#11084, #10005) +py_cobject_sources(#11084, 0) +py_cobjectnames(#11084, "__div__") +py_cmembers_versioned(#11080, "__div__", #11084, "2") +#11085 = @"C_type$complex$2__divmod__" +py_cobjects(#11085) +py_cobjecttypes(#11085, #10005) +py_cobject_sources(#11085, 0) +py_cobjectnames(#11085, "__divmod__") +py_cmembers_versioned(#11080, "__divmod__", #11085, "2") +#11086 = @"C_bytes$cc8fe749bc4fe2677c3c5d821e7a3a812ccd31fa" +py_cobjects(#11086) +py_cobjecttypes(#11086, #10028) +py_cobject_sources(#11086, 0) +py_cobjectnames(#11086, "b'complex(real[, imag]) -> complex number + +Create a complex number from a real part and an optional imaginary part. +This is equivalent to (real + imag*1j) where imag defaults to 0.'") +py_cmembers_versioned(#11080, "__doc__", #11086, "2") +#11087 = @"C_type$complex$2__eq__" +py_cobjects(#11087) +py_cobjecttypes(#11087, #10005) +py_cobject_sources(#11087, 0) +py_cobjectnames(#11087, "__eq__") +py_cmembers_versioned(#11080, "__eq__", #11087, "2") +#11088 = @"C_type$complex$2__float__" +py_cobjects(#11088) +py_cobjecttypes(#11088, #10005) +py_cobject_sources(#11088, 0) +py_cobjectnames(#11088, "__float__") +py_cmembers_versioned(#11080, "__float__", #11088, "2") +#11089 = @"C_type$complex$2__floordiv__" +py_cobjects(#11089) +py_cobjecttypes(#11089, #10005) +py_cobject_sources(#11089, 0) +py_cobjectnames(#11089, "__floordiv__") +py_cmembers_versioned(#11080, "__floordiv__", #11089, "2") +#11090 = @"C_type$complex$2__format__" +py_cobjects(#11090) +py_cobjecttypes(#11090, #10034) +py_cobject_sources(#11090, 0) +py_cobjectnames(#11090, "__format__") +py_cmembers_versioned(#11080, "__format__", #11090, "2") +#11091 = @"C_type$complex$2__ge__" +py_cobjects(#11091) +py_cobjecttypes(#11091, #10005) +py_cobject_sources(#11091, 0) +py_cobjectnames(#11091, "__ge__") +py_cmembers_versioned(#11080, "__ge__", #11091, "2") +#11092 = @"C_type$complex$2__getattribute__" +py_cobjects(#11092) +py_cobjecttypes(#11092, #10005) +py_cobject_sources(#11092, 0) +py_cobjectnames(#11092, "__getattribute__") +py_cmembers_versioned(#11080, "__getattribute__", #11092, "2") +#11093 = @"C_type$complex$2__getnewargs__" +py_cobjects(#11093) +py_cobjecttypes(#11093, #10034) +py_cobject_sources(#11093, 0) +py_cobjectnames(#11093, "__getnewargs__") +py_cmembers_versioned(#11080, "__getnewargs__", #11093, "2") +#11094 = @"C_type$complex$2__gt__" +py_cobjects(#11094) +py_cobjecttypes(#11094, #10005) +py_cobject_sources(#11094, 0) +py_cobjectnames(#11094, "__gt__") +py_cmembers_versioned(#11080, "__gt__", #11094, "2") +#11095 = @"C_type$complex$2__hash__" +py_cobjects(#11095) +py_cobjecttypes(#11095, #10005) +py_cobject_sources(#11095, 0) +py_cobjectnames(#11095, "__hash__") +py_cmembers_versioned(#11080, "__hash__", #11095, "2") +#11096 = @"C_type$complex$2__int__" +py_cobjects(#11096) +py_cobjecttypes(#11096, #10005) +py_cobject_sources(#11096, 0) +py_cobjectnames(#11096, "__int__") +py_cmembers_versioned(#11080, "__int__", #11096, "2") +#11097 = @"C_type$complex$2__le__" +py_cobjects(#11097) +py_cobjecttypes(#11097, #10005) +py_cobject_sources(#11097, 0) +py_cobjectnames(#11097, "__le__") +py_cmembers_versioned(#11080, "__le__", #11097, "2") +#11098 = @"C_type$complex$2__long__" +py_cobjects(#11098) +py_cobjecttypes(#11098, #10005) +py_cobject_sources(#11098, 0) +py_cobjectnames(#11098, "__long__") +py_cmembers_versioned(#11080, "__long__", #11098, "2") +#11099 = @"C_type$complex$2__lt__" +py_cobjects(#11099) +py_cobjecttypes(#11099, #10005) +py_cobject_sources(#11099, 0) +py_cobjectnames(#11099, "__lt__") +py_cmembers_versioned(#11080, "__lt__", #11099, "2") +#11100 = @"C_type$complex$2__mod__" +py_cobjects(#11100) +py_cobjecttypes(#11100, #10005) +py_cobject_sources(#11100, 0) +py_cobjectnames(#11100, "__mod__") +py_cmembers_versioned(#11080, "__mod__", #11100, "2") +#11101 = @"C_type$complex$2__mul__" +py_cobjects(#11101) +py_cobjecttypes(#11101, #10005) +py_cobject_sources(#11101, 0) +py_cobjectnames(#11101, "__mul__") +py_cmembers_versioned(#11080, "__mul__", #11101, "2") +#11102 = @"C_type$complex$2__ne__" +py_cobjects(#11102) +py_cobjecttypes(#11102, #10005) +py_cobject_sources(#11102, 0) +py_cobjectnames(#11102, "__ne__") +py_cmembers_versioned(#11080, "__ne__", #11102, "2") +#11103 = @"C_type$complex$2__neg__" +py_cobjects(#11103) +py_cobjecttypes(#11103, #10005) +py_cobject_sources(#11103, 0) +py_cobjectnames(#11103, "__neg__") +py_cmembers_versioned(#11080, "__neg__", #11103, "2") +#11104 = @"C_type$complex$2__new__" +py_cobjects(#11104) +py_cobjecttypes(#11104, #10075) +py_cobject_sources(#11104, 0) +py_cobjectnames(#11104, "__new__") +py_cmembers_versioned(#11080, "__new__", #11104, "2") +#11105 = @"C_type$complex$2__nonzero__" +py_cobjects(#11105) +py_cobjecttypes(#11105, #10005) +py_cobject_sources(#11105, 0) +py_cobjectnames(#11105, "__nonzero__") +py_cmembers_versioned(#11080, "__nonzero__", #11105, "2") +#11106 = @"C_type$complex$2__pos__" +py_cobjects(#11106) +py_cobjecttypes(#11106, #10005) +py_cobject_sources(#11106, 0) +py_cobjectnames(#11106, "__pos__") +py_cmembers_versioned(#11080, "__pos__", #11106, "2") +#11107 = @"C_type$complex$2__pow__" +py_cobjects(#11107) +py_cobjecttypes(#11107, #10005) +py_cobject_sources(#11107, 0) +py_cobjectnames(#11107, "__pow__") +py_cmembers_versioned(#11080, "__pow__", #11107, "2") +#11108 = @"C_type$complex$2__radd__" +py_cobjects(#11108) +py_cobjecttypes(#11108, #10005) +py_cobject_sources(#11108, 0) +py_cobjectnames(#11108, "__radd__") +py_cmembers_versioned(#11080, "__radd__", #11108, "2") +#11109 = @"C_type$complex$2__rdiv__" +py_cobjects(#11109) +py_cobjecttypes(#11109, #10005) +py_cobject_sources(#11109, 0) +py_cobjectnames(#11109, "__rdiv__") +py_cmembers_versioned(#11080, "__rdiv__", #11109, "2") +#11110 = @"C_type$complex$2__rdivmod__" +py_cobjects(#11110) +py_cobjecttypes(#11110, #10005) +py_cobject_sources(#11110, 0) +py_cobjectnames(#11110, "__rdivmod__") +py_cmembers_versioned(#11080, "__rdivmod__", #11110, "2") +#11111 = @"C_type$complex$2__repr__" +py_cobjects(#11111) +py_cobjecttypes(#11111, #10005) +py_cobject_sources(#11111, 0) +py_cobjectnames(#11111, "__repr__") +py_cmembers_versioned(#11080, "__repr__", #11111, "2") +#11112 = @"C_type$complex$2__rfloordiv__" +py_cobjects(#11112) +py_cobjecttypes(#11112, #10005) +py_cobject_sources(#11112, 0) +py_cobjectnames(#11112, "__rfloordiv__") +py_cmembers_versioned(#11080, "__rfloordiv__", #11112, "2") +#11113 = @"C_type$complex$2__rmod__" +py_cobjects(#11113) +py_cobjecttypes(#11113, #10005) +py_cobject_sources(#11113, 0) +py_cobjectnames(#11113, "__rmod__") +py_cmembers_versioned(#11080, "__rmod__", #11113, "2") +#11114 = @"C_type$complex$2__rmul__" +py_cobjects(#11114) +py_cobjecttypes(#11114, #10005) +py_cobject_sources(#11114, 0) +py_cobjectnames(#11114, "__rmul__") +py_cmembers_versioned(#11080, "__rmul__", #11114, "2") +#11115 = @"C_type$complex$2__rpow__" +py_cobjects(#11115) +py_cobjecttypes(#11115, #10005) +py_cobject_sources(#11115, 0) +py_cobjectnames(#11115, "__rpow__") +py_cmembers_versioned(#11080, "__rpow__", #11115, "2") +#11116 = @"C_type$complex$2__rsub__" +py_cobjects(#11116) +py_cobjecttypes(#11116, #10005) +py_cobject_sources(#11116, 0) +py_cobjectnames(#11116, "__rsub__") +py_cmembers_versioned(#11080, "__rsub__", #11116, "2") +#11117 = @"C_type$complex$2__rtruediv__" +py_cobjects(#11117) +py_cobjecttypes(#11117, #10005) +py_cobject_sources(#11117, 0) +py_cobjectnames(#11117, "__rtruediv__") +py_cmembers_versioned(#11080, "__rtruediv__", #11117, "2") +#11118 = @"C_type$complex$2__str__" +py_cobjects(#11118) +py_cobjecttypes(#11118, #10005) +py_cobject_sources(#11118, 0) +py_cobjectnames(#11118, "__str__") +py_cmembers_versioned(#11080, "__str__", #11118, "2") +#11119 = @"C_type$complex$2__sub__" +py_cobjects(#11119) +py_cobjecttypes(#11119, #10005) +py_cobject_sources(#11119, 0) +py_cobjectnames(#11119, "__sub__") +py_cmembers_versioned(#11080, "__sub__", #11119, "2") +#11120 = @"C_type$complex$2__truediv__" +py_cobjects(#11120) +py_cobjecttypes(#11120, #10005) +py_cobject_sources(#11120, 0) +py_cobjectnames(#11120, "__truediv__") +py_cmembers_versioned(#11080, "__truediv__", #11120, "2") +#11121 = @"C_type$complex$2conjugate" +py_cobjects(#11121) +py_cobjecttypes(#11121, #10034) +py_cobject_sources(#11121, 0) +py_cobjectnames(#11121, "conjugate") +py_cmembers_versioned(#11080, "conjugate", #11121, "2") +#11122 = @"C_type$complex$2imag" +py_cobjects(#11122) +py_cobjecttypes(#11122, #10045) +py_cobject_sources(#11122, 0) +py_cobjectnames(#11122, "imag") +py_cmembers_versioned(#11080, "imag", #11122, "2") +#11123 = @"C_type$complex$2real" +py_cobjects(#11123) +py_cobjecttypes(#11123, #10045) +py_cobject_sources(#11123, 0) +py_cobjectnames(#11123, "real") +py_cmembers_versioned(#11080, "real", #11123, "2") +py_cmembers_versioned(#11080, ".super.", #10021, "2") +py_cobjectnames(#11080, "complex") +py_cmembers_versioned(#10760, "complex", #11080, "2") +#11124 = @"C_module$__builtin__$2copyright" +#11125 = @"C_type$site._Printer" +py_cobjects(#11125) +py_cobjecttypes(#11125, #10001) +py_cobject_sources(#11125, 0) +#11126 = @"C_int$23" +py_cobjects(#11126) +py_cobjecttypes(#11126, #10449) +py_cobject_sources(#11126, 0) +py_cobjectnames(#11126, "23") +py_cmembers_versioned(#11125, "MAXLINES", #11126, "2") +#11127 = @"C_type$site._Printer$2_Printer__setup" +py_cobjects(#11127) +py_cobjecttypes(#11127, #10000) +py_cobject_sources(#11127, 0) +py_cobjectnames(#11127, "__setup") +py_cmembers_versioned(#11125, "_Printer__setup", #11127, "2") +#11128 = @"C_type$site._Printer$2__call__" +py_cobjects(#11128) +py_cobjecttypes(#11128, #10000) +py_cobject_sources(#11128, 0) +py_cobjectnames(#11128, "__call__") +py_cmembers_versioned(#11125, "__call__", #11128, "2") +#11129 = @"C_type$site._Printer$2__dict__" +py_cobjects(#11129) +py_cobjecttypes(#11129, #10003) +py_cobject_sources(#11129, 0) +#11130 = @"C_type$site._Printer$2__dict__$2__set__" +py_cobjects(#11130) +py_cobjecttypes(#11130, #10009) +py_cobject_sources(#11130, 0) +py_cobjectnames(#11130, "__set__") +py_cmembers_versioned(#11129, "__set__", #11130, "2") +#11131 = @"C_type$site._Printer$2__dict__$2__getattribute__" +py_cobjects(#11131) +py_cobjecttypes(#11131, #10009) +py_cobject_sources(#11131, 0) +py_cobjectnames(#11131, "__getattribute__") +py_cmembers_versioned(#11129, "__getattribute__", #11131, "2") +py_cmembers_versioned(#11129, "__objclass__", #11125, "2") +#11132 = @"C_type$site._Printer$2__dict__$2__repr__" +py_cobjects(#11132) +py_cobjecttypes(#11132, #10009) +py_cobject_sources(#11132, 0) +py_cobjectnames(#11132, "__repr__") +py_cmembers_versioned(#11129, "__repr__", #11132, "2") +#11133 = @"C_type$site._Printer$2__dict__$2__get__" +py_cobjects(#11133) +py_cobjecttypes(#11133, #10009) +py_cobject_sources(#11133, 0) +py_cobjectnames(#11133, "__get__") +py_cmembers_versioned(#11129, "__get__", #11133, "2") +#11134 = @"C_bytes$1caffae7c2cd65c04c7d894ccd85fd466c39c173" +py_cobjects(#11134) +py_cobjecttypes(#11134, #10028) +py_cobject_sources(#11134, 0) +py_cobjectnames(#11134, "b'dictionary for instance variables (if defined)'") +py_cmembers_versioned(#11129, "__doc__", #11134, "2") +#11135 = @"C_type$site._Printer$2__dict__$2__delete__" +py_cobjects(#11135) +py_cobjecttypes(#11135, #10009) +py_cobject_sources(#11135, 0) +py_cobjectnames(#11135, "__delete__") +py_cmembers_versioned(#11129, "__delete__", #11135, "2") +py_cobjectnames(#11129, "__dict__") +py_cmembers_versioned(#11125, "__dict__", #11129, "2") +#11136 = @"C_bytes$8fb02d5dbf98d031459d7bd7dcfcd6f7d0a6501e" +py_cobjects(#11136) +py_cobjecttypes(#11136, #10028) +py_cobject_sources(#11136, 0) +py_cobjectnames(#11136, "b'interactive prompt objects for printing the license text, a list of + contributors and the copyright notice.'") +py_cmembers_versioned(#11125, "__doc__", #11136, "2") +#11137 = @"C_type$site._Printer$2__init__" +py_cobjects(#11137) +py_cobjecttypes(#11137, #10000) +py_cobject_sources(#11137, 0) +py_cobjectnames(#11137, "__init__") +py_cmembers_versioned(#11125, "__init__", #11137, "2") +#11138 = @"C_bytes$c099a42a5555825cdb50df0c04932bcd29613457" +py_cobjects(#11138) +py_cobjecttypes(#11138, #10028) +py_cobject_sources(#11138, 0) +py_cobjectnames(#11138, "b'site'") +py_cmembers_versioned(#11125, "__module__", #11138, "2") +#11139 = @"C_type$site._Printer$2__repr__" +py_cobjects(#11139) +py_cobjecttypes(#11139, #10000) +py_cobject_sources(#11139, 0) +py_cobjectnames(#11139, "__repr__") +py_cmembers_versioned(#11125, "__repr__", #11139, "2") +#11140 = @"C_type$site._Printer$2__weakref__" +py_cobjects(#11140) +py_cobjecttypes(#11140, #10003) +py_cobject_sources(#11140, 0) +#11141 = @"C_type$site._Printer$2__weakref__$2__set__" +py_cobjects(#11141) +py_cobjecttypes(#11141, #10009) +py_cobject_sources(#11141, 0) +py_cobjectnames(#11141, "__set__") +py_cmembers_versioned(#11140, "__set__", #11141, "2") +#11142 = @"C_type$site._Printer$2__weakref__$2__getattribute__" +py_cobjects(#11142) +py_cobjecttypes(#11142, #10009) +py_cobject_sources(#11142, 0) +py_cobjectnames(#11142, "__getattribute__") +py_cmembers_versioned(#11140, "__getattribute__", #11142, "2") +py_cmembers_versioned(#11140, "__objclass__", #11125, "2") +#11143 = @"C_type$site._Printer$2__weakref__$2__repr__" +py_cobjects(#11143) +py_cobjecttypes(#11143, #10009) +py_cobject_sources(#11143, 0) +py_cobjectnames(#11143, "__repr__") +py_cmembers_versioned(#11140, "__repr__", #11143, "2") +#11144 = @"C_type$site._Printer$2__weakref__$2__get__" +py_cobjects(#11144) +py_cobjecttypes(#11144, #10009) +py_cobject_sources(#11144, 0) +py_cobjectnames(#11144, "__get__") +py_cmembers_versioned(#11140, "__get__", #11144, "2") +#11145 = @"C_bytes$288bf61a8280860bb3d2b542aa2ec112948d35b5" +py_cobjects(#11145) +py_cobjecttypes(#11145, #10028) +py_cobject_sources(#11145, 0) +py_cobjectnames(#11145, "b'list of weak references to the object (if defined)'") +py_cmembers_versioned(#11140, "__doc__", #11145, "2") +#11146 = @"C_type$site._Printer$2__weakref__$2__delete__" +py_cobjects(#11146) +py_cobjecttypes(#11146, #10009) +py_cobject_sources(#11146, 0) +py_cobjectnames(#11146, "__delete__") +py_cmembers_versioned(#11140, "__delete__", #11146, "2") +py_cobjectnames(#11140, "__weakref__") +py_cmembers_versioned(#11125, "__weakref__", #11140, "2") +py_cmembers_versioned(#11125, ".super.", #10021, "2") +py_cobjectnames(#11125, "site._Printer") +py_cobjects(#11124) +py_cobjecttypes(#11124, #11125) +py_cobject_sources(#11124, 0) +py_cobjectnames(#11124, "object") +py_cmembers_versioned(#10760, "copyright", #11124, "2") +#11147 = @"C_module$__builtin__$2credits" +py_cobjects(#11147) +py_cobjecttypes(#11147, #11125) +py_cobject_sources(#11147, 0) +py_cobjectnames(#11147, "object") +py_cmembers_versioned(#10760, "credits", #11147, "2") +#11148 = @"C_builtin_function_or_method$builtins.delattr" +py_cobjects(#11148) +py_cobjecttypes(#11148, #10075) +py_cobject_sources(#11148, 0) +py_cobjectnames(#11148, "delattr") +py_cmembers_versioned(#10760, "delattr", #11148, "2") +py_cmembers_versioned(#10760, "dict", #10386, "2") +#11149 = @"C_builtin_function_or_method$builtins.dir" +py_cobjects(#11149) +py_cobjecttypes(#11149, #10075) +py_cobject_sources(#11149, 0) +py_cobjectnames(#11149, "dir") +py_cmembers_versioned(#10760, "dir", #11149, "2") +#11150 = @"C_builtin_function_or_method$builtins.divmod" +py_cobjects(#11150) +py_cobjecttypes(#11150, #10075) +py_cobject_sources(#11150, 0) +py_cobjectnames(#11150, "divmod") +py_cmembers_versioned(#10760, "divmod", #11150, "2") +#11151 = @"C_type$enumerate" +py_cobjects(#11151) +py_cobjecttypes(#11151, #10001) +py_cobject_sources(#11151, 0) +#11152 = @"C_bytes$bc46bf57a82047977c76afa6b32299957b9ed9b9" +py_cobjects(#11152) +py_cobjecttypes(#11152, #10028) +py_cobject_sources(#11152, 0) +py_cobjectnames(#11152, "b'enumerate(iterable[, start]) -> iterator for index, value of iterable + +Return an enumerate object. iterable must be another object that supports +iteration. The enumerate object yields pairs containing a count (from +start, which defaults to zero) and a value yielded by the iterable argument. +enumerate is useful for obtaining an indexed list: + (0, seq[0]), (1, seq[1]), (2, seq[2]), ...'") +py_cmembers_versioned(#11151, "__doc__", #11152, "2") +#11153 = @"C_type$enumerate$2__getattribute__" +py_cobjects(#11153) +py_cobjecttypes(#11153, #10005) +py_cobject_sources(#11153, 0) +py_cobjectnames(#11153, "__getattribute__") +py_cmembers_versioned(#11151, "__getattribute__", #11153, "2") +#11154 = @"C_type$enumerate$2__iter__" +py_cobjects(#11154) +py_cobjecttypes(#11154, #10005) +py_cobject_sources(#11154, 0) +py_cobjectnames(#11154, "__iter__") +py_cmembers_versioned(#11151, "__iter__", #11154, "2") +#11155 = @"C_type$enumerate$2__new__" +py_cobjects(#11155) +py_cobjecttypes(#11155, #10075) +py_cobject_sources(#11155, 0) +py_cobjectnames(#11155, "__new__") +py_cmembers_versioned(#11151, "__new__", #11155, "2") +#11156 = @"C_type$enumerate$2next" +py_cobjects(#11156) +py_cobjecttypes(#11156, #10005) +py_cobject_sources(#11156, 0) +py_cobjectnames(#11156, "next") +py_cmembers_versioned(#11151, "next", #11156, "2") +py_cmembers_versioned(#11151, ".super.", #10021, "2") +py_cobjectnames(#11151, "enumerate") +py_cmembers_versioned(#10760, "enumerate", #11151, "2") +#11157 = @"C_builtin_function_or_method$builtins.eval" +py_cobjects(#11157) +py_cobjecttypes(#11157, #10075) +py_cobject_sources(#11157, 0) +py_cobjectnames(#11157, "eval") +py_cmembers_versioned(#10760, "eval", #11157, "2") +#11158 = @"C_module$__builtin__$2exec" +py_cobjects(#11158) +py_cobjecttypes(#11158, #10075) +py_cobject_sources(#11158, 0) +py_cobjectnames(#11158, "exec") +py_cmembers_versioned(#10760, "exec", #11158, "2") +#11159 = @"C_builtin_function_or_method$builtins.execfile" +py_cobjects(#11159) +py_cobjecttypes(#11159, #10075) +py_cobject_sources(#11159, 0) +py_cobjectnames(#11159, "execfile") +py_cmembers_versioned(#10760, "execfile", #11159, "2") +#11160 = @"C_module$__builtin__$2exit" +#11161 = @"C_type$site.Quitter" +py_cobjects(#11161) +py_cobjecttypes(#11161, #10001) +py_cobject_sources(#11161, 0) +#11162 = @"C_type$site.Quitter$2__call__" +py_cobjects(#11162) +py_cobjecttypes(#11162, #10000) +py_cobject_sources(#11162, 0) +py_cobjectnames(#11162, "__call__") +py_cmembers_versioned(#11161, "__call__", #11162, "2") +#11163 = @"C_type$site.Quitter$2__dict__" +py_cobjects(#11163) +py_cobjecttypes(#11163, #10003) +py_cobject_sources(#11163, 0) +#11164 = @"C_type$site.Quitter$2__dict__$2__set__" +py_cobjects(#11164) +py_cobjecttypes(#11164, #10009) +py_cobject_sources(#11164, 0) +py_cobjectnames(#11164, "__set__") +py_cmembers_versioned(#11163, "__set__", #11164, "2") +#11165 = @"C_type$site.Quitter$2__dict__$2__getattribute__" +py_cobjects(#11165) +py_cobjecttypes(#11165, #10009) +py_cobject_sources(#11165, 0) +py_cobjectnames(#11165, "__getattribute__") +py_cmembers_versioned(#11163, "__getattribute__", #11165, "2") +py_cmembers_versioned(#11163, "__objclass__", #11161, "2") +#11166 = @"C_type$site.Quitter$2__dict__$2__repr__" +py_cobjects(#11166) +py_cobjecttypes(#11166, #10009) +py_cobject_sources(#11166, 0) +py_cobjectnames(#11166, "__repr__") +py_cmembers_versioned(#11163, "__repr__", #11166, "2") +#11167 = @"C_type$site.Quitter$2__dict__$2__get__" +py_cobjects(#11167) +py_cobjecttypes(#11167, #10009) +py_cobject_sources(#11167, 0) +py_cobjectnames(#11167, "__get__") +py_cmembers_versioned(#11163, "__get__", #11167, "2") +#11168 = @"C_bytes$1caffae7c2cd65c04c7d894ccd85fd466c39c173" +py_cobjects(#11168) +py_cobjecttypes(#11168, #10028) +py_cobject_sources(#11168, 0) +py_cobjectnames(#11168, "b'dictionary for instance variables (if defined)'") +py_cmembers_versioned(#11163, "__doc__", #11168, "2") +#11169 = @"C_type$site.Quitter$2__dict__$2__delete__" +py_cobjects(#11169) +py_cobjecttypes(#11169, #10009) +py_cobject_sources(#11169, 0) +py_cobjectnames(#11169, "__delete__") +py_cmembers_versioned(#11163, "__delete__", #11169, "2") +py_cobjectnames(#11163, "__dict__") +py_cmembers_versioned(#11161, "__dict__", #11163, "2") +py_cmembers_versioned(#11161, "__doc__", #10017, "2") +#11170 = @"C_type$site.Quitter$2__init__" +py_cobjects(#11170) +py_cobjecttypes(#11170, #10000) +py_cobject_sources(#11170, 0) +py_cobjectnames(#11170, "__init__") +py_cmembers_versioned(#11161, "__init__", #11170, "2") +py_cmembers_versioned(#11161, "__module__", #11138, "2") +#11171 = @"C_type$site.Quitter$2__repr__" +py_cobjects(#11171) +py_cobjecttypes(#11171, #10000) +py_cobject_sources(#11171, 0) +py_cobjectnames(#11171, "__repr__") +py_cmembers_versioned(#11161, "__repr__", #11171, "2") +#11172 = @"C_type$site.Quitter$2__weakref__" +py_cobjects(#11172) +py_cobjecttypes(#11172, #10003) +py_cobject_sources(#11172, 0) +#11173 = @"C_type$site.Quitter$2__weakref__$2__set__" +py_cobjects(#11173) +py_cobjecttypes(#11173, #10009) +py_cobject_sources(#11173, 0) +py_cobjectnames(#11173, "__set__") +py_cmembers_versioned(#11172, "__set__", #11173, "2") +#11174 = @"C_type$site.Quitter$2__weakref__$2__getattribute__" +py_cobjects(#11174) +py_cobjecttypes(#11174, #10009) +py_cobject_sources(#11174, 0) +py_cobjectnames(#11174, "__getattribute__") +py_cmembers_versioned(#11172, "__getattribute__", #11174, "2") +py_cmembers_versioned(#11172, "__objclass__", #11161, "2") +#11175 = @"C_type$site.Quitter$2__weakref__$2__repr__" +py_cobjects(#11175) +py_cobjecttypes(#11175, #10009) +py_cobject_sources(#11175, 0) +py_cobjectnames(#11175, "__repr__") +py_cmembers_versioned(#11172, "__repr__", #11175, "2") +#11176 = @"C_type$site.Quitter$2__weakref__$2__get__" +py_cobjects(#11176) +py_cobjecttypes(#11176, #10009) +py_cobject_sources(#11176, 0) +py_cobjectnames(#11176, "__get__") +py_cmembers_versioned(#11172, "__get__", #11176, "2") +#11177 = @"C_bytes$288bf61a8280860bb3d2b542aa2ec112948d35b5" +py_cobjects(#11177) +py_cobjecttypes(#11177, #10028) +py_cobject_sources(#11177, 0) +py_cobjectnames(#11177, "b'list of weak references to the object (if defined)'") +py_cmembers_versioned(#11172, "__doc__", #11177, "2") +#11178 = @"C_type$site.Quitter$2__weakref__$2__delete__" +py_cobjects(#11178) +py_cobjecttypes(#11178, #10009) +py_cobject_sources(#11178, 0) +py_cobjectnames(#11178, "__delete__") +py_cmembers_versioned(#11172, "__delete__", #11178, "2") +py_cobjectnames(#11172, "__weakref__") +py_cmembers_versioned(#11161, "__weakref__", #11172, "2") +py_cmembers_versioned(#11161, ".super.", #10021, "2") +py_cobjectnames(#11161, "site.Quitter") +py_cobjects(#11160) +py_cobjecttypes(#11160, #11161) +py_cobject_sources(#11160, 0) +py_cobjectnames(#11160, "object") +py_cmembers_versioned(#10760, "exit", #11160, "2") +#11179 = @"C_type$file" +py_cobjects(#11179) +py_cobjecttypes(#11179, #10001) +py_cobject_sources(#11179, 0) +#11180 = @"C_type$file$2__delattr__" +py_cobjects(#11180) +py_cobjecttypes(#11180, #10005) +py_cobject_sources(#11180, 0) +py_cobjectnames(#11180, "__delattr__") +py_cmembers_versioned(#11179, "__delattr__", #11180, "2") +#11181 = @"C_bytes$6cea74c971d3f1ead7e6ee9948113b38a1b6f069" +py_cobjects(#11181) +py_cobjecttypes(#11181, #10028) +py_cobject_sources(#11181, 0) +py_cobjectnames(#11181, "b'file(name[, mode[, buffering]]) -> file object + +Open a file. The mode can be 'r', 'w' or 'a' for reading (default), +writing or appending. The file will be created if it doesn't exist +when opened for writing or appending; it will be truncated when +opened for writing. Add a 'b' to the mode for binary files. +Add a '+' to the mode to allow simultaneous reading and writing. +If the buffering argument is given, 0 means unbuffered, 1 means line +buffered, and larger numbers specify the buffer size. The preferred way +to open a file is with the builtin open() function. +Add a 'U' to mode to open the file for input with universal newline +support. Any line ending in the input file will be seen as a '\n' +in Python. Also, a file so opened gains the attribute 'newlines'; +the value for this attribute is one of None (no newline read yet), +'\r', '\n', '\r\n' or a tuple containing all the newline types seen. + +'U' cannot be combined with 'w' or '+' mode. +'") +py_cmembers_versioned(#11179, "__doc__", #11181, "2") +#11182 = @"C_type$file$2__enter__" +py_cobjects(#11182) +py_cobjecttypes(#11182, #10034) +py_cobject_sources(#11182, 0) +py_cobjectnames(#11182, "__enter__") +py_cmembers_versioned(#11179, "__enter__", #11182, "2") +#11183 = @"C_type$file$2__exit__" +py_cobjects(#11183) +py_cobjecttypes(#11183, #10034) +py_cobject_sources(#11183, 0) +py_cobjectnames(#11183, "__exit__") +py_cmembers_versioned(#11179, "__exit__", #11183, "2") +#11184 = @"C_type$file$2__getattribute__" +py_cobjects(#11184) +py_cobjecttypes(#11184, #10005) +py_cobject_sources(#11184, 0) +py_cobjectnames(#11184, "__getattribute__") +py_cmembers_versioned(#11179, "__getattribute__", #11184, "2") +#11185 = @"C_type$file$2__init__" +py_cobjects(#11185) +py_cobjecttypes(#11185, #10005) +py_cobject_sources(#11185, 0) +py_cobjectnames(#11185, "__init__") +py_cmembers_versioned(#11179, "__init__", #11185, "2") +#11186 = @"C_type$file$2__iter__" +py_cobjects(#11186) +py_cobjecttypes(#11186, #10005) +py_cobject_sources(#11186, 0) +py_cobjectnames(#11186, "__iter__") +py_cmembers_versioned(#11179, "__iter__", #11186, "2") +#11187 = @"C_type$file$2__new__" +py_cobjects(#11187) +py_cobjecttypes(#11187, #10075) +py_cobject_sources(#11187, 0) +py_cobjectnames(#11187, "__new__") +py_cmembers_versioned(#11179, "__new__", #11187, "2") +#11188 = @"C_type$file$2__repr__" +py_cobjects(#11188) +py_cobjecttypes(#11188, #10005) +py_cobject_sources(#11188, 0) +py_cobjectnames(#11188, "__repr__") +py_cmembers_versioned(#11179, "__repr__", #11188, "2") +#11189 = @"C_type$file$2__setattr__" +py_cobjects(#11189) +py_cobjecttypes(#11189, #10005) +py_cobject_sources(#11189, 0) +py_cobjectnames(#11189, "__setattr__") +py_cmembers_versioned(#11179, "__setattr__", #11189, "2") +#11190 = @"C_type$file$2close" +py_cobjects(#11190) +py_cobjecttypes(#11190, #10034) +py_cobject_sources(#11190, 0) +py_cobjectnames(#11190, "close") +py_cmembers_versioned(#11179, "close", #11190, "2") +#11191 = @"C_type$file$2closed" +py_cobjects(#11191) +py_cobjecttypes(#11191, #10003) +py_cobject_sources(#11191, 0) +#11192 = @"C_type$file$2closed$2__set__" +py_cobjects(#11192) +py_cobjecttypes(#11192, #10009) +py_cobject_sources(#11192, 0) +py_cobjectnames(#11192, "__set__") +py_cmembers_versioned(#11191, "__set__", #11192, "2") +#11193 = @"C_type$file$2closed$2__getattribute__" +py_cobjects(#11193) +py_cobjecttypes(#11193, #10009) +py_cobject_sources(#11193, 0) +py_cobjectnames(#11193, "__getattribute__") +py_cmembers_versioned(#11191, "__getattribute__", #11193, "2") +py_cmembers_versioned(#11191, "__objclass__", #11179, "2") +#11194 = @"C_type$file$2closed$2__repr__" +py_cobjects(#11194) +py_cobjecttypes(#11194, #10009) +py_cobject_sources(#11194, 0) +py_cobjectnames(#11194, "__repr__") +py_cmembers_versioned(#11191, "__repr__", #11194, "2") +#11195 = @"C_type$file$2closed$2__get__" +py_cobjects(#11195) +py_cobjecttypes(#11195, #10009) +py_cobject_sources(#11195, 0) +py_cobjectnames(#11195, "__get__") +py_cmembers_versioned(#11191, "__get__", #11195, "2") +#11196 = @"C_bytes$4cd5ab8a4e71869ab7f338711b6c851a495d5dc0" +py_cobjects(#11196) +py_cobjecttypes(#11196, #10028) +py_cobject_sources(#11196, 0) +py_cobjectnames(#11196, "b'True if the file is closed'") +py_cmembers_versioned(#11191, "__doc__", #11196, "2") +#11197 = @"C_type$file$2closed$2__delete__" +py_cobjects(#11197) +py_cobjecttypes(#11197, #10009) +py_cobject_sources(#11197, 0) +py_cobjectnames(#11197, "__delete__") +py_cmembers_versioned(#11191, "__delete__", #11197, "2") +py_cobjectnames(#11191, "closed") +py_cmembers_versioned(#11179, "closed", #11191, "2") +#11198 = @"C_type$file$2encoding" +py_cobjects(#11198) +py_cobjecttypes(#11198, #10045) +py_cobject_sources(#11198, 0) +py_cobjectnames(#11198, "encoding") +py_cmembers_versioned(#11179, "encoding", #11198, "2") +#11199 = @"C_type$file$2errors" +py_cobjects(#11199) +py_cobjecttypes(#11199, #10045) +py_cobject_sources(#11199, 0) +py_cobjectnames(#11199, "errors") +py_cmembers_versioned(#11179, "errors", #11199, "2") +#11200 = @"C_type$file$2fileno" +py_cobjects(#11200) +py_cobjecttypes(#11200, #10034) +py_cobject_sources(#11200, 0) +py_cobjectnames(#11200, "fileno") +py_cmembers_versioned(#11179, "fileno", #11200, "2") +#11201 = @"C_type$file$2flush" +py_cobjects(#11201) +py_cobjecttypes(#11201, #10034) +py_cobject_sources(#11201, 0) +py_cobjectnames(#11201, "flush") +py_cmembers_versioned(#11179, "flush", #11201, "2") +#11202 = @"C_type$file$2isatty" +py_cobjects(#11202) +py_cobjecttypes(#11202, #10034) +py_cobject_sources(#11202, 0) +py_cobjectnames(#11202, "isatty") +py_cmembers_versioned(#11179, "isatty", #11202, "2") +#11203 = @"C_type$file$2mode" +py_cobjects(#11203) +py_cobjecttypes(#11203, #10045) +py_cobject_sources(#11203, 0) +py_cobjectnames(#11203, "mode") +py_cmembers_versioned(#11179, "mode", #11203, "2") +#11204 = @"C_type$file$2name" +py_cobjects(#11204) +py_cobjecttypes(#11204, #10045) +py_cobject_sources(#11204, 0) +py_cobjectnames(#11204, "name") +py_cmembers_versioned(#11179, "name", #11204, "2") +#11205 = @"C_type$file$2newlines" +py_cobjects(#11205) +py_cobjecttypes(#11205, #10003) +py_cobject_sources(#11205, 0) +#11206 = @"C_type$file$2newlines$2__set__" +py_cobjects(#11206) +py_cobjecttypes(#11206, #10009) +py_cobject_sources(#11206, 0) +py_cobjectnames(#11206, "__set__") +py_cmembers_versioned(#11205, "__set__", #11206, "2") +#11207 = @"C_type$file$2newlines$2__getattribute__" +py_cobjects(#11207) +py_cobjecttypes(#11207, #10009) +py_cobject_sources(#11207, 0) +py_cobjectnames(#11207, "__getattribute__") +py_cmembers_versioned(#11205, "__getattribute__", #11207, "2") +py_cmembers_versioned(#11205, "__objclass__", #11179, "2") +#11208 = @"C_type$file$2newlines$2__repr__" +py_cobjects(#11208) +py_cobjecttypes(#11208, #10009) +py_cobject_sources(#11208, 0) +py_cobjectnames(#11208, "__repr__") +py_cmembers_versioned(#11205, "__repr__", #11208, "2") +#11209 = @"C_type$file$2newlines$2__get__" +py_cobjects(#11209) +py_cobjecttypes(#11209, #10009) +py_cobject_sources(#11209, 0) +py_cobjectnames(#11209, "__get__") +py_cmembers_versioned(#11205, "__get__", #11209, "2") +#11210 = @"C_bytes$c0d8ab59effeef9fd438a7cca51589a1d26a9bea" +py_cobjects(#11210) +py_cobjecttypes(#11210, #10028) +py_cobject_sources(#11210, 0) +py_cobjectnames(#11210, "b'end-of-line convention used in this file'") +py_cmembers_versioned(#11205, "__doc__", #11210, "2") +#11211 = @"C_type$file$2newlines$2__delete__" +py_cobjects(#11211) +py_cobjecttypes(#11211, #10009) +py_cobject_sources(#11211, 0) +py_cobjectnames(#11211, "__delete__") +py_cmembers_versioned(#11205, "__delete__", #11211, "2") +py_cobjectnames(#11205, "newlines") +py_cmembers_versioned(#11179, "newlines", #11205, "2") +#11212 = @"C_type$file$2next" +py_cobjects(#11212) +py_cobjecttypes(#11212, #10005) +py_cobject_sources(#11212, 0) +py_cobjectnames(#11212, "next") +py_cmembers_versioned(#11179, "next", #11212, "2") +#11213 = @"C_type$file$2read" +py_cobjects(#11213) +py_cobjecttypes(#11213, #10034) +py_cobject_sources(#11213, 0) +py_cobjectnames(#11213, "read") +py_cmembers_versioned(#11179, "read", #11213, "2") +#11214 = @"C_type$file$2readinto" +py_cobjects(#11214) +py_cobjecttypes(#11214, #10034) +py_cobject_sources(#11214, 0) +py_cobjectnames(#11214, "readinto") +py_cmembers_versioned(#11179, "readinto", #11214, "2") +#11215 = @"C_type$file$2readline" +py_cobjects(#11215) +py_cobjecttypes(#11215, #10034) +py_cobject_sources(#11215, 0) +py_cobjectnames(#11215, "readline") +py_cmembers_versioned(#11179, "readline", #11215, "2") +#11216 = @"C_type$file$2readlines" +py_cobjects(#11216) +py_cobjecttypes(#11216, #10034) +py_cobject_sources(#11216, 0) +py_cobjectnames(#11216, "readlines") +py_cmembers_versioned(#11179, "readlines", #11216, "2") +#11217 = @"C_type$file$2seek" +py_cobjects(#11217) +py_cobjecttypes(#11217, #10034) +py_cobject_sources(#11217, 0) +py_cobjectnames(#11217, "seek") +py_cmembers_versioned(#11179, "seek", #11217, "2") +#11218 = @"C_type$file$2softspace" +py_cobjects(#11218) +py_cobjecttypes(#11218, #10003) +py_cobject_sources(#11218, 0) +#11219 = @"C_type$file$2softspace$2__set__" +py_cobjects(#11219) +py_cobjecttypes(#11219, #10009) +py_cobject_sources(#11219, 0) +py_cobjectnames(#11219, "__set__") +py_cmembers_versioned(#11218, "__set__", #11219, "2") +#11220 = @"C_type$file$2softspace$2__getattribute__" +py_cobjects(#11220) +py_cobjecttypes(#11220, #10009) +py_cobject_sources(#11220, 0) +py_cobjectnames(#11220, "__getattribute__") +py_cmembers_versioned(#11218, "__getattribute__", #11220, "2") +py_cmembers_versioned(#11218, "__objclass__", #11179, "2") +#11221 = @"C_type$file$2softspace$2__repr__" +py_cobjects(#11221) +py_cobjecttypes(#11221, #10009) +py_cobject_sources(#11221, 0) +py_cobjectnames(#11221, "__repr__") +py_cmembers_versioned(#11218, "__repr__", #11221, "2") +#11222 = @"C_type$file$2softspace$2__get__" +py_cobjects(#11222) +py_cobjecttypes(#11222, #10009) +py_cobject_sources(#11222, 0) +py_cobjectnames(#11222, "__get__") +py_cmembers_versioned(#11218, "__get__", #11222, "2") +#11223 = @"C_bytes$be4f12d9d1611c73ef9e7410a5d10ffc7bcce51a" +py_cobjects(#11223) +py_cobjecttypes(#11223, #10028) +py_cobject_sources(#11223, 0) +py_cobjectnames(#11223, "b'flag indicating that a space needs to be printed; used by print'") +py_cmembers_versioned(#11218, "__doc__", #11223, "2") +#11224 = @"C_type$file$2softspace$2__delete__" +py_cobjects(#11224) +py_cobjecttypes(#11224, #10009) +py_cobject_sources(#11224, 0) +py_cobjectnames(#11224, "__delete__") +py_cmembers_versioned(#11218, "__delete__", #11224, "2") +py_cobjectnames(#11218, "softspace") +py_cmembers_versioned(#11179, "softspace", #11218, "2") +#11225 = @"C_type$file$2tell" +py_cobjects(#11225) +py_cobjecttypes(#11225, #10034) +py_cobject_sources(#11225, 0) +py_cobjectnames(#11225, "tell") +py_cmembers_versioned(#11179, "tell", #11225, "2") +#11226 = @"C_type$file$2truncate" +py_cobjects(#11226) +py_cobjecttypes(#11226, #10034) +py_cobject_sources(#11226, 0) +py_cobjectnames(#11226, "truncate") +py_cmembers_versioned(#11179, "truncate", #11226, "2") +#11227 = @"C_type$file$2write" +py_cobjects(#11227) +py_cobjecttypes(#11227, #10034) +py_cobject_sources(#11227, 0) +py_cobjectnames(#11227, "write") +py_cmembers_versioned(#11179, "write", #11227, "2") +#11228 = @"C_type$file$2writelines" +py_cobjects(#11228) +py_cobjecttypes(#11228, #10034) +py_cobject_sources(#11228, 0) +py_cobjectnames(#11228, "writelines") +py_cmembers_versioned(#11179, "writelines", #11228, "2") +#11229 = @"C_type$file$2xreadlines" +py_cobjects(#11229) +py_cobjecttypes(#11229, #10034) +py_cobject_sources(#11229, 0) +py_cobjectnames(#11229, "xreadlines") +py_cmembers_versioned(#11179, "xreadlines", #11229, "2") +py_cmembers_versioned(#11179, ".super.", #10021, "2") +py_cobjectnames(#11179, "file") +py_cmembers_versioned(#10760, "file", #11179, "2") +#11230 = @"C_builtin_function_or_method$builtins.filter" +py_cobjects(#11230) +py_cobjecttypes(#11230, #10075) +py_cobject_sources(#11230, 0) +py_cobjectnames(#11230, "filter") +py_cmembers_versioned(#10760, "filter", #11230, "2") +#11231 = @"C_type$float" +py_cobjects(#11231) +py_cobjecttypes(#11231, #10001) +py_cobject_sources(#11231, 0) +#11232 = @"C_type$float$2__abs__" +py_cobjects(#11232) +py_cobjecttypes(#11232, #10005) +py_cobject_sources(#11232, 0) +py_cobjectnames(#11232, "__abs__") +py_cmembers_versioned(#11231, "__abs__", #11232, "2") +#11233 = @"C_type$float$2__add__" +py_cobjects(#11233) +py_cobjecttypes(#11233, #10005) +py_cobject_sources(#11233, 0) +py_cobjectnames(#11233, "__add__") +py_cmembers_versioned(#11231, "__add__", #11233, "2") +#11234 = @"C_type$float$2__coerce__" +py_cobjects(#11234) +py_cobjecttypes(#11234, #10005) +py_cobject_sources(#11234, 0) +py_cobjectnames(#11234, "__coerce__") +py_cmembers_versioned(#11231, "__coerce__", #11234, "2") +#11235 = @"C_type$float$2__div__" +py_cobjects(#11235) +py_cobjecttypes(#11235, #10005) +py_cobject_sources(#11235, 0) +py_cobjectnames(#11235, "__div__") +py_cmembers_versioned(#11231, "__div__", #11235, "2") +#11236 = @"C_type$float$2__divmod__" +py_cobjects(#11236) +py_cobjecttypes(#11236, #10005) +py_cobject_sources(#11236, 0) +py_cobjectnames(#11236, "__divmod__") +py_cmembers_versioned(#11231, "__divmod__", #11236, "2") +#11237 = @"C_bytes$8365cc677c8272c38289c9bfa732faf18370a91b" +py_cobjects(#11237) +py_cobjecttypes(#11237, #10028) +py_cobject_sources(#11237, 0) +py_cobjectnames(#11237, "b'float(x) -> floating point number + +Convert a string or number to a floating point number, if possible.'") +py_cmembers_versioned(#11231, "__doc__", #11237, "2") +#11238 = @"C_type$float$2__eq__" +py_cobjects(#11238) +py_cobjecttypes(#11238, #10005) +py_cobject_sources(#11238, 0) +py_cobjectnames(#11238, "__eq__") +py_cmembers_versioned(#11231, "__eq__", #11238, "2") +#11239 = @"C_type$float$2__float__" +py_cobjects(#11239) +py_cobjecttypes(#11239, #10005) +py_cobject_sources(#11239, 0) +py_cobjectnames(#11239, "__float__") +py_cmembers_versioned(#11231, "__float__", #11239, "2") +#11240 = @"C_type$float$2__floordiv__" +py_cobjects(#11240) +py_cobjecttypes(#11240, #10005) +py_cobject_sources(#11240, 0) +py_cobjectnames(#11240, "__floordiv__") +py_cmembers_versioned(#11231, "__floordiv__", #11240, "2") +#11241 = @"C_type$float$2__format__" +py_cobjects(#11241) +py_cobjecttypes(#11241, #10034) +py_cobject_sources(#11241, 0) +py_cobjectnames(#11241, "__format__") +py_cmembers_versioned(#11231, "__format__", #11241, "2") +#11242 = @"C_type$float$2__ge__" +py_cobjects(#11242) +py_cobjecttypes(#11242, #10005) +py_cobject_sources(#11242, 0) +py_cobjectnames(#11242, "__ge__") +py_cmembers_versioned(#11231, "__ge__", #11242, "2") +#11243 = @"C_type$float$2__getattribute__" +py_cobjects(#11243) +py_cobjecttypes(#11243, #10005) +py_cobject_sources(#11243, 0) +py_cobjectnames(#11243, "__getattribute__") +py_cmembers_versioned(#11231, "__getattribute__", #11243, "2") +#11244 = @"C_type$float$2__getformat__" +py_cobjects(#11244) +py_cobjecttypes(#11244, #10169) +py_cobject_sources(#11244, 0) +py_cobjectnames(#11244, "__getformat__") +py_cmembers_versioned(#11231, "__getformat__", #11244, "2") +#11245 = @"C_type$float$2__getnewargs__" +py_cobjects(#11245) +py_cobjecttypes(#11245, #10034) +py_cobject_sources(#11245, 0) +py_cobjectnames(#11245, "__getnewargs__") +py_cmembers_versioned(#11231, "__getnewargs__", #11245, "2") +#11246 = @"C_type$float$2__gt__" +py_cobjects(#11246) +py_cobjecttypes(#11246, #10005) +py_cobject_sources(#11246, 0) +py_cobjectnames(#11246, "__gt__") +py_cmembers_versioned(#11231, "__gt__", #11246, "2") +#11247 = @"C_type$float$2__hash__" +py_cobjects(#11247) +py_cobjecttypes(#11247, #10005) +py_cobject_sources(#11247, 0) +py_cobjectnames(#11247, "__hash__") +py_cmembers_versioned(#11231, "__hash__", #11247, "2") +#11248 = @"C_type$float$2__int__" +py_cobjects(#11248) +py_cobjecttypes(#11248, #10005) +py_cobject_sources(#11248, 0) +py_cobjectnames(#11248, "__int__") +py_cmembers_versioned(#11231, "__int__", #11248, "2") +#11249 = @"C_type$float$2__le__" +py_cobjects(#11249) +py_cobjecttypes(#11249, #10005) +py_cobject_sources(#11249, 0) +py_cobjectnames(#11249, "__le__") +py_cmembers_versioned(#11231, "__le__", #11249, "2") +#11250 = @"C_type$float$2__long__" +py_cobjects(#11250) +py_cobjecttypes(#11250, #10005) +py_cobject_sources(#11250, 0) +py_cobjectnames(#11250, "__long__") +py_cmembers_versioned(#11231, "__long__", #11250, "2") +#11251 = @"C_type$float$2__lt__" +py_cobjects(#11251) +py_cobjecttypes(#11251, #10005) +py_cobject_sources(#11251, 0) +py_cobjectnames(#11251, "__lt__") +py_cmembers_versioned(#11231, "__lt__", #11251, "2") +#11252 = @"C_type$float$2__mod__" +py_cobjects(#11252) +py_cobjecttypes(#11252, #10005) +py_cobject_sources(#11252, 0) +py_cobjectnames(#11252, "__mod__") +py_cmembers_versioned(#11231, "__mod__", #11252, "2") +#11253 = @"C_type$float$2__mul__" +py_cobjects(#11253) +py_cobjecttypes(#11253, #10005) +py_cobject_sources(#11253, 0) +py_cobjectnames(#11253, "__mul__") +py_cmembers_versioned(#11231, "__mul__", #11253, "2") +#11254 = @"C_type$float$2__ne__" +py_cobjects(#11254) +py_cobjecttypes(#11254, #10005) +py_cobject_sources(#11254, 0) +py_cobjectnames(#11254, "__ne__") +py_cmembers_versioned(#11231, "__ne__", #11254, "2") +#11255 = @"C_type$float$2__neg__" +py_cobjects(#11255) +py_cobjecttypes(#11255, #10005) +py_cobject_sources(#11255, 0) +py_cobjectnames(#11255, "__neg__") +py_cmembers_versioned(#11231, "__neg__", #11255, "2") +#11256 = @"C_type$float$2__new__" +py_cobjects(#11256) +py_cobjecttypes(#11256, #10075) +py_cobject_sources(#11256, 0) +py_cobjectnames(#11256, "__new__") +py_cmembers_versioned(#11231, "__new__", #11256, "2") +#11257 = @"C_type$float$2__nonzero__" +py_cobjects(#11257) +py_cobjecttypes(#11257, #10005) +py_cobject_sources(#11257, 0) +py_cobjectnames(#11257, "__nonzero__") +py_cmembers_versioned(#11231, "__nonzero__", #11257, "2") +#11258 = @"C_type$float$2__pos__" +py_cobjects(#11258) +py_cobjecttypes(#11258, #10005) +py_cobject_sources(#11258, 0) +py_cobjectnames(#11258, "__pos__") +py_cmembers_versioned(#11231, "__pos__", #11258, "2") +#11259 = @"C_type$float$2__pow__" +py_cobjects(#11259) +py_cobjecttypes(#11259, #10005) +py_cobject_sources(#11259, 0) +py_cobjectnames(#11259, "__pow__") +py_cmembers_versioned(#11231, "__pow__", #11259, "2") +#11260 = @"C_type$float$2__radd__" +py_cobjects(#11260) +py_cobjecttypes(#11260, #10005) +py_cobject_sources(#11260, 0) +py_cobjectnames(#11260, "__radd__") +py_cmembers_versioned(#11231, "__radd__", #11260, "2") +#11261 = @"C_type$float$2__rdiv__" +py_cobjects(#11261) +py_cobjecttypes(#11261, #10005) +py_cobject_sources(#11261, 0) +py_cobjectnames(#11261, "__rdiv__") +py_cmembers_versioned(#11231, "__rdiv__", #11261, "2") +#11262 = @"C_type$float$2__rdivmod__" +py_cobjects(#11262) +py_cobjecttypes(#11262, #10005) +py_cobject_sources(#11262, 0) +py_cobjectnames(#11262, "__rdivmod__") +py_cmembers_versioned(#11231, "__rdivmod__", #11262, "2") +#11263 = @"C_type$float$2__repr__" +py_cobjects(#11263) +py_cobjecttypes(#11263, #10005) +py_cobject_sources(#11263, 0) +py_cobjectnames(#11263, "__repr__") +py_cmembers_versioned(#11231, "__repr__", #11263, "2") +#11264 = @"C_type$float$2__rfloordiv__" +py_cobjects(#11264) +py_cobjecttypes(#11264, #10005) +py_cobject_sources(#11264, 0) +py_cobjectnames(#11264, "__rfloordiv__") +py_cmembers_versioned(#11231, "__rfloordiv__", #11264, "2") +#11265 = @"C_type$float$2__rmod__" +py_cobjects(#11265) +py_cobjecttypes(#11265, #10005) +py_cobject_sources(#11265, 0) +py_cobjectnames(#11265, "__rmod__") +py_cmembers_versioned(#11231, "__rmod__", #11265, "2") +#11266 = @"C_type$float$2__rmul__" +py_cobjects(#11266) +py_cobjecttypes(#11266, #10005) +py_cobject_sources(#11266, 0) +py_cobjectnames(#11266, "__rmul__") +py_cmembers_versioned(#11231, "__rmul__", #11266, "2") +#11267 = @"C_type$float$2__rpow__" +py_cobjects(#11267) +py_cobjecttypes(#11267, #10005) +py_cobject_sources(#11267, 0) +py_cobjectnames(#11267, "__rpow__") +py_cmembers_versioned(#11231, "__rpow__", #11267, "2") +#11268 = @"C_type$float$2__rsub__" +py_cobjects(#11268) +py_cobjecttypes(#11268, #10005) +py_cobject_sources(#11268, 0) +py_cobjectnames(#11268, "__rsub__") +py_cmembers_versioned(#11231, "__rsub__", #11268, "2") +#11269 = @"C_type$float$2__rtruediv__" +py_cobjects(#11269) +py_cobjecttypes(#11269, #10005) +py_cobject_sources(#11269, 0) +py_cobjectnames(#11269, "__rtruediv__") +py_cmembers_versioned(#11231, "__rtruediv__", #11269, "2") +#11270 = @"C_type$float$2__setformat__" +py_cobjects(#11270) +py_cobjecttypes(#11270, #10169) +py_cobject_sources(#11270, 0) +py_cobjectnames(#11270, "__setformat__") +py_cmembers_versioned(#11231, "__setformat__", #11270, "2") +#11271 = @"C_type$float$2__str__" +py_cobjects(#11271) +py_cobjecttypes(#11271, #10005) +py_cobject_sources(#11271, 0) +py_cobjectnames(#11271, "__str__") +py_cmembers_versioned(#11231, "__str__", #11271, "2") +#11272 = @"C_type$float$2__sub__" +py_cobjects(#11272) +py_cobjecttypes(#11272, #10005) +py_cobject_sources(#11272, 0) +py_cobjectnames(#11272, "__sub__") +py_cmembers_versioned(#11231, "__sub__", #11272, "2") +#11273 = @"C_type$float$2__truediv__" +py_cobjects(#11273) +py_cobjecttypes(#11273, #10005) +py_cobject_sources(#11273, 0) +py_cobjectnames(#11273, "__truediv__") +py_cmembers_versioned(#11231, "__truediv__", #11273, "2") +#11274 = @"C_type$float$2__trunc__" +py_cobjects(#11274) +py_cobjecttypes(#11274, #10034) +py_cobject_sources(#11274, 0) +py_cobjectnames(#11274, "__trunc__") +py_cmembers_versioned(#11231, "__trunc__", #11274, "2") +#11275 = @"C_type$float$2as_integer_ratio" +py_cobjects(#11275) +py_cobjecttypes(#11275, #10034) +py_cobject_sources(#11275, 0) +py_cobjectnames(#11275, "as_integer_ratio") +py_cmembers_versioned(#11231, "as_integer_ratio", #11275, "2") +#11276 = @"C_type$float$2conjugate" +py_cobjects(#11276) +py_cobjecttypes(#11276, #10034) +py_cobject_sources(#11276, 0) +py_cobjectnames(#11276, "conjugate") +py_cmembers_versioned(#11231, "conjugate", #11276, "2") +#11277 = @"C_type$float$2fromhex" +py_cobjects(#11277) +py_cobjecttypes(#11277, #10169) +py_cobject_sources(#11277, 0) +py_cobjectnames(#11277, "fromhex") +py_cmembers_versioned(#11231, "fromhex", #11277, "2") +#11278 = @"C_type$float$2hex" +py_cobjects(#11278) +py_cobjecttypes(#11278, #10034) +py_cobject_sources(#11278, 0) +py_cobjectnames(#11278, "hex") +py_cmembers_versioned(#11231, "hex", #11278, "2") +#11279 = @"C_type$float$2imag" +py_cobjects(#11279) +py_cobjecttypes(#11279, #10003) +py_cobject_sources(#11279, 0) +#11280 = @"C_type$float$2imag$2__set__" +py_cobjects(#11280) +py_cobjecttypes(#11280, #10009) +py_cobject_sources(#11280, 0) +py_cobjectnames(#11280, "__set__") +py_cmembers_versioned(#11279, "__set__", #11280, "2") +#11281 = @"C_type$float$2imag$2__getattribute__" +py_cobjects(#11281) +py_cobjecttypes(#11281, #10009) +py_cobject_sources(#11281, 0) +py_cobjectnames(#11281, "__getattribute__") +py_cmembers_versioned(#11279, "__getattribute__", #11281, "2") +py_cmembers_versioned(#11279, "__objclass__", #11231, "2") +#11282 = @"C_type$float$2imag$2__repr__" +py_cobjects(#11282) +py_cobjecttypes(#11282, #10009) +py_cobject_sources(#11282, 0) +py_cobjectnames(#11282, "__repr__") +py_cmembers_versioned(#11279, "__repr__", #11282, "2") +#11283 = @"C_type$float$2imag$2__get__" +py_cobjects(#11283) +py_cobjecttypes(#11283, #10009) +py_cobject_sources(#11283, 0) +py_cobjectnames(#11283, "__get__") +py_cmembers_versioned(#11279, "__get__", #11283, "2") +#11284 = @"C_bytes$1697c2b9b4c10d325b12cf3fded2fbfc0e15d5f0" +py_cobjects(#11284) +py_cobjecttypes(#11284, #10028) +py_cobject_sources(#11284, 0) +py_cobjectnames(#11284, "b'the imaginary part of a complex number'") +py_cmembers_versioned(#11279, "__doc__", #11284, "2") +#11285 = @"C_type$float$2imag$2__delete__" +py_cobjects(#11285) +py_cobjecttypes(#11285, #10009) +py_cobject_sources(#11285, 0) +py_cobjectnames(#11285, "__delete__") +py_cmembers_versioned(#11279, "__delete__", #11285, "2") +py_cobjectnames(#11279, "imag") +py_cmembers_versioned(#11231, "imag", #11279, "2") +#11286 = @"C_type$float$2is_integer" +py_cobjects(#11286) +py_cobjecttypes(#11286, #10034) +py_cobject_sources(#11286, 0) +py_cobjectnames(#11286, "is_integer") +py_cmembers_versioned(#11231, "is_integer", #11286, "2") +#11287 = @"C_type$float$2real" +py_cobjects(#11287) +py_cobjecttypes(#11287, #10003) +py_cobject_sources(#11287, 0) +#11288 = @"C_type$float$2real$2__set__" +py_cobjects(#11288) +py_cobjecttypes(#11288, #10009) +py_cobject_sources(#11288, 0) +py_cobjectnames(#11288, "__set__") +py_cmembers_versioned(#11287, "__set__", #11288, "2") +#11289 = @"C_type$float$2real$2__getattribute__" +py_cobjects(#11289) +py_cobjecttypes(#11289, #10009) +py_cobject_sources(#11289, 0) +py_cobjectnames(#11289, "__getattribute__") +py_cmembers_versioned(#11287, "__getattribute__", #11289, "2") +py_cmembers_versioned(#11287, "__objclass__", #11231, "2") +#11290 = @"C_type$float$2real$2__repr__" +py_cobjects(#11290) +py_cobjecttypes(#11290, #10009) +py_cobject_sources(#11290, 0) +py_cobjectnames(#11290, "__repr__") +py_cmembers_versioned(#11287, "__repr__", #11290, "2") +#11291 = @"C_type$float$2real$2__get__" +py_cobjects(#11291) +py_cobjecttypes(#11291, #10009) +py_cobject_sources(#11291, 0) +py_cobjectnames(#11291, "__get__") +py_cmembers_versioned(#11287, "__get__", #11291, "2") +#11292 = @"C_bytes$2cb527e0bacedb07e674d6e9890d3d2ab1a8f487" +py_cobjects(#11292) +py_cobjecttypes(#11292, #10028) +py_cobject_sources(#11292, 0) +py_cobjectnames(#11292, "b'the real part of a complex number'") +py_cmembers_versioned(#11287, "__doc__", #11292, "2") +#11293 = @"C_type$float$2real$2__delete__" +py_cobjects(#11293) +py_cobjecttypes(#11293, #10009) +py_cobject_sources(#11293, 0) +py_cobjectnames(#11293, "__delete__") +py_cmembers_versioned(#11287, "__delete__", #11293, "2") +py_cobjectnames(#11287, "real") +py_cmembers_versioned(#11231, "real", #11287, "2") +py_cmembers_versioned(#11231, ".super.", #10021, "2") +py_cobjectnames(#11231, "float") +py_cmembers_versioned(#10760, "float", #11231, "2") +#11294 = @"C_builtin_function_or_method$builtins.format" +py_cobjects(#11294) +py_cobjecttypes(#11294, #10075) +py_cobject_sources(#11294, 0) +py_cobjectnames(#11294, "format") +py_cmembers_versioned(#10760, "format", #11294, "2") +#11295 = @"C_type$frozenset" +py_cobjects(#11295) +py_cobjecttypes(#11295, #10001) +py_cobject_sources(#11295, 0) +#11296 = @"C_type$frozenset$2__and__" +py_cobjects(#11296) +py_cobjecttypes(#11296, #10005) +py_cobject_sources(#11296, 0) +py_cobjectnames(#11296, "__and__") +py_cmembers_versioned(#11295, "__and__", #11296, "2") +#11297 = @"C_type$frozenset$2__cmp__" +py_cobjects(#11297) +py_cobjecttypes(#11297, #10005) +py_cobject_sources(#11297, 0) +py_cobjectnames(#11297, "__cmp__") +py_cmembers_versioned(#11295, "__cmp__", #11297, "2") +#11298 = @"C_type$frozenset$2__contains__" +py_cobjects(#11298) +py_cobjecttypes(#11298, #10034) +py_cobject_sources(#11298, 0) +py_cobjectnames(#11298, "__contains__") +py_cmembers_versioned(#11295, "__contains__", #11298, "2") +#11299 = @"C_bytes$dd2991949f142904935210689ba50c9ae0a87b00" +py_cobjects(#11299) +py_cobjecttypes(#11299, #10028) +py_cobject_sources(#11299, 0) +py_cobjectnames(#11299, "b'frozenset() -> empty frozenset object +frozenset(iterable) -> frozenset object + +Build an immutable unordered collection of unique elements.'") +py_cmembers_versioned(#11295, "__doc__", #11299, "2") +#11300 = @"C_type$frozenset$2__eq__" +py_cobjects(#11300) +py_cobjecttypes(#11300, #10005) +py_cobject_sources(#11300, 0) +py_cobjectnames(#11300, "__eq__") +py_cmembers_versioned(#11295, "__eq__", #11300, "2") +#11301 = @"C_type$frozenset$2__ge__" +py_cobjects(#11301) +py_cobjecttypes(#11301, #10005) +py_cobject_sources(#11301, 0) +py_cobjectnames(#11301, "__ge__") +py_cmembers_versioned(#11295, "__ge__", #11301, "2") +#11302 = @"C_type$frozenset$2__getattribute__" +py_cobjects(#11302) +py_cobjecttypes(#11302, #10005) +py_cobject_sources(#11302, 0) +py_cobjectnames(#11302, "__getattribute__") +py_cmembers_versioned(#11295, "__getattribute__", #11302, "2") +#11303 = @"C_type$frozenset$2__gt__" +py_cobjects(#11303) +py_cobjecttypes(#11303, #10005) +py_cobject_sources(#11303, 0) +py_cobjectnames(#11303, "__gt__") +py_cmembers_versioned(#11295, "__gt__", #11303, "2") +#11304 = @"C_type$frozenset$2__hash__" +py_cobjects(#11304) +py_cobjecttypes(#11304, #10005) +py_cobject_sources(#11304, 0) +py_cobjectnames(#11304, "__hash__") +py_cmembers_versioned(#11295, "__hash__", #11304, "2") +#11305 = @"C_type$frozenset$2__iter__" +py_cobjects(#11305) +py_cobjecttypes(#11305, #10005) +py_cobject_sources(#11305, 0) +py_cobjectnames(#11305, "__iter__") +py_cmembers_versioned(#11295, "__iter__", #11305, "2") +#11306 = @"C_type$frozenset$2__le__" +py_cobjects(#11306) +py_cobjecttypes(#11306, #10005) +py_cobject_sources(#11306, 0) +py_cobjectnames(#11306, "__le__") +py_cmembers_versioned(#11295, "__le__", #11306, "2") +#11307 = @"C_type$frozenset$2__len__" +py_cobjects(#11307) +py_cobjecttypes(#11307, #10005) +py_cobject_sources(#11307, 0) +py_cobjectnames(#11307, "__len__") +py_cmembers_versioned(#11295, "__len__", #11307, "2") +#11308 = @"C_type$frozenset$2__lt__" +py_cobjects(#11308) +py_cobjecttypes(#11308, #10005) +py_cobject_sources(#11308, 0) +py_cobjectnames(#11308, "__lt__") +py_cmembers_versioned(#11295, "__lt__", #11308, "2") +#11309 = @"C_type$frozenset$2__ne__" +py_cobjects(#11309) +py_cobjecttypes(#11309, #10005) +py_cobject_sources(#11309, 0) +py_cobjectnames(#11309, "__ne__") +py_cmembers_versioned(#11295, "__ne__", #11309, "2") +#11310 = @"C_type$frozenset$2__new__" +py_cobjects(#11310) +py_cobjecttypes(#11310, #10075) +py_cobject_sources(#11310, 0) +py_cobjectnames(#11310, "__new__") +py_cmembers_versioned(#11295, "__new__", #11310, "2") +#11311 = @"C_type$frozenset$2__or__" +py_cobjects(#11311) +py_cobjecttypes(#11311, #10005) +py_cobject_sources(#11311, 0) +py_cobjectnames(#11311, "__or__") +py_cmembers_versioned(#11295, "__or__", #11311, "2") +#11312 = @"C_type$frozenset$2__rand__" +py_cobjects(#11312) +py_cobjecttypes(#11312, #10005) +py_cobject_sources(#11312, 0) +py_cobjectnames(#11312, "__rand__") +py_cmembers_versioned(#11295, "__rand__", #11312, "2") +#11313 = @"C_type$frozenset$2__reduce__" +py_cobjects(#11313) +py_cobjecttypes(#11313, #10034) +py_cobject_sources(#11313, 0) +py_cobjectnames(#11313, "__reduce__") +py_cmembers_versioned(#11295, "__reduce__", #11313, "2") +#11314 = @"C_type$frozenset$2__repr__" +py_cobjects(#11314) +py_cobjecttypes(#11314, #10005) +py_cobject_sources(#11314, 0) +py_cobjectnames(#11314, "__repr__") +py_cmembers_versioned(#11295, "__repr__", #11314, "2") +#11315 = @"C_type$frozenset$2__ror__" +py_cobjects(#11315) +py_cobjecttypes(#11315, #10005) +py_cobject_sources(#11315, 0) +py_cobjectnames(#11315, "__ror__") +py_cmembers_versioned(#11295, "__ror__", #11315, "2") +#11316 = @"C_type$frozenset$2__rsub__" +py_cobjects(#11316) +py_cobjecttypes(#11316, #10005) +py_cobject_sources(#11316, 0) +py_cobjectnames(#11316, "__rsub__") +py_cmembers_versioned(#11295, "__rsub__", #11316, "2") +#11317 = @"C_type$frozenset$2__rxor__" +py_cobjects(#11317) +py_cobjecttypes(#11317, #10005) +py_cobject_sources(#11317, 0) +py_cobjectnames(#11317, "__rxor__") +py_cmembers_versioned(#11295, "__rxor__", #11317, "2") +#11318 = @"C_type$frozenset$2__sizeof__" +py_cobjects(#11318) +py_cobjecttypes(#11318, #10034) +py_cobject_sources(#11318, 0) +py_cobjectnames(#11318, "__sizeof__") +py_cmembers_versioned(#11295, "__sizeof__", #11318, "2") +#11319 = @"C_type$frozenset$2__sub__" +py_cobjects(#11319) +py_cobjecttypes(#11319, #10005) +py_cobject_sources(#11319, 0) +py_cobjectnames(#11319, "__sub__") +py_cmembers_versioned(#11295, "__sub__", #11319, "2") +#11320 = @"C_type$frozenset$2__xor__" +py_cobjects(#11320) +py_cobjecttypes(#11320, #10005) +py_cobject_sources(#11320, 0) +py_cobjectnames(#11320, "__xor__") +py_cmembers_versioned(#11295, "__xor__", #11320, "2") +#11321 = @"C_type$frozenset$2copy" +py_cobjects(#11321) +py_cobjecttypes(#11321, #10034) +py_cobject_sources(#11321, 0) +py_cobjectnames(#11321, "copy") +py_cmembers_versioned(#11295, "copy", #11321, "2") +#11322 = @"C_type$frozenset$2difference" +py_cobjects(#11322) +py_cobjecttypes(#11322, #10034) +py_cobject_sources(#11322, 0) +py_cobjectnames(#11322, "difference") +py_cmembers_versioned(#11295, "difference", #11322, "2") +#11323 = @"C_type$frozenset$2intersection" +py_cobjects(#11323) +py_cobjecttypes(#11323, #10034) +py_cobject_sources(#11323, 0) +py_cobjectnames(#11323, "intersection") +py_cmembers_versioned(#11295, "intersection", #11323, "2") +#11324 = @"C_type$frozenset$2isdisjoint" +py_cobjects(#11324) +py_cobjecttypes(#11324, #10034) +py_cobject_sources(#11324, 0) +py_cobjectnames(#11324, "isdisjoint") +py_cmembers_versioned(#11295, "isdisjoint", #11324, "2") +#11325 = @"C_type$frozenset$2issubset" +py_cobjects(#11325) +py_cobjecttypes(#11325, #10034) +py_cobject_sources(#11325, 0) +py_cobjectnames(#11325, "issubset") +py_cmembers_versioned(#11295, "issubset", #11325, "2") +#11326 = @"C_type$frozenset$2issuperset" +py_cobjects(#11326) +py_cobjecttypes(#11326, #10034) +py_cobject_sources(#11326, 0) +py_cobjectnames(#11326, "issuperset") +py_cmembers_versioned(#11295, "issuperset", #11326, "2") +#11327 = @"C_type$frozenset$2symmetric_difference" +py_cobjects(#11327) +py_cobjecttypes(#11327, #10034) +py_cobject_sources(#11327, 0) +py_cobjectnames(#11327, "symmetric_difference") +py_cmembers_versioned(#11295, "symmetric_difference", #11327, "2") +#11328 = @"C_type$frozenset$2union" +py_cobjects(#11328) +py_cobjecttypes(#11328, #10034) +py_cobject_sources(#11328, 0) +py_cobjectnames(#11328, "union") +py_cmembers_versioned(#11295, "union", #11328, "2") +py_cmembers_versioned(#11295, ".super.", #10021, "2") +py_cobjectnames(#11295, "frozenset") +py_cmembers_versioned(#10760, "frozenset", #11295, "2") +#11329 = @"C_builtin_function_or_method$builtins.getattr" +py_cobjects(#11329) +py_cobjecttypes(#11329, #10075) +py_cobject_sources(#11329, 0) +py_cobjectnames(#11329, "getattr") +py_cmembers_versioned(#10760, "getattr", #11329, "2") +py_cmembers_versioned(#10760, "globals", #10530, "2") +#11330 = @"C_builtin_function_or_method$builtins.hasattr" +py_cobjects(#11330) +py_cobjecttypes(#11330, #10075) +py_cobject_sources(#11330, 0) +py_cobjectnames(#11330, "hasattr") +py_cmembers_versioned(#10760, "hasattr", #11330, "2") +#11331 = @"C_builtin_function_or_method$builtins.hash" +py_cobjects(#11331) +py_cobjecttypes(#11331, #10075) +py_cobject_sources(#11331, 0) +py_cobjectnames(#11331, "hash") +py_cmembers_versioned(#10760, "hash", #11331, "2") +#11332 = @"C_module$__builtin__$2help" +#11333 = @"C_type$site._Helper" +py_cobjects(#11333) +py_cobjecttypes(#11333, #10001) +py_cobject_sources(#11333, 0) +#11334 = @"C_type$site._Helper$2__call__" +py_cobjects(#11334) +py_cobjecttypes(#11334, #10000) +py_cobject_sources(#11334, 0) +py_cobjectnames(#11334, "__call__") +py_cmembers_versioned(#11333, "__call__", #11334, "2") +#11335 = @"C_type$site._Helper$2__dict__" +py_cobjects(#11335) +py_cobjecttypes(#11335, #10003) +py_cobject_sources(#11335, 0) +#11336 = @"C_type$site._Helper$2__dict__$2__set__" +py_cobjects(#11336) +py_cobjecttypes(#11336, #10009) +py_cobject_sources(#11336, 0) +py_cobjectnames(#11336, "__set__") +py_cmembers_versioned(#11335, "__set__", #11336, "2") +#11337 = @"C_type$site._Helper$2__dict__$2__getattribute__" +py_cobjects(#11337) +py_cobjecttypes(#11337, #10009) +py_cobject_sources(#11337, 0) +py_cobjectnames(#11337, "__getattribute__") +py_cmembers_versioned(#11335, "__getattribute__", #11337, "2") +py_cmembers_versioned(#11335, "__objclass__", #11333, "2") +#11338 = @"C_type$site._Helper$2__dict__$2__repr__" +py_cobjects(#11338) +py_cobjecttypes(#11338, #10009) +py_cobject_sources(#11338, 0) +py_cobjectnames(#11338, "__repr__") +py_cmembers_versioned(#11335, "__repr__", #11338, "2") +#11339 = @"C_type$site._Helper$2__dict__$2__get__" +py_cobjects(#11339) +py_cobjecttypes(#11339, #10009) +py_cobject_sources(#11339, 0) +py_cobjectnames(#11339, "__get__") +py_cmembers_versioned(#11335, "__get__", #11339, "2") +#11340 = @"C_bytes$1caffae7c2cd65c04c7d894ccd85fd466c39c173" +py_cobjects(#11340) +py_cobjecttypes(#11340, #10028) +py_cobject_sources(#11340, 0) +py_cobjectnames(#11340, "b'dictionary for instance variables (if defined)'") +py_cmembers_versioned(#11335, "__doc__", #11340, "2") +#11341 = @"C_type$site._Helper$2__dict__$2__delete__" +py_cobjects(#11341) +py_cobjecttypes(#11341, #10009) +py_cobject_sources(#11341, 0) +py_cobjectnames(#11341, "__delete__") +py_cmembers_versioned(#11335, "__delete__", #11341, "2") +py_cobjectnames(#11335, "__dict__") +py_cmembers_versioned(#11333, "__dict__", #11335, "2") +#11342 = @"C_bytes$c78bbc1f1f8c49e5dde8a64e59e2614c395b4d56" +py_cobjects(#11342) +py_cobjecttypes(#11342, #10028) +py_cobject_sources(#11342, 0) +py_cobjectnames(#11342, "b'Define the builtin 'help'. + This is a wrapper around pydoc.help (with a twist). + + '") +py_cmembers_versioned(#11333, "__doc__", #11342, "2") +py_cmembers_versioned(#11333, "__module__", #11138, "2") +#11343 = @"C_type$site._Helper$2__repr__" +py_cobjects(#11343) +py_cobjecttypes(#11343, #10000) +py_cobject_sources(#11343, 0) +py_cobjectnames(#11343, "__repr__") +py_cmembers_versioned(#11333, "__repr__", #11343, "2") +#11344 = @"C_type$site._Helper$2__weakref__" +py_cobjects(#11344) +py_cobjecttypes(#11344, #10003) +py_cobject_sources(#11344, 0) +#11345 = @"C_type$site._Helper$2__weakref__$2__set__" +py_cobjects(#11345) +py_cobjecttypes(#11345, #10009) +py_cobject_sources(#11345, 0) +py_cobjectnames(#11345, "__set__") +py_cmembers_versioned(#11344, "__set__", #11345, "2") +#11346 = @"C_type$site._Helper$2__weakref__$2__getattribute__" +py_cobjects(#11346) +py_cobjecttypes(#11346, #10009) +py_cobject_sources(#11346, 0) +py_cobjectnames(#11346, "__getattribute__") +py_cmembers_versioned(#11344, "__getattribute__", #11346, "2") +py_cmembers_versioned(#11344, "__objclass__", #11333, "2") +#11347 = @"C_type$site._Helper$2__weakref__$2__repr__" +py_cobjects(#11347) +py_cobjecttypes(#11347, #10009) +py_cobject_sources(#11347, 0) +py_cobjectnames(#11347, "__repr__") +py_cmembers_versioned(#11344, "__repr__", #11347, "2") +#11348 = @"C_type$site._Helper$2__weakref__$2__get__" +py_cobjects(#11348) +py_cobjecttypes(#11348, #10009) +py_cobject_sources(#11348, 0) +py_cobjectnames(#11348, "__get__") +py_cmembers_versioned(#11344, "__get__", #11348, "2") +#11349 = @"C_bytes$288bf61a8280860bb3d2b542aa2ec112948d35b5" +py_cobjects(#11349) +py_cobjecttypes(#11349, #10028) +py_cobject_sources(#11349, 0) +py_cobjectnames(#11349, "b'list of weak references to the object (if defined)'") +py_cmembers_versioned(#11344, "__doc__", #11349, "2") +#11350 = @"C_type$site._Helper$2__weakref__$2__delete__" +py_cobjects(#11350) +py_cobjecttypes(#11350, #10009) +py_cobject_sources(#11350, 0) +py_cobjectnames(#11350, "__delete__") +py_cmembers_versioned(#11344, "__delete__", #11350, "2") +py_cobjectnames(#11344, "__weakref__") +py_cmembers_versioned(#11333, "__weakref__", #11344, "2") +py_cmembers_versioned(#11333, ".super.", #10021, "2") +py_cobjectnames(#11333, "site._Helper") +py_cobjects(#11332) +py_cobjecttypes(#11332, #11333) +py_cobject_sources(#11332, 0) +py_cobjectnames(#11332, "object") +py_cmembers_versioned(#10760, "help", #11332, "2") +#11351 = @"C_builtin_function_or_method$builtins.hex" +py_cobjects(#11351) +py_cobjecttypes(#11351, #10075) +py_cobject_sources(#11351, 0) +py_cobjectnames(#11351, "hex") +py_cmembers_versioned(#10760, "hex", #11351, "2") +#11352 = @"C_builtin_function_or_method$builtins.id" +py_cobjects(#11352) +py_cobjecttypes(#11352, #10075) +py_cobject_sources(#11352, 0) +py_cobjectnames(#11352, "id") +py_cmembers_versioned(#10760, "id", #11352, "2") +#11353 = @"C_builtin_function_or_method$builtins.input" +py_cobjects(#11353) +py_cobjecttypes(#11353, #10075) +py_cobject_sources(#11353, 0) +py_cobjectnames(#11353, "input") +py_cmembers_versioned(#10760, "input", #11353, "2") +py_cmembers_versioned(#10760, "int", #10449, "2") +#11354 = @"C_builtin_function_or_method$builtins.intern" +py_cobjects(#11354) +py_cobjecttypes(#11354, #10075) +py_cobject_sources(#11354, 0) +py_cobjectnames(#11354, "intern") +py_cmembers_versioned(#10760, "intern", #11354, "2") +#11355 = @"C_builtin_function_or_method$builtins.isinstance" +py_cobjects(#11355) +py_cobjecttypes(#11355, #10075) +py_cobject_sources(#11355, 0) +py_cobjectnames(#11355, "isinstance") +py_cmembers_versioned(#10760, "isinstance", #11355, "2") +#11356 = @"C_builtin_function_or_method$builtins.issubclass" +py_cobjects(#11356) +py_cobjecttypes(#11356, #10075) +py_cobject_sources(#11356, 0) +py_cobjectnames(#11356, "issubclass") +py_cmembers_versioned(#10760, "issubclass", #11356, "2") +#11357 = @"C_builtin_function_or_method$builtins.iter" +py_cobjects(#11357) +py_cobjecttypes(#11357, #10075) +py_cobject_sources(#11357, 0) +py_cobjectnames(#11357, "iter") +py_cmembers_versioned(#10760, "iter", #11357, "2") +#11358 = @"C_builtin_function_or_method$builtins.len" +py_cobjects(#11358) +py_cobjecttypes(#11358, #10075) +py_cobject_sources(#11358, 0) +py_cobjectnames(#11358, "len") +py_cmembers_versioned(#10760, "len", #11358, "2") +#11359 = @"C_module$__builtin__$2license" +py_cobjects(#11359) +py_cobjecttypes(#11359, #11125) +py_cobject_sources(#11359, 0) +py_cobjectnames(#11359, "object") +py_cmembers_versioned(#10760, "license", #11359, "2") +#11360 = @"C_type$list" +py_cobjects(#11360) +py_cobjecttypes(#11360, #10001) +py_cobject_sources(#11360, 0) +#11361 = @"C_type$list$2__add__" +py_cobjects(#11361) +py_cobjecttypes(#11361, #10005) +py_cobject_sources(#11361, 0) +py_cobjectnames(#11361, "__add__") +py_cmembers_versioned(#11360, "__add__", #11361, "2") +#11362 = @"C_type$list$2__contains__" +py_cobjects(#11362) +py_cobjecttypes(#11362, #10005) +py_cobject_sources(#11362, 0) +py_cobjectnames(#11362, "__contains__") +py_cmembers_versioned(#11360, "__contains__", #11362, "2") +#11363 = @"C_type$list$2__delitem__" +py_cobjects(#11363) +py_cobjecttypes(#11363, #10005) +py_cobject_sources(#11363, 0) +py_cobjectnames(#11363, "__delitem__") +py_cmembers_versioned(#11360, "__delitem__", #11363, "2") +#11364 = @"C_type$list$2__delslice__" +py_cobjects(#11364) +py_cobjecttypes(#11364, #10005) +py_cobject_sources(#11364, 0) +py_cobjectnames(#11364, "__delslice__") +py_cmembers_versioned(#11360, "__delslice__", #11364, "2") +#11365 = @"C_bytes$e11af338beeb141135c0e1af1300e77bd0820043" +py_cobjects(#11365) +py_cobjecttypes(#11365, #10028) +py_cobject_sources(#11365, 0) +py_cobjectnames(#11365, "b'list() -> new empty list +list(iterable) -> new list initialized from iterable's items'") +py_cmembers_versioned(#11360, "__doc__", #11365, "2") +#11366 = @"C_type$list$2__eq__" +py_cobjects(#11366) +py_cobjecttypes(#11366, #10005) +py_cobject_sources(#11366, 0) +py_cobjectnames(#11366, "__eq__") +py_cmembers_versioned(#11360, "__eq__", #11366, "2") +#11367 = @"C_type$list$2__ge__" +py_cobjects(#11367) +py_cobjecttypes(#11367, #10005) +py_cobject_sources(#11367, 0) +py_cobjectnames(#11367, "__ge__") +py_cmembers_versioned(#11360, "__ge__", #11367, "2") +#11368 = @"C_type$list$2__getattribute__" +py_cobjects(#11368) +py_cobjecttypes(#11368, #10005) +py_cobject_sources(#11368, 0) +py_cobjectnames(#11368, "__getattribute__") +py_cmembers_versioned(#11360, "__getattribute__", #11368, "2") +#11369 = @"C_type$list$2__getitem__" +py_cobjects(#11369) +py_cobjecttypes(#11369, #10034) +py_cobject_sources(#11369, 0) +py_cobjectnames(#11369, "__getitem__") +py_cmembers_versioned(#11360, "__getitem__", #11369, "2") +#11370 = @"C_type$list$2__getslice__" +py_cobjects(#11370) +py_cobjecttypes(#11370, #10005) +py_cobject_sources(#11370, 0) +py_cobjectnames(#11370, "__getslice__") +py_cmembers_versioned(#11360, "__getslice__", #11370, "2") +#11371 = @"C_type$list$2__gt__" +py_cobjects(#11371) +py_cobjecttypes(#11371, #10005) +py_cobject_sources(#11371, 0) +py_cobjectnames(#11371, "__gt__") +py_cmembers_versioned(#11360, "__gt__", #11371, "2") +py_cmembers_versioned(#11360, "__hash__", #10017, "2") +#11372 = @"C_type$list$2__iadd__" +py_cobjects(#11372) +py_cobjecttypes(#11372, #10005) +py_cobject_sources(#11372, 0) +py_cobjectnames(#11372, "__iadd__") +py_cmembers_versioned(#11360, "__iadd__", #11372, "2") +#11373 = @"C_type$list$2__imul__" +py_cobjects(#11373) +py_cobjecttypes(#11373, #10005) +py_cobject_sources(#11373, 0) +py_cobjectnames(#11373, "__imul__") +py_cmembers_versioned(#11360, "__imul__", #11373, "2") +#11374 = @"C_type$list$2__init__" +py_cobjects(#11374) +py_cobjecttypes(#11374, #10005) +py_cobject_sources(#11374, 0) +py_cobjectnames(#11374, "__init__") +py_cmembers_versioned(#11360, "__init__", #11374, "2") +#11375 = @"C_type$list$2__iter__" +py_cobjects(#11375) +py_cobjecttypes(#11375, #10005) +py_cobject_sources(#11375, 0) +py_cobjectnames(#11375, "__iter__") +py_cmembers_versioned(#11360, "__iter__", #11375, "2") +#11376 = @"C_type$list$2__le__" +py_cobjects(#11376) +py_cobjecttypes(#11376, #10005) +py_cobject_sources(#11376, 0) +py_cobjectnames(#11376, "__le__") +py_cmembers_versioned(#11360, "__le__", #11376, "2") +#11377 = @"C_type$list$2__len__" +py_cobjects(#11377) +py_cobjecttypes(#11377, #10005) +py_cobject_sources(#11377, 0) +py_cobjectnames(#11377, "__len__") +py_cmembers_versioned(#11360, "__len__", #11377, "2") +#11378 = @"C_type$list$2__lt__" +py_cobjects(#11378) +py_cobjecttypes(#11378, #10005) +py_cobject_sources(#11378, 0) +py_cobjectnames(#11378, "__lt__") +py_cmembers_versioned(#11360, "__lt__", #11378, "2") +#11379 = @"C_type$list$2__mul__" +py_cobjects(#11379) +py_cobjecttypes(#11379, #10005) +py_cobject_sources(#11379, 0) +py_cobjectnames(#11379, "__mul__") +py_cmembers_versioned(#11360, "__mul__", #11379, "2") +#11380 = @"C_type$list$2__ne__" +py_cobjects(#11380) +py_cobjecttypes(#11380, #10005) +py_cobject_sources(#11380, 0) +py_cobjectnames(#11380, "__ne__") +py_cmembers_versioned(#11360, "__ne__", #11380, "2") +#11381 = @"C_type$list$2__new__" +py_cobjects(#11381) +py_cobjecttypes(#11381, #10075) +py_cobject_sources(#11381, 0) +py_cobjectnames(#11381, "__new__") +py_cmembers_versioned(#11360, "__new__", #11381, "2") +#11382 = @"C_type$list$2__repr__" +py_cobjects(#11382) +py_cobjecttypes(#11382, #10005) +py_cobject_sources(#11382, 0) +py_cobjectnames(#11382, "__repr__") +py_cmembers_versioned(#11360, "__repr__", #11382, "2") +#11383 = @"C_type$list$2__reversed__" +py_cobjects(#11383) +py_cobjecttypes(#11383, #10034) +py_cobject_sources(#11383, 0) +py_cobjectnames(#11383, "__reversed__") +py_cmembers_versioned(#11360, "__reversed__", #11383, "2") +#11384 = @"C_type$list$2__rmul__" +py_cobjects(#11384) +py_cobjecttypes(#11384, #10005) +py_cobject_sources(#11384, 0) +py_cobjectnames(#11384, "__rmul__") +py_cmembers_versioned(#11360, "__rmul__", #11384, "2") +#11385 = @"C_type$list$2__setitem__" +py_cobjects(#11385) +py_cobjecttypes(#11385, #10005) +py_cobject_sources(#11385, 0) +py_cobjectnames(#11385, "__setitem__") +py_cmembers_versioned(#11360, "__setitem__", #11385, "2") +#11386 = @"C_type$list$2__setslice__" +py_cobjects(#11386) +py_cobjecttypes(#11386, #10005) +py_cobject_sources(#11386, 0) +py_cobjectnames(#11386, "__setslice__") +py_cmembers_versioned(#11360, "__setslice__", #11386, "2") +#11387 = @"C_type$list$2__sizeof__" +py_cobjects(#11387) +py_cobjecttypes(#11387, #10034) +py_cobject_sources(#11387, 0) +py_cobjectnames(#11387, "__sizeof__") +py_cmembers_versioned(#11360, "__sizeof__", #11387, "2") +#11388 = @"C_type$list$2append" +py_cobjects(#11388) +py_cobjecttypes(#11388, #10034) +py_cobject_sources(#11388, 0) +py_cobjectnames(#11388, "append") +py_cmembers_versioned(#11360, "append", #11388, "2") +#11389 = @"C_type$list$2count" +py_cobjects(#11389) +py_cobjecttypes(#11389, #10034) +py_cobject_sources(#11389, 0) +py_cobjectnames(#11389, "count") +py_cmembers_versioned(#11360, "count", #11389, "2") +#11390 = @"C_type$list$2extend" +py_cobjects(#11390) +py_cobjecttypes(#11390, #10034) +py_cobject_sources(#11390, 0) +py_cobjectnames(#11390, "extend") +py_cmembers_versioned(#11360, "extend", #11390, "2") +#11391 = @"C_type$list$2index" +py_cobjects(#11391) +py_cobjecttypes(#11391, #10034) +py_cobject_sources(#11391, 0) +py_cobjectnames(#11391, "index") +py_cmembers_versioned(#11360, "index", #11391, "2") +#11392 = @"C_type$list$2insert" +py_cobjects(#11392) +py_cobjecttypes(#11392, #10034) +py_cobject_sources(#11392, 0) +py_cobjectnames(#11392, "insert") +py_cmembers_versioned(#11360, "insert", #11392, "2") +#11393 = @"C_type$list$2pop" +py_cobjects(#11393) +py_cobjecttypes(#11393, #10034) +py_cobject_sources(#11393, 0) +py_cobjectnames(#11393, "pop") +py_cmembers_versioned(#11360, "pop", #11393, "2") +#11394 = @"C_type$list$2remove" +py_cobjects(#11394) +py_cobjecttypes(#11394, #10034) +py_cobject_sources(#11394, 0) +py_cobjectnames(#11394, "remove") +py_cmembers_versioned(#11360, "remove", #11394, "2") +#11395 = @"C_type$list$2reverse" +py_cobjects(#11395) +py_cobjecttypes(#11395, #10034) +py_cobject_sources(#11395, 0) +py_cobjectnames(#11395, "reverse") +py_cmembers_versioned(#11360, "reverse", #11395, "2") +#11396 = @"C_type$list$2sort" +py_cobjects(#11396) +py_cobjecttypes(#11396, #10034) +py_cobject_sources(#11396, 0) +py_cobjectnames(#11396, "sort") +py_cmembers_versioned(#11360, "sort", #11396, "2") +py_cmembers_versioned(#11360, ".super.", #10021, "2") +py_cobjectnames(#11360, "list") +py_cmembers_versioned(#10760, "list", #11360, "2") +#11397 = @"C_builtin_function_or_method$builtins.locals" +py_cobjects(#11397) +py_cobjecttypes(#11397, #10075) +py_cobject_sources(#11397, 0) +py_cobjectnames(#11397, "locals") +py_cmembers_versioned(#10760, "locals", #11397, "2") +py_cmembers_versioned(#10760, "long", #10645, "2") +#11398 = @"C_builtin_function_or_method$builtins.map" +py_cobjects(#11398) +py_cobjecttypes(#11398, #10075) +py_cobject_sources(#11398, 0) +py_cobjectnames(#11398, "map") +py_cmembers_versioned(#10760, "map", #11398, "2") +#11399 = @"C_builtin_function_or_method$builtins.max" +py_cobjects(#11399) +py_cobjecttypes(#11399, #10075) +py_cobject_sources(#11399, 0) +py_cobjectnames(#11399, "max") +py_cmembers_versioned(#10760, "max", #11399, "2") +#11400 = @"C_type$memoryview" +py_cobjects(#11400) +py_cobjecttypes(#11400, #10001) +py_cobject_sources(#11400, 0) +#11401 = @"C_type$memoryview$2__delitem__" +py_cobjects(#11401) +py_cobjecttypes(#11401, #10005) +py_cobject_sources(#11401, 0) +py_cobjectnames(#11401, "__delitem__") +py_cmembers_versioned(#11400, "__delitem__", #11401, "2") +#11402 = @"C_bytes$b3ac8d0c2d7a0879057bd5af570219c76d846a9b" +py_cobjects(#11402) +py_cobjecttypes(#11402, #10028) +py_cobject_sources(#11402, 0) +py_cobjectnames(#11402, "b'memoryview(object) + +Create a new memoryview object which references the given object.'") +py_cmembers_versioned(#11400, "__doc__", #11402, "2") +#11403 = @"C_type$memoryview$2__eq__" +py_cobjects(#11403) +py_cobjecttypes(#11403, #10005) +py_cobject_sources(#11403, 0) +py_cobjectnames(#11403, "__eq__") +py_cmembers_versioned(#11400, "__eq__", #11403, "2") +#11404 = @"C_type$memoryview$2__ge__" +py_cobjects(#11404) +py_cobjecttypes(#11404, #10005) +py_cobject_sources(#11404, 0) +py_cobjectnames(#11404, "__ge__") +py_cmembers_versioned(#11400, "__ge__", #11404, "2") +#11405 = @"C_type$memoryview$2__getattribute__" +py_cobjects(#11405) +py_cobjecttypes(#11405, #10005) +py_cobject_sources(#11405, 0) +py_cobjectnames(#11405, "__getattribute__") +py_cmembers_versioned(#11400, "__getattribute__", #11405, "2") +#11406 = @"C_type$memoryview$2__getitem__" +py_cobjects(#11406) +py_cobjecttypes(#11406, #10005) +py_cobject_sources(#11406, 0) +py_cobjectnames(#11406, "__getitem__") +py_cmembers_versioned(#11400, "__getitem__", #11406, "2") +#11407 = @"C_type$memoryview$2__gt__" +py_cobjects(#11407) +py_cobjecttypes(#11407, #10005) +py_cobject_sources(#11407, 0) +py_cobjectnames(#11407, "__gt__") +py_cmembers_versioned(#11400, "__gt__", #11407, "2") +#11408 = @"C_type$memoryview$2__le__" +py_cobjects(#11408) +py_cobjecttypes(#11408, #10005) +py_cobject_sources(#11408, 0) +py_cobjectnames(#11408, "__le__") +py_cmembers_versioned(#11400, "__le__", #11408, "2") +#11409 = @"C_type$memoryview$2__len__" +py_cobjects(#11409) +py_cobjecttypes(#11409, #10005) +py_cobject_sources(#11409, 0) +py_cobjectnames(#11409, "__len__") +py_cmembers_versioned(#11400, "__len__", #11409, "2") +#11410 = @"C_type$memoryview$2__lt__" +py_cobjects(#11410) +py_cobjecttypes(#11410, #10005) +py_cobject_sources(#11410, 0) +py_cobjectnames(#11410, "__lt__") +py_cmembers_versioned(#11400, "__lt__", #11410, "2") +#11411 = @"C_type$memoryview$2__ne__" +py_cobjects(#11411) +py_cobjecttypes(#11411, #10005) +py_cobject_sources(#11411, 0) +py_cobjectnames(#11411, "__ne__") +py_cmembers_versioned(#11400, "__ne__", #11411, "2") +#11412 = @"C_type$memoryview$2__new__" +py_cobjects(#11412) +py_cobjecttypes(#11412, #10075) +py_cobject_sources(#11412, 0) +py_cobjectnames(#11412, "__new__") +py_cmembers_versioned(#11400, "__new__", #11412, "2") +#11413 = @"C_type$memoryview$2__repr__" +py_cobjects(#11413) +py_cobjecttypes(#11413, #10005) +py_cobject_sources(#11413, 0) +py_cobjectnames(#11413, "__repr__") +py_cmembers_versioned(#11400, "__repr__", #11413, "2") +#11414 = @"C_type$memoryview$2__setitem__" +py_cobjects(#11414) +py_cobjecttypes(#11414, #10005) +py_cobject_sources(#11414, 0) +py_cobjectnames(#11414, "__setitem__") +py_cmembers_versioned(#11400, "__setitem__", #11414, "2") +#11415 = @"C_type$memoryview$2format" +py_cobjects(#11415) +py_cobjecttypes(#11415, #10003) +py_cobject_sources(#11415, 0) +#11416 = @"C_type$memoryview$2format$2__set__" +py_cobjects(#11416) +py_cobjecttypes(#11416, #10009) +py_cobject_sources(#11416, 0) +py_cobjectnames(#11416, "__set__") +py_cmembers_versioned(#11415, "__set__", #11416, "2") +#11417 = @"C_type$memoryview$2format$2__getattribute__" +py_cobjects(#11417) +py_cobjecttypes(#11417, #10009) +py_cobject_sources(#11417, 0) +py_cobjectnames(#11417, "__getattribute__") +py_cmembers_versioned(#11415, "__getattribute__", #11417, "2") +py_cmembers_versioned(#11415, "__objclass__", #11400, "2") +#11418 = @"C_type$memoryview$2format$2__repr__" +py_cobjects(#11418) +py_cobjecttypes(#11418, #10009) +py_cobject_sources(#11418, 0) +py_cobjectnames(#11418, "__repr__") +py_cmembers_versioned(#11415, "__repr__", #11418, "2") +#11419 = @"C_type$memoryview$2format$2__get__" +py_cobjects(#11419) +py_cobjecttypes(#11419, #10009) +py_cobject_sources(#11419, 0) +py_cobjectnames(#11419, "__get__") +py_cmembers_versioned(#11415, "__get__", #11419, "2") +py_cmembers_versioned(#11415, "__doc__", #10017, "2") +#11420 = @"C_type$memoryview$2format$2__delete__" +py_cobjects(#11420) +py_cobjecttypes(#11420, #10009) +py_cobject_sources(#11420, 0) +py_cobjectnames(#11420, "__delete__") +py_cmembers_versioned(#11415, "__delete__", #11420, "2") +py_cobjectnames(#11415, "format") +py_cmembers_versioned(#11400, "format", #11415, "2") +#11421 = @"C_type$memoryview$2itemsize" +py_cobjects(#11421) +py_cobjecttypes(#11421, #10003) +py_cobject_sources(#11421, 0) +#11422 = @"C_type$memoryview$2itemsize$2__set__" +py_cobjects(#11422) +py_cobjecttypes(#11422, #10009) +py_cobject_sources(#11422, 0) +py_cobjectnames(#11422, "__set__") +py_cmembers_versioned(#11421, "__set__", #11422, "2") +#11423 = @"C_type$memoryview$2itemsize$2__getattribute__" +py_cobjects(#11423) +py_cobjecttypes(#11423, #10009) +py_cobject_sources(#11423, 0) +py_cobjectnames(#11423, "__getattribute__") +py_cmembers_versioned(#11421, "__getattribute__", #11423, "2") +py_cmembers_versioned(#11421, "__objclass__", #11400, "2") +#11424 = @"C_type$memoryview$2itemsize$2__repr__" +py_cobjects(#11424) +py_cobjecttypes(#11424, #10009) +py_cobject_sources(#11424, 0) +py_cobjectnames(#11424, "__repr__") +py_cmembers_versioned(#11421, "__repr__", #11424, "2") +#11425 = @"C_type$memoryview$2itemsize$2__get__" +py_cobjects(#11425) +py_cobjecttypes(#11425, #10009) +py_cobject_sources(#11425, 0) +py_cobjectnames(#11425, "__get__") +py_cmembers_versioned(#11421, "__get__", #11425, "2") +py_cmembers_versioned(#11421, "__doc__", #10017, "2") +#11426 = @"C_type$memoryview$2itemsize$2__delete__" +py_cobjects(#11426) +py_cobjecttypes(#11426, #10009) +py_cobject_sources(#11426, 0) +py_cobjectnames(#11426, "__delete__") +py_cmembers_versioned(#11421, "__delete__", #11426, "2") +py_cobjectnames(#11421, "itemsize") +py_cmembers_versioned(#11400, "itemsize", #11421, "2") +#11427 = @"C_type$memoryview$2ndim" +py_cobjects(#11427) +py_cobjecttypes(#11427, #10003) +py_cobject_sources(#11427, 0) +#11428 = @"C_type$memoryview$2ndim$2__set__" +py_cobjects(#11428) +py_cobjecttypes(#11428, #10009) +py_cobject_sources(#11428, 0) +py_cobjectnames(#11428, "__set__") +py_cmembers_versioned(#11427, "__set__", #11428, "2") +#11429 = @"C_type$memoryview$2ndim$2__getattribute__" +py_cobjects(#11429) +py_cobjecttypes(#11429, #10009) +py_cobject_sources(#11429, 0) +py_cobjectnames(#11429, "__getattribute__") +py_cmembers_versioned(#11427, "__getattribute__", #11429, "2") +py_cmembers_versioned(#11427, "__objclass__", #11400, "2") +#11430 = @"C_type$memoryview$2ndim$2__repr__" +py_cobjects(#11430) +py_cobjecttypes(#11430, #10009) +py_cobject_sources(#11430, 0) +py_cobjectnames(#11430, "__repr__") +py_cmembers_versioned(#11427, "__repr__", #11430, "2") +#11431 = @"C_type$memoryview$2ndim$2__get__" +py_cobjects(#11431) +py_cobjecttypes(#11431, #10009) +py_cobject_sources(#11431, 0) +py_cobjectnames(#11431, "__get__") +py_cmembers_versioned(#11427, "__get__", #11431, "2") +py_cmembers_versioned(#11427, "__doc__", #10017, "2") +#11432 = @"C_type$memoryview$2ndim$2__delete__" +py_cobjects(#11432) +py_cobjecttypes(#11432, #10009) +py_cobject_sources(#11432, 0) +py_cobjectnames(#11432, "__delete__") +py_cmembers_versioned(#11427, "__delete__", #11432, "2") +py_cobjectnames(#11427, "ndim") +py_cmembers_versioned(#11400, "ndim", #11427, "2") +#11433 = @"C_type$memoryview$2readonly" +py_cobjects(#11433) +py_cobjecttypes(#11433, #10003) +py_cobject_sources(#11433, 0) +#11434 = @"C_type$memoryview$2readonly$2__set__" +py_cobjects(#11434) +py_cobjecttypes(#11434, #10009) +py_cobject_sources(#11434, 0) +py_cobjectnames(#11434, "__set__") +py_cmembers_versioned(#11433, "__set__", #11434, "2") +#11435 = @"C_type$memoryview$2readonly$2__getattribute__" +py_cobjects(#11435) +py_cobjecttypes(#11435, #10009) +py_cobject_sources(#11435, 0) +py_cobjectnames(#11435, "__getattribute__") +py_cmembers_versioned(#11433, "__getattribute__", #11435, "2") +py_cmembers_versioned(#11433, "__objclass__", #11400, "2") +#11436 = @"C_type$memoryview$2readonly$2__repr__" +py_cobjects(#11436) +py_cobjecttypes(#11436, #10009) +py_cobject_sources(#11436, 0) +py_cobjectnames(#11436, "__repr__") +py_cmembers_versioned(#11433, "__repr__", #11436, "2") +#11437 = @"C_type$memoryview$2readonly$2__get__" +py_cobjects(#11437) +py_cobjecttypes(#11437, #10009) +py_cobject_sources(#11437, 0) +py_cobjectnames(#11437, "__get__") +py_cmembers_versioned(#11433, "__get__", #11437, "2") +py_cmembers_versioned(#11433, "__doc__", #10017, "2") +#11438 = @"C_type$memoryview$2readonly$2__delete__" +py_cobjects(#11438) +py_cobjecttypes(#11438, #10009) +py_cobject_sources(#11438, 0) +py_cobjectnames(#11438, "__delete__") +py_cmembers_versioned(#11433, "__delete__", #11438, "2") +py_cobjectnames(#11433, "readonly") +py_cmembers_versioned(#11400, "readonly", #11433, "2") +#11439 = @"C_type$memoryview$2shape" +py_cobjects(#11439) +py_cobjecttypes(#11439, #10003) +py_cobject_sources(#11439, 0) +#11440 = @"C_type$memoryview$2shape$2__set__" +py_cobjects(#11440) +py_cobjecttypes(#11440, #10009) +py_cobject_sources(#11440, 0) +py_cobjectnames(#11440, "__set__") +py_cmembers_versioned(#11439, "__set__", #11440, "2") +#11441 = @"C_type$memoryview$2shape$2__getattribute__" +py_cobjects(#11441) +py_cobjecttypes(#11441, #10009) +py_cobject_sources(#11441, 0) +py_cobjectnames(#11441, "__getattribute__") +py_cmembers_versioned(#11439, "__getattribute__", #11441, "2") +py_cmembers_versioned(#11439, "__objclass__", #11400, "2") +#11442 = @"C_type$memoryview$2shape$2__repr__" +py_cobjects(#11442) +py_cobjecttypes(#11442, #10009) +py_cobject_sources(#11442, 0) +py_cobjectnames(#11442, "__repr__") +py_cmembers_versioned(#11439, "__repr__", #11442, "2") +#11443 = @"C_type$memoryview$2shape$2__get__" +py_cobjects(#11443) +py_cobjecttypes(#11443, #10009) +py_cobject_sources(#11443, 0) +py_cobjectnames(#11443, "__get__") +py_cmembers_versioned(#11439, "__get__", #11443, "2") +py_cmembers_versioned(#11439, "__doc__", #10017, "2") +#11444 = @"C_type$memoryview$2shape$2__delete__" +py_cobjects(#11444) +py_cobjecttypes(#11444, #10009) +py_cobject_sources(#11444, 0) +py_cobjectnames(#11444, "__delete__") +py_cmembers_versioned(#11439, "__delete__", #11444, "2") +py_cobjectnames(#11439, "shape") +py_cmembers_versioned(#11400, "shape", #11439, "2") +#11445 = @"C_type$memoryview$2strides" +py_cobjects(#11445) +py_cobjecttypes(#11445, #10003) +py_cobject_sources(#11445, 0) +#11446 = @"C_type$memoryview$2strides$2__set__" +py_cobjects(#11446) +py_cobjecttypes(#11446, #10009) +py_cobject_sources(#11446, 0) +py_cobjectnames(#11446, "__set__") +py_cmembers_versioned(#11445, "__set__", #11446, "2") +#11447 = @"C_type$memoryview$2strides$2__getattribute__" +py_cobjects(#11447) +py_cobjecttypes(#11447, #10009) +py_cobject_sources(#11447, 0) +py_cobjectnames(#11447, "__getattribute__") +py_cmembers_versioned(#11445, "__getattribute__", #11447, "2") +py_cmembers_versioned(#11445, "__objclass__", #11400, "2") +#11448 = @"C_type$memoryview$2strides$2__repr__" +py_cobjects(#11448) +py_cobjecttypes(#11448, #10009) +py_cobject_sources(#11448, 0) +py_cobjectnames(#11448, "__repr__") +py_cmembers_versioned(#11445, "__repr__", #11448, "2") +#11449 = @"C_type$memoryview$2strides$2__get__" +py_cobjects(#11449) +py_cobjecttypes(#11449, #10009) +py_cobject_sources(#11449, 0) +py_cobjectnames(#11449, "__get__") +py_cmembers_versioned(#11445, "__get__", #11449, "2") +py_cmembers_versioned(#11445, "__doc__", #10017, "2") +#11450 = @"C_type$memoryview$2strides$2__delete__" +py_cobjects(#11450) +py_cobjecttypes(#11450, #10009) +py_cobject_sources(#11450, 0) +py_cobjectnames(#11450, "__delete__") +py_cmembers_versioned(#11445, "__delete__", #11450, "2") +py_cobjectnames(#11445, "strides") +py_cmembers_versioned(#11400, "strides", #11445, "2") +#11451 = @"C_type$memoryview$2suboffsets" +py_cobjects(#11451) +py_cobjecttypes(#11451, #10003) +py_cobject_sources(#11451, 0) +#11452 = @"C_type$memoryview$2suboffsets$2__set__" +py_cobjects(#11452) +py_cobjecttypes(#11452, #10009) +py_cobject_sources(#11452, 0) +py_cobjectnames(#11452, "__set__") +py_cmembers_versioned(#11451, "__set__", #11452, "2") +#11453 = @"C_type$memoryview$2suboffsets$2__getattribute__" +py_cobjects(#11453) +py_cobjecttypes(#11453, #10009) +py_cobject_sources(#11453, 0) +py_cobjectnames(#11453, "__getattribute__") +py_cmembers_versioned(#11451, "__getattribute__", #11453, "2") +py_cmembers_versioned(#11451, "__objclass__", #11400, "2") +#11454 = @"C_type$memoryview$2suboffsets$2__repr__" +py_cobjects(#11454) +py_cobjecttypes(#11454, #10009) +py_cobject_sources(#11454, 0) +py_cobjectnames(#11454, "__repr__") +py_cmembers_versioned(#11451, "__repr__", #11454, "2") +#11455 = @"C_type$memoryview$2suboffsets$2__get__" +py_cobjects(#11455) +py_cobjecttypes(#11455, #10009) +py_cobject_sources(#11455, 0) +py_cobjectnames(#11455, "__get__") +py_cmembers_versioned(#11451, "__get__", #11455, "2") +py_cmembers_versioned(#11451, "__doc__", #10017, "2") +#11456 = @"C_type$memoryview$2suboffsets$2__delete__" +py_cobjects(#11456) +py_cobjecttypes(#11456, #10009) +py_cobject_sources(#11456, 0) +py_cobjectnames(#11456, "__delete__") +py_cmembers_versioned(#11451, "__delete__", #11456, "2") +py_cobjectnames(#11451, "suboffsets") +py_cmembers_versioned(#11400, "suboffsets", #11451, "2") +#11457 = @"C_type$memoryview$2tobytes" +py_cobjects(#11457) +py_cobjecttypes(#11457, #10034) +py_cobject_sources(#11457, 0) +py_cobjectnames(#11457, "tobytes") +py_cmembers_versioned(#11400, "tobytes", #11457, "2") +#11458 = @"C_type$memoryview$2tolist" +py_cobjects(#11458) +py_cobjecttypes(#11458, #10034) +py_cobject_sources(#11458, 0) +py_cobjectnames(#11458, "tolist") +py_cmembers_versioned(#11400, "tolist", #11458, "2") +py_cmembers_versioned(#11400, ".super.", #10021, "2") +py_cobjectnames(#11400, "memoryview") +py_cmembers_versioned(#10760, "memoryview", #11400, "2") +#11459 = @"C_builtin_function_or_method$builtins.min" +py_cobjects(#11459) +py_cobjecttypes(#11459, #10075) +py_cobject_sources(#11459, 0) +py_cobjectnames(#11459, "min") +py_cmembers_versioned(#10760, "min", #11459, "2") +#11460 = @"C_builtin_function_or_method$builtins.next" +py_cobjects(#11460) +py_cobjecttypes(#11460, #10075) +py_cobject_sources(#11460, 0) +py_cobjectnames(#11460, "next") +py_cmembers_versioned(#10760, "next", #11460, "2") +py_cmembers_versioned(#10760, "object", #10021, "2") +#11461 = @"C_builtin_function_or_method$builtins.oct" +py_cobjects(#11461) +py_cobjecttypes(#11461, #10075) +py_cobject_sources(#11461, 0) +py_cobjectnames(#11461, "oct") +py_cmembers_versioned(#10760, "oct", #11461, "2") +#11462 = @"C_builtin_function_or_method$builtins.open" +py_cobjects(#11462) +py_cobjecttypes(#11462, #10075) +py_cobject_sources(#11462, 0) +py_cobjectnames(#11462, "open") +py_cmembers_versioned(#10760, "open", #11462, "2") +#11463 = @"C_builtin_function_or_method$builtins.ord" +py_cobjects(#11463) +py_cobjecttypes(#11463, #10075) +py_cobject_sources(#11463, 0) +py_cobjectnames(#11463, "ord") +py_cmembers_versioned(#10760, "ord", #11463, "2") +#11464 = @"C_builtin_function_or_method$builtins.pow" +py_cobjects(#11464) +py_cobjecttypes(#11464, #10075) +py_cobject_sources(#11464, 0) +py_cobjectnames(#11464, "pow") +py_cmembers_versioned(#10760, "pow", #11464, "2") +#11465 = @"C_builtin_function_or_method$builtins.print" +py_cobjects(#11465) +py_cobjecttypes(#11465, #10075) +py_cobject_sources(#11465, 0) +py_cobjectnames(#11465, "print") +py_cmembers_versioned(#10760, "print", #11465, "2") +#11466 = @"C_type$property" +py_cobjects(#11466) +py_cobjecttypes(#11466, #10001) +py_cobject_sources(#11466, 0) +#11467 = @"C_type$property$2__delete__" +py_cobjects(#11467) +py_cobjecttypes(#11467, #10005) +py_cobject_sources(#11467, 0) +py_cobjectnames(#11467, "__delete__") +py_cmembers_versioned(#11466, "__delete__", #11467, "2") +#11468 = @"C_type$property$2__doc__" +py_cobjects(#11468) +py_cobjecttypes(#11468, #10045) +py_cobject_sources(#11468, 0) +py_cobjectnames(#11468, "__doc__") +py_cmembers_versioned(#11466, "__doc__", #11468, "2") +#11469 = @"C_type$property$2__get__" +py_cobjects(#11469) +py_cobjecttypes(#11469, #10005) +py_cobject_sources(#11469, 0) +py_cobjectnames(#11469, "__get__") +py_cmembers_versioned(#11466, "__get__", #11469, "2") +#11470 = @"C_type$property$2__getattribute__" +py_cobjects(#11470) +py_cobjecttypes(#11470, #10005) +py_cobject_sources(#11470, 0) +py_cobjectnames(#11470, "__getattribute__") +py_cmembers_versioned(#11466, "__getattribute__", #11470, "2") +#11471 = @"C_type$property$2__init__" +py_cobjects(#11471) +py_cobjecttypes(#11471, #10005) +py_cobject_sources(#11471, 0) +py_cobjectnames(#11471, "__init__") +py_cmembers_versioned(#11466, "__init__", #11471, "2") +#11472 = @"C_type$property$2__new__" +py_cobjects(#11472) +py_cobjecttypes(#11472, #10075) +py_cobject_sources(#11472, 0) +py_cobjectnames(#11472, "__new__") +py_cmembers_versioned(#11466, "__new__", #11472, "2") +#11473 = @"C_type$property$2__set__" +py_cobjects(#11473) +py_cobjecttypes(#11473, #10005) +py_cobject_sources(#11473, 0) +py_cobjectnames(#11473, "__set__") +py_cmembers_versioned(#11466, "__set__", #11473, "2") +#11474 = @"C_type$property$2deleter" +py_cobjects(#11474) +py_cobjecttypes(#11474, #10034) +py_cobject_sources(#11474, 0) +py_cobjectnames(#11474, "deleter") +py_cmembers_versioned(#11466, "deleter", #11474, "2") +#11475 = @"C_type$property$2fdel" +py_cobjects(#11475) +py_cobjecttypes(#11475, #10045) +py_cobject_sources(#11475, 0) +py_cobjectnames(#11475, "fdel") +py_cmembers_versioned(#11466, "fdel", #11475, "2") +#11476 = @"C_type$property$2fget" +py_cobjects(#11476) +py_cobjecttypes(#11476, #10045) +py_cobject_sources(#11476, 0) +py_cobjectnames(#11476, "fget") +py_cmembers_versioned(#11466, "fget", #11476, "2") +#11477 = @"C_type$property$2fset" +py_cobjects(#11477) +py_cobjecttypes(#11477, #10045) +py_cobject_sources(#11477, 0) +py_cobjectnames(#11477, "fset") +py_cmembers_versioned(#11466, "fset", #11477, "2") +#11478 = @"C_type$property$2getter" +py_cobjects(#11478) +py_cobjecttypes(#11478, #10034) +py_cobject_sources(#11478, 0) +py_cobjectnames(#11478, "getter") +py_cmembers_versioned(#11466, "getter", #11478, "2") +#11479 = @"C_type$property$2setter" +py_cobjects(#11479) +py_cobjecttypes(#11479, #10034) +py_cobject_sources(#11479, 0) +py_cobjectnames(#11479, "setter") +py_cmembers_versioned(#11466, "setter", #11479, "2") +py_cmembers_versioned(#11466, ".super.", #10021, "2") +py_cobjectnames(#11466, "property") +py_cmembers_versioned(#10760, "property", #11466, "2") +#11480 = @"C_module$__builtin__$2quit" +py_cobjects(#11480) +py_cobjecttypes(#11480, #11161) +py_cobject_sources(#11480, 0) +py_cobjectnames(#11480, "object") +py_cmembers_versioned(#10760, "quit", #11480, "2") +#11481 = @"C_builtin_function_or_method$builtins.range" +py_cobjects(#11481) +py_cobjecttypes(#11481, #10075) +py_cobject_sources(#11481, 0) +py_cobjectnames(#11481, "range") +py_cmembers_versioned(#10760, "range", #11481, "2") +#11482 = @"C_builtin_function_or_method$builtins.raw_input" +py_cobjects(#11482) +py_cobjecttypes(#11482, #10075) +py_cobject_sources(#11482, 0) +py_cobjectnames(#11482, "raw_input") +py_cmembers_versioned(#10760, "raw_input", #11482, "2") +#11483 = @"C_builtin_function_or_method$builtins.reduce" +py_cobjects(#11483) +py_cobjecttypes(#11483, #10075) +py_cobject_sources(#11483, 0) +py_cobjectnames(#11483, "reduce") +py_cmembers_versioned(#10760, "reduce", #11483, "2") +#11484 = @"C_builtin_function_or_method$builtins.reload" +py_cobjects(#11484) +py_cobjecttypes(#11484, #10075) +py_cobject_sources(#11484, 0) +py_cobjectnames(#11484, "reload") +py_cmembers_versioned(#10760, "reload", #11484, "2") +#11485 = @"C_builtin_function_or_method$builtins.repr" +py_cobjects(#11485) +py_cobjecttypes(#11485, #10075) +py_cobject_sources(#11485, 0) +py_cobjectnames(#11485, "repr") +py_cmembers_versioned(#10760, "repr", #11485, "2") +#11486 = @"C_type$reversed" +py_cobjects(#11486) +py_cobjecttypes(#11486, #10001) +py_cobject_sources(#11486, 0) +#11487 = @"C_bytes$6da37b9b1c31af888f1f9f59964dfc588ba6792d" +py_cobjects(#11487) +py_cobjecttypes(#11487, #10028) +py_cobject_sources(#11487, 0) +py_cobjectnames(#11487, "b'reversed(sequence) -> reverse iterator over values of the sequence + +Return a reverse iterator'") +py_cmembers_versioned(#11486, "__doc__", #11487, "2") +#11488 = @"C_type$reversed$2__getattribute__" +py_cobjects(#11488) +py_cobjecttypes(#11488, #10005) +py_cobject_sources(#11488, 0) +py_cobjectnames(#11488, "__getattribute__") +py_cmembers_versioned(#11486, "__getattribute__", #11488, "2") +#11489 = @"C_type$reversed$2__iter__" +py_cobjects(#11489) +py_cobjecttypes(#11489, #10005) +py_cobject_sources(#11489, 0) +py_cobjectnames(#11489, "__iter__") +py_cmembers_versioned(#11486, "__iter__", #11489, "2") +#11490 = @"C_type$reversed$2__length_hint__" +py_cobjects(#11490) +py_cobjecttypes(#11490, #10034) +py_cobject_sources(#11490, 0) +py_cobjectnames(#11490, "__length_hint__") +py_cmembers_versioned(#11486, "__length_hint__", #11490, "2") +#11491 = @"C_type$reversed$2__new__" +py_cobjects(#11491) +py_cobjecttypes(#11491, #10075) +py_cobject_sources(#11491, 0) +py_cobjectnames(#11491, "__new__") +py_cmembers_versioned(#11486, "__new__", #11491, "2") +#11492 = @"C_type$reversed$2next" +py_cobjects(#11492) +py_cobjecttypes(#11492, #10005) +py_cobject_sources(#11492, 0) +py_cobjectnames(#11492, "next") +py_cmembers_versioned(#11486, "next", #11492, "2") +py_cmembers_versioned(#11486, ".super.", #10021, "2") +py_cobjectnames(#11486, "reversed") +py_cmembers_versioned(#10760, "reversed", #11486, "2") +#11493 = @"C_builtin_function_or_method$builtins.round" +py_cobjects(#11493) +py_cobjecttypes(#11493, #10075) +py_cobject_sources(#11493, 0) +py_cobjectnames(#11493, "round") +py_cmembers_versioned(#10760, "round", #11493, "2") +#11494 = @"C_type$set" +py_cobjects(#11494) +py_cobjecttypes(#11494, #10001) +py_cobject_sources(#11494, 0) +#11495 = @"C_type$set$2__and__" +py_cobjects(#11495) +py_cobjecttypes(#11495, #10005) +py_cobject_sources(#11495, 0) +py_cobjectnames(#11495, "__and__") +py_cmembers_versioned(#11494, "__and__", #11495, "2") +#11496 = @"C_type$set$2__cmp__" +py_cobjects(#11496) +py_cobjecttypes(#11496, #10005) +py_cobject_sources(#11496, 0) +py_cobjectnames(#11496, "__cmp__") +py_cmembers_versioned(#11494, "__cmp__", #11496, "2") +#11497 = @"C_type$set$2__contains__" +py_cobjects(#11497) +py_cobjecttypes(#11497, #10034) +py_cobject_sources(#11497, 0) +py_cobjectnames(#11497, "__contains__") +py_cmembers_versioned(#11494, "__contains__", #11497, "2") +#11498 = @"C_bytes$a7ef6bafd940a4f5b51773728e9aeb96cfb181c2" +py_cobjects(#11498) +py_cobjecttypes(#11498, #10028) +py_cobject_sources(#11498, 0) +py_cobjectnames(#11498, "b'set() -> new empty set object +set(iterable) -> new set object + +Build an unordered collection of unique elements.'") +py_cmembers_versioned(#11494, "__doc__", #11498, "2") +#11499 = @"C_type$set$2__eq__" +py_cobjects(#11499) +py_cobjecttypes(#11499, #10005) +py_cobject_sources(#11499, 0) +py_cobjectnames(#11499, "__eq__") +py_cmembers_versioned(#11494, "__eq__", #11499, "2") +#11500 = @"C_type$set$2__ge__" +py_cobjects(#11500) +py_cobjecttypes(#11500, #10005) +py_cobject_sources(#11500, 0) +py_cobjectnames(#11500, "__ge__") +py_cmembers_versioned(#11494, "__ge__", #11500, "2") +#11501 = @"C_type$set$2__getattribute__" +py_cobjects(#11501) +py_cobjecttypes(#11501, #10005) +py_cobject_sources(#11501, 0) +py_cobjectnames(#11501, "__getattribute__") +py_cmembers_versioned(#11494, "__getattribute__", #11501, "2") +#11502 = @"C_type$set$2__gt__" +py_cobjects(#11502) +py_cobjecttypes(#11502, #10005) +py_cobject_sources(#11502, 0) +py_cobjectnames(#11502, "__gt__") +py_cmembers_versioned(#11494, "__gt__", #11502, "2") +py_cmembers_versioned(#11494, "__hash__", #10017, "2") +#11503 = @"C_type$set$2__iand__" +py_cobjects(#11503) +py_cobjecttypes(#11503, #10005) +py_cobject_sources(#11503, 0) +py_cobjectnames(#11503, "__iand__") +py_cmembers_versioned(#11494, "__iand__", #11503, "2") +#11504 = @"C_type$set$2__init__" +py_cobjects(#11504) +py_cobjecttypes(#11504, #10005) +py_cobject_sources(#11504, 0) +py_cobjectnames(#11504, "__init__") +py_cmembers_versioned(#11494, "__init__", #11504, "2") +#11505 = @"C_type$set$2__ior__" +py_cobjects(#11505) +py_cobjecttypes(#11505, #10005) +py_cobject_sources(#11505, 0) +py_cobjectnames(#11505, "__ior__") +py_cmembers_versioned(#11494, "__ior__", #11505, "2") +#11506 = @"C_type$set$2__isub__" +py_cobjects(#11506) +py_cobjecttypes(#11506, #10005) +py_cobject_sources(#11506, 0) +py_cobjectnames(#11506, "__isub__") +py_cmembers_versioned(#11494, "__isub__", #11506, "2") +#11507 = @"C_type$set$2__iter__" +py_cobjects(#11507) +py_cobjecttypes(#11507, #10005) +py_cobject_sources(#11507, 0) +py_cobjectnames(#11507, "__iter__") +py_cmembers_versioned(#11494, "__iter__", #11507, "2") +#11508 = @"C_type$set$2__ixor__" +py_cobjects(#11508) +py_cobjecttypes(#11508, #10005) +py_cobject_sources(#11508, 0) +py_cobjectnames(#11508, "__ixor__") +py_cmembers_versioned(#11494, "__ixor__", #11508, "2") +#11509 = @"C_type$set$2__le__" +py_cobjects(#11509) +py_cobjecttypes(#11509, #10005) +py_cobject_sources(#11509, 0) +py_cobjectnames(#11509, "__le__") +py_cmembers_versioned(#11494, "__le__", #11509, "2") +#11510 = @"C_type$set$2__len__" +py_cobjects(#11510) +py_cobjecttypes(#11510, #10005) +py_cobject_sources(#11510, 0) +py_cobjectnames(#11510, "__len__") +py_cmembers_versioned(#11494, "__len__", #11510, "2") +#11511 = @"C_type$set$2__lt__" +py_cobjects(#11511) +py_cobjecttypes(#11511, #10005) +py_cobject_sources(#11511, 0) +py_cobjectnames(#11511, "__lt__") +py_cmembers_versioned(#11494, "__lt__", #11511, "2") +#11512 = @"C_type$set$2__ne__" +py_cobjects(#11512) +py_cobjecttypes(#11512, #10005) +py_cobject_sources(#11512, 0) +py_cobjectnames(#11512, "__ne__") +py_cmembers_versioned(#11494, "__ne__", #11512, "2") +#11513 = @"C_type$set$2__new__" +py_cobjects(#11513) +py_cobjecttypes(#11513, #10075) +py_cobject_sources(#11513, 0) +py_cobjectnames(#11513, "__new__") +py_cmembers_versioned(#11494, "__new__", #11513, "2") +#11514 = @"C_type$set$2__or__" +py_cobjects(#11514) +py_cobjecttypes(#11514, #10005) +py_cobject_sources(#11514, 0) +py_cobjectnames(#11514, "__or__") +py_cmembers_versioned(#11494, "__or__", #11514, "2") +#11515 = @"C_type$set$2__rand__" +py_cobjects(#11515) +py_cobjecttypes(#11515, #10005) +py_cobject_sources(#11515, 0) +py_cobjectnames(#11515, "__rand__") +py_cmembers_versioned(#11494, "__rand__", #11515, "2") +#11516 = @"C_type$set$2__reduce__" +py_cobjects(#11516) +py_cobjecttypes(#11516, #10034) +py_cobject_sources(#11516, 0) +py_cobjectnames(#11516, "__reduce__") +py_cmembers_versioned(#11494, "__reduce__", #11516, "2") +#11517 = @"C_type$set$2__repr__" +py_cobjects(#11517) +py_cobjecttypes(#11517, #10005) +py_cobject_sources(#11517, 0) +py_cobjectnames(#11517, "__repr__") +py_cmembers_versioned(#11494, "__repr__", #11517, "2") +#11518 = @"C_type$set$2__ror__" +py_cobjects(#11518) +py_cobjecttypes(#11518, #10005) +py_cobject_sources(#11518, 0) +py_cobjectnames(#11518, "__ror__") +py_cmembers_versioned(#11494, "__ror__", #11518, "2") +#11519 = @"C_type$set$2__rsub__" +py_cobjects(#11519) +py_cobjecttypes(#11519, #10005) +py_cobject_sources(#11519, 0) +py_cobjectnames(#11519, "__rsub__") +py_cmembers_versioned(#11494, "__rsub__", #11519, "2") +#11520 = @"C_type$set$2__rxor__" +py_cobjects(#11520) +py_cobjecttypes(#11520, #10005) +py_cobject_sources(#11520, 0) +py_cobjectnames(#11520, "__rxor__") +py_cmembers_versioned(#11494, "__rxor__", #11520, "2") +#11521 = @"C_type$set$2__sizeof__" +py_cobjects(#11521) +py_cobjecttypes(#11521, #10034) +py_cobject_sources(#11521, 0) +py_cobjectnames(#11521, "__sizeof__") +py_cmembers_versioned(#11494, "__sizeof__", #11521, "2") +#11522 = @"C_type$set$2__sub__" +py_cobjects(#11522) +py_cobjecttypes(#11522, #10005) +py_cobject_sources(#11522, 0) +py_cobjectnames(#11522, "__sub__") +py_cmembers_versioned(#11494, "__sub__", #11522, "2") +#11523 = @"C_type$set$2__xor__" +py_cobjects(#11523) +py_cobjecttypes(#11523, #10005) +py_cobject_sources(#11523, 0) +py_cobjectnames(#11523, "__xor__") +py_cmembers_versioned(#11494, "__xor__", #11523, "2") +#11524 = @"C_type$set$2add" +py_cobjects(#11524) +py_cobjecttypes(#11524, #10034) +py_cobject_sources(#11524, 0) +py_cobjectnames(#11524, "add") +py_cmembers_versioned(#11494, "add", #11524, "2") +#11525 = @"C_type$set$2clear" +py_cobjects(#11525) +py_cobjecttypes(#11525, #10034) +py_cobject_sources(#11525, 0) +py_cobjectnames(#11525, "clear") +py_cmembers_versioned(#11494, "clear", #11525, "2") +#11526 = @"C_type$set$2copy" +py_cobjects(#11526) +py_cobjecttypes(#11526, #10034) +py_cobject_sources(#11526, 0) +py_cobjectnames(#11526, "copy") +py_cmembers_versioned(#11494, "copy", #11526, "2") +#11527 = @"C_type$set$2difference" +py_cobjects(#11527) +py_cobjecttypes(#11527, #10034) +py_cobject_sources(#11527, 0) +py_cobjectnames(#11527, "difference") +py_cmembers_versioned(#11494, "difference", #11527, "2") +#11528 = @"C_type$set$2difference_update" +py_cobjects(#11528) +py_cobjecttypes(#11528, #10034) +py_cobject_sources(#11528, 0) +py_cobjectnames(#11528, "difference_update") +py_cmembers_versioned(#11494, "difference_update", #11528, "2") +#11529 = @"C_type$set$2discard" +py_cobjects(#11529) +py_cobjecttypes(#11529, #10034) +py_cobject_sources(#11529, 0) +py_cobjectnames(#11529, "discard") +py_cmembers_versioned(#11494, "discard", #11529, "2") +#11530 = @"C_type$set$2intersection" +py_cobjects(#11530) +py_cobjecttypes(#11530, #10034) +py_cobject_sources(#11530, 0) +py_cobjectnames(#11530, "intersection") +py_cmembers_versioned(#11494, "intersection", #11530, "2") +#11531 = @"C_type$set$2intersection_update" +py_cobjects(#11531) +py_cobjecttypes(#11531, #10034) +py_cobject_sources(#11531, 0) +py_cobjectnames(#11531, "intersection_update") +py_cmembers_versioned(#11494, "intersection_update", #11531, "2") +#11532 = @"C_type$set$2isdisjoint" +py_cobjects(#11532) +py_cobjecttypes(#11532, #10034) +py_cobject_sources(#11532, 0) +py_cobjectnames(#11532, "isdisjoint") +py_cmembers_versioned(#11494, "isdisjoint", #11532, "2") +#11533 = @"C_type$set$2issubset" +py_cobjects(#11533) +py_cobjecttypes(#11533, #10034) +py_cobject_sources(#11533, 0) +py_cobjectnames(#11533, "issubset") +py_cmembers_versioned(#11494, "issubset", #11533, "2") +#11534 = @"C_type$set$2issuperset" +py_cobjects(#11534) +py_cobjecttypes(#11534, #10034) +py_cobject_sources(#11534, 0) +py_cobjectnames(#11534, "issuperset") +py_cmembers_versioned(#11494, "issuperset", #11534, "2") +#11535 = @"C_type$set$2pop" +py_cobjects(#11535) +py_cobjecttypes(#11535, #10034) +py_cobject_sources(#11535, 0) +py_cobjectnames(#11535, "pop") +py_cmembers_versioned(#11494, "pop", #11535, "2") +#11536 = @"C_type$set$2remove" +py_cobjects(#11536) +py_cobjecttypes(#11536, #10034) +py_cobject_sources(#11536, 0) +py_cobjectnames(#11536, "remove") +py_cmembers_versioned(#11494, "remove", #11536, "2") +#11537 = @"C_type$set$2symmetric_difference" +py_cobjects(#11537) +py_cobjecttypes(#11537, #10034) +py_cobject_sources(#11537, 0) +py_cobjectnames(#11537, "symmetric_difference") +py_cmembers_versioned(#11494, "symmetric_difference", #11537, "2") +#11538 = @"C_type$set$2symmetric_difference_update" +py_cobjects(#11538) +py_cobjecttypes(#11538, #10034) +py_cobject_sources(#11538, 0) +py_cobjectnames(#11538, "symmetric_difference_update") +py_cmembers_versioned(#11494, "symmetric_difference_update", #11538, "2") +#11539 = @"C_type$set$2union" +py_cobjects(#11539) +py_cobjecttypes(#11539, #10034) +py_cobject_sources(#11539, 0) +py_cobjectnames(#11539, "union") +py_cmembers_versioned(#11494, "union", #11539, "2") +#11540 = @"C_type$set$2update" +py_cobjects(#11540) +py_cobjecttypes(#11540, #10034) +py_cobject_sources(#11540, 0) +py_cobjectnames(#11540, "update") +py_cmembers_versioned(#11494, "update", #11540, "2") +py_cmembers_versioned(#11494, ".super.", #10021, "2") +py_cobjectnames(#11494, "set") +py_cmembers_versioned(#10760, "set", #11494, "2") +#11541 = @"C_builtin_function_or_method$builtins.setattr" +py_cobjects(#11541) +py_cobjecttypes(#11541, #10075) +py_cobject_sources(#11541, 0) +py_cobjectnames(#11541, "setattr") +py_cmembers_versioned(#10760, "setattr", #11541, "2") +#11542 = @"C_type$slice" +py_cobjects(#11542) +py_cobjecttypes(#11542, #10001) +py_cobject_sources(#11542, 0) +#11543 = @"C_type$slice$2__cmp__" +py_cobjects(#11543) +py_cobjecttypes(#11543, #10005) +py_cobject_sources(#11543, 0) +py_cobjectnames(#11543, "__cmp__") +py_cmembers_versioned(#11542, "__cmp__", #11543, "2") +#11544 = @"C_bytes$db6464eb4169e8521ac23a1e7dab248186db2769" +py_cobjects(#11544) +py_cobjecttypes(#11544, #10028) +py_cobject_sources(#11544, 0) +py_cobjectnames(#11544, "b'slice(stop) +slice(start, stop[, step]) + +Create a slice object. This is used for extended slicing (e.g. a[0:10:2]).'") +py_cmembers_versioned(#11542, "__doc__", #11544, "2") +#11545 = @"C_type$slice$2__getattribute__" +py_cobjects(#11545) +py_cobjecttypes(#11545, #10005) +py_cobject_sources(#11545, 0) +py_cobjectnames(#11545, "__getattribute__") +py_cmembers_versioned(#11542, "__getattribute__", #11545, "2") +#11546 = @"C_type$slice$2__hash__" +py_cobjects(#11546) +py_cobjecttypes(#11546, #10005) +py_cobject_sources(#11546, 0) +py_cobjectnames(#11546, "__hash__") +py_cmembers_versioned(#11542, "__hash__", #11546, "2") +#11547 = @"C_type$slice$2__new__" +py_cobjects(#11547) +py_cobjecttypes(#11547, #10075) +py_cobject_sources(#11547, 0) +py_cobjectnames(#11547, "__new__") +py_cmembers_versioned(#11542, "__new__", #11547, "2") +#11548 = @"C_type$slice$2__reduce__" +py_cobjects(#11548) +py_cobjecttypes(#11548, #10034) +py_cobject_sources(#11548, 0) +py_cobjectnames(#11548, "__reduce__") +py_cmembers_versioned(#11542, "__reduce__", #11548, "2") +#11549 = @"C_type$slice$2__repr__" +py_cobjects(#11549) +py_cobjecttypes(#11549, #10005) +py_cobject_sources(#11549, 0) +py_cobjectnames(#11549, "__repr__") +py_cmembers_versioned(#11542, "__repr__", #11549, "2") +#11550 = @"C_type$slice$2indices" +py_cobjects(#11550) +py_cobjecttypes(#11550, #10034) +py_cobject_sources(#11550, 0) +py_cobjectnames(#11550, "indices") +py_cmembers_versioned(#11542, "indices", #11550, "2") +#11551 = @"C_type$slice$2start" +py_cobjects(#11551) +py_cobjecttypes(#11551, #10045) +py_cobject_sources(#11551, 0) +py_cobjectnames(#11551, "start") +py_cmembers_versioned(#11542, "start", #11551, "2") +#11552 = @"C_type$slice$2step" +py_cobjects(#11552) +py_cobjecttypes(#11552, #10045) +py_cobject_sources(#11552, 0) +py_cobjectnames(#11552, "step") +py_cmembers_versioned(#11542, "step", #11552, "2") +#11553 = @"C_type$slice$2stop" +py_cobjects(#11553) +py_cobjecttypes(#11553, #10045) +py_cobject_sources(#11553, 0) +py_cobjectnames(#11553, "stop") +py_cmembers_versioned(#11542, "stop", #11553, "2") +py_cmembers_versioned(#11542, ".super.", #10021, "2") +py_cobjectnames(#11542, "slice") +py_cmembers_versioned(#10760, "slice", #11542, "2") +#11554 = @"C_builtin_function_or_method$builtins.sorted" +py_cobjects(#11554) +py_cobjecttypes(#11554, #10075) +py_cobject_sources(#11554, 0) +py_cobjectnames(#11554, "sorted") +py_cmembers_versioned(#10760, "sorted", #11554, "2") +#11555 = @"C_type$staticmethod" +py_cobjects(#11555) +py_cobjecttypes(#11555, #10001) +py_cobject_sources(#11555, 0) +#11556 = @"C_bytes$47a8ab94971b2e5e792ad5a9765d65e14fe8d0d5" +py_cobjects(#11556) +py_cobjecttypes(#11556, #10028) +py_cobject_sources(#11556, 0) +py_cobjectnames(#11556, "b'staticmethod(function) -> method + +Convert a function to be a static method. + +A static method does not receive an implicit first argument. +To declare a static method, use this idiom: + + class C: + @staticmethod + def f(arg1, arg2, ...): + ... + +It can be called either on the class (e.g. C.f()) or on an instance +(e.g. C().f()). The instance is ignored except for its class. + +Static methods in Python are similar to those found in Java or C++. +For a more advanced concept, see the classmethod builtin.'") +py_cmembers_versioned(#11555, "__doc__", #11556, "2") +#11557 = @"C_type$staticmethod$2__func__" +py_cobjects(#11557) +py_cobjecttypes(#11557, #10045) +py_cobject_sources(#11557, 0) +py_cobjectnames(#11557, "__func__") +py_cmembers_versioned(#11555, "__func__", #11557, "2") +#11558 = @"C_type$staticmethod$2__get__" +py_cobjects(#11558) +py_cobjecttypes(#11558, #10005) +py_cobject_sources(#11558, 0) +py_cobjectnames(#11558, "__get__") +py_cmembers_versioned(#11555, "__get__", #11558, "2") +#11559 = @"C_type$staticmethod$2__getattribute__" +py_cobjects(#11559) +py_cobjecttypes(#11559, #10005) +py_cobject_sources(#11559, 0) +py_cobjectnames(#11559, "__getattribute__") +py_cmembers_versioned(#11555, "__getattribute__", #11559, "2") +#11560 = @"C_type$staticmethod$2__init__" +py_cobjects(#11560) +py_cobjecttypes(#11560, #10005) +py_cobject_sources(#11560, 0) +py_cobjectnames(#11560, "__init__") +py_cmembers_versioned(#11555, "__init__", #11560, "2") +#11561 = @"C_type$staticmethod$2__new__" +py_cobjects(#11561) +py_cobjecttypes(#11561, #10075) +py_cobject_sources(#11561, 0) +py_cobjectnames(#11561, "__new__") +py_cmembers_versioned(#11555, "__new__", #11561, "2") +py_cmembers_versioned(#11555, ".super.", #10021, "2") +py_cobjectnames(#11555, "staticmethod") +py_cmembers_versioned(#10760, "staticmethod", #11555, "2") +py_cmembers_versioned(#10760, "str", #10028, "2") +#11562 = @"C_builtin_function_or_method$builtins.sum" +py_cobjects(#11562) +py_cobjecttypes(#11562, #10075) +py_cobject_sources(#11562, 0) +py_cobjectnames(#11562, "sum") +py_cmembers_versioned(#10760, "sum", #11562, "2") +py_cmembers_versioned(#10760, "super", #10727, "2") +py_cmembers_versioned(#10760, "tuple", #10737, "2") +py_cmembers_versioned(#10760, "type", #10001, "2") +#11563 = @"C_builtin_function_or_method$builtins.unichr" +py_cobjects(#11563) +py_cobjecttypes(#11563, #10075) +py_cobject_sources(#11563, 0) +py_cobjectnames(#11563, "unichr") +py_cmembers_versioned(#10760, "unichr", #11563, "2") +#11564 = @"C_type$unicode" +py_cobjects(#11564) +py_cobjecttypes(#11564, #10001) +py_cobject_sources(#11564, 0) +#11565 = @"C_type$unicode$2__add__" +py_cobjects(#11565) +py_cobjecttypes(#11565, #10005) +py_cobject_sources(#11565, 0) +py_cobjectnames(#11565, "__add__") +py_cmembers_versioned(#11564, "__add__", #11565, "2") +#11566 = @"C_type$unicode$2__contains__" +py_cobjects(#11566) +py_cobjecttypes(#11566, #10005) +py_cobject_sources(#11566, 0) +py_cobjectnames(#11566, "__contains__") +py_cmembers_versioned(#11564, "__contains__", #11566, "2") +#11567 = @"C_bytes$255b372fb10fef3a09539a5d31c8a8abafd67366" +py_cobjects(#11567) +py_cobjecttypes(#11567, #10028) +py_cobject_sources(#11567, 0) +py_cobjectnames(#11567, "b'unicode(object='') -> unicode object +unicode(string[, encoding[, errors]]) -> unicode object + +Create a new Unicode object from the given encoded string. +encoding defaults to the current default string encoding. +errors can be 'strict', 'replace' or 'ignore' and defaults to 'strict'.'") +py_cmembers_versioned(#11564, "__doc__", #11567, "2") +#11568 = @"C_type$unicode$2__eq__" +py_cobjects(#11568) +py_cobjecttypes(#11568, #10005) +py_cobject_sources(#11568, 0) +py_cobjectnames(#11568, "__eq__") +py_cmembers_versioned(#11564, "__eq__", #11568, "2") +#11569 = @"C_type$unicode$2__format__" +py_cobjects(#11569) +py_cobjecttypes(#11569, #10034) +py_cobject_sources(#11569, 0) +py_cobjectnames(#11569, "__format__") +py_cmembers_versioned(#11564, "__format__", #11569, "2") +#11570 = @"C_type$unicode$2__ge__" +py_cobjects(#11570) +py_cobjecttypes(#11570, #10005) +py_cobject_sources(#11570, 0) +py_cobjectnames(#11570, "__ge__") +py_cmembers_versioned(#11564, "__ge__", #11570, "2") +#11571 = @"C_type$unicode$2__getattribute__" +py_cobjects(#11571) +py_cobjecttypes(#11571, #10005) +py_cobject_sources(#11571, 0) +py_cobjectnames(#11571, "__getattribute__") +py_cmembers_versioned(#11564, "__getattribute__", #11571, "2") +#11572 = @"C_type$unicode$2__getitem__" +py_cobjects(#11572) +py_cobjecttypes(#11572, #10005) +py_cobject_sources(#11572, 0) +py_cobjectnames(#11572, "__getitem__") +py_cmembers_versioned(#11564, "__getitem__", #11572, "2") +#11573 = @"C_type$unicode$2__getnewargs__" +py_cobjects(#11573) +py_cobjecttypes(#11573, #10034) +py_cobject_sources(#11573, 0) +py_cobjectnames(#11573, "__getnewargs__") +py_cmembers_versioned(#11564, "__getnewargs__", #11573, "2") +#11574 = @"C_type$unicode$2__getslice__" +py_cobjects(#11574) +py_cobjecttypes(#11574, #10005) +py_cobject_sources(#11574, 0) +py_cobjectnames(#11574, "__getslice__") +py_cmembers_versioned(#11564, "__getslice__", #11574, "2") +#11575 = @"C_type$unicode$2__gt__" +py_cobjects(#11575) +py_cobjecttypes(#11575, #10005) +py_cobject_sources(#11575, 0) +py_cobjectnames(#11575, "__gt__") +py_cmembers_versioned(#11564, "__gt__", #11575, "2") +#11576 = @"C_type$unicode$2__hash__" +py_cobjects(#11576) +py_cobjecttypes(#11576, #10005) +py_cobject_sources(#11576, 0) +py_cobjectnames(#11576, "__hash__") +py_cmembers_versioned(#11564, "__hash__", #11576, "2") +#11577 = @"C_type$unicode$2__le__" +py_cobjects(#11577) +py_cobjecttypes(#11577, #10005) +py_cobject_sources(#11577, 0) +py_cobjectnames(#11577, "__le__") +py_cmembers_versioned(#11564, "__le__", #11577, "2") +#11578 = @"C_type$unicode$2__len__" +py_cobjects(#11578) +py_cobjecttypes(#11578, #10005) +py_cobject_sources(#11578, 0) +py_cobjectnames(#11578, "__len__") +py_cmembers_versioned(#11564, "__len__", #11578, "2") +#11579 = @"C_type$unicode$2__lt__" +py_cobjects(#11579) +py_cobjecttypes(#11579, #10005) +py_cobject_sources(#11579, 0) +py_cobjectnames(#11579, "__lt__") +py_cmembers_versioned(#11564, "__lt__", #11579, "2") +#11580 = @"C_type$unicode$2__mod__" +py_cobjects(#11580) +py_cobjecttypes(#11580, #10005) +py_cobject_sources(#11580, 0) +py_cobjectnames(#11580, "__mod__") +py_cmembers_versioned(#11564, "__mod__", #11580, "2") +#11581 = @"C_type$unicode$2__mul__" +py_cobjects(#11581) +py_cobjecttypes(#11581, #10005) +py_cobject_sources(#11581, 0) +py_cobjectnames(#11581, "__mul__") +py_cmembers_versioned(#11564, "__mul__", #11581, "2") +#11582 = @"C_type$unicode$2__ne__" +py_cobjects(#11582) +py_cobjecttypes(#11582, #10005) +py_cobject_sources(#11582, 0) +py_cobjectnames(#11582, "__ne__") +py_cmembers_versioned(#11564, "__ne__", #11582, "2") +#11583 = @"C_type$unicode$2__new__" +py_cobjects(#11583) +py_cobjecttypes(#11583, #10075) +py_cobject_sources(#11583, 0) +py_cobjectnames(#11583, "__new__") +py_cmembers_versioned(#11564, "__new__", #11583, "2") +#11584 = @"C_type$unicode$2__repr__" +py_cobjects(#11584) +py_cobjecttypes(#11584, #10005) +py_cobject_sources(#11584, 0) +py_cobjectnames(#11584, "__repr__") +py_cmembers_versioned(#11564, "__repr__", #11584, "2") +#11585 = @"C_type$unicode$2__rmod__" +py_cobjects(#11585) +py_cobjecttypes(#11585, #10005) +py_cobject_sources(#11585, 0) +py_cobjectnames(#11585, "__rmod__") +py_cmembers_versioned(#11564, "__rmod__", #11585, "2") +#11586 = @"C_type$unicode$2__rmul__" +py_cobjects(#11586) +py_cobjecttypes(#11586, #10005) +py_cobject_sources(#11586, 0) +py_cobjectnames(#11586, "__rmul__") +py_cmembers_versioned(#11564, "__rmul__", #11586, "2") +#11587 = @"C_type$unicode$2__sizeof__" +py_cobjects(#11587) +py_cobjecttypes(#11587, #10034) +py_cobject_sources(#11587, 0) +py_cobjectnames(#11587, "__sizeof__") +py_cmembers_versioned(#11564, "__sizeof__", #11587, "2") +#11588 = @"C_type$unicode$2__str__" +py_cobjects(#11588) +py_cobjecttypes(#11588, #10005) +py_cobject_sources(#11588, 0) +py_cobjectnames(#11588, "__str__") +py_cmembers_versioned(#11564, "__str__", #11588, "2") +#11589 = @"C_type$unicode$2_formatter_field_name_split" +py_cobjects(#11589) +py_cobjecttypes(#11589, #10034) +py_cobject_sources(#11589, 0) +py_cobjectnames(#11589, "_formatter_field_name_split") +py_cmembers_versioned(#11564, "_formatter_field_name_split", #11589, "2") +#11590 = @"C_type$unicode$2_formatter_parser" +py_cobjects(#11590) +py_cobjecttypes(#11590, #10034) +py_cobject_sources(#11590, 0) +py_cobjectnames(#11590, "_formatter_parser") +py_cmembers_versioned(#11564, "_formatter_parser", #11590, "2") +#11591 = @"C_type$unicode$2capitalize" +py_cobjects(#11591) +py_cobjecttypes(#11591, #10034) +py_cobject_sources(#11591, 0) +py_cobjectnames(#11591, "capitalize") +py_cmembers_versioned(#11564, "capitalize", #11591, "2") +#11592 = @"C_type$unicode$2center" +py_cobjects(#11592) +py_cobjecttypes(#11592, #10034) +py_cobject_sources(#11592, 0) +py_cobjectnames(#11592, "center") +py_cmembers_versioned(#11564, "center", #11592, "2") +#11593 = @"C_type$unicode$2count" +py_cobjects(#11593) +py_cobjecttypes(#11593, #10034) +py_cobject_sources(#11593, 0) +py_cobjectnames(#11593, "count") +py_cmembers_versioned(#11564, "count", #11593, "2") +#11594 = @"C_type$unicode$2decode" +py_cobjects(#11594) +py_cobjecttypes(#11594, #10034) +py_cobject_sources(#11594, 0) +py_cobjectnames(#11594, "decode") +py_cmembers_versioned(#11564, "decode", #11594, "2") +#11595 = @"C_type$unicode$2encode" +py_cobjects(#11595) +py_cobjecttypes(#11595, #10034) +py_cobject_sources(#11595, 0) +py_cobjectnames(#11595, "encode") +py_cmembers_versioned(#11564, "encode", #11595, "2") +#11596 = @"C_type$unicode$2endswith" +py_cobjects(#11596) +py_cobjecttypes(#11596, #10034) +py_cobject_sources(#11596, 0) +py_cobjectnames(#11596, "endswith") +py_cmembers_versioned(#11564, "endswith", #11596, "2") +#11597 = @"C_type$unicode$2expandtabs" +py_cobjects(#11597) +py_cobjecttypes(#11597, #10034) +py_cobject_sources(#11597, 0) +py_cobjectnames(#11597, "expandtabs") +py_cmembers_versioned(#11564, "expandtabs", #11597, "2") +#11598 = @"C_type$unicode$2find" +py_cobjects(#11598) +py_cobjecttypes(#11598, #10034) +py_cobject_sources(#11598, 0) +py_cobjectnames(#11598, "find") +py_cmembers_versioned(#11564, "find", #11598, "2") +#11599 = @"C_type$unicode$2format" +py_cobjects(#11599) +py_cobjecttypes(#11599, #10034) +py_cobject_sources(#11599, 0) +py_cobjectnames(#11599, "format") +py_cmembers_versioned(#11564, "format", #11599, "2") +#11600 = @"C_type$unicode$2index" +py_cobjects(#11600) +py_cobjecttypes(#11600, #10034) +py_cobject_sources(#11600, 0) +py_cobjectnames(#11600, "index") +py_cmembers_versioned(#11564, "index", #11600, "2") +#11601 = @"C_type$unicode$2isalnum" +py_cobjects(#11601) +py_cobjecttypes(#11601, #10034) +py_cobject_sources(#11601, 0) +py_cobjectnames(#11601, "isalnum") +py_cmembers_versioned(#11564, "isalnum", #11601, "2") +#11602 = @"C_type$unicode$2isalpha" +py_cobjects(#11602) +py_cobjecttypes(#11602, #10034) +py_cobject_sources(#11602, 0) +py_cobjectnames(#11602, "isalpha") +py_cmembers_versioned(#11564, "isalpha", #11602, "2") +#11603 = @"C_type$unicode$2isdecimal" +py_cobjects(#11603) +py_cobjecttypes(#11603, #10034) +py_cobject_sources(#11603, 0) +py_cobjectnames(#11603, "isdecimal") +py_cmembers_versioned(#11564, "isdecimal", #11603, "2") +#11604 = @"C_type$unicode$2isdigit" +py_cobjects(#11604) +py_cobjecttypes(#11604, #10034) +py_cobject_sources(#11604, 0) +py_cobjectnames(#11604, "isdigit") +py_cmembers_versioned(#11564, "isdigit", #11604, "2") +#11605 = @"C_type$unicode$2islower" +py_cobjects(#11605) +py_cobjecttypes(#11605, #10034) +py_cobject_sources(#11605, 0) +py_cobjectnames(#11605, "islower") +py_cmembers_versioned(#11564, "islower", #11605, "2") +#11606 = @"C_type$unicode$2isnumeric" +py_cobjects(#11606) +py_cobjecttypes(#11606, #10034) +py_cobject_sources(#11606, 0) +py_cobjectnames(#11606, "isnumeric") +py_cmembers_versioned(#11564, "isnumeric", #11606, "2") +#11607 = @"C_type$unicode$2isspace" +py_cobjects(#11607) +py_cobjecttypes(#11607, #10034) +py_cobject_sources(#11607, 0) +py_cobjectnames(#11607, "isspace") +py_cmembers_versioned(#11564, "isspace", #11607, "2") +#11608 = @"C_type$unicode$2istitle" +py_cobjects(#11608) +py_cobjecttypes(#11608, #10034) +py_cobject_sources(#11608, 0) +py_cobjectnames(#11608, "istitle") +py_cmembers_versioned(#11564, "istitle", #11608, "2") +#11609 = @"C_type$unicode$2isupper" +py_cobjects(#11609) +py_cobjecttypes(#11609, #10034) +py_cobject_sources(#11609, 0) +py_cobjectnames(#11609, "isupper") +py_cmembers_versioned(#11564, "isupper", #11609, "2") +#11610 = @"C_type$unicode$2join" +py_cobjects(#11610) +py_cobjecttypes(#11610, #10034) +py_cobject_sources(#11610, 0) +py_cobjectnames(#11610, "join") +py_cmembers_versioned(#11564, "join", #11610, "2") +#11611 = @"C_type$unicode$2ljust" +py_cobjects(#11611) +py_cobjecttypes(#11611, #10034) +py_cobject_sources(#11611, 0) +py_cobjectnames(#11611, "ljust") +py_cmembers_versioned(#11564, "ljust", #11611, "2") +#11612 = @"C_type$unicode$2lower" +py_cobjects(#11612) +py_cobjecttypes(#11612, #10034) +py_cobject_sources(#11612, 0) +py_cobjectnames(#11612, "lower") +py_cmembers_versioned(#11564, "lower", #11612, "2") +#11613 = @"C_type$unicode$2lstrip" +py_cobjects(#11613) +py_cobjecttypes(#11613, #10034) +py_cobject_sources(#11613, 0) +py_cobjectnames(#11613, "lstrip") +py_cmembers_versioned(#11564, "lstrip", #11613, "2") +#11614 = @"C_type$unicode$2partition" +py_cobjects(#11614) +py_cobjecttypes(#11614, #10034) +py_cobject_sources(#11614, 0) +py_cobjectnames(#11614, "partition") +py_cmembers_versioned(#11564, "partition", #11614, "2") +#11615 = @"C_type$unicode$2replace" +py_cobjects(#11615) +py_cobjecttypes(#11615, #10034) +py_cobject_sources(#11615, 0) +py_cobjectnames(#11615, "replace") +py_cmembers_versioned(#11564, "replace", #11615, "2") +#11616 = @"C_type$unicode$2rfind" +py_cobjects(#11616) +py_cobjecttypes(#11616, #10034) +py_cobject_sources(#11616, 0) +py_cobjectnames(#11616, "rfind") +py_cmembers_versioned(#11564, "rfind", #11616, "2") +#11617 = @"C_type$unicode$2rindex" +py_cobjects(#11617) +py_cobjecttypes(#11617, #10034) +py_cobject_sources(#11617, 0) +py_cobjectnames(#11617, "rindex") +py_cmembers_versioned(#11564, "rindex", #11617, "2") +#11618 = @"C_type$unicode$2rjust" +py_cobjects(#11618) +py_cobjecttypes(#11618, #10034) +py_cobject_sources(#11618, 0) +py_cobjectnames(#11618, "rjust") +py_cmembers_versioned(#11564, "rjust", #11618, "2") +#11619 = @"C_type$unicode$2rpartition" +py_cobjects(#11619) +py_cobjecttypes(#11619, #10034) +py_cobject_sources(#11619, 0) +py_cobjectnames(#11619, "rpartition") +py_cmembers_versioned(#11564, "rpartition", #11619, "2") +#11620 = @"C_type$unicode$2rsplit" +py_cobjects(#11620) +py_cobjecttypes(#11620, #10034) +py_cobject_sources(#11620, 0) +py_cobjectnames(#11620, "rsplit") +py_cmembers_versioned(#11564, "rsplit", #11620, "2") +#11621 = @"C_type$unicode$2rstrip" +py_cobjects(#11621) +py_cobjecttypes(#11621, #10034) +py_cobject_sources(#11621, 0) +py_cobjectnames(#11621, "rstrip") +py_cmembers_versioned(#11564, "rstrip", #11621, "2") +#11622 = @"C_type$unicode$2split" +py_cobjects(#11622) +py_cobjecttypes(#11622, #10034) +py_cobject_sources(#11622, 0) +py_cobjectnames(#11622, "split") +py_cmembers_versioned(#11564, "split", #11622, "2") +#11623 = @"C_type$unicode$2splitlines" +py_cobjects(#11623) +py_cobjecttypes(#11623, #10034) +py_cobject_sources(#11623, 0) +py_cobjectnames(#11623, "splitlines") +py_cmembers_versioned(#11564, "splitlines", #11623, "2") +#11624 = @"C_type$unicode$2startswith" +py_cobjects(#11624) +py_cobjecttypes(#11624, #10034) +py_cobject_sources(#11624, 0) +py_cobjectnames(#11624, "startswith") +py_cmembers_versioned(#11564, "startswith", #11624, "2") +#11625 = @"C_type$unicode$2strip" +py_cobjects(#11625) +py_cobjecttypes(#11625, #10034) +py_cobject_sources(#11625, 0) +py_cobjectnames(#11625, "strip") +py_cmembers_versioned(#11564, "strip", #11625, "2") +#11626 = @"C_type$unicode$2swapcase" +py_cobjects(#11626) +py_cobjecttypes(#11626, #10034) +py_cobject_sources(#11626, 0) +py_cobjectnames(#11626, "swapcase") +py_cmembers_versioned(#11564, "swapcase", #11626, "2") +#11627 = @"C_type$unicode$2title" +py_cobjects(#11627) +py_cobjecttypes(#11627, #10034) +py_cobject_sources(#11627, 0) +py_cobjectnames(#11627, "title") +py_cmembers_versioned(#11564, "title", #11627, "2") +#11628 = @"C_type$unicode$2translate" +py_cobjects(#11628) +py_cobjecttypes(#11628, #10034) +py_cobject_sources(#11628, 0) +py_cobjectnames(#11628, "translate") +py_cmembers_versioned(#11564, "translate", #11628, "2") +#11629 = @"C_type$unicode$2upper" +py_cobjects(#11629) +py_cobjecttypes(#11629, #10034) +py_cobject_sources(#11629, 0) +py_cobjectnames(#11629, "upper") +py_cmembers_versioned(#11564, "upper", #11629, "2") +#11630 = @"C_type$unicode$2zfill" +py_cobjects(#11630) +py_cobjecttypes(#11630, #10034) +py_cobject_sources(#11630, 0) +py_cobjectnames(#11630, "zfill") +py_cmembers_versioned(#11564, "zfill", #11630, "2") +py_cmembers_versioned(#11564, ".super.", #10151, "2") +py_cobjectnames(#11564, "unicode") +py_cmembers_versioned(#10760, "unicode", #11564, "2") +#11631 = @"C_builtin_function_or_method$builtins.vars" +py_cobjects(#11631) +py_cobjecttypes(#11631, #10075) +py_cobject_sources(#11631, 0) +py_cobjectnames(#11631, "vars") +py_cmembers_versioned(#10760, "vars", #11631, "2") +#11632 = @"C_type$xrange" +py_cobjects(#11632) +py_cobjecttypes(#11632, #10001) +py_cobject_sources(#11632, 0) +#11633 = @"C_bytes$d297279d6128eac5ba64bea2d4201509cec3ec6b" +py_cobjects(#11633) +py_cobjecttypes(#11633, #10028) +py_cobject_sources(#11633, 0) +py_cobjectnames(#11633, "b'xrange(stop) -> xrange object +xrange(start, stop[, step]) -> xrange object + +Like range(), but instead of returning a list, returns an object that +generates the numbers in the range on demand. For looping, this is +slightly faster than range() and more memory efficient.'") +py_cmembers_versioned(#11632, "__doc__", #11633, "2") +#11634 = @"C_type$xrange$2__getattribute__" +py_cobjects(#11634) +py_cobjecttypes(#11634, #10005) +py_cobject_sources(#11634, 0) +py_cobjectnames(#11634, "__getattribute__") +py_cmembers_versioned(#11632, "__getattribute__", #11634, "2") +#11635 = @"C_type$xrange$2__getitem__" +py_cobjects(#11635) +py_cobjecttypes(#11635, #10005) +py_cobject_sources(#11635, 0) +py_cobjectnames(#11635, "__getitem__") +py_cmembers_versioned(#11632, "__getitem__", #11635, "2") +#11636 = @"C_type$xrange$2__iter__" +py_cobjects(#11636) +py_cobjecttypes(#11636, #10005) +py_cobject_sources(#11636, 0) +py_cobjectnames(#11636, "__iter__") +py_cmembers_versioned(#11632, "__iter__", #11636, "2") +#11637 = @"C_type$xrange$2__len__" +py_cobjects(#11637) +py_cobjecttypes(#11637, #10005) +py_cobject_sources(#11637, 0) +py_cobjectnames(#11637, "__len__") +py_cmembers_versioned(#11632, "__len__", #11637, "2") +#11638 = @"C_type$xrange$2__new__" +py_cobjects(#11638) +py_cobjecttypes(#11638, #10075) +py_cobject_sources(#11638, 0) +py_cobjectnames(#11638, "__new__") +py_cmembers_versioned(#11632, "__new__", #11638, "2") +#11639 = @"C_type$xrange$2__reduce__" +py_cobjects(#11639) +py_cobjecttypes(#11639, #10034) +py_cobject_sources(#11639, 0) +py_cobjectnames(#11639, "__reduce__") +py_cmembers_versioned(#11632, "__reduce__", #11639, "2") +#11640 = @"C_type$xrange$2__repr__" +py_cobjects(#11640) +py_cobjecttypes(#11640, #10005) +py_cobject_sources(#11640, 0) +py_cobjectnames(#11640, "__repr__") +py_cmembers_versioned(#11632, "__repr__", #11640, "2") +#11641 = @"C_type$xrange$2__reversed__" +py_cobjects(#11641) +py_cobjecttypes(#11641, #10034) +py_cobject_sources(#11641, 0) +py_cobjectnames(#11641, "__reversed__") +py_cmembers_versioned(#11632, "__reversed__", #11641, "2") +py_cmembers_versioned(#11632, ".super.", #10021, "2") +py_cobjectnames(#11632, "xrange") +py_cmembers_versioned(#10760, "xrange", #11632, "2") +#11642 = @"C_builtin_function_or_method$builtins.zip" +py_cobjects(#11642) +py_cobjecttypes(#11642, #10075) +py_cobject_sources(#11642, 0) +py_cobjectnames(#11642, "zip") +py_cmembers_versioned(#10760, "zip", #11642, "2") +py_cobjectnames(#10760, "__builtin__") +py_special_objects(#10760, "builtin_module") +py_special_objects(#11494, "set") +py_special_objects(#11564, "unicode") +#11643 = @"C_module$sys" +py_cobjects(#11643) +py_cobjecttypes(#11643, #10761) +py_cobject_sources(#11643, 0) +#11644 = @"C_module$sys$2__displayhook__" +py_cobjects(#11644) +py_cobjecttypes(#11644, #10075) +py_cobject_sources(#11644, 0) +py_cobjectnames(#11644, "displayhook") +py_cmembers_versioned(#11643, "__displayhook__", #11644, "2") +#11645 = @"C_bytes$2382b15d634ee6ef231da5102b7a4db3f8d9fa8d" +py_cobjects(#11645) +py_cobjecttypes(#11645, #10028) +py_cobject_sources(#11645, 0) +py_cobjectnames(#11645, "b'This module provides access to some objects used or maintained by the +interpreter and to functions that interact strongly with the interpreter. + +Dynamic objects: + +argv -- command line arguments; argv[0] is the script pathname if known +path -- module search path; path[0] is the script directory, else '' +modules -- dictionary of loaded modules + +displayhook -- called to show results in an interactive session +excepthook -- called to handle any uncaught exception other than SystemExit + To customize printing in an interactive session or to install a custom + top-level exception handler, assign other functions to replace these. + +exitfunc -- if sys.exitfunc exists, this routine is called when Python exits + Assigning to sys.exitfunc is deprecated; use the atexit module instead. + +stdin -- standard input file object; used by raw_input() and input() +stdout -- standard output file object; used by the print statement +stderr -- standard error object; used for error messages + By assigning other file objects (or objects that behave like files) + to these, it is possible to redirect all of the interpreter's I/O. + +last_type -- type of last uncaught exception +last_value -- value of last uncaught exception +last_traceback -- traceback of last uncaught exception + These three are only available in an interactive session after a + traceback has been printed. + +exc_type -- type of exception currently being handled +exc_value -- value of exception currently being handled +exc_traceback -- traceback of exception currently being handled + The function exc_info() should be used instead of these three, + because it is thread-safe. + +Static objects: + +float_info -- a dict with information about the float inplementation. +long_info -- a struct sequence with information about the long implementation. +maxint -- the largest supported integer (the smallest is -maxint-1) +maxsize -- the largest supported length of containers. +maxunicode -- the largest supported character +builtin_module_names -- tuple of module names built into this interpreter +version -- the version of this interpreter as a string +version_info -- version information as a named tuple +hexversion -- version information encoded as a single integer +copyright -- copyright notice pertaining to this interpreter +platform -- platform identifier +executable -- absolute path of the executable binary of the Python interpreter +prefix -- prefix used to find the Python library +exec_prefix -- prefix used to find the machine-specific Python library +float_repr_style -- string indicating the style of repr() output for floats +__stdin__ -- the original stdin; don't touch! +__stdout__ -- the original stdout; don't touch! +__stderr__ -- the original stderr; don't touch! +__displayhook__ -- the original displayhook; don't touch! +__excepthook__ -- the original excepthook; don't touch! + +Functions: + +displayhook() -- print an object to the screen, and save it in __builtin__._ +excepthook() -- print an exception and its traceback to sys.stderr +exc_info() -- return thread-safe information about the current exception +exc_clear() -- clear the exception state for the current thread +exit() -- exit the interpreter by raising SystemExit +getdlopenflags() -- returns flags to be used for dlopen() calls +getprofile() -- get the global profiling function +getrefcount() -- return the reference count for an object (plus one :-) +getrecursionlimit() -- return the max recursion depth for the interpreter +getsizeof() -- return the size of an object in bytes +gettrace() -- get the global debug tracing function +setcheckinterval() -- control how often the interpreter checks for events +setdlopenflags() -- set the flags to be used for dlopen() calls +setprofile() -- set the global profiling function +setrecursionlimit() -- set the max recursion depth for the interpreter +settrace() -- set the global debug tracing function +'") +py_cmembers_versioned(#11643, "__doc__", #11645, "2") +#11646 = @"C_module$sys$2__excepthook__" +py_cobjects(#11646) +py_cobjecttypes(#11646, #10075) +py_cobject_sources(#11646, 0) +py_cobjectnames(#11646, "excepthook") +py_cmembers_versioned(#11643, "__excepthook__", #11646, "2") +#11647 = @"C_bytes$b4c56ee8d2854166dec66644f541b85247105b2c" +py_cobjects(#11647) +py_cobjecttypes(#11647, #10028) +py_cobject_sources(#11647, 0) +py_cobjectnames(#11647, "b'sys'") +py_cmembers_versioned(#11643, "__name__", #11647, "2") +py_cmembers_versioned(#11643, "__package__", #10017, "2") +#11648 = @"C_module$sys$2__stderr__" +py_cobjects(#11648) +py_cobjecttypes(#11648, #11179) +py_cobject_sources(#11648, 0) +py_cobjectnames(#11648, "object") +py_cmembers_versioned(#11643, "__stderr__", #11648, "2") +#11649 = @"C_module$sys$2__stdin__" +py_cobjects(#11649) +py_cobjecttypes(#11649, #11179) +py_cobject_sources(#11649, 0) +py_cobjectnames(#11649, "object") +py_cmembers_versioned(#11643, "__stdin__", #11649, "2") +#11650 = @"C_module$sys$2__stdout__" +py_cobjects(#11650) +py_cobjecttypes(#11650, #11179) +py_cobject_sources(#11650, 0) +py_cobjectnames(#11650, "object") +py_cmembers_versioned(#11643, "__stdout__", #11650, "2") +#11651 = @"C_module$sys$2_clear_type_cache" +py_cobjects(#11651) +py_cobjecttypes(#11651, #10075) +py_cobject_sources(#11651, 0) +py_cobjectnames(#11651, "_clear_type_cache") +py_cmembers_versioned(#11643, "_clear_type_cache", #11651, "2") +#11652 = @"C_module$sys$2_current_frames" +py_cobjects(#11652) +py_cobjecttypes(#11652, #10075) +py_cobject_sources(#11652, 0) +py_cobjectnames(#11652, "_current_frames") +py_cmembers_versioned(#11643, "_current_frames", #11652, "2") +#11653 = @"C_module$sys$2_getframe" +py_cobjects(#11653) +py_cobjecttypes(#11653, #10075) +py_cobject_sources(#11653, 0) +py_cobjectnames(#11653, "_getframe") +py_cmembers_versioned(#11643, "_getframe", #11653, "2") +#11654 = @"C_module$sys$2_git" +py_cobjects(#11654) +py_cobjecttypes(#11654, #10737) +py_cobject_sources(#11654, 0) +#11655 = @"C_bytes$3348cc07058a464ebb973af5bfdb70ca7968c2db" +py_cobjects(#11655) +py_cobjecttypes(#11655, #10028) +py_cobject_sources(#11655, 0) +py_cobjectnames(#11655, "b'CPython'") +py_citems(#11654, 0, #11655) +#11656 = @"C_bytes$da39a3ee5e6b4b0d3255bfef95601890afd80709" +py_cobjects(#11656) +py_cobjecttypes(#11656, #10028) +py_cobject_sources(#11656, 0) +py_cobjectnames(#11656, "b''") +py_citems(#11654, 1, #11656) +py_citems(#11654, 2, #11656) +py_cobjectnames(#11654, "object") +py_cmembers_versioned(#11643, "_git", #11654, "2") +#11657 = @"C_bytes$606cb74201e7d8dbdf8268c2eaaf1339a46e918f" +py_cobjects(#11657) +py_cobjecttypes(#11657, #10028) +py_cobject_sources(#11657, 0) +py_cobjectnames(#11657, "b'x86_64-linux-gnu'") +py_cmembers_versioned(#11643, "_multiarch", #11657, "2") +#11658 = @"C_int$1013" +py_cobjects(#11658) +py_cobjecttypes(#11658, #10449) +py_cobject_sources(#11658, 0) +py_cobjectnames(#11658, "1013") +py_cmembers_versioned(#11643, "api_version", #11658, "2") +#11659 = @"C_module$sys$2argv" +py_cobjects(#11659) +py_cobjecttypes(#11659, #11360) +py_cobject_sources(#11659, 0) +#11660 = @"C_bytes$3525e833c783a558fedf8363ced06fbd55ba3fde" +py_cobjects(#11660) +py_cobjecttypes(#11660, #10028) +py_cobject_sources(#11660, 0) +py_cobjectnames(#11660, "b'/workspaces/semmle-code/target/intree/codeql-python/python/tools/python_tracer.py'") +py_citems(#11659, 0, #11660) +#11661 = @"C_bytes$4d784a907a3cc0f3fd96b4e3f625477b38bee0be" +py_cobjects(#11661) +py_cobjecttypes(#11661, #10028) +py_cobject_sources(#11661, 0) +py_cobjectnames(#11661, "b'--lang=2'") +py_citems(#11659, 1, #11661) +#11662 = @"C_bytes$1d553e9f135045e774e0da5c3598818711d8b00e" +py_cobjects(#11662) +py_cobjecttypes(#11662, #10028) +py_cobject_sources(#11662, 0) +py_cobjectnames(#11662, "b'--filter=exclude:**/*.testproj/**'") +py_citems(#11659, 2, #11662) +#11663 = @"C_bytes$a94a8fe5ccb19ba61c4c0873d391e987982fbbd3" +py_cobjects(#11663) +py_cobjecttypes(#11663, #10028) +py_cobject_sources(#11663, 0) +py_cobjectnames(#11663, "b'test'") +py_citems(#11659, 3, #11663) +#11664 = @"C_bytes$61adf419d11f4120dca81c8a4723b29f991057ae" +py_cobjects(#11664) +py_cobjecttypes(#11664, #10028) +py_cobject_sources(#11664, 0) +py_cobjectnames(#11664, "b'--path'") +py_citems(#11659, 4, #11664) +#11665 = @"C_bytes$f2389c259ec2ef77490e6ddf8541bcf8aac70ec5" +py_cobjects(#11665) +py_cobjecttypes(#11665, #10028) +py_cobject_sources(#11665, 0) +py_cobjectnames(#11665, "b'/workspaces/semmle-code/semmlecode-python-tests/2/extractor-tests/old_style_disequality'") +py_citems(#11659, 5, #11665) +#11666 = @"C_bytes$ae835d85f6fdd7ac1cd47d7547e266fd5322d1fd" +py_cobjects(#11666) +py_cobjecttypes(#11666, #10028) +py_cobject_sources(#11666, 0) +py_cobjectnames(#11666, "b'--verbosity'") +py_citems(#11659, 6, #11666) +py_citems(#11659, 7, #10642) +#11667 = @"C_bytes$b31f41bd9ba68328bfcf0fa41365ff5b3f60be99" +py_cobjects(#11667) +py_cobjecttypes(#11667, #10028) +py_cobject_sources(#11667, 0) +py_cobjectnames(#11667, "b'--colorize'") +py_citems(#11659, 8, #11667) +py_cobjectnames(#11659, "object") +py_cmembers_versioned(#11643, "argv", #11659, "2") +#11668 = @"C_module$sys$2builtin_module_names" +py_cobjects(#11668) +py_cobjecttypes(#11668, #10737) +py_cobject_sources(#11668, 0) +#11669 = @"C_bytes$3f91ef9b413ce508f0382fd3b182901dfb6bb0ce" +py_cobjects(#11669) +py_cobjecttypes(#11669, #10028) +py_cobject_sources(#11669, 0) +py_cobjectnames(#11669, "b'__builtin__'") +py_citems(#11668, 0, #11669) +#11670 = @"C_bytes$3a64a9fca18e24c6cc560c53c3603d38f21d45e1" +py_cobjects(#11670) +py_cobjecttypes(#11670, #10028) +py_cobject_sources(#11670, 0) +py_cobjectnames(#11670, "b'__main__'") +py_citems(#11668, 1, #11670) +#11671 = @"C_bytes$7f2b7c5a60c2644f250e9dc7ff7fa02592aea266" +py_cobjects(#11671) +py_cobjecttypes(#11671, #10028) +py_cobject_sources(#11671, 0) +py_cobjectnames(#11671, "b'_ast'") +py_citems(#11668, 2, #11671) +#11672 = @"C_bytes$579c90c0e572bc4bbbd532c809cc7f3f9556e817" +py_cobjects(#11672) +py_cobjecttypes(#11672, #10028) +py_cobject_sources(#11672, 0) +py_cobjectnames(#11672, "b'_bisect'") +py_citems(#11668, 3, #11672) +#11673 = @"C_bytes$a5513e85db2649ca88ef79d90f9b5ec947daa37a" +py_cobjects(#11673) +py_cobjecttypes(#11673, #10028) +py_cobject_sources(#11673, 0) +py_cobjectnames(#11673, "b'_codecs'") +py_citems(#11668, 4, #11673) +#11674 = @"C_bytes$2746b94ac2170388acf8ef9c5235281512a0b70b" +py_cobjects(#11674) +py_cobjecttypes(#11674, #10028) +py_cobject_sources(#11674, 0) +py_cobjectnames(#11674, "b'_collections'") +py_citems(#11668, 5, #11674) +#11675 = @"C_bytes$373d3cb70f3711a68632cf0ac8abac03b9be62c0" +py_cobjects(#11675) +py_cobjecttypes(#11675, #10028) +py_cobject_sources(#11675, 0) +py_cobjectnames(#11675, "b'_functools'") +py_citems(#11668, 6, #11675) +#11676 = @"C_bytes$4884118d98d0aede7dbe8a7716c62711f537c647" +py_cobjects(#11676) +py_cobjecttypes(#11676, #10028) +py_cobject_sources(#11676, 0) +py_cobjectnames(#11676, "b'_heapq'") +py_citems(#11668, 7, #11676) +#11677 = @"C_bytes$49e43a67a5b4471f57ac2bd55af13ff7ecec742c" +py_cobjects(#11677) +py_cobjecttypes(#11677, #10028) +py_cobject_sources(#11677, 0) +py_cobjectnames(#11677, "b'_io'") +py_citems(#11668, 8, #11677) +#11678 = @"C_bytes$bb60618a3277db614bb1bf9d31e93549d8a807e6" +py_cobjects(#11678) +py_cobjecttypes(#11678, #10028) +py_cobject_sources(#11678, 0) +py_cobjectnames(#11678, "b'_locale'") +py_citems(#11668, 9, #11678) +#11679 = @"C_bytes$d1a7b4357d59cd4c4148040383196bab2ccf8555" +py_cobjects(#11679) +py_cobjecttypes(#11679, #10028) +py_cobject_sources(#11679, 0) +py_cobjectnames(#11679, "b'_md5'") +py_citems(#11668, 10, #11679) +#11680 = @"C_bytes$24052cebfe42e91a49777122be7c3f21c156a0ab" +py_cobjects(#11680) +py_cobjecttypes(#11680, #10028) +py_cobject_sources(#11680, 0) +py_cobjectnames(#11680, "b'_random'") +py_citems(#11668, 11, #11680) +#11681 = @"C_bytes$0762689429334731c7dac22f446b8c834bae8f7f" +py_cobjects(#11681) +py_cobjecttypes(#11681, #10028) +py_cobject_sources(#11681, 0) +py_cobjectnames(#11681, "b'_sha'") +py_citems(#11668, 12, #11681) +#11682 = @"C_bytes$d75584fc276a600d1be0adf40497ceb4424302e3" +py_cobjects(#11682) +py_cobjecttypes(#11682, #10028) +py_cobject_sources(#11682, 0) +py_cobjectnames(#11682, "b'_sha256'") +py_citems(#11668, 13, #11682) +#11683 = @"C_bytes$b3c56529fe2d273d138f9dab908f168f0ab71f90" +py_cobjects(#11683) +py_cobjecttypes(#11683, #10028) +py_cobject_sources(#11683, 0) +py_cobjectnames(#11683, "b'_sha512'") +py_citems(#11668, 14, #11683) +#11684 = @"C_bytes$fb6e6f2753b5318a7c94409f2d24464dc2a501e6" +py_cobjects(#11684) +py_cobjecttypes(#11684, #10028) +py_cobject_sources(#11684, 0) +py_cobjectnames(#11684, "b'_socket'") +py_citems(#11668, 15, #11684) +#11685 = @"C_bytes$c85d64f512bebf46e4b005eac3b2a4d793990c41" +py_cobjects(#11685) +py_cobjecttypes(#11685, #10028) +py_cobject_sources(#11685, 0) +py_cobjectnames(#11685, "b'_sre'") +py_citems(#11668, 16, #11685) +#11686 = @"C_bytes$20c7ae9aa8121530a5f9beadc347387ffc7c5047" +py_cobjects(#11686) +py_cobjecttypes(#11686, #10028) +py_cobject_sources(#11686, 0) +py_cobjectnames(#11686, "b'_struct'") +py_citems(#11668, 17, #11686) +#11687 = @"C_bytes$25d3812809eac256ba6e983daf04ba4514944b98" +py_cobjects(#11687) +py_cobjecttypes(#11687, #10028) +py_cobject_sources(#11687, 0) +py_cobjectnames(#11687, "b'_symtable'") +py_citems(#11668, 18, #11687) +#11688 = @"C_bytes$cad00083c035d5c5a9920f1d6ab0aa725d6b2a62" +py_cobjects(#11688) +py_cobjecttypes(#11688, #10028) +py_cobject_sources(#11688, 0) +py_cobjectnames(#11688, "b'_warnings'") +py_citems(#11668, 19, #11688) +#11689 = @"C_bytes$5b3590706710d2ebcfefaee3bcd9cb5d86d57638" +py_cobjects(#11689) +py_cobjecttypes(#11689, #10028) +py_cobject_sources(#11689, 0) +py_cobjectnames(#11689, "b'_weakref'") +py_citems(#11668, 20, #11689) +#11690 = @"C_bytes$19edc1210777ba4d45049c29280d9cc5e1064c25" +py_cobjects(#11690) +py_cobjecttypes(#11690, #10028) +py_cobject_sources(#11690, 0) +py_cobjectnames(#11690, "b'array'") +py_citems(#11668, 21, #11690) +#11691 = @"C_bytes$e18849f6ba6a1716be9658bf2e81dabf5cc87e08" +py_cobjects(#11691) +py_cobjecttypes(#11691, #10028) +py_cobject_sources(#11691, 0) +py_cobjectnames(#11691, "b'binascii'") +py_citems(#11668, 22, #11691) +#11692 = @"C_bytes$c23743518188a296469ec72037c11849dd828f2e" +py_cobjects(#11692) +py_cobjecttypes(#11692, #10028) +py_cobject_sources(#11692, 0) +py_cobjectnames(#11692, "b'cPickle'") +py_citems(#11668, 23, #11692) +#11693 = @"C_bytes$238fb40c01b6c32b54e6cf6c6535669b4bfe3fd6" +py_cobjects(#11693) +py_cobjecttypes(#11693, #10028) +py_cobject_sources(#11693, 0) +py_cobjectnames(#11693, "b'cStringIO'") +py_citems(#11668, 24, #11693) +#11694 = @"C_bytes$db9c549ff758cb4652abd88be911451e1d14b690" +py_cobjects(#11694) +py_cobjecttypes(#11694, #10028) +py_cobject_sources(#11694, 0) +py_cobjectnames(#11694, "b'cmath'") +py_citems(#11668, 25, #11694) +#11695 = @"C_bytes$89ffad089c042f31dcc81269da38bef3ca44ab1f" +py_cobjects(#11695) +py_cobjecttypes(#11695, #10028) +py_cobject_sources(#11695, 0) +py_cobjectnames(#11695, "b'datetime'") +py_citems(#11668, 26, #11695) +#11696 = @"C_bytes$2798a19580337f0834e0b47679f7519778234ff2" +py_cobjects(#11696) +py_cobjecttypes(#11696, #10028) +py_cobject_sources(#11696, 0) +py_cobjectnames(#11696, "b'errno'") +py_citems(#11668, 27, #11696) +#11697 = @"C_bytes$be51ea0d2df953559db847ba84b885b258389873" +py_cobjects(#11697) +py_cobjecttypes(#11697, #10028) +py_cobject_sources(#11697, 0) +py_cobjectnames(#11697, "b'exceptions'") +py_citems(#11668, 28, #11697) +#11698 = @"C_bytes$6937c060e9afe977761075e2fefb163b45e0f03f" +py_cobjects(#11698) +py_cobjecttypes(#11698, #10028) +py_cobject_sources(#11698, 0) +py_cobjectnames(#11698, "b'fcntl'") +py_citems(#11668, 29, #11698) +#11699 = @"C_bytes$ec6d9083d77b970950e8340ff01d89108b346e38" +py_cobjects(#11699) +py_cobjecttypes(#11699, #10028) +py_cobject_sources(#11699, 0) +py_cobjectnames(#11699, "b'gc'") +py_citems(#11668, 30, #11699) +#11700 = @"C_bytes$6567df49fab5b0928c13f561b7181fed734b915d" +py_cobjects(#11700) +py_cobjecttypes(#11700, #10028) +py_cobject_sources(#11700, 0) +py_cobjectnames(#11700, "b'grp'") +py_citems(#11668, 31, #11700) +#11701 = @"C_bytes$7ebbccbf2a9ebaa9338648798afddf195f6f1b63" +py_cobjects(#11701) +py_cobjecttypes(#11701, #10028) +py_cobject_sources(#11701, 0) +py_cobjectnames(#11701, "b'imp'") +py_citems(#11668, 32, #11701) +#11702 = @"C_bytes$9e9cf1097fbb8c0af843641c0e32781c81ce4931" +py_cobjects(#11702) +py_cobjecttypes(#11702, #10028) +py_cobject_sources(#11702, 0) +py_cobjectnames(#11702, "b'itertools'") +py_citems(#11668, 33, #11702) +#11703 = @"C_bytes$4ab93184b1744659f5162beef22b666b5411ac26" +py_cobjects(#11703) +py_cobjecttypes(#11703, #10028) +py_cobject_sources(#11703, 0) +py_cobjectnames(#11703, "b'marshal'") +py_citems(#11668, 34, #11703) +#11704 = @"C_bytes$7a488390a939c4795cc1a801e51751d5f25d800d" +py_cobjects(#11704) +py_cobjecttypes(#11704, #10028) +py_cobject_sources(#11704, 0) +py_cobjectnames(#11704, "b'math'") +py_citems(#11668, 35, #11704) +#11705 = @"C_bytes$fe96dd39756ac41b74283a9292652d366d73931f" +py_cobjects(#11705) +py_cobjecttypes(#11705, #10028) +py_cobject_sources(#11705, 0) +py_cobjectnames(#11705, "b'operator'") +py_citems(#11668, 36, #11705) +#11706 = @"C_bytes$bfdba57c2ea525d68cd766e6ddc87ae634e2c0ff" +py_cobjects(#11706) +py_cobjecttypes(#11706, #10028) +py_cobject_sources(#11706, 0) +py_cobjectnames(#11706, "b'posix'") +py_citems(#11668, 37, #11706) +#11707 = @"C_bytes$37fa265330ad83eaa879efb1e2db6380896cf639" +py_cobjects(#11707) +py_cobjecttypes(#11707, #10028) +py_cobject_sources(#11707, 0) +py_cobjectnames(#11707, "b'pwd'") +py_citems(#11668, 38, #11707) +#11708 = @"C_bytes$81448fe273247b533b9f018e96c158cab7901247" +py_cobjects(#11708) +py_cobjecttypes(#11708, #10028) +py_cobject_sources(#11708, 0) +py_cobjectnames(#11708, "b'select'") +py_citems(#11668, 39, #11708) +#11709 = @"C_bytes$36ab4aaa56c8fea2a7afdfa5b5fcd28c9e178754" +py_cobjects(#11709) +py_cobjecttypes(#11709, #10028) +py_cobject_sources(#11709, 0) +py_cobjectnames(#11709, "b'signal'") +py_citems(#11668, 40, #11709) +#11710 = @"C_bytes$1c4930bf21779b36a222bcf4a7b2ef9f901c7ea5" +py_cobjects(#11710) +py_cobjecttypes(#11710, #10028) +py_cobject_sources(#11710, 0) +py_cobjectnames(#11710, "b'spwd'") +py_citems(#11668, 41, #11710) +#11711 = @"C_bytes$3eb8d4a57d237be3b4f016fc859f173c6358a3a9" +py_cobjects(#11711) +py_cobjecttypes(#11711, #10028) +py_cobject_sources(#11711, 0) +py_cobjectnames(#11711, "b'strop'") +py_citems(#11668, 42, #11711) +#11712 = @"C_bytes$b4c56ee8d2854166dec66644f541b85247105b2c" +py_cobjects(#11712) +py_cobjecttypes(#11712, #10028) +py_cobject_sources(#11712, 0) +py_cobjectnames(#11712, "b'sys'") +py_citems(#11668, 43, #11712) +#11713 = @"C_bytes$e0543ba22ccc80a5d2365241ee2adb754f80be19" +py_cobjects(#11713) +py_cobjecttypes(#11713, #10028) +py_cobject_sources(#11713, 0) +py_cobjectnames(#11713, "b'syslog'") +py_citems(#11668, 44, #11713) +#11714 = @"C_bytes$c283e375ed8cebf3b8d1b5101fd51bb522961656" +py_cobjects(#11714) +py_cobjecttypes(#11714, #10028) +py_cobject_sources(#11714, 0) +py_cobjectnames(#11714, "b'thread'") +py_citems(#11668, 45, #11714) +#11715 = @"C_bytes$714eea0f4c980736bde0065fe73f573487f08e3a" +py_cobjects(#11715) +py_cobjecttypes(#11715, #10028) +py_cobject_sources(#11715, 0) +py_cobjectnames(#11715, "b'time'") +py_citems(#11668, 46, #11715) +#11716 = @"C_bytes$61e641afa9068a62e8107e67e70787c7e3dadd3f" +py_cobjects(#11716) +py_cobjecttypes(#11716, #10028) +py_cobject_sources(#11716, 0) +py_cobjectnames(#11716, "b'unicodedata'") +py_citems(#11668, 47, #11716) +#11717 = @"C_bytes$176b85ad73d71f4fd2df7eb79cf4950d1b4516b4" +py_cobjects(#11717) +py_cobjecttypes(#11717, #10028) +py_cobject_sources(#11717, 0) +py_cobjectnames(#11717, "b'xxsubtype'") +py_citems(#11668, 48, #11717) +#11718 = @"C_bytes$458148110bacc19758d7f559121f6768feb64dd0" +py_cobjects(#11718) +py_cobjecttypes(#11718, #10028) +py_cobject_sources(#11718, 0) +py_cobjectnames(#11718, "b'zipimport'") +py_citems(#11668, 49, #11718) +#11719 = @"C_bytes$57968f12798767ae5da8b15a0c383ad79d0f338b" +py_cobjects(#11719) +py_cobjecttypes(#11719, #10028) +py_cobject_sources(#11719, 0) +py_cobjectnames(#11719, "b'zlib'") +py_citems(#11668, 50, #11719) +py_cobjectnames(#11668, "object") +py_cmembers_versioned(#11643, "builtin_module_names", #11668, "2") +#11720 = @"C_bytes$4502229742dda5345d35a1c216dfadb1a96b3c68" +py_cobjects(#11720) +py_cobjecttypes(#11720, #10028) +py_cobject_sources(#11720, 0) +py_cobjectnames(#11720, "b'little'") +py_cmembers_versioned(#11643, "byteorder", #11720, "2") +#11721 = @"C_module$sys$2call_tracing" +py_cobjects(#11721) +py_cobjecttypes(#11721, #10075) +py_cobject_sources(#11721, 0) +py_cobjectnames(#11721, "call_tracing") +py_cmembers_versioned(#11643, "call_tracing", #11721, "2") +#11722 = @"C_module$sys$2callstats" +py_cobjects(#11722) +py_cobjecttypes(#11722, #10075) +py_cobject_sources(#11722, 0) +py_cobjectnames(#11722, "callstats") +py_cmembers_versioned(#11643, "callstats", #11722, "2") +#11723 = @"C_bytes$3729d369b12aaead877cfb632b4f72b7fa82ec27" +py_cobjects(#11723) +py_cobjecttypes(#11723, #10028) +py_cobject_sources(#11723, 0) +py_cobjectnames(#11723, "b'Copyright (c) 2001-2020 Python Software Foundation. +All Rights Reserved. + +Copyright (c) 2000 BeOpen.com. +All Rights Reserved. + +Copyright (c) 1995-2001 Corporation for National Research Initiatives. +All Rights Reserved. + +Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam. +All Rights Reserved.'") +py_cmembers_versioned(#11643, "copyright", #11723, "2") +py_cmembers_versioned(#11643, "displayhook", #11644, "2") +py_cmembers_versioned(#11643, "dont_write_bytecode", #10644, "2") +#11724 = @"C_module$sys$2exc_clear" +py_cobjects(#11724) +py_cobjecttypes(#11724, #10075) +py_cobject_sources(#11724, 0) +py_cobjectnames(#11724, "exc_clear") +py_cmembers_versioned(#11643, "exc_clear", #11724, "2") +#11725 = @"C_module$sys$2exc_info" +py_cobjects(#11725) +py_cobjecttypes(#11725, #10075) +py_cobject_sources(#11725, 0) +py_cobjectnames(#11725, "exc_info") +py_cmembers_versioned(#11643, "exc_info", #11725, "2") +py_cmembers_versioned(#11643, "excepthook", #11646, "2") +#11726 = @"C_bytes$5c0e77c46be77719bc1c0a5ec9c64b94d2a2e50c" +py_cobjects(#11726) +py_cobjecttypes(#11726, #10028) +py_cobject_sources(#11726, 0) +py_cobjectnames(#11726, "b'/usr'") +py_cmembers_versioned(#11643, "exec_prefix", #11726, "2") +#11727 = @"C_bytes$ff88ec09d47f04c9e62b5e5731d143c909d2b88f" +py_cobjects(#11727) +py_cobjecttypes(#11727, #10028) +py_cobject_sources(#11727, 0) +py_cobjectnames(#11727, "b'/usr/bin/python2'") +py_cmembers_versioned(#11643, "executable", #11727, "2") +#11728 = @"C_module$sys$2exit" +py_cobjects(#11728) +py_cobjecttypes(#11728, #10075) +py_cobject_sources(#11728, 0) +py_cobjectnames(#11728, "exit") +py_cmembers_versioned(#11643, "exit", #11728, "2") +#11729 = @"C_module$sys$2exitfunc" +py_cobjects(#11729) +py_cobjecttypes(#11729, #10000) +py_cobject_sources(#11729, 0) +py_cobjectnames(#11729, "_run_exitfuncs") +py_cmembers_versioned(#11643, "exitfunc", #11729, "2") +#11730 = @"C_module$sys$2flags" +#11731 = @"C_type$sys.flags" +py_cobjects(#11731) +py_cobjecttypes(#11731, #10001) +py_cobject_sources(#11731, 0) +#11732 = @"C_type$sys.flags$2__add__" +py_cobjects(#11732) +py_cobjecttypes(#11732, #10005) +py_cobject_sources(#11732, 0) +py_cobjectnames(#11732, "__add__") +py_cmembers_versioned(#11731, "__add__", #11732, "2") +#11733 = @"C_type$sys.flags$2__contains__" +py_cobjects(#11733) +py_cobjecttypes(#11733, #10005) +py_cobject_sources(#11733, 0) +py_cobjectnames(#11733, "__contains__") +py_cmembers_versioned(#11731, "__contains__", #11733, "2") +#11734 = @"C_bytes$c5f0683e524addae0a4a9017696f4f973c26b979" +py_cobjects(#11734) +py_cobjecttypes(#11734, #10028) +py_cobject_sources(#11734, 0) +py_cobjectnames(#11734, "b'sys.flags + +Flags provided through command line arguments or environment vars.'") +py_cmembers_versioned(#11731, "__doc__", #11734, "2") +#11735 = @"C_type$sys.flags$2__eq__" +py_cobjects(#11735) +py_cobjecttypes(#11735, #10005) +py_cobject_sources(#11735, 0) +py_cobjectnames(#11735, "__eq__") +py_cmembers_versioned(#11731, "__eq__", #11735, "2") +#11736 = @"C_type$sys.flags$2__ge__" +py_cobjects(#11736) +py_cobjecttypes(#11736, #10005) +py_cobject_sources(#11736, 0) +py_cobjectnames(#11736, "__ge__") +py_cmembers_versioned(#11731, "__ge__", #11736, "2") +#11737 = @"C_type$sys.flags$2__getitem__" +py_cobjects(#11737) +py_cobjecttypes(#11737, #10005) +py_cobject_sources(#11737, 0) +py_cobjectnames(#11737, "__getitem__") +py_cmembers_versioned(#11731, "__getitem__", #11737, "2") +#11738 = @"C_type$sys.flags$2__getslice__" +py_cobjects(#11738) +py_cobjecttypes(#11738, #10005) +py_cobject_sources(#11738, 0) +py_cobjectnames(#11738, "__getslice__") +py_cmembers_versioned(#11731, "__getslice__", #11738, "2") +#11739 = @"C_type$sys.flags$2__gt__" +py_cobjects(#11739) +py_cobjecttypes(#11739, #10005) +py_cobject_sources(#11739, 0) +py_cobjectnames(#11739, "__gt__") +py_cmembers_versioned(#11731, "__gt__", #11739, "2") +#11740 = @"C_type$sys.flags$2__hash__" +py_cobjects(#11740) +py_cobjecttypes(#11740, #10005) +py_cobject_sources(#11740, 0) +py_cobjectnames(#11740, "__hash__") +py_cmembers_versioned(#11731, "__hash__", #11740, "2") +#11741 = @"C_type$sys.flags$2__le__" +py_cobjects(#11741) +py_cobjecttypes(#11741, #10005) +py_cobject_sources(#11741, 0) +py_cobjectnames(#11741, "__le__") +py_cmembers_versioned(#11731, "__le__", #11741, "2") +#11742 = @"C_type$sys.flags$2__len__" +py_cobjects(#11742) +py_cobjecttypes(#11742, #10005) +py_cobject_sources(#11742, 0) +py_cobjectnames(#11742, "__len__") +py_cmembers_versioned(#11731, "__len__", #11742, "2") +#11743 = @"C_type$sys.flags$2__lt__" +py_cobjects(#11743) +py_cobjecttypes(#11743, #10005) +py_cobject_sources(#11743, 0) +py_cobjectnames(#11743, "__lt__") +py_cmembers_versioned(#11731, "__lt__", #11743, "2") +#11744 = @"C_type$sys.flags$2__mul__" +py_cobjects(#11744) +py_cobjecttypes(#11744, #10005) +py_cobject_sources(#11744, 0) +py_cobjectnames(#11744, "__mul__") +py_cmembers_versioned(#11731, "__mul__", #11744, "2") +#11745 = @"C_type$sys.flags$2__ne__" +py_cobjects(#11745) +py_cobjecttypes(#11745, #10005) +py_cobject_sources(#11745, 0) +py_cobjectnames(#11745, "__ne__") +py_cmembers_versioned(#11731, "__ne__", #11745, "2") +#11746 = @"C_type$sys.flags$2__new__" +py_cobjects(#11746) +py_cobjecttypes(#11746, #10075) +py_cobject_sources(#11746, 0) +py_cobjectnames(#11746, "__new__") +py_cmembers_versioned(#11731, "__new__", #11746, "2") +#11747 = @"C_type$sys.flags$2__reduce__" +py_cobjects(#11747) +py_cobjecttypes(#11747, #10034) +py_cobject_sources(#11747, 0) +py_cobjectnames(#11747, "__reduce__") +py_cmembers_versioned(#11731, "__reduce__", #11747, "2") +#11748 = @"C_type$sys.flags$2__repr__" +py_cobjects(#11748) +py_cobjecttypes(#11748, #10005) +py_cobject_sources(#11748, 0) +py_cobjectnames(#11748, "__repr__") +py_cmembers_versioned(#11731, "__repr__", #11748, "2") +#11749 = @"C_type$sys.flags$2__rmul__" +py_cobjects(#11749) +py_cobjecttypes(#11749, #10005) +py_cobject_sources(#11749, 0) +py_cobjectnames(#11749, "__rmul__") +py_cmembers_versioned(#11731, "__rmul__", #11749, "2") +#11750 = @"C_type$sys.flags$2bytes_warning" +py_cobjects(#11750) +py_cobjecttypes(#11750, #10045) +py_cobject_sources(#11750, 0) +py_cobjectnames(#11750, "bytes_warning") +py_cmembers_versioned(#11731, "bytes_warning", #11750, "2") +#11751 = @"C_type$sys.flags$2debug" +py_cobjects(#11751) +py_cobjecttypes(#11751, #10045) +py_cobject_sources(#11751, 0) +py_cobjectnames(#11751, "debug") +py_cmembers_versioned(#11731, "debug", #11751, "2") +#11752 = @"C_type$sys.flags$2division_new" +py_cobjects(#11752) +py_cobjecttypes(#11752, #10045) +py_cobject_sources(#11752, 0) +py_cobjectnames(#11752, "division_new") +py_cmembers_versioned(#11731, "division_new", #11752, "2") +#11753 = @"C_type$sys.flags$2division_warning" +py_cobjects(#11753) +py_cobjecttypes(#11753, #10045) +py_cobject_sources(#11753, 0) +py_cobjectnames(#11753, "division_warning") +py_cmembers_versioned(#11731, "division_warning", #11753, "2") +#11754 = @"C_type$sys.flags$2dont_write_bytecode" +py_cobjects(#11754) +py_cobjecttypes(#11754, #10045) +py_cobject_sources(#11754, 0) +py_cobjectnames(#11754, "dont_write_bytecode") +py_cmembers_versioned(#11731, "dont_write_bytecode", #11754, "2") +#11755 = @"C_type$sys.flags$2hash_randomization" +py_cobjects(#11755) +py_cobjecttypes(#11755, #10045) +py_cobject_sources(#11755, 0) +py_cobjectnames(#11755, "hash_randomization") +py_cmembers_versioned(#11731, "hash_randomization", #11755, "2") +#11756 = @"C_type$sys.flags$2ignore_environment" +py_cobjects(#11756) +py_cobjecttypes(#11756, #10045) +py_cobject_sources(#11756, 0) +py_cobjectnames(#11756, "ignore_environment") +py_cmembers_versioned(#11731, "ignore_environment", #11756, "2") +#11757 = @"C_type$sys.flags$2inspect" +py_cobjects(#11757) +py_cobjecttypes(#11757, #10045) +py_cobject_sources(#11757, 0) +py_cobjectnames(#11757, "inspect") +py_cmembers_versioned(#11731, "inspect", #11757, "2") +#11758 = @"C_type$sys.flags$2interactive" +py_cobjects(#11758) +py_cobjecttypes(#11758, #10045) +py_cobject_sources(#11758, 0) +py_cobjectnames(#11758, "interactive") +py_cmembers_versioned(#11731, "interactive", #11758, "2") +#11759 = @"C_int$16" +py_cobjects(#11759) +py_cobjecttypes(#11759, #10449) +py_cobject_sources(#11759, 0) +py_cobjectnames(#11759, "16") +py_cmembers_versioned(#11731, "n_fields", #11759, "2") +py_cmembers_versioned(#11731, "n_sequence_fields", #11759, "2") +#11760 = @"C_int$0" +py_cobjects(#11760) +py_cobjecttypes(#11760, #10449) +py_cobject_sources(#11760, 0) +py_cobjectnames(#11760, "0") +py_cmembers_versioned(#11731, "n_unnamed_fields", #11760, "2") +#11761 = @"C_type$sys.flags$2no_site" +py_cobjects(#11761) +py_cobjecttypes(#11761, #10045) +py_cobject_sources(#11761, 0) +py_cobjectnames(#11761, "no_site") +py_cmembers_versioned(#11731, "no_site", #11761, "2") +#11762 = @"C_type$sys.flags$2no_user_site" +py_cobjects(#11762) +py_cobjecttypes(#11762, #10045) +py_cobject_sources(#11762, 0) +py_cobjectnames(#11762, "no_user_site") +py_cmembers_versioned(#11731, "no_user_site", #11762, "2") +#11763 = @"C_type$sys.flags$2optimize" +py_cobjects(#11763) +py_cobjecttypes(#11763, #10045) +py_cobject_sources(#11763, 0) +py_cobjectnames(#11763, "optimize") +py_cmembers_versioned(#11731, "optimize", #11763, "2") +#11764 = @"C_type$sys.flags$2py3k_warning" +py_cobjects(#11764) +py_cobjecttypes(#11764, #10045) +py_cobject_sources(#11764, 0) +py_cobjectnames(#11764, "py3k_warning") +py_cmembers_versioned(#11731, "py3k_warning", #11764, "2") +#11765 = @"C_type$sys.flags$2tabcheck" +py_cobjects(#11765) +py_cobjecttypes(#11765, #10045) +py_cobject_sources(#11765, 0) +py_cobjectnames(#11765, "tabcheck") +py_cmembers_versioned(#11731, "tabcheck", #11765, "2") +#11766 = @"C_type$sys.flags$2unicode" +py_cobjects(#11766) +py_cobjecttypes(#11766, #10045) +py_cobject_sources(#11766, 0) +py_cobjectnames(#11766, "unicode") +py_cmembers_versioned(#11731, "unicode", #11766, "2") +#11767 = @"C_type$sys.flags$2verbose" +py_cobjects(#11767) +py_cobjecttypes(#11767, #10045) +py_cobject_sources(#11767, 0) +py_cobjectnames(#11767, "verbose") +py_cmembers_versioned(#11731, "verbose", #11767, "2") +py_cmembers_versioned(#11731, ".super.", #10021, "2") +py_cobjectnames(#11731, "sys.flags") +py_cobjects(#11730) +py_cobjecttypes(#11730, #11731) +py_cobject_sources(#11730, 0) +py_cobjectnames(#11730, "object") +py_cmembers_versioned(#11643, "flags", #11730, "2") +#11768 = @"C_module$sys$2float_info" +#11769 = @"C_type$sys.float_info" +py_cobjects(#11769) +py_cobjecttypes(#11769, #10001) +py_cobject_sources(#11769, 0) +#11770 = @"C_type$sys.float_info$2__add__" +py_cobjects(#11770) +py_cobjecttypes(#11770, #10005) +py_cobject_sources(#11770, 0) +py_cobjectnames(#11770, "__add__") +py_cmembers_versioned(#11769, "__add__", #11770, "2") +#11771 = @"C_type$sys.float_info$2__contains__" +py_cobjects(#11771) +py_cobjecttypes(#11771, #10005) +py_cobject_sources(#11771, 0) +py_cobjectnames(#11771, "__contains__") +py_cmembers_versioned(#11769, "__contains__", #11771, "2") +#11772 = @"C_bytes$935b023aceb2b524c5055152b512bae674cf28fd" +py_cobjects(#11772) +py_cobjecttypes(#11772, #10028) +py_cobject_sources(#11772, 0) +py_cobjectnames(#11772, "b'sys.float_info + +A structseq holding information about the float type. It contains low level +information about the precision and internal representation. Please study +your system's :file:`float.h` for more information.'") +py_cmembers_versioned(#11769, "__doc__", #11772, "2") +#11773 = @"C_type$sys.float_info$2__eq__" +py_cobjects(#11773) +py_cobjecttypes(#11773, #10005) +py_cobject_sources(#11773, 0) +py_cobjectnames(#11773, "__eq__") +py_cmembers_versioned(#11769, "__eq__", #11773, "2") +#11774 = @"C_type$sys.float_info$2__ge__" +py_cobjects(#11774) +py_cobjecttypes(#11774, #10005) +py_cobject_sources(#11774, 0) +py_cobjectnames(#11774, "__ge__") +py_cmembers_versioned(#11769, "__ge__", #11774, "2") +#11775 = @"C_type$sys.float_info$2__getitem__" +py_cobjects(#11775) +py_cobjecttypes(#11775, #10005) +py_cobject_sources(#11775, 0) +py_cobjectnames(#11775, "__getitem__") +py_cmembers_versioned(#11769, "__getitem__", #11775, "2") +#11776 = @"C_type$sys.float_info$2__getslice__" +py_cobjects(#11776) +py_cobjecttypes(#11776, #10005) +py_cobject_sources(#11776, 0) +py_cobjectnames(#11776, "__getslice__") +py_cmembers_versioned(#11769, "__getslice__", #11776, "2") +#11777 = @"C_type$sys.float_info$2__gt__" +py_cobjects(#11777) +py_cobjecttypes(#11777, #10005) +py_cobject_sources(#11777, 0) +py_cobjectnames(#11777, "__gt__") +py_cmembers_versioned(#11769, "__gt__", #11777, "2") +#11778 = @"C_type$sys.float_info$2__hash__" +py_cobjects(#11778) +py_cobjecttypes(#11778, #10005) +py_cobject_sources(#11778, 0) +py_cobjectnames(#11778, "__hash__") +py_cmembers_versioned(#11769, "__hash__", #11778, "2") +#11779 = @"C_type$sys.float_info$2__le__" +py_cobjects(#11779) +py_cobjecttypes(#11779, #10005) +py_cobject_sources(#11779, 0) +py_cobjectnames(#11779, "__le__") +py_cmembers_versioned(#11769, "__le__", #11779, "2") +#11780 = @"C_type$sys.float_info$2__len__" +py_cobjects(#11780) +py_cobjecttypes(#11780, #10005) +py_cobject_sources(#11780, 0) +py_cobjectnames(#11780, "__len__") +py_cmembers_versioned(#11769, "__len__", #11780, "2") +#11781 = @"C_type$sys.float_info$2__lt__" +py_cobjects(#11781) +py_cobjecttypes(#11781, #10005) +py_cobject_sources(#11781, 0) +py_cobjectnames(#11781, "__lt__") +py_cmembers_versioned(#11769, "__lt__", #11781, "2") +#11782 = @"C_type$sys.float_info$2__mul__" +py_cobjects(#11782) +py_cobjecttypes(#11782, #10005) +py_cobject_sources(#11782, 0) +py_cobjectnames(#11782, "__mul__") +py_cmembers_versioned(#11769, "__mul__", #11782, "2") +#11783 = @"C_type$sys.float_info$2__ne__" +py_cobjects(#11783) +py_cobjecttypes(#11783, #10005) +py_cobject_sources(#11783, 0) +py_cobjectnames(#11783, "__ne__") +py_cmembers_versioned(#11769, "__ne__", #11783, "2") +#11784 = @"C_type$sys.float_info$2__new__" +py_cobjects(#11784) +py_cobjecttypes(#11784, #10075) +py_cobject_sources(#11784, 0) +py_cobjectnames(#11784, "__new__") +py_cmembers_versioned(#11769, "__new__", #11784, "2") +#11785 = @"C_type$sys.float_info$2__reduce__" +py_cobjects(#11785) +py_cobjecttypes(#11785, #10034) +py_cobject_sources(#11785, 0) +py_cobjectnames(#11785, "__reduce__") +py_cmembers_versioned(#11769, "__reduce__", #11785, "2") +#11786 = @"C_type$sys.float_info$2__repr__" +py_cobjects(#11786) +py_cobjecttypes(#11786, #10005) +py_cobject_sources(#11786, 0) +py_cobjectnames(#11786, "__repr__") +py_cmembers_versioned(#11769, "__repr__", #11786, "2") +#11787 = @"C_type$sys.float_info$2__rmul__" +py_cobjects(#11787) +py_cobjecttypes(#11787, #10005) +py_cobject_sources(#11787, 0) +py_cobjectnames(#11787, "__rmul__") +py_cmembers_versioned(#11769, "__rmul__", #11787, "2") +#11788 = @"C_type$sys.float_info$2dig" +py_cobjects(#11788) +py_cobjecttypes(#11788, #10045) +py_cobject_sources(#11788, 0) +py_cobjectnames(#11788, "dig") +py_cmembers_versioned(#11769, "dig", #11788, "2") +#11789 = @"C_type$sys.float_info$2epsilon" +py_cobjects(#11789) +py_cobjecttypes(#11789, #10045) +py_cobject_sources(#11789, 0) +py_cobjectnames(#11789, "epsilon") +py_cmembers_versioned(#11769, "epsilon", #11789, "2") +#11790 = @"C_type$sys.float_info$2mant_dig" +py_cobjects(#11790) +py_cobjecttypes(#11790, #10045) +py_cobject_sources(#11790, 0) +py_cobjectnames(#11790, "mant_dig") +py_cmembers_versioned(#11769, "mant_dig", #11790, "2") +#11791 = @"C_type$sys.float_info$2max" +py_cobjects(#11791) +py_cobjecttypes(#11791, #10045) +py_cobject_sources(#11791, 0) +py_cobjectnames(#11791, "max") +py_cmembers_versioned(#11769, "max", #11791, "2") +#11792 = @"C_type$sys.float_info$2max_10_exp" +py_cobjects(#11792) +py_cobjecttypes(#11792, #10045) +py_cobject_sources(#11792, 0) +py_cobjectnames(#11792, "max_10_exp") +py_cmembers_versioned(#11769, "max_10_exp", #11792, "2") +#11793 = @"C_type$sys.float_info$2max_exp" +py_cobjects(#11793) +py_cobjecttypes(#11793, #10045) +py_cobject_sources(#11793, 0) +py_cobjectnames(#11793, "max_exp") +py_cmembers_versioned(#11769, "max_exp", #11793, "2") +#11794 = @"C_type$sys.float_info$2min" +py_cobjects(#11794) +py_cobjecttypes(#11794, #10045) +py_cobject_sources(#11794, 0) +py_cobjectnames(#11794, "min") +py_cmembers_versioned(#11769, "min", #11794, "2") +#11795 = @"C_type$sys.float_info$2min_10_exp" +py_cobjects(#11795) +py_cobjecttypes(#11795, #10045) +py_cobject_sources(#11795, 0) +py_cobjectnames(#11795, "min_10_exp") +py_cmembers_versioned(#11769, "min_10_exp", #11795, "2") +#11796 = @"C_type$sys.float_info$2min_exp" +py_cobjects(#11796) +py_cobjecttypes(#11796, #10045) +py_cobject_sources(#11796, 0) +py_cobjectnames(#11796, "min_exp") +py_cmembers_versioned(#11769, "min_exp", #11796, "2") +#11797 = @"C_int$11" +py_cobjects(#11797) +py_cobjecttypes(#11797, #10449) +py_cobject_sources(#11797, 0) +py_cobjectnames(#11797, "11") +py_cmembers_versioned(#11769, "n_fields", #11797, "2") +py_cmembers_versioned(#11769, "n_sequence_fields", #11797, "2") +py_cmembers_versioned(#11769, "n_unnamed_fields", #11760, "2") +#11798 = @"C_type$sys.float_info$2radix" +py_cobjects(#11798) +py_cobjecttypes(#11798, #10045) +py_cobject_sources(#11798, 0) +py_cobjectnames(#11798, "radix") +py_cmembers_versioned(#11769, "radix", #11798, "2") +#11799 = @"C_type$sys.float_info$2rounds" +py_cobjects(#11799) +py_cobjecttypes(#11799, #10045) +py_cobject_sources(#11799, 0) +py_cobjectnames(#11799, "rounds") +py_cmembers_versioned(#11769, "rounds", #11799, "2") +py_cmembers_versioned(#11769, ".super.", #10021, "2") +py_cobjectnames(#11769, "sys.float_info") +py_cobjects(#11768) +py_cobjecttypes(#11768, #11769) +py_cobject_sources(#11768, 0) +py_cobjectnames(#11768, "object") +py_cmembers_versioned(#11643, "float_info", #11768, "2") +#11800 = @"C_bytes$a0f4ea7d91495df92bbac2e2149dfb850fe81396" +py_cobjects(#11800) +py_cobjecttypes(#11800, #10028) +py_cobject_sources(#11800, 0) +py_cobjectnames(#11800, "b'short'") +py_cmembers_versioned(#11643, "float_repr_style", #11800, "2") +#11801 = @"C_module$sys$2getcheckinterval" +py_cobjects(#11801) +py_cobjecttypes(#11801, #10075) +py_cobject_sources(#11801, 0) +py_cobjectnames(#11801, "getcheckinterval") +py_cmembers_versioned(#11643, "getcheckinterval", #11801, "2") +#11802 = @"C_module$sys$2getdefaultencoding" +py_cobjects(#11802) +py_cobjecttypes(#11802, #10075) +py_cobject_sources(#11802, 0) +py_cobjectnames(#11802, "getdefaultencoding") +py_cmembers_versioned(#11643, "getdefaultencoding", #11802, "2") +#11803 = @"C_module$sys$2getdlopenflags" +py_cobjects(#11803) +py_cobjecttypes(#11803, #10075) +py_cobject_sources(#11803, 0) +py_cobjectnames(#11803, "getdlopenflags") +py_cmembers_versioned(#11643, "getdlopenflags", #11803, "2") +#11804 = @"C_module$sys$2getfilesystemencoding" +py_cobjects(#11804) +py_cobjecttypes(#11804, #10075) +py_cobject_sources(#11804, 0) +py_cobjectnames(#11804, "getfilesystemencoding") +py_cmembers_versioned(#11643, "getfilesystemencoding", #11804, "2") +#11805 = @"C_module$sys$2getprofile" +py_cobjects(#11805) +py_cobjecttypes(#11805, #10075) +py_cobject_sources(#11805, 0) +py_cobjectnames(#11805, "getprofile") +py_cmembers_versioned(#11643, "getprofile", #11805, "2") +#11806 = @"C_module$sys$2getrecursionlimit" +py_cobjects(#11806) +py_cobjecttypes(#11806, #10075) +py_cobject_sources(#11806, 0) +py_cobjectnames(#11806, "getrecursionlimit") +py_cmembers_versioned(#11643, "getrecursionlimit", #11806, "2") +#11807 = @"C_module$sys$2getrefcount" +py_cobjects(#11807) +py_cobjecttypes(#11807, #10075) +py_cobject_sources(#11807, 0) +py_cobjectnames(#11807, "getrefcount") +py_cmembers_versioned(#11643, "getrefcount", #11807, "2") +#11808 = @"C_module$sys$2getsizeof" +py_cobjects(#11808) +py_cobjecttypes(#11808, #10075) +py_cobject_sources(#11808, 0) +py_cobjectnames(#11808, "getsizeof") +py_cmembers_versioned(#11643, "getsizeof", #11808, "2") +#11809 = @"C_module$sys$2gettrace" +py_cobjects(#11809) +py_cobjecttypes(#11809, #10075) +py_cobject_sources(#11809, 0) +py_cobjectnames(#11809, "gettrace") +py_cmembers_versioned(#11643, "gettrace", #11809, "2") +#11810 = @"C_int$34018032" +py_cobjects(#11810) +py_cobjecttypes(#11810, #10449) +py_cobject_sources(#11810, 0) +py_cobjectnames(#11810, "34018032") +py_cmembers_versioned(#11643, "hexversion", #11810, "2") +#11811 = @"C_module$sys$2long_info" +#11812 = @"C_type$sys.long_info" +py_cobjects(#11812) +py_cobjecttypes(#11812, #10001) +py_cobject_sources(#11812, 0) +#11813 = @"C_type$sys.long_info$2__add__" +py_cobjects(#11813) +py_cobjecttypes(#11813, #10005) +py_cobject_sources(#11813, 0) +py_cobjectnames(#11813, "__add__") +py_cmembers_versioned(#11812, "__add__", #11813, "2") +#11814 = @"C_type$sys.long_info$2__contains__" +py_cobjects(#11814) +py_cobjecttypes(#11814, #10005) +py_cobject_sources(#11814, 0) +py_cobjectnames(#11814, "__contains__") +py_cmembers_versioned(#11812, "__contains__", #11814, "2") +#11815 = @"C_bytes$3079de10197f97ccf4003107de0dcbfaa45945d0" +py_cobjects(#11815) +py_cobjecttypes(#11815, #10028) +py_cobject_sources(#11815, 0) +py_cobjectnames(#11815, "b'sys.long_info + +A struct sequence that holds information about Python's +internal representation of integers. The attributes are read only.'") +py_cmembers_versioned(#11812, "__doc__", #11815, "2") +#11816 = @"C_type$sys.long_info$2__eq__" +py_cobjects(#11816) +py_cobjecttypes(#11816, #10005) +py_cobject_sources(#11816, 0) +py_cobjectnames(#11816, "__eq__") +py_cmembers_versioned(#11812, "__eq__", #11816, "2") +#11817 = @"C_type$sys.long_info$2__ge__" +py_cobjects(#11817) +py_cobjecttypes(#11817, #10005) +py_cobject_sources(#11817, 0) +py_cobjectnames(#11817, "__ge__") +py_cmembers_versioned(#11812, "__ge__", #11817, "2") +#11818 = @"C_type$sys.long_info$2__getitem__" +py_cobjects(#11818) +py_cobjecttypes(#11818, #10005) +py_cobject_sources(#11818, 0) +py_cobjectnames(#11818, "__getitem__") +py_cmembers_versioned(#11812, "__getitem__", #11818, "2") +#11819 = @"C_type$sys.long_info$2__getslice__" +py_cobjects(#11819) +py_cobjecttypes(#11819, #10005) +py_cobject_sources(#11819, 0) +py_cobjectnames(#11819, "__getslice__") +py_cmembers_versioned(#11812, "__getslice__", #11819, "2") +#11820 = @"C_type$sys.long_info$2__gt__" +py_cobjects(#11820) +py_cobjecttypes(#11820, #10005) +py_cobject_sources(#11820, 0) +py_cobjectnames(#11820, "__gt__") +py_cmembers_versioned(#11812, "__gt__", #11820, "2") +#11821 = @"C_type$sys.long_info$2__hash__" +py_cobjects(#11821) +py_cobjecttypes(#11821, #10005) +py_cobject_sources(#11821, 0) +py_cobjectnames(#11821, "__hash__") +py_cmembers_versioned(#11812, "__hash__", #11821, "2") +#11822 = @"C_type$sys.long_info$2__le__" +py_cobjects(#11822) +py_cobjecttypes(#11822, #10005) +py_cobject_sources(#11822, 0) +py_cobjectnames(#11822, "__le__") +py_cmembers_versioned(#11812, "__le__", #11822, "2") +#11823 = @"C_type$sys.long_info$2__len__" +py_cobjects(#11823) +py_cobjecttypes(#11823, #10005) +py_cobject_sources(#11823, 0) +py_cobjectnames(#11823, "__len__") +py_cmembers_versioned(#11812, "__len__", #11823, "2") +#11824 = @"C_type$sys.long_info$2__lt__" +py_cobjects(#11824) +py_cobjecttypes(#11824, #10005) +py_cobject_sources(#11824, 0) +py_cobjectnames(#11824, "__lt__") +py_cmembers_versioned(#11812, "__lt__", #11824, "2") +#11825 = @"C_type$sys.long_info$2__mul__" +py_cobjects(#11825) +py_cobjecttypes(#11825, #10005) +py_cobject_sources(#11825, 0) +py_cobjectnames(#11825, "__mul__") +py_cmembers_versioned(#11812, "__mul__", #11825, "2") +#11826 = @"C_type$sys.long_info$2__ne__" +py_cobjects(#11826) +py_cobjecttypes(#11826, #10005) +py_cobject_sources(#11826, 0) +py_cobjectnames(#11826, "__ne__") +py_cmembers_versioned(#11812, "__ne__", #11826, "2") +#11827 = @"C_type$sys.long_info$2__new__" +py_cobjects(#11827) +py_cobjecttypes(#11827, #10075) +py_cobject_sources(#11827, 0) +py_cobjectnames(#11827, "__new__") +py_cmembers_versioned(#11812, "__new__", #11827, "2") +#11828 = @"C_type$sys.long_info$2__reduce__" +py_cobjects(#11828) +py_cobjecttypes(#11828, #10034) +py_cobject_sources(#11828, 0) +py_cobjectnames(#11828, "__reduce__") +py_cmembers_versioned(#11812, "__reduce__", #11828, "2") +#11829 = @"C_type$sys.long_info$2__repr__" +py_cobjects(#11829) +py_cobjecttypes(#11829, #10005) +py_cobject_sources(#11829, 0) +py_cobjectnames(#11829, "__repr__") +py_cmembers_versioned(#11812, "__repr__", #11829, "2") +#11830 = @"C_type$sys.long_info$2__rmul__" +py_cobjects(#11830) +py_cobjecttypes(#11830, #10005) +py_cobject_sources(#11830, 0) +py_cobjectnames(#11830, "__rmul__") +py_cmembers_versioned(#11812, "__rmul__", #11830, "2") +#11831 = @"C_type$sys.long_info$2bits_per_digit" +py_cobjects(#11831) +py_cobjecttypes(#11831, #10045) +py_cobject_sources(#11831, 0) +py_cobjectnames(#11831, "bits_per_digit") +py_cmembers_versioned(#11812, "bits_per_digit", #11831, "2") +#11832 = @"C_int$2" +py_cobjects(#11832) +py_cobjecttypes(#11832, #10449) +py_cobject_sources(#11832, 0) +py_cobjectnames(#11832, "2") +py_cmembers_versioned(#11812, "n_fields", #11832, "2") +py_cmembers_versioned(#11812, "n_sequence_fields", #11832, "2") +py_cmembers_versioned(#11812, "n_unnamed_fields", #11760, "2") +#11833 = @"C_type$sys.long_info$2sizeof_digit" +py_cobjects(#11833) +py_cobjecttypes(#11833, #10045) +py_cobject_sources(#11833, 0) +py_cobjectnames(#11833, "sizeof_digit") +py_cmembers_versioned(#11812, "sizeof_digit", #11833, "2") +py_cmembers_versioned(#11812, ".super.", #10021, "2") +py_cobjectnames(#11812, "sys.long_info") +py_cobjects(#11811) +py_cobjecttypes(#11811, #11812) +py_cobject_sources(#11811, 0) +py_cobjectnames(#11811, "object") +py_cmembers_versioned(#11643, "long_info", #11811, "2") +#11834 = @"C_int$9223372036854775807" +py_cobjects(#11834) +py_cobjecttypes(#11834, #10449) +py_cobject_sources(#11834, 0) +py_cobjectnames(#11834, "9223372036854775807") +py_cmembers_versioned(#11643, "maxint", #11834, "2") +#11835 = @"C_int$9223372036854775807" +py_cobjects(#11835) +py_cobjecttypes(#11835, #10449) +py_cobject_sources(#11835, 0) +py_cobjectnames(#11835, "9223372036854775807") +py_cmembers_versioned(#11643, "maxsize", #11835, "2") +#11836 = @"C_int$1114111" +py_cobjects(#11836) +py_cobjecttypes(#11836, #10449) +py_cobject_sources(#11836, 0) +py_cobjectnames(#11836, "1114111") +py_cmembers_versioned(#11643, "maxunicode", #11836, "2") +#11837 = @"C_module$sys$2meta_path" +py_cobjects(#11837) +py_cobjecttypes(#11837, #11360) +py_cobject_sources(#11837, 0) +py_cobjectnames(#11837, "object") +py_cmembers_versioned(#11643, "meta_path", #11837, "2") +#11838 = @"C_module$sys$2modules" +py_cobjects(#11838) +py_cobjecttypes(#11838, #10386) +py_cobject_sources(#11838, 0) +py_cobjectnames(#11838, "object") +py_cmembers_versioned(#11643, "modules", #11838, "2") +#11839 = @"C_module$sys$2path" +py_cobjects(#11839) +py_cobjecttypes(#11839, #11360) +py_cobject_sources(#11839, 0) +#11840 = @"C_bytes$efb8145a2b5da8ef405c09c84a18c90edccd541a" +py_cobjects(#11840) +py_cobjecttypes(#11840, #10028) +py_cobject_sources(#11840, 0) +py_cobjectnames(#11840, "b'/workspaces/semmle-code/target/intree/codeql-python/python/tools/python2.7.zip'") +py_citems(#11839, 0, #11840) +#11841 = @"C_bytes$fa65de5b131ee4329913b3ead2895c3c234fc758" +py_cobjects(#11841) +py_cobjecttypes(#11841, #10028) +py_cobject_sources(#11841, 0) +py_cobjectnames(#11841, "b'/workspaces/semmle-code/target/intree/codeql-python/python/tools'") +py_citems(#11839, 1, #11841) +#11842 = @"C_bytes$c7224070988605c1ddb329e10b116de47fe6bf5c" +py_cobjects(#11842) +py_cobjecttypes(#11842, #10028) +py_cobject_sources(#11842, 0) +py_cobjectnames(#11842, "b'/usr/lib/python2.7'") +py_citems(#11839, 2, #11842) +#11843 = @"C_bytes$349ca952d5a923bbfb29607f56493c4920f938f6" +py_cobjects(#11843) +py_cobjecttypes(#11843, #10028) +py_cobject_sources(#11843, 0) +py_cobjectnames(#11843, "b'/usr/lib/python2.7/plat-x86_64-linux-gnu'") +py_citems(#11839, 3, #11843) +#11844 = @"C_bytes$caace35464f93ae3361f69382760e1b558fcf7aa" +py_cobjects(#11844) +py_cobjecttypes(#11844, #10028) +py_cobject_sources(#11844, 0) +py_cobjectnames(#11844, "b'/usr/lib/python2.7/lib-tk'") +py_citems(#11839, 4, #11844) +#11845 = @"C_bytes$ea726fcf860a32500651bb90e9b83b758b87353a" +py_cobjects(#11845) +py_cobjecttypes(#11845, #10028) +py_cobject_sources(#11845, 0) +py_cobjectnames(#11845, "b'/usr/lib/python2.7/lib-old'") +py_citems(#11839, 5, #11845) +#11846 = @"C_bytes$dcfdcdb573f2f25fc4b0324cab8e960c840fa208" +py_cobjects(#11846) +py_cobjecttypes(#11846, #10028) +py_cobject_sources(#11846, 0) +py_cobjectnames(#11846, "b'/usr/lib/python2.7/lib-dynload'") +py_citems(#11839, 6, #11846) +#11847 = @"C_bytes$d97021114fe7afd96e842fe6937049e0459d35d3" +py_cobjects(#11847) +py_cobjecttypes(#11847, #10028) +py_cobject_sources(#11847, 0) +py_cobjectnames(#11847, "b'/usr/local/lib/python2.7/dist-packages'") +py_citems(#11839, 7, #11847) +#11848 = @"C_bytes$fd8e1150b06a91ba24459b1b1fdc6a38c2b363f4" +py_cobjects(#11848) +py_cobjecttypes(#11848, #10028) +py_cobject_sources(#11848, 0) +py_cobjectnames(#11848, "b'/usr/lib/python2.7/dist-packages'") +py_citems(#11839, 8, #11848) +py_cobjectnames(#11839, "object") +py_cmembers_versioned(#11643, "path", #11839, "2") +#11849 = @"C_module$sys$2path_hooks" +py_cobjects(#11849) +py_cobjecttypes(#11849, #11360) +py_cobject_sources(#11849, 0) +#11850 = @"C_type$zipimport.zipimporter" +py_cobjects(#11850) +py_cobjecttypes(#11850, #10001) +py_cobject_sources(#11850, 0) +#11851 = @"C_bytes$d5f944c873ea5f089da3fdcb81a1f1d5f7c52748" +py_cobjects(#11851) +py_cobjecttypes(#11851, #10028) +py_cobject_sources(#11851, 0) +py_cobjectnames(#11851, "b'zipimporter(archivepath) -> zipimporter object + +Create a new zipimporter instance. 'archivepath' must be a path to +a zipfile, or to a specific path inside a zipfile. For example, it can be +'/tmp/myimport.zip', or '/tmp/myimport.zip/mydirectory', if mydirectory is a +valid directory inside the archive. + +'ZipImportError is raised if 'archivepath' doesn't point to a valid Zip +archive. + +The 'archive' attribute of zipimporter objects contains the name of the +zipfile targeted.'") +py_cmembers_versioned(#11850, "__doc__", #11851, "2") +#11852 = @"C_type$zipimport.zipimporter$2__getattribute__" +py_cobjects(#11852) +py_cobjecttypes(#11852, #10005) +py_cobject_sources(#11852, 0) +py_cobjectnames(#11852, "__getattribute__") +py_cmembers_versioned(#11850, "__getattribute__", #11852, "2") +#11853 = @"C_type$zipimport.zipimporter$2__init__" +py_cobjects(#11853) +py_cobjecttypes(#11853, #10005) +py_cobject_sources(#11853, 0) +py_cobjectnames(#11853, "__init__") +py_cmembers_versioned(#11850, "__init__", #11853, "2") +#11854 = @"C_type$zipimport.zipimporter$2__new__" +py_cobjects(#11854) +py_cobjecttypes(#11854, #10075) +py_cobject_sources(#11854, 0) +py_cobjectnames(#11854, "__new__") +py_cmembers_versioned(#11850, "__new__", #11854, "2") +#11855 = @"C_type$zipimport.zipimporter$2__repr__" +py_cobjects(#11855) +py_cobjecttypes(#11855, #10005) +py_cobject_sources(#11855, 0) +py_cobjectnames(#11855, "__repr__") +py_cmembers_versioned(#11850, "__repr__", #11855, "2") +#11856 = @"C_type$zipimport.zipimporter$2_files" +py_cobjects(#11856) +py_cobjecttypes(#11856, #10045) +py_cobject_sources(#11856, 0) +py_cobjectnames(#11856, "_files") +py_cmembers_versioned(#11850, "_files", #11856, "2") +#11857 = @"C_type$zipimport.zipimporter$2archive" +py_cobjects(#11857) +py_cobjecttypes(#11857, #10045) +py_cobject_sources(#11857, 0) +py_cobjectnames(#11857, "archive") +py_cmembers_versioned(#11850, "archive", #11857, "2") +#11858 = @"C_type$zipimport.zipimporter$2find_module" +py_cobjects(#11858) +py_cobjecttypes(#11858, #10034) +py_cobject_sources(#11858, 0) +py_cobjectnames(#11858, "find_module") +py_cmembers_versioned(#11850, "find_module", #11858, "2") +#11859 = @"C_type$zipimport.zipimporter$2get_code" +py_cobjects(#11859) +py_cobjecttypes(#11859, #10034) +py_cobject_sources(#11859, 0) +py_cobjectnames(#11859, "get_code") +py_cmembers_versioned(#11850, "get_code", #11859, "2") +#11860 = @"C_type$zipimport.zipimporter$2get_data" +py_cobjects(#11860) +py_cobjecttypes(#11860, #10034) +py_cobject_sources(#11860, 0) +py_cobjectnames(#11860, "get_data") +py_cmembers_versioned(#11850, "get_data", #11860, "2") +#11861 = @"C_type$zipimport.zipimporter$2get_filename" +py_cobjects(#11861) +py_cobjecttypes(#11861, #10034) +py_cobject_sources(#11861, 0) +py_cobjectnames(#11861, "get_filename") +py_cmembers_versioned(#11850, "get_filename", #11861, "2") +#11862 = @"C_type$zipimport.zipimporter$2get_source" +py_cobjects(#11862) +py_cobjecttypes(#11862, #10034) +py_cobject_sources(#11862, 0) +py_cobjectnames(#11862, "get_source") +py_cmembers_versioned(#11850, "get_source", #11862, "2") +#11863 = @"C_type$zipimport.zipimporter$2is_package" +py_cobjects(#11863) +py_cobjecttypes(#11863, #10034) +py_cobject_sources(#11863, 0) +py_cobjectnames(#11863, "is_package") +py_cmembers_versioned(#11850, "is_package", #11863, "2") +#11864 = @"C_type$zipimport.zipimporter$2load_module" +py_cobjects(#11864) +py_cobjecttypes(#11864, #10034) +py_cobject_sources(#11864, 0) +py_cobjectnames(#11864, "load_module") +py_cmembers_versioned(#11850, "load_module", #11864, "2") +#11865 = @"C_type$zipimport.zipimporter$2prefix" +py_cobjects(#11865) +py_cobjecttypes(#11865, #10045) +py_cobject_sources(#11865, 0) +py_cobjectnames(#11865, "prefix") +py_cmembers_versioned(#11850, "prefix", #11865, "2") +py_cmembers_versioned(#11850, ".super.", #10021, "2") +py_cobjectnames(#11850, "zipimport.zipimporter") +py_citems(#11849, 0, #11850) +py_cobjectnames(#11849, "object") +py_cmembers_versioned(#11643, "path_hooks", #11849, "2") +#11866 = @"C_module$sys$2path_importer_cache" +py_cobjects(#11866) +py_cobjecttypes(#11866, #10386) +py_cobject_sources(#11866, 0) +py_cobjectnames(#11866, "object") +py_cmembers_versioned(#11643, "path_importer_cache", #11866, "2") +#11867 = @"C_bytes$29f466375b3518f6e00d7cd0afc4ba3d2ad38671" +py_cobjects(#11867) +py_cobjecttypes(#11867, #10028) +py_cobject_sources(#11867, 0) +py_cobjectnames(#11867, "b'linux2'") +py_cmembers_versioned(#11643, "platform", #11867, "2") +#11868 = @"C_bytes$5c0e77c46be77719bc1c0a5ec9c64b94d2a2e50c" +py_cobjects(#11868) +py_cobjecttypes(#11868, #10028) +py_cobject_sources(#11868, 0) +py_cobjectnames(#11868, "b'/usr'") +py_cmembers_versioned(#11643, "prefix", #11868, "2") +py_cmembers_versioned(#11643, "py3kwarning", #10644, "2") +py_cmembers_versioned(#11643, "pydebug", #10644, "2") +#11869 = @"C_module$sys$2setcheckinterval" +py_cobjects(#11869) +py_cobjecttypes(#11869, #10075) +py_cobject_sources(#11869, 0) +py_cobjectnames(#11869, "setcheckinterval") +py_cmembers_versioned(#11643, "setcheckinterval", #11869, "2") +#11870 = @"C_module$sys$2setdlopenflags" +py_cobjects(#11870) +py_cobjecttypes(#11870, #10075) +py_cobject_sources(#11870, 0) +py_cobjectnames(#11870, "setdlopenflags") +py_cmembers_versioned(#11643, "setdlopenflags", #11870, "2") +#11871 = @"C_module$sys$2setprofile" +py_cobjects(#11871) +py_cobjecttypes(#11871, #10075) +py_cobject_sources(#11871, 0) +py_cobjectnames(#11871, "setprofile") +py_cmembers_versioned(#11643, "setprofile", #11871, "2") +#11872 = @"C_module$sys$2setrecursionlimit" +py_cobjects(#11872) +py_cobjecttypes(#11872, #10075) +py_cobject_sources(#11872, 0) +py_cobjectnames(#11872, "setrecursionlimit") +py_cmembers_versioned(#11643, "setrecursionlimit", #11872, "2") +#11873 = @"C_module$sys$2settrace" +py_cobjects(#11873) +py_cobjecttypes(#11873, #10075) +py_cobject_sources(#11873, 0) +py_cobjectnames(#11873, "settrace") +py_cmembers_versioned(#11643, "settrace", #11873, "2") +py_cmembers_versioned(#11643, "stderr", #11648, "2") +#11874 = @"C_module$sys$2stdin" +py_cobjects(#11874) +py_cobjecttypes(#11874, #11179) +py_cobject_sources(#11874, 0) +py_cobjectnames(#11874, "object") +py_cmembers_versioned(#11643, "stdin", #11874, "2") +py_cmembers_versioned(#11643, "stdout", #11650, "2") +#11875 = @"C_module$sys$2subversion" +py_cobjects(#11875) +py_cobjecttypes(#11875, #10737) +py_cobject_sources(#11875, 0) +#11876 = @"C_bytes$3348cc07058a464ebb973af5bfdb70ca7968c2db" +py_cobjects(#11876) +py_cobjecttypes(#11876, #10028) +py_cobject_sources(#11876, 0) +py_cobjectnames(#11876, "b'CPython'") +py_citems(#11875, 0, #11876) +py_citems(#11875, 1, #11656) +py_citems(#11875, 2, #11656) +py_cobjectnames(#11875, "object") +py_cmembers_versioned(#11643, "subversion", #11875, "2") +#11877 = @"C_bytes$2c6c60b105f32b49a3571c1bb365905989630d2e" +py_cobjects(#11877) +py_cobjecttypes(#11877, #10028) +py_cobject_sources(#11877, 0) +py_cobjectnames(#11877, "b'2.7.18 (default, Jul 1 2022, 12:27:04) +[GCC 9.4.0]'") +py_cmembers_versioned(#11643, "version", #11877, "2") +#11878 = @"C_module$sys$2version_info" +#11879 = @"C_type$sys.version_info" +py_cobjects(#11879) +py_cobjecttypes(#11879, #10001) +py_cobject_sources(#11879, 0) +#11880 = @"C_type$sys.version_info$2__add__" +py_cobjects(#11880) +py_cobjecttypes(#11880, #10005) +py_cobject_sources(#11880, 0) +py_cobjectnames(#11880, "__add__") +py_cmembers_versioned(#11879, "__add__", #11880, "2") +#11881 = @"C_type$sys.version_info$2__contains__" +py_cobjects(#11881) +py_cobjecttypes(#11881, #10005) +py_cobject_sources(#11881, 0) +py_cobjectnames(#11881, "__contains__") +py_cmembers_versioned(#11879, "__contains__", #11881, "2") +#11882 = @"C_bytes$bb652b3ae5c81a17bbc0ee6a92a78ac720655a87" +py_cobjects(#11882) +py_cobjecttypes(#11882, #10028) +py_cobject_sources(#11882, 0) +py_cobjectnames(#11882, "b'sys.version_info + +Version information as a named tuple.'") +py_cmembers_versioned(#11879, "__doc__", #11882, "2") +#11883 = @"C_type$sys.version_info$2__eq__" +py_cobjects(#11883) +py_cobjecttypes(#11883, #10005) +py_cobject_sources(#11883, 0) +py_cobjectnames(#11883, "__eq__") +py_cmembers_versioned(#11879, "__eq__", #11883, "2") +#11884 = @"C_type$sys.version_info$2__ge__" +py_cobjects(#11884) +py_cobjecttypes(#11884, #10005) +py_cobject_sources(#11884, 0) +py_cobjectnames(#11884, "__ge__") +py_cmembers_versioned(#11879, "__ge__", #11884, "2") +#11885 = @"C_type$sys.version_info$2__getitem__" +py_cobjects(#11885) +py_cobjecttypes(#11885, #10005) +py_cobject_sources(#11885, 0) +py_cobjectnames(#11885, "__getitem__") +py_cmembers_versioned(#11879, "__getitem__", #11885, "2") +#11886 = @"C_type$sys.version_info$2__getslice__" +py_cobjects(#11886) +py_cobjecttypes(#11886, #10005) +py_cobject_sources(#11886, 0) +py_cobjectnames(#11886, "__getslice__") +py_cmembers_versioned(#11879, "__getslice__", #11886, "2") +#11887 = @"C_type$sys.version_info$2__gt__" +py_cobjects(#11887) +py_cobjecttypes(#11887, #10005) +py_cobject_sources(#11887, 0) +py_cobjectnames(#11887, "__gt__") +py_cmembers_versioned(#11879, "__gt__", #11887, "2") +#11888 = @"C_type$sys.version_info$2__hash__" +py_cobjects(#11888) +py_cobjecttypes(#11888, #10005) +py_cobject_sources(#11888, 0) +py_cobjectnames(#11888, "__hash__") +py_cmembers_versioned(#11879, "__hash__", #11888, "2") +#11889 = @"C_type$sys.version_info$2__le__" +py_cobjects(#11889) +py_cobjecttypes(#11889, #10005) +py_cobject_sources(#11889, 0) +py_cobjectnames(#11889, "__le__") +py_cmembers_versioned(#11879, "__le__", #11889, "2") +#11890 = @"C_type$sys.version_info$2__len__" +py_cobjects(#11890) +py_cobjecttypes(#11890, #10005) +py_cobject_sources(#11890, 0) +py_cobjectnames(#11890, "__len__") +py_cmembers_versioned(#11879, "__len__", #11890, "2") +#11891 = @"C_type$sys.version_info$2__lt__" +py_cobjects(#11891) +py_cobjecttypes(#11891, #10005) +py_cobject_sources(#11891, 0) +py_cobjectnames(#11891, "__lt__") +py_cmembers_versioned(#11879, "__lt__", #11891, "2") +#11892 = @"C_type$sys.version_info$2__mul__" +py_cobjects(#11892) +py_cobjecttypes(#11892, #10005) +py_cobject_sources(#11892, 0) +py_cobjectnames(#11892, "__mul__") +py_cmembers_versioned(#11879, "__mul__", #11892, "2") +#11893 = @"C_type$sys.version_info$2__ne__" +py_cobjects(#11893) +py_cobjecttypes(#11893, #10005) +py_cobject_sources(#11893, 0) +py_cobjectnames(#11893, "__ne__") +py_cmembers_versioned(#11879, "__ne__", #11893, "2") +#11894 = @"C_type$sys.version_info$2__new__" +py_cobjects(#11894) +py_cobjecttypes(#11894, #10075) +py_cobject_sources(#11894, 0) +py_cobjectnames(#11894, "__new__") +py_cmembers_versioned(#11879, "__new__", #11894, "2") +#11895 = @"C_type$sys.version_info$2__reduce__" +py_cobjects(#11895) +py_cobjecttypes(#11895, #10034) +py_cobject_sources(#11895, 0) +py_cobjectnames(#11895, "__reduce__") +py_cmembers_versioned(#11879, "__reduce__", #11895, "2") +#11896 = @"C_type$sys.version_info$2__repr__" +py_cobjects(#11896) +py_cobjecttypes(#11896, #10005) +py_cobject_sources(#11896, 0) +py_cobjectnames(#11896, "__repr__") +py_cmembers_versioned(#11879, "__repr__", #11896, "2") +#11897 = @"C_type$sys.version_info$2__rmul__" +py_cobjects(#11897) +py_cobjecttypes(#11897, #10005) +py_cobject_sources(#11897, 0) +py_cobjectnames(#11897, "__rmul__") +py_cmembers_versioned(#11879, "__rmul__", #11897, "2") +#11898 = @"C_type$sys.version_info$2major" +py_cobjects(#11898) +py_cobjecttypes(#11898, #10045) +py_cobject_sources(#11898, 0) +py_cobjectnames(#11898, "major") +py_cmembers_versioned(#11879, "major", #11898, "2") +#11899 = @"C_type$sys.version_info$2micro" +py_cobjects(#11899) +py_cobjecttypes(#11899, #10045) +py_cobject_sources(#11899, 0) +py_cobjectnames(#11899, "micro") +py_cmembers_versioned(#11879, "micro", #11899, "2") +#11900 = @"C_type$sys.version_info$2minor" +py_cobjects(#11900) +py_cobjecttypes(#11900, #10045) +py_cobject_sources(#11900, 0) +py_cobjectnames(#11900, "minor") +py_cmembers_versioned(#11879, "minor", #11900, "2") +#11901 = @"C_int$5" +py_cobjects(#11901) +py_cobjecttypes(#11901, #10449) +py_cobject_sources(#11901, 0) +py_cobjectnames(#11901, "5") +py_cmembers_versioned(#11879, "n_fields", #11901, "2") +py_cmembers_versioned(#11879, "n_sequence_fields", #11901, "2") +py_cmembers_versioned(#11879, "n_unnamed_fields", #11760, "2") +#11902 = @"C_type$sys.version_info$2releaselevel" +py_cobjects(#11902) +py_cobjecttypes(#11902, #10045) +py_cobject_sources(#11902, 0) +py_cobjectnames(#11902, "releaselevel") +py_cmembers_versioned(#11879, "releaselevel", #11902, "2") +#11903 = @"C_type$sys.version_info$2serial" +py_cobjects(#11903) +py_cobjecttypes(#11903, #10045) +py_cobject_sources(#11903, 0) +py_cobjectnames(#11903, "serial") +py_cmembers_versioned(#11879, "serial", #11903, "2") +py_cmembers_versioned(#11879, ".super.", #10021, "2") +py_cobjectnames(#11879, "sys.version_info") +py_cobjects(#11878) +py_cobjecttypes(#11878, #11879) +py_cobject_sources(#11878, 0) +py_cobjectnames(#11878, "object") +py_cmembers_versioned(#11643, "version_info", #11878, "2") +#11904 = @"C_module$sys$2warnoptions" +py_cobjects(#11904) +py_cobjecttypes(#11904, #11360) +py_cobject_sources(#11904, 0) +py_cobjectnames(#11904, "object") +py_cmembers_versioned(#11643, "warnoptions", #11904, "2") +py_cobjectnames(#11643, "sys") +py_special_objects(#11643, "sys") +py_special_objects(#11466, "property") +py_special_objects(#11231, "float") +py_special_objects(#11397, "locals") +py_special_objects(#10350, "Exception") +py_special_objects(#10028, "bytes") +py_special_objects(#11070, "ClassMethod") +py_special_objects(#11555, "StaticMethod") +#11905 = * +py_cobjects(#11905) +py_cobjecttypes(#11905, #10021) +py_cobject_sources(#11905, 0) +py_cobjectnames(#11905, "object") +py_special_objects(#11905, "_2") +py_special_objects(#10761, "ModuleType") +py_special_objects(#10449, "int") +py_special_objects(#10001, "type") +py_special_objects(#11360, "list") +py_special_objects(#10017, "None") +py_special_objects(#10354, "BaseException") +py_special_objects(#10075, "BuiltinFunctionType") +#11906 = @"C_type$generator" +py_cobjects(#11906) +py_cobjecttypes(#11906, #10001) +py_cobject_sources(#11906, 0) +py_cmembers_versioned(#11906, "__doc__", #10017, "2") +#11907 = @"C_type$generator$2__getattribute__" +py_cobjects(#11907) +py_cobjecttypes(#11907, #10005) +py_cobject_sources(#11907, 0) +py_cobjectnames(#11907, "__getattribute__") +py_cmembers_versioned(#11906, "__getattribute__", #11907, "2") +#11908 = @"C_type$generator$2__iter__" +py_cobjects(#11908) +py_cobjecttypes(#11908, #10005) +py_cobject_sources(#11908, 0) +py_cobjectnames(#11908, "__iter__") +py_cmembers_versioned(#11906, "__iter__", #11908, "2") +#11909 = @"C_type$generator$2__name__" +py_cobjects(#11909) +py_cobjecttypes(#11909, #10003) +py_cobject_sources(#11909, 0) +#11910 = @"C_type$generator$2__name__$2__set__" +py_cobjects(#11910) +py_cobjecttypes(#11910, #10009) +py_cobject_sources(#11910, 0) +py_cobjectnames(#11910, "__set__") +py_cmembers_versioned(#11909, "__set__", #11910, "2") +#11911 = @"C_type$generator$2__name__$2__getattribute__" +py_cobjects(#11911) +py_cobjecttypes(#11911, #10009) +py_cobject_sources(#11911, 0) +py_cobjectnames(#11911, "__getattribute__") +py_cmembers_versioned(#11909, "__getattribute__", #11911, "2") +py_cmembers_versioned(#11909, "__objclass__", #11906, "2") +#11912 = @"C_type$generator$2__name__$2__repr__" +py_cobjects(#11912) +py_cobjecttypes(#11912, #10009) +py_cobject_sources(#11912, 0) +py_cobjectnames(#11912, "__repr__") +py_cmembers_versioned(#11909, "__repr__", #11912, "2") +#11913 = @"C_type$generator$2__name__$2__get__" +py_cobjects(#11913) +py_cobjecttypes(#11913, #10009) +py_cobject_sources(#11913, 0) +py_cobjectnames(#11913, "__get__") +py_cmembers_versioned(#11909, "__get__", #11913, "2") +#11914 = @"C_bytes$23069b0900e4d3bd2800b9a2e39b6ebbae74db26" +py_cobjects(#11914) +py_cobjecttypes(#11914, #10028) +py_cobject_sources(#11914, 0) +py_cobjectnames(#11914, "b'Return the name of the generator's associated code object.'") +py_cmembers_versioned(#11909, "__doc__", #11914, "2") +#11915 = @"C_type$generator$2__name__$2__delete__" +py_cobjects(#11915) +py_cobjecttypes(#11915, #10009) +py_cobject_sources(#11915, 0) +py_cobjectnames(#11915, "__delete__") +py_cmembers_versioned(#11909, "__delete__", #11915, "2") +py_cobjectnames(#11909, "__name__") +py_cmembers_versioned(#11906, "__name__", #11909, "2") +#11916 = @"C_type$generator$2__repr__" +py_cobjects(#11916) +py_cobjecttypes(#11916, #10005) +py_cobject_sources(#11916, 0) +py_cobjectnames(#11916, "__repr__") +py_cmembers_versioned(#11906, "__repr__", #11916, "2") +#11917 = @"C_type$generator$2close" +py_cobjects(#11917) +py_cobjecttypes(#11917, #10034) +py_cobject_sources(#11917, 0) +py_cobjectnames(#11917, "close") +py_cmembers_versioned(#11906, "close", #11917, "2") +#11918 = @"C_type$generator$2gi_code" +py_cobjects(#11918) +py_cobjecttypes(#11918, #10045) +py_cobject_sources(#11918, 0) +py_cobjectnames(#11918, "gi_code") +py_cmembers_versioned(#11906, "gi_code", #11918, "2") +#11919 = @"C_type$generator$2gi_frame" +py_cobjects(#11919) +py_cobjecttypes(#11919, #10045) +py_cobject_sources(#11919, 0) +py_cobjectnames(#11919, "gi_frame") +py_cmembers_versioned(#11906, "gi_frame", #11919, "2") +#11920 = @"C_type$generator$2gi_running" +py_cobjects(#11920) +py_cobjecttypes(#11920, #10045) +py_cobject_sources(#11920, 0) +py_cobjectnames(#11920, "gi_running") +py_cmembers_versioned(#11906, "gi_running", #11920, "2") +#11921 = @"C_type$generator$2next" +py_cobjects(#11921) +py_cobjecttypes(#11921, #10005) +py_cobject_sources(#11921, 0) +py_cobjectnames(#11921, "next") +py_cmembers_versioned(#11906, "next", #11921, "2") +#11922 = @"C_type$generator$2send" +py_cobjects(#11922) +py_cobjecttypes(#11922, #10034) +py_cobject_sources(#11922, 0) +py_cobjectnames(#11922, "send") +py_cmembers_versioned(#11906, "send", #11922, "2") +#11923 = @"C_type$generator$2throw" +py_cobjects(#11923) +py_cobjecttypes(#11923, #10034) +py_cobject_sources(#11923, 0) +py_cobjectnames(#11923, "throw") +py_cmembers_versioned(#11906, "throw", #11923, "2") +py_cmembers_versioned(#11906, ".super.", #10021, "2") +py_cobjectnames(#11906, "generator") +py_special_objects(#11906, "generator") +#11924 = @"$_semmle_unknown_type" +py_cobjects(#11924) +py_cobjecttypes(#11924, #10021) +py_cobject_sources(#11924, 0) +py_cobjectnames(#11924, "object") +py_special_objects(#11924, "_semmle_unknown_type") +#11925 = @"$_semmle_undefined_value" +py_cobjects(#11925) +py_cobjecttypes(#11925, #10021) +py_cobject_sources(#11925, 0) +py_cobjectnames(#11925, "object") +py_special_objects(#11925, "_semmle_undefined_value") diff --git a/python/extractor/semmle/dbscheme.template b/python/extractor/semmle/dbscheme.template new file mode 100644 index 00000000000..07b65434bbd --- /dev/null +++ b/python/extractor/semmle/dbscheme.template @@ -0,0 +1,422 @@ +/* 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. + * + * 2020-07-02 + * + * 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. + */ + +/*- DEPRECATED: External defects and metrics -*/ + +externalDefects( + unique int id : @externalDefect, + varchar(900) queryPath : string ref, + int location : @location ref, + varchar(900) message : string ref, + float severity : float ref +); + +externalMetrics( + unique int id : @externalMetric, + varchar(900) queryPath : string ref, + int location : @location ref, + float value : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- DEPRECATED: Snapshot date -*/ + +snapshotDate(unique date snapshotDate : date ref); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- DEPRECATED: Duplicate code -*/ + +duplicateCode( + unique int id : @duplication, + string relativePath : string ref, + int equivClass : int ref +); + +similarCode( + unique int id : @similarity, + string relativePath : string ref, + int equivClass : int ref +); + +@duplication_or_similarity = @duplication | @similarity + +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref +); + +/*- DEPRECATED: Version control data -*/ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +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 +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- 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; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Python dbscheme -*/ + +/* + * Line metrics + */ +py_codelines(int id : @py_scope ref, + int count : int ref); + +py_commentlines(int id : @py_scope ref, + int count : int ref); + +py_docstringlines(int id : @py_scope ref, + int count : int ref); + +py_alllines(int id : @py_scope ref, + int count : int ref); + +/**************************** + Python dbscheme +****************************/ + +@sourceline = @file | @py_Module | @xmllocatable; + +@location = @location_ast | @location_default ; + +locations_ast(unique int id: @location_ast, + int module: @py_Module ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +file_contents(unique int file: @file ref, string contents: string ref); + +py_module_path(int module: @py_Module ref, int file: @container ref); + +variable(unique int id : @py_variable, + int scope : @py_scope ref, + varchar(1) name : string ref); + +py_line_lengths(unique int id : @py_line, + int file: @py_Module ref, + int line : int ref, + int length : int ref); + +py_extracted_version(int module : @py_Module ref, + varchar(1) version : string ref); + +$AST_SCHEME$ + +/* Map relative names to absolute names for imports */ +py_absolute_names(int module : @py_Module ref, + varchar(1) relname : string ref, + varchar(1) absname : string ref); + +py_exports(int id : @py_Module ref, + varchar(1) name : string ref); + +/* Successor information */ +py_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_true_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_exception_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_false_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_flow_bb_node(unique int flownode : @py_flow_node, + int realnode : @py_ast_node ref, + int basicblock : @py_flow_node ref, + int index : int ref); + +py_scope_flow(int flow : @py_flow_node ref, + int scope : @py_scope ref, + int kind : int ref); + +py_idoms(unique int node : @py_flow_node ref, + int immediate_dominator : @py_flow_node ref); + +py_ssa_phi(int phi : @py_ssa_var ref, + int arg: @py_ssa_var ref); + +py_ssa_var(unique int id : @py_ssa_var, + int var : @py_variable ref); + +py_ssa_use(int node: @py_flow_node ref, + int var : @py_ssa_var ref); + +py_ssa_defn(unique int id : @py_ssa_var ref, + int node: @py_flow_node ref); + +@py_base_var = @py_variable | @py_ssa_var; + +py_scopes(unique int node : @py_expr_or_stmt ref, + int scope : @py_scope ref); + +py_scope_location(unique int id : @location ref, + unique int scope : @py_scope ref); + +py_flags_versioned(varchar(1) name : string ref, + varchar(1) value : string ref, + varchar(1) version : string ref); + +py_syntax_error_versioned(unique int id : @location ref, + varchar(1) message : string ref, + varchar(1) version : string ref); + +py_comments(unique int id : @py_comment, + varchar(1) text : string ref, + unique int location : @location ref); + +/* Type information support */ + +py_cobjects(unique int obj : @py_cobject); + +py_cobjecttypes(unique int obj : @py_cobject ref, + int typeof : @py_cobject ref); + +py_cobjectnames(unique int obj : @py_cobject ref, + varchar(1) name : string ref); + +/* Kind should be 0 for introspection, > 0 from source, as follows: + 1 from C extension source + */ +py_cobject_sources(int obj : @py_cobject ref, + int kind : int ref); + +py_cmembers_versioned(int object : @py_cobject ref, + varchar(1) name : string ref, + int member : @py_cobject ref, + varchar(1) version : string ref); + +py_citems(int object : @py_cobject ref, + int index : int ref, + int member : @py_cobject ref); + +ext_argtype(int funcid : @py_object ref, + int arg : int ref, + int typeid : @py_object ref); + +ext_rettype(int funcid : @py_object ref, + int typeid : @py_object ref); + +ext_proptype(int propid : @py_object ref, + int typeid : @py_object ref); + +ext_argreturn(int funcid : @py_object ref, + int arg : int ref); + +py_special_objects(unique int obj : @py_cobject ref, + unique varchar(1) name : string ref); + +py_decorated_object(int object : @py_object ref, + int level: int ref); + +@py_object = @py_cobject | @py_flow_node; + +@py_source_element = @py_ast_node | @container; diff --git a/python/extractor/semmle/dbscheme_gen.py b/python/extractor/semmle/dbscheme_gen.py new file mode 100644 index 00000000000..7c3a79fc371 --- /dev/null +++ b/python/extractor/semmle/dbscheme_gen.py @@ -0,0 +1,104 @@ +'''Tool for generating the dbscheme from the relation tree described in +'master.py' and the part scheme in dbscheme.template''' + + + +from semmle.util import fprintf +from semmle import util +from semmle.python import master + +import sys +import os.path + + +def write(nodes, out): + nodes = set(nodes) + #Emit in sorted order to reduce diffs. + sorted_nodes = sorted(nodes, key = lambda n: n.__name__) + fprintf(out, '\n') + for n in sorted_nodes: + if n.layout: + fprintf(out, '\n') + for name, f_t, offset, _, _, _ in n.layout: + fprintf(out, '/* <Field> %s.%s = %s, %s */\n', + n.ql_name(), name, offset, f_t.__name__) + if n.parents: + fprintf(out, '/* <Parent> %s = %s */\n', + n.ql_name(), n.parents.ql_name()) + parents = set() + for n in sorted_nodes: + if n.is_sub_type() or n.is_union_type(): + continue + fprintf(out, u'%s(', n.relation_name()) + if n.__name__ == "bool": + fields = [] + else: + fields = [ n.db_key('id') ] + if n.is_case_type(): + fields.append('int kind: int ref') + if n.parents: + parents.add(n.parents) + if n.unique_parent: + fields.append('unique int parent : %s ref' % n.parents.db_name()) + else: + fields.append('int parent : %s ref' % n.parents.db_name()) + fields.append('int idx : int ref') + fprintf(out, ',\n '.join(fields)) + fprintf(out, ');\n\n') + nodes = nodes | parents + sorted_nodes = sorted(nodes, key = lambda n: n.__name__) + for n in sorted_nodes: + if n.is_case_type(): + fprintf(out, 'case %s.kind of\n ', n.db_name()) + subtypes = sorted(n.subclasses, key = lambda x : x.index) + body = '\n| '.join(['%s = %s' % (s.index, s.db_name()) + for s in subtypes]) + fprintf(out, '%s;\n\n' % body) + for n in sorted_nodes: + if n.is_union_type(): + fprintf(out, '%s = ', n.db_name()) + body = ' | '.join(sorted([item.db_name() for item in n.types])) + fprintf(out, '%s;\n\n' % body) + +HEADER = '''/* + * This dbscheme is auto-generated by '%s'. + * WARNING: Any modifications to this file will be lost. + * Relations can be changed by modifying master.py or + * by adding rules to dbscheme.template + */ + +''' + +AUTO_GEN_END = ''' +/* + * End of auto-generated part + */ + +''' + +def main(): + run(master) + +def run(nodes_module): + use_file = len(sys.argv) > 1 + if use_file: + out = open(sys.argv[1], 'w', encoding='utf-8') + else: + out = sys.stdout + try: + nodes = nodes_module.all_nodes() + this_dir, _ = os.path.split(sys.argv[0]) + with open(os.path.join(this_dir, 'dbscheme.template')) as template_file: + t0, t1 = template_file.read().split('$AST_SCHEME$') + out.write(HEADER % '/'.join(__file__.split(os.path.sep)[-2:])) + out.write(t0) + out.write(util.AUTO_GEN_STRING) + write(nodes.values(), out) + out.write(AUTO_GEN_END) + out.write(t1) + finally: + if use_file: + out.close() + +if __name__ == '__main__': + main() diff --git a/python/extractor/semmle/extractors/__init__.py b/python/extractor/semmle/extractors/__init__.py new file mode 100644 index 00000000000..2cb4c9d454f --- /dev/null +++ b/python/extractor/semmle/extractors/__init__.py @@ -0,0 +1,5 @@ + +from .super_extractor import SuperExtractor +from .py_extractor import PythonExtractor +from .builtin_extractor import BuiltinExtractor, SkippedBuiltin +from .module_printer import ModulePrinter diff --git a/python/extractor/semmle/extractors/base.py b/python/extractor/semmle/extractors/base.py new file mode 100644 index 00000000000..5d4afbd45c8 --- /dev/null +++ b/python/extractor/semmle/extractors/base.py @@ -0,0 +1,14 @@ +from semmle.logging import Logger + + +class BaseExtractor(object): + '''Base class for extractors.''' + + def __init__(self, options, trap_folder, src_archive, logger: Logger): + self.options = options + self.trap_folder = trap_folder + self.src_archive = src_archive + self.logger = logger + + def process(self, unit): + raise NotImplementedError() diff --git a/python/extractor/semmle/extractors/builtin_extractor.py b/python/extractor/semmle/extractors/builtin_extractor.py new file mode 100644 index 00000000000..f1493b50a3d --- /dev/null +++ b/python/extractor/semmle/extractors/builtin_extractor.py @@ -0,0 +1,41 @@ +import sys +from semmle import util +from semmle.python.passes.objects import ObjectPass +from semmle.extractors.base import BaseExtractor + +# A sentinel object representing a built-in that should be skipped. +# Unlike returning `NotImplemented`, this prevents other extractors from +# attempting to extract the same file/module and/or reporting an extraction error. +SkippedBuiltin = object() + +class BuiltinExtractor(BaseExtractor): + '''Extractor that can extract built-in Python modules, such as the `sys` module.''' + + name = "built-in extractor" + + def process(self, unit): + # Modules in the standard library (e.g. `os`) + if not self.options.extract_stdlib and \ + isinstance(unit, util.FileExtractable) and \ + unit.path.startswith(util.STDLIB_PATH): + return SkippedBuiltin + if not isinstance(unit, util.BuiltinModuleExtractable): + return NotImplemented + name = unit.name + # If a Shared Object file fails to import, we want to prevent the `ImportError` from + # propagating further up. Instead, we simply behave as if the module is not extractable. + try: + module = __import__(name) + except ImportError as e: + if e.path.endswith(".so"): + return NotImplemented + else: + raise e + writer = util.TrapWriter() + ObjectPass().extract_builtin(module, writer) + output = writer.get_compressed() + self.trap_folder.write_trap("builtin", name, output) + return () + + def close(self): + pass diff --git a/python/extractor/semmle/extractors/file_extractor.py b/python/extractor/semmle/extractors/file_extractor.py new file mode 100644 index 00000000000..17e6dbb8757 --- /dev/null +++ b/python/extractor/semmle/extractors/file_extractor.py @@ -0,0 +1,33 @@ + +from semmle import util +from semmle.extractors.base import BaseExtractor + +HALF_MB = 1 << 19 + +class FileExtractor(BaseExtractor): + '''Extractor for extracting arbitrary 'text' files.''' + + name = "file extractor" + + def process(self, unit): + if not isinstance(unit, util.FileExtractable): + return NotImplemented + if util.isdir(unit.path): + return NotImplemented + with open(unit.path, "rb") as fd: + data = fd.read() + source = data.decode("latin-1") + if len(source) > HALF_MB: + self.logger.info("Skipping overly large file: '%s'", unit.path) + return () + file_tag = util.get_source_file_tag(unit.path) + writer = util.TrapWriter() + writer.write_tuple("file_contents", "gS", file_tag, source) + writer.write_file(unit.path) + output = writer.get_compressed() + self.trap_folder.write_trap("file", unit.path, output) + self.src_archive.write(unit.path, data) + return () + + def close(self): + pass diff --git a/python/extractor/semmle/extractors/module_printer.py b/python/extractor/semmle/extractors/module_printer.py new file mode 100644 index 00000000000..d2f4a6cc92b --- /dev/null +++ b/python/extractor/semmle/extractors/module_printer.py @@ -0,0 +1,31 @@ +import sys +from semmle import util +from .py_extractor import PythonExtractor + +class ModulePrinter(object): + + name = "module printer" + + def __init__(self, options, trap_folder, src_archive, renamer, logger): + self.logger = logger + self.py_extractor = PythonExtractor(options, trap_folder, src_archive, logger) + + def process(self, unit): + imports = () + if isinstance(unit, util.BuiltinModuleExtractable): + name = unit.name + self.logger.info("Found builtin module '%s'", name) + elif isinstance(unit, util.FileExtractable): + self.logger.info("Found file '%s'", unit.path) + _, imports = self.py_extractor._get_module_and_imports(unit) + elif isinstance(unit, util.FolderExtractable): + self.logger.info("Found folder '%s'", unit.path) + else: + self.logger.error("Unexpected object: %s", unit) + return imports + + def close(self): + pass + + def write_global_data(self): + pass diff --git a/python/extractor/semmle/extractors/py_extractor.py b/python/extractor/semmle/extractors/py_extractor.py new file mode 100644 index 00000000000..8014063b3cb --- /dev/null +++ b/python/extractor/semmle/extractors/py_extractor.py @@ -0,0 +1,102 @@ +import os.path + +from semmle import util +from semmle.python import extractor, finder, imports +import re +from semmle.extractors.base import BaseExtractor +from semmle.logging import Logger + +class PythonExtractor(BaseExtractor): + '''Extractor that can extract Python source code.''' + + name = "Python extractor" + + def __init__(self, options, trap_folder, src_archive, logger: Logger, diagnostics_writer): + super(PythonExtractor, self).__init__(options, trap_folder, src_archive, logger) + self.module_extractor = extractor.Extractor.from_options(options, trap_folder, src_archive, logger, diagnostics_writer) + self.finder = finder.Finder.from_options_and_env(options, logger) + self.importer = imports.importer_from_options(options, self.finder, logger) + + def _get_module_and_imports(self, unit): + if not isinstance(unit, util.FileExtractable): + return None, () + #Convert unit to module. + module = self.finder.from_extractable(unit) + if module is None: + return None, () + py_module = module.load(self.logger) + if py_module is None: + return None, () + imports = set(mod.get_extractable() for mod in self.importer.get_imports(module, py_module)) + for imp in imports: + self.logger.trace("%s imports %s", module, imp) + package = module.package + while package: + ex = package.get_extractable() + if ex is None: + break + self.logger.debug("Requiring package %s", ex) + imports.add(ex) + package = package.package + return py_module, imports + + def process(self, unit): + py_module, imports = self._get_module_and_imports(unit) + if py_module is None: + return NotImplemented + self.module_extractor.process_source_module(py_module) + return imports + + def close(self): + self.module_extractor.close() + + def write_interpreter_data(self, options): + self.module_extractor.write_interpreter_data(options) + +LEGAL_NAME = re.compile(r"[^\W0-9]\w+$") + +class PackageExtractor(object): + '''Extractor that can extract folders as Python packages.''' + + name = "package extractor" + + def __init__(self, options, trap_folder, src_archive, logger): + self.trap_folder = trap_folder + self.src_archive = src_archive + self.logger = logger + self.respect_init = options.respect_init + + def process(self, unit): + if not isinstance(unit, util.FolderExtractable): + return NotImplemented + _, name = os.path.split(unit.path) + init_path = os.path.join(unit.path, "__init__.py") + if (self.respect_init and not os.path.exists(init_path)) or not LEGAL_NAME.match(name): + self.logger.debug("Ignoring non-package folder %s", unit.path) + return () + writer = util.TrapWriter() + trap_name = u'py-package:' + unit.path + vpath = self.src_archive.get_virtual_path(unit.path) + folder_tag = writer.write_folder(vpath) + writer.write_tuple(u'py_Modules', 'g', trap_name) + writer.write_tuple(u'py_module_path', 'gg', trap_name, folder_tag) + #Add fake CFG entry node to represent the PackageObject. + entry_node = object() + entry_id = trap_name + ":entry-point" + entry_tag = writer.get_labelled_id(entry_node, entry_id) + writer.write_tuple(u'py_flow_bb_node', 'rgrd', entry_tag, trap_name, entry_tag, 0) + writer.write_tuple(u'py_scope_flow', 'rgd', entry_tag, trap_name, -1) + #Add dummy location + loc = object() + loc_id = trap_name + ":location" + loc_tag = writer.get_labelled_id(loc, loc_id) + writer.write_tuple(u'locations_ast', 'rgdddd', loc_tag, trap_name, 0, 0, 0, 0) + output = writer.get_compressed() + self.trap_folder.write_trap('$package', unit.path, output) + if os.path.exists(init_path): + return util.FileExtractable(init_path), + else: + return () + + def close(self): + pass diff --git a/python/extractor/semmle/extractors/super_extractor.py b/python/extractor/semmle/extractors/super_extractor.py new file mode 100644 index 00000000000..24edff70e0a --- /dev/null +++ b/python/extractor/semmle/extractors/super_extractor.py @@ -0,0 +1,69 @@ +from .builtin_extractor import BuiltinExtractor +from .py_extractor import PythonExtractor +from .py_extractor import PackageExtractor +from .file_extractor import FileExtractor +from .thrift_extractor import ThriftExtractor +from semmle.files import TrapFolder, SourceArchive, NullArchive +from semmle.profiling import MillisecondTimer +from semmle.logging import DEBUG, Logger + +class SuperExtractor(object): + '''Extractor that can extract any 'extractable'. + Delegates to the relevant extractor.''' + + def __init__(self, options, trap_dir, archive, renamer, logger: Logger, diagnostics_writer): + trap_folder = TrapFolder(trap_dir, renamer, logger) + if archive is None: + src_archive = NullArchive(renamer) + else: + src_archive = SourceArchive(archive, renamer, logger) + bltn_extractor = BuiltinExtractor(options, trap_folder, src_archive, logger) + package_extractor = PackageExtractor(options, trap_folder, src_archive, logger) + gen_extractor = FileExtractor(options, trap_folder, src_archive, logger) + thrift_extractor = ThriftExtractor(options, trap_folder, src_archive, logger) + self.py_extractor = PythonExtractor(options, trap_folder, src_archive, logger, diagnostics_writer) + self.extractors = [ bltn_extractor, thrift_extractor, self.py_extractor, package_extractor, gen_extractor] + if logger.level >= DEBUG: + self.extractors = [ TimingExtractor(extractor, logger) for extractor in self.extractors ] + self.logger = logger + self.options = options + + def process(self, unit): + for extractor in self.extractors: + self.logger.debug("Trying %s on %s",extractor.name, unit) + res = extractor.process(unit) + if res is not NotImplemented: + self.logger.debug("%s extracted by the %s.", unit, extractor.name) + break + else: + self.logger.error("Could not extract %s", unit) + res = () + return res + + def add_extractor(self, extractor): + #Insert after built-in extractor + self.extractors.insert(1, extractor) + + def close(self): + for ex in self.extractors: + ex.close() + + def write_global_data(self): + self.py_extractor.write_interpreter_data(self.options) + + +class TimingExtractor(object): + + def __init__(self, extractor, logger): + self.timer = MillisecondTimer() + self.extractor = extractor + self.logger = logger + self.name = self.extractor.name + + def process(self, unit): + with self.timer: + return self.extractor.process(unit) + + def close(self): + self.logger.debug(self.name + " time %0.1fs", self.timer.elapsed/1000) + self.extractor.close() diff --git a/python/extractor/semmle/extractors/thrift_extractor.py b/python/extractor/semmle/extractors/thrift_extractor.py new file mode 100644 index 00000000000..62c9b25dba5 --- /dev/null +++ b/python/extractor/semmle/extractors/thrift_extractor.py @@ -0,0 +1,28 @@ + + +import os.path +import semmle.thrift +import semmle.util +from semmle.extractors.base import BaseExtractor + +class ThriftExtractor(BaseExtractor): + '''Extractor that can extract Apache thrift IDL files.''' + + name = "thrift extractor" + + def __init__(self, options, trap_folder, src_archive, logger): + super(ThriftExtractor, self).__init__(options, trap_folder, src_archive, logger) + self.thrift_extractor = semmle.thrift.Extractor(trap_folder, src_archive) + + def process(self, unit): + if not isinstance(unit, semmle.util.FileExtractable): + return NotImplemented + if semmle.util.isdir(unit.path): + return NotImplemented + if not unit.path.endswith(".thrift"): + return NotImplemented + self.thrift_extractor.extract_file(unit.path) + return () + + def close(self): + pass diff --git a/python/extractor/semmle/files.py b/python/extractor/semmle/files.py new file mode 100644 index 00000000000..49eeb63199c --- /dev/null +++ b/python/extractor/semmle/files.py @@ -0,0 +1,97 @@ +import os.path +import sys + +from semmle.util import base64digest, makedirs + +_WINDOWS = os.name == "nt" + +LONG_PATH_PREFIX = "\\\\?\\" + +def make_renamer(renamer): + if os.name == "nt": + if renamer is None: + return lambda path : path.replace('\\', '/') + else: + return lambda path : renamer(path).replace('\\', '/') + else: + if renamer is None: + return lambda path : path + else: + return renamer + + +class NullArchive(object): + '''A fake source archive object for use when there is no + source archive folder. For example, by qltest.''' + + def __init__(self, renamer=None): + self.renamer = make_renamer(renamer) + + def write(self, path, source, encoding=None): + pass + + def get_virtual_path(self, real_path): + '''Gets the virtual (potentially renamed) path for the given real path''' + return self.renamer(real_path) + +class RenamingFolder(object): + '''A folder that can rename its contents according to the given renamer + (usually derived from a project layout file).''' + + def __init__(self, folder, renamer, logger): + assert folder is not None + self.folder = folder + self.renamer = make_renamer(renamer) + self.logger = logger + + def get_virtual_path(self, real_path): + '''Gets the virtual (potentially renamed) path for the given real path''' + return self.renamer(real_path) + + def get_storage_path(self, *subpath): + '''Gets the path for storing an item at. + Creates the necessary sub folders and + handles long paths on Windows.''' + #Remove empty path elements + subpath = [ p for p in subpath if p ] + suffix = os.sep.join(subpath) + suffix = suffix.replace(':', '_') + if suffix[0] in '/\\': + result = self.folder + suffix + else: + result = self.folder + os.sep + suffix + if _WINDOWS and len(result) > 240: + result = LONG_PATH_PREFIX + result + folder = os.path.dirname(result) + if not os.path.exists(folder): + makedirs(folder) + return result + +class TrapFolder(RenamingFolder): + + def _trap_path(self, namespace, path, extension='.trap.gz'): + vpath = self.get_virtual_path(path) + parts = vpath.split('/') + basename = parts[-1] + hashcode = base64digest(vpath + namespace) + filename = basename + '.' + hashcode + extension + return self.get_storage_path(filename) + + def write_trap(self, namespace, path, data, extension='.trap.gz'): + '''Write the trap file for `path` in `namespace` using the given file extension (defaults to .trap.gz)''' + outpath = self._trap_path(namespace, path, extension) + with open(outpath, "wb") as out: + out.write(data) + +class SourceArchive(RenamingFolder): + + def write(self, path, bytes_source): + '''Write the `source` to `path` in this source archive folder.''' + vpath = self.get_virtual_path(path) + if vpath != path: + self.logger.debug("Renaming '%s' to '%s'", path, vpath) + self.logger.debug("Writing source to '%s'", vpath) + subpath = vpath.split('/') + outpath = self.get_storage_path(*subpath) + with open(outpath, "wb") as out: + out.write(bytes_source) diff --git a/python/extractor/semmle/graph.py b/python/extractor/semmle/graph.py new file mode 100755 index 00000000000..8f93768767f --- /dev/null +++ b/python/extractor/semmle/graph.py @@ -0,0 +1,837 @@ + +class SmallSet(list): + + __slots__ = [] + + def update(self, other): + filtered = [x for x in other if x not in self] + self.extend(filtered) + + def add(self, item): + if item not in self: + self.append(item) + +class DiGraph(object): + '''A simple directed graph class (not necessarily a DAG). + Nodes must be hashable''' + + def __init__(self, name = ""): + self.name = name + self.pred = {} + self.succ = {} + self.all_nodes = [] + self.node_annotations = {} + self.edge_annotations = {} + + def add_node(self, n): + 'Add a node to the graph' + if n not in self.succ: + self.pred[n] = SmallSet() + self.succ[n] = SmallSet() + self.all_nodes.append(n) + + def add_edge(self, x, y): + '''Add an edge (x -> y) to the graph. Return true if x, y was + previously in graph''' + if x in self.succ: + if y in self.succ[x]: + return True + else: + self.add_node(x) + self.add_node(y) + self.pred[y].add(x) + self.succ[x].add(y) + return False + + def remove_node(self, x): + if x not in self.succ: + raise ValueError("Node %s does not exist." % x) + preds = self.pred[x] + succs = self.succ[x] + for p in preds: + self.succ[p].remove(x) + for s in succs: + self.pred[s].remove(x) + del self.succ[x] + del self.pred[x] + + def remove_edge(self, x, y): + self.pred[y].remove(x) + self.succ[x].remove(y) + + def annotate_edge(self, x, y, note): + '''Set the annotation on the edge (x -> y) to note. + ''' + if x not in self.succ or y not in self.succ[x]: + raise ValueError("Edge %s -> %s does not exist." % (x, y)) + self.edge_annotations[(x,y)] = note + + def annotate_node(self, x, note): + '''Set the annotation on the node x to note. + ''' + if x not in self.succ: + raise ValueError("Node %s does not exist." % x) + self.node_annotations[x] = note + + def nodes(self): + '''Return an iterator for all nodes, in the form (node, note) pairs. + Do not modify the graph while using this iterator''' + for node in self.all_nodes: + yield node, self.node_annotations.get(node) + + def edges(self): + '''Return an iterator for all edges, in the form of (pred, succ, note) triple. + Do not modify the graph while using this iterator''' + index = dict((n, i) for i, n in enumerate(self.all_nodes)) + for n in self.all_nodes: + n_succs = self.succ[n] + for succ in sorted(n_succs, key = lambda n : index[n]): + yield n, succ, self.edge_annotations.get((n,succ)) + + def sources(self): + '''Return an iterator for all nodes with no predecessors. + Do not modify the graph while using this iterator''' + for n, p in self.pred.items(): + if not p: + yield n + + def __contains__(self, node): + return node in self.succ + + +class FlowGraph(DiGraph): + '''A DiGraph that supports the concept of definitions and variables. + Used to compute dominance and SSA form. + For more explanation of the algorithms used see + 'Modern Compiler Implementation by Andrew W. Appel. + ''' + + def __init__(self, root, name = ""): + DiGraph.__init__(self, name) + self.definitions = {} + self.deletions = {} + self.uses = {} + self.use_all_nodes = set() + self.root = root + + def clear_computed(self): + to_be_deleted = [attr for attr in self.__dict__ if attr[0] == '_'] + for attr in to_be_deleted: + delattr(self, attr) + + def _require(self, what): + '''Ensures that 'what' has been computed (computing if needed).''' + if hasattr(self, "_" + what): + return + setattr(self, "_" + what, getattr(self, "_compute_" + what)()) + + def add_deletion(self, node, var): + assert node in self.succ + self.deletions[node] = var + + def add_definition(self, node, var): + assert node in self.succ + self.definitions[node] = var + + def add_use(self, node, var): + assert node in self.succ, node + self.uses[node] = var + + def use_all_defined_variables(self, node): + assert node in self.succ + self.use_all_nodes.add(node) + + def _compute_depth_first_pre_order(self): + self._require("depth_first_pre_order_labels") + reachable = [ f for f in self.all_nodes if f in self._depth_first_pre_order_labels ] + return sorted(reachable, key = lambda f : -self._depth_first_pre_order_labels[f]) + + def _compute_reachable(self): + self._require("depth_first_pre_order") + return frozenset(self._depth_first_pre_order) + + def reachable_nodes(self): + self._require("reachable") + return self._reachable + + def _compute_reversed_depth_first_pre_order(self): + self._require("depth_first_pre_order") + return reversed(self._depth_first_pre_order) + + def _compute_bb_depth_first_pre_order(self): + self._require('depth_first_pre_order') + self._require('bb_heads') + bbs = [] + for n in self._depth_first_pre_order: + if n in self._bb_heads: + bbs.append(n) + return bbs + + def _compute_bb_reversed_depth_first_pre_order(self): + self._require("bb_depth_first_pre_order") + return reversed(self._bb_depth_first_pre_order) + + def _compute_depth_first_pre_order_labels(self): + 'Compute order with depth first search.' + orders = {} + order = 0 + nodes_to_visit = [ self.root ] + while nodes_to_visit: + node = nodes_to_visit[-1] + orders[node] = 0 + if node in self.succ: + for succ in self.succ[node]: + if succ not in orders: + nodes_to_visit.append(succ) + else: + order += 1 + orders[node] = order + if node is nodes_to_visit[-1]: + nodes_to_visit.pop() + order += 1 + orders[node] = order + return orders + + def _compute_idoms(self): + self._require("depth_first_pre_order") + idoms = {} + + def idom_intersection(n1, n2): + 'Determine the last common idom of n1, n2' + orders = self._depth_first_pre_order_labels + while n1 is not n2: + while orders[n1] < orders[n2]: + n1 = idoms[n1] + while orders[n2] < orders[n1]: + n2 = idoms[n2] + return n1 + + for node in self._depth_first_pre_order: + if len(self.pred[node]) == 1: + idoms[node] = next(iter(self.pred[node])) + else: + idom = None + for p in self.pred[node]: + if p == self.root: + idom = p + elif p in idoms: + if idom is None: + idom = p + else: + idom = idom_intersection(idom, p) + if idom is not None: + idoms[node] = idom + return idoms + + def idoms(self): + '''Returns an iterable of node pairs: node, idom(node)''' + self._require('idoms') + idoms = self._idoms + for n in self.all_nodes: + if n in idoms: + yield n, idoms[n] + + + def _compute_dominance_frontier(self): + '''Compute the dominance frontier: + DF[n] = DF_local[n] Union over C in children DF_up[c]''' + + def dominates(dom, node): + while node in idoms: + next_node = idoms[node] + if dom == next_node: + return True + node = next_node + return False + + self._require('idoms') + idoms = self._idoms + dominance_frontier = {} + df_up = {} + dom_tree = _reverse_map(idoms) + self._require('reversed_depth_first_pre_order') + for node in self._reversed_depth_first_pre_order: + df_local_n = set(n for n in self.succ[node] if node != idoms[n]) + dfn = df_local_n + if node in dom_tree: + for child in dom_tree[node]: + dfn.update(df_up[child]) + dominance_frontier[node] = dfn + if node in idoms: + imm_dom = idoms[node] + df_up[node] = set(n for n in dfn if not dominates(imm_dom, n)) + else: + df_up[node] = dfn + return dominance_frontier + + def _compute_phi_nodes(self): + '''Compute the phi nodes for this graph. + A minimal set of phi-nodes are computed; + No phi-nodes are added unless the variable is live. + ''' + self._require('dominance_frontier') + self._require('liveness') + dominance_frontier = self._dominance_frontier + definitions = dict(self.definitions) + # We must count deletions as definitions here. Otherwise, we can have + # uses of a deleted variable whose SSA definition is an actual definition, + # rather than a deletion. + definitions.update(self.deletions) + phi_nodes = {} + defsites = {} + for a in definitions.values(): + defsites[a] = set() + for n in definitions: + a = definitions[n] + defsites[a].add(n) + for a in defsites: + W = set(defsites[a]) + while W: + n = W.pop() + if n not in dominance_frontier: + continue + for y in dominance_frontier[n]: + if y not in phi_nodes: + phi_nodes[y] = set() + if a not in phi_nodes[y]: + phi_nodes[y].add(a) + if y not in definitions or a != definitions[y]: + W.add(y) + trimmed = {} + for node in phi_nodes: + assert node in self._bb_heads + if node not in self._liveness: + continue + new_phi_vars = set() + phi_vars = phi_nodes[node] + for v in phi_vars: + if v in self._liveness[node]: + new_phi_vars.add(v) + if new_phi_vars: + trimmed[node] = new_phi_vars + return trimmed + + def _compute_ssa_data(self): + ''' Compute the SSA variables, definitions, uses and phi-inputs. + ''' + self._require('basic_blocks') + self._require('phi_nodes') + self._require('bb_depth_first_pre_order') + self._require('use_all') + phi_nodes = self._phi_nodes + reaching_ssa_vars = {} + work_set = set() + work_set.add(self.root) + ssa_defns = {} + ssa_uses = {} + ssa_phis = {} + ssa_vars = set() + ssa_var_cache = {} + + def make_ssa_var(variable, node): + '''Ensure that there is no more than one SSA variable for each (variable, node) pair.''' + uid = (variable, node) + if uid in ssa_var_cache: + return ssa_var_cache[uid] + var = SSA_Var(variable, node) + ssa_var_cache[uid] = var + return var + + for bb in self._bb_depth_first_pre_order: + #Track SSA variables in each BB. + reaching_ssa_vars[bb] = {} + for bb in self._bb_depth_first_pre_order: + live_vars = reaching_ssa_vars[bb].copy() + #Add an SSA definition for each phi-node. + if bb in phi_nodes: + variables = phi_nodes[bb] + for v in variables: + var = make_ssa_var(v, bb) + ssa_defns[var] = bb + live_vars[v] = var + for node in self.nodes_in_bb(bb): + #Add an SSA use for each use. + if node in self.uses: + a = self.uses[node] + if a not in live_vars: + #Treat a use as adding a reaching variable, + #since a second use, if it can be reached, + #will always find the variable defined. + var = make_ssa_var(a, node) + live_vars[a] = var + else: + var = live_vars[a] + ssa_vars.add(var) + ssa_uses[node] = [ var ] + #Add an SSA use for all live SSA variables for + #each use_all (end of module/class scope). + if node in self._use_all: + all_live = [ var for var in live_vars.values() if var.variable in self._use_all[node]] + ssa_uses[node] = all_live + ssa_vars.update(all_live) + #Add an SSA definition for each definition. + if node in self.definitions: + a = self.definitions[node] + var = make_ssa_var(a, node) + ssa_defns[var] = node + live_vars[a] = var + #Although deletions are not definitions, we treat them as such. + #SSA form has no concept of deletion, so we have to treat `del x` + #as `x = Undefined`. + if node in self.deletions: + a = self.deletions[node] + if a in live_vars: + var = live_vars[a] + ssa_vars.add(var) + ssa_uses[node] = [ var ] + else: + #If no var is defined here we don't need to create one + #as a new one will be immediately be defined by the deletion. + pass + var = make_ssa_var(a, node) + ssa_defns[var] = node + live_vars[a] = var + #Propagate set of reaching variables to + #successor blocks. + for n in self.succ[node]: + reaching_ssa_vars[n].update(live_vars) + if n in phi_nodes: + for v in phi_nodes[n]: + if v in live_vars: + var = make_ssa_var(v, n) + if var not in ssa_phis: + ssa_phis[var] = set() + ssa_vars.add(live_vars[v]) + ssa_phis[var].add(live_vars[v]) + #Prune unused definitions. + used_ssa_defns = {} + for var in ssa_defns: + if var in ssa_vars: + used_ssa_defns[var] = ssa_defns[var] + ssa_defns = used_ssa_defns + sorted_vars = list(self._sort_ssa_variables(ssa_vars)) + assert set(sorted_vars) == ssa_vars + assert len(sorted_vars) == len(ssa_vars) + ssa_vars = sorted_vars + return ssa_vars, ssa_defns, ssa_uses, ssa_phis + + + def ssa_variables(self): + '''Returns all the SSA variables for this graph''' + self._require('ssa_data') + return self._ssa_data[0] + + def _sort_ssa_variables(self, ssa_vars): + node_to_var = {} + for v in ssa_vars: + node = v.node + if node in node_to_var: + vset = node_to_var[node] + else: + vset = set() + node_to_var[node] = vset + vset.add(v) + for n in self.all_nodes: + if n in node_to_var: + variables = node_to_var[n] + for v in sorted(variables, key=lambda v:v.variable.id): + yield v + + def ssa_definitions(self): + '''Returns all the SSA definition as an iterator of (node, variable) pairs.''' + self._require('ssa_data') + ssa_defns = self._ssa_data[1] + reversed_defns = _reverse_map(ssa_defns) + for n in self.all_nodes: + if n in reversed_defns: + variables = reversed_defns[n] + for v in sorted(variables, key=lambda v:v.variable.id): + yield n, v + + def get_ssa_definition(self, var): + '''Returns the definition node of var. Returns None if there is no definition.''' + self._require('ssa_data') + ssa_defns = self._ssa_data[1] + return ssa_defns.get(var) + + def ssa_uses(self): + '''Returns all the SSA uses as an iterator of (node, variable) pairs.''' + self._require('ssa_data') + ssa_uses = self._ssa_data[2] + for n in self.all_nodes: + if n in ssa_uses: + variables = ssa_uses[n] + for v in sorted(variables, key=lambda v:v.variable.id): + yield n, v + + def get_ssa_variables_used(self, node): + '''Returns all the SSA variables used at this node''' + self._require('ssa_data') + ssa_uses = self._ssa_data[2] + return ssa_uses.get(node, ()) + + def ssa_phis(self): + '''Return all SSA phi inputs as an iterator of (variable, input-variable) pairs.''' + self._require('ssa_data') + ssa_phis = self._ssa_data[3] + ssa_vars = self._ssa_data[0] + indexed = dict((v, index) for index, v in enumerate(ssa_vars)) + for v in ssa_vars: + if v not in ssa_phis: + continue + phis = ssa_phis[v] + for phi in sorted(phis, key=lambda v:indexed[v]): + yield v, phi + + def _compute_bb_heads(self): + '''Compute all flow nodes that are the first node in a basic block.''' + bb_heads = set() + for node in self.all_nodes: + preds = self.pred[node] + if len(preds) != 1 or len(self.succ[preds[0]]) != 1: + bb_heads.add(node) + return bb_heads + + def _compute_basic_blocks(self): + '''Compute Basic blocks membership''' + self._require('bb_heads') + basic_blocks = {} + bb_tails = {} + for bb in self._bb_heads: + for index, node in enumerate(self.nodes_in_bb(bb)): + basic_blocks[node] = bb, index + bb_tails[bb] = node + self._bb_tails = bb_tails + return basic_blocks + + def get_basic_blocks(self): + self._require('basic_blocks') + return self._basic_blocks + + def _compute_bb_succ(self): + self._require('basic_blocks') + bb_succs = {} + for bb in self._bb_heads: + bb_succs[bb] = self.succ[self._bb_tails[bb]] + return bb_succs + + def _compute_bb_pred(self): + self._require('basic_blocks') + bb_preds = {} + for bb in self._bb_heads: + preds_of_bb = self.pred[bb] + bb_preds[bb] = SmallSet(self._basic_blocks[p][0] for p in preds_of_bb) + return bb_preds + + def nodes_in_bb(self, bb): + '''Return an iterator over all node in basic block 'bb.''' + node = bb + while True: + yield node + succs = self.succ[node] + if not succs: + return + node = succs[0] + if node in self._bb_heads: + return + + + def _compute_use_all(self): + '''Compute which variables have been defined. + A variable is defined at node n, if there is a path to n which + passes through a definition, but not through a subsequent deletion. + ''' + + self._require('bb_heads') + self._require('bb_succ') + self._require('bb_pred') + use_all = {} + + def defined_in_block(bb): + defined = defined_at_start[bb].copy() + for node in self.nodes_in_bb(bb): + if node in self.definitions: + var = self.definitions[node] + defined.add(var) + if node in self.deletions: + var = self.deletions[node] + defined.discard(var) + if node in self.use_all_nodes: + use_all[node] = frozenset(defined) + return defined + + defined_at_start = {} + work_set = set() + for bb in self._bb_heads: + if not self._bb_pred[bb]: + work_set.add(bb) + defined_at_start[bb] = set() + work_list = list(work_set) + while work_list: + bb = work_list.pop() + work_set.remove(bb) + defined_at_bb_end = defined_in_block(bb) + for succ in self._bb_succ[bb]: + if succ not in defined_at_start: + defined_at_start[succ] = set() + elif defined_at_start[succ] >= defined_at_bb_end: + continue + defined_at_start[succ].update(defined_at_bb_end) + if succ not in work_set: + work_list.append(succ) + work_set.add(succ) + return use_all + + def _compute_liveness(self): + '''Compute liveness of all variables in this flow-graph. + Return a mapping of basic blocks to the set of variables + that are live at the start of that basic block. + See http://en.wikipedia.org/wiki/Live_variable_analysis.''' + + self._require('bb_pred') + self._require('use_all') + + def gen_and_kill_for_block(bb): + gen = set() + kill = set() + for node in reversed(list(self.nodes_in_bb(bb))): + if node in self.uses: + var = self.uses[node] + gen.add(var) + kill.discard(var) + if node in self.deletions: + var = self.deletions[node] + gen.add(var) + kill.discard(var) + if node in self.definitions: + var = self.definitions[node] + gen.discard(var) + kill.add(var) + if node in self._use_all: + for var in self._use_all[node]: + gen.add(var) + kill.discard(var) + return gen, kill + + def liveness_for_block(bb, live_out): + return gens[bb].union(live_out.difference(kills[bb])) + + live_at_end = {} + live_at_start = {} + gens = {} + kills = {} + work_set = set() + #Initialise + for bb in self._bb_heads: + gens[bb], kills[bb] = gen_and_kill_for_block(bb) + live_at_end[bb] = set() + live_at_start[bb] = set() + work_set.add(bb) + #Find fixed point + while work_set: + bb = work_set.pop() + live_in = liveness_for_block(bb, live_at_end[bb]) + if live_in != live_at_start[bb]: + assert len(live_in) > len(live_at_start[bb]) + live_at_start[bb] = live_in + for pred in self._bb_pred[bb]: + work_set.add(pred) + live_at_end[pred] = live_at_end[pred].union(live_in) + return live_at_start + + + def delete_unreachable_nodes(self): + self._require("reachable") + unreachable = [u for u in self.all_nodes if u not in self._reachable] + if not unreachable: + return + for mapping in (self.definitions, self.deletions, self.uses): + for u in unreachable: + if u in mapping: + del mapping[u] + for u in unreachable: + self.use_all_nodes.discard(u) + self.remove_node(u) + #Make sure we retain the order of all_nodes. + self.all_nodes = [r for r in self.all_nodes if r in self._reachable] + self.clear_computed() + + def dominated_by(self, node): + self._require('idoms') + assert node in self, str(node) + " is not in graph" + dominated = set([node]) + todo = set(self.succ[node]) + while todo: + n = todo.pop() + if n in dominated: + continue + #Unreachable nodes will not be in self._idoms + if n in self._idoms and self._idoms[n] in dominated: + dominated.add(n) + todo.update(self.succ[n]) + return dominated + + def strictly_dominates(self, pre, post): + self._require('idoms') + while post in self._idoms: + post = self._idoms[post] + if pre == post: + return True + return False + + def reaches_while_dominated(self, pre, post, control): + ''' Holds if `pre` reaches `post` while remaining in the + region dominated by `control`.''' + self._require('dominance_frontier') + dominance_frontier = self._dominance_frontier[control] + todo = { pre } + reached = set() + while todo: + node = todo.pop() + if node in dominance_frontier: + continue + if node == post: + return True + if node in reached: + continue + reached.add(node) + todo.update(self.succ[node]) + return False + + def split(self, splits): + #We expect the following to be true (we assert it later): + #top dominates heads for all splits. + # Key class for (partially) ordering node by inverse dominance + class DominanceKey(object): + def __init__(this, node): + this.node = node + def __lt__(this, other): + return self.strictly_dominates(other.node, this.node) + splits.sort(key=lambda arg: DominanceKey(arg[0])) + for top, heads in splits: + self.single_split(top, heads) + + def single_split(self, top, heads): + '''Splits the flow-graph from the branches. All code that succeeds each head + becomes unique to that head, limited to those nodes that are strictly dominated by top, + excluding exit nodes. + ''' + assert top in self, "top " + str(top) + " is not in graph" + strictly_dominated_by_top = self.dominated_by(top) + strictly_dominated_by_top.remove(top) + for head in heads: + assert head in self, "head " + str(head) + " is not in graph" + assert head in strictly_dominated_by_top, str(head) + " is not dominated by " + str(top) + + def successors_within_region(start, region): + #Find all nodes in region, that are reached from start (without leaving region) + nodes = set([start]) + todo = set(self.succ[start]) + while todo: + s = todo.pop() + if s not in nodes and s in region: + nodes.add(s) + todo.update(self.succ[s]) + return nodes + + subgraphs = [ (head, successors_within_region(head, strictly_dominated_by_top)) for head in heads ] + + #Copy the two subgraphs + head_copies = [] + branch_copies = [] + for head, branch in subgraphs: + head_copy, branch_copy = self._copy_subgraph(head, branch, True) + head_copies.append(head_copy) + branch_copies.append(branch_copy) + #The original will be deleted by `delete_unreachable_nodes()` + + #Make sure we retain the order of all_nodes. + self.all_nodes = [n for n in self.all_nodes if n in self.succ] + #All computed values are now invalid. + self.clear_computed() + self.delete_unreachable_nodes() + return head_copies, branch_copies + + def _copy_subgraph(self, entry, to_copy, remove_links): + copies = {} + assert entry in to_copy, repr(entry) + " is not in sub-graph " + str(to_copy) + for node in to_copy: + copy = node.copy() + copies[node] = copy + self.add_node(copy) + ann = self.node_annotations.get(node) + self.annotate_node(copy, ann) + if node == entry: + res = copy + for mapping in (self.definitions, self.deletions, self.uses): + if node in mapping: + mapping[copy] = mapping[node] + if node in self.use_all_nodes: + self.use_all_nodes.add(copy) + + for node in to_copy: + for s in self.succ[node]: + ann = self.edge_annotations.get((node,s)) + if s in to_copy: + self.add_edge(copies[node], copies[s]) + self.annotate_edge(copies[node], copies[s], ann) + else: + self.add_edge(copies[node], s) + self.annotate_edge(copies[node], s, ann) + if remove_links: + predecessors_to_remove = set() + for p in self.pred[entry]: + ann = self.edge_annotations.get((p, entry)) + if p not in to_copy: + self.add_edge(p, copies[entry]) + self.annotate_edge(p, copies[entry], ann) + predecessors_to_remove.add(p) + for p in predecessors_to_remove: + self.remove_edge(p, entry) + return res, set(copies.values()) + + def unroll(self, head, bodystart): + body = self.dominated_by(bodystart) + entries = [p for p in self.pred[head] if p not in body] + bodystart2, _ = self._copy_subgraph(bodystart, body, False) + prehead = head.copy() + self.add_node(prehead) + ann = self.node_annotations.get(head) + self.annotate_node(prehead, ann) + for s in self.succ[head]: + if s is not bodystart: + self.add_edge(prehead, s) + ann = self.edge_annotations.get((head, s)) + self.annotate_edge(prehead, s, ann) + self.add_edge(prehead, bodystart2) + ann = self.edge_annotations.get((head, bodystart)) + self.annotate_edge(prehead, bodystart2, ann) + for p in entries: + ann = self.edge_annotations.get((p, head)) + self.remove_edge(p, head) + self.add_edge(p, prehead) + self.annotate_edge(p, prehead, ann) + self.clear_computed() + self.delete_unreachable_nodes() + +class SSA_Var(object): + 'A single static assignment variable' + + __slots__ = [ 'variable', 'node' ] + + def __init__(self, variable, node): + self.variable = variable + self.node = node + + def __repr__(self): + return 'SSA_Var(%r, %r)' % (self.variable.id, self.node) + + +def _reverse_map(mapping): + 'Reverse a mapping of keys -> values to value->set(keys)' + inv_map = {} + for k, v in mapping.items(): + if v not in inv_map: + inv_map[v] = SmallSet() + inv_map[v].add(k) + return inv_map diff --git a/python/extractor/semmle/logging.py b/python/extractor/semmle/logging.py new file mode 100644 index 00000000000..fd2dc6a1916 --- /dev/null +++ b/python/extractor/semmle/logging.py @@ -0,0 +1,393 @@ +''' +Support for multi-process safe logging with colorized output. +''' + +import os +import sys +import traceback +import multiprocessing +import enum +import datetime + + +#Use standard Semmle logging levels + +OFF = 0 +ERROR = 1 +WARN = 2 +INFO = 3 +DEBUG = 4 +TRACE = 5 +TRACEBACK = 6 + +COLOR = 8 + +if os.name == "nt": + MAGENTA = "" + GREY = "" + BLUE = "" + YELLOW = "" + RED = "" + RESET = "" +else: + MAGENTA = "\x1b[35m" + GREY = "\x1b[2m\x1b[37m" + BLUE = "\x1b[34m" + YELLOW = "\x1b[33m" + RED = "\x1b[31m" + RESET = '\x1b[0m' + +LOG_PREFIX = { + TRACE: "[TRACE] ", + DEBUG: "[DEBUG] ", + INFO: "[INFO] ", + WARN: "[WARN] ", + ERROR: "[ERROR] ", + TRACEBACK: "[TRACEBACK] ", + COLOR | TRACE: GREY + "[TRACE] ", + COLOR | DEBUG: "[DEBUG] ", + COLOR | INFO: BLUE + "[INFO] ", + COLOR | WARN: YELLOW + "[WARN] ", + COLOR | ERROR: RED + "[ERROR] ", + COLOR | TRACEBACK: MAGENTA + "[TRACEBACK] ", +} + +def write_message(level, text): + '''Write a message direct to stdout without queueing.''' + reset = RESET if level & COLOR == COLOR else '' + print(LOG_PREFIX[level] + text + reset) + sys.stdout.flush() + +def write_message_with_proc(level, proc_id, text): + reset = RESET if level & COLOR == COLOR else '' + print(LOG_PREFIX[level] + proc_id + text + reset) + sys.stdout.flush() + +_logging_process = None + +def stop(): + _logging_process.join() + +class Logger(object): + '''Multi-process safe logger''' + + def __init__(self, level=WARN, color=False): + global _logging_process + self.proc_id = "" + self.level = level + # macOS does not support `fork` properly, so we must use `spawn` instead. + method = 'spawn' if sys.platform == "darwin" else None + try: + ctx = multiprocessing.get_context(method) + except AttributeError: + # `get_context` doesn't exist -- we must be running an old version of Python. + ctx = multiprocessing + self.queue = ctx.Queue() + _logging_process = ctx.Process(target=_message_loop, args=(self.queue,)) + _logging_process.start() + self.color = COLOR if color else 0 + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.close() + return False + + def set_process_id(self, proc_id): + '''Set the process id to be included in log messages.''' + self.proc_id = "[%d] " % proc_id + + def setLevel(self, level): + self.level = level + + def log(self, level, fmt, *args): + '''Log a message in a process safe fashion. + Message will be of the form [level] fmt%args.''' + if level <= self.level: + txt = fmt % args + try: + self.queue.put((self.color | level, self.proc_id, txt), False) + except Exception: + self.write_message(self.color | level, txt) + + def debug(self, fmt, *args): + self.log(DEBUG, fmt, *args) + + def info(self, fmt, *args): + self.log(INFO, fmt, *args) + + def warning(self, fmt, *args): + self.log(WARN, fmt, *args) + + def error(self, fmt, *args): + self.log(ERROR, fmt, *args) + + def trace(self, fmt, *args): + self.log(TRACE, fmt, *args) + + def traceback(self, level=INFO): + if level > self.level: + return + lines = trim_traceback(traceback.format_exc()) + for line in lines: + try: + self.queue.put((self.color | TRACEBACK, self.proc_id, line), False) + except Exception: + self.write_message(TRACEBACK, line) + + def close(self): + self.queue.put(None) + + def write_message(self, level, text): + '''Write a message direct to stdout without queueing. + Safe to use even after logger is closed. + Calling this concurrently from different processes or before calling logger.close() + may cause messages to become interleaved.''' + if level <= self.level: + write_message_with_proc(self.color | level, self.proc_id, text) + +#Function run by logger output process +def _message_loop(log_queue): + # use utf-8 as the character encoding for stdout/stderr to be able to properly + # log/print things on systems that use bad default encodings (windows). + sys.stdout.reconfigure(encoding='utf-8') + sys.stderr.reconfigure(encoding='utf-8') + + common = set() + while True: + try: + msg = log_queue.get() + if msg is None: + return + level, proc_id, text = msg + if proc_id: + write_message_with_proc(level, proc_id, text) + elif (level, text) not in common: + write_message(level, text) + common.add((level, text)) + except KeyboardInterrupt: + #Will be handled in other processes. + pass + +def select_traceback_lines(lines, limit_start=30, limit_end=12): + '''Select a subset of traceback lines to be displayed, cutting out the middle part of the + traceback if the length exceeds `limit_start + limit_end`. + This is intended to avoid displaying too many lines of tracebacks + that are not relevant to the user.''' + lines = lines.splitlines() + num_lines = len(lines) + limit = limit_start + limit_end + if num_lines <= limit: + yield from lines + else: + yield from lines[:limit_start] + yield "... {} lines skipped".format(num_lines - limit) + yield from lines[-limit_end:] + + +def trim_traceback(lines): + trimmed = [] + for line in select_traceback_lines(lines): + shortline = line.strip() + try: + if shortline.startswith("File"): + shortline = '"semmle' + shortline.split("semmle")[-1] + elif shortline.startswith("..."): + pass + else: + continue + except Exception: + #Formatting error, just emit line as-is. + pass + trimmed.append(shortline) + return trimmed + +class StructuredLogObject(object): + """ + Base class for CodeQL diagnostic message format + + see https://github.com/github/code-scanning/blob/main/docs/adrs/0035-diagnostics.md#codeql-diagnostic-message-format + """ + def to_dict(self): + # Discard any entries with a value of `None` + def f(v): + if isinstance(v, StructuredLogObject): + return v.to_dict() + return v + return {k: f(v) for k, v in self.__dict__.items() if v is not None} + +class Severity(StructuredLogObject, enum.Enum): + ERROR = "error" + WARNING = "warning" + NOTE = "note" + + def to_dict(self): + return self.value + +class Source(StructuredLogObject): + def __init__(self, id, name, extractorName="python"): + self.id = id + self.name = name + self.extractorName = extractorName + + def extractorName(self, extractorName): + self.extractorName = extractorName + return self + +class Visibility(StructuredLogObject): + def __init__(self, statusPage=False, cliSummaryTable=False, telemetry=False): + self.statusPage = statusPage + self.cliSummaryTable = cliSummaryTable + self.telemetry = telemetry + + def statusPage(self, statusPage): + self.statusPage = statusPage + return self + + def cliSummaryTable(self, cliSummaryTable): + self.cliSummaryTable = cliSummaryTable + return self + + def telemetry(self, telemetry): + self.telemetry = telemetry + return self + +class Location(StructuredLogObject): + def __init__(self, file=None, startLine=None, startColumn=None, endLine=None, endColumn=None): + self.file = file + self.startLine = startLine + self.startColumn = startColumn + + # If you set startline/startColumn you MUST also set endLine/endColumn, so we + # ensure they are also set. + self.endLine = endLine + if endLine is None and startLine is not None: + self.endLine = startLine + + self.endColumn = endColumn + if endColumn is None and startColumn is not None: + self.endColumn = startColumn + + def file(self, file): + self.file = file + return self + + def startLine(self, startLine): + self.startLine = startLine + return self + + def startColumn(self, startColumn): + self.startColumn = startColumn + return self + + def endLine(self, endLine): + self.endLine = endLine + return self + + def endColumn(self, endColumn): + self.endColumn = endColumn + return self + +class DiagnosticMessage(StructuredLogObject): + def __init__(self, source, severity=Severity.WARNING, location=None, markdownMessage=None, plaintextMessage=None, helpLinks=None, visibility=None, attributes=None, timestamp=None): + self.timestamp = timestamp or datetime.datetime.now().isoformat() + self.source = source + self.severity = severity + self.location = location + self.markdownMessage = markdownMessage + self.plaintextMessage = plaintextMessage + self.helpLinks = helpLinks + if visibility is None: + visibility = Visibility() + self.visibility = visibility + self.attributes = attributes + + def with_severity(self, severity): + self.severity = severity + return self + + def with_location(self, location): + self.location = location + return self + + def markdown(self, message): + self.markdownMessage = message + return self + + def text(self, message): + self.plaintextMessage = message + return self + + def help_link(self, link): + if self.helpLinks is None: + self.helpLinks = [] + self.helpLinks.append(link) + return self + + def cli_summary_table(self): + self.visibility.cliSummaryTable = True + return self + + def status_page(self): + self.visibility.statusPage = True + return self + + def telemetry(self): + self.visibility.telemetry = True + return self + + def attribute(self, key, value): + if self.attributes is None: + self.attributes = {} + self.attributes[key] = value + return self + + def with_timestamp(self, timestamp): + self.timestamp = timestamp + return self + +def get_stack_trace_lines(): + """Creates a stack trace for inclusion into the `attributes` part of a diagnostic message. + Limits the size of the stack trace to 5000 characters, so as to not make the SARIF file overly big. + """ + lines = trim_traceback(traceback.format_exc()) + trace_length = 0 + for i, line in enumerate(lines): + trace_length += len(line) + if trace_length > 5000: + return lines[:i] + return lines + +def syntax_error_message(exception, unit): + l = Location(file=unit.path, startLine=exception.lineno, startColumn=exception.offset) + error = (DiagnosticMessage(Source("py/diagnostics/syntax-error", "Could not process some files due to syntax errors"), Severity.WARNING) + .with_location(l) + .markdown("A parse error occurred while processing `{}`, and as a result this file could not be analyzed. Check the syntax of the file using the `python -m py_compile` command and correct any invalid syntax.".format(unit.path)) + .attribute("traceback", get_stack_trace_lines()) + .attribute("args", exception.args) + .status_page() + .cli_summary_table() + .telemetry() + ) + return error + +def recursion_error_message(exception, unit): + l = Location(file=unit.path) + return (DiagnosticMessage(Source("py/diagnostics/recursion-error", "Recursion error in Python extractor"), Severity.ERROR) + .with_location(l) + .text(exception.args[0]) + .attribute("traceback", get_stack_trace_lines()) + .attribute("args", exception.args) + .telemetry() + ) + +def internal_error_message(exception, unit): + l = Location(file=unit.path) + return (DiagnosticMessage(Source("py/diagnostics/internal-error", "Internal error in Python extractor"), Severity.ERROR) + .with_location(l) + .text("Internal error") + .attribute("traceback", get_stack_trace_lines()) + .attribute("args", exception.args) + .telemetry() + ) diff --git a/python/extractor/semmle/path_filters.py b/python/extractor/semmle/path_filters.py new file mode 100644 index 00000000000..cb1a4d9b8bc --- /dev/null +++ b/python/extractor/semmle/path_filters.py @@ -0,0 +1,71 @@ +import os +import re + +def escape(pattern): + '''Escape special characters''' + ESCAPE = "(){}[].^$+\\?|" + def escape_char(char): + if char in ESCAPE: + return "\\" + char + else: + return char + return ''.join(escape_char(c) for c in pattern) + +SEP = escape(os.sep) + +STAR_STAR_REGEX = "([^%s]*%s)*" % (SEP, SEP) +STAR_REGEX = "[^%s]*" % SEP + +def validate_pattern(pattern): + '''Validate that an include/exclude pattern is of the correct syntax.''' + kind, glob = pattern.split(":") + if not kind in ("include", "exclude"): + raise SyntaxError("Illegal type: '%s'" % kind) + parts = glob.split("/") + for p in parts: + if "**" in p and p != "**": + raise SyntaxError("Illegal path element: '%s'" % p) + +def glob_part_to_regex(glob, add_sep): + '''Convert glob part to regex pattern''' + if glob == "**": + return STAR_STAR_REGEX + if '*' in glob: + pattern = glob.replace('*', STAR_REGEX) + else: + pattern = glob + if add_sep: + return pattern + SEP + else: + return pattern + +def glob_to_regex(glob, prefix=""): + '''Convert entire glob to a compiled regex''' + glob = glob.strip().strip("/") + parts = glob.split("/") + #Trailing '**' is redundant, so strip it off. + if parts[-1] == "**": + parts = parts[:-1] + if not parts: + return ".*" + parts = [ glob_part_to_regex(escape(p), True) for p in parts[:-1] ] + [ glob_part_to_regex(escape(parts[-1]), False) ] + # we need to escape the prefix, specifically because on windows the prefix will be + # something like `C:\\folder\\subfolder\\` and without escaping the + # backslash-path-separators will get interpreted as regex escapes (which might be + # invalid sequences, causing the extractor to crash) + full_pattern = escape(prefix) + ''.join(parts) + "(?:" + SEP + ".*|$)" + return re.compile(full_pattern) + +def filter_from_pattern(pattern, prev_filter, prefix): + '''Create a filter function from a pattern and the previous filter. + The pattern takes precedence over the previous filter + ''' + validate_pattern(pattern) + kind, glob = pattern.strip().split(":") + result = kind == "include" + regex = glob_to_regex(glob, prefix) + def filter(path): + if regex.match(path): + return result + return prev_filter(path) + return filter diff --git a/python/extractor/semmle/path_rename.py b/python/extractor/semmle/path_rename.py new file mode 100644 index 00000000000..3a72d41e971 --- /dev/null +++ b/python/extractor/semmle/path_rename.py @@ -0,0 +1,44 @@ +import os +import semmle.projectlayout as projectlayout +from semmle.util import SemmleError + +__all__ = "renamer_from_options_and_env" + +def _realpath(path): + try: + return os.path.realpath(path) + except IOError: + return os.path.abspath(path) + +def renamer_from_options_and_env(options, logger): + 'Returns a renamer function which takes a path and returns the nominal path' + preserve_symlinks = os.environ.get('SEMMLE_PRESERVE_SYMLINKS', "") + if options.no_symlinks or preserve_symlinks.lower() == "true": + pre_rename = os.path.abspath + else: + pre_rename = _realpath + + if options.renamer: + try: + module = __import__(options.renamer, fromlist=['get_renamer']) + rename = module.get_renamer() + except (AttributeError, ImportError): + raise SemmleError("Cannot get renamer from module " + options.renamer) + else: + path_transformer = os.environ.get("SEMMLE_PATH_TRANSFORMER", None) + if path_transformer: + logger.info("Using path transformer '%s'", path_transformer) + rename = projectlayout.get_renamer(path_transformer) + else: + rename = lambda path : path + + if os.name == "nt": + def post_rename(path): + if path[1] == ':': + path = path[0].upper() + path[1:] + return path + else: + post_rename = lambda path : path + + renamer = lambda path : post_rename(rename(pre_rename(path))) + return renamer diff --git a/python/extractor/semmle/populator.py b/python/extractor/semmle/populator.py new file mode 100644 index 00000000000..c2d6b6277c9 --- /dev/null +++ b/python/extractor/semmle/populator.py @@ -0,0 +1,148 @@ +import sys +import os +import subprocess +from ast import literal_eval + +from semmle import logging +from semmle import traverser +from semmle import cmdline +from semmle import worker +from semmle.util import VERSION, update_analysis_version, get_analysis_major_version +from buildtools.version import executable + +'''The populator generates trap files from a Python project. +The populator consists of two parts: a traverser front end which traverses the file +system and multiple worker back ends which extract information from the modules. +''' + +#NOTE: The front-end is simply an iterable of "extractables" and it should be easy to +#plug-in new front-ends if needed. + +def cleanup_sys_path(path): + '''Clean up sys.path removing duplicates and + current working directory, making it safe for analysis. + ''' + #Remove duplicates + path = [ p for i, p in enumerate(path) if i == 0 or p != path[i-1] ] + #Remove curent working directory + cwd = os.getcwd() + if cwd in path: + path.remove(cwd) + return path + +def get_py2_sys_path(logger, py3_sys_path): + '''Get the sys.path for Python 2, if it is available. If no Python 2 is available, + simply return the Python 3 sys.path. Returns a tuple of the sys.path and a boolean indicating + whether Python 2 is available.''' + try: + command = " ".join(executable(2) + ['-c "import sys; print(sys.path)"']) + # We need `shell=True` here in order for the test framework to function correctly. For + # whatever reason, the `PATH` variable is ignored if `shell=False`. + # Also, this in turn forces us to give the whole command as a string, rather than a list. + # Otherwise, the effect is that the Python interpreter is invoked _as a REPL_, rather than + # with the given piece of code. + output = subprocess.check_output(command, shell=True).decode(sys.getfilesystemencoding()) + py2_sys_path = literal_eval(output) + # Ensure that the first element of the sys.path is the same as the Python 3 sys.path -- + # specifically a reference to our local `tools` directory. This ensures that the `six` stubs + # are picked up from there. The item we're overwriting here is '', which would be cleaned up + # later anyway. + py2_sys_path[0] = py3_sys_path[0] + return py2_sys_path, True + except (subprocess.CalledProcessError, ValueError, SyntaxError) as e: + logger.error("Error while getting Python 2 sys.path:") + logger.error(e) + logger.info("No Python 2 found. Using Python 3 sys.path.") + return py3_sys_path, False + +def main(sys_path = sys.path[:]): + options, args = cmdline.parse(sys.argv[1:]) + logger = logging.Logger(options.verbosity, options.colorize) + # This is not the prettiest way to do it, but when running tests we want to ensure that the + # `--lang` flag influences the analysis version (e.g. so that we include the correct stdlib TRAP + # file). So, we change the values of the appropriate variables (which would otherwise be based + # on `CODEQL_EXTRACTOR_PYTHON_ANALYSIS_VERSION`), overwriting the previous values. + if options.language_version: + last_version = options.language_version[-1] + update_analysis_version(last_version) + + found_py2 = False + if get_analysis_major_version() == 2: + # Setup `sys_path` to use the Python 2 standard library + sys_path, found_py2 = get_py2_sys_path(logger, sys_path) + + # use utf-8 as the character encoding for stdout/stderr to be able to properly + # log/print things on systems that use bad default encodings (windows). + sys.stdout.reconfigure(encoding='utf-8') + sys.stderr.reconfigure(encoding='utf-8') + + sys.setrecursionlimit(2000) + sys_path = cleanup_sys_path(sys_path) + options.sys_path = sys_path[1:] + + if sys.version_info.major == 2: + logger.error("Extraction using Python 2 is not supported.") + logger.warning("To use the Python extractor, please ensure that Python 3 is available on your system.") + logger.warning("For more information, see https://codeql.github.com/docs/codeql-overview/system-requirements/#additional-software-requirements") + logger.warning("and https://codeql.github.com/docs/codeql-overview/supported-languages-and-frameworks/#languages-and-compilers") + logger.close() + logging.stop() + sys.exit(1) + elif found_py2: + logger.info("Extraction will use the Python 2 standard library.") + else: + logger.info("Extraction will use the Python 3 standard library.") + logger.info("sys_path is: %s", sys_path) + try: + the_traverser = traverser.Traverser(options, args, logger) + except Exception as ex: + logger.error("%s", ex) + logger.close() + logging.stop() + sys.exit(1) + run(options, args, the_traverser, logger) + + +def run(options, args, the_traverser, logger: logging.Logger): + logger.info("Python version %s", sys.version.split()[0]) + logger.info("Python extractor version %s", VERSION) + if 'CODEQL_EXTRACTOR_PYTHON_SOURCE_ARCHIVE_DIR' in os.environ: + archive = os.environ['CODEQL_EXTRACTOR_PYTHON_SOURCE_ARCHIVE_DIR'] + elif 'SOURCE_ARCHIVE' in os.environ: + archive = os.environ['SOURCE_ARCHIVE'] + else: + archive = None + trap_dir = cmdline.output_dir_from_options_and_env(options) + try: + pool = worker.ExtractorPool.from_options(options, trap_dir, archive, logger) + except ValueError as ve: + logger.error("%s", ve) + logger.close() + sys.exit(1) + try: + exitcode = 0 + pool.extract(the_traverser) + except worker.ExtractorFailure: + exitcode = 1 + except KeyboardInterrupt: + exitcode = 2 + logger.info("Keyboard interrupt") + except BaseException as ex: + exitcode = 3 + logger.error("Unexpected exception: %s ", ex) + logger.traceback(logging.WARN) + finally: + if exitcode: + logger.debug("Stopping...") + pool.stop() + else: + logger.debug("Writing interpreter trap") + pool.close() + logger.close() + logging.stop() + logger.write_message(logging.DEBUG, "Stopped." if exitcode else "Done.") + if exitcode: + sys.exit(exitcode) + +if __name__ == "__main__": + main() diff --git a/python/extractor/semmle/profiling.py b/python/extractor/semmle/profiling.py new file mode 100644 index 00000000000..02308434096 --- /dev/null +++ b/python/extractor/semmle/profiling.py @@ -0,0 +1,70 @@ +from . import util +import os.path +import sys +from time import time +import collections + +__all__ = [ 'get_profiler' ] + +class NoProfiler(object): + '''Dummy profiler''' + + def __init__(self): + pass + + def __enter__(self): + return self + + def __exit__(self, *args): + pass + +class StatProfiler(object): + ''' statprof based statistical profiler''' + + def __init__(self, outpath): + self.outpath = outpath + + def __enter__(self): + statprof.start() + return self + + def __exit__(self, *args): + statprof.stop() + with open(self.outpath, "w") as fd: + statprof.display(fd) + + +def get_profiler(options, id, logger): + '''Returns a profile based on options and version. `id` is used to + label the output file.''' + global statprof + if options.profile_out: + if sys.version_info >= (3,0): + logger.warning("Cannot create profiler: statprof is Python2 only.") + else: + try: + import statprof + util.makedirs(options.profile_out) + outpath = os.path.join(options.profile_out, "profile-%s.txt" % id) + logger.info("Writing profile information to %s", outpath) + return StatProfiler(outpath) + except ImportError: + logger.warning("Cannot create profiler: no statprof module.") + except Exception as ex: + logger.warning("Cannot create profiler: %s", ex) + return NoProfiler() + +class MillisecondTimer(object): + + def __init__(self): + self.elapsed = 0.0 + + def __enter__(self): + self.start = time() + return self + + def __exit__(self, *_): + self.elapsed += (time() - self.start)*1000 + + +timers = collections.defaultdict(MillisecondTimer) diff --git a/python/extractor/semmle/projectlayout.py b/python/extractor/semmle/projectlayout.py new file mode 100644 index 00000000000..ec657d2ae24 --- /dev/null +++ b/python/extractor/semmle/projectlayout.py @@ -0,0 +1,364 @@ +# +# This is a port of com.semmle.extractor.projectstructure.ProjectLayout +# and must be kept in sync +# + +"""Project-layout files are used to transform or exclude paths. The format +is described at https://semmle.com/wiki/display/SD/project-layout+format""" + +__ALL__ = [ 'load', 'ProjectLayout' ] + +import collections +import re +from functools import total_ordering +import sys + +def get_renamer(filename): + layout = load(filename) + def rename(path): + renamed = layout.artificial_path(path) + return path if renamed is None else renamed + return rename + +def load(filename): + """Load a project-layout file from 'filename'.""" + with open(filename, 'rb') as f: + content = f.read().decode('utf-8') + lines = [ line.strip() for line in content.split('\n') ] + return ProjectLayout(lines) + +def _escape_string_literal_for_regexp(literal, preserve): + ESCAPE = u"(){}[].^$+\\*?" + def escape(char): + if char in ESCAPE and not char in preserve: + return u"\\" + char + else: + return char + return u"".join(escape(c) for c in literal) + + +class ProjectLayout(object): + """ A project-layout file optionally begins with an '@' + followed by the name the project should be renamed to. + Optionally, it can then be followed by a list of + include/exclude patterns (see below) which are kept + as untransformed paths. This is followed by one or + more clauses. Each clause has the following form: + + #virtual-path + path/to/include + another/path/to/include + -/path/to/include/except/this + + i.e. one or more paths (to include) and zero or more paths + prefixed by minus-signs (to exclude).""" + + def __init__(self, lines): + """Construct a project-layout object from an array of strings, each + corresponding to one line of the project-layout. This constructor is + for testing. Usually, use the 'load' function.""" + + self._project = None + # Map from virtual path prefixes (following the '#' in the + # project-layout) to the sequence of patterns that fall into that + # section. Declared as an OrderedDict since iteration order matters -- + # the blocks are processed in the same order as they occur in the + # project-layout. + self._rewrites = collections.OrderedDict() + virtual = u"" + section = _Section() + self._rewrites[virtual] = section + num = 0 + for line in lines: + num += 1 + if not line: + continue + if line[0] == u'@': + if self._project is not None: + raise _error(u"Multiple project names in project-layout", num) + self._project = self._tail(line) + elif line[0] == u'#': + virtual = self._tail(line) + if virtual in self._rewrites: + raise _error(u"Duplicate virtual path prefix " + virtual, num) + section = _Section(virtual) + self._rewrites[virtual] = section + elif line[0] == u'-': + section.add(_Rewrite(self._tail(line), num)) + else: + section.add(_Rewrite(line, num, virtual)) + + @classmethod + def _tail(cls, line): + return line[1:].strip() + + def project_name(self, default=None): + """ Get the project name, if specified by the project-layout. + If default is specified, it will be returned if no project name + is specified. Otherwise, an exception is thrown.""" + + if self._project is not None: + return self._project + if default is not None: + return default + raise Exception(u"Project specificatino does not define a project name.") + + def sections(self): + """return the section headings (aka virtual paths)""" + return self._rewrites.keys() + + def section_is_empty(self, section): + """Determine whether or not a particular section in this + project-layout is empty (has no include/exclude patterns).""" + + if section in self._rewrites: + return self._rewrites[section].is_empty() + raise Exception(u"Section does not exist: " + section) + + def rename_section(self, old, new): + """Reaname a section in this project-layout.""" + + if not old in self._rewrites: + raise Exception(u"Section does not exist: " + old) + section = self._rewrites.pop(old) + section.rename(new) + self._rewrites[new] = section + + def sub_layout(self, section_name): + """Return a project-layout file for just one of the sections in this + project-layout. This is done by copying all the rules from the + section, and changing the section heading (beginning with '#') + to a project name (beginning with '@').""" + + section = self._rewrites.get(section_name, None) + if section is None: + raise Exception(u"Section does not exist: " + section) + return section.to_layout() + + def artificial_path(self, path): + """Maps a path to its corresponding artificial path according to the + rules in this project-layout. If the path is excluded (either + explicitly, or because it is not mentioned in the project-layout) + then None is returned. + + Paths should start with a leading forward-slash.""" + + prefixes = _Section.prefixes(path) + for section in self._rewrites.values(): + rewrite = section.match(prefixes); + rewritten = None; + if rewrite is not None: + rewritten = rewrite.rewrite(path); + if rewritten is not None: + return rewritten + return None + + def include_file(self, path): + """Checks whether a path should be included in the project specified by + this file. A file is included if it is mapped to some location. + + Paths should start with a leading forward-slash.""" + + return self.artificial_path(path) is not None + + +class _Section(object): + """Each section corresponds to a block beginning with '#some/path'. There + is also an initial section for any include/exclude patterns before the + first '#'.""" + + def __init__(self, virtual=u""): + self._virtual = virtual + self._simple_rewrites = collections.OrderedDict() + self._complex_rewrites = [] + + def to_layout(self): + result = [] + rewrites = [] + rewrites.extend(self._simple_rewrites.values()) + rewrites.extend(self._complex_rewrites) + rewrites.sort() + + result.append(u'@' + self._virtual) + for rewrite in rewrites: + result.append(str(rewrite)) + result.append(u'') + return u'\n'.join(result) + + def rename(self, new): + self._virtual = new + for rewrite in self._simple_rewrites.values(): + rewrite.virtual = new + for rewrite in self._complex_rewrites: + rewrite.virtual = new + + def add(self, rewrite): + if rewrite.is_simple(): + self._simple_rewrites[rewrite.simple_prefix()] = rewrite + else: + self._complex_rewrites.append(rewrite) + + def is_empty(self): + return not self._simple_rewrites and not self._complex_rewrites + + @classmethod + def prefixes(cls, path): + result = [path] + i = len(path) + while (i > 1): + i = path.rfind(u'/', 0, i) + result.append(path[:i]) + result.append(u"/") + return result; + + def match(self, prefixes): + best = None + for prefix in prefixes: + match = self._simple_rewrites.get(prefix, None) + if match is not None: + if best is None or best._line < match._line: + best = match; + # Last matching rewrite 'wins' + for rewrite in reversed(self._complex_rewrites): + if rewrite.matches(prefixes[0]): + if best is None or best._line < rewrite._line: + best = rewrite; + # no point continuing + break; + return best; + +@total_ordering +class _Rewrite(object): + """Each Rewrite corresponds to a single include or exclude line in the + project-layout. For example, for following clause there would be three + Rewrite objects: + + #Source + /src + /lib + -/src/tests + + For includes use the two-argument constructor; for excludes the + one-argument constructor.""" + + # The intention is to allow the ** wildcard when followed by a slash only. The + # following should be invalid: + # - a / *** / b (too many stars) + # - a / ** (** at the end should be omitted) + # - a / **b (illegal) + # - a / b** (illegal) + # - ** (the same as a singleton '/') + # This regular expression matches ** when followed by a non-/ character, + # or the end of string. + _verify_stars = re.compile(u".*(?:\\*\\*[^/].*|\\*\\*$|[^/]\\*\\*.*)") + + def __init__(self, path, line, virtual=None): + if virtual is None: + exclude = path + self._line = line; + self._original = u'-' + exclude; + if not exclude.startswith(u"/"): + exclude = u'/' + exclude + if exclude.find(u"//") != -1: + raise _error(u"Illegal '//' in exclude path", line) + if self._verify_stars.match(exclude): + raise _error(u"Illegal use of '**' in exclude path", line) + if exclude.endswith(u"/"): + exclude = exclude[0 : -1] + self._pattern = self._compile_prefix(exclude); + exclude = exclude.replace(u"//", u"/") + if len(exclude) > 1 and exclude.endswith(u"/"): + exclude = exclude[0 : -1] + self._simple = None if exclude.find(u"*") != -1 else exclude + else: + include = path + self._line = line; + self._original = include; + if not include.startswith(u"/"): + include = u'/' + include + doubleslash = include.find(u"//") + if doubleslash != include.find(u"//"): + raise _error(u"More than one '//' in include path (project-layout)", line) + if self._verify_stars.match(include): + raise _error(u"Illegal use of '**' in include path (project-layout)", line) + if not virtual.startswith(u"/"): + virtual = u"/" + virtual + if virtual.endswith(u"/"): + virtual = virtual[0 : -1] + self._pattern = self._compile_prefix(include); + include = include.replace(u"//", u"/"); + if len(include) > 1 and include.endswith(u"/"): + include = include[0 : -1] + self._simple = None if include.find(u"*") != -1 else include + self._virtual = virtual; + + @classmethod + def _compile_prefix(cls, pattern): + """ + Patterns are matched by translation to regex. The following invariants + are assumed to hold: + + - The pattern starts with a '/'. + - There are no occurrences of '**' that is not surrounded by slashes + (unless it is at the start of a pattern). + - There is at most one double slash. + + The result of the translation has precisely one capture group, which + (after successful matching) will contain the part of the path that + should be glued to the virtual prefix. + + It proceeds by starting the capture group either after the double + slash or at the start of the pattern, and then replacing '*' with + '[^/]*' (meaning any number of non-slash characters) and '/**' with + '(?:|/.*)' (meaning empty string or a slash followed by any number of + characters including '/'). + + The pattern is terminated by the term '(?:/.*|$)', saying 'either the + next character is a '/' or the string ends' -- this avoids accidental + matching of partial directory/file names. + + IMPORTANT: Run the ProjectLayoutTests when changing this! + """ + + pattern = _escape_string_literal_for_regexp(pattern, u"*") + if pattern.find(u"//") != -1: + pattern = pattern.replace(u"//", u"(/") + else: + pattern = u"(" + pattern + if pattern.endswith(u"/"): + pattern = pattern[0 : -1] + pattern = pattern.replace(u"/**", u"-///-") + pattern = pattern.replace(u"*", u"[^/]*") + pattern = pattern.replace(u"-///-", u"(?:|/.*)") + return re.compile(pattern + u"(?:/.*|$))") + + def is_simple(self): + return self._simple is not None + + def simple_prefix(self): + """Returns the path included/excluded by this rewrite, if it is + simple, or <code>null</code> if it is not.""" + + return self._simple + + def matches(self, path): + return bool(self._pattern.match(path)) + + def rewrite(self, path): + if self._virtual is None: + return None + matcher = self._pattern.match(path) + if not matcher: + return None + return self._virtual + matcher.group(1); + + def __unicode__(self): + return self._original + + def __lt__(self, other): + return self._line < other._line + + __hash__ = None + +def _error(message, line): + raise Exception(u"%s (line %d)" % (message, line)) diff --git a/python/extractor/semmle/python/AstMeta.py b/python/extractor/semmle/python/AstMeta.py new file mode 100644 index 00000000000..db0e7560fe2 --- /dev/null +++ b/python/extractor/semmle/python/AstMeta.py @@ -0,0 +1,560 @@ +'''Meta nodes for defining database relations''' + +from abc import abstractmethod + +from semmle.util import fprintf + +PREFIX = 'py_' + +__all__ = [ 'order' ] + + +parent_nodes = {} + +class Node(object): + 'Node in the attribute tree, describing relations' + + next_id = 0 + + def __init__(self): + Node.next_id += 1 + self._index = Node.next_id + self._unique_parent = None + + @property + def parents(self): + return parent_of(self) + + def add_child(self, child): + child.add_parent(self) + + def db_key(self, name): + return 'unique int ' + name + ' : ' + self.db_name() + + def is_sub_type(self): + return False + + @staticmethod + def is_union_type(): + return False + + def is_case_type(self): + return False + + @staticmethod + def is_list(): + return False + + @staticmethod + def is_primitive(): + return False + + def prune(self, node_set): + return self + + @abstractmethod + def child_offsets(self, n): + pass + + @abstractmethod + def write_fields(self, out): + pass + + @abstractmethod + def ql_name(self): + pass + + @property + def unique_parent(self): + if self._unique_parent is None: + parents = self.parents + if len(parents.child_offsets(self)) < 2: + self._unique_parent = True + elif parents.is_union_type(): + self._unique_parent = False + for t in parents.types: + if len(t.child_offsets(self)) > 1: + break + else: + self._unique_parent = True + return self._unique_parent + + +class PrimitiveNode(Node): + 'A primitive node: int, str, etc' + + def __init__(self, name, db_name, key, descriptive_name = None): + Node.__init__(self) + assert isinstance(name, str) + self.name = name + self.super_type = None + self.layout = [] + self.fields = [] + self.subclasses = set() + self._key = key + self._db_name = db_name + if descriptive_name is None: + self.descriptive_name = self.name + else: + self.descriptive_name = descriptive_name + + def db_key(self, name): + return self._key + ' ' + name + ' : ' + self._db_name + ' ref' + + @property + def __name__(self): + return self.name + + def ql_name(self): + 'Return Java style name if a schema type, otherwise the specified name' + if self._db_name[0] == '@': + return capitalize(self.name) + else: + return self._db_name + + def relation_name(self): + return pluralize(PREFIX + self.name) + + def db_name(self): + return self._db_name + + def add_parent(self, p): + parent_nodes[self] = UnionNode.join(parent_of(self), p) + + def fixup(self): + pass + + @staticmethod + def is_primitive(): + return True + + def child_offsets(self, n): + return set() + + def write_init(self, out): + fprintf(out, "%s = PrimitiveNode(%s, %s, %s)\n", self.name, + self.name, self._db_name, self._key) + + def write_fields(self, out): + pass + + +def parent_of(node): + if node in parent_nodes: + return parent_nodes[node] + else: + return None + +class ClassNode(Node): + 'A node corresponding to a single AST type' + + def __init__(self, name, super_type = None, descriptive_name = None): + Node.__init__(self) + assert isinstance(name, str) + self.name = name + self._db_name = name + self.super_type = super_type + self.layout = [] + if super_type: + self.fields = list(super_type.fields) + else: + self.fields = [] + self.subclasses = set() + if super_type: + super_type.subclasses.add(self) + if descriptive_name is None: + self.descriptive_name = self.name.lower() + else: + self.descriptive_name = descriptive_name + if self.descriptive_name[0] == '$': + self.descriptive_name = self.descriptive_name[1:] + elif super_type and ' ' not in self.descriptive_name: + self.descriptive_name += ' ' + super_type.descriptive_name + + def field(self, name, field_type, descriptive_name = None, artificial=False, parser_type = None): + if descriptive_name is None: + self.fields.append((name, field_type, name, artificial, parser_type)) + else: + self.fields.append((name, field_type, descriptive_name, artificial, parser_type)) + + def is_stmt_or_expr_subclass(self): + if self.super_type is None: + return False + return self.super_type.name in ('expr', 'stmt') + + def is_sub_type(self): + if self.super_type is None: + return False + return self.super_type.is_case_type() + + def is_case_type(self): + return (self.subclasses + and parent_of(self)) + + def fixup(self): + self.add_children() + self.compute_layout() + + def add_parent(self, p): + parent_nodes[self] = UnionNode.join(parent_of(self), p) + if self.super_type: + self.super_type.add_parent(p) + + def add_children(self): + for f, f_node, _, _, _ in self.fields: + self.add_child(f_node) + + def compute_layout(self): + fields = self.fields + lists = 0 + for f, f_node, _, _, _ in fields: + if (isinstance(f_node, ListNode) and + f_node.item_type.__name__ != 'stmt'): + lists += 1 + index = 0 + inc = 1 + for f, f_node, docname, artificial, pt in fields: + self.layout.append((f, f_node, index, docname, artificial, pt)) + index += inc + + def relation_name(self): + return pluralize(PREFIX + self._db_name) + + def set_name(self, name): + self._db_name = name + + @property + def __name__(self): + return self.name + + def ql_name(self): + if self._db_name == 'str': + return 'string' + elif self._db_name in ('int', 'float'): + return self.db_name + name = self._db_name + return ''.join(capitalize(part) for part in name.split('_')) + + def db_name(self): + return '@' + PREFIX + self._db_name + + def dump(self, out): + def yes_no(b): + return "yes" if b else "no" + fprintf(out, "'%s' :\n", self.name) + fprintf(out, " QL name: %s\n", self.ql_name()) + fprintf(out, " Relation name: %s\n", self.relation_name()) + fprintf(out, " Is case_type %s\n", yes_no(self.is_case_type())) + fprintf(out, " Super type: %s\n", self.super_type) + fprintf(out, " Layout:\n") + for l in self.layout: + fprintf(out, " %s, %s, %s, '%s, %s'\n" % l) + fprintf(out, " Parents: %s\n\n", parent_of(self)) + + def write_init(self, out): + if self.super_type: + fprintf(out, "%s = ClassNode('%s', %s)\n", self.name, + self.name, self.super_type.name) + else: + fprintf(out, "%s = ClassNode('%s')\n", self.name, self.name) + + def write_fields(self, out): + for name, field_type, docname, _, _ in self.fields: + fprintf(out, "%s.field('%s', %s, '%s')\n", self.name, + name, field_type.__name__, docname) + if self.layout: + fprintf(out, "\n") + + def __repr__(self): + return "Node('%s')" % self.name + + def child_offsets(self, n): + #Only used by db-scheme generator, so can be slow + found = set() + for name, node, offset, _, artificial, _ in self.layout: + if node is n: + found.add(offset) + if self.subclasses: + for s in self.subclasses: + found.update(s.child_offsets(n)) + return found + +class ListNode(Node): + "Node corresponding to a list, parameterized by its member's type" + + def __init__(self, item_node, name=None): + Node.__init__(self) + self.list_type = None + self.layout = () + self.super_type = None + self.item_type = item_node + self.subclasses = () + self.add_child(item_node) + self.name = name + + def relation_name(self): + return pluralize(PREFIX + self.__name__) + + def dump(self, out): + fprintf(out, "List of %s\n", self.name) + fprintf(out, " Parents: %s\n\n", parent_of(self)) + + def write_init(self, out): + fprintf(out, "%s = ListNode(%s)\n", + self.__name__, self.item_type.__name__) + + def write_fields(self, out): + pass + + @staticmethod + def is_list(): + return True + + @property + def __name__(self): + if self.name is None: + assert isinstance(self.item_type.__name__, str) + return self.item_type.__name__ + '_list' + else: + return self.name + + @property + def descriptive_name(self): + return self.item_type.descriptive_name + ' list' + + def db_name(self): + return '@' + PREFIX + self.__name__ + + def ql_name(self): + if self.name is not None: + return capitalize(self.name) + if self.item_type is str: + return 'StringList' + elif self.item_type is int: + return 'IntList' + elif self.item_type is float: + return 'FloatList' + return capitalize(self.item_type.ql_name()) + 'List' + + def __repr__(self): + return "ListNode(%s)" % self.__name__ + + def fixup(self): + pass + + def add_parent(self, p): + parent_nodes[self] = UnionNode.join(parent_of(self), p) + + def child_offsets(self, n): + return set((0,1,2,3)) + +_all_unions = {} + +class UnionNode(Node): + 'Node representing a set of AST types' + + def __init__(self, *types): + Node.__init__(self) + assert len(types) > 1 + self.types = frozenset(types) + self.name = None + self.super_type = None + self.layout = [] + self.subclasses = () + #Whether this node should be visited in auto-generated extractor. + self.visit = False + + @staticmethod + def join(t1, t2): + if t1 is None: + return t2 + if t2 is None: + return t1 + if isinstance(t1, UnionNode): + all_types = set(t1.types) + else: + all_types = set([t1]) + if isinstance(t2, UnionNode): + all_types = all_types.union(t2.types) + else: + all_types.add(t2) + done = False + while not done: + for n in all_types: + if n.super_type in all_types: + all_types.remove(n) + break + else: + done = True + return UnionNode._make_union(all_types) + + @staticmethod + def _make_union(all_types): + if len(all_types) == 1: + return next(iter(all_types)) + else: + key = frozenset(all_types) + if key in _all_unions: + u = _all_unions[key] + else: + u = UnionNode(*all_types) + _all_unions[key] = u + return u + + def set_name(self, name): + self.name = name + + @staticmethod + def is_union_type(): + return True + + def write_init(self, out): + fprintf(out, "%s = UnionNode(%s)\n", self.__name__, + ', '.join(t.__name__ for t in self.types)) + if self.name: + fprintf(out, "%s.setname('%s')\n", self.name, self.name) + + def write_fields(self, out): + pass + + def fixup(self): + pass + + def __hash__(self): + return hash(self.types) + + def __eq__(self, other): + assert len(self.types) > 1 + if isinstance(other, UnionNode): + return self.types == other.types + else: + return False + + def __ne__(self, other): + return not self.__eq__(other) + + @property + def __name__(self): + if self.name is None: + names = [ n.__name__ for n in self.types ] + return '_or_'.join(sorted(names)) + else: + return self.name + + @property + def descriptive_name(self): + if self.name is None: + names = [ n.descriptive_name for n in self.types ] + return '_or_'.join(sorted(names)) + else: + return self.name + + def db_name(self): + return '@' + PREFIX + self.__name__ + + def relation_name(self): + return pluralize(PREFIX + self.__name__) + + def ql_name(self): + if self.name is None: + assert len(self.types) > 1 + names = [ n.ql_name() for n in self.types ] + return 'Or'.join(sorted(names)) + else: + + return ''.join(capitalize(part) for part in self.name.split('_')) + + def add_parent(self, p): + for n in self.types: + n.add_parent(p) + + def child_offsets(self, n): + res = set() + for t in self.types: + res = res.union(t.child_offsets(n)) + return res + + def prune(self, node_set): + new_set = self.types.intersection(node_set) + if len(new_set) == len(self.types): + return self + if not new_set: + return None + return UnionNode._make_union(new_set) + +def shorten_name(node): + p = parent_of(node) + if (isinstance(p, UnionNode) and len(p.__name__) > 16 + and len(p.__name__) > len(node.__name__) + 4): + p.set_name(node.__name__ + '_parent') + + +def build_node_relations(nodes): + nodes = set(nodes) + for node in nodes: + node.fixup() + for node in sorted(nodes, key=lambda n : n.__name__): + shorten_name(node) + node_set = set(nodes) + for node in (str, int, float, bytes): + p = parent_of(node) + if p is not None: + node_set.add(p) + for node in nodes: + p = parent_of(node) + if p is not None: + node_set.add(p) + for n in nodes: + sub_types = sorted(n.subclasses, key = lambda x : x._index) + if n.is_case_type(): + for index, item in enumerate(sub_types): + item.index = index + for n in list(nodes): + if not n.parents and n.is_list() and n.name is None: + #Discard lists with no parents and no name as unreachable + node_set.remove(n) + #Prune unused nodes from unions. + node_set = set(node.prune(node_set) for node in node_set) + for node in node_set: + if node in parent_nodes: + parent_nodes[node] = parent_nodes[node].prune(node_set) + for node in node_set: + shorten_name(node) + result_nodes = {} + for n in node_set: + if n: + result_nodes[n.__name__] = n + return result_nodes + +def pluralize(name): + if name[-1] == 's': + if name[-2] in 'aiuos': + return name + 'es' + else: + #Already plural + return name + elif name.endswith('ex'): + return name[:-2] + 'ices' + elif name.endswith('y'): + return name[:-1] + 'ies' + else: + return name + 's' + +def capitalize(name): + 'Unlike the str method capitalize(), leave upper case letters alone' + return name[0].upper() + name[1:] + +def order(node): + if node.is_primitive(): + return 0 + if isinstance(node, ClassNode): + res = 1 + while node.super_type: + node = node.super_type + res += 1 + return res + if isinstance(node, ListNode): + return order(node.item_type) + 1 + else: + assert isinstance(node, UnionNode) + return max(order(t) for t in node.types)+1 diff --git a/python/extractor/semmle/python/__init__.py b/python/extractor/semmle/python/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/semmle/python/ast.py b/python/extractor/semmle/python/ast.py new file mode 100644 index 00000000000..25b93cae72a --- /dev/null +++ b/python/extractor/semmle/python/ast.py @@ -0,0 +1,949 @@ +''' +Abstract syntax tree classes. +This is designed to replace the stdlib ast module. +Unlike the stdlib module, it is version independent. + +The classes in this file are based on the corresponding types in the cpython interpreter, copyright PSF. +''' + + +class AstBase(object): + __slots__ = "lineno", "col_offset", "_end", + + def __repr__(self): + args = ",".join(repr(getattr(self, field, None)) for field in self.__slots__) + return "%s(%s)" % (self.__class__.__name__, args) + +class Class(AstBase): + 'AST node representing a class definition' + + __slots__ = "name", "body", + + def __init__(self, name, body): + self.name = name + self.body = body + + +class Function(AstBase): + 'AST node representing a function definition' + + __slots__ = "is_async", "name", "type_parameters", "args", "vararg", "kwonlyargs", "kwarg", "body", + + def __init__(self, name, type_parameters, args, vararg, kwonlyargs, kwarg, body, is_async=False): + self.name = name + self.type_parameters = type_parameters + self.args = args + self.vararg = vararg + self.kwonlyargs = kwonlyargs + self.kwarg = kwarg + self.body = body + self.is_async = is_async + + +class Module(AstBase): + + def __init__(self, body): + self.body = body + + +class StringPart(AstBase): + '''Implicitly concatenated part of string literal''' + + __slots__ = "prefix", "text", "s", + + def __init__(self, prefix, text, s): + self.prefix = prefix + self.text = text + self.s = s + +class alias(AstBase): + __slots__ = "value", "asname", + + def __init__(self, value, asname): + self.value = value + self.asname = asname + + +class arguments(AstBase): + __slots__ = "defaults", "kw_defaults", "annotations", "varargannotation", "kwargannotation", "kw_annotations", + + def __init__(self, defaults, kw_defaults, annotations, varargannotation, kwargannotation, kw_annotations): + if len(defaults) != len(annotations): + raise AssertionError('len(defaults) != len(annotations)') + if len(kw_defaults) != len(kw_annotations): + raise AssertionError('len(kw_defaults) != len(kw_annotations)') + self.kw_defaults = kw_defaults + self.defaults = defaults + self.annotations = annotations + self.varargannotation = varargannotation + self.kwargannotation = kwargannotation + self.kw_annotations = kw_annotations + + +class boolop(AstBase): + pass + +class cmpop(AstBase): + pass + +class comprehension(AstBase): + __slots__ = "is_async", "target", "iter", "ifs", + + def __init__(self, target, iter, ifs, is_async=False): + self.target = target + self.iter = iter + self.ifs = ifs + self.is_async = is_async + +class dict_item(AstBase): + pass + +class type_parameter(AstBase): + pass + +class expr(AstBase): + __slots__ = "parenthesised", + +class expr_context(AstBase): + pass + +class operator(AstBase): + pass + +class stmt(AstBase): + pass + +class unaryop(AstBase): + pass + +class pattern(AstBase): + __slots__ = "parenthesised", + +class And(boolop): + pass + +class Or(boolop): + pass + +class Eq(cmpop): + pass + +class Gt(cmpop): + pass + +class GtE(cmpop): + pass + +class In(cmpop): + pass + +class Is(cmpop): + pass + +class IsNot(cmpop): + pass + +class Lt(cmpop): + pass + +class LtE(cmpop): + pass + +class NotEq(cmpop): + pass + +class NotIn(cmpop): + pass + +class DictUnpacking(dict_item): + __slots__ = "value", + + def __init__(self, value): + self.value = value + + +class KeyValuePair(dict_item): + __slots__ = "key", "value", + + def __init__(self, key, value): + self.key = key + self.value = value + + +class keyword(dict_item): + __slots__ = "arg", "value", + + def __init__(self, arg, value): + self.arg = arg + self.value = value + + +class AssignExpr(expr): + __slots__ = "target", "value", + + def __init__(self, value, target): + self.value = value + self.target = target + + +class Attribute(expr): + __slots__ = "value", "attr", "ctx", + + def __init__(self, value, attr, ctx): + self.value = value + self.attr = attr + self.ctx = ctx + + +class Await(expr): + __slots__ = "value", + + def __init__(self, value): + self.value = value + + +class BinOp(expr): + __slots__ = "left", "op", "right", + + def __init__(self, left, op, right): + self.left = left + self.op = op + self.right = right + + +class BoolOp(expr): + __slots__ = "op", "values", + + def __init__(self, op, values): + self.op = op + self.values = values + + +class Bytes(expr): + __slots__ = "s", "prefix", "implicitly_concatenated_parts", + + def __init__(self, s, prefix, implicitly_concatenated_parts): + self.s = s + self.prefix = prefix + self.implicitly_concatenated_parts = implicitly_concatenated_parts + + +class Call(expr): + __slots__ = "func", "positional_args", "named_args", + + def __init__(self, func, positional_args, named_args): + self.func = func + self.positional_args = positional_args + self.named_args = named_args + + +class ClassExpr(expr): + 'AST node representing class creation' + + __slots__ = "name", "type_parameters", "bases", "keywords", "inner_scope", + + def __init__(self, name, type_parameters, bases, keywords, inner_scope): + self.name = name + self.type_parameters = type_parameters + self.bases = bases + self.keywords = keywords + self.inner_scope = inner_scope + + +class Compare(expr): + __slots__ = "left", "ops", "comparators", + + def __init__(self, left, ops, comparators): + self.left = left + self.ops = ops + self.comparators = comparators + + +class Dict(expr): + __slots__ = "items", + + def __init__(self, items): + self.items = items + + +class DictComp(expr): + __slots__ = "key", "value", "generators", "function", "iterable", + + def __init__(self, key, value, generators): + self.key = key + self.value = value + self.generators = generators + + +class Ellipsis(expr): + pass + +class Filter(expr): + '''Filtered expression in a template''' + + __slots__ = "value", "filter", + + def __init__(self, value, filter): + self.value = value + self.filter = filter + + +class FormattedValue(expr): + __slots__ = "value", "conversion", "format_spec", + + def __init__(self, value, conversion, format_spec): + self.value = value + self.conversion = conversion + self.format_spec = format_spec + + +class FunctionExpr(expr): + + 'AST node representing function creation' + + __slots__ = "name", "args", "returns", "inner_scope", + + def __init__(self, name, args, returns, inner_scope): + self.name = name + self.args = args + self.returns = returns + self.inner_scope = inner_scope + + +class GeneratorExp(expr): + __slots__ = "elt", "generators", "function", "iterable", + + def __init__(self, elt, generators): + self.elt = elt + self.generators = generators + + +class IfExp(expr): + __slots__ = "test", "body", "orelse", + + def __init__(self, test, body, orelse): + self.test = test + self.body = body + self.orelse = orelse + + +class ImportExpr(expr): + '''AST node representing module import + (roughly equivalent to the runtime call to __import__)''' + + __slots__ = "level", "name", "top", + + def __init__(self, level, name, top): + self.level = level + self.name = name + self.top = top + + +class ImportMember(expr): + '''AST node representing 'from import'. Similar to Attribute access, + but during import''' + + __slots__ = "module", "name", + + def __init__(self, module, name): + self.module = module + self.name = name + + +class JoinedStr(expr): + __slots__ = "values", + + def __init__(self, values): + self.values = values + + +class Lambda(expr): + __slots__ = "args", "inner_scope", + + def __init__(self, args, inner_scope): + self.args = args + self.inner_scope = inner_scope + + +class List(expr): + __slots__ = "elts", "ctx", + + def __init__(self, elts, ctx): + self.elts = elts + self.ctx = ctx + + +class ListComp(expr): + __slots__ = "elt", "generators", "function", "iterable", + + def __init__(self, elt, generators): + self.elt = elt + self.generators = generators + +class Match(stmt): + __slots__ = "subject", "cases", + + def __init__(self, subject, cases): + self.subject = subject + self.cases = cases + +class Case(stmt): + __slots__ = "pattern", "guard", "body", + + def __init__(self, pattern, guard, body): + self.pattern = pattern + self.guard = guard + self.body = body + +class Guard(expr): + __slots__ = "test", + + def __init__(self, test): + self.test = test + +class MatchAsPattern(pattern): + __slots__ = "pattern", "alias", + + def __init__(self, pattern, alias): + self.pattern = pattern + self.alias = alias + +class MatchOrPattern(pattern): + __slots__ = "patterns", + + def __init__(self, patterns): + self.patterns = patterns + +class MatchLiteralPattern(pattern): + __slots__ = "literal", + + def __init__(self, literal): + self.literal = literal + +class MatchCapturePattern(pattern): + __slots__ = "variable", + + def __init__(self, variable): + self.variable = variable + +class MatchWildcardPattern(pattern): + __slots__ = [] + +class MatchValuePattern(pattern): + __slots__ = "value", + + def __init__(self, value): + self.value = value + +class MatchSequencePattern(pattern): + __slots__ = "patterns", + + def __init__(self, patterns): + self.patterns = patterns + +class MatchStarPattern(pattern): + __slots__ = "target", + + def __init__(self, target): + self.target = target + +class MatchMappingPattern(pattern): + __slots__ = "mappings", + + def __init__(self, mappings): + self.mappings = mappings + +class MatchDoubleStarPattern(pattern): + __slots__ = "target", + + def __init__(self, target): + self.target = target + +class MatchKeyValuePattern(pattern): + __slots__ = "key", "value", + + def __init__(self, key, value): + self.key = key + self.value = value + +class MatchClassPattern(pattern): + __slots__ = "class_name", "positional", "keyword", + + def __init__(self, class_name, positional, keyword): + self.class_name = class_name + self.positional = positional + self.keyword = keyword + +class MatchKeywordPattern(pattern): + __slots__ = "attribute", "value", + + def __init__(self, attribute, value): + self.attribute = attribute + self.value = value + +class Name(expr): + __slots__ = "variable", "ctx", + + def __init__(self, variable, ctx): + self.variable = variable + self.ctx = ctx + + @property + def id(self): + return self.variable.id + +class Num(expr): + __slots__ = "n", "text", + + def __init__(self, n, text): + self.n = n + self.text = text + +class ParamSpec(type_parameter): + __slots__ = "name", + + def __init__(self, name): + self.name = name + + + +class PlaceHolder(expr): + '''PlaceHolder variable in template ($name)''' + + __slots__ = "variable", "ctx", + + def __init__(self, variable, ctx): + self.variable = variable + self.ctx = ctx + + @property + def id(self): + return self.variable.id + +class Repr(expr): + __slots__ = "value", + + def __init__(self, value): + self.value = value + + +class Set(expr): + __slots__ = "elts", + + def __init__(self, elts): + self.elts = elts + + +class SetComp(expr): + __slots__ = "elt", "generators", "function", "iterable", + + def __init__(self, elt, generators): + self.elt = elt + self.generators = generators + + +class Slice(expr): + '''AST node for a slice as a subclass of expr to simplify Subscripts''' + + __slots__ = "start", "stop", "step", + + def __init__(self, start, stop, step): + self.start = start + self.stop = stop + self.step = step + + +class Starred(expr): + __slots__ = "value", "ctx", + + def __init__(self, value, ctx): + self.value = value + self.ctx = ctx + + +class Str(expr): + __slots__ = "s", "prefix", "implicitly_concatenated_parts", + + def __init__(self, s, prefix, implicitly_concatenated_parts): + self.s = s + self.prefix = prefix + self.implicitly_concatenated_parts = implicitly_concatenated_parts + + +class Subscript(expr): + __slots__ = "value", "index", "ctx", + + def __init__(self, value, index, ctx): + self.value = value + self.index = index + self.ctx = ctx + + +class TemplateDottedNotation(expr): + '''Unified dot notation expression in a template''' + + __slots__ = "value", "attr", "ctx", + + def __init__(self, value, attr, ctx): + self.value = value + self.attr = attr + self.ctx = ctx + + +class Tuple(expr): + __slots__ = "elts", "ctx", + + def __init__(self, elts, ctx): + self.elts = elts + self.ctx = ctx + + +class TypeAlias(stmt): + __slots__ = "name", "type_parameters", "value", + + def __init__(self, name, type_parameters, value): + self.name = name + self.type_parameters = type_parameters + self.value = value + +class TypeVar(type_parameter): + __slots__ = "name", "bound", + + def __init__(self, name, bound): + self.name = name + self.bound = bound + +class TypeVarTuple(type_parameter): + __slots__ = "name", + + def __init__(self, name): + self.name = name + +class UnaryOp(expr): + __slots__ = "op", "operand", + + def __init__(self, op, operand): + self.op = op + self.operand = operand + + +class Yield(expr): + __slots__ = "value", + + def __init__(self, value): + self.value = value + + +class YieldFrom(expr): + __slots__ = "value", + + def __init__(self, value): + self.value = value + + +class SpecialOperation(expr): + __slots__ = "name", "arguments" + + def __init__(self, name, arguments): + self.name = name + self.arguments = arguments + + +class AugLoad(expr_context): + pass + +class AugStore(expr_context): + pass + +class Del(expr_context): + pass + +class Load(expr_context): + pass + +class Param(expr_context): + pass + +class Store(expr_context): + pass + +class Add(operator): + pass + +class BitAnd(operator): + pass + +class BitOr(operator): + pass + +class BitXor(operator): + pass + +class Div(operator): + pass + +class FloorDiv(operator): + pass + +class LShift(operator): + pass + +class MatMult(operator): + pass + +class Mod(operator): + pass + +class Mult(operator): + pass + +class Pow(operator): + pass + +class RShift(operator): + pass + +class Sub(operator): + pass + +class AnnAssign(stmt): + __slots__ = "value", "annotation", "target", + + def __init__(self, value, annotation, target): + self.value = value + self.annotation = annotation + self.target = target + + +class Assert(stmt): + __slots__ = "test", "msg", + + def __init__(self, test, msg): + self.test = test + self.msg = msg + + +class Assign(stmt): + __slots__ = "targets", "value", + + def __init__(self, value, targets): + self.value = value + assert isinstance(targets, list) + self.targets = targets + + +class AugAssign(stmt): + __slots__ = "operation", + + def __init__(self, operation): + self.operation = operation + + +class Break(stmt): + pass + +class Continue(stmt): + pass + +class Delete(stmt): + __slots__ = "targets", + + def __init__(self, targets): + self.targets = targets + + +class ExceptStmt(stmt): + '''AST node for except handler, as a subclass of stmt in order + to better support location and flow control''' + + __slots__ = "type", "name", "body", + + def __init__(self, type, name, body): + self.type = type + self.name = name + self.body = body + + +class ExceptGroupStmt(stmt): + '''AST node for except* handler, as a subclass of stmt in order + to better support location and flow control''' + + __slots__ = "type", "name", "body", + + def __init__(self, type, name, body): + self.type = type + self.name = name + self.body = body + + +class Exec(stmt): + __slots__ = "body", "globals", "locals", + + def __init__(self, body, globals, locals): + self.body = body + self.globals = globals + self.locals = locals + + +class Expr(stmt): + __slots__ = "value", + + def __init__(self, value): + self.value = value + + +class For(stmt): + __slots__ = "is_async", "target", "iter", "body", "orelse", + + def __init__(self, target, iter, body, orelse, is_async=False): + self.target = target + self.iter = iter + self.body = body + self.orelse = orelse + self.is_async = is_async + + +class Global(stmt): + __slots__ = "names", + + def __init__(self, names): + self.names = names + + +class If(stmt): + __slots__ = "test", "body", "orelse", + + def __init__(self, test, body, orelse): + self.test = test + self.body = body + self.orelse = orelse + + +class Import(stmt): + __slots__ = "names", + + def __init__(self, names): + self.names = names + + +class ImportFrom(stmt): + __slots__ = "module", + + def __init__(self, module): + self.module = module + + +class Nonlocal(stmt): + __slots__ = "names", + + def __init__(self, names): + self.names = names + + +class Pass(stmt): + pass + +class Print(stmt): + __slots__ = "dest", "values", "nl", + + def __init__(self, dest, values, nl): + self.dest = dest + self.values = values + self.nl = nl + + +class Raise(stmt): + __slots__ = "exc", "cause", "type", "inst", "tback", + + +class Return(stmt): + __slots__ = "value", + + def __init__(self, value): + self.value = value + + +class TemplateWrite(stmt): + '''Template text''' + + __slots__ = "value", + + def __init__(self, value): + self.value = value + + +class Try(stmt): + __slots__ = "body", "orelse", "handlers", "finalbody", + + def __init__(self, body, orelse, handlers, finalbody): + self.body = body + self.orelse = orelse + self.handlers = handlers + self.finalbody = finalbody + + +class While(stmt): + __slots__ = "test", "body", "orelse", + + def __init__(self, test, body, orelse): + self.test = test + self.body = body + self.orelse = orelse + + +class With(stmt): + __slots__ = "is_async", "context_expr", "optional_vars", "body", + + def __init__(self, context_expr, optional_vars, body, is_async=False): + self.context_expr = context_expr + self.optional_vars = optional_vars + self.body = body + self.is_async = is_async + + +class Invert(unaryop): + pass + +class Not(unaryop): + pass + +class UAdd(unaryop): + pass + +class USub(unaryop): + pass + + +class Variable(object): + 'A variable' + + def __init__(self, var_id, scope = None): + assert isinstance(var_id, str), type(var_id) + self.id = var_id + self.scope = scope + + def __repr__(self): + return 'Variable(%r, %r)' % (self.id, self.scope) + + def __eq__(self, other): + if type(other) is not Variable: + return False + if self.scope is None or other.scope is None: + raise TypeError("Scope not set") + return self.scope == other.scope and self.id == other.id + + def __ne__(self, other): + return not self == other + + def __hash__(self): + if self.scope is None: + raise TypeError("Scope not set") + return 391246 ^ hash(self.id) ^ hash(self.scope) + + def is_global(self): + return isinstance(self.scope, Module) + +def iter_fields(node): + for name in node.__slots__: + if hasattr(node, name): + yield name, getattr(node, name) diff --git a/python/extractor/semmle/python/extractor.py b/python/extractor/semmle/python/extractor.py new file mode 100644 index 00000000000..cafb7ff4ec0 --- /dev/null +++ b/python/extractor/semmle/python/extractor.py @@ -0,0 +1,284 @@ +import sys +import os +import inspect +import pkgutil +from semmle.python import ast + +from semmle.python.passes.exports import ExportsPass +from semmle.python.passes.lexical import LexicalPass +from semmle.python.passes.flow import FlowPass +from semmle.python.passes.ast_pass import ASTPass +from semmle.python.passes.objects import ObjectPass +from semmle.util import VERSION, uuid, get_analysis_version, get_analysis_major_version +from semmle.util import makedirs, get_source_file_tag, TrapWriter, base64digest +from semmle.cache import Cache +from semmle.logging import WARN, syntax_error_message, Logger +from semmle.profiling import timers + +UTRAP_KEY = 'utrap%s' % VERSION + +__all__ = [ 'Extractor', 'CachingExtractor' ] + +FLAG_SAVE_TYPES = float, complex, bool, int, bytes, str + +class Extractor(object): + '''The extractor controls the execution of the all the + specialised passes''' + + def __init__(self, trap_folder, src_archive, options, logger: Logger, diagnostics_writer): + assert trap_folder + self.trap_folder = trap_folder + self.src_archive = src_archive + self.object_pass = ObjectPass() + self.passes = [ + ASTPass(), + ExportsPass(), + FlowPass(options.split, options.prune, options.unroll, logger) + ] + self.lexical = LexicalPass() + self.files = {} + self.options = options + self.handle_syntax_errors = not options.no_syntax_errors + self.logger = logger + self.diagnostics_writer = diagnostics_writer + + def _handle_syntax_error(self, module, ex): + # Write out diagnostics for the syntax error. + error = syntax_error_message(ex, module) + self.diagnostics_writer.write(error) + + # Emit trap for the syntax error + self.logger.debug("Emitting trap for syntax error in %s", module.path) + writer = TrapWriter() + module_id = writer.get_node_id(module) + # Report syntax error as an alert. + # Ensure line and col are ints (not None). + line = ex.lineno if ex.lineno else 0 + if line > len(module.lines): + line = len(module.lines) + col = len(module.lines[-1])-1 + else: + col = ex.offset if ex.offset else 0 + loc_id = writer.get_unique_id() + writer.write_tuple(u'locations_ast', 'rrdddd', + loc_id, module_id, 0, 0, 0, 0) + syntax_id = u'syntax%d:%d' % (line, col) + writer.write_tuple(u'locations_ast', 'nrdddd', + syntax_id, module_id, line, col+1, line, col+1) + writer.write_tuple(u'py_syntax_error_versioned', 'nss', syntax_id, ex.msg, get_analysis_major_version()) + trap = writer.get_compressed() + self.trap_folder.write_trap("syntax-error", module.path, trap) + #Create an AST equivalent to an empty file, so that the other passes produce consistent output. + return ast.Module([]) + + def _extract_trap_file(self, ast, comments, path): + writer = TrapWriter() + file_tag = get_source_file_tag(self.src_archive.get_virtual_path(path)) + writer.write_tuple(u'py_Modules', 'g', ast.trap_name) + writer.write_tuple(u'py_module_path', 'gg', ast.trap_name, file_tag) + try: + for ex in self.passes: + with timers[ex.name]: + if isinstance(ex, FlowPass): + ex.set_filename(path) + ex.extract(ast, writer) + with timers['lexical']: + self.lexical.extract(ast, comments, writer) + with timers['object']: + self.object_pass.extract(ast, path, writer) + except Exception as ex: + self.logger.error("Exception extracting module %s: %s", path, ex) + self.logger.traceback(WARN) + return None + return writer.get_compressed() + + def process_source_module(self, module): + '''Process a Python source module. Checks that module has valid syntax, + then passes passes ast, source, etc to `process_module` + ''' + try: + #Ensure that module does not have invalid syntax before extracting it. + ast = module.ast + except SyntaxError as ex: + self.logger.debug("handle syntax errors is %s", self.handle_syntax_errors) + if self.handle_syntax_errors: + ast = self._handle_syntax_error(module, ex) + else: + return None + ast.name = module.name + ast.kind = module.kind + ast.trap_name = module.trap_name + return self.process_module(ast, module.trap_name, module.bytes_source, + module.path, module.comments) + + def process_module(self, ast, module_tag, bytes_source, path, comments): + 'Process a module, generating the trap file for that module' + self.logger.debug(u"Populating trap file for %s", path) + ast.trap_name = module_tag + trap = self._extract_trap_file(ast, comments, path) + if trap is None: + return None + with timers['trap']: + self.trap_folder.write_trap("python", path, trap) + try: + with timers['archive']: + self.copy_source(bytes_source, module_tag, path) + except Exception: + import traceback + traceback.print_exc() + return trap + + def copy_source(self, bytes_source, module_tag, path): + if bytes_source is None: + return + self.files[module_tag] = self.src_archive.get_virtual_path(path) + self.src_archive.write(path, bytes_source) + + def write_interpreter_data(self, options): + '''Write interpreter data, such as version numbers and flags.''' + + def write_flag(name, value): + writer.write_tuple(u'py_flags_versioned', 'uus', name, value, get_analysis_major_version()) + + def write_flags(obj, prefix): + pre = prefix + u"." + for name, value in inspect.getmembers(obj): + if name[0] == "_": + continue + if type(value) in FLAG_SAVE_TYPES: + write_flag(pre + name, str(value)) + + writer = TrapWriter() + for index, name in enumerate((u'major', u'minor', u'micro', u'releaselevel', u'serial')): + writer.write_tuple(u'py_flags_versioned', 'sss', u'extractor_python_version.' + name, str(sys.version_info[index]), get_analysis_major_version()) + write_flags(sys.flags, u'flags') + write_flags(sys.float_info, u'float') + write_flags(self.options, u'options') + write_flag(u'sys.prefix', sys.prefix) + path = os.pathsep.join(os.path.abspath(p) for p in options.sys_path) + write_flag(u'sys.path', path) + if options.path is None: + path = '' + else: + path = os.pathsep.join(self.src_archive.get_virtual_path(p) for p in options.path) + if options.language_version: + write_flag(u'language.version', options.language_version[-1]) + else: + write_flag(u'language.version', get_analysis_version()) + write_flag(u'extractor.path', path) + write_flag(u'sys.platform', sys.platform) + write_flag(u'os.sep', os.sep) + write_flag(u'os.pathsep', os.pathsep) + write_flag(u'extractor.version', VERSION) + if options.context_cost is not None: + write_flag(u'context.cost', options.context_cost) + self.trap_folder.write_trap("flags", "$flags", writer.get_compressed()) + if get_analysis_major_version() == 2: + # Copy the pre-extracted builtins trap + builtins_trap_data = pkgutil.get_data('semmle.data', 'interpreter2.trap') + self.trap_folder.write_trap("interpreter", '$interpreter2', builtins_trap_data, extension=".trap") + else: + writer = TrapWriter() + self.object_pass.write_special_objects(writer) + self.trap_folder.write_trap("interpreter", '$interpreter3', writer.get_compressed()) + # Copy stdlib trap + if get_analysis_major_version() == 2: + stdlib_trap_name = '$stdlib_27.trap' + else: + stdlib_trap_name = '$stdlib_33.trap' + stdlib_trap_data = pkgutil.get_data('semmle.data', stdlib_trap_name) + self.trap_folder.write_trap("stdlib", stdlib_trap_name[:-5], stdlib_trap_data, extension=".trap") + + @staticmethod + def from_options(options, trap_dir, archive, logger: Logger, diagnostics_writer): + '''Convenience method to create extractor from options''' + try: + trap_copy_dir = options.trap_cache + caching_extractor = CachingExtractor(trap_copy_dir, options, logger) + except Exception as ex: + if options.verbose and trap_copy_dir is not None: + print ("Failed to create caching extractor: " + str(ex)) + caching_extractor = None + worker = Extractor(trap_dir, archive, options, logger, diagnostics_writer) + if caching_extractor: + caching_extractor.set_worker(worker) + return caching_extractor + else: + return worker + + def stop(self): + pass + + def close(self): + 'close() must be called, or some information will be not be written' + #Add name tag to file name, so that multiple extractors do not overwrite each other + if self.files: + trapwriter = TrapWriter() + for _, filepath in self.files.items(): + trapwriter.write_file(filepath) + self.trap_folder.write_trap('folders', uuid('python') + '/$files', trapwriter.get_compressed()) + self.files = set() + for name, timer in sorted(timers.items()): + self.logger.debug("Total time for pass '%s': %0.0fms", name, timer.elapsed) + + +def hash_combine(x, y): + return base64digest(x + u":" + y) + + +class CachingExtractor(object): + '''The caching extractor has a two stage initialization process. + After creating the extractor (which will check that the cachedir is valid) + set_worker(worker) must be called before the CachingExtractor is valid''' + + def __init__(self, cachedir, options, logger: Logger): + if cachedir is None: + raise IOError("No cache directory") + makedirs(cachedir) + self.worker = None + self.cache = Cache.for_directory(cachedir, options.verbose) + self.logger = logger + self.split = options.split + + def set_worker(self, worker): + self.worker = worker + + def get_cache_key(self, module): + key = hash_combine(module.path, module.source) + if not self.split: + #Use different key, as not splitting will modify the trap file. + key = hash_combine(UTRAP_KEY, key) + return hash_combine(key, module.source) + + def process_source_module(self, module): + '''Process a Python source module. First look up trap file in cache. + In no cached trap file is found, then delegate to normal extractor. + ''' + if self.worker is None: + raise Exception("worker is not set") + key = self.get_cache_key(module) + trap = self.cache.get(key) + if trap is None: + trap = self.worker.process_source_module(module) + if trap is not None: + self.cache.set(key, trap) + else: + self.logger.debug(u"Found cached trap file for %s", module.path) + self.worker.trap_folder.write_trap("python", module.path, trap) + try: + self.worker.copy_source(module.bytes_source, module.trap_name, module.path) + except Exception: + self.logger.traceback(WARN) + return trap + + def process_module(self, ast, module_tag, source_code, path, comments): + self.worker.process_module(ast, module_tag, source_code, path, comments) + + def close(self): + self.worker.close() + + def write_interpreter_data(self, sys_path): + self.worker.write_interpreter_data(sys_path) + + def stop(self): + self.worker.stop() diff --git a/python/extractor/semmle/python/finder.py b/python/extractor/semmle/python/finder.py new file mode 100644 index 00000000000..632ef920d05 --- /dev/null +++ b/python/extractor/semmle/python/finder.py @@ -0,0 +1,377 @@ +''' +Classes and functions for converting module names into paths and Extractables. +Implements standard Python import semantics, and is designed to be extensible +to handle additional features like stub and template files. +''' + +import sys +import imp +import os.path +from semmle.util import FileExtractable, FolderExtractable, BuiltinModuleExtractable, PY_EXTENSIONS, get_analysis_major_version +from semmle.python.modules import PythonSourceModule, is_script + +class Module(object): + '''A module. Modules are approximations + to Python module objects and are used for + analyzing imports.''' + + IS_PACKAGE = False + path = None + respect_init = True + + def __init__(self, name, package): + self.name = name + self.package = package + + def get_sub_module(self, name): + '''gets the (immediate) sub-module with the given name''' + raise NotImplementedError() + + def all_sub_modules(self): + '''returns an iterable of all the sub-modules of this module''' + raise NotImplementedError() + + def get_extractable(self): + '''gets the Extractable for this module''' + raise NotImplementedError() + + def find(self, name): + '''Returns the named sub-module of this module if this module + is a package, otherwise returns `None`''' + if '.' in name: + top, rest = name.split(".", 1) + pkg = self.get_sub_module(top) + return pkg.find(rest) if pkg else None + else: + return self.get_sub_module(name) + + def is_package(self): + return self.IS_PACKAGE + +class PyModule(Module): + ' A Python source code module' + + def __init__(self, name, package, path): + Module.__init__(self, name, package) + assert isinstance(path, str) + self.path = path + + def get_sub_module(self, name): + return None + + def all_sub_modules(self): + return () + + def get_extractable(self): + return FileExtractable(self.path) + + def load(self, logger=None): + return PythonSourceModule(self.name, self.path, logger=logger) + + def __str__(self): + return "Python module at %s" % self.path + +class BuiltinModule(Module): + ' A built-in module' + + def __init__(self, name, package): + Module.__init__(self, name, package) + + def get_sub_module(self, name): + return None + + def all_sub_modules(self): + return () + + def get_extractable(self): + return BuiltinModuleExtractable(self.name) + + def __str__(self): + return "Builtin module %s" % self.name + +class FilePackage(Module): + ' A normal package. That is a folder with an __init__.py' + + IS_PACKAGE = True + + def __init__(self, name, package, path, respect_init=True): + Module.__init__(self, name, package) + assert isinstance(path, str), type(path) + self.path = path + self.respect_init = respect_init + + def get_sub_module(self, name): + modname = self.name + "." + name if self.name else None + basepath = os.path.join(self.path, name) + return _from_base(modname, basepath, self, self.respect_init) + + def all_sub_modules(self): + return _from_folder(self.name, self.path, self, self.respect_init) + + def load(self): + return None + + def get_extractable(self): + return FolderExtractable(self.path) + + def __str__(self): + return "Package at %s" % self.path + +class PthPackage(Module): + "A built-in package object generated from a '.pth' file" + + IS_PACKAGE = True + + def __init__(self, name, package, search_path): + Module.__init__(self, name, package) + self.search_path = search_path + + def get_sub_module(self, name): + mname = self.name + "." + name + for path in self.search_path: + mod = _from_base(mname, os.path.join(path, name), self) + if mod is not None: + return mod + return None + + def all_sub_modules(self): + for path in self.search_path: + for mod in _from_folder(self.name, path, self): + yield mod + + def load(self): + return None + + def __str__(self): + return "Builtin package (.pth) %s %s" % (self.name, self.search_path) + + def get_extractable(self): + return None + +#Helper functions + +def _from_base(name, basepath, pkg, respect_init=True): + if os.path.isdir(basepath): + if os.path.exists(os.path.join(basepath, "__init__.py")) or not respect_init: + return FilePackage(name, pkg, basepath, respect_init) + else: + return None + for ext in PY_EXTENSIONS: + filepath = basepath + ext + if os.path.isfile(filepath): + return PyModule(name, pkg, filepath) + return None + +def _from_folder(name, path, pkg, respect_init=True): + for file in os.listdir(path): + fullpath = os.path.join(path, file) + if os.path.isdir(fullpath): + if os.path.exists(os.path.join(fullpath, "__init__.py")) or not respect_init: + yield FilePackage(name + "." + file if name else None, pkg, fullpath, respect_init) + base, ext = os.path.splitext(file) + if ext not in PY_EXTENSIONS: + continue + if os.path.isfile(fullpath): + yield PyModule(name + "." + base if name else None, pkg, fullpath) + +class AbstractFinder(object): + + def find(self, mod_name): + '''Find an extractable object given a module name''' + if '.' in mod_name: + top, rest = mod_name.split(".", 1) + pkg = self.find_top(top) + return pkg.find(rest) if pkg else None + else: + return self.find_top(mod_name) + + def find_top(self, name): + '''Find module or package object given a simple (dot-less) name''' + raise NotImplementedError() + + def name_from_path(self, path, extensions): + '''Find module or package object given a path''' + raise NotImplementedError() + +class PyFinder(AbstractFinder): + + __slots__ = [ 'path', 'respect_init', 'logger' ] + + def __init__(self, path, respect_init, logger): + assert isinstance(path, str), path + self.path = os.path.abspath(path) + self.respect_init = respect_init + self.logger = logger + + def find_top(self, mod_name): + basepath = os.path.join(self.path, mod_name) + return _from_base(mod_name, basepath, None, self.respect_init) + + def name_from_path(self, path, extensions): + rel_path = _relative_subpath(path, self.path) + if rel_path is None: + return None + base, ext = os.path.splitext(rel_path) + if ext and ext not in extensions: + return None + return ".".join(base.split(os.path.sep)) + +def _relative_subpath(subpath, root): + 'Returns the relative path if `subpath` is within `root` or `None` otherwise' + try: + relpath = os.path.relpath(subpath, root) + except ValueError: + #No relative path possible + return None + if relpath.startswith(os.pardir): + #Not in root: + return None + return relpath + +class BuiltinFinder(AbstractFinder): + '''Finder for builtin modules that are already present in the VM + or can be guaranteed to load successfully''' + + def __init__(self, logger): + self.modules = {} + for name, module in sys.modules.items(): + self.modules[name] = module + try: + self.dynload_path = os.path.dirname(imp.find_module("_json")[1]) + except Exception: + if os.name != "nt": + logger.warning("Failed to find dynload path") + self.dynload_path = None + + def builtin_module(self, name): + if "." in name: + pname, name = name.rsplit(".", 1) + return BuiltinModule(name, self.builtin_module(pname)) + return BuiltinModule(name, None) + + def find(self, mod_name): + mod = super(BuiltinFinder, self).find(mod_name) + if mod is not None: + return mod + #Use `imp` module to find module + try: + _, filepath, mod_t = imp.find_module(mod_name) + except ImportError: + return None + #Accept builtin dynamically loaded modules like _ctypes or _json + if filepath and os.path.dirname(filepath) == self.dynload_path: + return BuiltinModule(mod_name, None) + return None + + def find_top(self, mod_name): + if mod_name in self.modules: + mod = self.modules[mod_name] + if hasattr(mod, "__file__"): + return None + if hasattr(mod, "__path__"): + return PthPackage(mod_name, None, mod.__path__) + return BuiltinModule(mod_name, None) + if mod_name in sys.builtin_module_names: + return BuiltinModule(mod_name, None) + return None + + def name_from_path(self, path, extensions): + return None + +#Stub file handling + +class StubFinder(PyFinder): + + def __init__(self, logger): + try: + tools = os.environ['ODASA_TOOLS'] + except KeyError: + tools = sys.path[1] + logger.debug("StubFinder: can't find ODASA_TOOLS, using '%s' instead", tools) + path = os.path.join(tools, "data", "python", "stubs") + super(StubFinder, self).__init__(path, True, logger) + + +def _finders_for_path(path, respect_init, logger): + finders = [ StubFinder(logger) ] + for p in path: + if p: + finders.append(PyFinder(p, respect_init, logger)) + finders.append(BuiltinFinder(logger)) + return finders + + +def finders_from_options_and_env(options, logger): + '''Return a list of finders from the given command line options''' + if options.path: + path = options.path + options.sys_path + else: + path = options.sys_path + path = [os.path.abspath(p) for p in path] + if options.exclude: + exclude = set(options.exclude) + trimmed_path = [] + for p in path: + for x in exclude: + if p.startswith(x): + break + else: + trimmed_path.append(p) + path = trimmed_path + logger.debug("Finder path: %s", path) + logger.debug("sys path: %s", sys.path) + return _finders_for_path(path, options.respect_init, logger) + + +class Finder(object): + + def __init__(self, finders, options, logger): + self.finders = finders + self.path_map = {} + self.logger = logger + self.respect_init = options.respect_init + + def find(self, mod_name): + for finder in self.finders: + mod = finder.find(mod_name) + if mod is not None: + return mod + self.logger.debug("Cannot find module '%s'", mod_name) + return None + + @staticmethod + def from_options_and_env(options, logger): + return Finder(finders_from_options_and_env(options, logger), options, logger) + + def from_extractable(self, unit): + if isinstance(unit, FolderExtractable) or isinstance(unit, FileExtractable): + return self.from_path(unit.path) + return None + + def from_path(self, path, extensions=PY_EXTENSIONS): + if path in self.path_map: + return self.path_map[path] + if not path or path == "/": + return None + is_python_2 = (get_analysis_major_version() == 2) + if os.path.isdir(path) and not os.path.exists(os.path.join(path, "__init__.py")) and (self.respect_init or not is_python_2): + return None + pkg = self.from_path(os.path.dirname(path)) + mod = None + if os.path.isdir(path): + mod = FilePackage(None, pkg, path) + if os.path.isfile(path): + base, ext = os.path.splitext(path) + if ext in extensions: + mod = PyModule(None, pkg, path) + if is_script(path): + mod = PyModule(None, None, path) + self.path_map[path] = mod + return mod + + def name_from_path(self, path, extensions=PY_EXTENSIONS): + for finder in self.finders: + name = finder.name_from_path(path, extensions) + if name is not None: + return name + return None diff --git a/python/extractor/semmle/python/imports.py b/python/extractor/semmle/python/imports.py new file mode 100644 index 00000000000..851193e89f5 --- /dev/null +++ b/python/extractor/semmle/python/imports.py @@ -0,0 +1,256 @@ +import sys +from semmle.python import ast + +from collections import namedtuple + +from semmle.util import VERSION, get_analysis_major_version +from semmle.cache import Cache +from semmle.logging import INFO + +#Maintain distinct version strings for distinct versions of Python +IMPORTS_KEY = 'import%s_%x%x' % (VERSION, sys.version_info[0], sys.version_info[1]) + +import pickle + +__all__ = [ 'CachingModuleImporter', 'ModuleImporter', 'importer_from_options' ] + +ImportStar = namedtuple('ImportStar', 'level module') +ImportExpr = namedtuple('ImportExpr', 'level module') +ImportMember = namedtuple('ImportMember', 'level module name') + +def safe_string(txt): + try: + if isinstance(txt, bytes): + try: + return txt.decode(sys.getfilesystemencoding(), errors="replace") + except Exception: + return txt.decode("latin-1") + else: + return str(txt) + except Exception: + return u"?" + +class SemmleImportError(Exception): + + def __init__(self, module_name, *reasons): + reason_txt = u"".join(safe_string(reason) for reason in reasons) + module_name = safe_string(module_name) + if reason_txt: + message = u"Import of %s failed: %s.\n" % (module_name, reason_txt) + else: + message = u"Import of %s failed.\n" % module_name + Exception.__init__(self, message) + + def write(self, out=sys.stdout): + out.write(self.args[0]) + + +class CachingModuleImporter(object): + + def __init__(self, cachedir, finder, logger): + self.worker = ModuleImporter(finder, logger) + if cachedir is None: + raise IOError("No cache directory") + self.cache = Cache.for_directory(cachedir, logger) + self.logger = logger + + def get_imports(self, module, loaded_module): + import_nodes = self.get_import_nodes(loaded_module) + return self.worker.parse_imports(module, import_nodes) + + def get_import_nodes(self, loaded_module): + key = loaded_module.get_hash_key(IMPORTS_KEY) + if key is None: + return self.worker.get_import_nodes(loaded_module) + imports = self.cache.get(key) + #Unpickle the data + if imports is not None: + try: + imports = pickle.loads(imports) + except Exception: + self.logger.debug("Failed to unpickle imports for %s", loaded_module.path) + imports = None + if imports is None: + imports = self.worker.get_import_nodes(loaded_module) + try: + data = pickle.dumps(imports) + self.cache.set(key, data) + except Exception as ex: + # Shouldn't really fail, but carry on anyway + self.logger.debug("Failed to save pickled imports to cache for %s: %s", loaded_module.path, ex) + else: + self.logger.debug("Cached imports file found for %s", loaded_module.path) + return imports + +class ModuleImporter(object): + 'Discovers and records which modules import which other modules' + + def __init__(self, finder, logger): + + self.finder = finder + self.logger = logger + self.failures = {} + + def get_imports(self, module, loaded_module): + import_nodes = self.get_import_nodes(loaded_module) + return self.parse_imports(module, import_nodes) + + def get_import_nodes(self, loaded_module): + 'Return list of AST nodes representing imports' + try: + return imports_from_ast(loaded_module.py_ast) + except Exception as ex: + if isinstance(ex, SyntaxError): + # Example: `Syntax Error (line 123) in /home/.../file.py` + self.logger.warning("%s in %s", ex, loaded_module.path) + # no need to show traceback, it's not an internal bug + else: + self.logger.warning("Failed to analyse imports of %s : %s", loaded_module.path, ex) + self.logger.traceback(INFO) + return [] + + def _relative_import(self, module, level, mod_name, report_failure = True): + for i in range(level): + parent = module.package + if parent is None: + relative_name = level * u'.' + mod_name + if relative_name not in self.failures: + if report_failure: + self.logger.warning("Failed to find %s, no parent package of %s", relative_name, module) + self.failures[relative_name] = str(module) + return None + module = parent + res = module + if mod_name: + res = res.get_sub_module(mod_name) + if res is None and report_failure: + relative_name = level * '.' + mod_name + if relative_name not in self.failures: + self.logger.warning("Failed to find %s, %s has no module %s", relative_name, module, mod_name) + self.failures[relative_name] = str(module) + return res + + def _absolute_import(self, module, mod_name): + try: + mod = self.finder.find(mod_name) + except SemmleImportError as ex: + if mod_name not in self.failures: + self.logger.warning("%s", ex) + self.failures[mod_name] = str(module) + return None + return mod + + def parse_imports(self, module, import_nodes): + imports = set() + #If an imported module is a package, then yield its __init__ module as well + for imported in self._parse_imports_no_init(module, import_nodes): + if imported not in imports: + imports.add(imported) + assert imported is not None + yield imported + if not imported.is_package(): + continue + init = imported.get_sub_module(u"__init__") + if init is not None and init not in imports: + yield init + + def _parse_imports_no_init(self, module, import_nodes): + assert not module.is_package() + for node in import_nodes: + if node.module is None: + top = '' + parts = [] + else: + parts = node.module.split('.') + top, parts = parts[0], parts[1:] + if node.level <= 0: + if get_analysis_major_version() < 3: + #Attempt relative import with level 1 + imported = self._relative_import(module, 1, top, False) + if imported is None: + imported = self._absolute_import(module, top) + else: + imported = self._absolute_import(module, top) + else: + imported = self._relative_import(module, node.level, top) + if imported is None: + self.logger.debug("Unable to resolve import: %s", top) + continue + yield imported + for p in parts: + inner = imported.get_sub_module(p) + if inner is None: + self.logger.debug("Unable to resolve import: %s", p) + break + imported = inner + yield imported + if isinstance(node, ImportStar): + self.logger.debug("Importing all sub modules of %s", imported) + #If import module is a package then yield all sub_modules. + for mod in imported.all_sub_modules(): + yield mod + elif isinstance(node, ImportMember): + mod = imported.get_sub_module(node.name) + if mod is not None: + self.logger.debug("Unable to resolve import: %s", node.name) + yield mod + +def imports_from_ast(the_ast): + def walk(node, in_function, in_name_main): + if isinstance(node, ast.Module): + for import_node in walk(node.body, in_function, in_name_main): + yield import_node + elif isinstance(node, ast.ImportFrom): + yield ImportStar(node.module.level, node.module.name) + elif isinstance(node, ast.Import): + for alias in node.names: + imp = alias.value + if isinstance(imp, ast.ImportExpr): + yield ImportExpr(imp.level, imp.name) + else: + assert isinstance(imp, ast.ImportMember) + yield ImportMember(imp.module.level, imp.module.name, imp.name) + elif isinstance(node, ast.FunctionExpr): + for _, child in ast.iter_fields(node.inner_scope): + for import_node in walk(child, True, in_name_main): + yield import_node + elif isinstance(node, ast.Call): + # Might be a decorator + for import_node in walk(node.positional_args, in_function, in_name_main): + yield import_node + elif isinstance(node, list): + for n in node: + for import_node in walk(n, in_function, in_name_main): + yield import_node + elif isinstance(node, ast.stmt): + name_eq_main = is_name_eq_main(node) + for _, child in ast.iter_fields(node): + for import_node in walk(child, in_function, name_eq_main or in_name_main): + yield import_node + return list(walk(the_ast, False, False)) + +def name_from_expr(expr): + if isinstance(expr, ast.Name): + return expr.id + if isinstance(expr, ast.Attribute): + return name_from_expr(expr.value) + "." + expr.attr + raise ValueError("%s is not a name" % expr) + +def is_name_eq_main(node): + if not isinstance(node, ast.If): + return False + try: + lhs = node.test.left + rhs = node.test.comparators[0] + return rhs.s == "__main__" and lhs.id == "__name__" + except Exception: + return False + +def importer_from_options(options, finder, logger): + try: + importer = CachingModuleImporter(options.trap_cache, finder, logger) + except Exception as ex: + if options.trap_cache is not None: + logger.warn("Failed to create caching importer: %s", ex) + importer = ModuleImporter(finder, logger) + return importer diff --git a/python/extractor/semmle/python/master.py b/python/extractor/semmle/python/master.py new file mode 100755 index 00000000000..200340061fc --- /dev/null +++ b/python/extractor/semmle/python/master.py @@ -0,0 +1,504 @@ +#Much of the information in this file is hardcoded into parser. +#Modify with care and test well. +#It should be relatively safe to add fields. + + +from semmle.python.AstMeta import Node, PrimitiveNode, ClassNode, UnionNode, ListNode +from semmle.python.AstMeta import build_node_relations as _build_node_relations + +string = PrimitiveNode('str', 'string', 'varchar(1)', 'string') +bytes_ = PrimitiveNode('bytes', 'string', 'varchar(1)') + +location = PrimitiveNode('location', '@location', 'unique int') +variable = PrimitiveNode('variable', '@py_variable', 'int') + +int_ = PrimitiveNode('int', 'int', 'int') +bool_ = PrimitiveNode('bool', 'boolean', 'boolean') +number = PrimitiveNode('number', 'string', 'varchar(1)') + +Module = ClassNode('Module') +Class = ClassNode('Class') +Function = ClassNode('Function') + +alias = ClassNode('alias') +arguments = ClassNode('arguments', None, 'parameters definition') +boolop = ClassNode('boolop', None, 'boolean operator') +cmpop = ClassNode('cmpop', None, 'comparison operator') +comprehension = ClassNode('comprehension') +comprehension.field('location', location) +expr = ClassNode('expr', None, 'expression') +expr.field('location', location) +expr.field('parenthesised', bool_, 'parenthesised') +expr_context = ClassNode('expr_context', None, 'expression context') +operator = ClassNode('operator') +stmt = ClassNode('stmt', None, 'statement') +stmt.field('location', location) +unaryop = ClassNode('unaryop', None, 'unary operation') +pattern = ClassNode('pattern') +pattern.field('location', location) +pattern.field('parenthesised', bool_, 'parenthesised') +Add = ClassNode('Add', operator, '+') +And = ClassNode('And', boolop, 'and') +Assert = ClassNode('Assert', stmt) +Assign = ClassNode('Assign', stmt, 'assignment') +Attribute = ClassNode('Attribute', expr) +AugAssign = ClassNode('AugAssign', stmt, 'augmented assignment statement') +AugLoad = ClassNode('AugLoad', expr_context, 'augmented-load') +AugStore = ClassNode('AugStore', expr_context, 'augmented-store') +BinOp = ClassNode('BinOp', expr, 'binary') +#Choose a name more consistent with other Exprs. +BinOp.set_name("BinaryExpr") +BitAnd = ClassNode('BitAnd', operator, '&') +BitOr = ClassNode('BitOr', operator, '|') +BitXor = ClassNode('BitXor', operator, '^') +BoolOp = ClassNode('BoolOp', expr, 'boolean') +#Avoid name clash with boolop +BoolOp.set_name('BoolExpr') +Break = ClassNode('Break', stmt) +Bytes = ClassNode('Bytes', expr) +Call = ClassNode('Call', expr) +ClassExpr = ClassNode('ClassExpr', expr, 'class definition') +Compare = ClassNode('Compare', expr) +Continue = ClassNode('Continue', stmt) +Del = ClassNode('Del', expr_context, 'deletion') +Delete = ClassNode('Delete', stmt) +Dict = ClassNode('Dict', expr, 'dictionary') +DictComp = ClassNode('DictComp', expr, 'dictionary comprehension') +Div = ClassNode('Div', operator, '/') +Ellipsis = ClassNode('Ellipsis', expr) +Eq = ClassNode('Eq', cmpop, '==') +ExceptStmt = ClassNode('ExceptStmt', stmt, 'except block') +ExceptGroupStmt = ClassNode('ExceptGroupStmt', stmt, 'except group block') +Exec = ClassNode('Exec', stmt) +Expr_stmt = ClassNode('Expr', stmt) +Expr_stmt.set_name('Expr_stmt') +FloorDiv = ClassNode('FloorDiv', operator, '//') +For = ClassNode('For', stmt) +FunctionExpr = ClassNode('FunctionExpr', expr, 'function definition') +GeneratorExp = ClassNode('GeneratorExp', expr, 'generator') +Global = ClassNode('Global', stmt) +Gt = ClassNode('Gt', cmpop, '>') +GtE = ClassNode('GtE', cmpop, '>=') +If = ClassNode('If', stmt) +IfExp = ClassNode('IfExp', expr, 'if') +Import = ClassNode('Import', stmt) +ImportExpr = ClassNode('ImportExpr', expr, 'import') +ImportMember = ClassNode('ImportMember', expr, 'from import') +ImportFrom = ClassNode('ImportFrom', stmt, 'import * statement') +In = ClassNode('In', cmpop) +Invert = ClassNode('Invert', unaryop, '~') +Is = ClassNode('Is', cmpop) +IsNot = ClassNode('IsNot', cmpop, 'is not') +LShift = ClassNode('LShift', operator, '<<') +Lambda = ClassNode('Lambda', expr) +List = ClassNode('List', expr) +ListComp = ClassNode('ListComp', expr, 'list comprehension') +Load = ClassNode('Load', expr_context) +Lt = ClassNode('Lt', cmpop, '<') +LtE = ClassNode('LtE', cmpop, '<=') +Match = ClassNode('Match', stmt) +#Avoid name clash with regex match +Match.set_name('MatchStmt') +Case = ClassNode('Case', stmt) +Guard = ClassNode('Guard', expr) +MatchAsPattern = ClassNode('MatchAsPattern', pattern) +MatchOrPattern = ClassNode('MatchOrPattern', pattern) +MatchLiteralPattern = ClassNode('MatchLiteralPattern', pattern) +MatchCapturePattern = ClassNode('MatchCapturePattern', pattern) +MatchWildcardPattern = ClassNode('MatchWildcardPattern', pattern) +MatchValuePattern = ClassNode('MatchValuePattern', pattern) +MatchSequencePattern = ClassNode('MatchSequencePattern', pattern) +MatchStarPattern = ClassNode('MatchStarPattern', pattern) +MatchMappingPattern = ClassNode('MatchMappingPattern', pattern) +MatchDoubleStarPattern = ClassNode('MatchDoubleStarPattern', pattern) +MatchKeyValuePattern = ClassNode('MatchKeyValuePattern', pattern) +MatchClassPattern = ClassNode('MatchClassPattern', pattern) +MatchKeywordPattern = ClassNode('MatchKeywordPattern', pattern) +Mod = ClassNode('Mod', operator, '%') +Mult = ClassNode('Mult', operator, '*') +Name = ClassNode('Name', expr) +Nonlocal = ClassNode('Nonlocal', stmt) +Not = ClassNode('Not', unaryop) +NotEq = ClassNode('NotEq', cmpop, '!=') +NotIn = ClassNode('NotIn', cmpop, 'not in') +Num = ClassNode('Num', expr, 'numeric literal') +Or = ClassNode('Or', boolop) +Param = ClassNode('Param', expr_context, 'parameter') +Pass = ClassNode('Pass', stmt) +Pow = ClassNode('Pow', operator, '**') +Print = ClassNode('Print', stmt) +RShift = ClassNode('RShift', operator, '>>') +Raise = ClassNode('Raise', stmt) +Repr = ClassNode('Repr', expr, 'backtick') +Return = ClassNode('Return', stmt) +Set = ClassNode('Set', expr) +SetComp = ClassNode('SetComp', expr, 'set comprehension') +#Add $ to name to prevent doc-gen adding sub type name +Slice = ClassNode('Slice', expr, '$slice') +Starred = ClassNode('Starred', expr) +Store = ClassNode('Store', expr_context) +Str = ClassNode('Str', expr, 'string literal') +Sub = ClassNode('Sub', operator, '-') +Subscript = ClassNode('Subscript', expr) +Try = ClassNode('Try', stmt) +Tuple = ClassNode('Tuple', expr) +UAdd = ClassNode('UAdd', unaryop, '+') +USub = ClassNode('USub', unaryop, '-') +UnaryOp = ClassNode('UnaryOp', expr, 'unary') +#Avoid name clash with 'unaryop' +UnaryOp.set_name('UnaryExpr') +While = ClassNode('While', stmt) +With = ClassNode('With', stmt) +Yield = ClassNode('Yield', expr) +YieldFrom = ClassNode('YieldFrom', expr, 'yield-from') +alias_list = ListNode(alias) +cmpop_list = ListNode(cmpop) +comprehension_list = ListNode(comprehension) +expr_list = ListNode(expr) +stmt_list = ListNode(stmt) +string_list = ListNode(string) +StringPart = ClassNode('StringPart', None, "implicitly concatenated part") +string_parts_list = ListNode(StringPart) +pattern_list = ListNode(pattern) + +#Template AST Nodes +TemplateWrite = ClassNode('TemplateWrite', stmt, "template write statement") +TemplateDottedNotation = ClassNode('TemplateDottedNotation', expr, "template dotted notation expression") +Filter = ClassNode("Filter", expr, "template filter expression") +PlaceHolder = ClassNode('PlaceHolder', expr, "template place-holder expression") + +Await = ClassNode('Await', expr) +MatMult = ClassNode('MatMult', operator, '@') + +scope = UnionNode(Module, Class, Function) +scope.set_name('scope') + +dict_item = ClassNode('dict_item') + +#DoubleStar in calls fn(**{'a': 1, 'c': 3}, **{'b': 2, 'd': 4}) or dict displays {'a': 1, **{'b': 2, 'd': 4}} +DictUnpacking = ClassNode('DictUnpacking', dict_item, descriptive_name='dictionary unpacking') +KeyValuePair = ClassNode('KeyValuePair', dict_item, descriptive_name='key-value pair') +keyword = ClassNode('keyword', dict_item, descriptive_name='keyword argument') + +#Initial name must match that in ast module. +FormattedStringLiteral = ClassNode("JoinedStr", expr, descriptive_name='formatted string literal') +FormattedStringLiteral.set_name("Fstring") + +FormattedValue = ClassNode("FormattedValue", expr, descriptive_name='formatted value') + +AnnAssign = ClassNode("AnnAssign", stmt, descriptive_name='annotated assignment') + +AssignExpr = ClassNode('AssignExpr', expr, "assignment expression") + +SpecialOperation = ClassNode('SpecialOperation', expr, "special operation") + +type_parameter = ClassNode('type_parameter', descriptive_name='type parameter') +type_parameter.field('location', location) +type_parameter_list = ListNode(type_parameter) + +TypeAlias = ClassNode('TypeAlias', stmt, 'type alias') +ParamSpec = ClassNode('ParamSpec', type_parameter, 'parameter spec') +TypeVar = ClassNode('TypeVar', type_parameter, 'type variable') +TypeVarTuple = ClassNode('TypeVarTuple', type_parameter, 'type variable tuple') + + +expr_or_stmt = UnionNode(expr, stmt) + +dict_item_list = ListNode(dict_item) + +ast_node = UnionNode(expr, stmt, pattern, Module, Class, Function, comprehension, StringPart, dict_item, type_parameter) +ast_node.set_name('ast_node') + +parameter = UnionNode(Name, Tuple) +parameter.set_name('parameter') + +parameter_list = ListNode(parameter) + +alias.field('value', expr) +alias.field('asname', expr, 'name') + +arguments.field('kw_defaults', expr_list, 'keyword-only default values') +arguments.field('defaults', expr_list, 'default values') +arguments.field('annotations', expr_list) +arguments.field('varargannotation', expr, '*arg annotation') +arguments.field('kwargannotation', expr, '**kwarg annotation') +arguments.field('kw_annotations', expr_list, 'keyword-only annotations') + +Assert.field('test', expr, 'value being tested') +Assert.field('msg', expr, 'failure message') + +Assign.field('value', expr) +Assign.field('targets', expr_list, 'targets') + +Attribute.field('value', expr, 'object') +Attribute.field('attr', string, 'attribute name') +Attribute.field('ctx', expr_context, 'context') + +AugAssign.field('operation', BinOp) + +BinOp.field('left', expr, 'left sub-expression') +BinOp.field('op', operator, 'operator') +BinOp.field('right', expr, 'right sub-expression') + +BoolOp.field('op', boolop, 'operator') +BoolOp.field('values', expr_list, 'sub-expressions') + +Bytes.field('s', bytes_, 'value') +Bytes.field('prefix', bytes_, 'prefix') +Bytes.field('implicitly_concatenated_parts', string_parts_list) + +Call.field('func', expr, 'callable') +Call.field('positional_args', expr_list, 'positional arguments') +Call.field('named_args', dict_item_list, 'named arguments') + +Class.field('name', string) +Class.field('body', stmt_list) + +ClassExpr.field('name', string) +ClassExpr.field('bases', expr_list) +ClassExpr.field('keywords', dict_item_list, 'keyword arguments') +ClassExpr.field('inner_scope', Class, 'class scope') +ClassExpr.field('type_parameters', type_parameter_list, 'type parameters') + +Compare.field('left', expr, 'left sub-expression') +Compare.field('ops', cmpop_list, 'comparison operators') +Compare.field('comparators', expr_list, 'right sub-expressions') + +comprehension.field('iter', expr, 'iterable') +comprehension.field('target', expr) +comprehension.field('ifs', expr_list, 'conditions') + +Delete.field('targets', expr_list) + +Dict.field('items', dict_item_list) + +DictUnpacking.field('location', location) +DictUnpacking.field('value', expr) + +DictComp.field('function', Function, 'implementation') +DictComp.field('iterable', expr) + +ExceptStmt.field('type', expr) +ExceptStmt.field('name', expr) +ExceptStmt.field('body', stmt_list) + +ExceptGroupStmt.field('type', expr) +ExceptGroupStmt.field('name', expr) +ExceptGroupStmt.field('body', stmt_list) + +Exec.field('body', expr) +Exec.field('globals', expr) +Exec.field('locals', expr) + +Expr_stmt.field('value', expr) + +For.field('target', expr) +For.field('iter', expr, 'iterable') +For.field('body', stmt_list) +For.field('orelse', stmt_list, 'else block') +For.field('is_async', bool_, 'async') + +Function.field('name', string) +Function.field('args', parameter_list, 'positional parameter list') +Function.field('vararg', expr, 'tuple (*) parameter') +Function.field('kwonlyargs', expr_list, 'keyword-only parameter list') +Function.field('kwarg', expr, 'dictionary (**) parameter') +Function.field('body', stmt_list) +Function.field('is_async', bool_, 'async') +Function.field('type_parameters', type_parameter_list, 'type parameters') + +FunctionExpr.field('name', string) +FunctionExpr.field('args', arguments, 'parameters') +FunctionExpr.field('returns', expr, 'return annotation') +FunctionExpr.field('inner_scope', Function, 'function scope') + +GeneratorExp.field('function', Function, 'implementation') +GeneratorExp.field('iterable', expr) + +Global.field('names', string_list) + +If.field('test', expr) +If.field('body', stmt_list, 'if-true block') +If.field('orelse', stmt_list, 'if-false block') + +IfExp.field('test', expr) +IfExp.field('body', expr, 'if-true expression') +IfExp.field('orelse', expr, 'if-false expression') + +Import.field('names', alias_list, 'alias list') + +ImportFrom.set_name('ImportStar') +ImportFrom.field('module', expr) + +ImportMember.field('module', expr) +ImportMember.field('name', string) + +keyword.field('location', location) +keyword.field('value', expr) +keyword.field('arg', string) + +KeyValuePair.field('location', location) +KeyValuePair.field('value', expr) +KeyValuePair.field('key', expr) + +Lambda.field('args', arguments, 'arguments') +Lambda.field('inner_scope', Function, 'function scope') + +List.field('elts', expr_list, 'element list') +List.field('ctx', expr_context, 'context') + +#For Python 3 a new scope is created and these fields are populated: +ListComp.field('function', Function, 'implementation') +ListComp.field('iterable', expr) +#For Python 2 no new scope is created and these are populated: +ListComp.field('generators', comprehension_list) +ListComp.field('elt', expr, 'elements') + +Match.field('subject', expr) +Match.field('cases', stmt_list) +Case.field('pattern', pattern) +Case.field('guard', expr) +Case.field('body', stmt_list) +Guard.field('test', expr) +MatchStarPattern.field('target', pattern) +MatchDoubleStarPattern.field('target', pattern) +MatchKeyValuePattern.field('key', pattern) +MatchKeyValuePattern.field('value', pattern) +MatchClassPattern.field('class', expr) +MatchKeywordPattern.field('attribute', expr) +MatchKeywordPattern.field('value', pattern) +MatchAsPattern.field('pattern', pattern) +MatchAsPattern.field('alias', expr) +MatchOrPattern.field('patterns', pattern_list) +MatchLiteralPattern.field('literal', expr) +MatchCapturePattern.field('variable', expr) +MatchValuePattern.field('value', expr) +MatchSequencePattern.field('patterns', pattern_list) +MatchMappingPattern.field('mappings', pattern_list) +MatchClassPattern.field('class_name', expr) +MatchClassPattern.field('positional', pattern_list) +MatchClassPattern.field('keyword', pattern_list) + +Module.field('name', string) +Module.field('hash', string , 'hash (not populated)') +Module.field('body', stmt_list) +Module.field('kind', string) + +ImportExpr.field('level', int_) +ImportExpr.field('name', string) +ImportExpr.field('top', bool_, 'top level') + +Name.field('variable', variable) +Name.field('ctx', expr_context, 'context') + +Nonlocal.field('names', string_list) + +Num.field('n', number, 'value') +Num.field('text', number) + +ParamSpec.field('name', expr) + +Print.field('dest', expr, 'destination') +Print.field('values', expr_list) +Print.field('nl', bool_, 'new line') + +#Python3 has exc & cause +Raise.field('exc', expr, 'exception') +Raise.field('cause', expr) +#Python2 has type, inst, tback +Raise.field('type', expr) +Raise.field('inst', expr, 'instance') +Raise.field('tback', expr, 'traceback') + +Repr.field('value', expr) + +Return.field('value', expr) + +Set.field('elts', expr_list, 'elements') + +SetComp.field('function', Function, 'implementation') +SetComp.field('iterable', expr) + +Slice.field('start', expr) +Slice.field('stop', expr) +Slice.field('step', expr) + +Starred.field('value', expr) +Starred.field('ctx', expr_context, 'context') + +Str.field('s', string, 'text') +Str.field('prefix', string, 'prefix') +Str.field('implicitly_concatenated_parts', string_parts_list) + +Subscript.field('value', expr) +Subscript.field('index', expr) +Subscript.field('ctx', expr_context, 'context') + +Try.field('body', stmt_list) +Try.field('orelse', stmt_list, 'else block') +Try.field('handlers', stmt_list, 'exception handlers') +Try.field('finalbody', stmt_list, 'finally block') + +Tuple.field('elts', expr_list, 'elements') +Tuple.field('ctx', expr_context, 'context') + +TypeAlias.field('name', expr) +TypeAlias.field('type_parameters', type_parameter_list) +TypeAlias.field('value', expr) + +TypeVar.field('name', expr) +TypeVar.field('bound', expr) + +TypeVarTuple.field('name', expr) + +UnaryOp.field('op', unaryop, 'operator') +UnaryOp.field('operand', expr) + +While.field('test', expr) +While.field('body', stmt_list) +While.field('orelse', stmt_list, 'else block') + +With.field('context_expr', expr, 'context manager') +With.field('optional_vars', expr, 'optional variable') +With.field('body', stmt_list) +With.field('is_async', bool_, 'async') + +Yield.field('value', expr) + +YieldFrom.field('value', expr) + +#Template AST Nodes +TemplateWrite.field('value', expr) +TemplateDottedNotation.field('value', expr, 'object') +TemplateDottedNotation.field('attr', string, 'attribute name') +TemplateDottedNotation.field('ctx', expr_context, 'context') +Filter.field('value', expr, 'filtered value') +Filter.field('filter', expr, 'filter') + +PlaceHolder.field('variable', variable) +PlaceHolder.field('ctx', expr_context, 'context') + +StringPart.field('text', string) +StringPart.field('location', location) + +Await.field('value', expr, 'expression waited upon') + +FormattedStringLiteral.field('values', expr_list) + +FormattedValue.field('value', expr, "expression to be formatted") +FormattedValue.field('conversion', string, 'type conversion') +FormattedValue.field('format_spec', FormattedStringLiteral, 'format specifier') + +AnnAssign.field('value', expr) +AnnAssign.field('annotation', expr) +AnnAssign.field('target', expr) + +SpecialOperation.field('name', string) +SpecialOperation.field('arguments', expr_list) + +AssignExpr.field('value', expr) +AssignExpr.field('target', expr) + +def all_nodes(): + nodes = [ val for val in globals().values() if isinstance(val, Node) ] + return _build_node_relations(nodes) diff --git a/python/extractor/semmle/python/modules.py b/python/extractor/semmle/python/modules.py new file mode 100644 index 00000000000..8934d810eb8 --- /dev/null +++ b/python/extractor/semmle/python/modules.py @@ -0,0 +1,214 @@ +'''MODULE_TYPES: mapping from type-code returned by +imp.find_module to Module subclass''' + +import semmle.python.parser.tokenizer +import semmle.python.parser.tsg_parser +import re +import os +from blib2to3.pgen2 import tokenize +import codecs + +from semmle.python.passes.labeller import Labeller +from semmle.util import base64digest +from semmle.profiling import timers + +__all__ = [ 'PythonSourceModule' ] + +class PythonSourceModule(object): + + kind = None + + def __init__(self, name, path, logger, bytes_source = None): + assert isinstance(path, str), path + self.name = name # May be None + self.path = path + if bytes_source is None: + with timers["load"]: + with open(self.path, 'rb') as src: + bytes_source = src.read() + if BIN_PYTHON.match(bytes_source): + self.kind = "Script" + self._ast = None + self._py_ast = None + self._lines = None + self._line_types = None + self._comments = None + self._tokens = None + self.logger = logger + with timers["decode"]: + self.encoding, self.bytes_source = semmle.python.parser.tokenizer.encoding_from_source(bytes_source) + if self.encoding != 'utf-8': + logger.debug("File '%s' has encoding %s.", path, self.encoding) + try: + self._source = self.bytes_source.decode(self.encoding) + self._illegal_encoding = False + except Exception as ex: + self.logger.warning("%s has encoding '%s'", path, self.encoding) + #Set source to a latin-1 decoding of source string (which cannot fail). + #Attempting to get the AST will raise a syntax error as expected. + self._source = self.bytes_source.decode("latin-1") + self._illegal_encoding = str(ex) + self._source = normalize_line_endings(self._source) + #Strip BOM + if self._source.startswith(u'\ufeff'): + self._source = self._source[1:] + self._secure_hash = base64digest(self._source) + assert isinstance(self._source, str) + + @property + def source(self): + return self._source + + @property + def lines(self): + if self._lines is None: + def genline(): + src = self._source + #Handle non-linux line endings + src = src.replace("\r\n", "\n").replace("\r", "\n") + length = len(src) + start = 0 + while True: + end = src.find(u'\n', start) + if end < 0: + if start < length: + yield src[start:] + return + yield src[start:end+1] + start = end+1 + self._lines = list(genline()) + return self._lines + + @property + def tokens(self): + if self._tokens is None: + with timers["tokenize"]: + tokenizer = semmle.python.parser.tokenizer.Tokenizer(self._source) + self._tokens = list(tokenizer.tokens()) + return self._tokens + + @property + def ast(self): + # The ast will be modified by the labeller, so we cannot share it with the py_ast property. + # However, we expect py_ast to be accessed and used before ast, so we avoid reparsing in that case. + if self._ast is None: + if self._illegal_encoding: + message = self._illegal_encoding + error = SyntaxError(message) + error.filename = self.path + error.lineno, error.offset = offending_byte_position(message, self.bytes_source) + raise error + self._ast = self.py_ast + self._ast.trap_name = self.trap_name + self._py_ast = None + with timers["label"]: + Labeller().apply(self) + return self._ast + + @property + def old_py_ast(self): + # The py_ast is the raw ast from the Python parser. + if self._py_ast is None: + self._py_ast = semmle.python.parser.parse(self.tokens, self.logger) + return self._py_ast + + @property + def py_ast(self): + try: + # First, try to parse the source with the old Python parser. + return self.old_py_ast + except Exception as ex: + # If that fails, try to parse the source with the new Python parser (unless it has been + # explicitly disabled). + # + # Like PYTHONUNBUFFERED for Python, we treat any non-empty string as meaning the + # flag is enabled. + # https://docs.python.org/3/using/cmdline.html#envvar-PYTHONUNBUFFERED + if os.environ.get("CODEQL_PYTHON_DISABLE_TSG_PARSER"): + if isinstance(ex, SyntaxError): + raise ex + else: + raise SyntaxError("Exception %s while parsing %s" % (ex, self.path)) + else: + try: + self._py_ast = semmle.python.parser.tsg_parser.parse(self.path, self.logger) + return self._py_ast + except SyntaxError as ex: + raise ex + except Exception as ex: + raise SyntaxError("Exception %s in tsg-python while parsing %s" % (ex, self.path)) + + + @property + def trap_name(self): + return type(self).__name__ + ':' + self.path + ":" + self._secure_hash + + def get_hash_key(self, token): + return base64digest(self.path + u":" + self._secure_hash + token) + + def get_encoding(self): + 'Returns encoding of source' + return self.encoding + + @property + def comments(self): + ''' Returns an iterable of comments in the form: + test, start, end where start and end are line. column + pairs''' + if self._comments is None: + self._lexical() + return self._comments + + def close(self): + self.bytes_source = None + self._source = None + self._ast = None + self._line_types = None + self._comments = None + self._lines = None + + def _lexical(self): + self._comments = [] + for kind, text, start, end in self.tokens: + if kind == tokenize.COMMENT: + self._comments.append((text, start, end)) + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.close() + + +NEWLINE = b'\n' +OFFENDING_BYTE_RE = re.compile(r"decode byte \w+ in position (\d+):") + +def offending_byte_position(message, string): + m = OFFENDING_BYTE_RE.search(message) + if m is None: + return (0,0) + badposition = int(m.group(1)) + prefix = string[:badposition] + line = prefix.count(NEWLINE) + 1 + column = badposition - prefix.rfind(NEWLINE) - 1 + return (line, column) + + +BIN_PYTHON = re.compile(b'#! *(/usr|/bin|/local)*/?(env)? *python') + +def is_script(path): + '''Is the file at `path` a script? (does it start with #!... python)''' + try: + with open(path, "rb") as contents: + start = contents.read(100) + return bool(BIN_PYTHON.match(start)) + except Exception: + return False + +def normalize_line_endings(src): + #Our tokenizer expects single character `\n`, `\r` or `\f` as line endings. + src = src.replace(u'\r\n', u'\n') + #Our parser expects that there are no unterminated lines. + if src and src[-1] != u'\n': + return src + u'\n' + return src diff --git a/python/extractor/semmle/python/parser/__init__.py b/python/extractor/semmle/python/parser/__init__.py new file mode 100644 index 00000000000..d5eb021f8d3 --- /dev/null +++ b/python/extractor/semmle/python/parser/__init__.py @@ -0,0 +1,153 @@ + +# Black's version of lib2to3 (modified) +from blib2to3.pytree import type_repr +from blib2to3 import pygram +from blib2to3.pgen2 import driver, token +from blib2to3.pgen2.parse import ParseError, Parser +from . import ast +from blib2to3.pgen2 import tokenize, grammar +from blib2to3.pgen2.token import tok_name +from semmle.profiling import timers + +pygram.initialize() +syms = pygram.python_symbols + + +GRAMMARS = [ + ("Python 3", pygram.python3_grammar), + ("Python 3 without async", pygram.python3_grammar_no_async), + ("Python 2 with print as function", pygram.python2_grammar_no_print_statement), + ("Python 2", pygram.python2_grammar), +] + + +SKIP_IF_SINGLE_CHILD_NAMES = { + 'atom', + 'power', + 'test', + 'not_test', + 'and_test', + 'or_test', + 'suite', + 'testlist', + 'expr', + 'xor_expr', + 'and_expr', + 'shift_expr', + 'arith_expr', + 'term', + 'factor', + 'testlist_gexp', + 'exprlist', + 'testlist_safe', + 'old_test', + 'comparison', +} + +SKIP_IF_SINGLE_CHILD = { + val for name, val in + syms.__dict__.items() + if name in SKIP_IF_SINGLE_CHILD_NAMES +} + + +class Leaf(object): + + __slots__ = "type", "value", "start", "end" + + def __init__(self, type, value, start, end): + self.type = type + self.value = value + self.start = start + self.end = end + + def __repr__(self): + """Return a canonical string representation.""" + return "%s(%s, %r)" % (self.__class__.__name__, + self.name, + self.value) + + @property + def name(self): + return tok_name.get(self.type, self.type) + +class Node(object): + + __slots__ = "type", "children", "used_names" + + def __init__(self, type, children): + self.type = type + self.children = children + + @property + def start(self): + node = self + while isinstance(node, Node): + node = node.children[0] + return node.start + + @property + def end(self): + node = self + while isinstance(node, Node): + node = node.children[-1] + return node.end + + def __repr__(self): + """Return a canonical string representation.""" + return "%s(%s, %r)" % (self.__class__.__name__, + self.name, + self.children) + + @property + def name(self): + return type_repr(self.type) + +def convert(gr, raw_node): + type, value, context, children = raw_node + if children or type in gr.number2symbol: + # If there's exactly one child, return that child instead of + # creating a new node. + if len(children) == 1 and type in SKIP_IF_SINGLE_CHILD: + return children[0] + return Node(type, children) + else: + start, end = context + return Leaf(type, value, start, end) + +def parse_tokens(gr, tokens): + """Parse a series of tokens and return the syntax tree.""" + p = Parser(gr, convert) + p.setup() + for tkn in tokens: + type, value, start, end = tkn + if type in (tokenize.COMMENT, tokenize.NL): + continue + if type == token.OP: + type = grammar.opmap[value] + if type == token.INDENT: + value = "" + if p.addtoken(type, value, (start, end)): + break + else: + # We never broke out -- EOF is too soon (how can this happen???) + raise parse.ParseError("incomplete input", + type, value, ("", start)) + return p.rootnode + + +def parse(tokens, logger): + """Given a string with source, return the lib2to3 Node.""" + for name, grammar in GRAMMARS: + try: + with timers["parse"]: + cpt = parse_tokens(grammar, tokens) + with timers["rewrite"]: + return ast.convert(logger, cpt) + except ParseError as pe: + lineno, column = pe.context[1] + logger.debug("%s at line %d, column %d using grammar for %s", pe, lineno, column, name) + exc = SyntaxError("Syntax Error") + exc.lineno = lineno + exc.offset = column + raise exc diff --git a/python/extractor/semmle/python/parser/ast.py b/python/extractor/semmle/python/parser/ast.py new file mode 100644 index 00000000000..85d87108e35 --- /dev/null +++ b/python/extractor/semmle/python/parser/ast.py @@ -0,0 +1,1491 @@ +from blib2to3.pgen2 import token +from ast import literal_eval +from semmle.python import ast +from blib2to3.pgen2.parse import ParseError +import sys + +LOAD = ast.Load() +STORE = ast.Store() +PARAM = ast.Param() +DEL = ast.Del() + +POSITIONAL = 1 +KEYWORD = 2 + + +class ParseTreeVisitor(object): + '''Standard tree-walking visitor, + using `node.name` rather than `type(node).__name__` + ''' + + def visit(self, node, extra_arg=None): + method = 'visit_' + node.name + if extra_arg is None: + return getattr(self, method)(node) + else: + return getattr(self, method)(node, extra_arg) + +class Convertor(ParseTreeVisitor): + ''' Walk the conrete parse tree, returning an AST. + The CPT is specified by blib2to3/Grammar.txt. + The AST specified by semmle/python/master.py. + Each `visit_X` method takes a `X` node in the CFG and + produces some part of the AST, usually a single node. + ''' + + def __init__(self, logger): + self.logger = logger + # To handle f-strings nested inside other f-strings, we must keep track of the stack of + # surrounding prefixes while walking the tree. This is necessary because inside an f-string + # like `f"hello{f'to{you}dear'}world"`, the string part containing "world" has (in terms of + # the concrete parse tree) a prefix of `}`, which doesn't tell us how to interpret it (in + # particular, we can't tell if it's a raw string or not). So instead we look at the top of + # the prefix stack to figure out what the "current prefix" is. The nested f-string in the + # example above demonstrates why we must do this as a stack -- we must restore the outer + # `f"` prefix when we're done with the inner `f'`-prefix string. + # + # The stack manipulation itself takes place in the `visit_FSTRING_START` and + # `visit_FSTRING_END` methods. The text wrangling takes place in the `parse_string` helper + # function. + + self.outer_prefix_stack = [] + + + def visit_file_input(self, node): + body = [] + for s in [self.visit(s) for s in node.children if s.name not in ("ENDMARKER", "NEWLINE")]: + if isinstance(s, list): + body.extend(s) + else: + body.append(s) + result = ast.Module(body) + set_location(result, node) + return result + + def visit_import_from(self, node): + level = 0 + index = 1 + module_start = node.children[index].start + while is_token(node.children[index], "."): + level += 1 + index += 1 + if is_token(node.children[index], "import"): + module_end = node.children[index-1].end + index += 1 + module_name = None + else: + module_end = node.children[index].end + module_name = self.visit(node.children[index]) + index += 2 + if is_token(node.children[index], "*"): + module = ast.ImportExpr(level, module_name, False) + set_location(module, module_start, module_end) + result = ast.ImportFrom(module) + set_location(result, node) + return result + if is_token(node.children[index], "("): + import_as_names = node.children[index+1] + else: + import_as_names = node.children[index] + aliases = [] + for import_as_name in import_as_names.children[::2]: + module = ast.ImportExpr(level, module_name, False) + set_location(module, module_start, module_end) + aliases.append(self._import_as_name(import_as_name, module)) + result = ast.Import(aliases) + set_location(result, node) + return result + + #Helper for visit_import_from + def _import_as_name(self, node, module): + name = node.children[0].value + if len(node.children) == 3: + asname = node.children[2] + else: + asname = node.children[0] + expr = ast.ImportMember(module, name) + set_location(expr, node) + rhs = make_name(asname.value, STORE, asname.start, asname.end) + result = ast.alias(expr, rhs) + set_location(result, node) + return result + + def visit_small_stmt(self, node): + return self.visit(node.children[0]) + + def visit_simple_stmt(self, node): + return [self.visit(s) for s in node.children if s.name not in ("SEMI", "NEWLINE")] + + def visit_stmt(self, node): + return self.visit(node.children[0]) + + def visit_compound_stmt(self, node): + return self.visit(node.children[0]) + + def visit_pass_stmt(self, node): + p = ast.Pass() + set_location(p, node) + return p + + def visit_classdef(self, node): + if len(node.children) == 4: + cls, name, colon, suite = node.children + args, keywords = [], [] + elif len(node.children) == 7: + cls, name, _, args, _, colon, suite = node.children + args, keywords = self.visit(args) + else: + assert len(node.children) == 6 + cls, name, _, _, colon, suite = node.children + args, keywords = [], [] + start = cls.start + end = colon.end + suite = self.visit(suite) + inner = ast.Class(name.value, suite) + set_location(inner, start, end) + cls_expr = ast.ClassExpr(name.value, [], args, keywords, inner) + set_location(cls_expr, start, end) + name_expr = make_name(name.value, STORE, name.start, name.end) + result = ast.Assign(cls_expr, [name_expr]) + set_location(result, start, end) + return result + + def visit_arglist(self, node): + all_args = self._visit_list(node.children[::2]) + args = [ arg for kind, arg in all_args if kind is POSITIONAL ] + keywords = [ arg for kind, arg in all_args if kind is KEYWORD ] + return args, keywords + + def visit_argument(self, node): + child = node.children[0] + if is_token(child, "*"): + kind, arg = POSITIONAL, ast.Starred(self.visit(node.children[1], LOAD), LOAD) + elif is_token(child, "**"): + kind, arg = KEYWORD, ast.DictUnpacking(self.visit(node.children[1], LOAD)) + elif len(node.children) == 3 and is_token(node.children[1], "="): + try: + name = get_node_value(child) + except Exception: + #Not a legal name + name = None + self.logger.warning("Illegal name for keyword on line %s", child.start[0]) + kind, arg = KEYWORD, ast.keyword(name, self.visit(node.children[2], LOAD)) + else: + arg = self.visit(child, LOAD) + if len(node.children) == 1: + return POSITIONAL, arg + elif len(node.children) == 3 and is_token(node.children[1], ":="): + return POSITIONAL, self.visit_namedexpr_test(node, LOAD) + generators = self.visit(node.children[1]) + kind, arg = POSITIONAL, ast.GeneratorExp(arg, generators) + set_location(arg, node) + rewrite_comp(arg) + set_location(arg, node) + return kind, arg + + def visit_namedexpr_test(self, node, ctx): + if len(node.children) == 1: + return self.visit(node.children[0], ctx) + target = self.visit(node.children[0], STORE) + value = self.visit(node.children[-1], LOAD) + result = ast.AssignExpr(value, target) + set_location(result, node) + return result + + def visit_test(self, node, ctx): + if len(node.children) == 1: + return self.visit(node.children[0], ctx) + else: + if ctx is not LOAD: + context_error(node) + body = self.visit(node.children[0], ctx) + test = self.visit(node.children[2], ctx) + orelse = self.visit(node.children[4], ctx) + ifexp = ast.IfExp(test, body, orelse) + set_location(ifexp, node) + return ifexp + + def visit_or_test(self, node, ctx): + return self._boolop(node, ast.Or, ctx) + + def visit_and_test(self, node, ctx): + return self._boolop(node, ast.And, ctx) + + def visit_not_test(self, node, ctx): + if len(node.children) == 1: + return self.visit(node.children[0], ctx) + if ctx is not LOAD: + context_error(node) + result = ast.UnaryOp( + ast.Not(), + self.visit(node.children[1], ctx) + ) + set_location(result, node) + return result + + # Helper for `or` and `and`. + def _boolop(self, node, opcls, ctx): + if len(node.children) == 1: + return self.visit(node.children[0], ctx) + values = [ self.visit(s, ctx) for s in node.children[::2] ] + result = ast.BoolOp(opcls(), values) + set_location(result, node) + return result + + # Helper for various binary expression visitors. + def _binary(self, node, opfact, ctx): + if len(node.children) == 1: + return self.visit(node.children[0], ctx) + if ctx is not LOAD: + context_error(node) + children = iter(node.children) + result = self.visit(next(children), LOAD) + for op in children: + item = next(children) + rhs = self.visit(item, LOAD) + result = ast.BinOp(result, opfact(op), rhs) + set_location(result, node.start, item.end) + return result + + def visit_suite(self, node): + if len(node.children) == 1: + return self.visit(node.children[0]) + result = [] + for s in [self.visit(s) for s in node.children[2:-1]]: + if isinstance(s, list): + result.extend(s) + else: + result.append(s) + return result + + def visit_expr_stmt(self, node): + if len(node.children) == 1: + result = ast.Expr(self.visit(node.children[0], LOAD)) + set_location(result, node) + return result + if len(node.children) > 1 and is_token(node.children[1], "="): + return self._assign(node) + if len(node.children) == 2: + # Annotated assignment + target = self.visit(node.children[0], STORE) + ann = node.children[1] + type_anno = self.visit(ann.children[1], LOAD) + if len(ann.children) > 2: + value = self.visit(ann.children[3], LOAD) + else: + value = None + result = ast.AnnAssign(value, type_anno, target) + else: + #Augmented assignment + lhs = self.visit(node.children[0], LOAD) + op = self.visit(node.children[1]) + rhs = self.visit(node.children[2], LOAD) + expr = ast.BinOp(lhs, op, rhs) + set_location(expr, node) + result = ast.AugAssign(expr) + set_location(result, node) + return result + + def visit_augassign(self, node): + return AUG_ASSIGN_OPS[node.children[0].value]() + + #Helper for visit_expr_stmt (for assignment) + def _assign(self, node): + targets = [ self.visit(t, STORE) for t in node.children[:-1:2]] + result = ast.Assign(self.visit(node.children[-1], LOAD), targets) + set_location(result, node) + return result + + def visit_testlist(self, node, ctx): + if len(node.children) == 1: + return self.visit(node.children[0], ctx) + elts = self._visit_list(node.children[::2], ctx) + result = ast.Tuple(elts, ctx) + set_location(result, node) + return result + + visit_testlist_star_expr = visit_testlist + + def visit_comparison(self, node, ctx): + if len(node.children) == 1: + return self.visit(node.children[0], ctx) + if ctx is not LOAD: + context_error(node) + left = self.visit(node.children[0], ctx) + ops = [ self.visit(op) for op in node.children[1::2]] + comps = [ self.visit(op, ctx) for op in node.children[2::2]] + result = ast.Compare(left, ops, comps) + set_location(result, node) + return result + + def visit_comp_op(self, node): + if len(node.children) == 1: + return COMP_OP_CLASSES[node.children[0].value]() + else: + assert len(node.children) == 2 + return ast.IsNot() if node.children[0].value == "is" else ast.NotIn() + + def visit_expr(self, node, ctx): + return self._binary(node, lambda _: ast.BitOr(), ctx) + + def visit_xor_expr(self, node, ctx): + return self._binary(node, lambda _: ast.BitXor(), ctx) + + def visit_and_expr(self, node, ctx): + return self._binary(node, lambda _: ast.BitAnd(), ctx) + + def visit_shift_expr(self, node, ctx): + return self._binary( + node, + lambda op: ast.LShift() if op.value == "<<" else ast.RShift(), + ctx + ) + + def visit_arith_expr(self, node, ctx): + return self._binary( + node, + lambda op: ast.Add() if op.value == "+" else ast.Sub(), + ctx + ) + + def visit_term(self, node, ctx): + return self._binary( + node, + lambda op: TERM_OP_CLASSES[op.value](), + ctx + ) + + def visit_factor(self, node, ctx): + if len(node.children) == 1: + return self.visit(node.children[0], ctx) + result = ast.UnaryOp( + FACTOR_OP_CLASSES[node.children[0].value](), + self.visit(node.children[1], ctx) + ) + set_location(result, node) + return result + + def visit_power(self, node, ctx): + '''This part of the Grammar is formulated in a slightly + awkward way, so we need to recursively handle the `await` + prefix, then the `** factor` suffix, then the atom and trailers. + ''' + + # Because `await` was a valid identifier in earlier versions of Python, + # we cannot assume it indicates an `await` expression. We therefore + # have to look at what follows in order to make a decision. The + # relevant part of the grammar is + # + # power: ['await'] atom trailer* ['**' factor] + # + # The case we wish to identify is when 'await' appears, but as an + # `atom`, and not an `await` token. + # + # Because `atom` nodes may no longer be present (see + # `SKIP_IF_SINGLE_CHILD_NAMES` in `__init__.py`) we instead look at the + # node following the (potentially) skipped `atom`. In particular, if + # the following node is a `trailer` or "**" token, we know that the + # given node cannot be an `await` token, and must be an `atom` instead. + try: + next_node = node.children[1] + next_is_atom = next_node.name != "trailer" and not is_token(next_node, "**") + except (IndexError, AttributeError): + # IndexError if `node` has at most one child. + # AttributeError if `next_node` is a `Leaf` instead of a `Node`. + next_is_atom = False + if is_token(node.children[0], "await") and next_is_atom: + if ctx is not LOAD: + context_error(node) + pow = self._power(node.children[1:], ctx) + result = ast.Await(pow) + set_location(result, node) + return result + else: + return self._power(node.children, ctx) + + #Helper for visit_power + def _power(self, children, ctx): + start = children[0].start + if len(children) > 1 and is_token(children[-2], "**"): + if ctx is not LOAD: + context_error(children[0]) + trailers = children[1:-2] + pow_expr = self.visit(children[-1], ctx) + else: + trailers = children[1:] + pow_expr = None + if trailers: + expr = self.visit(children[0], LOAD) + for trailer in trailers[:-1]: + expr = self._apply_trailer(expr, trailer, start, LOAD) + expr = self._apply_trailer(expr, trailers[-1], start, ctx) + else: + expr = self.visit(children[0], ctx) + if pow_expr: + expr = ast.BinOp(expr, ast.Pow(), pow_expr) + set_location(expr, children[0].start, children[-1].end) + return expr + + #Helper for _power + def _atom(self, children, ctx): + start = children[0].start + if len(children) == 1: + return self.visit(children[0], ctx) + atom = self.visit(children[0], LOAD) + for trailer in children[1:-1]: + atom = self._apply_trailer(atom, trailer, start, LOAD) + atom = self._apply_trailer(atom, children[-1], start, ctx) + return atom + + #Helper for _atom + def _apply_trailer(self, atom, trailer, start, ctx): + children = trailer.children + left = children[0] + if is_token(left, "("): + if is_token(children[1], ")"): + args, keywords = [], [] + end = children[1].end + else: + args, keywords = self.visit(children[1]) + end = children[2].end + result = ast.Call(atom, args, keywords) + elif is_token(left, "["): + result = ast.Subscript(atom, self.visit(children[1], LOAD), ctx) + end = children[2].end + else: + assert is_token(left, ".") + result = ast.Attribute(atom, children[1].value, ctx) + end = children[1].end + set_location(result, start, end) + return result + + def visit_atom(self, node, ctx): + left = node.children[0] + if left.value in "[({": + n = node.children[1] + if hasattr(n, "value") and n.value in "])}": + if n.value == ")": + result = ast.Tuple([], ctx) + elif n.value == "]": + result = ast.List([], ctx) + else: + result = ast.Dict([]) + set_location(result, node) + return result + else: + result = self.visit(node.children[1], ctx) + if left.value == "(": + result.parenthesised = True + else: + #Meaningful bracketing + set_location(result, node) + if isinstance(result, (ast.GeneratorExp, ast.ListComp, ast.SetComp, ast.DictComp)): + rewrite_comp(result) + return result + if left.type == token.NAME: + return make_name(left.value, ctx, left.start, left.end) + if ctx is not LOAD: + context_error(node) + if left.type == token.NUMBER: + val = get_numeric_value(left) + result = ast.Num(val, left.value) + set_location(result, left) + return result + if left.value == ".": + assert len(node.children) == 3 and node.children[2].value == "." + result = ast.Ellipsis() + set_location(result, node) + return result + assert left.type == token.BACKQUOTE + result = ast.Repr(self.visit(node.children[1], LOAD)) + set_location(result, node) + return result + + def visit_STRING(self, node, ctx): + if ctx is not LOAD: + context_error(node) + outer_prefix = self.outer_prefix_stack[-1] if self.outer_prefix_stack else None + prefix, s = parse_string(node.value, self.logger, outer_prefix) + text = get_text(node.value, outer_prefix) + result = ast.StringPart(prefix, text, s) + set_location(result, node) + return result + + def visit_NUMBER(self, node, ctx): + if ctx is not LOAD: + context_error(node) + val = get_numeric_value(node) + result = ast.Num(val, node.value) + set_location(result, node) + return result + + def visit_funcdef(self, node, is_async=False): + # funcdef: 'def' NAME parameters ['->' test] ':' suite + name = node.children[1].value + if node.children[3].value == "->": + return_type = self.visit(node.children[4], LOAD) + end = node.children[5].end + body = self.visit(node.children[6]) + else: + return_type = None + end = node.children[3].end + body = self.visit(node.children[4]) + start = node.children[0].start + params = node.children[2] + if len(params.children) == 2: + args, vararg, kwonlyargs, kwarg = [], None, [], None + else: + args, vararg, kwonlyargs, kwarg = self._get_parameters(params.children[1]) + func = ast.Function(name, [], args, vararg, kwonlyargs, kwarg, body, is_async) + set_location(func, start, end) + if len(params.children) == 2: + args = ast.arguments([], [], [], None, None, []) + else: + args = self._get_defaults_and_annotations(params.children[1]) + funcexpr = ast.FunctionExpr(name, args, return_type, func) + set_location(funcexpr, start, end) + name_expr = make_name(name, STORE, node.children[1].start, node.children[1].end) + result = ast.Assign(funcexpr, [name_expr]) + set_location(result, start, end) + return result + + #Helper for visit_funcdef and visit_lambdef + def _get_parameters(self, node): + '''Returns the quadruple: args, vararg, kwonlyargs, kwarg + ''' + args = [] + vararg = None + kwonlyargs = [] + kwarg = None + children = iter(node.children) + arg = None + for child in children: + if is_token(child, "*"): + try: + child = next(children) + except StopIteration: + pass + else: + if not is_token(child, ","): + vararg = self.visit(child, PARAM) + break + if is_token(child, ","): + pass + elif is_token(child, "/"): + pass + elif is_token(child, "="): + next(children) + elif is_token(child, "**"): + child = next(children) + kwarg = self.visit(child, PARAM) + else: + arg = self.visit(child, PARAM) + args.append(arg) + #kwonly args + for child in children: + if is_token(child, ","): + pass + elif is_token(child, "="): + next(children) + elif is_token(child, "**"): + child = next(children) + kwarg = self.visit(child, PARAM) + else: + arg = self.visit(child, PARAM) + kwonlyargs.append(arg) + return args, vararg, kwonlyargs, kwarg + + #Helper for visit_funcdef and visit_lambdef + def _get_defaults_and_annotations(self, node): + defaults = [] + kw_defaults = [] + annotations = [] + varargannotation = None + kwargannotation = None + kw_annotations = [] + children = iter(node.children) + # Because we want the i'th element of `kw_defaults` to be the default value for + # the i'th keyword-only argument, when encountering the combined token for the + # argument name and optional annotation, we add a `None` to `kw_defaults` assuming + # that there is no default value. If there turns out to be a default value, we + # remove the `None` and add the real default value. Like-wise for `defaults`. + + # positional-only args and "normal" args + for child in children: + if is_token(child, "*"): + try: + child = next(children) + except StopIteration: + pass + else: + if not is_token(child, ","): + varargannotation = self.visit(child, LOAD) + break + if is_token(child, ","): + pass + elif is_token(child, "/"): + pass + elif is_token(child, "="): + child = next(children) + defaults.pop() + defaults.append(self.visit(child, LOAD)) + elif is_token(child, "**"): + child = next(children) + kwargannotation = self.visit(child, LOAD) + arg = None + else: + # Preemptively assume there is no default argument (indicated by None) + defaults.append(None) + annotations.append(self.visit(child, LOAD)) + + #kwonly args + for child in children: + if is_token(child, ","): + pass + elif is_token(child, "="): + child = next(children) + kw_defaults.pop() + kw_defaults.append(self.visit(child, LOAD)) + elif is_token(child, "**"): + child = next(children) + kwargannotation = self.visit(child, LOAD) + else: + # Preemptively assume there is no default argument (indicated by None) + kw_defaults.append(None) + kw_annotations.append(self.visit(child, LOAD)) + result = ast.arguments(defaults, kw_defaults, annotations, varargannotation, kwargannotation, kw_annotations) + set_location(result, node) + return result + + def visit_tfpdef(self, node, ctx): + # TO DO Support tuple parameters + # No one uses them any more, so this isn't super important. + child = node.children[0] + if is_token(child, "("): + return None + return self.visit(child, ctx) + + def visit_tname(self, node, ctx): + if ctx is PARAM: + child = node.children[0] + return make_name(child.value, ctx, child.start, child.end) + elif len(node.children) > 1: + return self.visit(node.children[2], ctx) + else: + return None + + def visit_decorated(self, node): + asgn = self.visit(node.children[1]) + value = asgn.value + for deco in reversed(node.children[0].children): + defn = value + decorator = self.visit(deco) + value = ast.Call(decorator, [defn], []) + copy_location(decorator, value) + asgn.value = value + return asgn + + def visit_decorators(self, node): + return self._visit_list(node.children) + + def visit_decorator(self, node): + namedexpr_test = node.children[1] + result = self.visit_namedexpr_test(namedexpr_test, LOAD) + set_location(result, namedexpr_test) + return result + + def _visit_list(self, items, ctx=None): + if ctx is None: + return [ self.visit(i) for i in items ] + else: + return [ self.visit(i, ctx) for i in items ] + + def visit_dotted_name(self, node): + return ".".join(name.value for name in node.children[::2]) + + def visit_NAME(self, name, ctx): + return make_name(name.value, ctx, name.start, name.end) + + def visit_listmaker(self, node, ctx): + if len(node.children) == 1 or is_token(node.children[1], ","): + items = [self.visit(c, ctx) for c in node.children[::2]] + result = ast.List(items, ctx) + else: + if ctx is not LOAD: + context_error(node) + elt = self.visit(node.children[0], ctx) + generators = self.visit(node.children[1]) + result = ast.ListComp(elt, generators) + set_location(result, node) + return result + + def visit_testlist_gexp(self, node, ctx): + if len(node.children) == 1: + return self.visit(node.children[0], ctx) + if is_token(node.children[1], ","): + items = [self.visit(c, ctx) for c in node.children[::2]] + result = ast.Tuple(items, ctx) + else: + if ctx is not LOAD: + context_error(node) + elt = self.visit(node.children[0], ctx) + generators = self.visit(node.children[1]) + result = ast.GeneratorExp(elt, generators) + set_location(result, node) + return result + + def visit_comp_for(self, node): + is_async = is_token(node.children[0], "async") + target = self.visit(node.children[1+is_async], STORE) + iter = self.visit(node.children[3+is_async], LOAD) + if len(node.children) == 5+is_async: + ifs = [] + end = iter._end + comp_iter = self.visit(node.children[4+is_async]) + while comp_iter and not isinstance(comp_iter[0], ast.comprehension): + ifs.append(comp_iter[0]) + end = comp_iter[0]._end + comp_iter = comp_iter[1:] + comp = ast.comprehension(target, iter, ifs) + comp.is_async = is_async + set_location(comp, node.children[0].start, end) + return [comp] + comp_iter + else: + comp = ast.comprehension(target, iter, []) + comp.is_async = is_async + set_location(comp, node) + return [comp] + + visit_old_comp_for = visit_comp_for + + def visit_comp_iter(self, node): + return self.visit(node.children[0]) + + def visit_comp_if(self, node): + cond = self.visit(node.children[1], LOAD) + if len(node.children) == 3: + comp_list = self.visit(node.children[2]) + return [cond] + comp_list + else: + return [cond] + + visit_old_comp_if = visit_comp_if + + visit_old_comp_iter = visit_comp_iter + + def visit_exprlist(self, node, ctx): + #Despite the name this returns a single expression + if len(node.children) == 1: + return self.visit(node.children[0], ctx) + else: + elts = self._visit_list(node.children[::2], ctx) + result = ast.Tuple(elts, ctx) + set_location(result, node) + return result + + visit_testlist_safe = visit_exprlist + + def visit_old_test(self, node, ctx): + return self.visit(node.children[0], ctx) + + def visit_if_stmt(self, node): + endindex = len(node.children) + if is_token(node.children[-3], "else"): + orelse = self.visit(node.children[-1]) + endindex -= 3 + else: + orelse = None + while endindex: + test = self.visit(node.children[endindex-3], LOAD) + body = self.visit(node.children[endindex-1]) + result = ast.If(test, body, orelse) + start = node.children[endindex-4].start + end = node.children[endindex-2].end + set_location(result, start, end) + orelse = [result] + endindex -= 4 + return result + + def visit_import_stmt(self, node): + return self.visit(node.children[0]) + + def visit_import_name(self, node): + aliases = self.visit(node.children[1]) + result = ast.Import(aliases) + set_location(result, node) + return result + + def visit_dotted_as_names(self, node): + return self._visit_list(node.children[::2]) + + def visit_dotted_as_name(self, node): + child0 = node.children[0] + dotted_name = self.visit(child0) + if len(node.children) == 3: + value = ast.ImportExpr(0, dotted_name, False) + child2 = node.children[2] + asname = make_name(child2.value, STORE, child2.start, child2.end) + else: + value = ast.ImportExpr(0, dotted_name, True) + topname = dotted_name.split(".")[0] + asname = make_name(topname, STORE, child0.start, child0.end) + set_location(value, child0) + result = ast.alias(value, asname) + set_location(result, node) + return result + + def visit_dictsetmaker(self, node, ctx): + if ctx is not LOAD: + context_error(node) + if is_token(node.children[0], "**") or len(node.children) > 1 and is_token(node.children[1], ":"): + return self._dictmaker(node) + else: + return self._setmaker(node) + + #Helper for visit_dictsetmaker (for dictionaries) + def _dictmaker(self, node): + if len(node.children) == 4 and is_token(node.children[1], ":") and not is_token(node.children[3], ","): + #Comprehension form + key = self.visit(node.children[0], LOAD) + value = self.visit(node.children[2], LOAD) + generators = self.visit(node.children[3]) + result = ast.DictComp(key, value, generators) + set_location(result, node) + return result + index = 0 + items = [] + while len(node.children) > index: + if is_token(node.children[index], "**"): + d = self.visit(node.children[index+1], LOAD) + item = ast.DictUnpacking(d) + set_location(item, node.children[index].start, node.children[index+1].end) + index += 3 + else: + key = self.visit(node.children[index], LOAD) + value = self.visit(node.children[index+2], LOAD) + item = ast.KeyValuePair(key, value) + set_location(item, node.children[index].start, node.children[index+2].end) + index += 4 + items.append(item) + result = ast.Dict(items) + set_location(result, node) + return result + + #Helper for visit_dictsetmaker (for sets) + def _setmaker(self, node): + if len(node.children) == 2 and not is_token(node.children[1], ","): + #Comprehension form + elt = self.visit(node.children[0], LOAD) + generators = self.visit(node.children[1]) + result = ast.SetComp(elt, generators) + set_location(result, node) + return result + items = self._visit_list(node.children[::2], LOAD) + result = ast.Set(items) + set_location(result, node) + return result + + def visit_while_stmt(self, node): + test = self.visit(node.children[1], LOAD) + body = self.visit(node.children[3]) + if len(node.children) == 7: + orelse = self.visit(node.children[6]) + else: + orelse = None + result = ast.While(test, body, orelse) + set_location(result, node.children[0].start, node.children[2].end) + return result + + def visit_flow_stmt(self, node): + return self.visit(node.children[0]) + + def visit_break_stmt(self, node): + result = ast.Break() + set_location(result, node) + return result + + def visit_continue_stmt(self, node): + result = ast.Continue() + set_location(result, node) + return result + + def visit_return_stmt(self, node): + if len(node.children) == 2: + result = ast.Return(self.visit(node.children[1], LOAD)) + else: + result = ast.Return(None) + set_location(result, node) + return result + + def visit_raise_stmt(self, node): + result = ast.Raise() + set_location(result, node) + if len(node.children) == 1: + return result + result.exc = self.visit(node.children[1], LOAD) + if len(node.children) > 3: + if is_token(node.children[2], "from"): + result.cause = self.visit(node.children[3], LOAD) + else: + result.type = result.exc + del result.exc + result.inst = self.visit(node.children[3], LOAD) + if len(node.children) == 6: + result.tback = self.visit(node.children[5], LOAD) + return result + + def visit_yield_stmt(self, node): + result = ast.Expr(self.visit(node.children[0], LOAD)) + set_location(result, node) + return result + + def visit_yield_expr(self, node, ctx): + if ctx is not LOAD: + context_error(node) + if len(node.children) == 1: + result = ast.Yield(None) + else: + if is_token(node.children[1].children[0], "from"): + result = ast.YieldFrom(self.visit(node.children[1].children[1], LOAD)) + else: + result = ast.Yield(self.visit(node.children[1].children[0], LOAD)) + set_location(result, node) + return result + + def visit_try_stmt(self, node): + body = self.visit(node.children[2]) + index = 3 + handlers = [] + while len(node.children) > index and not hasattr(node.children[index], "value"): + #Except block. + type, name = self.visit(node.children[index]) + handler_body = self.visit(node.children[index+2]) + handler = ast.ExceptStmt(type, name, handler_body) + set_location(handler, node.children[index].start , node.children[index+1].end) + handlers.append(handler) + index += 3 + if len(node.children) > index and is_token(node.children[index], "else"): + orelse = self.visit(node.children[index+2]) + else: + orelse = [] + if is_token(node.children[-3], "finally"): + finalbody = self.visit(node.children[-1]) + else: + finalbody = [] + result = ast.Try(body, orelse, handlers, finalbody) + set_location(result, node.start, node.children[1].end) + return result + + def visit_except_clause(self, node): + type, name = None, None + if len(node.children) > 1: + type = self.visit(node.children[1], LOAD) + if len(node.children) > 3: + name = self.visit(node.children[3], STORE) + return type, name + + def visit_del_stmt(self, node): + if len(node.children) > 1: + result = ast.Delete(self._visit_list(node.children[1].children[::2], DEL)) + else: + result = ast.Delete([]) + set_location(result, node) + return result + + visit_subscriptlist = visit_testlist + visit_testlist1 = visit_testlist + + def visit_subscript(self, node, ctx): + if len(node.children) == 1 and not is_token(node.children[0], ":"): + return self.visit(node.children[0], ctx) + values = [None, None, None] + index = 0 + for child in node.children: + if is_token(child, ":"): + index += 1 + else: + values[index] = self.visit(child, LOAD) + result = ast.Slice(*values) + set_location(result, node) + return result + + def visit_sliceop(self, node, ctx): + if ctx is not LOAD: + context_error(node) + if len(node.children) == 2: + return self.visit(node.children[1], LOAD) + else: + return None + + def visit_assert_stmt(self, node): + test = self.visit(node.children[1], LOAD) + if len(node.children) > 2: + msg = self.visit(node.children[3], LOAD) + else: + msg = None + result = ast.Assert(test, msg) + set_location(result, node) + return result + + def visit_for_stmt(self, node, is_async=False): + target = self.visit(node.children[1], STORE) + iter = self.visit(node.children[3], LOAD) + body = self.visit(node.children[5]) + if len(node.children) == 9: + orelse = self.visit(node.children[8]) + else: + orelse = None + result = ast.For(target, iter, body, orelse) + result.is_async = is_async + set_location(result, node.children[0].start, node.children[4].end) + return result + + def visit_global_stmt(self, node): + cls = ast.Global if node.children[0].value == "global" else ast.Nonlocal + names = [child.value for child in node.children[1::2]] + result = cls(names) + set_location(result, node) + return result + + def visit_lambdef(self, node, ctx): + if ctx is not LOAD: + context_error(node) + test = self.visit(node.children[-1], LOAD) + stmt = ast.Return(test) + set_location(stmt, node.children[-1]) + if is_token(node.children[1], ":"): + args, vararg, kwonlyargs, kwarg = [], None, [], None + else: + args, vararg, kwonlyargs, kwarg = self._get_parameters(node.children[1]) + func = ast.Function("lambda", [], args, vararg, kwonlyargs, kwarg, [stmt], False) + set_location(func, node) + if is_token(node.children[1], ":"): + args = ast.arguments([], [], [], None, None, []) + else: + args = self._get_defaults_and_annotations(node.children[1]) + result = ast.Lambda(args, func) + set_location(result, node) + return result + + visit_old_lambdef = visit_lambdef + + visit_vfpdef = visit_tfpdef + + def visit_vname(self, node, ctx): + if ctx is PARAM: + child = node.children[0] + return make_name(child.value, ctx, child.start, child.end) + else: + return None + + def visit_star_expr(self, node, ctx): + result = ast.Starred(self.visit(node.children[1], ctx), ctx) + set_location(result, node) + return result + + def visit_with_stmt(self, node, is_async=False): + body = self.visit(node.children[-1]) + for item in node.children[-3:0:-2]: + ctx_mngr, opt_vars = self.visit(item) + withstmt = ast.With(ctx_mngr, opt_vars, body) + set_location(withstmt, item) + body = [withstmt] + set_location(withstmt, node.children[0].start, node.children[-2].end) + withstmt.is_async = is_async + return withstmt + + def visit_with_item(self, node): + ctx_mngr = self.visit(node.children[0], LOAD) + if len(node.children) == 1: + return ctx_mngr, None + else: + return ctx_mngr, self.visit(node.children[2], STORE) + + def visit_async_stmt(self, node): + return self.visit(node.children[1], True) + + visit_async_funcdef = visit_async_stmt + + def visit_print_stmt(self, node): + if len(node.children) > 1 and is_token(node.children[1], ">>"): + dest = self.visit(node.children[2], LOAD) + items = node.children[4::2] + else: + dest = None + items = node.children[1::2] + values = self._visit_list(items, LOAD) + nl = not is_token(node.children[-1], ",") + result = ast.Print(dest, values, nl) + set_location(result, node) + return result + + def visit_exec_stmt(self, node): + body = self.visit(node.children[1], LOAD) + globals, locals = None, None + if len(node.children) > 3: + globals = self.visit(node.children[3], LOAD) + if len(node.children) > 5: + locals = self.visit(node.children[5], LOAD) + result = ast.Exec(body, globals, locals) + set_location(result, node) + return result + + def visit_special_operation(self, node, ctx): + if ctx is not LOAD: + context_error(node) + name = node.children[0].value + if len(node.children) == 3: + args = [] + else: + args = self._visit_list(node.children[2].children[::2], LOAD) + result = ast.SpecialOperation(name, args) + set_location(result, node) + return result + + def visit_string(self, node, ctx): + + def convert_parts_to_expr(): + if not current_parts: + return None + if len(current_parts) == 1: + string = ast.Str(current_parts[0].s, current_parts[0].prefix, None) + else: + # Our string parts may be any combination of byte and unicode + # strings, as this is valid in Python 2. We therefore decode + # the strings into unicode before concatenating. + text = "".join(decode_str(p.s) for p in current_parts) + string = ast.Str(text, current_parts[0].prefix, current_parts[:]) + start = current_parts[0].lineno, current_parts[0].col_offset + set_location(string, start, current_parts[-1]._end) + current_parts[:] = [] + return string + + if ctx is not LOAD: + context_error(node) + parts = [] + for p in self._visit_list(node.children, LOAD): + if isinstance(p, list): + parts.extend(p) + else: + parts.append(p) + current_parts = [] + exprs = [] + for part in parts: + if part is None: + #Conversion -- currently ignored. + pass + elif isinstance(part, ast.StringPart): + current_parts.append(part) + else: + assert isinstance(part, ast.expr), part + string = convert_parts_to_expr() + if string: + exprs.append(string) + exprs.append(part) + string = convert_parts_to_expr() + if string: + exprs.append(string) + if len(exprs) == 1: + return exprs[0] + result = ast.JoinedStr(exprs) + set_location(result, node) + return result + + def visit_fstring_part(self, node, ctx): + nodes_to_visit = [] + for node in node.children: + if node.name == 'format_specifier': + # Flatten format_specifiers first + nodes_to_visit += [ n for n in node.children if not n.name == 'FSTRING_SPEC' ] + else: + nodes_to_visit += [node] + + return self._visit_list(nodes_to_visit, ctx) + + def visit_format_specifier(self, node, ctx): + # This will currently never be visited because of the above flattening + assert ctx is LOAD + #Currently ignored + return None + + def visit_CONVERSION(self, node, ctx): + return None + + def visit_COLON(self, node, ctx): + return None + + def visit_EQUAL(self, node, ctx): + return None + + def visit_FSTRING_START(self, node, ctx): + string = self.visit_STRING(node, ctx) + # Push the current prefix onto the prefix stack + self.outer_prefix_stack.append(string.prefix) + return string + + def visit_FSTRING_END(self, node, ctx): + string = self.visit_STRING(node, ctx) + # We're done with this f-string, so pop its prefix off the prefix stack + self.outer_prefix_stack.pop() + return string + + visit_FSTRING_MID = visit_STRING + +# In the following function, we decode to `latin-1` in order to preserve +# the byte values present in the string. This is an undocumented feature of +# this encoding. See also the `test_python_sanity.py` test file in `/tests`. + +def decode_str(s): + if isinstance(s, bytes): + return str(s, 'latin-1') + else: + return s + +def context_error(node): + s = SyntaxError("Invalid context") + s.lineno, s.offset = node.start + raise s + +def is_token(node, text): + '''Holds if `node` is a token (terminal) and its textual value is `text`''' + return hasattr(node, "value") and node.value == text + +def get_node_value(node): + '''Get the value from a NAME node, + stripping redundant CPT nodes''' + while hasattr(node, "children"): + assert len(node.children) == 1 + node = node.children[0] + return node.value + +#Mapping from comparison operator strings to ast classes. +COMP_OP_CLASSES = { + "<": ast.Lt, + "<=": ast.LtE, + ">": ast.Gt, + ">=": ast.GtE, + "==": ast.Eq, + "<>": ast.NotEq, + "!=": ast.NotEq, + "in": ast.In, + "not in": ast.NotIn, + "is": ast.Is, + "is not": ast.IsNot, +} + +#Mapping from multiplicative operator strings to ast classes. +TERM_OP_CLASSES = { + '*': ast.Mult, + '/': ast.Div, + '%': ast.Mod, + '//': ast.FloorDiv, + '@': ast.MatMult, +} + +#Mapping from additive operator strings to ast classes. +FACTOR_OP_CLASSES = { + '+': ast.UAdd, + '-': ast.USub, + '~': ast.Invert, +} + +#Mapping from assignment operator strings to ast classes. +AUG_ASSIGN_OPS = { + '+=': ast.Add, + '-=': ast.Sub, + '*=': ast.Mult, + '/=': ast.Div, + '%=': ast.Mod, + '&=': ast.BitAnd, + '|=': ast.BitOr, + '^=': ast.BitXor, + '<<=': ast.LShift, + '>>=': ast.RShift, + '**=': ast.Pow, + '//=': ast.FloorDiv, + '@=': ast.MatMult, +} + +def make_name(name, ctx, start, end): + '''Create a `Name` ast node''' + variable = ast.Variable(name) + node = ast.Name(variable, ctx) + set_location(node, start, end) + return node + +def set_location(astnode, cptnode_or_start, end=None): + '''Set the location of `astnode` from + either the CPT node or pair of locations. + ''' + if end is None: + astnode.lineno, astnode.col_offset = cptnode_or_start.start + astnode._end = cptnode_or_start.end + else: + astnode.lineno, astnode.col_offset = cptnode_or_start + astnode._end = end + +def split_full_prefix(s): + """Splits a prefix (or a string starting with a prefix) into prefix and quote parts.""" + quote_start = 0 + # First, locate the end of the prefix (and the start of the quotes) + while s[quote_start] not in "'\"}": + quote_start += 1 + # Next, find the end of the quotes. This is either one character past `quote_start`, or three + # (for triple-quoted strings). + if s[quote_start:quote_start + 3] in ("'''",'"""'): + prefix_end = quote_start + 3 + else: + prefix_end = quote_start + 1 + + return s[:quote_start], s[quote_start:prefix_end] + + +def split_string(s, outer_prefix): + """Splits a string into prefix, quotes, and content.""" + s_prefix, s_quotes = split_full_prefix(s) + + quote_start = len(s_prefix) + prefix_end = quote_start + len(s_quotes) + + # If the string starts with `}`, it is a non-inital string part of an f-string. In this case we + # must use the prefix and quotes from the outer f-string. + if s[0] == '}': + prefix, quotes = split_full_prefix(outer_prefix) + else: + prefix, quotes = s_prefix, s_quotes + + # The string either ends with a `{` (if it comes before an interpolation inside an f-string) + # or else it ends with the same quotes as it begins with. + if s[-1] == "{": + content = s[prefix_end:-1] + else: + content = s[prefix_end:-len(quotes)] + + return prefix.lower(), quotes, content + +def get_text(s, outer_prefix): + """Returns a cleaned-up text version of the string, normalizing the quotes and removing any + format string marker.""" + prefix, quotes, content = split_string(s, outer_prefix) + return prefix.strip("fF") + quotes + content + quotes + +def parse_string(s, logger, outer_prefix): + '''Gets the prefix and escaped string text''' + prefix, quotes, content = split_string(s, outer_prefix) + saved_content = content + try: + ends_with_illegal_character = False + # If the string ends with the same quote character as the outer quotes (and/or backslashes) + # (e.g. the first string part of `f"""hello"{0}"""`), we must take care to not accidently create + # the ending quotes at the wrong place. (`literal_eval` would be unhappy with `"""hello""""` + # as an input.) To do this, we insert an extra space at the end (that we then must remember + # to remove later on). + if content.endswith(quotes[0]) or content.endswith('\\'): + ends_with_illegal_character = True + content = content + " " + text = prefix.strip("fF") + quotes + content + quotes + s = literal_eval(text) + except Exception as ex: + # Something has gone wrong, but we still have the original form - Should be OK. + logger.warning("Unable to parse string %s: %s", text, ex) + logger.traceback() + ends_with_illegal_character = False + s = saved_content + if isinstance(s, bytes): + try: + s = s.decode(sys.getfilesystemencoding()) + except UnicodeDecodeError: + s = decode_str(s) + if ends_with_illegal_character: + s = s[:-1] + return prefix + quotes, s + +ESCAPES = "" + +def get_numeric_value(node): + '''Gets numeric value from a CPT leaf node.''' + value = node.value + value = value.replace("_", "") + chars = set(value.lower()) + try: + if u'.' in chars or u'e' in chars or u'j' in chars: + # Probable float or hex or imaginary + return literal_eval(value) + if len(value) > 1 and value[0] == u'0' and value[1] not in u'boxlBOXL': + # Old-style octal + value = u'0o' + value[1:] + if value[-1] in u'lL': + return literal_eval(value[:-1]) + return literal_eval(value) + except ValueError: + raise ParseError("Not a valid numeric value", node.type, node.value, (node.start, node.end)) + +#This rewriting step is performed separately for two reasons. +# 1. It is complicated +# 2. In future, we may want to make the AST more like the syntax and less like the semantics. +# Keeping step separate should make that a bit easier. +def rewrite_comp(node): + if hasattr(node, "function"): + return + gens = node.generators + if hasattr(node, "elt"): + elt = node.elt + del node.elt + else: + elt = ast.Tuple([node.value, node.key], LOAD) + elt.lineno = node.key.lineno + elt.col_offset = node.key.col_offset + elt._end = node.value._end + del node.key + del node.value + y = ast.Yield(elt) + copy_location(elt, y) + stmt = ast.Expr(y) + copy_location(elt, stmt) + for gen in reversed(gens[1:]): + for if_ in gen.ifs: + stmt = ast.If(if_, [stmt], None) + copy_location(if_, stmt) + stmt = ast.For(gen.target, gen.iter, [stmt], None) + if getattr(gen, "is_async", False): + stmt.is_async = True + copy_location(node, stmt) + for if_ in gens[0].ifs: + stmt = ast.If(if_, [stmt], None) + copy_location(if_, stmt) + p0 = ".0" + pvar = ast.Variable(p0) + arg = ast.Name(pvar, LOAD) + copy_location(node, arg) + stmt = ast.For(gens[0].target, arg, [stmt], None) + if getattr(gens[0], "is_async", False): + stmt.is_async = True + copy_location(node, stmt) + pvar = ast.Variable(p0) + arg = ast.Name(pvar, PARAM) + copy_location(node, arg) + function = ast.Function(COMP_NAMES[type(node).__name__], [],[arg], None, None, None, [ stmt ]) + copy_location(node, function) + node.function = function + node.iterable = gens[0].iter + del node.generators + + +COMP_NAMES = { + 'GeneratorExp' : 'genexpr', + 'DictComp' : 'dictcomp', + 'ListComp' : 'listcomp', + 'SetComp' : 'setcomp' +} + +def copy_location(src, dest): + '''Copy location from `src` to `dest`''' + dest.lineno = src.lineno + dest.col_offset = src.col_offset + dest._end = src._end + +def convert(logger, cpt): + '''Covert concrete parse tree as specified by blib2to3/Grammar.txt + to the AST specified by semmle/python/master.py + ''' + return Convertor(logger).visit(cpt) diff --git a/python/extractor/semmle/python/parser/dump_ast.py b/python/extractor/semmle/python/parser/dump_ast.py new file mode 100644 index 00000000000..fbeaabb2939 --- /dev/null +++ b/python/extractor/semmle/python/parser/dump_ast.py @@ -0,0 +1,151 @@ +# dump_ast.py + +# Functions for dumping the internal Python AST in a human-readable format. + +import sys +import semmle.python.parser.tokenizer +import semmle.python.parser.tsg_parser +from semmle.python.parser.tsg_parser import ast_fields +from semmle.python import ast +from semmle import logging +from semmle.python.modules import PythonSourceModule + + + +def get_fields(cls): + """Gets the fields of the given class, followed by the fields of its (single-inheritance) + superclasses, if any. + Only includes fields for classes in `ast_fields`.""" + if cls not in ast_fields: + return () + s = cls.__bases__[0] + return ast_fields[cls] + get_fields(s) + +def missing_fields(known, node): + """Returns a list of fields in `node` that are not in `known`.""" + return [field + for field in dir(node) + if field not in known + and not field.startswith("_") + and not field in ("lineno", "col_offset") + and not (isinstance(node, ast.Name) and field == "id") + ] + +class AstDumper(object): + def __init__(self, output=sys.stdout, no_locations=False): + self.output = output + self.show_locations = not no_locations + + def visit(self, node, level=0, visited=None): + if visited is None: + visited = set() + if node in visited: + output.write("{} CYCLE DETECTED!\n".format(indent)) + return + visited = visited.union({node}) + output = self.output + cls = node.__class__ + name = cls.__name__ + indent = ' ' * level + if node is None: # Special case for `None` to avoid printing `NoneType`. + name = 'None' + if cls == str: # Special case for bare strings + output.write("{}{}\n".format(indent, repr(node))) + return + # In some places, we have non-AST nodes in lists, and since these don't have a location, we + # simply print their name instead. + # `ast.arguments` is special -- it has fields but no location + if hasattr(node, 'lineno') and not isinstance(node, ast.arguments) and self.show_locations: + position = (node.lineno, node.col_offset, node._end[0], node._end[1]) + output.write("{}{}: [{}, {}] - [{}, {}]\n".format(indent, name, *position)) + else: + output.write("{}{}\n".format(indent, name)) + + + fields = get_fields(cls) + unknown = missing_fields(fields, node) + if unknown: + output.write("{}UNKNOWN FIELDS: {}\n".format(indent, unknown)) + for field in fields: + value = getattr(node, field, None) + # By default, the `parenthesised` field on expressions has no value, so it's easier to + # just not print it in that case. + if field == "parenthesised" and value is None: + continue + # Likewise, the default value for `is_async` is `False`, so we don't need to print it. + if field == "is_async" and value is False: + continue + output.write("{} {}:".format(indent,field)) + if isinstance(value, list): + output.write(" [") + if len(value) == 0: + output.write("]\n") + continue + output.write("\n") + for n in value: + self.visit(n, level+2, visited) + output.write("{} ]\n".format(indent)) + # Some AST classes are special in that the identity of the object is the only thing + # that matters (and they have no location info). For this reason we simply print the name. + elif isinstance(value, (ast.expr_context, ast.boolop, ast.cmpop, ast.operator, ast.unaryop)): + output.write(' {}\n'.format(value.__class__.__name__)) + elif isinstance(value, ast.AstBase): + output.write("\n") + self.visit(value, level+2, visited) + else: + output.write(' {}\n'.format(repr(value))) + + +class StdoutLogger(logging.Logger): + def log(self, level, fmt, *args): + sys.stdout.write(fmt % args + "\n") + +def old_parser(inputfile, logger): + mod = PythonSourceModule(None, inputfile, logger) + logger.close() + return mod.old_py_ast + +def args_parser(): + 'Parse command_line, returning options, arguments' + from optparse import OptionParser + usage = "usage: %prog [options] python-file" + parser = OptionParser(usage=usage) + parser.add_option("-o", "--old", help="Dump old AST.", action="store_true") + parser.add_option("-n", "--new", help="Dump new AST.", action="store_true") + parser.add_option("-l", "--no-locations", help="Don't include location info in dump", action="store_true") + parser.add_option("-d", "--debug", help="Print debug information.", action="store_true") + return parser + +def main(): + parser = args_parser() + options, args = parser.parse_args(sys.argv[1:]) + + if options.debug: + global DEBUG + DEBUG = True + + if len(args) != 1: + sys.stderr.write("Error: wrong number of arguments.\n") + parser.print_help() + sys.exit(1) + + inputfile = args[0] + + if options.old and options.new: + sys.stderr.write("Error: options --old and --new are mutually exclusive.\n") + sys.exit(1) + + if not (options.old or options.new): + sys.stderr.write("Error: Must specify either --old or --new.\n") + sys.exit(1) + + with StdoutLogger() as logger: + + if options.old: + ast = old_parser(inputfile, logger) + else: + ast = semmle.python.parser.tsg_parser.parse(inputfile, logger) + AstDumper(no_locations=options.no_locations).visit(ast) + +if __name__ == '__main__': + main() diff --git a/python/extractor/semmle/python/parser/tokenizer.py b/python/extractor/semmle/python/parser/tokenizer.py new file mode 100644 index 00000000000..6ddf3fa4d03 --- /dev/null +++ b/python/extractor/semmle/python/parser/tokenizer.py @@ -0,0 +1,1146 @@ +# This file is AUTO-GENERATED. DO NOT MODIFY +# To regenerate: run "python3 -m tokenizer_generator.gen_state_machine tokenizer_generator/state_transition.txt tokenizer_generator/tokenizer_template.py" + +import codecs +import re +import sys + +from blib2to3.pgen2.token import * + +if sys.version < '3': + from array import array + def toarray(b): + return array('B', b) +else: + def toarray(b): + return b + +IDENTIFIER_CLASS = 1 +IDENTIFIER_CONTINUE_CLASS = 2 +ERROR_CLASS = 0 +# 3586 entries in ID index +ID_INDEX = toarray( + b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x01\x11\x12\x13\x01\x14\x15\x16\x17\x18\x19\x1a\x1b\x01\x1c' + b'\x1d\x1e\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f !"\x1f#$\x1f\x1f\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01%\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01&' + b"\x01\x01\x01\x01'\x01()*+,-\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01" + b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01.\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x01/0\x01123' + b'456789\x01:;<=>?@\x1fABCDEFGHIJKL\x1fMNO\x1f' + b'\x01\x01\x01PQR\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x01\x01\x01\x01S\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x01\x01T\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x01\x01UV\x1f\x1fWX\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + b'\x01\x01\x01\x01\x01\x01\x01Y\x01\x01Z\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x01[\\\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f]\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f^_\x1f`abc\x1f\x1fd\x1f\x1f\x1f\x1f\x1f' + b'efg\x1f\x1f\x1f\x1f\x1fhi\x1f\x1f\x1f\x1fj\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + b'\x01\x01\x01\x01\x01\x01k\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01lm\x01\x01\x01\x01\x01\x01\x01' + b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01n\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' + b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01o\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x01\x01p\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' + b'\x1fq' +) +ID_CHUNKS = ( + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\xaa\n\x00TUUUUU\x15\x80TUUUUU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x84\x10\x00UUUUU\x15UUUUUUU\x15UU'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x05PUU\x05\x00\x00\x00U\x01\x00\x11\x00\x00\x00\x00'), + toarray(b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaaUQPE\x00\x90\x15QUUUUEUUUUUUUUUUUUUUUUUUUUEUU'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x85\xaaPUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), + toarray(b'UUUUUUUUUUUUTUUUUUUUU\x15\x04\x00UUUUUUUUUU\x01\x00\xa8\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x8a(\x8a\x00\x00UUUUUU\x15@\x15\x00\x00\x00'), + toarray(b'\x00\x00\x00\x00\xaa\xaa*\x00UUUUUUUUUU\x95\xaa\xaa\xaa\xaa\xaa\xaa\xaa\nPVUUUUUUUUUUUUUUUUUUUUUUUU\xa4\xaa\x82\xaa\x96\xa2Z\xaa\xaaZA'), + toarray(b'\x00\x00\x00\x00YUUUUUUU\xaa\xaa\xaa\xaa\xaa\xaa*TUUUUUUUUUUUUUUUUUUUUU\xa5\xaa\xaa\x06\x00\x00\x00\xaa\xaaZUUUUUUU\x95\xaa\xaa\x05\x10\x08'), + toarray(b'UUUUU\xa5\x9a\xaa\xaa\xa9\xa9\n\x00\x00\x00\x00UUUUUU\xa9\x00UU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUQU\x05\x00\x00\x00\x00\x80\xaa\xaa\xaa\x8a\xaa\xaa\xaa\xaa\xaa\xaa\xaa'), + toarray(b'\xaaUUUUUUUUUUUUU\xa5\xa6\xaa\xaa\xaa\xaa\xa9\xaaUU\xa5\xa0\xaa\xaaTUUU\xa9TUAAUUUUUQU\x11P\x05\xa6\xaa\x82\x82\x1a\x00\x80\x00E\xa5\xa0\xaa\xaa\x05\x00\x00!'), + toarray(b'\xa8T\x15@AUUUUUQUQ\x14\x05\xa2*\x80\x82\n\x08\x00T\x11\x00\xa0\xaa\xaaZ\t\x00\x00\xa8TUEEUUUUUQUQT\x05\xa6\xaa\x8a\x8a\n\x01\x00\x00\x00\xa5\xa0\xaa\xaa\x00\x00\xa4\xaa'), + toarray(b'\xa8TUAAUUUUUQUQT\x05\xa6\xaa\x82\x82\n\x00\xa0\x00E\xa5\xa0\xaa\xaa\x04\x00\x00\x00`T\x15PQ\x05\x14Q@\x01\x15PUU\x05\xa0*\xa0\xa2\n\x01\x80\x00\x00\x00\xa0\xaa\xaa\x00\x00\x00\x00'), + toarray(b'\xaaVUQQUUUUUQUUU\x05\xa4\xaa\xa2\xa2\n\x00(\x15\x00\xa5\xa0\xaa\xaa\x00\x00\x00\x00\xa9TUQQUUUUUQUUT\x05\xa6\xaa\xa2\xa2\n\x00(\x00\x10\xa5\xa0\xaa\xaa\x14\x00\x00\x00'), + toarray(b'\xaaTUQQUUUUUUUUU\x95\xa6\xaa\xa2\xa2\x1a\x00\x95\x00@\xa5\xa0\xaa\xaa\x00\x00PU\xa0TUUU\x15PUUUUUEUU\x04U\x15 \x80\xaa"\xaa\xaa\x00\xa0\xaa\xaa\xa0\x00\x00\x00'), + toarray(b'TUUUUUUUUUUUY\xaa*\x00U\x95\xaa*\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14Q\x15UUUUUUDUUY\xaa\xaa\x06U\x11\xaa\n\xaa\xaa\nU\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\x01\x00\x00\x00\x00\x00\n\x00\xaa\xaa\n\x00\x00\x88\x08\xa0UUTUUUUUUUU\x01\xa8\xaa\xaa\xaa\xaa\xa2U\xa9\xaa\xaa\xa8\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x02\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUU\x95\xaa\xaa\xaa\xaaj\xaa\xaa\n\x00U\xa5Z\xa5\xa6\x96\xaaZ\xa9VUU\xa5\xaa\xaa\x9a\xaa\xaa\xaa\nUUUUUUUUUE\x00\x04UUUUUUUUUU\x15U'), + toarray(b'UUUUUUUUUUUUUUUUUUQ\x05U\x15Q\x05UUUUUUUUUUQ\x05UUUUUUUUQ\x05U\x15Q\x05UUU\x15UUUUUUUUUU'), + toarray(b'UUUUQ\x05UUUUUUUUUUUUUUUU\x15\xa8\x00\x00\xa8\xaa\n\x00\x00\x00UUUU\x00\x00\x00\x00UUUUUUUUUUUUUUUUUUUUU\x05U\x05'), + toarray(b'TUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUAUUUUTUUUUU\x15\x00UUUUUUUUUUUUUUUUUU\x15PUU\x01\x00'), + toarray(b'UUUQ\xa5\x02\x00\x00UUUU\xa5\x02\x00\x00UUUU\xa5\x00\x00\x00UUUQ\xa1\x00\x00\x00UUUUUUUUUUUUU\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa@\x00\t\xaa\xaa\n\x00\x00\x00\x00\x00'), + toarray(b'\x00\x00\x80\n\xaa\xaa\n\x00UUUUUUUUUUUUUUUUUUUUUU\x01\x00UUUUUUUUUU\x19\x00UUUUUUUUUUUUUUUUU\x05\x00\x00'), + toarray(b'UUUUUUU\x15\xaa\xaa\xaa\x00\xaa\xaa\xaa\x00\x00\xa0\xaa\xaaUUUUUUU\x05U\x01\x00\x00UUUUUUUUUUU\x00UUUUUU\x05\x00\xaa\xaa*\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUU\x95\xaa\x00UUUUUUUUUUUUU\xa9\xaa*\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x82\xaa\xaa\n\x00\xaa\xaa\n\x00\x00@\x00\x00\xaa\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\xaaVUUUUUUUUUUU\xaa\xaa\xaa\xaaVU\x00\xaa\xaa\n\x00\x00\x00\x80\xaa\xaa\x00\x00\x00jUUUUUUU\xa9\xaa\xaaZ\xaa\xaaZUUUUUUUUUU\xa5\xaa\xaa\xaa\x00\x00\x00'), + toarray(b'UUUUUUUUU\xaa\xaa\xaa\xaa\xaa\x00\x00\xaa\xaa\nT\xaa\xaaZUUUUUUUU\x05UU\x01\x00UUUUUUUUUU\x15T\x00\x00\x00\x00*\xaa\xaa\xaa\xaa\xaaVYU\x96\x1a\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x8a\xaa'), + toarray(b'UUUUU\x05U\x05UUUUUUUUU\x05U\x05UUDDUUUUUUU\x05UUUUUUUUUUUUUQU\x11PQU\x01UPU\x00UUU\x01PQU\x01'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x02\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x04\x00\x00@\x00\x00\x00\x00UUU\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\xaa\xaa\x02\x08\xa8\xaa\xaa\x02\x00\x00\x00'), + toarray(b'\x10@PUU\x04U\x05\x00\x11QUUU\x05U\x00T\x05\x10\x00\x00\x00\x00UUUUUUUUUU\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUU\x15UUUUUUUUUUU\x15UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x01@\x95Z\x00\x00\x00'), + toarray(b'UUUUUUUUUE\x00\x04UUUUUUUUUUUUUU\x00@\x00\x00\x00\x80UUUUU\x15\x00\x00U\x15U\x15U\x15U\x15U\x15U\x15U\x15U\x15\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\x00T\x00\x00\x00\x00\x00\x00TU\xa5\xaaT\x05U\x01TUUUUUUUUUUUUUUUUUUUU\x15hUTUUUUUUUUUUUUUUUUUUUUU\x15U'), + toarray(b'\x00TUUUUUUUUUUTUUUUUUUUUUUUUUUUUUUUUU\x15\x00\x00\x00\x00UUUUUU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUU'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUU\x05'), + toarray(b'UUU\x01UUUU\xaa\xaaZ\x00\x00\x00\x00\x00UUUUUUUUUUU\x95\x00\xaa\xaaJUUUUUUU\xa5UUUUUUUUUUUUUUUUUUUU\n\x00\x00\x00'), + toarray(b'\x00\x00\x00\x00\x00@UUPUUUUUUUUUUUUUUUUUUUUUUUUUAUUUUUUUUUUUUUP\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@UU'), + toarray(b'ee\x95UUUUU\x95\xaa\x00\x00\x00\x00\x00\x00UUUUUUUUUUUUU\x00\x00\x00ZUUUUUUUUUUUU\xaa\xaa\xaa\xaa\n\x00\x00\xaa\xaa\n\x00\xaa\xaa\xaa\xaaZU@\x94'), + toarray(b'\xaa\xaaZUUUUUU\xa5\xaa\nUUUUU\x95\xaa\xaa\xaa\x00\x00\x00UUUUUUU\x01\xaaUUUUUUUUUUU\x95\xaa\xaa\xaa\x02\x00\x00@\xaa\xaa\n\x00UYUU\xaa\xaaZ\x15'), + toarray(b'UUUUUUUUUU\xa9\xaa\xaa*\x00\x00\x95UU\n\xaa\xaa\n\x00UUUUU\x15\x90ZUUUUUUUUUUUU\xa6\x96V\xa5\x19\x00\x00\x00\x00\x00@\x05UU\x95\xaaP)\x00\x00'), + toarray(b'T\x15T\x15T\x15\x00\x00U\x15U\x15UUUUUUUUUU\x15UUU\x00\x00UUUUUUUUUUUUUUUUUUUUUUUUUUUU\x95\xaa*\n\xaa\xaa\n\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x00\x00\x00UUUUU\x15@UUUUUUUUUUUU\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUU\x05UUUUUUUUUUUUUUUUUUUUUUUUUU\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'U\x15\x00\x00@U\x00dUUQUU\x15U\x11EQUUUUUUUUUUUUUUUUUUUUUUUUUU\x05\x00\x00\x00\x00\x00\x00\x00@UUUUUUUUUUU'), + toarray(b'UUUUUUUUUUUUUUU\x05\x00\x00\x00\x00UUUUUUUUUUUUUUUUPUUUUUUUUUUUUU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUU\x00'), + toarray(b'\xaa\xaa\xaa\xaa\x00\x00\x00\x00\xaa\xaa\xaa\xaa\x80\x02\x00\x00\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x00\x00\x00UQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x01'), + toarray(b'\x00\x00\x00\x00\xaa\xaa\n\x00TUUUUU\x15\x80TUUUUU\x15\x00\x00PUUUUUUUUUUUUUUUUUUUUU\x15PUPUPUP\x01\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUTUUUUU\x15UUUU\x15EUUU\x05UUU\x05\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x15\x00'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUUU\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUU\x01UUUUUUUUUUUU\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUU\x00\x00\x00TUUUUUU\x15\x00UUUUUUUUU\xa5*\x00UUUUUUU\x05UUUUUUUUU\x00UUT\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x05\xaa\xaa\n\x00UUUUUUUUU\x00UUUUUUUUU\x00'), + toarray(b'UUUUUUUUUU\x00\x00UUUUUUUUUUUUU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUU\x15\x00\x00UUUUU\x05\x00\x00UU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'U\x05QUUUUUUUUUUE\x01AUUUUU\x05\x00\x00UUUUU\x15\x00\x00UUUUUUU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUU\x15\x05\x00\x00'), + toarray(b'UUUUU\x05\x00\x00UUUUUU\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUUUU\x00P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\xa9(\x00\xaaUTTUUUUUU\x05*\x80\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUU\x01UUUUUUU\x01\x00\x00\x00\x00\x00\x00\x00\x00UUTUUUUUU)\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUU\x05\x00\x00UUUUU\x05\x00\x00UUUU\x15\x00\x00\x00UUUU\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUUU\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUU\x15\x00\x00\x00UUUUUUUUUUUU\x15\x00\x00\x00'), + toarray(b'UUUUUUUUU\xaa\x00\x00\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUU\x01\x00@\x00\x00UUUUU\xa5\xaa\xaa\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUU\x15\x00\x00'), + toarray(b'jUUUUUUUUUUUUU\xaa\xaa\xaa*\x00\x00\x00\x00\x00\x00\x00\xa0\xaa\xaa\x00\x00\x00\x80jUUUUUUUUUUU\xaa\xaa*\x00\x00\x00\x00\x00UUUUUU\x01\x00\xaa\xaa\n\x00'), + toarray(b'jUUUUUUUU\x95\xaa\xaa\xaa\xa2\xaa\xaa\x00)\x00\x00UUUUUUUU\x95\x10\x00\x00jUUUUUUUUUUU\x95\xaa\xaa\xaaV\x01\xa8\x02\xaa\xaa\x1a\x01\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUEUUUUUU\xaa\xaa\xaa\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\x15QEUUUEUU\x01\x00UUUUUUUUUUU\x95\xaa\xaa*\x00\xaa\xaa\n\x00'), + toarray(b'\xaaTUAAUUUUUQUQT\x85\xa6\xaa\x82\x82\n\x01\x80\x00T\xa5\xa0\xaa\x02\xaa\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUU\xa9\xaa\xaa\xaaj\x15\x00\xaa\xaa\n`\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUU\xaa\xaa\xaa\xaa\xaaE\x00\x00\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUU\x95\xaa\n\xaa\xaa\x02\x00\x00\x00\x00\x00U\n\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUU\xaa\xaa\xaa\xaa\x02\x01\x00\x00\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUU\x95\xaa\xaa\xaa\x01\x00\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUU\x15\xa8\xaa\xaa\xaa\x00\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUU\xaa\xaa\xaa*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUUUUUU\xaa\xaa\n\x00\x00\x00\x00@'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUPUUUUUUUUU\xa9\xaa\xa0\xaaF\x02\x00\x00\x00\x00\x00\x00'), + toarray(b'\xa9\xaajUUUUUUUUU\x95\xaa\x9a*\x00\x80\x00\x00\xa9\xaa\xaaUUUUUUUUUUU\xa5\xaa\xaa\xaa\n\x04\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUUUU\x01\x00'), + toarray(b'UUQUUUUUUUU\x95\xaa*\xaa\xaa\x01\x00\x00\x00\xaa\xaa\n\x00\x00\x00\x00\x00PUUUUUUU\xa0\xaa\xaa\xaa\xaa\xaa\xa8\xaa\xaa*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'U\x15EUUUUUUUUU\xa9* \x8a\xaa\x9a\x00\x00\xaa\xaa\n\x00UEQUUUUUUU\xa5*\x8a\xaa\x01\x00\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUU\x95*\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUU\x15\x00\x00\x00\x00UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), + toarray(b'UUUUUUUUUUUUUUUUU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUU\x01\x00UUUUUUU\x15\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUU\x05\xaa\x02\x00\x00'), + toarray(b'UUUUUUUUUUUU\xaa*\x00\x00U\x00\x00\x00\xaa\xaa\n\x00@UUUUU\x00TUUUU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUUUUUU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUUU\x15\x80\xa9\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x80jUUU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00E\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x15\x00\x00\x00'), + toarray(b'UUUUUUU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\x00U\x00\x00UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUU\x15\x00UUU\x01UU\x01\x00UU\x05(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\n\xa8*\x00\x80\xaa*\xa8\xaa\x00\x00\x00\x00\x00\x00\x00\xa0\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUQUUUUUUUUUUUUUUUUUQ\x10\x14TQUUETUTUUUUUUUUUUUUUU'), + toarray(b'UE\x15TUQUQUUUUUUE\x15U\x11PUQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x05UUUUUUQUUUUU\x15UUUUUUU\x15U'), + toarray(b'UUUUUQUUUUUUUQUUUUU\x15UUUUUUU\x15UUUUUUQUUUUUUUQUUUUU\x15UU\xa0\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa'), + toarray(b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa*\x80\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x02\x00\x08\x00\x00\x00\x02\x00\x00\x00\x00\x80\xaa\xa8\xaa\xaa\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\xaa*\xaa\xaa\xaa\xaa\x82\xaa\x8a\xa2*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUU\x01\xaajU\x05\xaa\xaa\n\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUU\xaa\xaa\xaa\n\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x01\x00\x00\xaa*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUU\xaaj\x00\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UTUUUUUU\x14ATU\x15UD\x00\x10@DT\x14ADD\x14A\x15U\x15UT\x11UUEUUUU\x00TTEUUUU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUUUUUUUU\x01\x00\x00UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), + toarray(b'UUUUUUU\x05UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x05\x00\x00\x00UUUUUUUUUUUUUUUUUUUU'), + toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x01\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'UUUUUUU\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), + toarray(b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x00'), +) +#0 = ERROR_CLASS(0) +#1 = IDENTIFIER_CLASS(1) +#2 = CharacterClass 2 [] +#3 = CharacterClass 3 ['\t', ' '] +#4 = CharacterClass 4 ['\n', '\r'] +#5 = CharacterClass 5 ['\x0c'] +#6 = CharacterClass 6 ['!'] +#7 = CharacterClass 7 ['"'] +#8 = CharacterClass 8 ['#'] +#9 = CharacterClass 9 ['$'] +#10 = CharacterClass 10 ['%', '&', '^', '|'] +#11 = CharacterClass 11 ["'"] +#12 = CharacterClass 12 ['('] +#13 = CharacterClass 13 [')'] +#14 = CharacterClass 14 ['*'] +#15 = CharacterClass 15 ['+'] +#16 = CharacterClass 16 [','] +#17 = CharacterClass 17 ['-'] +#18 = CharacterClass 18 ['.'] +#19 = CharacterClass 19 ['/'] +#20 = CharacterClass 20 ['0'] +#21 = CharacterClass 21 ['1'] +#22 = CharacterClass 22 ['2', '3', '4', '5', '6', '7'] +#23 = CharacterClass 23 ['8', '9'] +#24 = CharacterClass 24 [':'] +#25 = CharacterClass 25 [';'] +#26 = CharacterClass 26 ['<'] +#27 = CharacterClass 27 ['='] +#28 = CharacterClass 28 ['>'] +#29 = CharacterClass 29 ['@'] +#30 = CharacterClass 30 ['A', 'C', 'D', 'c'] +#31 = CharacterClass 31 ['B', 'b'] +#32 = CharacterClass 32 ['E'] +#33 = CharacterClass 33 ['F', 'f'] +#34 = CharacterClass 34 ['J', 'j'] +#35 = CharacterClass 35 ['L'] +#36 = CharacterClass 36 ['N'] +#37 = CharacterClass 37 ['O', 'o'] +#38 = CharacterClass 38 ['R'] +#39 = CharacterClass 39 ['U', 'u'] +#40 = CharacterClass 40 ['X', 'x'] +#41 = CharacterClass 41 ['['] +#42 = CharacterClass 42 ['\\'] +#43 = CharacterClass 43 [']'] +#44 = CharacterClass 44 ['_'] +#45 = CharacterClass 45 ['`'] +#46 = CharacterClass 46 ['a', 'd'] +#47 = CharacterClass 47 ['e'] +#48 = CharacterClass 48 ['l'] +#49 = CharacterClass 49 ['r'] +#50 = CharacterClass 50 ['s'] +#51 = CharacterClass 51 ['{'] +#52 = CharacterClass 52 ['}'] +#53 = CharacterClass 53 ['~'] +CLASS_TABLE = toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x04\x00\x05\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x06\x07\x08\t\n\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x16\x16\x16\x16\x16\x17\x17\x18\x19\x1a\x1b\x1c\x00\x1d\x1e\x1f\x1e\x1e !\x01\x01\x01"\x01#\x01$%\x01\x01&\x01\x01\'\x01\x01(\x01\x01)*+\n,-.\x1f\x1e./!\x01\x01\x01"\x010\x01\x01%\x01\x0112\x01\'\x01\x01(\x01\x013\n45\x00') + +B00 = toarray(b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01') +B01 = toarray(b'iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii') +B02 = toarray(b'cccabaccdccccccccccccccccccccccccccccccccccccccccccccc') +B03 = toarray(b'jUje`j*\x07[W=\x06 #9=2;6:D???/3(\')4U\x02U\x10UUUU\x02\x02U!f$U&UUU\x02U"%>') +B04 = toarray(b'\x08\x08\x08\x08\x08\x08\x08\x05\x08\x08\x08\x04\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x03\x08\x11\x08\x08\x08\x08\x03\x03\x08\x08\x08\x08\x08\x08\x08\x08\x08\x03\x08\x08\x08\x08') +B05 = toarray(b'\x08\x08\x08\x08\x08\x08\x08\x05\x08\x08\x08\x04\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08') +B06 = toarray(b'\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\t\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b') +B07 = toarray(b'\x0e\x0e\x0e\x0e\x0e\x0e\x0e\n\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e') +B08 = toarray(b'YVVYYYYYYYYYYYYYYYYYVVVVYYYYYYVVVVVVVVVVVYYYVYVVVVVYYY') +B09 = toarray(b'\r\r\r\r\r\r\r\r\r\r\r\x0c\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r') +B10 = toarray(b'\r\r\r\r\r\r\r\x0f\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r') +B11 = toarray(b'\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a') +B12 = toarray(b'\x08\x08\x08\x08\x08\x08\x08\x13\x08\x08\x08\x12\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x11\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x11\x08\x08\x08\x08') +B13 = toarray(b'\x08\x08\x08\x08\x08\x08\x08\x13\x08\x08\x08\x12\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08') +B14 = toarray(b'\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x14\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16') +B15 = toarray(b'\x18\x18\x18\x18\x18\x18\x18\x15\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18') +B16 = toarray(b'\r\r\r\r\r\r\r\r\r\r\r\x17\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r') +B17 = toarray(b'\r\r\r\r\r\r\r\x19\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r') +B18 = toarray(b'\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1c\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e') +B19 = toarray(b'\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1d\x1a\x1a') +B20 = toarray(b'\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1a\x1d') +B21 = toarray(b'\x1a\x1a\x1a\x1a\x1f\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a') +B22 = toarray(b'---------------------------,--------------------------') +B23 = toarray(b'--------------------------+,,-------------------------') +B24 = toarray(b'---------------------------,+-------------------------') +B25 = toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00.\x00\x00..\x00\x00\x00') +B26 = toarray(b'111111111111111111111111111011111111111111111111111111') +B27 = toarray(b'555555555555555555555555555,55555555555555555555555555') +B28 = toarray(b'888888888888888888887777888888888888888888888888888888') +B29 = toarray(b'IIIIIIIIIIIIIIIIIIII7777IIIIIIIIQIAIIIIIIIIIOIIPIIIIII') +B30 = toarray(b'-------------------+-------,--------------------------') +B31 = toarray(b'--------------+------------,--------------------------') +B32 = toarray(b'---------------------------,<-------------------------') +B33 = toarray(b'IIIIIIIIIIIIIIIIIINI@@@@IIIIIIIIQIAAIIIIIIIIBIIPAIIIII') +B34 = toarray(b'IIIIIIIIIIIIIIIIIINIEEEEIIIIIIIJQIAAIGIILIIIFIIPAIIIII') +B35 = toarray(b'IIIIIIIIIIIIIIIIIINIEEEEIIIIIIIIQIAAIIIIIIIIFIIPAIIIII') +B36 = toarray(b'IIIIIIIIIIIIIIIIIIIIJJIIIIIIIIIIIIIAIIIIIIIIKIIIAIIIII') +B37 = toarray(b'IIIIIIIIIIIIIIIIIIIIGGGIIIIIIIIIIIIAIIIIIIIIHIIIAIIIII') +B38 = toarray(b'IIIIIIIIIIIIIIIIIIIILLLLIIIIIILLLLIAIIIIIIIIMILLAIIIII') +B39 = toarray(b'CCCCCCCCCCCCCCCCCCCC@@@@CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') +B40 = toarray(b'CCCCCCCCCCCCCCCCCCCCEEEECCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') +B41 = toarray(b'CCCCCCCCCCCCCCCCCCCCGGGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') +B42 = toarray(b'CCCCCCCCCCCCCCCCCCCCJJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') +B43 = toarray(b'CCCCCCCCCCCCCCCCCCCCLLLLCCCCCCLLLLCCCCCCCCCCCCLLCCCCCC') +B44 = toarray(b'IIIIIIIIIIIIIIIIIIII7777IIIIIIIIQIAIIIIIIIIIIIIPIIIIII') +B45 = toarray(b'CCCCCCCCCCCCCCCCCCCC7777CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') +B46 = toarray(b'CCCCCCCCCCCCCCCQCQCCSSSSCCCCCCCCCCCCCCCCCCCCCCCCRCCCCC') +B47 = toarray(b'CCCCCCCCCCCCCCCQCQCCSSSSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') +B48 = toarray(b'IIIIIIIIIIIIIIIIIIIISSSSIIIIIIIIIIAIIIIIIIIITIIIIIIIII') +B49 = toarray(b'CCCCCCCCCCCCCCCCCCCCSSSSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') +B50 = toarray(b'ZXXZZZZZZZZZZZZZZZZZXXXXZZZZZZXXXXXXXXXXXZZZXZXXXXXZZZ') +B51 = toarray(b']]]]\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]') +B52 = toarray(b'____^_________________________________________________') +B53 = toarray(b'CCCCgCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') +B54 = toarray(b'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh') +B55 = toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') +B56 = toarray(b'jUjekj*\x07[W=\x06 l9=2;6:D???/3(\')4U\x02U\x10UUUU\x02\x02U!fmU&UUU\x02U"n>') +B57 = toarray(b'\x1a\x1a\x1a\x1ap\x1a\x1a\x1a\x1a\x1a\x1ao\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a') +B58 = toarray(b'\x1a\x1a\x1a\x1ap\x1a\x1ao\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a') +B59 = toarray(b'\x1a\x1a\x1a\x1a\x1f\x1a\x1a\x1a\x1a\x1a\x1aq\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a') +B60 = toarray(b'ssss\x1fssssssrssssssssssssssssssssssssssssssssssssssssss') +B61 = toarray(b'ssss\x1fssssssossssssssssssssssssssssssssssssssssssssssss') +B62 = toarray(b'\x1a\x1a\x1a\x1a\x1f\x1a\x1aq\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a') +B63 = toarray(b'ssss\x1fssrssssssssssssssssssssssssssssssssssssssssssssss') +B64 = toarray(b'ssss\x1fssossssssssssssssssssssssssssssssssssssssssssssss') +B65 = toarray(b'\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') +B66 = toarray(b'\x1a\x1a\x1a\x1a\x1f\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') +B67 = toarray(b'uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu\x1auu') +B68 = toarray(b'\x1a\x1a\x1a\x1ap\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') +B69 = toarray(b'\x1a\x1a\x1a\x1ap\x1a\x1a\x1a\x1a\x1a\x1ao\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') +B70 = toarray(b'vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\x1avv') +B71 = toarray(b'\x1a\x1a\x1a\x1ap\x1a\x1a\x1a\x1a\x1a\x1aw\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') +B72 = toarray(b'\x1a\x1a\x1a\x1ap\x1a\x1ao\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') +B73 = toarray(b'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\x1axx') +B74 = toarray(b'\x1a\x1a\x1a\x1ap\x1a\x1aw\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') +B75 = toarray(b'\x1a\x1a\x1a\x1a\x1f\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') +B76 = toarray(b'ssss\x1fsssssssssssssssssssssssssssssssssssssssssssssssss') +B77 = toarray(b'\x1a\x1a\x1a\x1a\x1f\x1a\x1a\x1a\x1a\x1a\x1aq\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') +B78 = toarray(b'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy\x1ayy') +B79 = toarray(b'ssss\x1fsssssswssssssssssssssssssssssssssssssssssssssssss') +B80 = toarray(b'\x1a\x1a\x1a\x1a\x1f\x1a\x1aq\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') +B81 = toarray(b'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz\x1azz') +B82 = toarray(b'ssss\x1fsswssssssssssssssssssssssssssssssssssssssssssssss') +B83 = toarray(b'jUjekj*\x07[W=\x06 l9=2;6:D???|3(\')4U\x02U\x10UUUU\x02\x02U!fmU&UUU\x02U"{>') +B84 = toarray(b'\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a{\x1a') +B85 = toarray(b'jUje`j*\x07[W=\x06 #9=2;6:D???/3(\')4U\x02U\x10UUUU\x02\x02U!f$U&UUU\x02U"\x7f>') +B86 = toarray(b'\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a}~\x1a') +B87 = toarray(b'\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80') + +DEFAULT = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B11, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B55, ) +PAREN = (B00, B01, B02, B56, B04, B05, B06, B07, B08, B09, B10, B11, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B55, ) +STRING_S = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B57, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B55, ) +STRING_D = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B58, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B55, ) +STRING_SSS = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B59, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B60, B61, B55, ) +STRING_DDD = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B62, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B63, B64, B55, ) +FSTRING_SDSSSDDD = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B65, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B67, ) +FSTRING_SD = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B68, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B67, ) +FSTRING_START_S = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B69, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B70, ) +FSTRING_S = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B71, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B67, ) +FSTRING_START_D = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B72, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B73, ) +FSTRING_D = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B74, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B67, ) +FSTRING_SSSDDD = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B75, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B76, B76, B67, ) +FSTRING_START_SSS = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B77, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B60, B61, B78, ) +FSTRING_SSS = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B77, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B60, B79, B67, ) +FSTRING_START_DDD = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B80, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B63, B64, B81, ) +FSTRING_DDD = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B80, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B63, B82, B67, ) +FSTRING_EXPR = (B00, B01, B02, B83, B04, B05, B06, B07, B08, B09, B10, B84, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B55, ) +FORMAT_SPECIFIER = (B00, B01, B02, B85, B04, B05, B06, B07, B08, B09, B10, B86, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B55, ) +PENDING_DEDENT = (B00, B01, B02, B87, B04, B05, B06, B07, B08, B09, B10, B11, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B55, ) + +TRANSITION_STATE_NAMES = { + id(DEFAULT): 'default', + id(PAREN): 'paren', + id(STRING_S): 'string_s', + id(STRING_D): 'string_d', + id(STRING_SSS): 'string_sss', + id(STRING_DDD): 'string_ddd', + id(FSTRING_SDSSSDDD): 'fstring_sdsssddd', + id(FSTRING_SD): 'fstring_sd', + id(FSTRING_START_S): 'fstring_start_s', + id(FSTRING_S): 'fstring_s', + id(FSTRING_START_D): 'fstring_start_d', + id(FSTRING_D): 'fstring_d', + id(FSTRING_SSSDDD): 'fstring_sssddd', + id(FSTRING_START_SSS): 'fstring_start_sss', + id(FSTRING_SSS): 'fstring_sss', + id(FSTRING_START_DDD): 'fstring_start_ddd', + id(FSTRING_DDD): 'fstring_ddd', + id(FSTRING_EXPR): 'fstring_expr', + id(FORMAT_SPECIFIER): 'format_specifier', + id(PENDING_DEDENT): 'pending_dedent', +} +START_SUPER_STATE = DEFAULT +''' +Lookup table based tokenizer with state popping and pushing capabilities. +The ability to push and pop state is required for handling parenthesised expressions, +indentation, and f-strings. We also use it for handling the different quotation mark types, +but it is not essential for that, merely convenient. + +''' + + + +class Tokenizer(object): + + def __init__(self, text): + self.text = text + self.index = 0 + self.line_start_index = 0 + self.token_start_index = 0 + self.token_start = 1, 0 + self.line = 1 + self.super_state = START_SUPER_STATE + self.state_stack = [] + self.indents = [0] + + def action_0(self): + self.index -= 1 + self.index += 1 + return None + + def action_1(self): + self.token_start_index = self.index + self.token_start = self.line, self.index-self.line_start_index + self.index += 1 + return None + + def action_2(self): + self.index -= 1 + self.state_stack.append(self.super_state) + self.super_state = STRING_S + self.index += 1 + return None + + def action_3(self): + self.state_stack.append(self.super_state) + self.super_state = STRING_SSS + self.index += 1 + return None + + def action_4(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [STRING, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_5(self): + self.index -= 1 + self.state_stack.append(self.super_state) + self.super_state = STRING_D + self.index += 1 + return None + + def action_6(self): + self.state_stack.append(self.super_state) + self.super_state = STRING_DDD + self.index += 1 + return None + + def action_7(self): + self.index -= 1 + self.state_stack.append(self.super_state) + self.super_state = FSTRING_START_S + self.index += 1 + return None + + def action_8(self): + self.state_stack.append(self.super_state) + self.super_state = FSTRING_START_SSS + self.index += 1 + return None + + def action_9(self): + self.index -= 1 + self.state_stack.append(self.super_state) + self.super_state = FSTRING_START_D + self.index += 1 + return None + + def action_10(self): + self.state_stack.append(self.super_state) + self.super_state = FSTRING_START_DDD + self.index += 1 + return None + + def action_11(self): + self.line_start_index = self.index+1 + self.line += 1 + self.index += 1 + return None + + def action_12(self): + end = self.line, self.index-self.line_start_index+1 + result = [LPAR, u"(", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.state_stack.append(self.super_state) + self.super_state = PAREN + self.index += 1 + return result + + def action_13(self): + end = self.line, self.index-self.line_start_index+1 + result = [LSQB, u"[", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.state_stack.append(self.super_state) + self.super_state = PAREN + self.index += 1 + return result + + def action_14(self): + end = self.line, self.index-self.line_start_index+1 + result = [LBRACE, u"{", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.state_stack.append(self.super_state) + self.super_state = PAREN + self.index += 1 + return result + + def action_15(self): + end = self.line, self.index-self.line_start_index+1 + result = [RPAR, u")", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_16(self): + end = self.line, self.index-self.line_start_index+1 + result = [RSQB, u"]", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_17(self): + end = self.line, self.index-self.line_start_index+1 + result = [RBRACE, u"}", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_18(self): + end = self.line, self.index-self.line_start_index+1 + result = [BACKQUOTE, u'`', (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_19(self): + end = self.line, self.index-self.line_start_index+1 + result = [OP, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_20(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [OP, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_21(self): + end = self.line, self.index-self.line_start_index+1 + result = [CONVERSION, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_22(self): + end = self.line, self.index-self.line_start_index+1 + result = [COLONEQUAL, u":=", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_23(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [COLON, u":", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_24(self): + end = self.line, self.index-self.line_start_index+1 + result = [COMMA, u",", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_25(self): + end = self.line, self.index-self.line_start_index+1 + result = [SEMI, u";", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_26(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [AT, u"@", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_27(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [DOT, u".", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_28(self): + end = self.line, self.index-self.line_start_index+1 + result = [RARROW, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_29(self): + end = self.line, self.index-self.line_start_index+1 + result = [OP, u'~', (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_30(self): + end = self.line, self.index-self.line_start_index+1 + result = [NUMBER, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_31(self): + end = self.line, self.index-self.line_start_index+1 + result = [ERRORTOKEN, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_32(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [NUMBER, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_33(self): + self.index -= 1 + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [NUMBER, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_34(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [NAME, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_35(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [DOLLARNAME, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_36(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [COMMENT, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_37(self): + end = self.line, self.index-self.line_start_index+1 + result = [NEWLINE, u"\n", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.line_start_index = self.index+1 + self.line += 1 + self.index += 1 + return result + + def action_38(self): + return self.emit_indent() + + def action_39(self): + self.index -= 1 + self.token_start_index = self.index + self.token_start = self.line, self.index-self.line_start_index + self.index += 1 + return None + + def action_40(self): + self.token_start_index = self.index + self.token_start = self.line, self.index-self.line_start_index + end = self.line, self.index-self.line_start_index+1 + result = [ERRORTOKEN, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_41(self): + self.token_start_index = self.index + self.token_start = self.line, self.index-self.line_start_index + self.line_start_index = self.index+1 + self.line += 1 + self.index += 1 + return None + + def action_42(self): + end = self.line, self.index-self.line_start_index+1 + result = [RPAR, u")", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.super_state = self.state_stack.pop() + self.index += 1 + return result + + def action_43(self): + end = self.line, self.index-self.line_start_index+1 + result = [RSQB, u"]", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.super_state = self.state_stack.pop() + self.index += 1 + return result + + def action_44(self): + end = self.line, self.index-self.line_start_index+1 + result = [RBRACE, u"}", (self.line, self.index-self.line_start_index), end] + self.token_start = end + self.token_start_index = self.index+1 + self.super_state = self.state_stack.pop() + self.index += 1 + return result + + def action_45(self): + self.super_state = self.state_stack.pop() + end = self.line, self.index-self.line_start_index+1 + result = [STRING, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_46(self): + self.super_state = self.state_stack.pop() + end = self.line, self.index-self.line_start_index+1 + result = [ERRORTOKEN, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.line_start_index = self.index+1 + self.line += 1 + self.index += 1 + return result + + def action_47(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [FSTRING_MID, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.state_stack.append(self.super_state) + self.super_state = FSTRING_EXPR + self.index += 1 + return result + + def action_48(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [FSTRING_START, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.super_state = self.state_stack.pop() + self.state_stack.append(self.super_state) + self.super_state = FSTRING_S + self.state_stack.append(self.super_state) + self.super_state = FSTRING_EXPR + self.index += 1 + return result + + def action_49(self): + self.super_state = self.state_stack.pop() + end = self.line, self.index-self.line_start_index+1 + result = [FSTRING_END, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_50(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [FSTRING_START, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.super_state = self.state_stack.pop() + self.state_stack.append(self.super_state) + self.super_state = FSTRING_D + self.state_stack.append(self.super_state) + self.super_state = FSTRING_EXPR + self.index += 1 + return result + + def action_51(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [FSTRING_START, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.super_state = self.state_stack.pop() + self.state_stack.append(self.super_state) + self.super_state = FSTRING_SSS + self.state_stack.append(self.super_state) + self.super_state = FSTRING_EXPR + self.index += 1 + return result + + def action_52(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [FSTRING_START, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.super_state = self.state_stack.pop() + self.state_stack.append(self.super_state) + self.super_state = FSTRING_DDD + self.state_stack.append(self.super_state) + self.super_state = FSTRING_EXPR + self.index += 1 + return result + + def action_53(self): + self.super_state = self.state_stack.pop() + self.token_start_index = self.index + self.token_start = self.line, self.index-self.line_start_index + self.index += 1 + return None + + def action_54(self): + end = self.line, self.index-self.line_start_index+1 + result = [COLON, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.state_stack.append(self.super_state) + self.super_state = FORMAT_SPECIFIER + self.index += 1 + return result + + def action_55(self): + end = self.line, self.index-self.line_start_index+1 + result = [FSTRING_SPEC, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.index += 1 + return result + + def action_56(self): + self.index -= 1 + end = self.line, self.index-self.line_start_index+1 + result = [FSTRING_SPEC, self.text[self.token_start_index:self.index+1], self.token_start, end] + self.token_start = end + self.token_start_index = self.index+1 + self.super_state = self.state_stack.pop() + self.index += 1 + return result + + def action_57(self): + self.super_state = self.state_stack.pop() + return self.emit_indent() + + + def tokens(self, debug=False): + text = self.text + cls_table = CLASS_TABLE + id_index = ID_INDEX + id_chunks = ID_CHUNKS + max_id = len(id_index)*256 + action_table = [ + (1, None), (2, self.action_0), (4, self.action_1), (5, None), + (6, None), (7, None), (6, self.action_1), (7, self.action_1), + (8, self.action_0), (9, None), (10, None), (11, self.action_2), + (11, self.action_3), (3, self.action_4), (11, self.action_5), (11, self.action_6), + (12, self.action_1), (13, None), (14, None), (15, None), + (16, None), (17, None), (11, self.action_7), (11, self.action_8), + (11, self.action_9), (11, self.action_10), (11, None), (18, None), + (19, None), (20, None), (21, self.action_0), (11, self.action_11), + (3, self.action_12), (3, self.action_13), (3, self.action_14), (3, self.action_15), + (3, self.action_16), (3, self.action_17), (3, self.action_18), (22, self.action_1), + (23, self.action_1), (24, self.action_1), (25, self.action_1), (26, None), + (3, self.action_19), (3, self.action_20), (3, self.action_21), (27, None), + (3, self.action_22), (3, self.action_23), (3, self.action_24), (3, self.action_25), + (28, self.action_1), (3, self.action_26), (29, self.action_1), (30, None), + (3, self.action_27), (32, self.action_1), (31, self.action_1), (33, self.action_1), + (3, self.action_28), (26, self.action_1), (3, self.action_29), (34, self.action_1), + (34, None), (3, self.action_30), (40, None), (1, self.action_31), + (35, self.action_1), (36, None), (41, None), (38, None), + (42, None), (3, self.action_32), (37, None), (43, None), + (39, None), (44, None), (45, None), (46, None), + (47, None), (48, None), (3, self.action_33), (49, None), + (50, None), (8, self.action_1), (8, None), (51, self.action_1), + (51, None), (3, self.action_34), (3, self.action_35), (52, self.action_1), + (3, self.action_36), (52, None), (2, self.action_36), (53, None), + (2, self.action_37), (2, None), (2, self.action_11), (3, self.action_38), + (53, self.action_1), (3, None), (54, None), (55, self.action_11), + (3, self.action_39), (3, self.action_0), (3, self.action_40), (3, self.action_41), + (3, self.action_42), (3, self.action_43), (3, self.action_44), (3, self.action_45), + (1, self.action_46), (56, None), (57, None), (11, self.action_0), + (58, None), (3, self.action_47), (3, self.action_48), (3, self.action_49), + (3, self.action_50), (3, self.action_51), (3, self.action_52), (11, self.action_53), + (11, self.action_54), (3, self.action_55), (11, self.action_56), (11, self.action_1), + (3, self.action_57), + ] + state = 0 + try: + if debug: + while True: + c = ord(text[self.index]) + if c < 128: + cls = cls_table[c] + elif c >= max_id: + cls = ERROR_CLASS + else: + b = id_chunks[id_index[c>>8]][(c>>2)&63] + cls = (b>>((c&3)*2))&3 + prev_state = state + print("char = '%s', state=%d, cls=%d" % (text[self.index], state, cls)) + state, transition = action_table[self.super_state[state][cls]] + print ("%s -> %s on %r in %s" % (prev_state, state, text[self.index], TRANSITION_STATE_NAMES[id(self.super_state)])) + if transition: + tkn = transition() + if tkn: + yield tkn + else: + self.index += 1 + else: + while True: + c = ord(text[self.index]) + if c < 128: + cls = cls_table[c] + elif c >= max_id: + cls = ERROR_CLASS + else: + b = id_chunks[id_index[c>>8]][(c>>2)&63] + cls = (b>>((c&3)*2))&3 + state, transition = action_table[self.super_state[state][cls]] + if transition: + tkn = transition() + if tkn: + yield tkn + else: + self.index += 1 + except IndexError as ex: + if self.index != len(text): + #Reraise index error + cls = cls_table[c] + trans = self.super_state[state] + action_index = trans[cls] + action_table[action_index] + # Not raised? Must have been raised in transition function. + raise ex + tkn = self.emit_indent() + while tkn is not None: + yield tkn + tkn = self.emit_indent() + end = self.line, self.index-self.line_start_index + yield ENDMARKER, u"", self.token_start, end + return + + def emit_indent(self): + indent = 0 + index = self.line_start_index + current = self.index + here = self.line, current-self.line_start_index + while index < current: + if self.text[index] == ' ': + indent += 1 + elif self.text[index] == '\t': + indent = (indent+8) & -8 + elif self.text[index] == '\f': + indent = 0 + else: + #Unexpected state. Emit error token + while len(self.indents) > 1: + self.indents.pop() + result = ERRORTOKEN, self.text[self.token_start_index:self.index+1], self.token_start, here + self.token_start = here + self.line_start_index = self.index + return result + index += 1 + if indent == self.indents[-1]: + self.token_start = here + self.token_start_index = self.index + return None + elif indent > self.indents[-1]: + self.indents.append(indent) + start = self.line, 0 + result = INDENT, self.text[self.line_start_index:current], start, here + self.token_start = here + self.token_start_index = current + return result + else: + self.indents.pop() + if indent > self.indents[-1]: + #Illegal indent + result = ILLEGALINDENT, u"", here, here + else: + result = DEDENT, u"", here, here + if indent < self.indents[-1]: + #More dedents to do + self.state_stack.append(self.super_state) + self.super_state = PENDING_DEDENT + self.token_start = here + self.token_start_index = self.index + return result + + +ENCODING_RE = re.compile(br'.*coding[:=]\s*([-\w.]+).*') +NEWLINE_BYTES = b'\n' + +def encoding_from_source(source): + 'Returns encoding of source (bytes), plus source strip of any BOM markers.' + #Check for BOM + if source.startswith(codecs.BOM_UTF8): + return 'utf8', source[len(codecs.BOM_UTF8):] + if source.startswith(codecs.BOM_UTF16_BE): + return 'utf-16be', source[len(codecs.BOM_UTF16_BE):] + if source.startswith(codecs.BOM_UTF16_LE): + return 'utf-16le', source[len(codecs.BOM_UTF16_LE):] + try: + first_new_line = source.find(NEWLINE_BYTES) + first_line = source[:first_new_line] + second_new_line = source.find(NEWLINE_BYTES, first_new_line+1) + second_line = source[first_new_line+1:second_new_line] + match = ENCODING_RE.match(first_line) or ENCODING_RE.match(second_line) + if match: + ascii_encoding = match.groups()[0] + if sys.version < "3": + encoding = ascii_encoding + else: + encoding = ascii_encoding.decode("ascii") + # Handle non-standard encodings that are recognised by the interpreter. + if encoding.startswith("utf-8-"): + encoding = "utf-8" + elif encoding == "iso-latin-1": + encoding = "iso-8859-1" + elif encoding.startswith("latin-1-"): + encoding = "iso-8859-1" + elif encoding.startswith("iso-8859-1-"): + encoding = "iso-8859-1" + elif encoding.startswith("iso-latin-1-"): + encoding = "iso-8859-1" + return encoding, source + except Exception as ex: + print(ex) + #Failed to determine encoding -- Just treat as default. + pass + return 'utf-8', source + diff --git a/python/extractor/semmle/python/parser/tsg_parser.py b/python/extractor/semmle/python/parser/tsg_parser.py new file mode 100644 index 00000000000..46784c4e860 --- /dev/null +++ b/python/extractor/semmle/python/parser/tsg_parser.py @@ -0,0 +1,495 @@ +# tsg_parser.py + +# Functions and classes used for parsing Python files using `tree-sitter-graph` + +from ast import literal_eval +import sys +import os +import semmle.python.parser +from semmle.python.parser.ast import copy_location, decode_str, split_string +from semmle.python import ast +import subprocess +from itertools import groupby + +DEBUG = False +def debug_print(*args, **kwargs): + if DEBUG: + print(*args, **kwargs) + +# Node ids are integers, and so to distinguish them from actual integers we wrap them in this class. +class Node(object): + def __init__(self, id): + self.id = id + def __repr__(self): + return "Node({})".format(self.id) + +# A wrapper for nodes containing comments. The old parser does not create such nodes (and therefore +# there is no `ast.Comment` class) since it accesses the comments via the tokens for the given file. +class Comment(object): + def __init__(self, text): + self.text = text + def __repr__(self): + return "Comment({})".format(self.text) + +class SyntaxErrorNode(object): + def __init__(self, source): + self.source = source + def __repr__(self): + return "SyntaxErrorNode({})".format(self.source) + +# Mapping from tree-sitter CPT node kinds to their corresponding AST node classes. +tsg_to_ast = {name: cls + for name, cls in semmle.python.ast.__dict__.items() + if isinstance(cls, type) and ast.AstBase in cls.__mro__ +} +tsg_to_ast["Comment"] = Comment +tsg_to_ast["SyntaxErrorNode"] = SyntaxErrorNode + +# Mapping from AST node class to the fields of the node. The order of the fields is the order in +# which they will be output in the AST dump. +# +# These fields cannot be extracted automatically, so we set them manually. +ast_fields = { + ast.Module: ("body",), # Note: has no `__slots__` to inspect + Comment: ("text",), # Note: not an `ast` class + SyntaxErrorNode: ("source",), # Note: not an `ast` class + ast.Continue: (), + ast.Break: (), + ast.Pass: (), + ast.Ellipsis: (), + ast.MatchWildcardPattern: (), +} + +# Fields that we don't want to dump on every single AST node. These are just the slots of the AST +# base class, consisting of all of the location information (which we print in a different way). +ignored_fields = semmle.python.ast.AstBase.__slots__ + +# Extract fields for the remaining AST classes +for name, cls in semmle.python.ast.__dict__.items(): + if name.startswith("_"): + continue + if not hasattr(cls, "__slots__"): + continue + slots = tuple(field for field in cls.__slots__ if field not in ignored_fields) + if not slots: + continue + ast_fields[cls] = slots + +# A mapping from strings to the AST node classes that represent things like operators. +# These have to be handled specially, because they have no location information. +locationless = { + "and": ast.And, + "or": ast.Or, + "not": ast.Not, + "uadd": ast.UAdd, + "usub": ast.USub, + "+": ast.Add, + "-": ast.Sub, + "~": ast.Invert, + "**": ast.Pow, + "<<": ast.LShift, + ">>": ast.RShift, + "&": ast.BitAnd, + "|": ast.BitOr, + "^": ast.BitXor, + "load": ast.Load, + "store": ast.Store, + "del" : ast.Del, + "param" : ast.Param, +} +locationless.update(semmle.python.parser.ast.TERM_OP_CLASSES) +locationless.update(semmle.python.parser.ast.COMP_OP_CLASSES) +locationless.update(semmle.python.parser.ast.AUG_ASSIGN_OPS) + +if 'CODEQL_EXTRACTOR_PYTHON_ROOT' in os.environ: + platform = os.environ['CODEQL_PLATFORM'] + ext = ".exe" if platform == "win64" else "" + tools = os.path.join(os.environ['CODEQL_EXTRACTOR_PYTHON_ROOT'], "tools", platform) + tsg_command = [os.path.join(tools, "tsg-python" + ext )] +else: + # Get the path to the current script + script_path = os.path.dirname(os.path.realpath(__file__)) + tsg_python_path = os.path.join(script_path, "../../../tsg-python") + cargo_file = os.path.join(tsg_python_path, "Cargo.toml") + tsg_command = ["cargo", "run", "--quiet", "--release", "--manifest-path="+cargo_file] + +def read_tsg_python_output(path, logger): + # Mapping from node id (an integer) to a dictionary containing attribute data. + node_attr = {} + # Mapping a start node to a map from attribute names to lists of (value, end_node) pairs. + edge_attr = {} + + command_args = tsg_command + [path] + p = subprocess.Popen(command_args, stdout=subprocess.PIPE) + for line in p.stdout: + line = line.decode(sys.getfilesystemencoding()) + line = line.rstrip() + if line.startswith("node"): # e.g. `node 5` + current_node = int(line.split(" ")[1]) + d = {} + node_attr[current_node] = d + in_node = True + elif line.startswith("edge"): # e.g. `edge 5 -> 6` + current_start, current_end = tuple(map(int, line[4:].split("->"))) + d = edge_attr.setdefault(current_start, {}) + in_node = False + else: # attribute, e.g. `_kind: "Class"` + key, value = line[2:].split(": ", 1) + if value.startswith("[graph node"): # e.g. `_skip_to: [graph node 5]` + value = Node(int(value.split(" ")[2][:-1])) + elif value == "#true": # e.g. `_is_parenthesised: #true` + value = True + elif value == "#false": # e.g. `top: #false` + value = False + elif value == "#null": # e.g. `exc: #null` + value = None + else: # literal values, e.g. `name: "k1.k2"` or `level: 5` + try: + if key =="s" and value[0] == '"': # e.g. `s: "k1.k2"` + value = evaluate_string(value) + else: + value = literal_eval(value) + if isinstance(value, bytes): + try: + value = value.decode(sys.getfilesystemencoding()) + except UnicodeDecodeError: + # just include the bytes as-is + pass + except Exception as ex: + # We may not know the location at this point -- for instance if we forgot to set + # it -- but `get_location_info` will degrade gracefully in this case. + loc = ":".join(str(i) for i in get_location_info(d)) + error = ex.args[0] if ex.args else "unknown" + logger.warning("Error '{}' while parsing value {} at {}:{}\n".format(error, repr(value), path, loc)) + if in_node: + d[key] = value + else: + d.setdefault(key, []).append((value, current_end)) + p.stdout.close() + p.terminate() + p.wait() + logger.info("Read {} nodes and {} edges from TSG output".format(len(node_attr), len(edge_attr))) + return node_attr, edge_attr + +def evaluate_string(s): + s = literal_eval(s) + prefix, quotes, content = split_string(s, None) + ends_with_illegal_character = False + # If the string ends with the same quote character as the outer quotes (and/or backslashes) + # (e.g. the first string part of `f"""hello"{0}"""`), we must take care to not accidently create + # the ending quotes at the wrong place. To do this, we insert an extra space at the end (that we + # then must remember to remove later on.) + if content.endswith(quotes[0]) or content.endswith('\\'): + ends_with_illegal_character = True + content = content + " " + s = prefix.strip("fF") + quotes + content + quotes + s = literal_eval(s) + if isinstance(s, bytes): + s = decode_str(s) + if ends_with_illegal_character: + s = s[:-1] + return s + +def resolve_node_id(id, node_attr): + """Finds the end of a sequence of nodes linked by `_skip_to` fields, starting at `id`.""" + while "_skip_to" in node_attr[id]: + id = node_attr[id]["_skip_to"].id + return id + +def get_context(id, node_attr, logger): + """Gets the context of the node with the given `id`. This is either whatever is stored in the + `ctx` attribute of the node, or the result of dereferencing a sequence of `_inherited_ctx` attributes.""" + + while "ctx" not in node_attr[id]: + if "_inherited_ctx" not in node_attr[id]: + logger.error("No context for node {} with attributes {}\n".format(id, node_attr[id])) + # A missing context is most likely to be a "load", so return that. + return ast.Load() + id = node_attr[id]["_inherited_ctx"].id + return locationless[node_attr[id]["ctx"]]() + +def get_location_info(attrs): + """Returns the location information for a node, depending on which fields are set. + + In particular, more specific fields take precedence over (and overwrite) less specific fields. + So, `_start_line` and `_start_column` take precedence over `location_start`, which takes + precedence over `_location`. Likewise when `end` replaces `start` above. + + If part of the location information is missing, the string `"???"` is substituted for the + missing bits. + """ + start_line = "???" + start_column = "???" + end_line = "???" + end_column = "???" + if "_location" in attrs: + (start_line, start_column, end_line, end_column) = attrs["_location"] + if "_location_start" in attrs: + (start_line, start_column) = attrs["_location_start"] + if "_location_end" in attrs: + (end_line, end_column) = attrs["_location_end"] + if "_start_line" in attrs: + start_line = attrs["_start_line"] + if "_start_column" in attrs: + start_column = attrs["_start_column"] + if "_end_line" in attrs: + end_line = attrs["_end_line"] + if "_end_column" in attrs: + end_column = attrs["_end_column"] + # Lines in the `tsg-python` output is 0-indexed, but the AST expects them to be 1-indexed. + if start_line != "???": + start_line += 1 + if end_line != "???": + end_line += 1 + return (start_line, start_column, end_line, end_column) + +list_fields = { + ast.arguments: ("annotations", "defaults", "kw_defaults", "kw_annotations"), + ast.Assign: ("targets",), + ast.BoolOp: ("values",), + ast.Bytes: ("implicitly_concatenated_parts",), + ast.Call: ("positional_args", "named_args"), + ast.Case: ("body",), + ast.Class: ("body",), + ast.ClassExpr: ("type_parameters", "bases", "keywords"), + ast.Compare: ("ops", "comparators",), + ast.comprehension: ("ifs",), + ast.Delete: ("targets",), + ast.Dict: ("items",), + ast.ExceptStmt: ("body",), + ast.For: ("body",), + ast.Function: ("type_parameters", "args", "kwonlyargs", "body"), + ast.Global: ("names",), + ast.If: ("body",), + ast.Import: ("names",), + ast.List: ("elts",), + ast.Match: ("cases",), + ast.MatchClassPattern: ("positional", "keyword"), + ast.MatchMappingPattern: ("mappings",), + ast.MatchOrPattern: ("patterns",), + ast.MatchSequencePattern: ("patterns",), + ast.Module: ("body",), + ast.Nonlocal: ("names",), + ast.Print: ("values",), + ast.Set: ("elts",), + ast.Str: ("implicitly_concatenated_parts",), + ast.TypeAlias: ("type_parameters",), + ast.Try: ("body", "handlers", "orelse", "finalbody"), + ast.Tuple: ("elts",), + ast.While: ("body",), +# ast.FormattedStringLiteral: ("arguments",), +} + +def create_placeholder_args(cls): + """ Returns a dictionary containing the placeholder arguments necessary to create an AST node. + + In most cases these arguments will be assigned the value `None`, however for a few classes we + must substitute the empty list, as this is enforced by asserts in the constructor. + """ + if cls in (ast.Raise, ast.Ellipsis): + return {} + fields = ast_fields[cls] + args = {field: None for field in fields if field != "is_async"} + for field in list_fields.get(cls, ()): + args[field] = [] + if cls in (ast.GeneratorExp, ast.ListComp, ast.SetComp, ast.DictComp): + del args["function"] + del args["iterable"] + return args + +def parse(path, logger): + node_attr, edge_attr = read_tsg_python_output(path, logger) + debug_print("node_attr:", node_attr) + debug_print("edge_attr:", edge_attr) + nodes = {} + # Nodes that need to be fixed up after building the graph + fixups = {} + # Reverse index from node object to node id. + node_id = {} + # Create all the node objects + for id, attrs in node_attr.items(): + if "_is_literal" in attrs: + nodes[id] = attrs["_is_literal"] + continue + if "_kind" not in attrs: + logger.error("Error: Graph node {} with attributes {} has no `_kind`!\n".format(id, attrs)) + continue + # This is not the node we are looking for (so don't bother creating it). + if "_skip_to" in attrs: + continue + cls = tsg_to_ast[attrs["_kind"]] + args = ast_fields[cls] + obj = cls(**create_placeholder_args(cls)) + nodes[id] = obj + node_id[obj] = id + # If this node needs fixing up afterwards, add it to the fixups map. + if "_fixup" in attrs: + fixups[id] = obj + # Set all of the node attributes + for id, node in nodes.items(): + attrs = node_attr[id] + if "_is_literal" in attrs: + continue + expected_fields = ast_fields[type(node)] + + # Set up location information. + node.lineno, node.col_offset, end_line, end_column = get_location_info(attrs) + node._end = (end_line, end_column) + + if isinstance(node, SyntaxErrorNode): + exc = SyntaxError("Syntax Error") + exc.lineno = node.lineno + exc.offset = node.col_offset + raise exc + + # Set up context information, if any + if "ctx" in expected_fields: + node.ctx = get_context(id, node_attr, logger) + # Set the fields. + for field, val in attrs.items(): + if field.startswith("_"): continue + if field == "ctx": continue + if field != "parenthesised" and field not in expected_fields: + logger.warning("Unknown field {} found among {} in node {}\n".format(field, attrs, id)) + + # For fields that point to other AST nodes. + if isinstance(val, Node): + val = resolve_node_id(val.id, node_attr) + setattr(node, field, nodes[val]) + # Special case for `Num.n`, which should be coerced to an int. + elif isinstance(node, ast.Num) and field == "n": + node.n = literal_eval(val.rstrip("lL")) + # Special case for `Name.variable`, for which we must create a new `Variable` object + elif isinstance(node, ast.Name) and field == "variable": + node.variable = ast.Variable(val) + # Special case for location-less leaf-node subclasses of `ast.Node`, such as `ast.Add`. + elif field == "op" and val in locationless.keys(): + setattr(node, field, locationless[val]()) + else: # Any other value, usually literals of various kinds. + setattr(node, field, val) + + # Create all fields pointing to lists of values. + for start, field_map in edge_attr.items(): + start = resolve_node_id(start, node_attr) + parent = nodes[start] + extra_fields = {} + for field_name, value_end in field_map.items(): + # Sort children by index (in case they were visited out of order) + children = [nodes[resolve_node_id(end, node_attr)] for _index, end in sorted(value_end)] + # Skip any comments. + children = [child for child in children if not isinstance(child, Comment)] + # Special case for `Compare.ops`, a list of comparison operators + if isinstance(parent, ast.Compare) and field_name == "ops": + parent.ops = [locationless[v]() for v in children] + elif field_name.startswith("_"): + # We can only set the attributes given in `__slots__` on the `start` node, and so we + # must handle fields starting with `_` specially. In this case, we simply record the + # values and then subsequently update `edge_attr` to refer to these values. This + # makes it act as a pseudo-field, that we can access as long as we know the `id` + # corresponding to a given node (for which we have the `node_id` map). + extra_fields[field_name] = children + else: + setattr(parent, field_name, children) + if extra_fields: + # Extend the existing map in `node_attr` with the extra fields. + node_attr[start].update(extra_fields) + + # Fixup any nodes that need it. + for id, node in fixups.items(): + if isinstance(node, (ast.JoinedStr, ast.Str)): + fix_strings(id, node, node_attr, node_id, logger) + + debug_print("nodes:", nodes) + if not nodes: + # if the file referenced by path is empty, return an empty module: + if os.path.getsize(path) == 0: + module = ast.Module([]) + module.lineno = 1 + module.col_offset = 0 + module._end = (1, 0) + return module + else: + raise SyntaxError("Syntax Error") + # Fix up start location of outer `Module`. + module = nodes[0] + if module.body: + # Get the location of the first non-comment node. + module.lineno = module.body[0].lineno + else: + # No children! File must contain only comments! Pick the end location as the start location. + module.lineno = module._end[0] + return module + + +def get_JoinedStr_children(children): + """ + Folds the `Str` and `expr` parts of a `JoinedStr` into a single list, and does this for each + `JoinedStr` in `children`. Top-level `StringPart`s are included in the output directly. + """ + for child in children: + if isinstance(child, ast.JoinedStr): + for value in child.values: + yield value + elif isinstance(child, ast.StringPart): + yield child + else: + raise ValueError("Unexpected node type: {}".format(type(child))) + +def concatenate_stringparts(stringparts, logger): + """Concatenates the strings contained in the list of `stringparts`.""" + try: + return "".join(decode_str(stringpart.s) for stringpart in stringparts) + except Exception as ex: + logger.error("Unable to concatenate string %s getting error %s", stringparts, ex) + return stringparts[0].s + + +def fix_strings(id, node, node_attr, node_id, logger): + """ + Reassociates the `StringPart` children of an implicitly concatenated f-string (`JoinedStr`) + """ + # Tests whether something is a string child + is_string = lambda node: isinstance(node, ast.StringPart) + + # We have two cases to consider. Either we're given something that came from a + # `concatenated_string`, or something that came from an `formatted_string`. The latter case can + # be seen as a special case of the former where the list of children we consider is just the + # single f-string. + children = node_attr[id].get("_children", [node]) + if isinstance(node, ast.Str): + # If the outer node is a `Str`, then we don't have to reassociate, since there are no + # f-strings. + # In this case we simply have to create the concatenation of its constituent parts. + node.implicitly_concatenated_parts = children + node.s = concatenate_stringparts(children, logger) + node.prefix = children[0].prefix + else: + # Otherwise, we first have to get the flattened list of all of the strings and/or + # expressions. + flattened_children = get_JoinedStr_children(children) + groups = [list(n) for _, n in groupby(flattened_children, key=is_string)] + # At this point, `values` is a list of lists, where each sublist is either: + # - a list of `StringPart`s, or + # - a singleton list containing an `expr`. + # Crucially, `StringPart` is _not_ an `expr`. + combined_values = [] + for group in groups: + first = group[0] + if isinstance(first, ast.expr): + # If we have a list of expressions (which may happen if an interpolation contains + # multiple distinct expressions, such as f"{foo:{bar}}", which uses interpolation to + # also specify the padding dynamically), we simply append it. + combined_values.extend(group) + else: + # Otherwise, we have a list of `StringPart`s, and we need to create a `Str` node to + # it. + + combined_string = concatenate_stringparts(group, logger) + str_node = ast.Str(combined_string, first.prefix, None) + copy_location(first, str_node) + # The end location should be the end of the last part (even if there is only one part). + str_node._end = group[-1]._end + if len(group) > 1: + str_node.implicitly_concatenated_parts = group + combined_values.append(str_node) + node.values = combined_values diff --git a/python/extractor/semmle/python/passes/__init__.py b/python/extractor/semmle/python/passes/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/semmle/python/passes/_pass.py b/python/extractor/semmle/python/passes/_pass.py new file mode 100644 index 00000000000..94c3b77a63d --- /dev/null +++ b/python/extractor/semmle/python/passes/_pass.py @@ -0,0 +1,11 @@ + +from abc import abstractmethod + +class Pass(object): + '''The base class for all extractor passes. + Defines a single method 'extract' for all extractors to override''' + + @abstractmethod + def extract(self, module, writer): + '''Extract trap file data from 'module', writing it to the writer.''' + pass diff --git a/python/extractor/semmle/python/passes/ast_pass.py b/python/extractor/semmle/python/passes/ast_pass.py new file mode 100644 index 00000000000..363e1007c64 --- /dev/null +++ b/python/extractor/semmle/python/passes/ast_pass.py @@ -0,0 +1,232 @@ + +from semmle.python import ast +import semmle.python.master +import sys +from semmle.python.passes._pass import Pass +from semmle.util import get_analysis_major_version + +__all__ = [ 'ASTPass' ] + +class ASTPass(Pass): + '''Extract relations from AST. + Use AST.Node objects to guide _walking of AST''' + + name = "ast" + + def __init__(self): + self.offsets = get_offset_table() + + #Entry point + def extract(self, root, writer): + try: + self.writer = writer + if root is None: + return + self._emit_variable(ast.Variable("__name__", root)) + self._emit_variable(ast.Variable("__package__", root)) + # Introduce special variable "$" for use by the points-to library. + self._emit_variable(ast.Variable("$", root)) + writer.write_tuple(u'py_extracted_version', 'gs', root.trap_name, get_analysis_major_version()) + self._walk(root, None, 0, root, None) + finally: + self.writer = None + + #Tree _walkers + + def _get_walker(self, node): + if isinstance(node, list): + return self._walk_list + elif isinstance(node, ast.AstBase): + return self._walk_node + else: + return self._emit_primitive + + def _walk(self, node, parent, index, scope, description): + self._get_walker(node)(node, parent, index, scope, description) + + def _walk_node(self, node, parent, index, scope, _unused): + self._emit_node(node, parent, index, scope) + if type(node) is ast.Name: + assert (hasattr(node, 'variable') and + type(node.variable) is ast.Variable), (node, parent, index, scope) + if type(node) in (ast.Class, ast.Function): + scope = node + # For scopes with a `from ... import *` statement introduce special variable "*" for use by the points-to library. + if isinstance(node, ast.ImportFrom): + self._emit_variable(ast.Variable("*", scope)) + for field_name, desc, child_node in iter_fields(node): + try: + index = self.offsets[(type(node).__name__, field_name)] + self._walk(child_node, node, index, scope, desc) + except ConsistencyError: + ex = sys.exc_info()[1] + ex.message += ' in ' + type(node).__name__ + if hasattr(node, 'rewritten') and node.rewritten: + ex.message += '(rewritten)' + ex.message += '.' + field_name + raise + + def _walk_list(self, node, parent, index, scope, description): + assert description.is_list(), description + if len(node) == 0: + return + else: + self._emit_list(node, parent, index, description) + for i, child in enumerate(node): + self._get_walker(child)(child, node, i, scope, description.item_type) + + #Emitters + def _emit_node(self, ast_node, parent, index, scope): + t = type(ast_node) + node = _ast_nodes[t.__name__] + #Ensure all stmts have a list as a parent. + if isinstance(ast_node, ast.stmt): + assert isinstance(parent, list), (ast_node, parent) + if node.is_sub_type(): + rel_name = node.super_type.relation_name() + shared_parent = not node.super_type.unique_parent + else: + rel_name = node.relation_name() + shared_parent = node.parents is None or not node.unique_parent + if rel_name[-1] != 's': + rel_name += 's' + if t.__mro__[1] in (ast.cmpop, ast.operator, ast.expr_context, ast.unaryop, ast.boolop): + #These nodes may be used more than once, but must have a + #unique id for each occurrence in the AST + fields = [ self.writer.get_unique_id() ] + fmt = 'r' + else: + fields = [ ast_node ] + fmt = 'n' + if node.is_sub_type(): + fields.append(node.index) + fmt += 'd' + if parent: + fields.append(parent) + fmt += 'n' + if shared_parent: + fields.append(index) + fmt += 'd' + self.writer.write_tuple(rel_name, fmt, *fields) + if t.__mro__[1] in (ast.expr, ast.stmt): + self.writer.write_tuple(u'py_scopes', 'nn', ast_node, scope) + + def _emit_variable(self, ast_node): + self.writer.write_tuple(u'variable', 'nns', ast_node, ast_node.scope, ast_node.id) + + def _emit_name(self, ast_node, parent): + self._emit_variable(ast_node) + self.writer.write_tuple(u'py_variables', 'nn', ast_node, parent) + + def _emit_primitive(self, val, parent, index, scope, description): + if val is None or val is False: + return + if isinstance(val, ast.Variable): + self._emit_name(val, parent) + return + assert not isinstance(val, ast.AstBase) + rel = description.relation_name() + if val is True: + if description.unique_parent: + self.writer.write_tuple(rel, 'n', parent) + else: + self.writer.write_tuple(rel, 'nd', parent, index) + else: + f = format_for_primitive(val, description) + if description.unique_parent: + self.writer.write_tuple(rel, f + 'n', val, parent) + else: + self.writer.write_tuple(rel, f + 'nd', val, parent, index) + + def _emit_list(self, node, parent, index, description): + rel_name = description.relation_name() + if description.unique_parent: + self.writer.write_tuple(rel_name, 'nn', node, parent) + else: + self.writer.write_tuple(rel_name, 'nnd', node, parent, index) + +_ast_nodes = semmle.python.master.all_nodes() +if get_analysis_major_version() < 3: + _ast_nodes['TryExcept'] = _ast_nodes['Try'] + _ast_nodes['TryFinally'] = _ast_nodes['Try'] + +class ConsistencyError(Exception): + + def __str__(self): + return self.message + +def iter_fields(node): + desc = _ast_nodes[type(node).__name__] + for name, description, _, _, _ in desc.fields: + if hasattr(node, name): + yield name, description, getattr(node, name) + + +NUMBER_TYPES = (int, float) + +def check_matches(node, node_type, owner, field): + if node_type is list: + if node.is_list(): + return + else: + for t in node_type.__mro__: + if t.__name__ == node.__name__: + return + if node_type in NUMBER_TYPES and node.__name__ == 'number': + return + raise ConsistencyError("Found %s expected %s for field %s of %s" % + (node_type.__name__, node.__name__, field, owner.__name__)) + +def get_offset_table(): + '''Returns mapping of (class_name, field_name) + pairs to offsets (in relation)''' + table = {} + nodes = _ast_nodes.values() + for node in nodes: + for field, _, offset, _, _, _ in node.layout: + table[(node.__name__, field)] = offset + try_node = _ast_nodes['Try'] + for field, _, offset, _, _, _ in try_node.layout: + table[('TryFinally', field)] = offset + table[('TryExcept', field)] = offset + return table + + +def format_for_primitive(val, description): + if isinstance(val, str): + return 'u' + elif isinstance(val, bytes): + return 'b' + elif description.__name__ == 'int': + return 'd' + else: + return 'q' + +class ASTVisitor(object): + """ + A node visitor base class that walks the abstract syntax tree and calls a + visitor function for every node found. This function may return a value + which is forwarded by the `visit` method. + + This class is meant to be subclassed, with the subclass adding visitor + methods. + + The visitor functions for the nodes are ``'visit_'`` + class name of the node. + """ + + def _get_visit_method(self, node): + method = 'visit_' + node.__class__.__name__ + return getattr(self, method, self.generic_visit) + + def visit(self, node): + """Visit a node.""" + self._get_visit_method(node)(node) + + def generic_visit(self, node): + """Called if no explicit visitor function exists for a node.""" + if isinstance(node, ast.AstBase): + for _, _, child in iter_fields(node): + self.visit(child) + elif isinstance(node, list): + for item in node: + self._get_visit_method(item)(item) diff --git a/python/extractor/semmle/python/passes/exports.py b/python/extractor/semmle/python/passes/exports.py new file mode 100644 index 00000000000..5fd69c8e093 --- /dev/null +++ b/python/extractor/semmle/python/passes/exports.py @@ -0,0 +1,113 @@ + +from semmle.python import ast +from semmle.python.passes._pass import Pass + +def write_exports(module, exports, writer): + for sym in exports: + writer.write_tuple(u'py_exports', 'ns', module, sym) + +def list_of_symbols_from_expr(expr): + #This should be a list of constant strings + if isinstance(expr, (ast.List, ast.Tuple)): + exports = [] + for item in expr.elts: + if isinstance(item, ast.Str): + exports.append(item.s) + return exports + return [] + +def is___all__(node): + try: + return isinstance(node, ast.Name) and node.variable.id == '__all__' + except Exception: + return False + +def __all___from_stmt(stmt): + '''Returns None if __all__ is not defined. + If __all__ may be defined then return a conservative approximation''' + assert isinstance(stmt, ast.stmt) + if isinstance(stmt, ast.If): + body_exports = __all___from_stmt_list(stmt.body) + if stmt.orelse: + orelse_exports = __all___from_stmt_list(stmt.orelse) + else: + orelse_exports = None + # If __all__ = ... on one branch but not other then return [] + # If defined on neither branch return None + if body_exports is None: + if orelse_exports is None: + return None + else: + return [] + else: + if orelse_exports is None: + return [] + else: + return set(body_exports).intersection(set(orelse_exports)) + elif isinstance(stmt, ast.Assign): + for target in stmt.targets: + if is___all__(target): + return list_of_symbols_from_expr(stmt.value) + return None + +def __all___from_stmt_list(stmts): + assert isinstance(stmts, list) + exports = None + for stmt in stmts: + ex = __all___from_stmt(stmt) + if ex is not None: + exports = ex + return exports + +def is_private_symbol(sym): + if sym[0] != '_': + return False + if len(sym) >= 4 and sym[:2] == '__' and sym[-2:] == '__': + return False + return True + +def globals_from_tree(node, names): + 'Add all globals defined in the tree to names' + if isinstance(node, list): + for subnode in node: + globals_from_tree(subnode, names) + elif isinstance(node, ast.Assign): + for target in node.targets: + if isinstance(target, ast.Name): + names.add(target.variable.id) + elif isinstance(node, ast.If): + if node.orelse: + left = set() + right = set() + globals_from_tree(node.body, left) + globals_from_tree(node.orelse, right) + names.update(left.intersection(right)) + # Don't decent into other nodes. + +def exports_from_ast(node): + 'Get a list of symbols exported by the module from its ast.' + #Look for assignments to __all__ + #If not available at top-level, then check if-statements, + #but ignore try-except and loops + assert type(node) is ast.Module + exports = __all___from_stmt_list(node.body) + if exports is not None: + return exports + # No explicit __all__ assignment so gather global assignments + exports = set() + globals_from_tree(node.body, exports) + return [ ex for ex in exports if not is_private_symbol(ex) ] + +class ExportsPass(Pass): + '''Finds all 'exports' of a module. An export is a symbol that is defined + in the __all__ list or, if __all__ is undefined, is defined at top-level + and is not private''' + + name = "exports" + + def __init__(self): + pass + + def extract(self, ast, writer): + exported = exports_from_ast(ast) + write_exports(ast, exported, writer) diff --git a/python/extractor/semmle/python/passes/flow.py b/python/extractor/semmle/python/passes/flow.py new file mode 100755 index 00000000000..a9148aefd0f --- /dev/null +++ b/python/extractor/semmle/python/passes/flow.py @@ -0,0 +1,1927 @@ +import sys +import os.path +import traceback +from typing import Optional + +from semmle.python import ast +from semmle import util +from semmle.python.passes.ast_pass import iter_fields +from semmle.python.passes._pass import Pass +from semmle.python.passes import pruner +from semmle.python.passes import splitter +from semmle.python.passes import unroller +from semmle.python import modules +import semmle.graph as graph +from semmle.logging import Logger + +__all__ = [ 'FlowPass' ] + +class ConsistencyError(util.SemmleError): + pass + +def error(node, _): + raise ConsistencyError("Unexpected node type " + type(node).__name__) + + +class FlowNode(object): + __slots__ = [ 'node' ] + + def __init__(self, node): + self.node = node + + def __repr__(self): + if hasattr(self.node, "lineno"): + return 'FlowNode(%s at %d)' % (type(self.node), self.node.lineno) + else: + return 'FlowNode(%r)' % self.node + + def copy(self): + return FlowNode(self.node) + +#Kinds of node sets. +NORMAL = util.NORMAL_EDGE +TRUE = util.TRUE_EDGE +FALSE = util.FALSE_EDGE +EXCEPTION = util.EXCEPTIONAL_EDGE +EXHAUSTED = util.EXHAUSTED_EDGE + +TRUE_OR_FALSE = TRUE | FALSE + +#Set of names of modules that are guaranteed to be in the interpreter regardless of platform +GUARANTEED_MODULES = { + "_ast", + "_bisect", + "_codecs", + "_collections", + "_functools", + "_heapq", + "_io", + "_locale", + "_md5", + "_operator", + "_random", + "_sha256", + "_sha512", + "_socket", + "_sre", + "_struct", + "_symtable", + "_warnings", + "_weakref", + "array", + "binascii", + "cmath", + "errno", + "gc", + "itertools", + "marshal", + "math", + "sys", + "syslog", + "time", + "unicodedata", + "zipimport", + "zlib", +} + + +_py3_names = { + "ArithmeticError", + "AssertionError", + "AttributeError", + "BaseException", + "BlockingIOError", + "BrokenPipeError", + "BufferError", + "BytesWarning", + "ChildProcessError", + "ConnectionAbortedError", + "ConnectionError", + "ConnectionRefusedError", + "ConnectionResetError", + "DeprecationWarning", + "EOFError", + "Ellipsis", + "EnvironmentError", + "Exception", + "False", + "FileExistsError", + "FileNotFoundError", + "FloatingPointError", + "FutureWarning", + "GeneratorExit", + "IOError", + "ImportError", + "ImportWarning", + "IndentationError", + "IndexError", + "InterruptedError", + "IsADirectoryError", + "KeyError", + "KeyboardInterrupt", + "LookupError", + "MemoryError", + "NameError", + "None", + "NotADirectoryError", + "NotImplemented", + "NotImplementedError", + "OSError", + "OverflowError", + "PendingDeprecationWarning", + "PermissionError", + "ProcessLookupError", + "ReferenceError", + "ResourceWarning", + "RuntimeError", + "RuntimeWarning", + "StopIteration", + "SyntaxError", + "SyntaxWarning", + "SystemError", + "SystemExit", + "TabError", + "TimeoutError", + "True", + "TypeError", + "UnboundLocalError", + "UnicodeDecodeError", + "UnicodeEncodeError", + "UnicodeError", + "UnicodeTranslateError", + "UnicodeWarning", + "UserWarning", + "ValueError", + "Warning", + "ZeroDivisionError", + "__build_class__", + "__debug__", + "__doc__", + "__import__", + "__loader__", + "__name__", + "__package__", + "__spec__", + "abs", + "all", + "any", + "ascii", + "bin", + "bool", + "bytearray", + "bytes", + # "callable", only 3.2+ + "chr", + "classmethod", + "compile", + "complex", + "copyright", + "credits", + "delattr", + "dict", + "dir", + "divmod", + "enumerate", + "eval", + "exec", + "exit", + "filter", + "float", + "format", + "frozenset", + "getattr", + "globals", + "hasattr", + "hash", + "help", + "hex", + "id", + "input", + "int", + "isinstance", + "issubclass", + "iter", + "len", + "license", + "list", + "locals", + "map", + "max", + "memoryview", + "min", + "next", + "object", + "oct", + "open", + "ord", + "pow", + "print", + "property", + "quit", + "range", + "repr", + "reversed", + "round", + "set", + "setattr", + "slice", + "sorted", + "staticmethod", + "str", + "sum", + "super", + "tuple", + "type", + "vars", + "zip", +} + +_py2_names = { + "ArithmeticError", + "AssertionError", + "AttributeError", + "BaseException", + "BufferError", + "BytesWarning", + "DeprecationWarning", + "EOFError", + "Ellipsis", + "EnvironmentError", + "Exception", + "False", + "FloatingPointError", + "FutureWarning", + "GeneratorExit", + "IOError", + "ImportError", + "ImportWarning", + "IndentationError", + "IndexError", + "KeyError", + "KeyboardInterrupt", + "LookupError", + "MemoryError", + "NameError", + "None", + "NotImplemented", + "NotImplementedError", + "OSError", + "OverflowError", + "PendingDeprecationWarning", + "ReferenceError", + "RuntimeError", + "RuntimeWarning", + "StandardError", + "StopIteration", + "SyntaxError", + "SyntaxWarning", + "SystemError", + "SystemExit", + "TabError", + "True", + "TypeError", + "UnboundLocalError", + "UnicodeDecodeError", + "UnicodeEncodeError", + "UnicodeError", + "UnicodeTranslateError", + "UnicodeWarning", + "UserWarning", + "ValueError", + "Warning", + "ZeroDivisionError", + "__debug__", + "__doc__", + "__import__", + "__name__", + "__package__", + "abs", + "all", + "any", + "apply", + "basestring", + "bin", + "bool", + "buffer", + "bytearray", + "bytes", + "callable", + "chr", + "classmethod", + "cmp", + "coerce", + "compile", + "complex", + "copyright", + "credits", + "delattr", + "dict", + "dir", + "divmod", + "enumerate", + "eval", + "execfile", + "exit", + "file", + "filter", + "float", + "format", + "frozenset", + "getattr", + "globals", + "hasattr", + "hash", + "help", + "hex", + "id", + "input", + "int", + "intern", + "isinstance", + "issubclass", + "iter", + "len", + "license", + "list", + "locals", + "long", + "map", + "max", + "memoryview", + "min", + "next", + "object", + "oct", + "open", + "ord", + "pow", + "print", + "property", + "quit", + "range", + "raw_input", + "reduce", + "reload", + "repr", + "reversed", + "round", + "set", + "setattr", + "slice", + "sorted", + "staticmethod", + "str", + "sum", + "super", + "tuple", + "type", + "unichr", + "unicode", + "vars", + "xrange", + "zip", +} + +#Set of names that always exist (for both Python 2 and 3) +BUILTIN_NAME_ALWAYS_EXISTS = _py2_names.intersection(_py3_names) + +# A NodeSet is a conceptually a set of (FlowNode, kind) pairs. +#This class exists to document the interface. +class ExampleNodeSet(object): + '''This class exists for documentation purposes only.''' + + def branch(self): + '''Branch into (true, false) pair of nodesets.''' + + def __add__(self, other): + '''Add this node set to another, returning the union''' + + def normalise(self): + '''Return normalise form of this node set, turning all kinds into NORMAL''' + + def exception(self): + '''Return exception form of this node set, turning all kinds into EXCEPTION''' + + def merge_true_false_pairs(self): + '''Return copy of this node set with all pairs of TRUE and FALSE kinds for the same node turned into NORMAL''' + + def add_node(self, node, kind): + '''Return a new node set with (node, kind) pair added.''' + + def invert(self): + '''Return copy of this node set with all TRUE kinds set to FALSE and vice versa.''' + +class EmptyNodeSet(object): + + def branch(self): + return self, self + + def __add__(self, other): + return other + + def normalise(self): + return self + + def exception(self): + return self + + def merge_true_false_pairs(self): + return self + + def add_node(self, node, kind): + return SingletonNodeSet(node, kind) + + def __iter__(self): + return iter(()) + + def __len__(self): + return 0 + + def __str__(self): + return "{}" + + def invert(self): + return self + +EMPTY = EmptyNodeSet() + +class SingletonNodeSet(object): + + __slots__ = [ 'node', 'kind'] + + def __init__(self, node, kind): + self.node = node + self.kind = kind + + def branch(self): + if self.kind == TRUE: + return self, EMPTY + elif self.kind == FALSE: + return EMPTY, self + elif self.kind == NORMAL: + return SingletonNodeSet(self.node, TRUE), SingletonNodeSet(self.node, FALSE) + else: + return self, self + + def __add__(self, other): + if other is EMPTY: + return self + else: + return other.add_node(self.node, self.kind) + + def normalise(self): + return SingletonNodeSet(self.node, NORMAL) + + def exception(self): + return SingletonNodeSet(self.node, EXCEPTION) + + def merge_true_false_pairs(self): + return self + + def add_node(self, node, kind): + if node == self.node and kind == self.kind: + return self + other = MultiNodeSet() + other.append((self.node, self.kind)) + other.append((node, kind)) + return other + + def __iter__(self): + yield self.node, self.kind + + def __len__(self): + return 1 + + def invert(self): + if self.kind & TRUE_OR_FALSE: + return SingletonNodeSet(self.node, self.kind ^ TRUE_OR_FALSE) + else: + return self + + def unique_node(self): + return self.node + + def __str__(self): + return "{(%s, %d)}" % (self.node, self.kind) + +class MultiNodeSet(list): + + __slots__ = [] + + def branch(self): + '''Branch into (true, false) pair of nodesets.''' + l = EMPTY + for node, kind in self: + if kind != FALSE: + l = l.add_node(node, kind) + r = EMPTY + for node, kind in self: + if kind != TRUE: + r = r.add_node(node, kind) + return l, r + + def __add__(self, other): + if other is EMPTY: + return self + res = MultiNodeSet(self) + if isinstance(other, SingletonNodeSet): + res.insert_node(other.node, other.kind) + return res + for node, kind in other: + res.insert_node(node, kind) + return res + + def convert(self, the_kind): + the_node = self[0][0] + for node, kind in self: + if node != the_node: + break + else: + return SingletonNodeSet(node, the_kind) + res = MultiNodeSet() + for node, kind in self: + res.insert_node(node, the_kind) + return res + + def normalise(self): + return self.convert(NORMAL) + + def exception(self): + return self.convert(EXCEPTION) + + def merge_true_false_pairs(self): + #Common case len() == 2 + if len(self) == 2: + if (self[0][1] | self[0][1]) == TRUE_OR_FALSE and self[0][0] == self[1][0]: + return SingletonNodeSet(self[0][0], NORMAL) + else: + return self + #Either no true, or no false edges. + all_kinds = 0 + for node, kind in self: + all_kinds |= kind + if (all_kinds & TRUE_OR_FALSE) != TRUE_OR_FALSE: + return self + + #General, slow and hopefully rare case. + nodes = {} + for node, kind in self: + if node in nodes: + nodes[node] |= kind + else: + nodes[node] = kind + res = MultiNodeSet() + for node, kind in nodes.items(): + if (kind & TRUE_OR_FALSE)== TRUE_OR_FALSE: + kind = (kind | NORMAL) & (NORMAL | EXCEPTION) + for K in (NORMAL, TRUE, FALSE, EXCEPTION): + if kind & K: + res.insert_node(node, K) + return res + + def add_node(self, *t): + res = MultiNodeSet(self) + res.insert_node(*t) + return res + + def insert_node(self, *t): + if t not in self: + self.append(t) + + def __str__(self): + return "{" + ",".join(self) + "}" + + def invert(self): + res = MultiNodeSet() + for node, kind in self: + if kind & TRUE_OR_FALSE: + res.insert_node(node, kind ^ TRUE_OR_FALSE) + else: + res.insert_node(node, kind) + return res + +class BlockStack(list): + '''A stack of blocks (loops or tries).''' + + + def push_block(self): + self.append(EMPTY) + + def pop_block(self): + return self.pop() + + def add(self, node_set): + self[-1] = self[-1] + node_set + +class FlowScope(object): + + def __init__(self, depth, ast_scope): + self.entry = FlowNode(ast_scope) + self.graph = graph.FlowGraph(self.entry) + self.exceptional_exit = FlowNode(ast_scope) + self.graph.add_node(self.exceptional_exit) + self.graph.annotate_node(self.exceptional_exit, EXCEPTION_EXIT) + self.depth = depth + self.exception_stack = BlockStack() + self.exception_stack.push_block() + self.breaking_stack = BlockStack() + self.continuing_stack = BlockStack() + self.return_stack = BlockStack() + self.return_stack.push_block() + self.ast_scope = ast_scope + + def inner(self, ast_scope): + return FlowScope(self.depth+1, ast_scope) + + def pop_exceptions(self): + return self.exception_stack.pop_block() + + def split(self): + splitter.do_split(self.ast_scope, self.graph) + + def prune(self): + #Remove the always false condition edges. + pruner.do_pruning(self.ast_scope, self.graph) + + def unroll(self): + unroller.do_unrolling(self.ast_scope, self.graph) + + def write_graph(self, writer): + self.graph.delete_unreachable_nodes() + #Emit flow graph + self._write_flow_nodes(writer) + for pred, succ, kind in self.graph.edges(): + write_successors(writer, pred, succ, kind) + if kind != NORMAL and kind != EXHAUSTED: + write_successors(writer, pred, succ, NORMAL) + #Emit idoms + for node, idom in self.graph.idoms(): + write_idoms(writer, node, idom) + #Emit SSA variables + for var in self.graph.ssa_variables(): + write_ssa_var(writer, var) + for node, var in self.graph.ssa_definitions(): + write_ssa_defn(writer, var, node) + for node, var in self.graph.ssa_uses(): + write_ssa_use(writer, node, var) + for var, arg in self.graph.ssa_phis(): + write_ssa_phi(writer, var, arg) + + def _write_flow_nodes(self, writer): + blocks = self.graph.get_basic_blocks() + for flow, note in self.graph.nodes(): + if note is not None: + write_scope_node(writer, flow, self.ast_scope, note) + if flow in blocks: + head, index = blocks[flow] + write_flow_node(writer, flow, head, index) + + +#Codes for scope entry/exit nodes. +#These are hardcoded in QL. Do not change them. +FALL_THROUGH_EXIT = 0 +EXCEPTION_EXIT = 1 +RETURN_EXIT = 2 +ENTRY = -1 + +class FlowPass(Pass): + '''Extracts flow-control information. Currently generates a flow control + graph. There is a many-to-one relation between flow-nodes and ast nodes. + This enables precise flow control for 'try' statements. + Each flow node also has a number. If there are several flow nodes for + one ast node, they will all have different numbers. + For flow nodes representing a scope (class, function or module) then + the numbers are as follows: entry=-1, exceptional exit=1, + fallthrough exit=0, explicit return=2 + ''' + + name = "flow" + + def __init__(self, split, prune=True, unroll=False, logger:Optional[Logger] = None): + 'Initialize all the tree walkers' + self._walkers = { + list : self._walk_list, + bool : self.skip, + int : self.skip, + float : self.skip, + bytes : self.skip, + str : self.skip, + complex : self.skip, + type(None) : self.skip, + ast.Lambda : self._walk_scope_defn, + ast.ClassExpr : self._walk_class_expr, + ast.FunctionExpr : self._walk_scope_defn, + ast.For : self._walk_for_loop, + ast.Pass : self._walk_stmt_only, + ast.Global : self._walk_stmt_only, + ast.Break : self._walk_break, + ast.BinOp : self._walk_binop, + ast.Compare : self._walk_compare, + ast.Continue : self._walk_continue, + ast.Raise : self._walk_raise, + ast.Return : self._walk_return, + ast.Delete : self._walk_delete, + ast.While : self._walk_while, + ast.If : self._walk_if_stmt, + ast.IfExp : self._walk_if_expr, + ast.expr_context : self.skip, + ast.Slice : self._walk_slice, + ast.ExceptStmt : error, + ast.comprehension : error, + ast.ListComp: self._walk_generator, + ast.SetComp: self._walk_generator, + ast.DictComp: self._walk_generator, + ast.Dict : self._walk_dict, + ast.keyword : self._walk_expr_no_raise, + ast.KeyValuePair : self._walk_keyword, + ast.DictUnpacking : self._walk_yield, + ast.Starred : self._walk_yield, + ast.arguments : self._walk_arguments, + ast.Name : self._walk_name, + ast.PlaceHolder : self._walk_name, + ast.Num : self._walk_atom, + ast.Str : self._walk_atom, + ast.Try : self._walk_try, + ast.List : self._walk_sequence, + ast.Tuple : self._walk_sequence, + ast.UnaryOp : self._walk_expr_no_raise, + ast.UnaryOp : self._walk_unary_op, + ast.Assign : self._walk_assign, + ast.ImportExpr : self._walk_import_expr, + ast.ImportMember : self._walk_expr, + ast.Ellipsis : self._walk_atom, + ast.Print : self._walk_post_stmt, + ast.alias : self._walk_alias, + ast.GeneratorExp: self._walk_generator, + ast.Assert: self._walk_assert, + ast.AssignExpr: self._walk_assignexpr, + ast.AugAssign : self._walk_augassign, + ast.Attribute : self._walk_attribute, + ast.Subscript : self._walk_subscript, + ast.BoolOp : self._walk_bool_expr, + ast.TemplateWrite : self._walk_post_stmt, + ast.Filter : self._walk_expr_no_raise, + ast.Yield : self._walk_yield, + ast.YieldFrom : self._walk_yield, + ast.Expr : self._walk_skip_stmt, + ast.Import : self._walk_skip_stmt, + ast.ImportFrom : self._walk_post_stmt, + ast.With: self._walk_with, + ast.Match: self._walk_match, + ast.Case: self._walk_case, + ast.Repr : self._walk_expr_no_raise, + ast.Nonlocal : self._walk_stmt_only, + ast.Exec : self._walk_exec, + ast.AnnAssign : self._walk_ann_assign, + ast.TypeAlias : self._walk_stmt_only, + ast.TypeVar: self.skip, + ast.TypeVarTuple: self.skip, + ast.ParamSpec: self.skip, + ast.SpecialOperation: self._walk_expr_no_raise, + ast.Module : error, + ast.expr : error, + ast.stmt : error, + ast.cmpop : error, + ast.boolop : error, + ast.operator : error, + ast.expr_context : error, + ast.unaryop : error, + ast.AstBase : error, + } + for t in ast.__dict__.values(): + if isinstance(t, type) and ast.AstBase in t.__mro__: + #Setup walkers + expr_walker = self._walk_expr + if t.__mro__[1] is ast.expr: + if t not in self._walkers: + self._walkers[t] = expr_walker + elif t.__mro__[1] in (ast.cmpop, ast.boolop, ast.operator, + ast.expr_context, ast.unaryop): + self._walkers[t] = self.skip + self._walkers[ast.TemplateDottedNotation] = self._walkers[ast.Attribute] + + # Initialize walkers for patterns, + # These return both a tree and a list of nodes: + # - the tree represents the computation needed to evaluate whether the pattern matches, + # - the list of nodes represents the bindings resulting from a successful match. + self._pattern_walkers = { + ast.MatchAsPattern: self._walk_as_pattern, + ast.MatchOrPattern: self._walk_or_pattern, + ast.MatchLiteralPattern: self._walk_literal_pattern, + ast.MatchCapturePattern: self._walk_capture_pattern, + ast.MatchWildcardPattern: self._walk_wildcard_pattern, + ast.MatchValuePattern: self._walk_value_pattern, + ast.MatchSequencePattern: self._walk_sequence_pattern, + ast.MatchStarPattern: self._walk_star_pattern, + ast.MatchMappingPattern: self._walk_mapping_pattern, + ast.MatchDoubleStarPattern: self._walk_double_star_pattern, + ast.MatchKeyValuePattern: self._walk_key_value_pattern, + ast.MatchClassPattern: self._walk_class_pattern, + ast.MatchKeywordPattern: self._walk_keyword_pattern, + } + + self.scope = None + self.in_try = 0 + self.in_try_name = 0 + self.split = split + self.prune = prune + self.unroll = unroll + self.logger = logger or Logger() + self.filename = "<unknown>" + + #Entry point to the tree walker + def extract(self, ast, writer): + if ast is None: + return + self.writer = writer + self._walk_scope(ast) + + def set_filename(self, filename): + self.filename = filename + + #Walkers + + def _walk_arguments(self, node, predecessors): + for _, _, child_node in iter_fields(node): + predecessors = self._walk(child_node, predecessors) + return predecessors + + def _walk_generator(self, node, predecessors): + res = self._walk(node.iterable, predecessors) + res = self.add_successor(res, node) + raises = self._walk_scope(node.function) + if raises: + self._raise_exception(res) + return res + + def _walk_comprehension(self, node, predecessors): + return self._walk_generators(node, node.generators, predecessors) + + def _walk_generators(self, node, generators, predecessors): + if not generators: + if isinstance(node, ast.DictComp): + predecessors = self.add_successor(predecessors, node.value) + predecessors = self.add_successor(predecessors, node.key) + else: + predecessors = self.add_successor(predecessors, node.elt) + return predecessors + else: + gen = generators[0] + predecessors = self._walk(gen.iter, predecessors) + predecessors = self.add_successor(predecessors, gen) + loop_node = predecessors.unique_node() + predecessors = self._walk(gen.target, predecessors) + skip = EMPTY + for test in gen.ifs: + predecessors = self._walk(test, predecessors) + true_nodes, false_nodes = predecessors.branch() + predecessors += true_nodes + skip += false_nodes + predecessors = self._walk_generators(node, generators[1:], predecessors) + predecessors += skip + self.add_successor_node(predecessors, loop_node) + return predecessors + + def _walk_if_expr(self, node, predecessors): + test_successors = self._walk(node.test, predecessors) + true_successors, false_successors = test_successors.branch() + body_successors = self._walk(node.body, true_successors) + orelse_successors = self._walk(node.orelse, false_successors) + predecessors = body_successors + orelse_successors + predecessors = self.add_successor(predecessors, node) + return predecessors + + def _walk_dict(self, node, predecessors): + for item in node.items: + predecessors = self._walk(item, predecessors) + return self.add_successor(predecessors, node) + + def _walk_alias(self, node, predecessors): + predecessors = self._walk(node.value, predecessors) + return self._walk(node.asname , predecessors) + + def _walk_slice(self, node, predecessors): + predecessors = self._walk(node.start, predecessors) + predecessors = self._walk(node.stop, predecessors) + predecessors = self._walk(node.step, predecessors) + return self.add_successor(predecessors, node) + + def _walk_break(self, node, predecessors): + #A break statement counts as an exit to the enclosing loop statement + predecessors = self.add_successor(predecessors, node) + self.scope.breaking_stack.add(predecessors) + #Provide no predecessors to following statement + return EMPTY + + def _walk_continue(self, node, predecessors): + #A continue statement counts as an exit to the following orelse + predecessors = self.add_successor(predecessors, node) + self.scope.continuing_stack.add(predecessors) + #Provide no predecessors to following statement + return EMPTY + + def _raise_exception(self, predecessors): + predecessors = predecessors.exception() + self.scope.exception_stack.add(predecessors) + + def _walk_raise(self, node, predecessors): + for _, _, child_node in iter_fields(node): + predecessors = self._walk(child_node, predecessors) + predecessors = self.add_successor(predecessors, node) + self._raise_exception(predecessors) + return EMPTY + + def _walk_return(self, node, predecessors): + for _, _, child_node in iter_fields(node): + predecessors = self._walk(child_node, predecessors) + predecessors = self.add_successor(predecessors, node) + self.scope.return_stack.add(predecessors) + return EMPTY + + def _walk_delete(self, node, predecessors): + '''The CFG for the delete statement `del a, b` + looks like `a -> del -> b -> del` to ensure that + the implied use occurs before the deletion and that + `del x, x` has the correct semantics.''' + for item in node.targets: + predecessors = self._walk(item, predecessors) + predecessors = self.add_successor(predecessors, node) + return predecessors + + def _walk_stmt_only(self, node, predecessors): + return self.add_successor(predecessors, node) + + def _walk_scope(self, scope_node): + '''Returns: whether this scope raises an exception (or not)''' + prev_flow_scope = self.scope + if prev_flow_scope is None: + self.scope = FlowScope(0, scope_node) + else: + self.scope = prev_flow_scope.inner(scope_node) + predecessors = SingletonNodeSet(self.scope.entry, NORMAL) + for _, _, child_node in iter_fields(scope_node): + predecessors = self._walk(child_node, predecessors) + implicit_exit = self.add_successor(predecessors, scope_node).unique_node() + self.scope.graph.annotate_node(implicit_exit, FALL_THROUGH_EXIT) + if isinstance(scope_node, (ast.Module, ast.Class)): + self.scope.graph.use_all_defined_variables(implicit_exit) + #Mark all nodes that raise unhandled exceptions. + exceptions = self.scope.pop_exceptions() + for node, kind in exceptions: + if kind == NORMAL or kind == EXCEPTION: + self.scope.graph.annotate_node(node, EXCEPTION_EXIT) + else: + self.scope.graph.add_edge(node, self.scope.exceptional_exit) + self.scope.graph.annotate_edge(node, self.scope.exceptional_exit, kind) + self.scope.graph.annotate_node(self.scope.entry, ENTRY) + if not isinstance(scope_node, ast.Module): + returns = self.scope.return_stack.pop_block() + return_exit = self.add_successor(returns, scope_node).unique_node() + self.scope.graph.annotate_node(return_exit, RETURN_EXIT) + if self.split: + try: + self.scope.split() + # we found a regression in the split logic, where in some scenarios a split head would not be in the subgraph. + # Instead of aborting extracting the whole file, we can continue and just not split the graph. + # see semmlecode-python-tests/extractor-tests/splitter-regression/failure.py + except AssertionError: + self.logger.warning("Failed to split in " + self.filename + ", continuing anyway") + if self.prune: + self.scope.prune() + if self.unroll: + self.scope.unroll() + self.scope.write_graph(self.writer) + self.scope = prev_flow_scope + return bool(exceptions) + + def _walk_scope_defn(self, node, predecessors): + for field_name, _, child_node in iter_fields(node): + if field_name == 'inner_scope': + continue + predecessors = self._walk(child_node, predecessors) + predecessors = self.add_successor(predecessors, node) + sub_node = node.inner_scope + self._walk_scope(sub_node) + return predecessors + + def _walk_class_expr(self, node, predecessors): + predecessors = self._walk_scope_defn(node, predecessors) + self._raise_exception(predecessors) + return predecessors + + def _walk_post_stmt(self, node, predecessors): + for _, _, child_node in iter_fields(node): + predecessors = self._walk(child_node, predecessors) + return self.add_successor(predecessors, node) + + def _walk_skip_stmt(self, node, predecessors): + for _, _, child_node in iter_fields(node): + predecessors = self._walk(child_node, predecessors) + return predecessors + + def _walk_with(self, node, predecessors): + nodes = self._walk(node.context_expr, predecessors) + #The with statement has side effects which occur after the context manager has been computed + nodes = self.add_successor(nodes, node) + nodes = self._walk(node.optional_vars, nodes) + return self._walk(node.body, nodes) + + def _walk_match(self, node, predecessors): + pre_subject = self.add_successor(predecessors, node) + subject_successors = self._walk(node.subject, pre_subject) + final_successors = EMPTY + case_predecessors = subject_successors + for case in node.cases: + case_match_successors, case_nomatch_successors = self._walk_case(case, case_predecessors) + case_predecessors = case_nomatch_successors + final_successors += case_match_successors + return final_successors + case_nomatch_successors + + def _walk_case(self, node, predecessors): + """Returns: (match_successors, nomatch_successors)""" + + pre_test = self.add_successor(predecessors, node) + pattern_successors, pattern_captures = self._walk_pattern(node.pattern, pre_test) + + pattern_match_successors, pattern_nomatch_successors = pattern_successors.branch() + + for capture in pattern_captures: + pattern_match_successors = self._walk(capture, pattern_match_successors) + + if node.guard: + guard_successors = self._walk_guard(node.guard, pattern_match_successors) + guard_true_successors, guard_false_successors = guard_successors.branch() + pattern_match_successors = guard_true_successors + pattern_nomatch_successors += guard_false_successors + + body_successors = self._walk(node.body, pattern_match_successors) + return body_successors, pattern_nomatch_successors + + def _walk_pattern(self, node, predecessors): + """Walking a pattern results in a tree and a list of nodes: + - the tree represents the computation needed to evaluate whether the pattern matches, + - the list of nodes represents the bindings resulting from a successful match.""" + + return self._pattern_walkers[type(node)](node, predecessors) + + def _walk_patterns_in_sequence(self, patterns, predecessors): + bindings = [] + for pattern in patterns: + predecessors, new_bindings = self._walk_pattern(pattern, predecessors) + bindings += new_bindings + return predecessors, bindings + + def _walk_as_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + pattern_successors, bindings = self._walk_pattern(node.pattern, predecessors) + return pattern_successors, bindings + [node.alias] + + def _walk_or_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + # We cannot use `self._walk_patterns_in_sequence` as we only want + # to capture the bindings of the first pattern in the sequence + # (the bindings of the subsequent patterns are simply repetitions) + bindings = [] + first = True + for pattern in node.patterns: + predecessors, new_bindings = self._walk_pattern(pattern, predecessors) + if first: + bindings += new_bindings + first = False + return predecessors, bindings + + def _walk_literal_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + predecessors = self._walk(node.literal, predecessors) + return predecessors, [] + + def _walk_capture_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + return predecessors, [node.variable] + + def _walk_wildcard_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + return predecessors, [] + + def _walk_value_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + predecessors = self._walk(node.value, predecessors) + return predecessors, [] + + def _walk_sequence_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + return self._walk_patterns_in_sequence(node.patterns, predecessors) + + def _walk_star_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + return self._walk_pattern(node.target, predecessors) + + def _walk_mapping_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + return self._walk_patterns_in_sequence(node.mappings, predecessors) + + def _walk_double_star_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + return self._walk_pattern(node.target, predecessors) + + def _walk_key_value_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + key_successors, bindings = self._walk_pattern(node.key, predecessors) + # The key should have no bindings + assert not bindings, "Unexpected bindings in key pattern: %s" % bindings + return self._walk_pattern(node.value, key_successors) + + def _walk_class_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + class_name_successors = self._walk(node.class_name, predecessors) + bindings = EMPTY + positional_successors = class_name_successors + if node.positional: + for positional in node.positional: + positional_successors, new_bindings = self._walk_pattern(positional, positional_successors) + bindings += new_bindings + keyword_successors = positional_successors + if node.keyword: + for keyword in node.keyword: + keyword_successors, new_bindings = self._walk_pattern(keyword, keyword_successors) + bindings += new_bindings + return keyword_successors, bindings + + def _walk_keyword_pattern(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + attribute_successors = self._walk(node.attribute, predecessors) + return self._walk_pattern(node.value, attribute_successors) + + def _walk_guard(self, node, predecessors): + pre_test = self.add_successor(predecessors, node) + return self._walk(node.test, pre_test) + + def _walk_exec(self, node, predecessors): + for _, _, child_node in iter_fields(node): + predecessors = self._walk(child_node, predecessors) + exit = self.add_successor(predecessors, node) + self._raise_exception(exit) + if isinstance(node.body, ast.Str) and node.body.s.startswith("raise "): + #Due to syntactic differences between Python 2 and Python 3 + #`exec("raise ...")` can sometimes be used instead of `raise ...` + return EMPTY + return exit + + def _walk_assert(self, node, predecessors): + predecessors = self._walk(node.test, predecessors) + if is_false_constant(node.test): + msg = self._walk(node.msg, predecessors) + assert_ = self.add_successor(msg, node) + self._raise_exception(assert_) + return EMPTY + if is_true_constant(node.test): + return self.add_successor(predecessors, node) + true_succ, false_succ = predecessors.branch() + assert_ok = self.add_successor(true_succ, node) + msg = self._walk(node.msg, false_succ) + assert_fail = self.add_successor(msg, node) + self._raise_exception(assert_fail) + return assert_ok + + def _walk_assign(self, node, predecessors): + value = self._walk(node.value, predecessors) + rhs_count = self._count_items(node.value) + if rhs_count > 0: + for target in node.targets: + if rhs_count != self._count_items(target): + break + else: + #All targets and rhs are sequences of the same length + for target in node.targets: + value = self._walk_sequence(target, value, True) + return value + #All other cases + for target in node.targets: + value = self._walk(target, value) + return value + + def _count_items(self, node): + if isinstance(node, (ast.Tuple, ast.List)): + return len(node.elts) + return 0 + + def _walk_expr_no_raise(self, node, predecessors): + for _, _, child_node in iter_fields(node): + predecessors = self._walk(child_node, predecessors) + res = self.add_successor(predecessors, node) + return res + + def _walk_arg(self, node, predecessors): + return self._walk(node.arg, predecessors) + + def _walk_keyword(self, node, predecessors): + predecessors = self._walk(node.key, predecessors) + predecessors = self._walk(node.value, predecessors) + return self.add_successor(predecessors, node) + + def _walk_yield(self, node, predecessors): + predecessors = self._walk(node.value, predecessors) + res = self.add_successor(predecessors, node) + if self.in_try: + self._raise_exception(res) + return res + + def _walk_sequence(self, node, predecessors, safe=False): + #In the case of a store the list/tuple is "evaluated" first, + #i.e. it is exploded before the parts are stored. + #This operation may raise an exception, unless the + #corresponding tuple of exactly the same size exists on the rhs + #of the assignment. + if isinstance(node.ctx, (ast.Store, ast.Param)): + predecessors = self.add_successor(predecessors, node) + if self.in_try and not safe: + self._raise_exception(predecessors) + for child_node in node.elts: + predecessors = self._walk(child_node, predecessors) + else: + for child_node in node.elts: + predecessors = self._walk(child_node, predecessors) + predecessors = self.add_successor(predecessors, node) + return predecessors + + def _walk_unary_op(self, node, predecessors): + predecessors = self._walk(node.operand, predecessors) + if not isinstance(node.op, ast.Not): + return self.add_successor(predecessors, node) + if len(predecessors) <= 1: + successors = self.add_successor(predecessors, node) + else: + #Avoid merging true/false branches. + successors = EMPTY + flownodes = {} + for pred, kind in predecessors: + if kind not in flownodes: + flownodes[kind] = FlowNode(node) + successors = successors.add_node(flownodes[kind], kind) + self.scope.graph.add_node(flownodes[kind]) + self.scope.graph.add_edge(pred, flownodes[kind]) + self.scope.graph.annotate_edge(pred, flownodes[kind], kind) + return successors.invert() + + def _walk_import_expr(self, node, predecessors): + for _, _, child_node in iter_fields(node): + predecessors = self._walk(child_node, predecessors) + res = self.add_successor(predecessors, node) + if node.name not in GUARANTEED_MODULES: + #Can raise an exception + self._raise_exception(res) + return res + + def _walk_expr(self, node, predecessors): + for _, _, child_node in iter_fields(node): + predecessors = self._walk(child_node, predecessors) + res = self.add_successor(predecessors, node) + #Many expressions can raise an exception + self._raise_exception(res) + return res + + def _walk_bool_expr(self, node, predecessors): + other = self.add_successor(predecessors, node) + short_circuit = EMPTY + for operand in node.values: + predecessors = self._walk(operand, other) + true_pred, false_pred = predecessors.branch() + if isinstance(node.op, ast.And): + short_circuit += false_pred + other = true_pred + else: + short_circuit += true_pred + other = false_pred + return other + short_circuit + + def _walk_name(self, node, predecessors, ctx_type = None): + # Too many exception edges make analysis slower and adds almost no accuracy + # Assume that Name may only raise an exception if global in scope and + # not a store + res = self.add_successor(predecessors, node) + if ctx_type is None: + ctx_type = type(node.ctx) + assert ctx_type not in (ast.AugAssign, ast.AugLoad) + #Only generate SSA variables for variables local to scope + if node.variable.scope == self.scope.ast_scope: + if ctx_type in (ast.Store, ast.Param, ast.AugStore): + for flow_node, kind in res: + self.scope.graph.add_definition(flow_node, node.variable) + elif ctx_type is ast.Del: + for flow_node, kind in res: + self.scope.graph.add_deletion(flow_node, node.variable) + elif ctx_type in (ast.Load, ast.AugLoad): + for flow_node, kind in res: + self.scope.graph.add_use(flow_node, node.variable) + if self.in_try and ctx_type is not ast.Store: + if self.scope.depth == 0 or node.variable.is_global(): + # Use the common subset of Py2/3 names when determining which Name node can never raise. + # Ensures that code is not marked as unreachable by the Python 2 extractor, + # when it could be reached in Python 3 (and vice verse). + if node.variable.id not in BUILTIN_NAME_ALWAYS_EXISTS: + self._raise_exception(res) + elif self.in_try_name: + #If code explicitly catches NameError we need to raise from names. + self._raise_exception(res) + return res + + def _walk_subscript(self, node, predecessors, ctx_type = None): + if ctx_type is not ast.AugStore: + predecessors = self._walk(node.value, predecessors) + predecessors = self._walk(node.index, predecessors) + res = self.add_successor(predecessors, node) + self._raise_exception(res) + return res + + def _walk_attribute(self, node, predecessors, ctx_type = None): + if ctx_type is not ast.AugStore: + predecessors = self._walk(node.value, predecessors) + res = self.add_successor(predecessors, node) + if self.in_try: + self._raise_exception(res) + return res + + def _walk_atom(self, node, predecessors): + #Do not raise exception. Should have queries for undefined values. + return self.add_successor(predecessors, node) + + def _walk_if_stmt(self, node, predecessors): + test_successors = self._walk(node.test, predecessors) + true_successors, false_successors = test_successors.branch() + body_successors = self._walk(node.body, true_successors) + orelse_successors = self._walk(node.orelse, false_successors) + return body_successors + orelse_successors + + def _walk_compare(self, node, predecessors): + #TO DO -- Handle the (rare) case of multiple comparators; + #a < b < c is equivalent to a < b and b < c (without reevaluating b) + predecessors = self._walk(node.left, predecessors) + for comp in node.comparators: + predecessors = self._walk(comp, predecessors) + res = self.add_successor(predecessors, node) + #All comparisons except 'is' can (theoretically) raise an exception + #However == and != should never do so. + if self.in_try and node.ops[0].__class__ not in NON_RAISING_COMPARISON_OPS: + self._raise_exception(res) + return res + + def _walk_binop(self, node, predecessors, ctx_type = None): + left = node.left + if ctx_type is not None: + predecessors = self._walkers[type(left)](left, predecessors, ctx_type) + else: + predecessors = self._walk(left, predecessors) + predecessors = self._walk(node.right, predecessors) + res = self.add_successor(predecessors, node) + if self.in_try: + self._raise_exception(res) + return res + + def _walk_assignexpr(self, node, predecessors): + flow = self._walk(node.value, predecessors) + flow = self._walk_name(node.target, flow, ast.Store) + flow = self.add_successor(flow, node) + return flow + + def _walk_augassign(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + predecessors = self._walk_binop(node.operation, predecessors, ast.AugLoad) + target = node.operation.left + return self._walkers[type(target)](target, predecessors, ast.AugStore) + + def _walk_for_loop(self, node, predecessors): + loop_entry = self._walk(node.iter, predecessors) + pre_target = self.add_successor(loop_entry, node) + #Getting the iterator from the iterable may raise + if self.in_try: + self._raise_exception(pre_target) + body_entry = self._walk(node.target, pre_target) + return self._walk_loop_body(node, pre_target, body_entry, SingletonNodeSet(pre_target.node, EXHAUSTED)) + + def _walk_while(self, node, predecessors): + #return self._walk_loop(None, node.test, node, predecessors) + pre_test = self.add_successor(predecessors, node) + test_out = self._walk(node.test, pre_test) + body_entry, loop_exit = test_out.branch() + return self._walk_loop_body(node, pre_test, body_entry, loop_exit, is_true_constant(node.test)) + + def _walk_loop_body(self, node, top, body_entry, loop_exit, infinite = False): + self.scope.breaking_stack.push_block() + self.scope.continuing_stack.push_block() + body_exit = self._walk(node.body, body_entry) + breaks = self.scope.breaking_stack.pop_block() + continues = self.scope.continuing_stack.pop_block() + top_node = top.unique_node() + self.add_successor_node(continues, top_node) + self.add_successor_node(body_exit, top_node) + if infinite: + return breaks + if node.orelse: + loop_exit = self._walk(node.orelse, loop_exit) + return loop_exit + breaks + + def _walk_try_finally(self, node, predecessors): + assert node.finalbody + + self.scope.exception_stack.push_block() + self.scope.return_stack.push_block() + self.scope.continuing_stack.push_block() + self.scope.breaking_stack.push_block() + self.in_try += 1 + body_exit = self._walk_try_except(node, predecessors) + self.in_try -= 1 + continuing = self.scope.continuing_stack.pop_block() + returning = self.scope.return_stack.pop_block() + breaking = self.scope.breaking_stack.pop_block() + exceptions = self.scope.pop_exceptions() + if exceptions: + self.scope.exception_stack.add(self._walk(node.finalbody, exceptions)) + if continuing: + assert self.scope.continuing_stack, continuing + self.scope.continuing_stack.add(self._walk(node.finalbody, continuing)) + if breaking: + self.scope.breaking_stack.add(self._walk(node.finalbody, breaking)) + if returning: + self.scope.return_stack.add(self._walk(node.finalbody, returning)) + finally_exit = self._walk(node.finalbody, body_exit) + return finally_exit + + def _walk_try(self, node, predecessors): + predecessors = self.add_successor(predecessors, node) + if node.finalbody: + return self._walk_try_finally(node, predecessors) + else: + return self._walk_try_except(node, predecessors) + + def _walk_try_except(self, node, predecessors): + if not node.handlers: + self.in_try += 1 + body_exit = self._walk(node.body, predecessors) + res = self._walk(node.orelse, body_exit) + self.in_try -= 1 + return res + # check if there is a handler for exception groups (PEP 654) + handles_grouped = [h for h in node.handlers if isinstance(h, ast.ExceptGroupStmt)] + if handles_grouped: + return self._walk_try_except_groups(node, predecessors) + else: + return self._walk_try_except_no_groups(node, predecessors) + + def _walk_try_body(self, node, predecessors): + self.in_try += 1 + in_try_name = 0 + for handler in node.handlers: + if hasattr(handler.type, "variable") and handler.type.variable.id == "NameError": + in_try_name = 1 + self.in_try_name += in_try_name + self.scope.exception_stack.push_block() + body_exit = self._walk(node.body, predecessors) + self.in_try -= 1 + self.in_try_name -= in_try_name + exceptions = self.scope.pop_exceptions() + return body_exit, exceptions + + def _walk_try_except_groups(self, node, predecessors): + body_exit, exceptions = self._walk_try_body(node, predecessors) + + for handler in node.handlers: + # the handler test might fail, meaning the handler does not match the + # exception group. In this case, the exception is propagated, so the + # test node gets its own variable. + handler_test = self.add_successor(exceptions, handler) + handler_test = self._walk(handler.type, handler_test) + + # Assuming the handler does match, the handler body is executed. + handled = handler_test + if handler.name is not None: + handled = self._walk(handler.name, handled) + + handled = self._walk(handler.body, handled) + + # The next handler only sees unhandled exceptions from this handler + # _not_ exceptions raised from the body of the handler. + # If this handler did not match, there is an exceptional transition from the test + # otherwise, there is one from the body exit. + exceptions = handler_test.exception() + handled.exception() + + body_exit = self._walk(node.orelse, body_exit) + + # When we run out of handlers, there might still be unhandled exceptions. + # We add them to the current stack, so they can be picked up by the finally block + # or the scope exit. + self.scope.exception_stack.add(exceptions) + + # normal exit includes the last handler in case it handled all remaining exceptions + return handled + body_exit + + def _walk_try_except_no_groups(self, node, predecessors): + body_exit, exceptions = self._walk_try_body(node, predecessors) + + handler_exit = EMPTY + catch_all = False + for handler in node.handlers: + handled = self.add_successor(exceptions, handler).normalise() + if handler.type is None: + catch_all = True + else: + handled = self._walk(handler.type, handled) + if handler.name is not None: + handled = self._walk(handler.name, handled) + handler_exit += self._walk(handler.body, handled) + if not catch_all: + self.scope.exception_stack.add(exceptions) + body_exit = self._walk(node.orelse, body_exit) + return handler_exit + body_exit + + def _walk_ann_assign(self, node, predecessors): + flow = self._walk(node.value, predecessors) + flow = self._walk(node.target, flow) + # PEP 526 specifies that only annotations outside functions will be evaluated + if not isinstance(self.scope.ast_scope, ast.Function): + flow = self._walk(node.annotation, flow) + flow = self.add_successor(flow, node) + return flow + + def _walk(self, node, predecessors): + res = self._walkers[type(node)](node, predecessors) + return res + + def _walk_list(self, node, predecessors): + for child in node: + predecessors = self._walkers[type(child)](child, predecessors) + return predecessors + + def skip(self, _, predecessors): + return predecessors + + def add_successor_node(self, predecessors, flow_node): + for n, kind in predecessors: + self.scope.graph.add_edge(n, flow_node) + self.scope.graph.annotate_edge(n, flow_node, kind) + + def add_successor(self, predecessors, node, kind=NORMAL): + '''Add successor relations between all nodes + in the iterable predecessors and node.''' + assert isinstance(node, ast.AstBase) + flow_node = FlowNode(node) + predecessors = predecessors.merge_true_false_pairs() + #Ensure node is in graph, even if unreachable, so it can be annotated. + self.scope.graph.add_node(flow_node) + self.add_successor_node(predecessors, flow_node) + return SingletonNodeSet(flow_node, kind) + +NON_RAISING_COMPARISON_OPS = (ast.Is, ast.IsNot, ast.Eq, ast.NotEq) + + +SUCCESSOR_RELATIONS = { + TRUE: u'py_true_successors', + FALSE: u'py_false_successors', + NORMAL: u'py_successors', + EXCEPTION: u'py_exception_successors', + EXHAUSTED: u'py_successors', +} + +def write_successors(writer, from_node, to_node, kind): + writer.write_tuple(SUCCESSOR_RELATIONS[kind], 'nn', from_node, to_node) + +def write_flow_node(writer, flow, bb, index): + writer.write_tuple(u'py_flow_bb_node', 'nnnd', flow, flow.node, bb, index) + +def write_idoms(writer, node, idom): + writer.write_tuple(u'py_idoms', 'nn', node, idom) + +def write_ssa_var(writer, var): + writer.write_tuple(u'py_ssa_var', 'nn', var, var.variable) + +def write_ssa_defn(writer, var, node): + writer.write_tuple(u'py_ssa_defn', 'nn', var, node) + +def write_ssa_use(writer, node, var): + writer.write_tuple(u'py_ssa_use', 'nn', node, var) + +def write_ssa_phi(writer, var, arg): + writer.write_tuple(u'py_ssa_phi', 'nn', var, arg) + +def write_scope_node(writer, node, scope, index): + writer.write_tuple(u'py_scope_flow', 'nnd', node, scope, index) + +def is_true_constant(condition): + 'Determine if (AST node) condition is both constant and evaluates to True' + if isinstance(condition, ast.Num): + return condition.n + elif isinstance(condition, ast.Name): + return condition.variable.id == "True" + elif isinstance(condition, ast.Str): + return condition.s + return False + +def is_false_constant(condition): + 'Determine if (AST node) condition is both constant and evaluates to False' + if isinstance(condition, ast.Num): + return not condition.n + elif isinstance(condition, ast.Name): + return condition.variable.id == "False" or condition.variable.id == "None" + elif isinstance(condition, ast.Str): + return not condition.s + return False + + +TEMPLATE = '''"%s" [ +label = "%s" +color = "%s" +shape = "%s" +]; +''' + +class GraphVizIdPool(object): + '''This class provides the same interface as IDPool. + It outputs nodes in graphviz format''' + + def __init__(self, out, options): + self.out = out + self.pool = {} + self.next_id = 1000 + self.ranks = {} + self.node_colours = {} + self.options = options + + def get(self, node, name=None): + 'Return an id (in this pool) for node' + assert node is not None + #Use id() except for strings. + col = "black" + if isinstance(node, str): + node_id = node + else: + node_id = id(node) + if node_id in self.pool: + return self.pool[node_id] + next_id = 'ID_%d' % self.next_id + show = isinstance(node, FlowNode) or self.options.ast + if isinstance(node, FlowNode) and not self.options.ast: + col = self.node_colours.get(node, "black") + node = node.node + if name is None: + if hasattr(node, "is_async") and node.is_async: + name = "Async " + type(node).__name__ + else: + name = type(node).__name__ + if isinstance(node, FlowNode): + col = self.node_colours.get(node, "black") + name = type(node.node).__name__[:6] + if node.node not in self.ranks: + self.ranks[node.node] = set() + self.ranks[node.node].add(node) + else: + if name in ('Name', 'PlaceHolder'): + ctx_name = node.ctx.__class__.__name__ + name += ' (%s) id=%s' % (ctx_name, node.variable.id) + elif hasattr(node, "op"): + name = type(node.op).__name__ + else: + for field_name, _, child_node in iter_fields(node): + if field_name == "is_async": + continue + if type(child_node) in (str, int, float, bool): + txt = str(child_node) + if len(txt) > 16: + txt = txt[:13] + '...' + txt = txt.replace('\n', '\\n').replace('"', '\\"') + name += ' ' + field_name + '=' + txt + if isinstance(node, ast.stmt): + shape = 'rectangle' + elif type(node) in (ast.Function, ast.Module, ast.Class): + shape = 'octagon' + elif isinstance(node, FlowNode): + shape = "diamond" + else: + shape = 'oval' + if show: + util.fprintf(self.out, TEMPLATE, next_id, name, col, shape) + self.pool[node_id] = next_id + self.next_id += 1 + return next_id + + def print_ranks(self): + for node, flows in self.ranks.items(): + if not self.options.ast: + continue + node_id = self.get(node) + ids = [ node_id ] + for flow in flows: + flow_id = self.get(flow) + ids.append(flow_id) + util.fprintf(self.out, "{rank=same; %s;}\n", ' '.join(ids)) + +class GraphVizTrapWriter(object): + + def __init__(self, options): + if options.out is None: + self.out = sys.stdout + else: + self.out = open(options.out, 'w') + self.pool = GraphVizIdPool(self.out, options) + util.fprintf(self.out, HEADER) + + def close(self): + self.pool.print_ranks() + util.fprintf(self.out, FOOTER) + if self.out != sys.stdout: + self.out.close() + self.out = None + + def __del__(self): + if self.out and self.out != sys.stdout: + self.out.close() + +HEADER = '''digraph g { +graph [ +rankdir = "TB" +]; +''' + +FOOTER = '''} +''' + +FORMAT = '%s -> %s [color="%s"];\n' + +EDGE_COLOURS = {TRUE: "green", FALSE: "blue", NORMAL: "black", EXCEPTION: "red", EXHAUSTED: "brown" } +NODE_COLOURS = {EXCEPTION_EXIT: "red", ENTRY: "orange", FALL_THROUGH_EXIT: "grey", RETURN_EXIT: "blue" } + +EXTENDED_HELP = """Edge types: + +- Green, solid :: True successor of branching node. +- Blue, solid :: False successor of branching node. +- Brown, solid:: Exhausted successor of for node. +- Brown, dashed :: Target is corresponding AST node. + +- option -s (--ssa) :: + - Green, dashed :: Source is a place where the variable is used, target is the place + where the variable is defined. Edge marked with variable + name. + - Blue, dashed :: Target is phi node, source is where the variable comes from. + Edge marked with variable name. +- option -b (--basic_blocks) :: + - Purple, dashed :: Points from a node to the first node in its basic + block. Labelled with index of node within its basic block. +- option -i (--idoms) :: + - Yellow, solid :: Shows the immediate dominator (source) of a node (target). + +Node shapes: + +- Rectangle :: Statement. +- Octagon :: Function / module / class. +- Diamond :: Flow node. +- Oval :: Everything else. + +Node colours: +- Red :: Exception exit. +- Orange :: Entry. +- Grey :: Fall-through exit. +- Blue :: Return exit. +- Black :: Everything else. +""" + +def print_extended_help(option, opt_str, value, parser): + print(EXTENDED_HELP) + sys.exit(0) + +def args_parser(): + 'Parse command_line, returning options, arguments' + from optparse import OptionParser + usage = "usage: %prog [options] python-file" + parser = OptionParser(usage=usage) + parser.add_option("-i", "--idoms", help="Show immediate dominators", action="store_true") + parser.add_option("-s", "--ssa", help="Show SSA phis and uses.", action="store_true") + parser.add_option("-b", "--basic_blocks", help="Show basic-blocks.", action="store_true") + parser.add_option("-o", "--out", dest="out", + help="Output directory for writing gv file") + parser.add_option("--dont-split-graph", dest="split", default=True, action="store_false", + help = """Do not perform splitting on the flow graph.""") + parser.add_option("--dont-prune-graph", dest="prune", default=True, action="store_false", + help = """Do not perform pruning on the flow graph.""") + parser.add_option("--dont-unroll-graph", dest="unroll", action="store_false", + help = """DEPRECATED. Do not perform unrolling on the flow graph.""") + parser.add_option("--unroll-graph", dest="unroll", default=False, action="store_true", + help = """Perform unrolling on the flow graph. Default false.""") + parser.add_option("--no-ast", dest="ast", default=True, action="store_false", + help = """Do not output AST nodes.""") + parser.add_option("--extended-help", help="Print extended help.", action="callback", + callback=print_extended_help) + parser.add_option("--tsg", dest="tsg", default=False, action="store_true", + help="Use tgs based parser.") + return parser + +def main(): + 'Write out flow graph (as computed by FlowPass) in graphviz format' + import re + definitions = {} + + _UNDEFINED_NAME = ast.Name("Not defined", ast.Load()) + _UNDEFINED_NAME.variable = ast.Variable("Not defined", None) + UNDEFINED_NODE = FlowNode(_UNDEFINED_NAME) + + global write_successors, write_flow_node, write_idoms, write_special_successors + global write_ssa_var, write_ssa_use, write_ssa_phi, write_ssa_defn, write_scope_node + + parser = args_parser() + options, args = parser.parse_args(sys.argv[1:]) + + if len(args) != 1: + sys.stderr.write("Error: wrong number of arguments.\n") + parser.print_help() + return + + inputfile = args[0] + + if not os.path.isfile(inputfile): + sys.stderr.write("Error: input file does not exist.\n") + return + + writer = GraphVizTrapWriter(options) + def write(*args): + util.fprintf(writer.out, *args) + + successors = set() + def write_successors(writer, from_node, to_node, kind): + from_id = writer.pool.get(from_node) + to_id = writer.pool.get(to_node) + if (from_node, to_node) not in successors: + write(FORMAT, from_id, to_id, EDGE_COLOURS[kind]) + successors.add((from_node, to_node)) + + def write_flow_node(out, flow, bb, index): + flow_id = writer.pool.get(flow) + if options.ast: + node_id = writer.pool.get(flow.node) + write('%s->%s [ style = "dashed" color = "brown" ];\n', flow_id, node_id) + if options.basic_blocks: + bb_id = writer.pool.get(bb) + write('%s->%s [ style = "dashed" color = "purple" label = "%d" ];\n', + flow_id, bb_id, index) + + if options.idoms: + def write_idoms(out, node, idom): + node_id = writer.pool.get(node) + idom_id = writer.pool.get(idom) + write('%s->%s [ color = "yellow" ];\n', idom_id, node_id) + else: + def write_idoms(out, node, idom): + pass + + def write_scope_node(writer, node, scope, index): + writer.pool.node_colours[node] = NODE_COLOURS[index] + + def write_ssa_var(out, ssa_var): + pass + + def write_ssa_defn(out, ssa_var, node): + definitions[ssa_var] = node + + def get_ssa_node(var): + '''If SSA_Var node is undefined, then FlowGraph inserts a None - + Change to UNDEFINED''' + if var in definitions: + return definitions[var] + else: + return UNDEFINED_NODE + + if options.ssa: + def write_ssa_use(out, node, var): + var_id = writer.pool.get(get_ssa_node(var)) + node_id = writer.pool.get(node) + write('%s->%s [ color = "green", style="dashed", label="use(%s)" ]\n' + % (node_id, var_id, var.variable.id)) + + def write_ssa_phi(out, phi, arg): + phi_id = writer.pool.get(get_ssa_node(phi)) + arg_id = writer.pool.get(get_ssa_node(arg)) + write('%s->%s [ color = "blue", style="dashed", label="phi(%s)" ]\n' + % (arg_id, phi_id, arg.variable.id)) + else: + def write_ssa_use(out, node, var): + pass + + def write_ssa_phi(out, phi, arg): + pass + if options.tsg: + import semmle.python.parser.tsg_parser + parsed_ast = semmle.python.parser.tsg_parser.parse(inputfile, FakeLogger()) + else: + module = modules.PythonSourceModule("__main__", inputfile, FakeLogger()) + parsed_ast = module.ast + FlowPass(options.split, options.prune, options.unroll).extract(parsed_ast, writer) + writer.close() + +class FakeLogger(object): + + def debug(self, fmt, *args): + print(fmt % args) + + def traceback(self): + print(traceback.format_exc()) + + info = warning = error = trace = debug + +if __name__ == '__main__': + main() diff --git a/python/extractor/semmle/python/passes/labeller.py b/python/extractor/semmle/python/passes/labeller.py new file mode 100644 index 00000000000..d093aee6547 --- /dev/null +++ b/python/extractor/semmle/python/passes/labeller.py @@ -0,0 +1,117 @@ +# Label an AST with symbol-tables. +# Follow ordering specified in Python/symtable.c + +from semmle.python import ast + +from semmle.python.passes.ast_pass import iter_fields, ASTVisitor + +__all__ = [ 'Labeller' ] + +class SymbolTable(ASTVisitor): + '''A symbol table for a Python scope. + Records uses and definitions, `global` and `nonlocal` statements for names in that scope''' + + def __init__(self, scope): + self.definitions = set() + self.uses = set() + self.declared_as_global = set() + self.declared_as_nonlocal = set() + for _, _, child in iter_fields(scope): + self.visit(child) + + def visit_Class(self, node): + pass + + def visit_Function(self, node): + pass + + def visit_Name(self, node): + name = node.variable.id + if isinstance(node.ctx, ast.Load): + self.uses.add(name) + elif isinstance(node.ctx, (ast.Store, ast.Param, ast.Del)): + self.definitions.add(name) + else: + raise Exception("Unknown context for name: %s" % node.ctx) + + def visit_Global(self, node): + self.declared_as_global.update(node.names) + + def visit_Nonlocal(self, node): + self.declared_as_nonlocal.update(node.names) + + def is_bound(self, name): + declared_free = name in self.declared_as_global or name in self.declared_as_nonlocal + return name in self.definitions and not declared_free + +class _LabellingContext(ASTVisitor): + + def __init__(self, scope, module = None, outer = None): + '''Create a labelling context for `scope`. `module` is the module containing the scope, + and outer is the enclosing context, if any''' + self.symbols = SymbolTable(scope) + self.scope = scope + self.outer = outer + if module is None: + module = scope + self.module = module + + def label(self): + 'Label the node with this context' + self.visit(self.module) + + def visit_Function(self, node): + sub_context = _LabellingContext(node, self.module, self) + for _, _, child in iter_fields(node): + sub_context.visit(child) + + visit_Class = visit_Function + + def visit_Variable(self, node): + if node.scope is not None: + return + name = node.id + if name in self.symbols.declared_as_global: + node.scope = self.module + elif self.symbols.is_bound(name): + node.scope = self.scope + else: # Free variable, either implicitly or explicitly via nonlocal. + outer = self.outer + while outer is not None: + if isinstance(outer.scope, ast.Class): + # in the code example below, the use of `baz` inside `func` is NOT a reference to the + # function defined on the class, but is a reference to a global variable. + # + # The use of `baz` on class scope -- `bazzed = baz("class-scope")` + # -- is a reference to the function defined on the + # + # ```py + # class Foo + # def baz(arg): + # return arg + "-baz" + # def func(self): + # return baz("global-scope") + # bazzed = baz("class-scope") + # ``` + # + # So we skip over class scopes. + # + # See ql/python/ql/test/library-tests/variables/scopes/in_class.py + # added in https://github.com/github/codeql/pull/10171 + pass + elif outer.symbols.is_bound(name): + node.scope = outer.scope + break + outer = outer.outer + else: + node.scope = self.module + +class Labeller(object): + '''Labels the ast using symbols generated by the symtable module''' + + def apply(self, module): + 'Apply this Labeller to the module' + #Ensure that AST root nodes have a globally consistent identifier + if module.ast is None: + return + _LabellingContext(module.ast).label() diff --git a/python/extractor/semmle/python/passes/lexical.py b/python/extractor/semmle/python/passes/lexical.py new file mode 100644 index 00000000000..31c52c2a959 --- /dev/null +++ b/python/extractor/semmle/python/passes/lexical.py @@ -0,0 +1,153 @@ +import ast +import sys +import math + +from semmle.python.passes.ast_pass import iter_fields +from semmle.python import ast +from semmle.python.passes._pass import Pass + +__all__ = [ 'LexicalPass' ] + +STMT_OR_EXPR = ast.expr, ast.stmt +LOCATABLE = STMT_OR_EXPR + (ast.pattern, ast.comprehension, ast.StringPart, ast.keyword, ast.KeyValuePair, ast.DictUnpacking, ast.type_parameter) +CLASS_OR_FUNCTION = ast.Class, ast.Function +SCOPES = ast.Class, ast.Function, ast.Module + +class LexicalPass(Pass): + + def extract(self, ast, comments, writer): + 'The entry point' + LexicalModule(ast, comments, writer).extract() + + +class LexicalModule(object): + 'Object for extracting lexical information for the given module.' + + def __init__(self, ast, comments, writer): + assert ast is not None and comments is not None + self.ast = ast + self.comments = comments + self.writer = writer + self.module_id = writer.get_node_id(ast) + + def extract(self): + loc_id = self.get_location(0, 0, 0, 0) + self.writer.write_tuple(u'py_scope_location', 'rr', loc_id, self.module_id) + self.emit_line_info() + self.emit_locations(self.ast) + + def emit_line_info(self): + for text, start, end in self.comments: + #Generate a unique string for comment based on location + comment_id = str(start + end) + loc_id = self.get_location(start[0], start[1]+1, + end[0], end[1]) + try: + self.writer.write_tuple(u'py_comments', 'nsr', + comment_id, text, loc_id) + except UnicodeDecodeError: + # Handle non-ascii comments. Should only happen in Py2 + assert sys.hexversion < 0x03000000 + text = text.decode("latin8") + self.writer.write_tuple(u'py_comments', 'nsr', + comment_id, text, loc_id) + comment_bits = get_comment_bits(self.comments) + self.emit_line_counts(self.ast, set(), comment_bits) + + def emit_line_counts(self, node, code_lines, comment_bits): + if isinstance(node, SCOPES) and node.body: + doc_line_count = 0 + stmt0 = node.body[0] + if type(stmt0) == ast.Expr: + docstring = stmt0.value + if isinstance(docstring, ast.Str): + doc_line_count = docstring._end[0] - docstring.lineno + 1 + inner_code_lines = set() + inner_code_lines.add(node.lineno) + for _, _, child_node in iter_fields(node): + self.emit_line_counts(child_node, inner_code_lines, comment_bits) + assert inner_code_lines + startline = min(inner_code_lines) + endline = max(inner_code_lines) + if isinstance(node, ast.Module): + endline = max(endline, last_line(comment_bits)) + comment_line_count = get_lines_in_range(comment_bits, startline, endline) + code_line_count = len(inner_code_lines) - doc_line_count + code_lines.update(inner_code_lines) + self.print_lines(u'code', node, code_line_count) + self.print_lines(u'comment', node, comment_line_count) + self.print_lines(u'docstring', node, doc_line_count) + self.print_lines(u'all', node, endline - startline + 1) + if isinstance(node, ast.Module): + total_lines = code_line_count + comment_line_count + doc_line_count + self.writer.write_tuple(u'numlines', 'rddd', self.module_id, total_lines, code_line_count, comment_line_count + doc_line_count) + elif isinstance(node, list): + for n in node: + self.emit_line_counts(n, code_lines, comment_bits) + elif isinstance(node, STMT_OR_EXPR): + for _, _, child_node in iter_fields(node): + self.emit_line_counts(child_node, code_lines, comment_bits) + assert hasattr(node, "lineno"), node + line = node.lineno + endline, _ = node._end + while line <= endline: + code_lines.add(line) + line += 1 + + def print_lines(self, name, node, count): + self.writer.write_tuple(u'py_%slines' % name, 'nd', node, count) + + def get_location(self, bl, bc, el, ec): + loc_id = self.writer.get_unique_id() + self.writer.write_tuple(u'locations_ast', 'rrdddd', + loc_id, self.module_id, bl, bc, el, ec) + return loc_id + + def emit_locations(self, node): + if isinstance(node, ast.AstBase): + if isinstance(node, LOCATABLE): + self._write_location(node) + elif isinstance(node, CLASS_OR_FUNCTION): + bl, bc = node.lineno, node.col_offset+1 + el, ec = node._end + loc_id = self.get_location(bl, bc, el, ec) + self.writer.write_tuple(u'py_scope_location', 'rn', loc_id, node) + for _, _, child_node in iter_fields(node): + self.emit_locations(child_node) + elif isinstance(node, list): + for n in node: + self.emit_locations(n) + + def _write_location(self, node): + bl, bc = node.lineno, node.col_offset+1 + assert len(node._end) == 2, node + el, ec = node._end + loc_id = self.get_location(bl, bc, el, ec) + self.writer.write_tuple(u'py_locations', 'rn', loc_id, node) + +def get_comment_bits(comments): + comment_bits = 0 + for _, start, end in comments: + line, _ = start + end_line, _ = end + while line <= end_line: + comment_bits |= (1<<line) + line += 1 + return comment_bits + + +def get_lines_in_range(bits, start, end): + if end >= 0: + length = end - start + 1 + if length < 0: + return 0 + section = bits >> start + section &= (1 << length) - 1 + else: + section = bits >> start + return bin(section).count('1') + +def last_line(n): + if n <= 0: + return 0 + return int(math.log(n, 2)) diff --git a/python/extractor/semmle/python/passes/objects.py b/python/extractor/semmle/python/passes/objects.py new file mode 100644 index 00000000000..599539bc541 --- /dev/null +++ b/python/extractor/semmle/python/passes/objects.py @@ -0,0 +1,380 @@ + +import ast +import sys +from types import ModuleType, GetSetDescriptorType +import hashlib +import os + +from semmle.python import ast +from semmle.python.passes._pass import Pass +from semmle.util import get_analysis_major_version +from semmle.python.passes.ast_pass import iter_fields +from semmle.cmdline import is_legal_module_name + + +''' +The QL library depends on a reasonable one-to-one correspondence +between DB entities and Python objects. However, since QL has only +one notion of equality, but Python has two (`__eq__` and `is`) we need to be careful. +What we want to do is to treat objects like builtin functions and classes as using +reference equality and numbers and strings as using value equality. + +In practice this is impossible as we want to distinguish `True` from `1` from `1.0` +even though all these values are equal. However, we want to get as close as possible. + +''' + + +__all__ = [ 'ObjectPass' ] + +OBJECT_TYPES = set([ ast.ClassExpr, ast.Call, + ast.FunctionExpr, ast.Tuple, + ast.Str, ast.Num, ast.List, ast.ListComp, ast.Module, + ast.Dict, ast.Ellipsis, ast.Lambda]) + +# Types from Python 2.7 onwards +OBJECT_TYPES.add(ast.DictComp) +OBJECT_TYPES.add(ast.SetComp) +OBJECT_TYPES.add(ast.Set) + +NUMERIC_TYPES = set([int, float, bool]) + +BUILTINS_NAME = 'builtins' + +LITERALS = (ast.Num, ast.Str) + +class _CObject(object): + '''Utility class to wrap arbitrary C objects. + Treat all objects as unique. Rely on naming in the + trap files to merge the objects that we want merged. + ''' + __slots__ = ['obj'] + + def __init__(self, obj): + self.obj = obj + + def __eq__(self, other): + if isinstance(other, _CObject): + return self.obj is other.obj + else: + return False + + def __ne__(self, other): + return not self.__eq__(other) + + def __hash__(self): + return id(self.obj) + +class ObjectPass(Pass): + '''Generates relations for objects. This includes information about + builtin objects, including their types and members. + It also generates objects for all literal values present in the Python source.''' + + def extract(self, ast, path, writer): + self.writer = writer + try: + self._extract_py(ast) + self._extract_possible_module_names(path) + finally: + self.writer = None + + def _extract_possible_module_names(self, path): + maybe_name, _ = os.path.splitext(path) + maybe_name = maybe_name.replace(os.sep, ".") + while maybe_name.count(".") > 3: + _, maybe_name = maybe_name.split(".", 1) + while True: + if is_legal_module_name(maybe_name): + self._write_module_and_package_names(maybe_name) + if "." not in maybe_name: + return + _, maybe_name = maybe_name.split(".", 1) + + def _write_module_and_package_names(self, module_name): + self._write_c_object(module_name, None, False) + while "." in module_name: + module_name, _ = module_name.rsplit(".", 1) + self._write_c_object(module_name, None, False) + + def extract_builtin(self, module, writer): + self.writer = writer + try: + self._extract_c(module) + finally: + self.writer = None + + def _extract_c(self, mod): + self.next_address_label = 0 + self.address_labels = {} + self._write_c_object(mod, None, False) + self.address_labels = None + + def _write_str(self, s): + assert type(s) is str + self._write_c_object(s, None, False) + + def _write_c_object(self, obj, label, write_special, string_prefix=""): + ANALYSIS_MAJOR_VERSION = get_analysis_major_version() + # If we're extracting Python 2 code using Python 3, we want to treat `str` as `bytes` for + # the purposes of determining the type, but we still want to treat the _value_ as if it's a `str`. + obj_type = type(obj) + if obj_type == str and ANALYSIS_MAJOR_VERSION == 2 and 'u' not in string_prefix: + obj_type = bytes + + cobj = _CObject(obj) + if self.writer.has_written(cobj): + return self.writer.get_node_id(cobj) + obj_label = self.get_label_for_object(obj, label, obj_type) + obj_id = self.writer.get_labelled_id(cobj, obj_label) + #Avoid writing out all the basic types for every C module. + if not write_special and cobj in SPECIAL_OBJECTS: + return obj_id + type_id = self._write_c_object(obj_type, None, write_special) + self.writer.write_tuple(u'py_cobjects', 'r', obj_id) + self.writer.write_tuple(u'py_cobjecttypes', 'rr', obj_id, type_id) + self.writer.write_tuple(u'py_cobject_sources', 'rd', obj_id, 0) + if isinstance(obj, ModuleType) or isinstance(obj, type): + for name, value in sorted(obj.__dict__.items()): + if (obj, name) in SKIPLIST: + continue + val_id = self._write_c_object(value, obj_label + u'$%d' % ANALYSIS_MAJOR_VERSION + name, write_special) + self.writer.write_tuple(u'py_cmembers_versioned', 'rsrs', + obj_id, name, val_id, ANALYSIS_MAJOR_VERSION) + if isinstance(obj, type) and obj is not object: + super_id = self._write_c_object(obj.__mro__[1], None, write_special) + self.writer.write_tuple(u'py_cmembers_versioned', 'rsrs', + obj_id, u".super.", super_id, ANALYSIS_MAJOR_VERSION) + if isinstance(obj, (list, tuple)): + for index, item in enumerate(obj): + item_id = self._write_c_object(item, obj_label + u'$' + str(index), write_special) + self.writer.write_tuple(u'py_citems', 'rdr', + obj_id, index, item_id) + if type(obj) is GetSetDescriptorType: + for name in type(obj).__dict__: + if name == '__name__' or not hasattr(obj, name): + continue + val_id = self._write_c_object(getattr(obj, name), obj_label + u'$%d' % ANALYSIS_MAJOR_VERSION + name, write_special) + self.writer.write_tuple(u'py_cmembers_versioned', 'rsrs', + obj_id, name, val_id, ANALYSIS_MAJOR_VERSION) + if hasattr(obj, '__name__'): + #Use qualified names for classes. + if isinstance(obj, type): + name = qualified_type_name(obj) + # https://bugs.python.org/issue18602 + elif isinstance(obj, ModuleType) and obj.__name__ == "io": + name = "_io" + elif obj is EXEC: + name = "exec" + else: + name = obj.__name__ + self.writer.write_tuple(u'py_cobjectnames', 'rs', + obj_id, name) + elif type(obj) in NUMERIC_TYPES: + self.writer.write_tuple(u'py_cobjectnames', 'rq', + obj_id, obj) + elif type(obj) is str: + if 'b' in string_prefix: + prefix = u"b" + elif 'u' in string_prefix: + prefix = u"u" + else: + if ANALYSIS_MAJOR_VERSION == 2: + prefix = u"b" + else: + prefix = u"u" + self.writer.write_tuple(u'py_cobjectnames', 'rs', + obj_id, prefix + u"'" + obj + u"'") + elif type(obj) is bytes: + #Convert bytes to a unicode characters one-to-one. + obj_string = u"b'" + obj.decode("latin-1") + u"'" + self.writer.write_tuple(u'py_cobjectnames', 'rs', + obj_id, obj_string) + elif type(obj) is type(None): + self.writer.write_tuple(u'py_cobjectnames', 'rs', + obj_id, u'None') + else: + self.writer.write_tuple(u'py_cobjectnames', 'rs', + obj_id, u'object') + return obj_id + + def write_special_objects(self, writer): + '''Write important builtin objects to the trap file''' + self.writer = writer + self.next_address_label = 0 + self.address_labels = {} + + def write(obj, name, label=None): + obj_id = self._write_c_object(obj, label, True) + self.writer.write_tuple(u'py_special_objects', 'rs', obj_id, name) + + for obj, name in SPECIAL_OBJECTS.items(): + write(obj.obj, name) + + ###Artificial objects for use by the type-inferencer - Make sure that they are unique. + write(object(), u"_semmle_unknown_type", u"$_semmle_unknown_type") + write(object(), u"_semmle_undefined_value", u"$_semmle_undefined_value") + + self.writer = None + self.address_labels = None + + def get_label_for_object(self, obj, default_label, obj_type): + """Gets a label for an object. Attempt to make this as universal as possible. + The object graph in the database should reflect the real object graph, + only rarely diverging. This should be true even in highly parallel environments + including cases where trap files may be overwritten. + Proviso: Distinct immutable primitive objects may be merged (which should be benign) + For objects without a unambiguous global name, 'default_label' is used. + """ + #This code must be robust against (possibly intentionally) incorrect implementations + #of the object model. + if obj is None: + return u"C_None" + t = type(obj) + t_name = t.__name__ + if t is tuple and len(obj) == 0: + return u"C_EmptyTuple" + + if obj_type is str: + prefix = u"C_unicode$" + else: + prefix = u"C_bytes$" + if t is str: + obj = obj.encode("utf8", errors='replace') + return prefix + hashlib.sha1(obj).hexdigest() + if t is bytes: + return prefix + hashlib.sha1(obj).hexdigest() + if t in NUMERIC_TYPES: + return u"C_" + t_name + u"$" + repr(obj) + try: + if isinstance(obj, type): + return u"C_" + t_name + u"$" + qualified_type_name(obj) + except Exception: + #Misbehaved object. + return default_label + if t is ModuleType: + return u"C_" + t_name + u"$" + obj.__name__ + if t is type(len): + mod_name = obj.__module__ + if isinstance(mod_name, str): + if mod_name == BUILTINS_NAME: + mod_name = "builtins" + return u"C_" + t_name + u"$" + mod_name + "." + obj.__name__ + return default_label + + # Python files -- Extract objects for all numeric and string values. + + def _extract_py(self, ast): + self._walk_py(ast) + + def _write_literal(self, node): + if isinstance(node, ast.Num): + self._write_c_object(node.n, None, False) + else: + prefix = getattr(node, "prefix", "") + # Output both byte and unicode objects if the relevant objects could exist + # Non-prefixed strings can be either bytes or unicode. + if 'u' not in prefix: + try: + self._write_c_object(node.s.encode("latin-1"), None, False, string_prefix=prefix) + except UnicodeEncodeError: + #If not encodeable as latin-1 then it cannot be bytes + pass + if 'b' not in prefix: + self._write_c_object(node.s, None, False, string_prefix=prefix) + + def _walk_py(self, node): + if isinstance(node, ast.AstBase): + if isinstance(node, LITERALS): + self._write_literal(node) + else: + for _, _, child_node in iter_fields(node): + self._walk_py(child_node) + elif isinstance(node, list): + for n in node: + self._walk_py(n) + +def a_function(): + pass + +def a_generator_function(): + yield None + +class C(object): + def meth(self): + pass + +#Create an object for 'exec', as parser no longer treats it as statement. +# Use `[].append` as it has the same type as `exec`. +EXEC = [].append + +SPECIAL_OBJECTS = { + type(a_function): u"FunctionType", + type(len): u"BuiltinFunctionType", + classmethod: u"ClassMethod", + staticmethod: u"StaticMethod", + type(sys): u"ModuleType", + type(a_generator_function()): u"generator", + None: u"None", + type(None): u"NoneType", + True: u"True", + False: u"False", + bool: u"bool", + sys: u"sys", + Exception: u"Exception", + BaseException: u"BaseException", + TypeError: u"TypeError", + AttributeError: u"AttributeError", + KeyError: u"KeyError", + int: u"int", + float: u"float", + object: u"object", + type: u"type", + tuple: u"tuple", + dict: u"dict", + list: u"list", + set: u"set", + locals: u"locals", + globals: u"globals", + property: u"property", + type(list.append): u"MethodDescriptorType", + super: u"super", + type(C().meth): u"MethodType", + #For future enhancements + object(): u"_1", + object(): u"_2", + #Make sure we have all version numbers as single character strings. + b'2': u'b2', + b'3': u'b3', + u'2': u'u2', + u'3': u'u3', +} + +SPECIAL_OBJECTS[__import__(BUILTINS_NAME)] = u"builtin_module" +SPECIAL_OBJECTS[str] = u"unicode" +SPECIAL_OBJECTS[bytes] = u"bytes" + +#Store wrapped versions of special objects, so that they compare correctly. +tmp = {} +for obj, name in SPECIAL_OBJECTS.items(): + tmp[_CObject(obj)] = name +SPECIAL_OBJECTS = tmp +del tmp + +#List of various attributes VM implementation details we want to skip. +SKIPLIST = set([ + (sys, "exc_value"), + (sys, "exc_type"), + (sys, "exc_traceback"), + (__import__(BUILTINS_NAME), "_"), +]) + +def qualified_type_name(cls): + #Special case bytes/str/unicode to make sure they share names across versions + if cls is bytes: + return u"bytes" + if cls is str: + return u"unicode" + if cls.__module__ == BUILTINS_NAME or cls.__module__ == "exceptions": + return cls.__name__ + else: + return cls.__module__ + "." + cls.__name__ diff --git a/python/extractor/semmle/python/passes/pruner.py b/python/extractor/semmle/python/passes/pruner.py new file mode 100644 index 00000000000..d6363e529f1 --- /dev/null +++ b/python/extractor/semmle/python/passes/pruner.py @@ -0,0 +1,450 @@ +''' +Prune the flow-graph, eliminating edges with impossible constraints. +For example: +1. if x: +2. if x == 0: +3. pass +The edge from `x == 0` to pass (line 2 to line 3) is impossible as `x` cannot be zero to +reach line 2. + +While code like the above is unlikely in source code, it is quite common after splitting. + +''' + +from semmle.python import ast +import cmath +from collections import defaultdict + +from semmle.python.passes.ast_pass import ASTVisitor +import semmle.util as util +from semmle.python.ast import Lt, LtE, Eq, NotEq, Gt, GtE, Is, IsNot + +__all__ = [ 'do_pruning' ] + +INT_TYPES = int + +# Classes representing constraint on branches, for pruning. +# For example, the constraint `x` allows pruning and edge with the constraint `x == 0` +# since if `x` is True it cannot be zero. + +class Truthy(object): + '''A test of the form `x` or `not x`''' + + def __init__(self, sense): + self.sense = sense + + def invert(self): + return (VAR_IS_TRUE, VAR_IS_FALSE)[self.sense] + + def contradicts(self, other): + '''Holds if self and other are contradictory.''' + if self.sense: + return other.constrainsVariableToBeFalse() + else: + return other.constrainsVariableToBeTrue() + + def constrainsVariableToBeTrue(self): + '''Holds if this constrains the variable such that `bool(var) is True`''' + return self.sense + + def constrainsVariableToBeFalse(self): + '''Holds if this constrains the variable such that `bool(var) is False`''' + return not self.sense + + def __repr__(self): + return "True" if self.sense else "False" + +class IsNone(object): + '''A test of the form `x is None` or `x is not None`''' + + def __init__(self, sense): + self.sense = sense + + def contradicts(self, other): + if self is VAR_IS_NONE: + return other is VAR_IS_NOT_NONE or other is VAR_IS_TRUE + else: + return other is VAR_IS_NONE + + def invert(self): + return (VAR_IS_NONE, VAR_IS_NOT_NONE)[self.sense] + + def constrainsVariableToBeTrue(self): + return False + + def constrainsVariableToBeFalse(self): + return self is VAR_IS_NONE + + def __repr__(self): + return "Is None" if self.sense else "Is Not None" + +class ComparedToConst(object): + '''A test of the form `x == k`, `x < k`, etc.''' + + def __init__(self, op, k): + #We can treat is/is not as ==/!= as we only + #compare with simple literals which are always interned. + if op is Is: + op = Eq + elif op is IsNot: + op = NotEq + self.op = op + self.k = k + + def invert(self): + return ComparedToConst(INVERT_OP[self.op], self.k) + + def constrainsVariableToBeTrue(self): + if self.op == Eq: + return self.k != 0 + if self.op == NotEq: + return self.k == 0 + if self.op == GtE: + return self.k > 0 + if self.op == Gt: + return self.k >= 0 + if self.op == LtE: + return self.k < 0 + if self.op == Lt: + return self.k <= 0 + return False + + def constrainsVariableToBeFalse(self): + return self.op == Eq and self.k == 0 + + def contradicts(self, other): + if self.constrainsVariableToBeTrue() and other is VAR_IS_FALSE: + return True + if self.constrainsVariableToBeFalse() and other is VAR_IS_TRUE: + return True + if self.op == Eq and other is VAR_IS_NONE: + return True + if not isinstance(other, ComparedToConst): + return False + if self.op == Eq: + if other.op == NotEq: + return self.k == other.k + if other.op == Eq: + return self.k != other.k + if other.op == Lt: + return self.k >= other.k + if other.op == LtE: + return self.k > other.k + if other.op == Gt: + return self.k <= other.k + if other.op == GtE: + return self.k < other.k + return False + if self.op == Lt: + if other.op == Eq or other.op == Gt or other.op == GtE: + return self.k <= other.k + return False + if self.op == LtE: + if other.op == Eq or other.op == GtE: + return self.k < other.k + if other.op == Gt: + return self.k <= other.k + return False + if other.op in (NotEq, Gt, GtE): + return False + return other.contradicts(self) + + def __repr__(self): + return "%s %d" % (OP_NAME[self.op], self.k) + + +INVERT_OP = { + Eq: NotEq, + NotEq: Eq, + Lt: GtE, + LtE: Gt, + Gt: LtE, + GtE: Lt + } + +OP_NAME = { + Eq: "==", + NotEq: "!=", + Lt: "<", + LtE: "<=", + Gt: ">", + GtE: ">=", +} + +VAR_IS_TRUE = Truthy(True) +VAR_IS_FALSE = Truthy(False) + +VAR_IS_NONE = IsNone(True) +VAR_IS_NOT_NONE = IsNone(False) + +NAME_CONSTS = { + "True" : VAR_IS_TRUE, + "False": VAR_IS_FALSE, + "None": VAR_IS_NONE, +} + +class SkippedVisitor(ASTVisitor): + + def __init__(self): + self.nodes = set() + + def visit_Subscript(self, node): + if isinstance(node.value, ast.Name): + self.nodes.add(node.value) + + def visit_Attribute(self, node): + if isinstance(node.value, ast.Name): + self.nodes.add(node.value) + +class NonlocalVisitor(ASTVisitor): + def __init__(self): + self.names = set() + + def visit_Nonlocal(self, node): + for name in node.names: + self.names.add(name) + +class GlobalVisitor(ASTVisitor): + def __init__(self): + self.names = set() + + def visit_Global(self, node): + for name in node.names: + self.names.add(name) + +class KeptVisitor(ASTVisitor): + + def __init__(self): + self.nodes = set() + + #Keep imports + def visit_alias(self, node): + bool_const = const_value(node.value) + if bool_const is None: + return + defn = node.asname + if hasattr(defn, 'variable'): + self.nodes.add(defn) + +def skipped_variables(tree, graph, use_map): + '''Returns a collection of SsaVariables that + are skipped as possibly mutated. + + Variables are skipped if their values may be mutated + in such a way that it might alter their boolean value. + This means that they have an attribute accessed, or are subscripted. + However, modules are always true, so are never skipped. + ''' + variables = use_map.values() + skiplist = set() + v = SkippedVisitor() + v.visit(tree) + ast_skiplist = v.nodes + for node, var in use_map.items(): + if node.node in ast_skiplist: + skiplist.add(var) + v = KeptVisitor() + v.visit(tree) + ast_keeplist = v.nodes + keeplist = set() + for var in variables: + defn = graph.get_ssa_definition(var) + if defn and defn.node in ast_keeplist: + keeplist.add(var) + return skiplist - keeplist + +def get_branching_edges(tree, graph, use_map): + ''''Returns an iterator of pred, succ, var, bool tuples + representing edges and the boolean value or None-ness that + the ssa variable holds on that edge. + ''' + for pred, succ, ann in graph.edges(): + if ann not in (util.TRUE_EDGE, util.FALSE_EDGE): + continue + #Handle 'not' expressions. + invert = ann == util.FALSE_EDGE + test = pred + while isinstance(test.node, ast.UnaryOp): + if not isinstance(test.node.op, ast.Not): + break + preds = graph.pred[test] + if len(preds) != 1: + break + test = preds[0] + invert = not invert + t = comparison_kind(graph, test) + if t is None: + continue + val, use = t + if invert: + val = val.invert() + if use in use_map: + yield pred, succ, use_map[use], val + +def effective_constants_definitions(bool_const_defns, graph, branching_edges): + '''Returns a mapping of var -> list of (node, effective-constant) + representing the effective boolean constant definitions. + A constant definition is an assignment to a + SSA variable 'var' such that bool(var) is a constant + for all uses of that variable dominated by the definition. + + A (SSA) variable is effectively constant if it assigned + a constant, or it is guarded by a test. + ''' + consts = defaultdict(list) + for var in graph.ssa_variables(): + defn = graph.get_ssa_definition(var) + if not defn or defn.node not in bool_const_defns: + continue + consts[var].append((defn, bool_const_defns[defn.node])) + for pred, succ, var, bval in branching_edges: + if len(graph.pred[succ]) != 1: + continue + consts[var].append((succ, bval)) + return consts + +def do_pruning(tree, graph): + v = BoolConstVisitor() + v.visit(tree) + nonlocals = NonlocalVisitor() + nonlocals.visit(tree) + global_vars = GlobalVisitor() + global_vars.visit(tree) + bool_const_defns = v.const_defns + #Need to repeatedly do this until we reach a fixed point + while True: + use_map = {} + for node, var in graph.ssa_uses(): + if isinstance(node.node, ast.Name): + use_map[node] = var + skiplist = skipped_variables(tree, graph, use_map) + edges = list(get_branching_edges(tree, graph, use_map)) + consts = effective_constants_definitions(bool_const_defns, graph, edges) + dominated_by = {} + #Look for effectively constant definitions that dominate edges on + #which the relative variable has the inverse sense. + #Put edges to be removed in a set, as an edge could be removed for + #multiple reasons. + to_be_removed = set() + for pred, succ, var, bval in edges: + if var not in consts: + continue + if var in skiplist and bval in (VAR_IS_TRUE, VAR_IS_FALSE): + continue + if var.variable.id in nonlocals.names: + continue + if var.variable.id in global_vars.names: + continue + for defn, const_kind in consts[var]: + if not const_kind.contradicts(bval): + continue + if defn not in dominated_by: + dominated_by[defn] = graph.dominated_by(defn) + if pred in dominated_by[defn]: + to_be_removed.add((pred, succ)) + #Delete simply dead edges (like `if False: ...` ) + for pred, succ, ann in graph.edges(): + if ann == util.TRUE_EDGE: + val = VAR_IS_TRUE + elif ann == util.FALSE_EDGE: + val = VAR_IS_FALSE + else: + continue + b = const_value(pred.node) + if b is None: + continue + if b.contradicts(val): + to_be_removed.add((pred, succ)) + if not to_be_removed: + break + for pred, succ in to_be_removed: + graph.remove_edge(pred, succ) + graph.clear_computed() + +class BoolConstVisitor(ASTVisitor): + '''Look for assignments of a boolean constant to a variable. + self.const_defns holds a mapping from the AST node for the definition + to the True/False value for the constant.''' + + def __init__(self): + self.const_defns = {} + + + def visit_alias(self, node): + bool_const = const_value(node.value) + if bool_const is None: + return + defn = node.asname + if hasattr(defn, 'variable'): + self.const_defns[defn] = bool_const + + def visit_Assign(self, node): + bool_const = const_value(node.value) + if bool_const is None: + return + for defn in node.targets: + if hasattr(defn, 'variable'): + self.const_defns[defn] = bool_const + +def _comparison(test): + # Comparisons to None or ints + if isinstance(test, ast.Compare) and len(test.ops) == 1: + left = test.left + right = test.comparators[0] + if not hasattr(left, "variable"): + return None + if isinstance(right, ast.Name) and right.id == "None": + if isinstance(test.ops[0], ast.Is): + return VAR_IS_NONE + if isinstance(test.ops[0], ast.IsNot): + return VAR_IS_NOT_NONE + if isinstance(right, ast.Num) and isinstance(right.n, INT_TYPES): + return ComparedToConst(type(test.ops[0]), right.n) + return None + + +def comparison_kind(graph, test): + # Comparisons to None or ints + val = _comparison(test.node) + if val is None: + if hasattr(test.node, "variable"): + return VAR_IS_TRUE, test + return None + use_set = graph.pred[graph.pred[test][0]] + if len(use_set) != 1: + return None + use = use_set[0] + return val, use + +def const_value(ast_node): + '''Returns the boolean value of a boolean or numeric constant AST node or None if not a constant. + NaN is not a constant.''' + if isinstance(ast_node, ast.Name): + if ast_node.id in ("True", "False", "None"): + return NAME_CONSTS[ast_node.id] + else: + return None + if isinstance(ast_node, ast.ImportExpr): + #Modules always evaluate True + return VAR_IS_TRUE + if isinstance(ast_node, ast.Num): + n = ast_node.n + elif isinstance(ast_node, ast.UnaryOp): + if isinstance(ast_node.op, ast.USub) and isinstance(ast_node.operand, ast.Num): + n = ast_node.operand.n + elif isinstance(ast_node.op, ast.Not): + not_value = const_value(ast_node.operand) + if not_value is None: + return None + return not_value.invert() + else: + return None + else: + return None + + #Check for NaN, but be careful not to overflow + #Handle integers first as they may overflow cmath.isnan() + if not isinstance(n, INT_TYPES) and cmath.isnan(n): + return None + #Now have an int or a normal float or complex + return ComparedToConst(Eq, n) diff --git a/python/extractor/semmle/python/passes/splitter.py b/python/extractor/semmle/python/passes/splitter.py new file mode 100755 index 00000000000..06e4c1d19d9 --- /dev/null +++ b/python/extractor/semmle/python/passes/splitter.py @@ -0,0 +1,384 @@ +''' +Split the flow-graph to allow tests to dominate all parts of the code that depends on them. +We split on `if`s and `try`s. Either because of several tests on the same condition or +subsequent tests on a constant determined by the first condition. +E.g. + +if a: + A +B +if a: + C +becomes +if a: + A + B + C +else: + B +ensuring that A dominates C. + +or... + +try: + import foo +except: + foo = None +X +if foo: + Y +becomes +try: + import foo + X + Y +except: + foo = None + X + +To split on CFG node N we require that there exists nodes H1..Hn and N2 such that: + N and N2 are tests or conditional assignments to the same variable. + N dominates H1 .. Hn and N2 + There is no assignment to the variable between N and N2 + H1..Hn are the "split heads" of N, that is: + if N is a test, H1 and H2 are its true and false successors (there is no H3). + if N is a `try` then H1 .. Hn-1 are exists from the try body and Hn is the CFG node for the first (and only) `except` statement. + Within the region strictly dominated by N, N2 must reachable from all of H1..Hn + + For simplicity we limit n (as in Hn) to 2, but that is not required for correctness. +''' + +from collections import defaultdict + +from semmle.python import ast +from semmle.python.passes.ast_pass import iter_fields +from operator import itemgetter +from semmle.graph import FlowGraph + +MAX_SPLITS = 2 + +def do_split(ast_root, graph: FlowGraph): + '''Split the flow graph, using the AST to determine split points.''' + ast_labels = label_ast(ast_root) + cfg_labels = label_cfg(graph, ast_labels) + split_points = choose_split_points(graph, cfg_labels) + graph.split(split_points) + +class ScopedAstLabellingVisitor(object): + '''Visitor for labelling AST nodes in scope. + Does not visit nodes belonging to inner scopes (methods, etc) + ''' + + def __init__(self, labels): + self.labels = labels + self.priority = 0 + + def visit(self, node): + """Visit a node.""" + method = 'visit_' + node.__class__.__name__ + getattr(self, method, self.generic_visit)(node) + + def generic_visit(self, node): + if isinstance(node, ast.AstBase): + for _, _, value in iter_fields(node): + self.visit(value) + + def visit_Class(self, node): + #Do not visit sub-scopes + return + + visit_Function = visit_Class + + def visit_list(self, the_list): + for item in the_list: + method = 'visit_' + item.__class__.__name__ + getattr(self, method, self.generic_visit)(item) + + #Helper methods + + @staticmethod + def get_variable(expr): + '''Returns the variable of this expr. Returns None if no variable.''' + if hasattr(expr, "variable"): + return expr.variable + else: + return None + + @staticmethod + def is_const(expr): + if isinstance(expr, ast.Name): + return expr.variable.id in ("None", "True", "False") + elif isinstance(expr, ast.UnaryOp): + return ScopedAstLabellingVisitor.is_const(expr.operand) + return isinstance(expr, (ast.Num, ast.Str)) + + + +class AstLabeller(ScopedAstLabellingVisitor): + '''Visitor to label tests and assignments + for later scanning to determine split points. + ''' + + def __init__(self, *args): + ScopedAstLabellingVisitor.__init__(self, *args) + self.in_test = 0 + + def _label_for_compare(self, cmp): + if len(cmp.ops) != 1: + return None + var = self.get_variable(cmp.left) + if var is None: + var = self.get_variable(cmp.comparators[0]) + k = cmp.left + else: + k = cmp.comparators[0] + if var is not None and self.is_const(k): + self.priority += 1 + return (var, k, self.priority) + return None + + def visit_Compare(self, cmp): + label = self._label_for_compare(cmp) + if label: + self.labels[cmp].append(label) + + def visit_Name(self, name): + self.priority += 1 + if isinstance(name.ctx, ast.Store): + self.labels[name].append((name.variable, "assign", self.priority)) + elif self.in_test: + self.labels[name].append((name.variable, None, self.priority)) + + def _label_for_unary_operand(self, op): + if not isinstance(op.op, ast.Not): + return None + if isinstance(op.operand, ast.UnaryOp): + return self._label_for_unary_operand(op.operand) + elif isinstance(op.operand, ast.Name): + self.priority += 1 + return (op.operand.variable, None, self.priority) + elif isinstance(op.operand, ast.Compare): + return self._label_for_compare(op.operand) + return None + + def visit_UnaryOp(self, op): + if not self.in_test: + return + label = self._label_for_unary_operand(op) + if label: + self.labels[op].append(label) + else: + self.visit(op.operand) + + def visit_If(self, ifstmt): + # Looking for the pattern: + # if x: k = K0 else: k = K1 + # the test is the split point, but the variable is `k` + self.in_test += 1 + self.visit(ifstmt.test) + self.in_test -= 1 + self.visit(ifstmt.body) + self.visit(ifstmt.orelse) + k1 = {} + ConstantAssignmentVisitor(k1).visit(ifstmt.body) + k2 = {} + ConstantAssignmentVisitor(k2).visit(ifstmt.orelse) + k = set(k1.keys()).union(k2.keys()) + self.priority += 1 + for var in k: + val = k1[var] if var in k1 else k2[var] + self.labels[ifstmt.test].append((var, val, self.priority)) + + def visit_Try(self, stmt): + # Looking for the pattern: + # if try: k = K0 except: k = K1 + # the try is the split point, and the variable is `k` + self.generic_visit(stmt) + if not stmt.handlers or len(stmt.handlers) > 1: + return + k1 = {} + ConstantAssignmentVisitor(k1).visit(stmt.body) + k2 = {} + ConstantAssignmentVisitor(k2).visit(stmt.handlers[0]) + k = set(k1.keys()).union(k2.keys()) + self.priority += 1 + for var in k: + val = k1[var] if var in k1 else k2[var] + self.labels[stmt].append((var, val, self.priority)) + + def visit_ClassExpr(self, node): + # Don't split over class definitions, + # as the presence of multiple ClassObjects for a + # single class can be confusing. + # The same applies to function definitions. + self.priority += 1 + self.labels[node].append((None, "define", self.priority)) + + visit_FunctionExpr = visit_ClassExpr + + +class TryBodyAndHandlerVisitor(ScopedAstLabellingVisitor): + '''Visitor to gather all AST nodes under visited node + including, but not under `ExceptStmt`s.''' + + def generic_visit(self, node): + if isinstance(node, ast.AstBase): + self.labels.add(node) + for _, _, value in iter_fields(node): + self.visit(value) + + def visit_ExceptStmt(self, node): + #Do not visit node below this. + self.labels.add(node) + return + + +class ConstantAssignmentVisitor(ScopedAstLabellingVisitor): + '''Visitor to label assignments where RHS is a constant''' + + def visit_Assign(self, asgn): + if not self.is_const(asgn.value): + return + for target in asgn.targets: + if hasattr(target, "variable"): + self.labels[target.variable] = asgn.value + +def label_ast(ast_root): + '''Visits the AST, returning the labels''' + labels = defaultdict(list) + labeller = AstLabeller(labels) + labeller.generic_visit(ast_root) + return labels + +def _is_branch(node, graph: FlowGraph): + '''Holds if `node` (in `graph`) is a branch point.''' + if len(graph.succ[node]) == 2 or isinstance(node.node, ast.Try): + return True + if len(graph.succ[node]) != 1: + return False + succ = graph.succ[node][0] + if not isinstance(succ.node, ast.UnaryOp): + return False + return _is_branch(succ, graph) + + +def label_cfg(graph: FlowGraph, ast_labels): + '''Copies labels from AST to CFG for branches and assignments.''' + cfg_labels = {} + for node, _ in graph.nodes(): + if node.node not in ast_labels: + continue + labels = ast_labels[node.node] + if not labels: + continue + if _is_branch(node, graph) or labels[0][1] in ("assign", "define", "loop"): + cfg_labels[node] = labels + return cfg_labels + +def usefully_comparable_types(o1, o2): + '''Holds if a test against object o1 can provide any + meaningful information w.r.t. to a test against o2. + ''' + if o1 is None or o2 is None: + return True + return type(o1) is type(o2) + +def exits_from_subtree(head, subtree, graph: FlowGraph): + '''Returns all nodes in `subtree`, that exit + the subtree and are reachable from `head` + ''' + exits = set() + seen = set() + todo = set([head]) + while todo: + node = todo.pop() + if node in seen: + continue + seen.add(node) + if not graph.succ[node]: + continue + is_exit = True + for succ in graph.succ[node]: + if succ.node in subtree: + todo.add(succ) + is_exit = False + if is_exit: + exits.add(node) + return exits + +def get_split_heads(head, graph: FlowGraph): + '''Compute the split tails for the node `head` + That is, the set of nodes from which splitting should commence. + ''' + if isinstance(head.node, ast.Try): + try_body = set() + TryBodyAndHandlerVisitor(try_body).visit(head.node) + if head.node.handlers: + try_body.add(head.node.handlers[0]) + try_split_tails = exits_from_subtree(head, try_body, graph) + return try_split_tails + else: + return graph.succ[head] + + +def choose_split_points(graph: FlowGraph, cfg_labels): + '''Select the set of nodes to be the split heads for the graph, + from the given labels. A maximum of two points are chosen to avoid + excessive blow up. + ''' + candidates = [] + #Find pairs -- N1, N2 where N1 and N2 are tests on the same variable and the tests are similar. + labels = [] + for node, label_list in cfg_labels.items(): + for label in label_list: + labels.append((node, label[0], label[1], label[2])) + labels.sort(key=itemgetter(3)) + for first_node, first_var, first_type, first_priority in labels: + if first_type in ("assign", "define"): + continue + #Avoid splitting if any class or function is defined later in scope. + if 'define' in [type for (_, _, type, priority) in labels if priority > first_priority]: + break + for second_node, second_var, second_type, second_priority in labels: + if second_var != first_var: + continue + # First node must dominate second node to be a viable splitting candidate. + # Quick check to avoid doing pointless dominance checks. + if first_priority >= second_priority: + continue + #Avoid splitting if variable is reassigned + if second_type == "assign": + break + if not graph.strictly_dominates(first_node, second_node): + continue + if not usefully_comparable_types(first_type, second_type): + continue + split_heads = get_split_heads(first_node, graph) + if len(split_heads) != 2: + continue + # Unless both of the split heads reach the second node, + # then there is no benefit to splitting. + for head in split_heads: + if not graph.strictly_dominates(first_node, head): + break + if not graph.reaches_while_dominated(head, second_node, first_node): + break + else: + candidates.append((first_node, split_heads, first_var, first_priority)) + #Candidates is a list of (node, split-heads, variable, priority) tuples. + #Remove any duplicate nodes + candidates = deduplicate(candidates, 0, 3) + #Remove repeated splits on the same variable if more than MAX_SPLITS split and more than one variable. + if len(candidates) > MAX_SPLITS and len({c[2] for c in candidates}) > 1: + candidates = deduplicate(candidates, 2, 3) + # Return best two results, but must return in reverse priority order, + # so that splitting on one node does not remove a later one. + return [c[:2] for c in candidates[MAX_SPLITS-1::-1]] + +def deduplicate(lst, col, sort_col): + '''De-duplicate list `lst` of tuples removing all but the first tuple containing + duplicates of `col`. Sort the result on `sort_col''' + dedupped = {} + for t in reversed(lst): + dedupped[t[col]] = t + return sorted(dedupped.values(), key=itemgetter(sort_col)) diff --git a/python/extractor/semmle/python/passes/unroller.py b/python/extractor/semmle/python/passes/unroller.py new file mode 100644 index 00000000000..ffdee34dbc3 --- /dev/null +++ b/python/extractor/semmle/python/passes/unroller.py @@ -0,0 +1,181 @@ +''' +Unroll loops in the flow-graph once if we know that the iterator is not empty. +E.g. + +if seq: + for x in seq: + y = x + y # y is defined here + +or +if not seq: + raise +for x in seq: + y = x +y # y is defined here + +This is broadly analagous to splitting. +If the edge leaving the test that signifies a non-empty container dominates the loop, then we want to unroll the loop once. + +Loop unrolling will transform +A (loop header), B (loop body) --> A(first loop header), B(first loop body), C(second loop header), D(second loop body) +and is done as follows: + +Make a copy of A as C and make a copy of B as D. +Convert all edges from B to A into edges from B to C. +Convert edge from C to B to an edge from C to D. +Convert all edges from D to A into edges from D to C. + +Subsequent pruning will then remove any dead edges for iterables known to be empty or non-empty. +''' +from collections import defaultdict, namedtuple +from operator import itemgetter + +from semmle.python import ast +from semmle.python.passes.splitter import ScopedAstLabellingVisitor, label_cfg +from semmle.util import EXHAUSTED_EDGE + +class HasDefinitionInLoop(ScopedAstLabellingVisitor): + '''Check to see if a class or function definition occurs + in a loop. Note that this will prevent unrolling of a loop + if a definition occurs in any loop in scope, not just the one + to be unrolled. + ''' + + def __init__(self): + ScopedAstLabellingVisitor.__init__(self, None) + self.has_definition = False + self.in_loopbody = False + + def visit_For(self, loop): + self.visit(loop.iter) + self.in_loopbody = True + self.visit(loop.body) + self.in_loopbody = False + + def visit_ClassExpr(self, node): + # Don't split over class definitions, + # as the presence of multiple ClassObjects for a + # single class can be confusing. + # The same applies to function definitions. + if self.in_loopbody: + self.has_definition = True + + visit_FunctionExpr = visit_ClassExpr + + def __bool__(self): + return self.has_definition + +AstLabel = namedtuple("AstLabel", "variable type priority") +CfgLabel = namedtuple("CfgLabel", "node variable type priority") + +class Labeller(ScopedAstLabellingVisitor): + + def __init__(self, *args): + ScopedAstLabellingVisitor.__init__(self, *args) + self.in_test = 0 + self.in_loop = False + + def visit_If(self, ifstmt): + # Looking for tests for empty sequences. + self.in_test += 1 + self.visit(ifstmt.test) + self.in_test -= 1 + self.visit(ifstmt.body) + self.visit(ifstmt.orelse) + + def visit_UnaryOp(self, op): + if not self.in_test: + return + label = self._label_for_unary_operand(op) + if label: + self.labels[op].append(label) + else: + self.visit(op.operand) + + def _label_for_unary_operand(self, op): + if not isinstance(op.op, ast.Not): + return None + if isinstance(op.operand, ast.UnaryOp): + return self._label_for_unary_operand(op.operand) + elif isinstance(op.operand, ast.Name): + self.priority += 1 + return AstLabel(op.operand.variable, "test", self.priority) + elif isinstance(op.operand, ast.Call): + return self._label_for_call(op.operand) + return None + + def visit_Call(self, call): + if not self.in_test: + return + label = self._label_for_call(call) + if label: + self.labels[call].append(label) + return + + def _label_for_call(self, call): + #TO DO -- Check for calls to len() + pass + + def visit_For(self, loop): + self.in_loop = True + self.visit(loop.iter) + self.in_loop = False + self.visit(loop.body) + + def visit_Name(self, name): + self.priority += 1 + if self.in_test: + self.labels[name].append(AstLabel(name.variable, "test", self.priority)) + elif self.in_loop: + self.labels[name].append(AstLabel(name.variable, "loop", self.priority)) + +def do_unrolling(ast_root, graph): + #Avoid unrolling if any class or function is defined in a loop. + hasdef = HasDefinitionInLoop() + hasdef.generic_visit(ast_root) + if hasdef: + return + ast_labels = defaultdict(list) + labeller = Labeller(ast_labels) + labeller.generic_visit(ast_root) + cfg_labels = label_cfg(graph, ast_labels) + unrolls = choose_loops_to_unroll(graph, cfg_labels) + for head, body in unrolls: + graph.unroll(head, body) + + +def choose_loops_to_unroll(graph, cfg_labels): + '''Select the set of nodes to unroll.''' + candidates = [] + #Find pairs -- N1, N2 where N1 is a test on the variable and N2 is a loop over it. + labels = [] + for node, label_list in cfg_labels.items(): + for label in label_list: + labels.append(CfgLabel(node, label.variable, label.type, label.priority)) + labels.sort(key=itemgetter(3)) + for first_node, first_var, first_type, first_priority in labels: + if first_type == "loop": + continue + for second_node, second_var, second_type, second_priority in labels: + if second_var != first_var: + continue + # First node must dominate second node to be a viable unrolling candidate. + # Quick check to avoid doing pointless dominance checks. + if first_priority >= second_priority: + continue + #Avoid if second use is not a loop + if second_type != "loop": + continue + if not graph.strictly_dominates(first_node, second_node): + continue + candidates.append((second_node, second_priority)) + iters = reversed([c for c, p in sorted(candidates, key=itemgetter(1))]) + result = [] + for iter in iters: + head = graph.succ[iter][0] + for body in graph.succ[head]: + if graph.edge_annotations[head, body] != EXHAUSTED_EDGE: + result.append((head, body)) + break + return result diff --git a/python/extractor/semmle/query_gen.py b/python/extractor/semmle/query_gen.py new file mode 100644 index 00000000000..b3fc2442e8a --- /dev/null +++ b/python/extractor/semmle/query_gen.py @@ -0,0 +1,231 @@ +#Parse the dbscheme file + +#Look for comments or declarations ending with ';' + +import sys +import os.path + +from semmle.python import master + + +def singularize(name): + if name and name[-1] == 's': + return name[:-1] + elif name.endswith('_list'): + return name[:-5] + elif name.endswith('body'): + return name[:-4] + 'stmt' + else: + return name + +def singularize_text(name): + if name.endswith('block'): + return name[:-5] + 'statement' + elif name.endswith('body'): + return name[:-4] + 'statement' + elif name.endswith(' list'): + return name[:-5] + else: + return singularize(name) + +def make_fields(field_type, index): + if field_type.__name__ == 'bool': + fields = [] + else: + fields = [ 'result' ] + if field_type.is_case_type(): + fields.append('_') + fields.append('this') + if not field_type.unique_parent: + fields.append(str(index)) + return ', '.join(fields) + +def get_a(name): + name = capitalize_name(singularize(name)) + if name[0] in 'AEIOU': + return 'getAn' + name + else: + return 'getA' + name + +def indefinite_article(name): + name = capitalize_name(singularize(name)) + if name[0] in 'AEIOU': + return 'an' + else: + return 'a' + +def capitalize_name(name): + 'Capitalize name, forming camel-case from undescores' + return ''.join(part.capitalize() for part in name.split('_')) + +def name_to_query(name): + if name.startswith("is_"): + return "i" + capitalize_name(name)[1:] + else: + return "is" + capitalize_name(name) + +def longer_name(node, name, docname): + return '%s of this %s' % (docname, node.descriptive_name) + +def property_name(node, name, docname): + return '%s property of this %s' % (docname, node.descriptive_name) + +def make_getter(node, name, offset, field_type, docname, override): + txt = [u'\n'] + if field_type.__name__ == 'bool': + txt.append(u' /** Whether the %s is true. */\n' % property_name(node, name, docname)) + txt.append(u' predicate %s() {\n' % name_to_query(name)) + elif name == "location": + txt.append(u' /** Gets the %s. */\n' % longer_name(node, name, docname)) + txt.append(u' %s%s get%s() {\n'%(override , field_type.ql_name(), capitalize_name(name))) + else: + txt.append(u' /** Gets the %s. */\n' % longer_name(node, name, docname)) + txt.append(u' %s get%s() {\n'%(field_type.ql_name(), capitalize_name(name))) + if field_type.super_type: + field_type = field_type.super_type + fields = make_fields(field_type, offset) + txt.append(u' %s(%s)\n' % (field_type.relation_name(), fields)) + txt.append(u' }\n\n') + if field_type.is_list(): + item = field_type.item_type + lname = longer_name(node, singularize(name), singularize_text(docname)) + txt.append('\n') + txt.append(' /** Gets the nth %s. */\n' % lname) + txt.append(' %s get%s(int index) {\n' % + (item.ql_name(), capitalize_name(singularize(name)))) + txt.append(' result = this.get%s().getItem(index)\n' % + capitalize_name(name)) + txt.append(' }\n') + txt.append('\n') + txt.append(' /** Gets %s %s. */\n' % (indefinite_article(lname), lname)) + txt.append(' %s %s() {\n' % (item.ql_name(), get_a(name))) + txt.append(' result = this.get%s().getAnItem()\n' % + capitalize_name(name)) + txt.append(' }\n\n') + + return ''.join(txt) + +def defined_in_supertype(node, name): + if node.super_type: + for fname, _, _, _, _, _ in node.super_type.layout: + if fname == name: + return True + return False + + +def write_queries(nodes, out, lang): + parents = {} + nodes = set(nodes) + done = set() + out.write('import %s\n\n' % lang) + while nodes: + #Emit in (mostly) sorted order to reduce diffs. + node = pop_least_value(nodes) + done.add(node) + if node.is_primitive(): + continue + if node.is_list() and node.item_type.is_union_type(): + #List of unions are best ignored. + #They can be implemented manually if needed. + continue + out.write('/** INTERNAL: See the class `%s` for further information. */\n' % node.ql_name()) + out.write('class %s_ extends %s' % + (node.ql_name(), node.db_name())) + if node.super_type: + out.write(', %s' % node.super_type.ql_name()) + override = "override " if node.super_type else "" + out.write(' {\n\n') + if node.is_sub_type() and node.super_type.is_union_type(): + out.write(' %s() {\n' % node.ql_name()) + out.write(' %s(this, %d, _, _' % + (node.super_type.relation_name(), node.case_index)) + out.write(')\n') + out.write(' }\n\n') + else: + body = [] + for name, field_type, offset, docname, _, _ in node.layout: + if defined_in_supertype(node, name): + continue + body.append(make_getter(node, name, offset, field_type, docname, override)) + out.write(''.join(body)) + if node.parents: + if node.super_type and node.super_type.is_case_type(): + child_node = node.super_type + else: + child_node = node + #Ensure closure + if child_node.parents not in done: + nodes.add(child_node.parents) + if not override: + out.write(' /** Gets a parent of this %s */\n' % node.descriptive_name) + out.write(' %s%s getParent() {\n' % + (override, child_node.parents.ql_name())) + out.write(' %s(' % child_node.relation_name()) + fields = [ 'this', ] + if child_node.is_case_type(): + fields.append('_') + fields.append('result') + if not child_node.unique_parent: + fields.append('_') + out.write('%s)\n' % ', '.join(fields)) + out.write(' }\n\n') + if child_node.parents.ql_name() not in parents: + parents[child_node.parents.ql_name()] = [] + parents[child_node.parents.ql_name()].append(child_node) + if node.is_list(): + fields = [ 'result'] + item = node.item_type + if item.super_type and item.super_type.is_case_type(): + item = item.super_type + if item.is_case_type(): + fields.append('_') + fields.append('this') + fields = ', '.join(fields) + out.write(' /** Gets an item of this %s */\n' % node.descriptive_name) + out.write(' %s getAnItem() {\n' % item.ql_name()) + out.write(' %s(%s, _)\n' % + (item.relation_name(), fields)) + out.write(' }\n\n') + out.write(' /** Gets the nth item of this %s */\n' % node.descriptive_name) + out.write(' %s getItem(int index) {\n' % item.ql_name()) + out.write(' %s(%s, index)\n' % + (item.relation_name(), fields)) + out.write(' }\n\n') + if not override: + out.write(' /** Gets a textual representation of this element. */\n') + out.write(' %sstring toString() {\n' % override) + out.write(' result = "%s"\n' % node.ql_name()) + out.write(' }\n') + out.write('\n}\n\n') + out.close() + +def pop_least_value(nodes): + #This is inefficient, but it doesn't matter + res = min(nodes, key = lambda n: n.__name__) + nodes.remove(res) + return res + + +HEADER = '''/** + * This library file is auto-generated by '%s'. + * WARNING: Any modifications to this file will be lost. + * Relations can be changed by modifying master.py. + */ +''' + +def main(): + run(master) + +def run(nodes_module, lang="python"): + if len(sys.argv) != 2: + print("Usage: %s output-directory" % sys.argv[0]) + sys.exit(1) + outdir = sys.argv[1] + nodes = nodes_module.all_nodes() + outfile = os.path.join(outdir, 'AstGenerated.qll') + with open(outfile, 'w') as out: + out.write(HEADER % '/'.join(__file__.split(os.path.sep)[-2:])) + write_queries(nodes.values(), out, lang) + +if __name__ == '__main__': + main() diff --git a/python/extractor/semmle/thrift/__init__.py b/python/extractor/semmle/thrift/__init__.py new file mode 100644 index 00000000000..52c640f138c --- /dev/null +++ b/python/extractor/semmle/thrift/__init__.py @@ -0,0 +1,34 @@ +import os.path + +from .parse import Parser +from .emit import Emitter + +class Extractor(object): + + def __init__(self, trap_folder, src_archive=None): + self.parser = Parser() + self.emitter = Emitter(trap_folder) + self.src_archive = src_archive + + def _walk(self, path): + for dirpath, _, filenames in os.walk(path): + for filename in filenames: + if filename.endswith(".thrift"): + yield os.path.join(dirpath, filename) + + def extract_files(self, files): + for file in files: + self.extract_file(file) + + def extract_folder(self, path): + for file in self._walk(path): + self.extract_file(file) + + def extract_file(self, file): + with open(file, "rb") as fd: + bytes_source = fd.read() + src = bytes_source.decode('utf-8') + tree = self.parser.parse(src) + self.emitter.emit(file, tree) + if self.src_archive: + self.src_archive.write(file, bytes_source) diff --git a/python/extractor/semmle/thrift/emit.py b/python/extractor/semmle/thrift/emit.py new file mode 100644 index 00000000000..bd0c8c27faa --- /dev/null +++ b/python/extractor/semmle/thrift/emit.py @@ -0,0 +1,52 @@ + +import os.path +import csv +import re +import semmle.util + +IGNORE = re.compile("namespace|fieldreq") + +class Emitter(object): + + def __init__(self, trap_folder): + self.trap_folder = trap_folder + self.lengths = {} + self.next_id = 0 + self.uuid = semmle.util.uuid('thrift') + + def emit(self, file, tree): + trapwriter = semmle.util.TrapWriter() + vpath = self.trap_folder.get_virtual_path(file) + self.emit_recursive(trapwriter, vpath, tree, None, None) + trapwriter.write_file(vpath) + self.trap_folder.write_trap("thrift", file, trapwriter.get_compressed()) + + def emitrow(self, trapwriter, kind, *args): + if kind in self.lengths: + if len(args) != self.lengths[kind]: + raise Exception("Inconsistent row for '%s': %s, expecting %d" % (kind, args, self.lengths[kind])) + else: + self.lengths[kind] = len(args) + qpath = "thrift-"+kind + id = trapwriter.get_unique_id() + for index, value in enumerate(args): + trapwriter.write_tuple("externalData", "rsds", id, qpath, index, value) + + def emit_recursive(self, trapwriter, file, node, index, parent): + self.next_id += 1 + if hasattr(node, "type"): + tag = node.type + assert index >= 0 + name = "%s-%s-%s" % (tag, self.next_id, self.uuid) + self.emitrow(trapwriter, tag, name, index, parent, node.value, file, node.line, node.column) + else: + tag = node.data + if IGNORE.match(tag): + return + name = "%s-%s-%s" % (node.data, self.next_id, self.uuid) + for cindex, child in enumerate(node.children): + self.emit_recursive(trapwriter, file, child, cindex, name) + if index is None: + self.emitrow(trapwriter, tag, name) + else: + self.emitrow(trapwriter, tag, name, index, parent) diff --git a/python/extractor/semmle/thrift/parse.py b/python/extractor/semmle/thrift/parse.py new file mode 100644 index 00000000000..bf1379a9057 --- /dev/null +++ b/python/extractor/semmle/thrift/parse.py @@ -0,0 +1,83 @@ + +# This grammar is based on https://github.com/apache/thrift/blob/master/doc/specs/idl.md +grammar = r""" +start : document +document : header* definition* +header : include | cppinclude | namespace +include : "include" LITERAL +cppinclude : "cpp_include" LITERAL +namespace : ( "namespace" ( namespacescope name ) + | ( "smalltalk.prefix" name ) ) + | ( "php_namespace" LITERAL ) + | ( "xsd_namespace" LITERAL ) +!namespacescope : "*" | IDENTIFIER +definition : const | typedef | enum | senum | struct | union | exception | service +const : "const" fieldtype name "=" constvalue _listseparator? +typedef : "typedef" definitiontype type_annotations name type_annotations _listseparator? +enum : "enum" name "{" enumfield* "}" type_annotations +enumfield : name enumvalue type_annotations _listseparator? +enumvalue : ("=" INTCONSTANT)? +senum : "senum" name "{" senumfield* "}" +senumfield : LITERAL _listseparator? +struct : "struct" name "xsd_all"? "{" field* "}" type_annotations +name : IDENTIFIER +union : "union" name "xsd_all"? "{" field* "}" +exception : "exception" name "{" field* "}" +service : "service" name extends? "{" function* "}" type_annotations +extends : "extends" IDENTIFIER +field : fieldid fieldreq fieldtype type_annotations IDENTIFIER fieldvalue xsdfieldoptions type_annotations _listseparator? +fieldvalue : ("=" constvalue)? +fieldid : (INTCONSTANT ":")? +fieldreq : ("required" | "optional")? +?xsdfieldoptions: "xsd_optional"? "xsd_nillable"? xsdattrs? +xsdattrs : "xsd_attrs" "{" field* "}" +function : oneway functiontype name "(" field* ")" throws type_annotations _listseparator? +oneway : ("oneway")? +!functiontype : fieldtype | "void" +throws : ( "throws" "(" field* ")" )? +fieldtype : IDENTIFIER | basetype | containertype +definitiontype : IDENTIFIER | basetype | containertype +!basetype : "bool" | "byte" | "i8" | "i16" | "i32" | "i64" | "double" | "string" | "binary" | "slist" +containertype : maptype | settype | listtype +maptype : "map" cpptype? "<" fieldtype "," fieldtype ">" +settype : "set" cpptype? "<" fieldtype ">" +listtype : "list" "<" fieldtype ">" cpptype? +cpptype : "cpp_type" LITERAL +!constvalue : INTCONSTANT | DOUBLECONSTANT | LITERAL | IDENTIFIER | constlist | constmap +INTCONSTANT : ("+" | "-")? DIGIT+ +DOUBLECONSTANT : ("+" | "-")? DIGIT* "." DIGIT+ ( ("E" | "e") INTCONSTANT )? +constlist : "[" constlistelt* "]" +constlistelt : constvalue _listseparator? +constmap : "{" constmapelt* "}" +constmapelt : constvalue ":" constvalue _listseparator? + +type_annotations : ( "(" type_annotation* ")" )? +type_annotation : name "=" constvalue _listseparator? + +LITERAL : ("\"" /[^"]/* "\"") | ("'" /[^']/* "'") +IDENTIFIER : ( LETTER | "_" ) ( LETTER | DIGIT | "." | "_" )* +_listseparator : "," | ";" +LETTER : "A".."Z" | "a".."z" +DIGIT : "0".."9" +WHITESPACE : (" " | "\t" | "\r" | "\n")+ + +%import common.NEWLINE +COMMENT : "/*" /(.|\n|\r)*?/ "*/" + | "//" /(.)*/ NEWLINE + | "#" /(.)*/ NEWLINE +%ignore WHITESPACE +%ignore COMMENT +""" + + + + +from lark import Lark + +class Parser(Lark): + + def __init__(self): + Lark.__init__(self, grammar, parser="earley", lexer="standard") + +def parse(src): + return parser.parse(src) diff --git a/python/extractor/semmle/traverser.py b/python/extractor/semmle/traverser.py new file mode 100644 index 00000000000..ad8bd38ae73 --- /dev/null +++ b/python/extractor/semmle/traverser.py @@ -0,0 +1,157 @@ + +'''The traverser is the front-end of the Python extractor. It walks the file system yielding +a sequence of modules to be queued up and processed by the back-end.''' + +import re +import os.path + +from semmle.path_filters import filter_from_pattern +from semmle.util import Extractable, PY_EXTENSIONS, isdir, islink, listdir +from semmle.python import finder, modules +from semmle.worker import ExtractorFailure + +try: + FileNotFoundError +except NameError: + FileNotFoundError = IOError + +__all__ = [ 'Traverser' ] + +class Traverser(object): + '''Default iterable of extractables for the Python extractor, + as specified by the command line options and environment variables. + ''' + + def __init__(self, options, modulenames, logger): + self.paths = set() + if options.files: + py_files = options.files + for p in py_files: + if not os.path.exists(p) and not options.ignore_missing_modules: + raise FileNotFoundError("'%s' does not exist." % p) + self.paths.add(p) + self.exclude_paths = set([ os.path.abspath(f) for f in options.exclude_file ]) + self.exclude = exclude_filter_from_options(options) + self.filter = filter_from_options_and_environment(options) + self.recurse_files = options.recurse_files + self.recurse_packages = options.recursive + self.modulenames = modulenames + self.finder = finder.Finder.from_options_and_env(options, logger) + self.logger = logger + self.ignore_missing_modules = options.ignore_missing_modules + + def __iter__(self): + '''Return an iterator over all the specified files''' + for name in self.modulenames: + if not self.exclude(name): + mod = self.finder.find(name) + if mod is None: + self.logger.error("No module named '%s'.", name) + raise ExtractorFailure() + yield mod.get_extractable() + for path in self.paths: + yield Extractable.from_path(path) + for path in self.recurse_files: + for modpath in self._treewalk(path): + yield Extractable.from_path(modpath) + for name in self.recurse_packages: + mod = self.finder.find(name) + if mod is None: + if self.ignore_missing_modules: + continue + self.logger.error("Package '%s' does not exist.", name) + raise ExtractorFailure() + path = mod.path + if path is None: + self.logger.error("Package '%s' does not have a path.", name) + raise ExtractorFailure() + for modpath in self._treewalk(path): + yield Extractable.from_path(modpath) + + def _treewalk(self, path): + '''Recursively walk the directory tree, skipping sym-links and + hidden files and directories.''' + #Note that if a path is both explicitly specified *and* specifically excluded, + #then the inclusion takes priority + + path = os.path.abspath(path) + self.logger.debug("Traversing %s", path) + filenames = listdir(path) + for filename in filenames: + fullpath = os.path.join(path, filename) + if islink(fullpath): + self.logger.debug("Ignoring %s (symlink)", fullpath) + continue + if isdir(fullpath): + if fullpath in self.exclude_paths or is_hidden(fullpath): + if is_hidden(fullpath): + self.logger.debug("Ignoring %s (hidden)", fullpath) + else: + self.logger.debug("Ignoring %s (excluded)", fullpath) + else: + empty = True + for item in self._treewalk(fullpath): + yield item + empty = False + if not empty: + yield fullpath + elif self.filter(fullpath): + yield fullpath + else: + self.logger.debug("Ignoring %s (filter)", fullpath) + + +if os.name== 'nt': + import ctypes + + def is_hidden(path): + #Magical windows code + try: + attrs = ctypes.windll.kernel32.GetFileAttributesW(str(path)) + if attrs == -1: + return False + if attrs&2: + return True + except Exception: + #Not sure what to log here, probably best to carry on. + pass + return os.path.basename(path).startswith(".") + +else: + + def is_hidden(path): + return os.path.basename(path).startswith(".") + + +def exclude_filter_from_options(options): + if options.exclude_package: + choices = '|'.join(mod.replace('.', r'\.') for mod in options.exclude_package) + pattern = r'(?:%s)(?:\..+)?' % choices + if options.exclude_pattern: + pattern = '^((?:%s)|(?:%s))$' % (pattern, options.exclude_pattern) + else: + pattern = '^%s$' % pattern + elif options.exclude_pattern: + pattern = '^(?:%s)$' % options.exclude_pattern + else: + def no_filter(name): + return False + return no_filter + matcher = re.compile(pattern) + def exclude_filter(name): + return name is not None and bool(matcher.match(name)) + return exclude_filter + +def base_filter(path): + _, ext = os.path.splitext(path) + return ext in PY_EXTENSIONS or not ext and modules.is_script(path) + +def filter_from_options_and_environment(options): + the_filter = base_filter + filter_prefix = "" + src_path = os.environ.get("LGTM_SRC", None) + if src_path is not None: + filter_prefix = os.path.join(src_path, "") + for line in options.path_filter: + the_filter = filter_from_pattern(line, the_filter, filter_prefix) + return the_filter diff --git a/python/extractor/semmle/util.py b/python/extractor/semmle/util.py new file mode 100644 index 00000000000..85868a79351 --- /dev/null +++ b/python/extractor/semmle/util.py @@ -0,0 +1,574 @@ +import sys +import codecs +import gzip +import re +import os.path +import random +import base64 +import hashlib +from io import BytesIO + +#Semantic version of extractor. +#Update this if any changes are made +VERSION = "6.1.1" + +PY_EXTENSIONS = ".py", ".pyw" + +STDLIB_PATH = os.path.dirname(os.__file__) + +def get_analysis_version(): + return PYTHON_ANALYSIS_VERSION + +def get_analysis_major_version(): + return PYTHON_ANALYSIS_MAJOR_VERSION + +def update_analysis_version(version): + global PYTHON_ANALYSIS_VERSION + PYTHON_ANALYSIS_VERSION = version + global PYTHON_ANALYSIS_MAJOR_VERSION + PYTHON_ANALYSIS_MAJOR_VERSION = 2 if PYTHON_ANALYSIS_VERSION.startswith("2") else 3 + +update_analysis_version(os.environ.get("CODEQL_EXTRACTOR_PYTHON_ANALYSIS_VERSION", "3")) + +#Flow graph labels: +#These should be powers of two, to allow use of bitsets. +NORMAL_EDGE = 1 +FALSE_EDGE = 2 +TRUE_EDGE = 4 +EXCEPTIONAL_EDGE = 8 +EXHAUSTED_EDGE = 16 + +class SemmleError(Exception): + 'Custom Error class, for reporting errors.' + pass + +#Define our own printf function to avoid Python2/3 problems. +def printf(fmt, *args): + 'Format arguments using % operator and print to sys.stdout' + sys.stdout.write(fmt % args) + +def fprintf(fout, fmt, *args): + 'Format arguments using % operator and print to file' + fout.write(fmt % args) + +def safe_string(txt): + #Replace all characters after the first 10k + if len(txt) > 10000: + txt = txt[:10000] + u"..." + return txt.replace(u'"', u'""') + +def escaped_string(txt): + return txt.replace(u'"', u'""') + + +if os.name == 'nt': + + MAGIC_PREFIX = u"\\\\?\\" + + def safe_path(path): + 'Returns an absolute path, safe for use on all OSes regardless of length.' + if path.startswith(MAGIC_PREFIX): + return path + return MAGIC_PREFIX + os.path.abspath(path) + + _open = open + + def open(path, *args): + assert safe_path(path) == path + return _open(path, *args) + +else: + + def safe_path(path): + 'Returns an absolute path, safe for use on all OSes regardless of length.' + if os.path.isabs(path): + return path + return os.path.abspath(path) + +AUTO_GEN_STRING = "/* AUTO GENERATED PART STARTS HERE */\n" + +def folder_tag(name): + return name + ';folder' + +def trap_id_escape(s): + """Escapes characters that are interpreted specially in TRAP IDs""" + s = s.replace("&", "&") + s = s.replace("{", "{") + s = s.replace("}", "}") + s = s.replace('"', """) + s = s.replace('@', "@") + s = s.replace('#', "#") + return s + +def generate_formatting_function(fmt): + '''Generate a new function that writes its arguments with the given format. + For example, for the format string "dd", this function will create the following function: + def format_ss(self, name, arg0, arg1): + self.out.write(u'%s(%s %s)\\n' % (name, str(arg0), str(arg1))) + ''' + func_name = 'format_' + fmt + args = ['self', 'name'] + [ 'arg%d' % i for i in range(len(fmt)) ] + defn = 'def %s(%s):\n' % (func_name, ', '.join(args)) + values = [ _formatting_functions[f](a) for f, a in zip(fmt, args[2:])] + format_string = "u'%s(" + ', '.join(['%s'] * len(fmt)) + ")\\n'" + body = ' self.out.write(%s %% (%s))\n' % (format_string, ',\n'.join(['name'] + values)) + func = defn + body + namespace = globals() + exec (func, namespace) + function = namespace[func_name] + del namespace[func_name] + return function + +def _format_d(val): + return 'repr(%s)' % val + +def _format_g(val): + return 'self.pool.get(%s, %s)' % (val, val) + +def _format_n(val): + return '''self.pool.get(%s, %s.trap_name) if hasattr(%s, 'trap_name') else self.pool.get(%s)''' % (val, val, val, val) + +def _format_r(val): + return val + +def _format_u(val): + return '''_INVALID_RE.sub(u'\uFFFD', u'"%%s"' %% safe_string(%s))''' % val + +def _format_b(val): + return '''u'"%%s"' %% safe_string(%s.decode("latin-1"))''' % val + +def _format_s(val): + return '''%s if isinstance(%s, bytes) else _INVALID_RE.sub(u'\uFFFD', u'"%%s"' %% safe_string(str(%s)))''' % (_format_b(val), val, val) + +def _format_B(val): + return '''u'"%%s"' %% escaped_string(%s.decode("latin-1"))''' % val + +def _format_S(val): + return '''%s if isinstance(%s, bytes) else _INVALID_RE.sub(u'\uFFFD', u'"%%s"' %% escaped_string(str(%s)))''' % (_format_B(val), val, val) + +def _format_x(val): + return '''(u"false", u"true")[%s]''' % val + +def _format_q(val): + return 'format_numeric_literal(%s)' % val + +_formatting_functions = { + 'b' : _format_b, + 'd' : _format_d, + 'g' : _format_g, + 'n' : _format_n, + 'r' : _format_r, + 's' : _format_s, + 'u' : _format_u, + 'x' : _format_x, + 'q' : _format_q, + 'B' : _format_B, + 'S' : _format_S, +} + + +def format_numeric_literal(val): + txt = repr(val) + return u'"%s"' % txt + +class Buffer(object): + def __init__(self, out): + self.out = out + self.buf = [] + + def write(self, content): + self.buf.append(content) + if len(self.buf) > 10000: + self.flush() + + def close(self): + self.flush() + self.out.close() + + def flush(self): + self.out.write(u''.join(self.buf)) + self.buf = [] + +class Utf8Zip(object): + + def __init__(self): + self.raw = BytesIO() + gout = gzip.GzipFile('', 'wb', 5, fileobj=self.raw) + self.out = codecs.getwriter('utf-8')(gout, errors='backslashreplace') + + def write(self, data): + self.out.write(data) + + def close(self): + self.out.close() + + def getvalue(self): + return self.raw.getvalue() + + +class TrapWriter(object): + + _format_functions = {} + + def __init__(self): + self.zip = Utf8Zip() + self.out = Buffer(self.zip) + self.pool = IDPool(self.out) + self.written_containers = {} + + def write_tuple(self, name, fmt, *args): + '''Write tuple accepts the following format characters: + 'b' : A bytes object. Limits the resulting string to ~10k. + 'd' : An integer + 'g' : A unicode object, as a globally shared object + 'n' : A node object (any AST, flow or variable node) + 'r' : "Raw", a precomputed id or similar. + 's' : Any object to be written as a unicode string. Limits the string to ~10k. + 'u' : A unicode object, as a string + 'x' : A boolean + 'B' : Like 'b' but not limited to 10k + 'S' : Like 's' but not limited to 10k + ''' + if fmt in self._format_functions: + return self._format_functions[fmt](self, name, *args) + func = generate_formatting_function(fmt) + self._format_functions[fmt] = func + return func(self, name, *args) + + def get_node_id(self, node): + if hasattr(node, 'trap_name'): + return self.pool.get(node, node.trap_name) + else: + return self.pool.get(node) + + def has_written(self, node): + return node in self.pool.pool + + def get_unique_id(self): + return self.pool.get_unique_id() + + '''Return an id that is shared across trap files, + whenever the label is used''' + def get_labelled_id(self, obj, label): + return self.pool.get(obj, label) + + def write_container(self, fullpath, is_file): + if fullpath in self.written_containers: + return self.written_containers[fullpath] + folder, filename = os.path.split(fullpath) + if is_file: + tag = get_source_file_tag(fullpath) + self.write_tuple(u'files', 'gs', tag, fullpath) + else: + tag = get_folder_tag(fullpath) + self.write_tuple(u'folders', 'gs', tag, fullpath) + self.written_containers[fullpath] = tag + if folder and filename: + folder_tag = self.write_container(folder, False) + self.write_tuple(u'containerparent' , 'gg', folder_tag, tag) + return tag + + def write_file(self, fullpath): + '''Writes `files` tuple plus all container tuples, up to the root. + Returns the tag. + Records tuples written to avoid duplication. + ''' + return self.write_container(fullpath, True) + + def write_folder(self, fullpath): + '''Writes `folders` tuple plus all container tuples, up to the root. + Returns the tag. + Records tuples written to avoid duplication. + ''' + return self.write_container(fullpath, False) + + def get_compressed(self): + '''Returns the gzipped compressed, utf-8 encoded contents of this trap file. + Closes the underlying zip stream, which means that no more tuples can be added.''' + self.out.close() + return self.zip.getvalue() + + def write_comment(self, text): + self.out.write(u'// %s\n' % text) + +# RegEx to find invalid characters +_INVALID_RE = re.compile(u'[^\u0000-\uD7FF\uE000-\uFFFF]', re.UNICODE) + +class _HashableList(object): + 'Utility class for handling lists in the IDPool' + + def __init__(self, items): + self.items = items + + def __eq__(self, other): + if not isinstance(other, _HashableList): + return False + return self.items is other.items + + def __ne__(self, other): + if not isinstance(other, _HashableList): + return True + return self.items is not other.items + + def __hash__(self): + return id(self.items) + +class IDPool(object): + + def __init__(self, out, init_id = 10000): + self.out = out + self.pool = {} + self.next_id = init_id + + def get_unique_id(self): + res = u'#' + str(self.next_id) + self.out.write(res + u' = *\n') + self.next_id += 1 + return res + + def get(self, node, name=None): + """Gets the ID for the given node, creating a new one if necessary. + Inside name (if supplied), the characters &, {, }, ", @, and # will be escaped, + as these have special meaning in TRAP IDs + """ + #Need to special case lists as they are unhashable + if type(node) is list: + node = _HashableList(node) + if node in self.pool: + return self.pool[node] + next_id = (u'#' + + str(self.next_id)) + if name is not None: + name = str(name) + name = u'@"%s"' % safe_string(trap_id_escape(name)) + else: + name = u'*' + self.out.write(u"%s = %s\n" % (next_id, name)) + self.pool[node] = next_id + self.next_id += 1 + return next_id + + +def get_folder_tag(folder): + return '/'.join(folder.split(os.path.sep)) + ';folder' + + +def get_source_file_tag(fullpath): + return fullpath, sys.getfilesystemencoding() + u';sourcefile' + +def makedirs(path): + try: + os.makedirs(path) + except OSError: + #If directory does not exist then error was a real one. + if not os.path.isdir(path): + raise + +def clean_cache(subdir, suffix, verbose): + #Remove any pre-existing cached files as they are now out of date + if os.path.exists(subdir): + for filename in os.listdir(subdir): + if not filename.endswith(suffix): + continue + filepath = os.path.join(subdir, filename) + try: + if verbose: + print ("Deleting stale trap file: " + filepath) + os.remove(filepath) + except Exception as ex: + if verbose: + msg = "Failed to remove stale trap file %s due to %s" + print (msg % (filepath, repr(ex))) + else: + makedirs(subdir) + +if os.name == 'nt': + + def storage_path(container, path): + ''' Returns a path in a source archive, trap-output or trap-cache.''' + path = path.replace(":", "_") + if os.path.isabs(path): + path = path[1:] + return safe_path(os.path.join(container, path)) + + def isdir(path): + if len(path) > 240: + path = "\\\\?\\" + path + return os.path.isdir(path) + + def islink(path): + if len(path) > 240: + path = "\\\\?\\" + path + return os.path.islink(path) + + def listdir(path): + if len(path) > 240: + path = "\\\\?\\" + path + return os.listdir(path) + +else: + + def storage_path(container, path): + ''' Returns a path in a source archive, trap-output or trap-cache.''' + if os.path.isabs(path): + path = path[1:] + return safe_path(os.path.join(container, path)) + + isdir = os.path.isdir + islink = os.path.islink + listdir = os.listdir + + +LATIN1 = codecs.lookup("latin-1") +UTF8 = codecs.lookup("utf-8") + +def was_interned_ascii_bytes(txt): + return txt is sys.intern(txt[:]) + +def is_a_number(txt): + try: + float(txt) + return True + except ValueError: + return False + + +#Should only be set to True for debugging and testing +USE_INTOLERANT_ENCODING = False + +def change_default_encoding(): + + if USE_INTOLERANT_ENCODING: + + def _decode(input, errors=None): + '''If the input is interned (program source) or a number, then it is safe to implicitly convert it. + Otherwise it may not be, so raise an exception''' + if not was_interned_ascii_bytes(input) and not is_a_number(input): + f = sys._getframe(1) + if "semmle" in f.f_code.co_filename: + raise SemmleError(b"Implicit decode of '%s' at %s:%d" % (input, f.f_code.co_filename, f.f_lineno)) + try: + return UTF8.decode(input) + except UnicodeDecodeError: + return LATIN1.decode(input) + + def _encode(input, errors=None): + f = sys._getframe(1) + if "semmle" in f.f_code.co_filename: + raise SemmleError("Implicit encode of '%s' at %s:%d" % (UTF8.encode(input), f.f_code.co_filename, f.f_lineno)) + return UTF8.encode(input, "backslashreplace") + + else: + + def _decode(input, errors=None): + '''Convert bytes to unicode without failing.''' + try: + return UTF8.decode(input) + except UnicodeDecodeError: + return LATIN1.decode(input) + + def _encode(input, errors=None): + '''Convert unicode to bytes without failing.''' + return UTF8.encode(input, "backslashreplace") + + def search(name): + if name != "safe": + return None + return codecs.CodecInfo(_encode, _decode, name="safe") + codecs.register(search) + from importlib import reload + reload(sys) + sys.setdefaultencoding("safe") + del sys.setdefaultencoding + +_sys_rand = random.SystemRandom() + +def uuid(local_name): + '''Return a randomised string to use as a UUID. + Do not use the uuid module as it calls out to ldconfig, + which is prohibited in some sandboxed environments. + ''' + hex_string = hex(_sys_rand.randrange(1 << 256)) + #Strip leading '0x' + return hex_string[2:] + "-" + local_name + + +class Extractable(object): + '''Extractable class representing a Extractable of extraction. + Typically a file, but may be other things like a built-in Python module. + ''' + + def __ne__(self, other): + return not self == other + + @staticmethod + def from_path(path): + if os.path.isdir(path): + return FolderExtractable(path) + elif os.path.isfile(path): + return FileExtractable(path) + else: + raise IOError("% does not exist" % path) + +class PathExtractable(Extractable): + + PATTERN = 421706893 + + __slots__ = [ 'path' ] + + def __init__(self, path): + assert "<compiled code>" not in path + self.path = path + + def __eq__(self, other): + return isinstance(other, type(self)) and self.path == other.path + + def __hash__(self): + return hash(self.path) ^ self.PATTERN + +class FileExtractable(PathExtractable): + + PATTERN = 1903946595 + + __slots__ = [ 'path' ] + + def __str__(self): + return "file " + self.path + + def __repr__(self): + return "FileExtractable(%r)" % self.path + + +class FolderExtractable(PathExtractable): + + PATTERN = 712343093 + + __slots__ = [ 'path' ] + + def __str__(self): + return "folder " + self.path + + def __repr__(self): + return "FolderExtractable(%r)" % self.path + +class BuiltinModuleExtractable(Extractable): + + __slots__ = [ 'name' ] + + def __init__(self, name): + self.name = name + + def __str__(self): + return "module " + self.name + + def __repr__(self): + return "BuiltinModuleExtractable(%r)" % self.name + + def __eq__(self, other): + return isinstance(other, BuiltinModuleExtractable) and self.name == other.name + + def __hash__(self): + return hash(self.name) ^ 82753421 + +def base64digest(code): + return base64.b64encode(hashlib.sha1(code.encode("utf8")).digest(), b"_-").decode("ascii") diff --git a/python/extractor/semmle/worker.py b/python/extractor/semmle/worker.py new file mode 100644 index 00000000000..1207caf6727 --- /dev/null +++ b/python/extractor/semmle/worker.py @@ -0,0 +1,305 @@ +import sys, os +from collections import deque, defaultdict +import time +import multiprocessing as mp +import json + +from queue import Empty as _Empty +from queue import Full as _Full + +from semmle.extractors import SuperExtractor, ModulePrinter, SkippedBuiltin +from semmle.profiling import get_profiler +from semmle.path_rename import renamer_from_options_and_env +from semmle.logging import WARN, recursion_error_message, internal_error_message, Logger + +class ExtractorFailure(Exception): + 'Generic exception representing the failure of an extractor.' + pass + + +class ModuleImportGraph(object): + + def __init__(self, max_depth): + self.modules = {} + self.succ = defaultdict(set) + self.todo = set() + self.done = set() + self.max_depth = max_depth + + def add_root(self, mod): + self.modules[mod] = 0 + if mod not in self.done: + self.todo.add(mod) + + def add_import(self, mod, imported): + assert mod in self.modules + self.succ[mod].add(imported) + if imported in self.modules: + if self.modules[imported] > self.modules[mod] + 1: + self._reduce_depth(imported, self.modules[mod] + 1) + else: + if self.modules[mod] < self.max_depth and imported not in self.done: + self.todo.add(imported) + self.modules[imported] = self.modules[mod] + 1 + + def _reduce_depth(self, mod, depth): + if self.modules[mod] <= depth: + return + if depth > self.max_depth: + return + if mod not in self.done: + self.todo.add(mod) + self.modules[mod] = depth + for imp in self.succ[mod]: + self._reduce_depth(imp, depth+1) + + def get(self): + mod = self.todo.pop() + assert not mod in self.done and self.modules[mod] <= self.max_depth + self.done.add(mod) + return mod + + def push_back(self, mod): + self.done.remove(mod) + self.todo.add(mod) + + def empty(self): + return not self.todo + +class ExtractorPool(object): + '''Pool of worker processes running extractors''' + + def __init__(self, outdir, archive, proc_count, options, logger: Logger): + if proc_count < 1: + raise ValueError("Number of processes must be at least one.") + self.verbose = options.verbose + self.outdir = outdir + self.max_import_depth = options.max_import_depth + # macOS does not support `fork` properly, so we must use `spawn` instead. + method = 'spawn' if sys.platform == "darwin" else None + try: + ctx = mp.get_context(method) + except AttributeError: + # `get_context` doesn't exist -- we must be running an old version of Python. + ctx = mp + #Keep queue short to minimise delay when stopping + self.module_queue = ctx.Queue(proc_count*2) + self.reply_queue = ctx.Queue(proc_count*20) + self.archive = archive + self.local_queue = deque() + self.enqueued = set() + self.done = set() + self.requirements = {} + self.import_graph = ModuleImportGraph(options.max_import_depth) + logger.debug("Source archive: %s", archive) + self.logger = logger + DiagnosticsWriter.create_output_dir() + args = (self.module_queue, outdir, archive, options, self.reply_queue, logger) + self.procs = [ + ctx.Process(target=_extract_loop, args=(n+1,) + args + (n == 0,)) for n in range(proc_count) + ] + for p in self.procs: + p.start() + self.start_time = time.time() + + def extract(self, the_traverser): + '''Extract all the files from the given traverser, + and all the imported files up to the depth specified + by the options. + ''' + self.logger.trace("Starting traversal") + for mod in the_traverser: + self.import_graph.add_root(mod) + self.try_to_send() + self.receive(False) + #Prime the queue + while self.try_to_send(): + pass + while self.enqueued or not self.import_graph.empty(): + self.try_to_send() + self.receive(True) + + def try_to_send(self): + if self.import_graph.empty(): + return False + module = self.import_graph.get() + try: + self.module_queue.put(module, False) + self.enqueued.add(module) + self.logger.debug("Enqueued %s", module) + return True + except _Full: + self.import_graph.push_back(module) + return False + + def receive(self, block=False): + try: + what, mod, imp = self.reply_queue.get(block) + if what == "INTERRUPT": + self.logger.debug("Main process received interrupt") + raise KeyboardInterrupt + elif what == "UNRECOVERABLE_FAILURE": + raise ExtractorFailure(str(mod)) + elif what == "FAILURE": + self.enqueued.remove(mod) + elif what == "SUCCESS": + self.enqueued.remove(mod) + else: + assert what == "IMPORT" + assert mod is not None + if imp is None: + self.logger.warning("Unexpected None as import.") + else: + self.import_graph.add_import(mod, imp) + except _Empty: + #Nothing in reply queue. + pass + + def close(self): + self.logger.debug("Closing down workers") + assert not self.enqueued + for p in self.procs: + self.module_queue.put(None) + for p in self.procs: + p.join() + self.logger.info("Processed %d modules in %0.2fs", len(self.import_graph.done), time.time() - self.start_time) + + def stop(self, timeout=2.0): + '''Stop the worker pool, reasonably promptly and as cleanly as possible.''' + try: + _drain_queue(self.module_queue) + for p in self.procs: + self.module_queue.put(None) + _drain_queue(self.reply_queue) + end = time.time() + timeout + running = set(self.procs) + while running and time.time() < end: + time.sleep(0.1) + _drain_queue(self.reply_queue) + running = {p for p in running if p.is_alive()} + if running: + for index, proc in enumerate(self.procs, 1): + if proc.is_alive(): + self.logger.error("Process %d timed out", index) + except Exception as ex: + self.logger.error("Unexpected error when stopping %s", ex) + + @staticmethod + def from_options(options, trap_dir, archive, logger: Logger): + '''Convenience method to create extractor pool from options.''' + cpus = mp.cpu_count() + procs = options.max_procs + if procs == 'all': + procs = cpus + elif procs is None or procs == 'half': + procs = (cpus+1)//2 + else: + procs = int(procs) + return ExtractorPool(trap_dir, archive, procs, options, logger) + +def _drain_queue(queue): + try: + while True: + queue.get(False) + except _Empty: + #Emptied queue as best we can. + pass + +class DiagnosticsWriter(object): + def __init__(self, proc_id): + self.proc_id = proc_id + + def write(self, message): + dir = os.environ.get("CODEQL_EXTRACTOR_PYTHON_DIAGNOSTIC_DIR") + if dir: + with open(os.path.join(dir, "worker-%d.jsonl" % self.proc_id), "a") as output_file: + output_file.write(json.dumps(message.to_dict()) + "\n") + + @staticmethod + def create_output_dir(): + dir = os.environ.get("CODEQL_EXTRACTOR_PYTHON_DIAGNOSTIC_DIR") + if dir: + os.makedirs(os.environ["CODEQL_EXTRACTOR_PYTHON_DIAGNOSTIC_DIR"], exist_ok=True) + + + +# Function run by worker processes +def _extract_loop(proc_id, queue, trap_dir, archive, options, reply_queue, logger: Logger, write_global_data): + diagnostics_writer = DiagnosticsWriter(proc_id) + send_time = 0 + recv_time = 0 + extraction_time = 0 + + # use utf-8 as the character encoding for stdout/stderr to be able to properly + # log/print things on systems that use bad default encodings (windows). + sys.stdout.reconfigure(encoding='utf-8') + sys.stderr.reconfigure(encoding='utf-8') + + try: + renamer = renamer_from_options_and_env(options, logger) + except Exception as ex: + logger.error("Exception: %s", ex) + reply_queue.put(("INTERRUPT", None, None)) + sys.exit(2) + logger.set_process_id(proc_id) + try: + if options.trace_only: + extractor = ModulePrinter(options, trap_dir, archive, renamer, logger) + else: + extractor = SuperExtractor(options, trap_dir, archive, renamer, logger, diagnostics_writer) + profiler = get_profiler(options, id, logger) + with profiler: + while True: + start_recv = time.time() + unit = queue.get() + recv_time += time.time() - start_recv + if unit is None: + if write_global_data: + extractor.write_global_data() + extractor.close() + return + try: + start = time.time() + imports = extractor.process(unit) + end_time = time.time() + extraction_time += end_time - start + if imports is SkippedBuiltin: + logger.info("Skipped built-in %s", unit) + else: + for imp in imports: + reply_queue.put(("IMPORT", unit, imp)) + send_time += time.time() - end_time + logger.info("Extracted %s in %0.0fms", unit, (end_time-start)*1000) + except SyntaxError as ex: + # Syntax errors have already been handled in extractor.py + reply_queue.put(("FAILURE", unit, None)) + except RecursionError as ex: + error = recursion_error_message(ex, unit) + diagnostics_writer.write(error) + logger.error("Failed to extract %s: %s", unit, ex) + logger.traceback(WARN) + reply_queue.put(("FAILURE", unit, None)) + except Exception as ex: + error = internal_error_message(ex, unit) + diagnostics_writer.write(error) + logger.error("Failed to extract %s: %s", unit, ex) + logger.traceback(WARN) + reply_queue.put(("FAILURE", unit, None)) + else: + reply_queue.put(("SUCCESS", unit, None)) + except KeyboardInterrupt: + logger.debug("Worker process received interrupt") + reply_queue.put(("INTERRUPT", None, None)) + except Exception as ex: + logger.error("Exception: %s", ex) + reply_queue.put(("INTERRUPT", None, None)) + # Avoid deadlock and speed up termination by clearing queue. + try: + while True: + msg = queue.get(False) + if msg is None: + break + except _Empty: + #Cleared queue enough to avoid deadlock. + pass + sys.exit(2) diff --git a/python/extractor/setup.py b/python/extractor/setup.py new file mode 100644 index 00000000000..f93051d7cd0 --- /dev/null +++ b/python/extractor/setup.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python + +#This file needs to be able to handle all versions of Python we are likely to encounter +#Which is probably 3.0 and upwards + +'''Run buildtools/install.py''' + +import sys +import os +import subprocess +from python_tracer import getzipfilename + +if 'SEMMLE_DIST' in os.environ: + if 'CODEQL_EXTRACTOR_PYTHON_ROOT' not in os.environ: + os.environ['CODEQL_EXTRACTOR_PYTHON_ROOT'] = os.environ['SEMMLE_DIST'] +else: + os.environ["SEMMLE_DIST"] = os.environ["CODEQL_EXTRACTOR_PYTHON_ROOT"] + +tools = os.path.join(os.environ['SEMMLE_DIST'], "tools") +zippath = os.path.join(tools, getzipfilename()) +sys.path = [ zippath ] + sys.path + +# these are imported from the zip +from buildtools.discover import discover +import buildtools.install + +def main(): + version, root, requirement_files = discover() + buildtools.install.main(version, root, requirement_files) + + +if __name__ == "__main__": + main() diff --git a/python/extractor/test.py b/python/extractor/test.py new file mode 100644 index 00000000000..2f774569753 --- /dev/null +++ b/python/extractor/test.py @@ -0,0 +1 @@ +match() diff --git a/python/extractor/tests/__init__.py b/python/extractor/tests/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/buildtools/__init__.py b/python/extractor/tests/buildtools/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/buildtools/helper.py b/python/extractor/tests/buildtools/helper.py new file mode 100644 index 00000000000..9ac738a5197 --- /dev/null +++ b/python/extractor/tests/buildtools/helper.py @@ -0,0 +1,102 @@ +import os +import stat +import tempfile +import shutil +import time +import sys +import subprocess +from contextlib import contextmanager +from functools import wraps + + +# Would have liked to use a decorator, but for Python 2 the functools.wraps is not good enough for +# signature preservation that pytest can figure out what is going on. It would be possible to use +# the decorator package, but that seemed like a bit too much of a hassle. +@contextmanager +def in_fresh_temp_dir(): + old_cwd = os.getcwd() + with managed_temp_dir('extractor-python-buildtools-test-') as tmp: + os.chdir(tmp) + try: + yield tmp + finally: + os.chdir(old_cwd) + + +@contextmanager +def managed_temp_dir(prefix=None): + dir = tempfile.mkdtemp(prefix=prefix) + try: + yield dir + finally: + rmtree_robust(dir) + + +def rmtree_robust(dir): + if is_windows(): + # It's important that the path is a Unicode path on Windows, so + # that the right system calls get used. + dir = u'' + dir + if not dir.startswith("\\\\?\\"): + dir = "\\\\?\\" + os.path.abspath(dir) + + # Emulate Python 3 "nonlocal" keyword + class state: pass + state.last_failed_delete = None + + + def _rmtree(path): + """wrapper of shutil.rmtree to handle Python 3.12 rename (onerror => onexc)""" + if sys.version_info >= (3, 12): + shutil.rmtree(path, onexc=remove_error) + else: + shutil.rmtree(path, onerror=remove_error) + + def remove_error(func, path, excinfo): + # If we get an error twice in a row for the same path then just give up. + if state.last_failed_delete == path: + return + state.last_failed_delete = path + + # The problem could be one of permissions, so setting path writable + # might fix it. + os.chmod(path, stat.S_IWRITE) + + # On Windows, we sometimes get errors about directories not being + # empty, but immediately afterwards they are empty. Waiting a bit + # might therefore be sufficient. + t = 0.1 + while (True): + try: + if os.path.isdir(path): + _rmtree(path) + else: + os.remove(path) + except OSError: + if (t > 1): + return # Give up + time.sleep(t) + t *= 2 + _rmtree(dir) + # On Windows, attempting to write immediately after deletion may result in + # an 'access denied' exception, so wait a bit. + if is_windows(): + time.sleep(0.5) + + +def is_windows(): + return os.name == 'nt' + + +@contextmanager +def copy_repo_dir(repo_dir_in): + with managed_temp_dir(prefix="extractor-python-buildtools-test-") as tmp: + repo_dir = os.path.join(tmp, 'repo') + print('copying', repo_dir_in, 'to', repo_dir) + shutil.copytree(repo_dir_in, repo_dir, symlinks=True) + yield repo_dir + +################################################################################ + + +DEVNULL = subprocess.DEVNULL diff --git a/python/extractor/tests/buildtools/test_index.py b/python/extractor/tests/buildtools/test_index.py new file mode 100644 index 00000000000..a0a6e09a952 --- /dev/null +++ b/python/extractor/tests/buildtools/test_index.py @@ -0,0 +1,169 @@ +import os +import pytest +import shutil +import glob + +import buildtools.index +from tests.buildtools.helper import in_fresh_temp_dir + +# we use `monkeypatch.setenv` instead of setting `os.environ` directly, since that produces +# cross-talk between tests. (using mock.patch.dict is only available for Python 3) + + +class TestIncludeOptions: + @staticmethod + def test_LGTM_SRC(monkeypatch): + monkeypatch.setenv("LGTM_SRC", "path/src") + assert buildtools.index.get_include_options() == ["-R", "path/src"] + + @staticmethod + def test_LGTM_INDEX_INCLUDE(monkeypatch): + monkeypatch.setenv("LGTM_INDEX_INCLUDE", "/foo\n/bar") + assert buildtools.index.get_include_options() == ["-R", "/foo", "-R", "/bar"] + + +class TestPip21_3: + @staticmethod + def test_no_build_dir(monkeypatch): + with in_fresh_temp_dir() as path: + os.makedirs(os.path.join(path, "src")) + monkeypatch.setenv("LGTM_SRC", path) + assert buildtools.index.exclude_pip_21_3_build_dir_options() == [] + + @staticmethod + def test_faked_build_dir(monkeypatch): + # since I don't want to introduce specific pip version on our + # testing infrastructure, I'm just going to fake that `pip install .` had + # been called. + with in_fresh_temp_dir() as path: + os.makedirs(os.path.join(path, "build", "lib")) + monkeypatch.setenv("LGTM_SRC", path) + expected = ["-Y", os.path.join(path, "build")] + assert buildtools.index.exclude_pip_21_3_build_dir_options() == expected + + @staticmethod + def test_disable_environment_variable(monkeypatch): + monkeypatch.setenv( + "CODEQL_EXTRACTOR_PYTHON_DISABLE_AUTOMATIC_PIP_BUILD_DIR_EXCLUDE", "1" + ) + with in_fresh_temp_dir() as path: + os.makedirs(os.path.join(path, "build", "lib")) + monkeypatch.setenv("LGTM_SRC", path) + assert buildtools.index.exclude_pip_21_3_build_dir_options() == [] + + @staticmethod + def test_code_build_dir(monkeypatch): + # simulating that you have the module `mypkg.build.lib.foo` + with in_fresh_temp_dir() as path: + os.makedirs(os.path.join(path, "mypkg", "build", "lib")) + open(os.path.join(path, "mypkg", "build", "lib", "foo.py"), "wt").write("print(42)") + open(os.path.join(path, "mypkg", "build", "lib", "__init__.py"), "wt").write("") + open(os.path.join(path, "mypkg", "build", "__init__.py"), "wt").write("") + open(os.path.join(path, "mypkg", "__init__.py"), "wt").write("") + + monkeypatch.setenv("LGTM_SRC", path) + assert buildtools.index.exclude_pip_21_3_build_dir_options() == [] + + +def create_fake_venv(path, is_unix): + os.makedirs(path) + open(os.path.join(path, "pyvenv.cfg"), "wt").write("") + if is_unix: + os.mkdir(os.path.join(path, "bin")) + open(os.path.join(path, "bin", "activate"), "wt").write("") + os.makedirs(os.path.join(path, "lib", "python3.10", "site-packages")) + else: + os.mkdir(os.path.join(path, "Scripts")) + open(os.path.join(path, "Scripts", "activate.bat"), "wt").write("") + os.makedirs(os.path.join(path, "Lib", "site-packages")) + +class TestVenvIgnore: + @staticmethod + def test_no_venv(monkeypatch): + with in_fresh_temp_dir() as path: + monkeypatch.setenv("LGTM_SRC", path) + assert buildtools.index.exclude_venvs_options() == [] + + @staticmethod + @pytest.mark.parametrize("is_unix", [True,False]) + def test_faked_venv_dir(monkeypatch, is_unix): + with in_fresh_temp_dir() as path: + create_fake_venv(os.path.join(path, "venv"), is_unix=is_unix) + monkeypatch.setenv("LGTM_SRC", path) + assert buildtools.index.exclude_venvs_options() == ["-Y", os.path.join(path, "venv")] + + @staticmethod + @pytest.mark.parametrize("is_unix", [True,False]) + def test_multiple_faked_venv_dirs(monkeypatch, is_unix): + with in_fresh_temp_dir() as path: + create_fake_venv(os.path.join(path, "venv"), is_unix=is_unix) + create_fake_venv(os.path.join(path, "venv2"), is_unix=is_unix) + + monkeypatch.setenv("LGTM_SRC", path) + + expected = [ + "-Y", os.path.join(path, "venv"), + "-Y", os.path.join(path, "venv2"), + ] + + actual = buildtools.index.exclude_venvs_options() + assert sorted(actual) == sorted(expected) + + @staticmethod + def test_faked_venv_dir_no_pyvenv_cfg(monkeypatch): + """ + Some times, the `pyvenv.cfg` file is not included when a virtual environment is + added to a git-repo, but we should be able to ignore the venv anyway. + + See + - https://github.com/FiacreT/M-moire/tree/4089755191ffc848614247e98bbb641c1933450d/osintplatform/testNeo/venv + - https://github.com/Lynchie/KCM/tree/ea9eeed07e0c9eec41f9fc7480ce90390ee09876/VENV + """ + with in_fresh_temp_dir() as path: + create_fake_venv(os.path.join(path, "venv"), is_unix=True) + monkeypatch.setenv("LGTM_SRC", path) + os.remove(os.path.join(path, "venv", "pyvenv.cfg")) + assert buildtools.index.exclude_venvs_options() == ["-Y", os.path.join(path, "venv")] + + @staticmethod + def test_faked_venv_no_bin_dir(monkeypatch): + """ + Some times, the activate script is not included when a virtual environment is + added to a git-repo, but we should be able to ignore the venv anyway. + """ + + with in_fresh_temp_dir() as path: + create_fake_venv(os.path.join(path, "venv"), is_unix=True) + monkeypatch.setenv("LGTM_SRC", path) + bin_dir = os.path.join(path, "venv", "bin") + assert os.path.isdir(bin_dir) + shutil.rmtree(bin_dir) + assert buildtools.index.exclude_venvs_options() == ["-Y", os.path.join(path, "venv")] + + @staticmethod + def test_faked_venv_dir_no_lib_python(monkeypatch): + """ + If there are no `lib/pyhton*` dirs within a unix venv, then it doesn't + constitute a functional virtual environment, and we don't exclude it. That's not + going to hurt, since it won't contain any installed packages. + """ + + with in_fresh_temp_dir() as path: + create_fake_venv(os.path.join(path, "venv"), is_unix=True) + monkeypatch.setenv("LGTM_SRC", path) + glob_res = glob.glob(os.path.join(path, "venv", "lib", "python*")) + assert glob_res + for d in glob_res: + shutil.rmtree(d) + assert buildtools.index.exclude_venvs_options() == [] + + @staticmethod + @pytest.mark.parametrize("is_unix", [True,False]) + def test_disable_environment_variable(monkeypatch, is_unix): + monkeypatch.setenv( + "CODEQL_EXTRACTOR_PYTHON_DISABLE_AUTOMATIC_VENV_EXCLUDE", "1" + ) + with in_fresh_temp_dir() as path: + create_fake_venv(os.path.join(path, "venv"), is_unix=is_unix) + monkeypatch.setenv("LGTM_SRC", path) + assert buildtools.index.exclude_venvs_options() == [] diff --git a/python/extractor/tests/buildtools/test_install.py b/python/extractor/tests/buildtools/test_install.py new file mode 100644 index 00000000000..3950e6e853a --- /dev/null +++ b/python/extractor/tests/buildtools/test_install.py @@ -0,0 +1,16 @@ +import pytest + +import buildtools.install +from tests.buildtools.helper import in_fresh_temp_dir + +def test_basic(monkeypatch, mocker): + mocker.patch('subprocess.call') + mocker.patch('subprocess.check_call') + + with in_fresh_temp_dir() as path: + monkeypatch.setenv('LGTM_WORKSPACE', path) + monkeypatch.setenv('SEMMLE_DIST', '<none>') + + with pytest.raises(SystemExit) as exc_info: + buildtools.install.main(3, '.', []) + assert exc_info.value.code == 0 diff --git a/python/extractor/tests/buildtools/test_python_auto_install.py b/python/extractor/tests/buildtools/test_python_auto_install.py new file mode 100755 index 00000000000..277b25475c0 --- /dev/null +++ b/python/extractor/tests/buildtools/test_python_auto_install.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python + +import buildtools.semmle.requirements as requirements +import unittest + +class RequirementsTests(unittest.TestCase): + + def assertExpected(self, reqs, expected): + self.assertEqual(str(reqs), str(requirements.parse(expected.splitlines()))) + + _input = """\ + SQLAlchemy<1.1.0,>=1.0.10 # MIT + sqlalchemy-migrate>=0.9.6 # Apache-2.0 + stevedore>=1.10.0a4 # Apache-2.0 + WebOb>1.2.3 # MIT + oslo.i18n!=2.1.0,==2.0.7 # Apache-2.0 + foo>=0.9,<0.8 # Contradictory + bar>=1.3, <1.3 # Contradictory, but only just + baz>=3 # No dot in version number. + git+https://github.com/mozilla/elasticutils.git # Requirement in Git. Should be ignored. + -e git+https://github.com/Lasagne/Lasagne.git@8f4f9b2#egg=Lasagne==0.2.git # Another Git requirement. + """ + + def test_clean(self): + reqs = requirements.parse(self._input.splitlines()) + expected = """\ + SQLAlchemy<1.1.0,>=1.0.10 + sqlalchemy-migrate>=0.9.6 + stevedore>=1.10.0a4 + WebOb>1.2.3 + oslo.i18n!=2.1.0,==2.0.7 + foo>=0.9 + bar>=1.3 + baz>=3 + """ + self.assertExpected(requirements.clean(reqs), expected) + + def test_restricted(self): + reqs = requirements.parse(self._input.splitlines()) + expected = """\ + SQLAlchemy<1.1.0,>=1.0.10,==1.* + sqlalchemy-migrate>=0.9.6,==0.* + stevedore>=1.10.0a4,==1.* + WebOb>1.2.3,==1.* + oslo.i18n!=2.1.0,==2.0.7 + foo>=0.9,==0.* + bar>=1.3,==1.* + baz==3.*,>=3 + """ + self.assertExpected(requirements.restrict(reqs), expected) + +if __name__ == "__main__": + unittest.main() diff --git a/python/extractor/tests/buildtools/test_version.py b/python/extractor/tests/buildtools/test_version.py new file mode 100644 index 00000000000..8a3c05e7c0e --- /dev/null +++ b/python/extractor/tests/buildtools/test_version.py @@ -0,0 +1,244 @@ +import os +import re +from textwrap import dedent +import itertools + +import pytest + +import buildtools.version as version +from tests.buildtools.helper import in_fresh_temp_dir + + +class TestTravisVersion: + + # based on https://docs.travis-ci.com/user/customizing-the-build/#build-matrix + # and https://docs.travis-ci.com/user/languages/python/ + + def test_simple(self): + with in_fresh_temp_dir(): + assert version.travis_version('.') is None + + + @pytest.mark.parametrize( + 'name,expected,travis_file',[ + ('empty', None, ''), + ('no_python', None, dedent("""\ + language: ruby + rvm: + - 2.5 + - 2.6 + """)), + + ('both', None, dedent("""\ + language: python + python: + - "2.6" + - "2.7" + - "3.5" + - "3.6" + """)), + + ('only_py2', 2, dedent("""\ + language: python + python: + - "2.6" + - "2.7" + """)), + + ('only_py3', 3, dedent("""\ + language: python + python: + - "3.5" + - "3.6" + """)), + + ('jobs_both', None, dedent("""\ + language: python + jobs: + include: + - python: 2.6 + - python: 2.7 + - python: 3.5 + - python: 3.6 + """)), + + ('jobs_only_py2', 2, dedent("""\ + language: python + jobs: + include: + - python: 2.6 + - python: 2.7 + """)), + + ('jobs_only_py3', 3, dedent("""\ + language: python + jobs: + include: + - python: 3.5 + - python: 3.6 + """)), + + ('top_level_and_jobs', None, dedent("""\ + language: python + python: + - "2.6" + - "2.7" + jobs: + include: + - python: 3.5 + - python: 3.6 + """)), + + ('jobs_unrelated', 2, dedent("""\ + language: python + python: + - "2.6" + - "2.7" + jobs: + include: + - env: FOO=FOO + - env: FOO=BAR + """)), + + ('jobs_no_python', None, dedent("""\ + language: ruby + jobs: + include: + - rvm: 2.5 + - rvm: 2.6 + """)), + + # matrix is the old name for jobs (still supported as of 2019-11) + ('matrix_only_py3', 3, dedent("""\ + language: python + matrix: + include: + - python: 3.5 + - python: 3.6 + """)), + + ('quoted_py2', 2, dedent("""\ + language: python + python: + - "2.7" + """)), + + ('unquoted_py2', 2, dedent("""\ + language: python + python: + - 2.7 + """)), + ]) + def test_with_file(self, name, expected, travis_file): + with in_fresh_temp_dir(): + with open('.travis.yml', 'w') as f: + f.write(travis_file) + assert version.travis_version('.') is expected, name + + def test_filesnames(self): + """Should prefer .travis.yml over travis.yml (which we still support for some legacy reason) + """ + with in_fresh_temp_dir(): + with open('travis.yml', 'w') as f: + f.write(dedent("""\ + language: python + python: + - "2.6" + - "2.7" + """)) + assert version.travis_version('.') is 2 + + with open('.travis.yml', 'w') as f: + f.write(dedent("""\ + language: python + python: + - "3.5" + - "3.6" + """)) + assert version.travis_version('.') is 3 +class TestTroveVersion: + + def test_empty(self): + with in_fresh_temp_dir(): + assert version.trove_version('.') is None + + def test_with_file(self): + def _to_file(classifiers): + with open('setup.py', 'wt') as f: + f.write(dedent("""\ + setup( + classifiers={!r} + ) + """.format(classifiers) + )) + + cases = [ + (2, "Programming Language :: Python :: 2.7"), + (2, "Programming Language :: Python :: 2"), + (2, "Programming Language :: Python :: 2 :: Only"), + (3, "Programming Language :: Python :: 3.7"), + (3, "Programming Language :: Python :: 3"), + (3, "Programming Language :: Python :: 3 :: Only"), + ] + + for expected, classifier in cases: + with in_fresh_temp_dir(): + _to_file([classifier]) + assert version.trove_version('.') == expected + + for combination in itertools.combinations(cases, 2): + with in_fresh_temp_dir(): + versions, classifiers = zip(*combination) + _to_file(classifiers) + expected = 3 if 3 in versions else 2 + assert version.trove_version('.') == expected + + @pytest.mark.xfail() + def test_tricked_regex_is_too_simple(self): + with in_fresh_temp_dir(): + with open('setup.py', 'wt') as f: + f.write(dedent("""\ + setup( + name='Programming Language :: Python :: 2', + classifiers=[], + ) + """ + )) + assert version.trove_version('.') is None + + @pytest.mark.xfail() + def test_tricked_regex_is_too_simple2(self): + with in_fresh_temp_dir(): + with open('setup.py', 'wt') as f: + f.write(dedent("""\ + setup( + # classifiers=['Programming Language :: Python :: 2'], + ) + """ + )) + assert version.trove_version('.') is None + + @pytest.mark.xfail() + def test_tricked_not_running_as_code(self): + with in_fresh_temp_dir(): + with open('setup.py', 'wt') as f: + f.write(dedent("""\ + c = 'Programming Language :: ' + 'Python :: 2' + setup( + classifiers=[c], + ) + """ + )) + assert version.trove_version('.') is 2 + + def test_constructing_other_place(self): + with in_fresh_temp_dir(): + with open('setup.py', 'wt') as f: + f.write(dedent("""\ + c = 'Programming Language :: Python :: 2' + setup( + classifiers=[c], + ) + """ + )) + assert version.trove_version('.') is 2 diff --git a/python/extractor/tests/data-imports/mod1.py b/python/extractor/tests/data-imports/mod1.py new file mode 100644 index 00000000000..176f846316c --- /dev/null +++ b/python/extractor/tests/data-imports/mod1.py @@ -0,0 +1 @@ +import mod2 diff --git a/python/extractor/tests/data-imports/mod2.py b/python/extractor/tests/data-imports/mod2.py new file mode 100644 index 00000000000..5267ffc7b38 --- /dev/null +++ b/python/extractor/tests/data-imports/mod2.py @@ -0,0 +1,2 @@ +import mod3 +import mod4 diff --git a/python/extractor/tests/data-imports/mod3.py b/python/extractor/tests/data-imports/mod3.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data-imports/mod4.py b/python/extractor/tests/data-imports/mod4.py new file mode 100644 index 00000000000..0ec7223a8a1 --- /dev/null +++ b/python/extractor/tests/data-imports/mod4.py @@ -0,0 +1 @@ +import mod5 diff --git a/python/extractor/tests/data-imports/mod5.py b/python/extractor/tests/data-imports/mod5.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data-imports/mod6.py b/python/extractor/tests/data-imports/mod6.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data/mod1.py b/python/extractor/tests/data/mod1.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data/mod11.py b/python/extractor/tests/data/mod11.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data/mod2.py b/python/extractor/tests/data/mod2.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data/package/__init__.py b/python/extractor/tests/data/package/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data/package/sub/__init__.py b/python/extractor/tests/data/package/sub/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data/package/sub/a.py b/python/extractor/tests/data/package/sub/a.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data/package/sub/b.py b/python/extractor/tests/data/package/sub/b.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data/package/sub2.py b/python/extractor/tests/data/package/sub2.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data/package/x.py b/python/extractor/tests/data/package/x.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/data/package/y.py b/python/extractor/tests/data/package/y.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/dot-py/why.py/__init__.py b/python/extractor/tests/dot-py/why.py/__init__.py new file mode 100644 index 00000000000..58ce32f636d --- /dev/null +++ b/python/extractor/tests/dot-py/why.py/__init__.py @@ -0,0 +1,2 @@ +import a +import why diff --git a/python/extractor/tests/dot-py/why.py/a.py b/python/extractor/tests/dot-py/why.py/a.py new file mode 100644 index 00000000000..7d4290a117a --- /dev/null +++ b/python/extractor/tests/dot-py/why.py/a.py @@ -0,0 +1 @@ +x = 1 diff --git a/python/extractor/tests/lgtm_src/x.py b/python/extractor/tests/lgtm_src/x.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/lgtm_src/y.py b/python/extractor/tests/lgtm_src/y.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/off-path/nameless.py b/python/extractor/tests/off-path/nameless.py new file mode 100644 index 00000000000..6b209ec6830 --- /dev/null +++ b/python/extractor/tests/off-path/nameless.py @@ -0,0 +1,2 @@ +import mod1 +import mod2 diff --git a/python/extractor/tests/parser/alternating.py b/python/extractor/tests/parser/alternating.py new file mode 100644 index 00000000000..bf0f8de518d --- /dev/null +++ b/python/extractor/tests/parser/alternating.py @@ -0,0 +1 @@ +(0, [1, (2, [3, (4, [5, 6])])]) diff --git a/python/extractor/tests/parser/assignment.py b/python/extractor/tests/parser/assignment.py new file mode 100644 index 00000000000..c47eec4dd0d --- /dev/null +++ b/python/extractor/tests/parser/assignment.py @@ -0,0 +1,17 @@ + +#foo[bar].baz[(quux := 5)] = 5 +foo = 5 + +baz, quux = 1, 2 + +blah : int = 5 + +just_the_type : float + +x, y = z, w = 3, 4 + +(a, (b, (c, (d, e)))) = (j, (k, (l, (m, n)))) + +s, *t = u + +o,p, = q,r, diff --git a/python/extractor/tests/parser/call.py b/python/extractor/tests/parser/call.py new file mode 100644 index 00000000000..efd14a8c422 --- /dev/null +++ b/python/extractor/tests/parser/call.py @@ -0,0 +1,11 @@ +foo(x,y,z=1,w=2) + +bar()()() + +baz(2+2, kw = 3*4) + +a(*b, **c) + +d(e,) + +f(g.h[i]) diff --git a/python/extractor/tests/parser/class.py b/python/extractor/tests/parser/class.py new file mode 100644 index 00000000000..d1d4694fb3f --- /dev/null +++ b/python/extractor/tests/parser/class.py @@ -0,0 +1,2 @@ +class Foo(int, object, metaclass=type): + x = 5 diff --git a/python/extractor/tests/parser/collections.py b/python/extractor/tests/parser/collections.py new file mode 100644 index 00000000000..4e570fd0adc --- /dev/null +++ b/python/extractor/tests/parser/collections.py @@ -0,0 +1,37 @@ +() + +[] + +{} + +[1,2,3] + +(4,5,6) + +{7: 8, 9: 10, 11: 12} + +{13, 14, 15} + +a = {x:y} + +b = {z:w, **a} + +c = [k,l,*m] + +(o,) + +(p,q,r,) + +s, + +t, u, + +(#comment + v, w +#comment +) + +(#comment + x, y, +#comment +) diff --git a/python/extractor/tests/parser/comment-in-args.py b/python/extractor/tests/parser/comment-in-args.py new file mode 100644 index 00000000000..d5e4400d02e --- /dev/null +++ b/python/extractor/tests/parser/comment-in-args.py @@ -0,0 +1,15 @@ +""" +At the time this test was added, when either comment 2 or comment 3 was present, this +would cause the TSG parser to have an error. +""" + +# comment 0 +print( + # comment 1 + ( + # comment 2 + 1 + # comment 3 +) +# comment 4 +) diff --git a/python/extractor/tests/parser/comprehensions.py b/python/extractor/tests/parser/comprehensions.py new file mode 100644 index 00000000000..52de5828467 --- /dev/null +++ b/python/extractor/tests/parser/comprehensions.py @@ -0,0 +1,57 @@ +(a + for b in c + if d + if e + for f in g + if h + if i +) + +(a1 for b1 in c1) + +(a2 for b2 in c2 if d2) + +[k + for l in m + if n + if o + for p in q + if r + if s +] + +[k1 for l1 in m1] + +[k2 for l2 in m2 if n2] + +{p + for q in r + if s + if t + for u in v + if w + if x +} + +{p1 for q1 in r1} + +{p2 for q2 in r2 if s2} + + +{k3: v3 + for l3 in m3 + if n3 + if o3 + for p3 in q3 + if r3 + if s3 +} + +{k4: v4 for l4 in m4} + +{k5: v5 for l5 in m5 if n5} + +# Special case for generator expressions inside calls +t = tuple(x for y in z) + +[( t, ) for v in w] diff --git a/python/extractor/tests/parser/empty.py b/python/extractor/tests/parser/empty.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/parser/exception_groups_new.expected b/python/extractor/tests/parser/exception_groups_new.expected new file mode 100644 index 00000000000..1d2de92755f --- /dev/null +++ b/python/extractor/tests/parser/exception_groups_new.expected @@ -0,0 +1,136 @@ +Module: [1, 0] - [22, 0] + body: [ + Try: [1, 0] - [1, 4] + body: [ + Expr: [2, 4] - [2, 5] + value: + Name: [2, 4] - [2, 5] + variable: Variable('a', None) + ctx: Load + Expr: [3, 4] - [3, 5] + value: + Name: [3, 4] - [3, 5] + variable: Variable('b', None) + ctx: Load + ] + orelse: [ + Expr: [17, 4] - [17, 5] + value: + Name: [17, 4] - [17, 5] + variable: Variable('s', None) + ctx: Load + Expr: [18, 4] - [18, 5] + value: + Name: [18, 4] - [18, 5] + variable: Variable('t', None) + ctx: Load + ] + handlers: [ + ExceptGroupStmt: [4, 0] - [6, 5] + type: + Name: [4, 8] - [4, 9] + variable: Variable('c', None) + ctx: Load + name: None + body: [ + Expr: [5, 4] - [5, 5] + value: + Name: [5, 4] - [5, 5] + variable: Variable('d', None) + ctx: Load + Expr: [6, 4] - [6, 5] + value: + Name: [6, 4] - [6, 5] + variable: Variable('e', None) + ctx: Load + ] + ExceptGroupStmt: [7, 0] - [9, 5] + type: + Name: [7, 8] - [7, 9] + variable: Variable('f', None) + ctx: Load + name: + Name: [7, 13] - [7, 14] + variable: Variable('g', None) + ctx: Store + body: [ + Expr: [8, 4] - [8, 5] + value: + Name: [8, 4] - [8, 5] + variable: Variable('h', None) + ctx: Load + Expr: [9, 4] - [9, 5] + value: + Name: [9, 4] - [9, 5] + variable: Variable('i', None) + ctx: Load + ] + ExceptGroupStmt: [10, 0] - [12, 5] + type: + Tuple: [10, 9] - [10, 13] + elts: [ + Name: [10, 9] - [10, 10] + variable: Variable('j', None) + ctx: Load + Name: [10, 12] - [10, 13] + variable: Variable('k', None) + ctx: Load + ] + ctx: Load + parenthesised: True + name: None + body: [ + Expr: [11, 4] - [11, 5] + value: + Name: [11, 4] - [11, 5] + variable: Variable('l', None) + ctx: Load + Expr: [12, 4] - [12, 5] + value: + Name: [12, 4] - [12, 5] + variable: Variable('m', None) + ctx: Load + ] + ExceptGroupStmt: [13, 0] - [15, 5] + type: + Tuple: [13, 9] - [13, 13] + elts: [ + Name: [13, 9] - [13, 10] + variable: Variable('n', None) + ctx: Load + Name: [13, 12] - [13, 13] + variable: Variable('o', None) + ctx: Load + ] + ctx: Load + parenthesised: True + name: + Name: [13, 18] - [13, 19] + variable: Variable('p', None) + ctx: Store + body: [ + Expr: [14, 4] - [14, 5] + value: + Name: [14, 4] - [14, 5] + variable: Variable('q', None) + ctx: Load + Expr: [15, 4] - [15, 5] + value: + Name: [15, 4] - [15, 5] + variable: Variable('r', None) + ctx: Load + ] + ] + finalbody: [ + Expr: [20, 4] - [20, 5] + value: + Name: [20, 4] - [20, 5] + variable: Variable('u', None) + ctx: Load + Expr: [21, 4] - [21, 5] + value: + Name: [21, 4] - [21, 5] + variable: Variable('v', None) + ctx: Load + ] + ] diff --git a/python/extractor/tests/parser/exception_groups_new.py b/python/extractor/tests/parser/exception_groups_new.py new file mode 100644 index 00000000000..f24e3b00f4e --- /dev/null +++ b/python/extractor/tests/parser/exception_groups_new.py @@ -0,0 +1,21 @@ +try: + a + b +except* c: + d + e +except* f as g: + h + i +except* (j, k): + l + m +except* (n, o) as p: + q + r +else: + s + t +finally: + u + v diff --git a/python/extractor/tests/parser/exceptions.py b/python/extractor/tests/parser/exceptions.py new file mode 100644 index 00000000000..fe1ca679e6a --- /dev/null +++ b/python/extractor/tests/parser/exceptions.py @@ -0,0 +1,18 @@ +try: + a + b +except c as d: + e + f +except g: + h + i +except: + j + k +else: + l + m +finally: + n + o diff --git a/python/extractor/tests/parser/expressions.py b/python/extractor/tests/parser/expressions.py new file mode 100644 index 00000000000..67f53351265 --- /dev/null +++ b/python/extractor/tests/parser/expressions.py @@ -0,0 +1,14 @@ +1 + +2 + 3 + +4 * 5 / 6 + +(7 + 8) * 9 + +(10, 11) +( 12, 13 ) + +14 , 15 + +(match := 16) diff --git a/python/extractor/tests/parser/for.py b/python/extractor/tests/parser/for.py new file mode 100644 index 00000000000..ccd3f9209cd --- /dev/null +++ b/python/extractor/tests/parser/for.py @@ -0,0 +1,15 @@ +async for x in y: + if z: continue + if w: break +else: + v + +for ham in eggs: + spam + +for (a,b) in c: + pass + +for d, *e in f: + pass + diff --git a/python/extractor/tests/parser/functions.py b/python/extractor/tests/parser/functions.py new file mode 100644 index 00000000000..126c952917e --- /dev/null +++ b/python/extractor/tests/parser/functions.py @@ -0,0 +1,58 @@ +def a(b): pass +def c(*d): pass + +def foo(a, b, c=d, e:f, g:h=i, *j) -> t: + x + y + +def foo(l): + pass + +def bar(*k): + x1 + y1 + +def bar(*k, l, m:n, o:p=q, r=s, **u): + x1 + y1 + +def klef(*): pass + +def main(): pass + +@dec1(a,b) +@dec2(c,d) +def func(e,f,g): + h + i + + +lambda: a + +lambda b: c + +lambda d, *e: f + +lambda *g, h: i + +lambda j=k: l + +lambda *m: n + +lambda **o: p + +lambda *p, q=r: s + +def typed_dictionary_splat(**kw : KEYWORD): + pass +def typed_list_splat(*args : ARGS): + pass + +@False or True +def decorated(): pass + +def all_separators(pos_only, /, pos_or_keyword, *, keyword_only): pass + +@decorator #comment +def decorated_with_comment(): + pass diff --git a/python/extractor/tests/parser/if.py b/python/extractor/tests/parser/if.py new file mode 100644 index 00000000000..8cd53c19e67 --- /dev/null +++ b/python/extractor/tests/parser/if.py @@ -0,0 +1,11 @@ +if x: do_x +elif y: do_y +elif z: do_z +else: do_else + +if a and b: + c +# comment +elif d or e: + f + diff --git a/python/extractor/tests/parser/just_comments.py b/python/extractor/tests/parser/just_comments.py new file mode 100644 index 00000000000..4a6128a7a82 --- /dev/null +++ b/python/extractor/tests/parser/just_comments.py @@ -0,0 +1,8 @@ +# This is a comment +# it goes on for many lines... +# (Well, okay. Three lines.) + +# Here's one that's separated with some whitespace. + +# More whitespace at the end. + diff --git a/python/extractor/tests/parser/just_newlines.py b/python/extractor/tests/parser/just_newlines.py new file mode 100644 index 00000000000..b28b04f6431 --- /dev/null +++ b/python/extractor/tests/parser/just_newlines.py @@ -0,0 +1,3 @@ + + + diff --git a/python/extractor/tests/parser/match_new.expected b/python/extractor/tests/parser/match_new.expected new file mode 100644 index 00000000000..b71bda010ba --- /dev/null +++ b/python/extractor/tests/parser/match_new.expected @@ -0,0 +1,382 @@ +Module: [1, 0] - [43, 0] + body: [ + Match: [1, 0] - [3, 19] + subject: + List: [1, 6] - [1, 11] + elts: [ + Num: [1, 7] - [1, 8] + n: 1 + text: '1' + Num: [1, 9] - [1, 10] + n: 2 + text: '2' + ] + ctx: Load + cases: [ + Case: [2, 4] - [3, 19] + pattern: + MatchSequencePattern: [2, 9] - [2, 15] + patterns: [ + MatchCapturePattern: [2, 10] - [2, 11] + variable: + Name: [2, 10] - [2, 11] + variable: Variable('a', None) + ctx: Store + MatchCapturePattern: [2, 13] - [2, 14] + variable: + Name: [2, 13] - [2, 14] + variable: Variable('b', None) + ctx: Store + ] + guard: None + body: [ + Expr: [3, 8] - [3, 19] + value: + Call: [3, 8] - [3, 19] + func: + Name: [3, 8] - [3, 13] + variable: Variable('print', None) + ctx: Load + positional_args: [ + Name: [3, 14] - [3, 15] + variable: Variable('b', None) + ctx: Load + Name: [3, 17] - [3, 18] + variable: Variable('a', None) + ctx: Load + ] + named_args: [] + ] + ] + Match: [5, 0] - [15, 12] + subject: + BinOp: [5, 6] - [5, 10] + left: + Num: [5, 6] - [5, 7] + n: 1 + text: '1' + op: Add + right: + Num: [5, 8] - [5, 10] + n: 2j + text: '2j' + cases: [ + Case: [6, 4] - [7, 12] + pattern: + MatchLiteralPattern: [6, 9] - [6, 13] + literal: + BinOp: [6, 9] - [6, 13] + left: + Num: [6, 9] - [6, 10] + n: 1 + text: '1' + op: Add + right: + Num: [6, 11] - [6, 13] + n: 2j + text: '2j' + guard: None + body: [ + Pass: [7, 8] - [7, 12] + ] + Case: [8, 4] - [9, 12] + pattern: + MatchLiteralPattern: [8, 9] - [8, 18] + literal: + BinOp: [8, 9] - [8, 18] + left: + UnaryOp: [8, 10] - [8, 11] + op: USub + operand: + Num: [8, 10] - [8, 11] + n: 1 + text: '1' + op: Sub + right: + Num: [8, 12] - [8, 18] + n: 26000000j + text: '2.6e7j' + guard: None + body: [ + Pass: [9, 8] - [9, 12] + ] + Case: [10, 4] - [11, 12] + pattern: + MatchLiteralPattern: [10, 9] - [10, 11] + literal: + UnaryOp: [10, 10] - [10, 11] + op: USub + operand: + Num: [10, 10] - [10, 11] + n: 1 + text: '1' + guard: None + body: [ + Pass: [11, 8] - [11, 12] + ] + Case: [12, 4] - [13, 12] + pattern: + MatchLiteralPattern: [12, 9] - [12, 10] + literal: + Num: [12, 9] - [12, 10] + n: 2 + text: '2' + guard: None + body: [ + Pass: [13, 8] - [13, 12] + ] + Case: [14, 4] - [15, 12] + pattern: + MatchLiteralPattern: [14, 9] - [14, 16] + literal: + BinOp: [14, 9] - [14, 16] + left: + UnaryOp: [14, 10] - [14, 13] + op: USub + operand: + Num: [14, 10] - [14, 13] + n: 1.5 + text: '1.5' + op: Add + right: + Num: [14, 14] - [14, 16] + n: 5j + text: '5j' + guard: None + body: [ + Pass: [15, 8] - [15, 12] + ] + ] + Assign: [17, 0] - [17, 20] + targets: [ + Name: [17, 4] - [17, 17] + variable: Variable('soft_keywords', None) + ctx: Store + ] + value: + FunctionExpr: [17, 0] - [17, 20] + name: 'soft_keywords' + args: + arguments + defaults: [] + kw_defaults: [] + annotations: [] + varargannotation: None + kwargannotation: None + kw_annotations: [] + returns: None + inner_scope: + Function: [17, 0] - [17, 20] + name: 'soft_keywords' + type_parameters: [] + args: [] + vararg: None + kwonlyargs: [] + kwarg: None + body: [ + Assign: [18, 4] - [18, 13] + targets: [ + Name: [18, 4] - [18, 9] + variable: Variable('match', None) + ctx: Store + ] + value: + Num: [18, 12] - [18, 13] + n: 0 + text: '0' + Assign: [19, 4] - [19, 12] + targets: [ + Name: [19, 4] - [19, 8] + variable: Variable('case', None) + ctx: Store + ] + value: + Num: [19, 11] - [19, 12] + n: 0 + text: '0' + Match: [20, 4] - [22, 17] + subject: + Name: [20, 10] - [20, 15] + variable: Variable('match', None) + ctx: Load + cases: [ + Case: [21, 8] - [22, 17] + pattern: + MatchCapturePattern: [21, 13] - [21, 17] + variable: + Name: [21, 13] - [21, 17] + variable: Variable('case', None) + ctx: Store + guard: None + body: [ + Assign: [22, 12] - [22, 17] + targets: [ + Name: [22, 12] - [22, 13] + variable: Variable('x', None) + ctx: Store + ] + value: + Num: [22, 16] - [22, 17] + n: 0 + text: '0' + ] + ] + ] + Match: [24, 0] - [26, 12] + subject: + Tuple: [24, 7] - [24, 10] + elts: [ + Num: [24, 7] - [24, 8] + n: 0 + text: '0' + Num: [24, 9] - [24, 10] + n: 1 + text: '1' + ] + ctx: Load + parenthesised: True + cases: [ + Case: [25, 4] - [26, 12] + pattern: + MatchSequencePattern: [25, 9] - [25, 12] + patterns: [ + MatchStarPattern: [25, 9] - [25, 11] + target: + MatchCapturePattern: [25, 10] - [25, 11] + variable: + Name: [25, 10] - [25, 11] + variable: Variable('x', None) + ctx: Store + ] + guard: None + body: [ + Pass: [26, 8] - [26, 12] + ] + ] + Match: [28, 0] - [30, 12] + subject: + Tuple: [28, 7] - [28, 10] + elts: [ + Num: [28, 7] - [28, 8] + n: 2 + text: '2' + Num: [28, 9] - [28, 10] + n: 3 + text: '3' + ] + ctx: Load + parenthesised: True + cases: [ + Case: [29, 4] - [30, 12] + pattern: + MatchSequencePattern: [29, 9] - [29, 14] + patterns: [ + MatchStarPattern: [29, 10] - [29, 12] + target: + MatchCapturePattern: [29, 11] - [29, 12] + variable: + Name: [29, 11] - [29, 12] + variable: Variable('x', None) + ctx: Store + ] + guard: None + body: [ + Pass: [30, 8] - [30, 12] + ] + ] + Match: [32, 0] - [34, 13] + subject: + Tuple: [32, 6] - [32, 10] + elts: [ + Name: [32, 6] - [32, 7] + variable: Variable('w', None) + ctx: Load + Name: [32, 9] - [32, 10] + variable: Variable('x', None) + ctx: Load + ] + ctx: Load + parenthesised: True + cases: [ + Case: [33, 4] - [34, 13] + pattern: + MatchSequencePattern: [33, 9] - [33, 13] + patterns: [ + MatchCapturePattern: [33, 9] - [33, 10] + variable: + Name: [33, 9] - [33, 10] + variable: Variable('y', None) + ctx: Store + MatchCapturePattern: [33, 12] - [33, 13] + variable: + Name: [33, 12] - [33, 13] + variable: Variable('z', None) + ctx: Store + ] + guard: None + body: [ + Assign: [34, 8] - [34, 13] + targets: [ + Name: [34, 8] - [34, 9] + variable: Variable('v', None) + ctx: Store + ] + value: + Num: [34, 12] - [34, 13] + n: 0 + text: '0' + ] + ] + Match: [36, 0] - [38, 12] + subject: + Tuple: [36, 6] - [36, 10] + elts: [ + Name: [36, 6] - [36, 7] + variable: Variable('x', None) + ctx: Load + Name: [36, 9] - [36, 10] + variable: Variable('y', None) + ctx: Load + ] + ctx: Load + parenthesised: True + cases: [ + Case: [37, 4] - [38, 12] + pattern: + MatchSequencePattern: [37, 9] - [37, 13] + patterns: [ + MatchLiteralPattern: [37, 9] - [37, 10] + literal: + Num: [37, 9] - [37, 10] + n: 1 + text: '1' + MatchLiteralPattern: [37, 12] - [37, 13] + literal: + Num: [37, 12] - [37, 13] + n: 2 + text: '2' + ] + guard: None + body: [ + Pass: [38, 8] - [38, 12] + ] + ] + Match: [40, 0] - [42, 12] + subject: + Name: [40, 6] - [40, 7] + variable: Variable('z', None) + ctx: Load + cases: [ + Case: [41, 4] - [42, 12] + pattern: + MatchCapturePattern: [41, 9] - [41, 10] + variable: + Name: [41, 9] - [41, 10] + variable: Variable('w', None) + ctx: Store + guard: None + body: [ + Pass: [42, 8] - [42, 12] + ] + ] + ] diff --git a/python/extractor/tests/parser/match_new.py b/python/extractor/tests/parser/match_new.py new file mode 100644 index 00000000000..99a06de5b08 --- /dev/null +++ b/python/extractor/tests/parser/match_new.py @@ -0,0 +1,42 @@ +match [1,2]: + case (a, b): + print(b, a) + +match 1+2j: + case 1+2j: + pass + case -1-2.6e7j: + pass + case -1: + pass + case 2: + pass + case -1.5+5j: + pass + +def soft_keywords(): + match = 0 + case = 0 + match match: + case case: + x = 0 + +match (0,1): + case *x,: + pass + +match (2,3): + case (*x,): + pass + +match w, x: + case y, z: + v = 0 + +match x, y: + case 1, 2: + pass + +match z: + case w: + pass diff --git a/python/extractor/tests/parser/misc.py b/python/extractor/tests/parser/misc.py new file mode 100644 index 00000000000..90f60025468 --- /dev/null +++ b/python/extractor/tests/parser/misc.py @@ -0,0 +1,15 @@ +... + +a = (b := c) + +d = e if f else g + +h1[h2] = h3[h4] + +i[i1:i2] + +j[j1:j2:j3] + +k.l = m.n + +o[p,q] diff --git a/python/extractor/tests/parser/numbers.py b/python/extractor/tests/parser/numbers.py new file mode 100644 index 00000000000..ce0027ea2e8 --- /dev/null +++ b/python/extractor/tests/parser/numbers.py @@ -0,0 +1,12 @@ +1 + +2.0 + +3j + +0x4 + +0o5 + +0b110 + diff --git a/python/extractor/tests/parser/operators.py b/python/extractor/tests/parser/operators.py new file mode 100644 index 00000000000..b2b8b2ef328 --- /dev/null +++ b/python/extractor/tests/parser/operators.py @@ -0,0 +1,54 @@ +1 and 2 + +3 or 4 + +5 == 6 + +7 > 8 + +9 >= 10 + +11 in 12 + +13 is 14 + +15 is not 16 + +17 < 18 + +19 <= 20 + +21 != 22 + +23 <> 24 + +25 not in 26 + +27 > 28 >= 29 < 30 <= 31 == 32 != 33 <> 34 + ++35 + +-36 + +~37 + +not 38 + +# or(not(a), b) +not a or b + +# and(c, d, e, f, g) +c and d and e and f and g + +# or(h, i, j, k, l) +h or i or j or k or l + +# or(and(m, n), and(o, p)) +m and n or o and p + +# or(q, and(s, t), u) +q or s and t or u + +a1 or b1 and c1 + +d1 and e1 or f1 diff --git a/python/extractor/tests/parser/simple_statements.py b/python/extractor/tests/parser/simple_statements.py new file mode 100644 index 00000000000..a9d6a845546 --- /dev/null +++ b/python/extractor/tests/parser/simple_statements.py @@ -0,0 +1,70 @@ +# Statements that do not contain any other statements. + +pass + +a = b + +c : int = 1 + +d += e + +del f + +del f1, f2 + +global h + +global h1, h2 + +nonlocal i + +nonlocal i1, i2 + +import j + +import j1, j2 + +import j3.j4.j5, j6.j7.j8 as j9 + +import j10.j11 as j12 + +from k import l + +from ..k1.k2 import l1 as l2, l3 + +from __future__ import print_function, goto_statement + +from . import l4 + +from l5 import * + +from ..l6 import * +from ... import * + +raise + +raise m + +raise m1 from m2 + +raise m3, m4 + +raise m5, m6, m7 + +assert n + +assert n1, n2 + +return o + +return *o1, + +return 1, *o2 + +return 2, *o3, + +yield p + +yield from q + +await r diff --git a/python/extractor/tests/parser/simple_statements_py2.py b/python/extractor/tests/parser/simple_statements_py2.py new file mode 100644 index 00000000000..33f16dddbd6 --- /dev/null +++ b/python/extractor/tests/parser/simple_statements_py2.py @@ -0,0 +1,8 @@ + +exec "ls" + +print "Hello" + +print "two parts", "no newline", + +print >> f, "World" diff --git a/python/extractor/tests/parser/strings.py b/python/extractor/tests/parser/strings.py new file mode 100644 index 00000000000..8d465d25752 --- /dev/null +++ b/python/extractor/tests/parser/strings.py @@ -0,0 +1,79 @@ +if 1: + "double quotes" +if 2: + 'single quotes' +if 3: + """triple double quotes (sextuple quotes?)""" +if 4: + '''triple single quotes''' +if 5: + r"raw string" +if 6: + b"byte string" +if 7: + u"unicode string" +if 8: + br"raw byte string" +if 9: + "Let's put some control\tcharacters in here\n" +if 10: + """ + Multiline + string + time + """ +if 11: + "escaped \"quotes\" here" +if 12: + """Unescaped "quotes" inside triple quotes""" +if 13: + "string" """concatenation""" 'here' '''oh yeah''' +if 14: + f"format string with no funny business" +if 15: + f"format string with {1} interpolation" +if 16: + f"{2}{3}{4}" +if 17: + f"and a format string with {'nested'} string" +if 18: + f"foo{x}bar" "regular string" +if 19: + pass + # This doesn't quite give the right result, but it's close enough. + #f"no interpolation" ' but still implicit concatenation' +if 20: + f"{9}" "blah" f'{10}' +if 21: + f"format{129}string" "not format" +if 21.1: + # regression from https://github.com/github/codeql/issues/9940 + f"format{123}string" f"technically format string\n" +if 22: + "again not format" f"format again{foo}hello" +if 23: + f"""f-string with {"inner " 'implicit ' '''concatenation'''} how awful""" +if 24: + f'''oh no python { f'why do you {"allow"} such'} absolute horrors?''' +if 25: + b"""5""" b"byte format" +if 26: + r'X(\u0061|a)*Y' +if 27: + f"""triple-quoted {11}""f-st""" fr"""ri'''ng\\\\\""{12} with an inner quoted part""" +if 28: + f'{value:{width + padding!r}.{precision}}' +if 29: + f'{1,}' +if 30: + fr"""quotes before interpolation "{123}" are okay.""" +if 31: + fr"""backslash before an interpolation \{456}\ are okay.""" +if 32: + f'' +if 33: + '' +if 34: + b'\xc5\xe5' +if 35: + f"{x=}" diff --git a/python/extractor/tests/parser/strings_3.12_new.expected b/python/extractor/tests/parser/strings_3.12_new.expected new file mode 100644 index 00000000000..835fe157f52 --- /dev/null +++ b/python/extractor/tests/parser/strings_3.12_new.expected @@ -0,0 +1,305 @@ +Module: [2, 0] - [22, 0] + body: [ + Assign: [2, 0] - [2, 60] + targets: [ + Name: [2, 0] - [2, 5] + variable: Variable('songs', None) + ctx: Store + ] + value: + List: [2, 8] - [2, 60] + elts: [ + Str: [2, 9] - [2, 31] + s: 'Take me back to Eden' + prefix: "'" + implicitly_concatenated_parts: None + Str: [2, 33] - [2, 43] + s: 'Alkaline' + prefix: "'" + implicitly_concatenated_parts: None + Str: [2, 45] - [2, 59] + s: 'Ascensionism' + prefix: "'" + implicitly_concatenated_parts: None + ] + ctx: Load + Expr: [3, 0] - [3, 43] + value: + JoinedStr: [3, 0] - [3, 43] + values: [ + Str: [3, 0] - [3, 25] + s: 'This is the playlist: ' + prefix: 'f"' + implicitly_concatenated_parts: None + Call: [3, 25] - [3, 41] + func: + Attribute: [3, 25] - [3, 34] + value: + Str: [3, 25] - [3, 29] + s: ', ' + prefix: '"' + implicitly_concatenated_parts: None + attr: 'join' + ctx: Load + positional_args: [ + Name: [3, 35] - [3, 40] + variable: Variable('songs', None) + ctx: Load + ] + named_args: [] + Str: [3, 41] - [3, 43] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + Expr: [6, 0] - [6, 31] + value: + JoinedStr: [6, 0] - [6, 31] + values: [ + Str: [6, 0] - [6, 5] + s: '' + prefix: 'f"""' + implicitly_concatenated_parts: None + JoinedStr: [6, 5] - [6, 27] + values: [ + Str: [6, 5] - [6, 10] + s: '' + prefix: "f'''" + implicitly_concatenated_parts: None + JoinedStr: [6, 10] - [6, 23] + values: [ + Str: [6, 10] - [6, 13] + s: '' + prefix: "f'" + implicitly_concatenated_parts: None + JoinedStr: [6, 13] - [6, 21] + values: [ + Str: [6, 13] - [6, 16] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + BinOp: [6, 16] - [6, 19] + left: + Num: [6, 16] - [6, 17] + n: 1 + text: '1' + op: Add + right: + Num: [6, 18] - [6, 19] + n: 1 + text: '1' + Str: [6, 19] - [6, 21] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + Str: [6, 21] - [6, 23] + s: '' + prefix: "f'" + implicitly_concatenated_parts: None + ] + Str: [6, 23] - [6, 27] + s: '' + prefix: "f'''" + implicitly_concatenated_parts: None + ] + Str: [6, 27] - [6, 31] + s: '' + prefix: 'f"""' + implicitly_concatenated_parts: None + ] + Expr: [9, 0] - [9, 33] + value: + JoinedStr: [9, 0] - [9, 33] + values: [ + Str: [9, 0] - [9, 3] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + JoinedStr: [9, 3] - [9, 31] + values: [ + Str: [9, 3] - [9, 6] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + JoinedStr: [9, 6] - [9, 29] + values: [ + Str: [9, 6] - [9, 9] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + JoinedStr: [9, 9] - [9, 27] + values: [ + Str: [9, 9] - [9, 12] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + JoinedStr: [9, 12] - [9, 25] + values: [ + Str: [9, 12] - [9, 15] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + JoinedStr: [9, 15] - [9, 23] + values: [ + Str: [9, 15] - [9, 18] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + BinOp: [9, 18] - [9, 21] + left: + Num: [9, 18] - [9, 19] + n: 1 + text: '1' + op: Add + right: + Num: [9, 20] - [9, 21] + n: 1 + text: '1' + Str: [9, 21] - [9, 23] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + Str: [9, 23] - [9, 25] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + Str: [9, 25] - [9, 27] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + Str: [9, 27] - [9, 29] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + Str: [9, 29] - [9, 31] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + Str: [9, 31] - [9, 33] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + Expr: [12, 0] - [16, 4] + value: + JoinedStr: [12, 0] - [16, 4] + values: [ + Str: [12, 0] - [12, 25] + s: 'This is the playlist: ' + prefix: 'f"' + implicitly_concatenated_parts: None + Call: [12, 25] - [16, 2] + func: + Attribute: [12, 25] - [12, 34] + value: + Str: [12, 25] - [12, 29] + s: ', ' + prefix: '"' + implicitly_concatenated_parts: None + attr: 'join' + ctx: Load + positional_args: [ + List: [12, 35] - [16, 1] + elts: [ + Str: [13, 4] - [13, 26] + s: 'Take me back to Eden' + prefix: "'" + implicitly_concatenated_parts: None + Str: [14, 4] - [14, 14] + s: 'Alkaline' + prefix: "'" + implicitly_concatenated_parts: None + Str: [15, 4] - [15, 18] + s: 'Ascensionism' + prefix: "'" + implicitly_concatenated_parts: None + ] + ctx: Load + ] + named_args: [] + Str: [16, 2] - [16, 4] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + Expr: [19, 0] - [19, 50] + value: + Call: [19, 0] - [19, 50] + func: + Name: [19, 0] - [19, 5] + variable: Variable('print', None) + ctx: Load + positional_args: [ + JoinedStr: [19, 6] - [19, 49] + values: [ + Str: [19, 6] - [19, 31] + s: 'This is the playlist: ' + prefix: 'f"' + implicitly_concatenated_parts: None + Call: [19, 31] - [19, 47] + func: + Attribute: [19, 31] - [19, 40] + value: + Str: [19, 31] - [19, 35] + s: '\n' + prefix: '"' + implicitly_concatenated_parts: None + attr: 'join' + ctx: Load + positional_args: [ + Name: [19, 41] - [19, 46] + variable: Variable('songs', None) + ctx: Load + ] + named_args: [] + Str: [19, 47] - [19, 49] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + ] + named_args: [] + Expr: [21, 0] - [21, 68] + value: + Call: [21, 0] - [21, 68] + func: + Name: [21, 0] - [21, 5] + variable: Variable('print', None) + ctx: Load + positional_args: [ + JoinedStr: [21, 6] - [21, 67] + values: [ + Str: [21, 6] - [21, 31] + s: 'This is the playlist: ' + prefix: 'f"' + implicitly_concatenated_parts: None + Call: [21, 31] - [21, 65] + func: + Attribute: [21, 31] - [21, 58] + value: + Str: [21, 31] - [21, 53] + s: '♥' + prefix: '"' + implicitly_concatenated_parts: None + attr: 'join' + ctx: Load + positional_args: [ + Name: [21, 59] - [21, 64] + variable: Variable('songs', None) + ctx: Load + ] + named_args: [] + Str: [21, 65] - [21, 67] + s: '' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + ] + named_args: [] + ] diff --git a/python/extractor/tests/parser/strings_3.12_new.py b/python/extractor/tests/parser/strings_3.12_new.py new file mode 100644 index 00000000000..dda25362bcb --- /dev/null +++ b/python/extractor/tests/parser/strings_3.12_new.py @@ -0,0 +1,21 @@ +# An expression containing the same kind of quotes as the outer f-string +songs = ['Take me back to Eden', 'Alkaline', 'Ascensionism'] +f"This is the playlist: {", ".join(songs)}" + +# An example of the previously maximal level of nesting +f"""{f'''{f'{f"{1+1}"}'}'''}""" + +# An example of the new, unlimited level of nesting +f"{f"{f"{f"{f"{f"{1+1}"}"}"}"}"}" + +# An f-string with newlines inside the expression part +f"This is the playlist: {", ".join([ + 'Take me back to Eden', # My, my, those eyes like fire + 'Alkaline', # Not acid nor alkaline + 'Ascensionism' # Take to the broken skies at last +])}" + +# Two instances of string escaping used inside the expression part +print(f"This is the playlist: {"\n".join(songs)}") + +print(f"This is the playlist: {"\N{BLACK HEART SUIT}".join(songs)}") diff --git a/python/extractor/tests/parser/strings_new.expected b/python/extractor/tests/parser/strings_new.expected new file mode 100644 index 00000000000..7d1f2c647db --- /dev/null +++ b/python/extractor/tests/parser/strings_new.expected @@ -0,0 +1,265 @@ +Module: [1, 0] - [31, 0] + body: [ + If: [1, 0] - [1, 5] + test: + Num: [1, 3] - [1, 4] + n: 1 + text: '1' + body: [ + Expr: [2, 4] - [2, 72] + value: + JoinedStr: [2, 4] - [2, 72] + values: [ + Str: [2, 4] - [2, 61] + s: 'this is not a unicode escape but an interpolation: \\N' + prefix: 'fr"' + implicitly_concatenated_parts: None + Name: [2, 61] - [2, 70] + variable: Variable('AMPERSAND', None) + ctx: Load + Str: [2, 70] - [2, 72] + s: '' + prefix: 'fr"' + implicitly_concatenated_parts: None + ] + ] + orelse: None + If: [3, 0] - [3, 5] + test: + Num: [3, 3] - [3, 4] + n: 2 + text: '2' + body: [ + Expr: [4, 4] - [4, 44] + value: + JoinedStr: [4, 4] - [4, 44] + values: [ + Str: [4, 4] - [4, 33] + s: 'also an interpolation: \\N' + prefix: "f'" + implicitly_concatenated_parts: None + Name: [4, 33] - [4, 42] + variable: Variable('AMPERSAND', None) + ctx: Load + Str: [4, 42] - [4, 44] + s: '' + prefix: "f'" + implicitly_concatenated_parts: None + ] + ] + orelse: None + If: [5, 0] - [5, 5] + test: + Num: [5, 3] - [5, 4] + n: 3 + text: '3' + body: [ + Expr: [6, 4] - [6, 14] + value: + Str: [6, 4] - [6, 14] + s: '\\Nspam' + prefix: "f'" + implicitly_concatenated_parts: None + ] + orelse: None + If: [7, 0] - [7, 5] + test: + Num: [7, 3] - [7, 4] + n: 4 + text: '4' + body: [ + Expr: [8, 4] - [8, 46] + value: + Str: [8, 4] - [8, 46] + s: 'this is a unicode escape: &' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + orelse: None + If: [9, 0] - [9, 5] + test: + Num: [9, 3] - [9, 4] + n: 5 + text: '5' + body: [ + Expr: [10, 4] - [10, 55] + value: + Str: [10, 4] - [10, 55] + s: 'this is also not a unicode escape: \\N{AMPERSAND}' + prefix: 'r"' + implicitly_concatenated_parts: None + ] + orelse: None + If: [11, 0] - [11, 5] + test: + Num: [11, 3] - [11, 4] + n: 6 + text: '6' + body: [ + Expr: [12, 4] - [12, 20] + value: + Str: [12, 4] - [12, 20] + s: '\\N{AMPERSAND}' + prefix: "'" + implicitly_concatenated_parts: None + ] + orelse: None + If: [13, 0] - [13, 5] + test: + Num: [13, 3] - [13, 4] + n: 7 + text: '7' + body: [ + Expr: [14, 4] - [14, 13] + value: + Str: [14, 4] - [14, 13] + s: '\\Nspam' + prefix: "'" + implicitly_concatenated_parts: None + ] + orelse: None + If: [15, 0] - [15, 5] + test: + Num: [15, 3] - [15, 4] + n: 8 + text: '8' + body: [ + Expr: [16, 4] - [16, 55] + value: + Str: [16, 4] - [16, 55] + s: 'this is also also a unicode escape: &' + prefix: '"' + implicitly_concatenated_parts: None + ] + orelse: None + If: [17, 0] - [17, 5] + test: + Num: [17, 3] - [17, 4] + n: 9 + text: '9' + body: [ + Expr: [18, 4] - [18, 56] + value: + Str: [18, 4] - [18, 56] + s: 'this is also not a unicode escape: \\N{AMPERSAND}' + prefix: 'rb"' + implicitly_concatenated_parts: None + ] + orelse: None + If: [19, 0] - [19, 6] + test: + Num: [19, 3] - [19, 5] + n: 10 + text: '10' + body: [ + Expr: [20, 4] - [20, 21] + value: + Str: [20, 4] - [20, 21] + s: '\\N{AMPERSAND}' + prefix: "b'" + implicitly_concatenated_parts: None + ] + orelse: None + If: [21, 0] - [21, 6] + test: + Num: [21, 3] - [21, 5] + n: 11 + text: '11' + body: [ + Expr: [22, 4] - [22, 14] + value: + Str: [22, 4] - [22, 14] + s: '\\Nspam' + prefix: "b'" + implicitly_concatenated_parts: None + ] + orelse: None + If: [23, 0] - [23, 6] + test: + Num: [23, 3] - [23, 5] + n: 12 + text: '12' + body: [ + Expr: [24, 4] - [24, 81] + value: + Str: [24, 4] - [24, 81] + s: 'this is not a unicode escape because we are in a bytestring: \\N{AMPERSAND}' + prefix: 'b"' + implicitly_concatenated_parts: None + ] + orelse: None + If: [25, 0] - [25, 6] + test: + Num: [25, 3] - [25, 5] + n: 13 + text: '13' + body: [ + Expr: [26, 4] - [26, 55] + value: + JoinedStr: [26, 4] - [26, 55] + values: [ + Str: [26, 4] - [26, 39] + s: 'quotes before interpolation "' + prefix: 'fr"""' + implicitly_concatenated_parts: None + Num: [26, 39] - [26, 40] + n: 0 + text: '0' + Str: [26, 40] - [26, 55] + s: '" are okay.' + prefix: 'fr"""' + implicitly_concatenated_parts: None + ] + ] + orelse: None + If: [27, 0] - [27, 6] + test: + Num: [27, 3] - [27, 5] + n: 14 + text: '14' + body: [ + Expr: [28, 4] - [28, 61] + value: + JoinedStr: [28, 4] - [28, 61] + values: [ + Str: [28, 4] - [28, 45] + s: 'backslash before an interpolation \\' + prefix: 'fr"""' + implicitly_concatenated_parts: None + Num: [28, 45] - [28, 46] + n: 1 + text: '1' + Str: [28, 46] - [28, 61] + s: '\\ are okay.' + prefix: 'fr"""' + implicitly_concatenated_parts: None + ] + ] + orelse: None + If: [29, 0] - [29, 6] + test: + Num: [29, 3] - [29, 5] + n: 15 + text: '15' + body: [ + Expr: [30, 4] - [30, 54] + value: + JoinedStr: [30, 4] - [30, 54] + values: [ + Str: [30, 4] - [30, 33] + s: 'Yield inside an f-string: ' + prefix: 'f"' + implicitly_concatenated_parts: None + Yield: [30, 33] - [30, 40] + value: + Num: [30, 39] - [30, 40] + n: 5 + text: '5' + Str: [30, 40] - [30, 54] + s: ' is allowed.' + prefix: 'f"' + implicitly_concatenated_parts: None + ] + ] + orelse: None + ] diff --git a/python/extractor/tests/parser/strings_new.py b/python/extractor/tests/parser/strings_new.py new file mode 100644 index 00000000000..44302fc8756 --- /dev/null +++ b/python/extractor/tests/parser/strings_new.py @@ -0,0 +1,30 @@ +if 1: + fr"this is not a unicode escape but an interpolation: \N{AMPERSAND}" +if 2: + f'also an interpolation: \\N{AMPERSAND}' +if 3: + f'\\Nspam' +if 4: + f"this is a unicode escape: \N{AMPERSAND}" +if 5: + r"this is also not a unicode escape: \N{AMPERSAND}" +if 6: + '\\N{AMPERSAND}' +if 7: + '\\Nspam' +if 8: + "this is also also a unicode escape: \N{AMPERSAND}" +if 9: + rb"this is also not a unicode escape: \N{AMPERSAND}" +if 10: + b'\\N{AMPERSAND}' +if 11: + b'\\Nspam' +if 12: + b"this is not a unicode escape because we are in a bytestring: \N{AMPERSAND}" +if 13: + fr"""quotes before interpolation "{0}" are okay.""" +if 14: + fr"""backslash before an interpolation \{1}\ are okay.""" +if 15: + f"Yield inside an f-string: {yield 5} is allowed." diff --git a/python/extractor/tests/parser/types_new.expected b/python/extractor/tests/parser/types_new.expected new file mode 100644 index 00000000000..be42268c201 --- /dev/null +++ b/python/extractor/tests/parser/types_new.expected @@ -0,0 +1,142 @@ +Module: [1, 0] - [6, 0] + body: [ + TypeAlias: [1, 0] - [1, 34] + name: + Name: [1, 5] - [1, 6] + variable: Variable('T', None) + ctx: Store + type_parameters: [ + TypeVar: [1, 7] - [1, 9] + name: + Name: [1, 7] - [1, 9] + variable: Variable('T1', None) + ctx: Store + bound: None + TypeVar: [1, 11] - [1, 17] + name: + Name: [1, 11] - [1, 13] + variable: Variable('T2', None) + ctx: Store + bound: + Name: [1, 15] - [1, 17] + variable: Variable('E1', None) + ctx: Load + TypeVarTuple: [1, 19] - [1, 22] + name: + Name: [1, 20] - [1, 22] + variable: Variable('T3', None) + ctx: Store + ParamSpec: [1, 24] - [1, 28] + name: + Name: [1, 26] - [1, 28] + variable: Variable('T4', None) + ctx: Store + ] + value: + Name: [1, 32] - [1, 34] + variable: Variable('T5', None) + ctx: Load + Assign: [3, 0] - [3, 31] + targets: [ + Name: [3, 4] - [3, 5] + variable: Variable('f', None) + ctx: Store + ] + value: + FunctionExpr: [3, 0] - [3, 31] + name: 'f' + args: + arguments + defaults: [] + kw_defaults: [] + annotations: [] + varargannotation: None + kwargannotation: None + kw_annotations: [] + returns: None + inner_scope: + Function: [3, 0] - [3, 31] + name: 'f' + type_parameters: [ + TypeVar: [3, 6] - [3, 8] + name: + Name: [3, 6] - [3, 8] + variable: Variable('T6', None) + ctx: Store + bound: None + TypeVar: [3, 10] - [3, 16] + name: + Name: [3, 10] - [3, 12] + variable: Variable('T7', None) + ctx: Store + bound: + Name: [3, 14] - [3, 16] + variable: Variable('E2', None) + ctx: Load + TypeVarTuple: [3, 18] - [3, 21] + name: + Name: [3, 19] - [3, 21] + variable: Variable('T8', None) + ctx: Store + ParamSpec: [3, 23] - [3, 27] + name: + Name: [3, 25] - [3, 27] + variable: Variable('T9', None) + ctx: Store + ] + args: [] + vararg: None + kwonlyargs: [] + kwarg: None + body: [ + Expr: [3, 32] - [3, 35] + value: + Ellipsis: [3, 32] - [3, 35] + ] + Assign: [5, 0] - [5, 35] + targets: [ + Name: [5, 6] - [5, 7] + variable: Variable('C', None) + ctx: Store + ] + value: + ClassExpr: [5, 0] - [5, 35] + name: 'C' + type_parameters: [ + TypeVar: [5, 8] - [5, 11] + name: + Name: [5, 8] - [5, 11] + variable: Variable('T10', None) + ctx: Store + bound: None + TypeVar: [5, 13] - [5, 20] + name: + Name: [5, 13] - [5, 16] + variable: Variable('T11', None) + ctx: Store + bound: + Name: [5, 18] - [5, 20] + variable: Variable('E3', None) + ctx: Load + TypeVarTuple: [5, 22] - [5, 26] + name: + Name: [5, 23] - [5, 26] + variable: Variable('T12', None) + ctx: Store + ParamSpec: [5, 28] - [5, 33] + name: + Name: [5, 30] - [5, 33] + variable: Variable('T13', None) + ctx: Store + ] + bases: [] + keywords: [] + inner_scope: + Class: [5, 0] - [5, 35] + name: 'C' + body: [ + Expr: [5, 36] - [5, 39] + value: + Ellipsis: [5, 36] - [5, 39] + ] + ] diff --git a/python/extractor/tests/parser/types_new.py b/python/extractor/tests/parser/types_new.py new file mode 100644 index 00000000000..844ba4930ed --- /dev/null +++ b/python/extractor/tests/parser/types_new.py @@ -0,0 +1,5 @@ +type T[T1, T2: E1, *T3, **T4] = T5 + +def f[T6, T7: E2, *T8, **T9](): ... + +class C[T10, T11: E3, *T12, **T13]: ... diff --git a/python/extractor/tests/parser/while.py b/python/extractor/tests/parser/while.py new file mode 100644 index 00000000000..3e622e6f87f --- /dev/null +++ b/python/extractor/tests/parser/while.py @@ -0,0 +1,6 @@ +while a: + b + c +else: + d + e diff --git a/python/extractor/tests/parser/with.py b/python/extractor/tests/parser/with.py new file mode 100644 index 00000000000..25022cbb9f9 --- /dev/null +++ b/python/extractor/tests/parser/with.py @@ -0,0 +1,9 @@ +with a as b: + c + d + +with f as g, h as i: + j + +with k, l: + m diff --git a/python/extractor/tests/project_layout/project-layout b/python/extractor/tests/project_layout/project-layout new file mode 100644 index 00000000000..3adda330ddc --- /dev/null +++ b/python/extractor/tests/project_layout/project-layout @@ -0,0 +1,2 @@ +#/target +**//src diff --git a/python/extractor/tests/project_layout/src/mod1.py b/python/extractor/tests/project_layout/src/mod1.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/extractor/tests/source_archive_unchanged/src/no_newline.py b/python/extractor/tests/source_archive_unchanged/src/no_newline.py new file mode 100644 index 00000000000..82129e54245 --- /dev/null +++ b/python/extractor/tests/source_archive_unchanged/src/no_newline.py @@ -0,0 +1 @@ +print("Hello world! This line of code has no newline at the end.") \ No newline at end of file diff --git a/python/extractor/tests/source_archive_unchanged/src/weird_bytes.py b/python/extractor/tests/source_archive_unchanged/src/weird_bytes.py new file mode 100644 index 00000000000..288c4848425 --- /dev/null +++ b/python/extractor/tests/source_archive_unchanged/src/weird_bytes.py @@ -0,0 +1,2 @@ +print("This line of code ends with a non-standard newline:") +print("This string contains weird bytes: ab") \ No newline at end of file diff --git a/python/extractor/tests/syntax-error/error.py b/python/extractor/tests/syntax-error/error.py new file mode 100644 index 00000000000..4cd4b017053 --- /dev/null +++ b/python/extractor/tests/syntax-error/error.py @@ -0,0 +1 @@ +This is a syntax error! diff --git a/python/extractor/tests/test_concurrent_cache.py b/python/extractor/tests/test_concurrent_cache.py new file mode 100644 index 00000000000..6ab4b54633d --- /dev/null +++ b/python/extractor/tests/test_concurrent_cache.py @@ -0,0 +1,95 @@ + +import sys +import os.path +import unittest +import multiprocessing + +import semmle +from tests import test_utils +from semmle.util import makedirs + + +ITERATIONS = 100 +CONCURRENCY = 20 + +class ConcurrentCacheTest(test_utils.ExtractorTest): + ''' + Test the cache under heavy concurrent load. + ''' + + def __init__(self, name): + super(ConcurrentCacheTest, self).__init__(name) + self.cachedir = os.path.abspath(os.path.join(self.here, "cache")) + + def setUp(self): + super(ConcurrentCacheTest, self).setUp() + makedirs(self.cachedir) + self.cache = semmle.cache.Cache(self.cachedir) + + def tearDown(self): + super(ConcurrentCacheTest, self).tearDown() + + def _concurrent_read_and_write(self): + readers = [] + writers = [] + queue = multiprocessing.Queue(CONCURRENCY+1) + for i in range(CONCURRENCY): + readers.append(multiprocessing.Process(target=read_func, args=(self.cache, queue))) + writers.append(multiprocessing.Process(target=write_func, args=(self.cache, ITERATIONS//4))) + for read, write in zip(readers, writers): + read.start() + write.start() + for proc in writers: + proc.join() + for proc in readers: + proc.join() + successes = [ queue.get(False) for i in range(CONCURRENCY) ] + self.assertNotIn(None, successes) + # We expect a fairly low success rate here + # But want to assert that at least one read succeeded. + self.assertGreater(sum(successes), 0) + + def _concurrent_read_ok(self): + readers = [] + queue = multiprocessing.Queue(CONCURRENCY+1) + for i in range(CONCURRENCY): + readers.append(multiprocessing.Process(target=read_func, args=(self.cache, queue))) + for proc in readers: + proc.start() + for proc in readers: + proc.join() + successes = [ queue.get(False) for i in range(CONCURRENCY) ] + self.assertNotIn(None, successes) + self.assertEqual(sum(successes), 2*CONCURRENCY*ITERATIONS) + + def test(self): + #Must run this first as it populates the cache + self._concurrent_read_and_write() + #Then this tests that the cache is correctly populated. + self._concurrent_read_ok() + +def key(i): + return "key%d" % i + +def value(i): + return ("value%d\n" % i).encode("utf-8")*10000 + +def read_func(cache, queue): + successes = 0 + for i in range(ITERATIONS): + val = cache.get(key(i)) + if val is not None: + successes += 1 + assert val == value(i) + for i in range(ITERATIONS): + val = cache.get(key(i)) + if val is not None: + successes += 1 + assert val == value(i) + queue.put(successes) + +def write_func(cache, offset): + for i in range(offset, ITERATIONS): + cache.set(key(i), value(i)) + for i in range(offset-1, -1, -1): + cache.set(key(i), value(i)) diff --git a/python/extractor/tests/test_config1/setup.py b/python/extractor/tests/test_config1/setup.py new file mode 100644 index 00000000000..a3ea90ffa15 --- /dev/null +++ b/python/extractor/tests/test_config1/setup.py @@ -0,0 +1,7 @@ + +classifiers = [ + 'License :: OSI Approved :: MIT License', + 'Programming Language :: Java :: 7', + 'Programming Language :: Python', + 'Programming Language :: Python :: 2.7', +] diff --git a/python/extractor/tests/test_config2/setup.py b/python/extractor/tests/test_config2/setup.py new file mode 100644 index 00000000000..984792209c2 --- /dev/null +++ b/python/extractor/tests/test_config2/setup.py @@ -0,0 +1,13 @@ + +classifiers = [ + 'Development Status :: 2 - Pre-Alpha', + 'Environment :: Console', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: MIT License', + 'Operating System :: POSIX', + 'Programming Language :: Python :: 3.2', + 'Programming Language :: Python :: 3.3', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Topic :: Software Development', +] diff --git a/python/extractor/tests/test_dot_py.py b/python/extractor/tests/test_dot_py.py new file mode 100644 index 00000000000..b8f6b4253c8 --- /dev/null +++ b/python/extractor/tests/test_dot_py.py @@ -0,0 +1,18 @@ + +import sys +import os.path +import shutil +import unittest + +import semmle.populator +from tests import test_utils + +class DotPyPathTest(test_utils.ExtractorTest): + + def __init__(self, name): + super(DotPyPathTest, self).__init__(name) + + def test_dot_py(self): + dot_py = os.path.abspath(os.path.join(self.here, "dot-py")) + self.run_extractor("-R", dot_py, "-p", dot_py) + self.check_only_traps_exists_and_clear('__init__', 'a') diff --git a/python/extractor/tests/test_exclude.py b/python/extractor/tests/test_exclude.py new file mode 100644 index 00000000000..2a41d887541 --- /dev/null +++ b/python/extractor/tests/test_exclude.py @@ -0,0 +1,25 @@ + +import sys +import os.path +import shutil +import unittest + +import semmle.populator +from tests import test_utils + +class ExtractorExcludeTest(test_utils.ExtractorTest): + + def __init__(self, name): + super(ExtractorExcludeTest, self).__init__(name) + + def test_simple_exclude(self): + self.run_extractor("-y", "package.sub", "mod1", "package.x", "package.sub.a") + self.check_only_traps_exists_and_clear("mod1", "package/", "x") + + def test_simple_exclude_pattern(self): + self.run_extractor("--exclude-pattern", ".*(a|x)", "mod1", "package.x", "package.sub.a", "package.sub.b") + self.check_only_traps_exists_and_clear("mod1", "b", "package/", "sub/") + + def test_multiple_exclude(self): + self.run_extractor("-y", "package.sub.x", "mod1", "-y", "package.sub.y", "package.sub.a") + self.check_only_traps_exists_and_clear("mod1", "package/", "sub/", "a") diff --git a/python/extractor/tests/test_file.py b/python/extractor/tests/test_file.py new file mode 100644 index 00000000000..3ef043a509b --- /dev/null +++ b/python/extractor/tests/test_file.py @@ -0,0 +1,30 @@ + +import sys +import os.path +import shutil +import unittest +import subprocess + +import semmle.populator +from tests import test_utils + +class FileOptionTest(test_utils.ExtractorTest): + + def __init__(self, name): + super(FileOptionTest, self).__init__(name) + + def test_file(self): + self.run_extractor("-F", "tests/data/mod1.py") + self.check_only_traps_exists_and_clear("mod1") + + def test_no_file(self): + try: + self.run_extractor("-F", "this-file-does-not-exist.py") + except subprocess.CalledProcessError as ex: + self.assertEqual(ex.returncode, 1) + + def test_no_module(self): + try: + self.run_extractor("this_module_does_not_exist") + except subprocess.CalledProcessError as ex: + self.assertEqual(ex.returncode, 1) diff --git a/python/extractor/tests/test_import_restrict.py b/python/extractor/tests/test_import_restrict.py new file mode 100644 index 00000000000..a2010205b53 --- /dev/null +++ b/python/extractor/tests/test_import_restrict.py @@ -0,0 +1,30 @@ + +import sys +import os.path +import shutil +import unittest + +import semmle.populator +from tests import test_utils + +class ExtractorImportRestrictTest(test_utils.ExtractorTest): + + def __init__(self, name): + super(ExtractorImportRestrictTest, self).__init__(name) + self.module_path = os.path.abspath(os.path.join(self.here, "data-imports")) + + def test_import_unrestricted(self): + self.run_extractor("mod1") + self.check_only_traps_exists_and_clear("mod1", "mod2", "mod3", "mod4", "mod5") + + def test_import_unrestricted_2(self): + self.run_extractor("mod2") + self.check_only_traps_exists_and_clear("mod2", "mod3", "mod4", "mod5") + + def test_import_depth(self): + self.run_extractor("--max-import-depth", "1", "mod1") + self.check_only_traps_exists_and_clear("mod1", "mod2") + + def test_import_depth_2(self): + self.run_extractor("--max-import-depth", "2", "mod1") + self.check_only_traps_exists_and_clear("mod1", "mod2", "mod3", "mod4") diff --git a/python/extractor/tests/test_io_error.py b/python/extractor/tests/test_io_error.py new file mode 100644 index 00000000000..6caa16cd381 --- /dev/null +++ b/python/extractor/tests/test_io_error.py @@ -0,0 +1,45 @@ + +import sys +import os.path +import shutil +import unittest +from contextlib import contextmanager + +import semmle.populator +from tests import test_utils +import subprocess +if sys.version_info < (3,0): + from StringIO import StringIO +else: + from io import StringIO + +ALL_ACCESS = int("777", base=8) + + +@contextmanager +def discard_output(): + new_out, new_err = StringIO(), StringIO() + old_out, old_err = sys.stdout, sys.stderr + try: + sys.stdout, sys.stderr = new_out, new_err + yield + finally: + sys.stdout, sys.stderr = old_out, old_err + +class SingleThreadedTest(test_utils.ExtractorTest): + + def __init__(self, name): + super(SingleThreadedTest, self).__init__(name) + + def test_ioerror(self): + if os.name == "nt": + return + try: + os.chmod(self.trap_path, 0) + with discard_output(): + try: + self.run_extractor("-z1", "-y", "package.sub", "mod1", "package.x", "package.sub.a") + except subprocess.CalledProcessError as ex: + self.assertEqual(ex.returncode, 1) + finally: + os.chmod(self.trap_path, ALL_ACCESS) diff --git a/python/extractor/tests/test_lgtm_relative_path.py b/python/extractor/tests/test_lgtm_relative_path.py new file mode 100644 index 00000000000..432c40811cf --- /dev/null +++ b/python/extractor/tests/test_lgtm_relative_path.py @@ -0,0 +1,14 @@ +import os + +from tests import test_utils + +class ExtractorPatternsTest(test_utils.ExtractorTest): + + def __init__(self, name): + super(ExtractorPatternsTest, self).__init__(name) + + def test(self): + src = os.path.join(self.here, "lgtm_src") + with test_utils.environment("LGTM_SRC", src): + self.run_extractor("-R", src, "--filter", "exclude:*.py", "--filter", "include:x.py") + self.check_only_traps_exists_and_clear("x") diff --git a/python/extractor/tests/test_off_path.py b/python/extractor/tests/test_off_path.py new file mode 100644 index 00000000000..ab6a527c74e --- /dev/null +++ b/python/extractor/tests/test_off_path.py @@ -0,0 +1,18 @@ + +import sys +import os.path +import shutil +import unittest + +import semmle.populator +from tests import test_utils + +class ExtractorOffPathTest(test_utils.ExtractorTest): + + def __init__(self, name): + super(ExtractorOffPathTest, self).__init__(name) + + def test_off_path(self): + off_path = os.path.abspath(os.path.join(self.here, "off-path")) + self.run_extractor("-R", off_path) + self.check_only_traps_exists_and_clear("nameless", "mod1", "mod2") diff --git a/python/extractor/tests/test_omit_syntax_error.py b/python/extractor/tests/test_omit_syntax_error.py new file mode 100644 index 00000000000..8064d2e8972 --- /dev/null +++ b/python/extractor/tests/test_omit_syntax_error.py @@ -0,0 +1,22 @@ + +import sys +import os.path +import shutil +import unittest + +import semmle.populator +from tests import test_utils + +class OmitSyntaxErrorTest(test_utils.ExtractorTest): + + def __init__(self, name): + super(OmitSyntaxErrorTest, self).__init__(name) + self.module_path = os.path.abspath(os.path.join(self.here, "syntax-error")) + + def test_omit(self): + self.run_extractor("--omit-syntax-error", "error") + self.check_only_traps_exists_and_clear() + + def test_dont_omit(self): + self.run_extractor("error") + self.check_only_traps_exists_and_clear("error", "error") diff --git a/python/extractor/tests/test_parser.py b/python/extractor/tests/test_parser.py new file mode 100644 index 00000000000..e93ffd1ffd7 --- /dev/null +++ b/python/extractor/tests/test_parser.py @@ -0,0 +1,107 @@ +import sys +import os.path +import shutil +import unittest +import pytest +import warnings + +from tests import test_utils +from semmle.python.parser.dump_ast import old_parser, AstDumper, StdoutLogger +from semmle.python.parser.tsg_parser import parse as new_parser +import subprocess + +class ParserTest(unittest.TestCase): + def __init__(self, name): + super(ParserTest, self).__init__(name) + self.test_folder = os.path.join(os.path.dirname(__file__), "parser") + self.maxDiff = None + + + @pytest.fixture(autouse=True) + def capsys(self, capsys): + self.capsys = capsys + + def compare_parses(self, filename, logger): + pyfile = os.path.join(self.test_folder, filename) + stem = filename[:-3] + oldfile = os.path.join(self.test_folder, stem + ".old") + newfile = os.path.join(self.test_folder, stem + ".new") + old_error = False + new_error = False + try: + old_ast = old_parser(pyfile, logger) + with open(oldfile, "w") as old: + AstDumper(old).visit(old_ast) + except SyntaxError: + old_error = True + try: + new_ast = new_parser(pyfile, logger) + with open(newfile, "w") as new: + AstDumper(new).visit(new_ast) + except SyntaxError: + new_error = True + + if old_error or new_error: + raise Exception("Parser error: old_error={}, new_error={}".format(old_error, new_error)) + try: + diff = subprocess.check_output(["git", "diff", "--patience", "--no-index", oldfile, newfile]) + except subprocess.CalledProcessError as e: + diff = e.output + if diff: + pytest.fail(diff.decode("utf-8")) + self.assertEqual(self.capsys.readouterr().err, "") + os.remove(oldfile) + os.remove(newfile) + + def compare_expected(self, filename, logger, new=True ): + if sys.version_info.major < 3: + return + pyfile = os.path.join(self.test_folder, filename) + stem = filename[:-3] + expected = os.path.join(self.test_folder, stem + ".expected") + actual = os.path.join(self.test_folder, stem + ".actual") + parser = new_parser if new else old_parser + with warnings.catch_warnings(): + # The test case `b"this is not a unicode escape because we are in a + # bytestring: \N{AMPERSAND}"`` in strings_new.py gives a DeprecationWarning, + # however we are actually testing the parser behavior on such bad code, so + # we can't just "fix" the code. You would think we could use the Python + # warning filter to ignore this specific warning, but that doesn't work -- + # furthermore, using `error::DeprecationWarning` makes the *output* of the + # test change :O + # + # This was the best solution I could come up with that _both_ allows pytest + # to error on normal deprecation warnings, but also allows this one case to + # exist. + if filename == "strings_new.py": + warnings.simplefilter("ignore", DeprecationWarning) + ast = parser(pyfile, logger) + with open(actual, "w") as actual_file: + AstDumper(actual_file).visit(ast) + try: + diff = subprocess.check_output(["git", "diff", "--patience", "--no-index", expected, actual]) + except subprocess.CalledProcessError as e: + diff = e.output + if diff: + pytest.fail(diff.decode("utf-8")) + self.assertEqual(self.capsys.readouterr().err, "") + os.remove(actual) + + +def setup_tests(): + test_folder = os.path.join(os.path.dirname(__file__), "parser") + with StdoutLogger() as logger: + for file in os.listdir(test_folder): + if file.endswith(".py"): + stem = file[:-3] + test_name = "test_" + stem + if stem.endswith("_new"): + test_func = lambda self, file=file: self.compare_expected(file, logger, new=True) + elif stem.endswith("_old"): + test_func = lambda self, file=file: self.compare_expected(file, logger, new=False) + else: + test_func = lambda self, file=file: self.compare_parses(file, logger) + setattr(ParserTest, test_name, test_func) + +setup_tests() +del setup_tests diff --git a/python/extractor/tests/test_patterns.py b/python/extractor/tests/test_patterns.py new file mode 100644 index 00000000000..f218e7a4907 --- /dev/null +++ b/python/extractor/tests/test_patterns.py @@ -0,0 +1,27 @@ +import os +import json +import subprocess + +import semmle.path_filters +from tests import test_utils + +class ExtractorPatternsTest(test_utils.ExtractorTest): + + def __init__(self, name): + super(ExtractorPatternsTest, self).__init__(name) + + def test(self): + repo_dir = subprocess.Popen(["git", "rev-parse", "--show-toplevel"], stdout=subprocess.PIPE).communicate()[0].rstrip().decode("utf-8") + test_file_path = os.path.abspath(os.path.join(repo_dir, "unit-tests", "files", "pattern-matching", "patterns.json")) + with open(test_file_path) as test_file: + test_patterns = json.load(test_file) + for test_pattern in test_patterns: + pattern = test_pattern["pattern"] + regex = semmle.path_filters.glob_to_regex(pattern) + for matching_path in test_pattern["should_match"]: + self.assertTrue(regex.match(matching_path), "Pattern \"%s\" did not match path \"%s\"." % (pattern, matching_path)) + for matching_path in test_pattern["shouldnt_match"]: + self.assertFalse(regex.match(matching_path), "Pattern \"%s\" matched path \"%s\"." % (pattern, matching_path)) + + def test_escape_prefix(self): + semmle.path_filters.glob_to_regex("x", prefix="foo\\") diff --git a/python/extractor/tests/test_projectlayout.py b/python/extractor/tests/test_projectlayout.py new file mode 100644 index 00000000000..37aecdbd03a --- /dev/null +++ b/python/extractor/tests/test_projectlayout.py @@ -0,0 +1,133 @@ +# +# This is a port of com.semmle.extractor.projectstructure.ProjectLayoutTests +# and must be kept in sync +# + +from semmle.projectlayout import ProjectLayout +import unittest + +PROJECT_LAYOUT = ProjectLayout(u""" +@Example + +/this/path/will/remain +-this/path/will/not +/and/look//this/path/is/ok + +#Source +/src// +-/src/tests + +#Tests +/src/tests// + +#Generated +/gen +/gen2//gen + +#Misc +misc// +othermisc +//thirdmisc + +#ExecutionOrder +ex/order +-ex/order/tests/a +ex/order/tests +/src/tests//testA.c +#Patterns +**/*.included +**/inc +-**/exc +my +-my/excluded/**/files +my/**//files/**/a +//**/weird""".split('\n')) + +MINIMAL_LAYOUT = ProjectLayout(u""" +/included/path +- excluded/path""".split('\n')) + +CS_LAYOUT = ProjectLayout(u""" +#Production code +/ +-**/src.test + +#Testing code +**/src.test""".split('\n')) + +def map(path): + return PROJECT_LAYOUT.artificial_path(path) + +class ProjectLayoutTests(unittest.TestCase): + def test_advanced_patterns(self): + self.assertEqual(u"/Patterns/firstPattern.included", map(u"/firstPattern.included")) + self.assertEqual(u"/Patterns/P1/P2/a.included", map(u"/P1/P2/a.included")) + self.assertEqual(u"/Patterns/P3/P4/inc", map(u"/P3/P4/inc")) + self.assertEqual(u"/Patterns/P4/P5/inc/a.c", map(u"/P4/P5/inc/a.c")) + assert map(u"/P3/P4/inc/exc") is None + assert map(u"/P3/P4/inc/exc/a/b.c") is None + self.assertEqual(u"/Patterns/my/code", map(u"/my/code")) + assert map("u/my/excluded/but/very/interesting/files/a.c") is None + self.assertEqual(u"/Patterns/files/a/b.c", map(u"/my/excluded/but/very/interesting/files/a/b.c")) + self.assertEqual(u"/Patterns/P5/P6/weird", map(u"/P5/P6/weird")) + + def test_non_virtual_path(self): + self.assertEqual(u"/this/path/will/remain/the-same.c", map(u"/this/path/will/remain/the-same.c")) + assert map(u"/this/path/will/not/be/included.c") is None + self.assertEqual(u"/this/path/is/ok/to-use.c", map(u"/and/look/this/path/is/ok/to-use.c")) + + def test_ignore_unmentioned_paths(self): + assert map(u"/lib/foo.c") is None + + def test_do_not_match_partial_names(self): + assert map(u"/gen2/foo.c") is None + assert map(u"/src2/foo.c") is None + + def test_simple_mapping(self): + self.assertEqual(u"/Source/foo.c", map(u"/src/foo.c")) + + def test_match_in_sequence(self): + self.assertEqual(u"/ExecutionOrder/ex/order/tests/a", map("/ex/order/tests/a")) + self.assertEqual(u"/Tests/testA.c", map(u"/src/tests/testA.c")) + + def test_excluded_and_included(self): + self.assertEqual(u"/Tests/test.c", map("/src/tests/test.c")) + + def test_without_double_slashes(self): + self.assertEqual(u"/Generated/gen/gen.c", map("/gen/gen.c")) + + def test_middle_double_slash(self): + self.assertEqual(u"/Generated/gen/gen.c", map("/gen2/gen/gen.c")) + + def test_initial_double_slash(self): + self.assertEqual(u"/Misc/thirdmisc/misc.c", map("/thirdmisc/misc.c")) + + def test_map_directories(self): + self.assertEqual(u"/Generated/gen", map("/gen")) + self.assertEqual(u"/Generated/gen/", map("/gen/")) + self.assertEqual(u"/Source", map("/src")) + self.assertEqual(u"/Misc/thirdmisc", map("/thirdmisc")) + + def test_missing_initial_slash(self): + self.assertEqual(u"/Misc", map("/misc")) + self.assertEqual(u"/Misc/othermisc", map("/othermisc")) + + def test_minimal_layout(self): + self.assertEqual(u"/included/path/foo.c", MINIMAL_LAYOUT.artificial_path("/included/path/foo.c")) + assert MINIMAL_LAYOUT.artificial_path(u"/excluded/path/name") is None + + def test_project_names(self): + self.assertEqual(u"Example", PROJECT_LAYOUT.project_name()) + self.assertEqual(u"Example", PROJECT_LAYOUT.project_name("Something else")) + self.assertRaises(Exception, lambda: MINIMAL_LAYOUT.project_name()) + self.assertEqual(u"My project", MINIMAL_LAYOUT.project_name("My project")) + + def test_cs(self): + self.assertEqual(u"/Production code", CS_LAYOUT.artificial_path(u"")) + self.assertEqual(u"/Production code/", CS_LAYOUT.artificial_path(u"/")); + self.assertEqual(u"/Production code/AppAuth/ear/App/src", CS_LAYOUT.artificial_path(u"/AppAuth/ear/App/src")); + self.assertEqual(u"/Testing code/BUILD/bun/BUILD/src.test", CS_LAYOUT.artificial_path(u"/BUILD/bun/BUILD/src.test")); + + +if __name__ == "__main__": + unittest.main() diff --git a/python/extractor/tests/test_python_sanity.py b/python/extractor/tests/test_python_sanity.py new file mode 100644 index 00000000000..778b257d2d3 --- /dev/null +++ b/python/extractor/tests/test_python_sanity.py @@ -0,0 +1,23 @@ +import sys +import unittest + + +class PythonSanityTest(unittest.TestCase): + """Tests various implicit assumptions we have about Python behavior. + + This is intended to catch changes that may break extraction in future + versions of Python. + """ + + def __init__(self, name): + super(PythonSanityTest, self).__init__(name) + + def test_latin_1_encoding(self): + """Tests whether 'latin-1' acts as a "do nothing" encoding.""" + + s = bytes(range(256)) + u = str(s, 'latin-1') + s_as_tuple = tuple(s) + + u_as_tuple = tuple(map(ord, u)) + assert u_as_tuple == s_as_tuple diff --git a/python/extractor/tests/test_single.py b/python/extractor/tests/test_single.py new file mode 100644 index 00000000000..c4dacbc2464 --- /dev/null +++ b/python/extractor/tests/test_single.py @@ -0,0 +1,21 @@ + +import sys +import os.path +import shutil +import unittest + +import semmle.populator +from tests import test_utils + +class SingleThreadedTest(test_utils.ExtractorTest): + + def __init__(self, name): + super(SingleThreadedTest, self).__init__(name) + + def test_simple(self): + self.run_extractor("-z1", "package.sub.a") + self.check_only_traps_exists_and_clear("a", "package/", "sub/") + + def test_simple_exclude(self): + self.run_extractor("-z1", "-y", "package.sub", "mod1", "package.x", "package.sub.a") + self.check_only_traps_exists_and_clear("mod1", "package/", "x") diff --git a/python/extractor/tests/test_source_archive_unchanged.py b/python/extractor/tests/test_source_archive_unchanged.py new file mode 100644 index 00000000000..524b5199f24 --- /dev/null +++ b/python/extractor/tests/test_source_archive_unchanged.py @@ -0,0 +1,27 @@ +import os +import subprocess +import filecmp + +from tests.test_utils import ExtractorTest, environment + +class SourceArchiveUnchangedTest(ExtractorTest): + """Checks that the files stored in the source archive are exact copies of the originals.""" + + def __init__(self, name): + super(SourceArchiveUnchangedTest, self).__init__(name) + testfiledir = os.path.abspath(os.path.join(self.here, "source_archive_unchanged")) + self.src_path = os.path.join(testfiledir, "src") + self.src_archive = os.path.join(testfiledir, "src_archive") + + def test_source_archive_unchanged(self): + self.run_extractor( + "-F", "tests/source_archive_unchanged/src/weird_bytes.py", + "-F", "tests/source_archive_unchanged/src/no_newline.py" + ) + source_archive_location = os.path.join(self.src_archive, os.path.relpath(self.src_path, "/")) + for filename in ("weird_bytes.py", "no_newline.py"): + orig = os.path.join(self.src_path, filename) + copy = os.path.join(source_archive_location, filename) + if not filecmp.cmp(orig, copy): + self.fail("The source archive version of the following file has changed: " + copy) + self.check_source_exists_and_clear(os.path.join(source_archive_location, filename)) diff --git a/python/extractor/tests/test_tokenizer.py b/python/extractor/tests/test_tokenizer.py new file mode 100644 index 00000000000..cd843f5dad3 --- /dev/null +++ b/python/extractor/tests/test_tokenizer.py @@ -0,0 +1,66 @@ + +import sys +import os.path +import shutil +import unittest + +import semmle.populator +from tests import test_utils +from semmle.python.parser import tokenizer +from blib2to3.pgen2.token import tok_name + +def unescape(s): + return u"'" + s.replace(u"\\", u"\\\\").replace(u"\n", u"\\n").replace(u"\t", u"\\t").replace(u"\'", u"\\'") + u"'" + + +def format_token(token): + type, text, start, end = token + # Use Python 3 tokenize style output, regardless of version + token_range = u"%d,%d-%d,%d:" % (start + end) + return u"%-20s%-15s%s" % (token_range, tok_name[type], unescape(text)) + +class TokenizerTest(unittest.TestCase): + + def __init__(self, name): + super(TokenizerTest, self).__init__(name) + self.test_folder = os.path.join(os.path.dirname(__file__), "tokenizer") + + def setUp(self): + pass + + def tearDown(self): + pass + + def compare_tokens(self, filename): + pyfile = os.path.join(self.test_folder, filename) + tokenfile = os.path.join(self.test_folder, filename[:-3]+".tokens") + with open(tokenfile, "rb") as tkns: + expected = [ line.strip().decode("utf8") for line in tkns if line.strip() ] + try: + with open(pyfile, "rb") as srcfile: + srcbytes = srcfile.read() + encoding, srcbytes = tokenizer.encoding_from_source(srcbytes) + text = srcbytes.decode(encoding) + actual = [format_token(tkn) for tkn in tokenizer.Tokenizer(text).tokens()] + except Exception as ex: + print(ex) + self.fail("Failed to tokenize " + filename) + if expected == actual: + return + actualfile = os.path.join(self.test_folder, filename[:-3]+".actual") + with open(actualfile, "wb") as out: + for line in actual: + out.write(line.encode("utf8")) + out.write(b"\n") + lineno = 1 + for expected_tkn, actual_tkn in zip(expected, actual): + assert type(expected_tkn) is str + assert type(actual_tkn) is str + self.assertEqual(expected_tkn, actual_tkn, " at %s:%d" % (filename[:-3]+".tokens", lineno)) + lineno += 1 + self.assertTrue(len(expected) == len(actual), "Too few or too many tokens for %s" % filename) + + def test_tokens(self): + for file in os.listdir(self.test_folder): + if file.endswith(".py"): + self.compare_tokens(file) diff --git a/python/extractor/tests/test_trap_cache.py b/python/extractor/tests/test_trap_cache.py new file mode 100644 index 00000000000..8bb2e3eda2b --- /dev/null +++ b/python/extractor/tests/test_trap_cache.py @@ -0,0 +1,39 @@ + +import sys +import os.path +import shutil +import unittest + +import semmle.populator +from tests import test_utils + +class TrapCacheTest(test_utils.ExtractorTest): + + def __init__(self, name): + super(TrapCacheTest, self).__init__(name) + self.trap_cache = os.path.abspath(os.path.join(self.here, "cache")) + + + def tearDown(self): + super(TrapCacheTest, self).tearDown() + shutil.rmtree(self.trap_cache, ignore_errors=True) + + def run_extractor(self, *args): + super(TrapCacheTest, self).run_extractor(*(["-c", self.trap_cache] + list(args))) + + def create_trap_cache(self): + try: + os.makedirs(self.trap_cache) + except: + if os.path.exists(self.trap_cache): + return + raise + + def test_pre_created(self): + self.create_trap_cache() + self.run_extractor("mod1", "package.x", "package.sub.a") + self.check_only_traps_exists_and_clear("mod1", "package/", "x", "sub/", "a") + + def test_not_pre_created(self): + self.run_extractor("mod1", "package.x", "package.sub.a") + self.check_only_traps_exists_and_clear("mod1", "package/", "x", "sub/", "a") diff --git a/python/extractor/tests/test_use_projectlayout.py b/python/extractor/tests/test_use_projectlayout.py new file mode 100644 index 00000000000..fde36016f97 --- /dev/null +++ b/python/extractor/tests/test_use_projectlayout.py @@ -0,0 +1,27 @@ +import os +import subprocess + +from tests.test_utils import ExtractorTest, environment + +class ProjectLayoutUseTest(ExtractorTest): + + def __init__(self, name): + super(ProjectLayoutUseTest, self).__init__(name) + self.module_path = os.path.abspath(os.path.join(self.here, "project_layout")) + self.src_path = os.path.join(self.module_path, "src") + self.src_archive = os.path.join(self.module_path, "src_archive") + + def test_layout(self): + with environment("SEMMLE_PATH_TRANSFORMER", "tests/project_layout/project-layout"): + self.run_extractor("-R", self.src_path) + self.check_only_traps_exists_and_clear("mod1") + self.check_source_exists_and_clear(os.path.join(self.src_archive, "target", "src", "mod1.py")) + + def test_invalid_layout(self): + try: + with environment("SEMMLE_PATH_TRANSFORMER", "nonsuch/project-layout"): + self.run_extractor("-R", self.src_path) + except subprocess.CalledProcessError as ex: + self.assertEqual(ex.returncode, 2) + else: + self.fail("Not cleanly halting on invalid path transformer") diff --git a/python/extractor/tests/test_utils.py b/python/extractor/tests/test_utils.py new file mode 100644 index 00000000000..74ebbacf119 --- /dev/null +++ b/python/extractor/tests/test_utils.py @@ -0,0 +1,83 @@ +import os +import sys +import semmle +import unittest +import shutil +import re +from contextlib import contextmanager + +import semmle.populator +import subprocess + +BUILTIN_TRAP = "builtins.trap.gz" + +PY_PATTERN = re.compile(r"(\w+)\.py.[A-Za-z0-9=_\-]+\.trap\.gz") +FOLDER_PATTERN = re.compile(r"(\w+).[A-Za-z0-9=_\-]+\.trap\.gz") + + +@contextmanager +def environment(key, value): + os.environ[key] = value + try: + yield + finally: + del os.environ[key] + + +class ExtractorTest(unittest.TestCase): + + def __init__(self, name): + unittest.TestCase.__init__(self, name) + self.here = os.path.dirname(__file__) + self.module_path = os.path.abspath(os.path.join(self.here, "data")) + self.trap_path = os.path.abspath(os.path.join(self.here, "traps")) + self.src_archive = None + + def setUp(self): + try: + os.makedirs(self.trap_path) + except: + if os.path.exists(self.trap_path): + return + raise + + def tearDown(self): + shutil.rmtree(self.trap_path, ignore_errors=True) + + def check_only_traps_exists_and_clear(self, *module_names): + modules = list(module_names) + for filename in os.listdir(self.trap_path): + match = PY_PATTERN.match(filename) + if match: + name = match.group(1) + else: + match = FOLDER_PATTERN.match(filename) + if match: + name = match.group(1) + "/" + else: + continue + if name in modules: + modules.remove(name) + path = os.path.join(self.trap_path, filename) + os.remove(path) + if modules: + self.fail("No trap file for " + modules.pop()) + for _, _, filenames in os.walk(self.trap_path): + #Ignore the builtin trap file, any `__init__.py` files, and $file, $interpreter trap files. + filenames = [ name for name in filenames if not name.startswith("$") and not name.startswith("__init__.py") and name != BUILTIN_TRAP] + self.assertFalse(filenames, "Some trap files remain: " + ", ".join(filenames)) + + def check_source_exists_and_clear(self, path): + try: + os.remove(path) + except OSError: + self.fail("File '%s' does not exist" % path) + + def run_extractor(self, *args): + cmd = [sys.executable, os.path.join(os.path.dirname(self.here), "python_tracer.py"), "--quiet" ] + ["-p", self.module_path, "-o", self.trap_path] + list(args) + with environment("CODEQL_EXTRACTOR_PYTHON_ENABLE_PYTHON2_EXTRACTION", "True"): + if self.src_archive: + with environment("CODEQL_EXTRACTOR_PYTHON_SOURCE_ARCHIVE_DIR", self.src_archive): + subprocess.check_call(cmd) + else: + subprocess.check_call(cmd) diff --git a/python/extractor/tests/tokenizer/basic.py b/python/extractor/tests/tokenizer/basic.py new file mode 100644 index 00000000000..473a4046be6 --- /dev/null +++ b/python/extractor/tests/tokenizer/basic.py @@ -0,0 +1,134 @@ + +#AST nodes: Classes, Functions, Modules, expr, stmts + +class C: + + def stmts(p0, p1): + global x + assert x == 2 + y = 3 + y += 4 + while True: + break + while x > 0: + x -= 1 + continue + + f() + for x in y: + pass + if x: + print(y) + import a + import a.b as c + import a as b + from a.b import c + + + with open("file") as f: + pass + try: + 1/0 + except Exception as ex: + del y + finally: + del x + if x: + raise Exception() + else: + return + + def exprs(p2, p3): + p2.x = 2 + a = p3.y + x = 1 + 2 + y = b'h4tpvhsa' + call(arg0, arg1, name0="Hi", name1=y, *(), **{}) + x < y + {1:1, 2: 2} + + x[a, 7] + (x for x in y) + 17 if x < y else 16 + lambda x : x * y + [ 1, 2, a, x.b, p1.c ] + [ a + "Hi" for a in str(y) ] + + + + #a, *b = y + u"Hi" + x[0] + x[y[0]] + (p2, p3, 7) + +#Some multiline strings +''' +Single quotes string''' + +""" +Double-quotes +string""" + +r''' +Bytes +''' + +U""" +Raw +Unicode +""" + +#Decorated function +@deco +def f(): + pass + +#Inner function (see ODASA-1774) +def outer(): + def inner(): + pass + +#Oddly laid out comprehension +[[ + x for x in y + ] + + for a in b +] + +#Nested binary operations +"Hello" + " " + "world" +1+2+f() +1+(2+3) + +# operations +a|b&c+d-e +x*f%g^h@j**k + +#Augmented assigns +a @= b +a |= b +a *= b + +~a + +#Comparisons +< +> +<= +>= +!= +== +is +is not + +(""" +""") +del x + +`backticks` + +x := y + +1 <> 2 diff --git a/python/extractor/tests/tokenizer/basic.tokens b/python/extractor/tests/tokenizer/basic.tokens new file mode 100644 index 00000000000..91445621022 --- /dev/null +++ b/python/extractor/tests/tokenizer/basic.tokens @@ -0,0 +1,472 @@ +2,0-2,52: COMMENT '#AST nodes: Classes, Functions, Modules, expr, stmts' +4,0-4,5: NAME 'class' +4,6-4,7: NAME 'C' +4,7-4,8: COLON ':' +4,8-4,9: NEWLINE '\n' +6,0-6,4: INDENT ' ' +6,4-6,7: NAME 'def' +6,8-6,13: NAME 'stmts' +6,13-6,14: LPAR '(' +6,14-6,16: NAME 'p0' +6,16-6,17: COMMA ',' +6,18-6,20: NAME 'p1' +6,20-6,21: RPAR ')' +6,21-6,22: COLON ':' +6,22-6,23: NEWLINE '\n' +7,0-7,8: INDENT ' ' +7,8-7,14: NAME 'global' +7,15-7,16: NAME 'x' +7,16-7,17: NEWLINE '\n' +8,8-8,14: NAME 'assert' +8,15-8,16: NAME 'x' +8,17-8,19: OP '==' +8,20-8,21: NUMBER '2' +8,21-8,22: NEWLINE '\n' +9,8-9,9: NAME 'y' +9,10-9,11: OP '=' +9,12-9,13: NUMBER '3' +9,13-9,14: NEWLINE '\n' +10,8-10,9: NAME 'y' +10,10-10,12: OP '+=' +10,13-10,14: NUMBER '4' +10,14-10,15: NEWLINE '\n' +11,8-11,13: NAME 'while' +11,14-11,18: NAME 'True' +11,18-11,19: COLON ':' +11,19-11,20: NEWLINE '\n' +12,0-12,12: INDENT ' ' +12,12-12,17: NAME 'break' +12,17-12,18: NEWLINE '\n' +13,8-13,8: DEDENT '' +13,8-13,13: NAME 'while' +13,14-13,15: NAME 'x' +13,16-13,17: OP '>' +13,18-13,19: NUMBER '0' +13,19-13,20: COLON ':' +13,20-13,21: NEWLINE '\n' +14,0-14,12: INDENT ' ' +14,12-14,13: NAME 'x' +14,14-14,16: OP '-=' +14,17-14,18: NUMBER '1' +14,18-14,19: NEWLINE '\n' +15,12-15,20: NAME 'continue' +15,20-15,21: NEWLINE '\n' +17,8-17,8: DEDENT '' +17,8-17,9: NAME 'f' +17,9-17,10: LPAR '(' +17,10-17,11: RPAR ')' +17,11-17,12: NEWLINE '\n' +18,8-18,11: NAME 'for' +18,12-18,13: NAME 'x' +18,14-18,16: NAME 'in' +18,17-18,18: NAME 'y' +18,18-18,19: COLON ':' +18,19-18,20: NEWLINE '\n' +19,0-19,12: INDENT ' ' +19,12-19,16: NAME 'pass' +19,16-19,17: NEWLINE '\n' +20,8-20,8: DEDENT '' +20,8-20,10: NAME 'if' +20,11-20,12: NAME 'x' +20,12-20,13: COLON ':' +20,13-20,14: NEWLINE '\n' +21,0-21,12: INDENT ' ' +21,12-21,17: NAME 'print' +21,17-21,18: LPAR '(' +21,18-21,19: NAME 'y' +21,19-21,20: RPAR ')' +21,20-21,21: NEWLINE '\n' +22,8-22,8: DEDENT '' +22,8-22,14: NAME 'import' +22,15-22,16: NAME 'a' +22,16-22,17: NEWLINE '\n' +23,8-23,14: NAME 'import' +23,15-23,16: NAME 'a' +23,16-23,17: DOT '.' +23,17-23,18: NAME 'b' +23,19-23,21: NAME 'as' +23,22-23,23: NAME 'c' +23,23-23,24: NEWLINE '\n' +24,8-24,14: NAME 'import' +24,15-24,16: NAME 'a' +24,17-24,19: NAME 'as' +24,20-24,21: NAME 'b' +24,21-24,22: NEWLINE '\n' +25,8-25,12: NAME 'from' +25,13-25,14: NAME 'a' +25,14-25,15: DOT '.' +25,15-25,16: NAME 'b' +25,17-25,23: NAME 'import' +25,24-25,25: NAME 'c' +25,25-25,26: NEWLINE '\n' +28,8-28,12: NAME 'with' +28,13-28,17: NAME 'open' +28,17-28,18: LPAR '(' +28,18-28,24: STRING '"file"' +28,24-28,25: RPAR ')' +28,26-28,28: NAME 'as' +28,29-28,30: NAME 'f' +28,30-28,31: COLON ':' +28,31-28,32: NEWLINE '\n' +29,0-29,12: INDENT ' ' +29,12-29,16: NAME 'pass' +29,16-29,17: NEWLINE '\n' +30,8-30,8: DEDENT '' +30,8-30,11: NAME 'try' +30,11-30,12: COLON ':' +30,12-30,13: NEWLINE '\n' +31,0-31,12: INDENT ' ' +31,12-31,13: NUMBER '1' +31,13-31,14: OP '/' +31,14-31,15: NUMBER '0' +31,15-31,16: NEWLINE '\n' +32,8-32,8: DEDENT '' +32,8-32,14: NAME 'except' +32,15-32,24: NAME 'Exception' +32,25-32,27: NAME 'as' +32,28-32,30: NAME 'ex' +32,30-32,31: COLON ':' +32,31-32,32: NEWLINE '\n' +33,0-33,12: INDENT ' ' +33,12-33,15: NAME 'del' +33,16-33,17: NAME 'y' +33,17-33,18: NEWLINE '\n' +34,8-34,8: DEDENT '' +34,8-34,15: NAME 'finally' +34,15-34,16: COLON ':' +34,16-34,17: NEWLINE '\n' +35,0-35,12: INDENT ' ' +35,12-35,15: NAME 'del' +35,16-35,17: NAME 'x' +35,17-35,18: NEWLINE '\n' +36,8-36,8: DEDENT '' +36,8-36,10: NAME 'if' +36,11-36,12: NAME 'x' +36,12-36,13: COLON ':' +36,13-36,14: NEWLINE '\n' +37,0-37,12: INDENT ' ' +37,12-37,17: NAME 'raise' +37,18-37,27: NAME 'Exception' +37,27-37,28: LPAR '(' +37,28-37,29: RPAR ')' +37,29-37,30: NEWLINE '\n' +38,8-38,8: DEDENT '' +38,8-38,12: NAME 'else' +38,12-38,13: COLON ':' +38,13-38,14: NEWLINE '\n' +39,0-39,12: INDENT ' ' +39,12-39,18: NAME 'return' +39,18-39,19: NEWLINE '\n' +41,4-41,4: DEDENT '' +41,4-41,4: DEDENT '' +41,4-41,7: NAME 'def' +41,8-41,13: NAME 'exprs' +41,13-41,14: LPAR '(' +41,14-41,16: NAME 'p2' +41,16-41,17: COMMA ',' +41,18-41,20: NAME 'p3' +41,20-41,21: RPAR ')' +41,21-41,22: COLON ':' +41,22-41,23: NEWLINE '\n' +42,0-42,8: INDENT ' ' +42,8-42,10: NAME 'p2' +42,10-42,11: DOT '.' +42,11-42,12: NAME 'x' +42,13-42,14: OP '=' +42,15-42,16: NUMBER '2' +42,16-42,17: NEWLINE '\n' +43,8-43,9: NAME 'a' +43,10-43,11: OP '=' +43,12-43,14: NAME 'p3' +43,14-43,15: DOT '.' +43,15-43,16: NAME 'y' +43,16-43,17: NEWLINE '\n' +44,8-44,9: NAME 'x' +44,10-44,11: OP '=' +44,12-44,13: NUMBER '1' +44,14-44,15: OP '+' +44,16-44,17: NUMBER '2' +44,17-44,18: NEWLINE '\n' +45,8-45,9: NAME 'y' +45,10-45,11: OP '=' +45,12-45,23: STRING 'b\'h4tpvhsa\'' +45,23-45,24: NEWLINE '\n' +46,8-46,12: NAME 'call' +46,12-46,13: LPAR '(' +46,13-46,17: NAME 'arg0' +46,17-46,18: COMMA ',' +46,19-46,23: NAME 'arg1' +46,23-46,24: COMMA ',' +46,25-46,30: NAME 'name0' +46,30-46,31: OP '=' +46,31-46,35: STRING '"Hi"' +46,35-46,36: COMMA ',' +46,37-46,42: NAME 'name1' +46,42-46,43: OP '=' +46,43-46,44: NAME 'y' +46,44-46,45: COMMA ',' +46,46-46,47: OP '*' +46,47-46,48: LPAR '(' +46,48-46,49: RPAR ')' +46,49-46,50: COMMA ',' +46,51-46,53: OP '**' +46,53-46,54: LBRACE '{' +46,54-46,55: RBRACE '}' +46,55-46,56: RPAR ')' +46,56-46,57: NEWLINE '\n' +47,8-47,9: NAME 'x' +47,10-47,11: OP '<' +47,12-47,13: NAME 'y' +47,13-47,14: NEWLINE '\n' +48,8-48,9: LBRACE '{' +48,9-48,10: NUMBER '1' +48,10-48,11: COLON ':' +48,11-48,12: NUMBER '1' +48,12-48,13: COMMA ',' +48,14-48,15: NUMBER '2' +48,15-48,16: COLON ':' +48,17-48,18: NUMBER '2' +48,18-48,19: RBRACE '}' +48,19-48,20: NEWLINE '\n' +50,8-50,9: NAME 'x' +50,9-50,10: LSQB '[' +50,10-50,11: NAME 'a' +50,11-50,12: COMMA ',' +50,13-50,14: NUMBER '7' +50,14-50,15: RSQB ']' +50,15-50,16: NEWLINE '\n' +51,8-51,9: LPAR '(' +51,9-51,10: NAME 'x' +51,11-51,14: NAME 'for' +51,15-51,16: NAME 'x' +51,17-51,19: NAME 'in' +51,20-51,21: NAME 'y' +51,21-51,22: RPAR ')' +51,22-51,23: NEWLINE '\n' +52,8-52,10: NUMBER '17' +52,11-52,13: NAME 'if' +52,14-52,15: NAME 'x' +52,16-52,17: OP '<' +52,18-52,19: NAME 'y' +52,20-52,24: NAME 'else' +52,25-52,27: NUMBER '16' +52,27-52,28: NEWLINE '\n' +53,8-53,14: NAME 'lambda' +53,15-53,16: NAME 'x' +53,17-53,18: COLON ':' +53,19-53,20: NAME 'x' +53,21-53,22: OP '*' +53,23-53,24: NAME 'y' +53,24-53,25: NEWLINE '\n' +54,8-54,9: LSQB '[' +54,10-54,11: NUMBER '1' +54,11-54,12: COMMA ',' +54,13-54,14: NUMBER '2' +54,14-54,15: COMMA ',' +54,16-54,17: NAME 'a' +54,17-54,18: COMMA ',' +54,19-54,20: NAME 'x' +54,20-54,21: DOT '.' +54,21-54,22: NAME 'b' +54,22-54,23: COMMA ',' +54,24-54,26: NAME 'p1' +54,26-54,27: DOT '.' +54,27-54,28: NAME 'c' +54,29-54,30: RSQB ']' +54,30-54,31: NEWLINE '\n' +55,8-55,9: LSQB '[' +55,10-55,11: NAME 'a' +55,12-55,13: OP '+' +55,14-55,18: STRING '"Hi"' +55,19-55,22: NAME 'for' +55,23-55,24: NAME 'a' +55,25-55,27: NAME 'in' +55,28-55,31: NAME 'str' +55,31-55,32: LPAR '(' +55,32-55,33: NAME 'y' +55,33-55,34: RPAR ')' +55,35-55,36: RSQB ']' +55,36-55,37: NEWLINE '\n' +59,8-59,18: COMMENT '#a, *b = y' +60,8-60,13: STRING 'u"Hi"' +60,13-60,14: NEWLINE '\n' +61,8-61,9: NAME 'x' +61,9-61,10: LSQB '[' +61,10-61,11: NUMBER '0' +61,11-61,12: RSQB ']' +61,12-61,13: NEWLINE '\n' +62,8-62,9: NAME 'x' +62,9-62,10: LSQB '[' +62,10-62,11: NAME 'y' +62,11-62,12: LSQB '[' +62,12-62,13: NUMBER '0' +62,13-62,14: RSQB ']' +62,14-62,15: RSQB ']' +62,15-62,16: NEWLINE '\n' +63,8-63,9: LPAR '(' +63,9-63,11: NAME 'p2' +63,11-63,12: COMMA ',' +63,13-63,15: NAME 'p3' +63,15-63,16: COMMA ',' +63,17-63,18: NUMBER '7' +63,18-63,19: RPAR ')' +63,19-63,20: NEWLINE '\n' +65,0-65,23: COMMENT '#Some multiline strings' +66,0-66,0: DEDENT '' +66,0-66,0: DEDENT '' +66,0-67,23: STRING '\'\'\'\nSingle quotes string\'\'\'' +67,23-67,24: NEWLINE '\n' +69,0-71,9: STRING '"""\nDouble-quotes\nstring"""' +71,9-71,10: NEWLINE '\n' +73,0-75,3: STRING 'r\'\'\'\nBytes\n\'\'\'' +75,3-75,4: NEWLINE '\n' +77,0-80,3: STRING 'U"""\nRaw\nUnicode\n"""' +80,3-80,4: NEWLINE '\n' +82,0-82,19: COMMENT '#Decorated function' +83,0-83,1: AT '@' +83,1-83,5: NAME 'deco' +83,5-83,6: NEWLINE '\n' +84,0-84,3: NAME 'def' +84,4-84,5: NAME 'f' +84,5-84,6: LPAR '(' +84,6-84,7: RPAR ')' +84,7-84,8: COLON ':' +84,8-84,9: NEWLINE '\n' +85,0-85,4: INDENT ' ' +85,4-85,8: NAME 'pass' +85,8-85,9: NEWLINE '\n' +87,0-87,32: COMMENT '#Inner function (see ODASA-1774)' +88,0-88,0: DEDENT '' +88,0-88,3: NAME 'def' +88,4-88,9: NAME 'outer' +88,9-88,10: LPAR '(' +88,10-88,11: RPAR ')' +88,11-88,12: COLON ':' +88,12-88,13: NEWLINE '\n' +89,0-89,4: INDENT ' ' +89,4-89,7: NAME 'def' +89,8-89,13: NAME 'inner' +89,13-89,14: LPAR '(' +89,14-89,15: RPAR ')' +89,15-89,16: COLON ':' +89,16-89,17: NEWLINE '\n' +90,0-90,8: INDENT ' ' +90,8-90,12: NAME 'pass' +90,12-90,13: NEWLINE '\n' +92,0-92,29: COMMENT '#Oddly laid out comprehension' +93,0-93,0: DEDENT '' +93,0-93,0: DEDENT '' +93,0-93,1: LSQB '[' +93,1-93,2: LSQB '[' +94,2-94,3: NAME 'x' +94,4-94,7: NAME 'for' +94,8-94,9: NAME 'x' +94,10-94,12: NAME 'in' +94,13-94,14: NAME 'y' +95,2-95,3: RSQB ']' +97,2-97,5: NAME 'for' +97,6-97,7: NAME 'a' +97,8-97,10: NAME 'in' +97,11-97,12: NAME 'b' +98,0-98,1: RSQB ']' +98,1-98,2: NEWLINE '\n' +100,0-100,25: COMMENT '#Nested binary operations' +101,0-101,7: STRING '"Hello"' +101,8-101,9: OP '+' +101,10-101,13: STRING '" "' +101,14-101,15: OP '+' +101,16-101,23: STRING '"world"' +101,23-101,24: NEWLINE '\n' +102,0-102,1: NUMBER '1' +102,1-102,2: OP '+' +102,2-102,3: NUMBER '2' +102,3-102,4: OP '+' +102,4-102,5: NAME 'f' +102,5-102,6: LPAR '(' +102,6-102,7: RPAR ')' +102,7-102,8: NEWLINE '\n' +103,0-103,1: NUMBER '1' +103,1-103,2: OP '+' +103,2-103,3: LPAR '(' +103,3-103,4: NUMBER '2' +103,4-103,5: OP '+' +103,5-103,6: NUMBER '3' +103,6-103,7: RPAR ')' +103,7-103,8: NEWLINE '\n' +105,0-105,12: COMMENT '# operations' +106,0-106,1: NAME 'a' +106,1-106,2: OP '|' +106,2-106,3: NAME 'b' +106,3-106,4: OP '&' +106,4-106,5: NAME 'c' +106,5-106,6: OP '+' +106,6-106,7: NAME 'd' +106,7-106,8: OP '-' +106,8-106,9: NAME 'e' +106,9-106,10: NEWLINE '\n' +107,0-107,1: NAME 'x' +107,1-107,2: OP '*' +107,2-107,3: NAME 'f' +107,3-107,4: OP '%' +107,4-107,5: NAME 'g' +107,5-107,6: OP '^' +107,6-107,7: NAME 'h' +107,7-107,8: AT '@' +107,8-107,9: NAME 'j' +107,9-107,11: OP '**' +107,11-107,12: NAME 'k' +107,12-107,13: NEWLINE '\n' +109,0-109,18: COMMENT '#Augmented assigns' +110,0-110,1: NAME 'a' +110,2-110,4: OP '@=' +110,5-110,6: NAME 'b' +110,6-110,7: NEWLINE '\n' +111,0-111,1: NAME 'a' +111,2-111,4: OP '|=' +111,5-111,6: NAME 'b' +111,6-111,7: NEWLINE '\n' +112,0-112,1: NAME 'a' +112,2-112,4: OP '*=' +112,5-112,6: NAME 'b' +112,6-112,7: NEWLINE '\n' +114,0-114,1: OP '~' +114,1-114,2: NAME 'a' +114,2-114,3: NEWLINE '\n' +116,0-116,12: COMMENT '#Comparisons' +117,0-117,1: OP '<' +117,1-117,2: NEWLINE '\n' +118,0-118,1: OP '>' +118,1-118,2: NEWLINE '\n' +119,0-119,2: OP '<=' +119,2-119,3: NEWLINE '\n' +120,0-120,2: OP '>=' +120,2-120,3: NEWLINE '\n' +121,0-121,2: OP '!=' +121,2-121,3: NEWLINE '\n' +122,0-122,2: OP '==' +122,2-122,3: NEWLINE '\n' +123,0-123,2: NAME 'is' +123,2-123,3: NEWLINE '\n' +124,0-124,2: NAME 'is' +124,3-124,6: NAME 'not' +124,6-124,7: NEWLINE '\n' +126,0-126,1: LPAR '(' +126,1-127,3: STRING '"""\n"""' +127,3-127,4: RPAR ')' +127,4-127,5: NEWLINE '\n' +128,0-128,3: NAME 'del' +128,4-128,5: NAME 'x' +128,5-128,6: NEWLINE '\n' +130,0-130,1: BACKQUOTE '`' +130,1-130,10: NAME 'backticks' +130,10-130,11: BACKQUOTE '`' +130,11-130,12: NEWLINE '\n' +132,0-132,1: NAME 'x' +132,3-132,4: COLONEQUAL ':=' +132,5-132,6: NAME 'y' +132,6-132,7: NEWLINE '\n' +134,0-134,1: NUMBER '1' +134,2-134,4: OP '<>' +134,5-134,6: NUMBER '2' +134,6-134,7: NEWLINE '\n' +135,0-135,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/close_brace.py b/python/extractor/tests/tokenizer/close_brace.py new file mode 100644 index 00000000000..f64214bb17c --- /dev/null +++ b/python/extractor/tests/tokenizer/close_brace.py @@ -0,0 +1,3 @@ +} +) +] diff --git a/python/extractor/tests/tokenizer/close_brace.tokens b/python/extractor/tests/tokenizer/close_brace.tokens new file mode 100644 index 00000000000..75d0c8feff6 --- /dev/null +++ b/python/extractor/tests/tokenizer/close_brace.tokens @@ -0,0 +1,7 @@ +1,0-1,1: RBRACE '}' +1,1-1,2: NEWLINE '\n' +2,0-2,1: RPAR ')' +2,1-2,2: NEWLINE '\n' +3,0-3,1: RSQB ']' +3,1-3,2: NEWLINE '\n' +4,0-4,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/comments.py b/python/extractor/tests/tokenizer/comments.py new file mode 100644 index 00000000000..1f89e4debc5 --- /dev/null +++ b/python/extractor/tests/tokenizer/comments.py @@ -0,0 +1,13 @@ + +import sys + +def f(): + code-here # Line end comment + #Indented comment +#Unindented comment + return 1 + +def g(arg): + return arg + +x = g(f()) diff --git a/python/extractor/tests/tokenizer/comments.tokens b/python/extractor/tests/tokenizer/comments.tokens new file mode 100644 index 00000000000..c76d40757e0 --- /dev/null +++ b/python/extractor/tests/tokenizer/comments.tokens @@ -0,0 +1,43 @@ +2,0-2,6: NAME 'import' +2,7-2,10: NAME 'sys' +2,10-2,11: NEWLINE '\n' +4,0-4,3: NAME 'def' +4,4-4,5: NAME 'f' +4,5-4,6: LPAR '(' +4,6-4,7: RPAR ')' +4,7-4,8: COLON ':' +4,8-4,9: NEWLINE '\n' +5,0-5,4: INDENT ' ' +5,4-5,8: NAME 'code' +5,8-5,9: OP '-' +5,9-5,13: NAME 'here' +5,14-5,32: COMMENT '# Line end comment' +5,32-5,33: NEWLINE '\n' +6,4-6,21: COMMENT '#Indented comment' +7,0-7,19: COMMENT '#Unindented comment' +8,4-8,10: NAME 'return' +8,11-8,12: NUMBER '1' +8,12-8,13: NEWLINE '\n' +10,0-10,0: DEDENT '' +10,0-10,3: NAME 'def' +10,4-10,5: NAME 'g' +10,5-10,6: LPAR '(' +10,6-10,9: NAME 'arg' +10,9-10,10: RPAR ')' +10,10-10,11: COLON ':' +10,11-10,12: NEWLINE '\n' +11,0-11,4: INDENT ' ' +11,4-11,10: NAME 'return' +11,11-11,14: NAME 'arg' +11,14-11,15: NEWLINE '\n' +13,0-13,0: DEDENT '' +13,0-13,1: NAME 'x' +13,2-13,3: OP '=' +13,4-13,5: NAME 'g' +13,5-13,6: LPAR '(' +13,6-13,7: NAME 'f' +13,7-13,8: LPAR '(' +13,8-13,9: RPAR ')' +13,9-13,10: RPAR ')' +13,10-13,11: NEWLINE '\n' +14,0-14,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/continuation.py b/python/extractor/tests/tokenizer/continuation.py new file mode 100644 index 00000000000..c9516a29a24 --- /dev/null +++ b/python/extractor/tests/tokenizer/continuation.py @@ -0,0 +1,5 @@ +def foo(): + pass \ +\ +\ + diff --git a/python/extractor/tests/tokenizer/continuation.tokens b/python/extractor/tests/tokenizer/continuation.tokens new file mode 100644 index 00000000000..a0d221967a2 --- /dev/null +++ b/python/extractor/tests/tokenizer/continuation.tokens @@ -0,0 +1,11 @@ +1,0-1,3: NAME 'def' +1,4-1,7: NAME 'foo' +1,7-1,8: LPAR '(' +1,8-1,9: RPAR ')' +1,9-1,10: COLON ':' +1,10-1,11: NEWLINE '\n' +2,0-2,4: INDENT ' ' +2,4-2,8: NAME 'pass' +5,0-5,1: NEWLINE '\n' +6,0-6,0: DEDENT '' +6,0-6,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/dollar.py b/python/extractor/tests/tokenizer/dollar.py new file mode 100644 index 00000000000..d355cb52a39 --- /dev/null +++ b/python/extractor/tests/tokenizer/dollar.py @@ -0,0 +1,2 @@ +$name +$ßðđ0 diff --git a/python/extractor/tests/tokenizer/dollar.tokens b/python/extractor/tests/tokenizer/dollar.tokens new file mode 100644 index 00000000000..7b0d3646c75 --- /dev/null +++ b/python/extractor/tests/tokenizer/dollar.tokens @@ -0,0 +1,5 @@ +1,0-1,5: DOLLARNAME '$name' +1,5-1,6: NEWLINE '\n' +2,0-2,5: DOLLARNAME '$ßðđ0' +2,5-2,6: NEWLINE '\n' +3,0-3,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/dots.py b/python/extractor/tests/tokenizer/dots.py new file mode 100644 index 00000000000..3bb53d080e8 --- /dev/null +++ b/python/extractor/tests/tokenizer/dots.py @@ -0,0 +1,4 @@ +. +.. +... +.... diff --git a/python/extractor/tests/tokenizer/dots.tokens b/python/extractor/tests/tokenizer/dots.tokens new file mode 100644 index 00000000000..d8b11498818 --- /dev/null +++ b/python/extractor/tests/tokenizer/dots.tokens @@ -0,0 +1,15 @@ +1,0-1,1: DOT '.' +1,1-1,2: NEWLINE '\n' +2,0-2,1: DOT '.' +2,1-2,2: DOT '.' +2,2-2,3: NEWLINE '\n' +3,0-3,1: DOT '.' +3,1-3,2: DOT '.' +3,2-3,3: DOT '.' +3,3-3,4: NEWLINE '\n' +4,0-4,1: DOT '.' +4,1-4,2: DOT '.' +4,2-4,3: DOT '.' +4,3-4,4: DOT '.' +4,4-4,5: NEWLINE '\n' +5,0-5,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/emoji.py b/python/extractor/tests/tokenizer/emoji.py new file mode 100644 index 00000000000..9c329e84e7d --- /dev/null +++ b/python/extractor/tests/tokenizer/emoji.py @@ -0,0 +1,2 @@ +"👦👦🏻👦🏼👦🏽👦🏾👦🏿👧👧🏻👧🏼👧🏽👧🏾👧🏿" +"😀😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏" diff --git a/python/extractor/tests/tokenizer/emoji.tokens b/python/extractor/tests/tokenizer/emoji.tokens new file mode 100644 index 00000000000..84f4a3deb9f --- /dev/null +++ b/python/extractor/tests/tokenizer/emoji.tokens @@ -0,0 +1,5 @@ +1,0-1,24: STRING '"👦👦🏻👦🏼👦🏽👦🏾👦🏿👧👧🏻👧🏼👧🏽👧🏾👧🏿"' +1,24-1,25: NEWLINE '\n' +2,0-2,18: STRING '"😀😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏"' +2,18-2,19: NEWLINE '\n' +3,0-3,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/feeds.py b/python/extractor/tests/tokenizer/feeds.py new file mode 100644 index 00000000000..007b983b8ab --- /dev/null +++ b/python/extractor/tests/tokenizer/feeds.py @@ -0,0 +1,4 @@ + + + +name diff --git a/python/extractor/tests/tokenizer/feeds.tokens b/python/extractor/tests/tokenizer/feeds.tokens new file mode 100644 index 00000000000..4fdc4512d72 --- /dev/null +++ b/python/extractor/tests/tokenizer/feeds.tokens @@ -0,0 +1,3 @@ +4,0-4,4: NAME 'name' +4,4-4,5: NEWLINE '\n' +5,0-5,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/gen_tokens.py b/python/extractor/tests/tokenizer/gen_tokens.py new file mode 100644 index 00000000000..52a04f79fe3 --- /dev/null +++ b/python/extractor/tests/tokenizer/gen_tokens.py @@ -0,0 +1,38 @@ +import sys +import tokenize +import token + +def printtoken(type, token, start, end, _): + # Use Python 3 tokenize style output, regardless of version + if tokenize.tok_name[type] not in ("ENCODING", "NL"): + token_range = "%d,%d-%d,%d:" % (start + end) + print("%-20s%-15s%r" % + (token_range, tokenize.tok_name[type], token) + ) + +OP_TYPES = { + "(" : token.LPAR, + ")" : token.RPAR, + "[" : token.LSQB, + "]" : token.RSQB, + "{" : token.LBRACE, + "}" : token.RBRACE, + ":" : token.COLON, + "," : token.COMMA, + "." : token.DOT, + "@" : token.AT, + } + +def main(): + readline = open(sys.argv[1], "rb").readline + if sys.version < "3": + tokenize.tokenize(readline, printtoken) + else: + for type, token, start, end, _ in tokenize.tokenize(readline): + if tokenize.tok_name[type] == "OP": + type = OP_TYPES.get(token, type) + if tokenize.tok_name[type] not in ("ENCODING", "NL"): + printtoken(type, token, start, end, _) + +if __name__ == "__main__": + main() diff --git a/python/extractor/tests/tokenizer/gen_tokens.tokens b/python/extractor/tests/tokenizer/gen_tokens.tokens new file mode 100644 index 00000000000..ab72f956525 --- /dev/null +++ b/python/extractor/tests/tokenizer/gen_tokens.tokens @@ -0,0 +1,275 @@ +1,0-1,6: NAME 'import' +1,7-1,10: NAME 'sys' +1,10-1,11: NEWLINE '\n' +2,0-2,6: NAME 'import' +2,7-2,15: NAME 'tokenize' +2,15-2,16: NEWLINE '\n' +3,0-3,6: NAME 'import' +3,7-3,12: NAME 'token' +3,12-3,13: NEWLINE '\n' +5,0-5,3: NAME 'def' +5,4-5,14: NAME 'printtoken' +5,14-5,15: LPAR '(' +5,15-5,19: NAME 'type' +5,19-5,20: COMMA ',' +5,21-5,26: NAME 'token' +5,26-5,27: COMMA ',' +5,28-5,33: NAME 'start' +5,33-5,34: COMMA ',' +5,35-5,38: NAME 'end' +5,38-5,39: COMMA ',' +5,40-5,41: NAME '_' +5,41-5,42: RPAR ')' +5,42-5,43: COLON ':' +5,44-5,45: NEWLINE '\n' +6,4-6,63: COMMENT '# Use Python 3 tokenize style output, regardless of version' +7,0-7,4: INDENT ' ' +7,4-7,6: NAME 'if' +7,7-7,15: NAME 'tokenize' +7,15-7,16: DOT '.' +7,16-7,24: NAME 'tok_name' +7,24-7,25: LSQB '[' +7,25-7,29: NAME 'type' +7,29-7,30: RSQB ']' +7,31-7,34: NAME 'not' +7,35-7,37: NAME 'in' +7,38-7,39: LPAR '(' +7,39-7,49: STRING '"ENCODING"' +7,49-7,50: COMMA ',' +7,51-7,55: STRING '"NL"' +7,55-7,56: RPAR ')' +7,56-7,57: COLON ':' +7,57-7,58: NEWLINE '\n' +8,0-8,8: INDENT ' ' +8,8-8,19: NAME 'token_range' +8,20-8,21: OP '=' +8,22-8,36: STRING '"%d,%d-%d,%d:"' +8,37-8,38: OP '%' +8,39-8,40: LPAR '(' +8,40-8,45: NAME 'start' +8,46-8,47: OP '+' +8,48-8,51: NAME 'end' +8,51-8,52: RPAR ')' +8,52-8,53: NEWLINE '\n' +9,8-9,13: NAME 'print' +9,13-9,14: LPAR '(' +9,14-9,28: STRING '"%-20s%-15s%r"' +9,29-9,30: OP '%' +10,12-10,13: LPAR '(' +10,13-10,24: NAME 'token_range' +10,24-10,25: COMMA ',' +10,26-10,34: NAME 'tokenize' +10,34-10,35: DOT '.' +10,35-10,43: NAME 'tok_name' +10,43-10,44: LSQB '[' +10,44-10,48: NAME 'type' +10,48-10,49: RSQB ']' +10,49-10,50: COMMA ',' +10,51-10,56: NAME 'token' +10,56-10,57: RPAR ')' +11,8-11,9: RPAR ')' +11,9-11,10: NEWLINE '\n' +13,0-13,0: DEDENT '' +13,0-13,0: DEDENT '' +13,0-13,8: NAME 'OP_TYPES' +13,9-13,10: OP '=' +13,11-13,12: LBRACE '{' +14,4-14,7: STRING '"("' +14,8-14,9: COLON ':' +14,10-14,15: NAME 'token' +14,15-14,16: DOT '.' +14,16-14,20: NAME 'LPAR' +14,20-14,21: COMMA ',' +15,4-15,7: STRING '")"' +15,8-15,9: COLON ':' +15,10-15,15: NAME 'token' +15,15-15,16: DOT '.' +15,16-15,20: NAME 'RPAR' +15,20-15,21: COMMA ',' +16,4-16,7: STRING '"["' +16,8-16,9: COLON ':' +16,10-16,15: NAME 'token' +16,15-16,16: DOT '.' +16,16-16,20: NAME 'LSQB' +16,20-16,21: COMMA ',' +17,4-17,7: STRING '"]"' +17,8-17,9: COLON ':' +17,10-17,15: NAME 'token' +17,15-17,16: DOT '.' +17,16-17,20: NAME 'RSQB' +17,20-17,21: COMMA ',' +18,4-18,7: STRING '"{"' +18,8-18,9: COLON ':' +18,10-18,15: NAME 'token' +18,15-18,16: DOT '.' +18,16-18,22: NAME 'LBRACE' +18,22-18,23: COMMA ',' +19,4-19,7: STRING '"}"' +19,8-19,9: COLON ':' +19,10-19,15: NAME 'token' +19,15-19,16: DOT '.' +19,16-19,22: NAME 'RBRACE' +19,22-19,23: COMMA ',' +20,4-20,7: STRING '":"' +20,8-20,9: COLON ':' +20,10-20,15: NAME 'token' +20,15-20,16: DOT '.' +20,16-20,21: NAME 'COLON' +20,21-20,22: COMMA ',' +21,4-21,7: STRING '","' +21,8-21,9: COLON ':' +21,10-21,15: NAME 'token' +21,15-21,16: DOT '.' +21,16-21,21: NAME 'COMMA' +21,21-21,22: COMMA ',' +22,4-22,7: STRING '"."' +22,8-22,9: COLON ':' +22,10-22,15: NAME 'token' +22,15-22,16: DOT '.' +22,16-22,19: NAME 'DOT' +22,19-22,20: COMMA ',' +23,4-23,7: STRING '"@"' +23,8-23,9: COLON ':' +23,10-23,15: NAME 'token' +23,15-23,16: DOT '.' +23,16-23,18: NAME 'AT' +23,18-23,19: COMMA ',' +24,4-24,5: RBRACE '}' +24,5-24,6: NEWLINE '\n' +26,0-26,3: NAME 'def' +26,4-26,8: NAME 'main' +26,8-26,9: LPAR '(' +26,9-26,10: RPAR ')' +26,10-26,11: COLON ':' +26,11-26,12: NEWLINE '\n' +27,0-27,4: INDENT ' ' +27,4-27,12: NAME 'readline' +27,13-27,14: OP '=' +27,15-27,19: NAME 'open' +27,19-27,20: LPAR '(' +27,20-27,23: NAME 'sys' +27,23-27,24: DOT '.' +27,24-27,28: NAME 'argv' +27,28-27,29: LSQB '[' +27,29-27,30: NUMBER '1' +27,30-27,31: RSQB ']' +27,31-27,32: COMMA ',' +27,33-27,37: STRING '"rb"' +27,37-27,38: RPAR ')' +27,38-27,39: DOT '.' +27,39-27,47: NAME 'readline' +27,47-27,48: NEWLINE '\n' +28,4-28,6: NAME 'if' +28,7-28,10: NAME 'sys' +28,10-28,11: DOT '.' +28,11-28,18: NAME 'version' +28,19-28,20: OP '<' +28,21-28,24: STRING '"3"' +28,24-28,25: COLON ':' +28,25-28,26: NEWLINE '\n' +29,0-29,8: INDENT ' ' +29,8-29,16: NAME 'tokenize' +29,16-29,17: DOT '.' +29,17-29,25: NAME 'tokenize' +29,25-29,26: LPAR '(' +29,26-29,34: NAME 'readline' +29,34-29,35: COMMA ',' +29,36-29,46: NAME 'printtoken' +29,46-29,47: RPAR ')' +29,47-29,48: NEWLINE '\n' +30,4-30,4: DEDENT '' +30,4-30,8: NAME 'else' +30,8-30,9: COLON ':' +30,9-30,10: NEWLINE '\n' +31,0-31,8: INDENT ' ' +31,8-31,11: NAME 'for' +31,12-31,16: NAME 'type' +31,16-31,17: COMMA ',' +31,18-31,23: NAME 'token' +31,23-31,24: COMMA ',' +31,25-31,30: NAME 'start' +31,30-31,31: COMMA ',' +31,32-31,35: NAME 'end' +31,35-31,36: COMMA ',' +31,37-31,38: NAME '_' +31,39-31,41: NAME 'in' +31,42-31,50: NAME 'tokenize' +31,50-31,51: DOT '.' +31,51-31,59: NAME 'tokenize' +31,59-31,60: LPAR '(' +31,60-31,68: NAME 'readline' +31,68-31,69: RPAR ')' +31,69-31,70: COLON ':' +31,70-31,71: NEWLINE '\n' +32,0-32,12: INDENT ' ' +32,12-32,14: NAME 'if' +32,15-32,23: NAME 'tokenize' +32,23-32,24: DOT '.' +32,24-32,32: NAME 'tok_name' +32,32-32,33: LSQB '[' +32,33-32,37: NAME 'type' +32,37-32,38: RSQB ']' +32,39-32,41: OP '==' +32,42-32,46: STRING '"OP"' +32,46-32,47: COLON ':' +32,47-32,48: NEWLINE '\n' +33,0-33,16: INDENT ' ' +33,16-33,20: NAME 'type' +33,21-33,22: OP '=' +33,23-33,31: NAME 'OP_TYPES' +33,31-33,32: DOT '.' +33,32-33,35: NAME 'get' +33,35-33,36: LPAR '(' +33,36-33,41: NAME 'token' +33,41-33,42: COMMA ',' +33,43-33,47: NAME 'type' +33,47-33,48: RPAR ')' +33,48-33,49: NEWLINE '\n' +34,12-34,12: DEDENT '' +34,12-34,14: NAME 'if' +34,15-34,23: NAME 'tokenize' +34,23-34,24: DOT '.' +34,24-34,32: NAME 'tok_name' +34,32-34,33: LSQB '[' +34,33-34,37: NAME 'type' +34,37-34,38: RSQB ']' +34,39-34,42: NAME 'not' +34,43-34,45: NAME 'in' +34,46-34,47: LPAR '(' +34,47-34,57: STRING '"ENCODING"' +34,57-34,58: COMMA ',' +34,59-34,63: STRING '"NL"' +34,63-34,64: RPAR ')' +34,64-34,65: COLON ':' +34,65-34,66: NEWLINE '\n' +35,0-35,16: INDENT ' ' +35,16-35,26: NAME 'printtoken' +35,26-35,27: LPAR '(' +35,27-35,31: NAME 'type' +35,31-35,32: COMMA ',' +35,33-35,38: NAME 'token' +35,38-35,39: COMMA ',' +35,40-35,45: NAME 'start' +35,45-35,46: COMMA ',' +35,47-35,50: NAME 'end' +35,50-35,51: COMMA ',' +35,52-35,53: NAME '_' +35,53-35,54: RPAR ')' +35,54-35,55: NEWLINE '\n' +37,0-37,0: DEDENT '' +37,0-37,0: DEDENT '' +37,0-37,0: DEDENT '' +37,0-37,0: DEDENT '' +37,0-37,2: NAME 'if' +37,3-37,11: NAME '__name__' +37,12-37,14: OP '==' +37,15-37,25: STRING '"__main__"' +37,25-37,26: COLON ':' +37,26-37,27: NEWLINE '\n' +38,0-38,4: INDENT ' ' +38,4-38,8: NAME 'main' +38,8-38,9: LPAR '(' +38,9-38,10: RPAR ')' +38,10-38,11: NEWLINE '\n' +39,0-39,0: DEDENT '' +39,0-39,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/illegal_indentation.py b/python/extractor/tests/tokenizer/illegal_indentation.py new file mode 100644 index 00000000000..ed793d1c0da --- /dev/null +++ b/python/extractor/tests/tokenizer/illegal_indentation.py @@ -0,0 +1,4 @@ +def foo(seq): + for var in seq: + body + illegal-dedent diff --git a/python/extractor/tests/tokenizer/illegal_indentation.tokens b/python/extractor/tests/tokenizer/illegal_indentation.tokens new file mode 100644 index 00000000000..bcc8d8f355e --- /dev/null +++ b/python/extractor/tests/tokenizer/illegal_indentation.tokens @@ -0,0 +1,24 @@ +1,0-1,3: NAME 'def' +1,4-1,7: NAME 'foo' +1,7-1,8: LPAR '(' +1,8-1,11: NAME 'seq' +1,11-1,12: RPAR ')' +1,12-1,13: COLON ':' +1,13-1,14: NEWLINE '\n' +2,0-2,4: INDENT ' ' +2,4-2,7: NAME 'for' +2,8-2,11: NAME 'var' +2,12-2,14: NAME 'in' +2,15-2,18: NAME 'seq' +2,18-2,19: COLON ':' +2,19-2,20: NEWLINE '\n' +3,0-3,8: INDENT ' ' +3,8-3,12: NAME 'body' +3,12-3,13: NEWLINE '\n' +4,6-4,6: ILLEGALINDENT '' +4,6-4,13: NAME 'illegal' +4,13-4,14: OP '-' +4,14-4,20: NAME 'dedent' +4,20-4,21: NEWLINE '\n' +5,0-5,0: DEDENT '' +5,0-5,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/illegal_indentation2.py b/python/extractor/tests/tokenizer/illegal_indentation2.py new file mode 100644 index 00000000000..3aa2c634df4 --- /dev/null +++ b/python/extractor/tests/tokenizer/illegal_indentation2.py @@ -0,0 +1,7 @@ +class C: + def foo(seq): + for var in seq: + body + illegal + dedent + sequence diff --git a/python/extractor/tests/tokenizer/illegal_indentation2.tokens b/python/extractor/tests/tokenizer/illegal_indentation2.tokens new file mode 100644 index 00000000000..69bf427ce70 --- /dev/null +++ b/python/extractor/tests/tokenizer/illegal_indentation2.tokens @@ -0,0 +1,34 @@ +1,0-1,5: NAME 'class' +1,6-1,7: NAME 'C' +1,7-1,8: COLON ':' +1,8-1,9: NEWLINE '\n' +2,0-2,4: INDENT ' ' +2,4-2,7: NAME 'def' +2,8-2,11: NAME 'foo' +2,11-2,12: LPAR '(' +2,12-2,15: NAME 'seq' +2,15-2,16: RPAR ')' +2,16-2,17: COLON ':' +2,17-2,18: NEWLINE '\n' +3,0-3,8: INDENT ' ' +3,8-3,11: NAME 'for' +3,12-3,15: NAME 'var' +3,16-3,18: NAME 'in' +3,19-3,22: NAME 'seq' +3,22-3,23: COLON ':' +3,23-3,24: NEWLINE '\n' +4,0-4,12: INDENT ' ' +4,12-4,16: NAME 'body' +4,16-4,17: NEWLINE '\n' +5,6-5,6: DEDENT '' +5,6-5,6: ILLEGALINDENT '' +5,6-5,13: NAME 'illegal' +5,13-5,14: NEWLINE '\n' +6,0-6,5: INDENT ' ' +6,5-6,11: NAME 'dedent' +6,11-6,12: NEWLINE '\n' +7,4-7,4: DEDENT '' +7,4-7,12: NAME 'sequence' +7,12-7,13: NEWLINE '\n' +8,0-8,0: DEDENT '' +8,0-8,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/import.py b/python/extractor/tests/tokenizer/import.py new file mode 100644 index 00000000000..58ce32f636d --- /dev/null +++ b/python/extractor/tests/tokenizer/import.py @@ -0,0 +1,2 @@ +import a +import why diff --git a/python/extractor/tests/tokenizer/import.tokens b/python/extractor/tests/tokenizer/import.tokens new file mode 100644 index 00000000000..b88471b23f2 --- /dev/null +++ b/python/extractor/tests/tokenizer/import.tokens @@ -0,0 +1,7 @@ +1,0-1,6: NAME 'import' +1,7-1,8: NAME 'a' +1,8-1,9: NEWLINE '\n' +2,0-2,6: NAME 'import' +2,7-2,10: NAME 'why' +2,10-2,11: NEWLINE '\n' +3,0-3,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/kannada.py b/python/extractor/tests/tokenizer/kannada.py new file mode 100644 index 00000000000..674af2d6e31 --- /dev/null +++ b/python/extractor/tests/tokenizer/kannada.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- + +def ಏನಾದರೂ_ಮಾಡು(): + print('ಏನೋ ಮಾಡಿದೆ') + + +ಏನಾದರೂ_ಮಾಡು() diff --git a/python/extractor/tests/tokenizer/kannada.tokens b/python/extractor/tests/tokenizer/kannada.tokens new file mode 100644 index 00000000000..b96a64ad3d1 --- /dev/null +++ b/python/extractor/tests/tokenizer/kannada.tokens @@ -0,0 +1,19 @@ +1,0-1,23: COMMENT '# -*- coding: utf-8 -*-' +3,0-3,3: NAME 'def' +3,4-3,15: NAME 'ಏನಾದರೂ_ಮಾಡು' +3,15-3,16: LPAR '(' +3,16-3,17: RPAR ')' +3,17-3,18: COLON ':' +3,18-3,19: NEWLINE '\n' +4,0-4,4: INDENT ' ' +4,4-4,9: NAME 'print' +4,9-4,10: LPAR '(' +4,10-4,22: STRING '\'ಏನೋ ಮಾಡಿದೆ\'' +4,22-4,23: RPAR ')' +4,23-4,24: NEWLINE '\n' +7,0-7,0: DEDENT '' +7,0-7,11: NAME 'ಏನಾದರೂ_ಮಾಡು' +7,11-7,12: LPAR '(' +7,12-7,13: RPAR ')' +7,13-7,14: NEWLINE '\n' +8,0-8,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/latin.py b/python/extractor/tests/tokenizer/latin.py new file mode 100644 index 00000000000..538a7b90e93 --- /dev/null +++ b/python/extractor/tests/tokenizer/latin.py @@ -0,0 +1,4 @@ +"Any old stuff can go here" +# -*- coding: latin1 -*- +# Gnter + diff --git a/python/extractor/tests/tokenizer/latin.tokens b/python/extractor/tests/tokenizer/latin.tokens new file mode 100644 index 00000000000..c7158916808 --- /dev/null +++ b/python/extractor/tests/tokenizer/latin.tokens @@ -0,0 +1,5 @@ +1,0-1,27: STRING '"Any old stuff can go here"' +1,27-1,28: NEWLINE '\n' +2,0-2,24: COMMENT '# -*- coding: latin1 -*-' +3,0-3,8: COMMENT '# Günter' +5,0-5,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/numbers.py b/python/extractor/tests/tokenizer/numbers.py new file mode 100644 index 00000000000..d57fa12ef05 --- /dev/null +++ b/python/extractor/tests/tokenizer/numbers.py @@ -0,0 +1,83 @@ + +#Some negative numbers + +-1 +-10000000000000000 +-1.0 +-3.0e17 + +-(1) +-(10000000000000000) +-(1.0) +-(3.0e17) + +(-1) +(-10000000000000000) +(-1.0) +(-3.0e17) + +-1j + +-3.7e12j + +#Some other numbers +0.058823529630899429 + +1e-06 +.9999999 +0xffffff +1e10 +1. +2.79252680 +0x0001000 +4987312561856745907287624786230562734672583763984576267 + +#Octal both styles +0777 +0o777 + +#Python2 longs +0 +0L +5L +-2L +498731256185674590728762478623056L + +0xfffffffL +0xeeeeeeeeeeeeeeeeL + +0b00010101011111111111L +0o77777777777L +0777777777777L +0j +0_0234j + +0e0 + +#Valid uses of underscore: + +1_1 +1_2_3.4_5_6e7_8_9 +0b1_1 +0o1_1 +0x1_1 + +0b_010 +0o_010 +0x_010 + +#Invalid uses of underscore: + +1__3 +2e_5 +2e+_5 +123_ + +#Valid prefixed zero: + +0_0 +009. +009e005 +00123 + +1 if 1else 0 diff --git a/python/extractor/tests/tokenizer/numbers.tokens b/python/extractor/tests/tokenizer/numbers.tokens new file mode 100644 index 00000000000..81d210f6baa --- /dev/null +++ b/python/extractor/tests/tokenizer/numbers.tokens @@ -0,0 +1,156 @@ +2,0-2,22: COMMENT '#Some negative numbers' +4,0-4,1: OP '-' +4,1-4,2: NUMBER '1' +4,2-4,3: NEWLINE '\n' +5,0-5,1: OP '-' +5,1-5,18: NUMBER '10000000000000000' +5,18-5,19: NEWLINE '\n' +6,0-6,1: OP '-' +6,1-6,4: NUMBER '1.0' +6,4-6,5: NEWLINE '\n' +7,0-7,1: OP '-' +7,1-7,7: NUMBER '3.0e17' +7,7-7,8: NEWLINE '\n' +9,0-9,1: OP '-' +9,1-9,2: LPAR '(' +9,2-9,3: NUMBER '1' +9,3-9,4: RPAR ')' +9,4-9,5: NEWLINE '\n' +10,0-10,1: OP '-' +10,1-10,2: LPAR '(' +10,2-10,19: NUMBER '10000000000000000' +10,19-10,20: RPAR ')' +10,20-10,21: NEWLINE '\n' +11,0-11,1: OP '-' +11,1-11,2: LPAR '(' +11,2-11,5: NUMBER '1.0' +11,5-11,6: RPAR ')' +11,6-11,7: NEWLINE '\n' +12,0-12,1: OP '-' +12,1-12,2: LPAR '(' +12,2-12,8: NUMBER '3.0e17' +12,8-12,9: RPAR ')' +12,9-12,10: NEWLINE '\n' +14,0-14,1: LPAR '(' +14,1-14,2: OP '-' +14,2-14,3: NUMBER '1' +14,3-14,4: RPAR ')' +14,4-14,5: NEWLINE '\n' +15,0-15,1: LPAR '(' +15,1-15,2: OP '-' +15,2-15,19: NUMBER '10000000000000000' +15,19-15,20: RPAR ')' +15,20-15,21: NEWLINE '\n' +16,0-16,1: LPAR '(' +16,1-16,2: OP '-' +16,2-16,5: NUMBER '1.0' +16,5-16,6: RPAR ')' +16,6-16,7: NEWLINE '\n' +17,0-17,1: LPAR '(' +17,1-17,2: OP '-' +17,2-17,8: NUMBER '3.0e17' +17,8-17,9: RPAR ')' +17,9-17,10: NEWLINE '\n' +19,0-19,1: OP '-' +19,1-19,3: NUMBER '1j' +19,3-19,4: NEWLINE '\n' +21,0-21,1: OP '-' +21,1-21,8: NUMBER '3.7e12j' +21,8-21,9: NEWLINE '\n' +23,0-23,19: COMMENT '#Some other numbers' +24,0-24,20: NUMBER '0.058823529630899429' +24,20-24,21: NEWLINE '\n' +26,0-26,5: NUMBER '1e-06' +26,5-26,6: NEWLINE '\n' +27,0-27,8: NUMBER '.9999999' +27,8-27,9: NEWLINE '\n' +28,0-28,8: NUMBER '0xffffff' +28,8-28,9: NEWLINE '\n' +29,0-29,4: NUMBER '1e10' +29,4-29,5: NEWLINE '\n' +30,0-30,2: NUMBER '1.' +30,2-30,3: NEWLINE '\n' +31,0-31,10: NUMBER '2.79252680' +31,10-31,11: NEWLINE '\n' +32,0-32,9: NUMBER '0x0001000' +32,9-32,10: NEWLINE '\n' +33,0-33,55: NUMBER '4987312561856745907287624786230562734672583763984576267' +33,55-33,56: NEWLINE '\n' +35,0-35,18: COMMENT '#Octal both styles' +36,0-36,4: NUMBER '0777' +36,4-36,5: NEWLINE '\n' +37,0-37,5: NUMBER '0o777' +37,5-37,6: NEWLINE '\n' +39,0-39,14: COMMENT '#Python2 longs' +40,0-40,1: NUMBER '0' +40,1-40,2: NEWLINE '\n' +41,0-41,2: NUMBER '0L' +41,2-41,3: NEWLINE '\n' +42,0-42,2: NUMBER '5L' +42,2-42,3: NEWLINE '\n' +43,0-43,1: OP '-' +43,1-43,3: NUMBER '2L' +43,3-43,4: NEWLINE '\n' +44,0-44,34: NUMBER '498731256185674590728762478623056L' +44,34-44,35: NEWLINE '\n' +46,0-46,10: NUMBER '0xfffffffL' +46,10-46,11: NEWLINE '\n' +47,0-47,19: NUMBER '0xeeeeeeeeeeeeeeeeL' +47,19-47,20: NEWLINE '\n' +49,0-49,23: NUMBER '0b00010101011111111111L' +49,23-49,24: NEWLINE '\n' +50,0-50,14: NUMBER '0o77777777777L' +50,14-50,15: NEWLINE '\n' +51,0-51,14: NUMBER '0777777777777L' +51,14-51,15: NEWLINE '\n' +52,0-52,2: NUMBER '0j' +52,2-52,3: NEWLINE '\n' +53,0-53,7: NUMBER '0_0234j' +53,7-53,8: NEWLINE '\n' +55,0-55,3: NUMBER '0e0' +55,3-55,4: NEWLINE '\n' +57,0-57,26: COMMENT '#Valid uses of underscore:' +59,0-59,3: NUMBER '1_1' +59,3-59,4: NEWLINE '\n' +60,0-60,17: NUMBER '1_2_3.4_5_6e7_8_9' +60,17-60,18: NEWLINE '\n' +61,0-61,5: NUMBER '0b1_1' +61,5-61,6: NEWLINE '\n' +62,0-62,5: NUMBER '0o1_1' +62,5-62,6: NEWLINE '\n' +63,0-63,5: NUMBER '0x1_1' +63,5-63,6: NEWLINE '\n' +65,0-65,6: NUMBER '0b_010' +65,6-65,7: NEWLINE '\n' +66,0-66,6: NUMBER '0o_010' +66,6-66,7: NEWLINE '\n' +67,0-67,6: NUMBER '0x_010' +67,6-67,7: NEWLINE '\n' +69,0-69,28: COMMENT '#Invalid uses of underscore:' +71,0-71,3: ERRORTOKEN '1__' +71,3-71,4: NUMBER '3' +71,4-71,5: NEWLINE '\n' +72,0-72,3: ERRORTOKEN '2e_' +72,3-72,4: NUMBER '5' +72,4-72,5: NEWLINE '\n' +73,0-73,4: ERRORTOKEN '2e+_' +73,4-73,5: NUMBER '5' +73,5-73,6: NEWLINE '\n' +74,0-74,5: ERRORTOKEN '123_\n' +74,5-74,6: NEWLINE '\n' +75,0-75,21: COMMENT '#Valid prefixed zero:' +77,0-77,3: NUMBER '0_0' +77,3-77,4: NEWLINE '\n' +78,0-78,4: NUMBER '009.' +78,4-78,5: NEWLINE '\n' +79,0-79,7: NUMBER '009e005' +79,7-79,8: NEWLINE '\n' +80,0-80,5: NUMBER '00123' +80,5-80,6: NEWLINE '\n' +82,0-82,1: NUMBER '1' +82,2-82,4: NAME 'if' +82,5-82,6: NUMBER '1' +82,6-82,10: NAME 'else' +82,11-82,12: NUMBER '0' +82,12-82,13: NEWLINE '\n' +83,0-83,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/pep484.py b/python/extractor/tests/tokenizer/pep484.py new file mode 100644 index 00000000000..d44a11b63c9 --- /dev/null +++ b/python/extractor/tests/tokenizer/pep484.py @@ -0,0 +1,19 @@ +#PEP 484 style annotations. + +def func(callee_type: CallableType, + formal_to_actual: List[List[int]], + strict: bool = True) -> List[Type]: + pass + + +def func(self, + name: str, + args: List[str], + *, + cwd: str = None, + env: Dict[str, str] = None) -> None: + pass + +def specials(self, *varargs: vanno, **kwargs: kwanno): + pass + diff --git a/python/extractor/tests/tokenizer/pep484.tokens b/python/extractor/tests/tokenizer/pep484.tokens new file mode 100644 index 00000000000..4faaad6ca74 --- /dev/null +++ b/python/extractor/tests/tokenizer/pep484.tokens @@ -0,0 +1,100 @@ +1,0-1,27: COMMENT '#PEP 484 style annotations.' +3,0-3,3: NAME 'def' +3,4-3,8: NAME 'func' +3,8-3,9: LPAR '(' +3,9-3,20: NAME 'callee_type' +3,20-3,21: COLON ':' +3,22-3,34: NAME 'CallableType' +3,34-3,35: COMMA ',' +4,9-4,25: NAME 'formal_to_actual' +4,25-4,26: COLON ':' +4,27-4,31: NAME 'List' +4,31-4,32: LSQB '[' +4,32-4,36: NAME 'List' +4,36-4,37: LSQB '[' +4,37-4,40: NAME 'int' +4,40-4,41: RSQB ']' +4,41-4,42: RSQB ']' +4,42-4,43: COMMA ',' +5,9-5,15: NAME 'strict' +5,15-5,16: COLON ':' +5,17-5,21: NAME 'bool' +5,22-5,23: OP '=' +5,24-5,28: NAME 'True' +5,28-5,29: RPAR ')' +5,30-5,32: RARROW '->' +5,33-5,37: NAME 'List' +5,37-5,38: LSQB '[' +5,38-5,42: NAME 'Type' +5,42-5,43: RSQB ']' +5,43-5,44: COLON ':' +5,44-5,45: NEWLINE '\n' +6,0-6,4: INDENT ' ' +6,4-6,8: NAME 'pass' +6,8-6,9: NEWLINE '\n' +9,0-9,0: DEDENT '' +9,0-9,3: NAME 'def' +9,4-9,8: NAME 'func' +9,8-9,9: LPAR '(' +9,9-9,13: NAME 'self' +9,13-9,14: COMMA ',' +10,9-10,13: NAME 'name' +10,13-10,14: COLON ':' +10,15-10,18: NAME 'str' +10,18-10,19: COMMA ',' +11,9-11,13: NAME 'args' +11,13-11,14: COLON ':' +11,15-11,19: NAME 'List' +11,19-11,20: LSQB '[' +11,20-11,23: NAME 'str' +11,23-11,24: RSQB ']' +11,24-11,25: COMMA ',' +12,9-12,10: OP '*' +12,10-12,11: COMMA ',' +13,9-13,12: NAME 'cwd' +13,12-13,13: COLON ':' +13,14-13,17: NAME 'str' +13,18-13,19: OP '=' +13,20-13,24: NAME 'None' +13,24-13,25: COMMA ',' +14,9-14,12: NAME 'env' +14,12-14,13: COLON ':' +14,14-14,18: NAME 'Dict' +14,18-14,19: LSQB '[' +14,19-14,22: NAME 'str' +14,22-14,23: COMMA ',' +14,24-14,27: NAME 'str' +14,27-14,28: RSQB ']' +14,29-14,30: OP '=' +14,31-14,35: NAME 'None' +14,35-14,36: RPAR ')' +14,37-14,39: RARROW '->' +14,40-14,44: NAME 'None' +14,44-14,45: COLON ':' +14,45-14,46: NEWLINE '\n' +15,0-15,4: INDENT ' ' +15,4-15,8: NAME 'pass' +15,8-15,9: NEWLINE '\n' +17,0-17,0: DEDENT '' +17,0-17,3: NAME 'def' +17,4-17,12: NAME 'specials' +17,12-17,13: LPAR '(' +17,13-17,17: NAME 'self' +17,17-17,18: COMMA ',' +17,19-17,20: OP '*' +17,20-17,27: NAME 'varargs' +17,27-17,28: COLON ':' +17,29-17,34: NAME 'vanno' +17,34-17,35: COMMA ',' +17,36-17,38: OP '**' +17,38-17,44: NAME 'kwargs' +17,44-17,45: COLON ':' +17,46-17,52: NAME 'kwanno' +17,52-17,53: RPAR ')' +17,53-17,54: COLON ':' +17,54-17,55: NEWLINE '\n' +18,0-18,4: INDENT ' ' +18,4-18,8: NAME 'pass' +18,8-18,9: NEWLINE '\n' +20,0-20,0: DEDENT '' +20,0-20,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/shift_jis.py b/python/extractor/tests/tokenizer/shift_jis.py new file mode 100644 index 00000000000..89b7b91fd8c --- /dev/null +++ b/python/extractor/tests/tokenizer/shift_jis.py @@ -0,0 +1,11 @@ +# encoding:shift-jis + +#This is copied from the Python test library copyright PSF. + +""" +Python ̊J́A1990 N납JnĂ܂B +J҂ Guido van Rossum ͋p̃vO~OuABCv̊JɎQĂ܂AABC ͎p̖ړIɂ͂܂KĂ܂łB +̂悤Ȕwi琶܂ꂽ Python ̌݌v́AuVvvŁuKeՁvƂڕWɏd_uĂ܂B +̃XNvgnł̓[U̖ڐ̗֐D悵ĐFXȋ@\vfƂĎꍇ̂łAPython ł͂׍Hlj邱Ƃ͂܂肠܂B +ꎩ̂̋@\͍ŏɉAKvȋ@\͊gW[ƂĒljAƂ̂ Python ̃|V[łB +""" diff --git a/python/extractor/tests/tokenizer/shift_jis.tokens b/python/extractor/tests/tokenizer/shift_jis.tokens new file mode 100644 index 00000000000..cdfdc6ba1b2 --- /dev/null +++ b/python/extractor/tests/tokenizer/shift_jis.tokens @@ -0,0 +1,5 @@ +1,0-1,20: COMMENT '# encoding:shift-jis' +3,0-3,59: COMMENT '#This is copied from the Python test library copyright PSF.' +5,0-11,3: STRING '"""\nPython の開発は、1990 年ごろから開始されています。\n開発者の Guido van Rossum は教育用のプログラミング言語「ABC」の開発に参加していましたが、ABC は実用上の目的にはあまり適していませんでした。\nこのような背景から生まれた Python の言語設計は、「シンプル」で「習得が容易」という目標に重点が置かれています。\n多くのスクリプト系言語ではユーザの目先の利便性を優先して色々な機能を言語要素として取り入れる場合が多いのですが、Python ではそういった小細工が追加されることはあまりありません。\n言語自体の機能は最小限に押さえ、必要な機能は拡張モジュールとして追加する、というのが Python のポリシーです。\n"""' +11,3-11,4: NEWLINE '\n' +12,0-12,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/strings.py b/python/extractor/tests/tokenizer/strings.py new file mode 100644 index 00000000000..3d4a8ab2014 --- /dev/null +++ b/python/extractor/tests/tokenizer/strings.py @@ -0,0 +1,112 @@ + + +#Raw + +r'012345678' +r'(\033|~{)' +r'\A[+-]?\d+' +r'(?P<name>[\w]+)|' +r'\|\[\][123]|\{\}' +r'^.$' +r'[^A-Z]' + +# With escapes + +'\n' +"\'" +'\'' +"\"" +"\t\l\b" + + +#F-strings + +f'' +rf'hello' +fr'hello' +f'a{1+1}b' +f'{x}{y}a{z}' +#This is not legal in CPython, but we tokenize it anyway. +f'a{'x'+"y"}b' + +#Multiline f-string +f''' + In f-string expressions act as if parenthesised +{ + x + + y & + z +} +end +''' + +#Multi-line + + +r""" Single quotation character with multi-line + +"a", 'b', "", '' +.... +""" + +r''' Single quotation character with multi-line + +"a", 'b', "", '' +.... +''' + +#f-string conversions +!a +!s +!r + +f"{k}={v!r}" + +#Implicit concatenation +(f'{expr} text ' + 'continuation' + f'and{v}' +) + +#prefixes + +u'{}\r{}{:<{width}}' +u'{}\r{}{:<{}}' + +#f-strings with format specifier +f'result: {value:0.2f}' +f'result: {value:{width}.{precision}}' + + +f"Too {'many' if alen > elen else 'few'} parameters for {cls};" + +# f-strings have special escaping rules for curly-brackets +f'This should work \{foo}' +rf'This should work \{foo}' + +f'\}' # syntax error (we currently don't report this) +f'\}}' # ok + + +# f-strings with unicode literals of the form `\N{...}` +f'{degrees:0.0f}\N{DEGREE SIGN}' +f"{degrees:0.0f}\N{DEGREE SIGN}" +f'''{degrees:0.0f}\N{DEGREE SIGN}''' +f"""{degrees:0.0f}\N{DEGREE SIGN}""" + +# double curlies in f-strings with various kinds of quoting +f'{{ {foo} }}' +f"{{ {foo} }}" +f'''{{ {foo} }}''' +f"""{{ {foo} }}""" + +# Empty f-strings +f'' +f"" +f'''''' +f"""""" + + +r'\NUL' # _Not_ a named unicode escape (`\N{...}`) + +f'res: {val:{width:0}.{prec:1}}' diff --git a/python/extractor/tests/tokenizer/strings.tokens b/python/extractor/tests/tokenizer/strings.tokens new file mode 100644 index 00000000000..76e63bc790b --- /dev/null +++ b/python/extractor/tests/tokenizer/strings.tokens @@ -0,0 +1,211 @@ +3,0-3,4: COMMENT '#Raw' +5,0-5,12: STRING 'r\'012345678\'' +5,12-5,13: NEWLINE '\n' +6,0-6,12: STRING 'r\'(\\033|~{)\'' +6,12-6,13: NEWLINE '\n' +7,0-7,13: STRING 'r\'\\A[+-]?\\d+\'' +7,13-7,14: NEWLINE '\n' +8,0-8,19: STRING 'r\'(?P<name>[\\w]+)|\'' +8,19-8,20: NEWLINE '\n' +9,0-9,19: STRING 'r\'\\|\\[\\][123]|\\{\\}\'' +9,19-9,20: NEWLINE '\n' +10,0-10,6: STRING 'r\'^.$\'' +10,6-10,7: NEWLINE '\n' +11,0-11,9: STRING 'r\'[^A-Z]\'' +11,9-11,10: NEWLINE '\n' +13,0-13,14: COMMENT '# With escapes' +15,0-15,4: STRING '\'\\n\'' +15,4-15,5: NEWLINE '\n' +16,0-16,4: STRING '"\\\'"' +16,4-16,5: NEWLINE '\n' +17,0-17,4: STRING '\'\\\'\'' +17,4-17,5: NEWLINE '\n' +18,0-18,4: STRING '"\\""' +18,4-18,5: NEWLINE '\n' +19,0-19,8: STRING '"\\t\\l\\b"' +19,8-19,9: NEWLINE '\n' +22,0-22,10: COMMENT '#F-strings' +24,0-24,3: STRING 'f\'\'' +24,3-24,4: NEWLINE '\n' +25,0-25,9: STRING 'rf\'hello\'' +25,9-25,10: NEWLINE '\n' +26,0-26,9: STRING 'fr\'hello\'' +26,9-26,10: NEWLINE '\n' +27,0-27,4: FSTRING_START 'f\'a{' +27,4-27,5: NUMBER '1' +27,5-27,6: OP '+' +27,6-27,7: NUMBER '1' +27,7-27,10: FSTRING_END '}b\'' +27,10-27,11: NEWLINE '\n' +28,0-28,3: FSTRING_START 'f\'{' +28,3-28,4: NAME 'x' +28,4-28,6: FSTRING_MID '}{' +28,6-28,7: NAME 'y' +28,7-28,10: FSTRING_MID '}a{' +28,10-28,11: NAME 'z' +28,11-28,13: FSTRING_END '}\'' +28,13-28,14: NEWLINE '\n' +29,0-29,57: COMMENT '#This is not legal in CPython, but we tokenize it anyway.' +30,0-30,4: FSTRING_START 'f\'a{' +30,4-30,7: STRING '\'x\'' +30,7-30,8: OP '+' +30,8-30,11: STRING '"y"' +30,11-30,14: FSTRING_END '}b\'' +30,14-30,15: NEWLINE '\n' +32,0-32,19: COMMENT '#Multiline f-string' +33,0-35,1: FSTRING_START 'f\'\'\'\n In f-string expressions act as if parenthesised\n{' +36,4-36,5: NAME 'x' +36,6-36,7: OP '+' +37,4-37,5: NAME 'y' +37,6-37,7: OP '&' +38,6-38,7: NAME 'z' +39,0-41,3: FSTRING_END '}\nend\n\'\'\'' +41,3-41,4: NEWLINE '\n' +43,0-43,11: COMMENT '#Multi-line' +46,0-50,3: STRING 'r""" Single quotation character with multi-line\n\n"a", \'b\', "", \'\'\n....\n"""' +50,3-50,4: NEWLINE '\n' +52,0-56,3: STRING 'r\'\'\' Single quotation character with multi-line\n\n"a", \'b\', "", \'\'\n....\n\'\'\'' +56,3-56,4: NEWLINE '\n' +58,0-58,21: COMMENT '#f-string conversions' +59,0-59,2: CONVERSION '!a' +59,2-59,3: NEWLINE '\n' +60,0-60,2: CONVERSION '!s' +60,2-60,3: NEWLINE '\n' +61,0-61,2: CONVERSION '!r' +61,2-61,3: NEWLINE '\n' +63,0-63,3: FSTRING_START 'f"{' +63,3-63,4: NAME 'k' +63,4-63,7: FSTRING_MID '}={' +63,7-63,8: NAME 'v' +63,8-63,10: CONVERSION '!r' +63,10-63,12: FSTRING_END '}"' +63,12-63,13: NEWLINE '\n' +65,0-65,23: COMMENT '#Implicit concatenation' +66,0-66,1: LPAR '(' +66,1-66,4: FSTRING_START 'f\'{' +66,4-66,8: NAME 'expr' +66,8-66,16: FSTRING_END '} text \'' +67,4-67,18: STRING '\'continuation\'' +68,4-68,10: FSTRING_START 'f\'and{' +68,10-68,11: NAME 'v' +68,11-68,13: FSTRING_END '}\'' +69,0-69,1: RPAR ')' +69,1-69,2: NEWLINE '\n' +71,0-71,9: COMMENT '#prefixes' +73,0-73,20: STRING 'u\'{}\\r{}{:<{width}}\'' +73,20-73,21: NEWLINE '\n' +74,0-74,15: STRING 'u\'{}\\r{}{:<{}}\'' +74,15-74,16: NEWLINE '\n' +76,0-76,32: COMMENT '#f-strings with format specifier' +77,0-77,11: FSTRING_START 'f\'result: {' +77,11-77,16: NAME 'value' +77,16-77,17: COLON ':' +77,17-77,21: FSTRING_SPEC '0.2f' +77,21-77,23: FSTRING_END '}\'' +77,23-77,24: NEWLINE '\n' +78,0-78,11: FSTRING_START 'f\'result: {' +78,11-78,16: NAME 'value' +78,16-78,17: COLON ':' +78,17-78,18: FSTRING_SPEC '{' +78,18-78,23: NAME 'width' +78,23-78,26: FSTRING_SPEC '}.{' +78,26-78,35: NAME 'precision' +78,35-78,36: FSTRING_SPEC '}' +78,36-78,38: FSTRING_END '}\'' +78,38-78,39: NEWLINE '\n' +81,0-81,7: FSTRING_START 'f"Too {' +81,7-81,13: STRING '\'many\'' +81,14-81,16: NAME 'if' +81,17-81,21: NAME 'alen' +81,22-81,23: OP '>' +81,24-81,28: NAME 'elen' +81,29-81,33: NAME 'else' +81,34-81,39: STRING '\'few\'' +81,39-81,57: FSTRING_MID '} parameters for {' +81,57-81,60: NAME 'cls' +81,60-81,63: FSTRING_END '};"' +81,63-81,64: NEWLINE '\n' +83,0-83,58: COMMENT '# f-strings have special escaping rules for curly-brackets' +84,0-84,21: FSTRING_START 'f\'This should work \\{' +84,21-84,24: NAME 'foo' +84,24-84,26: FSTRING_END '}\'' +84,26-84,27: NEWLINE '\n' +85,0-85,22: FSTRING_START 'rf\'This should work \\{' +85,22-85,25: NAME 'foo' +85,25-85,27: FSTRING_END '}\'' +85,27-85,28: NEWLINE '\n' +87,0-87,5: STRING 'f\'\\}\'' +87,6-87,53: COMMENT '# syntax error (we currently don\'t report this)' +87,53-87,54: NEWLINE '\n' +88,0-88,6: STRING 'f\'\\}}\'' +88,7-88,11: COMMENT '# ok' +88,11-88,12: NEWLINE '\n' +91,0-91,55: COMMENT '# f-strings with unicode literals of the form `\\N{...}`' +92,0-92,3: FSTRING_START 'f\'{' +92,3-92,10: NAME 'degrees' +92,10-92,11: COLON ':' +92,11-92,15: FSTRING_SPEC '0.0f' +92,15-92,32: FSTRING_END '}\\N{DEGREE SIGN}\'' +92,32-92,33: NEWLINE '\n' +93,0-93,3: FSTRING_START 'f"{' +93,3-93,10: NAME 'degrees' +93,10-93,11: COLON ':' +93,11-93,15: FSTRING_SPEC '0.0f' +93,15-93,32: FSTRING_END '}\\N{DEGREE SIGN}"' +93,32-93,33: NEWLINE '\n' +94,0-94,5: FSTRING_START 'f\'\'\'{' +94,5-94,12: NAME 'degrees' +94,12-94,13: COLON ':' +94,13-94,17: FSTRING_SPEC '0.0f' +94,17-94,36: FSTRING_END '}\\N{DEGREE SIGN}\'\'\'' +94,36-94,37: NEWLINE '\n' +95,0-95,5: FSTRING_START 'f"""{' +95,5-95,12: NAME 'degrees' +95,12-95,13: COLON ':' +95,13-95,17: FSTRING_SPEC '0.0f' +95,17-95,36: FSTRING_END '}\\N{DEGREE SIGN}"""' +95,36-95,37: NEWLINE '\n' +97,0-97,59: COMMENT '# double curlies in f-strings with various kinds of quoting' +98,0-98,6: FSTRING_START 'f\'{{ {' +98,6-98,9: NAME 'foo' +98,9-98,14: FSTRING_END '} }}\'' +98,14-98,15: NEWLINE '\n' +99,0-99,6: FSTRING_START 'f"{{ {' +99,6-99,9: NAME 'foo' +99,9-99,14: FSTRING_END '} }}"' +99,14-99,15: NEWLINE '\n' +100,0-100,8: FSTRING_START 'f\'\'\'{{ {' +100,8-100,11: NAME 'foo' +100,11-100,18: FSTRING_END '} }}\'\'\'' +100,18-100,19: NEWLINE '\n' +101,0-101,8: FSTRING_START 'f"""{{ {' +101,8-101,11: NAME 'foo' +101,11-101,18: FSTRING_END '} }}"""' +101,18-101,19: NEWLINE '\n' +103,0-103,17: COMMENT '# Empty f-strings' +104,0-104,3: STRING 'f\'\'' +104,3-104,4: NEWLINE '\n' +105,0-105,3: STRING 'f""' +105,3-105,4: NEWLINE '\n' +106,0-106,7: STRING 'f\'\'\'\'\'\'' +106,7-106,8: NEWLINE '\n' +107,0-107,7: STRING 'f""""""' +107,7-107,8: NEWLINE '\n' +110,0-110,7: STRING 'r\'\\NUL\'' +110,8-110,50: COMMENT '# _Not_ a named unicode escape (`\\N{...}`)' +110,50-110,51: NEWLINE '\n' +112,0-112,8: FSTRING_START 'f\'res: {' +112,8-112,11: NAME 'val' +112,11-112,12: COLON ':' +112,12-112,13: FSTRING_SPEC '{' +112,13-112,18: NAME 'width' +112,18-112,19: COLON ':' +112,19-112,20: NUMBER '0' +112,20-112,23: FSTRING_SPEC '}.{' +112,23-112,27: NAME 'prec' +112,27-112,28: COLON ':' +112,28-112,29: NUMBER '1' +112,29-112,30: FSTRING_SPEC '}' +112,30-112,32: FSTRING_END '}\'' +112,32-112,33: NEWLINE '\n' +113,0-113,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/tab.py b/python/extractor/tests/tokenizer/tab.py new file mode 100644 index 00000000000..a36eda5b341 --- /dev/null +++ b/python/extractor/tests/tokenizer/tab.py @@ -0,0 +1,3 @@ + +class C(object): + pass diff --git a/python/extractor/tests/tokenizer/tab.tokens b/python/extractor/tests/tokenizer/tab.tokens new file mode 100644 index 00000000000..8ef7901a204 --- /dev/null +++ b/python/extractor/tests/tokenizer/tab.tokens @@ -0,0 +1,12 @@ +2,0-2,5: NAME 'class' +2,6-2,7: NAME 'C' +2,7-2,8: LPAR '(' +2,8-2,14: NAME 'object' +2,14-2,15: RPAR ')' +2,15-2,16: COLON ':' +2,16-2,17: NEWLINE '\n' +3,0-3,1: INDENT '\t' +3,1-3,5: NAME 'pass' +3,5-3,6: NEWLINE '\n' +4,0-4,0: DEDENT '' +4,0-4,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/temp.tokens b/python/extractor/tests/tokenizer/temp.tokens new file mode 100644 index 00000000000..63beaf05bc1 --- /dev/null +++ b/python/extractor/tests/tokenizer/temp.tokens @@ -0,0 +1,84 @@ +2,0-2,22: COMMENT '#Some negative numbers' +4,0-4,1: OP '-' +4,1-4,2: NUMBER '1' +4,2-4,3: NEWLINE '\n' +5,0-5,1: OP '-' +5,1-5,18: NUMBER '10000000000000000' +5,18-5,19: NEWLINE '\n' +6,0-6,1: OP '-' +6,1-6,4: NUMBER '1.0' +6,4-6,5: NEWLINE '\n' +7,0-7,1: OP '-' +7,1-7,7: NUMBER '3.0e17' +7,7-7,8: NEWLINE '\n' +9,0-9,1: OP '-' +9,1-9,2: LPAR '(' +9,2-9,3: NUMBER '1' +9,3-9,4: RPAR ')' +9,4-9,5: NEWLINE '\n' +10,0-10,1: OP '-' +10,1-10,2: LPAR '(' +10,2-10,19: NUMBER '10000000000000000' +10,19-10,20: RPAR ')' +10,20-10,21: NEWLINE '\n' +11,0-11,1: OP '-' +11,1-11,2: LPAR '(' +11,2-11,5: NUMBER '1.0' +11,5-11,6: RPAR ')' +11,6-11,7: NEWLINE '\n' +12,0-12,1: OP '-' +12,1-12,2: LPAR '(' +12,2-12,8: NUMBER '3.0e17' +12,8-12,9: RPAR ')' +12,9-12,10: NEWLINE '\n' +14,0-14,1: LPAR '(' +14,1-14,2: OP '-' +14,2-14,3: NUMBER '1' +14,3-14,4: RPAR ')' +14,4-14,5: NEWLINE '\n' +15,0-15,1: LPAR '(' +15,1-15,2: OP '-' +15,2-15,19: NUMBER '10000000000000000' +15,19-15,20: RPAR ')' +15,20-15,21: NEWLINE '\n' +16,0-16,1: LPAR '(' +16,1-16,2: OP '-' +16,2-16,5: NUMBER '1.0' +16,5-16,6: RPAR ')' +16,6-16,7: NEWLINE '\n' +17,0-17,1: LPAR '(' +17,1-17,2: OP '-' +17,2-17,8: NUMBER '3.0e17' +17,8-17,9: RPAR ')' +17,9-17,10: NEWLINE '\n' +19,0-19,1: OP '-' +19,1-19,3: NUMBER '1j' +19,3-19,4: NEWLINE '\n' +21,0-21,1: OP '-' +21,1-21,8: NUMBER '3.7e12j' +21,8-21,9: NEWLINE '\n' +23,0-23,19: COMMENT '#Some other numbers' +24,0-24,20: NUMBER '0.058823529630899429' +24,20-24,21: NEWLINE '\n' +26,0-26,5: NUMBER '1e-06' +26,5-26,6: NEWLINE '\n' +27,0-27,8: NUMBER '.9999999' +27,8-27,9: NEWLINE '\n' +28,0-28,8: NUMBER '0xffffff' +28,8-28,9: NEWLINE '\n' +29,0-29,4: NUMBER '1e10' +29,4-29,5: NEWLINE '\n' +30,0-30,2: NUMBER '1.' +30,2-30,3: NEWLINE '\n' +31,0-31,10: NUMBER '2.79252680' +31,10-31,11: NEWLINE '\n' +32,0-32,9: NUMBER '0x0001000' +32,9-32,10: NEWLINE '\n' +33,0-33,55: NUMBER '4987312561856745907287624786230562734672583763984576267' +33,55-33,56: NEWLINE '\n' +35,0-35,18: COMMENT '#Octal both styles' +36,0-36,4: NUMBER '0777' +36,4-36,5: NEWLINE '\n' +37,0-37,5: NUMBER '0o777' +37,5-37,6: NEWLINE '\n' +39,0-39,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/utf8.py b/python/extractor/tests/tokenizer/utf8.py new file mode 100644 index 00000000000..f440c6944d9 --- /dev/null +++ b/python/extractor/tests/tokenizer/utf8.py @@ -0,0 +1,2 @@ +# Some abitrary prefix with no space beforecoding: utf-8 -*- +# €€€€ diff --git a/python/extractor/tests/tokenizer/utf8.tokens b/python/extractor/tests/tokenizer/utf8.tokens new file mode 100644 index 00000000000..bff89345d59 --- /dev/null +++ b/python/extractor/tests/tokenizer/utf8.tokens @@ -0,0 +1,3 @@ +1,0-1,60: COMMENT '# Some abitrary prefix with no space beforecoding: utf-8 -*-' +2,0-2,6: COMMENT '# €€€€' +3,0-3,0: ENDMARKER '' diff --git a/python/extractor/tests/tokenizer/utf8_bom.py b/python/extractor/tests/tokenizer/utf8_bom.py new file mode 100644 index 00000000000..509f44c690e --- /dev/null +++ b/python/extractor/tests/tokenizer/utf8_bom.py @@ -0,0 +1 @@ +#Starts with a BOM diff --git a/python/extractor/tests/tokenizer/utf8_bom.tokens b/python/extractor/tests/tokenizer/utf8_bom.tokens new file mode 100644 index 00000000000..49ee0f628e0 --- /dev/null +++ b/python/extractor/tests/tokenizer/utf8_bom.tokens @@ -0,0 +1,2 @@ +1,0-1,18: COMMENT '#Starts with a BOM' +2,0-2,0: ENDMARKER '' \ No newline at end of file diff --git a/python/extractor/thrift_extractor.py b/python/extractor/thrift_extractor.py new file mode 100755 index 00000000000..64b814b712c --- /dev/null +++ b/python/extractor/thrift_extractor.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python +"""Run the thrift extractor locally for debugging. +""" +import sys +import python_tracer + +if __name__ == "__main__": + python_tracer.load_library() + import semmle.thrift + import semmle.files + if len(sys.argv) != 3: + print("Usage %s INPUT_FOLDER TRAP_FOLDER" % sys.argv[0]) + sys.exit(1) + trap_folder = semmle.files.TrapFolder(sys.argv[2]) + extractor = semmle.thrift.Extractor(trap_folder) + extractor.extract_folder(sys.argv[1]) diff --git a/python/extractor/tokenizer_generator/README.md b/python/extractor/tokenizer_generator/README.md new file mode 100644 index 00000000000..104de535a1f --- /dev/null +++ b/python/extractor/tokenizer_generator/README.md @@ -0,0 +1,172 @@ +# The Python tokenizer + +This file describes the syntax and operational semantics of the state machine +that underlies our tokenizer. + +## The state machine syntax + +The state machine is described in a declarative fashion in the +`state_transition.txt` file. This file contains a sequence of declarations, as +described in the following subsections. + +Additionally, lines may contain comments indicated using the `#` character, as +in Python itself. + +In the remainder of the document, "identifier" means any sequence of characters +starting with a letter (`a-z` or `A-Z`) and followed by a sequence of letters, +digits, and/or underscores. + +### Start declarations +This has the form `start: ` followed by the name of a table. It is used to +indicate what table is used as the starting point for the tokenization. + +There should be exactly one of these declarations in the file. + +### Alias declarations +These have the form +``` +identifier = id_or_char or id_or_char or ... +``` +where `id_or_char` is either a single character surrounded by single quotes +(e.g. `'a'`) or an identifier defined in another alias declaration. + +Thus, aliases define _sets_ of characters: single-quoted characters representing +singleton sets, and `or` being set union. +>Note: A few character classes are predefined: +> - `ERROR` representing the error state of the state machine, +> - `IDENTIFIER` representing characters that can appear at the start of +> a Unicode identifier, and +> - `IDENTIFIER_CONTINUE` representing characters that can appear +> within a Unicode identifier. + +### Table declarations +These have the form + +``` +table header { + state_transition + state_transition + ... +} +``` +where `header` is either an identifier or an identifier followed by another +identifier surrounded by parentheses. The latter implements a form of +"inheritance" between tables, and is explained in a later section. + +The format of `state_transition`s is described in the next subsection. + +### State transitions +Each state transition has the following form: +``` +set_of_before_states -> after_state for set_of_characters optional_actions +``` +Here, `set_of_before_states` is either a single identifier or a list of identifiers +with `or`s interspersed (mimicking the way sets of characters are specified) and +`after_state` is an identifier. These identifiers do not have to be declared +separately — they are implicitly declared when used. +>Note: A special state `0` (in the table indicated with the `start: ` +>declaration represents the starting state for the entire tokenization. + +The `set_of_characters` can either be +- the identifier corresponding to an alias, +- a single character (e.g. `'a'`), +- a list of sets of characters with `or`s interspersed, or +- an asterisk `*` representing _all_ characters that do not already have a + transition defined for the set of "before" states. + +After the state transition is an optional list of actions, described next. + +### Actions +Actions are specified using the keyword `do`. After this keyword, one or more +actions may be specified, each terminated with `;`, e.g. +``` +foo -> bar for 'a' do action1; action2; +``` +As the actions are very operational in nature, they will be described when we go +into the operational semantics of the state machine. + +## Informal operational semantics +>Note: What follows is not based on a reading of the source code, but just +>experience with working with modifying the state machine. There may be +>significant inaccuracies. + +At a high level, the purpose of the tokenizer is to partition the given input +into a sequence of strings representing tokens. The decision of where to put the +boundaries between these strings is done on a character-by-character basis. To +mark the start of a token, the action `mark` is used. Note that the mark is +placed _before_ the character that caused the action to be executed. That is, in +the following transition rule +``` +foo -> bar for 'a' do mark; +``` +the mark is placed _before_ the `a`. + +Once the end of a token has been reached, the `emit` action is used. This +creates a token from the part of the input spanning from the most recent `mark` +up to (and including) the character that caused the transition to which the +`emit` action is attached. + +As an example, consider the following state machine that splits a sequence of +zeroes and ones into tokens consisting of (maximal) runs of each character: + +``` +start: default +table default { + + # This is essentially just an unconditional state transition. + 0 -> zero_or_one for * do pushback; + + zero_or_one -> zeros for '0' do mark; + zero_or_one -> ones for '1' do mark; + + zeros -> zeros for '0' + zeros -> zero_or_one for * do pushback; emit(ZEROS); + + ones -> zero_or_one for * do pushback; emit(ONES); + ones -> ones for '1' +} +``` +The `pushback` action has the effect of "pushing back" the current character. +(In reality, all this does is move the pointer to the current character one step +back. It is thus not a problem to have several pushbacks in a row.) + +> Note: The order in which the transition rules for a state is specified does +> not matter. Even if the `*` state is listed first, as with `ones` above, it +> does not take precedence over other more specific character sets. + +After tokenizing a string with the above grammar, the result will be a sequence +of `ZEROS` and `ONES` tokens. Each of these will have three pieces of data +associated with it: the starting point (line and column), the end point (also +line and column), and the characters that make up the token. Note that `emit` +accepts a second argument (which must be a string) as well. For example, the +transition for code when reaching a newline is: +``` +feed = '\r' or '\n' +... + code -> whitespace_line for feed do emit(NEWLINE, "\n"); newline; +``` +This has the effect of normalizing end of line characters to be `\n`. + +>Note: The replacement text may have a different length than the distance to the +>most recent `span`. This may not be desirable. + +The above snippet introduces another action: `newline`. This has the effect of +resetting the column counter to zero and incrementing the line counter. + +>Note: There are some peculiarities about newlines, and the tokenizer will get +>confused if they are not handled through the `newline` action. + +The last two actions have to do with maintaining a stack of parsing tables. At +all points, the behavior of the tokenizer is governed by the table that is on +top of the stack. The `push` action pushes the specified table (given as an +argument) on top of this stack. Naturally, the `pop` action does the opposite, +discarding the top element. + +This leaves the final point of interest: what decides which transitions are +"active" at a given point? + +The way this functions is essentially like method dispatch in Python (though +thankfully there is no multiple inheritance). Thus, given the current state and +the current character, we first look in the table on top of the stack. If this +table does not have a transition for the given state and character, we next look +at the table it inherits from, and so forth. diff --git a/python/extractor/tokenizer_generator/compiled.py b/python/extractor/tokenizer_generator/compiled.py new file mode 100644 index 00000000000..3981a6d81df --- /dev/null +++ b/python/extractor/tokenizer_generator/compiled.py @@ -0,0 +1,155 @@ + +import unicodedata +from . import machine + +class SuperState: + + def __init__(self, name, mapping): + self.name = name + self.mapping = mapping + + def as_list_of_bytes(self): + lst = dict_to_list(self.mapping) + return [ table.as_bytes() for table in lst ] + + def as_list_of_transitions(self): + return dict_to_list(self.mapping) + +action_id = 0 +all_actions = {} + +class ActionList: + + def __init__(self, actions, id): + self.actions = actions + self.id = id + + @staticmethod + def get(actions): + global action_id + assert isinstance(actions, tuple) + if actions not in all_actions: + all_actions[actions] = ActionList(actions, action_id) + action_id += 1 + return all_actions[actions] + + @staticmethod + def listall(): + return sorted(all_actions.values(), key = lambda al: al.id) + +next_pair_id = 0 +pairs = {} + +class StateActionListPair: + + def __init__(self, state, actionlist, id): + self.state = state + self.actionlist = actionlist + self.id = id + + @staticmethod + def get(state, actionlist): + global next_pair_id + if actionlist is not None and not isinstance(actionlist, ActionList): + actionlist = ActionList.get(actionlist) + if (state, actionlist) not in pairs: + pairs[(state, actionlist)] = StateActionListPair(state, actionlist, next_pair_id) + next_pair_id += 1 + return pairs[(state, actionlist)] + + @staticmethod + def listall(): + return sorted(pairs.values(), key = lambda pair: pair.id) + +next_table_id = 0 +table_ids = {} + +class StateTransitionTable: + + def __init__(self, mapping): + self.mapping = mapping + + def as_bytes(self): + lst = dict_to_list(self.mapping) + return bytes(pair.id for pair in lst) + + def __getitem__(self, key): + return self.mapping[key] + + @property + def id(self): + global next_table_id + b = self.as_bytes() + if not b in table_ids: + table_ids[b] = next_table_id + next_table_id += 1 + return table_ids[b] + +def dict_to_list(mapping): + assert isinstance(mapping, dict) + result = [] + for key, value in mapping.items(): + while key.id >= len(result): + result.append(None) + result[key.id] = value + return result + + +#Each character is one of id-start, id-continuation or other. Represent "other" as ERROR for all non-ascii characters. +#See https://www.python.org/dev/peps/pep-3131 for an explanation of what is an identifier. +OTHER_START = {0x1885, 0x1886, 0x2118, 0x212E, 0x309B, 0x309C} +OTHER_CONTINUE = {0x00B7, 0x0387, 0x19DA} +OTHER_CONTINUE.update(range(0x1369, 0x1372)) +ID_CATEGORIES = {"Lu", "Ll", "Lt", "Lm", "Lo", "Nl"} +CONT_CATEGORIES = {"Mn", "Mc", "Nd", "Pc"} + +CHUNK_SIZE = 64 + +class IdentifierTable: + + def __init__(self): + classes = [] + for i in range(0x110000): + try: + c = chr(i) + except: + continue + cat = unicodedata.category(c) + if cat in ID_CATEGORIES or i in OTHER_START: + cls = machine.IDENTIFIER_CLASS.id + elif cat in CONT_CATEGORIES or i in OTHER_CONTINUE: + cls = machine.IDENTIFIER_CONTINUE_CLASS.id + else: + cls = machine.ERROR_CLASS.id + assert cls in (0,1,2,3) + classes.append(cls) + result = [] + for i, cls in enumerate(classes): + byte, bits = i>>2, cls<<((i&3)*2) + while byte >= len(result): + result.append(0) + result[byte] |= bits + while result[-1] == 0: + result.pop() + while len(result) % CHUNK_SIZE: + result.append(0) + self.table = result + + def as_bytes(self): + return bytes(self.table) + + def as_two_level_table(self): + index = [] + chunks = {} + next_id = 0 + the_bytes = self.as_bytes() + for n in range(0, len(the_bytes), CHUNK_SIZE): + chunk = the_bytes[n:n+CHUNK_SIZE] + if chunk in chunks: + index.append(chunks[chunk]) + else: + index.append(next_id) + chunks[chunk] = next_id + next_id += 1 + chunks = [ chunk for (i, chunk) in sorted((i, chunk) for chunk, i in chunks.items())] + return chunks, index diff --git a/python/extractor/tokenizer_generator/gen_state_machine.py b/python/extractor/tokenizer_generator/gen_state_machine.py new file mode 100644 index 00000000000..7ee3a37fdfa --- /dev/null +++ b/python/extractor/tokenizer_generator/gen_state_machine.py @@ -0,0 +1,225 @@ +''' +Generate a state-machine based tokenizer from a state transition description and a template. + +Parses the state transition description to compute a set of transition tables. +Each table maps (state, character-class) pairs to (state, action) pairs. +During tokenization each input character is converted to a class, then a new state and action is +looked up using the current state and character-class. + +The generated tables are: + CLASS_TABLE: + Maps ASCII code points to character class. + ID_TABLE: + Maps all unicode points to one of Identifier, Identifier-continuation, or other. + The transition tables: + Each table maps each state to a per-class transition table. + Each per-class transition table maps each character-class to an index in the action table. + ACTION_TABLE: + Embedded in code as `action_table`; maps each index to a (state, action) pair. + +Since the number of character-classes, states and (state, action) pairs is small. Everything is represented as +a byte and tables as `bytes` object for Python 3, or `array.array` objects for Python 2. +''' + + +from .parser import parse +from . import machine +from .compiled import StateActionListPair, IdentifierTable + +def emit_id_bytes(id_table): + chunks, index = id_table.as_two_level_table() + print("# %d entries in ID index" % len(index)) + index_bytes = bytes(index) + print("ID_INDEX = toarray(") + for n in range(0, len(index_bytes), 32): + print(" %r" % index_bytes[n:n+32]) + print(")") + print("ID_CHUNKS = (") + for chunk in chunks: + print(" toarray(%r)," % chunk) + print(")") + +def emit_transition_table(table, verbose=False): + print("%s = (" % table.name.upper(), end="") + for trans in table.as_list_of_transitions(): + print("B%02d," % trans.id, end=" ") + print(")") + +emitted_rows = set() + +def emit_rows(table): + for trans in table.as_list_of_transitions(): + id = trans.id + if id in emitted_rows: + continue + emitted_rows.add(id) + print("B%02d = toarray(%r)" % (id, trans.as_bytes())) + +action_names = {} +next_action_id = 0 + +def get_action_id(action): + global next_action_id + assert action is not None + if action in action_names: + return action_names[action] + result = next_action_id + next_action_id += 1 + action_names[action] = result + return result + +def emit_actions(table, indent=""): + for pair in table: + if pair.actionlist is None: + continue + action = pair.actionlist + get_action_function(action, indent) + +def generate_action_table(table, indent): + result = [] + result.append(indent + "action_table = [\n " + indent) + for i, pair in enumerate(table): + if pair.actionlist is None: + result.append("(%d, None), " % pair.state.id) + else: + result.append("(%d, self.action_%s), " % (pair.state.id, pair.actionlist.id)) + if (i & 3) == 3: + result.append("\n " + indent) + result.append("\n" + indent + "]") + return "".join(result) + +action_functions = set() + +def get_action_function(actionlist, indent=""): + if actionlist in action_functions: + return + action_functions.add(actionlist) + last = actionlist.actions[-1] + print(indent + "def action_%d(self):" % actionlist.id) + emit = False + for action in actionlist.actions: + if action is machine.PUSHBACK: + print(indent + " self.index -= 1") + continue + elif action is machine.POP: + print(indent + " self.super_state = self.state_stack.pop()") + elif isinstance(action, machine.Push): + print(indent + " self.state_stack.append(self.super_state)") + print(indent + " self.super_state = %s" % action.state.name.upper()) + elif action is machine.MARK: + print(indent + " self.token_start_index = self.index") + print(indent + " self.token_start = self.line, self.index-self.line_start_index") + elif isinstance(action, machine.Emit): + emit = True + print(indent + " end = self.line, self.index-self.line_start_index+1") + if action.text is None: + print(indent + " result = [%s, self.text[self.token_start_index:self.index+1], self.token_start, end]" % action.kind) + else: + print(indent + " result = [%s, u%s, (self.line, self.index-self.line_start_index), end]" % (action.kind, action.text)) + print(indent + " self.token_start = end") + print(indent + " self.token_start_index = self.index+1") + elif action is machine.NEWLINE: + print(indent + " self.line_start_index = self.index+1") + print(indent + " self.line += 1") + elif action is machine.EMIT_INDENT: + assert action is last + print(indent + " return self.emit_indent()") + print() + return + else: + assert False, "Unexpected action: %s" % action + print(indent + " self.index += 1") + if emit: + print(indent + " return result") + else: + print(indent + " return None") + print() + return + +def emit_char_classes(char_classes, verbose=False): + for cls in sorted(set(char_classes.values()), key=lambda x : x.id): + print("#%d = %r" % (cls.id, cls)) + table = [None] * 128 + by_id = { + machine.IDENTIFIER_CLASS.id : machine.IDENTIFIER_CLASS, + machine.IDENTIFIER_CONTINUE_CLASS.id : machine.IDENTIFIER_CONTINUE_CLASS, + machine.ERROR_CLASS.id : machine.ERROR_CLASS + } + for c, cls in char_classes.items(): + by_id[cls.id] = cls + if c is machine.IDENTIFIER or c is machine.IDENTIFIER_CONTINUE: + continue + table[ord(c)] = cls.id + by_id[cls.id] = cls + for i in range(128): + assert table[i] is not None + bytes_table = bytes(table) + if verbose: + print("# Class Table") + for i in range(len(bytes_table)): + b = bytes_table[i] + print("# %r -> %s" % (chr(i), by_id[b])) + print("CLASS_TABLE = toarray(%r)" % bytes_table) + + + +PREFACE = """ +import codecs +import re +import sys + +from blib2to3.pgen2.token import * + +if sys.version < '3': + from array import array + def toarray(b): + return array('B', b) +else: + def toarray(b): + return b +""" + +def main(): + verbose = False + import sys + if len(sys.argv) != 3: + print("Usage %s DESCRIPTION TEMPLATE" % sys.argv[0]) + sys.exit(1) + descriptionfile = sys.argv[1] + with open(descriptionfile) as fd: + m = machine.Machine.load(fd.read()) + templatefile = sys.argv[2] + with open(templatefile) as fd: + template = fd.read() + print("# This file is AUTO-GENERATED. DO NOT MODIFY") + print('# To regenerate: run "python3 -m tokenizer_generator.gen_state_machine %s %s"' % (descriptionfile, templatefile)) + print(PREFACE) + print("IDENTIFIER_CLASS = %d" % machine.IDENTIFIER_CLASS.id) + print("IDENTIFIER_CONTINUE_CLASS = %d" % machine.IDENTIFIER_CONTINUE_CLASS.id) + print("ERROR_CLASS = %d" % machine.ERROR_CLASS.id) + emit_id_bytes(IdentifierTable()) + char_classes = m.get_classes() + emit_char_classes(char_classes, verbose) + print() + tables = [state.compile(char_classes) for state in m.states.values() ] + for table in tables: + emit_rows(table) + print() + for table in tables: + #pprint(table) + emit_transition_table(table, verbose) + print() + print("TRANSITION_STATE_NAMES = {") + for state in m.states.values(): + print(" id(%s): '%s'," % (state.name.upper(), state.name)) + print("}") + print("START_SUPER_STATE = %s" % m.start.name.upper()) + prefix, suffix = template.split("#ACTIONS-HERE") + print(prefix) + actions = StateActionListPair.listall() + emit_actions(actions, " ") + action_table = generate_action_table(actions, " ") + print(suffix.replace("#ACTION_TABLE_HERE", action_table)) + +if __name__ == "__main__": + main() diff --git a/python/extractor/tokenizer_generator/machine.py b/python/extractor/tokenizer_generator/machine.py new file mode 100644 index 00000000000..ff58ec2a457 --- /dev/null +++ b/python/extractor/tokenizer_generator/machine.py @@ -0,0 +1,485 @@ + +import ast + +from .parser import parse +from collections import defaultdict +from .compiled import SuperState, StateTransitionTable, StateActionListPair + + +class Transition: + + def __init__(self, from_state, to_state, what, do): + assert isinstance(from_state, State) + assert isinstance(to_state, State) + self.from_state = from_state + self.what = what + if not do: + do = None + else: + assert isinstance(do, list) + for item in do: + assert isinstance(item, Action) + do = tuple(do) + self.action = StateActionListPair.get(to_state, do) + + def dump(self): + if self.action.actionlist: + return "%s -> %s for %s do %s" % ( + self.from_state, + self.action.state, + self.what, + "; ".join(str(do) for do in self.action.actionlist.actions) + ) + else: + return "%s -> %s for %s" % ( + self.from_state, + self.action.state, + self.what + ) + +next_state_id = 1 +states = {} + +class State: + + def __init__(self, name): + global next_state_id + if name.isdigit(): + assert name == "0" + self.id = 0 + self.name = "START" + else: + self.name = name + self.id = next_state_id + next_state_id += 1 + + @staticmethod + def get(name): + if name not in states: + states[name] = State(name) + return states[name] + + @staticmethod + def count(): + return len(states) + + def __repr__(self): + return "state_%s(%s)" % (self.id, self.name) + + @staticmethod + def from_id(id): + for state in states.values(): + if state.id == id: + return state + raise ValueError(id) + +State.get("0") +ERROR_ACTION = StateActionListPair.get(State.get("error"), None) + +next_super_state_id = 0 +super_states = {} + +class TransitionTable: + + def __init__(self, name): + global next_super_state_id + self.name = name + self.id = next_super_state_id + next_super_state_id += 1 + self.parent = None + self.transitions = [] + self._table = None + + def add_transition(self, trans): + self.transitions.append(trans) + + def dump(self): + if self.parent: + lines = [ "TransitionTable %s(%s extends %s)" % (self.id, self.name, self.parent.name) ] + else: + lines = [ "TransitionTable %s(%s):" % (self.id, self.name) ] + lines.extend(" " + t.dump() for t in self.transitions) + return "\n".join(lines) + + @staticmethod + def get(name, parent=None): + if name not in super_states: + super_states[name] = TransitionTable(name) + return super_states[name] + + @staticmethod + def count(): + return len(super_states) + + def get_table(self, character_classes): + '''Returns the transition table for all states in this super-state''' + if self._table is None: + from_transtions = defaultdict(list) + for t in self.transitions: + from_transtions[t.from_state].append(t) + self._table = { state: self.get_transition_table(state, from_transtions.get(state, ()), character_classes) for state in states.values() } + return self._table + + def get_transition_table(self, state, transition_list, character_classes): + table = {} + if self.parent: + parent_table = self.parent.get_table(character_classes) + else: + parent_table = None + default = None + for t in transition_list: + assert state == t.from_state + if isinstance(t.what, Any): + default = t.action + continue + action = t.action + classes = set(character_classes[c] for c in t.what) + for cls in classes: + if cls in table: + raise ValueError("Duplicate transition from %s on %s" % (state, cls)) + else: + table[cls] = action + on_identifier = table.get(IDENTIFIER_CLASS, None) + for cls in character_classes.values(): + if cls in table: + continue + if on_identifier and cls.is_identifier: + table[cls] = on_identifier + elif default: + table[cls] = default + elif parent_table and state in parent_table: + table[cls] = parent_table[state][cls] + else: + table[cls] = ERROR_ACTION + return StateTransitionTable(table) + + def compile(self, character_classes): + return SuperState(self.name, self.get_table(character_classes)) + +class Any: + + def __repr__(self): + return "*" + +class Action: + + def __repr__(self): + return self.__class__.__name__.lower() + +class Emit(Action): + + def __init__(self, kind, text): + assert isinstance(kind, str) + assert kind.upper() == kind + self.kind = kind + self.text = text + + def __repr__(self): + if self.text is None: + return "emit(" + self.kind + ")" + else: + return "emit(%s, %r)" % (self.kind, self.text) + + def __eq__(self, other): + return type(other) is Emit and other.kind == self.kind and other.text == self.text + + def __hash__(self): + return 353 ^ hash(self.kind) ^ hash(self.text) + +class Push(Action): + + def __init__(self, state): + assert isinstance(state, TransitionTable) + self.state = state + + def __repr__(self): + return "push(%s)" % self.state.name + + def __eq__(self, other): + return type(other) is Push and other.state == self.state + + def __hash__(self): + return 59 ^ hash(self.state) + +class EmitIndent(Action): + pass +EMIT_INDENT = EmitIndent() + +class Pop(Action): + pass +POP = Pop() + +class Pushback(Action): + pass +PUSHBACK = Pushback() + +class Mark(Action): + pass +MARK = Mark() + +class Newline(Action): + pass +NEWLINE = Newline() + +class Identifier: + + def __repr__(self): + return "UnicodeIdentifiers()" + +IDENTIFIER = Identifier() + +class IdentifierContinue: + + def __repr__(self): + return "IdentifierContinue()" + +IDENTIFIER_CONTINUE = IdentifierContinue() + +next_char_class_id = 0 + +class CharacterClass: + + def __init__(self, chars, is_identifier = None): + global next_char_class_id + self.chars = chars + self.id = next_char_class_id + next_char_class_id += 1 + if is_identifier is None: + self.is_identifier = chars.copy().pop().isidentifier() + else: + self.is_identifier = is_identifier + + def __repr__(self): + if self == IDENTIFIER_CLASS: + return "IDENTIFIER_CLASS(%d)" % self.id + elif self == ERROR_CLASS: + return "ERROR_CLASS(%d)" % self.id + else: + return "CharacterClass %s %r" % (self.id, sorted(self.chars)) + +ERROR_CLASS = CharacterClass(set(), False) +assert ERROR_CLASS.id == 0 +IDENTIFIER_CLASS = CharacterClass(set(), True) +IDENTIFIER_CONTINUE_CLASS = CharacterClass(set(), False) + +class Machine: + + def __init__(self): + self.aliases = {} + self.states = {} + self.aliases["IDENTIFIER"] = IDENTIFIER + self.aliases["IDENTIFIER_CONTINUE"] = IDENTIFIER_CONTINUE + self.aliases['SPACE'] = {' '} + self.start = None + + def add_state(self, name): + assert name not in self.states + result = TransitionTable.get(name) + self.states[name] = result + return result + + def add_alias(self, name, choices): + assert name not in self.aliases + assert isinstance(choices, set), choices + self.aliases[name] = choices + + def dump(self): + r = [] + a = r.append + a("Starting super-state: %s" % self.start.name) + a("") + a("Aliases:") + for name_alias in self.aliases.items(): + a(" %s = %r" % name_alias) + a("") + for name, state in self.states.items(): + a(state.dump()) + return "\n".join(r) + + @staticmethod + def load(src): + tree = parse(src) + m = Machine() + w = Walker(m) + w.visit(tree) + return m + + def get_classes(self): + '''Get the character classes for this machine''' + #There are two predefined classes: Unicode identifiers, and ERROR. + #A character class is a set of characters, such that the transitions + #and actions of the machine are identical for all characters in that class. + char_to_transitions = defaultdict(set) + for s in self.states.values(): + for t in s.transitions: + w = t.what + if isinstance(w, Any): + continue + for c in w: + if c is IDENTIFIER or c is IDENTIFIER_CONTINUE: + continue + char_to_transitions[c].add((s, t.from_state, t.action)) + equivalence_sets = defaultdict(set) + for c, transition_set in sorted(char_to_transitions.items()): + equivalence_sets[frozenset(transition_set)].add(c) + classes = {} + for char_set in sorted(equivalence_sets.values()): + charcls = CharacterClass(char_set) + for c in char_set: + classes[c] = charcls + classes[IDENTIFIER] = IDENTIFIER_CLASS + classes[IDENTIFIER_CONTINUE] = IDENTIFIER_CONTINUE_CLASS + for i in range(128): + c = chr(i) + if c not in classes: + if c.isidentifier(): + classes[c] = IDENTIFIER_CLASS + elif c in "0123456789": + classes[c] = IDENTIFIER_CONTINUE_CLASS + else: + classes[c] = ERROR_CLASS + for cls in classes.values(): + if cls is IDENTIFIER_CLASS or cls is IDENTIFIER_CONTINUE_CLASS or cls is ERROR_CLASS: + continue + assert { c for c in cls.chars if c.isidentifier() } == cls.chars or not { c for c in cls.chars if c.isidentifier() } + return classes + +class Walker: + + def __init__(self, machine): + self.machine = machine + + def visit(self, node): + if hasattr(node, "type"): + tag = node.type + else: + tag = node.data + meth = getattr(self, "visit_" + tag, None) + if meth is None: + self.fail(node, tag) + else: + return meth(node) + + def fail(self, node, tag): + print(node) + raise NotImplementedError(tag) + + def visit_first_child(self, node): + assert len(node.children) == 1 + return self.visit(node.children[0]) + + def visit_children(self, node): + return [ self.visit(child) for child in node.children ] + + visit_start = visit_first_child + visit_machine = visit_children + visit_declaration = visit_first_child + + def visit_alias_decl(self, node): + assert len(node.children) == 2 + choice = self.visit(node.children[1]) + self.machine.add_alias(node.children[0].value, choice) + + def visit_alias(self, node): + return self.machine.aliases[node.children[0].value] + + def visit_char(self, node): + c = ast.literal_eval(node.children[0].value) + assert isinstance(c, str), c + assert len(c) == 1, c + return c + + def visit_choice(self, node): + #Convert choices into a set of characters + result = set() + for child in node.children: + item = self.visit(child) + if isinstance(item, set): + result.update(item) + else: + result.add(item) + return result + + visit_item = visit_first_child + + def visit_table_decl(self, node): + self.current_state = self.visit(node.children[0]) + for transition in node.children[1:]: + self.visit(transition) + + def visit_table_header(self, node): + name = node.children[0].value + state = self.machine.add_state(name) + if len(node.children) > 1: + base = TransitionTable.get(node.children[1].value) + state.parent = base + return state + + def visit_transition(self, node): + # state_choice "->" state "for" (choice | "*") action_list? + from_states = self.visit(node.children[0]) + to_state = self.visit(node.children[1]) + what = self.visit(node.children[2]) + if len(node.children) > 3: + do = self.visit(node.children[3]) + else: + do = [] + for state in from_states: + trans = Transition(state, to_state, what, do) + self.current_state.add_transition(trans) + + visit_state_choice = visit_children + + def visit_state(self, node): + return State.get(node.children[0].value) + + def visit_any(self, node): + return Any() + + visit_action_list = visit_children + visit_action = visit_first_child + + def visit_emit(self, node): + if len(node.children) == 2: + return Emit(node.children[0].value, self.visit(node.children[1])) + else: + return Emit(node.children[0].value, None) + + def visit_optional_text(self, node): + return node.children[0].value + + def visit_push(self, node): + state = TransitionTable.get(node.children[0].value) + return Push(state) + + def visit_emit_indent(self, node): + return EMIT_INDENT + + def visit_pushback(self, node): + return PUSHBACK + + def visit_pop(self, node): + return POP + + def visit_mark(self, node): + return MARK + + def visit_newline(self, node): + return NEWLINE + + def visit_start_decl(self, node): + self.machine.start = TransitionTable.get(node.children[0].value) + + +def main(): + import sys + file = sys.argv[1] + with open(file) as fd: + tree = parse(fd.read()) + m = Machine() + w = Walker(m) + w.visit(tree) + print(m.dump()) + +if __name__ == "__main__": + main() diff --git a/python/extractor/tokenizer_generator/parser.py b/python/extractor/tokenizer_generator/parser.py new file mode 100644 index 00000000000..2d4111b361e --- /dev/null +++ b/python/extractor/tokenizer_generator/parser.py @@ -0,0 +1,92 @@ + +''' + Explanation of the syntax + + start_decl: The starting transition table + alias_decl: Declare short hand, e.g. digits = '0' or '1' or ... + table_decl: Declare transition table: name and list of transitions. + transition: Transitions from one state to another. From is: state (or choice of states) -> new-state for possible-characters [ do action or actions; ] + action: Actions are: + "emit(kind [, text]): emits a token of kind using the givn text or text from the stream. The token starts at the last mark and ends at the current location. + "push(table)": pushes a transition table to the stack. + "pop" : pops a transition table from the stack. + "pushback": pushes the last character back to the stream. + "mark": marks the current location as the start of the next token. + "emit_indent": Emits zero or more INDENT or DEDENT tokens depending on current indentation. + "newline": Increments the line number and sets the column offset back to zero. + + States: + All states are given names. + The state "0" is the start state and always exists. + All other states are implicitly defined when used (this is for Python after all :) + '*' means all states for which a transition is not explicitly defined. + So the transitions: + 0 -> end for '\n' + 0 -> other for * + 0 -> a_b for 'a' or 'b' + mean that '0' will transition to 'other' for all characters other than 'a', 'b' and `\n`. + The order of transitions in the state machine description is irrelevant. +''' + + +grammar = r""" +start : machine +machine : declaration+ +declaration : alias_decl | table_decl | start_decl +start_decl : "start" ":" IDENTIFIER +table_decl : table_header "{" transition+ "}" +table_header : "table" IDENTIFIER ( "(" IDENTIFIER ")" )? +alias_decl : IDENTIFIER "=" choice +choice : item ( "or" item)* +item : alias | char +alias : IDENTIFIER +char : LITERAL +transition : state_choice "->" state "for" (choice | any) action_list? +any : "*" +state_choice : state ( "or" state)* +state : IDENTIFIER | DIGIT +action_list : "do" action ";" (action ";")* +action : emit | pop | push | pushback | mark | emit_indent | newline +emit : "emit" "(" IDENTIFIER optional_text? ")" +optional_text : "," LITERAL +pop : "pop" +push : "push" "(" IDENTIFIER ")" +pushback : "pushback" +mark : "mark" +emit_indent : "emit_indent" +newline : "newline" + +LITERAL : ("\"" /[^"]/* "\"") | ("'" /[^']/* "'") +IDENTIFIER : LETTER ( LETTER | DIGIT | "_" )* +LETTER : "A".."Z" | "a".."z" +DIGIT : "0".."9" +WHITESPACE : (" " | "\t" | "\r" | "\n")+ + +%import common.NEWLINE +COMMENT : "#" /(.)*/ NEWLINE +%ignore WHITESPACE +%ignore COMMENT +""" + + + +from lark import Lark + +class Parser(Lark): + + def __init__(self): + Lark.__init__(self, grammar, parser="earley", lexer="standard") + +def parse(src): + parser = Parser() + return parser.parse(src) + +def main(): + import sys + file = sys.argv[1] + with open(file) as fd: + tree = parse(fd.read()) + print(tree.pretty()) + +if __name__ == "__main__": + main() diff --git a/python/extractor/tokenizer_generator/state_transition.txt b/python/extractor/tokenizer_generator/state_transition.txt new file mode 100644 index 00000000000..9ce9b3cfe71 --- /dev/null +++ b/python/extractor/tokenizer_generator/state_transition.txt @@ -0,0 +1,385 @@ +# State machine specification for unified Python tokenizer +# Handles all tokens for all versions of Python, including partial string tokens for handling f-strings. +# Stating transition table is "default" and starting state is "0" +# +# + + +#declarations +prefix_chars = 'u' or 'U' or 'b' or 'B' or 'r' or 'R' +one_to_nine = '1' or '2' or '3' or '4' or '5' or '6' or '7' or '8' or '9' +digits = '0' or one_to_nine +oct_digits = '0' or '1' or '2' or '3' or '4' or '5' or '6' or '7' +hex_digits = digits or 'a' or 'A' or 'b' or 'B' or 'c' or 'C' or 'd' or 'D' or 'e' or 'E' or 'f' or 'F' +feed = '\n' or '\r' + +#tables +table default { + # 0 is starting state + 0 -> whitespace_line for * do pushback; + + #String prefix states + + # When we encounter a prefix character, we are faced with the possibility + # that it is either the beginning of a string or of an identifier. With a + # single character of lookahead available, we therefore have to be in an + # intermediate state until we are able to determine which case we're in. + + code -> maybe_string1 for prefix_chars do mark; + maybe_string1 -> maybe_string2 for prefix_chars + maybe_string1 or maybe_string2 -> quote_s for "'" + maybe_string1 or maybe_string2 -> quote_d for '"' + code -> quote_s for "'" do mark; + code -> quote_d for '"' do mark; + maybe_string1 or maybe_string2 -> in_identifier for * do pushback; + + # In the following, `_s` means one single quote, `_ss` means two in a row, + # etc. Likewise `_d` indicates double quotes. + + quote_s -> quote_ss for "'" + quote_d -> quote_dd for '"' + quote_s -> instring for * do pushback ; push(string_s); + quote_ss -> instring for "'" do push(string_sss); + quote_ss -> code for * do pushback ; emit(STRING); + quote_d -> instring for * do pushback ; push(string_d); + quote_dd -> instring for '"' do push(string_ddd); + quote_dd -> code for * do pushback ; emit(STRING); + + #F-string prefix states + + # The prefixes `u` and `b` are specific to Python 2, and f-strings are only + # valid for Python 3. Thus, the only potential prefixes are permutations of + # `f` and `fr` (upper/lowercase notwithstanding). + + code -> maybe_fstring1 for 'f' or 'F' do mark; + maybe_string1 -> maybe_fstring2 for 'f' or 'F' + maybe_fstring1 -> maybe_fstring2 for 'r' or 'R' + maybe_fstring1 or maybe_fstring2 -> fquote_s for "'" + maybe_fstring1 or maybe_fstring2 -> fquote_d for '"' + maybe_fstring1 or maybe_fstring2 -> in_identifier for * do pushback; + fquote_s -> fquote_ss for "'" + fquote_d -> fquote_dd for '"' + fquote_s -> instring for * do pushback ; push(fstring_start_s); + fquote_ss -> instring for "'" do push(fstring_start_sss); + fquote_ss -> code for * do pushback ; emit(STRING); + fquote_d -> instring for * do pushback ; push(fstring_start_d); + fquote_dd -> instring for '"' do push(fstring_start_ddd); + fquote_dd -> code for * do pushback ; emit(STRING); + + #String states + instring -> instring for * + instring -> unicode_or_escape for '\\' + unicode_or_escape -> unicode_or_raw for 'N' + unicode_or_raw -> unicode for '{' + unicode_or_raw -> instring for * + unicode -> instring for '}' + unicode -> unicode for * + unicode_or_escape -> escape for * do pushback; + + escape -> instring for feed do newline; + escape -> instring for * + + # When inside a parenthesized expression, newlines indicate the continuation + # of the expression, and not a return to a context where statements may + # appear. This is captured using the `paren` table. + + code -> code for '(' do emit(LPAR, "("); push(paren); + code -> code for '[' do emit(LSQB, "["); push(paren); + code -> code for '{' do emit(LBRACE, "{"); push(paren); + code -> code for ')' do emit(RPAR, ")"); + code -> code for ']' do emit(RSQB, "]"); + code -> code for '}' do emit(RBRACE, "}"); + code -> code for '`' do emit(BACKQUOTE, '`'); + + # Operators + code -> assign for '=' do mark; + code -> le for '<' do mark; + code -> ge for '>' do mark; + code -> bang for '!' do mark; + le -> binop for '<' + le -> code for '>' do emit(OP); + ge -> binop for '>' + bang or le or ge or assign -> code for '=' do emit(OP); + le or ge or assign -> code for * do pushback; emit(OP); + bang -> code for 'r' or 'a' or 's' or 'd' do emit(CONVERSION); + code -> colon for ':' + colon -> code for '=' do emit(COLONEQUAL, ":="); + colon -> code for * do pushback; emit(COLON, ":"); + code -> code for ',' do emit(COMMA, ","); + code -> code for ';' do emit(SEMI, ";"); + code -> at for '@' do mark; + at -> code for '=' do emit(OP); + at -> code for * do pushback; emit(AT, "@"); + code -> dot for '.' do mark; + dot -> float for digits + dot -> code for * do pushback; emit(DOT, "."); + binop or slash or star or dash -> code for '=' do emit(OP); + binop or slash or star or dash -> code for * do pushback; emit(OP); + code -> star for '*' do mark; + star -> binop for '*' + code -> slash for '/' do mark; + slash -> binop for '/' + code -> dash for '-' do mark; + dash -> code for '>' do emit(RARROW); + code -> binop for '+' or '%' or '&' or '|' or '^' do mark; + code -> code for '~' do emit(OP, '~'); + + # Numeric literals + + # Python admits a large variety of numeric literals, and the handling of + # various constructs is a bit inconsistent. For instance, prefixed zeroes are + # not allowed in front of integer numerals (unless all digits are between 0 + # and 7, in which case it is treated as an octal number), but _are_ allowed if + # there is some other context that makes it a float or complex number. Thus, + # `09` is invalid, but `09.` and `09j` are valid. This means we have to be + # very careful in what we commit to in our tokenization, hence the rather + # complicated construction below. + + code -> int for one_to_nine do mark; + int -> int for digits + zero or zero_int or binary or octal or int or hex -> code for 'l' or 'L' do emit(NUMBER); + int -> int_sep for '_' + int_sep -> int for digits + int_sep -> error for * do emit(ERRORTOKEN); + code -> zero for '0' do mark; + zero -> zero_int for digits + zero -> zero_int_sep for '_' + zero_int -> zero_int for digits + zero_int -> zero_int_sep for '_' + zero_int_sep -> zero_int for digits + zero_int_sep -> error for * do emit(ERRORTOKEN); + zero -> octal for 'o' or 'O' + octal -> octal for oct_digits + octal -> octal_sep for '_' + octal_sep -> octal for oct_digits + octal_sep -> error for * do emit(ERRORTOKEN); + zero or octal or hex or binary -> code for * do pushback; emit(NUMBER); + zero -> binary for 'b' or 'B' + binary -> binary for '0' or '1' + binary -> binary_sep for '_' + binary_sep -> binary for '0' or '1' + binary_sep -> error for * do emit(ERRORTOKEN); + zero -> hex for 'x' or 'X' + hex -> hex for hex_digits + hex -> hex_sep for '_' + hex_sep -> hex for hex_digits + hex_sep -> error for * do emit(ERRORTOKEN); + zero or zero_int or int -> int_dot for '.' + zero_int or int -> code for * do pushback; emit(NUMBER); + int_dot or float -> float for digits + float -> float_sep for '_' + float_sep -> float for digits + float_sep -> error for * do emit(ERRORTOKEN); + int_dot -> code for * do pushback; emit(NUMBER); + float or zero or zero_int or int or int_dot -> float_e for 'e' + float or zero or zero_int or int or int_dot -> float_E for 'E' + # `1 if 1else 0` is valid syntax, so we cannot assume 'e' always indicates a float. + float_e -> code for 'l' do pushback; pushback; emit(NUMBER); + float_e or float_E -> float_E for '+' or '-' + float_e or float_E or float_x -> float_x for digits + float_x -> float_x_sep for '_' + float_x_sep -> float_x for digits + float_x_sep -> error for * do emit(ERRORTOKEN); + float or float_x -> code for * do pushback; emit(NUMBER); + + # Identifiers (e.g. names and keywords) + code -> in_identifier for IDENTIFIER do mark; + in_identifier -> in_identifier for IDENTIFIER or digits or IDENTIFIER_CONTINUE + code -> dollar_name for '$' do mark; + dollar_name -> dollar_name for IDENTIFIER or digits or IDENTIFIER_CONTINUE + code -> in_identifier for '_' do mark; + in_identifier -> in_identifier for '_' + in_identifier -> code for * do pushback; emit(NAME); + dollar_name -> code for * do pushback; emit(DOLLARNAME); + + # Comments + code -> line_end_comment for '#' do mark; + line_end_comment -> code for feed do pushback; emit(COMMENT); + line_end_comment -> line_end_comment for * + comment -> whitespace_line for feed do pushback; emit(COMMENT); + comment -> comment for * + code -> whitespace_line for feed do emit(NEWLINE, "\n"); newline; + whitespace_line -> whitespace_line for SPACE or '\t' or '\f' + whitespace_line -> whitespace_line for feed do newline; + whitespace_line -> code for * do emit_indent; + whitespace_line -> comment for '#' do mark; + code -> code for SPACE or '\t' + + # Line continuations and error states. + code or float_e or float_E -> error for * do emit(ERRORTOKEN); + code -> pending_continuation for '\\' + pending_continuation -> line_continuation for feed do newline; + line_continuation -> code for * do pushback; mark; + pending_continuation -> error for * do emit(ERRORTOKEN); + error -> code for * do pushback; + code -> code for * do mark; emit(ERRORTOKEN); + zero or int_dot or zero_int or int or float or float_x -> code for 'j' or 'J' do emit(NUMBER); +} + +table paren(default) { + code -> code for feed do mark; newline; + code -> code for ')' do emit(RPAR, ")"); pop; + code -> code for ']' do emit(RSQB, "]"); pop; + code -> code for '}' do emit(RBRACE, "}"); pop; +} + +#String starting with ' +table string_s(default) { + instring -> code for "'" do pop; emit(STRING); + instring -> error for feed do pop; emit(ERRORTOKEN); newline; +} + +#String starting with " +table string_d(default) { + instring -> code for '"' do pop; emit(STRING); + instring -> error for feed do pop; emit(ERRORTOKEN); newline; +} + +#String starting with ''' +table string_sss(default) { + instring -> string_x for "'" + instring -> instring for feed do newline; + string_x -> string_xx for "'" + string_x -> instring for feed do newline; + string_x -> instring for * do pushback; + string_xx -> code for "'" do pop; emit(STRING); + string_xx -> instring for feed do newline; + string_xx -> instring for * do pushback; +} + +#String starting with """ +table string_ddd(default) { + instring -> string_x for '"' + instring -> instring for feed do newline; + string_x -> string_xx for '"' + string_x -> instring for feed do newline; + string_x -> instring for * do pushback; + string_xx -> code for '"' do pop; emit(STRING); + string_xx -> instring for feed do newline; + string_xx -> instring for * do pushback; +} + +#F-string part common to all fstrings +table fstring_sdsssddd(default) { + instring -> brace for '{' + + escape -> brace for '{' + + brace -> instring for '{' + brace -> code for * do pushback ; emit(FSTRING_MID); push(fstring_expr); +} + +#F-string part common to ' and " +table fstring_sd(fstring_sdsssddd) { + instring -> error for feed do pop; emit(ERRORTOKEN); newline; +} + +#F-string start for string starting with ' +table fstring_start_s(fstring_sd) { + instring -> code for "'" do pop; emit(STRING); + + # If this rule is removed or moved to a higher table, the QL tests start failing for unclear reasons. + # It's identical to a rule in default. + brace -> instring for '{' + brace -> code for * do pushback ; emit(FSTRING_START); pop; push(fstring_s); push(fstring_expr); +} + +#F-string part for string starting with ' +table fstring_s(fstring_sd) { + instring -> code for "'" do pop; emit(FSTRING_END); +} + +#F-string start for string starting with " +table fstring_start_d(fstring_sd) { + instring -> code for '"' do pop; emit(STRING); + + # If this rule is removed or moved to a higher table, the QL tests start failing for unclear reasons. + # It's identical to a rule in fstring_sdsssddd. + brace -> instring for '{' + brace -> code for * do pushback ; emit(FSTRING_START); pop; push(fstring_d); push(fstring_expr); +} + +#F-string part for string starting with " +table fstring_d(fstring_sd) { + instring -> code for '"' do pop; emit(FSTRING_END); +} + +#F-string part common to ''' and """ +table fstring_sssddd(fstring_sdsssddd) { + instring -> instring for feed do newline; + + string_x -> instring for feed do newline; + string_x -> instring for * do pushback; + + string_xx -> instring for feed do newline; + string_xx -> instring for * do pushback; +} + +#F-string start for string starting with ''' +table fstring_start_sss(fstring_sssddd) { + instring -> string_x for "'" + + string_x -> string_xx for "'" + + string_xx -> code for "'" do pop; emit(STRING); + + brace -> instring for '{' + brace -> code for * do pushback ; emit(FSTRING_START); pop; push(fstring_sss); push(fstring_expr); +} + +#F-string part for string starting with ''' +table fstring_sss(fstring_sssddd) { + instring -> string_x for "'" + + string_x -> string_xx for "'" + + string_xx -> code for "'" do pop; emit(FSTRING_END); +} + +#F-string start for string starting with """ +table fstring_start_ddd(fstring_sssddd) { + instring -> string_x for '"' + + string_x -> string_xx for '"' + + string_xx -> code for '"' do pop; emit(STRING); + + brace -> instring for '{' + brace -> code for * do pushback ; emit(FSTRING_START); pop; push(fstring_ddd); push(fstring_expr); +} + +#F-string part for string starting with """ +table fstring_ddd(fstring_sssddd) { + instring -> string_x for '"' + + string_x -> string_xx for '"' + + string_xx -> code for '"' do pop; emit(FSTRING_END); +} + +#Expression within an f-string +table fstring_expr(paren) { + code -> instring for '}' do pop; mark; + code -> instring for ':' do emit(COLON); push(format_specifier); + instring -> instring for '}' do pop; mark; +} + +fspec_type = 'b' or 'c' or 'd' or 'e' or 'E' or 'f' or 'F' or 'g' or 'G' or 'n' or 'o' or 's' or 'x' or 'X' or '%' +fspec_align = '<' or '>' or '=' or '^' +fspec_sign = '+' or '-' or ' ' + +table format_specifier(default) { + instring -> code for '{' do emit(FSTRING_SPEC); + instring -> instring for '}' do pushback; emit(FSTRING_SPEC); pop; + + code -> instring for '}' do mark; +} + + + +#Special state for when dedents are pending. +table pending_dedent(default) { + code -> code for * do pop; emit_indent; +} + +start: default diff --git a/python/extractor/tokenizer_generator/test.py b/python/extractor/tokenizer_generator/test.py new file mode 100644 index 00000000000..97ff19dccc4 --- /dev/null +++ b/python/extractor/tokenizer_generator/test.py @@ -0,0 +1,25 @@ + +from . import test_tokenizer +import sys +from blib2to3.pgen2.token import tok_name + +def printtoken(type, token, start, end): # for testing + token_range = "%d,%d-%d,%d:" % (start + end) + print("%-20s%-15s%r" % + (token_range, tok_name[type], token) + ) + + +def main(): + verbose = sys.argv[1] == "-v" + if verbose: + inputfile = sys.argv[2] + else: + inputfile = sys.argv[1] + with open(inputfile, "r") as input: + t = test_tokenizer.Tokenizer(input.read()+"\n") + for tkn in t.tokens(verbose): + printtoken(*tkn) + +if __name__ == "__main__": + main() diff --git a/python/extractor/tokenizer_generator/tokenizer_template.py b/python/extractor/tokenizer_generator/tokenizer_template.py new file mode 100644 index 00000000000..b4d300667ff --- /dev/null +++ b/python/extractor/tokenizer_generator/tokenizer_template.py @@ -0,0 +1,172 @@ +''' +Lookup table based tokenizer with state popping and pushing capabilities. +The ability to push and pop state is required for handling parenthesised expressions, +indentation, and f-strings. We also use it for handling the different quotation mark types, +but it is not essential for that, merely convenient. + +''' + + + +class Tokenizer(object): + + def __init__(self, text): + self.text = text + self.index = 0 + self.line_start_index = 0 + self.token_start_index = 0 + self.token_start = 1, 0 + self.line = 1 + self.super_state = START_SUPER_STATE + self.state_stack = [] + self.indents = [0] +#ACTIONS-HERE + def tokens(self, debug=False): + text = self.text + cls_table = CLASS_TABLE + id_index = ID_INDEX + id_chunks = ID_CHUNKS + max_id = len(id_index)*256 +#ACTION_TABLE_HERE + state = 0 + try: + if debug: + while True: + c = ord(text[self.index]) + if c < 128: + cls = cls_table[c] + elif c >= max_id: + cls = ERROR_CLASS + else: + b = id_chunks[id_index[c>>8]][(c>>2)&63] + cls = (b>>((c&3)*2))&3 + prev_state = state + print("char = '%s', state=%d, cls=%d" % (text[self.index], state, cls)) + state, transition = action_table[self.super_state[state][cls]] + print ("%s -> %s on %r in %s" % (prev_state, state, text[self.index], TRANSITION_STATE_NAMES[id(self.super_state)])) + if transition: + tkn = transition() + if tkn: + yield tkn + else: + self.index += 1 + else: + while True: + c = ord(text[self.index]) + if c < 128: + cls = cls_table[c] + elif c >= max_id: + cls = ERROR_CLASS + else: + b = id_chunks[id_index[c>>8]][(c>>2)&63] + cls = (b>>((c&3)*2))&3 + state, transition = action_table[self.super_state[state][cls]] + if transition: + tkn = transition() + if tkn: + yield tkn + else: + self.index += 1 + except IndexError as ex: + if self.index != len(text): + #Reraise index error + cls = cls_table[c] + trans = self.super_state[state] + action_index = trans[cls] + action_table[action_index] + # Not raised? Must have been raised in transition function. + raise ex + tkn = self.emit_indent() + while tkn is not None: + yield tkn + tkn = self.emit_indent() + end = self.line, self.index-self.line_start_index + yield ENDMARKER, u"", self.token_start, end + return + + def emit_indent(self): + indent = 0 + index = self.line_start_index + current = self.index + here = self.line, current-self.line_start_index + while index < current: + if self.text[index] == ' ': + indent += 1 + elif self.text[index] == '\t': + indent = (indent+8) & -8 + elif self.text[index] == '\f': + indent = 0 + else: + #Unexpected state. Emit error token + while len(self.indents) > 1: + self.indents.pop() + result = ERRORTOKEN, self.text[self.token_start_index:self.index+1], self.token_start, here + self.token_start = here + self.line_start_index = self.index + return result + index += 1 + if indent == self.indents[-1]: + self.token_start = here + self.token_start_index = self.index + return None + elif indent > self.indents[-1]: + self.indents.append(indent) + start = self.line, 0 + result = INDENT, self.text[self.line_start_index:current], start, here + self.token_start = here + self.token_start_index = current + return result + else: + self.indents.pop() + if indent > self.indents[-1]: + #Illegal indent + result = ILLEGALINDENT, u"", here, here + else: + result = DEDENT, u"", here, here + if indent < self.indents[-1]: + #More dedents to do + self.state_stack.append(self.super_state) + self.super_state = PENDING_DEDENT + self.token_start = here + self.token_start_index = self.index + return result + + +ENCODING_RE = re.compile(br'.*coding[:=]\s*([-\w.]+).*') +NEWLINE_BYTES = b'\n' + +def encoding_from_source(source): + 'Returns encoding of source (bytes), plus source strip of any BOM markers.' + #Check for BOM + if source.startswith(codecs.BOM_UTF8): + return 'utf8', source[len(codecs.BOM_UTF8):] + if source.startswith(codecs.BOM_UTF16_BE): + return 'utf-16be', source[len(codecs.BOM_UTF16_BE):] + if source.startswith(codecs.BOM_UTF16_LE): + return 'utf-16le', source[len(codecs.BOM_UTF16_LE):] + try: + first_new_line = source.find(NEWLINE_BYTES) + first_line = source[:first_new_line] + second_new_line = source.find(NEWLINE_BYTES, first_new_line+1) + second_line = source[first_new_line+1:second_new_line] + match = ENCODING_RE.match(first_line) or ENCODING_RE.match(second_line) + if match: + ascii_encoding = match.groups()[0] + encoding = ascii_encoding.decode("ascii") + # Handle non-standard encodings that are recognised by the interpreter. + if encoding.startswith("utf-8-"): + encoding = "utf-8" + elif encoding == "iso-latin-1": + encoding = "iso-8859-1" + elif encoding.startswith("latin-1-"): + encoding = "iso-8859-1" + elif encoding.startswith("iso-8859-1-"): + encoding = "iso-8859-1" + elif encoding.startswith("iso-latin-1-"): + encoding = "iso-8859-1" + return encoding, source + except Exception as ex: + print(ex) + #Failed to determine encoding -- Just treat as default. + pass + return 'utf-8', source diff --git a/python/extractor/tox.ini b/python/extractor/tox.ini new file mode 100644 index 00000000000..2a8979e1651 --- /dev/null +++ b/python/extractor/tox.ini @@ -0,0 +1,15 @@ +[tox] +envlist = py37, py38, py39, py310, py311, py312 +minversion = 4.11.3 +isolated_build = true + +[testenv] +skip_install = true +allowlist_externals = poetry +commands_pre = + poetry env use -- {env_python} + poetry install +commands = + poetry run pytest tests/ +setenv = + VIRTUALENV_DISCOVERY = pyenv diff --git a/python/extractor/tsg-python/.gitignore b/python/extractor/tsg-python/.gitignore new file mode 100644 index 00000000000..2f7896d1d13 --- /dev/null +++ b/python/extractor/tsg-python/.gitignore @@ -0,0 +1 @@ +target/ diff --git a/python/extractor/tsg-python/BUILD.bazel b/python/extractor/tsg-python/BUILD.bazel new file mode 100644 index 00000000000..8e1425e3f3e --- /dev/null +++ b/python/extractor/tsg-python/BUILD.bazel @@ -0,0 +1,16 @@ +load("@tsg_python_crate_index//:defs.bzl", "aliases", "all_crate_deps") +load("//:common.bzl", "codeql_rust_binary") + +codeql_rust_binary( + name = "tsg-python", + srcs = ["src/main.rs"], + aliases = aliases(), + data = ["python.tsg"], + proc_macro_deps = all_crate_deps( + proc_macro = True, + ), + visibility = ["//visibility:public"], + deps = all_crate_deps( + normal = True, + ) + ["//extractor-python/tsg-python/tree-sitter-python"], +) diff --git a/python/extractor/tsg-python/Cargo.Bazel.lock b/python/extractor/tsg-python/Cargo.Bazel.lock new file mode 100644 index 00000000000..fbbd661c9e4 --- /dev/null +++ b/python/extractor/tsg-python/Cargo.Bazel.lock @@ -0,0 +1,2346 @@ +{ + "checksum": "54f1095f5a2e74da736682bc8d355b3dbce47558983feba04faba84cf3abfaca", + "crates": { + "ahash 0.4.7": { + "name": "ahash", + "version": "0.4.7", + "package_url": "https://github.com/tkaitchuck/ahash", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/ahash/0.4.7/download", + "sha256": "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" + } + }, + "targets": [ + { + "Library": { + "crate_name": "ahash", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "ahash", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2018", + "version": "0.4.7" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "aho-corasick 0.7.18": { + "name": "aho-corasick", + "version": "0.7.18", + "package_url": "https://github.com/BurntSushi/aho-corasick", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/aho-corasick/0.7.18/download", + "sha256": "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" + } + }, + "targets": [ + { + "Library": { + "crate_name": "aho_corasick", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "aho_corasick", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default", + "std" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "memchr 2.4.1", + "target": "memchr" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.7.18" + }, + "license": "Unlicense/MIT", + "license_ids": [ + "MIT", + "Unlicense" + ], + "license_file": null + }, + "ansi_term 0.11.0": { + "name": "ansi_term", + "version": "0.11.0", + "package_url": "https://github.com/ogham/rust-ansi-term", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/ansi_term/0.11.0/download", + "sha256": "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" + } + }, + "targets": [ + { + "Library": { + "crate_name": "ansi_term", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "ansi_term", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [], + "selects": { + "cfg(target_os = \"windows\")": [ + { + "id": "winapi 0.3.9", + "target": "winapi" + } + ] + } + }, + "edition": "2015", + "version": "0.11.0" + }, + "license": "MIT", + "license_ids": [ + "MIT" + ], + "license_file": null + }, + "anyhow 1.0.44": { + "name": "anyhow", + "version": "1.0.44", + "package_url": "https://github.com/dtolnay/anyhow", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/anyhow/1.0.44/download", + "sha256": "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1" + } + }, + "targets": [ + { + "Library": { + "crate_name": "anyhow", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "anyhow", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default", + "std" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "anyhow 1.0.44", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "1.0.44" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "atty 0.2.14": { + "name": "atty", + "version": "0.2.14", + "package_url": "https://github.com/softprops/atty", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/atty/0.2.14/download", + "sha256": "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" + } + }, + "targets": [ + { + "Library": { + "crate_name": "atty", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "atty", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [], + "selects": { + "cfg(target_os = \"hermit\")": [ + { + "id": "hermit-abi 0.1.19", + "target": "hermit_abi" + } + ], + "cfg(unix)": [ + { + "id": "libc 0.2.101", + "target": "libc" + } + ], + "cfg(windows)": [ + { + "id": "winapi 0.3.9", + "target": "winapi" + } + ] + } + }, + "edition": "2015", + "version": "0.2.14" + }, + "license": "MIT", + "license_ids": [ + "MIT" + ], + "license_file": null + }, + "bitflags 1.3.2": { + "name": "bitflags", + "version": "1.3.2", + "package_url": "https://github.com/bitflags/bitflags", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/bitflags/1.3.2/download", + "sha256": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + } + }, + "targets": [ + { + "Library": { + "crate_name": "bitflags", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "bitflags", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default" + ], + "selects": {} + }, + "edition": "2018", + "version": "1.3.2" + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "cc 1.0.70": { + "name": "cc", + "version": "1.0.70", + "package_url": "https://github.com/alexcrichton/cc-rs", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/cc/1.0.70/download", + "sha256": "d26a6ce4b6a484fa3edb70f7efa6fc430fd2b87285fe8b84304fd0936faa0dc0" + } + }, + "targets": [ + { + "Library": { + "crate_name": "cc", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "cc", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2018", + "version": "1.0.70" + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "cfg-if 1.0.0": { + "name": "cfg-if", + "version": "1.0.0", + "package_url": "https://github.com/alexcrichton/cfg-if", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/cfg-if/1.0.0/download", + "sha256": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + } + }, + "targets": [ + { + "Library": { + "crate_name": "cfg_if", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "cfg_if", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2018", + "version": "1.0.0" + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "clap 2.33.3": { + "name": "clap", + "version": "2.33.3", + "package_url": "https://github.com/clap-rs/clap", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/clap/2.33.3/download", + "sha256": "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" + } + }, + "targets": [ + { + "Library": { + "crate_name": "clap", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "clap", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "ansi_term", + "atty", + "color", + "default", + "strsim", + "suggestions", + "vec_map" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "atty 0.2.14", + "target": "atty" + }, + { + "id": "bitflags 1.3.2", + "target": "bitflags" + }, + { + "id": "strsim 0.8.0", + "target": "strsim" + }, + { + "id": "textwrap 0.11.0", + "target": "textwrap" + }, + { + "id": "unicode-width 0.1.8", + "target": "unicode_width" + }, + { + "id": "vec_map 0.8.2", + "target": "vec_map" + } + ], + "selects": { + "cfg(not(windows))": [ + { + "id": "ansi_term 0.11.0", + "target": "ansi_term" + } + ] + } + }, + "edition": "2015", + "version": "2.33.3" + }, + "license": "MIT", + "license_ids": [ + "MIT" + ], + "license_file": null + }, + "hashbrown 0.9.1": { + "name": "hashbrown", + "version": "0.9.1", + "package_url": "https://github.com/rust-lang/hashbrown", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/hashbrown/0.9.1/download", + "sha256": "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" + } + }, + "targets": [ + { + "Library": { + "crate_name": "hashbrown", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "hashbrown", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "ahash", + "inline-more" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "ahash 0.4.7", + "target": "ahash" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.9.1" + }, + "license": "Apache-2.0/MIT", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "hermit-abi 0.1.19": { + "name": "hermit-abi", + "version": "0.1.19", + "package_url": "https://github.com/hermitcore/libhermit-rs", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/hermit-abi/0.1.19/download", + "sha256": "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" + } + }, + "targets": [ + { + "Library": { + "crate_name": "hermit_abi", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "hermit_abi", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "libc 0.2.101", + "target": "libc" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.1.19" + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "itoa 1.0.1": { + "name": "itoa", + "version": "1.0.1", + "package_url": "https://github.com/dtolnay/itoa", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/itoa/1.0.1/download", + "sha256": "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" + } + }, + "targets": [ + { + "Library": { + "crate_name": "itoa", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "itoa", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2018", + "version": "1.0.1" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "libc 0.2.101": { + "name": "libc", + "version": "0.2.101", + "package_url": "https://github.com/rust-lang/libc", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/libc/0.2.101/download", + "sha256": "3cb00336871be5ed2c8ed44b60ae9959dc5b9f08539422ed43f09e34ecaeba21" + } + }, + "targets": [ + { + "Library": { + "crate_name": "libc", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "libc", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "libc 0.2.101", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2015", + "version": "0.2.101" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "log 0.4.14": { + "name": "log", + "version": "0.4.14", + "package_url": "https://github.com/rust-lang/log", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/log/0.4.14/download", + "sha256": "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" + } + }, + "targets": [ + { + "Library": { + "crate_name": "log", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "log", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "cfg-if 1.0.0", + "target": "cfg_if" + }, + { + "id": "log 0.4.14", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2015", + "version": "0.4.14" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "memchr 2.4.1": { + "name": "memchr", + "version": "2.4.1", + "package_url": "https://github.com/BurntSushi/memchr", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/memchr/2.4.1/download", + "sha256": "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" + } + }, + "targets": [ + { + "Library": { + "crate_name": "memchr", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "memchr", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default", + "std" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "memchr 2.4.1", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "2.4.1" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "Unlicense/MIT", + "license_ids": [ + "MIT", + "Unlicense" + ], + "license_file": null + }, + "proc-macro2 1.0.29": { + "name": "proc-macro2", + "version": "1.0.29", + "package_url": "https://github.com/alexcrichton/proc-macro2", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/proc-macro2/1.0.29/download", + "sha256": "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d" + } + }, + "targets": [ + { + "Library": { + "crate_name": "proc_macro2", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "proc_macro2", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default", + "proc-macro" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "proc-macro2 1.0.29", + "target": "build_script_build" + }, + { + "id": "unicode-xid 0.2.2", + "target": "unicode_xid" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "1.0.29" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "quote 1.0.9": { + "name": "quote", + "version": "1.0.9", + "package_url": "https://github.com/dtolnay/quote", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/quote/1.0.9/download", + "sha256": "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" + } + }, + "targets": [ + { + "Library": { + "crate_name": "quote", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "quote", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default", + "proc-macro" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "proc-macro2 1.0.29", + "target": "proc_macro2" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "1.0.9" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "regex 1.5.5": { + "name": "regex", + "version": "1.5.5", + "package_url": "https://github.com/rust-lang/regex", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/regex/1.5.5/download", + "sha256": "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" + } + }, + "targets": [ + { + "Library": { + "crate_name": "regex", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "regex", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "aho-corasick", + "default", + "memchr", + "perf", + "perf-cache", + "perf-dfa", + "perf-inline", + "perf-literal", + "std", + "unicode", + "unicode-age", + "unicode-bool", + "unicode-case", + "unicode-gencat", + "unicode-perl", + "unicode-script", + "unicode-segment" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "aho-corasick 0.7.18", + "target": "aho_corasick" + }, + { + "id": "memchr 2.4.1", + "target": "memchr" + }, + { + "id": "regex-syntax 0.6.25", + "target": "regex_syntax" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "1.5.5" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "regex-syntax 0.6.25": { + "name": "regex-syntax", + "version": "0.6.25", + "package_url": "https://github.com/rust-lang/regex", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/regex-syntax/0.6.25/download", + "sha256": "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" + } + }, + "targets": [ + { + "Library": { + "crate_name": "regex_syntax", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "regex_syntax", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default", + "unicode", + "unicode-age", + "unicode-bool", + "unicode-case", + "unicode-gencat", + "unicode-perl", + "unicode-script", + "unicode-segment" + ], + "selects": {} + }, + "edition": "2018", + "version": "0.6.25" + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "ryu 1.0.9": { + "name": "ryu", + "version": "1.0.9", + "package_url": "https://github.com/dtolnay/ryu", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/ryu/1.0.9/download", + "sha256": "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" + } + }, + "targets": [ + { + "Library": { + "crate_name": "ryu", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "ryu", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2018", + "version": "1.0.9" + }, + "license": "Apache-2.0 OR BSL-1.0", + "license_ids": [ + "Apache-2.0", + "BSL-1.0" + ], + "license_file": null + }, + "serde 1.0.136": { + "name": "serde", + "version": "1.0.136", + "package_url": "https://github.com/serde-rs/serde", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/serde/1.0.136/download", + "sha256": "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" + } + }, + "targets": [ + { + "Library": { + "crate_name": "serde", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "serde", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default", + "std" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "serde 1.0.136", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2015", + "version": "1.0.136" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "serde_json 1.0.79": { + "name": "serde_json", + "version": "1.0.79", + "package_url": "https://github.com/serde-rs/json", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/serde_json/1.0.79/download", + "sha256": "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" + } + }, + "targets": [ + { + "Library": { + "crate_name": "serde_json", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "serde_json", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default", + "std" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "itoa 1.0.1", + "target": "itoa" + }, + { + "id": "ryu 1.0.9", + "target": "ryu" + }, + { + "id": "serde 1.0.136", + "target": "serde" + }, + { + "id": "serde_json 1.0.79", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "1.0.79" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "smallvec 1.6.1": { + "name": "smallvec", + "version": "1.6.1", + "package_url": "https://github.com/servo/rust-smallvec", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/smallvec/1.6.1/download", + "sha256": "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" + } + }, + "targets": [ + { + "Library": { + "crate_name": "smallvec", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "smallvec", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "union" + ], + "selects": {} + }, + "edition": "2018", + "version": "1.6.1" + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "string-interner 0.12.2": { + "name": "string-interner", + "version": "0.12.2", + "package_url": "https://github.com/robbepop/string-interner", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/string-interner/0.12.2/download", + "sha256": "383196d1876517ee6f9f0864d1fc1070331b803335d3c6daaa04bbcccd823c08" + } + }, + "targets": [ + { + "Library": { + "crate_name": "string_interner", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "string_interner", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "backends", + "inline-more", + "std" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "cfg-if 1.0.0", + "target": "cfg_if" + }, + { + "id": "hashbrown 0.9.1", + "target": "hashbrown" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.12.2" + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "strsim 0.8.0": { + "name": "strsim", + "version": "0.8.0", + "package_url": "https://github.com/dguo/strsim-rs", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/strsim/0.8.0/download", + "sha256": "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + } + }, + "targets": [ + { + "Library": { + "crate_name": "strsim", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "strsim", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2015", + "version": "0.8.0" + }, + "license": "MIT", + "license_ids": [ + "MIT" + ], + "license_file": null + }, + "syn 1.0.76": { + "name": "syn", + "version": "1.0.76", + "package_url": "https://github.com/dtolnay/syn", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/syn/1.0.76/download", + "sha256": "c6f107db402c2c2055242dbf4d2af0e69197202e9faacbef9571bbe47f5a1b84" + } + }, + "targets": [ + { + "Library": { + "crate_name": "syn", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "syn", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "clone-impls", + "default", + "derive", + "parsing", + "printing", + "proc-macro", + "quote" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "proc-macro2 1.0.29", + "target": "proc_macro2" + }, + { + "id": "quote 1.0.9", + "target": "quote" + }, + { + "id": "syn 1.0.76", + "target": "build_script_build" + }, + { + "id": "unicode-xid 0.2.2", + "target": "unicode_xid" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "1.0.76" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "textwrap 0.11.0": { + "name": "textwrap", + "version": "0.11.0", + "package_url": "https://github.com/mgeisler/textwrap", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/textwrap/0.11.0/download", + "sha256": "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" + } + }, + "targets": [ + { + "Library": { + "crate_name": "textwrap", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "textwrap", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "unicode-width 0.1.8", + "target": "unicode_width" + } + ], + "selects": {} + }, + "edition": "2015", + "version": "0.11.0" + }, + "license": "MIT", + "license_ids": [ + "MIT" + ], + "license_file": null + }, + "thiserror 1.0.29": { + "name": "thiserror", + "version": "1.0.29", + "package_url": "https://github.com/dtolnay/thiserror", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/thiserror/1.0.29/download", + "sha256": "602eca064b2d83369e2b2f34b09c70b605402801927c65c11071ac911d299b88" + } + }, + "targets": [ + { + "Library": { + "crate_name": "thiserror", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "thiserror", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2018", + "proc_macro_deps": { + "common": [ + { + "id": "thiserror-impl 1.0.29", + "target": "thiserror_impl" + } + ], + "selects": {} + }, + "version": "1.0.29" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "thiserror-impl 1.0.29": { + "name": "thiserror-impl", + "version": "1.0.29", + "package_url": "https://github.com/dtolnay/thiserror", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/thiserror-impl/1.0.29/download", + "sha256": "bad553cc2c78e8de258400763a647e80e6d1b31ee237275d756f6836d204494c" + } + }, + "targets": [ + { + "ProcMacro": { + "crate_name": "thiserror_impl", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "thiserror_impl", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "proc-macro2 1.0.29", + "target": "proc_macro2" + }, + { + "id": "quote 1.0.9", + "target": "quote" + }, + { + "id": "syn 1.0.76", + "target": "syn" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "1.0.29" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "tree-sitter 0.20.4": { + "name": "tree-sitter", + "version": "0.20.4", + "package_url": "https://github.com/tree-sitter/tree-sitter", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/tree-sitter/0.20.4/download", + "sha256": "4e34327f8eac545e3f037382471b2b19367725a242bba7bc45edb9efb49fe39a" + } + }, + "targets": [ + { + "Library": { + "crate_name": "tree_sitter", + "crate_root": "binding_rust/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "binding_rust/build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "tree_sitter", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "regex 1.5.5", + "target": "regex" + }, + { + "id": "tree-sitter 0.20.4", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.20.4" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "cc 1.0.70", + "target": "cc" + } + ], + "selects": {} + } + }, + "license": "MIT", + "license_ids": [ + "MIT" + ], + "license_file": null + }, + "tree-sitter-graph 0.7.0": { + "name": "tree-sitter-graph", + "version": "0.7.0", + "package_url": "https://github.com/tree-sitter/tree-sitter-graph/", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/tree-sitter-graph/0.7.0/download", + "sha256": "639d21e886f581d293de5f5081f09af003c54607ff3fa85efa159b243ba1f97a" + } + }, + "targets": [ + { + "Library": { + "crate_name": "tree_sitter_graph", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "tree_sitter_graph", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "log 0.4.14", + "target": "log" + }, + { + "id": "regex 1.5.5", + "target": "regex" + }, + { + "id": "serde 1.0.136", + "target": "serde" + }, + { + "id": "serde_json 1.0.79", + "target": "serde_json" + }, + { + "id": "smallvec 1.6.1", + "target": "smallvec" + }, + { + "id": "string-interner 0.12.2", + "target": "string_interner" + }, + { + "id": "thiserror 1.0.29", + "target": "thiserror" + }, + { + "id": "tree-sitter 0.20.4", + "target": "tree_sitter" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.7.0" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "tree-sitter-python 0.19.0": { + "name": "tree-sitter-python", + "version": "0.19.0", + "package_url": "https://github.com/tree-sitter/tree-sitter-python", + "repository": null, + "targets": [ + { + "Library": { + "crate_name": "tree_sitter_python", + "crate_root": "bindings/rust/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "bindings/rust/build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "tree_sitter_python", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "tree-sitter 0.20.4", + "target": "tree_sitter" + }, + { + "id": "tree-sitter-python 0.19.0", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.19.0" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "cc 1.0.70", + "target": "cc" + } + ], + "selects": {} + } + }, + "license": "MIT", + "license_ids": [ + "MIT" + ], + "license_file": null + }, + "tsg-python 0.1.0": { + "name": "tsg-python", + "version": "0.1.0", + "package_url": null, + "repository": null, + "targets": [], + "library_target_name": null, + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "anyhow 1.0.44", + "target": "anyhow" + }, + { + "id": "clap 2.33.3", + "target": "clap" + }, + { + "id": "regex 1.5.5", + "target": "regex" + }, + { + "id": "smallvec 1.6.1", + "target": "smallvec" + }, + { + "id": "string-interner 0.12.2", + "target": "string_interner" + }, + { + "id": "thiserror 1.0.29", + "target": "thiserror" + }, + { + "id": "tree-sitter 0.20.4", + "target": "tree_sitter" + }, + { + "id": "tree-sitter-graph 0.7.0", + "target": "tree_sitter_graph" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.1.0" + }, + "license": null, + "license_ids": [], + "license_file": null + }, + "unicode-width 0.1.8": { + "name": "unicode-width", + "version": "0.1.8", + "package_url": "https://github.com/unicode-rs/unicode-width", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/unicode-width/0.1.8/download", + "sha256": "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" + } + }, + "targets": [ + { + "Library": { + "crate_name": "unicode_width", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "unicode_width", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default" + ], + "selects": {} + }, + "edition": "2015", + "version": "0.1.8" + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "unicode-xid 0.2.2": { + "name": "unicode-xid", + "version": "0.2.2", + "package_url": "https://github.com/unicode-rs/unicode-xid", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/unicode-xid/0.2.2/download", + "sha256": "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" + } + }, + "targets": [ + { + "Library": { + "crate_name": "unicode_xid", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "unicode_xid", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default" + ], + "selects": {} + }, + "edition": "2015", + "version": "0.2.2" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "vec_map 0.8.2": { + "name": "vec_map", + "version": "0.8.2", + "package_url": "https://github.com/contain-rs/vec-map", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/vec_map/0.8.2/download", + "sha256": "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + } + }, + "targets": [ + { + "Library": { + "crate_name": "vec_map", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "vec_map", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2015", + "version": "0.8.2" + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "winapi 0.3.9": { + "name": "winapi", + "version": "0.3.9", + "package_url": "https://github.com/retep998/winapi-rs", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/winapi/0.3.9/download", + "sha256": "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" + } + }, + "targets": [ + { + "Library": { + "crate_name": "winapi", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "winapi", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "consoleapi", + "errhandlingapi", + "minwinbase", + "minwindef", + "processenv", + "winbase" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "winapi 0.3.9", + "target": "build_script_build" + } + ], + "selects": { + "i686-pc-windows-gnu": [ + { + "id": "winapi-i686-pc-windows-gnu 0.4.0", + "target": "winapi_i686_pc_windows_gnu" + } + ], + "x86_64-pc-windows-gnu": [ + { + "id": "winapi-x86_64-pc-windows-gnu 0.4.0", + "target": "winapi_x86_64_pc_windows_gnu" + } + ] + } + }, + "edition": "2015", + "version": "0.3.9" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "winapi-i686-pc-windows-gnu 0.4.0": { + "name": "winapi-i686-pc-windows-gnu", + "version": "0.4.0", + "package_url": "https://github.com/retep998/winapi-rs", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/winapi-i686-pc-windows-gnu/0.4.0/download", + "sha256": "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + } + }, + "targets": [ + { + "Library": { + "crate_name": "winapi_i686_pc_windows_gnu", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "winapi_i686_pc_windows_gnu", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "winapi-i686-pc-windows-gnu 0.4.0", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2015", + "version": "0.4.0" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, + "winapi-x86_64-pc-windows-gnu 0.4.0": { + "name": "winapi-x86_64-pc-windows-gnu", + "version": "0.4.0", + "package_url": "https://github.com/retep998/winapi-rs", + "repository": { + "Http": { + "url": "https://crates.io/api/v1/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download", + "sha256": "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + } + }, + "targets": [ + { + "Library": { + "crate_name": "winapi_x86_64_pc_windows_gnu", + "crate_root": "src/lib.rs", + "srcs": [ + "**/*.rs" + ] + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": [ + "**/*.rs" + ] + } + } + ], + "library_target_name": "winapi_x86_64_pc_windows_gnu", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "winapi-x86_64-pc-windows-gnu 0.4.0", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2015", + "version": "0.4.0" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + } + }, + "binary_crates": [], + "workspace_members": { + "tree-sitter-python 0.19.0": "extractor-python/tsg-python/tree-sitter-python", + "tsg-python 0.1.0": "extractor-python/tsg-python" + }, + "conditions": { + "aarch64-apple-darwin": [ + "aarch64-apple-darwin" + ], + "aarch64-apple-ios": [ + "aarch64-apple-ios" + ], + "aarch64-apple-ios-sim": [ + "aarch64-apple-ios-sim" + ], + "aarch64-fuchsia": [ + "aarch64-fuchsia" + ], + "aarch64-linux-android": [ + "aarch64-linux-android" + ], + "aarch64-pc-windows-msvc": [ + "aarch64-pc-windows-msvc" + ], + "aarch64-unknown-linux-gnu": [ + "aarch64-unknown-linux-gnu" + ], + "aarch64-unknown-nixos-gnu": [ + "aarch64-unknown-nixos-gnu" + ], + "aarch64-unknown-nto-qnx710": [ + "aarch64-unknown-nto-qnx710" + ], + "arm-unknown-linux-gnueabi": [ + "arm-unknown-linux-gnueabi" + ], + "armv7-linux-androideabi": [ + "armv7-linux-androideabi" + ], + "armv7-unknown-linux-gnueabi": [ + "armv7-unknown-linux-gnueabi" + ], + "cfg(not(windows))": [ + "aarch64-apple-darwin", + "aarch64-apple-ios", + "aarch64-apple-ios-sim", + "aarch64-fuchsia", + "aarch64-linux-android", + "aarch64-unknown-linux-gnu", + "aarch64-unknown-nixos-gnu", + "aarch64-unknown-nto-qnx710", + "arm-unknown-linux-gnueabi", + "armv7-linux-androideabi", + "armv7-unknown-linux-gnueabi", + "i686-apple-darwin", + "i686-linux-android", + "i686-unknown-freebsd", + "i686-unknown-linux-gnu", + "powerpc-unknown-linux-gnu", + "riscv32imc-unknown-none-elf", + "riscv64gc-unknown-none-elf", + "s390x-unknown-linux-gnu", + "thumbv7em-none-eabi", + "thumbv8m.main-none-eabi", + "wasm32-unknown-unknown", + "wasm32-wasi", + "x86_64-apple-darwin", + "x86_64-apple-ios", + "x86_64-fuchsia", + "x86_64-linux-android", + "x86_64-unknown-freebsd", + "x86_64-unknown-linux-gnu", + "x86_64-unknown-nixos-gnu", + "x86_64-unknown-none" + ], + "cfg(target_os = \"hermit\")": [], + "cfg(target_os = \"windows\")": [ + "aarch64-pc-windows-msvc", + "i686-pc-windows-msvc", + "x86_64-pc-windows-msvc" + ], + "cfg(unix)": [ + "aarch64-apple-darwin", + "aarch64-apple-ios", + "aarch64-apple-ios-sim", + "aarch64-fuchsia", + "aarch64-linux-android", + "aarch64-unknown-linux-gnu", + "aarch64-unknown-nixos-gnu", + "aarch64-unknown-nto-qnx710", + "arm-unknown-linux-gnueabi", + "armv7-linux-androideabi", + "armv7-unknown-linux-gnueabi", + "i686-apple-darwin", + "i686-linux-android", + "i686-unknown-freebsd", + "i686-unknown-linux-gnu", + "powerpc-unknown-linux-gnu", + "s390x-unknown-linux-gnu", + "x86_64-apple-darwin", + "x86_64-apple-ios", + "x86_64-fuchsia", + "x86_64-linux-android", + "x86_64-unknown-freebsd", + "x86_64-unknown-linux-gnu", + "x86_64-unknown-nixos-gnu" + ], + "cfg(windows)": [ + "aarch64-pc-windows-msvc", + "i686-pc-windows-msvc", + "x86_64-pc-windows-msvc" + ], + "i686-apple-darwin": [ + "i686-apple-darwin" + ], + "i686-linux-android": [ + "i686-linux-android" + ], + "i686-pc-windows-gnu": [], + "i686-pc-windows-msvc": [ + "i686-pc-windows-msvc" + ], + "i686-unknown-freebsd": [ + "i686-unknown-freebsd" + ], + "i686-unknown-linux-gnu": [ + "i686-unknown-linux-gnu" + ], + "powerpc-unknown-linux-gnu": [ + "powerpc-unknown-linux-gnu" + ], + "riscv32imc-unknown-none-elf": [ + "riscv32imc-unknown-none-elf" + ], + "riscv64gc-unknown-none-elf": [ + "riscv64gc-unknown-none-elf" + ], + "s390x-unknown-linux-gnu": [ + "s390x-unknown-linux-gnu" + ], + "thumbv7em-none-eabi": [ + "thumbv7em-none-eabi" + ], + "thumbv8m.main-none-eabi": [ + "thumbv8m.main-none-eabi" + ], + "wasm32-unknown-unknown": [ + "wasm32-unknown-unknown" + ], + "wasm32-wasi": [ + "wasm32-wasi" + ], + "x86_64-apple-darwin": [ + "x86_64-apple-darwin" + ], + "x86_64-apple-ios": [ + "x86_64-apple-ios" + ], + "x86_64-fuchsia": [ + "x86_64-fuchsia" + ], + "x86_64-linux-android": [ + "x86_64-linux-android" + ], + "x86_64-pc-windows-gnu": [], + "x86_64-pc-windows-msvc": [ + "x86_64-pc-windows-msvc" + ], + "x86_64-unknown-freebsd": [ + "x86_64-unknown-freebsd" + ], + "x86_64-unknown-linux-gnu": [ + "x86_64-unknown-linux-gnu" + ], + "x86_64-unknown-nixos-gnu": [ + "x86_64-unknown-nixos-gnu" + ], + "x86_64-unknown-none": [ + "x86_64-unknown-none" + ] + }, + "direct_deps": [ + "anyhow 1.0.44", + "cc 1.0.70", + "clap 2.33.3", + "regex 1.5.5", + "smallvec 1.6.1", + "string-interner 0.12.2", + "thiserror 1.0.29", + "tree-sitter 0.20.4", + "tree-sitter-graph 0.7.0" + ], + "direct_dev_deps": [] +} diff --git a/python/extractor/tsg-python/Cargo.lock b/python/extractor/tsg-python/Cargo.lock new file mode 100644 index 00000000000..9ee8840bde1 --- /dev/null +++ b/python/extractor/tsg-python/Cargo.lock @@ -0,0 +1,331 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" + +[[package]] +name = "aho-corasick" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +dependencies = [ + "memchr", +] + +[[package]] +name = "ansi_term" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +dependencies = [ + "winapi", +] + +[[package]] +name = "anyhow" +version = "1.0.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "cc" +version = "1.0.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26a6ce4b6a484fa3edb70f7efa6fc430fd2b87285fe8b84304fd0936faa0dc0" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "clap" +version = "2.33.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" +dependencies = [ + "ansi_term", + "atty", + "bitflags", + "strsim", + "textwrap", + "unicode-width", + "vec_map", +] + +[[package]] +name = "hashbrown" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" +dependencies = [ + "ahash", +] + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "itoa" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" + +[[package]] +name = "libc" +version = "0.2.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cb00336871be5ed2c8ed44b60ae9959dc5b9f08539422ed43f09e34ecaeba21" + +[[package]] +name = "log" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "memchr" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" + +[[package]] +name = "proc-macro2" +version = "1.0.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quote" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "regex" +version = "1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" + +[[package]] +name = "ryu" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" + +[[package]] +name = "serde" +version = "1.0.136" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" + +[[package]] +name = "serde_json" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "smallvec" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" + +[[package]] +name = "string-interner" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "383196d1876517ee6f9f0864d1fc1070331b803335d3c6daaa04bbcccd823c08" +dependencies = [ + "cfg-if", + "hashbrown", +] + +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + +[[package]] +name = "syn" +version = "1.0.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6f107db402c2c2055242dbf4d2af0e69197202e9faacbef9571bbe47f5a1b84" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "thiserror" +version = "1.0.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "602eca064b2d83369e2b2f34b09c70b605402801927c65c11071ac911d299b88" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad553cc2c78e8de258400763a647e80e6d1b31ee237275d756f6836d204494c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tree-sitter" +version = "0.20.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e34327f8eac545e3f037382471b2b19367725a242bba7bc45edb9efb49fe39a" +dependencies = [ + "cc", + "regex", +] + +[[package]] +name = "tree-sitter-graph" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "639d21e886f581d293de5f5081f09af003c54607ff3fa85efa159b243ba1f97a" +dependencies = [ + "log", + "regex", + "serde", + "serde_json", + "smallvec", + "string-interner", + "thiserror", + "tree-sitter", +] + +[[package]] +name = "tree-sitter-python" +version = "0.19.0" +dependencies = [ + "cc", + "tree-sitter", +] + +[[package]] +name = "tsg-python" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "regex", + "smallvec", + "string-interner", + "thiserror", + "tree-sitter", + "tree-sitter-graph", + "tree-sitter-python", +] + +[[package]] +name = "unicode-width" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/python/extractor/tsg-python/Cargo.toml b/python/extractor/tsg-python/Cargo.toml new file mode 100644 index 00000000000..b88adbc42d9 --- /dev/null +++ b/python/extractor/tsg-python/Cargo.toml @@ -0,0 +1,26 @@ +[workspace] + +[package] +name = "tsg-python" +version = "0.1.0" +authors = ["Taus Brock-Nannestad <tausbn@github.com>"] +edition = "2018" + +# When changing/updating these, the `Cargo.Bazel.lock` file has to be regenerated. +# Check out the documentation at https://bazelbuild.github.io/rules_rust/crate_universe.html#repinning--updating-dependencies +# for how to do so. The bazel repository for the tsg-python project is called `tsg_python_crate_index`, +# and instead of calling `bazel sync`, `./build --bazel sync` should be used instead, to always use the correct bazel version. +[dependencies] +anyhow = "1.0" +regex = "1" +smallvec = { version="1.6", features=["union"] } +thiserror = "1.0" +tree-sitter = "0.20.4" +tree-sitter-graph = "0.7.0" +tree-sitter-python = {path = "tree-sitter-python"} +clap = "2.32" + +[dependencies.string-interner] +version = "0.12" +default-features = false +features = ["std", "inline-more", "backends"] diff --git a/python/extractor/tsg-python/LICENSE-APACHE b/python/extractor/tsg-python/LICENSE-APACHE new file mode 100644 index 00000000000..d6456956733 --- /dev/null +++ b/python/extractor/tsg-python/LICENSE-APACHE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/python/extractor/tsg-python/LICENSE-MIT b/python/extractor/tsg-python/LICENSE-MIT new file mode 100644 index 00000000000..1a8706acb11 --- /dev/null +++ b/python/extractor/tsg-python/LICENSE-MIT @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 stack-graphs authors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/python/extractor/tsg-python/README.md b/python/extractor/tsg-python/README.md new file mode 100644 index 00000000000..ee3c25d8643 --- /dev/null +++ b/python/extractor/tsg-python/README.md @@ -0,0 +1,624 @@ +# `tsg-python` + +Run `tree-sitter-graph` queries against Python source files. + +## How to build + +Run `cargo build --release`. The resulting binary can be found in the `target/release` directory. + +## How to invoke + +`tsg-python tsg-file.tsg python-file.py` + +Output is emitted on `stdout`. + +If you're impatient, you can also build and run using `cargo run` followed by the arguments given +above. + +## How to use + +To use `tsg-python`, you must have an appropriate `.tsg` file containing the directions for how to +construct a Python AST from the output of `tree-sitter-python`. + +### A quick primer on `tree-sitter-graph` syntax + +A file consists of a sequence of stanzas. Each stanza consists of a query (using the [tree-sitter +query syntax](https://tree-sitter.github.io/tree-sitter/using-parsers#pattern-matching-with-queries)) and a sequence of nodes and edges to define for each query match in the source file. +Queries will (almost always) include captures like `@foo`, which means any occurrence of `@foo` in +the corresponding stanza will refer to a particular syntax node in the bit that the query matches. + +Stanzas are executed in order, and a stanza is only run when all possible matches have been +exhausted for all preceding stanzas. (Since the syntax tree that is matched against never changes, +execution never jumps back to an earlier stanza.) + +Inside stanzas, scoped variables have the form `@foo.bar` where `@foo` is a capture in the +associated query, and `bar` is an identifier. This should be thought of as a variable that is +"attached" to the `tree-sitter` node that `@foo` refers to. If `@baz` is another reference to the same node as +`@foo` (perhaps even in a different stanza), then `@baz.bar` will be a reference to the _same_ +scoped variable. This permits information to be linked across different stanzas. + +Assigning a value to a scoped variable is done using the syntax `let @foo.bar = some-expr` (`let` +for immutable variables, `var` for mutable variables, which may be mutated using `set`). Note that +scoped variables only exist during the execution of the stack graph, and are not immediately part of +the output graph. + +To actually produce output, we must specify some `node`s or `edge`s and possibly `attr`ibutes +thereof. + +To produce a node, we declare `node @foo.bar` (which is equivalent to `let @foo.bar = (node)`, the +right hand side being a function that creates a new node). In the output, nodes are simply integers. + +To assign an attribute to a node, we write `attr (@foo.bar) identifier = expr`, for some suitable +choice of `identifier` and `expr`. In the output, attributes are given alongside nodes in a `key: +value` notation. + +For edges and their attributes, the syntax is similar: + +`edge @foo.bar -> @baz.quux` + +and + +`attr (@foo.bar -> @baz.quux) identifier = expr`. + +Note that it is an error to declare the same node, edge, (or attribute of either of these) twice. + +### The general scheme: + + +For fields that point to some literal value +```tsg +<some capture involving @nd> +{ + attr (@nd.node) field_name = some_value +} +``` + +For fields that point directly to an AST node: + +```tsg +<some capture involving @parent and @child> +{ + attr (@parent.node) field_name = @child.node +} +``` + +For fields that point to lists of AST nodes: + +```tsg +<some capture involving @parent and @child> +{ + edge @parent.node -> @child.node + attr (@parent.node -> @child.node) field_name = <index of @child in the resulting list> +} +``` + +Scoped variables of the form `@foo.node` are used to tie the AST together, and so it's important +that this is set for nodes that map directly onto `tree-sitter-python` nodes. Thus, for instance +for binary operators, the stanza could look as follows: + +```tsg +(binary_operator + left: (_) @left + right: (_) @right +) @bin +{ + attr (@bin.node) left = @left.node + attr (@bin.node) right = @right.node +} +``` + +Note in particular the `@left.node` and `@right.node` references. In order for the above stanza to +work, these scoped variables _must_ exist and point to suitable graph `node`s. + +In practice, the setting up of all of these scoped variables (and creation of output graph nodes) +will happen at the very top of the `.tsg` file, to ensure that these scoped variables are defined +for the remainder of the file. + +To ease the creation of these variables, we have the `ast-node` convenience function. For binary +operators, it would take the following form: + +```tsg +(binary_operator) @bin +{ + let @bin.node = (ast-node @bin "BinOp") +} +``` +Here, the two arguments are respectively +- a `tree-sitter` node (which is used to set the location of `@bin.node`), and +- a string (which is used to set the "kind" of `@bin.node`) + +In effect, the call + +```tsg + let @bin.node = (ast-node @bin "BinOp") +``` + +is exactly equivalent to the more verbose + +```tsg + node @bin.node ; or equivalently `let @bin.node = (node)` + attr (@bin.node) _location = (location @bin) + attr (@bin.node) _kind = "BinOp" +``` + +As the above suggests, attributes that start with an underscore are interpreted in a special way +when reconstructing the AST. + +### Special attributes + +#### The `_kind` attribute (mandatory) +Should be set to a string consisting of the name of the corresponding Python AST class. This +information will be used to build the AST, and so it is an error if this is left out. + +Generally, this (and `_location`) will be set using the `ast-node` function. + +#### The `_skip_to` attribute (optional) +This is used to indicate that the present graph node should _not_ be turned into an AST node, but that the +graph node contained in this attribute should be used instead. That graph node may _also_ contain a +`_skip_to` field, in which case the entire chain is followed until a node is encountered that does +not have a `_skip_to` field. (Please ensure that there are no cycles of `_skip_to` pointers.) + +Example: + +In `tree-sitter-python`, assignment statements are a form of `expression_statement`, and this node +type also encompasses things like expressions (e.g. `2+2`) appearing at the level of statements. In +the internal Python AST, we need to separate the assignment from such expressions. The assignment should be present as an `Assign` node, but `2+2` should be +wrapped in an `Expr` node. To solve this, we create an `Expr` for each `expression_statement`, and +then explicitly skip this node in the AST if it contains an `assignment`. This is implemented as +follows: +```tsg +(expression_statement (assignment) @inner) @outer +{ + attr (@outer.node) _skip_to = @inner.node +} +``` + +#### The `_location` attribute (optional) +This attribute is used to indicate the location of the corresponding AST node. As with `_kind` it +should be set using the `ast-node` function. + +#### The `_location_start` and `_location_end` attributes (optional) +These attributes are used to indicate the start or end of the location of the AST node. They can be +used for nodes where `_location` has already been set, in which case they override the relevant part +of that location. For an example of this see the worked example on `if` statements below. +#### The `_start_line`, `_start_column`, `_end_line`, and `_end_column` attributes (optional) +These can be used to set the start or end position of an AST node with even greater detail than the +preceding attributes. As with the `_location_start` and `_location_end` attributes, these will +override the values of the corresponding part of the location. + +In general, these attributes should be used sparingly, as they are quite verbose. + +### Built-in functions +#### `(source-text` _`tree-sitter-node`_`)` (built-in) +This function returns the source text of the `tree-sitter` node it receives as an argument. + +Example: + +Extracting the operator from a binary expression: +```tsg +(binary_operator + operator: _ @op +) @bin +{ + attr (@bin.node) op = (source-text @op) +} +``` + +#### `(ast-node` _`tree-sitter-node`_ _`string`_`)` (`tsg-python` only) +Creates a new graph node with the given `_kind` and sets the `_location` attribute to the location +of the given `tree-sitter` node. +#### `(child-index` _`tree-sitter-node`_`)` (built-in) +Returns the index of the given `tree-sitter` node in its parent. +#### `(location` _`tree-sitter-node`_`)` (`tsg-python` only) +Returns the location of the given `tree-sitter` node as a list containing four integers +corresponding to the start row and column, followed by the end row and column. +#### `(location-start` _`tree-sitter-node`_`)` and `(location-end` _`tree-sitter-node`_`)` (`tsg-python` only) +Returns the start or end position (row followed by column) of the given `tree-sitter` node (as a list containing two integers). +#### `start-row`, `start-column`, `end-row`, and `end-column` (built-in) +(All of these take a `tree-sitter-node` as an argument.) + +Returns an integer corresponding to the appropriate part of the location of the given `tree-sitter` node. + +### A worked example: `if` statements + +The way the current parser handles `if` statements means we cannot do a straight mapping from the tree-sitter grammar to the AST. In particular, a block of code such as + +```python +if x: do_x +elif y: do_y +elif z: do_z +else: do_else +``` + +is unrolled into the following form by the current parser: + +```python +if x: do_x +else: + if y: do_y + else: + if z: do_z + else: do_else +``` + +This means we have to synthesise nodes for the inner `if` statements. + +However, this should be straightforward -- we simply have to make sure that `elif_clause`s also +produce the appropriate kind of node, and that everything is linked up correctly. + +For references, here are the productions for `if_statement`, `else_clause` and `elif_clause` in +`tree-sitter-python` + +```javascript + if_statement: $ => seq( + 'if', + field('condition', $.expression), + ':', + field('consequence', $._suite), + repeat(field('alternative', $.elif_clause)), + optional(field('alternative', $.else_clause)) + ), + + elif_clause: $ => seq( + 'elif', + field('condition', $.expression), + ':', + field('consequence', $._suite) + ), + + else_clause: $ => seq( + 'else', + ':', + field('body', $._suite) + ), +``` + +First, we'll set up all of the relevant nodes with corresponding nodes in the AST: + +```tsg + +(if_statement) +@tree_sitter_node +{ + let @tree_sitter_node.node = (ast-node @tree_sitter_node "If") +} +``` + +This ensures that we can reference the `.node` scoped variable on the above nodes. + +(We named the capture `@tree_sitter_node` above to make it more clear, but in general something like +`@if` would be more appropriate.) + +In particular, since we want `elif`s to be turned into nested `if`s, it makes sense to apply the +`If` kind to `elif_clauses` as well: + +```tsg +(elif_clause) @elif +{ + let @elif.node = (ast-node @elif "If") +} +``` +Whenever we refer to a node, we must ensure that it has first been defined, however there is no +need to do this separately for each node. + +Next, for both `if`s and `elif`s, we want to record the `test` and the `body`. The `test` we do as follows: + +```tsg +[ + (if_statement + condition: (_) @test) @if + (elif_clause + condition: (_) @test) @if +] +{ + attr (@if.node) test = @test.node +} +``` +For `body`, in the Python AST this is simply a list of nodes, whereas for the `tree-sitter` parse tree, it +will contain a `block` node. Because there is no Python AST equivalent for `block`, we skip over +this node when linking the `if`-statement to its body: +```tsg +[ + (if_statement + consequence: (block (_) @stmt)) @parent + (elif_clause + consequence: (block (_) @stmt)) @parent +] +{ + edge @parent.node -> @stmt.node + attr (@parent.node -> @stmt.node) body = (child-index @stmt) +} +``` +The above shows how we handle fields containing lists of items: we add an edge from the parent node +to each child node, and put an attribute on that edge. The name of the attribute will be the name of +the field, and the value will be the index of this node among the children of its `tree-sitter` parent. + +Now we can begin unwinding the nesting. First of all, the first `elif` should be the `orelse` of the +initial `if_statement`: + +```tsg +(if_statement + consequence: (_) + . + (elif_clause) @elif +) @if +{ + edge @if.node -> @elif.node + attr (@if.node -> @elif.node) orelse = 0 +} +``` +(The `.` acts as an anchor, forcing its two neighbours to be adjancent in the tree. So in this case, +we get the first `elif` after the body of the `if`) + +Next, whenever we have two adjacent `elif`s, we want the `orelse` of the first one to be the second one: + +```tsg +( + (elif_clause) @elif1 + . + (elif_clause) @elif2 +) +{ + edge @elif1.node -> @elif2.node + attr (@elif1.node -> @elif2.node) orelse = 0 +} +``` + +Finally, the `else` branch of the outermost `if` should be the `orelse` of the _last_ `elif`: + +```tsg +(if_statement + (elif_clause) @elif + . + alternative: (else_clause body: (block (_) @orelse)) +) +{ + edge @elif.node -> @orelse.node + attr (@elif.node -> @orelse.node) orelse = (child-index @orelse) +} +``` + +The above gives us the correct tree structure, but we're still missing a few bits (such as +locations). To capture location information we use the following stanza: +```tsg +[ + (if_statement + condition: (_) + ":" @colon) @if + (elif_clause + condition: (_) + ":" @colon) @if +] +{ + attr (@if.node) _location_end = (location-end @colon) +} +``` +Because `tree-sitter-python` disagrees with the Python AST about the location of the `If` node, we +have to adjust it. We do this by setting the `_location_end` attribute to the end of the `:` token. +(Note that the _start_ of this location was set when we called `ast-node` above. As we don't have to +change this part of the location, we simply leave it as is.) + + + +### Synthesizing nodes +In many cases it will be sufficient to hook up AST nodes to the corresponding `tree-sitter` nodes, +but occasionally we want the tree structure to be different. One example of this would be the +`class` statement. For instance, a class declaration such as + +```python +class Foo(int, object, metaclass=type): + x = 5 +``` + +has a `tree-sitter-python` parse tree that looks like this: + +``` +module [0, 0] - [2, 0] + class_definition [0, 0] - [1, 9] + name: identifier [0, 6] - [0, 9] + superclasses: argument_list [0, 9] - [0, 38] + identifier [0, 10] - [0, 13] + identifier [0, 15] - [0, 21] + keyword_argument [0, 23] - [0, 37] + name: identifier [0, 23] - [0, 32] + value: identifier [0, 33] - [0, 37] + body: block [1, 4] - [1, 9] + expression_statement [1, 4] - [1, 9] + assignment [1, 4] - [1, 9] + left: identifier [1, 4] - [1, 5] + right: integer [1, 8] - [1, 9] +``` + +but the Python AST looks like _this_: + +``` +Module: [1, 0] - [3, 0] + body: [ + Assign: [1, 0] - [1, 39] + targets: [ + Name: [1, 6] - [1, 9] + variable: Variable('Foo', None) + ctx: Store + ] + value: + ClassExpr: [1, 0] - [1, 39] + name: 'Foo' + bases: [ + Name: [1, 10] - [1, 13] + variable: Variable('int', None) + ctx: Load + Name: [1, 15] - [1, 21] + variable: Variable('object', None) + ctx: Load + ] + keywords: [ + keyword: [1, 23] - [1, 37] + arg: 'metaclass' + value: + Name: [1, 33] - [1, 37] + variable: Variable('type', None) + ctx: Load + ] + inner_scope: + Class: [1, 0] - [1, 39] + name: 'Foo' + body: [ + Assign: [2, 4] - [2, 9] + targets: [ + Name: [2, 4] - [2, 5] + variable: Variable('x', None) + ctx: Store + ] + value: + Num: [2, 8] - [2, 9] + n: 5 + text: '5' + ] + ] +``` + +In particular, we unroll the `class` statement into an explicit assignment (which is the top node +for this statement in the AST) of a synthetic `ClassExpr`, which in turn contains a `Class` node +(which holds things like the body of the class). This requires too many nodes to simply reuse what's given to +us by `tree-sitter-python`, and so we must _synthesize_ additional nodes. + +First of all, let us set up the outer node to be an `Assign` node: +```tsg +(class_definition) @class +{ + let @class.node = (ast-node @class "Assign") +} +``` + +Next, we can do most of the work in a single stanza: + +```tsg +(class_definition + name: (identifier) @name + ":" @colon +) @class +{ + + ; To make it clearer that the outer node is an assignment, we create an alias for it. + let @class.assign = @class.node + + ; Synthesized nodes: the left-hand side of the assignment, the class_expr node, and the class + ; node. + + let @class.assign_lhs = (ast-node @name "Name") + let @class.class_expr = (ast-node @class "ClassExpr") + let @class.inner_scope = (ast-node @class "Class") + + edge @class.assign -> @class.assign_lhs + attr (@class.assign -> @class.assign_lhs) targets = 0 + attr (@class.assign) value = @class.class_expr + attr (@class.assign) _location_end = (location-end @colon) + + let class_name = (source-text @name) + + ; The left-hand side of the assignment, a `Name`. + attr (@class.assign_lhs) variable = class_name + attr (@class.assign_lhs) ctx = "store" + + ; The right hand side of the assignment, a `ClassExpr`. + attr (@class.class_expr) name = class_name + attr (@class.class_expr) inner_scope = @class.inner_scope + ; `bases` will be set elsewhere + ; `keywords` will be set elsewhere + attr (@class.class_expr) _location_end = (location-end @colon) + + ; The inner scope of the class_expr, a `Class`. + attr (@class.inner_scope) name = class_name + ; body will be set in a separate stanza. + attr (@class.inner_scope) _location_end = (location-end @colon) + +} +``` + +Let's go over these lines bit by bit. First, we create an alias for the outermost node (which will +become an assignment node) in order to make it clearer that it's an assignment. Next, we create +_new_ nodes for the inner synthesized nodes. Note that we can't assign these to `@class.node` as +that already points to the node that will become the assignment node. Instead, we create new scoped +variables (with suitable names), and assign them nodes (with appropriate kinds and locations using +`ast-node`). +```tsg + ; To make it clearer that the outer node is an assignment, we create an alias for it. + let @class.assign = @class.node + + ; Synthesized nodes: the left-hand side of the assignment, the class_expr node, and the class + ; node. + + let @class.assign_lhs = (ast-node @name "Name") + let @class.class_expr = (ast-node @class "ClassExpr") + let @class.inner_scope = (ast-node @class "Class") +``` + +Next, we set up the outer assignment: +```tsg + edge @class.assign -> @class.assign_lhs + attr (@class.assign -> @class.assign_lhs) targets = 0 + attr (@class.assign) value = @class.class_expr + attr (@class.assign) _location_end = (location-end @colon) +``` + +The remaining nodes all contain a field that refers to the name of the class, so put this in a local +variable for convenience: +```tsg + let class_name = (source-text @name) +``` +We set up the left hand side of the assignment: +```tsg + ; The left-hand side of the assignment, a `Name`. + attr (@class.assign_lhs) variable = class_name + attr (@class.assign_lhs) ctx = "store" +``` +The `ClassExpr`: +```tsg + ; The right hand side of the assignment, a `ClassExpr`. + attr (@class.class_expr) name = class_name + attr (@class.class_expr) inner_scope = @class.inner_scope + ; `bases` will be set elsewhere + ; `keywords` will be set elsewhere + attr (@class.class_expr) _location_end = (location-end @colon) +``` + +The `Class`: +```tsg + ; The inner scope of the class_expr, a `Class`. + attr (@class.inner_scope) name = class_name + ; body will be set elsewhere + attr (@class.inner_scope) _location_end = (location-end @colon) + +``` + +The remaining stanzas take care of setting up the fields that contain lists of nodes, and these +follow the same scheme as before. +```tsg +; Class.body +(class_definition + body: (block (_) @stmt) +) @class +{ + edge @class.inner_scope -> @stmt.node + attr (@class.inner_scope -> @stmt.node) body = (child-index @stmt) +} + +; Class.bases +(class_definition + superclasses: (argument_list (identifier) @arg) +) @class +{ + edge @class.class_expr -> @arg.node + attr (@class.class_expr -> @arg.node) bases = (child-index @arg) + attr (@arg.node) ctx = "load" +} + +; Class.keywords +(class_definition + superclasses: (argument_list (keyword_argument) @arg) +) @class +{ + edge @class.class_expr -> @arg.node + attr (@class.class_expr -> @arg.node) keywords = (child-index @arg) +} +``` diff --git a/python/extractor/tsg-python/python.tsg b/python/extractor/tsg-python/python.tsg new file mode 100644 index 00000000000..e185bbbae79 --- /dev/null +++ b/python/extractor/tsg-python/python.tsg @@ -0,0 +1,3472 @@ +;;;;;; Part 1: Definining ~all~ most of the nodes +; This section contains all of the "simple" definitions. All of the places where a single +; tree-sitter node corresponds to an AST node. + +; Create the module node first, so it always appears first in the output. +(module) @mod +{ let @mod.node = (ast-node @mod "Module") } + +(_) @anynode +{ + scan (node-type @anynode) { + "^(ERROR|MISSING)$" { + let @anynode.node = (ast-node @anynode "SyntaxErrorNode") + attr (@anynode.node) source = (source-text @anynode) + } + } +} + +(parenthesized_expression) @nd +{ let @nd.node = (ast-node @nd "Expr") } + +(assignment !type) @assign +{ let @assign.node = (ast-node @assign "Assign") } + +[ (expression_list) (tuple) (tuple_pattern) (pattern_list) ] @tuple +{ let @tuple.node = (ast-node @tuple "Tuple") } + +(call) @call { let @call.node = (ast-node @call "Call") } + +(for_statement) @for +{ let @for.node = (ast-node @for "For") } + +[ (if_statement) (elif_clause) ] @if +{ let @if.node = (ast-node @if "If") } + +(continue_statement) @continue +{ let @continue.node = (ast-node @continue "Continue") } + +(break_statement) @break +{ let @break.node = (ast-node @break "Break") } + +(pass_statement) @pass +{ let @pass.node = (ast-node @pass "Pass") } + +(assert_statement) @assert +{ let @assert.node = (ast-node @assert "Assert") } + +(assignment type: (_)) @assign +{ let @assign.node = (ast-node @assign "AnnAssign") } + +(augmented_assignment) @assign +{ let @assign.node = (ast-node @assign "AugAssign") } + +(delete_statement) @del +{ let @del.node = (ast-node @del "Delete") } + +(global_statement) @global +{ let @global.node = (ast-node @global "Global") } + +(nonlocal_statement) @nonlocal +{ let @nonlocal.node = (ast-node @nonlocal "Nonlocal") } + +[(import_statement) (import_from_statement name: (_))] @import +{ let @import.node = (ast-node @import "Import") } + +(import_from_statement (wildcard_import)) @importstar +{ let @importstar.node = (ast-node @importstar "ImportFrom") } + +(raise_statement) @raise +{ let @raise.node = (ast-node @raise "Raise") } + +(binary_operator) @binop +{ let @binop.node = (ast-node @binop "BinOp") } + +(keyword_argument) @kwarg +{ let @kwarg.node = (ast-node @kwarg "keyword") } + +[(function_definition) (class_definition) (decorated_definition)] @def +{ let @def.node = (ast-node @def "Assign") } + +(decorator) @decorator +{ let @decorator.node = (ast-node @decorator "Call") } + +(expression_statement) @stmt +{ let @stmt.node = (ast-node @stmt "Expr") } + +[ (integer) (float) ] @num +{ let @num.node = (ast-node @num "Num") } + +(identifier) @name +{ let @name.node = (ast-node @name "Name") } + +(list) @list +{ let @list.node = (ast-node @list "List") } + +[(list_splat) (list_splat_pattern)] @starred +{ let @starred.node = (ast-node @starred "Starred") } + +(comment) @comment +{ let @comment.node = (ast-node @comment "Comment") } + +[ + (future_import_statement name: (_) @alias) + (import_from_statement name: (_) @alias) + (import_statement name: (_) @alias) +] +{ let @alias.node = (ast-node @alias "alias") } + +; A string _without_ interpolations is just a `Str`, _except_ if it's inside a string +; concatenation, in which case it's a `StringPart`. +(string !interpolation) @str +{ + var str_class = "Str" + if (instance-of (get-parent @str) "concatenated_string") { + set str_class = "StringPart" + } + let @str.node = (ast-node @str str_class) +} + +(string interpolation: (_)) @fstring +{ let @fstring.node = (ast-node @fstring "JoinedStr") } + + +(string string_content: (_) @part) +{ let @part.node = (ast-node @part "StringPart") } + +; A string concatenation that contains no interpolated expressions is just a `Str` (and its children +; will be `StringPart`s). A string concatenation that contains interpolated expressions is a +; `JoinedStr`, however. +(concatenated_string + (string interpolation: (_))* @interpolations +) @string +{ + var string_class = "Str" + ; Check if there are any interpolations in the string. + ; We cannot use an optional match in the above query, since it could match several times, + ; and subsequent definitions of `@string.node` would then fail. + for _ in @interpolations { + set string_class = "JoinedStr" + } + let @string.node = (ast-node @string string_class) +} + + +(string interpolation: (_)) @fstring +{ + if (not (instance-of (get-parent @fstring) "concatenated_string")) { + attr (@fstring.node) _fixup = #true + } +} + +(pair) @kvpair +{ let @kvpair.node = (ast-node @kvpair "KeyValuePair") } + +(dictionary) @dict +{ let @dict.node = (ast-node @dict "Dict") } + +(dictionary_splat) @dictunpacking +{ let @dictunpacking.node = (ast-node @dictunpacking "DictUnpacking") } + +(set) @set +{ let @set.node = (ast-node @set "Set") } + +(boolean_operator) @boolop +{ let @boolop.node = (ast-node @boolop "BoolOp") } + +(comparison_operator) @compop +{ let @compop.node = (ast-node @compop "Compare") } + +[ (unary_operator) (not_operator) ] @unaryop +{ let @unaryop.node = (ast-node @unaryop "UnaryOp") } + +(exec_statement) @exec +{ let @exec.node = (ast-node @exec "Exec") } + +(print_statement) @print +{ let @print.node = (ast-node @print "Print") } + +(return_statement) @return +{ let @return.node = (ast-node @return "Return") } + +(yield . "from"? @from) @yield +{ + var yield_node = "Yield" + if some @from { + set yield_node = "YieldFrom" + } + let @yield.node = (ast-node @yield yield_node) +} + +(ellipsis) @ellipsis +{ let @ellipsis.node = (ast-node @ellipsis "Ellipsis") } + +(await) @await +{ let @await.node = (ast-node @await "Await") } + +(try_statement) @try +{ let @try.node = (ast-node @try "Try") } + +(except_clause) @except +{ let @except.node = (ast-node @except "ExceptStmt") } + +(except_group_clause) @except +{ let @except.node = (ast-node @except "ExceptGroupStmt") } + +(named_expression) @assignexpr +{ let @assignexpr.node = (ast-node @assignexpr "AssignExpr") } + +(conditional_expression) @ifexp +{ let @ifexp.node = (ast-node @ifexp "IfExp") } + +(subscript) @subscript +{ let @subscript.node = (ast-node @subscript "Subscript") } + +(slice) @slice +{ let @slice.node = (ast-node @slice "Slice") } + +(attribute) @attribute +{ let @attribute.node = (ast-node @attribute "Attribute") } + +(while_statement) @while +{ let @while.node = (ast-node @while "While") } + +(generator_expression) @generatorexp +{ let @generatorexp.node = (ast-node @generatorexp "GeneratorExp") } + +(for_in_clause) @for +{ let @for.node = (ast-node @for "For") } + +(if_clause) @if +{ let @if.node = (ast-node @if "If") } + +(list_comprehension) @listcomp +{ let @listcomp.node = (ast-node @listcomp "ListComp") } + +(set_comprehension) @setcomp +{ let @setcomp.node = (ast-node @setcomp "SetComp") } + +(dictionary_comprehension) @dictcomp +{ let @dictcomp.node = (ast-node @dictcomp "DictComp") } + +[ (with_statement) (with_item)] @with +{ let @with.node = (ast-node @with "With") } + +(match_statement) @match +{ let @match.node = (ast-node @match "Match") } + +; Do not create an AST node for 'cases', we just wire up the children instead. + +(case_block) @case +{ let @case.node = (ast-node @case "Case") } + +(match_as_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchAsPattern") } + +(match_or_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchOrPattern") } + +(match_literal_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchLiteralPattern") } + +(match_capture_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchCapturePattern") } + +(match_wildcard_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchWildcardPattern") } + +(match_value_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchValuePattern") } + +(match_group_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchGroupPattern") } + +(match_sequence_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchSequencePattern") } + +(match_star_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchStarPattern") } + +(match_mapping_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchMappingPattern") } + +(match_double_star_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchDoubleStarPattern") } + +(match_key_value_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchKeyValuePattern") } + +(match_class_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchClassPattern") } + +; Do not create AST nodes for 'only_positionals', 'only_keywords', +; 'partly_positionals', and 'partly_keywords'. We just wire up the children instead. + +(match_keyword_pattern) @pattern +{ let @pattern.node = (ast-node @pattern "MatchKeywordPattern") } + +(guard) @guard +{ let @guard.node = (ast-node @guard "Guard") } + +[(parameters) (lambda_parameters)] @params +{ let @params.node = (ast-node @params "arguments") } + +[(false) (true) (none)] @const +{ let @const.node = (ast-node @const "Name") } + +(lambda) @lambda +{ let @lambda.node = (ast-node @lambda "Lambda") } + +(future_import_statement) @import +{ let @import.node = (ast-node @import "Import") } + +(typevar_parameter) @typevar +{ let @typevar.node = (ast-node @typevar "TypeVar") } + +(typevartuple_parameter) @typevartuple +{ let @typevartuple.node = (ast-node @typevartuple "TypeVarTuple") } + +(paramspec_parameter) @paramspec +{ let @paramspec.node = (ast-node @paramspec "ParamSpec") } + +(type_alias_statement) @typealias +{ let @typealias.node = (ast-node @typealias "TypeAlias") } + +;;;;;; End of part 1. + +;;;;;; Part 2: The awkward bunch. + +;;;;;; Workarounds for node locations +; These are (hopefully temporary) workarounds for the nodes for which the default start and end does +; not agree with what our internal AST provides. +; Once the new parser is in place, we can consider getting rid of these workarounds. + + +;;; If +; End position is set to the end of the `:` after the condition. +[ + (if_statement + condition: (_) + . + ":" @colon) @if + (elif_clause + condition: (_) + . + ":" @colon) @if +] +{ + attr (@if.node) _location_end = (location-end @colon) +} + +;;; For +; Same as with `if`, we must include the `:` in the position. +(for_statement + right: (_) + . + ":" @colon +) @for +{ + attr (@for.node) _location_end = (location-end @colon) +} + +;;; While +; Same as with `if`, we must include the `:` in the position. +(while_statement + condition: (_) + . + ":" @colon +) @while +{ + attr (@while.node) _location_end = (location-end @colon) +} + +;;; Tuples +; In the Python AST tuple start and end positions are set to the start and end of the first and last +; elements. In `tree-sitter-python`, the parentheses are included. +[ + (tuple . (comment)* . element: (_) @first) + (tuple_pattern . (comment)* . element: (_) @first) +] @tuple +{ + attr (@tuple.node) _location_start = (location-start @first) +} + +[ + (tuple !trailing_comma element: (_) @last . (comment)* . ")" .) + (tuple trailing_comma: _ @last) + (tuple_pattern element: (_) @last .) +] @tuple +{ + + attr (@tuple.node) _location_end = (location-end @last) +} + +;;; Try + +(try_statement ":" @colon) @try +{ attr (@try.node) _location_end = (location-end @colon) } + +(except_clause ":" @colon) @except +{ attr (@except.node) _location_end = (location-end @colon) } + +;;; GeneratorExp + +(generator_expression . "(" . (comment)* . (_) @start (_) @end . (comment)* . ")" .) @generatorexp +{ + attr (@generatorexp.node) _location_start = (location-start @start) + attr (@generatorexp.node) _location_end = (location-end @end) +} + +(if_clause (expression) @expr) @if +{ + attr (@if.node) _location_start = (location-start @expr) + attr (@if.node) _location_end = (location-end @expr) +} + +(generator_expression . "(" . (comment)* . (_) @start (for_in_clause) @child (_) @end . (comment)* . ")" .) @genexpr +{ + attr (@child.node) _location_start = (location-start @start) + attr (@child.node) _location_end = (location-end @end) +} + +(generator_expression . "(" . (comment)* . (_) @start (for_in_clause) @end . (comment)* . ")" .) @genexpr +{ + attr (@end.node) _location_start = (location-start @start) + attr (@end.node) _location_end = (location-end @end) +} + +(list_comprehension (for_in_clause) @child) @genexpr +{ + attr (@child.node) _location_start = (location-start @genexpr) + attr (@child.node) _location_end = (location-end @genexpr) +} + +(set_comprehension (for_in_clause) @child) @genexpr +{ + attr (@child.node) _location_start = (location-start @genexpr) + attr (@child.node) _location_end = (location-end @genexpr) +} + +(dictionary_comprehension (for_in_clause) @child) @genexpr +{ + attr (@child.node) _location_start = (location-start @genexpr) + attr (@child.node) _location_end = (location-end @genexpr) +} + +;;; With + +(with_statement + "with" @start + (with_clause . (with_item) @first) + ":" @end +) +{ + attr (@first.node) _location_start = (location-start @start) + attr (@first.node) _location_end = (location-end @end) +} + +;;;;;; End of workarounds + +;;;;;; End of part 2 + +;;;;;; Part 3: All of the simple nodes. + +;;;;;; Module + +; Nodes with a `body` field containing statements. +(module (_) @stmt) @parent +{ + edge @parent.node -> @stmt.node + attr (@parent.node -> @stmt.node) body = (named-child-index @stmt) +} + +;;;;;; Comments + +(comment) @comment +{ + attr (@comment.node) text = (source-text @comment) +} + +;;;;;; Expressions + +(parenthesized_expression + inner: (_) @inner +) @outer +{ + attr (@outer.node) _skip_to = @inner.node + attr (@inner.node) parenthesised = #true +} + +(keyword_argument + name: (_) @name + value: (_) @value +) @kwarg +{ + attr (@kwarg.node) arg = (source-text @name) + attr (@kwarg.node) value = @value.node +} + +;;;;;; Num + +[ (integer) (float) ] @num +{ + ; As we must support a large variety of number literals, we simply forward the source string + ; representation to the Python AST reconstruction. + let source = (source-text @num) + attr (@num.node) n = source + attr (@num.node) text = source +} + +;;;;;; End of Num + +;;;;;; Delete + +(delete_statement + target: (expression_list + element: (_) @target + ) +) @del +{ + edge @del.node -> @target.node + attr (@del.node -> @target.node) targets = (named-child-index @target) +} + +(delete_statement target: (_) @target) @del +{ + attr (@target.node) ctx = "del" +} + +(delete_statement [(identifier) (subscript) (attribute)] @id) @del +{ + edge @del.node -> @id.node + attr (@del.node -> @id.node) targets = 0 +} + +;;;;;; Name + +[(identifier) (false) (true) (none)] @id +{ + attr (@id.node) variable = (source-text @id) +} + +;;;;;; End of Name + +;;;;;; Arguments +[ + (keyword_argument value: (_) @id) + (argument_list element: (_) @id) +] +{ + attr (@id.node) ctx = "load" +} + +[ + (keyword_argument name: (_) @id) +] +{ + attr (@id.node) ctx = "store" +} + +;;;;;; End of Arguments + +;;;;;; BinOp + +(binary_operator + left: (_) @left + operator: _ @op + right: (_) @right +) @bin +{ + attr (@bin.node) left = @left.node + attr (@bin.node) right = @right.node + attr (@bin.node) op = (source-text @op) + attr (@left.node) ctx = "load" + attr (@right.node) ctx = "load" +} + +;;;;;; End of BinOp + +;;;;;; If + +; If.test +[ + (if_statement + condition: (_) @test) @if + (elif_clause + condition: (_) @test) @if +] +{ + attr (@if.node) test = @test.node + attr (@test.node) ctx = "load" +} + +; If.orelse - first `elif` clause +(if_statement + consequence: (_) + . (comment)* . + (elif_clause) @elif +) @if +{ + edge @if.node -> @elif.node + attr (@if.node -> @elif.node) orelse = 0 +} + +; If.orelse - link up adjacent `elif` clauses +( + (elif_clause) @elif1 + . (comment)* . + (elif_clause) @elif2 +) +{ + edge @elif1.node -> @elif2.node + attr (@elif1.node -> @elif2.node) orelse = 0 +} + +; If.orelse - match outer `else` up with last `elif` clause (i.e. innermost `if`) +(if_statement + (elif_clause) @elif . (comment)* . + alternative: (else_clause body: (block (_) @orelse)) +) +{ + edge @elif.node -> @orelse.node + attr (@elif.node -> @orelse.node) orelse = (named-child-index @orelse) +} + +; If.orelse - when there are no `elif` clauses. +(if_statement + consequence: (_) + . (comment)* . + alternative: (else_clause body: (block (_) @orelse)) +) @if +{ + edge @if.node -> @orelse.node + attr (@if.node -> @orelse.node) orelse = (named-child-index @orelse) +} + +; If.body + +[ + (if_statement + consequence: (block (_) @stmt)) @parent + (elif_clause + consequence: (block (_) @stmt)) @parent +] +{ + edge @parent.node -> @stmt.node + attr (@parent.node -> @stmt.node) body = (named-child-index @stmt) +} + +;;;;;; end of If + +;;;;;; For statements + +(for_statement + left: (_) @left + right: (_) @right +) @for +{ + attr (@for.node) target = @left.node + attr (@left.node) ctx = "store" + attr (@for.node) iter = @right.node + attr (@right.node) ctx = "load" +} + +(for_statement + body: (block (_) @body) +) @for +{ + edge @for.node -> @body.node + attr (@for.node -> @body.node) body = (named-child-index @body) +} + +(for_statement + alternative: (else_clause body: (block (_) @orelse)) +) @for +{ + edge @for.node -> @orelse.node + attr (@for.node -> @orelse.node) orelse = (named-child-index @orelse) +} + +(for_statement "async" "for" @for_keyword) @for +{ + attr (@for.node) is_async = #true + attr (@for.node) _location_start = (location-start @for_keyword) +} + +;;;;;; end of For + +;;;;;; Call expressions (`a(b, c, *d, **e)`) + +(call function: (_) @func) @call +{ + attr (@call.node) func = @func.node + attr (@func.node) ctx = "load" +} + +; Handle non-keyword arguments +(call arguments: (argument_list element: (_) @arg)) @call +{ + if (not (or + (instance-of @arg "keyword_argument") + (instance-of @arg "dictionary_splat"))) { + edge @call.node -> @arg.node + attr (@call.node -> @arg.node) positional_args = (named-child-index @arg) + } +} + +(call arguments: (argument_list element: (keyword_argument) @arg)) @call +{ + edge @call.node -> @arg.node + attr (@call.node -> @arg.node) named_args = (named-child-index @arg) +} + +(call arguments: (argument_list element: (dictionary_splat) @arg)) @call +{ + edge @call.node -> @arg.node + attr (@call.node -> @arg.node) named_args = (named-child-index @arg) +} + +(call arguments: (generator_expression) @gen) @call +{ + edge @call.node -> @gen.node + attr (@call.node -> @gen.node) positional_args = 0 +} + + +;;;;;; end of Call (`a(b, c, *d, **e)`) + + +;;;;;; End of part 3 + +;;;;;; Part 4: All of the complicated bits (e.g. nodes that need additional synthesis) + + +;;;;;; ListComp (`[a for b in c if d]`) +; See GeneratorExp for details. + +(list_comprehension) @genexpr +{ + ; Synthesize the `genexpr` function + let @genexpr.fun = (ast-node @genexpr "Function") + attr (@genexpr.node) function = @genexpr.fun + attr (@genexpr.fun) name = "listcomp" + + ; Synthesize the `.0` parameter + let @genexpr.arg = (ast-node @genexpr "Name") + attr (@genexpr.arg) variable = ".0" + attr (@genexpr.arg) ctx = "param" + + edge @genexpr.fun -> @genexpr.arg + attr (@genexpr.fun -> @genexpr.arg) args = 0 + attr (@genexpr.fun) kwonlyargs = #null + attr (@genexpr.fun) kwarg = #null + + ; Synthesize the use of `.0` in the outermost `for`. This has a different context than the parameter + ; ("param" vs. "load") hence we must create another node. + let @genexpr.arg_use = (ast-node @genexpr "Name") + attr (@genexpr.arg_use) variable = ".0" + attr (@genexpr.arg_use) ctx = "load" +} + +;;;;;; End of ListComp (`[a for b in c if d]`) + +;;;;;; SetComp (`{a for b in c if d}`) +; See GeneratorExp for details. + +(set_comprehension) @genexpr +{ + ; Synthesize the `genexpr` function + let @genexpr.fun = (ast-node @genexpr "Function") + attr (@genexpr.node) function = @genexpr.fun + attr (@genexpr.fun) name = "setcomp" + + ; Synthesize the `.0` parameter + let @genexpr.arg = (ast-node @genexpr "Name") + attr (@genexpr.arg) variable = ".0" + attr (@genexpr.arg) ctx = "param" + + edge @genexpr.fun -> @genexpr.arg + attr (@genexpr.fun -> @genexpr.arg) args = 0 + attr (@genexpr.fun) kwonlyargs = #null + attr (@genexpr.fun) kwarg = #null + + ; Synthesize the use of `.0` in the outermost `for`. This has a different context than the parameter + ; ("param" vs. "load") hence we must create another node. + let @genexpr.arg_use = (ast-node @genexpr "Name") + attr (@genexpr.arg_use) variable = ".0" + attr (@genexpr.arg_use) ctx = "load" +} + + +;;;;;; End of SetComp (`{a for b in c if d}`) + +;;;;;; DictComp (`{a: b for c in d if e}`) +; See GeneratorExp for details. + +(dictionary_comprehension + body: (pair + key: (_) @key + value: (_) @value + ) +) @genexpr +{ + ; Synthesize the `genexpr` function + let @genexpr.fun = (ast-node @genexpr "Function") + attr (@genexpr.node) function = @genexpr.fun + attr (@genexpr.fun) name = "dictcomp" + + ; Synthesize the `.0` parameter + let @genexpr.arg = (ast-node @genexpr "Name") + attr (@genexpr.arg) variable = ".0" + attr (@genexpr.arg) ctx = "param" + + edge @genexpr.fun -> @genexpr.arg + attr (@genexpr.fun -> @genexpr.arg) args = 0 + attr (@genexpr.fun) kwonlyargs = #null + attr (@genexpr.fun) kwarg = #null + + ; Synthesize the use of `.0` in the innermost `yield`. This has a different context than the parameter + ; ("param" vs. "load") hence we must create another node. + let @genexpr.arg_use = (ast-node @genexpr "Name") + attr (@genexpr.arg_use) variable = ".0" + attr (@genexpr.arg_use) ctx = "load" +} + +;;;;;; End of DictComp (`{a: b for c in d if e}`) + +;;;;;; GeneratorExp (`(a for b in c if d)`) +; The big one. This one will require quite a bit of setup. +; +; First of all, we need to explain what the old parser does to generator expressions. +; +; The following generator expression +; +; (a +; for b in c +; if d +; if e +; for f in g +; if h +; if i +; ) +; +; becomes +; +; def genexpr(.0): +; for b in .0: +; if e: +; if d: +; for f in g: +; if i: +; if h: +; yield a +; +; where `.0` is a (very oddly named) variable. +; +; Note in particular the reversing of the `if`s, the way `c` is replaced with `.0`, and the way +; `a` is used in the innermost `yield`. + +; First of all, we need to set up the generated function and its parameter. These both copy the location +; information for the entire generator expression (yes, it is a wide parameter!) and so we must recreate the logic for +; setting this location information correctly. + +(generator_expression . "(" . (comment)* . (_) @start (_) @end . (comment)* . ")" .) @genexpr +{ + ; Synthesize the `genexpr` function + let @genexpr.fun = (ast-node @genexpr "Function") + attr (@genexpr.fun) _location_start = (location-start @start) + attr (@genexpr.fun) _location_end = (location-end @end) + attr (@genexpr.node) function = @genexpr.fun + attr (@genexpr.fun) name = "genexpr" + + ; Synthesize the `.0` parameter + let @genexpr.arg = (ast-node @genexpr "Name") + attr (@genexpr.arg) _location_start = (location-start @start) + attr (@genexpr.arg) _location_end = (location-end @end) + attr (@genexpr.arg) variable = ".0" + attr (@genexpr.arg) ctx = "param" + + edge @genexpr.fun -> @genexpr.arg + attr (@genexpr.fun -> @genexpr.arg) args = 0 + attr (@genexpr.fun) kwonlyargs = #null + attr (@genexpr.fun) kwarg = #null + + ; Default to true, but we'll set it to false if we're inside a call + var genexpr_parenthesised = #true + + if (instance-of (get-parent @genexpr) "call") { + set genexpr_parenthesised = #null + } + attr (@genexpr.node) parenthesised = genexpr_parenthesised + + ; Synthesize the use of `.0` in the outermost `for`. This has a different context than the parameter + ; ("param" vs. "load") hence we must create another node. + let @genexpr.arg_use = (ast-node @genexpr "Name") + attr (@genexpr.arg_use) _location_start = (location-start @start) + attr (@genexpr.arg_use) _location_end = (location-end @end) + attr (@genexpr.arg_use) variable = ".0" + attr (@genexpr.arg_use) ctx = "load" +} + +; Link up the outermost `for` +[ + (generator_expression + body: (_) . (comment)* . + (for_in_clause + left: (_) @target + right: (_) @iterable + ) @forin + ) @genexpr + (list_comprehension + body: (_) . (comment)* . + (for_in_clause + left: (_) @target + right: (_) @iterable + ) @forin + ) @genexpr + (set_comprehension + body: (_) . (comment)* . + (for_in_clause + left: (_) @target + right: (_) @iterable + ) @forin + ) @genexpr + (dictionary_comprehension + body: (_) . (comment)* . + (for_in_clause + left: (_) @target + right: (_) @iterable + ) @forin + ) @genexpr +] +{ + attr (@genexpr.node) iterable = @iterable.node + attr (@iterable.node) ctx = "load" + edge @genexpr.fun -> @forin.node + attr (@genexpr.fun -> @forin.node) body = 0 + + attr (@forin.node) target = @target.node + attr (@target.node) ctx = "store" + attr (@forin.node) iter = @genexpr.arg_use +} + +; Set up all subsequent `for ... in ...` +[ + (generator_expression + body: (_) + [(for_in_clause) (if_clause)] + (for_in_clause left: (_) @target right: (_) @iter) @forin + ) + (list_comprehension + body: (_) + [(for_in_clause) (if_clause)] + (for_in_clause left: (_) @target right: (_) @iter) @forin + ) + (set_comprehension + body: (_) + [(for_in_clause) (if_clause)] + (for_in_clause left: (_) @target right: (_) @iter) @forin + ) + (dictionary_comprehension + body: (_) + [(for_in_clause) (if_clause)] + (for_in_clause left: (_) @target right: (_) @iter) @forin + ) +] +{ + attr (@forin.node) target = @target.node + attr (@target.node) ctx = "store" + attr (@forin.node) iter = @iter.node + attr (@iter.node) ctx = "load" +} + +; Set up each `if ...` +(if_clause (expression) @test) @if +{ + attr (@if.node) test = @test.node + attr (@test.node) ctx = "load" +} + +; Link adjacent `for` clauses together +(_ + (for_in_clause) @forin1 + . (comment)* . + (for_in_clause) @forin2 +) +{ + edge @forin1.node -> @forin2.node + attr (@forin1.node -> @forin2.node) body = 0 +} + +; For the first `if` clause after a `for` clause, record both the `for` and `if` clauses in variables that we +; will propagate along. That way, when we get to the last `if` clause, we can link it up with the `for` +; clause, and we can link up the _first_ `if` clause with whatever follows the last `if` clause. +(_ + (for_in_clause) @forin + . (comment)* . + (if_clause) @if +) +{ + let @if.for = @forin.node + let @if.first_if = @if.node +} + +; Link up adjacent `if` clauses (note the reversed order!) and propagate the `for` and `first_if` values. +(_ + (if_clause) @if1 + . (comment)* . + (if_clause) @if2 +) +{ + edge @if2.node -> @if1.node + attr (@if2.node -> @if1.node) body = 0 + let @if2.for = @if1.for + let @if2.first_if = @if1.first_if +} + +; After the last `if` in a chain, we hook it up as the body of its associated `for`, and hook up the _first_ +; `if` as the one that has the following `for` as its body. +; The case where there is no `for` following the last `if` is handled later. +(_ + (if_clause) @if + . (comment)* . + (for_in_clause) @forin +) +{ + edge @if.for -> @if.node + attr (@if.for -> @if.node) body = 0 + edge @if.first_if -> @forin.node + attr (@if.first_if -> @forin.node) body = 0 +} + +; For everything except dictionary comprehensions, the innermost expression is just the `body` of the +; comprehension. +[ + (generator_expression body: (_) @body) @genexpr + (list_comprehension body: (_) @body) @genexpr + (set_comprehension body: (_) @body) @genexpr +] +{ + let @genexpr.result = @body.node +} + +; For dict comprehensions, we build an explicit tuple using the key and value pair. +(dictionary_comprehension + body: (pair + key: (_) @key + value: (_) @value + ) @body +) @genexpr +{ + let tuple = (ast-node @body "Tuple") + edge tuple -> @key.node + attr (tuple -> @key.node) elts = 1 + edge tuple -> @value.node + attr (tuple -> @value.node) elts = 0 + ; TODO verify that it is correct to use a `(value, key)` tuple, and not a `(key, value)` tuple above. + ; That is what the current parser does... + attr (tuple) ctx = "load" + let @genexpr.result = tuple +} + +; For the final `if` clause, we need to hook it up with the `yield` expression and with its associated `for` clause. +[ + (generator_expression + body: (_) @body + (if_clause) @last + . + ) @genexpr + (list_comprehension + body: (_) @body + (if_clause) @last + . + ) @genexpr + (set_comprehension + body: (_) @body + (if_clause) @last + . + ) @genexpr + (dictionary_comprehension + body: (_) @body + (if_clause) @last + . + ) @genexpr +] +{ + let expr = (ast-node @body "Expr") + let yield = (ast-node @body "Yield") + + let @genexpr.expr = expr + let @genexpr.yield = yield + + attr (expr) value = yield + + attr (yield) value = @genexpr.result + attr (@body.node) ctx = "load" + edge @last.first_if -> expr + attr (@last.first_if -> expr) body = 0 + + ; Hook up this `if` clause with its `for` clause + edge @last.for -> @last.node + attr (@last.for -> @last.node) body = 0 +} + +; If the last clause is a `for`, we only have to create and hook up the `yield` expression. +[ + (generator_expression + body: (_) @body + (for_in_clause) @last + . + ) @genexpr + (list_comprehension + body: (_) @body + (for_in_clause) @last + . + ) @genexpr + (set_comprehension + body: (_) @body + (for_in_clause) @last + . + ) @genexpr + (dictionary_comprehension + body: (_) @body + (for_in_clause) @last + . + ) @genexpr +] +{ + let expr = (ast-node @body "Expr") + let yield = (ast-node @body "Yield") + + let @genexpr.expr = expr + let @genexpr.yield = yield + + attr (expr) value = yield + + attr (yield) value = @genexpr.result + attr (@body.node) ctx = "load" + edge @last.node -> expr + attr (@last.node -> expr) body = 0 +} + +; For whatever reason, we do not consider parentheses around the yielded expression if they are present, so +; we must adapt the location accordingly. +[ + (generator_expression + body: (_ . "(" . _ @first) + ) + (list_comprehension + body: (_ . "(" . _ @first) + ) + (set_comprehension + body: (_ . "(" . _ @first) + ) + (dictionary_comprehension + body: (_ . "(" . _ @first) + ) +] @genexpr +{ + attr (@genexpr.expr) _location_start = (location-start @first) + attr (@genexpr.yield) _location_start = (location-start @first) +} + +; Annoyingly, setting the end location of the synthesized `Expr` and `Yield` is a big mess, +; so we have to use mutable variables. +[ + (generator_expression body: (_) @body) + (list_comprehension body: (_) @body) + (set_comprehension body: (_) @body) + (dictionary_comprehension body: (_) @body) +] @genexpr +{ + var @genexpr.body_end = (location-end @body) +} + + +; The reason we need to do this mutably is because the query `(_ _ @last . ")" .)`, despite the liberal use +; of anchors, is broken (due to a bug in `tree-sitter`). Specifically, it will match both `b` and the +; following `,` in the tuple expression `(a, b,)`. This means we cannot set the attribute in this stanza +; (since overwriting attributes is not allowed) and so we instead write it to a mutable variable and set it +; later. Because the order in which the captures are returned results in `b` being matched before `,` this +; gives the correct behaviour. +[ + (generator_expression + body: (_ _ @last . ")" .) + ) + (list_comprehension + body: (_ _ @last . ")" .) + ) + (set_comprehension + body: (_ _ @last . ")" .) + ) + (dictionary_comprehension + body: (_ _ @last . ")" .) + ) +] @genexpr +{ + set @genexpr.body_end = (location-end @last) +} + +[ + (generator_expression) + (list_comprehension) + (set_comprehension) + (dictionary_comprehension) +] @genexpr +{ + attr (@genexpr.expr) _location_end = @genexpr.body_end + attr (@genexpr.yield) _location_end = @genexpr.body_end +} + + +;;;;;; End of GeneratorExp (`(a for b in c if d)`) + + + + +;;;;;; Class statements +; A class definition +; +; class Foo(*bases, **keywords): body +; +; is turned into an actual assignment statement, with the class name as the left-hand side. +; +; Foo = $classexpr(name='Foo', bases, keywords, inner_scope=$class(name='Foo', body)) +; +; (with a suitably magical definition of the `$` prefix). +; +; So we have to synthesize both the outer assignment, and also the two representatives of the class. + +(class_definition + name: (identifier) @name + ":" @colon +) @class +{ + + ; To make it clearer that the outer node is an assignment, we create an alias for it. + let @class.assign = @class.node + + ; We reuse the identifier as the left hand side of the assignment. + let @class.assign_lhs = @name.node + + ; Synthesized nodes: the class_expr node, and the class node. + + let @class.class_expr = (ast-node @class "ClassExpr") + let @class.inner_scope = (ast-node @class "Class") + + ; Setting up the outer assignment + edge @class.assign -> @class.assign_lhs + attr (@class.assign -> @class.assign_lhs) targets = 0 + attr (@class.assign) value = @class.class_expr + attr (@class.assign) _location_end = (location-end @colon) + + attr (@class.assign_lhs) ctx = "store" + + let class_name = (source-text @name) + + ; The right hand side of the assignment, a `ClassExpr`. + attr (@class.class_expr) name = class_name + attr (@class.class_expr) inner_scope = @class.inner_scope + ; `bases` will be set elsewhere + ; `keywords` will be set elsewhere + attr (@class.class_expr) _location_end = (location-end @colon) + + ; The inner scope of the class_expr, a `Class`. + attr (@class.inner_scope) name = class_name + ; body will be set in a separate stanza. + attr (@class.inner_scope) _location_end = (location-end @colon) + +} + +; Class.body +(class_definition + body: (block (_) @stmt) +) @class +{ + edge @class.inner_scope -> @stmt.node + attr (@class.inner_scope -> @stmt.node) body = (named-child-index @stmt) +} + +; Class.bases - using `(_ !name)` as a proxy for all non-keyword arguments. +(class_definition + superclasses: (argument_list element: (_ !name) @arg) +) @class +{ + edge @class.class_expr -> @arg.node + attr (@class.class_expr -> @arg.node) bases = (named-child-index @arg) +} + +; Class.keywords +(class_definition + superclasses: (argument_list element: (keyword_argument) @arg) +) @class +{ + edge @class.class_expr -> @arg.node + attr (@class.class_expr -> @arg.node) keywords = (named-child-index @arg) +} + +;;;;;; End of Class + +;;;;;; Assign statements +; Assignment statements require a bit of interesting handling, since we represent a chained +; assignment such as `a = b = 5` as a single `Assign` node with multiple targets and a single +; right-hand side. This makes it somewhat complicated (but still doable) to determine the index of +; any single target in the resulting list. +; +; The way we handle this is by explicitly propagating two variables inwards. The first variable +; keeps track of the outermost node in a chain of assignments, and the second variable keeps track of +; the index of the left-hand side of the current assignment. + +; Base case, for the outermost assignment we set the outermost node to this node, and the index to zero. +(expression_statement (assignment !type) @assign) @expr +{ + let @assign.outermost_assignment = @assign.node + let @assign.target_index = 0 +} + +; Propagating the two variables inwards, increasing the index by one. Note that this depends on +; having the query match from the outside in -- if this evaluation order ever changes, this will break. +(assignment !type right: (assignment) @inner) @outer +{ + let @inner.outermost_assignment = @outer.outermost_assignment + let @inner.target_index = (plus @outer.target_index 1) +} + +; Finally, with the above variables set, we can -- for each assignment -- create an edge from the +; outermost assignment to it, and set its index to the index that we've calculated for this node. +(assignment !type left: (_) @target) @assign +{ + edge @assign.outermost_assignment -> @target.node + attr (@assign.outermost_assignment -> @target.node) targets = @assign.target_index + attr (@target.node) ctx = "store" +} + +; In addition to the above, we must ensure that the `value` attribute of the outermost assignment +; points to the _innermost_ right-hand side. We do this by first setting the `value` attribute for +; _all_ assignments... +(assignment !type right: (_) @value) @assign +{ + attr (@assign.node) value = @value.node + attr (@value.node) ctx = "load" +} + +; ... and then for assignments that are _inside_ other assigments, we use the `_skip_to` attribute +; to jump across the outer assignment. +; +; Thus, the outermost assignment's `value` will point to its right-hand side, but this one will (if +; it's an assignment itself) skip to _its_ right-hand side, and so on until we reach a right-hand side +; that is not an assignment. +(assignment !type right: (assignment right: (_) @inner) @outer) +{ + attr (@outer.node) _skip_to = @inner.node +} + +;;;;;; End of Assign + +;;;;;; AnnAssign + +(assignment + left: (_) @target + type: (type (expression) @type) +) @assign +{ + attr (@assign.node) target = @target.node + attr (@target.node) ctx = "store" + attr (@assign.node) annotation = @type.node + attr (@type.node) ctx = "load" +} + +(assignment + left: (_) @target + type: (_) + right: (_) @value +) @assign +{ + attr (@assign.node) value = @value.node + attr (@value.node) ctx = "load" +} + +;;;;;; End of AnnAssign + +;;;;;; AugAssign + +(augmented_assignment + left: (_) @left + operator: _ @op + right: (_) @right +) @augassign +{ + let binop = (ast-node @augassign "BinOp") + attr (@augassign.node) operation = binop + attr (binop) left = @left.node + attr (@left.node) ctx = "load" ; yes, it really is "load". + attr (binop) op = (source-text @op) + attr (binop) right = @right.node + attr (@right.node) ctx = "load" +} + +;;;;;; End of AugAssign + +;;;;;; Global + +(global_statement (identifier) @name) @global +{ + edge @global.node -> @name.node + attr (@global.node -> @name.node) names = (named-child-index @name) + attr (@name.node) _is_literal = (source-text @name) +} + +;;;;;; End of Global + +;;;;;; Nonlocal + +(nonlocal_statement (identifier) @name) @nonlocal +{ + edge @nonlocal.node -> @name.node + attr (@nonlocal.node -> @name.node) names = (named-child-index @name) + attr (@name.node) _is_literal = (source-text @name) +} + +;;;;;; End of Nonlocal + +;;;;;; Import (`import ...`) + +; `import j1.j2 as j3, j4, ...` becomes +; +; Import: +; names: [ +; alias: +; value: +; ImportExpr: +; level: 0 # always 0 for absolute imports +; name: 'j1.j2' +; top: False +; asname: +; Name: +; variable: Variable('j3', None) +; ctx: Store +; alias: +; value: +; ImportExpr: +; level: 0 # always 0 for absolute imports +; name: 'j4' +; top: True +; asname: +; Name: +; variable: Variable('j4', None) +; ctx: Store +; ... +; ] +; +; from +; +; module +; import_statement +; name: aliased_import +; name: dotted_name +; identifier # j1 +; identifier # j2 +; alias: identifier j3 +; name: dotted_name +; identifier # j4 +; +; This means we have to hang our `alias` nodes off of the `dotted_name` and +; `aliased_import` nodes. + +; Import.names +(import_statement name: (_) @name) @import +{ + edge @import.node -> @name.node + attr (@import.node -> @name.node) names = (named-child-index @name) +} + +; Imports without an explicit alias -- extract the root module name +(import_statement name: (dotted_name . (identifier) @first) @alias) +{ + let import_expr = (ast-node @alias "ImportExpr") + attr (import_expr) level = 0 + attr (import_expr) name = (source-text @alias) + attr (import_expr) top = #true + + attr (@alias.node) value = import_expr + + attr (@alias.node) asname = @first.node + attr (@first.node) ctx = "store" +} + +; Not strictly needed (but the AST reconstruction will complain otherwise) we +; assign a context to each identifier in a dotted name (except the first part, +; which already gets one elsewhere). +(dotted_name (identifier) (identifier) @name) +{ + attr (@name.node) ctx = "load" +} + +; For dotted imports `a.b.c` the location for the `Name` corresponding to the +; `a` part covers the entire expression, so we explicitly match the final +; element and set the location appropriately. If there is only one element, +; this stanza doesn't fire, but in that case the location is actually correct +; already. +(import_statement + name: (dotted_name + . + (identifier) @first + (identifier) @last + . + ) +) +{ + attr (@first.node) _location_end = (location-end @last) +} + +; Imports with an explicit alias +(import_statement + (aliased_import + name: (dotted_name . (identifier) @first) @name + alias: (identifier) @asname + ) @alias +) +{ + let import_expr = (ast-node @name "ImportExpr") + attr (import_expr) level = 0 + attr (import_expr) name = (source-text @name) + attr (import_expr) top = #false + + attr (@alias.node) value = import_expr + + attr (@alias.node) asname = @asname.node + attr (@asname.node) ctx = "store" + + attr (@first.node) ctx = "load" +} + +;;;;;; End of Import (`import ...`) + +;;;;;; Import (`from ... import ...`) + +; Oh what a twisty mess these are. First, the prototypical layout of a +; `from some_module import x1 as y1, x2, ...` statement is as follows: +; +; Import: +; names: [ +; alias: +; value: +; ImportMember: +; module: +; ImportExpr; +; level: <number of dots before some_module> +; name: <name of some_module without dots> +; top: #false +; name: <name of x1> +; asname: +; Name: +; variable: Variable(<name of y1>, None) +; ctx: "store" +; alias: +; value: +; ImportMember: +; module: +; ImportExpr: +; level: <number of dots before some_module> +; name: <name of some_module without dots> +; top: #false +; name: <name of x2> +; asname: +; Name: +; variable: Variable(<name of x2>, None) # Note the reuse! +; ctx: "store" +; ... +; ] +; +; In particular, `alias` nodes are used even if no aliasing takes place. + +; Now, on the flip side we have the `tree-sitter-python` output. Here +; the corresponding structure for `from ..some_module import x1 as y1, x2` +; is as follows: +; +; module +; import_from_statement +; module_name: relative_import +; import_prefix # `..` +; dotted_name +; identifier # some_module +; name: aliased_import +; name: dotted_name +; identifier # x1 +; alias: identifier # y1 +; name: dotted_name +; identifier # x2 +; +; Now, we need to pin our `alias` nodes on something, and the only thing we can +; really rely on is whatever is in the `name` field of the +; `import_from_statement` + + +; Import.names +[ + (import_from_statement + name: (_) @alias + ) + (future_import_statement + name: (_) @alias + ) +] @import +{ + edge @import.node -> @alias.node + attr (@import.node -> @alias.node) names = (named-child-index @alias) +} + +; Setting up the synthesized nodes for `ImportMember` and `ImportExpr` +; when the module name is _not_ a relative import. +[ + (import_from_statement + module_name: (dotted_name) @name + name: (_) @alias + ) + (future_import_statement + "__future__" @name + name: (_) @alias + ) +] +{ + let @alias.import_member = (ast-node @alias "ImportMember") + let @alias.import_expr = (ast-node @name "ImportExpr") + + attr (@alias.node) value = @alias.import_member + attr (@alias.import_member) module = @alias.import_expr + attr (@alias.import_expr) level = 0 + attr (@alias.import_expr) name = (source-text @name) + attr (@alias.import_expr) top = #false +} + +; Setting up the synthesized nodes for `ImportMember` and `ImportExpr` +; when the module name _is_ a relative import. +(import_from_statement + module_name: (relative_import name: (dotted_name) @name) @rel + name: (_) @alias +) +{ + let @alias.import_member = (ast-node @alias "ImportMember") + let @alias.import_expr = (ast-node @rel "ImportExpr") + + attr (@alias.node) value = @alias.import_member + attr (@alias.import_member) module = @alias.import_expr + ; ImportExpr.level is computed elsewhere + attr (@alias.import_expr) name = (source-text @name) + attr (@alias.import_expr) top = #false +} + +; Setting up the synthesized nodes for `ImportMember` and `ImportExpr` +; when the module is a relative import with no module name (e.g. `from . import ...`). +(import_from_statement + module_name: (relative_import !name) @rel + name: (_) @alias +) +{ + let @alias.import_member = (ast-node @alias "ImportMember") + let @alias.import_expr = (ast-node @rel "ImportExpr") + + attr (@alias.node) value = @alias.import_member + attr (@alias.import_member) module = @alias.import_expr + ; ImportExpr.level is computed elsewhere + attr (@alias.import_expr) name = #null + attr (@alias.import_expr) top = #false +} + +; Set the level for relative imports +(import_from_statement + module_name: (relative_import (import_prefix) @prefix) + name: (_) @alias +) +{ + var level = 0 + + ; Figure out the number of `.`s in the prefix. + scan (source-text @prefix) { + "\." { + set level = (plus level 1) + } + } + + attr (@alias.import_expr) level = level +} + +; Set aliases for non-aliased imports +[ + (import_from_statement + name: + (dotted_name (identifier) @name) @alias + ) + (future_import_statement + name: + (dotted_name (identifier) @name) @alias + ) +] +{ + attr (@alias.node) asname = @name.node + attr (@alias.import_member) name = (source-text @name) + attr (@name.node) ctx = "store" +} + +; Set aliases for aliased imports +(import_from_statement + name: + (aliased_import + name: (dotted_name) @first + alias: (identifier) @asname + ) @alias +) +{ + attr (@alias.node) asname = @asname.node + attr (@alias.import_member) name = (source-text @first) + attr (@asname.node) ctx = "store" +} + +; Fix up remaining identifiers without contexts. +(import_from_statement + module_name: (dotted_name . (identifier) @first) +) +{ + attr (@first.node) ctx = "load" +} + +(import_from_statement + module_name: (relative_import (dotted_name . (identifier) @first)) +) +{ + attr (@first.node) ctx = "load" +} + +(import_from_statement + name: (aliased_import (dotted_name (identifier) @first)) +) +{ + attr (@first.node) ctx = "load" +} + +(import_from_statement + module_name: (_) @name + (wildcard_import) +) @importfrom +{ + let importexpr = (ast-node @name "ImportExpr") + let @importfrom.importexpr = importexpr + attr (@importfrom.node) module = importexpr + attr (importexpr) top = #false +} + +; Absolute star import: `from a import *` +(import_from_statement + module_name: (dotted_name) @name + (wildcard_import) +) @importfrom +{ + attr (@importfrom.importexpr) name = (source-text @name) + attr (@importfrom.importexpr) level = 0 +} + +; Relative star import, with module name: `from ..a import *` +(import_from_statement + module_name: + (relative_import + (dotted_name) @name + ) + (wildcard_import) +) @importfrom +{ + attr (@importfrom.importexpr) name = (source-text @name) +} + +; Relative star import, without module name: `from ... import *` +(import_from_statement + module_name: + (relative_import + (import_prefix) @prefix + ) + (wildcard_import) +) @importfrom +{ + var level = 0 + + ; Figure out the number of `.`s in the prefix. + scan (source-text @prefix) { + "\." { + set level = (plus level 1) + } + } + + attr (@importfrom.importexpr) level = level +} +;;;;;; End of Import (`from ... import ...`) + +;;;;;; Raise (`raise ...`) +; This one is interesting, since the `tree-sitter-python` grammar doesn't let +; us distinguish between `raise foo` and `raise foo, bar`. At the level of the +; `tree-sitter-python` output, both are `raise_statement` nodes with a single +; child. In the latter case, the child is an `expression_list` but there's +; currently no way to match _against_ a particular node type in a query. + +; To get around this, we instead do the matching inside the stanza itself. + +(raise_statement . (_) @exc) @raise +{ + if (not (instance-of @exc "expression_list") ) { + attr (@raise.node) exc = @exc.node + } + attr (@exc.node) ctx = "load" +} + +; `raise ... from cause` +(raise_statement + cause: (_) @cause +) @raise +{ + attr (@raise.node) cause = @cause.node + attr (@cause.node) ctx = "load" +} + +; `raise type, inst` +(raise_statement (expression_list + . (_) @type + . (_) @inst +)) @raise +{ + attr (@raise.node) type = @type.node + attr (@raise.node) inst = @inst.node +} + +; `raise type, inst, tback` +(raise_statement (expression_list + . (_) + . (_) + . (_) @tback + . +)) @raise +{ + attr (@raise.node) tback = @tback.node +} + +;;;;;; End of Raise (`raise ...`) + +;;;;;; Assert (`assert ...`) + +(assert_statement + . (_) @test +) @assert +{ + attr (@assert.node) test = @test.node + attr (@test.node) ctx = "load" +} + +(assert_statement + . (_) + . (_) @msg +) @assert +{ + attr (@assert.node) msg = @msg.node + attr (@msg.node) ctx = "load" +} + +;;;;;; End of Assert (`assert ...`) + +;;;;;; String (`"foo"`) + +; For regular strings, see the handling of `(string !interpolation)` below. + +; For concatenated strings, the necessary manipulations are quite complicated to express, +; so we instead move this problem into the Python side of things. Thus, a concatenated +; string only has to keep track of what its children are. +(concatenated_string) @string +{ + attr (@string.node) _prefix = (string-prefix @string) + attr (@string.node) _fixup = #true +} + +(concatenated_string (string) @part) @string +{ + edge @string.node -> @part.node + attr (@string.node -> @part.node) _children = (named-child-index @part) +} + +;;;;;; End of String (`"foo"`) + +;;;;;; JoinedStr (`f"foo"`) + +; f-strings are quite complicated for a variety of reasons. First of all, +; we need to synthesize empty strings to appear in-between interpolations +; that are immediately adjacent. Thus, the string `f"{1}{2}"`, which has +; a `tree-sitter-python` representation of the form +; +; (string (interpolation (integer)) (interpolation (integer))) +; +; needs to have three empty additional strings synthesized: +; - `f"{`, before the `1`, +; - `}{`, between the `1` and `2`, and +; - `}"`, after the `2`. +; +; Because of this, children of an f-string are indexed using triples of integers. +; The first component is either 0, 1, or 2, indicating whether this string appears at the +; beginning, in between, or at the end of the f-string. (At the beginning and end, the other +; two components are irrelevant.) The second component is the index of child, as seen by +; `tree-sitter`. The third component allows us to insert empty strings between adjacent children +; of the f-string. Thus, the string `f"{1}{2}"` has the following children at the given indices: +; `f"{"` at `[0,0,0]` +; `1` at `[1,1,0]` +; `}{` at `[1,1,1]` +; `2` at `[1,2,0]` +; `}"` at `[2,0,0]` + + +; First, we add any strings parts that appear either before or after an interpolation: +[ + (string + interpolation: (_) + string_content: (_) @part + ) + (string + string_content: (_) @part + interpolation: (_) + ) +] @fstring +{ + edge @fstring.node -> @part.node + attr (@fstring.node -> @part.node) values = [1, (named-child-index @part), 0] + let safe_string = (concatenate-strings (string-safe-prefix @fstring) (source-text @part) (string-quotes @fstring)) + attr (@part.node) s = safe_string + attr (@part.node) text = safe_string +} + +; In a similar fashion, any expressions that are interpolated: +(string interpolation: (interpolation expression: (_) @part) @interp) @fstring +{ + edge @fstring.node -> @part.node + attr (@fstring.node -> @part.node) values = [1, (named-child-index @interp), 0] + attr (@part.node) ctx = "load" +} + +; Any expressions inside the format specifier are appended at the end +(string + interpolation: (interpolation + (format_specifier + (format_expression + expression: (_) @part + ) @format_expression + ) + ) @interp +) @fstring +{ + edge @fstring.node -> @part.node + attr (@fstring.node -> @part.node) values = [1, (named-child-index @interp), (plus 1 (named-child-index @format_expression))] + attr (@part.node) ctx = "load" +} + +; Next, the empty string before the first interpolation: +(string + . + (interpolation "{" @end) +) @fstring +{ + let empty_string = (ast-node @fstring "StringPart") + edge @fstring.node -> empty_string + attr (@fstring.node -> empty_string) values = [0, 0, 0] + attr (empty_string) prefix = (string-prefix @fstring) + attr (empty_string) s = "\"\"" + let quotes = (string-quotes @fstring) + attr (empty_string) text = (concatenate-strings quotes quotes) + + attr (empty_string) _location_end = (location-end @end) +} + +; Then, the empty string between two immediately adjacent interpolations: +(string + (interpolation "}" @start) @before + . + (interpolation "{" @end) +) @fstring +{ + let empty_string = (ast-node @fstring "StringPart") + edge @fstring.node -> empty_string + attr (@fstring.node -> empty_string) values = [1, (named-child-index @before), 1] + attr (empty_string) prefix = (string-prefix @fstring) + attr (empty_string) s = "\"\"" + let quotes = (string-quotes @fstring) + attr (empty_string) text = (concatenate-strings quotes quotes) + attr (empty_string) _location_start = (location-start @start) + attr (empty_string) _location_end = (location-end @end) +} + +; And finally, the empty string after the last interpolation: +(string + (interpolation "}" @start) + . +) @fstring +{ + let empty_string = (ast-node @fstring "StringPart") + edge @fstring.node -> empty_string + attr (@fstring.node -> empty_string) values = [2, 0, 0] + attr (empty_string) prefix = (string-prefix @fstring) + attr (empty_string) s = "\"\"" + let quotes = (string-quotes @fstring) + attr (empty_string) text = (concatenate-strings quotes quotes) + attr (empty_string) _location_start = (location-start @start) +} + +; If the f-string begins with a non-empty string, we must adjust the start and +; end location of this part: +(string + . + string_content: (_) @part + . + interpolation: (interpolation "{" @int_start) +) @fstring +{ + attr (@part.node) prefix = (string-prefix @fstring) + attr (@part.node) _location_start = (location-start @fstring) + attr (@part.node) _location_end = (location-end @int_start) +} + +; And similarly for any string that follows an interpolation: +(string + interpolation: (interpolation "}" @int_end) + . + string_content: (_) @part) @fstring +{ + attr (@part.node) prefix = (string-prefix @fstring) + attr (@part.node) _location_start = (location-start @int_end) +} + +; Finally, we must adjust the end of the last part: +(string + interpolation: (_) + string_content: (_) @part + . +) @fstring +{ + attr (@part.node) _location_end = (location-end @fstring) +} + +; For f-strings without interpolations, we simply treat them as regular strings (or `StringPart`s if +; they are part of a concatenation): +(string !interpolation string_content: (_) @part) @fstring +{ + let safe_text = (concatenate-strings (string-safe-prefix @fstring) (source-text @part) (string-quotes @fstring)) + if (instance-of (get-parent @fstring) "concatenated_string"){ + ; StringPart + attr (@fstring.node) text = safe_text + } + else { + ; regular string + attr (@fstring.node) implicitly_concatenated_parts = #null + } + attr (@fstring.node) s = safe_text + attr (@fstring.node) prefix = (string-prefix @fstring) +} + +; For f-strings without interpolations _or_ string-content, we simply treat them as regular empty strings: +(string !interpolation !string_content) @fstring +{ + let empty_text = "\"\"" + if (instance-of (get-parent @fstring) "concatenated_string"){ + ; StringPart + attr (@fstring.node) text = empty_text + } + else { + ; regular string + attr (@fstring.node) implicitly_concatenated_parts = #null + } + attr (@fstring.node) s = empty_text + attr (@fstring.node) prefix = (string-prefix @fstring) +} + + +;;;;;; End of JoinedStr (`f"foo"`) + + + +;;;;;; List (`[...]`) + +(list element: (_) @elt) @list +{ + edge @list.node -> @elt.node + attr (@list.node -> @elt.node) elts = (named-child-index @elt) +} + +;;;;;; End of List (`[...]`) + +;;;;;; Starred (`*some_sequence`) + +[ + (list_splat (expression) @value) + (list_splat_pattern vararg: (_) @value) +] @starred +{ + attr (@starred.node) value = @value.node + attr (@value.node) _inherited_ctx = @starred.node +} + +;;;;;; End of Starred (`*some_sequence`) + +;;;;;; Dict (`{... : ..., ...}`) + +(dictionary element: (_) @item) @dict +{ + edge @dict.node -> @item.node + attr (@dict.node -> @item.node) items = (named-child-index @item) + attr (@item.node) ctx = "load" +} + +(pair key: (_) @key value: (_) @value) @item +{ + attr (@item.node) key = @key.node + attr (@item.node) value = @value.node + attr (@key.node) ctx = "load" + attr (@value.node) ctx = "load" +} + +;;;;;; End of Dict (`{... : ..., ...}`) + +;;;;;; DictUnpacking (`**some_dict`) + +(dictionary_splat (expression) @value) @dictunpacking +{ + attr (@dictunpacking.node) value = @value.node + attr (@value.node) ctx = "load" +} + +;;;;;; End of DictUnpacking (`**some_dict`) + +;;;;;; Set (`{..., ...}`) + +(set element: (_) @elt) @set +{ + edge @set.node -> @elt.node + attr (@set.node -> @elt.node) elts = (named-child-index @elt) +} + +;;;;;; End of Set (`{..., ...}`) + + +;;;;;; BoolOp (`... and ...`, `... or ...`) + +; This is probably the single most complex thing in this file. Read it slowly. + +; First of all, the problem is that `tree-sitter-python` represents boolean operators as if they are binary, +; whereas in Python they are really n-ary. This means we have to collapse nested `and`s and `or`s in order to +; correctly create the intended AST structure. +; +; We have a structure like this: +; +; or +; / \ +; v_0 or +; / \ +; v_1 ... +; \ +; or +; / \ +; v_n-1 v_n +; +; where each `v_i` may be a value or a subtree, but not an `or`. +; From this we will produce a graph of the form: +; +; or -0-> v_0 +; -1-> v_1 +; ... +; -(n-1)-> v_n-1 +; -n-> [or -skip_to->]* v_n +; +; where we see that the last node may be found by a series of `skip_to` edges along the nested `or` nodes, +; if such are present. +; +; As an intermediate step, we will decorate the `or` nodes of the tree with a field `index`, and for the outermost +; `or` node we will also set `last_index`, initially to 1 but we increment it each time we see a nested `or`, so it ends +; up being `n`: +; +; or index:0, last_index: n +; / \ +; v_0 or index: 1 +; / \ +; v_1 ... +; \ +; or index: n-1 +; / \ +; v_n-1 v_n +; +; This collapsing goes to the outermost operator (`and` or `or`) +; and so the first step is to correctly identify these. + +; For the outermost nodes, we can now assign +; some special variables that we will propagate inwards. Firstly, we record what the outermost node is (in +; this case just the node itself), next the index of the value in its left argument (initially `0`), and +; finally the index at which the _innermost_ right-hand-side value should appear in the resulting list of +; values. This final variable is mutable, and will be updated as we go through the nested sequence of similar +; operators. +(boolean_operator operator: _ @op right: (_)) @boolop +{ + ; this binary operator is outermost if it does not have a parent performing the same operation (`and` or `or`) + if (not (is-boolean-operator (get-parent @boolop) (source-text @op))) { + let @boolop.outermost = @boolop + let @boolop.index = 0 + var @boolop.innermost_index = 1 + } +} + +; Now, we propagate/modify the variables mentioned in the previous stanza. The `outermost` field is simply +; propagated, and the `index` and `innermost_index` fields are propagated and updated respectively. +; +; We also set the `_skip_to` field on the inner operator, making it point to its right child. That way, the +; `right` child of the _outermost_ operator will (once resolved) point to the _innermost_ `right` child (i.e. ; the last child in this nested sequence of operators). +[ + (boolean_operator + operator: "or" + right: (boolean_operator + operator: "or" + right: (_) @inner_right + ) @inner + ) + (boolean_operator + operator: "and" + right: (boolean_operator + operator: "and" + right: (_) @inner_right + ) @inner + ) +] @outer +{ + let @inner.outermost = @outer.outermost + let @inner.index = (plus @outer.index 1) + attr (@inner.node) _skip_to = @inner_right.node + let outermost = @outer.outermost + set outermost.innermost_index = (plus outermost.innermost_index 1) +} + +; For each boolean operator, we hook its left child up as a child of the outermost operator, at the index we +; calculated previously. +(boolean_operator left: (_) @value) @boolop +{ + edge @boolop.outermost.node -> @value.node + attr (@boolop.outermost.node -> @value.node) values = @boolop.index + attr (@value.node) ctx = "load" +} + +; For the outermost boolean operator, we hook up its right child (which ultimately points to the innermost +; right child) as a child at the index we calculated previously. +(boolean_operator + operator: _ @op + right: (_) @value +) @boolop +{ + ; this binary operator is outermost if it does not have a parent performing the same operation (`and` or `or`) + if (not (is-boolean-operator (get-parent @boolop) (source-text @op))) { + edge @boolop.node -> @value.node + attr (@boolop.node -> @value.node) values = @boolop.innermost_index + } +} + +(boolean_operator right: (_) @value) +{ attr (@value.node) ctx = "load" } + +(boolean_operator ["and" "or"] @op) @boolop +{ + attr (@boolop.node) op = (source-text @op) +} + +;;;;;; End of BoolOp (`... and ...`, `... or ...`) + +;;;;;; Compare (`... < ...`, `... <= ...`, etc.) + +(comparison_operator . (primary_expression) @left) @compare +{ + attr (@compare.node) left = @left.node + attr (@left.node) ctx = "load" +} + +; Hook up all of the compared values. These are simply the named children (except the first one, +; which was handled above), as the operators are all unnamed. +(comparison_operator (primary_expression) (primary_expression) @right) @compare +{ + edge @compare.node -> @right.node + attr (@compare.node -> @right.node) comparators = (named-child-index @right) + attr (@right.node) ctx = "load" +} + + +; Record the operators in the `ops` fields. +; +; A complication here is that we want to construct a field pointing to a list of +; literals (and not AST nodes as we do almost everywhere else). To get around this, +; we create a placeholder node for the operation, and then set the `_is_literal` field +; to override it with a literal value. +(comparison_operator ["<" "<=" ">" ">=" "==" "!=" "<>" "in" "is"] @op) @compare +{ + let @op.node = (ast-node @op "cmpop") + attr (@op.node) _is_literal = (node-type @op) + edge @compare.node -> @op.node + attr (@compare.node -> @op.node) ops = (unnamed-child-index @op) +} + +; The `not in` and `is not` operators are complicated by the fact that the query +; `(comparison_operator "not in" @op)` +; matches _twice_ for each `not in` operator (in effect for both the `not` and `in` parts, even +; though these should have been aliased to a single token). To avoid producing duplicate operators, +; we only create an operator for _one_ of these matches, by checking whether the index is even. +(comparison_operator "not in"+ @op) @compare +{ + for op in @op { + let index = (unnamed-child-index op) + if (eq (mod index 2) 0) { + let op.node = (ast-node op "cmpop") + attr (op.node) _is_literal = "not in" + edge @compare.node -> op.node + attr (@compare.node -> op.node) ops = index + } + } +} + +(comparison_operator "is not"+ @op) @compare +{ + for op in @op { + let index = (unnamed-child-index op) + if (eq (mod index 2) 0) { + let op.node = (ast-node op "cmpop") + attr (op.node) _is_literal = "is not" + edge @compare.node -> op.node + attr (@compare.node -> op.node) ops = index + } + } +} + +;;;;;; End of Compare (`... < ...`, `... <= ...`, etc.) + +;;;;;; UnaryOp (`-x`, `~x`, etc.., `not x`) + +[ + (unary_operator argument: (_) @operand) + (not_operator argument: (_) @operand) +] @unaryop +{ + attr (@unaryop.node) operand = @operand.node + attr (@operand.node) ctx = "load" +} + +(unary_operator "~" @op) @unaryop +{ + attr (@unaryop.node) op = "~" +} + +(unary_operator "+") @unaryop +{ + attr (@unaryop.node) op = "uadd" +} + +(unary_operator "-") @unaryop +{ + attr (@unaryop.node) op = "usub" +} + + +(not_operator) @unaryop +{ + attr (@unaryop.node) op = "not" +} + +;;;;;; End of UnaryOp (`-x`, `not x`) + +;;;;;; Exec (`exec ...`) + +(exec_statement (_) @body) @exec +{ + attr (@exec.node) body = @body.node +} + +;;;;;; End of Exec (`exec ...`) + +;;;;;; Print (`print ...`) + +(print_statement argument: (_) @value) @print +{ + edge @print.node -> @value.node + attr (@print.node -> @value.node) values = (named-child-index @value) + attr (@value.node) ctx = "load" +} + +(print_statement (chevron (_) @dest)) @print +{ + attr (@print.node) dest = @dest.node + attr (@dest.node) ctx = "load" +} + +(print_statement ","? @comma .) @print +{ + var nl = #true + if some @comma + { + set nl = #false + } + attr (@print.node) nl = nl +} + +;;;;;; End of Print (`print ...`) + +;;;;;; Return (`return ...`) + +(return_statement (_) @value) @return +{ + attr (@return.node) value = @value.node + attr (@value.node) ctx = "load" +} + +;;;;;; End of Return (`return ...`) + +;;;;;; Yield and YieldFrom (`yield ...` and `yield from ...`) + +(yield (_) @value) @yield +{ + attr (@yield.node) value = @value.node + attr (@value.node) ctx = "load" +} + +;;;;;; End of Yield and YieldFrom (`yield ...` and `yield from ...`) + +;;;;;; Await (`await ...`) + +(await (_) @value) @await +{ + attr (@await.node) value = @value.node + attr (@value.node) ctx = "load" +} + +;;;;;; End of Await (`await ...`) + +;;;;;; Try (`try: ... except: ... else: ... finally: ...`) + +(try_statement body: (block (_) @stmt)) @try +{ + edge @try.node -> @stmt.node + attr (@try.node -> @stmt.node) body = (named-child-index @stmt) +} + +(try_statement (except_clause) @except) @try +{ + edge @try.node -> @except.node + attr (@try.node -> @except.node) handlers = (named-child-index @except) +} + +(try_statement (except_group_clause) @except) @try +{ + edge @try.node -> @except.node + attr (@try.node -> @except.node) handlers = (named-child-index @except) +} + +(try_statement (else_clause body: (block (_) @stmt))) @try +{ + edge @try.node -> @stmt.node + attr (@try.node -> @stmt.node) orelse = (named-child-index @stmt) +} + +(try_statement (finally_clause body: (block (_) @stmt))) @try +{ + edge @try.node -> @stmt.node + attr (@try.node -> @stmt.node) finalbody = (named-child-index @stmt) +} + +(except_clause body: (block (_) @stmt)) @except +{ + edge @except.node -> @stmt.node + attr (@except.node -> @stmt.node) body = (named-child-index @stmt) +} + +(except_clause type: (_) @type) @except +{ + attr (@except.node) type = @type.node + attr (@type.node) ctx = "load" +} + +(except_clause alias: (_) @name) @except +{ + attr (@except.node) name = @name.node + attr (@name.node) ctx = "store" +} + +(except_group_clause body: (block (_) @stmt)) @except +{ + edge @except.node -> @stmt.node + attr (@except.node -> @stmt.node) body = (named-child-index @stmt) +} + +(except_group_clause type: (_) @type) @except +{ + attr (@except.node) type = @type.node + attr (@type.node) ctx = "load" +} + +(except_group_clause alias: (_) @name) @except +{ + attr (@except.node) name = @name.node + attr (@name.node) ctx = "store" +} + +;;;;;; End of Try (`try: ... except: ... else: ... finally: ...`) + + +;;;;;; AssignExpr (`a := b`) + +(named_expression + name: (_) @name + value: (_) @value +) @assignexpr +{ + attr (@assignexpr.node) target = @name.node + attr (@name.node) ctx = "store" + attr (@assignexpr.node) value = @value.node + attr (@value.node) ctx = "load" +} + +;;;;;; End of AssignExpr (`a := b`) + +;;;;;; IfExpr (`a if b else c`) + +(conditional_expression + (expression) @body + (expression) @test + (expression) @orelse +) @ifexp +{ + attr (@ifexp.node) body = @body.node + attr (@body.node) ctx = "load" + attr (@ifexp.node) test = @test.node + attr (@test.node) ctx = "load" + attr (@ifexp.node) orelse = @orelse.node + attr (@orelse.node) ctx = "load" +} + +;;;;;; End of IfExpr (`a if b else c`) + +;;;;;; Attribute (`a.b`) + +(attribute + object: (_) @value + attribute: (_) @attr +) @attribute +{ + attr (@attribute.node) value = @value.node + attr (@value.node) ctx = "load" + attr (@attribute.node) attr = (source-text @attr) + ; Not actually used, but we need to set it to something. + attr (@attr.node) ctx = "load" +} + +;;;;;; End of Attribute (`a.b`) + +;;;;;; Subscript (`a[b]`) + +(subscript + value: (_) @value +) @subscript +{ + attr (@subscript.node) value = @value.node + attr (@value.node) ctx = "load" +} + +; Single subscript +(subscript + value: (_) + . + subscript: (_) @index + . +) @subscript +{ + attr (@subscript.node) index = @index.node + attr (@index.node) ctx = "load" +} + +; For expressions of the form `a[b, c]` we must explicitly synthesize an internal tuple node +; We do this and also hook it up: +(subscript + value: (_) + . + subscript: (_) @first + . + subscript: (_) +) @subscript +{ + let @subscript.tuple = (ast-node @first "Tuple") + attr (@subscript.tuple) ctx = "load" + attr (@subscript.node) index = @subscript.tuple + edge @subscript.tuple -> @first.node + attr (@subscript.tuple -> @first.node) elts = (named-child-index @first) + attr (@first.node) ctx = "load" +} + +(subscript + value: (_) + . + subscript: (_) + subscript: (_) @elt +) @subscript +{ + edge @subscript.tuple -> @elt.node + attr (@subscript.tuple -> @elt.node) elts = (named-child-index @elt) + attr (@elt.node) ctx = "load" +} + + +; Set the end position correctly +(subscript + value: (_) + . + subscript: (_) + subscript: (_) @last + . +) @subscript +{ + attr (@subscript.tuple) _location_end = (location-end @last) +} + + + +;;;;;; End of Subscript (`a[b]`) + +;;;;;; Slice (`a:b:c`) + +(slice start: (_) @start) @slice +{ + attr (@slice.node) start = @start.node + attr (@start.node) ctx = "load" +} + +(slice stop: (_) @stop) @slice +{ + attr (@slice.node) stop = @stop.node + attr (@stop.node) ctx = "load" +} + + +(slice step: (_) @step) @slice +{ + attr (@slice.node) step = @step.node + attr (@step.node) ctx = "load" +} + +;;;;;; End of Slice (`a:b:c`) + +;;;;;; While (`while a: ... else: ...`) + +(while_statement condition: (_) @test) @while +{ + attr (@while.node) test = @test.node + attr (@test.node) ctx = "load" +} + +(while_statement body: (block (_) @stmt)) @while +{ + edge @while.node -> @stmt.node + attr (@while.node -> @stmt.node) body = (named-child-index @stmt) +} + +(while_statement alternative: (else_clause (block (_) @stmt))) @while +{ + edge @while.node -> @stmt.node + attr (@while.node -> @stmt.node) orelse = (named-child-index @stmt) +} + +;;;;;; End of While (`while a: ... else: ...`) + +;;;;;; With (`with a as b, c as d: ...`) + +(with_statement (with_clause . (with_item) @first)) @with +{ + attr (@with.node) _skip_to = @first.node + let @with.first = @first.node +} + +(with_item + value: (_) @value +) @with +{ + attr (@with.node) context_expr = @value.node + attr (@value.node) ctx = "load" +} + +(with_item + alias: (_) @alias +) @with +{ + attr (@with.node) optional_vars = @alias.node + attr (@alias.node) ctx = "store" +} + + +(with_clause + (with_item) @with1 + . (comment)* . + (with_item) @with2 +) +{ + edge @with1.node -> @with2.node + attr (@with1.node -> @with2.node) body = 0 +} + + +(with_statement + (with_clause + (with_item) @last + . + ) + body: (block (_) @stmt) +) +{ + edge @last.node -> @stmt.node + attr (@last.node -> @stmt.node) body = (named-child-index @stmt) +} + + + +;;;;;; End of With (`with a as b, c as d: ...`) + +;;;;;; Match (`match a: ...`) + +(match_statement + subject: (_) @subject +) @match +{ + attr (@match.node) subject = @subject.node + attr (@subject.node) ctx = "load" +} + +(match_statement + cases: (cases (case_block) @case) +) @match +{ + edge @match.node -> @case.node + attr (@match.node -> @case.node) cases = (named-child-index @case) +} + +(case_block + pattern: (_) @pattern +) @case +{ + attr (@case.node) pattern = @pattern.node +} + +(case_block + guard: (_) @guard +) @case +{ + attr (@case.node) guard = @guard.node +} + +(guard + test: (_) @test +) @guard +{ + attr (@guard.node) test = @test.node + attr (@test.node) ctx = "load" +} + +(case_block + body: (block (_) @stmt) +) @case +{ + edge @case.node -> @stmt.node + attr (@case.node -> @stmt.node) body = (named-child-index @stmt) +} + +;;; The various pattern shapes need to have their children set up correctly + + +(match_as_pattern + pattern: (_) @pattern +) @match +{ + attr (@match.node) pattern = @pattern.node +} + +(match_as_pattern + alias: (_) @alias +) @match +{ + attr (@match.node) alias = @alias.node + attr (@alias.node) ctx = "store" +} + +(match_or_pattern + (_) @pattern +) @match_or_pattern +{ + edge @match_or_pattern.node -> @pattern.node + attr (@match_or_pattern.node -> @pattern.node) patterns = (named-child-index @pattern) +} + +(match_literal_pattern !real (_) @literal) @match_literal_pattern +{ + attr (@match_literal_pattern.node) literal = @literal.node + attr (@literal.node) ctx = "load" +} + +(match_literal_pattern + prefix_operator: _? @prefix_op + real: (_) @left + operator: _? @op + imaginary: (_)? @right +) @match_literal_pattern +{ + ; Set `left_node` to point to the left hand side (or only part) of the literal, + ; synthesizing it if needed. + var left_node = #null + if some @prefix_op { + set left_node = (ast-node @left "UnaryOp") + attr (left_node) _start_location = (location-start @prefix_op) + attr (left_node) operand = @left.node + attr (left_node) op = "usub" + } else { + set left_node = @left.node + } + attr (left_node) ctx = "load" + ; Synthesize the binary operator node, if needed. + var literal_node = #null + if some @right { + ; Synthesize the node for the binary operation + set literal_node = (ast-node @match_literal_pattern "BinOp") + attr (literal_node) left = left_node + attr (literal_node) right = @right.node + attr (literal_node) op = (source-text @op) + attr (@right.node) ctx = "load" + attr (literal_node) ctx = "load" + } else { + set literal_node = left_node + } + attr (@match_literal_pattern.node) literal = literal_node +} + +(match_capture_pattern (identifier) @pattern) @match_capture_pattern +{ + attr (@match_capture_pattern.node) variable = @pattern.node + attr (@pattern.node) ctx = "store" +} + +; We have a structure where the match_value_pattern has a child for each +; step in the attribute access. +; We will turn each child into an actual attribute access of its predecessor. +; +; We start with (@match_value_pattern) -> id_1 .. id_n +; result is +; id_1 is a Name +; for i > 1: +; @id_i -skip-> Attribute -value-> @id_{i-1} +; -attr-> #text +; @match_value_pattern -value-> @id_n + +(match_value_pattern + (identifier) @obj + . + (identifier) @attr +) @match_value_pattern +{ + let attribute = (ast-node @attr "Attribute") + attr (@attr.node) _skip_to = attribute + attr (attribute) value = @obj.node + attr (attribute) attr = (source-text @attr) + attr (attribute) ctx = "load" +} + +; First id +; this needs a ctx +(match_value_pattern + . + (identifier) @id +) @match_value_pattern +{ + attr (@id.node) ctx = "load" +} + +; Last id +; this should be linked from the pattern. +(match_value_pattern + (identifier) @attr + . +) @match_value_pattern +{ + attr (@match_value_pattern.node) value = @attr.node +} + +; Group patterns only exist in the parser. +; They are elided from the AST, where the information is +; instead recorded in the field `parenthesised`. +(match_group_pattern + content: (_) @pattern +) @match_group_pattern +{ + attr (@match_group_pattern.node) _skip_to = @pattern.node + attr (@match_group_pattern.node) parenthesised = #true +} + +(match_sequence_pattern + (_) @pattern +) @match_sequence_pattern +{ + edge @match_sequence_pattern.node -> @pattern.node + attr (@match_sequence_pattern.node -> @pattern.node) patterns = (named-child-index @pattern) +} + +(match_star_pattern + target: (_) @target +) @match_star_pattern +{ + attr (@match_star_pattern.node) target = @target.node +} + +(match_mapping_pattern + [ + (match_key_value_pattern) @mapping + (match_double_star_pattern) @mapping + ] +) @pattern +{ + edge @pattern.node -> @mapping.node + attr (@pattern.node -> @mapping.node) mappings = (named-child-index @mapping) +} + +(match_double_star_pattern + target: (_) @target +) @match_double_star_pattern +{ + attr (@match_double_star_pattern.node) target = @target.node +} + +(match_key_value_pattern + key: (_) @key + value: (_) @value +) @key_value +{ + attr (@key_value.node) key = @key.node + attr (@key_value.node) value = @value.node +} + +; Similar situation to the match_value_pattern. +; We have a structure where the match_class_pattern has a child for each +; step in the attribute access. +; We will turn each child into an actual attribute access of its predecessor. + +(pattern_class_name + (identifier) @obj + . + (identifier) @attr +) +{ + let attribute = (ast-node @attr "Attribute") + attr (@attr.node) _skip_to = attribute + attr (attribute) value = @obj.node + attr (attribute) attr = (source-text @attr) + attr (attribute) ctx = "load" +} + +; First id +(pattern_class_name + . + (identifier) @id +) +{ + attr (@id.node) ctx = "load" +} + +; Last id +; this should be linked from the pattern. +(match_class_pattern + class: (pattern_class_name + (identifier) @attr + . + ) +) @match_class_pattern +{ + attr (@match_class_pattern.node) class_name = @attr.node +} + +(match_class_pattern + (match_positional_pattern (_) @positional) @positional_pattern +) @match_class_pattern +{ + edge @match_class_pattern.node -> @positional.node + attr (@match_class_pattern.node -> @positional.node) positional = (named-child-index @positional_pattern) +} + +(match_class_pattern + (match_keyword_pattern) @keyword +) @match_class_pattern +{ + edge @match_class_pattern.node -> @keyword.node + attr (@match_class_pattern.node -> @keyword.node) keyword = (named-child-index @keyword) +} + +(match_keyword_pattern + attribute: (_) @attribute +) @match_keyword_pattern +{ + attr (@match_keyword_pattern.node) attribute = @attribute.node + attr (@attribute.node) ctx = "load" +} + +(match_keyword_pattern + value: (_) @pattern +) @match_keyword_pattern +{ attr (@match_keyword_pattern.node) value = @pattern.node} + +;;;;;; End of Match (`match a: ...`) + +;;;;;; Lambda (`lambda a: ...`) + +; Lambdas are tricky, much like function definitions. +; +; One complication is that we need to distinguish the cases where the parameter has a default value and +; where it does not. This leads to an unfortunate explosion in mostly similar cases... + + +(lambda body: (_) @body) @lambda +{ + + ; Lambdas contain a `Function` much like regular functions. + let @lambda.function = (ast-node @lambda "Function") + attr (@lambda.function) name = "lambda" + attr (@lambda.node) inner_scope = @lambda.function + + ; The single child of this function is a synthesised return statement. + let return = (ast-node @body "Return") + edge @lambda.function -> return + attr (@lambda.function -> return) body = 0 + + attr (return) value = @body.node + attr (@body.node) ctx = "load" +} + +; Lambdas without parameters just get a dummy `arguments` child. +(lambda !parameters) @lambda +{ + attr (@lambda.node) args = (ast-node @lambda "arguments") +} + +(lambda parameters: (_) @params) @lambda +{ + attr (@lambda.node) args = @params.node +} + +(lambda + parameters: (lambda_parameters + (list_splat_pattern vararg: (_) @vararg) @starred + ) +) @lambda +{ + attr (@lambda.function) vararg = @vararg.node + attr (@starred.node) ctx = "param" ; Not actually used + attr (@vararg.node) ctx = "param" +} + +(lambda + parameters: (lambda_parameters + (dictionary_splat_pattern kwarg: (_) @kwarg) + ) +) @lambda +{ + attr (@lambda.function) kwarg = @kwarg.node + attr (@kwarg.node) ctx = "param" +} + +(lambda + parameters: (lambda_parameters + [(list_splat_pattern) (keyword_separator)]? @is_kwarg + [ + (identifier) @name + (default_parameter + name: (_) @name + value: (_) @value + ) + ] @param + ) @params +) @lambda +{ + let none = (ast-node @params "None") + attr (none) _is_literal = #null + attr (none) ctx = "load" + edge @params.node -> none + + ; Even though lambda parameters cannot have annotations, we must still record this fact. + if some @is_kwarg { + attr (@params.node -> none) kw_annotations = (named-child-index @param) + } else { + attr (@params.node -> none) annotations = (named-child-index @param) + } + + edge @lambda.function -> @name.node + attr (@name.node) ctx = "param" + + if some @is_kwarg { + attr (@lambda.function -> @name.node) kwonlyargs = (named-child-index @param) + } + else {  + attr (@lambda.function -> @name.node) args = (named-child-index @param) + } + + var default_node = none + if some @value { + set default_node = @value.node + edge @params.node -> default_node + attr (default_node) ctx = "load" + } + if some @is_kwarg { + attr (@params.node -> default_node) kw_defaults = (named-child-index @param) + } else { + attr (@params.node -> default_node) defaults = (named-child-index @param) + } +} + +;;;;;; End of Lambda (`lambda a: ...`) + +;;;;;; Function (`def a(b, c): ...`) + +; Much like lambdas, the main difficulty here is that we need to account for the absence of the positional +; argument separator. We do this using the exact same machinery. +; +; Also, all arguments can now also have a type/annotation, so get ready for _twice_ the number of cases. + +(function_definition + name: (_) @name + ":" @end +) @funcdef +{ + let end = (location-end @end) + + attr (@funcdef.node) _location_end = end + + edge @funcdef.node -> @name.node + attr (@funcdef.node -> @name.node) targets = 0 + attr (@name.node) ctx = "store" + + let @funcdef.funcexpr = (ast-node @funcdef "FunctionExpr") + attr (@funcdef.funcexpr) _location_end = end + attr (@funcdef.node) value = @funcdef.funcexpr + attr (@funcdef.funcexpr) name = (source-text @name) + + let @funcdef.function = (ast-node @funcdef "Function") + attr (@funcdef.function) _location_end = end + attr (@funcdef.function) name = (source-text @name) + attr (@funcdef.funcexpr) inner_scope = @funcdef.function +} + +(function_definition + body: (block (_) @stmt) +) @funcdef +{ + edge @funcdef.function -> @stmt.node + attr (@funcdef.function -> @stmt.node) body = (named-child-index @stmt) +} + +(function_definition + parameters: (_) @params +) @funcdef +{ + attr (@funcdef.funcexpr) args = @params.node +} + + +(function_definition + parameters: (parameters + [(list_splat_pattern) (keyword_separator)]? @is_kwarg + [ + (identifier) @name + (default_parameter + name: (_) @name + value: (_) @value + ) + (typed_parameter + (identifier) @name + . + type: (type (expression) @type) + ) + (typed_default_parameter + name: (_) @name + type: (type (expression) @type) + value: (_) @value + ) + ] @param + ) @params +) @funcdef +{ + let none = (ast-node @params "None") + attr (none) _is_literal = #null + attr (none) ctx = "load" + edge @params.node -> none + + var type_node = none + if some @type { + set type_node = @type.node + edge @params.node -> type_node + attr (type_node) ctx = "load" + } + + if some @is_kwarg { + attr (@params.node -> type_node) kw_annotations = (named-child-index @param) + } else { + attr (@params.node -> type_node) annotations = (named-child-index @param) + } + + edge @funcdef.function -> @name.node + attr (@name.node) ctx = "param" + + if some @is_kwarg { + attr (@funcdef.function -> @name.node) kwonlyargs = (named-child-index @param) + } + else {  + attr (@funcdef.function -> @name.node) args = (named-child-index @param) + } + + var default_node = none + if some @value { + set default_node = @value.node + edge @params.node -> default_node + attr (default_node) ctx = "load" + } + if some @is_kwarg { + attr (@params.node -> default_node) kw_defaults = (named-child-index @param) + } else { + attr (@params.node -> default_node) defaults = (named-child-index @param) + } +} + +; `*args` argument +(function_definition + parameters: (parameters + [ + (list_splat_pattern vararg: (_) @name) @starred + (typed_parameter + (list_splat_pattern vararg: (_) @name) @starred + type: (type (expression) @type) + ) + ] + ) @params +) @funcdef +{ + attr (@funcdef.function) vararg = @name.node + attr (@starred.node) ctx = "param" ; Not actually used + attr (@name.node) ctx = "param" + if some @type { + attr (@params.node) varargannotation = @type.node + attr (@type.node) ctx = "load" + } +} + +; Return type +(function_definition + return_type: (type (expression) @type) +) @funcdef +{ + attr (@funcdef.funcexpr) returns = @type.node + attr (@type.node) ctx = "load" +} + +; `**kwargs` argument +(function_definition + (parameters + [ + (dictionary_splat_pattern kwarg: (identifier) @name) + (typed_parameter + (dictionary_splat_pattern kwarg: (identifier) @name) + type: (type (expression) @type) + ) + ] + ) @params +) @funcdef +{ + attr (@funcdef.function) kwarg = @name.node + attr (@name.node) ctx = "param" + if some @type { + attr (@params.node) kwargannotation = @type.node + attr (@type.node) ctx = "load" + } +} + +;;; Decorators + +(decorated_definition + . (decorator) @first + definition: (function_definition name: (_) @name ":" @end) @funcdef +) @decorator +{ + attr (@decorator.node) value = @first.node + attr (@decorator.node) _location_start = (location-start @funcdef) + attr (@decorator.node) _location_end = (location-end @end) + edge @decorator.node -> @name.node + attr (@decorator.node -> @name.node) targets = 0 +} + +(decorated_definition + . (decorator) @first + definition: (class_definition name: (_) @name ":" @end) @funcdef +) @decorator +{ + attr (@decorator.node) value = @first.node + attr (@decorator.node) _location_start = (location-start @funcdef) + attr (@decorator.node) _location_end = (location-end @end) + edge @decorator.node -> @name.node + attr (@decorator.node -> @name.node) targets = 0 +} + +(decorator (expression) @exp) @decorator +{ + attr (@decorator.node) _location_start = (location-start @exp) + attr (@exp.node) ctx = "load" +} + +(decorated_definition + (decorator (expression) @exp1) @dec1 + . (comment)* . + (decorator (expression) @exp2) @dec2 +) @decorator +{ + attr (@dec1.node) func = @exp1.node + edge @dec1.node -> @dec2.node + attr (@dec1.node -> @dec2.node) positional_args = 0 +} + +(decorated_definition + (decorator (expression) @exp) @last + . (comment)* . + definition: (function_definition) @funcdef +) @decorator +{ + attr (@last.node) func = @exp.node + edge @last.node -> @funcdef.funcexpr + attr (@last.node -> @funcdef.funcexpr) positional_args = 0 + attr (@last.node) _location_end = (location-end @exp) +} + +(decorated_definition + (decorator (expression) @exp) @last + . (comment)* . + definition: (class_definition) @class +) @decorator +{ + attr (@last.node) func = @exp.node + edge @last.node -> @class.class_expr + attr (@last.node -> @class.class_expr) positional_args = 0 + attr (@last.node) _location_end = (location-end @exp) +} + +;;; Type parameters + +(function_definition + type_parameters: (type_parameters type_parameter: (_) @param) +) @funcdef +{ + edge @funcdef.function -> @param.node + attr (@funcdef.function -> @param.node) type_parameters = (named-child-index @param) +} + +(class_definition + type_parameters: (type_parameters type_parameter: (_) @param) +) @class +{ + edge @class.class_expr -> @param.node + attr (@class.class_expr -> @param.node) type_parameters = (named-child-index @param) +} + +;;;;;; End of Function (`def a(b, c): ...`) + +;;;;;; TypeAlias (`type a[...] = ...`) + +(type_alias_statement + name: (_) @name + value: (_) @value +) @type_alias +{ + attr (@name.node) ctx = "store" + attr (@value.node) ctx = "load" + attr (@type_alias.node) name = @name.node + attr (@type_alias.node) value = @value.node +} + +(type_alias_statement + type_parameters: (type_parameters type_parameter: (_) @param) +) @type_alias +{ + edge @type_alias.node -> @param.node + attr (@type_alias.node -> @param.node) type_parameters = (named-child-index @param) +} + +;;;;;; End of TypeAlias (`type a[...] = ...`) + +;;;;;; Type parameters (`T: ..., *T, **T`) + +(typevar_parameter + name: (_) @name + bound: (_)? @bound +) @typevar +{ + attr (@name.node) ctx = "store" + attr (@typevar.node) name = @name.node + if some @bound { + attr (@bound.node) ctx = "load" + attr (@typevar.node) bound = @bound.node + } +} + +(typevartuple_parameter + name: (_) @name +) @typevartuple +{ + attr (@name.node) ctx = "store" + attr (@typevartuple.node) name = @name.node +} + +(paramspec_parameter + name: (_) @name +) @paramspec +{ + attr (@name.node) ctx = "store" + attr (@paramspec.node) name = @name.node +} + +;;;;;; End of Type parameters (`T: ..., *T, **T`) + +; Nodes with an `elts` field +[ + ; Left hand side of an assignment such as `foo, bar = ...` + (pattern_list element: (_) @elt) @parent + + ; An unadorned tuple (such as in `x = y, z`) + (expression_list element: (_) @elt) @parent + + ; A regular tuple such as `(x, y, z)` + (tuple element: (_) @elt) @parent + + (tuple_pattern element: (_) @elt) @parent +] +{ + edge @parent.node -> @elt.node + attr (@parent.node -> @elt.node) elts = (named-child-index @elt) +} + + + +; Expressions that do not produce an `Expr` node in the AST. +(expression_statement [(assignment) (augmented_assignment)] @inner) @outer +{ + attr (@outer.node) _skip_to = @inner.node +} + +; Expressions that may result in an `Expr` node in the AST +; ("may" because of the `_skip_to` field). +(expression_statement . (_) @expr . ) @stmt +{ + attr (@stmt.node) value = @expr.node + attr (@expr.node) ctx = "load" +} + + +; Sequence expressions where the elements inherit the load/store context +[ + (list element: (_) @elt) + (tuple element: (_) @elt) + (tuple_pattern element: (_) @elt) + (pattern_list element: (_) @elt) + (expression_list element: (_) @elt) + (parenthesized_expression inner: (_) @elt) + (set element: (_) @elt) + (match_sequence_pattern (_) @elt) +] @seq +{ + attr (@elt.node) _inherited_ctx = @seq.node +} + +[(tuple element: (_)) (tuple_pattern)] @tup +{ + attr (@tup.node) parenthesised = #true +} diff --git a/python/extractor/tsg-python/rust-toolchain.toml b/python/extractor/tsg-python/rust-toolchain.toml new file mode 100644 index 00000000000..fe5c5df29ff --- /dev/null +++ b/python/extractor/tsg-python/rust-toolchain.toml @@ -0,0 +1,7 @@ +# This file specifies the Rust version used to develop and test the Python +# extractor. It is set to the lowest version of Rust we want to support. + +[toolchain] +channel = "1.68" +profile = "minimal" +components = [ "rustfmt" ] diff --git a/python/extractor/tsg-python/src/main.rs b/python/extractor/tsg-python/src/main.rs new file mode 100644 index 00000000000..fa528d8138d --- /dev/null +++ b/python/extractor/tsg-python/src/main.rs @@ -0,0 +1,572 @@ +// -*- coding: utf-8 -*- +// ------------------------------------------------------------------------------------------------ +// Copyright © 2021, GitHub. +// Licensed under either of Apache License, Version 2.0, or MIT license, at your option. +// Please see the LICENSE-APACHE or LICENSE-MIT files in this distribution for license details. +// ------------------------------------------------------------------------------------------------ + +use std::path::Path; + +use anyhow::anyhow; +use anyhow::Context as _; +use anyhow::Result; +use clap::App; +use clap::Arg; +use tree_sitter::Parser; +use tree_sitter_graph::ast::File; +use tree_sitter_graph::functions::Functions; +use tree_sitter_graph::ExecutionConfig; +use tree_sitter_graph::Identifier; +use tree_sitter_graph::NoCancellation; +use tree_sitter_graph::Variables; + +const BUILD_VERSION: &'static str = env!("CARGO_PKG_VERSION"); + +pub mod extra_functions { + use tree_sitter_graph::functions::{Function, Parameters}; + use tree_sitter_graph::graph::{Graph, Value}; + use tree_sitter_graph::{ExecutionError, Identifier}; + + pub struct Location; + + fn get_location(node: Value, graph: &Graph) -> Result<Value, ExecutionError> { + let node = graph[node.into_syntax_node_ref()?]; + let start = node.start_position(); + let end = node.end_position(); + Ok(Value::List( + vec![start.row, start.column, end.row, end.column] + .into_iter() + .map(|v| Value::from(v as u32)) + .collect(), + )) + } + + impl Function for Location { + fn call( + &self, + graph: &mut Graph, + _source: &str, + parameters: &mut dyn Parameters, + ) -> Result<Value, ExecutionError> { + let node = parameters.param()?; + parameters.finish()?; + get_location(node, graph) + } + } + + pub struct LocationStart; + + impl Function for LocationStart { + fn call( + &self, + graph: &mut Graph, + _source: &str, + parameters: &mut dyn Parameters, + ) -> Result<Value, ExecutionError> { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + parameters.finish()?; + let start = node.start_position(); + Ok(Value::List( + vec![start.row, start.column] + .into_iter() + .map(|v| Value::from(v as u32)) + .collect(), + )) + } + } + + pub struct LocationEnd; + + impl Function for LocationEnd { + fn call( + &self, + graph: &mut Graph, + _source: &str, + parameters: &mut dyn Parameters, + ) -> Result<Value, ExecutionError> { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + parameters.finish()?; + let end = node.end_position(); + Ok(Value::List( + vec![end.row, end.column] + .into_iter() + .map(|v| Value::from(v as u32)) + .collect(), + )) + } + } + + pub struct AstNode; + + impl Function for AstNode { + fn call( + &self, + graph: &mut Graph, + _source: &str, + parameters: &mut dyn Parameters, + ) -> Result<Value, ExecutionError> { + let tree_sitter_node = parameters.param()?; + let kind = parameters.param()?; + parameters.finish()?; + let node = graph.add_graph_node(); + let loc = get_location(tree_sitter_node, graph)?; + graph[node] + .attributes + .add(Identifier::from("_location"), loc) + .map_err(|_| { + ExecutionError::DuplicateAttribute(format!( + " _location on graph node ({:?})", + node + )) + })?; + graph[node] + .attributes + .add(Identifier::from("_kind"), kind) + .map_err(|_| { + ExecutionError::DuplicateAttribute(format!(" _kind on graph node ({:?})", node)) + })?; + Ok(Value::GraphNode(node)) + } + } + + /// A struct representing the prefix on a Python string. + struct Prefix { + flags: String, + quotes: String, + } + + impl Prefix { + fn full(&self) -> String { + format!("{}{}", self.flags, self.quotes) + } + + fn safe(&self) -> Prefix { + Prefix { + flags: self.flags.clone().replace("f", "").replace("F", ""), + quotes: self.quotes.clone(), + } + } + } + + fn get_prefix(s: &str) -> Prefix { + let flags_matcher = regex::Regex::new("^[bfurBFUR]{0,2}").unwrap(); + let mut end = 0; + let flags = match flags_matcher.find(s) { + Some(m) => { + end = m.end(); + &s[m.start()..m.end()] + } + None => "", + }; + let mut quotes = ""; + if s[end..].starts_with("\"\"\"") { + quotes = "\"\"\""; + } else if s[end..].starts_with("'''") { + quotes = "'''"; + } else if s[end..].starts_with('"') { + quotes = "\""; + } else if s[end..].starts_with('\'') { + quotes = "'"; + } else if s[end..].starts_with('}') { + quotes = "}"; + } + Prefix { + flags: flags.to_lowercase().to_owned(), + quotes: quotes.to_owned(), + } + } + + #[test] + fn test_get_prefix() { + let p = get_prefix("rb'''hello'''"); + assert_eq!(p.flags, "rb"); + assert_eq!(p.quotes, "'''"); + let p = get_prefix("Br\"\"\"hello\"\"\""); + assert_eq!(p.flags, "Br"); + assert_eq!(p.quotes, "\"\"\""); + let p = get_prefix("FR\"hello\""); + assert_eq!(p.flags, "FR"); + assert_eq!(p.quotes, "\""); + let p = get_prefix("uR'hello'"); + assert_eq!(p.flags, "uR"); + assert_eq!(p.quotes, "'"); + let p = get_prefix("''"); + assert_eq!(p.flags, ""); + assert_eq!(p.quotes, "'"); + let p = get_prefix("\"\""); + assert_eq!(p.flags, ""); + assert_eq!(p.quotes, "\""); + let p = get_prefix("\"\"\"\"\"\""); + assert_eq!(p.flags, ""); + assert_eq!(p.quotes, "\"\"\""); + } + + fn get_string_contents(s: String) -> String { + let prefix = get_prefix(&s); + let contents = s.clone(); + let contents = contents.strip_prefix(prefix.full().as_str()).unwrap(); + let contents = contents.strip_suffix(prefix.quotes.as_str()).unwrap(); + + contents.to_owned() + } + + #[test] + fn test_get_string_contents() { + let s = "rb'''hello'''"; + assert_eq!(get_string_contents(s.to_owned()), "hello"); + let s = "Br\"\"\"hello\"\"\""; + assert_eq!(get_string_contents(s.to_owned()), "hello"); + let s = "FR\"hello\""; + assert_eq!(get_string_contents(s.to_owned()), "hello"); + let s = "uR'hello'"; + assert_eq!(get_string_contents(s.to_owned()), "hello"); + let s = "''"; + assert_eq!(get_string_contents(s.to_owned()), ""); + let s = "\"\""; + assert_eq!(get_string_contents(s.to_owned()), ""); + let s = "\"\"\"\"\"\""; + assert_eq!(get_string_contents(s.to_owned()), ""); + let s = "''''''"; + assert_eq!(get_string_contents(s.to_owned()), ""); + } + + pub struct StringPrefix; + + impl Function for StringPrefix { + fn call( + &self, + graph: &mut Graph, + source: &str, + parameters: &mut dyn Parameters, + ) -> Result<Value, ExecutionError> { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + parameters.finish()?; + let prefix = get_prefix(&source[node.byte_range()]).full(); + Ok(Value::String(prefix)) + } + } + + pub struct StringContents; + + impl Function for StringContents { + fn call( + &self, + graph: &mut Graph, + source: &str, + parameters: &mut dyn Parameters, + ) -> Result<Value, ExecutionError> { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + parameters.finish()?; + let contents = get_string_contents(source[node.byte_range()].to_owned()); + Ok(Value::String(contents)) + } + } + + pub struct StringQuotes; + + impl Function for StringQuotes { + fn call( + &self, + graph: &mut Graph, + source: &str, + parameters: &mut dyn Parameters, + ) -> Result<Value, ExecutionError> { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + parameters.finish()?; + let prefix = get_prefix(&source[node.byte_range()]); + Ok(Value::String(prefix.quotes)) + } + } + + // Gets a version of the prefix that can be used in a call to `literal_eval`. To do so, we must remove + // any `f` or `F` characters, if present. + pub struct StringSafePrefix; + + impl Function for StringSafePrefix { + fn call( + &self, + graph: &mut Graph, + source: &str, + parameters: &mut dyn Parameters, + ) -> Result<Value, ExecutionError> { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + parameters.finish()?; + let prefix = get_prefix(&source[node.byte_range()]).full(); + let prefix = prefix.replace("f", "").replace("F", ""); + Ok(Value::String(prefix)) + } + } + + // Gets a version of the string where `f` and `F` have been stripped from the prefix. + pub struct SafeString; + + impl Function for SafeString { + fn call( + &self, + graph: &mut Graph, + source: &str, + parameters: &mut dyn Parameters, + ) -> Result<Value, ExecutionError> { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + parameters.finish()?; + let prefix = get_prefix(&source[node.byte_range()]); + let contents = get_string_contents(source[node.byte_range()].to_owned()); + let s = format!("{}{}{}", prefix.safe().full(), contents, prefix.quotes); + Ok(Value::String(s)) + } + } + + pub struct UnnamedChildIndex; + + impl Function for UnnamedChildIndex { + fn call( + &self, + graph: &mut Graph, + _source: &str, + parameters: &mut dyn Parameters, + ) -> Result<Value, ExecutionError> { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + parameters.finish()?; + let parent = match node.parent() { + Some(parent) => parent, + None => { + return Err(ExecutionError::FunctionFailed( + "unnamed-child-index".into(), + format!("Cannot call child-index on the root node"), + )) + } + }; + let mut tree_cursor = parent.walk(); + let index = parent + .children(&mut tree_cursor) + .position(|child| child == node) + .ok_or_else(|| { + ExecutionError::FunctionFailed( + "unnamed-child-index".into(), + format!("Called child-index on a non-named child"), + ) + })?; + Ok(Value::Integer(index as u32)) + } + } + + pub struct ConcatenateStrings; + + impl Function for ConcatenateStrings { + fn call( + &self, + _graph: &mut Graph, + _source: &str, + parameters: &mut dyn Parameters, + ) -> Result<Value, ExecutionError> { + let mut result = String::new(); + while let Ok(param) = parameters.param() { + let string = param.into_string()?; + result.push_str(string.as_str()); + } + Ok(Value::String(result)) + } + } + + pub struct InstanceOf; + + impl Function for InstanceOf { + fn call( + &self, + graph: &mut Graph, + _source: &str, + parameters: &mut dyn Parameters, + ) -> Result<Value, ExecutionError> { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + let class_name = parameters.param()?.into_string()?; + parameters.finish()?; + let node_type = node.kind(); + let class_name = class_name.as_str(); + let is_instance = node_type == class_name; + Ok(Value::Boolean(is_instance)) + } + } + + pub struct GetParent; + + impl Function for GetParent { + fn call( + &self, + graph: &mut Graph, + _source: &str, + parameters: &mut dyn Parameters, + ) -> Result<Value, ExecutionError> { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + parameters.finish()?; + let parent = node.parent().ok_or_else(|| { + ExecutionError::FunctionFailed( + "get-parent".into(), + format!("Cannot call get-parent on the root node"), + ) + })?; + Ok(Value::SyntaxNode(graph.add_syntax_node(parent))) + } + } + + pub struct HasNamedChild; + + impl Function for HasNamedChild { + fn call( + &self, + graph: &mut Graph, + _source: &str, + parameters: &mut dyn Parameters, + ) -> Result<Value, ExecutionError> { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + let field_name = parameters.param()?.into_string()?; + parameters.finish()?; + let field_name = field_name.as_str(); + let has_named_child = node.child_by_field_name(field_name).is_some(); + Ok(Value::Boolean(has_named_child)) + } + } + + pub struct IsBooleanOperator; + + impl Function for IsBooleanOperator { + fn call( + &self, + graph: &mut Graph, + source: &str, + parameters: &mut dyn Parameters, + ) -> Result<Value, ExecutionError> { + let node = graph[parameters.param()?.into_syntax_node_ref()?]; + let expected_op_type = parameters.param()?.into_string()?; + parameters.finish()?; + if let Some(op) = node.child_by_field_name("operator") { + let op_type = source[op.byte_range()].to_string(); + let is_boolean_op = expected_op_type == op_type; + Ok(Value::Boolean(is_boolean_op)) + } else { + Ok(Value::Boolean(false)) + } + } + } + + pub struct Modulo; + + impl Function for Modulo { + fn call( + &self, + _graph: &mut Graph, + _source: &str, + parameters: &mut dyn Parameters, + ) -> Result<Value, ExecutionError> { + let left = parameters.param()?.into_integer()?; + let right = parameters.param()?.into_integer()?; + parameters.finish()?; + Ok(Value::Integer(left % right)) + } + } +} + +fn main() -> Result<()> { + let matches = App::new("tsg-python") + .version(BUILD_VERSION) + .author("Taus Brock-Nannestad <tausbn@github.com>") + .about("Extracts a Python AST from the parse tree given by tree-sitter-python") + .arg( + Arg::with_name("tsg") + .short("t") + .long("tsg") + .takes_value(true) + .required(false), + ) + .arg(Arg::with_name("source").index(1).required(true)) + .get_matches(); + + let tsg_path = if matches.is_present("tsg") { + Path::new(matches.value_of("tsg").unwrap()) + .display() + .to_string() + } else { + "bundled `python.tsg`".to_owned() + }; + let source_path = Path::new(matches.value_of("source").unwrap()); + let language = tree_sitter_python::language(); + let mut parser = Parser::new(); + parser.set_language(language)?; + // Statically include `python.tsg`: + let tsg = if matches.is_present("tsg") { + std::fs::read(&tsg_path).with_context(|| format!("Error reading TSG file {}", tsg_path))? + } else { + include_bytes!("../python.tsg").to_vec() + }; + let tsg = String::from_utf8(tsg)?; + let source = std::fs::read(source_path) + .with_context(|| format!("Error reading source file {}", source_path.display()))?; + let source = String::from_utf8(source)?; + let tree = parser + .parse(&source, None) + .ok_or_else(|| anyhow!("Could not parse {}", source_path.display()))?; + let file = File::from_str(language, &tsg) + .with_context(|| anyhow!("Error parsing TSG file {}", tsg_path))?; + let mut functions = Functions::stdlib(); + functions.add(Identifier::from("location"), extra_functions::Location); + functions.add( + Identifier::from("location-start"), + extra_functions::LocationStart, + ); + functions.add( + Identifier::from("location-end"), + extra_functions::LocationEnd, + ); + functions.add( + Identifier::from("string-prefix"), + extra_functions::StringPrefix, + ); + functions.add( + Identifier::from("string-contents"), + extra_functions::StringContents, + ); + + functions.add( + Identifier::from("string-quotes"), + extra_functions::StringQuotes, + ); + + functions.add( + Identifier::from("string-safe-prefix"), + extra_functions::StringSafePrefix, + ); + + functions.add(Identifier::from("safe-string"), extra_functions::SafeString); + + functions.add( + Identifier::from("unnamed-child-index"), + extra_functions::UnnamedChildIndex, + ); + functions.add(Identifier::from("ast-node"), extra_functions::AstNode); + + functions.add( + Identifier::from("concatenate-strings"), + extra_functions::ConcatenateStrings, + ); + + functions.add(Identifier::from("instance-of"), extra_functions::InstanceOf); + + functions.add(Identifier::from("get-parent"), extra_functions::GetParent); + + functions.add( + Identifier::from("has-named-child"), + extra_functions::HasNamedChild, + ); + functions.add( + Identifier::from("is-boolean-operator"), + extra_functions::IsBooleanOperator, + ); + + functions.add(Identifier::from("mod"), extra_functions::Modulo); + let globals = Variables::new(); + let mut config = ExecutionConfig::new(&mut functions, &globals).lazy(false); + let graph = file + .execute(&tree, &source, &mut config, &NoCancellation) + .with_context(|| format!("Could not execute TSG file {}", tsg_path))?; + print!("{}", graph.pretty_print()); + Ok(()) +} diff --git a/python/extractor/tsg-python/tree-sitter-python/.gitignore b/python/extractor/tsg-python/tree-sitter-python/.gitignore new file mode 100644 index 00000000000..c99713834f2 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/.gitignore @@ -0,0 +1,7 @@ +Cargo.lock +package-lock.json +node_modules +build +*.log +/examples/*/ +/target/ diff --git a/python/extractor/tsg-python/tree-sitter-python/.npmignore b/python/extractor/tsg-python/tree-sitter-python/.npmignore new file mode 100644 index 00000000000..8e142f748b2 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/.npmignore @@ -0,0 +1,6 @@ +corpus +examples +build +script +target +bindings/rust diff --git a/python/extractor/tsg-python/tree-sitter-python/BUILD.bazel b/python/extractor/tsg-python/tree-sitter-python/BUILD.bazel new file mode 100644 index 00000000000..98b636c0d79 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/BUILD.bazel @@ -0,0 +1,38 @@ +load("@rules_rust//cargo:defs.bzl", "cargo_build_script") +load("@rules_rust//rust:defs.bzl", "rust_library") +load("@tsg_python_crate_index//:defs.bzl", "aliases", "all_crate_deps") + +package(default_visibility = ["//visibility:public"]) + +# This will run the build script from the root of the workspace, and +# collect the outputs. +cargo_build_script( + name = "tsg-build-script", + srcs = ["bindings/rust/build.rs"], + data = glob([ + "src/**", + ]), + deps = all_crate_deps( + build = True, + ), +) + +rust_library( + name = "tree-sitter-python", + srcs = [ + "bindings/rust/lib.rs", + ], + aliases = aliases(), + compile_data = glob([ + "src/**", + "queries/**", + ]) + [ + "grammar.js", + ], + proc_macro_deps = all_crate_deps( + proc_macro = True, + ), + deps = [":tsg-build-script"] + all_crate_deps( + normal = True, + ), +) diff --git a/python/extractor/tsg-python/tree-sitter-python/Cargo.toml b/python/extractor/tsg-python/tree-sitter-python/Cargo.toml new file mode 100644 index 00000000000..4c863753b93 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/Cargo.toml @@ -0,0 +1,31 @@ +[package] +name = "tree-sitter-python" +description = "Python grammar for the tree-sitter parsing library" +version = "0.19.0" +authors = [ + "Max Brunsfeld <maxbrunsfeld@gmail.com>", + "Douglas Creager <dcreager@dcreager.net>", +] +license = "MIT" +readme = "bindings/rust/README.md" +keywords = ["incremental", "parsing", "python"] +categories = ["parsing", "text-editors"] +repository = "https://github.com/tree-sitter/tree-sitter-python" +edition = "2018" + +build = "bindings/rust/build.rs" +include = [ + "bindings/rust/*", + "grammar.js", + "queries/*", + "src/*", +] + +[lib] +path = "bindings/rust/lib.rs" + +[dependencies] +tree-sitter = ">= 0.20, < 0.21" + +[build-dependencies] +cc = "1.0" diff --git a/python/extractor/tsg-python/tree-sitter-python/LICENSE b/python/extractor/tsg-python/tree-sitter-python/LICENSE new file mode 100644 index 00000000000..ff8ed93cb0d --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Max Brunsfeld + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/python/extractor/tsg-python/tree-sitter-python/README.md b/python/extractor/tsg-python/tree-sitter-python/README.md new file mode 100644 index 00000000000..a7cb44c77ef --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/README.md @@ -0,0 +1,13 @@ +tree-sitter-python +================== + +[![build](https://github.com/tree-sitter/tree-sitter-python/actions/workflows/ci.yml/badge.svg)](https://github.com/tree-sitter/tree-sitter-python/actions/workflows/ci.yml) + +Python grammar for [tree-sitter][]. + +[tree-sitter]: https://github.com/tree-sitter/tree-sitter + +#### References + +* [Python 2 Grammar](https://docs.python.org/2/reference/grammar.html) +* [Python 3 Grammar](https://docs.python.org/3/reference/grammar.html) diff --git a/python/extractor/tsg-python/tree-sitter-python/binding.gyp b/python/extractor/tsg-python/tree-sitter-python/binding.gyp new file mode 100644 index 00000000000..74256d45759 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/binding.gyp @@ -0,0 +1,19 @@ +{ + "targets": [ + { + "target_name": "tree_sitter_python_binding", + "include_dirs": [ + "<!(node -e \"require('nan')\")", + "src" + ], + "sources": [ + "src/parser.c", + "bindings/node/binding.cc", + "src/scanner.cc" + ], + "cflags_c": [ + "-std=c99", + ] + } + ] +} diff --git a/python/extractor/tsg-python/tree-sitter-python/bindings/node/binding.cc b/python/extractor/tsg-python/tree-sitter-python/bindings/node/binding.cc new file mode 100644 index 00000000000..90012a986d2 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/bindings/node/binding.cc @@ -0,0 +1,28 @@ +#include "tree_sitter/parser.h" +#include <node.h> +#include "nan.h" + +using namespace v8; + +extern "C" TSLanguage * tree_sitter_python(); + +namespace { + +NAN_METHOD(New) {} + +void Init(Local<Object> exports, Local<Object> module) { + Local<FunctionTemplate> tpl = Nan::New<FunctionTemplate>(New); + tpl->SetClassName(Nan::New("Language").ToLocalChecked()); + tpl->InstanceTemplate()->SetInternalFieldCount(1); + + Local<Function> constructor = Nan::GetFunction(tpl).ToLocalChecked(); + Local<Object> instance = constructor->NewInstance(Nan::GetCurrentContext()).ToLocalChecked(); + Nan::SetInternalFieldPointer(instance, 0, tree_sitter_python()); + + Nan::Set(instance, Nan::New("name").ToLocalChecked(), Nan::New("python").ToLocalChecked()); + Nan::Set(module, Nan::New("exports").ToLocalChecked(), instance); +} + +NODE_MODULE(tree_sitter_python_binding, Init) + +} // namespace diff --git a/python/extractor/tsg-python/tree-sitter-python/bindings/node/index.js b/python/extractor/tsg-python/tree-sitter-python/bindings/node/index.js new file mode 100644 index 00000000000..e0f77d8003a --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/bindings/node/index.js @@ -0,0 +1,19 @@ +try { + module.exports = require("../../build/Release/tree_sitter_python_binding"); +} catch (error1) { + if (error1.code !== 'MODULE_NOT_FOUND') { + throw error1; + } + try { + module.exports = require("../../build/Debug/tree_sitter_python_binding"); + } catch (error2) { + if (error2.code !== 'MODULE_NOT_FOUND') { + throw error2; + } + throw error1 + } +} + +try { + module.exports.nodeTypeInfo = require("../../src/node-types.json"); +} catch (_) {} diff --git a/python/extractor/tsg-python/tree-sitter-python/bindings/rust/README.md b/python/extractor/tsg-python/tree-sitter-python/bindings/rust/README.md new file mode 100644 index 00000000000..66976d4671f --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/bindings/rust/README.md @@ -0,0 +1,36 @@ +# tree-sitter-python + +This crate provides a Python grammar for the [tree-sitter][] parsing library. +To use this crate, add it to the `[dependencies]` section of your `Cargo.toml` +file. (Note that you will probably also need to depend on the +[`tree-sitter`][tree-sitter crate] crate to use the parsed result in any useful +way.) + +``` toml +[dependencies] +tree-sitter = "0.17" +tree-sitter-python = "0.17" +``` + +Typically, you will use the [language][language func] function to add this +grammar to a tree-sitter [Parser][], and then use the parser to parse some code: + +``` rust +let code = r#" + def double(x): + return x * 2 +"#; +let mut parser = Parser::new(); +parser.set_language(tree_sitter_python::language()).expect("Error loading Python grammar"); +let parsed = parser.parse(code, None); +``` + +If you have any questions, please reach out to us in the [tree-sitter +discussions] page. + +[Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html +[language func]: https://docs.rs/tree-sitter-python/*/tree_sitter_python/fn.language.html +[Parser]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Parser.html +[tree-sitter]: https://tree-sitter.github.io/ +[tree-sitter crate]: https://crates.io/crates/tree-sitter +[tree-sitter discussions]: https://github.com/tree-sitter/tree-sitter/discussions diff --git a/python/extractor/tsg-python/tree-sitter-python/bindings/rust/build.rs b/python/extractor/tsg-python/tree-sitter-python/bindings/rust/build.rs new file mode 100644 index 00000000000..4450166885e --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/bindings/rust/build.rs @@ -0,0 +1,28 @@ +use std::path::Path; +extern crate cc; + +fn main() { + let src_dir = Path::new("src"); + + let mut c_config = cc::Build::new(); + c_config.include(&src_dir); + c_config + .flag_if_supported("-Wno-unused-parameter") + .flag_if_supported("-Wno-unused-but-set-variable") + .flag_if_supported("-Wno-trigraphs"); + let parser_path = src_dir.join("parser.c"); + c_config.file(&parser_path); + println!("cargo:rerun-if-changed={}", parser_path.to_str().unwrap()); + c_config.compile("parser"); + + let mut cpp_config = cc::Build::new(); + cpp_config.cpp(true); + cpp_config.include(&src_dir); + cpp_config + .flag_if_supported("-Wno-unused-parameter") + .flag_if_supported("-Wno-unused-but-set-variable"); + let scanner_path = src_dir.join("scanner.cc"); + cpp_config.file(&scanner_path); + println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap()); + cpp_config.compile("scanner"); +} diff --git a/python/extractor/tsg-python/tree-sitter-python/bindings/rust/lib.rs b/python/extractor/tsg-python/tree-sitter-python/bindings/rust/lib.rs new file mode 100644 index 00000000000..7a58509e89c --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/bindings/rust/lib.rs @@ -0,0 +1,68 @@ +// -*- coding: utf-8 -*- +// ------------------------------------------------------------------------------------------------ +// Copyright © 2020, tree-sitter-python authors. +// See the LICENSE file in this repo for license details. +// ------------------------------------------------------------------------------------------------ + +//! This crate provides a Python grammar for the [tree-sitter][] parsing library. +//! +//! Typically, you will use the [language][language func] function to add this grammar to a +//! tree-sitter [Parser][], and then use the parser to parse some code: +//! +//! ``` +//! use tree_sitter::Parser; +//! +//! let code = r#" +//! def double(x): +//! return x * 2 +//! "#; +//! let mut parser = Parser::new(); +//! parser.set_language(tree_sitter_python::language()).expect("Error loading Python grammar"); +//! let parsed = parser.parse(code, None); +//! # let parsed = parsed.unwrap(); +//! # let root = parsed.root_node(); +//! # assert!(!root.has_error()); +//! ``` +//! +//! [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html +//! [language func]: fn.language.html +//! [Parser]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Parser.html +//! [tree-sitter]: https://tree-sitter.github.io/ + +use tree_sitter::Language; + +extern "C" { + fn tree_sitter_python() -> Language; +} + +/// Returns the tree-sitter [Language][] for this grammar. +/// +/// [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html +pub fn language() -> Language { + unsafe { tree_sitter_python() } +} + +/// The source of the Python tree-sitter grammar description. +pub const GRAMMAR: &'static str = include_str!("../../grammar.js"); + +/// The syntax highlighting query for this language. +pub const HIGHLIGHT_QUERY: &'static str = include_str!("../../queries/highlights.scm"); + +/// The content of the [`node-types.json`][] file for this grammar. +/// +/// [`node-types.json`]: https://tree-sitter.github.io/tree-sitter/using-parsers#static-node-types +pub const NODE_TYPES: &'static str = include_str!("../../src/node-types.json"); + +/// The symbol tagging query for this language. +pub const TAGGING_QUERY: &'static str = include_str!("../../queries/tags.scm"); + +#[cfg(test)] +mod tests { + #[test] + fn can_load_grammar() { + let mut parser = tree_sitter::Parser::new(); + parser + .set_language(super::language()) + .expect("Error loading Python grammar"); + } +} diff --git a/python/extractor/tsg-python/tree-sitter-python/grammar.js b/python/extractor/tsg-python/tree-sitter-python/grammar.js new file mode 100644 index 00000000000..3fc832cb4e5 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/grammar.js @@ -0,0 +1,1230 @@ +const PREC = { + // this resolves a conflict between the usage of ':' in a lambda vs in a + // typed parameter. In the case of a lambda, we don't allow typed parameters. + lambda: -2, + typed_parameter: -1, + conditional: -1, + + parenthesized_expression: 1, + parenthesized_list_splat: 1, + not: 12, + compare: 2, + or: 10, + and: 11, + bitwise_or: 13, + bitwise_and: 14, + xor: 15, + shift: 16, + plus: 17, + times: 18, + unary: 19, + power: 20, + call: 21, +} + +module.exports = grammar({ + name: 'python', + + extras: $ => [ + $.comment, + /[\s\f\uFEFF\u2060\u200B]|\\\r?\n/ + ], + + conflicts: $ => [ + [$.primary_expression, $.pattern], + [$.primary_expression, $.list_splat_pattern], + [$.tuple, $.tuple_pattern], + [$.list, $.list_pattern], + [$.with_item, $._collection_elements], + ], + + supertypes: $ => [ + $._simple_statement, + $._compound_statement, + $.expression, + $.primary_expression, + $.pattern, + $.parameter, + ], + + externals: $ => [ + $._newline, + $._indent, + $._dedent, + $._string_start, + $._string_content, + $._string_end, + ], + + inline: $ => [ + $._simple_statement, + $._compound_statement, + $._suite, + $._expressions, + $._left_hand_side, + $.keyword_identifier, + ], + + word: $ => $.identifier, + + rules: { + module: $ => repeat($._statement), + + _statement: $ => choice( + $._simple_statements, + $._compound_statement + ), + + // Simple statements + + _simple_statements: $ => seq( + $._simple_statement, + optional(repeat(seq( + $._semicolon, + $._simple_statement + ))), + optional($._semicolon), + $._newline + ), + + _simple_statement: $ => choice( + $.future_import_statement, + $.import_statement, + $.import_from_statement, + $.print_statement, + $.assert_statement, + $.expression_statement, + $.return_statement, + $.delete_statement, + $.raise_statement, + $.pass_statement, + $.break_statement, + $.continue_statement, + $.global_statement, + $.nonlocal_statement, + $.exec_statement, + $.type_alias_statement, + ), + + import_statement: $ => seq( + 'import', + $._import_list + ), + + import_prefix: $ => repeat1('.'), + + relative_import: $ => seq( + $.import_prefix, + optional(field('name', $.dotted_name)) + ), + + future_import_statement: $ => seq( + 'from', + '__future__', + 'import', + choice( + $._import_list, + seq('(', $._import_list, ')'), + ) + ), + + import_from_statement: $ => seq( + 'from', + field('module_name', choice( + $.relative_import, + $.dotted_name + )), + 'import', + choice( + $.wildcard_import, + $._import_list, + seq('(', $._import_list, ')') + ) + ), + + _import_list: $ => seq( + commaSep1(field('name', choice( + $.dotted_name, + $.aliased_import + ))), + optional(',') + ), + + aliased_import: $ => seq( + field('name', $.dotted_name), + 'as', + field('alias', $.identifier) + ), + + wildcard_import: $ => '*', + + print_statement: $ => choice( + prec(1, seq( + 'print', + $.chevron, + repeat(seq(',', field('argument', $.expression))), + optional(',')) + ), + prec(-10, seq( + 'print', + commaSep1(field('argument', $.expression)), + optional(',') + )) + ), + + chevron: $ => seq( + '>>', + $.expression + ), + + assert_statement: $ => seq( + 'assert', + commaSep1($.expression) + ), + + expression_statement: $ => choice( + $.expression, + $.expression_list, + $.assignment, + $.augmented_assignment, + $.yield + ), + + named_expression: $ => seq( + field('name', choice($.identifier, $.keyword_identifier)), + ':=', + field('value', $.expression) + ), + + return_statement: $ => seq( + 'return', + optional($._expressions) + ), + + delete_statement: $ => seq( + 'del', + field('target', $._expressions) + ), + + _expressions: $ => choice( + $.expression, + $.expression_list + ), + + raise_statement: $ => seq( + 'raise', + optional($._expressions), + optional(seq('from', field('cause', $.expression))) + ), + + pass_statement: $ => prec.left('pass'), + break_statement: $ => prec.left('break'), + continue_statement: $ => prec.left('continue'), + + // Compound statements + + _compound_statement: $ => choice( + $.if_statement, + $.for_statement, + $.while_statement, + $.try_statement, + $.with_statement, + $.match_statement, + $.function_definition, + $.class_definition, + $.decorated_definition + ), + + if_statement: $ => seq( + 'if', + field('condition', $.expression), + ':', + field('consequence', $._suite), + repeat(field('alternative', $.elif_clause)), + optional(field('alternative', $.else_clause)) + ), + + elif_clause: $ => seq( + 'elif', + field('condition', $.expression), + ':', + field('consequence', $._suite) + ), + + else_clause: $ => seq( + 'else', + ':', + field('body', $._suite) + ), + + for_statement: $ => seq( + optional('async'), + 'for', + field('left', $._left_hand_side), + 'in', + field('right', $._expressions), + ':', + field('body', $._suite), + field('alternative', optional($.else_clause)) + ), + + while_statement: $ => seq( + 'while', + field('condition', $.expression), + ':', + field('body', $._suite), + optional(field('alternative', $.else_clause)) + ), + + try_statement: $ => seq( + 'try', + ':', + field('body', $._suite), + choice( + seq( + repeat1($.except_clause), + optional($.else_clause), + optional($.finally_clause) + ), + seq( + repeat1($.except_group_clause), + optional($.else_clause), + optional($.finally_clause) + ), + $.finally_clause + ) + ), + + except_clause: $ => seq( + 'except', + optional(seq( + field('type', $.expression), + optional(seq( + choice('as', ','), + field('alias', $.expression) + )) + )), + ':', + field('body', $._suite), + ), + + except_group_clause: $ => seq( + 'except*', + seq( + field('type', $.expression), + optional(seq( + 'as', + field('alias', $.expression) + )) + ), + ':', + field('body', $._suite), + ), + + finally_clause: $ => seq( + 'finally', + ':', + field('body', $._suite), + ), + + with_statement: $ => seq( + optional('async'), + 'with', + $.with_clause, + ':', + field('body', $._suite) + ), + + with_clause: $ => choice( + commaSep1($.with_item), + seq('(', commaSep1($.with_item), optional(","), ')') + ), + + with_item: $ => prec.dynamic(-1, seq( + field('value', $.expression), + optional(seq( + 'as', + field('alias', $.pattern) + )) + )), + + match_statement: $ => seq( + 'match', + field('subject', + choice( + $.expression, + alias($.expression_list, $.tuple), + ) + ), + ':', + field('cases', $.cases) + ), + + cases: $ => repeat1($.case_block), + + case_block: $ => seq( + 'case', + field('pattern', $._match_patterns), + optional(field('guard', $.guard)), + ':', + field('body', $._suite) + ), + + _match_patterns: $ => choice( + $._match_pattern, + alias($.open_sequence_match_pattern, $.match_sequence_pattern) + ), + + open_sequence_match_pattern: $ => open_sequence($._match_maybe_star_pattern), + + _match_pattern: $ => choice( + $.match_as_pattern, + $._match_or_pattern + ), + + match_as_pattern: $ => seq( + field('pattern', $._match_or_pattern), + 'as', + field('alias', $.identifier) + ), + + _match_or_pattern: $ => choice( + $.match_or_pattern, + $._closed_pattern + ), + + match_or_pattern: $ => seq( + $._closed_pattern, + '|', + sep1($._closed_pattern, '|') + ), + + _closed_pattern: $ => choice( + $.match_literal_pattern, + $.match_capture_pattern, + $.match_wildcard_pattern, + $.match_value_pattern, + $.match_group_pattern, + $.match_sequence_pattern, + $.match_mapping_pattern, + $.match_class_pattern + ), + + match_literal_pattern: $ => choice( + seq( + optional(field('prefix_operator', '-')), + field('real', choice($.integer, $.float)), + optional(seq( + field('operator', choice('+', '-')), + field('imaginary', choice($.integer, $.float)) + )) + ), + $.string, + $.concatenated_string, + $.none, + $.true, + $.false + ), + + + + match_capture_pattern: $ => $.identifier, + + match_wildcard_pattern: $ => '_', + + match_value_pattern: $ => seq( + $.identifier, + repeat1(seq('.', $.identifier)) + ), + + match_group_pattern: $ => seq( + '(', + field('content', $._match_pattern), + ')' + ), + + match_sequence_pattern: $ => choice( + seq('[', optional(seq(commaSep1($._match_maybe_star_pattern), optional(','))), ']'), + seq('(', optional(open_sequence($._match_maybe_star_pattern)), ')') + ), + + _match_maybe_star_pattern: $ => choice( + $._match_pattern, + $.match_star_pattern + ), + + match_star_pattern: $ => seq( + '*', + field('target', choice($.match_wildcard_pattern, $.match_capture_pattern)) + ), + + match_mapping_pattern: $ => choice( + seq('{', optional(seq($.match_double_star_pattern, optional(','))), '}'), + seq( + '{', + commaSep1($.match_key_value_pattern), + optional(seq(',', $.match_double_star_pattern)), + optional(','), + '}' + ) + ), + + match_double_star_pattern: $ => seq( + '**', + field('target', $.match_capture_pattern) + ), + + match_key_value_pattern: $ => seq( + field('key', choice($.match_literal_pattern, $.match_value_pattern)), + ':', + field('value', $._match_pattern) + ), + + match_class_pattern: $ => seq( + field('class', $.pattern_class_name), + choice( + seq('(', ')'), + seq('(', seq(commaSep1($.match_positional_pattern), optional(',')), ')'), + seq('(', seq(commaSep1($.match_keyword_pattern), optional(',')), ')'), + seq('(', commaSep1($.match_positional_pattern), ',', commaSep1($.match_keyword_pattern), optional(','), ')') + )), + + pattern_class_name: $ => sep1($.identifier, '.'), + + match_positional_pattern: $ => $._match_pattern, + + match_keyword_pattern: $ => seq( + field('attribute', $.identifier), + '=', + field('value', $._match_pattern) + ), + + guard: $ => seq( + 'if', + field('test', $.expression) + ), + + function_definition: $ => seq( + optional('async'), + 'def', + field('name', $.identifier), + optional(field('type_parameters', $.type_parameters)), + field('parameters', $.parameters), + optional( + seq( + '->', + field('return_type', $.type) + ) + ), + ':', + field('body', $._suite) + ), + + parameters: $ => seq( + '(', + optional($._parameters), + ')' + ), + + lambda_parameters: $ => $._parameters, + + list_splat: $ => seq( + '*', + $.expression, + ), + + dictionary_splat: $ => seq( + '**', + field('value', $.expression), + ), + + global_statement: $ => seq( + 'global', + commaSep1($.identifier) + ), + + nonlocal_statement: $ => seq( + 'nonlocal', + commaSep1($.identifier) + ), + + exec_statement: $ => seq( + 'exec', + field('code', $.string), + optional( + seq( + 'in', + commaSep1($.expression) + ) + ) + ), + + type_alias_statement: $ => seq( + 'type', + field('name', $.identifier), + optional(field('type_parameters', $.type_parameters)), + '=', + field('value', $.expression) + ), + + class_definition: $ => seq( + 'class', + field('name', $.identifier), + optional(field('type_parameters', $.type_parameters)), + field('superclasses', optional($.argument_list)), + ':', + field('body', $._suite) + ), + + type_parameters: $ => seq( + '[', + commaSep1(field('type_parameter', $._type_parameter)), + ']' + ), + + _type_bound: $ => seq( + ':', + field('bound', $.expression) + ), + + typevar_parameter: $ => seq( + field('name', $.identifier), + optional($._type_bound) + ), + + typevartuple_parameter: $ => seq( + '*', + field('name', $.identifier), + ), + + paramspec_parameter: $ => seq( + '**', + field('name', $.identifier), + ), + + _type_parameter: $ => choice( + $.typevar_parameter, + $.typevartuple_parameter, + $.paramspec_parameter, + ), + + parenthesized_list_splat: $ => prec(PREC.parenthesized_list_splat, seq( + '(', + choice( + alias($.parenthesized_list_splat, $.parenthesized_expression), + $.list_splat, + ), + ')', + )), + + argument_list: $ => seq( + '(', + optional(commaSep1( + field('element', choice( + $.expression, + $.list_splat, + $.dictionary_splat, + alias($.parenthesized_list_splat, $.parenthesized_expression), + $.keyword_argument + )) + )), + optional(','), + ')' + ), + + decorated_definition: $ => seq( + repeat1($.decorator), + field('definition', choice( + $.class_definition, + $.function_definition + )) + ), + + decorator: $ => seq( + '@', + $.expression, + $._newline + ), + + _suite: $ => choice( + alias($._simple_statements, $.block), + seq($._indent, $.block), + alias($._newline, $.block) + ), + + block: $ => seq( + repeat($._statement), + $._dedent + ), + + expression_list: $ => open_sequence(field('element', choice($.expression, $.list_splat, $.dictionary_splat))), + + dotted_name: $ => sep1($.identifier, '.'), + + // Patterns + + _parameters: $ => seq( + commaSep1($.parameter), + optional(',') + ), + + _patterns: $ => seq( + commaSep1(field('element', $.pattern)), + optional(field('trailing_comma', ',')) + ), + + parameter: $ => choice( + $.identifier, + $.typed_parameter, + $.default_parameter, + $.typed_default_parameter, + $.list_splat_pattern, + $.tuple_pattern, + $.keyword_separator, + $.positional_separator, + $.dictionary_splat_pattern + ), + + pattern: $ => choice( + $.identifier, + $.keyword_identifier, + $.subscript, + $.attribute, + $.list_splat_pattern, + $.tuple_pattern, + $.list_pattern + ), + + tuple_pattern: $ => seq( + '(', + optional($._patterns), + ')' + ), + + list_pattern: $ => seq( + '[', + optional($._patterns), + ']' + ), + + default_parameter: $ => seq( + field('name', $.identifier), + '=', + field('value', $.expression) + ), + + typed_default_parameter: $ => prec(PREC.typed_parameter, seq( + field('name', $.identifier), + ':', + field('type', $.type), + '=', + field('value', $.expression) + )), + + list_splat_pattern: $ => seq( + '*', + field('vararg', choice($.identifier, $.keyword_identifier, $.subscript, $.attribute)) + ), + + dictionary_splat_pattern: $ => seq( + '**', + field('kwarg', choice($.identifier, $.keyword_identifier, $.subscript, $.attribute)) + ), + + // Expressions + + _expression_within_for_in_clause: $ => choice( + $.expression, + alias($.lambda_within_for_in_clause, $.lambda) + ), + + expression: $ => choice( + $.comparison_operator, + $.not_operator, + $.boolean_operator, + $.await, + $.lambda, + $.primary_expression, + $.conditional_expression, + $.named_expression + ), + + primary_expression: $ => choice( + $.binary_operator, + $.identifier, + $.keyword_identifier, + $.string, + $.concatenated_string, + $.integer, + $.float, + $.true, + $.false, + $.none, + $.unary_operator, + $.attribute, + $.subscript, + $.call, + $.list, + $.list_comprehension, + $.dictionary, + $.dictionary_comprehension, + $.set, + $.set_comprehension, + $.tuple, + $.parenthesized_expression, + $.generator_expression, + $.ellipsis + ), + + not_operator: $ => prec(PREC.not, seq( + 'not', + field('argument', $.expression) + )), + + boolean_operator: $ => choice( + prec.right(PREC.and, seq( + field('left', $.expression), + field('operator', 'and'), + field('right', $.expression) + )), + prec.right(PREC.or, seq( + field('left', $.expression), + field('operator', 'or'), + field('right', $.expression) + )) + ), + + binary_operator: $ => { + const table = [ + [prec.left, '+', PREC.plus], + [prec.left, '-', PREC.plus], + [prec.left, '*', PREC.times], + [prec.left, '@', PREC.times], + [prec.left, '/', PREC.times], + [prec.left, '%', PREC.times], + [prec.left, '//', PREC.times], + [prec.right, '**', PREC.power], + [prec.left, '|', PREC.bitwise_or], + [prec.left, '&', PREC.bitwise_and], + [prec.left, '^', PREC.xor], + [prec.left, '<<', PREC.shift], + [prec.left, '>>', PREC.shift], + ]; + + return choice(...table.map(([fn, operator, precedence]) => fn(precedence, seq( + field('left', $.primary_expression), + field('operator', operator), + field('right', $.primary_expression) + )))); + }, + + unary_operator: $ => prec(PREC.unary, seq( + field('operator', choice('+', '-', '~')), + field('argument', $.primary_expression) + )), + + comparison_operator: $ => prec.left(PREC.compare, seq( + $.primary_expression, + repeat1(seq( + field('operators', + choice( + '<', + '<=', + '==', + '!=', + '>=', + '>', + '<>', + 'in', + alias(seq('not', 'in'), 'not in'), + 'is', + alias(seq('is', 'not'), 'is not') + )), + $.primary_expression + )) + )), + + lambda: $ => prec(PREC.lambda, seq( + 'lambda', + field('parameters', optional($.lambda_parameters)), + ':', + field('body', $.expression) + )), + + lambda_within_for_in_clause: $ => seq( + 'lambda', + field('parameters', optional($.lambda_parameters)), + ':', + field('body', $._expression_within_for_in_clause) + ), + + assignment: $ => seq( + field('left', $._left_hand_side), + choice( + seq('=', field('right', $._right_hand_side)), + seq(':', field('type', $.type)), + seq(':', field('type', $.type), '=', field('right', $._right_hand_side)) + ) + ), + + augmented_assignment: $ => seq( + field('left', $._left_hand_side), + field('operator', choice( + '+=', '-=', '*=', '/=', '@=', '//=', '%=', '**=', + '>>=', '<<=', '&=', '^=', '|=' + )), + field('right', $._right_hand_side) + ), + + _left_hand_side: $ => choice( + $.pattern, + $.pattern_list + ), + + pattern_list: $ => seq( + field('element', $.pattern), + choice( + ',', + seq( + repeat1(seq( + ',', + field('element', $.pattern) + )), + optional(',') + ) + ) + ), + + _right_hand_side: $ => choice( + $.expression, + $.expression_list, + $.assignment, + $.augmented_assignment, + $.yield + ), + + yield: $ => prec.right(seq( + 'yield', + choice( + seq( + 'from', + $.expression + ), + optional($._expressions) + ) + )), + + attribute: $ => prec(PREC.call, seq( + field('object', $.primary_expression), + '.', + field('attribute', $.identifier) + )), + + subscript: $ => prec(PREC.call, seq( + field('value', $.primary_expression), + '[', + commaSep1(field('subscript', choice($.expression, $.slice))), + optional(','), + ']' + )), + + slice: $ => seq( + optional(field('start', $.expression)), + ':', + optional(field('stop', $.expression)), + optional(seq(':', optional(field('step', $.expression)))) + ), + + ellipsis: $ => '...', + + call: $ => prec(PREC.call, seq( + field('function', $.primary_expression), + field('arguments', choice( + $.generator_expression, + $.argument_list + )) + )), + + typed_parameter: $ => prec(PREC.typed_parameter, seq( + choice( + $.identifier, + $.list_splat_pattern, + $.dictionary_splat_pattern + ), + ':', + field('type', $.type) + )), + + type: $ => $.expression, + + keyword_argument: $ => seq( + field('name', choice($.identifier, $.keyword_identifier)), + '=', + field('value', $.expression) + ), + + // Literals + + list: $ => seq( + '[', + optional($._collection_elements), + ']' + ), + + set: $ => seq( + '{', + $._collection_elements, + '}' + ), + + tuple: $ => seq( + '(', + optional($._collection_elements), + ')' + ), + + dictionary: $ => seq( + '{', + optional(commaSep1(field('element', choice($.pair, $.dictionary_splat)))), + optional(','), + '}' + ), + + pair: $ => seq( + field('key', $.expression), + ':', + field('value', $.expression) + ), + + list_comprehension: $ => seq( + '[', + field('body', $.expression), + $._comprehension_clauses, + ']' + ), + + dictionary_comprehension: $ => seq( + '{', + field('body', $.pair), + $._comprehension_clauses, + '}' + ), + + set_comprehension: $ => seq( + '{', + field('body', $.expression), + $._comprehension_clauses, + '}' + ), + + generator_expression: $ => seq( + '(', + field('body', $.expression), + $._comprehension_clauses, + ')' + ), + + _comprehension_clauses: $ => seq( + $.for_in_clause, + repeat(choice( + $.for_in_clause, + $.if_clause + )) + ), + + parenthesized_expression: $ => prec(PREC.parenthesized_expression, seq( + '(', + field('inner', choice($.expression, $.yield)), + ')' + )), + + _collection_elements: $ => seq( + commaSep1(field('element', choice( + $.expression, $.yield, $.list_splat, $.parenthesized_list_splat + ))), + optional(field('trailing_comma', ',')) + ), + + for_in_clause: $ => prec.left(seq( + optional('async'), + 'for', + field('left', $._left_hand_side), + 'in', + field('right', commaSep1($._expression_within_for_in_clause)), + optional(',') + )), + + if_clause: $ => seq( + 'if', + $.expression + ), + + conditional_expression: $ => prec.right(PREC.conditional, seq( + $.expression, + 'if', + $.expression, + 'else', + $.expression + )), + + concatenated_string: $ => seq( + $.string, + repeat1($.string) + ), + + + string: $ => seq( + field('prefix', alias($._string_start, '"')), + repeat(choice( + field('interpolation', $.interpolation), + field('string_content', $.string_content) + )), + field('suffix', alias($._string_end, '"')) + ), + + string_content: $ => prec.right(0, repeat1( + choice( + $._escape_interpolation, + $.escape_sequence, + $._not_escape_sequence, + $._string_content + ))), + + interpolation: $ => seq( + token.immediate('{'), + field('expression', $._f_expression), + optional('='), + optional($.type_conversion), + optional($.format_specifier), + '}' + ), + + _f_expression: $ => choice( + $.expression, + $.expression_list, + $.yield, + ), + + _escape_interpolation: $ => token.immediate(choice('{{', '}}')), + + escape_sequence: $ => token.immediate(prec(1, seq( + '\\', + choice( + /u[a-fA-F\d]{4}/, + /U[a-fA-F\d]{8}/, + /x[a-fA-F\d]{2}/, + /\d{3}/, + /\r?\n/, + /['"abfrntv\\]/, + /N\{[^}]+\}/, + ) + ))), + + _not_escape_sequence: $ => token.immediate('\\'), + + format_specifier: $ => seq( + ':', + repeat(choice( + token(prec(1, /[^{}\n]+/)), + alias($.interpolation, $.format_expression) + )) + ), + + format_expression: $ => seq('{', $.expression, '}'), + + type_conversion: $ => /![a-z]/, + + integer: $ => token(choice( + seq( + choice('0x', '0X'), + repeat1(/_?[A-Fa-f0-9]+/), + optional(/[Ll]/) + ), + seq( + choice('0o', '0O'), + repeat1(/_?[0-7]+/), + optional(/[Ll]/) + ), + seq( + choice('0b', '0B'), + repeat1(/_?[0-1]+/), + optional(/[Ll]/) + ), + seq( + repeat1(/[0-9]+_?/), + choice( + optional(/[Ll]/), // long numbers + optional(/[jJ]/) // complex numbers + ) + ) + )), + + float: $ => { + const digits = repeat1(/[0-9]+_?/); + const exponent = seq(/[eE][\+-]?/, digits) + + return token(seq( + choice( + seq(digits, '.', optional(digits), optional(exponent)), + seq(optional(digits), '.', digits, optional(exponent)), + seq(digits, exponent) + ), + optional(choice(/[Ll]/, /[jJ]/)) + )) + }, + + identifier: $ => /[_\p{XID_Start}][_\p{XID_Continue}]*/, + + keyword_identifier: $ => prec(-3, alias( + choice( + 'print', + 'exec', + 'async', + 'await', + 'match', + 'type', + ), + $.identifier + )), + + true: $ => 'True', + false: $ => 'False', + none: $ => 'None', + + await: $ => prec(PREC.unary, seq( + 'await', + $.expression + )), + + comment: $ => token(seq('#', /.*/)), + + positional_separator: $ => '/', + keyword_separator: $ => '*', + + _semicolon: $ => ';' + } +}) + +function commaSep1(rule) { + return sep1(rule, ',') +} + +function sep1(rule, separator) { + return seq(rule, repeat(seq(separator, rule))) +} + +function open_sequence(rule, repeat_rule = rule) { + return prec.right(seq( + rule, + choice( + ',', + seq( + repeat1(seq( + ',', + repeat_rule + )), + optional(',') + ), + ) + )) +} diff --git a/python/extractor/tsg-python/tree-sitter-python/log.html b/python/extractor/tsg-python/tree-sitter-python/log.html new file mode 100644 index 00000000000..bfe46c45e3e --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/log.html @@ -0,0 +1,1687 @@ + +<!DOCTYPE html> + +<style> +svg { width: 100%; } +</style> + +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.43.0 (0) + --> +<!-- Title: %3 Pages: 1 --> +<svg width="100pt" height="31pt" + viewBox="0.00 0.00 100.00 31.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 27)"> +<title>%3 + +new_parse + + + + + + + + +%5 + +process version:0, version_count:1, state:1, row:0, col:0 + + + + + + + + +%7 + +lex_external state:2, row:0, column:0 + + + + + + + + +%9 + +lex_internal state:62, row:0, column:0 + + + + + + + + +%11 + +lexed_lookahead sym:match, size:5 + + + + + + + + +%13 + +shift state:71 + + + + + + + + +stack + + + +node_head_0 + + + +node_0x5654d845fac0 + + +71 + + + + + +node_head_0->node_0x5654d845fac0 + + +0 + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d845fac0->node_0x5654d845e6b0 + + +'match' + + + + + + + + + + + +%19 + +process version:0, version_count:1, state:71, row:0, col:5 + + + + + + + + +%21 + +lex_external state:4, row:0, column:5 + + + + + + + + +%23 + +lex_internal state:62, row:0, column:5 + + + + + + + + +%25 + +lexed_lookahead sym:(, size:1 + + + + + + + + +%27 + +shift state:188 + + + + + + + + +stack + + + +node_head_0 + + + +node_0x5654d845fbb0 + + +188 + + + + + +node_head_0->node_0x5654d845fbb0 + + +0 + + + + + +node_0x5654d845fac0 + + +71 + + + + + +node_0x5654d845fbb0->node_0x5654d845fac0 + + +'(' + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d845fac0->node_0x5654d845e6b0 + + +'match' + + + + + + + + + + + +%35 + +process version:0, version_count:1, state:188, row:0, col:6 + + + + + + + + +%37 + +lex_external state:2, row:0, column:6 + + + + + + + + +%39 + +lex_internal state:62, row:0, column:6 + + + + + + + + +%41 + +lexed_lookahead sym:), size:1 + + + + + + + + +%43 + +shift state:671 + + + + + + + + +stack + + + +node_head_0 + + + +node_0x5654d845fca0 + + +671 + + + + + +node_head_0->node_0x5654d845fca0 + + +0 + + + + + +node_0x5654d845fbb0 + + +188 + + + + + +node_0x5654d845fca0->node_0x5654d845fbb0 + + +')' + + + + + +node_0x5654d845fac0 + + +71 + + + + + +node_0x5654d845fbb0->node_0x5654d845fac0 + + +'(' + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d845fac0->node_0x5654d845e6b0 + + +'match' + + + + + + + + + + + +%53 + +process version:0, version_count:1, state:671, row:0, col:7 + + + + + + + + +%55 + +lex_internal state:15, row:0, column:7 + + + + + + + + +%57 + +lex_external state:1, row:0, column:7 + + + + + + + + +%59 + +lexed_lookahead sym:_newline, size:0 + + + + + + + + +%61 + +detect_error + + + + + + + + +stack + + + +node_head_0 + + + +node_0x5654d845fca0 + + +671 + + + + + +node_head_0->node_0x5654d845fca0 + + +0 + + + + + +node_0x5654d845fbb0 + + +188 + + + + + +node_0x5654d845fca0->node_0x5654d845fbb0 + + +')' + + + + + +node_0x5654d845fac0 + + +71 + + + + + +node_0x5654d845fbb0->node_0x5654d845fac0 + + +'(' + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d845fac0->node_0x5654d845e6b0 + + +'match' + + + + + + + + + + + +%71 + +resume version:0 + + + + + + + + +%73 + +recover_to_previous state:71, depth:2 + + + + + + + + +stack + + + +node_head_0 + + + +node_0x5654d845fca0 + + +? + + + + + +node_head_0->node_0x5654d845fca0 + + +0 + + + + + +node_0x5654d845fbb0 + + +630 + + + + + +node_0x5654d845fca0->node_0x5654d845fbb0 + + + + +node_0x5654d8474d40 + + +1080 + + + + + +node_0x5654d845fca0->node_0x5654d8474d40 + + + + +node_head_1 + + + +node_0x5654d8474e30 + + + + + + + +node_head_1->node_0x5654d8474e30 + + +1 + + + + + +node_0x5654d845fac0 + + +71 + + + + + +node_0x5654d8474e30->node_0x5654d845fac0 + + +ERROR + + + + + +node_0x5654d845fbb0->node_0x5654d845fac0 + + +primary_expression + + + + + +node_0x5654d8474d40->node_0x5654d845fac0 + + +expression + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d845fac0->node_0x5654d845e6b0 + + +'match' + + + + + + + + + + + +stack + + + +node_head_1 + + + +node_0x5654d8474e30 + + + + + + + +node_head_1->node_0x5654d8474e30 + + +1 + + + + + +node_0x5654d845fac0 + + +71 + + + + + +node_0x5654d8474e30->node_0x5654d845fac0 + + +ERROR + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d845fac0->node_0x5654d845e6b0 + + +'match' + + + + + + + + + + + +%97 + +process version:1, version_count:2, state:71, row:0, col:7 + + + + + + + + +%99 + +lex_external state:4, row:0, column:7 + + + + + + + + +%101 + +lexed_lookahead sym:_newline, size:0 + + + + + + + + +%103 + +reduce sym:primary_expression, child_count:1 + + + + + + + + +stack + + + +node_head_1 + + + +node_0x5654d84750d0 + + + + + + + +node_head_1->node_0x5654d84750d0 + + +1 + + + + + +node_0x5654d8474fe0 + + +684 + + + + + +node_0x5654d84750d0->node_0x5654d8474fe0 + + +ERROR + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d8474fe0->node_0x5654d845e6b0 + + +primary_expression + + + + + + + + + + + +%111 + +reduce sym:expression, child_count:1 + + + + + + + + +stack + + + +node_head_1 + + + +node_0x5654d8475220 + + + + + + + +node_head_1->node_0x5654d8475220 + + +1 + + + + + +node_0x5654d8474e30 + + +1019 + + + + + +node_0x5654d8475220->node_0x5654d8474e30 + + +ERROR + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d8474e30->node_0x5654d845e6b0 + + +expression + + + + + + + + + + + +%119 + +reduce sym:expression_statement, child_count:1 + + + + + + + + +stack + + + +node_head_1 + + + +node_0x5654d84750d0 + + + + + + + +node_head_1->node_0x5654d84750d0 + + +1 + + + + + +node_0x5654d8474fe0 + + +1209 + + + + + +node_0x5654d84750d0->node_0x5654d8474fe0 + + +ERROR + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d8474fe0->node_0x5654d845e6b0 + + +expression_statement + + + + + + + + + + + +%127 + +shift state:313 + + + + + + + + +stack + + + +node_head_1 + + + +node_0x5654d8474e30 + + +313 + + + + + +node_head_1->node_0x5654d8474e30 + + +1 + + + + + +node_0x5654d84750d0 + + + + + + + +node_0x5654d8474e30->node_0x5654d84750d0 + + +_newline + + + + + +node_0x5654d8474fe0 + + +1209 + + + + + +node_0x5654d84750d0->node_0x5654d8474fe0 + + +ERROR + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d8474fe0->node_0x5654d845e6b0 + + +expression_statement + + + + + + + + + + + +%137 + +process version:0, version_count:1, state:313, row:0, col:7 + + + + + + + + +%139 + +lex_external state:2, row:0, column:7 + + + + + + + + +%141 + +lex_internal state:62, row:0, column:7 + + + + + + + + +%143 + +lexed_lookahead sym:end, size:1 + + + + + + + + +%145 + +reduce sym:_simple_statements, child_count:2 + + + + + + + + +stack + + + +node_head_0 + + + +node_0x5654d845fac0 + + +64 + + + + + +node_head_0->node_0x5654d845fac0 + + +0 + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d845fac0->node_0x5654d845e6b0 + + +_simple_statements + + + + + + + + + + + +%151 + +reduce sym:module, child_count:1 + + + + + + + + +stack + + + +node_head_0 + + + +node_0x5654d8474fe0 + + +1502 + + + + + +node_head_0->node_0x5654d8474fe0 + + +0 + + + + + +node_0x5654d845e6b0 + + +1 + + + + + +node_0x5654d8474fe0->node_0x5654d845e6b0 + + +module + + + + + + + + + + + +%157 + +accept + + + + + + + + +stack + + + + + + + + + +%159 + +done + + + + + + + + +tree + + + +tree_0x7ffd5edb0858 + + +module + + + + + +tree_0x5654d8475370 + + +_simple_statements + + + + + +tree_0x7ffd5edb0858->tree_0x5654d8475370 + + + + + + + +tree_0x5654d8475378 + +end + + + + + +tree_0x7ffd5edb0858->tree_0x5654d8475378 + + + + + + + +tree_0x5654d845c980 + + +expression_statement + + + + + +tree_0x5654d8475370->tree_0x5654d845c980 + + + + + + + +tree_0x5654d845c988 + + +ERROR + + + + + +tree_0x5654d8475370->tree_0x5654d845c988 + + + + + + + +tree_0x5654d845c990 + +_newline + + + + + +tree_0x5654d8475370->tree_0x5654d845c990 + + + + + + + +tree_0x5654d8475310 + + +expression + + + + + +tree_0x5654d845c980->tree_0x5654d8475310 + + + + + + + +tree_0x5654d84751c0 + + +primary_expression + + + + + +tree_0x5654d8475310->tree_0x5654d84751c0 + + + + + + + +tree_0x5654d8474f80 + +identifier + + + + + +tree_0x5654d84751c0->tree_0x5654d8474f80 + + + + + + + +tree_0x5654d845d9d0 + + +primary_expression + + + + + +tree_0x5654d845c988->tree_0x5654d845d9d0 + + + + + + + +tree_0x5654d845df00 + + +tuple + + + + + +tree_0x5654d845d9d0->tree_0x5654d845df00 + + + + + + + +tree_0x5654d8457fb0 + +( + + + + + +tree_0x5654d845df00->tree_0x5654d8457fb0 + + + + + + + +tree_0x5654d8457fb8 + +) + + + + + +tree_0x5654d845df00->tree_0x5654d8457fb8 + + + + + + + diff --git a/python/extractor/tsg-python/tree-sitter-python/package.json b/python/extractor/tsg-python/tree-sitter-python/package.json new file mode 100644 index 00000000000..a9bb55ac506 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/package.json @@ -0,0 +1,33 @@ +{ + "name": "tree-sitter-python", + "version": "0.19.0", + "description": "Python grammar for tree-sitter", + "main": "bindings/node", + "keywords": [ + "parser", + "lexer" + ], + "author": "Max Brunsfeld", + "license": "MIT", + "dependencies": { + "nan": "^2.14.0" + }, + "devDependencies": { + "tree-sitter-cli": "^0.19.3" + }, + "scripts": { + "build": "tree-sitter generate && node-gyp build", + "test": "tree-sitter test && script/parse-examples", + "parse": "tree-sitter parse", + "test-windows": "tree-sitter test" + }, + "repository": "https://github.com/tree-sitter/tree-sitter-python", + "tree-sitter": [ + { + "scope": "source.python", + "file-types": [ + "py" + ] + } + ] +} diff --git a/python/extractor/tsg-python/tree-sitter-python/queries/highlights.scm b/python/extractor/tsg-python/tree-sitter-python/queries/highlights.scm new file mode 100644 index 00000000000..f64fecb2c75 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/queries/highlights.scm @@ -0,0 +1,124 @@ +; Identifier naming conventions + +((identifier) @constructor + (#match? @constructor "^[A-Z]")) + +((identifier) @constant + (#match? @constant "^[A-Z][A-Z_]*$")) + +; Builtin functions + +((call + function: (identifier) @function.builtin) + (#match? + @function.builtin + "^(abs|all|any|ascii|bin|bool|breakpoint|bytearray|bytes|callable|chr|classmethod|compile|complex|delattr|dict|dir|divmod|enumerate|eval|exec|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|isinstance|issubclass|iter|len|list|locals|map|max|memoryview|min|next|object|oct|open|ord|pow|print|property|range|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|vars|zip|__import__)$")) + +; Function calls + +(decorator) @function + +(call + function: (attribute attribute: (identifier) @function.method)) +(call + function: (identifier) @function) + +; Function definitions + +(function_definition + name: (identifier) @function) + +(identifier) @variable +(attribute attribute: (identifier) @property) +(type (identifier) @type) + +; Literals + +[ + (none) + (true) + (false) +] @constant.builtin + +[ + (integer) + (float) +] @number + +(comment) @comment +(string) @string +(escape_sequence) @escape + +(interpolation + "{" @punctuation.special + "}" @punctuation.special) @embedded + +[ + "-" + "-=" + "!=" + "*" + "**" + "**=" + "*=" + "/" + "//" + "//=" + "/=" + "&" + "%" + "%=" + "^" + "+" + "->" + "+=" + "<" + "<<" + "<=" + "<>" + "=" + ":=" + "==" + ">" + ">=" + ">>" + "|" + "~" + "and" + "in" + "is" + "not" + "or" +] @operator + +[ + "as" + "assert" + "async" + "await" + "break" + "class" + "continue" + "def" + "del" + "elif" + "else" + "except" + "exec" + "finally" + "for" + "from" + "global" + "if" + "import" + "lambda" + "nonlocal" + "pass" + "print" + "raise" + "return" + "try" + "while" + "with" + "yield" +] @keyword diff --git a/python/extractor/tsg-python/tree-sitter-python/queries/tags.scm b/python/extractor/tsg-python/tree-sitter-python/queries/tags.scm new file mode 100644 index 00000000000..c5ca8272b85 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/queries/tags.scm @@ -0,0 +1,12 @@ +(class_definition + name: (identifier) @name) @definition.class + +(function_definition + name: (identifier) @name) @definition.function + +(call + function: [ + (identifier) @name + (attribute + attribute: (identifier) @name) + ]) @reference.call diff --git a/python/extractor/tsg-python/tree-sitter-python/src/grammar.json b/python/extractor/tsg-python/tree-sitter-python/src/grammar.json new file mode 100644 index 00000000000..957471765c3 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/src/grammar.json @@ -0,0 +1,6615 @@ +{ + "name": "python", + "word": "identifier", + "rules": { + "module": { + "type": "REPEAT", + "content": { + "type": "SYMBOL", + "name": "_statement" + } + }, + "_statement": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_simple_statements" + }, + { + "type": "SYMBOL", + "name": "_compound_statement" + } + ] + }, + "_simple_statements": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_simple_statement" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_semicolon" + }, + { + "type": "SYMBOL", + "name": "_simple_statement" + } + ] + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_semicolon" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "SYMBOL", + "name": "_newline" + } + ] + }, + "_simple_statement": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "future_import_statement" + }, + { + "type": "SYMBOL", + "name": "import_statement" + }, + { + "type": "SYMBOL", + "name": "import_from_statement" + }, + { + "type": "SYMBOL", + "name": "print_statement" + }, + { + "type": "SYMBOL", + "name": "assert_statement" + }, + { + "type": "SYMBOL", + "name": "expression_statement" + }, + { + "type": "SYMBOL", + "name": "return_statement" + }, + { + "type": "SYMBOL", + "name": "delete_statement" + }, + { + "type": "SYMBOL", + "name": "raise_statement" + }, + { + "type": "SYMBOL", + "name": "pass_statement" + }, + { + "type": "SYMBOL", + "name": "break_statement" + }, + { + "type": "SYMBOL", + "name": "continue_statement" + }, + { + "type": "SYMBOL", + "name": "global_statement" + }, + { + "type": "SYMBOL", + "name": "nonlocal_statement" + }, + { + "type": "SYMBOL", + "name": "exec_statement" + }, + { + "type": "SYMBOL", + "name": "type_alias_statement" + } + ] + }, + "import_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "import" + }, + { + "type": "SYMBOL", + "name": "_import_list" + } + ] + }, + "import_prefix": { + "type": "REPEAT1", + "content": { + "type": "STRING", + "value": "." + } + }, + "relative_import": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "import_prefix" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "dotted_name" + } + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "future_import_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "from" + }, + { + "type": "STRING", + "value": "__future__" + }, + { + "type": "STRING", + "value": "import" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_import_list" + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "_import_list" + }, + { + "type": "STRING", + "value": ")" + } + ] + } + ] + } + ] + }, + "import_from_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "from" + }, + { + "type": "FIELD", + "name": "module_name", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "relative_import" + }, + { + "type": "SYMBOL", + "name": "dotted_name" + } + ] + } + }, + { + "type": "STRING", + "value": "import" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "wildcard_import" + }, + { + "type": "SYMBOL", + "name": "_import_list" + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "_import_list" + }, + { + "type": "STRING", + "value": ")" + } + ] + } + ] + } + ] + }, + "_import_list": { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "name", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "dotted_name" + }, + { + "type": "SYMBOL", + "name": "aliased_import" + } + ] + } + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "dotted_name" + }, + { + "type": "SYMBOL", + "name": "aliased_import" + } + ] + } + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "aliased_import": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "dotted_name" + } + }, + { + "type": "STRING", + "value": "as" + }, + { + "type": "FIELD", + "name": "alias", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + } + ] + }, + "wildcard_import": { + "type": "STRING", + "value": "*" + }, + "print_statement": { + "type": "CHOICE", + "members": [ + { + "type": "PREC", + "value": 1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "print" + }, + { + "type": "SYMBOL", + "name": "chevron" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "argument", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + } + }, + { + "type": "PREC", + "value": -10, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "print" + }, + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "argument", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "argument", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + } + } + ] + }, + "chevron": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": ">>" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + "assert_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "assert" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + } + } + ] + } + ] + }, + "expression_statement": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "expression_list" + }, + { + "type": "SYMBOL", + "name": "assignment" + }, + { + "type": "SYMBOL", + "name": "augmented_assignment" + }, + { + "type": "SYMBOL", + "name": "yield" + } + ] + }, + "named_expression": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "name", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "SYMBOL", + "name": "keyword_identifier" + } + ] + } + }, + { + "type": "STRING", + "value": ":=" + }, + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + "return_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "return" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_expressions" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "delete_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "del" + }, + { + "type": "FIELD", + "name": "target", + "content": { + "type": "SYMBOL", + "name": "_expressions" + } + } + ] + }, + "_expressions": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "expression_list" + } + ] + }, + "raise_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "raise" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_expressions" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "from" + }, + { + "type": "FIELD", + "name": "cause", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "pass_statement": { + "type": "PREC_LEFT", + "value": 0, + "content": { + "type": "STRING", + "value": "pass" + } + }, + "break_statement": { + "type": "PREC_LEFT", + "value": 0, + "content": { + "type": "STRING", + "value": "break" + } + }, + "continue_statement": { + "type": "PREC_LEFT", + "value": 0, + "content": { + "type": "STRING", + "value": "continue" + } + }, + "_compound_statement": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "if_statement" + }, + { + "type": "SYMBOL", + "name": "for_statement" + }, + { + "type": "SYMBOL", + "name": "while_statement" + }, + { + "type": "SYMBOL", + "name": "try_statement" + }, + { + "type": "SYMBOL", + "name": "with_statement" + }, + { + "type": "SYMBOL", + "name": "match_statement" + }, + { + "type": "SYMBOL", + "name": "function_definition" + }, + { + "type": "SYMBOL", + "name": "class_definition" + }, + { + "type": "SYMBOL", + "name": "decorated_definition" + } + ] + }, + "if_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "if" + }, + { + "type": "FIELD", + "name": "condition", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "consequence", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + }, + { + "type": "REPEAT", + "content": { + "type": "FIELD", + "name": "alternative", + "content": { + "type": "SYMBOL", + "name": "elif_clause" + } + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "alternative", + "content": { + "type": "SYMBOL", + "name": "else_clause" + } + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "elif_clause": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "elif" + }, + { + "type": "FIELD", + "name": "condition", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "consequence", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + } + ] + }, + "else_clause": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "else" + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + } + ] + }, + "for_statement": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "async" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "for" + }, + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "_left_hand_side" + } + }, + { + "type": "STRING", + "value": "in" + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "_expressions" + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + }, + { + "type": "FIELD", + "name": "alternative", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "else_clause" + }, + { + "type": "BLANK" + } + ] + } + } + ] + }, + "while_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "while" + }, + { + "type": "FIELD", + "name": "condition", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "alternative", + "content": { + "type": "SYMBOL", + "name": "else_clause" + } + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "try_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "try" + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "SYMBOL", + "name": "except_clause" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "else_clause" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "finally_clause" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "SYMBOL", + "name": "except_group_clause" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "else_clause" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "finally_clause" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SYMBOL", + "name": "finally_clause" + } + ] + } + ] + }, + "except_clause": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "except" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "type", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "as" + }, + { + "type": "STRING", + "value": "," + } + ] + }, + { + "type": "FIELD", + "name": "alias", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + } + ] + }, + "except_group_clause": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "except*" + }, + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "type", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "as" + }, + { + "type": "FIELD", + "name": "alias", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + } + ] + }, + "finally_clause": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "finally" + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + } + ] + }, + "with_statement": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "async" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "with" + }, + { + "type": "SYMBOL", + "name": "with_clause" + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + } + ] + }, + "with_clause": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "with_item" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "with_item" + } + ] + } + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "with_item" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "with_item" + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + } + ] + }, + "with_item": { + "type": "PREC_DYNAMIC", + "value": -1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "as" + }, + { + "type": "FIELD", + "name": "alias", + "content": { + "type": "SYMBOL", + "name": "pattern" + } + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + } + }, + "match_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "match" + }, + { + "type": "FIELD", + "name": "subject", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "expression_list" + }, + "named": true, + "value": "tuple" + } + ] + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "cases", + "content": { + "type": "SYMBOL", + "name": "cases" + } + } + ] + }, + "cases": { + "type": "REPEAT1", + "content": { + "type": "SYMBOL", + "name": "case_block" + } + }, + "case_block": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "case" + }, + { + "type": "FIELD", + "name": "pattern", + "content": { + "type": "SYMBOL", + "name": "_match_patterns" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "guard", + "content": { + "type": "SYMBOL", + "name": "guard" + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + } + ] + }, + "_match_patterns": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_match_pattern" + }, + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "open_sequence_match_pattern" + }, + "named": true, + "value": "match_sequence_pattern" + } + ] + }, + "open_sequence_match_pattern": { + "type": "PREC_RIGHT", + "value": 0, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_match_maybe_star_pattern" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "_match_maybe_star_pattern" + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + } + ] + } + ] + } + }, + "_match_pattern": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "match_as_pattern" + }, + { + "type": "SYMBOL", + "name": "_match_or_pattern" + } + ] + }, + "match_as_pattern": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "pattern", + "content": { + "type": "SYMBOL", + "name": "_match_or_pattern" + } + }, + { + "type": "STRING", + "value": "as" + }, + { + "type": "FIELD", + "name": "alias", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + } + ] + }, + "_match_or_pattern": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "match_or_pattern" + }, + { + "type": "SYMBOL", + "name": "_closed_pattern" + } + ] + }, + "match_or_pattern": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_closed_pattern" + }, + { + "type": "STRING", + "value": "|" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_closed_pattern" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "|" + }, + { + "type": "SYMBOL", + "name": "_closed_pattern" + } + ] + } + } + ] + } + ] + }, + "_closed_pattern": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "match_literal_pattern" + }, + { + "type": "SYMBOL", + "name": "match_capture_pattern" + }, + { + "type": "SYMBOL", + "name": "match_wildcard_pattern" + }, + { + "type": "SYMBOL", + "name": "match_value_pattern" + }, + { + "type": "SYMBOL", + "name": "match_group_pattern" + }, + { + "type": "SYMBOL", + "name": "match_sequence_pattern" + }, + { + "type": "SYMBOL", + "name": "match_mapping_pattern" + }, + { + "type": "SYMBOL", + "name": "match_class_pattern" + } + ] + }, + "match_literal_pattern": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "prefix_operator", + "content": { + "type": "STRING", + "value": "-" + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "FIELD", + "name": "real", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "integer" + }, + { + "type": "SYMBOL", + "name": "float" + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "+" + }, + { + "type": "STRING", + "value": "-" + } + ] + } + }, + { + "type": "FIELD", + "name": "imaginary", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "integer" + }, + { + "type": "SYMBOL", + "name": "float" + } + ] + } + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SYMBOL", + "name": "string" + }, + { + "type": "SYMBOL", + "name": "concatenated_string" + }, + { + "type": "SYMBOL", + "name": "none" + }, + { + "type": "SYMBOL", + "name": "true" + }, + { + "type": "SYMBOL", + "name": "false" + } + ] + }, + "match_capture_pattern": { + "type": "SYMBOL", + "name": "identifier" + }, + "match_wildcard_pattern": { + "type": "STRING", + "value": "_" + }, + "match_value_pattern": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "REPEAT1", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "." + }, + { + "type": "SYMBOL", + "name": "identifier" + } + ] + } + } + ] + }, + "match_group_pattern": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "FIELD", + "name": "content", + "content": { + "type": "SYMBOL", + "name": "_match_pattern" + } + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "match_sequence_pattern": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_match_maybe_star_pattern" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "_match_maybe_star_pattern" + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "PREC_RIGHT", + "value": 0, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_match_maybe_star_pattern" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "_match_maybe_star_pattern" + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + } + ] + } + ] + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + } + ] + }, + "_match_maybe_star_pattern": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_match_pattern" + }, + { + "type": "SYMBOL", + "name": "match_star_pattern" + } + ] + }, + "match_star_pattern": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "*" + }, + { + "type": "FIELD", + "name": "target", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "match_wildcard_pattern" + }, + { + "type": "SYMBOL", + "name": "match_capture_pattern" + } + ] + } + } + ] + }, + "match_mapping_pattern": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "match_double_star_pattern" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "match_key_value_pattern" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "match_key_value_pattern" + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "match_double_star_pattern" + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "}" + } + ] + } + ] + }, + "match_double_star_pattern": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "**" + }, + { + "type": "FIELD", + "name": "target", + "content": { + "type": "SYMBOL", + "name": "match_capture_pattern" + } + } + ] + }, + "match_key_value_pattern": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "key", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "match_literal_pattern" + }, + { + "type": "SYMBOL", + "name": "match_value_pattern" + } + ] + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "_match_pattern" + } + } + ] + }, + "match_class_pattern": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "class", + "content": { + "type": "SYMBOL", + "name": "pattern_class_name" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "match_positional_pattern" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "match_positional_pattern" + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "match_keyword_pattern" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "match_keyword_pattern" + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "match_positional_pattern" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "match_positional_pattern" + } + ] + } + } + ] + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "match_keyword_pattern" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "match_keyword_pattern" + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + } + ] + } + ] + }, + "pattern_class_name": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "." + }, + { + "type": "SYMBOL", + "name": "identifier" + } + ] + } + } + ] + }, + "match_positional_pattern": { + "type": "SYMBOL", + "name": "_match_pattern" + }, + "match_keyword_pattern": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "attribute", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "_match_pattern" + } + } + ] + }, + "guard": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "if" + }, + { + "type": "FIELD", + "name": "test", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + "function_definition": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "async" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "def" + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "type_parameters", + "content": { + "type": "SYMBOL", + "name": "type_parameters" + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "FIELD", + "name": "parameters", + "content": { + "type": "SYMBOL", + "name": "parameters" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "->" + }, + { + "type": "FIELD", + "name": "return_type", + "content": { + "type": "SYMBOL", + "name": "type" + } + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + } + ] + }, + "parameters": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_parameters" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "lambda_parameters": { + "type": "SYMBOL", + "name": "_parameters" + }, + "list_splat": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "*" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + "dictionary_splat": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "**" + }, + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + "global_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "global" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "identifier" + } + ] + } + } + ] + } + ] + }, + "nonlocal_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "nonlocal" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "identifier" + } + ] + } + } + ] + } + ] + }, + "exec_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "exec" + }, + { + "type": "FIELD", + "name": "code", + "content": { + "type": "SYMBOL", + "name": "string" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "in" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + } + } + ] + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "type_alias_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "type" + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "type_parameters", + "content": { + "type": "SYMBOL", + "name": "type_parameters" + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + "class_definition": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "class" + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "type_parameters", + "content": { + "type": "SYMBOL", + "name": "type_parameters" + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "FIELD", + "name": "superclasses", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "argument_list" + }, + { + "type": "BLANK" + } + ] + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_suite" + } + } + ] + }, + "type_parameters": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "type_parameter", + "content": { + "type": "SYMBOL", + "name": "_type_parameter" + } + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "type_parameter", + "content": { + "type": "SYMBOL", + "name": "_type_parameter" + } + } + ] + } + } + ] + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + "_type_bound": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "bound", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + "typevar_parameter": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_type_bound" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "typevartuple_parameter": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "*" + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + } + ] + }, + "paramspec_parameter": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "**" + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + } + ] + }, + "_type_parameter": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "typevar_parameter" + }, + { + "type": "SYMBOL", + "name": "typevartuple_parameter" + }, + { + "type": "SYMBOL", + "name": "paramspec_parameter" + } + ] + }, + "parenthesized_list_splat": { + "type": "PREC", + "value": 1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "parenthesized_list_splat" + }, + "named": true, + "value": "parenthesized_expression" + }, + { + "type": "SYMBOL", + "name": "list_splat" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + } + }, + "argument_list": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "element", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "list_splat" + }, + { + "type": "SYMBOL", + "name": "dictionary_splat" + }, + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "parenthesized_list_splat" + }, + "named": true, + "value": "parenthesized_expression" + }, + { + "type": "SYMBOL", + "name": "keyword_argument" + } + ] + } + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "element", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "list_splat" + }, + { + "type": "SYMBOL", + "name": "dictionary_splat" + }, + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "parenthesized_list_splat" + }, + "named": true, + "value": "parenthesized_expression" + }, + { + "type": "SYMBOL", + "name": "keyword_argument" + } + ] + } + } + ] + } + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "decorated_definition": { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "SYMBOL", + "name": "decorator" + } + }, + { + "type": "FIELD", + "name": "definition", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "class_definition" + }, + { + "type": "SYMBOL", + "name": "function_definition" + } + ] + } + } + ] + }, + "decorator": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "@" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "_newline" + } + ] + }, + "_suite": { + "type": "CHOICE", + "members": [ + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_simple_statements" + }, + "named": true, + "value": "block" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_indent" + }, + { + "type": "SYMBOL", + "name": "block" + } + ] + }, + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_newline" + }, + "named": true, + "value": "block" + } + ] + }, + "block": { + "type": "SEQ", + "members": [ + { + "type": "REPEAT", + "content": { + "type": "SYMBOL", + "name": "_statement" + } + }, + { + "type": "SYMBOL", + "name": "_dedent" + } + ] + }, + "expression_list": { + "type": "PREC_RIGHT", + "value": 0, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "element", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "list_splat" + }, + { + "type": "SYMBOL", + "name": "dictionary_splat" + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "element", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "list_splat" + }, + { + "type": "SYMBOL", + "name": "dictionary_splat" + } + ] + } + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + } + ] + } + ] + } + }, + "dotted_name": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "." + }, + { + "type": "SYMBOL", + "name": "identifier" + } + ] + } + } + ] + }, + "_parameters": { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "parameter" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "parameter" + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "_patterns": { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "element", + "content": { + "type": "SYMBOL", + "name": "pattern" + } + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "element", + "content": { + "type": "SYMBOL", + "name": "pattern" + } + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "trailing_comma", + "content": { + "type": "STRING", + "value": "," + } + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "parameter": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "SYMBOL", + "name": "typed_parameter" + }, + { + "type": "SYMBOL", + "name": "default_parameter" + }, + { + "type": "SYMBOL", + "name": "typed_default_parameter" + }, + { + "type": "SYMBOL", + "name": "list_splat_pattern" + }, + { + "type": "SYMBOL", + "name": "tuple_pattern" + }, + { + "type": "SYMBOL", + "name": "keyword_separator" + }, + { + "type": "SYMBOL", + "name": "positional_separator" + }, + { + "type": "SYMBOL", + "name": "dictionary_splat_pattern" + } + ] + }, + "pattern": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "SYMBOL", + "name": "keyword_identifier" + }, + { + "type": "SYMBOL", + "name": "subscript" + }, + { + "type": "SYMBOL", + "name": "attribute" + }, + { + "type": "SYMBOL", + "name": "list_splat_pattern" + }, + { + "type": "SYMBOL", + "name": "tuple_pattern" + }, + { + "type": "SYMBOL", + "name": "list_pattern" + } + ] + }, + "tuple_pattern": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_patterns" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "list_pattern": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_patterns" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + "default_parameter": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + "typed_default_parameter": { + "type": "PREC", + "value": -1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "type", + "content": { + "type": "SYMBOL", + "name": "type" + } + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + "list_splat_pattern": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "*" + }, + { + "type": "FIELD", + "name": "vararg", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "SYMBOL", + "name": "keyword_identifier" + }, + { + "type": "SYMBOL", + "name": "subscript" + }, + { + "type": "SYMBOL", + "name": "attribute" + } + ] + } + } + ] + }, + "dictionary_splat_pattern": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "**" + }, + { + "type": "FIELD", + "name": "kwarg", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "SYMBOL", + "name": "keyword_identifier" + }, + { + "type": "SYMBOL", + "name": "subscript" + }, + { + "type": "SYMBOL", + "name": "attribute" + } + ] + } + } + ] + }, + "_expression_within_for_in_clause": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "lambda_within_for_in_clause" + }, + "named": true, + "value": "lambda" + } + ] + }, + "expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "comparison_operator" + }, + { + "type": "SYMBOL", + "name": "not_operator" + }, + { + "type": "SYMBOL", + "name": "boolean_operator" + }, + { + "type": "SYMBOL", + "name": "await" + }, + { + "type": "SYMBOL", + "name": "lambda" + }, + { + "type": "SYMBOL", + "name": "primary_expression" + }, + { + "type": "SYMBOL", + "name": "conditional_expression" + }, + { + "type": "SYMBOL", + "name": "named_expression" + } + ] + }, + "primary_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "binary_operator" + }, + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "SYMBOL", + "name": "keyword_identifier" + }, + { + "type": "SYMBOL", + "name": "string" + }, + { + "type": "SYMBOL", + "name": "concatenated_string" + }, + { + "type": "SYMBOL", + "name": "integer" + }, + { + "type": "SYMBOL", + "name": "float" + }, + { + "type": "SYMBOL", + "name": "true" + }, + { + "type": "SYMBOL", + "name": "false" + }, + { + "type": "SYMBOL", + "name": "none" + }, + { + "type": "SYMBOL", + "name": "unary_operator" + }, + { + "type": "SYMBOL", + "name": "attribute" + }, + { + "type": "SYMBOL", + "name": "subscript" + }, + { + "type": "SYMBOL", + "name": "call" + }, + { + "type": "SYMBOL", + "name": "list" + }, + { + "type": "SYMBOL", + "name": "list_comprehension" + }, + { + "type": "SYMBOL", + "name": "dictionary" + }, + { + "type": "SYMBOL", + "name": "dictionary_comprehension" + }, + { + "type": "SYMBOL", + "name": "set" + }, + { + "type": "SYMBOL", + "name": "set_comprehension" + }, + { + "type": "SYMBOL", + "name": "tuple" + }, + { + "type": "SYMBOL", + "name": "parenthesized_expression" + }, + { + "type": "SYMBOL", + "name": "generator_expression" + }, + { + "type": "SYMBOL", + "name": "ellipsis" + } + ] + }, + "not_operator": { + "type": "PREC", + "value": 12, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "not" + }, + { + "type": "FIELD", + "name": "argument", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + "boolean_operator": { + "type": "CHOICE", + "members": [ + { + "type": "PREC_RIGHT", + "value": 11, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "and" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "PREC_RIGHT", + "value": 10, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "or" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + } + ] + }, + "binary_operator": { + "type": "CHOICE", + "members": [ + { + "type": "PREC_LEFT", + "value": 17, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "+" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 17, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "-" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 18, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "*" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 18, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "@" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 18, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "/" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 18, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "%" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 18, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "//" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_RIGHT", + "value": 20, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "**" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 13, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "|" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 14, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "&" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 15, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "^" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 16, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": "<<" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 16, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "STRING", + "value": ">>" + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + } + ] + }, + "unary_operator": { + "type": "PREC", + "value": 19, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "+" + }, + { + "type": "STRING", + "value": "-" + }, + { + "type": "STRING", + "value": "~" + } + ] + } + }, + { + "type": "FIELD", + "name": "argument", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + } + ] + } + }, + "comparison_operator": { + "type": "PREC_LEFT", + "value": 2, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "primary_expression" + }, + { + "type": "REPEAT1", + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "operators", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "<" + }, + { + "type": "STRING", + "value": "<=" + }, + { + "type": "STRING", + "value": "==" + }, + { + "type": "STRING", + "value": "!=" + }, + { + "type": "STRING", + "value": ">=" + }, + { + "type": "STRING", + "value": ">" + }, + { + "type": "STRING", + "value": "<>" + }, + { + "type": "STRING", + "value": "in" + }, + { + "type": "ALIAS", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "not" + }, + { + "type": "STRING", + "value": "in" + } + ] + }, + "named": false, + "value": "not in" + }, + { + "type": "STRING", + "value": "is" + }, + { + "type": "ALIAS", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "is" + }, + { + "type": "STRING", + "value": "not" + } + ] + }, + "named": false, + "value": "is not" + } + ] + } + }, + { + "type": "SYMBOL", + "name": "primary_expression" + } + ] + } + } + ] + } + }, + "lambda": { + "type": "PREC", + "value": -2, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "lambda" + }, + { + "type": "FIELD", + "name": "parameters", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "lambda_parameters" + }, + { + "type": "BLANK" + } + ] + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + "lambda_within_for_in_clause": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "lambda" + }, + { + "type": "FIELD", + "name": "parameters", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "lambda_parameters" + }, + { + "type": "BLANK" + } + ] + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "_expression_within_for_in_clause" + } + } + ] + }, + "assignment": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "_left_hand_side" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "=" + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "_right_hand_side" + } + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "type", + "content": { + "type": "SYMBOL", + "name": "type" + } + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "type", + "content": { + "type": "SYMBOL", + "name": "type" + } + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "_right_hand_side" + } + } + ] + } + ] + } + ] + }, + "augmented_assignment": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "_left_hand_side" + } + }, + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "+=" + }, + { + "type": "STRING", + "value": "-=" + }, + { + "type": "STRING", + "value": "*=" + }, + { + "type": "STRING", + "value": "/=" + }, + { + "type": "STRING", + "value": "@=" + }, + { + "type": "STRING", + "value": "//=" + }, + { + "type": "STRING", + "value": "%=" + }, + { + "type": "STRING", + "value": "**=" + }, + { + "type": "STRING", + "value": ">>=" + }, + { + "type": "STRING", + "value": "<<=" + }, + { + "type": "STRING", + "value": "&=" + }, + { + "type": "STRING", + "value": "^=" + }, + { + "type": "STRING", + "value": "|=" + } + ] + } + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SYMBOL", + "name": "_right_hand_side" + } + } + ] + }, + "_left_hand_side": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "pattern" + }, + { + "type": "SYMBOL", + "name": "pattern_list" + } + ] + }, + "pattern_list": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "element", + "content": { + "type": "SYMBOL", + "name": "pattern" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "element", + "content": { + "type": "SYMBOL", + "name": "pattern" + } + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + } + ] + } + ] + }, + "_right_hand_side": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "expression_list" + }, + { + "type": "SYMBOL", + "name": "assignment" + }, + { + "type": "SYMBOL", + "name": "augmented_assignment" + }, + { + "type": "SYMBOL", + "name": "yield" + } + ] + }, + "yield": { + "type": "PREC_RIGHT", + "value": 0, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "yield" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "from" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_expressions" + }, + { + "type": "BLANK" + } + ] + } + ] + } + ] + } + }, + "attribute": { + "type": "PREC", + "value": 21, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "object", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "STRING", + "value": "." + }, + { + "type": "FIELD", + "name": "attribute", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + } + ] + } + }, + "subscript": { + "type": "PREC", + "value": 21, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "STRING", + "value": "[" + }, + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "subscript", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "slice" + } + ] + } + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "subscript", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "slice" + } + ] + } + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "]" + } + ] + } + }, + "slice": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "start", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "stop", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": ":" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "step", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "ellipsis": { + "type": "STRING", + "value": "..." + }, + "call": { + "type": "PREC", + "value": 21, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "function", + "content": { + "type": "SYMBOL", + "name": "primary_expression" + } + }, + { + "type": "FIELD", + "name": "arguments", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "generator_expression" + }, + { + "type": "SYMBOL", + "name": "argument_list" + } + ] + } + } + ] + } + }, + "typed_parameter": { + "type": "PREC", + "value": -1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "SYMBOL", + "name": "list_splat_pattern" + }, + { + "type": "SYMBOL", + "name": "dictionary_splat_pattern" + } + ] + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "type", + "content": { + "type": "SYMBOL", + "name": "type" + } + } + ] + } + }, + "type": { + "type": "SYMBOL", + "name": "expression" + }, + "keyword_argument": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "name", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "SYMBOL", + "name": "keyword_identifier" + } + ] + } + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + "list": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_collection_elements" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + "set": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "SYMBOL", + "name": "_collection_elements" + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "tuple": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_collection_elements" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "dictionary": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "element", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "pair" + }, + { + "type": "SYMBOL", + "name": "dictionary_splat" + } + ] + } + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "element", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "pair" + }, + { + "type": "SYMBOL", + "name": "dictionary_splat" + } + ] + } + } + ] + } + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "pair": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "key", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + "list_comprehension": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "SYMBOL", + "name": "_comprehension_clauses" + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + "dictionary_comprehension": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "pair" + } + }, + { + "type": "SYMBOL", + "name": "_comprehension_clauses" + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "set_comprehension": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "SYMBOL", + "name": "_comprehension_clauses" + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "generator_expression": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "SYMBOL", + "name": "_comprehension_clauses" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "_comprehension_clauses": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "for_in_clause" + }, + { + "type": "REPEAT", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "for_in_clause" + }, + { + "type": "SYMBOL", + "name": "if_clause" + } + ] + } + } + ] + }, + "parenthesized_expression": { + "type": "PREC", + "value": 1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "FIELD", + "name": "inner", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "yield" + } + ] + } + }, + { + "type": "STRING", + "value": ")" + } + ] + } + }, + "_collection_elements": { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "element", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "yield" + }, + { + "type": "SYMBOL", + "name": "list_splat" + }, + { + "type": "SYMBOL", + "name": "parenthesized_list_splat" + } + ] + } + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "element", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "yield" + }, + { + "type": "SYMBOL", + "name": "list_splat" + }, + { + "type": "SYMBOL", + "name": "parenthesized_list_splat" + } + ] + } + } + ] + } + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "trailing_comma", + "content": { + "type": "STRING", + "value": "," + } + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "for_in_clause": { + "type": "PREC_LEFT", + "value": 0, + "content": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "async" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "for" + }, + { + "type": "FIELD", + "name": "left", + "content": { + "type": "SYMBOL", + "name": "_left_hand_side" + } + }, + { + "type": "STRING", + "value": "in" + }, + { + "type": "FIELD", + "name": "right", + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_expression_within_for_in_clause" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "_expression_within_for_in_clause" + } + ] + } + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + } + }, + "if_clause": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "if" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + "conditional_expression": { + "type": "PREC_RIGHT", + "value": -1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": "if" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": "else" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + } + }, + "concatenated_string": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "string" + }, + { + "type": "REPEAT1", + "content": { + "type": "SYMBOL", + "name": "string" + } + } + ] + }, + "string": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "prefix", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_string_start" + }, + "named": false, + "value": "\"" + } + }, + { + "type": "REPEAT", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "FIELD", + "name": "interpolation", + "content": { + "type": "SYMBOL", + "name": "interpolation" + } + }, + { + "type": "FIELD", + "name": "string_content", + "content": { + "type": "SYMBOL", + "name": "string_content" + } + } + ] + } + }, + { + "type": "FIELD", + "name": "suffix", + "content": { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "_string_end" + }, + "named": false, + "value": "\"" + } + } + ] + }, + "string_content": { + "type": "PREC_RIGHT", + "value": 0, + "content": { + "type": "REPEAT1", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_escape_interpolation" + }, + { + "type": "SYMBOL", + "name": "escape_sequence" + }, + { + "type": "SYMBOL", + "name": "_not_escape_sequence" + }, + { + "type": "SYMBOL", + "name": "_string_content" + } + ] + } + } + }, + "interpolation": { + "type": "SEQ", + "members": [ + { + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "STRING", + "value": "{" + } + }, + { + "type": "FIELD", + "name": "expression", + "content": { + "type": "SYMBOL", + "name": "_f_expression" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "=" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "type_conversion" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "format_specifier" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "_f_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "expression_list" + }, + { + "type": "SYMBOL", + "name": "yield" + } + ] + }, + "_escape_interpolation": { + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "{{" + }, + { + "type": "STRING", + "value": "}}" + } + ] + } + }, + "escape_sequence": { + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "PREC", + "value": 1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "\\" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "PATTERN", + "value": "u[a-fA-F\\d]{4}" + }, + { + "type": "PATTERN", + "value": "U[a-fA-F\\d]{8}" + }, + { + "type": "PATTERN", + "value": "x[a-fA-F\\d]{2}" + }, + { + "type": "PATTERN", + "value": "\\d{3}" + }, + { + "type": "PATTERN", + "value": "\\r?\\n" + }, + { + "type": "PATTERN", + "value": "['\"abfrntv\\\\]" + }, + { + "type": "PATTERN", + "value": "N\\{[^}]+\\}" + } + ] + } + ] + } + } + }, + "_not_escape_sequence": { + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "STRING", + "value": "\\" + } + }, + "format_specifier": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": ":" + }, + { + "type": "REPEAT", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "TOKEN", + "content": { + "type": "PREC", + "value": 1, + "content": { + "type": "PATTERN", + "value": "[^{}\\n]+" + } + } + }, + { + "type": "ALIAS", + "content": { + "type": "SYMBOL", + "name": "interpolation" + }, + "named": true, + "value": "format_expression" + } + ] + } + } + ] + }, + "format_expression": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "type_conversion": { + "type": "PATTERN", + "value": "![a-z]" + }, + "integer": { + "type": "TOKEN", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "0x" + }, + { + "type": "STRING", + "value": "0X" + } + ] + }, + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "_?[A-Fa-f0-9]+" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "PATTERN", + "value": "[Ll]" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "0o" + }, + { + "type": "STRING", + "value": "0O" + } + ] + }, + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "_?[0-7]+" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "PATTERN", + "value": "[Ll]" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "0b" + }, + { + "type": "STRING", + "value": "0B" + } + ] + }, + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "_?[0-1]+" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "PATTERN", + "value": "[Ll]" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[0-9]+_?" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "PATTERN", + "value": "[Ll]" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "PATTERN", + "value": "[jJ]" + }, + { + "type": "BLANK" + } + ] + } + ] + } + ] + } + ] + } + }, + "float": { + "type": "TOKEN", + "content": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[0-9]+_?" + } + }, + { + "type": "STRING", + "value": "." + }, + { + "type": "CHOICE", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[0-9]+_?" + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "PATTERN", + "value": "[eE][\\+-]?" + }, + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[0-9]+_?" + } + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[0-9]+_?" + } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "." + }, + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[0-9]+_?" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "PATTERN", + "value": "[eE][\\+-]?" + }, + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[0-9]+_?" + } + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[0-9]+_?" + } + }, + { + "type": "SEQ", + "members": [ + { + "type": "PATTERN", + "value": "[eE][\\+-]?" + }, + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[0-9]+_?" + } + } + ] + } + ] + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "PATTERN", + "value": "[Ll]" + }, + { + "type": "PATTERN", + "value": "[jJ]" + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + } + }, + "identifier": { + "type": "PATTERN", + "value": "[_\\p{XID_Start}][_\\p{XID_Continue}]*" + }, + "keyword_identifier": { + "type": "PREC", + "value": -3, + "content": { + "type": "ALIAS", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "print" + }, + { + "type": "STRING", + "value": "exec" + }, + { + "type": "STRING", + "value": "async" + }, + { + "type": "STRING", + "value": "await" + }, + { + "type": "STRING", + "value": "match" + }, + { + "type": "STRING", + "value": "type" + } + ] + }, + "named": true, + "value": "identifier" + } + }, + "true": { + "type": "STRING", + "value": "True" + }, + "false": { + "type": "STRING", + "value": "False" + }, + "none": { + "type": "STRING", + "value": "None" + }, + "await": { + "type": "PREC", + "value": 19, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "await" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + } + }, + "comment": { + "type": "TOKEN", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "#" + }, + { + "type": "PATTERN", + "value": ".*" + } + ] + } + }, + "positional_separator": { + "type": "STRING", + "value": "/" + }, + "keyword_separator": { + "type": "STRING", + "value": "*" + }, + "_semicolon": { + "type": "STRING", + "value": ";" + } + }, + "extras": [ + { + "type": "SYMBOL", + "name": "comment" + }, + { + "type": "PATTERN", + "value": "[\\s\\f\\uFEFF\\u2060\\u200B]|\\\\\\r?\\n" + } + ], + "conflicts": [ + [ + "primary_expression", + "pattern" + ], + [ + "primary_expression", + "list_splat_pattern" + ], + [ + "tuple", + "tuple_pattern" + ], + [ + "list", + "list_pattern" + ], + [ + "with_item", + "_collection_elements" + ] + ], + "precedences": [], + "externals": [ + { + "type": "SYMBOL", + "name": "_newline" + }, + { + "type": "SYMBOL", + "name": "_indent" + }, + { + "type": "SYMBOL", + "name": "_dedent" + }, + { + "type": "SYMBOL", + "name": "_string_start" + }, + { + "type": "SYMBOL", + "name": "_string_content" + }, + { + "type": "SYMBOL", + "name": "_string_end" + } + ], + "inline": [ + "_simple_statement", + "_compound_statement", + "_suite", + "_expressions", + "_left_hand_side", + "keyword_identifier" + ], + "supertypes": [ + "_simple_statement", + "_compound_statement", + "expression", + "primary_expression", + "pattern", + "parameter" + ] +} + diff --git a/python/extractor/tsg-python/tree-sitter-python/src/node-types.json b/python/extractor/tsg-python/tree-sitter-python/src/node-types.json new file mode 100644 index 00000000000..515d815d833 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/src/node-types.json @@ -0,0 +1,4064 @@ +[ + { + "type": "_compound_statement", + "named": true, + "subtypes": [ + { + "type": "class_definition", + "named": true + }, + { + "type": "decorated_definition", + "named": true + }, + { + "type": "for_statement", + "named": true + }, + { + "type": "function_definition", + "named": true + }, + { + "type": "if_statement", + "named": true + }, + { + "type": "match_statement", + "named": true + }, + { + "type": "try_statement", + "named": true + }, + { + "type": "while_statement", + "named": true + }, + { + "type": "with_statement", + "named": true + } + ] + }, + { + "type": "_simple_statement", + "named": true, + "subtypes": [ + { + "type": "assert_statement", + "named": true + }, + { + "type": "break_statement", + "named": true + }, + { + "type": "continue_statement", + "named": true + }, + { + "type": "delete_statement", + "named": true + }, + { + "type": "exec_statement", + "named": true + }, + { + "type": "expression_statement", + "named": true + }, + { + "type": "future_import_statement", + "named": true + }, + { + "type": "global_statement", + "named": true + }, + { + "type": "import_from_statement", + "named": true + }, + { + "type": "import_statement", + "named": true + }, + { + "type": "nonlocal_statement", + "named": true + }, + { + "type": "pass_statement", + "named": true + }, + { + "type": "print_statement", + "named": true + }, + { + "type": "raise_statement", + "named": true + }, + { + "type": "return_statement", + "named": true + }, + { + "type": "type_alias_statement", + "named": true + } + ] + }, + { + "type": "expression", + "named": true, + "subtypes": [ + { + "type": "await", + "named": true + }, + { + "type": "boolean_operator", + "named": true + }, + { + "type": "comparison_operator", + "named": true + }, + { + "type": "conditional_expression", + "named": true + }, + { + "type": "lambda", + "named": true + }, + { + "type": "named_expression", + "named": true + }, + { + "type": "not_operator", + "named": true + }, + { + "type": "primary_expression", + "named": true + } + ] + }, + { + "type": "parameter", + "named": true, + "subtypes": [ + { + "type": "default_parameter", + "named": true + }, + { + "type": "dictionary_splat_pattern", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "keyword_separator", + "named": true + }, + { + "type": "list_splat_pattern", + "named": true + }, + { + "type": "positional_separator", + "named": true + }, + { + "type": "tuple_pattern", + "named": true + }, + { + "type": "typed_default_parameter", + "named": true + }, + { + "type": "typed_parameter", + "named": true + } + ] + }, + { + "type": "pattern", + "named": true, + "subtypes": [ + { + "type": "attribute", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "list_pattern", + "named": true + }, + { + "type": "list_splat_pattern", + "named": true + }, + { + "type": "subscript", + "named": true + }, + { + "type": "tuple_pattern", + "named": true + } + ] + }, + { + "type": "primary_expression", + "named": true, + "subtypes": [ + { + "type": "attribute", + "named": true + }, + { + "type": "binary_operator", + "named": true + }, + { + "type": "call", + "named": true + }, + { + "type": "concatenated_string", + "named": true + }, + { + "type": "dictionary", + "named": true + }, + { + "type": "dictionary_comprehension", + "named": true + }, + { + "type": "ellipsis", + "named": true + }, + { + "type": "false", + "named": true + }, + { + "type": "float", + "named": true + }, + { + "type": "generator_expression", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "integer", + "named": true + }, + { + "type": "list", + "named": true + }, + { + "type": "list_comprehension", + "named": true + }, + { + "type": "none", + "named": true + }, + { + "type": "parenthesized_expression", + "named": true + }, + { + "type": "set", + "named": true + }, + { + "type": "set_comprehension", + "named": true + }, + { + "type": "string", + "named": true + }, + { + "type": "subscript", + "named": true + }, + { + "type": "true", + "named": true + }, + { + "type": "tuple", + "named": true + }, + { + "type": "unary_operator", + "named": true + } + ] + }, + { + "type": "aliased_import", + "named": true, + "fields": { + "alias": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "dotted_name", + "named": true + } + ] + } + } + }, + { + "type": "argument_list", + "named": true, + "fields": { + "element": { + "multiple": true, + "required": false, + "types": [ + { + "type": "dictionary_splat", + "named": true + }, + { + "type": "expression", + "named": true + }, + { + "type": "keyword_argument", + "named": true + }, + { + "type": "list_splat", + "named": true + }, + { + "type": "parenthesized_expression", + "named": true + } + ] + } + } + }, + { + "type": "assert_statement", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "assignment", + "named": true, + "fields": { + "left": { + "multiple": false, + "required": true, + "types": [ + { + "type": "pattern", + "named": true + }, + { + "type": "pattern_list", + "named": true + } + ] + }, + "right": { + "multiple": false, + "required": false, + "types": [ + { + "type": "assignment", + "named": true + }, + { + "type": "augmented_assignment", + "named": true + }, + { + "type": "expression", + "named": true + }, + { + "type": "expression_list", + "named": true + }, + { + "type": "yield", + "named": true + } + ] + }, + "type": { + "multiple": false, + "required": false, + "types": [ + { + "type": "type", + "named": true + } + ] + } + } + }, + { + "type": "attribute", + "named": true, + "fields": { + "attribute": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "object": { + "multiple": false, + "required": true, + "types": [ + { + "type": "primary_expression", + "named": true + } + ] + } + } + }, + { + "type": "augmented_assignment", + "named": true, + "fields": { + "left": { + "multiple": false, + "required": true, + "types": [ + { + "type": "pattern", + "named": true + }, + { + "type": "pattern_list", + "named": true + } + ] + }, + "operator": { + "multiple": false, + "required": true, + "types": [ + { + "type": "%=", + "named": false + }, + { + "type": "&=", + "named": false + }, + { + "type": "**=", + "named": false + }, + { + "type": "*=", + "named": false + }, + { + "type": "+=", + "named": false + }, + { + "type": "-=", + "named": false + }, + { + "type": "//=", + "named": false + }, + { + "type": "/=", + "named": false + }, + { + "type": "<<=", + "named": false + }, + { + "type": ">>=", + "named": false + }, + { + "type": "@=", + "named": false + }, + { + "type": "^=", + "named": false + }, + { + "type": "|=", + "named": false + } + ] + }, + "right": { + "multiple": false, + "required": true, + "types": [ + { + "type": "assignment", + "named": true + }, + { + "type": "augmented_assignment", + "named": true + }, + { + "type": "expression", + "named": true + }, + { + "type": "expression_list", + "named": true + }, + { + "type": "yield", + "named": true + } + ] + } + } + }, + { + "type": "await", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "binary_operator", + "named": true, + "fields": { + "left": { + "multiple": false, + "required": true, + "types": [ + { + "type": "primary_expression", + "named": true + } + ] + }, + "operator": { + "multiple": false, + "required": true, + "types": [ + { + "type": "%", + "named": false + }, + { + "type": "&", + "named": false + }, + { + "type": "*", + "named": false + }, + { + "type": "**", + "named": false + }, + { + "type": "+", + "named": false + }, + { + "type": "-", + "named": false + }, + { + "type": "/", + "named": false + }, + { + "type": "//", + "named": false + }, + { + "type": "<<", + "named": false + }, + { + "type": ">>", + "named": false + }, + { + "type": "@", + "named": false + }, + { + "type": "^", + "named": false + }, + { + "type": "|", + "named": false + } + ] + }, + "right": { + "multiple": false, + "required": true, + "types": [ + { + "type": "primary_expression", + "named": true + } + ] + } + } + }, + { + "type": "block", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "_compound_statement", + "named": true + }, + { + "type": "_simple_statement", + "named": true + } + ] + } + }, + { + "type": "boolean_operator", + "named": true, + "fields": { + "left": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "operator": { + "multiple": false, + "required": true, + "types": [ + { + "type": "and", + "named": false + }, + { + "type": "or", + "named": false + } + ] + }, + "right": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "break_statement", + "named": true, + "fields": {} + }, + { + "type": "call", + "named": true, + "fields": { + "arguments": { + "multiple": false, + "required": true, + "types": [ + { + "type": "argument_list", + "named": true + }, + { + "type": "generator_expression", + "named": true + } + ] + }, + "function": { + "multiple": false, + "required": true, + "types": [ + { + "type": "primary_expression", + "named": true + } + ] + } + } + }, + { + "type": "case_block", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + }, + "guard": { + "multiple": false, + "required": false, + "types": [ + { + "type": "guard", + "named": true + } + ] + }, + "pattern": { + "multiple": false, + "required": true, + "types": [ + { + "type": "match_as_pattern", + "named": true + }, + { + "type": "match_capture_pattern", + "named": true + }, + { + "type": "match_class_pattern", + "named": true + }, + { + "type": "match_group_pattern", + "named": true + }, + { + "type": "match_literal_pattern", + "named": true + }, + { + "type": "match_mapping_pattern", + "named": true + }, + { + "type": "match_or_pattern", + "named": true + }, + { + "type": "match_sequence_pattern", + "named": true + }, + { + "type": "match_value_pattern", + "named": true + }, + { + "type": "match_wildcard_pattern", + "named": true + } + ] + } + } + }, + { + "type": "cases", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "case_block", + "named": true + } + ] + } + }, + { + "type": "chevron", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "class_definition", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + }, + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "superclasses": { + "multiple": false, + "required": false, + "types": [ + { + "type": "argument_list", + "named": true + } + ] + }, + "type_parameters": { + "multiple": false, + "required": false, + "types": [ + { + "type": "type_parameters", + "named": true + } + ] + } + } + }, + { + "type": "comparison_operator", + "named": true, + "fields": { + "operators": { + "multiple": true, + "required": true, + "types": [ + { + "type": "!=", + "named": false + }, + { + "type": "<", + "named": false + }, + { + "type": "<=", + "named": false + }, + { + "type": "<>", + "named": false + }, + { + "type": "==", + "named": false + }, + { + "type": ">", + "named": false + }, + { + "type": ">=", + "named": false + }, + { + "type": "in", + "named": false + }, + { + "type": "is", + "named": false + }, + { + "type": "is not", + "named": false + }, + { + "type": "not in", + "named": false + } + ] + } + }, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "primary_expression", + "named": true + } + ] + } + }, + { + "type": "concatenated_string", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "string", + "named": true + } + ] + } + }, + { + "type": "conditional_expression", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "continue_statement", + "named": true, + "fields": {} + }, + { + "type": "decorated_definition", + "named": true, + "fields": { + "definition": { + "multiple": false, + "required": true, + "types": [ + { + "type": "class_definition", + "named": true + }, + { + "type": "function_definition", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "decorator", + "named": true + } + ] + } + }, + { + "type": "decorator", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "default_parameter", + "named": true, + "fields": { + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "delete_statement", + "named": true, + "fields": { + "target": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "expression_list", + "named": true + } + ] + } + } + }, + { + "type": "dictionary", + "named": true, + "fields": { + "element": { + "multiple": true, + "required": false, + "types": [ + { + "type": "dictionary_splat", + "named": true + }, + { + "type": "pair", + "named": true + } + ] + } + } + }, + { + "type": "dictionary_comprehension", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "pair", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "for_in_clause", + "named": true + }, + { + "type": "if_clause", + "named": true + } + ] + } + }, + { + "type": "dictionary_splat", + "named": true, + "fields": { + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "dictionary_splat_pattern", + "named": true, + "fields": { + "kwarg": { + "multiple": false, + "required": true, + "types": [ + { + "type": "attribute", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "subscript", + "named": true + } + ] + } + } + }, + { + "type": "dotted_name", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "elif_clause", + "named": true, + "fields": { + "condition": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "consequence": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + } + } + }, + { + "type": "else_clause", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + } + } + }, + { + "type": "except_clause", + "named": true, + "fields": { + "alias": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + }, + "type": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "except_group_clause", + "named": true, + "fields": { + "alias": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + }, + "type": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "exec_statement", + "named": true, + "fields": { + "code": { + "multiple": false, + "required": true, + "types": [ + { + "type": "string", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "expression_list", + "named": true, + "fields": { + "element": { + "multiple": true, + "required": true, + "types": [ + { + "type": "dictionary_splat", + "named": true + }, + { + "type": "expression", + "named": true + }, + { + "type": "list_splat", + "named": true + } + ] + } + } + }, + { + "type": "expression_statement", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "assignment", + "named": true + }, + { + "type": "augmented_assignment", + "named": true + }, + { + "type": "expression", + "named": true + }, + { + "type": "expression_list", + "named": true + }, + { + "type": "yield", + "named": true + } + ] + } + }, + { + "type": "finally_clause", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + } + } + }, + { + "type": "for_in_clause", + "named": true, + "fields": { + "left": { + "multiple": false, + "required": true, + "types": [ + { + "type": "pattern", + "named": true + }, + { + "type": "pattern_list", + "named": true + } + ] + }, + "right": { + "multiple": true, + "required": true, + "types": [ + { + "type": ",", + "named": false + }, + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "for_statement", + "named": true, + "fields": { + "alternative": { + "multiple": false, + "required": false, + "types": [ + { + "type": "else_clause", + "named": true + } + ] + }, + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + }, + "left": { + "multiple": false, + "required": true, + "types": [ + { + "type": "pattern", + "named": true + }, + { + "type": "pattern_list", + "named": true + } + ] + }, + "right": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "expression_list", + "named": true + } + ] + } + } + }, + { + "type": "format_expression", + "named": true, + "fields": { + "expression": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "expression_list", + "named": true + }, + { + "type": "yield", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "format_specifier", + "named": true + }, + { + "type": "type_conversion", + "named": true + } + ] + } + }, + { + "type": "format_specifier", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "format_expression", + "named": true + } + ] + } + }, + { + "type": "function_definition", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + }, + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "parameters": { + "multiple": false, + "required": true, + "types": [ + { + "type": "parameters", + "named": true + } + ] + }, + "return_type": { + "multiple": false, + "required": false, + "types": [ + { + "type": "type", + "named": true + } + ] + }, + "type_parameters": { + "multiple": false, + "required": false, + "types": [ + { + "type": "type_parameters", + "named": true + } + ] + } + } + }, + { + "type": "future_import_statement", + "named": true, + "fields": { + "name": { + "multiple": true, + "required": true, + "types": [ + { + "type": "aliased_import", + "named": true + }, + { + "type": "dotted_name", + "named": true + } + ] + } + } + }, + { + "type": "generator_expression", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "for_in_clause", + "named": true + }, + { + "type": "if_clause", + "named": true + } + ] + } + }, + { + "type": "global_statement", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "guard", + "named": true, + "fields": { + "test": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "if_clause", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "if_statement", + "named": true, + "fields": { + "alternative": { + "multiple": true, + "required": false, + "types": [ + { + "type": "elif_clause", + "named": true + }, + { + "type": "else_clause", + "named": true + } + ] + }, + "condition": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "consequence": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + } + } + }, + { + "type": "import_from_statement", + "named": true, + "fields": { + "module_name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "dotted_name", + "named": true + }, + { + "type": "relative_import", + "named": true + } + ] + }, + "name": { + "multiple": true, + "required": false, + "types": [ + { + "type": "aliased_import", + "named": true + }, + { + "type": "dotted_name", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "wildcard_import", + "named": true + } + ] + } + }, + { + "type": "import_prefix", + "named": true, + "fields": {} + }, + { + "type": "import_statement", + "named": true, + "fields": { + "name": { + "multiple": true, + "required": true, + "types": [ + { + "type": "aliased_import", + "named": true + }, + { + "type": "dotted_name", + "named": true + } + ] + } + } + }, + { + "type": "interpolation", + "named": true, + "fields": { + "expression": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "expression_list", + "named": true + }, + { + "type": "yield", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "format_specifier", + "named": true + }, + { + "type": "type_conversion", + "named": true + } + ] + } + }, + { + "type": "keyword_argument", + "named": true, + "fields": { + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "keyword_separator", + "named": true, + "fields": {} + }, + { + "type": "lambda", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "parameters": { + "multiple": false, + "required": false, + "types": [ + { + "type": "lambda_parameters", + "named": true + } + ] + } + } + }, + { + "type": "lambda_parameters", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "parameter", + "named": true + } + ] + } + }, + { + "type": "list", + "named": true, + "fields": { + "element": { + "multiple": true, + "required": false, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "list_splat", + "named": true + }, + { + "type": "parenthesized_list_splat", + "named": true + }, + { + "type": "yield", + "named": true + } + ] + }, + "trailing_comma": { + "multiple": false, + "required": false, + "types": [ + { + "type": ",", + "named": false + } + ] + } + } + }, + { + "type": "list_comprehension", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "for_in_clause", + "named": true + }, + { + "type": "if_clause", + "named": true + } + ] + } + }, + { + "type": "list_pattern", + "named": true, + "fields": { + "element": { + "multiple": true, + "required": false, + "types": [ + { + "type": "pattern", + "named": true + } + ] + }, + "trailing_comma": { + "multiple": false, + "required": false, + "types": [ + { + "type": ",", + "named": false + } + ] + } + } + }, + { + "type": "list_splat", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "list_splat_pattern", + "named": true, + "fields": { + "vararg": { + "multiple": false, + "required": true, + "types": [ + { + "type": "attribute", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "subscript", + "named": true + } + ] + } + } + }, + { + "type": "match_as_pattern", + "named": true, + "fields": { + "alias": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "pattern": { + "multiple": false, + "required": true, + "types": [ + { + "type": "match_capture_pattern", + "named": true + }, + { + "type": "match_class_pattern", + "named": true + }, + { + "type": "match_group_pattern", + "named": true + }, + { + "type": "match_literal_pattern", + "named": true + }, + { + "type": "match_mapping_pattern", + "named": true + }, + { + "type": "match_or_pattern", + "named": true + }, + { + "type": "match_sequence_pattern", + "named": true + }, + { + "type": "match_value_pattern", + "named": true + }, + { + "type": "match_wildcard_pattern", + "named": true + } + ] + } + } + }, + { + "type": "match_capture_pattern", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "match_class_pattern", + "named": true, + "fields": { + "class": { + "multiple": false, + "required": true, + "types": [ + { + "type": "pattern_class_name", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "match_keyword_pattern", + "named": true + }, + { + "type": "match_positional_pattern", + "named": true + } + ] + } + }, + { + "type": "match_double_star_pattern", + "named": true, + "fields": { + "target": { + "multiple": false, + "required": true, + "types": [ + { + "type": "match_capture_pattern", + "named": true + } + ] + } + } + }, + { + "type": "match_group_pattern", + "named": true, + "fields": { + "content": { + "multiple": false, + "required": true, + "types": [ + { + "type": "match_as_pattern", + "named": true + }, + { + "type": "match_capture_pattern", + "named": true + }, + { + "type": "match_class_pattern", + "named": true + }, + { + "type": "match_group_pattern", + "named": true + }, + { + "type": "match_literal_pattern", + "named": true + }, + { + "type": "match_mapping_pattern", + "named": true + }, + { + "type": "match_or_pattern", + "named": true + }, + { + "type": "match_sequence_pattern", + "named": true + }, + { + "type": "match_value_pattern", + "named": true + }, + { + "type": "match_wildcard_pattern", + "named": true + } + ] + } + } + }, + { + "type": "match_key_value_pattern", + "named": true, + "fields": { + "key": { + "multiple": false, + "required": true, + "types": [ + { + "type": "match_literal_pattern", + "named": true + }, + { + "type": "match_value_pattern", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "match_as_pattern", + "named": true + }, + { + "type": "match_capture_pattern", + "named": true + }, + { + "type": "match_class_pattern", + "named": true + }, + { + "type": "match_group_pattern", + "named": true + }, + { + "type": "match_literal_pattern", + "named": true + }, + { + "type": "match_mapping_pattern", + "named": true + }, + { + "type": "match_or_pattern", + "named": true + }, + { + "type": "match_sequence_pattern", + "named": true + }, + { + "type": "match_value_pattern", + "named": true + }, + { + "type": "match_wildcard_pattern", + "named": true + } + ] + } + } + }, + { + "type": "match_keyword_pattern", + "named": true, + "fields": { + "attribute": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "match_as_pattern", + "named": true + }, + { + "type": "match_capture_pattern", + "named": true + }, + { + "type": "match_class_pattern", + "named": true + }, + { + "type": "match_group_pattern", + "named": true + }, + { + "type": "match_literal_pattern", + "named": true + }, + { + "type": "match_mapping_pattern", + "named": true + }, + { + "type": "match_or_pattern", + "named": true + }, + { + "type": "match_sequence_pattern", + "named": true + }, + { + "type": "match_value_pattern", + "named": true + }, + { + "type": "match_wildcard_pattern", + "named": true + } + ] + } + } + }, + { + "type": "match_literal_pattern", + "named": true, + "fields": { + "imaginary": { + "multiple": false, + "required": false, + "types": [ + { + "type": "float", + "named": true + }, + { + "type": "integer", + "named": true + } + ] + }, + "operator": { + "multiple": false, + "required": false, + "types": [ + { + "type": "+", + "named": false + }, + { + "type": "-", + "named": false + } + ] + }, + "prefix_operator": { + "multiple": false, + "required": false, + "types": [ + { + "type": "-", + "named": false + } + ] + }, + "real": { + "multiple": false, + "required": false, + "types": [ + { + "type": "float", + "named": true + }, + { + "type": "integer", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "concatenated_string", + "named": true + }, + { + "type": "false", + "named": true + }, + { + "type": "none", + "named": true + }, + { + "type": "string", + "named": true + }, + { + "type": "true", + "named": true + } + ] + } + }, + { + "type": "match_mapping_pattern", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "match_double_star_pattern", + "named": true + }, + { + "type": "match_key_value_pattern", + "named": true + } + ] + } + }, + { + "type": "match_or_pattern", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "match_capture_pattern", + "named": true + }, + { + "type": "match_class_pattern", + "named": true + }, + { + "type": "match_group_pattern", + "named": true + }, + { + "type": "match_literal_pattern", + "named": true + }, + { + "type": "match_mapping_pattern", + "named": true + }, + { + "type": "match_sequence_pattern", + "named": true + }, + { + "type": "match_value_pattern", + "named": true + }, + { + "type": "match_wildcard_pattern", + "named": true + } + ] + } + }, + { + "type": "match_positional_pattern", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "match_as_pattern", + "named": true + }, + { + "type": "match_capture_pattern", + "named": true + }, + { + "type": "match_class_pattern", + "named": true + }, + { + "type": "match_group_pattern", + "named": true + }, + { + "type": "match_literal_pattern", + "named": true + }, + { + "type": "match_mapping_pattern", + "named": true + }, + { + "type": "match_or_pattern", + "named": true + }, + { + "type": "match_sequence_pattern", + "named": true + }, + { + "type": "match_value_pattern", + "named": true + }, + { + "type": "match_wildcard_pattern", + "named": true + } + ] + } + }, + { + "type": "match_sequence_pattern", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "match_as_pattern", + "named": true + }, + { + "type": "match_capture_pattern", + "named": true + }, + { + "type": "match_class_pattern", + "named": true + }, + { + "type": "match_group_pattern", + "named": true + }, + { + "type": "match_literal_pattern", + "named": true + }, + { + "type": "match_mapping_pattern", + "named": true + }, + { + "type": "match_or_pattern", + "named": true + }, + { + "type": "match_sequence_pattern", + "named": true + }, + { + "type": "match_star_pattern", + "named": true + }, + { + "type": "match_value_pattern", + "named": true + }, + { + "type": "match_wildcard_pattern", + "named": true + } + ] + } + }, + { + "type": "match_star_pattern", + "named": true, + "fields": { + "target": { + "multiple": false, + "required": true, + "types": [ + { + "type": "match_capture_pattern", + "named": true + }, + { + "type": "match_wildcard_pattern", + "named": true + } + ] + } + } + }, + { + "type": "match_statement", + "named": true, + "fields": { + "cases": { + "multiple": false, + "required": true, + "types": [ + { + "type": "cases", + "named": true + } + ] + }, + "subject": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "tuple", + "named": true + } + ] + } + } + }, + { + "type": "match_value_pattern", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "module", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "_compound_statement", + "named": true + }, + { + "type": "_simple_statement", + "named": true + } + ] + } + }, + { + "type": "named_expression", + "named": true, + "fields": { + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "nonlocal_statement", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "not_operator", + "named": true, + "fields": { + "argument": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "pair", + "named": true, + "fields": { + "key": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "parameters", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "parameter", + "named": true + } + ] + } + }, + { + "type": "paramspec_parameter", + "named": true, + "fields": { + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + } + }, + { + "type": "parenthesized_expression", + "named": true, + "fields": { + "inner": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "yield", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "list_splat", + "named": true + }, + { + "type": "parenthesized_expression", + "named": true + } + ] + } + }, + { + "type": "parenthesized_list_splat", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "list_splat", + "named": true + }, + { + "type": "parenthesized_expression", + "named": true + } + ] + } + }, + { + "type": "pass_statement", + "named": true, + "fields": {} + }, + { + "type": "pattern_class_name", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "pattern_list", + "named": true, + "fields": { + "element": { + "multiple": true, + "required": true, + "types": [ + { + "type": "pattern", + "named": true + } + ] + } + } + }, + { + "type": "positional_separator", + "named": true, + "fields": {} + }, + { + "type": "print_statement", + "named": true, + "fields": { + "argument": { + "multiple": true, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "chevron", + "named": true + } + ] + } + }, + { + "type": "raise_statement", + "named": true, + "fields": { + "cause": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "expression_list", + "named": true + } + ] + } + }, + { + "type": "relative_import", + "named": true, + "fields": { + "name": { + "multiple": false, + "required": false, + "types": [ + { + "type": "dotted_name", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "import_prefix", + "named": true + } + ] + } + }, + { + "type": "return_statement", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "expression_list", + "named": true + } + ] + } + }, + { + "type": "set", + "named": true, + "fields": { + "element": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "list_splat", + "named": true + }, + { + "type": "parenthesized_list_splat", + "named": true + }, + { + "type": "yield", + "named": true + } + ] + }, + "trailing_comma": { + "multiple": false, + "required": false, + "types": [ + { + "type": ",", + "named": false + } + ] + } + } + }, + { + "type": "set_comprehension", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "for_in_clause", + "named": true + }, + { + "type": "if_clause", + "named": true + } + ] + } + }, + { + "type": "slice", + "named": true, + "fields": { + "start": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "step": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "stop": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "string", + "named": true, + "fields": { + "interpolation": { + "multiple": true, + "required": false, + "types": [ + { + "type": "interpolation", + "named": true + } + ] + }, + "prefix": { + "multiple": false, + "required": true, + "types": [ + { + "type": "\"", + "named": false + } + ] + }, + "string_content": { + "multiple": true, + "required": false, + "types": [ + { + "type": "string_content", + "named": true + } + ] + }, + "suffix": { + "multiple": false, + "required": true, + "types": [ + { + "type": "\"", + "named": false + } + ] + } + } + }, + { + "type": "string_content", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "escape_sequence", + "named": true + } + ] + } + }, + { + "type": "subscript", + "named": true, + "fields": { + "subscript": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "slice", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "primary_expression", + "named": true + } + ] + } + } + }, + { + "type": "try_statement", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "else_clause", + "named": true + }, + { + "type": "except_clause", + "named": true + }, + { + "type": "except_group_clause", + "named": true + }, + { + "type": "finally_clause", + "named": true + } + ] + } + }, + { + "type": "tuple", + "named": true, + "fields": { + "element": { + "multiple": true, + "required": false, + "types": [ + { + "type": "dictionary_splat", + "named": true + }, + { + "type": "expression", + "named": true + }, + { + "type": "list_splat", + "named": true + }, + { + "type": "parenthesized_list_splat", + "named": true + }, + { + "type": "yield", + "named": true + } + ] + }, + "trailing_comma": { + "multiple": false, + "required": false, + "types": [ + { + "type": ",", + "named": false + } + ] + } + } + }, + { + "type": "tuple_pattern", + "named": true, + "fields": { + "element": { + "multiple": true, + "required": false, + "types": [ + { + "type": "pattern", + "named": true + } + ] + }, + "trailing_comma": { + "multiple": false, + "required": false, + "types": [ + { + "type": ",", + "named": false + } + ] + } + } + }, + { + "type": "type", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "type_alias_statement", + "named": true, + "fields": { + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "type_parameters": { + "multiple": false, + "required": false, + "types": [ + { + "type": "type_parameters", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "type_parameters", + "named": true, + "fields": { + "type_parameter": { + "multiple": true, + "required": true, + "types": [ + { + "type": "paramspec_parameter", + "named": true + }, + { + "type": "typevar_parameter", + "named": true + }, + { + "type": "typevartuple_parameter", + "named": true + } + ] + } + } + }, + { + "type": "typed_default_parameter", + "named": true, + "fields": { + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "type": { + "multiple": false, + "required": true, + "types": [ + { + "type": "type", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "typed_parameter", + "named": true, + "fields": { + "type": { + "multiple": false, + "required": true, + "types": [ + { + "type": "type", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "dictionary_splat_pattern", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "list_splat_pattern", + "named": true + } + ] + } + }, + { + "type": "typevar_parameter", + "named": true, + "fields": { + "bound": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + } + }, + { + "type": "typevartuple_parameter", + "named": true, + "fields": { + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + } + }, + { + "type": "unary_operator", + "named": true, + "fields": { + "argument": { + "multiple": false, + "required": true, + "types": [ + { + "type": "primary_expression", + "named": true + } + ] + }, + "operator": { + "multiple": false, + "required": true, + "types": [ + { + "type": "+", + "named": false + }, + { + "type": "-", + "named": false + }, + { + "type": "~", + "named": false + } + ] + } + } + }, + { + "type": "while_statement", + "named": true, + "fields": { + "alternative": { + "multiple": false, + "required": false, + "types": [ + { + "type": "else_clause", + "named": true + } + ] + }, + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + }, + "condition": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "wildcard_import", + "named": true, + "fields": {} + }, + { + "type": "with_clause", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "with_item", + "named": true + } + ] + } + }, + { + "type": "with_item", + "named": true, + "fields": { + "alias": { + "multiple": false, + "required": false, + "types": [ + { + "type": "pattern", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "with_statement", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": true, + "types": [ + { + "type": "block", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "with_clause", + "named": true + } + ] + } + }, + { + "type": "yield", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "expression_list", + "named": true + } + ] + } + }, + { + "type": "!=", + "named": false + }, + { + "type": "\"", + "named": false + }, + { + "type": "%", + "named": false + }, + { + "type": "%=", + "named": false + }, + { + "type": "&", + "named": false + }, + { + "type": "&=", + "named": false + }, + { + "type": "(", + "named": false + }, + { + "type": ")", + "named": false + }, + { + "type": "*", + "named": false + }, + { + "type": "**", + "named": false + }, + { + "type": "**=", + "named": false + }, + { + "type": "*=", + "named": false + }, + { + "type": "+", + "named": false + }, + { + "type": "+=", + "named": false + }, + { + "type": ",", + "named": false + }, + { + "type": "-", + "named": false + }, + { + "type": "-=", + "named": false + }, + { + "type": "->", + "named": false + }, + { + "type": ".", + "named": false + }, + { + "type": "/", + "named": false + }, + { + "type": "//", + "named": false + }, + { + "type": "//=", + "named": false + }, + { + "type": "/=", + "named": false + }, + { + "type": ":", + "named": false + }, + { + "type": ":=", + "named": false + }, + { + "type": "<", + "named": false + }, + { + "type": "<<", + "named": false + }, + { + "type": "<<=", + "named": false + }, + { + "type": "<=", + "named": false + }, + { + "type": "<>", + "named": false + }, + { + "type": "=", + "named": false + }, + { + "type": "==", + "named": false + }, + { + "type": ">", + "named": false + }, + { + "type": ">=", + "named": false + }, + { + "type": ">>", + "named": false + }, + { + "type": ">>=", + "named": false + }, + { + "type": "@", + "named": false + }, + { + "type": "@=", + "named": false + }, + { + "type": "[", + "named": false + }, + { + "type": "]", + "named": false + }, + { + "type": "^", + "named": false + }, + { + "type": "^=", + "named": false + }, + { + "type": "__future__", + "named": false + }, + { + "type": "and", + "named": false + }, + { + "type": "as", + "named": false + }, + { + "type": "assert", + "named": false + }, + { + "type": "async", + "named": false + }, + { + "type": "await", + "named": false + }, + { + "type": "break", + "named": false + }, + { + "type": "case", + "named": false + }, + { + "type": "class", + "named": false + }, + { + "type": "comment", + "named": true + }, + { + "type": "continue", + "named": false + }, + { + "type": "def", + "named": false + }, + { + "type": "del", + "named": false + }, + { + "type": "elif", + "named": false + }, + { + "type": "ellipsis", + "named": true + }, + { + "type": "else", + "named": false + }, + { + "type": "escape_sequence", + "named": true + }, + { + "type": "except", + "named": false + }, + { + "type": "except*", + "named": false + }, + { + "type": "exec", + "named": false + }, + { + "type": "false", + "named": true + }, + { + "type": "finally", + "named": false + }, + { + "type": "float", + "named": true + }, + { + "type": "for", + "named": false + }, + { + "type": "from", + "named": false + }, + { + "type": "global", + "named": false + }, + { + "type": "identifier", + "named": true + }, + { + "type": "if", + "named": false + }, + { + "type": "import", + "named": false + }, + { + "type": "in", + "named": false + }, + { + "type": "integer", + "named": true + }, + { + "type": "is", + "named": false + }, + { + "type": "is not", + "named": false + }, + { + "type": "lambda", + "named": false + }, + { + "type": "match", + "named": false + }, + { + "type": "match_wildcard_pattern", + "named": true + }, + { + "type": "none", + "named": true + }, + { + "type": "nonlocal", + "named": false + }, + { + "type": "not", + "named": false + }, + { + "type": "not in", + "named": false + }, + { + "type": "or", + "named": false + }, + { + "type": "pass", + "named": false + }, + { + "type": "print", + "named": false + }, + { + "type": "raise", + "named": false + }, + { + "type": "return", + "named": false + }, + { + "type": "true", + "named": true + }, + { + "type": "try", + "named": false + }, + { + "type": "type", + "named": false + }, + { + "type": "type_conversion", + "named": true + }, + { + "type": "while", + "named": false + }, + { + "type": "with", + "named": false + }, + { + "type": "yield", + "named": false + }, + { + "type": "{", + "named": false + }, + { + "type": "|", + "named": false + }, + { + "type": "|=", + "named": false + }, + { + "type": "}", + "named": false + }, + { + "type": "~", + "named": false + } +] \ No newline at end of file diff --git a/python/extractor/tsg-python/tree-sitter-python/src/parser.c b/python/extractor/tsg-python/tree-sitter-python/src/parser.c new file mode 100644 index 00000000000..05a076d96a2 --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/src/parser.c @@ -0,0 +1,76504 @@ +#include + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmissing-field-initializers" +#endif + +#define LANGUAGE_VERSION 14 +#define STATE_COUNT 1525 +#define LARGE_STATE_COUNT 155 +#define SYMBOL_COUNT 280 +#define ALIAS_COUNT 3 +#define TOKEN_COUNT 108 +#define EXTERNAL_TOKEN_COUNT 6 +#define FIELD_COUNT 53 +#define MAX_ALIAS_SEQUENCE_LENGTH 10 +#define PRODUCTION_ID_COUNT 161 + +enum { + sym_identifier = 1, + anon_sym_import = 2, + anon_sym_DOT = 3, + anon_sym_from = 4, + anon_sym___future__ = 5, + anon_sym_LPAREN = 6, + anon_sym_RPAREN = 7, + anon_sym_COMMA = 8, + anon_sym_as = 9, + anon_sym_STAR = 10, + anon_sym_print = 11, + anon_sym_GT_GT = 12, + anon_sym_assert = 13, + anon_sym_COLON_EQ = 14, + anon_sym_return = 15, + anon_sym_del = 16, + anon_sym_raise = 17, + anon_sym_pass = 18, + anon_sym_break = 19, + anon_sym_continue = 20, + anon_sym_if = 21, + anon_sym_COLON = 22, + anon_sym_elif = 23, + anon_sym_else = 24, + anon_sym_async = 25, + anon_sym_for = 26, + anon_sym_in = 27, + anon_sym_while = 28, + anon_sym_try = 29, + anon_sym_except = 30, + anon_sym_except_STAR = 31, + anon_sym_finally = 32, + anon_sym_with = 33, + anon_sym_match = 34, + anon_sym_case = 35, + anon_sym_PIPE = 36, + anon_sym_DASH = 37, + anon_sym_PLUS = 38, + sym_match_wildcard_pattern = 39, + anon_sym_LBRACK = 40, + anon_sym_RBRACK = 41, + anon_sym_LBRACE = 42, + anon_sym_RBRACE = 43, + anon_sym_STAR_STAR = 44, + anon_sym_EQ = 45, + anon_sym_def = 46, + anon_sym_DASH_GT = 47, + anon_sym_global = 48, + anon_sym_nonlocal = 49, + anon_sym_exec = 50, + anon_sym_type = 51, + anon_sym_class = 52, + anon_sym_AT = 53, + anon_sym_not = 54, + anon_sym_and = 55, + anon_sym_or = 56, + anon_sym_SLASH = 57, + anon_sym_PERCENT = 58, + anon_sym_SLASH_SLASH = 59, + anon_sym_AMP = 60, + anon_sym_CARET = 61, + anon_sym_LT_LT = 62, + anon_sym_TILDE = 63, + anon_sym_LT = 64, + anon_sym_LT_EQ = 65, + anon_sym_EQ_EQ = 66, + anon_sym_BANG_EQ = 67, + anon_sym_GT_EQ = 68, + anon_sym_GT = 69, + anon_sym_LT_GT = 70, + anon_sym_is = 71, + anon_sym_lambda = 72, + anon_sym_PLUS_EQ = 73, + anon_sym_DASH_EQ = 74, + anon_sym_STAR_EQ = 75, + anon_sym_SLASH_EQ = 76, + anon_sym_AT_EQ = 77, + anon_sym_SLASH_SLASH_EQ = 78, + anon_sym_PERCENT_EQ = 79, + anon_sym_STAR_STAR_EQ = 80, + anon_sym_GT_GT_EQ = 81, + anon_sym_LT_LT_EQ = 82, + anon_sym_AMP_EQ = 83, + anon_sym_CARET_EQ = 84, + anon_sym_PIPE_EQ = 85, + anon_sym_yield = 86, + sym_ellipsis = 87, + anon_sym_LBRACE2 = 88, + sym__escape_interpolation = 89, + sym_escape_sequence = 90, + sym__not_escape_sequence = 91, + aux_sym_format_specifier_token1 = 92, + sym_type_conversion = 93, + sym_integer = 94, + sym_float = 95, + anon_sym_await = 96, + sym_true = 97, + sym_false = 98, + sym_none = 99, + sym_comment = 100, + sym__semicolon = 101, + sym__newline = 102, + sym__indent = 103, + sym__dedent = 104, + sym__string_start = 105, + sym__string_content = 106, + sym__string_end = 107, + sym_module = 108, + sym__statement = 109, + sym__simple_statements = 110, + sym_import_statement = 111, + sym_import_prefix = 112, + sym_relative_import = 113, + sym_future_import_statement = 114, + sym_import_from_statement = 115, + sym__import_list = 116, + sym_aliased_import = 117, + sym_wildcard_import = 118, + sym_print_statement = 119, + sym_chevron = 120, + sym_assert_statement = 121, + sym_expression_statement = 122, + sym_named_expression = 123, + sym_return_statement = 124, + sym_delete_statement = 125, + sym_raise_statement = 126, + sym_pass_statement = 127, + sym_break_statement = 128, + sym_continue_statement = 129, + sym_if_statement = 130, + sym_elif_clause = 131, + sym_else_clause = 132, + sym_for_statement = 133, + sym_while_statement = 134, + sym_try_statement = 135, + sym_except_clause = 136, + sym_except_group_clause = 137, + sym_finally_clause = 138, + sym_with_statement = 139, + sym_with_clause = 140, + sym_with_item = 141, + sym_match_statement = 142, + sym_cases = 143, + sym_case_block = 144, + sym__match_patterns = 145, + sym_open_sequence_match_pattern = 146, + sym__match_pattern = 147, + sym_match_as_pattern = 148, + sym__match_or_pattern = 149, + sym_match_or_pattern = 150, + sym__closed_pattern = 151, + sym_match_literal_pattern = 152, + sym_match_capture_pattern = 153, + sym_match_value_pattern = 154, + sym_match_group_pattern = 155, + sym_match_sequence_pattern = 156, + sym__match_maybe_star_pattern = 157, + sym_match_star_pattern = 158, + sym_match_mapping_pattern = 159, + sym_match_double_star_pattern = 160, + sym_match_key_value_pattern = 161, + sym_match_class_pattern = 162, + sym_pattern_class_name = 163, + sym_match_positional_pattern = 164, + sym_match_keyword_pattern = 165, + sym_guard = 166, + sym_function_definition = 167, + sym_parameters = 168, + sym_lambda_parameters = 169, + sym_list_splat = 170, + sym_dictionary_splat = 171, + sym_global_statement = 172, + sym_nonlocal_statement = 173, + sym_exec_statement = 174, + sym_type_alias_statement = 175, + sym_class_definition = 176, + sym_type_parameters = 177, + sym__type_bound = 178, + sym_typevar_parameter = 179, + sym_typevartuple_parameter = 180, + sym_paramspec_parameter = 181, + sym__type_parameter = 182, + sym_parenthesized_list_splat = 183, + sym_argument_list = 184, + sym_decorated_definition = 185, + sym_decorator = 186, + sym_block = 187, + sym_expression_list = 188, + sym_dotted_name = 189, + sym__parameters = 190, + sym__patterns = 191, + sym_parameter = 192, + sym_pattern = 193, + sym_tuple_pattern = 194, + sym_list_pattern = 195, + sym_default_parameter = 196, + sym_typed_default_parameter = 197, + sym_list_splat_pattern = 198, + sym_dictionary_splat_pattern = 199, + sym__expression_within_for_in_clause = 200, + sym_expression = 201, + sym_primary_expression = 202, + sym_not_operator = 203, + sym_boolean_operator = 204, + sym_binary_operator = 205, + sym_unary_operator = 206, + sym_comparison_operator = 207, + sym_lambda = 208, + sym_lambda_within_for_in_clause = 209, + sym_assignment = 210, + sym_augmented_assignment = 211, + sym_pattern_list = 212, + sym__right_hand_side = 213, + sym_yield = 214, + sym_attribute = 215, + sym_subscript = 216, + sym_slice = 217, + sym_call = 218, + sym_typed_parameter = 219, + sym_type = 220, + sym_keyword_argument = 221, + sym_list = 222, + sym_set = 223, + sym_tuple = 224, + sym_dictionary = 225, + sym_pair = 226, + sym_list_comprehension = 227, + sym_dictionary_comprehension = 228, + sym_set_comprehension = 229, + sym_generator_expression = 230, + sym__comprehension_clauses = 231, + sym_parenthesized_expression = 232, + sym__collection_elements = 233, + sym_for_in_clause = 234, + sym_if_clause = 235, + sym_conditional_expression = 236, + sym_concatenated_string = 237, + sym_string = 238, + sym_string_content = 239, + sym_interpolation = 240, + sym__f_expression = 241, + sym_format_specifier = 242, + sym_await = 243, + sym_positional_separator = 244, + sym_keyword_separator = 245, + aux_sym_module_repeat1 = 246, + aux_sym__simple_statements_repeat1 = 247, + aux_sym_import_prefix_repeat1 = 248, + aux_sym__import_list_repeat1 = 249, + aux_sym_print_statement_repeat1 = 250, + aux_sym_assert_statement_repeat1 = 251, + aux_sym_if_statement_repeat1 = 252, + aux_sym_try_statement_repeat1 = 253, + aux_sym_try_statement_repeat2 = 254, + aux_sym_with_clause_repeat1 = 255, + aux_sym_cases_repeat1 = 256, + aux_sym_open_sequence_match_pattern_repeat1 = 257, + aux_sym_match_or_pattern_repeat1 = 258, + aux_sym_match_value_pattern_repeat1 = 259, + aux_sym_match_mapping_pattern_repeat1 = 260, + aux_sym_match_class_pattern_repeat1 = 261, + aux_sym_match_class_pattern_repeat2 = 262, + aux_sym_global_statement_repeat1 = 263, + aux_sym_type_parameters_repeat1 = 264, + aux_sym_argument_list_repeat1 = 265, + aux_sym_decorated_definition_repeat1 = 266, + aux_sym_expression_list_repeat1 = 267, + aux_sym__parameters_repeat1 = 268, + aux_sym__patterns_repeat1 = 269, + aux_sym_comparison_operator_repeat1 = 270, + aux_sym_subscript_repeat1 = 271, + aux_sym_dictionary_repeat1 = 272, + aux_sym__comprehension_clauses_repeat1 = 273, + aux_sym__collection_elements_repeat1 = 274, + aux_sym_for_in_clause_repeat1 = 275, + aux_sym_concatenated_string_repeat1 = 276, + aux_sym_string_repeat1 = 277, + aux_sym_string_content_repeat1 = 278, + aux_sym_format_specifier_repeat1 = 279, + alias_sym_format_expression = 280, + anon_alias_sym_isnot = 281, + anon_alias_sym_notin = 282, +}; + +static const char * const ts_symbol_names[] = { + [ts_builtin_sym_end] = "end", + [sym_identifier] = "identifier", + [anon_sym_import] = "import", + [anon_sym_DOT] = ".", + [anon_sym_from] = "from", + [anon_sym___future__] = "__future__", + [anon_sym_LPAREN] = "(", + [anon_sym_RPAREN] = ")", + [anon_sym_COMMA] = ",", + [anon_sym_as] = "as", + [anon_sym_STAR] = "*", + [anon_sym_print] = "print", + [anon_sym_GT_GT] = ">>", + [anon_sym_assert] = "assert", + [anon_sym_COLON_EQ] = ":=", + [anon_sym_return] = "return", + [anon_sym_del] = "del", + [anon_sym_raise] = "raise", + [anon_sym_pass] = "pass", + [anon_sym_break] = "break", + [anon_sym_continue] = "continue", + [anon_sym_if] = "if", + [anon_sym_COLON] = ":", + [anon_sym_elif] = "elif", + [anon_sym_else] = "else", + [anon_sym_async] = "async", + [anon_sym_for] = "for", + [anon_sym_in] = "in", + [anon_sym_while] = "while", + [anon_sym_try] = "try", + [anon_sym_except] = "except", + [anon_sym_except_STAR] = "except*", + [anon_sym_finally] = "finally", + [anon_sym_with] = "with", + [anon_sym_match] = "match", + [anon_sym_case] = "case", + [anon_sym_PIPE] = "|", + [anon_sym_DASH] = "-", + [anon_sym_PLUS] = "+", + [sym_match_wildcard_pattern] = "match_wildcard_pattern", + [anon_sym_LBRACK] = "[", + [anon_sym_RBRACK] = "]", + [anon_sym_LBRACE] = "{", + [anon_sym_RBRACE] = "}", + [anon_sym_STAR_STAR] = "**", + [anon_sym_EQ] = "=", + [anon_sym_def] = "def", + [anon_sym_DASH_GT] = "->", + [anon_sym_global] = "global", + [anon_sym_nonlocal] = "nonlocal", + [anon_sym_exec] = "exec", + [anon_sym_type] = "type", + [anon_sym_class] = "class", + [anon_sym_AT] = "@", + [anon_sym_not] = "not", + [anon_sym_and] = "and", + [anon_sym_or] = "or", + [anon_sym_SLASH] = "/", + [anon_sym_PERCENT] = "%", + [anon_sym_SLASH_SLASH] = "//", + [anon_sym_AMP] = "&", + [anon_sym_CARET] = "^", + [anon_sym_LT_LT] = "<<", + [anon_sym_TILDE] = "~", + [anon_sym_LT] = "<", + [anon_sym_LT_EQ] = "<=", + [anon_sym_EQ_EQ] = "==", + [anon_sym_BANG_EQ] = "!=", + [anon_sym_GT_EQ] = ">=", + [anon_sym_GT] = ">", + [anon_sym_LT_GT] = "<>", + [anon_sym_is] = "is", + [anon_sym_lambda] = "lambda", + [anon_sym_PLUS_EQ] = "+=", + [anon_sym_DASH_EQ] = "-=", + [anon_sym_STAR_EQ] = "*=", + [anon_sym_SLASH_EQ] = "/=", + [anon_sym_AT_EQ] = "@=", + [anon_sym_SLASH_SLASH_EQ] = "//=", + [anon_sym_PERCENT_EQ] = "%=", + [anon_sym_STAR_STAR_EQ] = "**=", + [anon_sym_GT_GT_EQ] = ">>=", + [anon_sym_LT_LT_EQ] = "<<=", + [anon_sym_AMP_EQ] = "&=", + [anon_sym_CARET_EQ] = "^=", + [anon_sym_PIPE_EQ] = "|=", + [anon_sym_yield] = "yield", + [sym_ellipsis] = "ellipsis", + [anon_sym_LBRACE2] = "{", + [sym__escape_interpolation] = "_escape_interpolation", + [sym_escape_sequence] = "escape_sequence", + [sym__not_escape_sequence] = "_not_escape_sequence", + [aux_sym_format_specifier_token1] = "format_specifier_token1", + [sym_type_conversion] = "type_conversion", + [sym_integer] = "integer", + [sym_float] = "float", + [anon_sym_await] = "await", + [sym_true] = "true", + [sym_false] = "false", + [sym_none] = "none", + [sym_comment] = "comment", + [sym__semicolon] = "_semicolon", + [sym__newline] = "_newline", + [sym__indent] = "_indent", + [sym__dedent] = "_dedent", + [sym__string_start] = "\"", + [sym__string_content] = "_string_content", + [sym__string_end] = "\"", + [sym_module] = "module", + [sym__statement] = "_statement", + [sym__simple_statements] = "_simple_statements", + [sym_import_statement] = "import_statement", + [sym_import_prefix] = "import_prefix", + [sym_relative_import] = "relative_import", + [sym_future_import_statement] = "future_import_statement", + [sym_import_from_statement] = "import_from_statement", + [sym__import_list] = "_import_list", + [sym_aliased_import] = "aliased_import", + [sym_wildcard_import] = "wildcard_import", + [sym_print_statement] = "print_statement", + [sym_chevron] = "chevron", + [sym_assert_statement] = "assert_statement", + [sym_expression_statement] = "expression_statement", + [sym_named_expression] = "named_expression", + [sym_return_statement] = "return_statement", + [sym_delete_statement] = "delete_statement", + [sym_raise_statement] = "raise_statement", + [sym_pass_statement] = "pass_statement", + [sym_break_statement] = "break_statement", + [sym_continue_statement] = "continue_statement", + [sym_if_statement] = "if_statement", + [sym_elif_clause] = "elif_clause", + [sym_else_clause] = "else_clause", + [sym_for_statement] = "for_statement", + [sym_while_statement] = "while_statement", + [sym_try_statement] = "try_statement", + [sym_except_clause] = "except_clause", + [sym_except_group_clause] = "except_group_clause", + [sym_finally_clause] = "finally_clause", + [sym_with_statement] = "with_statement", + [sym_with_clause] = "with_clause", + [sym_with_item] = "with_item", + [sym_match_statement] = "match_statement", + [sym_cases] = "cases", + [sym_case_block] = "case_block", + [sym__match_patterns] = "_match_patterns", + [sym_open_sequence_match_pattern] = "match_sequence_pattern", + [sym__match_pattern] = "_match_pattern", + [sym_match_as_pattern] = "match_as_pattern", + [sym__match_or_pattern] = "_match_or_pattern", + [sym_match_or_pattern] = "match_or_pattern", + [sym__closed_pattern] = "_closed_pattern", + [sym_match_literal_pattern] = "match_literal_pattern", + [sym_match_capture_pattern] = "match_capture_pattern", + [sym_match_value_pattern] = "match_value_pattern", + [sym_match_group_pattern] = "match_group_pattern", + [sym_match_sequence_pattern] = "match_sequence_pattern", + [sym__match_maybe_star_pattern] = "_match_maybe_star_pattern", + [sym_match_star_pattern] = "match_star_pattern", + [sym_match_mapping_pattern] = "match_mapping_pattern", + [sym_match_double_star_pattern] = "match_double_star_pattern", + [sym_match_key_value_pattern] = "match_key_value_pattern", + [sym_match_class_pattern] = "match_class_pattern", + [sym_pattern_class_name] = "pattern_class_name", + [sym_match_positional_pattern] = "match_positional_pattern", + [sym_match_keyword_pattern] = "match_keyword_pattern", + [sym_guard] = "guard", + [sym_function_definition] = "function_definition", + [sym_parameters] = "parameters", + [sym_lambda_parameters] = "lambda_parameters", + [sym_list_splat] = "list_splat", + [sym_dictionary_splat] = "dictionary_splat", + [sym_global_statement] = "global_statement", + [sym_nonlocal_statement] = "nonlocal_statement", + [sym_exec_statement] = "exec_statement", + [sym_type_alias_statement] = "type_alias_statement", + [sym_class_definition] = "class_definition", + [sym_type_parameters] = "type_parameters", + [sym__type_bound] = "_type_bound", + [sym_typevar_parameter] = "typevar_parameter", + [sym_typevartuple_parameter] = "typevartuple_parameter", + [sym_paramspec_parameter] = "paramspec_parameter", + [sym__type_parameter] = "_type_parameter", + [sym_parenthesized_list_splat] = "parenthesized_list_splat", + [sym_argument_list] = "argument_list", + [sym_decorated_definition] = "decorated_definition", + [sym_decorator] = "decorator", + [sym_block] = "block", + [sym_expression_list] = "expression_list", + [sym_dotted_name] = "dotted_name", + [sym__parameters] = "_parameters", + [sym__patterns] = "_patterns", + [sym_parameter] = "parameter", + [sym_pattern] = "pattern", + [sym_tuple_pattern] = "tuple_pattern", + [sym_list_pattern] = "list_pattern", + [sym_default_parameter] = "default_parameter", + [sym_typed_default_parameter] = "typed_default_parameter", + [sym_list_splat_pattern] = "list_splat_pattern", + [sym_dictionary_splat_pattern] = "dictionary_splat_pattern", + [sym__expression_within_for_in_clause] = "_expression_within_for_in_clause", + [sym_expression] = "expression", + [sym_primary_expression] = "primary_expression", + [sym_not_operator] = "not_operator", + [sym_boolean_operator] = "boolean_operator", + [sym_binary_operator] = "binary_operator", + [sym_unary_operator] = "unary_operator", + [sym_comparison_operator] = "comparison_operator", + [sym_lambda] = "lambda", + [sym_lambda_within_for_in_clause] = "lambda", + [sym_assignment] = "assignment", + [sym_augmented_assignment] = "augmented_assignment", + [sym_pattern_list] = "pattern_list", + [sym__right_hand_side] = "_right_hand_side", + [sym_yield] = "yield", + [sym_attribute] = "attribute", + [sym_subscript] = "subscript", + [sym_slice] = "slice", + [sym_call] = "call", + [sym_typed_parameter] = "typed_parameter", + [sym_type] = "type", + [sym_keyword_argument] = "keyword_argument", + [sym_list] = "list", + [sym_set] = "set", + [sym_tuple] = "tuple", + [sym_dictionary] = "dictionary", + [sym_pair] = "pair", + [sym_list_comprehension] = "list_comprehension", + [sym_dictionary_comprehension] = "dictionary_comprehension", + [sym_set_comprehension] = "set_comprehension", + [sym_generator_expression] = "generator_expression", + [sym__comprehension_clauses] = "_comprehension_clauses", + [sym_parenthesized_expression] = "parenthesized_expression", + [sym__collection_elements] = "_collection_elements", + [sym_for_in_clause] = "for_in_clause", + [sym_if_clause] = "if_clause", + [sym_conditional_expression] = "conditional_expression", + [sym_concatenated_string] = "concatenated_string", + [sym_string] = "string", + [sym_string_content] = "string_content", + [sym_interpolation] = "interpolation", + [sym__f_expression] = "_f_expression", + [sym_format_specifier] = "format_specifier", + [sym_await] = "await", + [sym_positional_separator] = "positional_separator", + [sym_keyword_separator] = "keyword_separator", + [aux_sym_module_repeat1] = "module_repeat1", + [aux_sym__simple_statements_repeat1] = "_simple_statements_repeat1", + [aux_sym_import_prefix_repeat1] = "import_prefix_repeat1", + [aux_sym__import_list_repeat1] = "_import_list_repeat1", + [aux_sym_print_statement_repeat1] = "print_statement_repeat1", + [aux_sym_assert_statement_repeat1] = "assert_statement_repeat1", + [aux_sym_if_statement_repeat1] = "if_statement_repeat1", + [aux_sym_try_statement_repeat1] = "try_statement_repeat1", + [aux_sym_try_statement_repeat2] = "try_statement_repeat2", + [aux_sym_with_clause_repeat1] = "with_clause_repeat1", + [aux_sym_cases_repeat1] = "cases_repeat1", + [aux_sym_open_sequence_match_pattern_repeat1] = "open_sequence_match_pattern_repeat1", + [aux_sym_match_or_pattern_repeat1] = "match_or_pattern_repeat1", + [aux_sym_match_value_pattern_repeat1] = "match_value_pattern_repeat1", + [aux_sym_match_mapping_pattern_repeat1] = "match_mapping_pattern_repeat1", + [aux_sym_match_class_pattern_repeat1] = "match_class_pattern_repeat1", + [aux_sym_match_class_pattern_repeat2] = "match_class_pattern_repeat2", + [aux_sym_global_statement_repeat1] = "global_statement_repeat1", + [aux_sym_type_parameters_repeat1] = "type_parameters_repeat1", + [aux_sym_argument_list_repeat1] = "argument_list_repeat1", + [aux_sym_decorated_definition_repeat1] = "decorated_definition_repeat1", + [aux_sym_expression_list_repeat1] = "expression_list_repeat1", + [aux_sym__parameters_repeat1] = "_parameters_repeat1", + [aux_sym__patterns_repeat1] = "_patterns_repeat1", + [aux_sym_comparison_operator_repeat1] = "comparison_operator_repeat1", + [aux_sym_subscript_repeat1] = "subscript_repeat1", + [aux_sym_dictionary_repeat1] = "dictionary_repeat1", + [aux_sym__comprehension_clauses_repeat1] = "_comprehension_clauses_repeat1", + [aux_sym__collection_elements_repeat1] = "_collection_elements_repeat1", + [aux_sym_for_in_clause_repeat1] = "for_in_clause_repeat1", + [aux_sym_concatenated_string_repeat1] = "concatenated_string_repeat1", + [aux_sym_string_repeat1] = "string_repeat1", + [aux_sym_string_content_repeat1] = "string_content_repeat1", + [aux_sym_format_specifier_repeat1] = "format_specifier_repeat1", + [alias_sym_format_expression] = "format_expression", + [anon_alias_sym_isnot] = "is not", + [anon_alias_sym_notin] = "not in", +}; + +static const TSSymbol ts_symbol_map[] = { + [ts_builtin_sym_end] = ts_builtin_sym_end, + [sym_identifier] = sym_identifier, + [anon_sym_import] = anon_sym_import, + [anon_sym_DOT] = anon_sym_DOT, + [anon_sym_from] = anon_sym_from, + [anon_sym___future__] = anon_sym___future__, + [anon_sym_LPAREN] = anon_sym_LPAREN, + [anon_sym_RPAREN] = anon_sym_RPAREN, + [anon_sym_COMMA] = anon_sym_COMMA, + [anon_sym_as] = anon_sym_as, + [anon_sym_STAR] = anon_sym_STAR, + [anon_sym_print] = anon_sym_print, + [anon_sym_GT_GT] = anon_sym_GT_GT, + [anon_sym_assert] = anon_sym_assert, + [anon_sym_COLON_EQ] = anon_sym_COLON_EQ, + [anon_sym_return] = anon_sym_return, + [anon_sym_del] = anon_sym_del, + [anon_sym_raise] = anon_sym_raise, + [anon_sym_pass] = anon_sym_pass, + [anon_sym_break] = anon_sym_break, + [anon_sym_continue] = anon_sym_continue, + [anon_sym_if] = anon_sym_if, + [anon_sym_COLON] = anon_sym_COLON, + [anon_sym_elif] = anon_sym_elif, + [anon_sym_else] = anon_sym_else, + [anon_sym_async] = anon_sym_async, + [anon_sym_for] = anon_sym_for, + [anon_sym_in] = anon_sym_in, + [anon_sym_while] = anon_sym_while, + [anon_sym_try] = anon_sym_try, + [anon_sym_except] = anon_sym_except, + [anon_sym_except_STAR] = anon_sym_except_STAR, + [anon_sym_finally] = anon_sym_finally, + [anon_sym_with] = anon_sym_with, + [anon_sym_match] = anon_sym_match, + [anon_sym_case] = anon_sym_case, + [anon_sym_PIPE] = anon_sym_PIPE, + [anon_sym_DASH] = anon_sym_DASH, + [anon_sym_PLUS] = anon_sym_PLUS, + [sym_match_wildcard_pattern] = sym_match_wildcard_pattern, + [anon_sym_LBRACK] = anon_sym_LBRACK, + [anon_sym_RBRACK] = anon_sym_RBRACK, + [anon_sym_LBRACE] = anon_sym_LBRACE, + [anon_sym_RBRACE] = anon_sym_RBRACE, + [anon_sym_STAR_STAR] = anon_sym_STAR_STAR, + [anon_sym_EQ] = anon_sym_EQ, + [anon_sym_def] = anon_sym_def, + [anon_sym_DASH_GT] = anon_sym_DASH_GT, + [anon_sym_global] = anon_sym_global, + [anon_sym_nonlocal] = anon_sym_nonlocal, + [anon_sym_exec] = anon_sym_exec, + [anon_sym_type] = anon_sym_type, + [anon_sym_class] = anon_sym_class, + [anon_sym_AT] = anon_sym_AT, + [anon_sym_not] = anon_sym_not, + [anon_sym_and] = anon_sym_and, + [anon_sym_or] = anon_sym_or, + [anon_sym_SLASH] = anon_sym_SLASH, + [anon_sym_PERCENT] = anon_sym_PERCENT, + [anon_sym_SLASH_SLASH] = anon_sym_SLASH_SLASH, + [anon_sym_AMP] = anon_sym_AMP, + [anon_sym_CARET] = anon_sym_CARET, + [anon_sym_LT_LT] = anon_sym_LT_LT, + [anon_sym_TILDE] = anon_sym_TILDE, + [anon_sym_LT] = anon_sym_LT, + [anon_sym_LT_EQ] = anon_sym_LT_EQ, + [anon_sym_EQ_EQ] = anon_sym_EQ_EQ, + [anon_sym_BANG_EQ] = anon_sym_BANG_EQ, + [anon_sym_GT_EQ] = anon_sym_GT_EQ, + [anon_sym_GT] = anon_sym_GT, + [anon_sym_LT_GT] = anon_sym_LT_GT, + [anon_sym_is] = anon_sym_is, + [anon_sym_lambda] = anon_sym_lambda, + [anon_sym_PLUS_EQ] = anon_sym_PLUS_EQ, + [anon_sym_DASH_EQ] = anon_sym_DASH_EQ, + [anon_sym_STAR_EQ] = anon_sym_STAR_EQ, + [anon_sym_SLASH_EQ] = anon_sym_SLASH_EQ, + [anon_sym_AT_EQ] = anon_sym_AT_EQ, + [anon_sym_SLASH_SLASH_EQ] = anon_sym_SLASH_SLASH_EQ, + [anon_sym_PERCENT_EQ] = anon_sym_PERCENT_EQ, + [anon_sym_STAR_STAR_EQ] = anon_sym_STAR_STAR_EQ, + [anon_sym_GT_GT_EQ] = anon_sym_GT_GT_EQ, + [anon_sym_LT_LT_EQ] = anon_sym_LT_LT_EQ, + [anon_sym_AMP_EQ] = anon_sym_AMP_EQ, + [anon_sym_CARET_EQ] = anon_sym_CARET_EQ, + [anon_sym_PIPE_EQ] = anon_sym_PIPE_EQ, + [anon_sym_yield] = anon_sym_yield, + [sym_ellipsis] = sym_ellipsis, + [anon_sym_LBRACE2] = anon_sym_LBRACE, + [sym__escape_interpolation] = sym__escape_interpolation, + [sym_escape_sequence] = sym_escape_sequence, + [sym__not_escape_sequence] = sym__not_escape_sequence, + [aux_sym_format_specifier_token1] = aux_sym_format_specifier_token1, + [sym_type_conversion] = sym_type_conversion, + [sym_integer] = sym_integer, + [sym_float] = sym_float, + [anon_sym_await] = anon_sym_await, + [sym_true] = sym_true, + [sym_false] = sym_false, + [sym_none] = sym_none, + [sym_comment] = sym_comment, + [sym__semicolon] = sym__semicolon, + [sym__newline] = sym__newline, + [sym__indent] = sym__indent, + [sym__dedent] = sym__dedent, + [sym__string_start] = sym__string_start, + [sym__string_content] = sym__string_content, + [sym__string_end] = sym__string_start, + [sym_module] = sym_module, + [sym__statement] = sym__statement, + [sym__simple_statements] = sym__simple_statements, + [sym_import_statement] = sym_import_statement, + [sym_import_prefix] = sym_import_prefix, + [sym_relative_import] = sym_relative_import, + [sym_future_import_statement] = sym_future_import_statement, + [sym_import_from_statement] = sym_import_from_statement, + [sym__import_list] = sym__import_list, + [sym_aliased_import] = sym_aliased_import, + [sym_wildcard_import] = sym_wildcard_import, + [sym_print_statement] = sym_print_statement, + [sym_chevron] = sym_chevron, + [sym_assert_statement] = sym_assert_statement, + [sym_expression_statement] = sym_expression_statement, + [sym_named_expression] = sym_named_expression, + [sym_return_statement] = sym_return_statement, + [sym_delete_statement] = sym_delete_statement, + [sym_raise_statement] = sym_raise_statement, + [sym_pass_statement] = sym_pass_statement, + [sym_break_statement] = sym_break_statement, + [sym_continue_statement] = sym_continue_statement, + [sym_if_statement] = sym_if_statement, + [sym_elif_clause] = sym_elif_clause, + [sym_else_clause] = sym_else_clause, + [sym_for_statement] = sym_for_statement, + [sym_while_statement] = sym_while_statement, + [sym_try_statement] = sym_try_statement, + [sym_except_clause] = sym_except_clause, + [sym_except_group_clause] = sym_except_group_clause, + [sym_finally_clause] = sym_finally_clause, + [sym_with_statement] = sym_with_statement, + [sym_with_clause] = sym_with_clause, + [sym_with_item] = sym_with_item, + [sym_match_statement] = sym_match_statement, + [sym_cases] = sym_cases, + [sym_case_block] = sym_case_block, + [sym__match_patterns] = sym__match_patterns, + [sym_open_sequence_match_pattern] = sym_match_sequence_pattern, + [sym__match_pattern] = sym__match_pattern, + [sym_match_as_pattern] = sym_match_as_pattern, + [sym__match_or_pattern] = sym__match_or_pattern, + [sym_match_or_pattern] = sym_match_or_pattern, + [sym__closed_pattern] = sym__closed_pattern, + [sym_match_literal_pattern] = sym_match_literal_pattern, + [sym_match_capture_pattern] = sym_match_capture_pattern, + [sym_match_value_pattern] = sym_match_value_pattern, + [sym_match_group_pattern] = sym_match_group_pattern, + [sym_match_sequence_pattern] = sym_match_sequence_pattern, + [sym__match_maybe_star_pattern] = sym__match_maybe_star_pattern, + [sym_match_star_pattern] = sym_match_star_pattern, + [sym_match_mapping_pattern] = sym_match_mapping_pattern, + [sym_match_double_star_pattern] = sym_match_double_star_pattern, + [sym_match_key_value_pattern] = sym_match_key_value_pattern, + [sym_match_class_pattern] = sym_match_class_pattern, + [sym_pattern_class_name] = sym_pattern_class_name, + [sym_match_positional_pattern] = sym_match_positional_pattern, + [sym_match_keyword_pattern] = sym_match_keyword_pattern, + [sym_guard] = sym_guard, + [sym_function_definition] = sym_function_definition, + [sym_parameters] = sym_parameters, + [sym_lambda_parameters] = sym_lambda_parameters, + [sym_list_splat] = sym_list_splat, + [sym_dictionary_splat] = sym_dictionary_splat, + [sym_global_statement] = sym_global_statement, + [sym_nonlocal_statement] = sym_nonlocal_statement, + [sym_exec_statement] = sym_exec_statement, + [sym_type_alias_statement] = sym_type_alias_statement, + [sym_class_definition] = sym_class_definition, + [sym_type_parameters] = sym_type_parameters, + [sym__type_bound] = sym__type_bound, + [sym_typevar_parameter] = sym_typevar_parameter, + [sym_typevartuple_parameter] = sym_typevartuple_parameter, + [sym_paramspec_parameter] = sym_paramspec_parameter, + [sym__type_parameter] = sym__type_parameter, + [sym_parenthesized_list_splat] = sym_parenthesized_list_splat, + [sym_argument_list] = sym_argument_list, + [sym_decorated_definition] = sym_decorated_definition, + [sym_decorator] = sym_decorator, + [sym_block] = sym_block, + [sym_expression_list] = sym_expression_list, + [sym_dotted_name] = sym_dotted_name, + [sym__parameters] = sym__parameters, + [sym__patterns] = sym__patterns, + [sym_parameter] = sym_parameter, + [sym_pattern] = sym_pattern, + [sym_tuple_pattern] = sym_tuple_pattern, + [sym_list_pattern] = sym_list_pattern, + [sym_default_parameter] = sym_default_parameter, + [sym_typed_default_parameter] = sym_typed_default_parameter, + [sym_list_splat_pattern] = sym_list_splat_pattern, + [sym_dictionary_splat_pattern] = sym_dictionary_splat_pattern, + [sym__expression_within_for_in_clause] = sym__expression_within_for_in_clause, + [sym_expression] = sym_expression, + [sym_primary_expression] = sym_primary_expression, + [sym_not_operator] = sym_not_operator, + [sym_boolean_operator] = sym_boolean_operator, + [sym_binary_operator] = sym_binary_operator, + [sym_unary_operator] = sym_unary_operator, + [sym_comparison_operator] = sym_comparison_operator, + [sym_lambda] = sym_lambda, + [sym_lambda_within_for_in_clause] = sym_lambda, + [sym_assignment] = sym_assignment, + [sym_augmented_assignment] = sym_augmented_assignment, + [sym_pattern_list] = sym_pattern_list, + [sym__right_hand_side] = sym__right_hand_side, + [sym_yield] = sym_yield, + [sym_attribute] = sym_attribute, + [sym_subscript] = sym_subscript, + [sym_slice] = sym_slice, + [sym_call] = sym_call, + [sym_typed_parameter] = sym_typed_parameter, + [sym_type] = sym_type, + [sym_keyword_argument] = sym_keyword_argument, + [sym_list] = sym_list, + [sym_set] = sym_set, + [sym_tuple] = sym_tuple, + [sym_dictionary] = sym_dictionary, + [sym_pair] = sym_pair, + [sym_list_comprehension] = sym_list_comprehension, + [sym_dictionary_comprehension] = sym_dictionary_comprehension, + [sym_set_comprehension] = sym_set_comprehension, + [sym_generator_expression] = sym_generator_expression, + [sym__comprehension_clauses] = sym__comprehension_clauses, + [sym_parenthesized_expression] = sym_parenthesized_expression, + [sym__collection_elements] = sym__collection_elements, + [sym_for_in_clause] = sym_for_in_clause, + [sym_if_clause] = sym_if_clause, + [sym_conditional_expression] = sym_conditional_expression, + [sym_concatenated_string] = sym_concatenated_string, + [sym_string] = sym_string, + [sym_string_content] = sym_string_content, + [sym_interpolation] = sym_interpolation, + [sym__f_expression] = sym__f_expression, + [sym_format_specifier] = sym_format_specifier, + [sym_await] = sym_await, + [sym_positional_separator] = sym_positional_separator, + [sym_keyword_separator] = sym_keyword_separator, + [aux_sym_module_repeat1] = aux_sym_module_repeat1, + [aux_sym__simple_statements_repeat1] = aux_sym__simple_statements_repeat1, + [aux_sym_import_prefix_repeat1] = aux_sym_import_prefix_repeat1, + [aux_sym__import_list_repeat1] = aux_sym__import_list_repeat1, + [aux_sym_print_statement_repeat1] = aux_sym_print_statement_repeat1, + [aux_sym_assert_statement_repeat1] = aux_sym_assert_statement_repeat1, + [aux_sym_if_statement_repeat1] = aux_sym_if_statement_repeat1, + [aux_sym_try_statement_repeat1] = aux_sym_try_statement_repeat1, + [aux_sym_try_statement_repeat2] = aux_sym_try_statement_repeat2, + [aux_sym_with_clause_repeat1] = aux_sym_with_clause_repeat1, + [aux_sym_cases_repeat1] = aux_sym_cases_repeat1, + [aux_sym_open_sequence_match_pattern_repeat1] = aux_sym_open_sequence_match_pattern_repeat1, + [aux_sym_match_or_pattern_repeat1] = aux_sym_match_or_pattern_repeat1, + [aux_sym_match_value_pattern_repeat1] = aux_sym_match_value_pattern_repeat1, + [aux_sym_match_mapping_pattern_repeat1] = aux_sym_match_mapping_pattern_repeat1, + [aux_sym_match_class_pattern_repeat1] = aux_sym_match_class_pattern_repeat1, + [aux_sym_match_class_pattern_repeat2] = aux_sym_match_class_pattern_repeat2, + [aux_sym_global_statement_repeat1] = aux_sym_global_statement_repeat1, + [aux_sym_type_parameters_repeat1] = aux_sym_type_parameters_repeat1, + [aux_sym_argument_list_repeat1] = aux_sym_argument_list_repeat1, + [aux_sym_decorated_definition_repeat1] = aux_sym_decorated_definition_repeat1, + [aux_sym_expression_list_repeat1] = aux_sym_expression_list_repeat1, + [aux_sym__parameters_repeat1] = aux_sym__parameters_repeat1, + [aux_sym__patterns_repeat1] = aux_sym__patterns_repeat1, + [aux_sym_comparison_operator_repeat1] = aux_sym_comparison_operator_repeat1, + [aux_sym_subscript_repeat1] = aux_sym_subscript_repeat1, + [aux_sym_dictionary_repeat1] = aux_sym_dictionary_repeat1, + [aux_sym__comprehension_clauses_repeat1] = aux_sym__comprehension_clauses_repeat1, + [aux_sym__collection_elements_repeat1] = aux_sym__collection_elements_repeat1, + [aux_sym_for_in_clause_repeat1] = aux_sym_for_in_clause_repeat1, + [aux_sym_concatenated_string_repeat1] = aux_sym_concatenated_string_repeat1, + [aux_sym_string_repeat1] = aux_sym_string_repeat1, + [aux_sym_string_content_repeat1] = aux_sym_string_content_repeat1, + [aux_sym_format_specifier_repeat1] = aux_sym_format_specifier_repeat1, + [alias_sym_format_expression] = alias_sym_format_expression, + [anon_alias_sym_isnot] = anon_alias_sym_isnot, + [anon_alias_sym_notin] = anon_alias_sym_notin, +}; + +static const TSSymbolMetadata ts_symbol_metadata[] = { + [ts_builtin_sym_end] = { + .visible = false, + .named = true, + }, + [sym_identifier] = { + .visible = true, + .named = true, + }, + [anon_sym_import] = { + .visible = true, + .named = false, + }, + [anon_sym_DOT] = { + .visible = true, + .named = false, + }, + [anon_sym_from] = { + .visible = true, + .named = false, + }, + [anon_sym___future__] = { + .visible = true, + .named = false, + }, + [anon_sym_LPAREN] = { + .visible = true, + .named = false, + }, + [anon_sym_RPAREN] = { + .visible = true, + .named = false, + }, + [anon_sym_COMMA] = { + .visible = true, + .named = false, + }, + [anon_sym_as] = { + .visible = true, + .named = false, + }, + [anon_sym_STAR] = { + .visible = true, + .named = false, + }, + [anon_sym_print] = { + .visible = true, + .named = false, + }, + [anon_sym_GT_GT] = { + .visible = true, + .named = false, + }, + [anon_sym_assert] = { + .visible = true, + .named = false, + }, + [anon_sym_COLON_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_return] = { + .visible = true, + .named = false, + }, + [anon_sym_del] = { + .visible = true, + .named = false, + }, + [anon_sym_raise] = { + .visible = true, + .named = false, + }, + [anon_sym_pass] = { + .visible = true, + .named = false, + }, + [anon_sym_break] = { + .visible = true, + .named = false, + }, + [anon_sym_continue] = { + .visible = true, + .named = false, + }, + [anon_sym_if] = { + .visible = true, + .named = false, + }, + [anon_sym_COLON] = { + .visible = true, + .named = false, + }, + [anon_sym_elif] = { + .visible = true, + .named = false, + }, + [anon_sym_else] = { + .visible = true, + .named = false, + }, + [anon_sym_async] = { + .visible = true, + .named = false, + }, + [anon_sym_for] = { + .visible = true, + .named = false, + }, + [anon_sym_in] = { + .visible = true, + .named = false, + }, + [anon_sym_while] = { + .visible = true, + .named = false, + }, + [anon_sym_try] = { + .visible = true, + .named = false, + }, + [anon_sym_except] = { + .visible = true, + .named = false, + }, + [anon_sym_except_STAR] = { + .visible = true, + .named = false, + }, + [anon_sym_finally] = { + .visible = true, + .named = false, + }, + [anon_sym_with] = { + .visible = true, + .named = false, + }, + [anon_sym_match] = { + .visible = true, + .named = false, + }, + [anon_sym_case] = { + .visible = true, + .named = false, + }, + [anon_sym_PIPE] = { + .visible = true, + .named = false, + }, + [anon_sym_DASH] = { + .visible = true, + .named = false, + }, + [anon_sym_PLUS] = { + .visible = true, + .named = false, + }, + [sym_match_wildcard_pattern] = { + .visible = true, + .named = true, + }, + [anon_sym_LBRACK] = { + .visible = true, + .named = false, + }, + [anon_sym_RBRACK] = { + .visible = true, + .named = false, + }, + [anon_sym_LBRACE] = { + .visible = true, + .named = false, + }, + [anon_sym_RBRACE] = { + .visible = true, + .named = false, + }, + [anon_sym_STAR_STAR] = { + .visible = true, + .named = false, + }, + [anon_sym_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_def] = { + .visible = true, + .named = false, + }, + [anon_sym_DASH_GT] = { + .visible = true, + .named = false, + }, + [anon_sym_global] = { + .visible = true, + .named = false, + }, + [anon_sym_nonlocal] = { + .visible = true, + .named = false, + }, + [anon_sym_exec] = { + .visible = true, + .named = false, + }, + [anon_sym_type] = { + .visible = true, + .named = false, + }, + [anon_sym_class] = { + .visible = true, + .named = false, + }, + [anon_sym_AT] = { + .visible = true, + .named = false, + }, + [anon_sym_not] = { + .visible = true, + .named = false, + }, + [anon_sym_and] = { + .visible = true, + .named = false, + }, + [anon_sym_or] = { + .visible = true, + .named = false, + }, + [anon_sym_SLASH] = { + .visible = true, + .named = false, + }, + [anon_sym_PERCENT] = { + .visible = true, + .named = false, + }, + [anon_sym_SLASH_SLASH] = { + .visible = true, + .named = false, + }, + [anon_sym_AMP] = { + .visible = true, + .named = false, + }, + [anon_sym_CARET] = { + .visible = true, + .named = false, + }, + [anon_sym_LT_LT] = { + .visible = true, + .named = false, + }, + [anon_sym_TILDE] = { + .visible = true, + .named = false, + }, + [anon_sym_LT] = { + .visible = true, + .named = false, + }, + [anon_sym_LT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_EQ_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_BANG_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_GT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_GT] = { + .visible = true, + .named = false, + }, + [anon_sym_LT_GT] = { + .visible = true, + .named = false, + }, + [anon_sym_is] = { + .visible = true, + .named = false, + }, + [anon_sym_lambda] = { + .visible = true, + .named = false, + }, + [anon_sym_PLUS_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_DASH_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_STAR_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_SLASH_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_AT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_SLASH_SLASH_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_PERCENT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_STAR_STAR_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_GT_GT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_LT_LT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_AMP_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_CARET_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_PIPE_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_yield] = { + .visible = true, + .named = false, + }, + [sym_ellipsis] = { + .visible = true, + .named = true, + }, + [anon_sym_LBRACE2] = { + .visible = true, + .named = false, + }, + [sym__escape_interpolation] = { + .visible = false, + .named = true, + }, + [sym_escape_sequence] = { + .visible = true, + .named = true, + }, + [sym__not_escape_sequence] = { + .visible = false, + .named = true, + }, + [aux_sym_format_specifier_token1] = { + .visible = false, + .named = false, + }, + [sym_type_conversion] = { + .visible = true, + .named = true, + }, + [sym_integer] = { + .visible = true, + .named = true, + }, + [sym_float] = { + .visible = true, + .named = true, + }, + [anon_sym_await] = { + .visible = true, + .named = false, + }, + [sym_true] = { + .visible = true, + .named = true, + }, + [sym_false] = { + .visible = true, + .named = true, + }, + [sym_none] = { + .visible = true, + .named = true, + }, + [sym_comment] = { + .visible = true, + .named = true, + }, + [sym__semicolon] = { + .visible = false, + .named = true, + }, + [sym__newline] = { + .visible = false, + .named = true, + }, + [sym__indent] = { + .visible = false, + .named = true, + }, + [sym__dedent] = { + .visible = false, + .named = true, + }, + [sym__string_start] = { + .visible = true, + .named = false, + }, + [sym__string_content] = { + .visible = false, + .named = true, + }, + [sym__string_end] = { + .visible = true, + .named = false, + }, + [sym_module] = { + .visible = true, + .named = true, + }, + [sym__statement] = { + .visible = false, + .named = true, + }, + [sym__simple_statements] = { + .visible = false, + .named = true, + }, + [sym_import_statement] = { + .visible = true, + .named = true, + }, + [sym_import_prefix] = { + .visible = true, + .named = true, + }, + [sym_relative_import] = { + .visible = true, + .named = true, + }, + [sym_future_import_statement] = { + .visible = true, + .named = true, + }, + [sym_import_from_statement] = { + .visible = true, + .named = true, + }, + [sym__import_list] = { + .visible = false, + .named = true, + }, + [sym_aliased_import] = { + .visible = true, + .named = true, + }, + [sym_wildcard_import] = { + .visible = true, + .named = true, + }, + [sym_print_statement] = { + .visible = true, + .named = true, + }, + [sym_chevron] = { + .visible = true, + .named = true, + }, + [sym_assert_statement] = { + .visible = true, + .named = true, + }, + [sym_expression_statement] = { + .visible = true, + .named = true, + }, + [sym_named_expression] = { + .visible = true, + .named = true, + }, + [sym_return_statement] = { + .visible = true, + .named = true, + }, + [sym_delete_statement] = { + .visible = true, + .named = true, + }, + [sym_raise_statement] = { + .visible = true, + .named = true, + }, + [sym_pass_statement] = { + .visible = true, + .named = true, + }, + [sym_break_statement] = { + .visible = true, + .named = true, + }, + [sym_continue_statement] = { + .visible = true, + .named = true, + }, + [sym_if_statement] = { + .visible = true, + .named = true, + }, + [sym_elif_clause] = { + .visible = true, + .named = true, + }, + [sym_else_clause] = { + .visible = true, + .named = true, + }, + [sym_for_statement] = { + .visible = true, + .named = true, + }, + [sym_while_statement] = { + .visible = true, + .named = true, + }, + [sym_try_statement] = { + .visible = true, + .named = true, + }, + [sym_except_clause] = { + .visible = true, + .named = true, + }, + [sym_except_group_clause] = { + .visible = true, + .named = true, + }, + [sym_finally_clause] = { + .visible = true, + .named = true, + }, + [sym_with_statement] = { + .visible = true, + .named = true, + }, + [sym_with_clause] = { + .visible = true, + .named = true, + }, + [sym_with_item] = { + .visible = true, + .named = true, + }, + [sym_match_statement] = { + .visible = true, + .named = true, + }, + [sym_cases] = { + .visible = true, + .named = true, + }, + [sym_case_block] = { + .visible = true, + .named = true, + }, + [sym__match_patterns] = { + .visible = false, + .named = true, + }, + [sym_open_sequence_match_pattern] = { + .visible = true, + .named = true, + }, + [sym__match_pattern] = { + .visible = false, + .named = true, + }, + [sym_match_as_pattern] = { + .visible = true, + .named = true, + }, + [sym__match_or_pattern] = { + .visible = false, + .named = true, + }, + [sym_match_or_pattern] = { + .visible = true, + .named = true, + }, + [sym__closed_pattern] = { + .visible = false, + .named = true, + }, + [sym_match_literal_pattern] = { + .visible = true, + .named = true, + }, + [sym_match_capture_pattern] = { + .visible = true, + .named = true, + }, + [sym_match_value_pattern] = { + .visible = true, + .named = true, + }, + [sym_match_group_pattern] = { + .visible = true, + .named = true, + }, + [sym_match_sequence_pattern] = { + .visible = true, + .named = true, + }, + [sym__match_maybe_star_pattern] = { + .visible = false, + .named = true, + }, + [sym_match_star_pattern] = { + .visible = true, + .named = true, + }, + [sym_match_mapping_pattern] = { + .visible = true, + .named = true, + }, + [sym_match_double_star_pattern] = { + .visible = true, + .named = true, + }, + [sym_match_key_value_pattern] = { + .visible = true, + .named = true, + }, + [sym_match_class_pattern] = { + .visible = true, + .named = true, + }, + [sym_pattern_class_name] = { + .visible = true, + .named = true, + }, + [sym_match_positional_pattern] = { + .visible = true, + .named = true, + }, + [sym_match_keyword_pattern] = { + .visible = true, + .named = true, + }, + [sym_guard] = { + .visible = true, + .named = true, + }, + [sym_function_definition] = { + .visible = true, + .named = true, + }, + [sym_parameters] = { + .visible = true, + .named = true, + }, + [sym_lambda_parameters] = { + .visible = true, + .named = true, + }, + [sym_list_splat] = { + .visible = true, + .named = true, + }, + [sym_dictionary_splat] = { + .visible = true, + .named = true, + }, + [sym_global_statement] = { + .visible = true, + .named = true, + }, + [sym_nonlocal_statement] = { + .visible = true, + .named = true, + }, + [sym_exec_statement] = { + .visible = true, + .named = true, + }, + [sym_type_alias_statement] = { + .visible = true, + .named = true, + }, + [sym_class_definition] = { + .visible = true, + .named = true, + }, + [sym_type_parameters] = { + .visible = true, + .named = true, + }, + [sym__type_bound] = { + .visible = false, + .named = true, + }, + [sym_typevar_parameter] = { + .visible = true, + .named = true, + }, + [sym_typevartuple_parameter] = { + .visible = true, + .named = true, + }, + [sym_paramspec_parameter] = { + .visible = true, + .named = true, + }, + [sym__type_parameter] = { + .visible = false, + .named = true, + }, + [sym_parenthesized_list_splat] = { + .visible = true, + .named = true, + }, + [sym_argument_list] = { + .visible = true, + .named = true, + }, + [sym_decorated_definition] = { + .visible = true, + .named = true, + }, + [sym_decorator] = { + .visible = true, + .named = true, + }, + [sym_block] = { + .visible = true, + .named = true, + }, + [sym_expression_list] = { + .visible = true, + .named = true, + }, + [sym_dotted_name] = { + .visible = true, + .named = true, + }, + [sym__parameters] = { + .visible = false, + .named = true, + }, + [sym__patterns] = { + .visible = false, + .named = true, + }, + [sym_parameter] = { + .visible = false, + .named = true, + .supertype = true, + }, + [sym_pattern] = { + .visible = false, + .named = true, + .supertype = true, + }, + [sym_tuple_pattern] = { + .visible = true, + .named = true, + }, + [sym_list_pattern] = { + .visible = true, + .named = true, + }, + [sym_default_parameter] = { + .visible = true, + .named = true, + }, + [sym_typed_default_parameter] = { + .visible = true, + .named = true, + }, + [sym_list_splat_pattern] = { + .visible = true, + .named = true, + }, + [sym_dictionary_splat_pattern] = { + .visible = true, + .named = true, + }, + [sym__expression_within_for_in_clause] = { + .visible = false, + .named = true, + }, + [sym_expression] = { + .visible = false, + .named = true, + .supertype = true, + }, + [sym_primary_expression] = { + .visible = false, + .named = true, + .supertype = true, + }, + [sym_not_operator] = { + .visible = true, + .named = true, + }, + [sym_boolean_operator] = { + .visible = true, + .named = true, + }, + [sym_binary_operator] = { + .visible = true, + .named = true, + }, + [sym_unary_operator] = { + .visible = true, + .named = true, + }, + [sym_comparison_operator] = { + .visible = true, + .named = true, + }, + [sym_lambda] = { + .visible = true, + .named = true, + }, + [sym_lambda_within_for_in_clause] = { + .visible = true, + .named = true, + }, + [sym_assignment] = { + .visible = true, + .named = true, + }, + [sym_augmented_assignment] = { + .visible = true, + .named = true, + }, + [sym_pattern_list] = { + .visible = true, + .named = true, + }, + [sym__right_hand_side] = { + .visible = false, + .named = true, + }, + [sym_yield] = { + .visible = true, + .named = true, + }, + [sym_attribute] = { + .visible = true, + .named = true, + }, + [sym_subscript] = { + .visible = true, + .named = true, + }, + [sym_slice] = { + .visible = true, + .named = true, + }, + [sym_call] = { + .visible = true, + .named = true, + }, + [sym_typed_parameter] = { + .visible = true, + .named = true, + }, + [sym_type] = { + .visible = true, + .named = true, + }, + [sym_keyword_argument] = { + .visible = true, + .named = true, + }, + [sym_list] = { + .visible = true, + .named = true, + }, + [sym_set] = { + .visible = true, + .named = true, + }, + [sym_tuple] = { + .visible = true, + .named = true, + }, + [sym_dictionary] = { + .visible = true, + .named = true, + }, + [sym_pair] = { + .visible = true, + .named = true, + }, + [sym_list_comprehension] = { + .visible = true, + .named = true, + }, + [sym_dictionary_comprehension] = { + .visible = true, + .named = true, + }, + [sym_set_comprehension] = { + .visible = true, + .named = true, + }, + [sym_generator_expression] = { + .visible = true, + .named = true, + }, + [sym__comprehension_clauses] = { + .visible = false, + .named = true, + }, + [sym_parenthesized_expression] = { + .visible = true, + .named = true, + }, + [sym__collection_elements] = { + .visible = false, + .named = true, + }, + [sym_for_in_clause] = { + .visible = true, + .named = true, + }, + [sym_if_clause] = { + .visible = true, + .named = true, + }, + [sym_conditional_expression] = { + .visible = true, + .named = true, + }, + [sym_concatenated_string] = { + .visible = true, + .named = true, + }, + [sym_string] = { + .visible = true, + .named = true, + }, + [sym_string_content] = { + .visible = true, + .named = true, + }, + [sym_interpolation] = { + .visible = true, + .named = true, + }, + [sym__f_expression] = { + .visible = false, + .named = true, + }, + [sym_format_specifier] = { + .visible = true, + .named = true, + }, + [sym_await] = { + .visible = true, + .named = true, + }, + [sym_positional_separator] = { + .visible = true, + .named = true, + }, + [sym_keyword_separator] = { + .visible = true, + .named = true, + }, + [aux_sym_module_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__simple_statements_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_import_prefix_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__import_list_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_print_statement_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_assert_statement_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_if_statement_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_try_statement_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_try_statement_repeat2] = { + .visible = false, + .named = false, + }, + [aux_sym_with_clause_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_cases_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_open_sequence_match_pattern_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_match_or_pattern_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_match_value_pattern_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_match_mapping_pattern_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_match_class_pattern_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_match_class_pattern_repeat2] = { + .visible = false, + .named = false, + }, + [aux_sym_global_statement_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_type_parameters_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_argument_list_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_decorated_definition_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_expression_list_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__parameters_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__patterns_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_comparison_operator_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_subscript_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_dictionary_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__comprehension_clauses_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__collection_elements_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_for_in_clause_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_concatenated_string_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_string_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_string_content_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_format_specifier_repeat1] = { + .visible = false, + .named = false, + }, + [alias_sym_format_expression] = { + .visible = true, + .named = true, + }, + [anon_alias_sym_isnot] = { + .visible = true, + .named = false, + }, + [anon_alias_sym_notin] = { + .visible = true, + .named = false, + }, +}; + +enum { + field_alias = 1, + field_alternative = 2, + field_argument = 3, + field_arguments = 4, + field_attribute = 5, + field_body = 6, + field_bound = 7, + field_cases = 8, + field_cause = 9, + field_class = 10, + field_code = 11, + field_condition = 12, + field_consequence = 13, + field_content = 14, + field_definition = 15, + field_element = 16, + field_expression = 17, + field_function = 18, + field_guard = 19, + field_imaginary = 20, + field_inner = 21, + field_interpolation = 22, + field_key = 23, + field_kwarg = 24, + field_left = 25, + field_module_name = 26, + field_name = 27, + field_object = 28, + field_operator = 29, + field_operators = 30, + field_parameters = 31, + field_pattern = 32, + field_prefix = 33, + field_prefix_operator = 34, + field_real = 35, + field_return_type = 36, + field_right = 37, + field_start = 38, + field_step = 39, + field_stop = 40, + field_string_content = 41, + field_subject = 42, + field_subscript = 43, + field_suffix = 44, + field_superclasses = 45, + field_target = 46, + field_test = 47, + field_trailing_comma = 48, + field_type = 49, + field_type_parameter = 50, + field_type_parameters = 51, + field_value = 52, + field_vararg = 53, +}; + +static const char * const ts_field_names[] = { + [0] = NULL, + [field_alias] = "alias", + [field_alternative] = "alternative", + [field_argument] = "argument", + [field_arguments] = "arguments", + [field_attribute] = "attribute", + [field_body] = "body", + [field_bound] = "bound", + [field_cases] = "cases", + [field_cause] = "cause", + [field_class] = "class", + [field_code] = "code", + [field_condition] = "condition", + [field_consequence] = "consequence", + [field_content] = "content", + [field_definition] = "definition", + [field_element] = "element", + [field_expression] = "expression", + [field_function] = "function", + [field_guard] = "guard", + [field_imaginary] = "imaginary", + [field_inner] = "inner", + [field_interpolation] = "interpolation", + [field_key] = "key", + [field_kwarg] = "kwarg", + [field_left] = "left", + [field_module_name] = "module_name", + [field_name] = "name", + [field_object] = "object", + [field_operator] = "operator", + [field_operators] = "operators", + [field_parameters] = "parameters", + [field_pattern] = "pattern", + [field_prefix] = "prefix", + [field_prefix_operator] = "prefix_operator", + [field_real] = "real", + [field_return_type] = "return_type", + [field_right] = "right", + [field_start] = "start", + [field_step] = "step", + [field_stop] = "stop", + [field_string_content] = "string_content", + [field_subject] = "subject", + [field_subscript] = "subscript", + [field_suffix] = "suffix", + [field_superclasses] = "superclasses", + [field_target] = "target", + [field_test] = "test", + [field_trailing_comma] = "trailing_comma", + [field_type] = "type", + [field_type_parameter] = "type_parameter", + [field_type_parameters] = "type_parameters", + [field_value] = "value", + [field_vararg] = "vararg", +}; + +static const TSFieldMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { + [2] = {.index = 0, .length = 2}, + [3] = {.index = 2, .length = 1}, + [4] = {.index = 3, .length = 1}, + [5] = {.index = 4, .length = 1}, + [6] = {.index = 5, .length = 1}, + [7] = {.index = 6, .length = 1}, + [8] = {.index = 7, .length = 1}, + [9] = {.index = 7, .length = 1}, + [10] = {.index = 8, .length = 1}, + [11] = {.index = 9, .length = 1}, + [12] = {.index = 10, .length = 1}, + [13] = {.index = 11, .length = 2}, + [14] = {.index = 13, .length = 1}, + [15] = {.index = 14, .length = 1}, + [16] = {.index = 15, .length = 2}, + [17] = {.index = 17, .length = 2}, + [18] = {.index = 19, .length = 1}, + [19] = {.index = 20, .length = 1}, + [20] = {.index = 21, .length = 4}, + [21] = {.index = 25, .length = 4}, + [22] = {.index = 29, .length = 2}, + [23] = {.index = 31, .length = 1}, + [24] = {.index = 32, .length = 2}, + [25] = {.index = 34, .length = 2}, + [26] = {.index = 36, .length = 1}, + [27] = {.index = 37, .length = 2}, + [28] = {.index = 39, .length = 1}, + [29] = {.index = 40, .length = 2}, + [30] = {.index = 42, .length = 1}, + [31] = {.index = 43, .length = 1}, + [32] = {.index = 44, .length = 1}, + [33] = {.index = 45, .length = 1}, + [34] = {.index = 45, .length = 1}, + [35] = {.index = 37, .length = 2}, + [36] = {.index = 46, .length = 2}, + [37] = {.index = 48, .length = 2}, + [38] = {.index = 50, .length = 2}, + [39] = {.index = 52, .length = 3}, + [40] = {.index = 55, .length = 2}, + [41] = {.index = 57, .length = 1}, + [42] = {.index = 58, .length = 2}, + [43] = {.index = 60, .length = 1}, + [44] = {.index = 61, .length = 2}, + [45] = {.index = 63, .length = 2}, + [46] = {.index = 65, .length = 1}, + [47] = {.index = 66, .length = 2}, + [48] = {.index = 68, .length = 1}, + [50] = {.index = 69, .length = 3}, + [51] = {.index = 72, .length = 1}, + [52] = {.index = 73, .length = 2}, + [53] = {.index = 75, .length = 1}, + [54] = {.index = 76, .length = 2}, + [55] = {.index = 78, .length = 2}, + [56] = {.index = 44, .length = 1}, + [57] = {.index = 80, .length = 1}, + [58] = {.index = 81, .length = 2}, + [59] = {.index = 83, .length = 2}, + [60] = {.index = 83, .length = 2}, + [61] = {.index = 85, .length = 2}, + [62] = {.index = 87, .length = 2}, + [63] = {.index = 89, .length = 2}, + [64] = {.index = 91, .length = 2}, + [65] = {.index = 93, .length = 1}, + [66] = {.index = 94, .length = 2}, + [67] = {.index = 43, .length = 1}, + [68] = {.index = 96, .length = 1}, + [69] = {.index = 97, .length = 1}, + [70] = {.index = 98, .length = 2}, + [71] = {.index = 100, .length = 2}, + [72] = {.index = 100, .length = 2}, + [74] = {.index = 102, .length = 1}, + [75] = {.index = 103, .length = 3}, + [76] = {.index = 106, .length = 3}, + [77] = {.index = 109, .length = 3}, + [78] = {.index = 112, .length = 1}, + [79] = {.index = 113, .length = 3}, + [80] = {.index = 116, .length = 3}, + [81] = {.index = 119, .length = 2}, + [82] = {.index = 121, .length = 2}, + [83] = {.index = 123, .length = 1}, + [84] = {.index = 124, .length = 2}, + [85] = {.index = 126, .length = 1}, + [86] = {.index = 127, .length = 3}, + [87] = {.index = 130, .length = 3}, + [88] = {.index = 133, .length = 3}, + [89] = {.index = 136, .length = 3}, + [90] = {.index = 139, .length = 3}, + [91] = {.index = 142, .length = 3}, + [92] = {.index = 85, .length = 2}, + [93] = {.index = 145, .length = 1}, + [94] = {.index = 146, .length = 1}, + [95] = {.index = 147, .length = 2}, + [96] = {.index = 149, .length = 3}, + [97] = {.index = 152, .length = 2}, + [98] = {.index = 154, .length = 1}, + [99] = {.index = 155, .length = 2}, + [100] = {.index = 157, .length = 2}, + [101] = {.index = 159, .length = 4}, + [102] = {.index = 163, .length = 2}, + [103] = {.index = 165, .length = 4}, + [104] = {.index = 169, .length = 4}, + [105] = {.index = 173, .length = 2}, + [106] = {.index = 175, .length = 3}, + [107] = {.index = 178, .length = 3}, + [108] = {.index = 181, .length = 4}, + [109] = {.index = 185, .length = 2}, + [110] = {.index = 187, .length = 1}, + [111] = {.index = 188, .length = 2}, + [112] = {.index = 190, .length = 2}, + [113] = {.index = 192, .length = 4}, + [114] = {.index = 196, .length = 4}, + [115] = {.index = 200, .length = 4}, + [116] = {.index = 204, .length = 4}, + [117] = {.index = 208, .length = 4}, + [118] = {.index = 212, .length = 3}, + [119] = {.index = 215, .length = 2}, + [120] = {.index = 217, .length = 2}, + [121] = {.index = 219, .length = 2}, + [122] = {.index = 221, .length = 3}, + [123] = {.index = 224, .length = 5}, + [124] = {.index = 229, .length = 3}, + [125] = {.index = 232, .length = 4}, + [126] = {.index = 236, .length = 4}, + [127] = {.index = 240, .length = 4}, + [128] = {.index = 244, .length = 4}, + [129] = {.index = 248, .length = 2}, + [130] = {.index = 250, .length = 1}, + [131] = {.index = 251, .length = 3}, + [132] = {.index = 254, .length = 1}, + [133] = {.index = 255, .length = 2}, + [134] = {.index = 257, .length = 2}, + [135] = {.index = 259, .length = 1}, + [136] = {.index = 260, .length = 4}, + [137] = {.index = 264, .length = 5}, + [138] = {.index = 269, .length = 5}, + [139] = {.index = 274, .length = 3}, + [140] = {.index = 277, .length = 3}, + [141] = {.index = 280, .length = 4}, + [142] = {.index = 284, .length = 4}, + [143] = {.index = 288, .length = 4}, + [144] = {.index = 292, .length = 5}, + [145] = {.index = 297, .length = 5}, + [146] = {.index = 302, .length = 3}, + [147] = {.index = 305, .length = 4}, + [148] = {.index = 309, .length = 3}, + [149] = {.index = 312, .length = 3}, + [150] = {.index = 315, .length = 5}, + [151] = {.index = 320, .length = 5}, + [152] = {.index = 325, .length = 5}, + [153] = {.index = 330, .length = 5}, + [154] = {.index = 335, .length = 5}, + [155] = {.index = 340, .length = 3}, + [156] = {.index = 343, .length = 4}, + [157] = {.index = 347, .length = 2}, + [158] = {.index = 349, .length = 6}, + [159] = {.index = 355, .length = 6}, + [160] = {.index = 361, .length = 4}, +}; + +static const TSFieldMapEntry ts_field_map_entries[] = { + [0] = + {field_prefix, 0}, + {field_suffix, 1}, + [2] = + {field_string_content, 0}, + [3] = + {field_interpolation, 0}, + [4] = + {field_name, 1, .inherited = true}, + [5] = + {field_name, 0}, + [6] = + {field_element, 0}, + [7] = + {field_vararg, 1}, + [8] = + {field_argument, 1}, + [9] = + {field_target, 1}, + [10] = + {field_value, 0}, + [11] = + {field_argument, 1}, + {field_operator, 0}, + [13] = + {field_value, 1}, + [14] = + {field_code, 1}, + [15] = + {field_element, 0}, + {field_element, 1, .inherited = true}, + [17] = + {field_arguments, 1}, + {field_function, 0}, + [19] = + {field_operators, 1, .inherited = true}, + [20] = + {field_definition, 1}, + [21] = + {field_interpolation, 1, .inherited = true}, + {field_prefix, 0}, + {field_string_content, 1, .inherited = true}, + {field_suffix, 2}, + [25] = + {field_interpolation, 0, .inherited = true}, + {field_interpolation, 1, .inherited = true}, + {field_string_content, 0, .inherited = true}, + {field_string_content, 1, .inherited = true}, + [29] = + {field_name, 0}, + {field_name, 1, .inherited = true}, + [31] = + {field_name, 1}, + [32] = + {field_element, 0}, + {field_trailing_comma, 1}, + [34] = + {field_element, 1, .inherited = true}, + {field_trailing_comma, 1, .inherited = true}, + [36] = + {field_inner, 1}, + [37] = + {field_name, 0}, + {field_value, 2}, + [39] = + {field_argument, 2, .inherited = true}, + [40] = + {field_argument, 1}, + {field_argument, 2, .inherited = true}, + [42] = + {field_cause, 2}, + [43] = + {field_element, 1}, + [44] = + {field_body, 2}, + [45] = + {field_kwarg, 1}, + [46] = + {field_element, 0, .inherited = true}, + {field_element, 1, .inherited = true}, + [48] = + {field_left, 0}, + {field_type, 2}, + [50] = + {field_left, 0}, + {field_right, 2}, + [52] = + {field_left, 0}, + {field_operator, 1}, + {field_right, 2}, + [55] = + {field_attribute, 2}, + {field_object, 0}, + [57] = + {field_operators, 0}, + [58] = + {field_operators, 0, .inherited = true}, + {field_operators, 1, .inherited = true}, + [60] = + {field_expression, 1}, + [61] = + {field_name, 0, .inherited = true}, + {field_name, 1, .inherited = true}, + [63] = + {field_alias, 2}, + {field_name, 0}, + [65] = + {field_name, 3, .inherited = true}, + [66] = + {field_module_name, 1}, + {field_name, 3, .inherited = true}, + [68] = + {field_module_name, 1}, + [69] = + {field_element, 0}, + {field_element, 1, .inherited = true}, + {field_trailing_comma, 2}, + [72] = + {field_body, 1}, + [73] = + {field_argument, 0, .inherited = true}, + {field_argument, 1, .inherited = true}, + [75] = + {field_cause, 3}, + [76] = + {field_condition, 1}, + {field_consequence, 3}, + [78] = + {field_body, 3}, + {field_condition, 1}, + [80] = + {field_body, 3}, + [81] = + {field_alias, 2}, + {field_value, 0}, + [83] = + {field_cases, 3}, + {field_subject, 1}, + [85] = + {field_element, 1}, + {field_element, 2, .inherited = true}, + [87] = + {field_key, 0}, + {field_value, 2}, + [89] = + {field_name, 1}, + {field_value, 3}, + [91] = + {field_body, 3}, + {field_name, 1}, + [93] = + {field_type, 2}, + [94] = + {field_body, 3}, + {field_parameters, 1}, + [96] = + {field_stop, 1}, + [97] = + {field_start, 0}, + [98] = + {field_subscript, 2}, + {field_value, 0}, + [100] = + {field_operators, 0}, + {field_operators, 1}, + [102] = + {field_alternative, 0}, + [103] = + {field_alternative, 4}, + {field_condition, 1}, + {field_consequence, 3}, + [106] = + {field_alternative, 4, .inherited = true}, + {field_condition, 1}, + {field_consequence, 3}, + [109] = + {field_condition, 1}, + {field_consequence, 3}, + {field_consequence, 4}, + [112] = + {field_body, 4}, + [113] = + {field_alternative, 4}, + {field_body, 3}, + {field_condition, 1}, + [116] = + {field_body, 3}, + {field_body, 4}, + {field_condition, 1}, + [119] = + {field_body, 2}, + {field_body, 3}, + [121] = + {field_body, 3}, + {field_body, 4}, + [123] = + {field_real, 0}, + [124] = + {field_bound, 1, .inherited = true}, + {field_name, 0}, + [126] = + {field_type_parameter, 1}, + [127] = + {field_body, 4}, + {field_name, 1}, + {field_parameters, 2}, + [130] = + {field_name, 1}, + {field_type_parameters, 2}, + {field_value, 4}, + [133] = + {field_body, 3}, + {field_body, 4}, + {field_name, 1}, + [136] = + {field_body, 4}, + {field_name, 1}, + {field_type_parameters, 2}, + [139] = + {field_body, 4}, + {field_name, 1}, + {field_superclasses, 2}, + [142] = + {field_left, 0}, + {field_right, 4}, + {field_type, 2}, + [145] = + {field_step, 2}, + [146] = + {field_subscript, 1}, + [147] = + {field_start, 0}, + {field_stop, 2}, + [149] = + {field_subscript, 2}, + {field_subscript, 3, .inherited = true}, + {field_value, 0}, + [152] = + {field_subscript, 0, .inherited = true}, + {field_subscript, 1, .inherited = true}, + [154] = + {field_name, 4, .inherited = true}, + [155] = + {field_module_name, 1}, + {field_name, 4, .inherited = true}, + [157] = + {field_left, 1}, + {field_right, 3}, + [159] = + {field_alternative, 4, .inherited = true}, + {field_alternative, 5}, + {field_condition, 1}, + {field_consequence, 3}, + [163] = + {field_alternative, 0, .inherited = true}, + {field_alternative, 1, .inherited = true}, + [165] = + {field_alternative, 5}, + {field_condition, 1}, + {field_consequence, 3}, + {field_consequence, 4}, + [169] = + {field_alternative, 5, .inherited = true}, + {field_condition, 1}, + {field_consequence, 3}, + {field_consequence, 4}, + [173] = + {field_body, 4}, + {field_body, 5}, + [175] = + {field_body, 5}, + {field_name, 2}, + {field_parameters, 3}, + [178] = + {field_body, 5}, + {field_left, 1}, + {field_right, 3}, + [181] = + {field_alternative, 5}, + {field_body, 3}, + {field_body, 4}, + {field_condition, 1}, + [185] = + {field_prefix_operator, 0}, + {field_real, 1}, + [187] = + {field_bound, 1}, + [188] = + {field_type_parameter, 1}, + {field_type_parameter, 2, .inherited = true}, + [190] = + {field_type_parameter, 0, .inherited = true}, + {field_type_parameter, 1, .inherited = true}, + [192] = + {field_body, 4}, + {field_body, 5}, + {field_name, 1}, + {field_parameters, 2}, + [196] = + {field_body, 5}, + {field_name, 1}, + {field_parameters, 3}, + {field_type_parameters, 2}, + [200] = + {field_body, 4}, + {field_body, 5}, + {field_name, 1}, + {field_type_parameters, 2}, + [204] = + {field_body, 5}, + {field_name, 1}, + {field_superclasses, 3}, + {field_type_parameters, 2}, + [208] = + {field_body, 4}, + {field_body, 5}, + {field_name, 1}, + {field_superclasses, 2}, + [212] = + {field_name, 0}, + {field_type, 2}, + {field_value, 4}, + [215] = + {field_step, 3}, + {field_stop, 1}, + [217] = + {field_start, 0}, + {field_step, 3}, + [219] = + {field_left, 2}, + {field_right, 4}, + [221] = + {field_left, 1}, + {field_right, 3}, + {field_right, 4}, + [224] = + {field_alternative, 5, .inherited = true}, + {field_alternative, 6}, + {field_condition, 1}, + {field_consequence, 3}, + {field_consequence, 4}, + [229] = + {field_body, 6}, + {field_left, 2}, + {field_right, 4}, + [232] = + {field_body, 5}, + {field_body, 6}, + {field_name, 2}, + {field_parameters, 3}, + [236] = + {field_body, 6}, + {field_name, 2}, + {field_parameters, 4}, + {field_type_parameters, 3}, + [240] = + {field_alternative, 6}, + {field_body, 5}, + {field_left, 1}, + {field_right, 3}, + [244] = + {field_body, 5}, + {field_body, 6}, + {field_left, 1}, + {field_right, 3}, + [248] = + {field_body, 3}, + {field_type, 1}, + [250] = + {field_content, 1}, + [251] = + {field_imaginary, 2}, + {field_operator, 1}, + {field_real, 0}, + [254] = + {field_test, 1}, + [255] = + {field_body, 3}, + {field_pattern, 1}, + [257] = + {field_alias, 2}, + {field_pattern, 0}, + [259] = + {field_class, 0}, + [260] = + {field_body, 6}, + {field_name, 1}, + {field_parameters, 2}, + {field_return_type, 4}, + [264] = + {field_body, 5}, + {field_body, 6}, + {field_name, 1}, + {field_parameters, 3}, + {field_type_parameters, 2}, + [269] = + {field_body, 5}, + {field_body, 6}, + {field_name, 1}, + {field_superclasses, 3}, + {field_type_parameters, 2}, + [274] = + {field_start, 0}, + {field_step, 4}, + {field_stop, 2}, + [277] = + {field_left, 2}, + {field_right, 4}, + {field_right, 5}, + [280] = + {field_alternative, 7}, + {field_body, 6}, + {field_left, 2}, + {field_right, 4}, + [284] = + {field_body, 6}, + {field_body, 7}, + {field_left, 2}, + {field_right, 4}, + [288] = + {field_body, 7}, + {field_name, 2}, + {field_parameters, 3}, + {field_return_type, 5}, + [292] = + {field_body, 6}, + {field_body, 7}, + {field_name, 2}, + {field_parameters, 4}, + {field_type_parameters, 3}, + [297] = + {field_alternative, 7}, + {field_body, 5}, + {field_body, 6}, + {field_left, 1}, + {field_right, 3}, + [302] = + {field_body, 3}, + {field_body, 4}, + {field_type, 1}, + [305] = + {field_imaginary, 3}, + {field_operator, 2}, + {field_prefix_operator, 0}, + {field_real, 1}, + [309] = + {field_body, 3}, + {field_body, 4}, + {field_pattern, 1}, + [312] = + {field_body, 4}, + {field_guard, 2}, + {field_pattern, 1}, + [315] = + {field_body, 6}, + {field_body, 7}, + {field_name, 1}, + {field_parameters, 2}, + {field_return_type, 4}, + [320] = + {field_body, 7}, + {field_name, 1}, + {field_parameters, 3}, + {field_return_type, 5}, + {field_type_parameters, 2}, + [325] = + {field_alternative, 8}, + {field_body, 6}, + {field_body, 7}, + {field_left, 2}, + {field_right, 4}, + [330] = + {field_body, 7}, + {field_body, 8}, + {field_name, 2}, + {field_parameters, 3}, + {field_return_type, 5}, + [335] = + {field_body, 8}, + {field_name, 2}, + {field_parameters, 4}, + {field_return_type, 6}, + {field_type_parameters, 3}, + [340] = + {field_alias, 3}, + {field_body, 5}, + {field_type, 1}, + [343] = + {field_body, 4}, + {field_body, 5}, + {field_guard, 2}, + {field_pattern, 1}, + [347] = + {field_attribute, 0}, + {field_value, 2}, + [349] = + {field_body, 7}, + {field_body, 8}, + {field_name, 1}, + {field_parameters, 3}, + {field_return_type, 5}, + {field_type_parameters, 2}, + [355] = + {field_body, 8}, + {field_body, 9}, + {field_name, 2}, + {field_parameters, 4}, + {field_return_type, 6}, + {field_type_parameters, 3}, + [361] = + {field_alias, 3}, + {field_body, 5}, + {field_body, 6}, + {field_type, 1}, +}; + +static const TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = { + [0] = {0}, + [1] = { + [0] = sym_identifier, + }, + [8] = { + [1] = sym_identifier, + }, + [27] = { + [0] = sym_identifier, + }, + [33] = { + [1] = sym_identifier, + }, + [49] = { + [1] = sym_parenthesized_expression, + }, + [54] = { + [3] = sym_block, + }, + [55] = { + [3] = sym_block, + }, + [56] = { + [2] = sym_block, + }, + [57] = { + [3] = sym_block, + }, + [59] = { + [1] = sym_tuple, + }, + [64] = { + [3] = sym_block, + }, + [67] = { + [1] = sym_parenthesized_expression, + }, + [71] = { + [0] = anon_alias_sym_notin, + [1] = anon_alias_sym_notin, + }, + [72] = { + [0] = anon_alias_sym_isnot, + [1] = anon_alias_sym_isnot, + }, + [73] = { + [0] = alias_sym_format_expression, + }, + [75] = { + [3] = sym_block, + }, + [76] = { + [3] = sym_block, + }, + [78] = { + [4] = sym_block, + }, + [79] = { + [3] = sym_block, + }, + [86] = { + [4] = sym_block, + }, + [89] = { + [4] = sym_block, + }, + [90] = { + [4] = sym_block, + }, + [92] = { + [1] = sym_parenthesized_expression, + }, + [101] = { + [3] = sym_block, + }, + [106] = { + [5] = sym_block, + }, + [107] = { + [5] = sym_block, + }, + [114] = { + [5] = sym_block, + }, + [116] = { + [5] = sym_block, + }, + [124] = { + [6] = sym_block, + }, + [126] = { + [6] = sym_block, + }, + [127] = { + [5] = sym_block, + }, + [129] = { + [3] = sym_block, + }, + [133] = { + [3] = sym_block, + }, + [136] = { + [6] = sym_block, + }, + [141] = { + [6] = sym_block, + }, + [143] = { + [7] = sym_block, + }, + [149] = { + [4] = sym_block, + }, + [151] = { + [7] = sym_block, + }, + [154] = { + [8] = sym_block, + }, + [155] = { + [5] = sym_block, + }, +}; + +static const uint16_t ts_non_terminal_alias_map[] = { + sym__simple_statements, 2, + sym__simple_statements, + sym_block, + sym_parenthesized_list_splat, 2, + sym_parenthesized_list_splat, + sym_parenthesized_expression, + sym_expression_list, 2, + sym_expression_list, + sym_tuple, + sym_interpolation, 2, + sym_interpolation, + alias_sym_format_expression, + 0, +}; + +static const TSStateId ts_primary_state_ids[STATE_COUNT] = { + [0] = 0, + [1] = 1, + [2] = 2, + [3] = 3, + [4] = 4, + [5] = 5, + [6] = 6, + [7] = 7, + [8] = 8, + [9] = 9, + [10] = 8, + [11] = 11, + [12] = 12, + [13] = 13, + [14] = 14, + [15] = 15, + [16] = 16, + [17] = 5, + [18] = 13, + [19] = 14, + [20] = 20, + [21] = 16, + [22] = 22, + [23] = 23, + [24] = 24, + [25] = 6, + [26] = 3, + [27] = 12, + [28] = 15, + [29] = 29, + [30] = 30, + [31] = 22, + [32] = 23, + [33] = 33, + [34] = 34, + [35] = 35, + [36] = 36, + [37] = 20, + [38] = 38, + [39] = 39, + [40] = 36, + [41] = 41, + [42] = 9, + [43] = 24, + [44] = 4, + [45] = 41, + [46] = 39, + [47] = 34, + [48] = 35, + [49] = 49, + [50] = 2, + [51] = 7, + [52] = 33, + [53] = 30, + [54] = 54, + [55] = 54, + [56] = 11, + [57] = 38, + [58] = 49, + [59] = 29, + [60] = 60, + [61] = 60, + [62] = 60, + [63] = 63, + [64] = 64, + [65] = 60, + [66] = 60, + [67] = 63, + [68] = 60, + [69] = 60, + [70] = 70, + [71] = 70, + [72] = 72, + [73] = 73, + [74] = 74, + [75] = 75, + [76] = 76, + [77] = 77, + [78] = 78, + [79] = 79, + [80] = 80, + [81] = 81, + [82] = 82, + [83] = 80, + [84] = 84, + [85] = 74, + [86] = 86, + [87] = 82, + [88] = 88, + [89] = 89, + [90] = 84, + [91] = 72, + [92] = 92, + [93] = 93, + [94] = 77, + [95] = 95, + [96] = 96, + [97] = 97, + [98] = 76, + [99] = 89, + [100] = 100, + [101] = 78, + [102] = 102, + [103] = 103, + [104] = 104, + [105] = 105, + [106] = 102, + [107] = 81, + [108] = 108, + [109] = 96, + [110] = 88, + [111] = 93, + [112] = 112, + [113] = 105, + [114] = 114, + [115] = 115, + [116] = 116, + [117] = 79, + [118] = 73, + [119] = 108, + [120] = 92, + [121] = 116, + [122] = 115, + [123] = 104, + [124] = 97, + [125] = 103, + [126] = 100, + [127] = 95, + [128] = 112, + [129] = 86, + [130] = 114, + [131] = 131, + [132] = 132, + [133] = 133, + [134] = 133, + [135] = 135, + [136] = 135, + [137] = 133, + [138] = 133, + [139] = 133, + [140] = 133, + [141] = 135, + [142] = 135, + [143] = 135, + [144] = 135, + [145] = 133, + [146] = 135, + [147] = 147, + [148] = 148, + [149] = 148, + [150] = 148, + [151] = 151, + [152] = 131, + [153] = 148, + [154] = 151, + [155] = 155, + [156] = 156, + [157] = 157, + [158] = 158, + [159] = 159, + [160] = 159, + [161] = 159, + [162] = 162, + [163] = 163, + [164] = 162, + [165] = 165, + [166] = 166, + [167] = 167, + [168] = 168, + [169] = 166, + [170] = 166, + [171] = 171, + [172] = 172, + [173] = 173, + [174] = 174, + [175] = 175, + [176] = 176, + [177] = 177, + [178] = 178, + [179] = 177, + [180] = 158, + [181] = 181, + [182] = 182, + [183] = 178, + [184] = 177, + [185] = 185, + [186] = 186, + [187] = 187, + [188] = 188, + [189] = 189, + [190] = 187, + [191] = 187, + [192] = 192, + [193] = 188, + [194] = 194, + [195] = 168, + [196] = 196, + [197] = 194, + [198] = 189, + [199] = 199, + [200] = 200, + [201] = 201, + [202] = 202, + [203] = 196, + [204] = 188, + [205] = 171, + [206] = 194, + [207] = 189, + [208] = 186, + [209] = 199, + [210] = 167, + [211] = 200, + [212] = 188, + [213] = 213, + [214] = 186, + [215] = 199, + [216] = 196, + [217] = 187, + [218] = 218, + [219] = 219, + [220] = 220, + [221] = 221, + [222] = 222, + [223] = 223, + [224] = 224, + [225] = 225, + [226] = 226, + [227] = 227, + [228] = 228, + [229] = 229, + [230] = 230, + [231] = 231, + [232] = 232, + [233] = 233, + [234] = 234, + [235] = 233, + [236] = 236, + [237] = 234, + [238] = 232, + [239] = 236, + [240] = 229, + [241] = 228, + [242] = 242, + [243] = 243, + [244] = 244, + [245] = 244, + [246] = 246, + [247] = 247, + [248] = 243, + [249] = 243, + [250] = 242, + [251] = 246, + [252] = 246, + [253] = 242, + [254] = 247, + [255] = 255, + [256] = 256, + [257] = 255, + [258] = 258, + [259] = 259, + [260] = 256, + [261] = 261, + [262] = 261, + [263] = 263, + [264] = 264, + [265] = 265, + [266] = 266, + [267] = 267, + [268] = 268, + [269] = 261, + [270] = 267, + [271] = 266, + [272] = 268, + [273] = 256, + [274] = 255, + [275] = 275, + [276] = 263, + [277] = 258, + [278] = 278, + [279] = 265, + [280] = 280, + [281] = 281, + [282] = 282, + [283] = 283, + [284] = 284, + [285] = 285, + [286] = 286, + [287] = 287, + [288] = 288, + [289] = 289, + [290] = 290, + [291] = 281, + [292] = 283, + [293] = 293, + [294] = 294, + [295] = 295, + [296] = 296, + [297] = 297, + [298] = 296, + [299] = 299, + [300] = 300, + [301] = 299, + [302] = 302, + [303] = 303, + [304] = 304, + [305] = 288, + [306] = 306, + [307] = 285, + [308] = 308, + [309] = 309, + [310] = 299, + [311] = 287, + [312] = 312, + [313] = 308, + [314] = 314, + [315] = 282, + [316] = 316, + [317] = 317, + [318] = 318, + [319] = 288, + [320] = 320, + [321] = 321, + [322] = 322, + [323] = 323, + [324] = 324, + [325] = 325, + [326] = 281, + [327] = 316, + [328] = 328, + [329] = 329, + [330] = 330, + [331] = 331, + [332] = 317, + [333] = 333, + [334] = 334, + [335] = 335, + [336] = 226, + [337] = 218, + [338] = 338, + [339] = 339, + [340] = 340, + [341] = 321, + [342] = 220, + [343] = 221, + [344] = 223, + [345] = 345, + [346] = 322, + [347] = 347, + [348] = 348, + [349] = 347, + [350] = 323, + [351] = 351, + [352] = 219, + [353] = 340, + [354] = 288, + [355] = 282, + [356] = 281, + [357] = 333, + [358] = 308, + [359] = 288, + [360] = 308, + [361] = 361, + [362] = 308, + [363] = 329, + [364] = 364, + [365] = 227, + [366] = 328, + [367] = 287, + [368] = 324, + [369] = 308, + [370] = 281, + [371] = 282, + [372] = 318, + [373] = 320, + [374] = 287, + [375] = 287, + [376] = 281, + [377] = 325, + [378] = 287, + [379] = 282, + [380] = 345, + [381] = 288, + [382] = 282, + [383] = 335, + [384] = 331, + [385] = 385, + [386] = 386, + [387] = 387, + [388] = 388, + [389] = 389, + [390] = 390, + [391] = 391, + [392] = 392, + [393] = 393, + [394] = 394, + [395] = 395, + [396] = 396, + [397] = 397, + [398] = 398, + [399] = 399, + [400] = 400, + [401] = 401, + [402] = 402, + [403] = 403, + [404] = 404, + [405] = 389, + [406] = 406, + [407] = 403, + [408] = 408, + [409] = 396, + [410] = 396, + [411] = 395, + [412] = 412, + [413] = 413, + [414] = 408, + [415] = 386, + [416] = 402, + [417] = 417, + [418] = 387, + [419] = 391, + [420] = 420, + [421] = 388, + [422] = 392, + [423] = 404, + [424] = 400, + [425] = 425, + [426] = 386, + [427] = 427, + [428] = 427, + [429] = 386, + [430] = 430, + [431] = 431, + [432] = 430, + [433] = 420, + [434] = 434, + [435] = 435, + [436] = 397, + [437] = 397, + [438] = 438, + [439] = 385, + [440] = 413, + [441] = 441, + [442] = 442, + [443] = 385, + [444] = 444, + [445] = 391, + [446] = 395, + [447] = 425, + [448] = 389, + [449] = 449, + [450] = 450, + [451] = 451, + [452] = 392, + [453] = 453, + [454] = 454, + [455] = 395, + [456] = 385, + [457] = 396, + [458] = 444, + [459] = 459, + [460] = 442, + [461] = 461, + [462] = 462, + [463] = 444, + [464] = 464, + [465] = 397, + [466] = 466, + [467] = 454, + [468] = 398, + [469] = 406, + [470] = 391, + [471] = 399, + [472] = 464, + [473] = 473, + [474] = 473, + [475] = 475, + [476] = 392, + [477] = 477, + [478] = 401, + [479] = 479, + [480] = 480, + [481] = 444, + [482] = 389, + [483] = 483, + [484] = 412, + [485] = 485, + [486] = 485, + [487] = 487, + [488] = 488, + [489] = 489, + [490] = 487, + [491] = 491, + [492] = 492, + [493] = 492, + [494] = 491, + [495] = 488, + [496] = 489, + [497] = 497, + [498] = 498, + [499] = 499, + [500] = 500, + [501] = 501, + [502] = 502, + [503] = 503, + [504] = 504, + [505] = 505, + [506] = 506, + [507] = 507, + [508] = 508, + [509] = 509, + [510] = 510, + [511] = 511, + [512] = 512, + [513] = 512, + [514] = 514, + [515] = 498, + [516] = 507, + [517] = 517, + [518] = 518, + [519] = 519, + [520] = 504, + [521] = 521, + [522] = 522, + [523] = 523, + [524] = 524, + [525] = 500, + [526] = 524, + [527] = 527, + [528] = 528, + [529] = 529, + [530] = 530, + [531] = 531, + [532] = 532, + [533] = 533, + [534] = 534, + [535] = 535, + [536] = 534, + [537] = 529, + [538] = 530, + [539] = 511, + [540] = 533, + [541] = 541, + [542] = 502, + [543] = 543, + [544] = 544, + [545] = 510, + [546] = 509, + [547] = 508, + [548] = 501, + [549] = 549, + [550] = 527, + [551] = 503, + [552] = 552, + [553] = 531, + [554] = 549, + [555] = 528, + [556] = 506, + [557] = 505, + [558] = 532, + [559] = 559, + [560] = 543, + [561] = 561, + [562] = 541, + [563] = 535, + [564] = 559, + [565] = 561, + [566] = 517, + [567] = 567, + [568] = 514, + [569] = 567, + [570] = 570, + [571] = 571, + [572] = 571, + [573] = 573, + [574] = 573, + [575] = 575, + [576] = 522, + [577] = 575, + [578] = 544, + [579] = 579, + [580] = 497, + [581] = 581, + [582] = 582, + [583] = 579, + [584] = 499, + [585] = 570, + [586] = 581, + [587] = 587, + [588] = 523, + [589] = 582, + [590] = 587, + [591] = 518, + [592] = 521, + [593] = 519, + [594] = 552, + [595] = 595, + [596] = 596, + [597] = 597, + [598] = 598, + [599] = 599, + [600] = 600, + [601] = 601, + [602] = 602, + [603] = 603, + [604] = 602, + [605] = 603, + [606] = 606, + [607] = 607, + [608] = 608, + [609] = 609, + [610] = 610, + [611] = 611, + [612] = 612, + [613] = 613, + [614] = 614, + [615] = 615, + [616] = 616, + [617] = 617, + [618] = 618, + [619] = 619, + [620] = 620, + [621] = 621, + [622] = 622, + [623] = 623, + [624] = 624, + [625] = 625, + [626] = 626, + [627] = 627, + [628] = 628, + [629] = 629, + [630] = 630, + [631] = 631, + [632] = 632, + [633] = 633, + [634] = 634, + [635] = 635, + [636] = 636, + [637] = 637, + [638] = 638, + [639] = 639, + [640] = 640, + [641] = 641, + [642] = 642, + [643] = 630, + [644] = 644, + [645] = 645, + [646] = 646, + [647] = 647, + [648] = 647, + [649] = 649, + [650] = 650, + [651] = 651, + [652] = 652, + [653] = 653, + [654] = 651, + [655] = 645, + [656] = 656, + [657] = 656, + [658] = 653, + [659] = 659, + [660] = 646, + [661] = 650, + [662] = 662, + [663] = 662, + [664] = 659, + [665] = 652, + [666] = 649, + [667] = 667, + [668] = 668, + [669] = 669, + [670] = 669, + [671] = 671, + [672] = 672, + [673] = 669, + [674] = 667, + [675] = 668, + [676] = 669, + [677] = 599, + [678] = 598, + [679] = 679, + [680] = 680, + [681] = 681, + [682] = 682, + [683] = 683, + [684] = 630, + [685] = 685, + [686] = 682, + [687] = 687, + [688] = 688, + [689] = 599, + [690] = 690, + [691] = 679, + [692] = 681, + [693] = 693, + [694] = 679, + [695] = 695, + [696] = 680, + [697] = 695, + [698] = 698, + [699] = 690, + [700] = 682, + [701] = 688, + [702] = 680, + [703] = 695, + [704] = 681, + [705] = 690, + [706] = 687, + [707] = 698, + [708] = 687, + [709] = 683, + [710] = 687, + [711] = 682, + [712] = 679, + [713] = 600, + [714] = 690, + [715] = 715, + [716] = 693, + [717] = 681, + [718] = 688, + [719] = 683, + [720] = 598, + [721] = 695, + [722] = 680, + [723] = 698, + [724] = 688, + [725] = 672, + [726] = 683, + [727] = 671, + [728] = 698, + [729] = 693, + [730] = 693, + [731] = 662, + [732] = 649, + [733] = 652, + [734] = 659, + [735] = 647, + [736] = 609, + [737] = 653, + [738] = 651, + [739] = 645, + [740] = 630, + [741] = 646, + [742] = 600, + [743] = 656, + [744] = 610, + [745] = 650, + [746] = 662, + [747] = 651, + [748] = 748, + [749] = 330, + [750] = 653, + [751] = 652, + [752] = 649, + [753] = 647, + [754] = 667, + [755] = 668, + [756] = 645, + [757] = 659, + [758] = 609, + [759] = 759, + [760] = 760, + [761] = 646, + [762] = 449, + [763] = 656, + [764] = 334, + [765] = 475, + [766] = 650, + [767] = 767, + [768] = 441, + [769] = 610, + [770] = 431, + [771] = 626, + [772] = 639, + [773] = 625, + [774] = 624, + [775] = 637, + [776] = 620, + [777] = 623, + [778] = 617, + [779] = 475, + [780] = 622, + [781] = 629, + [782] = 632, + [783] = 615, + [784] = 627, + [785] = 628, + [786] = 671, + [787] = 672, + [788] = 631, + [789] = 441, + [790] = 634, + [791] = 635, + [792] = 633, + [793] = 613, + [794] = 618, + [795] = 612, + [796] = 640, + [797] = 642, + [798] = 667, + [799] = 621, + [800] = 641, + [801] = 668, + [802] = 644, + [803] = 619, + [804] = 611, + [805] = 638, + [806] = 431, + [807] = 616, + [808] = 614, + [809] = 634, + [810] = 220, + [811] = 642, + [812] = 759, + [813] = 626, + [814] = 625, + [815] = 624, + [816] = 623, + [817] = 611, + [818] = 622, + [819] = 637, + [820] = 621, + [821] = 620, + [822] = 219, + [823] = 616, + [824] = 614, + [825] = 629, + [826] = 641, + [827] = 632, + [828] = 638, + [829] = 227, + [830] = 644, + [831] = 613, + [832] = 618, + [833] = 631, + [834] = 223, + [835] = 640, + [836] = 221, + [837] = 760, + [838] = 639, + [839] = 612, + [840] = 627, + [841] = 617, + [842] = 628, + [843] = 615, + [844] = 218, + [845] = 226, + [846] = 619, + [847] = 633, + [848] = 635, + [849] = 849, + [850] = 850, + [851] = 851, + [852] = 849, + [853] = 853, + [854] = 854, + [855] = 855, + [856] = 856, + [857] = 857, + [858] = 858, + [859] = 859, + [860] = 860, + [861] = 861, + [862] = 862, + [863] = 863, + [864] = 864, + [865] = 865, + [866] = 866, + [867] = 867, + [868] = 868, + [869] = 868, + [870] = 870, + [871] = 870, + [872] = 872, + [873] = 873, + [874] = 874, + [875] = 875, + [876] = 876, + [877] = 868, + [878] = 870, + [879] = 879, + [880] = 880, + [881] = 870, + [882] = 882, + [883] = 868, + [884] = 884, + [885] = 885, + [886] = 885, + [887] = 887, + [888] = 885, + [889] = 889, + [890] = 885, + [891] = 891, + [892] = 892, + [893] = 893, + [894] = 894, + [895] = 895, + [896] = 896, + [897] = 897, + [898] = 895, + [899] = 896, + [900] = 900, + [901] = 901, + [902] = 902, + [903] = 902, + [904] = 904, + [905] = 905, + [906] = 906, + [907] = 907, + [908] = 908, + [909] = 909, + [910] = 910, + [911] = 907, + [912] = 912, + [913] = 913, + [914] = 914, + [915] = 915, + [916] = 916, + [917] = 917, + [918] = 907, + [919] = 909, + [920] = 920, + [921] = 914, + [922] = 916, + [923] = 908, + [924] = 912, + [925] = 925, + [926] = 926, + [927] = 920, + [928] = 926, + [929] = 929, + [930] = 930, + [931] = 930, + [932] = 932, + [933] = 933, + [934] = 934, + [935] = 932, + [936] = 936, + [937] = 937, + [938] = 936, + [939] = 939, + [940] = 940, + [941] = 932, + [942] = 936, + [943] = 943, + [944] = 934, + [945] = 930, + [946] = 940, + [947] = 947, + [948] = 948, + [949] = 936, + [950] = 934, + [951] = 951, + [952] = 934, + [953] = 940, + [954] = 954, + [955] = 955, + [956] = 956, + [957] = 957, + [958] = 958, + [959] = 959, + [960] = 960, + [961] = 961, + [962] = 962, + [963] = 963, + [964] = 964, + [965] = 965, + [966] = 966, + [967] = 904, + [968] = 968, + [969] = 969, + [970] = 970, + [971] = 971, + [972] = 972, + [973] = 973, + [974] = 914, + [975] = 975, + [976] = 901, + [977] = 977, + [978] = 978, + [979] = 979, + [980] = 926, + [981] = 981, + [982] = 982, + [983] = 983, + [984] = 984, + [985] = 985, + [986] = 986, + [987] = 987, + [988] = 988, + [989] = 989, + [990] = 990, + [991] = 965, + [992] = 909, + [993] = 993, + [994] = 994, + [995] = 995, + [996] = 996, + [997] = 912, + [998] = 998, + [999] = 999, + [1000] = 916, + [1001] = 920, + [1002] = 996, + [1003] = 983, + [1004] = 1004, + [1005] = 1005, + [1006] = 1006, + [1007] = 908, + [1008] = 1008, + [1009] = 900, + [1010] = 1010, + [1011] = 1011, + [1012] = 1012, + [1013] = 1013, + [1014] = 929, + [1015] = 900, + [1016] = 1016, + [1017] = 1017, + [1018] = 1018, + [1019] = 1019, + [1020] = 1020, + [1021] = 1021, + [1022] = 1022, + [1023] = 1023, + [1024] = 1024, + [1025] = 926, + [1026] = 1026, + [1027] = 912, + [1028] = 914, + [1029] = 920, + [1030] = 916, + [1031] = 1031, + [1032] = 908, + [1033] = 1033, + [1034] = 1034, + [1035] = 909, + [1036] = 933, + [1037] = 1037, + [1038] = 1038, + [1039] = 1039, + [1040] = 1021, + [1041] = 1041, + [1042] = 901, + [1043] = 1043, + [1044] = 1044, + [1045] = 1045, + [1046] = 1046, + [1047] = 1021, + [1048] = 947, + [1049] = 1038, + [1050] = 1050, + [1051] = 904, + [1052] = 1038, + [1053] = 1053, + [1054] = 948, + [1055] = 1055, + [1056] = 1056, + [1057] = 906, + [1058] = 1058, + [1059] = 1059, + [1060] = 1060, + [1061] = 1061, + [1062] = 1062, + [1063] = 1063, + [1064] = 1064, + [1065] = 1065, + [1066] = 1066, + [1067] = 1067, + [1068] = 1058, + [1069] = 1069, + [1070] = 1070, + [1071] = 1071, + [1072] = 1072, + [1073] = 1073, + [1074] = 1074, + [1075] = 1059, + [1076] = 1076, + [1077] = 1077, + [1078] = 1078, + [1079] = 1079, + [1080] = 1079, + [1081] = 1063, + [1082] = 1022, + [1083] = 1083, + [1084] = 1084, + [1085] = 1070, + [1086] = 1086, + [1087] = 1087, + [1088] = 1061, + [1089] = 1089, + [1090] = 1090, + [1091] = 1091, + [1092] = 964, + [1093] = 1093, + [1094] = 939, + [1095] = 1095, + [1096] = 1005, + [1097] = 1097, + [1098] = 1098, + [1099] = 1099, + [1100] = 1100, + [1101] = 917, + [1102] = 1039, + [1103] = 1103, + [1104] = 1104, + [1105] = 1105, + [1106] = 1106, + [1107] = 1107, + [1108] = 1107, + [1109] = 1109, + [1110] = 1110, + [1111] = 1111, + [1112] = 985, + [1113] = 1113, + [1114] = 1114, + [1115] = 1115, + [1116] = 1116, + [1117] = 1117, + [1118] = 1118, + [1119] = 1119, + [1120] = 1097, + [1121] = 1121, + [1122] = 1122, + [1123] = 1104, + [1124] = 1124, + [1125] = 1125, + [1126] = 1126, + [1127] = 1127, + [1128] = 1128, + [1129] = 1129, + [1130] = 1130, + [1131] = 1131, + [1132] = 1128, + [1133] = 1133, + [1134] = 1134, + [1135] = 1135, + [1136] = 1136, + [1137] = 1137, + [1138] = 1138, + [1139] = 1139, + [1140] = 1140, + [1141] = 1141, + [1142] = 1095, + [1143] = 1143, + [1144] = 1144, + [1145] = 1145, + [1146] = 1146, + [1147] = 1093, + [1148] = 1148, + [1149] = 1149, + [1150] = 1150, + [1151] = 1141, + [1152] = 1149, + [1153] = 1140, + [1154] = 1154, + [1155] = 1155, + [1156] = 1156, + [1157] = 1134, + [1158] = 1135, + [1159] = 1136, + [1160] = 1160, + [1161] = 1109, + [1162] = 1162, + [1163] = 1163, + [1164] = 1164, + [1165] = 1165, + [1166] = 1166, + [1167] = 1167, + [1168] = 913, + [1169] = 1149, + [1170] = 1170, + [1171] = 1171, + [1172] = 1172, + [1173] = 1173, + [1174] = 1174, + [1175] = 1175, + [1176] = 1131, + [1177] = 1177, + [1178] = 1178, + [1179] = 1129, + [1180] = 1180, + [1181] = 1173, + [1182] = 1118, + [1183] = 1183, + [1184] = 1180, + [1185] = 1185, + [1186] = 1149, + [1187] = 1023, + [1188] = 1188, + [1189] = 1189, + [1190] = 1190, + [1191] = 1191, + [1192] = 1192, + [1193] = 1193, + [1194] = 1194, + [1195] = 1195, + [1196] = 1196, + [1197] = 1197, + [1198] = 1198, + [1199] = 1199, + [1200] = 1200, + [1201] = 1201, + [1202] = 1202, + [1203] = 1203, + [1204] = 1204, + [1205] = 1164, + [1206] = 1163, + [1207] = 1207, + [1208] = 1208, + [1209] = 1209, + [1210] = 1210, + [1211] = 1211, + [1212] = 1212, + [1213] = 1213, + [1214] = 1209, + [1215] = 1215, + [1216] = 1216, + [1217] = 282, + [1218] = 1218, + [1219] = 1219, + [1220] = 1220, + [1221] = 1221, + [1222] = 1074, + [1223] = 1223, + [1224] = 1210, + [1225] = 1225, + [1226] = 1226, + [1227] = 1227, + [1228] = 1228, + [1229] = 1229, + [1230] = 1230, + [1231] = 1194, + [1232] = 1232, + [1233] = 308, + [1234] = 1234, + [1235] = 1235, + [1236] = 1236, + [1237] = 1194, + [1238] = 1209, + [1239] = 1239, + [1240] = 1189, + [1241] = 1194, + [1242] = 1242, + [1243] = 1242, + [1244] = 1209, + [1245] = 1183, + [1246] = 1194, + [1247] = 1234, + [1248] = 1209, + [1249] = 1204, + [1250] = 1250, + [1251] = 1219, + [1252] = 1252, + [1253] = 1060, + [1254] = 1194, + [1255] = 1239, + [1256] = 1256, + [1257] = 1257, + [1258] = 1220, + [1259] = 1259, + [1260] = 1260, + [1261] = 1209, + [1262] = 1262, + [1263] = 1263, + [1264] = 1264, + [1265] = 281, + [1266] = 1266, + [1267] = 1267, + [1268] = 1268, + [1269] = 1269, + [1270] = 1270, + [1271] = 1196, + [1272] = 1203, + [1273] = 1228, + [1274] = 1230, + [1275] = 1275, + [1276] = 1197, + [1277] = 1264, + [1278] = 1260, + [1279] = 1230, + [1280] = 1228, + [1281] = 1281, + [1282] = 1203, + [1283] = 1196, + [1284] = 1284, + [1285] = 1264, + [1286] = 1221, + [1287] = 1287, + [1288] = 1288, + [1289] = 1289, + [1290] = 1290, + [1291] = 609, + [1292] = 1292, + [1293] = 1293, + [1294] = 1220, + [1295] = 1275, + [1296] = 1296, + [1297] = 1256, + [1298] = 1239, + [1299] = 1299, + [1300] = 1234, + [1301] = 1301, + [1302] = 1242, + [1303] = 1303, + [1304] = 287, + [1305] = 1305, + [1306] = 1199, + [1307] = 1069, + [1308] = 1308, + [1309] = 1194, + [1310] = 1310, + [1311] = 1225, + [1312] = 1312, + [1313] = 1219, + [1314] = 1314, + [1315] = 1284, + [1316] = 1316, + [1317] = 1312, + [1318] = 610, + [1319] = 1209, + [1320] = 1320, + [1321] = 1143, + [1322] = 1322, + [1323] = 1323, + [1324] = 288, + [1325] = 1325, + [1326] = 1326, + [1327] = 1225, + [1328] = 1256, + [1329] = 1329, + [1330] = 1330, + [1331] = 1331, + [1332] = 1067, + [1333] = 1333, + [1334] = 1229, + [1335] = 1335, + [1336] = 1336, + [1337] = 1337, + [1338] = 1338, + [1339] = 1177, + [1340] = 1340, + [1341] = 1341, + [1342] = 1342, + [1343] = 1343, + [1344] = 1344, + [1345] = 1345, + [1346] = 1346, + [1347] = 1267, + [1348] = 1041, + [1349] = 1349, + [1350] = 1350, + [1351] = 1351, + [1352] = 1352, + [1353] = 1353, + [1354] = 1354, + [1355] = 1355, + [1356] = 1356, + [1357] = 1357, + [1358] = 1354, + [1359] = 1359, + [1360] = 1360, + [1361] = 1361, + [1362] = 1362, + [1363] = 1363, + [1364] = 1364, + [1365] = 1365, + [1366] = 1360, + [1367] = 1367, + [1368] = 1368, + [1369] = 1369, + [1370] = 1356, + [1371] = 1371, + [1372] = 1344, + [1373] = 1373, + [1374] = 1374, + [1375] = 1375, + [1376] = 1375, + [1377] = 1363, + [1378] = 1371, + [1379] = 1379, + [1380] = 1380, + [1381] = 1381, + [1382] = 1226, + [1383] = 1383, + [1384] = 1384, + [1385] = 1385, + [1386] = 1386, + [1387] = 1387, + [1388] = 1388, + [1389] = 1389, + [1390] = 1390, + [1391] = 1391, + [1392] = 1392, + [1393] = 1393, + [1394] = 1394, + [1395] = 1395, + [1396] = 1396, + [1397] = 1198, + [1398] = 1398, + [1399] = 1399, + [1400] = 1400, + [1401] = 1401, + [1402] = 1402, + [1403] = 1403, + [1404] = 1404, + [1405] = 1405, + [1406] = 1406, + [1407] = 1407, + [1408] = 1408, + [1409] = 1409, + [1410] = 1405, + [1411] = 1411, + [1412] = 1412, + [1413] = 1413, + [1414] = 1414, + [1415] = 1415, + [1416] = 1416, + [1417] = 1417, + [1418] = 1418, + [1419] = 1419, + [1420] = 1420, + [1421] = 1421, + [1422] = 1422, + [1423] = 1423, + [1424] = 1424, + [1425] = 1425, + [1426] = 1426, + [1427] = 1427, + [1428] = 1428, + [1429] = 1407, + [1430] = 1430, + [1431] = 1431, + [1432] = 1414, + [1433] = 1411, + [1434] = 1434, + [1435] = 1435, + [1436] = 1430, + [1437] = 1407, + [1438] = 1405, + [1439] = 1411, + [1440] = 1440, + [1441] = 1441, + [1442] = 1417, + [1443] = 1443, + [1444] = 1444, + [1445] = 1445, + [1446] = 1430, + [1447] = 1414, + [1448] = 1448, + [1449] = 1448, + [1450] = 1443, + [1451] = 1451, + [1452] = 1452, + [1453] = 1427, + [1454] = 1454, + [1455] = 1455, + [1456] = 1456, + [1457] = 1457, + [1458] = 1427, + [1459] = 1422, + [1460] = 1460, + [1461] = 1460, + [1462] = 1462, + [1463] = 1463, + [1464] = 1417, + [1465] = 1465, + [1466] = 1466, + [1467] = 1467, + [1468] = 1435, + [1469] = 1462, + [1470] = 1470, + [1471] = 1471, + [1472] = 1472, + [1473] = 1467, + [1474] = 1451, + [1475] = 1431, + [1476] = 1470, + [1477] = 1445, + [1478] = 1478, + [1479] = 1420, + [1480] = 1480, + [1481] = 1481, + [1482] = 1428, + [1483] = 1483, + [1484] = 1431, + [1485] = 1483, + [1486] = 1486, + [1487] = 1487, + [1488] = 1488, + [1489] = 1489, + [1490] = 1490, + [1491] = 1478, + [1492] = 1492, + [1493] = 1452, + [1494] = 1430, + [1495] = 1495, + [1496] = 1496, + [1497] = 1497, + [1498] = 1498, + [1499] = 1463, + [1500] = 1448, + [1501] = 1481, + [1502] = 1502, + [1503] = 1467, + [1504] = 1462, + [1505] = 1480, + [1506] = 1471, + [1507] = 1465, + [1508] = 1498, + [1509] = 1509, + [1510] = 1510, + [1511] = 1511, + [1512] = 1495, + [1513] = 1460, + [1514] = 1514, + [1515] = 1409, + [1516] = 1511, + [1517] = 1514, + [1518] = 1472, + [1519] = 1454, + [1520] = 1488, + [1521] = 1521, + [1522] = 1421, + [1523] = 1425, + [1524] = 1427, +}; + +static inline bool sym_identifier_character_set_1(int32_t c) { + return (c < 43514 + ? (c < 4193 + ? (c < 2707 + ? (c < 1994 + ? (c < 931 + ? (c < 748 + ? (c < 192 + ? (c < 170 + ? (c < 'a' + ? (c >= 'A' && c <= '_') + : c <= 'z') + : (c <= 170 || (c < 186 + ? c == 181 + : c <= 186))) + : (c <= 214 || (c < 710 + ? (c < 248 + ? (c >= 216 && c <= 246) + : c <= 705) + : (c <= 721 || (c >= 736 && c <= 740))))) + : (c <= 748 || (c < 895 + ? (c < 886 + ? (c < 880 + ? c == 750 + : c <= 884) + : (c <= 887 || (c >= 891 && c <= 893))) + : (c <= 895 || (c < 908 + ? (c < 904 + ? c == 902 + : c <= 906) + : (c <= 908 || (c >= 910 && c <= 929))))))) + : (c <= 1013 || (c < 1649 + ? (c < 1376 + ? (c < 1329 + ? (c < 1162 + ? (c >= 1015 && c <= 1153) + : c <= 1327) + : (c <= 1366 || c == 1369)) + : (c <= 1416 || (c < 1568 + ? (c < 1519 + ? (c >= 1488 && c <= 1514) + : c <= 1522) + : (c <= 1610 || (c >= 1646 && c <= 1647))))) + : (c <= 1747 || (c < 1791 + ? (c < 1774 + ? (c < 1765 + ? c == 1749 + : c <= 1766) + : (c <= 1775 || (c >= 1786 && c <= 1788))) + : (c <= 1791 || (c < 1869 + ? (c < 1810 + ? c == 1808 + : c <= 1839) + : (c <= 1957 || c == 1969)))))))) + : (c <= 2026 || (c < 2482 + ? (c < 2208 + ? (c < 2088 + ? (c < 2048 + ? (c < 2042 + ? (c >= 2036 && c <= 2037) + : c <= 2042) + : (c <= 2069 || (c < 2084 + ? c == 2074 + : c <= 2084))) + : (c <= 2088 || (c < 2160 + ? (c < 2144 + ? (c >= 2112 && c <= 2136) + : c <= 2154) + : (c <= 2183 || (c >= 2185 && c <= 2190))))) + : (c <= 2249 || (c < 2417 + ? (c < 2384 + ? (c < 2365 + ? (c >= 2308 && c <= 2361) + : c <= 2365) + : (c <= 2384 || (c >= 2392 && c <= 2401))) + : (c <= 2432 || (c < 2451 + ? (c < 2447 + ? (c >= 2437 && c <= 2444) + : c <= 2448) + : (c <= 2472 || (c >= 2474 && c <= 2480))))))) + : (c <= 2482 || (c < 2579 + ? (c < 2527 + ? (c < 2510 + ? (c < 2493 + ? (c >= 2486 && c <= 2489) + : c <= 2493) + : (c <= 2510 || (c >= 2524 && c <= 2525))) + : (c <= 2529 || (c < 2565 + ? (c < 2556 + ? (c >= 2544 && c <= 2545) + : c <= 2556) + : (c <= 2570 || (c >= 2575 && c <= 2576))))) + : (c <= 2600 || (c < 2649 + ? (c < 2613 + ? (c < 2610 + ? (c >= 2602 && c <= 2608) + : c <= 2611) + : (c <= 2614 || (c >= 2616 && c <= 2617))) + : (c <= 2652 || (c < 2693 + ? (c < 2674 + ? c == 2654 + : c <= 2676) + : (c <= 2701 || (c >= 2703 && c <= 2705))))))))))) + : (c <= 2728 || (c < 3242 + ? (c < 2962 + ? (c < 2858 + ? (c < 2784 + ? (c < 2741 + ? (c < 2738 + ? (c >= 2730 && c <= 2736) + : c <= 2739) + : (c <= 2745 || (c < 2768 + ? c == 2749 + : c <= 2768))) + : (c <= 2785 || (c < 2831 + ? (c < 2821 + ? c == 2809 + : c <= 2828) + : (c <= 2832 || (c >= 2835 && c <= 2856))))) + : (c <= 2864 || (c < 2911 + ? (c < 2877 + ? (c < 2869 + ? (c >= 2866 && c <= 2867) + : c <= 2873) + : (c <= 2877 || (c >= 2908 && c <= 2909))) + : (c <= 2913 || (c < 2949 + ? (c < 2947 + ? c == 2929 + : c <= 2947) + : (c <= 2954 || (c >= 2958 && c <= 2960))))))) + : (c <= 2965 || (c < 3090 + ? (c < 2984 + ? (c < 2974 + ? (c < 2972 + ? (c >= 2969 && c <= 2970) + : c <= 2972) + : (c <= 2975 || (c >= 2979 && c <= 2980))) + : (c <= 2986 || (c < 3077 + ? (c < 3024 + ? (c >= 2990 && c <= 3001) + : c <= 3024) + : (c <= 3084 || (c >= 3086 && c <= 3088))))) + : (c <= 3112 || (c < 3168 + ? (c < 3160 + ? (c < 3133 + ? (c >= 3114 && c <= 3129) + : c <= 3133) + : (c <= 3162 || c == 3165)) + : (c <= 3169 || (c < 3214 + ? (c < 3205 + ? c == 3200 + : c <= 3212) + : (c <= 3216 || (c >= 3218 && c <= 3240))))))))) + : (c <= 3251 || (c < 3648 + ? (c < 3412 + ? (c < 3332 + ? (c < 3293 + ? (c < 3261 + ? (c >= 3253 && c <= 3257) + : c <= 3261) + : (c <= 3294 || (c < 3313 + ? (c >= 3296 && c <= 3297) + : c <= 3314))) + : (c <= 3340 || (c < 3389 + ? (c < 3346 + ? (c >= 3342 && c <= 3344) + : c <= 3386) + : (c <= 3389 || c == 3406)))) + : (c <= 3414 || (c < 3507 + ? (c < 3461 + ? (c < 3450 + ? (c >= 3423 && c <= 3425) + : c <= 3455) + : (c <= 3478 || (c >= 3482 && c <= 3505))) + : (c <= 3515 || (c < 3585 + ? (c < 3520 + ? c == 3517 + : c <= 3526) + : (c <= 3632 || c == 3634)))))) + : (c <= 3654 || (c < 3782 + ? (c < 3749 + ? (c < 3718 + ? (c < 3716 + ? (c >= 3713 && c <= 3714) + : c <= 3716) + : (c <= 3722 || (c >= 3724 && c <= 3747))) + : (c <= 3749 || (c < 3773 + ? (c < 3762 + ? (c >= 3751 && c <= 3760) + : c <= 3762) + : (c <= 3773 || (c >= 3776 && c <= 3780))))) + : (c <= 3782 || (c < 3976 + ? (c < 3904 + ? (c < 3840 + ? (c >= 3804 && c <= 3807) + : c <= 3840) + : (c <= 3911 || (c >= 3913 && c <= 3948))) + : (c <= 3980 || (c < 4176 + ? (c < 4159 + ? (c >= 4096 && c <= 4138) + : c <= 4159) + : (c <= 4181 || (c >= 4186 && c <= 4189))))))))))))) + : (c <= 4193 || (c < 8134 + ? (c < 6176 + ? (c < 4808 + ? (c < 4688 + ? (c < 4295 + ? (c < 4213 + ? (c < 4206 + ? (c >= 4197 && c <= 4198) + : c <= 4208) + : (c <= 4225 || (c < 4256 + ? c == 4238 + : c <= 4293))) + : (c <= 4295 || (c < 4348 + ? (c < 4304 + ? c == 4301 + : c <= 4346) + : (c <= 4680 || (c >= 4682 && c <= 4685))))) + : (c <= 4694 || (c < 4752 + ? (c < 4704 + ? (c < 4698 + ? c == 4696 + : c <= 4701) + : (c <= 4744 || (c >= 4746 && c <= 4749))) + : (c <= 4784 || (c < 4800 + ? (c < 4792 + ? (c >= 4786 && c <= 4789) + : c <= 4798) + : (c <= 4800 || (c >= 4802 && c <= 4805))))))) + : (c <= 4822 || (c < 5792 + ? (c < 5024 + ? (c < 4888 + ? (c < 4882 + ? (c >= 4824 && c <= 4880) + : c <= 4885) + : (c <= 4954 || (c >= 4992 && c <= 5007))) + : (c <= 5109 || (c < 5743 + ? (c < 5121 + ? (c >= 5112 && c <= 5117) + : c <= 5740) + : (c <= 5759 || (c >= 5761 && c <= 5786))))) + : (c <= 5866 || (c < 5984 + ? (c < 5919 + ? (c < 5888 + ? (c >= 5870 && c <= 5880) + : c <= 5905) + : (c <= 5937 || (c >= 5952 && c <= 5969))) + : (c <= 5996 || (c < 6103 + ? (c < 6016 + ? (c >= 5998 && c <= 6000) + : c <= 6067) + : (c <= 6103 || c == 6108)))))))) + : (c <= 6264 || (c < 7312 + ? (c < 6823 + ? (c < 6512 + ? (c < 6320 + ? (c < 6314 + ? (c >= 6272 && c <= 6312) + : c <= 6314) + : (c <= 6389 || (c < 6480 + ? (c >= 6400 && c <= 6430) + : c <= 6509))) + : (c <= 6516 || (c < 6656 + ? (c < 6576 + ? (c >= 6528 && c <= 6571) + : c <= 6601) + : (c <= 6678 || (c >= 6688 && c <= 6740))))) + : (c <= 6823 || (c < 7098 + ? (c < 7043 + ? (c < 6981 + ? (c >= 6917 && c <= 6963) + : c <= 6988) + : (c <= 7072 || (c >= 7086 && c <= 7087))) + : (c <= 7141 || (c < 7258 + ? (c < 7245 + ? (c >= 7168 && c <= 7203) + : c <= 7247) + : (c <= 7293 || (c >= 7296 && c <= 7304))))))) + : (c <= 7354 || (c < 8008 + ? (c < 7418 + ? (c < 7406 + ? (c < 7401 + ? (c >= 7357 && c <= 7359) + : c <= 7404) + : (c <= 7411 || (c >= 7413 && c <= 7414))) + : (c <= 7418 || (c < 7960 + ? (c < 7680 + ? (c >= 7424 && c <= 7615) + : c <= 7957) + : (c <= 7965 || (c >= 7968 && c <= 8005))))) + : (c <= 8013 || (c < 8031 + ? (c < 8027 + ? (c < 8025 + ? (c >= 8016 && c <= 8023) + : c <= 8025) + : (c <= 8027 || c == 8029)) + : (c <= 8061 || (c < 8126 + ? (c < 8118 + ? (c >= 8064 && c <= 8116) + : c <= 8124) + : (c <= 8126 || (c >= 8130 && c <= 8132))))))))))) + : (c <= 8140 || (c < 12337 + ? (c < 8544 + ? (c < 8458 + ? (c < 8305 + ? (c < 8160 + ? (c < 8150 + ? (c >= 8144 && c <= 8147) + : c <= 8155) + : (c <= 8172 || (c < 8182 + ? (c >= 8178 && c <= 8180) + : c <= 8188))) + : (c <= 8305 || (c < 8450 + ? (c < 8336 + ? c == 8319 + : c <= 8348) + : (c <= 8450 || c == 8455)))) + : (c <= 8467 || (c < 8488 + ? (c < 8484 + ? (c < 8472 + ? c == 8469 + : c <= 8477) + : (c <= 8484 || c == 8486)) + : (c <= 8488 || (c < 8517 + ? (c < 8508 + ? (c >= 8490 && c <= 8505) + : c <= 8511) + : (c <= 8521 || c == 8526)))))) + : (c <= 8584 || (c < 11680 + ? (c < 11559 + ? (c < 11506 + ? (c < 11499 + ? (c >= 11264 && c <= 11492) + : c <= 11502) + : (c <= 11507 || (c >= 11520 && c <= 11557))) + : (c <= 11559 || (c < 11631 + ? (c < 11568 + ? c == 11565 + : c <= 11623) + : (c <= 11631 || (c >= 11648 && c <= 11670))))) + : (c <= 11686 || (c < 11720 + ? (c < 11704 + ? (c < 11696 + ? (c >= 11688 && c <= 11694) + : c <= 11702) + : (c <= 11710 || (c >= 11712 && c <= 11718))) + : (c <= 11726 || (c < 12293 + ? (c < 11736 + ? (c >= 11728 && c <= 11734) + : c <= 11742) + : (c <= 12295 || (c >= 12321 && c <= 12329))))))))) + : (c <= 12341 || (c < 42891 + ? (c < 19968 + ? (c < 12549 + ? (c < 12445 + ? (c < 12353 + ? (c >= 12344 && c <= 12348) + : c <= 12438) + : (c <= 12447 || (c < 12540 + ? (c >= 12449 && c <= 12538) + : c <= 12543))) + : (c <= 12591 || (c < 12784 + ? (c < 12704 + ? (c >= 12593 && c <= 12686) + : c <= 12735) + : (c <= 12799 || (c >= 13312 && c <= 19903))))) + : (c <= 42124 || (c < 42560 + ? (c < 42512 + ? (c < 42240 + ? (c >= 42192 && c <= 42237) + : c <= 42508) + : (c <= 42527 || (c >= 42538 && c <= 42539))) + : (c <= 42606 || (c < 42775 + ? (c < 42656 + ? (c >= 42623 && c <= 42653) + : c <= 42735) + : (c <= 42783 || (c >= 42786 && c <= 42888))))))) + : (c <= 42954 || (c < 43250 + ? (c < 43011 + ? (c < 42965 + ? (c < 42963 + ? (c >= 42960 && c <= 42961) + : c <= 42963) + : (c <= 42969 || (c >= 42994 && c <= 43009))) + : (c <= 43013 || (c < 43072 + ? (c < 43020 + ? (c >= 43015 && c <= 43018) + : c <= 43042) + : (c <= 43123 || (c >= 43138 && c <= 43187))))) + : (c <= 43255 || (c < 43360 + ? (c < 43274 + ? (c < 43261 + ? c == 43259 + : c <= 43262) + : (c <= 43301 || (c >= 43312 && c <= 43334))) + : (c <= 43388 || (c < 43488 + ? (c < 43471 + ? (c >= 43396 && c <= 43442) + : c <= 43471) + : (c <= 43492 || (c >= 43494 && c <= 43503))))))))))))))) + : (c <= 43518 || (c < 70727 + ? (c < 66956 + ? (c < 64914 + ? (c < 43868 + ? (c < 43714 + ? (c < 43646 + ? (c < 43588 + ? (c < 43584 + ? (c >= 43520 && c <= 43560) + : c <= 43586) + : (c <= 43595 || (c < 43642 + ? (c >= 43616 && c <= 43638) + : c <= 43642))) + : (c <= 43695 || (c < 43705 + ? (c < 43701 + ? c == 43697 + : c <= 43702) + : (c <= 43709 || c == 43712)))) + : (c <= 43714 || (c < 43785 + ? (c < 43762 + ? (c < 43744 + ? (c >= 43739 && c <= 43741) + : c <= 43754) + : (c <= 43764 || (c >= 43777 && c <= 43782))) + : (c <= 43790 || (c < 43816 + ? (c < 43808 + ? (c >= 43793 && c <= 43798) + : c <= 43814) + : (c <= 43822 || (c >= 43824 && c <= 43866))))))) + : (c <= 43881 || (c < 64287 + ? (c < 63744 + ? (c < 55216 + ? (c < 44032 + ? (c >= 43888 && c <= 44002) + : c <= 55203) + : (c <= 55238 || (c >= 55243 && c <= 55291))) + : (c <= 64109 || (c < 64275 + ? (c < 64256 + ? (c >= 64112 && c <= 64217) + : c <= 64262) + : (c <= 64279 || c == 64285)))) + : (c <= 64296 || (c < 64323 + ? (c < 64318 + ? (c < 64312 + ? (c >= 64298 && c <= 64310) + : c <= 64316) + : (c <= 64318 || (c >= 64320 && c <= 64321))) + : (c <= 64324 || (c < 64612 + ? (c < 64467 + ? (c >= 64326 && c <= 64433) + : c <= 64605) + : (c <= 64829 || (c >= 64848 && c <= 64911))))))))) + : (c <= 64967 || (c < 65599 + ? (c < 65382 + ? (c < 65147 + ? (c < 65139 + ? (c < 65137 + ? (c >= 65008 && c <= 65017) + : c <= 65137) + : (c <= 65139 || (c < 65145 + ? c == 65143 + : c <= 65145))) + : (c <= 65147 || (c < 65313 + ? (c < 65151 + ? c == 65149 + : c <= 65276) + : (c <= 65338 || (c >= 65345 && c <= 65370))))) + : (c <= 65437 || (c < 65498 + ? (c < 65482 + ? (c < 65474 + ? (c >= 65440 && c <= 65470) + : c <= 65479) + : (c <= 65487 || (c >= 65490 && c <= 65495))) + : (c <= 65500 || (c < 65576 + ? (c < 65549 + ? (c >= 65536 && c <= 65547) + : c <= 65574) + : (c <= 65594 || (c >= 65596 && c <= 65597))))))) + : (c <= 65613 || (c < 66464 + ? (c < 66208 + ? (c < 65856 + ? (c < 65664 + ? (c >= 65616 && c <= 65629) + : c <= 65786) + : (c <= 65908 || (c >= 66176 && c <= 66204))) + : (c <= 66256 || (c < 66384 + ? (c < 66349 + ? (c >= 66304 && c <= 66335) + : c <= 66378) + : (c <= 66421 || (c >= 66432 && c <= 66461))))) + : (c <= 66499 || (c < 66776 + ? (c < 66560 + ? (c < 66513 + ? (c >= 66504 && c <= 66511) + : c <= 66517) + : (c <= 66717 || (c >= 66736 && c <= 66771))) + : (c <= 66811 || (c < 66928 + ? (c < 66864 + ? (c >= 66816 && c <= 66855) + : c <= 66915) + : (c <= 66938 || (c >= 66940 && c <= 66954))))))))))) + : (c <= 66962 || (c < 68864 + ? (c < 67828 + ? (c < 67506 + ? (c < 67072 + ? (c < 66979 + ? (c < 66967 + ? (c >= 66964 && c <= 66965) + : c <= 66977) + : (c <= 66993 || (c < 67003 + ? (c >= 66995 && c <= 67001) + : c <= 67004))) + : (c <= 67382 || (c < 67456 + ? (c < 67424 + ? (c >= 67392 && c <= 67413) + : c <= 67431) + : (c <= 67461 || (c >= 67463 && c <= 67504))))) + : (c <= 67514 || (c < 67644 + ? (c < 67594 + ? (c < 67592 + ? (c >= 67584 && c <= 67589) + : c <= 67592) + : (c <= 67637 || (c >= 67639 && c <= 67640))) + : (c <= 67644 || (c < 67712 + ? (c < 67680 + ? (c >= 67647 && c <= 67669) + : c <= 67702) + : (c <= 67742 || (c >= 67808 && c <= 67826))))))) + : (c <= 67829 || (c < 68224 + ? (c < 68096 + ? (c < 67968 + ? (c < 67872 + ? (c >= 67840 && c <= 67861) + : c <= 67897) + : (c <= 68023 || (c >= 68030 && c <= 68031))) + : (c <= 68096 || (c < 68121 + ? (c < 68117 + ? (c >= 68112 && c <= 68115) + : c <= 68119) + : (c <= 68149 || (c >= 68192 && c <= 68220))))) + : (c <= 68252 || (c < 68448 + ? (c < 68352 + ? (c < 68297 + ? (c >= 68288 && c <= 68295) + : c <= 68324) + : (c <= 68405 || (c >= 68416 && c <= 68437))) + : (c <= 68466 || (c < 68736 + ? (c < 68608 + ? (c >= 68480 && c <= 68497) + : c <= 68680) + : (c <= 68786 || (c >= 68800 && c <= 68850))))))))) + : (c <= 68899 || (c < 70106 + ? (c < 69749 + ? (c < 69488 + ? (c < 69376 + ? (c < 69296 + ? (c >= 69248 && c <= 69289) + : c <= 69297) + : (c <= 69404 || (c < 69424 + ? c == 69415 + : c <= 69445))) + : (c <= 69505 || (c < 69635 + ? (c < 69600 + ? (c >= 69552 && c <= 69572) + : c <= 69622) + : (c <= 69687 || (c >= 69745 && c <= 69746))))) + : (c <= 69749 || (c < 69959 + ? (c < 69891 + ? (c < 69840 + ? (c >= 69763 && c <= 69807) + : c <= 69864) + : (c <= 69926 || c == 69956)) + : (c <= 69959 || (c < 70019 + ? (c < 70006 + ? (c >= 69968 && c <= 70002) + : c <= 70006) + : (c <= 70066 || (c >= 70081 && c <= 70084))))))) + : (c <= 70106 || (c < 70405 + ? (c < 70280 + ? (c < 70163 + ? (c < 70144 + ? c == 70108 + : c <= 70161) + : (c <= 70187 || (c >= 70272 && c <= 70278))) + : (c <= 70280 || (c < 70303 + ? (c < 70287 + ? (c >= 70282 && c <= 70285) + : c <= 70301) + : (c <= 70312 || (c >= 70320 && c <= 70366))))) + : (c <= 70412 || (c < 70453 + ? (c < 70442 + ? (c < 70419 + ? (c >= 70415 && c <= 70416) + : c <= 70440) + : (c <= 70448 || (c >= 70450 && c <= 70451))) + : (c <= 70457 || (c < 70493 + ? (c < 70480 + ? c == 70461 + : c <= 70480) + : (c <= 70497 || (c >= 70656 && c <= 70708))))))))))))) + : (c <= 70730 || (c < 119894 + ? (c < 73056 + ? (c < 72001 + ? (c < 71424 + ? (c < 71128 + ? (c < 70852 + ? (c < 70784 + ? (c >= 70751 && c <= 70753) + : c <= 70831) + : (c <= 70853 || (c < 71040 + ? c == 70855 + : c <= 71086))) + : (c <= 71131 || (c < 71296 + ? (c < 71236 + ? (c >= 71168 && c <= 71215) + : c <= 71236) + : (c <= 71338 || c == 71352)))) + : (c <= 71450 || (c < 71945 + ? (c < 71840 + ? (c < 71680 + ? (c >= 71488 && c <= 71494) + : c <= 71723) + : (c <= 71903 || (c >= 71935 && c <= 71942))) + : (c <= 71945 || (c < 71960 + ? (c < 71957 + ? (c >= 71948 && c <= 71955) + : c <= 71958) + : (c <= 71983 || c == 71999)))))) + : (c <= 72001 || (c < 72349 + ? (c < 72192 + ? (c < 72161 + ? (c < 72106 + ? (c >= 72096 && c <= 72103) + : c <= 72144) + : (c <= 72161 || c == 72163)) + : (c <= 72192 || (c < 72272 + ? (c < 72250 + ? (c >= 72203 && c <= 72242) + : c <= 72250) + : (c <= 72272 || (c >= 72284 && c <= 72329))))) + : (c <= 72349 || (c < 72818 + ? (c < 72714 + ? (c < 72704 + ? (c >= 72368 && c <= 72440) + : c <= 72712) + : (c <= 72750 || c == 72768)) + : (c <= 72847 || (c < 72971 + ? (c < 72968 + ? (c >= 72960 && c <= 72966) + : c <= 72969) + : (c <= 73008 || c == 73030)))))))) + : (c <= 73061 || (c < 93952 + ? (c < 82944 + ? (c < 73728 + ? (c < 73112 + ? (c < 73066 + ? (c >= 73063 && c <= 73064) + : c <= 73097) + : (c <= 73112 || (c < 73648 + ? (c >= 73440 && c <= 73458) + : c <= 73648))) + : (c <= 74649 || (c < 77712 + ? (c < 74880 + ? (c >= 74752 && c <= 74862) + : c <= 75075) + : (c <= 77808 || (c >= 77824 && c <= 78894))))) + : (c <= 83526 || (c < 92928 + ? (c < 92784 + ? (c < 92736 + ? (c >= 92160 && c <= 92728) + : c <= 92766) + : (c <= 92862 || (c >= 92880 && c <= 92909))) + : (c <= 92975 || (c < 93053 + ? (c < 93027 + ? (c >= 92992 && c <= 92995) + : c <= 93047) + : (c <= 93071 || (c >= 93760 && c <= 93823))))))) + : (c <= 94026 || (c < 110589 + ? (c < 94208 + ? (c < 94176 + ? (c < 94099 + ? c == 94032 + : c <= 94111) + : (c <= 94177 || c == 94179)) + : (c <= 100343 || (c < 110576 + ? (c < 101632 + ? (c >= 100352 && c <= 101589) + : c <= 101640) + : (c <= 110579 || (c >= 110581 && c <= 110587))))) + : (c <= 110590 || (c < 113664 + ? (c < 110948 + ? (c < 110928 + ? (c >= 110592 && c <= 110882) + : c <= 110930) + : (c <= 110951 || (c >= 110960 && c <= 111355))) + : (c <= 113770 || (c < 113808 + ? (c < 113792 + ? (c >= 113776 && c <= 113788) + : c <= 113800) + : (c <= 113817 || (c >= 119808 && c <= 119892))))))))))) + : (c <= 119964 || (c < 125259 + ? (c < 120572 + ? (c < 120086 + ? (c < 119995 + ? (c < 119973 + ? (c < 119970 + ? (c >= 119966 && c <= 119967) + : c <= 119970) + : (c <= 119974 || (c < 119982 + ? (c >= 119977 && c <= 119980) + : c <= 119993))) + : (c <= 119995 || (c < 120071 + ? (c < 120005 + ? (c >= 119997 && c <= 120003) + : c <= 120069) + : (c <= 120074 || (c >= 120077 && c <= 120084))))) + : (c <= 120092 || (c < 120138 + ? (c < 120128 + ? (c < 120123 + ? (c >= 120094 && c <= 120121) + : c <= 120126) + : (c <= 120132 || c == 120134)) + : (c <= 120144 || (c < 120514 + ? (c < 120488 + ? (c >= 120146 && c <= 120485) + : c <= 120512) + : (c <= 120538 || (c >= 120540 && c <= 120570))))))) + : (c <= 120596 || (c < 123191 + ? (c < 120714 + ? (c < 120656 + ? (c < 120630 + ? (c >= 120598 && c <= 120628) + : c <= 120654) + : (c <= 120686 || (c >= 120688 && c <= 120712))) + : (c <= 120744 || (c < 122624 + ? (c < 120772 + ? (c >= 120746 && c <= 120770) + : c <= 120779) + : (c <= 122654 || (c >= 123136 && c <= 123180))))) + : (c <= 123197 || (c < 124904 + ? (c < 123584 + ? (c < 123536 + ? c == 123214 + : c <= 123565) + : (c <= 123627 || (c >= 124896 && c <= 124902))) + : (c <= 124907 || (c < 124928 + ? (c < 124912 + ? (c >= 124909 && c <= 124910) + : c <= 124926) + : (c <= 125124 || (c >= 125184 && c <= 125251))))))))) + : (c <= 125259 || (c < 126559 + ? (c < 126535 + ? (c < 126505 + ? (c < 126497 + ? (c < 126469 + ? (c >= 126464 && c <= 126467) + : c <= 126495) + : (c <= 126498 || (c < 126503 + ? c == 126500 + : c <= 126503))) + : (c <= 126514 || (c < 126523 + ? (c < 126521 + ? (c >= 126516 && c <= 126519) + : c <= 126521) + : (c <= 126523 || c == 126530)))) + : (c <= 126535 || (c < 126548 + ? (c < 126541 + ? (c < 126539 + ? c == 126537 + : c <= 126539) + : (c <= 126543 || (c >= 126545 && c <= 126546))) + : (c <= 126548 || (c < 126555 + ? (c < 126553 + ? c == 126551 + : c <= 126553) + : (c <= 126555 || c == 126557)))))) + : (c <= 126559 || (c < 126625 + ? (c < 126580 + ? (c < 126567 + ? (c < 126564 + ? (c >= 126561 && c <= 126562) + : c <= 126564) + : (c <= 126570 || (c >= 126572 && c <= 126578))) + : (c <= 126583 || (c < 126592 + ? (c < 126590 + ? (c >= 126585 && c <= 126588) + : c <= 126590) + : (c <= 126601 || (c >= 126603 && c <= 126619))))) + : (c <= 126627 || (c < 177984 + ? (c < 131072 + ? (c < 126635 + ? (c >= 126629 && c <= 126633) + : c <= 126651) + : (c <= 173791 || (c >= 173824 && c <= 177976))) + : (c <= 178205 || (c < 194560 + ? (c < 183984 + ? (c >= 178208 && c <= 183969) + : c <= 191456) + : (c <= 195101 || (c >= 196608 && c <= 201546))))))))))))))))); +} + +static inline bool sym_identifier_character_set_2(int32_t c) { + return (c < 43514 + ? (c < 4193 + ? (c < 2707 + ? (c < 1994 + ? (c < 910 + ? (c < 736 + ? (c < 186 + ? (c < 'a' + ? (c < '_' + ? (c >= 'A' && c <= 'Z') + : c <= '_') + : (c <= 'z' || (c < 181 + ? c == 170 + : c <= 181))) + : (c <= 186 || (c < 248 + ? (c < 216 + ? (c >= 192 && c <= 214) + : c <= 246) + : (c <= 705 || (c >= 710 && c <= 721))))) + : (c <= 740 || (c < 891 + ? (c < 880 + ? (c < 750 + ? c == 748 + : c <= 750) + : (c <= 884 || (c >= 886 && c <= 887))) + : (c <= 893 || (c < 904 + ? (c < 902 + ? c == 895 + : c <= 902) + : (c <= 906 || c == 908)))))) + : (c <= 929 || (c < 1649 + ? (c < 1376 + ? (c < 1162 + ? (c < 1015 + ? (c >= 931 && c <= 1013) + : c <= 1153) + : (c <= 1327 || (c < 1369 + ? (c >= 1329 && c <= 1366) + : c <= 1369))) + : (c <= 1416 || (c < 1568 + ? (c < 1519 + ? (c >= 1488 && c <= 1514) + : c <= 1522) + : (c <= 1610 || (c >= 1646 && c <= 1647))))) + : (c <= 1747 || (c < 1791 + ? (c < 1774 + ? (c < 1765 + ? c == 1749 + : c <= 1766) + : (c <= 1775 || (c >= 1786 && c <= 1788))) + : (c <= 1791 || (c < 1869 + ? (c < 1810 + ? c == 1808 + : c <= 1839) + : (c <= 1957 || c == 1969)))))))) + : (c <= 2026 || (c < 2482 + ? (c < 2208 + ? (c < 2088 + ? (c < 2048 + ? (c < 2042 + ? (c >= 2036 && c <= 2037) + : c <= 2042) + : (c <= 2069 || (c < 2084 + ? c == 2074 + : c <= 2084))) + : (c <= 2088 || (c < 2160 + ? (c < 2144 + ? (c >= 2112 && c <= 2136) + : c <= 2154) + : (c <= 2183 || (c >= 2185 && c <= 2190))))) + : (c <= 2249 || (c < 2417 + ? (c < 2384 + ? (c < 2365 + ? (c >= 2308 && c <= 2361) + : c <= 2365) + : (c <= 2384 || (c >= 2392 && c <= 2401))) + : (c <= 2432 || (c < 2451 + ? (c < 2447 + ? (c >= 2437 && c <= 2444) + : c <= 2448) + : (c <= 2472 || (c >= 2474 && c <= 2480))))))) + : (c <= 2482 || (c < 2579 + ? (c < 2527 + ? (c < 2510 + ? (c < 2493 + ? (c >= 2486 && c <= 2489) + : c <= 2493) + : (c <= 2510 || (c >= 2524 && c <= 2525))) + : (c <= 2529 || (c < 2565 + ? (c < 2556 + ? (c >= 2544 && c <= 2545) + : c <= 2556) + : (c <= 2570 || (c >= 2575 && c <= 2576))))) + : (c <= 2600 || (c < 2649 + ? (c < 2613 + ? (c < 2610 + ? (c >= 2602 && c <= 2608) + : c <= 2611) + : (c <= 2614 || (c >= 2616 && c <= 2617))) + : (c <= 2652 || (c < 2693 + ? (c < 2674 + ? c == 2654 + : c <= 2676) + : (c <= 2701 || (c >= 2703 && c <= 2705))))))))))) + : (c <= 2728 || (c < 3242 + ? (c < 2962 + ? (c < 2858 + ? (c < 2784 + ? (c < 2741 + ? (c < 2738 + ? (c >= 2730 && c <= 2736) + : c <= 2739) + : (c <= 2745 || (c < 2768 + ? c == 2749 + : c <= 2768))) + : (c <= 2785 || (c < 2831 + ? (c < 2821 + ? c == 2809 + : c <= 2828) + : (c <= 2832 || (c >= 2835 && c <= 2856))))) + : (c <= 2864 || (c < 2911 + ? (c < 2877 + ? (c < 2869 + ? (c >= 2866 && c <= 2867) + : c <= 2873) + : (c <= 2877 || (c >= 2908 && c <= 2909))) + : (c <= 2913 || (c < 2949 + ? (c < 2947 + ? c == 2929 + : c <= 2947) + : (c <= 2954 || (c >= 2958 && c <= 2960))))))) + : (c <= 2965 || (c < 3090 + ? (c < 2984 + ? (c < 2974 + ? (c < 2972 + ? (c >= 2969 && c <= 2970) + : c <= 2972) + : (c <= 2975 || (c >= 2979 && c <= 2980))) + : (c <= 2986 || (c < 3077 + ? (c < 3024 + ? (c >= 2990 && c <= 3001) + : c <= 3024) + : (c <= 3084 || (c >= 3086 && c <= 3088))))) + : (c <= 3112 || (c < 3168 + ? (c < 3160 + ? (c < 3133 + ? (c >= 3114 && c <= 3129) + : c <= 3133) + : (c <= 3162 || c == 3165)) + : (c <= 3169 || (c < 3214 + ? (c < 3205 + ? c == 3200 + : c <= 3212) + : (c <= 3216 || (c >= 3218 && c <= 3240))))))))) + : (c <= 3251 || (c < 3648 + ? (c < 3412 + ? (c < 3332 + ? (c < 3293 + ? (c < 3261 + ? (c >= 3253 && c <= 3257) + : c <= 3261) + : (c <= 3294 || (c < 3313 + ? (c >= 3296 && c <= 3297) + : c <= 3314))) + : (c <= 3340 || (c < 3389 + ? (c < 3346 + ? (c >= 3342 && c <= 3344) + : c <= 3386) + : (c <= 3389 || c == 3406)))) + : (c <= 3414 || (c < 3507 + ? (c < 3461 + ? (c < 3450 + ? (c >= 3423 && c <= 3425) + : c <= 3455) + : (c <= 3478 || (c >= 3482 && c <= 3505))) + : (c <= 3515 || (c < 3585 + ? (c < 3520 + ? c == 3517 + : c <= 3526) + : (c <= 3632 || c == 3634)))))) + : (c <= 3654 || (c < 3782 + ? (c < 3749 + ? (c < 3718 + ? (c < 3716 + ? (c >= 3713 && c <= 3714) + : c <= 3716) + : (c <= 3722 || (c >= 3724 && c <= 3747))) + : (c <= 3749 || (c < 3773 + ? (c < 3762 + ? (c >= 3751 && c <= 3760) + : c <= 3762) + : (c <= 3773 || (c >= 3776 && c <= 3780))))) + : (c <= 3782 || (c < 3976 + ? (c < 3904 + ? (c < 3840 + ? (c >= 3804 && c <= 3807) + : c <= 3840) + : (c <= 3911 || (c >= 3913 && c <= 3948))) + : (c <= 3980 || (c < 4176 + ? (c < 4159 + ? (c >= 4096 && c <= 4138) + : c <= 4159) + : (c <= 4181 || (c >= 4186 && c <= 4189))))))))))))) + : (c <= 4193 || (c < 8134 + ? (c < 6176 + ? (c < 4808 + ? (c < 4688 + ? (c < 4295 + ? (c < 4213 + ? (c < 4206 + ? (c >= 4197 && c <= 4198) + : c <= 4208) + : (c <= 4225 || (c < 4256 + ? c == 4238 + : c <= 4293))) + : (c <= 4295 || (c < 4348 + ? (c < 4304 + ? c == 4301 + : c <= 4346) + : (c <= 4680 || (c >= 4682 && c <= 4685))))) + : (c <= 4694 || (c < 4752 + ? (c < 4704 + ? (c < 4698 + ? c == 4696 + : c <= 4701) + : (c <= 4744 || (c >= 4746 && c <= 4749))) + : (c <= 4784 || (c < 4800 + ? (c < 4792 + ? (c >= 4786 && c <= 4789) + : c <= 4798) + : (c <= 4800 || (c >= 4802 && c <= 4805))))))) + : (c <= 4822 || (c < 5792 + ? (c < 5024 + ? (c < 4888 + ? (c < 4882 + ? (c >= 4824 && c <= 4880) + : c <= 4885) + : (c <= 4954 || (c >= 4992 && c <= 5007))) + : (c <= 5109 || (c < 5743 + ? (c < 5121 + ? (c >= 5112 && c <= 5117) + : c <= 5740) + : (c <= 5759 || (c >= 5761 && c <= 5786))))) + : (c <= 5866 || (c < 5984 + ? (c < 5919 + ? (c < 5888 + ? (c >= 5870 && c <= 5880) + : c <= 5905) + : (c <= 5937 || (c >= 5952 && c <= 5969))) + : (c <= 5996 || (c < 6103 + ? (c < 6016 + ? (c >= 5998 && c <= 6000) + : c <= 6067) + : (c <= 6103 || c == 6108)))))))) + : (c <= 6264 || (c < 7312 + ? (c < 6823 + ? (c < 6512 + ? (c < 6320 + ? (c < 6314 + ? (c >= 6272 && c <= 6312) + : c <= 6314) + : (c <= 6389 || (c < 6480 + ? (c >= 6400 && c <= 6430) + : c <= 6509))) + : (c <= 6516 || (c < 6656 + ? (c < 6576 + ? (c >= 6528 && c <= 6571) + : c <= 6601) + : (c <= 6678 || (c >= 6688 && c <= 6740))))) + : (c <= 6823 || (c < 7098 + ? (c < 7043 + ? (c < 6981 + ? (c >= 6917 && c <= 6963) + : c <= 6988) + : (c <= 7072 || (c >= 7086 && c <= 7087))) + : (c <= 7141 || (c < 7258 + ? (c < 7245 + ? (c >= 7168 && c <= 7203) + : c <= 7247) + : (c <= 7293 || (c >= 7296 && c <= 7304))))))) + : (c <= 7354 || (c < 8008 + ? (c < 7418 + ? (c < 7406 + ? (c < 7401 + ? (c >= 7357 && c <= 7359) + : c <= 7404) + : (c <= 7411 || (c >= 7413 && c <= 7414))) + : (c <= 7418 || (c < 7960 + ? (c < 7680 + ? (c >= 7424 && c <= 7615) + : c <= 7957) + : (c <= 7965 || (c >= 7968 && c <= 8005))))) + : (c <= 8013 || (c < 8031 + ? (c < 8027 + ? (c < 8025 + ? (c >= 8016 && c <= 8023) + : c <= 8025) + : (c <= 8027 || c == 8029)) + : (c <= 8061 || (c < 8126 + ? (c < 8118 + ? (c >= 8064 && c <= 8116) + : c <= 8124) + : (c <= 8126 || (c >= 8130 && c <= 8132))))))))))) + : (c <= 8140 || (c < 12337 + ? (c < 8544 + ? (c < 8458 + ? (c < 8305 + ? (c < 8160 + ? (c < 8150 + ? (c >= 8144 && c <= 8147) + : c <= 8155) + : (c <= 8172 || (c < 8182 + ? (c >= 8178 && c <= 8180) + : c <= 8188))) + : (c <= 8305 || (c < 8450 + ? (c < 8336 + ? c == 8319 + : c <= 8348) + : (c <= 8450 || c == 8455)))) + : (c <= 8467 || (c < 8488 + ? (c < 8484 + ? (c < 8472 + ? c == 8469 + : c <= 8477) + : (c <= 8484 || c == 8486)) + : (c <= 8488 || (c < 8517 + ? (c < 8508 + ? (c >= 8490 && c <= 8505) + : c <= 8511) + : (c <= 8521 || c == 8526)))))) + : (c <= 8584 || (c < 11680 + ? (c < 11559 + ? (c < 11506 + ? (c < 11499 + ? (c >= 11264 && c <= 11492) + : c <= 11502) + : (c <= 11507 || (c >= 11520 && c <= 11557))) + : (c <= 11559 || (c < 11631 + ? (c < 11568 + ? c == 11565 + : c <= 11623) + : (c <= 11631 || (c >= 11648 && c <= 11670))))) + : (c <= 11686 || (c < 11720 + ? (c < 11704 + ? (c < 11696 + ? (c >= 11688 && c <= 11694) + : c <= 11702) + : (c <= 11710 || (c >= 11712 && c <= 11718))) + : (c <= 11726 || (c < 12293 + ? (c < 11736 + ? (c >= 11728 && c <= 11734) + : c <= 11742) + : (c <= 12295 || (c >= 12321 && c <= 12329))))))))) + : (c <= 12341 || (c < 42891 + ? (c < 19968 + ? (c < 12549 + ? (c < 12445 + ? (c < 12353 + ? (c >= 12344 && c <= 12348) + : c <= 12438) + : (c <= 12447 || (c < 12540 + ? (c >= 12449 && c <= 12538) + : c <= 12543))) + : (c <= 12591 || (c < 12784 + ? (c < 12704 + ? (c >= 12593 && c <= 12686) + : c <= 12735) + : (c <= 12799 || (c >= 13312 && c <= 19903))))) + : (c <= 42124 || (c < 42560 + ? (c < 42512 + ? (c < 42240 + ? (c >= 42192 && c <= 42237) + : c <= 42508) + : (c <= 42527 || (c >= 42538 && c <= 42539))) + : (c <= 42606 || (c < 42775 + ? (c < 42656 + ? (c >= 42623 && c <= 42653) + : c <= 42735) + : (c <= 42783 || (c >= 42786 && c <= 42888))))))) + : (c <= 42954 || (c < 43250 + ? (c < 43011 + ? (c < 42965 + ? (c < 42963 + ? (c >= 42960 && c <= 42961) + : c <= 42963) + : (c <= 42969 || (c >= 42994 && c <= 43009))) + : (c <= 43013 || (c < 43072 + ? (c < 43020 + ? (c >= 43015 && c <= 43018) + : c <= 43042) + : (c <= 43123 || (c >= 43138 && c <= 43187))))) + : (c <= 43255 || (c < 43360 + ? (c < 43274 + ? (c < 43261 + ? c == 43259 + : c <= 43262) + : (c <= 43301 || (c >= 43312 && c <= 43334))) + : (c <= 43388 || (c < 43488 + ? (c < 43471 + ? (c >= 43396 && c <= 43442) + : c <= 43471) + : (c <= 43492 || (c >= 43494 && c <= 43503))))))))))))))) + : (c <= 43518 || (c < 70727 + ? (c < 66956 + ? (c < 64914 + ? (c < 43868 + ? (c < 43714 + ? (c < 43646 + ? (c < 43588 + ? (c < 43584 + ? (c >= 43520 && c <= 43560) + : c <= 43586) + : (c <= 43595 || (c < 43642 + ? (c >= 43616 && c <= 43638) + : c <= 43642))) + : (c <= 43695 || (c < 43705 + ? (c < 43701 + ? c == 43697 + : c <= 43702) + : (c <= 43709 || c == 43712)))) + : (c <= 43714 || (c < 43785 + ? (c < 43762 + ? (c < 43744 + ? (c >= 43739 && c <= 43741) + : c <= 43754) + : (c <= 43764 || (c >= 43777 && c <= 43782))) + : (c <= 43790 || (c < 43816 + ? (c < 43808 + ? (c >= 43793 && c <= 43798) + : c <= 43814) + : (c <= 43822 || (c >= 43824 && c <= 43866))))))) + : (c <= 43881 || (c < 64287 + ? (c < 63744 + ? (c < 55216 + ? (c < 44032 + ? (c >= 43888 && c <= 44002) + : c <= 55203) + : (c <= 55238 || (c >= 55243 && c <= 55291))) + : (c <= 64109 || (c < 64275 + ? (c < 64256 + ? (c >= 64112 && c <= 64217) + : c <= 64262) + : (c <= 64279 || c == 64285)))) + : (c <= 64296 || (c < 64323 + ? (c < 64318 + ? (c < 64312 + ? (c >= 64298 && c <= 64310) + : c <= 64316) + : (c <= 64318 || (c >= 64320 && c <= 64321))) + : (c <= 64324 || (c < 64612 + ? (c < 64467 + ? (c >= 64326 && c <= 64433) + : c <= 64605) + : (c <= 64829 || (c >= 64848 && c <= 64911))))))))) + : (c <= 64967 || (c < 65599 + ? (c < 65382 + ? (c < 65147 + ? (c < 65139 + ? (c < 65137 + ? (c >= 65008 && c <= 65017) + : c <= 65137) + : (c <= 65139 || (c < 65145 + ? c == 65143 + : c <= 65145))) + : (c <= 65147 || (c < 65313 + ? (c < 65151 + ? c == 65149 + : c <= 65276) + : (c <= 65338 || (c >= 65345 && c <= 65370))))) + : (c <= 65437 || (c < 65498 + ? (c < 65482 + ? (c < 65474 + ? (c >= 65440 && c <= 65470) + : c <= 65479) + : (c <= 65487 || (c >= 65490 && c <= 65495))) + : (c <= 65500 || (c < 65576 + ? (c < 65549 + ? (c >= 65536 && c <= 65547) + : c <= 65574) + : (c <= 65594 || (c >= 65596 && c <= 65597))))))) + : (c <= 65613 || (c < 66464 + ? (c < 66208 + ? (c < 65856 + ? (c < 65664 + ? (c >= 65616 && c <= 65629) + : c <= 65786) + : (c <= 65908 || (c >= 66176 && c <= 66204))) + : (c <= 66256 || (c < 66384 + ? (c < 66349 + ? (c >= 66304 && c <= 66335) + : c <= 66378) + : (c <= 66421 || (c >= 66432 && c <= 66461))))) + : (c <= 66499 || (c < 66776 + ? (c < 66560 + ? (c < 66513 + ? (c >= 66504 && c <= 66511) + : c <= 66517) + : (c <= 66717 || (c >= 66736 && c <= 66771))) + : (c <= 66811 || (c < 66928 + ? (c < 66864 + ? (c >= 66816 && c <= 66855) + : c <= 66915) + : (c <= 66938 || (c >= 66940 && c <= 66954))))))))))) + : (c <= 66962 || (c < 68864 + ? (c < 67828 + ? (c < 67506 + ? (c < 67072 + ? (c < 66979 + ? (c < 66967 + ? (c >= 66964 && c <= 66965) + : c <= 66977) + : (c <= 66993 || (c < 67003 + ? (c >= 66995 && c <= 67001) + : c <= 67004))) + : (c <= 67382 || (c < 67456 + ? (c < 67424 + ? (c >= 67392 && c <= 67413) + : c <= 67431) + : (c <= 67461 || (c >= 67463 && c <= 67504))))) + : (c <= 67514 || (c < 67644 + ? (c < 67594 + ? (c < 67592 + ? (c >= 67584 && c <= 67589) + : c <= 67592) + : (c <= 67637 || (c >= 67639 && c <= 67640))) + : (c <= 67644 || (c < 67712 + ? (c < 67680 + ? (c >= 67647 && c <= 67669) + : c <= 67702) + : (c <= 67742 || (c >= 67808 && c <= 67826))))))) + : (c <= 67829 || (c < 68224 + ? (c < 68096 + ? (c < 67968 + ? (c < 67872 + ? (c >= 67840 && c <= 67861) + : c <= 67897) + : (c <= 68023 || (c >= 68030 && c <= 68031))) + : (c <= 68096 || (c < 68121 + ? (c < 68117 + ? (c >= 68112 && c <= 68115) + : c <= 68119) + : (c <= 68149 || (c >= 68192 && c <= 68220))))) + : (c <= 68252 || (c < 68448 + ? (c < 68352 + ? (c < 68297 + ? (c >= 68288 && c <= 68295) + : c <= 68324) + : (c <= 68405 || (c >= 68416 && c <= 68437))) + : (c <= 68466 || (c < 68736 + ? (c < 68608 + ? (c >= 68480 && c <= 68497) + : c <= 68680) + : (c <= 68786 || (c >= 68800 && c <= 68850))))))))) + : (c <= 68899 || (c < 70106 + ? (c < 69749 + ? (c < 69488 + ? (c < 69376 + ? (c < 69296 + ? (c >= 69248 && c <= 69289) + : c <= 69297) + : (c <= 69404 || (c < 69424 + ? c == 69415 + : c <= 69445))) + : (c <= 69505 || (c < 69635 + ? (c < 69600 + ? (c >= 69552 && c <= 69572) + : c <= 69622) + : (c <= 69687 || (c >= 69745 && c <= 69746))))) + : (c <= 69749 || (c < 69959 + ? (c < 69891 + ? (c < 69840 + ? (c >= 69763 && c <= 69807) + : c <= 69864) + : (c <= 69926 || c == 69956)) + : (c <= 69959 || (c < 70019 + ? (c < 70006 + ? (c >= 69968 && c <= 70002) + : c <= 70006) + : (c <= 70066 || (c >= 70081 && c <= 70084))))))) + : (c <= 70106 || (c < 70405 + ? (c < 70280 + ? (c < 70163 + ? (c < 70144 + ? c == 70108 + : c <= 70161) + : (c <= 70187 || (c >= 70272 && c <= 70278))) + : (c <= 70280 || (c < 70303 + ? (c < 70287 + ? (c >= 70282 && c <= 70285) + : c <= 70301) + : (c <= 70312 || (c >= 70320 && c <= 70366))))) + : (c <= 70412 || (c < 70453 + ? (c < 70442 + ? (c < 70419 + ? (c >= 70415 && c <= 70416) + : c <= 70440) + : (c <= 70448 || (c >= 70450 && c <= 70451))) + : (c <= 70457 || (c < 70493 + ? (c < 70480 + ? c == 70461 + : c <= 70480) + : (c <= 70497 || (c >= 70656 && c <= 70708))))))))))))) + : (c <= 70730 || (c < 119894 + ? (c < 73056 + ? (c < 72001 + ? (c < 71424 + ? (c < 71128 + ? (c < 70852 + ? (c < 70784 + ? (c >= 70751 && c <= 70753) + : c <= 70831) + : (c <= 70853 || (c < 71040 + ? c == 70855 + : c <= 71086))) + : (c <= 71131 || (c < 71296 + ? (c < 71236 + ? (c >= 71168 && c <= 71215) + : c <= 71236) + : (c <= 71338 || c == 71352)))) + : (c <= 71450 || (c < 71945 + ? (c < 71840 + ? (c < 71680 + ? (c >= 71488 && c <= 71494) + : c <= 71723) + : (c <= 71903 || (c >= 71935 && c <= 71942))) + : (c <= 71945 || (c < 71960 + ? (c < 71957 + ? (c >= 71948 && c <= 71955) + : c <= 71958) + : (c <= 71983 || c == 71999)))))) + : (c <= 72001 || (c < 72349 + ? (c < 72192 + ? (c < 72161 + ? (c < 72106 + ? (c >= 72096 && c <= 72103) + : c <= 72144) + : (c <= 72161 || c == 72163)) + : (c <= 72192 || (c < 72272 + ? (c < 72250 + ? (c >= 72203 && c <= 72242) + : c <= 72250) + : (c <= 72272 || (c >= 72284 && c <= 72329))))) + : (c <= 72349 || (c < 72818 + ? (c < 72714 + ? (c < 72704 + ? (c >= 72368 && c <= 72440) + : c <= 72712) + : (c <= 72750 || c == 72768)) + : (c <= 72847 || (c < 72971 + ? (c < 72968 + ? (c >= 72960 && c <= 72966) + : c <= 72969) + : (c <= 73008 || c == 73030)))))))) + : (c <= 73061 || (c < 93952 + ? (c < 82944 + ? (c < 73728 + ? (c < 73112 + ? (c < 73066 + ? (c >= 73063 && c <= 73064) + : c <= 73097) + : (c <= 73112 || (c < 73648 + ? (c >= 73440 && c <= 73458) + : c <= 73648))) + : (c <= 74649 || (c < 77712 + ? (c < 74880 + ? (c >= 74752 && c <= 74862) + : c <= 75075) + : (c <= 77808 || (c >= 77824 && c <= 78894))))) + : (c <= 83526 || (c < 92928 + ? (c < 92784 + ? (c < 92736 + ? (c >= 92160 && c <= 92728) + : c <= 92766) + : (c <= 92862 || (c >= 92880 && c <= 92909))) + : (c <= 92975 || (c < 93053 + ? (c < 93027 + ? (c >= 92992 && c <= 92995) + : c <= 93047) + : (c <= 93071 || (c >= 93760 && c <= 93823))))))) + : (c <= 94026 || (c < 110589 + ? (c < 94208 + ? (c < 94176 + ? (c < 94099 + ? c == 94032 + : c <= 94111) + : (c <= 94177 || c == 94179)) + : (c <= 100343 || (c < 110576 + ? (c < 101632 + ? (c >= 100352 && c <= 101589) + : c <= 101640) + : (c <= 110579 || (c >= 110581 && c <= 110587))))) + : (c <= 110590 || (c < 113664 + ? (c < 110948 + ? (c < 110928 + ? (c >= 110592 && c <= 110882) + : c <= 110930) + : (c <= 110951 || (c >= 110960 && c <= 111355))) + : (c <= 113770 || (c < 113808 + ? (c < 113792 + ? (c >= 113776 && c <= 113788) + : c <= 113800) + : (c <= 113817 || (c >= 119808 && c <= 119892))))))))))) + : (c <= 119964 || (c < 125259 + ? (c < 120572 + ? (c < 120086 + ? (c < 119995 + ? (c < 119973 + ? (c < 119970 + ? (c >= 119966 && c <= 119967) + : c <= 119970) + : (c <= 119974 || (c < 119982 + ? (c >= 119977 && c <= 119980) + : c <= 119993))) + : (c <= 119995 || (c < 120071 + ? (c < 120005 + ? (c >= 119997 && c <= 120003) + : c <= 120069) + : (c <= 120074 || (c >= 120077 && c <= 120084))))) + : (c <= 120092 || (c < 120138 + ? (c < 120128 + ? (c < 120123 + ? (c >= 120094 && c <= 120121) + : c <= 120126) + : (c <= 120132 || c == 120134)) + : (c <= 120144 || (c < 120514 + ? (c < 120488 + ? (c >= 120146 && c <= 120485) + : c <= 120512) + : (c <= 120538 || (c >= 120540 && c <= 120570))))))) + : (c <= 120596 || (c < 123191 + ? (c < 120714 + ? (c < 120656 + ? (c < 120630 + ? (c >= 120598 && c <= 120628) + : c <= 120654) + : (c <= 120686 || (c >= 120688 && c <= 120712))) + : (c <= 120744 || (c < 122624 + ? (c < 120772 + ? (c >= 120746 && c <= 120770) + : c <= 120779) + : (c <= 122654 || (c >= 123136 && c <= 123180))))) + : (c <= 123197 || (c < 124904 + ? (c < 123584 + ? (c < 123536 + ? c == 123214 + : c <= 123565) + : (c <= 123627 || (c >= 124896 && c <= 124902))) + : (c <= 124907 || (c < 124928 + ? (c < 124912 + ? (c >= 124909 && c <= 124910) + : c <= 124926) + : (c <= 125124 || (c >= 125184 && c <= 125251))))))))) + : (c <= 125259 || (c < 126559 + ? (c < 126535 + ? (c < 126505 + ? (c < 126497 + ? (c < 126469 + ? (c >= 126464 && c <= 126467) + : c <= 126495) + : (c <= 126498 || (c < 126503 + ? c == 126500 + : c <= 126503))) + : (c <= 126514 || (c < 126523 + ? (c < 126521 + ? (c >= 126516 && c <= 126519) + : c <= 126521) + : (c <= 126523 || c == 126530)))) + : (c <= 126535 || (c < 126548 + ? (c < 126541 + ? (c < 126539 + ? c == 126537 + : c <= 126539) + : (c <= 126543 || (c >= 126545 && c <= 126546))) + : (c <= 126548 || (c < 126555 + ? (c < 126553 + ? c == 126551 + : c <= 126553) + : (c <= 126555 || c == 126557)))))) + : (c <= 126559 || (c < 126625 + ? (c < 126580 + ? (c < 126567 + ? (c < 126564 + ? (c >= 126561 && c <= 126562) + : c <= 126564) + : (c <= 126570 || (c >= 126572 && c <= 126578))) + : (c <= 126583 || (c < 126592 + ? (c < 126590 + ? (c >= 126585 && c <= 126588) + : c <= 126590) + : (c <= 126601 || (c >= 126603 && c <= 126619))))) + : (c <= 126627 || (c < 177984 + ? (c < 131072 + ? (c < 126635 + ? (c >= 126629 && c <= 126633) + : c <= 126651) + : (c <= 173791 || (c >= 173824 && c <= 177976))) + : (c <= 178205 || (c < 194560 + ? (c < 183984 + ? (c >= 178208 && c <= 183969) + : c <= 191456) + : (c <= 195101 || (c >= 196608 && c <= 201546))))))))))))))))); +} + +static inline bool sym_identifier_character_set_3(int32_t c) { + return (c < 43616 + ? (c < 3782 + ? (c < 2748 + ? (c < 2045 + ? (c < 1015 + ? (c < 710 + ? (c < 181 + ? (c < '_' + ? (c < 'A' + ? (c >= '0' && c <= '9') + : c <= 'Z') + : (c <= '_' || (c < 170 + ? (c >= 'a' && c <= 'z') + : c <= 170))) + : (c <= 181 || (c < 192 + ? (c < 186 + ? c == 183 + : c <= 186) + : (c <= 214 || (c < 248 + ? (c >= 216 && c <= 246) + : c <= 705))))) + : (c <= 721 || (c < 891 + ? (c < 750 + ? (c < 748 + ? (c >= 736 && c <= 740) + : c <= 748) + : (c <= 750 || (c < 886 + ? (c >= 768 && c <= 884) + : c <= 887))) + : (c <= 893 || (c < 908 + ? (c < 902 + ? c == 895 + : c <= 906) + : (c <= 908 || (c < 931 + ? (c >= 910 && c <= 929) + : c <= 1013))))))) + : (c <= 1153 || (c < 1519 + ? (c < 1425 + ? (c < 1329 + ? (c < 1162 + ? (c >= 1155 && c <= 1159) + : c <= 1327) + : (c <= 1366 || (c < 1376 + ? c == 1369 + : c <= 1416))) + : (c <= 1469 || (c < 1476 + ? (c < 1473 + ? c == 1471 + : c <= 1474) + : (c <= 1477 || (c < 1488 + ? c == 1479 + : c <= 1514))))) + : (c <= 1522 || (c < 1770 + ? (c < 1646 + ? (c < 1568 + ? (c >= 1552 && c <= 1562) + : c <= 1641) + : (c <= 1747 || (c < 1759 + ? (c >= 1749 && c <= 1756) + : c <= 1768))) + : (c <= 1788 || (c < 1869 + ? (c < 1808 + ? c == 1791 + : c <= 1866) + : (c <= 1969 || (c < 2042 + ? (c >= 1984 && c <= 2037) + : c <= 2042))))))))) + : (c <= 2045 || (c < 2558 + ? (c < 2451 + ? (c < 2200 + ? (c < 2144 + ? (c < 2112 + ? (c >= 2048 && c <= 2093) + : c <= 2139) + : (c <= 2154 || (c < 2185 + ? (c >= 2160 && c <= 2183) + : c <= 2190))) + : (c <= 2273 || (c < 2417 + ? (c < 2406 + ? (c >= 2275 && c <= 2403) + : c <= 2415) + : (c <= 2435 || (c < 2447 + ? (c >= 2437 && c <= 2444) + : c <= 2448))))) + : (c <= 2472 || (c < 2507 + ? (c < 2486 + ? (c < 2482 + ? (c >= 2474 && c <= 2480) + : c <= 2482) + : (c <= 2489 || (c < 2503 + ? (c >= 2492 && c <= 2500) + : c <= 2504))) + : (c <= 2510 || (c < 2527 + ? (c < 2524 + ? c == 2519 + : c <= 2525) + : (c <= 2531 || (c < 2556 + ? (c >= 2534 && c <= 2545) + : c <= 2556))))))) + : (c <= 2558 || (c < 2635 + ? (c < 2610 + ? (c < 2575 + ? (c < 2565 + ? (c >= 2561 && c <= 2563) + : c <= 2570) + : (c <= 2576 || (c < 2602 + ? (c >= 2579 && c <= 2600) + : c <= 2608))) + : (c <= 2611 || (c < 2620 + ? (c < 2616 + ? (c >= 2613 && c <= 2614) + : c <= 2617) + : (c <= 2620 || (c < 2631 + ? (c >= 2622 && c <= 2626) + : c <= 2632))))) + : (c <= 2637 || (c < 2693 + ? (c < 2654 + ? (c < 2649 + ? c == 2641 + : c <= 2652) + : (c <= 2654 || (c < 2689 + ? (c >= 2662 && c <= 2677) + : c <= 2691))) + : (c <= 2701 || (c < 2730 + ? (c < 2707 + ? (c >= 2703 && c <= 2705) + : c <= 2728) + : (c <= 2736 || (c < 2741 + ? (c >= 2738 && c <= 2739) + : c <= 2745))))))))))) + : (c <= 2757 || (c < 3168 + ? (c < 2958 + ? (c < 2866 + ? (c < 2809 + ? (c < 2768 + ? (c < 2763 + ? (c >= 2759 && c <= 2761) + : c <= 2765) + : (c <= 2768 || (c < 2790 + ? (c >= 2784 && c <= 2787) + : c <= 2799))) + : (c <= 2815 || (c < 2831 + ? (c < 2821 + ? (c >= 2817 && c <= 2819) + : c <= 2828) + : (c <= 2832 || (c < 2858 + ? (c >= 2835 && c <= 2856) + : c <= 2864))))) + : (c <= 2867 || (c < 2908 + ? (c < 2887 + ? (c < 2876 + ? (c >= 2869 && c <= 2873) + : c <= 2884) + : (c <= 2888 || (c < 2901 + ? (c >= 2891 && c <= 2893) + : c <= 2903))) + : (c <= 2909 || (c < 2929 + ? (c < 2918 + ? (c >= 2911 && c <= 2915) + : c <= 2927) + : (c <= 2929 || (c < 2949 + ? (c >= 2946 && c <= 2947) + : c <= 2954))))))) + : (c <= 2960 || (c < 3031 + ? (c < 2984 + ? (c < 2972 + ? (c < 2969 + ? (c >= 2962 && c <= 2965) + : c <= 2970) + : (c <= 2972 || (c < 2979 + ? (c >= 2974 && c <= 2975) + : c <= 2980))) + : (c <= 2986 || (c < 3014 + ? (c < 3006 + ? (c >= 2990 && c <= 3001) + : c <= 3010) + : (c <= 3016 || (c < 3024 + ? (c >= 3018 && c <= 3021) + : c <= 3024))))) + : (c <= 3031 || (c < 3132 + ? (c < 3086 + ? (c < 3072 + ? (c >= 3046 && c <= 3055) + : c <= 3084) + : (c <= 3088 || (c < 3114 + ? (c >= 3090 && c <= 3112) + : c <= 3129))) + : (c <= 3140 || (c < 3157 + ? (c < 3146 + ? (c >= 3142 && c <= 3144) + : c <= 3149) + : (c <= 3158 || (c < 3165 + ? (c >= 3160 && c <= 3162) + : c <= 3165))))))))) + : (c <= 3171 || (c < 3450 + ? (c < 3293 + ? (c < 3242 + ? (c < 3205 + ? (c < 3200 + ? (c >= 3174 && c <= 3183) + : c <= 3203) + : (c <= 3212 || (c < 3218 + ? (c >= 3214 && c <= 3216) + : c <= 3240))) + : (c <= 3251 || (c < 3270 + ? (c < 3260 + ? (c >= 3253 && c <= 3257) + : c <= 3268) + : (c <= 3272 || (c < 3285 + ? (c >= 3274 && c <= 3277) + : c <= 3286))))) + : (c <= 3294 || (c < 3346 + ? (c < 3313 + ? (c < 3302 + ? (c >= 3296 && c <= 3299) + : c <= 3311) + : (c <= 3314 || (c < 3342 + ? (c >= 3328 && c <= 3340) + : c <= 3344))) + : (c <= 3396 || (c < 3412 + ? (c < 3402 + ? (c >= 3398 && c <= 3400) + : c <= 3406) + : (c <= 3415 || (c < 3430 + ? (c >= 3423 && c <= 3427) + : c <= 3439))))))) + : (c <= 3455 || (c < 3570 + ? (c < 3520 + ? (c < 3482 + ? (c < 3461 + ? (c >= 3457 && c <= 3459) + : c <= 3478) + : (c <= 3505 || (c < 3517 + ? (c >= 3507 && c <= 3515) + : c <= 3517))) + : (c <= 3526 || (c < 3542 + ? (c < 3535 + ? c == 3530 + : c <= 3540) + : (c <= 3542 || (c < 3558 + ? (c >= 3544 && c <= 3551) + : c <= 3567))))) + : (c <= 3571 || (c < 3718 + ? (c < 3664 + ? (c < 3648 + ? (c >= 3585 && c <= 3642) + : c <= 3662) + : (c <= 3673 || (c < 3716 + ? (c >= 3713 && c <= 3714) + : c <= 3716))) + : (c <= 3722 || (c < 3751 + ? (c < 3749 + ? (c >= 3724 && c <= 3747) + : c <= 3749) + : (c <= 3773 || (c >= 3776 && c <= 3780))))))))))))) + : (c <= 3782 || (c < 8025 + ? (c < 5888 + ? (c < 4688 + ? (c < 3953 + ? (c < 3872 + ? (c < 3804 + ? (c < 3792 + ? (c >= 3784 && c <= 3789) + : c <= 3801) + : (c <= 3807 || (c < 3864 + ? c == 3840 + : c <= 3865))) + : (c <= 3881 || (c < 3897 + ? (c < 3895 + ? c == 3893 + : c <= 3895) + : (c <= 3897 || (c < 3913 + ? (c >= 3902 && c <= 3911) + : c <= 3948))))) + : (c <= 3972 || (c < 4256 + ? (c < 4038 + ? (c < 3993 + ? (c >= 3974 && c <= 3991) + : c <= 4028) + : (c <= 4038 || (c < 4176 + ? (c >= 4096 && c <= 4169) + : c <= 4253))) + : (c <= 4293 || (c < 4304 + ? (c < 4301 + ? c == 4295 + : c <= 4301) + : (c <= 4346 || (c < 4682 + ? (c >= 4348 && c <= 4680) + : c <= 4685))))))) + : (c <= 4694 || (c < 4882 + ? (c < 4786 + ? (c < 4704 + ? (c < 4698 + ? c == 4696 + : c <= 4701) + : (c <= 4744 || (c < 4752 + ? (c >= 4746 && c <= 4749) + : c <= 4784))) + : (c <= 4789 || (c < 4802 + ? (c < 4800 + ? (c >= 4792 && c <= 4798) + : c <= 4800) + : (c <= 4805 || (c < 4824 + ? (c >= 4808 && c <= 4822) + : c <= 4880))))) + : (c <= 4885 || (c < 5112 + ? (c < 4969 + ? (c < 4957 + ? (c >= 4888 && c <= 4954) + : c <= 4959) + : (c <= 4977 || (c < 5024 + ? (c >= 4992 && c <= 5007) + : c <= 5109))) + : (c <= 5117 || (c < 5761 + ? (c < 5743 + ? (c >= 5121 && c <= 5740) + : c <= 5759) + : (c <= 5786 || (c < 5870 + ? (c >= 5792 && c <= 5866) + : c <= 5880))))))))) + : (c <= 5909 || (c < 6688 + ? (c < 6176 + ? (c < 6016 + ? (c < 5984 + ? (c < 5952 + ? (c >= 5919 && c <= 5940) + : c <= 5971) + : (c <= 5996 || (c < 6002 + ? (c >= 5998 && c <= 6000) + : c <= 6003))) + : (c <= 6099 || (c < 6112 + ? (c < 6108 + ? c == 6103 + : c <= 6109) + : (c <= 6121 || (c < 6159 + ? (c >= 6155 && c <= 6157) + : c <= 6169))))) + : (c <= 6264 || (c < 6470 + ? (c < 6400 + ? (c < 6320 + ? (c >= 6272 && c <= 6314) + : c <= 6389) + : (c <= 6430 || (c < 6448 + ? (c >= 6432 && c <= 6443) + : c <= 6459))) + : (c <= 6509 || (c < 6576 + ? (c < 6528 + ? (c >= 6512 && c <= 6516) + : c <= 6571) + : (c <= 6601 || (c < 6656 + ? (c >= 6608 && c <= 6618) + : c <= 6683))))))) + : (c <= 6750 || (c < 7232 + ? (c < 6847 + ? (c < 6800 + ? (c < 6783 + ? (c >= 6752 && c <= 6780) + : c <= 6793) + : (c <= 6809 || (c < 6832 + ? c == 6823 + : c <= 6845))) + : (c <= 6862 || (c < 7019 + ? (c < 6992 + ? (c >= 6912 && c <= 6988) + : c <= 7001) + : (c <= 7027 || (c < 7168 + ? (c >= 7040 && c <= 7155) + : c <= 7223))))) + : (c <= 7241 || (c < 7380 + ? (c < 7312 + ? (c < 7296 + ? (c >= 7245 && c <= 7293) + : c <= 7304) + : (c <= 7354 || (c < 7376 + ? (c >= 7357 && c <= 7359) + : c <= 7378))) + : (c <= 7418 || (c < 7968 + ? (c < 7960 + ? (c >= 7424 && c <= 7957) + : c <= 7965) + : (c <= 8005 || (c < 8016 + ? (c >= 8008 && c <= 8013) + : c <= 8023))))))))))) + : (c <= 8025 || (c < 11720 + ? (c < 8458 + ? (c < 8178 + ? (c < 8126 + ? (c < 8031 + ? (c < 8029 + ? c == 8027 + : c <= 8029) + : (c <= 8061 || (c < 8118 + ? (c >= 8064 && c <= 8116) + : c <= 8124))) + : (c <= 8126 || (c < 8144 + ? (c < 8134 + ? (c >= 8130 && c <= 8132) + : c <= 8140) + : (c <= 8147 || (c < 8160 + ? (c >= 8150 && c <= 8155) + : c <= 8172))))) + : (c <= 8180 || (c < 8336 + ? (c < 8276 + ? (c < 8255 + ? (c >= 8182 && c <= 8188) + : c <= 8256) + : (c <= 8276 || (c < 8319 + ? c == 8305 + : c <= 8319))) + : (c <= 8348 || (c < 8421 + ? (c < 8417 + ? (c >= 8400 && c <= 8412) + : c <= 8417) + : (c <= 8432 || (c < 8455 + ? c == 8450 + : c <= 8455))))))) + : (c <= 8467 || (c < 11499 + ? (c < 8490 + ? (c < 8484 + ? (c < 8472 + ? c == 8469 + : c <= 8477) + : (c <= 8484 || (c < 8488 + ? c == 8486 + : c <= 8488))) + : (c <= 8505 || (c < 8526 + ? (c < 8517 + ? (c >= 8508 && c <= 8511) + : c <= 8521) + : (c <= 8526 || (c < 11264 + ? (c >= 8544 && c <= 8584) + : c <= 11492))))) + : (c <= 11507 || (c < 11647 + ? (c < 11565 + ? (c < 11559 + ? (c >= 11520 && c <= 11557) + : c <= 11559) + : (c <= 11565 || (c < 11631 + ? (c >= 11568 && c <= 11623) + : c <= 11631))) + : (c <= 11670 || (c < 11696 + ? (c < 11688 + ? (c >= 11680 && c <= 11686) + : c <= 11694) + : (c <= 11702 || (c < 11712 + ? (c >= 11704 && c <= 11710) + : c <= 11718))))))))) + : (c <= 11726 || (c < 42623 + ? (c < 12540 + ? (c < 12337 + ? (c < 11744 + ? (c < 11736 + ? (c >= 11728 && c <= 11734) + : c <= 11742) + : (c <= 11775 || (c < 12321 + ? (c >= 12293 && c <= 12295) + : c <= 12335))) + : (c <= 12341 || (c < 12441 + ? (c < 12353 + ? (c >= 12344 && c <= 12348) + : c <= 12438) + : (c <= 12442 || (c < 12449 + ? (c >= 12445 && c <= 12447) + : c <= 12538))))) + : (c <= 12543 || (c < 19968 + ? (c < 12704 + ? (c < 12593 + ? (c >= 12549 && c <= 12591) + : c <= 12686) + : (c <= 12735 || (c < 13312 + ? (c >= 12784 && c <= 12799) + : c <= 19903))) + : (c <= 42124 || (c < 42512 + ? (c < 42240 + ? (c >= 42192 && c <= 42237) + : c <= 42508) + : (c <= 42539 || (c < 42612 + ? (c >= 42560 && c <= 42607) + : c <= 42621))))))) + : (c <= 42737 || (c < 43232 + ? (c < 42965 + ? (c < 42891 + ? (c < 42786 + ? (c >= 42775 && c <= 42783) + : c <= 42888) + : (c <= 42954 || (c < 42963 + ? (c >= 42960 && c <= 42961) + : c <= 42963))) + : (c <= 42969 || (c < 43072 + ? (c < 43052 + ? (c >= 42994 && c <= 43047) + : c <= 43052) + : (c <= 43123 || (c < 43216 + ? (c >= 43136 && c <= 43205) + : c <= 43225))))) + : (c <= 43255 || (c < 43471 + ? (c < 43312 + ? (c < 43261 + ? c == 43259 + : c <= 43309) + : (c <= 43347 || (c < 43392 + ? (c >= 43360 && c <= 43388) + : c <= 43456))) + : (c <= 43481 || (c < 43584 + ? (c < 43520 + ? (c >= 43488 && c <= 43518) + : c <= 43574) + : (c <= 43597 || (c >= 43600 && c <= 43609))))))))))))))) + : (c <= 43638 || (c < 71453 + ? (c < 67639 + ? (c < 65345 + ? (c < 64312 + ? (c < 43888 + ? (c < 43785 + ? (c < 43744 + ? (c < 43739 + ? (c >= 43642 && c <= 43714) + : c <= 43741) + : (c <= 43759 || (c < 43777 + ? (c >= 43762 && c <= 43766) + : c <= 43782))) + : (c <= 43790 || (c < 43816 + ? (c < 43808 + ? (c >= 43793 && c <= 43798) + : c <= 43814) + : (c <= 43822 || (c < 43868 + ? (c >= 43824 && c <= 43866) + : c <= 43881))))) + : (c <= 44010 || (c < 63744 + ? (c < 44032 + ? (c < 44016 + ? (c >= 44012 && c <= 44013) + : c <= 44025) + : (c <= 55203 || (c < 55243 + ? (c >= 55216 && c <= 55238) + : c <= 55291))) + : (c <= 64109 || (c < 64275 + ? (c < 64256 + ? (c >= 64112 && c <= 64217) + : c <= 64262) + : (c <= 64279 || (c < 64298 + ? (c >= 64285 && c <= 64296) + : c <= 64310))))))) + : (c <= 64316 || (c < 65075 + ? (c < 64612 + ? (c < 64323 + ? (c < 64320 + ? c == 64318 + : c <= 64321) + : (c <= 64324 || (c < 64467 + ? (c >= 64326 && c <= 64433) + : c <= 64605))) + : (c <= 64829 || (c < 65008 + ? (c < 64914 + ? (c >= 64848 && c <= 64911) + : c <= 64967) + : (c <= 65017 || (c < 65056 + ? (c >= 65024 && c <= 65039) + : c <= 65071))))) + : (c <= 65076 || (c < 65147 + ? (c < 65139 + ? (c < 65137 + ? (c >= 65101 && c <= 65103) + : c <= 65137) + : (c <= 65139 || (c < 65145 + ? c == 65143 + : c <= 65145))) + : (c <= 65147 || (c < 65296 + ? (c < 65151 + ? c == 65149 + : c <= 65276) + : (c <= 65305 || (c < 65343 + ? (c >= 65313 && c <= 65338) + : c <= 65343))))))))) + : (c <= 65370 || (c < 66513 + ? (c < 65664 + ? (c < 65536 + ? (c < 65482 + ? (c < 65474 + ? (c >= 65382 && c <= 65470) + : c <= 65479) + : (c <= 65487 || (c < 65498 + ? (c >= 65490 && c <= 65495) + : c <= 65500))) + : (c <= 65547 || (c < 65596 + ? (c < 65576 + ? (c >= 65549 && c <= 65574) + : c <= 65594) + : (c <= 65597 || (c < 65616 + ? (c >= 65599 && c <= 65613) + : c <= 65629))))) + : (c <= 65786 || (c < 66304 + ? (c < 66176 + ? (c < 66045 + ? (c >= 65856 && c <= 65908) + : c <= 66045) + : (c <= 66204 || (c < 66272 + ? (c >= 66208 && c <= 66256) + : c <= 66272))) + : (c <= 66335 || (c < 66432 + ? (c < 66384 + ? (c >= 66349 && c <= 66378) + : c <= 66426) + : (c <= 66461 || (c < 66504 + ? (c >= 66464 && c <= 66499) + : c <= 66511))))))) + : (c <= 66517 || (c < 66979 + ? (c < 66864 + ? (c < 66736 + ? (c < 66720 + ? (c >= 66560 && c <= 66717) + : c <= 66729) + : (c <= 66771 || (c < 66816 + ? (c >= 66776 && c <= 66811) + : c <= 66855))) + : (c <= 66915 || (c < 66956 + ? (c < 66940 + ? (c >= 66928 && c <= 66938) + : c <= 66954) + : (c <= 66962 || (c < 66967 + ? (c >= 66964 && c <= 66965) + : c <= 66977))))) + : (c <= 66993 || (c < 67456 + ? (c < 67072 + ? (c < 67003 + ? (c >= 66995 && c <= 67001) + : c <= 67004) + : (c <= 67382 || (c < 67424 + ? (c >= 67392 && c <= 67413) + : c <= 67431))) + : (c <= 67461 || (c < 67584 + ? (c < 67506 + ? (c >= 67463 && c <= 67504) + : c <= 67514) + : (c <= 67589 || (c < 67594 + ? c == 67592 + : c <= 67637))))))))))) + : (c <= 67640 || (c < 69956 + ? (c < 68448 + ? (c < 68101 + ? (c < 67828 + ? (c < 67680 + ? (c < 67647 + ? c == 67644 + : c <= 67669) + : (c <= 67702 || (c < 67808 + ? (c >= 67712 && c <= 67742) + : c <= 67826))) + : (c <= 67829 || (c < 67968 + ? (c < 67872 + ? (c >= 67840 && c <= 67861) + : c <= 67897) + : (c <= 68023 || (c < 68096 + ? (c >= 68030 && c <= 68031) + : c <= 68099))))) + : (c <= 68102 || (c < 68192 + ? (c < 68121 + ? (c < 68117 + ? (c >= 68108 && c <= 68115) + : c <= 68119) + : (c <= 68149 || (c < 68159 + ? (c >= 68152 && c <= 68154) + : c <= 68159))) + : (c <= 68220 || (c < 68297 + ? (c < 68288 + ? (c >= 68224 && c <= 68252) + : c <= 68295) + : (c <= 68326 || (c < 68416 + ? (c >= 68352 && c <= 68405) + : c <= 68437))))))) + : (c <= 68466 || (c < 69424 + ? (c < 68912 + ? (c < 68736 + ? (c < 68608 + ? (c >= 68480 && c <= 68497) + : c <= 68680) + : (c <= 68786 || (c < 68864 + ? (c >= 68800 && c <= 68850) + : c <= 68903))) + : (c <= 68921 || (c < 69296 + ? (c < 69291 + ? (c >= 69248 && c <= 69289) + : c <= 69292) + : (c <= 69297 || (c < 69415 + ? (c >= 69376 && c <= 69404) + : c <= 69415))))) + : (c <= 69456 || (c < 69759 + ? (c < 69600 + ? (c < 69552 + ? (c >= 69488 && c <= 69509) + : c <= 69572) + : (c <= 69622 || (c < 69734 + ? (c >= 69632 && c <= 69702) + : c <= 69749))) + : (c <= 69818 || (c < 69872 + ? (c < 69840 + ? c == 69826 + : c <= 69864) + : (c <= 69881 || (c < 69942 + ? (c >= 69888 && c <= 69940) + : c <= 69951))))))))) + : (c <= 69959 || (c < 70459 + ? (c < 70282 + ? (c < 70108 + ? (c < 70016 + ? (c < 70006 + ? (c >= 69968 && c <= 70003) + : c <= 70006) + : (c <= 70084 || (c < 70094 + ? (c >= 70089 && c <= 70092) + : c <= 70106))) + : (c <= 70108 || (c < 70206 + ? (c < 70163 + ? (c >= 70144 && c <= 70161) + : c <= 70199) + : (c <= 70206 || (c < 70280 + ? (c >= 70272 && c <= 70278) + : c <= 70280))))) + : (c <= 70285 || (c < 70405 + ? (c < 70320 + ? (c < 70303 + ? (c >= 70287 && c <= 70301) + : c <= 70312) + : (c <= 70378 || (c < 70400 + ? (c >= 70384 && c <= 70393) + : c <= 70403))) + : (c <= 70412 || (c < 70442 + ? (c < 70419 + ? (c >= 70415 && c <= 70416) + : c <= 70440) + : (c <= 70448 || (c < 70453 + ? (c >= 70450 && c <= 70451) + : c <= 70457))))))) + : (c <= 70468 || (c < 70855 + ? (c < 70502 + ? (c < 70480 + ? (c < 70475 + ? (c >= 70471 && c <= 70472) + : c <= 70477) + : (c <= 70480 || (c < 70493 + ? c == 70487 + : c <= 70499))) + : (c <= 70508 || (c < 70736 + ? (c < 70656 + ? (c >= 70512 && c <= 70516) + : c <= 70730) + : (c <= 70745 || (c < 70784 + ? (c >= 70750 && c <= 70753) + : c <= 70853))))) + : (c <= 70855 || (c < 71236 + ? (c < 71096 + ? (c < 71040 + ? (c >= 70864 && c <= 70873) + : c <= 71093) + : (c <= 71104 || (c < 71168 + ? (c >= 71128 && c <= 71133) + : c <= 71232))) + : (c <= 71236 || (c < 71360 + ? (c < 71296 + ? (c >= 71248 && c <= 71257) + : c <= 71352) + : (c <= 71369 || (c >= 71424 && c <= 71450))))))))))))) + : (c <= 71467 || (c < 119973 + ? (c < 77824 + ? (c < 72760 + ? (c < 72016 + ? (c < 71945 + ? (c < 71680 + ? (c < 71488 + ? (c >= 71472 && c <= 71481) + : c <= 71494) + : (c <= 71738 || (c < 71935 + ? (c >= 71840 && c <= 71913) + : c <= 71942))) + : (c <= 71945 || (c < 71960 + ? (c < 71957 + ? (c >= 71948 && c <= 71955) + : c <= 71958) + : (c <= 71989 || (c < 71995 + ? (c >= 71991 && c <= 71992) + : c <= 72003))))) + : (c <= 72025 || (c < 72263 + ? (c < 72154 + ? (c < 72106 + ? (c >= 72096 && c <= 72103) + : c <= 72151) + : (c <= 72161 || (c < 72192 + ? (c >= 72163 && c <= 72164) + : c <= 72254))) + : (c <= 72263 || (c < 72368 + ? (c < 72349 + ? (c >= 72272 && c <= 72345) + : c <= 72349) + : (c <= 72440 || (c < 72714 + ? (c >= 72704 && c <= 72712) + : c <= 72758))))))) + : (c <= 72768 || (c < 73056 + ? (c < 72968 + ? (c < 72850 + ? (c < 72818 + ? (c >= 72784 && c <= 72793) + : c <= 72847) + : (c <= 72871 || (c < 72960 + ? (c >= 72873 && c <= 72886) + : c <= 72966))) + : (c <= 72969 || (c < 73020 + ? (c < 73018 + ? (c >= 72971 && c <= 73014) + : c <= 73018) + : (c <= 73021 || (c < 73040 + ? (c >= 73023 && c <= 73031) + : c <= 73049))))) + : (c <= 73061 || (c < 73440 + ? (c < 73104 + ? (c < 73066 + ? (c >= 73063 && c <= 73064) + : c <= 73102) + : (c <= 73105 || (c < 73120 + ? (c >= 73107 && c <= 73112) + : c <= 73129))) + : (c <= 73462 || (c < 74752 + ? (c < 73728 + ? c == 73648 + : c <= 74649) + : (c <= 74862 || (c < 77712 + ? (c >= 74880 && c <= 75075) + : c <= 77808))))))))) + : (c <= 78894 || (c < 110576 + ? (c < 93027 + ? (c < 92864 + ? (c < 92736 + ? (c < 92160 + ? (c >= 82944 && c <= 83526) + : c <= 92728) + : (c <= 92766 || (c < 92784 + ? (c >= 92768 && c <= 92777) + : c <= 92862))) + : (c <= 92873 || (c < 92928 + ? (c < 92912 + ? (c >= 92880 && c <= 92909) + : c <= 92916) + : (c <= 92982 || (c < 93008 + ? (c >= 92992 && c <= 92995) + : c <= 93017))))) + : (c <= 93047 || (c < 94176 + ? (c < 93952 + ? (c < 93760 + ? (c >= 93053 && c <= 93071) + : c <= 93823) + : (c <= 94026 || (c < 94095 + ? (c >= 94031 && c <= 94087) + : c <= 94111))) + : (c <= 94177 || (c < 94208 + ? (c < 94192 + ? (c >= 94179 && c <= 94180) + : c <= 94193) + : (c <= 100343 || (c < 101632 + ? (c >= 100352 && c <= 101589) + : c <= 101640))))))) + : (c <= 110579 || (c < 118528 + ? (c < 110960 + ? (c < 110592 + ? (c < 110589 + ? (c >= 110581 && c <= 110587) + : c <= 110590) + : (c <= 110882 || (c < 110948 + ? (c >= 110928 && c <= 110930) + : c <= 110951))) + : (c <= 111355 || (c < 113792 + ? (c < 113776 + ? (c >= 113664 && c <= 113770) + : c <= 113788) + : (c <= 113800 || (c < 113821 + ? (c >= 113808 && c <= 113817) + : c <= 113822))))) + : (c <= 118573 || (c < 119210 + ? (c < 119149 + ? (c < 119141 + ? (c >= 118576 && c <= 118598) + : c <= 119145) + : (c <= 119154 || (c < 119173 + ? (c >= 119163 && c <= 119170) + : c <= 119179))) + : (c <= 119213 || (c < 119894 + ? (c < 119808 + ? (c >= 119362 && c <= 119364) + : c <= 119892) + : (c <= 119964 || (c < 119970 + ? (c >= 119966 && c <= 119967) + : c <= 119970))))))))))) + : (c <= 119974 || (c < 124912 + ? (c < 120746 + ? (c < 120134 + ? (c < 120071 + ? (c < 119995 + ? (c < 119982 + ? (c >= 119977 && c <= 119980) + : c <= 119993) + : (c <= 119995 || (c < 120005 + ? (c >= 119997 && c <= 120003) + : c <= 120069))) + : (c <= 120074 || (c < 120094 + ? (c < 120086 + ? (c >= 120077 && c <= 120084) + : c <= 120092) + : (c <= 120121 || (c < 120128 + ? (c >= 120123 && c <= 120126) + : c <= 120132))))) + : (c <= 120134 || (c < 120572 + ? (c < 120488 + ? (c < 120146 + ? (c >= 120138 && c <= 120144) + : c <= 120485) + : (c <= 120512 || (c < 120540 + ? (c >= 120514 && c <= 120538) + : c <= 120570))) + : (c <= 120596 || (c < 120656 + ? (c < 120630 + ? (c >= 120598 && c <= 120628) + : c <= 120654) + : (c <= 120686 || (c < 120714 + ? (c >= 120688 && c <= 120712) + : c <= 120744))))))) + : (c <= 120770 || (c < 122907 + ? (c < 121476 + ? (c < 121344 + ? (c < 120782 + ? (c >= 120772 && c <= 120779) + : c <= 120831) + : (c <= 121398 || (c < 121461 + ? (c >= 121403 && c <= 121452) + : c <= 121461))) + : (c <= 121476 || (c < 122624 + ? (c < 121505 + ? (c >= 121499 && c <= 121503) + : c <= 121519) + : (c <= 122654 || (c < 122888 + ? (c >= 122880 && c <= 122886) + : c <= 122904))))) + : (c <= 122913 || (c < 123214 + ? (c < 123136 + ? (c < 122918 + ? (c >= 122915 && c <= 122916) + : c <= 122922) + : (c <= 123180 || (c < 123200 + ? (c >= 123184 && c <= 123197) + : c <= 123209))) + : (c <= 123214 || (c < 124896 + ? (c < 123584 + ? (c >= 123536 && c <= 123566) + : c <= 123641) + : (c <= 124902 || (c < 124909 + ? (c >= 124904 && c <= 124907) + : c <= 124910))))))))) + : (c <= 124926 || (c < 126557 + ? (c < 126521 + ? (c < 126469 + ? (c < 125184 + ? (c < 125136 + ? (c >= 124928 && c <= 125124) + : c <= 125142) + : (c <= 125259 || (c < 126464 + ? (c >= 125264 && c <= 125273) + : c <= 126467))) + : (c <= 126495 || (c < 126503 + ? (c < 126500 + ? (c >= 126497 && c <= 126498) + : c <= 126500) + : (c <= 126503 || (c < 126516 + ? (c >= 126505 && c <= 126514) + : c <= 126519))))) + : (c <= 126521 || (c < 126541 + ? (c < 126535 + ? (c < 126530 + ? c == 126523 + : c <= 126530) + : (c <= 126535 || (c < 126539 + ? c == 126537 + : c <= 126539))) + : (c <= 126543 || (c < 126551 + ? (c < 126548 + ? (c >= 126545 && c <= 126546) + : c <= 126548) + : (c <= 126551 || (c < 126555 + ? c == 126553 + : c <= 126555))))))) + : (c <= 126557 || (c < 126629 + ? (c < 126580 + ? (c < 126564 + ? (c < 126561 + ? c == 126559 + : c <= 126562) + : (c <= 126564 || (c < 126572 + ? (c >= 126567 && c <= 126570) + : c <= 126578))) + : (c <= 126583 || (c < 126592 + ? (c < 126590 + ? (c >= 126585 && c <= 126588) + : c <= 126590) + : (c <= 126601 || (c < 126625 + ? (c >= 126603 && c <= 126619) + : c <= 126627))))) + : (c <= 126633 || (c < 178208 + ? (c < 131072 + ? (c < 130032 + ? (c >= 126635 && c <= 126651) + : c <= 130041) + : (c <= 173791 || (c < 177984 + ? (c >= 173824 && c <= 177976) + : c <= 178205))) + : (c <= 183969 || (c < 196608 + ? (c < 194560 + ? (c >= 183984 && c <= 191456) + : c <= 195101) + : (c <= 201546 || (c >= 917760 && c <= 917999))))))))))))))))); +} + +static bool ts_lex(TSLexer *lexer, TSStateId state) { + START_LEXER(); + eof = lexer->eof(lexer); + switch (state) { + case 0: + if (eof) ADVANCE(65); + if (lookahead == '!') ADVANCE(22); + if (lookahead == '#') ADVANCE(165); + if (lookahead == '%') ADVANCE(98); + if (lookahead == '&') ADVANCE(100); + if (lookahead == '(') ADVANCE(68); + if (lookahead == ')') ADVANCE(69); + if (lookahead == '*') ADVANCE(71); + if (lookahead == '+') ADVANCE(85); + if (lookahead == ',') ADVANCE(70); + if (lookahead == '-') ADVANCE(83); + if (lookahead == '.') ADVANCE(67); + if (lookahead == '/') ADVANCE(96); + if (lookahead == '0') ADVANCE(138); + if (lookahead == ':') ADVANCE(76); + if (lookahead == ';') ADVANCE(166); + if (lookahead == '<') ADVANCE(104); + if (lookahead == '=') ADVANCE(92); + if (lookahead == '>') ADVANCE(110); + if (lookahead == '@') ADVANCE(95); + if (lookahead == '[') ADVANCE(86); + if (lookahead == '\\') SKIP(54) + if (lookahead == ']') ADVANCE(87); + if (lookahead == '^') ADVANCE(101); + if (lookahead == 'e') ADVANCE(161); + if (lookahead == '{') ADVANCE(127); + if (lookahead == '|') ADVANCE(80); + if (lookahead == '}') ADVANCE(89); + if (lookahead == '~') ADVANCE(103); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(61) + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(137); + if (sym_identifier_character_set_1(lookahead)) ADVANCE(164); + END_STATE(); + case 1: + if (lookahead == '\n') SKIP(16) + END_STATE(); + case 2: + if (lookahead == '\n') SKIP(16) + if (lookahead == '\r') SKIP(1) + END_STATE(); + case 3: + if (lookahead == '\n') SKIP(15) + END_STATE(); + case 4: + if (lookahead == '\n') SKIP(15) + if (lookahead == '\r') SKIP(3) + END_STATE(); + case 5: + if (lookahead == '\n') SKIP(19) + END_STATE(); + case 6: + if (lookahead == '\n') SKIP(19) + if (lookahead == '\r') SKIP(5) + END_STATE(); + case 7: + if (lookahead == '\n') ADVANCE(130); + END_STATE(); + case 8: + if (lookahead == '\n') SKIP(9) + if (lookahead == '#') ADVANCE(134); + if (lookahead == '\\') ADVANCE(132); + if (lookahead == '{') ADVANCE(127); + if (lookahead == '}') ADVANCE(89); + if (lookahead == '\t' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) ADVANCE(133); + if (lookahead != 0) ADVANCE(134); + END_STATE(); + case 9: + if (lookahead == '\n') SKIP(9) + if (lookahead == '#') ADVANCE(134); + if (lookahead == '\\') ADVANCE(132); + if (lookahead == '}') ADVANCE(89); + if (lookahead == '\t' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) ADVANCE(133); + if (lookahead != 0 && + lookahead != '{') ADVANCE(134); + END_STATE(); + case 10: + if (lookahead == '\n') SKIP(17) + END_STATE(); + case 11: + if (lookahead == '\n') SKIP(17) + if (lookahead == '\r') SKIP(10) + END_STATE(); + case 12: + if (lookahead == '\n') SKIP(14) + END_STATE(); + case 13: + if (lookahead == '\n') SKIP(14) + if (lookahead == '\r') SKIP(12) + END_STATE(); + case 14: + if (lookahead == '!') ADVANCE(22); + if (lookahead == '#') ADVANCE(165); + if (lookahead == '%') ADVANCE(98); + if (lookahead == '&') ADVANCE(100); + if (lookahead == '(') ADVANCE(68); + if (lookahead == ')') ADVANCE(69); + if (lookahead == '*') ADVANCE(71); + if (lookahead == '+') ADVANCE(85); + if (lookahead == ',') ADVANCE(70); + if (lookahead == '-') ADVANCE(82); + if (lookahead == '.') ADVANCE(66); + if (lookahead == '/') ADVANCE(96); + if (lookahead == ':') ADVANCE(76); + if (lookahead == ';') ADVANCE(166); + if (lookahead == '<') ADVANCE(104); + if (lookahead == '=') ADVANCE(92); + if (lookahead == '>') ADVANCE(110); + if (lookahead == '@') ADVANCE(95); + if (lookahead == '[') ADVANCE(86); + if (lookahead == '\\') SKIP(13) + if (lookahead == ']') ADVANCE(87); + if (lookahead == '^') ADVANCE(101); + if (lookahead == '|') ADVANCE(80); + if (lookahead == '}') ADVANCE(89); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(14) + if (sym_identifier_character_set_1(lookahead)) ADVANCE(164); + END_STATE(); + case 15: + if (lookahead == '!') ADVANCE(22); + if (lookahead == '#') ADVANCE(165); + if (lookahead == '%') ADVANCE(98); + if (lookahead == '&') ADVANCE(100); + if (lookahead == '(') ADVANCE(68); + if (lookahead == ')') ADVANCE(69); + if (lookahead == '*') ADVANCE(71); + if (lookahead == '+') ADVANCE(85); + if (lookahead == ',') ADVANCE(70); + if (lookahead == '-') ADVANCE(82); + if (lookahead == '.') ADVANCE(66); + if (lookahead == '/') ADVANCE(96); + if (lookahead == ':') ADVANCE(75); + if (lookahead == ';') ADVANCE(166); + if (lookahead == '<') ADVANCE(104); + if (lookahead == '=') ADVANCE(92); + if (lookahead == '>') ADVANCE(110); + if (lookahead == '@') ADVANCE(95); + if (lookahead == '[') ADVANCE(86); + if (lookahead == '\\') SKIP(4) + if (lookahead == ']') ADVANCE(87); + if (lookahead == '^') ADVANCE(101); + if (lookahead == '|') ADVANCE(80); + if (lookahead == '}') ADVANCE(89); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(15) + if (sym_identifier_character_set_1(lookahead)) ADVANCE(164); + END_STATE(); + case 16: + if (lookahead == '!') ADVANCE(22); + if (lookahead == '#') ADVANCE(165); + if (lookahead == '%') ADVANCE(23); + if (lookahead == '&') ADVANCE(24); + if (lookahead == '(') ADVANCE(68); + if (lookahead == ')') ADVANCE(69); + if (lookahead == '*') ADVANCE(71); + if (lookahead == '+') ADVANCE(85); + if (lookahead == ',') ADVANCE(70); + if (lookahead == '-') ADVANCE(82); + if (lookahead == '.') ADVANCE(20); + if (lookahead == '/') ADVANCE(97); + if (lookahead == '0') ADVANCE(138); + if (lookahead == ':') ADVANCE(75); + if (lookahead == '<') ADVANCE(105); + if (lookahead == '=') ADVANCE(92); + if (lookahead == '>') ADVANCE(111); + if (lookahead == '@') ADVANCE(25); + if (lookahead == '[') ADVANCE(86); + if (lookahead == '\\') SKIP(2) + if (lookahead == ']') ADVANCE(87); + if (lookahead == '^') ADVANCE(26); + if (lookahead == '{') ADVANCE(88); + if (lookahead == '|') ADVANCE(80); + if (lookahead == '}') ADVANCE(89); + if (lookahead == '~') ADVANCE(103); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(16) + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(137); + if (sym_identifier_character_set_1(lookahead)) ADVANCE(164); + END_STATE(); + case 17: + if (lookahead == '#') ADVANCE(165); + if (lookahead == '-') ADVANCE(30); + if (lookahead == ':') ADVANCE(75); + if (lookahead == '\\') SKIP(11) + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(17) + END_STATE(); + case 18: + if (lookahead == '#') ADVANCE(165); + if (lookahead == '\\') ADVANCE(131); + if (lookahead == '{') ADVANCE(128); + if (lookahead == '}') ADVANCE(36); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(19) + END_STATE(); + case 19: + if (lookahead == '#') ADVANCE(165); + if (lookahead == '\\') SKIP(6) + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(19) + END_STATE(); + case 20: + if (lookahead == '.') ADVANCE(21); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(144); + END_STATE(); + case 21: + if (lookahead == '.') ADVANCE(126); + END_STATE(); + case 22: + if (lookahead == '=') ADVANCE(108); + if (('a' <= lookahead && lookahead <= 'z')) ADVANCE(135); + END_STATE(); + case 23: + if (lookahead == '=') ADVANCE(119); + END_STATE(); + case 24: + if (lookahead == '=') ADVANCE(123); + END_STATE(); + case 25: + if (lookahead == '=') ADVANCE(117); + END_STATE(); + case 26: + if (lookahead == '=') ADVANCE(124); + END_STATE(); + case 27: + if (lookahead == '=') ADVANCE(118); + END_STATE(); + case 28: + if (lookahead == '=') ADVANCE(122); + END_STATE(); + case 29: + if (lookahead == '=') ADVANCE(121); + END_STATE(); + case 30: + if (lookahead == '>') ADVANCE(93); + END_STATE(); + case 31: + if (lookahead == '_') ADVANCE(38); + if (lookahead == '0' || + lookahead == '1') ADVANCE(140); + END_STATE(); + case 32: + if (lookahead == '_') ADVANCE(39); + if (('0' <= lookahead && lookahead <= '7')) ADVANCE(141); + END_STATE(); + case 33: + if (lookahead == '_') ADVANCE(43); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(142); + END_STATE(); + case 34: + if (lookahead == '{') ADVANCE(52); + END_STATE(); + case 35: + if (lookahead == '}') ADVANCE(130); + if (lookahead != 0) ADVANCE(35); + END_STATE(); + case 36: + if (lookahead == '}') ADVANCE(129); + END_STATE(); + case 37: + if (lookahead == '+' || + lookahead == '-') ADVANCE(40); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(145); + END_STATE(); + case 38: + if (lookahead == '0' || + lookahead == '1') ADVANCE(140); + END_STATE(); + case 39: + if (('0' <= lookahead && lookahead <= '7')) ADVANCE(141); + END_STATE(); + case 40: + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(145); + END_STATE(); + case 41: + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(130); + END_STATE(); + case 42: + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(41); + END_STATE(); + case 43: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(142); + END_STATE(); + case 44: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(130); + END_STATE(); + case 45: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(44); + END_STATE(); + case 46: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(45); + END_STATE(); + case 47: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(46); + END_STATE(); + case 48: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(47); + END_STATE(); + case 49: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(48); + END_STATE(); + case 50: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(49); + END_STATE(); + case 51: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(50); + END_STATE(); + case 52: + if (lookahead != 0 && + lookahead != '}') ADVANCE(35); + END_STATE(); + case 53: + if (eof) ADVANCE(65); + if (lookahead == '\n') SKIP(61) + END_STATE(); + case 54: + if (eof) ADVANCE(65); + if (lookahead == '\n') SKIP(61) + if (lookahead == '\r') SKIP(53) + END_STATE(); + case 55: + if (eof) ADVANCE(65); + if (lookahead == '\n') SKIP(62) + END_STATE(); + case 56: + if (eof) ADVANCE(65); + if (lookahead == '\n') SKIP(62) + if (lookahead == '\r') SKIP(55) + END_STATE(); + case 57: + if (eof) ADVANCE(65); + if (lookahead == '\n') SKIP(63) + END_STATE(); + case 58: + if (eof) ADVANCE(65); + if (lookahead == '\n') SKIP(63) + if (lookahead == '\r') SKIP(57) + END_STATE(); + case 59: + if (eof) ADVANCE(65); + if (lookahead == '\n') SKIP(64) + END_STATE(); + case 60: + if (eof) ADVANCE(65); + if (lookahead == '\n') SKIP(64) + if (lookahead == '\r') SKIP(59) + END_STATE(); + case 61: + if (eof) ADVANCE(65); + if (lookahead == '!') ADVANCE(22); + if (lookahead == '#') ADVANCE(165); + if (lookahead == '%') ADVANCE(98); + if (lookahead == '&') ADVANCE(100); + if (lookahead == '(') ADVANCE(68); + if (lookahead == ')') ADVANCE(69); + if (lookahead == '*') ADVANCE(71); + if (lookahead == '+') ADVANCE(85); + if (lookahead == ',') ADVANCE(70); + if (lookahead == '-') ADVANCE(83); + if (lookahead == '.') ADVANCE(67); + if (lookahead == '/') ADVANCE(96); + if (lookahead == '0') ADVANCE(138); + if (lookahead == ':') ADVANCE(76); + if (lookahead == ';') ADVANCE(166); + if (lookahead == '<') ADVANCE(104); + if (lookahead == '=') ADVANCE(92); + if (lookahead == '>') ADVANCE(110); + if (lookahead == '@') ADVANCE(95); + if (lookahead == '[') ADVANCE(86); + if (lookahead == '\\') SKIP(54) + if (lookahead == ']') ADVANCE(87); + if (lookahead == '^') ADVANCE(101); + if (lookahead == 'e') ADVANCE(161); + if (lookahead == '{') ADVANCE(88); + if (lookahead == '|') ADVANCE(80); + if (lookahead == '}') ADVANCE(89); + if (lookahead == '~') ADVANCE(103); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(61) + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(137); + if (sym_identifier_character_set_1(lookahead)) ADVANCE(164); + END_STATE(); + case 62: + if (eof) ADVANCE(65); + if (lookahead == '!') ADVANCE(22); + if (lookahead == '#') ADVANCE(165); + if (lookahead == '%') ADVANCE(98); + if (lookahead == '&') ADVANCE(100); + if (lookahead == '(') ADVANCE(68); + if (lookahead == ')') ADVANCE(69); + if (lookahead == '*') ADVANCE(71); + if (lookahead == '+') ADVANCE(85); + if (lookahead == ',') ADVANCE(70); + if (lookahead == '-') ADVANCE(82); + if (lookahead == '.') ADVANCE(67); + if (lookahead == '/') ADVANCE(96); + if (lookahead == '0') ADVANCE(138); + if (lookahead == ':') ADVANCE(76); + if (lookahead == ';') ADVANCE(166); + if (lookahead == '<') ADVANCE(104); + if (lookahead == '=') ADVANCE(92); + if (lookahead == '>') ADVANCE(110); + if (lookahead == '@') ADVANCE(95); + if (lookahead == '[') ADVANCE(86); + if (lookahead == '\\') SKIP(56) + if (lookahead == ']') ADVANCE(87); + if (lookahead == '^') ADVANCE(101); + if (lookahead == '{') ADVANCE(88); + if (lookahead == '|') ADVANCE(80); + if (lookahead == '}') ADVANCE(89); + if (lookahead == '~') ADVANCE(103); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(62) + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(137); + if (sym_identifier_character_set_1(lookahead)) ADVANCE(164); + END_STATE(); + case 63: + if (eof) ADVANCE(65); + if (lookahead == '#') ADVANCE(165); + if (lookahead == '(') ADVANCE(68); + if (lookahead == '*') ADVANCE(72); + if (lookahead == '+') ADVANCE(84); + if (lookahead == '-') ADVANCE(81); + if (lookahead == '.') ADVANCE(20); + if (lookahead == '0') ADVANCE(138); + if (lookahead == '@') ADVANCE(94); + if (lookahead == '[') ADVANCE(86); + if (lookahead == '\\') SKIP(58) + if (lookahead == 'e') ADVANCE(162); + if (lookahead == '{') ADVANCE(88); + if (lookahead == '~') ADVANCE(103); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(63) + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(137); + if (sym_identifier_character_set_2(lookahead)) ADVANCE(164); + END_STATE(); + case 64: + if (eof) ADVANCE(65); + if (lookahead == '#') ADVANCE(165); + if (lookahead == '(') ADVANCE(68); + if (lookahead == '*') ADVANCE(72); + if (lookahead == '+') ADVANCE(84); + if (lookahead == '-') ADVANCE(81); + if (lookahead == '.') ADVANCE(20); + if (lookahead == '0') ADVANCE(138); + if (lookahead == '@') ADVANCE(94); + if (lookahead == '[') ADVANCE(86); + if (lookahead == '\\') SKIP(60) + if (lookahead == 'e') ADVANCE(163); + if (lookahead == '{') ADVANCE(88); + if (lookahead == '~') ADVANCE(103); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(64) + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(137); + if (sym_identifier_character_set_2(lookahead)) ADVANCE(164); + END_STATE(); + case 65: + ACCEPT_TOKEN(ts_builtin_sym_end); + END_STATE(); + case 66: + ACCEPT_TOKEN(anon_sym_DOT); + END_STATE(); + case 67: + ACCEPT_TOKEN(anon_sym_DOT); + if (lookahead == '.') ADVANCE(21); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(144); + END_STATE(); + case 68: + ACCEPT_TOKEN(anon_sym_LPAREN); + END_STATE(); + case 69: + ACCEPT_TOKEN(anon_sym_RPAREN); + END_STATE(); + case 70: + ACCEPT_TOKEN(anon_sym_COMMA); + END_STATE(); + case 71: + ACCEPT_TOKEN(anon_sym_STAR); + if (lookahead == '*') ADVANCE(91); + if (lookahead == '=') ADVANCE(115); + END_STATE(); + case 72: + ACCEPT_TOKEN(anon_sym_STAR); + if (lookahead == '*') ADVANCE(90); + END_STATE(); + case 73: + ACCEPT_TOKEN(anon_sym_GT_GT); + if (lookahead == '=') ADVANCE(121); + END_STATE(); + case 74: + ACCEPT_TOKEN(anon_sym_COLON_EQ); + END_STATE(); + case 75: + ACCEPT_TOKEN(anon_sym_COLON); + END_STATE(); + case 76: + ACCEPT_TOKEN(anon_sym_COLON); + if (lookahead == '=') ADVANCE(74); + END_STATE(); + case 77: + ACCEPT_TOKEN(anon_sym_except); + if (lookahead == '*') ADVANCE(79); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 78: + ACCEPT_TOKEN(anon_sym_except); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 79: + ACCEPT_TOKEN(anon_sym_except_STAR); + END_STATE(); + case 80: + ACCEPT_TOKEN(anon_sym_PIPE); + if (lookahead == '=') ADVANCE(125); + END_STATE(); + case 81: + ACCEPT_TOKEN(anon_sym_DASH); + END_STATE(); + case 82: + ACCEPT_TOKEN(anon_sym_DASH); + if (lookahead == '=') ADVANCE(114); + END_STATE(); + case 83: + ACCEPT_TOKEN(anon_sym_DASH); + if (lookahead == '=') ADVANCE(114); + if (lookahead == '>') ADVANCE(93); + END_STATE(); + case 84: + ACCEPT_TOKEN(anon_sym_PLUS); + END_STATE(); + case 85: + ACCEPT_TOKEN(anon_sym_PLUS); + if (lookahead == '=') ADVANCE(113); + END_STATE(); + case 86: + ACCEPT_TOKEN(anon_sym_LBRACK); + END_STATE(); + case 87: + ACCEPT_TOKEN(anon_sym_RBRACK); + END_STATE(); + case 88: + ACCEPT_TOKEN(anon_sym_LBRACE); + END_STATE(); + case 89: + ACCEPT_TOKEN(anon_sym_RBRACE); + END_STATE(); + case 90: + ACCEPT_TOKEN(anon_sym_STAR_STAR); + END_STATE(); + case 91: + ACCEPT_TOKEN(anon_sym_STAR_STAR); + if (lookahead == '=') ADVANCE(120); + END_STATE(); + case 92: + ACCEPT_TOKEN(anon_sym_EQ); + if (lookahead == '=') ADVANCE(107); + END_STATE(); + case 93: + ACCEPT_TOKEN(anon_sym_DASH_GT); + END_STATE(); + case 94: + ACCEPT_TOKEN(anon_sym_AT); + END_STATE(); + case 95: + ACCEPT_TOKEN(anon_sym_AT); + if (lookahead == '=') ADVANCE(117); + END_STATE(); + case 96: + ACCEPT_TOKEN(anon_sym_SLASH); + if (lookahead == '/') ADVANCE(99); + if (lookahead == '=') ADVANCE(116); + END_STATE(); + case 97: + ACCEPT_TOKEN(anon_sym_SLASH); + if (lookahead == '/') ADVANCE(27); + if (lookahead == '=') ADVANCE(116); + END_STATE(); + case 98: + ACCEPT_TOKEN(anon_sym_PERCENT); + if (lookahead == '=') ADVANCE(119); + END_STATE(); + case 99: + ACCEPT_TOKEN(anon_sym_SLASH_SLASH); + if (lookahead == '=') ADVANCE(118); + END_STATE(); + case 100: + ACCEPT_TOKEN(anon_sym_AMP); + if (lookahead == '=') ADVANCE(123); + END_STATE(); + case 101: + ACCEPT_TOKEN(anon_sym_CARET); + if (lookahead == '=') ADVANCE(124); + END_STATE(); + case 102: + ACCEPT_TOKEN(anon_sym_LT_LT); + if (lookahead == '=') ADVANCE(122); + END_STATE(); + case 103: + ACCEPT_TOKEN(anon_sym_TILDE); + END_STATE(); + case 104: + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '<') ADVANCE(102); + if (lookahead == '=') ADVANCE(106); + if (lookahead == '>') ADVANCE(112); + END_STATE(); + case 105: + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '<') ADVANCE(28); + if (lookahead == '=') ADVANCE(106); + if (lookahead == '>') ADVANCE(112); + END_STATE(); + case 106: + ACCEPT_TOKEN(anon_sym_LT_EQ); + END_STATE(); + case 107: + ACCEPT_TOKEN(anon_sym_EQ_EQ); + END_STATE(); + case 108: + ACCEPT_TOKEN(anon_sym_BANG_EQ); + END_STATE(); + case 109: + ACCEPT_TOKEN(anon_sym_GT_EQ); + END_STATE(); + case 110: + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(109); + if (lookahead == '>') ADVANCE(73); + END_STATE(); + case 111: + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(109); + if (lookahead == '>') ADVANCE(29); + END_STATE(); + case 112: + ACCEPT_TOKEN(anon_sym_LT_GT); + END_STATE(); + case 113: + ACCEPT_TOKEN(anon_sym_PLUS_EQ); + END_STATE(); + case 114: + ACCEPT_TOKEN(anon_sym_DASH_EQ); + END_STATE(); + case 115: + ACCEPT_TOKEN(anon_sym_STAR_EQ); + END_STATE(); + case 116: + ACCEPT_TOKEN(anon_sym_SLASH_EQ); + END_STATE(); + case 117: + ACCEPT_TOKEN(anon_sym_AT_EQ); + END_STATE(); + case 118: + ACCEPT_TOKEN(anon_sym_SLASH_SLASH_EQ); + END_STATE(); + case 119: + ACCEPT_TOKEN(anon_sym_PERCENT_EQ); + END_STATE(); + case 120: + ACCEPT_TOKEN(anon_sym_STAR_STAR_EQ); + END_STATE(); + case 121: + ACCEPT_TOKEN(anon_sym_GT_GT_EQ); + END_STATE(); + case 122: + ACCEPT_TOKEN(anon_sym_LT_LT_EQ); + END_STATE(); + case 123: + ACCEPT_TOKEN(anon_sym_AMP_EQ); + END_STATE(); + case 124: + ACCEPT_TOKEN(anon_sym_CARET_EQ); + END_STATE(); + case 125: + ACCEPT_TOKEN(anon_sym_PIPE_EQ); + END_STATE(); + case 126: + ACCEPT_TOKEN(sym_ellipsis); + END_STATE(); + case 127: + ACCEPT_TOKEN(anon_sym_LBRACE2); + END_STATE(); + case 128: + ACCEPT_TOKEN(anon_sym_LBRACE2); + if (lookahead == '{') ADVANCE(129); + END_STATE(); + case 129: + ACCEPT_TOKEN(sym__escape_interpolation); + END_STATE(); + case 130: + ACCEPT_TOKEN(sym_escape_sequence); + END_STATE(); + case 131: + ACCEPT_TOKEN(sym__not_escape_sequence); + if (lookahead == '\n') ADVANCE(130); + if (lookahead == '\r') ADVANCE(7); + if (lookahead == 'N') ADVANCE(34); + if (lookahead == 'U') ADVANCE(51); + if (lookahead == 'u') ADVANCE(47); + if (lookahead == 'x') ADVANCE(45); + if (lookahead == '"' || + lookahead == '\'' || + lookahead == '\\' || + lookahead == 'a' || + lookahead == 'b' || + lookahead == 'f' || + lookahead == 'n' || + lookahead == 'r' || + ('t' <= lookahead && lookahead <= 'v')) ADVANCE(130); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(42); + END_STATE(); + case 132: + ACCEPT_TOKEN(aux_sym_format_specifier_token1); + if (lookahead == '\r') ADVANCE(134); + if (lookahead != 0 && + lookahead != '\n' && + lookahead != '{' && + lookahead != '}') ADVANCE(134); + END_STATE(); + case 133: + ACCEPT_TOKEN(aux_sym_format_specifier_token1); + if (lookahead == '#') ADVANCE(134); + if (lookahead == '\\') ADVANCE(132); + if (lookahead == '\t' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) ADVANCE(133); + if (lookahead != 0 && + lookahead != '\n' && + lookahead != '{' && + lookahead != '}') ADVANCE(134); + END_STATE(); + case 134: + ACCEPT_TOKEN(aux_sym_format_specifier_token1); + if (lookahead != 0 && + lookahead != '\n' && + lookahead != '{' && + lookahead != '}') ADVANCE(134); + END_STATE(); + case 135: + ACCEPT_TOKEN(sym_type_conversion); + END_STATE(); + case 136: + ACCEPT_TOKEN(sym_integer); + END_STATE(); + case 137: + ACCEPT_TOKEN(sym_integer); + if (lookahead == '.') ADVANCE(146); + if (lookahead == '_') ADVANCE(139); + if (lookahead == 'E' || + lookahead == 'e') ADVANCE(37); + if (lookahead == 'J' || + lookahead == 'L' || + lookahead == 'j' || + lookahead == 'l') ADVANCE(136); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(137); + END_STATE(); + case 138: + ACCEPT_TOKEN(sym_integer); + if (lookahead == '.') ADVANCE(146); + if (lookahead == 'B' || + lookahead == 'b') ADVANCE(31); + if (lookahead == 'O' || + lookahead == 'o') ADVANCE(32); + if (lookahead == 'X' || + lookahead == 'x') ADVANCE(33); + if (lookahead == '_') ADVANCE(139); + if (lookahead == 'E' || + lookahead == 'e') ADVANCE(37); + if (lookahead == 'J' || + lookahead == 'L' || + lookahead == 'j' || + lookahead == 'l') ADVANCE(136); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(137); + END_STATE(); + case 139: + ACCEPT_TOKEN(sym_integer); + if (lookahead == '.') ADVANCE(146); + if (lookahead == 'E' || + lookahead == 'e') ADVANCE(37); + if (lookahead == 'J' || + lookahead == 'L' || + lookahead == 'j' || + lookahead == 'l') ADVANCE(136); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(137); + END_STATE(); + case 140: + ACCEPT_TOKEN(sym_integer); + if (lookahead == '_') ADVANCE(38); + if (lookahead == 'L' || + lookahead == 'l') ADVANCE(136); + if (lookahead == '0' || + lookahead == '1') ADVANCE(140); + END_STATE(); + case 141: + ACCEPT_TOKEN(sym_integer); + if (lookahead == '_') ADVANCE(39); + if (lookahead == 'L' || + lookahead == 'l') ADVANCE(136); + if (('0' <= lookahead && lookahead <= '7')) ADVANCE(141); + END_STATE(); + case 142: + ACCEPT_TOKEN(sym_integer); + if (lookahead == '_') ADVANCE(43); + if (lookahead == 'L' || + lookahead == 'l') ADVANCE(136); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(142); + END_STATE(); + case 143: + ACCEPT_TOKEN(sym_float); + END_STATE(); + case 144: + ACCEPT_TOKEN(sym_float); + if (lookahead == '_') ADVANCE(146); + if (lookahead == 'E' || + lookahead == 'e') ADVANCE(37); + if (lookahead == 'J' || + lookahead == 'L' || + lookahead == 'j' || + lookahead == 'l') ADVANCE(143); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(144); + END_STATE(); + case 145: + ACCEPT_TOKEN(sym_float); + if (lookahead == '_') ADVANCE(147); + if (lookahead == 'J' || + lookahead == 'L' || + lookahead == 'j' || + lookahead == 'l') ADVANCE(143); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(145); + END_STATE(); + case 146: + ACCEPT_TOKEN(sym_float); + if (lookahead == 'E' || + lookahead == 'e') ADVANCE(37); + if (lookahead == 'J' || + lookahead == 'L' || + lookahead == 'j' || + lookahead == 'l') ADVANCE(143); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(144); + END_STATE(); + case 147: + ACCEPT_TOKEN(sym_float); + if (lookahead == 'J' || + lookahead == 'L' || + lookahead == 'j' || + lookahead == 'l') ADVANCE(143); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(145); + END_STATE(); + case 148: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == '*') ADVANCE(79); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 149: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'c') ADVANCE(152); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 150: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'c') ADVANCE(153); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 151: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'c') ADVANCE(154); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 152: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'e') ADVANCE(155); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 153: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'e') ADVANCE(156); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 154: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'e') ADVANCE(157); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 155: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'p') ADVANCE(158); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 156: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'p') ADVANCE(159); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 157: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'p') ADVANCE(160); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 158: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 't') ADVANCE(77); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 159: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 't') ADVANCE(78); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 160: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 't') ADVANCE(148); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 161: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'x') ADVANCE(149); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 162: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'x') ADVANCE(150); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 163: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'x') ADVANCE(151); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 164: + ACCEPT_TOKEN(sym_identifier); + if (sym_identifier_character_set_3(lookahead)) ADVANCE(164); + END_STATE(); + case 165: + ACCEPT_TOKEN(sym_comment); + if (lookahead != 0 && + lookahead != '\n') ADVANCE(165); + END_STATE(); + case 166: + ACCEPT_TOKEN(sym__semicolon); + END_STATE(); + default: + return false; + } +} + +static bool ts_lex_keywords(TSLexer *lexer, TSStateId state) { + START_LEXER(); + eof = lexer->eof(lexer); + switch (state) { + case 0: + if (lookahead == 'F') ADVANCE(1); + if (lookahead == 'N') ADVANCE(2); + if (lookahead == 'T') ADVANCE(3); + if (lookahead == '\\') SKIP(4) + if (lookahead == '_') ADVANCE(5); + if (lookahead == 'a') ADVANCE(6); + if (lookahead == 'b') ADVANCE(7); + if (lookahead == 'c') ADVANCE(8); + if (lookahead == 'd') ADVANCE(9); + if (lookahead == 'e') ADVANCE(10); + if (lookahead == 'f') ADVANCE(11); + if (lookahead == 'g') ADVANCE(12); + if (lookahead == 'i') ADVANCE(13); + if (lookahead == 'l') ADVANCE(14); + if (lookahead == 'm') ADVANCE(15); + if (lookahead == 'n') ADVANCE(16); + if (lookahead == 'o') ADVANCE(17); + if (lookahead == 'p') ADVANCE(18); + if (lookahead == 'r') ADVANCE(19); + if (lookahead == 't') ADVANCE(20); + if (lookahead == 'w') ADVANCE(21); + if (lookahead == 'y') ADVANCE(22); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\f' || + lookahead == '\r' || + lookahead == ' ' || + lookahead == 8203 || + lookahead == 8288 || + lookahead == 65279) SKIP(0) + END_STATE(); + case 1: + if (lookahead == 'a') ADVANCE(23); + END_STATE(); + case 2: + if (lookahead == 'o') ADVANCE(24); + END_STATE(); + case 3: + if (lookahead == 'r') ADVANCE(25); + END_STATE(); + case 4: + if (lookahead == '\n') SKIP(0) + if (lookahead == '\r') SKIP(26) + END_STATE(); + case 5: + ACCEPT_TOKEN(sym_match_wildcard_pattern); + if (lookahead == '_') ADVANCE(27); + END_STATE(); + case 6: + if (lookahead == 'n') ADVANCE(28); + if (lookahead == 's') ADVANCE(29); + if (lookahead == 'w') ADVANCE(30); + END_STATE(); + case 7: + if (lookahead == 'r') ADVANCE(31); + END_STATE(); + case 8: + if (lookahead == 'a') ADVANCE(32); + if (lookahead == 'l') ADVANCE(33); + if (lookahead == 'o') ADVANCE(34); + END_STATE(); + case 9: + if (lookahead == 'e') ADVANCE(35); + END_STATE(); + case 10: + if (lookahead == 'l') ADVANCE(36); + if (lookahead == 'x') ADVANCE(37); + END_STATE(); + case 11: + if (lookahead == 'i') ADVANCE(38); + if (lookahead == 'o') ADVANCE(39); + if (lookahead == 'r') ADVANCE(40); + END_STATE(); + case 12: + if (lookahead == 'l') ADVANCE(41); + END_STATE(); + case 13: + if (lookahead == 'f') ADVANCE(42); + if (lookahead == 'm') ADVANCE(43); + if (lookahead == 'n') ADVANCE(44); + if (lookahead == 's') ADVANCE(45); + END_STATE(); + case 14: + if (lookahead == 'a') ADVANCE(46); + END_STATE(); + case 15: + if (lookahead == 'a') ADVANCE(47); + END_STATE(); + case 16: + if (lookahead == 'o') ADVANCE(48); + END_STATE(); + case 17: + if (lookahead == 'r') ADVANCE(49); + END_STATE(); + case 18: + if (lookahead == 'a') ADVANCE(50); + if (lookahead == 'r') ADVANCE(51); + END_STATE(); + case 19: + if (lookahead == 'a') ADVANCE(52); + if (lookahead == 'e') ADVANCE(53); + END_STATE(); + case 20: + if (lookahead == 'r') ADVANCE(54); + if (lookahead == 'y') ADVANCE(55); + END_STATE(); + case 21: + if (lookahead == 'h') ADVANCE(56); + if (lookahead == 'i') ADVANCE(57); + END_STATE(); + case 22: + if (lookahead == 'i') ADVANCE(58); + END_STATE(); + case 23: + if (lookahead == 'l') ADVANCE(59); + END_STATE(); + case 24: + if (lookahead == 'n') ADVANCE(60); + END_STATE(); + case 25: + if (lookahead == 'u') ADVANCE(61); + END_STATE(); + case 26: + if (lookahead == '\n') SKIP(0) + END_STATE(); + case 27: + if (lookahead == 'f') ADVANCE(62); + END_STATE(); + case 28: + if (lookahead == 'd') ADVANCE(63); + END_STATE(); + case 29: + ACCEPT_TOKEN(anon_sym_as); + if (lookahead == 's') ADVANCE(64); + if (lookahead == 'y') ADVANCE(65); + END_STATE(); + case 30: + if (lookahead == 'a') ADVANCE(66); + END_STATE(); + case 31: + if (lookahead == 'e') ADVANCE(67); + END_STATE(); + case 32: + if (lookahead == 's') ADVANCE(68); + END_STATE(); + case 33: + if (lookahead == 'a') ADVANCE(69); + END_STATE(); + case 34: + if (lookahead == 'n') ADVANCE(70); + END_STATE(); + case 35: + if (lookahead == 'f') ADVANCE(71); + if (lookahead == 'l') ADVANCE(72); + END_STATE(); + case 36: + if (lookahead == 'i') ADVANCE(73); + if (lookahead == 's') ADVANCE(74); + END_STATE(); + case 37: + if (lookahead == 'e') ADVANCE(75); + END_STATE(); + case 38: + if (lookahead == 'n') ADVANCE(76); + END_STATE(); + case 39: + if (lookahead == 'r') ADVANCE(77); + END_STATE(); + case 40: + if (lookahead == 'o') ADVANCE(78); + END_STATE(); + case 41: + if (lookahead == 'o') ADVANCE(79); + END_STATE(); + case 42: + ACCEPT_TOKEN(anon_sym_if); + END_STATE(); + case 43: + if (lookahead == 'p') ADVANCE(80); + END_STATE(); + case 44: + ACCEPT_TOKEN(anon_sym_in); + END_STATE(); + case 45: + ACCEPT_TOKEN(anon_sym_is); + END_STATE(); + case 46: + if (lookahead == 'm') ADVANCE(81); + END_STATE(); + case 47: + if (lookahead == 't') ADVANCE(82); + END_STATE(); + case 48: + if (lookahead == 'n') ADVANCE(83); + if (lookahead == 't') ADVANCE(84); + END_STATE(); + case 49: + ACCEPT_TOKEN(anon_sym_or); + END_STATE(); + case 50: + if (lookahead == 's') ADVANCE(85); + END_STATE(); + case 51: + if (lookahead == 'i') ADVANCE(86); + END_STATE(); + case 52: + if (lookahead == 'i') ADVANCE(87); + END_STATE(); + case 53: + if (lookahead == 't') ADVANCE(88); + END_STATE(); + case 54: + if (lookahead == 'y') ADVANCE(89); + END_STATE(); + case 55: + if (lookahead == 'p') ADVANCE(90); + END_STATE(); + case 56: + if (lookahead == 'i') ADVANCE(91); + END_STATE(); + case 57: + if (lookahead == 't') ADVANCE(92); + END_STATE(); + case 58: + if (lookahead == 'e') ADVANCE(93); + END_STATE(); + case 59: + if (lookahead == 's') ADVANCE(94); + END_STATE(); + case 60: + if (lookahead == 'e') ADVANCE(95); + END_STATE(); + case 61: + if (lookahead == 'e') ADVANCE(96); + END_STATE(); + case 62: + if (lookahead == 'u') ADVANCE(97); + END_STATE(); + case 63: + ACCEPT_TOKEN(anon_sym_and); + END_STATE(); + case 64: + if (lookahead == 'e') ADVANCE(98); + END_STATE(); + case 65: + if (lookahead == 'n') ADVANCE(99); + END_STATE(); + case 66: + if (lookahead == 'i') ADVANCE(100); + END_STATE(); + case 67: + if (lookahead == 'a') ADVANCE(101); + END_STATE(); + case 68: + if (lookahead == 'e') ADVANCE(102); + END_STATE(); + case 69: + if (lookahead == 's') ADVANCE(103); + END_STATE(); + case 70: + if (lookahead == 't') ADVANCE(104); + END_STATE(); + case 71: + ACCEPT_TOKEN(anon_sym_def); + END_STATE(); + case 72: + ACCEPT_TOKEN(anon_sym_del); + END_STATE(); + case 73: + if (lookahead == 'f') ADVANCE(105); + END_STATE(); + case 74: + if (lookahead == 'e') ADVANCE(106); + END_STATE(); + case 75: + if (lookahead == 'c') ADVANCE(107); + END_STATE(); + case 76: + if (lookahead == 'a') ADVANCE(108); + END_STATE(); + case 77: + ACCEPT_TOKEN(anon_sym_for); + END_STATE(); + case 78: + if (lookahead == 'm') ADVANCE(109); + END_STATE(); + case 79: + if (lookahead == 'b') ADVANCE(110); + END_STATE(); + case 80: + if (lookahead == 'o') ADVANCE(111); + END_STATE(); + case 81: + if (lookahead == 'b') ADVANCE(112); + END_STATE(); + case 82: + if (lookahead == 'c') ADVANCE(113); + END_STATE(); + case 83: + if (lookahead == 'l') ADVANCE(114); + END_STATE(); + case 84: + ACCEPT_TOKEN(anon_sym_not); + END_STATE(); + case 85: + if (lookahead == 's') ADVANCE(115); + END_STATE(); + case 86: + if (lookahead == 'n') ADVANCE(116); + END_STATE(); + case 87: + if (lookahead == 's') ADVANCE(117); + END_STATE(); + case 88: + if (lookahead == 'u') ADVANCE(118); + END_STATE(); + case 89: + ACCEPT_TOKEN(anon_sym_try); + END_STATE(); + case 90: + if (lookahead == 'e') ADVANCE(119); + END_STATE(); + case 91: + if (lookahead == 'l') ADVANCE(120); + END_STATE(); + case 92: + if (lookahead == 'h') ADVANCE(121); + END_STATE(); + case 93: + if (lookahead == 'l') ADVANCE(122); + END_STATE(); + case 94: + if (lookahead == 'e') ADVANCE(123); + END_STATE(); + case 95: + ACCEPT_TOKEN(sym_none); + END_STATE(); + case 96: + ACCEPT_TOKEN(sym_true); + END_STATE(); + case 97: + if (lookahead == 't') ADVANCE(124); + END_STATE(); + case 98: + if (lookahead == 'r') ADVANCE(125); + END_STATE(); + case 99: + if (lookahead == 'c') ADVANCE(126); + END_STATE(); + case 100: + if (lookahead == 't') ADVANCE(127); + END_STATE(); + case 101: + if (lookahead == 'k') ADVANCE(128); + END_STATE(); + case 102: + ACCEPT_TOKEN(anon_sym_case); + END_STATE(); + case 103: + if (lookahead == 's') ADVANCE(129); + END_STATE(); + case 104: + if (lookahead == 'i') ADVANCE(130); + END_STATE(); + case 105: + ACCEPT_TOKEN(anon_sym_elif); + END_STATE(); + case 106: + ACCEPT_TOKEN(anon_sym_else); + END_STATE(); + case 107: + ACCEPT_TOKEN(anon_sym_exec); + END_STATE(); + case 108: + if (lookahead == 'l') ADVANCE(131); + END_STATE(); + case 109: + ACCEPT_TOKEN(anon_sym_from); + END_STATE(); + case 110: + if (lookahead == 'a') ADVANCE(132); + END_STATE(); + case 111: + if (lookahead == 'r') ADVANCE(133); + END_STATE(); + case 112: + if (lookahead == 'd') ADVANCE(134); + END_STATE(); + case 113: + if (lookahead == 'h') ADVANCE(135); + END_STATE(); + case 114: + if (lookahead == 'o') ADVANCE(136); + END_STATE(); + case 115: + ACCEPT_TOKEN(anon_sym_pass); + END_STATE(); + case 116: + if (lookahead == 't') ADVANCE(137); + END_STATE(); + case 117: + if (lookahead == 'e') ADVANCE(138); + END_STATE(); + case 118: + if (lookahead == 'r') ADVANCE(139); + END_STATE(); + case 119: + ACCEPT_TOKEN(anon_sym_type); + END_STATE(); + case 120: + if (lookahead == 'e') ADVANCE(140); + END_STATE(); + case 121: + ACCEPT_TOKEN(anon_sym_with); + END_STATE(); + case 122: + if (lookahead == 'd') ADVANCE(141); + END_STATE(); + case 123: + ACCEPT_TOKEN(sym_false); + END_STATE(); + case 124: + if (lookahead == 'u') ADVANCE(142); + END_STATE(); + case 125: + if (lookahead == 't') ADVANCE(143); + END_STATE(); + case 126: + ACCEPT_TOKEN(anon_sym_async); + END_STATE(); + case 127: + ACCEPT_TOKEN(anon_sym_await); + END_STATE(); + case 128: + ACCEPT_TOKEN(anon_sym_break); + END_STATE(); + case 129: + ACCEPT_TOKEN(anon_sym_class); + END_STATE(); + case 130: + if (lookahead == 'n') ADVANCE(144); + END_STATE(); + case 131: + if (lookahead == 'l') ADVANCE(145); + END_STATE(); + case 132: + if (lookahead == 'l') ADVANCE(146); + END_STATE(); + case 133: + if (lookahead == 't') ADVANCE(147); + END_STATE(); + case 134: + if (lookahead == 'a') ADVANCE(148); + END_STATE(); + case 135: + ACCEPT_TOKEN(anon_sym_match); + END_STATE(); + case 136: + if (lookahead == 'c') ADVANCE(149); + END_STATE(); + case 137: + ACCEPT_TOKEN(anon_sym_print); + END_STATE(); + case 138: + ACCEPT_TOKEN(anon_sym_raise); + END_STATE(); + case 139: + if (lookahead == 'n') ADVANCE(150); + END_STATE(); + case 140: + ACCEPT_TOKEN(anon_sym_while); + END_STATE(); + case 141: + ACCEPT_TOKEN(anon_sym_yield); + END_STATE(); + case 142: + if (lookahead == 'r') ADVANCE(151); + END_STATE(); + case 143: + ACCEPT_TOKEN(anon_sym_assert); + END_STATE(); + case 144: + if (lookahead == 'u') ADVANCE(152); + END_STATE(); + case 145: + if (lookahead == 'y') ADVANCE(153); + END_STATE(); + case 146: + ACCEPT_TOKEN(anon_sym_global); + END_STATE(); + case 147: + ACCEPT_TOKEN(anon_sym_import); + END_STATE(); + case 148: + ACCEPT_TOKEN(anon_sym_lambda); + END_STATE(); + case 149: + if (lookahead == 'a') ADVANCE(154); + END_STATE(); + case 150: + ACCEPT_TOKEN(anon_sym_return); + END_STATE(); + case 151: + if (lookahead == 'e') ADVANCE(155); + END_STATE(); + case 152: + if (lookahead == 'e') ADVANCE(156); + END_STATE(); + case 153: + ACCEPT_TOKEN(anon_sym_finally); + END_STATE(); + case 154: + if (lookahead == 'l') ADVANCE(157); + END_STATE(); + case 155: + if (lookahead == '_') ADVANCE(158); + END_STATE(); + case 156: + ACCEPT_TOKEN(anon_sym_continue); + END_STATE(); + case 157: + ACCEPT_TOKEN(anon_sym_nonlocal); + END_STATE(); + case 158: + if (lookahead == '_') ADVANCE(159); + END_STATE(); + case 159: + ACCEPT_TOKEN(anon_sym___future__); + END_STATE(); + default: + return false; + } +} + +static const TSLexMode ts_lex_modes[STATE_COUNT] = { + [0] = {.lex_state = 0, .external_lex_state = 1}, + [1] = {.lex_state = 62, .external_lex_state = 2}, + [2] = {.lex_state = 62, .external_lex_state = 3}, + [3] = {.lex_state = 62, .external_lex_state = 3}, + [4] = {.lex_state = 62, .external_lex_state = 3}, + [5] = {.lex_state = 62, .external_lex_state = 3}, + [6] = {.lex_state = 62, .external_lex_state = 3}, + [7] = {.lex_state = 62, .external_lex_state = 3}, + [8] = {.lex_state = 62, .external_lex_state = 3}, + [9] = {.lex_state = 62, .external_lex_state = 3}, + [10] = {.lex_state = 62, .external_lex_state = 3}, + [11] = {.lex_state = 62, .external_lex_state = 3}, + [12] = {.lex_state = 62, .external_lex_state = 3}, + [13] = {.lex_state = 62, .external_lex_state = 3}, + [14] = {.lex_state = 62, .external_lex_state = 3}, + [15] = {.lex_state = 62, .external_lex_state = 3}, + [16] = {.lex_state = 62, .external_lex_state = 3}, + [17] = {.lex_state = 62, .external_lex_state = 3}, + [18] = {.lex_state = 62, .external_lex_state = 3}, + [19] = {.lex_state = 62, .external_lex_state = 3}, + [20] = {.lex_state = 62, .external_lex_state = 3}, + [21] = {.lex_state = 62, .external_lex_state = 3}, + [22] = {.lex_state = 62, .external_lex_state = 3}, + [23] = {.lex_state = 62, .external_lex_state = 3}, + [24] = {.lex_state = 62, .external_lex_state = 3}, + [25] = {.lex_state = 62, .external_lex_state = 3}, + [26] = {.lex_state = 62, .external_lex_state = 3}, + [27] = {.lex_state = 62, .external_lex_state = 3}, + [28] = {.lex_state = 62, .external_lex_state = 3}, + [29] = {.lex_state = 62, .external_lex_state = 3}, + [30] = {.lex_state = 62, .external_lex_state = 3}, + [31] = {.lex_state = 62, .external_lex_state = 3}, + [32] = {.lex_state = 62, .external_lex_state = 3}, + [33] = {.lex_state = 62, .external_lex_state = 3}, + [34] = {.lex_state = 62, .external_lex_state = 3}, + [35] = {.lex_state = 62, .external_lex_state = 3}, + [36] = {.lex_state = 62, .external_lex_state = 3}, + [37] = {.lex_state = 62, .external_lex_state = 3}, + [38] = {.lex_state = 62, .external_lex_state = 3}, + [39] = {.lex_state = 62, .external_lex_state = 3}, + [40] = {.lex_state = 62, .external_lex_state = 3}, + [41] = {.lex_state = 62, .external_lex_state = 3}, + [42] = {.lex_state = 62, .external_lex_state = 3}, + [43] = {.lex_state = 62, .external_lex_state = 3}, + [44] = {.lex_state = 62, .external_lex_state = 3}, + [45] = {.lex_state = 62, .external_lex_state = 3}, + [46] = {.lex_state = 62, .external_lex_state = 3}, + [47] = {.lex_state = 62, .external_lex_state = 3}, + [48] = {.lex_state = 62, .external_lex_state = 3}, + [49] = {.lex_state = 62, .external_lex_state = 3}, + [50] = {.lex_state = 62, .external_lex_state = 3}, + [51] = {.lex_state = 62, .external_lex_state = 3}, + [52] = {.lex_state = 62, .external_lex_state = 3}, + [53] = {.lex_state = 62, .external_lex_state = 3}, + [54] = {.lex_state = 62, .external_lex_state = 3}, + [55] = {.lex_state = 62, .external_lex_state = 3}, + [56] = {.lex_state = 62, .external_lex_state = 3}, + [57] = {.lex_state = 62, .external_lex_state = 3}, + [58] = {.lex_state = 62, .external_lex_state = 3}, + [59] = {.lex_state = 62, .external_lex_state = 3}, + [60] = {.lex_state = 62, .external_lex_state = 3}, + [61] = {.lex_state = 62, .external_lex_state = 3}, + [62] = {.lex_state = 62, .external_lex_state = 3}, + [63] = {.lex_state = 62, .external_lex_state = 3}, + [64] = {.lex_state = 62, .external_lex_state = 2}, + [65] = {.lex_state = 62, .external_lex_state = 3}, + [66] = {.lex_state = 62, .external_lex_state = 3}, + [67] = {.lex_state = 62, .external_lex_state = 2}, + [68] = {.lex_state = 62, .external_lex_state = 3}, + [69] = {.lex_state = 62, .external_lex_state = 3}, + [70] = {.lex_state = 62, .external_lex_state = 4}, + [71] = {.lex_state = 62, .external_lex_state = 4}, + [72] = {.lex_state = 62, .external_lex_state = 5}, + [73] = {.lex_state = 62, .external_lex_state = 5}, + [74] = {.lex_state = 62, .external_lex_state = 5}, + [75] = {.lex_state = 62, .external_lex_state = 4}, + [76] = {.lex_state = 62, .external_lex_state = 5}, + [77] = {.lex_state = 62, .external_lex_state = 5}, + [78] = {.lex_state = 62, .external_lex_state = 5}, + [79] = {.lex_state = 62, .external_lex_state = 5}, + [80] = {.lex_state = 62, .external_lex_state = 5}, + [81] = {.lex_state = 62, .external_lex_state = 5}, + [82] = {.lex_state = 62, .external_lex_state = 5}, + [83] = {.lex_state = 62, .external_lex_state = 5}, + [84] = {.lex_state = 62, .external_lex_state = 5}, + [85] = {.lex_state = 62, .external_lex_state = 5}, + [86] = {.lex_state = 62, .external_lex_state = 5}, + [87] = {.lex_state = 62, .external_lex_state = 5}, + [88] = {.lex_state = 62, .external_lex_state = 5}, + [89] = {.lex_state = 62, .external_lex_state = 5}, + [90] = {.lex_state = 62, .external_lex_state = 5}, + [91] = {.lex_state = 62, .external_lex_state = 5}, + [92] = {.lex_state = 62, .external_lex_state = 5}, + [93] = {.lex_state = 62, .external_lex_state = 5}, + [94] = {.lex_state = 62, .external_lex_state = 5}, + [95] = {.lex_state = 62, .external_lex_state = 5}, + [96] = {.lex_state = 62, .external_lex_state = 5}, + [97] = {.lex_state = 62, .external_lex_state = 5}, + [98] = {.lex_state = 62, .external_lex_state = 5}, + [99] = {.lex_state = 62, .external_lex_state = 5}, + [100] = {.lex_state = 62, .external_lex_state = 5}, + [101] = {.lex_state = 62, .external_lex_state = 5}, + [102] = {.lex_state = 62, .external_lex_state = 5}, + [103] = {.lex_state = 62, .external_lex_state = 5}, + [104] = {.lex_state = 62, .external_lex_state = 5}, + [105] = {.lex_state = 62, .external_lex_state = 5}, + [106] = {.lex_state = 62, .external_lex_state = 5}, + [107] = {.lex_state = 62, .external_lex_state = 5}, + [108] = {.lex_state = 62, .external_lex_state = 5}, + [109] = {.lex_state = 62, .external_lex_state = 5}, + [110] = {.lex_state = 62, .external_lex_state = 5}, + [111] = {.lex_state = 62, .external_lex_state = 5}, + [112] = {.lex_state = 62, .external_lex_state = 5}, + [113] = {.lex_state = 62, .external_lex_state = 5}, + [114] = {.lex_state = 62, .external_lex_state = 5}, + [115] = {.lex_state = 62, .external_lex_state = 5}, + [116] = {.lex_state = 62, .external_lex_state = 5}, + [117] = {.lex_state = 62, .external_lex_state = 5}, + [118] = {.lex_state = 62, .external_lex_state = 5}, + [119] = {.lex_state = 62, .external_lex_state = 5}, + [120] = {.lex_state = 62, .external_lex_state = 5}, + [121] = {.lex_state = 62, .external_lex_state = 5}, + [122] = {.lex_state = 62, .external_lex_state = 5}, + [123] = {.lex_state = 62, .external_lex_state = 5}, + [124] = {.lex_state = 62, .external_lex_state = 5}, + [125] = {.lex_state = 62, .external_lex_state = 5}, + [126] = {.lex_state = 62, .external_lex_state = 5}, + [127] = {.lex_state = 62, .external_lex_state = 5}, + [128] = {.lex_state = 62, .external_lex_state = 5}, + [129] = {.lex_state = 62, .external_lex_state = 5}, + [130] = {.lex_state = 62, .external_lex_state = 5}, + [131] = {.lex_state = 62, .external_lex_state = 4}, + [132] = {.lex_state = 62, .external_lex_state = 2}, + [133] = {.lex_state = 62, .external_lex_state = 4}, + [134] = {.lex_state = 62, .external_lex_state = 4}, + [135] = {.lex_state = 62, .external_lex_state = 4}, + [136] = {.lex_state = 62, .external_lex_state = 4}, + [137] = {.lex_state = 62, .external_lex_state = 4}, + [138] = {.lex_state = 62, .external_lex_state = 4}, + [139] = {.lex_state = 62, .external_lex_state = 4}, + [140] = {.lex_state = 62, .external_lex_state = 4}, + [141] = {.lex_state = 62, .external_lex_state = 4}, + [142] = {.lex_state = 62, .external_lex_state = 4}, + [143] = {.lex_state = 62, .external_lex_state = 4}, + [144] = {.lex_state = 62, .external_lex_state = 4}, + [145] = {.lex_state = 62, .external_lex_state = 4}, + [146] = {.lex_state = 62, .external_lex_state = 4}, + [147] = {.lex_state = 62, .external_lex_state = 2}, + [148] = {.lex_state = 62, .external_lex_state = 2}, + [149] = {.lex_state = 62, .external_lex_state = 2}, + [150] = {.lex_state = 62, .external_lex_state = 4}, + [151] = {.lex_state = 62, .external_lex_state = 2}, + [152] = {.lex_state = 62, .external_lex_state = 2}, + [153] = {.lex_state = 62, .external_lex_state = 2}, + [154] = {.lex_state = 62, .external_lex_state = 2}, + [155] = {.lex_state = 62, .external_lex_state = 2}, + [156] = {.lex_state = 62, .external_lex_state = 2}, + [157] = {.lex_state = 62, .external_lex_state = 2}, + [158] = {.lex_state = 16, .external_lex_state = 2}, + [159] = {.lex_state = 62, .external_lex_state = 2}, + [160] = {.lex_state = 62, .external_lex_state = 2}, + [161] = {.lex_state = 62, .external_lex_state = 2}, + [162] = {.lex_state = 62, .external_lex_state = 2}, + [163] = {.lex_state = 62, .external_lex_state = 2}, + [164] = {.lex_state = 62, .external_lex_state = 2}, + [165] = {.lex_state = 16, .external_lex_state = 2}, + [166] = {.lex_state = 62, .external_lex_state = 2}, + [167] = {.lex_state = 16, .external_lex_state = 2}, + [168] = {.lex_state = 16, .external_lex_state = 2}, + [169] = {.lex_state = 62, .external_lex_state = 2}, + [170] = {.lex_state = 62, .external_lex_state = 2}, + [171] = {.lex_state = 16, .external_lex_state = 2}, + [172] = {.lex_state = 16, .external_lex_state = 2}, + [173] = {.lex_state = 62, .external_lex_state = 2}, + [174] = {.lex_state = 62, .external_lex_state = 2}, + [175] = {.lex_state = 62, .external_lex_state = 2}, + [176] = {.lex_state = 62, .external_lex_state = 2}, + [177] = {.lex_state = 62, .external_lex_state = 2}, + [178] = {.lex_state = 62, .external_lex_state = 2}, + [179] = {.lex_state = 62, .external_lex_state = 2}, + [180] = {.lex_state = 62, .external_lex_state = 4}, + [181] = {.lex_state = 62, .external_lex_state = 4}, + [182] = {.lex_state = 62, .external_lex_state = 2}, + [183] = {.lex_state = 62, .external_lex_state = 2}, + [184] = {.lex_state = 62, .external_lex_state = 2}, + [185] = {.lex_state = 62, .external_lex_state = 2}, + [186] = {.lex_state = 62, .external_lex_state = 2}, + [187] = {.lex_state = 62, .external_lex_state = 2}, + [188] = {.lex_state = 62, .external_lex_state = 2}, + [189] = {.lex_state = 62, .external_lex_state = 2}, + [190] = {.lex_state = 62, .external_lex_state = 2}, + [191] = {.lex_state = 62, .external_lex_state = 2}, + [192] = {.lex_state = 62, .external_lex_state = 2}, + [193] = {.lex_state = 62, .external_lex_state = 2}, + [194] = {.lex_state = 62, .external_lex_state = 2}, + [195] = {.lex_state = 62, .external_lex_state = 4}, + [196] = {.lex_state = 62, .external_lex_state = 2}, + [197] = {.lex_state = 62, .external_lex_state = 2}, + [198] = {.lex_state = 62, .external_lex_state = 2}, + [199] = {.lex_state = 62, .external_lex_state = 2}, + [200] = {.lex_state = 62, .external_lex_state = 2}, + [201] = {.lex_state = 62, .external_lex_state = 4}, + [202] = {.lex_state = 62, .external_lex_state = 2}, + [203] = {.lex_state = 62, .external_lex_state = 2}, + [204] = {.lex_state = 62, .external_lex_state = 2}, + [205] = {.lex_state = 62, .external_lex_state = 4}, + [206] = {.lex_state = 62, .external_lex_state = 2}, + [207] = {.lex_state = 62, .external_lex_state = 2}, + [208] = {.lex_state = 62, .external_lex_state = 2}, + [209] = {.lex_state = 62, .external_lex_state = 2}, + [210] = {.lex_state = 62, .external_lex_state = 4}, + [211] = {.lex_state = 62, .external_lex_state = 2}, + [212] = {.lex_state = 62, .external_lex_state = 2}, + [213] = {.lex_state = 62, .external_lex_state = 2}, + [214] = {.lex_state = 62, .external_lex_state = 2}, + [215] = {.lex_state = 62, .external_lex_state = 2}, + [216] = {.lex_state = 62, .external_lex_state = 2}, + [217] = {.lex_state = 62, .external_lex_state = 2}, + [218] = {.lex_state = 15}, + [219] = {.lex_state = 15}, + [220] = {.lex_state = 15}, + [221] = {.lex_state = 15}, + [222] = {.lex_state = 62, .external_lex_state = 2}, + [223] = {.lex_state = 15}, + [224] = {.lex_state = 62, .external_lex_state = 2}, + [225] = {.lex_state = 62, .external_lex_state = 2}, + [226] = {.lex_state = 15}, + [227] = {.lex_state = 15}, + [228] = {.lex_state = 63, .external_lex_state = 2}, + [229] = {.lex_state = 64, .external_lex_state = 3}, + [230] = {.lex_state = 62, .external_lex_state = 2}, + [231] = {.lex_state = 62, .external_lex_state = 2}, + [232] = {.lex_state = 63, .external_lex_state = 3}, + [233] = {.lex_state = 62, .external_lex_state = 2}, + [234] = {.lex_state = 64, .external_lex_state = 3}, + [235] = {.lex_state = 62, .external_lex_state = 2}, + [236] = {.lex_state = 62, .external_lex_state = 2}, + [237] = {.lex_state = 64, .external_lex_state = 2}, + [238] = {.lex_state = 63, .external_lex_state = 2}, + [239] = {.lex_state = 62, .external_lex_state = 2}, + [240] = {.lex_state = 64, .external_lex_state = 2}, + [241] = {.lex_state = 63, .external_lex_state = 3}, + [242] = {.lex_state = 62, .external_lex_state = 2}, + [243] = {.lex_state = 62, .external_lex_state = 2}, + [244] = {.lex_state = 62, .external_lex_state = 2}, + [245] = {.lex_state = 62, .external_lex_state = 2}, + [246] = {.lex_state = 62, .external_lex_state = 2}, + [247] = {.lex_state = 14, .external_lex_state = 6}, + [248] = {.lex_state = 62, .external_lex_state = 2}, + [249] = {.lex_state = 62, .external_lex_state = 2}, + [250] = {.lex_state = 62, .external_lex_state = 2}, + [251] = {.lex_state = 62, .external_lex_state = 2}, + [252] = {.lex_state = 62, .external_lex_state = 2}, + [253] = {.lex_state = 62, .external_lex_state = 2}, + [254] = {.lex_state = 14, .external_lex_state = 6}, + [255] = {.lex_state = 16, .external_lex_state = 2}, + [256] = {.lex_state = 16, .external_lex_state = 2}, + [257] = {.lex_state = 16, .external_lex_state = 2}, + [258] = {.lex_state = 62, .external_lex_state = 3}, + [259] = {.lex_state = 16, .external_lex_state = 2}, + [260] = {.lex_state = 16, .external_lex_state = 2}, + [261] = {.lex_state = 16, .external_lex_state = 2}, + [262] = {.lex_state = 16, .external_lex_state = 2}, + [263] = {.lex_state = 62, .external_lex_state = 3}, + [264] = {.lex_state = 16, .external_lex_state = 2}, + [265] = {.lex_state = 62, .external_lex_state = 3}, + [266] = {.lex_state = 63, .external_lex_state = 3}, + [267] = {.lex_state = 64, .external_lex_state = 3}, + [268] = {.lex_state = 62, .external_lex_state = 2}, + [269] = {.lex_state = 16, .external_lex_state = 2}, + [270] = {.lex_state = 64, .external_lex_state = 2}, + [271] = {.lex_state = 63, .external_lex_state = 2}, + [272] = {.lex_state = 62, .external_lex_state = 3}, + [273] = {.lex_state = 16, .external_lex_state = 2}, + [274] = {.lex_state = 16, .external_lex_state = 2}, + [275] = {.lex_state = 62, .external_lex_state = 2}, + [276] = {.lex_state = 62, .external_lex_state = 2}, + [277] = {.lex_state = 62, .external_lex_state = 2}, + [278] = {.lex_state = 14, .external_lex_state = 4}, + [279] = {.lex_state = 62, .external_lex_state = 2}, + [280] = {.lex_state = 62, .external_lex_state = 2}, + [281] = {.lex_state = 62, .external_lex_state = 2}, + [282] = {.lex_state = 62, .external_lex_state = 2}, + [283] = {.lex_state = 62, .external_lex_state = 2}, + [284] = {.lex_state = 14, .external_lex_state = 6}, + [285] = {.lex_state = 62, .external_lex_state = 2}, + [286] = {.lex_state = 62, .external_lex_state = 2}, + [287] = {.lex_state = 62, .external_lex_state = 2}, + [288] = {.lex_state = 62, .external_lex_state = 3}, + [289] = {.lex_state = 62, .external_lex_state = 2}, + [290] = {.lex_state = 62, .external_lex_state = 2}, + [291] = {.lex_state = 62, .external_lex_state = 3}, + [292] = {.lex_state = 62, .external_lex_state = 2}, + [293] = {.lex_state = 62, .external_lex_state = 2}, + [294] = {.lex_state = 62, .external_lex_state = 2}, + [295] = {.lex_state = 62, .external_lex_state = 4}, + [296] = {.lex_state = 62, .external_lex_state = 2}, + [297] = {.lex_state = 62, .external_lex_state = 2}, + [298] = {.lex_state = 62, .external_lex_state = 2}, + [299] = {.lex_state = 16, .external_lex_state = 2}, + [300] = {.lex_state = 62, .external_lex_state = 4}, + [301] = {.lex_state = 16, .external_lex_state = 2}, + [302] = {.lex_state = 62, .external_lex_state = 2}, + [303] = {.lex_state = 62, .external_lex_state = 4}, + [304] = {.lex_state = 62, .external_lex_state = 4}, + [305] = {.lex_state = 62, .external_lex_state = 2}, + [306] = {.lex_state = 62, .external_lex_state = 2}, + [307] = {.lex_state = 62, .external_lex_state = 3}, + [308] = {.lex_state = 62, .external_lex_state = 3}, + [309] = {.lex_state = 62, .external_lex_state = 2}, + [310] = {.lex_state = 16, .external_lex_state = 2}, + [311] = {.lex_state = 62, .external_lex_state = 3}, + [312] = {.lex_state = 62, .external_lex_state = 2}, + [313] = {.lex_state = 62, .external_lex_state = 2}, + [314] = {.lex_state = 16, .external_lex_state = 2}, + [315] = {.lex_state = 62, .external_lex_state = 3}, + [316] = {.lex_state = 64, .external_lex_state = 3}, + [317] = {.lex_state = 63, .external_lex_state = 3}, + [318] = {.lex_state = 64, .external_lex_state = 2}, + [319] = {.lex_state = 63, .external_lex_state = 2}, + [320] = {.lex_state = 63, .external_lex_state = 2}, + [321] = {.lex_state = 62, .external_lex_state = 2}, + [322] = {.lex_state = 62, .external_lex_state = 2}, + [323] = {.lex_state = 62, .external_lex_state = 2}, + [324] = {.lex_state = 62, .external_lex_state = 2}, + [325] = {.lex_state = 63, .external_lex_state = 2}, + [326] = {.lex_state = 63, .external_lex_state = 2}, + [327] = {.lex_state = 64, .external_lex_state = 2}, + [328] = {.lex_state = 63, .external_lex_state = 2}, + [329] = {.lex_state = 64, .external_lex_state = 2}, + [330] = {.lex_state = 14, .external_lex_state = 6}, + [331] = {.lex_state = 64, .external_lex_state = 2}, + [332] = {.lex_state = 63, .external_lex_state = 2}, + [333] = {.lex_state = 63, .external_lex_state = 2}, + [334] = {.lex_state = 14, .external_lex_state = 6}, + [335] = {.lex_state = 16, .external_lex_state = 2}, + [336] = {.lex_state = 15, .external_lex_state = 6}, + [337] = {.lex_state = 15, .external_lex_state = 6}, + [338] = {.lex_state = 14}, + [339] = {.lex_state = 14}, + [340] = {.lex_state = 63, .external_lex_state = 2}, + [341] = {.lex_state = 62, .external_lex_state = 2}, + [342] = {.lex_state = 15, .external_lex_state = 6}, + [343] = {.lex_state = 15, .external_lex_state = 6}, + [344] = {.lex_state = 15, .external_lex_state = 6}, + [345] = {.lex_state = 62, .external_lex_state = 3}, + [346] = {.lex_state = 62, .external_lex_state = 2}, + [347] = {.lex_state = 62, .external_lex_state = 2}, + [348] = {.lex_state = 62, .external_lex_state = 2}, + [349] = {.lex_state = 62, .external_lex_state = 3}, + [350] = {.lex_state = 62, .external_lex_state = 2}, + [351] = {.lex_state = 62, .external_lex_state = 2}, + [352] = {.lex_state = 15, .external_lex_state = 6}, + [353] = {.lex_state = 63, .external_lex_state = 3}, + [354] = {.lex_state = 64, .external_lex_state = 3}, + [355] = {.lex_state = 64, .external_lex_state = 3}, + [356] = {.lex_state = 64, .external_lex_state = 3}, + [357] = {.lex_state = 63, .external_lex_state = 3}, + [358] = {.lex_state = 64, .external_lex_state = 3}, + [359] = {.lex_state = 64, .external_lex_state = 2}, + [360] = {.lex_state = 63, .external_lex_state = 3}, + [361] = {.lex_state = 62, .external_lex_state = 2}, + [362] = {.lex_state = 64, .external_lex_state = 2}, + [363] = {.lex_state = 64, .external_lex_state = 3}, + [364] = {.lex_state = 62, .external_lex_state = 2}, + [365] = {.lex_state = 15, .external_lex_state = 6}, + [366] = {.lex_state = 63, .external_lex_state = 3}, + [367] = {.lex_state = 64, .external_lex_state = 2}, + [368] = {.lex_state = 62, .external_lex_state = 2}, + [369] = {.lex_state = 63, .external_lex_state = 2}, + [370] = {.lex_state = 63, .external_lex_state = 3}, + [371] = {.lex_state = 64, .external_lex_state = 2}, + [372] = {.lex_state = 64, .external_lex_state = 3}, + [373] = {.lex_state = 63, .external_lex_state = 3}, + [374] = {.lex_state = 64, .external_lex_state = 3}, + [375] = {.lex_state = 63, .external_lex_state = 2}, + [376] = {.lex_state = 64, .external_lex_state = 2}, + [377] = {.lex_state = 63, .external_lex_state = 3}, + [378] = {.lex_state = 63, .external_lex_state = 3}, + [379] = {.lex_state = 63, .external_lex_state = 3}, + [380] = {.lex_state = 62, .external_lex_state = 2}, + [381] = {.lex_state = 63, .external_lex_state = 3}, + [382] = {.lex_state = 63, .external_lex_state = 2}, + [383] = {.lex_state = 16, .external_lex_state = 2}, + [384] = {.lex_state = 64, .external_lex_state = 3}, + [385] = {.lex_state = 62, .external_lex_state = 2}, + [386] = {.lex_state = 62, .external_lex_state = 2}, + [387] = {.lex_state = 62, .external_lex_state = 2}, + [388] = {.lex_state = 62, .external_lex_state = 2}, + [389] = {.lex_state = 62, .external_lex_state = 2}, + [390] = {.lex_state = 62, .external_lex_state = 2}, + [391] = {.lex_state = 62, .external_lex_state = 2}, + [392] = {.lex_state = 62, .external_lex_state = 2}, + [393] = {.lex_state = 62, .external_lex_state = 2}, + [394] = {.lex_state = 62, .external_lex_state = 2}, + [395] = {.lex_state = 62, .external_lex_state = 2}, + [396] = {.lex_state = 62, .external_lex_state = 2}, + [397] = {.lex_state = 62, .external_lex_state = 2}, + [398] = {.lex_state = 62, .external_lex_state = 2}, + [399] = {.lex_state = 62, .external_lex_state = 2}, + [400] = {.lex_state = 62, .external_lex_state = 2}, + [401] = {.lex_state = 62, .external_lex_state = 2}, + [402] = {.lex_state = 62, .external_lex_state = 2}, + [403] = {.lex_state = 62, .external_lex_state = 3}, + [404] = {.lex_state = 62, .external_lex_state = 2}, + [405] = {.lex_state = 62, .external_lex_state = 2}, + [406] = {.lex_state = 62, .external_lex_state = 2}, + [407] = {.lex_state = 62, .external_lex_state = 2}, + [408] = {.lex_state = 62, .external_lex_state = 2}, + [409] = {.lex_state = 62, .external_lex_state = 2}, + [410] = {.lex_state = 62, .external_lex_state = 2}, + [411] = {.lex_state = 62, .external_lex_state = 2}, + [412] = {.lex_state = 62, .external_lex_state = 2}, + [413] = {.lex_state = 62, .external_lex_state = 3}, + [414] = {.lex_state = 62, .external_lex_state = 3}, + [415] = {.lex_state = 62, .external_lex_state = 2}, + [416] = {.lex_state = 62, .external_lex_state = 2}, + [417] = {.lex_state = 62, .external_lex_state = 2}, + [418] = {.lex_state = 62, .external_lex_state = 3}, + [419] = {.lex_state = 62, .external_lex_state = 2}, + [420] = {.lex_state = 62, .external_lex_state = 3}, + [421] = {.lex_state = 62, .external_lex_state = 3}, + [422] = {.lex_state = 62, .external_lex_state = 2}, + [423] = {.lex_state = 62, .external_lex_state = 2}, + [424] = {.lex_state = 62, .external_lex_state = 2}, + [425] = {.lex_state = 62, .external_lex_state = 2}, + [426] = {.lex_state = 62, .external_lex_state = 2}, + [427] = {.lex_state = 62, .external_lex_state = 2}, + [428] = {.lex_state = 62, .external_lex_state = 3}, + [429] = {.lex_state = 62, .external_lex_state = 2}, + [430] = {.lex_state = 62, .external_lex_state = 2}, + [431] = {.lex_state = 15, .external_lex_state = 6}, + [432] = {.lex_state = 62, .external_lex_state = 3}, + [433] = {.lex_state = 62, .external_lex_state = 2}, + [434] = {.lex_state = 62, .external_lex_state = 2}, + [435] = {.lex_state = 62, .external_lex_state = 2}, + [436] = {.lex_state = 62, .external_lex_state = 2}, + [437] = {.lex_state = 62, .external_lex_state = 2}, + [438] = {.lex_state = 62, .external_lex_state = 2}, + [439] = {.lex_state = 62, .external_lex_state = 2}, + [440] = {.lex_state = 62, .external_lex_state = 2}, + [441] = {.lex_state = 15, .external_lex_state = 6}, + [442] = {.lex_state = 62, .external_lex_state = 2}, + [443] = {.lex_state = 62, .external_lex_state = 2}, + [444] = {.lex_state = 62, .external_lex_state = 2}, + [445] = {.lex_state = 62, .external_lex_state = 2}, + [446] = {.lex_state = 62, .external_lex_state = 2}, + [447] = {.lex_state = 62, .external_lex_state = 2}, + [448] = {.lex_state = 62, .external_lex_state = 2}, + [449] = {.lex_state = 15}, + [450] = {.lex_state = 62, .external_lex_state = 2}, + [451] = {.lex_state = 62, .external_lex_state = 2}, + [452] = {.lex_state = 62, .external_lex_state = 2}, + [453] = {.lex_state = 62, .external_lex_state = 2}, + [454] = {.lex_state = 62, .external_lex_state = 3}, + [455] = {.lex_state = 62, .external_lex_state = 2}, + [456] = {.lex_state = 62, .external_lex_state = 2}, + [457] = {.lex_state = 62, .external_lex_state = 2}, + [458] = {.lex_state = 62, .external_lex_state = 2}, + [459] = {.lex_state = 62, .external_lex_state = 2}, + [460] = {.lex_state = 62, .external_lex_state = 2}, + [461] = {.lex_state = 62, .external_lex_state = 2}, + [462] = {.lex_state = 62, .external_lex_state = 2}, + [463] = {.lex_state = 62, .external_lex_state = 2}, + [464] = {.lex_state = 62, .external_lex_state = 3}, + [465] = {.lex_state = 62, .external_lex_state = 2}, + [466] = {.lex_state = 62, .external_lex_state = 2}, + [467] = {.lex_state = 62, .external_lex_state = 2}, + [468] = {.lex_state = 62, .external_lex_state = 2}, + [469] = {.lex_state = 62, .external_lex_state = 2}, + [470] = {.lex_state = 62, .external_lex_state = 2}, + [471] = {.lex_state = 62, .external_lex_state = 2}, + [472] = {.lex_state = 62, .external_lex_state = 2}, + [473] = {.lex_state = 62, .external_lex_state = 2}, + [474] = {.lex_state = 62, .external_lex_state = 2}, + [475] = {.lex_state = 15, .external_lex_state = 6}, + [476] = {.lex_state = 62, .external_lex_state = 2}, + [477] = {.lex_state = 62, .external_lex_state = 2}, + [478] = {.lex_state = 62, .external_lex_state = 3}, + [479] = {.lex_state = 62, .external_lex_state = 2}, + [480] = {.lex_state = 62, .external_lex_state = 2}, + [481] = {.lex_state = 62, .external_lex_state = 2}, + [482] = {.lex_state = 62, .external_lex_state = 2}, + [483] = {.lex_state = 62, .external_lex_state = 2}, + [484] = {.lex_state = 62, .external_lex_state = 2}, + [485] = {.lex_state = 62, .external_lex_state = 3}, + [486] = {.lex_state = 62, .external_lex_state = 2}, + [487] = {.lex_state = 62, .external_lex_state = 3}, + [488] = {.lex_state = 62, .external_lex_state = 2}, + [489] = {.lex_state = 62, .external_lex_state = 3}, + [490] = {.lex_state = 62, .external_lex_state = 2}, + [491] = {.lex_state = 62, .external_lex_state = 3}, + [492] = {.lex_state = 62, .external_lex_state = 3}, + [493] = {.lex_state = 62, .external_lex_state = 2}, + [494] = {.lex_state = 62, .external_lex_state = 2}, + [495] = {.lex_state = 62, .external_lex_state = 3}, + [496] = {.lex_state = 62, .external_lex_state = 2}, + [497] = {.lex_state = 62, .external_lex_state = 2}, + [498] = {.lex_state = 62, .external_lex_state = 3}, + [499] = {.lex_state = 62, .external_lex_state = 2}, + [500] = {.lex_state = 62, .external_lex_state = 2}, + [501] = {.lex_state = 62, .external_lex_state = 2}, + [502] = {.lex_state = 62, .external_lex_state = 3}, + [503] = {.lex_state = 62, .external_lex_state = 2}, + [504] = {.lex_state = 62, .external_lex_state = 2}, + [505] = {.lex_state = 62, .external_lex_state = 3}, + [506] = {.lex_state = 62, .external_lex_state = 3}, + [507] = {.lex_state = 62, .external_lex_state = 2}, + [508] = {.lex_state = 62, .external_lex_state = 3}, + [509] = {.lex_state = 62, .external_lex_state = 3}, + [510] = {.lex_state = 62, .external_lex_state = 3}, + [511] = {.lex_state = 62, .external_lex_state = 2}, + [512] = {.lex_state = 62, .external_lex_state = 2}, + [513] = {.lex_state = 62, .external_lex_state = 3}, + [514] = {.lex_state = 62, .external_lex_state = 2}, + [515] = {.lex_state = 62, .external_lex_state = 2}, + [516] = {.lex_state = 62, .external_lex_state = 3}, + [517] = {.lex_state = 62, .external_lex_state = 3}, + [518] = {.lex_state = 62, .external_lex_state = 2}, + [519] = {.lex_state = 62, .external_lex_state = 2}, + [520] = {.lex_state = 62, .external_lex_state = 3}, + [521] = {.lex_state = 62, .external_lex_state = 2}, + [522] = {.lex_state = 62, .external_lex_state = 3}, + [523] = {.lex_state = 62, .external_lex_state = 2}, + [524] = {.lex_state = 62, .external_lex_state = 2}, + [525] = {.lex_state = 62, .external_lex_state = 3}, + [526] = {.lex_state = 62, .external_lex_state = 3}, + [527] = {.lex_state = 62, .external_lex_state = 3}, + [528] = {.lex_state = 62, .external_lex_state = 2}, + [529] = {.lex_state = 62, .external_lex_state = 3}, + [530] = {.lex_state = 62, .external_lex_state = 3}, + [531] = {.lex_state = 62, .external_lex_state = 3}, + [532] = {.lex_state = 62, .external_lex_state = 2}, + [533] = {.lex_state = 62, .external_lex_state = 2}, + [534] = {.lex_state = 62, .external_lex_state = 3}, + [535] = {.lex_state = 62, .external_lex_state = 2}, + [536] = {.lex_state = 62, .external_lex_state = 2}, + [537] = {.lex_state = 62, .external_lex_state = 2}, + [538] = {.lex_state = 62, .external_lex_state = 2}, + [539] = {.lex_state = 62, .external_lex_state = 3}, + [540] = {.lex_state = 62, .external_lex_state = 3}, + [541] = {.lex_state = 62, .external_lex_state = 2}, + [542] = {.lex_state = 62, .external_lex_state = 2}, + [543] = {.lex_state = 62, .external_lex_state = 2}, + [544] = {.lex_state = 62, .external_lex_state = 3}, + [545] = {.lex_state = 62, .external_lex_state = 2}, + [546] = {.lex_state = 62, .external_lex_state = 2}, + [547] = {.lex_state = 62, .external_lex_state = 2}, + [548] = {.lex_state = 62, .external_lex_state = 3}, + [549] = {.lex_state = 62, .external_lex_state = 2}, + [550] = {.lex_state = 62, .external_lex_state = 2}, + [551] = {.lex_state = 62, .external_lex_state = 3}, + [552] = {.lex_state = 62, .external_lex_state = 2}, + [553] = {.lex_state = 62, .external_lex_state = 2}, + [554] = {.lex_state = 62, .external_lex_state = 3}, + [555] = {.lex_state = 62, .external_lex_state = 3}, + [556] = {.lex_state = 62, .external_lex_state = 2}, + [557] = {.lex_state = 62, .external_lex_state = 2}, + [558] = {.lex_state = 62, .external_lex_state = 3}, + [559] = {.lex_state = 62, .external_lex_state = 2}, + [560] = {.lex_state = 62, .external_lex_state = 3}, + [561] = {.lex_state = 62, .external_lex_state = 2}, + [562] = {.lex_state = 62, .external_lex_state = 3}, + [563] = {.lex_state = 62, .external_lex_state = 3}, + [564] = {.lex_state = 62, .external_lex_state = 3}, + [565] = {.lex_state = 62, .external_lex_state = 3}, + [566] = {.lex_state = 62, .external_lex_state = 2}, + [567] = {.lex_state = 62, .external_lex_state = 3}, + [568] = {.lex_state = 62, .external_lex_state = 3}, + [569] = {.lex_state = 62, .external_lex_state = 2}, + [570] = {.lex_state = 62, .external_lex_state = 3}, + [571] = {.lex_state = 62, .external_lex_state = 3}, + [572] = {.lex_state = 62, .external_lex_state = 2}, + [573] = {.lex_state = 62, .external_lex_state = 2}, + [574] = {.lex_state = 62, .external_lex_state = 3}, + [575] = {.lex_state = 62, .external_lex_state = 2}, + [576] = {.lex_state = 62, .external_lex_state = 2}, + [577] = {.lex_state = 62, .external_lex_state = 3}, + [578] = {.lex_state = 62, .external_lex_state = 2}, + [579] = {.lex_state = 62, .external_lex_state = 3}, + [580] = {.lex_state = 62, .external_lex_state = 3}, + [581] = {.lex_state = 62, .external_lex_state = 3}, + [582] = {.lex_state = 62, .external_lex_state = 3}, + [583] = {.lex_state = 62, .external_lex_state = 2}, + [584] = {.lex_state = 62, .external_lex_state = 3}, + [585] = {.lex_state = 62, .external_lex_state = 2}, + [586] = {.lex_state = 62, .external_lex_state = 2}, + [587] = {.lex_state = 62, .external_lex_state = 3}, + [588] = {.lex_state = 62, .external_lex_state = 3}, + [589] = {.lex_state = 62, .external_lex_state = 2}, + [590] = {.lex_state = 62, .external_lex_state = 2}, + [591] = {.lex_state = 62, .external_lex_state = 3}, + [592] = {.lex_state = 62, .external_lex_state = 3}, + [593] = {.lex_state = 62, .external_lex_state = 3}, + [594] = {.lex_state = 62, .external_lex_state = 3}, + [595] = {.lex_state = 62, .external_lex_state = 2}, + [596] = {.lex_state = 62, .external_lex_state = 2}, + [597] = {.lex_state = 62, .external_lex_state = 2}, + [598] = {.lex_state = 15, .external_lex_state = 2}, + [599] = {.lex_state = 15, .external_lex_state = 2}, + [600] = {.lex_state = 15, .external_lex_state = 2}, + [601] = {.lex_state = 62, .external_lex_state = 2}, + [602] = {.lex_state = 62, .external_lex_state = 2}, + [603] = {.lex_state = 62, .external_lex_state = 2}, + [604] = {.lex_state = 62, .external_lex_state = 2}, + [605] = {.lex_state = 62, .external_lex_state = 2}, + [606] = {.lex_state = 62, .external_lex_state = 2}, + [607] = {.lex_state = 62, .external_lex_state = 2}, + [608] = {.lex_state = 62, .external_lex_state = 2}, + [609] = {.lex_state = 15, .external_lex_state = 2}, + [610] = {.lex_state = 15, .external_lex_state = 2}, + [611] = {.lex_state = 15}, + [612] = {.lex_state = 15}, + [613] = {.lex_state = 15}, + [614] = {.lex_state = 15}, + [615] = {.lex_state = 15}, + [616] = {.lex_state = 15}, + [617] = {.lex_state = 15}, + [618] = {.lex_state = 15}, + [619] = {.lex_state = 15}, + [620] = {.lex_state = 15}, + [621] = {.lex_state = 15}, + [622] = {.lex_state = 15}, + [623] = {.lex_state = 15}, + [624] = {.lex_state = 15}, + [625] = {.lex_state = 15}, + [626] = {.lex_state = 15}, + [627] = {.lex_state = 15}, + [628] = {.lex_state = 15}, + [629] = {.lex_state = 15}, + [630] = {.lex_state = 15}, + [631] = {.lex_state = 15}, + [632] = {.lex_state = 15}, + [633] = {.lex_state = 15}, + [634] = {.lex_state = 15}, + [635] = {.lex_state = 15}, + [636] = {.lex_state = 16, .external_lex_state = 2}, + [637] = {.lex_state = 15}, + [638] = {.lex_state = 15}, + [639] = {.lex_state = 15}, + [640] = {.lex_state = 15}, + [641] = {.lex_state = 15}, + [642] = {.lex_state = 15}, + [643] = {.lex_state = 15}, + [644] = {.lex_state = 15}, + [645] = {.lex_state = 15}, + [646] = {.lex_state = 15}, + [647] = {.lex_state = 15}, + [648] = {.lex_state = 15}, + [649] = {.lex_state = 15}, + [650] = {.lex_state = 15}, + [651] = {.lex_state = 15}, + [652] = {.lex_state = 15}, + [653] = {.lex_state = 15}, + [654] = {.lex_state = 15}, + [655] = {.lex_state = 15}, + [656] = {.lex_state = 15}, + [657] = {.lex_state = 15}, + [658] = {.lex_state = 15}, + [659] = {.lex_state = 15}, + [660] = {.lex_state = 15}, + [661] = {.lex_state = 15}, + [662] = {.lex_state = 15}, + [663] = {.lex_state = 15}, + [664] = {.lex_state = 15}, + [665] = {.lex_state = 15}, + [666] = {.lex_state = 15}, + [667] = {.lex_state = 14}, + [668] = {.lex_state = 14}, + [669] = {.lex_state = 62, .external_lex_state = 2}, + [670] = {.lex_state = 62, .external_lex_state = 2}, + [671] = {.lex_state = 15}, + [672] = {.lex_state = 15}, + [673] = {.lex_state = 62, .external_lex_state = 2}, + [674] = {.lex_state = 14}, + [675] = {.lex_state = 14}, + [676] = {.lex_state = 62, .external_lex_state = 2}, + [677] = {.lex_state = 15, .external_lex_state = 2}, + [678] = {.lex_state = 15, .external_lex_state = 2}, + [679] = {.lex_state = 62, .external_lex_state = 2}, + [680] = {.lex_state = 62, .external_lex_state = 2}, + [681] = {.lex_state = 62, .external_lex_state = 2}, + [682] = {.lex_state = 62, .external_lex_state = 2}, + [683] = {.lex_state = 62, .external_lex_state = 2}, + [684] = {.lex_state = 15, .external_lex_state = 6}, + [685] = {.lex_state = 62, .external_lex_state = 2}, + [686] = {.lex_state = 62, .external_lex_state = 2}, + [687] = {.lex_state = 62, .external_lex_state = 2}, + [688] = {.lex_state = 62, .external_lex_state = 2}, + [689] = {.lex_state = 15, .external_lex_state = 4}, + [690] = {.lex_state = 62, .external_lex_state = 2}, + [691] = {.lex_state = 62, .external_lex_state = 2}, + [692] = {.lex_state = 62, .external_lex_state = 2}, + [693] = {.lex_state = 62, .external_lex_state = 2}, + [694] = {.lex_state = 62, .external_lex_state = 2}, + [695] = {.lex_state = 62, .external_lex_state = 2}, + [696] = {.lex_state = 62, .external_lex_state = 2}, + [697] = {.lex_state = 62, .external_lex_state = 2}, + [698] = {.lex_state = 62, .external_lex_state = 2}, + [699] = {.lex_state = 62, .external_lex_state = 2}, + [700] = {.lex_state = 62, .external_lex_state = 2}, + [701] = {.lex_state = 62, .external_lex_state = 2}, + [702] = {.lex_state = 62, .external_lex_state = 2}, + [703] = {.lex_state = 62, .external_lex_state = 2}, + [704] = {.lex_state = 62, .external_lex_state = 2}, + [705] = {.lex_state = 62, .external_lex_state = 2}, + [706] = {.lex_state = 62, .external_lex_state = 2}, + [707] = {.lex_state = 62, .external_lex_state = 2}, + [708] = {.lex_state = 62, .external_lex_state = 2}, + [709] = {.lex_state = 62, .external_lex_state = 2}, + [710] = {.lex_state = 62, .external_lex_state = 2}, + [711] = {.lex_state = 62, .external_lex_state = 2}, + [712] = {.lex_state = 62, .external_lex_state = 2}, + [713] = {.lex_state = 15, .external_lex_state = 4}, + [714] = {.lex_state = 62, .external_lex_state = 2}, + [715] = {.lex_state = 62, .external_lex_state = 2}, + [716] = {.lex_state = 62, .external_lex_state = 2}, + [717] = {.lex_state = 62, .external_lex_state = 2}, + [718] = {.lex_state = 62, .external_lex_state = 2}, + [719] = {.lex_state = 62, .external_lex_state = 2}, + [720] = {.lex_state = 15, .external_lex_state = 4}, + [721] = {.lex_state = 62, .external_lex_state = 2}, + [722] = {.lex_state = 62, .external_lex_state = 2}, + [723] = {.lex_state = 62, .external_lex_state = 2}, + [724] = {.lex_state = 62, .external_lex_state = 2}, + [725] = {.lex_state = 15}, + [726] = {.lex_state = 62, .external_lex_state = 2}, + [727] = {.lex_state = 15}, + [728] = {.lex_state = 62, .external_lex_state = 2}, + [729] = {.lex_state = 62, .external_lex_state = 2}, + [730] = {.lex_state = 62, .external_lex_state = 2}, + [731] = {.lex_state = 15, .external_lex_state = 6}, + [732] = {.lex_state = 15, .external_lex_state = 6}, + [733] = {.lex_state = 15, .external_lex_state = 6}, + [734] = {.lex_state = 15, .external_lex_state = 6}, + [735] = {.lex_state = 15, .external_lex_state = 6}, + [736] = {.lex_state = 15, .external_lex_state = 2}, + [737] = {.lex_state = 15, .external_lex_state = 6}, + [738] = {.lex_state = 15, .external_lex_state = 6}, + [739] = {.lex_state = 15, .external_lex_state = 6}, + [740] = {.lex_state = 15}, + [741] = {.lex_state = 15, .external_lex_state = 6}, + [742] = {.lex_state = 15, .external_lex_state = 2}, + [743] = {.lex_state = 15, .external_lex_state = 6}, + [744] = {.lex_state = 15, .external_lex_state = 2}, + [745] = {.lex_state = 15, .external_lex_state = 6}, + [746] = {.lex_state = 15}, + [747] = {.lex_state = 15}, + [748] = {.lex_state = 15}, + [749] = {.lex_state = 14}, + [750] = {.lex_state = 15}, + [751] = {.lex_state = 15}, + [752] = {.lex_state = 15}, + [753] = {.lex_state = 15}, + [754] = {.lex_state = 14, .external_lex_state = 6}, + [755] = {.lex_state = 14, .external_lex_state = 6}, + [756] = {.lex_state = 15}, + [757] = {.lex_state = 15}, + [758] = {.lex_state = 15, .external_lex_state = 4}, + [759] = {.lex_state = 14}, + [760] = {.lex_state = 14}, + [761] = {.lex_state = 15}, + [762] = {.lex_state = 15}, + [763] = {.lex_state = 15}, + [764] = {.lex_state = 14}, + [765] = {.lex_state = 15}, + [766] = {.lex_state = 15}, + [767] = {.lex_state = 15}, + [768] = {.lex_state = 15}, + [769] = {.lex_state = 15, .external_lex_state = 4}, + [770] = {.lex_state = 15}, + [771] = {.lex_state = 15, .external_lex_state = 6}, + [772] = {.lex_state = 15, .external_lex_state = 6}, + [773] = {.lex_state = 15, .external_lex_state = 6}, + [774] = {.lex_state = 15, .external_lex_state = 6}, + [775] = {.lex_state = 15, .external_lex_state = 6}, + [776] = {.lex_state = 15, .external_lex_state = 6}, + [777] = {.lex_state = 15, .external_lex_state = 6}, + [778] = {.lex_state = 15, .external_lex_state = 6}, + [779] = {.lex_state = 15}, + [780] = {.lex_state = 15, .external_lex_state = 6}, + [781] = {.lex_state = 15, .external_lex_state = 6}, + [782] = {.lex_state = 15, .external_lex_state = 6}, + [783] = {.lex_state = 15, .external_lex_state = 6}, + [784] = {.lex_state = 15, .external_lex_state = 6}, + [785] = {.lex_state = 15, .external_lex_state = 6}, + [786] = {.lex_state = 15, .external_lex_state = 6}, + [787] = {.lex_state = 15, .external_lex_state = 6}, + [788] = {.lex_state = 15, .external_lex_state = 6}, + [789] = {.lex_state = 15}, + [790] = {.lex_state = 15, .external_lex_state = 6}, + [791] = {.lex_state = 15, .external_lex_state = 6}, + [792] = {.lex_state = 15, .external_lex_state = 6}, + [793] = {.lex_state = 15, .external_lex_state = 6}, + [794] = {.lex_state = 15, .external_lex_state = 6}, + [795] = {.lex_state = 15, .external_lex_state = 6}, + [796] = {.lex_state = 15, .external_lex_state = 6}, + [797] = {.lex_state = 15, .external_lex_state = 6}, + [798] = {.lex_state = 14}, + [799] = {.lex_state = 15, .external_lex_state = 6}, + [800] = {.lex_state = 15, .external_lex_state = 6}, + [801] = {.lex_state = 14}, + [802] = {.lex_state = 15, .external_lex_state = 6}, + [803] = {.lex_state = 15, .external_lex_state = 6}, + [804] = {.lex_state = 15, .external_lex_state = 6}, + [805] = {.lex_state = 15, .external_lex_state = 6}, + [806] = {.lex_state = 15}, + [807] = {.lex_state = 15, .external_lex_state = 6}, + [808] = {.lex_state = 15, .external_lex_state = 6}, + [809] = {.lex_state = 15}, + [810] = {.lex_state = 15}, + [811] = {.lex_state = 15}, + [812] = {.lex_state = 14}, + [813] = {.lex_state = 15}, + [814] = {.lex_state = 15}, + [815] = {.lex_state = 15}, + [816] = {.lex_state = 15}, + [817] = {.lex_state = 15}, + [818] = {.lex_state = 15}, + [819] = {.lex_state = 15}, + [820] = {.lex_state = 15}, + [821] = {.lex_state = 15}, + [822] = {.lex_state = 15}, + [823] = {.lex_state = 15}, + [824] = {.lex_state = 15}, + [825] = {.lex_state = 15}, + [826] = {.lex_state = 15}, + [827] = {.lex_state = 15}, + [828] = {.lex_state = 15}, + [829] = {.lex_state = 15}, + [830] = {.lex_state = 15}, + [831] = {.lex_state = 15}, + [832] = {.lex_state = 15}, + [833] = {.lex_state = 15}, + [834] = {.lex_state = 15}, + [835] = {.lex_state = 15}, + [836] = {.lex_state = 15}, + [837] = {.lex_state = 14}, + [838] = {.lex_state = 15}, + [839] = {.lex_state = 15}, + [840] = {.lex_state = 15}, + [841] = {.lex_state = 15}, + [842] = {.lex_state = 15}, + [843] = {.lex_state = 15}, + [844] = {.lex_state = 15}, + [845] = {.lex_state = 15}, + [846] = {.lex_state = 15}, + [847] = {.lex_state = 15}, + [848] = {.lex_state = 15}, + [849] = {.lex_state = 62, .external_lex_state = 2}, + [850] = {.lex_state = 16, .external_lex_state = 2}, + [851] = {.lex_state = 16, .external_lex_state = 2}, + [852] = {.lex_state = 62, .external_lex_state = 2}, + [853] = {.lex_state = 62, .external_lex_state = 2}, + [854] = {.lex_state = 62, .external_lex_state = 2}, + [855] = {.lex_state = 62, .external_lex_state = 2}, + [856] = {.lex_state = 62, .external_lex_state = 2}, + [857] = {.lex_state = 62, .external_lex_state = 2}, + [858] = {.lex_state = 62, .external_lex_state = 2}, + [859] = {.lex_state = 62, .external_lex_state = 2}, + [860] = {.lex_state = 62, .external_lex_state = 2}, + [861] = {.lex_state = 62, .external_lex_state = 2}, + [862] = {.lex_state = 62, .external_lex_state = 2}, + [863] = {.lex_state = 62, .external_lex_state = 2}, + [864] = {.lex_state = 62, .external_lex_state = 2}, + [865] = {.lex_state = 62, .external_lex_state = 2}, + [866] = {.lex_state = 62, .external_lex_state = 2}, + [867] = {.lex_state = 62, .external_lex_state = 2}, + [868] = {.lex_state = 16}, + [869] = {.lex_state = 16}, + [870] = {.lex_state = 16}, + [871] = {.lex_state = 16}, + [872] = {.lex_state = 16}, + [873] = {.lex_state = 16}, + [874] = {.lex_state = 16}, + [875] = {.lex_state = 16}, + [876] = {.lex_state = 16}, + [877] = {.lex_state = 62, .external_lex_state = 6}, + [878] = {.lex_state = 62, .external_lex_state = 6}, + [879] = {.lex_state = 15}, + [880] = {.lex_state = 15}, + [881] = {.lex_state = 16}, + [882] = {.lex_state = 15}, + [883] = {.lex_state = 16}, + [884] = {.lex_state = 16}, + [885] = {.lex_state = 16}, + [886] = {.lex_state = 16}, + [887] = {.lex_state = 16}, + [888] = {.lex_state = 16}, + [889] = {.lex_state = 16}, + [890] = {.lex_state = 16}, + [891] = {.lex_state = 62, .external_lex_state = 2}, + [892] = {.lex_state = 62, .external_lex_state = 2}, + [893] = {.lex_state = 62}, + [894] = {.lex_state = 62, .external_lex_state = 2}, + [895] = {.lex_state = 62}, + [896] = {.lex_state = 16}, + [897] = {.lex_state = 16}, + [898] = {.lex_state = 16}, + [899] = {.lex_state = 62}, + [900] = {.lex_state = 16}, + [901] = {.lex_state = 16}, + [902] = {.lex_state = 62}, + [903] = {.lex_state = 62}, + [904] = {.lex_state = 16}, + [905] = {.lex_state = 62, .external_lex_state = 2}, + [906] = {.lex_state = 15}, + [907] = {.lex_state = 16}, + [908] = {.lex_state = 16}, + [909] = {.lex_state = 16}, + [910] = {.lex_state = 15}, + [911] = {.lex_state = 16}, + [912] = {.lex_state = 16}, + [913] = {.lex_state = 16, .external_lex_state = 2}, + [914] = {.lex_state = 16}, + [915] = {.lex_state = 62}, + [916] = {.lex_state = 16}, + [917] = {.lex_state = 15}, + [918] = {.lex_state = 16}, + [919] = {.lex_state = 16}, + [920] = {.lex_state = 16}, + [921] = {.lex_state = 16}, + [922] = {.lex_state = 16}, + [923] = {.lex_state = 16}, + [924] = {.lex_state = 16}, + [925] = {.lex_state = 15}, + [926] = {.lex_state = 16}, + [927] = {.lex_state = 16}, + [928] = {.lex_state = 16}, + [929] = {.lex_state = 16}, + [930] = {.lex_state = 62}, + [931] = {.lex_state = 62}, + [932] = {.lex_state = 62}, + [933] = {.lex_state = 16}, + [934] = {.lex_state = 18, .external_lex_state = 7}, + [935] = {.lex_state = 62}, + [936] = {.lex_state = 18, .external_lex_state = 7}, + [937] = {.lex_state = 18, .external_lex_state = 7}, + [938] = {.lex_state = 18, .external_lex_state = 7}, + [939] = {.lex_state = 16}, + [940] = {.lex_state = 62}, + [941] = {.lex_state = 62}, + [942] = {.lex_state = 18, .external_lex_state = 7}, + [943] = {.lex_state = 16}, + [944] = {.lex_state = 18, .external_lex_state = 7}, + [945] = {.lex_state = 62}, + [946] = {.lex_state = 62}, + [947] = {.lex_state = 16}, + [948] = {.lex_state = 16}, + [949] = {.lex_state = 18, .external_lex_state = 7}, + [950] = {.lex_state = 18, .external_lex_state = 7}, + [951] = {.lex_state = 16}, + [952] = {.lex_state = 18, .external_lex_state = 7}, + [953] = {.lex_state = 62}, + [954] = {.lex_state = 16}, + [955] = {.lex_state = 62}, + [956] = {.lex_state = 62}, + [957] = {.lex_state = 16}, + [958] = {.lex_state = 62}, + [959] = {.lex_state = 62}, + [960] = {.lex_state = 16}, + [961] = {.lex_state = 16}, + [962] = {.lex_state = 62}, + [963] = {.lex_state = 62}, + [964] = {.lex_state = 16}, + [965] = {.lex_state = 0}, + [966] = {.lex_state = 16}, + [967] = {.lex_state = 62, .external_lex_state = 6}, + [968] = {.lex_state = 16}, + [969] = {.lex_state = 16}, + [970] = {.lex_state = 16}, + [971] = {.lex_state = 16}, + [972] = {.lex_state = 16}, + [973] = {.lex_state = 16}, + [974] = {.lex_state = 62, .external_lex_state = 6}, + [975] = {.lex_state = 16}, + [976] = {.lex_state = 62, .external_lex_state = 6}, + [977] = {.lex_state = 16}, + [978] = {.lex_state = 62}, + [979] = {.lex_state = 62}, + [980] = {.lex_state = 62, .external_lex_state = 6}, + [981] = {.lex_state = 16}, + [982] = {.lex_state = 62, .external_lex_state = 6}, + [983] = {.lex_state = 0}, + [984] = {.lex_state = 16}, + [985] = {.lex_state = 16}, + [986] = {.lex_state = 16}, + [987] = {.lex_state = 16}, + [988] = {.lex_state = 16}, + [989] = {.lex_state = 16}, + [990] = {.lex_state = 16}, + [991] = {.lex_state = 0}, + [992] = {.lex_state = 62, .external_lex_state = 6}, + [993] = {.lex_state = 16}, + [994] = {.lex_state = 62}, + [995] = {.lex_state = 62}, + [996] = {.lex_state = 62}, + [997] = {.lex_state = 62, .external_lex_state = 6}, + [998] = {.lex_state = 16}, + [999] = {.lex_state = 15}, + [1000] = {.lex_state = 62, .external_lex_state = 6}, + [1001] = {.lex_state = 62, .external_lex_state = 6}, + [1002] = {.lex_state = 62}, + [1003] = {.lex_state = 0}, + [1004] = {.lex_state = 16}, + [1005] = {.lex_state = 16}, + [1006] = {.lex_state = 16}, + [1007] = {.lex_state = 62, .external_lex_state = 6}, + [1008] = {.lex_state = 16}, + [1009] = {.lex_state = 62, .external_lex_state = 6}, + [1010] = {.lex_state = 16}, + [1011] = {.lex_state = 16}, + [1012] = {.lex_state = 62}, + [1013] = {.lex_state = 62}, + [1014] = {.lex_state = 62, .external_lex_state = 6}, + [1015] = {.lex_state = 16}, + [1016] = {.lex_state = 15}, + [1017] = {.lex_state = 62}, + [1018] = {.lex_state = 62}, + [1019] = {.lex_state = 62, .external_lex_state = 6}, + [1020] = {.lex_state = 62}, + [1021] = {.lex_state = 16}, + [1022] = {.lex_state = 16}, + [1023] = {.lex_state = 16}, + [1024] = {.lex_state = 16}, + [1025] = {.lex_state = 16}, + [1026] = {.lex_state = 62, .external_lex_state = 6}, + [1027] = {.lex_state = 16}, + [1028] = {.lex_state = 16}, + [1029] = {.lex_state = 16}, + [1030] = {.lex_state = 16}, + [1031] = {.lex_state = 18, .external_lex_state = 7}, + [1032] = {.lex_state = 16}, + [1033] = {.lex_state = 62}, + [1034] = {.lex_state = 62, .external_lex_state = 6}, + [1035] = {.lex_state = 16}, + [1036] = {.lex_state = 62, .external_lex_state = 6}, + [1037] = {.lex_state = 62}, + [1038] = {.lex_state = 62}, + [1039] = {.lex_state = 62}, + [1040] = {.lex_state = 16}, + [1041] = {.lex_state = 16}, + [1042] = {.lex_state = 16}, + [1043] = {.lex_state = 62, .external_lex_state = 6}, + [1044] = {.lex_state = 62, .external_lex_state = 6}, + [1045] = {.lex_state = 62, .external_lex_state = 6}, + [1046] = {.lex_state = 62, .external_lex_state = 6}, + [1047] = {.lex_state = 16}, + [1048] = {.lex_state = 62, .external_lex_state = 6}, + [1049] = {.lex_state = 62}, + [1050] = {.lex_state = 16}, + [1051] = {.lex_state = 16}, + [1052] = {.lex_state = 62}, + [1053] = {.lex_state = 62}, + [1054] = {.lex_state = 62, .external_lex_state = 6}, + [1055] = {.lex_state = 18, .external_lex_state = 7}, + [1056] = {.lex_state = 62}, + [1057] = {.lex_state = 15, .external_lex_state = 6}, + [1058] = {.lex_state = 15}, + [1059] = {.lex_state = 16}, + [1060] = {.lex_state = 18, .external_lex_state = 7}, + [1061] = {.lex_state = 15}, + [1062] = {.lex_state = 62}, + [1063] = {.lex_state = 16}, + [1064] = {.lex_state = 16}, + [1065] = {.lex_state = 62, .external_lex_state = 6}, + [1066] = {.lex_state = 62, .external_lex_state = 6}, + [1067] = {.lex_state = 18, .external_lex_state = 7}, + [1068] = {.lex_state = 15, .external_lex_state = 6}, + [1069] = {.lex_state = 18, .external_lex_state = 7}, + [1070] = {.lex_state = 16}, + [1071] = {.lex_state = 62}, + [1072] = {.lex_state = 18, .external_lex_state = 7}, + [1073] = {.lex_state = 16}, + [1074] = {.lex_state = 18, .external_lex_state = 7}, + [1075] = {.lex_state = 16}, + [1076] = {.lex_state = 18, .external_lex_state = 7}, + [1077] = {.lex_state = 16}, + [1078] = {.lex_state = 62, .external_lex_state = 6}, + [1079] = {.lex_state = 16}, + [1080] = {.lex_state = 16}, + [1081] = {.lex_state = 16}, + [1082] = {.lex_state = 62, .external_lex_state = 6}, + [1083] = {.lex_state = 16}, + [1084] = {.lex_state = 16}, + [1085] = {.lex_state = 16}, + [1086] = {.lex_state = 16}, + [1087] = {.lex_state = 16}, + [1088] = {.lex_state = 15, .external_lex_state = 6}, + [1089] = {.lex_state = 16}, + [1090] = {.lex_state = 62}, + [1091] = {.lex_state = 62}, + [1092] = {.lex_state = 62, .external_lex_state = 6}, + [1093] = {.lex_state = 62, .external_lex_state = 6}, + [1094] = {.lex_state = 62, .external_lex_state = 6}, + [1095] = {.lex_state = 62, .external_lex_state = 6}, + [1096] = {.lex_state = 62, .external_lex_state = 6}, + [1097] = {.lex_state = 16}, + [1098] = {.lex_state = 62}, + [1099] = {.lex_state = 8}, + [1100] = {.lex_state = 0}, + [1101] = {.lex_state = 15, .external_lex_state = 6}, + [1102] = {.lex_state = 62}, + [1103] = {.lex_state = 62}, + [1104] = {.lex_state = 16}, + [1105] = {.lex_state = 62, .external_lex_state = 6}, + [1106] = {.lex_state = 16}, + [1107] = {.lex_state = 16}, + [1108] = {.lex_state = 16}, + [1109] = {.lex_state = 62, .external_lex_state = 6}, + [1110] = {.lex_state = 16}, + [1111] = {.lex_state = 0}, + [1112] = {.lex_state = 62, .external_lex_state = 6}, + [1113] = {.lex_state = 62, .external_lex_state = 6}, + [1114] = {.lex_state = 0}, + [1115] = {.lex_state = 0}, + [1116] = {.lex_state = 62}, + [1117] = {.lex_state = 8}, + [1118] = {.lex_state = 62, .external_lex_state = 6}, + [1119] = {.lex_state = 62}, + [1120] = {.lex_state = 16}, + [1121] = {.lex_state = 62, .external_lex_state = 6}, + [1122] = {.lex_state = 62, .external_lex_state = 6}, + [1123] = {.lex_state = 16}, + [1124] = {.lex_state = 62}, + [1125] = {.lex_state = 8}, + [1126] = {.lex_state = 62}, + [1127] = {.lex_state = 62}, + [1128] = {.lex_state = 0}, + [1129] = {.lex_state = 62}, + [1130] = {.lex_state = 62}, + [1131] = {.lex_state = 0}, + [1132] = {.lex_state = 0}, + [1133] = {.lex_state = 16}, + [1134] = {.lex_state = 16}, + [1135] = {.lex_state = 16}, + [1136] = {.lex_state = 16}, + [1137] = {.lex_state = 0, .external_lex_state = 6}, + [1138] = {.lex_state = 0, .external_lex_state = 6}, + [1139] = {.lex_state = 16}, + [1140] = {.lex_state = 16}, + [1141] = {.lex_state = 16}, + [1142] = {.lex_state = 62}, + [1143] = {.lex_state = 0, .external_lex_state = 6}, + [1144] = {.lex_state = 15}, + [1145] = {.lex_state = 16}, + [1146] = {.lex_state = 0}, + [1147] = {.lex_state = 62}, + [1148] = {.lex_state = 16}, + [1149] = {.lex_state = 62}, + [1150] = {.lex_state = 0, .external_lex_state = 6}, + [1151] = {.lex_state = 16}, + [1152] = {.lex_state = 62}, + [1153] = {.lex_state = 16}, + [1154] = {.lex_state = 0, .external_lex_state = 6}, + [1155] = {.lex_state = 0, .external_lex_state = 6}, + [1156] = {.lex_state = 62, .external_lex_state = 6}, + [1157] = {.lex_state = 16}, + [1158] = {.lex_state = 16}, + [1159] = {.lex_state = 16}, + [1160] = {.lex_state = 0, .external_lex_state = 6}, + [1161] = {.lex_state = 62}, + [1162] = {.lex_state = 0, .external_lex_state = 6}, + [1163] = {.lex_state = 0, .external_lex_state = 6}, + [1164] = {.lex_state = 0, .external_lex_state = 6}, + [1165] = {.lex_state = 15}, + [1166] = {.lex_state = 0}, + [1167] = {.lex_state = 0}, + [1168] = {.lex_state = 16, .external_lex_state = 2}, + [1169] = {.lex_state = 62}, + [1170] = {.lex_state = 0}, + [1171] = {.lex_state = 0, .external_lex_state = 6}, + [1172] = {.lex_state = 0, .external_lex_state = 6}, + [1173] = {.lex_state = 16}, + [1174] = {.lex_state = 0, .external_lex_state = 6}, + [1175] = {.lex_state = 0}, + [1176] = {.lex_state = 0}, + [1177] = {.lex_state = 16}, + [1178] = {.lex_state = 16}, + [1179] = {.lex_state = 62}, + [1180] = {.lex_state = 62}, + [1181] = {.lex_state = 16}, + [1182] = {.lex_state = 62}, + [1183] = {.lex_state = 62, .external_lex_state = 6}, + [1184] = {.lex_state = 62}, + [1185] = {.lex_state = 62}, + [1186] = {.lex_state = 62}, + [1187] = {.lex_state = 62, .external_lex_state = 6}, + [1188] = {.lex_state = 62}, + [1189] = {.lex_state = 0, .external_lex_state = 6}, + [1190] = {.lex_state = 16}, + [1191] = {.lex_state = 0, .external_lex_state = 6}, + [1192] = {.lex_state = 0, .external_lex_state = 6}, + [1193] = {.lex_state = 62}, + [1194] = {.lex_state = 0, .external_lex_state = 6}, + [1195] = {.lex_state = 62}, + [1196] = {.lex_state = 0}, + [1197] = {.lex_state = 62}, + [1198] = {.lex_state = 0, .external_lex_state = 6}, + [1199] = {.lex_state = 62}, + [1200] = {.lex_state = 0, .external_lex_state = 6}, + [1201] = {.lex_state = 16}, + [1202] = {.lex_state = 0}, + [1203] = {.lex_state = 0}, + [1204] = {.lex_state = 16}, + [1205] = {.lex_state = 0}, + [1206] = {.lex_state = 0}, + [1207] = {.lex_state = 16}, + [1208] = {.lex_state = 0}, + [1209] = {.lex_state = 0, .external_lex_state = 6}, + [1210] = {.lex_state = 16}, + [1211] = {.lex_state = 0}, + [1212] = {.lex_state = 0}, + [1213] = {.lex_state = 0}, + [1214] = {.lex_state = 0, .external_lex_state = 6}, + [1215] = {.lex_state = 62}, + [1216] = {.lex_state = 0}, + [1217] = {.lex_state = 0}, + [1218] = {.lex_state = 0}, + [1219] = {.lex_state = 0}, + [1220] = {.lex_state = 0}, + [1221] = {.lex_state = 16}, + [1222] = {.lex_state = 8}, + [1223] = {.lex_state = 0, .external_lex_state = 6}, + [1224] = {.lex_state = 16}, + [1225] = {.lex_state = 0}, + [1226] = {.lex_state = 0, .external_lex_state = 6}, + [1227] = {.lex_state = 0}, + [1228] = {.lex_state = 0}, + [1229] = {.lex_state = 0}, + [1230] = {.lex_state = 0}, + [1231] = {.lex_state = 0, .external_lex_state = 6}, + [1232] = {.lex_state = 0}, + [1233] = {.lex_state = 0}, + [1234] = {.lex_state = 0}, + [1235] = {.lex_state = 0}, + [1236] = {.lex_state = 62}, + [1237] = {.lex_state = 0, .external_lex_state = 6}, + [1238] = {.lex_state = 0, .external_lex_state = 6}, + [1239] = {.lex_state = 0}, + [1240] = {.lex_state = 0}, + [1241] = {.lex_state = 0, .external_lex_state = 6}, + [1242] = {.lex_state = 0}, + [1243] = {.lex_state = 0}, + [1244] = {.lex_state = 0, .external_lex_state = 6}, + [1245] = {.lex_state = 62}, + [1246] = {.lex_state = 0, .external_lex_state = 6}, + [1247] = {.lex_state = 0}, + [1248] = {.lex_state = 0, .external_lex_state = 6}, + [1249] = {.lex_state = 0}, + [1250] = {.lex_state = 16}, + [1251] = {.lex_state = 0}, + [1252] = {.lex_state = 0}, + [1253] = {.lex_state = 8}, + [1254] = {.lex_state = 0, .external_lex_state = 6}, + [1255] = {.lex_state = 0}, + [1256] = {.lex_state = 0}, + [1257] = {.lex_state = 0}, + [1258] = {.lex_state = 0}, + [1259] = {.lex_state = 62}, + [1260] = {.lex_state = 16}, + [1261] = {.lex_state = 0, .external_lex_state = 6}, + [1262] = {.lex_state = 15}, + [1263] = {.lex_state = 0, .external_lex_state = 6}, + [1264] = {.lex_state = 0}, + [1265] = {.lex_state = 0}, + [1266] = {.lex_state = 16}, + [1267] = {.lex_state = 16}, + [1268] = {.lex_state = 0}, + [1269] = {.lex_state = 8}, + [1270] = {.lex_state = 16}, + [1271] = {.lex_state = 0}, + [1272] = {.lex_state = 0}, + [1273] = {.lex_state = 0}, + [1274] = {.lex_state = 0}, + [1275] = {.lex_state = 0}, + [1276] = {.lex_state = 62}, + [1277] = {.lex_state = 0}, + [1278] = {.lex_state = 16}, + [1279] = {.lex_state = 0}, + [1280] = {.lex_state = 0}, + [1281] = {.lex_state = 16}, + [1282] = {.lex_state = 0}, + [1283] = {.lex_state = 0}, + [1284] = {.lex_state = 16}, + [1285] = {.lex_state = 0}, + [1286] = {.lex_state = 16}, + [1287] = {.lex_state = 16}, + [1288] = {.lex_state = 62, .external_lex_state = 6}, + [1289] = {.lex_state = 0}, + [1290] = {.lex_state = 0}, + [1291] = {.lex_state = 62, .external_lex_state = 6}, + [1292] = {.lex_state = 0}, + [1293] = {.lex_state = 62}, + [1294] = {.lex_state = 0}, + [1295] = {.lex_state = 16}, + [1296] = {.lex_state = 0}, + [1297] = {.lex_state = 0}, + [1298] = {.lex_state = 0}, + [1299] = {.lex_state = 0}, + [1300] = {.lex_state = 0}, + [1301] = {.lex_state = 0}, + [1302] = {.lex_state = 0}, + [1303] = {.lex_state = 0}, + [1304] = {.lex_state = 0}, + [1305] = {.lex_state = 62}, + [1306] = {.lex_state = 62}, + [1307] = {.lex_state = 8}, + [1308] = {.lex_state = 16}, + [1309] = {.lex_state = 0, .external_lex_state = 6}, + [1310] = {.lex_state = 0}, + [1311] = {.lex_state = 0}, + [1312] = {.lex_state = 62}, + [1313] = {.lex_state = 0}, + [1314] = {.lex_state = 62}, + [1315] = {.lex_state = 16}, + [1316] = {.lex_state = 0}, + [1317] = {.lex_state = 62}, + [1318] = {.lex_state = 62, .external_lex_state = 6}, + [1319] = {.lex_state = 0, .external_lex_state = 6}, + [1320] = {.lex_state = 16}, + [1321] = {.lex_state = 0}, + [1322] = {.lex_state = 16}, + [1323] = {.lex_state = 0}, + [1324] = {.lex_state = 0}, + [1325] = {.lex_state = 0}, + [1326] = {.lex_state = 0}, + [1327] = {.lex_state = 0}, + [1328] = {.lex_state = 0}, + [1329] = {.lex_state = 62}, + [1330] = {.lex_state = 0}, + [1331] = {.lex_state = 0}, + [1332] = {.lex_state = 8}, + [1333] = {.lex_state = 16}, + [1334] = {.lex_state = 16}, + [1335] = {.lex_state = 62, .external_lex_state = 6}, + [1336] = {.lex_state = 0}, + [1337] = {.lex_state = 0}, + [1338] = {.lex_state = 62}, + [1339] = {.lex_state = 16}, + [1340] = {.lex_state = 16}, + [1341] = {.lex_state = 0}, + [1342] = {.lex_state = 0, .external_lex_state = 6}, + [1343] = {.lex_state = 0}, + [1344] = {.lex_state = 17}, + [1345] = {.lex_state = 0, .external_lex_state = 6}, + [1346] = {.lex_state = 0, .external_lex_state = 6}, + [1347] = {.lex_state = 16}, + [1348] = {.lex_state = 0, .external_lex_state = 6}, + [1349] = {.lex_state = 0, .external_lex_state = 6}, + [1350] = {.lex_state = 0, .external_lex_state = 6}, + [1351] = {.lex_state = 0, .external_lex_state = 6}, + [1352] = {.lex_state = 0}, + [1353] = {.lex_state = 62}, + [1354] = {.lex_state = 0}, + [1355] = {.lex_state = 0}, + [1356] = {.lex_state = 0}, + [1357] = {.lex_state = 62}, + [1358] = {.lex_state = 0}, + [1359] = {.lex_state = 0}, + [1360] = {.lex_state = 0}, + [1361] = {.lex_state = 0, .external_lex_state = 6}, + [1362] = {.lex_state = 0}, + [1363] = {.lex_state = 17}, + [1364] = {.lex_state = 0}, + [1365] = {.lex_state = 15}, + [1366] = {.lex_state = 0}, + [1367] = {.lex_state = 0}, + [1368] = {.lex_state = 0}, + [1369] = {.lex_state = 0, .external_lex_state = 6}, + [1370] = {.lex_state = 0}, + [1371] = {.lex_state = 17}, + [1372] = {.lex_state = 17}, + [1373] = {.lex_state = 0}, + [1374] = {.lex_state = 17}, + [1375] = {.lex_state = 17}, + [1376] = {.lex_state = 17}, + [1377] = {.lex_state = 17}, + [1378] = {.lex_state = 17}, + [1379] = {.lex_state = 0}, + [1380] = {.lex_state = 17}, + [1381] = {.lex_state = 0}, + [1382] = {.lex_state = 0}, + [1383] = {.lex_state = 0, .external_lex_state = 6}, + [1384] = {.lex_state = 0}, + [1385] = {.lex_state = 0, .external_lex_state = 6}, + [1386] = {.lex_state = 0, .external_lex_state = 6}, + [1387] = {.lex_state = 0}, + [1388] = {.lex_state = 0}, + [1389] = {.lex_state = 0, .external_lex_state = 6}, + [1390] = {.lex_state = 0}, + [1391] = {.lex_state = 0, .external_lex_state = 6}, + [1392] = {.lex_state = 0}, + [1393] = {.lex_state = 0, .external_lex_state = 6}, + [1394] = {.lex_state = 0, .external_lex_state = 6}, + [1395] = {.lex_state = 0, .external_lex_state = 6}, + [1396] = {.lex_state = 0}, + [1397] = {.lex_state = 0}, + [1398] = {.lex_state = 0}, + [1399] = {.lex_state = 0}, + [1400] = {.lex_state = 0, .external_lex_state = 6}, + [1401] = {.lex_state = 0}, + [1402] = {.lex_state = 0}, + [1403] = {.lex_state = 0}, + [1404] = {.lex_state = 0}, + [1405] = {.lex_state = 0}, + [1406] = {.lex_state = 0}, + [1407] = {.lex_state = 0}, + [1408] = {.lex_state = 62}, + [1409] = {.lex_state = 0}, + [1410] = {.lex_state = 0}, + [1411] = {.lex_state = 0}, + [1412] = {.lex_state = 0}, + [1413] = {.lex_state = 16}, + [1414] = {.lex_state = 0}, + [1415] = {.lex_state = 0}, + [1416] = {.lex_state = 62}, + [1417] = {.lex_state = 0}, + [1418] = {.lex_state = 0}, + [1419] = {.lex_state = 62}, + [1420] = {.lex_state = 0}, + [1421] = {.lex_state = 62}, + [1422] = {.lex_state = 16}, + [1423] = {.lex_state = 16}, + [1424] = {.lex_state = 0}, + [1425] = {.lex_state = 0}, + [1426] = {.lex_state = 0}, + [1427] = {.lex_state = 16}, + [1428] = {.lex_state = 16}, + [1429] = {.lex_state = 0}, + [1430] = {.lex_state = 62}, + [1431] = {.lex_state = 0}, + [1432] = {.lex_state = 0}, + [1433] = {.lex_state = 0}, + [1434] = {.lex_state = 0}, + [1435] = {.lex_state = 16}, + [1436] = {.lex_state = 62}, + [1437] = {.lex_state = 0}, + [1438] = {.lex_state = 0}, + [1439] = {.lex_state = 0}, + [1440] = {.lex_state = 62}, + [1441] = {.lex_state = 62}, + [1442] = {.lex_state = 0}, + [1443] = {.lex_state = 62}, + [1444] = {.lex_state = 62}, + [1445] = {.lex_state = 62}, + [1446] = {.lex_state = 62}, + [1447] = {.lex_state = 0}, + [1448] = {.lex_state = 62}, + [1449] = {.lex_state = 62}, + [1450] = {.lex_state = 62}, + [1451] = {.lex_state = 16}, + [1452] = {.lex_state = 16}, + [1453] = {.lex_state = 16}, + [1454] = {.lex_state = 62}, + [1455] = {.lex_state = 0}, + [1456] = {.lex_state = 62}, + [1457] = {.lex_state = 62}, + [1458] = {.lex_state = 16}, + [1459] = {.lex_state = 16}, + [1460] = {.lex_state = 0}, + [1461] = {.lex_state = 0}, + [1462] = {.lex_state = 0}, + [1463] = {.lex_state = 16}, + [1464] = {.lex_state = 0}, + [1465] = {.lex_state = 16}, + [1466] = {.lex_state = 62}, + [1467] = {.lex_state = 0}, + [1468] = {.lex_state = 16}, + [1469] = {.lex_state = 0}, + [1470] = {.lex_state = 16}, + [1471] = {.lex_state = 16}, + [1472] = {.lex_state = 16}, + [1473] = {.lex_state = 0}, + [1474] = {.lex_state = 16}, + [1475] = {.lex_state = 0}, + [1476] = {.lex_state = 16}, + [1477] = {.lex_state = 62}, + [1478] = {.lex_state = 16}, + [1479] = {.lex_state = 0}, + [1480] = {.lex_state = 16}, + [1481] = {.lex_state = 16}, + [1482] = {.lex_state = 16}, + [1483] = {.lex_state = 16}, + [1484] = {.lex_state = 0}, + [1485] = {.lex_state = 16}, + [1486] = {.lex_state = 16}, + [1487] = {.lex_state = 16}, + [1488] = {.lex_state = 62}, + [1489] = {.lex_state = 16}, + [1490] = {.lex_state = 62}, + [1491] = {.lex_state = 16}, + [1492] = {.lex_state = 0}, + [1493] = {.lex_state = 16}, + [1494] = {.lex_state = 62}, + [1495] = {.lex_state = 16}, + [1496] = {.lex_state = 0}, + [1497] = {.lex_state = 0}, + [1498] = {.lex_state = 62}, + [1499] = {.lex_state = 16}, + [1500] = {.lex_state = 62}, + [1501] = {.lex_state = 16}, + [1502] = {.lex_state = 0}, + [1503] = {.lex_state = 0}, + [1504] = {.lex_state = 0}, + [1505] = {.lex_state = 16}, + [1506] = {.lex_state = 16}, + [1507] = {.lex_state = 16}, + [1508] = {.lex_state = 62}, + [1509] = {.lex_state = 62}, + [1510] = {.lex_state = 62}, + [1511] = {.lex_state = 62}, + [1512] = {.lex_state = 16}, + [1513] = {.lex_state = 0}, + [1514] = {.lex_state = 62}, + [1515] = {.lex_state = 0}, + [1516] = {.lex_state = 62}, + [1517] = {.lex_state = 62}, + [1518] = {.lex_state = 16}, + [1519] = {.lex_state = 62}, + [1520] = {.lex_state = 62}, + [1521] = {.lex_state = 16}, + [1522] = {.lex_state = 62}, + [1523] = {.lex_state = 0}, + [1524] = {.lex_state = 16}, +}; + +enum { + ts_external_token__newline = 0, + ts_external_token__indent = 1, + ts_external_token__dedent = 2, + ts_external_token__string_start = 3, + ts_external_token__string_content = 4, + ts_external_token__string_end = 5, +}; + +static const TSSymbol ts_external_scanner_symbol_map[EXTERNAL_TOKEN_COUNT] = { + [ts_external_token__newline] = sym__newline, + [ts_external_token__indent] = sym__indent, + [ts_external_token__dedent] = sym__dedent, + [ts_external_token__string_start] = sym__string_start, + [ts_external_token__string_content] = sym__string_content, + [ts_external_token__string_end] = sym__string_end, +}; + +static const bool ts_external_scanner_states[8][EXTERNAL_TOKEN_COUNT] = { + [1] = { + [ts_external_token__newline] = true, + [ts_external_token__indent] = true, + [ts_external_token__dedent] = true, + [ts_external_token__string_start] = true, + [ts_external_token__string_content] = true, + [ts_external_token__string_end] = true, + }, + [2] = { + [ts_external_token__string_start] = true, + }, + [3] = { + [ts_external_token__dedent] = true, + [ts_external_token__string_start] = true, + }, + [4] = { + [ts_external_token__newline] = true, + [ts_external_token__string_start] = true, + }, + [5] = { + [ts_external_token__newline] = true, + [ts_external_token__indent] = true, + [ts_external_token__string_start] = true, + }, + [6] = { + [ts_external_token__newline] = true, + }, + [7] = { + [ts_external_token__string_content] = true, + [ts_external_token__string_end] = true, + }, +}; + +static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { + [0] = { + [ts_builtin_sym_end] = ACTIONS(1), + [sym_identifier] = ACTIONS(1), + [anon_sym_import] = ACTIONS(1), + [anon_sym_DOT] = ACTIONS(1), + [anon_sym_from] = ACTIONS(1), + [anon_sym___future__] = ACTIONS(1), + [anon_sym_LPAREN] = ACTIONS(1), + [anon_sym_RPAREN] = ACTIONS(1), + [anon_sym_COMMA] = ACTIONS(1), + [anon_sym_as] = ACTIONS(1), + [anon_sym_STAR] = ACTIONS(1), + [anon_sym_print] = ACTIONS(1), + [anon_sym_GT_GT] = ACTIONS(1), + [anon_sym_assert] = ACTIONS(1), + [anon_sym_COLON_EQ] = ACTIONS(1), + [anon_sym_return] = ACTIONS(1), + [anon_sym_del] = ACTIONS(1), + [anon_sym_raise] = ACTIONS(1), + [anon_sym_pass] = ACTIONS(1), + [anon_sym_break] = ACTIONS(1), + [anon_sym_continue] = ACTIONS(1), + [anon_sym_if] = ACTIONS(1), + [anon_sym_COLON] = ACTIONS(1), + [anon_sym_elif] = ACTIONS(1), + [anon_sym_else] = ACTIONS(1), + [anon_sym_async] = ACTIONS(1), + [anon_sym_for] = ACTIONS(1), + [anon_sym_in] = ACTIONS(1), + [anon_sym_while] = ACTIONS(1), + [anon_sym_try] = ACTIONS(1), + [anon_sym_except] = ACTIONS(1), + [anon_sym_except_STAR] = ACTIONS(1), + [anon_sym_finally] = ACTIONS(1), + [anon_sym_with] = ACTIONS(1), + [anon_sym_match] = ACTIONS(1), + [anon_sym_case] = ACTIONS(1), + [anon_sym_PIPE] = ACTIONS(1), + [anon_sym_DASH] = ACTIONS(1), + [anon_sym_PLUS] = ACTIONS(1), + [sym_match_wildcard_pattern] = ACTIONS(1), + [anon_sym_LBRACK] = ACTIONS(1), + [anon_sym_RBRACK] = ACTIONS(1), + [anon_sym_LBRACE] = ACTIONS(1), + [anon_sym_RBRACE] = ACTIONS(1), + [anon_sym_STAR_STAR] = ACTIONS(1), + [anon_sym_EQ] = ACTIONS(1), + [anon_sym_def] = ACTIONS(1), + [anon_sym_DASH_GT] = ACTIONS(1), + [anon_sym_global] = ACTIONS(1), + [anon_sym_nonlocal] = ACTIONS(1), + [anon_sym_exec] = ACTIONS(1), + [anon_sym_type] = ACTIONS(1), + [anon_sym_class] = ACTIONS(1), + [anon_sym_AT] = ACTIONS(1), + [anon_sym_not] = ACTIONS(1), + [anon_sym_and] = ACTIONS(1), + [anon_sym_or] = ACTIONS(1), + [anon_sym_SLASH] = ACTIONS(1), + [anon_sym_PERCENT] = ACTIONS(1), + [anon_sym_SLASH_SLASH] = ACTIONS(1), + [anon_sym_AMP] = ACTIONS(1), + [anon_sym_CARET] = ACTIONS(1), + [anon_sym_LT_LT] = ACTIONS(1), + [anon_sym_TILDE] = ACTIONS(1), + [anon_sym_LT] = ACTIONS(1), + [anon_sym_LT_EQ] = ACTIONS(1), + [anon_sym_EQ_EQ] = ACTIONS(1), + [anon_sym_BANG_EQ] = ACTIONS(1), + [anon_sym_GT_EQ] = ACTIONS(1), + [anon_sym_GT] = ACTIONS(1), + [anon_sym_LT_GT] = ACTIONS(1), + [anon_sym_is] = ACTIONS(1), + [anon_sym_lambda] = ACTIONS(1), + [anon_sym_PLUS_EQ] = ACTIONS(1), + [anon_sym_DASH_EQ] = ACTIONS(1), + [anon_sym_STAR_EQ] = ACTIONS(1), + [anon_sym_SLASH_EQ] = ACTIONS(1), + [anon_sym_AT_EQ] = ACTIONS(1), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(1), + [anon_sym_PERCENT_EQ] = ACTIONS(1), + [anon_sym_STAR_STAR_EQ] = ACTIONS(1), + [anon_sym_GT_GT_EQ] = ACTIONS(1), + [anon_sym_LT_LT_EQ] = ACTIONS(1), + [anon_sym_AMP_EQ] = ACTIONS(1), + [anon_sym_CARET_EQ] = ACTIONS(1), + [anon_sym_PIPE_EQ] = ACTIONS(1), + [anon_sym_yield] = ACTIONS(1), + [sym_ellipsis] = ACTIONS(1), + [anon_sym_LBRACE2] = ACTIONS(1), + [sym_type_conversion] = ACTIONS(1), + [sym_integer] = ACTIONS(1), + [sym_float] = ACTIONS(1), + [anon_sym_await] = ACTIONS(1), + [sym_true] = ACTIONS(1), + [sym_false] = ACTIONS(1), + [sym_none] = ACTIONS(1), + [sym_comment] = ACTIONS(3), + [sym__semicolon] = ACTIONS(1), + [sym__newline] = ACTIONS(1), + [sym__indent] = ACTIONS(1), + [sym__dedent] = ACTIONS(1), + [sym__string_start] = ACTIONS(1), + [sym__string_content] = ACTIONS(1), + [sym__string_end] = ACTIONS(1), + }, + [1] = { + [sym_module] = STATE(1502), + [sym__statement] = STATE(64), + [sym__simple_statements] = STATE(64), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_if_statement] = STATE(64), + [sym_for_statement] = STATE(64), + [sym_while_statement] = STATE(64), + [sym_try_statement] = STATE(64), + [sym_with_statement] = STATE(64), + [sym_match_statement] = STATE(64), + [sym_function_definition] = STATE(64), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_class_definition] = STATE(64), + [sym_decorated_definition] = STATE(64), + [sym_decorator] = STATE(1002), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(64), + [aux_sym_decorated_definition_repeat1] = STATE(1002), + [ts_builtin_sym_end] = ACTIONS(5), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(33), + [anon_sym_async] = ACTIONS(35), + [anon_sym_for] = ACTIONS(37), + [anon_sym_while] = ACTIONS(39), + [anon_sym_try] = ACTIONS(41), + [anon_sym_with] = ACTIONS(43), + [anon_sym_match] = ACTIONS(45), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(55), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(65), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(81), + }, + [2] = { + [sym__statement] = STATE(65), + [sym__simple_statements] = STATE(65), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(65), + [sym_for_statement] = STATE(65), + [sym_while_statement] = STATE(65), + [sym_try_statement] = STATE(65), + [sym_with_statement] = STATE(65), + [sym_match_statement] = STATE(65), + [sym_function_definition] = STATE(65), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(65), + [sym_decorated_definition] = STATE(65), + [sym_decorator] = STATE(996), + [sym_block] = STATE(357), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(65), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(101), + [sym__string_start] = ACTIONS(81), + }, + [3] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(587), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [4] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(540), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [5] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(534), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [6] = { + [sym__statement] = STATE(65), + [sym__simple_statements] = STATE(65), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(65), + [sym_for_statement] = STATE(65), + [sym_while_statement] = STATE(65), + [sym_try_statement] = STATE(65), + [sym_with_statement] = STATE(65), + [sym_match_statement] = STATE(65), + [sym_function_definition] = STATE(65), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(65), + [sym_decorated_definition] = STATE(65), + [sym_decorator] = STATE(996), + [sym_block] = STATE(373), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(65), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(101), + [sym__string_start] = ACTIONS(81), + }, + [7] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(403), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [8] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(509), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [9] = { + [sym__statement] = STATE(62), + [sym__simple_statements] = STATE(62), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(62), + [sym_for_statement] = STATE(62), + [sym_while_statement] = STATE(62), + [sym_try_statement] = STATE(62), + [sym_with_statement] = STATE(62), + [sym_match_statement] = STATE(62), + [sym_function_definition] = STATE(62), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(62), + [sym_decorated_definition] = STATE(62), + [sym_decorator] = STATE(996), + [sym_block] = STATE(372), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(62), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(105), + [sym__string_start] = ACTIONS(81), + }, + [10] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(546), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [11] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(279), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [12] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(491), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [13] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(495), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [14] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(506), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [15] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(505), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [16] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(408), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [17] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(536), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [18] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(488), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [19] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(556), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [20] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(528), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [21] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(414), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [22] = { + [sym__statement] = STATE(65), + [sym__simple_statements] = STATE(65), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(65), + [sym_for_statement] = STATE(65), + [sym_while_statement] = STATE(65), + [sym_try_statement] = STATE(65), + [sym_with_statement] = STATE(65), + [sym_match_statement] = STATE(65), + [sym_function_definition] = STATE(65), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(65), + [sym_decorated_definition] = STATE(65), + [sym_decorator] = STATE(996), + [sym_block] = STATE(366), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(65), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(101), + [sym__string_start] = ACTIONS(81), + }, + [23] = { + [sym__statement] = STATE(62), + [sym__simple_statements] = STATE(62), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(62), + [sym_for_statement] = STATE(62), + [sym_while_statement] = STATE(62), + [sym_try_statement] = STATE(62), + [sym_with_statement] = STATE(62), + [sym_match_statement] = STATE(62), + [sym_function_definition] = STATE(62), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(62), + [sym_decorated_definition] = STATE(62), + [sym_decorator] = STATE(996), + [sym_block] = STATE(363), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(62), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(105), + [sym__string_start] = ACTIONS(81), + }, + [24] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(512), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [25] = { + [sym__statement] = STATE(60), + [sym__simple_statements] = STATE(60), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(60), + [sym_for_statement] = STATE(60), + [sym_while_statement] = STATE(60), + [sym_try_statement] = STATE(60), + [sym_with_statement] = STATE(60), + [sym_match_statement] = STATE(60), + [sym_function_definition] = STATE(60), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(60), + [sym_decorated_definition] = STATE(60), + [sym_decorator] = STATE(996), + [sym_block] = STATE(320), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(60), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(109), + [sym__string_start] = ACTIONS(81), + }, + [26] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(590), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [27] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(494), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [28] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(557), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [29] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(549), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [30] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(586), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [31] = { + [sym__statement] = STATE(60), + [sym__simple_statements] = STATE(60), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(60), + [sym_for_statement] = STATE(60), + [sym_while_statement] = STATE(60), + [sym_try_statement] = STATE(60), + [sym_with_statement] = STATE(60), + [sym_match_statement] = STATE(60), + [sym_function_definition] = STATE(60), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(60), + [sym_decorated_definition] = STATE(60), + [sym_decorator] = STATE(996), + [sym_block] = STATE(328), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(60), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(109), + [sym__string_start] = ACTIONS(81), + }, + [32] = { + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(996), + [sym_block] = STATE(329), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(111), + [sym__string_start] = ACTIONS(81), + }, + [33] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(583), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [34] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(418), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [35] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(489), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [36] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(498), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [37] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(555), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [38] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(565), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [39] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(428), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [40] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(515), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [41] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(574), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [42] = { + [sym__statement] = STATE(66), + [sym__simple_statements] = STATE(66), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(66), + [sym_for_statement] = STATE(66), + [sym_while_statement] = STATE(66), + [sym_try_statement] = STATE(66), + [sym_with_statement] = STATE(66), + [sym_match_statement] = STATE(66), + [sym_function_definition] = STATE(66), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(66), + [sym_decorated_definition] = STATE(66), + [sym_decorator] = STATE(996), + [sym_block] = STATE(318), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(66), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(111), + [sym__string_start] = ACTIONS(81), + }, + [43] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(513), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [44] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(533), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [45] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(573), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [46] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(427), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [47] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(387), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [48] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(496), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [49] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(566), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [50] = { + [sym__statement] = STATE(60), + [sym__simple_statements] = STATE(60), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(60), + [sym_for_statement] = STATE(60), + [sym_while_statement] = STATE(60), + [sym_try_statement] = STATE(60), + [sym_with_statement] = STATE(60), + [sym_match_statement] = STATE(60), + [sym_function_definition] = STATE(60), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(60), + [sym_decorated_definition] = STATE(60), + [sym_decorator] = STATE(996), + [sym_block] = STATE(333), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(60), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(109), + [sym__string_start] = ACTIONS(81), + }, + [51] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(407), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [52] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(579), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [53] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(581), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [54] = { + [sym__statement] = STATE(69), + [sym__simple_statements] = STATE(69), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(69), + [sym_for_statement] = STATE(69), + [sym_while_statement] = STATE(69), + [sym_try_statement] = STATE(69), + [sym_with_statement] = STATE(69), + [sym_match_statement] = STATE(69), + [sym_function_definition] = STATE(69), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(69), + [sym_decorated_definition] = STATE(69), + [sym_decorator] = STATE(996), + [sym_block] = STATE(1003), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(69), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(113), + [sym__string_start] = ACTIONS(81), + }, + [55] = { + [sym__statement] = STATE(69), + [sym__simple_statements] = STATE(69), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(69), + [sym_for_statement] = STATE(69), + [sym_while_statement] = STATE(69), + [sym_try_statement] = STATE(69), + [sym_with_statement] = STATE(69), + [sym_match_statement] = STATE(69), + [sym_function_definition] = STATE(69), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(69), + [sym_decorated_definition] = STATE(69), + [sym_decorator] = STATE(996), + [sym_block] = STATE(983), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(69), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(113), + [sym__string_start] = ACTIONS(81), + }, + [56] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(265), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [57] = { + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(61), + [sym_for_statement] = STATE(61), + [sym_while_statement] = STATE(61), + [sym_try_statement] = STATE(61), + [sym_with_statement] = STATE(61), + [sym_match_statement] = STATE(61), + [sym_function_definition] = STATE(61), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(996), + [sym_block] = STATE(561), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(107), + [sym__string_start] = ACTIONS(81), + }, + [58] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(517), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [59] = { + [sym__statement] = STATE(68), + [sym__simple_statements] = STATE(68), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(68), + [sym_for_statement] = STATE(68), + [sym_while_statement] = STATE(68), + [sym_try_statement] = STATE(68), + [sym_with_statement] = STATE(68), + [sym_match_statement] = STATE(68), + [sym_function_definition] = STATE(68), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(68), + [sym_decorated_definition] = STATE(68), + [sym_decorator] = STATE(996), + [sym_block] = STATE(554), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(68), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(103), + [sym__string_start] = ACTIONS(81), + }, + [60] = { + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(63), + [sym_for_statement] = STATE(63), + [sym_while_statement] = STATE(63), + [sym_try_statement] = STATE(63), + [sym_with_statement] = STATE(63), + [sym_match_statement] = STATE(63), + [sym_function_definition] = STATE(63), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(996), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(115), + [sym__string_start] = ACTIONS(81), + }, + [61] = { + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(63), + [sym_for_statement] = STATE(63), + [sym_while_statement] = STATE(63), + [sym_try_statement] = STATE(63), + [sym_with_statement] = STATE(63), + [sym_match_statement] = STATE(63), + [sym_function_definition] = STATE(63), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(996), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(117), + [sym__string_start] = ACTIONS(81), + }, + [62] = { + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(63), + [sym_for_statement] = STATE(63), + [sym_while_statement] = STATE(63), + [sym_try_statement] = STATE(63), + [sym_with_statement] = STATE(63), + [sym_match_statement] = STATE(63), + [sym_function_definition] = STATE(63), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(996), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(119), + [sym__string_start] = ACTIONS(81), + }, + [63] = { + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(63), + [sym_for_statement] = STATE(63), + [sym_while_statement] = STATE(63), + [sym_try_statement] = STATE(63), + [sym_with_statement] = STATE(63), + [sym_match_statement] = STATE(63), + [sym_function_definition] = STATE(63), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(996), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(121), + [anon_sym_import] = ACTIONS(124), + [anon_sym_from] = ACTIONS(127), + [anon_sym_LPAREN] = ACTIONS(130), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_print] = ACTIONS(136), + [anon_sym_assert] = ACTIONS(139), + [anon_sym_return] = ACTIONS(142), + [anon_sym_del] = ACTIONS(145), + [anon_sym_raise] = ACTIONS(148), + [anon_sym_pass] = ACTIONS(151), + [anon_sym_break] = ACTIONS(154), + [anon_sym_continue] = ACTIONS(157), + [anon_sym_if] = ACTIONS(160), + [anon_sym_async] = ACTIONS(163), + [anon_sym_for] = ACTIONS(166), + [anon_sym_while] = ACTIONS(169), + [anon_sym_try] = ACTIONS(172), + [anon_sym_with] = ACTIONS(175), + [anon_sym_match] = ACTIONS(178), + [anon_sym_DASH] = ACTIONS(181), + [anon_sym_PLUS] = ACTIONS(181), + [anon_sym_LBRACK] = ACTIONS(184), + [anon_sym_LBRACE] = ACTIONS(187), + [anon_sym_STAR_STAR] = ACTIONS(190), + [anon_sym_def] = ACTIONS(193), + [anon_sym_global] = ACTIONS(196), + [anon_sym_nonlocal] = ACTIONS(199), + [anon_sym_exec] = ACTIONS(202), + [anon_sym_type] = ACTIONS(205), + [anon_sym_class] = ACTIONS(208), + [anon_sym_AT] = ACTIONS(211), + [anon_sym_not] = ACTIONS(214), + [anon_sym_TILDE] = ACTIONS(181), + [anon_sym_lambda] = ACTIONS(217), + [anon_sym_yield] = ACTIONS(220), + [sym_ellipsis] = ACTIONS(223), + [sym_integer] = ACTIONS(226), + [sym_float] = ACTIONS(223), + [anon_sym_await] = ACTIONS(229), + [sym_true] = ACTIONS(226), + [sym_false] = ACTIONS(226), + [sym_none] = ACTIONS(226), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(232), + [sym__string_start] = ACTIONS(234), + }, + [64] = { + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(1002), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(1002), + [ts_builtin_sym_end] = ACTIONS(237), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(33), + [anon_sym_async] = ACTIONS(35), + [anon_sym_for] = ACTIONS(37), + [anon_sym_while] = ACTIONS(39), + [anon_sym_try] = ACTIONS(41), + [anon_sym_with] = ACTIONS(43), + [anon_sym_match] = ACTIONS(45), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(55), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(65), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(81), + }, + [65] = { + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(63), + [sym_for_statement] = STATE(63), + [sym_while_statement] = STATE(63), + [sym_try_statement] = STATE(63), + [sym_with_statement] = STATE(63), + [sym_match_statement] = STATE(63), + [sym_function_definition] = STATE(63), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(996), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(239), + [sym__string_start] = ACTIONS(81), + }, + [66] = { + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(63), + [sym_for_statement] = STATE(63), + [sym_while_statement] = STATE(63), + [sym_try_statement] = STATE(63), + [sym_with_statement] = STATE(63), + [sym_match_statement] = STATE(63), + [sym_function_definition] = STATE(63), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(996), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(241), + [sym__string_start] = ACTIONS(81), + }, + [67] = { + [sym__statement] = STATE(67), + [sym__simple_statements] = STATE(67), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_if_statement] = STATE(67), + [sym_for_statement] = STATE(67), + [sym_while_statement] = STATE(67), + [sym_try_statement] = STATE(67), + [sym_with_statement] = STATE(67), + [sym_match_statement] = STATE(67), + [sym_function_definition] = STATE(67), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_class_definition] = STATE(67), + [sym_decorated_definition] = STATE(67), + [sym_decorator] = STATE(1002), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(67), + [aux_sym_decorated_definition_repeat1] = STATE(1002), + [ts_builtin_sym_end] = ACTIONS(232), + [sym_identifier] = ACTIONS(121), + [anon_sym_import] = ACTIONS(124), + [anon_sym_from] = ACTIONS(127), + [anon_sym_LPAREN] = ACTIONS(130), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_print] = ACTIONS(136), + [anon_sym_assert] = ACTIONS(139), + [anon_sym_return] = ACTIONS(142), + [anon_sym_del] = ACTIONS(145), + [anon_sym_raise] = ACTIONS(148), + [anon_sym_pass] = ACTIONS(151), + [anon_sym_break] = ACTIONS(154), + [anon_sym_continue] = ACTIONS(157), + [anon_sym_if] = ACTIONS(243), + [anon_sym_async] = ACTIONS(246), + [anon_sym_for] = ACTIONS(249), + [anon_sym_while] = ACTIONS(252), + [anon_sym_try] = ACTIONS(255), + [anon_sym_with] = ACTIONS(258), + [anon_sym_match] = ACTIONS(261), + [anon_sym_DASH] = ACTIONS(181), + [anon_sym_PLUS] = ACTIONS(181), + [anon_sym_LBRACK] = ACTIONS(184), + [anon_sym_LBRACE] = ACTIONS(187), + [anon_sym_STAR_STAR] = ACTIONS(190), + [anon_sym_def] = ACTIONS(264), + [anon_sym_global] = ACTIONS(196), + [anon_sym_nonlocal] = ACTIONS(199), + [anon_sym_exec] = ACTIONS(202), + [anon_sym_type] = ACTIONS(205), + [anon_sym_class] = ACTIONS(267), + [anon_sym_AT] = ACTIONS(211), + [anon_sym_not] = ACTIONS(214), + [anon_sym_TILDE] = ACTIONS(181), + [anon_sym_lambda] = ACTIONS(217), + [anon_sym_yield] = ACTIONS(220), + [sym_ellipsis] = ACTIONS(223), + [sym_integer] = ACTIONS(226), + [sym_float] = ACTIONS(223), + [anon_sym_await] = ACTIONS(229), + [sym_true] = ACTIONS(226), + [sym_false] = ACTIONS(226), + [sym_none] = ACTIONS(226), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(234), + }, + [68] = { + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(63), + [sym_for_statement] = STATE(63), + [sym_while_statement] = STATE(63), + [sym_try_statement] = STATE(63), + [sym_with_statement] = STATE(63), + [sym_match_statement] = STATE(63), + [sym_function_definition] = STATE(63), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(996), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(270), + [sym__string_start] = ACTIONS(81), + }, + [69] = { + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_if_statement] = STATE(63), + [sym_for_statement] = STATE(63), + [sym_while_statement] = STATE(63), + [sym_try_statement] = STATE(63), + [sym_with_statement] = STATE(63), + [sym_match_statement] = STATE(63), + [sym_function_definition] = STATE(63), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(996), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(996), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_if] = ACTIONS(83), + [anon_sym_async] = ACTIONS(85), + [anon_sym_for] = ACTIONS(87), + [anon_sym_while] = ACTIONS(89), + [anon_sym_try] = ACTIONS(91), + [anon_sym_with] = ACTIONS(93), + [anon_sym_match] = ACTIONS(95), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_def] = ACTIONS(97), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_class] = ACTIONS(99), + [anon_sym_AT] = ACTIONS(67), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(272), + [sym__string_start] = ACTIONS(81), + }, + [70] = { + [sym_named_expression] = STATE(900), + [sym_list_splat] = STATE(1366), + [sym_dictionary_splat] = STATE(1366), + [sym_expression_list] = STATE(1452), + [sym_expression] = STATE(1079), + [sym_primary_expression] = STATE(630), + [sym_not_operator] = STATE(900), + [sym_boolean_operator] = STATE(900), + [sym_binary_operator] = STATE(642), + [sym_unary_operator] = STATE(642), + [sym_comparison_operator] = STATE(900), + [sym_lambda] = STATE(900), + [sym_attribute] = STATE(642), + [sym_subscript] = STATE(642), + [sym_call] = STATE(642), + [sym_list] = STATE(642), + [sym_set] = STATE(642), + [sym_tuple] = STATE(642), + [sym_dictionary] = STATE(642), + [sym_list_comprehension] = STATE(642), + [sym_dictionary_comprehension] = STATE(642), + [sym_set_comprehension] = STATE(642), + [sym_generator_expression] = STATE(642), + [sym_parenthesized_expression] = STATE(642), + [sym_conditional_expression] = STATE(900), + [sym_concatenated_string] = STATE(642), + [sym_string] = STATE(600), + [sym_await] = STATE(900), + [sym_identifier] = ACTIONS(274), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(278), + [anon_sym_COMMA] = ACTIONS(280), + [anon_sym_STAR] = ACTIONS(283), + [anon_sym_print] = ACTIONS(285), + [anon_sym_GT_GT] = ACTIONS(276), + [anon_sym_COLON_EQ] = ACTIONS(287), + [anon_sym_if] = ACTIONS(276), + [anon_sym_COLON] = ACTIONS(289), + [anon_sym_async] = ACTIONS(285), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(285), + [anon_sym_PIPE] = ACTIONS(276), + [anon_sym_DASH] = ACTIONS(291), + [anon_sym_PLUS] = ACTIONS(291), + [anon_sym_LBRACK] = ACTIONS(293), + [anon_sym_LBRACE] = ACTIONS(295), + [anon_sym_STAR_STAR] = ACTIONS(297), + [anon_sym_EQ] = ACTIONS(289), + [anon_sym_exec] = ACTIONS(285), + [anon_sym_type] = ACTIONS(285), + [anon_sym_AT] = ACTIONS(276), + [anon_sym_not] = ACTIONS(299), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(276), + [anon_sym_SLASH_SLASH] = ACTIONS(276), + [anon_sym_AMP] = ACTIONS(276), + [anon_sym_CARET] = ACTIONS(276), + [anon_sym_LT_LT] = ACTIONS(276), + [anon_sym_TILDE] = ACTIONS(301), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(305), + [anon_sym_PLUS_EQ] = ACTIONS(307), + [anon_sym_DASH_EQ] = ACTIONS(307), + [anon_sym_STAR_EQ] = ACTIONS(307), + [anon_sym_SLASH_EQ] = ACTIONS(307), + [anon_sym_AT_EQ] = ACTIONS(307), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(307), + [anon_sym_PERCENT_EQ] = ACTIONS(307), + [anon_sym_STAR_STAR_EQ] = ACTIONS(307), + [anon_sym_GT_GT_EQ] = ACTIONS(307), + [anon_sym_LT_LT_EQ] = ACTIONS(307), + [anon_sym_AMP_EQ] = ACTIONS(307), + [anon_sym_CARET_EQ] = ACTIONS(307), + [anon_sym_PIPE_EQ] = ACTIONS(307), + [sym_ellipsis] = ACTIONS(309), + [sym_integer] = ACTIONS(311), + [sym_float] = ACTIONS(309), + [anon_sym_await] = ACTIONS(313), + [sym_true] = ACTIONS(311), + [sym_false] = ACTIONS(311), + [sym_none] = ACTIONS(311), + [sym_comment] = ACTIONS(3), + [sym__semicolon] = ACTIONS(303), + [sym__newline] = ACTIONS(303), + [sym__string_start] = ACTIONS(315), + }, + [71] = { + [sym_named_expression] = STATE(900), + [sym_list_splat] = STATE(1366), + [sym_dictionary_splat] = STATE(1366), + [sym_expression_list] = STATE(1493), + [sym_expression] = STATE(1080), + [sym_primary_expression] = STATE(630), + [sym_not_operator] = STATE(900), + [sym_boolean_operator] = STATE(900), + [sym_binary_operator] = STATE(642), + [sym_unary_operator] = STATE(642), + [sym_comparison_operator] = STATE(900), + [sym_lambda] = STATE(900), + [sym_attribute] = STATE(642), + [sym_subscript] = STATE(642), + [sym_call] = STATE(642), + [sym_list] = STATE(642), + [sym_set] = STATE(642), + [sym_tuple] = STATE(642), + [sym_dictionary] = STATE(642), + [sym_list_comprehension] = STATE(642), + [sym_dictionary_comprehension] = STATE(642), + [sym_set_comprehension] = STATE(642), + [sym_generator_expression] = STATE(642), + [sym_parenthesized_expression] = STATE(642), + [sym_conditional_expression] = STATE(900), + [sym_concatenated_string] = STATE(642), + [sym_string] = STATE(600), + [sym_await] = STATE(900), + [sym_identifier] = ACTIONS(274), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(278), + [anon_sym_COMMA] = ACTIONS(280), + [anon_sym_STAR] = ACTIONS(283), + [anon_sym_print] = ACTIONS(285), + [anon_sym_GT_GT] = ACTIONS(276), + [anon_sym_COLON_EQ] = ACTIONS(287), + [anon_sym_if] = ACTIONS(276), + [anon_sym_COLON] = ACTIONS(289), + [anon_sym_async] = ACTIONS(285), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(285), + [anon_sym_PIPE] = ACTIONS(276), + [anon_sym_DASH] = ACTIONS(291), + [anon_sym_PLUS] = ACTIONS(291), + [anon_sym_LBRACK] = ACTIONS(293), + [anon_sym_LBRACE] = ACTIONS(295), + [anon_sym_STAR_STAR] = ACTIONS(297), + [anon_sym_EQ] = ACTIONS(289), + [anon_sym_exec] = ACTIONS(285), + [anon_sym_type] = ACTIONS(285), + [anon_sym_AT] = ACTIONS(276), + [anon_sym_not] = ACTIONS(299), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(276), + [anon_sym_SLASH_SLASH] = ACTIONS(276), + [anon_sym_AMP] = ACTIONS(276), + [anon_sym_CARET] = ACTIONS(276), + [anon_sym_LT_LT] = ACTIONS(276), + [anon_sym_TILDE] = ACTIONS(301), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(305), + [anon_sym_PLUS_EQ] = ACTIONS(307), + [anon_sym_DASH_EQ] = ACTIONS(307), + [anon_sym_STAR_EQ] = ACTIONS(307), + [anon_sym_SLASH_EQ] = ACTIONS(307), + [anon_sym_AT_EQ] = ACTIONS(307), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(307), + [anon_sym_PERCENT_EQ] = ACTIONS(307), + [anon_sym_STAR_STAR_EQ] = ACTIONS(307), + [anon_sym_GT_GT_EQ] = ACTIONS(307), + [anon_sym_LT_LT_EQ] = ACTIONS(307), + [anon_sym_AMP_EQ] = ACTIONS(307), + [anon_sym_CARET_EQ] = ACTIONS(307), + [anon_sym_PIPE_EQ] = ACTIONS(307), + [sym_ellipsis] = ACTIONS(309), + [sym_integer] = ACTIONS(311), + [sym_float] = ACTIONS(309), + [anon_sym_await] = ACTIONS(313), + [sym_true] = ACTIONS(311), + [sym_false] = ACTIONS(311), + [sym_none] = ACTIONS(311), + [sym_comment] = ACTIONS(3), + [sym__semicolon] = ACTIONS(303), + [sym__newline] = ACTIONS(303), + [sym__string_start] = ACTIONS(315), + }, + [72] = { + [sym__simple_statements] = STATE(550), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(319), + [sym__indent] = ACTIONS(321), + [sym__string_start] = ACTIONS(81), + }, + [73] = { + [sym__simple_statements] = STATE(432), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(323), + [sym__indent] = ACTIONS(325), + [sym__string_start] = ACTIONS(81), + }, + [74] = { + [sym__simple_statements] = STATE(327), + [sym_import_statement] = STATE(1248), + [sym_future_import_statement] = STATE(1248), + [sym_import_from_statement] = STATE(1248), + [sym_print_statement] = STATE(1248), + [sym_assert_statement] = STATE(1248), + [sym_expression_statement] = STATE(1248), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1248), + [sym_delete_statement] = STATE(1248), + [sym_raise_statement] = STATE(1248), + [sym_pass_statement] = STATE(1248), + [sym_break_statement] = STATE(1248), + [sym_continue_statement] = STATE(1248), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1248), + [sym_nonlocal_statement] = STATE(1248), + [sym_exec_statement] = STATE(1248), + [sym_type_alias_statement] = STATE(1248), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(327), + [sym__indent] = ACTIONS(329), + [sym__string_start] = ACTIONS(81), + }, + [75] = { + [sym_chevron] = STATE(1150), + [sym_named_expression] = STATE(1009), + [sym_expression] = STATE(1043), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_attribute] = STATE(797), + [sym_subscript] = STATE(797), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(331), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(303), + [anon_sym_COMMA] = ACTIONS(280), + [anon_sym_STAR] = ACTIONS(276), + [anon_sym_print] = ACTIONS(333), + [anon_sym_GT_GT] = ACTIONS(335), + [anon_sym_COLON_EQ] = ACTIONS(287), + [anon_sym_if] = ACTIONS(276), + [anon_sym_COLON] = ACTIONS(289), + [anon_sym_async] = ACTIONS(333), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(333), + [anon_sym_PIPE] = ACTIONS(276), + [anon_sym_DASH] = ACTIONS(276), + [anon_sym_PLUS] = ACTIONS(276), + [anon_sym_LBRACK] = ACTIONS(303), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(276), + [anon_sym_EQ] = ACTIONS(289), + [anon_sym_exec] = ACTIONS(333), + [anon_sym_type] = ACTIONS(333), + [anon_sym_AT] = ACTIONS(276), + [anon_sym_not] = ACTIONS(276), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(276), + [anon_sym_SLASH_SLASH] = ACTIONS(276), + [anon_sym_AMP] = ACTIONS(276), + [anon_sym_CARET] = ACTIONS(276), + [anon_sym_LT_LT] = ACTIONS(276), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_PLUS_EQ] = ACTIONS(307), + [anon_sym_DASH_EQ] = ACTIONS(307), + [anon_sym_STAR_EQ] = ACTIONS(307), + [anon_sym_SLASH_EQ] = ACTIONS(307), + [anon_sym_AT_EQ] = ACTIONS(307), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(307), + [anon_sym_PERCENT_EQ] = ACTIONS(307), + [anon_sym_STAR_STAR_EQ] = ACTIONS(307), + [anon_sym_GT_GT_EQ] = ACTIONS(307), + [anon_sym_LT_LT_EQ] = ACTIONS(307), + [anon_sym_AMP_EQ] = ACTIONS(307), + [anon_sym_CARET_EQ] = ACTIONS(307), + [anon_sym_PIPE_EQ] = ACTIONS(307), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(337), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__semicolon] = ACTIONS(303), + [sym__newline] = ACTIONS(303), + [sym__string_start] = ACTIONS(81), + }, + [76] = { + [sym__simple_statements] = STATE(340), + [sym_import_statement] = STATE(1261), + [sym_future_import_statement] = STATE(1261), + [sym_import_from_statement] = STATE(1261), + [sym_print_statement] = STATE(1261), + [sym_assert_statement] = STATE(1261), + [sym_expression_statement] = STATE(1261), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1261), + [sym_delete_statement] = STATE(1261), + [sym_raise_statement] = STATE(1261), + [sym_pass_statement] = STATE(1261), + [sym_break_statement] = STATE(1261), + [sym_continue_statement] = STATE(1261), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1261), + [sym_nonlocal_statement] = STATE(1261), + [sym_exec_statement] = STATE(1261), + [sym_type_alias_statement] = STATE(1261), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(339), + [sym__indent] = ACTIONS(341), + [sym__string_start] = ACTIONS(81), + }, + [77] = { + [sym__simple_statements] = STATE(530), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(343), + [sym__indent] = ACTIONS(345), + [sym__string_start] = ACTIONS(81), + }, + [78] = { + [sym__simple_statements] = STATE(521), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(347), + [sym__indent] = ACTIONS(349), + [sym__string_start] = ACTIONS(81), + }, + [79] = { + [sym__simple_statements] = STATE(548), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(351), + [sym__indent] = ACTIONS(353), + [sym__string_start] = ACTIONS(81), + }, + [80] = { + [sym__simple_statements] = STATE(325), + [sym_import_statement] = STATE(1261), + [sym_future_import_statement] = STATE(1261), + [sym_import_from_statement] = STATE(1261), + [sym_print_statement] = STATE(1261), + [sym_assert_statement] = STATE(1261), + [sym_expression_statement] = STATE(1261), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1261), + [sym_delete_statement] = STATE(1261), + [sym_raise_statement] = STATE(1261), + [sym_pass_statement] = STATE(1261), + [sym_break_statement] = STATE(1261), + [sym_continue_statement] = STATE(1261), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1261), + [sym_nonlocal_statement] = STATE(1261), + [sym_exec_statement] = STATE(1261), + [sym_type_alias_statement] = STATE(1261), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(355), + [sym__indent] = ACTIONS(357), + [sym__string_start] = ACTIONS(81), + }, + [81] = { + [sym__simple_statements] = STATE(535), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(359), + [sym__indent] = ACTIONS(361), + [sym__string_start] = ACTIONS(81), + }, + [82] = { + [sym__simple_statements] = STATE(508), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(363), + [sym__indent] = ACTIONS(365), + [sym__string_start] = ACTIONS(81), + }, + [83] = { + [sym__simple_statements] = STATE(377), + [sym_import_statement] = STATE(1244), + [sym_future_import_statement] = STATE(1244), + [sym_import_from_statement] = STATE(1244), + [sym_print_statement] = STATE(1244), + [sym_assert_statement] = STATE(1244), + [sym_expression_statement] = STATE(1244), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1244), + [sym_delete_statement] = STATE(1244), + [sym_raise_statement] = STATE(1244), + [sym_pass_statement] = STATE(1244), + [sym_break_statement] = STATE(1244), + [sym_continue_statement] = STATE(1244), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1244), + [sym_nonlocal_statement] = STATE(1244), + [sym_exec_statement] = STATE(1244), + [sym_type_alias_statement] = STATE(1244), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(367), + [sym__indent] = ACTIONS(369), + [sym__string_start] = ACTIONS(81), + }, + [84] = { + [sym__simple_statements] = STATE(524), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(371), + [sym__indent] = ACTIONS(373), + [sym__string_start] = ACTIONS(81), + }, + [85] = { + [sym__simple_statements] = STATE(316), + [sym_import_statement] = STATE(1238), + [sym_future_import_statement] = STATE(1238), + [sym_import_from_statement] = STATE(1238), + [sym_print_statement] = STATE(1238), + [sym_assert_statement] = STATE(1238), + [sym_expression_statement] = STATE(1238), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1238), + [sym_delete_statement] = STATE(1238), + [sym_raise_statement] = STATE(1238), + [sym_pass_statement] = STATE(1238), + [sym_break_statement] = STATE(1238), + [sym_continue_statement] = STATE(1238), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1238), + [sym_nonlocal_statement] = STATE(1238), + [sym_exec_statement] = STATE(1238), + [sym_type_alias_statement] = STATE(1238), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(375), + [sym__indent] = ACTIONS(377), + [sym__string_start] = ACTIONS(81), + }, + [86] = { + [sym__simple_statements] = STATE(532), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(379), + [sym__indent] = ACTIONS(381), + [sym__string_start] = ACTIONS(81), + }, + [87] = { + [sym__simple_statements] = STATE(547), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(383), + [sym__indent] = ACTIONS(385), + [sym__string_start] = ACTIONS(81), + }, + [88] = { + [sym__simple_statements] = STATE(401), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(387), + [sym__indent] = ACTIONS(389), + [sym__string_start] = ACTIONS(81), + }, + [89] = { + [sym__simple_statements] = STATE(502), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(391), + [sym__indent] = ACTIONS(393), + [sym__string_start] = ACTIONS(81), + }, + [90] = { + [sym__simple_statements] = STATE(526), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(395), + [sym__indent] = ACTIONS(397), + [sym__string_start] = ACTIONS(81), + }, + [91] = { + [sym__simple_statements] = STATE(527), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(399), + [sym__indent] = ACTIONS(401), + [sym__string_start] = ACTIONS(81), + }, + [92] = { + [sym__simple_statements] = STATE(531), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(403), + [sym__indent] = ACTIONS(405), + [sym__string_start] = ACTIONS(81), + }, + [93] = { + [sym__simple_statements] = STATE(268), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(407), + [sym__indent] = ACTIONS(409), + [sym__string_start] = ACTIONS(81), + }, + [94] = { + [sym__simple_statements] = STATE(538), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(411), + [sym__indent] = ACTIONS(413), + [sym__string_start] = ACTIONS(81), + }, + [95] = { + [sym__simple_statements] = STATE(594), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(415), + [sym__indent] = ACTIONS(417), + [sym__string_start] = ACTIONS(81), + }, + [96] = { + [sym__simple_statements] = STATE(965), + [sym_import_statement] = STATE(1214), + [sym_future_import_statement] = STATE(1214), + [sym_import_from_statement] = STATE(1214), + [sym_print_statement] = STATE(1214), + [sym_assert_statement] = STATE(1214), + [sym_expression_statement] = STATE(1214), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1214), + [sym_delete_statement] = STATE(1214), + [sym_raise_statement] = STATE(1214), + [sym_pass_statement] = STATE(1214), + [sym_break_statement] = STATE(1214), + [sym_continue_statement] = STATE(1214), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1214), + [sym_nonlocal_statement] = STATE(1214), + [sym_exec_statement] = STATE(1214), + [sym_type_alias_statement] = STATE(1214), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(419), + [sym__indent] = ACTIONS(421), + [sym__string_start] = ACTIONS(81), + }, + [97] = { + [sym__simple_statements] = STATE(464), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(423), + [sym__indent] = ACTIONS(425), + [sym__string_start] = ACTIONS(81), + }, + [98] = { + [sym__simple_statements] = STATE(353), + [sym_import_statement] = STATE(1244), + [sym_future_import_statement] = STATE(1244), + [sym_import_from_statement] = STATE(1244), + [sym_print_statement] = STATE(1244), + [sym_assert_statement] = STATE(1244), + [sym_expression_statement] = STATE(1244), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1244), + [sym_delete_statement] = STATE(1244), + [sym_raise_statement] = STATE(1244), + [sym_pass_statement] = STATE(1244), + [sym_break_statement] = STATE(1244), + [sym_continue_statement] = STATE(1244), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1244), + [sym_nonlocal_statement] = STATE(1244), + [sym_exec_statement] = STATE(1244), + [sym_type_alias_statement] = STATE(1244), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(427), + [sym__indent] = ACTIONS(429), + [sym__string_start] = ACTIONS(81), + }, + [99] = { + [sym__simple_statements] = STATE(542), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(431), + [sym__indent] = ACTIONS(433), + [sym__string_start] = ACTIONS(81), + }, + [100] = { + [sym__simple_statements] = STATE(331), + [sym_import_statement] = STATE(1248), + [sym_future_import_statement] = STATE(1248), + [sym_import_from_statement] = STATE(1248), + [sym_print_statement] = STATE(1248), + [sym_assert_statement] = STATE(1248), + [sym_expression_statement] = STATE(1248), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1248), + [sym_delete_statement] = STATE(1248), + [sym_raise_statement] = STATE(1248), + [sym_pass_statement] = STATE(1248), + [sym_break_statement] = STATE(1248), + [sym_continue_statement] = STATE(1248), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1248), + [sym_nonlocal_statement] = STATE(1248), + [sym_exec_statement] = STATE(1248), + [sym_type_alias_statement] = STATE(1248), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(435), + [sym__indent] = ACTIONS(437), + [sym__string_start] = ACTIONS(81), + }, + [101] = { + [sym__simple_statements] = STATE(592), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(439), + [sym__indent] = ACTIONS(441), + [sym__string_start] = ACTIONS(81), + }, + [102] = { + [sym__simple_statements] = STATE(492), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(443), + [sym__indent] = ACTIONS(445), + [sym__string_start] = ACTIONS(81), + }, + [103] = { + [sym__simple_statements] = STATE(332), + [sym_import_statement] = STATE(1261), + [sym_future_import_statement] = STATE(1261), + [sym_import_from_statement] = STATE(1261), + [sym_print_statement] = STATE(1261), + [sym_assert_statement] = STATE(1261), + [sym_expression_statement] = STATE(1261), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1261), + [sym_delete_statement] = STATE(1261), + [sym_raise_statement] = STATE(1261), + [sym_pass_statement] = STATE(1261), + [sym_break_statement] = STATE(1261), + [sym_continue_statement] = STATE(1261), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1261), + [sym_nonlocal_statement] = STATE(1261), + [sym_exec_statement] = STATE(1261), + [sym_type_alias_statement] = STATE(1261), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(447), + [sym__indent] = ACTIONS(449), + [sym__string_start] = ACTIONS(81), + }, + [104] = { + [sym__simple_statements] = STATE(544), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(451), + [sym__indent] = ACTIONS(453), + [sym__string_start] = ACTIONS(81), + }, + [105] = { + [sym__simple_statements] = STATE(582), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(455), + [sym__indent] = ACTIONS(457), + [sym__string_start] = ACTIONS(81), + }, + [106] = { + [sym__simple_statements] = STATE(493), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(459), + [sym__indent] = ACTIONS(461), + [sym__string_start] = ACTIONS(81), + }, + [107] = { + [sym__simple_statements] = STATE(563), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(463), + [sym__indent] = ACTIONS(465), + [sym__string_start] = ACTIONS(81), + }, + [108] = { + [sym__simple_statements] = STATE(580), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(467), + [sym__indent] = ACTIONS(469), + [sym__string_start] = ACTIONS(81), + }, + [109] = { + [sym__simple_statements] = STATE(991), + [sym_import_statement] = STATE(1214), + [sym_future_import_statement] = STATE(1214), + [sym_import_from_statement] = STATE(1214), + [sym_print_statement] = STATE(1214), + [sym_assert_statement] = STATE(1214), + [sym_expression_statement] = STATE(1214), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1214), + [sym_delete_statement] = STATE(1214), + [sym_raise_statement] = STATE(1214), + [sym_pass_statement] = STATE(1214), + [sym_break_statement] = STATE(1214), + [sym_continue_statement] = STATE(1214), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1214), + [sym_nonlocal_statement] = STATE(1214), + [sym_exec_statement] = STATE(1214), + [sym_type_alias_statement] = STATE(1214), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(471), + [sym__indent] = ACTIONS(473), + [sym__string_start] = ACTIONS(81), + }, + [110] = { + [sym__simple_statements] = STATE(478), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(475), + [sym__indent] = ACTIONS(477), + [sym__string_start] = ACTIONS(81), + }, + [111] = { + [sym__simple_statements] = STATE(272), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(479), + [sym__indent] = ACTIONS(481), + [sym__string_start] = ACTIONS(81), + }, + [112] = { + [sym__simple_statements] = STATE(490), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(483), + [sym__indent] = ACTIONS(485), + [sym__string_start] = ACTIONS(81), + }, + [113] = { + [sym__simple_statements] = STATE(589), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(487), + [sym__indent] = ACTIONS(489), + [sym__string_start] = ACTIONS(81), + }, + [114] = { + [sym__simple_statements] = STATE(388), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(491), + [sym__indent] = ACTIONS(493), + [sym__string_start] = ACTIONS(81), + }, + [115] = { + [sym__simple_statements] = STATE(572), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(495), + [sym__indent] = ACTIONS(497), + [sym__string_start] = ACTIONS(81), + }, + [116] = { + [sym__simple_statements] = STATE(485), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(499), + [sym__indent] = ACTIONS(501), + [sym__string_start] = ACTIONS(81), + }, + [117] = { + [sym__simple_statements] = STATE(501), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(503), + [sym__indent] = ACTIONS(505), + [sym__string_start] = ACTIONS(81), + }, + [118] = { + [sym__simple_statements] = STATE(430), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(507), + [sym__indent] = ACTIONS(509), + [sym__string_start] = ACTIONS(81), + }, + [119] = { + [sym__simple_statements] = STATE(497), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(511), + [sym__indent] = ACTIONS(513), + [sym__string_start] = ACTIONS(81), + }, + [120] = { + [sym__simple_statements] = STATE(553), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(515), + [sym__indent] = ACTIONS(517), + [sym__string_start] = ACTIONS(81), + }, + [121] = { + [sym__simple_statements] = STATE(486), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(519), + [sym__indent] = ACTIONS(521), + [sym__string_start] = ACTIONS(81), + }, + [122] = { + [sym__simple_statements] = STATE(571), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(523), + [sym__indent] = ACTIONS(525), + [sym__string_start] = ACTIONS(81), + }, + [123] = { + [sym__simple_statements] = STATE(578), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(527), + [sym__indent] = ACTIONS(529), + [sym__string_start] = ACTIONS(81), + }, + [124] = { + [sym__simple_statements] = STATE(472), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(531), + [sym__indent] = ACTIONS(533), + [sym__string_start] = ACTIONS(81), + }, + [125] = { + [sym__simple_statements] = STATE(317), + [sym_import_statement] = STATE(1244), + [sym_future_import_statement] = STATE(1244), + [sym_import_from_statement] = STATE(1244), + [sym_print_statement] = STATE(1244), + [sym_assert_statement] = STATE(1244), + [sym_expression_statement] = STATE(1244), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1244), + [sym_delete_statement] = STATE(1244), + [sym_raise_statement] = STATE(1244), + [sym_pass_statement] = STATE(1244), + [sym_break_statement] = STATE(1244), + [sym_continue_statement] = STATE(1244), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1244), + [sym_nonlocal_statement] = STATE(1244), + [sym_exec_statement] = STATE(1244), + [sym_type_alias_statement] = STATE(1244), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(535), + [sym__indent] = ACTIONS(537), + [sym__string_start] = ACTIONS(81), + }, + [126] = { + [sym__simple_statements] = STATE(384), + [sym_import_statement] = STATE(1238), + [sym_future_import_statement] = STATE(1238), + [sym_import_from_statement] = STATE(1238), + [sym_print_statement] = STATE(1238), + [sym_assert_statement] = STATE(1238), + [sym_expression_statement] = STATE(1238), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1238), + [sym_delete_statement] = STATE(1238), + [sym_raise_statement] = STATE(1238), + [sym_pass_statement] = STATE(1238), + [sym_break_statement] = STATE(1238), + [sym_continue_statement] = STATE(1238), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1238), + [sym_nonlocal_statement] = STATE(1238), + [sym_exec_statement] = STATE(1238), + [sym_type_alias_statement] = STATE(1238), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(539), + [sym__indent] = ACTIONS(541), + [sym__string_start] = ACTIONS(81), + }, + [127] = { + [sym__simple_statements] = STATE(552), + [sym_import_statement] = STATE(1209), + [sym_future_import_statement] = STATE(1209), + [sym_import_from_statement] = STATE(1209), + [sym_print_statement] = STATE(1209), + [sym_assert_statement] = STATE(1209), + [sym_expression_statement] = STATE(1209), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1209), + [sym_delete_statement] = STATE(1209), + [sym_raise_statement] = STATE(1209), + [sym_pass_statement] = STATE(1209), + [sym_break_statement] = STATE(1209), + [sym_continue_statement] = STATE(1209), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1209), + [sym_nonlocal_statement] = STATE(1209), + [sym_exec_statement] = STATE(1209), + [sym_type_alias_statement] = STATE(1209), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(543), + [sym__indent] = ACTIONS(545), + [sym__string_start] = ACTIONS(81), + }, + [128] = { + [sym__simple_statements] = STATE(487), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(547), + [sym__indent] = ACTIONS(549), + [sym__string_start] = ACTIONS(81), + }, + [129] = { + [sym__simple_statements] = STATE(558), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(551), + [sym__indent] = ACTIONS(553), + [sym__string_start] = ACTIONS(81), + }, + [130] = { + [sym__simple_statements] = STATE(421), + [sym_import_statement] = STATE(1319), + [sym_future_import_statement] = STATE(1319), + [sym_import_from_statement] = STATE(1319), + [sym_print_statement] = STATE(1319), + [sym_assert_statement] = STATE(1319), + [sym_expression_statement] = STATE(1319), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1319), + [sym_delete_statement] = STATE(1319), + [sym_raise_statement] = STATE(1319), + [sym_pass_statement] = STATE(1319), + [sym_break_statement] = STATE(1319), + [sym_continue_statement] = STATE(1319), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1319), + [sym_nonlocal_statement] = STATE(1319), + [sym_exec_statement] = STATE(1319), + [sym_type_alias_statement] = STATE(1319), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(555), + [sym__indent] = ACTIONS(557), + [sym__string_start] = ACTIONS(81), + }, + [131] = { + [sym_named_expression] = STATE(1009), + [sym_expression] = STATE(976), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_attribute] = STATE(797), + [sym_subscript] = STATE(797), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(331), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(559), + [anon_sym_COMMA] = ACTIONS(280), + [anon_sym_STAR] = ACTIONS(276), + [anon_sym_print] = ACTIONS(333), + [anon_sym_GT_GT] = ACTIONS(276), + [anon_sym_COLON_EQ] = ACTIONS(287), + [anon_sym_if] = ACTIONS(276), + [anon_sym_COLON] = ACTIONS(289), + [anon_sym_async] = ACTIONS(333), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(333), + [anon_sym_PIPE] = ACTIONS(276), + [anon_sym_DASH] = ACTIONS(561), + [anon_sym_PLUS] = ACTIONS(561), + [anon_sym_LBRACK] = ACTIONS(563), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(276), + [anon_sym_EQ] = ACTIONS(289), + [anon_sym_exec] = ACTIONS(333), + [anon_sym_type] = ACTIONS(333), + [anon_sym_AT] = ACTIONS(276), + [anon_sym_not] = ACTIONS(69), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(276), + [anon_sym_SLASH_SLASH] = ACTIONS(276), + [anon_sym_AMP] = ACTIONS(276), + [anon_sym_CARET] = ACTIONS(276), + [anon_sym_LT_LT] = ACTIONS(276), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_PLUS_EQ] = ACTIONS(307), + [anon_sym_DASH_EQ] = ACTIONS(307), + [anon_sym_STAR_EQ] = ACTIONS(307), + [anon_sym_SLASH_EQ] = ACTIONS(307), + [anon_sym_AT_EQ] = ACTIONS(307), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(307), + [anon_sym_PERCENT_EQ] = ACTIONS(307), + [anon_sym_STAR_STAR_EQ] = ACTIONS(307), + [anon_sym_GT_GT_EQ] = ACTIONS(307), + [anon_sym_LT_LT_EQ] = ACTIONS(307), + [anon_sym_AMP_EQ] = ACTIONS(307), + [anon_sym_CARET_EQ] = ACTIONS(307), + [anon_sym_PIPE_EQ] = ACTIONS(307), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(337), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__semicolon] = ACTIONS(303), + [sym__newline] = ACTIONS(303), + [sym__string_start] = ACTIONS(81), + }, + [132] = { + [sym_named_expression] = STATE(900), + [sym_expression] = STATE(901), + [sym_primary_expression] = STATE(630), + [sym_not_operator] = STATE(900), + [sym_boolean_operator] = STATE(900), + [sym_binary_operator] = STATE(642), + [sym_unary_operator] = STATE(642), + [sym_comparison_operator] = STATE(900), + [sym_lambda] = STATE(900), + [sym_attribute] = STATE(642), + [sym_subscript] = STATE(642), + [sym_call] = STATE(642), + [sym_list] = STATE(642), + [sym_set] = STATE(642), + [sym_tuple] = STATE(642), + [sym_dictionary] = STATE(642), + [sym_list_comprehension] = STATE(642), + [sym_dictionary_comprehension] = STATE(642), + [sym_set_comprehension] = STATE(642), + [sym_generator_expression] = STATE(642), + [sym_parenthesized_expression] = STATE(642), + [sym_conditional_expression] = STATE(900), + [sym_concatenated_string] = STATE(642), + [sym_string] = STATE(600), + [sym_await] = STATE(900), + [sym_identifier] = ACTIONS(274), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(278), + [anon_sym_RPAREN] = ACTIONS(565), + [anon_sym_COMMA] = ACTIONS(565), + [anon_sym_STAR] = ACTIONS(276), + [anon_sym_print] = ACTIONS(285), + [anon_sym_GT_GT] = ACTIONS(276), + [anon_sym_COLON_EQ] = ACTIONS(568), + [anon_sym_if] = ACTIONS(276), + [anon_sym_COLON] = ACTIONS(570), + [anon_sym_async] = ACTIONS(285), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(285), + [anon_sym_PIPE] = ACTIONS(276), + [anon_sym_DASH] = ACTIONS(291), + [anon_sym_PLUS] = ACTIONS(291), + [anon_sym_LBRACK] = ACTIONS(293), + [anon_sym_RBRACK] = ACTIONS(565), + [anon_sym_LBRACE] = ACTIONS(295), + [anon_sym_STAR_STAR] = ACTIONS(276), + [anon_sym_EQ] = ACTIONS(570), + [anon_sym_exec] = ACTIONS(285), + [anon_sym_type] = ACTIONS(285), + [anon_sym_AT] = ACTIONS(276), + [anon_sym_not] = ACTIONS(299), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(276), + [anon_sym_SLASH_SLASH] = ACTIONS(276), + [anon_sym_AMP] = ACTIONS(276), + [anon_sym_CARET] = ACTIONS(276), + [anon_sym_LT_LT] = ACTIONS(276), + [anon_sym_TILDE] = ACTIONS(301), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(305), + [anon_sym_PLUS_EQ] = ACTIONS(572), + [anon_sym_DASH_EQ] = ACTIONS(572), + [anon_sym_STAR_EQ] = ACTIONS(572), + [anon_sym_SLASH_EQ] = ACTIONS(572), + [anon_sym_AT_EQ] = ACTIONS(572), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(572), + [anon_sym_PERCENT_EQ] = ACTIONS(572), + [anon_sym_STAR_STAR_EQ] = ACTIONS(572), + [anon_sym_GT_GT_EQ] = ACTIONS(572), + [anon_sym_LT_LT_EQ] = ACTIONS(572), + [anon_sym_AMP_EQ] = ACTIONS(572), + [anon_sym_CARET_EQ] = ACTIONS(572), + [anon_sym_PIPE_EQ] = ACTIONS(572), + [sym_ellipsis] = ACTIONS(309), + [sym_integer] = ACTIONS(311), + [sym_float] = ACTIONS(309), + [anon_sym_await] = ACTIONS(313), + [sym_true] = ACTIONS(311), + [sym_false] = ACTIONS(311), + [sym_none] = ACTIONS(311), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(315), + }, + [133] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(574), + [sym__string_start] = ACTIONS(81), + }, + [134] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(576), + [sym__string_start] = ACTIONS(81), + }, + [135] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(578), + [sym__string_start] = ACTIONS(81), + }, + [136] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(580), + [sym__string_start] = ACTIONS(81), + }, + [137] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(582), + [sym__string_start] = ACTIONS(81), + }, + [138] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(584), + [sym__string_start] = ACTIONS(81), + }, + [139] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(586), + [sym__string_start] = ACTIONS(81), + }, + [140] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(588), + [sym__string_start] = ACTIONS(81), + }, + [141] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(590), + [sym__string_start] = ACTIONS(81), + }, + [142] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(592), + [sym__string_start] = ACTIONS(81), + }, + [143] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(594), + [sym__string_start] = ACTIONS(81), + }, + [144] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(596), + [sym__string_start] = ACTIONS(81), + }, + [145] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(598), + [sym__string_start] = ACTIONS(81), + }, + [146] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__newline] = ACTIONS(600), + [sym__string_start] = ACTIONS(81), + }, + [147] = { + [sym_import_statement] = STATE(1351), + [sym_future_import_statement] = STATE(1351), + [sym_import_from_statement] = STATE(1351), + [sym_print_statement] = STATE(1351), + [sym_assert_statement] = STATE(1351), + [sym_expression_statement] = STATE(1351), + [sym_named_expression] = STATE(1009), + [sym_return_statement] = STATE(1351), + [sym_delete_statement] = STATE(1351), + [sym_raise_statement] = STATE(1351), + [sym_pass_statement] = STATE(1351), + [sym_break_statement] = STATE(1351), + [sym_continue_statement] = STATE(1351), + [sym_list_splat] = STATE(1360), + [sym_dictionary_splat] = STATE(1360), + [sym_global_statement] = STATE(1351), + [sym_nonlocal_statement] = STATE(1351), + [sym_exec_statement] = STATE(1351), + [sym_type_alias_statement] = STATE(1351), + [sym_expression_list] = STATE(1361), + [sym_pattern] = STATE(889), + [sym_tuple_pattern] = STATE(875), + [sym_list_pattern] = STATE(875), + [sym_list_splat_pattern] = STATE(875), + [sym_expression] = STATE(1019), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_assignment] = STATE(1361), + [sym_augmented_assignment] = STATE(1361), + [sym_pattern_list] = STATE(897), + [sym_yield] = STATE(1361), + [sym_attribute] = STATE(431), + [sym_subscript] = STATE(431), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(7), + [anon_sym_import] = ACTIONS(9), + [anon_sym_from] = ACTIONS(11), + [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_STAR] = ACTIONS(15), + [anon_sym_print] = ACTIONS(17), + [anon_sym_assert] = ACTIONS(19), + [anon_sym_return] = ACTIONS(21), + [anon_sym_del] = ACTIONS(23), + [anon_sym_raise] = ACTIONS(25), + [anon_sym_pass] = ACTIONS(27), + [anon_sym_break] = ACTIONS(29), + [anon_sym_continue] = ACTIONS(31), + [anon_sym_async] = ACTIONS(317), + [anon_sym_match] = ACTIONS(317), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_global] = ACTIONS(57), + [anon_sym_nonlocal] = ACTIONS(59), + [anon_sym_exec] = ACTIONS(61), + [anon_sym_type] = ACTIONS(63), + [anon_sym_not] = ACTIONS(69), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_lambda] = ACTIONS(71), + [anon_sym_yield] = ACTIONS(73), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(81), + }, + [148] = { + [sym_named_expression] = STATE(900), + [sym_expression] = STATE(901), + [sym_primary_expression] = STATE(630), + [sym_not_operator] = STATE(900), + [sym_boolean_operator] = STATE(900), + [sym_binary_operator] = STATE(642), + [sym_unary_operator] = STATE(642), + [sym_comparison_operator] = STATE(900), + [sym_lambda] = STATE(900), + [sym_attribute] = STATE(642), + [sym_subscript] = STATE(642), + [sym_call] = STATE(642), + [sym_list] = STATE(642), + [sym_set] = STATE(642), + [sym_tuple] = STATE(642), + [sym_dictionary] = STATE(642), + [sym_list_comprehension] = STATE(642), + [sym_dictionary_comprehension] = STATE(642), + [sym_set_comprehension] = STATE(642), + [sym_generator_expression] = STATE(642), + [sym_parenthesized_expression] = STATE(642), + [sym_conditional_expression] = STATE(900), + [sym_concatenated_string] = STATE(642), + [sym_string] = STATE(600), + [sym_await] = STATE(900), + [sym_identifier] = ACTIONS(274), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(278), + [anon_sym_RPAREN] = ACTIONS(303), + [anon_sym_COMMA] = ACTIONS(303), + [anon_sym_STAR] = ACTIONS(276), + [anon_sym_print] = ACTIONS(285), + [anon_sym_GT_GT] = ACTIONS(303), + [anon_sym_COLON_EQ] = ACTIONS(568), + [anon_sym_if] = ACTIONS(276), + [anon_sym_COLON] = ACTIONS(276), + [anon_sym_else] = ACTIONS(276), + [anon_sym_async] = ACTIONS(285), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(285), + [anon_sym_PIPE] = ACTIONS(303), + [anon_sym_DASH] = ACTIONS(301), + [anon_sym_PLUS] = ACTIONS(301), + [anon_sym_LBRACK] = ACTIONS(293), + [anon_sym_RBRACK] = ACTIONS(303), + [anon_sym_LBRACE] = ACTIONS(295), + [anon_sym_RBRACE] = ACTIONS(303), + [anon_sym_STAR_STAR] = ACTIONS(303), + [anon_sym_EQ] = ACTIONS(276), + [anon_sym_exec] = ACTIONS(285), + [anon_sym_type] = ACTIONS(285), + [anon_sym_AT] = ACTIONS(303), + [anon_sym_not] = ACTIONS(299), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(303), + [anon_sym_SLASH_SLASH] = ACTIONS(303), + [anon_sym_AMP] = ACTIONS(303), + [anon_sym_CARET] = ACTIONS(303), + [anon_sym_LT_LT] = ACTIONS(303), + [anon_sym_TILDE] = ACTIONS(301), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(305), + [sym_ellipsis] = ACTIONS(309), + [sym_type_conversion] = ACTIONS(303), + [sym_integer] = ACTIONS(311), + [sym_float] = ACTIONS(309), + [anon_sym_await] = ACTIONS(313), + [sym_true] = ACTIONS(311), + [sym_false] = ACTIONS(311), + [sym_none] = ACTIONS(311), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(315), + }, + [149] = { + [sym_named_expression] = STATE(900), + [sym_expression] = STATE(901), + [sym_primary_expression] = STATE(643), + [sym_not_operator] = STATE(900), + [sym_boolean_operator] = STATE(900), + [sym_binary_operator] = STATE(642), + [sym_unary_operator] = STATE(642), + [sym_comparison_operator] = STATE(900), + [sym_lambda] = STATE(900), + [sym_attribute] = STATE(642), + [sym_subscript] = STATE(642), + [sym_call] = STATE(642), + [sym_list] = STATE(642), + [sym_set] = STATE(642), + [sym_tuple] = STATE(642), + [sym_dictionary] = STATE(642), + [sym_list_comprehension] = STATE(642), + [sym_dictionary_comprehension] = STATE(642), + [sym_set_comprehension] = STATE(642), + [sym_generator_expression] = STATE(642), + [sym_parenthesized_expression] = STATE(642), + [sym_conditional_expression] = STATE(900), + [sym_concatenated_string] = STATE(642), + [sym_string] = STATE(600), + [sym_await] = STATE(900), + [sym_identifier] = ACTIONS(602), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(604), + [anon_sym_RPAREN] = ACTIONS(303), + [anon_sym_COMMA] = ACTIONS(303), + [anon_sym_as] = ACTIONS(276), + [anon_sym_STAR] = ACTIONS(276), + [anon_sym_print] = ACTIONS(606), + [anon_sym_GT_GT] = ACTIONS(303), + [anon_sym_COLON_EQ] = ACTIONS(608), + [anon_sym_if] = ACTIONS(276), + [anon_sym_COLON] = ACTIONS(276), + [anon_sym_async] = ACTIONS(606), + [anon_sym_for] = ACTIONS(276), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(606), + [anon_sym_PIPE] = ACTIONS(303), + [anon_sym_DASH] = ACTIONS(610), + [anon_sym_PLUS] = ACTIONS(610), + [anon_sym_LBRACK] = ACTIONS(612), + [anon_sym_RBRACK] = ACTIONS(303), + [anon_sym_LBRACE] = ACTIONS(295), + [anon_sym_RBRACE] = ACTIONS(303), + [anon_sym_STAR_STAR] = ACTIONS(303), + [anon_sym_exec] = ACTIONS(606), + [anon_sym_type] = ACTIONS(606), + [anon_sym_AT] = ACTIONS(303), + [anon_sym_not] = ACTIONS(614), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(303), + [anon_sym_SLASH_SLASH] = ACTIONS(303), + [anon_sym_AMP] = ACTIONS(303), + [anon_sym_CARET] = ACTIONS(303), + [anon_sym_LT_LT] = ACTIONS(303), + [anon_sym_TILDE] = ACTIONS(610), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(616), + [sym_ellipsis] = ACTIONS(309), + [sym_integer] = ACTIONS(311), + [sym_float] = ACTIONS(309), + [anon_sym_await] = ACTIONS(618), + [sym_true] = ACTIONS(311), + [sym_false] = ACTIONS(311), + [sym_none] = ACTIONS(311), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(315), + }, + [150] = { + [sym_named_expression] = STATE(1009), + [sym_expression] = STATE(976), + [sym_primary_expression] = STATE(684), + [sym_not_operator] = STATE(1009), + [sym_boolean_operator] = STATE(1009), + [sym_binary_operator] = STATE(797), + [sym_unary_operator] = STATE(797), + [sym_comparison_operator] = STATE(1009), + [sym_lambda] = STATE(1009), + [sym_attribute] = STATE(797), + [sym_subscript] = STATE(797), + [sym_call] = STATE(797), + [sym_list] = STATE(797), + [sym_set] = STATE(797), + [sym_tuple] = STATE(797), + [sym_dictionary] = STATE(797), + [sym_list_comprehension] = STATE(797), + [sym_dictionary_comprehension] = STATE(797), + [sym_set_comprehension] = STATE(797), + [sym_generator_expression] = STATE(797), + [sym_parenthesized_expression] = STATE(797), + [sym_conditional_expression] = STATE(1009), + [sym_concatenated_string] = STATE(797), + [sym_string] = STATE(713), + [sym_await] = STATE(1009), + [sym_identifier] = ACTIONS(331), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_from] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(559), + [anon_sym_COMMA] = ACTIONS(303), + [anon_sym_STAR] = ACTIONS(276), + [anon_sym_print] = ACTIONS(333), + [anon_sym_GT_GT] = ACTIONS(303), + [anon_sym_COLON_EQ] = ACTIONS(287), + [anon_sym_if] = ACTIONS(276), + [anon_sym_async] = ACTIONS(333), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(333), + [anon_sym_PIPE] = ACTIONS(303), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(563), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(303), + [anon_sym_EQ] = ACTIONS(276), + [anon_sym_exec] = ACTIONS(333), + [anon_sym_type] = ACTIONS(333), + [anon_sym_AT] = ACTIONS(303), + [anon_sym_not] = ACTIONS(69), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(303), + [anon_sym_SLASH_SLASH] = ACTIONS(303), + [anon_sym_AMP] = ACTIONS(303), + [anon_sym_CARET] = ACTIONS(303), + [anon_sym_LT_LT] = ACTIONS(303), + [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(71), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(337), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__semicolon] = ACTIONS(303), + [sym__newline] = ACTIONS(303), + [sym__string_start] = ACTIONS(81), + }, + [151] = { + [sym_named_expression] = STATE(900), + [sym_expression] = STATE(901), + [sym_primary_expression] = STATE(643), + [sym_not_operator] = STATE(900), + [sym_boolean_operator] = STATE(900), + [sym_binary_operator] = STATE(642), + [sym_unary_operator] = STATE(642), + [sym_comparison_operator] = STATE(900), + [sym_lambda] = STATE(900), + [sym_attribute] = STATE(642), + [sym_subscript] = STATE(642), + [sym_call] = STATE(642), + [sym_list] = STATE(642), + [sym_set] = STATE(642), + [sym_tuple] = STATE(642), + [sym_dictionary] = STATE(642), + [sym_list_comprehension] = STATE(642), + [sym_dictionary_comprehension] = STATE(642), + [sym_set_comprehension] = STATE(642), + [sym_generator_expression] = STATE(642), + [sym_parenthesized_expression] = STATE(642), + [sym_conditional_expression] = STATE(900), + [sym_concatenated_string] = STATE(642), + [sym_string] = STATE(600), + [sym_await] = STATE(900), + [sym_identifier] = ACTIONS(602), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(604), + [anon_sym_RPAREN] = ACTIONS(303), + [anon_sym_COMMA] = ACTIONS(303), + [anon_sym_STAR] = ACTIONS(276), + [anon_sym_print] = ACTIONS(606), + [anon_sym_GT_GT] = ACTIONS(303), + [anon_sym_COLON_EQ] = ACTIONS(608), + [anon_sym_if] = ACTIONS(276), + [anon_sym_async] = ACTIONS(606), + [anon_sym_for] = ACTIONS(276), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(606), + [anon_sym_PIPE] = ACTIONS(303), + [anon_sym_DASH] = ACTIONS(610), + [anon_sym_PLUS] = ACTIONS(610), + [anon_sym_LBRACK] = ACTIONS(612), + [anon_sym_LBRACE] = ACTIONS(295), + [anon_sym_STAR_STAR] = ACTIONS(303), + [anon_sym_EQ] = ACTIONS(620), + [anon_sym_exec] = ACTIONS(606), + [anon_sym_type] = ACTIONS(606), + [anon_sym_AT] = ACTIONS(303), + [anon_sym_not] = ACTIONS(614), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(303), + [anon_sym_SLASH_SLASH] = ACTIONS(303), + [anon_sym_AMP] = ACTIONS(303), + [anon_sym_CARET] = ACTIONS(303), + [anon_sym_LT_LT] = ACTIONS(303), + [anon_sym_TILDE] = ACTIONS(610), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(616), + [sym_ellipsis] = ACTIONS(309), + [sym_integer] = ACTIONS(311), + [sym_float] = ACTIONS(309), + [anon_sym_await] = ACTIONS(618), + [sym_true] = ACTIONS(311), + [sym_false] = ACTIONS(311), + [sym_none] = ACTIONS(311), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(315), + }, + [152] = { + [sym_named_expression] = STATE(900), + [sym_expression] = STATE(901), + [sym_primary_expression] = STATE(643), + [sym_not_operator] = STATE(900), + [sym_boolean_operator] = STATE(900), + [sym_binary_operator] = STATE(642), + [sym_unary_operator] = STATE(642), + [sym_comparison_operator] = STATE(900), + [sym_lambda] = STATE(900), + [sym_attribute] = STATE(642), + [sym_subscript] = STATE(642), + [sym_call] = STATE(642), + [sym_list] = STATE(642), + [sym_set] = STATE(642), + [sym_tuple] = STATE(642), + [sym_dictionary] = STATE(642), + [sym_list_comprehension] = STATE(642), + [sym_dictionary_comprehension] = STATE(642), + [sym_set_comprehension] = STATE(642), + [sym_generator_expression] = STATE(642), + [sym_parenthesized_expression] = STATE(642), + [sym_conditional_expression] = STATE(900), + [sym_concatenated_string] = STATE(642), + [sym_string] = STATE(600), + [sym_await] = STATE(900), + [sym_identifier] = ACTIONS(602), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(604), + [anon_sym_RPAREN] = ACTIONS(280), + [anon_sym_COMMA] = ACTIONS(280), + [anon_sym_STAR] = ACTIONS(276), + [anon_sym_print] = ACTIONS(606), + [anon_sym_GT_GT] = ACTIONS(303), + [anon_sym_COLON_EQ] = ACTIONS(608), + [anon_sym_if] = ACTIONS(276), + [anon_sym_async] = ACTIONS(606), + [anon_sym_for] = ACTIONS(276), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(606), + [anon_sym_PIPE] = ACTIONS(303), + [anon_sym_DASH] = ACTIONS(610), + [anon_sym_PLUS] = ACTIONS(610), + [anon_sym_LBRACK] = ACTIONS(612), + [anon_sym_RBRACK] = ACTIONS(280), + [anon_sym_LBRACE] = ACTIONS(295), + [anon_sym_STAR_STAR] = ACTIONS(303), + [anon_sym_exec] = ACTIONS(606), + [anon_sym_type] = ACTIONS(606), + [anon_sym_AT] = ACTIONS(303), + [anon_sym_not] = ACTIONS(614), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(303), + [anon_sym_SLASH_SLASH] = ACTIONS(303), + [anon_sym_AMP] = ACTIONS(303), + [anon_sym_CARET] = ACTIONS(303), + [anon_sym_LT_LT] = ACTIONS(303), + [anon_sym_TILDE] = ACTIONS(610), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(616), + [sym_ellipsis] = ACTIONS(309), + [sym_integer] = ACTIONS(311), + [sym_float] = ACTIONS(309), + [anon_sym_await] = ACTIONS(618), + [sym_true] = ACTIONS(311), + [sym_false] = ACTIONS(311), + [sym_none] = ACTIONS(311), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(315), + }, + [153] = { + [sym_named_expression] = STATE(1015), + [sym_expression] = STATE(1042), + [sym_primary_expression] = STATE(740), + [sym_not_operator] = STATE(1015), + [sym_boolean_operator] = STATE(1015), + [sym_binary_operator] = STATE(811), + [sym_unary_operator] = STATE(811), + [sym_comparison_operator] = STATE(1015), + [sym_lambda] = STATE(1015), + [sym_attribute] = STATE(811), + [sym_subscript] = STATE(811), + [sym_call] = STATE(811), + [sym_list] = STATE(811), + [sym_set] = STATE(811), + [sym_tuple] = STATE(811), + [sym_dictionary] = STATE(811), + [sym_list_comprehension] = STATE(811), + [sym_dictionary_comprehension] = STATE(811), + [sym_set_comprehension] = STATE(811), + [sym_generator_expression] = STATE(811), + [sym_parenthesized_expression] = STATE(811), + [sym_conditional_expression] = STATE(1015), + [sym_concatenated_string] = STATE(811), + [sym_string] = STATE(742), + [sym_await] = STATE(1015), + [sym_identifier] = ACTIONS(622), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(624), + [anon_sym_RPAREN] = ACTIONS(303), + [anon_sym_COMMA] = ACTIONS(303), + [anon_sym_as] = ACTIONS(276), + [anon_sym_STAR] = ACTIONS(276), + [anon_sym_print] = ACTIONS(626), + [anon_sym_GT_GT] = ACTIONS(303), + [anon_sym_COLON_EQ] = ACTIONS(628), + [anon_sym_if] = ACTIONS(276), + [anon_sym_COLON] = ACTIONS(276), + [anon_sym_async] = ACTIONS(626), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(626), + [anon_sym_PIPE] = ACTIONS(303), + [anon_sym_DASH] = ACTIONS(630), + [anon_sym_PLUS] = ACTIONS(630), + [anon_sym_LBRACK] = ACTIONS(632), + [anon_sym_LBRACE] = ACTIONS(634), + [anon_sym_STAR_STAR] = ACTIONS(303), + [anon_sym_exec] = ACTIONS(626), + [anon_sym_type] = ACTIONS(626), + [anon_sym_AT] = ACTIONS(303), + [anon_sym_not] = ACTIONS(636), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(303), + [anon_sym_SLASH_SLASH] = ACTIONS(303), + [anon_sym_AMP] = ACTIONS(303), + [anon_sym_CARET] = ACTIONS(303), + [anon_sym_LT_LT] = ACTIONS(303), + [anon_sym_TILDE] = ACTIONS(630), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(638), + [sym_ellipsis] = ACTIONS(640), + [sym_integer] = ACTIONS(642), + [sym_float] = ACTIONS(640), + [anon_sym_await] = ACTIONS(644), + [sym_true] = ACTIONS(642), + [sym_false] = ACTIONS(642), + [sym_none] = ACTIONS(642), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(646), + }, + [154] = { + [sym_named_expression] = STATE(900), + [sym_expression] = STATE(901), + [sym_primary_expression] = STATE(630), + [sym_not_operator] = STATE(900), + [sym_boolean_operator] = STATE(900), + [sym_binary_operator] = STATE(642), + [sym_unary_operator] = STATE(642), + [sym_comparison_operator] = STATE(900), + [sym_lambda] = STATE(900), + [sym_attribute] = STATE(642), + [sym_subscript] = STATE(642), + [sym_call] = STATE(642), + [sym_list] = STATE(642), + [sym_set] = STATE(642), + [sym_tuple] = STATE(642), + [sym_dictionary] = STATE(642), + [sym_list_comprehension] = STATE(642), + [sym_dictionary_comprehension] = STATE(642), + [sym_set_comprehension] = STATE(642), + [sym_generator_expression] = STATE(642), + [sym_parenthesized_expression] = STATE(642), + [sym_conditional_expression] = STATE(900), + [sym_concatenated_string] = STATE(642), + [sym_string] = STATE(600), + [sym_await] = STATE(900), + [sym_identifier] = ACTIONS(274), + [anon_sym_DOT] = ACTIONS(276), + [anon_sym_LPAREN] = ACTIONS(278), + [anon_sym_RPAREN] = ACTIONS(303), + [anon_sym_COMMA] = ACTIONS(303), + [anon_sym_STAR] = ACTIONS(276), + [anon_sym_print] = ACTIONS(285), + [anon_sym_GT_GT] = ACTIONS(303), + [anon_sym_COLON_EQ] = ACTIONS(568), + [anon_sym_if] = ACTIONS(276), + [anon_sym_async] = ACTIONS(285), + [anon_sym_in] = ACTIONS(276), + [anon_sym_match] = ACTIONS(285), + [anon_sym_PIPE] = ACTIONS(303), + [anon_sym_DASH] = ACTIONS(301), + [anon_sym_PLUS] = ACTIONS(301), + [anon_sym_LBRACK] = ACTIONS(293), + [anon_sym_LBRACE] = ACTIONS(295), + [anon_sym_STAR_STAR] = ACTIONS(303), + [anon_sym_EQ] = ACTIONS(620), + [anon_sym_exec] = ACTIONS(285), + [anon_sym_type] = ACTIONS(285), + [anon_sym_AT] = ACTIONS(303), + [anon_sym_not] = ACTIONS(299), + [anon_sym_and] = ACTIONS(276), + [anon_sym_or] = ACTIONS(276), + [anon_sym_SLASH] = ACTIONS(276), + [anon_sym_PERCENT] = ACTIONS(303), + [anon_sym_SLASH_SLASH] = ACTIONS(303), + [anon_sym_AMP] = ACTIONS(303), + [anon_sym_CARET] = ACTIONS(303), + [anon_sym_LT_LT] = ACTIONS(303), + [anon_sym_TILDE] = ACTIONS(301), + [anon_sym_LT] = ACTIONS(276), + [anon_sym_LT_EQ] = ACTIONS(303), + [anon_sym_EQ_EQ] = ACTIONS(303), + [anon_sym_BANG_EQ] = ACTIONS(303), + [anon_sym_GT_EQ] = ACTIONS(303), + [anon_sym_GT] = ACTIONS(276), + [anon_sym_LT_GT] = ACTIONS(303), + [anon_sym_is] = ACTIONS(276), + [anon_sym_lambda] = ACTIONS(305), + [sym_ellipsis] = ACTIONS(309), + [sym_integer] = ACTIONS(311), + [sym_float] = ACTIONS(309), + [anon_sym_await] = ACTIONS(313), + [sym_true] = ACTIONS(311), + [sym_false] = ACTIONS(311), + [sym_none] = ACTIONS(311), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(315), + }, +}; + +static const uint16_t ts_small_parse_table[] = { + [0] = 27, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + sym_identifier, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + anon_sym_STAR, + ACTIONS(49), 1, + anon_sym_LBRACK, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(73), 1, + anon_sym_yield, + ACTIONS(79), 1, + anon_sym_await, + ACTIONS(81), 1, + sym__string_start, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(889), 1, + sym_pattern, + STATE(897), 1, + sym_pattern_list, + STATE(1034), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + STATE(431), 2, + sym_attribute, + sym_subscript, + STATE(1360), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(317), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1369), 5, + sym_expression_list, + sym_assignment, + sym_augmented_assignment, + sym__right_hand_side, + sym_yield, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [118] = 27, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + sym_identifier, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + anon_sym_STAR, + ACTIONS(49), 1, + anon_sym_LBRACK, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(73), 1, + anon_sym_yield, + ACTIONS(79), 1, + anon_sym_await, + ACTIONS(81), 1, + sym__string_start, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(889), 1, + sym_pattern, + STATE(897), 1, + sym_pattern_list, + STATE(1034), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + STATE(431), 2, + sym_attribute, + sym_subscript, + STATE(1360), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(317), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1391), 5, + sym_expression_list, + sym_assignment, + sym_augmented_assignment, + sym__right_hand_side, + sym_yield, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [236] = 27, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + sym_identifier, + ACTIONS(13), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + anon_sym_STAR, + ACTIONS(49), 1, + anon_sym_LBRACK, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(73), 1, + anon_sym_yield, + ACTIONS(79), 1, + anon_sym_await, + ACTIONS(81), 1, + sym__string_start, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(889), 1, + sym_pattern, + STATE(897), 1, + sym_pattern_list, + STATE(1034), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + STATE(431), 2, + sym_attribute, + sym_subscript, + STATE(1360), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(317), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1386), 5, + sym_expression_list, + sym_assignment, + sym_augmented_assignment, + sym__right_hand_side, + sym_yield, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [354] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(648), 1, + anon_sym_from, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(929), 1, + sym_expression, + STATE(1041), 1, + sym_expression_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1366), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + ACTIONS(650), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [464] = 27, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(652), 1, + sym_identifier, + ACTIONS(654), 1, + anon_sym_LPAREN, + ACTIONS(656), 1, + anon_sym_STAR, + ACTIONS(660), 1, + anon_sym_LBRACK, + ACTIONS(662), 1, + anon_sym_RBRACK, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(666), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(932), 1, + sym_expression, + STATE(1146), 1, + sym_pattern, + STATE(1497), 1, + sym__patterns, + STATE(1503), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(806), 2, + sym_attribute, + sym_subscript, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + STATE(1100), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(658), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [579] = 27, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(652), 1, + sym_identifier, + ACTIONS(654), 1, + anon_sym_LPAREN, + ACTIONS(656), 1, + anon_sym_STAR, + ACTIONS(660), 1, + anon_sym_LBRACK, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(666), 1, + anon_sym_await, + ACTIONS(668), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(941), 1, + sym_expression, + STATE(1146), 1, + sym_pattern, + STATE(1467), 1, + sym__collection_elements, + STATE(1497), 1, + sym__patterns, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(806), 2, + sym_attribute, + sym_subscript, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + STATE(1100), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(658), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [694] = 27, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(652), 1, + sym_identifier, + ACTIONS(654), 1, + anon_sym_LPAREN, + ACTIONS(656), 1, + anon_sym_STAR, + ACTIONS(660), 1, + anon_sym_LBRACK, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(666), 1, + anon_sym_await, + ACTIONS(670), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(941), 1, + sym_expression, + STATE(1146), 1, + sym_pattern, + STATE(1467), 1, + sym__collection_elements, + STATE(1497), 1, + sym__patterns, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(806), 2, + sym_attribute, + sym_subscript, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + STATE(1100), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(658), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [809] = 28, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(652), 1, + sym_identifier, + ACTIONS(654), 1, + anon_sym_LPAREN, + ACTIONS(656), 1, + anon_sym_STAR, + ACTIONS(660), 1, + anon_sym_LBRACK, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(666), 1, + anon_sym_await, + ACTIONS(672), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(930), 1, + sym_expression, + STATE(1146), 1, + sym_pattern, + STATE(1219), 1, + sym_yield, + STATE(1434), 1, + sym__patterns, + STATE(1484), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(806), 2, + sym_attribute, + sym_subscript, + STATE(1100), 2, + sym_list_splat, + sym_parenthesized_list_splat, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(658), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [926] = 29, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(652), 1, + sym_identifier, + ACTIONS(654), 1, + anon_sym_LPAREN, + ACTIONS(656), 1, + anon_sym_STAR, + ACTIONS(660), 1, + anon_sym_LBRACK, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(666), 1, + anon_sym_await, + ACTIONS(674), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(930), 1, + sym_expression, + STATE(1146), 1, + sym_pattern, + STATE(1219), 1, + sym_yield, + STATE(1301), 1, + sym_parenthesized_list_splat, + STATE(1303), 1, + sym_list_splat, + STATE(1434), 1, + sym__patterns, + STATE(1484), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(806), 2, + sym_attribute, + sym_subscript, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(658), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [1045] = 28, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(652), 1, + sym_identifier, + ACTIONS(654), 1, + anon_sym_LPAREN, + ACTIONS(656), 1, + anon_sym_STAR, + ACTIONS(660), 1, + anon_sym_LBRACK, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(666), 1, + anon_sym_await, + ACTIONS(676), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(931), 1, + sym_expression, + STATE(1146), 1, + sym_pattern, + STATE(1251), 1, + sym_yield, + STATE(1431), 1, + sym__collection_elements, + STATE(1434), 1, + sym__patterns, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(806), 2, + sym_attribute, + sym_subscript, + STATE(1100), 2, + sym_list_splat, + sym_parenthesized_list_splat, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(658), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [1162] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(301), 1, + anon_sym_TILDE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(682), 1, + anon_sym_STAR, + ACTIONS(688), 1, + anon_sym_in, + ACTIONS(690), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(876), 1, + sym_pattern, + STATE(882), 1, + sym_primary_expression, + ACTIONS(291), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + ACTIONS(686), 15, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [1262] = 27, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(694), 1, + anon_sym_COMMA, + ACTIONS(696), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(907), 1, + sym_expression, + STATE(1052), 1, + sym_pair, + STATE(1327), 1, + sym_dictionary_splat, + STATE(1513), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1100), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [1376] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(933), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1023), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + ACTIONS(698), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [1480] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(933), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1023), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + ACTIONS(700), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [1584] = 27, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(702), 1, + anon_sym_COMMA, + ACTIONS(704), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(911), 1, + sym_expression, + STATE(1038), 1, + sym_pair, + STATE(1225), 1, + sym_dictionary_splat, + STATE(1460), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1100), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [1698] = 27, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(706), 1, + anon_sym_COMMA, + ACTIONS(708), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(918), 1, + sym_expression, + STATE(1049), 1, + sym_pair, + STATE(1311), 1, + sym_dictionary_splat, + STATE(1461), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1100), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [1812] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(933), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1023), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + ACTIONS(700), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [1916] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(301), 1, + anon_sym_TILDE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(682), 1, + anon_sym_STAR, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(712), 1, + anon_sym_in, + STATE(600), 1, + sym_string, + STATE(876), 1, + sym_pattern, + STATE(882), 1, + sym_primary_expression, + ACTIONS(291), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + ACTIONS(710), 15, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [2016] = 25, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(714), 1, + anon_sym_RPAREN, + ACTIONS(716), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(915), 1, + sym_expression, + STATE(1268), 1, + sym_with_item, + STATE(1313), 1, + sym_yield, + STATE(1475), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1100), 2, + sym_list_splat, + sym_parenthesized_list_splat, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [2123] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(718), 1, + anon_sym_LPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1053), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(720), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + STATE(1166), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [2224] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(718), 1, + anon_sym_LPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1053), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(720), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + STATE(1166), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [2325] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(724), 1, + anon_sym_RPAREN, + ACTIONS(726), 1, + anon_sym_COMMA, + ACTIONS(730), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1071), 1, + sym_expression, + STATE(1256), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1255), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [2430] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(724), 1, + anon_sym_RPAREN, + ACTIONS(726), 1, + anon_sym_COMMA, + ACTIONS(732), 1, + sym_identifier, + ACTIONS(736), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(953), 1, + sym_expression, + STATE(1256), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1255), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(734), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [2535] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(664), 1, + anon_sym_yield, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(960), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1366), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1120), 3, + sym_expression_list, + sym_yield, + sym__f_expression, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [2638] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(732), 1, + sym_identifier, + ACTIONS(736), 1, + anon_sym_await, + ACTIONS(738), 1, + anon_sym_RPAREN, + ACTIONS(740), 1, + anon_sym_COMMA, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(940), 1, + sym_expression, + STATE(1328), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1239), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(734), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [2743] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + ACTIONS(742), 1, + anon_sym_from, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1014), 1, + sym_expression, + STATE(1348), 1, + sym_expression_list, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(650), 2, + sym__newline, + sym__semicolon, + STATE(1360), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [2848] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + ACTIONS(744), 1, + anon_sym_from, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(982), 1, + sym_expression, + STATE(1288), 1, + sym_expression_list, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(746), 2, + sym__newline, + sym__semicolon, + STATE(1360), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [2953] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(718), 1, + anon_sym_LPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1053), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(748), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + STATE(1166), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [3054] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(664), 1, + anon_sym_yield, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(960), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1366), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1097), 3, + sym_expression_list, + sym_yield, + sym__f_expression, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [3157] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(732), 1, + sym_identifier, + ACTIONS(736), 1, + anon_sym_await, + ACTIONS(750), 1, + anon_sym_RPAREN, + ACTIONS(752), 1, + anon_sym_COMMA, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(946), 1, + sym_expression, + STATE(1297), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1298), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(734), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [3262] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(962), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1018), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(754), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + ACTIONS(756), 3, + anon_sym_if, + anon_sym_async, + anon_sym_for, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 4, + anon_sym_print, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [3360] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(760), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [3462] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(762), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(941), 1, + sym_expression, + STATE(1467), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1100), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [3564] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(714), 1, + anon_sym_RPAREN, + ACTIONS(716), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(930), 1, + sym_expression, + STATE(1219), 1, + sym_yield, + STATE(1484), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1100), 2, + sym_list_splat, + sym_parenthesized_list_splat, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [3668] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(764), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [3770] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(766), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(941), 1, + sym_expression, + STATE(1467), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1100), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [3872] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(768), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(932), 1, + sym_expression, + STATE(1503), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1100), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [3974] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(962), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1018), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(770), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + ACTIONS(772), 3, + anon_sym_if, + anon_sym_async, + anon_sym_for, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 4, + anon_sym_print, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [4072] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(774), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(931), 1, + sym_expression, + STATE(1251), 1, + sym_yield, + STATE(1431), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1100), 2, + sym_list_splat, + sym_parenthesized_list_splat, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [4176] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(776), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [4278] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + ACTIONS(778), 1, + anon_sym_from, + ACTIONS(780), 1, + anon_sym_STAR, + ACTIONS(782), 1, + anon_sym_STAR_STAR, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1036), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(700), 2, + sym__newline, + sym__semicolon, + STATE(1187), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [4380] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(784), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [4482] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(786), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [4584] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(788), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [4686] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(790), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [4788] = 25, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(792), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(930), 1, + sym_expression, + STATE(1219), 1, + sym_yield, + STATE(1301), 1, + sym_parenthesized_list_splat, + STATE(1303), 1, + sym_list_splat, + STATE(1484), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [4894] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1045), 1, + sym_expression, + STATE(1394), 1, + sym_expression_list, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(794), 2, + sym__newline, + sym__semicolon, + STATE(1360), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [4996] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(962), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1018), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(796), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + ACTIONS(798), 3, + anon_sym_if, + anon_sym_async, + anon_sym_for, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 4, + anon_sym_print, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [5094] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(800), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [5196] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(792), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(930), 1, + sym_expression, + STATE(1219), 1, + sym_yield, + STATE(1484), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1100), 2, + sym_list_splat, + sym_parenthesized_list_splat, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [5300] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + ACTIONS(778), 1, + anon_sym_from, + ACTIONS(780), 1, + anon_sym_STAR, + ACTIONS(782), 1, + anon_sym_STAR_STAR, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1036), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(700), 2, + sym__newline, + sym__semicolon, + STATE(1187), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [5402] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(802), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [5504] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(804), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [5606] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(806), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [5708] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(808), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [5810] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + ACTIONS(780), 1, + anon_sym_STAR, + ACTIONS(782), 1, + anon_sym_STAR_STAR, + ACTIONS(810), 1, + anon_sym_from, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1036), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(698), 2, + sym__newline, + sym__semicolon, + STATE(1187), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [5912] = 25, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(714), 1, + anon_sym_RPAREN, + ACTIONS(716), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(930), 1, + sym_expression, + STATE(1219), 1, + sym_yield, + STATE(1301), 1, + sym_parenthesized_list_splat, + STATE(1303), 1, + sym_list_splat, + STATE(1484), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [6018] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(714), 1, + anon_sym_RPAREN, + ACTIONS(716), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(945), 1, + sym_expression, + STATE(1313), 1, + sym_yield, + STATE(1475), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1100), 2, + sym_list_splat, + sym_parenthesized_list_splat, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [6122] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(962), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1018), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(812), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + ACTIONS(814), 3, + anon_sym_if, + anon_sym_async, + anon_sym_for, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 4, + anon_sym_print, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [6220] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(816), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [6322] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(818), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [6424] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + ACTIONS(820), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [6526] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(692), 1, + anon_sym_LPAREN, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(766), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(935), 1, + sym_expression, + STATE(1473), 1, + sym__collection_elements, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1100), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [6628] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(824), 17, + anon_sym_as, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(822), 36, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym_type_conversion, + [6689] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(828), 17, + anon_sym_as, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(826), 36, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym_type_conversion, + [6750] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(832), 17, + anon_sym_as, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(830), 36, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym_type_conversion, + [6811] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(832), 17, + anon_sym_as, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(830), 36, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym_type_conversion, + [6872] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(722), 1, + sym_identifier, + ACTIONS(730), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1124), 1, + sym_expression, + STATE(1379), 1, + sym_parenthesized_list_splat, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1373), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(728), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [6971] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(836), 17, + anon_sym_as, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(834), 36, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym_type_conversion, + [7032] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(720), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1053), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1166), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [7131] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(718), 1, + anon_sym_LPAREN, + ACTIONS(720), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1053), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1166), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [7230] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(824), 17, + anon_sym_as, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(822), 36, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym_type_conversion, + [7291] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(840), 17, + anon_sym_as, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(838), 36, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym_type_conversion, + [7352] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + ACTIONS(848), 1, + anon_sym_except, + ACTIONS(850), 1, + anon_sym_finally, + STATE(440), 1, + sym_else_clause, + STATE(504), 1, + sym_finally_clause, + STATE(271), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + ACTIONS(842), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(844), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [7424] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + ACTIONS(854), 1, + anon_sym_except_STAR, + ACTIONS(856), 1, + anon_sym_finally, + STATE(413), 1, + sym_else_clause, + STATE(520), 1, + sym_finally_clause, + STATE(267), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(842), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(844), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [7496] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(664), 1, + anon_sym_yield, + ACTIONS(716), 1, + anon_sym_STAR, + ACTIONS(718), 1, + anon_sym_LPAREN, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1053), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1166), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [7592] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1046), 1, + sym_expression, + STATE(1389), 1, + sym_expression_list, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + STATE(1360), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [7690] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + ACTIONS(856), 1, + anon_sym_finally, + ACTIONS(862), 1, + anon_sym_except, + STATE(454), 1, + sym_else_clause, + STATE(588), 1, + sym_finally_clause, + STATE(266), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + ACTIONS(860), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(858), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [7762] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1070), 1, + sym_expression, + STATE(1472), 1, + sym_expression_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1366), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [7860] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + ACTIONS(854), 1, + anon_sym_except_STAR, + ACTIONS(856), 1, + anon_sym_finally, + STATE(454), 1, + sym_else_clause, + STATE(588), 1, + sym_finally_clause, + STATE(267), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(860), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(858), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [7932] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1085), 1, + sym_expression, + STATE(1518), 1, + sym_expression_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1366), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [8030] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1059), 1, + sym_expression, + STATE(1507), 1, + sym_expression_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1366), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [8128] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + ACTIONS(850), 1, + anon_sym_finally, + ACTIONS(864), 1, + anon_sym_except_STAR, + STATE(467), 1, + sym_else_clause, + STATE(523), 1, + sym_finally_clause, + STATE(270), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(860), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(858), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [8200] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + ACTIONS(848), 1, + anon_sym_except, + ACTIONS(850), 1, + anon_sym_finally, + STATE(467), 1, + sym_else_clause, + STATE(523), 1, + sym_finally_clause, + STATE(271), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + ACTIONS(860), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(858), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [8272] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1075), 1, + sym_expression, + STATE(1465), 1, + sym_expression_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1366), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [8370] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + ACTIONS(850), 1, + anon_sym_finally, + ACTIONS(864), 1, + anon_sym_except_STAR, + STATE(440), 1, + sym_else_clause, + STATE(504), 1, + sym_finally_clause, + STATE(270), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(842), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(844), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [8442] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + ACTIONS(856), 1, + anon_sym_finally, + ACTIONS(862), 1, + anon_sym_except, + STATE(413), 1, + sym_else_clause, + STATE(520), 1, + sym_finally_clause, + STATE(266), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + ACTIONS(842), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(844), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [8514] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(866), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1145), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1384), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [8609] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(868), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1145), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1384), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [8704] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + ACTIONS(780), 1, + anon_sym_STAR, + ACTIONS(782), 1, + anon_sym_STAR_STAR, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1036), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + STATE(1187), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [8799] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(283), 1, + anon_sym_STAR, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(933), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1023), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [8894] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(870), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1145), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1384), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [8989] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(280), 1, + anon_sym_COMMA, + ACTIONS(287), 1, + anon_sym_COLON_EQ, + ACTIONS(872), 1, + anon_sym_for, + ACTIONS(874), 1, + anon_sym_with, + ACTIONS(876), 1, + anon_sym_def, + ACTIONS(289), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(307), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(276), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [9062] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(878), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1145), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1384), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [9157] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(880), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1145), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1384), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [9252] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(882), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1145), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1384), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [9347] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(884), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1145), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1384), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [9442] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(886), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1145), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1384), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [9537] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(888), 1, + anon_sym_RBRACE, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1145), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1384), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [9632] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(280), 1, + anon_sym_COMMA, + ACTIONS(287), 1, + anon_sym_COLON_EQ, + ACTIONS(890), 1, + anon_sym_for, + ACTIONS(892), 1, + anon_sym_with, + ACTIONS(894), 1, + anon_sym_def, + ACTIONS(289), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(307), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(276), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [9705] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + ACTIONS(898), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1086), 1, + sym_expression, + STATE(1398), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [9799] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + ACTIONS(900), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1086), 1, + sym_expression, + STATE(1398), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [9893] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + ACTIONS(902), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1086), 1, + sym_expression, + STATE(1398), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [9987] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + ACTIONS(908), 1, + anon_sym_elif, + STATE(307), 1, + aux_sym_if_statement_repeat1, + STATE(420), 1, + sym_elif_clause, + STATE(577), 1, + sym_else_clause, + ACTIONS(906), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(904), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [10055] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(912), 1, + anon_sym_COLON, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1064), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(910), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [10147] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + ACTIONS(914), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1086), 1, + sym_expression, + STATE(1398), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [10241] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + ACTIONS(916), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1086), 1, + sym_expression, + STATE(1398), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [10335] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + ACTIONS(918), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1086), 1, + sym_expression, + STATE(1398), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [10429] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + ACTIONS(908), 1, + anon_sym_elif, + STATE(307), 1, + aux_sym_if_statement_repeat1, + STATE(420), 1, + sym_elif_clause, + STATE(570), 1, + sym_else_clause, + ACTIONS(922), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(920), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [10497] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(926), 1, + anon_sym_COLON, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1083), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(924), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [10589] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + ACTIONS(908), 1, + anon_sym_elif, + STATE(258), 1, + aux_sym_if_statement_repeat1, + STATE(420), 1, + sym_elif_clause, + STATE(522), 1, + sym_else_clause, + ACTIONS(930), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(928), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [10657] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(936), 1, + anon_sym_except, + STATE(266), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + ACTIONS(934), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(932), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [10719] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(943), 1, + anon_sym_except_STAR, + STATE(267), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(941), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(939), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [10781] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + ACTIONS(950), 1, + anon_sym_elif, + STATE(276), 1, + aux_sym_if_statement_repeat1, + STATE(433), 1, + sym_elif_clause, + STATE(537), 1, + sym_else_clause, + ACTIONS(946), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(948), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [10849] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + ACTIONS(952), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1086), 1, + sym_expression, + STATE(1398), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [10943] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(954), 1, + anon_sym_except_STAR, + STATE(270), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(941), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(939), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [11005] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(957), 1, + anon_sym_except, + STATE(271), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + ACTIONS(934), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(932), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [11067] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + ACTIONS(908), 1, + anon_sym_elif, + STATE(263), 1, + aux_sym_if_statement_repeat1, + STATE(420), 1, + sym_elif_clause, + STATE(529), 1, + sym_else_clause, + ACTIONS(946), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(948), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [11135] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + ACTIONS(960), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1086), 1, + sym_expression, + STATE(1398), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [11229] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + ACTIONS(962), 1, + anon_sym_RBRACK, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1086), 1, + sym_expression, + STATE(1398), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [11323] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1145), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1384), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [11415] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + ACTIONS(950), 1, + anon_sym_elif, + STATE(285), 1, + aux_sym_if_statement_repeat1, + STATE(433), 1, + sym_elif_clause, + STATE(585), 1, + sym_else_clause, + ACTIONS(922), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(920), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [11483] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + ACTIONS(950), 1, + anon_sym_elif, + STATE(285), 1, + aux_sym_if_statement_repeat1, + STATE(433), 1, + sym_elif_clause, + STATE(575), 1, + sym_else_clause, + ACTIONS(906), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(904), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [11551] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(280), 1, + anon_sym_COMMA, + ACTIONS(287), 1, + anon_sym_COLON_EQ, + ACTIONS(964), 1, + sym__string_start, + STATE(1335), 1, + sym_string, + ACTIONS(289), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(307), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(276), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [11621] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + ACTIONS(950), 1, + anon_sym_elif, + STATE(277), 1, + aux_sym_if_statement_repeat1, + STATE(433), 1, + sym_elif_clause, + STATE(576), 1, + sym_else_clause, + ACTIONS(930), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(928), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [11689] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(962), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1018), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [11778] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(966), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(968), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [11835] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(970), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(972), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [11892] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(974), 1, + anon_sym_LPAREN, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1050), 1, + sym_expression, + STATE(1320), 1, + sym_with_item, + STATE(1422), 1, + sym_with_clause, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [11983] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(280), 1, + anon_sym_COMMA, + ACTIONS(287), 1, + anon_sym_COLON_EQ, + ACTIONS(976), 1, + sym_identifier, + ACTIONS(289), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(303), 10, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + sym__semicolon, + ACTIONS(307), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(276), 21, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + anon_sym_is, + [12050] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(982), 1, + anon_sym_elif, + STATE(285), 1, + aux_sym_if_statement_repeat1, + STATE(433), 1, + sym_elif_clause, + ACTIONS(978), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(980), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [12113] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(962), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(979), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [12202] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(985), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(987), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [12259] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(991), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(989), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [12316] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1103), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(993), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [12405] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(995), 1, + anon_sym_RPAREN, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1050), 1, + sym_expression, + STATE(1308), 1, + sym_with_item, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [12496] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(966), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(968), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [12553] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(974), 1, + anon_sym_LPAREN, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1050), 1, + sym_expression, + STATE(1320), 1, + sym_with_item, + STATE(1459), 1, + sym_with_clause, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [12644] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1090), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(997), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [12733] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1091), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(999), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [12822] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1066), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(1001), 2, + sym__newline, + sym__semicolon, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [12911] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(974), 1, + anon_sym_LPAREN, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1050), 1, + sym_expression, + STATE(1320), 1, + sym_with_item, + STATE(1474), 1, + sym_with_clause, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [13002] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(962), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1013), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [13091] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(974), 1, + anon_sym_LPAREN, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1050), 1, + sym_expression, + STATE(1320), 1, + sym_with_item, + STATE(1451), 1, + sym_with_clause, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [13182] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1047), 1, + sym_expression, + STATE(1294), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [13273] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1066), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(1003), 2, + sym__newline, + sym__semicolon, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [13362] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1021), 1, + sym_expression, + STATE(1220), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [13453] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1005), 1, + anon_sym_RPAREN, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1050), 1, + sym_expression, + STATE(1308), 1, + sym_with_item, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [13544] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1066), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(1007), 2, + sym__newline, + sym__semicolon, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [13633] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1066), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(1009), 2, + sym__newline, + sym__semicolon, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [13722] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(991), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(989), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [13779] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1119), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(1011), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [13868] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1013), 1, + anon_sym_elif, + STATE(307), 1, + aux_sym_if_statement_repeat1, + STATE(420), 1, + sym_elif_clause, + ACTIONS(978), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(980), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [13931] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1018), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1016), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [13988] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(963), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1017), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [14077] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1040), 1, + sym_expression, + STATE(1258), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [14168] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(985), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(987), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [14225] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(618), 1, + anon_sym_await, + ACTIONS(758), 1, + anon_sym_lambda, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(958), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(1033), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [14314] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1018), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1016), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [14371] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(896), 1, + anon_sym_COLON, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1086), 1, + sym_expression, + STATE(1398), 1, + sym_slice, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [14462] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(970), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(972), 37, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [14519] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1022), 13, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1020), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [14575] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1026), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1024), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [14631] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1028), 13, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1030), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [14687] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(991), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(989), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [14743] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1032), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1034), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [14799] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1022), 1, + sym_expression, + STATE(1483), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [14887] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1022), 1, + sym_expression, + STATE(1482), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [14975] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1022), 1, + sym_expression, + STATE(1480), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [15063] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1022), 1, + sym_expression, + STATE(1478), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [15151] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1036), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1038), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [15207] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(966), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(968), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [15263] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1022), 13, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1020), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [15319] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1040), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1042), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [15375] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 13, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1046), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [15431] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1050), 1, + anon_sym_COMMA, + ACTIONS(1055), 1, + anon_sym_COLON_EQ, + ACTIONS(1057), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(1059), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(1053), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [15495] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1061), 13, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1063), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [15551] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1026), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1024), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [15607] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1065), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1067), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [15663] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(280), 1, + anon_sym_COMMA, + ACTIONS(287), 1, + anon_sym_COLON_EQ, + ACTIONS(289), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(307), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(276), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [15727] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1069), 1, + anon_sym_COLON, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1063), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [15815] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(824), 16, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(822), 32, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym__semicolon, + [15871] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(824), 16, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(822), 32, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym__semicolon, + [15927] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(568), 1, + anon_sym_COLON_EQ, + ACTIONS(570), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(565), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(572), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(303), 14, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + ACTIONS(276), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + [15991] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1074), 1, + anon_sym_COLON_EQ, + ACTIONS(1076), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(1071), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1078), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(1048), 14, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + ACTIONS(1053), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + [16055] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1080), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1082), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [16111] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1022), 1, + sym_expression, + STATE(1485), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [16199] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(832), 16, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(830), 32, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym__semicolon, + [16255] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(832), 16, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(830), 32, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym__semicolon, + [16311] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(836), 16, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(834), 32, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym__semicolon, + [16367] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 1, + anon_sym_case, + STATE(349), 2, + sym_case_block, + aux_sym_cases_repeat1, + ACTIONS(1086), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1084), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [16427] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1022), 1, + sym_expression, + STATE(1428), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [16515] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1094), 1, + anon_sym_case, + STATE(347), 2, + sym_case_block, + aux_sym_cases_repeat1, + ACTIONS(1090), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1092), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [16575] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1082), 1, + sym_expression, + STATE(1263), 1, + sym_type, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [16663] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1097), 1, + anon_sym_case, + STATE(349), 2, + sym_case_block, + aux_sym_cases_repeat1, + ACTIONS(1090), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1092), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [16723] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1022), 1, + sym_expression, + STATE(1505), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [16811] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1050), 1, + sym_expression, + STATE(1308), 1, + sym_with_item, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [16899] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(828), 16, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(826), 32, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym__semicolon, + [16955] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1080), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1082), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17011] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(991), 13, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(989), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17067] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(970), 13, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(972), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17123] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(966), 13, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(968), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17179] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1065), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1067), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17235] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1018), 13, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1016), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17291] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(991), 13, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(989), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17347] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1018), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1016), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17403] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1022), 1, + sym_expression, + STATE(1133), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [17491] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1018), 13, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1016), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17547] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 13, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1046), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17603] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1022), 1, + sym_expression, + STATE(1270), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [17691] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(840), 16, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_EQ, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(838), 32, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + sym__semicolon, + [17747] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1040), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1042), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17803] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(985), 13, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(987), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [17859] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1022), 1, + sym_expression, + STATE(1491), 1, + sym_type, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [17947] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1018), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1016), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18003] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(966), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(968), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18059] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(970), 13, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(972), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18115] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1028), 13, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1030), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18171] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1032), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1034), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18227] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(985), 13, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(987), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18283] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(985), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(987), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18339] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(966), 13, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(968), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18395] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1036), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1038), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18451] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(985), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(987), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18507] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(970), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(972), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18563] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 1, + anon_sym_case, + STATE(347), 2, + sym_case_block, + aux_sym_cases_repeat1, + ACTIONS(1086), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1084), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18623] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(991), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(989), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18679] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(970), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(972), 36, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_except, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18735] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1102), 1, + anon_sym_COLON, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1081), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [18823] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1061), 13, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_except_STAR, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1063), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [18879] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(980), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [18964] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1186), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [19049] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + STATE(545), 1, + sym_else_clause, + ACTIONS(1104), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1106), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [19108] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1108), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1110), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [19163] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(919), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [19248] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(994), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [19333] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(904), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [19418] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1028), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [19503] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1112), 1, + sym_identifier, + ACTIONS(1116), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(948), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(449), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(1114), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [19590] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1044), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [19675] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1029), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [19760] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1030), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [19845] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1032), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [19930] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1134), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [20015] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1135), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [20100] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1151), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [20185] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + STATE(500), 1, + sym_else_clause, + ACTIONS(1118), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1120), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [20244] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1104), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [20329] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1124), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1122), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [20384] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1153), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [20469] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1035), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [20554] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(947), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [20639] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1124), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1122), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [20694] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + STATE(519), 1, + sym_else_clause, + ACTIONS(1126), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1128), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [20753] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(916), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [20838] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1000), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [20923] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1001), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [21008] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1136), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [21093] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(856), 1, + anon_sym_finally, + STATE(591), 1, + sym_finally_clause, + ACTIONS(1132), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1130), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [21152] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + STATE(593), 1, + sym_else_clause, + ACTIONS(1126), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1128), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [21211] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1169), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [21296] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1123), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [21381] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1156), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [21466] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + STATE(510), 1, + sym_else_clause, + ACTIONS(1104), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1106), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [21525] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(967), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [21610] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1136), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1134), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [21665] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1108), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1110), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [21720] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(974), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [21805] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1140), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [21890] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1141), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [21975] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1094), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [22060] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1149), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [22145] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + STATE(511), 1, + sym_else_clause, + ACTIONS(1138), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1140), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [22204] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + STATE(539), 1, + sym_else_clause, + ACTIONS(1138), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1140), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [22263] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1152), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [22348] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + STATE(503), 1, + sym_else_clause, + ACTIONS(1142), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1144), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [22407] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1050), 1, + anon_sym_COMMA, + ACTIONS(1057), 1, + anon_sym_EQ, + ACTIONS(1059), 14, + anon_sym_COLON, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(1053), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [22468] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + STATE(551), 1, + sym_else_clause, + ACTIONS(1142), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1144), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [22527] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1136), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1134), 35, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_elif, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [22582] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1098), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [22667] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1121), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [22752] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(908), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [22837] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1007), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [22922] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1073), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [23007] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(928), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [23092] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(850), 1, + anon_sym_finally, + STATE(518), 1, + sym_finally_clause, + ACTIONS(1132), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1130), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [23151] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1148), 1, + anon_sym_COMMA, + ACTIONS(1155), 1, + anon_sym_EQ, + ACTIONS(1153), 14, + anon_sym_COLON, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(1151), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [23212] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1054), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [23297] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1025), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [23382] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(912), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [23467] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1051), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [23552] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(920), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [23637] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(939), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [23722] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(992), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [23807] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1076), 1, + anon_sym_EQ, + ACTIONS(1071), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1048), 14, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + ACTIONS(1078), 14, + anon_sym_COLON, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(1053), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + [23868] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1126), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [23953] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1127), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [24038] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(914), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [24123] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1078), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [24208] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(856), 1, + anon_sym_finally, + STATE(564), 1, + sym_finally_clause, + ACTIONS(1159), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1157), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [24267] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(927), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [24352] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(926), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [24437] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(922), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [24522] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(622), 1, + sym_identifier, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(636), 1, + anon_sym_not, + ACTIONS(638), 1, + anon_sym_lambda, + ACTIONS(644), 1, + anon_sym_await, + ACTIONS(646), 1, + sym__string_start, + STATE(740), 1, + sym_primary_expression, + STATE(742), 1, + sym_string, + STATE(1027), 1, + sym_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(626), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1015), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [24607] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1148), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [24692] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(948), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [24777] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1113), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [24862] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1026), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [24947] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(924), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [25032] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + STATE(567), 1, + sym_else_clause, + ACTIONS(1163), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1161), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [25091] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(923), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [25176] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1105), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [25261] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(850), 1, + anon_sym_finally, + STATE(559), 1, + sym_finally_clause, + ACTIONS(1159), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1157), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [25320] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1157), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [25405] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1048), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [25490] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(904), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [25575] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1158), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [25660] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(846), 1, + anon_sym_else, + STATE(569), 1, + sym_else_clause, + ACTIONS(1163), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1161), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [25719] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(1039), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [25804] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1102), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [25889] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1167), 1, + anon_sym_COMMA, + ACTIONS(1174), 1, + anon_sym_EQ, + ACTIONS(1172), 14, + anon_sym_COLON, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + ACTIONS(1170), 15, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1165), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [25950] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(921), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [26035] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1122), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [26120] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(852), 1, + anon_sym_else, + STATE(525), 1, + sym_else_clause, + ACTIONS(1118), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1120), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [26179] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1084), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [26264] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1065), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [26349] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(997), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [26434] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(602), 1, + sym_identifier, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(614), 1, + anon_sym_not, + ACTIONS(616), 1, + anon_sym_lambda, + ACTIONS(618), 1, + anon_sym_await, + STATE(600), 1, + sym_string, + STATE(643), 1, + sym_primary_expression, + STATE(909), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(606), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [26519] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, + anon_sym_lambda, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(331), 1, + sym_identifier, + ACTIONS(337), 1, + anon_sym_await, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(684), 1, + sym_primary_expression, + STATE(713), 1, + sym_string, + STATE(1066), 1, + sym_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(333), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(1009), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [26604] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(274), 1, + sym_identifier, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + anon_sym_not, + ACTIONS(305), 1, + anon_sym_lambda, + ACTIONS(313), 1, + anon_sym_await, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(630), 1, + sym_primary_expression, + STATE(1159), 1, + sym_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(285), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(900), 7, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [26689] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1178), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1176), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [26743] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1178), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1176), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [26797] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1182), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1180), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [26851] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1184), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1186), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [26905] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1190), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1188), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [26959] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1182), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1180), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27013] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1194), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1192), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27067] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1198), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1196), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27121] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1198), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1196), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27175] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1194), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1192), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27229] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1184), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1186), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_case, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27283] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1190), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1188), 34, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_finally, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27337] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1200), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1202), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27390] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1206), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1204), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27443] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1208), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1210), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27496] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1212), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1214), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27549] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1216), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1218), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27602] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1222), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1220), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27655] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1224), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1226), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27708] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1132), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1130), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27761] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1230), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1228), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27814] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1234), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1232), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27867] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(860), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(858), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27920] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1238), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1236), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [27973] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1242), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1240), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28026] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1246), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1244), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28079] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1248), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1250), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28132] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1252), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1254), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28185] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1252), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1254), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28238] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(842), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(844), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28291] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1206), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1204), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28344] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(860), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(858), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28397] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1258), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1256), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28450] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1260), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1262), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28503] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1264), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1266), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28556] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1132), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1130), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28609] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1268), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1270), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28662] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1274), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1272), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28715] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1159), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1157), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28768] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1276), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1278), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28821] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1212), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1214), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28874] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1276), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1278), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28927] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1282), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1280), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [28980] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1284), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1286), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29033] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1290), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1288), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29086] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1294), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1292), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29139] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1298), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1296), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29192] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1300), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1302), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29245] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1304), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1306), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29298] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1310), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1308), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29351] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1312), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1314), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29404] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1310), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1308), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29457] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1290), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1288), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29510] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1294), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1292), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29563] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1248), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1250), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29616] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1304), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1306), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29669] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1316), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1318), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29722] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1222), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1220), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29775] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1320), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1322), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29828] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1326), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1324), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29881] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1246), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1244), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29934] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1242), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1240), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [29987] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1238), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1236), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30040] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1216), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1218), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30093] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1328), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1330), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30146] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1282), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1280), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30199] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1224), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1226), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30252] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1332), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1334), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30305] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1298), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1296), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30358] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1328), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1330), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30411] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1284), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1286), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30464] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1234), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1232), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30517] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1230), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1228), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30570] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1300), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1302), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30623] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1336), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1338), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30676] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1320), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1322), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30729] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1340), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1342), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30782] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1316), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1318), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30835] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1312), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1314), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30888] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1336), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1338), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30941] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1340), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1342), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [30994] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1258), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1256), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31047] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1346), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1344), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31100] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(842), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(844), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31153] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1346), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1344), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31206] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1350), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1348), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31259] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1354), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1352), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31312] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1354), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1352), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31365] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1356), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1358), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31418] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1356), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1358), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31471] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1360), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1362), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31524] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1274), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1272), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31577] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1360), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1362), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31630] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1326), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1324), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31683] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1366), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1364), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31736] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1200), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1202), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31789] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1370), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1368), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31842] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1374), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1372), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31895] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1366), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1364), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [31948] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1208), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1210), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32001] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1350), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1348), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32054] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1370), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1368), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32107] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1378), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1376), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32160] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1159), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1157), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32213] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1374), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1372), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32266] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1378), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1376), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32319] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1260), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1262), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32372] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1268), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1270), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32425] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1264), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1266), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32478] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1332), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1334), 33, + anon_sym_import, + anon_sym_from, + anon_sym_STAR, + anon_sym_print, + anon_sym_assert, + anon_sym_return, + anon_sym_del, + anon_sym_raise, + anon_sym_pass, + anon_sym_break, + anon_sym_continue, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_while, + anon_sym_try, + anon_sym_with, + anon_sym_match, + anon_sym_def, + anon_sym_global, + anon_sym_nonlocal, + anon_sym_exec, + anon_sym_type, + anon_sym_class, + anon_sym_not, + anon_sym_lambda, + anon_sym_yield, + sym_integer, + sym_identifier, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [32531] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(876), 1, + sym_pattern, + STATE(882), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(1380), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [32613] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + ACTIONS(1384), 1, + anon_sym_RPAREN, + STATE(600), 1, + sym_string, + STATE(882), 1, + sym_primary_expression, + STATE(1146), 1, + sym_pattern, + STATE(1434), 1, + sym__patterns, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [32697] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(876), 1, + sym_pattern, + STATE(882), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(1386), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [32779] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(315), 1, + sym__string_start, + STATE(599), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1390), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1388), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [32834] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1396), 1, + sym__string_start, + STATE(599), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1394), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1392), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [32889] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(315), 1, + sym__string_start, + STATE(598), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1053), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [32944] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(882), 1, + sym_primary_expression, + STATE(1305), 1, + sym_pattern, + STATE(1466), 1, + sym_pattern_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [33025] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(882), 1, + sym_primary_expression, + STATE(1306), 1, + sym_pattern, + STATE(1454), 1, + sym_pattern_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [33106] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(882), 1, + sym_primary_expression, + STATE(1197), 1, + sym_pattern, + STATE(1522), 1, + sym_pattern_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [33187] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(882), 1, + sym_primary_expression, + STATE(1199), 1, + sym_pattern, + STATE(1519), 1, + sym_pattern_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [33268] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(882), 1, + sym_primary_expression, + STATE(1276), 1, + sym_pattern, + STATE(1421), 1, + sym_pattern_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [33349] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(882), 1, + sym_primary_expression, + STATE(1293), 1, + sym_pattern, + STATE(1419), 1, + sym_pattern_list, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [33430] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(876), 1, + sym_pattern, + STATE(882), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [33508] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(678), 1, + sym_identifier, + ACTIONS(680), 1, + anon_sym_LPAREN, + ACTIONS(690), 1, + anon_sym_LBRACK, + ACTIONS(1382), 1, + anon_sym_STAR, + STATE(600), 1, + sym_string, + STATE(882), 1, + sym_primary_expression, + STATE(1281), 1, + sym_pattern, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(770), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(875), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(684), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [33586] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1401), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1399), 35, + sym__string_start, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [33635] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1405), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1403), 35, + sym__string_start, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [33684] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1409), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1407), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [33732] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1413), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1411), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [33780] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1417), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1415), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [33828] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1421), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1419), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [33876] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1425), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1423), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [33924] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1421), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1419), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [33972] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1429), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1427), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34020] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(276), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34068] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1433), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1431), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34116] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1437), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1435), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34164] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1441), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1439), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34212] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1445), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1443), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34260] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1449), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1447), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34308] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1453), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1451), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34356] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1457), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1455), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34404] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1461), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1459), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34452] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1465), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1463), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34500] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1469), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1467), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34548] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1473), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1471), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34596] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1487), 1, + anon_sym_PIPE, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + ACTIONS(1495), 1, + anon_sym_EQ, + ACTIONS(1499), 1, + anon_sym_not, + ACTIONS(1501), 1, + anon_sym_AMP, + ACTIONS(1503), 1, + anon_sym_CARET, + ACTIONS(1507), 1, + anon_sym_is, + STATE(870), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1481), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1483), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1489), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(1505), 2, + anon_sym_LT, + anon_sym_GT, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1497), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1485), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1479), 10, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_and, + anon_sym_or, + sym_type_conversion, + [34678] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1511), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1509), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34726] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1417), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1415), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34774] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1515), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1513), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34822] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1519), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1517), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34870] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1523), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1521), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [34918] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1525), 1, + sym_identifier, + STATE(600), 1, + sym_string, + STATE(882), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(762), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(1527), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(1529), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [34990] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1533), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1531), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35038] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1537), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1535), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35086] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1425), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1423), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35134] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1519), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1517), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35182] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1541), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1539), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35230] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1053), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35278] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1495), 1, + anon_sym_as, + ACTIONS(1549), 1, + anon_sym_PIPE, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + ACTIONS(1557), 1, + anon_sym_not, + ACTIONS(1559), 1, + anon_sym_AMP, + ACTIONS(1561), 1, + anon_sym_CARET, + ACTIONS(1565), 1, + anon_sym_is, + STATE(871), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1543), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1545), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1551), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(1563), 2, + anon_sym_LT, + anon_sym_GT, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1555), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1547), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1479), 10, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_and, + anon_sym_or, + [35360] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1569), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1567), 34, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35408] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 28, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35465] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + ACTIONS(1503), 1, + anon_sym_CARET, + ACTIONS(1481), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1483), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1489), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1497), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1573), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 20, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35532] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 5, + anon_sym_as, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 28, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [35589] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 28, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35646] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + ACTIONS(1543), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1551), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1555), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1573), 3, + anon_sym_as, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 23, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [35709] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1577), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1575), 28, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35766] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + ACTIONS(1481), 2, + anon_sym_STAR, + anon_sym_SLASH, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1497), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1573), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 25, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [35827] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1549), 1, + anon_sym_PIPE, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + ACTIONS(1559), 1, + anon_sym_AMP, + ACTIONS(1561), 1, + anon_sym_CARET, + ACTIONS(1543), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1545), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1551), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1555), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1581), 3, + anon_sym_as, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1579), 18, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [35898] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + ACTIONS(1559), 1, + anon_sym_AMP, + ACTIONS(1561), 1, + anon_sym_CARET, + ACTIONS(1543), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1545), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1551), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1555), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1573), 3, + anon_sym_as, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [35967] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + ACTIONS(1543), 2, + anon_sym_STAR, + anon_sym_SLASH, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1555), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1573), 3, + anon_sym_as, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 25, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [36028] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 5, + anon_sym_as, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 28, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [36085] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + ACTIONS(1481), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1483), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1489), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1497), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1573), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 21, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [36150] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + ACTIONS(1543), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1545), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1551), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1555), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1573), 3, + anon_sym_as, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 21, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [36215] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + ACTIONS(1501), 1, + anon_sym_AMP, + ACTIONS(1503), 1, + anon_sym_CARET, + ACTIONS(1481), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1483), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1489), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1497), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1573), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [36284] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1549), 1, + anon_sym_PIPE, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + ACTIONS(1559), 1, + anon_sym_AMP, + ACTIONS(1561), 1, + anon_sym_CARET, + ACTIONS(1543), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1545), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1551), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1555), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1585), 3, + anon_sym_as, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1583), 18, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [36355] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + ACTIONS(1561), 1, + anon_sym_CARET, + ACTIONS(1543), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1545), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1551), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1555), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1573), 3, + anon_sym_as, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 20, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [36422] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1577), 5, + anon_sym_as, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1575), 28, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [36479] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1549), 1, + anon_sym_PIPE, + ACTIONS(1553), 1, + anon_sym_STAR_STAR, + ACTIONS(1559), 1, + anon_sym_AMP, + ACTIONS(1561), 1, + anon_sym_CARET, + ACTIONS(1543), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1545), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1551), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1555), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1589), 3, + anon_sym_as, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1587), 18, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [36550] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1487), 1, + anon_sym_PIPE, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + ACTIONS(1501), 1, + anon_sym_AMP, + ACTIONS(1503), 1, + anon_sym_CARET, + ACTIONS(1481), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1483), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1489), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1497), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1589), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1587), 18, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [36621] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1487), 1, + anon_sym_PIPE, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + ACTIONS(1501), 1, + anon_sym_AMP, + ACTIONS(1503), 1, + anon_sym_CARET, + ACTIONS(1481), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1483), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1489), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1497), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1585), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1583), 18, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [36692] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1487), 1, + anon_sym_PIPE, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + ACTIONS(1501), 1, + anon_sym_AMP, + ACTIONS(1503), 1, + anon_sym_CARET, + ACTIONS(1481), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1483), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1489), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1497), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1581), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1579), 18, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [36763] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + ACTIONS(1481), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1489), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1497), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1573), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 23, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [36826] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1591), 1, + anon_sym_COLON_EQ, + ACTIONS(1053), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_COLON, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 31, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [36874] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(608), 1, + anon_sym_COLON_EQ, + ACTIONS(276), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_COLON, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 31, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [36922] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + ACTIONS(1595), 1, + anon_sym_not, + STATE(713), 1, + sym_string, + STATE(733), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [36988] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1599), 1, + anon_sym_not, + STATE(742), 1, + sym_string, + STATE(751), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [37054] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1151), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 33, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [37100] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1170), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1165), 33, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [37146] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1603), 1, + anon_sym_not, + STATE(600), 1, + sym_string, + STATE(665), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [37212] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1074), 1, + anon_sym_COLON_EQ, + ACTIONS(1053), 6, + anon_sym_STAR, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 31, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [37260] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(568), 1, + anon_sym_COLON_EQ, + ACTIONS(276), 6, + anon_sym_STAR, + anon_sym_COLON, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 31, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_else, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym_type_conversion, + [37308] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + ACTIONS(1605), 1, + anon_sym_not, + STATE(600), 1, + sym_string, + STATE(652), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [37374] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1607), 1, + sym__string_start, + STATE(677), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1394), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1392), 31, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [37424] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + STATE(677), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1390), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1388), 31, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [37474] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(663), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [37537] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(742), 1, + sym_string, + STATE(751), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [37600] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(742), 1, + sym_string, + STATE(747), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [37663] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(742), 1, + sym_string, + STATE(763), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [37726] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(742), 1, + sym_string, + STATE(766), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [37789] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1495), 1, + anon_sym_EQ, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1620), 1, + anon_sym_PIPE, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + ACTIONS(1630), 1, + anon_sym_not, + ACTIONS(1632), 1, + anon_sym_AMP, + ACTIONS(1634), 1, + anon_sym_CARET, + ACTIONS(1638), 1, + anon_sym_is, + STATE(878), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1614), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1616), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1622), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(1636), 2, + anon_sym_LT, + anon_sym_GT, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1628), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1618), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1479), 7, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_and, + anon_sym_or, + sym__semicolon, + [37868] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1525), 1, + sym_identifier, + STATE(600), 1, + sym_string, + STATE(882), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(762), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(1529), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [37935] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(656), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [37998] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(646), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38061] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(659), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38124] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1640), 1, + sym__string_start, + STATE(689), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1394), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1392), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [38173] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(645), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38236] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(742), 1, + sym_string, + STATE(746), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38299] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(651), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38362] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(647), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38425] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(713), 1, + sym_string, + STATE(731), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38488] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(658), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38551] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(665), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38614] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(742), 1, + sym_string, + STATE(750), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38677] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(649), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38740] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(742), 1, + sym_string, + STATE(756), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38803] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(713), 1, + sym_string, + STATE(743), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38866] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(713), 1, + sym_string, + STATE(734), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38929] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(652), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [38992] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(653), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39055] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(654), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39118] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(655), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39181] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(713), 1, + sym_string, + STATE(741), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39244] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(666), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39307] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(742), 1, + sym_string, + STATE(761), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39370] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(661), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39433] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(660), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39496] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(657), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39559] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(604), 1, + anon_sym_LPAREN, + ACTIONS(612), 1, + anon_sym_LBRACK, + STATE(600), 1, + sym_string, + STATE(662), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(610), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39622] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(81), 1, + sym__string_start, + STATE(720), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1053), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [39671] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(713), 1, + sym_string, + STATE(739), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39734] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1643), 1, + sym_identifier, + STATE(600), 1, + sym_string, + STATE(882), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + STATE(879), 2, + sym_attribute, + sym_subscript, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(1645), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 13, + sym_binary_operator, + sym_unary_operator, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39801] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(648), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39864] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(713), 1, + sym_string, + STATE(738), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39927] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(664), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [39990] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(713), 1, + sym_string, + STATE(745), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [40053] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(81), 1, + sym__string_start, + STATE(689), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1390), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1388), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [40102] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(713), 1, + sym_string, + STATE(737), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [40165] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(713), 1, + sym_string, + STATE(733), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [40228] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(713), 1, + sym_string, + STATE(732), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [40291] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(742), 1, + sym_string, + STATE(757), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [40354] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1170), 5, + anon_sym_as, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1165), 32, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [40399] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(278), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_LBRACK, + ACTIONS(295), 1, + anon_sym_LBRACE, + ACTIONS(315), 1, + sym__string_start, + STATE(600), 1, + sym_string, + STATE(650), 1, + sym_primary_expression, + ACTIONS(309), 2, + sym_ellipsis, + sym_float, + ACTIONS(301), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(311), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1601), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(642), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [40462] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1151), 5, + anon_sym_as, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 32, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [40507] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(742), 1, + sym_string, + STATE(752), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [40570] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(624), 1, + anon_sym_LPAREN, + ACTIONS(632), 1, + anon_sym_LBRACK, + ACTIONS(634), 1, + anon_sym_LBRACE, + ACTIONS(646), 1, + sym__string_start, + STATE(742), 1, + sym_string, + STATE(753), 1, + sym_primary_expression, + ACTIONS(640), 2, + sym_ellipsis, + sym_float, + ACTIONS(630), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(642), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1597), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(811), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [40633] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(559), 1, + anon_sym_LPAREN, + ACTIONS(563), 1, + anon_sym_LBRACK, + STATE(713), 1, + sym_string, + STATE(735), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(1593), 6, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + anon_sym_await, + STATE(797), 15, + sym_binary_operator, + sym_unary_operator, + sym_attribute, + sym_subscript, + sym_call, + sym_list, + sym_set, + sym_tuple, + sym_dictionary, + sym_list_comprehension, + sym_dictionary_comprehension, + sym_set_comprehension, + sym_generator_expression, + sym_parenthesized_expression, + sym_concatenated_string, + [40696] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1620), 1, + anon_sym_PIPE, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + ACTIONS(1632), 1, + anon_sym_AMP, + ACTIONS(1634), 1, + anon_sym_CARET, + ACTIONS(1614), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1616), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1622), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1589), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1628), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1587), 15, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_in, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [40764] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + ACTIONS(1614), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1622), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1628), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1571), 20, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [40824] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1620), 1, + anon_sym_PIPE, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + ACTIONS(1632), 1, + anon_sym_AMP, + ACTIONS(1634), 1, + anon_sym_CARET, + ACTIONS(1614), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1616), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1622), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1581), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1628), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1579), 15, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_in, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [40892] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1620), 1, + anon_sym_PIPE, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + ACTIONS(1632), 1, + anon_sym_AMP, + ACTIONS(1634), 1, + anon_sym_CARET, + ACTIONS(1614), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1616), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1622), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1585), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1628), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1583), 15, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_in, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [40960] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 25, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [41014] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1401), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1399), 32, + sym__string_start, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [41058] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + ACTIONS(1632), 1, + anon_sym_AMP, + ACTIONS(1634), 1, + anon_sym_CARET, + ACTIONS(1614), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1616), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1622), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1628), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1571), 16, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [41124] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + ACTIONS(1614), 2, + anon_sym_STAR, + anon_sym_SLASH, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1628), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1571), 22, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [41182] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 25, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [41236] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1657), 1, + anon_sym_PIPE, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + ACTIONS(1667), 1, + anon_sym_not, + ACTIONS(1669), 1, + anon_sym_AMP, + ACTIONS(1671), 1, + anon_sym_CARET, + ACTIONS(1675), 1, + anon_sym_is, + STATE(881), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1651), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1653), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1659), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(1673), 2, + anon_sym_LT, + anon_sym_GT, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1665), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1655), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1479), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_and, + anon_sym_or, + [41312] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + ACTIONS(1634), 1, + anon_sym_CARET, + ACTIONS(1614), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1616), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1622), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1628), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1571), 17, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [41376] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + STATE(678), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1053), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [41424] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + ACTIONS(1614), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1616), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1622), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1628), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1571), 18, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [41486] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1405), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1403), 32, + sym__string_start, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [41530] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_DOT, + ACTIONS(1612), 1, + anon_sym_LPAREN, + ACTIONS(1624), 1, + anon_sym_LBRACK, + ACTIONS(1626), 1, + anon_sym_STAR_STAR, + STATE(792), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1577), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1575), 25, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [41584] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1657), 1, + anon_sym_PIPE, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + ACTIONS(1669), 1, + anon_sym_AMP, + ACTIONS(1671), 1, + anon_sym_CARET, + ACTIONS(1589), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1651), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1653), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1659), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1665), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1587), 15, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [41651] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + ACTIONS(1573), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1651), 2, + anon_sym_STAR, + anon_sym_SLASH, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1665), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1571), 22, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [41708] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(303), 3, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_LBRACK, + ACTIONS(276), 13, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + ACTIONS(307), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [41753] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1591), 1, + anon_sym_COLON_EQ, + ACTIONS(1050), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1053), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 27, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [41800] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + ACTIONS(1669), 1, + anon_sym_AMP, + ACTIONS(1671), 1, + anon_sym_CARET, + ACTIONS(1573), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1651), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1653), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1659), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1665), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1571), 16, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [41865] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1657), 1, + anon_sym_PIPE, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + ACTIONS(1669), 1, + anon_sym_AMP, + ACTIONS(1671), 1, + anon_sym_CARET, + ACTIONS(1581), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1651), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1653), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1659), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1665), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1579), 15, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [41932] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + ACTIONS(1573), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1651), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1659), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1665), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1571), 20, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [41991] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 25, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [42044] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1055), 1, + anon_sym_COLON_EQ, + ACTIONS(1053), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [42089] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(287), 1, + anon_sym_COLON_EQ, + ACTIONS(276), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [42134] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1573), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1571), 25, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [42187] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1657), 1, + anon_sym_PIPE, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + ACTIONS(1669), 1, + anon_sym_AMP, + ACTIONS(1671), 1, + anon_sym_CARET, + ACTIONS(1585), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1651), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1653), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1659), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1665), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1583), 15, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [42254] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1401), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1399), 30, + sym__newline, + sym__string_start, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [42297] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1591), 1, + anon_sym_COLON_EQ, + ACTIONS(1677), 1, + anon_sym_EQ, + ACTIONS(1053), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [42344] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(608), 1, + anon_sym_COLON_EQ, + ACTIONS(620), 1, + anon_sym_EQ, + ACTIONS(276), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [42391] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + ACTIONS(1671), 1, + anon_sym_CARET, + ACTIONS(1573), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1651), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1653), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1659), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1665), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1571), 17, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [42454] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_LBRACK, + ACTIONS(1053), 13, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + ACTIONS(1078), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [42499] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + ACTIONS(1573), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1651), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1653), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1659), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1665), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1571), 18, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [42560] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(608), 1, + anon_sym_COLON_EQ, + ACTIONS(280), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(276), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 27, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [42607] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1165), 3, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_LBRACK, + ACTIONS(1170), 13, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + ACTIONS(1172), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [42652] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1647), 1, + anon_sym_DOT, + ACTIONS(1649), 1, + anon_sym_LPAREN, + ACTIONS(1661), 1, + anon_sym_LBRACK, + ACTIONS(1663), 1, + anon_sym_STAR_STAR, + STATE(847), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1577), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1575), 25, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [42705] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(303), 3, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_LBRACK, + ACTIONS(276), 13, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + ACTIONS(572), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [42750] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1146), 3, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_LBRACK, + ACTIONS(1151), 13, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + ACTIONS(1153), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [42795] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1405), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1403), 30, + sym__newline, + sym__string_start, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [42838] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_LBRACK, + ACTIONS(1053), 13, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + ACTIONS(1059), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [42883] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1461), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1459), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [42925] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1425), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1423), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [42967] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1457), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1455), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43009] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1453), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1451), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43051] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1533), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1531), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43093] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1437), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1435), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43135] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1449), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1447), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43177] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1429), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1427), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43219] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1167), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1170), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1165), 27, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [43263] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1445), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1443), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43305] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1473), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1471), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43347] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1417), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1415), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43389] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1425), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1423), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43431] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1465), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1463), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43473] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1469), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1467), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43515] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1151), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43557] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1170), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1165), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43599] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1511), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1509), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43641] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1148), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1151), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 27, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [43685] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1519), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1517), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43727] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1523), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1521), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43769] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1515), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1513), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43811] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1417), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1415), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43853] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(276), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43895] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1413), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1411), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43937] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1519), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1517), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [43979] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1053), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [44021] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1679), 1, + anon_sym_COLON_EQ, + ACTIONS(1053), 5, + anon_sym_STAR, + anon_sym_COLON, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 28, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44065] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1441), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1439), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [44107] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1541), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1539), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [44149] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(628), 1, + anon_sym_COLON_EQ, + ACTIONS(276), 5, + anon_sym_STAR, + anon_sym_COLON, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 28, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44193] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1569), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1567), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [44235] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1433), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1431), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [44277] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1409), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1407), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [44319] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1537), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1535), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [44361] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1050), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1053), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 27, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44405] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1421), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1419), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [44447] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1421), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1419), 29, + sym__newline, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + sym__semicolon, + [44489] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1519), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1517), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44530] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(832), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(830), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44571] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1053), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44612] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1074), 1, + anon_sym_COLON_EQ, + ACTIONS(1677), 1, + anon_sym_EQ, + ACTIONS(1053), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1048), 27, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44657] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1461), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1459), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44698] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1457), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1455), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44739] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1453), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1451), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44780] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1449), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1447), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44821] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1409), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1407), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44862] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1445), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1443), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44903] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1533), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1531), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44944] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1441), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1439), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [44985] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1437), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1435), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45026] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(828), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(826), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45067] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1421), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1419), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45108] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1421), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1419), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45149] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1473), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1471), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45190] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1541), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1539), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45231] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1417), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1415), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45272] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1537), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1535), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45313] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(840), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(838), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45354] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1569), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1567), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45395] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1417), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1415), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45436] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(276), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45477] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1511), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1509), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45518] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(836), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(834), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45559] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1519), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1517), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45600] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(832), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(830), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45641] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(568), 1, + anon_sym_COLON_EQ, + ACTIONS(620), 1, + anon_sym_EQ, + ACTIONS(276), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(303), 27, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45686] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1425), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1423), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45727] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1413), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1411), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45768] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1465), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1463), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45809] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1429), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1427), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45850] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1469), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1467), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45891] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1425), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1423), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45932] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(824), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(822), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [45973] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(824), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(822), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [46014] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1433), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1431), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [46055] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1515), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1513), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [46096] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1523), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1521), 29, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_COLON, + anon_sym_in, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [46137] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + STATE(1286), 2, + sym__match_patterns, + sym_open_sequence_match_pattern, + STATE(1287), 2, + sym__match_pattern, + sym_match_as_pattern, + STATE(1404), 2, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [46211] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1701), 1, + anon_sym_if, + ACTIONS(1703), 1, + anon_sym_COLON, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(1106), 4, + sym__match_pattern, + sym_match_as_pattern, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [46285] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1705), 1, + anon_sym_if, + ACTIONS(1707), 1, + anon_sym_COLON, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(1106), 4, + sym__match_pattern, + sym_match_as_pattern, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [46359] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + STATE(1221), 2, + sym__match_patterns, + sym_open_sequence_match_pattern, + STATE(1287), 2, + sym__match_pattern, + sym_match_as_pattern, + STATE(1404), 2, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [46433] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1709), 1, + anon_sym_RPAREN, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + STATE(1392), 2, + sym__match_pattern, + sym_match_as_pattern, + STATE(1396), 2, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [46506] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1711), 1, + anon_sym_RPAREN, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(1106), 4, + sym__match_pattern, + sym_match_as_pattern, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [46577] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1711), 1, + anon_sym_RBRACK, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(1106), 4, + sym__match_pattern, + sym_match_as_pattern, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [46648] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1709), 1, + anon_sym_RBRACK, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(1202), 4, + sym__match_pattern, + sym_match_as_pattern, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [46719] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1713), 1, + anon_sym_RBRACK, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(1106), 4, + sym__match_pattern, + sym_match_as_pattern, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [46790] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1713), 1, + anon_sym_RPAREN, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(1106), 4, + sym__match_pattern, + sym_match_as_pattern, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [46861] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1685), 1, + anon_sym_STAR, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(1106), 4, + sym__match_pattern, + sym_match_as_pattern, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [46929] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1715), 1, + sym_identifier, + ACTIONS(1717), 1, + anon_sym_RPAREN, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1212), 1, + sym_match_positional_pattern, + STATE(1330), 1, + sym_match_keyword_pattern, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + STATE(1364), 2, + sym__match_pattern, + sym_match_as_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [47001] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1715), 1, + sym_identifier, + ACTIONS(1719), 1, + anon_sym_RPAREN, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1290), 1, + sym_match_keyword_pattern, + STATE(1403), 1, + sym_match_positional_pattern, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + STATE(1364), 2, + sym__match_pattern, + sym_match_as_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [47073] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1715), 1, + sym_identifier, + ACTIONS(1721), 1, + anon_sym_RPAREN, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1326), 1, + sym_match_keyword_pattern, + STATE(1403), 1, + sym_match_positional_pattern, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + STATE(1364), 2, + sym__match_pattern, + sym_match_as_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [47145] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1403), 1, + sym_match_positional_pattern, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + STATE(1364), 2, + sym__match_pattern, + sym_match_as_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [47211] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + STATE(1355), 2, + sym__match_pattern, + sym_match_as_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [47274] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1689), 1, + sym_match_wildcard_pattern, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + STATE(1024), 2, + sym__match_or_pattern, + sym_match_or_pattern, + STATE(1399), 2, + sym__match_pattern, + sym_match_as_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(971), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [47337] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1723), 1, + sym_match_wildcard_pattern, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(984), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [47392] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + ACTIONS(1681), 1, + sym_identifier, + ACTIONS(1683), 1, + anon_sym_LPAREN, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1691), 1, + anon_sym_LBRACK, + ACTIONS(1693), 1, + anon_sym_LBRACE, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1725), 1, + sym_match_wildcard_pattern, + STATE(913), 1, + sym_string, + STATE(975), 1, + sym_concatenated_string, + STATE(1406), 1, + sym_pattern_class_name, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + STATE(957), 8, + sym__closed_pattern, + sym_match_literal_pattern, + sym_match_capture_pattern, + sym_match_value_pattern, + sym_match_group_pattern, + sym_match_sequence_pattern, + sym_match_mapping_pattern, + sym_match_class_pattern, + [47447] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1729), 1, + anon_sym_as, + ACTIONS(1734), 1, + anon_sym_not, + ACTIONS(1740), 1, + anon_sym_is, + STATE(868), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1737), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1731), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1727), 10, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_and, + anon_sym_or, + [47487] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1729), 1, + anon_sym_EQ, + ACTIONS(1746), 1, + anon_sym_not, + ACTIONS(1752), 1, + anon_sym_is, + STATE(869), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1749), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1743), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1727), 10, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_and, + anon_sym_or, + sym_type_conversion, + [47527] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1499), 1, + anon_sym_not, + ACTIONS(1507), 1, + anon_sym_is, + ACTIONS(1757), 1, + anon_sym_EQ, + STATE(869), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1505), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1485), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1755), 10, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_and, + anon_sym_or, + sym_type_conversion, + [47567] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1557), 1, + anon_sym_not, + ACTIONS(1565), 1, + anon_sym_is, + ACTIONS(1757), 1, + anon_sym_as, + STATE(868), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1563), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1547), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1755), 10, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_and, + anon_sym_or, + [47607] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1761), 1, + anon_sym_COMMA, + STATE(872), 1, + aux_sym__patterns_repeat1, + ACTIONS(1759), 18, + anon_sym_RPAREN, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [47637] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1764), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [47662] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1766), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [47687] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1059), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [47712] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1768), 19, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_in, + anon_sym_RBRACK, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [47737] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1729), 1, + anon_sym_EQ, + ACTIONS(1773), 1, + anon_sym_not, + ACTIONS(1779), 1, + anon_sym_is, + STATE(877), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1776), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1770), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1727), 7, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_and, + anon_sym_or, + sym__semicolon, + [47774] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1630), 1, + anon_sym_not, + ACTIONS(1638), 1, + anon_sym_is, + ACTIONS(1757), 1, + anon_sym_EQ, + STATE(877), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1636), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1618), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1755), 7, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_and, + anon_sym_or, + sym__semicolon, + [47811] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1053), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1782), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + ACTIONS(1048), 14, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + [47840] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(276), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1784), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + ACTIONS(303), 14, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_GT_GT, + anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + [47869] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1667), 1, + anon_sym_not, + ACTIONS(1675), 1, + anon_sym_is, + STATE(883), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1673), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1655), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1755), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_and, + anon_sym_or, + [47903] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1475), 1, + anon_sym_DOT, + ACTIONS(1477), 1, + anon_sym_LPAREN, + ACTIONS(1487), 1, + anon_sym_PIPE, + ACTIONS(1491), 1, + anon_sym_LBRACK, + ACTIONS(1493), 1, + anon_sym_STAR_STAR, + ACTIONS(1501), 1, + anon_sym_AMP, + ACTIONS(1503), 1, + anon_sym_CARET, + ACTIONS(1481), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1483), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1489), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(633), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1497), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + [47949] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1789), 1, + anon_sym_not, + ACTIONS(1795), 1, + anon_sym_is, + STATE(883), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1792), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1786), 6, + anon_sym_in, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + ACTIONS(1727), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_and, + anon_sym_or, + [47983] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1798), 1, + anon_sym_COMMA, + STATE(872), 1, + aux_sym__patterns_repeat1, + ACTIONS(1800), 16, + anon_sym_COLON, + anon_sym_in, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [48011] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1802), 1, + sym_identifier, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1808), 1, + anon_sym_COLON, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + STATE(1334), 1, + sym_parameter, + STATE(1453), 1, + sym_lambda_parameters, + STATE(1521), 1, + sym__parameters, + STATE(1347), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48054] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1802), 1, + sym_identifier, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + ACTIONS(1814), 1, + anon_sym_COLON, + STATE(1334), 1, + sym_parameter, + STATE(1458), 1, + sym_lambda_parameters, + STATE(1521), 1, + sym__parameters, + STATE(1347), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48097] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1802), 1, + sym_identifier, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + ACTIONS(1816), 1, + anon_sym_COLON, + STATE(1334), 1, + sym_parameter, + STATE(1413), 1, + sym_lambda_parameters, + STATE(1521), 1, + sym__parameters, + STATE(1347), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48140] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1802), 1, + sym_identifier, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + ACTIONS(1818), 1, + anon_sym_COLON, + STATE(1334), 1, + sym_parameter, + STATE(1427), 1, + sym_lambda_parameters, + STATE(1521), 1, + sym__parameters, + STATE(1347), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48183] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1820), 1, + anon_sym_COMMA, + ACTIONS(1822), 1, + anon_sym_COLON, + ACTIONS(1824), 1, + anon_sym_EQ, + STATE(884), 1, + aux_sym__patterns_repeat1, + ACTIONS(1826), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [48214] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1802), 1, + sym_identifier, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + ACTIONS(1828), 1, + anon_sym_COLON, + STATE(1334), 1, + sym_parameter, + STATE(1521), 1, + sym__parameters, + STATE(1524), 1, + sym_lambda_parameters, + STATE(1347), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48257] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1830), 1, + sym_identifier, + ACTIONS(1832), 1, + anon_sym_RBRACE, + ACTIONS(1834), 1, + anon_sym_STAR_STAR, + STATE(975), 1, + sym_concatenated_string, + STATE(1168), 1, + sym_string, + STATE(1359), 1, + sym_match_double_star_pattern, + STATE(1362), 1, + sym_match_key_value_pattern, + STATE(1486), 2, + sym_match_literal_pattern, + sym_match_value_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + [48303] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1830), 1, + sym_identifier, + ACTIONS(1834), 1, + anon_sym_STAR_STAR, + ACTIONS(1836), 1, + anon_sym_RBRACE, + STATE(975), 1, + sym_concatenated_string, + STATE(1168), 1, + sym_string, + STATE(1218), 1, + sym_match_key_value_pattern, + STATE(1368), 1, + sym_match_double_star_pattern, + STATE(1486), 2, + sym_match_literal_pattern, + sym_match_value_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + [48349] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + ACTIONS(1838), 1, + sym_identifier, + ACTIONS(1840), 1, + anon_sym_RPAREN, + STATE(1229), 1, + sym_parameter, + STATE(1455), 1, + sym__parameters, + STATE(1267), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48389] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1830), 1, + sym_identifier, + ACTIONS(1834), 1, + anon_sym_STAR_STAR, + ACTIONS(1842), 1, + anon_sym_RBRACE, + STATE(975), 1, + sym_concatenated_string, + STATE(1168), 1, + sym_string, + STATE(1362), 1, + sym_match_key_value_pattern, + STATE(1401), 1, + sym_match_double_star_pattern, + STATE(1486), 2, + sym_match_literal_pattern, + sym_match_value_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + [48435] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + ACTIONS(1838), 1, + sym_identifier, + ACTIONS(1844), 1, + anon_sym_RPAREN, + STATE(1201), 1, + sym_parameter, + STATE(1267), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48472] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1802), 1, + sym_identifier, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + ACTIONS(1846), 1, + anon_sym_COLON, + STATE(1201), 1, + sym_parameter, + STATE(1347), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48509] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1822), 1, + anon_sym_COLON, + ACTIONS(1824), 1, + anon_sym_EQ, + ACTIONS(1826), 13, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_AT_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_GT_GT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [48534] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1802), 1, + sym_identifier, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + ACTIONS(1844), 1, + anon_sym_COLON, + STATE(1201), 1, + sym_parameter, + STATE(1347), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48571] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + ACTIONS(1838), 1, + sym_identifier, + ACTIONS(1846), 1, + anon_sym_RPAREN, + STATE(1201), 1, + sym_parameter, + STATE(1267), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48608] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1495), 1, + anon_sym_as, + ACTIONS(1479), 13, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + anon_sym_and, + anon_sym_or, + sym_type_conversion, + [48630] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1850), 1, + anon_sym_as, + ACTIONS(1848), 13, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + anon_sym_and, + anon_sym_or, + sym_type_conversion, + [48652] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1802), 1, + sym_identifier, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + STATE(1201), 1, + sym_parameter, + STATE(1347), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48686] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1804), 1, + anon_sym_LPAREN, + ACTIONS(1806), 1, + anon_sym_STAR, + ACTIONS(1810), 1, + anon_sym_STAR_STAR, + ACTIONS(1812), 1, + anon_sym_SLASH, + ACTIONS(1838), 1, + sym_identifier, + STATE(1201), 1, + sym_parameter, + STATE(1267), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1333), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [48720] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1854), 1, + anon_sym_as, + ACTIONS(1852), 13, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + anon_sym_and, + anon_sym_or, + sym_type_conversion, + [48742] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1687), 1, + anon_sym_DASH, + ACTIONS(1695), 1, + sym_integer, + ACTIONS(1697), 1, + sym_float, + ACTIONS(1830), 1, + sym_identifier, + STATE(975), 1, + sym_concatenated_string, + STATE(1168), 1, + sym_string, + STATE(1362), 1, + sym_match_key_value_pattern, + STATE(1486), 2, + sym_match_literal_pattern, + sym_match_value_pattern, + ACTIONS(1699), 3, + sym_true, + sym_false, + sym_none, + [48779] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1858), 1, + anon_sym_DOT, + STATE(906), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(1856), 10, + anon_sym_import, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [48801] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1865), 1, + anon_sym_COLON, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1871), 1, + anon_sym_RBRACE, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + STATE(956), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1438), 1, + sym__comprehension_clauses, + [48838] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1877), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_else, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [48861] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1887), 1, + anon_sym_as, + ACTIONS(1885), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [48886] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1889), 1, + anon_sym_DOT, + ACTIONS(1891), 1, + anon_sym_LPAREN, + STATE(906), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(1893), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [48909] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1865), 1, + anon_sym_COLON, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1871), 1, + anon_sym_RBRACE, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + STATE(956), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1405), 1, + sym__comprehension_clauses, + [48946] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1897), 1, + anon_sym_as, + ACTIONS(1895), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [48971] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(646), 1, + sym__string_start, + STATE(678), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1899), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [48992] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1903), 1, + anon_sym_as, + ACTIONS(1901), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [49015] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1905), 1, + anon_sym_RPAREN, + ACTIONS(1907), 1, + anon_sym_COMMA, + ACTIONS(1910), 1, + anon_sym_as, + STATE(956), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1464), 1, + sym__comprehension_clauses, + [49052] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1912), 9, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49073] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1856), 11, + anon_sym_import, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [49090] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1865), 1, + anon_sym_COLON, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1871), 1, + anon_sym_RBRACE, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + STATE(956), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1410), 1, + sym__comprehension_clauses, + [49127] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1885), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_else, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49150] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1912), 10, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + anon_sym_or, + sym_type_conversion, + [49169] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1901), 9, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49190] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1914), 1, + anon_sym_as, + ACTIONS(1912), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [49213] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1916), 1, + anon_sym_as, + ACTIONS(1877), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [49238] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1895), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_else, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49261] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1889), 1, + anon_sym_DOT, + ACTIONS(1918), 1, + anon_sym_LPAREN, + STATE(910), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(1920), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [49284] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1922), 9, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_else, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49305] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1914), 1, + anon_sym_as, + ACTIONS(1912), 9, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_or, + [49326] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1924), 1, + anon_sym_as, + ACTIONS(1922), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [49349] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1928), 1, + anon_sym_COMMA, + STATE(964), 1, + aux_sym_expression_list_repeat1, + ACTIONS(1926), 6, + anon_sym_RPAREN, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49376] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1930), 1, + anon_sym_RPAREN, + STATE(956), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1442), 1, + sym__comprehension_clauses, + [49410] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1932), 1, + anon_sym_RPAREN, + STATE(956), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1417), 1, + sym__comprehension_clauses, + [49444] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1871), 1, + anon_sym_RBRACK, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + STATE(956), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1429), 1, + sym__comprehension_clauses, + [49478] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1934), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49500] = 9, + ACTIONS(1936), 1, + anon_sym_LBRACE2, + ACTIONS(1940), 1, + sym__not_escape_sequence, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(1944), 1, + sym__string_end, + STATE(936), 1, + aux_sym_string_repeat1, + STATE(1031), 1, + aux_sym_string_content_repeat1, + STATE(1072), 1, + sym_string_content, + STATE(1076), 1, + sym_interpolation, + ACTIONS(1938), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49530] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1871), 1, + anon_sym_RBRACK, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + STATE(956), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1407), 1, + sym__comprehension_clauses, + [49564] = 9, + ACTIONS(1936), 1, + anon_sym_LBRACE2, + ACTIONS(1940), 1, + sym__not_escape_sequence, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(1946), 1, + sym__string_end, + STATE(937), 1, + aux_sym_string_repeat1, + STATE(1031), 1, + aux_sym_string_content_repeat1, + STATE(1072), 1, + sym_string_content, + STATE(1076), 1, + sym_interpolation, + ACTIONS(1938), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49594] = 9, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(1948), 1, + anon_sym_LBRACE2, + ACTIONS(1954), 1, + sym__not_escape_sequence, + ACTIONS(1957), 1, + sym__string_end, + STATE(937), 1, + aux_sym_string_repeat1, + STATE(1031), 1, + aux_sym_string_content_repeat1, + STATE(1072), 1, + sym_string_content, + STATE(1076), 1, + sym_interpolation, + ACTIONS(1951), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49624] = 9, + ACTIONS(1936), 1, + anon_sym_LBRACE2, + ACTIONS(1940), 1, + sym__not_escape_sequence, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(1959), 1, + sym__string_end, + STATE(937), 1, + aux_sym_string_repeat1, + STATE(1031), 1, + aux_sym_string_content_repeat1, + STATE(1072), 1, + sym_string_content, + STATE(1076), 1, + sym_interpolation, + ACTIONS(1938), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49654] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1961), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49676] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1963), 1, + anon_sym_RPAREN, + ACTIONS(1965), 1, + anon_sym_COMMA, + STATE(956), 1, + sym_for_in_clause, + STATE(1228), 1, + aux_sym_argument_list_repeat1, + STATE(1417), 1, + sym__comprehension_clauses, + [49710] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1871), 1, + anon_sym_RBRACK, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + STATE(956), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1437), 1, + sym__comprehension_clauses, + [49744] = 9, + ACTIONS(1936), 1, + anon_sym_LBRACE2, + ACTIONS(1940), 1, + sym__not_escape_sequence, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(1967), 1, + sym__string_end, + STATE(937), 1, + aux_sym_string_repeat1, + STATE(1031), 1, + aux_sym_string_content_repeat1, + STATE(1072), 1, + sym_string_content, + STATE(1076), 1, + sym_interpolation, + ACTIONS(1938), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49774] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1971), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(1969), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [49792] = 9, + ACTIONS(1936), 1, + anon_sym_LBRACE2, + ACTIONS(1940), 1, + sym__not_escape_sequence, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(1973), 1, + sym__string_end, + STATE(942), 1, + aux_sym_string_repeat1, + STATE(1031), 1, + aux_sym_string_content_repeat1, + STATE(1072), 1, + sym_string_content, + STATE(1076), 1, + sym_interpolation, + ACTIONS(1938), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49822] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1905), 1, + anon_sym_RPAREN, + STATE(956), 1, + sym_for_in_clause, + STATE(1111), 1, + aux_sym__collection_elements_repeat1, + STATE(1464), 1, + sym__comprehension_clauses, + [49856] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1975), 1, + anon_sym_RPAREN, + ACTIONS(1977), 1, + anon_sym_COMMA, + STATE(956), 1, + sym_for_in_clause, + STATE(1273), 1, + aux_sym_argument_list_repeat1, + STATE(1464), 1, + sym__comprehension_clauses, + [49890] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1979), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49912] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1981), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49934] = 9, + ACTIONS(1936), 1, + anon_sym_LBRACE2, + ACTIONS(1940), 1, + sym__not_escape_sequence, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(1983), 1, + sym__string_end, + STATE(937), 1, + aux_sym_string_repeat1, + STATE(1031), 1, + aux_sym_string_content_repeat1, + STATE(1072), 1, + sym_string_content, + STATE(1076), 1, + sym_interpolation, + ACTIONS(1938), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49964] = 9, + ACTIONS(1936), 1, + anon_sym_LBRACE2, + ACTIONS(1940), 1, + sym__not_escape_sequence, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(1985), 1, + sym__string_end, + STATE(949), 1, + aux_sym_string_repeat1, + STATE(1031), 1, + aux_sym_string_content_repeat1, + STATE(1072), 1, + sym_string_content, + STATE(1076), 1, + sym_interpolation, + ACTIONS(1938), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [49994] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1989), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(1987), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50012] = 9, + ACTIONS(1936), 1, + anon_sym_LBRACE2, + ACTIONS(1940), 1, + sym__not_escape_sequence, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(1991), 1, + sym__string_end, + STATE(938), 1, + aux_sym_string_repeat1, + STATE(1031), 1, + aux_sym_string_content_repeat1, + STATE(1072), 1, + sym_string_content, + STATE(1076), 1, + sym_interpolation, + ACTIONS(1938), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [50042] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(1993), 1, + anon_sym_RPAREN, + ACTIONS(1995), 1, + anon_sym_COMMA, + STATE(956), 1, + sym_for_in_clause, + STATE(1280), 1, + aux_sym_argument_list_repeat1, + STATE(1442), 1, + sym__comprehension_clauses, + [50076] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1999), 1, + anon_sym_PIPE, + STATE(954), 1, + aux_sym_match_or_pattern_repeat1, + ACTIONS(1997), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50095] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2004), 1, + anon_sym_if, + ACTIONS(2007), 1, + anon_sym_async, + ACTIONS(2010), 1, + anon_sym_for, + ACTIONS(2002), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + STATE(955), 3, + sym_for_in_clause, + sym_if_clause, + aux_sym__comprehension_clauses_repeat1, + [50118] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(2015), 1, + anon_sym_if, + ACTIONS(2013), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + STATE(959), 3, + sym_for_in_clause, + sym_if_clause, + aux_sym__comprehension_clauses_repeat1, + [50141] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2019), 1, + anon_sym_PIPE, + STATE(961), 1, + aux_sym_match_or_pattern_repeat1, + ACTIONS(2017), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50160] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(2021), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50179] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(2015), 1, + anon_sym_if, + ACTIONS(2023), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + STATE(955), 3, + sym_for_in_clause, + sym_if_clause, + aux_sym__comprehension_clauses_repeat1, + [50202] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1928), 1, + anon_sym_COMMA, + STATE(964), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2025), 4, + anon_sym_COLON, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [50227] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2019), 1, + anon_sym_PIPE, + STATE(954), 1, + aux_sym_match_or_pattern_repeat1, + ACTIONS(2027), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50246] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(2021), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50265] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(2021), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50284] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2031), 1, + anon_sym_COMMA, + STATE(1005), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2029), 6, + anon_sym_RPAREN, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [50302] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(854), 1, + anon_sym_except_STAR, + ACTIONS(862), 1, + anon_sym_except, + ACTIONS(2033), 1, + anon_sym_finally, + STATE(568), 1, + sym_finally_clause, + STATE(229), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + STATE(241), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + [50326] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2035), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50340] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1852), 8, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_EQ, + anon_sym_and, + anon_sym_or, + sym__semicolon, + [50354] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2037), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50368] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2039), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50382] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2041), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50396] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2045), 1, + anon_sym_PIPE, + ACTIONS(2043), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50412] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2047), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50426] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2049), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50440] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(1901), 6, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_EQ, + sym__semicolon, + [50458] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1899), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50472] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1848), 8, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_EQ, + anon_sym_and, + anon_sym_or, + sym__semicolon, + [50486] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2055), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50500] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2059), 1, + anon_sym_COMMA, + STATE(1012), 1, + aux_sym_for_in_clause_repeat1, + ACTIONS(2057), 6, + anon_sym_RPAREN, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50518] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2063), 1, + anon_sym_COMMA, + STATE(995), 1, + aux_sym_for_in_clause_repeat1, + ACTIONS(2061), 6, + anon_sym_RPAREN, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50536] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(1922), 6, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_EQ, + sym__semicolon, + [50554] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2065), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50568] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2067), 1, + anon_sym_from, + ACTIONS(2069), 1, + anon_sym_COMMA, + ACTIONS(2071), 1, + anon_sym_if, + STATE(1092), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2073), 2, + sym__newline, + sym__semicolon, + [50594] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(854), 1, + anon_sym_except_STAR, + ACTIONS(862), 1, + anon_sym_except, + ACTIONS(2033), 1, + anon_sym_finally, + STATE(516), 1, + sym_finally_clause, + STATE(232), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + STATE(234), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + [50618] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1997), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50632] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2075), 1, + anon_sym_COMMA, + STATE(1005), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2029), 6, + anon_sym_RPAREN, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [50650] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2077), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50664] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2079), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50678] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2081), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50692] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2083), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50706] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2085), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50720] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(848), 1, + anon_sym_except, + ACTIONS(864), 1, + anon_sym_except_STAR, + ACTIONS(2087), 1, + anon_sym_finally, + STATE(514), 1, + sym_finally_clause, + STATE(228), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + STATE(240), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + [50744] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(1885), 5, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_EQ, + sym__semicolon, + [50764] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2089), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50778] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(2091), 6, + anon_sym_RPAREN, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50796] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2095), 1, + anon_sym_COMMA, + STATE(1012), 1, + aux_sym_for_in_clause_repeat1, + ACTIONS(2093), 6, + anon_sym_RPAREN, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50814] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(67), 1, + anon_sym_AT, + ACTIONS(2097), 1, + anon_sym_async, + ACTIONS(2099), 1, + anon_sym_def, + ACTIONS(2101), 1, + anon_sym_class, + STATE(584), 2, + sym_function_definition, + sym_class_definition, + STATE(1062), 2, + sym_decorator, + aux_sym_decorated_definition_repeat1, + [50838] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(1895), 5, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_EQ, + sym__semicolon, + [50858] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2103), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50872] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1889), 1, + anon_sym_DOT, + ACTIONS(1918), 1, + anon_sym_LPAREN, + ACTIONS(2105), 1, + anon_sym_EQ, + STATE(910), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(1920), 4, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_PIPE, + [50894] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(1912), 6, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_EQ, + sym__semicolon, + [50912] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(1912), 7, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_EQ, + anon_sym_or, + sym__semicolon, + [50928] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(67), 1, + anon_sym_AT, + ACTIONS(2107), 1, + anon_sym_async, + ACTIONS(2109), 1, + anon_sym_def, + ACTIONS(2111), 1, + anon_sym_class, + STATE(499), 2, + sym_function_definition, + sym_class_definition, + STATE(1062), 2, + sym_decorator, + aux_sym_decorated_definition_repeat1, + [50952] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(848), 1, + anon_sym_except, + ACTIONS(864), 1, + anon_sym_except_STAR, + ACTIONS(2087), 1, + anon_sym_finally, + STATE(507), 1, + sym_finally_clause, + STATE(237), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + STATE(238), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + [50976] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2113), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [50990] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2117), 1, + anon_sym_COMMA, + STATE(1005), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2115), 6, + anon_sym_RPAREN, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [51008] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2120), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51022] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(1877), 5, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_EQ, + sym__semicolon, + [51042] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2122), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51056] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1479), 8, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_EQ, + anon_sym_and, + anon_sym_or, + sym__semicolon, + [51070] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2124), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51084] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2126), 8, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51098] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2130), 1, + anon_sym_COMMA, + STATE(1012), 1, + aux_sym_for_in_clause_repeat1, + ACTIONS(2128), 6, + anon_sym_RPAREN, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51116] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2135), 1, + anon_sym_COMMA, + STATE(978), 1, + aux_sym_for_in_clause_repeat1, + ACTIONS(2133), 6, + anon_sym_RPAREN, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51134] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2069), 1, + anon_sym_COMMA, + ACTIONS(2071), 1, + anon_sym_if, + STATE(1092), 1, + aux_sym_expression_list_repeat1, + ACTIONS(1926), 2, + sym__newline, + sym__semicolon, + [51157] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1479), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_and, + anon_sym_or, + [51170] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2137), 1, + sym_identifier, + ACTIONS(2139), 1, + anon_sym_DOT, + ACTIONS(2141), 1, + anon_sym___future__, + STATE(1144), 1, + aux_sym_import_prefix_repeat1, + STATE(1236), 1, + sym_import_prefix, + STATE(1441), 2, + sym_relative_import, + sym_dotted_name, + [51193] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2143), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51206] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2128), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51219] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2069), 1, + anon_sym_COMMA, + ACTIONS(2071), 1, + anon_sym_if, + STATE(1092), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2145), 2, + sym__newline, + sym__semicolon, + [51242] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2147), 1, + sym_identifier, + ACTIONS(2149), 1, + anon_sym_STAR, + ACTIONS(2151), 1, + anon_sym_STAR_STAR, + STATE(1388), 4, + sym_typevar_parameter, + sym_typevartuple_parameter, + sym_paramspec_parameter, + sym__type_parameter, + [51261] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2153), 1, + anon_sym_COMMA, + ACTIONS(2155), 1, + anon_sym_COLON, + ACTIONS(2157), 1, + anon_sym_RBRACK, + STATE(1203), 1, + aux_sym_subscript_repeat1, + [51286] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2159), 4, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_EQ, + [51305] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1934), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [51318] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2163), 1, + anon_sym_as, + ACTIONS(2161), 6, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51333] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(2167), 1, + anon_sym_or, + ACTIONS(1922), 5, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + [51350] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2169), 1, + anon_sym_COMMA, + STATE(1137), 1, + aux_sym_assert_statement_repeat1, + ACTIONS(2171), 2, + sym__newline, + sym__semicolon, + [51373] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(2167), 1, + anon_sym_or, + ACTIONS(2173), 1, + anon_sym_if, + ACTIONS(1895), 4, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_COLON, + [51392] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(2167), 1, + anon_sym_or, + ACTIONS(1901), 5, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + [51409] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(1912), 6, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_or, + [51424] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(2167), 1, + anon_sym_or, + ACTIONS(1912), 5, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + [51441] = 6, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2175), 1, + anon_sym_LBRACE2, + ACTIONS(2179), 1, + sym__not_escape_sequence, + ACTIONS(2181), 1, + sym__string_end, + STATE(1055), 1, + aux_sym_string_content_repeat1, + ACTIONS(2177), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [51462] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(2167), 1, + anon_sym_or, + ACTIONS(2173), 1, + anon_sym_if, + ACTIONS(1877), 4, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_COLON, + [51481] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2183), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51494] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2069), 1, + anon_sym_COMMA, + ACTIONS(2071), 1, + anon_sym_if, + STATE(1092), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2185), 2, + sym__newline, + sym__semicolon, + [51517] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(2167), 1, + anon_sym_or, + ACTIONS(2173), 1, + anon_sym_if, + ACTIONS(1885), 4, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_COLON, + [51536] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(1934), 4, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + sym__semicolon, + [51555] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2147), 1, + sym_identifier, + ACTIONS(2149), 1, + anon_sym_STAR, + ACTIONS(2151), 1, + anon_sym_STAR_STAR, + STATE(1227), 4, + sym_typevar_parameter, + sym_typevartuple_parameter, + sym_paramspec_parameter, + sym__type_parameter, + [51574] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(2187), 1, + anon_sym_COMMA, + ACTIONS(2189), 1, + anon_sym_RBRACE, + STATE(956), 1, + sym_for_in_clause, + STATE(1247), 1, + aux_sym_dictionary_repeat1, + STATE(1433), 1, + sym__comprehension_clauses, + [51599] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1863), 1, + anon_sym_if, + ACTIONS(1873), 1, + anon_sym_and, + ACTIONS(1875), 1, + anon_sym_or, + ACTIONS(2191), 4, + anon_sym_COMMA, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACE, + [51618] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2155), 1, + anon_sym_COLON, + ACTIONS(2193), 1, + anon_sym_COMMA, + ACTIONS(2195), 1, + anon_sym_RBRACK, + STATE(1282), 1, + aux_sym_subscript_repeat1, + [51643] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1926), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [51656] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1848), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_and, + anon_sym_or, + [51669] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2197), 1, + anon_sym_COMMA, + STATE(1172), 1, + aux_sym_print_statement_repeat1, + ACTIONS(2199), 2, + sym__newline, + sym__semicolon, + [51692] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2169), 1, + anon_sym_COMMA, + STATE(1174), 1, + aux_sym_assert_statement_repeat1, + ACTIONS(2201), 2, + sym__newline, + sym__semicolon, + [51715] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2069), 1, + anon_sym_COMMA, + ACTIONS(2071), 1, + anon_sym_if, + STATE(1092), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2203), 2, + sym__newline, + sym__semicolon, + [51738] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2069), 1, + anon_sym_COMMA, + ACTIONS(2071), 1, + anon_sym_if, + STATE(1092), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2205), 2, + sym__newline, + sym__semicolon, + [51761] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2155), 1, + anon_sym_COLON, + ACTIONS(2207), 1, + anon_sym_COMMA, + ACTIONS(2209), 1, + anon_sym_RBRACK, + STATE(1272), 1, + aux_sym_subscript_repeat1, + [51786] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(1979), 4, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + sym__semicolon, + [51805] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(2211), 1, + anon_sym_COMMA, + ACTIONS(2213), 1, + anon_sym_RBRACE, + STATE(956), 1, + sym_for_in_clause, + STATE(1300), 1, + aux_sym_dictionary_repeat1, + STATE(1411), 1, + sym__comprehension_clauses, + [51830] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(2167), 1, + anon_sym_or, + ACTIONS(2173), 1, + anon_sym_if, + ACTIONS(2217), 1, + anon_sym_as, + ACTIONS(2215), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [51851] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1852), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_and, + anon_sym_or, + [51864] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1867), 1, + anon_sym_async, + ACTIONS(1869), 1, + anon_sym_for, + ACTIONS(2219), 1, + anon_sym_COMMA, + ACTIONS(2221), 1, + anon_sym_RBRACE, + STATE(956), 1, + sym_for_in_clause, + STATE(1234), 1, + aux_sym_dictionary_repeat1, + STATE(1439), 1, + sym__comprehension_clauses, + [51889] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2223), 4, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51908] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(1981), 4, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + sym__semicolon, + [51927] = 6, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2225), 1, + anon_sym_LBRACE2, + ACTIONS(2230), 1, + sym__not_escape_sequence, + ACTIONS(2233), 1, + sym__string_end, + STATE(1055), 1, + aux_sym_string_content_repeat1, + ACTIONS(2227), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [51948] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2235), 1, + sym_identifier, + ACTIONS(2237), 1, + anon_sym_LPAREN, + ACTIONS(2239), 1, + anon_sym_STAR, + STATE(1109), 1, + sym_dotted_name, + STATE(1143), 1, + sym_aliased_import, + STATE(1393), 1, + sym_wildcard_import, + STATE(1395), 1, + sym__import_list, + [51973] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2241), 1, + anon_sym_DOT, + STATE(1057), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(1856), 4, + sym__newline, + anon_sym_COMMA, + anon_sym_as, + sym__semicolon, + [51989] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1889), 1, + anon_sym_DOT, + STATE(906), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(2244), 4, + anon_sym_import, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + [52005] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1928), 1, + anon_sym_COMMA, + ACTIONS(2246), 1, + anon_sym_COLON, + STATE(964), 1, + aux_sym_expression_list_repeat1, + [52027] = 3, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2248), 2, + anon_sym_LBRACE2, + sym__not_escape_sequence, + ACTIONS(2250), 4, + sym__string_content, + sym__string_end, + sym__escape_interpolation, + sym_escape_sequence, + [52041] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1889), 1, + anon_sym_DOT, + STATE(1058), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(2252), 4, + anon_sym_import, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + [52057] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2256), 1, + anon_sym_AT, + STATE(1062), 2, + sym_decorator, + aux_sym_decorated_definition_repeat1, + ACTIONS(2254), 3, + anon_sym_async, + anon_sym_def, + anon_sym_class, + [52073] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(2167), 1, + anon_sym_or, + ACTIONS(2173), 1, + anon_sym_if, + ACTIONS(2261), 1, + anon_sym_COLON, + ACTIONS(2259), 2, + anon_sym_COMMA, + anon_sym_as, + [52093] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2265), 1, + anon_sym_COLON, + ACTIONS(2263), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [52113] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2267), 3, + sym__newline, + anon_sym_COMMA, + sym__semicolon, + [52131] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2269), 3, + sym__newline, + anon_sym_COMMA, + sym__semicolon, + [52149] = 3, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2271), 2, + anon_sym_LBRACE2, + sym__not_escape_sequence, + ACTIONS(2273), 4, + sym__string_content, + sym__string_end, + sym__escape_interpolation, + sym_escape_sequence, + [52163] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2275), 1, + anon_sym_DOT, + STATE(1057), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(2244), 4, + sym__newline, + anon_sym_COMMA, + anon_sym_as, + sym__semicolon, + [52179] = 3, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2277), 2, + anon_sym_LBRACE2, + sym__not_escape_sequence, + ACTIONS(2279), 4, + sym__string_content, + sym__string_end, + sym__escape_interpolation, + sym_escape_sequence, + [52193] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1928), 1, + anon_sym_COMMA, + ACTIONS(2281), 1, + anon_sym_COLON, + STATE(964), 1, + aux_sym_expression_list_repeat1, + [52215] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1993), 1, + anon_sym_RPAREN, + ACTIONS(1995), 1, + anon_sym_COMMA, + STATE(1280), 1, + aux_sym_argument_list_repeat1, + [52237] = 3, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2283), 2, + anon_sym_LBRACE2, + sym__not_escape_sequence, + ACTIONS(2285), 4, + sym__string_content, + sym__string_end, + sym__escape_interpolation, + sym_escape_sequence, + [52251] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2287), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [52269] = 3, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2289), 2, + anon_sym_LBRACE2, + sym__not_escape_sequence, + ACTIONS(2291), 4, + sym__string_content, + sym__string_end, + sym__escape_interpolation, + sym_escape_sequence, + [52283] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1928), 1, + anon_sym_COMMA, + ACTIONS(2293), 1, + anon_sym_COLON, + STATE(964), 1, + aux_sym_expression_list_repeat1, + [52305] = 3, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2295), 2, + anon_sym_LBRACE2, + sym__not_escape_sequence, + ACTIONS(2297), 4, + sym__string_content, + sym__string_end, + sym__escape_interpolation, + sym_escape_sequence, + [52319] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2301), 1, + anon_sym_COMMA, + STATE(1077), 1, + aux_sym_open_sequence_match_pattern_repeat1, + ACTIONS(2299), 4, + anon_sym_RPAREN, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + [52335] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2304), 3, + sym__newline, + anon_sym_COMMA, + sym__semicolon, + [52353] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1928), 1, + anon_sym_COMMA, + ACTIONS(2306), 1, + anon_sym_COLON, + STATE(964), 1, + aux_sym_expression_list_repeat1, + [52375] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1928), 1, + anon_sym_COMMA, + ACTIONS(2308), 1, + anon_sym_COLON, + STATE(964), 1, + aux_sym_expression_list_repeat1, + [52397] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(2167), 1, + anon_sym_or, + ACTIONS(2173), 1, + anon_sym_if, + ACTIONS(2312), 1, + anon_sym_COLON, + ACTIONS(2310), 2, + anon_sym_COMMA, + anon_sym_as, + [52417] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2159), 3, + sym__newline, + anon_sym_EQ, + sym__semicolon, + [52435] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2316), 1, + anon_sym_COLON, + ACTIONS(2314), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [52455] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2318), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [52473] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(1928), 1, + anon_sym_COMMA, + ACTIONS(2320), 1, + anon_sym_COLON, + STATE(964), 1, + aux_sym_expression_list_repeat1, + [52495] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2155), 1, + anon_sym_COLON, + ACTIONS(2322), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [52515] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1920), 6, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + [52527] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2275), 1, + anon_sym_DOT, + STATE(1068), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(2252), 4, + sym__newline, + anon_sym_COMMA, + anon_sym_as, + sym__semicolon, + [52543] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2324), 6, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + [52555] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2326), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [52572] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2328), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [52589] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2330), 1, + anon_sym_COMMA, + STATE(1096), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2029), 3, + sym__newline, + anon_sym_from, + sym__semicolon, + [52604] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2235), 1, + sym_identifier, + STATE(1183), 1, + sym_dotted_name, + STATE(1198), 1, + sym_aliased_import, + ACTIONS(2332), 2, + sym__newline, + sym__semicolon, + [52621] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(1961), 2, + sym__newline, + sym__semicolon, + [52638] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2235), 1, + sym_identifier, + STATE(1183), 1, + sym_dotted_name, + STATE(1198), 1, + sym_aliased_import, + ACTIONS(2332), 2, + sym__newline, + sym__semicolon, + [52655] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2334), 1, + anon_sym_COMMA, + STATE(1096), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2115), 3, + sym__newline, + anon_sym_from, + sym__semicolon, + [52670] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2337), 1, + anon_sym_COLON, + ACTIONS(2339), 1, + anon_sym_RBRACE, + ACTIONS(2341), 1, + anon_sym_EQ, + ACTIONS(2343), 1, + sym_type_conversion, + STATE(1425), 1, + sym_format_specifier, + [52689] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2345), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [52706] = 6, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2347), 1, + anon_sym_RBRACE, + ACTIONS(2349), 1, + anon_sym_LBRACE2, + ACTIONS(2351), 1, + aux_sym_format_specifier_token1, + STATE(1117), 1, + aux_sym_format_specifier_repeat1, + STATE(1269), 1, + sym_interpolation, + [52725] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + STATE(1115), 1, + aux_sym__collection_elements_repeat1, + ACTIONS(1871), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + [52740] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1856), 5, + sym__newline, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_as, + sym__semicolon, + [52751] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2191), 2, + anon_sym_COMMA, + anon_sym_RBRACE, + [52768] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2353), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [52785] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(2167), 1, + anon_sym_or, + ACTIONS(2173), 1, + anon_sym_if, + ACTIONS(2355), 1, + anon_sym_as, + ACTIONS(2357), 1, + anon_sym_COLON, + [52804] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2359), 2, + sym__newline, + sym__semicolon, + [52821] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2299), 5, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + [52832] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2361), 1, + anon_sym_LPAREN, + ACTIONS(2363), 1, + anon_sym_COLON, + ACTIONS(2365), 1, + anon_sym_LBRACK, + STATE(1224), 1, + sym_type_parameters, + STATE(1463), 1, + sym_argument_list, + [52851] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2361), 1, + anon_sym_LPAREN, + ACTIONS(2365), 1, + anon_sym_LBRACK, + ACTIONS(2367), 1, + anon_sym_COLON, + STATE(1210), 1, + sym_type_parameters, + STATE(1499), 1, + sym_argument_list, + [52870] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2369), 1, + anon_sym_COMMA, + ACTIONS(2371), 1, + anon_sym_as, + STATE(1164), 1, + aux_sym__import_list_repeat1, + ACTIONS(2373), 2, + sym__newline, + sym__semicolon, + [52887] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2375), 5, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + [52898] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2379), 1, + anon_sym_COMMA, + STATE(1114), 1, + aux_sym__collection_elements_repeat1, + ACTIONS(2377), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + [52913] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2381), 1, + anon_sym_COMMA, + STATE(1096), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2029), 3, + sym__newline, + anon_sym_from, + sym__semicolon, + [52928] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2383), 2, + sym__newline, + sym__semicolon, + [52945] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2387), 1, + anon_sym_COMMA, + STATE(1114), 1, + aux_sym__collection_elements_repeat1, + ACTIONS(2385), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + [52960] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2390), 1, + anon_sym_COMMA, + STATE(1114), 1, + aux_sym__collection_elements_repeat1, + ACTIONS(2377), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + [52975] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2235), 1, + sym_identifier, + ACTIONS(2392), 1, + anon_sym_LPAREN, + STATE(1109), 1, + sym_dotted_name, + STATE(1143), 1, + sym_aliased_import, + STATE(1385), 1, + sym__import_list, + [52994] = 6, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2394), 1, + anon_sym_RBRACE, + ACTIONS(2396), 1, + anon_sym_LBRACE2, + ACTIONS(2399), 1, + aux_sym_format_specifier_token1, + STATE(1117), 1, + aux_sym_format_specifier_repeat1, + STATE(1269), 1, + sym_interpolation, + [53013] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2235), 1, + sym_identifier, + STATE(1183), 1, + sym_dotted_name, + STATE(1198), 1, + sym_aliased_import, + ACTIONS(2402), 2, + sym__newline, + sym__semicolon, + [53030] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2404), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [53047] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2337), 1, + anon_sym_COLON, + ACTIONS(2406), 1, + anon_sym_RBRACE, + ACTIONS(2408), 1, + anon_sym_EQ, + ACTIONS(2410), 1, + sym_type_conversion, + STATE(1523), 1, + sym_format_specifier, + [53066] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2412), 2, + sym__newline, + sym__semicolon, + [53083] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2414), 2, + sym__newline, + sym__semicolon, + [53100] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2165), 1, + anon_sym_and, + ACTIONS(2167), 1, + anon_sym_or, + ACTIONS(2173), 1, + anon_sym_if, + ACTIONS(2416), 1, + anon_sym_as, + ACTIONS(2418), 1, + anon_sym_COLON, + [53119] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2420), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [53136] = 6, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2349), 1, + anon_sym_LBRACE2, + ACTIONS(2422), 1, + anon_sym_RBRACE, + ACTIONS(2424), 1, + aux_sym_format_specifier_token1, + STATE(1099), 1, + aux_sym_format_specifier_repeat1, + STATE(1269), 1, + sym_interpolation, + [53155] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2426), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [53172] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2428), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [53189] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2365), 1, + anon_sym_LBRACK, + ACTIONS(2430), 1, + anon_sym_LPAREN, + STATE(1370), 1, + sym_type_parameters, + STATE(1371), 1, + sym_parameters, + [53205] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2432), 1, + anon_sym_case, + STATE(562), 1, + sym_cases, + STATE(345), 2, + sym_case_block, + aux_sym_cases_repeat1, + [53219] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2235), 1, + sym_identifier, + STATE(1109), 1, + sym_dotted_name, + STATE(1143), 1, + sym_aliased_import, + STATE(1383), 1, + sym__import_list, + [53235] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2365), 1, + anon_sym_LBRACK, + ACTIONS(2430), 1, + anon_sym_LPAREN, + STATE(1354), 1, + sym_type_parameters, + STATE(1377), 1, + sym_parameters, + [53251] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2365), 1, + anon_sym_LBRACK, + ACTIONS(2430), 1, + anon_sym_LPAREN, + STATE(1356), 1, + sym_type_parameters, + STATE(1378), 1, + sym_parameters, + [53267] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2436), 1, + anon_sym_EQ, + ACTIONS(2434), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [53279] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2438), 1, + anon_sym_COLON, + [53295] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2440), 1, + anon_sym_COLON, + [53311] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2442), 1, + anon_sym_COLON, + [53327] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2169), 1, + anon_sym_COMMA, + STATE(1160), 1, + aux_sym_assert_statement_repeat1, + ACTIONS(2444), 2, + sym__newline, + sym__semicolon, + [53341] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2446), 1, + anon_sym_COMMA, + STATE(1138), 1, + aux_sym_global_statement_repeat1, + ACTIONS(2449), 2, + sym__newline, + sym__semicolon, + [53355] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2453), 1, + anon_sym_COLON, + STATE(1343), 1, + sym__type_bound, + ACTIONS(2451), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [53369] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2455), 1, + anon_sym_COLON, + [53385] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2457), 1, + anon_sym_COLON, + [53401] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2332), 1, + anon_sym_RPAREN, + ACTIONS(2459), 1, + sym_identifier, + STATE(1245), 1, + sym_dotted_name, + STATE(1397), 1, + sym_aliased_import, + [53417] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2369), 1, + anon_sym_COMMA, + STATE(1163), 1, + aux_sym__import_list_repeat1, + ACTIONS(2373), 2, + sym__newline, + sym__semicolon, + [53431] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2463), 1, + anon_sym_DOT, + STATE(1165), 1, + aux_sym_import_prefix_repeat1, + ACTIONS(2461), 2, + anon_sym_import, + sym_identifier, + [53445] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2465), 1, + anon_sym_COLON, + [53461] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2469), 1, + anon_sym_COMMA, + STATE(1167), 1, + aux_sym__patterns_repeat1, + ACTIONS(2467), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + [53475] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2332), 1, + anon_sym_RPAREN, + ACTIONS(2459), 1, + sym_identifier, + STATE(1245), 1, + sym_dotted_name, + STATE(1397), 1, + sym_aliased_import, + [53491] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2471), 1, + anon_sym_COLON, + [53507] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2473), 1, + anon_sym_else, + [53523] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2475), 1, + anon_sym_COMMA, + STATE(1171), 1, + aux_sym_print_statement_repeat1, + ACTIONS(2477), 2, + sym__newline, + sym__semicolon, + [53537] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2479), 1, + anon_sym_COLON, + [53553] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2481), 1, + anon_sym_else, + [53569] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2483), 1, + anon_sym_COLON, + [53585] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2485), 1, + anon_sym_COMMA, + STATE(1192), 1, + aux_sym_global_statement_repeat1, + ACTIONS(2487), 2, + sym__newline, + sym__semicolon, + [53599] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2485), 1, + anon_sym_COMMA, + STATE(1191), 1, + aux_sym_global_statement_repeat1, + ACTIONS(2489), 2, + sym__newline, + sym__semicolon, + [53613] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + anon_sym_and, + ACTIONS(2053), 1, + anon_sym_or, + ACTIONS(2071), 1, + anon_sym_if, + ACTIONS(2491), 1, + sym__newline, + [53629] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2493), 1, + anon_sym_COLON, + [53645] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2495), 1, + anon_sym_COLON, + [53661] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2497), 1, + anon_sym_COLON, + [53677] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2499), 1, + anon_sym_COMMA, + STATE(1160), 1, + aux_sym_assert_statement_repeat1, + ACTIONS(2267), 2, + sym__newline, + sym__semicolon, + [53691] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2373), 1, + anon_sym_RPAREN, + ACTIONS(2502), 1, + anon_sym_COMMA, + ACTIONS(2504), 1, + anon_sym_as, + STATE(1205), 1, + aux_sym__import_list_repeat1, + [53707] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2506), 1, + anon_sym_COMMA, + STATE(1162), 1, + aux_sym_print_statement_repeat1, + ACTIONS(2509), 2, + sym__newline, + sym__semicolon, + [53721] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2511), 1, + anon_sym_COMMA, + STATE(1189), 1, + aux_sym__import_list_repeat1, + ACTIONS(2513), 2, + sym__newline, + sym__semicolon, + [53735] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2515), 1, + anon_sym_COMMA, + STATE(1189), 1, + aux_sym__import_list_repeat1, + ACTIONS(2513), 2, + sym__newline, + sym__semicolon, + [53749] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2519), 1, + anon_sym_DOT, + STATE(1165), 1, + aux_sym_import_prefix_repeat1, + ACTIONS(2517), 2, + anon_sym_import, + sym_identifier, + [53763] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2223), 4, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_RBRACE, + [53773] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2524), 1, + anon_sym_COMMA, + STATE(872), 1, + aux_sym__patterns_repeat1, + ACTIONS(2522), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + [53787] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(315), 1, + sym__string_start, + ACTIONS(1899), 1, + anon_sym_COLON, + STATE(598), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + [53801] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2526), 1, + anon_sym_else, + [53817] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2528), 4, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_RBRACE, + [53827] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2530), 1, + anon_sym_COMMA, + STATE(1162), 1, + aux_sym_print_statement_repeat1, + ACTIONS(2532), 2, + sym__newline, + sym__semicolon, + [53841] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2534), 1, + anon_sym_COMMA, + STATE(1162), 1, + aux_sym_print_statement_repeat1, + ACTIONS(2536), 2, + sym__newline, + sym__semicolon, + [53855] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2337), 1, + anon_sym_COLON, + ACTIONS(2538), 1, + anon_sym_RBRACE, + ACTIONS(2540), 1, + sym_type_conversion, + STATE(1479), 1, + sym_format_specifier, + [53871] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2169), 1, + anon_sym_COMMA, + STATE(1160), 1, + aux_sym_assert_statement_repeat1, + ACTIONS(2542), 2, + sym__newline, + sym__semicolon, + [53885] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2544), 4, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_RBRACE, + [53895] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2365), 1, + anon_sym_LBRACK, + ACTIONS(2430), 1, + anon_sym_LPAREN, + STATE(1358), 1, + sym_type_parameters, + STATE(1363), 1, + sym_parameters, + [53911] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2548), 1, + anon_sym_COLON, + ACTIONS(2550), 1, + anon_sym_EQ, + ACTIONS(2546), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [53925] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2554), 1, + anon_sym_COMMA, + STATE(1178), 1, + aux_sym_with_clause_repeat1, + ACTIONS(2552), 2, + anon_sym_RPAREN, + anon_sym_COLON, + [53939] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2557), 1, + anon_sym_case, + STATE(541), 1, + sym_cases, + STATE(380), 2, + sym_case_block, + aux_sym_cases_repeat1, + [53953] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2557), 1, + anon_sym_case, + STATE(543), 1, + sym_cases, + STATE(380), 2, + sym_case_block, + aux_sym_cases_repeat1, + [53967] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2337), 1, + anon_sym_COLON, + ACTIONS(2559), 1, + anon_sym_RBRACE, + ACTIONS(2561), 1, + sym_type_conversion, + STATE(1420), 1, + sym_format_specifier, + [53983] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2402), 1, + anon_sym_RPAREN, + ACTIONS(2459), 1, + sym_identifier, + STATE(1245), 1, + sym_dotted_name, + STATE(1397), 1, + sym_aliased_import, + [53999] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2371), 1, + anon_sym_as, + ACTIONS(2563), 3, + sym__newline, + anon_sym_COMMA, + sym__semicolon, + [54011] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2432), 1, + anon_sym_case, + STATE(560), 1, + sym_cases, + STATE(345), 2, + sym_case_block, + aux_sym_cases_repeat1, + [54025] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2565), 4, + anon_sym_async, + anon_sym_def, + anon_sym_class, + anon_sym_AT, + [54035] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_if, + ACTIONS(1881), 1, + anon_sym_and, + ACTIONS(1883), 1, + anon_sym_or, + ACTIONS(2567), 1, + anon_sym_else, + [54051] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1934), 4, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + sym__semicolon, + [54061] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2459), 1, + sym_identifier, + STATE(1161), 1, + sym_dotted_name, + STATE(1321), 1, + sym_aliased_import, + STATE(1415), 1, + sym__import_list, + [54077] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2569), 1, + anon_sym_COMMA, + STATE(1189), 1, + aux_sym__import_list_repeat1, + ACTIONS(2572), 2, + sym__newline, + sym__semicolon, + [54091] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2574), 1, + anon_sym_COMMA, + STATE(1077), 1, + aux_sym_open_sequence_match_pattern_repeat1, + ACTIONS(1703), 2, + anon_sym_if, + anon_sym_COLON, + [54105] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2485), 1, + anon_sym_COMMA, + STATE(1138), 1, + aux_sym_global_statement_repeat1, + ACTIONS(2576), 2, + sym__newline, + sym__semicolon, + [54119] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2485), 1, + anon_sym_COMMA, + STATE(1138), 1, + aux_sym_global_statement_repeat1, + ACTIONS(2578), 2, + sym__newline, + sym__semicolon, + [54133] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2459), 1, + sym_identifier, + STATE(1161), 1, + sym_dotted_name, + STATE(1321), 1, + sym_aliased_import, + STATE(1418), 1, + sym__import_list, + [54149] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(584), 1, + sym__newline, + ACTIONS(2580), 1, + sym__semicolon, + STATE(1200), 1, + aux_sym__simple_statements_repeat1, + [54162] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2582), 1, + sym_identifier, + ACTIONS(2584), 1, + anon_sym_RPAREN, + STATE(1341), 1, + sym_match_keyword_pattern, + [54175] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2586), 1, + anon_sym_COMMA, + ACTIONS(2588), 1, + anon_sym_RBRACK, + STATE(1299), 1, + aux_sym_subscript_repeat1, + [54188] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1820), 1, + anon_sym_COMMA, + ACTIONS(2590), 1, + anon_sym_in, + STATE(884), 1, + aux_sym__patterns_repeat1, + [54201] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2563), 3, + sym__newline, + anon_sym_COMMA, + sym__semicolon, + [54210] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1820), 1, + anon_sym_COMMA, + ACTIONS(2592), 1, + anon_sym_in, + STATE(884), 1, + aux_sym__patterns_repeat1, + [54223] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2594), 1, + sym__semicolon, + ACTIONS(2597), 1, + sym__newline, + STATE(1200), 1, + aux_sym__simple_statements_repeat1, + [54236] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2599), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [54245] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2601), 1, + anon_sym_COMMA, + ACTIONS(2603), 1, + anon_sym_RBRACK, + STATE(1323), 1, + aux_sym_open_sequence_match_pattern_repeat1, + [54258] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2605), 1, + anon_sym_COMMA, + ACTIONS(2607), 1, + anon_sym_RBRACK, + STATE(1299), 1, + aux_sym_subscript_repeat1, + [54271] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1844), 1, + anon_sym_COLON, + ACTIONS(2609), 1, + anon_sym_COMMA, + STATE(1295), 1, + aux_sym__parameters_repeat1, + [54284] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2513), 1, + anon_sym_RPAREN, + ACTIONS(2611), 1, + anon_sym_COMMA, + STATE(1240), 1, + aux_sym__import_list_repeat1, + [54297] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2513), 1, + anon_sym_RPAREN, + ACTIONS(2613), 1, + anon_sym_COMMA, + STATE(1240), 1, + aux_sym__import_list_repeat1, + [54310] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1153), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [54319] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2615), 1, + anon_sym_COMMA, + ACTIONS(2617), 1, + anon_sym_RBRACK, + STATE(1252), 1, + aux_sym_type_parameters_repeat1, + [54332] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2619), 1, + sym__semicolon, + ACTIONS(2621), 1, + sym__newline, + STATE(1194), 1, + aux_sym__simple_statements_repeat1, + [54345] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2361), 1, + anon_sym_LPAREN, + ACTIONS(2623), 1, + anon_sym_COLON, + STATE(1476), 1, + sym_argument_list, + [54358] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2625), 1, + anon_sym_COMMA, + ACTIONS(2628), 1, + anon_sym_RBRACE, + STATE(1211), 1, + aux_sym_match_mapping_pattern_repeat1, + [54371] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2630), 1, + anon_sym_RPAREN, + ACTIONS(2632), 1, + anon_sym_COMMA, + STATE(1213), 1, + aux_sym_match_class_pattern_repeat1, + [54384] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1719), 1, + anon_sym_RPAREN, + ACTIONS(2634), 1, + anon_sym_COMMA, + STATE(1296), 1, + aux_sym_match_class_pattern_repeat1, + [54397] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2636), 1, + sym__semicolon, + ACTIONS(2638), 1, + sym__newline, + STATE(1231), 1, + aux_sym__simple_statements_repeat1, + [54410] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1719), 1, + anon_sym_RPAREN, + ACTIONS(2582), 1, + sym_identifier, + STATE(1341), 1, + sym_match_keyword_pattern, + [54423] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1719), 1, + anon_sym_RPAREN, + ACTIONS(2640), 1, + anon_sym_COMMA, + STATE(1316), 1, + aux_sym_match_class_pattern_repeat2, + [54436] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(972), 1, + anon_sym_except, + ACTIONS(970), 2, + anon_sym_except_STAR, + anon_sym_finally, + [54447] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2642), 1, + anon_sym_COMMA, + ACTIONS(2644), 1, + anon_sym_RBRACE, + STATE(1257), 1, + aux_sym_match_mapping_pattern_repeat1, + [54460] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1930), 1, + anon_sym_RPAREN, + STATE(1292), 1, + aux_sym__collection_elements_repeat1, + [54473] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2153), 1, + anon_sym_COMMA, + ACTIONS(2157), 1, + anon_sym_RBRACK, + STATE(1196), 1, + aux_sym_subscript_repeat1, + [54486] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2646), 1, + anon_sym_if, + ACTIONS(2648), 1, + anon_sym_COLON, + STATE(1481), 1, + sym_guard, + [54499] = 3, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2289), 1, + anon_sym_RBRACE, + ACTIONS(2291), 2, + anon_sym_LBRACE2, + aux_sym_format_specifier_token1, + [54510] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2449), 3, + sym__newline, + anon_sym_COMMA, + sym__semicolon, + [54519] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2361), 1, + anon_sym_LPAREN, + ACTIONS(2650), 1, + anon_sym_COLON, + STATE(1470), 1, + sym_argument_list, + [54532] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2187), 1, + anon_sym_COMMA, + ACTIONS(2189), 1, + anon_sym_RBRACE, + STATE(1243), 1, + aux_sym_dictionary_repeat1, + [54545] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2652), 3, + sym__newline, + anon_sym_COMMA, + sym__semicolon, + [54554] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2615), 1, + anon_sym_COMMA, + ACTIONS(2654), 1, + anon_sym_RBRACK, + STATE(1208), 1, + aux_sym_type_parameters_repeat1, + [54567] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2656), 1, + anon_sym_RPAREN, + ACTIONS(2658), 1, + anon_sym_COMMA, + STATE(1232), 1, + aux_sym_argument_list_repeat1, + [54580] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2660), 1, + anon_sym_RPAREN, + ACTIONS(2662), 1, + anon_sym_COMMA, + STATE(1249), 1, + aux_sym__parameters_repeat1, + [54593] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2664), 1, + anon_sym_RPAREN, + ACTIONS(2666), 1, + anon_sym_COMMA, + STATE(1232), 1, + aux_sym_argument_list_repeat1, + [54606] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(586), 1, + sym__newline, + ACTIONS(2668), 1, + sym__semicolon, + STATE(1200), 1, + aux_sym__simple_statements_repeat1, + [54619] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2670), 1, + anon_sym_RPAREN, + ACTIONS(2672), 1, + anon_sym_COMMA, + STATE(1232), 1, + aux_sym_argument_list_repeat1, + [54632] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1016), 1, + anon_sym_except, + ACTIONS(1018), 2, + anon_sym_except_STAR, + anon_sym_finally, + [54643] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2675), 1, + anon_sym_COMMA, + ACTIONS(2677), 1, + anon_sym_RBRACE, + STATE(1235), 1, + aux_sym_dictionary_repeat1, + [54656] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2679), 1, + anon_sym_COMMA, + ACTIONS(2682), 1, + anon_sym_RBRACE, + STATE(1235), 1, + aux_sym_dictionary_repeat1, + [54669] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2137), 1, + sym_identifier, + ACTIONS(2684), 1, + anon_sym_import, + STATE(1408), 1, + sym_dotted_name, + [54682] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(598), 1, + sym__newline, + ACTIONS(2686), 1, + sym__semicolon, + STATE(1200), 1, + aux_sym__simple_statements_repeat1, + [54695] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2688), 1, + sym__semicolon, + ACTIONS(2690), 1, + sym__newline, + STATE(1237), 1, + aux_sym__simple_statements_repeat1, + [54708] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1963), 1, + anon_sym_RPAREN, + ACTIONS(1965), 1, + anon_sym_COMMA, + STATE(1264), 1, + aux_sym_argument_list_repeat1, + [54721] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2572), 1, + anon_sym_RPAREN, + ACTIONS(2692), 1, + anon_sym_COMMA, + STATE(1240), 1, + aux_sym__import_list_repeat1, + [54734] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(576), 1, + sym__newline, + ACTIONS(2695), 1, + sym__semicolon, + STATE(1200), 1, + aux_sym__simple_statements_repeat1, + [54747] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2697), 1, + anon_sym_COMMA, + ACTIONS(2699), 1, + anon_sym_RBRACE, + STATE(1235), 1, + aux_sym_dictionary_repeat1, + [54760] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2701), 1, + anon_sym_COMMA, + ACTIONS(2703), 1, + anon_sym_RBRACE, + STATE(1235), 1, + aux_sym_dictionary_repeat1, + [54773] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2705), 1, + sym__semicolon, + ACTIONS(2707), 1, + sym__newline, + STATE(1241), 1, + aux_sym__simple_statements_repeat1, + [54786] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2504), 1, + anon_sym_as, + ACTIONS(2563), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [54797] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(582), 1, + sym__newline, + ACTIONS(2709), 1, + sym__semicolon, + STATE(1200), 1, + aux_sym__simple_statements_repeat1, + [54810] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2711), 1, + anon_sym_COMMA, + ACTIONS(2713), 1, + anon_sym_RBRACE, + STATE(1235), 1, + aux_sym_dictionary_repeat1, + [54823] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2715), 1, + sym__semicolon, + ACTIONS(2717), 1, + sym__newline, + STATE(1246), 1, + aux_sym__simple_statements_repeat1, + [54836] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1844), 1, + anon_sym_RPAREN, + ACTIONS(2719), 1, + anon_sym_COMMA, + STATE(1275), 1, + aux_sym__parameters_repeat1, + [54849] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2721), 3, + anon_sym_LPAREN, + anon_sym_COLON, + anon_sym_EQ, + [54858] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1932), 1, + anon_sym_RPAREN, + STATE(1292), 1, + aux_sym__collection_elements_repeat1, + [54871] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2723), 1, + anon_sym_COMMA, + ACTIONS(2726), 1, + anon_sym_RBRACK, + STATE(1252), 1, + aux_sym_type_parameters_repeat1, + [54884] = 3, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2248), 1, + anon_sym_RBRACE, + ACTIONS(2250), 2, + anon_sym_LBRACE2, + aux_sym_format_specifier_token1, + [54895] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(574), 1, + sym__newline, + ACTIONS(2728), 1, + sym__semicolon, + STATE(1200), 1, + aux_sym__simple_statements_repeat1, + [54908] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1993), 1, + anon_sym_RPAREN, + ACTIONS(1995), 1, + anon_sym_COMMA, + STATE(1277), 1, + aux_sym_argument_list_repeat1, + [54921] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2730), 1, + anon_sym_RPAREN, + ACTIONS(2732), 1, + anon_sym_COMMA, + STATE(1279), 1, + aux_sym_argument_list_repeat1, + [54934] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1832), 1, + anon_sym_RBRACE, + ACTIONS(2734), 1, + anon_sym_COMMA, + STATE(1211), 1, + aux_sym_match_mapping_pattern_repeat1, + [54947] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2193), 1, + anon_sym_COMMA, + ACTIONS(2195), 1, + anon_sym_RBRACK, + STATE(1283), 1, + aux_sym_subscript_repeat1, + [54960] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2736), 1, + sym_identifier, + ACTIONS(2738), 1, + sym_match_wildcard_pattern, + STATE(1110), 1, + sym_match_capture_pattern, + [54973] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2337), 1, + anon_sym_COLON, + ACTIONS(2559), 1, + anon_sym_RBRACE, + STATE(1420), 1, + sym_format_specifier, + [54986] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2740), 1, + sym__semicolon, + ACTIONS(2742), 1, + sym__newline, + STATE(1254), 1, + aux_sym__simple_statements_repeat1, + [54999] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1889), 1, + anon_sym_DOT, + ACTIONS(1893), 1, + anon_sym_COLON, + STATE(906), 1, + aux_sym_match_value_pattern_repeat1, + [55012] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2744), 1, + anon_sym_EQ, + ACTIONS(2746), 2, + sym__newline, + sym__semicolon, + [55023] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2748), 1, + anon_sym_RPAREN, + ACTIONS(2750), 1, + anon_sym_COMMA, + STATE(1232), 1, + aux_sym_argument_list_repeat1, + [55036] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(968), 1, + anon_sym_except, + ACTIONS(966), 2, + anon_sym_except_STAR, + anon_sym_finally, + [55047] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2752), 1, + anon_sym_COMMA, + ACTIONS(2754), 1, + anon_sym_COLON, + STATE(1178), 1, + aux_sym_with_clause_repeat1, + [55060] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2756), 1, + anon_sym_COLON, + ACTIONS(2546), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [55071] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2758), 1, + anon_sym_RPAREN, + ACTIONS(2760), 1, + anon_sym_COMMA, + STATE(1310), 1, + aux_sym_with_clause_repeat1, + [55084] = 3, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2762), 1, + anon_sym_RBRACE, + ACTIONS(2764), 2, + anon_sym_LBRACE2, + aux_sym_format_specifier_token1, + [55095] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2434), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [55104] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2766), 1, + anon_sym_COMMA, + ACTIONS(2768), 1, + anon_sym_RBRACK, + STATE(1299), 1, + aux_sym_subscript_repeat1, + [55117] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2770), 1, + anon_sym_COMMA, + ACTIONS(2772), 1, + anon_sym_RBRACK, + STATE(1299), 1, + aux_sym_subscript_repeat1, + [55130] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2774), 1, + anon_sym_RPAREN, + ACTIONS(2776), 1, + anon_sym_COMMA, + STATE(1232), 1, + aux_sym_argument_list_repeat1, + [55143] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2778), 1, + anon_sym_RPAREN, + ACTIONS(2780), 1, + anon_sym_COMMA, + STATE(1232), 1, + aux_sym_argument_list_repeat1, + [55156] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2599), 1, + anon_sym_RPAREN, + ACTIONS(2782), 1, + anon_sym_COMMA, + STATE(1275), 1, + aux_sym__parameters_repeat1, + [55169] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1820), 1, + anon_sym_COMMA, + ACTIONS(2785), 1, + anon_sym_in, + STATE(884), 1, + aux_sym__patterns_repeat1, + [55182] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2787), 1, + anon_sym_RPAREN, + ACTIONS(2789), 1, + anon_sym_COMMA, + STATE(1232), 1, + aux_sym_argument_list_repeat1, + [55195] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2337), 1, + anon_sym_COLON, + ACTIONS(2538), 1, + anon_sym_RBRACE, + STATE(1479), 1, + sym_format_specifier, + [55208] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2791), 1, + anon_sym_RPAREN, + ACTIONS(2793), 1, + anon_sym_COMMA, + STATE(1232), 1, + aux_sym_argument_list_repeat1, + [55221] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2795), 1, + anon_sym_RPAREN, + ACTIONS(2797), 1, + anon_sym_COMMA, + STATE(1232), 1, + aux_sym_argument_list_repeat1, + [55234] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2799), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [55243] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2801), 1, + anon_sym_COMMA, + ACTIONS(2803), 1, + anon_sym_RBRACK, + STATE(1299), 1, + aux_sym_subscript_repeat1, + [55256] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2805), 1, + anon_sym_COMMA, + ACTIONS(2807), 1, + anon_sym_RBRACK, + STATE(1299), 1, + aux_sym_subscript_repeat1, + [55269] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2337), 1, + anon_sym_COLON, + ACTIONS(2809), 1, + anon_sym_RBRACE, + STATE(1409), 1, + sym_format_specifier, + [55282] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2811), 1, + anon_sym_RPAREN, + ACTIONS(2813), 1, + anon_sym_COMMA, + STATE(1232), 1, + aux_sym_argument_list_repeat1, + [55295] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2646), 1, + anon_sym_if, + ACTIONS(2815), 1, + anon_sym_COLON, + STATE(1501), 1, + sym_guard, + [55308] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2817), 1, + anon_sym_COMMA, + ACTIONS(2819), 2, + anon_sym_if, + anon_sym_COLON, + [55319] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2067), 1, + anon_sym_from, + ACTIONS(2073), 2, + sym__newline, + sym__semicolon, + [55330] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2377), 1, + anon_sym_RPAREN, + ACTIONS(2821), 1, + anon_sym_COMMA, + STATE(1114), 1, + aux_sym__collection_elements_repeat1, + [55343] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1721), 1, + anon_sym_RPAREN, + ACTIONS(2823), 1, + anon_sym_COMMA, + STATE(1325), 1, + aux_sym_match_class_pattern_repeat2, + [55356] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1399), 3, + sym__newline, + anon_sym_in, + sym__semicolon, + [55365] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2377), 1, + anon_sym_RPAREN, + ACTIONS(2825), 1, + anon_sym_COMMA, + STATE(1114), 1, + aux_sym__collection_elements_repeat1, + [55378] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1820), 1, + anon_sym_COMMA, + ACTIONS(2827), 1, + anon_sym_in, + STATE(884), 1, + aux_sym__patterns_repeat1, + [55391] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2207), 1, + anon_sym_COMMA, + ACTIONS(2209), 1, + anon_sym_RBRACK, + STATE(1271), 1, + aux_sym_subscript_repeat1, + [55404] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2599), 1, + anon_sym_COLON, + ACTIONS(2829), 1, + anon_sym_COMMA, + STATE(1295), 1, + aux_sym__parameters_repeat1, + [55417] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2832), 1, + anon_sym_RPAREN, + ACTIONS(2834), 1, + anon_sym_COMMA, + STATE(1296), 1, + aux_sym_match_class_pattern_repeat1, + [55430] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2837), 1, + anon_sym_RPAREN, + ACTIONS(2839), 1, + anon_sym_COMMA, + STATE(1274), 1, + aux_sym_argument_list_repeat1, + [55443] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1975), 1, + anon_sym_RPAREN, + ACTIONS(1977), 1, + anon_sym_COMMA, + STATE(1285), 1, + aux_sym_argument_list_repeat1, + [55456] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2841), 1, + anon_sym_COMMA, + ACTIONS(2844), 1, + anon_sym_RBRACK, + STATE(1299), 1, + aux_sym_subscript_repeat1, + [55469] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2846), 1, + anon_sym_COMMA, + ACTIONS(2848), 1, + anon_sym_RBRACE, + STATE(1235), 1, + aux_sym_dictionary_repeat1, + [55482] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(2850), 1, + anon_sym_RPAREN, + STATE(1289), 1, + aux_sym__collection_elements_repeat1, + [55495] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2852), 1, + anon_sym_COMMA, + ACTIONS(2854), 1, + anon_sym_RBRACE, + STATE(1235), 1, + aux_sym_dictionary_repeat1, + [55508] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(2856), 1, + anon_sym_RPAREN, + STATE(1115), 1, + aux_sym__collection_elements_repeat1, + [55521] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(987), 1, + anon_sym_except, + ACTIONS(985), 2, + anon_sym_except_STAR, + anon_sym_finally, + [55532] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1820), 1, + anon_sym_COMMA, + ACTIONS(2858), 1, + anon_sym_in, + STATE(884), 1, + aux_sym__patterns_repeat1, + [55545] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1820), 1, + anon_sym_COMMA, + ACTIONS(2860), 1, + anon_sym_in, + STATE(884), 1, + aux_sym__patterns_repeat1, + [55558] = 3, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2277), 1, + anon_sym_RBRACE, + ACTIONS(2279), 2, + anon_sym_LBRACE2, + aux_sym_format_specifier_token1, + [55569] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2552), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [55578] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(588), 1, + sym__newline, + ACTIONS(2862), 1, + sym__semicolon, + STATE(1200), 1, + aux_sym__simple_statements_repeat1, + [55591] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(995), 1, + anon_sym_RPAREN, + ACTIONS(2864), 1, + anon_sym_COMMA, + STATE(1178), 1, + aux_sym_with_clause_repeat1, + [55604] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2211), 1, + anon_sym_COMMA, + ACTIONS(2213), 1, + anon_sym_RBRACE, + STATE(1302), 1, + aux_sym_dictionary_repeat1, + [55617] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2235), 1, + sym_identifier, + STATE(1183), 1, + sym_dotted_name, + STATE(1198), 1, + sym_aliased_import, + [55630] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1861), 1, + anon_sym_COMMA, + ACTIONS(1905), 1, + anon_sym_RPAREN, + STATE(1292), 1, + aux_sym__collection_elements_repeat1, + [55643] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1721), 1, + anon_sym_RPAREN, + ACTIONS(2582), 1, + sym_identifier, + STATE(1341), 1, + sym_match_keyword_pattern, + [55656] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2337), 1, + anon_sym_COLON, + ACTIONS(2866), 1, + anon_sym_RBRACE, + STATE(1515), 1, + sym_format_specifier, + [55669] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2868), 1, + anon_sym_RPAREN, + ACTIONS(2870), 1, + anon_sym_COMMA, + STATE(1316), 1, + aux_sym_match_class_pattern_repeat2, + [55682] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2459), 1, + sym_identifier, + STATE(1245), 1, + sym_dotted_name, + STATE(1397), 1, + sym_aliased_import, + [55695] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1403), 3, + sym__newline, + anon_sym_in, + sym__semicolon, + [55704] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2873), 1, + sym__semicolon, + ACTIONS(2875), 1, + sym__newline, + STATE(1309), 1, + aux_sym__simple_statements_repeat1, + [55717] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2752), 1, + anon_sym_COMMA, + ACTIONS(2877), 1, + anon_sym_COLON, + STATE(1266), 1, + aux_sym_with_clause_repeat1, + [55730] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2373), 1, + anon_sym_RPAREN, + ACTIONS(2502), 1, + anon_sym_COMMA, + STATE(1206), 1, + aux_sym__import_list_repeat1, + [55743] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2879), 3, + anon_sym_LPAREN, + anon_sym_COLON, + anon_sym_EQ, + [55752] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1711), 1, + anon_sym_RBRACK, + ACTIONS(2881), 1, + anon_sym_COMMA, + STATE(1077), 1, + aux_sym_open_sequence_match_pattern_repeat1, + [55765] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(989), 1, + anon_sym_except, + ACTIONS(991), 2, + anon_sym_except_STAR, + anon_sym_finally, + [55776] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2584), 1, + anon_sym_RPAREN, + ACTIONS(2883), 1, + anon_sym_COMMA, + STATE(1316), 1, + aux_sym_match_class_pattern_repeat2, + [55789] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2584), 1, + anon_sym_RPAREN, + ACTIONS(2883), 1, + anon_sym_COMMA, + STATE(1331), 1, + aux_sym_match_class_pattern_repeat2, + [55802] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2219), 1, + anon_sym_COMMA, + ACTIONS(2221), 1, + anon_sym_RBRACE, + STATE(1242), 1, + aux_sym_dictionary_repeat1, + [55815] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2885), 1, + anon_sym_RPAREN, + ACTIONS(2887), 1, + anon_sym_COMMA, + STATE(1230), 1, + aux_sym_argument_list_repeat1, + [55828] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2582), 1, + sym_identifier, + ACTIONS(2889), 1, + anon_sym_RPAREN, + STATE(1341), 1, + sym_match_keyword_pattern, + [55841] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2630), 1, + anon_sym_RPAREN, + ACTIONS(2891), 1, + anon_sym_COMMA, + STATE(1216), 1, + aux_sym_match_class_pattern_repeat2, + [55854] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2889), 1, + anon_sym_RPAREN, + ACTIONS(2893), 1, + anon_sym_COMMA, + STATE(1316), 1, + aux_sym_match_class_pattern_repeat2, + [55867] = 3, + ACTIONS(1942), 1, + sym_comment, + ACTIONS(2271), 1, + anon_sym_RBRACE, + ACTIONS(2273), 2, + anon_sym_LBRACE2, + aux_sym_format_specifier_token1, + [55878] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2546), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [55887] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2660), 1, + anon_sym_COLON, + ACTIONS(2895), 1, + anon_sym_COMMA, + STATE(1204), 1, + aux_sym__parameters_repeat1, + [55900] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2897), 1, + anon_sym_in, + ACTIONS(2899), 2, + sym__newline, + sym__semicolon, + [55911] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2365), 1, + anon_sym_LBRACK, + ACTIONS(2901), 1, + anon_sym_EQ, + STATE(1492), 1, + sym_type_parameters, + [55924] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1711), 1, + anon_sym_RPAREN, + ACTIONS(2903), 1, + anon_sym_COMMA, + STATE(1077), 1, + aux_sym_open_sequence_match_pattern_repeat1, + [55937] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2582), 1, + sym_identifier, + ACTIONS(2905), 1, + anon_sym_RPAREN, + STATE(1341), 1, + sym_match_keyword_pattern, + [55950] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2550), 1, + anon_sym_EQ, + ACTIONS(2546), 2, + anon_sym_COMMA, + anon_sym_COLON, + [55961] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2907), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + [55970] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2868), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [55978] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2909), 2, + sym__newline, + sym__semicolon, + [55986] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2911), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [55994] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2913), 1, + anon_sym_COLON, + ACTIONS(2915), 1, + anon_sym_DASH_GT, + [56004] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2917), 2, + sym__newline, + sym__semicolon, + [56012] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2919), 2, + sym__newline, + sym__semicolon, + [56020] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2546), 2, + anon_sym_COMMA, + anon_sym_COLON, + [56028] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1926), 2, + sym__newline, + sym__semicolon, + [56036] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2921), 2, + sym__newline, + sym__semicolon, + [56044] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2923), 2, + sym__newline, + sym__semicolon, + [56052] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2597), 2, + sym__newline, + sym__semicolon, + [56060] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2925), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [56068] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2582), 1, + sym_identifier, + STATE(1341), 1, + sym_match_keyword_pattern, + [56078] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2430), 1, + anon_sym_LPAREN, + STATE(1372), 1, + sym_parameters, + [56088] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2927), 2, + anon_sym_COMMA, + anon_sym_RBRACE, + [56096] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2430), 1, + anon_sym_LPAREN, + STATE(1375), 1, + sym_parameters, + [56106] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2929), 1, + sym_identifier, + STATE(1367), 1, + sym_match_capture_pattern, + [56116] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2430), 1, + anon_sym_LPAREN, + STATE(1344), 1, + sym_parameters, + [56126] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1842), 1, + anon_sym_RBRACE, + ACTIONS(2931), 1, + anon_sym_COMMA, + [56136] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2069), 1, + anon_sym_COMMA, + STATE(1112), 1, + aux_sym_expression_list_repeat1, + [56146] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2145), 2, + sym__newline, + sym__semicolon, + [56154] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2628), 2, + anon_sym_COMMA, + anon_sym_RBRACE, + [56162] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2933), 1, + anon_sym_COLON, + ACTIONS(2935), 1, + anon_sym_DASH_GT, + [56172] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2937), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [56180] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1889), 1, + anon_sym_DOT, + STATE(1262), 1, + aux_sym_match_value_pattern_repeat1, + [56190] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1928), 1, + anon_sym_COMMA, + STATE(985), 1, + aux_sym_expression_list_repeat1, + [56200] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2939), 2, + anon_sym_COMMA, + anon_sym_RBRACE, + [56208] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2644), 1, + anon_sym_RBRACE, + ACTIONS(2941), 1, + anon_sym_COMMA, + [56218] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2943), 2, + sym__newline, + sym__semicolon, + [56226] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2430), 1, + anon_sym_LPAREN, + STATE(1376), 1, + sym_parameters, + [56236] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2945), 1, + anon_sym_COLON, + ACTIONS(2947), 1, + anon_sym_DASH_GT, + [56246] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2949), 1, + anon_sym_COLON, + ACTIONS(2951), 1, + anon_sym_DASH_GT, + [56256] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2420), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [56264] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2953), 2, + anon_sym_COLON, + anon_sym_DASH_GT, + [56272] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2955), 1, + anon_sym_COLON, + ACTIONS(2957), 1, + anon_sym_DASH_GT, + [56282] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2959), 1, + anon_sym_COLON, + ACTIONS(2961), 1, + anon_sym_DASH_GT, + [56292] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2963), 1, + anon_sym_COLON, + ACTIONS(2965), 1, + anon_sym_DASH_GT, + [56302] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2967), 1, + anon_sym_COLON, + ACTIONS(2969), 1, + anon_sym_DASH_GT, + [56312] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2971), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [56320] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2973), 2, + anon_sym_COLON, + anon_sym_DASH_GT, + [56328] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2975), 1, + sym_integer, + ACTIONS(2977), 1, + sym_float, + [56338] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2652), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [56346] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2979), 2, + sym__newline, + sym__semicolon, + [56354] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2981), 2, + anon_sym_COMMA, + anon_sym_RBRACE, + [56362] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2983), 2, + sym__newline, + sym__semicolon, + [56370] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2985), 2, + sym__newline, + sym__semicolon, + [56378] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2987), 1, + sym_integer, + ACTIONS(2989), 1, + sym_float, + [56388] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2991), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [56396] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2205), 2, + sym__newline, + sym__semicolon, + [56404] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2993), 1, + sym_integer, + ACTIONS(2995), 1, + sym_float, + [56414] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2997), 2, + sym__newline, + sym__semicolon, + [56422] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2817), 1, + anon_sym_COMMA, + ACTIONS(2999), 1, + anon_sym_RPAREN, + [56432] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3001), 2, + sym__newline, + sym__semicolon, + [56440] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2203), 2, + sym__newline, + sym__semicolon, + [56448] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3003), 2, + sym__newline, + sym__semicolon, + [56456] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3005), 1, + anon_sym_COMMA, + STATE(1337), 1, + aux_sym_open_sequence_match_pattern_repeat1, + [56466] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2563), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [56474] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2322), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [56482] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3007), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [56490] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3009), 2, + sym__newline, + sym__semicolon, + [56498] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3011), 1, + anon_sym_COMMA, + ACTIONS(3013), 1, + anon_sym_RBRACE, + [56508] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3015), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [56516] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2832), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [56524] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3017), 1, + anon_sym_COMMA, + STATE(1190), 1, + aux_sym_open_sequence_match_pattern_repeat1, + [56534] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3019), 1, + anon_sym_RBRACE, + [56541] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3021), 1, + anon_sym_LPAREN, + [56548] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3023), 1, + anon_sym_RBRACK, + [56555] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3025), 1, + anon_sym_import, + [56562] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3027), 1, + anon_sym_RBRACE, + [56569] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3029), 1, + anon_sym_RBRACE, + [56576] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3031), 1, + anon_sym_RBRACE, + [56583] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2105), 1, + anon_sym_EQ, + [56590] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3033), 1, + anon_sym_COLON, + [56597] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3035), 1, + anon_sym_RPAREN, + [56604] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3037), 1, + anon_sym_RPAREN, + [56611] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3039), 1, + anon_sym_for, + [56618] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3041), 1, + anon_sym_RPAREN, + [56625] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3043), 1, + anon_sym_RPAREN, + [56632] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2827), 1, + anon_sym_in, + [56639] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_RBRACE, + [56646] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2785), 1, + anon_sym_in, + [56653] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3045), 1, + anon_sym_COLON, + [56660] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3047), 1, + anon_sym_COLON, + [56667] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3013), 1, + anon_sym_RBRACE, + [56674] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2559), 1, + anon_sym_RBRACE, + [56681] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1832), 1, + anon_sym_RBRACE, + [56688] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3049), 1, + anon_sym_COLON, + [56695] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3051), 1, + anon_sym_COLON, + [56702] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3053), 1, + anon_sym_RBRACK, + [56709] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3055), 1, + anon_sym_in, + [56716] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3057), 1, + anon_sym_RPAREN, + [56723] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3059), 1, + anon_sym_RPAREN, + [56730] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3061), 1, + anon_sym_RBRACE, + [56737] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3063), 1, + anon_sym_RPAREN, + [56744] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3065), 1, + anon_sym_COLON, + [56751] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3067), 1, + anon_sym_in, + [56758] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3069), 1, + anon_sym_RBRACK, + [56765] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3071), 1, + anon_sym_RBRACE, + [56772] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3073), 1, + anon_sym_RBRACE, + [56779] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3075), 1, + sym_identifier, + [56786] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3077), 1, + anon_sym_import, + [56793] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3079), 1, + anon_sym_RPAREN, + [56800] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3081), 1, + sym_identifier, + [56807] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3083), 1, + anon_sym_import, + [56814] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3085), 1, + sym_identifier, + [56821] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3087), 1, + anon_sym_in, + [56828] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3089), 1, + anon_sym_RPAREN, + [56835] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3091), 1, + sym_identifier, + [56842] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3093), 1, + sym_identifier, + [56849] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3095), 1, + sym_identifier, + [56856] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3097), 1, + anon_sym_COLON, + [56863] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3099), 1, + anon_sym_COLON, + [56870] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3101), 1, + anon_sym_COLON, + [56877] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2860), 1, + anon_sym_in, + [56884] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3103), 1, + anon_sym_RPAREN, + [56891] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3105), 1, + sym_identifier, + [56898] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3107), 1, + sym_identifier, + [56905] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3109), 1, + anon_sym_COLON, + [56912] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3111), 1, + anon_sym_COLON, + [56919] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3113), 1, + anon_sym_RBRACE, + [56926] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3115), 1, + anon_sym_RBRACE, + [56933] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3117), 1, + anon_sym_RBRACE, + [56940] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3119), 1, + anon_sym_COLON, + [56947] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3121), 1, + anon_sym_RPAREN, + [56954] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2293), 1, + anon_sym_COLON, + [56961] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2858), 1, + anon_sym_in, + [56968] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3123), 1, + anon_sym_RBRACK, + [56975] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3125), 1, + anon_sym_COLON, + [56982] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3127), 1, + anon_sym_RBRACE, + [56989] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3129), 1, + anon_sym_COLON, + [56996] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3131), 1, + anon_sym_COLON, + [57003] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2281), 1, + anon_sym_COLON, + [57010] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3133), 1, + anon_sym_RBRACK, + [57017] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3135), 1, + anon_sym_COLON, + [57024] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3137), 1, + anon_sym_RPAREN, + [57031] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3139), 1, + anon_sym_COLON, + [57038] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3141), 1, + sym_identifier, + [57045] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3143), 1, + anon_sym_COLON, + [57052] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2866), 1, + anon_sym_RBRACE, + [57059] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3145), 1, + anon_sym_COLON, + [57066] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3147), 1, + anon_sym_COLON, + [57073] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3149), 1, + anon_sym_COLON, + [57080] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3151), 1, + anon_sym_COLON, + [57087] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3153), 1, + anon_sym_RPAREN, + [57094] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3155), 1, + anon_sym_COLON, + [57101] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3157), 1, + anon_sym_COLON, + [57108] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3159), 1, + anon_sym_COLON, + [57115] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(876), 1, + anon_sym_def, + [57122] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3161), 1, + anon_sym_COLON, + [57129] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3163), 1, + sym_identifier, + [57136] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3165), 1, + anon_sym_COLON, + [57143] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3167), 1, + anon_sym_EQ, + [57150] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3169), 1, + anon_sym_COLON, + [57157] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3171), 1, + anon_sym_in, + [57164] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3173), 1, + anon_sym_COLON, + [57171] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3175), 1, + anon_sym_RBRACE, + [57178] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3177), 1, + anon_sym_RBRACK, + [57185] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3179), 1, + sym_identifier, + [57192] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3181), 1, + anon_sym_COLON, + [57199] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3183), 1, + sym_identifier, + [57206] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3185), 1, + anon_sym_COLON, + [57213] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3187), 1, + ts_builtin_sym_end, + [57220] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3189), 1, + anon_sym_RBRACK, + [57227] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3191), 1, + anon_sym_RBRACE, + [57234] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3193), 1, + anon_sym_COLON, + [57241] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3195), 1, + anon_sym_COLON, + [57248] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2246), 1, + anon_sym_COLON, + [57255] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3197), 1, + sym_identifier, + [57262] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3199), 1, + sym_identifier, + [57269] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3201), 1, + sym_identifier, + [57276] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3203), 1, + sym_identifier, + [57283] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3205), 1, + anon_sym_COLON, + [57290] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3207), 1, + anon_sym_RBRACE, + [57297] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3209), 1, + sym_identifier, + [57304] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3211), 1, + anon_sym_RBRACE, + [57311] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3213), 1, + sym_identifier, + [57318] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3215), 1, + sym_identifier, + [57325] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2320), 1, + anon_sym_COLON, + [57332] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2592), 1, + anon_sym_in, + [57339] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(894), 1, + anon_sym_def, + [57346] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3217), 1, + anon_sym_COLON, + [57353] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2590), 1, + anon_sym_in, + [57360] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2538), 1, + anon_sym_RBRACE, + [57367] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3219), 1, + anon_sym_COLON, +}; + +static const uint32_t ts_small_parse_table_map[] = { + [SMALL_STATE(155)] = 0, + [SMALL_STATE(156)] = 118, + [SMALL_STATE(157)] = 236, + [SMALL_STATE(158)] = 354, + [SMALL_STATE(159)] = 464, + [SMALL_STATE(160)] = 579, + [SMALL_STATE(161)] = 694, + [SMALL_STATE(162)] = 809, + [SMALL_STATE(163)] = 926, + [SMALL_STATE(164)] = 1045, + [SMALL_STATE(165)] = 1162, + [SMALL_STATE(166)] = 1262, + [SMALL_STATE(167)] = 1376, + [SMALL_STATE(168)] = 1480, + [SMALL_STATE(169)] = 1584, + [SMALL_STATE(170)] = 1698, + [SMALL_STATE(171)] = 1812, + [SMALL_STATE(172)] = 1916, + [SMALL_STATE(173)] = 2016, + [SMALL_STATE(174)] = 2123, + [SMALL_STATE(175)] = 2224, + [SMALL_STATE(176)] = 2325, + [SMALL_STATE(177)] = 2430, + [SMALL_STATE(178)] = 2535, + [SMALL_STATE(179)] = 2638, + [SMALL_STATE(180)] = 2743, + [SMALL_STATE(181)] = 2848, + [SMALL_STATE(182)] = 2953, + [SMALL_STATE(183)] = 3054, + [SMALL_STATE(184)] = 3157, + [SMALL_STATE(185)] = 3262, + [SMALL_STATE(186)] = 3360, + [SMALL_STATE(187)] = 3462, + [SMALL_STATE(188)] = 3564, + [SMALL_STATE(189)] = 3668, + [SMALL_STATE(190)] = 3770, + [SMALL_STATE(191)] = 3872, + [SMALL_STATE(192)] = 3974, + [SMALL_STATE(193)] = 4072, + [SMALL_STATE(194)] = 4176, + [SMALL_STATE(195)] = 4278, + [SMALL_STATE(196)] = 4380, + [SMALL_STATE(197)] = 4482, + [SMALL_STATE(198)] = 4584, + [SMALL_STATE(199)] = 4686, + [SMALL_STATE(200)] = 4788, + [SMALL_STATE(201)] = 4894, + [SMALL_STATE(202)] = 4996, + [SMALL_STATE(203)] = 5094, + [SMALL_STATE(204)] = 5196, + [SMALL_STATE(205)] = 5300, + [SMALL_STATE(206)] = 5402, + [SMALL_STATE(207)] = 5504, + [SMALL_STATE(208)] = 5606, + [SMALL_STATE(209)] = 5708, + [SMALL_STATE(210)] = 5810, + [SMALL_STATE(211)] = 5912, + [SMALL_STATE(212)] = 6018, + [SMALL_STATE(213)] = 6122, + [SMALL_STATE(214)] = 6220, + [SMALL_STATE(215)] = 6322, + [SMALL_STATE(216)] = 6424, + [SMALL_STATE(217)] = 6526, + [SMALL_STATE(218)] = 6628, + [SMALL_STATE(219)] = 6689, + [SMALL_STATE(220)] = 6750, + [SMALL_STATE(221)] = 6811, + [SMALL_STATE(222)] = 6872, + [SMALL_STATE(223)] = 6971, + [SMALL_STATE(224)] = 7032, + [SMALL_STATE(225)] = 7131, + [SMALL_STATE(226)] = 7230, + [SMALL_STATE(227)] = 7291, + [SMALL_STATE(228)] = 7352, + [SMALL_STATE(229)] = 7424, + [SMALL_STATE(230)] = 7496, + [SMALL_STATE(231)] = 7592, + [SMALL_STATE(232)] = 7690, + [SMALL_STATE(233)] = 7762, + [SMALL_STATE(234)] = 7860, + [SMALL_STATE(235)] = 7932, + [SMALL_STATE(236)] = 8030, + [SMALL_STATE(237)] = 8128, + [SMALL_STATE(238)] = 8200, + [SMALL_STATE(239)] = 8272, + [SMALL_STATE(240)] = 8370, + [SMALL_STATE(241)] = 8442, + [SMALL_STATE(242)] = 8514, + [SMALL_STATE(243)] = 8609, + [SMALL_STATE(244)] = 8704, + [SMALL_STATE(245)] = 8799, + [SMALL_STATE(246)] = 8894, + [SMALL_STATE(247)] = 8989, + [SMALL_STATE(248)] = 9062, + [SMALL_STATE(249)] = 9157, + [SMALL_STATE(250)] = 9252, + [SMALL_STATE(251)] = 9347, + [SMALL_STATE(252)] = 9442, + [SMALL_STATE(253)] = 9537, + [SMALL_STATE(254)] = 9632, + [SMALL_STATE(255)] = 9705, + [SMALL_STATE(256)] = 9799, + [SMALL_STATE(257)] = 9893, + [SMALL_STATE(258)] = 9987, + [SMALL_STATE(259)] = 10055, + [SMALL_STATE(260)] = 10147, + [SMALL_STATE(261)] = 10241, + [SMALL_STATE(262)] = 10335, + [SMALL_STATE(263)] = 10429, + [SMALL_STATE(264)] = 10497, + [SMALL_STATE(265)] = 10589, + [SMALL_STATE(266)] = 10657, + [SMALL_STATE(267)] = 10719, + [SMALL_STATE(268)] = 10781, + [SMALL_STATE(269)] = 10849, + [SMALL_STATE(270)] = 10943, + [SMALL_STATE(271)] = 11005, + [SMALL_STATE(272)] = 11067, + [SMALL_STATE(273)] = 11135, + [SMALL_STATE(274)] = 11229, + [SMALL_STATE(275)] = 11323, + [SMALL_STATE(276)] = 11415, + [SMALL_STATE(277)] = 11483, + [SMALL_STATE(278)] = 11551, + [SMALL_STATE(279)] = 11621, + [SMALL_STATE(280)] = 11689, + [SMALL_STATE(281)] = 11778, + [SMALL_STATE(282)] = 11835, + [SMALL_STATE(283)] = 11892, + [SMALL_STATE(284)] = 11983, + [SMALL_STATE(285)] = 12050, + [SMALL_STATE(286)] = 12113, + [SMALL_STATE(287)] = 12202, + [SMALL_STATE(288)] = 12259, + [SMALL_STATE(289)] = 12316, + [SMALL_STATE(290)] = 12405, + [SMALL_STATE(291)] = 12496, + [SMALL_STATE(292)] = 12553, + [SMALL_STATE(293)] = 12644, + [SMALL_STATE(294)] = 12733, + [SMALL_STATE(295)] = 12822, + [SMALL_STATE(296)] = 12911, + [SMALL_STATE(297)] = 13002, + [SMALL_STATE(298)] = 13091, + [SMALL_STATE(299)] = 13182, + [SMALL_STATE(300)] = 13273, + [SMALL_STATE(301)] = 13362, + [SMALL_STATE(302)] = 13453, + [SMALL_STATE(303)] = 13544, + [SMALL_STATE(304)] = 13633, + [SMALL_STATE(305)] = 13722, + [SMALL_STATE(306)] = 13779, + [SMALL_STATE(307)] = 13868, + [SMALL_STATE(308)] = 13931, + [SMALL_STATE(309)] = 13988, + [SMALL_STATE(310)] = 14077, + [SMALL_STATE(311)] = 14168, + [SMALL_STATE(312)] = 14225, + [SMALL_STATE(313)] = 14314, + [SMALL_STATE(314)] = 14371, + [SMALL_STATE(315)] = 14462, + [SMALL_STATE(316)] = 14519, + [SMALL_STATE(317)] = 14575, + [SMALL_STATE(318)] = 14631, + [SMALL_STATE(319)] = 14687, + [SMALL_STATE(320)] = 14743, + [SMALL_STATE(321)] = 14799, + [SMALL_STATE(322)] = 14887, + [SMALL_STATE(323)] = 14975, + [SMALL_STATE(324)] = 15063, + [SMALL_STATE(325)] = 15151, + [SMALL_STATE(326)] = 15207, + [SMALL_STATE(327)] = 15263, + [SMALL_STATE(328)] = 15319, + [SMALL_STATE(329)] = 15375, + [SMALL_STATE(330)] = 15431, + [SMALL_STATE(331)] = 15495, + [SMALL_STATE(332)] = 15551, + [SMALL_STATE(333)] = 15607, + [SMALL_STATE(334)] = 15663, + [SMALL_STATE(335)] = 15727, + [SMALL_STATE(336)] = 15815, + [SMALL_STATE(337)] = 15871, + [SMALL_STATE(338)] = 15927, + [SMALL_STATE(339)] = 15991, + [SMALL_STATE(340)] = 16055, + [SMALL_STATE(341)] = 16111, + [SMALL_STATE(342)] = 16199, + [SMALL_STATE(343)] = 16255, + [SMALL_STATE(344)] = 16311, + [SMALL_STATE(345)] = 16367, + [SMALL_STATE(346)] = 16427, + [SMALL_STATE(347)] = 16515, + [SMALL_STATE(348)] = 16575, + [SMALL_STATE(349)] = 16663, + [SMALL_STATE(350)] = 16723, + [SMALL_STATE(351)] = 16811, + [SMALL_STATE(352)] = 16899, + [SMALL_STATE(353)] = 16955, + [SMALL_STATE(354)] = 17011, + [SMALL_STATE(355)] = 17067, + [SMALL_STATE(356)] = 17123, + [SMALL_STATE(357)] = 17179, + [SMALL_STATE(358)] = 17235, + [SMALL_STATE(359)] = 17291, + [SMALL_STATE(360)] = 17347, + [SMALL_STATE(361)] = 17403, + [SMALL_STATE(362)] = 17491, + [SMALL_STATE(363)] = 17547, + [SMALL_STATE(364)] = 17603, + [SMALL_STATE(365)] = 17691, + [SMALL_STATE(366)] = 17747, + [SMALL_STATE(367)] = 17803, + [SMALL_STATE(368)] = 17859, + [SMALL_STATE(369)] = 17947, + [SMALL_STATE(370)] = 18003, + [SMALL_STATE(371)] = 18059, + [SMALL_STATE(372)] = 18115, + [SMALL_STATE(373)] = 18171, + [SMALL_STATE(374)] = 18227, + [SMALL_STATE(375)] = 18283, + [SMALL_STATE(376)] = 18339, + [SMALL_STATE(377)] = 18395, + [SMALL_STATE(378)] = 18451, + [SMALL_STATE(379)] = 18507, + [SMALL_STATE(380)] = 18563, + [SMALL_STATE(381)] = 18623, + [SMALL_STATE(382)] = 18679, + [SMALL_STATE(383)] = 18735, + [SMALL_STATE(384)] = 18823, + [SMALL_STATE(385)] = 18879, + [SMALL_STATE(386)] = 18964, + [SMALL_STATE(387)] = 19049, + [SMALL_STATE(388)] = 19108, + [SMALL_STATE(389)] = 19163, + [SMALL_STATE(390)] = 19248, + [SMALL_STATE(391)] = 19333, + [SMALL_STATE(392)] = 19418, + [SMALL_STATE(393)] = 19503, + [SMALL_STATE(394)] = 19590, + [SMALL_STATE(395)] = 19675, + [SMALL_STATE(396)] = 19760, + [SMALL_STATE(397)] = 19845, + [SMALL_STATE(398)] = 19930, + [SMALL_STATE(399)] = 20015, + [SMALL_STATE(400)] = 20100, + [SMALL_STATE(401)] = 20185, + [SMALL_STATE(402)] = 20244, + [SMALL_STATE(403)] = 20329, + [SMALL_STATE(404)] = 20384, + [SMALL_STATE(405)] = 20469, + [SMALL_STATE(406)] = 20554, + [SMALL_STATE(407)] = 20639, + [SMALL_STATE(408)] = 20694, + [SMALL_STATE(409)] = 20753, + [SMALL_STATE(410)] = 20838, + [SMALL_STATE(411)] = 20923, + [SMALL_STATE(412)] = 21008, + [SMALL_STATE(413)] = 21093, + [SMALL_STATE(414)] = 21152, + [SMALL_STATE(415)] = 21211, + [SMALL_STATE(416)] = 21296, + [SMALL_STATE(417)] = 21381, + [SMALL_STATE(418)] = 21466, + [SMALL_STATE(419)] = 21525, + [SMALL_STATE(420)] = 21610, + [SMALL_STATE(421)] = 21665, + [SMALL_STATE(422)] = 21720, + [SMALL_STATE(423)] = 21805, + [SMALL_STATE(424)] = 21890, + [SMALL_STATE(425)] = 21975, + [SMALL_STATE(426)] = 22060, + [SMALL_STATE(427)] = 22145, + [SMALL_STATE(428)] = 22204, + [SMALL_STATE(429)] = 22263, + [SMALL_STATE(430)] = 22348, + [SMALL_STATE(431)] = 22407, + [SMALL_STATE(432)] = 22468, + [SMALL_STATE(433)] = 22527, + [SMALL_STATE(434)] = 22582, + [SMALL_STATE(435)] = 22667, + [SMALL_STATE(436)] = 22752, + [SMALL_STATE(437)] = 22837, + [SMALL_STATE(438)] = 22922, + [SMALL_STATE(439)] = 23007, + [SMALL_STATE(440)] = 23092, + [SMALL_STATE(441)] = 23151, + [SMALL_STATE(442)] = 23212, + [SMALL_STATE(443)] = 23297, + [SMALL_STATE(444)] = 23382, + [SMALL_STATE(445)] = 23467, + [SMALL_STATE(446)] = 23552, + [SMALL_STATE(447)] = 23637, + [SMALL_STATE(448)] = 23722, + [SMALL_STATE(449)] = 23807, + [SMALL_STATE(450)] = 23868, + [SMALL_STATE(451)] = 23953, + [SMALL_STATE(452)] = 24038, + [SMALL_STATE(453)] = 24123, + [SMALL_STATE(454)] = 24208, + [SMALL_STATE(455)] = 24267, + [SMALL_STATE(456)] = 24352, + [SMALL_STATE(457)] = 24437, + [SMALL_STATE(458)] = 24522, + [SMALL_STATE(459)] = 24607, + [SMALL_STATE(460)] = 24692, + [SMALL_STATE(461)] = 24777, + [SMALL_STATE(462)] = 24862, + [SMALL_STATE(463)] = 24947, + [SMALL_STATE(464)] = 25032, + [SMALL_STATE(465)] = 25091, + [SMALL_STATE(466)] = 25176, + [SMALL_STATE(467)] = 25261, + [SMALL_STATE(468)] = 25320, + [SMALL_STATE(469)] = 25405, + [SMALL_STATE(470)] = 25490, + [SMALL_STATE(471)] = 25575, + [SMALL_STATE(472)] = 25660, + [SMALL_STATE(473)] = 25719, + [SMALL_STATE(474)] = 25804, + [SMALL_STATE(475)] = 25889, + [SMALL_STATE(476)] = 25950, + [SMALL_STATE(477)] = 26035, + [SMALL_STATE(478)] = 26120, + [SMALL_STATE(479)] = 26179, + [SMALL_STATE(480)] = 26264, + [SMALL_STATE(481)] = 26349, + [SMALL_STATE(482)] = 26434, + [SMALL_STATE(483)] = 26519, + [SMALL_STATE(484)] = 26604, + [SMALL_STATE(485)] = 26689, + [SMALL_STATE(486)] = 26743, + [SMALL_STATE(487)] = 26797, + [SMALL_STATE(488)] = 26851, + [SMALL_STATE(489)] = 26905, + [SMALL_STATE(490)] = 26959, + [SMALL_STATE(491)] = 27013, + [SMALL_STATE(492)] = 27067, + [SMALL_STATE(493)] = 27121, + [SMALL_STATE(494)] = 27175, + [SMALL_STATE(495)] = 27229, + [SMALL_STATE(496)] = 27283, + [SMALL_STATE(497)] = 27337, + [SMALL_STATE(498)] = 27390, + [SMALL_STATE(499)] = 27443, + [SMALL_STATE(500)] = 27496, + [SMALL_STATE(501)] = 27549, + [SMALL_STATE(502)] = 27602, + [SMALL_STATE(503)] = 27655, + [SMALL_STATE(504)] = 27708, + [SMALL_STATE(505)] = 27761, + [SMALL_STATE(506)] = 27814, + [SMALL_STATE(507)] = 27867, + [SMALL_STATE(508)] = 27920, + [SMALL_STATE(509)] = 27973, + [SMALL_STATE(510)] = 28026, + [SMALL_STATE(511)] = 28079, + [SMALL_STATE(512)] = 28132, + [SMALL_STATE(513)] = 28185, + [SMALL_STATE(514)] = 28238, + [SMALL_STATE(515)] = 28291, + [SMALL_STATE(516)] = 28344, + [SMALL_STATE(517)] = 28397, + [SMALL_STATE(518)] = 28450, + [SMALL_STATE(519)] = 28503, + [SMALL_STATE(520)] = 28556, + [SMALL_STATE(521)] = 28609, + [SMALL_STATE(522)] = 28662, + [SMALL_STATE(523)] = 28715, + [SMALL_STATE(524)] = 28768, + [SMALL_STATE(525)] = 28821, + [SMALL_STATE(526)] = 28874, + [SMALL_STATE(527)] = 28927, + [SMALL_STATE(528)] = 28980, + [SMALL_STATE(529)] = 29033, + [SMALL_STATE(530)] = 29086, + [SMALL_STATE(531)] = 29139, + [SMALL_STATE(532)] = 29192, + [SMALL_STATE(533)] = 29245, + [SMALL_STATE(534)] = 29298, + [SMALL_STATE(535)] = 29351, + [SMALL_STATE(536)] = 29404, + [SMALL_STATE(537)] = 29457, + [SMALL_STATE(538)] = 29510, + [SMALL_STATE(539)] = 29563, + [SMALL_STATE(540)] = 29616, + [SMALL_STATE(541)] = 29669, + [SMALL_STATE(542)] = 29722, + [SMALL_STATE(543)] = 29775, + [SMALL_STATE(544)] = 29828, + [SMALL_STATE(545)] = 29881, + [SMALL_STATE(546)] = 29934, + [SMALL_STATE(547)] = 29987, + [SMALL_STATE(548)] = 30040, + [SMALL_STATE(549)] = 30093, + [SMALL_STATE(550)] = 30146, + [SMALL_STATE(551)] = 30199, + [SMALL_STATE(552)] = 30252, + [SMALL_STATE(553)] = 30305, + [SMALL_STATE(554)] = 30358, + [SMALL_STATE(555)] = 30411, + [SMALL_STATE(556)] = 30464, + [SMALL_STATE(557)] = 30517, + [SMALL_STATE(558)] = 30570, + [SMALL_STATE(559)] = 30623, + [SMALL_STATE(560)] = 30676, + [SMALL_STATE(561)] = 30729, + [SMALL_STATE(562)] = 30782, + [SMALL_STATE(563)] = 30835, + [SMALL_STATE(564)] = 30888, + [SMALL_STATE(565)] = 30941, + [SMALL_STATE(566)] = 30994, + [SMALL_STATE(567)] = 31047, + [SMALL_STATE(568)] = 31100, + [SMALL_STATE(569)] = 31153, + [SMALL_STATE(570)] = 31206, + [SMALL_STATE(571)] = 31259, + [SMALL_STATE(572)] = 31312, + [SMALL_STATE(573)] = 31365, + [SMALL_STATE(574)] = 31418, + [SMALL_STATE(575)] = 31471, + [SMALL_STATE(576)] = 31524, + [SMALL_STATE(577)] = 31577, + [SMALL_STATE(578)] = 31630, + [SMALL_STATE(579)] = 31683, + [SMALL_STATE(580)] = 31736, + [SMALL_STATE(581)] = 31789, + [SMALL_STATE(582)] = 31842, + [SMALL_STATE(583)] = 31895, + [SMALL_STATE(584)] = 31948, + [SMALL_STATE(585)] = 32001, + [SMALL_STATE(586)] = 32054, + [SMALL_STATE(587)] = 32107, + [SMALL_STATE(588)] = 32160, + [SMALL_STATE(589)] = 32213, + [SMALL_STATE(590)] = 32266, + [SMALL_STATE(591)] = 32319, + [SMALL_STATE(592)] = 32372, + [SMALL_STATE(593)] = 32425, + [SMALL_STATE(594)] = 32478, + [SMALL_STATE(595)] = 32531, + [SMALL_STATE(596)] = 32613, + [SMALL_STATE(597)] = 32697, + [SMALL_STATE(598)] = 32779, + [SMALL_STATE(599)] = 32834, + [SMALL_STATE(600)] = 32889, + [SMALL_STATE(601)] = 32944, + [SMALL_STATE(602)] = 33025, + [SMALL_STATE(603)] = 33106, + [SMALL_STATE(604)] = 33187, + [SMALL_STATE(605)] = 33268, + [SMALL_STATE(606)] = 33349, + [SMALL_STATE(607)] = 33430, + [SMALL_STATE(608)] = 33508, + [SMALL_STATE(609)] = 33586, + [SMALL_STATE(610)] = 33635, + [SMALL_STATE(611)] = 33684, + [SMALL_STATE(612)] = 33732, + [SMALL_STATE(613)] = 33780, + [SMALL_STATE(614)] = 33828, + [SMALL_STATE(615)] = 33876, + [SMALL_STATE(616)] = 33924, + [SMALL_STATE(617)] = 33972, + [SMALL_STATE(618)] = 34020, + [SMALL_STATE(619)] = 34068, + [SMALL_STATE(620)] = 34116, + [SMALL_STATE(621)] = 34164, + [SMALL_STATE(622)] = 34212, + [SMALL_STATE(623)] = 34260, + [SMALL_STATE(624)] = 34308, + [SMALL_STATE(625)] = 34356, + [SMALL_STATE(626)] = 34404, + [SMALL_STATE(627)] = 34452, + [SMALL_STATE(628)] = 34500, + [SMALL_STATE(629)] = 34548, + [SMALL_STATE(630)] = 34596, + [SMALL_STATE(631)] = 34678, + [SMALL_STATE(632)] = 34726, + [SMALL_STATE(633)] = 34774, + [SMALL_STATE(634)] = 34822, + [SMALL_STATE(635)] = 34870, + [SMALL_STATE(636)] = 34918, + [SMALL_STATE(637)] = 34990, + [SMALL_STATE(638)] = 35038, + [SMALL_STATE(639)] = 35086, + [SMALL_STATE(640)] = 35134, + [SMALL_STATE(641)] = 35182, + [SMALL_STATE(642)] = 35230, + [SMALL_STATE(643)] = 35278, + [SMALL_STATE(644)] = 35360, + [SMALL_STATE(645)] = 35408, + [SMALL_STATE(646)] = 35465, + [SMALL_STATE(647)] = 35532, + [SMALL_STATE(648)] = 35589, + [SMALL_STATE(649)] = 35646, + [SMALL_STATE(650)] = 35709, + [SMALL_STATE(651)] = 35766, + [SMALL_STATE(652)] = 35827, + [SMALL_STATE(653)] = 35898, + [SMALL_STATE(654)] = 35967, + [SMALL_STATE(655)] = 36028, + [SMALL_STATE(656)] = 36085, + [SMALL_STATE(657)] = 36150, + [SMALL_STATE(658)] = 36215, + [SMALL_STATE(659)] = 36284, + [SMALL_STATE(660)] = 36355, + [SMALL_STATE(661)] = 36422, + [SMALL_STATE(662)] = 36479, + [SMALL_STATE(663)] = 36550, + [SMALL_STATE(664)] = 36621, + [SMALL_STATE(665)] = 36692, + [SMALL_STATE(666)] = 36763, + [SMALL_STATE(667)] = 36826, + [SMALL_STATE(668)] = 36874, + [SMALL_STATE(669)] = 36922, + [SMALL_STATE(670)] = 36988, + [SMALL_STATE(671)] = 37054, + [SMALL_STATE(672)] = 37100, + [SMALL_STATE(673)] = 37146, + [SMALL_STATE(674)] = 37212, + [SMALL_STATE(675)] = 37260, + [SMALL_STATE(676)] = 37308, + [SMALL_STATE(677)] = 37374, + [SMALL_STATE(678)] = 37424, + [SMALL_STATE(679)] = 37474, + [SMALL_STATE(680)] = 37537, + [SMALL_STATE(681)] = 37600, + [SMALL_STATE(682)] = 37663, + [SMALL_STATE(683)] = 37726, + [SMALL_STATE(684)] = 37789, + [SMALL_STATE(685)] = 37868, + [SMALL_STATE(686)] = 37935, + [SMALL_STATE(687)] = 37998, + [SMALL_STATE(688)] = 38061, + [SMALL_STATE(689)] = 38124, + [SMALL_STATE(690)] = 38173, + [SMALL_STATE(691)] = 38236, + [SMALL_STATE(692)] = 38299, + [SMALL_STATE(693)] = 38362, + [SMALL_STATE(694)] = 38425, + [SMALL_STATE(695)] = 38488, + [SMALL_STATE(696)] = 38551, + [SMALL_STATE(697)] = 38614, + [SMALL_STATE(698)] = 38677, + [SMALL_STATE(699)] = 38740, + [SMALL_STATE(700)] = 38803, + [SMALL_STATE(701)] = 38866, + [SMALL_STATE(702)] = 38929, + [SMALL_STATE(703)] = 38992, + [SMALL_STATE(704)] = 39055, + [SMALL_STATE(705)] = 39118, + [SMALL_STATE(706)] = 39181, + [SMALL_STATE(707)] = 39244, + [SMALL_STATE(708)] = 39307, + [SMALL_STATE(709)] = 39370, + [SMALL_STATE(710)] = 39433, + [SMALL_STATE(711)] = 39496, + [SMALL_STATE(712)] = 39559, + [SMALL_STATE(713)] = 39622, + [SMALL_STATE(714)] = 39671, + [SMALL_STATE(715)] = 39734, + [SMALL_STATE(716)] = 39801, + [SMALL_STATE(717)] = 39864, + [SMALL_STATE(718)] = 39927, + [SMALL_STATE(719)] = 39990, + [SMALL_STATE(720)] = 40053, + [SMALL_STATE(721)] = 40102, + [SMALL_STATE(722)] = 40165, + [SMALL_STATE(723)] = 40228, + [SMALL_STATE(724)] = 40291, + [SMALL_STATE(725)] = 40354, + [SMALL_STATE(726)] = 40399, + [SMALL_STATE(727)] = 40462, + [SMALL_STATE(728)] = 40507, + [SMALL_STATE(729)] = 40570, + [SMALL_STATE(730)] = 40633, + [SMALL_STATE(731)] = 40696, + [SMALL_STATE(732)] = 40764, + [SMALL_STATE(733)] = 40824, + [SMALL_STATE(734)] = 40892, + [SMALL_STATE(735)] = 40960, + [SMALL_STATE(736)] = 41014, + [SMALL_STATE(737)] = 41058, + [SMALL_STATE(738)] = 41124, + [SMALL_STATE(739)] = 41182, + [SMALL_STATE(740)] = 41236, + [SMALL_STATE(741)] = 41312, + [SMALL_STATE(742)] = 41376, + [SMALL_STATE(743)] = 41424, + [SMALL_STATE(744)] = 41486, + [SMALL_STATE(745)] = 41530, + [SMALL_STATE(746)] = 41584, + [SMALL_STATE(747)] = 41651, + [SMALL_STATE(748)] = 41708, + [SMALL_STATE(749)] = 41753, + [SMALL_STATE(750)] = 41800, + [SMALL_STATE(751)] = 41865, + [SMALL_STATE(752)] = 41932, + [SMALL_STATE(753)] = 41991, + [SMALL_STATE(754)] = 42044, + [SMALL_STATE(755)] = 42089, + [SMALL_STATE(756)] = 42134, + [SMALL_STATE(757)] = 42187, + [SMALL_STATE(758)] = 42254, + [SMALL_STATE(759)] = 42297, + [SMALL_STATE(760)] = 42344, + [SMALL_STATE(761)] = 42391, + [SMALL_STATE(762)] = 42454, + [SMALL_STATE(763)] = 42499, + [SMALL_STATE(764)] = 42560, + [SMALL_STATE(765)] = 42607, + [SMALL_STATE(766)] = 42652, + [SMALL_STATE(767)] = 42705, + [SMALL_STATE(768)] = 42750, + [SMALL_STATE(769)] = 42795, + [SMALL_STATE(770)] = 42838, + [SMALL_STATE(771)] = 42883, + [SMALL_STATE(772)] = 42925, + [SMALL_STATE(773)] = 42967, + [SMALL_STATE(774)] = 43009, + [SMALL_STATE(775)] = 43051, + [SMALL_STATE(776)] = 43093, + [SMALL_STATE(777)] = 43135, + [SMALL_STATE(778)] = 43177, + [SMALL_STATE(779)] = 43219, + [SMALL_STATE(780)] = 43263, + [SMALL_STATE(781)] = 43305, + [SMALL_STATE(782)] = 43347, + [SMALL_STATE(783)] = 43389, + [SMALL_STATE(784)] = 43431, + [SMALL_STATE(785)] = 43473, + [SMALL_STATE(786)] = 43515, + [SMALL_STATE(787)] = 43557, + [SMALL_STATE(788)] = 43599, + [SMALL_STATE(789)] = 43641, + [SMALL_STATE(790)] = 43685, + [SMALL_STATE(791)] = 43727, + [SMALL_STATE(792)] = 43769, + [SMALL_STATE(793)] = 43811, + [SMALL_STATE(794)] = 43853, + [SMALL_STATE(795)] = 43895, + [SMALL_STATE(796)] = 43937, + [SMALL_STATE(797)] = 43979, + [SMALL_STATE(798)] = 44021, + [SMALL_STATE(799)] = 44065, + [SMALL_STATE(800)] = 44107, + [SMALL_STATE(801)] = 44149, + [SMALL_STATE(802)] = 44193, + [SMALL_STATE(803)] = 44235, + [SMALL_STATE(804)] = 44277, + [SMALL_STATE(805)] = 44319, + [SMALL_STATE(806)] = 44361, + [SMALL_STATE(807)] = 44405, + [SMALL_STATE(808)] = 44447, + [SMALL_STATE(809)] = 44489, + [SMALL_STATE(810)] = 44530, + [SMALL_STATE(811)] = 44571, + [SMALL_STATE(812)] = 44612, + [SMALL_STATE(813)] = 44657, + [SMALL_STATE(814)] = 44698, + [SMALL_STATE(815)] = 44739, + [SMALL_STATE(816)] = 44780, + [SMALL_STATE(817)] = 44821, + [SMALL_STATE(818)] = 44862, + [SMALL_STATE(819)] = 44903, + [SMALL_STATE(820)] = 44944, + [SMALL_STATE(821)] = 44985, + [SMALL_STATE(822)] = 45026, + [SMALL_STATE(823)] = 45067, + [SMALL_STATE(824)] = 45108, + [SMALL_STATE(825)] = 45149, + [SMALL_STATE(826)] = 45190, + [SMALL_STATE(827)] = 45231, + [SMALL_STATE(828)] = 45272, + [SMALL_STATE(829)] = 45313, + [SMALL_STATE(830)] = 45354, + [SMALL_STATE(831)] = 45395, + [SMALL_STATE(832)] = 45436, + [SMALL_STATE(833)] = 45477, + [SMALL_STATE(834)] = 45518, + [SMALL_STATE(835)] = 45559, + [SMALL_STATE(836)] = 45600, + [SMALL_STATE(837)] = 45641, + [SMALL_STATE(838)] = 45686, + [SMALL_STATE(839)] = 45727, + [SMALL_STATE(840)] = 45768, + [SMALL_STATE(841)] = 45809, + [SMALL_STATE(842)] = 45850, + [SMALL_STATE(843)] = 45891, + [SMALL_STATE(844)] = 45932, + [SMALL_STATE(845)] = 45973, + [SMALL_STATE(846)] = 46014, + [SMALL_STATE(847)] = 46055, + [SMALL_STATE(848)] = 46096, + [SMALL_STATE(849)] = 46137, + [SMALL_STATE(850)] = 46211, + [SMALL_STATE(851)] = 46285, + [SMALL_STATE(852)] = 46359, + [SMALL_STATE(853)] = 46433, + [SMALL_STATE(854)] = 46506, + [SMALL_STATE(855)] = 46577, + [SMALL_STATE(856)] = 46648, + [SMALL_STATE(857)] = 46719, + [SMALL_STATE(858)] = 46790, + [SMALL_STATE(859)] = 46861, + [SMALL_STATE(860)] = 46929, + [SMALL_STATE(861)] = 47001, + [SMALL_STATE(862)] = 47073, + [SMALL_STATE(863)] = 47145, + [SMALL_STATE(864)] = 47211, + [SMALL_STATE(865)] = 47274, + [SMALL_STATE(866)] = 47337, + [SMALL_STATE(867)] = 47392, + [SMALL_STATE(868)] = 47447, + [SMALL_STATE(869)] = 47487, + [SMALL_STATE(870)] = 47527, + [SMALL_STATE(871)] = 47567, + [SMALL_STATE(872)] = 47607, + [SMALL_STATE(873)] = 47637, + [SMALL_STATE(874)] = 47662, + [SMALL_STATE(875)] = 47687, + [SMALL_STATE(876)] = 47712, + [SMALL_STATE(877)] = 47737, + [SMALL_STATE(878)] = 47774, + [SMALL_STATE(879)] = 47811, + [SMALL_STATE(880)] = 47840, + [SMALL_STATE(881)] = 47869, + [SMALL_STATE(882)] = 47903, + [SMALL_STATE(883)] = 47949, + [SMALL_STATE(884)] = 47983, + [SMALL_STATE(885)] = 48011, + [SMALL_STATE(886)] = 48054, + [SMALL_STATE(887)] = 48097, + [SMALL_STATE(888)] = 48140, + [SMALL_STATE(889)] = 48183, + [SMALL_STATE(890)] = 48214, + [SMALL_STATE(891)] = 48257, + [SMALL_STATE(892)] = 48303, + [SMALL_STATE(893)] = 48349, + [SMALL_STATE(894)] = 48389, + [SMALL_STATE(895)] = 48435, + [SMALL_STATE(896)] = 48472, + [SMALL_STATE(897)] = 48509, + [SMALL_STATE(898)] = 48534, + [SMALL_STATE(899)] = 48571, + [SMALL_STATE(900)] = 48608, + [SMALL_STATE(901)] = 48630, + [SMALL_STATE(902)] = 48652, + [SMALL_STATE(903)] = 48686, + [SMALL_STATE(904)] = 48720, + [SMALL_STATE(905)] = 48742, + [SMALL_STATE(906)] = 48779, + [SMALL_STATE(907)] = 48801, + [SMALL_STATE(908)] = 48838, + [SMALL_STATE(909)] = 48861, + [SMALL_STATE(910)] = 48886, + [SMALL_STATE(911)] = 48909, + [SMALL_STATE(912)] = 48946, + [SMALL_STATE(913)] = 48971, + [SMALL_STATE(914)] = 48992, + [SMALL_STATE(915)] = 49015, + [SMALL_STATE(916)] = 49052, + [SMALL_STATE(917)] = 49073, + [SMALL_STATE(918)] = 49090, + [SMALL_STATE(919)] = 49127, + [SMALL_STATE(920)] = 49150, + [SMALL_STATE(921)] = 49169, + [SMALL_STATE(922)] = 49190, + [SMALL_STATE(923)] = 49213, + [SMALL_STATE(924)] = 49238, + [SMALL_STATE(925)] = 49261, + [SMALL_STATE(926)] = 49284, + [SMALL_STATE(927)] = 49305, + [SMALL_STATE(928)] = 49326, + [SMALL_STATE(929)] = 49349, + [SMALL_STATE(930)] = 49376, + [SMALL_STATE(931)] = 49410, + [SMALL_STATE(932)] = 49444, + [SMALL_STATE(933)] = 49478, + [SMALL_STATE(934)] = 49500, + [SMALL_STATE(935)] = 49530, + [SMALL_STATE(936)] = 49564, + [SMALL_STATE(937)] = 49594, + [SMALL_STATE(938)] = 49624, + [SMALL_STATE(939)] = 49654, + [SMALL_STATE(940)] = 49676, + [SMALL_STATE(941)] = 49710, + [SMALL_STATE(942)] = 49744, + [SMALL_STATE(943)] = 49774, + [SMALL_STATE(944)] = 49792, + [SMALL_STATE(945)] = 49822, + [SMALL_STATE(946)] = 49856, + [SMALL_STATE(947)] = 49890, + [SMALL_STATE(948)] = 49912, + [SMALL_STATE(949)] = 49934, + [SMALL_STATE(950)] = 49964, + [SMALL_STATE(951)] = 49994, + [SMALL_STATE(952)] = 50012, + [SMALL_STATE(953)] = 50042, + [SMALL_STATE(954)] = 50076, + [SMALL_STATE(955)] = 50095, + [SMALL_STATE(956)] = 50118, + [SMALL_STATE(957)] = 50141, + [SMALL_STATE(958)] = 50160, + [SMALL_STATE(959)] = 50179, + [SMALL_STATE(960)] = 50202, + [SMALL_STATE(961)] = 50227, + [SMALL_STATE(962)] = 50246, + [SMALL_STATE(963)] = 50265, + [SMALL_STATE(964)] = 50284, + [SMALL_STATE(965)] = 50302, + [SMALL_STATE(966)] = 50326, + [SMALL_STATE(967)] = 50340, + [SMALL_STATE(968)] = 50354, + [SMALL_STATE(969)] = 50368, + [SMALL_STATE(970)] = 50382, + [SMALL_STATE(971)] = 50396, + [SMALL_STATE(972)] = 50412, + [SMALL_STATE(973)] = 50426, + [SMALL_STATE(974)] = 50440, + [SMALL_STATE(975)] = 50458, + [SMALL_STATE(976)] = 50472, + [SMALL_STATE(977)] = 50486, + [SMALL_STATE(978)] = 50500, + [SMALL_STATE(979)] = 50518, + [SMALL_STATE(980)] = 50536, + [SMALL_STATE(981)] = 50554, + [SMALL_STATE(982)] = 50568, + [SMALL_STATE(983)] = 50594, + [SMALL_STATE(984)] = 50618, + [SMALL_STATE(985)] = 50632, + [SMALL_STATE(986)] = 50650, + [SMALL_STATE(987)] = 50664, + [SMALL_STATE(988)] = 50678, + [SMALL_STATE(989)] = 50692, + [SMALL_STATE(990)] = 50706, + [SMALL_STATE(991)] = 50720, + [SMALL_STATE(992)] = 50744, + [SMALL_STATE(993)] = 50764, + [SMALL_STATE(994)] = 50778, + [SMALL_STATE(995)] = 50796, + [SMALL_STATE(996)] = 50814, + [SMALL_STATE(997)] = 50838, + [SMALL_STATE(998)] = 50858, + [SMALL_STATE(999)] = 50872, + [SMALL_STATE(1000)] = 50894, + [SMALL_STATE(1001)] = 50912, + [SMALL_STATE(1002)] = 50928, + [SMALL_STATE(1003)] = 50952, + [SMALL_STATE(1004)] = 50976, + [SMALL_STATE(1005)] = 50990, + [SMALL_STATE(1006)] = 51008, + [SMALL_STATE(1007)] = 51022, + [SMALL_STATE(1008)] = 51042, + [SMALL_STATE(1009)] = 51056, + [SMALL_STATE(1010)] = 51070, + [SMALL_STATE(1011)] = 51084, + [SMALL_STATE(1012)] = 51098, + [SMALL_STATE(1013)] = 51116, + [SMALL_STATE(1014)] = 51134, + [SMALL_STATE(1015)] = 51157, + [SMALL_STATE(1016)] = 51170, + [SMALL_STATE(1017)] = 51193, + [SMALL_STATE(1018)] = 51206, + [SMALL_STATE(1019)] = 51219, + [SMALL_STATE(1020)] = 51242, + [SMALL_STATE(1021)] = 51261, + [SMALL_STATE(1022)] = 51286, + [SMALL_STATE(1023)] = 51305, + [SMALL_STATE(1024)] = 51318, + [SMALL_STATE(1025)] = 51333, + [SMALL_STATE(1026)] = 51350, + [SMALL_STATE(1027)] = 51373, + [SMALL_STATE(1028)] = 51392, + [SMALL_STATE(1029)] = 51409, + [SMALL_STATE(1030)] = 51424, + [SMALL_STATE(1031)] = 51441, + [SMALL_STATE(1032)] = 51462, + [SMALL_STATE(1033)] = 51481, + [SMALL_STATE(1034)] = 51494, + [SMALL_STATE(1035)] = 51517, + [SMALL_STATE(1036)] = 51536, + [SMALL_STATE(1037)] = 51555, + [SMALL_STATE(1038)] = 51574, + [SMALL_STATE(1039)] = 51599, + [SMALL_STATE(1040)] = 51618, + [SMALL_STATE(1041)] = 51643, + [SMALL_STATE(1042)] = 51656, + [SMALL_STATE(1043)] = 51669, + [SMALL_STATE(1044)] = 51692, + [SMALL_STATE(1045)] = 51715, + [SMALL_STATE(1046)] = 51738, + [SMALL_STATE(1047)] = 51761, + [SMALL_STATE(1048)] = 51786, + [SMALL_STATE(1049)] = 51805, + [SMALL_STATE(1050)] = 51830, + [SMALL_STATE(1051)] = 51851, + [SMALL_STATE(1052)] = 51864, + [SMALL_STATE(1053)] = 51889, + [SMALL_STATE(1054)] = 51908, + [SMALL_STATE(1055)] = 51927, + [SMALL_STATE(1056)] = 51948, + [SMALL_STATE(1057)] = 51973, + [SMALL_STATE(1058)] = 51989, + [SMALL_STATE(1059)] = 52005, + [SMALL_STATE(1060)] = 52027, + [SMALL_STATE(1061)] = 52041, + [SMALL_STATE(1062)] = 52057, + [SMALL_STATE(1063)] = 52073, + [SMALL_STATE(1064)] = 52093, + [SMALL_STATE(1065)] = 52113, + [SMALL_STATE(1066)] = 52131, + [SMALL_STATE(1067)] = 52149, + [SMALL_STATE(1068)] = 52163, + [SMALL_STATE(1069)] = 52179, + [SMALL_STATE(1070)] = 52193, + [SMALL_STATE(1071)] = 52215, + [SMALL_STATE(1072)] = 52237, + [SMALL_STATE(1073)] = 52251, + [SMALL_STATE(1074)] = 52269, + [SMALL_STATE(1075)] = 52283, + [SMALL_STATE(1076)] = 52305, + [SMALL_STATE(1077)] = 52319, + [SMALL_STATE(1078)] = 52335, + [SMALL_STATE(1079)] = 52353, + [SMALL_STATE(1080)] = 52375, + [SMALL_STATE(1081)] = 52397, + [SMALL_STATE(1082)] = 52417, + [SMALL_STATE(1083)] = 52435, + [SMALL_STATE(1084)] = 52455, + [SMALL_STATE(1085)] = 52473, + [SMALL_STATE(1086)] = 52495, + [SMALL_STATE(1087)] = 52515, + [SMALL_STATE(1088)] = 52527, + [SMALL_STATE(1089)] = 52543, + [SMALL_STATE(1090)] = 52555, + [SMALL_STATE(1091)] = 52572, + [SMALL_STATE(1092)] = 52589, + [SMALL_STATE(1093)] = 52604, + [SMALL_STATE(1094)] = 52621, + [SMALL_STATE(1095)] = 52638, + [SMALL_STATE(1096)] = 52655, + [SMALL_STATE(1097)] = 52670, + [SMALL_STATE(1098)] = 52689, + [SMALL_STATE(1099)] = 52706, + [SMALL_STATE(1100)] = 52725, + [SMALL_STATE(1101)] = 52740, + [SMALL_STATE(1102)] = 52751, + [SMALL_STATE(1103)] = 52768, + [SMALL_STATE(1104)] = 52785, + [SMALL_STATE(1105)] = 52804, + [SMALL_STATE(1106)] = 52821, + [SMALL_STATE(1107)] = 52832, + [SMALL_STATE(1108)] = 52851, + [SMALL_STATE(1109)] = 52870, + [SMALL_STATE(1110)] = 52887, + [SMALL_STATE(1111)] = 52898, + [SMALL_STATE(1112)] = 52913, + [SMALL_STATE(1113)] = 52928, + [SMALL_STATE(1114)] = 52945, + [SMALL_STATE(1115)] = 52960, + [SMALL_STATE(1116)] = 52975, + [SMALL_STATE(1117)] = 52994, + [SMALL_STATE(1118)] = 53013, + [SMALL_STATE(1119)] = 53030, + [SMALL_STATE(1120)] = 53047, + [SMALL_STATE(1121)] = 53066, + [SMALL_STATE(1122)] = 53083, + [SMALL_STATE(1123)] = 53100, + [SMALL_STATE(1124)] = 53119, + [SMALL_STATE(1125)] = 53136, + [SMALL_STATE(1126)] = 53155, + [SMALL_STATE(1127)] = 53172, + [SMALL_STATE(1128)] = 53189, + [SMALL_STATE(1129)] = 53205, + [SMALL_STATE(1130)] = 53219, + [SMALL_STATE(1131)] = 53235, + [SMALL_STATE(1132)] = 53251, + [SMALL_STATE(1133)] = 53267, + [SMALL_STATE(1134)] = 53279, + [SMALL_STATE(1135)] = 53295, + [SMALL_STATE(1136)] = 53311, + [SMALL_STATE(1137)] = 53327, + [SMALL_STATE(1138)] = 53341, + [SMALL_STATE(1139)] = 53355, + [SMALL_STATE(1140)] = 53369, + [SMALL_STATE(1141)] = 53385, + [SMALL_STATE(1142)] = 53401, + [SMALL_STATE(1143)] = 53417, + [SMALL_STATE(1144)] = 53431, + [SMALL_STATE(1145)] = 53445, + [SMALL_STATE(1146)] = 53461, + [SMALL_STATE(1147)] = 53475, + [SMALL_STATE(1148)] = 53491, + [SMALL_STATE(1149)] = 53507, + [SMALL_STATE(1150)] = 53523, + [SMALL_STATE(1151)] = 53537, + [SMALL_STATE(1152)] = 53553, + [SMALL_STATE(1153)] = 53569, + [SMALL_STATE(1154)] = 53585, + [SMALL_STATE(1155)] = 53599, + [SMALL_STATE(1156)] = 53613, + [SMALL_STATE(1157)] = 53629, + [SMALL_STATE(1158)] = 53645, + [SMALL_STATE(1159)] = 53661, + [SMALL_STATE(1160)] = 53677, + [SMALL_STATE(1161)] = 53691, + [SMALL_STATE(1162)] = 53707, + [SMALL_STATE(1163)] = 53721, + [SMALL_STATE(1164)] = 53735, + [SMALL_STATE(1165)] = 53749, + [SMALL_STATE(1166)] = 53763, + [SMALL_STATE(1167)] = 53773, + [SMALL_STATE(1168)] = 53787, + [SMALL_STATE(1169)] = 53801, + [SMALL_STATE(1170)] = 53817, + [SMALL_STATE(1171)] = 53827, + [SMALL_STATE(1172)] = 53841, + [SMALL_STATE(1173)] = 53855, + [SMALL_STATE(1174)] = 53871, + [SMALL_STATE(1175)] = 53885, + [SMALL_STATE(1176)] = 53895, + [SMALL_STATE(1177)] = 53911, + [SMALL_STATE(1178)] = 53925, + [SMALL_STATE(1179)] = 53939, + [SMALL_STATE(1180)] = 53953, + [SMALL_STATE(1181)] = 53967, + [SMALL_STATE(1182)] = 53983, + [SMALL_STATE(1183)] = 53999, + [SMALL_STATE(1184)] = 54011, + [SMALL_STATE(1185)] = 54025, + [SMALL_STATE(1186)] = 54035, + [SMALL_STATE(1187)] = 54051, + [SMALL_STATE(1188)] = 54061, + [SMALL_STATE(1189)] = 54077, + [SMALL_STATE(1190)] = 54091, + [SMALL_STATE(1191)] = 54105, + [SMALL_STATE(1192)] = 54119, + [SMALL_STATE(1193)] = 54133, + [SMALL_STATE(1194)] = 54149, + [SMALL_STATE(1195)] = 54162, + [SMALL_STATE(1196)] = 54175, + [SMALL_STATE(1197)] = 54188, + [SMALL_STATE(1198)] = 54201, + [SMALL_STATE(1199)] = 54210, + [SMALL_STATE(1200)] = 54223, + [SMALL_STATE(1201)] = 54236, + [SMALL_STATE(1202)] = 54245, + [SMALL_STATE(1203)] = 54258, + [SMALL_STATE(1204)] = 54271, + [SMALL_STATE(1205)] = 54284, + [SMALL_STATE(1206)] = 54297, + [SMALL_STATE(1207)] = 54310, + [SMALL_STATE(1208)] = 54319, + [SMALL_STATE(1209)] = 54332, + [SMALL_STATE(1210)] = 54345, + [SMALL_STATE(1211)] = 54358, + [SMALL_STATE(1212)] = 54371, + [SMALL_STATE(1213)] = 54384, + [SMALL_STATE(1214)] = 54397, + [SMALL_STATE(1215)] = 54410, + [SMALL_STATE(1216)] = 54423, + [SMALL_STATE(1217)] = 54436, + [SMALL_STATE(1218)] = 54447, + [SMALL_STATE(1219)] = 54460, + [SMALL_STATE(1220)] = 54473, + [SMALL_STATE(1221)] = 54486, + [SMALL_STATE(1222)] = 54499, + [SMALL_STATE(1223)] = 54510, + [SMALL_STATE(1224)] = 54519, + [SMALL_STATE(1225)] = 54532, + [SMALL_STATE(1226)] = 54545, + [SMALL_STATE(1227)] = 54554, + [SMALL_STATE(1228)] = 54567, + [SMALL_STATE(1229)] = 54580, + [SMALL_STATE(1230)] = 54593, + [SMALL_STATE(1231)] = 54606, + [SMALL_STATE(1232)] = 54619, + [SMALL_STATE(1233)] = 54632, + [SMALL_STATE(1234)] = 54643, + [SMALL_STATE(1235)] = 54656, + [SMALL_STATE(1236)] = 54669, + [SMALL_STATE(1237)] = 54682, + [SMALL_STATE(1238)] = 54695, + [SMALL_STATE(1239)] = 54708, + [SMALL_STATE(1240)] = 54721, + [SMALL_STATE(1241)] = 54734, + [SMALL_STATE(1242)] = 54747, + [SMALL_STATE(1243)] = 54760, + [SMALL_STATE(1244)] = 54773, + [SMALL_STATE(1245)] = 54786, + [SMALL_STATE(1246)] = 54797, + [SMALL_STATE(1247)] = 54810, + [SMALL_STATE(1248)] = 54823, + [SMALL_STATE(1249)] = 54836, + [SMALL_STATE(1250)] = 54849, + [SMALL_STATE(1251)] = 54858, + [SMALL_STATE(1252)] = 54871, + [SMALL_STATE(1253)] = 54884, + [SMALL_STATE(1254)] = 54895, + [SMALL_STATE(1255)] = 54908, + [SMALL_STATE(1256)] = 54921, + [SMALL_STATE(1257)] = 54934, + [SMALL_STATE(1258)] = 54947, + [SMALL_STATE(1259)] = 54960, + [SMALL_STATE(1260)] = 54973, + [SMALL_STATE(1261)] = 54986, + [SMALL_STATE(1262)] = 54999, + [SMALL_STATE(1263)] = 55012, + [SMALL_STATE(1264)] = 55023, + [SMALL_STATE(1265)] = 55036, + [SMALL_STATE(1266)] = 55047, + [SMALL_STATE(1267)] = 55060, + [SMALL_STATE(1268)] = 55071, + [SMALL_STATE(1269)] = 55084, + [SMALL_STATE(1270)] = 55095, + [SMALL_STATE(1271)] = 55104, + [SMALL_STATE(1272)] = 55117, + [SMALL_STATE(1273)] = 55130, + [SMALL_STATE(1274)] = 55143, + [SMALL_STATE(1275)] = 55156, + [SMALL_STATE(1276)] = 55169, + [SMALL_STATE(1277)] = 55182, + [SMALL_STATE(1278)] = 55195, + [SMALL_STATE(1279)] = 55208, + [SMALL_STATE(1280)] = 55221, + [SMALL_STATE(1281)] = 55234, + [SMALL_STATE(1282)] = 55243, + [SMALL_STATE(1283)] = 55256, + [SMALL_STATE(1284)] = 55269, + [SMALL_STATE(1285)] = 55282, + [SMALL_STATE(1286)] = 55295, + [SMALL_STATE(1287)] = 55308, + [SMALL_STATE(1288)] = 55319, + [SMALL_STATE(1289)] = 55330, + [SMALL_STATE(1290)] = 55343, + [SMALL_STATE(1291)] = 55356, + [SMALL_STATE(1292)] = 55365, + [SMALL_STATE(1293)] = 55378, + [SMALL_STATE(1294)] = 55391, + [SMALL_STATE(1295)] = 55404, + [SMALL_STATE(1296)] = 55417, + [SMALL_STATE(1297)] = 55430, + [SMALL_STATE(1298)] = 55443, + [SMALL_STATE(1299)] = 55456, + [SMALL_STATE(1300)] = 55469, + [SMALL_STATE(1301)] = 55482, + [SMALL_STATE(1302)] = 55495, + [SMALL_STATE(1303)] = 55508, + [SMALL_STATE(1304)] = 55521, + [SMALL_STATE(1305)] = 55532, + [SMALL_STATE(1306)] = 55545, + [SMALL_STATE(1307)] = 55558, + [SMALL_STATE(1308)] = 55569, + [SMALL_STATE(1309)] = 55578, + [SMALL_STATE(1310)] = 55591, + [SMALL_STATE(1311)] = 55604, + [SMALL_STATE(1312)] = 55617, + [SMALL_STATE(1313)] = 55630, + [SMALL_STATE(1314)] = 55643, + [SMALL_STATE(1315)] = 55656, + [SMALL_STATE(1316)] = 55669, + [SMALL_STATE(1317)] = 55682, + [SMALL_STATE(1318)] = 55695, + [SMALL_STATE(1319)] = 55704, + [SMALL_STATE(1320)] = 55717, + [SMALL_STATE(1321)] = 55730, + [SMALL_STATE(1322)] = 55743, + [SMALL_STATE(1323)] = 55752, + [SMALL_STATE(1324)] = 55765, + [SMALL_STATE(1325)] = 55776, + [SMALL_STATE(1326)] = 55789, + [SMALL_STATE(1327)] = 55802, + [SMALL_STATE(1328)] = 55815, + [SMALL_STATE(1329)] = 55828, + [SMALL_STATE(1330)] = 55841, + [SMALL_STATE(1331)] = 55854, + [SMALL_STATE(1332)] = 55867, + [SMALL_STATE(1333)] = 55878, + [SMALL_STATE(1334)] = 55887, + [SMALL_STATE(1335)] = 55900, + [SMALL_STATE(1336)] = 55911, + [SMALL_STATE(1337)] = 55924, + [SMALL_STATE(1338)] = 55937, + [SMALL_STATE(1339)] = 55950, + [SMALL_STATE(1340)] = 55961, + [SMALL_STATE(1341)] = 55970, + [SMALL_STATE(1342)] = 55978, + [SMALL_STATE(1343)] = 55986, + [SMALL_STATE(1344)] = 55994, + [SMALL_STATE(1345)] = 56004, + [SMALL_STATE(1346)] = 56012, + [SMALL_STATE(1347)] = 56020, + [SMALL_STATE(1348)] = 56028, + [SMALL_STATE(1349)] = 56036, + [SMALL_STATE(1350)] = 56044, + [SMALL_STATE(1351)] = 56052, + [SMALL_STATE(1352)] = 56060, + [SMALL_STATE(1353)] = 56068, + [SMALL_STATE(1354)] = 56078, + [SMALL_STATE(1355)] = 56088, + [SMALL_STATE(1356)] = 56096, + [SMALL_STATE(1357)] = 56106, + [SMALL_STATE(1358)] = 56116, + [SMALL_STATE(1359)] = 56126, + [SMALL_STATE(1360)] = 56136, + [SMALL_STATE(1361)] = 56146, + [SMALL_STATE(1362)] = 56154, + [SMALL_STATE(1363)] = 56162, + [SMALL_STATE(1364)] = 56172, + [SMALL_STATE(1365)] = 56180, + [SMALL_STATE(1366)] = 56190, + [SMALL_STATE(1367)] = 56200, + [SMALL_STATE(1368)] = 56208, + [SMALL_STATE(1369)] = 56218, + [SMALL_STATE(1370)] = 56226, + [SMALL_STATE(1371)] = 56236, + [SMALL_STATE(1372)] = 56246, + [SMALL_STATE(1373)] = 56256, + [SMALL_STATE(1374)] = 56264, + [SMALL_STATE(1375)] = 56272, + [SMALL_STATE(1376)] = 56282, + [SMALL_STATE(1377)] = 56292, + [SMALL_STATE(1378)] = 56302, + [SMALL_STATE(1379)] = 56312, + [SMALL_STATE(1380)] = 56320, + [SMALL_STATE(1381)] = 56328, + [SMALL_STATE(1382)] = 56338, + [SMALL_STATE(1383)] = 56346, + [SMALL_STATE(1384)] = 56354, + [SMALL_STATE(1385)] = 56362, + [SMALL_STATE(1386)] = 56370, + [SMALL_STATE(1387)] = 56378, + [SMALL_STATE(1388)] = 56388, + [SMALL_STATE(1389)] = 56396, + [SMALL_STATE(1390)] = 56404, + [SMALL_STATE(1391)] = 56414, + [SMALL_STATE(1392)] = 56422, + [SMALL_STATE(1393)] = 56432, + [SMALL_STATE(1394)] = 56440, + [SMALL_STATE(1395)] = 56448, + [SMALL_STATE(1396)] = 56456, + [SMALL_STATE(1397)] = 56466, + [SMALL_STATE(1398)] = 56474, + [SMALL_STATE(1399)] = 56482, + [SMALL_STATE(1400)] = 56490, + [SMALL_STATE(1401)] = 56498, + [SMALL_STATE(1402)] = 56508, + [SMALL_STATE(1403)] = 56516, + [SMALL_STATE(1404)] = 56524, + [SMALL_STATE(1405)] = 56534, + [SMALL_STATE(1406)] = 56541, + [SMALL_STATE(1407)] = 56548, + [SMALL_STATE(1408)] = 56555, + [SMALL_STATE(1409)] = 56562, + [SMALL_STATE(1410)] = 56569, + [SMALL_STATE(1411)] = 56576, + [SMALL_STATE(1412)] = 56583, + [SMALL_STATE(1413)] = 56590, + [SMALL_STATE(1414)] = 56597, + [SMALL_STATE(1415)] = 56604, + [SMALL_STATE(1416)] = 56611, + [SMALL_STATE(1417)] = 56618, + [SMALL_STATE(1418)] = 56625, + [SMALL_STATE(1419)] = 56632, + [SMALL_STATE(1420)] = 56639, + [SMALL_STATE(1421)] = 56646, + [SMALL_STATE(1422)] = 56653, + [SMALL_STATE(1423)] = 56660, + [SMALL_STATE(1424)] = 56667, + [SMALL_STATE(1425)] = 56674, + [SMALL_STATE(1426)] = 56681, + [SMALL_STATE(1427)] = 56688, + [SMALL_STATE(1428)] = 56695, + [SMALL_STATE(1429)] = 56702, + [SMALL_STATE(1430)] = 56709, + [SMALL_STATE(1431)] = 56716, + [SMALL_STATE(1432)] = 56723, + [SMALL_STATE(1433)] = 56730, + [SMALL_STATE(1434)] = 56737, + [SMALL_STATE(1435)] = 56744, + [SMALL_STATE(1436)] = 56751, + [SMALL_STATE(1437)] = 56758, + [SMALL_STATE(1438)] = 56765, + [SMALL_STATE(1439)] = 56772, + [SMALL_STATE(1440)] = 56779, + [SMALL_STATE(1441)] = 56786, + [SMALL_STATE(1442)] = 56793, + [SMALL_STATE(1443)] = 56800, + [SMALL_STATE(1444)] = 56807, + [SMALL_STATE(1445)] = 56814, + [SMALL_STATE(1446)] = 56821, + [SMALL_STATE(1447)] = 56828, + [SMALL_STATE(1448)] = 56835, + [SMALL_STATE(1449)] = 56842, + [SMALL_STATE(1450)] = 56849, + [SMALL_STATE(1451)] = 56856, + [SMALL_STATE(1452)] = 56863, + [SMALL_STATE(1453)] = 56870, + [SMALL_STATE(1454)] = 56877, + [SMALL_STATE(1455)] = 56884, + [SMALL_STATE(1456)] = 56891, + [SMALL_STATE(1457)] = 56898, + [SMALL_STATE(1458)] = 56905, + [SMALL_STATE(1459)] = 56912, + [SMALL_STATE(1460)] = 56919, + [SMALL_STATE(1461)] = 56926, + [SMALL_STATE(1462)] = 56933, + [SMALL_STATE(1463)] = 56940, + [SMALL_STATE(1464)] = 56947, + [SMALL_STATE(1465)] = 56954, + [SMALL_STATE(1466)] = 56961, + [SMALL_STATE(1467)] = 56968, + [SMALL_STATE(1468)] = 56975, + [SMALL_STATE(1469)] = 56982, + [SMALL_STATE(1470)] = 56989, + [SMALL_STATE(1471)] = 56996, + [SMALL_STATE(1472)] = 57003, + [SMALL_STATE(1473)] = 57010, + [SMALL_STATE(1474)] = 57017, + [SMALL_STATE(1475)] = 57024, + [SMALL_STATE(1476)] = 57031, + [SMALL_STATE(1477)] = 57038, + [SMALL_STATE(1478)] = 57045, + [SMALL_STATE(1479)] = 57052, + [SMALL_STATE(1480)] = 57059, + [SMALL_STATE(1481)] = 57066, + [SMALL_STATE(1482)] = 57073, + [SMALL_STATE(1483)] = 57080, + [SMALL_STATE(1484)] = 57087, + [SMALL_STATE(1485)] = 57094, + [SMALL_STATE(1486)] = 57101, + [SMALL_STATE(1487)] = 57108, + [SMALL_STATE(1488)] = 57115, + [SMALL_STATE(1489)] = 57122, + [SMALL_STATE(1490)] = 57129, + [SMALL_STATE(1491)] = 57136, + [SMALL_STATE(1492)] = 57143, + [SMALL_STATE(1493)] = 57150, + [SMALL_STATE(1494)] = 57157, + [SMALL_STATE(1495)] = 57164, + [SMALL_STATE(1496)] = 57171, + [SMALL_STATE(1497)] = 57178, + [SMALL_STATE(1498)] = 57185, + [SMALL_STATE(1499)] = 57192, + [SMALL_STATE(1500)] = 57199, + [SMALL_STATE(1501)] = 57206, + [SMALL_STATE(1502)] = 57213, + [SMALL_STATE(1503)] = 57220, + [SMALL_STATE(1504)] = 57227, + [SMALL_STATE(1505)] = 57234, + [SMALL_STATE(1506)] = 57241, + [SMALL_STATE(1507)] = 57248, + [SMALL_STATE(1508)] = 57255, + [SMALL_STATE(1509)] = 57262, + [SMALL_STATE(1510)] = 57269, + [SMALL_STATE(1511)] = 57276, + [SMALL_STATE(1512)] = 57283, + [SMALL_STATE(1513)] = 57290, + [SMALL_STATE(1514)] = 57297, + [SMALL_STATE(1515)] = 57304, + [SMALL_STATE(1516)] = 57311, + [SMALL_STATE(1517)] = 57318, + [SMALL_STATE(1518)] = 57325, + [SMALL_STATE(1519)] = 57332, + [SMALL_STATE(1520)] = 57339, + [SMALL_STATE(1521)] = 57346, + [SMALL_STATE(1522)] = 57353, + [SMALL_STATE(1523)] = 57360, + [SMALL_STATE(1524)] = 57367, +}; + +static const TSParseActionEntry ts_parse_actions[] = { + [0] = {.entry = {.count = 0, .reusable = false}}, + [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(), + [3] = {.entry = {.count = 1, .reusable = true}}, SHIFT_EXTRA(), + [5] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module, 0), + [7] = {.entry = {.count = 1, .reusable = false}}, SHIFT(330), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1130), + [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1016), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164), + [15] = {.entry = {.count = 1, .reusable = false}}, SHIFT(393), + [17] = {.entry = {.count = 1, .reusable = false}}, SHIFT(75), + [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(394), + [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(201), + [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(231), + [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(181), + [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1345), + [29] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1346), + [31] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1349), + [33] = {.entry = {.count = 1, .reusable = false}}, SHIFT(400), + [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(247), + [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(602), + [39] = {.entry = {.count = 1, .reusable = false}}, SHIFT(404), + [41] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1512), + [43] = {.entry = {.count = 1, .reusable = false}}, SHIFT(296), + [45] = {.entry = {.count = 1, .reusable = false}}, SHIFT(71), + [47] = {.entry = {.count = 1, .reusable = true}}, SHIFT(719), + [49] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), + [51] = {.entry = {.count = 1, .reusable = true}}, SHIFT(166), + [53] = {.entry = {.count = 1, .reusable = true}}, SHIFT(406), + [55] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1511), + [57] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1510), + [59] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1509), + [61] = {.entry = {.count = 1, .reusable = false}}, SHIFT(278), + [63] = {.entry = {.count = 1, .reusable = false}}, SHIFT(284), + [65] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1508), + [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(417), + [69] = {.entry = {.count = 1, .reusable = false}}, SHIFT(419), + [71] = {.entry = {.count = 1, .reusable = false}}, SHIFT(890), + [73] = {.entry = {.count = 1, .reusable = false}}, SHIFT(180), + [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(797), + [77] = {.entry = {.count = 1, .reusable = false}}, SHIFT(797), + [79] = {.entry = {.count = 1, .reusable = false}}, SHIFT(131), + [81] = {.entry = {.count = 1, .reusable = true}}, SHIFT(952), + [83] = {.entry = {.count = 1, .reusable = false}}, SHIFT(424), + [85] = {.entry = {.count = 1, .reusable = false}}, SHIFT(254), + [87] = {.entry = {.count = 1, .reusable = false}}, SHIFT(604), + [89] = {.entry = {.count = 1, .reusable = false}}, SHIFT(423), + [91] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1495), + [93] = {.entry = {.count = 1, .reusable = false}}, SHIFT(298), + [95] = {.entry = {.count = 1, .reusable = false}}, SHIFT(70), + [97] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1516), + [99] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1498), + [101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(370), + [103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(291), + [105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(356), + [107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(281), + [109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(326), + [111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(376), + [113] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1265), + [115] = {.entry = {.count = 1, .reusable = true}}, SHIFT(319), + [117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), + [119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(354), + [121] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(330), + [124] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1130), + [127] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1016), + [130] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(164), + [133] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(393), + [136] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(75), + [139] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(394), + [142] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(201), + [145] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(231), + [148] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(181), + [151] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1345), + [154] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1346), + [157] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1349), + [160] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(424), + [163] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(254), + [166] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(604), + [169] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(423), + [172] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1495), + [175] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(298), + [178] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(70), + [181] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(719), + [184] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(159), + [187] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(166), + [190] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(406), + [193] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1516), + [196] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1510), + [199] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1509), + [202] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(278), + [205] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(284), + [208] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1498), + [211] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(417), + [214] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(419), + [217] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(890), + [220] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(180), + [223] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(797), + [226] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(797), + [229] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(131), + [232] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), + [234] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(952), + [237] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module, 1), + [239] = {.entry = {.count = 1, .reusable = true}}, SHIFT(381), + [241] = {.entry = {.count = 1, .reusable = true}}, SHIFT(359), + [243] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(400), + [246] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(247), + [249] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(602), + [252] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(404), + [255] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1512), + [258] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(296), + [261] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(71), + [264] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1511), + [267] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1508), + [270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(288), + [272] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1324), + [274] = {.entry = {.count = 1, .reusable = false}}, SHIFT(674), + [276] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_primary_expression, 1, .production_id = 1), + [278] = {.entry = {.count = 1, .reusable = true}}, SHIFT(188), + [280] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_pattern, 1, .production_id = 1), REDUCE(sym_primary_expression, 1, .production_id = 1), + [283] = {.entry = {.count = 1, .reusable = false}}, SHIFT(460), + [285] = {.entry = {.count = 1, .reusable = false}}, SHIFT(675), + [287] = {.entry = {.count = 1, .reusable = true}}, SHIFT(385), + [289] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern, 1, .production_id = 1), + [291] = {.entry = {.count = 1, .reusable = false}}, SHIFT(726), + [293] = {.entry = {.count = 1, .reusable = true}}, SHIFT(190), + [295] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169), + [297] = {.entry = {.count = 1, .reusable = false}}, SHIFT(406), + [299] = {.entry = {.count = 1, .reusable = false}}, SHIFT(470), + [301] = {.entry = {.count = 1, .reusable = true}}, SHIFT(726), + [303] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_primary_expression, 1, .production_id = 1), + [305] = {.entry = {.count = 1, .reusable = false}}, SHIFT(886), + [307] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 1, .production_id = 1), + [309] = {.entry = {.count = 1, .reusable = true}}, SHIFT(642), + [311] = {.entry = {.count = 1, .reusable = false}}, SHIFT(642), + [313] = {.entry = {.count = 1, .reusable = false}}, SHIFT(148), + [315] = {.entry = {.count = 1, .reusable = true}}, SHIFT(944), + [317] = {.entry = {.count = 1, .reusable = false}}, SHIFT(334), + [319] = {.entry = {.count = 1, .reusable = true}}, SHIFT(550), + [321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(432), + [325] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [327] = {.entry = {.count = 1, .reusable = true}}, SHIFT(327), + [329] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [331] = {.entry = {.count = 1, .reusable = false}}, SHIFT(754), + [333] = {.entry = {.count = 1, .reusable = false}}, SHIFT(755), + [335] = {.entry = {.count = 1, .reusable = false}}, SHIFT(453), + [337] = {.entry = {.count = 1, .reusable = false}}, SHIFT(150), + [339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(340), + [341] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), + [343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(530), + [345] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [347] = {.entry = {.count = 1, .reusable = true}}, SHIFT(521), + [349] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), + [351] = {.entry = {.count = 1, .reusable = true}}, SHIFT(548), + [353] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), + [355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(325), + [357] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [359] = {.entry = {.count = 1, .reusable = true}}, SHIFT(535), + [361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(508), + [365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(377), + [369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(524), + [373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), + [375] = {.entry = {.count = 1, .reusable = true}}, SHIFT(316), + [377] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [379] = {.entry = {.count = 1, .reusable = true}}, SHIFT(532), + [381] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), + [383] = {.entry = {.count = 1, .reusable = true}}, SHIFT(547), + [385] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [387] = {.entry = {.count = 1, .reusable = true}}, SHIFT(401), + [389] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [391] = {.entry = {.count = 1, .reusable = true}}, SHIFT(502), + [393] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), + [395] = {.entry = {.count = 1, .reusable = true}}, SHIFT(526), + [397] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), + [399] = {.entry = {.count = 1, .reusable = true}}, SHIFT(527), + [401] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), + [403] = {.entry = {.count = 1, .reusable = true}}, SHIFT(531), + [405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), + [407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(268), + [409] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), + [411] = {.entry = {.count = 1, .reusable = true}}, SHIFT(538), + [413] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), + [415] = {.entry = {.count = 1, .reusable = true}}, SHIFT(594), + [417] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), + [419] = {.entry = {.count = 1, .reusable = true}}, SHIFT(965), + [421] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55), + [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(464), + [425] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [427] = {.entry = {.count = 1, .reusable = true}}, SHIFT(353), + [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), + [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(542), + [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(331), + [437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), + [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(592), + [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(492), + [445] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(332), + [449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(544), + [453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), + [455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(582), + [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), + [459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(493), + [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(563), + [465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), + [467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(580), + [469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [471] = {.entry = {.count = 1, .reusable = true}}, SHIFT(991), + [473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), + [475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(478), + [477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(272), + [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), + [483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(490), + [485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [487] = {.entry = {.count = 1, .reusable = true}}, SHIFT(589), + [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(388), + [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), + [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(572), + [497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), + [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(485), + [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), + [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(501), + [505] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), + [507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(430), + [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), + [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(497), + [513] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), + [515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(553), + [517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [519] = {.entry = {.count = 1, .reusable = true}}, SHIFT(486), + [521] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), + [523] = {.entry = {.count = 1, .reusable = true}}, SHIFT(571), + [525] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), + [527] = {.entry = {.count = 1, .reusable = true}}, SHIFT(578), + [529] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [531] = {.entry = {.count = 1, .reusable = true}}, SHIFT(472), + [533] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [535] = {.entry = {.count = 1, .reusable = true}}, SHIFT(317), + [537] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), + [539] = {.entry = {.count = 1, .reusable = true}}, SHIFT(384), + [541] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), + [543] = {.entry = {.count = 1, .reusable = true}}, SHIFT(552), + [545] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), + [547] = {.entry = {.count = 1, .reusable = true}}, SHIFT(487), + [549] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), + [551] = {.entry = {.count = 1, .reusable = true}}, SHIFT(558), + [553] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), + [555] = {.entry = {.count = 1, .reusable = true}}, SHIFT(421), + [557] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), + [559] = {.entry = {.count = 1, .reusable = true}}, SHIFT(193), + [561] = {.entry = {.count = 1, .reusable = false}}, SHIFT(719), + [563] = {.entry = {.count = 1, .reusable = true}}, SHIFT(191), + [565] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, .production_id = 1), REDUCE(sym_list_splat_pattern, 2, .production_id = 8), + [568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(456), + [570] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_splat_pattern, 2, .production_id = 8), + [572] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_splat_pattern, 2, .production_id = 8), + [574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(375), + [576] = {.entry = {.count = 1, .reusable = true}}, SHIFT(378), + [578] = {.entry = {.count = 1, .reusable = true}}, SHIFT(371), + [580] = {.entry = {.count = 1, .reusable = true}}, SHIFT(379), + [582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(367), + [584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(287), + [586] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1304), + [588] = {.entry = {.count = 1, .reusable = true}}, SHIFT(311), + [590] = {.entry = {.count = 1, .reusable = true}}, SHIFT(315), + [592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1217), + [594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(382), + [596] = {.entry = {.count = 1, .reusable = true}}, SHIFT(282), + [598] = {.entry = {.count = 1, .reusable = true}}, SHIFT(374), + [600] = {.entry = {.count = 1, .reusable = true}}, SHIFT(355), + [602] = {.entry = {.count = 1, .reusable = false}}, SHIFT(667), + [604] = {.entry = {.count = 1, .reusable = true}}, SHIFT(204), + [606] = {.entry = {.count = 1, .reusable = false}}, SHIFT(668), + [608] = {.entry = {.count = 1, .reusable = true}}, SHIFT(439), + [610] = {.entry = {.count = 1, .reusable = true}}, SHIFT(709), + [612] = {.entry = {.count = 1, .reusable = true}}, SHIFT(187), + [614] = {.entry = {.count = 1, .reusable = false}}, SHIFT(391), + [616] = {.entry = {.count = 1, .reusable = false}}, SHIFT(885), + [618] = {.entry = {.count = 1, .reusable = false}}, SHIFT(149), + [620] = {.entry = {.count = 1, .reusable = false}}, SHIFT(450), + [622] = {.entry = {.count = 1, .reusable = false}}, SHIFT(798), + [624] = {.entry = {.count = 1, .reusable = true}}, SHIFT(212), + [626] = {.entry = {.count = 1, .reusable = false}}, SHIFT(801), + [628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(443), + [630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(683), + [632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217), + [634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), + [636] = {.entry = {.count = 1, .reusable = false}}, SHIFT(445), + [638] = {.entry = {.count = 1, .reusable = false}}, SHIFT(888), + [640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(811), + [642] = {.entry = {.count = 1, .reusable = false}}, SHIFT(811), + [644] = {.entry = {.count = 1, .reusable = false}}, SHIFT(153), + [646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(934), + [648] = {.entry = {.count = 1, .reusable = false}}, SHIFT(447), + [650] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield, 1), + [652] = {.entry = {.count = 1, .reusable = false}}, SHIFT(749), + [654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163), + [656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(393), + [658] = {.entry = {.count = 1, .reusable = false}}, SHIFT(764), + [660] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161), + [662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(475), + [664] = {.entry = {.count = 1, .reusable = false}}, SHIFT(158), + [666] = {.entry = {.count = 1, .reusable = false}}, SHIFT(152), + [668] = {.entry = {.count = 1, .reusable = true}}, SHIFT(765), + [670] = {.entry = {.count = 1, .reusable = true}}, SHIFT(779), + [672] = {.entry = {.count = 1, .reusable = true}}, SHIFT(768), + [674] = {.entry = {.count = 1, .reusable = true}}, SHIFT(789), + [676] = {.entry = {.count = 1, .reusable = true}}, SHIFT(441), + [678] = {.entry = {.count = 1, .reusable = false}}, SHIFT(770), + [680] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), + [682] = {.entry = {.count = 1, .reusable = false}}, SHIFT(685), + [684] = {.entry = {.count = 1, .reusable = false}}, SHIFT(748), + [686] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_list, 2, .production_id = 7), + [688] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_list, 2, .production_id = 7), + [690] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160), + [692] = {.entry = {.count = 1, .reusable = true}}, SHIFT(200), + [694] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1504), + [696] = {.entry = {.count = 1, .reusable = true}}, SHIFT(803), + [698] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_list, 2, .production_id = 7), + [700] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_list, 3, .production_id = 16), + [702] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1462), + [704] = {.entry = {.count = 1, .reusable = true}}, SHIFT(619), + [706] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1469), + [708] = {.entry = {.count = 1, .reusable = true}}, SHIFT(846), + [710] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_list, 3, .production_id = 16), + [712] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_list, 3, .production_id = 16), + [714] = {.entry = {.count = 1, .reusable = true}}, SHIFT(671), + [716] = {.entry = {.count = 1, .reusable = true}}, SHIFT(460), + [718] = {.entry = {.count = 1, .reusable = true}}, SHIFT(211), + [720] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 3, .production_id = 50), + [722] = {.entry = {.count = 1, .reusable = false}}, SHIFT(812), + [724] = {.entry = {.count = 1, .reusable = true}}, SHIFT(631), + [726] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1432), + [728] = {.entry = {.count = 1, .reusable = false}}, SHIFT(837), + [730] = {.entry = {.count = 1, .reusable = false}}, SHIFT(154), + [732] = {.entry = {.count = 1, .reusable = false}}, SHIFT(759), + [734] = {.entry = {.count = 1, .reusable = false}}, SHIFT(760), + [736] = {.entry = {.count = 1, .reusable = false}}, SHIFT(151), + [738] = {.entry = {.count = 1, .reusable = true}}, SHIFT(788), + [740] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1447), + [742] = {.entry = {.count = 1, .reusable = false}}, SHIFT(425), + [744] = {.entry = {.count = 1, .reusable = false}}, SHIFT(466), + [746] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 1), + [748] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 2, .production_id = 24), + [750] = {.entry = {.count = 1, .reusable = true}}, SHIFT(833), + [752] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1414), + [754] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 7, .production_id = 140), + [756] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 7, .production_id = 140), + [758] = {.entry = {.count = 1, .reusable = false}}, SHIFT(887), + [760] = {.entry = {.count = 1, .reusable = true}}, SHIFT(828), + [762] = {.entry = {.count = 1, .reusable = true}}, SHIFT(725), + [764] = {.entry = {.count = 1, .reusable = true}}, SHIFT(778), + [766] = {.entry = {.count = 1, .reusable = true}}, SHIFT(672), + [768] = {.entry = {.count = 1, .reusable = true}}, SHIFT(787), + [770] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 6, .production_id = 122), + [772] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 6, .production_id = 122), + [774] = {.entry = {.count = 1, .reusable = true}}, SHIFT(786), + [776] = {.entry = {.count = 1, .reusable = true}}, SHIFT(783), + [778] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression_list, 3, .production_id = 16), + [780] = {.entry = {.count = 1, .reusable = false}}, SHIFT(442), + [782] = {.entry = {.count = 1, .reusable = true}}, SHIFT(469), + [784] = {.entry = {.count = 1, .reusable = true}}, SHIFT(825), + [786] = {.entry = {.count = 1, .reusable = true}}, SHIFT(843), + [788] = {.entry = {.count = 1, .reusable = true}}, SHIFT(841), + [790] = {.entry = {.count = 1, .reusable = true}}, SHIFT(838), + [792] = {.entry = {.count = 1, .reusable = true}}, SHIFT(727), + [794] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 1), + [796] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 6, .production_id = 121), + [798] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 6, .production_id = 121), + [800] = {.entry = {.count = 1, .reusable = true}}, SHIFT(629), + [802] = {.entry = {.count = 1, .reusable = true}}, SHIFT(615), + [804] = {.entry = {.count = 1, .reusable = true}}, SHIFT(617), + [806] = {.entry = {.count = 1, .reusable = true}}, SHIFT(638), + [808] = {.entry = {.count = 1, .reusable = true}}, SHIFT(639), + [810] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression_list, 2, .production_id = 7), + [812] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 5, .production_id = 100), + [814] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 5, .production_id = 100), + [816] = {.entry = {.count = 1, .reusable = true}}, SHIFT(805), + [818] = {.entry = {.count = 1, .reusable = true}}, SHIFT(772), + [820] = {.entry = {.count = 1, .reusable = true}}, SHIFT(781), + [822] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subscript, 6, .production_id = 96), + [824] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subscript, 6, .production_id = 96), + [826] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subscript, 4, .production_id = 70), + [828] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subscript, 4, .production_id = 70), + [830] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subscript, 5, .production_id = 96), + [832] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subscript, 5, .production_id = 96), + [834] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subscript, 5, .production_id = 70), + [836] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subscript, 5, .production_id = 70), + [838] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attribute, 3, .production_id = 40), + [840] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_attribute, 3, .production_id = 40), + [842] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 4, .production_id = 56), + [844] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 4, .production_id = 56), + [846] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1506), + [848] = {.entry = {.count = 1, .reusable = false}}, SHIFT(383), + [850] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1435), + [852] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1471), + [854] = {.entry = {.count = 1, .reusable = true}}, SHIFT(416), + [856] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1468), + [858] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 5, .production_id = 81), + [860] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 5, .production_id = 81), + [862] = {.entry = {.count = 1, .reusable = false}}, SHIFT(335), + [864] = {.entry = {.count = 1, .reusable = true}}, SHIFT(402), + [866] = {.entry = {.count = 1, .reusable = true}}, SHIFT(614), + [868] = {.entry = {.count = 1, .reusable = true}}, SHIFT(823), + [870] = {.entry = {.count = 1, .reusable = true}}, SHIFT(826), + [872] = {.entry = {.count = 1, .reusable = true}}, SHIFT(605), + [874] = {.entry = {.count = 1, .reusable = true}}, SHIFT(283), + [876] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1514), + [878] = {.entry = {.count = 1, .reusable = true}}, SHIFT(807), + [880] = {.entry = {.count = 1, .reusable = true}}, SHIFT(616), + [882] = {.entry = {.count = 1, .reusable = true}}, SHIFT(824), + [884] = {.entry = {.count = 1, .reusable = true}}, SHIFT(800), + [886] = {.entry = {.count = 1, .reusable = true}}, SHIFT(641), + [888] = {.entry = {.count = 1, .reusable = true}}, SHIFT(808), + [890] = {.entry = {.count = 1, .reusable = true}}, SHIFT(603), + [892] = {.entry = {.count = 1, .reusable = true}}, SHIFT(292), + [894] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1517), + [896] = {.entry = {.count = 1, .reusable = true}}, SHIFT(264), + [898] = {.entry = {.count = 1, .reusable = true}}, SHIFT(226), + [900] = {.entry = {.count = 1, .reusable = true}}, SHIFT(218), + [902] = {.entry = {.count = 1, .reusable = true}}, SHIFT(845), + [904] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, .production_id = 104), + [906] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, .production_id = 104), + [908] = {.entry = {.count = 1, .reusable = false}}, SHIFT(412), + [910] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 2, .production_id = 69), + [912] = {.entry = {.count = 1, .reusable = true}}, SHIFT(293), + [914] = {.entry = {.count = 1, .reusable = true}}, SHIFT(844), + [916] = {.entry = {.count = 1, .reusable = true}}, SHIFT(834), + [918] = {.entry = {.count = 1, .reusable = true}}, SHIFT(344), + [920] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, .production_id = 76), + [922] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, .production_id = 76), + [924] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 1), + [926] = {.entry = {.count = 1, .reusable = true}}, SHIFT(306), + [928] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, .production_id = 77), + [930] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, .production_id = 77), + [932] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat1, 2), + [934] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_try_statement_repeat1, 2), + [936] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat1, 2), SHIFT_REPEAT(335), + [939] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat2, 2), + [941] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_try_statement_repeat2, 2), + [943] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_try_statement_repeat2, 2), SHIFT_REPEAT(416), + [946] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 4, .production_id = 54), + [948] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 4, .production_id = 54), + [950] = {.entry = {.count = 1, .reusable = false}}, SHIFT(484), + [952] = {.entry = {.count = 1, .reusable = true}}, SHIFT(223), + [954] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_try_statement_repeat2, 2), SHIFT_REPEAT(402), + [957] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat1, 2), SHIFT_REPEAT(383), + [960] = {.entry = {.count = 1, .reusable = true}}, SHIFT(337), + [962] = {.entry = {.count = 1, .reusable = true}}, SHIFT(336), + [964] = {.entry = {.count = 1, .reusable = true}}, SHIFT(950), + [966] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 1), + [968] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block, 1), + [970] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__simple_statements, 4), + [972] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__simple_statements, 4), + [974] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), + [976] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1336), + [978] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 102), + [980] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 102), + [982] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 102), SHIFT_REPEAT(484), + [985] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__simple_statements, 3), + [987] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__simple_statements, 3), + [989] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block, 2), + [991] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 2), + [993] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 4, .production_id = 95), + [995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1423), + [997] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, .production_id = 69), + [999] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, .production_id = 68), + [1001] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3), + [1003] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3, .production_id = 10), + [1005] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1487), + [1007] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 4, .production_id = 29), + [1009] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 4, .production_id = 28), + [1011] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 2), + [1013] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 102), SHIFT_REPEAT(412), + [1016] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__simple_statements, 2), + [1018] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__simple_statements, 2), + [1020] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 6, .production_id = 155), + [1022] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 6, .production_id = 155), + [1024] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 4, .production_id = 129), + [1026] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 4, .production_id = 129), + [1028] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 5, .production_id = 146), + [1030] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 5, .production_id = 146), + [1032] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 5, .production_id = 146), + [1034] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 5, .production_id = 146), + [1036] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 6, .production_id = 155), + [1038] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 6, .production_id = 155), + [1040] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 7, .production_id = 160), + [1042] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 7, .production_id = 160), + [1044] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 7, .production_id = 160), + [1046] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 7, .production_id = 160), + [1048] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_primary_expression, 1), + [1050] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_pattern, 1), REDUCE(sym_primary_expression, 1), + [1053] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_primary_expression, 1), + [1055] = {.entry = {.count = 1, .reusable = true}}, SHIFT(422), + [1057] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern, 1), + [1059] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 1), + [1061] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 4, .production_id = 129), + [1063] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 4, .production_id = 129), + [1065] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 4, .production_id = 81), + [1067] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 4, .production_id = 81), + [1069] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), + [1071] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1), REDUCE(sym_list_splat_pattern, 2, .production_id = 9), + [1074] = {.entry = {.count = 1, .reusable = true}}, SHIFT(476), + [1076] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_splat_pattern, 2, .production_id = 9), + [1078] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_splat_pattern, 2, .production_id = 9), + [1080] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 3, .production_id = 56), + [1082] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 3, .production_id = 56), + [1084] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_cases, 1), + [1086] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_cases, 1), + [1088] = {.entry = {.count = 1, .reusable = false}}, SHIFT(852), + [1090] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_cases_repeat1, 2), + [1092] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_cases_repeat1, 2), + [1094] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_cases_repeat1, 2), SHIFT_REPEAT(849), + [1097] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_cases_repeat1, 2), SHIFT_REPEAT(852), + [1100] = {.entry = {.count = 1, .reusable = false}}, SHIFT(849), + [1102] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), + [1104] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 8, .production_id = 142), + [1106] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 8, .production_id = 142), + [1108] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_elif_clause, 4, .production_id = 54), + [1110] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_elif_clause, 4, .production_id = 54), + [1112] = {.entry = {.count = 1, .reusable = false}}, SHIFT(339), + [1114] = {.entry = {.count = 1, .reusable = false}}, SHIFT(338), + [1116] = {.entry = {.count = 1, .reusable = false}}, SHIFT(132), + [1118] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 4, .production_id = 55), + [1120] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 4, .production_id = 55), + [1122] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_elif_clause, 5, .production_id = 77), + [1124] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_elif_clause, 5, .production_id = 77), + [1126] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 5, .production_id = 80), + [1128] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 5, .production_id = 80), + [1130] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 5, .production_id = 56), + [1132] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 5, .production_id = 56), + [1134] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 1, .production_id = 74), + [1136] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_if_statement_repeat1, 1, .production_id = 74), + [1138] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 7, .production_id = 128), + [1140] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 7, .production_id = 128), + [1142] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 7, .production_id = 124), + [1144] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 7, .production_id = 124), + [1146] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple, 2), + [1148] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_tuple_pattern, 2), REDUCE(sym_tuple, 2), + [1151] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple, 2), + [1153] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_pattern, 2), + [1155] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple_pattern, 2), + [1157] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 6, .production_id = 81), + [1159] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 6, .production_id = 81), + [1161] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 6, .production_id = 107), + [1163] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 6, .production_id = 107), + [1165] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2), + [1167] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_list_pattern, 2), REDUCE(sym_list, 2), + [1170] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2), + [1172] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_pattern, 2), + [1174] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_pattern, 2), + [1176] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_else_clause, 3, .production_id = 56), + [1178] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_else_clause, 3, .production_id = 56), + [1180] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 4, .production_id = 133), + [1182] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 4, .production_id = 133), + [1184] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 6, .production_id = 156), + [1186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 6, .production_id = 156), + [1188] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_else_clause, 4, .production_id = 81), + [1190] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_else_clause, 4, .production_id = 81), + [1192] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 5, .production_id = 148), + [1194] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 5, .production_id = 148), + [1196] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 5, .production_id = 149), + [1198] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 5, .production_id = 149), + [1200] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 6, .production_id = 116), + [1202] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 6, .production_id = 116), + [1204] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 7, .production_id = 138), + [1206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 7, .production_id = 138), + [1208] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_decorated_definition, 2, .production_id = 19), + [1210] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_decorated_definition, 2, .production_id = 19), + [1212] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 5, .production_id = 79), + [1214] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 5, .production_id = 79), + [1216] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, .production_id = 143), + [1218] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, .production_id = 143), + [1220] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 5, .production_id = 86), + [1222] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 5, .production_id = 86), + [1224] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 8, .production_id = 141), + [1226] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 8, .production_id = 141), + [1228] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 10, .production_id = 159), + [1230] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 10, .production_id = 159), + [1232] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 9, .production_id = 158), + [1234] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 9, .production_id = 158), + [1236] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 9, .production_id = 154), + [1238] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 9, .production_id = 154), + [1240] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 9, .production_id = 153), + [1242] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 9, .production_id = 153), + [1244] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 9, .production_id = 152), + [1246] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 9, .production_id = 152), + [1248] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 8, .production_id = 145), + [1250] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 8, .production_id = 145), + [1252] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 5, .production_id = 82), + [1254] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 5, .production_id = 82), + [1256] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 6, .production_id = 105), + [1258] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 6, .production_id = 105), + [1260] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 6, .production_id = 56), + [1262] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 6, .production_id = 56), + [1264] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 6, .production_id = 108), + [1266] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 6, .production_id = 108), + [1268] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_finally_clause, 3, .production_id = 56), + [1270] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_finally_clause, 3, .production_id = 56), + [1272] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, .production_id = 103), + [1274] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, .production_id = 103), + [1276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 5, .production_id = 78), + [1278] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 5, .production_id = 78), + [1280] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 5, .production_id = 89), + [1282] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 5, .production_id = 89), + [1284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, .production_id = 137), + [1286] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, .production_id = 137), + [1288] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, .production_id = 75), + [1290] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, .production_id = 75), + [1292] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, .production_id = 151), + [1294] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, .production_id = 151), + [1296] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 5, .production_id = 90), + [1298] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 5, .production_id = 90), + [1300] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, .production_id = 136), + [1302] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, .production_id = 136), + [1304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, .production_id = 144), + [1306] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, .production_id = 144), + [1308] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, .production_id = 150), + [1310] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, .production_id = 150), + [1312] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 4, .production_id = 57), + [1314] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 4, .production_id = 57), + [1316] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_statement, 4, .production_id = 59), + [1318] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_match_statement, 4, .production_id = 59), + [1320] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_statement, 4, .production_id = 60), + [1322] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_match_statement, 4, .production_id = 60), + [1324] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 4, .production_id = 64), + [1326] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 4, .production_id = 64), + [1328] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 5, .production_id = 88), + [1330] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 5, .production_id = 88), + [1332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 6, .production_id = 106), + [1334] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 6, .production_id = 106), + [1336] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 7, .production_id = 81), + [1338] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 7, .production_id = 81), + [1340] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_finally_clause, 4, .production_id = 81), + [1342] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_finally_clause, 4, .production_id = 81), + [1344] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 7, .production_id = 127), + [1346] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 7, .production_id = 127), + [1348] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, .production_id = 101), + [1350] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, .production_id = 101), + [1352] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, .production_id = 126), + [1354] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, .production_id = 126), + [1356] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, .production_id = 125), + [1358] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, .production_id = 125), + [1360] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 7, .production_id = 123), + [1362] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 7, .production_id = 123), + [1364] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 6, .production_id = 117), + [1366] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 6, .production_id = 117), + [1368] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 6, .production_id = 115), + [1370] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 6, .production_id = 115), + [1372] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 6, .production_id = 114), + [1374] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 6, .production_id = 114), + [1376] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 6, .production_id = 113), + [1378] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 6, .production_id = 113), + [1380] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 3, .production_id = 50), + [1382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(685), + [1384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1207), + [1386] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 2, .production_id = 24), + [1388] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_concatenated_string, 2), + [1390] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_concatenated_string, 2), + [1392] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), + [1394] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), + [1396] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), SHIFT_REPEAT(944), + [1399] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 3, .production_id = 20), + [1401] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 3, .production_id = 20), + [1403] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 2, .production_id = 2), + [1405] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 2, .production_id = 2), + [1407] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_comprehension, 4, .production_id = 51), + [1409] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_comprehension, 4, .production_id = 51), + [1411] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_set_comprehension, 4, .production_id = 51), + [1413] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_set_comprehension, 4, .production_id = 51), + [1415] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, .production_id = 61), + [1417] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, .production_id = 61), + [1419] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 5, .production_id = 61), + [1421] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 5, .production_id = 61), + [1423] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 5, .production_id = 61), + [1425] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 5, .production_id = 61), + [1427] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 5, .production_id = 92), + [1429] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 5, .production_id = 92), + [1431] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 2), + [1433] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 2), + [1435] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 3, .production_id = 67), + [1437] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 3, .production_id = 67), + [1439] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 3, .production_id = 31), + [1441] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 3, .production_id = 31), + [1443] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 3), + [1445] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 3), + [1447] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_set, 3, .production_id = 25), + [1449] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_set, 3, .production_id = 25), + [1451] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 3, .production_id = 31), + [1453] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 3, .production_id = 31), + [1455] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 3), + [1457] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 3), + [1459] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, .production_id = 25), + [1461] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, .production_id = 25), + [1463] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple, 3, .production_id = 25), + [1465] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple, 3, .production_id = 25), + [1467] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_expression, 3, .production_id = 26), + [1469] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesized_expression, 3, .production_id = 26), + [1471] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, .production_id = 31), + [1473] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, .production_id = 31), + [1475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1449), + [1477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(177), + [1479] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1), + [1481] = {.entry = {.count = 1, .reusable = false}}, SHIFT(716), + [1483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(707), + [1485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(696), + [1487] = {.entry = {.count = 1, .reusable = true}}, SHIFT(695), + [1489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(692), + [1491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(310), + [1493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(690), + [1495] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1), + [1497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(716), + [1499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1436), + [1501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(687), + [1503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(686), + [1505] = {.entry = {.count = 1, .reusable = false}}, SHIFT(696), + [1507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(673), + [1509] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 2), + [1511] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 2), + [1513] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call, 2, .production_id = 17), + [1515] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_call, 2, .production_id = 17), + [1517] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 4, .production_id = 61), + [1519] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 4, .production_id = 61), + [1521] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_comprehension, 4, .production_id = 51), + [1523] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_comprehension, 4, .production_id = 51), + [1525] = {.entry = {.count = 1, .reusable = false}}, SHIFT(762), + [1527] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_keyword_separator, 1), + [1529] = {.entry = {.count = 1, .reusable = false}}, SHIFT(767), + [1531] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_generator_expression, 4, .production_id = 51), + [1533] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_generator_expression, 4, .production_id = 51), + [1535] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, .production_id = 67), + [1537] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, .production_id = 67), + [1539] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 4, .production_id = 31), + [1541] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 4, .production_id = 31), + [1543] = {.entry = {.count = 1, .reusable = false}}, SHIFT(693), + [1545] = {.entry = {.count = 1, .reusable = true}}, SHIFT(698), + [1547] = {.entry = {.count = 1, .reusable = true}}, SHIFT(702), + [1549] = {.entry = {.count = 1, .reusable = true}}, SHIFT(703), + [1551] = {.entry = {.count = 1, .reusable = true}}, SHIFT(704), + [1553] = {.entry = {.count = 1, .reusable = true}}, SHIFT(705), + [1555] = {.entry = {.count = 1, .reusable = true}}, SHIFT(693), + [1557] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1446), + [1559] = {.entry = {.count = 1, .reusable = true}}, SHIFT(710), + [1561] = {.entry = {.count = 1, .reusable = true}}, SHIFT(711), + [1563] = {.entry = {.count = 1, .reusable = false}}, SHIFT(702), + [1565] = {.entry = {.count = 1, .reusable = true}}, SHIFT(676), + [1567] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, .production_id = 92), + [1569] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, .production_id = 92), + [1571] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_operator, 3, .production_id = 39), + [1573] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_operator, 3, .production_id = 39), + [1575] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_operator, 2, .production_id = 13), + [1577] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_operator, 2, .production_id = 13), + [1579] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 41), + [1581] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 41), + [1583] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, .production_id = 71), + [1585] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, .production_id = 71), + [1587] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, .production_id = 72), + [1589] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, .production_id = 72), + [1591] = {.entry = {.count = 1, .reusable = true}}, SHIFT(452), + [1593] = {.entry = {.count = 1, .reusable = false}}, SHIFT(794), + [1595] = {.entry = {.count = 1, .reusable = false}}, SHIFT(694), + [1597] = {.entry = {.count = 1, .reusable = false}}, SHIFT(832), + [1599] = {.entry = {.count = 1, .reusable = false}}, SHIFT(691), + [1601] = {.entry = {.count = 1, .reusable = false}}, SHIFT(618), + [1603] = {.entry = {.count = 1, .reusable = false}}, SHIFT(679), + [1605] = {.entry = {.count = 1, .reusable = false}}, SHIFT(712), + [1607] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), SHIFT_REPEAT(934), + [1610] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1500), + [1612] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), + [1614] = {.entry = {.count = 1, .reusable = false}}, SHIFT(730), + [1616] = {.entry = {.count = 1, .reusable = true}}, SHIFT(723), + [1618] = {.entry = {.count = 1, .reusable = true}}, SHIFT(722), + [1620] = {.entry = {.count = 1, .reusable = true}}, SHIFT(721), + [1622] = {.entry = {.count = 1, .reusable = true}}, SHIFT(717), + [1624] = {.entry = {.count = 1, .reusable = true}}, SHIFT(301), + [1626] = {.entry = {.count = 1, .reusable = true}}, SHIFT(714), + [1628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(730), + [1630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1494), + [1632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(706), + [1634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(700), + [1636] = {.entry = {.count = 1, .reusable = false}}, SHIFT(722), + [1638] = {.entry = {.count = 1, .reusable = true}}, SHIFT(669), + [1640] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), SHIFT_REPEAT(952), + [1643] = {.entry = {.count = 1, .reusable = false}}, SHIFT(879), + [1645] = {.entry = {.count = 1, .reusable = false}}, SHIFT(880), + [1647] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1448), + [1649] = {.entry = {.count = 1, .reusable = true}}, SHIFT(184), + [1651] = {.entry = {.count = 1, .reusable = false}}, SHIFT(729), + [1653] = {.entry = {.count = 1, .reusable = true}}, SHIFT(728), + [1655] = {.entry = {.count = 1, .reusable = true}}, SHIFT(680), + [1657] = {.entry = {.count = 1, .reusable = true}}, SHIFT(697), + [1659] = {.entry = {.count = 1, .reusable = true}}, SHIFT(681), + [1661] = {.entry = {.count = 1, .reusable = true}}, SHIFT(299), + [1663] = {.entry = {.count = 1, .reusable = true}}, SHIFT(699), + [1665] = {.entry = {.count = 1, .reusable = true}}, SHIFT(729), + [1667] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1430), + [1669] = {.entry = {.count = 1, .reusable = true}}, SHIFT(708), + [1671] = {.entry = {.count = 1, .reusable = true}}, SHIFT(682), + [1673] = {.entry = {.count = 1, .reusable = false}}, SHIFT(680), + [1675] = {.entry = {.count = 1, .reusable = true}}, SHIFT(670), + [1677] = {.entry = {.count = 1, .reusable = false}}, SHIFT(451), + [1679] = {.entry = {.count = 1, .reusable = true}}, SHIFT(392), + [1681] = {.entry = {.count = 1, .reusable = false}}, SHIFT(925), + [1683] = {.entry = {.count = 1, .reusable = true}}, SHIFT(853), + [1685] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1259), + [1687] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1390), + [1689] = {.entry = {.count = 1, .reusable = false}}, SHIFT(971), + [1691] = {.entry = {.count = 1, .reusable = true}}, SHIFT(856), + [1693] = {.entry = {.count = 1, .reusable = true}}, SHIFT(892), + [1695] = {.entry = {.count = 1, .reusable = false}}, SHIFT(943), + [1697] = {.entry = {.count = 1, .reusable = true}}, SHIFT(943), + [1699] = {.entry = {.count = 1, .reusable = false}}, SHIFT(975), + [1701] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_open_sequence_match_pattern, 2), + [1703] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_open_sequence_match_pattern, 2), + [1705] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_open_sequence_match_pattern, 3), + [1707] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_open_sequence_match_pattern, 3), + [1709] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1006), + [1711] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1011), + [1713] = {.entry = {.count = 1, .reusable = true}}, SHIFT(987), + [1715] = {.entry = {.count = 1, .reusable = false}}, SHIFT(999), + [1717] = {.entry = {.count = 1, .reusable = true}}, SHIFT(998), + [1719] = {.entry = {.count = 1, .reusable = true}}, SHIFT(981), + [1721] = {.entry = {.count = 1, .reusable = true}}, SHIFT(970), + [1723] = {.entry = {.count = 1, .reusable = false}}, SHIFT(984), + [1725] = {.entry = {.count = 1, .reusable = false}}, SHIFT(957), + [1727] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), + [1729] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), + [1731] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(702), + [1734] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(1446), + [1737] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(702), + [1740] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(676), + [1743] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(696), + [1746] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(1436), + [1749] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(696), + [1752] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(673), + [1755] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comparison_operator, 2, .production_id = 18), + [1757] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_comparison_operator, 2, .production_id = 18), + [1759] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__patterns_repeat1, 2, .production_id = 36), + [1761] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__patterns_repeat1, 2, .production_id = 36), SHIFT_REPEAT(607), + [1764] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_pattern, 3, .production_id = 25), + [1766] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_pattern, 3, .production_id = 25), + [1768] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__patterns_repeat1, 2, .production_id = 31), + [1770] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(722), + [1773] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(1494), + [1776] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(722), + [1779] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(669), + [1782] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_splat_pattern, 2, .production_id = 34), + [1784] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_splat_pattern, 2, .production_id = 33), + [1786] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(680), + [1789] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(1430), + [1792] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(680), + [1795] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(670), + [1798] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), + [1800] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_list, 2, .production_id = 16), + [1802] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1339), + [1804] = {.entry = {.count = 1, .reusable = true}}, SHIFT(596), + [1806] = {.entry = {.count = 1, .reusable = false}}, SHIFT(636), + [1808] = {.entry = {.count = 1, .reusable = true}}, SHIFT(444), + [1810] = {.entry = {.count = 1, .reusable = true}}, SHIFT(715), + [1812] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1340), + [1814] = {.entry = {.count = 1, .reusable = true}}, SHIFT(463), + [1816] = {.entry = {.count = 1, .reusable = true}}, SHIFT(309), + [1818] = {.entry = {.count = 1, .reusable = true}}, SHIFT(458), + [1820] = {.entry = {.count = 1, .reusable = true}}, SHIFT(165), + [1822] = {.entry = {.count = 1, .reusable = true}}, SHIFT(348), + [1824] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156), + [1826] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), + [1828] = {.entry = {.count = 1, .reusable = true}}, SHIFT(481), + [1830] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1365), + [1832] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1008), + [1834] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1357), + [1836] = {.entry = {.count = 1, .reusable = true}}, SHIFT(993), + [1838] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1177), + [1840] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1380), + [1842] = {.entry = {.count = 1, .reusable = true}}, SHIFT(986), + [1844] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameters, 2), + [1846] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameters, 3), + [1848] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_await, 2), + [1850] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_await, 2), + [1852] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_not_operator, 2, .production_id = 10), + [1854] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_not_operator, 2, .production_id = 10), + [1856] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_value_pattern_repeat1, 2), + [1858] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_value_pattern_repeat1, 2), SHIFT_REPEAT(1445), + [1861] = {.entry = {.count = 1, .reusable = true}}, SHIFT(182), + [1863] = {.entry = {.count = 1, .reusable = true}}, SHIFT(386), + [1865] = {.entry = {.count = 1, .reusable = true}}, SHIFT(473), + [1867] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1416), + [1869] = {.entry = {.count = 1, .reusable = true}}, SHIFT(601), + [1871] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 1, .production_id = 7), + [1873] = {.entry = {.count = 1, .reusable = true}}, SHIFT(455), + [1875] = {.entry = {.count = 1, .reusable = true}}, SHIFT(457), + [1877] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda, 4, .production_id = 66), + [1879] = {.entry = {.count = 1, .reusable = true}}, SHIFT(429), + [1881] = {.entry = {.count = 1, .reusable = true}}, SHIFT(446), + [1883] = {.entry = {.count = 1, .reusable = true}}, SHIFT(409), + [1885] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_conditional_expression, 5), + [1887] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_conditional_expression, 5), + [1889] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1445), + [1891] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_class_name, 2), + [1893] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_value_pattern, 2), + [1895] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda, 3, .production_id = 32), + [1897] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lambda, 3, .production_id = 32), + [1899] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 1), + [1901] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_expression, 3, .production_id = 35), + [1903] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_named_expression, 3, .production_id = 35), + [1905] = {.entry = {.count = 1, .reusable = true}}, SHIFT(842), + [1907] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_with_item, 1, .dynamic_precedence = -1, .production_id = 12), SHIFT(182), + [1910] = {.entry = {.count = 1, .reusable = false}}, SHIFT(608), + [1912] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean_operator, 3, .production_id = 39), + [1914] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean_operator, 3, .production_id = 39), + [1916] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lambda, 4, .production_id = 66), + [1918] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_class_name, 1), + [1920] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_capture_pattern, 1), + [1922] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_expression, 3, .production_id = 27), + [1924] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_named_expression, 3, .production_id = 27), + [1926] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield, 2), + [1928] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), + [1930] = {.entry = {.count = 1, .reusable = true}}, SHIFT(628), + [1932] = {.entry = {.count = 1, .reusable = true}}, SHIFT(785), + [1934] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, .production_id = 31), + [1936] = {.entry = {.count = 1, .reusable = false}}, SHIFT(178), + [1938] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1031), + [1940] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1031), + [1942] = {.entry = {.count = 1, .reusable = false}}, SHIFT_EXTRA(), + [1944] = {.entry = {.count = 1, .reusable = true}}, SHIFT(744), + [1946] = {.entry = {.count = 1, .reusable = true}}, SHIFT(736), + [1948] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, .production_id = 21), SHIFT_REPEAT(178), + [1951] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 2, .production_id = 21), SHIFT_REPEAT(1031), + [1954] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, .production_id = 21), SHIFT_REPEAT(1031), + [1957] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 2, .production_id = 21), + [1959] = {.entry = {.count = 1, .reusable = true}}, SHIFT(758), + [1961] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield, 3), + [1963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(799), + [1965] = {.entry = {.count = 1, .reusable = true}}, SHIFT(216), + [1967] = {.entry = {.count = 1, .reusable = true}}, SHIFT(609), + [1969] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 1, .production_id = 83), + [1971] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1381), + [1973] = {.entry = {.count = 1, .reusable = true}}, SHIFT(610), + [1975] = {.entry = {.count = 1, .reusable = true}}, SHIFT(820), + [1977] = {.entry = {.count = 1, .reusable = true}}, SHIFT(196), + [1979] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_splat, 2, .production_id = 14), + [1981] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_splat, 2), + [1983] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1291), + [1985] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1318), + [1987] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 2, .production_id = 109), + [1989] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1387), + [1991] = {.entry = {.count = 1, .reusable = true}}, SHIFT(769), + [1993] = {.entry = {.count = 1, .reusable = true}}, SHIFT(621), + [1995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(203), + [1997] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_or_pattern_repeat1, 2), + [1999] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_or_pattern_repeat1, 2), SHIFT_REPEAT(866), + [2002] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2), + [2004] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2), SHIFT_REPEAT(390), + [2007] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2), SHIFT_REPEAT(1416), + [2010] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2), SHIFT_REPEAT(601), + [2013] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__comprehension_clauses, 1), + [2015] = {.entry = {.count = 1, .reusable = true}}, SHIFT(390), + [2017] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_or_pattern, 3), + [2019] = {.entry = {.count = 1, .reusable = true}}, SHIFT(866), + [2021] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__expression_within_for_in_clause, 1), + [2023] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__comprehension_clauses, 2), + [2025] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__f_expression, 1), + [2027] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_or_pattern, 4), + [2029] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_list, 2, .production_id = 16), + [2031] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), + [2033] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1468), + [2035] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 8, .production_id = 135), + [2037] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 7, .production_id = 135), + [2039] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 7), + [2041] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 6, .production_id = 135), + [2043] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_or_pattern, 1), + [2045] = {.entry = {.count = 1, .reusable = true}}, SHIFT(867), + [2047] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 6), + [2049] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 3), + [2051] = {.entry = {.count = 1, .reusable = true}}, SHIFT(411), + [2053] = {.entry = {.count = 1, .reusable = true}}, SHIFT(410), + [2055] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_group_pattern, 3, .production_id = 130), + [2057] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 5, .production_id = 122), + [2059] = {.entry = {.count = 1, .reusable = true}}, SHIFT(192), + [2061] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 5, .production_id = 121), + [2063] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), + [2065] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 5, .production_id = 135), + [2067] = {.entry = {.count = 1, .reusable = true}}, SHIFT(477), + [2069] = {.entry = {.count = 1, .reusable = true}}, SHIFT(210), + [2071] = {.entry = {.count = 1, .reusable = true}}, SHIFT(415), + [2073] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 2), + [2075] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), + [2077] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 5), + [2079] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 5), + [2081] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 3), + [2083] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 9, .production_id = 135), + [2085] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 3, .production_id = 131), + [2087] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1435), + [2089] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 2), + [2091] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_clause, 2), + [2093] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 6, .production_id = 140), + [2095] = {.entry = {.count = 1, .reusable = true}}, SHIFT(185), + [2097] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1520), + [2099] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1516), + [2101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1498), + [2103] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 3, .production_id = 135), + [2105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(865), + [2107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1488), + [2109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1511), + [2111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1508), + [2113] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 4, .production_id = 135), + [2115] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, .production_id = 36), + [2117] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, .production_id = 36), SHIFT_REPEAT(245), + [2120] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 2), + [2122] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 4), + [2124] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 4, .production_id = 147), + [2126] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 4), + [2128] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_for_in_clause_repeat1, 2), + [2130] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_for_in_clause_repeat1, 2), SHIFT_REPEAT(280), + [2133] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 4, .production_id = 100), + [2135] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213), + [2137] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1061), + [2139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1144), + [2141] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1444), + [2143] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_within_for_in_clause, 3, .production_id = 32), + [2145] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_statement, 1), + [2147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1139), + [2149] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1456), + [2151] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1457), + [2153] = {.entry = {.count = 1, .reusable = true}}, SHIFT(262), + [2155] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), + [2157] = {.entry = {.count = 1, .reusable = true}}, SHIFT(352), + [2159] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type, 1), + [2161] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_pattern, 1), + [2163] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1440), + [2165] = {.entry = {.count = 1, .reusable = true}}, SHIFT(395), + [2167] = {.entry = {.count = 1, .reusable = true}}, SHIFT(396), + [2169] = {.entry = {.count = 1, .reusable = true}}, SHIFT(480), + [2171] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_exec_statement, 4, .production_id = 15), + [2173] = {.entry = {.count = 1, .reusable = true}}, SHIFT(426), + [2175] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string_content, 1), + [2177] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1055), + [2179] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1055), + [2181] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string_content, 1), + [2183] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_within_for_in_clause, 4, .production_id = 66), + [2185] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__right_hand_side, 1), + [2187] = {.entry = {.count = 1, .reusable = true}}, SHIFT(252), + [2189] = {.entry = {.count = 1, .reusable = true}}, SHIFT(624), + [2191] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pair, 3, .production_id = 62), + [2193] = {.entry = {.count = 1, .reusable = true}}, SHIFT(269), + [2195] = {.entry = {.count = 1, .reusable = true}}, SHIFT(219), + [2197] = {.entry = {.count = 1, .reusable = true}}, SHIFT(300), + [2199] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 2, .production_id = 10), + [2201] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assert_statement, 2), + [2203] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 2), + [2205] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_delete_statement, 2, .production_id = 11), + [2207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(261), + [2209] = {.entry = {.count = 1, .reusable = true}}, SHIFT(822), + [2211] = {.entry = {.count = 1, .reusable = true}}, SHIFT(246), + [2213] = {.entry = {.count = 1, .reusable = true}}, SHIFT(815), + [2215] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_item, 1, .dynamic_precedence = -1, .production_id = 12), + [2217] = {.entry = {.count = 1, .reusable = true}}, SHIFT(608), + [2219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(251), + [2221] = {.entry = {.count = 1, .reusable = true}}, SHIFT(774), + [2223] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__collection_elements_repeat1, 2, .production_id = 31), + [2225] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_content_repeat1, 2), + [2227] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_content_repeat1, 2), SHIFT_REPEAT(1055), + [2230] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_content_repeat1, 2), SHIFT_REPEAT(1055), + [2233] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_content_repeat1, 2), + [2235] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1088), + [2237] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1193), + [2239] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1400), + [2241] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_value_pattern_repeat1, 2), SHIFT_REPEAT(1477), + [2244] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dotted_name, 2), + [2246] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), + [2248] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 3, .production_id = 43), + [2250] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 3, .production_id = 43), + [2252] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dotted_name, 1), + [2254] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_decorated_definition_repeat1, 2), + [2256] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_decorated_definition_repeat1, 2), SHIFT_REPEAT(417), + [2259] = {.entry = {.count = 1, .reusable = true}}, SHIFT(399), + [2261] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), + [2263] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, .production_id = 95), + [2265] = {.entry = {.count = 1, .reusable = true}}, SHIFT(289), + [2267] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_assert_statement_repeat1, 2), + [2269] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_print_statement_repeat1, 2, .production_id = 10), + [2271] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 4, .production_id = 43), + [2273] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 4, .production_id = 43), + [2275] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1477), + [2277] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 5, .production_id = 43), + [2279] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 5, .production_id = 43), + [2281] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), + [2283] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 1, .production_id = 3), + [2285] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 1, .production_id = 3), + [2287] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_default_parameter, 3, .production_id = 35), + [2289] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 6, .production_id = 43), + [2291] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 6, .production_id = 43), + [2293] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), + [2295] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 1, .production_id = 4), + [2297] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 1, .production_id = 4), + [2299] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_open_sequence_match_pattern_repeat1, 2), + [2301] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_open_sequence_match_pattern_repeat1, 2), SHIFT_REPEAT(859), + [2304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_chevron, 2), + [2306] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1184), + [2308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1180), + [2310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(471), + [2312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(103), + [2314] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 2, .production_id = 68), + [2316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(294), + [2318] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typed_default_parameter, 5, .production_id = 118), + [2320] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), + [2322] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_subscript_repeat1, 2, .production_id = 94), + [2324] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_as_pattern, 3, .production_id = 134), + [2326] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 4, .production_id = 120), + [2328] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 4, .production_id = 119), + [2330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(205), + [2332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 3, .production_id = 22), + [2334] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, .production_id = 36), SHIFT_REPEAT(244), + [2337] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1125), + [2339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1253), + [2341] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1181), + [2343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1260), + [2345] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_bound, 2, .production_id = 110), + [2347] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_format_specifier, 2), + [2349] = {.entry = {.count = 1, .reusable = true}}, SHIFT(183), + [2351] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1117), + [2353] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 5, .production_id = 139), + [2355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(468), + [2357] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), + [2359] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 3, .production_id = 30), + [2361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), + [2363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(104), + [2365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1037), + [2367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), + [2369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1118), + [2371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1450), + [2373] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 1, .production_id = 6), + [2375] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_star_pattern, 2, .production_id = 11), + [2377] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 2, .production_id = 16), + [2379] = {.entry = {.count = 1, .reusable = true}}, SHIFT(175), + [2381] = {.entry = {.count = 1, .reusable = true}}, SHIFT(195), + [2383] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_alias_statement, 4, .production_id = 63), + [2385] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__collection_elements_repeat1, 2, .production_id = 36), + [2387] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__collection_elements_repeat1, 2, .production_id = 36), SHIFT_REPEAT(230), + [2390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), + [2392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1188), + [2394] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_format_specifier_repeat1, 2), + [2396] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_format_specifier_repeat1, 2), SHIFT_REPEAT(183), + [2399] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_format_specifier_repeat1, 2), SHIFT_REPEAT(1117), + [2402] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 2, .production_id = 6), + [2404] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, .production_id = 93), + [2406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1060), + [2408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1173), + [2410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1278), + [2412] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_alias_statement, 5, .production_id = 87), + [2414] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 4, .production_id = 53), + [2416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(398), + [2418] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), + [2420] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, .production_id = 31), + [2422] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_format_specifier, 1), + [2424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1099), + [2426] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_keyword_argument, 3, .production_id = 27), + [2428] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_keyword_argument, 3, .production_id = 35), + [2430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(893), + [2432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(852), + [2434] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typed_parameter, 3, .production_id = 65), + [2436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(479), + [2438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [2440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), + [2442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), + [2444] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_exec_statement, 5, .production_id = 15), + [2446] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_global_statement_repeat1, 2), SHIFT_REPEAT(1490), + [2449] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_global_statement_repeat1, 2), + [2451] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevar_parameter, 1, .production_id = 6), + [2453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(434), + [2455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), + [2457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), + [2459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1061), + [2461] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_import_prefix, 1), + [2463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1165), + [2465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(474), + [2467] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 1, .production_id = 7), + [2469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(597), + [2471] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_guard, 2, .production_id = 132), + [2473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(405), + [2475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(295), + [2477] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 2), + [2479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), + [2481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(389), + [2483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), + [2485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1490), + [2487] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_global_statement, 2), + [2489] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_nonlocal_statement, 2), + [2491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1185), + [2493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), + [2495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), + [2497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), + [2499] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_assert_statement_repeat1, 2), SHIFT_REPEAT(480), + [2502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1182), + [2504] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1443), + [2506] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_print_statement_repeat1, 2, .production_id = 52), SHIFT_REPEAT(483), + [2509] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_print_statement_repeat1, 2, .production_id = 52), + [2511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1093), + [2513] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 2, .production_id = 22), + [2515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1095), + [2517] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_import_prefix_repeat1, 2), + [2519] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_import_prefix_repeat1, 2), SHIFT_REPEAT(1165), + [2522] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 2, .production_id = 16), + [2524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(595), + [2526] = {.entry = {.count = 1, .reusable = true}}, SHIFT(448), + [2528] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_list_splat, 3, .production_id = 49), + [2530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304), + [2532] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3, .production_id = 28), + [2534] = {.entry = {.count = 1, .reusable = true}}, SHIFT(303), + [2536] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3, .production_id = 29), + [2538] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1067), + [2540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1315), + [2542] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assert_statement, 3), + [2544] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_list_splat, 3), + [2546] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameter, 1), + [2548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(361), + [2550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(438), + [2552] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_with_clause_repeat1, 2), + [2554] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_with_clause_repeat1, 2), SHIFT_REPEAT(351), + [2557] = {.entry = {.count = 1, .reusable = true}}, SHIFT(849), + [2559] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1332), + [2561] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1284), + [2563] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, .production_id = 23), + [2565] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_decorator, 3), + [2567] = {.entry = {.count = 1, .reusable = true}}, SHIFT(482), + [2569] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, .production_id = 44), SHIFT_REPEAT(1312), + [2572] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, .production_id = 44), + [2574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(851), + [2576] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_nonlocal_statement, 3), + [2578] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_global_statement, 3), + [2580] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), + [2582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1412), + [2584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(968), + [2586] = {.entry = {.count = 1, .reusable = true}}, SHIFT(274), + [2588] = {.entry = {.count = 1, .reusable = true}}, SHIFT(342), + [2590] = {.entry = {.count = 1, .reusable = true}}, SHIFT(233), + [2592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(239), + [2594] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__simple_statements_repeat1, 2), SHIFT_REPEAT(147), + [2597] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__simple_statements_repeat1, 2), + [2599] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__parameters_repeat1, 2), + [2601] = {.entry = {.count = 1, .reusable = true}}, SHIFT(855), + [2603] = {.entry = {.count = 1, .reusable = true}}, SHIFT(973), + [2605] = {.entry = {.count = 1, .reusable = true}}, SHIFT(273), + [2607] = {.entry = {.count = 1, .reusable = true}}, SHIFT(343), + [2609] = {.entry = {.count = 1, .reusable = true}}, SHIFT(896), + [2611] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1142), + [2613] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1147), + [2615] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1020), + [2617] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1250), + [2619] = {.entry = {.count = 1, .reusable = true}}, SHIFT(138), + [2621] = {.entry = {.count = 1, .reusable = true}}, SHIFT(313), + [2623] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [2625] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_mapping_pattern_repeat1, 2), SHIFT_REPEAT(905), + [2628] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_mapping_pattern_repeat1, 2), + [2630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1004), + [2632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(861), + [2634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(862), + [2636] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139), + [2638] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1233), + [2640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1314), + [2642] = {.entry = {.count = 1, .reusable = true}}, SHIFT(891), + [2644] = {.entry = {.count = 1, .reusable = true}}, SHIFT(988), + [2646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(459), + [2648] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), + [2650] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), + [2652] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_aliased_import, 3, .production_id = 45), + [2654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1322), + [2656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(793), + [2658] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), + [2660] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameters, 1), + [2662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(895), + [2664] = {.entry = {.count = 1, .reusable = true}}, SHIFT(802), + [2666] = {.entry = {.count = 1, .reusable = true}}, SHIFT(189), + [2668] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), + [2670] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, .production_id = 36), + [2672] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, .production_id = 36), SHIFT_REPEAT(222), + [2675] = {.entry = {.count = 1, .reusable = true}}, SHIFT(253), + [2677] = {.entry = {.count = 1, .reusable = true}}, SHIFT(790), + [2679] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_repeat1, 2, .production_id = 36), SHIFT_REPEAT(275), + [2682] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_repeat1, 2, .production_id = 36), + [2684] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_relative_import, 1), + [2686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), + [2688] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), + [2690] = {.entry = {.count = 1, .reusable = true}}, SHIFT(358), + [2692] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, .production_id = 44), SHIFT_REPEAT(1317), + [2695] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), + [2697] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), + [2699] = {.entry = {.count = 1, .reusable = true}}, SHIFT(796), + [2701] = {.entry = {.count = 1, .reusable = true}}, SHIFT(249), + [2703] = {.entry = {.count = 1, .reusable = true}}, SHIFT(640), + [2705] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), + [2707] = {.entry = {.count = 1, .reusable = true}}, SHIFT(360), + [2709] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), + [2711] = {.entry = {.count = 1, .reusable = true}}, SHIFT(242), + [2713] = {.entry = {.count = 1, .reusable = true}}, SHIFT(634), + [2715] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), + [2717] = {.entry = {.count = 1, .reusable = true}}, SHIFT(362), + [2719] = {.entry = {.count = 1, .reusable = true}}, SHIFT(899), + [2721] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameters, 4, .production_id = 111), + [2723] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_type_parameters_repeat1, 2, .production_id = 112), SHIFT_REPEAT(1020), + [2726] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_type_parameters_repeat1, 2, .production_id = 112), + [2728] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), + [2730] = {.entry = {.count = 1, .reusable = true}}, SHIFT(620), + [2732] = {.entry = {.count = 1, .reusable = true}}, SHIFT(208), + [2734] = {.entry = {.count = 1, .reusable = true}}, SHIFT(894), + [2736] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1087), + [2738] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1110), + [2740] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), + [2742] = {.entry = {.count = 1, .reusable = true}}, SHIFT(369), + [2744] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), + [2746] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 3, .production_id = 37), + [2748] = {.entry = {.count = 1, .reusable = true}}, SHIFT(782), + [2750] = {.entry = {.count = 1, .reusable = true}}, SHIFT(215), + [2752] = {.entry = {.count = 1, .reusable = true}}, SHIFT(351), + [2754] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 2), + [2756] = {.entry = {.count = 1, .reusable = true}}, SHIFT(364), + [2758] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1489), + [2760] = {.entry = {.count = 1, .reusable = true}}, SHIFT(290), + [2762] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_format_specifier_repeat1, 1, .production_id = 73), + [2764] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_format_specifier_repeat1, 1, .production_id = 73), + [2766] = {.entry = {.count = 1, .reusable = true}}, SHIFT(257), + [2768] = {.entry = {.count = 1, .reusable = true}}, SHIFT(810), + [2770] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), + [2772] = {.entry = {.count = 1, .reusable = true}}, SHIFT(836), + [2774] = {.entry = {.count = 1, .reusable = true}}, SHIFT(831), + [2776] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), + [2778] = {.entry = {.count = 1, .reusable = true}}, SHIFT(830), + [2780] = {.entry = {.count = 1, .reusable = true}}, SHIFT(198), + [2782] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__parameters_repeat1, 2), SHIFT_REPEAT(903), + [2785] = {.entry = {.count = 1, .reusable = true}}, SHIFT(235), + [2787] = {.entry = {.count = 1, .reusable = true}}, SHIFT(632), + [2789] = {.entry = {.count = 1, .reusable = true}}, SHIFT(209), + [2791] = {.entry = {.count = 1, .reusable = true}}, SHIFT(644), + [2793] = {.entry = {.count = 1, .reusable = true}}, SHIFT(207), + [2795] = {.entry = {.count = 1, .reusable = true}}, SHIFT(613), + [2797] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206), + [2799] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_item, 3, .dynamic_precedence = -1, .production_id = 58), + [2801] = {.entry = {.count = 1, .reusable = true}}, SHIFT(256), + [2803] = {.entry = {.count = 1, .reusable = true}}, SHIFT(221), + [2805] = {.entry = {.count = 1, .reusable = true}}, SHIFT(255), + [2807] = {.entry = {.count = 1, .reusable = true}}, SHIFT(220), + [2809] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1307), + [2811] = {.entry = {.count = 1, .reusable = true}}, SHIFT(827), + [2813] = {.entry = {.count = 1, .reusable = true}}, SHIFT(199), + [2815] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), + [2817] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_maybe_star_pattern, 1), + [2819] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_patterns, 1), + [2821] = {.entry = {.count = 1, .reusable = true}}, SHIFT(225), + [2823] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1195), + [2825] = {.entry = {.count = 1, .reusable = true}}, SHIFT(224), + [2827] = {.entry = {.count = 1, .reusable = true}}, SHIFT(286), + [2829] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__parameters_repeat1, 2), SHIFT_REPEAT(902), + [2832] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat1, 2), + [2834] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat1, 2), SHIFT_REPEAT(863), + [2837] = {.entry = {.count = 1, .reusable = true}}, SHIFT(821), + [2839] = {.entry = {.count = 1, .reusable = true}}, SHIFT(186), + [2841] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_subscript_repeat1, 2, .production_id = 97), SHIFT_REPEAT(314), + [2844] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_subscript_repeat1, 2, .production_id = 97), + [2846] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), + [2848] = {.entry = {.count = 1, .reusable = true}}, SHIFT(809), + [2850] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1170), + [2852] = {.entry = {.count = 1, .reusable = true}}, SHIFT(243), + [2854] = {.entry = {.count = 1, .reusable = true}}, SHIFT(835), + [2856] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1175), + [2858] = {.entry = {.count = 1, .reusable = true}}, SHIFT(297), + [2860] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), + [2862] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), + [2864] = {.entry = {.count = 1, .reusable = true}}, SHIFT(302), + [2866] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1069), + [2868] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat2, 2), + [2870] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat2, 2), SHIFT_REPEAT(1353), + [2873] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), + [2875] = {.entry = {.count = 1, .reusable = true}}, SHIFT(308), + [2877] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 1), + [2879] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameters, 3, .production_id = 85), + [2881] = {.entry = {.count = 1, .reusable = true}}, SHIFT(857), + [2883] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1329), + [2885] = {.entry = {.count = 1, .reusable = true}}, SHIFT(776), + [2887] = {.entry = {.count = 1, .reusable = true}}, SHIFT(214), + [2889] = {.entry = {.count = 1, .reusable = true}}, SHIFT(966), + [2891] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1215), + [2893] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1338), + [2895] = {.entry = {.count = 1, .reusable = true}}, SHIFT(898), + [2897] = {.entry = {.count = 1, .reusable = true}}, SHIFT(462), + [2899] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_exec_statement, 2, .production_id = 15), + [2901] = {.entry = {.count = 1, .reusable = true}}, SHIFT(461), + [2903] = {.entry = {.count = 1, .reusable = true}}, SHIFT(858), + [2905] = {.entry = {.count = 1, .reusable = true}}, SHIFT(989), + [2907] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_positional_separator, 1), + [2909] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_future_import_statement, 6, .production_id = 98), + [2911] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevar_parameter, 2, .production_id = 84), + [2913] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), + [2915] = {.entry = {.count = 1, .reusable = true}}, SHIFT(341), + [2917] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pass_statement, 1), + [2919] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_break_statement, 1), + [2921] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_continue_statement, 1), + [2923] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_from_statement, 6, .production_id = 99), + [2925] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevartuple_parameter, 2, .production_id = 23), + [2927] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_key_value_pattern, 3, .production_id = 62), + [2929] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1087), + [2931] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1424), + [2933] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), + [2935] = {.entry = {.count = 1, .reusable = true}}, SHIFT(350), + [2937] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_positional_pattern, 1), + [2939] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_double_star_pattern, 2, .production_id = 11), + [2941] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1426), + [2943] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 5, .production_id = 91), + [2945] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99), + [2947] = {.entry = {.count = 1, .reusable = true}}, SHIFT(368), + [2949] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), + [2951] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321), + [2953] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameters, 3), + [2955] = {.entry = {.count = 1, .reusable = true}}, SHIFT(105), + [2957] = {.entry = {.count = 1, .reusable = true}}, SHIFT(322), + [2959] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), + [2961] = {.entry = {.count = 1, .reusable = true}}, SHIFT(346), + [2963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), + [2965] = {.entry = {.count = 1, .reusable = true}}, SHIFT(323), + [2967] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [2969] = {.entry = {.count = 1, .reusable = true}}, SHIFT(324), + [2971] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, .production_id = 67), + [2973] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameters, 2), + [2975] = {.entry = {.count = 1, .reusable = false}}, SHIFT(990), + [2977] = {.entry = {.count = 1, .reusable = true}}, SHIFT(990), + [2979] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_statement, 2, .production_id = 5), + [2981] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_repeat1, 2, .production_id = 31), + [2983] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_future_import_statement, 4, .production_id = 46), + [2985] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_augmented_assignment, 3, .production_id = 39), + [2987] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1010), + [2989] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1010), + [2991] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_type_parameters_repeat1, 2, .production_id = 85), + [2993] = {.entry = {.count = 1, .reusable = false}}, SHIFT(951), + [2995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(951), + [2997] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 3, .production_id = 38), + [2999] = {.entry = {.count = 1, .reusable = true}}, SHIFT(977), + [3001] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_from_statement, 4, .production_id = 48), + [3003] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_from_statement, 4, .production_id = 47), + [3005] = {.entry = {.count = 1, .reusable = true}}, SHIFT(854), + [3007] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_keyword_pattern, 3, .production_id = 157), + [3009] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_wildcard_import, 1), + [3011] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1496), + [3013] = {.entry = {.count = 1, .reusable = true}}, SHIFT(972), + [3015] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_paramspec_parameter, 2, .production_id = 23), + [3017] = {.entry = {.count = 1, .reusable = true}}, SHIFT(850), + [3019] = {.entry = {.count = 1, .reusable = true}}, SHIFT(612), + [3021] = {.entry = {.count = 1, .reusable = true}}, SHIFT(860), + [3023] = {.entry = {.count = 1, .reusable = true}}, SHIFT(817), + [3025] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_relative_import, 2, .production_id = 23), + [3027] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1222), + [3029] = {.entry = {.count = 1, .reusable = true}}, SHIFT(839), + [3031] = {.entry = {.count = 1, .reusable = true}}, SHIFT(848), + [3033] = {.entry = {.count = 1, .reusable = true}}, SHIFT(312), + [3035] = {.entry = {.count = 1, .reusable = true}}, SHIFT(818), + [3037] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1342), + [3039] = {.entry = {.count = 1, .reusable = true}}, SHIFT(606), + [3041] = {.entry = {.count = 1, .reusable = true}}, SHIFT(775), + [3043] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1350), + [3045] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), + [3047] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 4), + [3049] = {.entry = {.count = 1, .reusable = true}}, SHIFT(397), + [3051] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), + [3053] = {.entry = {.count = 1, .reusable = true}}, SHIFT(804), + [3055] = {.entry = {.count = 1, .reusable = true}}, SHIFT(724), + [3057] = {.entry = {.count = 1, .reusable = true}}, SHIFT(784), + [3059] = {.entry = {.count = 1, .reusable = true}}, SHIFT(622), + [3061] = {.entry = {.count = 1, .reusable = true}}, SHIFT(635), + [3063] = {.entry = {.count = 1, .reusable = true}}, SHIFT(873), + [3065] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), + [3067] = {.entry = {.count = 1, .reusable = true}}, SHIFT(718), + [3069] = {.entry = {.count = 1, .reusable = true}}, SHIFT(611), + [3071] = {.entry = {.count = 1, .reusable = true}}, SHIFT(795), + [3073] = {.entry = {.count = 1, .reusable = true}}, SHIFT(791), + [3075] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1089), + [3077] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1056), + [3079] = {.entry = {.count = 1, .reusable = true}}, SHIFT(637), + [3081] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1382), + [3083] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1116), + [3085] = {.entry = {.count = 1, .reusable = true}}, SHIFT(917), + [3087] = {.entry = {.count = 1, .reusable = true}}, SHIFT(688), + [3089] = {.entry = {.count = 1, .reusable = true}}, SHIFT(780), + [3091] = {.entry = {.count = 1, .reusable = true}}, SHIFT(829), + [3093] = {.entry = {.count = 1, .reusable = true}}, SHIFT(227), + [3095] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1226), + [3097] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), + [3099] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1129), + [3101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(465), + [3103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1374), + [3105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1352), + [3107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1402), + [3109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(436), + [3111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), + [3113] = {.entry = {.count = 1, .reusable = true}}, SHIFT(623), + [3115] = {.entry = {.count = 1, .reusable = true}}, SHIFT(816), + [3117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(625), + [3119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), + [3121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(819), + [3123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(626), + [3125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), + [3127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(814), + [3129] = {.entry = {.count = 1, .reusable = true}}, SHIFT(108), + [3131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), + [3133] = {.entry = {.count = 1, .reusable = true}}, SHIFT(813), + [3135] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), + [3137] = {.entry = {.count = 1, .reusable = true}}, SHIFT(840), + [3139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), + [3141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1101), + [3143] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), + [3145] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), + [3147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(102), + [3149] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), + [3151] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), + [3153] = {.entry = {.count = 1, .reusable = true}}, SHIFT(627), + [3155] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), + [3157] = {.entry = {.count = 1, .reusable = true}}, SHIFT(864), + [3159] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 5), + [3161] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 3), + [3163] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1223), + [3165] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [3167] = {.entry = {.count = 1, .reusable = true}}, SHIFT(435), + [3169] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1179), + [3171] = {.entry = {.count = 1, .reusable = true}}, SHIFT(701), + [3173] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), + [3175] = {.entry = {.count = 1, .reusable = true}}, SHIFT(969), + [3177] = {.entry = {.count = 1, .reusable = true}}, SHIFT(874), + [3179] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1107), + [3181] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), + [3183] = {.entry = {.count = 1, .reusable = true}}, SHIFT(365), + [3185] = {.entry = {.count = 1, .reusable = true}}, SHIFT(106), + [3187] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [3189] = {.entry = {.count = 1, .reusable = true}}, SHIFT(771), + [3191] = {.entry = {.count = 1, .reusable = true}}, SHIFT(773), + [3193] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), + [3195] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), + [3197] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1108), + [3199] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1155), + [3201] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1154), + [3203] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1128), + [3205] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), + [3207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(777), + [3209] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1176), + [3211] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1074), + [3213] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1132), + [3215] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1131), + [3217] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_parameters, 1), + [3219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(437), +}; + +#ifdef __cplusplus +extern "C" { +#endif +void *tree_sitter_python_external_scanner_create(void); +void tree_sitter_python_external_scanner_destroy(void *); +bool tree_sitter_python_external_scanner_scan(void *, TSLexer *, const bool *); +unsigned tree_sitter_python_external_scanner_serialize(void *, char *); +void tree_sitter_python_external_scanner_deserialize(void *, const char *, unsigned); + +#ifdef _WIN32 +#define extern __declspec(dllexport) +#endif + +extern const TSLanguage *tree_sitter_python(void) { + static const TSLanguage language = { + .version = LANGUAGE_VERSION, + .symbol_count = SYMBOL_COUNT, + .alias_count = ALIAS_COUNT, + .token_count = TOKEN_COUNT, + .external_token_count = EXTERNAL_TOKEN_COUNT, + .state_count = STATE_COUNT, + .large_state_count = LARGE_STATE_COUNT, + .production_id_count = PRODUCTION_ID_COUNT, + .field_count = FIELD_COUNT, + .max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH, + .parse_table = &ts_parse_table[0][0], + .small_parse_table = ts_small_parse_table, + .small_parse_table_map = ts_small_parse_table_map, + .parse_actions = ts_parse_actions, + .symbol_names = ts_symbol_names, + .field_names = ts_field_names, + .field_map_slices = ts_field_map_slices, + .field_map_entries = ts_field_map_entries, + .symbol_metadata = ts_symbol_metadata, + .public_symbol_map = ts_symbol_map, + .alias_map = ts_non_terminal_alias_map, + .alias_sequences = &ts_alias_sequences[0][0], + .lex_modes = ts_lex_modes, + .lex_fn = ts_lex, + .keyword_lex_fn = ts_lex_keywords, + .keyword_capture_token = sym_identifier, + .external_scanner = { + &ts_external_scanner_states[0][0], + ts_external_scanner_symbol_map, + tree_sitter_python_external_scanner_create, + tree_sitter_python_external_scanner_destroy, + tree_sitter_python_external_scanner_scan, + tree_sitter_python_external_scanner_serialize, + tree_sitter_python_external_scanner_deserialize, + }, + .primary_state_ids = ts_primary_state_ids, + }; + return &language; +} +#ifdef __cplusplus +} +#endif diff --git a/python/extractor/tsg-python/tree-sitter-python/src/scanner.cc b/python/extractor/tsg-python/tree-sitter-python/src/scanner.cc new file mode 100644 index 00000000000..140bb65b1cf --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/src/scanner.cc @@ -0,0 +1,402 @@ +#include +#include +#include +#include +#include +#include +namespace { + +using std::vector; +using std::iswspace; +using std::memcpy; + +enum TokenType { + NEWLINE, + INDENT, + DEDENT, + STRING_START, + STRING_CONTENT, + STRING_END, +}; + +struct Delimiter { + enum { + SingleQuote = 1 << 0, + DoubleQuote = 1 << 1, + BackQuote = 1 << 2, + Raw = 1 << 3, + Format = 1 << 4, + Triple = 1 << 5, + Bytes = 1 << 6, + }; + + Delimiter() : flags(0) {} + + bool is_format() const { + return flags & Format; + } + + bool is_raw() const { + return flags & Raw; + } + + bool is_triple() const { + return flags & Triple; + } + + bool is_bytes() const { + return flags & Bytes; + } + + int32_t end_character() const { + if (flags & SingleQuote) return '\''; + if (flags & DoubleQuote) return '"'; + if (flags & BackQuote) return '`'; + return 0; + } + + void set_format() { + flags |= Format; + } + + void set_raw() { + flags |= Raw; + } + + void set_triple() { + flags |= Triple; + } + + void set_bytes() { + flags |= Bytes; + } + + void set_end_character(int32_t character) { + switch (character) { + case '\'': + flags |= SingleQuote; + break; + case '"': + flags |= DoubleQuote; + break; + case '`': + flags |= BackQuote; + break; + default: + assert(false); + } + } + + char flags; +}; + +struct Scanner { + Scanner() { + assert(sizeof(Delimiter) == sizeof(char)); + deserialize(NULL, 0); + } + + unsigned serialize(char *buffer) { + size_t i = 0; + + size_t delimiter_count = delimiter_stack.size(); + if (delimiter_count > UINT8_MAX) delimiter_count = UINT8_MAX; + buffer[i++] = delimiter_count; + + if (delimiter_count > 0) { + memcpy(&buffer[i], delimiter_stack.data(), delimiter_count); + } + i += delimiter_count; + + vector::iterator + iter = indent_length_stack.begin() + 1, + end = indent_length_stack.end(); + + for (; iter != end && i < TREE_SITTER_SERIALIZATION_BUFFER_SIZE; ++iter) { + buffer[i++] = *iter; + } + + return i; + } + + void deserialize(const char *buffer, unsigned length) { + delimiter_stack.clear(); + indent_length_stack.clear(); + indent_length_stack.push_back(0); + + if (length > 0) { + size_t i = 0; + + size_t delimiter_count = (uint8_t)buffer[i++]; + delimiter_stack.resize(delimiter_count); + if (delimiter_count > 0) { + memcpy(delimiter_stack.data(), &buffer[i], delimiter_count); + } + i += delimiter_count; + + for (; i < length; i++) { + indent_length_stack.push_back(buffer[i]); + } + } + } + + void advance(TSLexer *lexer) { + lexer->advance(lexer, false); + } + + void skip(TSLexer *lexer) { + lexer->advance(lexer, true); + } + + bool scan(TSLexer *lexer, const bool *valid_symbols) { + if (valid_symbols[STRING_CONTENT] && !valid_symbols[INDENT] && !delimiter_stack.empty()) { + Delimiter delimiter = delimiter_stack.back(); + int32_t end_character = delimiter.end_character(); + bool has_content = false; + while (lexer->lookahead) { + if ((lexer->lookahead == '{' || lexer->lookahead == '}') && delimiter.is_format()) { + lexer->mark_end(lexer); + lexer->result_symbol = STRING_CONTENT; + return has_content; + } else if (lexer->lookahead == '\\') { + if (delimiter.is_raw()) { + lexer->advance(lexer, false); + continue; + } else if (delimiter.is_bytes()) { + lexer->mark_end(lexer); + lexer->advance(lexer, false); + if (lexer->lookahead == 'N' || lexer->lookahead == 'u' || lexer->lookahead == 'U') { + // In bytes string, \N{...}, \uXXXX and \UXXXXXXXX are not escape sequences + // https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals + lexer->advance(lexer, false); + } else { + lexer->result_symbol = STRING_CONTENT; + return has_content; + } + } else { + lexer->mark_end(lexer); + lexer->result_symbol = STRING_CONTENT; + return has_content; + } + } else if (lexer->lookahead == end_character) { + if (delimiter.is_triple()) { + lexer->mark_end(lexer); + lexer->advance(lexer, false); + if (lexer->lookahead == end_character) { + lexer->advance(lexer, false); + if (lexer->lookahead == end_character) { + if (has_content) { + lexer->result_symbol = STRING_CONTENT; + } else { + lexer->advance(lexer, false); + lexer->mark_end(lexer); + delimiter_stack.pop_back(); + lexer->result_symbol = STRING_END; + } + return true; + } else { + lexer->mark_end(lexer); + lexer->result_symbol = STRING_CONTENT; + return true; + } + } else { + lexer->mark_end(lexer); + lexer->result_symbol = STRING_CONTENT; + return true; + } + } else { + if (has_content) { + lexer->result_symbol = STRING_CONTENT; + } else { + lexer->advance(lexer, false); + delimiter_stack.pop_back(); + lexer->result_symbol = STRING_END; + } + lexer->mark_end(lexer); + return true; + } + } else if (lexer->lookahead == '\n' && has_content && !delimiter.is_triple()) { + return false; + } + advance(lexer); + has_content = true; + } + } + + lexer->mark_end(lexer); + + bool found_end_of_line = false; + uint32_t indent_length = 0; + int32_t first_comment_indent_length = -1; + for (;;) { + if (lexer->lookahead == '\n') { + found_end_of_line = true; + indent_length = 0; + skip(lexer); + } else if (lexer->lookahead == ' ') { + indent_length++; + skip(lexer); + } else if (lexer->lookahead == '\r') { + indent_length = 0; + skip(lexer); + } else if (lexer->lookahead == '\t') { + indent_length += 8; + skip(lexer); + } else if (lexer->lookahead == '#') { + if (first_comment_indent_length == -1) { + first_comment_indent_length = (int32_t)indent_length; + } + while (lexer->lookahead && lexer->lookahead != '\n') { + skip(lexer); + } + skip(lexer); + indent_length = 0; + } else if (lexer->lookahead == '\\') { + skip(lexer); + if (lexer->lookahead == '\r') { + skip(lexer); + } + if (lexer->lookahead == '\n') { + skip(lexer); + } else { + return false; + } + } else if (lexer->lookahead == '\f') { + indent_length = 0; + skip(lexer); + } else if (lexer->lookahead == 0) { + indent_length = 0; + found_end_of_line = true; + break; + } else { + break; + } + } + + if (found_end_of_line) { + if (!indent_length_stack.empty()) { + uint16_t current_indent_length = indent_length_stack.back(); + + if ( + valid_symbols[INDENT] && + indent_length > current_indent_length + ) { + indent_length_stack.push_back(indent_length); + lexer->result_symbol = INDENT; + return true; + } + + if ( + valid_symbols[DEDENT] && + indent_length < current_indent_length && + + // Wait to create a dedent token until we've consumed any comments + // whose indentation matches the current block. + first_comment_indent_length < (int32_t)current_indent_length + ) { + indent_length_stack.pop_back(); + lexer->result_symbol = DEDENT; + return true; + } + } + + if (valid_symbols[NEWLINE]) { + lexer->result_symbol = NEWLINE; + return true; + } + } + + if (first_comment_indent_length == -1 && valid_symbols[STRING_START]) { + Delimiter delimiter; + + bool has_flags = false; + while (lexer->lookahead) { + if (lexer->lookahead == 'f' || lexer->lookahead == 'F') { + delimiter.set_format(); + } else if (lexer->lookahead == 'r' || lexer->lookahead == 'R') { + delimiter.set_raw(); + } else if (lexer->lookahead == 'b' || lexer->lookahead == 'B') { + delimiter.set_bytes(); + } else if (lexer->lookahead != 'u' && lexer->lookahead != 'U') { + break; + } + has_flags = true; + advance(lexer); + } + + if (lexer->lookahead == '`') { + delimiter.set_end_character('`'); + advance(lexer); + lexer->mark_end(lexer); + } else if (lexer->lookahead == '\'') { + delimiter.set_end_character('\''); + advance(lexer); + lexer->mark_end(lexer); + if (lexer->lookahead == '\'') { + advance(lexer); + if (lexer->lookahead == '\'') { + advance(lexer); + lexer->mark_end(lexer); + delimiter.set_triple(); + } + } + } else if (lexer->lookahead == '"') { + delimiter.set_end_character('"'); + advance(lexer); + lexer->mark_end(lexer); + if (lexer->lookahead == '"') { + advance(lexer); + if (lexer->lookahead == '"') { + advance(lexer); + lexer->mark_end(lexer); + delimiter.set_triple(); + } + } + } + + if (delimiter.end_character()) { + delimiter_stack.push_back(delimiter); + lexer->result_symbol = STRING_START; + return true; + } else if (has_flags) { + return false; + } + } + + return false; + } + + vector indent_length_stack; + vector delimiter_stack; +}; + +} + +extern "C" { + +void *tree_sitter_python_external_scanner_create() { + return new Scanner(); +} + +bool tree_sitter_python_external_scanner_scan(void *payload, TSLexer *lexer, + const bool *valid_symbols) { + Scanner *scanner = static_cast(payload); + return scanner->scan(lexer, valid_symbols); +} + +unsigned tree_sitter_python_external_scanner_serialize(void *payload, char *buffer) { + Scanner *scanner = static_cast(payload); + return scanner->serialize(buffer); +} + +void tree_sitter_python_external_scanner_deserialize(void *payload, const char *buffer, unsigned length) { + Scanner *scanner = static_cast(payload); + scanner->deserialize(buffer, length); +} + +void tree_sitter_python_external_scanner_destroy(void *payload) { + Scanner *scanner = static_cast(payload); + delete scanner; +} + +} diff --git a/python/extractor/tsg-python/tree-sitter-python/src/tree_sitter/parser.h b/python/extractor/tsg-python/tree-sitter-python/src/tree_sitter/parser.h new file mode 100644 index 00000000000..2b14ac1046b --- /dev/null +++ b/python/extractor/tsg-python/tree-sitter-python/src/tree_sitter/parser.h @@ -0,0 +1,224 @@ +#ifndef TREE_SITTER_PARSER_H_ +#define TREE_SITTER_PARSER_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +#define ts_builtin_sym_error ((TSSymbol)-1) +#define ts_builtin_sym_end 0 +#define TREE_SITTER_SERIALIZATION_BUFFER_SIZE 1024 + +typedef uint16_t TSStateId; + +#ifndef TREE_SITTER_API_H_ +typedef uint16_t TSSymbol; +typedef uint16_t TSFieldId; +typedef struct TSLanguage TSLanguage; +#endif + +typedef struct { + TSFieldId field_id; + uint8_t child_index; + bool inherited; +} TSFieldMapEntry; + +typedef struct { + uint16_t index; + uint16_t length; +} TSFieldMapSlice; + +typedef struct { + bool visible; + bool named; + bool supertype; +} TSSymbolMetadata; + +typedef struct TSLexer TSLexer; + +struct TSLexer { + int32_t lookahead; + TSSymbol result_symbol; + void (*advance)(TSLexer *, bool); + void (*mark_end)(TSLexer *); + uint32_t (*get_column)(TSLexer *); + bool (*is_at_included_range_start)(const TSLexer *); + bool (*eof)(const TSLexer *); +}; + +typedef enum { + TSParseActionTypeShift, + TSParseActionTypeReduce, + TSParseActionTypeAccept, + TSParseActionTypeRecover, +} TSParseActionType; + +typedef union { + struct { + uint8_t type; + TSStateId state; + bool extra; + bool repetition; + } shift; + struct { + uint8_t type; + uint8_t child_count; + TSSymbol symbol; + int16_t dynamic_precedence; + uint16_t production_id; + } reduce; + uint8_t type; +} TSParseAction; + +typedef struct { + uint16_t lex_state; + uint16_t external_lex_state; +} TSLexMode; + +typedef union { + TSParseAction action; + struct { + uint8_t count; + bool reusable; + } entry; +} TSParseActionEntry; + +struct TSLanguage { + uint32_t version; + uint32_t symbol_count; + uint32_t alias_count; + uint32_t token_count; + uint32_t external_token_count; + uint32_t state_count; + uint32_t large_state_count; + uint32_t production_id_count; + uint32_t field_count; + uint16_t max_alias_sequence_length; + const uint16_t *parse_table; + const uint16_t *small_parse_table; + const uint32_t *small_parse_table_map; + const TSParseActionEntry *parse_actions; + const char * const *symbol_names; + const char * const *field_names; + const TSFieldMapSlice *field_map_slices; + const TSFieldMapEntry *field_map_entries; + const TSSymbolMetadata *symbol_metadata; + const TSSymbol *public_symbol_map; + const uint16_t *alias_map; + const TSSymbol *alias_sequences; + const TSLexMode *lex_modes; + bool (*lex_fn)(TSLexer *, TSStateId); + bool (*keyword_lex_fn)(TSLexer *, TSStateId); + TSSymbol keyword_capture_token; + struct { + const bool *states; + const TSSymbol *symbol_map; + void *(*create)(void); + void (*destroy)(void *); + bool (*scan)(void *, TSLexer *, const bool *symbol_whitelist); + unsigned (*serialize)(void *, char *); + void (*deserialize)(void *, const char *, unsigned); + } external_scanner; + const TSStateId *primary_state_ids; +}; + +/* + * Lexer Macros + */ + +#define START_LEXER() \ + bool result = false; \ + bool skip = false; \ + bool eof = false; \ + int32_t lookahead; \ + goto start; \ + next_state: \ + lexer->advance(lexer, skip); \ + start: \ + skip = false; \ + lookahead = lexer->lookahead; + +#define ADVANCE(state_value) \ + { \ + state = state_value; \ + goto next_state; \ + } + +#define SKIP(state_value) \ + { \ + skip = true; \ + state = state_value; \ + goto next_state; \ + } + +#define ACCEPT_TOKEN(symbol_value) \ + result = true; \ + lexer->result_symbol = symbol_value; \ + lexer->mark_end(lexer); + +#define END_STATE() return result; + +/* + * Parse Table Macros + */ + +#define SMALL_STATE(id) id - LARGE_STATE_COUNT + +#define STATE(id) id + +#define ACTIONS(id) id + +#define SHIFT(state_value) \ + {{ \ + .shift = { \ + .type = TSParseActionTypeShift, \ + .state = state_value \ + } \ + }} + +#define SHIFT_REPEAT(state_value) \ + {{ \ + .shift = { \ + .type = TSParseActionTypeShift, \ + .state = state_value, \ + .repetition = true \ + } \ + }} + +#define SHIFT_EXTRA() \ + {{ \ + .shift = { \ + .type = TSParseActionTypeShift, \ + .extra = true \ + } \ + }} + +#define REDUCE(symbol_val, child_count_val, ...) \ + {{ \ + .reduce = { \ + .type = TSParseActionTypeReduce, \ + .symbol = symbol_val, \ + .child_count = child_count_val, \ + __VA_ARGS__ \ + }, \ + }} + +#define RECOVER() \ + {{ \ + .type = TSParseActionTypeRecover \ + }} + +#define ACCEPT_INPUT() \ + {{ \ + .type = TSParseActionTypeAccept \ + }} + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_PARSER_H_ diff --git a/python/extractor/tsg-python/tsg_to_dot.py b/python/extractor/tsg-python/tsg_to_dot.py new file mode 100644 index 00000000000..a39111f5077 --- /dev/null +++ b/python/extractor/tsg-python/tsg_to_dot.py @@ -0,0 +1,60 @@ +# Convert output of tree-sitter-graph to dot format. + +import sys +import re + +# regular expression to match a node +node_re = re.compile(r"node (?P\d+)") + +# regular expression to match an edge +edge_re = re.compile(r"edge (?P\d+) -> (?P\d+)") + +# regular expression to match a property +prop_re = re.compile(r"\s+(?P\w+): (?P.*)") + +# regular expression to match a link: "[graph node n]" +link_re = re.compile(r"\[graph node (?P\d+)\]") + +with open(sys.argv[1], 'r') as f, open(sys.argv[2], 'w') as out: + out.write("digraph G {\n") + label = [] + inside = False + node_id = 0 + links = {} + for line in f: + + m = node_re.match(line) + if m: + if inside: + out.write('\\n'.join(label) + "\"];\n") + for k, v in links.items(): + out.write("{} -> {} [label=\"{}\"];\n".format(node_id, v, k)) + out.write("{id} [label=\"".format(**m.groupdict())) + label = ["id={id}".format(**m.groupdict())] + inside = True + node_id = m.group('id') + links = {} + + m = edge_re.match(line) + if m: + if inside: + out.write('\\n'.join(label) + "\"];\n") + for k, v in links.items(): + out.write("{} -> {} [label=\"{}\"];\n".format(node_id, v, k)) + out.write("{from} -> {to} [label=\"".format(**m.groupdict())) + label = [] + inside = True + node_id = 0 + links = {} + + m = prop_re.match(line) + if m: + # escape quotes in value + label.append("{key}={value}".format(**m.groupdict()).replace('"', '\\"').replace('\\\\"', '')) + l = link_re.match(m.group('value')) + if l: + links[m.group('key')] = l.group('id') + out.write('\\n'.join(label) + "\"];\n") + for k, v in links.items(): + out.write("{} -> {} [label=\"{}\"];\n".format(node_id, v, k)) + out.write("}\n") diff --git a/python/extractor/unparse.py b/python/extractor/unparse.py new file mode 100644 index 00000000000..b12f1501592 --- /dev/null +++ b/python/extractor/unparse.py @@ -0,0 +1,709 @@ +#Copied Tools.unparse.py with modifications. Copyright PSF. + +"Usage: unparse.py " +import sys +import ast +import tokenize +import io +import os +import shutil + +# Large float and imaginary literals get turned into infinities in the AST. +# We unparse those infinities to INFSTR. +INFSTR = "1e" + repr(sys.float_info.max_10_exp + 1) + +def interleave(inter, f, seq): + """Call f on each item in seq, calling inter() in between. + """ + seq = iter(seq) + try: + f(next(seq)) + except StopIteration: + pass + else: + for x in seq: + inter() + f(x) + +class Unparser: + """Methods in this class recursively traverse an AST and + output source code for the abstract syntax; original formatting + is disregarded. """ + + def __init__(self, tree, file = sys.stdout): + """Unparser(tree, file=sys.stdout) -> None. + Print the source for tree to file.""" + self.f = file + self._indent = 0 + self.dispatch(tree) + print("", file=self.f) + self.f.flush() + + def fill(self, text = ""): + "Indent a piece of text, according to the current indentation level" + self.f.write("\n"+" "*self._indent + text) + + def write(self, text): + "Append a piece of text to the current line." + self.f.write(text) + + def enter(self): + "Print ':', and increase the indentation." + self.write(":") + self._indent += 1 + + def leave(self): + "Decrease the indentation level." + self._indent -= 1 + + def dispatch(self, tree): + "Dispatcher function, dispatching tree type T to method _T." + if isinstance(tree, list): + for t in tree: + self.dispatch(t) + return + meth = getattr(self, "_"+tree.__class__.__name__) + meth(tree) + + def remove_docstring(self, t): + if hasattr(t, "docstring"): + return + if not t.body: + return + if not isinstance(t.body[0], ast.Expr): + return + if not isinstance(t.body[0].value, ast.Str): + return + t.body = t.body[1:] + + def add_pass(self, t): + if t.body: + #No pass needed + return + t.body = [ast.Pass()] + + ############### Unparsing methods ###################### + # There should be one method per concrete grammar type # + # Constructors should be grouped by sum type. Ideally, # + # this would follow the order in the grammar, but # + # currently doesn't. # + ######################################################## + + def _Module(self, tree): + self.remove_docstring(tree) + self.add_pass(tree) + for stmt in tree.body: + self.dispatch(stmt) + + # stmt + def _Expr(self, tree): + self.fill() + self.dispatch(tree.value) + + def _Import(self, t): + self.fill("import ") + interleave(lambda: self.write(", "), self.dispatch, t.names) + + def _ImportFrom(self, t): + self.fill("from ") + self.write("." * t.level) + if t.module: + self.write(t.module) + self.write(" import ") + interleave(lambda: self.write(", "), self.dispatch, t.names) + + def _Assign(self, t): + self.fill() + for target in t.targets: + self.dispatch(target) + self.write(" = ") + self.dispatch(t.value) + + def _AugAssign(self, t): + self.fill() + self.dispatch(t.target) + self.write(" "+self.binop[t.op.__class__.__name__]+"= ") + self.dispatch(t.value) + + def _AnnAssign(self, t): + self.fill() + if not t.simple and isinstance(t.target, ast.Name): + self.write('(') + self.dispatch(t.target) + if not t.simple and isinstance(t.target, ast.Name): + self.write(')') + self.write(": ") + self.dispatch(t.annotation) + if t.value: + self.write(" = ") + self.dispatch(t.value) + + def _Return(self, t): + self.fill("return") + if t.value: + self.write(" ") + self.dispatch(t.value) + + def _Pass(self, t): + self.fill("pass") + + def _Break(self, t): + self.fill("break") + + def _Continue(self, t): + self.fill("continue") + + def _Delete(self, t): + self.fill("del ") + interleave(lambda: self.write(", "), self.dispatch, t.targets) + + def _Assert(self, t): + self.fill("assert ") + self.dispatch(t.test) + if t.msg: + self.write(", ") + self.dispatch(t.msg) + + def _Global(self, t): + self.fill("global ") + interleave(lambda: self.write(", "), self.write, t.names) + + def _Nonlocal(self, t): + self.fill("nonlocal ") + interleave(lambda: self.write(", "), self.write, t.names) + + def _Await(self, t): + self.write("(") + self.write("await") + if t.value: + self.write(" ") + self.dispatch(t.value) + self.write(")") + + def _Yield(self, t): + self.write("(") + self.write("yield") + if t.value: + self.write(" ") + self.dispatch(t.value) + self.write(")") + + def _YieldFrom(self, t): + self.write("(") + self.write("yield from") + if t.value: + self.write(" ") + self.dispatch(t.value) + self.write(")") + + def _Raise(self, t): + self.fill("raise") + if not t.exc: + assert not t.cause + return + self.write(" ") + self.dispatch(t.exc) + if t.cause: + self.write(" from ") + self.dispatch(t.cause) + + def _Try(self, t): + self.fill("try") + self.enter() + self.dispatch(t.body) + self.leave() + for ex in t.handlers: + self.dispatch(ex) + if t.orelse: + self.fill("else") + self.enter() + self.dispatch(t.orelse) + self.leave() + if t.finalbody: + self.fill("finally") + self.enter() + self.dispatch(t.finalbody) + self.leave() + + def _ExceptHandler(self, t): + self.fill("except") + if t.type: + self.write(" ") + self.dispatch(t.type) + if t.name: + self.write(" as ") + self.write(t.name) + self.enter() + self.dispatch(t.body) + self.leave() + + def _ClassDef(self, t): + self.write("\n") + for deco in t.decorator_list: + self.fill("@") + self.dispatch(deco) + self.fill("class "+t.name) + self.write("(") + comma = False + for e in t.bases: + if comma: self.write(", ") + else: comma = True + self.dispatch(e) + for e in t.keywords: + if comma: self.write(", ") + else: comma = True + self.dispatch(e) + self.write(")") + + self.enter() + self.remove_docstring(t) + self.add_pass(t) + self.dispatch(t.body) + self.leave() + + def _FunctionDef(self, t): + self.__FunctionDef_helper(t, "def") + + def _AsyncFunctionDef(self, t): + self.__FunctionDef_helper(t, "async def") + + def __FunctionDef_helper(self, t, fill_suffix): + self.write("\n") + for deco in t.decorator_list: + self.fill("@") + self.dispatch(deco) + def_str = fill_suffix+" "+t.name + "(" + self.fill(def_str) + self.dispatch(t.args) + self.write(")") + if t.returns: + self.write(" -> ") + self.dispatch(t.returns) + self.enter() + self.remove_docstring(t) + self.add_pass(t) + self.dispatch(t.body) + self.leave() + + def _For(self, t): + self.__For_helper("for ", t) + + def _AsyncFor(self, t): + self.__For_helper("async for ", t) + + def __For_helper(self, fill, t): + self.fill(fill) + self.dispatch(t.target) + self.write(" in ") + self.dispatch(t.iter) + self.enter() + self.dispatch(t.body) + self.leave() + if t.orelse: + self.fill("else") + self.enter() + self.dispatch(t.orelse) + self.leave() + + def _If(self, t): + self.fill("if ") + self.dispatch(t.test) + self.enter() + self.dispatch(t.body) + self.leave() + # collapse nested ifs into equivalent elifs. + while (t.orelse and len(t.orelse) == 1 and + isinstance(t.orelse[0], ast.If)): + t = t.orelse[0] + self.fill("elif ") + self.dispatch(t.test) + self.enter() + self.dispatch(t.body) + self.leave() + # final else + if t.orelse: + self.fill("else") + self.enter() + self.dispatch(t.orelse) + self.leave() + + def _While(self, t): + self.fill("while ") + self.dispatch(t.test) + self.enter() + self.dispatch(t.body) + self.leave() + if t.orelse: + self.fill("else") + self.enter() + self.dispatch(t.orelse) + self.leave() + + def _With(self, t): + self.fill("with ") + interleave(lambda: self.write(", "), self.dispatch, t.items) + self.enter() + self.dispatch(t.body) + self.leave() + + def _AsyncWith(self, t): + self.fill("async with ") + interleave(lambda: self.write(", "), self.dispatch, t.items) + self.enter() + self.dispatch(t.body) + self.leave() + + # expr + def _Bytes(self, t): + self.write(repr(t.s)) + + def _Str(self, tree): + s = repr(tree.s).encode("ascii", errors="backslashreplace").decode("ascii") + self.write(s) + + def _JoinedStr(self, t): + self.write("f") + string = io.StringIO() + self._fstring_JoinedStr(t, string.write) + self.write(repr(string.getvalue())) + + def _FormattedValue(self, t): + self.write("f") + string = io.StringIO() + self._fstring_FormattedValue(t, string.write) + self.write(repr(string.getvalue())) + + def _fstring_JoinedStr(self, t, write): + for value in t.values: + meth = getattr(self, "_fstring_" + type(value).__name__) + meth(value, write) + + def _fstring_Str(self, t, write): + value = t.s.replace("{", "{{").replace("}", "}}") + write(value) + + def _fstring_Constant(self, t, write): + assert isinstance(t.value, str) + value = t.value.replace("{", "{{").replace("}", "}}") + write(value) + + def _fstring_FormattedValue(self, t, write): + write("{") + expr = io.StringIO() + Unparser(t.value, expr) + expr = expr.getvalue().rstrip("\n") + if expr.startswith("{"): + write(" ") # Separate pair of opening brackets as "{ {" + write(expr) + if t.conversion != -1: + conversion = chr(t.conversion) + assert conversion in "sra" + write("!%s" % conversion) + if t.format_spec: + write(":") + meth = getattr(self, "_fstring_" + type(t.format_spec).__name__) + meth(t.format_spec, write) + write("}") + + def _Name(self, t): + self.write(t.id) + + def _write_constant(self, value): + if isinstance(value, (float, complex)): + self.write(repr(value).replace("inf", INFSTR)) + else: + self.write(repr(value)) + + def _Constant(self, t): + value = t.value + if isinstance(value, tuple): + self.write("(") + if len(value) == 1: + self._write_constant(value[0]) + self.write(",") + else: + interleave(lambda: self.write(", "), self._write_constant, value) + self.write(")") + else: + self._write_constant(t.value) + + def _NameConstant(self, t): + self.write(repr(t.value)) + + def _Num(self, t): + # Substitute overflowing decimal literal for AST infinities. + self.write(repr(t.n).replace("inf", INFSTR)) + + def _List(self, t): + self.write("[") + interleave(lambda: self.write(", "), self.dispatch, t.elts) + self.write("]") + + def _ListComp(self, t): + self.write("[") + self.dispatch(t.elt) + for gen in t.generators: + self.dispatch(gen) + self.write("]") + + def _GeneratorExp(self, t): + self.write("(") + self.dispatch(t.elt) + for gen in t.generators: + self.dispatch(gen) + self.write(")") + + def _SetComp(self, t): + self.write("{") + self.dispatch(t.elt) + for gen in t.generators: + self.dispatch(gen) + self.write("}") + + def _DictComp(self, t): + self.write("{") + self.dispatch(t.key) + self.write(": ") + self.dispatch(t.value) + for gen in t.generators: + self.dispatch(gen) + self.write("}") + + def _comprehension(self, t): + if hasattr(t, "is_async") and t.is_async: + self.write(" async for ") + else: + self.write(" for ") + self.dispatch(t.target) + self.write(" in ") + self.dispatch(t.iter) + for if_clause in t.ifs: + self.write(" if ") + self.dispatch(if_clause) + + def _IfExp(self, t): + self.write("(") + self.dispatch(t.body) + self.write(" if ") + self.dispatch(t.test) + self.write(" else ") + self.dispatch(t.orelse) + self.write(")") + + def _Set(self, t): + assert(t.elts) # should be at least one element + self.write("{") + interleave(lambda: self.write(", "), self.dispatch, t.elts) + self.write("}") + + def _Dict(self, t): + self.write("{") + def write_key_value_pair(k, v): + self.dispatch(k) + self.write(": ") + self.dispatch(v) + + def write_item(item): + k, v = item + if k is None: + # for dictionary unpacking operator in dicts {**{'y': 2}} + # see PEP 448 for details + self.write("**") + self.dispatch(v) + else: + write_key_value_pair(k, v) + interleave(lambda: self.write(", "), write_item, zip(t.keys, t.values)) + self.write("}") + + def _Tuple(self, t): + self.write("(") + if len(t.elts) == 1: + elt = t.elts[0] + self.dispatch(elt) + self.write(",") + else: + interleave(lambda: self.write(", "), self.dispatch, t.elts) + self.write(")") + + unop = {"Invert":"~", "Not": "not", "UAdd":"+", "USub":"-"} + def _UnaryOp(self, t): + self.write("(") + self.write(self.unop[t.op.__class__.__name__]) + self.write(" ") + self.dispatch(t.operand) + self.write(")") + + binop = { "Add":"+", "Sub":"-", "Mult":"*", "MatMult":"@", "Div":"/", "Mod":"%", + "LShift":"<<", "RShift":">>", "BitOr":"|", "BitXor":"^", "BitAnd":"&", + "FloorDiv":"//", "Pow": "**"} + def _BinOp(self, t): + self.write("(") + self.dispatch(t.left) + self.write(" " + self.binop[t.op.__class__.__name__] + " ") + self.dispatch(t.right) + self.write(")") + + cmpops = {"Eq":"==", "NotEq":"!=", "Lt":"<", "LtE":"<=", "Gt":">", "GtE":">=", + "Is":"is", "IsNot":"is not", "In":"in", "NotIn":"not in"} + def _Compare(self, t): + self.write("(") + self.dispatch(t.left) + for o, e in zip(t.ops, t.comparators): + self.write(" " + self.cmpops[o.__class__.__name__] + " ") + self.dispatch(e) + self.write(")") + + boolops = {ast.And: 'and', ast.Or: 'or'} + def _BoolOp(self, t): + self.write("(") + s = " %s " % self.boolops[t.op.__class__] + interleave(lambda: self.write(s), self.dispatch, t.values) + self.write(")") + + def _Attribute(self,t): + self.dispatch(t.value) + # Special case: 3.__abs__() is a syntax error, so if t.value + # is an integer literal then we need to either parenthesize + # it or add an extra space to get 3 .__abs__(). + if isinstance(t.value, ast.Num) and isinstance(t.value.n, int): + self.write(" ") + self.write(".") + self.write(t.attr) + + def _Call(self, t): + self.dispatch(t.func) + self.write("(") + comma = False + for e in t.args: + if comma: self.write(", ") + else: comma = True + self.dispatch(e) + for e in t.keywords: + if comma: self.write(", ") + else: comma = True + self.dispatch(e) + self.write(")") + + def _Subscript(self, t): + self.dispatch(t.value) + self.write("[") + self.dispatch(t.slice) + self.write("]") + + def _Starred(self, t): + self.write("*") + self.dispatch(t.value) + + # slice + def _Ellipsis(self, t): + self.write("...") + + def _Index(self, t): + self.dispatch(t.value) + + def _Slice(self, t): + if t.lower: + self.dispatch(t.lower) + self.write(":") + if t.upper: + self.dispatch(t.upper) + if t.step: + self.write(":") + self.dispatch(t.step) + + def _ExtSlice(self, t): + interleave(lambda: self.write(', '), self.dispatch, t.dims) + + # argument + def _arg(self, t): + self.write(t.arg) + if t.annotation: + self.write(": ") + self.dispatch(t.annotation) + + # others + def _arguments(self, t): + first = True + # normal arguments + defaults = [None] * (len(t.args) - len(t.defaults)) + t.defaults + for a, d in zip(t.args, defaults): + if first:first = False + else: self.write(", ") + self.dispatch(a) + if d: + self.write("=") + self.dispatch(d) + + # varargs, or bare '*' if no varargs but keyword-only arguments present + if t.vararg or t.kwonlyargs: + if first:first = False + else: self.write(", ") + self.write("*") + if t.vararg: + self.write(t.vararg.arg) + if t.vararg.annotation: + self.write(": ") + self.dispatch(t.vararg.annotation) + + # keyword-only arguments + if t.kwonlyargs: + for a, d in zip(t.kwonlyargs, t.kw_defaults): + if first:first = False + else: self.write(", ") + self.dispatch(a), + if d: + self.write("=") + self.dispatch(d) + + # kwargs + if t.kwarg: + if first:first = False + else: self.write(", ") + self.write("**"+t.kwarg.arg) + if t.kwarg.annotation: + self.write(": ") + self.dispatch(t.kwarg.annotation) + + def _keyword(self, t): + if t.arg is None: + self.write("**") + else: + self.write(t.arg) + self.write("=") + self.dispatch(t.value) + + def _Lambda(self, t): + self.write("(") + self.write("lambda ") + self.dispatch(t.args) + self.write(": ") + self.dispatch(t.body) + self.write(")") + + def _alias(self, t): + self.write(t.name) + if t.asname: + self.write(" as "+t.asname) + + def _withitem(self, t): + self.dispatch(t.context_expr) + if t.optional_vars: + self.write(" as ") + self.dispatch(t.optional_vars) + +def roundtrip(filename, outpath): + with open(filename, "rb") as pyfile: + encoding = tokenize.detect_encoding(pyfile.readline)[0] + with open(filename, "r", encoding=encoding) as pyfile: + source = pyfile.read() + tree = compile(source, filename, "exec", ast.PyCF_ONLY_AST) + with open(outpath, "w", encoding=encoding) as output: + Unparser(tree, output) + +def strip_comments_and_docstrings(path): + tmp = path + ".tmp" + if path.endswith(".py"): + roundtrip(path, tmp) + else: + shutil.copy(path, tmp) + return tmp diff --git a/python/ql/consistency-queries/DataFlowConsistency.ql b/python/ql/consistency-queries/DataFlowConsistency.ql index f0a0d0356ca..759db3d19a9 100644 --- a/python/ql/consistency-queries/DataFlowConsistency.ql +++ b/python/ql/consistency-queries/DataFlowConsistency.ql @@ -10,12 +10,16 @@ private import semmle.python.dataflow.new.internal.DataFlowDispatch private import semmle.python.dataflow.new.internal.TaintTrackingImplSpecific private import codeql.dataflow.internal.DataFlowImplConsistency -private module Input implements InputSig { +private module Input implements InputSig { private import Private private import Public predicate postWithInFlowExclude(Node n) { n instanceof FlowSummaryNode } + predicate uniqueNodeLocationExclude(Node n) { n instanceof FlowSummaryNode } + + predicate missingLocationExclude(Node n) { n instanceof FlowSummaryNode } + predicate argHasPostUpdateExclude(ArgumentNode n) { // TODO: Implement post-updates for *args, see tests added in https://github.com/github/codeql/pull/14936 exists(ArgumentPosition apos | n.argumentOf(_, apos) and apos.isStarArgs(_)) @@ -132,4 +136,4 @@ private module Input implements InputSig { } } -import MakeConsistency +import MakeConsistency diff --git a/python/ql/consistency-queries/PhaseDependentFlowConsistency.ql b/python/ql/consistency-queries/PhaseDependentFlowConsistency.ql new file mode 100644 index 00000000000..066e7d1fa1e --- /dev/null +++ b/python/ql/consistency-queries/PhaseDependentFlowConsistency.ql @@ -0,0 +1,21 @@ +private import python +private import semmle.python.dataflow.new.DataFlow::DataFlow +private import semmle.python.dataflow.new.internal.DataFlowPrivate as DataFlowPrivate +private import semmle.python.dataflow.new.internal.VariableCapture as VariableCapture + +from Node node +where + not exists(node.getScope()) and + exists(Node nodeFrom, Node nodeTo | node in [nodeFrom, nodeTo] | + // the list of step relations used with PhaseDependentFlow has been compiled + // manually, and there isn't really a good way to do so automatically :| + DataFlowPrivate::LocalFlow::definitionFlowStep(nodeFrom, nodeTo) + or + DataFlowPrivate::LocalFlow::expressionFlowStep(nodeFrom, nodeTo) + or + DataFlowPrivate::LocalFlow::useUseFlowStep(nodeFrom, nodeTo) + or + VariableCapture::valueStep(nodeFrom, nodeTo) + ) +select node, + "Node being used in PhaseDependentFlow does not have result for .getScope(), so will not work properly (since division into run-time/import-time is based on .getScope result)" diff --git a/python/ql/consistency-queries/TypeTrackingConsistency.ql b/python/ql/consistency-queries/TypeTrackingConsistency.ql new file mode 100644 index 00000000000..15083229002 --- /dev/null +++ b/python/ql/consistency-queries/TypeTrackingConsistency.ql @@ -0,0 +1,42 @@ +private import python +private import semmle.python.dataflow.new.DataFlow +private import semmle.python.dataflow.new.internal.DataFlowPrivate as DataFlowPrivate +private import semmle.python.dataflow.new.internal.TypeTrackingImpl + +private module ConsistencyChecksInput implements ConsistencyChecksInputSig { + predicate unreachableNodeExclude(DataFlow::Node n) { + n instanceof DataFlowPrivate::SyntheticPostUpdateNode + or + n instanceof DataFlowPrivate::SyntheticPreUpdateNode + or + // TODO: when adding support for proper content, handle **kwargs passing better! + n instanceof DataFlowPrivate::SynthDictSplatArgumentNode + or + // TODO: when adding support for proper content, handle unpacking tuples in match + // cases better, such as + // + // match (NONSOURCE, SOURCE): + // case (x, y): ... + exists(DataFlow::Node m | + m.asCfgNode().getNode() instanceof MatchCapturePattern + or + m.asCfgNode().getNode() instanceof MatchAsPattern + or + m.asCfgNode().getNode() instanceof MatchOrPattern + | + TypeTrackingInput::simpleLocalSmallStep*(m, n) + ) + or + // TODO: when adding support for proper content, handle iterable unpacking better + // such as `for k,v in items:`, or `a, (b,c) = ...` + n instanceof DataFlow::IterableSequenceNode + or + // We have missing use-use flow in + // https://github.com/python/cpython/blob/0fb18b02c8ad56299d6a2910be0bab8ad601ef24/Lib/socketserver.py#L276-L303 + // which I couldn't just fix. We ignore the problems here, and instead rely on the + // test-case added in https://github.com/github/codeql/pull/15841 + n.getLocation().getFile().getAbsolutePath().matches("%/socketserver.py") + } +} + +import ConsistencyChecks diff --git a/python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md b/python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md new file mode 100644 index 00000000000..3c47c6ba866 --- /dev/null +++ b/python/ql/lib/change-notes/2024-02-28-iterable-unpacking-module-scope.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Fixed flow for iterable unpacking (`a,b = my_tuple`) when it occurs on top-level (module) scope. diff --git a/python/ql/lib/change-notes/2024-03-01-dict-update-content.md b/python/ql/lib/change-notes/2024-03-01-dict-update-content.md new file mode 100644 index 00000000000..dfb8d247fff --- /dev/null +++ b/python/ql/lib/change-notes/2024-03-01-dict-update-content.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Fixed missing flow for dictionary updates (`d[] = ...`) when `` is a string constant not used in dictionary literals or as name of keyword-argument. diff --git a/python/ql/lib/semmle/python/ApiGraphs.qll b/python/ql/lib/semmle/python/ApiGraphs.qll index 18202ebb524..6f27c829e32 100644 --- a/python/ql/lib/semmle/python/ApiGraphs.qll +++ b/python/ql/lib/semmle/python/ApiGraphs.qll @@ -328,6 +328,9 @@ module API { */ DataFlow::Node getInducingNode() { this = Impl::MkUse(result) or this = Impl::MkDef(result) } + /** Gets the location of this node */ + PY::Location getLocation() { result = this.getInducingNode().getLocation() } + /** * Holds if this element is at the specified location. * The location spans column `startcolumn` of line `startline` to @@ -335,7 +338,7 @@ module API { * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - predicate hasLocationInfo( + deprecated predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { this.getInducingNode().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) diff --git a/python/ql/lib/semmle/python/dataflow/new/DataFlow.qll b/python/ql/lib/semmle/python/dataflow/new/DataFlow.qll index 75725a42a9e..17cc0a0ee85 100644 --- a/python/ql/lib/semmle/python/dataflow/new/DataFlow.qll +++ b/python/ql/lib/semmle/python/dataflow/new/DataFlow.qll @@ -24,6 +24,6 @@ private import python module DataFlow { private import internal.DataFlowImplSpecific private import codeql.dataflow.DataFlow - import DataFlowMake + import DataFlowMake import internal.DataFlowImpl1 } diff --git a/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll b/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll index 800c9592dcc..9c3033e6126 100644 --- a/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll +++ b/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll @@ -2,7 +2,6 @@ private import python private import semmle.python.dataflow.new.DataFlow -private import semmle.python.frameworks.data.ModelsAsData private import semmle.python.ApiGraphs private import internal.FlowSummaryImpl as Impl private import internal.DataFlowUtil @@ -11,6 +10,7 @@ private import internal.DataFlowPrivate // import all instances below private module Summaries { private import semmle.python.Frameworks + private import semmle.python.frameworks.data.ModelsAsData } deprecated class SummaryComponent = Impl::Private::SummaryComponent; @@ -36,32 +36,3 @@ abstract class SummarizedCallable extends LibraryCallable, Impl::Public::Summari } deprecated class RequiredSummaryComponentStack = Impl::Private::RequiredSummaryComponentStack; - -private class SummarizedCallableFromModel extends SummarizedCallable { - string type; - string path; - - SummarizedCallableFromModel() { - ModelOutput::relevantSummaryModel(type, path, _, _, _) and - this = type + ";" + path - } - - override CallCfgNode getACall() { ModelOutput::resolvedSummaryBase(type, path, result) } - - override ArgumentNode getACallback() { - exists(API::Node base | - ModelOutput::resolvedSummaryRefBase(type, path, base) and - result = base.getAValueReachableFromSource() - ) - } - - override predicate propagatesFlow(string input, string output, boolean preservesValue) { - exists(string kind | ModelOutput::relevantSummaryModel(type, path, input, output, kind) | - kind = "value" and - preservesValue = true - or - kind = "taint" and - preservesValue = false - ) - } -} diff --git a/python/ql/lib/semmle/python/dataflow/new/TaintTracking.qll b/python/ql/lib/semmle/python/dataflow/new/TaintTracking.qll index aa80e7c7148..e085ba45dd0 100644 --- a/python/ql/lib/semmle/python/dataflow/new/TaintTracking.qll +++ b/python/ql/lib/semmle/python/dataflow/new/TaintTracking.qll @@ -19,6 +19,6 @@ module TaintTracking { private import semmle.python.dataflow.new.internal.DataFlowImplSpecific private import semmle.python.dataflow.new.internal.TaintTrackingImplSpecific private import codeql.dataflow.TaintTracking - import TaintFlowMake + import TaintFlowMake import internal.tainttracking1.TaintTrackingImpl } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index 87a278e0f6b..b869bdda521 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -57,6 +57,9 @@ newtype TParameterPosition = // parameter positions available. FlowSummaryImpl::ParsePositions::isParsedPositionalArgumentPosition(_, index) } or + TPositionalParameterLowerBoundPosition(int pos) { + FlowSummaryImpl::ParsePositions::isParsedArgumentLowerBoundPosition(_, pos) + } or TKeywordParameterPosition(string name) { name = any(Parameter p).getName() or @@ -91,6 +94,9 @@ class ParameterPosition extends TParameterPosition { /** Holds if this position represents a positional parameter at (0-based) `index`. */ predicate isPositional(int index) { this = TPositionalParameterPosition(index) } + /** Holds if this position represents any positional parameter starting from position `pos`. */ + predicate isPositionalLowerBound(int pos) { this = TPositionalParameterLowerBoundPosition(pos) } + /** Holds if this position represents a keyword parameter named `name`. */ predicate isKeyword(string name) { this = TKeywordParameterPosition(name) } @@ -123,6 +129,8 @@ class ParameterPosition extends TParameterPosition { or exists(int index | this.isPositional(index) and result = "position " + index) or + exists(int pos | this.isPositionalLowerBound(pos) and result = "position " + pos + "..") + or exists(string name | this.isKeyword(name) and result = "keyword " + name) or exists(int index | this.isStarArgs(index) and result = "*args at " + index) @@ -211,6 +219,10 @@ predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { or exists(int index | ppos.isPositional(index) and apos.isPositional(index)) or + exists(int index1, int index2 | + ppos.isPositionalLowerBound(index1) and apos.isPositional(index2) and index2 >= index1 + ) + or exists(string name | ppos.isKeyword(name) and apos.isKeyword(name)) or exists(int index | ppos.isStarArgs(index) and apos.isStarArgs(index)) @@ -360,6 +372,10 @@ abstract class DataFlowFunction extends DataFlowCallable, TFunction { result.getParameter() = func.getArg(index + this.positionalOffset()) ) or + exists(int index1, int index2 | ppos.isPositionalLowerBound(index1) and index2 >= index1 | + result.getParameter() = func.getArg(index2 + this.positionalOffset()) + ) + or exists(string name | ppos.isKeyword(name) | result.getParameter() = func.getArgByName(name)) or // `*args` @@ -1595,7 +1611,7 @@ class FlowSummaryNode extends Node, TFlowSummaryNode { override string toString() { result = this.getSummaryNode().toString() } // Hack to return "empty location" - override predicate hasLocationInfo( + deprecated override predicate hasLocationInfo( string file, int startline, int startcolumn, int endline, int endcolumn ) { file = "" and diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll index 92f0f17ce82..9789857adcb 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll @@ -1,3 +1,4 @@ private import DataFlowImplSpecific private import codeql.dataflow.internal.DataFlowImpl -import MakeImpl +private import semmle.python.Files +import MakeImpl diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl1.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl1.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl1.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl1.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll index 41c9c4ec1be..cd7c3992330 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll @@ -1,3 +1,4 @@ private import DataFlowImplSpecific private import codeql.dataflow.internal.DataFlowImplCommon -import MakeImplCommon +private import semmle.python.Files +import MakeImplCommon diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplSpecific.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplSpecific.qll index cffdefe41ba..2d18c789732 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplSpecific.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplSpecific.qll @@ -15,7 +15,7 @@ module Public { import DataFlowUtil } -module PythonDataFlow implements InputSig { +module PythonDataFlow implements InputSig { import Private import Public diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index c11e0cde64d..47f41d0cd05 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -809,6 +809,8 @@ predicate dictStoreStep(CfgNode nodeFrom, DictionaryElementContent c, Node nodeT * TODO: Once TaintTracking no longer uses `dictStoreStep`, unify the two predicates. */ private predicate moreDictStoreSteps(CfgNode nodeFrom, DictionaryElementContent c, Node nodeTo) { + // NOTE: It's important to add logic to the newtype definition of + // DictionaryElementContent if you add new cases here. exists(SubscriptNode subscript | nodeTo.(PostUpdateNode).getPreUpdateNode().asCfgNode() = subscript.getObject() and nodeFrom.asCfgNode() = subscript.(DefinitionNode).getValue() and diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll index 8f08efb0f93..16a9572db6a 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll @@ -148,6 +148,7 @@ class Node extends TNode { DataFlowCallable getEnclosingCallable() { result = getCallableScope(this.getScope()) } /** Gets the location of this node */ + cached Location getLocation() { none() } /** @@ -157,8 +158,7 @@ class Node extends TNode { * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - cached - predicate hasLocationInfo( + deprecated predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { Stages::DataFlow::ref() and @@ -467,7 +467,7 @@ class IterableSequenceNode extends Node, TIterableSequenceNode { override string toString() { result = "IterableSequence" } - override DataFlowCallable getEnclosingCallable() { result = consumer.getEnclosingCallable() } + override Scope getScope() { result = consumer.getScope() } override Location getLocation() { result = consumer.getLocation() } } @@ -484,7 +484,7 @@ class IterableElementNode extends Node, TIterableElementNode { override string toString() { result = "IterableElement" } - override DataFlowCallable getEnclosingCallable() { result = consumer.getEnclosingCallable() } + override Scope getScope() { result = consumer.getScope() } override Location getLocation() { result = consumer.getLocation() } } @@ -499,7 +499,7 @@ class StarPatternElementNode extends Node, TStarPatternElementNode { override string toString() { result = "StarPatternElement" } - override DataFlowCallable getEnclosingCallable() { result = consumer.getEnclosingCallable() } + override Scope getScope() { result = consumer.getScope() } override Location getLocation() { result = consumer.getLocation() } } @@ -605,9 +605,19 @@ newtype TContent = } or /** An element of a dictionary under a specific key. */ TDictionaryElementContent(string key) { - key = any(KeyValuePair kvp).getKey().(StrConst).getS() + // {"key": ...} + key = any(KeyValuePair kvp).getKey().(StrConst).getText() or + // func(key=...) key = any(Keyword kw).getArg() + or + // d["key"] = ... + key = any(SubscriptNode sub | sub.isStore() | sub.getIndex().getNode().(StrConst).getText()) + or + // d.setdefault("key", ...) + exists(CallNode call | call.getFunction().(AttrNode).getName() = "setdefault" | + key = call.getArg(0).getNode().(StrConst).getText() + ) } or /** An element of a dictionary under any key. */ TDictionaryElementAnyContent() or diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll index 4a55d38edb6..a1dd67a008a 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll @@ -9,7 +9,7 @@ private import DataFlowImplSpecific as DataFlowImplSpecific private import DataFlowImplSpecific::Private private import DataFlowImplSpecific::Public -module Input implements InputSig { +module Input implements InputSig { class SummarizedCallableBase = string; ArgumentPosition callbackSelfParameterPosition() { result.isLambdaSelf() } @@ -27,6 +27,11 @@ module Input implements InputSig { result = i.toString() ) or + exists(int i | + pos.isPositionalLowerBound(i) and + result = i + ".." + ) + or exists(string name | pos.isKeyword(name) and result = name + ":" @@ -83,7 +88,7 @@ module Input implements InputSig { } } -private import Make as Impl +private import Make as Impl private module StepsInput implements Impl::Private::StepsInputSig { DataFlowCall getACall(Public::SummarizedCallable sc) { @@ -195,6 +200,11 @@ module ParsePositions { i = AccessPath::parseInt(c) } + predicate isParsedArgumentLowerBoundPosition(string c, int i) { + isArgBody(c) and + i = AccessPath::parseLowerBound(c) + } + predicate isParsedKeywordArgumentPosition(string c, string argName) { isArgBody(c) and c = argName + ":" diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/TaintTrackingImplSpecific.qll b/python/ql/lib/semmle/python/dataflow/new/internal/TaintTrackingImplSpecific.qll index 6f65d234344..798c1d5116f 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/TaintTrackingImplSpecific.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/TaintTrackingImplSpecific.qll @@ -4,7 +4,8 @@ private import codeql.dataflow.TaintTracking private import DataFlowImplSpecific +private import semmle.python.Files -module PythonTaintTracking implements InputSig { +module PythonTaintTracking implements InputSig { import TaintTrackingPrivate } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/TaintTrackingPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/TaintTrackingPrivate.qll index 1841001c2f8..6eab2f48885 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/TaintTrackingPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/TaintTrackingPrivate.qll @@ -195,6 +195,8 @@ predicate copyStep(DataFlow::CfgNode nodeFrom, DataFlow::CfgNode nodeTo) { call = API::moduleImport("copy").getMember(["copy", "deepcopy"]).getACall() and call.getArg(0) = nodeFrom ) + or + nodeTo.(DataFlow::MethodCallNode).calls(nodeFrom, "copy") } /** diff --git a/python/ql/lib/semmle/python/frameworks/data/ModelsAsData.qll b/python/ql/lib/semmle/python/frameworks/data/ModelsAsData.qll index f8d7ae75ad0..34e48439271 100644 --- a/python/ql/lib/semmle/python/frameworks/data/ModelsAsData.qll +++ b/python/ql/lib/semmle/python/frameworks/data/ModelsAsData.qll @@ -17,7 +17,7 @@ import Shared::ModelOutput as ModelOutput private import semmle.python.dataflow.new.RemoteFlowSources private import semmle.python.dataflow.new.DataFlow private import semmle.python.ApiGraphs -private import semmle.python.dataflow.new.TaintTracking +private import semmle.python.dataflow.new.FlowSummary /** * A remote flow source originating from a CSV source row. @@ -28,20 +28,31 @@ private class RemoteFlowSourceFromCsv extends RemoteFlowSource { override string getSourceType() { result = "Remote flow (from model)" } } -/** - * Like `ModelOutput::summaryStep` but with API nodes mapped to data-flow nodes. - */ -private predicate summaryStepNodes(DataFlow::Node pred, DataFlow::Node succ, string kind) { - exists(API::Node predNode, API::Node succNode | - Specific::summaryStep(predNode, succNode, kind) and - pred = predNode.asSink() and - succ = succNode.asSource() - ) -} +private class SummarizedCallableFromModel extends SummarizedCallable { + string type; + string path; -/** Taint steps induced by summary models of kind `taint`. */ -private class TaintStepFromSummary extends TaintTracking::AdditionalTaintStep { - override predicate step(DataFlow::Node pred, DataFlow::Node succ) { - summaryStepNodes(pred, succ, "taint") + SummarizedCallableFromModel() { + ModelOutput::relevantSummaryModel(type, path, _, _, _) and + this = type + ";" + path + } + + override DataFlow::CallCfgNode getACall() { ModelOutput::resolvedSummaryBase(type, path, result) } + + override DataFlow::ArgumentNode getACallback() { + exists(API::Node base | + ModelOutput::resolvedSummaryRefBase(type, path, base) and + result = base.getAValueReachableFromSource() + ) + } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + exists(string kind | ModelOutput::relevantSummaryModel(type, path, input, output, kind) | + kind = "value" and + preservesValue = true + or + kind = "taint" and + preservesValue = false + ) } } diff --git a/python/ql/lib/semmle/python/internal/CachedStages.qll b/python/ql/lib/semmle/python/internal/CachedStages.qll index da32b4c071e..687cabeceae 100644 --- a/python/ql/lib/semmle/python/internal/CachedStages.qll +++ b/python/ql/lib/semmle/python/internal/CachedStages.qll @@ -194,7 +194,7 @@ module Stages { or exists(any(DataFlowPublic::Node node).toString()) or - any(DataFlowPublic::Node node).hasLocationInfo(_, _, _, _, _) + exists(any(DataFlowPublic::Node node).getLocation()) or DataFlowDispatch::resolveCall(_, _, _) or diff --git a/python/ql/src/Security/CWE-798/HardcodedCredentials.ql b/python/ql/src/Security/CWE-798/HardcodedCredentials.ql index 0a92427ec23..04197b13610 100644 --- a/python/ql/src/Security/CWE-798/HardcodedCredentials.ql +++ b/python/ql/src/Security/CWE-798/HardcodedCredentials.ql @@ -16,6 +16,8 @@ import python import semmle.python.dataflow.new.DataFlow import semmle.python.dataflow.new.TaintTracking import semmle.python.filters.Tests +private import semmle.python.dataflow.new.internal.DataFlowDispatch as DataFlowDispatch +private import semmle.python.dataflow.new.internal.Builtins::Builtins as Builtins bindingset[char, fraction] predicate fewer_characters_than(StrConst str, string char, float fraction) { @@ -30,15 +32,13 @@ predicate fewer_characters_than(StrConst str, string char, float fraction) { } predicate possible_reflective_name(string name) { - exists(any(ModuleValue m).attr(name)) + any(Function f).getName() = name or - exists(any(ClassValue c).lookup(name)) + any(Class c).getName() = name or - any(ClassValue c).getName() = name + any(Module m).getName() = name or - exists(Module::named(name)) - or - exists(Value::named(name)) + exists(Builtins::likelyBuiltin(name)) } int char_count(StrConst str) { result = count(string c | c = str.getText().charAt(_)) } @@ -84,7 +84,9 @@ class CredentialSink extends DataFlow::Node { name.regexpMatch(getACredentialRegex()) and not name.matches("%file") | - any(FunctionValue func).getNamedArgumentForCall(_, name) = this.asCfgNode() + exists(DataFlowDispatch::ArgumentPosition pos | pos.isKeyword(name) | + this.(DataFlow::ArgumentNode).argumentOf(_, pos) + ) or exists(Keyword k | k.getArg() = name and k.getValue().getAFlowNode() = this.asCfgNode()) or diff --git a/python/ql/src/Security/CWE-943/NoSqlInjection.ql b/python/ql/src/Security/CWE-943/NoSqlInjection.ql index b559159055f..cc5d57effe0 100644 --- a/python/ql/src/Security/CWE-943/NoSqlInjection.ql +++ b/python/ql/src/Security/CWE-943/NoSqlInjection.ql @@ -3,6 +3,7 @@ * @description Building a NoSQL query from user-controlled sources is vulnerable to insertion of * malicious NoSQL code by the user. * @kind path-problem + * @precision high * @problem.severity error * @security-severity 8.8 * @id py/nosql-injection diff --git a/python/ql/src/change-notes/2024-03-04-nosql-injection.md b/python/ql/src/change-notes/2024-03-04-nosql-injection.md new file mode 100644 index 00000000000..6e98540c757 --- /dev/null +++ b/python/ql/src/change-notes/2024-03-04-nosql-injection.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* The query `py/nosql-injection` for finding NoSQL injection vulnerabilities is now part of the default security suite. diff --git a/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.qhelp b/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.qhelp new file mode 100644 index 00000000000..9b8fea3cad1 --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.qhelp @@ -0,0 +1,38 @@ + + + + +

    When a remote user-controlled data can reach a costly Unicode normalization with either form, NFKC or NFKD, an attack such as the One Million Unicode Characters, could lead to a denial of service on Windows OS.

    + +

    And, with the use of special Unicode characters, like U+2100 (℀) or U+2105 (℅), the payload size could be tripled after the compatibility normalization.

    + +
    + + +

    Ensure limiting the size of any incoming data that would go through a costly operations, including a Windows Unicode normalization with NFKC or NFKD. Such a recommandation would avoid a potential denial of service.

    + +
    + + +

    +In this example a simple user-controlled data reaches a Unicode normalization with the form "NFKC". +

    + + + +

    To fix this vulnerability, we need restrain the size of the user input.

    + +

    For example, we can use the len() builtin function to limit the size of the user input.

    + + + +
    + + +
  • + CVE-2023-46695: Potential denial of service vulnerability in Django UsernameField on Windows. +
  • +
    +
    diff --git a/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql b/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql new file mode 100644 index 00000000000..9e0a3a3018a --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-770/UnicodeDoS.ql @@ -0,0 +1,114 @@ +/** + * @name Denial of Service using Unicode Characters + * @description A remote user-controlled data can reach a costly Unicode normalization with either form NFKC or NFKD. On Windows OS, with an attack such as the One Million Unicode Characters, this could lead to a denial of service. And, with the use of special Unicode characters, like U+2100 (℀) or U+2105 (℅), the payload size could be tripled. + * @kind path-problem + * @id py/unicode-dos + * @precision high + * @problem.severity error + * @tags security + * experimental + * external/cwe/cwe-770 + */ + +import python +import semmle.python.ApiGraphs +import semmle.python.Concepts +import semmle.python.dataflow.new.TaintTracking +import semmle.python.dataflow.new.internal.DataFlowPublic +import semmle.python.dataflow.new.RemoteFlowSources + +// The Unicode compatibility normalization calls from unicodedata, unidecode, pyunormalize +// and textnorm modules. The use of argIdx is to constraint the argument being normalized. +class UnicodeCompatibilityNormalize extends API::CallNode { + int argIdx; + + UnicodeCompatibilityNormalize() { + ( + this = API::moduleImport("unicodedata").getMember("normalize").getACall() and + this.getParameter(0).getAValueReachingSink().asExpr().(StrConst).getText() in ["NFKC", "NFKD"] + or + this = API::moduleImport("pyunormalize").getMember("normalize").getACall() and + this.getParameter(0).getAValueReachingSink().asExpr().(StrConst).getText() in ["NFKC", "NFKD"] + ) and + argIdx = 1 + or + ( + this = API::moduleImport("textnorm").getMember("normalize_unicode").getACall() and + this.getParameter(1).getAValueReachingSink().asExpr().(StrConst).getText() in ["NFKC", "NFKD"] + or + this = API::moduleImport("unidecode").getMember("unidecode").getACall() + or + this = API::moduleImport("pyunormalize").getMember(["NFKC", "NFKD"]).getACall() + ) and + argIdx = 0 + } + + DataFlow::Node getPathArg() { result = this.getArg(argIdx) } +} + +predicate underAValue(DataFlow::GuardNode g, ControlFlowNode node, boolean branch) { + exists(CompareNode cn | cn = g | + exists(API::CallNode lenCall, Cmpop op, Node n | + lenCall = n.getALocalSource() and + ( + // arg <= LIMIT OR arg < LIMIT + (op instanceof LtE or op instanceof Lt) and + branch = true and + cn.operands(n.asCfgNode(), op, _) + or + // LIMIT >= arg OR LIMIT > arg + (op instanceof GtE or op instanceof Gt) and + branch = true and + cn.operands(_, op, n.asCfgNode()) + or + // not arg >= LIMIT OR not arg > LIMIT + (op instanceof GtE or op instanceof Gt) and + branch = false and + cn.operands(n.asCfgNode(), op, _) + or + // not LIMIT <= arg OR not LIMIT < arg + (op instanceof LtE or op instanceof Lt) and + branch = false and + cn.operands(_, op, n.asCfgNode()) + ) + | + lenCall = API::builtin("len").getACall() and + node = lenCall.getArg(0).asCfgNode() + ) //and + //not cn.getLocation().getFile().inStdlib() + ) +} + +private module UnicodeDoSConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } + + predicate isBarrier(DataFlow::Node sanitizer) { + // underAValue is a check to ensure that the length of the user-provided value is limited to a certain amount + sanitizer = DataFlow::BarrierGuard::getABarrierNode() + } + + predicate isSink(DataFlow::Node sink) { + // Any call to the Unicode compatibility normalization is a costly operation + sink = any(UnicodeCompatibilityNormalize ucn).getPathArg() + or + // The call to secure_filename() from pallets/werkzeug uses the Unicode compatibility normalization + // under the hood, https://github.com/pallets/werkzeug/blob/d3dd65a27388fbd39d146caacf2563639ba622f0/src/werkzeug/utils.py#L218 + sink = API::moduleImport("werkzeug").getMember("secure_filename").getACall().getArg(_) + or + sink = + API::moduleImport("werkzeug") + .getMember("utils") + .getMember("secure_filename") + .getACall() + .getArg(_) + } +} + +module UnicodeDoSFlow = TaintTracking::Global; + +import UnicodeDoSFlow::PathGraph + +from UnicodeDoSFlow::PathNode source, UnicodeDoSFlow::PathNode sink +where UnicodeDoSFlow::flowPath(source, sink) +select sink.getNode(), source, sink, "This $@ can reach a $@.", source.getNode(), + "user-provided value", sink.getNode(), "costly Unicode normalization operation" diff --git a/python/ql/src/experimental/Security/CWE-770/bad.py b/python/ql/src/experimental/Security/CWE-770/bad.py new file mode 100644 index 00000000000..92260955431 --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-770/bad.py @@ -0,0 +1,17 @@ +from flask import Flask, jsonify, request +import unicodedata + +app = Flask(__name__) + + +@app.route("/bad_1") +def bad_1(): + # User controlled data + file_path = request.args.get("file_path", "") + + # Normalize the file path using NFKC Unicode normalization + return ( + unicodedata.normalize("NFKC", file_path), + 200, + {"Content-Type": "application/octet-stream"}, + ) diff --git a/python/ql/src/experimental/Security/CWE-770/good.py b/python/ql/src/experimental/Security/CWE-770/good.py new file mode 100644 index 00000000000..4d1ebc31507 --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-770/good.py @@ -0,0 +1,16 @@ +from flask import Flask, jsonify, request +import unicodedata + +app = Flask(__name__) + + +@app.route("/good_1") +def good_1(): + r = request.args.get("file_path", "") + + if len(r) <= 1_000: + # Normalize the r using NFKD Unicode normalization + r = unicodedata.normalize("NFKD", r) + return r, 200, {"Content-Type": "application/octet-stream"} + else: + return jsonify({"error": "File not found"}), 404 diff --git a/python/ql/test/experimental/dataflow/coverage/module_level.py b/python/ql/test/experimental/dataflow/coverage/module_level.py new file mode 100644 index 00000000000..bd2d38088b1 --- /dev/null +++ b/python/ql/test/experimental/dataflow/coverage/module_level.py @@ -0,0 +1,7 @@ +# this test has code on module level, which works in slightly different ways than when +# inside a function + +t = (SOURCE, NONSOURCE) +a, b = t +SINK(a) #$ flow="SOURCE, l:-2 -> a" +SINK_F(b) diff --git a/python/ql/test/experimental/dataflow/fieldflow/test_dict.py b/python/ql/test/experimental/dataflow/fieldflow/test_dict.py index c2f74b83c3d..f64a5187925 100644 --- a/python/ql/test/experimental/dataflow/fieldflow/test_dict.py +++ b/python/ql/test/experimental/dataflow/fieldflow/test_dict.py @@ -45,6 +45,15 @@ def test_dict_update(): SINK(d["key"]) # $ flow="SOURCE, l:-1 -> d['key']" SINK(d.get("key")) # $ flow="SOURCE, l:-2 -> d.get(..)" + +def test_dict_update_fresh_key(): + # we had a regression where we did not create a dictionary element content + # for keys used in "inline update" like this + d = {} + d["fresh_key"] = SOURCE + SINK(d["fresh_key"]) # $ flow="SOURCE, l:-1 -> d['fresh_key']" + + @expects(3) # $ unresolved_call=expects(..) unresolved_call=expects(..)(..) def test_dict_setdefault(): d = {} diff --git a/python/ql/test/experimental/dataflow/model-summaries/InlineTaintTest.ext.yml b/python/ql/test/experimental/dataflow/model-summaries/InlineTaintTest.ext.yml index 3e14c56d735..e3a7e059401 100644 --- a/python/ql/test/experimental/dataflow/model-summaries/InlineTaintTest.ext.yml +++ b/python/ql/test/experimental/dataflow/model-summaries/InlineTaintTest.ext.yml @@ -15,4 +15,6 @@ extensions: - ["foo", "Member[MS_append_to_list]", "Argument[1]", "ReturnValue.ListElement", "value"] - ["foo", "Member[MS_append_to_list]", "Argument[0]", "ReturnValue", "taint"] - ["foo", "Member[MS_append_to_list]", "Argument[1]", "ReturnValue", "taint"] + - ["foo", "Member[MS_spread]", "Argument[0]", "ReturnValue.TupleElement[0]", "value"] + - ["foo", "Member[MS_spread]", "Argument[1]", "ReturnValue.TupleElement[1]", "value"] - ["json", "Member[MS_loads]", "Argument[0]", "ReturnValue", "taint"] diff --git a/python/ql/test/experimental/dataflow/model-summaries/NormalDataflowTest.ext.yml b/python/ql/test/experimental/dataflow/model-summaries/NormalDataflowTest.ext.yml index 3e14c56d735..e3a7e059401 100644 --- a/python/ql/test/experimental/dataflow/model-summaries/NormalDataflowTest.ext.yml +++ b/python/ql/test/experimental/dataflow/model-summaries/NormalDataflowTest.ext.yml @@ -15,4 +15,6 @@ extensions: - ["foo", "Member[MS_append_to_list]", "Argument[1]", "ReturnValue.ListElement", "value"] - ["foo", "Member[MS_append_to_list]", "Argument[0]", "ReturnValue", "taint"] - ["foo", "Member[MS_append_to_list]", "Argument[1]", "ReturnValue", "taint"] + - ["foo", "Member[MS_spread]", "Argument[0]", "ReturnValue.TupleElement[0]", "value"] + - ["foo", "Member[MS_spread]", "Argument[1]", "ReturnValue.TupleElement[1]", "value"] - ["json", "Member[MS_loads]", "Argument[0]", "ReturnValue", "taint"] diff --git a/python/ql/test/experimental/dataflow/model-summaries/model_summaries.py b/python/ql/test/experimental/dataflow/model-summaries/model_summaries.py index ee02918b079..c8c5ac0a888 100644 --- a/python/ql/test/experimental/dataflow/model-summaries/model_summaries.py +++ b/python/ql/test/experimental/dataflow/model-summaries/model_summaries.py @@ -30,7 +30,7 @@ def SINK_F(x): ensure_tainted = ensure_not_tainted = print TAINTED_STRING = "TAINTED_STRING" -from foo import MS_identity, MS_apply_lambda, MS_reversed, MS_list_map, MS_append_to_list +from foo import MS_identity, MS_apply_lambda, MS_reversed, MS_list_map, MS_append_to_list, MS_spread # Simple summary via_identity = MS_identity(SOURCE) @@ -107,6 +107,13 @@ ensure_tainted( tainted_list[0], # $ tainted ) +a, b = MS_spread(SOURCE, NONSOURCE) +SINK(a) # $ flow="SOURCE, l:-1 -> a" +SINK_F(b) +x, y = MS_spread(NONSOURCE, SOURCE) +SINK_F(x) +SINK(y) # $ flow="SOURCE, l:-2 -> y" + # Modeled flow-summary is not value preserving from json import MS_loads as json_loads diff --git a/python/ql/test/experimental/dataflow/summaries/summaries.expected b/python/ql/test/experimental/dataflow/summaries/summaries.expected index a1f354a654f..847ec210b3c 100644 --- a/python/ql/test/experimental/dataflow/summaries/summaries.expected +++ b/python/ql/test/experimental/dataflow/summaries/summaries.expected @@ -4,7 +4,9 @@ edges | summaries.py:32:20:32:25 | ControlFlowNode for SOURCE | summaries.py:32:11:32:26 | ControlFlowNode for identity() | provenance | | | summaries.py:36:1:36:14 | ControlFlowNode for tainted_lambda | summaries.py:37:6:37:19 | ControlFlowNode for tainted_lambda | provenance | | | summaries.py:36:18:36:54 | ControlFlowNode for apply_lambda() | summaries.py:36:1:36:14 | ControlFlowNode for tainted_lambda | provenance | | +| summaries.py:36:38:36:38 | ControlFlowNode for x | summaries.py:36:41:36:45 | ControlFlowNode for BinaryExpr | provenance | | | summaries.py:36:48:36:53 | ControlFlowNode for SOURCE | summaries.py:36:18:36:54 | ControlFlowNode for apply_lambda() | provenance | | +| summaries.py:36:48:36:53 | ControlFlowNode for SOURCE | summaries.py:36:38:36:38 | ControlFlowNode for x | provenance | | | summaries.py:44:1:44:12 | ControlFlowNode for tainted_list | summaries.py:45:6:45:20 | ControlFlowNode for Subscript | provenance | | | summaries.py:44:1:44:12 | ControlFlowNode for tainted_list [List element] | summaries.py:45:6:45:17 | ControlFlowNode for tainted_list [List element] | provenance | | | summaries.py:44:16:44:33 | ControlFlowNode for reversed() | summaries.py:44:1:44:12 | ControlFlowNode for tainted_list | provenance | | @@ -14,13 +16,17 @@ edges | summaries.py:44:26:44:31 | ControlFlowNode for SOURCE | summaries.py:44:25:44:32 | ControlFlowNode for List | provenance | | | summaries.py:44:26:44:31 | ControlFlowNode for SOURCE | summaries.py:44:25:44:32 | ControlFlowNode for List [List element] | provenance | | | summaries.py:45:6:45:17 | ControlFlowNode for tainted_list [List element] | summaries.py:45:6:45:20 | ControlFlowNode for Subscript | provenance | | +| summaries.py:48:15:48:15 | ControlFlowNode for x | summaries.py:49:12:49:18 | ControlFlowNode for BinaryExpr | provenance | | | summaries.py:51:1:51:14 | ControlFlowNode for tainted_mapped [List element] | summaries.py:52:6:52:19 | ControlFlowNode for tainted_mapped [List element] | provenance | | | summaries.py:51:18:51:46 | ControlFlowNode for list_map() [List element] | summaries.py:51:1:51:14 | ControlFlowNode for tainted_mapped [List element] | provenance | | +| summaries.py:51:38:51:45 | ControlFlowNode for List [List element] | summaries.py:48:15:48:15 | ControlFlowNode for x | provenance | | | summaries.py:51:38:51:45 | ControlFlowNode for List [List element] | summaries.py:51:18:51:46 | ControlFlowNode for list_map() [List element] | provenance | | | summaries.py:51:39:51:44 | ControlFlowNode for SOURCE | summaries.py:51:38:51:45 | ControlFlowNode for List [List element] | provenance | | | summaries.py:52:6:52:19 | ControlFlowNode for tainted_mapped [List element] | summaries.py:52:6:52:22 | ControlFlowNode for Subscript | provenance | | +| summaries.py:54:23:54:23 | ControlFlowNode for x | summaries.py:55:12:55:12 | ControlFlowNode for x | provenance | | | summaries.py:57:1:57:23 | ControlFlowNode for tainted_mapped_explicit [List element] | summaries.py:58:6:58:28 | ControlFlowNode for tainted_mapped_explicit [List element] | provenance | | | summaries.py:57:27:57:63 | ControlFlowNode for list_map() [List element] | summaries.py:57:1:57:23 | ControlFlowNode for tainted_mapped_explicit [List element] | provenance | | +| summaries.py:57:55:57:62 | ControlFlowNode for List [List element] | summaries.py:54:23:54:23 | ControlFlowNode for x | provenance | | | summaries.py:57:55:57:62 | ControlFlowNode for List [List element] | summaries.py:57:27:57:63 | ControlFlowNode for list_map() [List element] | provenance | | | summaries.py:57:56:57:61 | ControlFlowNode for SOURCE | summaries.py:57:55:57:62 | ControlFlowNode for List [List element] | provenance | | | summaries.py:58:6:58:28 | ControlFlowNode for tainted_mapped_explicit [List element] | summaries.py:58:6:58:31 | ControlFlowNode for Subscript | provenance | | @@ -46,6 +52,8 @@ nodes | summaries.py:33:6:33:12 | ControlFlowNode for tainted | semmle.label | ControlFlowNode for tainted | | summaries.py:36:1:36:14 | ControlFlowNode for tainted_lambda | semmle.label | ControlFlowNode for tainted_lambda | | summaries.py:36:18:36:54 | ControlFlowNode for apply_lambda() | semmle.label | ControlFlowNode for apply_lambda() | +| summaries.py:36:38:36:38 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | +| summaries.py:36:41:36:45 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | summaries.py:36:48:36:53 | ControlFlowNode for SOURCE | semmle.label | ControlFlowNode for SOURCE | | summaries.py:37:6:37:19 | ControlFlowNode for tainted_lambda | semmle.label | ControlFlowNode for tainted_lambda | | summaries.py:44:1:44:12 | ControlFlowNode for tainted_list | semmle.label | ControlFlowNode for tainted_list | @@ -57,12 +65,16 @@ nodes | summaries.py:44:26:44:31 | ControlFlowNode for SOURCE | semmle.label | ControlFlowNode for SOURCE | | summaries.py:45:6:45:17 | ControlFlowNode for tainted_list [List element] | semmle.label | ControlFlowNode for tainted_list [List element] | | summaries.py:45:6:45:20 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | +| summaries.py:48:15:48:15 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | +| summaries.py:49:12:49:18 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | summaries.py:51:1:51:14 | ControlFlowNode for tainted_mapped [List element] | semmle.label | ControlFlowNode for tainted_mapped [List element] | | summaries.py:51:18:51:46 | ControlFlowNode for list_map() [List element] | semmle.label | ControlFlowNode for list_map() [List element] | | summaries.py:51:38:51:45 | ControlFlowNode for List [List element] | semmle.label | ControlFlowNode for List [List element] | | summaries.py:51:39:51:44 | ControlFlowNode for SOURCE | semmle.label | ControlFlowNode for SOURCE | | summaries.py:52:6:52:19 | ControlFlowNode for tainted_mapped [List element] | semmle.label | ControlFlowNode for tainted_mapped [List element] | | summaries.py:52:6:52:22 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | +| summaries.py:54:23:54:23 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | +| summaries.py:55:12:55:12 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | | summaries.py:57:1:57:23 | ControlFlowNode for tainted_mapped_explicit [List element] | semmle.label | ControlFlowNode for tainted_mapped_explicit [List element] | | summaries.py:57:27:57:63 | ControlFlowNode for list_map() [List element] | semmle.label | ControlFlowNode for list_map() [List element] | | summaries.py:57:55:57:62 | ControlFlowNode for List [List element] | semmle.label | ControlFlowNode for List [List element] | @@ -87,6 +99,9 @@ nodes | summaries.py:68:6:68:23 | ControlFlowNode for tainted_resultlist [List element] | semmle.label | ControlFlowNode for tainted_resultlist [List element] | | summaries.py:68:6:68:26 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | subpaths +| summaries.py:36:48:36:53 | ControlFlowNode for SOURCE | summaries.py:36:38:36:38 | ControlFlowNode for x | summaries.py:36:41:36:45 | ControlFlowNode for BinaryExpr | summaries.py:36:18:36:54 | ControlFlowNode for apply_lambda() | +| summaries.py:51:38:51:45 | ControlFlowNode for List [List element] | summaries.py:48:15:48:15 | ControlFlowNode for x | summaries.py:49:12:49:18 | ControlFlowNode for BinaryExpr | summaries.py:51:18:51:46 | ControlFlowNode for list_map() [List element] | +| summaries.py:57:55:57:62 | ControlFlowNode for List [List element] | summaries.py:54:23:54:23 | ControlFlowNode for x | summaries.py:55:12:55:12 | ControlFlowNode for x | summaries.py:57:27:57:63 | ControlFlowNode for list_map() [List element] | invalidSpecComponent #select | summaries.py:33:6:33:12 | ControlFlowNode for tainted | summaries.py:32:20:32:25 | ControlFlowNode for SOURCE | summaries.py:33:6:33:12 | ControlFlowNode for tainted | $@ | summaries.py:32:20:32:25 | ControlFlowNode for SOURCE | ControlFlowNode for SOURCE | diff --git a/python/ql/test/experimental/dataflow/variable-capture/by_value.py b/python/ql/test/experimental/dataflow/variable-capture/by_value.py index fa7546b8f2b..01b2ed83a46 100644 --- a/python/ql/test/experimental/dataflow/variable-capture/by_value.py +++ b/python/ql/test/experimental/dataflow/variable-capture/by_value.py @@ -34,7 +34,7 @@ def by_value1(): a = SOURCE def inner(a_val=a): SINK(a_val) #$ captured - SINK_F(a) #$ SPURIOUS: captured + SINK_F(a) a = NONSOURCE inner() diff --git a/python/ql/test/experimental/query-tests/Security/CWE-770/UnicodeDoS.expected b/python/ql/test/experimental/query-tests/Security/CWE-770/UnicodeDoS.expected new file mode 100644 index 00000000000..f98487ba7da --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-770/UnicodeDoS.expected @@ -0,0 +1,73 @@ +edges +| tests.py:1:35:1:41 | ControlFlowNode for ImportMember | tests.py:1:35:1:41 | ControlFlowNode for request | provenance | | +| tests.py:1:35:1:41 | ControlFlowNode for request | tests.py:12:17:12:23 | ControlFlowNode for request | provenance | | +| tests.py:1:35:1:41 | ControlFlowNode for request | tests.py:24:9:24:15 | ControlFlowNode for request | provenance | | +| tests.py:1:35:1:41 | ControlFlowNode for request | tests.py:36:9:36:15 | ControlFlowNode for request | provenance | | +| tests.py:1:35:1:41 | ControlFlowNode for request | tests.py:48:9:48:15 | ControlFlowNode for request | provenance | | +| tests.py:1:35:1:41 | ControlFlowNode for request | tests.py:60:9:60:15 | ControlFlowNode for request | provenance | | +| tests.py:1:35:1:41 | ControlFlowNode for request | tests.py:72:9:72:15 | ControlFlowNode for request | provenance | | +| tests.py:12:5:12:13 | ControlFlowNode for file_path | tests.py:16:39:16:47 | ControlFlowNode for file_path | provenance | | +| tests.py:12:17:12:23 | ControlFlowNode for request | tests.py:12:17:12:28 | ControlFlowNode for Attribute | provenance | | +| tests.py:12:17:12:28 | ControlFlowNode for Attribute | tests.py:12:17:12:49 | ControlFlowNode for Attribute() | provenance | | +| tests.py:12:17:12:49 | ControlFlowNode for Attribute() | tests.py:12:5:12:13 | ControlFlowNode for file_path | provenance | | +| tests.py:24:5:24:5 | ControlFlowNode for r | tests.py:28:43:28:43 | ControlFlowNode for r | provenance | | +| tests.py:24:9:24:15 | ControlFlowNode for request | tests.py:24:9:24:20 | ControlFlowNode for Attribute | provenance | | +| tests.py:24:9:24:20 | ControlFlowNode for Attribute | tests.py:24:9:24:33 | ControlFlowNode for Attribute() | provenance | | +| tests.py:24:9:24:33 | ControlFlowNode for Attribute() | tests.py:24:5:24:5 | ControlFlowNode for r | provenance | | +| tests.py:36:5:36:5 | ControlFlowNode for r | tests.py:40:43:40:43 | ControlFlowNode for r | provenance | | +| tests.py:36:9:36:15 | ControlFlowNode for request | tests.py:36:9:36:20 | ControlFlowNode for Attribute | provenance | | +| tests.py:36:9:36:20 | ControlFlowNode for Attribute | tests.py:36:9:36:33 | ControlFlowNode for Attribute() | provenance | | +| tests.py:36:9:36:33 | ControlFlowNode for Attribute() | tests.py:36:5:36:5 | ControlFlowNode for r | provenance | | +| tests.py:48:5:48:5 | ControlFlowNode for r | tests.py:52:43:52:43 | ControlFlowNode for r | provenance | | +| tests.py:48:9:48:15 | ControlFlowNode for request | tests.py:48:9:48:20 | ControlFlowNode for Attribute | provenance | | +| tests.py:48:9:48:20 | ControlFlowNode for Attribute | tests.py:48:9:48:33 | ControlFlowNode for Attribute() | provenance | | +| tests.py:48:9:48:33 | ControlFlowNode for Attribute() | tests.py:48:5:48:5 | ControlFlowNode for r | provenance | | +| tests.py:60:5:60:5 | ControlFlowNode for r | tests.py:64:43:64:43 | ControlFlowNode for r | provenance | | +| tests.py:60:9:60:15 | ControlFlowNode for request | tests.py:60:9:60:20 | ControlFlowNode for Attribute | provenance | | +| tests.py:60:9:60:20 | ControlFlowNode for Attribute | tests.py:60:9:60:33 | ControlFlowNode for Attribute() | provenance | | +| tests.py:60:9:60:33 | ControlFlowNode for Attribute() | tests.py:60:5:60:5 | ControlFlowNode for r | provenance | | +| tests.py:72:5:72:5 | ControlFlowNode for r | tests.py:76:43:76:43 | ControlFlowNode for r | provenance | | +| tests.py:72:9:72:15 | ControlFlowNode for request | tests.py:72:9:72:20 | ControlFlowNode for Attribute | provenance | | +| tests.py:72:9:72:20 | ControlFlowNode for Attribute | tests.py:72:9:72:33 | ControlFlowNode for Attribute() | provenance | | +| tests.py:72:9:72:33 | ControlFlowNode for Attribute() | tests.py:72:5:72:5 | ControlFlowNode for r | provenance | | +nodes +| tests.py:1:35:1:41 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | +| tests.py:1:35:1:41 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| tests.py:12:5:12:13 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| tests.py:12:17:12:23 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| tests.py:12:17:12:28 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| tests.py:12:17:12:49 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| tests.py:16:39:16:47 | ControlFlowNode for file_path | semmle.label | ControlFlowNode for file_path | +| tests.py:24:5:24:5 | ControlFlowNode for r | semmle.label | ControlFlowNode for r | +| tests.py:24:9:24:15 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| tests.py:24:9:24:20 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| tests.py:24:9:24:33 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| tests.py:28:43:28:43 | ControlFlowNode for r | semmle.label | ControlFlowNode for r | +| tests.py:36:5:36:5 | ControlFlowNode for r | semmle.label | ControlFlowNode for r | +| tests.py:36:9:36:15 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| tests.py:36:9:36:20 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| tests.py:36:9:36:33 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| tests.py:40:43:40:43 | ControlFlowNode for r | semmle.label | ControlFlowNode for r | +| tests.py:48:5:48:5 | ControlFlowNode for r | semmle.label | ControlFlowNode for r | +| tests.py:48:9:48:15 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| tests.py:48:9:48:20 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| tests.py:48:9:48:33 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| tests.py:52:43:52:43 | ControlFlowNode for r | semmle.label | ControlFlowNode for r | +| tests.py:60:5:60:5 | ControlFlowNode for r | semmle.label | ControlFlowNode for r | +| tests.py:60:9:60:15 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| tests.py:60:9:60:20 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| tests.py:60:9:60:33 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| tests.py:64:43:64:43 | ControlFlowNode for r | semmle.label | ControlFlowNode for r | +| tests.py:72:5:72:5 | ControlFlowNode for r | semmle.label | ControlFlowNode for r | +| tests.py:72:9:72:15 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| tests.py:72:9:72:20 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| tests.py:72:9:72:33 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| tests.py:76:43:76:43 | ControlFlowNode for r | semmle.label | ControlFlowNode for r | +subpaths +#select +| tests.py:16:39:16:47 | ControlFlowNode for file_path | tests.py:1:35:1:41 | ControlFlowNode for ImportMember | tests.py:16:39:16:47 | ControlFlowNode for file_path | This $@ can reach a $@. | tests.py:1:35:1:41 | ControlFlowNode for ImportMember | user-provided value | tests.py:16:39:16:47 | ControlFlowNode for file_path | costly Unicode normalization operation | +| tests.py:28:43:28:43 | ControlFlowNode for r | tests.py:1:35:1:41 | ControlFlowNode for ImportMember | tests.py:28:43:28:43 | ControlFlowNode for r | This $@ can reach a $@. | tests.py:1:35:1:41 | ControlFlowNode for ImportMember | user-provided value | tests.py:28:43:28:43 | ControlFlowNode for r | costly Unicode normalization operation | +| tests.py:40:43:40:43 | ControlFlowNode for r | tests.py:1:35:1:41 | ControlFlowNode for ImportMember | tests.py:40:43:40:43 | ControlFlowNode for r | This $@ can reach a $@. | tests.py:1:35:1:41 | ControlFlowNode for ImportMember | user-provided value | tests.py:40:43:40:43 | ControlFlowNode for r | costly Unicode normalization operation | +| tests.py:52:43:52:43 | ControlFlowNode for r | tests.py:1:35:1:41 | ControlFlowNode for ImportMember | tests.py:52:43:52:43 | ControlFlowNode for r | This $@ can reach a $@. | tests.py:1:35:1:41 | ControlFlowNode for ImportMember | user-provided value | tests.py:52:43:52:43 | ControlFlowNode for r | costly Unicode normalization operation | +| tests.py:64:43:64:43 | ControlFlowNode for r | tests.py:1:35:1:41 | ControlFlowNode for ImportMember | tests.py:64:43:64:43 | ControlFlowNode for r | This $@ can reach a $@. | tests.py:1:35:1:41 | ControlFlowNode for ImportMember | user-provided value | tests.py:64:43:64:43 | ControlFlowNode for r | costly Unicode normalization operation | +| tests.py:76:43:76:43 | ControlFlowNode for r | tests.py:1:35:1:41 | ControlFlowNode for ImportMember | tests.py:76:43:76:43 | ControlFlowNode for r | This $@ can reach a $@. | tests.py:1:35:1:41 | ControlFlowNode for ImportMember | user-provided value | tests.py:76:43:76:43 | ControlFlowNode for r | costly Unicode normalization operation | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-770/UnicodeDoS.qlref b/python/ql/test/experimental/query-tests/Security/CWE-770/UnicodeDoS.qlref new file mode 100644 index 00000000000..aff380880ea --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-770/UnicodeDoS.qlref @@ -0,0 +1 @@ +experimental/Security/CWE-770/UnicodeDoS.ql \ No newline at end of file diff --git a/python/ql/test/experimental/query-tests/Security/CWE-770/tests.py b/python/ql/test/experimental/query-tests/Security/CWE-770/tests.py new file mode 100644 index 00000000000..1007bcc8985 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-770/tests.py @@ -0,0 +1,129 @@ +from flask import Flask, jsonify, request +import unicodedata + +app = Flask(__name__) + +STATIC_DIR = "/home/unknown/" + + +@app.route("/bad_1") +def bad_1(): + # User controlled data + file_path = request.args.get("file_path", "") + + # Normalize the file path using NFKC Unicode normalization + return ( + unicodedata.normalize("NFKC", file_path), + 200, + {"Content-Type": "application/octet-stream"}, + ) + + +@app.route("/bad_2") +def bad_2(): + r = request.args.get("r", "") + + if len(r) >= 10: + # Normalize the r using NFKD Unicode normalization + r = unicodedata.normalize("NFKD", r) + return r, 200, {"Content-Type": "application/octet-stream"} + else: + return jsonify({"error": "File not found"}), 404 + + +@app.route("/bad_3") +def bad_3(): + r = request.args.get("r", "") + length = len(r) + if length >= 1_000: + # Normalize the r using NFKD Unicode normalization + r = unicodedata.normalize("NFKD", r) + return r, 200, {"Content-Type": "application/octet-stream"} + else: + return jsonify({"error": "File not found"}), 404 + + +@app.route("/bad_4") +def bad_4(): + r = request.args.get("r", "") + length = len(r) + if 1_000 <= length: + # Normalize the r using NFKD Unicode normalization + r = unicodedata.normalize("NFKD", r) + return r, 200, {"Content-Type": "application/octet-stream"} + else: + return jsonify({"error": "File not found"}), 404 + + +@app.route("/bad_5") +def bad_5(): + r = request.args.get("r", "") + length = len(r) + if not length < 1_000: + # Normalize the r using NFKD Unicode normalization + r = unicodedata.normalize("NFKD", r) + return r, 200, {"Content-Type": "application/octet-stream"} + else: + return jsonify({"error": "File not found"}), 404 + + +@app.route("/bad_6") +def bad_6(): + r = request.args.get("r", "") + length = len(r) + if not 1_000 > length: + # Normalize the r using NFKD Unicode normalization + r = unicodedata.normalize("NFKD", r) + return r, 200, {"Content-Type": "application/octet-stream"} + else: + return jsonify({"error": "File not found"}), 404 + + +@app.route("/good_1") +def good_1(): + r = request.args.get("r", "") + + if len(r) <= 1_000: + # Normalize the r using NFKD Unicode normalization + r = unicodedata.normalize("NFKD", r) + return r, 200, {"Content-Type": "application/octet-stream"} + else: + return jsonify({"error": "File not found"}), 404 + + +@app.route("/good_2") +def good_2(): + r = request.args.get("r", "") + MAX_LENGTH = 1_000 + length = len(r) + if length <= MAX_LENGTH: + # Normalize the r using NFKD Unicode normalization + r = unicodedata.normalize("NFKD", r) + return r, 200, {"Content-Type": "application/octet-stream"} + else: + return jsonify({"error": "File not found"}), 404 + +@app.route("/good_3") +def good_3(): + r = request.args.get("r", "") + MAX_LENGTH = 1_000 + length = len(r) + if not length >= MAX_LENGTH: + # Normalize the r using NFKD Unicode normalization + r = unicodedata.normalize("NFKD", r) + return r, 200, {"Content-Type": "application/octet-stream"} + else: + return jsonify({"error": "File not found"}), 404 + + +@app.route("/good_4") +def good_4(): + r = request.args.get("r", "") + MAX_LENGTH = 1_000 + length = len(r) + if not MAX_LENGTH <= length: + # Normalize the r using NFKD Unicode normalization + r = unicodedata.normalize("NFKD", r) + return r, 200, {"Content-Type": "application/octet-stream"} + else: + return jsonify({"error": "File not found"}), 404 diff --git a/python/ql/test/library-tests/essa/ssa-compute/CONSISTENCY/TypeTrackingConsistency.expected b/python/ql/test/library-tests/essa/ssa-compute/CONSISTENCY/TypeTrackingConsistency.expected new file mode 100644 index 00000000000..81d19f3f20d --- /dev/null +++ b/python/ql/test/library-tests/essa/ssa-compute/CONSISTENCY/TypeTrackingConsistency.expected @@ -0,0 +1,6 @@ +unreachableNode +| test2.py:16:17:16:17 | ControlFlowNode for y | Unreachable node in step of kind load bar. | +| test2.py:25:23:25:23 | ControlFlowNode for x | Unreachable node in step of kind load attribute. | +| test2.py:25:23:25:23 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | +| test2.py:26:17:26:17 | ControlFlowNode for y | Unreachable node in step of kind load bar. | +| test2.py:27:23:27:23 | ControlFlowNode for x | Unreachable node in step of kind simpleLocalSmallStep. | diff --git a/python/ql/test/library-tests/essa/ssa-compute/test2.py b/python/ql/test/library-tests/essa/ssa-compute/test2.py new file mode 100644 index 00000000000..d117a6b53e6 --- /dev/null +++ b/python/ql/test/library-tests/essa/ssa-compute/test2.py @@ -0,0 +1,29 @@ +def func(x): # $ def=x + try: + with Thing() as y: # $ def=y + y.foo(x, 0) # $ def-use=x:1 def-use=y:3 + while not x.attribute: # $ use-use=x:4 use-use=x:7 + y.bar() # $ use-use=y:4 use-use=y:6 + print(x) # $ use-use=x:5 + finally: + pass + +def func(x): # $ def=x + try: + with Thing() as y: # $ def=y + y.foo(x, some_var) # $ def-use=x:11 def-use=y:13 + while not x.attribute: # $ use-use=x:14 use-use=x:17 + y.bar() # $ use-use=y:16 MISSING: use-use=y:14 + print(x) # $ use-use=x:15 + finally: + pass + +def func(x): # $ def=x + try: + with Thing() as y: # $ def=y + y.foo(x, some_var.some_attr) # $ def-use=x:21 def-use=y:23 + while not x.attribute: # $ use-use=x:27 MISSING: use-use=x:24 + y.bar() # $ use-use=y:26 MISSING: use-use=y:24 + print(x) # $ use-use=x:25 + finally: + pass diff --git a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py index b67fa985f51..ca7bb71d760 100644 --- a/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py +++ b/python/ql/test/query-tests/Functions/ModificationOfParameterWithDefault/test.py @@ -216,3 +216,9 @@ def flow_from_within_deepcopy_fp(): def flow_through_deepcopy_fp(x=[]): y = deepcopy(x) y.append(1) + +# Use of copy method: + +def flow_through_copy_fp(x=[]): + y = x.copy() + y.append(1) diff --git a/ql/Cargo.lock b/ql/Cargo.lock index 3b8e7804688..557cf673d59 100644 Binary files a/ql/Cargo.lock and b/ql/Cargo.lock differ diff --git a/ql/buramu/Cargo.toml b/ql/buramu/Cargo.toml index 328501a05fa..c072903b82a 100644 --- a/ql/buramu/Cargo.toml +++ b/ql/buramu/Cargo.toml @@ -7,6 +7,6 @@ edition = "2018" [dependencies] lazy_static = "1.4.0" -chrono = "0.4.34" +chrono = "0.4.35" rayon = "1.9.0" regex = "1.10.3" diff --git a/ql/ql/src/queries/style/MissingOverride.ql b/ql/ql/src/queries/style/MissingOverride.ql deleted file mode 100644 index 833b1ba198b..00000000000 --- a/ql/ql/src/queries/style/MissingOverride.ql +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @name Missing override annotation - * @description Predicates that override another predicate should have an `override` annotation. - * @kind problem - * @problem.severity warning - * @precision very-high - * @id ql/missing-override - * @tags maintainability - */ - -import ql - -string getQualifiedName(ClassPredicate p) { - result = p.getDeclaringType().getName() + "." + p.getName() -} - -from ClassPredicate pred, ClassPredicate sup -where pred.overrides(sup) and not pred.isOverride() -select pred, getQualifiedName(pred) + " overrides $@ but does not have an override annotation.", - sup, getQualifiedName(sup) diff --git a/ql/ql/test/queries/style/MissingOverride/MissingOverride.expected b/ql/ql/test/queries/style/MissingOverride/MissingOverride.expected deleted file mode 100644 index d64a6ed1544..00000000000 --- a/ql/ql/test/queries/style/MissingOverride/MissingOverride.expected +++ /dev/null @@ -1,2 +0,0 @@ -| Test.qll:12:13:12:16 | ClassPredicate test | Wrong.test overrides $@ but does not have an override annotation. | Test.qll:4:13:4:16 | ClassPredicate test | Super.test | -| Test.qll:18:13:18:16 | ClassPredicate test | Wrong2.test overrides $@ but does not have an override annotation. | Test.qll:4:13:4:16 | ClassPredicate test | Super.test | diff --git a/ql/ql/test/queries/style/MissingOverride/MissingOverride.qlref b/ql/ql/test/queries/style/MissingOverride/MissingOverride.qlref deleted file mode 100644 index 3a83310f4a2..00000000000 --- a/ql/ql/test/queries/style/MissingOverride/MissingOverride.qlref +++ /dev/null @@ -1 +0,0 @@ -queries/style/MissingOverride.ql \ No newline at end of file diff --git a/ql/ql/test/queries/style/MissingOverride/Test.qll b/ql/ql/test/queries/style/MissingOverride/Test.qll deleted file mode 100644 index 82d5199bf9e..00000000000 --- a/ql/ql/test/queries/style/MissingOverride/Test.qll +++ /dev/null @@ -1,37 +0,0 @@ -import ql - -class Super extends AstNode { - predicate test(int i) { i = [1 .. 5] } -} - -class Correct extends Super { - override predicate test(int i) { i = 3 } -} - -class Wrong extends Super { - predicate test(int i) { i = 2 } -} - -class Mid extends Super { } - -class Wrong2 extends Mid { - predicate test(int i) { i = 2 } -} - -final class SuperFinal = Super; - -class Correct2 extends SuperFinal { - predicate test(int i) { i = 4 } -} - -class Correct3 extends AstNode instanceof SuperFinal { - predicate test(int i) { i = 4 } -} - -final class Super2 extends AstNode { - predicate test(int i) { i = [1 .. 5] } -} - -class Correct4 extends Super2 { - predicate test(int i) { i = 3 } -} diff --git a/ruby/ql/consistency-queries/DataFlowConsistency.ql b/ruby/ql/consistency-queries/DataFlowConsistency.ql index d064eeb3701..76155d5d1c1 100644 --- a/ruby/ql/consistency-queries/DataFlowConsistency.ql +++ b/ruby/ql/consistency-queries/DataFlowConsistency.ql @@ -5,7 +5,7 @@ private import codeql.ruby.dataflow.internal.DataFlowImplSpecific private import codeql.ruby.dataflow.internal.TaintTrackingImplSpecific private import codeql.dataflow.internal.DataFlowImplConsistency -private module Input implements InputSig { +private module Input implements InputSig { private import RubyDataFlow predicate postWithInFlowExclude(Node n) { n instanceof FlowSummaryNode } @@ -46,4 +46,4 @@ private module Input implements InputSig { } } -import MakeConsistency +import MakeConsistency diff --git a/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md b/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md index 56d2dcf5c73..66a82dd3d3f 100644 --- a/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md +++ b/ruby/ql/lib/change-notes/2024-02-26-arel-sqlliteral.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -Calls to `Arel::Nodes::SqlLiteral.new` are now modeled as instances of the `SqlConstruction` concept, as well as propagating taint from their argument. \ No newline at end of file +* Calls to `Arel::Nodes::SqlLiteral.new` are now modeled as instances of the `SqlConstruction` concept, as well as propagating taint from their argument. diff --git a/ruby/ql/lib/change-notes/2024-02-27-process-spawn.md b/ruby/ql/lib/change-notes/2024-02-27-process-spawn.md new file mode 100644 index 00000000000..9c20f05d865 --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-02-27-process-spawn.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* New command injection sinks have been added, including `Process.spawn`, `Process.exec`, `Terrapin::CommandLine` and the `open4` gem. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md b/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md new file mode 100644 index 00000000000..42275fcee7d --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-02-29-i18n-translate.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Calls to `I18n.translate` as well as Rails helper translate methods now propagate taint from their keyword arguments. The Rails translate methods are also recognized as XSS sanitizers when using keys marked as html safe. diff --git a/ruby/ql/lib/change-notes/2024-03-01-typhoeus-request.md b/ruby/ql/lib/change-notes/2024-03-01-typhoeus-request.md new file mode 100644 index 00000000000..f008869fbcd --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-03-01-typhoeus-request.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Calls to `Typhoeus::Request.new` are now considered as instances of the `Http::Client::Request` concept, with the response body being treated as a remote flow source. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-03-08-activerecord-from.md b/ruby/ql/lib/change-notes/2024-03-08-activerecord-from.md new file mode 100644 index 00000000000..704a4f27a61 --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-03-08-activerecord-from.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The second argument, `subquery_name`, of the `ActiveRecord::QueryMethods::from` method, is now recognized as an sql injection sink. \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2024-03-14-actiondispatch-uploadedfile.md b/ruby/ql/lib/change-notes/2024-03-14-actiondispatch-uploadedfile.md new file mode 100644 index 00000000000..a02ca0d00a2 --- /dev/null +++ b/ruby/ql/lib/change-notes/2024-03-14-actiondispatch-uploadedfile.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Modeled instances of `ActionDispatch::Http::UploadedFile` that can be obtained from element reads of `ActionController::Parameters`, with calls to `original_filename`, `content_type`, and `read` now propagating taint from their receiver. \ No newline at end of file diff --git a/ruby/ql/lib/codeql/ruby/DataFlow.qll b/ruby/ql/lib/codeql/ruby/DataFlow.qll index aa6e7e0cd59..f17c85143f5 100644 --- a/ruby/ql/lib/codeql/ruby/DataFlow.qll +++ b/ruby/ql/lib/codeql/ruby/DataFlow.qll @@ -12,6 +12,6 @@ import codeql.Locations module DataFlow { private import codeql.ruby.dataflow.internal.DataFlowImplSpecific private import codeql.dataflow.DataFlow - import DataFlowMake + import DataFlowMake import codeql.ruby.dataflow.internal.DataFlowImpl1 } diff --git a/ruby/ql/lib/codeql/ruby/Frameworks.qll b/ruby/ql/lib/codeql/ruby/Frameworks.qll index 225db19dab5..9c66870c305 100644 --- a/ruby/ql/lib/codeql/ruby/Frameworks.qll +++ b/ruby/ql/lib/codeql/ruby/Frameworks.qll @@ -30,6 +30,7 @@ private import codeql.ruby.frameworks.Json private import codeql.ruby.frameworks.Erb private import codeql.ruby.frameworks.Slim private import codeql.ruby.frameworks.Sinatra +private import codeql.ruby.frameworks.Translation private import codeql.ruby.frameworks.Twirp private import codeql.ruby.frameworks.Sqlite3 private import codeql.ruby.frameworks.Mysql2 diff --git a/ruby/ql/lib/codeql/ruby/TaintTracking.qll b/ruby/ql/lib/codeql/ruby/TaintTracking.qll index 461a423e1f1..7534b28079a 100644 --- a/ruby/ql/lib/codeql/ruby/TaintTracking.qll +++ b/ruby/ql/lib/codeql/ruby/TaintTracking.qll @@ -7,6 +7,7 @@ module TaintTracking { private import codeql.ruby.dataflow.internal.DataFlowImplSpecific private import codeql.ruby.dataflow.internal.TaintTrackingImplSpecific private import codeql.dataflow.TaintTracking - import TaintFlowMake + private import codeql.Locations + import TaintFlowMake import codeql.ruby.dataflow.internal.tainttracking1.TaintTrackingImpl } diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/Constant.qll b/ruby/ql/lib/codeql/ruby/ast/internal/Constant.qll index c18474df099..09fdd8ef2f2 100644 --- a/ruby/ql/lib/codeql/ruby/ast/internal/Constant.qll +++ b/ruby/ql/lib/codeql/ruby/ast/internal/Constant.qll @@ -423,7 +423,7 @@ private module Cached { or s = any(StringComponentImpl c).getValue() } or - TSymbol(string s) { isString(_, s) or isSymbolExpr(_, s) } or + TSymbol(string s) { isSymbolExpr(_, s) } or TRegExp(string s, string flags) { isRegExp(_, s, flags) or diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll index 277b639d0ab..21ceca9e3b5 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll @@ -1,3 +1,4 @@ +private import codeql.Locations private import DataFlowImplSpecific private import codeql.dataflow.internal.DataFlowImpl -import MakeImpl +import MakeImpl diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl1.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl1.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl1.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl1.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplCommon.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplCommon.qll index 05e0bc67b30..0b0e883803e 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplCommon.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplCommon.qll @@ -1,3 +1,4 @@ +private import codeql.Locations private import DataFlowImplSpecific private import codeql.dataflow.internal.DataFlowImplCommon -import MakeImplCommon +import MakeImplCommon diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplSpecific.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplSpecific.qll index 7a8e6dad9f8..b342537b053 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplSpecific.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplSpecific.qll @@ -2,6 +2,7 @@ * Provides Ruby-specific definitions for use in the data flow library. */ +private import codeql.Locations private import codeql.dataflow.DataFlow module Private { @@ -13,7 +14,7 @@ module Public { import DataFlowPublic } -module RubyDataFlow implements InputSig { +module RubyDataFlow implements InputSig { import Private import Public diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index d2fe2a78ab3..3b97ebcf4c8 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -322,7 +322,11 @@ private class Argument extends CfgNodes::ExprCfgNode { /** Holds if `n` is not a constant expression. */ predicate isNonConstantExpr(CfgNodes::ExprCfgNode n) { - not exists(n.getConstantValue()) and + not exists(ConstantValue cv | + cv = n.getConstantValue() and + // strings are mutable in Ruby + not cv.isString(_) + ) and not n.getExpr() instanceof ConstantAccess } @@ -800,7 +804,17 @@ predicate nodeIsHidden(Node n) { or n = LocalFlow::getParameterDefNode(_) or - isDesugarNode(n.(ExprNode).getExprNode().getExpr()) + exists(AstNode desug | + isDesugarNode(desug) and + desug.isSynthesized() and + not desug = [any(ArrayLiteral al).getDesugared(), any(HashLiteral hl).getDesugared()] + | + desug = n.asExpr().getExpr() + or + desug = n.(PostUpdateNode).getPreUpdateNode().asExpr().getExpr() + or + desug = n.(ParameterNode).getParameter() + ) or n instanceof FlowSummaryNode or diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll index 8d0c565a737..c1c625a2316 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll @@ -35,7 +35,7 @@ class Node extends TNode { * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - predicate hasLocationInfo( + deprecated predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll index 59f8e541b3d..d0beb44ac7b 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll @@ -9,7 +9,7 @@ private import codeql.ruby.dataflow.internal.DataFlowImplSpecific as DataFlowImp private import DataFlowImplSpecific::Private private import DataFlowImplSpecific::Public -module Input implements InputSig { +module Input implements InputSig { class SummarizedCallableBase = string; ArgumentPosition callbackSelfParameterPosition() { result.isLambdaSelf() } @@ -146,7 +146,7 @@ module Input implements InputSig { } } -private import Make as Impl +private import Make as Impl private module StepsInput implements Impl::Private::StepsInputSig { DataFlowCall getACall(Public::SummarizedCallable sc) { diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/TaintTrackingImplSpecific.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/TaintTrackingImplSpecific.qll index fe733ee5d95..987aefdda72 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/TaintTrackingImplSpecific.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/TaintTrackingImplSpecific.qll @@ -2,9 +2,10 @@ * Provides Ruby-specific definitions for use in the taint tracking library. */ +private import codeql.Locations private import codeql.dataflow.TaintTracking private import DataFlowImplSpecific -module RubyTaintTracking implements InputSig { +module RubyTaintTracking implements InputSig { import TaintTrackingPrivate } diff --git a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll index be1df5066e1..3fcb3eda5f8 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll @@ -8,6 +8,7 @@ private import codeql.ruby.controlflow.CfgNodes private import codeql.ruby.DataFlow private import codeql.ruby.dataflow.RemoteFlowSources private import codeql.ruby.ApiGraphs +private import codeql.ruby.typetracking.TypeTracking private import codeql.ruby.frameworks.ActionDispatch private import codeql.ruby.frameworks.ActionView private import codeql.ruby.frameworks.Rails @@ -505,6 +506,27 @@ private module ParamsSummaries { ] } + /** Gets a node that may be tainted from an `ActionController::Parameters` instance, through field accesses and hash/array element reads. */ + private DataFlow::LocalSourceNode taintFromParamsBase() { + result = + [ + paramsInstance(), + paramsInstance().getAMethodCall(methodReturnsTaintFromSelf()).getAnElementRead*() + ] + } + + private DataFlow::LocalSourceNode taintFromParamsType(TypeTracker t) { + t.start() and + result = taintFromParamsBase() + or + exists(TypeTracker t2 | result = taintFromParamsType(t2).track(t2, t)) + } + + /** Gets a node with a type that may be tainted from an `ActionController::Parameters` instance. */ + private DataFlow::LocalSourceNode taintFromParamsType() { + taintFromParamsType(TypeTracker::end()).flowsTo(result) + } + /** * A flow summary for methods on `ActionController::Parameters` which * propagate taint from receiver to return value. @@ -569,6 +591,48 @@ private module ParamsSummaries { preservesValue = false } } + + /** Flow summaries for `ActiveDispatch::Http::UploadedFile`, which can be an field of `ActionController::Parameters`. */ + module UploadedFileSummaries { + /** Flow summary for various string attributes of `UploadedFile`, including `original_filename`, `content_type`, and `headers`. */ + private class UploadedFileStringAttributeSummary extends SummarizedCallable { + UploadedFileStringAttributeSummary() { + this = "ActionDispatch::Http::UploadedFile#[original_filename,content_type,headers]" + } + + override MethodCall getACall() { + result = + taintFromParamsType() + .getAMethodCall(["original_filename", "content_type", "headers"]) + .asExpr() + .getExpr() and + result.getNumberOfArguments() = 0 + } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + input = "Argument[self]" and output = "ReturnValue" and preservesValue = false + } + } + + /** + * Flow summary for `ActiveDispatch::Http::UploadedFile#read`, + * which propagates taint from the receiver to the return value or to the second (out string) argument + */ + private class UploadedFileReadSummary extends SummarizedCallable { + UploadedFileReadSummary() { this = "ActionDispatch::Http::UploadedFile#read" } + + override MethodCall getACall() { + result = taintFromParamsType().getAMethodCall("read").asExpr().getExpr() and + result.getNumberOfArguments() in [0 .. 2] + } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + input = "Argument[self]" and + output = ["ReturnValue", "Argument[1]"] and + preservesValue = false + } + } + } } /** diff --git a/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll b/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll index f0917100058..7573e099c19 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll @@ -175,14 +175,14 @@ private predicate sqlFragmentArgumentInner(DataFlow::CallNode call, DataFlow::No call = activeRecordQueryBuilderCall([ "delete_all", "delete_by", "destroy_all", "destroy_by", "exists?", "find_by", "find_by!", - "find_or_create_by", "find_or_create_by!", "find_or_initialize_by", "find_by_sql", "from", - "having", "lock", "not", "where", "rewhere" + "find_or_create_by", "find_or_create_by!", "find_or_initialize_by", "find_by_sql", "having", + "lock", "not", "where", "rewhere" ]) and sink = call.getArgument(0) or call = activeRecordQueryBuilderCall([ - "group", "joins", "order", "reorder", "pluck", "select", "reselect" + "from", "group", "joins", "order", "reorder", "pluck", "select", "reselect" ]) and sink = call.getArgument(_) or diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Stdlib.qll b/ruby/ql/lib/codeql/ruby/frameworks/Stdlib.qll index f735f9daf8b..139f1d619d6 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Stdlib.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Stdlib.qll @@ -5,3 +5,4 @@ import stdlib.Open3 import stdlib.Logger import stdlib.Pathname +import stdlib.Process diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Translation.qll b/ruby/ql/lib/codeql/ruby/frameworks/Translation.qll new file mode 100644 index 00000000000..cf3f0aa77c4 --- /dev/null +++ b/ruby/ql/lib/codeql/ruby/frameworks/Translation.qll @@ -0,0 +1,67 @@ +/** Provides modeling for the `I18n` translation method and the rails translation helpers. */ + +private import codeql.ruby.ApiGraphs +private import codeql.ruby.dataflow.FlowSummary +private import codeql.ruby.Concepts +private import codeql.ruby.frameworks.ActionView +private import codeql.ruby.frameworks.ActionController + +/** Gets a call to `I18n.translate`, which can use keyword arguments as inputs for string interpolation. */ +private MethodCall getI18nTranslateCall() { + result = API::getTopLevelMember("I18n").getAMethodCall(["t", "translate"]).asExpr().getExpr() +} + +/** + * Gets a call to the rails view helper translate method, which is a wrapper around `I18n.translate` + * that can also escape html if the key ends in `_html` or `.html`. + */ +private MethodCall getViewHelperTranslateCall() { + result.getMethodName() = ["t", "translate"] and + inActionViewContext(result) +} + +/** + * Gets a call to the rails controller helper translate method, which is a wrapper around `I18n.translate` + * that can also escape html if the key ends in `_html` or `.html`. + */ +private MethodCall getControllerHelperTranslateCall() { + result = + any(ActionControllerClass c) + .getSelf() + .track() + .getAMethodCall(["t", "translate"]) + .asExpr() + .getExpr() +} + +/** Flow summary for translation methods. */ +private class TranslateSummary extends SummarizedCallable { + TranslateSummary() { this = "I18n.translate" } + + override MethodCall getACall() { + result = + [getI18nTranslateCall(), getViewHelperTranslateCall(), getControllerHelperTranslateCall()] + } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + input = "Argument[hash-splat].Element[any]" and + output = "ReturnValue" and + preservesValue = false + } +} + +/** A call to a translation helper method that escapes HTML. */ +private class TranslateHtmlEscape extends Escaping::Range, DataFlow::CallNode { + TranslateHtmlEscape() { + exists(MethodCall mc | mc = this.asExpr().getExpr() | + mc = [getViewHelperTranslateCall(), getControllerHelperTranslateCall()] and + mc.getArgument(0).getConstantValue().getStringlikeValue().matches(["%\\_html", "%.html"]) + ) + } + + override string getKind() { result = Escaping::getHtmlKind() } + + override DataFlow::Node getAnInput() { result = this.getKeywordArgument(_) } + + override DataFlow::Node getOutput() { result = this } +} diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll index 96568e74902..2746faebdc8 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll @@ -44,7 +44,8 @@ module Kernel { */ private predicate isPublicKernelMethod(string method) { method in [ - "class", "clone", "frozen?", "tap", "then", "yield_self", "send", "public_send", "__send__" + "class", "clone", "frozen?", "tap", "then", "yield_self", "send", "public_send", "__send__", + "method", "public_method", "singleton_method" ] } @@ -176,6 +177,24 @@ module Kernel { override predicate runsArbitraryCode() { none() } } + /** + * A call to `method`, `public_method` or `singleton_method` which returns a method object. + * To actually execute the method, the `call` method needs to be called on the object. + * ```ruby + * m = method("exit") + * m.call() + * ``` + */ + class MethodCallCodeExecution extends CodeExecution::Range, KernelMethodCall { + MethodCallCodeExecution() { + this.getMethodName() = ["method", "public_method", "singleton_method"] + } + + override DataFlow::Node getCode() { result = this.getArgument(0) } + + override predicate runsArbitraryCode() { none() } + } + private class TapSummary extends SimpleSummarizedCallable { TapSummary() { this = "tap" } diff --git a/ruby/ql/lib/codeql/ruby/frameworks/http_clients/Typhoeus.qll b/ruby/ql/lib/codeql/ruby/frameworks/http_clients/Typhoeus.qll index 1e4efb57947..c1b13323f9a 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/http_clients/Typhoeus.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/http_clients/Typhoeus.qll @@ -16,17 +16,30 @@ private import codeql.ruby.DataFlow */ class TyphoeusHttpRequest extends Http::Client::Request::Range, DataFlow::CallNode { API::Node requestNode; + boolean directResponse; TyphoeusHttpRequest() { this = requestNode.asSource() and - requestNode = - API::getTopLevelMember("Typhoeus") - .getReturn(["get", "head", "delete", "options", "post", "put", "patch"]) + ( + directResponse = true and + requestNode = + API::getTopLevelMember("Typhoeus") + .getReturn(["get", "head", "delete", "options", "post", "put", "patch"]) + or + directResponse = false and + requestNode = API::getTopLevelMember("Typhoeus").getMember("Request").getInstance() + ) } override DataFlow::Node getAUrlPart() { result = this.getArgument(0) } - override DataFlow::Node getResponseBody() { result = requestNode.getAMethodCall("body") } + override DataFlow::Node getResponseBody() { + directResponse = true and + result = getBodyFromResponse(requestNode) + or + directResponse = false and + result = getResponseBodyFromRequest(requestNode) + } /** Gets the value that controls certificate validation, if any. */ DataFlow::Node getCertificateValidationControllingValue() { @@ -55,3 +68,36 @@ private module TyphoeusDisablesCertificateValidationConfig implements DataFlow:: private module TyphoeusDisablesCertificateValidationFlow = DataFlow::Global; + +/** Gets the response body from the given `requestNode` representing a Typhoeus request */ +bindingset[requestNode] +pragma[inline_late] +private DataFlow::Node getResponseBodyFromRequest(API::Node requestNode) { + result = + [ + getBodyFromResponse(getResponseFromRequest(requestNode)), + requestNode.getMethod("on_body").getBlock().getParameter(0).asSource() + ] +} + +/** Gets the response from the given `requestNode` representing a Typhoeus request */ +bindingset[requestNode] +pragma[inline_late] +private API::Node getResponseFromRequest(API::Node requestNode) { + result = + [ + requestNode.getReturn(["run", "response"]), + requestNode + // on_headers does not carry a response body + .getMethod(["on_complete", "on_success", "on_failure", "on_progress"]) + .getBlock() + .getParameter(0) + ] +} + +/** Gets the response body from the given `responseNode` representing a Typhoeus response */ +bindingset[responseNode] +pragma[inline_late] +private DataFlow::Node getBodyFromResponse(API::Node responseNode) { + result = responseNode.getAMethodCall(["body", "response_body"]) +} diff --git a/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Open3.qll b/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Open3.qll index e65f3005503..0e9b6245880 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Open3.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Open3.qll @@ -7,7 +7,7 @@ private import codeql.ruby.ApiGraphs private import codeql.ruby.Concepts /** - * Provides modeling for the `Open3` library. + * Provides modeling for the `Open3` and `Open4` libraries. */ module Open3 { /** @@ -31,6 +31,36 @@ module Open3 { } } + /** + * A system command executed via one of the `Open4` methods. + * These methods take the same argument forms as `Kernel.system`. + * See `KernelSystemCall` for details. + */ + class Open4Call extends SystemCommandExecution::Range instanceof DataFlow::CallNode { + Open4Call() { + this = + API::getTopLevelMember("Open4").getAMethodCall(["open4", "popen4", "spawn", "popen4ext"]) + } + + override DataFlow::Node getAnArgument() { + // `popen4ext` takes an optional boolean as its first argument, but it is unlikely that we will be + // tracking flow into a boolean value so it doesn't seem worth modeling that special case here. + result = super.getArgument(_) + } + + override predicate isShellInterpreted(DataFlow::Node arg) { + super.getNumberOfArguments() = 1 and + arg = this.getAnArgument() + or + // ```rb + // Open4.popen4ext(true, "some cmd") + // ``` + super.getNumberOfArguments() = 2 and + super.getArgument(0).getConstantValue().isBoolean(_) and + arg = super.getArgument(1) + } + } + /** * A pipeline of system commands constructed via one of the `Open3` methods. * These methods accept a variable argument list of commands. diff --git a/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Process.qll b/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Process.qll new file mode 100644 index 00000000000..e4516f22038 --- /dev/null +++ b/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Process.qll @@ -0,0 +1,49 @@ +/** + * Provides modeling for the `Process` library. + */ + +private import codeql.ruby.Concepts +private import codeql.ruby.DataFlow +private import codeql.ruby.controlflow.CfgNodes +private import codeql.ruby.frameworks.core.Kernel + +/** + * Provides modeling for the `Process` library. + */ +module Process { + /** + * A call to `Process.spawn`. + * ```rb + * Process.spawn("tar xf ruby-2.0.0-p195.tar.bz2") + * Process.spawn({"ENV" => "VAR"}, "echo", "hi") + * ``` + */ + class SpawnCall extends SystemCommandExecution::Range instanceof DataFlow::CallNode { + SpawnCall() { this = DataFlow::getConstant(["Process", "PTY"]).getAMethodCall("spawn") } + + // The command can be argument 0 or 1 + // Options can be specified after the command, and we want to exclude those. + override DataFlow::Node getAnArgument() { + result = super.getArgument([0, 1]) and not result.asExpr() instanceof ExprNodes::PairCfgNode + } + + override predicate isShellInterpreted(DataFlow::Node arg) { + // Process.spawn invokes a subshell if you provide a single string as argument + super.getNumberOfArguments() = 1 and arg = this.getAnArgument() + } + } + + /** + * A system command executed via the `Process.exec` method. + */ + class ExecCall extends SystemCommandExecution::Range instanceof DataFlow::CallNode { + ExecCall() { this = DataFlow::getConstant("Process").getAMethodCall("exec") } + + override DataFlow::Node getAnArgument() { result = super.getArgument(_) } + + override predicate isShellInterpreted(DataFlow::Node arg) { + // Process.exec invokes a subshell if you provide a single string as argument + super.getNumberOfArguments() = 1 and arg = this.getAnArgument() + } + } +} diff --git a/ruby/ql/lib/codeql/ruby/frameworks/terrapin/model.yml b/ruby/ql/lib/codeql/ruby/frameworks/terrapin/model.yml new file mode 100644 index 00000000000..c111ca5efbc --- /dev/null +++ b/ruby/ql/lib/codeql/ruby/frameworks/terrapin/model.yml @@ -0,0 +1,41 @@ +extensions: + - addsTo: + pack: codeql/ruby-all + extensible: sourceModel + data: [] + + - addsTo: + pack: codeql/ruby-all + extensible: sinkModel + data: + - ["Terrapin::CommandLine!","Method[new].Argument[0]","command-injection"] + - ["Terrapin::CommandLine!","Method[new].Argument[1]","command-injection"] + + - addsTo: + pack: codeql/ruby-all + extensible: summaryModel + data: + - ["Terrapin::CommandLine::Output!","Method[new]","Argument[1]","ReturnValue","value"] + - ["Terrapin::CommandLine!","Method[path=]","Argument[0]","ReturnValue","taint"] + - ["Terrapin::CommandLine!","Method[new]","Argument[2]","ReturnValue","taint"] + + - addsTo: + pack: codeql/ruby-all + extensible: neutralModel + data: [] + + - addsTo: + pack: codeql/ruby-all + extensible: typeModel + data: + - ["Terrapin::CommandLine::Output","Terrapin::CommandLine::MultiPipe","Method[output].ReturnValue"] + - ["Terrapin::CommandLine::Output","Terrapin::CommandLine::FakeRunner","Method[call].ReturnValue"] + - ["Terrapin::CommandLine::Output","Terrapin::CommandLine::ProcessRunner","Method[call].ReturnValue"] + - ["Terrapin::CommandLine::Output","Terrapin::CommandLine!","Method[runner].ReturnValue.ReturnValue"] + - ["Terrapin::CommandLine::FakeRunner","Terrapin::CommandLine!","Method[runner].ReturnValue"] + - ["Terrapin::CommandLine::Output","Terrapin::CommandLine!","Method[fake!].ReturnValue.ReturnValue"] + - ["Terrapin::CommandLine::FakeRunner","Terrapin::CommandLine!","Method[fake!].ReturnValue"] + - ["Terrapin::CommandLine::Output","Terrapin::CommandLine","Method[output].ReturnValue"] + - ["Terrapin::CommandLineError","Terrapin::CommandNotFoundError",""] + - ["Terrapin::CommandLineError","Terrapin::ExitStatusError",""] + - ["Terrapin::CommandLineError","Terrapin::InterpolationError",""] diff --git a/ruby/ql/lib/codeql/ruby/security/ServerSideRequestForgeryCustomizations.qll b/ruby/ql/lib/codeql/ruby/security/ServerSideRequestForgeryCustomizations.qll index 07fbf27a268..9fd20d9bc9d 100644 --- a/ruby/ql/lib/codeql/ruby/security/ServerSideRequestForgeryCustomizations.qll +++ b/ruby/ql/lib/codeql/ruby/security/ServerSideRequestForgeryCustomizations.qll @@ -10,6 +10,7 @@ private import codeql.ruby.DataFlow private import codeql.ruby.dataflow.RemoteFlowSources private import codeql.ruby.Concepts private import codeql.ruby.dataflow.Sanitizers +private import codeql.ruby.frameworks.data.internal.ApiGraphModels /** * Provides default sources, sinks and sanitizers for reasoning about @@ -41,4 +42,8 @@ module ServerSideRequestForgery { /** A string interpolation with a fixed prefix, considered as a flow sanitizer. */ class StringInterpolationAsSanitizer extends PrefixedStringInterpolation, Sanitizer { } + + private class ExternalRequestForgerySink extends Sink { + ExternalRequestForgerySink() { this = ModelOutput::getASinkNode("request-forgery").asSink() } + } } diff --git a/ruby/ql/lib/codeql/ruby/security/XSS.qll b/ruby/ql/lib/codeql/ruby/security/XSS.qll index 26aa90fe831..e5cf48bd0ef 100644 --- a/ruby/ql/lib/codeql/ruby/security/XSS.qll +++ b/ruby/ql/lib/codeql/ruby/security/XSS.qll @@ -299,6 +299,8 @@ private module OrmTracking { } predicate isBarrierIn(DataFlow::Node node) { node instanceof DataFlow::SelfParameterNode } + + int accessPathLimit() { result = 1 } } import DataFlow::Global @@ -324,7 +326,9 @@ module StoredXss { OrmFieldAsSource() { exists(DataFlow::CallNode subSrc | OrmTracking::flow(subSrc, this.getReceiver()) and - subSrc.(OrmInstantiation).methodCallMayAccessField(this.getMethodName()) + subSrc.(OrmInstantiation).methodCallMayAccessField(this.getMethodName()) and + this.getNumberOfArguments() = 0 and + not exists(this.getBlock()) ) } } diff --git a/ruby/ql/src/change-notes/2024-03-01-method-code-injection-sinks.md b/ruby/ql/src/change-notes/2024-03-01-method-code-injection-sinks.md new file mode 100644 index 00000000000..43e40d3fd53 --- /dev/null +++ b/ruby/ql/src/change-notes/2024-03-01-method-code-injection-sinks.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Calls to `Object#method`, `Object#public_method` and `Object#singleton_method` with untrusted data are now recognised as sinks for code injection. \ No newline at end of file diff --git a/ruby/ql/test/TestUtilities/InlineFlowTest.qll b/ruby/ql/test/TestUtilities/InlineFlowTest.qll index c9ceda9dff5..7d8a4cb03b8 100644 --- a/ruby/ql/test/TestUtilities/InlineFlowTest.qll +++ b/ruby/ql/test/TestUtilities/InlineFlowTest.qll @@ -4,12 +4,13 @@ */ import ruby +private import codeql.Locations private import codeql.dataflow.test.InlineFlowTest private import codeql.ruby.dataflow.internal.DataFlowImplSpecific private import codeql.ruby.dataflow.internal.TaintTrackingImplSpecific private import internal.InlineExpectationsTestImpl -private module FlowTestImpl implements InputSig { +private module FlowTestImpl implements InputSig { import TestUtilities.InlineFlowTestUtil bindingset[src, sink] @@ -19,4 +20,4 @@ private module FlowTestImpl implements InputSig { } } -import InlineFlowTestMake +import InlineFlowTestMake diff --git a/ruby/ql/test/library-tests/dataflow/array-flow/array-flow.expected b/ruby/ql/test/library-tests/dataflow/array-flow/array-flow.expected index 046f19b454e..fb709a9ee57 100644 --- a/ruby/ql/test/library-tests/dataflow/array-flow/array-flow.expected +++ b/ruby/ql/test/library-tests/dataflow/array-flow/array-flow.expected @@ -8,7 +8,8 @@ edges | array_flow.rb:5:10:5:10 | a [element 0] | array_flow.rb:5:10:5:13 | ...[...] | provenance | | | array_flow.rb:9:5:9:5 | a [element 1] | array_flow.rb:11:10:11:10 | a [element 1] | provenance | | | array_flow.rb:9:5:9:5 | a [element 1] | array_flow.rb:13:10:13:10 | a [element 1] | provenance | | -| array_flow.rb:9:13:9:21 | call to source | array_flow.rb:9:5:9:5 | a [element 1] | provenance | | +| array_flow.rb:9:9:9:25 | call to [] [element 1] | array_flow.rb:9:5:9:5 | a [element 1] | provenance | | +| array_flow.rb:9:13:9:21 | call to source | array_flow.rb:9:9:9:25 | call to [] [element 1] | provenance | | | array_flow.rb:11:10:11:10 | a [element 1] | array_flow.rb:11:10:11:13 | ...[...] | provenance | | | array_flow.rb:13:10:13:10 | a [element 1] | array_flow.rb:13:10:13:13 | ...[...] | provenance | | | array_flow.rb:17:5:17:5 | a [element] | array_flow.rb:18:10:18:10 | a [element] | provenance | | @@ -31,15 +32,18 @@ edges | array_flow.rb:28:10:28:10 | c [element] | array_flow.rb:28:10:28:13 | ...[...] | provenance | | | array_flow.rb:29:10:29:10 | c [element] | array_flow.rb:29:10:29:13 | ...[...] | provenance | | | array_flow.rb:33:5:33:5 | a [element 0] | array_flow.rb:34:27:34:27 | a [element 0] | provenance | | -| array_flow.rb:33:10:33:18 | call to source | array_flow.rb:33:5:33:5 | a [element 0] | provenance | | +| array_flow.rb:33:9:33:22 | call to [] [element 0] | array_flow.rb:33:5:33:5 | a [element 0] | provenance | | +| array_flow.rb:33:10:33:18 | call to source | array_flow.rb:33:9:33:22 | call to [] [element 0] | provenance | | | array_flow.rb:34:5:34:5 | b [element 0] | array_flow.rb:35:10:35:10 | b [element 0] | provenance | | | array_flow.rb:34:9:34:28 | call to try_convert [element 0] | array_flow.rb:34:5:34:5 | b [element 0] | provenance | | | array_flow.rb:34:27:34:27 | a [element 0] | array_flow.rb:34:9:34:28 | call to try_convert [element 0] | provenance | | | array_flow.rb:35:10:35:10 | b [element 0] | array_flow.rb:35:10:35:13 | ...[...] | provenance | | | array_flow.rb:40:5:40:5 | a [element 0] | array_flow.rb:42:9:42:9 | a [element 0] | provenance | | -| array_flow.rb:40:10:40:20 | call to source | array_flow.rb:40:5:40:5 | a [element 0] | provenance | | +| array_flow.rb:40:9:40:24 | call to [] [element 0] | array_flow.rb:40:5:40:5 | a [element 0] | provenance | | +| array_flow.rb:40:10:40:20 | call to source | array_flow.rb:40:9:40:24 | call to [] [element 0] | provenance | | | array_flow.rb:41:5:41:5 | b [element 2] | array_flow.rb:42:13:42:13 | b [element 2] | provenance | | -| array_flow.rb:41:16:41:26 | call to source | array_flow.rb:41:5:41:5 | b [element 2] | provenance | | +| array_flow.rb:41:9:41:27 | call to [] [element 2] | array_flow.rb:41:5:41:5 | b [element 2] | provenance | | +| array_flow.rb:41:16:41:26 | call to source | array_flow.rb:41:9:41:27 | call to [] [element 2] | provenance | | | array_flow.rb:42:5:42:5 | c [element] | array_flow.rb:43:10:43:10 | c [element] | provenance | | | array_flow.rb:42:5:42:5 | c [element] | array_flow.rb:44:10:44:10 | c [element] | provenance | | | array_flow.rb:42:9:42:9 | a [element 0] | array_flow.rb:42:9:42:13 | ... & ... [element] | provenance | | @@ -48,7 +52,8 @@ edges | array_flow.rb:43:10:43:10 | c [element] | array_flow.rb:43:10:43:13 | ...[...] | provenance | | | array_flow.rb:44:10:44:10 | c [element] | array_flow.rb:44:10:44:13 | ...[...] | provenance | | | array_flow.rb:48:5:48:5 | a [element 0] | array_flow.rb:49:9:49:9 | a [element 0] | provenance | | -| array_flow.rb:48:10:48:18 | call to source | array_flow.rb:48:5:48:5 | a [element 0] | provenance | | +| array_flow.rb:48:9:48:22 | call to [] [element 0] | array_flow.rb:48:5:48:5 | a [element 0] | provenance | | +| array_flow.rb:48:10:48:18 | call to source | array_flow.rb:48:9:48:22 | call to [] [element 0] | provenance | | | array_flow.rb:49:5:49:5 | b [element] | array_flow.rb:50:10:50:10 | b [element] | provenance | | | array_flow.rb:49:5:49:5 | b [element] | array_flow.rb:51:10:51:10 | b [element] | provenance | | | array_flow.rb:49:9:49:9 | a [element 0] | array_flow.rb:49:9:49:13 | ... * ... [element] | provenance | | @@ -56,9 +61,11 @@ edges | array_flow.rb:50:10:50:10 | b [element] | array_flow.rb:50:10:50:13 | ...[...] | provenance | | | array_flow.rb:51:10:51:10 | b [element] | array_flow.rb:51:10:51:13 | ...[...] | provenance | | | array_flow.rb:55:5:55:5 | a [element 0] | array_flow.rb:57:9:57:9 | a [element 0] | provenance | | -| array_flow.rb:55:10:55:20 | call to source | array_flow.rb:55:5:55:5 | a [element 0] | provenance | | +| array_flow.rb:55:9:55:24 | call to [] [element 0] | array_flow.rb:55:5:55:5 | a [element 0] | provenance | | +| array_flow.rb:55:10:55:20 | call to source | array_flow.rb:55:9:55:24 | call to [] [element 0] | provenance | | | array_flow.rb:56:5:56:5 | b [element 1] | array_flow.rb:57:13:57:13 | b [element 1] | provenance | | -| array_flow.rb:56:13:56:23 | call to source | array_flow.rb:56:5:56:5 | b [element 1] | provenance | | +| array_flow.rb:56:9:56:24 | call to [] [element 1] | array_flow.rb:56:5:56:5 | b [element 1] | provenance | | +| array_flow.rb:56:13:56:23 | call to source | array_flow.rb:56:9:56:24 | call to [] [element 1] | provenance | | | array_flow.rb:57:5:57:5 | c [element 0] | array_flow.rb:58:10:58:10 | c [element 0] | provenance | | | array_flow.rb:57:5:57:5 | c [element] | array_flow.rb:58:10:58:10 | c [element] | provenance | | | array_flow.rb:57:5:57:5 | c [element] | array_flow.rb:59:10:59:10 | c [element] | provenance | | @@ -70,7 +77,8 @@ edges | array_flow.rb:58:10:58:10 | c [element] | array_flow.rb:58:10:58:13 | ...[...] | provenance | | | array_flow.rb:59:10:59:10 | c [element] | array_flow.rb:59:10:59:13 | ...[...] | provenance | | | array_flow.rb:63:5:63:5 | a [element 0] | array_flow.rb:65:9:65:9 | a [element 0] | provenance | | -| array_flow.rb:63:10:63:20 | call to source | array_flow.rb:63:5:63:5 | a [element 0] | provenance | | +| array_flow.rb:63:9:63:24 | call to [] [element 0] | array_flow.rb:63:5:63:5 | a [element 0] | provenance | | +| array_flow.rb:63:10:63:20 | call to source | array_flow.rb:63:9:63:24 | call to [] [element 0] | provenance | | | array_flow.rb:65:5:65:5 | c [element] | array_flow.rb:66:10:66:10 | c [element] | provenance | | | array_flow.rb:65:5:65:5 | c [element] | array_flow.rb:67:10:67:10 | c [element] | provenance | | | array_flow.rb:65:9:65:9 | a [element 0] | array_flow.rb:65:9:65:13 | ... - ... [element] | provenance | | @@ -79,7 +87,8 @@ edges | array_flow.rb:67:10:67:10 | c [element] | array_flow.rb:67:10:67:13 | ...[...] | provenance | | | array_flow.rb:71:5:71:5 | a [element 0] | array_flow.rb:72:9:72:9 | a [element 0] | provenance | | | array_flow.rb:71:5:71:5 | a [element 0] | array_flow.rb:73:10:73:10 | a [element 0] | provenance | | -| array_flow.rb:71:10:71:20 | call to source | array_flow.rb:71:5:71:5 | a [element 0] | provenance | | +| array_flow.rb:71:9:71:24 | call to [] [element 0] | array_flow.rb:71:5:71:5 | a [element 0] | provenance | | +| array_flow.rb:71:10:71:20 | call to source | array_flow.rb:71:9:71:24 | call to [] [element 0] | provenance | | | array_flow.rb:72:5:72:5 | b [element 0] | array_flow.rb:75:10:75:10 | b [element 0] | provenance | | | array_flow.rb:72:5:72:5 | b [element] | array_flow.rb:75:10:75:10 | b [element] | provenance | | | array_flow.rb:72:5:72:5 | b [element] | array_flow.rb:76:10:76:10 | b [element] | provenance | | @@ -97,11 +106,13 @@ edges | array_flow.rb:75:10:75:10 | b [element] | array_flow.rb:75:10:75:13 | ...[...] | provenance | | | array_flow.rb:76:10:76:10 | b [element] | array_flow.rb:76:10:76:13 | ...[...] | provenance | | | array_flow.rb:80:5:80:5 | a [element 1] | array_flow.rb:81:15:81:15 | a [element 1] | provenance | | -| array_flow.rb:80:13:80:21 | call to source | array_flow.rb:80:5:80:5 | a [element 1] | provenance | | +| array_flow.rb:80:9:80:25 | call to [] [element 1] | array_flow.rb:80:5:80:5 | a [element 1] | provenance | | +| array_flow.rb:80:13:80:21 | call to source | array_flow.rb:80:9:80:25 | call to [] [element 1] | provenance | | | array_flow.rb:81:8:81:8 | c | array_flow.rb:83:10:83:10 | c | provenance | | | array_flow.rb:81:15:81:15 | a [element 1] | array_flow.rb:81:8:81:8 | c | provenance | | | array_flow.rb:88:5:88:5 | a [element 1] | array_flow.rb:89:9:89:9 | a [element 1] | provenance | | -| array_flow.rb:88:13:88:22 | call to source | array_flow.rb:88:5:88:5 | a [element 1] | provenance | | +| array_flow.rb:88:9:88:26 | call to [] [element 1] | array_flow.rb:88:5:88:5 | a [element 1] | provenance | | +| array_flow.rb:88:13:88:22 | call to source | array_flow.rb:88:9:88:26 | call to [] [element 1] | provenance | | | array_flow.rb:89:5:89:5 | b [element 1] | array_flow.rb:91:10:91:10 | b [element 1] | provenance | | | array_flow.rb:89:5:89:5 | b [element 1] | array_flow.rb:92:10:92:10 | b [element 1] | provenance | | | array_flow.rb:89:9:89:9 | a [element 1] | array_flow.rb:89:9:89:15 | ...[...] [element 1] | provenance | | @@ -109,7 +120,8 @@ edges | array_flow.rb:91:10:91:10 | b [element 1] | array_flow.rb:91:10:91:13 | ...[...] | provenance | | | array_flow.rb:92:10:92:10 | b [element 1] | array_flow.rb:92:10:92:13 | ...[...] | provenance | | | array_flow.rb:96:5:96:5 | a [element 1] | array_flow.rb:97:9:97:9 | a [element 1] | provenance | | -| array_flow.rb:96:13:96:22 | call to source | array_flow.rb:96:5:96:5 | a [element 1] | provenance | | +| array_flow.rb:96:9:96:26 | call to [] [element 1] | array_flow.rb:96:5:96:5 | a [element 1] | provenance | | +| array_flow.rb:96:13:96:22 | call to source | array_flow.rb:96:9:96:26 | call to [] [element 1] | provenance | | | array_flow.rb:97:5:97:5 | b [element 1] | array_flow.rb:99:10:99:10 | b [element 1] | provenance | | | array_flow.rb:97:5:97:5 | b [element 1] | array_flow.rb:101:10:101:10 | b [element 1] | provenance | | | array_flow.rb:97:9:97:9 | a [element 1] | array_flow.rb:97:9:97:15 | ...[...] [element 1] | provenance | | @@ -117,7 +129,8 @@ edges | array_flow.rb:99:10:99:10 | b [element 1] | array_flow.rb:99:10:99:13 | ...[...] | provenance | | | array_flow.rb:101:10:101:10 | b [element 1] | array_flow.rb:101:10:101:13 | ...[...] | provenance | | | array_flow.rb:103:5:103:5 | a [element 1] | array_flow.rb:104:9:104:9 | a [element 1] | provenance | | -| array_flow.rb:103:13:103:24 | call to source | array_flow.rb:103:5:103:5 | a [element 1] | provenance | | +| array_flow.rb:103:9:103:39 | call to [] [element 1] | array_flow.rb:103:5:103:5 | a [element 1] | provenance | | +| array_flow.rb:103:13:103:24 | call to source | array_flow.rb:103:9:103:39 | call to [] [element 1] | provenance | | | array_flow.rb:104:5:104:5 | b [element 1] | array_flow.rb:106:10:106:10 | b [element 1] | provenance | | | array_flow.rb:104:9:104:9 | a [element 1] | array_flow.rb:104:9:104:16 | ...[...] [element 1] | provenance | | | array_flow.rb:104:9:104:16 | ...[...] [element 1] | array_flow.rb:104:5:104:5 | b [element 1] | provenance | | @@ -126,8 +139,10 @@ edges | array_flow.rb:109:5:109:5 | a [element 1] | array_flow.rb:114:9:114:9 | a [element 1] | provenance | | | array_flow.rb:109:5:109:5 | a [element 3] | array_flow.rb:110:9:110:9 | a [element 3] | provenance | | | array_flow.rb:109:5:109:5 | a [element 3] | array_flow.rb:114:9:114:9 | a [element 3] | provenance | | -| array_flow.rb:109:13:109:24 | call to source | array_flow.rb:109:5:109:5 | a [element 1] | provenance | | -| array_flow.rb:109:30:109:41 | call to source | array_flow.rb:109:5:109:5 | a [element 3] | provenance | | +| array_flow.rb:109:9:109:42 | call to [] [element 1] | array_flow.rb:109:5:109:5 | a [element 1] | provenance | | +| array_flow.rb:109:9:109:42 | call to [] [element 3] | array_flow.rb:109:5:109:5 | a [element 3] | provenance | | +| array_flow.rb:109:13:109:24 | call to source | array_flow.rb:109:9:109:42 | call to [] [element 1] | provenance | | +| array_flow.rb:109:30:109:41 | call to source | array_flow.rb:109:9:109:42 | call to [] [element 3] | provenance | | | array_flow.rb:110:5:110:5 | b [element] | array_flow.rb:111:10:111:10 | b [element] | provenance | | | array_flow.rb:110:5:110:5 | b [element] | array_flow.rb:112:10:112:10 | b [element] | provenance | | | array_flow.rb:110:9:110:9 | a [element 1] | array_flow.rb:110:9:110:18 | ...[...] [element] | provenance | | @@ -152,7 +167,8 @@ edges | array_flow.rb:129:5:129:5 | [post] a [element] | array_flow.rb:130:10:130:10 | a [element] | provenance | | | array_flow.rb:129:5:129:5 | [post] a [element] | array_flow.rb:131:10:131:10 | a [element] | provenance | | | array_flow.rb:129:5:129:5 | [post] a [element] | array_flow.rb:132:10:132:10 | a [element] | provenance | | -| array_flow.rb:129:19:129:28 | call to source | array_flow.rb:129:5:129:5 | [post] a [element] | provenance | | +| array_flow.rb:129:15:129:32 | call to [] [element 1] | array_flow.rb:129:5:129:5 | [post] a [element] | provenance | | +| array_flow.rb:129:19:129:28 | call to source | array_flow.rb:129:15:129:32 | call to [] [element 1] | provenance | | | array_flow.rb:130:10:130:10 | a [element] | array_flow.rb:130:10:130:13 | ...[...] | provenance | | | array_flow.rb:131:10:131:10 | a [element] | array_flow.rb:131:10:131:13 | ...[...] | provenance | | | array_flow.rb:132:10:132:10 | a [element] | array_flow.rb:132:10:132:13 | ...[...] | provenance | | @@ -166,21 +182,25 @@ edges | array_flow.rb:145:5:145:5 | [post] a [element] | array_flow.rb:146:10:146:10 | a [element] | provenance | | | array_flow.rb:145:5:145:5 | [post] a [element] | array_flow.rb:147:10:147:10 | a [element] | provenance | | | array_flow.rb:145:5:145:5 | [post] a [element] | array_flow.rb:148:10:148:10 | a [element] | provenance | | -| array_flow.rb:145:19:145:28 | call to source | array_flow.rb:145:5:145:5 | [post] a [element] | provenance | | +| array_flow.rb:145:15:145:32 | call to [] [element 1] | array_flow.rb:145:5:145:5 | [post] a [element] | provenance | | +| array_flow.rb:145:19:145:28 | call to source | array_flow.rb:145:15:145:32 | call to [] [element 1] | provenance | | | array_flow.rb:146:10:146:10 | a [element] | array_flow.rb:146:10:146:13 | ...[...] | provenance | | | array_flow.rb:147:10:147:10 | a [element] | array_flow.rb:147:10:147:13 | ...[...] | provenance | | | array_flow.rb:148:10:148:10 | a [element] | array_flow.rb:148:10:148:13 | ...[...] | provenance | | | array_flow.rb:152:5:152:5 | a [element 2] | array_flow.rb:153:5:153:5 | a [element 2] | provenance | | -| array_flow.rb:152:16:152:25 | call to source | array_flow.rb:152:5:152:5 | a [element 2] | provenance | | +| array_flow.rb:152:9:152:26 | call to [] [element 2] | array_flow.rb:152:5:152:5 | a [element 2] | provenance | | +| array_flow.rb:152:16:152:25 | call to source | array_flow.rb:152:9:152:26 | call to [] [element 2] | provenance | | | array_flow.rb:153:5:153:5 | a [element 2] | array_flow.rb:153:16:153:16 | x | provenance | | | array_flow.rb:153:16:153:16 | x | array_flow.rb:154:14:154:14 | x | provenance | | | array_flow.rb:159:5:159:5 | a [element 2] | array_flow.rb:160:5:160:5 | a [element 2] | provenance | | -| array_flow.rb:159:16:159:25 | call to source | array_flow.rb:159:5:159:5 | a [element 2] | provenance | | +| array_flow.rb:159:9:159:26 | call to [] [element 2] | array_flow.rb:159:5:159:5 | a [element 2] | provenance | | +| array_flow.rb:159:16:159:25 | call to source | array_flow.rb:159:9:159:26 | call to [] [element 2] | provenance | | | array_flow.rb:160:5:160:5 | a [element 2] | array_flow.rb:160:16:160:16 | x | provenance | | | array_flow.rb:160:16:160:16 | x | array_flow.rb:161:14:161:14 | x | provenance | | | array_flow.rb:166:5:166:5 | a [element 0] | array_flow.rb:167:9:167:9 | a [element 0] | provenance | | | array_flow.rb:166:5:166:5 | a [element 0] | array_flow.rb:168:10:168:10 | a [element 0] | provenance | | -| array_flow.rb:166:10:166:21 | call to source | array_flow.rb:166:5:166:5 | a [element 0] | provenance | | +| array_flow.rb:166:9:166:25 | call to [] [element 0] | array_flow.rb:166:5:166:5 | a [element 0] | provenance | | +| array_flow.rb:166:10:166:21 | call to source | array_flow.rb:166:9:166:25 | call to [] [element 0] | provenance | | | array_flow.rb:167:5:167:5 | b [element 0] | array_flow.rb:170:10:170:10 | b [element 0] | provenance | | | array_flow.rb:167:5:167:5 | b [element] | array_flow.rb:170:10:170:10 | b [element] | provenance | | | array_flow.rb:167:5:167:5 | b [element] | array_flow.rb:171:10:171:10 | b [element] | provenance | | @@ -200,10 +220,12 @@ edges | array_flow.rb:170:10:170:10 | b [element] | array_flow.rb:170:10:170:13 | ...[...] | provenance | | | array_flow.rb:171:10:171:10 | b [element] | array_flow.rb:171:10:171:13 | ...[...] | provenance | | | array_flow.rb:177:5:177:5 | c [element 1] | array_flow.rb:178:16:178:16 | c [element 1] | provenance | | -| array_flow.rb:177:15:177:24 | call to source | array_flow.rb:177:5:177:5 | c [element 1] | provenance | | +| array_flow.rb:177:9:177:25 | call to [] [element 1] | array_flow.rb:177:5:177:5 | c [element 1] | provenance | | +| array_flow.rb:177:15:177:24 | call to source | array_flow.rb:177:9:177:25 | call to [] [element 1] | provenance | | | array_flow.rb:178:5:178:5 | d [element 2, element 1] | array_flow.rb:179:11:179:11 | d [element 2, element 1] | provenance | | | array_flow.rb:178:5:178:5 | d [element 2, element 1] | array_flow.rb:180:11:180:11 | d [element 2, element 1] | provenance | | -| array_flow.rb:178:16:178:16 | c [element 1] | array_flow.rb:178:5:178:5 | d [element 2, element 1] | provenance | | +| array_flow.rb:178:9:178:17 | call to [] [element 2, element 1] | array_flow.rb:178:5:178:5 | d [element 2, element 1] | provenance | | +| array_flow.rb:178:16:178:16 | c [element 1] | array_flow.rb:178:9:178:17 | call to [] [element 2, element 1] | provenance | | | array_flow.rb:179:11:179:11 | d [element 2, element 1] | array_flow.rb:179:11:179:22 | call to assoc [element 1] | provenance | | | array_flow.rb:179:11:179:22 | call to assoc [element 1] | array_flow.rb:179:11:179:25 | ...[...] | provenance | | | array_flow.rb:179:11:179:25 | ...[...] | array_flow.rb:179:10:179:26 | ( ... ) | provenance | | @@ -212,28 +234,34 @@ edges | array_flow.rb:180:11:180:25 | ...[...] | array_flow.rb:180:10:180:26 | ( ... ) | provenance | | | array_flow.rb:184:5:184:5 | a [element 1] | array_flow.rb:186:10:186:10 | a [element 1] | provenance | | | array_flow.rb:184:5:184:5 | a [element 1] | array_flow.rb:188:10:188:10 | a [element 1] | provenance | | -| array_flow.rb:184:13:184:22 | call to source | array_flow.rb:184:5:184:5 | a [element 1] | provenance | | +| array_flow.rb:184:9:184:26 | call to [] [element 1] | array_flow.rb:184:5:184:5 | a [element 1] | provenance | | +| array_flow.rb:184:13:184:22 | call to source | array_flow.rb:184:9:184:26 | call to [] [element 1] | provenance | | | array_flow.rb:186:10:186:10 | a [element 1] | array_flow.rb:186:10:186:16 | call to at | provenance | | | array_flow.rb:188:10:188:10 | a [element 1] | array_flow.rb:188:10:188:16 | call to at | provenance | | | array_flow.rb:192:5:192:5 | a [element 2] | array_flow.rb:193:9:193:9 | a [element 2] | provenance | | -| array_flow.rb:192:16:192:25 | call to source | array_flow.rb:192:5:192:5 | a [element 2] | provenance | | +| array_flow.rb:192:9:192:26 | call to [] [element 2] | array_flow.rb:192:5:192:5 | a [element 2] | provenance | | +| array_flow.rb:192:16:192:25 | call to source | array_flow.rb:192:9:192:26 | call to [] [element 2] | provenance | | | array_flow.rb:193:5:193:5 | b | array_flow.rb:196:10:196:10 | b | provenance | | | array_flow.rb:193:9:193:9 | a [element 2] | array_flow.rb:193:9:195:7 | call to bsearch | provenance | | | array_flow.rb:193:9:193:9 | a [element 2] | array_flow.rb:193:23:193:23 | x | provenance | | | array_flow.rb:193:9:195:7 | call to bsearch | array_flow.rb:193:5:193:5 | b | provenance | | | array_flow.rb:193:23:193:23 | x | array_flow.rb:194:14:194:14 | x | provenance | | | array_flow.rb:200:5:200:5 | a [element 2] | array_flow.rb:201:9:201:9 | a [element 2] | provenance | | -| array_flow.rb:200:16:200:25 | call to source | array_flow.rb:200:5:200:5 | a [element 2] | provenance | | +| array_flow.rb:200:9:200:26 | call to [] [element 2] | array_flow.rb:200:5:200:5 | a [element 2] | provenance | | +| array_flow.rb:200:16:200:25 | call to source | array_flow.rb:200:9:200:26 | call to [] [element 2] | provenance | | | array_flow.rb:201:9:201:9 | a [element 2] | array_flow.rb:201:29:201:29 | x | provenance | | | array_flow.rb:201:29:201:29 | x | array_flow.rb:202:14:202:14 | x | provenance | | | array_flow.rb:208:5:208:5 | a [element 2] | array_flow.rb:209:5:209:5 | a [element 2] | provenance | | -| array_flow.rb:208:16:208:25 | call to source | array_flow.rb:208:5:208:5 | a [element 2] | provenance | | +| array_flow.rb:208:9:208:26 | call to [] [element 2] | array_flow.rb:208:5:208:5 | a [element 2] | provenance | | +| array_flow.rb:208:16:208:25 | call to source | array_flow.rb:208:9:208:26 | call to [] [element 2] | provenance | | | array_flow.rb:209:5:209:5 | a [element 2] | array_flow.rb:209:17:209:17 | x | provenance | | | array_flow.rb:209:17:209:17 | x | array_flow.rb:210:14:210:14 | x | provenance | | | array_flow.rb:215:5:215:5 | a [element 2] | array_flow.rb:216:9:216:9 | a [element 2] | provenance | | | array_flow.rb:215:5:215:5 | a [element 3] | array_flow.rb:216:9:216:9 | a [element 3] | provenance | | -| array_flow.rb:215:16:215:27 | call to source | array_flow.rb:215:5:215:5 | a [element 2] | provenance | | -| array_flow.rb:215:30:215:41 | call to source | array_flow.rb:215:5:215:5 | a [element 3] | provenance | | +| array_flow.rb:215:9:215:42 | call to [] [element 2] | array_flow.rb:215:5:215:5 | a [element 2] | provenance | | +| array_flow.rb:215:9:215:42 | call to [] [element 3] | array_flow.rb:215:5:215:5 | a [element 3] | provenance | | +| array_flow.rb:215:16:215:27 | call to source | array_flow.rb:215:9:215:42 | call to [] [element 2] | provenance | | +| array_flow.rb:215:30:215:41 | call to source | array_flow.rb:215:9:215:42 | call to [] [element 3] | provenance | | | array_flow.rb:216:9:216:9 | a [element 2] | array_flow.rb:216:27:216:27 | x | provenance | | | array_flow.rb:216:9:216:9 | a [element 2] | array_flow.rb:216:30:216:30 | y | provenance | | | array_flow.rb:216:9:216:9 | a [element 3] | array_flow.rb:216:27:216:27 | x | provenance | | @@ -241,7 +269,8 @@ edges | array_flow.rb:216:27:216:27 | x | array_flow.rb:217:14:217:14 | x | provenance | | | array_flow.rb:216:30:216:30 | y | array_flow.rb:218:14:218:14 | y | provenance | | | array_flow.rb:231:5:231:5 | a [element 2] | array_flow.rb:232:9:232:9 | a [element 2] | provenance | | -| array_flow.rb:231:16:231:27 | call to source | array_flow.rb:231:5:231:5 | a [element 2] | provenance | | +| array_flow.rb:231:9:231:28 | call to [] [element 2] | array_flow.rb:231:5:231:5 | a [element 2] | provenance | | +| array_flow.rb:231:16:231:27 | call to source | array_flow.rb:231:9:231:28 | call to [] [element 2] | provenance | | | array_flow.rb:232:5:232:5 | b [element] | array_flow.rb:236:10:236:10 | b [element] | provenance | | | array_flow.rb:232:9:232:9 | a [element 2] | array_flow.rb:232:23:232:23 | x | provenance | | | array_flow.rb:232:9:235:7 | call to collect [element] | array_flow.rb:232:5:232:5 | b [element] | provenance | | @@ -249,7 +278,8 @@ edges | array_flow.rb:234:9:234:19 | call to source | array_flow.rb:232:9:235:7 | call to collect [element] | provenance | | | array_flow.rb:236:10:236:10 | b [element] | array_flow.rb:236:10:236:13 | ...[...] | provenance | | | array_flow.rb:240:5:240:5 | a [element 2] | array_flow.rb:241:9:241:9 | a [element 2] | provenance | | -| array_flow.rb:240:16:240:27 | call to source | array_flow.rb:240:5:240:5 | a [element 2] | provenance | | +| array_flow.rb:240:9:240:28 | call to [] [element 2] | array_flow.rb:240:5:240:5 | a [element 2] | provenance | | +| array_flow.rb:240:16:240:27 | call to source | array_flow.rb:240:9:240:28 | call to [] [element 2] | provenance | | | array_flow.rb:241:5:241:5 | b [element] | array_flow.rb:246:10:246:10 | b [element] | provenance | | | array_flow.rb:241:9:241:9 | [post] a [element] | array_flow.rb:245:10:245:10 | a [element] | provenance | | | array_flow.rb:241:9:241:9 | a [element 2] | array_flow.rb:241:24:241:24 | x | provenance | | @@ -261,13 +291,17 @@ edges | array_flow.rb:246:10:246:10 | b [element] | array_flow.rb:246:10:246:13 | ...[...] | provenance | | | array_flow.rb:250:5:250:5 | a [element 2] | array_flow.rb:251:9:251:9 | a [element 2] | provenance | | | array_flow.rb:250:5:250:5 | a [element 2] | array_flow.rb:256:9:256:9 | a [element 2] | provenance | | -| array_flow.rb:250:16:250:27 | call to source | array_flow.rb:250:5:250:5 | a [element 2] | provenance | | +| array_flow.rb:250:9:250:28 | call to [] [element 2] | array_flow.rb:250:5:250:5 | a [element 2] | provenance | | +| array_flow.rb:250:16:250:27 | call to source | array_flow.rb:250:9:250:28 | call to [] [element 2] | provenance | | | array_flow.rb:251:5:251:5 | b [element] | array_flow.rb:255:10:255:10 | b [element] | provenance | | | array_flow.rb:251:9:251:9 | a [element 2] | array_flow.rb:251:9:254:7 | call to collect_concat [element] | provenance | | | array_flow.rb:251:9:251:9 | a [element 2] | array_flow.rb:251:30:251:30 | x | provenance | | | array_flow.rb:251:9:254:7 | call to collect_concat [element] | array_flow.rb:251:5:251:5 | b [element] | provenance | | | array_flow.rb:251:30:251:30 | x | array_flow.rb:252:14:252:14 | x | provenance | | -| array_flow.rb:253:13:253:24 | call to source | array_flow.rb:251:9:254:7 | call to collect_concat [element] | provenance | | +| array_flow.rb:251:30:251:30 | x | array_flow.rb:253:10:253:10 | x | provenance | | +| array_flow.rb:253:9:253:25 | call to [] [element 1] | array_flow.rb:251:9:254:7 | call to collect_concat [element] | provenance | | +| array_flow.rb:253:10:253:10 | x | array_flow.rb:253:9:253:25 | call to [] [element 0] | provenance | | +| array_flow.rb:253:13:253:24 | call to source | array_flow.rb:253:9:253:25 | call to [] [element 1] | provenance | | | array_flow.rb:255:10:255:10 | b [element] | array_flow.rb:255:10:255:13 | ...[...] | provenance | | | array_flow.rb:256:5:256:5 | b [element] | array_flow.rb:260:10:260:10 | b [element] | provenance | | | array_flow.rb:256:9:256:9 | a [element 2] | array_flow.rb:256:30:256:30 | x | provenance | | @@ -276,7 +310,8 @@ edges | array_flow.rb:258:9:258:20 | call to source | array_flow.rb:256:9:259:7 | call to collect_concat [element] | provenance | | | array_flow.rb:260:10:260:10 | b [element] | array_flow.rb:260:10:260:13 | ...[...] | provenance | | | array_flow.rb:264:5:264:5 | a [element 2] | array_flow.rb:265:9:265:9 | a [element 2] | provenance | | -| array_flow.rb:264:16:264:25 | call to source | array_flow.rb:264:5:264:5 | a [element 2] | provenance | | +| array_flow.rb:264:9:264:26 | call to [] [element 2] | array_flow.rb:264:5:264:5 | a [element 2] | provenance | | +| array_flow.rb:264:16:264:25 | call to source | array_flow.rb:264:9:264:26 | call to [] [element 2] | provenance | | | array_flow.rb:265:5:265:5 | b [element 2] | array_flow.rb:269:10:269:10 | b [element 2] | provenance | | | array_flow.rb:265:9:265:9 | a [element 2] | array_flow.rb:265:9:267:7 | call to combination [element 2] | provenance | | | array_flow.rb:265:9:265:9 | a [element 2] | array_flow.rb:265:30:265:30 | x [element] | provenance | | @@ -285,13 +320,15 @@ edges | array_flow.rb:266:14:266:14 | x [element] | array_flow.rb:266:14:266:17 | ...[...] | provenance | | | array_flow.rb:269:10:269:10 | b [element 2] | array_flow.rb:269:10:269:13 | ...[...] | provenance | | | array_flow.rb:273:5:273:5 | a [element 2] | array_flow.rb:274:9:274:9 | a [element 2] | provenance | | -| array_flow.rb:273:16:273:25 | call to source | array_flow.rb:273:5:273:5 | a [element 2] | provenance | | +| array_flow.rb:273:9:273:26 | call to [] [element 2] | array_flow.rb:273:5:273:5 | a [element 2] | provenance | | +| array_flow.rb:273:16:273:25 | call to source | array_flow.rb:273:9:273:26 | call to [] [element 2] | provenance | | | array_flow.rb:274:5:274:5 | b [element] | array_flow.rb:275:10:275:10 | b [element] | provenance | | | array_flow.rb:274:9:274:9 | a [element 2] | array_flow.rb:274:9:274:17 | call to compact [element] | provenance | | | array_flow.rb:274:9:274:17 | call to compact [element] | array_flow.rb:274:5:274:5 | b [element] | provenance | | | array_flow.rb:275:10:275:10 | b [element] | array_flow.rb:275:10:275:13 | ...[...] | provenance | | | array_flow.rb:279:5:279:5 | a [element 2] | array_flow.rb:280:9:280:9 | a [element 2] | provenance | | -| array_flow.rb:279:16:279:25 | call to source | array_flow.rb:279:5:279:5 | a [element 2] | provenance | | +| array_flow.rb:279:9:279:26 | call to [] [element 2] | array_flow.rb:279:5:279:5 | a [element 2] | provenance | | +| array_flow.rb:279:16:279:25 | call to source | array_flow.rb:279:9:279:26 | call to [] [element 2] | provenance | | | array_flow.rb:280:5:280:5 | b [element] | array_flow.rb:282:10:282:10 | b [element] | provenance | | | array_flow.rb:280:9:280:9 | [post] a [element] | array_flow.rb:281:10:281:10 | a [element] | provenance | | | array_flow.rb:280:9:280:9 | a [element 2] | array_flow.rb:280:9:280:9 | [post] a [element] | provenance | | @@ -300,9 +337,11 @@ edges | array_flow.rb:281:10:281:10 | a [element] | array_flow.rb:281:10:281:13 | ...[...] | provenance | | | array_flow.rb:282:10:282:10 | b [element] | array_flow.rb:282:10:282:13 | ...[...] | provenance | | | array_flow.rb:286:5:286:5 | a [element 2] | array_flow.rb:290:10:290:10 | a [element 2] | provenance | | -| array_flow.rb:286:16:286:27 | call to source | array_flow.rb:286:5:286:5 | a [element 2] | provenance | | +| array_flow.rb:286:9:286:28 | call to [] [element 2] | array_flow.rb:286:5:286:5 | a [element 2] | provenance | | +| array_flow.rb:286:16:286:27 | call to source | array_flow.rb:286:9:286:28 | call to [] [element 2] | provenance | | | array_flow.rb:287:5:287:5 | b [element 2] | array_flow.rb:288:14:288:14 | b [element 2] | provenance | | -| array_flow.rb:287:16:287:27 | call to source | array_flow.rb:287:5:287:5 | b [element 2] | provenance | | +| array_flow.rb:287:9:287:28 | call to [] [element 2] | array_flow.rb:287:5:287:5 | b [element 2] | provenance | | +| array_flow.rb:287:16:287:27 | call to source | array_flow.rb:287:9:287:28 | call to [] [element 2] | provenance | | | array_flow.rb:288:5:288:5 | [post] a [element] | array_flow.rb:289:10:289:10 | a [element] | provenance | | | array_flow.rb:288:5:288:5 | [post] a [element] | array_flow.rb:290:10:290:10 | a [element] | provenance | | | array_flow.rb:288:14:288:14 | b [element 2] | array_flow.rb:288:5:288:5 | [post] a [element] | provenance | | @@ -310,29 +349,35 @@ edges | array_flow.rb:290:10:290:10 | a [element 2] | array_flow.rb:290:10:290:13 | ...[...] | provenance | | | array_flow.rb:290:10:290:10 | a [element] | array_flow.rb:290:10:290:13 | ...[...] | provenance | | | array_flow.rb:294:5:294:5 | a [element 2] | array_flow.rb:295:5:295:5 | a [element 2] | provenance | | -| array_flow.rb:294:16:294:25 | call to source | array_flow.rb:294:5:294:5 | a [element 2] | provenance | | +| array_flow.rb:294:9:294:26 | call to [] [element 2] | array_flow.rb:294:5:294:5 | a [element 2] | provenance | | +| array_flow.rb:294:16:294:25 | call to source | array_flow.rb:294:9:294:26 | call to [] [element 2] | provenance | | | array_flow.rb:295:5:295:5 | a [element 2] | array_flow.rb:295:17:295:17 | x | provenance | | | array_flow.rb:295:17:295:17 | x | array_flow.rb:296:14:296:14 | x | provenance | | | array_flow.rb:301:5:301:5 | a [element 2] | array_flow.rb:302:5:302:5 | a [element 2] | provenance | | -| array_flow.rb:301:16:301:25 | call to source | array_flow.rb:301:5:301:5 | a [element 2] | provenance | | +| array_flow.rb:301:9:301:26 | call to [] [element 2] | array_flow.rb:301:5:301:5 | a [element 2] | provenance | | +| array_flow.rb:301:16:301:25 | call to source | array_flow.rb:301:9:301:26 | call to [] [element 2] | provenance | | | array_flow.rb:302:5:302:5 | a [element 2] | array_flow.rb:302:20:302:20 | x | provenance | | | array_flow.rb:302:20:302:20 | x | array_flow.rb:303:14:303:14 | x | provenance | | | array_flow.rb:308:5:308:5 | a [element 2] | array_flow.rb:309:9:309:9 | a [element 2] | provenance | | -| array_flow.rb:308:16:308:25 | call to source | array_flow.rb:308:5:308:5 | a [element 2] | provenance | | +| array_flow.rb:308:9:308:26 | call to [] [element 2] | array_flow.rb:308:5:308:5 | a [element 2] | provenance | | +| array_flow.rb:308:16:308:25 | call to source | array_flow.rb:308:9:308:26 | call to [] [element 2] | provenance | | | array_flow.rb:309:5:309:5 | b [element 2] | array_flow.rb:312:10:312:10 | b [element 2] | provenance | | | array_flow.rb:309:9:309:9 | a [element 2] | array_flow.rb:309:9:309:21 | call to deconstruct [element 2] | provenance | | | array_flow.rb:309:9:309:21 | call to deconstruct [element 2] | array_flow.rb:309:5:309:5 | b [element 2] | provenance | | | array_flow.rb:312:10:312:10 | b [element 2] | array_flow.rb:312:10:312:13 | ...[...] | provenance | | | array_flow.rb:316:5:316:5 | a [element 2] | array_flow.rb:317:9:317:9 | a [element 2] | provenance | | -| array_flow.rb:316:16:316:27 | call to source | array_flow.rb:316:5:316:5 | a [element 2] | provenance | | +| array_flow.rb:316:9:316:28 | call to [] [element 2] | array_flow.rb:316:5:316:5 | a [element 2] | provenance | | +| array_flow.rb:316:16:316:27 | call to source | array_flow.rb:316:9:316:28 | call to [] [element 2] | provenance | | | array_flow.rb:317:5:317:5 | b | array_flow.rb:318:10:318:10 | b | provenance | | | array_flow.rb:317:9:317:9 | a [element 2] | array_flow.rb:317:9:317:36 | call to delete | provenance | | | array_flow.rb:317:9:317:36 | call to delete | array_flow.rb:317:5:317:5 | b | provenance | | | array_flow.rb:317:23:317:34 | call to source | array_flow.rb:317:9:317:36 | call to delete | provenance | | | array_flow.rb:325:5:325:5 | a [element 2] | array_flow.rb:326:9:326:9 | a [element 2] | provenance | | | array_flow.rb:325:5:325:5 | a [element 3] | array_flow.rb:326:9:326:9 | a [element 3] | provenance | | -| array_flow.rb:325:16:325:27 | call to source | array_flow.rb:325:5:325:5 | a [element 2] | provenance | | -| array_flow.rb:325:30:325:41 | call to source | array_flow.rb:325:5:325:5 | a [element 3] | provenance | | +| array_flow.rb:325:9:325:42 | call to [] [element 2] | array_flow.rb:325:5:325:5 | a [element 2] | provenance | | +| array_flow.rb:325:9:325:42 | call to [] [element 3] | array_flow.rb:325:5:325:5 | a [element 3] | provenance | | +| array_flow.rb:325:16:325:27 | call to source | array_flow.rb:325:9:325:42 | call to [] [element 2] | provenance | | +| array_flow.rb:325:30:325:41 | call to source | array_flow.rb:325:9:325:42 | call to [] [element 3] | provenance | | | array_flow.rb:326:5:326:5 | b | array_flow.rb:327:10:327:10 | b | provenance | | | array_flow.rb:326:9:326:9 | [post] a [element 2] | array_flow.rb:328:10:328:10 | a [element 2] | provenance | | | array_flow.rb:326:9:326:9 | a [element 2] | array_flow.rb:326:9:326:22 | call to delete_at | provenance | | @@ -341,8 +386,10 @@ edges | array_flow.rb:328:10:328:10 | a [element 2] | array_flow.rb:328:10:328:13 | ...[...] | provenance | | | array_flow.rb:330:5:330:5 | a [element 2] | array_flow.rb:331:9:331:9 | a [element 2] | provenance | | | array_flow.rb:330:5:330:5 | a [element 3] | array_flow.rb:331:9:331:9 | a [element 3] | provenance | | -| array_flow.rb:330:16:330:27 | call to source | array_flow.rb:330:5:330:5 | a [element 2] | provenance | | -| array_flow.rb:330:30:330:41 | call to source | array_flow.rb:330:5:330:5 | a [element 3] | provenance | | +| array_flow.rb:330:9:330:42 | call to [] [element 2] | array_flow.rb:330:5:330:5 | a [element 2] | provenance | | +| array_flow.rb:330:9:330:42 | call to [] [element 3] | array_flow.rb:330:5:330:5 | a [element 3] | provenance | | +| array_flow.rb:330:16:330:27 | call to source | array_flow.rb:330:9:330:42 | call to [] [element 2] | provenance | | +| array_flow.rb:330:30:330:41 | call to source | array_flow.rb:330:9:330:42 | call to [] [element 3] | provenance | | | array_flow.rb:331:5:331:5 | b | array_flow.rb:332:10:332:10 | b | provenance | | | array_flow.rb:331:9:331:9 | [post] a [element] | array_flow.rb:333:10:333:10 | a [element] | provenance | | | array_flow.rb:331:9:331:9 | [post] a [element] | array_flow.rb:334:10:334:10 | a [element] | provenance | | @@ -354,7 +401,8 @@ edges | array_flow.rb:333:10:333:10 | a [element] | array_flow.rb:333:10:333:13 | ...[...] | provenance | | | array_flow.rb:334:10:334:10 | a [element] | array_flow.rb:334:10:334:13 | ...[...] | provenance | | | array_flow.rb:338:5:338:5 | a [element 2] | array_flow.rb:339:9:339:9 | a [element 2] | provenance | | -| array_flow.rb:338:16:338:25 | call to source | array_flow.rb:338:5:338:5 | a [element 2] | provenance | | +| array_flow.rb:338:9:338:26 | call to [] [element 2] | array_flow.rb:338:5:338:5 | a [element 2] | provenance | | +| array_flow.rb:338:16:338:25 | call to source | array_flow.rb:338:9:338:26 | call to [] [element 2] | provenance | | | array_flow.rb:339:5:339:5 | b [element] | array_flow.rb:342:10:342:10 | b [element] | provenance | | | array_flow.rb:339:9:339:9 | [post] a [element] | array_flow.rb:343:10:343:10 | a [element] | provenance | | | array_flow.rb:339:9:339:9 | [post] a [element] | array_flow.rb:344:10:344:10 | a [element] | provenance | | @@ -369,7 +417,8 @@ edges | array_flow.rb:344:10:344:10 | a [element] | array_flow.rb:344:10:344:13 | ...[...] | provenance | | | array_flow.rb:345:10:345:10 | a [element] | array_flow.rb:345:10:345:13 | ...[...] | provenance | | | array_flow.rb:349:5:349:5 | a [element 2] | array_flow.rb:350:9:350:9 | a [element 2] | provenance | | -| array_flow.rb:349:16:349:25 | call to source | array_flow.rb:349:5:349:5 | a [element 2] | provenance | | +| array_flow.rb:349:9:349:26 | call to [] [element 2] | array_flow.rb:349:5:349:5 | a [element 2] | provenance | | +| array_flow.rb:349:16:349:25 | call to source | array_flow.rb:349:9:349:26 | call to [] [element 2] | provenance | | | array_flow.rb:350:5:350:5 | b [element] | array_flow.rb:351:10:351:10 | b [element] | provenance | | | array_flow.rb:350:9:350:9 | a [element 2] | array_flow.rb:350:9:350:25 | call to difference [element] | provenance | | | array_flow.rb:350:9:350:25 | call to difference [element] | array_flow.rb:350:5:350:5 | b [element] | provenance | | @@ -377,13 +426,17 @@ edges | array_flow.rb:355:5:355:5 | a [element 2] | array_flow.rb:357:10:357:10 | a [element 2] | provenance | | | array_flow.rb:355:5:355:5 | a [element 2] | array_flow.rb:358:10:358:10 | a [element 2] | provenance | | | array_flow.rb:355:5:355:5 | a [element 3, element 1] | array_flow.rb:360:10:360:10 | a [element 3, element 1] | provenance | | -| array_flow.rb:355:16:355:27 | call to source | array_flow.rb:355:5:355:5 | a [element 2] | provenance | | -| array_flow.rb:355:34:355:45 | call to source | array_flow.rb:355:5:355:5 | a [element 3, element 1] | provenance | | +| array_flow.rb:355:9:355:47 | call to [] [element 2] | array_flow.rb:355:5:355:5 | a [element 2] | provenance | | +| array_flow.rb:355:9:355:47 | call to [] [element 3, element 1] | array_flow.rb:355:5:355:5 | a [element 3, element 1] | provenance | | +| array_flow.rb:355:16:355:27 | call to source | array_flow.rb:355:9:355:47 | call to [] [element 2] | provenance | | +| array_flow.rb:355:30:355:46 | call to [] [element 1] | array_flow.rb:355:9:355:47 | call to [] [element 3, element 1] | provenance | | +| array_flow.rb:355:34:355:45 | call to source | array_flow.rb:355:30:355:46 | call to [] [element 1] | provenance | | | array_flow.rb:357:10:357:10 | a [element 2] | array_flow.rb:357:10:357:17 | call to dig | provenance | | | array_flow.rb:358:10:358:10 | a [element 2] | array_flow.rb:358:10:358:17 | call to dig | provenance | | | array_flow.rb:360:10:360:10 | a [element 3, element 1] | array_flow.rb:360:10:360:19 | call to dig | provenance | | | array_flow.rb:364:5:364:5 | a [element 2] | array_flow.rb:365:9:365:9 | a [element 2] | provenance | | -| array_flow.rb:364:16:364:27 | call to source | array_flow.rb:364:5:364:5 | a [element 2] | provenance | | +| array_flow.rb:364:9:364:28 | call to [] [element 2] | array_flow.rb:364:5:364:5 | a [element 2] | provenance | | +| array_flow.rb:364:16:364:27 | call to source | array_flow.rb:364:9:364:28 | call to [] [element 2] | provenance | | | array_flow.rb:365:5:365:5 | b | array_flow.rb:368:10:368:10 | b | provenance | | | array_flow.rb:365:9:365:9 | a [element 2] | array_flow.rb:365:9:367:7 | call to detect | provenance | | | array_flow.rb:365:9:365:9 | a [element 2] | array_flow.rb:365:43:365:43 | x | provenance | | @@ -395,8 +448,10 @@ edges | array_flow.rb:372:5:372:5 | a [element 2] | array_flow.rb:380:9:380:9 | a [element 2] | provenance | | | array_flow.rb:372:5:372:5 | a [element 3] | array_flow.rb:373:9:373:9 | a [element 3] | provenance | | | array_flow.rb:372:5:372:5 | a [element 3] | array_flow.rb:375:9:375:9 | a [element 3] | provenance | | -| array_flow.rb:372:16:372:27 | call to source | array_flow.rb:372:5:372:5 | a [element 2] | provenance | | -| array_flow.rb:372:30:372:41 | call to source | array_flow.rb:372:5:372:5 | a [element 3] | provenance | | +| array_flow.rb:372:9:372:42 | call to [] [element 2] | array_flow.rb:372:5:372:5 | a [element 2] | provenance | | +| array_flow.rb:372:9:372:42 | call to [] [element 3] | array_flow.rb:372:5:372:5 | a [element 3] | provenance | | +| array_flow.rb:372:16:372:27 | call to source | array_flow.rb:372:9:372:42 | call to [] [element 2] | provenance | | +| array_flow.rb:372:30:372:41 | call to source | array_flow.rb:372:9:372:42 | call to [] [element 3] | provenance | | | array_flow.rb:373:5:373:5 | b [element] | array_flow.rb:374:10:374:10 | b [element] | provenance | | | array_flow.rb:373:9:373:9 | a [element 2] | array_flow.rb:373:9:373:17 | call to drop [element] | provenance | | | array_flow.rb:373:9:373:9 | a [element 3] | array_flow.rb:373:9:373:17 | call to drop [element] | provenance | | @@ -429,8 +484,10 @@ edges | array_flow.rb:383:10:383:10 | c [element] | array_flow.rb:383:10:383:13 | ...[...] | provenance | | | array_flow.rb:387:5:387:5 | a [element 2] | array_flow.rb:388:9:388:9 | a [element 2] | provenance | | | array_flow.rb:387:5:387:5 | a [element 3] | array_flow.rb:388:9:388:9 | a [element 3] | provenance | | -| array_flow.rb:387:16:387:27 | call to source | array_flow.rb:387:5:387:5 | a [element 2] | provenance | | -| array_flow.rb:387:30:387:41 | call to source | array_flow.rb:387:5:387:5 | a [element 3] | provenance | | +| array_flow.rb:387:9:387:42 | call to [] [element 2] | array_flow.rb:387:5:387:5 | a [element 2] | provenance | | +| array_flow.rb:387:9:387:42 | call to [] [element 3] | array_flow.rb:387:5:387:5 | a [element 3] | provenance | | +| array_flow.rb:387:16:387:27 | call to source | array_flow.rb:387:9:387:42 | call to [] [element 2] | provenance | | +| array_flow.rb:387:30:387:41 | call to source | array_flow.rb:387:9:387:42 | call to [] [element 3] | provenance | | | array_flow.rb:388:5:388:5 | b [element] | array_flow.rb:391:10:391:10 | b [element] | provenance | | | array_flow.rb:388:9:388:9 | a [element 2] | array_flow.rb:388:9:390:7 | call to drop_while [element] | provenance | | | array_flow.rb:388:9:388:9 | a [element 2] | array_flow.rb:388:26:388:26 | x | provenance | | @@ -440,7 +497,8 @@ edges | array_flow.rb:388:26:388:26 | x | array_flow.rb:389:14:389:14 | x | provenance | | | array_flow.rb:391:10:391:10 | b [element] | array_flow.rb:391:10:391:13 | ...[...] | provenance | | | array_flow.rb:395:5:395:5 | a [element 2] | array_flow.rb:396:9:396:9 | a [element 2] | provenance | | -| array_flow.rb:395:16:395:25 | call to source | array_flow.rb:395:5:395:5 | a [element 2] | provenance | | +| array_flow.rb:395:9:395:26 | call to [] [element 2] | array_flow.rb:395:5:395:5 | a [element 2] | provenance | | +| array_flow.rb:395:16:395:25 | call to source | array_flow.rb:395:9:395:26 | call to [] [element 2] | provenance | | | array_flow.rb:396:5:396:5 | b [element 2] | array_flow.rb:399:10:399:10 | b [element 2] | provenance | | | array_flow.rb:396:9:396:9 | a [element 2] | array_flow.rb:396:9:398:7 | call to each [element 2] | provenance | | | array_flow.rb:396:9:396:9 | a [element 2] | array_flow.rb:396:20:396:20 | x | provenance | | @@ -448,22 +506,23 @@ edges | array_flow.rb:396:20:396:20 | x | array_flow.rb:397:14:397:14 | x | provenance | | | array_flow.rb:399:10:399:10 | b [element 2] | array_flow.rb:399:10:399:13 | ...[...] | provenance | | | array_flow.rb:403:5:403:5 | a [element 2] | array_flow.rb:404:18:404:18 | a [element 2] | provenance | | -| array_flow.rb:403:16:403:25 | call to source | array_flow.rb:403:5:403:5 | a [element 2] | provenance | | +| array_flow.rb:403:9:403:26 | call to [] [element 2] | array_flow.rb:403:5:403:5 | a [element 2] | provenance | | +| array_flow.rb:403:16:403:25 | call to source | array_flow.rb:403:9:403:26 | call to [] [element 2] | provenance | | | array_flow.rb:404:5:404:5 | b [element 2] | array_flow.rb:408:10:408:10 | b [element 2] | provenance | | -| array_flow.rb:404:9:406:7 | [post] { ... } [captured x] | array_flow.rb:407:10:407:10 | x | provenance | | -| array_flow.rb:404:9:406:7 | __synth__0__1 | array_flow.rb:405:14:405:14 | x | provenance | | | array_flow.rb:404:18:404:18 | a [element 2] | array_flow.rb:404:5:404:5 | b [element 2] | provenance | | -| array_flow.rb:404:18:404:18 | a [element 2] | array_flow.rb:404:9:406:7 | [post] { ... } [captured x] | provenance | | -| array_flow.rb:404:18:404:18 | a [element 2] | array_flow.rb:404:9:406:7 | __synth__0__1 | provenance | | +| array_flow.rb:404:18:404:18 | a [element 2] | array_flow.rb:405:14:405:14 | x | provenance | | +| array_flow.rb:404:18:404:18 | a [element 2] | array_flow.rb:407:10:407:10 | x | provenance | | | array_flow.rb:408:10:408:10 | b [element 2] | array_flow.rb:408:10:408:13 | ...[...] | provenance | | | array_flow.rb:412:5:412:5 | a [element 2] | array_flow.rb:413:5:413:5 | a [element 2] | provenance | | -| array_flow.rb:412:16:412:25 | call to source | array_flow.rb:412:5:412:5 | a [element 2] | provenance | | +| array_flow.rb:412:9:412:26 | call to [] [element 2] | array_flow.rb:412:5:412:5 | a [element 2] | provenance | | +| array_flow.rb:412:16:412:25 | call to source | array_flow.rb:412:9:412:26 | call to [] [element 2] | provenance | | | array_flow.rb:413:5:413:5 | a [element 2] | array_flow.rb:413:24:413:24 | x [element] | provenance | | | array_flow.rb:413:24:413:24 | x [element] | array_flow.rb:414:15:414:15 | x [element] | provenance | | | array_flow.rb:414:15:414:15 | x [element] | array_flow.rb:414:15:414:18 | ...[...] | provenance | | | array_flow.rb:414:15:414:18 | ...[...] | array_flow.rb:414:14:414:19 | ( ... ) | provenance | | | array_flow.rb:419:5:419:5 | a [element 2] | array_flow.rb:420:9:420:9 | a [element 2] | provenance | | -| array_flow.rb:419:16:419:25 | call to source | array_flow.rb:419:5:419:5 | a [element 2] | provenance | | +| array_flow.rb:419:9:419:26 | call to [] [element 2] | array_flow.rb:419:5:419:5 | a [element 2] | provenance | | +| array_flow.rb:419:16:419:25 | call to source | array_flow.rb:419:9:419:26 | call to [] [element 2] | provenance | | | array_flow.rb:420:5:420:5 | b [element 2] | array_flow.rb:423:10:423:10 | b [element 2] | provenance | | | array_flow.rb:420:9:420:9 | a [element 2] | array_flow.rb:420:9:422:7 | call to each_entry [element 2] | provenance | | | array_flow.rb:420:9:420:9 | a [element 2] | array_flow.rb:420:26:420:26 | x | provenance | | @@ -471,18 +530,21 @@ edges | array_flow.rb:420:26:420:26 | x | array_flow.rb:421:14:421:14 | x | provenance | | | array_flow.rb:423:10:423:10 | b [element 2] | array_flow.rb:423:10:423:13 | ...[...] | provenance | | | array_flow.rb:427:5:427:5 | a [element 2] | array_flow.rb:428:9:428:9 | a [element 2] | provenance | | -| array_flow.rb:427:16:427:25 | call to source | array_flow.rb:427:5:427:5 | a [element 2] | provenance | | +| array_flow.rb:427:9:427:26 | call to [] [element 2] | array_flow.rb:427:5:427:5 | a [element 2] | provenance | | +| array_flow.rb:427:16:427:25 | call to source | array_flow.rb:427:9:427:26 | call to [] [element 2] | provenance | | | array_flow.rb:428:5:428:5 | b [element 2] | array_flow.rb:431:10:431:10 | b [element 2] | provenance | | | array_flow.rb:428:9:428:9 | a [element 2] | array_flow.rb:428:9:430:7 | call to each_index [element 2] | provenance | | | array_flow.rb:428:9:430:7 | call to each_index [element 2] | array_flow.rb:428:5:428:5 | b [element 2] | provenance | | | array_flow.rb:431:10:431:10 | b [element 2] | array_flow.rb:431:10:431:13 | ...[...] | provenance | | | array_flow.rb:435:5:435:5 | a [element 3] | array_flow.rb:436:5:436:5 | a [element 3] | provenance | | -| array_flow.rb:435:19:435:28 | call to source | array_flow.rb:435:5:435:5 | a [element 3] | provenance | | +| array_flow.rb:435:9:435:29 | call to [] [element 3] | array_flow.rb:435:5:435:5 | a [element 3] | provenance | | +| array_flow.rb:435:19:435:28 | call to source | array_flow.rb:435:9:435:29 | call to [] [element 3] | provenance | | | array_flow.rb:436:5:436:5 | a [element 3] | array_flow.rb:436:25:436:25 | x [element] | provenance | | | array_flow.rb:436:25:436:25 | x [element] | array_flow.rb:437:14:437:14 | x [element] | provenance | | | array_flow.rb:437:14:437:14 | x [element] | array_flow.rb:437:14:437:17 | ...[...] | provenance | | | array_flow.rb:442:5:442:5 | a [element 3] | array_flow.rb:443:9:443:9 | a [element 3] | provenance | | -| array_flow.rb:442:19:442:28 | call to source | array_flow.rb:442:5:442:5 | a [element 3] | provenance | | +| array_flow.rb:442:9:442:29 | call to [] [element 3] | array_flow.rb:442:5:442:5 | a [element 3] | provenance | | +| array_flow.rb:442:19:442:28 | call to source | array_flow.rb:442:9:442:29 | call to [] [element 3] | provenance | | | array_flow.rb:443:5:443:5 | b [element 3] | array_flow.rb:447:10:447:10 | b [element 3] | provenance | | | array_flow.rb:443:9:443:9 | a [element 3] | array_flow.rb:443:9:446:7 | call to each_with_index [element 3] | provenance | | | array_flow.rb:443:9:443:9 | a [element 3] | array_flow.rb:443:31:443:31 | x | provenance | | @@ -490,7 +552,8 @@ edges | array_flow.rb:443:31:443:31 | x | array_flow.rb:444:14:444:14 | x | provenance | | | array_flow.rb:447:10:447:10 | b [element 3] | array_flow.rb:447:10:447:13 | ...[...] | provenance | | | array_flow.rb:451:5:451:5 | a [element 3] | array_flow.rb:452:9:452:9 | a [element 3] | provenance | | -| array_flow.rb:451:19:451:30 | call to source | array_flow.rb:451:5:451:5 | a [element 3] | provenance | | +| array_flow.rb:451:9:451:31 | call to [] [element 3] | array_flow.rb:451:5:451:5 | a [element 3] | provenance | | +| array_flow.rb:451:19:451:30 | call to source | array_flow.rb:451:9:451:31 | call to [] [element 3] | provenance | | | array_flow.rb:452:5:452:5 | b | array_flow.rb:456:10:456:10 | b | provenance | | | array_flow.rb:452:9:452:9 | a [element 3] | array_flow.rb:452:46:452:46 | x | provenance | | | array_flow.rb:452:9:455:7 | call to each_with_object | array_flow.rb:452:5:452:5 | b | provenance | | @@ -499,7 +562,8 @@ edges | array_flow.rb:452:46:452:46 | x | array_flow.rb:453:14:453:14 | x | provenance | | | array_flow.rb:452:48:452:48 | a | array_flow.rb:454:14:454:14 | a | provenance | | | array_flow.rb:460:5:460:5 | a [element 3] | array_flow.rb:461:9:461:9 | a [element 3] | provenance | | -| array_flow.rb:460:19:460:28 | call to source | array_flow.rb:460:5:460:5 | a [element 3] | provenance | | +| array_flow.rb:460:9:460:29 | call to [] [element 3] | array_flow.rb:460:5:460:5 | a [element 3] | provenance | | +| array_flow.rb:460:19:460:28 | call to source | array_flow.rb:460:9:460:29 | call to [] [element 3] | provenance | | | array_flow.rb:461:5:461:5 | b [element 3] | array_flow.rb:462:10:462:10 | b [element 3] | provenance | | | array_flow.rb:461:9:461:9 | a [element 3] | array_flow.rb:461:9:461:17 | call to entries [element 3] | provenance | | | array_flow.rb:461:9:461:17 | call to entries [element 3] | array_flow.rb:461:5:461:5 | b [element 3] | provenance | | @@ -510,8 +574,10 @@ edges | array_flow.rb:466:5:466:5 | a [element 3] | array_flow.rb:477:9:477:9 | a [element 3] | provenance | | | array_flow.rb:466:5:466:5 | a [element 4] | array_flow.rb:467:9:467:9 | a [element 4] | provenance | | | array_flow.rb:466:5:466:5 | a [element 4] | array_flow.rb:477:9:477:9 | a [element 4] | provenance | | -| array_flow.rb:466:19:466:30 | call to source | array_flow.rb:466:5:466:5 | a [element 3] | provenance | | -| array_flow.rb:466:33:466:44 | call to source | array_flow.rb:466:5:466:5 | a [element 4] | provenance | | +| array_flow.rb:466:9:466:45 | call to [] [element 3] | array_flow.rb:466:5:466:5 | a [element 3] | provenance | | +| array_flow.rb:466:9:466:45 | call to [] [element 4] | array_flow.rb:466:5:466:5 | a [element 4] | provenance | | +| array_flow.rb:466:19:466:30 | call to source | array_flow.rb:466:9:466:45 | call to [] [element 3] | provenance | | +| array_flow.rb:466:33:466:44 | call to source | array_flow.rb:466:9:466:45 | call to [] [element 4] | provenance | | | array_flow.rb:467:5:467:5 | b | array_flow.rb:470:10:470:10 | b | provenance | | | array_flow.rb:467:9:467:9 | a [element 3] | array_flow.rb:467:9:469:7 | call to fetch | provenance | | | array_flow.rb:467:9:467:9 | a [element 4] | array_flow.rb:467:9:469:7 | call to fetch | provenance | | @@ -534,7 +600,8 @@ edges | array_flow.rb:477:9:477:32 | call to fetch | array_flow.rb:477:5:477:5 | b | provenance | | | array_flow.rb:477:20:477:31 | call to source | array_flow.rb:477:9:477:32 | call to fetch | provenance | | | array_flow.rb:482:5:482:5 | a [element 3] | array_flow.rb:484:10:484:10 | a [element 3] | provenance | | -| array_flow.rb:482:19:482:30 | call to source | array_flow.rb:482:5:482:5 | a [element 3] | provenance | | +| array_flow.rb:482:9:482:31 | call to [] [element 3] | array_flow.rb:482:5:482:5 | a [element 3] | provenance | | +| array_flow.rb:482:19:482:30 | call to source | array_flow.rb:482:9:482:31 | call to [] [element 3] | provenance | | | array_flow.rb:483:5:483:5 | [post] a [element] | array_flow.rb:484:10:484:10 | a [element] | provenance | | | array_flow.rb:483:12:483:23 | call to source | array_flow.rb:483:5:483:5 | [post] a [element] | provenance | | | array_flow.rb:484:10:484:10 | a [element 3] | array_flow.rb:484:10:484:13 | ...[...] | provenance | | @@ -550,7 +617,8 @@ edges | array_flow.rb:492:9:492:20 | call to source | array_flow.rb:491:5:491:5 | [post] a [element] | provenance | | | array_flow.rb:494:10:494:10 | a [element] | array_flow.rb:494:10:494:13 | ...[...] | provenance | | | array_flow.rb:498:5:498:5 | a [element 3] | array_flow.rb:499:9:499:9 | a [element 3] | provenance | | -| array_flow.rb:498:19:498:28 | call to source | array_flow.rb:498:5:498:5 | a [element 3] | provenance | | +| array_flow.rb:498:9:498:29 | call to [] [element 3] | array_flow.rb:498:5:498:5 | a [element 3] | provenance | | +| array_flow.rb:498:19:498:28 | call to source | array_flow.rb:498:9:498:29 | call to [] [element 3] | provenance | | | array_flow.rb:499:5:499:5 | b [element] | array_flow.rb:502:10:502:10 | b [element] | provenance | | | array_flow.rb:499:9:499:9 | a [element 3] | array_flow.rb:499:9:501:7 | call to filter [element] | provenance | | | array_flow.rb:499:9:499:9 | a [element 3] | array_flow.rb:499:22:499:22 | x | provenance | | @@ -558,19 +626,22 @@ edges | array_flow.rb:499:22:499:22 | x | array_flow.rb:500:14:500:14 | x | provenance | | | array_flow.rb:502:10:502:10 | b [element] | array_flow.rb:502:10:502:13 | ...[...] | provenance | | | array_flow.rb:506:5:506:5 | a [element 3] | array_flow.rb:507:9:507:9 | a [element 3] | provenance | | -| array_flow.rb:506:19:506:28 | call to source | array_flow.rb:506:5:506:5 | a [element 3] | provenance | | +| array_flow.rb:506:9:506:29 | call to [] [element 3] | array_flow.rb:506:5:506:5 | a [element 3] | provenance | | +| array_flow.rb:506:19:506:28 | call to source | array_flow.rb:506:9:506:29 | call to [] [element 3] | provenance | | | array_flow.rb:507:5:507:5 | b [element] | array_flow.rb:511:10:511:10 | b [element] | provenance | | | array_flow.rb:507:9:507:9 | a [element 3] | array_flow.rb:507:9:510:7 | call to filter_map [element] | provenance | | | array_flow.rb:507:9:507:9 | a [element 3] | array_flow.rb:507:26:507:26 | x | provenance | | | array_flow.rb:507:9:510:7 | call to filter_map [element] | array_flow.rb:507:5:507:5 | b [element] | provenance | | | array_flow.rb:507:26:507:26 | x | array_flow.rb:508:14:508:14 | x | provenance | | +| array_flow.rb:507:26:507:26 | x | array_flow.rb:509:9:509:9 | x | provenance | | | array_flow.rb:511:10:511:10 | b [element] | array_flow.rb:511:10:511:13 | ...[...] | provenance | | | array_flow.rb:518:5:518:5 | d [element] | array_flow.rb:521:10:521:10 | d [element] | provenance | | | array_flow.rb:518:9:520:7 | call to filter_map [element] | array_flow.rb:518:5:518:5 | d [element] | provenance | | | array_flow.rb:519:9:519:20 | call to source | array_flow.rb:518:9:520:7 | call to filter_map [element] | provenance | | | array_flow.rb:521:10:521:10 | d [element] | array_flow.rb:521:10:521:13 | ...[...] | provenance | | | array_flow.rb:525:5:525:5 | a [element 3] | array_flow.rb:526:9:526:9 | a [element 3] | provenance | | -| array_flow.rb:525:19:525:28 | call to source | array_flow.rb:525:5:525:5 | a [element 3] | provenance | | +| array_flow.rb:525:9:525:29 | call to [] [element 3] | array_flow.rb:525:5:525:5 | a [element 3] | provenance | | +| array_flow.rb:525:19:525:28 | call to source | array_flow.rb:525:9:525:29 | call to [] [element 3] | provenance | | | array_flow.rb:526:5:526:5 | b [element] | array_flow.rb:531:10:531:10 | b [element] | provenance | | | array_flow.rb:526:9:526:9 | [post] a [element] | array_flow.rb:530:10:530:10 | a [element] | provenance | | | array_flow.rb:526:9:526:9 | a [element 3] | array_flow.rb:526:9:526:9 | [post] a [element] | provenance | | @@ -581,7 +652,8 @@ edges | array_flow.rb:530:10:530:10 | a [element] | array_flow.rb:530:10:530:13 | ...[...] | provenance | | | array_flow.rb:531:10:531:10 | b [element] | array_flow.rb:531:10:531:13 | ...[...] | provenance | | | array_flow.rb:535:5:535:5 | a [element 3] | array_flow.rb:536:9:536:9 | a [element 3] | provenance | | -| array_flow.rb:535:19:535:30 | call to source | array_flow.rb:535:5:535:5 | a [element 3] | provenance | | +| array_flow.rb:535:9:535:31 | call to [] [element 3] | array_flow.rb:535:5:535:5 | a [element 3] | provenance | | +| array_flow.rb:535:19:535:30 | call to source | array_flow.rb:535:9:535:31 | call to [] [element 3] | provenance | | | array_flow.rb:536:5:536:5 | b | array_flow.rb:539:10:539:10 | b | provenance | | | array_flow.rb:536:9:536:9 | a [element 3] | array_flow.rb:536:9:538:7 | call to find | provenance | | | array_flow.rb:536:9:536:9 | a [element 3] | array_flow.rb:536:41:536:41 | x | provenance | | @@ -589,7 +661,8 @@ edges | array_flow.rb:536:21:536:32 | call to source | array_flow.rb:536:9:538:7 | call to find | provenance | | | array_flow.rb:536:41:536:41 | x | array_flow.rb:537:14:537:14 | x | provenance | | | array_flow.rb:543:5:543:5 | a [element 3] | array_flow.rb:544:9:544:9 | a [element 3] | provenance | | -| array_flow.rb:543:19:543:28 | call to source | array_flow.rb:543:5:543:5 | a [element 3] | provenance | | +| array_flow.rb:543:9:543:29 | call to [] [element 3] | array_flow.rb:543:5:543:5 | a [element 3] | provenance | | +| array_flow.rb:543:19:543:28 | call to source | array_flow.rb:543:9:543:29 | call to [] [element 3] | provenance | | | array_flow.rb:544:5:544:5 | b [element] | array_flow.rb:547:10:547:10 | b [element] | provenance | | | array_flow.rb:544:9:544:9 | a [element 3] | array_flow.rb:544:9:546:7 | call to find_all [element] | provenance | | | array_flow.rb:544:9:544:9 | a [element 3] | array_flow.rb:544:24:544:24 | x | provenance | | @@ -597,15 +670,18 @@ edges | array_flow.rb:544:24:544:24 | x | array_flow.rb:545:14:545:14 | x | provenance | | | array_flow.rb:547:10:547:10 | b [element] | array_flow.rb:547:10:547:13 | ...[...] | provenance | | | array_flow.rb:551:5:551:5 | a [element 3] | array_flow.rb:552:5:552:5 | a [element 3] | provenance | | -| array_flow.rb:551:19:551:28 | call to source | array_flow.rb:551:5:551:5 | a [element 3] | provenance | | +| array_flow.rb:551:9:551:29 | call to [] [element 3] | array_flow.rb:551:5:551:5 | a [element 3] | provenance | | +| array_flow.rb:551:19:551:28 | call to source | array_flow.rb:551:9:551:29 | call to [] [element 3] | provenance | | | array_flow.rb:552:5:552:5 | a [element 3] | array_flow.rb:552:22:552:22 | x | provenance | | | array_flow.rb:552:22:552:22 | x | array_flow.rb:553:14:553:14 | x | provenance | | | array_flow.rb:558:5:558:5 | a [element 0] | array_flow.rb:560:10:560:10 | a [element 0] | provenance | | | array_flow.rb:558:5:558:5 | a [element 0] | array_flow.rb:561:9:561:9 | a [element 0] | provenance | | | array_flow.rb:558:5:558:5 | a [element 0] | array_flow.rb:564:9:564:9 | a [element 0] | provenance | | | array_flow.rb:558:5:558:5 | a [element 3] | array_flow.rb:564:9:564:9 | a [element 3] | provenance | | -| array_flow.rb:558:10:558:21 | call to source | array_flow.rb:558:5:558:5 | a [element 0] | provenance | | -| array_flow.rb:558:30:558:41 | call to source | array_flow.rb:558:5:558:5 | a [element 3] | provenance | | +| array_flow.rb:558:9:558:42 | call to [] [element 0] | array_flow.rb:558:5:558:5 | a [element 0] | provenance | | +| array_flow.rb:558:9:558:42 | call to [] [element 3] | array_flow.rb:558:5:558:5 | a [element 3] | provenance | | +| array_flow.rb:558:10:558:21 | call to source | array_flow.rb:558:9:558:42 | call to [] [element 0] | provenance | | +| array_flow.rb:558:30:558:41 | call to source | array_flow.rb:558:9:558:42 | call to [] [element 3] | provenance | | | array_flow.rb:559:5:559:5 | [post] a [element] | array_flow.rb:560:10:560:10 | a [element] | provenance | | | array_flow.rb:559:5:559:5 | [post] a [element] | array_flow.rb:561:9:561:9 | a [element] | provenance | | | array_flow.rb:559:5:559:5 | [post] a [element] | array_flow.rb:564:9:564:9 | a [element] | provenance | | @@ -638,13 +714,17 @@ edges | array_flow.rb:566:10:566:10 | c [element] | array_flow.rb:566:10:566:13 | ...[...] | provenance | | | array_flow.rb:570:5:570:5 | a [element 2] | array_flow.rb:571:9:571:9 | a [element 2] | provenance | | | array_flow.rb:570:5:570:5 | a [element 2] | array_flow.rb:576:9:576:9 | a [element 2] | provenance | | -| array_flow.rb:570:16:570:27 | call to source | array_flow.rb:570:5:570:5 | a [element 2] | provenance | | +| array_flow.rb:570:9:570:28 | call to [] [element 2] | array_flow.rb:570:5:570:5 | a [element 2] | provenance | | +| array_flow.rb:570:16:570:27 | call to source | array_flow.rb:570:9:570:28 | call to [] [element 2] | provenance | | | array_flow.rb:571:5:571:5 | b [element] | array_flow.rb:575:10:575:10 | b [element] | provenance | | | array_flow.rb:571:9:571:9 | a [element 2] | array_flow.rb:571:9:574:7 | call to flat_map [element] | provenance | | | array_flow.rb:571:9:571:9 | a [element 2] | array_flow.rb:571:24:571:24 | x | provenance | | | array_flow.rb:571:9:574:7 | call to flat_map [element] | array_flow.rb:571:5:571:5 | b [element] | provenance | | | array_flow.rb:571:24:571:24 | x | array_flow.rb:572:14:572:14 | x | provenance | | -| array_flow.rb:573:13:573:24 | call to source | array_flow.rb:571:9:574:7 | call to flat_map [element] | provenance | | +| array_flow.rb:571:24:571:24 | x | array_flow.rb:573:10:573:10 | x | provenance | | +| array_flow.rb:573:9:573:25 | call to [] [element 1] | array_flow.rb:571:9:574:7 | call to flat_map [element] | provenance | | +| array_flow.rb:573:10:573:10 | x | array_flow.rb:573:9:573:25 | call to [] [element 0] | provenance | | +| array_flow.rb:573:13:573:24 | call to source | array_flow.rb:573:9:573:25 | call to [] [element 1] | provenance | | | array_flow.rb:575:10:575:10 | b [element] | array_flow.rb:575:10:575:13 | ...[...] | provenance | | | array_flow.rb:576:5:576:5 | b [element] | array_flow.rb:580:10:580:10 | b [element] | provenance | | | array_flow.rb:576:9:576:9 | a [element 2] | array_flow.rb:576:24:576:24 | x | provenance | | @@ -653,14 +733,18 @@ edges | array_flow.rb:578:9:578:20 | call to source | array_flow.rb:576:9:579:7 | call to flat_map [element] | provenance | | | array_flow.rb:580:10:580:10 | b [element] | array_flow.rb:580:10:580:13 | ...[...] | provenance | | | array_flow.rb:584:5:584:5 | a [element 2, element 1] | array_flow.rb:585:9:585:9 | a [element 2, element 1] | provenance | | -| array_flow.rb:584:20:584:29 | call to source | array_flow.rb:584:5:584:5 | a [element 2, element 1] | provenance | | +| array_flow.rb:584:9:584:31 | call to [] [element 2, element 1] | array_flow.rb:584:5:584:5 | a [element 2, element 1] | provenance | | +| array_flow.rb:584:16:584:30 | call to [] [element 1] | array_flow.rb:584:9:584:31 | call to [] [element 2, element 1] | provenance | | +| array_flow.rb:584:20:584:29 | call to source | array_flow.rb:584:16:584:30 | call to [] [element 1] | provenance | | | array_flow.rb:585:5:585:5 | b [element] | array_flow.rb:586:10:586:10 | b [element] | provenance | | | array_flow.rb:585:9:585:9 | a [element 2, element 1] | array_flow.rb:585:9:585:17 | call to flatten [element] | provenance | | | array_flow.rb:585:9:585:17 | call to flatten [element] | array_flow.rb:585:5:585:5 | b [element] | provenance | | | array_flow.rb:586:10:586:10 | b [element] | array_flow.rb:586:10:586:13 | ...[...] | provenance | | | array_flow.rb:590:5:590:5 | a [element 2, element 1] | array_flow.rb:591:10:591:10 | a [element 2, element 1] | provenance | | | array_flow.rb:590:5:590:5 | a [element 2, element 1] | array_flow.rb:592:9:592:9 | a [element 2, element 1] | provenance | | -| array_flow.rb:590:20:590:29 | call to source | array_flow.rb:590:5:590:5 | a [element 2, element 1] | provenance | | +| array_flow.rb:590:9:590:31 | call to [] [element 2, element 1] | array_flow.rb:590:5:590:5 | a [element 2, element 1] | provenance | | +| array_flow.rb:590:16:590:30 | call to [] [element 1] | array_flow.rb:590:9:590:31 | call to [] [element 2, element 1] | provenance | | +| array_flow.rb:590:20:590:29 | call to source | array_flow.rb:590:16:590:30 | call to [] [element 1] | provenance | | | array_flow.rb:591:10:591:10 | a [element 2, element 1] | array_flow.rb:591:10:591:13 | ...[...] [element 1] | provenance | | | array_flow.rb:591:10:591:13 | ...[...] [element 1] | array_flow.rb:591:10:591:16 | ...[...] | provenance | | | array_flow.rb:592:5:592:5 | b [element, element 1] | array_flow.rb:596:10:596:10 | b [element, element 1] | provenance | | @@ -681,7 +765,8 @@ edges | array_flow.rb:596:10:596:13 | ...[...] [element 1] | array_flow.rb:596:10:596:16 | ...[...] | provenance | | | array_flow.rb:600:5:600:5 | a [element 3] | array_flow.rb:601:9:601:9 | a [element 3] | provenance | | | array_flow.rb:600:5:600:5 | a [element 3] | array_flow.rb:603:9:603:9 | a [element 3] | provenance | | -| array_flow.rb:600:19:600:30 | call to source | array_flow.rb:600:5:600:5 | a [element 3] | provenance | | +| array_flow.rb:600:9:600:31 | call to [] [element 3] | array_flow.rb:600:5:600:5 | a [element 3] | provenance | | +| array_flow.rb:600:19:600:30 | call to source | array_flow.rb:600:9:600:31 | call to [] [element 3] | provenance | | | array_flow.rb:601:5:601:5 | b [element] | array_flow.rb:602:10:602:10 | b [element] | provenance | | | array_flow.rb:601:9:601:9 | a [element 3] | array_flow.rb:601:9:601:20 | call to grep [element] | provenance | | | array_flow.rb:601:9:601:20 | call to grep [element] | array_flow.rb:601:5:601:5 | b [element] | provenance | | @@ -694,7 +779,8 @@ edges | array_flow.rb:607:10:607:10 | b [element] | array_flow.rb:607:10:607:13 | ...[...] | provenance | | | array_flow.rb:611:5:611:5 | a [element 3] | array_flow.rb:612:9:612:9 | a [element 3] | provenance | | | array_flow.rb:611:5:611:5 | a [element 3] | array_flow.rb:614:9:614:9 | a [element 3] | provenance | | -| array_flow.rb:611:19:611:30 | call to source | array_flow.rb:611:5:611:5 | a [element 3] | provenance | | +| array_flow.rb:611:9:611:31 | call to [] [element 3] | array_flow.rb:611:5:611:5 | a [element 3] | provenance | | +| array_flow.rb:611:19:611:30 | call to source | array_flow.rb:611:9:611:31 | call to [] [element 3] | provenance | | | array_flow.rb:612:5:612:5 | b [element] | array_flow.rb:613:10:613:10 | b [element] | provenance | | | array_flow.rb:612:9:612:9 | a [element 3] | array_flow.rb:612:9:612:21 | call to grep_v [element] | provenance | | | array_flow.rb:612:9:612:21 | call to grep_v [element] | array_flow.rb:612:5:612:5 | b [element] | provenance | | @@ -706,19 +792,23 @@ edges | array_flow.rb:616:9:616:20 | call to source | array_flow.rb:614:9:617:7 | call to grep_v [element] | provenance | | | array_flow.rb:618:10:618:10 | b [element] | array_flow.rb:618:10:618:13 | ...[...] | provenance | | | array_flow.rb:622:5:622:5 | a [element 3] | array_flow.rb:623:9:623:9 | a [element 3] | provenance | | -| array_flow.rb:622:19:622:30 | call to source | array_flow.rb:622:5:622:5 | a [element 3] | provenance | | +| array_flow.rb:622:9:622:31 | call to [] [element 3] | array_flow.rb:622:5:622:5 | a [element 3] | provenance | | +| array_flow.rb:622:19:622:30 | call to source | array_flow.rb:622:9:622:31 | call to [] [element 3] | provenance | | | array_flow.rb:623:9:623:9 | a [element 3] | array_flow.rb:623:24:623:24 | x | provenance | | | array_flow.rb:623:24:623:24 | x | array_flow.rb:624:14:624:14 | x | provenance | | | array_flow.rb:631:5:631:5 | a [element 3] | array_flow.rb:632:5:632:5 | a [element 3] | provenance | | -| array_flow.rb:631:19:631:28 | call to source | array_flow.rb:631:5:631:5 | a [element 3] | provenance | | +| array_flow.rb:631:9:631:29 | call to [] [element 3] | array_flow.rb:631:5:631:5 | a [element 3] | provenance | | +| array_flow.rb:631:19:631:28 | call to source | array_flow.rb:631:9:631:29 | call to [] [element 3] | provenance | | | array_flow.rb:632:5:632:5 | a [element 3] | array_flow.rb:632:17:632:17 | x | provenance | | | array_flow.rb:632:17:632:17 | x | array_flow.rb:633:14:633:14 | x | provenance | | | array_flow.rb:638:5:638:5 | a [element 0] | array_flow.rb:639:9:639:9 | a [element 0] | provenance | | | array_flow.rb:638:5:638:5 | a [element 0] | array_flow.rb:645:9:645:9 | a [element 0] | provenance | | | array_flow.rb:638:5:638:5 | a [element 2] | array_flow.rb:639:9:639:9 | a [element 2] | provenance | | | array_flow.rb:638:5:638:5 | a [element 2] | array_flow.rb:645:9:645:9 | a [element 2] | provenance | | -| array_flow.rb:638:10:638:21 | call to source | array_flow.rb:638:5:638:5 | a [element 0] | provenance | | -| array_flow.rb:638:27:638:38 | call to source | array_flow.rb:638:5:638:5 | a [element 2] | provenance | | +| array_flow.rb:638:9:638:39 | call to [] [element 0] | array_flow.rb:638:5:638:5 | a [element 0] | provenance | | +| array_flow.rb:638:9:638:39 | call to [] [element 2] | array_flow.rb:638:5:638:5 | a [element 2] | provenance | | +| array_flow.rb:638:10:638:21 | call to source | array_flow.rb:638:9:638:39 | call to [] [element 0] | provenance | | +| array_flow.rb:638:27:638:38 | call to source | array_flow.rb:638:9:638:39 | call to [] [element 2] | provenance | | | array_flow.rb:639:5:639:5 | b | array_flow.rb:644:10:644:10 | b | provenance | | | array_flow.rb:639:9:639:9 | a [element 0] | array_flow.rb:639:22:639:22 | x | provenance | | | array_flow.rb:639:9:639:9 | a [element 2] | array_flow.rb:639:25:639:25 | y | provenance | | @@ -733,7 +823,8 @@ edges | array_flow.rb:645:28:645:28 | y | array_flow.rb:647:14:647:14 | y | provenance | | | array_flow.rb:648:9:648:19 | call to source | array_flow.rb:645:9:649:7 | call to inject | provenance | | | array_flow.rb:655:5:655:5 | a [element 2] | array_flow.rb:656:9:656:9 | a [element 2] | provenance | | -| array_flow.rb:655:16:655:27 | call to source | array_flow.rb:655:5:655:5 | a [element 2] | provenance | | +| array_flow.rb:655:9:655:28 | call to [] [element 2] | array_flow.rb:655:5:655:5 | a [element 2] | provenance | | +| array_flow.rb:655:16:655:27 | call to source | array_flow.rb:655:9:655:28 | call to [] [element 2] | provenance | | | array_flow.rb:656:5:656:5 | b [element 1] | array_flow.rb:663:10:663:10 | b [element 1] | provenance | | | array_flow.rb:656:5:656:5 | b [element 2] | array_flow.rb:664:10:664:10 | b [element 2] | provenance | | | array_flow.rb:656:5:656:5 | b [element 4] | array_flow.rb:666:10:666:10 | b [element 4] | provenance | | @@ -756,7 +847,8 @@ edges | array_flow.rb:664:10:664:10 | b [element 2] | array_flow.rb:664:10:664:13 | ...[...] | provenance | | | array_flow.rb:666:10:666:10 | b [element 4] | array_flow.rb:666:10:666:13 | ...[...] | provenance | | | array_flow.rb:669:5:669:5 | c [element 2] | array_flow.rb:670:9:670:9 | c [element 2] | provenance | | -| array_flow.rb:669:16:669:27 | call to source | array_flow.rb:669:5:669:5 | c [element 2] | provenance | | +| array_flow.rb:669:9:669:28 | call to [] [element 2] | array_flow.rb:669:5:669:5 | c [element 2] | provenance | | +| array_flow.rb:669:16:669:27 | call to source | array_flow.rb:669:9:669:28 | call to [] [element 2] | provenance | | | array_flow.rb:670:5:670:5 | d [element] | array_flow.rb:672:10:672:10 | d [element] | provenance | | | array_flow.rb:670:9:670:9 | [post] c [element] | array_flow.rb:671:10:671:10 | c [element] | provenance | | | array_flow.rb:670:9:670:9 | c [element 2] | array_flow.rb:670:9:670:9 | [post] c [element] | provenance | | @@ -769,15 +861,19 @@ edges | array_flow.rb:671:10:671:10 | c [element] | array_flow.rb:671:10:671:13 | ...[...] | provenance | | | array_flow.rb:672:10:672:10 | d [element] | array_flow.rb:672:10:672:13 | ...[...] | provenance | | | array_flow.rb:683:5:683:5 | a [element 2] | array_flow.rb:684:9:684:9 | a [element 2] | provenance | | -| array_flow.rb:683:16:683:27 | call to source | array_flow.rb:683:5:683:5 | a [element 2] | provenance | | +| array_flow.rb:683:9:683:28 | call to [] [element 2] | array_flow.rb:683:5:683:5 | a [element 2] | provenance | | +| array_flow.rb:683:16:683:27 | call to source | array_flow.rb:683:9:683:28 | call to [] [element 2] | provenance | | | array_flow.rb:684:5:684:5 | b [element] | array_flow.rb:685:10:685:10 | b [element] | provenance | | | array_flow.rb:684:9:684:9 | a [element 2] | array_flow.rb:684:9:684:60 | call to intersection [element] | provenance | | | array_flow.rb:684:9:684:60 | call to intersection [element] | array_flow.rb:684:5:684:5 | b [element] | provenance | | -| array_flow.rb:684:31:684:42 | call to source | array_flow.rb:684:9:684:60 | call to intersection [element] | provenance | | -| array_flow.rb:684:47:684:58 | call to source | array_flow.rb:684:9:684:60 | call to intersection [element] | provenance | | +| array_flow.rb:684:24:684:43 | call to [] [element 2] | array_flow.rb:684:9:684:60 | call to intersection [element] | provenance | | +| array_flow.rb:684:31:684:42 | call to source | array_flow.rb:684:24:684:43 | call to [] [element 2] | provenance | | +| array_flow.rb:684:46:684:59 | call to [] [element 0] | array_flow.rb:684:9:684:60 | call to intersection [element] | provenance | | +| array_flow.rb:684:47:684:58 | call to source | array_flow.rb:684:46:684:59 | call to [] [element 0] | provenance | | | array_flow.rb:685:10:685:10 | b [element] | array_flow.rb:685:10:685:13 | ...[...] | provenance | | | array_flow.rb:689:5:689:5 | a [element 2] | array_flow.rb:690:9:690:9 | a [element 2] | provenance | | -| array_flow.rb:689:16:689:25 | call to source | array_flow.rb:689:5:689:5 | a [element 2] | provenance | | +| array_flow.rb:689:9:689:26 | call to [] [element 2] | array_flow.rb:689:5:689:5 | a [element 2] | provenance | | +| array_flow.rb:689:16:689:25 | call to source | array_flow.rb:689:9:689:26 | call to [] [element 2] | provenance | | | array_flow.rb:690:5:690:5 | b [element] | array_flow.rb:695:10:695:10 | b [element] | provenance | | | array_flow.rb:690:9:690:9 | [post] a [element] | array_flow.rb:694:10:694:10 | a [element] | provenance | | | array_flow.rb:690:9:690:9 | a [element 2] | array_flow.rb:690:9:690:9 | [post] a [element] | provenance | | @@ -789,7 +885,8 @@ edges | array_flow.rb:695:10:695:10 | b [element] | array_flow.rb:695:10:695:13 | ...[...] | provenance | | | array_flow.rb:699:5:699:5 | a [element 2] | array_flow.rb:701:10:701:10 | a [element 2] | provenance | | | array_flow.rb:699:5:699:5 | a [element 2] | array_flow.rb:702:9:702:9 | a [element 2] | provenance | | -| array_flow.rb:699:16:699:27 | call to source | array_flow.rb:699:5:699:5 | a [element 2] | provenance | | +| array_flow.rb:699:9:699:28 | call to [] [element 2] | array_flow.rb:699:5:699:5 | a [element 2] | provenance | | +| array_flow.rb:699:16:699:27 | call to source | array_flow.rb:699:9:699:28 | call to [] [element 2] | provenance | | | array_flow.rb:700:5:700:5 | [post] a [element] | array_flow.rb:701:10:701:10 | a [element] | provenance | | | array_flow.rb:700:5:700:5 | [post] a [element] | array_flow.rb:702:9:702:9 | a [element] | provenance | | | array_flow.rb:700:12:700:23 | call to source | array_flow.rb:700:5:700:5 | [post] a [element] | provenance | | @@ -803,7 +900,8 @@ edges | array_flow.rb:703:10:703:10 | b [element] | array_flow.rb:703:10:703:13 | ...[...] | provenance | | | array_flow.rb:704:10:704:10 | b [element] | array_flow.rb:704:10:704:13 | ...[...] | provenance | | | array_flow.rb:708:5:708:5 | a [element 2] | array_flow.rb:709:9:709:9 | a [element 2] | provenance | | -| array_flow.rb:708:16:708:27 | call to source | array_flow.rb:708:5:708:5 | a [element 2] | provenance | | +| array_flow.rb:708:9:708:28 | call to [] [element 2] | array_flow.rb:708:5:708:5 | a [element 2] | provenance | | +| array_flow.rb:708:16:708:27 | call to source | array_flow.rb:708:9:708:28 | call to [] [element 2] | provenance | | | array_flow.rb:709:5:709:5 | b [element] | array_flow.rb:713:10:713:10 | b [element] | provenance | | | array_flow.rb:709:9:709:9 | a [element 2] | array_flow.rb:709:19:709:19 | x | provenance | | | array_flow.rb:709:9:712:7 | call to map [element] | array_flow.rb:709:5:709:5 | b [element] | provenance | | @@ -811,7 +909,8 @@ edges | array_flow.rb:711:9:711:19 | call to source | array_flow.rb:709:9:712:7 | call to map [element] | provenance | | | array_flow.rb:713:10:713:10 | b [element] | array_flow.rb:713:10:713:13 | ...[...] | provenance | | | array_flow.rb:717:5:717:5 | a [element 2] | array_flow.rb:718:9:718:9 | a [element 2] | provenance | | -| array_flow.rb:717:16:717:27 | call to source | array_flow.rb:717:5:717:5 | a [element 2] | provenance | | +| array_flow.rb:717:9:717:28 | call to [] [element 2] | array_flow.rb:717:5:717:5 | a [element 2] | provenance | | +| array_flow.rb:717:16:717:27 | call to source | array_flow.rb:717:9:717:28 | call to [] [element 2] | provenance | | | array_flow.rb:718:5:718:5 | b [element] | array_flow.rb:722:10:722:10 | b [element] | provenance | | | array_flow.rb:718:9:718:9 | a [element 2] | array_flow.rb:718:20:718:20 | x | provenance | | | array_flow.rb:718:9:721:7 | call to map! [element] | array_flow.rb:718:5:718:5 | b [element] | provenance | | @@ -822,7 +921,8 @@ edges | array_flow.rb:726:5:726:5 | a [element 2] | array_flow.rb:733:9:733:9 | a [element 2] | provenance | | | array_flow.rb:726:5:726:5 | a [element 2] | array_flow.rb:737:9:737:9 | a [element 2] | provenance | | | array_flow.rb:726:5:726:5 | a [element 2] | array_flow.rb:745:9:745:9 | a [element 2] | provenance | | -| array_flow.rb:726:16:726:25 | call to source | array_flow.rb:726:5:726:5 | a [element 2] | provenance | | +| array_flow.rb:726:9:726:26 | call to [] [element 2] | array_flow.rb:726:5:726:5 | a [element 2] | provenance | | +| array_flow.rb:726:16:726:25 | call to source | array_flow.rb:726:9:726:26 | call to [] [element 2] | provenance | | | array_flow.rb:729:5:729:5 | b | array_flow.rb:730:10:730:10 | b | provenance | | | array_flow.rb:729:9:729:9 | a [element 2] | array_flow.rb:729:9:729:13 | call to max | provenance | | | array_flow.rb:729:9:729:13 | call to max | array_flow.rb:729:5:729:5 | b | provenance | | @@ -847,7 +947,8 @@ edges | array_flow.rb:750:10:750:10 | e [element] | array_flow.rb:750:10:750:13 | ...[...] | provenance | | | array_flow.rb:754:5:754:5 | a [element 2] | array_flow.rb:757:9:757:9 | a [element 2] | provenance | | | array_flow.rb:754:5:754:5 | a [element 2] | array_flow.rb:764:9:764:9 | a [element 2] | provenance | | -| array_flow.rb:754:16:754:25 | call to source | array_flow.rb:754:5:754:5 | a [element 2] | provenance | | +| array_flow.rb:754:9:754:26 | call to [] [element 2] | array_flow.rb:754:5:754:5 | a [element 2] | provenance | | +| array_flow.rb:754:16:754:25 | call to source | array_flow.rb:754:9:754:26 | call to [] [element 2] | provenance | | | array_flow.rb:757:5:757:5 | b | array_flow.rb:761:10:761:10 | b | provenance | | | array_flow.rb:757:9:757:9 | a [element 2] | array_flow.rb:757:9:760:7 | call to max_by | provenance | | | array_flow.rb:757:9:757:9 | a [element 2] | array_flow.rb:757:22:757:22 | x | provenance | | @@ -863,7 +964,8 @@ edges | array_flow.rb:772:5:772:5 | a [element 2] | array_flow.rb:779:9:779:9 | a [element 2] | provenance | | | array_flow.rb:772:5:772:5 | a [element 2] | array_flow.rb:783:9:783:9 | a [element 2] | provenance | | | array_flow.rb:772:5:772:5 | a [element 2] | array_flow.rb:791:9:791:9 | a [element 2] | provenance | | -| array_flow.rb:772:16:772:25 | call to source | array_flow.rb:772:5:772:5 | a [element 2] | provenance | | +| array_flow.rb:772:9:772:26 | call to [] [element 2] | array_flow.rb:772:5:772:5 | a [element 2] | provenance | | +| array_flow.rb:772:16:772:25 | call to source | array_flow.rb:772:9:772:26 | call to [] [element 2] | provenance | | | array_flow.rb:775:5:775:5 | b | array_flow.rb:776:10:776:10 | b | provenance | | | array_flow.rb:775:9:775:9 | a [element 2] | array_flow.rb:775:9:775:13 | call to min | provenance | | | array_flow.rb:775:9:775:13 | call to min | array_flow.rb:775:5:775:5 | b | provenance | | @@ -888,7 +990,8 @@ edges | array_flow.rb:796:10:796:10 | e [element] | array_flow.rb:796:10:796:13 | ...[...] | provenance | | | array_flow.rb:800:5:800:5 | a [element 2] | array_flow.rb:803:9:803:9 | a [element 2] | provenance | | | array_flow.rb:800:5:800:5 | a [element 2] | array_flow.rb:810:9:810:9 | a [element 2] | provenance | | -| array_flow.rb:800:16:800:25 | call to source | array_flow.rb:800:5:800:5 | a [element 2] | provenance | | +| array_flow.rb:800:9:800:26 | call to [] [element 2] | array_flow.rb:800:5:800:5 | a [element 2] | provenance | | +| array_flow.rb:800:16:800:25 | call to source | array_flow.rb:800:9:800:26 | call to [] [element 2] | provenance | | | array_flow.rb:803:5:803:5 | b | array_flow.rb:807:10:807:10 | b | provenance | | | array_flow.rb:803:9:803:9 | a [element 2] | array_flow.rb:803:9:806:7 | call to min_by | provenance | | | array_flow.rb:803:9:803:9 | a [element 2] | array_flow.rb:803:22:803:22 | x | provenance | | @@ -902,7 +1005,8 @@ edges | array_flow.rb:814:10:814:10 | c [element] | array_flow.rb:814:10:814:13 | ...[...] | provenance | | | array_flow.rb:818:5:818:5 | a [element 2] | array_flow.rb:820:9:820:9 | a [element 2] | provenance | | | array_flow.rb:818:5:818:5 | a [element 2] | array_flow.rb:824:9:824:9 | a [element 2] | provenance | | -| array_flow.rb:818:16:818:25 | call to source | array_flow.rb:818:5:818:5 | a [element 2] | provenance | | +| array_flow.rb:818:9:818:26 | call to [] [element 2] | array_flow.rb:818:5:818:5 | a [element 2] | provenance | | +| array_flow.rb:818:16:818:25 | call to source | array_flow.rb:818:9:818:26 | call to [] [element 2] | provenance | | | array_flow.rb:820:5:820:5 | b [element] | array_flow.rb:821:10:821:10 | b [element] | provenance | | | array_flow.rb:820:5:820:5 | b [element] | array_flow.rb:822:10:822:10 | b [element] | provenance | | | array_flow.rb:820:9:820:9 | a [element 2] | array_flow.rb:820:9:820:16 | call to minmax [element] | provenance | | @@ -920,7 +1024,8 @@ edges | array_flow.rb:829:10:829:10 | c [element] | array_flow.rb:829:10:829:13 | ...[...] | provenance | | | array_flow.rb:830:10:830:10 | c [element] | array_flow.rb:830:10:830:13 | ...[...] | provenance | | | array_flow.rb:834:5:834:5 | a [element 2] | array_flow.rb:835:9:835:9 | a [element 2] | provenance | | -| array_flow.rb:834:16:834:25 | call to source | array_flow.rb:834:5:834:5 | a [element 2] | provenance | | +| array_flow.rb:834:9:834:26 | call to [] [element 2] | array_flow.rb:834:5:834:5 | a [element 2] | provenance | | +| array_flow.rb:834:16:834:25 | call to source | array_flow.rb:834:9:834:26 | call to [] [element 2] | provenance | | | array_flow.rb:835:5:835:5 | b [element] | array_flow.rb:839:10:839:10 | b [element] | provenance | | | array_flow.rb:835:5:835:5 | b [element] | array_flow.rb:840:10:840:10 | b [element] | provenance | | | array_flow.rb:835:9:835:9 | a [element 2] | array_flow.rb:835:9:838:7 | call to minmax_by [element] | provenance | | @@ -930,15 +1035,18 @@ edges | array_flow.rb:839:10:839:10 | b [element] | array_flow.rb:839:10:839:13 | ...[...] | provenance | | | array_flow.rb:840:10:840:10 | b [element] | array_flow.rb:840:10:840:13 | ...[...] | provenance | | | array_flow.rb:844:5:844:5 | a [element 2] | array_flow.rb:845:5:845:5 | a [element 2] | provenance | | -| array_flow.rb:844:16:844:25 | call to source | array_flow.rb:844:5:844:5 | a [element 2] | provenance | | +| array_flow.rb:844:9:844:26 | call to [] [element 2] | array_flow.rb:844:5:844:5 | a [element 2] | provenance | | +| array_flow.rb:844:16:844:25 | call to source | array_flow.rb:844:9:844:26 | call to [] [element 2] | provenance | | | array_flow.rb:845:5:845:5 | a [element 2] | array_flow.rb:845:17:845:17 | x | provenance | | | array_flow.rb:845:17:845:17 | x | array_flow.rb:846:14:846:14 | x | provenance | | | array_flow.rb:853:5:853:5 | a [element 2] | array_flow.rb:854:5:854:5 | a [element 2] | provenance | | -| array_flow.rb:853:16:853:25 | call to source | array_flow.rb:853:5:853:5 | a [element 2] | provenance | | +| array_flow.rb:853:9:853:26 | call to [] [element 2] | array_flow.rb:853:5:853:5 | a [element 2] | provenance | | +| array_flow.rb:853:16:853:25 | call to source | array_flow.rb:853:9:853:26 | call to [] [element 2] | provenance | | | array_flow.rb:854:5:854:5 | a [element 2] | array_flow.rb:854:16:854:16 | x | provenance | | | array_flow.rb:854:16:854:16 | x | array_flow.rb:855:14:855:14 | x | provenance | | | array_flow.rb:866:5:866:5 | a [element 2] | array_flow.rb:867:9:867:9 | a [element 2] | provenance | | -| array_flow.rb:866:16:866:25 | call to source | array_flow.rb:866:5:866:5 | a [element 2] | provenance | | +| array_flow.rb:866:9:866:26 | call to [] [element 2] | array_flow.rb:866:5:866:5 | a [element 2] | provenance | | +| array_flow.rb:866:16:866:25 | call to source | array_flow.rb:866:9:866:26 | call to [] [element 2] | provenance | | | array_flow.rb:867:5:867:5 | b [element, element] | array_flow.rb:871:10:871:10 | b [element, element] | provenance | | | array_flow.rb:867:5:867:5 | b [element, element] | array_flow.rb:872:10:872:10 | b [element, element] | provenance | | | array_flow.rb:867:9:867:9 | a [element 2] | array_flow.rb:867:9:870:7 | call to partition [element, element] | provenance | | @@ -952,7 +1060,8 @@ edges | array_flow.rb:876:5:876:5 | a [element 2] | array_flow.rb:878:9:878:9 | a [element 2] | provenance | | | array_flow.rb:876:5:876:5 | a [element 2] | array_flow.rb:886:9:886:9 | a [element 2] | provenance | | | array_flow.rb:876:5:876:5 | a [element 2] | array_flow.rb:893:9:893:9 | a [element 2] | provenance | | -| array_flow.rb:876:16:876:25 | call to source | array_flow.rb:876:5:876:5 | a [element 2] | provenance | | +| array_flow.rb:876:9:876:26 | call to [] [element 2] | array_flow.rb:876:5:876:5 | a [element 2] | provenance | | +| array_flow.rb:876:16:876:25 | call to source | array_flow.rb:876:9:876:26 | call to [] [element 2] | provenance | | | array_flow.rb:878:5:878:5 | b [element 2] | array_flow.rb:884:10:884:10 | b [element 2] | provenance | | | array_flow.rb:878:9:878:9 | a [element 2] | array_flow.rb:878:9:882:7 | call to permutation [element 2] | provenance | | | array_flow.rb:878:9:878:9 | a [element 2] | array_flow.rb:878:27:878:27 | x [element] | provenance | | @@ -984,8 +1093,10 @@ edges | array_flow.rb:905:5:905:5 | a [element 1] | array_flow.rb:909:10:909:10 | a [element 1] | provenance | | | array_flow.rb:905:5:905:5 | a [element 3] | array_flow.rb:906:9:906:9 | a [element 3] | provenance | | | array_flow.rb:905:5:905:5 | a [element 3] | array_flow.rb:911:10:911:10 | a [element 3] | provenance | | -| array_flow.rb:905:13:905:24 | call to source | array_flow.rb:905:5:905:5 | a [element 1] | provenance | | -| array_flow.rb:905:30:905:41 | call to source | array_flow.rb:905:5:905:5 | a [element 3] | provenance | | +| array_flow.rb:905:9:905:42 | call to [] [element 1] | array_flow.rb:905:5:905:5 | a [element 1] | provenance | | +| array_flow.rb:905:9:905:42 | call to [] [element 3] | array_flow.rb:905:5:905:5 | a [element 3] | provenance | | +| array_flow.rb:905:13:905:24 | call to source | array_flow.rb:905:9:905:42 | call to [] [element 1] | provenance | | +| array_flow.rb:905:30:905:41 | call to source | array_flow.rb:905:9:905:42 | call to [] [element 3] | provenance | | | array_flow.rb:906:5:906:5 | b | array_flow.rb:907:10:907:10 | b | provenance | | | array_flow.rb:906:9:906:9 | a [element 1] | array_flow.rb:906:9:906:13 | call to pop | provenance | | | array_flow.rb:906:9:906:9 | a [element 3] | array_flow.rb:906:9:906:13 | call to pop | provenance | | @@ -996,8 +1107,10 @@ edges | array_flow.rb:913:5:913:5 | a [element 1] | array_flow.rb:918:10:918:10 | a [element 1] | provenance | | | array_flow.rb:913:5:913:5 | a [element 3] | array_flow.rb:914:9:914:9 | a [element 3] | provenance | | | array_flow.rb:913:5:913:5 | a [element 3] | array_flow.rb:920:10:920:10 | a [element 3] | provenance | | -| array_flow.rb:913:13:913:24 | call to source | array_flow.rb:913:5:913:5 | a [element 1] | provenance | | -| array_flow.rb:913:30:913:41 | call to source | array_flow.rb:913:5:913:5 | a [element 3] | provenance | | +| array_flow.rb:913:9:913:42 | call to [] [element 1] | array_flow.rb:913:5:913:5 | a [element 1] | provenance | | +| array_flow.rb:913:9:913:42 | call to [] [element 3] | array_flow.rb:913:5:913:5 | a [element 3] | provenance | | +| array_flow.rb:913:13:913:24 | call to source | array_flow.rb:913:9:913:42 | call to [] [element 1] | provenance | | +| array_flow.rb:913:30:913:41 | call to source | array_flow.rb:913:9:913:42 | call to [] [element 3] | provenance | | | array_flow.rb:914:5:914:5 | b [element] | array_flow.rb:915:10:915:10 | b [element] | provenance | | | array_flow.rb:914:5:914:5 | b [element] | array_flow.rb:916:10:916:10 | b [element] | provenance | | | array_flow.rb:914:9:914:9 | a [element 1] | array_flow.rb:914:9:914:16 | call to pop [element] | provenance | | @@ -1008,7 +1121,8 @@ edges | array_flow.rb:918:10:918:10 | a [element 1] | array_flow.rb:918:10:918:13 | ...[...] | provenance | | | array_flow.rb:920:10:920:10 | a [element 3] | array_flow.rb:920:10:920:13 | ...[...] | provenance | | | array_flow.rb:924:5:924:5 | a [element 2] | array_flow.rb:925:5:925:5 | a [element 2] | provenance | | -| array_flow.rb:924:16:924:27 | call to source | array_flow.rb:924:5:924:5 | a [element 2] | provenance | | +| array_flow.rb:924:9:924:28 | call to [] [element 2] | array_flow.rb:924:5:924:5 | a [element 2] | provenance | | +| array_flow.rb:924:16:924:27 | call to source | array_flow.rb:924:9:924:28 | call to [] [element 2] | provenance | | | array_flow.rb:925:5:925:5 | [post] a [element 2] | array_flow.rb:928:10:928:10 | a [element 2] | provenance | | | array_flow.rb:925:5:925:5 | [post] a [element 5] | array_flow.rb:931:10:931:10 | a [element 5] | provenance | | | array_flow.rb:925:5:925:5 | a [element 2] | array_flow.rb:925:5:925:5 | [post] a [element 5] | provenance | | @@ -1016,11 +1130,14 @@ edges | array_flow.rb:928:10:928:10 | a [element 2] | array_flow.rb:928:10:928:13 | ...[...] | provenance | | | array_flow.rb:931:10:931:10 | a [element 5] | array_flow.rb:931:10:931:13 | ...[...] | provenance | | | array_flow.rb:935:5:935:5 | a [element 2] | array_flow.rb:938:9:938:9 | a [element 2] | provenance | | -| array_flow.rb:935:16:935:27 | call to source | array_flow.rb:935:5:935:5 | a [element 2] | provenance | | +| array_flow.rb:935:9:935:28 | call to [] [element 2] | array_flow.rb:935:5:935:5 | a [element 2] | provenance | | +| array_flow.rb:935:16:935:27 | call to source | array_flow.rb:935:9:935:28 | call to [] [element 2] | provenance | | | array_flow.rb:936:5:936:5 | b [element 1] | array_flow.rb:938:19:938:19 | b [element 1] | provenance | | -| array_flow.rb:936:13:936:24 | call to source | array_flow.rb:936:5:936:5 | b [element 1] | provenance | | +| array_flow.rb:936:9:936:28 | call to [] [element 1] | array_flow.rb:936:5:936:5 | b [element 1] | provenance | | +| array_flow.rb:936:13:936:24 | call to source | array_flow.rb:936:9:936:28 | call to [] [element 1] | provenance | | | array_flow.rb:937:5:937:5 | c [element 0] | array_flow.rb:938:22:938:22 | c [element 0] | provenance | | -| array_flow.rb:937:10:937:21 | call to source | array_flow.rb:937:5:937:5 | c [element 0] | provenance | | +| array_flow.rb:937:9:937:28 | call to [] [element 0] | array_flow.rb:937:5:937:5 | c [element 0] | provenance | | +| array_flow.rb:937:10:937:21 | call to source | array_flow.rb:937:9:937:28 | call to [] [element 0] | provenance | | | array_flow.rb:938:5:938:5 | d [element, element] | array_flow.rb:939:10:939:10 | d [element, element] | provenance | | | array_flow.rb:938:5:938:5 | d [element, element] | array_flow.rb:940:10:940:10 | d [element, element] | provenance | | | array_flow.rb:938:9:938:9 | a [element 2] | array_flow.rb:938:9:938:22 | call to product [element, element] | provenance | | @@ -1033,7 +1150,8 @@ edges | array_flow.rb:940:10:940:13 | ...[...] [element] | array_flow.rb:940:10:940:16 | ...[...] | provenance | | | array_flow.rb:944:5:944:5 | a [element 0] | array_flow.rb:945:9:945:9 | a [element 0] | provenance | | | array_flow.rb:944:5:944:5 | a [element 0] | array_flow.rb:946:10:946:10 | a [element 0] | provenance | | -| array_flow.rb:944:10:944:21 | call to source | array_flow.rb:944:5:944:5 | a [element 0] | provenance | | +| array_flow.rb:944:9:944:25 | call to [] [element 0] | array_flow.rb:944:5:944:5 | a [element 0] | provenance | | +| array_flow.rb:944:10:944:21 | call to source | array_flow.rb:944:9:944:25 | call to [] [element 0] | provenance | | | array_flow.rb:945:5:945:5 | b [element 0] | array_flow.rb:948:10:948:10 | b [element 0] | provenance | | | array_flow.rb:945:5:945:5 | b [element] | array_flow.rb:948:10:948:10 | b [element] | provenance | | | array_flow.rb:945:5:945:5 | b [element] | array_flow.rb:949:10:949:10 | b [element] | provenance | | @@ -1053,10 +1171,12 @@ edges | array_flow.rb:948:10:948:10 | b [element] | array_flow.rb:948:10:948:13 | ...[...] | provenance | | | array_flow.rb:949:10:949:10 | b [element] | array_flow.rb:949:10:949:13 | ...[...] | provenance | | | array_flow.rb:955:5:955:5 | c [element 0] | array_flow.rb:956:16:956:16 | c [element 0] | provenance | | -| array_flow.rb:955:10:955:19 | call to source | array_flow.rb:955:5:955:5 | c [element 0] | provenance | | +| array_flow.rb:955:9:955:25 | call to [] [element 0] | array_flow.rb:955:5:955:5 | c [element 0] | provenance | | +| array_flow.rb:955:10:955:19 | call to source | array_flow.rb:955:9:955:25 | call to [] [element 0] | provenance | | | array_flow.rb:956:5:956:5 | d [element 2, element 0] | array_flow.rb:957:10:957:10 | d [element 2, element 0] | provenance | | | array_flow.rb:956:5:956:5 | d [element 2, element 0] | array_flow.rb:958:10:958:10 | d [element 2, element 0] | provenance | | -| array_flow.rb:956:16:956:16 | c [element 0] | array_flow.rb:956:5:956:5 | d [element 2, element 0] | provenance | | +| array_flow.rb:956:9:956:17 | call to [] [element 2, element 0] | array_flow.rb:956:5:956:5 | d [element 2, element 0] | provenance | | +| array_flow.rb:956:16:956:16 | c [element 0] | array_flow.rb:956:9:956:17 | call to [] [element 2, element 0] | provenance | | | array_flow.rb:957:10:957:10 | d [element 2, element 0] | array_flow.rb:957:10:957:22 | call to rassoc [element 0] | provenance | | | array_flow.rb:957:10:957:22 | call to rassoc [element 0] | array_flow.rb:957:10:957:25 | ...[...] | provenance | | | array_flow.rb:958:10:958:10 | d [element 2, element 0] | array_flow.rb:958:10:958:22 | call to rassoc [element 0] | provenance | | @@ -1065,8 +1185,10 @@ edges | array_flow.rb:962:5:962:5 | a [element 0] | array_flow.rb:968:9:968:9 | a [element 0] | provenance | | | array_flow.rb:962:5:962:5 | a [element 2] | array_flow.rb:963:9:963:9 | a [element 2] | provenance | | | array_flow.rb:962:5:962:5 | a [element 2] | array_flow.rb:968:9:968:9 | a [element 2] | provenance | | -| array_flow.rb:962:10:962:21 | call to source | array_flow.rb:962:5:962:5 | a [element 0] | provenance | | -| array_flow.rb:962:27:962:38 | call to source | array_flow.rb:962:5:962:5 | a [element 2] | provenance | | +| array_flow.rb:962:9:962:39 | call to [] [element 0] | array_flow.rb:962:5:962:5 | a [element 0] | provenance | | +| array_flow.rb:962:9:962:39 | call to [] [element 2] | array_flow.rb:962:5:962:5 | a [element 2] | provenance | | +| array_flow.rb:962:10:962:21 | call to source | array_flow.rb:962:9:962:39 | call to [] [element 0] | provenance | | +| array_flow.rb:962:27:962:38 | call to source | array_flow.rb:962:9:962:39 | call to [] [element 2] | provenance | | | array_flow.rb:963:9:963:9 | a [element 0] | array_flow.rb:963:22:963:22 | x | provenance | | | array_flow.rb:963:9:963:9 | a [element 2] | array_flow.rb:963:25:963:25 | y | provenance | | | array_flow.rb:963:22:963:22 | x | array_flow.rb:964:14:964:14 | x | provenance | | @@ -1075,7 +1197,8 @@ edges | array_flow.rb:968:9:968:9 | a [element 2] | array_flow.rb:968:28:968:28 | y | provenance | | | array_flow.rb:968:28:968:28 | y | array_flow.rb:970:14:970:14 | y | provenance | | | array_flow.rb:976:5:976:5 | a [element 2] | array_flow.rb:977:9:977:9 | a [element 2] | provenance | | -| array_flow.rb:976:16:976:25 | call to source | array_flow.rb:976:5:976:5 | a [element 2] | provenance | | +| array_flow.rb:976:9:976:26 | call to [] [element 2] | array_flow.rb:976:5:976:5 | a [element 2] | provenance | | +| array_flow.rb:976:16:976:25 | call to source | array_flow.rb:976:9:976:26 | call to [] [element 2] | provenance | | | array_flow.rb:977:5:977:5 | b [element] | array_flow.rb:981:10:981:10 | b [element] | provenance | | | array_flow.rb:977:9:977:9 | a [element 2] | array_flow.rb:977:9:980:7 | call to reject [element] | provenance | | | array_flow.rb:977:9:977:9 | a [element 2] | array_flow.rb:977:22:977:22 | x | provenance | | @@ -1083,7 +1206,8 @@ edges | array_flow.rb:977:22:977:22 | x | array_flow.rb:978:14:978:14 | x | provenance | | | array_flow.rb:981:10:981:10 | b [element] | array_flow.rb:981:10:981:13 | ...[...] | provenance | | | array_flow.rb:985:5:985:5 | a [element 2] | array_flow.rb:986:9:986:9 | a [element 2] | provenance | | -| array_flow.rb:985:16:985:25 | call to source | array_flow.rb:985:5:985:5 | a [element 2] | provenance | | +| array_flow.rb:985:9:985:26 | call to [] [element 2] | array_flow.rb:985:5:985:5 | a [element 2] | provenance | | +| array_flow.rb:985:16:985:25 | call to source | array_flow.rb:985:9:985:26 | call to [] [element 2] | provenance | | | array_flow.rb:986:5:986:5 | b [element] | array_flow.rb:991:10:991:10 | b [element] | provenance | | | array_flow.rb:986:9:986:9 | [post] a [element] | array_flow.rb:990:10:990:10 | a [element] | provenance | | | array_flow.rb:986:9:986:9 | a [element 2] | array_flow.rb:986:9:986:9 | [post] a [element] | provenance | | @@ -1094,7 +1218,8 @@ edges | array_flow.rb:990:10:990:10 | a [element] | array_flow.rb:990:10:990:13 | ...[...] | provenance | | | array_flow.rb:991:10:991:10 | b [element] | array_flow.rb:991:10:991:13 | ...[...] | provenance | | | array_flow.rb:995:5:995:5 | a [element 2] | array_flow.rb:996:9:996:9 | a [element 2] | provenance | | -| array_flow.rb:995:16:995:25 | call to source | array_flow.rb:995:5:995:5 | a [element 2] | provenance | | +| array_flow.rb:995:9:995:26 | call to [] [element 2] | array_flow.rb:995:5:995:5 | a [element 2] | provenance | | +| array_flow.rb:995:16:995:25 | call to source | array_flow.rb:995:9:995:26 | call to [] [element 2] | provenance | | | array_flow.rb:996:5:996:5 | b [element 2] | array_flow.rb:1001:10:1001:10 | b [element 2] | provenance | | | array_flow.rb:996:9:996:9 | a [element 2] | array_flow.rb:996:9:999:7 | call to repeated_combination [element 2] | provenance | | | array_flow.rb:996:9:996:9 | a [element 2] | array_flow.rb:996:39:996:39 | x [element] | provenance | | @@ -1105,7 +1230,8 @@ edges | array_flow.rb:998:14:998:14 | x [element] | array_flow.rb:998:14:998:17 | ...[...] | provenance | | | array_flow.rb:1001:10:1001:10 | b [element 2] | array_flow.rb:1001:10:1001:13 | ...[...] | provenance | | | array_flow.rb:1005:5:1005:5 | a [element 2] | array_flow.rb:1006:9:1006:9 | a [element 2] | provenance | | -| array_flow.rb:1005:16:1005:25 | call to source | array_flow.rb:1005:5:1005:5 | a [element 2] | provenance | | +| array_flow.rb:1005:9:1005:26 | call to [] [element 2] | array_flow.rb:1005:5:1005:5 | a [element 2] | provenance | | +| array_flow.rb:1005:16:1005:25 | call to source | array_flow.rb:1005:9:1005:26 | call to [] [element 2] | provenance | | | array_flow.rb:1006:5:1006:5 | b [element 2] | array_flow.rb:1011:10:1011:10 | b [element 2] | provenance | | | array_flow.rb:1006:9:1006:9 | a [element 2] | array_flow.rb:1006:9:1009:7 | call to repeated_permutation [element 2] | provenance | | | array_flow.rb:1006:9:1006:9 | a [element 2] | array_flow.rb:1006:39:1006:39 | x [element] | provenance | | @@ -1118,16 +1244,19 @@ edges | array_flow.rb:1017:5:1017:5 | b [element 0] | array_flow.rb:1019:10:1019:10 | b [element 0] | provenance | | | array_flow.rb:1017:9:1017:9 | [post] a [element 0] | array_flow.rb:1018:10:1018:10 | a [element 0] | provenance | | | array_flow.rb:1017:9:1017:33 | call to replace [element 0] | array_flow.rb:1017:5:1017:5 | b [element 0] | provenance | | -| array_flow.rb:1017:20:1017:31 | call to source | array_flow.rb:1017:9:1017:9 | [post] a [element 0] | provenance | | -| array_flow.rb:1017:20:1017:31 | call to source | array_flow.rb:1017:9:1017:33 | call to replace [element 0] | provenance | | +| array_flow.rb:1017:19:1017:32 | call to [] [element 0] | array_flow.rb:1017:9:1017:9 | [post] a [element 0] | provenance | | +| array_flow.rb:1017:19:1017:32 | call to [] [element 0] | array_flow.rb:1017:9:1017:33 | call to replace [element 0] | provenance | | +| array_flow.rb:1017:20:1017:31 | call to source | array_flow.rb:1017:19:1017:32 | call to [] [element 0] | provenance | | | array_flow.rb:1018:10:1018:10 | a [element 0] | array_flow.rb:1018:10:1018:13 | ...[...] | provenance | | | array_flow.rb:1019:10:1019:10 | b [element 0] | array_flow.rb:1019:10:1019:13 | ...[...] | provenance | | | array_flow.rb:1023:5:1023:5 | a [element 2] | array_flow.rb:1024:9:1024:9 | a [element 2] | provenance | | | array_flow.rb:1023:5:1023:5 | a [element 2] | array_flow.rb:1029:10:1029:10 | a [element 2] | provenance | | | array_flow.rb:1023:5:1023:5 | a [element 3] | array_flow.rb:1024:9:1024:9 | a [element 3] | provenance | | | array_flow.rb:1023:5:1023:5 | a [element 3] | array_flow.rb:1030:10:1030:10 | a [element 3] | provenance | | -| array_flow.rb:1023:16:1023:28 | call to source | array_flow.rb:1023:5:1023:5 | a [element 2] | provenance | | -| array_flow.rb:1023:31:1023:43 | call to source | array_flow.rb:1023:5:1023:5 | a [element 3] | provenance | | +| array_flow.rb:1023:9:1023:44 | call to [] [element 2] | array_flow.rb:1023:5:1023:5 | a [element 2] | provenance | | +| array_flow.rb:1023:9:1023:44 | call to [] [element 3] | array_flow.rb:1023:5:1023:5 | a [element 3] | provenance | | +| array_flow.rb:1023:16:1023:28 | call to source | array_flow.rb:1023:9:1023:44 | call to [] [element 2] | provenance | | +| array_flow.rb:1023:31:1023:43 | call to source | array_flow.rb:1023:9:1023:44 | call to [] [element 3] | provenance | | | array_flow.rb:1024:5:1024:5 | b [element] | array_flow.rb:1025:10:1025:10 | b [element] | provenance | | | array_flow.rb:1024:5:1024:5 | b [element] | array_flow.rb:1026:10:1026:10 | b [element] | provenance | | | array_flow.rb:1024:5:1024:5 | b [element] | array_flow.rb:1027:10:1027:10 | b [element] | provenance | | @@ -1143,8 +1272,10 @@ edges | array_flow.rb:1034:5:1034:5 | a [element 2] | array_flow.rb:1040:10:1040:10 | a [element 2] | provenance | | | array_flow.rb:1034:5:1034:5 | a [element 3] | array_flow.rb:1035:9:1035:9 | a [element 3] | provenance | | | array_flow.rb:1034:5:1034:5 | a [element 3] | array_flow.rb:1041:10:1041:10 | a [element 3] | provenance | | -| array_flow.rb:1034:16:1034:28 | call to source | array_flow.rb:1034:5:1034:5 | a [element 2] | provenance | | -| array_flow.rb:1034:31:1034:43 | call to source | array_flow.rb:1034:5:1034:5 | a [element 3] | provenance | | +| array_flow.rb:1034:9:1034:44 | call to [] [element 2] | array_flow.rb:1034:5:1034:5 | a [element 2] | provenance | | +| array_flow.rb:1034:9:1034:44 | call to [] [element 3] | array_flow.rb:1034:5:1034:5 | a [element 3] | provenance | | +| array_flow.rb:1034:16:1034:28 | call to source | array_flow.rb:1034:9:1034:44 | call to [] [element 2] | provenance | | +| array_flow.rb:1034:31:1034:43 | call to source | array_flow.rb:1034:9:1034:44 | call to [] [element 3] | provenance | | | array_flow.rb:1035:5:1035:5 | b [element] | array_flow.rb:1036:10:1036:10 | b [element] | provenance | | | array_flow.rb:1035:5:1035:5 | b [element] | array_flow.rb:1037:10:1037:10 | b [element] | provenance | | | array_flow.rb:1035:5:1035:5 | b [element] | array_flow.rb:1038:10:1038:10 | b [element] | provenance | | @@ -1165,7 +1296,8 @@ edges | array_flow.rb:1041:10:1041:10 | a [element 3] | array_flow.rb:1041:10:1041:13 | ...[...] | provenance | | | array_flow.rb:1041:10:1041:10 | a [element] | array_flow.rb:1041:10:1041:13 | ...[...] | provenance | | | array_flow.rb:1045:5:1045:5 | a [element 2] | array_flow.rb:1046:9:1046:9 | a [element 2] | provenance | | -| array_flow.rb:1045:16:1045:26 | call to source | array_flow.rb:1045:5:1045:5 | a [element 2] | provenance | | +| array_flow.rb:1045:9:1045:27 | call to [] [element 2] | array_flow.rb:1045:5:1045:5 | a [element 2] | provenance | | +| array_flow.rb:1045:16:1045:26 | call to source | array_flow.rb:1045:9:1045:27 | call to [] [element 2] | provenance | | | array_flow.rb:1046:5:1046:5 | b [element 2] | array_flow.rb:1049:10:1049:10 | b [element 2] | provenance | | | array_flow.rb:1046:9:1046:9 | a [element 2] | array_flow.rb:1046:9:1048:7 | call to reverse_each [element 2] | provenance | | | array_flow.rb:1046:9:1046:9 | a [element 2] | array_flow.rb:1046:28:1046:28 | x | provenance | | @@ -1173,7 +1305,8 @@ edges | array_flow.rb:1046:28:1046:28 | x | array_flow.rb:1047:14:1047:14 | x | provenance | | | array_flow.rb:1049:10:1049:10 | b [element 2] | array_flow.rb:1049:10:1049:13 | ...[...] | provenance | | | array_flow.rb:1053:5:1053:5 | a [element 2] | array_flow.rb:1054:5:1054:5 | a [element 2] | provenance | | -| array_flow.rb:1053:16:1053:26 | call to source | array_flow.rb:1053:5:1053:5 | a [element 2] | provenance | | +| array_flow.rb:1053:9:1053:27 | call to [] [element 2] | array_flow.rb:1053:5:1053:5 | a [element 2] | provenance | | +| array_flow.rb:1053:16:1053:26 | call to source | array_flow.rb:1053:9:1053:27 | call to [] [element 2] | provenance | | | array_flow.rb:1054:5:1054:5 | a [element 2] | array_flow.rb:1054:18:1054:18 | x | provenance | | | array_flow.rb:1054:18:1054:18 | x | array_flow.rb:1055:14:1055:14 | x | provenance | | | array_flow.rb:1063:5:1063:5 | a [element 0] | array_flow.rb:1065:9:1065:9 | a [element 0] | provenance | | @@ -1188,9 +1321,12 @@ edges | array_flow.rb:1063:5:1063:5 | a [element 3] | array_flow.rb:1071:9:1071:9 | a [element 3] | provenance | | | array_flow.rb:1063:5:1063:5 | a [element 3] | array_flow.rb:1077:9:1077:9 | a [element 3] | provenance | | | array_flow.rb:1063:5:1063:5 | a [element 3] | array_flow.rb:1083:9:1083:9 | a [element 3] | provenance | | -| array_flow.rb:1063:10:1063:22 | call to source | array_flow.rb:1063:5:1063:5 | a [element 0] | provenance | | -| array_flow.rb:1063:28:1063:40 | call to source | array_flow.rb:1063:5:1063:5 | a [element 2] | provenance | | -| array_flow.rb:1063:43:1063:55 | call to source | array_flow.rb:1063:5:1063:5 | a [element 3] | provenance | | +| array_flow.rb:1063:9:1063:56 | call to [] [element 0] | array_flow.rb:1063:5:1063:5 | a [element 0] | provenance | | +| array_flow.rb:1063:9:1063:56 | call to [] [element 2] | array_flow.rb:1063:5:1063:5 | a [element 2] | provenance | | +| array_flow.rb:1063:9:1063:56 | call to [] [element 3] | array_flow.rb:1063:5:1063:5 | a [element 3] | provenance | | +| array_flow.rb:1063:10:1063:22 | call to source | array_flow.rb:1063:9:1063:56 | call to [] [element 0] | provenance | | +| array_flow.rb:1063:28:1063:40 | call to source | array_flow.rb:1063:9:1063:56 | call to [] [element 2] | provenance | | +| array_flow.rb:1063:43:1063:55 | call to source | array_flow.rb:1063:9:1063:56 | call to [] [element 3] | provenance | | | array_flow.rb:1065:5:1065:5 | b [element 1] | array_flow.rb:1067:10:1067:10 | b [element 1] | provenance | | | array_flow.rb:1065:5:1065:5 | b [element 2] | array_flow.rb:1068:10:1068:10 | b [element 2] | provenance | | | array_flow.rb:1065:5:1065:5 | b [element] | array_flow.rb:1066:10:1066:10 | b [element] | provenance | | @@ -1254,9 +1390,12 @@ edges | array_flow.rb:1095:5:1095:5 | a [element 0] | array_flow.rb:1096:9:1096:9 | a [element 0] | provenance | | | array_flow.rb:1095:5:1095:5 | a [element 2] | array_flow.rb:1096:9:1096:9 | a [element 2] | provenance | | | array_flow.rb:1095:5:1095:5 | a [element 3] | array_flow.rb:1096:9:1096:9 | a [element 3] | provenance | | -| array_flow.rb:1095:10:1095:22 | call to source | array_flow.rb:1095:5:1095:5 | a [element 0] | provenance | | -| array_flow.rb:1095:28:1095:40 | call to source | array_flow.rb:1095:5:1095:5 | a [element 2] | provenance | | -| array_flow.rb:1095:43:1095:55 | call to source | array_flow.rb:1095:5:1095:5 | a [element 3] | provenance | | +| array_flow.rb:1095:9:1095:56 | call to [] [element 0] | array_flow.rb:1095:5:1095:5 | a [element 0] | provenance | | +| array_flow.rb:1095:9:1095:56 | call to [] [element 2] | array_flow.rb:1095:5:1095:5 | a [element 2] | provenance | | +| array_flow.rb:1095:9:1095:56 | call to [] [element 3] | array_flow.rb:1095:5:1095:5 | a [element 3] | provenance | | +| array_flow.rb:1095:10:1095:22 | call to source | array_flow.rb:1095:9:1095:56 | call to [] [element 0] | provenance | | +| array_flow.rb:1095:28:1095:40 | call to source | array_flow.rb:1095:9:1095:56 | call to [] [element 2] | provenance | | +| array_flow.rb:1095:43:1095:55 | call to source | array_flow.rb:1095:9:1095:56 | call to [] [element 3] | provenance | | | array_flow.rb:1096:5:1096:5 | b [element 1] | array_flow.rb:1102:10:1102:10 | b [element 1] | provenance | | | array_flow.rb:1096:5:1096:5 | b [element 2] | array_flow.rb:1103:10:1103:10 | b [element 2] | provenance | | | array_flow.rb:1096:5:1096:5 | b [element] | array_flow.rb:1101:10:1101:10 | b [element] | provenance | | @@ -1293,9 +1432,12 @@ edges | array_flow.rb:1106:5:1106:5 | a [element 0] | array_flow.rb:1107:9:1107:9 | a [element 0] | provenance | | | array_flow.rb:1106:5:1106:5 | a [element 2] | array_flow.rb:1107:9:1107:9 | a [element 2] | provenance | | | array_flow.rb:1106:5:1106:5 | a [element 3] | array_flow.rb:1107:9:1107:9 | a [element 3] | provenance | | -| array_flow.rb:1106:10:1106:22 | call to source | array_flow.rb:1106:5:1106:5 | a [element 0] | provenance | | -| array_flow.rb:1106:28:1106:40 | call to source | array_flow.rb:1106:5:1106:5 | a [element 2] | provenance | | -| array_flow.rb:1106:43:1106:55 | call to source | array_flow.rb:1106:5:1106:5 | a [element 3] | provenance | | +| array_flow.rb:1106:9:1106:56 | call to [] [element 0] | array_flow.rb:1106:5:1106:5 | a [element 0] | provenance | | +| array_flow.rb:1106:9:1106:56 | call to [] [element 2] | array_flow.rb:1106:5:1106:5 | a [element 2] | provenance | | +| array_flow.rb:1106:9:1106:56 | call to [] [element 3] | array_flow.rb:1106:5:1106:5 | a [element 3] | provenance | | +| array_flow.rb:1106:10:1106:22 | call to source | array_flow.rb:1106:9:1106:56 | call to [] [element 0] | provenance | | +| array_flow.rb:1106:28:1106:40 | call to source | array_flow.rb:1106:9:1106:56 | call to [] [element 2] | provenance | | +| array_flow.rb:1106:43:1106:55 | call to source | array_flow.rb:1106:9:1106:56 | call to [] [element 3] | provenance | | | array_flow.rb:1107:5:1107:5 | b [element 0] | array_flow.rb:1112:10:1112:10 | b [element 0] | provenance | | | array_flow.rb:1107:5:1107:5 | b [element 1] | array_flow.rb:1113:10:1113:10 | b [element 1] | provenance | | | array_flow.rb:1107:5:1107:5 | b [element] | array_flow.rb:1112:10:1112:10 | b [element] | provenance | | @@ -1332,9 +1474,12 @@ edges | array_flow.rb:1117:5:1117:5 | a [element 0] | array_flow.rb:1118:9:1118:9 | a [element 0] | provenance | | | array_flow.rb:1117:5:1117:5 | a [element 2] | array_flow.rb:1118:9:1118:9 | a [element 2] | provenance | | | array_flow.rb:1117:5:1117:5 | a [element 3] | array_flow.rb:1118:9:1118:9 | a [element 3] | provenance | | -| array_flow.rb:1117:10:1117:22 | call to source | array_flow.rb:1117:5:1117:5 | a [element 0] | provenance | | -| array_flow.rb:1117:28:1117:40 | call to source | array_flow.rb:1117:5:1117:5 | a [element 2] | provenance | | -| array_flow.rb:1117:43:1117:55 | call to source | array_flow.rb:1117:5:1117:5 | a [element 3] | provenance | | +| array_flow.rb:1117:9:1117:56 | call to [] [element 0] | array_flow.rb:1117:5:1117:5 | a [element 0] | provenance | | +| array_flow.rb:1117:9:1117:56 | call to [] [element 2] | array_flow.rb:1117:5:1117:5 | a [element 2] | provenance | | +| array_flow.rb:1117:9:1117:56 | call to [] [element 3] | array_flow.rb:1117:5:1117:5 | a [element 3] | provenance | | +| array_flow.rb:1117:10:1117:22 | call to source | array_flow.rb:1117:9:1117:56 | call to [] [element 0] | provenance | | +| array_flow.rb:1117:28:1117:40 | call to source | array_flow.rb:1117:9:1117:56 | call to [] [element 2] | provenance | | +| array_flow.rb:1117:43:1117:55 | call to source | array_flow.rb:1117:9:1117:56 | call to [] [element 3] | provenance | | | array_flow.rb:1118:5:1118:5 | b [element 0] | array_flow.rb:1123:10:1123:10 | b [element 0] | provenance | | | array_flow.rb:1118:5:1118:5 | b [element 2] | array_flow.rb:1125:10:1125:10 | b [element 2] | provenance | | | array_flow.rb:1118:5:1118:5 | b [element 3] | array_flow.rb:1126:10:1126:10 | b [element 3] | provenance | | @@ -1359,9 +1504,12 @@ edges | array_flow.rb:1128:5:1128:5 | a [element 0] | array_flow.rb:1129:9:1129:9 | a [element 0] | provenance | | | array_flow.rb:1128:5:1128:5 | a [element 2] | array_flow.rb:1129:9:1129:9 | a [element 2] | provenance | | | array_flow.rb:1128:5:1128:5 | a [element 3] | array_flow.rb:1129:9:1129:9 | a [element 3] | provenance | | -| array_flow.rb:1128:10:1128:22 | call to source | array_flow.rb:1128:5:1128:5 | a [element 0] | provenance | | -| array_flow.rb:1128:28:1128:40 | call to source | array_flow.rb:1128:5:1128:5 | a [element 2] | provenance | | -| array_flow.rb:1128:43:1128:55 | call to source | array_flow.rb:1128:5:1128:5 | a [element 3] | provenance | | +| array_flow.rb:1128:9:1128:56 | call to [] [element 0] | array_flow.rb:1128:5:1128:5 | a [element 0] | provenance | | +| array_flow.rb:1128:9:1128:56 | call to [] [element 2] | array_flow.rb:1128:5:1128:5 | a [element 2] | provenance | | +| array_flow.rb:1128:9:1128:56 | call to [] [element 3] | array_flow.rb:1128:5:1128:5 | a [element 3] | provenance | | +| array_flow.rb:1128:10:1128:22 | call to source | array_flow.rb:1128:9:1128:56 | call to [] [element 0] | provenance | | +| array_flow.rb:1128:28:1128:40 | call to source | array_flow.rb:1128:9:1128:56 | call to [] [element 2] | provenance | | +| array_flow.rb:1128:43:1128:55 | call to source | array_flow.rb:1128:9:1128:56 | call to [] [element 3] | provenance | | | array_flow.rb:1129:5:1129:5 | b [element] | array_flow.rb:1134:10:1134:10 | b [element] | provenance | | | array_flow.rb:1129:5:1129:5 | b [element] | array_flow.rb:1135:10:1135:10 | b [element] | provenance | | | array_flow.rb:1129:5:1129:5 | b [element] | array_flow.rb:1136:10:1136:10 | b [element] | provenance | | @@ -1386,7 +1534,8 @@ edges | array_flow.rb:1136:10:1136:10 | b [element] | array_flow.rb:1136:10:1136:13 | ...[...] | provenance | | | array_flow.rb:1137:10:1137:10 | b [element] | array_flow.rb:1137:10:1137:13 | ...[...] | provenance | | | array_flow.rb:1141:5:1141:5 | a [element 3] | array_flow.rb:1142:9:1142:9 | a [element 3] | provenance | | -| array_flow.rb:1141:19:1141:29 | call to source | array_flow.rb:1141:5:1141:5 | a [element 3] | provenance | | +| array_flow.rb:1141:9:1141:30 | call to [] [element 3] | array_flow.rb:1141:5:1141:5 | a [element 3] | provenance | | +| array_flow.rb:1141:19:1141:29 | call to source | array_flow.rb:1141:9:1141:30 | call to [] [element 3] | provenance | | | array_flow.rb:1142:5:1142:5 | b [element] | array_flow.rb:1145:10:1145:10 | b [element] | provenance | | | array_flow.rb:1142:9:1142:9 | a [element 3] | array_flow.rb:1142:9:1144:7 | call to select [element] | provenance | | | array_flow.rb:1142:9:1142:9 | a [element 3] | array_flow.rb:1142:22:1142:22 | x | provenance | | @@ -1394,7 +1543,8 @@ edges | array_flow.rb:1142:22:1142:22 | x | array_flow.rb:1143:14:1143:14 | x | provenance | | | array_flow.rb:1145:10:1145:10 | b [element] | array_flow.rb:1145:10:1145:13 | ...[...] | provenance | | | array_flow.rb:1149:5:1149:5 | a [element 2] | array_flow.rb:1150:9:1150:9 | a [element 2] | provenance | | -| array_flow.rb:1149:16:1149:26 | call to source | array_flow.rb:1149:5:1149:5 | a [element 2] | provenance | | +| array_flow.rb:1149:9:1149:27 | call to [] [element 2] | array_flow.rb:1149:5:1149:5 | a [element 2] | provenance | | +| array_flow.rb:1149:16:1149:26 | call to source | array_flow.rb:1149:9:1149:27 | call to [] [element 2] | provenance | | | array_flow.rb:1150:5:1150:5 | b [element] | array_flow.rb:1155:10:1155:10 | b [element] | provenance | | | array_flow.rb:1150:9:1150:9 | [post] a [element] | array_flow.rb:1154:10:1154:10 | a [element] | provenance | | | array_flow.rb:1150:9:1150:9 | a [element 2] | array_flow.rb:1150:9:1150:9 | [post] a [element] | provenance | | @@ -1406,8 +1556,10 @@ edges | array_flow.rb:1155:10:1155:10 | b [element] | array_flow.rb:1155:10:1155:13 | ...[...] | provenance | | | array_flow.rb:1159:5:1159:5 | a [element 0] | array_flow.rb:1160:9:1160:9 | a [element 0] | provenance | | | array_flow.rb:1159:5:1159:5 | a [element 2] | array_flow.rb:1160:9:1160:9 | a [element 2] | provenance | | -| array_flow.rb:1159:10:1159:22 | call to source | array_flow.rb:1159:5:1159:5 | a [element 0] | provenance | | -| array_flow.rb:1159:28:1159:40 | call to source | array_flow.rb:1159:5:1159:5 | a [element 2] | provenance | | +| array_flow.rb:1159:9:1159:41 | call to [] [element 0] | array_flow.rb:1159:5:1159:5 | a [element 0] | provenance | | +| array_flow.rb:1159:9:1159:41 | call to [] [element 2] | array_flow.rb:1159:5:1159:5 | a [element 2] | provenance | | +| array_flow.rb:1159:10:1159:22 | call to source | array_flow.rb:1159:9:1159:41 | call to [] [element 0] | provenance | | +| array_flow.rb:1159:28:1159:40 | call to source | array_flow.rb:1159:9:1159:41 | call to [] [element 2] | provenance | | | array_flow.rb:1160:5:1160:5 | b | array_flow.rb:1161:10:1161:10 | b | provenance | | | array_flow.rb:1160:9:1160:9 | [post] a [element 1] | array_flow.rb:1163:10:1163:10 | a [element 1] | provenance | | | array_flow.rb:1160:9:1160:9 | a [element 0] | array_flow.rb:1160:9:1160:15 | call to shift | provenance | | @@ -1416,8 +1568,10 @@ edges | array_flow.rb:1163:10:1163:10 | a [element 1] | array_flow.rb:1163:10:1163:13 | ...[...] | provenance | | | array_flow.rb:1166:5:1166:5 | a [element 0] | array_flow.rb:1167:9:1167:9 | a [element 0] | provenance | | | array_flow.rb:1166:5:1166:5 | a [element 2] | array_flow.rb:1167:9:1167:9 | a [element 2] | provenance | | -| array_flow.rb:1166:10:1166:22 | call to source | array_flow.rb:1166:5:1166:5 | a [element 0] | provenance | | -| array_flow.rb:1166:28:1166:40 | call to source | array_flow.rb:1166:5:1166:5 | a [element 2] | provenance | | +| array_flow.rb:1166:9:1166:41 | call to [] [element 0] | array_flow.rb:1166:5:1166:5 | a [element 0] | provenance | | +| array_flow.rb:1166:9:1166:41 | call to [] [element 2] | array_flow.rb:1166:5:1166:5 | a [element 2] | provenance | | +| array_flow.rb:1166:10:1166:22 | call to source | array_flow.rb:1166:9:1166:41 | call to [] [element 0] | provenance | | +| array_flow.rb:1166:28:1166:40 | call to source | array_flow.rb:1166:9:1166:41 | call to [] [element 2] | provenance | | | array_flow.rb:1167:5:1167:5 | b [element 0] | array_flow.rb:1168:10:1168:10 | b [element 0] | provenance | | | array_flow.rb:1167:9:1167:9 | [post] a [element 0] | array_flow.rb:1170:10:1170:10 | a [element 0] | provenance | | | array_flow.rb:1167:9:1167:9 | a [element 0] | array_flow.rb:1167:9:1167:18 | call to shift [element 0] | provenance | | @@ -1429,8 +1583,10 @@ edges | array_flow.rb:1174:5:1174:5 | a [element 0] | array_flow.rb:1178:10:1178:10 | a [element 0] | provenance | | | array_flow.rb:1174:5:1174:5 | a [element 2] | array_flow.rb:1175:9:1175:9 | a [element 2] | provenance | | | array_flow.rb:1174:5:1174:5 | a [element 2] | array_flow.rb:1180:10:1180:10 | a [element 2] | provenance | | -| array_flow.rb:1174:10:1174:22 | call to source | array_flow.rb:1174:5:1174:5 | a [element 0] | provenance | | -| array_flow.rb:1174:28:1174:40 | call to source | array_flow.rb:1174:5:1174:5 | a [element 2] | provenance | | +| array_flow.rb:1174:9:1174:41 | call to [] [element 0] | array_flow.rb:1174:5:1174:5 | a [element 0] | provenance | | +| array_flow.rb:1174:9:1174:41 | call to [] [element 2] | array_flow.rb:1174:5:1174:5 | a [element 2] | provenance | | +| array_flow.rb:1174:10:1174:22 | call to source | array_flow.rb:1174:9:1174:41 | call to [] [element 0] | provenance | | +| array_flow.rb:1174:28:1174:40 | call to source | array_flow.rb:1174:9:1174:41 | call to [] [element 2] | provenance | | | array_flow.rb:1175:5:1175:5 | b [element] | array_flow.rb:1176:10:1176:10 | b [element] | provenance | | | array_flow.rb:1175:5:1175:5 | b [element] | array_flow.rb:1177:10:1177:10 | b [element] | provenance | | | array_flow.rb:1175:9:1175:9 | [post] a [element] | array_flow.rb:1178:10:1178:10 | a [element] | provenance | | @@ -1450,7 +1606,8 @@ edges | array_flow.rb:1180:10:1180:10 | a [element] | array_flow.rb:1180:10:1180:13 | ...[...] | provenance | | | array_flow.rb:1184:5:1184:5 | a [element 2] | array_flow.rb:1185:9:1185:9 | a [element 2] | provenance | | | array_flow.rb:1184:5:1184:5 | a [element 2] | array_flow.rb:1188:10:1188:10 | a [element 2] | provenance | | -| array_flow.rb:1184:16:1184:26 | call to source | array_flow.rb:1184:5:1184:5 | a [element 2] | provenance | | +| array_flow.rb:1184:9:1184:27 | call to [] [element 2] | array_flow.rb:1184:5:1184:5 | a [element 2] | provenance | | +| array_flow.rb:1184:16:1184:26 | call to source | array_flow.rb:1184:9:1184:27 | call to [] [element 2] | provenance | | | array_flow.rb:1185:5:1185:5 | b [element] | array_flow.rb:1189:10:1189:10 | b [element] | provenance | | | array_flow.rb:1185:5:1185:5 | b [element] | array_flow.rb:1190:10:1190:10 | b [element] | provenance | | | array_flow.rb:1185:5:1185:5 | b [element] | array_flow.rb:1191:10:1191:10 | b [element] | provenance | | @@ -1462,7 +1619,8 @@ edges | array_flow.rb:1191:10:1191:10 | b [element] | array_flow.rb:1191:10:1191:13 | ...[...] | provenance | | | array_flow.rb:1195:5:1195:5 | a [element 2] | array_flow.rb:1196:9:1196:9 | a [element 2] | provenance | | | array_flow.rb:1195:5:1195:5 | a [element 2] | array_flow.rb:1199:10:1199:10 | a [element 2] | provenance | | -| array_flow.rb:1195:16:1195:26 | call to source | array_flow.rb:1195:5:1195:5 | a [element 2] | provenance | | +| array_flow.rb:1195:9:1195:27 | call to [] [element 2] | array_flow.rb:1195:5:1195:5 | a [element 2] | provenance | | +| array_flow.rb:1195:16:1195:26 | call to source | array_flow.rb:1195:9:1195:27 | call to [] [element 2] | provenance | | | array_flow.rb:1196:5:1196:5 | b [element] | array_flow.rb:1200:10:1200:10 | b [element] | provenance | | | array_flow.rb:1196:5:1196:5 | b [element] | array_flow.rb:1201:10:1201:10 | b [element] | provenance | | | array_flow.rb:1196:5:1196:5 | b [element] | array_flow.rb:1202:10:1202:10 | b [element] | provenance | | @@ -1497,8 +1655,10 @@ edges | array_flow.rb:1206:5:1206:5 | a [element 4] | array_flow.rb:1240:9:1240:9 | a [element 4] | provenance | | | array_flow.rb:1206:5:1206:5 | a [element 4] | array_flow.rb:1244:9:1244:9 | a [element 4] | provenance | | | array_flow.rb:1206:5:1206:5 | a [element 4] | array_flow.rb:1253:9:1253:9 | a [element 4] | provenance | | -| array_flow.rb:1206:16:1206:28 | call to source | array_flow.rb:1206:5:1206:5 | a [element 2] | provenance | | -| array_flow.rb:1206:34:1206:46 | call to source | array_flow.rb:1206:5:1206:5 | a [element 4] | provenance | | +| array_flow.rb:1206:9:1206:47 | call to [] [element 2] | array_flow.rb:1206:5:1206:5 | a [element 2] | provenance | | +| array_flow.rb:1206:9:1206:47 | call to [] [element 4] | array_flow.rb:1206:5:1206:5 | a [element 4] | provenance | | +| array_flow.rb:1206:16:1206:28 | call to source | array_flow.rb:1206:9:1206:47 | call to [] [element 2] | provenance | | +| array_flow.rb:1206:34:1206:46 | call to source | array_flow.rb:1206:9:1206:47 | call to [] [element 4] | provenance | | | array_flow.rb:1208:5:1208:5 | b | array_flow.rb:1209:10:1209:10 | b | provenance | | | array_flow.rb:1208:9:1208:9 | a [element 4] | array_flow.rb:1208:9:1208:17 | call to slice | provenance | | | array_flow.rb:1208:9:1208:17 | call to slice | array_flow.rb:1208:5:1208:5 | b | provenance | | @@ -1562,8 +1722,10 @@ edges | array_flow.rb:1256:10:1256:10 | b [element] | array_flow.rb:1256:10:1256:13 | ...[...] | provenance | | | array_flow.rb:1260:5:1260:5 | a [element 2] | array_flow.rb:1261:9:1261:9 | a [element 2] | provenance | | | array_flow.rb:1260:5:1260:5 | a [element 4] | array_flow.rb:1261:9:1261:9 | a [element 4] | provenance | | -| array_flow.rb:1260:16:1260:28 | call to source | array_flow.rb:1260:5:1260:5 | a [element 2] | provenance | | -| array_flow.rb:1260:34:1260:46 | call to source | array_flow.rb:1260:5:1260:5 | a [element 4] | provenance | | +| array_flow.rb:1260:9:1260:47 | call to [] [element 2] | array_flow.rb:1260:5:1260:5 | a [element 2] | provenance | | +| array_flow.rb:1260:9:1260:47 | call to [] [element 4] | array_flow.rb:1260:5:1260:5 | a [element 4] | provenance | | +| array_flow.rb:1260:16:1260:28 | call to source | array_flow.rb:1260:9:1260:47 | call to [] [element 2] | provenance | | +| array_flow.rb:1260:34:1260:46 | call to source | array_flow.rb:1260:9:1260:47 | call to [] [element 4] | provenance | | | array_flow.rb:1261:5:1261:5 | b | array_flow.rb:1262:10:1262:10 | b | provenance | | | array_flow.rb:1261:9:1261:9 | [post] a [element 3] | array_flow.rb:1266:10:1266:10 | a [element 3] | provenance | | | array_flow.rb:1261:9:1261:9 | a [element 2] | array_flow.rb:1261:9:1261:19 | call to slice! | provenance | | @@ -1572,8 +1734,10 @@ edges | array_flow.rb:1266:10:1266:10 | a [element 3] | array_flow.rb:1266:10:1266:13 | ...[...] | provenance | | | array_flow.rb:1268:5:1268:5 | a [element 2] | array_flow.rb:1269:9:1269:9 | a [element 2] | provenance | | | array_flow.rb:1268:5:1268:5 | a [element 4] | array_flow.rb:1269:9:1269:9 | a [element 4] | provenance | | -| array_flow.rb:1268:16:1268:28 | call to source | array_flow.rb:1268:5:1268:5 | a [element 2] | provenance | | -| array_flow.rb:1268:34:1268:46 | call to source | array_flow.rb:1268:5:1268:5 | a [element 4] | provenance | | +| array_flow.rb:1268:9:1268:47 | call to [] [element 2] | array_flow.rb:1268:5:1268:5 | a [element 2] | provenance | | +| array_flow.rb:1268:9:1268:47 | call to [] [element 4] | array_flow.rb:1268:5:1268:5 | a [element 4] | provenance | | +| array_flow.rb:1268:16:1268:28 | call to source | array_flow.rb:1268:9:1268:47 | call to [] [element 2] | provenance | | +| array_flow.rb:1268:34:1268:46 | call to source | array_flow.rb:1268:9:1268:47 | call to [] [element 4] | provenance | | | array_flow.rb:1269:5:1269:5 | b | array_flow.rb:1275:10:1275:10 | b | provenance | | | array_flow.rb:1269:5:1269:5 | b [element] | array_flow.rb:1277:10:1277:10 | b [element] | provenance | | | array_flow.rb:1269:9:1269:9 | [post] a [element] | array_flow.rb:1270:10:1270:10 | a [element] | provenance | | @@ -1595,8 +1759,10 @@ edges | array_flow.rb:1277:10:1277:10 | b [element] | array_flow.rb:1277:10:1277:13 | ...[...] | provenance | | | array_flow.rb:1279:5:1279:5 | a [element 2] | array_flow.rb:1280:9:1280:9 | a [element 2] | provenance | | | array_flow.rb:1279:5:1279:5 | a [element 4] | array_flow.rb:1280:9:1280:9 | a [element 4] | provenance | | -| array_flow.rb:1279:16:1279:28 | call to source | array_flow.rb:1279:5:1279:5 | a [element 2] | provenance | | -| array_flow.rb:1279:34:1279:46 | call to source | array_flow.rb:1279:5:1279:5 | a [element 4] | provenance | | +| array_flow.rb:1279:9:1279:47 | call to [] [element 2] | array_flow.rb:1279:5:1279:5 | a [element 2] | provenance | | +| array_flow.rb:1279:9:1279:47 | call to [] [element 4] | array_flow.rb:1279:5:1279:5 | a [element 4] | provenance | | +| array_flow.rb:1279:16:1279:28 | call to source | array_flow.rb:1279:9:1279:47 | call to [] [element 2] | provenance | | +| array_flow.rb:1279:34:1279:46 | call to source | array_flow.rb:1279:9:1279:47 | call to [] [element 4] | provenance | | | array_flow.rb:1280:5:1280:5 | b [element 0] | array_flow.rb:1281:10:1281:10 | b [element 0] | provenance | | | array_flow.rb:1280:5:1280:5 | b [element 2] | array_flow.rb:1283:10:1283:10 | b [element 2] | provenance | | | array_flow.rb:1280:9:1280:9 | a [element 2] | array_flow.rb:1280:9:1280:22 | call to slice! [element 0] | provenance | | @@ -1607,8 +1773,10 @@ edges | array_flow.rb:1283:10:1283:10 | b [element 2] | array_flow.rb:1283:10:1283:13 | ...[...] | provenance | | | array_flow.rb:1290:5:1290:5 | a [element 2] | array_flow.rb:1291:9:1291:9 | a [element 2] | provenance | | | array_flow.rb:1290:5:1290:5 | a [element 4] | array_flow.rb:1291:9:1291:9 | a [element 4] | provenance | | -| array_flow.rb:1290:16:1290:28 | call to source | array_flow.rb:1290:5:1290:5 | a [element 2] | provenance | | -| array_flow.rb:1290:34:1290:46 | call to source | array_flow.rb:1290:5:1290:5 | a [element 4] | provenance | | +| array_flow.rb:1290:9:1290:47 | call to [] [element 2] | array_flow.rb:1290:5:1290:5 | a [element 2] | provenance | | +| array_flow.rb:1290:9:1290:47 | call to [] [element 4] | array_flow.rb:1290:5:1290:5 | a [element 4] | provenance | | +| array_flow.rb:1290:16:1290:28 | call to source | array_flow.rb:1290:9:1290:47 | call to [] [element 2] | provenance | | +| array_flow.rb:1290:34:1290:46 | call to source | array_flow.rb:1290:9:1290:47 | call to [] [element 4] | provenance | | | array_flow.rb:1291:5:1291:5 | b [element 0] | array_flow.rb:1292:10:1292:10 | b [element 0] | provenance | | | array_flow.rb:1291:9:1291:9 | [post] a [element 2] | array_flow.rb:1297:10:1297:10 | a [element 2] | provenance | | | array_flow.rb:1291:9:1291:9 | a [element 2] | array_flow.rb:1291:9:1291:22 | call to slice! [element 0] | provenance | | @@ -1618,8 +1786,10 @@ edges | array_flow.rb:1297:10:1297:10 | a [element 2] | array_flow.rb:1297:10:1297:13 | ...[...] | provenance | | | array_flow.rb:1301:5:1301:5 | a [element 2] | array_flow.rb:1302:9:1302:9 | a [element 2] | provenance | | | array_flow.rb:1301:5:1301:5 | a [element 4] | array_flow.rb:1302:9:1302:9 | a [element 4] | provenance | | -| array_flow.rb:1301:16:1301:28 | call to source | array_flow.rb:1301:5:1301:5 | a [element 2] | provenance | | -| array_flow.rb:1301:34:1301:46 | call to source | array_flow.rb:1301:5:1301:5 | a [element 4] | provenance | | +| array_flow.rb:1301:9:1301:47 | call to [] [element 2] | array_flow.rb:1301:5:1301:5 | a [element 2] | provenance | | +| array_flow.rb:1301:9:1301:47 | call to [] [element 4] | array_flow.rb:1301:5:1301:5 | a [element 4] | provenance | | +| array_flow.rb:1301:16:1301:28 | call to source | array_flow.rb:1301:9:1301:47 | call to [] [element 2] | provenance | | +| array_flow.rb:1301:34:1301:46 | call to source | array_flow.rb:1301:9:1301:47 | call to [] [element 4] | provenance | | | array_flow.rb:1302:5:1302:5 | b [element 0] | array_flow.rb:1303:10:1303:10 | b [element 0] | provenance | | | array_flow.rb:1302:9:1302:9 | [post] a [element 2] | array_flow.rb:1308:10:1308:10 | a [element 2] | provenance | | | array_flow.rb:1302:9:1302:9 | a [element 2] | array_flow.rb:1302:9:1302:23 | call to slice! [element 0] | provenance | | @@ -1629,8 +1799,10 @@ edges | array_flow.rb:1308:10:1308:10 | a [element 2] | array_flow.rb:1308:10:1308:13 | ...[...] | provenance | | | array_flow.rb:1312:5:1312:5 | a [element 2] | array_flow.rb:1313:9:1313:9 | a [element 2] | provenance | | | array_flow.rb:1312:5:1312:5 | a [element 4] | array_flow.rb:1313:9:1313:9 | a [element 4] | provenance | | -| array_flow.rb:1312:16:1312:28 | call to source | array_flow.rb:1312:5:1312:5 | a [element 2] | provenance | | -| array_flow.rb:1312:34:1312:46 | call to source | array_flow.rb:1312:5:1312:5 | a [element 4] | provenance | | +| array_flow.rb:1312:9:1312:47 | call to [] [element 2] | array_flow.rb:1312:5:1312:5 | a [element 2] | provenance | | +| array_flow.rb:1312:9:1312:47 | call to [] [element 4] | array_flow.rb:1312:5:1312:5 | a [element 4] | provenance | | +| array_flow.rb:1312:16:1312:28 | call to source | array_flow.rb:1312:9:1312:47 | call to [] [element 2] | provenance | | +| array_flow.rb:1312:34:1312:46 | call to source | array_flow.rb:1312:9:1312:47 | call to [] [element 4] | provenance | | | array_flow.rb:1313:5:1313:5 | b [element] | array_flow.rb:1314:10:1314:10 | b [element] | provenance | | | array_flow.rb:1313:5:1313:5 | b [element] | array_flow.rb:1315:10:1315:10 | b [element] | provenance | | | array_flow.rb:1313:5:1313:5 | b [element] | array_flow.rb:1316:10:1316:10 | b [element] | provenance | | @@ -1650,8 +1822,10 @@ edges | array_flow.rb:1319:10:1319:10 | a [element] | array_flow.rb:1319:10:1319:13 | ...[...] | provenance | | | array_flow.rb:1321:5:1321:5 | a [element 2] | array_flow.rb:1322:9:1322:9 | a [element 2] | provenance | | | array_flow.rb:1321:5:1321:5 | a [element 4] | array_flow.rb:1322:9:1322:9 | a [element 4] | provenance | | -| array_flow.rb:1321:16:1321:28 | call to source | array_flow.rb:1321:5:1321:5 | a [element 2] | provenance | | -| array_flow.rb:1321:34:1321:46 | call to source | array_flow.rb:1321:5:1321:5 | a [element 4] | provenance | | +| array_flow.rb:1321:9:1321:47 | call to [] [element 2] | array_flow.rb:1321:5:1321:5 | a [element 2] | provenance | | +| array_flow.rb:1321:9:1321:47 | call to [] [element 4] | array_flow.rb:1321:5:1321:5 | a [element 4] | provenance | | +| array_flow.rb:1321:16:1321:28 | call to source | array_flow.rb:1321:9:1321:47 | call to [] [element 2] | provenance | | +| array_flow.rb:1321:34:1321:46 | call to source | array_flow.rb:1321:9:1321:47 | call to [] [element 4] | provenance | | | array_flow.rb:1322:5:1322:5 | b [element] | array_flow.rb:1323:10:1323:10 | b [element] | provenance | | | array_flow.rb:1322:5:1322:5 | b [element] | array_flow.rb:1324:10:1324:10 | b [element] | provenance | | | array_flow.rb:1322:5:1322:5 | b [element] | array_flow.rb:1325:10:1325:10 | b [element] | provenance | | @@ -1671,8 +1845,10 @@ edges | array_flow.rb:1328:10:1328:10 | a [element] | array_flow.rb:1328:10:1328:13 | ...[...] | provenance | | | array_flow.rb:1330:5:1330:5 | a [element 2] | array_flow.rb:1331:9:1331:9 | a [element 2] | provenance | | | array_flow.rb:1330:5:1330:5 | a [element 4] | array_flow.rb:1331:9:1331:9 | a [element 4] | provenance | | -| array_flow.rb:1330:16:1330:28 | call to source | array_flow.rb:1330:5:1330:5 | a [element 2] | provenance | | -| array_flow.rb:1330:34:1330:46 | call to source | array_flow.rb:1330:5:1330:5 | a [element 4] | provenance | | +| array_flow.rb:1330:9:1330:47 | call to [] [element 2] | array_flow.rb:1330:5:1330:5 | a [element 2] | provenance | | +| array_flow.rb:1330:9:1330:47 | call to [] [element 4] | array_flow.rb:1330:5:1330:5 | a [element 4] | provenance | | +| array_flow.rb:1330:16:1330:28 | call to source | array_flow.rb:1330:9:1330:47 | call to [] [element 2] | provenance | | +| array_flow.rb:1330:34:1330:46 | call to source | array_flow.rb:1330:9:1330:47 | call to [] [element 4] | provenance | | | array_flow.rb:1331:5:1331:5 | b [element] | array_flow.rb:1332:10:1332:10 | b [element] | provenance | | | array_flow.rb:1331:5:1331:5 | b [element] | array_flow.rb:1333:10:1333:10 | b [element] | provenance | | | array_flow.rb:1331:5:1331:5 | b [element] | array_flow.rb:1334:10:1334:10 | b [element] | provenance | | @@ -1692,8 +1868,10 @@ edges | array_flow.rb:1337:10:1337:10 | a [element] | array_flow.rb:1337:10:1337:13 | ...[...] | provenance | | | array_flow.rb:1339:5:1339:5 | a [element 2] | array_flow.rb:1340:9:1340:9 | a [element 2] | provenance | | | array_flow.rb:1339:5:1339:5 | a [element 4] | array_flow.rb:1340:9:1340:9 | a [element 4] | provenance | | -| array_flow.rb:1339:16:1339:28 | call to source | array_flow.rb:1339:5:1339:5 | a [element 2] | provenance | | -| array_flow.rb:1339:34:1339:46 | call to source | array_flow.rb:1339:5:1339:5 | a [element 4] | provenance | | +| array_flow.rb:1339:9:1339:47 | call to [] [element 2] | array_flow.rb:1339:5:1339:5 | a [element 2] | provenance | | +| array_flow.rb:1339:9:1339:47 | call to [] [element 4] | array_flow.rb:1339:5:1339:5 | a [element 4] | provenance | | +| array_flow.rb:1339:16:1339:28 | call to source | array_flow.rb:1339:9:1339:47 | call to [] [element 2] | provenance | | +| array_flow.rb:1339:34:1339:46 | call to source | array_flow.rb:1339:9:1339:47 | call to [] [element 4] | provenance | | | array_flow.rb:1340:5:1340:5 | b [element 2] | array_flow.rb:1343:10:1343:10 | b [element 2] | provenance | | | array_flow.rb:1340:9:1340:9 | [post] a [element 1] | array_flow.rb:1345:10:1345:10 | a [element 1] | provenance | | | array_flow.rb:1340:9:1340:9 | a [element 2] | array_flow.rb:1340:9:1340:21 | call to slice! [element 2] | provenance | | @@ -1703,8 +1881,10 @@ edges | array_flow.rb:1345:10:1345:10 | a [element 1] | array_flow.rb:1345:10:1345:13 | ...[...] | provenance | | | array_flow.rb:1348:5:1348:5 | a [element 2] | array_flow.rb:1349:9:1349:9 | a [element 2] | provenance | | | array_flow.rb:1348:5:1348:5 | a [element 4] | array_flow.rb:1349:9:1349:9 | a [element 4] | provenance | | -| array_flow.rb:1348:16:1348:28 | call to source | array_flow.rb:1348:5:1348:5 | a [element 2] | provenance | | -| array_flow.rb:1348:34:1348:46 | call to source | array_flow.rb:1348:5:1348:5 | a [element 4] | provenance | | +| array_flow.rb:1348:9:1348:47 | call to [] [element 2] | array_flow.rb:1348:5:1348:5 | a [element 2] | provenance | | +| array_flow.rb:1348:9:1348:47 | call to [] [element 4] | array_flow.rb:1348:5:1348:5 | a [element 4] | provenance | | +| array_flow.rb:1348:16:1348:28 | call to source | array_flow.rb:1348:9:1348:47 | call to [] [element 2] | provenance | | +| array_flow.rb:1348:34:1348:46 | call to source | array_flow.rb:1348:9:1348:47 | call to [] [element 4] | provenance | | | array_flow.rb:1349:5:1349:5 | b [element] | array_flow.rb:1350:10:1350:10 | b [element] | provenance | | | array_flow.rb:1349:5:1349:5 | b [element] | array_flow.rb:1351:10:1351:10 | b [element] | provenance | | | array_flow.rb:1349:5:1349:5 | b [element] | array_flow.rb:1352:10:1352:10 | b [element] | provenance | | @@ -1723,22 +1903,26 @@ edges | array_flow.rb:1354:10:1354:10 | a [element] | array_flow.rb:1354:10:1354:13 | ...[...] | provenance | | | array_flow.rb:1355:10:1355:10 | a [element] | array_flow.rb:1355:10:1355:13 | ...[...] | provenance | | | array_flow.rb:1359:5:1359:5 | a [element 2] | array_flow.rb:1360:9:1360:9 | a [element 2] | provenance | | -| array_flow.rb:1359:16:1359:26 | call to source | array_flow.rb:1359:5:1359:5 | a [element 2] | provenance | | +| array_flow.rb:1359:9:1359:27 | call to [] [element 2] | array_flow.rb:1359:5:1359:5 | a [element 2] | provenance | | +| array_flow.rb:1359:16:1359:26 | call to source | array_flow.rb:1359:9:1359:27 | call to [] [element 2] | provenance | | | array_flow.rb:1360:9:1360:9 | a [element 2] | array_flow.rb:1360:27:1360:27 | x | provenance | | | array_flow.rb:1360:27:1360:27 | x | array_flow.rb:1361:14:1361:14 | x | provenance | | | array_flow.rb:1367:5:1367:5 | a [element 2] | array_flow.rb:1368:9:1368:9 | a [element 2] | provenance | | -| array_flow.rb:1367:16:1367:26 | call to source | array_flow.rb:1367:5:1367:5 | a [element 2] | provenance | | +| array_flow.rb:1367:9:1367:27 | call to [] [element 2] | array_flow.rb:1367:5:1367:5 | a [element 2] | provenance | | +| array_flow.rb:1367:16:1367:26 | call to source | array_flow.rb:1367:9:1367:27 | call to [] [element 2] | provenance | | | array_flow.rb:1368:9:1368:9 | a [element 2] | array_flow.rb:1368:28:1368:28 | x | provenance | | | array_flow.rb:1368:28:1368:28 | x | array_flow.rb:1369:14:1369:14 | x | provenance | | | array_flow.rb:1375:5:1375:5 | a [element 2] | array_flow.rb:1376:9:1376:9 | a [element 2] | provenance | | -| array_flow.rb:1375:16:1375:26 | call to source | array_flow.rb:1375:5:1375:5 | a [element 2] | provenance | | +| array_flow.rb:1375:9:1375:27 | call to [] [element 2] | array_flow.rb:1375:5:1375:5 | a [element 2] | provenance | | +| array_flow.rb:1375:16:1375:26 | call to source | array_flow.rb:1375:9:1375:27 | call to [] [element 2] | provenance | | | array_flow.rb:1376:9:1376:9 | a [element 2] | array_flow.rb:1376:26:1376:26 | x | provenance | | | array_flow.rb:1376:9:1376:9 | a [element 2] | array_flow.rb:1376:29:1376:29 | y | provenance | | | array_flow.rb:1376:26:1376:26 | x | array_flow.rb:1377:14:1377:14 | x | provenance | | | array_flow.rb:1376:29:1376:29 | y | array_flow.rb:1378:14:1378:14 | y | provenance | | | array_flow.rb:1383:5:1383:5 | a [element 2] | array_flow.rb:1384:9:1384:9 | a [element 2] | provenance | | | array_flow.rb:1383:5:1383:5 | a [element 2] | array_flow.rb:1387:9:1387:9 | a [element 2] | provenance | | -| array_flow.rb:1383:16:1383:26 | call to source | array_flow.rb:1383:5:1383:5 | a [element 2] | provenance | | +| array_flow.rb:1383:9:1383:27 | call to [] [element 2] | array_flow.rb:1383:5:1383:5 | a [element 2] | provenance | | +| array_flow.rb:1383:16:1383:26 | call to source | array_flow.rb:1383:9:1383:27 | call to [] [element 2] | provenance | | | array_flow.rb:1384:5:1384:5 | b [element] | array_flow.rb:1385:10:1385:10 | b [element] | provenance | | | array_flow.rb:1384:5:1384:5 | b [element] | array_flow.rb:1386:10:1386:10 | b [element] | provenance | | | array_flow.rb:1384:9:1384:9 | a [element 2] | array_flow.rb:1384:9:1384:14 | call to sort [element] | provenance | | @@ -1756,7 +1940,8 @@ edges | array_flow.rb:1392:10:1392:10 | c [element] | array_flow.rb:1392:10:1392:13 | ...[...] | provenance | | | array_flow.rb:1393:10:1393:10 | c [element] | array_flow.rb:1393:10:1393:13 | ...[...] | provenance | | | array_flow.rb:1397:5:1397:5 | a [element 2] | array_flow.rb:1398:9:1398:9 | a [element 2] | provenance | | -| array_flow.rb:1397:16:1397:26 | call to source | array_flow.rb:1397:5:1397:5 | a [element 2] | provenance | | +| array_flow.rb:1397:9:1397:27 | call to [] [element 2] | array_flow.rb:1397:5:1397:5 | a [element 2] | provenance | | +| array_flow.rb:1397:16:1397:26 | call to source | array_flow.rb:1397:9:1397:27 | call to [] [element 2] | provenance | | | array_flow.rb:1398:5:1398:5 | b [element] | array_flow.rb:1399:10:1399:10 | b [element] | provenance | | | array_flow.rb:1398:5:1398:5 | b [element] | array_flow.rb:1400:10:1400:10 | b [element] | provenance | | | array_flow.rb:1398:9:1398:9 | [post] a [element] | array_flow.rb:1401:10:1401:10 | a [element] | provenance | | @@ -1769,7 +1954,8 @@ edges | array_flow.rb:1401:10:1401:10 | a [element] | array_flow.rb:1401:10:1401:13 | ...[...] | provenance | | | array_flow.rb:1402:10:1402:10 | a [element] | array_flow.rb:1402:10:1402:13 | ...[...] | provenance | | | array_flow.rb:1404:5:1404:5 | a [element 2] | array_flow.rb:1405:9:1405:9 | a [element 2] | provenance | | -| array_flow.rb:1404:16:1404:26 | call to source | array_flow.rb:1404:5:1404:5 | a [element 2] | provenance | | +| array_flow.rb:1404:9:1404:27 | call to [] [element 2] | array_flow.rb:1404:5:1404:5 | a [element 2] | provenance | | +| array_flow.rb:1404:16:1404:26 | call to source | array_flow.rb:1404:9:1404:27 | call to [] [element 2] | provenance | | | array_flow.rb:1405:5:1405:5 | b [element] | array_flow.rb:1410:10:1410:10 | b [element] | provenance | | | array_flow.rb:1405:5:1405:5 | b [element] | array_flow.rb:1411:10:1411:10 | b [element] | provenance | | | array_flow.rb:1405:9:1405:9 | [post] a [element] | array_flow.rb:1412:10:1412:10 | a [element] | provenance | | @@ -1786,7 +1972,8 @@ edges | array_flow.rb:1412:10:1412:10 | a [element] | array_flow.rb:1412:10:1412:13 | ...[...] | provenance | | | array_flow.rb:1413:10:1413:10 | a [element] | array_flow.rb:1413:10:1413:13 | ...[...] | provenance | | | array_flow.rb:1417:5:1417:5 | a [element 2] | array_flow.rb:1418:9:1418:9 | a [element 2] | provenance | | -| array_flow.rb:1417:16:1417:26 | call to source | array_flow.rb:1417:5:1417:5 | a [element 2] | provenance | | +| array_flow.rb:1417:9:1417:27 | call to [] [element 2] | array_flow.rb:1417:5:1417:5 | a [element 2] | provenance | | +| array_flow.rb:1417:16:1417:26 | call to source | array_flow.rb:1417:9:1417:27 | call to [] [element 2] | provenance | | | array_flow.rb:1418:5:1418:5 | b [element] | array_flow.rb:1422:10:1422:10 | b [element] | provenance | | | array_flow.rb:1418:5:1418:5 | b [element] | array_flow.rb:1423:10:1423:10 | b [element] | provenance | | | array_flow.rb:1418:9:1418:9 | a [element 2] | array_flow.rb:1418:9:1421:7 | call to sort_by [element] | provenance | | @@ -1796,7 +1983,8 @@ edges | array_flow.rb:1422:10:1422:10 | b [element] | array_flow.rb:1422:10:1422:13 | ...[...] | provenance | | | array_flow.rb:1423:10:1423:10 | b [element] | array_flow.rb:1423:10:1423:13 | ...[...] | provenance | | | array_flow.rb:1427:5:1427:5 | a [element 2] | array_flow.rb:1428:9:1428:9 | a [element 2] | provenance | | -| array_flow.rb:1427:16:1427:26 | call to source | array_flow.rb:1427:5:1427:5 | a [element 2] | provenance | | +| array_flow.rb:1427:9:1427:27 | call to [] [element 2] | array_flow.rb:1427:5:1427:5 | a [element 2] | provenance | | +| array_flow.rb:1427:16:1427:26 | call to source | array_flow.rb:1427:9:1427:27 | call to [] [element 2] | provenance | | | array_flow.rb:1428:5:1428:5 | b [element] | array_flow.rb:1434:10:1434:10 | b [element] | provenance | | | array_flow.rb:1428:5:1428:5 | b [element] | array_flow.rb:1435:10:1435:10 | b [element] | provenance | | | array_flow.rb:1428:9:1428:9 | [post] a [element] | array_flow.rb:1432:10:1432:10 | a [element] | provenance | | @@ -1811,7 +1999,8 @@ edges | array_flow.rb:1434:10:1434:10 | b [element] | array_flow.rb:1434:10:1434:13 | ...[...] | provenance | | | array_flow.rb:1435:10:1435:10 | b [element] | array_flow.rb:1435:10:1435:13 | ...[...] | provenance | | | array_flow.rb:1439:5:1439:5 | a [element 2] | array_flow.rb:1440:9:1440:9 | a [element 2] | provenance | | -| array_flow.rb:1439:16:1439:26 | call to source | array_flow.rb:1439:5:1439:5 | a [element 2] | provenance | | +| array_flow.rb:1439:9:1439:27 | call to [] [element 2] | array_flow.rb:1439:5:1439:5 | a [element 2] | provenance | | +| array_flow.rb:1439:16:1439:26 | call to source | array_flow.rb:1439:9:1439:27 | call to [] [element 2] | provenance | | | array_flow.rb:1440:9:1440:9 | a [element 2] | array_flow.rb:1440:19:1440:19 | x | provenance | | | array_flow.rb:1440:19:1440:19 | x | array_flow.rb:1441:14:1441:14 | x | provenance | | | array_flow.rb:1447:5:1447:5 | a [element 2] | array_flow.rb:1448:9:1448:9 | a [element 2] | provenance | | @@ -1820,8 +2009,10 @@ edges | array_flow.rb:1447:5:1447:5 | a [element 2] | array_flow.rb:1466:9:1466:9 | a [element 2] | provenance | | | array_flow.rb:1447:5:1447:5 | a [element 3] | array_flow.rb:1448:9:1448:9 | a [element 3] | provenance | | | array_flow.rb:1447:5:1447:5 | a [element 3] | array_flow.rb:1459:9:1459:9 | a [element 3] | provenance | | -| array_flow.rb:1447:16:1447:28 | call to source | array_flow.rb:1447:5:1447:5 | a [element 2] | provenance | | -| array_flow.rb:1447:31:1447:43 | call to source | array_flow.rb:1447:5:1447:5 | a [element 3] | provenance | | +| array_flow.rb:1447:9:1447:44 | call to [] [element 2] | array_flow.rb:1447:5:1447:5 | a [element 2] | provenance | | +| array_flow.rb:1447:9:1447:44 | call to [] [element 3] | array_flow.rb:1447:5:1447:5 | a [element 3] | provenance | | +| array_flow.rb:1447:16:1447:28 | call to source | array_flow.rb:1447:9:1447:44 | call to [] [element 2] | provenance | | +| array_flow.rb:1447:31:1447:43 | call to source | array_flow.rb:1447:9:1447:44 | call to [] [element 3] | provenance | | | array_flow.rb:1448:5:1448:5 | b [element 2] | array_flow.rb:1451:10:1451:10 | b [element 2] | provenance | | | array_flow.rb:1448:5:1448:5 | b [element 3] | array_flow.rb:1452:10:1452:10 | b [element 3] | provenance | | | array_flow.rb:1448:9:1448:9 | a [element 2] | array_flow.rb:1448:9:1448:17 | call to take [element 2] | provenance | | @@ -1859,7 +2050,8 @@ edges | array_flow.rb:1467:10:1467:10 | b [element 2] | array_flow.rb:1467:10:1467:13 | ...[...] | provenance | | | array_flow.rb:1467:10:1467:10 | b [element] | array_flow.rb:1467:10:1467:13 | ...[...] | provenance | | | array_flow.rb:1471:5:1471:5 | a [element 2] | array_flow.rb:1472:9:1472:9 | a [element 2] | provenance | | -| array_flow.rb:1471:16:1471:26 | call to source | array_flow.rb:1471:5:1471:5 | a [element 2] | provenance | | +| array_flow.rb:1471:9:1471:27 | call to [] [element 2] | array_flow.rb:1471:5:1471:5 | a [element 2] | provenance | | +| array_flow.rb:1471:16:1471:26 | call to source | array_flow.rb:1471:9:1471:27 | call to [] [element 2] | provenance | | | array_flow.rb:1472:5:1472:5 | b [element 2] | array_flow.rb:1478:10:1478:10 | b [element 2] | provenance | | | array_flow.rb:1472:9:1472:9 | a [element 2] | array_flow.rb:1472:9:1475:7 | call to take_while [element 2] | provenance | | | array_flow.rb:1472:9:1472:9 | a [element 2] | array_flow.rb:1472:26:1472:26 | x | provenance | | @@ -1867,13 +2059,15 @@ edges | array_flow.rb:1472:26:1472:26 | x | array_flow.rb:1473:14:1473:14 | x | provenance | | | array_flow.rb:1478:10:1478:10 | b [element 2] | array_flow.rb:1478:10:1478:13 | ...[...] | provenance | | | array_flow.rb:1484:5:1484:5 | a [element 3] | array_flow.rb:1485:9:1485:9 | a [element 3] | provenance | | -| array_flow.rb:1484:19:1484:29 | call to source | array_flow.rb:1484:5:1484:5 | a [element 3] | provenance | | +| array_flow.rb:1484:9:1484:30 | call to [] [element 3] | array_flow.rb:1484:5:1484:5 | a [element 3] | provenance | | +| array_flow.rb:1484:19:1484:29 | call to source | array_flow.rb:1484:9:1484:30 | call to [] [element 3] | provenance | | | array_flow.rb:1485:5:1485:5 | b [element 3] | array_flow.rb:1486:10:1486:10 | b [element 3] | provenance | | | array_flow.rb:1485:9:1485:9 | a [element 3] | array_flow.rb:1485:9:1485:14 | call to to_a [element 3] | provenance | | | array_flow.rb:1485:9:1485:14 | call to to_a [element 3] | array_flow.rb:1485:5:1485:5 | b [element 3] | provenance | | | array_flow.rb:1486:10:1486:10 | b [element 3] | array_flow.rb:1486:10:1486:13 | ...[...] | provenance | | | array_flow.rb:1490:5:1490:5 | a [element 2] | array_flow.rb:1491:9:1491:9 | a [element 2] | provenance | | -| array_flow.rb:1490:16:1490:26 | call to source | array_flow.rb:1490:5:1490:5 | a [element 2] | provenance | | +| array_flow.rb:1490:9:1490:27 | call to [] [element 2] | array_flow.rb:1490:5:1490:5 | a [element 2] | provenance | | +| array_flow.rb:1490:16:1490:26 | call to source | array_flow.rb:1490:9:1490:27 | call to [] [element 2] | provenance | | | array_flow.rb:1491:5:1491:5 | b [element 2] | array_flow.rb:1494:10:1494:10 | b [element 2] | provenance | | | array_flow.rb:1491:9:1491:9 | a [element 2] | array_flow.rb:1491:9:1491:16 | call to to_ary [element 2] | provenance | | | array_flow.rb:1491:9:1491:16 | call to to_ary [element 2] | array_flow.rb:1491:5:1491:5 | b [element 2] | provenance | | @@ -1881,9 +2075,15 @@ edges | array_flow.rb:1507:5:1507:5 | a [element 0, element 1] | array_flow.rb:1508:9:1508:9 | a [element 0, element 1] | provenance | | | array_flow.rb:1507:5:1507:5 | a [element 1, element 1] | array_flow.rb:1508:9:1508:9 | a [element 1, element 1] | provenance | | | array_flow.rb:1507:5:1507:5 | a [element 2, element 1] | array_flow.rb:1508:9:1508:9 | a [element 2, element 1] | provenance | | -| array_flow.rb:1507:14:1507:26 | call to source | array_flow.rb:1507:5:1507:5 | a [element 0, element 1] | provenance | | -| array_flow.rb:1507:34:1507:46 | call to source | array_flow.rb:1507:5:1507:5 | a [element 1, element 1] | provenance | | -| array_flow.rb:1507:54:1507:66 | call to source | array_flow.rb:1507:5:1507:5 | a [element 2, element 1] | provenance | | +| array_flow.rb:1507:9:1507:68 | call to [] [element 0, element 1] | array_flow.rb:1507:5:1507:5 | a [element 0, element 1] | provenance | | +| array_flow.rb:1507:9:1507:68 | call to [] [element 1, element 1] | array_flow.rb:1507:5:1507:5 | a [element 1, element 1] | provenance | | +| array_flow.rb:1507:9:1507:68 | call to [] [element 2, element 1] | array_flow.rb:1507:5:1507:5 | a [element 2, element 1] | provenance | | +| array_flow.rb:1507:10:1507:27 | call to [] [element 1] | array_flow.rb:1507:9:1507:68 | call to [] [element 0, element 1] | provenance | | +| array_flow.rb:1507:14:1507:26 | call to source | array_flow.rb:1507:10:1507:27 | call to [] [element 1] | provenance | | +| array_flow.rb:1507:30:1507:47 | call to [] [element 1] | array_flow.rb:1507:9:1507:68 | call to [] [element 1, element 1] | provenance | | +| array_flow.rb:1507:34:1507:46 | call to source | array_flow.rb:1507:30:1507:47 | call to [] [element 1] | provenance | | +| array_flow.rb:1507:50:1507:67 | call to [] [element 1] | array_flow.rb:1507:9:1507:68 | call to [] [element 2, element 1] | provenance | | +| array_flow.rb:1507:54:1507:66 | call to source | array_flow.rb:1507:50:1507:67 | call to [] [element 1] | provenance | | | array_flow.rb:1508:5:1508:5 | b [element 1, element 0] | array_flow.rb:1512:10:1512:10 | b [element 1, element 0] | provenance | | | array_flow.rb:1508:5:1508:5 | b [element 1, element 1] | array_flow.rb:1513:10:1513:10 | b [element 1, element 1] | provenance | | | array_flow.rb:1508:5:1508:5 | b [element 1, element 2] | array_flow.rb:1514:10:1514:10 | b [element 1, element 2] | provenance | | @@ -1900,11 +2100,14 @@ edges | array_flow.rb:1514:10:1514:10 | b [element 1, element 2] | array_flow.rb:1514:10:1514:13 | ...[...] [element 2] | provenance | | | array_flow.rb:1514:10:1514:13 | ...[...] [element 2] | array_flow.rb:1514:10:1514:16 | ...[...] | provenance | | | array_flow.rb:1518:5:1518:5 | a [element 2] | array_flow.rb:1521:9:1521:9 | a [element 2] | provenance | | -| array_flow.rb:1518:16:1518:28 | call to source | array_flow.rb:1518:5:1518:5 | a [element 2] | provenance | | +| array_flow.rb:1518:9:1518:29 | call to [] [element 2] | array_flow.rb:1518:5:1518:5 | a [element 2] | provenance | | +| array_flow.rb:1518:16:1518:28 | call to source | array_flow.rb:1518:9:1518:29 | call to [] [element 2] | provenance | | | array_flow.rb:1519:5:1519:5 | b [element 1] | array_flow.rb:1521:17:1521:17 | b [element 1] | provenance | | -| array_flow.rb:1519:13:1519:25 | call to source | array_flow.rb:1519:5:1519:5 | b [element 1] | provenance | | +| array_flow.rb:1519:9:1519:26 | call to [] [element 1] | array_flow.rb:1519:5:1519:5 | b [element 1] | provenance | | +| array_flow.rb:1519:13:1519:25 | call to source | array_flow.rb:1519:9:1519:26 | call to [] [element 1] | provenance | | | array_flow.rb:1520:5:1520:5 | c [element 1] | array_flow.rb:1521:20:1521:20 | c [element 1] | provenance | | -| array_flow.rb:1520:13:1520:25 | call to source | array_flow.rb:1520:5:1520:5 | c [element 1] | provenance | | +| array_flow.rb:1520:9:1520:26 | call to [] [element 1] | array_flow.rb:1520:5:1520:5 | c [element 1] | provenance | | +| array_flow.rb:1520:13:1520:25 | call to source | array_flow.rb:1520:9:1520:26 | call to [] [element 1] | provenance | | | array_flow.rb:1521:5:1521:5 | d [element] | array_flow.rb:1522:10:1522:10 | d [element] | provenance | | | array_flow.rb:1521:5:1521:5 | d [element] | array_flow.rb:1523:10:1523:10 | d [element] | provenance | | | array_flow.rb:1521:5:1521:5 | d [element] | array_flow.rb:1524:10:1524:10 | d [element] | provenance | | @@ -1919,8 +2122,10 @@ edges | array_flow.rb:1528:5:1528:5 | a [element 3] | array_flow.rb:1534:9:1534:9 | a [element 3] | provenance | | | array_flow.rb:1528:5:1528:5 | a [element 4] | array_flow.rb:1530:9:1530:9 | a [element 4] | provenance | | | array_flow.rb:1528:5:1528:5 | a [element 4] | array_flow.rb:1534:9:1534:9 | a [element 4] | provenance | | -| array_flow.rb:1528:19:1528:31 | call to source | array_flow.rb:1528:5:1528:5 | a [element 3] | provenance | | -| array_flow.rb:1528:34:1528:46 | call to source | array_flow.rb:1528:5:1528:5 | a [element 4] | provenance | | +| array_flow.rb:1528:9:1528:47 | call to [] [element 3] | array_flow.rb:1528:5:1528:5 | a [element 3] | provenance | | +| array_flow.rb:1528:9:1528:47 | call to [] [element 4] | array_flow.rb:1528:5:1528:5 | a [element 4] | provenance | | +| array_flow.rb:1528:19:1528:31 | call to source | array_flow.rb:1528:9:1528:47 | call to [] [element 3] | provenance | | +| array_flow.rb:1528:34:1528:46 | call to source | array_flow.rb:1528:9:1528:47 | call to [] [element 4] | provenance | | | array_flow.rb:1530:5:1530:5 | b [element] | array_flow.rb:1531:10:1531:10 | b [element] | provenance | | | array_flow.rb:1530:5:1530:5 | b [element] | array_flow.rb:1532:10:1532:10 | b [element] | provenance | | | array_flow.rb:1530:9:1530:9 | a [element 3] | array_flow.rb:1530:9:1530:14 | call to uniq [element] | provenance | | @@ -1938,8 +2143,10 @@ edges | array_flow.rb:1538:10:1538:10 | c [element] | array_flow.rb:1538:10:1538:13 | ...[...] | provenance | | | array_flow.rb:1542:5:1542:5 | a [element 2] | array_flow.rb:1543:9:1543:9 | a [element 2] | provenance | | | array_flow.rb:1542:5:1542:5 | a [element 3] | array_flow.rb:1543:9:1543:9 | a [element 3] | provenance | | -| array_flow.rb:1542:16:1542:28 | call to source | array_flow.rb:1542:5:1542:5 | a [element 2] | provenance | | -| array_flow.rb:1542:31:1542:43 | call to source | array_flow.rb:1542:5:1542:5 | a [element 3] | provenance | | +| array_flow.rb:1542:9:1542:44 | call to [] [element 2] | array_flow.rb:1542:5:1542:5 | a [element 2] | provenance | | +| array_flow.rb:1542:9:1542:44 | call to [] [element 3] | array_flow.rb:1542:5:1542:5 | a [element 3] | provenance | | +| array_flow.rb:1542:16:1542:28 | call to source | array_flow.rb:1542:9:1542:44 | call to [] [element 2] | provenance | | +| array_flow.rb:1542:31:1542:43 | call to source | array_flow.rb:1542:9:1542:44 | call to [] [element 3] | provenance | | | array_flow.rb:1543:5:1543:5 | b [element] | array_flow.rb:1544:10:1544:10 | b [element] | provenance | | | array_flow.rb:1543:5:1543:5 | b [element] | array_flow.rb:1545:10:1545:10 | b [element] | provenance | | | array_flow.rb:1543:9:1543:9 | [post] a [element] | array_flow.rb:1546:10:1546:10 | a [element] | provenance | | @@ -1955,8 +2162,10 @@ edges | array_flow.rb:1547:10:1547:10 | a [element] | array_flow.rb:1547:10:1547:13 | ...[...] | provenance | | | array_flow.rb:1549:5:1549:5 | a [element 2] | array_flow.rb:1550:9:1550:9 | a [element 2] | provenance | | | array_flow.rb:1549:5:1549:5 | a [element 3] | array_flow.rb:1550:9:1550:9 | a [element 3] | provenance | | -| array_flow.rb:1549:16:1549:28 | call to source | array_flow.rb:1549:5:1549:5 | a [element 2] | provenance | | -| array_flow.rb:1549:31:1549:43 | call to source | array_flow.rb:1549:5:1549:5 | a [element 3] | provenance | | +| array_flow.rb:1549:9:1549:44 | call to [] [element 2] | array_flow.rb:1549:5:1549:5 | a [element 2] | provenance | | +| array_flow.rb:1549:9:1549:44 | call to [] [element 3] | array_flow.rb:1549:5:1549:5 | a [element 3] | provenance | | +| array_flow.rb:1549:16:1549:28 | call to source | array_flow.rb:1549:9:1549:44 | call to [] [element 2] | provenance | | +| array_flow.rb:1549:31:1549:43 | call to source | array_flow.rb:1549:9:1549:44 | call to [] [element 3] | provenance | | | array_flow.rb:1550:5:1550:5 | b [element] | array_flow.rb:1554:10:1554:10 | b [element] | provenance | | | array_flow.rb:1550:5:1550:5 | b [element] | array_flow.rb:1555:10:1555:10 | b [element] | provenance | | | array_flow.rb:1550:9:1550:9 | [post] a [element] | array_flow.rb:1556:10:1556:10 | a [element] | provenance | | @@ -1974,7 +2183,8 @@ edges | array_flow.rb:1556:10:1556:10 | a [element] | array_flow.rb:1556:10:1556:13 | ...[...] | provenance | | | array_flow.rb:1557:10:1557:10 | a [element] | array_flow.rb:1557:10:1557:13 | ...[...] | provenance | | | array_flow.rb:1561:5:1561:5 | a [element 2] | array_flow.rb:1562:5:1562:5 | a [element 2] | provenance | | -| array_flow.rb:1561:16:1561:28 | call to source | array_flow.rb:1561:5:1561:5 | a [element 2] | provenance | | +| array_flow.rb:1561:9:1561:29 | call to [] [element 2] | array_flow.rb:1561:5:1561:5 | a [element 2] | provenance | | +| array_flow.rb:1561:16:1561:28 | call to source | array_flow.rb:1561:9:1561:29 | call to [] [element 2] | provenance | | | array_flow.rb:1562:5:1562:5 | [post] a [element 2] | array_flow.rb:1565:10:1565:10 | a [element 2] | provenance | | | array_flow.rb:1562:5:1562:5 | [post] a [element 5] | array_flow.rb:1568:10:1568:10 | a [element 5] | provenance | | | array_flow.rb:1562:5:1562:5 | a [element 2] | array_flow.rb:1562:5:1562:5 | [post] a [element 5] | provenance | | @@ -1988,8 +2198,10 @@ edges | array_flow.rb:1572:5:1572:5 | a [element 3] | array_flow.rb:1580:9:1580:9 | a [element 3] | provenance | | | array_flow.rb:1572:5:1572:5 | a [element 3] | array_flow.rb:1584:9:1584:9 | a [element 3] | provenance | | | array_flow.rb:1572:5:1572:5 | a [element 3] | array_flow.rb:1588:9:1588:9 | a [element 3] | provenance | | -| array_flow.rb:1572:13:1572:25 | call to source | array_flow.rb:1572:5:1572:5 | a [element 1] | provenance | | -| array_flow.rb:1572:31:1572:43 | call to source | array_flow.rb:1572:5:1572:5 | a [element 3] | provenance | | +| array_flow.rb:1572:9:1572:44 | call to [] [element 1] | array_flow.rb:1572:5:1572:5 | a [element 1] | provenance | | +| array_flow.rb:1572:9:1572:44 | call to [] [element 3] | array_flow.rb:1572:5:1572:5 | a [element 3] | provenance | | +| array_flow.rb:1572:13:1572:25 | call to source | array_flow.rb:1572:9:1572:44 | call to [] [element 1] | provenance | | +| array_flow.rb:1572:31:1572:43 | call to source | array_flow.rb:1572:9:1572:44 | call to [] [element 3] | provenance | | | array_flow.rb:1574:5:1574:5 | b [element 1] | array_flow.rb:1576:10:1576:10 | b [element 1] | provenance | | | array_flow.rb:1574:5:1574:5 | b [element 3] | array_flow.rb:1578:10:1578:10 | b [element 3] | provenance | | | array_flow.rb:1574:9:1574:9 | a [element 1] | array_flow.rb:1574:9:1574:31 | call to values_at [element 1] | provenance | | @@ -2029,13 +2241,16 @@ edges | array_flow.rb:1592:10:1592:10 | b [element] | array_flow.rb:1592:10:1592:13 | ...[...] | provenance | | | array_flow.rb:1596:5:1596:5 | a [element 2] | array_flow.rb:1599:9:1599:9 | a [element 2] | provenance | | | array_flow.rb:1596:5:1596:5 | a [element 2] | array_flow.rb:1604:5:1604:5 | a [element 2] | provenance | | -| array_flow.rb:1596:16:1596:28 | call to source | array_flow.rb:1596:5:1596:5 | a [element 2] | provenance | | +| array_flow.rb:1596:9:1596:29 | call to [] [element 2] | array_flow.rb:1596:5:1596:5 | a [element 2] | provenance | | +| array_flow.rb:1596:16:1596:28 | call to source | array_flow.rb:1596:9:1596:29 | call to [] [element 2] | provenance | | | array_flow.rb:1597:5:1597:5 | b [element 1] | array_flow.rb:1599:15:1599:15 | b [element 1] | provenance | | | array_flow.rb:1597:5:1597:5 | b [element 1] | array_flow.rb:1604:11:1604:11 | b [element 1] | provenance | | -| array_flow.rb:1597:13:1597:25 | call to source | array_flow.rb:1597:5:1597:5 | b [element 1] | provenance | | +| array_flow.rb:1597:9:1597:29 | call to [] [element 1] | array_flow.rb:1597:5:1597:5 | b [element 1] | provenance | | +| array_flow.rb:1597:13:1597:25 | call to source | array_flow.rb:1597:9:1597:29 | call to [] [element 1] | provenance | | | array_flow.rb:1598:5:1598:5 | c [element 0] | array_flow.rb:1599:18:1599:18 | c [element 0] | provenance | | | array_flow.rb:1598:5:1598:5 | c [element 0] | array_flow.rb:1604:14:1604:14 | c [element 0] | provenance | | -| array_flow.rb:1598:10:1598:22 | call to source | array_flow.rb:1598:5:1598:5 | c [element 0] | provenance | | +| array_flow.rb:1598:9:1598:29 | call to [] [element 0] | array_flow.rb:1598:5:1598:5 | c [element 0] | provenance | | +| array_flow.rb:1598:10:1598:22 | call to source | array_flow.rb:1598:9:1598:29 | call to [] [element 0] | provenance | | | array_flow.rb:1599:5:1599:5 | d [element 0, element 2] | array_flow.rb:1601:10:1601:10 | d [element 0, element 2] | provenance | | | array_flow.rb:1599:5:1599:5 | d [element 1, element 1] | array_flow.rb:1602:10:1602:10 | d [element 1, element 1] | provenance | | | array_flow.rb:1599:5:1599:5 | d [element 2, element 0] | array_flow.rb:1603:10:1603:10 | d [element 2, element 0] | provenance | | @@ -2061,9 +2276,11 @@ edges | array_flow.rb:1606:14:1606:14 | x [element 1] | array_flow.rb:1606:14:1606:17 | ...[...] | provenance | | | array_flow.rb:1607:14:1607:14 | x [element 2] | array_flow.rb:1607:14:1607:17 | ...[...] | provenance | | | array_flow.rb:1612:5:1612:5 | a [element 2] | array_flow.rb:1614:9:1614:9 | a [element 2] | provenance | | -| array_flow.rb:1612:16:1612:28 | call to source | array_flow.rb:1612:5:1612:5 | a [element 2] | provenance | | +| array_flow.rb:1612:9:1612:29 | call to [] [element 2] | array_flow.rb:1612:5:1612:5 | a [element 2] | provenance | | +| array_flow.rb:1612:16:1612:28 | call to source | array_flow.rb:1612:9:1612:29 | call to [] [element 2] | provenance | | | array_flow.rb:1613:5:1613:5 | b [element 1] | array_flow.rb:1614:13:1614:13 | b [element 1] | provenance | | -| array_flow.rb:1613:13:1613:25 | call to source | array_flow.rb:1613:5:1613:5 | b [element 1] | provenance | | +| array_flow.rb:1613:9:1613:26 | call to [] [element 1] | array_flow.rb:1613:5:1613:5 | b [element 1] | provenance | | +| array_flow.rb:1613:13:1613:25 | call to source | array_flow.rb:1613:9:1613:26 | call to [] [element 1] | provenance | | | array_flow.rb:1614:5:1614:5 | c [element] | array_flow.rb:1615:10:1615:10 | c [element] | provenance | | | array_flow.rb:1614:5:1614:5 | c [element] | array_flow.rb:1616:10:1616:10 | c [element] | provenance | | | array_flow.rb:1614:5:1614:5 | c [element] | array_flow.rb:1617:10:1617:10 | c [element] | provenance | | @@ -2120,6 +2337,25 @@ edges | array_flow.rb:1668:25:1668:37 | call to source | array_flow.rb:1668:14:1668:41 | ...[...] [element 1] | provenance | | | array_flow.rb:1670:14:1670:15 | a2 [element 1] | array_flow.rb:1670:14:1670:18 | ...[...] | provenance | | | array_flow.rb:1672:14:1672:15 | a2 [element 1] | array_flow.rb:1672:14:1672:18 | ...[...] | provenance | | +| array_flow.rb:1677:5:1677:5 | a [element 2] | array_flow.rb:1678:9:1678:9 | a [element 2] | provenance | | +| array_flow.rb:1677:9:1677:29 | call to [] [element 2] | array_flow.rb:1677:5:1677:5 | a [element 2] | provenance | | +| array_flow.rb:1677:16:1677:28 | call to source | array_flow.rb:1677:9:1677:29 | call to [] [element 2] | provenance | | +| array_flow.rb:1678:5:1678:5 | b [element] | array_flow.rb:1681:10:1681:10 | b [element] | provenance | | +| array_flow.rb:1678:9:1678:9 | a [element 2] | array_flow.rb:1678:9:1680:7 | call to map [element] | provenance | | +| array_flow.rb:1678:9:1678:9 | a [element 2] | array_flow.rb:1678:19:1678:19 | x | provenance | | +| array_flow.rb:1678:9:1680:7 | call to map [element] | array_flow.rb:1678:5:1678:5 | b [element] | provenance | | +| array_flow.rb:1678:19:1678:19 | x | array_flow.rb:1679:9:1679:9 | x | provenance | | +| array_flow.rb:1681:10:1681:10 | b [element] | array_flow.rb:1681:10:1681:13 | ...[...] | provenance | | +| array_flow.rb:1685:5:1685:5 | a [element 2] | array_flow.rb:1686:18:1686:18 | a [element 2] | provenance | | +| array_flow.rb:1685:5:1685:5 | a [element 3] | array_flow.rb:1686:18:1686:18 | a [element 3] | provenance | | +| array_flow.rb:1685:9:1685:44 | call to [] [element 2] | array_flow.rb:1685:5:1685:5 | a [element 2] | provenance | | +| array_flow.rb:1685:9:1685:44 | call to [] [element 3] | array_flow.rb:1685:5:1685:5 | a [element 3] | provenance | | +| array_flow.rb:1685:16:1685:28 | call to source | array_flow.rb:1685:9:1685:44 | call to [] [element 2] | provenance | | +| array_flow.rb:1685:31:1685:43 | call to source | array_flow.rb:1685:9:1685:44 | call to [] [element 3] | provenance | | +| array_flow.rb:1686:11:1686:11 | z | array_flow.rb:1689:10:1689:10 | z | provenance | | +| array_flow.rb:1686:14:1686:14 | w | array_flow.rb:1690:10:1690:10 | w | provenance | | +| array_flow.rb:1686:18:1686:18 | a [element 2] | array_flow.rb:1686:11:1686:11 | z | provenance | | +| array_flow.rb:1686:18:1686:18 | a [element 3] | array_flow.rb:1686:14:1686:14 | w | provenance | | nodes | array_flow.rb:2:5:2:5 | a [element 0] | semmle.label | a [element 0] | | array_flow.rb:2:9:2:20 | * ... [element 0] | semmle.label | * ... [element 0] | @@ -2129,6 +2365,7 @@ nodes | array_flow.rb:5:10:5:10 | a [element 0] | semmle.label | a [element 0] | | array_flow.rb:5:10:5:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:9:5:9:5 | a [element 1] | semmle.label | a [element 1] | +| array_flow.rb:9:9:9:25 | call to [] [element 1] | semmle.label | call to [] [element 1] | | array_flow.rb:9:13:9:21 | call to source | semmle.label | call to source | | array_flow.rb:11:10:11:10 | a [element 1] | semmle.label | a [element 1] | | array_flow.rb:11:10:11:13 | ...[...] | semmle.label | ...[...] | @@ -2156,6 +2393,7 @@ nodes | array_flow.rb:29:10:29:10 | c [element] | semmle.label | c [element] | | array_flow.rb:29:10:29:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:33:5:33:5 | a [element 0] | semmle.label | a [element 0] | +| array_flow.rb:33:9:33:22 | call to [] [element 0] | semmle.label | call to [] [element 0] | | array_flow.rb:33:10:33:18 | call to source | semmle.label | call to source | | array_flow.rb:34:5:34:5 | b [element 0] | semmle.label | b [element 0] | | array_flow.rb:34:9:34:28 | call to try_convert [element 0] | semmle.label | call to try_convert [element 0] | @@ -2163,8 +2401,10 @@ nodes | array_flow.rb:35:10:35:10 | b [element 0] | semmle.label | b [element 0] | | array_flow.rb:35:10:35:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:40:5:40:5 | a [element 0] | semmle.label | a [element 0] | +| array_flow.rb:40:9:40:24 | call to [] [element 0] | semmle.label | call to [] [element 0] | | array_flow.rb:40:10:40:20 | call to source | semmle.label | call to source | | array_flow.rb:41:5:41:5 | b [element 2] | semmle.label | b [element 2] | +| array_flow.rb:41:9:41:27 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:41:16:41:26 | call to source | semmle.label | call to source | | array_flow.rb:42:5:42:5 | c [element] | semmle.label | c [element] | | array_flow.rb:42:9:42:9 | a [element 0] | semmle.label | a [element 0] | @@ -2175,6 +2415,7 @@ nodes | array_flow.rb:44:10:44:10 | c [element] | semmle.label | c [element] | | array_flow.rb:44:10:44:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:48:5:48:5 | a [element 0] | semmle.label | a [element 0] | +| array_flow.rb:48:9:48:22 | call to [] [element 0] | semmle.label | call to [] [element 0] | | array_flow.rb:48:10:48:18 | call to source | semmle.label | call to source | | array_flow.rb:49:5:49:5 | b [element] | semmle.label | b [element] | | array_flow.rb:49:9:49:9 | a [element 0] | semmle.label | a [element 0] | @@ -2184,8 +2425,10 @@ nodes | array_flow.rb:51:10:51:10 | b [element] | semmle.label | b [element] | | array_flow.rb:51:10:51:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:55:5:55:5 | a [element 0] | semmle.label | a [element 0] | +| array_flow.rb:55:9:55:24 | call to [] [element 0] | semmle.label | call to [] [element 0] | | array_flow.rb:55:10:55:20 | call to source | semmle.label | call to source | | array_flow.rb:56:5:56:5 | b [element 1] | semmle.label | b [element 1] | +| array_flow.rb:56:9:56:24 | call to [] [element 1] | semmle.label | call to [] [element 1] | | array_flow.rb:56:13:56:23 | call to source | semmle.label | call to source | | array_flow.rb:57:5:57:5 | c [element 0] | semmle.label | c [element 0] | | array_flow.rb:57:5:57:5 | c [element] | semmle.label | c [element] | @@ -2199,6 +2442,7 @@ nodes | array_flow.rb:59:10:59:10 | c [element] | semmle.label | c [element] | | array_flow.rb:59:10:59:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:63:5:63:5 | a [element 0] | semmle.label | a [element 0] | +| array_flow.rb:63:9:63:24 | call to [] [element 0] | semmle.label | call to [] [element 0] | | array_flow.rb:63:10:63:20 | call to source | semmle.label | call to source | | array_flow.rb:65:5:65:5 | c [element] | semmle.label | c [element] | | array_flow.rb:65:9:65:9 | a [element 0] | semmle.label | a [element 0] | @@ -2208,6 +2452,7 @@ nodes | array_flow.rb:67:10:67:10 | c [element] | semmle.label | c [element] | | array_flow.rb:67:10:67:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:71:5:71:5 | a [element 0] | semmle.label | a [element 0] | +| array_flow.rb:71:9:71:24 | call to [] [element 0] | semmle.label | call to [] [element 0] | | array_flow.rb:71:10:71:20 | call to source | semmle.label | call to source | | array_flow.rb:72:5:72:5 | b [element 0] | semmle.label | b [element 0] | | array_flow.rb:72:5:72:5 | b [element] | semmle.label | b [element] | @@ -2227,11 +2472,13 @@ nodes | array_flow.rb:76:10:76:10 | b [element] | semmle.label | b [element] | | array_flow.rb:76:10:76:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:80:5:80:5 | a [element 1] | semmle.label | a [element 1] | +| array_flow.rb:80:9:80:25 | call to [] [element 1] | semmle.label | call to [] [element 1] | | array_flow.rb:80:13:80:21 | call to source | semmle.label | call to source | | array_flow.rb:81:8:81:8 | c | semmle.label | c | | array_flow.rb:81:15:81:15 | a [element 1] | semmle.label | a [element 1] | | array_flow.rb:83:10:83:10 | c | semmle.label | c | | array_flow.rb:88:5:88:5 | a [element 1] | semmle.label | a [element 1] | +| array_flow.rb:88:9:88:26 | call to [] [element 1] | semmle.label | call to [] [element 1] | | array_flow.rb:88:13:88:22 | call to source | semmle.label | call to source | | array_flow.rb:89:5:89:5 | b [element 1] | semmle.label | b [element 1] | | array_flow.rb:89:9:89:9 | a [element 1] | semmle.label | a [element 1] | @@ -2241,6 +2488,7 @@ nodes | array_flow.rb:92:10:92:10 | b [element 1] | semmle.label | b [element 1] | | array_flow.rb:92:10:92:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:96:5:96:5 | a [element 1] | semmle.label | a [element 1] | +| array_flow.rb:96:9:96:26 | call to [] [element 1] | semmle.label | call to [] [element 1] | | array_flow.rb:96:13:96:22 | call to source | semmle.label | call to source | | array_flow.rb:97:5:97:5 | b [element 1] | semmle.label | b [element 1] | | array_flow.rb:97:9:97:9 | a [element 1] | semmle.label | a [element 1] | @@ -2250,6 +2498,7 @@ nodes | array_flow.rb:101:10:101:10 | b [element 1] | semmle.label | b [element 1] | | array_flow.rb:101:10:101:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:103:5:103:5 | a [element 1] | semmle.label | a [element 1] | +| array_flow.rb:103:9:103:39 | call to [] [element 1] | semmle.label | call to [] [element 1] | | array_flow.rb:103:13:103:24 | call to source | semmle.label | call to source | | array_flow.rb:104:5:104:5 | b [element 1] | semmle.label | b [element 1] | | array_flow.rb:104:9:104:9 | a [element 1] | semmle.label | a [element 1] | @@ -2258,6 +2507,8 @@ nodes | array_flow.rb:106:10:106:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:109:5:109:5 | a [element 1] | semmle.label | a [element 1] | | array_flow.rb:109:5:109:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:109:9:109:42 | call to [] [element 1] | semmle.label | call to [] [element 1] | +| array_flow.rb:109:9:109:42 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:109:13:109:24 | call to source | semmle.label | call to source | | array_flow.rb:109:30:109:41 | call to source | semmle.label | call to source | | array_flow.rb:110:5:110:5 | b [element] | semmle.label | b [element] | @@ -2285,6 +2536,7 @@ nodes | array_flow.rb:124:10:124:10 | a [element] | semmle.label | a [element] | | array_flow.rb:124:10:124:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:129:5:129:5 | [post] a [element] | semmle.label | [post] a [element] | +| array_flow.rb:129:15:129:32 | call to [] [element 1] | semmle.label | call to [] [element 1] | | array_flow.rb:129:19:129:28 | call to source | semmle.label | call to source | | array_flow.rb:130:10:130:10 | a [element] | semmle.label | a [element] | | array_flow.rb:130:10:130:13 | ...[...] | semmle.label | ...[...] | @@ -2301,6 +2553,7 @@ nodes | array_flow.rb:140:10:140:10 | a [element] | semmle.label | a [element] | | array_flow.rb:140:10:140:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:145:5:145:5 | [post] a [element] | semmle.label | [post] a [element] | +| array_flow.rb:145:15:145:32 | call to [] [element 1] | semmle.label | call to [] [element 1] | | array_flow.rb:145:19:145:28 | call to source | semmle.label | call to source | | array_flow.rb:146:10:146:10 | a [element] | semmle.label | a [element] | | array_flow.rb:146:10:146:13 | ...[...] | semmle.label | ...[...] | @@ -2309,16 +2562,19 @@ nodes | array_flow.rb:148:10:148:10 | a [element] | semmle.label | a [element] | | array_flow.rb:148:10:148:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:152:5:152:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:152:9:152:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:152:16:152:25 | call to source | semmle.label | call to source | | array_flow.rb:153:5:153:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:153:16:153:16 | x | semmle.label | x | | array_flow.rb:154:14:154:14 | x | semmle.label | x | | array_flow.rb:159:5:159:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:159:9:159:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:159:16:159:25 | call to source | semmle.label | call to source | | array_flow.rb:160:5:160:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:160:16:160:16 | x | semmle.label | x | | array_flow.rb:161:14:161:14 | x | semmle.label | x | | array_flow.rb:166:5:166:5 | a [element 0] | semmle.label | a [element 0] | +| array_flow.rb:166:9:166:25 | call to [] [element 0] | semmle.label | call to [] [element 0] | | array_flow.rb:166:10:166:21 | call to source | semmle.label | call to source | | array_flow.rb:167:5:167:5 | b [element 0] | semmle.label | b [element 0] | | array_flow.rb:167:5:167:5 | b [element] | semmle.label | b [element] | @@ -2339,8 +2595,10 @@ nodes | array_flow.rb:171:10:171:10 | b [element] | semmle.label | b [element] | | array_flow.rb:171:10:171:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:177:5:177:5 | c [element 1] | semmle.label | c [element 1] | +| array_flow.rb:177:9:177:25 | call to [] [element 1] | semmle.label | call to [] [element 1] | | array_flow.rb:177:15:177:24 | call to source | semmle.label | call to source | | array_flow.rb:178:5:178:5 | d [element 2, element 1] | semmle.label | d [element 2, element 1] | +| array_flow.rb:178:9:178:17 | call to [] [element 2, element 1] | semmle.label | call to [] [element 2, element 1] | | array_flow.rb:178:16:178:16 | c [element 1] | semmle.label | c [element 1] | | array_flow.rb:179:10:179:26 | ( ... ) | semmle.label | ( ... ) | | array_flow.rb:179:11:179:11 | d [element 2, element 1] | semmle.label | d [element 2, element 1] | @@ -2351,12 +2609,14 @@ nodes | array_flow.rb:180:11:180:22 | call to assoc [element 1] | semmle.label | call to assoc [element 1] | | array_flow.rb:180:11:180:25 | ...[...] | semmle.label | ...[...] | | array_flow.rb:184:5:184:5 | a [element 1] | semmle.label | a [element 1] | +| array_flow.rb:184:9:184:26 | call to [] [element 1] | semmle.label | call to [] [element 1] | | array_flow.rb:184:13:184:22 | call to source | semmle.label | call to source | | array_flow.rb:186:10:186:10 | a [element 1] | semmle.label | a [element 1] | | array_flow.rb:186:10:186:16 | call to at | semmle.label | call to at | | array_flow.rb:188:10:188:10 | a [element 1] | semmle.label | a [element 1] | | array_flow.rb:188:10:188:16 | call to at | semmle.label | call to at | | array_flow.rb:192:5:192:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:192:9:192:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:192:16:192:25 | call to source | semmle.label | call to source | | array_flow.rb:193:5:193:5 | b | semmle.label | b | | array_flow.rb:193:9:193:9 | a [element 2] | semmle.label | a [element 2] | @@ -2365,17 +2625,21 @@ nodes | array_flow.rb:194:14:194:14 | x | semmle.label | x | | array_flow.rb:196:10:196:10 | b | semmle.label | b | | array_flow.rb:200:5:200:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:200:9:200:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:200:16:200:25 | call to source | semmle.label | call to source | | array_flow.rb:201:9:201:9 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:201:29:201:29 | x | semmle.label | x | | array_flow.rb:202:14:202:14 | x | semmle.label | x | | array_flow.rb:208:5:208:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:208:9:208:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:208:16:208:25 | call to source | semmle.label | call to source | | array_flow.rb:209:5:209:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:209:17:209:17 | x | semmle.label | x | | array_flow.rb:210:14:210:14 | x | semmle.label | x | | array_flow.rb:215:5:215:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:215:5:215:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:215:9:215:42 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:215:9:215:42 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:215:16:215:27 | call to source | semmle.label | call to source | | array_flow.rb:215:30:215:41 | call to source | semmle.label | call to source | | array_flow.rb:216:9:216:9 | a [element 2] | semmle.label | a [element 2] | @@ -2385,6 +2649,7 @@ nodes | array_flow.rb:217:14:217:14 | x | semmle.label | x | | array_flow.rb:218:14:218:14 | y | semmle.label | y | | array_flow.rb:231:5:231:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:231:9:231:28 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:231:16:231:27 | call to source | semmle.label | call to source | | array_flow.rb:232:5:232:5 | b [element] | semmle.label | b [element] | | array_flow.rb:232:9:232:9 | a [element 2] | semmle.label | a [element 2] | @@ -2395,6 +2660,7 @@ nodes | array_flow.rb:236:10:236:10 | b [element] | semmle.label | b [element] | | array_flow.rb:236:10:236:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:240:5:240:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:240:9:240:28 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:240:16:240:27 | call to source | semmle.label | call to source | | array_flow.rb:241:5:241:5 | b [element] | semmle.label | b [element] | | array_flow.rb:241:9:241:9 | [post] a [element] | semmle.label | [post] a [element] | @@ -2408,12 +2674,16 @@ nodes | array_flow.rb:246:10:246:10 | b [element] | semmle.label | b [element] | | array_flow.rb:246:10:246:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:250:5:250:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:250:9:250:28 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:250:16:250:27 | call to source | semmle.label | call to source | | array_flow.rb:251:5:251:5 | b [element] | semmle.label | b [element] | | array_flow.rb:251:9:251:9 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:251:9:254:7 | call to collect_concat [element] | semmle.label | call to collect_concat [element] | | array_flow.rb:251:30:251:30 | x | semmle.label | x | | array_flow.rb:252:14:252:14 | x | semmle.label | x | +| array_flow.rb:253:9:253:25 | call to [] [element 0] | semmle.label | call to [] [element 0] | +| array_flow.rb:253:9:253:25 | call to [] [element 1] | semmle.label | call to [] [element 1] | +| array_flow.rb:253:10:253:10 | x | semmle.label | x | | array_flow.rb:253:13:253:24 | call to source | semmle.label | call to source | | array_flow.rb:255:10:255:10 | b [element] | semmle.label | b [element] | | array_flow.rb:255:10:255:13 | ...[...] | semmle.label | ...[...] | @@ -2426,6 +2696,7 @@ nodes | array_flow.rb:260:10:260:10 | b [element] | semmle.label | b [element] | | array_flow.rb:260:10:260:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:264:5:264:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:264:9:264:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:264:16:264:25 | call to source | semmle.label | call to source | | array_flow.rb:265:5:265:5 | b [element 2] | semmle.label | b [element 2] | | array_flow.rb:265:9:265:9 | a [element 2] | semmle.label | a [element 2] | @@ -2436,6 +2707,7 @@ nodes | array_flow.rb:269:10:269:10 | b [element 2] | semmle.label | b [element 2] | | array_flow.rb:269:10:269:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:273:5:273:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:273:9:273:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:273:16:273:25 | call to source | semmle.label | call to source | | array_flow.rb:274:5:274:5 | b [element] | semmle.label | b [element] | | array_flow.rb:274:9:274:9 | a [element 2] | semmle.label | a [element 2] | @@ -2443,6 +2715,7 @@ nodes | array_flow.rb:275:10:275:10 | b [element] | semmle.label | b [element] | | array_flow.rb:275:10:275:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:279:5:279:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:279:9:279:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:279:16:279:25 | call to source | semmle.label | call to source | | array_flow.rb:280:5:280:5 | b [element] | semmle.label | b [element] | | array_flow.rb:280:9:280:9 | [post] a [element] | semmle.label | [post] a [element] | @@ -2453,8 +2726,10 @@ nodes | array_flow.rb:282:10:282:10 | b [element] | semmle.label | b [element] | | array_flow.rb:282:10:282:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:286:5:286:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:286:9:286:28 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:286:16:286:27 | call to source | semmle.label | call to source | | array_flow.rb:287:5:287:5 | b [element 2] | semmle.label | b [element 2] | +| array_flow.rb:287:9:287:28 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:287:16:287:27 | call to source | semmle.label | call to source | | array_flow.rb:288:5:288:5 | [post] a [element] | semmle.label | [post] a [element] | | array_flow.rb:288:14:288:14 | b [element 2] | semmle.label | b [element 2] | @@ -2464,16 +2739,19 @@ nodes | array_flow.rb:290:10:290:10 | a [element] | semmle.label | a [element] | | array_flow.rb:290:10:290:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:294:5:294:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:294:9:294:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:294:16:294:25 | call to source | semmle.label | call to source | | array_flow.rb:295:5:295:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:295:17:295:17 | x | semmle.label | x | | array_flow.rb:296:14:296:14 | x | semmle.label | x | | array_flow.rb:301:5:301:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:301:9:301:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:301:16:301:25 | call to source | semmle.label | call to source | | array_flow.rb:302:5:302:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:302:20:302:20 | x | semmle.label | x | | array_flow.rb:303:14:303:14 | x | semmle.label | x | | array_flow.rb:308:5:308:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:308:9:308:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:308:16:308:25 | call to source | semmle.label | call to source | | array_flow.rb:309:5:309:5 | b [element 2] | semmle.label | b [element 2] | | array_flow.rb:309:9:309:9 | a [element 2] | semmle.label | a [element 2] | @@ -2481,6 +2759,7 @@ nodes | array_flow.rb:312:10:312:10 | b [element 2] | semmle.label | b [element 2] | | array_flow.rb:312:10:312:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:316:5:316:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:316:9:316:28 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:316:16:316:27 | call to source | semmle.label | call to source | | array_flow.rb:317:5:317:5 | b | semmle.label | b | | array_flow.rb:317:9:317:9 | a [element 2] | semmle.label | a [element 2] | @@ -2489,6 +2768,8 @@ nodes | array_flow.rb:318:10:318:10 | b | semmle.label | b | | array_flow.rb:325:5:325:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:325:5:325:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:325:9:325:42 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:325:9:325:42 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:325:16:325:27 | call to source | semmle.label | call to source | | array_flow.rb:325:30:325:41 | call to source | semmle.label | call to source | | array_flow.rb:326:5:326:5 | b | semmle.label | b | @@ -2501,6 +2782,8 @@ nodes | array_flow.rb:328:10:328:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:330:5:330:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:330:5:330:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:330:9:330:42 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:330:9:330:42 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:330:16:330:27 | call to source | semmle.label | call to source | | array_flow.rb:330:30:330:41 | call to source | semmle.label | call to source | | array_flow.rb:331:5:331:5 | b | semmle.label | b | @@ -2514,6 +2797,7 @@ nodes | array_flow.rb:334:10:334:10 | a [element] | semmle.label | a [element] | | array_flow.rb:334:10:334:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:338:5:338:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:338:9:338:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:338:16:338:25 | call to source | semmle.label | call to source | | array_flow.rb:339:5:339:5 | b [element] | semmle.label | b [element] | | array_flow.rb:339:9:339:9 | [post] a [element] | semmle.label | [post] a [element] | @@ -2530,6 +2814,7 @@ nodes | array_flow.rb:345:10:345:10 | a [element] | semmle.label | a [element] | | array_flow.rb:345:10:345:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:349:5:349:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:349:9:349:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:349:16:349:25 | call to source | semmle.label | call to source | | array_flow.rb:350:5:350:5 | b [element] | semmle.label | b [element] | | array_flow.rb:350:9:350:9 | a [element 2] | semmle.label | a [element 2] | @@ -2538,7 +2823,10 @@ nodes | array_flow.rb:351:10:351:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:355:5:355:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:355:5:355:5 | a [element 3, element 1] | semmle.label | a [element 3, element 1] | +| array_flow.rb:355:9:355:47 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:355:9:355:47 | call to [] [element 3, element 1] | semmle.label | call to [] [element 3, element 1] | | array_flow.rb:355:16:355:27 | call to source | semmle.label | call to source | +| array_flow.rb:355:30:355:46 | call to [] [element 1] | semmle.label | call to [] [element 1] | | array_flow.rb:355:34:355:45 | call to source | semmle.label | call to source | | array_flow.rb:357:10:357:10 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:357:10:357:17 | call to dig | semmle.label | call to dig | @@ -2547,6 +2835,7 @@ nodes | array_flow.rb:360:10:360:10 | a [element 3, element 1] | semmle.label | a [element 3, element 1] | | array_flow.rb:360:10:360:19 | call to dig | semmle.label | call to dig | | array_flow.rb:364:5:364:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:364:9:364:28 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:364:16:364:27 | call to source | semmle.label | call to source | | array_flow.rb:365:5:365:5 | b | semmle.label | b | | array_flow.rb:365:9:365:9 | a [element 2] | semmle.label | a [element 2] | @@ -2557,6 +2846,8 @@ nodes | array_flow.rb:368:10:368:10 | b | semmle.label | b | | array_flow.rb:372:5:372:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:372:5:372:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:372:9:372:42 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:372:9:372:42 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:372:16:372:27 | call to source | semmle.label | call to source | | array_flow.rb:372:30:372:41 | call to source | semmle.label | call to source | | array_flow.rb:373:5:373:5 | b [element] | semmle.label | b [element] | @@ -2594,6 +2885,8 @@ nodes | array_flow.rb:383:10:383:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:387:5:387:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:387:5:387:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:387:9:387:42 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:387:9:387:42 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:387:16:387:27 | call to source | semmle.label | call to source | | array_flow.rb:387:30:387:41 | call to source | semmle.label | call to source | | array_flow.rb:388:5:388:5 | b [element] | semmle.label | b [element] | @@ -2605,6 +2898,7 @@ nodes | array_flow.rb:391:10:391:10 | b [element] | semmle.label | b [element] | | array_flow.rb:391:10:391:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:395:5:395:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:395:9:395:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:395:16:395:25 | call to source | semmle.label | call to source | | array_flow.rb:396:5:396:5 | b [element 2] | semmle.label | b [element 2] | | array_flow.rb:396:9:396:9 | a [element 2] | semmle.label | a [element 2] | @@ -2614,16 +2908,16 @@ nodes | array_flow.rb:399:10:399:10 | b [element 2] | semmle.label | b [element 2] | | array_flow.rb:399:10:399:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:403:5:403:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:403:9:403:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:403:16:403:25 | call to source | semmle.label | call to source | | array_flow.rb:404:5:404:5 | b [element 2] | semmle.label | b [element 2] | -| array_flow.rb:404:9:406:7 | [post] { ... } [captured x] | semmle.label | [post] { ... } [captured x] | -| array_flow.rb:404:9:406:7 | __synth__0__1 | semmle.label | __synth__0__1 | | array_flow.rb:404:18:404:18 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:405:14:405:14 | x | semmle.label | x | | array_flow.rb:407:10:407:10 | x | semmle.label | x | | array_flow.rb:408:10:408:10 | b [element 2] | semmle.label | b [element 2] | | array_flow.rb:408:10:408:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:412:5:412:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:412:9:412:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:412:16:412:25 | call to source | semmle.label | call to source | | array_flow.rb:413:5:413:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:413:24:413:24 | x [element] | semmle.label | x [element] | @@ -2631,6 +2925,7 @@ nodes | array_flow.rb:414:15:414:15 | x [element] | semmle.label | x [element] | | array_flow.rb:414:15:414:18 | ...[...] | semmle.label | ...[...] | | array_flow.rb:419:5:419:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:419:9:419:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:419:16:419:25 | call to source | semmle.label | call to source | | array_flow.rb:420:5:420:5 | b [element 2] | semmle.label | b [element 2] | | array_flow.rb:420:9:420:9 | a [element 2] | semmle.label | a [element 2] | @@ -2640,6 +2935,7 @@ nodes | array_flow.rb:423:10:423:10 | b [element 2] | semmle.label | b [element 2] | | array_flow.rb:423:10:423:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:427:5:427:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:427:9:427:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:427:16:427:25 | call to source | semmle.label | call to source | | array_flow.rb:428:5:428:5 | b [element 2] | semmle.label | b [element 2] | | array_flow.rb:428:9:428:9 | a [element 2] | semmle.label | a [element 2] | @@ -2647,12 +2943,14 @@ nodes | array_flow.rb:431:10:431:10 | b [element 2] | semmle.label | b [element 2] | | array_flow.rb:431:10:431:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:435:5:435:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:435:9:435:29 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:435:19:435:28 | call to source | semmle.label | call to source | | array_flow.rb:436:5:436:5 | a [element 3] | semmle.label | a [element 3] | | array_flow.rb:436:25:436:25 | x [element] | semmle.label | x [element] | | array_flow.rb:437:14:437:14 | x [element] | semmle.label | x [element] | | array_flow.rb:437:14:437:17 | ...[...] | semmle.label | ...[...] | | array_flow.rb:442:5:442:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:442:9:442:29 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:442:19:442:28 | call to source | semmle.label | call to source | | array_flow.rb:443:5:443:5 | b [element 3] | semmle.label | b [element 3] | | array_flow.rb:443:9:443:9 | a [element 3] | semmle.label | a [element 3] | @@ -2662,6 +2960,7 @@ nodes | array_flow.rb:447:10:447:10 | b [element 3] | semmle.label | b [element 3] | | array_flow.rb:447:10:447:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:451:5:451:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:451:9:451:31 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:451:19:451:30 | call to source | semmle.label | call to source | | array_flow.rb:452:5:452:5 | b | semmle.label | b | | array_flow.rb:452:9:452:9 | a [element 3] | semmle.label | a [element 3] | @@ -2673,6 +2972,7 @@ nodes | array_flow.rb:454:14:454:14 | a | semmle.label | a | | array_flow.rb:456:10:456:10 | b | semmle.label | b | | array_flow.rb:460:5:460:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:460:9:460:29 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:460:19:460:28 | call to source | semmle.label | call to source | | array_flow.rb:461:5:461:5 | b [element 3] | semmle.label | b [element 3] | | array_flow.rb:461:9:461:9 | a [element 3] | semmle.label | a [element 3] | @@ -2681,6 +2981,8 @@ nodes | array_flow.rb:462:10:462:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:466:5:466:5 | a [element 3] | semmle.label | a [element 3] | | array_flow.rb:466:5:466:5 | a [element 4] | semmle.label | a [element 4] | +| array_flow.rb:466:9:466:45 | call to [] [element 3] | semmle.label | call to [] [element 3] | +| array_flow.rb:466:9:466:45 | call to [] [element 4] | semmle.label | call to [] [element 4] | | array_flow.rb:466:19:466:30 | call to source | semmle.label | call to source | | array_flow.rb:466:33:466:44 | call to source | semmle.label | call to source | | array_flow.rb:467:5:467:5 | b | semmle.label | b | @@ -2711,6 +3013,7 @@ nodes | array_flow.rb:477:20:477:31 | call to source | semmle.label | call to source | | array_flow.rb:478:10:478:10 | b | semmle.label | b | | array_flow.rb:482:5:482:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:482:9:482:31 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:482:19:482:30 | call to source | semmle.label | call to source | | array_flow.rb:483:5:483:5 | [post] a [element] | semmle.label | [post] a [element] | | array_flow.rb:483:12:483:23 | call to source | semmle.label | call to source | @@ -2730,6 +3033,7 @@ nodes | array_flow.rb:494:10:494:10 | a [element] | semmle.label | a [element] | | array_flow.rb:494:10:494:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:498:5:498:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:498:9:498:29 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:498:19:498:28 | call to source | semmle.label | call to source | | array_flow.rb:499:5:499:5 | b [element] | semmle.label | b [element] | | array_flow.rb:499:9:499:9 | a [element 3] | semmle.label | a [element 3] | @@ -2739,12 +3043,14 @@ nodes | array_flow.rb:502:10:502:10 | b [element] | semmle.label | b [element] | | array_flow.rb:502:10:502:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:506:5:506:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:506:9:506:29 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:506:19:506:28 | call to source | semmle.label | call to source | | array_flow.rb:507:5:507:5 | b [element] | semmle.label | b [element] | | array_flow.rb:507:9:507:9 | a [element 3] | semmle.label | a [element 3] | | array_flow.rb:507:9:510:7 | call to filter_map [element] | semmle.label | call to filter_map [element] | | array_flow.rb:507:26:507:26 | x | semmle.label | x | | array_flow.rb:508:14:508:14 | x | semmle.label | x | +| array_flow.rb:509:9:509:9 | x | semmle.label | x | | array_flow.rb:511:10:511:10 | b [element] | semmle.label | b [element] | | array_flow.rb:511:10:511:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:518:5:518:5 | d [element] | semmle.label | d [element] | @@ -2753,6 +3059,7 @@ nodes | array_flow.rb:521:10:521:10 | d [element] | semmle.label | d [element] | | array_flow.rb:521:10:521:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:525:5:525:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:525:9:525:29 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:525:19:525:28 | call to source | semmle.label | call to source | | array_flow.rb:526:5:526:5 | b [element] | semmle.label | b [element] | | array_flow.rb:526:9:526:9 | [post] a [element] | semmle.label | [post] a [element] | @@ -2765,6 +3072,7 @@ nodes | array_flow.rb:531:10:531:10 | b [element] | semmle.label | b [element] | | array_flow.rb:531:10:531:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:535:5:535:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:535:9:535:31 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:535:19:535:30 | call to source | semmle.label | call to source | | array_flow.rb:536:5:536:5 | b | semmle.label | b | | array_flow.rb:536:9:536:9 | a [element 3] | semmle.label | a [element 3] | @@ -2774,6 +3082,7 @@ nodes | array_flow.rb:537:14:537:14 | x | semmle.label | x | | array_flow.rb:539:10:539:10 | b | semmle.label | b | | array_flow.rb:543:5:543:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:543:9:543:29 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:543:19:543:28 | call to source | semmle.label | call to source | | array_flow.rb:544:5:544:5 | b [element] | semmle.label | b [element] | | array_flow.rb:544:9:544:9 | a [element 3] | semmle.label | a [element 3] | @@ -2783,12 +3092,15 @@ nodes | array_flow.rb:547:10:547:10 | b [element] | semmle.label | b [element] | | array_flow.rb:547:10:547:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:551:5:551:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:551:9:551:29 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:551:19:551:28 | call to source | semmle.label | call to source | | array_flow.rb:552:5:552:5 | a [element 3] | semmle.label | a [element 3] | | array_flow.rb:552:22:552:22 | x | semmle.label | x | | array_flow.rb:553:14:553:14 | x | semmle.label | x | | array_flow.rb:558:5:558:5 | a [element 0] | semmle.label | a [element 0] | | array_flow.rb:558:5:558:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:558:9:558:42 | call to [] [element 0] | semmle.label | call to [] [element 0] | +| array_flow.rb:558:9:558:42 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:558:10:558:21 | call to source | semmle.label | call to source | | array_flow.rb:558:30:558:41 | call to source | semmle.label | call to source | | array_flow.rb:559:5:559:5 | [post] a [element] | semmle.label | [post] a [element] | @@ -2823,12 +3135,16 @@ nodes | array_flow.rb:566:10:566:10 | c [element] | semmle.label | c [element] | | array_flow.rb:566:10:566:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:570:5:570:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:570:9:570:28 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:570:16:570:27 | call to source | semmle.label | call to source | | array_flow.rb:571:5:571:5 | b [element] | semmle.label | b [element] | | array_flow.rb:571:9:571:9 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:571:9:574:7 | call to flat_map [element] | semmle.label | call to flat_map [element] | | array_flow.rb:571:24:571:24 | x | semmle.label | x | | array_flow.rb:572:14:572:14 | x | semmle.label | x | +| array_flow.rb:573:9:573:25 | call to [] [element 0] | semmle.label | call to [] [element 0] | +| array_flow.rb:573:9:573:25 | call to [] [element 1] | semmle.label | call to [] [element 1] | +| array_flow.rb:573:10:573:10 | x | semmle.label | x | | array_flow.rb:573:13:573:24 | call to source | semmle.label | call to source | | array_flow.rb:575:10:575:10 | b [element] | semmle.label | b [element] | | array_flow.rb:575:10:575:13 | ...[...] | semmle.label | ...[...] | @@ -2841,6 +3157,8 @@ nodes | array_flow.rb:580:10:580:10 | b [element] | semmle.label | b [element] | | array_flow.rb:580:10:580:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:584:5:584:5 | a [element 2, element 1] | semmle.label | a [element 2, element 1] | +| array_flow.rb:584:9:584:31 | call to [] [element 2, element 1] | semmle.label | call to [] [element 2, element 1] | +| array_flow.rb:584:16:584:30 | call to [] [element 1] | semmle.label | call to [] [element 1] | | array_flow.rb:584:20:584:29 | call to source | semmle.label | call to source | | array_flow.rb:585:5:585:5 | b [element] | semmle.label | b [element] | | array_flow.rb:585:9:585:9 | a [element 2, element 1] | semmle.label | a [element 2, element 1] | @@ -2848,6 +3166,8 @@ nodes | array_flow.rb:586:10:586:10 | b [element] | semmle.label | b [element] | | array_flow.rb:586:10:586:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:590:5:590:5 | a [element 2, element 1] | semmle.label | a [element 2, element 1] | +| array_flow.rb:590:9:590:31 | call to [] [element 2, element 1] | semmle.label | call to [] [element 2, element 1] | +| array_flow.rb:590:16:590:30 | call to [] [element 1] | semmle.label | call to [] [element 1] | | array_flow.rb:590:20:590:29 | call to source | semmle.label | call to source | | array_flow.rb:591:10:591:10 | a [element 2, element 1] | semmle.label | a [element 2, element 1] | | array_flow.rb:591:10:591:13 | ...[...] [element 1] | semmle.label | ...[...] [element 1] | @@ -2870,6 +3190,7 @@ nodes | array_flow.rb:596:10:596:13 | ...[...] [element 1] | semmle.label | ...[...] [element 1] | | array_flow.rb:596:10:596:16 | ...[...] | semmle.label | ...[...] | | array_flow.rb:600:5:600:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:600:9:600:31 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:600:19:600:30 | call to source | semmle.label | call to source | | array_flow.rb:601:5:601:5 | b [element] | semmle.label | b [element] | | array_flow.rb:601:9:601:9 | a [element 3] | semmle.label | a [element 3] | @@ -2885,6 +3206,7 @@ nodes | array_flow.rb:607:10:607:10 | b [element] | semmle.label | b [element] | | array_flow.rb:607:10:607:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:611:5:611:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:611:9:611:31 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:611:19:611:30 | call to source | semmle.label | call to source | | array_flow.rb:612:5:612:5 | b [element] | semmle.label | b [element] | | array_flow.rb:612:9:612:9 | a [element 3] | semmle.label | a [element 3] | @@ -2900,17 +3222,21 @@ nodes | array_flow.rb:618:10:618:10 | b [element] | semmle.label | b [element] | | array_flow.rb:618:10:618:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:622:5:622:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:622:9:622:31 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:622:19:622:30 | call to source | semmle.label | call to source | | array_flow.rb:623:9:623:9 | a [element 3] | semmle.label | a [element 3] | | array_flow.rb:623:24:623:24 | x | semmle.label | x | | array_flow.rb:624:14:624:14 | x | semmle.label | x | | array_flow.rb:631:5:631:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:631:9:631:29 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:631:19:631:28 | call to source | semmle.label | call to source | | array_flow.rb:632:5:632:5 | a [element 3] | semmle.label | a [element 3] | | array_flow.rb:632:17:632:17 | x | semmle.label | x | | array_flow.rb:633:14:633:14 | x | semmle.label | x | | array_flow.rb:638:5:638:5 | a [element 0] | semmle.label | a [element 0] | | array_flow.rb:638:5:638:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:638:9:638:39 | call to [] [element 0] | semmle.label | call to [] [element 0] | +| array_flow.rb:638:9:638:39 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:638:10:638:21 | call to source | semmle.label | call to source | | array_flow.rb:638:27:638:38 | call to source | semmle.label | call to source | | array_flow.rb:639:5:639:5 | b | semmle.label | b | @@ -2932,6 +3258,7 @@ nodes | array_flow.rb:648:9:648:19 | call to source | semmle.label | call to source | | array_flow.rb:650:10:650:10 | c | semmle.label | c | | array_flow.rb:655:5:655:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:655:9:655:28 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:655:16:655:27 | call to source | semmle.label | call to source | | array_flow.rb:656:5:656:5 | b [element 1] | semmle.label | b [element 1] | | array_flow.rb:656:5:656:5 | b [element 2] | semmle.label | b [element 2] | @@ -2958,6 +3285,7 @@ nodes | array_flow.rb:666:10:666:10 | b [element 4] | semmle.label | b [element 4] | | array_flow.rb:666:10:666:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:669:5:669:5 | c [element 2] | semmle.label | c [element 2] | +| array_flow.rb:669:9:669:28 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:669:16:669:27 | call to source | semmle.label | call to source | | array_flow.rb:670:5:670:5 | d [element] | semmle.label | d [element] | | array_flow.rb:670:9:670:9 | [post] c [element] | semmle.label | [post] c [element] | @@ -2970,15 +3298,19 @@ nodes | array_flow.rb:672:10:672:10 | d [element] | semmle.label | d [element] | | array_flow.rb:672:10:672:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:683:5:683:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:683:9:683:28 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:683:16:683:27 | call to source | semmle.label | call to source | | array_flow.rb:684:5:684:5 | b [element] | semmle.label | b [element] | | array_flow.rb:684:9:684:9 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:684:9:684:60 | call to intersection [element] | semmle.label | call to intersection [element] | +| array_flow.rb:684:24:684:43 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:684:31:684:42 | call to source | semmle.label | call to source | +| array_flow.rb:684:46:684:59 | call to [] [element 0] | semmle.label | call to [] [element 0] | | array_flow.rb:684:47:684:58 | call to source | semmle.label | call to source | | array_flow.rb:685:10:685:10 | b [element] | semmle.label | b [element] | | array_flow.rb:685:10:685:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:689:5:689:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:689:9:689:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:689:16:689:25 | call to source | semmle.label | call to source | | array_flow.rb:690:5:690:5 | b [element] | semmle.label | b [element] | | array_flow.rb:690:9:690:9 | [post] a [element] | semmle.label | [post] a [element] | @@ -2991,6 +3323,7 @@ nodes | array_flow.rb:695:10:695:10 | b [element] | semmle.label | b [element] | | array_flow.rb:695:10:695:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:699:5:699:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:699:9:699:28 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:699:16:699:27 | call to source | semmle.label | call to source | | array_flow.rb:700:5:700:5 | [post] a [element] | semmle.label | [post] a [element] | | array_flow.rb:700:12:700:23 | call to source | semmle.label | call to source | @@ -3006,6 +3339,7 @@ nodes | array_flow.rb:704:10:704:10 | b [element] | semmle.label | b [element] | | array_flow.rb:704:10:704:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:708:5:708:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:708:9:708:28 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:708:16:708:27 | call to source | semmle.label | call to source | | array_flow.rb:709:5:709:5 | b [element] | semmle.label | b [element] | | array_flow.rb:709:9:709:9 | a [element 2] | semmle.label | a [element 2] | @@ -3016,6 +3350,7 @@ nodes | array_flow.rb:713:10:713:10 | b [element] | semmle.label | b [element] | | array_flow.rb:713:10:713:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:717:5:717:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:717:9:717:28 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:717:16:717:27 | call to source | semmle.label | call to source | | array_flow.rb:718:5:718:5 | b [element] | semmle.label | b [element] | | array_flow.rb:718:9:718:9 | a [element 2] | semmle.label | a [element 2] | @@ -3026,6 +3361,7 @@ nodes | array_flow.rb:722:10:722:10 | b [element] | semmle.label | b [element] | | array_flow.rb:722:10:722:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:726:5:726:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:726:9:726:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:726:16:726:25 | call to source | semmle.label | call to source | | array_flow.rb:729:5:729:5 | b | semmle.label | b | | array_flow.rb:729:9:729:9 | a [element 2] | semmle.label | a [element 2] | @@ -3054,6 +3390,7 @@ nodes | array_flow.rb:750:10:750:10 | e [element] | semmle.label | e [element] | | array_flow.rb:750:10:750:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:754:5:754:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:754:9:754:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:754:16:754:25 | call to source | semmle.label | call to source | | array_flow.rb:757:5:757:5 | b | semmle.label | b | | array_flow.rb:757:9:757:9 | a [element 2] | semmle.label | a [element 2] | @@ -3069,6 +3406,7 @@ nodes | array_flow.rb:768:10:768:10 | c [element] | semmle.label | c [element] | | array_flow.rb:768:10:768:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:772:5:772:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:772:9:772:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:772:16:772:25 | call to source | semmle.label | call to source | | array_flow.rb:775:5:775:5 | b | semmle.label | b | | array_flow.rb:775:9:775:9 | a [element 2] | semmle.label | a [element 2] | @@ -3097,6 +3435,7 @@ nodes | array_flow.rb:796:10:796:10 | e [element] | semmle.label | e [element] | | array_flow.rb:796:10:796:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:800:5:800:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:800:9:800:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:800:16:800:25 | call to source | semmle.label | call to source | | array_flow.rb:803:5:803:5 | b | semmle.label | b | | array_flow.rb:803:9:803:9 | a [element 2] | semmle.label | a [element 2] | @@ -3112,6 +3451,7 @@ nodes | array_flow.rb:814:10:814:10 | c [element] | semmle.label | c [element] | | array_flow.rb:814:10:814:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:818:5:818:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:818:9:818:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:818:16:818:25 | call to source | semmle.label | call to source | | array_flow.rb:820:5:820:5 | b [element] | semmle.label | b [element] | | array_flow.rb:820:9:820:9 | a [element 2] | semmle.label | a [element 2] | @@ -3132,6 +3472,7 @@ nodes | array_flow.rb:830:10:830:10 | c [element] | semmle.label | c [element] | | array_flow.rb:830:10:830:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:834:5:834:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:834:9:834:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:834:16:834:25 | call to source | semmle.label | call to source | | array_flow.rb:835:5:835:5 | b [element] | semmle.label | b [element] | | array_flow.rb:835:9:835:9 | a [element 2] | semmle.label | a [element 2] | @@ -3143,16 +3484,19 @@ nodes | array_flow.rb:840:10:840:10 | b [element] | semmle.label | b [element] | | array_flow.rb:840:10:840:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:844:5:844:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:844:9:844:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:844:16:844:25 | call to source | semmle.label | call to source | | array_flow.rb:845:5:845:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:845:17:845:17 | x | semmle.label | x | | array_flow.rb:846:14:846:14 | x | semmle.label | x | | array_flow.rb:853:5:853:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:853:9:853:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:853:16:853:25 | call to source | semmle.label | call to source | | array_flow.rb:854:5:854:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:854:16:854:16 | x | semmle.label | x | | array_flow.rb:855:14:855:14 | x | semmle.label | x | | array_flow.rb:866:5:866:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:866:9:866:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:866:16:866:25 | call to source | semmle.label | call to source | | array_flow.rb:867:5:867:5 | b [element, element] | semmle.label | b [element, element] | | array_flow.rb:867:9:867:9 | a [element 2] | semmle.label | a [element 2] | @@ -3166,6 +3510,7 @@ nodes | array_flow.rb:872:10:872:13 | ...[...] [element] | semmle.label | ...[...] [element] | | array_flow.rb:872:10:872:16 | ...[...] | semmle.label | ...[...] | | array_flow.rb:876:5:876:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:876:9:876:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:876:16:876:25 | call to source | semmle.label | call to source | | array_flow.rb:878:5:878:5 | b [element 2] | semmle.label | b [element 2] | | array_flow.rb:878:9:878:9 | a [element 2] | semmle.label | a [element 2] | @@ -3199,6 +3544,8 @@ nodes | array_flow.rb:898:10:898:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:905:5:905:5 | a [element 1] | semmle.label | a [element 1] | | array_flow.rb:905:5:905:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:905:9:905:42 | call to [] [element 1] | semmle.label | call to [] [element 1] | +| array_flow.rb:905:9:905:42 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:905:13:905:24 | call to source | semmle.label | call to source | | array_flow.rb:905:30:905:41 | call to source | semmle.label | call to source | | array_flow.rb:906:5:906:5 | b | semmle.label | b | @@ -3212,6 +3559,8 @@ nodes | array_flow.rb:911:10:911:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:913:5:913:5 | a [element 1] | semmle.label | a [element 1] | | array_flow.rb:913:5:913:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:913:9:913:42 | call to [] [element 1] | semmle.label | call to [] [element 1] | +| array_flow.rb:913:9:913:42 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:913:13:913:24 | call to source | semmle.label | call to source | | array_flow.rb:913:30:913:41 | call to source | semmle.label | call to source | | array_flow.rb:914:5:914:5 | b [element] | semmle.label | b [element] | @@ -3227,6 +3576,7 @@ nodes | array_flow.rb:920:10:920:10 | a [element 3] | semmle.label | a [element 3] | | array_flow.rb:920:10:920:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:924:5:924:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:924:9:924:28 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:924:16:924:27 | call to source | semmle.label | call to source | | array_flow.rb:925:5:925:5 | [post] a [element 2] | semmle.label | [post] a [element 2] | | array_flow.rb:925:5:925:5 | [post] a [element 5] | semmle.label | [post] a [element 5] | @@ -3237,10 +3587,13 @@ nodes | array_flow.rb:931:10:931:10 | a [element 5] | semmle.label | a [element 5] | | array_flow.rb:931:10:931:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:935:5:935:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:935:9:935:28 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:935:16:935:27 | call to source | semmle.label | call to source | | array_flow.rb:936:5:936:5 | b [element 1] | semmle.label | b [element 1] | +| array_flow.rb:936:9:936:28 | call to [] [element 1] | semmle.label | call to [] [element 1] | | array_flow.rb:936:13:936:24 | call to source | semmle.label | call to source | | array_flow.rb:937:5:937:5 | c [element 0] | semmle.label | c [element 0] | +| array_flow.rb:937:9:937:28 | call to [] [element 0] | semmle.label | call to [] [element 0] | | array_flow.rb:937:10:937:21 | call to source | semmle.label | call to source | | array_flow.rb:938:5:938:5 | d [element, element] | semmle.label | d [element, element] | | array_flow.rb:938:9:938:9 | a [element 2] | semmle.label | a [element 2] | @@ -3254,6 +3607,7 @@ nodes | array_flow.rb:940:10:940:13 | ...[...] [element] | semmle.label | ...[...] [element] | | array_flow.rb:940:10:940:16 | ...[...] | semmle.label | ...[...] | | array_flow.rb:944:5:944:5 | a [element 0] | semmle.label | a [element 0] | +| array_flow.rb:944:9:944:25 | call to [] [element 0] | semmle.label | call to [] [element 0] | | array_flow.rb:944:10:944:21 | call to source | semmle.label | call to source | | array_flow.rb:945:5:945:5 | b [element 0] | semmle.label | b [element 0] | | array_flow.rb:945:5:945:5 | b [element] | semmle.label | b [element] | @@ -3274,8 +3628,10 @@ nodes | array_flow.rb:949:10:949:10 | b [element] | semmle.label | b [element] | | array_flow.rb:949:10:949:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:955:5:955:5 | c [element 0] | semmle.label | c [element 0] | +| array_flow.rb:955:9:955:25 | call to [] [element 0] | semmle.label | call to [] [element 0] | | array_flow.rb:955:10:955:19 | call to source | semmle.label | call to source | | array_flow.rb:956:5:956:5 | d [element 2, element 0] | semmle.label | d [element 2, element 0] | +| array_flow.rb:956:9:956:17 | call to [] [element 2, element 0] | semmle.label | call to [] [element 2, element 0] | | array_flow.rb:956:16:956:16 | c [element 0] | semmle.label | c [element 0] | | array_flow.rb:957:10:957:10 | d [element 2, element 0] | semmle.label | d [element 2, element 0] | | array_flow.rb:957:10:957:22 | call to rassoc [element 0] | semmle.label | call to rassoc [element 0] | @@ -3285,6 +3641,8 @@ nodes | array_flow.rb:958:10:958:25 | ...[...] | semmle.label | ...[...] | | array_flow.rb:962:5:962:5 | a [element 0] | semmle.label | a [element 0] | | array_flow.rb:962:5:962:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:962:9:962:39 | call to [] [element 0] | semmle.label | call to [] [element 0] | +| array_flow.rb:962:9:962:39 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:962:10:962:21 | call to source | semmle.label | call to source | | array_flow.rb:962:27:962:38 | call to source | semmle.label | call to source | | array_flow.rb:963:9:963:9 | a [element 0] | semmle.label | a [element 0] | @@ -3298,6 +3656,7 @@ nodes | array_flow.rb:968:28:968:28 | y | semmle.label | y | | array_flow.rb:970:14:970:14 | y | semmle.label | y | | array_flow.rb:976:5:976:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:976:9:976:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:976:16:976:25 | call to source | semmle.label | call to source | | array_flow.rb:977:5:977:5 | b [element] | semmle.label | b [element] | | array_flow.rb:977:9:977:9 | a [element 2] | semmle.label | a [element 2] | @@ -3307,6 +3666,7 @@ nodes | array_flow.rb:981:10:981:10 | b [element] | semmle.label | b [element] | | array_flow.rb:981:10:981:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:985:5:985:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:985:9:985:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:985:16:985:25 | call to source | semmle.label | call to source | | array_flow.rb:986:5:986:5 | b [element] | semmle.label | b [element] | | array_flow.rb:986:9:986:9 | [post] a [element] | semmle.label | [post] a [element] | @@ -3319,6 +3679,7 @@ nodes | array_flow.rb:991:10:991:10 | b [element] | semmle.label | b [element] | | array_flow.rb:991:10:991:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:995:5:995:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:995:9:995:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:995:16:995:25 | call to source | semmle.label | call to source | | array_flow.rb:996:5:996:5 | b [element 2] | semmle.label | b [element 2] | | array_flow.rb:996:9:996:9 | a [element 2] | semmle.label | a [element 2] | @@ -3331,6 +3692,7 @@ nodes | array_flow.rb:1001:10:1001:10 | b [element 2] | semmle.label | b [element 2] | | array_flow.rb:1001:10:1001:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1005:5:1005:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1005:9:1005:26 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1005:16:1005:25 | call to source | semmle.label | call to source | | array_flow.rb:1006:5:1006:5 | b [element 2] | semmle.label | b [element 2] | | array_flow.rb:1006:9:1006:9 | a [element 2] | semmle.label | a [element 2] | @@ -3345,6 +3707,7 @@ nodes | array_flow.rb:1017:5:1017:5 | b [element 0] | semmle.label | b [element 0] | | array_flow.rb:1017:9:1017:9 | [post] a [element 0] | semmle.label | [post] a [element 0] | | array_flow.rb:1017:9:1017:33 | call to replace [element 0] | semmle.label | call to replace [element 0] | +| array_flow.rb:1017:19:1017:32 | call to [] [element 0] | semmle.label | call to [] [element 0] | | array_flow.rb:1017:20:1017:31 | call to source | semmle.label | call to source | | array_flow.rb:1018:10:1018:10 | a [element 0] | semmle.label | a [element 0] | | array_flow.rb:1018:10:1018:13 | ...[...] | semmle.label | ...[...] | @@ -3352,6 +3715,8 @@ nodes | array_flow.rb:1019:10:1019:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1023:5:1023:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1023:5:1023:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:1023:9:1023:44 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1023:9:1023:44 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:1023:16:1023:28 | call to source | semmle.label | call to source | | array_flow.rb:1023:31:1023:43 | call to source | semmle.label | call to source | | array_flow.rb:1024:5:1024:5 | b [element] | semmle.label | b [element] | @@ -3370,6 +3735,8 @@ nodes | array_flow.rb:1030:10:1030:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1034:5:1034:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1034:5:1034:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:1034:9:1034:44 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1034:9:1034:44 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:1034:16:1034:28 | call to source | semmle.label | call to source | | array_flow.rb:1034:31:1034:43 | call to source | semmle.label | call to source | | array_flow.rb:1035:5:1035:5 | b [element] | semmle.label | b [element] | @@ -3392,6 +3759,7 @@ nodes | array_flow.rb:1041:10:1041:10 | a [element] | semmle.label | a [element] | | array_flow.rb:1041:10:1041:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1045:5:1045:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1045:9:1045:27 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1045:16:1045:26 | call to source | semmle.label | call to source | | array_flow.rb:1046:5:1046:5 | b [element 2] | semmle.label | b [element 2] | | array_flow.rb:1046:9:1046:9 | a [element 2] | semmle.label | a [element 2] | @@ -3401,6 +3769,7 @@ nodes | array_flow.rb:1049:10:1049:10 | b [element 2] | semmle.label | b [element 2] | | array_flow.rb:1049:10:1049:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1053:5:1053:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1053:9:1053:27 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1053:16:1053:26 | call to source | semmle.label | call to source | | array_flow.rb:1054:5:1054:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1054:18:1054:18 | x | semmle.label | x | @@ -3408,6 +3777,9 @@ nodes | array_flow.rb:1063:5:1063:5 | a [element 0] | semmle.label | a [element 0] | | array_flow.rb:1063:5:1063:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1063:5:1063:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:1063:9:1063:56 | call to [] [element 0] | semmle.label | call to [] [element 0] | +| array_flow.rb:1063:9:1063:56 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1063:9:1063:56 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:1063:10:1063:22 | call to source | semmle.label | call to source | | array_flow.rb:1063:28:1063:40 | call to source | semmle.label | call to source | | array_flow.rb:1063:43:1063:55 | call to source | semmle.label | call to source | @@ -3480,6 +3852,9 @@ nodes | array_flow.rb:1095:5:1095:5 | a [element 0] | semmle.label | a [element 0] | | array_flow.rb:1095:5:1095:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1095:5:1095:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:1095:9:1095:56 | call to [] [element 0] | semmle.label | call to [] [element 0] | +| array_flow.rb:1095:9:1095:56 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1095:9:1095:56 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:1095:10:1095:22 | call to source | semmle.label | call to source | | array_flow.rb:1095:28:1095:40 | call to source | semmle.label | call to source | | array_flow.rb:1095:43:1095:55 | call to source | semmle.label | call to source | @@ -3518,6 +3893,9 @@ nodes | array_flow.rb:1106:5:1106:5 | a [element 0] | semmle.label | a [element 0] | | array_flow.rb:1106:5:1106:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1106:5:1106:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:1106:9:1106:56 | call to [] [element 0] | semmle.label | call to [] [element 0] | +| array_flow.rb:1106:9:1106:56 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1106:9:1106:56 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:1106:10:1106:22 | call to source | semmle.label | call to source | | array_flow.rb:1106:28:1106:40 | call to source | semmle.label | call to source | | array_flow.rb:1106:43:1106:55 | call to source | semmle.label | call to source | @@ -3556,6 +3934,9 @@ nodes | array_flow.rb:1117:5:1117:5 | a [element 0] | semmle.label | a [element 0] | | array_flow.rb:1117:5:1117:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1117:5:1117:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:1117:9:1117:56 | call to [] [element 0] | semmle.label | call to [] [element 0] | +| array_flow.rb:1117:9:1117:56 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1117:9:1117:56 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:1117:10:1117:22 | call to source | semmle.label | call to source | | array_flow.rb:1117:28:1117:40 | call to source | semmle.label | call to source | | array_flow.rb:1117:43:1117:55 | call to source | semmle.label | call to source | @@ -3586,6 +3967,9 @@ nodes | array_flow.rb:1128:5:1128:5 | a [element 0] | semmle.label | a [element 0] | | array_flow.rb:1128:5:1128:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1128:5:1128:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:1128:9:1128:56 | call to [] [element 0] | semmle.label | call to [] [element 0] | +| array_flow.rb:1128:9:1128:56 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1128:9:1128:56 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:1128:10:1128:22 | call to source | semmle.label | call to source | | array_flow.rb:1128:28:1128:40 | call to source | semmle.label | call to source | | array_flow.rb:1128:43:1128:55 | call to source | semmle.label | call to source | @@ -3612,6 +3996,7 @@ nodes | array_flow.rb:1137:10:1137:10 | b [element] | semmle.label | b [element] | | array_flow.rb:1137:10:1137:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1141:5:1141:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:1141:9:1141:30 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:1141:19:1141:29 | call to source | semmle.label | call to source | | array_flow.rb:1142:5:1142:5 | b [element] | semmle.label | b [element] | | array_flow.rb:1142:9:1142:9 | a [element 3] | semmle.label | a [element 3] | @@ -3621,6 +4006,7 @@ nodes | array_flow.rb:1145:10:1145:10 | b [element] | semmle.label | b [element] | | array_flow.rb:1145:10:1145:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1149:5:1149:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1149:9:1149:27 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1149:16:1149:26 | call to source | semmle.label | call to source | | array_flow.rb:1150:5:1150:5 | b [element] | semmle.label | b [element] | | array_flow.rb:1150:9:1150:9 | [post] a [element] | semmle.label | [post] a [element] | @@ -3634,6 +4020,8 @@ nodes | array_flow.rb:1155:10:1155:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1159:5:1159:5 | a [element 0] | semmle.label | a [element 0] | | array_flow.rb:1159:5:1159:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1159:9:1159:41 | call to [] [element 0] | semmle.label | call to [] [element 0] | +| array_flow.rb:1159:9:1159:41 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1159:10:1159:22 | call to source | semmle.label | call to source | | array_flow.rb:1159:28:1159:40 | call to source | semmle.label | call to source | | array_flow.rb:1160:5:1160:5 | b | semmle.label | b | @@ -3646,6 +4034,8 @@ nodes | array_flow.rb:1163:10:1163:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1166:5:1166:5 | a [element 0] | semmle.label | a [element 0] | | array_flow.rb:1166:5:1166:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1166:9:1166:41 | call to [] [element 0] | semmle.label | call to [] [element 0] | +| array_flow.rb:1166:9:1166:41 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1166:10:1166:22 | call to source | semmle.label | call to source | | array_flow.rb:1166:28:1166:40 | call to source | semmle.label | call to source | | array_flow.rb:1167:5:1167:5 | b [element 0] | semmle.label | b [element 0] | @@ -3659,6 +4049,8 @@ nodes | array_flow.rb:1170:10:1170:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1174:5:1174:5 | a [element 0] | semmle.label | a [element 0] | | array_flow.rb:1174:5:1174:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1174:9:1174:41 | call to [] [element 0] | semmle.label | call to [] [element 0] | +| array_flow.rb:1174:9:1174:41 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1174:10:1174:22 | call to source | semmle.label | call to source | | array_flow.rb:1174:28:1174:40 | call to source | semmle.label | call to source | | array_flow.rb:1175:5:1175:5 | b [element] | semmle.label | b [element] | @@ -3679,6 +4071,7 @@ nodes | array_flow.rb:1180:10:1180:10 | a [element] | semmle.label | a [element] | | array_flow.rb:1180:10:1180:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1184:5:1184:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1184:9:1184:27 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1184:16:1184:26 | call to source | semmle.label | call to source | | array_flow.rb:1185:5:1185:5 | b [element] | semmle.label | b [element] | | array_flow.rb:1185:9:1185:9 | a [element 2] | semmle.label | a [element 2] | @@ -3692,6 +4085,7 @@ nodes | array_flow.rb:1191:10:1191:10 | b [element] | semmle.label | b [element] | | array_flow.rb:1191:10:1191:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1195:5:1195:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1195:9:1195:27 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1195:16:1195:26 | call to source | semmle.label | call to source | | array_flow.rb:1196:5:1196:5 | b [element] | semmle.label | b [element] | | array_flow.rb:1196:9:1196:9 | [post] a [element] | semmle.label | [post] a [element] | @@ -3712,6 +4106,8 @@ nodes | array_flow.rb:1202:10:1202:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1206:5:1206:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1206:5:1206:5 | a [element 4] | semmle.label | a [element 4] | +| array_flow.rb:1206:9:1206:47 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1206:9:1206:47 | call to [] [element 4] | semmle.label | call to [] [element 4] | | array_flow.rb:1206:16:1206:28 | call to source | semmle.label | call to source | | array_flow.rb:1206:34:1206:46 | call to source | semmle.label | call to source | | array_flow.rb:1208:5:1208:5 | b | semmle.label | b | @@ -3789,6 +4185,8 @@ nodes | array_flow.rb:1256:10:1256:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1260:5:1260:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1260:5:1260:5 | a [element 4] | semmle.label | a [element 4] | +| array_flow.rb:1260:9:1260:47 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1260:9:1260:47 | call to [] [element 4] | semmle.label | call to [] [element 4] | | array_flow.rb:1260:16:1260:28 | call to source | semmle.label | call to source | | array_flow.rb:1260:34:1260:46 | call to source | semmle.label | call to source | | array_flow.rb:1261:5:1261:5 | b | semmle.label | b | @@ -3801,6 +4199,8 @@ nodes | array_flow.rb:1266:10:1266:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1268:5:1268:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1268:5:1268:5 | a [element 4] | semmle.label | a [element 4] | +| array_flow.rb:1268:9:1268:47 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1268:9:1268:47 | call to [] [element 4] | semmle.label | call to [] [element 4] | | array_flow.rb:1268:16:1268:28 | call to source | semmle.label | call to source | | array_flow.rb:1268:34:1268:46 | call to source | semmle.label | call to source | | array_flow.rb:1269:5:1269:5 | b | semmle.label | b | @@ -3823,6 +4223,8 @@ nodes | array_flow.rb:1277:10:1277:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1279:5:1279:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1279:5:1279:5 | a [element 4] | semmle.label | a [element 4] | +| array_flow.rb:1279:9:1279:47 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1279:9:1279:47 | call to [] [element 4] | semmle.label | call to [] [element 4] | | array_flow.rb:1279:16:1279:28 | call to source | semmle.label | call to source | | array_flow.rb:1279:34:1279:46 | call to source | semmle.label | call to source | | array_flow.rb:1280:5:1280:5 | b [element 0] | semmle.label | b [element 0] | @@ -3837,6 +4239,8 @@ nodes | array_flow.rb:1283:10:1283:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1290:5:1290:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1290:5:1290:5 | a [element 4] | semmle.label | a [element 4] | +| array_flow.rb:1290:9:1290:47 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1290:9:1290:47 | call to [] [element 4] | semmle.label | call to [] [element 4] | | array_flow.rb:1290:16:1290:28 | call to source | semmle.label | call to source | | array_flow.rb:1290:34:1290:46 | call to source | semmle.label | call to source | | array_flow.rb:1291:5:1291:5 | b [element 0] | semmle.label | b [element 0] | @@ -3850,6 +4254,8 @@ nodes | array_flow.rb:1297:10:1297:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1301:5:1301:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1301:5:1301:5 | a [element 4] | semmle.label | a [element 4] | +| array_flow.rb:1301:9:1301:47 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1301:9:1301:47 | call to [] [element 4] | semmle.label | call to [] [element 4] | | array_flow.rb:1301:16:1301:28 | call to source | semmle.label | call to source | | array_flow.rb:1301:34:1301:46 | call to source | semmle.label | call to source | | array_flow.rb:1302:5:1302:5 | b [element 0] | semmle.label | b [element 0] | @@ -3863,6 +4269,8 @@ nodes | array_flow.rb:1308:10:1308:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1312:5:1312:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1312:5:1312:5 | a [element 4] | semmle.label | a [element 4] | +| array_flow.rb:1312:9:1312:47 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1312:9:1312:47 | call to [] [element 4] | semmle.label | call to [] [element 4] | | array_flow.rb:1312:16:1312:28 | call to source | semmle.label | call to source | | array_flow.rb:1312:34:1312:46 | call to source | semmle.label | call to source | | array_flow.rb:1313:5:1313:5 | b [element] | semmle.label | b [element] | @@ -3884,6 +4292,8 @@ nodes | array_flow.rb:1319:10:1319:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1321:5:1321:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1321:5:1321:5 | a [element 4] | semmle.label | a [element 4] | +| array_flow.rb:1321:9:1321:47 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1321:9:1321:47 | call to [] [element 4] | semmle.label | call to [] [element 4] | | array_flow.rb:1321:16:1321:28 | call to source | semmle.label | call to source | | array_flow.rb:1321:34:1321:46 | call to source | semmle.label | call to source | | array_flow.rb:1322:5:1322:5 | b [element] | semmle.label | b [element] | @@ -3905,6 +4315,8 @@ nodes | array_flow.rb:1328:10:1328:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1330:5:1330:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1330:5:1330:5 | a [element 4] | semmle.label | a [element 4] | +| array_flow.rb:1330:9:1330:47 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1330:9:1330:47 | call to [] [element 4] | semmle.label | call to [] [element 4] | | array_flow.rb:1330:16:1330:28 | call to source | semmle.label | call to source | | array_flow.rb:1330:34:1330:46 | call to source | semmle.label | call to source | | array_flow.rb:1331:5:1331:5 | b [element] | semmle.label | b [element] | @@ -3926,6 +4338,8 @@ nodes | array_flow.rb:1337:10:1337:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1339:5:1339:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1339:5:1339:5 | a [element 4] | semmle.label | a [element 4] | +| array_flow.rb:1339:9:1339:47 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1339:9:1339:47 | call to [] [element 4] | semmle.label | call to [] [element 4] | | array_flow.rb:1339:16:1339:28 | call to source | semmle.label | call to source | | array_flow.rb:1339:34:1339:46 | call to source | semmle.label | call to source | | array_flow.rb:1340:5:1340:5 | b [element 2] | semmle.label | b [element 2] | @@ -3939,6 +4353,8 @@ nodes | array_flow.rb:1345:10:1345:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1348:5:1348:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1348:5:1348:5 | a [element 4] | semmle.label | a [element 4] | +| array_flow.rb:1348:9:1348:47 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1348:9:1348:47 | call to [] [element 4] | semmle.label | call to [] [element 4] | | array_flow.rb:1348:16:1348:28 | call to source | semmle.label | call to source | | array_flow.rb:1348:34:1348:46 | call to source | semmle.label | call to source | | array_flow.rb:1349:5:1349:5 | b [element] | semmle.label | b [element] | @@ -3959,16 +4375,19 @@ nodes | array_flow.rb:1355:10:1355:10 | a [element] | semmle.label | a [element] | | array_flow.rb:1355:10:1355:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1359:5:1359:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1359:9:1359:27 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1359:16:1359:26 | call to source | semmle.label | call to source | | array_flow.rb:1360:9:1360:9 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1360:27:1360:27 | x | semmle.label | x | | array_flow.rb:1361:14:1361:14 | x | semmle.label | x | | array_flow.rb:1367:5:1367:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1367:9:1367:27 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1367:16:1367:26 | call to source | semmle.label | call to source | | array_flow.rb:1368:9:1368:9 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1368:28:1368:28 | x | semmle.label | x | | array_flow.rb:1369:14:1369:14 | x | semmle.label | x | | array_flow.rb:1375:5:1375:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1375:9:1375:27 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1375:16:1375:26 | call to source | semmle.label | call to source | | array_flow.rb:1376:9:1376:9 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1376:26:1376:26 | x | semmle.label | x | @@ -3976,6 +4395,7 @@ nodes | array_flow.rb:1377:14:1377:14 | x | semmle.label | x | | array_flow.rb:1378:14:1378:14 | y | semmle.label | y | | array_flow.rb:1383:5:1383:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1383:9:1383:27 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1383:16:1383:26 | call to source | semmle.label | call to source | | array_flow.rb:1384:5:1384:5 | b [element] | semmle.label | b [element] | | array_flow.rb:1384:9:1384:9 | a [element 2] | semmle.label | a [element 2] | @@ -3996,6 +4416,7 @@ nodes | array_flow.rb:1393:10:1393:10 | c [element] | semmle.label | c [element] | | array_flow.rb:1393:10:1393:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1397:5:1397:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1397:9:1397:27 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1397:16:1397:26 | call to source | semmle.label | call to source | | array_flow.rb:1398:5:1398:5 | b [element] | semmle.label | b [element] | | array_flow.rb:1398:9:1398:9 | [post] a [element] | semmle.label | [post] a [element] | @@ -4010,6 +4431,7 @@ nodes | array_flow.rb:1402:10:1402:10 | a [element] | semmle.label | a [element] | | array_flow.rb:1402:10:1402:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1404:5:1404:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1404:9:1404:27 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1404:16:1404:26 | call to source | semmle.label | call to source | | array_flow.rb:1405:5:1405:5 | b [element] | semmle.label | b [element] | | array_flow.rb:1405:9:1405:9 | [post] a [element] | semmle.label | [post] a [element] | @@ -4028,6 +4450,7 @@ nodes | array_flow.rb:1413:10:1413:10 | a [element] | semmle.label | a [element] | | array_flow.rb:1413:10:1413:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1417:5:1417:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1417:9:1417:27 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1417:16:1417:26 | call to source | semmle.label | call to source | | array_flow.rb:1418:5:1418:5 | b [element] | semmle.label | b [element] | | array_flow.rb:1418:9:1418:9 | a [element 2] | semmle.label | a [element 2] | @@ -4039,6 +4462,7 @@ nodes | array_flow.rb:1423:10:1423:10 | b [element] | semmle.label | b [element] | | array_flow.rb:1423:10:1423:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1427:5:1427:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1427:9:1427:27 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1427:16:1427:26 | call to source | semmle.label | call to source | | array_flow.rb:1428:5:1428:5 | b [element] | semmle.label | b [element] | | array_flow.rb:1428:9:1428:9 | [post] a [element] | semmle.label | [post] a [element] | @@ -4055,12 +4479,15 @@ nodes | array_flow.rb:1435:10:1435:10 | b [element] | semmle.label | b [element] | | array_flow.rb:1435:10:1435:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1439:5:1439:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1439:9:1439:27 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1439:16:1439:26 | call to source | semmle.label | call to source | | array_flow.rb:1440:9:1440:9 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1440:19:1440:19 | x | semmle.label | x | | array_flow.rb:1441:14:1441:14 | x | semmle.label | x | | array_flow.rb:1447:5:1447:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1447:5:1447:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:1447:9:1447:44 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1447:9:1447:44 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:1447:16:1447:28 | call to source | semmle.label | call to source | | array_flow.rb:1447:31:1447:43 | call to source | semmle.label | call to source | | array_flow.rb:1448:5:1448:5 | b [element 2] | semmle.label | b [element 2] | @@ -4105,6 +4532,7 @@ nodes | array_flow.rb:1467:10:1467:10 | b [element] | semmle.label | b [element] | | array_flow.rb:1467:10:1467:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1471:5:1471:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1471:9:1471:27 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1471:16:1471:26 | call to source | semmle.label | call to source | | array_flow.rb:1472:5:1472:5 | b [element 2] | semmle.label | b [element 2] | | array_flow.rb:1472:9:1472:9 | a [element 2] | semmle.label | a [element 2] | @@ -4114,6 +4542,7 @@ nodes | array_flow.rb:1478:10:1478:10 | b [element 2] | semmle.label | b [element 2] | | array_flow.rb:1478:10:1478:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1484:5:1484:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:1484:9:1484:30 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:1484:19:1484:29 | call to source | semmle.label | call to source | | array_flow.rb:1485:5:1485:5 | b [element 3] | semmle.label | b [element 3] | | array_flow.rb:1485:9:1485:9 | a [element 3] | semmle.label | a [element 3] | @@ -4121,6 +4550,7 @@ nodes | array_flow.rb:1486:10:1486:10 | b [element 3] | semmle.label | b [element 3] | | array_flow.rb:1486:10:1486:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1490:5:1490:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1490:9:1490:27 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1490:16:1490:26 | call to source | semmle.label | call to source | | array_flow.rb:1491:5:1491:5 | b [element 2] | semmle.label | b [element 2] | | array_flow.rb:1491:9:1491:9 | a [element 2] | semmle.label | a [element 2] | @@ -4130,8 +4560,14 @@ nodes | array_flow.rb:1507:5:1507:5 | a [element 0, element 1] | semmle.label | a [element 0, element 1] | | array_flow.rb:1507:5:1507:5 | a [element 1, element 1] | semmle.label | a [element 1, element 1] | | array_flow.rb:1507:5:1507:5 | a [element 2, element 1] | semmle.label | a [element 2, element 1] | +| array_flow.rb:1507:9:1507:68 | call to [] [element 0, element 1] | semmle.label | call to [] [element 0, element 1] | +| array_flow.rb:1507:9:1507:68 | call to [] [element 1, element 1] | semmle.label | call to [] [element 1, element 1] | +| array_flow.rb:1507:9:1507:68 | call to [] [element 2, element 1] | semmle.label | call to [] [element 2, element 1] | +| array_flow.rb:1507:10:1507:27 | call to [] [element 1] | semmle.label | call to [] [element 1] | | array_flow.rb:1507:14:1507:26 | call to source | semmle.label | call to source | +| array_flow.rb:1507:30:1507:47 | call to [] [element 1] | semmle.label | call to [] [element 1] | | array_flow.rb:1507:34:1507:46 | call to source | semmle.label | call to source | +| array_flow.rb:1507:50:1507:67 | call to [] [element 1] | semmle.label | call to [] [element 1] | | array_flow.rb:1507:54:1507:66 | call to source | semmle.label | call to source | | array_flow.rb:1508:5:1508:5 | b [element 1, element 0] | semmle.label | b [element 1, element 0] | | array_flow.rb:1508:5:1508:5 | b [element 1, element 1] | semmle.label | b [element 1, element 1] | @@ -4152,10 +4588,13 @@ nodes | array_flow.rb:1514:10:1514:13 | ...[...] [element 2] | semmle.label | ...[...] [element 2] | | array_flow.rb:1514:10:1514:16 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1518:5:1518:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1518:9:1518:29 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1518:16:1518:28 | call to source | semmle.label | call to source | | array_flow.rb:1519:5:1519:5 | b [element 1] | semmle.label | b [element 1] | +| array_flow.rb:1519:9:1519:26 | call to [] [element 1] | semmle.label | call to [] [element 1] | | array_flow.rb:1519:13:1519:25 | call to source | semmle.label | call to source | | array_flow.rb:1520:5:1520:5 | c [element 1] | semmle.label | c [element 1] | +| array_flow.rb:1520:9:1520:26 | call to [] [element 1] | semmle.label | call to [] [element 1] | | array_flow.rb:1520:13:1520:25 | call to source | semmle.label | call to source | | array_flow.rb:1521:5:1521:5 | d [element] | semmle.label | d [element] | | array_flow.rb:1521:9:1521:9 | a [element 2] | semmle.label | a [element 2] | @@ -4170,6 +4609,8 @@ nodes | array_flow.rb:1524:10:1524:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1528:5:1528:5 | a [element 3] | semmle.label | a [element 3] | | array_flow.rb:1528:5:1528:5 | a [element 4] | semmle.label | a [element 4] | +| array_flow.rb:1528:9:1528:47 | call to [] [element 3] | semmle.label | call to [] [element 3] | +| array_flow.rb:1528:9:1528:47 | call to [] [element 4] | semmle.label | call to [] [element 4] | | array_flow.rb:1528:19:1528:31 | call to source | semmle.label | call to source | | array_flow.rb:1528:34:1528:46 | call to source | semmle.label | call to source | | array_flow.rb:1530:5:1530:5 | b [element] | semmle.label | b [element] | @@ -4190,6 +4631,8 @@ nodes | array_flow.rb:1538:10:1538:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1542:5:1542:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1542:5:1542:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:1542:9:1542:44 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1542:9:1542:44 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:1542:16:1542:28 | call to source | semmle.label | call to source | | array_flow.rb:1542:31:1542:43 | call to source | semmle.label | call to source | | array_flow.rb:1543:5:1543:5 | b [element] | semmle.label | b [element] | @@ -4207,6 +4650,8 @@ nodes | array_flow.rb:1547:10:1547:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1549:5:1549:5 | a [element 2] | semmle.label | a [element 2] | | array_flow.rb:1549:5:1549:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:1549:9:1549:44 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1549:9:1549:44 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:1549:16:1549:28 | call to source | semmle.label | call to source | | array_flow.rb:1549:31:1549:43 | call to source | semmle.label | call to source | | array_flow.rb:1550:5:1550:5 | b [element] | semmle.label | b [element] | @@ -4225,6 +4670,7 @@ nodes | array_flow.rb:1557:10:1557:10 | a [element] | semmle.label | a [element] | | array_flow.rb:1557:10:1557:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1561:5:1561:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1561:9:1561:29 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1561:16:1561:28 | call to source | semmle.label | call to source | | array_flow.rb:1562:5:1562:5 | [post] a [element 2] | semmle.label | [post] a [element 2] | | array_flow.rb:1562:5:1562:5 | [post] a [element 5] | semmle.label | [post] a [element 5] | @@ -4236,6 +4682,8 @@ nodes | array_flow.rb:1568:10:1568:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1572:5:1572:5 | a [element 1] | semmle.label | a [element 1] | | array_flow.rb:1572:5:1572:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:1572:9:1572:44 | call to [] [element 1] | semmle.label | call to [] [element 1] | +| array_flow.rb:1572:9:1572:44 | call to [] [element 3] | semmle.label | call to [] [element 3] | | array_flow.rb:1572:13:1572:25 | call to source | semmle.label | call to source | | array_flow.rb:1572:31:1572:43 | call to source | semmle.label | call to source | | array_flow.rb:1574:5:1574:5 | b [element 1] | semmle.label | b [element 1] | @@ -4279,10 +4727,13 @@ nodes | array_flow.rb:1592:10:1592:10 | b [element] | semmle.label | b [element] | | array_flow.rb:1592:10:1592:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1596:5:1596:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1596:9:1596:29 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1596:16:1596:28 | call to source | semmle.label | call to source | | array_flow.rb:1597:5:1597:5 | b [element 1] | semmle.label | b [element 1] | +| array_flow.rb:1597:9:1597:29 | call to [] [element 1] | semmle.label | call to [] [element 1] | | array_flow.rb:1597:13:1597:25 | call to source | semmle.label | call to source | | array_flow.rb:1598:5:1598:5 | c [element 0] | semmle.label | c [element 0] | +| array_flow.rb:1598:9:1598:29 | call to [] [element 0] | semmle.label | call to [] [element 0] | | array_flow.rb:1598:10:1598:22 | call to source | semmle.label | call to source | | array_flow.rb:1599:5:1599:5 | d [element 0, element 2] | semmle.label | d [element 0, element 2] | | array_flow.rb:1599:5:1599:5 | d [element 1, element 1] | semmle.label | d [element 1, element 1] | @@ -4315,8 +4766,10 @@ nodes | array_flow.rb:1607:14:1607:14 | x [element 2] | semmle.label | x [element 2] | | array_flow.rb:1607:14:1607:17 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1612:5:1612:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1612:9:1612:29 | call to [] [element 2] | semmle.label | call to [] [element 2] | | array_flow.rb:1612:16:1612:28 | call to source | semmle.label | call to source | | array_flow.rb:1613:5:1613:5 | b [element 1] | semmle.label | b [element 1] | +| array_flow.rb:1613:9:1613:26 | call to [] [element 1] | semmle.label | call to [] [element 1] | | array_flow.rb:1613:13:1613:25 | call to source | semmle.label | call to source | | array_flow.rb:1614:5:1614:5 | c [element] | semmle.label | c [element] | | array_flow.rb:1614:9:1614:9 | a [element 2] | semmle.label | a [element 2] | @@ -4374,7 +4827,33 @@ nodes | array_flow.rb:1670:14:1670:18 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1672:14:1672:15 | a2 [element 1] | semmle.label | a2 [element 1] | | array_flow.rb:1672:14:1672:18 | ...[...] | semmle.label | ...[...] | +| array_flow.rb:1677:5:1677:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1677:9:1677:29 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1677:16:1677:28 | call to source | semmle.label | call to source | +| array_flow.rb:1678:5:1678:5 | b [element] | semmle.label | b [element] | +| array_flow.rb:1678:9:1678:9 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1678:9:1680:7 | call to map [element] | semmle.label | call to map [element] | +| array_flow.rb:1678:19:1678:19 | x | semmle.label | x | +| array_flow.rb:1679:9:1679:9 | x | semmle.label | x | +| array_flow.rb:1681:10:1681:10 | b [element] | semmle.label | b [element] | +| array_flow.rb:1681:10:1681:13 | ...[...] | semmle.label | ...[...] | +| array_flow.rb:1685:5:1685:5 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1685:5:1685:5 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:1685:9:1685:44 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| array_flow.rb:1685:9:1685:44 | call to [] [element 3] | semmle.label | call to [] [element 3] | +| array_flow.rb:1685:16:1685:28 | call to source | semmle.label | call to source | +| array_flow.rb:1685:31:1685:43 | call to source | semmle.label | call to source | +| array_flow.rb:1686:11:1686:11 | z | semmle.label | z | +| array_flow.rb:1686:14:1686:14 | w | semmle.label | w | +| array_flow.rb:1686:18:1686:18 | a [element 2] | semmle.label | a [element 2] | +| array_flow.rb:1686:18:1686:18 | a [element 3] | semmle.label | a [element 3] | +| array_flow.rb:1689:10:1689:10 | z | semmle.label | z | +| array_flow.rb:1690:10:1690:10 | w | semmle.label | w | subpaths +| array_flow.rb:251:9:251:9 | a [element 2] | array_flow.rb:251:30:251:30 | x | array_flow.rb:253:9:253:25 | call to [] [element 0] | array_flow.rb:251:9:254:7 | call to collect_concat [element] | +| array_flow.rb:507:9:507:9 | a [element 3] | array_flow.rb:507:26:507:26 | x | array_flow.rb:509:9:509:9 | x | array_flow.rb:507:9:510:7 | call to filter_map [element] | +| array_flow.rb:571:9:571:9 | a [element 2] | array_flow.rb:571:24:571:24 | x | array_flow.rb:573:9:573:25 | call to [] [element 0] | array_flow.rb:571:9:574:7 | call to flat_map [element] | +| array_flow.rb:1678:9:1678:9 | a [element 2] | array_flow.rb:1678:19:1678:19 | x | array_flow.rb:1679:9:1679:9 | x | array_flow.rb:1678:9:1680:7 | call to map [element] | arrayLiteral | array_flow.rb:9:9:9:25 | call to [] | | array_flow.rb:33:9:33:22 | call to [] | @@ -4564,6 +5043,8 @@ arrayLiteral | array_flow.rb:1621:10:1621:12 | call to [] | | array_flow.rb:1647:9:1647:32 | ...[...] | | array_flow.rb:1668:14:1668:41 | ...[...] | +| array_flow.rb:1677:9:1677:29 | call to [] | +| array_flow.rb:1685:9:1685:44 | call to [] | #select | array_flow.rb:3:10:3:13 | ...[...] | array_flow.rb:2:10:2:20 | call to source | array_flow.rb:3:10:3:13 | ...[...] | $@ | array_flow.rb:2:10:2:20 | call to source | call to source | | array_flow.rb:5:10:5:13 | ...[...] | array_flow.rb:2:10:2:20 | call to source | array_flow.rb:5:10:5:13 | ...[...] | $@ | array_flow.rb:2:10:2:20 | call to source | call to source | @@ -5264,3 +5745,6 @@ arrayLiteral | array_flow.rb:1651:10:1651:13 | ...[...] | array_flow.rb:1647:18:1647:28 | call to source | array_flow.rb:1651:10:1651:13 | ...[...] | $@ | array_flow.rb:1647:18:1647:28 | call to source | call to source | | array_flow.rb:1670:14:1670:18 | ...[...] | array_flow.rb:1668:25:1668:37 | call to source | array_flow.rb:1670:14:1670:18 | ...[...] | $@ | array_flow.rb:1668:25:1668:37 | call to source | call to source | | array_flow.rb:1672:14:1672:18 | ...[...] | array_flow.rb:1668:25:1668:37 | call to source | array_flow.rb:1672:14:1672:18 | ...[...] | $@ | array_flow.rb:1668:25:1668:37 | call to source | call to source | +| array_flow.rb:1681:10:1681:13 | ...[...] | array_flow.rb:1677:16:1677:28 | call to source | array_flow.rb:1681:10:1681:13 | ...[...] | $@ | array_flow.rb:1677:16:1677:28 | call to source | call to source | +| array_flow.rb:1689:10:1689:10 | z | array_flow.rb:1685:16:1685:28 | call to source | array_flow.rb:1689:10:1689:10 | z | $@ | array_flow.rb:1685:16:1685:28 | call to source | call to source | +| array_flow.rb:1690:10:1690:10 | w | array_flow.rb:1685:31:1685:43 | call to source | array_flow.rb:1690:10:1690:10 | w | $@ | array_flow.rb:1685:31:1685:43 | call to source | call to source | diff --git a/ruby/ql/test/library-tests/dataflow/array-flow/array_flow.rb b/ruby/ql/test/library-tests/dataflow/array-flow/array_flow.rb index bc137a38334..cb07ce96ca6 100644 --- a/ruby/ql/test/library-tests/dataflow/array-flow/array_flow.rb +++ b/ruby/ql/test/library-tests/dataflow/array-flow/array_flow.rb @@ -1672,3 +1672,20 @@ class M139 sink(a2[i]) # $ hasValueFlow=139.2 end end + +def m139 + a = [0, 1, source(139.1)] + b = a.map do |x| + x + end + sink b[2] # $ hasValueFlow=139.1 +end + +def m140 + a = [0, 1, source(140.1), source(140.2)] + x, y, z, w = a + sink x + sink y + sink z # $ hasValueFlow=140.1 + sink w # $ hasValueFlow=140.2 +end diff --git a/ruby/ql/test/library-tests/dataflow/call-sensitivity/call-sensitivity.expected b/ruby/ql/test/library-tests/dataflow/call-sensitivity/call-sensitivity.expected index 7e55fbf8995..b13c31dbc78 100644 --- a/ruby/ql/test/library-tests/dataflow/call-sensitivity/call-sensitivity.expected +++ b/ruby/ql/test/library-tests/dataflow/call-sensitivity/call-sensitivity.expected @@ -20,14 +20,10 @@ edges | call_sensitivity.rb:44:26:44:33 | call to taint | call_sensitivity.rb:21:27:21:27 | x | provenance | | | call_sensitivity.rb:50:15:50:15 | x | call_sensitivity.rb:51:10:51:10 | x | provenance | | | call_sensitivity.rb:54:15:54:15 | x | call_sensitivity.rb:55:13:55:13 | x | provenance | | -| call_sensitivity.rb:54:15:54:15 | x | call_sensitivity.rb:55:13:55:13 | x | provenance | | -| call_sensitivity.rb:55:13:55:13 | x | call_sensitivity.rb:50:15:50:15 | x | provenance | | | call_sensitivity.rb:55:13:55:13 | x | call_sensitivity.rb:50:15:50:15 | x | provenance | | | call_sensitivity.rb:58:20:58:20 | x | call_sensitivity.rb:59:18:59:18 | x | provenance | | | call_sensitivity.rb:59:18:59:18 | x | call_sensitivity.rb:54:15:54:15 | x | provenance | | | call_sensitivity.rb:62:18:62:18 | y | call_sensitivity.rb:63:15:63:15 | y | provenance | | -| call_sensitivity.rb:62:18:62:18 | y | call_sensitivity.rb:63:15:63:15 | y | provenance | | -| call_sensitivity.rb:63:15:63:15 | y | call_sensitivity.rb:50:15:50:15 | x | provenance | | | call_sensitivity.rb:63:15:63:15 | y | call_sensitivity.rb:50:15:50:15 | x | provenance | | | call_sensitivity.rb:66:20:66:20 | x | call_sensitivity.rb:67:24:67:24 | x | provenance | | | call_sensitivity.rb:67:24:67:24 | x | call_sensitivity.rb:62:18:62:18 | y | provenance | | @@ -40,26 +36,16 @@ edges | call_sensitivity.rb:85:18:85:27 | ( ... ) | call_sensitivity.rb:80:15:80:15 | x | provenance | | | call_sensitivity.rb:85:19:85:26 | call to taint | call_sensitivity.rb:85:18:85:27 | ( ... ) | provenance | | | call_sensitivity.rb:88:30:88:30 | x | call_sensitivity.rb:89:23:89:23 | x | provenance | | -| call_sensitivity.rb:88:30:88:30 | x | call_sensitivity.rb:89:23:89:23 | x | provenance | | -| call_sensitivity.rb:89:23:89:23 | x | call_sensitivity.rb:70:30:70:30 | x | provenance | | | call_sensitivity.rb:89:23:89:23 | x | call_sensitivity.rb:70:30:70:30 | x | provenance | | | call_sensitivity.rb:92:35:92:35 | x | call_sensitivity.rb:93:28:93:28 | x | provenance | | | call_sensitivity.rb:93:28:93:28 | x | call_sensitivity.rb:88:30:88:30 | x | provenance | | | call_sensitivity.rb:96:33:96:33 | y | call_sensitivity.rb:97:25:97:25 | y | provenance | | -| call_sensitivity.rb:96:33:96:33 | y | call_sensitivity.rb:97:25:97:25 | y | provenance | | -| call_sensitivity.rb:97:25:97:25 | y | call_sensitivity.rb:70:30:70:30 | x | provenance | | | call_sensitivity.rb:97:25:97:25 | y | call_sensitivity.rb:70:30:70:30 | x | provenance | | | call_sensitivity.rb:100:35:100:35 | x | call_sensitivity.rb:101:34:101:34 | x | provenance | | | call_sensitivity.rb:101:34:101:34 | x | call_sensitivity.rb:96:33:96:33 | y | provenance | | | call_sensitivity.rb:104:18:104:18 | x | call_sensitivity.rb:105:10:105:10 | x | provenance | | | call_sensitivity.rb:104:18:104:18 | x | call_sensitivity.rb:105:10:105:10 | x | provenance | | -| call_sensitivity.rb:104:18:104:18 | x | call_sensitivity.rb:105:10:105:10 | x | provenance | | -| call_sensitivity.rb:104:18:104:18 | x | call_sensitivity.rb:105:10:105:10 | x | provenance | | | call_sensitivity.rb:104:18:104:18 | x | call_sensitivity.rb:106:13:106:13 | x | provenance | | -| call_sensitivity.rb:104:18:104:18 | x | call_sensitivity.rb:106:13:106:13 | x | provenance | | -| call_sensitivity.rb:104:18:104:18 | x | call_sensitivity.rb:106:13:106:13 | x | provenance | | -| call_sensitivity.rb:106:13:106:13 | x | call_sensitivity.rb:50:15:50:15 | x | provenance | | -| call_sensitivity.rb:106:13:106:13 | x | call_sensitivity.rb:50:15:50:15 | x | provenance | | | call_sensitivity.rb:106:13:106:13 | x | call_sensitivity.rb:50:15:50:15 | x | provenance | | | call_sensitivity.rb:109:21:109:21 | x | call_sensitivity.rb:110:9:110:9 | x | provenance | | | call_sensitivity.rb:110:9:110:9 | x | call_sensitivity.rb:104:18:104:18 | x | provenance | | @@ -124,14 +110,10 @@ nodes | call_sensitivity.rb:50:15:50:15 | x | semmle.label | x | | call_sensitivity.rb:51:10:51:10 | x | semmle.label | x | | call_sensitivity.rb:54:15:54:15 | x | semmle.label | x | -| call_sensitivity.rb:54:15:54:15 | x | semmle.label | x | -| call_sensitivity.rb:55:13:55:13 | x | semmle.label | x | | call_sensitivity.rb:55:13:55:13 | x | semmle.label | x | | call_sensitivity.rb:58:20:58:20 | x | semmle.label | x | | call_sensitivity.rb:59:18:59:18 | x | semmle.label | x | | call_sensitivity.rb:62:18:62:18 | y | semmle.label | y | -| call_sensitivity.rb:62:18:62:18 | y | semmle.label | y | -| call_sensitivity.rb:63:15:63:15 | y | semmle.label | y | | call_sensitivity.rb:63:15:63:15 | y | semmle.label | y | | call_sensitivity.rb:66:20:66:20 | x | semmle.label | x | | call_sensitivity.rb:67:24:67:24 | x | semmle.label | x | @@ -145,25 +127,17 @@ nodes | call_sensitivity.rb:85:18:85:27 | ( ... ) | semmle.label | ( ... ) | | call_sensitivity.rb:85:19:85:26 | call to taint | semmle.label | call to taint | | call_sensitivity.rb:88:30:88:30 | x | semmle.label | x | -| call_sensitivity.rb:88:30:88:30 | x | semmle.label | x | -| call_sensitivity.rb:89:23:89:23 | x | semmle.label | x | | call_sensitivity.rb:89:23:89:23 | x | semmle.label | x | | call_sensitivity.rb:92:35:92:35 | x | semmle.label | x | | call_sensitivity.rb:93:28:93:28 | x | semmle.label | x | | call_sensitivity.rb:96:33:96:33 | y | semmle.label | y | -| call_sensitivity.rb:96:33:96:33 | y | semmle.label | y | -| call_sensitivity.rb:97:25:97:25 | y | semmle.label | y | | call_sensitivity.rb:97:25:97:25 | y | semmle.label | y | | call_sensitivity.rb:100:35:100:35 | x | semmle.label | x | | call_sensitivity.rb:101:34:101:34 | x | semmle.label | x | | call_sensitivity.rb:104:18:104:18 | x | semmle.label | x | | call_sensitivity.rb:104:18:104:18 | x | semmle.label | x | -| call_sensitivity.rb:104:18:104:18 | x | semmle.label | x | -| call_sensitivity.rb:104:18:104:18 | x | semmle.label | x | | call_sensitivity.rb:105:10:105:10 | x | semmle.label | x | | call_sensitivity.rb:106:13:106:13 | x | semmle.label | x | -| call_sensitivity.rb:106:13:106:13 | x | semmle.label | x | -| call_sensitivity.rb:106:13:106:13 | x | semmle.label | x | | call_sensitivity.rb:109:21:109:21 | x | semmle.label | x | | call_sensitivity.rb:110:9:110:9 | x | semmle.label | x | | call_sensitivity.rb:114:11:114:20 | ( ... ) | semmle.label | ( ... ) | diff --git a/ruby/ql/test/library-tests/dataflow/flow-summaries/semantics.expected b/ruby/ql/test/library-tests/dataflow/flow-summaries/semantics.expected index 7f40375e963..9fa0bcb272b 100644 --- a/ruby/ql/test/library-tests/dataflow/flow-summaries/semantics.expected +++ b/ruby/ql/test/library-tests/dataflow/flow-summaries/semantics.expected @@ -162,8 +162,10 @@ edges | semantics.rb:116:5:116:5 | h [element :a] | semantics.rb:117:16:117:16 | h [element :a] | provenance | | | semantics.rb:116:5:116:5 | h [element :a] | semantics.rb:121:22:121:22 | h [element :a] | provenance | | | semantics.rb:116:5:116:5 | h [element :a] | semantics.rb:121:22:121:22 | h [element :a] | provenance | | -| semantics.rb:116:14:116:14 | a | semantics.rb:116:5:116:5 | h [element :a] | provenance | | -| semantics.rb:116:14:116:14 | a | semantics.rb:116:5:116:5 | h [element :a] | provenance | | +| semantics.rb:116:9:116:22 | call to [] [element :a] | semantics.rb:116:5:116:5 | h [element :a] | provenance | | +| semantics.rb:116:9:116:22 | call to [] [element :a] | semantics.rb:116:5:116:5 | h [element :a] | provenance | | +| semantics.rb:116:14:116:14 | a | semantics.rb:116:9:116:22 | call to [] [element :a] | provenance | | +| semantics.rb:116:14:116:14 | a | semantics.rb:116:9:116:22 | call to [] [element :a] | provenance | | | semantics.rb:117:14:117:16 | ** ... [element :a] | semantics.rb:117:10:117:17 | call to s16 | provenance | | | semantics.rb:117:14:117:16 | ** ... [element :a] | semantics.rb:117:10:117:17 | call to s16 | provenance | | | semantics.rb:117:16:117:16 | h [element :a] | semantics.rb:117:14:117:16 | ** ... [element :a] | provenance | | @@ -212,10 +214,14 @@ edges | semantics.rb:135:5:135:7 | arr [element 0] | semantics.rb:136:15:136:17 | arr [element 0] | provenance | | | semantics.rb:135:5:135:7 | arr [element 1] | semantics.rb:136:15:136:17 | arr [element 1] | provenance | | | semantics.rb:135:5:135:7 | arr [element 1] | semantics.rb:136:15:136:17 | arr [element 1] | provenance | | -| semantics.rb:135:12:135:12 | a | semantics.rb:135:5:135:7 | arr [element 0] | provenance | | -| semantics.rb:135:12:135:12 | a | semantics.rb:135:5:135:7 | arr [element 0] | provenance | | -| semantics.rb:135:15:135:15 | b | semantics.rb:135:5:135:7 | arr [element 1] | provenance | | -| semantics.rb:135:15:135:15 | b | semantics.rb:135:5:135:7 | arr [element 1] | provenance | | +| semantics.rb:135:11:135:16 | call to [] [element 0] | semantics.rb:135:5:135:7 | arr [element 0] | provenance | | +| semantics.rb:135:11:135:16 | call to [] [element 0] | semantics.rb:135:5:135:7 | arr [element 0] | provenance | | +| semantics.rb:135:11:135:16 | call to [] [element 1] | semantics.rb:135:5:135:7 | arr [element 1] | provenance | | +| semantics.rb:135:11:135:16 | call to [] [element 1] | semantics.rb:135:5:135:7 | arr [element 1] | provenance | | +| semantics.rb:135:12:135:12 | a | semantics.rb:135:11:135:16 | call to [] [element 0] | provenance | | +| semantics.rb:135:12:135:12 | a | semantics.rb:135:11:135:16 | call to [] [element 0] | provenance | | +| semantics.rb:135:15:135:15 | b | semantics.rb:135:11:135:16 | call to [] [element 1] | provenance | | +| semantics.rb:135:15:135:15 | b | semantics.rb:135:11:135:16 | call to [] [element 1] | provenance | | | semantics.rb:136:14:136:17 | * ... [element 0] | semantics.rb:136:10:136:18 | call to s18 | provenance | | | semantics.rb:136:14:136:17 | * ... [element 0] | semantics.rb:136:10:136:18 | call to s18 | provenance | | | semantics.rb:136:14:136:17 | * ... [element 1] | semantics.rb:136:10:136:18 | call to s18 | provenance | | @@ -1275,6 +1281,8 @@ nodes | semantics.rb:115:9:115:18 | call to source | semmle.label | call to source | | semantics.rb:116:5:116:5 | h [element :a] | semmle.label | h [element :a] | | semantics.rb:116:5:116:5 | h [element :a] | semmle.label | h [element :a] | +| semantics.rb:116:9:116:22 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| semantics.rb:116:9:116:22 | call to [] [element :a] | semmle.label | call to [] [element :a] | | semantics.rb:116:14:116:14 | a | semmle.label | a | | semantics.rb:116:14:116:14 | a | semmle.label | a | | semantics.rb:117:10:117:17 | call to s16 | semmle.label | call to s16 | @@ -1332,6 +1340,10 @@ nodes | semantics.rb:135:5:135:7 | arr [element 0] | semmle.label | arr [element 0] | | semantics.rb:135:5:135:7 | arr [element 1] | semmle.label | arr [element 1] | | semantics.rb:135:5:135:7 | arr [element 1] | semmle.label | arr [element 1] | +| semantics.rb:135:11:135:16 | call to [] [element 0] | semmle.label | call to [] [element 0] | +| semantics.rb:135:11:135:16 | call to [] [element 0] | semmle.label | call to [] [element 0] | +| semantics.rb:135:11:135:16 | call to [] [element 1] | semmle.label | call to [] [element 1] | +| semantics.rb:135:11:135:16 | call to [] [element 1] | semmle.label | call to [] [element 1] | | semantics.rb:135:12:135:12 | a | semmle.label | a | | semantics.rb:135:12:135:12 | a | semmle.label | a | | semantics.rb:135:15:135:15 | b | semmle.label | b | diff --git a/ruby/ql/test/library-tests/dataflow/global/Flow.expected b/ruby/ql/test/library-tests/dataflow/global/Flow.expected index fb836e8488c..22d5fd7d18b 100644 --- a/ruby/ql/test/library-tests/dataflow/global/Flow.expected +++ b/ruby/ql/test/library-tests/dataflow/global/Flow.expected @@ -1,10 +1,7 @@ testFailures edges | blocks.rb:14:12:14:20 | call to source | blocks.rb:8:10:8:14 | yield ... | provenance | | -| captured_variables.rb:9:24:9:24 | x | captured_variables.rb:10:10:10:23 | -> { ... } [captured x] | provenance | | | captured_variables.rb:9:24:9:24 | x | captured_variables.rb:11:5:11:6 | fn [captured x] | provenance | | -| captured_variables.rb:10:5:10:6 | fn [captured x] | captured_variables.rb:11:5:11:6 | fn [captured x] | provenance | | -| captured_variables.rb:10:10:10:23 | -> { ... } [captured x] | captured_variables.rb:10:5:10:6 | fn [captured x] | provenance | | | captured_variables.rb:11:5:11:6 | fn [captured x] | captured_variables.rb:10:20:10:20 | x | provenance | | | captured_variables.rb:13:20:13:29 | call to taint | captured_variables.rb:9:24:9:24 | x | provenance | | | captured_variables.rb:15:28:15:28 | x | captured_variables.rb:16:5:18:5 | -> { ... } [captured x] | provenance | | @@ -16,18 +13,12 @@ edges | captured_variables.rb:27:25:27:57 | call to capture_escape_return2 [captured x] | captured_variables.rb:24:14:24:14 | x | provenance | | | captured_variables.rb:27:48:27:57 | call to taint | captured_variables.rb:22:28:22:28 | x | provenance | | | captured_variables.rb:27:48:27:57 | call to taint | captured_variables.rb:27:25:27:57 | call to capture_escape_return2 [captured x] | provenance | | -| captured_variables.rb:29:33:29:33 | x | captured_variables.rb:30:10:32:5 | -> { ... } [captured x] | provenance | | | captured_variables.rb:29:33:29:33 | x | captured_variables.rb:33:29:33:30 | fn [captured x] | provenance | | -| captured_variables.rb:30:5:30:6 | fn [captured x] | captured_variables.rb:33:29:33:30 | fn [captured x] | provenance | | -| captured_variables.rb:30:10:32:5 | -> { ... } [captured x] | captured_variables.rb:30:5:30:6 | fn [captured x] | provenance | | | captured_variables.rb:33:29:33:30 | fn [captured x] | captured_variables.rb:31:14:31:14 | x | provenance | | | captured_variables.rb:35:29:35:38 | call to taint | captured_variables.rb:29:33:29:33 | x | provenance | | | captured_variables.rb:37:13:37:14 | fn [captured x] | captured_variables.rb:38:5:38:6 | fn [captured x] | provenance | | | captured_variables.rb:38:5:38:6 | fn [captured x] | captured_variables.rb:42:14:42:14 | x | provenance | | -| captured_variables.rb:40:31:40:31 | x | captured_variables.rb:41:10:43:5 | -> { ... } [captured x] | provenance | | | captured_variables.rb:40:31:40:31 | x | captured_variables.rb:44:13:44:14 | fn [captured x] | provenance | | -| captured_variables.rb:41:5:41:6 | fn [captured x] | captured_variables.rb:44:13:44:14 | fn [captured x] | provenance | | -| captured_variables.rb:41:10:43:5 | -> { ... } [captured x] | captured_variables.rb:41:5:41:6 | fn [captured x] | provenance | | | captured_variables.rb:44:13:44:14 | fn [captured x] | captured_variables.rb:37:13:37:14 | fn [captured x] | provenance | | | captured_variables.rb:46:27:46:36 | call to taint | captured_variables.rb:40:31:40:31 | x | provenance | | | captured_variables.rb:48:5:48:12 | call to taint | captured_variables.rb:49:16:52:3 | do ... end [captured x] | provenance | | @@ -65,11 +56,8 @@ edges | captured_variables.rb:83:6:83:8 | foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | provenance | | | captured_variables.rb:83:6:83:8 | foo [@field] | captured_variables.rb:83:6:83:18 | call to get_field | provenance | | | captured_variables.rb:83:6:83:8 | foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | provenance | | -| captured_variables.rb:85:5:85:12 | call to taint | captured_variables.rb:86:6:89:1 | -> { ... } [captured y] | provenance | | | captured_variables.rb:85:5:85:12 | call to taint | captured_variables.rb:90:1:90:2 | fn [captured y] | provenance | | | captured_variables.rb:85:5:85:12 | call to taint | captured_variables.rb:91:6:91:6 | y | provenance | | -| captured_variables.rb:86:1:86:2 | fn [captured y] | captured_variables.rb:90:1:90:2 | fn [captured y] | provenance | | -| captured_variables.rb:86:6:89:1 | -> { ... } [captured y] | captured_variables.rb:86:1:86:2 | fn [captured y] | provenance | | | captured_variables.rb:88:9:88:16 | call to taint | captured_variables.rb:90:1:90:2 | [post] fn [captured y] | provenance | | | captured_variables.rb:90:1:90:2 | [post] fn [captured y] | captured_variables.rb:91:6:91:6 | y | provenance | | | captured_variables.rb:90:1:90:2 | fn [captured y] | captured_variables.rb:87:10:87:10 | y | provenance | | @@ -81,18 +69,12 @@ edges | captured_variables.rb:101:11:101:11 | x | captured_variables.rb:104:31:104:31 | x | provenance | | | captured_variables.rb:104:17:104:24 | call to taint | captured_variables.rb:100:21:100:21 | x | provenance | | | captured_variables.rb:104:31:104:31 | x | captured_variables.rb:105:10:105:10 | x | provenance | | -| captured_variables.rb:109:9:109:17 | call to taint | captured_variables.rb:110:14:116:5 | -> { ... } [captured x] | provenance | | | captured_variables.rb:109:9:109:17 | call to taint | captured_variables.rb:117:5:117:10 | middle [captured x] | provenance | | | captured_variables.rb:109:9:109:17 | call to taint | captured_variables.rb:118:10:118:10 | x | provenance | | -| captured_variables.rb:110:5:110:10 | middle [captured x] | captured_variables.rb:117:5:117:10 | middle [captured x] | provenance | | -| captured_variables.rb:110:14:116:5 | -> { ... } [captured x] | captured_variables.rb:110:5:110:10 | middle [captured x] | provenance | | -| captured_variables.rb:111:9:111:13 | inner [captured x] | captured_variables.rb:115:9:115:13 | inner [captured x] | provenance | | -| captured_variables.rb:111:17:114:9 | -> { ... } [captured x] | captured_variables.rb:111:9:111:13 | inner [captured x] | provenance | | | captured_variables.rb:113:17:113:25 | call to taint | captured_variables.rb:115:9:115:13 | [post] inner [captured x] | provenance | | | captured_variables.rb:115:9:115:13 | [post] inner [captured x] | captured_variables.rb:117:5:117:10 | [post] middle [captured x] | provenance | | | captured_variables.rb:115:9:115:13 | inner [captured x] | captured_variables.rb:112:18:112:18 | x | provenance | | | captured_variables.rb:117:5:117:10 | [post] middle [captured x] | captured_variables.rb:118:10:118:10 | x | provenance | | -| captured_variables.rb:117:5:117:10 | middle [captured x] | captured_variables.rb:111:17:114:9 | -> { ... } [captured x] | provenance | | | captured_variables.rb:117:5:117:10 | middle [captured x] | captured_variables.rb:115:9:115:13 | inner [captured x] | provenance | | | captured_variables.rb:147:5:147:6 | [post] self [@x] | captured_variables.rb:153:14:155:7 | do ... end [captured self, @x] | provenance | | | captured_variables.rb:147:10:147:18 | call to taint | captured_variables.rb:147:5:147:6 | [post] self [@x] | provenance | | @@ -116,11 +98,9 @@ edges | captured_variables.rb:194:1:194:1 | c [@x] | captured_variables.rb:185:5:189:7 | self in baz [@x] | provenance | | | captured_variables.rb:197:9:197:17 | call to taint | captured_variables.rb:199:10:199:10 | x | provenance | | | captured_variables.rb:206:13:206:21 | call to taint | captured_variables.rb:208:14:208:14 | x | provenance | | -| captured_variables.rb:219:9:219:17 | call to taint | captured_variables.rb:222:11:224:5 | -> { ... } [captured x] | provenance | | | captured_variables.rb:219:9:219:17 | call to taint | captured_variables.rb:226:5:226:7 | fn1 [captured x] | provenance | | -| captured_variables.rb:222:5:222:7 | fn1 [captured x] | captured_variables.rb:226:5:226:7 | fn1 [captured x] | provenance | | -| captured_variables.rb:222:11:224:5 | -> { ... } [captured x] | captured_variables.rb:222:5:222:7 | fn1 [captured x] | provenance | | | captured_variables.rb:226:5:226:7 | [post] fn1 [captured y] | captured_variables.rb:227:10:227:10 | y | provenance | | +| captured_variables.rb:226:5:226:7 | fn1 [captured x] | captured_variables.rb:223:13:223:13 | x | provenance | | | captured_variables.rb:226:5:226:7 | fn1 [captured x] | captured_variables.rb:226:5:226:7 | [post] fn1 [captured y] | provenance | | | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:11:18:11:18 | x | provenance | | | instance_variables.rb:11:18:11:18 | x | instance_variables.rb:11:9:11:14 | [post] self [@field] | provenance | | @@ -140,7 +120,6 @@ edges | instance_variables.rb:28:20:28:24 | field | instance_variables.rb:22:20:22:24 | field | provenance | | | instance_variables.rb:28:20:28:24 | field | instance_variables.rb:28:9:28:25 | [post] self [@field] | provenance | | | instance_variables.rb:31:18:31:18 | x | instance_variables.rb:33:13:33:13 | x | provenance | | -| instance_variables.rb:32:13:32:21 | call to taint | instance_variables.rb:22:20:22:24 | field | provenance | | | instance_variables.rb:32:13:32:21 | call to taint | instance_variables.rb:48:20:48:20 | x | provenance | | | instance_variables.rb:33:13:33:13 | x | instance_variables.rb:22:20:22:24 | field | provenance | | | instance_variables.rb:33:13:33:13 | x | instance_variables.rb:33:9:33:14 | call to new [@field] | provenance | | @@ -265,8 +244,6 @@ nodes | blocks.rb:8:10:8:14 | yield ... | semmle.label | yield ... | | blocks.rb:14:12:14:20 | call to source | semmle.label | call to source | | captured_variables.rb:9:24:9:24 | x | semmle.label | x | -| captured_variables.rb:10:5:10:6 | fn [captured x] | semmle.label | fn [captured x] | -| captured_variables.rb:10:10:10:23 | -> { ... } [captured x] | semmle.label | -> { ... } [captured x] | | captured_variables.rb:10:20:10:20 | x | semmle.label | x | | captured_variables.rb:11:5:11:6 | fn [captured x] | semmle.label | fn [captured x] | | captured_variables.rb:13:20:13:29 | call to taint | semmle.label | call to taint | @@ -282,16 +259,12 @@ nodes | captured_variables.rb:27:25:27:57 | call to capture_escape_return2 [captured x] | semmle.label | call to capture_escape_return2 [captured x] | | captured_variables.rb:27:48:27:57 | call to taint | semmle.label | call to taint | | captured_variables.rb:29:33:29:33 | x | semmle.label | x | -| captured_variables.rb:30:5:30:6 | fn [captured x] | semmle.label | fn [captured x] | -| captured_variables.rb:30:10:32:5 | -> { ... } [captured x] | semmle.label | -> { ... } [captured x] | | captured_variables.rb:31:14:31:14 | x | semmle.label | x | | captured_variables.rb:33:29:33:30 | fn [captured x] | semmle.label | fn [captured x] | | captured_variables.rb:35:29:35:38 | call to taint | semmle.label | call to taint | | captured_variables.rb:37:13:37:14 | fn [captured x] | semmle.label | fn [captured x] | | captured_variables.rb:38:5:38:6 | fn [captured x] | semmle.label | fn [captured x] | | captured_variables.rb:40:31:40:31 | x | semmle.label | x | -| captured_variables.rb:41:5:41:6 | fn [captured x] | semmle.label | fn [captured x] | -| captured_variables.rb:41:10:43:5 | -> { ... } [captured x] | semmle.label | -> { ... } [captured x] | | captured_variables.rb:42:14:42:14 | x | semmle.label | x | | captured_variables.rb:44:13:44:14 | fn [captured x] | semmle.label | fn [captured x] | | captured_variables.rb:46:27:46:36 | call to taint | semmle.label | call to taint | @@ -324,8 +297,6 @@ nodes | captured_variables.rb:83:6:83:8 | foo [@field] | semmle.label | foo [@field] | | captured_variables.rb:83:6:83:18 | call to get_field | semmle.label | call to get_field | | captured_variables.rb:85:5:85:12 | call to taint | semmle.label | call to taint | -| captured_variables.rb:86:1:86:2 | fn [captured y] | semmle.label | fn [captured y] | -| captured_variables.rb:86:6:89:1 | -> { ... } [captured y] | semmle.label | -> { ... } [captured y] | | captured_variables.rb:87:10:87:10 | y | semmle.label | y | | captured_variables.rb:88:9:88:16 | call to taint | semmle.label | call to taint | | captured_variables.rb:90:1:90:2 | [post] fn [captured y] | semmle.label | [post] fn [captured y] | @@ -342,10 +313,6 @@ nodes | captured_variables.rb:104:31:104:31 | x | semmle.label | x | | captured_variables.rb:105:10:105:10 | x | semmle.label | x | | captured_variables.rb:109:9:109:17 | call to taint | semmle.label | call to taint | -| captured_variables.rb:110:5:110:10 | middle [captured x] | semmle.label | middle [captured x] | -| captured_variables.rb:110:14:116:5 | -> { ... } [captured x] | semmle.label | -> { ... } [captured x] | -| captured_variables.rb:111:9:111:13 | inner [captured x] | semmle.label | inner [captured x] | -| captured_variables.rb:111:17:114:9 | -> { ... } [captured x] | semmle.label | -> { ... } [captured x] | | captured_variables.rb:112:18:112:18 | x | semmle.label | x | | captured_variables.rb:113:17:113:25 | call to taint | semmle.label | call to taint | | captured_variables.rb:115:9:115:13 | [post] inner [captured x] | semmle.label | [post] inner [captured x] | @@ -381,8 +348,7 @@ nodes | captured_variables.rb:206:13:206:21 | call to taint | semmle.label | call to taint | | captured_variables.rb:208:14:208:14 | x | semmle.label | x | | captured_variables.rb:219:9:219:17 | call to taint | semmle.label | call to taint | -| captured_variables.rb:222:5:222:7 | fn1 [captured x] | semmle.label | fn1 [captured x] | -| captured_variables.rb:222:11:224:5 | -> { ... } [captured x] | semmle.label | -> { ... } [captured x] | +| captured_variables.rb:223:13:223:13 | x | semmle.label | x | | captured_variables.rb:226:5:226:7 | [post] fn1 [captured y] | semmle.label | [post] fn1 [captured y] | | captured_variables.rb:226:5:226:7 | fn1 [captured x] | semmle.label | fn1 [captured x] | | captured_variables.rb:227:10:227:10 | y | semmle.label | y | @@ -506,6 +472,7 @@ subpaths | captured_variables.rb:83:6:83:8 | foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:9:61:21 | return | captured_variables.rb:83:6:83:18 | call to get_field | | captured_variables.rb:83:6:83:8 | foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:9:14:21 | return | captured_variables.rb:83:6:83:18 | call to get_field | | captured_variables.rb:98:13:98:20 | call to taint | captured_variables.rb:93:17:93:17 | x | captured_variables.rb:94:5:96:5 | -> { ... } [captured x] | captured_variables.rb:98:1:98:21 | call to capture_arg [captured x] | +| captured_variables.rb:226:5:226:7 | fn1 [captured x] | captured_variables.rb:223:13:223:13 | x | captured_variables.rb:223:13:223:13 | x | captured_variables.rb:226:5:226:7 | [post] fn1 [captured y] | | instance_variables.rb:28:20:28:24 | field | instance_variables.rb:22:20:22:24 | field | instance_variables.rb:23:9:23:14 | [post] self [@field] | instance_variables.rb:28:9:28:25 | [post] self [@field] | | instance_variables.rb:33:13:33:13 | x | instance_variables.rb:22:20:22:24 | field | instance_variables.rb:23:9:23:14 | [post] self [@field] | instance_variables.rb:33:9:33:14 | call to new [@field] | | instance_variables.rb:36:10:36:23 | call to new [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:36:10:36:33 | call to get_field | diff --git a/ruby/ql/test/library-tests/dataflow/global/captured_variables.rb b/ruby/ql/test/library-tests/dataflow/global/captured_variables.rb index 79d1fc83b76..8c7c5049b2d 100644 --- a/ruby/ql/test/library-tests/dataflow/global/captured_variables.rb +++ b/ruby/ql/test/library-tests/dataflow/global/captured_variables.rb @@ -228,3 +228,17 @@ def multi_capture end multi_capture + +def m1 + x = taint(19) + + fn1 = -> { + sink x + } + + x = nil + + fn1.call() +end + +m1 \ No newline at end of file diff --git a/ruby/ql/test/library-tests/dataflow/global/instance_variables.rb b/ruby/ql/test/library-tests/dataflow/global/instance_variables.rb index e1687bfed2c..9943b3cb579 100644 --- a/ruby/ql/test/library-tests/dataflow/global/instance_variables.rb +++ b/ruby/ql/test/library-tests/dataflow/global/instance_variables.rb @@ -70,7 +70,7 @@ foo3 = Foo.new foo3.set_field(taint(22)) sink(foo3.field) # $ hasValueFlow=22 -foo4 = "hello" +foo4 = 4 foo4.other = taint(23) sink(foo4.other) # no field flow for constants diff --git a/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.expected b/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.expected index df37ffac47a..d2da8837a56 100644 --- a/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.expected +++ b/ruby/ql/test/library-tests/dataflow/hash-flow/hash-flow.expected @@ -5,11 +5,16 @@ edges | hash_flow.rb:10:5:10:8 | hash [element :c] | hash_flow.rb:24:10:24:13 | hash [element :c] | provenance | | | hash_flow.rb:10:5:10:8 | hash [element e] | hash_flow.rb:26:10:26:13 | hash [element e] | provenance | | | hash_flow.rb:10:5:10:8 | hash [element g] | hash_flow.rb:28:10:28:13 | hash [element g] | provenance | | -| hash_flow.rb:11:15:11:24 | call to taint | hash_flow.rb:10:5:10:8 | hash [element :a] | provenance | | -| hash_flow.rb:13:12:13:21 | call to taint | hash_flow.rb:10:5:10:8 | hash [element :c] | provenance | | -| hash_flow.rb:15:14:15:23 | call to taint | hash_flow.rb:10:5:10:8 | hash [element e] | provenance | | -| hash_flow.rb:17:16:17:25 | call to taint | hash_flow.rb:10:5:10:8 | hash [element g] | provenance | | -| hash_flow.rb:19:14:19:23 | call to taint | hash_flow.rb:10:5:10:8 | hash [element 0] | provenance | | +| hash_flow.rb:10:12:21:5 | call to [] [element 0] | hash_flow.rb:10:5:10:8 | hash [element 0] | provenance | | +| hash_flow.rb:10:12:21:5 | call to [] [element :a] | hash_flow.rb:10:5:10:8 | hash [element :a] | provenance | | +| hash_flow.rb:10:12:21:5 | call to [] [element :c] | hash_flow.rb:10:5:10:8 | hash [element :c] | provenance | | +| hash_flow.rb:10:12:21:5 | call to [] [element e] | hash_flow.rb:10:5:10:8 | hash [element e] | provenance | | +| hash_flow.rb:10:12:21:5 | call to [] [element g] | hash_flow.rb:10:5:10:8 | hash [element g] | provenance | | +| hash_flow.rb:11:15:11:24 | call to taint | hash_flow.rb:10:12:21:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:13:12:13:21 | call to taint | hash_flow.rb:10:12:21:5 | call to [] [element :c] | provenance | | +| hash_flow.rb:15:14:15:23 | call to taint | hash_flow.rb:10:12:21:5 | call to [] [element e] | provenance | | +| hash_flow.rb:17:16:17:25 | call to taint | hash_flow.rb:10:12:21:5 | call to [] [element g] | provenance | | +| hash_flow.rb:19:14:19:23 | call to taint | hash_flow.rb:10:12:21:5 | call to [] [element 0] | provenance | | | hash_flow.rb:22:10:22:13 | hash [element :a] | hash_flow.rb:22:10:22:17 | ...[...] | provenance | | | hash_flow.rb:24:10:24:13 | hash [element :c] | hash_flow.rb:24:10:24:17 | ...[...] | provenance | | | hash_flow.rb:26:10:26:13 | hash [element e] | hash_flow.rb:26:10:26:18 | ...[...] | provenance | | @@ -47,7 +52,8 @@ edges | hash_flow.rb:55:21:55:30 | call to taint | hash_flow.rb:55:13:55:37 | ...[...] [element :a] | provenance | | | hash_flow.rb:56:10:56:14 | hash1 [element :a] | hash_flow.rb:56:10:56:18 | ...[...] | provenance | | | hash_flow.rb:59:5:59:5 | x [element :a] | hash_flow.rb:60:18:60:18 | x [element :a] | provenance | | -| hash_flow.rb:59:13:59:22 | call to taint | hash_flow.rb:59:5:59:5 | x [element :a] | provenance | | +| hash_flow.rb:59:9:59:29 | call to [] [element :a] | hash_flow.rb:59:5:59:5 | x [element :a] | provenance | | +| hash_flow.rb:59:13:59:22 | call to taint | hash_flow.rb:59:9:59:29 | call to [] [element :a] | provenance | | | hash_flow.rb:60:5:60:9 | hash2 [element :a] | hash_flow.rb:61:10:61:14 | hash2 [element :a] | provenance | | | hash_flow.rb:60:13:60:19 | ...[...] [element :a] | hash_flow.rb:60:5:60:9 | hash2 [element :a] | provenance | | | hash_flow.rb:60:18:60:18 | x [element :a] | hash_flow.rb:60:13:60:19 | ...[...] [element :a] | provenance | | @@ -55,7 +61,9 @@ edges | hash_flow.rb:64:5:64:9 | hash3 [element] | hash_flow.rb:65:10:65:14 | hash3 [element] | provenance | | | hash_flow.rb:64:5:64:9 | hash3 [element] | hash_flow.rb:66:10:66:14 | hash3 [element] | provenance | | | hash_flow.rb:64:13:64:45 | ...[...] [element] | hash_flow.rb:64:5:64:9 | hash3 [element] | provenance | | -| hash_flow.rb:64:24:64:33 | call to taint | hash_flow.rb:64:13:64:45 | ...[...] [element] | provenance | | +| hash_flow.rb:64:18:64:44 | call to [] [element 0, element 1] | hash_flow.rb:64:13:64:45 | ...[...] [element] | provenance | | +| hash_flow.rb:64:19:64:34 | call to [] [element 1] | hash_flow.rb:64:18:64:44 | call to [] [element 0, element 1] | provenance | | +| hash_flow.rb:64:24:64:33 | call to taint | hash_flow.rb:64:19:64:34 | call to [] [element 1] | provenance | | | hash_flow.rb:65:10:65:14 | hash3 [element] | hash_flow.rb:65:10:65:18 | ...[...] | provenance | | | hash_flow.rb:66:10:66:14 | hash3 [element] | hash_flow.rb:66:10:66:18 | ...[...] | provenance | | | hash_flow.rb:68:5:68:9 | hash4 [element :a] | hash_flow.rb:69:10:69:14 | hash4 [element :a] | provenance | | @@ -68,14 +76,16 @@ edges | hash_flow.rb:73:10:73:14 | hash5 [element a] | hash_flow.rb:73:10:73:19 | ...[...] | provenance | | | hash_flow.rb:76:5:76:9 | hash6 [element a] | hash_flow.rb:77:10:77:14 | hash6 [element a] | provenance | | | hash_flow.rb:76:13:76:47 | ...[...] [element a] | hash_flow.rb:76:5:76:9 | hash6 [element a] | provenance | | -| hash_flow.rb:76:26:76:35 | call to taint | hash_flow.rb:76:13:76:47 | ...[...] [element a] | provenance | | +| hash_flow.rb:76:18:76:46 | call to [] [element a] | hash_flow.rb:76:13:76:47 | ...[...] [element a] | provenance | | +| hash_flow.rb:76:26:76:35 | call to taint | hash_flow.rb:76:18:76:46 | call to [] [element a] | provenance | | | hash_flow.rb:77:10:77:14 | hash6 [element a] | hash_flow.rb:77:10:77:19 | ...[...] | provenance | | | hash_flow.rb:84:5:84:9 | hash1 [element :a] | hash_flow.rb:85:10:85:14 | hash1 [element :a] | provenance | | | hash_flow.rb:84:13:84:42 | call to [] [element :a] | hash_flow.rb:84:5:84:9 | hash1 [element :a] | provenance | | | hash_flow.rb:84:26:84:35 | call to taint | hash_flow.rb:84:13:84:42 | call to [] [element :a] | provenance | | | hash_flow.rb:85:10:85:14 | hash1 [element :a] | hash_flow.rb:85:10:85:18 | ...[...] | provenance | | | hash_flow.rb:92:5:92:8 | hash [element :a] | hash_flow.rb:96:30:96:33 | hash [element :a] | provenance | | -| hash_flow.rb:93:15:93:24 | call to taint | hash_flow.rb:92:5:92:8 | hash [element :a] | provenance | | +| hash_flow.rb:92:12:95:5 | call to [] [element :a] | hash_flow.rb:92:5:92:8 | hash [element :a] | provenance | | +| hash_flow.rb:93:15:93:24 | call to taint | hash_flow.rb:92:12:95:5 | call to [] [element :a] | provenance | | | hash_flow.rb:96:5:96:9 | hash2 [element :a] | hash_flow.rb:97:10:97:14 | hash2 [element :a] | provenance | | | hash_flow.rb:96:13:96:34 | call to try_convert [element :a] | hash_flow.rb:96:5:96:9 | hash2 [element :a] | provenance | | | hash_flow.rb:96:30:96:33 | hash [element :a] | hash_flow.rb:96:13:96:34 | call to try_convert [element :a] | provenance | | @@ -98,14 +108,16 @@ edges | hash_flow.rb:120:10:120:13 | hash [element] | hash_flow.rb:120:10:120:17 | ...[...] | provenance | | | hash_flow.rb:127:5:127:8 | hash [element :a] | hash_flow.rb:131:5:131:8 | hash [element :a] | provenance | | | hash_flow.rb:127:5:127:8 | hash [element :a] | hash_flow.rb:134:5:134:8 | hash [element :a] | provenance | | -| hash_flow.rb:128:15:128:24 | call to taint | hash_flow.rb:127:5:127:8 | hash [element :a] | provenance | | +| hash_flow.rb:127:12:130:5 | call to [] [element :a] | hash_flow.rb:127:5:127:8 | hash [element :a] | provenance | | +| hash_flow.rb:128:15:128:24 | call to taint | hash_flow.rb:127:12:130:5 | call to [] [element :a] | provenance | | | hash_flow.rb:131:5:131:8 | hash [element :a] | hash_flow.rb:131:18:131:29 | key_or_value | provenance | | | hash_flow.rb:131:18:131:29 | key_or_value | hash_flow.rb:132:14:132:25 | key_or_value | provenance | | | hash_flow.rb:134:5:134:8 | hash [element :a] | hash_flow.rb:134:22:134:26 | value | provenance | | | hash_flow.rb:134:22:134:26 | value | hash_flow.rb:136:14:136:18 | value | provenance | | | hash_flow.rb:143:5:143:8 | hash [element :a] | hash_flow.rb:147:9:147:12 | hash [element :a] | provenance | | | hash_flow.rb:143:5:143:8 | hash [element :a] | hash_flow.rb:151:9:151:12 | hash [element :a] | provenance | | -| hash_flow.rb:144:15:144:25 | call to taint | hash_flow.rb:143:5:143:8 | hash [element :a] | provenance | | +| hash_flow.rb:143:12:146:5 | call to [] [element :a] | hash_flow.rb:143:5:143:8 | hash [element :a] | provenance | | +| hash_flow.rb:144:15:144:25 | call to taint | hash_flow.rb:143:12:146:5 | call to [] [element :a] | provenance | | | hash_flow.rb:147:5:147:5 | b [element 1] | hash_flow.rb:149:10:149:10 | b [element 1] | provenance | | | hash_flow.rb:147:5:147:5 | b [element 1] | hash_flow.rb:150:10:150:10 | b [element 1] | provenance | | | hash_flow.rb:147:9:147:12 | hash [element :a] | hash_flow.rb:147:9:147:22 | call to assoc [element 1] | provenance | | @@ -117,18 +129,21 @@ edges | hash_flow.rb:151:9:151:21 | call to assoc [element 1] | hash_flow.rb:151:5:151:5 | c [element 1] | provenance | | | hash_flow.rb:152:10:152:10 | c [element 1] | hash_flow.rb:152:10:152:13 | ...[...] | provenance | | | hash_flow.rb:169:5:169:8 | hash [element :a] | hash_flow.rb:173:9:173:12 | hash [element :a] | provenance | | -| hash_flow.rb:170:15:170:25 | call to taint | hash_flow.rb:169:5:169:8 | hash [element :a] | provenance | | +| hash_flow.rb:169:12:172:5 | call to [] [element :a] | hash_flow.rb:169:5:169:8 | hash [element :a] | provenance | | +| hash_flow.rb:170:15:170:25 | call to taint | hash_flow.rb:169:12:172:5 | call to [] [element :a] | provenance | | | hash_flow.rb:173:5:173:5 | a [element :a] | hash_flow.rb:174:10:174:10 | a [element :a] | provenance | | | hash_flow.rb:173:9:173:12 | hash [element :a] | hash_flow.rb:173:9:173:20 | call to compact [element :a] | provenance | | | hash_flow.rb:173:9:173:20 | call to compact [element :a] | hash_flow.rb:173:5:173:5 | a [element :a] | provenance | | | hash_flow.rb:174:10:174:10 | a [element :a] | hash_flow.rb:174:10:174:14 | ...[...] | provenance | | | hash_flow.rb:181:5:181:8 | hash [element :a] | hash_flow.rb:185:9:185:12 | hash [element :a] | provenance | | -| hash_flow.rb:182:15:182:25 | call to taint | hash_flow.rb:181:5:181:8 | hash [element :a] | provenance | | +| hash_flow.rb:181:12:184:5 | call to [] [element :a] | hash_flow.rb:181:5:181:8 | hash [element :a] | provenance | | +| hash_flow.rb:182:15:182:25 | call to taint | hash_flow.rb:181:12:184:5 | call to [] [element :a] | provenance | | | hash_flow.rb:185:5:185:5 | a | hash_flow.rb:186:10:186:10 | a | provenance | | | hash_flow.rb:185:9:185:12 | hash [element :a] | hash_flow.rb:185:9:185:23 | call to delete | provenance | | | hash_flow.rb:185:9:185:23 | call to delete | hash_flow.rb:185:5:185:5 | a | provenance | | | hash_flow.rb:193:5:193:8 | hash [element :a] | hash_flow.rb:197:9:197:12 | hash [element :a] | provenance | | -| hash_flow.rb:194:15:194:25 | call to taint | hash_flow.rb:193:5:193:8 | hash [element :a] | provenance | | +| hash_flow.rb:193:12:196:5 | call to [] [element :a] | hash_flow.rb:193:5:193:8 | hash [element :a] | provenance | | +| hash_flow.rb:194:15:194:25 | call to taint | hash_flow.rb:193:12:196:5 | call to [] [element :a] | provenance | | | hash_flow.rb:197:5:197:5 | a [element :a] | hash_flow.rb:201:10:201:10 | a [element :a] | provenance | | | hash_flow.rb:197:9:197:12 | [post] hash [element :a] | hash_flow.rb:202:10:202:13 | hash [element :a] | provenance | | | hash_flow.rb:197:9:197:12 | hash [element :a] | hash_flow.rb:197:9:197:12 | [post] hash [element :a] | provenance | | @@ -140,12 +155,16 @@ edges | hash_flow.rb:202:10:202:13 | hash [element :a] | hash_flow.rb:202:10:202:17 | ...[...] | provenance | | | hash_flow.rb:209:5:209:8 | hash [element :a] | hash_flow.rb:217:10:217:13 | hash [element :a] | provenance | | | hash_flow.rb:209:5:209:8 | hash [element :c, element :d] | hash_flow.rb:219:10:219:13 | hash [element :c, element :d] | provenance | | -| hash_flow.rb:210:15:210:25 | call to taint | hash_flow.rb:209:5:209:8 | hash [element :a] | provenance | | -| hash_flow.rb:213:19:213:29 | call to taint | hash_flow.rb:209:5:209:8 | hash [element :c, element :d] | provenance | | +| hash_flow.rb:209:12:216:5 | call to [] [element :a] | hash_flow.rb:209:5:209:8 | hash [element :a] | provenance | | +| hash_flow.rb:209:12:216:5 | call to [] [element :c, element :d] | hash_flow.rb:209:5:209:8 | hash [element :c, element :d] | provenance | | +| hash_flow.rb:210:15:210:25 | call to taint | hash_flow.rb:209:12:216:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:212:15:215:9 | call to [] [element :d] | hash_flow.rb:209:12:216:5 | call to [] [element :c, element :d] | provenance | | +| hash_flow.rb:213:19:213:29 | call to taint | hash_flow.rb:212:15:215:9 | call to [] [element :d] | provenance | | | hash_flow.rb:217:10:217:13 | hash [element :a] | hash_flow.rb:217:10:217:21 | call to dig | provenance | | | hash_flow.rb:219:10:219:13 | hash [element :c, element :d] | hash_flow.rb:219:10:219:24 | call to dig | provenance | | | hash_flow.rb:226:5:226:8 | hash [element :a] | hash_flow.rb:230:9:230:12 | hash [element :a] | provenance | | -| hash_flow.rb:227:15:227:25 | call to taint | hash_flow.rb:226:5:226:8 | hash [element :a] | provenance | | +| hash_flow.rb:226:12:229:5 | call to [] [element :a] | hash_flow.rb:226:5:226:8 | hash [element :a] | provenance | | +| hash_flow.rb:227:15:227:25 | call to taint | hash_flow.rb:226:12:229:5 | call to [] [element :a] | provenance | | | hash_flow.rb:230:5:230:5 | x [element :a] | hash_flow.rb:234:10:234:10 | x [element :a] | provenance | | | hash_flow.rb:230:9:230:12 | hash [element :a] | hash_flow.rb:230:9:233:7 | call to each [element :a] | provenance | | | hash_flow.rb:230:9:230:12 | hash [element :a] | hash_flow.rb:230:28:230:32 | value | provenance | | @@ -153,13 +172,15 @@ edges | hash_flow.rb:230:28:230:32 | value | hash_flow.rb:232:14:232:18 | value | provenance | | | hash_flow.rb:234:10:234:10 | x [element :a] | hash_flow.rb:234:10:234:14 | ...[...] | provenance | | | hash_flow.rb:241:5:241:8 | hash [element :a] | hash_flow.rb:245:9:245:12 | hash [element :a] | provenance | | -| hash_flow.rb:242:15:242:25 | call to taint | hash_flow.rb:241:5:241:8 | hash [element :a] | provenance | | +| hash_flow.rb:241:12:244:5 | call to [] [element :a] | hash_flow.rb:241:5:241:8 | hash [element :a] | provenance | | +| hash_flow.rb:242:15:242:25 | call to taint | hash_flow.rb:241:12:244:5 | call to [] [element :a] | provenance | | | hash_flow.rb:245:5:245:5 | x [element :a] | hash_flow.rb:248:10:248:10 | x [element :a] | provenance | | | hash_flow.rb:245:9:245:12 | hash [element :a] | hash_flow.rb:245:9:247:7 | call to each_key [element :a] | provenance | | | hash_flow.rb:245:9:247:7 | call to each_key [element :a] | hash_flow.rb:245:5:245:5 | x [element :a] | provenance | | | hash_flow.rb:248:10:248:10 | x [element :a] | hash_flow.rb:248:10:248:14 | ...[...] | provenance | | | hash_flow.rb:255:5:255:8 | hash [element :a] | hash_flow.rb:259:9:259:12 | hash [element :a] | provenance | | -| hash_flow.rb:256:15:256:25 | call to taint | hash_flow.rb:255:5:255:8 | hash [element :a] | provenance | | +| hash_flow.rb:255:12:258:5 | call to [] [element :a] | hash_flow.rb:255:5:255:8 | hash [element :a] | provenance | | +| hash_flow.rb:256:15:256:25 | call to taint | hash_flow.rb:255:12:258:5 | call to [] [element :a] | provenance | | | hash_flow.rb:259:5:259:5 | x [element :a] | hash_flow.rb:263:10:263:10 | x [element :a] | provenance | | | hash_flow.rb:259:9:259:12 | hash [element :a] | hash_flow.rb:259:9:262:7 | call to each_pair [element :a] | provenance | | | hash_flow.rb:259:9:259:12 | hash [element :a] | hash_flow.rb:259:33:259:37 | value | provenance | | @@ -167,7 +188,8 @@ edges | hash_flow.rb:259:33:259:37 | value | hash_flow.rb:261:14:261:18 | value | provenance | | | hash_flow.rb:263:10:263:10 | x [element :a] | hash_flow.rb:263:10:263:14 | ...[...] | provenance | | | hash_flow.rb:270:5:270:8 | hash [element :a] | hash_flow.rb:274:9:274:12 | hash [element :a] | provenance | | -| hash_flow.rb:271:15:271:25 | call to taint | hash_flow.rb:270:5:270:8 | hash [element :a] | provenance | | +| hash_flow.rb:270:12:273:5 | call to [] [element :a] | hash_flow.rb:270:5:270:8 | hash [element :a] | provenance | | +| hash_flow.rb:271:15:271:25 | call to taint | hash_flow.rb:270:12:273:5 | call to [] [element :a] | provenance | | | hash_flow.rb:274:5:274:5 | x [element :a] | hash_flow.rb:277:10:277:10 | x [element :a] | provenance | | | hash_flow.rb:274:9:274:12 | hash [element :a] | hash_flow.rb:274:9:276:7 | call to each_value [element :a] | provenance | | | hash_flow.rb:274:9:274:12 | hash [element :a] | hash_flow.rb:274:29:274:33 | value | provenance | | @@ -175,7 +197,8 @@ edges | hash_flow.rb:274:29:274:33 | value | hash_flow.rb:275:14:275:18 | value | provenance | | | hash_flow.rb:277:10:277:10 | x [element :a] | hash_flow.rb:277:10:277:14 | ...[...] | provenance | | | hash_flow.rb:284:5:284:8 | hash [element :c] | hash_flow.rb:290:9:290:12 | hash [element :c] | provenance | | -| hash_flow.rb:287:15:287:25 | call to taint | hash_flow.rb:284:5:284:8 | hash [element :c] | provenance | | +| hash_flow.rb:284:12:289:5 | call to [] [element :c] | hash_flow.rb:284:5:284:8 | hash [element :c] | provenance | | +| hash_flow.rb:287:15:287:25 | call to taint | hash_flow.rb:284:12:289:5 | call to [] [element :c] | provenance | | | hash_flow.rb:290:5:290:5 | x [element :c] | hash_flow.rb:293:10:293:10 | x [element :c] | provenance | | | hash_flow.rb:290:9:290:12 | hash [element :c] | hash_flow.rb:290:9:290:28 | call to except [element :c] | provenance | | | hash_flow.rb:290:9:290:28 | call to except [element :c] | hash_flow.rb:290:5:290:5 | x [element :c] | provenance | | @@ -186,8 +209,10 @@ edges | hash_flow.rb:300:5:300:8 | hash [element :a] | hash_flow.rb:315:9:315:12 | hash [element :a] | provenance | | | hash_flow.rb:300:5:300:8 | hash [element :c] | hash_flow.rb:305:9:305:12 | hash [element :c] | provenance | | | hash_flow.rb:300:5:300:8 | hash [element :c] | hash_flow.rb:315:9:315:12 | hash [element :c] | provenance | | -| hash_flow.rb:301:15:301:25 | call to taint | hash_flow.rb:300:5:300:8 | hash [element :a] | provenance | | -| hash_flow.rb:303:15:303:25 | call to taint | hash_flow.rb:300:5:300:8 | hash [element :c] | provenance | | +| hash_flow.rb:300:12:304:5 | call to [] [element :a] | hash_flow.rb:300:5:300:8 | hash [element :a] | provenance | | +| hash_flow.rb:300:12:304:5 | call to [] [element :c] | hash_flow.rb:300:5:300:8 | hash [element :c] | provenance | | +| hash_flow.rb:301:15:301:25 | call to taint | hash_flow.rb:300:12:304:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:303:15:303:25 | call to taint | hash_flow.rb:300:12:304:5 | call to [] [element :c] | provenance | | | hash_flow.rb:305:5:305:5 | b | hash_flow.rb:308:10:308:10 | b | provenance | | | hash_flow.rb:305:9:305:12 | hash [element :a] | hash_flow.rb:305:9:307:7 | call to fetch | provenance | | | hash_flow.rb:305:9:305:12 | hash [element :c] | hash_flow.rb:305:9:307:7 | call to fetch | provenance | | @@ -214,8 +239,10 @@ edges | hash_flow.rb:322:5:322:8 | hash [element :a] | hash_flow.rb:334:9:334:12 | hash [element :a] | provenance | | | hash_flow.rb:322:5:322:8 | hash [element :c] | hash_flow.rb:327:9:327:12 | hash [element :c] | provenance | | | hash_flow.rb:322:5:322:8 | hash [element :c] | hash_flow.rb:334:9:334:12 | hash [element :c] | provenance | | -| hash_flow.rb:323:15:323:25 | call to taint | hash_flow.rb:322:5:322:8 | hash [element :a] | provenance | | -| hash_flow.rb:325:15:325:25 | call to taint | hash_flow.rb:322:5:322:8 | hash [element :c] | provenance | | +| hash_flow.rb:322:12:326:5 | call to [] [element :a] | hash_flow.rb:322:5:322:8 | hash [element :a] | provenance | | +| hash_flow.rb:322:12:326:5 | call to [] [element :c] | hash_flow.rb:322:5:322:8 | hash [element :c] | provenance | | +| hash_flow.rb:323:15:323:25 | call to taint | hash_flow.rb:322:12:326:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:325:15:325:25 | call to taint | hash_flow.rb:322:12:326:5 | call to [] [element :c] | provenance | | | hash_flow.rb:327:5:327:5 | b [element] | hash_flow.rb:331:10:331:10 | b [element] | provenance | | | hash_flow.rb:327:9:327:12 | hash [element :a] | hash_flow.rb:327:9:330:7 | call to fetch_values [element] | provenance | | | hash_flow.rb:327:9:327:12 | hash [element :c] | hash_flow.rb:327:9:330:7 | call to fetch_values [element] | provenance | | @@ -235,8 +262,10 @@ edges | hash_flow.rb:335:10:335:10 | b [element] | hash_flow.rb:335:10:335:13 | ...[...] | provenance | | | hash_flow.rb:341:5:341:8 | hash [element :a] | hash_flow.rb:346:9:346:12 | hash [element :a] | provenance | | | hash_flow.rb:341:5:341:8 | hash [element :c] | hash_flow.rb:346:9:346:12 | hash [element :c] | provenance | | -| hash_flow.rb:342:15:342:25 | call to taint | hash_flow.rb:341:5:341:8 | hash [element :a] | provenance | | -| hash_flow.rb:344:15:344:25 | call to taint | hash_flow.rb:341:5:341:8 | hash [element :c] | provenance | | +| hash_flow.rb:341:12:345:5 | call to [] [element :a] | hash_flow.rb:341:5:341:8 | hash [element :a] | provenance | | +| hash_flow.rb:341:12:345:5 | call to [] [element :c] | hash_flow.rb:341:5:341:8 | hash [element :c] | provenance | | +| hash_flow.rb:342:15:342:25 | call to taint | hash_flow.rb:341:12:345:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:344:15:344:25 | call to taint | hash_flow.rb:341:12:345:5 | call to [] [element :c] | provenance | | | hash_flow.rb:346:5:346:5 | b [element :a] | hash_flow.rb:351:11:351:11 | b [element :a] | provenance | | | hash_flow.rb:346:9:346:12 | hash [element :a] | hash_flow.rb:346:9:350:7 | call to filter [element :a] | provenance | | | hash_flow.rb:346:9:346:12 | hash [element :a] | hash_flow.rb:346:30:346:34 | value | provenance | | @@ -247,8 +276,10 @@ edges | hash_flow.rb:351:11:351:15 | ...[...] | hash_flow.rb:351:10:351:16 | ( ... ) | provenance | | | hash_flow.rb:357:5:357:8 | hash [element :a] | hash_flow.rb:362:5:362:8 | hash [element :a] | provenance | | | hash_flow.rb:357:5:357:8 | hash [element :c] | hash_flow.rb:362:5:362:8 | hash [element :c] | provenance | | -| hash_flow.rb:358:15:358:25 | call to taint | hash_flow.rb:357:5:357:8 | hash [element :a] | provenance | | -| hash_flow.rb:360:15:360:25 | call to taint | hash_flow.rb:357:5:357:8 | hash [element :c] | provenance | | +| hash_flow.rb:357:12:361:5 | call to [] [element :a] | hash_flow.rb:357:5:357:8 | hash [element :a] | provenance | | +| hash_flow.rb:357:12:361:5 | call to [] [element :c] | hash_flow.rb:357:5:357:8 | hash [element :c] | provenance | | +| hash_flow.rb:358:15:358:25 | call to taint | hash_flow.rb:357:12:361:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:360:15:360:25 | call to taint | hash_flow.rb:357:12:361:5 | call to [] [element :c] | provenance | | | hash_flow.rb:362:5:362:8 | [post] hash [element :a] | hash_flow.rb:367:11:367:14 | hash [element :a] | provenance | | | hash_flow.rb:362:5:362:8 | hash [element :a] | hash_flow.rb:362:5:362:8 | [post] hash [element :a] | provenance | | | hash_flow.rb:362:5:362:8 | hash [element :a] | hash_flow.rb:362:27:362:31 | value | provenance | | @@ -258,8 +289,10 @@ edges | hash_flow.rb:367:11:367:18 | ...[...] | hash_flow.rb:367:10:367:19 | ( ... ) | provenance | | | hash_flow.rb:373:5:373:8 | hash [element :a] | hash_flow.rb:378:9:378:12 | hash [element :a] | provenance | | | hash_flow.rb:373:5:373:8 | hash [element :c] | hash_flow.rb:378:9:378:12 | hash [element :c] | provenance | | -| hash_flow.rb:374:15:374:25 | call to taint | hash_flow.rb:373:5:373:8 | hash [element :a] | provenance | | -| hash_flow.rb:376:15:376:25 | call to taint | hash_flow.rb:373:5:373:8 | hash [element :c] | provenance | | +| hash_flow.rb:373:12:377:5 | call to [] [element :a] | hash_flow.rb:373:5:373:8 | hash [element :a] | provenance | | +| hash_flow.rb:373:12:377:5 | call to [] [element :c] | hash_flow.rb:373:5:373:8 | hash [element :c] | provenance | | +| hash_flow.rb:374:15:374:25 | call to taint | hash_flow.rb:373:12:377:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:376:15:376:25 | call to taint | hash_flow.rb:373:12:377:5 | call to [] [element :c] | provenance | | | hash_flow.rb:378:5:378:5 | b [element] | hash_flow.rb:379:11:379:11 | b [element] | provenance | | | hash_flow.rb:378:9:378:12 | hash [element :a] | hash_flow.rb:378:9:378:20 | call to flatten [element] | provenance | | | hash_flow.rb:378:9:378:12 | hash [element :c] | hash_flow.rb:378:9:378:20 | call to flatten [element] | provenance | | @@ -268,8 +301,10 @@ edges | hash_flow.rb:379:11:379:14 | ...[...] | hash_flow.rb:379:10:379:15 | ( ... ) | provenance | | | hash_flow.rb:385:5:385:8 | hash [element :a] | hash_flow.rb:390:9:390:12 | hash [element :a] | provenance | | | hash_flow.rb:385:5:385:8 | hash [element :c] | hash_flow.rb:390:9:390:12 | hash [element :c] | provenance | | -| hash_flow.rb:386:15:386:25 | call to taint | hash_flow.rb:385:5:385:8 | hash [element :a] | provenance | | -| hash_flow.rb:388:15:388:25 | call to taint | hash_flow.rb:385:5:385:8 | hash [element :c] | provenance | | +| hash_flow.rb:385:12:389:5 | call to [] [element :a] | hash_flow.rb:385:5:385:8 | hash [element :a] | provenance | | +| hash_flow.rb:385:12:389:5 | call to [] [element :c] | hash_flow.rb:385:5:385:8 | hash [element :c] | provenance | | +| hash_flow.rb:386:15:386:25 | call to taint | hash_flow.rb:385:12:389:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:388:15:388:25 | call to taint | hash_flow.rb:385:12:389:5 | call to [] [element :c] | provenance | | | hash_flow.rb:390:5:390:5 | b [element :a] | hash_flow.rb:396:11:396:11 | b [element :a] | provenance | | | hash_flow.rb:390:9:390:12 | [post] hash [element :a] | hash_flow.rb:395:11:395:14 | hash [element :a] | provenance | | | hash_flow.rb:390:9:390:12 | hash [element :a] | hash_flow.rb:390:9:390:12 | [post] hash [element :a] | provenance | | @@ -284,12 +319,16 @@ edges | hash_flow.rb:396:11:396:15 | ...[...] | hash_flow.rb:396:10:396:16 | ( ... ) | provenance | | | hash_flow.rb:402:5:402:9 | hash1 [element :a] | hash_flow.rb:412:12:412:16 | hash1 [element :a] | provenance | | | hash_flow.rb:402:5:402:9 | hash1 [element :c] | hash_flow.rb:412:12:412:16 | hash1 [element :c] | provenance | | -| hash_flow.rb:403:15:403:25 | call to taint | hash_flow.rb:402:5:402:9 | hash1 [element :a] | provenance | | -| hash_flow.rb:405:15:405:25 | call to taint | hash_flow.rb:402:5:402:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:402:13:406:5 | call to [] [element :a] | hash_flow.rb:402:5:402:9 | hash1 [element :a] | provenance | | +| hash_flow.rb:402:13:406:5 | call to [] [element :c] | hash_flow.rb:402:5:402:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:403:15:403:25 | call to taint | hash_flow.rb:402:13:406:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:405:15:405:25 | call to taint | hash_flow.rb:402:13:406:5 | call to [] [element :c] | provenance | | | hash_flow.rb:407:5:407:9 | hash2 [element :d] | hash_flow.rb:412:24:412:28 | hash2 [element :d] | provenance | | | hash_flow.rb:407:5:407:9 | hash2 [element :f] | hash_flow.rb:412:24:412:28 | hash2 [element :f] | provenance | | -| hash_flow.rb:408:15:408:25 | call to taint | hash_flow.rb:407:5:407:9 | hash2 [element :d] | provenance | | -| hash_flow.rb:410:15:410:25 | call to taint | hash_flow.rb:407:5:407:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:407:13:411:5 | call to [] [element :d] | hash_flow.rb:407:5:407:9 | hash2 [element :d] | provenance | | +| hash_flow.rb:407:13:411:5 | call to [] [element :f] | hash_flow.rb:407:5:407:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:408:15:408:25 | call to taint | hash_flow.rb:407:13:411:5 | call to [] [element :d] | provenance | | +| hash_flow.rb:410:15:410:25 | call to taint | hash_flow.rb:407:13:411:5 | call to [] [element :f] | provenance | | | hash_flow.rb:412:5:412:8 | hash [element :a] | hash_flow.rb:417:11:417:14 | hash [element :a] | provenance | | | hash_flow.rb:412:5:412:8 | hash [element :c] | hash_flow.rb:419:11:419:14 | hash [element :c] | provenance | | | hash_flow.rb:412:5:412:8 | hash [element :d] | hash_flow.rb:420:11:420:14 | hash [element :d] | provenance | | @@ -322,12 +361,16 @@ edges | hash_flow.rb:422:11:422:18 | ...[...] | hash_flow.rb:422:10:422:19 | ( ... ) | provenance | | | hash_flow.rb:428:5:428:9 | hash1 [element :a] | hash_flow.rb:438:12:438:16 | hash1 [element :a] | provenance | | | hash_flow.rb:428:5:428:9 | hash1 [element :c] | hash_flow.rb:438:12:438:16 | hash1 [element :c] | provenance | | -| hash_flow.rb:429:15:429:25 | call to taint | hash_flow.rb:428:5:428:9 | hash1 [element :a] | provenance | | -| hash_flow.rb:431:15:431:25 | call to taint | hash_flow.rb:428:5:428:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:428:13:432:5 | call to [] [element :a] | hash_flow.rb:428:5:428:9 | hash1 [element :a] | provenance | | +| hash_flow.rb:428:13:432:5 | call to [] [element :c] | hash_flow.rb:428:5:428:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:429:15:429:25 | call to taint | hash_flow.rb:428:13:432:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:431:15:431:25 | call to taint | hash_flow.rb:428:13:432:5 | call to [] [element :c] | provenance | | | hash_flow.rb:433:5:433:9 | hash2 [element :d] | hash_flow.rb:438:25:438:29 | hash2 [element :d] | provenance | | | hash_flow.rb:433:5:433:9 | hash2 [element :f] | hash_flow.rb:438:25:438:29 | hash2 [element :f] | provenance | | -| hash_flow.rb:434:15:434:25 | call to taint | hash_flow.rb:433:5:433:9 | hash2 [element :d] | provenance | | -| hash_flow.rb:436:15:436:25 | call to taint | hash_flow.rb:433:5:433:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:433:13:437:5 | call to [] [element :d] | hash_flow.rb:433:5:433:9 | hash2 [element :d] | provenance | | +| hash_flow.rb:433:13:437:5 | call to [] [element :f] | hash_flow.rb:433:5:433:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:434:15:434:25 | call to taint | hash_flow.rb:433:13:437:5 | call to [] [element :d] | provenance | | +| hash_flow.rb:436:15:436:25 | call to taint | hash_flow.rb:433:13:437:5 | call to [] [element :f] | provenance | | | hash_flow.rb:438:5:438:8 | hash [element :a] | hash_flow.rb:443:11:443:14 | hash [element :a] | provenance | | | hash_flow.rb:438:5:438:8 | hash [element :c] | hash_flow.rb:445:11:445:14 | hash [element :c] | provenance | | | hash_flow.rb:438:5:438:8 | hash [element :d] | hash_flow.rb:446:11:446:14 | hash [element :d] | provenance | | @@ -375,13 +418,15 @@ edges | hash_flow.rb:455:11:455:15 | hash1 [element :f] | hash_flow.rb:455:11:455:19 | ...[...] | provenance | | | hash_flow.rb:455:11:455:19 | ...[...] | hash_flow.rb:455:10:455:20 | ( ... ) | provenance | | | hash_flow.rb:461:5:461:8 | hash [element :a] | hash_flow.rb:465:9:465:12 | hash [element :a] | provenance | | -| hash_flow.rb:462:15:462:25 | call to taint | hash_flow.rb:461:5:461:8 | hash [element :a] | provenance | | +| hash_flow.rb:461:12:464:5 | call to [] [element :a] | hash_flow.rb:461:5:461:8 | hash [element :a] | provenance | | +| hash_flow.rb:462:15:462:25 | call to taint | hash_flow.rb:461:12:464:5 | call to [] [element :a] | provenance | | | hash_flow.rb:465:5:465:5 | b [element 1] | hash_flow.rb:467:10:467:10 | b [element 1] | provenance | | | hash_flow.rb:465:9:465:12 | hash [element :a] | hash_flow.rb:465:9:465:22 | call to rassoc [element 1] | provenance | | | hash_flow.rb:465:9:465:22 | call to rassoc [element 1] | hash_flow.rb:465:5:465:5 | b [element 1] | provenance | | | hash_flow.rb:467:10:467:10 | b [element 1] | hash_flow.rb:467:10:467:13 | ...[...] | provenance | | | hash_flow.rb:473:5:473:8 | hash [element :a] | hash_flow.rb:477:9:477:12 | hash [element :a] | provenance | | -| hash_flow.rb:474:15:474:25 | call to taint | hash_flow.rb:473:5:473:8 | hash [element :a] | provenance | | +| hash_flow.rb:473:12:476:5 | call to [] [element :a] | hash_flow.rb:473:5:473:8 | hash [element :a] | provenance | | +| hash_flow.rb:474:15:474:25 | call to taint | hash_flow.rb:473:12:476:5 | call to [] [element :a] | provenance | | | hash_flow.rb:477:5:477:5 | b [element :a] | hash_flow.rb:482:10:482:10 | b [element :a] | provenance | | | hash_flow.rb:477:9:477:12 | hash [element :a] | hash_flow.rb:477:9:481:7 | call to reject [element :a] | provenance | | | hash_flow.rb:477:9:477:12 | hash [element :a] | hash_flow.rb:477:29:477:33 | value | provenance | | @@ -389,7 +434,8 @@ edges | hash_flow.rb:477:29:477:33 | value | hash_flow.rb:479:14:479:18 | value | provenance | | | hash_flow.rb:482:10:482:10 | b [element :a] | hash_flow.rb:482:10:482:14 | ...[...] | provenance | | | hash_flow.rb:488:5:488:8 | hash [element :a] | hash_flow.rb:492:9:492:12 | hash [element :a] | provenance | | -| hash_flow.rb:489:15:489:25 | call to taint | hash_flow.rb:488:5:488:8 | hash [element :a] | provenance | | +| hash_flow.rb:488:12:491:5 | call to [] [element :a] | hash_flow.rb:488:5:488:8 | hash [element :a] | provenance | | +| hash_flow.rb:489:15:489:25 | call to taint | hash_flow.rb:488:12:491:5 | call to [] [element :a] | provenance | | | hash_flow.rb:492:5:492:5 | b [element :a] | hash_flow.rb:497:10:497:10 | b [element :a] | provenance | | | hash_flow.rb:492:9:492:12 | [post] hash [element :a] | hash_flow.rb:498:10:498:13 | hash [element :a] | provenance | | | hash_flow.rb:492:9:492:12 | hash [element :a] | hash_flow.rb:492:9:492:12 | [post] hash [element :a] | provenance | | @@ -401,8 +447,10 @@ edges | hash_flow.rb:498:10:498:13 | hash [element :a] | hash_flow.rb:498:10:498:17 | ...[...] | provenance | | | hash_flow.rb:504:5:504:8 | hash [element :a] | hash_flow.rb:512:19:512:22 | hash [element :a] | provenance | | | hash_flow.rb:504:5:504:8 | hash [element :c] | hash_flow.rb:512:19:512:22 | hash [element :c] | provenance | | -| hash_flow.rb:505:15:505:25 | call to taint | hash_flow.rb:504:5:504:8 | hash [element :a] | provenance | | -| hash_flow.rb:507:15:507:25 | call to taint | hash_flow.rb:504:5:504:8 | hash [element :c] | provenance | | +| hash_flow.rb:504:12:508:5 | call to [] [element :a] | hash_flow.rb:504:5:504:8 | hash [element :a] | provenance | | +| hash_flow.rb:504:12:508:5 | call to [] [element :c] | hash_flow.rb:504:5:504:8 | hash [element :c] | provenance | | +| hash_flow.rb:505:15:505:25 | call to taint | hash_flow.rb:504:12:508:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:507:15:507:25 | call to taint | hash_flow.rb:504:12:508:5 | call to [] [element :c] | provenance | | | hash_flow.rb:512:5:512:9 | [post] hash2 [element :a] | hash_flow.rb:513:11:513:15 | hash2 [element :a] | provenance | | | hash_flow.rb:512:5:512:9 | [post] hash2 [element :c] | hash_flow.rb:515:11:515:15 | hash2 [element :c] | provenance | | | hash_flow.rb:512:19:512:22 | hash [element :a] | hash_flow.rb:512:5:512:9 | [post] hash2 [element :a] | provenance | | @@ -413,8 +461,10 @@ edges | hash_flow.rb:515:11:515:19 | ...[...] | hash_flow.rb:515:10:515:20 | ( ... ) | provenance | | | hash_flow.rb:519:5:519:8 | hash [element :a] | hash_flow.rb:524:9:524:12 | hash [element :a] | provenance | | | hash_flow.rb:519:5:519:8 | hash [element :c] | hash_flow.rb:524:9:524:12 | hash [element :c] | provenance | | -| hash_flow.rb:520:15:520:25 | call to taint | hash_flow.rb:519:5:519:8 | hash [element :a] | provenance | | -| hash_flow.rb:522:15:522:25 | call to taint | hash_flow.rb:519:5:519:8 | hash [element :c] | provenance | | +| hash_flow.rb:519:12:523:5 | call to [] [element :a] | hash_flow.rb:519:5:519:8 | hash [element :a] | provenance | | +| hash_flow.rb:519:12:523:5 | call to [] [element :c] | hash_flow.rb:519:5:519:8 | hash [element :c] | provenance | | +| hash_flow.rb:520:15:520:25 | call to taint | hash_flow.rb:519:12:523:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:522:15:522:25 | call to taint | hash_flow.rb:519:12:523:5 | call to [] [element :c] | provenance | | | hash_flow.rb:524:5:524:5 | b [element :a] | hash_flow.rb:529:11:529:11 | b [element :a] | provenance | | | hash_flow.rb:524:9:524:12 | hash [element :a] | hash_flow.rb:524:9:528:7 | call to select [element :a] | provenance | | | hash_flow.rb:524:9:524:12 | hash [element :a] | hash_flow.rb:524:30:524:34 | value | provenance | | @@ -425,8 +475,10 @@ edges | hash_flow.rb:529:11:529:15 | ...[...] | hash_flow.rb:529:10:529:16 | ( ... ) | provenance | | | hash_flow.rb:535:5:535:8 | hash [element :a] | hash_flow.rb:540:5:540:8 | hash [element :a] | provenance | | | hash_flow.rb:535:5:535:8 | hash [element :c] | hash_flow.rb:540:5:540:8 | hash [element :c] | provenance | | -| hash_flow.rb:536:15:536:25 | call to taint | hash_flow.rb:535:5:535:8 | hash [element :a] | provenance | | -| hash_flow.rb:538:15:538:25 | call to taint | hash_flow.rb:535:5:535:8 | hash [element :c] | provenance | | +| hash_flow.rb:535:12:539:5 | call to [] [element :a] | hash_flow.rb:535:5:535:8 | hash [element :a] | provenance | | +| hash_flow.rb:535:12:539:5 | call to [] [element :c] | hash_flow.rb:535:5:535:8 | hash [element :c] | provenance | | +| hash_flow.rb:536:15:536:25 | call to taint | hash_flow.rb:535:12:539:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:538:15:538:25 | call to taint | hash_flow.rb:535:12:539:5 | call to [] [element :c] | provenance | | | hash_flow.rb:540:5:540:8 | [post] hash [element :a] | hash_flow.rb:545:11:545:14 | hash [element :a] | provenance | | | hash_flow.rb:540:5:540:8 | hash [element :a] | hash_flow.rb:540:5:540:8 | [post] hash [element :a] | provenance | | | hash_flow.rb:540:5:540:8 | hash [element :a] | hash_flow.rb:540:27:540:31 | value | provenance | | @@ -436,8 +488,10 @@ edges | hash_flow.rb:545:11:545:18 | ...[...] | hash_flow.rb:545:10:545:19 | ( ... ) | provenance | | | hash_flow.rb:551:5:551:8 | hash [element :a] | hash_flow.rb:556:9:556:12 | hash [element :a] | provenance | | | hash_flow.rb:551:5:551:8 | hash [element :c] | hash_flow.rb:556:9:556:12 | hash [element :c] | provenance | | -| hash_flow.rb:552:15:552:25 | call to taint | hash_flow.rb:551:5:551:8 | hash [element :a] | provenance | | -| hash_flow.rb:554:15:554:25 | call to taint | hash_flow.rb:551:5:551:8 | hash [element :c] | provenance | | +| hash_flow.rb:551:12:555:5 | call to [] [element :a] | hash_flow.rb:551:5:551:8 | hash [element :a] | provenance | | +| hash_flow.rb:551:12:555:5 | call to [] [element :c] | hash_flow.rb:551:5:551:8 | hash [element :c] | provenance | | +| hash_flow.rb:552:15:552:25 | call to taint | hash_flow.rb:551:12:555:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:554:15:554:25 | call to taint | hash_flow.rb:551:12:555:5 | call to [] [element :c] | provenance | | | hash_flow.rb:556:5:556:5 | b [element 1] | hash_flow.rb:559:11:559:11 | b [element 1] | provenance | | | hash_flow.rb:556:9:556:12 | [post] hash [element :a] | hash_flow.rb:557:11:557:14 | hash [element :a] | provenance | | | hash_flow.rb:556:9:556:12 | hash [element :a] | hash_flow.rb:556:9:556:12 | [post] hash [element :a] | provenance | | @@ -451,8 +505,10 @@ edges | hash_flow.rb:565:5:565:8 | hash [element :a] | hash_flow.rb:570:9:570:12 | hash [element :a] | provenance | | | hash_flow.rb:565:5:565:8 | hash [element :a] | hash_flow.rb:575:9:575:12 | hash [element :a] | provenance | | | hash_flow.rb:565:5:565:8 | hash [element :c] | hash_flow.rb:575:9:575:12 | hash [element :c] | provenance | | -| hash_flow.rb:566:15:566:25 | call to taint | hash_flow.rb:565:5:565:8 | hash [element :a] | provenance | | -| hash_flow.rb:568:15:568:25 | call to taint | hash_flow.rb:565:5:565:8 | hash [element :c] | provenance | | +| hash_flow.rb:565:12:569:5 | call to [] [element :a] | hash_flow.rb:565:5:565:8 | hash [element :a] | provenance | | +| hash_flow.rb:565:12:569:5 | call to [] [element :c] | hash_flow.rb:565:5:565:8 | hash [element :c] | provenance | | +| hash_flow.rb:566:15:566:25 | call to taint | hash_flow.rb:565:12:569:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:568:15:568:25 | call to taint | hash_flow.rb:565:12:569:5 | call to [] [element :c] | provenance | | | hash_flow.rb:570:5:570:5 | b [element :a] | hash_flow.rb:571:11:571:11 | b [element :a] | provenance | | | hash_flow.rb:570:9:570:12 | hash [element :a] | hash_flow.rb:570:9:570:26 | call to slice [element :a] | provenance | | | hash_flow.rb:570:9:570:26 | call to slice [element :a] | hash_flow.rb:570:5:570:5 | b [element :a] | provenance | | @@ -470,8 +526,10 @@ edges | hash_flow.rb:578:11:578:15 | ...[...] | hash_flow.rb:578:10:578:16 | ( ... ) | provenance | | | hash_flow.rb:584:5:584:8 | hash [element :a] | hash_flow.rb:589:9:589:12 | hash [element :a] | provenance | | | hash_flow.rb:584:5:584:8 | hash [element :c] | hash_flow.rb:589:9:589:12 | hash [element :c] | provenance | | -| hash_flow.rb:585:15:585:25 | call to taint | hash_flow.rb:584:5:584:8 | hash [element :a] | provenance | | -| hash_flow.rb:587:15:587:25 | call to taint | hash_flow.rb:584:5:584:8 | hash [element :c] | provenance | | +| hash_flow.rb:584:12:588:5 | call to [] [element :a] | hash_flow.rb:584:5:584:8 | hash [element :a] | provenance | | +| hash_flow.rb:584:12:588:5 | call to [] [element :c] | hash_flow.rb:584:5:584:8 | hash [element :c] | provenance | | +| hash_flow.rb:585:15:585:25 | call to taint | hash_flow.rb:584:12:588:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:587:15:587:25 | call to taint | hash_flow.rb:584:12:588:5 | call to [] [element :c] | provenance | | | hash_flow.rb:589:5:589:5 | a [element, element 1] | hash_flow.rb:591:11:591:11 | a [element, element 1] | provenance | | | hash_flow.rb:589:9:589:12 | hash [element :a] | hash_flow.rb:589:9:589:17 | call to to_a [element, element 1] | provenance | | | hash_flow.rb:589:9:589:12 | hash [element :c] | hash_flow.rb:589:9:589:17 | call to to_a [element, element 1] | provenance | | @@ -483,8 +541,10 @@ edges | hash_flow.rb:597:5:597:8 | hash [element :a] | hash_flow.rb:607:9:607:12 | hash [element :a] | provenance | | | hash_flow.rb:597:5:597:8 | hash [element :c] | hash_flow.rb:602:9:602:12 | hash [element :c] | provenance | | | hash_flow.rb:597:5:597:8 | hash [element :c] | hash_flow.rb:607:9:607:12 | hash [element :c] | provenance | | -| hash_flow.rb:598:15:598:25 | call to taint | hash_flow.rb:597:5:597:8 | hash [element :a] | provenance | | -| hash_flow.rb:600:15:600:25 | call to taint | hash_flow.rb:597:5:597:8 | hash [element :c] | provenance | | +| hash_flow.rb:597:12:601:5 | call to [] [element :a] | hash_flow.rb:597:5:597:8 | hash [element :a] | provenance | | +| hash_flow.rb:597:12:601:5 | call to [] [element :c] | hash_flow.rb:597:5:597:8 | hash [element :c] | provenance | | +| hash_flow.rb:598:15:598:25 | call to taint | hash_flow.rb:597:12:601:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:600:15:600:25 | call to taint | hash_flow.rb:597:12:601:5 | call to [] [element :c] | provenance | | | hash_flow.rb:602:5:602:5 | a [element :a] | hash_flow.rb:603:11:603:11 | a [element :a] | provenance | | | hash_flow.rb:602:5:602:5 | a [element :c] | hash_flow.rb:605:11:605:11 | a [element :c] | provenance | | | hash_flow.rb:602:9:602:12 | hash [element :a] | hash_flow.rb:602:9:602:17 | call to to_h [element :a] | provenance | | @@ -500,13 +560,16 @@ edges | hash_flow.rb:607:9:607:12 | hash [element :c] | hash_flow.rb:607:28:607:32 | value | provenance | | | hash_flow.rb:607:9:611:7 | call to to_h [element] | hash_flow.rb:607:5:607:5 | b [element] | provenance | | | hash_flow.rb:607:28:607:32 | value | hash_flow.rb:609:14:609:18 | value | provenance | | -| hash_flow.rb:610:14:610:24 | call to taint | hash_flow.rb:607:9:611:7 | call to to_h [element] | provenance | | +| hash_flow.rb:610:9:610:25 | call to [] [element 1] | hash_flow.rb:607:9:611:7 | call to to_h [element] | provenance | | +| hash_flow.rb:610:14:610:24 | call to taint | hash_flow.rb:610:9:610:25 | call to [] [element 1] | provenance | | | hash_flow.rb:612:11:612:11 | b [element] | hash_flow.rb:612:11:612:15 | ...[...] | provenance | | | hash_flow.rb:612:11:612:15 | ...[...] | hash_flow.rb:612:10:612:16 | ( ... ) | provenance | | | hash_flow.rb:618:5:618:8 | hash [element :a] | hash_flow.rb:623:9:623:12 | hash [element :a] | provenance | | | hash_flow.rb:618:5:618:8 | hash [element :c] | hash_flow.rb:623:9:623:12 | hash [element :c] | provenance | | -| hash_flow.rb:619:15:619:25 | call to taint | hash_flow.rb:618:5:618:8 | hash [element :a] | provenance | | -| hash_flow.rb:621:15:621:25 | call to taint | hash_flow.rb:618:5:618:8 | hash [element :c] | provenance | | +| hash_flow.rb:618:12:622:5 | call to [] [element :a] | hash_flow.rb:618:5:618:8 | hash [element :a] | provenance | | +| hash_flow.rb:618:12:622:5 | call to [] [element :c] | hash_flow.rb:618:5:618:8 | hash [element :c] | provenance | | +| hash_flow.rb:619:15:619:25 | call to taint | hash_flow.rb:618:12:622:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:621:15:621:25 | call to taint | hash_flow.rb:618:12:622:5 | call to [] [element :c] | provenance | | | hash_flow.rb:623:5:623:5 | a [element] | hash_flow.rb:624:11:624:11 | a [element] | provenance | | | hash_flow.rb:623:5:623:5 | a [element] | hash_flow.rb:625:11:625:11 | a [element] | provenance | | | hash_flow.rb:623:5:623:5 | a [element] | hash_flow.rb:626:11:626:11 | a [element] | provenance | | @@ -521,8 +584,10 @@ edges | hash_flow.rb:626:11:626:16 | ...[...] | hash_flow.rb:626:10:626:17 | ( ... ) | provenance | | | hash_flow.rb:632:5:632:8 | hash [element :a] | hash_flow.rb:639:5:639:8 | hash [element :a] | provenance | | | hash_flow.rb:632:5:632:8 | hash [element :c] | hash_flow.rb:639:5:639:8 | hash [element :c] | provenance | | -| hash_flow.rb:633:15:633:25 | call to taint | hash_flow.rb:632:5:632:8 | hash [element :a] | provenance | | -| hash_flow.rb:635:15:635:25 | call to taint | hash_flow.rb:632:5:632:8 | hash [element :c] | provenance | | +| hash_flow.rb:632:12:636:5 | call to [] [element :a] | hash_flow.rb:632:5:632:8 | hash [element :a] | provenance | | +| hash_flow.rb:632:12:636:5 | call to [] [element :c] | hash_flow.rb:632:5:632:8 | hash [element :c] | provenance | | +| hash_flow.rb:633:15:633:25 | call to taint | hash_flow.rb:632:12:636:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:635:15:635:25 | call to taint | hash_flow.rb:632:12:636:5 | call to [] [element :c] | provenance | | | hash_flow.rb:637:5:637:8 | [post] hash [element] | hash_flow.rb:639:5:639:8 | hash [element] | provenance | | | hash_flow.rb:637:5:637:8 | [post] hash [element] | hash_flow.rb:640:11:640:14 | hash [element] | provenance | | | hash_flow.rb:637:5:637:8 | [post] hash [element] | hash_flow.rb:641:11:641:14 | hash [element] | provenance | | @@ -543,8 +608,10 @@ edges | hash_flow.rb:648:5:648:8 | hash [element :a] | hash_flow.rb:653:9:653:12 | hash [element :a] | provenance | | | hash_flow.rb:648:5:648:8 | hash [element :a] | hash_flow.rb:657:11:657:14 | hash [element :a] | provenance | | | hash_flow.rb:648:5:648:8 | hash [element :c] | hash_flow.rb:653:9:653:12 | hash [element :c] | provenance | | -| hash_flow.rb:649:15:649:25 | call to taint | hash_flow.rb:648:5:648:8 | hash [element :a] | provenance | | -| hash_flow.rb:651:15:651:25 | call to taint | hash_flow.rb:648:5:648:8 | hash [element :c] | provenance | | +| hash_flow.rb:648:12:652:5 | call to [] [element :a] | hash_flow.rb:648:5:648:8 | hash [element :a] | provenance | | +| hash_flow.rb:648:12:652:5 | call to [] [element :c] | hash_flow.rb:648:5:648:8 | hash [element :c] | provenance | | +| hash_flow.rb:649:15:649:25 | call to taint | hash_flow.rb:648:12:652:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:651:15:651:25 | call to taint | hash_flow.rb:648:12:652:5 | call to [] [element :c] | provenance | | | hash_flow.rb:653:5:653:5 | b [element] | hash_flow.rb:658:11:658:11 | b [element] | provenance | | | hash_flow.rb:653:9:653:12 | hash [element :a] | hash_flow.rb:653:35:653:39 | value | provenance | | | hash_flow.rb:653:9:653:12 | hash [element :c] | hash_flow.rb:653:35:653:39 | value | provenance | | @@ -557,8 +624,10 @@ edges | hash_flow.rb:658:11:658:15 | ...[...] | hash_flow.rb:658:10:658:16 | ( ... ) | provenance | | | hash_flow.rb:664:5:664:8 | hash [element :a] | hash_flow.rb:669:5:669:8 | hash [element :a] | provenance | | | hash_flow.rb:664:5:664:8 | hash [element :c] | hash_flow.rb:669:5:669:8 | hash [element :c] | provenance | | -| hash_flow.rb:665:15:665:25 | call to taint | hash_flow.rb:664:5:664:8 | hash [element :a] | provenance | | -| hash_flow.rb:667:15:667:25 | call to taint | hash_flow.rb:664:5:664:8 | hash [element :c] | provenance | | +| hash_flow.rb:664:12:668:5 | call to [] [element :a] | hash_flow.rb:664:5:664:8 | hash [element :a] | provenance | | +| hash_flow.rb:664:12:668:5 | call to [] [element :c] | hash_flow.rb:664:5:664:8 | hash [element :c] | provenance | | +| hash_flow.rb:665:15:665:25 | call to taint | hash_flow.rb:664:12:668:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:667:15:667:25 | call to taint | hash_flow.rb:664:12:668:5 | call to [] [element :c] | provenance | | | hash_flow.rb:669:5:669:8 | [post] hash [element] | hash_flow.rb:673:11:673:14 | hash [element] | provenance | | | hash_flow.rb:669:5:669:8 | hash [element :a] | hash_flow.rb:669:32:669:36 | value | provenance | | | hash_flow.rb:669:5:669:8 | hash [element :c] | hash_flow.rb:669:32:669:36 | value | provenance | | @@ -568,12 +637,16 @@ edges | hash_flow.rb:673:11:673:18 | ...[...] | hash_flow.rb:673:10:673:19 | ( ... ) | provenance | | | hash_flow.rb:679:5:679:9 | hash1 [element :a] | hash_flow.rb:689:12:689:16 | hash1 [element :a] | provenance | | | hash_flow.rb:679:5:679:9 | hash1 [element :c] | hash_flow.rb:689:12:689:16 | hash1 [element :c] | provenance | | -| hash_flow.rb:680:15:680:25 | call to taint | hash_flow.rb:679:5:679:9 | hash1 [element :a] | provenance | | -| hash_flow.rb:682:15:682:25 | call to taint | hash_flow.rb:679:5:679:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:679:13:683:5 | call to [] [element :a] | hash_flow.rb:679:5:679:9 | hash1 [element :a] | provenance | | +| hash_flow.rb:679:13:683:5 | call to [] [element :c] | hash_flow.rb:679:5:679:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:680:15:680:25 | call to taint | hash_flow.rb:679:13:683:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:682:15:682:25 | call to taint | hash_flow.rb:679:13:683:5 | call to [] [element :c] | provenance | | | hash_flow.rb:684:5:684:9 | hash2 [element :d] | hash_flow.rb:689:25:689:29 | hash2 [element :d] | provenance | | | hash_flow.rb:684:5:684:9 | hash2 [element :f] | hash_flow.rb:689:25:689:29 | hash2 [element :f] | provenance | | -| hash_flow.rb:685:15:685:25 | call to taint | hash_flow.rb:684:5:684:9 | hash2 [element :d] | provenance | | -| hash_flow.rb:687:15:687:25 | call to taint | hash_flow.rb:684:5:684:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:684:13:688:5 | call to [] [element :d] | hash_flow.rb:684:5:684:9 | hash2 [element :d] | provenance | | +| hash_flow.rb:684:13:688:5 | call to [] [element :f] | hash_flow.rb:684:5:684:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:685:15:685:25 | call to taint | hash_flow.rb:684:13:688:5 | call to [] [element :d] | provenance | | +| hash_flow.rb:687:15:687:25 | call to taint | hash_flow.rb:684:13:688:5 | call to [] [element :f] | provenance | | | hash_flow.rb:689:5:689:8 | hash [element :a] | hash_flow.rb:694:11:694:14 | hash [element :a] | provenance | | | hash_flow.rb:689:5:689:8 | hash [element :c] | hash_flow.rb:696:11:696:14 | hash [element :c] | provenance | | | hash_flow.rb:689:5:689:8 | hash [element :d] | hash_flow.rb:697:11:697:14 | hash [element :d] | provenance | | @@ -622,8 +695,10 @@ edges | hash_flow.rb:706:11:706:19 | ...[...] | hash_flow.rb:706:10:706:20 | ( ... ) | provenance | | | hash_flow.rb:712:5:712:8 | hash [element :a] | hash_flow.rb:717:9:717:12 | hash [element :a] | provenance | | | hash_flow.rb:712:5:712:8 | hash [element :c] | hash_flow.rb:717:9:717:12 | hash [element :c] | provenance | | -| hash_flow.rb:713:15:713:25 | call to taint | hash_flow.rb:712:5:712:8 | hash [element :a] | provenance | | -| hash_flow.rb:715:15:715:25 | call to taint | hash_flow.rb:712:5:712:8 | hash [element :c] | provenance | | +| hash_flow.rb:712:12:716:5 | call to [] [element :a] | hash_flow.rb:712:5:712:8 | hash [element :a] | provenance | | +| hash_flow.rb:712:12:716:5 | call to [] [element :c] | hash_flow.rb:712:5:712:8 | hash [element :c] | provenance | | +| hash_flow.rb:713:15:713:25 | call to taint | hash_flow.rb:712:12:716:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:715:15:715:25 | call to taint | hash_flow.rb:712:12:716:5 | call to [] [element :c] | provenance | | | hash_flow.rb:717:5:717:5 | a [element] | hash_flow.rb:718:11:718:11 | a [element] | provenance | | | hash_flow.rb:717:9:717:12 | hash [element :a] | hash_flow.rb:717:9:717:19 | call to values [element] | provenance | | | hash_flow.rb:717:9:717:12 | hash [element :c] | hash_flow.rb:717:9:717:19 | call to values [element] | provenance | | @@ -633,8 +708,10 @@ edges | hash_flow.rb:724:5:724:8 | hash [element :a] | hash_flow.rb:729:9:729:12 | hash [element :a] | provenance | | | hash_flow.rb:724:5:724:8 | hash [element :a] | hash_flow.rb:731:9:731:12 | hash [element :a] | provenance | | | hash_flow.rb:724:5:724:8 | hash [element :c] | hash_flow.rb:731:9:731:12 | hash [element :c] | provenance | | -| hash_flow.rb:725:15:725:25 | call to taint | hash_flow.rb:724:5:724:8 | hash [element :a] | provenance | | -| hash_flow.rb:727:15:727:25 | call to taint | hash_flow.rb:724:5:724:8 | hash [element :c] | provenance | | +| hash_flow.rb:724:12:728:5 | call to [] [element :a] | hash_flow.rb:724:5:724:8 | hash [element :a] | provenance | | +| hash_flow.rb:724:12:728:5 | call to [] [element :c] | hash_flow.rb:724:5:724:8 | hash [element :c] | provenance | | +| hash_flow.rb:725:15:725:25 | call to taint | hash_flow.rb:724:12:728:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:727:15:727:25 | call to taint | hash_flow.rb:724:12:728:5 | call to [] [element :c] | provenance | | | hash_flow.rb:729:5:729:5 | b [element 0] | hash_flow.rb:730:10:730:10 | b [element 0] | provenance | | | hash_flow.rb:729:9:729:12 | hash [element :a] | hash_flow.rb:729:9:729:26 | call to values_at [element 0] | provenance | | | hash_flow.rb:729:9:729:26 | call to values_at [element 0] | hash_flow.rb:729:5:729:5 | b [element 0] | provenance | | @@ -646,24 +723,33 @@ edges | hash_flow.rb:732:10:732:10 | b [element] | hash_flow.rb:732:10:732:13 | ...[...] | provenance | | | hash_flow.rb:738:5:738:9 | hash1 [element :a] | hash_flow.rb:748:16:748:20 | hash1 [element :a] | provenance | | | hash_flow.rb:738:5:738:9 | hash1 [element :c] | hash_flow.rb:748:16:748:20 | hash1 [element :c] | provenance | | -| hash_flow.rb:739:15:739:25 | call to taint | hash_flow.rb:738:5:738:9 | hash1 [element :a] | provenance | | -| hash_flow.rb:741:15:741:25 | call to taint | hash_flow.rb:738:5:738:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:738:13:742:5 | call to [] [element :a] | hash_flow.rb:738:5:738:9 | hash1 [element :a] | provenance | | +| hash_flow.rb:738:13:742:5 | call to [] [element :c] | hash_flow.rb:738:5:738:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:739:15:739:25 | call to taint | hash_flow.rb:738:13:742:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:741:15:741:25 | call to taint | hash_flow.rb:738:13:742:5 | call to [] [element :c] | provenance | | | hash_flow.rb:743:5:743:9 | hash2 [element :d] | hash_flow.rb:748:44:748:48 | hash2 [element :d] | provenance | | | hash_flow.rb:743:5:743:9 | hash2 [element :f] | hash_flow.rb:748:44:748:48 | hash2 [element :f] | provenance | | -| hash_flow.rb:744:15:744:25 | call to taint | hash_flow.rb:743:5:743:9 | hash2 [element :d] | provenance | | -| hash_flow.rb:746:15:746:25 | call to taint | hash_flow.rb:743:5:743:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:743:13:747:5 | call to [] [element :d] | hash_flow.rb:743:5:743:9 | hash2 [element :d] | provenance | | +| hash_flow.rb:743:13:747:5 | call to [] [element :f] | hash_flow.rb:743:5:743:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:744:15:744:25 | call to taint | hash_flow.rb:743:13:747:5 | call to [] [element :d] | provenance | | +| hash_flow.rb:746:15:746:25 | call to taint | hash_flow.rb:743:13:747:5 | call to [] [element :f] | provenance | | | hash_flow.rb:748:5:748:8 | hash [element :a] | hash_flow.rb:749:10:749:13 | hash [element :a] | provenance | | | hash_flow.rb:748:5:748:8 | hash [element :c] | hash_flow.rb:751:10:751:13 | hash [element :c] | provenance | | | hash_flow.rb:748:5:748:8 | hash [element :d] | hash_flow.rb:752:10:752:13 | hash [element :d] | provenance | | | hash_flow.rb:748:5:748:8 | hash [element :f] | hash_flow.rb:754:10:754:13 | hash [element :f] | provenance | | | hash_flow.rb:748:5:748:8 | hash [element :g] | hash_flow.rb:755:10:755:13 | hash [element :g] | provenance | | -| hash_flow.rb:748:14:748:20 | ** ... [element :a] | hash_flow.rb:748:5:748:8 | hash [element :a] | provenance | | -| hash_flow.rb:748:14:748:20 | ** ... [element :c] | hash_flow.rb:748:5:748:8 | hash [element :c] | provenance | | +| hash_flow.rb:748:12:748:59 | call to [] [element :a] | hash_flow.rb:748:5:748:8 | hash [element :a] | provenance | | +| hash_flow.rb:748:12:748:59 | call to [] [element :c] | hash_flow.rb:748:5:748:8 | hash [element :c] | provenance | | +| hash_flow.rb:748:12:748:59 | call to [] [element :d] | hash_flow.rb:748:5:748:8 | hash [element :d] | provenance | | +| hash_flow.rb:748:12:748:59 | call to [] [element :f] | hash_flow.rb:748:5:748:8 | hash [element :f] | provenance | | +| hash_flow.rb:748:12:748:59 | call to [] [element :g] | hash_flow.rb:748:5:748:8 | hash [element :g] | provenance | | +| hash_flow.rb:748:14:748:20 | ** ... [element :a] | hash_flow.rb:748:12:748:59 | call to [] [element :a] | provenance | | +| hash_flow.rb:748:14:748:20 | ** ... [element :c] | hash_flow.rb:748:12:748:59 | call to [] [element :c] | provenance | | | hash_flow.rb:748:16:748:20 | hash1 [element :a] | hash_flow.rb:748:14:748:20 | ** ... [element :a] | provenance | | | hash_flow.rb:748:16:748:20 | hash1 [element :c] | hash_flow.rb:748:14:748:20 | ** ... [element :c] | provenance | | -| hash_flow.rb:748:29:748:39 | call to taint | hash_flow.rb:748:5:748:8 | hash [element :g] | provenance | | -| hash_flow.rb:748:42:748:48 | ** ... [element :d] | hash_flow.rb:748:5:748:8 | hash [element :d] | provenance | | -| hash_flow.rb:748:42:748:48 | ** ... [element :f] | hash_flow.rb:748:5:748:8 | hash [element :f] | provenance | | +| hash_flow.rb:748:29:748:39 | call to taint | hash_flow.rb:748:12:748:59 | call to [] [element :g] | provenance | | +| hash_flow.rb:748:42:748:48 | ** ... [element :d] | hash_flow.rb:748:12:748:59 | call to [] [element :d] | provenance | | +| hash_flow.rb:748:42:748:48 | ** ... [element :f] | hash_flow.rb:748:12:748:59 | call to [] [element :f] | provenance | | | hash_flow.rb:748:44:748:48 | hash2 [element :d] | hash_flow.rb:748:42:748:48 | ** ... [element :d] | provenance | | | hash_flow.rb:748:44:748:48 | hash2 [element :f] | hash_flow.rb:748:42:748:48 | ** ... [element :f] | provenance | | | hash_flow.rb:749:10:749:13 | hash [element :a] | hash_flow.rb:749:10:749:17 | ...[...] | provenance | | @@ -675,9 +761,12 @@ edges | hash_flow.rb:762:5:762:8 | hash [element :c] | hash_flow.rb:771:10:771:13 | hash [element :c] | provenance | | | hash_flow.rb:762:5:762:8 | hash [element :c] | hash_flow.rb:774:9:774:12 | hash [element :c] | provenance | | | hash_flow.rb:762:5:762:8 | hash [element :d] | hash_flow.rb:772:10:772:13 | hash [element :d] | provenance | | -| hash_flow.rb:763:15:763:25 | call to taint | hash_flow.rb:762:5:762:8 | hash [element :a] | provenance | | -| hash_flow.rb:765:15:765:25 | call to taint | hash_flow.rb:762:5:762:8 | hash [element :c] | provenance | | -| hash_flow.rb:766:15:766:25 | call to taint | hash_flow.rb:762:5:762:8 | hash [element :d] | provenance | | +| hash_flow.rb:762:12:767:5 | call to [] [element :a] | hash_flow.rb:762:5:762:8 | hash [element :a] | provenance | | +| hash_flow.rb:762:12:767:5 | call to [] [element :c] | hash_flow.rb:762:5:762:8 | hash [element :c] | provenance | | +| hash_flow.rb:762:12:767:5 | call to [] [element :d] | hash_flow.rb:762:5:762:8 | hash [element :d] | provenance | | +| hash_flow.rb:763:15:763:25 | call to taint | hash_flow.rb:762:12:767:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:765:15:765:25 | call to taint | hash_flow.rb:762:12:767:5 | call to [] [element :c] | provenance | | +| hash_flow.rb:766:15:766:25 | call to taint | hash_flow.rb:762:12:767:5 | call to [] [element :d] | provenance | | | hash_flow.rb:769:10:769:13 | hash [element :a] | hash_flow.rb:769:10:769:17 | ...[...] | provenance | | | hash_flow.rb:771:10:771:13 | hash [element :c] | hash_flow.rb:771:10:771:17 | ...[...] | provenance | | | hash_flow.rb:772:10:772:13 | hash [element :d] | hash_flow.rb:772:10:772:17 | ...[...] | provenance | | @@ -690,12 +779,16 @@ edges | hash_flow.rb:783:10:783:13 | hash [element :c] | hash_flow.rb:783:10:783:17 | ...[...] | provenance | | | hash_flow.rb:790:5:790:9 | hash1 [element :a] | hash_flow.rb:800:12:800:16 | hash1 [element :a] | provenance | | | hash_flow.rb:790:5:790:9 | hash1 [element :c] | hash_flow.rb:800:12:800:16 | hash1 [element :c] | provenance | | -| hash_flow.rb:791:15:791:25 | call to taint | hash_flow.rb:790:5:790:9 | hash1 [element :a] | provenance | | -| hash_flow.rb:793:15:793:25 | call to taint | hash_flow.rb:790:5:790:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:790:13:794:5 | call to [] [element :a] | hash_flow.rb:790:5:790:9 | hash1 [element :a] | provenance | | +| hash_flow.rb:790:13:794:5 | call to [] [element :c] | hash_flow.rb:790:5:790:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:791:15:791:25 | call to taint | hash_flow.rb:790:13:794:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:793:15:793:25 | call to taint | hash_flow.rb:790:13:794:5 | call to [] [element :c] | provenance | | | hash_flow.rb:795:5:795:9 | hash2 [element :d] | hash_flow.rb:800:29:800:33 | hash2 [element :d] | provenance | | | hash_flow.rb:795:5:795:9 | hash2 [element :f] | hash_flow.rb:800:29:800:33 | hash2 [element :f] | provenance | | -| hash_flow.rb:796:15:796:25 | call to taint | hash_flow.rb:795:5:795:9 | hash2 [element :d] | provenance | | -| hash_flow.rb:798:15:798:25 | call to taint | hash_flow.rb:795:5:795:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:795:13:799:5 | call to [] [element :d] | hash_flow.rb:795:5:795:9 | hash2 [element :d] | provenance | | +| hash_flow.rb:795:13:799:5 | call to [] [element :f] | hash_flow.rb:795:5:795:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:796:15:796:25 | call to taint | hash_flow.rb:795:13:799:5 | call to [] [element :d] | provenance | | +| hash_flow.rb:798:15:798:25 | call to taint | hash_flow.rb:795:13:799:5 | call to [] [element :f] | provenance | | | hash_flow.rb:800:5:800:8 | hash [element :a] | hash_flow.rb:805:11:805:14 | hash [element :a] | provenance | | | hash_flow.rb:800:5:800:8 | hash [element :c] | hash_flow.rb:807:11:807:14 | hash [element :c] | provenance | | | hash_flow.rb:800:5:800:8 | hash [element :d] | hash_flow.rb:808:11:808:14 | hash [element :d] | provenance | | @@ -728,12 +821,16 @@ edges | hash_flow.rb:810:11:810:18 | ...[...] | hash_flow.rb:810:10:810:19 | ( ... ) | provenance | | | hash_flow.rb:816:5:816:9 | hash1 [element :a] | hash_flow.rb:826:12:826:16 | hash1 [element :a] | provenance | | | hash_flow.rb:816:5:816:9 | hash1 [element :c] | hash_flow.rb:826:12:826:16 | hash1 [element :c] | provenance | | -| hash_flow.rb:817:15:817:25 | call to taint | hash_flow.rb:816:5:816:9 | hash1 [element :a] | provenance | | -| hash_flow.rb:819:15:819:25 | call to taint | hash_flow.rb:816:5:816:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:816:13:820:5 | call to [] [element :a] | hash_flow.rb:816:5:816:9 | hash1 [element :a] | provenance | | +| hash_flow.rb:816:13:820:5 | call to [] [element :c] | hash_flow.rb:816:5:816:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:817:15:817:25 | call to taint | hash_flow.rb:816:13:820:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:819:15:819:25 | call to taint | hash_flow.rb:816:13:820:5 | call to [] [element :c] | provenance | | | hash_flow.rb:821:5:821:9 | hash2 [element :d] | hash_flow.rb:826:30:826:34 | hash2 [element :d] | provenance | | | hash_flow.rb:821:5:821:9 | hash2 [element :f] | hash_flow.rb:826:30:826:34 | hash2 [element :f] | provenance | | -| hash_flow.rb:822:15:822:25 | call to taint | hash_flow.rb:821:5:821:9 | hash2 [element :d] | provenance | | -| hash_flow.rb:824:15:824:25 | call to taint | hash_flow.rb:821:5:821:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:821:13:825:5 | call to [] [element :d] | hash_flow.rb:821:5:821:9 | hash2 [element :d] | provenance | | +| hash_flow.rb:821:13:825:5 | call to [] [element :f] | hash_flow.rb:821:5:821:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:822:15:822:25 | call to taint | hash_flow.rb:821:13:825:5 | call to [] [element :d] | provenance | | +| hash_flow.rb:824:15:824:25 | call to taint | hash_flow.rb:821:13:825:5 | call to [] [element :f] | provenance | | | hash_flow.rb:826:5:826:8 | hash [element :a] | hash_flow.rb:831:11:831:14 | hash [element :a] | provenance | | | hash_flow.rb:826:5:826:8 | hash [element :c] | hash_flow.rb:833:11:833:14 | hash [element :c] | provenance | | | hash_flow.rb:826:5:826:8 | hash [element :d] | hash_flow.rb:834:11:834:14 | hash [element :d] | provenance | | @@ -784,14 +881,18 @@ edges | hash_flow.rb:849:5:849:9 | hash1 [element :a] | hash_flow.rb:869:13:869:17 | hash1 [element :a] | provenance | | | hash_flow.rb:849:5:849:9 | hash1 [element :c] | hash_flow.rb:860:13:860:17 | hash1 [element :c] | provenance | | | hash_flow.rb:849:5:849:9 | hash1 [element :c] | hash_flow.rb:869:13:869:17 | hash1 [element :c] | provenance | | -| hash_flow.rb:850:12:850:22 | call to taint | hash_flow.rb:849:5:849:9 | hash1 [element :a] | provenance | | -| hash_flow.rb:852:12:852:22 | call to taint | hash_flow.rb:849:5:849:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:849:13:853:5 | call to [] [element :a] | hash_flow.rb:849:5:849:9 | hash1 [element :a] | provenance | | +| hash_flow.rb:849:13:853:5 | call to [] [element :c] | hash_flow.rb:849:5:849:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:850:12:850:22 | call to taint | hash_flow.rb:849:13:853:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:852:12:852:22 | call to taint | hash_flow.rb:849:13:853:5 | call to [] [element :c] | provenance | | | hash_flow.rb:854:5:854:9 | hash2 [element :d] | hash_flow.rb:860:33:860:37 | hash2 [element :d] | provenance | | | hash_flow.rb:854:5:854:9 | hash2 [element :d] | hash_flow.rb:869:33:869:37 | hash2 [element :d] | provenance | | | hash_flow.rb:854:5:854:9 | hash2 [element :f] | hash_flow.rb:860:33:860:37 | hash2 [element :f] | provenance | | | hash_flow.rb:854:5:854:9 | hash2 [element :f] | hash_flow.rb:869:33:869:37 | hash2 [element :f] | provenance | | -| hash_flow.rb:855:12:855:22 | call to taint | hash_flow.rb:854:5:854:9 | hash2 [element :d] | provenance | | -| hash_flow.rb:857:12:857:22 | call to taint | hash_flow.rb:854:5:854:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:854:13:858:5 | call to [] [element :d] | hash_flow.rb:854:5:854:9 | hash2 [element :d] | provenance | | +| hash_flow.rb:854:13:858:5 | call to [] [element :f] | hash_flow.rb:854:5:854:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:855:12:855:22 | call to taint | hash_flow.rb:854:13:858:5 | call to [] [element :d] | provenance | | +| hash_flow.rb:857:12:857:22 | call to taint | hash_flow.rb:854:13:858:5 | call to [] [element :f] | provenance | | | hash_flow.rb:860:5:860:9 | hash3 [element :a] | hash_flow.rb:861:11:861:15 | hash3 [element :a] | provenance | | | hash_flow.rb:860:5:860:9 | hash3 [element :c] | hash_flow.rb:863:11:863:15 | hash3 [element :c] | provenance | | | hash_flow.rb:860:5:860:9 | hash3 [element :d] | hash_flow.rb:864:11:864:15 | hash3 [element :d] | provenance | | @@ -834,12 +935,16 @@ edges | hash_flow.rb:875:11:875:19 | ...[...] | hash_flow.rb:875:10:875:20 | ( ... ) | provenance | | | hash_flow.rb:881:5:881:9 | hash1 [element :a] | hash_flow.rb:892:12:892:16 | hash1 [element :a] | provenance | | | hash_flow.rb:881:5:881:9 | hash1 [element :c] | hash_flow.rb:892:12:892:16 | hash1 [element :c] | provenance | | -| hash_flow.rb:882:12:882:22 | call to taint | hash_flow.rb:881:5:881:9 | hash1 [element :a] | provenance | | -| hash_flow.rb:884:12:884:22 | call to taint | hash_flow.rb:881:5:881:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:881:13:885:5 | call to [] [element :a] | hash_flow.rb:881:5:881:9 | hash1 [element :a] | provenance | | +| hash_flow.rb:881:13:885:5 | call to [] [element :c] | hash_flow.rb:881:5:881:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:882:12:882:22 | call to taint | hash_flow.rb:881:13:885:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:884:12:884:22 | call to taint | hash_flow.rb:881:13:885:5 | call to [] [element :c] | provenance | | | hash_flow.rb:886:5:886:9 | hash2 [element :d] | hash_flow.rb:892:33:892:37 | hash2 [element :d] | provenance | | | hash_flow.rb:886:5:886:9 | hash2 [element :f] | hash_flow.rb:892:33:892:37 | hash2 [element :f] | provenance | | -| hash_flow.rb:887:12:887:22 | call to taint | hash_flow.rb:886:5:886:9 | hash2 [element :d] | provenance | | -| hash_flow.rb:889:12:889:22 | call to taint | hash_flow.rb:886:5:886:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:886:13:890:5 | call to [] [element :d] | hash_flow.rb:886:5:886:9 | hash2 [element :d] | provenance | | +| hash_flow.rb:886:13:890:5 | call to [] [element :f] | hash_flow.rb:886:5:886:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:887:12:887:22 | call to taint | hash_flow.rb:886:13:890:5 | call to [] [element :d] | provenance | | +| hash_flow.rb:889:12:889:22 | call to taint | hash_flow.rb:886:13:890:5 | call to [] [element :f] | provenance | | | hash_flow.rb:892:5:892:8 | hash [element :a] | hash_flow.rb:893:11:893:14 | hash [element :a] | provenance | | | hash_flow.rb:892:5:892:8 | hash [element :c] | hash_flow.rb:895:11:895:14 | hash [element :c] | provenance | | | hash_flow.rb:892:5:892:8 | hash [element :d] | hash_flow.rb:896:11:896:14 | hash [element :d] | provenance | | @@ -878,12 +983,16 @@ edges | hash_flow.rb:905:11:905:19 | ...[...] | hash_flow.rb:905:10:905:20 | ( ... ) | provenance | | | hash_flow.rb:911:5:911:9 | hash1 [element :a] | hash_flow.rb:922:12:922:16 | hash1 [element :a] | provenance | | | hash_flow.rb:911:5:911:9 | hash1 [element :c] | hash_flow.rb:922:12:922:16 | hash1 [element :c] | provenance | | -| hash_flow.rb:912:12:912:22 | call to taint | hash_flow.rb:911:5:911:9 | hash1 [element :a] | provenance | | -| hash_flow.rb:914:12:914:22 | call to taint | hash_flow.rb:911:5:911:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:911:13:915:5 | call to [] [element :a] | hash_flow.rb:911:5:911:9 | hash1 [element :a] | provenance | | +| hash_flow.rb:911:13:915:5 | call to [] [element :c] | hash_flow.rb:911:5:911:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:912:12:912:22 | call to taint | hash_flow.rb:911:13:915:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:914:12:914:22 | call to taint | hash_flow.rb:911:13:915:5 | call to [] [element :c] | provenance | | | hash_flow.rb:916:5:916:9 | hash2 [element :d] | hash_flow.rb:922:33:922:37 | hash2 [element :d] | provenance | | | hash_flow.rb:916:5:916:9 | hash2 [element :f] | hash_flow.rb:922:33:922:37 | hash2 [element :f] | provenance | | -| hash_flow.rb:917:12:917:22 | call to taint | hash_flow.rb:916:5:916:9 | hash2 [element :d] | provenance | | -| hash_flow.rb:919:12:919:22 | call to taint | hash_flow.rb:916:5:916:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:916:13:920:5 | call to [] [element :d] | hash_flow.rb:916:5:916:9 | hash2 [element :d] | provenance | | +| hash_flow.rb:916:13:920:5 | call to [] [element :f] | hash_flow.rb:916:5:916:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:917:12:917:22 | call to taint | hash_flow.rb:916:13:920:5 | call to [] [element :d] | provenance | | +| hash_flow.rb:919:12:919:22 | call to taint | hash_flow.rb:916:13:920:5 | call to [] [element :f] | provenance | | | hash_flow.rb:922:5:922:8 | hash [element :a] | hash_flow.rb:923:11:923:14 | hash [element :a] | provenance | | | hash_flow.rb:922:5:922:8 | hash [element :c] | hash_flow.rb:925:11:925:14 | hash [element :c] | provenance | | | hash_flow.rb:922:5:922:8 | hash [element :d] | hash_flow.rb:926:11:926:14 | hash [element :d] | provenance | | @@ -922,12 +1031,16 @@ edges | hash_flow.rb:935:11:935:19 | ...[...] | hash_flow.rb:935:10:935:20 | ( ... ) | provenance | | | hash_flow.rb:941:5:941:9 | hash1 [element :a] | hash_flow.rb:952:12:952:16 | hash1 [element :a] | provenance | | | hash_flow.rb:941:5:941:9 | hash1 [element :c] | hash_flow.rb:952:12:952:16 | hash1 [element :c] | provenance | | -| hash_flow.rb:942:12:942:22 | call to taint | hash_flow.rb:941:5:941:9 | hash1 [element :a] | provenance | | -| hash_flow.rb:944:12:944:22 | call to taint | hash_flow.rb:941:5:941:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:941:13:945:5 | call to [] [element :a] | hash_flow.rb:941:5:941:9 | hash1 [element :a] | provenance | | +| hash_flow.rb:941:13:945:5 | call to [] [element :c] | hash_flow.rb:941:5:941:9 | hash1 [element :c] | provenance | | +| hash_flow.rb:942:12:942:22 | call to taint | hash_flow.rb:941:13:945:5 | call to [] [element :a] | provenance | | +| hash_flow.rb:944:12:944:22 | call to taint | hash_flow.rb:941:13:945:5 | call to [] [element :c] | provenance | | | hash_flow.rb:946:5:946:9 | hash2 [element :d] | hash_flow.rb:952:33:952:37 | hash2 [element :d] | provenance | | | hash_flow.rb:946:5:946:9 | hash2 [element :f] | hash_flow.rb:952:33:952:37 | hash2 [element :f] | provenance | | -| hash_flow.rb:947:12:947:22 | call to taint | hash_flow.rb:946:5:946:9 | hash2 [element :d] | provenance | | -| hash_flow.rb:949:12:949:22 | call to taint | hash_flow.rb:946:5:946:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:946:13:950:5 | call to [] [element :d] | hash_flow.rb:946:5:946:9 | hash2 [element :d] | provenance | | +| hash_flow.rb:946:13:950:5 | call to [] [element :f] | hash_flow.rb:946:5:946:9 | hash2 [element :f] | provenance | | +| hash_flow.rb:947:12:947:22 | call to taint | hash_flow.rb:946:13:950:5 | call to [] [element :d] | provenance | | +| hash_flow.rb:949:12:949:22 | call to taint | hash_flow.rb:946:13:950:5 | call to [] [element :f] | provenance | | | hash_flow.rb:952:5:952:8 | hash [element :a] | hash_flow.rb:953:11:953:14 | hash [element :a] | provenance | | | hash_flow.rb:952:5:952:8 | hash [element :c] | hash_flow.rb:955:11:955:14 | hash [element :c] | provenance | | | hash_flow.rb:952:5:952:8 | hash [element :d] | hash_flow.rb:956:11:956:14 | hash [element :d] | provenance | | @@ -982,6 +1095,11 @@ nodes | hash_flow.rb:10:5:10:8 | hash [element :c] | semmle.label | hash [element :c] | | hash_flow.rb:10:5:10:8 | hash [element e] | semmle.label | hash [element e] | | hash_flow.rb:10:5:10:8 | hash [element g] | semmle.label | hash [element g] | +| hash_flow.rb:10:12:21:5 | call to [] [element 0] | semmle.label | call to [] [element 0] | +| hash_flow.rb:10:12:21:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:10:12:21:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | +| hash_flow.rb:10:12:21:5 | call to [] [element e] | semmle.label | call to [] [element e] | +| hash_flow.rb:10:12:21:5 | call to [] [element g] | semmle.label | call to [] [element g] | | hash_flow.rb:11:15:11:24 | call to taint | semmle.label | call to taint | | hash_flow.rb:13:12:13:21 | call to taint | semmle.label | call to taint | | hash_flow.rb:15:14:15:23 | call to taint | semmle.label | call to taint | @@ -1033,6 +1151,7 @@ nodes | hash_flow.rb:56:10:56:14 | hash1 [element :a] | semmle.label | hash1 [element :a] | | hash_flow.rb:56:10:56:18 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:59:5:59:5 | x [element :a] | semmle.label | x [element :a] | +| hash_flow.rb:59:9:59:29 | call to [] [element :a] | semmle.label | call to [] [element :a] | | hash_flow.rb:59:13:59:22 | call to taint | semmle.label | call to taint | | hash_flow.rb:60:5:60:9 | hash2 [element :a] | semmle.label | hash2 [element :a] | | hash_flow.rb:60:13:60:19 | ...[...] [element :a] | semmle.label | ...[...] [element :a] | @@ -1041,6 +1160,8 @@ nodes | hash_flow.rb:61:10:61:18 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:64:5:64:9 | hash3 [element] | semmle.label | hash3 [element] | | hash_flow.rb:64:13:64:45 | ...[...] [element] | semmle.label | ...[...] [element] | +| hash_flow.rb:64:18:64:44 | call to [] [element 0, element 1] | semmle.label | call to [] [element 0, element 1] | +| hash_flow.rb:64:19:64:34 | call to [] [element 1] | semmle.label | call to [] [element 1] | | hash_flow.rb:64:24:64:33 | call to taint | semmle.label | call to taint | | hash_flow.rb:65:10:65:14 | hash3 [element] | semmle.label | hash3 [element] | | hash_flow.rb:65:10:65:18 | ...[...] | semmle.label | ...[...] | @@ -1058,6 +1179,7 @@ nodes | hash_flow.rb:73:10:73:19 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:76:5:76:9 | hash6 [element a] | semmle.label | hash6 [element a] | | hash_flow.rb:76:13:76:47 | ...[...] [element a] | semmle.label | ...[...] [element a] | +| hash_flow.rb:76:18:76:46 | call to [] [element a] | semmle.label | call to [] [element a] | | hash_flow.rb:76:26:76:35 | call to taint | semmle.label | call to taint | | hash_flow.rb:77:10:77:14 | hash6 [element a] | semmle.label | hash6 [element a] | | hash_flow.rb:77:10:77:19 | ...[...] | semmle.label | ...[...] | @@ -1067,6 +1189,7 @@ nodes | hash_flow.rb:85:10:85:14 | hash1 [element :a] | semmle.label | hash1 [element :a] | | hash_flow.rb:85:10:85:18 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:92:5:92:8 | hash [element :a] | semmle.label | hash [element :a] | +| hash_flow.rb:92:12:95:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | | hash_flow.rb:93:15:93:24 | call to taint | semmle.label | call to taint | | hash_flow.rb:96:5:96:9 | hash2 [element :a] | semmle.label | hash2 [element :a] | | hash_flow.rb:96:13:96:34 | call to try_convert [element :a] | semmle.label | call to try_convert [element :a] | @@ -1093,6 +1216,7 @@ nodes | hash_flow.rb:120:10:120:17 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:121:10:121:10 | c | semmle.label | c | | hash_flow.rb:127:5:127:8 | hash [element :a] | semmle.label | hash [element :a] | +| hash_flow.rb:127:12:130:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | | hash_flow.rb:128:15:128:24 | call to taint | semmle.label | call to taint | | hash_flow.rb:131:5:131:8 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:131:18:131:29 | key_or_value | semmle.label | key_or_value | @@ -1101,6 +1225,7 @@ nodes | hash_flow.rb:134:22:134:26 | value | semmle.label | value | | hash_flow.rb:136:14:136:18 | value | semmle.label | value | | hash_flow.rb:143:5:143:8 | hash [element :a] | semmle.label | hash [element :a] | +| hash_flow.rb:143:12:146:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | | hash_flow.rb:144:15:144:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:147:5:147:5 | b [element 1] | semmle.label | b [element 1] | | hash_flow.rb:147:9:147:12 | hash [element :a] | semmle.label | hash [element :a] | @@ -1115,6 +1240,7 @@ nodes | hash_flow.rb:152:10:152:10 | c [element 1] | semmle.label | c [element 1] | | hash_flow.rb:152:10:152:13 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:169:5:169:8 | hash [element :a] | semmle.label | hash [element :a] | +| hash_flow.rb:169:12:172:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | | hash_flow.rb:170:15:170:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:173:5:173:5 | a [element :a] | semmle.label | a [element :a] | | hash_flow.rb:173:9:173:12 | hash [element :a] | semmle.label | hash [element :a] | @@ -1122,12 +1248,14 @@ nodes | hash_flow.rb:174:10:174:10 | a [element :a] | semmle.label | a [element :a] | | hash_flow.rb:174:10:174:14 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:181:5:181:8 | hash [element :a] | semmle.label | hash [element :a] | +| hash_flow.rb:181:12:184:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | | hash_flow.rb:182:15:182:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:185:5:185:5 | a | semmle.label | a | | hash_flow.rb:185:9:185:12 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:185:9:185:23 | call to delete | semmle.label | call to delete | | hash_flow.rb:186:10:186:10 | a | semmle.label | a | | hash_flow.rb:193:5:193:8 | hash [element :a] | semmle.label | hash [element :a] | +| hash_flow.rb:193:12:196:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | | hash_flow.rb:194:15:194:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:197:5:197:5 | a [element :a] | semmle.label | a [element :a] | | hash_flow.rb:197:9:197:12 | [post] hash [element :a] | semmle.label | [post] hash [element :a] | @@ -1141,13 +1269,17 @@ nodes | hash_flow.rb:202:10:202:17 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:209:5:209:8 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:209:5:209:8 | hash [element :c, element :d] | semmle.label | hash [element :c, element :d] | +| hash_flow.rb:209:12:216:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:209:12:216:5 | call to [] [element :c, element :d] | semmle.label | call to [] [element :c, element :d] | | hash_flow.rb:210:15:210:25 | call to taint | semmle.label | call to taint | +| hash_flow.rb:212:15:215:9 | call to [] [element :d] | semmle.label | call to [] [element :d] | | hash_flow.rb:213:19:213:29 | call to taint | semmle.label | call to taint | | hash_flow.rb:217:10:217:13 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:217:10:217:21 | call to dig | semmle.label | call to dig | | hash_flow.rb:219:10:219:13 | hash [element :c, element :d] | semmle.label | hash [element :c, element :d] | | hash_flow.rb:219:10:219:24 | call to dig | semmle.label | call to dig | | hash_flow.rb:226:5:226:8 | hash [element :a] | semmle.label | hash [element :a] | +| hash_flow.rb:226:12:229:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | | hash_flow.rb:227:15:227:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:230:5:230:5 | x [element :a] | semmle.label | x [element :a] | | hash_flow.rb:230:9:230:12 | hash [element :a] | semmle.label | hash [element :a] | @@ -1157,6 +1289,7 @@ nodes | hash_flow.rb:234:10:234:10 | x [element :a] | semmle.label | x [element :a] | | hash_flow.rb:234:10:234:14 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:241:5:241:8 | hash [element :a] | semmle.label | hash [element :a] | +| hash_flow.rb:241:12:244:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | | hash_flow.rb:242:15:242:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:245:5:245:5 | x [element :a] | semmle.label | x [element :a] | | hash_flow.rb:245:9:245:12 | hash [element :a] | semmle.label | hash [element :a] | @@ -1164,6 +1297,7 @@ nodes | hash_flow.rb:248:10:248:10 | x [element :a] | semmle.label | x [element :a] | | hash_flow.rb:248:10:248:14 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:255:5:255:8 | hash [element :a] | semmle.label | hash [element :a] | +| hash_flow.rb:255:12:258:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | | hash_flow.rb:256:15:256:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:259:5:259:5 | x [element :a] | semmle.label | x [element :a] | | hash_flow.rb:259:9:259:12 | hash [element :a] | semmle.label | hash [element :a] | @@ -1173,6 +1307,7 @@ nodes | hash_flow.rb:263:10:263:10 | x [element :a] | semmle.label | x [element :a] | | hash_flow.rb:263:10:263:14 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:270:5:270:8 | hash [element :a] | semmle.label | hash [element :a] | +| hash_flow.rb:270:12:273:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | | hash_flow.rb:271:15:271:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:274:5:274:5 | x [element :a] | semmle.label | x [element :a] | | hash_flow.rb:274:9:274:12 | hash [element :a] | semmle.label | hash [element :a] | @@ -1182,6 +1317,7 @@ nodes | hash_flow.rb:277:10:277:10 | x [element :a] | semmle.label | x [element :a] | | hash_flow.rb:277:10:277:14 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:284:5:284:8 | hash [element :c] | semmle.label | hash [element :c] | +| hash_flow.rb:284:12:289:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:287:15:287:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:290:5:290:5 | x [element :c] | semmle.label | x [element :c] | | hash_flow.rb:290:9:290:12 | hash [element :c] | semmle.label | hash [element :c] | @@ -1190,6 +1326,8 @@ nodes | hash_flow.rb:293:10:293:14 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:300:5:300:8 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:300:5:300:8 | hash [element :c] | semmle.label | hash [element :c] | +| hash_flow.rb:300:12:304:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:300:12:304:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:301:15:301:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:303:15:303:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:305:5:305:5 | b | semmle.label | b | @@ -1221,6 +1359,8 @@ nodes | hash_flow.rb:316:10:316:10 | b | semmle.label | b | | hash_flow.rb:322:5:322:8 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:322:5:322:8 | hash [element :c] | semmle.label | hash [element :c] | +| hash_flow.rb:322:12:326:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:322:12:326:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:323:15:323:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:325:15:325:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:327:5:327:5 | b [element] | semmle.label | b [element] | @@ -1246,6 +1386,8 @@ nodes | hash_flow.rb:335:10:335:13 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:341:5:341:8 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:341:5:341:8 | hash [element :c] | semmle.label | hash [element :c] | +| hash_flow.rb:341:12:345:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:341:12:345:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:342:15:342:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:344:15:344:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:346:5:346:5 | b [element :a] | semmle.label | b [element :a] | @@ -1259,6 +1401,8 @@ nodes | hash_flow.rb:351:11:351:15 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:357:5:357:8 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:357:5:357:8 | hash [element :c] | semmle.label | hash [element :c] | +| hash_flow.rb:357:12:361:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:357:12:361:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:358:15:358:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:360:15:360:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:362:5:362:8 | [post] hash [element :a] | semmle.label | [post] hash [element :a] | @@ -1271,6 +1415,8 @@ nodes | hash_flow.rb:367:11:367:18 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:373:5:373:8 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:373:5:373:8 | hash [element :c] | semmle.label | hash [element :c] | +| hash_flow.rb:373:12:377:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:373:12:377:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:374:15:374:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:376:15:376:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:378:5:378:5 | b [element] | semmle.label | b [element] | @@ -1282,6 +1428,8 @@ nodes | hash_flow.rb:379:11:379:14 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:385:5:385:8 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:385:5:385:8 | hash [element :c] | semmle.label | hash [element :c] | +| hash_flow.rb:385:12:389:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:385:12:389:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:386:15:386:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:388:15:388:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:390:5:390:5 | b [element :a] | semmle.label | b [element :a] | @@ -1299,10 +1447,14 @@ nodes | hash_flow.rb:396:11:396:15 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:402:5:402:9 | hash1 [element :a] | semmle.label | hash1 [element :a] | | hash_flow.rb:402:5:402:9 | hash1 [element :c] | semmle.label | hash1 [element :c] | +| hash_flow.rb:402:13:406:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:402:13:406:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:403:15:403:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:405:15:405:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:407:5:407:9 | hash2 [element :d] | semmle.label | hash2 [element :d] | | hash_flow.rb:407:5:407:9 | hash2 [element :f] | semmle.label | hash2 [element :f] | +| hash_flow.rb:407:13:411:5 | call to [] [element :d] | semmle.label | call to [] [element :d] | +| hash_flow.rb:407:13:411:5 | call to [] [element :f] | semmle.label | call to [] [element :f] | | hash_flow.rb:408:15:408:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:410:15:410:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:412:5:412:8 | hash [element :a] | semmle.label | hash [element :a] | @@ -1335,10 +1487,14 @@ nodes | hash_flow.rb:422:11:422:18 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:428:5:428:9 | hash1 [element :a] | semmle.label | hash1 [element :a] | | hash_flow.rb:428:5:428:9 | hash1 [element :c] | semmle.label | hash1 [element :c] | +| hash_flow.rb:428:13:432:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:428:13:432:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:429:15:429:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:431:15:431:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:433:5:433:9 | hash2 [element :d] | semmle.label | hash2 [element :d] | | hash_flow.rb:433:5:433:9 | hash2 [element :f] | semmle.label | hash2 [element :f] | +| hash_flow.rb:433:13:437:5 | call to [] [element :d] | semmle.label | call to [] [element :d] | +| hash_flow.rb:433:13:437:5 | call to [] [element :f] | semmle.label | call to [] [element :f] | | hash_flow.rb:434:15:434:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:436:15:436:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:438:5:438:8 | hash [element :a] | semmle.label | hash [element :a] | @@ -1386,6 +1542,7 @@ nodes | hash_flow.rb:455:11:455:15 | hash1 [element :f] | semmle.label | hash1 [element :f] | | hash_flow.rb:455:11:455:19 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:461:5:461:8 | hash [element :a] | semmle.label | hash [element :a] | +| hash_flow.rb:461:12:464:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | | hash_flow.rb:462:15:462:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:465:5:465:5 | b [element 1] | semmle.label | b [element 1] | | hash_flow.rb:465:9:465:12 | hash [element :a] | semmle.label | hash [element :a] | @@ -1393,6 +1550,7 @@ nodes | hash_flow.rb:467:10:467:10 | b [element 1] | semmle.label | b [element 1] | | hash_flow.rb:467:10:467:13 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:473:5:473:8 | hash [element :a] | semmle.label | hash [element :a] | +| hash_flow.rb:473:12:476:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | | hash_flow.rb:474:15:474:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:477:5:477:5 | b [element :a] | semmle.label | b [element :a] | | hash_flow.rb:477:9:477:12 | hash [element :a] | semmle.label | hash [element :a] | @@ -1402,6 +1560,7 @@ nodes | hash_flow.rb:482:10:482:10 | b [element :a] | semmle.label | b [element :a] | | hash_flow.rb:482:10:482:14 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:488:5:488:8 | hash [element :a] | semmle.label | hash [element :a] | +| hash_flow.rb:488:12:491:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | | hash_flow.rb:489:15:489:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:492:5:492:5 | b [element :a] | semmle.label | b [element :a] | | hash_flow.rb:492:9:492:12 | [post] hash [element :a] | semmle.label | [post] hash [element :a] | @@ -1415,6 +1574,8 @@ nodes | hash_flow.rb:498:10:498:17 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:504:5:504:8 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:504:5:504:8 | hash [element :c] | semmle.label | hash [element :c] | +| hash_flow.rb:504:12:508:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:504:12:508:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:505:15:505:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:507:15:507:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:512:5:512:9 | [post] hash2 [element :a] | semmle.label | [post] hash2 [element :a] | @@ -1429,6 +1590,8 @@ nodes | hash_flow.rb:515:11:515:19 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:519:5:519:8 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:519:5:519:8 | hash [element :c] | semmle.label | hash [element :c] | +| hash_flow.rb:519:12:523:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:519:12:523:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:520:15:520:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:522:15:522:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:524:5:524:5 | b [element :a] | semmle.label | b [element :a] | @@ -1442,6 +1605,8 @@ nodes | hash_flow.rb:529:11:529:15 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:535:5:535:8 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:535:5:535:8 | hash [element :c] | semmle.label | hash [element :c] | +| hash_flow.rb:535:12:539:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:535:12:539:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:536:15:536:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:538:15:538:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:540:5:540:8 | [post] hash [element :a] | semmle.label | [post] hash [element :a] | @@ -1454,6 +1619,8 @@ nodes | hash_flow.rb:545:11:545:18 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:551:5:551:8 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:551:5:551:8 | hash [element :c] | semmle.label | hash [element :c] | +| hash_flow.rb:551:12:555:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:551:12:555:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:552:15:552:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:554:15:554:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:556:5:556:5 | b [element 1] | semmle.label | b [element 1] | @@ -1469,6 +1636,8 @@ nodes | hash_flow.rb:559:11:559:14 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:565:5:565:8 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:565:5:565:8 | hash [element :c] | semmle.label | hash [element :c] | +| hash_flow.rb:565:12:569:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:565:12:569:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:566:15:566:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:568:15:568:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:570:5:570:5 | b [element :a] | semmle.label | b [element :a] | @@ -1491,6 +1660,8 @@ nodes | hash_flow.rb:578:11:578:15 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:584:5:584:8 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:584:5:584:8 | hash [element :c] | semmle.label | hash [element :c] | +| hash_flow.rb:584:12:588:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:584:12:588:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:585:15:585:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:587:15:587:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:589:5:589:5 | a [element, element 1] | semmle.label | a [element, element 1] | @@ -1503,6 +1674,8 @@ nodes | hash_flow.rb:591:11:591:17 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:597:5:597:8 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:597:5:597:8 | hash [element :c] | semmle.label | hash [element :c] | +| hash_flow.rb:597:12:601:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:597:12:601:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:598:15:598:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:600:15:600:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:602:5:602:5 | a [element :a] | semmle.label | a [element :a] | @@ -1523,12 +1696,15 @@ nodes | hash_flow.rb:607:9:611:7 | call to to_h [element] | semmle.label | call to to_h [element] | | hash_flow.rb:607:28:607:32 | value | semmle.label | value | | hash_flow.rb:609:14:609:18 | value | semmle.label | value | +| hash_flow.rb:610:9:610:25 | call to [] [element 1] | semmle.label | call to [] [element 1] | | hash_flow.rb:610:14:610:24 | call to taint | semmle.label | call to taint | | hash_flow.rb:612:10:612:16 | ( ... ) | semmle.label | ( ... ) | | hash_flow.rb:612:11:612:11 | b [element] | semmle.label | b [element] | | hash_flow.rb:612:11:612:15 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:618:5:618:8 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:618:5:618:8 | hash [element :c] | semmle.label | hash [element :c] | +| hash_flow.rb:618:12:622:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:618:12:622:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:619:15:619:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:621:15:621:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:623:5:623:5 | a [element] | semmle.label | a [element] | @@ -1546,6 +1722,8 @@ nodes | hash_flow.rb:626:11:626:16 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:632:5:632:8 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:632:5:632:8 | hash [element :c] | semmle.label | hash [element :c] | +| hash_flow.rb:632:12:636:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:632:12:636:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:633:15:633:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:635:15:635:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:637:5:637:8 | [post] hash [element] | semmle.label | [post] hash [element] | @@ -1565,6 +1743,8 @@ nodes | hash_flow.rb:642:11:642:19 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:648:5:648:8 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:648:5:648:8 | hash [element :c] | semmle.label | hash [element :c] | +| hash_flow.rb:648:12:652:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:648:12:652:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:649:15:649:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:651:15:651:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:653:5:653:5 | b [element] | semmle.label | b [element] | @@ -1582,6 +1762,8 @@ nodes | hash_flow.rb:658:11:658:15 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:664:5:664:8 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:664:5:664:8 | hash [element :c] | semmle.label | hash [element :c] | +| hash_flow.rb:664:12:668:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:664:12:668:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:665:15:665:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:667:15:667:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:669:5:669:8 | [post] hash [element] | semmle.label | [post] hash [element] | @@ -1595,10 +1777,14 @@ nodes | hash_flow.rb:673:11:673:18 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:679:5:679:9 | hash1 [element :a] | semmle.label | hash1 [element :a] | | hash_flow.rb:679:5:679:9 | hash1 [element :c] | semmle.label | hash1 [element :c] | +| hash_flow.rb:679:13:683:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:679:13:683:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:680:15:680:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:682:15:682:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:684:5:684:9 | hash2 [element :d] | semmle.label | hash2 [element :d] | | hash_flow.rb:684:5:684:9 | hash2 [element :f] | semmle.label | hash2 [element :f] | +| hash_flow.rb:684:13:688:5 | call to [] [element :d] | semmle.label | call to [] [element :d] | +| hash_flow.rb:684:13:688:5 | call to [] [element :f] | semmle.label | call to [] [element :f] | | hash_flow.rb:685:15:685:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:687:15:687:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:689:5:689:8 | hash [element :a] | semmle.label | hash [element :a] | @@ -1647,6 +1833,8 @@ nodes | hash_flow.rb:706:11:706:19 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:712:5:712:8 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:712:5:712:8 | hash [element :c] | semmle.label | hash [element :c] | +| hash_flow.rb:712:12:716:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:712:12:716:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:713:15:713:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:715:15:715:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:717:5:717:5 | a [element] | semmle.label | a [element] | @@ -1658,6 +1846,8 @@ nodes | hash_flow.rb:718:11:718:14 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:724:5:724:8 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:724:5:724:8 | hash [element :c] | semmle.label | hash [element :c] | +| hash_flow.rb:724:12:728:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:724:12:728:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:725:15:725:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:727:15:727:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:729:5:729:5 | b [element 0] | semmle.label | b [element 0] | @@ -1673,10 +1863,14 @@ nodes | hash_flow.rb:732:10:732:13 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:738:5:738:9 | hash1 [element :a] | semmle.label | hash1 [element :a] | | hash_flow.rb:738:5:738:9 | hash1 [element :c] | semmle.label | hash1 [element :c] | +| hash_flow.rb:738:13:742:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:738:13:742:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:739:15:739:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:741:15:741:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:743:5:743:9 | hash2 [element :d] | semmle.label | hash2 [element :d] | | hash_flow.rb:743:5:743:9 | hash2 [element :f] | semmle.label | hash2 [element :f] | +| hash_flow.rb:743:13:747:5 | call to [] [element :d] | semmle.label | call to [] [element :d] | +| hash_flow.rb:743:13:747:5 | call to [] [element :f] | semmle.label | call to [] [element :f] | | hash_flow.rb:744:15:744:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:746:15:746:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:748:5:748:8 | hash [element :a] | semmle.label | hash [element :a] | @@ -1684,6 +1878,11 @@ nodes | hash_flow.rb:748:5:748:8 | hash [element :d] | semmle.label | hash [element :d] | | hash_flow.rb:748:5:748:8 | hash [element :f] | semmle.label | hash [element :f] | | hash_flow.rb:748:5:748:8 | hash [element :g] | semmle.label | hash [element :g] | +| hash_flow.rb:748:12:748:59 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:748:12:748:59 | call to [] [element :c] | semmle.label | call to [] [element :c] | +| hash_flow.rb:748:12:748:59 | call to [] [element :d] | semmle.label | call to [] [element :d] | +| hash_flow.rb:748:12:748:59 | call to [] [element :f] | semmle.label | call to [] [element :f] | +| hash_flow.rb:748:12:748:59 | call to [] [element :g] | semmle.label | call to [] [element :g] | | hash_flow.rb:748:14:748:20 | ** ... [element :a] | semmle.label | ** ... [element :a] | | hash_flow.rb:748:14:748:20 | ** ... [element :c] | semmle.label | ** ... [element :c] | | hash_flow.rb:748:16:748:20 | hash1 [element :a] | semmle.label | hash1 [element :a] | @@ -1706,6 +1905,9 @@ nodes | hash_flow.rb:762:5:762:8 | hash [element :a] | semmle.label | hash [element :a] | | hash_flow.rb:762:5:762:8 | hash [element :c] | semmle.label | hash [element :c] | | hash_flow.rb:762:5:762:8 | hash [element :d] | semmle.label | hash [element :d] | +| hash_flow.rb:762:12:767:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:762:12:767:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | +| hash_flow.rb:762:12:767:5 | call to [] [element :d] | semmle.label | call to [] [element :d] | | hash_flow.rb:763:15:763:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:765:15:765:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:766:15:766:25 | call to taint | semmle.label | call to taint | @@ -1725,10 +1927,14 @@ nodes | hash_flow.rb:783:10:783:17 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:790:5:790:9 | hash1 [element :a] | semmle.label | hash1 [element :a] | | hash_flow.rb:790:5:790:9 | hash1 [element :c] | semmle.label | hash1 [element :c] | +| hash_flow.rb:790:13:794:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:790:13:794:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:791:15:791:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:793:15:793:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:795:5:795:9 | hash2 [element :d] | semmle.label | hash2 [element :d] | | hash_flow.rb:795:5:795:9 | hash2 [element :f] | semmle.label | hash2 [element :f] | +| hash_flow.rb:795:13:799:5 | call to [] [element :d] | semmle.label | call to [] [element :d] | +| hash_flow.rb:795:13:799:5 | call to [] [element :f] | semmle.label | call to [] [element :f] | | hash_flow.rb:796:15:796:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:798:15:798:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:800:5:800:8 | hash [element :a] | semmle.label | hash [element :a] | @@ -1761,10 +1967,14 @@ nodes | hash_flow.rb:810:11:810:18 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:816:5:816:9 | hash1 [element :a] | semmle.label | hash1 [element :a] | | hash_flow.rb:816:5:816:9 | hash1 [element :c] | semmle.label | hash1 [element :c] | +| hash_flow.rb:816:13:820:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:816:13:820:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:817:15:817:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:819:15:819:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:821:5:821:9 | hash2 [element :d] | semmle.label | hash2 [element :d] | | hash_flow.rb:821:5:821:9 | hash2 [element :f] | semmle.label | hash2 [element :f] | +| hash_flow.rb:821:13:825:5 | call to [] [element :d] | semmle.label | call to [] [element :d] | +| hash_flow.rb:821:13:825:5 | call to [] [element :f] | semmle.label | call to [] [element :f] | | hash_flow.rb:822:15:822:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:824:15:824:25 | call to taint | semmle.label | call to taint | | hash_flow.rb:826:5:826:8 | hash [element :a] | semmle.label | hash [element :a] | @@ -1813,10 +2023,14 @@ nodes | hash_flow.rb:843:11:843:19 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:849:5:849:9 | hash1 [element :a] | semmle.label | hash1 [element :a] | | hash_flow.rb:849:5:849:9 | hash1 [element :c] | semmle.label | hash1 [element :c] | +| hash_flow.rb:849:13:853:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:849:13:853:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:850:12:850:22 | call to taint | semmle.label | call to taint | | hash_flow.rb:852:12:852:22 | call to taint | semmle.label | call to taint | | hash_flow.rb:854:5:854:9 | hash2 [element :d] | semmle.label | hash2 [element :d] | | hash_flow.rb:854:5:854:9 | hash2 [element :f] | semmle.label | hash2 [element :f] | +| hash_flow.rb:854:13:858:5 | call to [] [element :d] | semmle.label | call to [] [element :d] | +| hash_flow.rb:854:13:858:5 | call to [] [element :f] | semmle.label | call to [] [element :f] | | hash_flow.rb:855:12:855:22 | call to taint | semmle.label | call to taint | | hash_flow.rb:857:12:857:22 | call to taint | semmle.label | call to taint | | hash_flow.rb:860:5:860:9 | hash3 [element :a] | semmle.label | hash3 [element :a] | @@ -1869,10 +2083,14 @@ nodes | hash_flow.rb:875:11:875:19 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:881:5:881:9 | hash1 [element :a] | semmle.label | hash1 [element :a] | | hash_flow.rb:881:5:881:9 | hash1 [element :c] | semmle.label | hash1 [element :c] | +| hash_flow.rb:881:13:885:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:881:13:885:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:882:12:882:22 | call to taint | semmle.label | call to taint | | hash_flow.rb:884:12:884:22 | call to taint | semmle.label | call to taint | | hash_flow.rb:886:5:886:9 | hash2 [element :d] | semmle.label | hash2 [element :d] | | hash_flow.rb:886:5:886:9 | hash2 [element :f] | semmle.label | hash2 [element :f] | +| hash_flow.rb:886:13:890:5 | call to [] [element :d] | semmle.label | call to [] [element :d] | +| hash_flow.rb:886:13:890:5 | call to [] [element :f] | semmle.label | call to [] [element :f] | | hash_flow.rb:887:12:887:22 | call to taint | semmle.label | call to taint | | hash_flow.rb:889:12:889:22 | call to taint | semmle.label | call to taint | | hash_flow.rb:892:5:892:8 | hash [element :a] | semmle.label | hash [element :a] | @@ -1917,10 +2135,14 @@ nodes | hash_flow.rb:905:11:905:19 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:911:5:911:9 | hash1 [element :a] | semmle.label | hash1 [element :a] | | hash_flow.rb:911:5:911:9 | hash1 [element :c] | semmle.label | hash1 [element :c] | +| hash_flow.rb:911:13:915:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:911:13:915:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:912:12:912:22 | call to taint | semmle.label | call to taint | | hash_flow.rb:914:12:914:22 | call to taint | semmle.label | call to taint | | hash_flow.rb:916:5:916:9 | hash2 [element :d] | semmle.label | hash2 [element :d] | | hash_flow.rb:916:5:916:9 | hash2 [element :f] | semmle.label | hash2 [element :f] | +| hash_flow.rb:916:13:920:5 | call to [] [element :d] | semmle.label | call to [] [element :d] | +| hash_flow.rb:916:13:920:5 | call to [] [element :f] | semmle.label | call to [] [element :f] | | hash_flow.rb:917:12:917:22 | call to taint | semmle.label | call to taint | | hash_flow.rb:919:12:919:22 | call to taint | semmle.label | call to taint | | hash_flow.rb:922:5:922:8 | hash [element :a] | semmle.label | hash [element :a] | @@ -1965,10 +2187,14 @@ nodes | hash_flow.rb:935:11:935:19 | ...[...] | semmle.label | ...[...] | | hash_flow.rb:941:5:941:9 | hash1 [element :a] | semmle.label | hash1 [element :a] | | hash_flow.rb:941:5:941:9 | hash1 [element :c] | semmle.label | hash1 [element :c] | +| hash_flow.rb:941:13:945:5 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_flow.rb:941:13:945:5 | call to [] [element :c] | semmle.label | call to [] [element :c] | | hash_flow.rb:942:12:942:22 | call to taint | semmle.label | call to taint | | hash_flow.rb:944:12:944:22 | call to taint | semmle.label | call to taint | | hash_flow.rb:946:5:946:9 | hash2 [element :d] | semmle.label | hash2 [element :d] | | hash_flow.rb:946:5:946:9 | hash2 [element :f] | semmle.label | hash2 [element :f] | +| hash_flow.rb:946:13:950:5 | call to [] [element :d] | semmle.label | call to [] [element :d] | +| hash_flow.rb:946:13:950:5 | call to [] [element :f] | semmle.label | call to [] [element :f] | | hash_flow.rb:947:12:947:22 | call to taint | semmle.label | call to taint | | hash_flow.rb:949:12:949:22 | call to taint | semmle.label | call to taint | | hash_flow.rb:952:5:952:8 | hash [element :a] | semmle.label | hash [element :a] | diff --git a/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected b/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected index 307ffc01611..1f773f7d1a4 100644 --- a/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected +++ b/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected @@ -2676,6 +2676,7 @@ | local_dataflow.rb:131:7:131:8 | "" | local_dataflow.rb:131:3:131:8 | ... = ... | | local_dataflow.rb:132:6:132:11 | [post] self | local_dataflow.rb:133:8:133:13 | self | | local_dataflow.rb:132:6:132:11 | self | local_dataflow.rb:133:8:133:13 | self | +| local_dataflow.rb:132:10:132:10 | [post] x | local_dataflow.rb:133:12:133:12 | x | | local_dataflow.rb:132:10:132:10 | x | local_dataflow.rb:133:12:133:12 | x | | local_dataflow.rb:132:12:148:10 | then ... | local_dataflow.rb:132:3:149:5 | if ... | | local_dataflow.rb:133:5:139:7 | SSA phi read(self) | local_dataflow.rb:141:9:141:14 | self | @@ -2686,17 +2687,20 @@ | local_dataflow.rb:133:8:133:13 | self | local_dataflow.rb:133:18:133:23 | self | | local_dataflow.rb:133:8:133:23 | SSA phi read(self) | local_dataflow.rb:134:7:134:12 | self | | local_dataflow.rb:133:8:133:23 | SSA phi read(x) | local_dataflow.rb:134:11:134:11 | x | +| local_dataflow.rb:133:12:133:12 | [post] x | local_dataflow.rb:133:22:133:22 | x | | local_dataflow.rb:133:12:133:12 | x | local_dataflow.rb:133:22:133:22 | x | | local_dataflow.rb:133:18:133:23 | [post] self | local_dataflow.rb:136:7:136:12 | self | | local_dataflow.rb:133:18:133:23 | call to use | local_dataflow.rb:133:8:133:23 | [false] ... \|\| ... | | local_dataflow.rb:133:18:133:23 | call to use | local_dataflow.rb:133:8:133:23 | [true] ... \|\| ... | | local_dataflow.rb:133:18:133:23 | self | local_dataflow.rb:136:7:136:12 | self | +| local_dataflow.rb:133:22:133:22 | [post] x | local_dataflow.rb:136:11:136:11 | x | | local_dataflow.rb:133:22:133:22 | x | local_dataflow.rb:136:11:136:11 | x | | local_dataflow.rb:133:24:134:12 | then ... | local_dataflow.rb:133:5:139:7 | if ... | | local_dataflow.rb:134:7:134:12 | call to use | local_dataflow.rb:133:24:134:12 | then ... | | local_dataflow.rb:135:5:138:9 | else ... | local_dataflow.rb:133:5:139:7 | if ... | | local_dataflow.rb:136:7:136:12 | [post] self | local_dataflow.rb:137:10:137:15 | self | | local_dataflow.rb:136:7:136:12 | self | local_dataflow.rb:137:10:137:15 | self | +| local_dataflow.rb:136:11:136:11 | [post] x | local_dataflow.rb:137:14:137:14 | x | | local_dataflow.rb:136:11:136:11 | x | local_dataflow.rb:137:14:137:14 | x | | local_dataflow.rb:137:7:138:9 | SSA phi read(self) | local_dataflow.rb:133:5:139:7 | SSA phi read(self) | | local_dataflow.rb:137:7:138:9 | SSA phi read(x) | local_dataflow.rb:133:5:139:7 | SSA phi read(x) | @@ -2705,6 +2709,7 @@ | local_dataflow.rb:137:10:137:15 | self | local_dataflow.rb:137:21:137:26 | self | | local_dataflow.rb:137:10:137:26 | SSA phi read(self) | local_dataflow.rb:137:7:138:9 | SSA phi read(self) | | local_dataflow.rb:137:10:137:26 | SSA phi read(x) | local_dataflow.rb:137:7:138:9 | SSA phi read(x) | +| local_dataflow.rb:137:14:137:14 | [post] x | local_dataflow.rb:137:25:137:25 | x | | local_dataflow.rb:137:14:137:14 | x | local_dataflow.rb:137:25:137:25 | x | | local_dataflow.rb:137:20:137:26 | [false] ! ... | local_dataflow.rb:137:10:137:26 | [false] ... && ... | | local_dataflow.rb:137:20:137:26 | [true] ! ... | local_dataflow.rb:137:10:137:26 | [true] ... && ... | @@ -2717,6 +2722,7 @@ | local_dataflow.rb:141:8:141:37 | SSA phi read(x) | local_dataflow.rb:141:5:145:7 | SSA phi read(x) | | local_dataflow.rb:141:9:141:14 | [post] self | local_dataflow.rb:141:20:141:25 | self | | local_dataflow.rb:141:9:141:14 | self | local_dataflow.rb:141:20:141:25 | self | +| local_dataflow.rb:141:13:141:13 | [post] x | local_dataflow.rb:141:24:141:24 | x | | local_dataflow.rb:141:13:141:13 | x | local_dataflow.rb:141:24:141:24 | x | | local_dataflow.rb:141:19:141:37 | [false] ( ... ) | local_dataflow.rb:141:8:141:37 | [false] ... \|\| ... | | local_dataflow.rb:141:19:141:37 | [true] ( ... ) | local_dataflow.rb:141:8:141:37 | [true] ... \|\| ... | @@ -2726,6 +2732,7 @@ | local_dataflow.rb:141:20:141:36 | SSA phi read(x) | local_dataflow.rb:143:15:143:15 | x | | local_dataflow.rb:141:20:141:36 | [false] ... && ... | local_dataflow.rb:141:19:141:37 | [false] ( ... ) | | local_dataflow.rb:141:20:141:36 | [true] ... && ... | local_dataflow.rb:141:19:141:37 | [true] ( ... ) | +| local_dataflow.rb:141:24:141:24 | [post] x | local_dataflow.rb:141:35:141:35 | x | | local_dataflow.rb:141:24:141:24 | x | local_dataflow.rb:141:35:141:35 | x | | local_dataflow.rb:141:30:141:36 | [false] ! ... | local_dataflow.rb:141:20:141:36 | [false] ... && ... | | local_dataflow.rb:141:30:141:36 | [true] ! ... | local_dataflow.rb:141:20:141:36 | [true] ... && ... | @@ -2740,6 +2747,7 @@ | local_dataflow.rb:143:11:143:16 | self | local_dataflow.rb:143:21:143:26 | self | | local_dataflow.rb:143:11:143:26 | SSA phi read(self) | local_dataflow.rb:144:11:144:16 | self | | local_dataflow.rb:143:11:143:26 | SSA phi read(x) | local_dataflow.rb:144:15:144:15 | x | +| local_dataflow.rb:143:15:143:15 | [post] x | local_dataflow.rb:143:25:143:25 | x | | local_dataflow.rb:143:15:143:15 | x | local_dataflow.rb:143:25:143:25 | x | | local_dataflow.rb:143:21:143:26 | call to use | local_dataflow.rb:143:11:143:26 | [false] ... \|\| ... | | local_dataflow.rb:143:21:143:26 | call to use | local_dataflow.rb:143:11:143:26 | [true] ... \|\| ... | @@ -2747,5 +2755,6 @@ | local_dataflow.rb:144:11:144:16 | call to use | local_dataflow.rb:143:27:144:16 | then ... | | local_dataflow.rb:147:5:147:10 | [post] self | local_dataflow.rb:148:5:148:10 | self | | local_dataflow.rb:147:5:147:10 | self | local_dataflow.rb:148:5:148:10 | self | +| local_dataflow.rb:147:9:147:9 | [post] x | local_dataflow.rb:148:9:148:9 | x | | local_dataflow.rb:147:9:147:9 | x | local_dataflow.rb:148:9:148:9 | x | | local_dataflow.rb:148:5:148:10 | call to use | local_dataflow.rb:132:12:148:10 | then ... | diff --git a/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected b/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected index 3f11dd07617..a462aebeba9 100644 --- a/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected +++ b/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected @@ -2798,6 +2798,7 @@ | UseUseExplosion.rb:21:3691:21:3696 | call to use | UseUseExplosion.rb:21:3686:21:3696 | else ... | | UseUseExplosion.rb:24:5:25:7 | synthetic splat parameter | UseUseExplosion.rb:24:13:24:13 | i | | UseUseExplosion.rb:24:5:25:7 | use | UseUseExplosion.rb:1:1:26:3 | C | +| file://:0:0:0:0 | [summary param] ** in I18n.translate | file://:0:0:0:0 | [summary] read: Argument[hash-splat].Element[any] in I18n.translate | | file://:0:0:0:0 | [summary param] position 0 in & | file://:0:0:0:0 | [summary] read: Argument[0].Element[any] in & | | file://:0:0:0:0 | [summary param] position 0 in + | file://:0:0:0:0 | [summary] read: Argument[0].Element[any] in + | | file://:0:0:0:0 | [summary param] position 0 in ActionController::Parameters#merge | file://:0:0:0:0 | [summary] to write: ReturnValue in ActionController::Parameters#merge | @@ -2834,12 +2835,16 @@ | file://:0:0:0:0 | [summary param] self in ActionController::Parameters#merge | file://:0:0:0:0 | [summary] to write: ReturnValue in ActionController::Parameters#merge | | file://:0:0:0:0 | [summary param] self in ActionController::Parameters#merge! | file://:0:0:0:0 | [summary] to write: Argument[self] in ActionController::Parameters#merge! | | file://:0:0:0:0 | [summary param] self in ActionController::Parameters#merge! | file://:0:0:0:0 | [summary] to write: ReturnValue in ActionController::Parameters#merge! | +| file://:0:0:0:0 | [summary param] self in ActionDispatch::Http::UploadedFile#[original_filename,content_type,headers] | file://:0:0:0:0 | [summary] to write: ReturnValue in ActionDispatch::Http::UploadedFile#[original_filename,content_type,headers] | +| file://:0:0:0:0 | [summary param] self in ActionDispatch::Http::UploadedFile#read | file://:0:0:0:0 | [summary] to write: Argument[1] in ActionDispatch::Http::UploadedFile#read | +| file://:0:0:0:0 | [summary param] self in ActionDispatch::Http::UploadedFile#read | file://:0:0:0:0 | [summary] to write: ReturnValue in ActionDispatch::Http::UploadedFile#read | | file://:0:0:0:0 | [summary param] self in ActiveSupportStringTransform | file://:0:0:0:0 | [summary] to write: ReturnValue in ActiveSupportStringTransform | | file://:0:0:0:0 | [summary param] self in [] | file://:0:0:0:0 | [summary] to write: ReturnValue in [] | | file://:0:0:0:0 | [summary param] self in \| | file://:0:0:0:0 | [summary] read: Argument[self].Element[any] in \| | | file://:0:0:0:0 | [summary param] self in assoc-unknown-arg | file://:0:0:0:0 | [summary] read: Argument[self].Element[any] in assoc-unknown-arg | | file://:0:0:0:0 | [summary param] self in each(0) | file://:0:0:0:0 | [summary] read: Argument[self].Element[any] in each(0) | | file://:0:0:0:0 | [summary] read: Argument[0].Element[any] in Hash[] | file://:0:0:0:0 | [summary] read: Argument[0].Element[any].Element[1] in Hash[] | +| file://:0:0:0:0 | [summary] read: Argument[hash-splat].Element[any] in I18n.translate | file://:0:0:0:0 | [summary] to write: ReturnValue in I18n.translate | | local_dataflow.rb:1:1:7:3 | self (foo) | local_dataflow.rb:3:8:3:10 | self | | local_dataflow.rb:1:1:7:3 | self in foo | local_dataflow.rb:1:1:7:3 | self (foo) | | local_dataflow.rb:1:1:7:3 | synthetic splat parameter | local_dataflow.rb:1:9:1:9 | a | @@ -3162,6 +3167,7 @@ | local_dataflow.rb:131:7:131:8 | "" | local_dataflow.rb:131:3:131:8 | ... = ... | | local_dataflow.rb:132:6:132:11 | [post] self | local_dataflow.rb:133:8:133:13 | self | | local_dataflow.rb:132:6:132:11 | self | local_dataflow.rb:133:8:133:13 | self | +| local_dataflow.rb:132:10:132:10 | [post] x | local_dataflow.rb:133:12:133:12 | x | | local_dataflow.rb:132:10:132:10 | x | local_dataflow.rb:133:12:133:12 | x | | local_dataflow.rb:132:12:148:10 | then ... | local_dataflow.rb:132:3:149:5 | if ... | | local_dataflow.rb:133:5:139:7 | SSA phi read(self) | local_dataflow.rb:141:9:141:14 | self | @@ -3172,17 +3178,20 @@ | local_dataflow.rb:133:8:133:13 | self | local_dataflow.rb:133:18:133:23 | self | | local_dataflow.rb:133:8:133:23 | SSA phi read(self) | local_dataflow.rb:134:7:134:12 | self | | local_dataflow.rb:133:8:133:23 | SSA phi read(x) | local_dataflow.rb:134:11:134:11 | x | +| local_dataflow.rb:133:12:133:12 | [post] x | local_dataflow.rb:133:22:133:22 | x | | local_dataflow.rb:133:12:133:12 | x | local_dataflow.rb:133:22:133:22 | x | | local_dataflow.rb:133:18:133:23 | [post] self | local_dataflow.rb:136:7:136:12 | self | | local_dataflow.rb:133:18:133:23 | call to use | local_dataflow.rb:133:8:133:23 | [false] ... \|\| ... | | local_dataflow.rb:133:18:133:23 | call to use | local_dataflow.rb:133:8:133:23 | [true] ... \|\| ... | | local_dataflow.rb:133:18:133:23 | self | local_dataflow.rb:136:7:136:12 | self | +| local_dataflow.rb:133:22:133:22 | [post] x | local_dataflow.rb:136:11:136:11 | x | | local_dataflow.rb:133:22:133:22 | x | local_dataflow.rb:136:11:136:11 | x | | local_dataflow.rb:133:24:134:12 | then ... | local_dataflow.rb:133:5:139:7 | if ... | | local_dataflow.rb:134:7:134:12 | call to use | local_dataflow.rb:133:24:134:12 | then ... | | local_dataflow.rb:135:5:138:9 | else ... | local_dataflow.rb:133:5:139:7 | if ... | | local_dataflow.rb:136:7:136:12 | [post] self | local_dataflow.rb:137:10:137:15 | self | | local_dataflow.rb:136:7:136:12 | self | local_dataflow.rb:137:10:137:15 | self | +| local_dataflow.rb:136:11:136:11 | [post] x | local_dataflow.rb:137:14:137:14 | x | | local_dataflow.rb:136:11:136:11 | x | local_dataflow.rb:137:14:137:14 | x | | local_dataflow.rb:137:7:138:9 | SSA phi read(self) | local_dataflow.rb:133:5:139:7 | SSA phi read(self) | | local_dataflow.rb:137:7:138:9 | SSA phi read(x) | local_dataflow.rb:133:5:139:7 | SSA phi read(x) | @@ -3191,6 +3200,7 @@ | local_dataflow.rb:137:10:137:15 | self | local_dataflow.rb:137:21:137:26 | self | | local_dataflow.rb:137:10:137:26 | SSA phi read(self) | local_dataflow.rb:137:7:138:9 | SSA phi read(self) | | local_dataflow.rb:137:10:137:26 | SSA phi read(x) | local_dataflow.rb:137:7:138:9 | SSA phi read(x) | +| local_dataflow.rb:137:14:137:14 | [post] x | local_dataflow.rb:137:25:137:25 | x | | local_dataflow.rb:137:14:137:14 | x | local_dataflow.rb:137:25:137:25 | x | | local_dataflow.rb:137:20:137:26 | [false] ! ... | local_dataflow.rb:137:10:137:26 | [false] ... && ... | | local_dataflow.rb:137:20:137:26 | [true] ! ... | local_dataflow.rb:137:10:137:26 | [true] ... && ... | @@ -3207,6 +3217,7 @@ | local_dataflow.rb:141:9:141:14 | call to use | local_dataflow.rb:141:8:141:14 | [false] ! ... | | local_dataflow.rb:141:9:141:14 | call to use | local_dataflow.rb:141:8:141:14 | [true] ! ... | | local_dataflow.rb:141:9:141:14 | self | local_dataflow.rb:141:20:141:25 | self | +| local_dataflow.rb:141:13:141:13 | [post] x | local_dataflow.rb:141:24:141:24 | x | | local_dataflow.rb:141:13:141:13 | x | local_dataflow.rb:141:24:141:24 | x | | local_dataflow.rb:141:19:141:37 | [false] ( ... ) | local_dataflow.rb:141:8:141:37 | [false] ... \|\| ... | | local_dataflow.rb:141:19:141:37 | [true] ( ... ) | local_dataflow.rb:141:8:141:37 | [true] ... \|\| ... | @@ -3216,6 +3227,7 @@ | local_dataflow.rb:141:20:141:36 | SSA phi read(x) | local_dataflow.rb:143:15:143:15 | x | | local_dataflow.rb:141:20:141:36 | [false] ... && ... | local_dataflow.rb:141:19:141:37 | [false] ( ... ) | | local_dataflow.rb:141:20:141:36 | [true] ... && ... | local_dataflow.rb:141:19:141:37 | [true] ( ... ) | +| local_dataflow.rb:141:24:141:24 | [post] x | local_dataflow.rb:141:35:141:35 | x | | local_dataflow.rb:141:24:141:24 | x | local_dataflow.rb:141:35:141:35 | x | | local_dataflow.rb:141:30:141:36 | [false] ! ... | local_dataflow.rb:141:20:141:36 | [false] ... && ... | | local_dataflow.rb:141:30:141:36 | [true] ! ... | local_dataflow.rb:141:20:141:36 | [true] ... && ... | @@ -3232,6 +3244,7 @@ | local_dataflow.rb:143:11:143:16 | self | local_dataflow.rb:143:21:143:26 | self | | local_dataflow.rb:143:11:143:26 | SSA phi read(self) | local_dataflow.rb:144:11:144:16 | self | | local_dataflow.rb:143:11:143:26 | SSA phi read(x) | local_dataflow.rb:144:15:144:15 | x | +| local_dataflow.rb:143:15:143:15 | [post] x | local_dataflow.rb:143:25:143:25 | x | | local_dataflow.rb:143:15:143:15 | x | local_dataflow.rb:143:25:143:25 | x | | local_dataflow.rb:143:21:143:26 | call to use | local_dataflow.rb:143:11:143:26 | [false] ... \|\| ... | | local_dataflow.rb:143:21:143:26 | call to use | local_dataflow.rb:143:11:143:26 | [true] ... \|\| ... | @@ -3239,5 +3252,6 @@ | local_dataflow.rb:144:11:144:16 | call to use | local_dataflow.rb:143:27:144:16 | then ... | | local_dataflow.rb:147:5:147:10 | [post] self | local_dataflow.rb:148:5:148:10 | self | | local_dataflow.rb:147:5:147:10 | self | local_dataflow.rb:148:5:148:10 | self | +| local_dataflow.rb:147:9:147:9 | [post] x | local_dataflow.rb:148:9:148:9 | x | | local_dataflow.rb:147:9:147:9 | x | local_dataflow.rb:148:9:148:9 | x | | local_dataflow.rb:148:5:148:10 | call to use | local_dataflow.rb:132:12:148:10 | then ... | diff --git a/ruby/ql/test/library-tests/dataflow/params/params-flow.expected b/ruby/ql/test/library-tests/dataflow/params/params-flow.expected index 629c9993984..879c57b1f17 100644 --- a/ruby/ql/test/library-tests/dataflow/params/params-flow.expected +++ b/ruby/ql/test/library-tests/dataflow/params/params-flow.expected @@ -27,32 +27,39 @@ edges | params_flow.rb:33:26:33:34 | call to taint | params_flow.rb:25:17:25:24 | **kwargs [hash-splat position :p2] | provenance | | | params_flow.rb:33:41:33:49 | call to taint | params_flow.rb:25:17:25:24 | **kwargs [hash-splat position :p3] | provenance | | | params_flow.rb:34:1:34:4 | args [element :p3] | params_flow.rb:35:25:35:28 | args [element :p3] | provenance | | -| params_flow.rb:34:14:34:22 | call to taint | params_flow.rb:34:1:34:4 | args [element :p3] | provenance | | +| params_flow.rb:34:8:34:32 | call to [] [element :p3] | params_flow.rb:34:1:34:4 | args [element :p3] | provenance | | +| params_flow.rb:34:14:34:22 | call to taint | params_flow.rb:34:8:34:32 | call to [] [element :p3] | provenance | | | params_flow.rb:35:12:35:20 | call to taint | params_flow.rb:25:12:25:13 | p1 | provenance | | | params_flow.rb:35:23:35:28 | ** ... [element :p3] | params_flow.rb:25:17:25:24 | **kwargs [element :p3] | provenance | | | params_flow.rb:35:25:35:28 | args [element :p3] | params_flow.rb:35:23:35:28 | ** ... [element :p3] | provenance | | | params_flow.rb:37:1:37:4 | args [element :p1] | params_flow.rb:38:10:38:13 | args [element :p1] | provenance | | | params_flow.rb:37:1:37:4 | args [element :p2] | params_flow.rb:38:10:38:13 | args [element :p2] | provenance | | -| params_flow.rb:37:16:37:24 | call to taint | params_flow.rb:37:1:37:4 | args [element :p1] | provenance | | -| params_flow.rb:37:34:37:42 | call to taint | params_flow.rb:37:1:37:4 | args [element :p2] | provenance | | +| params_flow.rb:37:8:37:44 | call to [] [element :p1] | params_flow.rb:37:1:37:4 | args [element :p1] | provenance | | +| params_flow.rb:37:8:37:44 | call to [] [element :p2] | params_flow.rb:37:1:37:4 | args [element :p2] | provenance | | +| params_flow.rb:37:16:37:24 | call to taint | params_flow.rb:37:8:37:44 | call to [] [element :p1] | provenance | | +| params_flow.rb:37:34:37:42 | call to taint | params_flow.rb:37:8:37:44 | call to [] [element :p2] | provenance | | | params_flow.rb:38:8:38:13 | ** ... [element :p1] | params_flow.rb:25:12:25:13 | p1 | provenance | | | params_flow.rb:38:8:38:13 | ** ... [element :p2] | params_flow.rb:25:17:25:24 | **kwargs [element :p2] | provenance | | | params_flow.rb:38:10:38:13 | args [element :p1] | params_flow.rb:38:8:38:13 | ** ... [element :p1] | provenance | | | params_flow.rb:38:10:38:13 | args [element :p2] | params_flow.rb:38:8:38:13 | ** ... [element :p2] | provenance | | | params_flow.rb:40:1:40:4 | args [element :p1] | params_flow.rb:41:26:41:29 | args [element :p1] | provenance | | -| params_flow.rb:40:16:40:24 | call to taint | params_flow.rb:40:1:40:4 | args [element :p1] | provenance | | +| params_flow.rb:40:8:40:26 | call to [] [element :p1] | params_flow.rb:40:1:40:4 | args [element :p1] | provenance | | +| params_flow.rb:40:16:40:24 | call to taint | params_flow.rb:40:8:40:26 | call to [] [element :p1] | provenance | | | params_flow.rb:41:13:41:21 | call to taint | params_flow.rb:16:18:16:19 | p2 | provenance | | | params_flow.rb:41:24:41:29 | ** ... [element :p1] | params_flow.rb:16:13:16:14 | p1 | provenance | | | params_flow.rb:41:26:41:29 | args [element :p1] | params_flow.rb:41:24:41:29 | ** ... [element :p1] | provenance | | | params_flow.rb:43:1:43:4 | args [element 0] | params_flow.rb:44:24:44:27 | args [element 0] | provenance | | -| params_flow.rb:43:9:43:17 | call to taint | params_flow.rb:43:1:43:4 | args [element 0] | provenance | | +| params_flow.rb:43:8:43:18 | call to [] [element 0] | params_flow.rb:43:1:43:4 | args [element 0] | provenance | | +| params_flow.rb:43:9:43:17 | call to taint | params_flow.rb:43:8:43:18 | call to [] [element 0] | provenance | | | params_flow.rb:44:12:44:20 | call to taint | params_flow.rb:9:16:9:17 | p1 | provenance | | | params_flow.rb:44:23:44:27 | * ... [element 0] | params_flow.rb:9:20:9:21 | p2 | provenance | | | params_flow.rb:44:24:44:27 | args [element 0] | params_flow.rb:44:23:44:27 | * ... [element 0] | provenance | | | params_flow.rb:46:1:46:4 | args [element 0] | params_flow.rb:47:13:47:16 | args [element 0] | provenance | | | params_flow.rb:46:1:46:4 | args [element 1] | params_flow.rb:47:13:47:16 | args [element 1] | provenance | | -| params_flow.rb:46:9:46:17 | call to taint | params_flow.rb:46:1:46:4 | args [element 0] | provenance | | -| params_flow.rb:46:20:46:28 | call to taint | params_flow.rb:46:1:46:4 | args [element 1] | provenance | | +| params_flow.rb:46:8:46:29 | call to [] [element 0] | params_flow.rb:46:1:46:4 | args [element 0] | provenance | | +| params_flow.rb:46:8:46:29 | call to [] [element 1] | params_flow.rb:46:1:46:4 | args [element 1] | provenance | | +| params_flow.rb:46:9:46:17 | call to taint | params_flow.rb:46:8:46:29 | call to [] [element 0] | provenance | | +| params_flow.rb:46:20:46:28 | call to taint | params_flow.rb:46:8:46:29 | call to [] [element 1] | provenance | | | params_flow.rb:47:12:47:16 | * ... [element 0] | params_flow.rb:9:16:9:17 | p1 | provenance | | | params_flow.rb:47:12:47:16 | * ... [element 1] | params_flow.rb:9:20:9:21 | p2 | provenance | | | params_flow.rb:47:13:47:16 | args [element 0] | params_flow.rb:47:12:47:16 | * ... [element 0] | provenance | | @@ -66,15 +73,18 @@ edges | params_flow.rb:55:9:55:17 | call to taint | params_flow.rb:49:13:49:14 | p1 | provenance | | | params_flow.rb:55:20:55:28 | call to taint | params_flow.rb:49:17:49:24 | *posargs [element 0] | provenance | | | params_flow.rb:57:1:57:4 | args [element 0] | params_flow.rb:58:21:58:24 | args [element 0] | provenance | | -| params_flow.rb:57:9:57:17 | call to taint | params_flow.rb:57:1:57:4 | args [element 0] | provenance | | +| params_flow.rb:57:8:57:18 | call to [] [element 0] | params_flow.rb:57:1:57:4 | args [element 0] | provenance | | +| params_flow.rb:57:9:57:17 | call to taint | params_flow.rb:57:8:57:18 | call to [] [element 0] | provenance | | | params_flow.rb:58:9:58:17 | call to taint | params_flow.rb:49:13:49:14 | p1 | provenance | | | params_flow.rb:58:20:58:24 | * ... [element 0] | params_flow.rb:49:17:49:24 | *posargs [element 0] | provenance | | | params_flow.rb:58:20:58:24 | * ... [element 0] | params_flow.rb:49:17:49:24 | *posargs [element 0] | provenance | | | params_flow.rb:58:21:58:24 | args [element 0] | params_flow.rb:58:20:58:24 | * ... [element 0] | provenance | | | params_flow.rb:60:1:60:4 | args [element 0] | params_flow.rb:61:10:61:13 | args [element 0] | provenance | | | params_flow.rb:60:1:60:4 | args [element 1] | params_flow.rb:61:10:61:13 | args [element 1] | provenance | | -| params_flow.rb:60:9:60:17 | call to taint | params_flow.rb:60:1:60:4 | args [element 0] | provenance | | -| params_flow.rb:60:20:60:28 | call to taint | params_flow.rb:60:1:60:4 | args [element 1] | provenance | | +| params_flow.rb:60:8:60:29 | call to [] [element 0] | params_flow.rb:60:1:60:4 | args [element 0] | provenance | | +| params_flow.rb:60:8:60:29 | call to [] [element 1] | params_flow.rb:60:1:60:4 | args [element 1] | provenance | | +| params_flow.rb:60:9:60:17 | call to taint | params_flow.rb:60:8:60:29 | call to [] [element 0] | provenance | | +| params_flow.rb:60:20:60:28 | call to taint | params_flow.rb:60:8:60:29 | call to [] [element 1] | provenance | | | params_flow.rb:61:9:61:13 | * ... [element 0] | params_flow.rb:49:13:49:14 | p1 | provenance | | | params_flow.rb:61:9:61:13 | * ... [element 1] | params_flow.rb:49:17:49:24 | *posargs [element 0] | provenance | | | params_flow.rb:61:10:61:13 | args [element 0] | params_flow.rb:61:9:61:13 | * ... [element 0] | provenance | | @@ -94,7 +104,8 @@ edges | params_flow.rb:78:43:78:51 | call to taint | params_flow.rb:69:24:69:24 | w | provenance | | | params_flow.rb:78:54:78:62 | call to taint | params_flow.rb:69:27:69:27 | r | provenance | | | params_flow.rb:80:1:80:4 | args [element 0] | params_flow.rb:81:22:81:25 | args [element 0] | provenance | | -| params_flow.rb:80:9:80:17 | call to taint | params_flow.rb:80:1:80:4 | args [element 0] | provenance | | +| params_flow.rb:80:8:80:51 | call to [] [element 0] | params_flow.rb:80:1:80:4 | args [element 0] | provenance | | +| params_flow.rb:80:9:80:17 | call to taint | params_flow.rb:80:8:80:51 | call to [] [element 0] | provenance | | | params_flow.rb:81:10:81:18 | call to taint | params_flow.rb:69:14:69:14 | x | provenance | | | params_flow.rb:81:21:81:25 | * ... [element 0] | params_flow.rb:69:17:69:17 | y | provenance | | | params_flow.rb:81:22:81:25 | args [element 0] | params_flow.rb:81:21:81:25 | * ... [element 0] | provenance | | @@ -108,10 +119,14 @@ edges | params_flow.rb:93:1:93:4 | args [element 1] | params_flow.rb:94:33:94:36 | args [element 1] | provenance | | | params_flow.rb:93:1:93:4 | args [element 2] | params_flow.rb:94:33:94:36 | args [element 2] | provenance | | | params_flow.rb:93:1:93:4 | args [element 3] | params_flow.rb:94:33:94:36 | args [element 3] | provenance | | -| params_flow.rb:93:9:93:17 | call to taint | params_flow.rb:93:1:93:4 | args [element 0] | provenance | | -| params_flow.rb:93:20:93:28 | call to taint | params_flow.rb:93:1:93:4 | args [element 1] | provenance | | -| params_flow.rb:93:31:93:39 | call to taint | params_flow.rb:93:1:93:4 | args [element 2] | provenance | | -| params_flow.rb:93:42:93:50 | call to taint | params_flow.rb:93:1:93:4 | args [element 3] | provenance | | +| params_flow.rb:93:8:93:51 | call to [] [element 0] | params_flow.rb:93:1:93:4 | args [element 0] | provenance | | +| params_flow.rb:93:8:93:51 | call to [] [element 1] | params_flow.rb:93:1:93:4 | args [element 1] | provenance | | +| params_flow.rb:93:8:93:51 | call to [] [element 2] | params_flow.rb:93:1:93:4 | args [element 2] | provenance | | +| params_flow.rb:93:8:93:51 | call to [] [element 3] | params_flow.rb:93:1:93:4 | args [element 3] | provenance | | +| params_flow.rb:93:9:93:17 | call to taint | params_flow.rb:93:8:93:51 | call to [] [element 0] | provenance | | +| params_flow.rb:93:20:93:28 | call to taint | params_flow.rb:93:8:93:51 | call to [] [element 1] | provenance | | +| params_flow.rb:93:31:93:39 | call to taint | params_flow.rb:93:8:93:51 | call to [] [element 2] | provenance | | +| params_flow.rb:93:42:93:50 | call to taint | params_flow.rb:93:8:93:51 | call to [] [element 3] | provenance | | | params_flow.rb:94:10:94:18 | call to taint | params_flow.rb:83:14:83:14 | t | provenance | | | params_flow.rb:94:21:94:29 | call to taint | params_flow.rb:83:17:83:17 | u | provenance | | | params_flow.rb:94:32:94:36 | * ... [element 0] | params_flow.rb:83:20:83:20 | v | provenance | | @@ -146,8 +161,10 @@ edges | params_flow.rb:118:13:118:13 | x [element] | params_flow.rb:118:12:118:13 | * ... [element] | provenance | | | params_flow.rb:130:1:130:4 | args [element 0] | params_flow.rb:131:11:131:14 | args [element 0] | provenance | | | params_flow.rb:130:1:130:4 | args [element 1] | params_flow.rb:131:11:131:14 | args [element 1] | provenance | | -| params_flow.rb:130:9:130:17 | call to taint | params_flow.rb:130:1:130:4 | args [element 0] | provenance | | -| params_flow.rb:130:20:130:28 | call to taint | params_flow.rb:130:1:130:4 | args [element 1] | provenance | | +| params_flow.rb:130:8:130:29 | call to [] [element 0] | params_flow.rb:130:1:130:4 | args [element 0] | provenance | | +| params_flow.rb:130:8:130:29 | call to [] [element 1] | params_flow.rb:130:1:130:4 | args [element 1] | provenance | | +| params_flow.rb:130:9:130:17 | call to taint | params_flow.rb:130:8:130:29 | call to [] [element 0] | provenance | | +| params_flow.rb:130:20:130:28 | call to taint | params_flow.rb:130:8:130:29 | call to [] [element 1] | provenance | | | params_flow.rb:131:10:131:14 | * ... [element 0] | params_flow.rb:83:14:83:14 | t | provenance | | | params_flow.rb:131:10:131:14 | * ... [element 1] | params_flow.rb:83:17:83:17 | u | provenance | | | params_flow.rb:131:11:131:14 | args [element 0] | params_flow.rb:131:10:131:14 | * ... [element 0] | provenance | | @@ -156,7 +173,8 @@ edges | params_flow.rb:133:14:133:18 | *args [element 1] | params_flow.rb:134:10:134:13 | args [element 1] | provenance | | | params_flow.rb:134:10:134:13 | args [element 1] | params_flow.rb:134:10:134:16 | ...[...] | provenance | | | params_flow.rb:137:10:137:43 | * ... [element 1] | params_flow.rb:133:14:133:18 | *args [element 1] | provenance | | -| params_flow.rb:137:23:137:31 | call to taint | params_flow.rb:137:10:137:43 | * ... [element 1] | provenance | | +| params_flow.rb:137:11:137:43 | call to [] [element 1] | params_flow.rb:137:10:137:43 | * ... [element 1] | provenance | | +| params_flow.rb:137:23:137:31 | call to taint | params_flow.rb:137:11:137:43 | call to [] [element 1] | provenance | | | params_flow.rb:153:28:153:29 | p2 | params_flow.rb:154:18:154:19 | p2 | provenance | | | params_flow.rb:154:18:154:19 | p2 | params_flow.rb:154:5:154:6 | [post] p1 [element 0] | provenance | | | params_flow.rb:164:23:164:24 | [post] p1 [element 0] | params_flow.rb:165:6:165:7 | p1 [element 0] | provenance | | @@ -204,12 +222,15 @@ nodes | params_flow.rb:33:26:33:34 | call to taint | semmle.label | call to taint | | params_flow.rb:33:41:33:49 | call to taint | semmle.label | call to taint | | params_flow.rb:34:1:34:4 | args [element :p3] | semmle.label | args [element :p3] | +| params_flow.rb:34:8:34:32 | call to [] [element :p3] | semmle.label | call to [] [element :p3] | | params_flow.rb:34:14:34:22 | call to taint | semmle.label | call to taint | | params_flow.rb:35:12:35:20 | call to taint | semmle.label | call to taint | | params_flow.rb:35:23:35:28 | ** ... [element :p3] | semmle.label | ** ... [element :p3] | | params_flow.rb:35:25:35:28 | args [element :p3] | semmle.label | args [element :p3] | | params_flow.rb:37:1:37:4 | args [element :p1] | semmle.label | args [element :p1] | | params_flow.rb:37:1:37:4 | args [element :p2] | semmle.label | args [element :p2] | +| params_flow.rb:37:8:37:44 | call to [] [element :p1] | semmle.label | call to [] [element :p1] | +| params_flow.rb:37:8:37:44 | call to [] [element :p2] | semmle.label | call to [] [element :p2] | | params_flow.rb:37:16:37:24 | call to taint | semmle.label | call to taint | | params_flow.rb:37:34:37:42 | call to taint | semmle.label | call to taint | | params_flow.rb:38:8:38:13 | ** ... [element :p1] | semmle.label | ** ... [element :p1] | @@ -217,17 +238,21 @@ nodes | params_flow.rb:38:10:38:13 | args [element :p1] | semmle.label | args [element :p1] | | params_flow.rb:38:10:38:13 | args [element :p2] | semmle.label | args [element :p2] | | params_flow.rb:40:1:40:4 | args [element :p1] | semmle.label | args [element :p1] | +| params_flow.rb:40:8:40:26 | call to [] [element :p1] | semmle.label | call to [] [element :p1] | | params_flow.rb:40:16:40:24 | call to taint | semmle.label | call to taint | | params_flow.rb:41:13:41:21 | call to taint | semmle.label | call to taint | | params_flow.rb:41:24:41:29 | ** ... [element :p1] | semmle.label | ** ... [element :p1] | | params_flow.rb:41:26:41:29 | args [element :p1] | semmle.label | args [element :p1] | | params_flow.rb:43:1:43:4 | args [element 0] | semmle.label | args [element 0] | +| params_flow.rb:43:8:43:18 | call to [] [element 0] | semmle.label | call to [] [element 0] | | params_flow.rb:43:9:43:17 | call to taint | semmle.label | call to taint | | params_flow.rb:44:12:44:20 | call to taint | semmle.label | call to taint | | params_flow.rb:44:23:44:27 | * ... [element 0] | semmle.label | * ... [element 0] | | params_flow.rb:44:24:44:27 | args [element 0] | semmle.label | args [element 0] | | params_flow.rb:46:1:46:4 | args [element 0] | semmle.label | args [element 0] | | params_flow.rb:46:1:46:4 | args [element 1] | semmle.label | args [element 1] | +| params_flow.rb:46:8:46:29 | call to [] [element 0] | semmle.label | call to [] [element 0] | +| params_flow.rb:46:8:46:29 | call to [] [element 1] | semmle.label | call to [] [element 1] | | params_flow.rb:46:9:46:17 | call to taint | semmle.label | call to taint | | params_flow.rb:46:20:46:28 | call to taint | semmle.label | call to taint | | params_flow.rb:47:12:47:16 | * ... [element 0] | semmle.label | * ... [element 0] | @@ -245,12 +270,15 @@ nodes | params_flow.rb:55:9:55:17 | call to taint | semmle.label | call to taint | | params_flow.rb:55:20:55:28 | call to taint | semmle.label | call to taint | | params_flow.rb:57:1:57:4 | args [element 0] | semmle.label | args [element 0] | +| params_flow.rb:57:8:57:18 | call to [] [element 0] | semmle.label | call to [] [element 0] | | params_flow.rb:57:9:57:17 | call to taint | semmle.label | call to taint | | params_flow.rb:58:9:58:17 | call to taint | semmle.label | call to taint | | params_flow.rb:58:20:58:24 | * ... [element 0] | semmle.label | * ... [element 0] | | params_flow.rb:58:21:58:24 | args [element 0] | semmle.label | args [element 0] | | params_flow.rb:60:1:60:4 | args [element 0] | semmle.label | args [element 0] | | params_flow.rb:60:1:60:4 | args [element 1] | semmle.label | args [element 1] | +| params_flow.rb:60:8:60:29 | call to [] [element 0] | semmle.label | call to [] [element 0] | +| params_flow.rb:60:8:60:29 | call to [] [element 1] | semmle.label | call to [] [element 1] | | params_flow.rb:60:9:60:17 | call to taint | semmle.label | call to taint | | params_flow.rb:60:20:60:28 | call to taint | semmle.label | call to taint | | params_flow.rb:61:9:61:13 | * ... [element 0] | semmle.label | * ... [element 0] | @@ -277,6 +305,7 @@ nodes | params_flow.rb:78:43:78:51 | call to taint | semmle.label | call to taint | | params_flow.rb:78:54:78:62 | call to taint | semmle.label | call to taint | | params_flow.rb:80:1:80:4 | args [element 0] | semmle.label | args [element 0] | +| params_flow.rb:80:8:80:51 | call to [] [element 0] | semmle.label | call to [] [element 0] | | params_flow.rb:80:9:80:17 | call to taint | semmle.label | call to taint | | params_flow.rb:81:10:81:18 | call to taint | semmle.label | call to taint | | params_flow.rb:81:21:81:25 | * ... [element 0] | semmle.label | * ... [element 0] | @@ -297,6 +326,10 @@ nodes | params_flow.rb:93:1:93:4 | args [element 1] | semmle.label | args [element 1] | | params_flow.rb:93:1:93:4 | args [element 2] | semmle.label | args [element 2] | | params_flow.rb:93:1:93:4 | args [element 3] | semmle.label | args [element 3] | +| params_flow.rb:93:8:93:51 | call to [] [element 0] | semmle.label | call to [] [element 0] | +| params_flow.rb:93:8:93:51 | call to [] [element 1] | semmle.label | call to [] [element 1] | +| params_flow.rb:93:8:93:51 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| params_flow.rb:93:8:93:51 | call to [] [element 3] | semmle.label | call to [] [element 3] | | params_flow.rb:93:9:93:17 | call to taint | semmle.label | call to taint | | params_flow.rb:93:20:93:28 | call to taint | semmle.label | call to taint | | params_flow.rb:93:31:93:39 | call to taint | semmle.label | call to taint | @@ -339,6 +372,8 @@ nodes | params_flow.rb:118:13:118:13 | x [element] | semmle.label | x [element] | | params_flow.rb:130:1:130:4 | args [element 0] | semmle.label | args [element 0] | | params_flow.rb:130:1:130:4 | args [element 1] | semmle.label | args [element 1] | +| params_flow.rb:130:8:130:29 | call to [] [element 0] | semmle.label | call to [] [element 0] | +| params_flow.rb:130:8:130:29 | call to [] [element 1] | semmle.label | call to [] [element 1] | | params_flow.rb:130:9:130:17 | call to taint | semmle.label | call to taint | | params_flow.rb:130:20:130:28 | call to taint | semmle.label | call to taint | | params_flow.rb:131:10:131:14 | * ... [element 0] | semmle.label | * ... [element 0] | @@ -350,6 +385,7 @@ nodes | params_flow.rb:134:10:134:13 | args [element 1] | semmle.label | args [element 1] | | params_flow.rb:134:10:134:16 | ...[...] | semmle.label | ...[...] | | params_flow.rb:137:10:137:43 | * ... [element 1] | semmle.label | * ... [element 1] | +| params_flow.rb:137:11:137:43 | call to [] [element 1] | semmle.label | call to [] [element 1] | | params_flow.rb:137:23:137:31 | call to taint | semmle.label | call to taint | | params_flow.rb:153:28:153:29 | p2 | semmle.label | p2 | | params_flow.rb:154:5:154:6 | [post] p1 [element 0] | semmle.label | [post] p1 [element 0] | diff --git a/ruby/ql/test/library-tests/dataflow/summaries/Summaries.expected b/ruby/ql/test/library-tests/dataflow/summaries/Summaries.expected index 693832e5577..dab6b18e8cf 100644 --- a/ruby/ql/test/library-tests/dataflow/summaries/Summaries.expected +++ b/ruby/ql/test/library-tests/dataflow/summaries/Summaries.expected @@ -65,8 +65,12 @@ edges | summaries.rb:4:24:4:30 | tainted | summaries.rb:4:36:4:36 | x | provenance | | | summaries.rb:4:36:4:36 | x | summaries.rb:5:8:5:8 | x | provenance | | | summaries.rb:4:36:4:36 | x | summaries.rb:5:8:5:8 | x | provenance | | +| summaries.rb:4:36:4:36 | x | summaries.rb:6:3:6:3 | x | provenance | | +| summaries.rb:4:36:4:36 | x | summaries.rb:6:3:6:3 | x | provenance | | | summaries.rb:11:17:11:17 | x | summaries.rb:12:8:12:8 | x | provenance | | | summaries.rb:11:17:11:17 | x | summaries.rb:12:8:12:8 | x | provenance | | +| summaries.rb:11:17:11:17 | x | summaries.rb:13:3:13:3 | x | provenance | | +| summaries.rb:11:17:11:17 | x | summaries.rb:13:3:13:3 | x | provenance | | | summaries.rb:16:1:16:8 | tainted3 | summaries.rb:18:6:18:13 | tainted3 | provenance | | | summaries.rb:16:1:16:8 | tainted3 | summaries.rb:18:6:18:13 | tainted3 | provenance | | | summaries.rb:16:12:16:43 | call to apply_lambda | summaries.rb:16:1:16:8 | tainted3 | provenance | | @@ -93,7 +97,8 @@ edges | summaries.rb:48:24:48:41 | call to source | summaries.rb:48:8:48:42 | call to preserveTaint | provenance | | | summaries.rb:51:24:51:30 | tainted | summaries.rb:51:6:51:31 | call to namedArg | provenance | | | summaries.rb:53:1:53:4 | args [element :foo] | summaries.rb:54:21:54:24 | args [element :foo] | provenance | | -| summaries.rb:53:15:53:31 | call to source | summaries.rb:53:1:53:4 | args [element :foo] | provenance | | +| summaries.rb:53:8:53:33 | call to [] [element :foo] | summaries.rb:53:1:53:4 | args [element :foo] | provenance | | +| summaries.rb:53:15:53:31 | call to source | summaries.rb:53:8:53:33 | call to [] [element :foo] | provenance | | | summaries.rb:54:19:54:24 | ** ... [element :foo] | summaries.rb:54:6:54:25 | call to namedArg | provenance | | | summaries.rb:54:21:54:24 | args [element :foo] | summaries.rb:54:19:54:24 | ** ... [element :foo] | provenance | | | summaries.rb:56:22:56:28 | tainted | summaries.rb:56:6:56:29 | call to anyArg | provenance | | @@ -118,10 +123,14 @@ edges | summaries.rb:79:1:79:1 | a [element 2] | summaries.rb:86:6:86:6 | a [element 2] | provenance | | | summaries.rb:79:1:79:1 | a [element 2] | summaries.rb:95:1:95:1 | a [element 2] | provenance | | | summaries.rb:79:1:79:1 | a [element 2] | summaries.rb:95:1:95:1 | a [element 2] | provenance | | -| summaries.rb:79:15:79:29 | call to source | summaries.rb:79:1:79:1 | a [element 1] | provenance | | -| summaries.rb:79:15:79:29 | call to source | summaries.rb:79:1:79:1 | a [element 1] | provenance | | -| summaries.rb:79:32:79:46 | call to source | summaries.rb:79:1:79:1 | a [element 2] | provenance | | -| summaries.rb:79:32:79:46 | call to source | summaries.rb:79:1:79:1 | a [element 2] | provenance | | +| summaries.rb:79:5:79:47 | call to [] [element 1] | summaries.rb:79:1:79:1 | a [element 1] | provenance | | +| summaries.rb:79:5:79:47 | call to [] [element 1] | summaries.rb:79:1:79:1 | a [element 1] | provenance | | +| summaries.rb:79:5:79:47 | call to [] [element 2] | summaries.rb:79:1:79:1 | a [element 2] | provenance | | +| summaries.rb:79:5:79:47 | call to [] [element 2] | summaries.rb:79:1:79:1 | a [element 2] | provenance | | +| summaries.rb:79:15:79:29 | call to source | summaries.rb:79:5:79:47 | call to [] [element 1] | provenance | | +| summaries.rb:79:15:79:29 | call to source | summaries.rb:79:5:79:47 | call to [] [element 1] | provenance | | +| summaries.rb:79:32:79:46 | call to source | summaries.rb:79:5:79:47 | call to [] [element 2] | provenance | | +| summaries.rb:79:32:79:46 | call to source | summaries.rb:79:5:79:47 | call to [] [element 2] | provenance | | | summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:82:6:82:6 | a [element] | provenance | | | summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:82:6:82:6 | a [element] | provenance | | | summaries.rb:81:1:81:1 | [post] a [element] | summaries.rb:84:6:84:6 | a [element] | provenance | | @@ -270,12 +279,16 @@ nodes | summaries.rb:4:36:4:36 | x | semmle.label | x | | summaries.rb:5:8:5:8 | x | semmle.label | x | | summaries.rb:5:8:5:8 | x | semmle.label | x | +| summaries.rb:6:3:6:3 | x | semmle.label | x | +| summaries.rb:6:3:6:3 | x | semmle.label | x | | summaries.rb:9:6:9:13 | tainted2 | semmle.label | tainted2 | | summaries.rb:9:6:9:13 | tainted2 | semmle.label | tainted2 | | summaries.rb:11:17:11:17 | x | semmle.label | x | | summaries.rb:11:17:11:17 | x | semmle.label | x | | summaries.rb:12:8:12:8 | x | semmle.label | x | | summaries.rb:12:8:12:8 | x | semmle.label | x | +| summaries.rb:13:3:13:3 | x | semmle.label | x | +| summaries.rb:13:3:13:3 | x | semmle.label | x | | summaries.rb:16:1:16:8 | tainted3 | semmle.label | tainted3 | | summaries.rb:16:1:16:8 | tainted3 | semmle.label | tainted3 | | summaries.rb:16:12:16:43 | call to apply_lambda | semmle.label | call to apply_lambda | @@ -317,6 +330,7 @@ nodes | summaries.rb:51:6:51:31 | call to namedArg | semmle.label | call to namedArg | | summaries.rb:51:24:51:30 | tainted | semmle.label | tainted | | summaries.rb:53:1:53:4 | args [element :foo] | semmle.label | args [element :foo] | +| summaries.rb:53:8:53:33 | call to [] [element :foo] | semmle.label | call to [] [element :foo] | | summaries.rb:53:15:53:31 | call to source | semmle.label | call to source | | summaries.rb:54:6:54:25 | call to namedArg | semmle.label | call to namedArg | | summaries.rb:54:19:54:24 | ** ... [element :foo] | semmle.label | ** ... [element :foo] | @@ -340,6 +354,10 @@ nodes | summaries.rb:79:1:79:1 | a [element 1] | semmle.label | a [element 1] | | summaries.rb:79:1:79:1 | a [element 2] | semmle.label | a [element 2] | | summaries.rb:79:1:79:1 | a [element 2] | semmle.label | a [element 2] | +| summaries.rb:79:5:79:47 | call to [] [element 1] | semmle.label | call to [] [element 1] | +| summaries.rb:79:5:79:47 | call to [] [element 1] | semmle.label | call to [] [element 1] | +| summaries.rb:79:5:79:47 | call to [] [element 2] | semmle.label | call to [] [element 2] | +| summaries.rb:79:5:79:47 | call to [] [element 2] | semmle.label | call to [] [element 2] | | summaries.rb:79:15:79:29 | call to source | semmle.label | call to source | | summaries.rb:79:15:79:29 | call to source | semmle.label | call to source | | summaries.rb:79:32:79:46 | call to source | semmle.label | call to source | @@ -504,6 +522,10 @@ nodes | summaries.rb:166:20:166:36 | call to source | semmle.label | call to source | | summaries.rb:166:20:166:36 | call to source | semmle.label | call to source | subpaths +| summaries.rb:4:24:4:30 | tainted | summaries.rb:4:36:4:36 | x | summaries.rb:6:3:6:3 | x | summaries.rb:4:12:7:3 | call to apply_block | +| summaries.rb:4:24:4:30 | tainted | summaries.rb:4:36:4:36 | x | summaries.rb:6:3:6:3 | x | summaries.rb:4:12:7:3 | call to apply_block | +| summaries.rb:16:36:16:42 | tainted | summaries.rb:11:17:11:17 | x | summaries.rb:13:3:13:3 | x | summaries.rb:16:12:16:43 | call to apply_lambda | +| summaries.rb:16:36:16:42 | tainted | summaries.rb:11:17:11:17 | x | summaries.rb:13:3:13:3 | x | summaries.rb:16:12:16:43 | call to apply_lambda | invalidSpecComponent #select | summaries.rb:2:6:2:12 | tainted | summaries.rb:1:20:1:36 | call to source | summaries.rb:2:6:2:12 | tainted | $@ | summaries.rb:1:20:1:36 | call to source | call to source | diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/ActionController.expected b/ruby/ql/test/library-tests/frameworks/action_controller/ActionController.expected index 9276cc0b350..9af92b159cd 100644 --- a/ruby/ql/test/library-tests/frameworks/action_controller/ActionController.expected +++ b/ruby/ql/test/library-tests/frameworks/action_controller/ActionController.expected @@ -14,6 +14,7 @@ actionControllerControllerClasses | input_access.rb:1:1:58:3 | UsersController | | params_flow.rb:1:1:162:3 | MyController | | params_flow.rb:170:1:178:3 | Subclass | +| params_flow.rb:180:1:207:3 | UploadedFileTests | actionControllerActionMethods | app/controllers/comments_controller.rb:17:3:51:5 | index | | app/controllers/comments_controller.rb:53:3:54:5 | create | @@ -86,6 +87,12 @@ actionControllerActionMethods | params_flow.rb:152:3:159:5 | m33 | | params_flow.rb:165:3:167:5 | m34 | | params_flow.rb:171:3:173:5 | m35 | +| params_flow.rb:181:3:183:5 | m36 | +| params_flow.rb:185:3:187:5 | m37 | +| params_flow.rb:189:3:191:5 | m38 | +| params_flow.rb:193:3:195:5 | m39 | +| params_flow.rb:197:3:200:5 | m40 | +| params_flow.rb:202:3:206:5 | m41 | paramsCalls | app/controllers/comments_controller.rb:80:36:80:41 | call to params | | app/controllers/foo/bars_controller.rb:13:21:13:26 | call to params | @@ -146,6 +153,12 @@ paramsCalls | params_flow.rb:166:10:166:15 | call to params | | params_flow.rb:172:10:172:15 | call to params | | params_flow.rb:176:10:176:15 | call to params | +| params_flow.rb:182:10:182:15 | call to params | +| params_flow.rb:186:10:186:15 | call to params | +| params_flow.rb:190:10:190:15 | call to params | +| params_flow.rb:194:10:194:15 | call to params | +| params_flow.rb:198:5:198:10 | call to params | +| params_flow.rb:204:5:204:10 | call to params | paramsSources | app/controllers/comments_controller.rb:80:36:80:41 | call to params | | app/controllers/foo/bars_controller.rb:13:21:13:26 | call to params | @@ -206,6 +219,12 @@ paramsSources | params_flow.rb:166:10:166:15 | call to params | | params_flow.rb:172:10:172:15 | call to params | | params_flow.rb:176:10:176:15 | call to params | +| params_flow.rb:182:10:182:15 | call to params | +| params_flow.rb:186:10:186:15 | call to params | +| params_flow.rb:190:10:190:15 | call to params | +| params_flow.rb:194:10:194:15 | call to params | +| params_flow.rb:198:5:198:10 | call to params | +| params_flow.rb:204:5:204:10 | call to params | httpInputAccesses | app/controllers/application_controller.rb:11:53:11:64 | call to path | ActionDispatch::Request#path | | app/controllers/comments_controller.rb:18:5:18:18 | call to params | ActionDispatch::Request#params | @@ -324,6 +343,12 @@ httpInputAccesses | params_flow.rb:166:10:166:15 | call to params | ActionController::Metal#params | | params_flow.rb:172:10:172:15 | call to params | ActionController::Metal#params | | params_flow.rb:176:10:176:15 | call to params | ActionController::Metal#params | +| params_flow.rb:182:10:182:15 | call to params | ActionController::Metal#params | +| params_flow.rb:186:10:186:15 | call to params | ActionController::Metal#params | +| params_flow.rb:190:10:190:15 | call to params | ActionController::Metal#params | +| params_flow.rb:194:10:194:15 | call to params | ActionController::Metal#params | +| params_flow.rb:198:5:198:10 | call to params | ActionController::Metal#params | +| params_flow.rb:204:5:204:10 | call to params | ActionController::Metal#params | cookiesCalls | app/controllers/foo/bars_controller.rb:10:27:10:33 | call to cookies | cookiesSources diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/params-flow.expected b/ruby/ql/test/library-tests/frameworks/action_controller/params-flow.expected index 69946539384..51eb4d1d95c 100644 --- a/ruby/ql/test/library-tests/frameworks/action_controller/params-flow.expected +++ b/ruby/ql/test/library-tests/frameworks/action_controller/params-flow.expected @@ -101,6 +101,24 @@ edges | params_flow.rb:166:10:166:15 | call to params | params_flow.rb:166:10:166:19 | ...[...] | provenance | | | params_flow.rb:172:10:172:15 | call to params | params_flow.rb:172:10:172:19 | ...[...] | provenance | | | params_flow.rb:176:10:176:15 | call to params | params_flow.rb:176:10:176:19 | ...[...] | provenance | | +| params_flow.rb:182:10:182:15 | call to params | params_flow.rb:182:10:182:22 | ...[...] | provenance | | +| params_flow.rb:182:10:182:22 | ...[...] | params_flow.rb:182:10:182:40 | call to original_filename | provenance | | +| params_flow.rb:186:10:186:15 | call to params | params_flow.rb:186:10:186:30 | call to require | provenance | | +| params_flow.rb:186:10:186:30 | call to require | params_flow.rb:186:10:186:43 | call to content_type | provenance | | +| params_flow.rb:190:10:190:15 | call to params | params_flow.rb:190:10:190:29 | call to permit | provenance | | +| params_flow.rb:190:10:190:29 | call to permit | params_flow.rb:190:10:190:36 | ...[...] | provenance | | +| params_flow.rb:190:10:190:36 | ...[...] | params_flow.rb:190:10:190:44 | call to headers | provenance | | +| params_flow.rb:194:10:194:15 | call to params | params_flow.rb:194:10:194:19 | ...[...] | provenance | | +| params_flow.rb:194:10:194:19 | ...[...] | params_flow.rb:194:10:194:31 | call to to_unsafe_h | provenance | | +| params_flow.rb:194:10:194:31 | call to to_unsafe_h | params_flow.rb:194:10:194:35 | ...[...] | provenance | | +| params_flow.rb:194:10:194:35 | ...[...] | params_flow.rb:194:10:194:42 | ...[...] | provenance | | +| params_flow.rb:194:10:194:42 | ...[...] | params_flow.rb:194:10:194:47 | call to read | provenance | | +| params_flow.rb:198:5:198:10 | call to params | params_flow.rb:198:5:198:17 | ...[...] | provenance | | +| params_flow.rb:198:5:198:17 | ...[...] | params_flow.rb:198:28:198:28 | [post] a | provenance | | +| params_flow.rb:198:28:198:28 | [post] a | params_flow.rb:199:10:199:10 | a | provenance | | +| params_flow.rb:204:5:204:10 | call to params | params_flow.rb:204:5:204:17 | ...[...] | provenance | | +| params_flow.rb:204:5:204:17 | ...[...] | params_flow.rb:204:28:204:28 | [post] a | provenance | | +| params_flow.rb:204:28:204:28 | [post] a | params_flow.rb:205:10:205:10 | a | provenance | | nodes | filter_flow.rb:14:5:14:8 | [post] self [@foo] | semmle.label | [post] self [@foo] | | filter_flow.rb:14:12:14:17 | call to params | semmle.label | call to params | @@ -244,6 +262,30 @@ nodes | params_flow.rb:172:10:172:19 | ...[...] | semmle.label | ...[...] | | params_flow.rb:176:10:176:15 | call to params | semmle.label | call to params | | params_flow.rb:176:10:176:19 | ...[...] | semmle.label | ...[...] | +| params_flow.rb:182:10:182:15 | call to params | semmle.label | call to params | +| params_flow.rb:182:10:182:22 | ...[...] | semmle.label | ...[...] | +| params_flow.rb:182:10:182:40 | call to original_filename | semmle.label | call to original_filename | +| params_flow.rb:186:10:186:15 | call to params | semmle.label | call to params | +| params_flow.rb:186:10:186:30 | call to require | semmle.label | call to require | +| params_flow.rb:186:10:186:43 | call to content_type | semmle.label | call to content_type | +| params_flow.rb:190:10:190:15 | call to params | semmle.label | call to params | +| params_flow.rb:190:10:190:29 | call to permit | semmle.label | call to permit | +| params_flow.rb:190:10:190:36 | ...[...] | semmle.label | ...[...] | +| params_flow.rb:190:10:190:44 | call to headers | semmle.label | call to headers | +| params_flow.rb:194:10:194:15 | call to params | semmle.label | call to params | +| params_flow.rb:194:10:194:19 | ...[...] | semmle.label | ...[...] | +| params_flow.rb:194:10:194:31 | call to to_unsafe_h | semmle.label | call to to_unsafe_h | +| params_flow.rb:194:10:194:35 | ...[...] | semmle.label | ...[...] | +| params_flow.rb:194:10:194:42 | ...[...] | semmle.label | ...[...] | +| params_flow.rb:194:10:194:47 | call to read | semmle.label | call to read | +| params_flow.rb:198:5:198:10 | call to params | semmle.label | call to params | +| params_flow.rb:198:5:198:17 | ...[...] | semmle.label | ...[...] | +| params_flow.rb:198:28:198:28 | [post] a | semmle.label | [post] a | +| params_flow.rb:199:10:199:10 | a | semmle.label | a | +| params_flow.rb:204:5:204:10 | call to params | semmle.label | call to params | +| params_flow.rb:204:5:204:17 | ...[...] | semmle.label | ...[...] | +| params_flow.rb:204:28:204:28 | [post] a | semmle.label | [post] a | +| params_flow.rb:205:10:205:10 | a | semmle.label | a | subpaths #select | filter_flow.rb:21:10:21:13 | @foo | filter_flow.rb:14:12:14:17 | call to params | filter_flow.rb:21:10:21:13 | @foo | $@ | filter_flow.rb:14:12:14:17 | call to params | call to params | @@ -298,3 +340,9 @@ subpaths | params_flow.rb:166:10:166:19 | ...[...] | params_flow.rb:166:10:166:15 | call to params | params_flow.rb:166:10:166:19 | ...[...] | $@ | params_flow.rb:166:10:166:15 | call to params | call to params | | params_flow.rb:172:10:172:19 | ...[...] | params_flow.rb:172:10:172:15 | call to params | params_flow.rb:172:10:172:19 | ...[...] | $@ | params_flow.rb:172:10:172:15 | call to params | call to params | | params_flow.rb:176:10:176:19 | ...[...] | params_flow.rb:176:10:176:15 | call to params | params_flow.rb:176:10:176:19 | ...[...] | $@ | params_flow.rb:176:10:176:15 | call to params | call to params | +| params_flow.rb:182:10:182:40 | call to original_filename | params_flow.rb:182:10:182:15 | call to params | params_flow.rb:182:10:182:40 | call to original_filename | $@ | params_flow.rb:182:10:182:15 | call to params | call to params | +| params_flow.rb:186:10:186:43 | call to content_type | params_flow.rb:186:10:186:15 | call to params | params_flow.rb:186:10:186:43 | call to content_type | $@ | params_flow.rb:186:10:186:15 | call to params | call to params | +| params_flow.rb:190:10:190:44 | call to headers | params_flow.rb:190:10:190:15 | call to params | params_flow.rb:190:10:190:44 | call to headers | $@ | params_flow.rb:190:10:190:15 | call to params | call to params | +| params_flow.rb:194:10:194:47 | call to read | params_flow.rb:194:10:194:15 | call to params | params_flow.rb:194:10:194:47 | call to read | $@ | params_flow.rb:194:10:194:15 | call to params | call to params | +| params_flow.rb:199:10:199:10 | a | params_flow.rb:198:5:198:10 | call to params | params_flow.rb:199:10:199:10 | a | $@ | params_flow.rb:198:5:198:10 | call to params | call to params | +| params_flow.rb:205:10:205:10 | a | params_flow.rb:204:5:204:10 | call to params | params_flow.rb:205:10:205:10 | a | $@ | params_flow.rb:204:5:204:10 | call to params | call to params | diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/params_flow.rb b/ruby/ql/test/library-tests/frameworks/action_controller/params_flow.rb index 65aba8fabf2..ece3b551556 100644 --- a/ruby/ql/test/library-tests/frameworks/action_controller/params_flow.rb +++ b/ruby/ql/test/library-tests/frameworks/action_controller/params_flow.rb @@ -176,3 +176,32 @@ class Subclass < MyController sink params[:x] # $hasTaintFlow end end + +class UploadedFileTests < MyController + def m36 + sink params[:file].original_filename # $hasTaintFlow + end + + def m37 + sink params.require(:file).content_type # $hasTaintFlow + end + + def m38 + sink params.permit(:file)[:file].headers # $hasTaintFlow + end + + def m39 + sink params[:a].to_unsafe_h[:b][:file].read # $hasTaintFlow + end + + def m40(a) + params[:file].read(nil,a) + sink a # $ hasTaintFlow + end + + def m41 + a = "" + params[:file].read(nil,a) + sink a # $ hasTaintFlow + end +end \ No newline at end of file diff --git a/ruby/ql/test/library-tests/frameworks/active_support/ActiveSupportDataFlow.expected b/ruby/ql/test/library-tests/frameworks/active_support/ActiveSupportDataFlow.expected index 4eadde7fa54..c6c8b9744bd 100644 --- a/ruby/ql/test/library-tests/frameworks/active_support/ActiveSupportDataFlow.expected +++ b/ruby/ql/test/library-tests/frameworks/active_support/ActiveSupportDataFlow.expected @@ -2,32 +2,37 @@ testFailures | hash_extensions.rb:126:10:126:19 | call to sole | Unexpected result: hasValueFlow=b | edges | active_support.rb:180:5:180:5 | x [element 0] | active_support.rb:181:9:181:9 | x [element 0] | provenance | | -| active_support.rb:180:10:180:17 | call to source | active_support.rb:180:5:180:5 | x [element 0] | provenance | | +| active_support.rb:180:9:180:18 | call to [] [element 0] | active_support.rb:180:5:180:5 | x [element 0] | provenance | | +| active_support.rb:180:10:180:17 | call to source | active_support.rb:180:9:180:18 | call to [] [element 0] | provenance | | | active_support.rb:181:5:181:5 | y [element] | active_support.rb:182:10:182:10 | y [element] | provenance | | | active_support.rb:181:9:181:9 | x [element 0] | active_support.rb:181:9:181:23 | call to compact_blank [element] | provenance | | | active_support.rb:181:9:181:23 | call to compact_blank [element] | active_support.rb:181:5:181:5 | y [element] | provenance | | | active_support.rb:182:10:182:10 | y [element] | active_support.rb:182:10:182:13 | ...[...] | provenance | | | active_support.rb:186:5:186:5 | x [element 0] | active_support.rb:187:9:187:9 | x [element 0] | provenance | | -| active_support.rb:186:10:186:18 | call to source | active_support.rb:186:5:186:5 | x [element 0] | provenance | | +| active_support.rb:186:9:186:22 | call to [] [element 0] | active_support.rb:186:5:186:5 | x [element 0] | provenance | | +| active_support.rb:186:10:186:18 | call to source | active_support.rb:186:9:186:22 | call to [] [element 0] | provenance | | | active_support.rb:187:5:187:5 | y [element] | active_support.rb:188:10:188:10 | y [element] | provenance | | | active_support.rb:187:9:187:9 | x [element 0] | active_support.rb:187:9:187:21 | call to excluding [element] | provenance | | | active_support.rb:187:9:187:21 | call to excluding [element] | active_support.rb:187:5:187:5 | y [element] | provenance | | | active_support.rb:188:10:188:10 | y [element] | active_support.rb:188:10:188:13 | ...[...] | provenance | | | active_support.rb:192:5:192:5 | x [element 0] | active_support.rb:193:9:193:9 | x [element 0] | provenance | | -| active_support.rb:192:10:192:18 | call to source | active_support.rb:192:5:192:5 | x [element 0] | provenance | | +| active_support.rb:192:9:192:22 | call to [] [element 0] | active_support.rb:192:5:192:5 | x [element 0] | provenance | | +| active_support.rb:192:10:192:18 | call to source | active_support.rb:192:9:192:22 | call to [] [element 0] | provenance | | | active_support.rb:193:5:193:5 | y [element] | active_support.rb:194:10:194:10 | y [element] | provenance | | | active_support.rb:193:9:193:9 | x [element 0] | active_support.rb:193:9:193:19 | call to without [element] | provenance | | | active_support.rb:193:9:193:19 | call to without [element] | active_support.rb:193:5:193:5 | y [element] | provenance | | | active_support.rb:194:10:194:10 | y [element] | active_support.rb:194:10:194:13 | ...[...] | provenance | | | active_support.rb:198:5:198:5 | x [element 0] | active_support.rb:199:9:199:9 | x [element 0] | provenance | | -| active_support.rb:198:10:198:18 | call to source | active_support.rb:198:5:198:5 | x [element 0] | provenance | | +| active_support.rb:198:9:198:22 | call to [] [element 0] | active_support.rb:198:5:198:5 | x [element 0] | provenance | | +| active_support.rb:198:10:198:18 | call to source | active_support.rb:198:9:198:22 | call to [] [element 0] | provenance | | | active_support.rb:199:5:199:5 | y [element] | active_support.rb:200:10:200:10 | y [element] | provenance | | | active_support.rb:199:9:199:9 | x [element 0] | active_support.rb:199:9:199:37 | call to in_order_of [element] | provenance | | | active_support.rb:199:9:199:37 | call to in_order_of [element] | active_support.rb:199:5:199:5 | y [element] | provenance | | | active_support.rb:200:10:200:10 | y [element] | active_support.rb:200:10:200:13 | ...[...] | provenance | | | active_support.rb:204:5:204:5 | a [element 0] | active_support.rb:205:9:205:9 | a [element 0] | provenance | | | active_support.rb:204:5:204:5 | a [element 0] | active_support.rb:206:10:206:10 | a [element 0] | provenance | | -| active_support.rb:204:10:204:18 | call to source | active_support.rb:204:5:204:5 | a [element 0] | provenance | | +| active_support.rb:204:9:204:22 | call to [] [element 0] | active_support.rb:204:5:204:5 | a [element 0] | provenance | | +| active_support.rb:204:10:204:18 | call to source | active_support.rb:204:9:204:22 | call to [] [element 0] | provenance | | | active_support.rb:205:5:205:5 | b [element 0] | active_support.rb:208:10:208:10 | b [element 0] | provenance | | | active_support.rb:205:5:205:5 | b [element] | active_support.rb:208:10:208:10 | b [element] | provenance | | | active_support.rb:205:5:205:5 | b [element] | active_support.rb:209:10:209:10 | b [element] | provenance | | @@ -54,37 +59,43 @@ edges | active_support.rb:290:7:290:16 | call to source | active_support.rb:290:3:290:3 | x | provenance | | | active_support.rb:291:8:291:8 | x | active_support.rb:291:8:291:17 | call to deep_dup | provenance | | | hash_extensions.rb:2:5:2:5 | h [element :a] | hash_extensions.rb:3:9:3:9 | h [element :a] | provenance | | -| hash_extensions.rb:2:14:2:24 | call to source | hash_extensions.rb:2:5:2:5 | h [element :a] | provenance | | +| hash_extensions.rb:2:9:2:26 | call to [] [element :a] | hash_extensions.rb:2:5:2:5 | h [element :a] | provenance | | +| hash_extensions.rb:2:14:2:24 | call to source | hash_extensions.rb:2:9:2:26 | call to [] [element :a] | provenance | | | hash_extensions.rb:3:5:3:5 | x [element] | hash_extensions.rb:4:10:4:10 | x [element] | provenance | | | hash_extensions.rb:3:9:3:9 | h [element :a] | hash_extensions.rb:3:9:3:24 | call to stringify_keys [element] | provenance | | | hash_extensions.rb:3:9:3:24 | call to stringify_keys [element] | hash_extensions.rb:3:5:3:5 | x [element] | provenance | | | hash_extensions.rb:4:10:4:10 | x [element] | hash_extensions.rb:4:10:4:14 | ...[...] | provenance | | | hash_extensions.rb:10:5:10:5 | h [element :a] | hash_extensions.rb:11:9:11:9 | h [element :a] | provenance | | -| hash_extensions.rb:10:14:10:24 | call to source | hash_extensions.rb:10:5:10:5 | h [element :a] | provenance | | +| hash_extensions.rb:10:9:10:26 | call to [] [element :a] | hash_extensions.rb:10:5:10:5 | h [element :a] | provenance | | +| hash_extensions.rb:10:14:10:24 | call to source | hash_extensions.rb:10:9:10:26 | call to [] [element :a] | provenance | | | hash_extensions.rb:11:5:11:5 | x [element] | hash_extensions.rb:12:10:12:10 | x [element] | provenance | | | hash_extensions.rb:11:9:11:9 | h [element :a] | hash_extensions.rb:11:9:11:20 | call to to_options [element] | provenance | | | hash_extensions.rb:11:9:11:20 | call to to_options [element] | hash_extensions.rb:11:5:11:5 | x [element] | provenance | | | hash_extensions.rb:12:10:12:10 | x [element] | hash_extensions.rb:12:10:12:14 | ...[...] | provenance | | | hash_extensions.rb:18:5:18:5 | h [element :a] | hash_extensions.rb:19:9:19:9 | h [element :a] | provenance | | -| hash_extensions.rb:18:14:18:24 | call to source | hash_extensions.rb:18:5:18:5 | h [element :a] | provenance | | +| hash_extensions.rb:18:9:18:26 | call to [] [element :a] | hash_extensions.rb:18:5:18:5 | h [element :a] | provenance | | +| hash_extensions.rb:18:14:18:24 | call to source | hash_extensions.rb:18:9:18:26 | call to [] [element :a] | provenance | | | hash_extensions.rb:19:5:19:5 | x [element] | hash_extensions.rb:20:10:20:10 | x [element] | provenance | | | hash_extensions.rb:19:9:19:9 | h [element :a] | hash_extensions.rb:19:9:19:24 | call to symbolize_keys [element] | provenance | | | hash_extensions.rb:19:9:19:24 | call to symbolize_keys [element] | hash_extensions.rb:19:5:19:5 | x [element] | provenance | | | hash_extensions.rb:20:10:20:10 | x [element] | hash_extensions.rb:20:10:20:14 | ...[...] | provenance | | | hash_extensions.rb:26:5:26:5 | h [element :a] | hash_extensions.rb:27:9:27:9 | h [element :a] | provenance | | -| hash_extensions.rb:26:14:26:24 | call to source | hash_extensions.rb:26:5:26:5 | h [element :a] | provenance | | +| hash_extensions.rb:26:9:26:26 | call to [] [element :a] | hash_extensions.rb:26:5:26:5 | h [element :a] | provenance | | +| hash_extensions.rb:26:14:26:24 | call to source | hash_extensions.rb:26:9:26:26 | call to [] [element :a] | provenance | | | hash_extensions.rb:27:5:27:5 | x [element] | hash_extensions.rb:28:10:28:10 | x [element] | provenance | | | hash_extensions.rb:27:9:27:9 | h [element :a] | hash_extensions.rb:27:9:27:29 | call to deep_stringify_keys [element] | provenance | | | hash_extensions.rb:27:9:27:29 | call to deep_stringify_keys [element] | hash_extensions.rb:27:5:27:5 | x [element] | provenance | | | hash_extensions.rb:28:10:28:10 | x [element] | hash_extensions.rb:28:10:28:14 | ...[...] | provenance | | | hash_extensions.rb:34:5:34:5 | h [element :a] | hash_extensions.rb:35:9:35:9 | h [element :a] | provenance | | -| hash_extensions.rb:34:14:34:24 | call to source | hash_extensions.rb:34:5:34:5 | h [element :a] | provenance | | +| hash_extensions.rb:34:9:34:26 | call to [] [element :a] | hash_extensions.rb:34:5:34:5 | h [element :a] | provenance | | +| hash_extensions.rb:34:14:34:24 | call to source | hash_extensions.rb:34:9:34:26 | call to [] [element :a] | provenance | | | hash_extensions.rb:35:5:35:5 | x [element] | hash_extensions.rb:36:10:36:10 | x [element] | provenance | | | hash_extensions.rb:35:9:35:9 | h [element :a] | hash_extensions.rb:35:9:35:29 | call to deep_symbolize_keys [element] | provenance | | | hash_extensions.rb:35:9:35:29 | call to deep_symbolize_keys [element] | hash_extensions.rb:35:5:35:5 | x [element] | provenance | | | hash_extensions.rb:36:10:36:10 | x [element] | hash_extensions.rb:36:10:36:14 | ...[...] | provenance | | | hash_extensions.rb:42:5:42:5 | h [element :a] | hash_extensions.rb:43:9:43:9 | h [element :a] | provenance | | -| hash_extensions.rb:42:14:42:24 | call to source | hash_extensions.rb:42:5:42:5 | h [element :a] | provenance | | +| hash_extensions.rb:42:9:42:26 | call to [] [element :a] | hash_extensions.rb:42:5:42:5 | h [element :a] | provenance | | +| hash_extensions.rb:42:14:42:24 | call to source | hash_extensions.rb:42:9:42:26 | call to [] [element :a] | provenance | | | hash_extensions.rb:43:5:43:5 | x [element] | hash_extensions.rb:44:10:44:10 | x [element] | provenance | | | hash_extensions.rb:43:9:43:9 | h [element :a] | hash_extensions.rb:43:9:43:33 | call to with_indifferent_access [element] | provenance | | | hash_extensions.rb:43:9:43:33 | call to with_indifferent_access [element] | hash_extensions.rb:43:5:43:5 | x [element] | provenance | | @@ -92,9 +103,12 @@ edges | hash_extensions.rb:50:5:50:5 | h [element :a] | hash_extensions.rb:51:9:51:9 | h [element :a] | provenance | | | hash_extensions.rb:50:5:50:5 | h [element :b] | hash_extensions.rb:51:9:51:9 | h [element :b] | provenance | | | hash_extensions.rb:50:5:50:5 | h [element :d] | hash_extensions.rb:51:9:51:9 | h [element :d] | provenance | | -| hash_extensions.rb:50:14:50:23 | call to taint | hash_extensions.rb:50:5:50:5 | h [element :a] | provenance | | -| hash_extensions.rb:50:29:50:38 | call to taint | hash_extensions.rb:50:5:50:5 | h [element :b] | provenance | | -| hash_extensions.rb:50:52:50:61 | call to taint | hash_extensions.rb:50:5:50:5 | h [element :d] | provenance | | +| hash_extensions.rb:50:9:50:63 | call to [] [element :a] | hash_extensions.rb:50:5:50:5 | h [element :a] | provenance | | +| hash_extensions.rb:50:9:50:63 | call to [] [element :b] | hash_extensions.rb:50:5:50:5 | h [element :b] | provenance | | +| hash_extensions.rb:50:9:50:63 | call to [] [element :d] | hash_extensions.rb:50:5:50:5 | h [element :d] | provenance | | +| hash_extensions.rb:50:14:50:23 | call to taint | hash_extensions.rb:50:9:50:63 | call to [] [element :a] | provenance | | +| hash_extensions.rb:50:29:50:38 | call to taint | hash_extensions.rb:50:9:50:63 | call to [] [element :b] | provenance | | +| hash_extensions.rb:50:52:50:61 | call to taint | hash_extensions.rb:50:9:50:63 | call to [] [element :d] | provenance | | | hash_extensions.rb:51:5:51:5 | x [element :a] | hash_extensions.rb:58:10:58:10 | x [element :a] | provenance | | | hash_extensions.rb:51:5:51:5 | x [element :b] | hash_extensions.rb:59:10:59:10 | x [element :b] | provenance | | | hash_extensions.rb:51:9:51:9 | [post] h [element :d] | hash_extensions.rb:56:10:56:10 | h [element :d] | provenance | | @@ -109,9 +123,12 @@ edges | hash_extensions.rb:67:5:67:10 | values [element 0] | hash_extensions.rb:68:9:68:14 | values [element 0] | provenance | | | hash_extensions.rb:67:5:67:10 | values [element 1] | hash_extensions.rb:68:9:68:14 | values [element 1] | provenance | | | hash_extensions.rb:67:5:67:10 | values [element 2] | hash_extensions.rb:68:9:68:14 | values [element 2] | provenance | | -| hash_extensions.rb:67:15:67:25 | call to source | hash_extensions.rb:67:5:67:10 | values [element 0] | provenance | | -| hash_extensions.rb:67:28:67:38 | call to source | hash_extensions.rb:67:5:67:10 | values [element 1] | provenance | | -| hash_extensions.rb:67:41:67:51 | call to source | hash_extensions.rb:67:5:67:10 | values [element 2] | provenance | | +| hash_extensions.rb:67:14:67:52 | call to [] [element 0] | hash_extensions.rb:67:5:67:10 | values [element 0] | provenance | | +| hash_extensions.rb:67:14:67:52 | call to [] [element 1] | hash_extensions.rb:67:5:67:10 | values [element 1] | provenance | | +| hash_extensions.rb:67:14:67:52 | call to [] [element 2] | hash_extensions.rb:67:5:67:10 | values [element 2] | provenance | | +| hash_extensions.rb:67:15:67:25 | call to source | hash_extensions.rb:67:14:67:52 | call to [] [element 0] | provenance | | +| hash_extensions.rb:67:28:67:38 | call to source | hash_extensions.rb:67:14:67:52 | call to [] [element 1] | provenance | | +| hash_extensions.rb:67:41:67:51 | call to source | hash_extensions.rb:67:14:67:52 | call to [] [element 2] | provenance | | | hash_extensions.rb:68:5:68:5 | h [element] | hash_extensions.rb:73:10:73:10 | h [element] | provenance | | | hash_extensions.rb:68:5:68:5 | h [element] | hash_extensions.rb:74:10:74:10 | h [element] | provenance | | | hash_extensions.rb:68:9:68:14 | values [element 0] | hash_extensions.rb:68:9:71:7 | call to index_by [element] | provenance | | @@ -127,9 +144,12 @@ edges | hash_extensions.rb:80:5:80:10 | values [element 0] | hash_extensions.rb:81:9:81:14 | values [element 0] | provenance | | | hash_extensions.rb:80:5:80:10 | values [element 1] | hash_extensions.rb:81:9:81:14 | values [element 1] | provenance | | | hash_extensions.rb:80:5:80:10 | values [element 2] | hash_extensions.rb:81:9:81:14 | values [element 2] | provenance | | -| hash_extensions.rb:80:15:80:25 | call to source | hash_extensions.rb:80:5:80:10 | values [element 0] | provenance | | -| hash_extensions.rb:80:28:80:38 | call to source | hash_extensions.rb:80:5:80:10 | values [element 1] | provenance | | -| hash_extensions.rb:80:41:80:51 | call to source | hash_extensions.rb:80:5:80:10 | values [element 2] | provenance | | +| hash_extensions.rb:80:14:80:52 | call to [] [element 0] | hash_extensions.rb:80:5:80:10 | values [element 0] | provenance | | +| hash_extensions.rb:80:14:80:52 | call to [] [element 1] | hash_extensions.rb:80:5:80:10 | values [element 1] | provenance | | +| hash_extensions.rb:80:14:80:52 | call to [] [element 2] | hash_extensions.rb:80:5:80:10 | values [element 2] | provenance | | +| hash_extensions.rb:80:15:80:25 | call to source | hash_extensions.rb:80:14:80:52 | call to [] [element 0] | provenance | | +| hash_extensions.rb:80:28:80:38 | call to source | hash_extensions.rb:80:14:80:52 | call to [] [element 1] | provenance | | +| hash_extensions.rb:80:41:80:51 | call to source | hash_extensions.rb:80:14:80:52 | call to [] [element 2] | provenance | | | hash_extensions.rb:81:5:81:5 | h [element] | hash_extensions.rb:86:10:86:10 | h [element] | provenance | | | hash_extensions.rb:81:5:81:5 | h [element] | hash_extensions.rb:87:10:87:10 | h [element] | provenance | | | hash_extensions.rb:81:9:81:14 | values [element 0] | hash_extensions.rb:81:31:81:33 | key | provenance | | @@ -152,8 +172,12 @@ edges | hash_extensions.rb:98:5:98:10 | values [element 0, element :name] | hash_extensions.rb:100:10:100:15 | values [element 0, element :name] | provenance | | | hash_extensions.rb:98:5:98:10 | values [element 0, element :name] | hash_extensions.rb:102:10:102:15 | values [element 0, element :name] | provenance | | | hash_extensions.rb:98:5:98:10 | values [element 0, element :name] | hash_extensions.rb:103:10:103:15 | values [element 0, element :name] | provenance | | -| hash_extensions.rb:98:21:98:31 | call to source | hash_extensions.rb:98:5:98:10 | values [element 0, element :id] | provenance | | -| hash_extensions.rb:98:40:98:54 | call to source | hash_extensions.rb:98:5:98:10 | values [element 0, element :name] | provenance | | +| hash_extensions.rb:98:14:98:102 | call to [] [element 0, element :id] | hash_extensions.rb:98:5:98:10 | values [element 0, element :id] | provenance | | +| hash_extensions.rb:98:14:98:102 | call to [] [element 0, element :name] | hash_extensions.rb:98:5:98:10 | values [element 0, element :name] | provenance | | +| hash_extensions.rb:98:15:98:56 | call to [] [element :id] | hash_extensions.rb:98:14:98:102 | call to [] [element 0, element :id] | provenance | | +| hash_extensions.rb:98:15:98:56 | call to [] [element :name] | hash_extensions.rb:98:14:98:102 | call to [] [element 0, element :name] | provenance | | +| hash_extensions.rb:98:21:98:31 | call to source | hash_extensions.rb:98:15:98:56 | call to [] [element :id] | provenance | | +| hash_extensions.rb:98:40:98:54 | call to source | hash_extensions.rb:98:15:98:56 | call to [] [element :name] | provenance | | | hash_extensions.rb:99:10:99:15 | values [element 0, element :id] | hash_extensions.rb:99:10:99:25 | call to pick | provenance | | | hash_extensions.rb:100:10:100:15 | values [element 0, element :name] | hash_extensions.rb:100:10:100:27 | call to pick | provenance | | | hash_extensions.rb:101:10:101:15 | values [element 0, element :id] | hash_extensions.rb:101:10:101:32 | call to pick [element 0] | provenance | | @@ -174,10 +198,18 @@ edges | hash_extensions.rb:110:5:110:10 | values [element 1, element :name] | hash_extensions.rb:111:10:111:15 | values [element 1, element :name] | provenance | | | hash_extensions.rb:110:5:110:10 | values [element 1, element :name] | hash_extensions.rb:113:10:113:15 | values [element 1, element :name] | provenance | | | hash_extensions.rb:110:5:110:10 | values [element 1, element :name] | hash_extensions.rb:114:10:114:15 | values [element 1, element :name] | provenance | | -| hash_extensions.rb:110:21:110:31 | call to source | hash_extensions.rb:110:5:110:10 | values [element 0, element :id] | provenance | | -| hash_extensions.rb:110:40:110:54 | call to source | hash_extensions.rb:110:5:110:10 | values [element 0, element :name] | provenance | | -| hash_extensions.rb:110:65:110:75 | call to source | hash_extensions.rb:110:5:110:10 | values [element 1, element :id] | provenance | | -| hash_extensions.rb:110:84:110:99 | call to source | hash_extensions.rb:110:5:110:10 | values [element 1, element :name] | provenance | | +| hash_extensions.rb:110:14:110:102 | call to [] [element 0, element :id] | hash_extensions.rb:110:5:110:10 | values [element 0, element :id] | provenance | | +| hash_extensions.rb:110:14:110:102 | call to [] [element 0, element :name] | hash_extensions.rb:110:5:110:10 | values [element 0, element :name] | provenance | | +| hash_extensions.rb:110:14:110:102 | call to [] [element 1, element :id] | hash_extensions.rb:110:5:110:10 | values [element 1, element :id] | provenance | | +| hash_extensions.rb:110:14:110:102 | call to [] [element 1, element :name] | hash_extensions.rb:110:5:110:10 | values [element 1, element :name] | provenance | | +| hash_extensions.rb:110:15:110:56 | call to [] [element :id] | hash_extensions.rb:110:14:110:102 | call to [] [element 0, element :id] | provenance | | +| hash_extensions.rb:110:15:110:56 | call to [] [element :name] | hash_extensions.rb:110:14:110:102 | call to [] [element 0, element :name] | provenance | | +| hash_extensions.rb:110:21:110:31 | call to source | hash_extensions.rb:110:15:110:56 | call to [] [element :id] | provenance | | +| hash_extensions.rb:110:40:110:54 | call to source | hash_extensions.rb:110:15:110:56 | call to [] [element :name] | provenance | | +| hash_extensions.rb:110:59:110:101 | call to [] [element :id] | hash_extensions.rb:110:14:110:102 | call to [] [element 1, element :id] | provenance | | +| hash_extensions.rb:110:59:110:101 | call to [] [element :name] | hash_extensions.rb:110:14:110:102 | call to [] [element 1, element :name] | provenance | | +| hash_extensions.rb:110:65:110:75 | call to source | hash_extensions.rb:110:59:110:101 | call to [] [element :id] | provenance | | +| hash_extensions.rb:110:84:110:99 | call to source | hash_extensions.rb:110:59:110:101 | call to [] [element :name] | provenance | | | hash_extensions.rb:111:10:111:15 | values [element 0, element :name] | hash_extensions.rb:111:10:111:28 | call to pluck [element] | provenance | | | hash_extensions.rb:111:10:111:15 | values [element 1, element :name] | hash_extensions.rb:111:10:111:28 | call to pluck [element] | provenance | | | hash_extensions.rb:111:10:111:28 | call to pluck [element] | hash_extensions.rb:111:10:111:31 | ...[...] | provenance | | @@ -198,13 +230,16 @@ edges | hash_extensions.rb:115:10:115:33 | call to pluck [element, element 1] | hash_extensions.rb:115:10:115:36 | ...[...] [element 1] | provenance | | | hash_extensions.rb:115:10:115:36 | ...[...] [element 1] | hash_extensions.rb:115:10:115:39 | ...[...] | provenance | | | hash_extensions.rb:122:5:122:10 | single [element 0] | hash_extensions.rb:125:10:125:15 | single [element 0] | provenance | | -| hash_extensions.rb:122:15:122:25 | call to source | hash_extensions.rb:122:5:122:10 | single [element 0] | provenance | | +| hash_extensions.rb:122:14:122:26 | call to [] [element 0] | hash_extensions.rb:122:5:122:10 | single [element 0] | provenance | | +| hash_extensions.rb:122:15:122:25 | call to source | hash_extensions.rb:122:14:122:26 | call to [] [element 0] | provenance | | | hash_extensions.rb:123:5:123:9 | multi [element 0] | hash_extensions.rb:126:10:126:14 | multi [element 0] | provenance | | -| hash_extensions.rb:123:14:123:24 | call to source | hash_extensions.rb:123:5:123:9 | multi [element 0] | provenance | | +| hash_extensions.rb:123:13:123:38 | call to [] [element 0] | hash_extensions.rb:123:5:123:9 | multi [element 0] | provenance | | +| hash_extensions.rb:123:14:123:24 | call to source | hash_extensions.rb:123:13:123:38 | call to [] [element 0] | provenance | | | hash_extensions.rb:125:10:125:15 | single [element 0] | hash_extensions.rb:125:10:125:20 | call to sole | provenance | | | hash_extensions.rb:126:10:126:14 | multi [element 0] | hash_extensions.rb:126:10:126:19 | call to sole | provenance | | nodes | active_support.rb:180:5:180:5 | x [element 0] | semmle.label | x [element 0] | +| active_support.rb:180:9:180:18 | call to [] [element 0] | semmle.label | call to [] [element 0] | | active_support.rb:180:10:180:17 | call to source | semmle.label | call to source | | active_support.rb:181:5:181:5 | y [element] | semmle.label | y [element] | | active_support.rb:181:9:181:9 | x [element 0] | semmle.label | x [element 0] | @@ -212,6 +247,7 @@ nodes | active_support.rb:182:10:182:10 | y [element] | semmle.label | y [element] | | active_support.rb:182:10:182:13 | ...[...] | semmle.label | ...[...] | | active_support.rb:186:5:186:5 | x [element 0] | semmle.label | x [element 0] | +| active_support.rb:186:9:186:22 | call to [] [element 0] | semmle.label | call to [] [element 0] | | active_support.rb:186:10:186:18 | call to source | semmle.label | call to source | | active_support.rb:187:5:187:5 | y [element] | semmle.label | y [element] | | active_support.rb:187:9:187:9 | x [element 0] | semmle.label | x [element 0] | @@ -219,6 +255,7 @@ nodes | active_support.rb:188:10:188:10 | y [element] | semmle.label | y [element] | | active_support.rb:188:10:188:13 | ...[...] | semmle.label | ...[...] | | active_support.rb:192:5:192:5 | x [element 0] | semmle.label | x [element 0] | +| active_support.rb:192:9:192:22 | call to [] [element 0] | semmle.label | call to [] [element 0] | | active_support.rb:192:10:192:18 | call to source | semmle.label | call to source | | active_support.rb:193:5:193:5 | y [element] | semmle.label | y [element] | | active_support.rb:193:9:193:9 | x [element 0] | semmle.label | x [element 0] | @@ -226,6 +263,7 @@ nodes | active_support.rb:194:10:194:10 | y [element] | semmle.label | y [element] | | active_support.rb:194:10:194:13 | ...[...] | semmle.label | ...[...] | | active_support.rb:198:5:198:5 | x [element 0] | semmle.label | x [element 0] | +| active_support.rb:198:9:198:22 | call to [] [element 0] | semmle.label | call to [] [element 0] | | active_support.rb:198:10:198:18 | call to source | semmle.label | call to source | | active_support.rb:199:5:199:5 | y [element] | semmle.label | y [element] | | active_support.rb:199:9:199:9 | x [element 0] | semmle.label | x [element 0] | @@ -233,6 +271,7 @@ nodes | active_support.rb:200:10:200:10 | y [element] | semmle.label | y [element] | | active_support.rb:200:10:200:13 | ...[...] | semmle.label | ...[...] | | active_support.rb:204:5:204:5 | a [element 0] | semmle.label | a [element 0] | +| active_support.rb:204:9:204:22 | call to [] [element 0] | semmle.label | call to [] [element 0] | | active_support.rb:204:10:204:18 | call to source | semmle.label | call to source | | active_support.rb:205:5:205:5 | b [element 0] | semmle.label | b [element 0] | | active_support.rb:205:5:205:5 | b [element] | semmle.label | b [element] | @@ -265,6 +304,7 @@ nodes | active_support.rb:291:8:291:8 | x | semmle.label | x | | active_support.rb:291:8:291:17 | call to deep_dup | semmle.label | call to deep_dup | | hash_extensions.rb:2:5:2:5 | h [element :a] | semmle.label | h [element :a] | +| hash_extensions.rb:2:9:2:26 | call to [] [element :a] | semmle.label | call to [] [element :a] | | hash_extensions.rb:2:14:2:24 | call to source | semmle.label | call to source | | hash_extensions.rb:3:5:3:5 | x [element] | semmle.label | x [element] | | hash_extensions.rb:3:9:3:9 | h [element :a] | semmle.label | h [element :a] | @@ -272,6 +312,7 @@ nodes | hash_extensions.rb:4:10:4:10 | x [element] | semmle.label | x [element] | | hash_extensions.rb:4:10:4:14 | ...[...] | semmle.label | ...[...] | | hash_extensions.rb:10:5:10:5 | h [element :a] | semmle.label | h [element :a] | +| hash_extensions.rb:10:9:10:26 | call to [] [element :a] | semmle.label | call to [] [element :a] | | hash_extensions.rb:10:14:10:24 | call to source | semmle.label | call to source | | hash_extensions.rb:11:5:11:5 | x [element] | semmle.label | x [element] | | hash_extensions.rb:11:9:11:9 | h [element :a] | semmle.label | h [element :a] | @@ -279,6 +320,7 @@ nodes | hash_extensions.rb:12:10:12:10 | x [element] | semmle.label | x [element] | | hash_extensions.rb:12:10:12:14 | ...[...] | semmle.label | ...[...] | | hash_extensions.rb:18:5:18:5 | h [element :a] | semmle.label | h [element :a] | +| hash_extensions.rb:18:9:18:26 | call to [] [element :a] | semmle.label | call to [] [element :a] | | hash_extensions.rb:18:14:18:24 | call to source | semmle.label | call to source | | hash_extensions.rb:19:5:19:5 | x [element] | semmle.label | x [element] | | hash_extensions.rb:19:9:19:9 | h [element :a] | semmle.label | h [element :a] | @@ -286,6 +328,7 @@ nodes | hash_extensions.rb:20:10:20:10 | x [element] | semmle.label | x [element] | | hash_extensions.rb:20:10:20:14 | ...[...] | semmle.label | ...[...] | | hash_extensions.rb:26:5:26:5 | h [element :a] | semmle.label | h [element :a] | +| hash_extensions.rb:26:9:26:26 | call to [] [element :a] | semmle.label | call to [] [element :a] | | hash_extensions.rb:26:14:26:24 | call to source | semmle.label | call to source | | hash_extensions.rb:27:5:27:5 | x [element] | semmle.label | x [element] | | hash_extensions.rb:27:9:27:9 | h [element :a] | semmle.label | h [element :a] | @@ -293,6 +336,7 @@ nodes | hash_extensions.rb:28:10:28:10 | x [element] | semmle.label | x [element] | | hash_extensions.rb:28:10:28:14 | ...[...] | semmle.label | ...[...] | | hash_extensions.rb:34:5:34:5 | h [element :a] | semmle.label | h [element :a] | +| hash_extensions.rb:34:9:34:26 | call to [] [element :a] | semmle.label | call to [] [element :a] | | hash_extensions.rb:34:14:34:24 | call to source | semmle.label | call to source | | hash_extensions.rb:35:5:35:5 | x [element] | semmle.label | x [element] | | hash_extensions.rb:35:9:35:9 | h [element :a] | semmle.label | h [element :a] | @@ -300,6 +344,7 @@ nodes | hash_extensions.rb:36:10:36:10 | x [element] | semmle.label | x [element] | | hash_extensions.rb:36:10:36:14 | ...[...] | semmle.label | ...[...] | | hash_extensions.rb:42:5:42:5 | h [element :a] | semmle.label | h [element :a] | +| hash_extensions.rb:42:9:42:26 | call to [] [element :a] | semmle.label | call to [] [element :a] | | hash_extensions.rb:42:14:42:24 | call to source | semmle.label | call to source | | hash_extensions.rb:43:5:43:5 | x [element] | semmle.label | x [element] | | hash_extensions.rb:43:9:43:9 | h [element :a] | semmle.label | h [element :a] | @@ -309,6 +354,9 @@ nodes | hash_extensions.rb:50:5:50:5 | h [element :a] | semmle.label | h [element :a] | | hash_extensions.rb:50:5:50:5 | h [element :b] | semmle.label | h [element :b] | | hash_extensions.rb:50:5:50:5 | h [element :d] | semmle.label | h [element :d] | +| hash_extensions.rb:50:9:50:63 | call to [] [element :a] | semmle.label | call to [] [element :a] | +| hash_extensions.rb:50:9:50:63 | call to [] [element :b] | semmle.label | call to [] [element :b] | +| hash_extensions.rb:50:9:50:63 | call to [] [element :d] | semmle.label | call to [] [element :d] | | hash_extensions.rb:50:14:50:23 | call to taint | semmle.label | call to taint | | hash_extensions.rb:50:29:50:38 | call to taint | semmle.label | call to taint | | hash_extensions.rb:50:52:50:61 | call to taint | semmle.label | call to taint | @@ -329,6 +377,9 @@ nodes | hash_extensions.rb:67:5:67:10 | values [element 0] | semmle.label | values [element 0] | | hash_extensions.rb:67:5:67:10 | values [element 1] | semmle.label | values [element 1] | | hash_extensions.rb:67:5:67:10 | values [element 2] | semmle.label | values [element 2] | +| hash_extensions.rb:67:14:67:52 | call to [] [element 0] | semmle.label | call to [] [element 0] | +| hash_extensions.rb:67:14:67:52 | call to [] [element 1] | semmle.label | call to [] [element 1] | +| hash_extensions.rb:67:14:67:52 | call to [] [element 2] | semmle.label | call to [] [element 2] | | hash_extensions.rb:67:15:67:25 | call to source | semmle.label | call to source | | hash_extensions.rb:67:28:67:38 | call to source | semmle.label | call to source | | hash_extensions.rb:67:41:67:51 | call to source | semmle.label | call to source | @@ -346,6 +397,9 @@ nodes | hash_extensions.rb:80:5:80:10 | values [element 0] | semmle.label | values [element 0] | | hash_extensions.rb:80:5:80:10 | values [element 1] | semmle.label | values [element 1] | | hash_extensions.rb:80:5:80:10 | values [element 2] | semmle.label | values [element 2] | +| hash_extensions.rb:80:14:80:52 | call to [] [element 0] | semmle.label | call to [] [element 0] | +| hash_extensions.rb:80:14:80:52 | call to [] [element 1] | semmle.label | call to [] [element 1] | +| hash_extensions.rb:80:14:80:52 | call to [] [element 2] | semmle.label | call to [] [element 2] | | hash_extensions.rb:80:15:80:25 | call to source | semmle.label | call to source | | hash_extensions.rb:80:28:80:38 | call to source | semmle.label | call to source | | hash_extensions.rb:80:41:80:51 | call to source | semmle.label | call to source | @@ -370,6 +424,10 @@ nodes | hash_extensions.rb:92:10:92:16 | ...[...] | semmle.label | ...[...] | | hash_extensions.rb:98:5:98:10 | values [element 0, element :id] | semmle.label | values [element 0, element :id] | | hash_extensions.rb:98:5:98:10 | values [element 0, element :name] | semmle.label | values [element 0, element :name] | +| hash_extensions.rb:98:14:98:102 | call to [] [element 0, element :id] | semmle.label | call to [] [element 0, element :id] | +| hash_extensions.rb:98:14:98:102 | call to [] [element 0, element :name] | semmle.label | call to [] [element 0, element :name] | +| hash_extensions.rb:98:15:98:56 | call to [] [element :id] | semmle.label | call to [] [element :id] | +| hash_extensions.rb:98:15:98:56 | call to [] [element :name] | semmle.label | call to [] [element :name] | | hash_extensions.rb:98:21:98:31 | call to source | semmle.label | call to source | | hash_extensions.rb:98:40:98:54 | call to source | semmle.label | call to source | | hash_extensions.rb:99:10:99:15 | values [element 0, element :id] | semmle.label | values [element 0, element :id] | @@ -392,8 +450,16 @@ nodes | hash_extensions.rb:110:5:110:10 | values [element 0, element :name] | semmle.label | values [element 0, element :name] | | hash_extensions.rb:110:5:110:10 | values [element 1, element :id] | semmle.label | values [element 1, element :id] | | hash_extensions.rb:110:5:110:10 | values [element 1, element :name] | semmle.label | values [element 1, element :name] | +| hash_extensions.rb:110:14:110:102 | call to [] [element 0, element :id] | semmle.label | call to [] [element 0, element :id] | +| hash_extensions.rb:110:14:110:102 | call to [] [element 0, element :name] | semmle.label | call to [] [element 0, element :name] | +| hash_extensions.rb:110:14:110:102 | call to [] [element 1, element :id] | semmle.label | call to [] [element 1, element :id] | +| hash_extensions.rb:110:14:110:102 | call to [] [element 1, element :name] | semmle.label | call to [] [element 1, element :name] | +| hash_extensions.rb:110:15:110:56 | call to [] [element :id] | semmle.label | call to [] [element :id] | +| hash_extensions.rb:110:15:110:56 | call to [] [element :name] | semmle.label | call to [] [element :name] | | hash_extensions.rb:110:21:110:31 | call to source | semmle.label | call to source | | hash_extensions.rb:110:40:110:54 | call to source | semmle.label | call to source | +| hash_extensions.rb:110:59:110:101 | call to [] [element :id] | semmle.label | call to [] [element :id] | +| hash_extensions.rb:110:59:110:101 | call to [] [element :name] | semmle.label | call to [] [element :name] | | hash_extensions.rb:110:65:110:75 | call to source | semmle.label | call to source | | hash_extensions.rb:110:84:110:99 | call to source | semmle.label | call to source | | hash_extensions.rb:111:10:111:15 | values [element 0, element :name] | semmle.label | values [element 0, element :name] | @@ -421,8 +487,10 @@ nodes | hash_extensions.rb:115:10:115:36 | ...[...] [element 1] | semmle.label | ...[...] [element 1] | | hash_extensions.rb:115:10:115:39 | ...[...] | semmle.label | ...[...] | | hash_extensions.rb:122:5:122:10 | single [element 0] | semmle.label | single [element 0] | +| hash_extensions.rb:122:14:122:26 | call to [] [element 0] | semmle.label | call to [] [element 0] | | hash_extensions.rb:122:15:122:25 | call to source | semmle.label | call to source | | hash_extensions.rb:123:5:123:9 | multi [element 0] | semmle.label | multi [element 0] | +| hash_extensions.rb:123:13:123:38 | call to [] [element 0] | semmle.label | call to [] [element 0] | | hash_extensions.rb:123:14:123:24 | call to source | semmle.label | call to source | | hash_extensions.rb:125:10:125:15 | single [element 0] | semmle.label | single [element 0] | | hash_extensions.rb:125:10:125:20 | call to sole | semmle.label | call to sole | diff --git a/ruby/ql/test/library-tests/frameworks/core/Kernel.expected b/ruby/ql/test/library-tests/frameworks/core/Kernel.expected index 3d35933fbf6..c3c9c8f1896 100644 --- a/ruby/ql/test/library-tests/frameworks/core/Kernel.expected +++ b/ruby/ql/test/library-tests/frameworks/core/Kernel.expected @@ -42,6 +42,13 @@ sendCallCodeExecutions | Eval.rb:7:1:7:19 | call to send | Eval.rb:7:8:7:13 | "push" | | Kernel.rb:2:1:2:22 | call to send | Kernel.rb:2:6:2:12 | "raise" | | Kernel.rb:5:1:5:19 | call to send | Kernel.rb:5:8:5:13 | "push" | +methodCallCodeExecutions +| Kernel.rb:92:1:92:14 | call to method | Kernel.rb:92:8:92:13 | "exit" | +| Kernel.rb:93:1:93:21 | call to public_method | Kernel.rb:93:15:93:20 | "exit" | +| Kernel.rb:94:1:94:23 | call to singleton_method | Kernel.rb:94:18:94:22 | "foo" | +| Kernel.rb:96:1:96:18 | call to method | Kernel.rb:96:12:96:17 | "exit" | +| Kernel.rb:97:1:97:25 | call to public_method | Kernel.rb:97:19:97:24 | "exit" | +| Kernel.rb:98:1:98:27 | call to singleton_method | Kernel.rb:98:22:98:26 | "foo" | evalCallCodeExecutions | Eval.rb:3:1:3:43 | call to eval | Eval.rb:3:6:3:22 | "raise \\"error\\"" | | Kernel.rb:1:1:1:43 | call to eval | Kernel.rb:1:6:1:22 | "raise \\"error\\"" | diff --git a/ruby/ql/test/library-tests/frameworks/core/Kernel.ql b/ruby/ql/test/library-tests/frameworks/core/Kernel.ql index 89bd115e7d8..1577e037316 100644 --- a/ruby/ql/test/library-tests/frameworks/core/Kernel.ql +++ b/ruby/ql/test/library-tests/frameworks/core/Kernel.ql @@ -9,4 +9,6 @@ query predicate kernelSpawnCallExecutions(KernelSpawnCall c) { any() } query DataFlow::Node sendCallCodeExecutions(SendCallCodeExecution e) { result = e.getCode() } +query DataFlow::Node methodCallCodeExecutions(MethodCallCodeExecution e) { result = e.getCode() } + query DataFlow::Node evalCallCodeExecutions(EvalCallCodeExecution e) { result = e.getCode() } diff --git a/ruby/ql/test/library-tests/frameworks/core/Kernel.rb b/ruby/ql/test/library-tests/frameworks/core/Kernel.rb index ad233e16f9c..cf59f6cdefd 100644 --- a/ruby/ql/test/library-tests/frameworks/core/Kernel.rb +++ b/ruby/ql/test/library-tests/frameworks/core/Kernel.rb @@ -87,4 +87,12 @@ class Foo end end -UnknownModule.system("ls") \ No newline at end of file +UnknownModule.system("ls") + +method("exit").call +public_method("exit").call +singleton_method("foo").call + +Foo.method("exit").call +Foo.public_method("exit").call +Foo.singleton_method("foo").call diff --git a/ruby/ql/test/library-tests/frameworks/http_clients/HttpClients.expected b/ruby/ql/test/library-tests/frameworks/http_clients/HttpClients.expected index 50d8303925f..f6275da34ac 100644 --- a/ruby/ql/test/library-tests/frameworks/http_clients/HttpClients.expected +++ b/ruby/ql/test/library-tests/frameworks/http_clients/HttpClients.expected @@ -67,6 +67,14 @@ httpRequests | Typhoeus.rb:15:9:15:46 | call to delete | | Typhoeus.rb:18:9:18:44 | call to head | | Typhoeus.rb:21:9:21:47 | call to options | +| Typhoeus.rb:24:8:24:50 | call to new | +| Typhoeus.rb:27:8:27:50 | call to new | +| Typhoeus.rb:31:9:31:51 | call to new | +| Typhoeus.rb:34:9:34:51 | call to new | +| Typhoeus.rb:39:9:39:51 | call to new | +| Typhoeus.rb:44:9:44:51 | call to new | +| Typhoeus.rb:49:9:49:51 | call to new | +| Typhoeus.rb:54:9:54:51 | call to new | getFramework | Excon.rb:3:9:3:40 | call to get | Excon | | Excon.rb:6:9:6:60 | call to post | Excon | @@ -136,6 +144,14 @@ getFramework | Typhoeus.rb:15:9:15:46 | call to delete | Typhoeus | | Typhoeus.rb:18:9:18:44 | call to head | Typhoeus | | Typhoeus.rb:21:9:21:47 | call to options | Typhoeus | +| Typhoeus.rb:24:8:24:50 | call to new | Typhoeus | +| Typhoeus.rb:27:8:27:50 | call to new | Typhoeus | +| Typhoeus.rb:31:9:31:51 | call to new | Typhoeus | +| Typhoeus.rb:34:9:34:51 | call to new | Typhoeus | +| Typhoeus.rb:39:9:39:51 | call to new | Typhoeus | +| Typhoeus.rb:44:9:44:51 | call to new | Typhoeus | +| Typhoeus.rb:49:9:49:51 | call to new | Typhoeus | +| Typhoeus.rb:54:9:54:51 | call to new | Typhoeus | getResponseBody | Excon.rb:3:9:3:40 | call to get | Excon.rb:4:1:4:10 | call to body | | Excon.rb:6:9:6:60 | call to post | Excon.rb:7:1:7:10 | call to body | @@ -205,6 +221,14 @@ getResponseBody | Typhoeus.rb:15:9:15:46 | call to delete | Typhoeus.rb:16:1:16:10 | call to body | | Typhoeus.rb:18:9:18:44 | call to head | Typhoeus.rb:19:1:19:10 | call to body | | Typhoeus.rb:21:9:21:47 | call to options | Typhoeus.rb:22:1:22:10 | call to body | +| Typhoeus.rb:24:8:24:50 | call to new | Typhoeus.rb:25:1:25:13 | call to body | +| Typhoeus.rb:27:8:27:50 | call to new | Typhoeus.rb:29:1:29:18 | call to body | +| Typhoeus.rb:31:9:31:51 | call to new | Typhoeus.rb:32:1:32:23 | call to response_body | +| Typhoeus.rb:34:9:34:51 | call to new | Typhoeus.rb:36:5:36:15 | call to body | +| Typhoeus.rb:39:9:39:51 | call to new | Typhoeus.rb:41:5:41:15 | call to body | +| Typhoeus.rb:44:9:44:51 | call to new | Typhoeus.rb:46:5:46:15 | call to body | +| Typhoeus.rb:49:9:49:51 | call to new | Typhoeus.rb:51:5:51:15 | call to body | +| Typhoeus.rb:54:9:54:51 | call to new | Typhoeus.rb:55:19:55:24 | body15 | getAUrlPart | Excon.rb:3:9:3:40 | call to get | Excon.rb:3:19:3:39 | "http://example.com/" | | Excon.rb:6:9:6:60 | call to post | Excon.rb:6:20:6:40 | "http://example.com/" | @@ -287,3 +311,11 @@ getAUrlPart | Typhoeus.rb:15:9:15:46 | call to delete | Typhoeus.rb:15:25:15:45 | "http://example.com/" | | Typhoeus.rb:18:9:18:44 | call to head | Typhoeus.rb:18:23:18:43 | "http://example.com/" | | Typhoeus.rb:21:9:21:47 | call to options | Typhoeus.rb:21:26:21:46 | "http://example.com/" | +| Typhoeus.rb:24:8:24:50 | call to new | Typhoeus.rb:24:30:24:49 | "http://example.com" | +| Typhoeus.rb:27:8:27:50 | call to new | Typhoeus.rb:27:30:27:49 | "http://example.com" | +| Typhoeus.rb:31:9:31:51 | call to new | Typhoeus.rb:31:31:31:50 | "http://example.com" | +| Typhoeus.rb:34:9:34:51 | call to new | Typhoeus.rb:34:31:34:50 | "http://example.com" | +| Typhoeus.rb:39:9:39:51 | call to new | Typhoeus.rb:39:31:39:50 | "http://example.com" | +| Typhoeus.rb:44:9:44:51 | call to new | Typhoeus.rb:44:31:44:50 | "http://example.com" | +| Typhoeus.rb:49:9:49:51 | call to new | Typhoeus.rb:49:31:49:50 | "http://example.com" | +| Typhoeus.rb:54:9:54:51 | call to new | Typhoeus.rb:54:31:54:50 | "http://example.com" | diff --git a/ruby/ql/test/library-tests/frameworks/http_clients/Typhoeus.rb b/ruby/ql/test/library-tests/frameworks/http_clients/Typhoeus.rb index 743081478c8..3d79dae4f06 100644 --- a/ruby/ql/test/library-tests/frameworks/http_clients/Typhoeus.rb +++ b/ruby/ql/test/library-tests/frameworks/http_clients/Typhoeus.rb @@ -19,4 +19,39 @@ resp6 = Typhoeus.head("http://example.com/") resp6.body resp7 = Typhoeus.options("http://example.com/") -resp7.body \ No newline at end of file +resp7.body + +req8 = Typhoeus::Request.new("http://example.com") +req8.run.body + +req9 = Typhoeus::Request.new("http://example.com") +req9.run +req9.response.body + +req10 = Typhoeus::Request.new("http://example.com") +req10.run.response_body + +req11 = Typhoeus::Request.new("http://example.com") +req11.on_complete do |resp11| + resp11.body +end + +req12 = Typhoeus::Request.new("http://example.com") +req12.on_success do |resp12| + resp12.body +end + +req13 = Typhoeus::Request.new("http://example.com") +req13.on_failure do |resp13| + resp13.body +end + +req14 = Typhoeus::Request.new("http://example.com") +req14.on_progress do |resp14| + resp14.body +end + +req15 = Typhoeus::Request.new("http://example.com") +req15.on_body do |body15| + # ... +end \ No newline at end of file diff --git a/ruby/ql/test/library-tests/frameworks/sinatra/Flow.expected b/ruby/ql/test/library-tests/frameworks/sinatra/Flow.expected index baad7a63b8d..0930c4da2a4 100644 --- a/ruby/ql/test/library-tests/frameworks/sinatra/Flow.expected +++ b/ruby/ql/test/library-tests/frameworks/sinatra/Flow.expected @@ -4,12 +4,14 @@ edges | app.rb:75:5:75:8 | [post] self [@foo] | app.rb:76:32:76:35 | self [@foo] | provenance | | | app.rb:75:12:75:17 | call to params | app.rb:75:12:75:24 | ...[...] | provenance | | | app.rb:75:12:75:24 | ...[...] | app.rb:75:5:75:8 | [post] self [@foo] | provenance | | -| app.rb:76:32:76:35 | @foo | views/index.erb:2:10:2:12 | call to foo | provenance | | +| app.rb:76:25:76:36 | call to [] [element :foo] | views/index.erb:2:10:2:12 | call to foo | provenance | | +| app.rb:76:32:76:35 | @foo | app.rb:76:25:76:36 | call to [] [element :foo] | provenance | | | app.rb:76:32:76:35 | self [@foo] | app.rb:76:32:76:35 | @foo | provenance | | nodes | app.rb:75:5:75:8 | [post] self [@foo] | semmle.label | [post] self [@foo] | | app.rb:75:12:75:17 | call to params | semmle.label | call to params | | app.rb:75:12:75:24 | ...[...] | semmle.label | ...[...] | +| app.rb:76:25:76:36 | call to [] [element :foo] | semmle.label | call to [] [element :foo] | | app.rb:76:32:76:35 | @foo | semmle.label | @foo | | app.rb:76:32:76:35 | self [@foo] | semmle.label | self [@foo] | | views/index.erb:2:10:2:12 | call to foo | semmle.label | call to foo | diff --git a/ruby/ql/test/library-tests/frameworks/stdlib/CommandExecution.expected b/ruby/ql/test/library-tests/frameworks/stdlib/CommandExecution.expected new file mode 100644 index 00000000000..e29aaf35bac --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/stdlib/CommandExecution.expected @@ -0,0 +1,32 @@ +| Open3.rb:1:1:1:24 | call to popen3 | Open3.rb:1:14:1:23 | "echo foo" | true | +| Open3.rb:2:1:2:24 | call to popen2 | Open3.rb:2:14:2:23 | "echo foo" | true | +| Open3.rb:3:1:3:25 | call to popen2e | Open3.rb:3:15:3:24 | "echo foo" | true | +| Open3.rb:4:1:4:26 | call to capture3 | Open3.rb:4:16:4:25 | "echo foo" | true | +| Open3.rb:5:1:5:26 | call to capture2 | Open3.rb:5:16:5:25 | "echo foo" | true | +| Open3.rb:6:1:6:27 | call to capture2e | Open3.rb:6:17:6:26 | "echo foo" | true | +| Open3.rb:7:1:7:41 | call to pipeline_rw | Open3.rb:7:19:7:28 | "echo foo" | true | +| Open3.rb:7:1:7:41 | call to pipeline_rw | Open3.rb:7:31:7:40 | "grep bar" | true | +| Open3.rb:8:1:8:40 | call to pipeline_r | Open3.rb:8:18:8:27 | "echo foo" | true | +| Open3.rb:8:1:8:40 | call to pipeline_r | Open3.rb:8:30:8:39 | "grep bar" | true | +| Open3.rb:9:1:9:40 | call to pipeline_w | Open3.rb:9:18:9:27 | "echo foo" | true | +| Open3.rb:9:1:9:40 | call to pipeline_w | Open3.rb:9:30:9:39 | "grep bar" | true | +| Open3.rb:10:1:10:44 | call to pipeline_start | Open3.rb:10:22:10:31 | "echo foo" | true | +| Open3.rb:10:1:10:44 | call to pipeline_start | Open3.rb:10:34:10:43 | "grep bar" | true | +| Open3.rb:11:1:11:38 | call to pipeline | Open3.rb:11:16:11:25 | "echo foo" | true | +| Open3.rb:11:1:11:38 | call to pipeline | Open3.rb:11:28:11:37 | "grep bar" | true | +| Open3.rb:13:1:13:24 | call to open4 | Open3.rb:13:14:13:23 | "echo foo" | true | +| Open3.rb:14:1:14:25 | call to popen4 | Open3.rb:14:15:14:24 | "echo foo" | true | +| Open3.rb:15:1:15:23 | call to spawn | Open3.rb:15:13:15:22 | "echo bar" | true | +| Open3.rb:16:1:16:27 | call to popen4ext | Open3.rb:16:17:16:26 | "echo foo" | true | +| Open3.rb:17:1:17:30 | call to popen4ext | Open3.rb:17:17:17:22 | "echo" | false | +| Open3.rb:17:1:17:30 | call to popen4ext | Open3.rb:17:25:17:29 | "foo" | false | +| Open3.rb:18:1:18:33 | call to popen4ext | Open3.rb:18:17:18:20 | true | false | +| Open3.rb:18:1:18:33 | call to popen4ext | Open3.rb:18:23:18:32 | "echo foo" | true | +| Open3.rb:19:1:19:36 | call to popen4ext | Open3.rb:19:17:19:20 | true | false | +| Open3.rb:19:1:19:36 | call to popen4ext | Open3.rb:19:23:19:28 | "echo" | false | +| Open3.rb:19:1:19:36 | call to popen4ext | Open3.rb:19:31:19:35 | "foo" | false | +| process.rb:1:1:1:25 | call to spawn | process.rb:1:15:1:24 | "echo foo" | true | +| process.rb:2:1:2:30 | call to spawn | process.rb:2:15:2:29 | call to [] | true | +| process.rb:3:1:3:24 | call to exec | process.rb:3:14:3:23 | "echo foo" | true | +| process.rb:4:1:4:29 | call to exec | process.rb:4:14:4:28 | call to [] | true | +| process.rb:5:1:5:21 | call to spawn | process.rb:5:11:5:20 | "echo foo" | true | diff --git a/ruby/ql/test/library-tests/frameworks/stdlib/CommandExecution.ql b/ruby/ql/test/library-tests/frameworks/stdlib/CommandExecution.ql new file mode 100644 index 00000000000..4de7304272b --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/stdlib/CommandExecution.ql @@ -0,0 +1,12 @@ +import codeql.ruby.Frameworks +import codeql.ruby.Concepts +import codeql.ruby.DataFlow + +query predicate commandExecutions( + SystemCommandExecution execution, DataFlow::Node arg, boolean isShellInterpreted +) { + arg = execution.getAnArgument() and + if execution.isShellInterpreted(arg) + then isShellInterpreted = true + else isShellInterpreted = false +} diff --git a/ruby/ql/test/library-tests/frameworks/stdlib/Open3.expected b/ruby/ql/test/library-tests/frameworks/stdlib/Open3.expected index a601d199ff6..9589d721a29 100644 --- a/ruby/ql/test/library-tests/frameworks/stdlib/Open3.expected +++ b/ruby/ql/test/library-tests/frameworks/stdlib/Open3.expected @@ -11,3 +11,11 @@ open3PipelineCallExecutions | Open3.rb:9:1:9:40 | call to pipeline_w | | Open3.rb:10:1:10:44 | call to pipeline_start | | Open3.rb:11:1:11:38 | call to pipeline | +open4CallExecutions +| Open3.rb:13:1:13:24 | call to open4 | +| Open3.rb:14:1:14:25 | call to popen4 | +| Open3.rb:15:1:15:23 | call to spawn | +| Open3.rb:16:1:16:27 | call to popen4ext | +| Open3.rb:17:1:17:30 | call to popen4ext | +| Open3.rb:18:1:18:33 | call to popen4ext | +| Open3.rb:19:1:19:36 | call to popen4ext | diff --git a/ruby/ql/test/library-tests/frameworks/stdlib/Open3.ql b/ruby/ql/test/library-tests/frameworks/stdlib/Open3.ql index 8d98734832d..014573d7010 100644 --- a/ruby/ql/test/library-tests/frameworks/stdlib/Open3.ql +++ b/ruby/ql/test/library-tests/frameworks/stdlib/Open3.ql @@ -4,3 +4,5 @@ import codeql.ruby.DataFlow query predicate open3CallExecutions(Open3Call c) { any() } query predicate open3PipelineCallExecutions(Open3PipelineCall c) { any() } + +query predicate open4CallExecutions(Open4Call c) { any() } diff --git a/ruby/ql/test/library-tests/frameworks/stdlib/Open3.rb b/ruby/ql/test/library-tests/frameworks/stdlib/Open3.rb index b1a3d491be1..9cc7ea7fd5c 100644 --- a/ruby/ql/test/library-tests/frameworks/stdlib/Open3.rb +++ b/ruby/ql/test/library-tests/frameworks/stdlib/Open3.rb @@ -8,4 +8,12 @@ Open3.pipeline_rw("echo foo", "grep bar") Open3.pipeline_r("echo foo", "grep bar") Open3.pipeline_w("echo foo", "grep bar") Open3.pipeline_start("echo foo", "grep bar") -Open3.pipeline("echo foo", "grep bar") \ No newline at end of file +Open3.pipeline("echo foo", "grep bar") + +Open4::open4("echo foo") +Open4::popen4("echo foo") +Open4.spawn("echo bar") +Open4.popen4ext("echo foo") +Open4.popen4ext("echo", "foo") +Open4.popen4ext(true, "echo foo") +Open4.popen4ext(true, "echo", "foo") diff --git a/ruby/ql/test/library-tests/frameworks/stdlib/process.rb b/ruby/ql/test/library-tests/frameworks/stdlib/process.rb new file mode 100644 index 00000000000..2a40e7fa94e --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/stdlib/process.rb @@ -0,0 +1,5 @@ +Process.spawn("echo foo") +Process.spawn(["echo", "foo"]) +Process.exec("echo foo") +Process.exec(["echo", "foo"]) +PTY.spawn("echo foo") diff --git a/ruby/ql/test/query-tests/experimental/LdapInjection/Ldapinjection.expected b/ruby/ql/test/query-tests/experimental/LdapInjection/Ldapinjection.expected index 9eddf82c15c..f4858a7017d 100644 --- a/ruby/ql/test/query-tests/experimental/LdapInjection/Ldapinjection.expected +++ b/ruby/ql/test/query-tests/experimental/LdapInjection/Ldapinjection.expected @@ -6,7 +6,9 @@ edges | LdapInjection.rb:9:5:9:8 | name | LdapInjection.rb:33:88:33:91 | name | provenance | | | LdapInjection.rb:9:12:9:17 | call to params | LdapInjection.rb:9:12:9:29 | ...[...] | provenance | | | LdapInjection.rb:9:12:9:29 | ...[...] | LdapInjection.rb:9:5:9:8 | name | provenance | | +| LdapInjection.rb:33:87:33:92 | call to [] [element 0] | LdapInjection.rb:33:87:33:92 | call to [] | provenance | | | LdapInjection.rb:33:88:33:91 | name | LdapInjection.rb:33:87:33:92 | call to [] | provenance | | +| LdapInjection.rb:33:88:33:91 | name | LdapInjection.rb:33:87:33:92 | call to [] [element 0] | provenance | | | LdapInjection.rb:33:88:33:91 | name | LdapInjection.rb:37:41:37:44 | name | provenance | | | LdapInjection.rb:37:5:37:10 | filter | LdapInjection.rb:38:62:38:67 | filter | provenance | | | LdapInjection.rb:37:14:37:45 | call to eq | LdapInjection.rb:37:5:37:10 | filter | provenance | | @@ -21,6 +23,7 @@ nodes | LdapInjection.rb:25:23:25:49 | "ou=people,dc=#{...},dc=com" | semmle.label | "ou=people,dc=#{...},dc=com" | | LdapInjection.rb:29:62:29:73 | "cn=#{...}" | semmle.label | "cn=#{...}" | | LdapInjection.rb:33:87:33:92 | call to [] | semmle.label | call to [] | +| LdapInjection.rb:33:87:33:92 | call to [] [element 0] | semmle.label | call to [] [element 0] | | LdapInjection.rb:33:88:33:91 | name | semmle.label | name | | LdapInjection.rb:37:5:37:10 | filter | semmle.label | filter | | LdapInjection.rb:37:14:37:45 | call to eq | semmle.label | call to eq | diff --git a/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected b/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected index be4473409b7..0ca6e123e7b 100644 --- a/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected @@ -21,6 +21,9 @@ edges | CommandInjection.rb:103:9:103:12 | file | CommandInjection.rb:104:16:104:28 | "cat #{...}" | provenance | | | CommandInjection.rb:103:16:103:21 | call to params | CommandInjection.rb:103:16:103:28 | ...[...] | provenance | | | CommandInjection.rb:103:16:103:28 | ...[...] | CommandInjection.rb:103:9:103:12 | file | provenance | | +| CommandInjection.rb:111:33:111:38 | call to params | CommandInjection.rb:111:33:111:44 | ...[...] | provenance | | +| CommandInjection.rb:113:44:113:49 | call to params | CommandInjection.rb:113:44:113:54 | ...[...] | provenance | | +| CommandInjection.rb:113:44:113:54 | ...[...] | CommandInjection.rb:113:41:113:56 | "#{...}" | provenance | | nodes | CommandInjection.rb:6:9:6:11 | cmd | semmle.label | cmd | | CommandInjection.rb:6:15:6:20 | call to params | semmle.label | call to params | @@ -51,6 +54,11 @@ nodes | CommandInjection.rb:103:16:103:21 | call to params | semmle.label | call to params | | CommandInjection.rb:103:16:103:28 | ...[...] | semmle.label | ...[...] | | CommandInjection.rb:104:16:104:28 | "cat #{...}" | semmle.label | "cat #{...}" | +| CommandInjection.rb:111:33:111:38 | call to params | semmle.label | call to params | +| CommandInjection.rb:111:33:111:44 | ...[...] | semmle.label | ...[...] | +| CommandInjection.rb:113:41:113:56 | "#{...}" | semmle.label | "#{...}" | +| CommandInjection.rb:113:44:113:49 | call to params | semmle.label | call to params | +| CommandInjection.rb:113:44:113:54 | ...[...] | semmle.label | ...[...] | subpaths #select | CommandInjection.rb:7:10:7:15 | #{...} | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:7:10:7:15 | #{...} | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | @@ -67,3 +75,5 @@ subpaths | CommandInjection.rb:82:14:82:34 | "echo #{...}" | CommandInjection.rb:81:23:81:33 | blah_number | CommandInjection.rb:82:14:82:34 | "echo #{...}" | This command depends on a $@. | CommandInjection.rb:81:23:81:33 | blah_number | user-provided value | | CommandInjection.rb:91:14:91:39 | "echo #{...}" | CommandInjection.rb:91:22:91:37 | ...[...] | CommandInjection.rb:91:14:91:39 | "echo #{...}" | This command depends on a $@. | CommandInjection.rb:91:22:91:37 | ...[...] | user-provided value | | CommandInjection.rb:104:16:104:28 | "cat #{...}" | CommandInjection.rb:103:16:103:21 | call to params | CommandInjection.rb:104:16:104:28 | "cat #{...}" | This command depends on a $@. | CommandInjection.rb:103:16:103:21 | call to params | user-provided value | +| CommandInjection.rb:111:33:111:44 | ...[...] | CommandInjection.rb:111:33:111:38 | call to params | CommandInjection.rb:111:33:111:44 | ...[...] | This command depends on a $@. | CommandInjection.rb:111:33:111:38 | call to params | user-provided value | +| CommandInjection.rb:113:41:113:56 | "#{...}" | CommandInjection.rb:113:44:113:49 | call to params | CommandInjection.rb:113:41:113:56 | "#{...}" | This command depends on a $@. | CommandInjection.rb:113:44:113:49 | call to params | user-provided value | diff --git a/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.rb b/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.rb index 4be9c95924a..12c15a30b15 100644 --- a/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.rb +++ b/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.rb @@ -106,4 +106,13 @@ class Foo < ActionController::Base system("cat #{file.shellescape}") # OK, because file is shell escaped end -end \ No newline at end of file + + def index + Terrapin::CommandLine.new(params[:foo], "bar") # BAD + + Terrapin::CommandLine.new("echo", "#{params[foo]}") # BAD + + cmd = Terrapin::CommandLine.new("echo", ":msg") + cmd.run(msg: params[:foo]) # GOOD + end +end diff --git a/ruby/ql/test/query-tests/security/cwe-079/ReflectedXSS.expected b/ruby/ql/test/query-tests/security/cwe-079/ReflectedXSS.expected index 71f40d81a34..d92d24400e8 100644 --- a/ruby/ql/test/query-tests/security/cwe-079/ReflectedXSS.expected +++ b/ruby/ql/test/query-tests/security/cwe-079/ReflectedXSS.expected @@ -15,16 +15,27 @@ edges | app/controllers/foo/bars_controller.rb:19:22:19:23 | dt | app/views/foo/bars/show.html.erb:40:3:40:16 | @instance_text | provenance | | | app/controllers/foo/bars_controller.rb:24:39:24:44 | call to params | app/controllers/foo/bars_controller.rb:24:39:24:59 | ...[...] | provenance | | | app/controllers/foo/bars_controller.rb:24:39:24:59 | ...[...] | app/controllers/foo/bars_controller.rb:24:39:24:59 | ... = ... | provenance | | -| app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:5:9:5:20 | call to display_text | provenance | | -| app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:8:9:8:21 | call to local_assigns [element :display_text] | provenance | | -| app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:12:9:12:21 | call to local_assigns [element :display_text] | provenance | | -| app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:17:15:17:27 | call to local_assigns [element :display_text] | provenance | | -| app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:35:3:35:14 | call to display_text | provenance | | -| app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:43:76:43:87 | call to display_text | provenance | | -| app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/views/foo/bars/show.html.erb:82:6:82:17 | call to display_text | provenance | | +| app/controllers/foo/bars_controller.rb:26:37:26:76 | call to [] [element :display_text] | app/views/foo/bars/show.html.erb:5:9:5:20 | call to display_text | provenance | | +| app/controllers/foo/bars_controller.rb:26:37:26:76 | call to [] [element :display_text] | app/views/foo/bars/show.html.erb:8:9:8:21 | call to local_assigns [element :display_text] | provenance | | +| app/controllers/foo/bars_controller.rb:26:37:26:76 | call to [] [element :display_text] | app/views/foo/bars/show.html.erb:12:9:12:21 | call to local_assigns [element :display_text] | provenance | | +| app/controllers/foo/bars_controller.rb:26:37:26:76 | call to [] [element :display_text] | app/views/foo/bars/show.html.erb:17:15:17:27 | call to local_assigns [element :display_text] | provenance | | +| app/controllers/foo/bars_controller.rb:26:37:26:76 | call to [] [element :display_text] | app/views/foo/bars/show.html.erb:35:3:35:14 | call to display_text | provenance | | +| app/controllers/foo/bars_controller.rb:26:37:26:76 | call to [] [element :display_text] | app/views/foo/bars/show.html.erb:43:76:43:87 | call to display_text | provenance | | +| app/controllers/foo/bars_controller.rb:26:37:26:76 | call to [] [element :display_text] | app/views/foo/bars/show.html.erb:82:6:82:17 | call to display_text | provenance | | +| app/controllers/foo/bars_controller.rb:26:37:26:76 | call to [] [element :display_text] | app/views/foo/bars/show.html.erb:85:36:85:47 | call to display_text | provenance | | +| app/controllers/foo/bars_controller.rb:26:37:26:76 | call to [] [element :display_text] | app/views/foo/bars/show.html.erb:86:28:86:39 | call to display_text | provenance | | +| app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | app/controllers/foo/bars_controller.rb:26:37:26:76 | call to [] [element :display_text] | provenance | | | app/controllers/foo/bars_controller.rb:30:5:30:7 | str | app/controllers/foo/bars_controller.rb:31:5:31:7 | str | provenance | | | app/controllers/foo/bars_controller.rb:30:11:30:16 | call to params | app/controllers/foo/bars_controller.rb:30:11:30:28 | ...[...] | provenance | | | app/controllers/foo/bars_controller.rb:30:11:30:28 | ...[...] | app/controllers/foo/bars_controller.rb:30:5:30:7 | str | provenance | | +| app/controllers/foo/bars_controller.rb:33:32:33:37 | call to params | app/controllers/foo/bars_controller.rb:33:32:33:49 | ...[...] | provenance | | +| app/controllers/foo/bars_controller.rb:33:32:33:49 | ...[...] | app/controllers/foo/bars_controller.rb:33:5:33:50 | call to translate | provenance | | +| app/controllers/foo/bars_controller.rb:34:24:34:29 | call to params | app/controllers/foo/bars_controller.rb:34:24:34:41 | ...[...] | provenance | | +| app/controllers/foo/bars_controller.rb:34:24:34:41 | ...[...] | app/controllers/foo/bars_controller.rb:34:5:34:42 | call to t | provenance | | +| app/controllers/foo/bars_controller.rb:36:34:36:39 | call to params | app/controllers/foo/bars_controller.rb:36:34:36:51 | ...[...] | provenance | | +| app/controllers/foo/bars_controller.rb:36:34:36:51 | ...[...] | app/controllers/foo/bars_controller.rb:36:5:36:52 | call to t | provenance | | +| app/controllers/foo/bars_controller.rb:37:42:37:47 | call to params | app/controllers/foo/bars_controller.rb:37:42:37:59 | ...[...] | provenance | | +| app/controllers/foo/bars_controller.rb:37:42:37:59 | ...[...] | app/controllers/foo/bars_controller.rb:37:5:37:60 | call to translate | provenance | | | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text [element] | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text | provenance | | | app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text, element] | app/views/foo/bars/_widget.html.erb:8:9:8:36 | ...[...] [element] | provenance | | | app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text] | app/views/foo/bars/_widget.html.erb:8:9:8:36 | ...[...] | provenance | | @@ -32,16 +43,20 @@ edges | app/views/foo/bars/show.html.erb:8:9:8:21 | call to local_assigns [element :display_text] | app/views/foo/bars/show.html.erb:8:9:8:36 | ...[...] | provenance | | | app/views/foo/bars/show.html.erb:12:9:12:21 | call to local_assigns [element :display_text] | app/views/foo/bars/show.html.erb:12:9:12:26 | ...[...] | provenance | | | app/views/foo/bars/show.html.erb:17:15:17:27 | call to local_assigns [element :display_text] | app/views/foo/bars/show.html.erb:17:15:17:32 | ...[...] | provenance | | -| app/views/foo/bars/show.html.erb:43:64:43:87 | ... + ... | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text | provenance | | -| app/views/foo/bars/show.html.erb:43:64:43:87 | ... + ... | app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text] | provenance | | -| app/views/foo/bars/show.html.erb:43:64:43:87 | ... + ... [element] | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text [element] | provenance | | -| app/views/foo/bars/show.html.erb:43:64:43:87 | ... + ... [element] | app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text, element] | provenance | | +| app/views/foo/bars/show.html.erb:43:48:43:89 | call to [] [element :display_text, element] | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text [element] | provenance | | +| app/views/foo/bars/show.html.erb:43:48:43:89 | call to [] [element :display_text, element] | app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text, element] | provenance | | +| app/views/foo/bars/show.html.erb:43:48:43:89 | call to [] [element :display_text] | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text | provenance | | +| app/views/foo/bars/show.html.erb:43:48:43:89 | call to [] [element :display_text] | app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text] | provenance | | +| app/views/foo/bars/show.html.erb:43:64:43:87 | ... + ... | app/views/foo/bars/show.html.erb:43:48:43:89 | call to [] [element :display_text] | provenance | | +| app/views/foo/bars/show.html.erb:43:64:43:87 | ... + ... [element] | app/views/foo/bars/show.html.erb:43:48:43:89 | call to [] [element :display_text, element] | provenance | | | app/views/foo/bars/show.html.erb:43:76:43:87 | call to display_text | app/views/foo/bars/show.html.erb:43:64:43:87 | ... + ... | provenance | | | app/views/foo/bars/show.html.erb:43:76:43:87 | call to display_text | app/views/foo/bars/show.html.erb:43:64:43:87 | ... + ... [element] | provenance | | | app/views/foo/bars/show.html.erb:53:29:53:34 | call to params | app/views/foo/bars/show.html.erb:53:29:53:44 | ...[...] | provenance | | | app/views/foo/bars/show.html.erb:56:13:56:18 | call to params | app/views/foo/bars/show.html.erb:56:13:56:28 | ...[...] | provenance | | | app/views/foo/bars/show.html.erb:73:19:73:24 | call to params | app/views/foo/bars/show.html.erb:73:19:73:34 | ...[...] | provenance | | | app/views/foo/bars/show.html.erb:76:28:76:33 | call to params | app/views/foo/bars/show.html.erb:76:28:76:39 | ...[...] | provenance | | +| app/views/foo/bars/show.html.erb:85:36:85:47 | call to display_text | app/views/foo/bars/show.html.erb:85:9:85:48 | call to translate | provenance | | +| app/views/foo/bars/show.html.erb:86:28:86:39 | call to display_text | app/views/foo/bars/show.html.erb:86:9:86:40 | call to t | provenance | | nodes | app/controllers/foo/bars_controller.rb:9:12:9:17 | call to params | semmle.label | call to params | | app/controllers/foo/bars_controller.rb:9:12:9:29 | ...[...] | semmle.label | ...[...] | @@ -57,11 +72,24 @@ nodes | app/controllers/foo/bars_controller.rb:24:39:24:44 | call to params | semmle.label | call to params | | app/controllers/foo/bars_controller.rb:24:39:24:59 | ... = ... | semmle.label | ... = ... | | app/controllers/foo/bars_controller.rb:24:39:24:59 | ...[...] | semmle.label | ...[...] | +| app/controllers/foo/bars_controller.rb:26:37:26:76 | call to [] [element :display_text] | semmle.label | call to [] [element :display_text] | | app/controllers/foo/bars_controller.rb:26:53:26:54 | dt | semmle.label | dt | | app/controllers/foo/bars_controller.rb:30:5:30:7 | str | semmle.label | str | | app/controllers/foo/bars_controller.rb:30:11:30:16 | call to params | semmle.label | call to params | | app/controllers/foo/bars_controller.rb:30:11:30:28 | ...[...] | semmle.label | ...[...] | | app/controllers/foo/bars_controller.rb:31:5:31:7 | str | semmle.label | str | +| app/controllers/foo/bars_controller.rb:33:5:33:50 | call to translate | semmle.label | call to translate | +| app/controllers/foo/bars_controller.rb:33:32:33:37 | call to params | semmle.label | call to params | +| app/controllers/foo/bars_controller.rb:33:32:33:49 | ...[...] | semmle.label | ...[...] | +| app/controllers/foo/bars_controller.rb:34:5:34:42 | call to t | semmle.label | call to t | +| app/controllers/foo/bars_controller.rb:34:24:34:29 | call to params | semmle.label | call to params | +| app/controllers/foo/bars_controller.rb:34:24:34:41 | ...[...] | semmle.label | ...[...] | +| app/controllers/foo/bars_controller.rb:36:5:36:52 | call to t | semmle.label | call to t | +| app/controllers/foo/bars_controller.rb:36:34:36:39 | call to params | semmle.label | call to params | +| app/controllers/foo/bars_controller.rb:36:34:36:51 | ...[...] | semmle.label | ...[...] | +| app/controllers/foo/bars_controller.rb:37:5:37:60 | call to translate | semmle.label | call to translate | +| app/controllers/foo/bars_controller.rb:37:42:37:47 | call to params | semmle.label | call to params | +| app/controllers/foo/bars_controller.rb:37:42:37:59 | ...[...] | semmle.label | ...[...] | | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text | semmle.label | call to display_text | | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text [element] | semmle.label | call to display_text [element] | | app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text, element] | semmle.label | call to local_assigns [element :display_text, element] | @@ -78,6 +106,8 @@ nodes | app/views/foo/bars/show.html.erb:17:15:17:32 | ...[...] | semmle.label | ...[...] | | app/views/foo/bars/show.html.erb:35:3:35:14 | call to display_text | semmle.label | call to display_text | | app/views/foo/bars/show.html.erb:40:3:40:16 | @instance_text | semmle.label | @instance_text | +| app/views/foo/bars/show.html.erb:43:48:43:89 | call to [] [element :display_text, element] | semmle.label | call to [] [element :display_text, element] | +| app/views/foo/bars/show.html.erb:43:48:43:89 | call to [] [element :display_text] | semmle.label | call to [] [element :display_text] | | app/views/foo/bars/show.html.erb:43:64:43:87 | ... + ... | semmle.label | ... + ... | | app/views/foo/bars/show.html.erb:43:64:43:87 | ... + ... [element] | semmle.label | ... + ... [element] | | app/views/foo/bars/show.html.erb:43:76:43:87 | call to display_text | semmle.label | call to display_text | @@ -92,10 +122,18 @@ nodes | app/views/foo/bars/show.html.erb:76:28:76:33 | call to params | semmle.label | call to params | | app/views/foo/bars/show.html.erb:76:28:76:39 | ...[...] | semmle.label | ...[...] | | app/views/foo/bars/show.html.erb:82:6:82:17 | call to display_text | semmle.label | call to display_text | +| app/views/foo/bars/show.html.erb:85:9:85:48 | call to translate | semmle.label | call to translate | +| app/views/foo/bars/show.html.erb:85:36:85:47 | call to display_text | semmle.label | call to display_text | +| app/views/foo/bars/show.html.erb:86:9:86:40 | call to t | semmle.label | call to t | +| app/views/foo/bars/show.html.erb:86:28:86:39 | call to display_text | semmle.label | call to display_text | subpaths #select | app/controllers/foo/bars_controller.rb:24:39:24:59 | ... = ... | app/controllers/foo/bars_controller.rb:24:39:24:44 | call to params | app/controllers/foo/bars_controller.rb:24:39:24:59 | ... = ... | Cross-site scripting vulnerability due to a $@. | app/controllers/foo/bars_controller.rb:24:39:24:44 | call to params | user-provided value | | app/controllers/foo/bars_controller.rb:31:5:31:7 | str | app/controllers/foo/bars_controller.rb:30:11:30:16 | call to params | app/controllers/foo/bars_controller.rb:31:5:31:7 | str | Cross-site scripting vulnerability due to a $@. | app/controllers/foo/bars_controller.rb:30:11:30:16 | call to params | user-provided value | +| app/controllers/foo/bars_controller.rb:33:5:33:50 | call to translate | app/controllers/foo/bars_controller.rb:33:32:33:37 | call to params | app/controllers/foo/bars_controller.rb:33:5:33:50 | call to translate | Cross-site scripting vulnerability due to a $@. | app/controllers/foo/bars_controller.rb:33:32:33:37 | call to params | user-provided value | +| app/controllers/foo/bars_controller.rb:34:5:34:42 | call to t | app/controllers/foo/bars_controller.rb:34:24:34:29 | call to params | app/controllers/foo/bars_controller.rb:34:5:34:42 | call to t | Cross-site scripting vulnerability due to a $@. | app/controllers/foo/bars_controller.rb:34:24:34:29 | call to params | user-provided value | +| app/controllers/foo/bars_controller.rb:36:5:36:52 | call to t | app/controllers/foo/bars_controller.rb:36:34:36:39 | call to params | app/controllers/foo/bars_controller.rb:36:5:36:52 | call to t | Cross-site scripting vulnerability due to a $@. | app/controllers/foo/bars_controller.rb:36:34:36:39 | call to params | user-provided value | +| app/controllers/foo/bars_controller.rb:37:5:37:60 | call to translate | app/controllers/foo/bars_controller.rb:37:42:37:47 | call to params | app/controllers/foo/bars_controller.rb:37:5:37:60 | call to translate | Cross-site scripting vulnerability due to a $@. | app/controllers/foo/bars_controller.rb:37:42:37:47 | call to params | user-provided value | | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text | app/controllers/foo/bars_controller.rb:18:10:18:15 | call to params | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text | Cross-site scripting vulnerability due to a $@. | app/controllers/foo/bars_controller.rb:18:10:18:15 | call to params | user-provided value | | app/views/foo/bars/_widget.html.erb:8:9:8:36 | ...[...] | app/controllers/foo/bars_controller.rb:18:10:18:15 | call to params | app/views/foo/bars/_widget.html.erb:8:9:8:36 | ...[...] | Cross-site scripting vulnerability due to a $@. | app/controllers/foo/bars_controller.rb:18:10:18:15 | call to params | user-provided value | | app/views/foo/bars/show.html.erb:2:18:2:30 | @user_website | app/controllers/foo/bars_controller.rb:17:21:17:26 | call to params | app/views/foo/bars/show.html.erb:2:18:2:30 | @user_website | Cross-site scripting vulnerability due to a $@. | app/controllers/foo/bars_controller.rb:17:21:17:26 | call to params | user-provided value | @@ -112,3 +150,5 @@ subpaths | app/views/foo/bars/show.html.erb:73:19:73:34 | ...[...] | app/views/foo/bars/show.html.erb:73:19:73:24 | call to params | app/views/foo/bars/show.html.erb:73:19:73:34 | ...[...] | Cross-site scripting vulnerability due to a $@. | app/views/foo/bars/show.html.erb:73:19:73:24 | call to params | user-provided value | | app/views/foo/bars/show.html.erb:76:28:76:39 | ...[...] | app/views/foo/bars/show.html.erb:76:28:76:33 | call to params | app/views/foo/bars/show.html.erb:76:28:76:39 | ...[...] | Cross-site scripting vulnerability due to a $@. | app/views/foo/bars/show.html.erb:76:28:76:33 | call to params | user-provided value | | app/views/foo/bars/show.html.erb:82:6:82:17 | call to display_text | app/controllers/foo/bars_controller.rb:18:10:18:15 | call to params | app/views/foo/bars/show.html.erb:82:6:82:17 | call to display_text | Cross-site scripting vulnerability due to a $@. | app/controllers/foo/bars_controller.rb:18:10:18:15 | call to params | user-provided value | +| app/views/foo/bars/show.html.erb:85:9:85:48 | call to translate | app/controllers/foo/bars_controller.rb:18:10:18:15 | call to params | app/views/foo/bars/show.html.erb:85:9:85:48 | call to translate | Cross-site scripting vulnerability due to a $@. | app/controllers/foo/bars_controller.rb:18:10:18:15 | call to params | user-provided value | +| app/views/foo/bars/show.html.erb:86:9:86:40 | call to t | app/controllers/foo/bars_controller.rb:18:10:18:15 | call to params | app/views/foo/bars/show.html.erb:86:9:86:40 | call to t | Cross-site scripting vulnerability due to a $@. | app/controllers/foo/bars_controller.rb:18:10:18:15 | call to params | user-provided value | diff --git a/ruby/ql/test/query-tests/security/cwe-079/StoredXSS.expected b/ruby/ql/test/query-tests/security/cwe-079/StoredXSS.expected index 8ae455760c1..99d248f4884 100644 --- a/ruby/ql/test/query-tests/security/cwe-079/StoredXSS.expected +++ b/ruby/ql/test/query-tests/security/cwe-079/StoredXSS.expected @@ -3,12 +3,13 @@ edges | app/controllers/foo/stores_controller.rb:8:10:8:29 | call to read | app/controllers/foo/stores_controller.rb:8:5:8:6 | dt | provenance | | | app/controllers/foo/stores_controller.rb:9:22:9:23 | dt | app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | provenance | | | app/controllers/foo/stores_controller.rb:9:22:9:23 | dt | app/views/foo/stores/show.html.erb:37:3:37:16 | @instance_text | provenance | | -| app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | app/views/foo/stores/show.html.erb:2:9:2:20 | call to display_text | provenance | | -| app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | app/views/foo/stores/show.html.erb:5:9:5:21 | call to local_assigns [element :display_text] | provenance | | -| app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | app/views/foo/stores/show.html.erb:9:9:9:21 | call to local_assigns [element :display_text] | provenance | | -| app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | app/views/foo/stores/show.html.erb:14:15:14:27 | call to local_assigns [element :display_text] | provenance | | -| app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | app/views/foo/stores/show.html.erb:32:3:32:14 | call to display_text | provenance | | -| app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | app/views/foo/stores/show.html.erb:40:76:40:87 | call to display_text | provenance | | +| app/controllers/foo/stores_controller.rb:13:39:13:78 | call to [] [element :display_text] | app/views/foo/stores/show.html.erb:2:9:2:20 | call to display_text | provenance | | +| app/controllers/foo/stores_controller.rb:13:39:13:78 | call to [] [element :display_text] | app/views/foo/stores/show.html.erb:5:9:5:21 | call to local_assigns [element :display_text] | provenance | | +| app/controllers/foo/stores_controller.rb:13:39:13:78 | call to [] [element :display_text] | app/views/foo/stores/show.html.erb:9:9:9:21 | call to local_assigns [element :display_text] | provenance | | +| app/controllers/foo/stores_controller.rb:13:39:13:78 | call to [] [element :display_text] | app/views/foo/stores/show.html.erb:14:15:14:27 | call to local_assigns [element :display_text] | provenance | | +| app/controllers/foo/stores_controller.rb:13:39:13:78 | call to [] [element :display_text] | app/views/foo/stores/show.html.erb:32:3:32:14 | call to display_text | provenance | | +| app/controllers/foo/stores_controller.rb:13:39:13:78 | call to [] [element :display_text] | app/views/foo/stores/show.html.erb:40:76:40:87 | call to display_text | provenance | | +| app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | app/controllers/foo/stores_controller.rb:13:39:13:78 | call to [] [element :display_text] | provenance | | | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text [element] | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text | provenance | | | app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text, element] | app/views/foo/bars/_widget.html.erb:8:9:8:36 | ...[...] [element] | provenance | | | app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text] | app/views/foo/bars/_widget.html.erb:8:9:8:36 | ...[...] | provenance | | @@ -16,10 +17,12 @@ edges | app/views/foo/stores/show.html.erb:5:9:5:21 | call to local_assigns [element :display_text] | app/views/foo/stores/show.html.erb:5:9:5:36 | ...[...] | provenance | | | app/views/foo/stores/show.html.erb:9:9:9:21 | call to local_assigns [element :display_text] | app/views/foo/stores/show.html.erb:9:9:9:26 | ...[...] | provenance | | | app/views/foo/stores/show.html.erb:14:15:14:27 | call to local_assigns [element :display_text] | app/views/foo/stores/show.html.erb:14:15:14:32 | ...[...] | provenance | | -| app/views/foo/stores/show.html.erb:40:64:40:87 | ... + ... | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text | provenance | | -| app/views/foo/stores/show.html.erb:40:64:40:87 | ... + ... | app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text] | provenance | | -| app/views/foo/stores/show.html.erb:40:64:40:87 | ... + ... [element] | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text [element] | provenance | | -| app/views/foo/stores/show.html.erb:40:64:40:87 | ... + ... [element] | app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text, element] | provenance | | +| app/views/foo/stores/show.html.erb:40:48:40:89 | call to [] [element :display_text, element] | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text [element] | provenance | | +| app/views/foo/stores/show.html.erb:40:48:40:89 | call to [] [element :display_text, element] | app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text, element] | provenance | | +| app/views/foo/stores/show.html.erb:40:48:40:89 | call to [] [element :display_text] | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text | provenance | | +| app/views/foo/stores/show.html.erb:40:48:40:89 | call to [] [element :display_text] | app/views/foo/bars/_widget.html.erb:8:9:8:21 | call to local_assigns [element :display_text] | provenance | | +| app/views/foo/stores/show.html.erb:40:64:40:87 | ... + ... | app/views/foo/stores/show.html.erb:40:48:40:89 | call to [] [element :display_text] | provenance | | +| app/views/foo/stores/show.html.erb:40:64:40:87 | ... + ... [element] | app/views/foo/stores/show.html.erb:40:48:40:89 | call to [] [element :display_text, element] | provenance | | | app/views/foo/stores/show.html.erb:40:76:40:87 | call to display_text | app/views/foo/stores/show.html.erb:40:64:40:87 | ... + ... | provenance | | | app/views/foo/stores/show.html.erb:40:76:40:87 | call to display_text | app/views/foo/stores/show.html.erb:40:64:40:87 | ... + ... [element] | provenance | | | app/views/foo/stores/show.html.erb:86:17:86:28 | call to handle | app/views/foo/stores/show.html.erb:86:3:86:29 | call to sprintf | provenance | | @@ -27,6 +30,7 @@ nodes | app/controllers/foo/stores_controller.rb:8:5:8:6 | dt | semmle.label | dt | | app/controllers/foo/stores_controller.rb:8:10:8:29 | call to read | semmle.label | call to read | | app/controllers/foo/stores_controller.rb:9:22:9:23 | dt | semmle.label | dt | +| app/controllers/foo/stores_controller.rb:13:39:13:78 | call to [] [element :display_text] | semmle.label | call to [] [element :display_text] | | app/controllers/foo/stores_controller.rb:13:55:13:56 | dt | semmle.label | dt | | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text | semmle.label | call to display_text | | app/views/foo/bars/_widget.html.erb:5:9:5:20 | call to display_text [element] | semmle.label | call to display_text [element] | @@ -43,6 +47,8 @@ nodes | app/views/foo/stores/show.html.erb:14:15:14:32 | ...[...] | semmle.label | ...[...] | | app/views/foo/stores/show.html.erb:32:3:32:14 | call to display_text | semmle.label | call to display_text | | app/views/foo/stores/show.html.erb:37:3:37:16 | @instance_text | semmle.label | @instance_text | +| app/views/foo/stores/show.html.erb:40:48:40:89 | call to [] [element :display_text, element] | semmle.label | call to [] [element :display_text, element] | +| app/views/foo/stores/show.html.erb:40:48:40:89 | call to [] [element :display_text] | semmle.label | call to [] [element :display_text] | | app/views/foo/stores/show.html.erb:40:64:40:87 | ... + ... | semmle.label | ... + ... | | app/views/foo/stores/show.html.erb:40:64:40:87 | ... + ... [element] | semmle.label | ... + ... [element] | | app/views/foo/stores/show.html.erb:40:76:40:87 | call to display_text | semmle.label | call to display_text | diff --git a/ruby/ql/test/query-tests/security/cwe-079/app/controllers/foo/bars_controller.rb b/ruby/ql/test/query-tests/security/cwe-079/app/controllers/foo/bars_controller.rb index ce6adfda027..4146cc29953 100644 --- a/ruby/ql/test/query-tests/security/cwe-079/app/controllers/foo/bars_controller.rb +++ b/ruby/ql/test/query-tests/security/cwe-079/app/controllers/foo/bars_controller.rb @@ -29,5 +29,11 @@ class BarsController < ApplicationController def make_safe_html str = params[:user_name] str.html_safe + + translate("welcome", name: params[:user_name]).html_safe # NOT OK - translate preserves taint + t("welcome", name: params[:user_name]).html_safe # NOT OK - t is an alias of translate + t("welcome_html", name: params[:user_name]).html_safe # OK - t escapes html when key ends in _html + I18n.t("welcome_html", name: params[:user_name]).html_safe # NOT OK - I18n.t does not escape html + I18n.translate("welcome_html", name: params[:user_name]).html_safe # NOT OK - alias end end diff --git a/ruby/ql/test/query-tests/security/cwe-079/app/views/foo/bars/show.html.erb b/ruby/ql/test/query-tests/security/cwe-079/app/views/foo/bars/show.html.erb index 21c463eddbb..b8092cd883f 100644 --- a/ruby/ql/test/query-tests/security/cwe-079/app/views/foo/bars/show.html.erb +++ b/ruby/ql/test/query-tests/security/cwe-079/app/views/foo/bars/show.html.erb @@ -80,3 +80,10 @@ <%# BAD: A local rendered raw as a local variable %> <%== display_text %> + +<%# BAD: translate preserves taint %> +<%= raw translate("welcome", name: display_text) %> +<%= raw t("welcome", name: display_text) %> + +<%# GOOD: translate sanitizes for html keys %> +<%= raw t("welcome1.html", name: display_text) %> diff --git a/ruby/ql/test/query-tests/security/cwe-089/ActiveRecordInjection.rb b/ruby/ql/test/query-tests/security/cwe-089/ActiveRecordInjection.rb index 9a94e48708d..ad074de5e98 100644 --- a/ruby/ql/test/query-tests/security/cwe-089/ActiveRecordInjection.rb +++ b/ruby/ql/test/query-tests/security/cwe-089/ActiveRecordInjection.rb @@ -114,6 +114,12 @@ class FooController < ActionController::Base User.joins(:a, params[:column]) User.count_by_sql(params[:custom_sql_query]) + + # BAD: executes `SELECT users.* FROM #{params[:tab]}` + # where `params[:tab]` is unsanitized + User.all.from(params[:tab]) + # BAD: executes `SELECT "users".* FROM (SELECT "users".* FROM "users") #{params[:sq]} + User.all.from(User.all, params[:sq]) end end diff --git a/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected b/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected index fee6441cf9c..8b6c5bf4d16 100644 --- a/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-089/SqlInjection.expected @@ -8,10 +8,12 @@ edges | ActiveRecordInjection.rb:43:29:43:39 | ...[...] | ActiveRecordInjection.rb:43:20:43:42 | "id = '#{...}'" | provenance | | | ActiveRecordInjection.rb:48:30:48:35 | call to params | ActiveRecordInjection.rb:48:30:48:40 | ...[...] | provenance | | | ActiveRecordInjection.rb:48:30:48:40 | ...[...] | ActiveRecordInjection.rb:48:21:48:43 | "id = '#{...}'" | provenance | | -| ActiveRecordInjection.rb:52:22:52:44 | "id = '#{...}'" | ActiveRecordInjection.rb:52:21:52:45 | call to [] | provenance | | +| ActiveRecordInjection.rb:52:21:52:45 | call to [] [element 0] | ActiveRecordInjection.rb:52:21:52:45 | call to [] | provenance | | +| ActiveRecordInjection.rb:52:22:52:44 | "id = '#{...}'" | ActiveRecordInjection.rb:52:21:52:45 | call to [] [element 0] | provenance | | | ActiveRecordInjection.rb:52:31:52:36 | call to params | ActiveRecordInjection.rb:52:31:52:41 | ...[...] | provenance | | | ActiveRecordInjection.rb:52:31:52:41 | ...[...] | ActiveRecordInjection.rb:52:22:52:44 | "id = '#{...}'" | provenance | | -| ActiveRecordInjection.rb:57:23:57:45 | "id = '#{...}'" | ActiveRecordInjection.rb:57:22:57:46 | call to [] | provenance | | +| ActiveRecordInjection.rb:57:22:57:46 | call to [] [element 0] | ActiveRecordInjection.rb:57:22:57:46 | call to [] | provenance | | +| ActiveRecordInjection.rb:57:23:57:45 | "id = '#{...}'" | ActiveRecordInjection.rb:57:22:57:46 | call to [] [element 0] | provenance | | | ActiveRecordInjection.rb:57:32:57:37 | call to params | ActiveRecordInjection.rb:57:32:57:42 | ...[...] | provenance | | | ActiveRecordInjection.rb:57:32:57:42 | ...[...] | ActiveRecordInjection.rb:57:23:57:45 | "id = '#{...}'" | provenance | | | ActiveRecordInjection.rb:62:21:62:26 | call to params | ActiveRecordInjection.rb:62:21:62:35 | ...[...] | provenance | | @@ -44,34 +46,36 @@ edges | ActiveRecordInjection.rb:113:21:113:26 | call to params | ActiveRecordInjection.rb:113:21:113:35 | ...[...] | provenance | | | ActiveRecordInjection.rb:114:20:114:25 | call to params | ActiveRecordInjection.rb:114:20:114:34 | ...[...] | provenance | | | ActiveRecordInjection.rb:116:23:116:28 | call to params | ActiveRecordInjection.rb:116:23:116:47 | ...[...] | provenance | | -| ActiveRecordInjection.rb:122:5:122:6 | ps | ActiveRecordInjection.rb:123:11:123:12 | ps | provenance | | -| ActiveRecordInjection.rb:122:10:122:15 | call to params | ActiveRecordInjection.rb:122:5:122:6 | ps | provenance | | -| ActiveRecordInjection.rb:123:5:123:7 | uid | ActiveRecordInjection.rb:124:5:124:9 | uidEq | provenance | | -| ActiveRecordInjection.rb:123:11:123:12 | ps | ActiveRecordInjection.rb:123:11:123:17 | ...[...] | provenance | | -| ActiveRecordInjection.rb:123:11:123:17 | ...[...] | ActiveRecordInjection.rb:123:5:123:7 | uid | provenance | | -| ActiveRecordInjection.rb:124:5:124:9 | uidEq | ActiveRecordInjection.rb:128:20:128:32 | ... + ... | provenance | | -| ActiveRecordInjection.rb:124:5:124:9 | uidEq | ActiveRecordInjection.rb:128:28:128:32 | uidEq | provenance | | -| ActiveRecordInjection.rb:128:20:128:32 | ... + ... [element] | ActiveRecordInjection.rb:128:20:128:32 | ... + ... | provenance | | -| ActiveRecordInjection.rb:128:28:128:32 | uidEq | ActiveRecordInjection.rb:128:20:128:32 | ... + ... [element] | provenance | | -| ActiveRecordInjection.rb:161:21:161:26 | call to params | ActiveRecordInjection.rb:161:21:161:44 | ...[...] | provenance | | -| ActiveRecordInjection.rb:161:21:161:26 | call to params | ActiveRecordInjection.rb:161:21:161:44 | ...[...] | provenance | | -| ActiveRecordInjection.rb:161:21:161:44 | ...[...] | ActiveRecordInjection.rb:20:22:20:30 | condition | provenance | | -| ActiveRecordInjection.rb:175:59:175:64 | call to params | ActiveRecordInjection.rb:175:59:175:74 | ...[...] | provenance | | -| ActiveRecordInjection.rb:175:59:175:74 | ...[...] | ActiveRecordInjection.rb:175:27:175:76 | "this is an unsafe annotation:..." | provenance | | -| ActiveRecordInjection.rb:186:5:186:13 | my_params | ActiveRecordInjection.rb:187:47:187:55 | my_params | provenance | | -| ActiveRecordInjection.rb:186:17:186:32 | call to permitted_params | ActiveRecordInjection.rb:186:5:186:13 | my_params | provenance | | -| ActiveRecordInjection.rb:187:5:187:9 | query | ActiveRecordInjection.rb:188:37:188:41 | query | provenance | | -| ActiveRecordInjection.rb:187:47:187:55 | my_params | ActiveRecordInjection.rb:187:47:187:65 | ...[...] | provenance | | -| ActiveRecordInjection.rb:187:47:187:65 | ...[...] | ActiveRecordInjection.rb:187:5:187:9 | query | provenance | | -| ActiveRecordInjection.rb:193:5:193:10 | call to params | ActiveRecordInjection.rb:193:5:193:27 | call to require | provenance | | -| ActiveRecordInjection.rb:193:5:193:27 | call to require | ActiveRecordInjection.rb:193:5:193:59 | call to permit | provenance | | -| ActiveRecordInjection.rb:193:5:193:59 | call to permit | ActiveRecordInjection.rb:186:17:186:32 | call to permitted_params | provenance | | -| ActiveRecordInjection.rb:193:5:193:59 | call to permit | ActiveRecordInjection.rb:197:77:197:92 | call to permitted_params | provenance | | -| ActiveRecordInjection.rb:193:5:193:59 | call to permit | ActiveRecordInjection.rb:198:69:198:84 | call to permitted_params | provenance | | -| ActiveRecordInjection.rb:197:77:197:92 | call to permitted_params | ActiveRecordInjection.rb:197:77:197:102 | ...[...] | provenance | | -| ActiveRecordInjection.rb:197:77:197:102 | ...[...] | ActiveRecordInjection.rb:197:43:197:104 | "SELECT * FROM users WHERE id ..." | provenance | | -| ActiveRecordInjection.rb:198:69:198:84 | call to permitted_params | ActiveRecordInjection.rb:198:69:198:94 | ...[...] | provenance | | -| ActiveRecordInjection.rb:198:69:198:94 | ...[...] | ActiveRecordInjection.rb:198:35:198:96 | "SELECT * FROM users WHERE id ..." | provenance | | +| ActiveRecordInjection.rb:120:19:120:24 | call to params | ActiveRecordInjection.rb:120:19:120:30 | ...[...] | provenance | | +| ActiveRecordInjection.rb:122:29:122:34 | call to params | ActiveRecordInjection.rb:122:29:122:39 | ...[...] | provenance | | +| ActiveRecordInjection.rb:128:5:128:6 | ps | ActiveRecordInjection.rb:129:11:129:12 | ps | provenance | | +| ActiveRecordInjection.rb:128:10:128:15 | call to params | ActiveRecordInjection.rb:128:5:128:6 | ps | provenance | | +| ActiveRecordInjection.rb:129:5:129:7 | uid | ActiveRecordInjection.rb:130:5:130:9 | uidEq | provenance | | +| ActiveRecordInjection.rb:129:11:129:12 | ps | ActiveRecordInjection.rb:129:11:129:17 | ...[...] | provenance | | +| ActiveRecordInjection.rb:129:11:129:17 | ...[...] | ActiveRecordInjection.rb:129:5:129:7 | uid | provenance | | +| ActiveRecordInjection.rb:130:5:130:9 | uidEq | ActiveRecordInjection.rb:134:20:134:32 | ... + ... | provenance | | +| ActiveRecordInjection.rb:130:5:130:9 | uidEq | ActiveRecordInjection.rb:134:28:134:32 | uidEq | provenance | | +| ActiveRecordInjection.rb:134:20:134:32 | ... + ... [element] | ActiveRecordInjection.rb:134:20:134:32 | ... + ... | provenance | | +| ActiveRecordInjection.rb:134:28:134:32 | uidEq | ActiveRecordInjection.rb:134:20:134:32 | ... + ... [element] | provenance | | +| ActiveRecordInjection.rb:167:21:167:26 | call to params | ActiveRecordInjection.rb:167:21:167:44 | ...[...] | provenance | | +| ActiveRecordInjection.rb:167:21:167:26 | call to params | ActiveRecordInjection.rb:167:21:167:44 | ...[...] | provenance | | +| ActiveRecordInjection.rb:167:21:167:44 | ...[...] | ActiveRecordInjection.rb:20:22:20:30 | condition | provenance | | +| ActiveRecordInjection.rb:181:59:181:64 | call to params | ActiveRecordInjection.rb:181:59:181:74 | ...[...] | provenance | | +| ActiveRecordInjection.rb:181:59:181:74 | ...[...] | ActiveRecordInjection.rb:181:27:181:76 | "this is an unsafe annotation:..." | provenance | | +| ActiveRecordInjection.rb:192:5:192:13 | my_params | ActiveRecordInjection.rb:193:47:193:55 | my_params | provenance | | +| ActiveRecordInjection.rb:192:17:192:32 | call to permitted_params | ActiveRecordInjection.rb:192:5:192:13 | my_params | provenance | | +| ActiveRecordInjection.rb:193:5:193:9 | query | ActiveRecordInjection.rb:194:37:194:41 | query | provenance | | +| ActiveRecordInjection.rb:193:47:193:55 | my_params | ActiveRecordInjection.rb:193:47:193:65 | ...[...] | provenance | | +| ActiveRecordInjection.rb:193:47:193:65 | ...[...] | ActiveRecordInjection.rb:193:5:193:9 | query | provenance | | +| ActiveRecordInjection.rb:199:5:199:10 | call to params | ActiveRecordInjection.rb:199:5:199:27 | call to require | provenance | | +| ActiveRecordInjection.rb:199:5:199:27 | call to require | ActiveRecordInjection.rb:199:5:199:59 | call to permit | provenance | | +| ActiveRecordInjection.rb:199:5:199:59 | call to permit | ActiveRecordInjection.rb:192:17:192:32 | call to permitted_params | provenance | | +| ActiveRecordInjection.rb:199:5:199:59 | call to permit | ActiveRecordInjection.rb:203:77:203:92 | call to permitted_params | provenance | | +| ActiveRecordInjection.rb:199:5:199:59 | call to permit | ActiveRecordInjection.rb:204:69:204:84 | call to permitted_params | provenance | | +| ActiveRecordInjection.rb:203:77:203:92 | call to permitted_params | ActiveRecordInjection.rb:203:77:203:102 | ...[...] | provenance | | +| ActiveRecordInjection.rb:203:77:203:102 | ...[...] | ActiveRecordInjection.rb:203:43:203:104 | "SELECT * FROM users WHERE id ..." | provenance | | +| ActiveRecordInjection.rb:204:69:204:84 | call to permitted_params | ActiveRecordInjection.rb:204:69:204:94 | ...[...] | provenance | | +| ActiveRecordInjection.rb:204:69:204:94 | ...[...] | ActiveRecordInjection.rb:204:35:204:96 | "SELECT * FROM users WHERE id ..." | provenance | | | ArelInjection.rb:4:5:4:8 | name | ArelInjection.rb:6:20:6:61 | "SELECT * FROM users WHERE nam..." | provenance | | | ArelInjection.rb:4:5:4:8 | name | ArelInjection.rb:7:39:7:80 | "SELECT * FROM users WHERE nam..." | provenance | | | ArelInjection.rb:4:12:4:17 | call to params | ArelInjection.rb:4:12:4:29 | ...[...] | provenance | | @@ -105,10 +109,12 @@ nodes | ActiveRecordInjection.rb:48:30:48:35 | call to params | semmle.label | call to params | | ActiveRecordInjection.rb:48:30:48:40 | ...[...] | semmle.label | ...[...] | | ActiveRecordInjection.rb:52:21:52:45 | call to [] | semmle.label | call to [] | +| ActiveRecordInjection.rb:52:21:52:45 | call to [] [element 0] | semmle.label | call to [] [element 0] | | ActiveRecordInjection.rb:52:22:52:44 | "id = '#{...}'" | semmle.label | "id = '#{...}'" | | ActiveRecordInjection.rb:52:31:52:36 | call to params | semmle.label | call to params | | ActiveRecordInjection.rb:52:31:52:41 | ...[...] | semmle.label | ...[...] | | ActiveRecordInjection.rb:57:22:57:46 | call to [] | semmle.label | call to [] | +| ActiveRecordInjection.rb:57:22:57:46 | call to [] [element 0] | semmle.label | call to [] [element 0] | | ActiveRecordInjection.rb:57:23:57:45 | "id = '#{...}'" | semmle.label | "id = '#{...}'" | | ActiveRecordInjection.rb:57:32:57:37 | call to params | semmle.label | call to params | | ActiveRecordInjection.rb:57:32:57:42 | ...[...] | semmle.label | ...[...] | @@ -161,36 +167,40 @@ nodes | ActiveRecordInjection.rb:114:20:114:34 | ...[...] | semmle.label | ...[...] | | ActiveRecordInjection.rb:116:23:116:28 | call to params | semmle.label | call to params | | ActiveRecordInjection.rb:116:23:116:47 | ...[...] | semmle.label | ...[...] | -| ActiveRecordInjection.rb:122:5:122:6 | ps | semmle.label | ps | -| ActiveRecordInjection.rb:122:10:122:15 | call to params | semmle.label | call to params | -| ActiveRecordInjection.rb:123:5:123:7 | uid | semmle.label | uid | -| ActiveRecordInjection.rb:123:11:123:12 | ps | semmle.label | ps | -| ActiveRecordInjection.rb:123:11:123:17 | ...[...] | semmle.label | ...[...] | -| ActiveRecordInjection.rb:124:5:124:9 | uidEq | semmle.label | uidEq | -| ActiveRecordInjection.rb:128:20:128:32 | ... + ... | semmle.label | ... + ... | -| ActiveRecordInjection.rb:128:20:128:32 | ... + ... [element] | semmle.label | ... + ... [element] | -| ActiveRecordInjection.rb:128:28:128:32 | uidEq | semmle.label | uidEq | -| ActiveRecordInjection.rb:161:21:161:26 | call to params | semmle.label | call to params | -| ActiveRecordInjection.rb:161:21:161:44 | ...[...] | semmle.label | ...[...] | -| ActiveRecordInjection.rb:161:21:161:44 | ...[...] | semmle.label | ...[...] | -| ActiveRecordInjection.rb:175:27:175:76 | "this is an unsafe annotation:..." | semmle.label | "this is an unsafe annotation:..." | -| ActiveRecordInjection.rb:175:59:175:64 | call to params | semmle.label | call to params | -| ActiveRecordInjection.rb:175:59:175:74 | ...[...] | semmle.label | ...[...] | -| ActiveRecordInjection.rb:186:5:186:13 | my_params | semmle.label | my_params | -| ActiveRecordInjection.rb:186:17:186:32 | call to permitted_params | semmle.label | call to permitted_params | -| ActiveRecordInjection.rb:187:5:187:9 | query | semmle.label | query | -| ActiveRecordInjection.rb:187:47:187:55 | my_params | semmle.label | my_params | -| ActiveRecordInjection.rb:187:47:187:65 | ...[...] | semmle.label | ...[...] | -| ActiveRecordInjection.rb:188:37:188:41 | query | semmle.label | query | -| ActiveRecordInjection.rb:193:5:193:10 | call to params | semmle.label | call to params | -| ActiveRecordInjection.rb:193:5:193:27 | call to require | semmle.label | call to require | -| ActiveRecordInjection.rb:193:5:193:59 | call to permit | semmle.label | call to permit | -| ActiveRecordInjection.rb:197:43:197:104 | "SELECT * FROM users WHERE id ..." | semmle.label | "SELECT * FROM users WHERE id ..." | -| ActiveRecordInjection.rb:197:77:197:92 | call to permitted_params | semmle.label | call to permitted_params | -| ActiveRecordInjection.rb:197:77:197:102 | ...[...] | semmle.label | ...[...] | -| ActiveRecordInjection.rb:198:35:198:96 | "SELECT * FROM users WHERE id ..." | semmle.label | "SELECT * FROM users WHERE id ..." | -| ActiveRecordInjection.rb:198:69:198:84 | call to permitted_params | semmle.label | call to permitted_params | -| ActiveRecordInjection.rb:198:69:198:94 | ...[...] | semmle.label | ...[...] | +| ActiveRecordInjection.rb:120:19:120:24 | call to params | semmle.label | call to params | +| ActiveRecordInjection.rb:120:19:120:30 | ...[...] | semmle.label | ...[...] | +| ActiveRecordInjection.rb:122:29:122:34 | call to params | semmle.label | call to params | +| ActiveRecordInjection.rb:122:29:122:39 | ...[...] | semmle.label | ...[...] | +| ActiveRecordInjection.rb:128:5:128:6 | ps | semmle.label | ps | +| ActiveRecordInjection.rb:128:10:128:15 | call to params | semmle.label | call to params | +| ActiveRecordInjection.rb:129:5:129:7 | uid | semmle.label | uid | +| ActiveRecordInjection.rb:129:11:129:12 | ps | semmle.label | ps | +| ActiveRecordInjection.rb:129:11:129:17 | ...[...] | semmle.label | ...[...] | +| ActiveRecordInjection.rb:130:5:130:9 | uidEq | semmle.label | uidEq | +| ActiveRecordInjection.rb:134:20:134:32 | ... + ... | semmle.label | ... + ... | +| ActiveRecordInjection.rb:134:20:134:32 | ... + ... [element] | semmle.label | ... + ... [element] | +| ActiveRecordInjection.rb:134:28:134:32 | uidEq | semmle.label | uidEq | +| ActiveRecordInjection.rb:167:21:167:26 | call to params | semmle.label | call to params | +| ActiveRecordInjection.rb:167:21:167:44 | ...[...] | semmle.label | ...[...] | +| ActiveRecordInjection.rb:167:21:167:44 | ...[...] | semmle.label | ...[...] | +| ActiveRecordInjection.rb:181:27:181:76 | "this is an unsafe annotation:..." | semmle.label | "this is an unsafe annotation:..." | +| ActiveRecordInjection.rb:181:59:181:64 | call to params | semmle.label | call to params | +| ActiveRecordInjection.rb:181:59:181:74 | ...[...] | semmle.label | ...[...] | +| ActiveRecordInjection.rb:192:5:192:13 | my_params | semmle.label | my_params | +| ActiveRecordInjection.rb:192:17:192:32 | call to permitted_params | semmle.label | call to permitted_params | +| ActiveRecordInjection.rb:193:5:193:9 | query | semmle.label | query | +| ActiveRecordInjection.rb:193:47:193:55 | my_params | semmle.label | my_params | +| ActiveRecordInjection.rb:193:47:193:65 | ...[...] | semmle.label | ...[...] | +| ActiveRecordInjection.rb:194:37:194:41 | query | semmle.label | query | +| ActiveRecordInjection.rb:199:5:199:10 | call to params | semmle.label | call to params | +| ActiveRecordInjection.rb:199:5:199:27 | call to require | semmle.label | call to require | +| ActiveRecordInjection.rb:199:5:199:59 | call to permit | semmle.label | call to permit | +| ActiveRecordInjection.rb:203:43:203:104 | "SELECT * FROM users WHERE id ..." | semmle.label | "SELECT * FROM users WHERE id ..." | +| ActiveRecordInjection.rb:203:77:203:92 | call to permitted_params | semmle.label | call to permitted_params | +| ActiveRecordInjection.rb:203:77:203:102 | ...[...] | semmle.label | ...[...] | +| ActiveRecordInjection.rb:204:35:204:96 | "SELECT * FROM users WHERE id ..." | semmle.label | "SELECT * FROM users WHERE id ..." | +| ActiveRecordInjection.rb:204:69:204:84 | call to permitted_params | semmle.label | call to permitted_params | +| ActiveRecordInjection.rb:204:69:204:94 | ...[...] | semmle.label | ...[...] | | ArelInjection.rb:4:5:4:8 | name | semmle.label | name | | ArelInjection.rb:4:12:4:17 | call to params | semmle.label | call to params | | ArelInjection.rb:4:12:4:29 | ...[...] | semmle.label | ...[...] | @@ -213,7 +223,7 @@ subpaths #select | ActiveRecordInjection.rb:10:33:10:67 | "name='#{...}' and pass='#{...}'" | ActiveRecordInjection.rb:70:23:70:28 | call to params | ActiveRecordInjection.rb:10:33:10:67 | "name='#{...}' and pass='#{...}'" | This SQL query depends on a $@. | ActiveRecordInjection.rb:70:23:70:28 | call to params | user-provided value | | ActiveRecordInjection.rb:10:33:10:67 | "name='#{...}' and pass='#{...}'" | ActiveRecordInjection.rb:70:38:70:43 | call to params | ActiveRecordInjection.rb:10:33:10:67 | "name='#{...}' and pass='#{...}'" | This SQL query depends on a $@. | ActiveRecordInjection.rb:70:38:70:43 | call to params | user-provided value | -| ActiveRecordInjection.rb:23:16:23:24 | condition | ActiveRecordInjection.rb:161:21:161:26 | call to params | ActiveRecordInjection.rb:23:16:23:24 | condition | This SQL query depends on a $@. | ActiveRecordInjection.rb:161:21:161:26 | call to params | user-provided value | +| ActiveRecordInjection.rb:23:16:23:24 | condition | ActiveRecordInjection.rb:167:21:167:26 | call to params | ActiveRecordInjection.rb:23:16:23:24 | condition | This SQL query depends on a $@. | ActiveRecordInjection.rb:167:21:167:26 | call to params | user-provided value | | ActiveRecordInjection.rb:35:30:35:44 | ...[...] | ActiveRecordInjection.rb:35:30:35:35 | call to params | ActiveRecordInjection.rb:35:30:35:44 | ...[...] | This SQL query depends on a $@. | ActiveRecordInjection.rb:35:30:35:35 | call to params | user-provided value | | ActiveRecordInjection.rb:39:18:39:32 | ...[...] | ActiveRecordInjection.rb:39:18:39:23 | call to params | ActiveRecordInjection.rb:39:18:39:32 | ...[...] | This SQL query depends on a $@. | ActiveRecordInjection.rb:39:18:39:23 | call to params | user-provided value | | ActiveRecordInjection.rb:43:20:43:42 | "id = '#{...}'" | ActiveRecordInjection.rb:43:29:43:34 | call to params | ActiveRecordInjection.rb:43:20:43:42 | "id = '#{...}'" | This SQL query depends on a $@. | ActiveRecordInjection.rb:43:29:43:34 | call to params | user-provided value | @@ -239,12 +249,14 @@ subpaths | ActiveRecordInjection.rb:113:21:113:35 | ...[...] | ActiveRecordInjection.rb:113:21:113:26 | call to params | ActiveRecordInjection.rb:113:21:113:35 | ...[...] | This SQL query depends on a $@. | ActiveRecordInjection.rb:113:21:113:26 | call to params | user-provided value | | ActiveRecordInjection.rb:114:20:114:34 | ...[...] | ActiveRecordInjection.rb:114:20:114:25 | call to params | ActiveRecordInjection.rb:114:20:114:34 | ...[...] | This SQL query depends on a $@. | ActiveRecordInjection.rb:114:20:114:25 | call to params | user-provided value | | ActiveRecordInjection.rb:116:23:116:47 | ...[...] | ActiveRecordInjection.rb:116:23:116:28 | call to params | ActiveRecordInjection.rb:116:23:116:47 | ...[...] | This SQL query depends on a $@. | ActiveRecordInjection.rb:116:23:116:28 | call to params | user-provided value | -| ActiveRecordInjection.rb:128:20:128:32 | ... + ... | ActiveRecordInjection.rb:122:10:122:15 | call to params | ActiveRecordInjection.rb:128:20:128:32 | ... + ... | This SQL query depends on a $@. | ActiveRecordInjection.rb:122:10:122:15 | call to params | user-provided value | -| ActiveRecordInjection.rb:161:21:161:44 | ...[...] | ActiveRecordInjection.rb:161:21:161:26 | call to params | ActiveRecordInjection.rb:161:21:161:44 | ...[...] | This SQL query depends on a $@. | ActiveRecordInjection.rb:161:21:161:26 | call to params | user-provided value | -| ActiveRecordInjection.rb:175:27:175:76 | "this is an unsafe annotation:..." | ActiveRecordInjection.rb:175:59:175:64 | call to params | ActiveRecordInjection.rb:175:27:175:76 | "this is an unsafe annotation:..." | This SQL query depends on a $@. | ActiveRecordInjection.rb:175:59:175:64 | call to params | user-provided value | -| ActiveRecordInjection.rb:188:37:188:41 | query | ActiveRecordInjection.rb:193:5:193:10 | call to params | ActiveRecordInjection.rb:188:37:188:41 | query | This SQL query depends on a $@. | ActiveRecordInjection.rb:193:5:193:10 | call to params | user-provided value | -| ActiveRecordInjection.rb:197:43:197:104 | "SELECT * FROM users WHERE id ..." | ActiveRecordInjection.rb:193:5:193:10 | call to params | ActiveRecordInjection.rb:197:43:197:104 | "SELECT * FROM users WHERE id ..." | This SQL query depends on a $@. | ActiveRecordInjection.rb:193:5:193:10 | call to params | user-provided value | -| ActiveRecordInjection.rb:198:35:198:96 | "SELECT * FROM users WHERE id ..." | ActiveRecordInjection.rb:193:5:193:10 | call to params | ActiveRecordInjection.rb:198:35:198:96 | "SELECT * FROM users WHERE id ..." | This SQL query depends on a $@. | ActiveRecordInjection.rb:193:5:193:10 | call to params | user-provided value | +| ActiveRecordInjection.rb:120:19:120:30 | ...[...] | ActiveRecordInjection.rb:120:19:120:24 | call to params | ActiveRecordInjection.rb:120:19:120:30 | ...[...] | This SQL query depends on a $@. | ActiveRecordInjection.rb:120:19:120:24 | call to params | user-provided value | +| ActiveRecordInjection.rb:122:29:122:39 | ...[...] | ActiveRecordInjection.rb:122:29:122:34 | call to params | ActiveRecordInjection.rb:122:29:122:39 | ...[...] | This SQL query depends on a $@. | ActiveRecordInjection.rb:122:29:122:34 | call to params | user-provided value | +| ActiveRecordInjection.rb:134:20:134:32 | ... + ... | ActiveRecordInjection.rb:128:10:128:15 | call to params | ActiveRecordInjection.rb:134:20:134:32 | ... + ... | This SQL query depends on a $@. | ActiveRecordInjection.rb:128:10:128:15 | call to params | user-provided value | +| ActiveRecordInjection.rb:167:21:167:44 | ...[...] | ActiveRecordInjection.rb:167:21:167:26 | call to params | ActiveRecordInjection.rb:167:21:167:44 | ...[...] | This SQL query depends on a $@. | ActiveRecordInjection.rb:167:21:167:26 | call to params | user-provided value | +| ActiveRecordInjection.rb:181:27:181:76 | "this is an unsafe annotation:..." | ActiveRecordInjection.rb:181:59:181:64 | call to params | ActiveRecordInjection.rb:181:27:181:76 | "this is an unsafe annotation:..." | This SQL query depends on a $@. | ActiveRecordInjection.rb:181:59:181:64 | call to params | user-provided value | +| ActiveRecordInjection.rb:194:37:194:41 | query | ActiveRecordInjection.rb:199:5:199:10 | call to params | ActiveRecordInjection.rb:194:37:194:41 | query | This SQL query depends on a $@. | ActiveRecordInjection.rb:199:5:199:10 | call to params | user-provided value | +| ActiveRecordInjection.rb:203:43:203:104 | "SELECT * FROM users WHERE id ..." | ActiveRecordInjection.rb:199:5:199:10 | call to params | ActiveRecordInjection.rb:203:43:203:104 | "SELECT * FROM users WHERE id ..." | This SQL query depends on a $@. | ActiveRecordInjection.rb:199:5:199:10 | call to params | user-provided value | +| ActiveRecordInjection.rb:204:35:204:96 | "SELECT * FROM users WHERE id ..." | ActiveRecordInjection.rb:199:5:199:10 | call to params | ActiveRecordInjection.rb:204:35:204:96 | "SELECT * FROM users WHERE id ..." | This SQL query depends on a $@. | ActiveRecordInjection.rb:199:5:199:10 | call to params | user-provided value | | ArelInjection.rb:6:20:6:61 | "SELECT * FROM users WHERE nam..." | ArelInjection.rb:4:12:4:17 | call to params | ArelInjection.rb:6:20:6:61 | "SELECT * FROM users WHERE nam..." | This SQL query depends on a $@. | ArelInjection.rb:4:12:4:17 | call to params | user-provided value | | ArelInjection.rb:7:39:7:80 | "SELECT * FROM users WHERE nam..." | ArelInjection.rb:4:12:4:17 | call to params | ArelInjection.rb:7:39:7:80 | "SELECT * FROM users WHERE nam..." | This SQL query depends on a $@. | ArelInjection.rb:4:12:4:17 | call to params | user-provided value | | PgInjection.rb:14:15:14:18 | qry1 | PgInjection.rb:6:12:6:17 | call to params | PgInjection.rb:14:15:14:18 | qry1 | This SQL query depends on a $@. | PgInjection.rb:6:12:6:17 | call to params | user-provided value | diff --git a/ruby/ql/test/query-tests/security/cwe-094/UnsafeCodeConstruction/UnsafeCodeConstruction.expected b/ruby/ql/test/query-tests/security/cwe-094/UnsafeCodeConstruction/UnsafeCodeConstruction.expected index 8af3ed306de..4ff7b8aa338 100644 --- a/ruby/ql/test/query-tests/security/cwe-094/UnsafeCodeConstruction/UnsafeCodeConstruction.expected +++ b/ruby/ql/test/query-tests/security/cwe-094/UnsafeCodeConstruction/UnsafeCodeConstruction.expected @@ -5,7 +5,8 @@ edges | impl/unsafeCode.rb:28:17:28:22 | my_arr | impl/unsafeCode.rb:29:10:29:15 | my_arr | provenance | | | impl/unsafeCode.rb:32:21:32:21 | x | impl/unsafeCode.rb:33:12:33:12 | x | provenance | | | impl/unsafeCode.rb:33:5:33:7 | arr [element 0] | impl/unsafeCode.rb:34:10:34:12 | arr | provenance | | -| impl/unsafeCode.rb:33:12:33:12 | x | impl/unsafeCode.rb:33:5:33:7 | arr [element 0] | provenance | | +| impl/unsafeCode.rb:33:11:33:23 | call to [] [element 0] | impl/unsafeCode.rb:33:5:33:7 | arr [element 0] | provenance | | +| impl/unsafeCode.rb:33:12:33:12 | x | impl/unsafeCode.rb:33:11:33:23 | call to [] [element 0] | provenance | | | impl/unsafeCode.rb:37:15:37:15 | x | impl/unsafeCode.rb:39:14:39:14 | x | provenance | | | impl/unsafeCode.rb:39:5:39:7 | [post] arr [element] | impl/unsafeCode.rb:40:10:40:12 | arr | provenance | | | impl/unsafeCode.rb:39:5:39:7 | [post] arr [element] | impl/unsafeCode.rb:44:10:44:12 | arr | provenance | | @@ -18,9 +19,11 @@ edges | impl/unsafeCode.rb:60:11:60:18 | call to Array [element 0] | impl/unsafeCode.rb:60:5:60:7 | arr [element 0] | provenance | | | impl/unsafeCode.rb:60:17:60:17 | x | impl/unsafeCode.rb:60:11:60:18 | call to Array [element 0] | provenance | | | impl/unsafeCode.rb:63:5:63:8 | arr2 [element 0] | impl/unsafeCode.rb:64:10:64:13 | arr2 | provenance | | +| impl/unsafeCode.rb:63:12:63:43 | call to [] [element 0] | impl/unsafeCode.rb:63:5:63:8 | arr2 [element 0] | provenance | | | impl/unsafeCode.rb:63:13:63:32 | call to Array [element 1] | impl/unsafeCode.rb:63:13:63:42 | call to join | provenance | | -| impl/unsafeCode.rb:63:13:63:42 | call to join | impl/unsafeCode.rb:63:5:63:8 | arr2 [element 0] | provenance | | -| impl/unsafeCode.rb:63:30:63:30 | y | impl/unsafeCode.rb:63:13:63:32 | call to Array [element 1] | provenance | | +| impl/unsafeCode.rb:63:13:63:42 | call to join | impl/unsafeCode.rb:63:12:63:43 | call to [] [element 0] | provenance | | +| impl/unsafeCode.rb:63:19:63:31 | call to [] [element 1] | impl/unsafeCode.rb:63:13:63:32 | call to Array [element 1] | provenance | | +| impl/unsafeCode.rb:63:30:63:30 | y | impl/unsafeCode.rb:63:19:63:31 | call to [] [element 1] | provenance | | nodes | impl/unsafeCode.rb:2:12:2:17 | target | semmle.label | target | | impl/unsafeCode.rb:3:17:3:25 | #{...} | semmle.label | #{...} | @@ -32,6 +35,7 @@ nodes | impl/unsafeCode.rb:29:10:29:15 | my_arr | semmle.label | my_arr | | impl/unsafeCode.rb:32:21:32:21 | x | semmle.label | x | | impl/unsafeCode.rb:33:5:33:7 | arr [element 0] | semmle.label | arr [element 0] | +| impl/unsafeCode.rb:33:11:33:23 | call to [] [element 0] | semmle.label | call to [] [element 0] | | impl/unsafeCode.rb:33:12:33:12 | x | semmle.label | x | | impl/unsafeCode.rb:34:10:34:12 | arr | semmle.label | arr | | impl/unsafeCode.rb:37:15:37:15 | x | semmle.label | x | @@ -50,8 +54,10 @@ nodes | impl/unsafeCode.rb:60:17:60:17 | x | semmle.label | x | | impl/unsafeCode.rb:61:10:61:12 | arr | semmle.label | arr | | impl/unsafeCode.rb:63:5:63:8 | arr2 [element 0] | semmle.label | arr2 [element 0] | +| impl/unsafeCode.rb:63:12:63:43 | call to [] [element 0] | semmle.label | call to [] [element 0] | | impl/unsafeCode.rb:63:13:63:32 | call to Array [element 1] | semmle.label | call to Array [element 1] | | impl/unsafeCode.rb:63:13:63:42 | call to join | semmle.label | call to join | +| impl/unsafeCode.rb:63:19:63:31 | call to [] [element 1] | semmle.label | call to [] [element 1] | | impl/unsafeCode.rb:63:30:63:30 | y | semmle.label | y | | impl/unsafeCode.rb:64:10:64:13 | arr2 | semmle.label | arr2 | subpaths diff --git a/ruby/ql/test/query-tests/security/cwe-312/CleartextLogging.expected b/ruby/ql/test/query-tests/security/cwe-312/CleartextLogging.expected index cb29945fbee..bf95f464117 100644 --- a/ruby/ql/test/query-tests/security/cwe-312/CleartextLogging.expected +++ b/ruby/ql/test/query-tests/security/cwe-312/CleartextLogging.expected @@ -12,7 +12,8 @@ edges | logging.rb:3:1:3:8 | password | logging.rb:28:26:28:33 | password | provenance | | | logging.rb:3:12:3:45 | "043697b96909e03ca907599d6420555f" | logging.rb:3:1:3:8 | password | provenance | | | logging.rb:30:1:30:4 | hsh1 [element :password] | logging.rb:38:20:38:23 | hsh1 [element :password] | provenance | | -| logging.rb:30:20:30:53 | "aec5058e61f7f122998b1a30ee2c66b6" | logging.rb:30:1:30:4 | hsh1 [element :password] | provenance | | +| logging.rb:30:8:30:55 | call to [] [element :password] | logging.rb:30:1:30:4 | hsh1 [element :password] | provenance | | +| logging.rb:30:20:30:53 | "aec5058e61f7f122998b1a30ee2c66b6" | logging.rb:30:8:30:55 | call to [] [element :password] | provenance | | | logging.rb:34:1:34:4 | [post] hsh2 [element :password] | logging.rb:35:1:35:4 | hsh3 [element :password] | provenance | | | logging.rb:34:1:34:4 | [post] hsh2 [element :password] | logging.rb:40:20:40:23 | hsh2 [element :password] | provenance | | | logging.rb:34:19:34:52 | "beeda625d7306b45784d91ea0336e201" | logging.rb:34:1:34:4 | [post] hsh2 [element :password] | provenance | | @@ -53,6 +54,7 @@ nodes | logging.rb:26:18:26:34 | "pw: #{...}" | semmle.label | "pw: #{...}" | | logging.rb:28:26:28:33 | password | semmle.label | password | | logging.rb:30:1:30:4 | hsh1 [element :password] | semmle.label | hsh1 [element :password] | +| logging.rb:30:8:30:55 | call to [] [element :password] | semmle.label | call to [] [element :password] | | logging.rb:30:20:30:53 | "aec5058e61f7f122998b1a30ee2c66b6" | semmle.label | "aec5058e61f7f122998b1a30ee2c66b6" | | logging.rb:34:1:34:4 | [post] hsh2 [element :password] | semmle.label | [post] hsh2 [element :password] | | logging.rb:34:19:34:52 | "beeda625d7306b45784d91ea0336e201" | semmle.label | "beeda625d7306b45784d91ea0336e201" | diff --git a/ruby/ql/test/query-tests/security/cwe-506/HardcodedDataInterpretedAsCode.expected b/ruby/ql/test/query-tests/security/cwe-506/HardcodedDataInterpretedAsCode.expected index 84a46276371..e556d12096d 100644 --- a/ruby/ql/test/query-tests/security/cwe-506/HardcodedDataInterpretedAsCode.expected +++ b/ruby/ql/test/query-tests/security/cwe-506/HardcodedDataInterpretedAsCode.expected @@ -1,6 +1,7 @@ edges | tst.rb:1:7:1:7 | r | tst.rb:2:4:2:4 | r | provenance | | -| tst.rb:2:4:2:4 | r | tst.rb:2:3:2:15 | call to pack | provenance | | +| tst.rb:2:3:2:5 | call to [] [element 0] | tst.rb:2:3:2:15 | call to pack | provenance | | +| tst.rb:2:4:2:4 | r | tst.rb:2:3:2:5 | call to [] [element 0] | provenance | | | tst.rb:5:1:5:23 | totally_harmless_string | tst.rb:7:8:7:30 | totally_harmless_string | provenance | | | tst.rb:5:27:5:72 | "707574732822636f646520696e6a6..." | tst.rb:5:1:5:23 | totally_harmless_string | provenance | | | tst.rb:7:8:7:30 | totally_harmless_string | tst.rb:1:7:1:7 | r | provenance | | @@ -12,6 +13,7 @@ edges | tst.rb:17:6:17:32 | another_questionable_string | tst.rb:17:6:17:38 | call to strip | provenance | | nodes | tst.rb:1:7:1:7 | r | semmle.label | r | +| tst.rb:2:3:2:5 | call to [] [element 0] | semmle.label | call to [] [element 0] | | tst.rb:2:3:2:15 | call to pack | semmle.label | call to pack | | tst.rb:2:4:2:4 | r | semmle.label | r | | tst.rb:5:1:5:23 | totally_harmless_string | semmle.label | totally_harmless_string | diff --git a/shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md b/shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md new file mode 100644 index 00000000000..05a48eb8050 --- /dev/null +++ b/shared/dataflow/change-notes/2024-02-28-hidden-subpaths.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Path explanations now include flow that goes through callbacks passed into library functions. For example, if `map` is a library function, then in `result = map(xs, x => x + 1)` we will now include the step from `x` to `x + 1` in the path explanation, instead of going directly from `xs` to `result`. Note that this change does not affect actual query results, but only how path explanations are computed. diff --git a/shared/dataflow/codeql/dataflow/DataFlow.qll b/shared/dataflow/codeql/dataflow/DataFlow.qll index bad80247861..8df2a8eca52 100644 --- a/shared/dataflow/codeql/dataflow/DataFlow.qll +++ b/shared/dataflow/codeql/dataflow/DataFlow.qll @@ -4,22 +4,19 @@ * modules. */ +private import codeql.util.Location + /** Provides language-specific data flow parameters. */ -signature module InputSig { +signature module InputSig { + /** + * A node in the data flow graph. + */ class Node { /** Gets a textual representation of this element. */ string toString(); - /** - * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. - * For more information, see - * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). - */ - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ); + /** Gets the location of this node. */ + Location getLocation(); } class ParameterNode extends Node; @@ -30,9 +27,27 @@ signature module InputSig { ReturnKind getKind(); } + /** + * A node in the data flow graph that represents an output of a call. + */ class OutNode extends Node; + /** + * A node in the data flow graph representing the value of some other node + * after an operation that might have changed its state. A typical example is + * an argument, which may have been modified by the callee. For example, + * consider the following code calling a setter method: + * ``` + * x.setFoo(y); + * ``` + * The post-update node for the argument node `x` is the node representing the + * value of `x` after the field `foo` has been updated. + */ class PostUpdateNode extends Node { + /** + * Gets the pre-update node, that is, the node that represents the same + * value prior to the operation. + */ Node getPreUpdateNode(); } @@ -131,6 +146,12 @@ signature module InputSig { string toString(); } + /** + * Holds if access paths with `c` at their head always should be tracked at + * high precision. This disables adaptive access path precision for such + * access paths. This may be beneficial for content that indicates an + * element of an array or container. + */ predicate forceHighPrecision(Content c); /** @@ -150,11 +171,19 @@ signature module InputSig { Content getAReadContent(); } + /** + * A content approximation. A content approximation corresponds to one or + * more `Content`s, and is used to provide an in-between level of precision + * for pruning. + */ class ContentApprox { /** Gets a textual representation of this element. */ string toString(); } + /** + * Gets the content approximation for content `c`. + */ ContentApprox getContentApprox(Content c); class ParameterPosition { @@ -169,8 +198,16 @@ signature module InputSig { string toString(); } + /** + * Holds if the parameter position `ppos` matches the argument position + * `apos`. + */ predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos); + /** + * Holds if there is a simple local flow step from `node1` to `node2`. These + * are the value-preserving intra-callable flow steps. + */ predicate simpleLocalFlowStep(Node node1, Node node2); /** @@ -278,9 +315,9 @@ signature module InputSig { default predicate ignoreFieldFlowBranchLimit(DataFlowCallable c) { none() } } -module Configs { +module Configs Lang> { private import Lang - private import internal.DataFlowImplCommon::MakeImplCommon + private import internal.DataFlowImplCommon::MakeImplCommon import DataFlowImplCommonPublic /** An input configuration for data flow. */ @@ -333,6 +370,9 @@ module Configs { */ default int fieldFlowBranchLimit() { result = 2 } + /** Gets the access path limit. */ + default int accessPathLimit() { result = Lang::accessPathLimit() } + /** * Gets a data flow configuration feature to add restrictions to the set of * valid flow paths. @@ -452,6 +492,9 @@ module Configs { */ default int fieldFlowBranchLimit() { result = 2 } + /** Gets the access path limit. */ + default int accessPathLimit() { result = Lang::accessPathLimit() } + /** * Gets a data flow configuration feature to add restrictions to the set of * valid flow paths. @@ -488,10 +531,10 @@ module Configs { } } -module DataFlowMake { +module DataFlowMake Lang> { private import Lang - private import internal.DataFlowImpl::MakeImpl - import Configs + private import internal.DataFlowImpl::MakeImpl + import Configs /** * Gets the exploration limit for `partialFlow` and `partialFlowRev` @@ -540,6 +583,8 @@ module DataFlowMake { private module C implements FullStateConfigSig { import DefaultState import Config + + predicate accessPathLimit = Config::accessPathLimit/0; } import Impl @@ -556,6 +601,8 @@ module DataFlowMake { module GlobalWithState implements GlobalFlowSig { private module C implements FullStateConfigSig { import Config + + predicate accessPathLimit = Config::accessPathLimit/0; } import Impl @@ -570,19 +617,11 @@ module DataFlowMake { /** Gets a textual representation of this element. */ string toString(); - /** - * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. - * For more information, see - * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). - */ - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ); - /** Gets the underlying `Node`. */ Node getNode(); + + /** Gets the location of this node. */ + Location getLocation(); } signature module PathGraphSig { @@ -625,6 +664,15 @@ module DataFlowMake { result = this.asPathNode2().toString() } + /** Gets the underlying `Node`. */ + Node getNode() { + result = this.asPathNode1().getNode() or + result = this.asPathNode2().getNode() + } + + /** Gets the location of this node. */ + Location getLocation() { result = this.getNode().getLocation() } + /** * Holds if this element is at the specified location. * The location spans column `startcolumn` of line `startline` to @@ -632,17 +680,10 @@ module DataFlowMake { * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - predicate hasLocationInfo( + deprecated predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { - this.asPathNode1().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) or - this.asPathNode2().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } - - /** Gets the underlying `Node`. */ - Node getNode() { - result = this.asPathNode1().getNode() or - result = this.asPathNode2().getNode() + this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) } } @@ -707,7 +748,7 @@ module DataFlowMake { * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - predicate hasLocationInfo( + deprecated predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) @@ -715,6 +756,9 @@ module DataFlowMake { /** Gets the underlying `Node`. */ Node getNode() { result = super.getNode() } + + /** Gets the location of this node. */ + Location getLocation() { result = super.getLocation() } } /** diff --git a/shared/dataflow/codeql/dataflow/TaintTracking.qll b/shared/dataflow/codeql/dataflow/TaintTracking.qll index 73960fbca1d..c7d4f6bf505 100644 --- a/shared/dataflow/codeql/dataflow/TaintTracking.qll +++ b/shared/dataflow/codeql/dataflow/TaintTracking.qll @@ -5,11 +5,12 @@ private import DataFlow as DF private import internal.DataFlowImpl +private import codeql.util.Location /** * Provides language-specific taint-tracking parameters. */ -signature module InputSig { +signature module InputSig Lang> { /** * Holds if `node` should be a sanitizer in all global taint flow configurations * but not in local taint. @@ -33,10 +34,13 @@ signature module InputSig { /** * Construct the modules for taint-tracking analyses. */ -module TaintFlowMake TaintTrackingLang> { +module TaintFlowMake< + LocationSig Location, DF::InputSig DataFlowLang, + InputSig TaintTrackingLang> +{ private import TaintTrackingLang - private import DF::DataFlowMake as DataFlow - private import MakeImpl as DataFlowInternal + private import DF::DataFlowMake as DataFlow + private import MakeImpl as DataFlowInternal private module AddTaintDefaults implements DataFlowInternal::FullStateConfigSig diff --git a/shared/dataflow/codeql/dataflow/VariableCapture.qll b/shared/dataflow/codeql/dataflow/VariableCapture.qll index e90bf481442..9fd385d4458 100644 --- a/shared/dataflow/codeql/dataflow/VariableCapture.qll +++ b/shared/dataflow/codeql/dataflow/VariableCapture.qll @@ -601,16 +601,22 @@ module Flow Input> implements OutputSig * observed in a similarly synthesized post-update node for this read of `v`. */ private predicate synthRead( - CapturedVariable v, BasicBlock bb, int i, boolean topScope, Expr closure + CapturedVariable v, BasicBlock bb, int i, boolean topScope, Expr closure, boolean alias ) { exists(ClosureExpr ce | closureCaptures(ce, v) | - ce.hasCfgNode(bb, i) and ce = closure + ce.hasCfgNode(bb, i) and ce = closure and alias = false or - localOrNestedClosureAccess(ce, closure, bb, i) + localOrNestedClosureAccess(ce, closure, bb, i) and alias = true ) and if v.getCallable() != bb.getEnclosingCallable() then topScope = false else topScope = true } + private predicate synthRead( + CapturedVariable v, BasicBlock bb, int i, boolean topScope, Expr closure + ) { + synthRead(v, bb, i, topScope, closure, _) + } + /** * Holds if there is an access of a captured variable inside a closure in the * `i`th node of `bb`, such that we need to synthesize a `this.` qualifier. @@ -919,16 +925,22 @@ module Flow Input> implements OutputSig ) } - predicate storeStep(ClosureNode node1, CapturedVariable v, ClosureNode node2) { - // store v in the closure or in the malloc in case of a relevant constructor call + private predicate storeStepClosure( + ClosureNode node1, CapturedVariable v, ClosureNode node2, boolean alias + ) { exists(BasicBlock bb, int i, Expr closure | - synthRead(v, bb, i, _, closure) and + synthRead(v, bb, i, _, closure, alias) and node1 = TSynthRead(v, bb, i, false) | node2 = TExprNode(closure, false) or node2 = TMallocNode(closure) and hasConstructorCapture(closure, v) ) + } + + predicate storeStep(ClosureNode node1, CapturedVariable v, ClosureNode node2) { + // store v in the closure or in the malloc in case of a relevant constructor call + storeStepClosure(node1, v, node2, _) or // write to v inside the closure body exists(BasicBlock bb, int i, VariableWrite vw | @@ -964,6 +976,62 @@ module Flow Input> implements OutputSig } predicate clearsContent(ClosureNode node, CapturedVariable v) { + /* + * Stores into closure aliases block flow from previous stores, both to + * avoid overlapping data flow paths, but also to avoid false positive + * flow. + * + * Example 1 (overlapping paths): + * + * ```rb + * def m + * x = taint + * + * fn = -> { # (1) + * sink x + * } + * + * fn.call # (2) + * ``` + * + * If we don't clear `x` at `fn` (2), we will have two overlapping paths: + * + * ``` + * taint -> fn (2) [captured x] + * taint -> fn (1) [captured x] -> fn (2) [captured x] + * ``` + * + * where the step `fn (1) [captured x] -> fn [captured x]` arises from normal + * use-use flow for `fn`. Clearing `x` at `fn` (2) removes the second path above. + * + * Example 2 (false positive flow): + * + * ```rb + * def m + * x = taint + * + * fn = -> { # (1) + * sink x + * } + * + * x = nil # (2) + * + * fn.call # (3) + * end + * ``` + * + * If we don't clear `x` at `fn` (3), we will have the following false positive + * flow path: + * + * ``` + * taint -> fn (1) [captured x] -> fn (3) [captured x] + * ``` + * + * since normal use-use flow for `fn` does not take the overwrite at (2) into account. + */ + + storeStepClosure(_, v, node, true) + or exists(BasicBlock bb, int i | captureWrite(v, bb, i, false, _) and node = TSynthThisQualifier(bb, i, false) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 840e67e9fa7..b5f99972bec 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -7,12 +7,13 @@ private import codeql.util.Unit private import codeql.util.Option private import codeql.util.Boolean +private import codeql.util.Location private import codeql.dataflow.DataFlow -module MakeImpl { +module MakeImpl Lang> { private import Lang - private import DataFlowMake - private import DataFlowImplCommon::MakeImplCommon + private import DataFlowMake + private import DataFlowImplCommon::MakeImplCommon private import DataFlowImplCommonPublic /** @@ -93,6 +94,9 @@ module MakeImpl { */ int fieldFlowBranchLimit(); + /** Gets the access path limit. */ + int accessPathLimit(); + /** * Gets a data flow configuration feature to add restrictions to the set of * valid flow paths. @@ -192,11 +196,7 @@ module MakeImpl { pragma[only_bind_out](this).getDataFlowType0() = pragma[only_bind_into](result) } - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - this.projectToNode().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } + Location getLocation() { result = this.projectToNode().getLocation() } } private class ArgNodeEx extends NodeEx { @@ -439,15 +439,6 @@ module MakeImpl { ) } - // inline to reduce fan-out via `getAReadContent` - bindingset[c] - private predicate clearsContentEx(NodeEx n, Content c) { - exists(ContentSet cs | - clearsContentCached(n.asNode(), cs) and - pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() - ) - } - // inline to reduce fan-out via `getAReadContent` bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { @@ -486,7 +477,9 @@ module MakeImpl { /** * Holds if field flow should be used for the given configuration. */ - private predicate useFieldFlow() { Config::fieldFlowBranchLimit() >= 1 } + private predicate useFieldFlow() { + Config::fieldFlowBranchLimit() >= 1 and Config::accessPathLimit() > 0 + } private predicate hasSourceCallCtx() { exists(FlowFeature feature | feature = Config::getAFeature() | @@ -588,7 +581,7 @@ module MakeImpl { cc = false or cc = true and - not reducedViableImplInCallContext(call, _, _) + not CachedCallContextSensitivity::reducedViableImplInCallContext(call, _, _) ) or // call context may help reduce virtual dispatch @@ -611,7 +604,7 @@ module MakeImpl { ) { fwdFlow(arg, true) and viableParamArgEx(call, p, arg) and - reducedViableImplInCallContext(call, _, _) and + CachedCallContextSensitivity::reducedViableImplInCallContext(call, _, _) and target = p.getEnclosingCallable() and not fullBarrier(p) } @@ -982,6 +975,14 @@ module MakeImpl { exists(ap) } + predicate relevantCallEdgeIn(DataFlowCall call, DataFlowCallable c) { + callEdgeArgParam(call, c, _, _, _, _) + } + + predicate relevantCallEdgeOut(DataFlowCall call, DataFlowCallable c) { + callEdgeReturn(call, c, _, _, _, _, _) + } + additional predicate stats( boolean fwd, int nodes, int fields, int conscand, int states, int tuples, int calledges ) { @@ -1178,6 +1179,10 @@ module MakeImpl { DataFlowCall call, DataFlowCallable c, RetNodeEx ret, ReturnKindExt kind, NodeEx out, boolean allowsFieldFlow, Ap ap ); + + predicate relevantCallEdgeIn(DataFlowCall call, DataFlowCallable c); + + predicate relevantCallEdgeOut(DataFlowCall call, DataFlowCallable c); } private module MkStage { @@ -1219,7 +1224,9 @@ module MakeImpl { ApOption apSome(Ap ap); - class Cc; + class Cc { + string toString(); + } class CcCall extends Cc; @@ -1731,13 +1738,9 @@ module MakeImpl { private module FwdTypeFlowInput implements TypeFlowInput { predicate enableTypeFlow = Param::enableTypeFlow/0; - predicate relevantCallEdgeIn(DataFlowCall call, DataFlowCallable c) { - PrevStage::callEdgeArgParam(call, c, _, _, _, _) - } + predicate relevantCallEdgeIn = PrevStage::relevantCallEdgeIn/2; - predicate relevantCallEdgeOut(DataFlowCall call, DataFlowCallable c) { - PrevStage::callEdgeReturn(call, c, _, _, _, _, _) - } + predicate relevantCallEdgeOut = PrevStage::relevantCallEdgeOut/2; pragma[nomagic] private predicate dataFlowTakenCallEdgeIn0( @@ -1894,11 +1897,11 @@ module MakeImpl { pragma[nomagic] private predicate returnFlowsThrough( RetNodeEx ret, ReturnPosition pos, FlowState state, CcCall ccc, ParamNodeEx p, Typ argT, - Ap argAp, Ap ap + Ap argAp, ApApprox argApa, Ap ap ) { - exists(DataFlowCall call, ApApprox apa, boolean allowsFieldFlow, ApApprox innerArgApa | - returnFlowsThrough0(call, state, ccc, ap, apa, ret, p, argT, argAp, innerArgApa) and - flowThroughOutOfCall(call, ccc, ret, _, allowsFieldFlow, innerArgApa, apa) and + exists(DataFlowCall call, ApApprox apa, boolean allowsFieldFlow | + returnFlowsThrough0(call, state, ccc, ap, apa, ret, p, argT, argAp, argApa) and + flowThroughOutOfCall(call, ccc, ret, _, allowsFieldFlow, argApa, apa) and pos = ret.getReturnPosition() and if allowsFieldFlow = false then ap instanceof ApNil else any() ) @@ -1910,10 +1913,10 @@ module MakeImpl { ) { exists(ApApprox argApa, Typ argT | returnFlowsThrough(_, _, _, _, pragma[only_bind_into](p), pragma[only_bind_into](argT), - pragma[only_bind_into](argAp), ap) and + pragma[only_bind_into](argAp), pragma[only_bind_into](argApa), ap) and flowIntoCallApaTaken(call, _, pragma[only_bind_into](arg), p, allowsFieldFlow, argApa) and fwdFlow(arg, _, _, _, _, _, pragma[only_bind_into](argT), pragma[only_bind_into](argAp), - argApa) and + pragma[only_bind_into](argApa)) and if allowsFieldFlow = false then argAp instanceof ApNil else any() ) } @@ -2017,7 +2020,7 @@ module MakeImpl { // flow out of a callable exists(ReturnPosition pos | revFlowOut(_, node, pos, state, _, _, _, ap) and - if returnFlowsThrough(node, pos, state, _, _, _, _, ap) + if returnFlowsThrough(node, pos, state, _, _, _, _, _, ap) then ( returnCtx = TReturnCtxMaybeFlowThrough(pos) and returnAp = apSome(ap) @@ -2179,7 +2182,7 @@ module MakeImpl { ) { exists(RetNodeEx ret, FlowState state, CcCall ccc | revFlowOut(call, ret, pos, state, returnCtx, _, returnAp, ap) and - returnFlowsThrough(ret, pos, state, ccc, _, _, _, ap) and + returnFlowsThrough(ret, pos, state, ccc, _, _, _, _, ap) and matchesCall(ccc, call) ) } @@ -2248,7 +2251,7 @@ module MakeImpl { pragma[nomagic] predicate parameterMayFlowThrough(ParamNodeEx p, Ap ap) { exists(ReturnPosition pos | - returnFlowsThrough(_, pos, _, _, p, _, ap, _) and + returnFlowsThrough(_, pos, _, _, p, _, ap, _, _) and parameterFlowsThroughRev(p, ap, pos, _) ) } @@ -2256,7 +2259,7 @@ module MakeImpl { pragma[nomagic] predicate returnMayFlowThrough(RetNodeEx ret, Ap argAp, Ap ap, ReturnKindExt kind) { exists(ParamNodeEx p, ReturnPosition pos | - returnFlowsThrough(ret, pos, _, _, p, _, argAp, ap) and + returnFlowsThrough(ret, pos, _, _, p, _, argAp, _, ap) and parameterFlowsThroughRev(p, argAp, pos, ap) and kind = pos.getKind() ) @@ -2314,6 +2317,14 @@ module MakeImpl { ) } + predicate relevantCallEdgeIn(DataFlowCall call, DataFlowCallable c) { + callEdgeArgParam(call, c, _, _, _, _) + } + + predicate relevantCallEdgeOut(DataFlowCall call, DataFlowCallable c) { + callEdgeReturn(call, c, _, _, _, _, _) + } + additional predicate stats( boolean fwd, int nodes, int fields, int conscand, int states, int tuples, int calledges, int tfnodes, int tftuples @@ -2356,9 +2367,7 @@ module MakeImpl { } private module BooleanCallContext { - class Cc extends boolean { - Cc() { this in [true, false] } - } + class Cc = Boolean; class CcCall extends Cc { CcCall() { this = true } @@ -2398,7 +2407,24 @@ module MakeImpl { CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call) { any() } } - private module Level1CallContext { + private signature module Level1CallContextInputSig { + DataFlowCallable prunedViableImplInCallContext(DataFlowCall call, CallContextSpecificCall ctx); + + bindingset[call, ctx] + predicate noPrunedViableImplInCallContext(DataFlowCall call, CallContext ctx); + + predicate recordDataFlowCallSiteDispatch(DataFlowCall call, DataFlowCallable callable); + + predicate recordDataFlowCallSiteUnreachable(DataFlowCall call, DataFlowCallable callable); + + predicate reducedViableImplInReturn(DataFlowCallable c, DataFlowCall call); + + DataFlowCall prunedViableImplInCallContextReverse( + DataFlowCallable callable, CallContextReturn ctx + ); + } + + private module Level1CallContext { class Cc = CallContext; class CcCall = CallContextCall; @@ -2419,17 +2445,17 @@ module MakeImpl { LocalCc getLocalCc(NodeEx node, Cc cc) { any() } DataFlowCallable viableImplCallContextReduced(DataFlowCall call, CcCall ctx) { - result = prunedViableImplInCallContext(call, ctx) + result = Input::prunedViableImplInCallContext(call, ctx) } bindingset[call, ctx] predicate viableImplNotCallContextReduced(DataFlowCall call, Cc ctx) { - noPrunedViableImplInCallContext(call, ctx) + Input::noPrunedViableImplInCallContext(call, ctx) } bindingset[call, c] CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c) { - if recordDataFlowCallSiteDispatch(call, c) + if Input::recordDataFlowCallSiteDispatch(call, c) then result = TSpecificCall(call) else result = TSomeCall() } @@ -2446,24 +2472,26 @@ module MakeImpl { } DataFlowCallable viableImplCallContextReduced(DataFlowCall call, CcCall ctx) { - result = prunedViableImplInCallContext(call, ctx) + result = Input::prunedViableImplInCallContext(call, ctx) } bindingset[call, ctx] predicate viableImplNotCallContextReduced(DataFlowCall call, Cc ctx) { - noPrunedViableImplInCallContext(call, ctx) + Input::noPrunedViableImplInCallContext(call, ctx) } bindingset[call, c] CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c) { - if recordDataFlowCallSite(call, c) + if + Input::recordDataFlowCallSiteDispatch(call, c) or + Input::recordDataFlowCallSiteUnreachable(call, c) then result = TSpecificCall(call) else result = TSomeCall() } } DataFlowCallable viableImplCallContextReducedReverse(DataFlowCall call, CcNoCall ctx) { - call = prunedViableImplInCallContextReverse(result, ctx) + call = Input::prunedViableImplInCallContextReverse(result, ctx) } predicate viableImplNotCallContextReducedReverse(CcNoCall ctx) { @@ -2472,7 +2500,9 @@ module MakeImpl { bindingset[call, c] CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call) { - if reducedViableImplInReturn(c, call) then result = TReturn(c, call) else result = ccNone() + if Input::reducedViableImplInReturn(c, call) + then result = TReturn(c, call) + else result = ccNone() } } @@ -2494,7 +2524,10 @@ module MakeImpl { bindingset[c, t, tail] Ap apCons(Content c, Typ t, Ap tail) { - result = true and exists(c) and exists(t) and exists(tail) + result = true and + exists(c) and + exists(t) and + if tail = true then Config::accessPathLimit() > 1 else any() } class ApHeadContent = Unit; @@ -2510,7 +2543,11 @@ module MakeImpl { ApOption apSome(Ap ap) { result = TBooleanSome(ap) } - import Level1CallContext + private module Level1CallContextInput implements Level1CallContextInputSig { + import CachedCallContextSensitivity + } + + import Level1CallContext import NoLocalCallContext bindingset[node1, state1] @@ -2780,7 +2817,23 @@ module MakeImpl { ApOption apSome(Ap ap) { result = TApproxAccessPathFrontSome(ap) } - import Level1CallContext + additional module Level1CallContextInput implements Level1CallContextInputSig { + private module CallContextSensitivityInput implements CallContextSensitivityInputSig { + predicate relevantCallEdgeIn = PrevStage::relevantCallEdgeIn/2; + + predicate relevantCallEdgeOut = PrevStage::relevantCallEdgeOut/2; + + predicate reducedViableImplInCallContextCand = + CachedCallContextSensitivity::reducedViableImplInCallContext/3; + + predicate reducedViableImplInReturnCand = + CachedCallContextSensitivity::reducedViableImplInReturn/2; + } + + import CallContextSensitivity + } + + import Level1CallContext import NoLocalCallContext predicate localStep( @@ -2887,16 +2940,24 @@ module MakeImpl { } pragma[nomagic] - private predicate clearContent(NodeEx node, Content c) { + additional predicate clearContent(NodeEx node, Content c, boolean isStoreTarget) { exists(ContentSet cs | PrevStage::readStepCand(_, pragma[only_bind_into](c), _) and c = cs.getAReadContent() and - clearSet(node, cs) + clearSet(node, cs) and + if PrevStage::storeStepCand(_, _, _, node, _, _) + then isStoreTarget = true + else isStoreTarget = false ) } pragma[nomagic] - private predicate clear(NodeEx node, Ap ap) { clearContent(node, ap.getHead()) } + private predicate clear(NodeEx node, Ap ap) { + // When `node` is the target of a store, we interpret `clearsContent` as + // only pertaining to _earlier_ store steps. In this case, we need to postpone + // checking `clearsContent` to the `pathStep` predicate + clearContent(node, ap.getHead(), false) + } pragma[nomagic] private predicate expectsContentCand(NodeEx node, Ap ap) { @@ -2970,11 +3031,11 @@ module MakeImpl { } or TConsCons(Content c1, DataFlowType t, Content c2, int len) { Stage4::consCand(c1, t, TFrontHead(c2)) and - len in [2 .. accessPathLimit()] and + len in [2 .. Config::accessPathLimit()] and not expensiveLen2unfolding(c1) } or TCons1(Content c, int len) { - len in [1 .. accessPathLimit()] and + len in [1 .. Config::accessPathLimit()] and expensiveLen2unfolding(c) } @@ -3148,7 +3209,23 @@ module MakeImpl { ApOption apSome(Ap ap) { result = TAccessPathApproxSome(ap) } - import Level1CallContext + additional module Level1CallContextInput implements Level1CallContextInputSig { + private module CallContextSensitivityInput implements CallContextSensitivityInputSig { + predicate relevantCallEdgeIn = PrevStage::relevantCallEdgeIn/2; + + predicate relevantCallEdgeOut = PrevStage::relevantCallEdgeOut/2; + + predicate reducedViableImplInCallContextCand = + Stage3Param::Level1CallContextInput::reducedViableImplInCallContext/3; + + predicate reducedViableImplInReturnCand = + Stage3Param::Level1CallContextInput::reducedViableImplInReturn/2; + } + + import CallContextSensitivity + } + + import Level1CallContext import LocalCallContext predicate localStep( @@ -3233,11 +3310,7 @@ module MakeImpl { override string toString() { result = p + concat(" : " + ppReprType(t)) + " " + ap } - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - p.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } + Location getLocation() { result = p.getLocation() } } /** @@ -3418,6 +3491,16 @@ module MakeImpl { /** Gets a textual representation of this access path. */ abstract string toString(); + + /** Holds if `node`, which is the target of a store step, clears data stored in this access path. */ + pragma[nomagic] + predicate storeTargetIsClearedAt(NodeEx node) { + exists(AccessPathApprox apa | + apa = this.getApprox() and + Stage5::revFlowAp(node, apa) and + Stage4Param::clearContent(node, apa.getHead(), true) + ) + } } private class AccessPathNil extends AccessPath, TAccessPathNil { @@ -3645,18 +3728,8 @@ module MakeImpl { this.ppSummaryCtx() } - /** - * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. - * For more information, see - * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). - */ - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - this.getNodeEx().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } + /** Gets the location of this node. */ + Location getLocation() { result = this.getNodeEx().getLocation() } } /** Holds if `n` can reach a sink. */ @@ -3692,6 +3765,9 @@ module MakeImpl { */ final string toStringWithContext() { result = super.toStringWithContext() } + /** Gets the location of this node. */ + Location getLocation() { result = super.getLocation() } + /** * Holds if this element is at the specified location. * The location spans column `startcolumn` of line `startline` to @@ -3699,10 +3775,11 @@ module MakeImpl { * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - final predicate hasLocationInfo( + pragma[inline] + deprecated final predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { - super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) } /** Gets the underlying `Node`. */ @@ -3864,11 +3941,7 @@ module MakeImpl { override string toString() { result = sourceGroup } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - filepath = "" and startline = 0 and startcolumn = 0 and endline = 0 and endcolumn = 0 - } + override Location getLocation() { result.hasLocationInfo("", 0, 0, 0, 0) } } private class PathNodeSinkGroup extends PathNodeImpl, TPathNodeSinkGroup { @@ -3886,11 +3959,7 @@ module MakeImpl { override string toString() { result = sinkGroup } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - filepath = "" and startline = 0 and startcolumn = 0 and endline = 0 and endcolumn = 0 - } + override Location getLocation() { result.hasLocationInfo("", 0, 0, 0, 0) } } private predicate pathNode( @@ -3912,11 +3981,13 @@ module MakeImpl { PathNodeMid mid, NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, AccessPath ap ) { - exists(DataFlowType t0 | - pathStep0(mid, node, state, cc, sc, t0, ap) and - Stage5::revFlow(node, state, ap.getApprox()) and + exists(DataFlowType t0, boolean isStoreStep | + pathStep0(mid, pragma[only_bind_into](node), pragma[only_bind_into](state), cc, sc, t0, ap, + isStoreStep) and + Stage5::revFlow(pragma[only_bind_into](node), pragma[only_bind_into](state), ap.getApprox()) and strengthenType(node, t0, t) and - not inBarrier(node, state) + not inBarrier(node, state) and + if ap.storeTargetIsClearedAt(node) then isStoreStep = true else any() ) } @@ -3927,17 +3998,19 @@ module MakeImpl { pragma[nomagic] private predicate pathStep0( PathNodeMid mid, NodeEx node, FlowState state, CallContext cc, SummaryCtx sc, DataFlowType t, - AccessPath ap + AccessPath ap, boolean isStoreStep ) { exists(NodeEx midnode, FlowState state0, LocalCallContext localCC | pathNode(mid, midnode, state0, cc, sc, t, ap, localCC) and - localFlowBigStep(midnode, state0, node, state, true, _, localCC) + localFlowBigStep(midnode, state0, node, state, true, _, localCC) and + isStoreStep = false ) or exists(NodeEx midnode, FlowState state0, LocalCallContext localCC | pathNode(mid, midnode, state0, cc, sc, _, ap, localCC) and localFlowBigStep(midnode, state0, node, state, false, t, localCC) and - ap instanceof AccessPathNil + ap instanceof AccessPathNil and + isStoreStep = false ) or jumpStepEx(mid.getNodeExOutgoing(), node) and @@ -3945,7 +4018,8 @@ module MakeImpl { cc instanceof CallContextAny and sc instanceof SummaryCtxNone and t = mid.getType() and - ap = mid.getAp() + ap = mid.getAp() and + isStoreStep = false or additionalJumpStep(mid.getNodeExOutgoing(), node) and state = mid.getState() and @@ -3953,35 +4027,45 @@ module MakeImpl { sc instanceof SummaryCtxNone and mid.getAp() instanceof AccessPathNil and t = node.getDataFlowType() and - ap = TAccessPathNil() + ap = TAccessPathNil() and + isStoreStep = false or additionalJumpStateStep(mid.getNodeExOutgoing(), mid.getState(), node, state) and cc instanceof CallContextAny and sc instanceof SummaryCtxNone and mid.getAp() instanceof AccessPathNil and t = node.getDataFlowType() and - ap = TAccessPathNil() + ap = TAccessPathNil() and + isStoreStep = false or exists(Content c, DataFlowType t0, AccessPath ap0 | pathStoreStep(mid, node, state, t0, ap0, c, t, cc) and ap.isCons(c, t0, ap0) and - sc = mid.getSummaryCtx() + sc = mid.getSummaryCtx() and + isStoreStep = true ) or exists(Content c, AccessPath ap0 | pathReadStep(mid, node, state, ap0, c, cc) and ap0.isCons(c, t, ap) and - sc = mid.getSummaryCtx() + sc = mid.getSummaryCtx() and + isStoreStep = false ) or - pathIntoCallable(mid, node, state, _, cc, sc, _) and t = mid.getType() and ap = mid.getAp() + pathIntoCallable(mid, node, state, _, cc, sc, _) and + t = mid.getType() and + ap = mid.getAp() and + isStoreStep = false or pathOutOfCallable(mid, node, state, cc) and t = mid.getType() and ap = mid.getAp() and - sc instanceof SummaryCtxNone + sc instanceof SummaryCtxNone and + isStoreStep = false or - pathThroughCallable(mid, node, state, cc, t, ap) and sc = mid.getSummaryCtx() + pathThroughCallable(mid, node, state, cc, t, ap) and + sc = mid.getSummaryCtx() and + isStoreStep = false } pragma[nomagic] @@ -4026,6 +4110,22 @@ module MakeImpl { ) } + private module PrunedCallContextSensitivityStage5 { + private module CallContextSensitivityInput implements CallContextSensitivityInputSig { + predicate relevantCallEdgeIn = Stage5::relevantCallEdgeIn/2; + + predicate relevantCallEdgeOut = Stage5::relevantCallEdgeOut/2; + + predicate reducedViableImplInCallContextCand = + Stage5Param::Level1CallContextInput::reducedViableImplInCallContext/3; + + predicate reducedViableImplInReturnCand = + Stage5Param::Level1CallContextInput::reducedViableImplInReturn/2; + } + + import CallContextSensitivity + } + pragma[nomagic] private predicate pathOutOfCallable1( PathNodeMid mid, DataFlowCall call, ReturnKindExt kind, FlowState state, CallContext cc, @@ -4035,9 +4135,11 @@ module MakeImpl { pathOutOfCallable0(mid, pos, state, innercc, apa) and c = pos.getCallable() and kind = pos.getKind() and - resolveReturn(innercc, c, call) + PrunedCallContextSensitivityStage5::resolveReturn(innercc, c, call) | - if reducedViableImplInReturn(c, call) then cc = TReturn(c, call) else cc = TAnyCallContext() + if PrunedCallContextSensitivityStage5::reducedViableImplInReturn(c, call) + then cc = TReturn(c, call) + else cc = TAnyCallContext() ) } @@ -4087,8 +4189,6 @@ module MakeImpl { ) } - private predicate parameterCandProj(DataFlowCallable c) { parameterCand(c, _, _) } - pragma[nomagic] private predicate pathIntoCallable0( PathNodeMid mid, DataFlowCallable callable, ParameterPosition pos, FlowState state, @@ -4097,7 +4197,7 @@ module MakeImpl { exists(AccessPathApprox apa | pathIntoArg(mid, pragma[only_bind_into](pos), state, outercc, call, t, ap, pragma[only_bind_into](apa)) and - callable = ResolveCall::resolveCall(call, outercc) and + callable = PrunedCallContextSensitivityStage5::resolveCall(call, outercc) and parameterCand(callable, pragma[only_bind_into](pos), pragma[only_bind_into](apa)) ) } @@ -4127,7 +4227,7 @@ module MakeImpl { not Config::getAFeature() instanceof FeatureEqualSourceSinkCallContext ) | - if recordDataFlowCallSite(call, callable) + if PrunedCallContextSensitivityStage5::recordDataFlowCallSite(call, callable) then innercc = TSpecificCall(call) else innercc = TSomeCall() ) @@ -4187,8 +4287,7 @@ module MakeImpl { pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, - pragma[only_bind_into](t), pragma[only_bind_into](apout), _) and - not arg.isHidden() + pragma[only_bind_into](t), pragma[only_bind_into](apout), _) } /** @@ -4219,9 +4318,8 @@ module MakeImpl { ) } - private PathNodeImpl localStepToHidden(PathNodeImpl n) { + private PathNodeImpl localStep(PathNodeImpl n) { n.getASuccessorImpl() = result and - result.isHidden() and exists(NodeEx n1, NodeEx n2 | n1 = n.getNodeEx() and n2 = result.getNodeEx() | localFlowBigStep(n1, _, n2, _, _, _, _) or storeEx(n1, _, n2, _, _) or @@ -4229,30 +4327,90 @@ module MakeImpl { ) } + private PathNodeImpl summaryCtxStep(PathNodeImpl n) { + n.getASuccessorImpl() = result and + exists(SummaryCtxSome sc | + pathNode(n, _, _, _, pragma[only_bind_into](sc), _, _, _) and + pathNode(result, _, _, _, pragma[only_bind_into](sc), _, _, _) + ) + } + + private predicate localStepToHidden(PathNodeImpl n1, PathNodeImpl n2) { + n2 = localStep(n1) and + n2.isHidden() + } + + private predicate localStepFromHidden(PathNodeImpl n1, PathNodeImpl n2) { + n2 = localStep(n1) and + n1.isHidden() + } + pragma[nomagic] private predicate hasSuccessor(PathNodeImpl pred, PathNodeMid succ, NodeEx succNode) { - succ = pred.getANonHiddenSuccessor() and + succ = pred.getASuccessorImpl() and succNode = succ.getNodeEx() } + /** + * Holds if `(arg, par, ret, out)` forms a subpath-tuple. + * + * All of the nodes may be hidden. + */ + pragma[nomagic] + private predicate subpaths04( + PathNodeImpl arg, PathNodeImpl par, PathNodeImpl ret, PathNodeImpl out + ) { + exists( + ParamNodeEx p, NodeEx o, FlowState sout, DataFlowType t, AccessPath apout, + PathNodeMid out0 + | + pragma[only_bind_into](arg).getASuccessorImpl() = pragma[only_bind_into](out0) and + subpaths03(pragma[only_bind_into](arg), p, ret, o, sout, t, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and + pathNode(out0, o, sout, _, _, t, apout, _) + | + out = out0 or out = out0.projectToSink() + ) + } + + /** + * Holds if `(arg, par, ret, out)` forms a subpath-tuple. + * + * `par` and `ret` are not hidden. + */ + pragma[nomagic] + private predicate subpaths05( + PathNodeImpl arg, PathNodeImpl par, PathNodeImpl ret, PathNodeImpl out + ) { + // direct subpath + subpaths04(arg, any(PathNodeImpl n | localStepFromHidden*(n, par)), + any(PathNodeImpl n | localStepToHidden*(ret, n)), out) and + not par.isHidden() and + not ret.isHidden() and + ret = summaryCtxStep*(par) + or + // wrapped subpath using hidden nodes, e.g. flow through a callback inside + // a summarized callable + exists(PathNodeImpl par0, PathNodeImpl ret0 | + subpaths05(any(PathNodeImpl n | localStepToHidden*(par0, n)), par, ret, + any(PathNodeImpl n | localStepFromHidden*(n, ret0))) and + subpaths04(arg, par0, ret0, out) + ) + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and * `ret -> out` is summarized as the edge `arg -> out`. + * + * None of the nodes are hidden. */ + pragma[nomagic] predicate subpaths(PathNodeImpl arg, PathNodeImpl par, PathNodeImpl ret, PathNodeImpl out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, DataFlowType t, AccessPath apout, - PathNodeMid out0 - | - pragma[only_bind_into](arg).getANonHiddenSuccessor() = pragma[only_bind_into](out0) and - subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, t, apout) and - hasSuccessor(pragma[only_bind_into](arg), par, p) and - not ret.isHidden() and - pathNode(out0, o, sout, _, _, t, apout, _) - | - out = out0 or out = out0.projectToSink() - ) + subpaths05(any(PathNodeImpl n | localStepToHidden*(arg, n)), par, ret, + any(PathNodeImpl n | localStepFromHidden*(n, out))) and + not arg.isHidden() and + not out.isHidden() } /** @@ -4513,7 +4671,7 @@ module MakeImpl { private newtype TPartialAccessPath = TPartialNil() or - TPartialCons(Content c, int len) { len in [1 .. accessPathLimit()] } + TPartialCons(Content c, int len) { len in [1 .. Config::accessPathLimit()] } /** * Conceptually a list of `Content`s, but only the first @@ -4623,17 +4781,18 @@ module MakeImpl { exists(explorationLimit()) or revPartialPathStep(_, node, state, sc1, sc2, sc3, ap) and - not clearsContentEx(node, ap.getHead()) and - ( - notExpectsContent(node) or - expectsContentEx(node, ap.getHead()) - ) and - not fullBarrier(node) and - not stateBarrier(node, state) and - not outBarrier(node, state) and distSink(node.getEnclosingCallable()) <= explorationLimit() } + // inline to reduce fan-out via `getAReadContent` + bindingset[c] + private predicate clearsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + clearsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) + } + pragma[nomagic] private predicate partialPathStep( PartialPathNodeFwd mid, NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, @@ -4648,16 +4807,20 @@ module MakeImpl { TSummaryCtx2 sc2, TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t0, DataFlowType t, PartialAccessPath ap ) { - partialPathStep0(mid, node, state, cc, sc1, sc2, sc3, sc4, t0, ap) and - not fullBarrier(node) and - not stateBarrier(node, state) and - not inBarrier(node, state) and - not clearsContentEx(node, ap.getHead()) and - ( - notExpectsContent(node) or - expectsContentEx(node, ap.getHead()) - ) and - strengthenType(node, t0, t) + exists(boolean isStoreStep | + partialPathStep0(mid, node, state, cc, sc1, sc2, sc3, sc4, t0, ap, isStoreStep) and + not fullBarrier(node) and + not stateBarrier(node, state) and + not inBarrier(node, state) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and + strengthenType(node, t0, t) + | + isStoreStep = true or + not clearsContentEx(node, ap.getHead()) + ) } pragma[nomagic] @@ -4683,6 +4846,9 @@ module MakeImpl { result = this.getNodeEx().toString() + this.ppType() + this.ppAp() + this.ppCtx() } + /** Gets the location of this node. */ + Location getLocation() { result = this.getNodeEx().getLocation() } + /** * Holds if this element is at the specified location. * The location spans column `startcolumn` of line `startline` to @@ -4690,10 +4856,11 @@ module MakeImpl { * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - predicate hasLocationInfo( + pragma[inline] + deprecated predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { - this.getNodeEx().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) } /** Gets the underlying `Node`. */ @@ -4852,7 +5019,8 @@ module MakeImpl { pragma[nomagic] private predicate partialPathStep0( PartialPathNodeFwd mid, NodeEx node, FlowState state, CallContext cc, TSummaryCtx1 sc1, - TSummaryCtx2 sc2, TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t, PartialAccessPath ap + TSummaryCtx2 sc2, TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowType t, PartialAccessPath ap, + boolean isStoreStep ) { not isUnreachableInCallCached(node.asNode(), cc.(CallContextSpecificCall).getCall()) and ( @@ -4886,7 +5054,8 @@ module MakeImpl { mid.getAp() instanceof PartialAccessPathNil and t = node.getDataFlowType() and ap = TPartialNil() - ) + ) and + isStoreStep = false or jumpStepEx(mid.getNodeEx(), node) and state = mid.getState() and @@ -4896,7 +5065,8 @@ module MakeImpl { sc3 = TSummaryCtx3None() and sc4 = TSummaryCtx4None() and t = mid.getType() and - ap = mid.getAp() + ap = mid.getAp() and + isStoreStep = false or additionalJumpStep(mid.getNodeEx(), node) and state = mid.getState() and @@ -4907,7 +5077,8 @@ module MakeImpl { sc4 = TSummaryCtx4None() and mid.getAp() instanceof PartialAccessPathNil and t = node.getDataFlowType() and - ap = TPartialNil() + ap = TPartialNil() and + isStoreStep = false or additionalJumpStateStep(mid.getNodeEx(), mid.getState(), node, state) and cc instanceof CallContextAny and @@ -4917,7 +5088,8 @@ module MakeImpl { sc4 = TSummaryCtx4None() and mid.getAp() instanceof PartialAccessPathNil and t = node.getDataFlowType() and - ap = TPartialNil() + ap = TPartialNil() and + isStoreStep = false or partialPathStoreStep(mid, _, _, _, node, t, ap) and state = mid.getState() and @@ -4925,7 +5097,8 @@ module MakeImpl { sc1 = mid.getSummaryCtx1() and sc2 = mid.getSummaryCtx2() and sc3 = mid.getSummaryCtx3() and - sc4 = mid.getSummaryCtx4() + sc4 = mid.getSummaryCtx4() and + isStoreStep = true or exists(DataFlowType t0, PartialAccessPath ap0, Content c | partialPathReadStep(mid, t0, ap0, c, node, cc) and @@ -4935,21 +5108,25 @@ module MakeImpl { sc3 = mid.getSummaryCtx3() and sc4 = mid.getSummaryCtx4() and apConsFwd(t, ap, c, t0, ap0) - ) + ) and + isStoreStep = false or - partialPathIntoCallable(mid, node, state, _, cc, sc1, sc2, sc3, sc4, _, t, ap) + partialPathIntoCallable(mid, node, state, _, cc, sc1, sc2, sc3, sc4, _, t, ap) and + isStoreStep = false or partialPathOutOfCallable(mid, node, state, cc, t, ap) and sc1 = TSummaryCtx1None() and sc2 = TSummaryCtx2None() and sc3 = TSummaryCtx3None() and - sc4 = TSummaryCtx4None() + sc4 = TSummaryCtx4None() and + isStoreStep = false or partialPathThroughCallable(mid, node, state, cc, t, ap) and sc1 = mid.getSummaryCtx1() and sc2 = mid.getSummaryCtx2() and sc3 = mid.getSummaryCtx3() and - sc4 = mid.getSummaryCtx4() + sc4 = mid.getSummaryCtx4() and + isStoreStep = false } bindingset[result, i] @@ -5019,9 +5196,9 @@ module MakeImpl { partialPathOutOfCallable0(mid, pos, state, innercc, t, ap) and c = pos.getCallable() and kind = pos.getKind() and - resolveReturn(innercc, c, call) + CachedCallContextSensitivity::resolveReturn(innercc, c, call) | - if reducedViableImplInReturn(c, call) + if CachedCallContextSensitivity::reducedViableImplInReturn(c, call) then cc = TReturn(c, call) else cc = TAnyCallContext() ) @@ -5054,15 +5231,13 @@ module MakeImpl { ) } - private predicate anyCallable(DataFlowCallable c) { any() } - pragma[nomagic] private predicate partialPathIntoCallable0( PartialPathNodeFwd mid, DataFlowCallable callable, ParameterPosition pos, FlowState state, CallContext outercc, DataFlowCall call, DataFlowType t, PartialAccessPath ap ) { partialPathIntoArg(mid, pos, state, outercc, call, t, ap) and - callable = ResolveCall::resolveCall(call, outercc) + callable = CachedCallContextSensitivity::resolveCall(call, outercc) } private predicate partialPathIntoCallable( @@ -5078,7 +5253,7 @@ module MakeImpl { sc3 = TSummaryCtx3Some(t) and sc4 = TSummaryCtx4Some(ap) | - if recordDataFlowCallSite(call, callable) + if CachedCallContextSensitivity::recordDataFlowCallSite(call, callable) then innercc = TSpecificCall(call) else innercc = TSomeCall() ) @@ -5131,13 +5306,47 @@ module MakeImpl { private predicate revPartialPathStep( PartialPathNodeRev mid, NodeEx node, FlowState state, TRevSummaryCtx1 sc1, TRevSummaryCtx2 sc2, TRevSummaryCtx3 sc3, PartialAccessPath ap + ) { + exists(boolean isStoreStep | + revPartialPathStep0(mid, node, state, sc1, sc2, sc3, ap, isStoreStep) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and + not fullBarrier(node) and + not stateBarrier(node, state) and + not outBarrier(node, state) and + // if a node is not the target of a store, we can check `clearsContent` immediately + ( + storeEx(_, _, node, _, _) + or + not clearsContentEx(node, ap.getHead()) + ) + | + // if a node is the target of a store, we can only check `clearsContent` + // when we know whether we took the store step + isStoreStep = true + or + exists(NodeEx midNode, PartialAccessPath midAp | + midNode = mid.getNodeEx() and + midAp = mid.getAp() and + not clearsContentEx(midNode, midAp.getHead()) + ) + ) + } + + pragma[nomagic] + private predicate revPartialPathStep0( + PartialPathNodeRev mid, NodeEx node, FlowState state, TRevSummaryCtx1 sc1, + TRevSummaryCtx2 sc2, TRevSummaryCtx3 sc3, PartialAccessPath ap, boolean isStoreStep ) { localFlowStepEx(node, mid.getNodeEx()) and state = mid.getState() and sc1 = mid.getSummaryCtx1() and sc2 = mid.getSummaryCtx2() and sc3 = mid.getSummaryCtx3() and - ap = mid.getAp() + ap = mid.getAp() and + isStoreStep = false or additionalLocalFlowStep(node, mid.getNodeEx()) and state = mid.getState() and @@ -5145,21 +5354,24 @@ module MakeImpl { sc2 = mid.getSummaryCtx2() and sc3 = mid.getSummaryCtx3() and mid.getAp() instanceof PartialAccessPathNil and - ap = TPartialNil() + ap = TPartialNil() and + isStoreStep = false or additionalLocalStateStep(node, state, mid.getNodeEx(), mid.getState()) and sc1 = mid.getSummaryCtx1() and sc2 = mid.getSummaryCtx2() and sc3 = mid.getSummaryCtx3() and mid.getAp() instanceof PartialAccessPathNil and - ap = TPartialNil() + ap = TPartialNil() and + isStoreStep = false or jumpStepEx(node, mid.getNodeEx()) and state = mid.getState() and sc1 = TRevSummaryCtx1None() and sc2 = TRevSummaryCtx2None() and sc3 = TRevSummaryCtx3None() and - ap = mid.getAp() + ap = mid.getAp() and + isStoreStep = false or additionalJumpStep(node, mid.getNodeEx()) and state = mid.getState() and @@ -5167,20 +5379,23 @@ module MakeImpl { sc2 = TRevSummaryCtx2None() and sc3 = TRevSummaryCtx3None() and mid.getAp() instanceof PartialAccessPathNil and - ap = TPartialNil() + ap = TPartialNil() and + isStoreStep = false or additionalJumpStateStep(node, state, mid.getNodeEx(), mid.getState()) and sc1 = TRevSummaryCtx1None() and sc2 = TRevSummaryCtx2None() and sc3 = TRevSummaryCtx3None() and mid.getAp() instanceof PartialAccessPathNil and - ap = TPartialNil() + ap = TPartialNil() and + isStoreStep = false or revPartialPathReadStep(mid, _, _, node, ap) and state = mid.getState() and sc1 = mid.getSummaryCtx1() and sc2 = mid.getSummaryCtx2() and - sc3 = mid.getSummaryCtx3() + sc3 = mid.getSummaryCtx3() and + isStoreStep = false or exists(PartialAccessPath ap0, Content c | revPartialPathStoreStep(mid, ap0, c, node) and @@ -5188,7 +5403,8 @@ module MakeImpl { sc1 = mid.getSummaryCtx1() and sc2 = mid.getSummaryCtx2() and sc3 = mid.getSummaryCtx3() and - apConsRev(ap, c, ap0) + apConsRev(ap, c, ap0) and + isStoreStep = true ) or exists(ParamNodeEx p | @@ -5201,18 +5417,21 @@ module MakeImpl { sc1 = TRevSummaryCtx1None() and sc2 = TRevSummaryCtx2None() and sc3 = TRevSummaryCtx3None() and - ap = mid.getAp() + ap = mid.getAp() and + isStoreStep = false ) or exists(ReturnPosition pos | revPartialPathIntoReturn(mid, pos, state, sc1, sc2, sc3, _, ap) and - pos = getReturnPosition(node.asNode()) + pos = getReturnPosition(node.asNode()) and + isStoreStep = false ) or revPartialPathThroughCallable(mid, node, state, ap) and sc1 = mid.getSummaryCtx1() and sc2 = mid.getSummaryCtx2() and - sc3 = mid.getSummaryCtx3() + sc3 = mid.getSummaryCtx3() and + isStoreStep = false } pragma[inline] diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll index 21040c2d0d9..e83752fcced 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll @@ -1,8 +1,9 @@ private import codeql.dataflow.DataFlow private import codeql.typetracking.TypeTracking as Tt +private import codeql.util.Location private import codeql.util.Unit -module MakeImplCommon { +module MakeImplCommon Lang> { private import Lang import Cached @@ -393,6 +394,216 @@ module MakeImplCommon { result = viableCallableLambda(call, _) } + signature module CallContextSensitivityInputSig { + /** Holds if the edge is possibly needed in the direction `call` to `c`. */ + predicate relevantCallEdgeIn(DataFlowCall call, DataFlowCallable c); + + /** Holds if the edge is possibly needed in the direction `c` to `call`. */ + predicate relevantCallEdgeOut(DataFlowCall call, DataFlowCallable c); + + /** + * Holds if the call context `ctx` may reduce the set of viable run-time + * dispatch targets of call `call` in `c`. + */ + default predicate reducedViableImplInCallContextCand( + DataFlowCall call, DataFlowCallable c, DataFlowCall ctx + ) { + relevantCallEdgeIn(ctx, c) and + mayBenefitFromCallContextExt(call, c) + } + + /** + * Holds if flow returning from callable `c` to call `call` might return + * further and if this path may restrict the set of call sites that can be + * returned to. + */ + default predicate reducedViableImplInReturnCand(DataFlowCallable c, DataFlowCall call) { + relevantCallEdgeOut(call, c) and + mayBenefitFromCallContextExt(call, _) + } + } + + /** Provides predicates releated to call-context sensitivity. */ + module CallContextSensitivity { + private import Input + + pragma[nomagic] + DataFlowCallable viableImplInCallContextExtIn(DataFlowCall call, DataFlowCall ctx) { + reducedViableImplInCallContextCand(call, _, ctx) and + result = viableImplInCallContextExt(call, ctx) and + relevantCallEdgeIn(call, result) + } + + /** + * Holds if the call context `ctx` reduces the set of viable run-time + * dispatch targets of call `call` in `c`. + */ + pragma[nomagic] + predicate reducedViableImplInCallContext(DataFlowCall call, DataFlowCallable c, DataFlowCall ctx) { + exists(int tgts, int ctxtgts | + reducedViableImplInCallContextCand(call, c, ctx) and + ctxtgts = count(viableImplInCallContextExtIn(call, ctx)) and + tgts = strictcount(DataFlowCallable tgt | relevantCallEdgeIn(call, tgt)) and + ctxtgts < tgts + ) + } + + /** + * Holds if the call context `call` allows us to prune unreachable nodes in `callable`. + */ + pragma[nomagic] + predicate recordDataFlowCallSiteUnreachable(DataFlowCall call, DataFlowCallable callable) { + exists(Node n | + relevantCallEdgeIn(call, callable) and + getNodeEnclosingCallable(n) = callable and + isUnreachableInCallCached(n, call) + ) + } + + pragma[nomagic] + DataFlowCallable viableImplInCallContextExtOut(DataFlowCall call, DataFlowCall ctx) { + exists(DataFlowCallable c | + reducedViableImplInReturnCand(result, call) and + result = viableImplInCallContextExt(call, ctx) and + mayBenefitFromCallContextExt(call, c) and + relevantCallEdgeOut(ctx, c) + ) + } + + /** + * Holds if flow returning from callable `c` to call `call` might return + * further and if this path restricts the set of call sites that can be + * returned to. + */ + pragma[nomagic] + predicate reducedViableImplInReturn(DataFlowCallable c, DataFlowCall call) { + exists(int tgts, int ctxtgts | + reducedViableImplInReturnCand(c, call) and + ctxtgts = count(DataFlowCall ctx | c = viableImplInCallContextExtOut(call, ctx)) and + tgts = + strictcount(DataFlowCall ctx | + callEnclosingCallable(call, any(DataFlowCallable encl | relevantCallEdgeOut(ctx, encl))) + ) and + ctxtgts < tgts + ) + } + + signature module PrunedViableImplInputSig { + predicate reducedViableImplInCallContext( + DataFlowCall call, DataFlowCallable c, DataFlowCall ctx + ); + + predicate reducedViableImplInReturn(DataFlowCallable c, DataFlowCall call); + + predicate recordDataFlowCallSiteUnreachable(DataFlowCall call, DataFlowCallable c); + } + + /** + * This module is only parameterized so that we can refer to cached versions + * of the input predicates in `CachedCallContextSensitivity`. + */ + module PrunedViableImpl { + /** + * Gets a viable run-time dispatch target for the call `call` in the + * context `ctx`. This is restricted to those calls for which a context + * makes a difference. + */ + pragma[nomagic] + DataFlowCallable prunedViableImplInCallContext(DataFlowCall call, CallContextSpecificCall ctx) { + exists(DataFlowCall outer | ctx = TSpecificCall(outer) | + result = viableImplInCallContextExtIn(call, outer) and + Input2::reducedViableImplInCallContext(call, _, outer) + ) + } + + /** Holds if `call` does not have a reduced set of dispatch targets in call context `ctx`. */ + bindingset[call, ctx] + predicate noPrunedViableImplInCallContext(DataFlowCall call, CallContext ctx) { + exists(DataFlowCall outer | ctx = TSpecificCall(outer) | + not Input2::reducedViableImplInCallContext(call, _, outer) + ) + or + ctx instanceof CallContextSomeCall + or + ctx instanceof CallContextAny + or + ctx instanceof CallContextReturn + } + + /** + * Resolves a call from `call` in `cc` to `result`, where `result` is + * restricted by `relevantResolveTarget`. + */ + bindingset[call, cc] + DataFlowCallable resolveCall(DataFlowCall call, CallContext cc) { + result = prunedViableImplInCallContext(call, cc) + or + noPrunedViableImplInCallContext(call, cc) and + relevantCallEdgeIn(call, result) + } + + /** + * Gets a viable call site for the return from `callable` in call context + * `ctx`. This is restricted to those callables and contexts for which + * the possible call sites are restricted. + */ + pragma[nomagic] + DataFlowCall prunedViableImplInCallContextReverse( + DataFlowCallable callable, CallContextReturn ctx + ) { + exists(DataFlowCallable c0, DataFlowCall call0 | + callEnclosingCallable(call0, callable) and + ctx = TReturn(c0, call0) and + c0 = viableImplInCallContextExtOut(call0, result) and + Input2::reducedViableImplInReturn(c0, call0) + ) + } + + /** + * Resolves a return from `callable` in `cc` to `call`. + */ + bindingset[cc, callable] + predicate resolveReturn(CallContextNoCall cc, DataFlowCallable callable, DataFlowCall call) { + cc instanceof CallContextAny and relevantCallEdgeOut(call, callable) + or + call = prunedViableImplInCallContextReverse(callable, cc) + } + + /** + * Holds if the call context `call` improves virtual dispatch in `callable`. + */ + pragma[nomagic] + predicate recordDataFlowCallSiteDispatch(DataFlowCall call, DataFlowCallable callable) { + Input2::reducedViableImplInCallContext(_, callable, call) + } + + /** + * Holds if the call context `call` either improves virtual dispatch in + * `callable` or if it allows us to prune unreachable nodes in `callable`. + */ + predicate recordDataFlowCallSite(DataFlowCall call, DataFlowCallable c) { + Input2::recordDataFlowCallSiteUnreachable(call, c) or + recordDataFlowCallSiteDispatch(call, c) + } + } + + private predicate reducedViableImplInCallContextAlias = reducedViableImplInCallContext/3; + + private predicate reducedViableImplInReturnAlias = reducedViableImplInReturn/2; + + private predicate recordDataFlowCallSiteUnreachableAlias = recordDataFlowCallSiteUnreachable/2; + + private module DefaultPrunedViableImplInput implements PrunedViableImplInputSig { + predicate reducedViableImplInCallContext = reducedViableImplInCallContextAlias/3; + + predicate reducedViableImplInReturn = reducedViableImplInReturnAlias/2; + + predicate recordDataFlowCallSiteUnreachable = recordDataFlowCallSiteUnreachableAlias/2; + } + + import PrunedViableImpl + } + cached private module Cached { /** @@ -498,6 +709,102 @@ module MakeImplCommon { ) } + /** + * Holds if the set of viable implementations that can be called by `call` + * might be improved by knowing the call context. + */ + cached + predicate mayBenefitFromCallContextExt(DataFlowCall call, DataFlowCallable callable) { + ( + mayBenefitFromCallContext(call) + or + exists(viableCallableLambda(call, TDataFlowCallSome(_))) + ) and + callEnclosingCallable(call, callable) + } + + /** + * Gets a viable dispatch target of `call` in the context `ctx`. This is + * restricted to those `call`s for which a context might make a difference. + */ + cached + DataFlowCallable viableImplInCallContextExt(DataFlowCall call, DataFlowCall ctx) { + result = viableImplInCallContext(call, ctx) and + result = viableCallable(call) + or + result = viableCallableLambda(call, TDataFlowCallSome(ctx)) + or + exists(DataFlowCallable enclosing | + mayBenefitFromCallContextExt(call, enclosing) and + enclosing = viableCallableExt(ctx) and + result = viableCallableLambda(call, TDataFlowCallNone()) + ) + } + + /** + * A cached version of the `CallContextSensitivity` module. Only used in + * pruning stages 1+2 and flow exploration; all subsequent pruning stages use a + * pruned version, based on the relevant call edges from the previous stage. + */ + cached + module CachedCallContextSensitivity { + private module CallContextSensitivityInput implements CallContextSensitivityInputSig { + predicate relevantCallEdgeIn(DataFlowCall call, DataFlowCallable c) { + c = viableCallableExt(call) + } + + predicate relevantCallEdgeOut(DataFlowCall call, DataFlowCallable c) { + c = viableCallableExt(call) + } + } + + private module Impl1 = CallContextSensitivity; + + cached + predicate reducedViableImplInCallContext( + DataFlowCall call, DataFlowCallable c, DataFlowCall ctx + ) { + Impl1::reducedViableImplInCallContext(call, c, ctx) + } + + cached + predicate recordDataFlowCallSiteUnreachable(DataFlowCall call, DataFlowCallable c) { + Impl1::recordDataFlowCallSiteUnreachable(call, c) + } + + cached + predicate reducedViableImplInReturn(DataFlowCallable c, DataFlowCall call) { + Impl1::reducedViableImplInReturn(c, call) + } + + private module PrunedViableImplInput implements Impl1::PrunedViableImplInputSig { + predicate reducedViableImplInCallContext = + CachedCallContextSensitivity::reducedViableImplInCallContext/3; + + predicate reducedViableImplInReturn = + CachedCallContextSensitivity::reducedViableImplInReturn/2; + + predicate recordDataFlowCallSiteUnreachable = + CachedCallContextSensitivity::recordDataFlowCallSiteUnreachable/2; + } + + private module Impl2 = Impl1::PrunedViableImpl; + + import Impl2 + + cached + DataFlowCallable prunedViableImplInCallContext(DataFlowCall call, CallContextSpecificCall ctx) { + result = Impl2::prunedViableImplInCallContext(call, ctx) + } + + cached + DataFlowCall prunedViableImplInCallContextReverse( + DataFlowCallable callable, CallContextReturn ctx + ) { + result = Impl2::prunedViableImplInCallContextReverse(callable, ctx) + } + } + /** * Holds if `p` is the parameter of a viable dispatch target of `call`, * and `p` has position `ppos`. @@ -788,106 +1095,6 @@ module MakeImplCommon { import FlowThrough - cached - private module DispatchWithCallContext { - /** - * Holds if the set of viable implementations that can be called by `call` - * might be improved by knowing the call context. - */ - pragma[nomagic] - private predicate mayBenefitFromCallContextExt(DataFlowCall call, DataFlowCallable callable) { - ( - mayBenefitFromCallContext(call) - or - exists(viableCallableLambda(call, TDataFlowCallSome(_))) - ) and - callEnclosingCallable(call, callable) - } - - /** - * Gets a viable dispatch target of `call` in the context `ctx`. This is - * restricted to those `call`s for which a context might make a difference. - */ - cached - DataFlowCallable viableImplInCallContextExt(DataFlowCall call, DataFlowCall ctx) { - result = viableImplInCallContext(call, ctx) and - result = viableCallable(call) - or - result = viableCallableLambda(call, TDataFlowCallSome(ctx)) - or - exists(DataFlowCallable enclosing | - mayBenefitFromCallContextExt(call, enclosing) and - enclosing = viableCallableExt(ctx) and - result = viableCallableLambda(call, TDataFlowCallNone()) - ) - } - - /** - * Holds if the call context `ctx` reduces the set of viable run-time - * dispatch targets of call `call` in `c`. - */ - cached - predicate reducedViableImplInCallContext( - DataFlowCall call, DataFlowCallable c, DataFlowCall ctx - ) { - exists(int tgts, int ctxtgts | - mayBenefitFromCallContextExt(call, c) and - c = viableCallableExt(ctx) and - ctxtgts = count(viableImplInCallContextExt(call, ctx)) and - tgts = strictcount(viableCallableExt(call)) and - ctxtgts < tgts - ) - } - - /** - * Gets a viable run-time dispatch target for the call `call` in the - * context `ctx`. This is restricted to those calls for which a context - * makes a difference. - */ - cached - DataFlowCallable prunedViableImplInCallContext(DataFlowCall call, CallContextSpecificCall ctx) { - exists(DataFlowCall outer | ctx = TSpecificCall(outer) | - result = viableImplInCallContextExt(call, outer) and - reducedViableImplInCallContext(call, _, outer) - ) - } - - /** - * Holds if flow returning from callable `c` to call `call` might return - * further and if this path restricts the set of call sites that can be - * returned to. - */ - cached - predicate reducedViableImplInReturn(DataFlowCallable c, DataFlowCall call) { - exists(int tgts, int ctxtgts | - mayBenefitFromCallContextExt(call, _) and - c = viableCallableExt(call) and - ctxtgts = count(DataFlowCall ctx | c = viableImplInCallContextExt(call, ctx)) and - tgts = strictcount(DataFlowCall ctx | callEnclosingCallable(call, viableCallableExt(ctx))) and - ctxtgts < tgts - ) - } - - /** - * Gets a viable call site for the return from `callable` in call context - * `ctx`. This is restricted to those callables and contexts for which - * the possible call sites are restricted. - */ - cached - DataFlowCall prunedViableImplInCallContextReverse( - DataFlowCallable callable, CallContextReturn ctx - ) { - exists(DataFlowCallable c0, DataFlowCall call0 | - callEnclosingCallable(call0, callable) and - ctx = TReturn(c0, call0) and - c0 = viableImplInCallContextExt(call0, result) and - reducedViableImplInReturn(c0, call0) - ) - } - } - - import DispatchWithCallContext - /** * Holds if `p` can flow to the pre-update node associated with post-update * node `n`, in the same callable, using only value-preserving steps. @@ -966,22 +1173,6 @@ module MakeImplCommon { reverseStepThroughInputOutputAlias(node1, node2) } - /** - * Holds if the call context `call` improves virtual dispatch in `callable`. - */ - cached - predicate recordDataFlowCallSiteDispatch(DataFlowCall call, DataFlowCallable callable) { - reducedViableImplInCallContext(_, callable, call) - } - - /** - * Holds if the call context `call` allows us to prune unreachable nodes in `callable`. - */ - cached - predicate recordDataFlowCallSiteUnreachable(DataFlowCall call, DataFlowCallable callable) { - exists(Node n | getNodeEnclosingCallable(n) = callable | isUnreachableInCallCached(n, call)) - } - cached predicate allowParameterReturnInSelfCached(ParamNode p) { allowParameterReturnInSelf(p) } @@ -994,9 +1185,13 @@ module MakeImplCommon { cached newtype TCallContext = TAnyCallContext() or - TSpecificCall(DataFlowCall call) { recordDataFlowCallSite(call, _) } or + TSpecificCall(DataFlowCall call) { + CachedCallContextSensitivity::recordDataFlowCallSite(call, _) + } or TSomeCall() or - TReturn(DataFlowCallable c, DataFlowCall call) { reducedViableImplInReturn(c, call) } + TReturn(DataFlowCallable c, DataFlowCall call) { + CachedCallContextSensitivity::reducedViableImplInReturn(c, call) + } cached newtype TReturnPosition = @@ -1448,28 +1643,13 @@ module MakeImplCommon { } } - /** - * Holds if the call context `call` either improves virtual dispatch in - * `callable` or if it allows us to prune unreachable nodes in `callable`. - */ - predicate recordDataFlowCallSite(DataFlowCall call, DataFlowCallable callable) { - recordDataFlowCallSiteDispatch(call, callable) or - recordDataFlowCallSiteUnreachable(call, callable) - } + final private class NodeFinal = Node; /** * A `Node` at which a cast can occur such that the type should be checked. */ - class CastingNode instanceof Node { + class CastingNode extends NodeFinal { CastingNode() { castingNode(this) } - - string toString() { result = super.toString() } - - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } } private predicate readStepWithTypes( @@ -1542,7 +1722,7 @@ module MakeImplCommon { } override predicate relevantFor(DataFlowCallable callable) { - recordDataFlowCallSite(this.getCall(), callable) + CachedCallContextSensitivity::recordDataFlowCallSite(this.getCall(), callable) } override predicate matchesCall(DataFlowCall call) { call = this.getCall() } @@ -1615,17 +1795,9 @@ module MakeImplCommon { * The value of a parameter at function entry, viewed as a node in a data * flow graph. */ - class ParamNode instanceof Node { + class ParamNode extends NodeFinal { ParamNode() { parameterNode(this, _, _) } - string toString() { result = super.toString() } - - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } - /** * Holds if this node is the parameter of callable `c` at the specified * position. @@ -1636,17 +1808,9 @@ module MakeImplCommon { } /** A data-flow node that represents a call argument. */ - class ArgNode instanceof Node { + class ArgNode extends NodeFinal { ArgNode() { argumentNode(this, _, _) } - string toString() { result = super.toString() } - - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } - /** Holds if this argument occurs at the given position in the given call. */ final predicate argumentOf(DataFlowCall call, ArgumentPosition pos) { argumentNode(this, call, pos) @@ -1657,17 +1821,9 @@ module MakeImplCommon { * A node from which flow can return to the caller. This is either a regular * `ReturnNode` or a `PostUpdateNode` corresponding to the value of a parameter. */ - class ReturnNodeExt instanceof Node { + class ReturnNodeExt extends NodeFinal { ReturnNodeExt() { returnNodeExt(this, _) } - string toString() { result = super.toString() } - - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } - /** Gets the kind of this returned value. */ ReturnKindExt getKind() { returnNodeExt(this, result) } } @@ -1676,16 +1832,8 @@ module MakeImplCommon { * A node to which data can flow from a call. Either an ordinary out node * or a post-update node associated with a call argument. */ - class OutNodeExt instanceof Node { + class OutNodeExt extends NodeFinal { OutNodeExt() { outNodeExt(this) } - - string toString() { result = super.toString() } - - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } } /** @@ -1773,58 +1921,6 @@ module MakeImplCommon { result = getReturnPosition0(ret, ret.getKind()) } - /** Holds if `call` does not have a reduced set of dispatch targets in call context `ctx`. */ - bindingset[call, ctx] - predicate noPrunedViableImplInCallContext(DataFlowCall call, CallContext ctx) { - exists(DataFlowCall outer | ctx = TSpecificCall(outer) | - not reducedViableImplInCallContext(call, _, outer) - ) - or - ctx instanceof CallContextSomeCall - or - ctx instanceof CallContextAny - or - ctx instanceof CallContextReturn - } - - /** - * Resolves a return from `callable` in `cc` to `call`. - */ - bindingset[cc, callable] - predicate resolveReturn(CallContext cc, DataFlowCallable callable, DataFlowCall call) { - cc instanceof CallContextAny and callable = viableCallableExt(call) - or - call = prunedViableImplInCallContextReverse(callable, cc) - } - - signature predicate relevantResolveTargetSig(DataFlowCallable c); - - module ResolveCall { - pragma[nomagic] - private DataFlowCallable prunedRelevantViableImplInCallContext(DataFlowCall call, CallContext cc) { - result = prunedViableImplInCallContext(call, cc) and - relevantResolveTarget(result) - } - - pragma[nomagic] - private DataFlowCallable viableRelevantCallableExt(DataFlowCall call) { - result = viableCallableExt(call) and - relevantResolveTarget(result) - } - - /** - * Resolves a call from `call` in `cc` to `result`, where `result` is - * restricted by `relevantResolveTarget`. - */ - bindingset[call, cc] - DataFlowCallable resolveCall(DataFlowCall call, CallContext cc) { - result = prunedRelevantViableImplInCallContext(call, cc) - or - noPrunedViableImplInCallContext(call, cc) and - result = viableRelevantCallableExt(call) - } - } - /** An optional Boolean value. */ class BooleanOption extends TBooleanOption { string toString() { diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImplConsistency.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImplConsistency.qll index 374d42e9ad5..1d0f8d1969d 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImplConsistency.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImplConsistency.qll @@ -5,8 +5,9 @@ private import codeql.dataflow.DataFlow as DF private import codeql.dataflow.TaintTracking as TT +private import codeql.util.Location -signature module InputSig { +signature module InputSig DataFlowLang> { /** Holds if `n` should be excluded from the consistency test `uniqueEnclosingCallable`. */ default predicate uniqueEnclosingCallableExclude(DataFlowLang::Node n) { none() } @@ -71,8 +72,8 @@ signature module InputSig { } module MakeConsistency< - DF::InputSig DataFlowLang, TT::InputSig TaintTrackingLang, - InputSig Input> + LocationSig Location, DF::InputSig DataFlowLang, + TT::InputSig TaintTrackingLang, InputSig Input> { private import DataFlowLang private import TaintTrackingLang @@ -128,10 +129,7 @@ module MakeConsistency< query predicate uniqueNodeLocation(Node n, string msg) { exists(int c | - c = - count(string filepath, int startline, int startcolumn, int endline, int endcolumn | - n.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - ) and + c = count(n.getLocation()) and c != 1 and not Input::uniqueNodeLocationExclude(n) and msg = "Node should have one location but has " + c + "." @@ -142,7 +140,7 @@ module MakeConsistency< exists(int c | c = strictcount(Node n | - not n.hasLocationInfo(_, _, _, _, _) and + not exists(n.getLocation()) and not Input::missingLocationExclude(n) ) and msg = "Nodes without location: " + c diff --git a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll index f3e840720ab..4d6df294521 100644 --- a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll @@ -10,7 +10,7 @@ private import AccessPathSyntax as AccessPathSyntax /** * Provides language-specific parameters. */ -signature module InputSig { +signature module InputSig Lang> { /** * A base class of callables that are candidates for flow summary modeling. */ @@ -139,10 +139,12 @@ signature module InputSig { } } -module Make Input> { +module Make< + LocationSig Location, DF::InputSig DataFlowLang, InputSig Input> +{ private import DataFlowLang private import Input - private import codeql.dataflow.internal.DataFlowImplCommon::MakeImplCommon + private import codeql.dataflow.internal.DataFlowImplCommon::MakeImplCommon private import codeql.util.Unit final private class SummarizedCallableBaseFinal = SummarizedCallableBase; @@ -1457,7 +1459,7 @@ module Make Input> { AccessPathSyntax::parseInt(part.getArgumentList()) < 0 } - signature module SourceSinkInterpretationInputSig { + signature module SourceSinkInterpretationInputSig { class Element { string toString(); @@ -1523,8 +1525,7 @@ module Make Input> { * Should eventually be replaced with API graphs like in dynamic languages. */ module SourceSinkInterpretation< - LocationSig Location, - SourceSinkInterpretationInputSig SourceSinkInterpretationInput> + SourceSinkInterpretationInputSig SourceSinkInterpretationInput> { private import SourceSinkInterpretationInput diff --git a/shared/dataflow/codeql/dataflow/test/InlineFlowTest.qll b/shared/dataflow/codeql/dataflow/test/InlineFlowTest.qll index 22a55f5aa07..e35d1332bca 100644 --- a/shared/dataflow/codeql/dataflow/test/InlineFlowTest.qll +++ b/shared/dataflow/codeql/dataflow/test/InlineFlowTest.qll @@ -29,8 +29,9 @@ private import codeql.dataflow.DataFlow as DF private import codeql.dataflow.TaintTracking as TT private import codeql.util.test.InlineExpectationsTest as IET +private import codeql.util.Location -signature module InputSig { +signature module InputSig DataFlowLang> { predicate defaultSource(DataFlowLang::Node source); predicate defaultSink(DataFlowLang::Node source); @@ -40,12 +41,13 @@ signature module InputSig { } module InlineFlowTestMake< - DF::InputSig DataFlowLang, TT::InputSig TaintTrackingLang, - IET::InlineExpectationsTestSig Test, InputSig Impl> + LocationSig Location, DF::InputSig DataFlowLang, + TT::InputSig TaintTrackingLang, IET::InlineExpectationsTestSig Test, + InputSig Impl> { - private module DataFlow = DF::DataFlowMake; + private module DataFlow = DF::DataFlowMake; - private module TaintTracking = TT::TaintFlowMake; + private module TaintTracking = TT::TaintFlowMake; private module InlineExpectationsTest = IET::Make; @@ -76,7 +78,7 @@ module InlineFlowTestMake< private predicate hasLocationInfo(DataFlowLang::Node node, Test::Location location) { exists(string filepath, int startline, int startcolumn, int endline, int endcolumn | - node.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) and + node.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) and location.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) ) } diff --git a/shared/mad/codeql/mad/ModelValidation.qll b/shared/mad/codeql/mad/ModelValidation.qll index 20ef0015d78..bb3b8c174b9 100644 --- a/shared/mad/codeql/mad/ModelValidation.qll +++ b/shared/mad/codeql/mad/ModelValidation.qll @@ -116,11 +116,11 @@ module KindValidation { this = [ // shared - "local", "remote", "file", + "local", "remote", "file", "commandargs", "database", "environment", // Java - "android-external-storage-dir", "contentprovider", "database", "environment", + "android-external-storage-dir", "contentprovider", // C# - "file-write", + "file-write", "windows-registry", // JavaScript "database-access-result" ] diff --git a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll index a8a722f7b5d..e178c44cafb 100644 --- a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll +++ b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll @@ -160,17 +160,62 @@ signature module Semantic { /** Gets a tiebreaker id in case `getBlockId1` is not unique. */ default string getBlockId2(BasicBlock bb) { result = "" } + /** + * A guard in the range analysis. + */ class Guard { + /** + * Gets a string representation of the guard. + */ string toString(); + /** + * Gets the basic block associated with the guard. + */ BasicBlock getBasicBlock(); + /** + * Gets the guard as an expression, if any. + */ Expr asExpr(); + /** + * Holds if the guard directly controls a given basic block. For example in + * the following code, the guard `(x > y)` directly controls the block + * beneath it: + * ``` + * if (x > y) + * { + * Console.WriteLine("x is greater than y"); + * } + * ``` + * `branch` indicates whether the basic block is entered when the guard + * evaluates to `true` or when it evaluates to `false`. + */ predicate directlyControls(BasicBlock controlled, boolean branch); + /** + * Holds if this guard is an equality test between `e1` and `e2`. If the + * test is negated, that is `!=`, then `polarity` is false, otherwise + * `polarity` is true. + */ predicate isEquality(Expr e1, Expr e2, boolean polarity); + /** + * Holds if there is a branch edge between two basic blocks. For example + * in the following C code, there are two branch edges from the basic block + * containing the condition `(x > y)` to the beginnings of the true and + * false blocks that follow: + * ``` + * if (x > y) { + * printf("x is greater than y\n"); + * } else { + * printf("x is not greater than y\n"); + * } + * ``` + * `branch` indicates whether the second basic block is the one entered + * when the guard evaluates to `true` or when it evaluates to `false`. + */ predicate hasBranchEdge(BasicBlock bb1, BasicBlock bb2, boolean branch); } @@ -194,18 +239,50 @@ signature module Semantic { /** Gets the type of an expression. */ Type getExprType(Expr e); + /** + * A static single-assignment (SSA) variable. + */ class SsaVariable { + /** + * Gets an expression reading the value of this SSA variable. + */ Expr getAUse(); + /** + * Gets the basic block where this SSA variable is defined. + */ BasicBlock getBasicBlock(); } + /** + * A phi node in the SSA form. A phi node is a kind of node in the SSA form + * that represents a merge point where multiple control flow paths converge + * and the value of a variable needs to be selected according to which + * control flow path was taken. For example, in the following Ruby code: + * ```rb + * if b + * x = 0 + * else + * x = 1 + * end + * puts x + * ``` + * A phi node for `x` is inserted just before the call `puts x`, since the + * value of `x` may come from either `x = 0` or `x = 1`. + */ class SsaPhiNode extends SsaVariable { /** Holds if `inp` is an input to the phi node along the edge originating in `bb`. */ predicate hasInputFromBlock(SsaVariable inp, BasicBlock bb); } + /** + * An SSA variable representing the value of an explicit update of the source variable. + */ class SsaExplicitUpdate extends SsaVariable { + /** + * Gets the expression that defines the value of the variable in this + * update. + */ Expr getDefiningExpr(); } @@ -296,11 +373,32 @@ signature module LangSig { } signature module BoundSig { + /** + * A bound that the range analysis can infer for a variable. This includes + * constant bounds represented by the abstract value zero, SSA bounds for when + * a variable is bounded by the value of a different variable, and possibly + * other abstract values that may be useful variable bounds. Since all bounds + * are combined with an integer delta there's no need to represent constant + * bounds other than zero. + */ class SemBound { + /** + * Gets a string representation of this bound. + */ string toString(); + /** + * Gets the location of this bound. + */ Location getLocation(); + /** + * Gets an expression that equals this bound plus `delta`. + * + * For the zero-bound this gets integer constants equal to `delta`, for any + * value `delta`. For other bounds this gets expressions equal to the bound + * and `delta = 0`. + */ Sem::Expr getExpr(D::Delta delta); } diff --git a/shared/threat-models/ext/threat-model-grouping.model.yml b/shared/threat-models/ext/threat-model-grouping.model.yml index 53107c1e32b..7cc650d3341 100644 --- a/shared/threat-models/ext/threat-model-grouping.model.yml +++ b/shared/threat-models/ext/threat-model-grouping.model.yml @@ -16,6 +16,7 @@ extensions: - ["commandargs", "local"] - ["environment", "local"] - ["file", "local"] + - ["windows-registry", "local"] # Android threat models - ["android-external-storage-dir", "android"] diff --git a/swift/BUILD.bazel b/swift/BUILD.bazel index 93d4fd9a7e4..2c7c1256782 100644 --- a/swift/BUILD.bazel +++ b/swift/BUILD.bazel @@ -115,6 +115,7 @@ py_binary( deps = [":_create_extractor_pack"], ) +# TODO this is unneeded here but still used in the internal repo. Remove once it's not generate_cmake( name = "cmake", targets = [ diff --git a/swift/CMakeLists.txt b/swift/CMakeLists.txt index 2b44cc58993..46bcd32db32 100644 --- a/swift/CMakeLists.txt +++ b/swift/CMakeLists.txt @@ -17,4 +17,4 @@ project(codeql) include(../misc/bazel/cmake/setup.cmake) -include_generated(//swift:cmake) +generate_and_include(//swift/...) diff --git a/swift/extractor/BUILD.bazel b/swift/extractor/BUILD.bazel index 984c205d97b..f711b3b9d2b 100644 --- a/swift/extractor/BUILD.bazel +++ b/swift/extractor/BUILD.bazel @@ -1,5 +1,4 @@ load("//swift:rules.bzl", "swift_cc_binary") -load("//misc/bazel/cmake:cmake.bzl", "generate_cmake") load("//misc/bazel:pkg_runfiles.bzl", "pkg_runfiles") swift_cc_binary( diff --git a/swift/logging/tests/assertion-diagnostics/BUILD.bazel b/swift/logging/tests/assertion-diagnostics/BUILD.bazel index e51459e1e17..ea31eac779a 100644 --- a/swift/logging/tests/assertion-diagnostics/BUILD.bazel +++ b/swift/logging/tests/assertion-diagnostics/BUILD.bazel @@ -1,5 +1,4 @@ load("//swift:rules.bzl", "swift_cc_binary") -load("//misc/bazel/cmake:cmake.bzl", "generate_cmake") swift_cc_binary( name = "assert-false", diff --git a/swift/ql/lib/codeql/swift/dataflow/DataFlow.qll b/swift/ql/lib/codeql/swift/dataflow/DataFlow.qll index b267b74d328..670a94babd9 100644 --- a/swift/ql/lib/codeql/swift/dataflow/DataFlow.qll +++ b/swift/ql/lib/codeql/swift/dataflow/DataFlow.qll @@ -5,6 +5,7 @@ module DataFlow { private import internal.DataFlowImplSpecific private import codeql.dataflow.DataFlow - import DataFlowMake + private import codeql.swift.elements.Location + import DataFlowMake import internal.DataFlowImpl1 } diff --git a/swift/ql/lib/codeql/swift/dataflow/TaintTracking.qll b/swift/ql/lib/codeql/swift/dataflow/TaintTracking.qll index 2dcb4e239c6..e46cd18abb4 100644 --- a/swift/ql/lib/codeql/swift/dataflow/TaintTracking.qll +++ b/swift/ql/lib/codeql/swift/dataflow/TaintTracking.qll @@ -7,6 +7,7 @@ module TaintTracking { private import codeql.swift.dataflow.internal.DataFlowImplSpecific private import codeql.swift.dataflow.internal.TaintTrackingImplSpecific private import codeql.dataflow.TaintTracking - import TaintFlowMake + private import codeql.swift.elements.Location + import TaintFlowMake import codeql.swift.dataflow.internal.tainttracking1.TaintTrackingImpl } diff --git a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImpl.qll b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImpl.qll index 532f0def116..f02fe9635ae 100644 --- a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImpl.qll +++ b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImpl.qll @@ -1,3 +1,4 @@ private import DataFlowImplSpecific private import codeql.dataflow.internal.DataFlowImpl -import MakeImpl +private import codeql.swift.elements.Location +import MakeImpl diff --git a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImpl1.qll b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImpl1.qll index 2bbc565daa6..9b92f961e6f 100644 --- a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImpl1.qll +++ b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImpl1.qll @@ -285,6 +285,8 @@ deprecated private module Config implements FullStateConfigSig { int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) } + int accessPathLimit() { result = 5 } + FlowFeature getAFeature() { result = any(Configuration config).getAFeature() } predicate sourceGrouping(Node source, string sourceGroup) { diff --git a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImplCommon.qll b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImplCommon.qll index 969275ffa07..eae4f58a86b 100644 --- a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImplCommon.qll +++ b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImplCommon.qll @@ -1,3 +1,4 @@ private import DataFlowImplSpecific private import codeql.dataflow.internal.DataFlowImplCommon -import MakeImplCommon +import codeql.swift.elements.Location +import MakeImplCommon diff --git a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImplConsistency.qll b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImplConsistency.qll index e9de11852a6..3e17bc87803 100644 --- a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImplConsistency.qll +++ b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImplConsistency.qll @@ -8,6 +8,6 @@ private import DataFlowImplSpecific private import TaintTrackingImplSpecific private import codeql.dataflow.internal.DataFlowImplConsistency -private module Input implements InputSig { } +private module Input implements InputSig { } -module Consistency = MakeConsistency; +module Consistency = MakeConsistency; diff --git a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImplSpecific.qll b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImplSpecific.qll index e6941afd9d9..4273414c724 100644 --- a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImplSpecific.qll +++ b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImplSpecific.qll @@ -15,7 +15,7 @@ module Public { import DataFlowPublic } -module SwiftDataFlow implements InputSig { +module SwiftDataFlow implements InputSig { import Private import Public diff --git a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPublic.qll b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPublic.qll index abbb400904a..16a5a2c19ca 100644 --- a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPublic.qll +++ b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPublic.qll @@ -26,7 +26,7 @@ class Node extends TNode { * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - predicate hasLocationInfo( + deprecated predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) diff --git a/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll b/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll index 1151a7aeec8..53f51433dac 100644 --- a/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll +++ b/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll @@ -11,7 +11,7 @@ private import DataFlowImplSpecific::Public private import DataFlowImplCommon private import codeql.swift.dataflow.ExternalFlow -module Input implements InputSig { +module Input implements InputSig { class SummarizedCallableBase = Function; ArgumentPosition callbackSelfParameterPosition() { result instanceof ThisArgumentPosition } @@ -102,14 +102,14 @@ module Input implements InputSig { } } -private import Make as Impl +private import Make as Impl private module StepsInput implements Impl::Private::StepsInputSig { DataFlowCall getACall(Public::SummarizedCallable sc) { result.asCall().getStaticTarget() = sc } } module SourceSinkInterpretationInput implements - Impl::Private::External::SourceSinkInterpretationInputSig + Impl::Private::External::SourceSinkInterpretationInputSig { class Element = AstNode; @@ -222,7 +222,7 @@ module Private { module External { import Impl::Private::External - import Impl::Private::External::SourceSinkInterpretation + import Impl::Private::External::SourceSinkInterpretation } /** diff --git a/swift/ql/lib/codeql/swift/dataflow/internal/TaintTrackingImplSpecific.qll b/swift/ql/lib/codeql/swift/dataflow/internal/TaintTrackingImplSpecific.qll index fd00fa5e8f1..d2a9f6ae5f1 100644 --- a/swift/ql/lib/codeql/swift/dataflow/internal/TaintTrackingImplSpecific.qll +++ b/swift/ql/lib/codeql/swift/dataflow/internal/TaintTrackingImplSpecific.qll @@ -4,8 +4,9 @@ private import codeql.dataflow.TaintTracking private import DataFlowImplSpecific +private import codeql.swift.elements.Location -module SwiftTaintTracking implements InputSig { +module SwiftTaintTracking implements InputSig { import TaintTrackingPrivate import TaintTrackingPublic } diff --git a/swift/ql/test/query-tests/Security/CWE-311/CleartextStorageDatabase.expected b/swift/ql/test/query-tests/Security/CWE-311/CleartextStorageDatabase.expected index d3d3e9ec03e..0542196fe2f 100644 --- a/swift/ql/test/query-tests/Security/CWE-311/CleartextStorageDatabase.expected +++ b/swift/ql/test/query-tests/Security/CWE-311/CleartextStorageDatabase.expected @@ -164,7 +164,6 @@ edges | testCoreData2.swift:98:18:98:18 | d [value] | testCoreData2.swift:98:18:98:20 | .value | provenance | | | testCoreData2.swift:98:18:98:20 | .value | testCoreData2.swift:98:2:98:2 | [post] dbObj [myValue] | provenance | | | testCoreData2.swift:101:10:101:10 | bankAccountNo | testCoreData2.swift:103:13:103:13 | e | provenance | | -| testCoreData2.swift:103:13:103:13 | e | testCoreData2.swift:70:9:70:9 | self | provenance | | | testCoreData2.swift:103:13:103:13 | e | testCoreData2.swift:104:18:104:18 | e | provenance | | | testCoreData2.swift:104:2:104:2 | [post] dbObj [myValue] | testCoreData2.swift:104:2:104:2 | [post] dbObj | provenance | | | testCoreData2.swift:104:18:104:18 | e | testCoreData2.swift:70:9:70:9 | self | provenance | |
  • OWASP: -XSS + Unvalidated Redirects and Forwards Cheat Sheet.